ImportExport
6.0.12
OTRS AG
https://otrs.com/
GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007
Build for OTRS::ITSM 6 patch level 12.
Build for OTRS::ITSM 6 patch level 11.
Build for OTRS::ITSM 6 patch level 10.
Build for OTRS::ITSM 6 patch level 9.
Build for OTRS::ITSM 6 patch level 8.
Build for OTRS::ITSM 6 patch level 7.
Build for OTRS::ITSM 6 patch level 6.
Build for OTRS::ITSM 6 patch level 5.
Build for OTRS::ITSM 6 patch level 4.
Build for OTRS::ITSM 6 patch level 3.
Build for OTRS::ITSM 6 patch level 2.
Build for OTRS::ITSM 6.
Build for OTRS::ITSM 6 rc1.
Build for OTRS::ITSM 6 beta3.
Build for OTRS::ITSM 6 beta2.
Build for OTRS::ITSM 6 beta1.
The ImportExport package.
Das ImportExport Paket.
El paquete ImportExport.
Az ImportExport csomag.
6.0.x
</br>
<strong>ATTENTION</strong>
</br>
</br>
If you uninstall this package, all database tables that were created during installation will be deleted.
All data from these tables will be irrevocably lost!
</br>
</br>
((enjoy))</br>
</br>
</br>
<strong>ACHTUNG</strong>
</br>
</br>
Bei der Deinstallation werden die von diesem Paket angelegten Datenbank-Tabellen gelöscht.
Alle darin enthaltenen Daten gehen unwiderruflich verloren!
</br>
</br>
((enjoy))</br>
</br>
<br/>
<strong>ATENCIÓN</strong>
<br/>
<br/>
Si usted desinstala este paquete, todas las tablas de la base de datos que se crearon durante la instalación
del mismo, se eliminarán. ¡La totalidad de los datos que contenían dichas tablas, se perderá irrevocablemente!
<br/>
<br/>
((enjoy))<br/>
<br/>
</br>
<strong>FIGYELEM</strong>
</br>
</br>
Ha eltávolítja ezt a csomagot, akkor a telepítés során létrehozott összes adatbázistábla törlésre kerül.
Az ezekben a táblákban lévő összes adat visszavonhatatlanul el fog veszni!
</br>
</br>
((enjoy))</br>
</br>
# create the package name
my $CodeModule = 'var::packagesetup::' . $Param{Structure}->{Name}->{Content};
$Kernel::OM->Get($CodeModule)->CodeInstall();
# create the package name
my $CodeModule = 'var::packagesetup::' . $Param{Structure}->{Name}->{Content};
# discard internally stored object, so that the next access to object creates them newly
$Kernel::OM->ObjectsDiscard(
Objects => [$CodeModule],
ForcePackageReload => 1,
);
$Kernel::OM->Get($CodeModule)->CodeUpgradeFromBefore_2_0_3();
# create the package name
my $CodeModule = 'var::packagesetup::' . $Param{Structure}->{Name}->{Content};
$Kernel::OM->Get($CodeModule)->CodeUpgradeFromLowerThan_4_0_91();
2018-09-28 19:01:53
opms.otrs.com
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uWpmXEhISEhIiJMbBYCeJmevuHmASVr13N/ff/To0X//+99d3R3PExsbK62h3u2USiUz4wCPQHQJAICfsKo3AHQjNw8qybq2xjksZWZm9kS1L774Yk9UC6Dbse4SAAA/kW6EOnyKEADA5SIiIhQ2IiIiXN0vALgZkbuEm8sLL7wg/xcAbJG7BACe4tKlS67uAgDgR54UXdLr9YcOHTp16pRWq21ubu7bt+/AgQNHjhw5YcIEPz8/eTfHAwcvvPCC1c6+vr79+/e/5ZZb7r777sDAQKv9TSbT4cOHi4qKqqqqWlpa+vTpM3DgwKFDh44ZM2bQoEEONlpeXv7tt9+eP3++oaHB399/6NChEydOHDJkiCO97cJbAIBOIboEAABuTr34l3j7g+qVQ3Y+j4kunT9//oMPPqivr5dLGhoaGhoazp8/f+DAgUWLFjkSoOmQwWDQarVarfbYsWPLli2zfGCQXq//3//937KyMrmkqamprKysrKwsPz/fwX+O//73v7/66it5/nl9fX1RUVFRURH/mgHATZhMJkF0CQAAwNP0+uiYmw/NM6JLZWVl77zzjtFojIyMvPvuu4cMGeLv79/U1HThwoUDBw5oNJp33nnn17/+dXR0tGjrjHf4l5DfamhoKCsr+/zzz2tqavbu3fvAAw/I+/z73/8uKysLCAi45557br311sDAQIPBcPny5XPnzhUVFTkyioKCgn//+99eXl6TJ08eN25caGhoc3NzaWnpt99+6/ipcPN/TwDg6chdAgAA6JW4m+5RHhBdMhqNH330kdFovPPOO+fMmSOvtBoYGDh69OhRo0b961//OnLkyIcffrh8+XJvb+8baSsgIGDUqFH9+vV76623SktLLd86fvy4EGLBggUjRoyQSry9vaOjo6Ojo6dOndphzQ0NDXv27BFCzJ49e9y4cXJzt99+++23334jfQYAdCOiSwAAdBej0XiDN2gAPIUHRJe+//57nU4XFhY2e/Zs24f4eHl5zZ49W6PRSNPZ7rzzzhtvUVpEqaWlxbKwrq5OCBETE9O1Oo8eParX62NiYuTQUk+QYrF//OMfDx8+XFhYePnyZYPB8Mc//lEIodFojhw58sMPP9TU1CgUipCQkJEjR06ZMsXf39+2hhdeeOHIkSMFBQVardbLyysmJiYxMVE6LUePHpXKzWZzTExMUlKS7ZpTNTU1arX67NmztbW1Pj4+KpVq0qRJo0aNknf47//+b51O99hjj6lUKqkkLy/v6NGjQog77rhj/vz5UuHFixezs7NDQ0PT09PlY8vKytRqdVlZWVNTk7+//+DBgydPniylrTlyHmy1tLR8/PHHJSUlXl5eKSkpEydO7ORZB9CrEF0CcHNSKBTy6g29Rl5eXmpqamBg4B133LFv3z5Xd8eNSF9z3fsXf/7559euXSu9NpvN5eXldXV1qampx44dk/fZv3//m2++2dDQ8M9//tPX13fr1q3SlX975VbVwvlu/PZQvjUrLCw8fPjw5cuXFQpFVFTUlClThg8fbtXcjdzryXlJlglKnU1W+uSTTw4dOhQcHPzoo49aLsRcX1//5ptv1tbWTpgw4f777/fEoTmBB0SXSkpKhBAJCQnthb29vb0nTZr0ySeflJSUdEt06eLFi0KI4OBgy8KgoKCrV6+eOXNm9OjRXajz7NmzQoixY8feePc69Omnnx46dMiqcNOmTZably9fvnz5cnFx8W9/+9t+/fpZ7bxr1y7L+XqnT58+f/78b3/724KCgu+++04uP3v2bHl5+WOPPaZUKi0Lt27dqtfrpc3W1tZz586dO3fu5z//+b333isVDh8+vLCw8Ny5c3J06dy5c1YvhBBS+tiwYcPkkoKCgp07d1ouXFVcXHzixIn7779//PjxjpwHKzU1Ne+9915VVVW/fv0efPBBy7YA3JxsrwacwGw2V1ZWent7h4WFEdgC0KNUKpV0rWulU4GGxsZG2wvInhYUFCT93Ou41NRUyziFc3Shn85nNpu79+vm9OnTNTU18uaxY8dKS0vnzp1rtYTIo48+evDgQWlxW7VanZycLK2r2165EKKmpqa0tNQl386Q3cjtoWTnzp0FBQXyZmlp6blz52bOnGn503633+t1QUpKSlVV1YULF7Zt2/arX/1KCkEYjcatW7fW1tYOHjw4JSXFQ4fmBB4QXaqoqBDXhxhsSe9Ke96IxsbG8+fPf/7550IIqwlrY8eOzc/P//jjj8+ePTty5MioqKiAgADHa66qqhJCxMTEHD9+XK1WV1VVeXt7h4eHjxs37s477+zeD/fDhw9Pnjw5Li5OqVTK2V5Dhw4dP3784MGDAwMD9Xp9RUXF3r17NRpNfn7+9OnTrWooKCi4++674+LigoODL126tH37dq1W++6779bW1tqW5+fnz507VzqwtrZ227Zter3+9ttvnzx58oABA5qamo4fP75v3779+/ePGDFCWnx92LBhUnRp8uTJQojLly/X1tYGBgaazeba2trLly8PHDhQXIs0yX/6ysrKXbt2mc3mcePGTZkypX///jqdLj8//8iRIzt37oyJiQkPD+/wPFj64Ycftm3b1tjYGB4e/stf/tJyEXcAcCaTySRdRlt9jgFAt6usrLQq2blz56xZs4RFgEm6NH311VdXr179+eefnzhx4r/+67/eeeed+fPna7XamTNnHjp0KDw8/MEHH3zllVekMFN4eHhra2t1dbUQQqlU+vr6Xrp0Sa7qiy+++OUvfzl48OCPPvpIuho0GAz/7//9v7y8PLPZPG/evLVr10rPgJb2r6mpefrpp7dt2/a73/1u/fr1Up319fXyNXOHsbAhQ4ZcuHBBCLFgwQLLQzrVrp3zIIRYvnz57t27y8vLJ0+evGrVqnvuuafDfsbHxwshLO/G22R1uNVmm+22d96am5ufffbZ999/38vLa926dX/+859PnTolN7R37960tLSqqirLGFyn6pdt2rQpOTlZ3hw7dmybP6u3tLTIl9yTJ09uaGiwXy6ESExMzM7Ofvnll+2fNPSoLt8eWtYwfvz4u+++OyQk5OrVq19//XVhYeFnn302dOjQsLAw0R33evIT4W8kqcfb2zs1NfXNN9+8cOHCzp07Z8+eLYT49NNPy8rKQkJCUlNTbVNePGVoTtDGLbe7aWxsFDaZRFakd6U9u+CFa1555ZWtW7fqdLrbb7/95z//ueU+06ZNu+OOO1pbWw8fPvyPf/xj/fr1r776qhRscqSJpqYmIURRUdEHH3yg0WgMBkNzc/OFCxe2b9/+wQcfOP5j0Qs2bPeZOHFicnLywIEDLUMqS5cuvf3220NCQry9vf39/UeMGLFo0SIhhOUXjOzuu+9OSkoaMGCAr69vdHT0zJkzhRA6na7Ncstso2+++aalpeWOO+544IEHVCqVn59fSEjI5MmT77vvPmHxVSoFjM6fP280GoVFFEkqlzaNRuP58+eFRXTp22+/NZlMsbGxc+fOHTBggLe394ABA+bNm3fLLbcYjcZvvvnGkfMgO3To0DvvvNPY2Dhy5Eir5wMCgJNJH4ZtflgBQE+bOXOm1bWotGk0Gjdv3jxr1qyioqLN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i2NjY1tbW99///1jx47dyMAB4EYwMw5Ab2WV/oPeKjY21moJnu6iVCqZGdcLWN3E7dixo6SkxPImrlvu9aR0of/7v/9zPBJtq7KyUrpJl54EFxMTk5SUZDab//nPf1o9ddHjhtbTPCB3SQgRExOTlpa2bdu2iooKKZpjKSAg4MEHH4yJienGFm+77bbQ0NArV66UlJRIEUqtVqvVaqWl9Wy7N23aNPsVKhSKhQsXvvXWW/X19Xl5eZZv3XHHHdLy3j1n2rRp//jHP86cOSM9000SHx//3XffdW9DQUFBDz300NatW0tKSqQpb3YMHz5citdGRETID3cMCAgIDw+XflWzXNJbCDFo0KCUlJSdO3cePnzY8pcfhUIxc+ZMKYLWKT4+PqmpqR988MHJkyc//vjjlpYWz12fH0C3MBgMNTU10pNindku0SUAvRXrMd88MjMze6LaF198sSeqhZNNnDixoKDA6iZuxowZ8lzdbrnXGz16dH5+/mefffbZZ59JJVbLeLe3qrdcrtfrP/zww9bW1vHjx//sZz+TChMSEi5cuFBcXLxt27bf/OY3VlOC3GRo7sAzoktCiCFDhqSnpx86dKikpESr1TY3N/ft2zcsLCw2NnbChAndnh7m5eV111137dy588CBA1J06fHHHz958uT58+erqqqkZ5/169cvIiJizJgxd9xxhyO3BEql8j//8z/z8/NLSkpqa2t9fX0HDRo0fvz47prQZ8ett9760EMP7d+//+LFi15eXmFhYePHj4+Li+v26JIQIjo6+ve//730l7p8+bL0pIwBAwbceuutVhleMTExUoKfVRRp+PDhly5d8vHxsUodFEJMnDgxIiLi4MGDFy5caGpq8vf3Hzx48OTJk7scW/T29l60aNFHH310/PjxTz75pLm52fZRkQBuHgaD4erVq9KnljPbJboEAF0QEREhLVxiSf6dEoD7mDlzZnh4eGFh4eXLlxUKRVRU1JQpU0aMGGG5z43f6/3iF78wm83FxcVXr15tb9Vm+z799NPLly+Hh4fPmDHDsnzu3LmXLl2qrKz89NNP586d64lDc4IbeiIpAAC9iV6vr62t9fHx6aH0/vZcvHixvr4+PDxcXgAS6Ky4uLijR4+67RUnXCI/Pz89Pb2wsNDVHQF6SkJCQmZmZmJioqs7gnZJKTZumGhz43rx0LrGY3KXAADoaX5+fgMHDnR+u6zqDQAAAI/GhSwAAC7GzDgAAAB4NC5kAQBwMaJLAAAA8GhcyAIA4GJElwCgl2ERNAA3Gy5kAQBwMSm65O3t7eqOAEAvp1AoFApF99b5/PPPy6/NZnNZWVlxcfGdd95puc/+/fuXLFkyf/58hULh5+eXl5dnv9yqWsBzvfDCC7113etePLSuYVVvAABcyWQySc9vJXcJgBOoVKqLFy/2UOWNjY39+vXrocq7hdls7t7o0unTp2tqauTNY8eOlZaWzp07t6ioyHK3Rx999ODBg6GhoUIItVqdnJxcX19vp1wIUVNTU1paOnz48G7sLQD0HC5kAQBwJSlxSRBdAuAUlZWVlptSLs/GjRujo6OtcmeWL18+cuTIgICApKSkffv2yTtv2LAhKChIrVbn5uYGBQVJh2i12okTJwYEBERERDzxxBONjY2WrcTHx8fHx3fYN8U1bW7a9kfeR6fTLVu2LCgoKCMjQypvbm5OT0+PiIhQqVRbtmyJjY21bGjv3r2OjNdO/bJNmzYlJyfLm2PHjp03b55tAKulpUUKIQkhJk+e3NDQYL9cCJGYmJidnd3hSQMAN8GFLAAArsSiSwBcSMqdrKioKC4u3rp1a2pqqvzWunXrSkpKdDrdypUr58yZI+9sNBo3b948a9asoqKizZs3S4dkZGRkZWXp9fqzZ88mJiZaRWHMZrN0bIedSUhIUKvV0qZarb7rrrvkA237I3dpwYIFU6dO1Wg0M2bMkMpXrVql1+uLiopKS0sDAgKqq6stG9q1a1dJSUmH47VTv2z37t233XZbh0MrKyvrVLkQYtSoUbt37+6wZgBwEwpHPugBALgZSPc/PbEqhx3Nzc1lZWU+Pj7Dhg1zWqPofeLi4o4ePcpCwrCUn5+fnp5eWFgohIiKiqqoqLB8NzIyUqPRCCEUip/uCOTXp0+ffuqpp9RqdUtLS1xcXH5+vlQu72D1YsCAAZYRnLCwsKqqqi70effu3evXr9+zZ48QIikpacWKFUlJSXb6I3Wgrq4uMDDQsh6VSnX8+HGlUmnbhEKhMBgMPj4+joy3vfplISEhGo3G9l3Ls2pn085utbW1gwcP1ul0HZ+1m1hCQkJmZmZiYqKrOwKA3CUAAK7RarVnz561XEHDCfz8/KKioiIiIpzZKICbjUajkROIpBdSaKk9ixYtmjJlyokTJ3Q63bZt2zqsf/z48WYLXQstCSGSk5Obmpry8/Pz8/Obm5ul0FKH/bEN7rS2ttppRQotWeps/bIu/1TfXizYspw8AAAehOgSAAA/kn9JdmajXl5e/fr1c/N1cAHcbDQazYQJE4KDg4uLi19//fUO909JScnJySkvL5fXkrPk4LpLkjVr1qxevXr16tVr1qzpcn8WLlyYlZUlhNBqtXl5eUuWLLG/f2frlw0ZMsQqKaxN/v7+8oy/goKC4OBg6US1Vy6EKC8vZ0lvAB6E6BIAAD+SrumdHF0CAGcKDw+33JQ+8Wz/m52dvWzZMqVSuXLlyrS0NHFtfWth8SFp+Wn55JNParXaqVOnKpXK6dOnv/TSS5atGI1Gx9NwEhMTpYdp3nvvvXJhm/2x/K/VpOasrCydThceHj5mzJjt27evX7++C+O1U78sOTn55MmTVqfU8iip8N133502bZpCoQgLC5s3b96OHTt8fX3tlAshTp48OX36dAdPGgC4HOsuAQDwo4qKioaGhvDw8JCQEFf3Begc1l2CLct1l9BDTp069dprr73xxhvdXvPjjz/+9NNPk75kH+suAe6D3CUAAH7kkplxAADPFRsb279//56oWalUEloC4EGILgEA8CMpuuTlxZcjAMBRmZmZPVHtiy++2BPVAkAP4QIaAIAfkbsEAAAAdAHRJQAAfkR0CQAAAOgCoksAAPyIZ8YBAAAAXeDj6g4AAOAupOiSk9ddamxsFEL06dPH29vbme0CAAAA3YXcJQAAfuSSmXGXLl3SaDQGg8GZjQIAAADdiNwlAAB+5JLcJT8/P4VCwYPqAHgQKQovReRt32qz3P5RPVdPj2qvJ107PwDg0biWBQBACIvbACcHeqKiooYOHern5+fMRgHctFQq1Y1XYic+0rW3eq6eHtVeT7ql80FBQV3pEwC4CNElAACEuJa4JFjVG0CvVllZKb9WXNPm5vLly0eOHBkQEJCUlLRv374Oa965c6fl4ZKGhoalS5cGBgaOGzeuqKjIkR52oZ74+Pj4+HhHKs/Ly5MyRoODg6dMmRIbGyuuDXzDhg1BQUFqtTo3NzcoKCgvL086pLPnoVPjkko2btwYHR3t5+cnN6pUKuvr663+IgDgzoguAQAghMWiS1zHA7hJmM3mhIQEtVotbarV6rvuuktOrlm3bl1JSYlOp1u5cuWcOXM6rG3mzJm2iTnPPvusSqWqrq7es2fPjh07HOlVF+oxm80O5gSlpaXdf//9BoOhsrLymWee0el04trnv9Fo3Lx586xZs4qKijZv3pyamiod0tnz0KlxSSUVFRXFxcVbt26VG62urpbH5T65WgBgB/N+AQAQQgi9Xn/+/HkvL68RI0a4ui9Ap8XFxR09etRoNLq6I3Aj+fn56enphYWFQoioqKiKigrLdyMjIzUaze7du9evX79nzx4hRFJS0ooVK5KSkoQQp0+ffuqpp9RqdUtLS1xcXH5+vtVdQ3vrB1mVK5XKM2fOKJVKIcSVK1cGDhzYtXWXulyPlR07djzwwAMGg2HgwIFhYWFvv/32xIkTLZuzetFd58FOuWVJe6/RnoSEhMzMzMTERFd3BAC5SwAACCGu/YDM6toAeiWNRiNnwUgvNBqNECI5ObmpqSk/Pz8/P7+5uVkKLQkhFi1aNGXKlBMnTuh0um3btnVLH/R6vcvrmT17tl6vr6+vLywsfPjhh5OTk+3v3xPnoQu669QBQM/hGhoAACGurbvEtDgAN5s1a9asXr169erVa9askQs1Gs2ECROCg4OLi4tff/31Lle+ePHiv/zlLwaDoaKi4uWXX+6hehxfdyksLOy7777z8vKKiYkZNWpUQ0OD/f276zx0ga+vb15ensFg2LVr13333efMpgGgC4guAQAgBLlLAG4O4eHhViWJiYkmk8lsNt97771yYXZ29rJly5RK5cqVK9PS0oRF8F1en85qobo2y9evX19eXh4aGpqSkvLII48IB4L4XajHaDQ6OIls2LBhR44ciY2NVSgUqampW7dulauyHGC3n4f2yi2btuqGtAxTaGhoTk5Obm6uI6MDABdiNi8AAEIIUV9ff/Hixb59+8bExLi6L0Cnse4SbFmuuwT0Sqy7BLgPfqEFAOBHvr6+vr6+ru4FAAAA4GF8XN0BAADcQmBgYGBgoJMbra6ubmxsDA4ODg4OdnLTAAAAQHchdwkAAJfR6/VNTU3MZgJwU4mIiFDYiIiIcHW/AABdR+4SAAAuI8WVvL29Xd0RAHCeS5cuuboLAIBuRu4SAAAuYzKZBNElAAAAeDiiSwAAuIyUu+TlxdcxAAAAPBiXswAAuAy5SwAAAOgFiC4BAOAy5C4BAACgF+ByFgAA15ASlwS5SwDQW0jPv+veOp9//nn59Xvvveft7a1QKPz8/PLy8uTy/fv3L1myZP78+VZvtVduVS0A3DieGQcAgGtIiUs9cSsCAO1RqVQXL150cqONjY39+vVzcOegoKC6uroe7U/PMZvN3fuRfvr06ZqaGnnz8ccf/+STT1JSUvLy8lJTU/V6vVT+6KOPHjx4MDQ0VAihVquTk5Pr6+vtlAshampqSktLhw8f3o29BXAzI3cJAAAhhNBqtRcvXmxubnZai1LuEtPiADhTZWWl5WZzc3N6enpERIRKpdqyZUtsbKxUbjAYVq5cOXLkyNjY2BUrVkhRDCkavmHDhqCgILVanZubGxQUlJeX1165EEKr1U6cODEgICAiIuKJJ55obGyU6pcO2bhxY3R0tGVOjVKprK+vV1wj9zMvL8/Pz0+hUAQHB0+ZMkXupyQ+Pj4+Pr7DsVtVa7W5fPnykSNHBgQEJCUl7du3z3IfnU63bNmyoKCgjIwM++dNsnfvXqtxdbZ+2aZNm5KTk+XN6urqlJQUIcSsWbPGjRsnl7e0tEghJCHE5MmTGxoa7JcLIRITE7Ozszs8aQDgIK5oAQAQQoimpqb6+np5tpoTSLlLTIsD4EKrVq3S6/VFRUWlpaUBAQHV1dVS+fPPPx8VFVVSUnLq1KmoqChpFpXZbBZCGI3GzZs3z5o1q6ioaPPmzampqe2VCyEyMjKysrL0ev3Zs2cTExPl6Il0SEVFRXFx8datW6WdhRBSB8zXyP1MS0u7//77DQZDZWXlM888o9PpLEdhtXN7zGZzQkKCWq2WNtVq9V133SUfuG7dupKSEp1Ot3Llyjlz5lj2c8GCBVOnTtVoNDNmzLB/3iS7du0qKSmxHFdn65ft3r37tttusx3Ll19++emnn8qbZWVlbQ65vXIhxKhRo3bv3t3euwDQWQpHPogBAOj16uvrjUZjQECAj4+Tpo3X19dfvHjR398/OjraOS2iF4uLizt69KgUsgQk+fn56enphYWFQoioqKiKigrLdyMjIzUajUqlOn78uFKptDp20KBBJ0+e7N+/vxCipqZm9OjR0nw6heLH2werF+2VDxgwwDLyEhYWVlVVJb2W97TzWrZjx44HHnjAYDAMHDgwLCzs7bffnjhxYhfOye7du9evX79nzx4hRFJS0ooVK5KSkoQQp0+ffuqpp9RqdUtLS1xcXH5+vmV/6urqAgMDLetp77xJ+xsMBumrRB5LZ+uXhYSEaDQaq3e/+OKLn/3sZ4MGDbJs1PKk2f45bHerra0dPHiwVZzO4yQkJGRmZiYmJrq6IwDIXQIAQAghRGBgYEhIiNNCS4IHxgFwIo1GIyf4SC80Go0QorW1tb1DuuVH6PHjx5styKElB8nrCs2ePVuv19fX1xcWFj788MOWk8U6JTk5uampKT8/Pz8/v7m5WQotCSEWLVo0ZcqUEydO6HS6bdu2WR1lG/qxc96EELZfJZ2tX2b7V3jnnXeGDBliGVpqU3uxZsty8gwAdCOuaAEAcA1pFh4z4wC40MKFC7OysoQQWq02Ly9vyZIlUnlaWtqmTZukkFB2dvbDDz/ctfpTUlJycnLKy8sdn3fs6+ubl5dnMBh27dp13333SYVhYWHfffedl5dXTEzMqFGjLNcPEg6vuyRZs2bN6tWrV69evWbNGrlQo9FMmDAhODi4uLj49ddf77CS9s5bezpbv2zIkCGWSWcffPDB7bfffuuttwohLNel8vf3l2f8FRQUBAcHSye8vXIhRHl5OUt6A+hGRJcAAHANcpcAOF94eLjlZlZWlk6nCw8PHzNmzPbt29evXy+Vr127VqvVxsTExMTEXLlyZe3ateJaOMNyVWzLF7blQognn3xSq9VOnTpVqVROnz79pZdesj3E6nBpuaLQ0NCcnJzc3FypcNiwYUeOHImNjVUoFKmpqVu3brUchdFodDwNJzEx0WQymc3me++9Vy7Mzs5etmyZUqlcuXJlWlqabd+sVhlv77y1N67O1i9LTk4+efKkvLl06dK4uDjbnd99991p06YpFIqwsLB58+bt2LHD19fXTrkQ4uTJk9OnT3fwpAFAh1h3CQAA16iqqrp69eqAAQPaXLkD6BTWXYIty3WX4KFOnTr12muvvfHGG91e8+OPP/700097evoS6y4B7oPfSwEAcA1ylwAA9sXGxkprq3c7pVLp6aElAG6FK1oAAFyDdZcAAB3KzMzsiWpffPHFnqgWwE2L6BIAAK5B7hIAAAB6B65oAQBwDSm6RO4SAAAAPJ2PqzsAAIDrmUwmg8GgUCj8/Pyc2aggdwkAAACej+gSAACiublZo9H06dNn8ODBTmt02LBhRqPRx4fvYgAAAHg2rmgBAPgxjUihUDizUS8vLxKXAAAA0AtwUQsAgDCbzYJJagAAAECXcBkNAIBrcpcAAN3FhR/gCoWCrw8AILoEAAC5SwBuFiqV6sYraWxsdHznoKCgnq5HXPsYd1Cn2u2Qg01313kAAPfEZTQAAOQuAbhZVFZWWm42Nzenp6dHRESoVKotW7bExsZK5VI+jk6nW7ZsWVBQUEZGhlSu1WonTpwYEBAQERHxxBNPWIZFli9fPnLkyICAgKSkpH379kmFSqWyvr5ecY28s5162tRePUKInTt3WhVKmxs2bAgKClKr1bm5uUFBQXl5eR22Gx8fHx8f78hpbGhoWLp0aWBg4Lhx44qKiizf6tHzAABui+gSAADkLgG4Sa1atUqv1xcVFZWWlgYEBFRXV0vlRRFzQAAAIABJREFU0qfiggULpk6dqtFoZsyYIZVnZGRkZWXp9fqzZ88mJibKUSchxLp160pKSnQ63cqVK+fMmSMVShWar5F3tlNPm9qrRwgxc+ZMqxJp02g0bt68edasWUVFRZs3b05NTe2wXdvK2/Pss8+qVKrq6uo9e/bs2LHD8q0ePQ8A4LYUnUoiBQCgV9JqtTqdLjQ0dODAga7uC9AVcXFxR48eNRqNru4I3Eh+fn56enphYaEQIioqqqKiwvLdyMhIjUajUqmOHz+uVCptD1coFHV1dYGBgZaFAwYMkCNQQoiwsLCqqiohxOnTp5966im1Wt3S0hIXF5efny/fZSgUbdxxtFePHW3W09678qbViy602yalUnnmzBnpvF25cmXgwIFSK044D7CUkJCQmZmZmJjo6o4AIHcJAIBrM+PIXQLQW2k0GjlrRnqh0WiEEK2trXaOsgotCSHGjx9vtiCHQhYtWjRlypQTJ07odLpt27a1V6Fer7dfj4PkejrrBtvtsDNOPg8A4D64jAYAwAXRpfr6+pqampaWFqe1CAC2Fi5cmJWVJYTQarV5eXlLliyxv39KSkpOTk55ebn0sSnTaDQTJkwIDg4uLi5+/fXXLd/y9fXNy8szGAy7du2677777NdjR5v1dJb9dh1fd2nx4sV/+ctfDAZDRUXFyy+/LJc74TwAgHsiugQAgAuiS7W1tZcvX25ubnZaiwAghAgPD7fczMrK0ul04eHhY8aM2b59+/r166VyaeVp21Won3zySa1WO3XqVKVSOX369Jdeekkqz87OXrZsmVKpXLlyZVpamrB4TsLWrVtTU1NDQ0NzcnJyc3Pt12NHm/XInbR6YdkBR/ovMRqNDi4bsn79+vLy8tDQ0JSUlEceeURuxQnnAQDcE+suAQAgysrKmpubVSqV7TSQHqLT6Zqbm0NCQvz9/Z3TIno31l2CLct1l4BeiXWXAPfh4+oOAADges7PXerfv7/T2gIAAAB6FDPjAABgVW8AAACg67iMBgCA6BIAuF5ERITCRkREhKv7BQDoGDPjAAAQ0iqERJcAwIUuXbrk6i4AALqIy2gAwM3ObDYTXQIAAAC6jMtoAMDNTpoWJ4guAQAAAF3CZTQA4GbHoksAAADAjeBKGgBwsyO6BAAAANwIVvUGAED069fPx4fvRABwRwqFQlx7/IIT2nJOQwDQy/A7LQDgZtenT5+oqChnPvRap9OdOXOGpyMBcD6VSnXjlTQ2Njq+c1BQ0A3W48xwj+Nt2RkXANyEiC4BAOBsRqPRbDZLv8YDgDNVVlZabjY3N6enp0dERKhUqi1btsTGxkrlCoVCoVDodLply5YFBQVlZGRI5VqtduLEiQEBAREREU888YRleGj58uUjR44MCAhISkrat2+fVKhUKuvr6xXXyDvbqac9Fy5cSEhICA0NfeSRRxoaGiz7uXPnTiHEzp07FQpFTEyMfEh8fHx8fLyDZ0Y63OqTWSrZuHFjdHS0n59fXl6e/XEBwE2LWQAAADibtNKTt7e3qzvSFWfOnPnhhx9c3QtYq6urM5vNX3zxhas7Ajdy7Nix1tZW+/usWrVKr9cXFRUFBgZ+8skn1dXVUrkUAV+wYEFaWtqGDRsKCgqk8oyMjKysrMmTJ7e0tOzZsycjI+ONN96Q3lq3bt3GjRsNBsP+/fvnzJlTV1cnhKiurm5zrpmdetqzZcuWDz/8sF+/fi+88MKKFSuk/Q8ePPiHP/xh5syZQoiUlJQJEybk5ubKh3Qq6WnmzJm2cX+ppKKiori4+Msvv0xNTdXr9XbGBQA3LT4TAQBwtsrKyrq6uoEDB4aGhrq6L522atWq999/f8SIEa7uCK7z7bff1tfXJyYmurojcCM6na6uru7kyZNCiKioqIqKCst3IyMjNRqNSqU6fvy4Uqm0PVyhUNTV1QUGBloWDhgwQI5ACSHCwsKqqqqEEKdPn37qqafUanVLS0tcXFx+fr58l9FmFKa9etqjUCjKy8ujoqKEENXV1aNGjZL3X7BgwZIlSxYsWPDhhx9+9NFH7733XgfnxS7b3lqWtPcarpKQkJCZmclHH+AOyF0CAMDZjEaj8NjcJSHEQw89tHbtWlf3AteJi4s7evTonj17XN0RuJH8/Pz09HTptUajkV5YxUTsJzdZhZaEEOPHj9+9e7ftnosWLVq8eHFubq5Sqbx8+XJ7qzvp9Xo/Pz879TjCZDJZPuXzz3/+88KFC2fNmvWnP/3po48+6lqdN0geFwDctFh3CQAAZ5NmxlneHQGASyxcuDArK0sIodVq8/LylixZYn//lJSUnJyc8vJy6XNMptFoJkyYEBwcXFxc/Prrr1u+5evrm5eXZzAYdu3add9999mvx45NmzaVl5fX1NRkZmYuWrRILh81atRdd901e/bsSZMm3XrrrZaHdGrdpc5qc1wAcNPiuhYAAGfz9NwlAJ4rPDzccjMrK0un04WHh48ZM2b79u3r16+XyqXlh2xXrX7yySe1Wu3UqVOVSuX06dNfeuklqTw7O3vZsmVKpXLlypVpaWlyDUKIrVu3pqamhoaG5uTkyIsitVdPm6Sqli5dumDBguHDh9fX11vt/9xzz+3fv3/16tVWB0qPUHDwzMgjtRyyXGL13/bGBQA3LWYLAwDgbKWlpUajcfDgwX369HF1Xzpt1apVXl5ezIxzN9LMOClwCUikmXGFhYWu7kiP27hxY2lp6YYNG1zdETgb6y4B7oN1lwAAcDZylwCgu8jJRESXAMCFiC4BAG52FRUVra2tYWFh/v7+TmhOzi4hugQAN46pGADgDlh3CQBws9Pr9S0tLU5rTlrC1mopEwBARESEwkZERISr+wUA6Bi5SwCAm51KpTKZTE5bAolpcQDQpkuXLrm6CwCALiK6BAC42Tl5aW0pd4noEgAAAHoNZsYBAOBUUu6SlxdfwQAAAOgluLQFAMCpmBkHAACAXoboEgAATiXNjCN3CYA787gnD7iwtx53rgCgJ3BpCwCAU5G7BMCFVCqVI7uZzeae7okQorGx0fGdg4KC7LzbqQ53qt0OOdj0/2fvzuOjKu/Fjz8nezLZZshCFmWpLN1AQoiAaK8vFpsoVKgSaK1QXFoLiFgpFL28frYNaEFRsb3XS7hgr9gLAnErwQ2V0Ni6tFcNoQSCLyAZsq8zITOTmfP745TpOEkmk2Fmziyf9x+8zjznnOf5nsOLh3O+8zzPuIjfu/EAgCrILgEA4FesuwRARQ0NDY4fe3t716xZk5mZmZWVtWfPnvHjxzvuPXr0aG5ubkxMTFlZmb1w9erVEyZM0Gg0c+fOfe+995RCZfzOjh07nI7v6em59957tVptXl7eqVOn7MN8mpubp02bptFoMjMzV61aNWR6RafTGQwG6TLHXYcPH3YqVD5u3749KSmpsrJy165dSUlJSkiu2y0oKCgoKHDnNhqNxuXLlycmJk6ZMqWqqspx14D3Z7D4h3sfACBg8WgLAIBf8ZtxAALHxo0bzWZzVVXV2bNnNRpNW1ub497y8vJTp07t27evuLjYXrhly5ZTp051dHRs2LBhwYIFSqEyfkev11dXVzsev379ep1O19DQUFFRceTIEfuR69at27Ztm9lsrq2tnT179rp161zHqQQmX+a4q6ioyKlE+Wi1Wnfv3n3LLbdUVVXt3r1bCcl1u/0rH8z69euzsrLa2trefvvt119/3XHXgPdnsPiHex8AIGBJ/hn1CgAAFBcuXOjt7c3KykpMTFQ7Fk9s3LgxIiLiN7/5jdqB4Cvy8vI+++wzZWQcoKioqFizZs3f/vY3IUROTo5er3fcm52dXV9fn5WVdeLECZ1O1/90SZIsFktUVJSyrbw1nD59+qGHHqqsrDSZTHl5eRUVFfa3CfsxjtsZGRn/+Mc/lPqbm5szMjKU8hEjRjhmstLT05uamlxfjmP9Q+61f3Ta8KDdAel0ujNnzijX1drampaWNqz7Y+eteMLW9OnTS0pKZs+erXYgABi7BAAIbyaTqaurq7e3128tRkRESJLEzDgA/lRfX28fNaNs1NfXCyH6+vpcnKWklhwtXrx41qxZJ0+e7Ojo2L9//5DtOs4Cc8ytTJ06VXYw3JSK2Wwe1vHeanfIYNy8P/ZTfBEPAKiCR1sAQFgzGAyNjY1dXV1+azEnJ+eaa65JSEjwW4sAMJjbb79927ZtQojm5uaysrI777zT9fH19fX5+fnJycnV1dXPPvvskPUXFxdv377dZrMZDIbS0lJ7eWFhYWlpaV1dnTJZ2B3R0dFlZWUWi6W8vHzOnDlunuXEdbvur7u0ZMmSJ5980mKx6PX6J554wl7u4v4MGL8H9wEAAhPZJQBAWGMVJABhJSMjw/Hjtm3bOjo6MjIyvvnNb7766qtbt25VypUxR/3/fP755++++26dTrdhw4a77rrLxZHKn48//nhDQ0NaWtqsWbPmz59vb/eBBx5obm6+4YYbdDrdzTff/Pjjjw8ZubKck1arLS0t3bVrl73cvk6244ZwGDblOH7KdbtWq9XNZUO2bt1aV1en1WoLCwtXrFgx5P0ZLH4P7gMABCbWXQIAhLWGhobu7u60tDStVqt2LMGBdZcCE+suoT/HdZdUZ7FY3njjjUcfffTEiRNqx4LQwbpLQOBg7BIAIKwpY5dYBQkAfOSRRx6RJCkxMfEPf/jD0aNH1Q4HAOATPEwDAMIa2SUA8KmSkhJZlk0mU1lZWWZmptrhAAB8godpAEBYI7sEAAEiMzNT6oeEFAAEBecfGQUAIKwo69SwqjcAqK6xsVHtEAAAHuKrWgBAWCO7BAAAAFwhsksAgPAly7Ly26nMjAMAAAA8xsw4AED4sv98u9/GLnV2dvb09CQlJSUmJvqnRQAAAMDX+KoWABC+/L+kd29vr8FgMJvNfmsRAAAA8DXGLgEAwpf/F11KSkqKjY2Ni4vzW4sA4AFJkoQQytxh1fkzGEmSAuSqASC4MHYJABC+lLFL/swuJSQkpKamkl0CoJasrCx3DvNPhqWnp8edw/yZ7nG/raSkJJ9GAgDBhewSACB8KWOXWNIbQPhoaGhw/Njb27tmzZrMzMysrKw9e/aMHz/ece/Ro0dzc3NjYmLKysrshatXr54wYYJGo5k7d+57772nFEqSJEnSjh07nI7v6em59957tVptXl7eqVOnlMOEEM3NzdOmTdNoNJmZmatWrXInzXT+/Pnp06drtdoVK1YYjUbHdg8fPiyEOHz4sCRJV111lf2UgoKCgoICN++McroSnt1g16XT6QwGg3SZm00AQAjjeRoAEL78PzMOAALKxo0bzWZzVVXV2bNnNRpNW1ub497y8vJTp07t27evuLjYXrhly5ZTp051dHRs2LBhwYIFSqEy5Eev11dXVzsev379ep1O19DQUFFRceTIEfuR69at27Ztm9lsrq2tnT179rp164YMdc+ePQcOHKitrU1MTPzFL36hFH744YfTp08vKioSQhQWFubn5//pT3+yn2L/YVB3FBUV9T94sOtSbpR8mZtNAEAIY14xACB8tba2trW1paSkZGRkqB1L0Lj55pu/+OKL7OxstQPBV5w8ebKnp2fq1KlqB4IAYjAYZFk+deqUECInJ0ev1zvuzc7Orq+vz8rKOnHihE6n63+6JEkWiyUqKko4rEZ0+vTphx56qLKy0mQy5eXlVVRU2N8mHFcssm9nZGT84x//UOpvbm7OyMhQykeMGOGYyUpPT29qanJxLZIk1dXV5eTkCCHa2tomTpxoP37RokV33nnnokWLDhw4cPDgwT/+8Y8e3a1/NeT0fjTgdQ14JPxv+vTpJSUls2fPVjsQAKzqDQAIY4xd8kB3d7dOp3v88cfVDgRfcf/999fW1vL3AkdffPHF7t27le36+nplwykn0tfX56IGJbXkaPHixUuWLNm1a5dOp2tpaRlyFSfHWWOO7U6dOvWtt95y4yIGYLPZHGc0b968+fbbb7/lllt+9atfHTx40LM6r5DZbI6JiVGlaQAIEGSXAADhS1nVm3WXhis1NXXOnDlqR4GvSEpKkiSJvxc4io2N/Z//+R/Xx9x+++3btm3bvHlzc3Pz8ePHDx48+OKLL7o4vr6+Pj8/Pzk5ubq6+n//93+HjKG4uHj79u2PPfZYT09PaWmpvbywsLC0tPS73/1udna2m53wzp0777nnHo1GU1JSsnjxYnv5xIkTZ8yYMX/+/Ouuu27cuHGOpyiLLn300Ufu1D9c0dHRZWVlt9566zvvvLNly5Zjx475ohUACBY8TwMAwhdjlwCEG6eJwNu2bevo6MjIyPjmN7/56quvbt26VSlXxhz1//P555+/++67dTrdhg0b7rrrLhdHKn8+/vjjDQ0NaWlps2bNmj9/vr3dBx54oLm5+YYbbtDpdDfffLPrYXdKVcuXL1+0aNHYsWMNBoPT8b/85S+PHTu2adMmpxOtVqv7k9fs63M7LtQ92HUJIZRlmLRabWlp6a5du9xsBQBCFbOFAQDh68KFC729vdnZ2RqNRu1YgsbMmTMjIiKOHz+udiD4iry8vM8++0xJmAKKioqKNWvW/O1vf1M7ECGEsFgsb7zxxqOPPnrixAmvV75jx46zZ89u377d6zUjwLHuEhA4mBkHAAhfiYmJsbGx0dHR/mnOarX29fVFRkb2X8oEAELVI488snnz5piYmKKioqNHj3q9fvtgIrJLAKAinm4BAOFLq9X6szmDwdDU1KTRaPjBNQDho6SkpKSkxHf1MxUDAAIB6y4BAOAnLCIOAC5kZmZK/WRmZqodFwBgaIxdAgDAT1hEHABcaGxsVDsEAICHyC4BAOAnytglsksA/KOzs7O+vv6hhx5SOxDAV86fP9/R0aF2FACEILsEAIDfKGOXmBkHwD9aW1u7u7v/+te/qh0I4CudnZ0tLS1qRwFACLJLAAD4DWOXAPjT2LFjJ06c+Oc//1ntQABfmT59+jXXXKN2FACEYFVvAAD8hrFLAAAACEmMXQIAwE9Y1RuAn5lMprNnz6odBeArvb29aocA4J/ILgEAwpQsy0IISZL81qIyM46xSwD8Iy4urre3d+7cuWoHAvhQfHy82iEAEILsEgAgbDU1NXV1daWlpWm1Wj80J8sy6y4B8Kdp06bV1taqHQUAICzw9SkAIEz5eZ6akloSjF0CAABAyGHsEgAgTGVnZ9tsNr/NjLMv6e3PuXgAAACAH5BdAgCEL38OI2LRJQAAAIQqnnEBAPAHFl0CAABAqCK7BACAP9hnxqkdCAAAAOBlPOMCAOAPzIwDAABAqOIZFwAAf/DzT9QBAAAAfkN2CQAAf2DdJQAAAIQqsksAAPgD6y4BAAAgVPGMCwCAP7DuEgAAAEJVlNoBAACgAoPBcOnSpYSEBI1G458WY2NjrVZrdHS0f5oDAAAA/IbsEgAgHPX09HR2dkZERPgtu6TT6XQ6nX/aAgAAAPyJ8fkAgHDU19cnhIiK4lsWAAAA4EqRXQIAhCNljW1+wQ0AAAC4cmSXAADhiLFLAAAAgLeQXQIAhCPGLgEAAADeQnYJABB2bDabLMuC7BIAAADgDWSXAABhR5kWFxERERHB/4MAAADAleKpGgAQdpgWBwAAAHgR2SUAQNhRskss6Q0AAAB4BQ/WAICwo8yM8+fYpe7u7ra2No1Gk5aW5rdGAQAAAP9g7BIAIOz4f+ySxWIxm81KuwAAAECIYewSACDs+H/sUnJycnx8PCs9AQAAICSRXQIAhB3/r+odFRXFMk8AAAAIVcyMAwCEHWXsEukeAAAAwCvILgEAwo7/xy4BAAAAIYzsEgAg7Ph/VW8AAAAghJFdAgCEF6vVKsuyYOwSAAAA4CVklwAA4UUZuBQRESFJktqxAAAAAKGA7BIAILywpDcAAADgXWSXAADhhewSAAAA4F08WwMAwotGo8nOzvbntDir1WowGKKiojQajd8aBQAAAPyGsUsAgPASGRmp0WgSEhL81qLFYmlqampqavJbiwAAAIA/kV0CAMC3lHXE+Yk6AAAAhCqySwAA+JbNZhNCRETwfy4AAABCE0+6AAD4FmOXAAAAENrILgEA4FuMXQIAAEBo40kXAADfYuwSAAAAQhvZJQAAfIuxSwAAAAhtPOkCAOBbjF0CAABAaCO7BAAIIyaTqbu722w2+7NRxi4BAAAgtEWpHQAAAP7T3d3d3t6empqanp7ut0aV7BJjl+AHZ8+eVTsEAHAlJiYmNzdX7SgAeB/ZJQBAGImKioqLi4uJifFno8rMOMYuwaeioqJkWZ47d67agQDAoHp7ezMyMv7+97+rHQgA7yO7BAAII6mpqampqX5ulJlx8IP09PTo6Oja2lq1AwGAQR0/fnz16tVqRwHAJ3jSBQDAt8guAQAAILTxpAsAgA8pqSXBuksAAAAIXWSXAADwIWXRJUmSJElSOxYAAADAJ8guAQDgQ0yLAwAAQMjjYRcAAB8iuwQAAICQx8MuAAA+pGSXWHQJAAAAIYzsEgAAPqSsu8TYJQAAAIQwHnYBAPAhZsYBAAAg5EWpHQAAAH5SX1/f19eXkZERHx/vt0ZjY2NTU1NjY2P91iIAAADgZ2SXAADhwmQyWa1WPw8jio+P92cyCwAAAPA/BuoDAMKCzWZTlkCKjo5WOxYAAAAgpJBdAgCEhb6+PiFEREQESyABAAAA3sUTNgAgLCjZpagopoQDAAAAXkZ2CQAQFiwWi2BaHAAAAOADZJcAAGGBsUsAAACAj5BdAgCEBcYuAQAAAD5CdgkAEBYYuwQAAAD4CNklAEBYUGvsks1m83OLAAAAgJ/xFS4AIPTJsqzK2CWr1Xr27FkhxLhx4/zZLhBo/v73v5NphX+MGTNGp9OpHQV8oqur6/Tp02pHgXCRl5cnSZLaUQQTsksAgNCnpJYkSfJ/dkkIERHBSGGEuxtvvHHEiBGRkZFqB4IQ19DQUFpaunTpUrUDgU9UVlYuXLgwOztb7UAQ4mRZ/vLLL81mM+t1DgvZJQBA6FNrWlxMTMzXvvY1PzcKBKa//OUvI0eOVDsKhLgFCxaoHQJ8Kz8/v6KiQu0oEOJMJlNcXJzaUQQfsksAgNCn4g/GMXAJAAAAIY9HXgBA6FMxuwQAAACEPLJLAIDQZzabBdklAAAAwDfILgEAQh9jlwAAAADfIbsEAAh9ZJeA8MSPSbuJGwW4xr8RYEhklwAAIa6vr0+WZUF2CUBYkiSJF2MAw1VWVhYTE6PT6W666Sa1Y0FwILsEAAhx9oFLvF8B4UbJLAej7Oxsb1Xlzk3w7o3yYvBAgAjDzqS4uHjfvn1tbW3vvfeed0NyH51JcCG7BAAIcTabLSoqioFLANzU09Pj3Qr7+vqUNLf7Ll686Le2XPPgbngcPBBigrozsVgsCxcu9FYYnqEzCS5klwAAIU6j0YwZMyYnJ8f/TXd1dbW0tPT29vq/aSDMff755/1nhCkl27dvT0pKqqysPHr0aGpqallZmf2A5ubmadOmaTSazMzMVatW2d8Mc3NzJUnKzc1VPo4ePVqSpKuvvtpeZ3V19Te/+c3U1NS77rrLYDDYK+zu7l6yZMnYsWNzc3MLCwu7urqcgmlvb1++fHliYuKaNWuU8muuuUYJW3LgziW7aEsIcf78+enTp2u12hUrVhiNRscYBmtlsLshhDh48GBeXl5CQsI3vvGNV155Zfz48VcYPBCwwrAzGTVqlNOJHocx5I0SQqxYsSIzM3PChAmHDh2yF9KZBCUZAAD4xoULF2pqarq6utQOxJtmzJhx/fXXqx0FnBUVFcXExKgdxaASExMvXrzo/3b7P+sKIbZu3fryyy+npaUVFxfv378/OjravnfZsmXvv/++2Wzu7u4+dOjQz372M/uuM2fOrFu3rru722q1vvjii3V1dY51/sd//EdDQ4Msy08//fRPfvIT+65Vq1Z99tlnyva77767cuVKp2BuuummPXv2dHZ2Dhn5kFy0JYR47LHHLly40N7e/stf/tLxuly0ONjd2L1792233VZdXd3b29vS0vLf//3fOp3uCoP3lvnz57/00ktqtY4hVVRUXHvttR6fXl5ePmvWLC/G476w6kxcnOhBGK5vlCzLRqPRZrN99NFHCQkJ3gr+CinfC5rNZlVaD15klwAA8JXz58/X1NQYDAa1A/EmskuBiezSgAZ8IbRv2Gw2p2N0Op3jt7Dp6emO53700UdTpkyZP39+VVWVU52NjY3Kdnt7e2pqqn1XZmam/f2kt7c3MzPT6USj0ehm5ENy0ZYQwv4G29HR4XRdg7U42N0YM2aM679NsksYTIhll+wbIdaZuDjRgzBc36gPP/xw8uTJ8fHx06ZNc3GT/YzskmeYGQcAgK/YbDYhREQE/9sCgaj/PIuJEyc6Pig3NTU57k1ISNBoNHV1dZcuXRqsKlmWY2Ji7OWyLCv9gBhkVeCEhAR3QjWZTEMeM2RbiujoaDc7JRd3w96QO9wJHghqIdaZuHCFYfS/UcuWLXvggQdaW1sPHz48ZOt0JgGO510AAHzFarUKsktA8FiwYMFzzz134cIFs9n85Zdf3nPPPfZdZ8+eXbly5csvv3zs2LH9+/fX1tY6nvjmm282NjYKIfbs2XPHHXfYyxcuXPjBBx8o26+99tptt93mZiTR0dHK0iQXL17csWPHzJkzhzzFdVs7d+6sq6trb2/fu3fv4sWL3YlhsLuxdevWBx54oKOjw2aznTt3bu/evcuWLbvC4IEQE9SdiQsehzGYpqamSZMmdXd379mzp/9eOpMg47thUQAAhLnTp0/X1NSE2MhqZsYFJmbGORrsobf/tuOGLMt9fX2bN28ePXp0QkJCUVFRdXW1Up6VlSWEyMnJUT5mZmY6fhRC6PX6GTNmpKWl/fjHP3acDNvS0qKsfh0bG5uXl9fS0jJYkE6XcOjQoejoaEmSrrrqqgceeEDjT56LAAAgAElEQVSv1w951YO1pdT/5ZdfTps2LTU19Z577hlwBk3/GAa7G7Isv/TSSxMmTIiNjR03btwjjzzS3t5+hcF7CzPjAlzQzYwLz87ERZ3DDWPIG/X73/8+JSXl61//+p///Of+8avVmTAzzjOSPPi4WQAA4DFZls+cOSOEGDt2bGRkpNrheM3MmTMjIiKOHz+udiD4iltuueWdd94J2FkDSUlJp0+fHjlypNqB+IQkuXqilmW5u7tbCJGUlOTr3zzyuC2bzRYVFTWs+W6BacGCBUuXLl26dKnagWBgx48fX7169d///nfPTj9y5EhJSUlFRYV3owocgdOZuBAgYfiUyWSKi4szm83R0dFqxxJMotQOAACA0GR/QGRmHBDOJElKTk4O8LZef/31b3zjG16PB4AX+bMzCfwwEIDILgEA4BPKKABJkkL1mz0A4vIita5HHASsnJwcvV4fFxd37bXX7t27V+1wgLAW1J0JIMguAQBCm16vF0KkpaU5/vCKf/CDcUA48Nt7oJIJ6l+enZ1dX1/vWZ0enwjA64K6MwEE2SUAQGjr6emRZTk9Pd3/TZNdAuBFvPUB8Ao6E/gI2SUAQMiSZTk7O9tisURFqfD/HdklAAAAhAmySwCAkCVJUkJCglqtk10C7Gw2W2Vl5YgRI9QOBCGupaVF+SlxhCSTydTZ2fnBBx+oHQhCnNlsFn6cqxgyyC4BAOAT9lW91Q4EUJ/FYvnJT35CshW+1tHRcf3116sdBXzl9OnTJ0+eXLx4sdqBICxYrVa1QwgyZJcAAPAJxi4BdrGxsV988cXIkSPVDgQhbsGCBXl5eWpHAV/51re+NX369IqKCrUDQYgzmUxxcXGqrKsQ1HjkBQDAJ5QB1WSXAAAAEPJ45AUAwCcYuwQAAIAwwSMvAAA+wbpLAAAACBNklwAA8AlmxgEecJGQlSTpytO1JHyBMEFnAvgZj7wAAPgEM+MAF7KysgYsd/EL0F75cWj3K0lKSrry5gD4Gp0JECB45AUAhCaj0djZ2WmxWNQKgJlxgAsNDQ1OJYcPH+4/oMBoNC5fvjwxMXHKlClVVVVOpxQUFBQUFLjZ4oD1KyU7duzIzc2NiYkpKytTynU6ncFgkC4bxoUB8C86EyBA8Bt7AIDQ1NnZaTQaMzIyUlJSVAkgJSVFo9HEx8er0joQdIqKimRZdnr7Wr9+fVZWVltbW1dX186dO51OGdYAhAHrV0r0en11dfW7775bXFxsNpuFEG1tbZIkeWWAAwA/ozMBVMHYJQBAaDKZTEKImJgYtQLQaDQpKSkqBgAEoJycHPsX+MpGTk6Oi+NfeumldevWxcTEpKWl3XfffU57P/74448//vjKo9qyZUtycvLChQtVHO0IYFjoTIBAw9glAEAIslqtfX19QojY2Fi1YwHwL/X19cqGB1/mKwMBVGE2m8kUAwGFzgQINIxdAgCEIOXBMSoqikW1gaC2ZMmSJ5980mKx6PX6J554wmnvsJZKGa7o6OiysjKLxVJeXj5nzhwftQLAP+hMAF/jmRsAEIKUaXEMXAICVkZGhlOJ0yQXpXDr1q11dXVarbawsHDFihXiqyvlW61W98csDFi/vcTpTyHEvn37iouLtVptaWnprl27PLxOAD5GZwIECGbGAQBCkDJ2iewSELAaGxudSgZ8tdNoNC+88MILL7ww4DGffvqp+y0OWL9jodMBCxcuVHH6DAA30ZkAAYKxSwCAEKT6kt4AAABA+CC7BAAIQYxdAgAAAPyG7BIAINRYLBabzSZJUnR0tNqxAAAAAKGPdZcAAKHGPi3OccFOP5NlmfFTAAAACBOMXQIAhBolraPuoktms/n8+fN6vV7FGAAAAAD/ILsEAAg1ytgldQcNybIcFRUVGRmpYgwAAACAfzAzDgAQagJhSlpcXNyYMWNUDAAAAADwG8YuAQBCis1mC4SZcQAAAED4ILsEAAgpSmopMjIyKorxuQC+QpIktRb7d9Gux1G5c6K3rlfFH0kAAhCdicfoTEIY2SUAQEhh4BIQFLKyspxKkpKSBju4p6fHK43Ksuz+wd6Nx0XTw4pquCd6XLnH9bi4b4Av0Jm4s8vjOq+8co/roTMJOmSXAAAhpbe3VwgRFxendiAAXGloaHD8qNPpDAaDdJm9vLm5edq0aRqNJjMzc9WqVcqbmHLM9u3bk5KSKisrd+3alZSUVFZWZt/17rvvZmRk5Ofnnzt3bshIVq9ePWHCBI1GM3fu3Pfee8+DeFw7fPhw/3EBRqNx+fLliYmJU6ZMqaqqcjqloKCgoKBgyJoV58+fnz59ularXbFihdFodN1uT0/Pvffeq9Vq8/LyTp06ZT9A2dixY0dubm5MTIxyM13UM9jxg903wHfoTOhMECDILgEAQkog/GAcgOFqa2sTQsiX2cvXrVu3bds2s9lcW1s7e/bsdevWictffVut1t27d99yyy1VVVW7d+8uLi6272ptbb1w4cL69evXrl07ZNNbtmw5depUR0fHhg0bFixY4EE8rhUVFfX/rn79+vVZWVltbW1vv/3266+/7rTXqVHX9uzZc+DAgdra2sTExF/84hdDtqvT6RoaGioqKo4cOSIu3zHlT71eX11dvW/fPuVmuqhnsOMHu2+A39CZOKIzgT9J/FUBAEKGLMu1tbWyLI8ePTo6OlrtcELTzJkzIyIijh8/rnYg+Ipbbrnl8OHDWq1W7UAGZjQaz507N3LkyJycHL1e77grOzu7vr5eCCFJAzyXjhgxQnnHUKSnpzc1NTkePOBGe3t7amqqwWDIzs7u6upyrNCpldOnTz/00EOVlZUmkykvL6+iosK+d1jxDMmpNp1Od+bMGZ1OJ4RobW1NS0vz7JlckqS6urqcnBwhRFtb28SJE53icWo3IyPjH//4h9Juc3NzRkbGgNfb/9pdl7g+158WLFiwdOnSpUuXqhUAXDt+/Pi//du/JScne3a6xWIZO3bsZ599JoSgM1HQmfiCyWSKi4szm808TA4LK54CAEKH2WyWZTkiIoKnAYSbr33ta2lpaTU1NWoHMrCrr75a2VDe/cRQrw1ms1lZPW3q1KlvvfWWx+0Oubr/4sWLlyxZsmvXLp1O19LS0n8BF+/GM1jlXqnHZrNFRAwxL8FxgokfXtvs9w1QTJ8+vbm52ePT33333aefflrZpjMZsHKv1ENnAs8wMw4AEDpiYmKuvvrqkSNHqh0I4G+RkZGSJGkDlTuXEB0dXVZWZrFYysvL58yZoxQWFhaWlpbW1dXZbDb378bx48fNZnN5efncuXNdH1lfX5+fn5+cnFxdXf3ss8/6KJ7+lixZ8uSTT1osFr1e/8QTTzjtHdZSKTt37qyrq2tvby8pKVm8eLHrg4uLi7dv326z2QwGQ2lpqSehD2XA+wYooqKirqQnSUxMdGcJHjoTOzoT+JUMAAC8raOjQ6/Xd3d3qx2I982YMeP6669XOwo4e/DBB9PT09WOYlCJiYkXL150LFGmUTg6dOhQdHS0RqNZtGhRTU2NUtjX17d58+bRo0enpKTMmzdvy5YtssOX5PZt+fJ6H8rGp59+mpubO2PGjLq6Onv9Az4DHzp0aNSoUfHx8YWFhSdPnnTa5WY8rg3YrsFguOuuuzQazaRJk5RpPo6P5Xl5efn5+W7W/OWXX06bNi01NfWee+4xGo2u2zUajffcc49Wq508efLnn38u+i3L4rQ9WD0ujh/wvvnN/PnzX3rpJT83Cr8pLy+fNWuWUyGdCZ2J1yk/EaOMiIf7WHcJAADva2ho6O7uTktLc3PURhBh3aXAtHbt2r1797q5bIf/JSUlnT592j/jCtVd9ydYWCyWN95449FHHz1x4oTasXgT6y6FtiNHjpSUlFRUVPinOToTd4RkZ8K6S55hZhwAAN6nPI8OuWwBAO+y/yS22oEErkceeUSSpMTExD/84Q9Hjx5VOxwgQNGZDInOBE546gUAwPuUZRR4KgX8zD4+X+1AAldJSYksyyaTqaysLDMzU+1wgABFZzIkOhM4IbsEAID3yZd/zFjtQAD4XGZmptQP71oAhovOBEFtiB9WBAAAHmBmHBA+Ghsb1Q4BQCigM0FQ46kXAADvY+wSAAAAwgfZJQAAvI91lwAAABA+yC4BAEKB2Wxubm7u7u5WO5B/YuwSAAAAwgfZJQBAKOjp6eno6Ojq6lI7kH9i3SUA4cBqtaodAoBQQGcSAnjqBQCEgri4OK1Wm5SUpHYg/8TMOMBjys8khV5b/uSL63r00Uft27IsX7hwobq6+tprr3U85tixY3feeefChQslSYqJiSkrK3Nd7lQt4F10JleOzgTu4zfjAAChIC4uLi4uTu0o/oWZcYBrWVlZFy9eHHCXLMvu/NtJSkq68smwrtvq6elJSEi4wiZU4eY9dN/p06fb29vtH7/44ouzZ89+73vfq6qqcjzsvvvu+/DDD7VarRCisrJy3rx5BoPBRbkQor29/ezZs2PHjvVitAgrdCY+RWcC9zF2CQAAL1NSS4KZccDgGhoaHD8ajcbly5cnJiZOmTLF6R1j9erVEyZM0Gg0c+fOfe+995RCnU5nMBiky4Y8fkiSAyFEc3PztGnTNBpNZmbmqlWrenp6HA87fPiwEOLw4cOSJF111VX2SgoKCgoKCtxva8CPA8avHNDR0XH33XcnJSWtW7dOKe/t7V2zZk1mZmZWVtaePXvGjx/v2NDRo0dzc3Odvt4fVv12O3funDdvnv3jpEmTbrvttv7vnCaTSXnrE0LMnDnTaDS6LhdCzJ49+/nnnx/ypgGDoTOhM1HQmahPBgAAXmW1Wmtqampqamw2m9qxeN+MGTOuv/56taOAswcffDA9PV3tKAaVmJh48eJFxxKnp9CVK1du2LDBZDI1Nzdv3rzZcW93d7csy2az+Z133klMTByshiGPH4xST2lp6d133200GpXCZcuWvf/++2azubu7+9ChQz/72c+U8g8//HD69OnKts1my8/P/+yzz+xV5efn5+fnD9miLMvTp0+vrKxUtisrK2fMmOHO9d500027d+/u7Ox85513lMK1a9f+9Kc/bWpq6unp2b9//4gRIxyPf/jhhw0Gw6FDh6Kjoz2r327y5MmnTp0a7O7ZRUZGDrh3sHJZlk+cOHHttdf2r9kz8+fPf+mll7xVGwJNeXn5rFmznArpTOhMFF7sTHp7e4UQZrPZK7WFD7JLAAB4WV9fn5JdUjsQnyC7FJiCJbuUnZ3t9E1ndna2LMtarba1tVU5uKWlxf7CUFNTc+utt+p0Oo1Gc8MNNzi+SAz4Quji+MEIIW699da1a9c6poN1Op1jkI73duHChQcPHpRl+eWXX16yZIkHd0OW5TfffHPOnDnK9pw5c956660h4xdCKO9yjkaOHGm/b/2vy2Kx2Lc9q98uOTl5wL1Od3iwjy4O6+zsTElJGazd4SK7FNocs0t0Jgo6E/u2FzsTskueYcQ+AABeJrPoEjCI+vp65RlUXH4lqK+vdzrGbDbbtxcvXjxr1qyTJ092dHTs379/sGrtp7h5vJPvf//7VVVVHR0d9pKpU6c6PjE3NTXZd23evHnTpk0mk+lXv/rVr371KzebcDJv3rxLly5VVFRUVFT09vbOnTvXnfgTExOdSvr6+ly0EhXlvMTqcOu3ky9P+B2uwX4HyrHc48oRzuhMFHQmdCaBg+wSAABeRnYJGK4lS5Y8+eSTFotFr9c/8cQT9vL6+vr8/Pzk5OTq6upnn33W8ZTo6OiysjKLxVJeXj5nzpwhj3dh+fLl27Zt++EPf2hfHbawsLC0tLSurk75/UdHEydOnDFjxvz586+77rpx48Y57nJzqRTFY489tmnTpk2bNj322GPuXO+Abr/99m3btgkhmpuby8rK7rzzTtfHe3Z/hBCjRo3S6/VDHhYfH19ZWalsf/zxx8nJycoNHKxcCFFXV8cqvPAiOhPP4qczgRf4alAUAADhymQy1dTUnDlzRu1AfIKZcYEpWGbG2WVkZDh+NBgMd911l0ajmTRp0meffWZ/TD106NCoUaPi4+MLCwtPnjzp+PiqrACi0WgWLVpkn4jq4vgBOR6gbP/pT3+SZbmvr2/z5s2jR49OSUmZN2/eli1bHM+qra2NjY09f/68U215eXluLpWiuPHGG7/zne84lgwW/2AP8AaD4f77709PT09PT1+2bJler3e8FqdzPajf7qGHHnr11Vf73zqnU5S/FCFEWlpadnb2Bx984LpcluWDBw+uX7/e/ZvmGjPjQtuA6y7Rmch0JrIse7UzYWacZySZwWMAAHiVyWQ6f/58ZGRkSH6HNnPmzIiIiOPHj6sdCL5i7dq1e/fudZxzEVCSkpJOnz49cuRItQPxjh07dpw9e3b79u1qB+I/NTU1zzzzzO9+9zuv17xy5cqf//zn3uotFyxYsHTp0qVLl3qlNgSaI0eOlJSUVFRUqB2I19CZeJEXOxOTyRQXF2c2m5VMFtzkPH8SAIDgYjAYIiMj4+LiAmcmmszMOCB02f9ph9UL4fjx41NTU31Rs06nC8lEPDAkOhPvojNRHesuAQCCW1NTU11dnTKGOUCQXQJCmH0KgNqB+FtJSYkvqv31r3/ti2qBwEdn4l10JqojuwQACGIWi8VqtUqSFBcXp3Ys/xIbG5uTkxMyk4CAYJeZmSn1k5mZqXZcAIIMnQngAjPjAABB7NKlS0KI2NjYgBooFBERkZCQoHYUAP6psbFR7RAAhAI6E8AFxi4BAIKYkl2Kj49XOxAAAAAgfJFdAgAEsZ6eHiEEA4UAAAAAFZFdAgAEK4vF0tfXF2iLLgEAAADhhuwSACBYKQOXYmNjIyL47wwIHcpCuWpH4UrgRzhcvriiRx991L79xz/+MTIyUpKkmJiYsrIye/mxY8fuvPPOhQsXOu0arNypWsC1wP+nGvgRDhedSThjVW8AQLBSFl1iWhwQjLKysi5evDjgLlmW3Xk5SUpK6u7u9nZcbnEzQruenp4A76mGe0VDOn36dHt7u/3jypUr33jjjcLCwrKysuLiYrPZrJTfd999H374oVarFUJUVlbOmzfPYDC4KBdCtLe3nz17duzYsV6MFkGNziSg0JmEM77sBQAEK2XsEkt6A8GooaHB8aPRaFy+fHliYuKUKVOqqqocd61evXrChAkajWbu3LnvvfeeUqjT6QwGg/0XwYc8fkBOpzt9dL8e8dWv6x23m5ubp02bptFoMjMzV61apfRadgUFBQUFBa5r9ixO5YCOjo677747KSlp3bp1Snlvb++aNWsyMzOzsrL27Nkzfvx4x4aOHj2am5vr9PX+sOq327lz57x58+wf29raCgsLhRC33HLLlClT7OUmk0l56xNCzJw502g0ui4XQsyePfv5558f8qYhfNCZCDoTOpMAIQMAEIRMJlNNTc3p06dtNpvasYSXGTNmXH/99WpHAWcPPvhgenq62lEMKjEx8eLFi44lTk+hK1eu3LBhg8lkam5u3rx5s+Pe7u5uWZbNZvM777yTmJg4WA1DHj+g6dOnV1ZWKtuVlZUzZsxws57+rTuW2LeXLVv2/vvvm83m7u7uQ4cO/exnP3M8JT8/Pz8/33WEHscphLjpppt2797d2dn5zjvvKIVr16796U9/2tTU1NPTs3///hEjRjge//DDDxsMhkOHDkVHR3tWv93kyZNPnTrV/0IOHz7c3Nxs/xgZGem4137fBiuXZfnEiRPXXntt/5oV8+fPf+mllwbbi2BXXl4+a9Ysp0I6E5nOxNudSW9vrxDCbDYPuBeDIbsEAAhK7e3tNTU1Fy5cUDuQAZhMpu7u7kuXLqkdiE+QXQpMwZJdys7OdvqmMzs7W5ZlrVbb2tqqHNzS0mJ/Aaipqbn11lt1Op1Go7nhhhsGfOly5OL4Ab355ptz5sxRtufMmfPWW2+5WY+bL4Q6nc7xYj3+O/IgTiGE8i7naOTIkfb73D9+i8XiFP9w67dLTk7uv/ftt992nWS0fxysXJblzs7OlJSUwdoluxTaHLNLdCau4/FinGHYmZBd8gwz4wAAQSmQF10yGAwXL17s6upSOxAg4NTX1yvPoOLyI359fb3TMfZ1NIQQixcvnjVr1smTJzs6Ovbv3z9YtfZT3Dzebt68eZcuXaqoqKioqOjt7Z07d65n9Tiy2Wz27alTpzo+eTc1NQ2rqiuMMzEx0amkr6/PRStRUc5Lsg63fjvlr9jRH/7wh1GjRo0cOdJFAEIIq9U6ZHn/yhGG6EyGVdUVxklnAneQXQIABCUluxSYiy5FRkbGxsZGR0erHQgQNJYsWfLkk09aLBa9Xv/EE0/Yy+vr6/Pz85OTk6urq5999lnHU6Kjo8vKyiwWS3l5+Zw5c4Y8fjCPPfbYpk2bNm3a9Nhjj7nT7mCUeC5evPjggw/aCwsLC0tLS+vq6hzfEu3cXCrFi3Hefvvt27ZtE0I0NzeXlZXdeeedro/34D4oRo0apdfr7R9ffvnlb3/72+PGjRNCOC5tEx8fX1lZqWx//PHHycnJyo0arFwIUVdXxyq8cIHOxD9x0plgAL4bFgUAgI/09vbW1NScOXOGRZf8j5lxgSlYZsbZZWRkOH40GAx33XWXRqOZNGnSZ599Zn9MPXTo0KhRo+Lj4wsLC0+ePOn4+Kqs6KHRaBYtWlRTU2MvHOx4F2688cbvfOc7jiUu6hnsWfrQoUMxMTFTp051jL+vr2/z5s2jR49OSUmZN2/eli1bHFvJy8tzc6mU4cY5WJAGg+H+++9PT09PT09ftmyZXq93uiin7eHWb/fQQw+9+uqr9o9O40wd41cS8WlpadnZ2R988IHrclmWDx48uH79+sFuETPjQtuA6y7Rmch0Jt7uTJgZ5xlJZjAYACDYtLe3t7S0JCQk5OTkqB1L2Jk5c2ZERMTx48fVDgRfsXbt2r1793o8V8LXkpKSTp8+PeREBoSMmpqaZ5555ne/+53Xa165cuXPf/7zwUYcLFiwYOnSpUuXLvV6uwgER44cKSkpqaioUDsQ+I8qnYnJZIqLizObzYxDHxZmxgEAgk8gL7oEABg/fnxqaqovatbpdExmAcIHnUkQIbsEAAgysiwH8qJLAAAhRElJiS+q/fWvf+2LagEELDqTYEF2CQAQZHp7e202W2RkZFxcnNqxAAgCmZmZUj+ZmZlqxwUgyNCZAC44/1IgAAABzmg0CqbFAXBbY2Oj2iEACAV0JoALjF0CAAQZi8UiyC4BAAAAAYOxSwCAIJOVldXX1xcRwRckQNC4dOlSVlaW2lEgLIwaNYrfjAtVn3zyyfHjxyVJUjsQhAWLxcJvxg0L2SUAQPCJiuL/LyCYxMfHf/LJJxkZGWoHghC3dOnSgoICtaOAr1x77bXXXXddeXm52oEgxJlMpqysLFJLw8XTOQAAXtba2mo0GlNTU5OTk9WOBQgUKSkpWq1W7SgQ4mJiYvj6IYRFRUVFR0fTk8DXTCaT2iEEJaYVAADgZRaLxWQyWa1WtQMBAAAA/IHUPgAAAHzu5ptvZpYBfO3MmTMsuhTa/u///i8/P1/tKBDiZFlWO4SgRHYJAACfYNlRwO7YsWM2m03tKBAWxowZo3YI8JWZM2e+//77akeBcME02+HifgEA4GV85QU4mTJlitohAAh6ycnJU6dOVTsKAANj3SUAAAAAAAB4juwSACA4BN0i2cyMAwAAQJhgZhwAIDg0Njb29vZmZGQkJiaqHQsAAACAf2HsEgAgCMiybDKZrFZrUPzmFOsuAQAAIKwwdgkAEAQkSRo9erTJZIqNjVU7FgAAAABfwdglAEBwkCQpLi5O7SiGgXWXAAAAECbILgEA4GXMjAMAAEBYIbsEAIBPMHYJAAAAYYLsEgAAAAAAADxHdgkAAAAAAACeI7sEAAAAAAAAz5FdAgDAJ1jbGwAAAGGC7BIAIKBZrVa1Qxg21vMGAABAWCG7BAAIXJcuXTp79mx9fb3agQAAAAAYFNklAEDgMhgMQojIyEi1A/EEM+MAAAAQJsguAQAClCzL3d3dQoikpCS1YwEAAAAwqCi1AwAAYGA9PT1WqzUqKkqj0agdy/BkZmbabLYgHXIFAAAADBfZJQBAgAregUuRkZGklgAAABA+mBkHAAhENptNWXQpGLNLAAAAQFghuwQACEQGg0GW5ZiYmNjYWLVjAQAAAOAK2SUAQCAK3mlxAAAAQLghuwQACDh9fX09PT1CiOTkZLVjAQAAADAEsksAgICjDFyKj4+PiuLXJwAAAIBAR3YJABBwmBYHAAAABBGySwCAwGIymUwmkyRJZJcAAACAoMCMAwBAYFEGLmk0moiIYP0K5NKlS2azOS4ujh+8AwAAQDgI1gd3AECoCoFpcd3d3U1NTUajUe1AAAAAAH8guwQACCBGo7Gvry8yMlKj0agdi+diY2MTExNjYmLUDgQAAADwB2bGAQACSEdHhxAiOTlZkiS1Y/FcSkpKSkqK2lEAAAAAfsLYJQBAoLBYLD09PUIIUjMAAABAECG7BAAIFJ2dnUKIhISE6OhotWMBAAAA4C6ySwCAgCDLcldXl2DgEgAAABBsyC4BAAKCLMuJiYnR0dFBvZ43AAAAEIZY1RsAEBAiIiIyMjLUjgIAAADAsDF2CQAAAAAAAJ4juwQAAAAAAADPkV0CAAAAAACA51h3CQAALzMYDC0tLXFxcSNHjlQ7FgAITdnZ2RcvXlQ7CgSEioqKWbNmqR0FEO7ILgEA4H0WiyUqiv9kAcCHPvnkk7Fjx6odBVT2ne98R+0QAAhBdgkAAK+TJEkIIcuy2oEAQChLTk7WarVqRwGVRUZGqh0CACFYdwkAAK8juwQAAICwQnYJAAa2efPmW2+91fUxShJBCFFUVPT444/7PqhQY7FYzp0719nZqXYgXkZ2CQAAAGGF7BIADMBoNG7fvn379u3KR3sWaTBPPWHrNBMAACAASURBVPXUU089denSJd+HFlI6OzvNZrPBYFA7EC8juwQAAICwQnYJAAZw6NChmTNnjhs3Tvk4ZJpg4sSJ+fn5r776qu9DCyk6nS4jI0On06kdiJeRXQKAQDbkl0a4EtxeIDyRXQKAAbz++ut33HHHsE5ZvHjxa6+95pXWL1269MILL9hsNq/UFsgiIiJSUlLi4+PVDsTLyC4BAAAgrJBdAhDonL4Bs39899138/Ly4uPjR48eXVpaqhTabLbf/OY3Y8aM0el0K1asMBqN9rO2b99+1VVXRUREDHauo08++WTGjBn9GzWbzStXrhwxYsTIkSO3bt3qeMr111//0UcfXeHFXrp06amnnrrqqqsaGxuVUBGMyC4BQCAL3v45Oztb7RCGFry3F8CV4NUFQLD60Y9+9Mgjj3R0dBw7duwvf/mLUvj000+///77R48era2ttVgsmzZtsh//wQcf/PWvf1UGBA14rqOGhoasrKz+5Zs3b66pqfn8888/+eST8vJyx13Z2dl6vd7jy+np6fntb3+bmZm5fv16i8WycuVKj6uC6sguAUDo6enp8W6FfX19FotlWKdcvHjRuzEAgLdEqR0AAHgoKipKr9c3NTVdffXV9vFHO3fufOWVV8aMGSOE2LZt23XXXffkk08qu5555hn7N34DnutosLzAiy+++Nprr+Xk5Aghnn322W9/+9tXfiFGo3HHjh0lJSV9fX29vb3x8fF5eXm//vWv7Qd88MEHLk4fM2bM1Vdf7XHrp0+fvpKkGAYky7LJZBJCxMXFqR2L91VVVU2ePFntKADAE59//rnSgzn+R698JfDUU09t2rTpzTff7O3tXbRo0e7duxcuXKgc0NzcXFRU9Mknn2RkZNxxxx2//e1vExIShBC5ubn19fU5OTl1dXVCiNGjR587d+6qq646f/68UueJEyfuuOOO+vr6BQsW/P73v09MTFQq7O7uvvfeeysrK00mU15e3r59+5KTkx2DaWtrW7t27YEDB+6+++5nnnlGCHHNNdfU1taKr47pdv01xpDXJYRYsWLFn/70p9TU1C1btixatMjxxAGDd31dA95e+1l79+594oknTp48KYTYt2+fEkZPT8+aNWsOHDgwZsyYP/7xjxMnThzyugAEJsYuAQhWr7zyytGjR6dMmTJ+/Hj7MKJz585NnDhRkiRJkkaOHHnhwgX78Y4pmAHPdZSVlTVgzqW+vn7s2LHK9jXXXOO4S6/XDzjcaUi9vb3t7e1Wq9X+vMhymAhk3/rWt4qKitSOAgA8MWnSpP6ZC6XEarXu3r37e9/73n/913/t3LmzuLjYfsC6deu2bdtmNptra2tnz569bt06pbyuru7MmTM/+MEPDAaDzWYrKSmpq6s7f/68vc5jx44dPXq0o6Nj6tSpDz/8sL3CjRs3bty48fz5842NjevWrdu4caNTMN///vdvuukmvV6vpJaEEGfOnFF2yQ5cX+yQ1yWEeO655xoaGl588cUf/ehHTicOGLzr6xrw9trPevPNNw8ePGgymfbt22cPY/369TqdrqGhoaKi4siRI4LUEhC8ZAAIbHFxcUajUdlWBoQ77rXZbG+88cbIkSOVjxMmTPjyyy/7VzJgd+d0rqM77rhjz549/U//2te+duLECWW7qqrKsdrdu3cvWbLE7cty1traunHjxoSEhJiYmNTU1J6eHo+rgupsNltNTU1NTY3ValU7FoSLBx98MD09Xe0oAP/Jysqqqanx7Nz+TwX2EiGEzWZzOsbpt02d/q199NFHU6ZMmT9/flVVlVOdjY2NynZ7e3tqaqp9V2ZmptlsVrZ7e3szMzOdTrQ/+QwZuWuur+vDDz+cPHlyfHz8tGnTRL+81WDBu9jlIsj+9Ssb6enpra2tynZTU5MH76fXXnttRUXFcM8C4HWMXQIQ6KZOnbpt2zaj0fjll1/+5Cc/sZcvXbq0urpaWbDAvgD2/ffff++99548edJsNn/xxRdLliwZsM4Bz3U0f/78AwcO9C//wQ9+sHbt2vr6+vr6+gcffNBx14EDB+bPn+/pVQqdTqd85/nwww9bLJadO3d6XBVUZx99Fg4//AcAIab/COKJEyc6vkEpSRC7hIQEjUZTV1d36dKlwaqSZTkmJsZeLsuy/T8IeaChOsrMuyEps7Dd1P+6li1b9sADD7S2th4+fNjF8U7Bu941XO5P9AMQ4MguAQh0//mf/1leXp6WlnbTTTd997vftZd/73vfW7RoUUpKyr//+7+/+OKLSuHq1asXLFiwaNGi5OTkH/7wh0uXLh2wzgHPdfT973//L3/5S01NjVP5I488Mnbs2G9/+9t5eXnz5s2zl586deqjjz5yXMjAM1qttqSk5MKFC5GRkaGamOjo6LBarWpH4XNK1jJU/xIBIKwsWLDgueeeu3Dhgtls/vLLL++55x77rrNnz65cufLll18+duzY/v37laWR7N58883GxkYhxJ49e+644w57+cKFC+2LKr722mu33Xabm5FER0eXlZUJIS5evLhjx46ZM2deyXU1NTVNmjSpu7t7z549/fcOFrzrXcNVXFy8fft2m81mMBgGXAoTQNDw/3ApAAgKmzdvLioqcvPgoqKiLVu2+DSe0GA0Gmtqampra5Xx+SHs7NmzNTU1vb29ageCcMHMOIQbD2bGDfY21H/bcUOW5b6+vs2bN48ePTohIaGoqKi6utoegxAiJydH+ZiZmen4UQih1+tnzJiRlpb24x//2GAw2CNpaWnJy8tLSEiIjY3Ny8traWkZLEinSzh06FB0dLQkSVddddUDDzyg1+vdud7Bruv3v/99SkrK17/+9T//+c9OzbkIfrBdLl42XXw0Go333HOPVqudPHnyiRMnPHg/ZWYcECAkmfGHAAB/uXDhQm9vb2pqanp6utqx+Na5c+fMZnNubm58fLzasSAsrF27du/evU4TdoAQlp2d/cEHH4wbN07tQAYlSa5etWRZ7u7uFkIkJSUF4K95uAje9XVdie7u7pSUlOEO+50yZcqOHTtmzZrli5AAuC9K7QAAAOGip6ent7dXkiSn5VFDkvKqwMw4AMCAJElKTk5WO4oA0tHR8fTTT8+ZM0ftQAB4iHWXAAB+0tLSIoRISUmJjIxUOxafY90lAAhnyncMATgoyR0ugvfFdY0YMUKSpNGjR7e0tLzyyiterBmAPzF2CQDgD0aj0WQyhcnAJUF2CQDCm9+WH8nJydHr9f3Ls7Oz6+vrPavT9YQ+z+p0obW11et1AvA/sksAAH9Qnh3DZOCSuJxdYnFDAIBPeZxCAgDvIrsEAPC5cBu4JITIyMjIyMgI0jkRAAAAwLCQXQIA+FxbW5sIp4FL4vLYJQAAACAckF0CAPhWd3d3b29vRESEVqtVOxYAQIjo6OiYNGmS2lFAfVar9cSJE7NmzVI7ECDckV0CAPiQzWZTfipOq9VGRfGfDgDAO1JSUt54442xY8eqHQhUduONN06cOFHtKACQXQIA+FJHR0dfX19UVBQDlwAAXiRJUnJyMv+5ICoqKnzm3QOBjFUhAAC+0tfX197eLoRIS0tjfWsAAAAgVJFdAgD4Sltbm81mi4uLS0pKUjsWAAAAAL5CdgkA4BNms7mzs1MIkZaWpnYsAIDw5WLwrCRJVz60lsG5ACDILgEAfERZzFuj0cTHx6sdCwAg9GVlZQ1YLsvyYKe42OU+9ythJC+AEEZ2CQDgfT09PUajUZKk9PR0tWNRh9VqbWlpaW1tVTsQAAgXDQ0NTiWHDx/uPzrJaDQuX748MTFxypQpVVVVTqcUFBQUFBS42eKA9SslO3bsyM3NjYmJKSsrU8p1Op3BYJAuG8aFAUAw4DfjAADepwxcSklJiY6OVjsWdciy3N7eLknSiBEj1I4FAMJUUVGRLMtOqZz169dnZWW1tbV1dXXt3LnT6ZRhjWYasH6lRK/XV1dXv/vuu8XFxWazWQjR1tYmSZJXRksBQAAiuwQA8DKj0WgymSIiInQ6ndqxqCYiIiIlJSUigjHCCBFz5841GAxqRwH8S1dXl7KRk5Oj1+uVbSXRk52dXV9fP9iJL7300pkzZ2JiYtLS0u67776NGzc67v3444+9Et6WLVuEEAsXLrRYLF6pEAACHNklAICXaTQaZUJcZGSk2rGoJiIiIiMjQ+0oAK85evTohAkTUlJS1A4EcGZPJHkwMkgZVaQKs9kcExOjVusA4HVklwAA3peamqp2CAC8bMeOHbNnz1Y7CuCfsrOzPTtxyZIlTz755P/7f/+vubn5t7/9rdNeZdGljz766ErjG0h0dHRZWdmtt976zjvvbNmy5dixY75oBQBUwYh9AAAAAEGv/4hR+/rZjgtpb926ta6uTqvVFhYWrlixQlyeT6ewWq3uD4AasH57idOfQoh9+/YVFxdrtdrS0tJdu3Z5eJ0AEJAYuwQAAAAg6DU2NjqVDJgn0mg0L7zwwgsvvDDgMZ9++qn7LQ5Yv2Oh0wELFy5UcS4eAPgUY5cAAAAAAADgObJLAAAAAAAA8BzZJQAAAAAAAHiO7BIA4ErZbDa1QwAAAACgGrJLAIArYrPZzp0719TURI6pP1mWuS0AAAAIefxmHADgihiNxr6+vp6eHsdfdIYQoru7u6GhIT4+Pjc3V+1YAAAAAB8iuwQAuCJJSUmRkZGSJJFdchIZGSmYNggAAIAwQHYJAHClEhIS1A4hEEVERAghrFar2oEAAAAAvsW6SwAA+IQydonsEgCEMBWH7rpo1+Oo3DnRW9fLkGcgxJBdAgDAJ5TskizLsiyrHQsAhL6srCynkqSkpMEO7unp8Uqjw+rhvRuPi6Y9/n/HnRO99Z+a+/W4uG8AAgfZJQAAfCIiIkL5YpbhSwDgBw0NDY4fdTqdwWCQLrOXNzc3T5s2TaPRZGZmrlq1SknrKMds3749KSmpsrJy165dSUlJZWVl9l3vvvtuRkZGfn7+uXPnhoxk9erVEyZM0Gg0c+fOfe+99zyIx7XDhw/3H2RkNBqXL1+emJg4ZcqUqqoqp1MKCgoKCgqGrFlx/vz56dOna7XaFStWGI1G1+329PTce++9Wq02Ly/v1KlT9gOUjR07duTm5sbExCg300U9gx0/2H0DEGjILgEA4CssvQQAamlraxOXB5A6DpNZt27dtm3bzGZzbW3t7Nmz161bJy6Po7Farbt3777llluqqqp2795dXFxs39Xa2nrhwoX169evXbt2yKa3bNly6tSpjo6ODRs2LFiwwIN4XCsqKuo/8Gf9+vVZWVltbW1vv/3266+/7rR3WANp9+zZc+DAgdra2sTExF/84hdDtqvT6RoaGioqKo4cOSIu3zHlT71eX11dvW/fPuVmuqhnsOMHu28AAo3EP1EAAHzk3LlzZrM5Nzc3Pj5e7VgQ4tauXfvcc89NnjzZR/V/+umn48ePZ34KAkdNTc2nn346bty4nJwcvV7vuCs7O7u+vl4IIUkDvOyMGDFCSVgo0tPTm5qaHA8ecKO9vT01NdVgMGRnZ3d1dTlW6NTK6dOnH3roocrKSpPJlJeXV1FRYd87rHj+P3v3Hh9FeS9+fGaT3SR7SbKb7OYCyFW8VgGBWgstLbdCgYqew6WtyAFqqyLWVkTQV3/2glBRKKX9A4GDWPU09Ei0CCgCVmixL609tSJCuCiQ+21z2U32Pr8/pk7Xze5ms9lkdjef9x+8Zp+ZeZ7vTLLLzjffeaZbIb1ZLJbz589bLBZBEJqamgoLC+O70BNFsbKyctCgQYIgNDc3X3vttSHxhIxrs9nOnDkjj9vQ0GCz2cIeb9djj94Sfd9gY8eO3bZt26RJk+I4WAAJxDPjAAA94PF4nE6n2WxWO5DUwMTe6DfXX3/9uHHj1q9f30f9z5w5c8WKFWPHju2j/oGe+va3vy0vyIkkobschMfj0el0giDccssthw8fjnvczMxuLqAWLFiwaNGiXbt2WSyWxsbGrrNBJTaeSJ0npJ9AICAX4UYRfLdaPxQuKOcNQLIhuwQAiJUkSbW1tW632+/3FxYWqh1OCuDOOPSbvLy8wsLCadOm9d0Q48aNmzp1at/1D/RIt1keQRC0Wm15efmcOXOOHDmyYcOG48ePC4Iwa9asnTt3fuMb3ygtLe02daL485//PGPGjEOHDk2fPj36llVVVePHj8/NzT19+vTvf//7Poqnq0WLFj3zzDNPPPFEQ0PDU089FbJWnnTp3XffjaWrHTt2rFixwmAwrF+/fsGCBdE3Xrhw4ZYtW3760592dHTs3LkzvuCjC3veACQb5l0CAMSqvr7e7XZnZGTk5+erHUtqoHYJAPqNzWYLaZGn7zGbzTt37ty1a5fcuGrVqoaGhsmTJ1sslpkzZ27cuFH4rABHKcPpOnt0aWnpyJEjt2zZsnnzZqUxZAZruXH79u3Lly+3WCyPPvrokiVLgnuLPZ7owo67adOmyspKs9k8a9asZcuWhRyF3++PpbBI3mXp0qV33HHHiBEjHA5HcDxhx924cWNtbW1hYeGkSZPmzp0b0lXXfyP1E2X7sOcNQLJh3iUAQExaW1vlmRcGDRqk1+vVDic1NDU1NTc35+Xldb3mARJr7969e/bsOXDgQB/1n5GRcfjwYWqXkDxKS0vffvvtq6++uh/Gin7PHWRer/e11157/PHHP/roo/4cl3mXgCRB7RIAoHsul6uhoUEQhIKCAlJLsaN2CQBSXUgdDbp67LHHRFE0Go3PP//8sWPH1A4HgDrILgEAuuH3+2tqaiRJMhgM8kNhECN5WhCfz6d2IACAOEmfUTuQ5LV+/XpJktxud3l5eVFRkdrhAFAH2SUAQDfq6up8Pp9Wqy0uLlY7lhRDdgkAEIeioiKxCxI3AJIZz4wDAERjt9udTqcoisXFxb15ls3AJGeXuDMOANAjdXV1aocAAD3DdQIAIKKOjo7GxkZBEKxWa3Z2ttrhpB553iVJkkgwAQAAII2RXQIAhOf3++W/nRqNxry8PLXDSUmiKMoJJm6OAwAAQBojuwQACEOSpNraWp/Pp9PpmOihN7g5DgAAAGmP7BIAIIyGhoaOjg6NRsN0S71E7RIAAADSHhcMAIBQzc3Nra2toiiWlpZmZWWpHU5q02q1Wq1W7SgAAL0limKfbp8oao0LYIAjuwQA+Jz29vampiZBEGw2W05OjtrhpDybzTZs2LDc3Fy1AwGANFdSUtKn/UuSFNJiMpl6tH3/iH3c6PEDQI+QXQIA/JvL5ZJn8jabzSREAAAppLa2NvilKIqiKB49etRms40fP/7SpUtyu9frffTRR6+55prRo0c/8sgjHo9Hbi8vL9fpdKIo5ubmTpo0afTo0UpXBw8elHsL7t9isTgcDvEzwavCbh9pXHnLbdu2DR48WKfTlZeXB+81ceLEiRMnxngGwo4bqf8o8QNAHMguAQD+xev1VldXS5JkNBoLCwvVDgcAgPjJJTxNTU1XrlxZs2bNQw89JLc//vjjgwYNOnv2bEVFxaBBgx5//HG5fcmSJXPmzPF6vbW1tQ8//HBLS4vS1ezZs7sWBDU3N8ujyIJXhd0+0rjyltXV1adPny4rK1u4cGHIUcReixR23Ej9R4kfAOIg8lECAJDV1NQ4HI6srKzBgwczkzeQWvbu3btnz54DBw70Uf8ZGRmHDx+eOnVqH/UP9FRpaenbb7999dVXDxo0qLq6OmRVVVWVIAiiKNrt9vz8fIfDUVpa2tbWJghCcXHxmTNn8vPzBUGw2+3XX399TU2NIAj79++/8847vV5vYWGh1Wrds2fPhAkTgrsVxdBLp64tUdZGGjdky+h9xiJ6nIkdKxmMHTt227ZtkyZNUjsQYKDLVDsAAECyKCoqEkWxsLCQ1BIAIFXIiSShu1xJZua/L3zCbjZ37lyPx+N0Opubm1944YUZM2bY7fbYw/B4PDqdLvo2yZzKiSV+AIiC6wcAwL9oNJri4uLg798AAKS0P//5zx6P59ChQ9OnT5dblixZsmPHDvl2sO3bt991111yu9VqfffddzUazZAhQ6699lqn09lt51qttry83Ov1Hjp0aNq0adE3jjRudD2ad6mnehQ/AERHdgkAAABAyrPZbF0bS0tLR44cuWXLls2bN8stv/jFLxoaGoYMGTJkyJCmpqZf/OIXcvvw4cP/8Y9/jB49WhTFhQsXlpWVKZ0o816HTIAtT2NkNpt37ty5a9eu6NtHGlfZMuRfmd/vj73iKey4UfqPFD8AxCEdbrUFAAAY4Jh3CQONMu9SlG3SY14hRMe8S0CSoHYJAAAAQLrpWgcEAOg7TK4BAEDfamtra21tNRqNZrNZ7VgAYKCgagkA+hO1SwAwELlcLr529xu/3+9yudxut9qBAAAAAH2C2iUAGHA6Ozurqqqys7NLS0s1Gv7M0OcMBoNWq+VJzwAAAEhXZJcAYCASRTEjI4PZKPqHTqcjtQQAidXe3j579mw+XfHJJ59UVlaqHQUAsksAMPDk5OQMGTJEq9WSXQIApKisrKzbb7+9sLBQ7UCgss2bN2dlZakdBQCySwAwIPHHXgBAStPpdPfcc8/VV1+tdiBQ2e9//3ur1ap2FACY1RsAAAAAAAC9QO0SAAAAgNRTVlZms9nUjgIqa2pqUjsEAIJAdgkAAABAypk7d+4///lPtaOA+m699Vam3wKSAdklAEhnbrebqS4BAOln+/btaocAAPg35l0CgLTV2tp6+fJlKsYBAAAA9CmySwCQnux2e319vSAIgUBA7VggSJLkcDhaWlrUDgQAAABIPO6MA4A01NTU1NzcLAiC2WxmMoIkUVNTIwiCyWTKyMhQOxYAAAAgkcguAUBakSSprq6uvb1dEASLxVJQUKB2RBAEQRBFMSMjw+/3e71esksAAABIM2SXACB9+Hy+6upqt9stimJxcbHRaFQ7IvybVqv1+/0+n0/tQAAAAIAEI7sEAGnC7XZXV1f7fL6MjIzS0tLs7Gy1I8LnaLVal8vl9XrVDgQAAABIMLJLAJAOnE5nbW1tIBDQ6XSlpaVarVbtiBBK/qGQXQIAAED6IbsEACmvtbVVfjxcTk5OSUkJ0/okp8zMTEEQuDMOAAAA6YfsEgCktoaGBvk59yaTqaioSBRFtSNCeHLtksfjUTsQAAAAIMHILgFAqgp+PJzZbC4sLFQ7IkSj0+kEQfB6vZIkkQQEAABAOiG7BAApyev11tTUuN1uQRBsNlteXp7aEaEbmZmZGo0mEAh4vV450wQAAACkB7JLAJB6HA5HXV1dIBDIyMgoKSnJyclROyLERKfTuVwuj8dDdgkAAADphOwSAKSYxsZGu90uCEJ2dnZJSYk8VzRSglarlbNLagcCAAAAJBLXJACQSgKBgMPhEAQhNzfXZrMxfU9qkUuWyC4BAAAgzZBdAoBUotFoSkpKXC4XEy2lImVib7UDAQAAABKJ7BIApJisrKysrCy1o0A8tFqtQO0SAAAA0o5G7QAAABgo5NqlQCDg9/vVjgUAAABIGLJLAAD0E1EUKV8CAABA+iG7BABJivKWtCSXL7ndbrUDAQAAABKG7BIAJB2fz1dZWVldXS1JktqxIMF4bBwAAADSD9klAEhGbrfb4/GQg0g/8ozs/GQBAACQTnhmHAAknczMzJKSEq1WK8/Rg3TCnXEAAABIP2SXACAZ6fV6tUNAn9DpdIWFhXIFE5Ba/v73v3O7LoBufeELXygqKlI7CgD9jewSAAD9RxRFs9msdhRAj2m12ueff76srEztQAAktfPnzz/77LMLFixQOxAA/Y3sEgAAALphNpvLy8tHjRqldiAAkto3v/lNtUMAoA5m9QYAdXi93pqaGr/fr3YgAAAAANAr1C4BgArsdntTU5MkSRkZGTabTe1wAAAAACB+ZJcAoF+5XK66ujr5gfR6vZ4peAAAAACkOrJLANBPJElqbm622+2SJGk0msLCwry8PLWDAgAAAIDeIrsEAP2hvb29sbHR5/MJgmA0Gq1Wa2Ymn8AAAAAA0gHXNgDQt1wuV0NDg8vlEgRBq9VarVaDwaB2UAAAAACQMGSXAKCveL3ehoYGp9MpCEJGRkZBQUFubq4oimrHBfUFAoGOjo5AIJCbm6t2LAAAAEBvkV0CgMQLBAJNTU2tra2SJImimJeXZ7FYMjIy1I4LycLr9dbU1Gg0GrJLAAAASANklwAgwVpbW5ubm+UplgwGQ2FhoU6nUzsoJBedTpeVlZWVlSXnH9UOBwAAAOgVsksAkDBut7uhoaGzs1MQhMzMTKvVajQa1Q4KyUgUxauuukrtKAAAAIDEILsEAAkQCATq6+vb29sFQdBoNGaz2Ww2U5MCAAAAYCAguwQACaDRaLxeryAIJpOpsLAwM5NPVwAAAAADBdc/AJAYVqtVFMWsrCy1AwEAAACAfkV2CQASIzs7W+0QAAAAAEAFGrUDAAAAAAAAQAojuwQAMQkEAs3NzfX19WoHAgAAAADJhewSAMTE6/U2NTW1trZ6PB61YwEAAACAJMK8SwAQk6ysrLy8vJycHJ1Op3YsSCtut5vJ4AEAAJDSyC4BQKxsNpvaISDdXLx40e/3Dx06lKwl0ttbb73l9/vVjgIDwo033lhcXKx2FOgTTU1N//d//6d2FBjQrrnmmiFDhqgdRZIiuwQAgGp0Ol1nZ6fL5SK7hPQ2b968cePG8XuOvvaPf/zj17/+9eLFi9UOBH3ivffeW7x48fjx49UOBAPU6dOn16xZs2rVKrUDSVJklwBAEARBkiSn02m32wsKCvR6vdrhYKDIycnp7Ozs7OzMzc1VOxagb5WVlVFRgr42b948tUNA37rxxhvffPNNtaPAALV8+XK1Q0hqZJcADHR+v7+1tbW1tdXn8wmCYLfbyS6h32RnZwuC4HK51A4EAAAAiB/ZJQADl9vtbmlpaW9vlyRJEISMjIy8vLz8/Hy148IAiN91qAAAIABJREFUImeXPB6P3+/PyMhQOxwAAAAgHmSXAAw4kiS1tbW1tra63W65Ra/X5+fnGwwGdQPDAJSRkaHT6Twej8vl4jcQAAAAKYrsEoABxOfz2e32tra2QCAgCIJGo8nNzc3Ly2OiWagoOzub7BIgCIIoinIlKRJClfMZZVB+vgCQ3sguARgQOjs7W1tbHQ6H/NU2MzMzPz8/NzeXe5Gguuzs7La2ts7OTrUDAdAD5Er6H+ccUfDr0ac4vYiFRu0AAKAP+Xy+5ubmTz/9tLKyUp5fSa/Xl5aWDh8+3Gw2k1pCMsjJyREEweVy8b0NAxxvgcRKtvOZbPEASE7l5eU6nc5isXzta19TOxb0DLVLANKQJElOp7Otrc3pdMotoijm5eVxExySkE6n02g0gUDA7XbLk3wDA1Pw38blZVEU5Zdye8jL4B1D2rv+mV1pCdtz9N5C9lIWlJexHFcsx6I0hj2cbgMLu6rrNl1jDt499gqF+M5h3D306JxjAErd34rS0tLq6mq1o+hGf57ehQsXlpWVzZ8/v99G7ColfihJiOwSgDQkSVJtba38LVmv1+fm5hoMhpBv7UDyyMnJcTqdLpeL7BKgCEk2CRGSR2GXQ7IkIXmN3q/qURYmxmOJkhGLO+aw20TvOb4j6mk8cfTQ03MOxKKjo0Ov1yewQ5/PJ0mSVquNfZeampoEBpAGvF5vpNRSHKc3PvxQ4sOdcQDSkEajycvLs1gsQ4cOLS0tNRqNpJaQzOSb4zo6OtQOBEgiIXmEWJImIRU6sfQcvEv03nqT14jlWKL3H2Ngkc5AjDNtx1611Mt4ovQQ388UA9k///lPURRDfk/kli1btphMppMnTx47diw/P7+8vFzZoKGhYcKECQaDoaioaOXKlcp/wYMHDxZFcfDgwfLLYcOGiaJ41VVXKX2ePn36hhtuyM/PX7JkicPhUDpsb29ftGjRiBEjBg8ePGvWrLa2tpBg7Hb70qVLjUbjgw8+KLePGjVKKcpTRD/Ybo9LEIRly5YVFRVdc801+/btC9kxbPDRjyvs6VX2eumll26++WadTqfT6ZQwOjo6vve975nN5nHjxp09ezaW45INHTo05ITEfXrjPlFx/FCgILsEID1ZrdaCgoJ++OMG0HtydomJvYEECr5/LRULXrieUaTijw/96aabbur6SyK3+P3+3bt3f+tb33r22Wd37NixcOFCZYPVq1c//fTTHo/nwoULU6dOXb16tdxeWVl5/vz5b3/72w6HIxAIrF+/vrKy8vLly0qfx48fP3bsWEtLyy233PLwww8rHa5bt27dunWXL1+uq6tbvXr1unXrQoK58847v/a1r1VXV2/dulVuP3/+vFKap4h+sN0elyAIv/nNb2pra1944YW77rorZMewwUc/rrCnV9nrjTfeePnll91ud1lZmRLGmjVrLBZLbW3tiRMnXn/9dSHmd/GlS5dCToiyqqenN+4TFccPBf8mAUAKcjqdtbW1fr9f7UCAxDh//nxFRYU8tzcQh7KystmzZ/dd/8XFxefOnYt7d6PRWFNTE30b4fNXFJFWBb/s9stt1++6UVriW9WtGI9FClfflJCYE35cvT+HUX5wUQKIJba5c+e+9NJL3W6GvjN79uyysrI+6vzQoUOTJk0Kuyr6714gEAjZxmKxBP/6Wa3W4H3ffffdsWPHzp0799SpUyF91tXVyct2uz0/P19ZVVRU5PF45GWXy1VUVBSyo9PpjDHy6KIf1zvvvHPzzTfn5ORMmDCh66dNpOCjrIoSZKRPM6vV2tTUJC/X19fHfYDB4ji9cZ+oSDFIkrRs2bKtW7f24GAGGGqXAKSkxsbGtra29vZ2tQMBEoPyJSA+Xb/dKqvELrNZJzM52q5Hka6i/OCAhOv6OXDttdcG//rJSRCFXq83GAyVlZVd/18Wg6acD35WjCRJgUBAWe4aQ4wTPLnd7lg2CwlGcffdd69ataqpqengwYNRtg8JPvqqnkrUPcXBenl6e3qiQvTohzKQkV0CkJJyc3Pz8/PlC3IgDTD1EpAQXafvSaEE00AW5WfEjw99Yd68eb/5zW+uXLni8Xg++eSTFStWKKsuXrx4//33/+EPfzh+/PjevXsvXLgQvOMbb7xRV1cnCMJzzz33n//5n0r7/Pnz3377bXn5j3/84+233x5jJFqtVp4PqKamZtu2bbfddltvjqu+vv6mm25qb29/7rnnuq6NFHz0VT21cOHCLVu2BAIBh8Oxc+fO3nSliPv0RhL9RCX2hzJwkF0CkJLy8/OtVmsv/7QCJA9ql4A4hGSOYpxiKdIu8fXWR7pOURy8HFKiFWlVt7oecnx79TSeKD0k1U8ByS943uWQZeHz6eaQhYcffri9vf0rX/mK2WxeuXLlj3/8Y7m9tLR05MiR58+fLy4uNhqNzz///KhRo5RJvgVBmDp16vz5861W64cffvjLX/5SaV+/fv3atWsNBkN2dvYvf/nL9evXBwcZEl4wecYijUbzxS9+8fz586+99lr0441+XE8++eS0adOmTJkiJ0RChosUfKRVkU5vpEjkfzdu3FhbW1tYWDhp0qSepoEinauent5enqge/VCgyFQ7AAD4HEmSOjo62tvbOzo6SkpKqE7CAJGdna3RaAKBgNvtzsrKUjscIGUEJyOUNIQY7rljYfMXIZmLKKsijZvA+z5CbieRr5S6VmDFHXO348Ze59X7eOLoIeHnHGkg0i9DyG9O18aMjIy1a9euXbs2ZMfq6urgl7W1tSEblJSUnDx5suuIBQUFf/vb3+RJG0wmU+x3h82fP9/j8UTZIFi3x3Xvvffee++9kcaNFHykVdHfwpFe6vX6HTt27NixQxCE9vb2HpUfRhqxp6e3lyeqRz8UKMguAUgKgUCgo6PD4XB0dHT4/X650el0kl3CwJGTk+N0Ojs7O8kuYWAKezEQx8tYWmK/ZOppY7ebRXnZ08OMMbzenI0oogwa35mJZRV5JSQzURRzc3PVjiKJtLS0/OpXv5o2bVpCeuP0Jj+ySwDU5PF4nE6nfEWtNGZmZhqNRoPBQGoJA4qcXero6MjPz1c7FgADAvedAbFTbrZKxXdNlOD74rgKCgqam5vz8vK++93vvvLKK4nqFkmO7BKA/iZJUmdnp5xU8nq9SntWVpbBYDCZTMymhIHJaDRqNJoYnykDIElEuekj5S5BlcvLdDooIFH67Zd/0KBBITfoyUpLS6uqquLrM45Swd5oamrq2tgXx4WkQnYJQD+R733r6OhwOp0+n09pz87OliuVSCphgNNqtXl5eWpHAaBnUjrb0nWyp5CFhGCyJKBH0jXVkq7HBQXZJQB9y+VyyTf7uFwupVEURb1ebzAYjEZjRkaGiuEBAAaUVMxx9GnRQT+ckFQ85wCAniK7BKBv1dfXu91ueVmr1RoMBnlCpR49PwIAAAADXFtbW2Vl5VNPPaV2IBigPvzww6FDh6odRfIiuwSgbxmNxszMTLlSSavVqh0OAAAAUlJVVVVNTc1///d/qx0IBqiamprrr79e7SiSF9klAL3S2dnpcrny8/Mj1SJZLJZ+DgkAkGwCgcDJkycLCgrUDgRprrGxMfhOfKSZ6667bsKECSdOnFA7EAxQy5cvv/nmm9WOInmRXQLQKzU1NX6/Pzs7OycnR+1YAABJyuv1fv/739doNGoHgjTX0tLy5S9/We0oAGAgIrsEoFcMBkMgEGASJQBAFFlZWR9++GFxcbHagSDNzZs3b9y4cWpHAQADEdklAOFJkuRyuVwul9frtdlskTYrKirqz6gAAAAAAMmG7BKAf/P5fPI8Si6Xy+12K48QtlgsmZl8XAD9pLOzs7W1NTs7Oz8/X+1YAABISaIoKl9lu64SBCHS2t73DwxMXC4CA5okSW63W8ko+Xy+4LUajUav1+fk5HDjG9CfPB5Pe3u71+sluwQAQHQlJSU1NTVd26OkfiRJ6v2X29hTSyaTqb29vZfDAcmPuRWBAcfj8bS2ttbW1l66dOn8+fNXrlxpbGx0OBw+n08UxZycHLPZXFpaOnz48JEjR5aUlOTn52dkZKgdNTCAGAwGs9lcWFiodiCACqJc8omi2PsLQv5eAqSZ2trakJaDBw92/bhwOp1Lly41Go1jx449depUyC4TJ06cOHFijCOG7V9u2bZt2+DBg3U6XXl5udxusVgcDof4mR4cGJBqqF0CBgS3293R0RGpQEl+4lt2dnZ2djYP9AFUl5mZSWoJaY9yAwB9ZPbs2V0/LtasWVNSUtLc3NzW1rZjx46QXXp0j1vY/uWW6urq06dPHz16dOHChR6PRxCE5uZm7qHDAMFlJDAgdHR0KAVKgiDodLrc3NyioqKhQ4eOHDly0KBBFotFr9eTWgIA9A/KDQD0xqBBg5S3p7wwaNCgKNu/9NJLq1ev1ul0hYWF99xzT8ja995777333ut9VBs2bMjNzZ0/f77X6+19b0BqoXYJSAeBQMDtdmdlZUVKD2VnZxuNxqysLAqUAADJiXIDALGrqqqSF+J4q8pvc1V4PB6dTqfW6ECf4goTSAeVlZWVlZUdHR2RNsjJySkpKaFACQCgLsoNAKhi0aJFzzzzjNfrra6u/uUvfxmytkeFkD2l1WrLy8u9Xu+hQ4emTZvWR6MAquMiE0gBkiRF/76blZWVkZERCAT6LSQAAOJQVVUlSZJcaCAvKAUI3VK33ECtoQFEZ7PZQlpCUthy46ZNmyorK81m86xZs5YtWyZ8fo5/v98fewFU2P6VlpB/BUEoKytbuHCh2WzeuXPnrl274jxOIOlxZxyQjHw+n9vt9ng88r8ej0cUxZEjR0ba3mazMSsEACD9yOUGTzzxRENDw1NPPRWyVq41ePfdd/tiaLncYM6cOUeOHNmwYcPx48f7YhQAvVRXVxfSEjZPZDAY9uzZs2fPnrDbvP/++7GPGLb/4MaQDebPn0+GGgMB2SVAfT6fzxPE7XZ3rUISRdHn82Vmhn/PkloCAKSWsOUGwQvy5dmmTZvuu+8+s9k8cuTI3/3ud1u3bg2eY8Xv98d+u3fY/pUSA2VKJqV/udxAp9PNnDmTcgMAAKIjuwT0N6/X6/m8sLkkrVar0+mysrKysrJ0Op1Wq1UlWgAA+gLlBgAApBOyS0D/qaura29v7/rtVsklBaMcCYDf729tbXW73SUlJWrHAgAAAEREdglIGJ/P5/P5srOzI22gFN6HJJK0Wi25JABhNTc3S5LEA4wBAACQzMguAYnh8/k++eQTQRBGjRoVKVVkNpvNZjP3uAGIUUZGRk5OTkdHh8PhsFgsaocDAAAAhBfrPIjAgOX3+10uV3t7e3Nzs8PhiLRZZmZmRkaGVqv1+/2RttFqtaSWAPSIwWAQBMHpdKodCAAAABARtUvAv0iS5P08n8/n9XqDp9w2mUxGozFSDyNGjOiXSAEMIEajsaGhweVyRXlqJAAAAKAuvqdiwJEkSU4bKfkjWZSao8zMTLnsKCcnpz9DBYDMzMycnJzOzs729naz2ax2OAAAAEAYZJcwsLjd7itXroR9JrEgCBkZGUoiSSa/ZMptACoyGo2dnZ0Oh4PsEgAASUJ+XI8q/cvXJnGMHsuOiTquvj4/SEJkl5BWWltbHQ5Hbm6uyWQKu0FmZqb81LaQ/JFMo2EmMgBJx2QyNTY2ulwur9fL3G0AAAQrKSmpqanp/3H7OnUSpX/5cia+PrvdMVHHFXs/JpOpvb09IYNCXVxLIwUEAgGPxyPfGNLS0hJlS4/H09HR4Xa7I22QkZExfPjwUaNGDR06tLS01Gq1ms1mo9GYlZVFaglAcpKfHCcIAt+9gN7r63rkKP2Lohjf6LHsmKjjol4bKae2tlZZlt8sW7ZsMZlMJ0+e3LVrl8lkKi8vl9c+8MAD11xzjcFgmD59+ltvvRW8y9GjR2022/jx4y9duhS9XRCEgwcPdn1Xyi3btm0bPHiwTqdTBu3o6Pje975nNpvHjRt39uzZWN7OYft3Op1Lly41Go1jx449depUyC4TJ06cOHFijGfs8uXLt956q9lsXrZsWfBjQ8KOGyn+SMfb0/NjsVgcDof4mRgPAcmJ2iUkBXkuJJ/P5/f7fZ9RloPn1RYEITc3N1ImyGQyZWVlZWdnRxmLaXEBpByTydTR0dHe3m6xWNSOBUgMyg161CflBkghTqfTbrf3Rc8OhyP6r6j8ZvH7/bt37/7mN7+5dOnS3bt3L1y40OPxCIKwYcOGbdu2eb3e48ePz5s3T/4Flndpamq6cuXKH//4x4ceemjfvn1R2gVBmD17dtd3pdxSXV19+vTpo0ePKoOuWbPGYrHU1tb6fL6dO3cKMbzLwva/Zs2akpKS5ubmtra2HTt2dD3wGM7fvzz33HP/+7//q9frn3jiiUceeeS3v/1t9HHDxh/peHt6fpqbm7mHLn1IQL9ra2trbGysra2tqqq6dOnShQsXKrpz/vz5Tz/9tLKysqamxufzqX0EANCv/H7/uXPnKioq3G632rEgSZWVlclf6PtIcXHxuXPn4t7daDTW1NQEtwR/C5W/lG7evNloNP7lL3/ZuXOn0Wjct2+fvHblypWjR4/W6/XTpk07duxY8C5HjhyxWq233HLLp59+Gr1dkqQDBw50/fYrt/z6178eNGiQVqtVBnU6nStWrMjPzx87duyZM2di+doctn+Hw3H33XcbDIYxY8Z8+OGHIWsnTJgwYcKE7k7ev+K8dOnSF7/4xfz8/P/6r/+Sr7GjjBsp/kjH29PzEzINXCyH0D/mzp370ksvqR3FgDZ79uyEXKVG8oUvfEEeqLS0NGRVaWmpFPTZErJQUVExZ84ci8ViMBgmT54sfP4jyG63S5LU3t5uMpm6bQ/pP2yLsmy1WpuamuTl+vr62N8vIVuazWaln8bGxrjfd4IgVFZWystNTU1WqzX6uFHij7QcS0v0fZPWsmXLtm7dqnYUyYtbgZBgXq+3paUl+t+y7Ha7nHd3Op1ut1t+WJs8F1JOTo7JZMrPzy8sLCwuLh48ePDQoUNHjRo1cuTIoUOHDho0qLi4OCMjo7+OBgCSgkaj0ev1AjfHIU1JkiQIglJucOrUKbncQF67YcOGs2fPtrS0PProo/PmzQveRS4rWLNmzUMPPRS9Xfjsz+lhh5b/nF5WVqYMqvy5/sSJE6+//roQlJqJJGz/SrnBm2++uX///q6jd9utQi43uHDhgtFofOSRR7odN2z8kY43Uj+Rtm9ubhY+f3EIyA4cONB3166HDh3Ky8uTB6qqqlJ+/eSFqqqqKIEtWLBg0qRJH3/8cUtLy969eyNtFukuh7jvfggu4UnUm0WpEuqlQCDQ7dwgfRF/FIk6NKij7978SBuBQMDr9bpcLqfT2dbWZrfbPR5PpI0dDkdFRcWlS5eidNjU1FRfX9/U1NTa2qokmPogcABIH21tbRUVFcGFGECwfqhdysvLM8dLp9PJtUuUG8TYT9duKTeIBbVL6e3QoUOTJk0KaQz5VYz0YWK1Wo8cOdLZ2fnBBx+sXbs25Jd5//79brd77969CxYs6LY97LhShDfIAw888Pjjj/v9/vb29vXr18f9YXLvvfeuW7fO4/FUVVU9+OCDIWt7VAj5//7f/7ty5Upzc/MPf/jDBx54IPq4UeJP1IeJXBfp8XgOHjw4efLkWI5CLdQuRccENAOdJEn+cOTZjpSFkL3k56yF7VCr1RoMBp1OF2VQ5g0BgJ4yGAwajcbj8bhcruizywF94cyZM12/D8TuqquukheU4oIYJ9pYsGDBokWLdu3aZbFYGhsbS0pKwm5GuUGI/i83iP7dD+g7NptNWVYmnJZ/7YM/Z7Zv3758+fL6+vopU6Zs3rx5w4YNwWtLS0tHjhw5ZMiQP/zhD8Gdh21X3l/ygjKWMmLw8saNGx988MHCwsKrrrrqd7/73WOPPdbtEYXtf9OmTffdd5/ZbB45cuTvfve7rVu3Bsfv9/tjeUKR3OHSpUvvuOOOc+fO/cd//MfWrVujjxsp/kjH29PzIwiCXBep0+lmzpy5a9eubo8CSYvsUtqK/s2jubm5vb09bOYoLFEUMz4v0pY6na7rnyUBAL2k0WiMRmNbW1tbWxvZJfQ/5W6UflZVVTV+/Pjc3NzTp0///ve/D1n75z//ecaMGYcOHZo+fXos7bFbuHDhli1bfvrTn3Z0dMgT2cZn0aJFzzzzzBNPPNHQ0PDUU0+FrJWf8fTuu+/G0tWOHTtWrFhhMBjWr1+/YMGC6BsnKv4otFpteXn5nDlzjhw5smHDhuPHj/fFKEC36urqlOXgXKqyLC/Mnz9//vz5YbcUBGHcuHFXrlzp2nnY9rAZ27BDC4Kg1+t37NixY8cOr9f72muvXX/99d0eUdj+DQbDnj179uzZE3ab999/v9tug/cK+7ETdtxI8Uc63kj9RNl+/vz53BCXHph3KZVIkuTz+TweT2dnp9frjbSZPPnrhQsXovypSpIkj8cjp5ZEUczMzMzKytLr9fKcRwUFBTabrbS0dMiQIUOHDh05cuSoUaOGDx9+1VVXyTMfyc/GBgD0p9zcXEEQ2tvb+6ESAehrYcsNgl/K5HIDi8Xy6KOPLlmyJGStXFawZcuWzZs3B3cetj3kQdpdhw7+d+PGjbW1tYWFhZMmTZo7d24sRxS2/02bNlVWVprN5lmzZi1btiwkfnlmgFh6Fj4rNxgxYoTD4di4cWP0cSPFH+l4e3p+hM/KDcxm886dOyk3QOoK+cXutj0Ojz32mCiKRqPx+eefP3bsWO877GepHj/6DQ//U5kkSfINaLH8G/zDMpvNhYWFkbo9d+6cIAjDhw+PVBDu9Xr9fr9chRRLFSUAIBl8+umnXq+3uLjYZDKpHQuSy969e/fs2aM89ivZmEymc+fOFRcXJ7DPSPfWJfbh1vKf6x9//PGPPvooUX32p1SPv6fmzZu3ePHixYsXqx0I+sTrr7++fv36EydOqB0IBqjly5fffPPNq1atUjuQJMWdcX2ls7PT7/fr9fpIuZv29va6uro4vv2IoqjRaKLn0YcPH56RkRFlG61WG2niJABA0jKZTPIzN8kuYYALmbaj2/Y4PPbYY08++aROp5s9e3Yq/rk+1eMH0lhRUZE83X4wm80WfJcfkHLILoUnz3kuFw3J5UVK9VDgMzqdLj8/P1IPdXV1Xq938ODBkW4iC/7eIxcQaTQaeSHkZchCLPWZcc9hCQBIZrm5uc3NzR0dHT6fj496DGSRkkcJrFpav369/ICkFJXq8QNpjCwS0lI6fzFVJhWKlI7xer12uz0kZySL5atJTk5OlOySTqeLfseZwWAYPny4nDPqdiwAAARB0Gq12dnZLpfL6XSqNcsyMGBRbgAAQCTJnl0Km/dRSopEUTSbzZH2ramp6ejoKCoqkqdB7SoQCLS2tkYPQPMZ+aFp8l1pcg1R9DvLun1umjyXdvRtAAAIIU+6x9MVgP5HFgkAgEj6Nrvh8/nkqaMjpVECgYA895CcRZL/FQTB7/cLnxUfRZGZmRkluyTXBEXpJDMzs7CwUM4cBWeRgpdjOUwAAPoNeSUAAAAkm88lfZT8jjLrUEjeR6kkCt5s0KBBkXq32+0tLS0Wi6WgoCDSNg6Ho9soQ/I+wQVEUfYqKioqLi6OkiHKyMiIkpwCAAAAAAB9Ta5KUTsK9EqmIAiffPKJnDOKrwv5DrWwqzQaTWZmZpT8jkajKSwslKdGku87C7sQX2DMZwQAAAAAA5N8IZnAyf6TZKz+1BfH9fjjj//iF7+QlyVJqqysbG9vX7hw4Ycffqhsc/z48WeffdbpdL7yyitarbasrGz+/PlR2kO6hSr+VbsUnFrqWiUUkusJ2SBK7wUFBVGqlmRUDwEAAACpiHIDqK6kpKSmpibsqihlEMFMJlN7e3svw4g+VkdHh16v7+UQqojxHMbu3Llzdrtdefnhhx9evHjxW9/61qlTp4I3u+eee9555x05V3Dy5MkZM2bI9zxFahcEwW63X7x4ccSIEQmMFj2iEQRhyJAhw4cPHzly5KhRo66++uqRI0eOGDFi2LBhV1111ZAhQwYNGlRaWlpSUmKz2axWa2FhocViMZvNeXl5JpPJaDQyOREAAAASpTel68k8Vn/qi+N6/PHHlWVJkq5cuXL69OkxY8YEb3P8+PHvfve78+fPF0VRp9OVl5dHbw/pFohDbW1t8Eun07l06VKj0Th27NiQhMUDDzxwzTXXGAyG6dOnv/XWW3KjxWJxOBziZ7rdvltiEEEQGhoaJkyYYDAYioqKVq5c2dHREbzZwYMHBUE4ePCgKIpDhgxROpk4ceLEiRNjHyvsy7Dxyxu0tLQsX77cZDKtXr1abne5XA8++GBRUVFJSclzzz03evTo4IGOHTs2ePDgkDdvj/pX7NixY8aMGcrLm2666fbbb+/6eeV2u5UylNtuu83pdEZvFwRh6tSp27dv7/akoe9oBEHIzMzMzMxkEmsAAAD0j5KSkkirYrwFw2Qy9T6M6GMp14EpJ+G353QtN3j//fevu+66ruUG27ZtKy8vlyTpT3/601133RW9Xfis3CCx0WIgW7NmTUlJSXNz85tvvrl///7gVRs2bDh79mxLS8ujjz46b948ubG5uVkQBOkz3W7frZ07dy5fvtzpdMq9rV69+umnn/Z4PBcuXJg6daqSbXnnnXduvfXW2bNnC4Iwa9as8ePHHzhwQOmkazBhSZJ06623njx5Un558uTJL33pS8qOYeOX195xxx2TJ0+uqqr6xje+IbevW7fO4/GcOnXq4sWLBoNBPi2KQ4cOnT17tqysbOHChdHPT6T+FYcPH77uuuu6PbQrV670qF0QhGuvvfbw4cPd9ow+JAEAACDFlZWVzZ49W+0oIjIajTU1NcEtId9CHQ7H3XffbTAYxowZI0+9oaxauXLl6NGj9Xr9tGn9303lAAAgAElEQVTTjh07JjeGTK0Q3FXY7aMQuuRiJEmqr68fP368IAg2m+3++++XLxSVzQ4cOCBJknwpOHjwYKWrCRMmTJgwIZYRg8MOeRk2fnkDu92+bNkyo9H48MMPy+2dnZ2rVq2y2WzFxcW7d++++uqrg0c5evTooEGDtFrtvn37op+fSP0rVq9e/corr0Q6e4phw4aFXRupXZKkl19++ZFHHol8tnpm7ty5L730UqJ6Q7I5dOjQpEmT5OXS0tKQC9vS0lJJksxmc1NTk7xNY2Oj8stWUVExZ84ci8ViMBgmT54sfD6j1HWsKNtHIgjCnDlzHnroIeX5V5IkWSyW4CCtVquyav78+S+//LIkSX/4wx8WLVrU07Mhe+ONN6ZNmyYvT5s27fDhw93GLwhCe3t7SD/FxcXKeet6XF6vV1mOr39Fbm5u2LUhZzjSyyibtba25uXlRRo3IZYtW7Z169Y+HSKlMe81AAApzOPxxP1cDiB5UG4gUW4A9ERVVZXyjpMXqqqqQrbxeDzK8oIFCyZNmvTxxx+3tLTs3bs3UrfKLjFuH+LOO+88depUS0uL0nLLLbcEX37X19crq5588smf/OQnbrf7Zz/72c9+9rMYhwgxY8aMzs7OEydOnDhxwuVyTZ8+PZb4jUZjSIvP54sySmZmZkhLT/tXxPIhGZbf7++2Pe7OkRh9m7wCAAB9pqampqKiwm63qx0I1JcqtUuUG8goN1CWE1tuQO1SeguuXVKE/Hbde++9cta1qqrqwQcfVNZardYjR450dnZ+8MEHa9euDd5Lru/zeDwHDx6cPHlyt9tHIm/zwQcfzJo1S3m/bN68eceOHVeuXPH7/V13WbFixfTp01esWBHSHmMhpOzIkSNTpkyZMmXK0aNHlcYo8Yc9lh/84Adr166VJKm+vn7fvn3f+c53wm4fy/mMfq5uvPHGs2fPdm0P2SsnJ+cvf/mLvPzuu+/m5uZ6PJ4o7ZIkffTRR2PGjIkydO9RuxQd2SUAAFKV3W4/d+5cY2Oj2oFAfamSXVKEXEgEZ5eqq6uVtWPGjNm4cWNdXZ3X65UfCxW2B7fb3e32kQiCsHv37unTpzc3NyuN06dPj7T9xx9/fMMNN7hcri984QsVFRXd9h/Jl7/85ePHjx8/fjz4ajnG41UUFhZGyS51Xe5p/wr5oVrRRwn70ufzRWmXJKm1tTU3NzfK0D1Cdim9hc0u2Wy24JcOh2PJkiUGg+Gmm2764IMPlIqKffv2DR06NCcnZ9asWR9//HFwpcW+ffu0Wq3BYLjjjjuUN3WU7cMK3kBelm+h9fl8Tz755LBhw/Ly8mbMmLFhw4bgvS5cuJCVlXX58uWQ3saNGzd+/PjYz8xXvvKVr371q8EtkeKPVGvicDjuvfdeq9VqtVrvvvvu6urq4GMJ2TeO/hU/+tGPXn311a6nLmQX+YciCEJhYWFpaenbb78dvV2SpJdffnnNmjWxn7Q4kF2KjuwSAACpyu/3K1doGOBSPbtEuUG38VNuEAuyS+ktbHYppf3617/+4Q9/qHYU/ers2bP33XdfX/R83333XbhwoS96VpBdio55lwAASFUajSYjI0PtKIB42Gy24JebNm2qrKw0m82zZs1atmyZIAjys4y3b9++fPlyi8Xy6KOPLlmyRGkXBEGeTshsNu/cuXPXrl1yY5Ttw1LW3nTTTYcOHTKZTPIDwletWtXQ0DB58mSLxTJz5syNGzcG77V27drjx4//5Cc/CelNTkXFeAamTp0q34v39a9/XWmMFL/yb8hD059++umWlhabzXbDDTe8+uqrmzZtCj6urv/2tH/FjBkzzpw5E3LqgveSG1988cUpU6aIomi1Wm+//fb9+/fLVQaR2gVBOHPmzMyZM2M8aUA6EUVx1apVv/rVr9QOpF+NHj06Pz+/L3q2WCwjRozoi54RIzH2/wIBAACQnPbu3btnz57gGaaTislkOnfuXHFxsdqBJMa2bdsuXry4ZcsWtQPpPxUVFVu3bv3tb3+b8J7vv//+H//4x4m6Jpw3b97ixYsXL16ckN6QbF5//fX169efOHFC7UAwQC1fvvzmm29etWqV2oEkqdC53wEAAABEotTpDKjsEuUGgCAIRUVFwQ99k9lstrq6OlXiAZIK2SUAAAAgVgO28H/9+vV90e3Pf/7zvugW6AtkkYAomHcJAAAA6ayoqEjsoqioSO24AABIH9QuAQAAIJ1RbgAAQF+jdgkAAAAAAADxI7sEAEA6kCSpvb2dGg0AAGTybbBqRxFN8kfYU31xRI8//riy/D//8z8ZGRmiKOp0uvLycqX9+PHj3/3ud+fPnx+yKlJ7SLdICO6MAwAgHfj9/rq6OkmS8vLysrOz1Q4HAID+UFJSUlNTE3aVJEmxZDpMJlN7e3ui44pJjBEqOjo69Hp938XTez09om6dO3fObrcrL++///7XXntt1qxZ5eXlCxcu9Hg8cvs999zzzjvvmM1mQRBOnjw5Y8YMh8MRpV0QBLvdfvHiRZ5ZmUDULgEAkA4yMzNNJpMgCM3NzWrHAvRK8v8xP/kj7CnKDZC6amtrg186nc6lS5cajcaxY8eeOnUqeNUDDzxwzTXXGAyG6dOnv/XWW3KjxWJxOBzKfP/dbh9WyO4hL2PvR/j8mzF4uaGhYcKECQaDoaioaOXKlR0dHcF7TZw4ceLEidF7ji9OeYOWlpbly5ebTKbVq1fL7S6X68EHHywqKiopKXnuuedGjx4dPNCxY8cGDx4c8ubtUf+KHTt2zJgxQ3nZ3Nw8a9YsQRC++c1vjh07Vml3u91yCkkQhNtuu83pdEZvFwRh6tSp27dv7/akIXZklwAASBPy9yen06n8KQ9IWiUlJZFWSZIUSw9yOlUVMUaoCLkOTEI9PaJuhS03kCSprKxs4cKFSvs999yzbdu28vJySZL+9Kc/3XXXXdHbhc/KDRIbLdLJmjVrSkpKmpub33zzzf379wev2rBhw9mzZ1taWh599NF58+bJjfKfZKTPdLt9WJIk3XrrrSdPnpRfnjx58ktf+pLSW+z9CJ9/MwYvr169+umnn/Z4PBcuXJg6dWpIFqZr8ImKU157xx13TJ48uaqq6hvf+Ibcvm7dOo/Hc+rUqYsXLxoMhpC/bB06dOjs2bMh7/ce9a84fPjwdddd1/VYjh49euDAAeXllStXwh5ypHZBEK699trDhw9HWot4SAAAIF1UVVVVVFTIt8hhQCkrK5s9e7baUURkNBpramqCW0K+hTocjrvvvttgMIwZM+bDDz8MXrty5crRo0fr9fpp06YdO3ZMblT+Ft31C23Y7cMK2T3kZfR+Qgbt2o+8XF9fP378eEEQbDbb/fff73Q6g/eaMGHChAkTokQYd5zyBna7fdmyZUaj8eGHH5bbOzs7V61aZbPZiouLd+/effXVVwePcvTo0UGDBmm12n379intPepfsXr16ldeeaXrsbjd7okTJyovhw0bFnKk0dslSXr55ZcfeeSRSOdq7ty5L730UqS1SHWHDh2aNGmSvFxaWhpyYVtaWipJktlsbmpqkrdpbGxUfnkqKirmzJljsVgMBsPkyZOFz2eUuo4VZfuw3njjjWnTpsnL06ZNO3z4cIz9RG9Rli0WS/DBWq3W6PEkME5BENrb20P6KS4uVs5z1/i9Xm9I/D3tX5Gbm9t17Ztvvhn9/5TgD8xIm7W2tubl5UUaN6xly5Zt3bq1R7sMKNQuAQCQPvLz8wVBaGtr8/v9ascC9ADlBomNU6LcAOmuqqpKeQfJC1VVVSHbBFfyLliwYNKkSR9//HFLS8vevXsjdavsEuP2ihkzZnR2dp44ceLEiRMul2v69Onx9RMsEAgoy7fcckvwZXx9fX2PuuplnEajMaTF5/NFGSUzM3R+5572r+j6Ifn8888PHTq0uLg4SgCCIET6IhTcHssnMHqgDzNXAACg3126dKmioqKhoUHtQNCvUqV2iXKD6PEkME5hQJYbULuU3oJrlxQhvy333nuvnEWtqqp68MEHlbVWq/XIkSOdnZ0ffPDB2rVrg/eS6/U8Hs/BgwcnT57c7faRHDlyZMqUKVOmTDl69KjS2G0/XVvkeKqrqx944AFl7ebNm3fs2HHlyhW/39916BgLIeOLM+yx/+AHP1i7dq0kSfX19fv27fvOd74TdvtYzn/0c3vjjTeePXtWebl3796///3vXXfMycn5y1/+Ii+/++67ubm5Ho8nSrskSR999NGYMWOiDN0VtUvRkV0CACCtOByOioqK8+fP+3w+tWNB/0mV7JIi5HIiOLtUXV2trB0zZszGjRvr6uq8Xq/8WKiwPbjd7m63j+TLX/7y8ePHjx8/HnzV2m0/UVrkP4zLy9OnT+82gBj1NM6wx15YWBglu9R1uaf9K+SHcAW37Nmzp6KiIsqg8kv5gytSuyRJra2tubm5kcYlu5TewmaXbDZb8EuHw7FkyRKDwXDTTTd98MEHSkXFvn37hg4dmpOTM2vWrI8//ji40mLfvn1ardZgMNxxxx3Kb2mU7aP4yle+8tWvfjW4JUo/kco+9u3bp9PpbrnlluD4fT7fk08+OWzYsLy8vBkzZmzYsCF4lHHjxo0fP777M9jzOCMF6XA47r33XqvVarVa77777urq6pCDClnuaf+KH/3oR6+++qryMuSRecHxa7VaQRAKCwtLS0vffvvt6O2SJL388str1qyJ/aRJZJe6Q3YJAIB0c/ny5YqKisbGRrUDQf9J9ewS5QYJj3NglhuQXUpvYbNLSG9nz5697777+qLn++6778KFCz3ahexSdMy7BABAupEnPG5paQmesgFIKjabLfjlpk2bKisrzWbzrFmzli1bJgiC/JDs7du3L1++3GKxPProo0uWLFHaBUGQpwcym807d+7ctWuX3Bhl+0imTp0aCAQkSfr617+uNEbpR3mAd8jzy8vKyhYtWjR37twVK1Yo269ataqhoWHy5MkWi2XmzJkbN24MHlpOOcV4xnoUZ3CEwUE+/fTTLS0tNpvthhtuePXVVzdt2qQcVNh/e9q/YsaMGWfOnFFeLl26dNy4cV03fvHFF6dMmSKKotVqvf322/fv3y9XGURqFwThzJkzM2fOjPGkAUh1o0ePlueUTDiLxTJixIi+6HnAEmP/Lw0AAKSKy5cvu93ugoKCkGlfkK727t27Z8+e4PmSk4rJZDp37ly3k7AibVRUVGzduvW3v/1twnu+//77f/zjH0e6Jpw3b97ixYsXL16c8HGRDF5//fX169efOHFC7UAwQC1fvvzmm29etWqV2oEkKWqXAABIQ3JSifIlAKqg3ABpqaioSOyiqKhI7biApBD6pEAAAJAGjEajTqfzeDytra3yjXIA0J/Wr1/fF93+/Oc/74tugVjU1dWpHQKQvMguAQCQnsxmc11dXUtLS15enkZDtTIGrqKiovr6+pBGm83GhSKQWtxud2tr69tvv612IBigamtrR48erXYUyYvsEgAA6clkMjU3N3u93paWFmZfwkBGFglIDx9//PFHH300e/ZstQPBAOXxeEwmk9pRJC+ySwAApCdRFAsKCmpra+12e15eXkZGhtoRAQAQvzFjxtx2223M6g21yLN6qx1F8iK7BABA2pLLlzwej91uLywsVDscDFydnZ0lJSVqR4EBYejQoTwzDgD6H9klAADSWUFBQU1NTUtLS35+fmYm/+9DHTk5OX/7299sNpvagSDNLV68eOLEiWpHAQADEd8yAQBIZ0ajMSsry+12t7S0UL4EFeXl5fH4QvQ1nU5HGj29/fWvf2UmQailo6ODO+Oi4MMXAIA0V1BQ4HQ6ubAHAKS0r3zlK2fPnlU7CgxoBQUFaoeQvMguAQCQ5gwGg8FgUDsKDHQzZ87UarVqR4E0d/78eSZdSmN6vX7EiBFqRwEgPLJLAAAA6FvHjx8PBAJqR4EBYfjw4WqHAAADEdklAAAA9K2xY8eqHQIAAOhDGrUDAAAAAAAAQAojuwQAAAAAAID4kV0CAAAAAABA/MguAQAAAAAAIH7M6g0AwMAiSVJbW5sgCHl5eWrHAgAAgHRAdgkAgIHF6XTW19drNBqj0ZiRkaF2OAAAAEh5ZJcAABhYjEajXq83GAwaDTfIAwAAIAHILgEAMOAMGjRI7RAAAACQPvijJQAAAAAAAOJHdgkAAAAAAADxI7sEAAAAAACA+JFdAgAAAAAAQPzILgEAAAAAACB+ZJcAAAAAAAAQP7JLAAAMdIFAoKGhobW1Ve1AAAAAkJIy1Q4AAACorK2traWlRaPRGAyGzEy+GwAAAKBnqF0CAGCgy8/Pz87OliuY1I4FAAAAqYfsEgAAEGw2myiKDofD4XCoHQsAAABSDNklAAAgZGVlmc1mQRAaGhoCgYDa4QAAACCVkF0CAACCIAgWi0Wn0/l8vqamJrVjAQAAQCohuwQAAARBEERRtFqtgiC0tLS4XC61wwEAAEDKILsEAAD+Ra/Xm0wmQRDq6uokSVI7HAAAAKQGsksAAODfbDZbZmamx+NpbGxUOxYAAACkBrJLAADg3zQajc1mEwShpaWls7NT7XAAAACQAsguAQCAzzEYDLm5uYIg1NXV8fw4AAAAdIvsEgAACGW1WjMzM71eL8+PAwAAQLfILgEAgFAajaaoqEjg/jgAAADEgOwSAAAIQ6/Xy/fH1dfX8/w4AAAAREF2CQAAhCffH+fxeBoaGtSOBQAAAMmL7BIAAAhPuT+utbXV6XSqHQ4AAACSFNklAAAQkV6vN5vNgiDU1tb6fD61wwEAAEAyIrsEAACiKSgoyMrKCgQCHR0dascCAACAZJSpdgAAACCpiaJYXFzs8/n0er3asQAAACAZkV0CAADd0Ol0Op1O7SgAAACQpLgzDgAAAAAAAPEjuwQAAAAAAID4kV0CAAAAAABA/MguAQAAAAAAIH5klwAAAAAAABA/sksAACAedru9rq5O7SgAAACgPrJLAACgx9xud1NTU1tbW0dHh9qxAAAAQGWZagcAAABST1ZWVmFhoSiKer1e7VgAAACgMrJLAAAgHvn5+WqHAAAAgKTAnXEAAAAAAACIH9klAAAAAAAAxI874wAAAAAkl5MnT+7Zs0ftKDAgGI3GZ555Ru0ogJRHdgkAAABAcjl79uz7779/zz33qB0I0lxTU9PmzZvJLgG9R3YJAAAAQNIZMWIE2SX0tU8//XTz5s1qRwGkA+ZdAgAACeNwOGpra9WOAgAAAP2K2iUAAJAYfr+/rq4uEAhkZmYWFhaqHQ4AAAD6CbVLAAAgMTIyMmw2myAIdru9ra1N7XAAAADQT8guAQCAhDGZTHLVUl1dndPpVDscAOgxURTVDgEAUg/ZJQAAkEhmszkvL08QhNraWrfbrXY4AICkJooiGT0gDZBdAgAACWa1WvV6fSAQqK6u9vv9aocDAD0gSZLaIcSptLRU7RDikbonHEAwsksAACDBRFEsKSnR6XQ+n6+6uporBwBpr6OjI7Ed+nw+r9fbo11qamriHi4QCIRtT/hxAUhXZJcAAEDiaTSakpISjUbjcrnq6urUDgcAuvfPf/6z611acsuWLVtMJtPJkyePHTuWn59fXl6ubNDQ0DBhwgSDwVBUVLRy5UolHTN48GBRFAcPHiy/HDZsmCiKV111ldLn6dOnb7jhhvz8/CVLljgcDqXD9vb2RYsWjRgxYvDgwbNmzQp+SIK8o91uX7p0qdFofPDBB+X2UaNGyWGLQWI55PLycp1OJ4piTk7OT37ykxtvvLHb45ItW7asqKjommuu2bdvX9fT1TVCQRBefvnlcePG6fX666+//pVXXhk9enTwjh999NEXv/jFzMxMnU4XfHoBpAqySwAAoE/odLqSkhJRFNvb2xsbG9UOBwC6cdNNN3WttZRb/H7/7t27v/Wtbz377LM7duxYuHChssHq1auffvppj8dz4cKFqVOnrl69Wm6vrKw8f/78t7/9bYfDEQgE1q9fX1lZefnyZaXP48ePHzt2rKWl5ZZbbnn44YeVDtetW7du3brLly/X1dWtXr163bp1IcHceeedX/va16qrq7du3Sq3nz9/Xl4lBYnlkJcsWTJnzhyv12u328eNG1dfX9/tccl+85vf1NbWvvDCC3fddVfX09U1wueee+6FF1548cUX7Xb7iRMn7HZ7U1NT8I5PPvnkiy++6PP5ysrKgk8vgFQhUqwOAAD6Tltbm1y7VFhYaDab1Q4nbe3du3fPnj0HDhxQOxAgMXbv3n3o0KG9e/f2/9CiGHqJpLSIohgIBOTyHGWbgoKC5uZmZWOr1Rqco3nvvfe+//3vDx48eMOGDTfccENwn3V1dTabTRCElpaW4cOH2+12eVVxcfGVK1e0Wq0gCG63e+jQobW1tcE7Op1OvV4fS+Td2r9//5133un1egsLC61W6549eyZMmNDtcf31r3/9wQ9+UFFRceONN7733ntdT1fXCEeMGHHy5Mni4uKwYYii6PF45EOO70Di9umnn06YMKGhoaF/hgPSGLVLAACgD+Xm5sqXT42Nja2trWqHAwC90vWOs2uvvTa4Yig4tSQIgl6vNxgMlZWVnZ2dkbqSJEmn0yntkiQpsyCFTbKETS11FctTO+fOnevxeBwOx9///ve77rprxowZsRzX3XffvWrVqqampoMH/397dx4mVXXnf/zcWru6lu6u3ugNXBAxZFwQEBAcRxaDRiOIgkqUQGJ0XJIxIiT48IvJA8qAY+IyQgBB86jRJDTBhB5BUCGBJ6JJTACRTaD3bnqtfb2/P+54p1LdVV1ddPft5f36o59b55577vdWgk/Xp885taPTYTutMNHWTgo1WgIwQJEuAQCA3pWVleV0OoUQDQ0NsXuLAMAgcOutt7744ouVlZXBYPCLL7749re/rZ46derUQw899Otf/3rv3r1vv/32yZMnYy989913lamdW7ZsueOOO9T22bNnf/jhh8rx9u3bb7vtthQrMRqNyo5FtbW1L7zwwuTJk7u8JD8//6OPPtLpdGVlZaNHj/Z4PKk8V0NDw+WXX+5yubZs2ZJibWvWrHn00UdbW1uj0eiZM2def/31++67L8VrAQwIpEsAAKDX5ebmOhwOIURdXV3HP+ADgOZiN8OOOxYx84w6Hjz++OMul+u6667Lycl5+OGHf/CDHyjtxcXFF1988YkTJ4YNG2az2V577bWRI0eqm3wLIaZNmzZ79uz8/Px//OMfq1evVttXrlz5wx/+0Gq1ZmRkrF69euXKlbFFxpUXS9mxSKfTXXPNNSdOnPj973/f5VNfeOGFf/vb30aNGiVJ0rx589566y31VKLnEkKsWrVq+vTp119/vRJgxVaSqMLbb7/99ttvnzhxYmZm5owZMz777DN1S6ZO3+EUdyUH0H+w7xIAAOgjtbW1brdbp9OVlpaazWatyxlU2HcJg4yG+y71jeRbC8my7HK5hBB2u52cpVex7xLQU5i7BAAA+khhYaHZbI5Go7W1tZFIROtyAKCfkiTJ4XA4HA6iJQADBekSAADoIzqdrqSkxGg0hkKh6upqrcsBAG2w+AvA4EO6BAAA+o5ery8uLjYYDLm5uVrXAgDaUL+IrbdvVFJSInWmpKSkt28NYKgxaF0AAAAYWkwm0wUXXMAf7QGgtzFLFECfYe4SAADoa0RLAAAAgwnpEgAAAAAAANLHyjgAAAAA/cuJEyd27tw5ZswYrQvBIBcKhbxer9ZVAIMB6RIAAACA/iUjI6OkpOTee+/VuhAMci0tLevWrdO6CmAwIF0CAAD9hc/ns1gsWlcBQHulpaVjxoxZunSp1oVgkDt9+vSmTZu0rgIYDNh3CQAA9AttbW1VVVX19fVaFwIAAIDuIV0CAAD9gsFgkCTJYGBiNQAAwADDL3AAAKBfsFqtZWVlZrNZ60IAAADQPcxdAgAA/QXREoA0SJKU5FSSs+c/PgBAQboEAAAAYAAoKirqtF2W5USXJDmVutQHsdvt5387ABiISJcAAAAADAB1dXVxLTt27Og4O8nj8SxcuNBms1111VWHDh2Ku2TChAkTJkxI8Y6djq+0vPDCC6WlpSaTqby8XGl3Op1ut1v6UjceDAAGPvZdAgAAADAg3XTTTbIsx0U5S5cuLSoqam5ubm9v37BhQ9wl3ZrN1On4SktNTc2RI0d27949b968YDAohGhubpYkqUdmSwHAgMPcJQAA0N8Fg8FIJKJ1FQC0UVJSos4GUg5KSkqS9H/jjTeWLFliMpny8vLuv//+uLMHDx48ePDg+Vf19NNPOxyO2bNnh0Kh8x8NAAY65i4BAIB+LRgMVlVV6fX6kpISg4FfXYAhp7q6WjlIY2aQMqtIE8Fg0GQyaXV3AOhjzF0CAAD9nSRJSsbEHAEAXZo/f/6zzz4bCoVqampWr14dd7Zb+y51l9FoLC8vD4VCFRUV06dP76W7AEA/RLoEAAD6NZPJVFZWZjKZQqFQZWVlIBDQuiIA2igoKIhriVsxpzSuWbOmqqoqJydn1qxZixYtUs6ql0QikdQnQHU6vtoS91MI8dZbb82bNy8nJ2fjxo2bNm1K8zkBYABiejkAAOjvDAZDSUlJdXW1MoOpqKgoMzNT66IA9LX6+vq4lk5zIqvV+uqrr7766qud9vnkk09Sv2On48c2xnWYPXu2hmvxAEBDzF0CAAADgMFgKC0tzcjIiEajNTU1LpdL64oAAADwv0iXAADAwKDX60tLS+12uyzLdXV1586d07oiAAAACEG6BAAABhBJkoYNG+Z0OoUQLS0t9fX13f0CKQAAAPQ40iUAADDA5Obm5ufnCyHa29tra2sJmAAAALRFugQAAAae7OzsoqIiSZI8Hk9VVVUkEtG6IgAAgKGLdAkAAAxINputpKREp9P5/f6qqqpQKKR1RQAAAEMU6RIAABioLBZLWVmZwWAIBoOVlZU+nzVtbPEAACAASURBVE/rigAAAIYi0iUAADCAmUymsrIys9kciUSqq6vb2tq0rggAAGDIIV0CAAADm8FgKCsrs9vtsiw3NDQ0NDSwzzeAniJJkiRJWt06yan0qkrlwp56Xq3eNwCaIF0CAAADniRJw4YNczqdQoi2tjaWyAGDUlFRUVyL3W5P1Nnr9fbITbuVVvdsPUlunXaGnsqFPRXQpz5OkvcNwEBBugQAAAaJ3NzcYcOG5ebmZmZmal0LgJ5XV1cX+9LpdLrdbulLantjY+P48eOtVmthYeHDDz+sxDpKn+eee85ut+/fv3/Tpk12u728vFw9tXv37oKCgnHjxp05c6bLSh555JFLL73UarXOmDHj/fffT6Oe5Hbs2NFxkpHH41m4cKHNZrvqqqsOHToUd8mECRMmTJjQ5ciKs2fPTpw4MScnZ9GiRR6PJ/l9vV7vd77znZycnLFjx37++edqB+XghRdeKC0tNZlMypuZZJxE/RO9bwAGFoPWBQAAAPSYofwH8LNnz/7iF7/QugqgZ+zfv7/LL4Jsbm6WJKnjBJklS5asXbt28uTJgUBg165dS5Yseemll2RZliQpEols3rz55ptvXrhw4ebNm+fNmxcMBpVTTU1NlZWV27dv/4//+I+tW7cmv/XTTz/9wgsvhEKhvXv33nrrrS6Xq7v1JB//pptuUqqKbVy6dGlRUVFzc3N7e/uGDRviLunWhKMtW7b85je/yczM/PGPf/zEE0+o9SS6r9PprKurC4fDGzduVO+l9KypqTly5Mju3buVNzPJOIn6J3rfAAws/DMGAAAY8A4cOPDcc89pXQXQY06fPj1s2LDt27cLIUpKSmpqamLPFhcXV1dXCyE6TSVyc3Obm5vVl/n5+Q0NDbGdOz1oaWnJzs52u93FxcXt7e2xA8bd5fjx44899tj+/fsDgcDYsWP37dunnu1WPV2KG83pdJ44cUJZAtzU1JSXl5feRzlJkqqqqkpKSoQQzc3No0ePjqsn7r4FBQVHjx5V7tvY2FhQUNDp83Z89uQtya/tM6dPnx4/fnxjY6MmdwcGE+YuAQAADHiTJk2aNGmS1lUAPWbz5s0VFRXKsRIkia4yiGAwaDKZhBBXX331zp070761wdDFR6Q777xz/vz5mzZtcjqd586d67gbVM/Wk2jwHhknGo3qdF1slhI7BakPMiD1fQMwsLDvEgAAAIAByWg0lpeXh0KhioqK6dOnK42zZs3auHFjVVVVNBpNfag//vGPwWCwoqJixowZyXtWV1ePGzfO4XAcOXLk+eef76V6Opo/f/6zzz4bCoVqampWr14dd7Zb+y5t2LChqqqqpaVl5cqVd955Z/LO8+bNe+6556LRqNvtVlbG9bhO3zcAAwvpEgAAGBJcLldPfYcUAE0UFBTEtbz11lvz5s3LycnZuHHjpk2blMZHH320sbFx6tSpTqfzxhtvfOaZZ8SXE3DUaTgdd48uLi6++OKLn3vuuf/6r/9SG+N2sFYa169fv3jxYqfTuWzZsnvvvTd2tNTrSa7T+65Zs6aqqionJ2fWrFmLFi2Ke4pIJJLKxCLlkoULF86ZM+eiiy5yu92x9XR632eeeaauri4vL2/KlCm33HJL3FAdfyYaJ0n/Tt83AAML+y4BAIDBLxAIVFZWyrJcVlaWkZGhdTkAuqCsjHv77bf75nbsKp2KUCj0+9///sknnzx8+LDWtfQY9l0CegpzlwAAwOBnMpkcDofD4SBaAhAnbh4NOlq+fLkkSTab7bXXXtuzZ4/W5QDoj9jVGwAADH6SJMV+zxEAqPgvQ5dWrly5cuVKrasA0K8xdwkAAAwVzE0A0E8UFhZKHRQWFmpdFwCkiblLAAAAANCn6uvrtS4BAHoSc5cAAAAAAACQPtIlAAAw1Pl8PpfLpXUVAAAAAxUr4wAAwJAWiURqa2sjkYjX683Pz9fp+NsbAPSiSCSi1+u1rgJAD+P3JwAAMKTp9frs7GwhRHt7+9mzZ30+n9YVAeg2ZVfswXevvtQbz/Xkk0+qx7IsV1ZWHjly5Morr4zts3fv3gULFsyePVuSJJPJVF5enrw9blgA/QRzlwAAwFDndDotFktdXV0oFKqqqnI6nU6nc1B+egQGtKKiotra2k5PybKcyr9Zu91+/stgk9/L6/VmZmae5y00keJ7mLrjx4+3tLSoL//xj3+cOnXqG9/4xqFDh2K73X///QcOHMjJyRFC7N+/f+bMmW63O0m7EKKlpeXUqVMXXXRRD1YL4DwxdwkAAEBYLJYLLrhAmcTU3NxcWVkZDAa1LgrAP6mrq4t96fF4Fi5caLPZrrrqqrjA4pFHHrn00kutVuuMGTPef/99pdHpdLrdbulLXfbvkhRDCNHY2Dh+/Hir1VpYWPjwww97vd7Ybjt27BBC7NixQ5KksrIydZAJEyZMmDAh9Xt1+rLT+pUOra2tixcvttvtS5YsUdr9fv/3vve9wsLCoqKiLVu2jBo1KvZGe/bsKS0tjZsr1K3xVRs2bJg5c6b68vLLL7/ttts6BliBQECJkIQQkydP9ng8yduFENOmTVu/fn2XbxqAvkS6BAAAIIQQkiTl5+cXFRXp9fpAIHD27NnW1latiwKQ0NKlS4uKipqbm3ft2vXOO+/Ennr66ac///zz1tbWZcuW3XrrrUpjc3OzEEL+Upf9u7Rx48bFixd7PB5ltCVLlqxduzYYDJ48eXLatGlq2nLgwIGJEyfedNNNQohZs2aNGzfuD3/4gzpIx2I6JcvyxIkT9+/fr7zcv3//pEmT1As7rV85O2fOnKlTp1ZXV3/ta19T2n/0ox8Fg8FDhw6dOnXKarUqb4uqoqLi888/f+utt+bNm5f8/Uk0vmrnzp2XXXZZl49WWVnZrXYhxOjRo3fu3NnlyAD6kpTKf8sAAACGjkgkUl9fr/yd3GazFRQUsAEt0Mc2b95cUVHx9ttvCyFKSkpqampizxYXF1dXVzudzhMnTjidTiFEU1NTXl6e8tHm+PHjjz322P79+wOBwNixY/ft26d+5JGkTj7+JOmfiCRJX//61y+55JJnn31WnYyTm5sbm9Tk5+c3NDQox3PmzFmwYMGcOXN+85vf/Pa3v33zzTfTeE927ty5Zs2aXbt2CSFmzJjxxBNPzJgxo8vndblcNpstdpyioqLDhw8r71vH5wqFQgaDQcS8V90dX5WVlVVdXd3xbNz/ColeJunW3t4+fPjwHvkDwOnTp8ePH9/Y2Hj+QwFDHHOXAAAA/olery8uLs7NzZUkye12V1ZWxq7IANDHqqur1Qk+ykF1dXVcn9ilrHfeeeeUKVM+++yz1tZWJZ/qlHpJiv3j3H777YcOHYoNOK6++mo5hhotCSFWrVq1YsWKQCDwk5/85Cc/+UmKt4gzc+ZMn8+3b9++ffv2+f1+JVrqsv6O4U44HE5yFyVaitXd8VVpz2OIRCJdtjNJAuhvSJcAAAA64XQ6lc1HQqFQTU1NfX19NBrVuigA/2f+/PnPPvus8i909erVant1dfW4ceMcDseRI0eef/752EuMRmN5eXkoFKqoqJg+fXqX/ZNYuHDh2rVr77nnHnWr6VmzZm3cuLGqqqrjfytGjx49adKkW2655ZprrrnkkktiT6W475LiqaeeWrFixYoVK5566qlUnrdTc+fOXbt2rRCisbGxvLx8wYIFyfun9/4IIUaMGBE36axTFotFXfF38OBBh8OhvIGJ2oUQVVVVbOkN9DekSwAAAJ3LyMgoKytzOBxCiPb29jNnzqjb9ALoewUFBbEv16xZU1VVlZOTM2vWrEWLFgkhlEVq69evX7x4sdPpXLZs2b333qu2CyGU7YRycnI2bty4adMmpTFJ/06pZy+//PKKigq73a7s2P3oo482NjZOnTrV6XTeeOONzzzzTOxVP/zhD/fu3btixYq40SKRSOrTcKZNmxaNRmVZvuGGG9TGRPWrP+N2MV+7dm1ra2tBQcGYMWN+97vfrVmzJva5Ov7s7viqmTNnHj16NO6ti71KaXz99devv/56Zee722677Z133jEajUnahRBHjx698cYbU3zTAPQN9l0CAADogs/nq6+vD4VCQgibzVZYWKjT8Sc6oBfF7rs0OLzwwgunTp167rnntC6k7xw7duznP//5Sy+91OMjP/TQQz/4wQ96ZPoS+y4BPSV+VS0AAADiWCyWESNGNDU1tbS0uN1uv99fUFBgtVq1rgvAwKDO0xlS6dKoUaOys7N7Y2Sn08nKOKC/4c9uAAAAXZMkKS8vr7i42GAwhMPhpqYmrSsCMGCoW31rXUhfW7lyZW8M+9Of/rQ3hgVwPkiXAAAAUmW1WkeMGOFwOOL2fwEwyBQWFkodFBYWal0XAPRTrIwDAADoBp1OxydMYNCrr6/XugQAGEiYuwQAAAAAAID0kS4BAAAAAAAgfaRLAAAAPSYQCLS2tmpdBQAAQJ9i3yUAAIAe09DQ4Pf7w+FwXl6e1rUAAAD0EeYuAQAA9Bi73W4wGLKzs7UuBBhalO9007qKZPp/hd3VG0/05JNPqsdvvvmmXq+XJMlkMpWXl6vte/fuXbBgwezZs+NOJWqPGxZAL2HuEgAAQI/Jzs7OysoaZJ8hgX6iqKiotra201OyLKfy785ut7tcrp6uKyUpVqjyer2ZmZm9V8/56+4Tden48eMtLS3qy4ceeuj3v//9rFmzysvL582bFwwGlfb777//wIEDOTk5Qoj9+/fPnDnT7XYnaRdCtLS0nDp16qKLLurBagHEYe4SAABATyJaAnpJXV1d7EuPx7Nw4UKbzXbVVVcdOnQo9tQjjzxy6aWXWq3WGTNmvP/++0qj0+l0u93Sl7rs36m4y+Nepj6O+Oe5P7HHjY2N48ePt1qthYWFDz/8sNfrjb1qwoQJEyZMSD5yenUqHVpbWxcvXmy325csWaK0+/3+733ve4WFhUVFRVu2bBk1alTsjfbs2VNaWho3V6hb46s2bNgwc+ZM9WVzc/OsWbOEEDfffPNVV12ltgcCASVCEkJMnjzZ4/EkbxdCTJs2bf369V2+aQDOB+kSAAAAgIFn6dKlRUVFzc3Nu3bteuedd2JPPf30059//nlra+uyZctuvfVWpbG5uVkIIX+py/6dkmV54sSJ+/fvV17u379/0qRJ6mipj6MM1enxkiVL1q5dGwwGT548OW3atLgUpmPxPVWncnbOnDlTp06trq7+2te+prT/6Ec/CgaDhw4dOnXqlNVqVd5GVUVFxeeff/7WW2/NmzdPbezW+KqdO3dedtllHZ9l9+7df/jDH9SXlZWVnT5yonYhxOjRo3fu3JnoLICeIQMAAKBPuN3u9vZ2rasABoBXXnnljjvuUI6Li4vjPsIUFxfLspyTk9PU1KT0OXfunPrR5tixY1//+tedTqfVap06dar450Sp472S9O/Uu+++O336dOV4+vTpO3fuTHGc5C3qsdPpjH3Y/Pz85PX0YJ1CCJfLFTfOsGHD1Pe5Y/2hUCiu/u6Or3I4HB3P7tq1q7a2Nu6mnb5M1C7LcltbW1ZWVqc3/eKLL/Ly8hKVBCB1zF0CAADoC9FotKGhoa6urqqqyu/3a10OMGBUV1crH13El3lBdXV1XB91Ux4hxJ133jllypTPPvustbX17bffTjSsekmK/VUzZ870+Xz79u3bt2+f3++fMWNGeuPEikaj6vHVV18d+4GtoaGhW0OdZ502my2uJRwOJ7mLwRC/k293x1fJHeZkvfbaayNGjBg2bFiSAoQQkUiky/aOgwPoWaRLAAAAfUGSJGXDb5/PV1lZWV9fn/wzG4Dk5s+f/+yzz4ZCoZqamtWrV6vt1dXV48aNczgcR44cef7552MvMRqN5eXloVCooqJi+vTpXfZP5KmnnlqxYsWKFSueeuqpVO6biFJPbW3t97//fbVx1qxZGzdurKqqio2cVCnuu9SDdc6dO3ft2rVCiMbGxvLy8gULFiTvn8b7oBgxYkRNTY368te//vW//Mu/XHLJJeKf97OzWCzqir+DBw86HA7ljUrULoSoqqpiS2+g1/XtVCkAAIAhLRQK1dbWHjt27NixY8ePH29oaIhEIloXBfQ7sSvjVAUFBbEv3W73vffea7VaL7/88k8//VT9dLN169YRI0ZYLJZZs2Z99tlnsZ96tm7dajQarVbrnDlzjh07pjYm6p/Edddd96//+q+xLUnGSfQRbOvWrSaT6eqrr46tPxwOr1q16oILLsjKypo5c+bTTz8de5exY8eOGzeu63ew+3UmKtLtdj/44IP5+fn5+fn33XdfTU1N3EPFHXd3fNVjjz32u9/9Tn0Z95V5sfUbjUYhRF5eXnFx8Ycffpi8XZbl3/72t0uXLu30/WFlHNBTJJkpggAAAH3L7/c3NjYq6+P0er3T6czOzta6KKAf2bx5c0VFRXfXl2FAO3bs2M9//vOXXnqpx0d+6KGHfvCDH3Q6fen06dPjx49vbGzs8ZsCQw0r4wAAAPpaRkZGWVlZUVGRwWCIRCKNjY1nz571+Xxa1wUAmhk1alQv5exOp5OVcUBvI10CAADQhs1mGzFiRE5OjiRJgUCgqqqqrq6OzZgADFkrV67sjWF/+tOf9sawAGKRLgEAAGhGp9Pl5eWNGDFC+R4ll8t1+vTpc+fOdbqbL4A+U1hYKHVQWFiodV0A0E/Ff38kAAAA+pjRaCwqKvL5fOfOnfP7/S0tLe3t7U6nU/mOOa2rA4ai+vp6rUsAgIGEdAkAAKBfsFgsZWVlXq/33LlzgUCgsbGxpaVFyZi0Lg3oa1VVVfv27bvpppu0LgSDnNfrZc87oEeQLgEAAPQjmZmZw4cPb2tra25uDofDDQ0Nbre7pKRE67qAPuX3+41GY0FBgdaFYJBzu906HdvFAD2AdAkAAKDfycrKcjgc7e3tTU1NmZmZWpcD9LWRI0dOnDhxy5YtWheCQe706dPjx4/XugpgMCBdAgAA6I8kScrKyrLZbPxdHQAA9HOkSwAAAP2XXq/XugRAG/X19e+9957WVWCQY/t2oKeQLgEAAAxUsizzpXIYlPLy8jwez7Jly7QuBIPfFVdcoXUJwGAgybKsdQ0AAADotmg0eubMmczMzPz8fFbPAQAADfGLCAAAwIDk8XjC4bDP52P6EgAA0BYr4wAAAAYku91uMBhYHAcAADTHyjgAAAAAAACkj5VxAAAAAAAASB8r4wAAAAanhoaGcDjsdDozMjK0rgUAAAxmpEsAAACDUDQadblc0WjU4/FkZmY6nU6LxaJ1UQAAYHBi3yUAAIDBKRQKtbS0tLe3K7/vZWRk5OTk2Gw2resCAACDDekSAADAYBYOh5WMKRqNCiGMRmNOTo7D4eCb5gAAQE8hXQIAABj8otFoe3t7S0tLOBwWQuh0OofDkZOTYzCwTwIAADhfpEsAAABDhSzLHo+npaXF7/cLISRJstlsTqfTZDJpXRoAABjASJcAAACGHLfbHZcxZWdn89VyAAAgPaRLAAAAQ5TP52tpafF4PMrLjIyM7Oxsm83GlkwAAKBbSJcAAACGtGAw2Nraqn61nF6vz8vLczgcWtcFAAAGDNIlAAAAiGg06nK5Wltbg8FgcXGx1WrVuiIAADBgkC4BAADgfynbfttsNq0LAQAAAwnpEgAAAAAAANKn07oAAAAADBgtLS0+n0/rKgAAQP9CugQAAICUhEKhc+fOVVVVhUIhrWsBAAD9iEHrAgAAADBgOByOaDRqNBq1LgQAAPQj7LsEAAAAAACA9LEyDgAAAD1DluVAIKB1FQAAoK+xMg4AAAA9w+Px1NbWZmRkOBwOu92u0/GHTAAAhgRWxgEAAKBntLS0NDU1Kb9eSpJks9mysrIsFovWdQEAgN5FugQAAIAeE41G3W63y+Xyer1Ki8FgsNvtWVlZ7AUOAMBgRboEAACAnuf3+9vb210uVzQaVVqsVqvD4bBarZIkaVsbAADoWaRLAAAA6C2yLLvd7ra2Np/Pp7To9XqbzeZwODIyMrStDQAA9BTSJQAAAPS6UCikTGUKhUJKi8lkstvtDofDYOB7ZgAAGNhIlwAAANB3gsFge3t7e3t7JBJRWsxms/Idc3q9XtvaAABAekiXAAAA0NeUFXPt7e3q5t/5+fnZ2dnaVgUAANJDugQAAADNhMNhl8vlcrlKSkqYuwQAwABFugQAAAAAAID0sYciAAAA+rXGxkYhRHZ2ttFo1LoWAADQCZ3WBQAAAAAJRaPRtra21tZWdRdwAADQ3zB3CQAAAP2XJEnDhg3zer0ZGRla1wIAADrHvksAAAAY2CKRCDuCAwCgIeYuAQAAYGCrrKyMRqOZmZl2uz0zM1OSJK0rAgBgaCFdAgAAwAAWDofD4bAsyy6Xy+VyGQwGm81ms9ksFovWpQEAMFSwMg4AAAADWzQa9Xq9LpfL6/VGo1GlUa/XW61Wm83GbCYAAHob6RIAAAAGD5/P53a73W53OBxWGy0WizKhyWBg5j4AAD2PdAkAAACDjSzLPp/P4/F0jJmUCU1Go1HD8gAAGGRIlwAAADCYhUIhj8fj8Xh8Pp/6q6/BYLBarVarlXVzAACcP9IlAAAADAnhcNjtdsfFTGVlZRkZGdoWBgDAQEe6BAAAgKFFlmWv1+vxePx+//Dhw7UuBwCAAY90CQAAAOhEIBAwGo06nU7rQgAA6O/41gwAAACgE3V1daFQqLi4ODMzU+taAADo1/hTDAAAABAvGo1Go1EhBLsyAQDQJVbGAQAAAJ0Lh8MGQ8LJ/pFIRKfT8ZVzAACQLgEAAADpqK6u9vl8FoslMzMzMzPTbDZrXREAANpg3yUAAAAgHcFgUPn6Oa/XK4QwGAxKzGSxWJLMeAIAYPBh7hIAAACQpkAg4PF4vF6v3++P/b3aZDIpc5osFoter9ewQgAA+gDpEgAAAHC+otGoz+fzeDw+ny8YDMaeMpvNatKk0/GlOgCAQYh0CQAAAOhJ0WjU7/crK+YCgUDsKaPRqK6eY04TAGDQIF0CAAAAeksoFPL5fF6v1+fzhcNhtd3hcBQWFmpYGAAAPYh0CQAAAOgLkUhESZq8Xm9ubq7dbte6IgAAegbpEgAAANDXZFmWJKnTU6FQqLW1NTMz02q19nFVAACkh20FAQAAgL6WKFoSQni93tbW1paWlr6sBwCA82HQugAAAAAA/8dsNmdlZZlMpiR9kkx9AgCg77EyDgAAABhIotHoqVOnjEaj2Wy2WCwWiyV5FAUAQG9j7hIAAAAwkPj9flmWg8FgMBh0uVxCCIPBYLFYMjIyMjIyzGYz05oAAH2MuUsAAADAABMMBv1+v8/n8/v9wWAw9pQkSWazOeNLRqNRqyIBAEMH6RIAAAAwgMmy7Pf7A4GAz+fz+XyRSCT2rE6nM3/JYrEQNgEAegPpEgAAADB4KNOaAoGA8jPut32j0Zibm2u327UqDwAwKLHvEgAAADB4mEym2E2+1bBJyZtCoZBOp9OwPADAoMTcJQAAAGBIiEajgUDAbDYnCpj8fn9bW1tmZiaTmwAA3cIfLgAAAIAhQafTWSyWJHOXvF5ve3u7x+Ppy6oAAIMAK+MAAAAACCFEZmamLMtmszlJn5aWFpPJZDabDQY+SgAA/hcr4wAAAACkJBQKnT59WjmWJMloNJrN5oyMDOU76djRCQCGLNIlAAAAACkJhUJNTU2BQCAYDMadkiRJmdOkImwCgKGDdAkAAABA98iyHPhSMBgMBALRaDSuj8FgMJvNynfYKQeSJGlSLQCgt5EuAQAAADhfoVAoECMcDnfsk5OTk5eX1/e1AQB6G1vxAQAAADhfRqPRaDTabDblZSQSUeY0Bb8UiUT0en2SEUKhkNFo7JNiAQA9jLlLAAAAAHpdJBIRQiQKmILB4JkzZ/R6/UUXXdS3dQEAegBzlwAAAAD0uuQTl8LhsCRJBkOyjyder1eSJPYLB4B+iLlLAAAAALQny3I0Gk0SQp09ezYQCAghDAaD6Z8lj64AAL2NuUsAAAAAtCdJUvKQSK/X63S6aDQaDofD4bDX61VP6XQ6k8lkNBpjfzLFCQD6DHOXAAAAAAwYyn7hqlAoFAqFOu2p1+uVmU1xO44DAHoc6RIAAACAgS0cDqtJk5o6xXZgv3AA6FWsjAMAAAAwsBkMhrgdwaPRqJIxKT8lSUpyeV1dXTAYzM3NtVqtvVwpAAxOpEsAAAAABhudTpeRkZGRkZFK50AgEAwGk3QIh8M+n09ZYccO4gDQESvjAAAAAAxpymI6i8WSKDlyu921tbXKsU6nMxgMxi+px2wiDmAoI10CAAAAgGTcbndzc3MoFIpGo4n66HS6jpGTwWAgdQIwFJAuAQAAAEBKIpFIOBwOhULKT/UgeeqUm5ubnZ3dl3UCQB9j3yUAAAAASIler9fr9WazOa49Go12jJzC4XAkEolGo0n2FI9EIvX19SaTKS8vr5drB4BeRLoEAAAAAOdFp9OZzeaOqZMsy+FwOMlG4KFQyOPxBAKBJOmSx+OJRCKGL7HUDkA/RLoEAAAAAL1CkiSj0Zikg8FgyM/PTz5Ia2ur1+tVXyrbihsMBr1er3yHnfJTaUkyTwoAeg/7LgEAAABA/9XY2Oj3+5V1dl1+fFNjJvWn3W5PMnkKAHoE6RIAAAAADAzhcFiJmUKhkLLFuCrRzuIXXnihwdD5mpVgMBgIBMxms8lk6s2qAQx+rIwDAAAAgIFBWRPX6aloNKrkTXE/k0xccrlczc3NWVlZBQUFifq0t7frY7DrE4BOkS4BAAAAwICn0+l0Ol3ybZ7iGI3GzMzMjpuRq2RZrq+vj22RJEmJmZSVd3GUPaFIoIAhiJVxAAAAAIBORKPRuro6dVZUosV3cdQEymg0FhUV9XaRAPoD0iUAAAAAQNdkWY5EImrSpKy8UyktsQmUyWQaMWJEotFqamr8fn9BQYHNZkt0u2AwEatg0QAAEwtJREFUqARVfBce0M+xMg4AAAAA0DVJkpSNn5IvplPzpuSjddnH7/dXVVUpx8q6v9gleKq4lwrSKKCPMXcJAAAAANDXlKlPRqMx0T5NXq+3trY2xeV4cSRJstlsw4YNS9TB5/NJkmQymdglCugRpEsAAAAAgH5KlmVl46e4nwr1WD1QP+Ha7fYk6dKpU6cikcjw4cMTzcPyer3t7e2JJklJkqRsL6Uc9MqTAwMKK+MAAAAAAP2Uukd4iv3V4Cn5pCRlzlSSYYPBoMvlSvGmSt6kBk86nc5ms2VlZSXqHwgEhBBJFhgCAw5zlwAAAAAA+CeBQMDn80WTSvJp2ul05ubmdnoqGo2ePHlSCDFy5MhE855aW1uVmVNKVqVGV0IIdcKU0iiEUH+q7co0q/N/E4DUMXcJAAAAAIB/YjabU5lbpMZMsZFTJBLJyMhIdIksy0ajUQiRZEldKBRS5jelp6CgINHMqVAoVFtbq9frS0pKEl3ucrmUu6v7oytZlZpnqesBYzdQV/Msg8HAasH+RpZlWZaTLORUvqJRfRm7437s3mexoaoypnKs0+lIlwAAAAAASIc6pSh1er3+ggsuSN4nKyvLarWquZXyMT72pfKBX/mpBAFqiyzLSUqKRCKBQMBgSBYFuN1ut9vdrYeKVVJSkpmZ2ekpZad2s9lcWlqa6PLGxsbYmEPR8YkSfTOg0+lM9HR+v9/tdptMJofDkejubW1tyTeSV9/8TuXm5iaKbzwej8fjsVgsdrs90eV1dXVJJsTFpjkdK5EkqaysLNG1jY2NbW1tubm5Tqez0w7RaPTs2bOJLu+SIfn/pQAAAAAAQB8zmUwmk6k3RjYajUVFRcnnFmVmZio7UqkTVZQUQ40z1JgjdiZLKt/up6ZjSfr4/X6/35/q83SQnZ2d6FQgEGhpabFarUnSpZaWllAolPbdc3JyEm3mFQgE2trahBBJ0iW3292rmxclGVySJGVKnSI2zosN8mJnP6lz2f63D/suAQAAAACA3haNRkOhkCRJSbIzt9sduyxLdJizow7VaZqRJN9JZe5SU1NT3N27JS8vL9HEMZ/P5/f7zWZzooldQoj29vYUIxr1GWPjniQjd7ky7vyRLgEAAAAAACB9bCMPAAAAAACA9JEuAQAAAAAAIH2kSwAAAAAAAEgf6RIAAAAAAADSR7oEAAAAAACA9JEuAQAAAAAAIH2kSwAAAAAAAEgf6RIAAAAAAADSR7oEAAAAAACA9JEuAQAAAAAAIH2kSwAAAAAAAEgf6RIAAAAAAADSR7oEAAAAAACA9JEuAQAAAAAAIH2kSwAAAAAAAEgf6RIAAAAAAADSR7oEAAAAAACA9JEuAQAAAAAAIH2kSwAAAAAAAEgf6RIAAAAAAADSR7oEAAAAAACA9JEuAQAAAAAAIH2kSwAAAAAAAEgf6RIAAAAAAADSR7oEAAAAAACA9JEuAQAAAAAAIH2kSwAAAAAAAEgf6RIAAAAAAADSR7oEAAAAAACA9JEuAQAAAAAAIH2kSwAAAAAAAEgf6RIAAAAAAADSR7oEAAAAAACA9JEuAQAAAAAAIH2kSwAAAAAAAEgf6RIAAAAAAADSR7oEAAAAAACA9JEuAQAAAAAAIH2kSwAAAAAAAEgf6RIAAAAAAADSR7oEAAAAAACA9JEuAQAAAAAwtHz22Wf//u//Pnr0aJvNZrVaL7300gcffPCzzz6L6yalIFFnq9U6ZsyYxx57rK6urmMBPp9v7dq1kyZNys7ONhgMubm511577fLlyz/99NP0nii2mG6VnWIl6oX33HNPx7vfc889HUdObs+ePXfeeWdpaanZbB42bNj8+fP37t2b3rP3B5Isy1rXAAAAAAAA+sjq1auXL18eiUTi2vV6/apVq5544gm1JZWsRE0VEnUuLCw8cODAhRdeqLY0NDTccMMNhw8fTj5gtyh3V65NvezUK1HGlCTJbDbX1tZmZ2erp1pbW4uKigKBgNK/y/qj0ejDDz/88ssvJ7/jwMLcJQAAAAAAhoqf//zny5Yti0ajixcv/vOf/+xyuTwez0cfffTtb387Go0uXbr0+eefVzvL/yxJY8dLGhoatm3bdtFFF9XX1z/55JOxfZ544onDhw+XlJRs3ry5srIyEAi0trYeOHBg1apVl19++fk/Y+pld7eSG264we/3v/HGG7GNr7/+ut/vnzZtWorlLV++/OWXXzYYDE888cTRo0cDgUB9ff3rr79+zTXXnMdDa4y5SwAAAAAADAmVlZUjR44MBoOvvPLKt771rbizmzdvXrRokclkOnnyZGlpacfLY+cHpXj2T3/605QpUwoKCurr69XG3Nzc5ubmAwcOTJw48TyfKJXakpxKvRJlkDfeeOPuu+8eO3bsJ598op4aO3bsX//61zfffPOuu+5KdCPVsWPHLrvssmg02un/BAMXc5cAAAAAABgS1q1bFwwG586d22mu8a1vfev2228PBoPr1q3rqTteccUVQoi2trbYRo/HI4S45JJLury8052MurW9UXKpV6KYM2eO0+n8y1/+8re//U1p+etf//rXv/7V6XTOnj07lRHWr18fjUYnT548mKIlQboEAAAAAMAQsWvXLiHEd77znUQdlFPvvfdeT93xL3/5ixAibibUVVddJYRYvHjxiRMneupG6eluJWazWdnVe9OmTUqLcrBgwQKz2ZzKCB988IEQ4pvf/GZa9fZfrIwDAAAAAGBIcDqdLS0tTU1NTqez0w7nzp3Lz8/Pzc09d+5cx7PdWhl37ty5ffv2PfbYY6dPn16xYsVTTz2l9ty3b9/MmTP9fr8Q4qKLLrryyiu/+tWvXnfddddff71er+/yjqk3dnkqjUo+/fTTK6+8Micnp6amRghRVFTU2tr66aefXn755cnfH0VOTk5ra+vf/va3zz//fO3atYcOHTIYDF/5ylfmz5//0EMPGY3GJNf2Z6RLAAAAAAAMCUajMRwOh0Ihg8HQaYdQKGQymQwGQygU6ng2lXSpo7vuuuvVV1+Ny02OHj26atWqbdu2uVwutbG0tPRnP/vZ7bffnuLjpFhb8rJTrCR2kPHjx3/88cdvvPGGLMv33HPP+PHjP/rooy5vpDAYDJFIZMmSJWvWrIk7NXHixF27dtlstpQeuJ8hXQIAAAAAYEjog7lLcUpLS7dv364sQOsoEokcOnTo8OHDH3300Y4dO44fPy5JUnl5+Te+8Y1UHymF2lIJfbqsJHaQdevWPfjgg9OmTZNlec+ePevWrfvud7+b4o3sdrvb7ZYkafLkyatWrbriiitCodC2bduWLFnS2tr6+OOPd0ydBgTSJQAAAAAAhoQJEyYcPHhw586dM2bM6LTDzp07b7zxxgkTJvz5z3/ueDb1lXGhUOiLL75YuXLla6+9lp+f/49//KOwsDB5bdFodPny5c8880zcN7Kl6DzTpS4riR2kra2tuLjY5/MJISwWS21trcPhSPFGl1xyyYkTJ+x2+9mzZ7Ozs9X2d95559Zbbx0+fPiZM2dSrLNfYVdvAAAAAACGhOnTpwshNmzYkKiDckrpdj6MRuOoUaO2bNly4403NjY2Ll++vMtLdDrd0qVLhRCHDx8+z7ufpy4rycrKmjt3rizLsizfcccdSrSUoiuvvFIIMWrUqNhoSQhx3XXXCSHq6urSr1tTpEsAAAAAAAwJDzzwgNFo/PWvf/3LX/6y49nXXnvtN7/5jclkeuCBB3rkdpIkPf/88waD4dVXXz127FiX/ZUvbusPGw91WcnixYvjDlJ0yy23CCGOHz/e1tYW2753714hRHFxcXdL7SdIlwAAAAAAGBKGDx/+9NNPCyHuu++++++//+DBg16v1+fzffzxx9/97ncXLlwohHjmmWfKysp66o6jRo1atGhROByOnb40ZsyY5cuXv/vuu5WVlYFAwO/3f/HFF//93/+tbHI0a9YstackSR23c+q0MT2pVxLnuuuuU+YuTZ06tVt3nDdv3sUXX9ze3n7zzTfv27evra3t3LlzmzZtuvfee4UQd99993k+kVbYdwkAAAAAgCFk5cqVK1asiEajce06ne6nP/3pj370o0QXpr7vUqyampqRI0f6/f6PPvpo3LhxIvG3ywkhLrvssj179gwbNizJmKk3pngq7UpSv1GsTz75ZNq0aXFzl4QQ119//Y4dOywWS/LL+yfSJQAAAAAAhpbDhw+/+OKLu3fvrq6ulmW5tLT0hhtueOSRR8aMGZPkqvTSJSHEsmXLVq9ePX369F27dgkhjhw5sm3btr179x4+fLihoUGW5dzc3DFjxtx2223f/va3MzIyko/Zg+nSeVaS+o3iVFVVrVy5sqKioqamxmKxfPWrX12wYMH999+v1+u7vLZ/Il0CAAAAAABA+th3CQAAAAAAAOkjXQIAAAAAAED6SJcAAAAAAACQPtIlAAAAAAAApI90CQAAAAAAAOkjXQIAAAAAAED6SJcAAAAAAACQPtIlAAAAAAAApM+gdQEAAAAAAKAvSJIky7LWVfwfSZI6NvarCpEi0iUAAAAAANDrOs22tM2S+lvcNnCxMg4AAAAAAADpI10CAAAAAGBokSTpjTfeGD9+fGZmps1mmzFjxqFDhyoqKq699lqr1ZqXl3f33Xc3NTWpndevX3/JJZeYTKaLL754y5YtsUOtX79+5MiRJpNp5MiRGzZsiLvFNddcY7PZ9Hq9sghO+lKXFT7wwAN33XVXbMv8+fMfeOABDUtCMjIAAAAAABgC1BBACDF69Oj33nvP5XLV1tbed999TqfzK1/5yq5du9SWu+++W+08YsSIDz74wOVyvf/++8OHD3/33XeVU1u3bi0tLd29e3d7e/vu3btLS0u3b9+uXjVq1Kjdu3d7PJ64u3esp6NgMDhlypSXXnpJefniiy9OnTo1GAz2dklIDysMAQAAAAAYEtRthiRJ+vjjj6+++mqlvbGxsaCg4JNPPhk7dqzactlll507d07pvH379ltuuUU5tW3btp/97GcffPCBEOLaa69dsmTJbbfdppwqLy9/9tln//jHPypX7d27d+rUqR3vHtvSsUi1T0NDw7XXXvurX/1KCDF//vw//elPBQUF6oW9VBLSw/sIAAAAAMCQEJsuRSIRnU4Xe6pji9q5paUlOztbaW9paRk5cqSybs7pdJ48eTInJ0c9dfHFFzc3NytX+Xy+jIyMjgMmaYnzySefzJ8/32AwvP7662ry1aslIT3suwQAAAAAwJATGyQlajlPsTlOev785z87HI5AIHD27Nl+UhI6RboEAAAAAACS2bdvn3r84YcffvWrX1WOL7vssr1798ae+spXvpJoEIPBEIlEUr/pp59++uMf//jtt99+6623vvvd7548eVLzkpAI6RIAAAAAAEjmkUce+fDDD91u9wcffPC9733vhz/8odL++OOPP/roox988IF6aunSpYkGGT58+HvvvReNRlO5o8fjmTdv3s9+9rOLL754/Pjx/+///b+5c+f6/X4NS0ISrDAEAAAAAGBIiN1KqcstkGI7v/zyy2vXrj1z5kxZWdmTTz65aNEitdu6deuUUyNGjFi6dOl3vvOdRANu3br18ccfP3v2bCQSUUfuWKRy6r777tPr9a+88orafvfdd1sslk2bNvVqSUgP6RIAAAAAAEioH2593Q9LGuJYGQcAAAAAAID0kS4BAAAAAAAgfcwlAwAAAAAAQPqYuwQAAAAAAID0kS4BAAAAAAAgfaRLAAAAAAAASB/pEgAAAAAAANJHugQAAAAAwJBz5syZyspK5djtdp8+fVo5DgQCTU1NQgiPx1NVVVVVVVVXVxd7YWznpqamo0ePJhm50w4YfPjOOAAAAAAAhpbt27f//e9/b25uvvDCC+fOnfv973//iiuuMJvNt95663/+5382NjZu27bt448//p//+R+fz3fw4MGdO3cqF9bW1qqdr7/++pUrV06aNOnkyZPr1q3rOPLkyZM7dsCgRLoEAAAAAMBQ1N7e/uCDD06aNGnMmDH/9m//NmfOnK1btwohbrvttm3btil9fvnLXxoMhrvuukt5+eKLL6qdFy9efOLEiQULFjz00EO/+tWvOo589913J+qAQYaVcQAAAAAADDmyLD/xxBNLlixpbGzMz89P1K28vHz27NmnTp36+OOPfT5fbOexY8ceOHDg0UcfnTVrltohduTYDn30VNAI6RIAAAAAAEPO448/fscdd1x55ZUlJSU1NTVCCEmS4vqcOHGitLQ0IyOjpqbm6NGjfr8/tvOmTZu+//3vv/7661u3blU7xI4c26HvHxB9yaB1AQAAAAAAoE/94he/2LNnTyAQOHTo0De/+c0HHnjgD3/4w80339zc3LxixYq///3vzzzzzLJly1555ZVvfetbQogpU6ZMmTJFCDF37ly185gxY9asWTNq1KgLLrhA7RA78owZM9QO2j4vehv7LgEAAAAAMKTJsuz3+y0WS3c7h8Nhn89nt9sTde6yAwaH/w/RBIPnLF0HVwAAAABJRU5ErkJggg==
PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiID8+CjxvdHJzX2NvbmZpZyB2ZXJzaW9uPSIyLjAiIGluaXQ9IkZyYW1ld29yayI+CiAgICA8U2V0dGluZyBOYW1lPSJGcm9udGVuZDo6TW9kdWxlIyMjQWRtaW5JbXBvcnRFeHBvcnQiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIGFnZW50IGludGVyZmFjZS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkZyb250ZW5kOjpBZG1pbjo6TW9kdWxlUmVnaXN0cmF0aW9uPC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEl0ZW0gVmFsdWVUeXBlPSJGcm9udGVuZFJlZ2lzdHJhdGlvbiI+CiAgICAgICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ikdyb3VwUm8iPgogICAgICAgICAgICAgICAgICAgICAgICA8QXJyYXk+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvQXJyYXk+CiAgICAgICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iR3JvdXAiPgogICAgICAgICAgICAgICAgICAgICAgICA8QXJyYXk+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SXRlbT5hZG1pbjwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPC9BcnJheT4KICAgICAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJEZXNjcmlwdGlvbiIgVHJhbnNsYXRhYmxlPSIxIj5JbXBvcnQgYW5kIGV4cG9ydCBvYmplY3QgaW5mb3JtYXRpb24uPC9JdGVtPgogICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iVGl0bGUiIFRyYW5zbGF0YWJsZT0iMSI+SW1wb3J0L0V4cG9ydDwvSXRlbT4KICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik5hdkJhck5hbWUiPkFkbWluPC9JdGVtPgogICAgICAgICAgICAgICAgPC9IYXNoPgogICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgPC9WYWx1ZT4KICAgIDwvU2V0dGluZz4KICAgIDxTZXR0aW5nIE5hbWU9IkxvYWRlcjo6TW9kdWxlOjpBZG1pbkltcG9ydEV4cG9ydCMjIzAwMS1JbXBvcnRFeHBvcnQiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+TG9hZGVyIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBhZ2VudCBpbnRlcmZhY2UuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5Gcm9udGVuZDo6QWRtaW46Ok1vZHVsZVJlZ2lzdHJhdGlvbjo6TG9hZGVyPC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkNTUyI+CiAgICAgICAgICAgICAgICAgICAgPEFycmF5PgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbT5JVFNNLkltcG9ydEV4cG9ydC5jc3M8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgPC9BcnJheT4KICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iSmF2YVNjcmlwdCI+CiAgICAgICAgICAgICAgICAgICAgPEFycmF5PgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbT5JVFNNLkFkbWluLkltcG9ydEV4cG9ydC5qczwvSXRlbT4KICAgICAgICAgICAgICAgICAgICA8L0FycmF5PgogICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9WYWx1ZT4KICAgIDwvU2V0dGluZz4KICAgIDxTZXR0aW5nIE5hbWU9IkZyb250ZW5kOjpOYXZpZ2F0aW9uIyMjQWRtaW5JbXBvcnRFeHBvcnQjIyMwMDEtSW1wb3J0RXhwb3J0IiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjAiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPk1haW4gbWVudSBpdGVtIHJlZ2lzdHJhdGlvbi48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkZyb250ZW5kOjpBZG1pbjo6TW9kdWxlUmVnaXN0cmF0aW9uOjpNYWluTWVudTwvTmF2aWdhdGlvbj4KICAgICAgICA8VmFsdWU+CiAgICAgICAgICAgIDxBcnJheT4KICAgICAgICAgICAgICAgIDxEZWZhdWx0SXRlbSBWYWx1ZVR5cGU9IkZyb250ZW5kTmF2aWdhdGlvbiI+CiAgICAgICAgICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICAgICAgPC9IYXNoPgogICAgICAgICAgICAgICAgPC9EZWZhdWx0SXRlbT4KICAgICAgICAgICAgPC9BcnJheT4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgogICAgPFNldHRpbmcgTmFtZT0iRnJvbnRlbmQ6Ok5hdmlnYXRpb25Nb2R1bGUjIyNBZG1pbkltcG9ydEV4cG9ydCIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5BZG1pbiBhcmVhIG5hdmlnYXRpb24gZm9yIHRoZSBhZ2VudCBpbnRlcmZhY2UuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5Gcm9udGVuZDo6QWRtaW46Ok1vZHVsZVJlZ2lzdHJhdGlvbjo6QWRtaW5PdmVydmlldzwvTmF2aWdhdGlvbj4KICAgICAgICA8VmFsdWU+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJHcm91cCI+CiAgICAgICAgICAgICAgICAgICAgPEFycmF5PgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbT5hZG1pbjwvSXRlbT4KICAgICAgICAgICAgICAgICAgICA8L0FycmF5PgogICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJHcm91cFJvIj4KICAgICAgICAgICAgICAgICAgICA8QXJyYXk+CiAgICAgICAgICAgICAgICAgICAgPC9BcnJheT4KICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTW9kdWxlIj5LZXJuZWw6Ok91dHB1dDo6SFRNTDo6TmF2QmFyOjpNb2R1bGVBZG1pbjwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTmFtZSIgVHJhbnNsYXRhYmxlPSIxIj5JbXBvcnQvRXhwb3J0PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJCbG9jayI+QWRtaW5pc3RyYXRpb248L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkRlc2NyaXB0aW9uIj5NYW5hZ2UgaW1wb3J0IGFuZCBleHBvcnQgb2Ygb2JqZWN0cy48L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ikljb25CaWciPmZhLWFycm93cy1oPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJJY29uU21hbGwiPjwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+CiAgICA8U2V0dGluZyBOYW1lPSJJbXBvcnRFeHBvcnQ6OkZvcm1hdEJhY2tlbmRSZWdpc3RyYXRpb24jIyNDU1YiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+Rm9ybWF0IGJhY2tlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIGltcG9ydC9leHBvcnQgbW9kdWxlLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPE5hdmlnYXRpb24+Q29yZTo6SW1wb3J0RXhwb3J0PC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik1vZHVsZSI+S2VybmVsOjpTeXN0ZW06OkltcG9ydEV4cG9ydDo6Rm9ybWF0QmFja2VuZDo6Q1NWPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJOYW1lIj5DU1Y8L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgo8L290cnNfY29uZmlnPgo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6OmNzX0ltcG9ydEV4cG9ydDsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7CgpzdWIgRGF0YSB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwoKICAgICMgVGVtcGxhdGU6IEFkbWluSW1wb3J0RXhwb3J0CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbXBvcnQvRXhwb3J0IE1hbmFnZW1lbnQnfSA9ICdJbXBvcnQvRXhwb3J0IFNwcsOhdmEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JlYXRlIGEgdGVtcGxhdGUgdG8gaW1wb3J0IGFuZCBleHBvcnQgb2JqZWN0IGluZm9ybWF0aW9uLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdGFydCBJbXBvcnQnfSA9ICdaYWjDoWppdCBJbXBvcnQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3RhcnQgRXhwb3J0J30gPSAnWmFow6FqaXQgRXhwb3J0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N0ZXAgMSBvZiA1IC0gRWRpdCBjb21tb24gaW5mb3JtYXRpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmFtZSBpcyByZXF1aXJlZCEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT2JqZWN0IGlzIHJlcXVpcmVkISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGb3JtYXQgaXMgcmVxdWlyZWQhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N0ZXAgMiBvZiA1IC0gRWRpdCBvYmplY3QgaW5mb3JtYXRpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3RlcCAzIG9mIDUgLSBFZGl0IGZvcm1hdCBpbmZvcm1hdGlvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydpcyByZXF1aXJlZCEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3RlcCA0IG9mIDUgLSBFZGl0IG1hcHBpbmcgaW5mb3JtYXRpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gbWFwIGVsZW1lbnRzIGZvdW5kLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgTWFwcGluZyBFbGVtZW50J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N0ZXAgNSBvZiA1IC0gRWRpdCBzZWFyY2ggaW5mb3JtYXRpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVzdHJpY3QgZXhwb3J0IHBlciBzZWFyY2gnfSA9ICdPbWV6aXQgRXhwb3J0IHZ5aGxlZMOhdsOhbsOtbSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbXBvcnQgaW5mb3JtYXRpb24nfSA9ICdJbmZvcm1hY2UgbyBJbXBvcnR1JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NvdXJjZSBGaWxlJ30gPSAnWmRyb2pvdsO9IFNvdWJvcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbXBvcnQgc3VtbWFyeSBmb3IgJXMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVjb3Jkcyd9ID0gJ1rDoXpuYW3Fryc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdWNjZXNzJ30gPSAnw5pzcMSbxaFuxJsnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRHVwbGljYXRlIG5hbWVzJ30gPSAnRHVwbGljaXRuw60gam3DqW5hJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhc3QgcHJvY2Vzc2VkIGxpbmUgbnVtYmVyIG9mIGltcG9ydCBmaWxlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J09rJ30gPSAnT2snOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FkbWluSW1wb3J0RXhwb3J0LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBvYmplY3QgYmFja2VuZCBmb3VuZCEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gZm9ybWF0IGJhY2tlbmQgZm91bmQhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RlbXBsYXRlIG5vdCBmb3VuZCEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2FuXCd0IGluc2VydC91cGRhdGUgdGVtcGxhdGUhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05lZWRlZCBUZW1wbGF0ZUlEISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFcnJvciBvY2N1cnJlZC4gSW1wb3J0IGltcG9zc2libGUhIFNlZSBTeXNsb2cgZm9yIGRldGFpbHMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Vycm9yIG9jY3VycmVkLiBFeHBvcnQgaW1wb3NzaWJsZSEgU2VlIFN5c2xvZyBmb3IgZGV0YWlscy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGVtcGxhdGUgTGlzdCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydudW1iZXInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnbnVtYmVyIGJpZ2dlciB0aGFuIHplcm8nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnaW50ZWdlcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydpbnRlZ2VyIGJpZ2dlciB0aGFuIHplcm8nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWxlbWVudCByZXF1aXJlZCwgcGxlYXNlIGluc2VydCBkYXRhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ludmFsaWQgZGF0YSwgcGxlYXNlIGluc2VydCBhIHZhbGlkICVzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zvcm1hdCBub3QgZm91bmQhJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvU3lzdGVtL0ltcG9ydEV4cG9ydC9Gb3JtYXRCYWNrZW5kL0NTVi5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29sdW1uIFNlcGFyYXRvcid9ID0gJ09kZMSbbG92YcSNIFNsb3VwY8WvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RhYnVsYXRvciAoVEFCKSd9ID0gJ1RhYnVsw6F0b3IgKFRBQiknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VtaWNvbG9uICg7KSd9ID0gJ1N0xZllZG7DrWsgKDspJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbG9uICg6KSd9ID0gJ0R2b2p0ZcSNa2EgKDopJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RvdCAoLiknfSA9ICdUZcSNa2EgKC4pJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbW1hICgsKSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFyc2V0J30gPSAnWm5ha292w6Egc2FkYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNsdWRlIENvbHVtbiBIZWFkZXJzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbHVtbid9ID0gJ1Nsb3VwZWMnOwoKICAgICMgU3lzQ29uZmlnCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGb3JtYXQgYmFja2VuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgaW1wb3J0L2V4cG9ydCBtb2R1bGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW1wb3J0IGFuZCBleHBvcnQgb2JqZWN0IGluZm9ybWF0aW9uLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbXBvcnQvRXhwb3J0J30gPSAnSW1wb3J0L0V4cG9ydCc7CgoKICAgIHB1c2ggQHsgJFNlbGYtPntKYXZhU2NyaXB0U3RyaW5nc30gLy8gW10gfSwgKAogICAgKTsKCn0KCjE7Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6OmRhX0ltcG9ydEV4cG9ydDsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7CgpzdWIgRGF0YSB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwoKICAgICMgVGVtcGxhdGU6IEFkbWluSW1wb3J0RXhwb3J0CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbXBvcnQvRXhwb3J0IE1hbmFnZW1lbnQnfSA9ICdJbXBvcnQvRWtwb3J0IHN0eXJpbmcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JlYXRlIGEgdGVtcGxhdGUgdG8gaW1wb3J0IGFuZCBleHBvcnQgb2JqZWN0IGluZm9ybWF0aW9uLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdGFydCBJbXBvcnQnfSA9ICdTdGFydCBpbXBvcnQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3RhcnQgRXhwb3J0J30gPSAnU3RhcnQgZWtwb3J0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N0ZXAgMSBvZiA1IC0gRWRpdCBjb21tb24gaW5mb3JtYXRpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmFtZSBpcyByZXF1aXJlZCEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT2JqZWN0IGlzIHJlcXVpcmVkISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGb3JtYXQgaXMgcmVxdWlyZWQhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N0ZXAgMiBvZiA1IC0gRWRpdCBvYmplY3QgaW5mb3JtYXRpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3RlcCAzIG9mIDUgLSBFZGl0IGZvcm1hdCBpbmZvcm1hdGlvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydpcyByZXF1aXJlZCEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3RlcCA0IG9mIDUgLSBFZGl0IG1hcHBpbmcgaW5mb3JtYXRpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gbWFwIGVsZW1lbnRzIGZvdW5kLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgTWFwcGluZyBFbGVtZW50J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N0ZXAgNSBvZiA1IC0gRWRpdCBzZWFyY2ggaW5mb3JtYXRpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVzdHJpY3QgZXhwb3J0IHBlciBzZWFyY2gnfSA9ICdCZWdyw6ZucyBla3BvcnQgcHIuIHPDuGduaW5nJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ltcG9ydCBpbmZvcm1hdGlvbid9ID0gJ0ltcG9ydCBpbmZvcm1hdGlvbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTb3VyY2UgRmlsZSd9ID0gJ0tpbGRlIGZpbCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbXBvcnQgc3VtbWFyeSBmb3IgJXMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVjb3Jkcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdWNjZXNzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0R1cGxpY2F0ZSBuYW1lcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXN0IHByb2Nlc3NlZCBsaW5lIG51bWJlciBvZiBpbXBvcnQgZmlsZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPayd9ID0gJ09rJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZG1pbkltcG9ydEV4cG9ydC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gb2JqZWN0IGJhY2tlbmQgZm91bmQhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIGZvcm1hdCBiYWNrZW5kIGZvdW5kISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUZW1wbGF0ZSBub3QgZm91bmQhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhblwndCBpbnNlcnQvdXBkYXRlIHRlbXBsYXRlISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZWVkZWQgVGVtcGxhdGVJRCEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRXJyb3Igb2NjdXJyZWQuIEltcG9ydCBpbXBvc3NpYmxlISBTZWUgU3lzbG9nIGZvciBkZXRhaWxzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFcnJvciBvY2N1cnJlZC4gRXhwb3J0IGltcG9zc2libGUhIFNlZSBTeXNsb2cgZm9yIGRldGFpbHMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RlbXBsYXRlIExpc3QnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnbnVtYmVyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J251bWJlciBiaWdnZXIgdGhhbiB6ZXJvJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2ludGVnZXInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnaW50ZWdlciBiaWdnZXIgdGhhbiB6ZXJvJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VsZW1lbnQgcmVxdWlyZWQsIHBsZWFzZSBpbnNlcnQgZGF0YSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbnZhbGlkIGRhdGEsIHBsZWFzZSBpbnNlcnQgYSB2YWxpZCAlcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGb3JtYXQgbm90IGZvdW5kISd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL1N5c3RlbS9JbXBvcnRFeHBvcnQvRm9ybWF0QmFja2VuZC9DU1YucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbHVtbiBTZXBhcmF0b3InfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGFidWxhdG9yIChUQUIpJ30gPSAnVGFidWxhdG9yIChUQUIpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlbWljb2xvbiAoOyknfSA9ICdTZW1pa29sb24gKDspJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbG9uICg6KSd9ID0gJ0tvbG9uICg6KSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEb3QgKC4pJ30gPSAnUHVua3R1bSAoLiknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29tbWEgKCwpJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYXJzZXQnfSA9ICdUZWduc8OmdCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNsdWRlIENvbHVtbiBIZWFkZXJzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbHVtbid9ID0gJ0tvbG9ubmUnOwoKICAgICMgU3lzQ29uZmlnCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGb3JtYXQgYmFja2VuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgaW1wb3J0L2V4cG9ydCBtb2R1bGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW1wb3J0IGFuZCBleHBvcnQgb2JqZWN0IGluZm9ybWF0aW9uLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbXBvcnQvRXhwb3J0J30gPSAnSW1wb3J0L0VrcG9ydCc7CgoKICAgIHB1c2ggQHsgJFNlbGYtPntKYXZhU2NyaXB0U3RyaW5nc30gLy8gW10gfSwgKAogICAgKTsKCn0KCjE7Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6OmRlX0ltcG9ydEV4cG9ydDsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7CgpzdWIgRGF0YSB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwoKICAgICMgVGVtcGxhdGU6IEFkbWluSW1wb3J0RXhwb3J0CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbXBvcnQvRXhwb3J0IE1hbmFnZW1lbnQnfSA9ICdJbXBvcnQvRXhwb3J0LVZlcndhbHR1bmcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JlYXRlIGEgdGVtcGxhdGUgdG8gaW1wb3J0IGFuZCBleHBvcnQgb2JqZWN0IGluZm9ybWF0aW9uLid9ID0gJ0Vyc3RlbGxlbiBlaW5lciBWb3JsYWdlIHp1bSBJbXBvcnRpZXJlbiB1bmQgRXhwb3J0aWVyZW4gdm9uIE9iamVrdC1JbmZvcm1hdGlvbmVuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdGFydCBJbXBvcnQnfSA9ICdJbXBvcnQgc3RhcnRlbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdGFydCBFeHBvcnQnfSA9ICdFeHBvcnQgc3RhcnRlbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdGVwIDEgb2YgNSAtIEVkaXQgY29tbW9uIGluZm9ybWF0aW9uJ30gPSAnU2Nocml0dCAxIHZvbiA1IC0gQWxsZ2VtZWluZSBJbmZvcm1hdGlvbmVuIGJlYXJiZWl0ZW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmFtZSBpcyByZXF1aXJlZCEnfSA9ICdOYW1lIHdpcmQgYmVuw7Z0aWd0ISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPYmplY3QgaXMgcmVxdWlyZWQhJ30gPSAnT2JqZWt0IGlzdCBlcmZvcmRlcmxpY2ghJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zvcm1hdCBpcyByZXF1aXJlZCEnfSA9ICdGb3JtYXQgaXN0IGVyZm9yZGVybGljaCEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3RlcCAyIG9mIDUgLSBFZGl0IG9iamVjdCBpbmZvcm1hdGlvbid9ID0gJ1NjaHJpdHQgMiB2b24gNSAtIE9iamVrdC1JbmZvcm1hdGlvbmVuIGJlYXJiZWl0ZW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3RlcCAzIG9mIDUgLSBFZGl0IGZvcm1hdCBpbmZvcm1hdGlvbid9ID0gJ1NjaHJpdHQgMyB2b24gNSAtIEZvcm1hdGluZm9ybWF0aW9uZW4gYmVhcmJlaXRlbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydpcyByZXF1aXJlZCEnfSA9ICd3aXJkIGJlbsO2dGlndCEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3RlcCA0IG9mIDUgLSBFZGl0IG1hcHBpbmcgaW5mb3JtYXRpb24nfSA9ICdTY2hyaXR0IDQgdm9uIDUgLSBNYXBwaW5nLUluZm9ybWF0aW9uZW4gYmVhcmJlaXRlbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBtYXAgZWxlbWVudHMgZm91bmQuJ30gPSAnS2VpbmUgTWFwcGluZy1FbGVtZW50ZSBnZWZ1bmRlbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIE1hcHBpbmcgRWxlbWVudCd9ID0gJ01hcHBpbmctRWxlbWVudCBoaW56dWbDvGdlbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdGVwIDUgb2YgNSAtIEVkaXQgc2VhcmNoIGluZm9ybWF0aW9uJ30gPSAnU2Nocml0dCA1IHZvbiA1IC0gU3VjaC1JbmZvcm1hdGlvbmVuIGJlYXJiZWl0ZW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVzdHJpY3QgZXhwb3J0IHBlciBzZWFyY2gnfSA9ICdFeHBvcnQgcGVyIFN1Y2hlIGVpbnNjaHLDpG5rZW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW1wb3J0IGluZm9ybWF0aW9uJ30gPSAnSW1wb3J0LUluZm9ybWF0aW9uZW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU291cmNlIEZpbGUnfSA9ICdRdWVsbC1EYXRlaSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbXBvcnQgc3VtbWFyeSBmb3IgJXMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVjb3Jkcyd9ID0gJ0RhdGVuc8OkdHplJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1Y2Nlc3MnfSA9ICdFcmZvbGdyZWljaCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEdXBsaWNhdGUgbmFtZXMnfSA9ICdEb3BwZWx0ZSBOYW1lbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXN0IHByb2Nlc3NlZCBsaW5lIG51bWJlciBvZiBpbXBvcnQgZmlsZSd9ID0gJ1p1bGV0enQgdmVyYXJiZWl0ZXRlIFplaWxlIGRlciBJbXBvcnQtRGF0ZWknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT2snfSA9ICdPayc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWRtaW5JbXBvcnRFeHBvcnQucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIG9iamVjdCBiYWNrZW5kIGZvdW5kISd9ID0gJ0tlaW4gQmFja2VuZCBmw7xyIGRhcyBPYmpla3QgdmVyZsO8Z2JhciEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gZm9ybWF0IGJhY2tlbmQgZm91bmQhJ30gPSAnS2VpbiBCYWNrZW5kIGbDvHIgZGFzIEZvcm1hdCB2ZXJmw7xnYmFyISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUZW1wbGF0ZSBub3QgZm91bmQhJ30gPSAnVm9ybGFnZSBuaWNodCB2ZXJmw7xnYmFyISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYW5cJ3QgaW5zZXJ0L3VwZGF0ZSB0ZW1wbGF0ZSEnfSA9ICdEZWkgVm9ybGFnZSBrb25udGUgbmljaHQgZXJzdGVsbHQgb2RlciBha3R1YWxpc2llcnQgd2VyZGVuISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZWVkZWQgVGVtcGxhdGVJRCEnfSA9ICdEaWUgSUQgZGVyIFZvcmxhZ2Ugd2lyZCBiZW7DtnRpZ3QhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Vycm9yIG9jY3VycmVkLiBJbXBvcnQgaW1wb3NzaWJsZSEgU2VlIFN5c2xvZyBmb3IgZGV0YWlscy4nfSA9ICdGZWhsZXIgYXVmZ2V0cmV0ZW4uIEltcG9ydGllcmVuIHVubcO2Z2xpY2ghIEbDvHIgRGV0YWlscyBzaWVoZSBTeXNsb2cuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Vycm9yIG9jY3VycmVkLiBFeHBvcnQgaW1wb3NzaWJsZSEgU2VlIFN5c2xvZyBmb3IgZGV0YWlscy4nfSA9ICdGZWhsZXIgYXVmZ2V0cmV0ZW4uIEV4cG9ydGllcmVuIHVubcO2Z2xpY2ghIEbDvHIgRGV0YWlscyBzaWVoZSBTeXNsb2cuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RlbXBsYXRlIExpc3QnfSA9ICdWb3JsYWdlbmxpc3RlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J251bWJlcid9ID0gJ1phaGwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnbnVtYmVyIGJpZ2dlciB0aGFuIHplcm8nfSA9ICdaYWhsIGdyw7bDn2VyIGFscyBOdWxsJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2ludGVnZXInfSA9ICdHYW56emFobCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydpbnRlZ2VyIGJpZ2dlciB0aGFuIHplcm8nfSA9ICdHYW56emFobCBncsO2w59lciBhbHMgTnVsbCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbGVtZW50IHJlcXVpcmVkLCBwbGVhc2UgaW5zZXJ0IGRhdGEnfSA9ICdFbGVtZW50IGVyZm9yZGVybGljaCwgYml0dGUgZsO8Z2VuIFNpZSBEYXRlbiBlaW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW52YWxpZCBkYXRhLCBwbGVhc2UgaW5zZXJ0IGEgdmFsaWQgJXMnfSA9ICdVbmfDvGx0aWdlIERhdGVuLCBiaXR0ZSBnZWJlbiBTaWUgZWluIGfDvGx0aWdlcyAlcyBlaW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRm9ybWF0IG5vdCBmb3VuZCEnfSA9ICdGb3JtYXQgbmljaHQgZ2VmdW5kZW4hJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvU3lzdGVtL0ltcG9ydEV4cG9ydC9Gb3JtYXRCYWNrZW5kL0NTVi5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29sdW1uIFNlcGFyYXRvcid9ID0gJ1NwYWx0ZW50cmVubmVyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RhYnVsYXRvciAoVEFCKSd9ID0gJ1RhYnVsYXRvciAoVEFCKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZW1pY29sb24gKDspJ30gPSAnU2VtaWNvbG9uICg7KSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb2xvbiAoOiknfSA9ICdEb3BwZWxwdW5rdCAoOiknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRG90ICguKSd9ID0gJ1B1bmt0ICguKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb21tYSAoLCknfSA9ICdLb21tYSAoLCknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhcnNldCd9ID0gJ1plaWNoZW5zYXR6JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY2x1ZGUgQ29sdW1uIEhlYWRlcnMnfSA9ICdNaXQgU3BhbHRlbsO8YmVyc2NocmlmdGVuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbHVtbid9ID0gJ1NwYWx0ZSc7CgogICAgIyBTeXNDb25maWcKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zvcm1hdCBiYWNrZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBpbXBvcnQvZXhwb3J0IG1vZHVsZS4nfSA9CiAgICAgICAgJ0Zvcm1hdC1CYWNrZW5kIE1vZHVsLVJlZ2lzdHJhdGlvbiBkZXMgSW1wb3J0L0V4cG9ydCBNb2R1bHMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ltcG9ydCBhbmQgZXhwb3J0IG9iamVjdCBpbmZvcm1hdGlvbi4nfSA9ICdJbXBvcnRpZXJlbiB1bmQgRXhwb3J0aWVyZW4gdm9uIE9iamVrdC1JbmZvcm1hdGlvbmVuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbXBvcnQvRXhwb3J0J30gPSAnSW1wb3J0L0V4cG9ydCc7CgoKICAgIHB1c2ggQHsgJFNlbGYtPntKYXZhU2NyaXB0U3RyaW5nc30gLy8gW10gfSwgKAogICAgKTsKCn0KCjE7Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6OmVzX0ltcG9ydEV4cG9ydDsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7CgpzdWIgRGF0YSB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwoKICAgICMgVGVtcGxhdGU6IEFkbWluSW1wb3J0RXhwb3J0CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbXBvcnQvRXhwb3J0IE1hbmFnZW1lbnQnfSA9ICdHZXN0acOzbiBkZSBJbXBvcnRhY2nDs24vRXhwb3J0YWNpw7NuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyZWF0ZSBhIHRlbXBsYXRlIHRvIGltcG9ydCBhbmQgZXhwb3J0IG9iamVjdCBpbmZvcm1hdGlvbi4nfSA9ICdDcmVhciB1bmEgcGxhbnRpbGxhIHBhcmEgaW1wb3J0YXIgeSBleHBvcnRhciBpbmZvcm1hY2lvbiBkZWwgb2JqZXRvLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdGFydCBJbXBvcnQnfSA9ICdJbmljaWFyIEltcG9ydGFjacOzbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdGFydCBFeHBvcnQnfSA9ICdJbmljaWFyIEV4cG9ydGFjacOzbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdGVwIDEgb2YgNSAtIEVkaXQgY29tbW9uIGluZm9ybWF0aW9uJ30gPSAnUGFzbyAxIGRlIDUgLSBFZGl0YXIgaW5mb3JtYWNpw7NuIGNvbcO6bic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOYW1lIGlzIHJlcXVpcmVkISd9ID0gJ8KhU2UgcmVxdWllcmUgTm9tYnJlISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPYmplY3QgaXMgcmVxdWlyZWQhJ30gPSAnwqFEZWJlIGVzcGVjaWZpY2FyIE9iamV0byEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRm9ybWF0IGlzIHJlcXVpcmVkISd9ID0gJ8KhRGViZSBlc3BlY2lmaWNhciBGb3JtYXRvISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdGVwIDIgb2YgNSAtIEVkaXQgb2JqZWN0IGluZm9ybWF0aW9uJ30gPSAnUGFzbyAyIGRlIDUgLSBFZGl0YXIgaW5mb3JtYWNpw7NuIGRlIG9iamV0byc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdGVwIDMgb2YgNSAtIEVkaXQgZm9ybWF0IGluZm9ybWF0aW9uJ30gPSAnUGFzbyAzIGRlIDUgLSBFZGl0YXIgaW5mb3JtYWNpw7NuIGRlIGZvcm1hdG8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnaXMgcmVxdWlyZWQhJ30gPSAnwqFlcyByZXF1ZXJpZG8hJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N0ZXAgNCBvZiA1IC0gRWRpdCBtYXBwaW5nIGluZm9ybWF0aW9uJ30gPSAnUGFzbyA0IGRlIDUgLSBFZGl0YXIgaW5mb3JtYWNpw7NuIGRlIG1hcGVvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIG1hcCBlbGVtZW50cyBmb3VuZC4nfSA9ICdObyBzZSBlbmNvbnRyYXJvbiBlbGVtZW50b3MgZGUgbWFwZW8uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBNYXBwaW5nIEVsZW1lbnQnfSA9ICdBw7FhZGlyIE1hcGVvIGRlIEVsZW1lbnRvcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdGVwIDUgb2YgNSAtIEVkaXQgc2VhcmNoIGluZm9ybWF0aW9uJ30gPSAnUGFzbyA1IGRlIDUgLSBFZGl0YXIgaW5mb3JtYWNpw7NuIGRlIGLDunNxdWVkYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXN0cmljdCBleHBvcnQgcGVyIHNlYXJjaCd9ID0gJ1Jlc3RyaW5naXIgZXhwb3J0YWNpw7NuIHBvciBiw7pzcXVlZGEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW1wb3J0IGluZm9ybWF0aW9uJ30gPSAnSW1wb3J0YXIgaW5mb3JtYWNpw7NuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NvdXJjZSBGaWxlJ30gPSAnQXJjaGl2byBvcmlnZW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW1wb3J0IHN1bW1hcnkgZm9yICVzJ30gPSAnUmVzdW1lbiBkZSBpbXBvcnRhY2nDs24gZGUgJXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVjb3Jkcyd9ID0gJ1JlZ2lzdHJvcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdWNjZXNzJ30gPSAnw4l4aXRvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0R1cGxpY2F0ZSBuYW1lcyd9ID0gJ05vbWJyZXMgZHVwbGljYWRvcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXN0IHByb2Nlc3NlZCBsaW5lIG51bWJlciBvZiBpbXBvcnQgZmlsZSd9ID0gJ8OabHRpbWEgbsO6bWVybyBkZSBsw61uZWEgcHJvY2VzYWRhIGRlbCBhcmNoaXZvIGltcG9ydGFyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J09rJ30gPSAnT2snOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FkbWluSW1wb3J0RXhwb3J0LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBvYmplY3QgYmFja2VuZCBmb3VuZCEnfSA9ICfCoU5vIHNlIGVuY29udHLDsyBuaW5nw7puIG9iamV0byBiYWNrZW5kISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBmb3JtYXQgYmFja2VuZCBmb3VuZCEnfSA9ICdObyBzZSBlbmNvbnRyw7MgbmluZ8O6biBmb3JtYXRvIGJhY2tlbmQhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RlbXBsYXRlIG5vdCBmb3VuZCEnfSA9ICfCoVBsYW50aWxsYSBubyBlbmNvbnRyYWRhISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYW5cJ3QgaW5zZXJ0L3VwZGF0ZSB0ZW1wbGF0ZSEnfSA9ICfCoU5vIHNlIHB1ZWRlIGluc2VydGFyL2FjdHVhbGl6YXIgbGEgcGxhbnRpbGxhISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZWVkZWQgVGVtcGxhdGVJRCEnfSA9ICdTZSBuZWNlc2l0YSBJRFBsYW50aWxsYSEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRXJyb3Igb2NjdXJyZWQuIEltcG9ydCBpbXBvc3NpYmxlISBTZWUgU3lzbG9nIGZvciBkZXRhaWxzLid9ID0gJ09jdXJyacOzIHVuIGVycm9yIS4gSW1wb3NpYmxlIGltcG9ydGFyISBWZWEgU3lzbG9nIHBhcmEgZGV0YWxsZXMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Vycm9yIG9jY3VycmVkLiBFeHBvcnQgaW1wb3NzaWJsZSEgU2VlIFN5c2xvZyBmb3IgZGV0YWlscy4nfSA9ICdPY3VycmnDsyB1biBlcnJvciEuIEltcG9zaWJsZSBleHBvcnRhciEgVmVhIFN5c2xvZyBwYXJhIGRldGFsbGVzLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUZW1wbGF0ZSBMaXN0J30gPSAnTGlzdGEgZGUgcGxhbnRpbGxhcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydudW1iZXInfSA9ICdOw7ptZXJvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J251bWJlciBiaWdnZXIgdGhhbiB6ZXJvJ30gPSAnbsO6bWVybyBtYXlvciBxdWUgY2Vybyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydpbnRlZ2VyJ30gPSAnZW50ZXJvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2ludGVnZXIgYmlnZ2VyIHRoYW4gemVybyd9ID0gJ0VudGVybyBtYXlvIHF1ZSBjZXJvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VsZW1lbnQgcmVxdWlyZWQsIHBsZWFzZSBpbnNlcnQgZGF0YSd9ID0gJ0VsZW1lbnRvIHJlcXVlcmlkbywgcG9yIGZhdm9yIGluc2VydGFyIGRhdG9zJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ludmFsaWQgZGF0YSwgcGxlYXNlIGluc2VydCBhIHZhbGlkICVzJ30gPSAnRGF0b3Mgbm8gdsOhbGlkbywgcG9yIGZhdm9yIGluc2VydGUgdW4gJXMgdsOhbGlkbyAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRm9ybWF0IG5vdCBmb3VuZCEnfSA9ICfCoUZvcm1hdG8gbm8gZW5jb250cmFkbyEnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9TeXN0ZW0vSW1wb3J0RXhwb3J0L0Zvcm1hdEJhY2tlbmQvQ1NWLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb2x1bW4gU2VwYXJhdG9yJ30gPSAnU2VwYXJhZG9yIGRlIENvbHVtbmEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGFidWxhdG9yIChUQUIpJ30gPSAnVGFidWxhZG9yIChUQUIpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlbWljb2xvbiAoOyknfSA9ICdQdW50byB5IENvbWEgKDspJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbG9uICg6KSd9ID0gJ0RvcyBwdW50b3MgKDopJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RvdCAoLiknfSA9ICdQdW50byAoLiknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29tbWEgKCwpJ30gPSAnQ29tYSAoLCknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhcnNldCd9ID0gJ0p1ZWdvIGRlIGNhcmFjdGVyZXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5jbHVkZSBDb2x1bW4gSGVhZGVycyd9ID0gJ0luY2x1aXIgQ2FiZWNlcmEgZGUgbGEgQ29sdW1uYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb2x1bW4nfSA9ICdDb2x1bW5hJzsKCiAgICAjIFN5c0NvbmZpZwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRm9ybWF0IGJhY2tlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIGltcG9ydC9leHBvcnQgbW9kdWxlLid9ID0KICAgICAgICAnUmVnaXN0cm8gZGUgbcOzZHVsbyBkZSBmb3JtYXRvIGJhY2tlbmQgcGFyYSBlbCBtw7NkdWxvIGltcG9ydC9leHBvcnQuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ltcG9ydCBhbmQgZXhwb3J0IG9iamVjdCBpbmZvcm1hdGlvbi4nfSA9ICdJbXBvcnRhciB5IGV4cG9ydGFyIGluZm9ybWFjacOzbiBkZSBvYmpldG9zLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbXBvcnQvRXhwb3J0J30gPSAnSW1wb3J0YXIvRXhwb3J0YXInOwoKCiAgICBwdXNoIEB7ICRTZWxmLT57SmF2YVNjcmlwdFN0cmluZ3N9IC8vIFtdIH0sICgKICAgICk7Cgp9CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6OmVzX01YX0ltcG9ydEV4cG9ydDsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7CgpzdWIgRGF0YSB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwoKICAgICMgVGVtcGxhdGU6IEFkbWluSW1wb3J0RXhwb3J0CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbXBvcnQvRXhwb3J0IE1hbmFnZW1lbnQnfSA9ICdHZXN0acOzbiBkZSBJbXBvcnRhY2nDs24vRXhwb3J0YWNpw7NuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyZWF0ZSBhIHRlbXBsYXRlIHRvIGltcG9ydCBhbmQgZXhwb3J0IG9iamVjdCBpbmZvcm1hdGlvbi4nfSA9ICdDcmVhciB1bmEgcGxhbnRpbGxhIHBhcmEgaW1wb3J0YXIgeSBleHBvcnRhciBpbmZvcm1hY2nDs24gZGUgb2JqZXRvcy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3RhcnQgSW1wb3J0J30gPSAnSW5pY2lhciBJbXBvcnRhY2nDs24nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3RhcnQgRXhwb3J0J30gPSAnSW5pY2lhciBFeHBvcnRhY2nDs24nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3RlcCAxIG9mIDUgLSBFZGl0IGNvbW1vbiBpbmZvcm1hdGlvbid9ID0gJ1Bhc28gMSBkZSA1IC0gRWRpdGFyIGxhIGluZm9ybWFjacOzbiBjb23Dum4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmFtZSBpcyByZXF1aXJlZCEnfSA9ICdFcyByZXF1ZXJpZG8gdW4gbm9tYnJlISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPYmplY3QgaXMgcmVxdWlyZWQhJ30gPSAnRXMgcmVxdWVyaWRvIHVuIG9iamV0byEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRm9ybWF0IGlzIHJlcXVpcmVkISd9ID0gJ0VzIHJlcXVlcmlkbyB1biBmb3JtYXRvLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdGVwIDIgb2YgNSAtIEVkaXQgb2JqZWN0IGluZm9ybWF0aW9uJ30gPSAnUGFzbyAyIGRlIDUgLSBFZGl0YXIgbGEgaW5mb3JtYWNpw7NuIGRlbCBvYmpldG8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3RlcCAzIG9mIDUgLSBFZGl0IGZvcm1hdCBpbmZvcm1hdGlvbid9ID0gJ1Bhc28gMyBkZSA1IC0gRWRpdGFyIGxhIGluZm9ybWFjacOzbiBkZSBmb3JtYXRvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2lzIHJlcXVpcmVkISd9ID0gJ2VzIHJlcXVlcmlkbyEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3RlcCA0IG9mIDUgLSBFZGl0IG1hcHBpbmcgaW5mb3JtYXRpb24nfSA9ICdQYXNvIDQgZGUgNSAtIEVkaXRhciBsYSBpbmZvcm1hY2nDs24gZGUgbWFwZW8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gbWFwIGVsZW1lbnRzIGZvdW5kLid9ID0gJ05vIHNlIGhhbiBlbmNvbnRyYWRvIG1hcGFzLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgTWFwcGluZyBFbGVtZW50J30gPSAnQWdyZWdhciB1biBFbGVtZW50byBkZSBNYXBlbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdGVwIDUgb2YgNSAtIEVkaXQgc2VhcmNoIGluZm9ybWF0aW9uJ30gPSAnUGFzbyA1IGRlIDUgLSBFZGl0YXIgaW5mb3JtYWNpw7NuIGRlIGLDunNxdWVkYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXN0cmljdCBleHBvcnQgcGVyIHNlYXJjaCd9ID0gJ1Jlc3RyaW5naXIgbGEgZXhwb3J0YWNpw7NuIGEgbGEgYsO6c3F1ZWRhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ltcG9ydCBpbmZvcm1hdGlvbid9ID0gJ0luZm9ybWFjacOzbiBkZSBpbXBvcnRhY2nDs24nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU291cmNlIEZpbGUnfSA9ICdBcmNoaXZvIEZ1ZW50ZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbXBvcnQgc3VtbWFyeSBmb3IgJXMnfSA9ICdSZXN1bWVuIGRlIGltcG9ydGFjacOzbiBwYXJhICVzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlY29yZHMnfSA9ICdSZWdpc3Ryb3MnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3VjY2Vzcyd9ID0gJ8OJeGl0byc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEdXBsaWNhdGUgbmFtZXMnfSA9ICdOb21icmVzIGR1cGxpY2Fkb3MnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGFzdCBwcm9jZXNzZWQgbGluZSBudW1iZXIgb2YgaW1wb3J0IGZpbGUnfSA9ICfDmmx0aW1vIG7Dum1lcm8gZGUgbMOtbmVhIHByb2Nlc2FkYSBkZWwgYXJjaGl2byBhIGltcG9ydGFyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J09rJ30gPSAnQWNlcHRhcic7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWRtaW5JbXBvcnRFeHBvcnQucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIG9iamVjdCBiYWNrZW5kIGZvdW5kISd9ID0gJ8KhTm8gc2UgZW5jb250csOzIHVuIFwnYmFja2VuZFwnIHBhcmEgZWwgb2JqZXRvISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBmb3JtYXQgYmFja2VuZCBmb3VuZCEnfSA9ICfCoU5vIHNlIGVuY29udHLDsyB1biBcJ2JhY2tlbmRcJyBwYXJhIGVsIGZvcm1hdG8hJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RlbXBsYXRlIG5vdCBmb3VuZCEnfSA9ICfCoU5vIHNlIGVuY29udHLDsyBsYSBwbGFudGlsbGEhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhblwndCBpbnNlcnQvdXBkYXRlIHRlbXBsYXRlISd9ID0gJ8KhTm8gZnVlIHBvc2libGUgaW5zZXJ0YXIvYWN0dWFsaXphciBsYSBwbGFudGlsbGEhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05lZWRlZCBUZW1wbGF0ZUlEISd9ID0gJ8KhU2UgbmVjZXNpdGEgXCdUZW1wbGF0ZUlEXCchJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Vycm9yIG9jY3VycmVkLiBJbXBvcnQgaW1wb3NzaWJsZSEgU2VlIFN5c2xvZyBmb3IgZGV0YWlscy4nfSA9ICdIYSBvY3VycmlkbyB1biBlcnJvci4gwqFJbXBvc2libGUgZGUgSW1wb3J0YXLCoSBSZXZpc2UgbGFzIHRyYXphcyBkZWwgc2lzdGVtYSBwYXJhIG9idGVuZXIgbG9zIGRldGFsbGVzLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFcnJvciBvY2N1cnJlZC4gRXhwb3J0IGltcG9zc2libGUhIFNlZSBTeXNsb2cgZm9yIGRldGFpbHMuJ30gPSAnSGEgb2N1cnJpZG8gdW4gZXJyb3IuIMKhSW1wb3NpYmxlIGRlIEV4cG9ydGFywqEgUmV2aXNlIGxhcyB0cmF6YXMgZGVsIHNpc3RlbWEgcGFyYSBvYnRlbmVyIGxvcyBkZXRhbGxlcy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGVtcGxhdGUgTGlzdCd9ID0gJ0xpc3RhIGRlIFBsYW50aWxsYXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnbnVtYmVyJ30gPSAnbsO6bWVybyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydudW1iZXIgYmlnZ2VyIHRoYW4gemVybyd9ID0gJ27Dum1lcm8gbWF5b3IgYSBjZXJvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2ludGVnZXInfSA9ICdlbnRlcm8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnaW50ZWdlciBiaWdnZXIgdGhhbiB6ZXJvJ30gPSAnZW50ZXJvIG1heW9yIGEgY2Vybyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbGVtZW50IHJlcXVpcmVkLCBwbGVhc2UgaW5zZXJ0IGRhdGEnfSA9ICdFbGVtZW50byByZXF1ZXJpZG8sIHBvciBmYXZvciBpbnNlcnRlIGVsIGRhdG8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW52YWxpZCBkYXRhLCBwbGVhc2UgaW5zZXJ0IGEgdmFsaWQgJXMnfSA9ICdEYXRvcyBpbnbDoWxpZG9zLCBwb3IgZmF2b3Igb2VzdGUgdW4gJXMgdsOhbGlkbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGb3JtYXQgbm90IGZvdW5kISd9ID0gJ8KhTm8gc2UgZW5jb250csOzIGVsIEZvcm1hdG8hJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvU3lzdGVtL0ltcG9ydEV4cG9ydC9Gb3JtYXRCYWNrZW5kL0NTVi5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29sdW1uIFNlcGFyYXRvcid9ID0gJ1NlcGFyYWRvciBkZSBDb2x1bW5hJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RhYnVsYXRvciAoVEFCKSd9ID0gJ1RhYnVsYWRvciAoVEFCKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZW1pY29sb24gKDspJ30gPSAnUHVudG8geSBjb21hICg7KSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb2xvbiAoOiknfSA9ICdEb3MgUHVudG9zICg6KSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEb3QgKC4pJ30gPSAnUHVudG8gKC4pJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbW1hICgsKSd9ID0gJ0NvbWEgKCwpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYXJzZXQnfSA9ICdDb25qdW50byBkZSBDYXJhY3RlcmVzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY2x1ZGUgQ29sdW1uIEhlYWRlcnMnfSA9ICdJbmNsdWlyIENhYmVjZXJhIGRlIENvbHVtbmFzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbHVtbid9ID0gJ0NhbHVtbmEnOwoKICAgICMgU3lzQ29uZmlnCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGb3JtYXQgYmFja2VuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgaW1wb3J0L2V4cG9ydCBtb2R1bGUuJ30gPQogICAgICAgICdGb3JtYXRvIGRlbCBtw7NkdWxvIGFkbWluaXN0cmF0aXZvIGRlIHJlZ2lzdHJvIHBhcmEgZWwgbcOzZHVsbyBkZSBpbXBvcnRhY2nDs24vZXhwb3J0YWNpw7NuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbXBvcnQgYW5kIGV4cG9ydCBvYmplY3QgaW5mb3JtYXRpb24uJ30gPSAnSW1wb3J0YXIgeSBleHBvcnRhciBpbmZvcm1hY2nDs24gZGUgdW4gb2JqZXRvLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbXBvcnQvRXhwb3J0J30gPSAnSW1wb3J0YXIvRXhwb3J0YXInOwoKCiAgICBwdXNoIEB7ICRTZWxmLT57SmF2YVNjcmlwdFN0cmluZ3N9IC8vIFtdIH0sICgKICAgICk7Cgp9CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6OmZhX0ltcG9ydEV4cG9ydDsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7CgpzdWIgRGF0YSB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwoKICAgICMgVGVtcGxhdGU6IEFkbWluSW1wb3J0RXhwb3J0CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbXBvcnQvRXhwb3J0IE1hbmFnZW1lbnQnfSA9ICfZhdiv24zYsduM2Kog2YjYsdmI2K8v2LXYr9mI2LEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JlYXRlIGEgdGVtcGxhdGUgdG8gaW1wb3J0IGFuZCBleHBvcnQgb2JqZWN0IGluZm9ybWF0aW9uLid9ID0gJ9iz2KfYrtiqINmC2KfZhNio24wg2KjYsdin24wg2YjYsdmI2K8g2Ygg2LXYr9mI2LEg2KfYt9mE2KfYudin2Kog2KLYqNis2qnYqic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdGFydCBJbXBvcnQnfSA9ICfYtNix2YjYuSDYudmF2YTbjNin2Kog2YjYsdmI2K8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3RhcnQgRXhwb3J0J30gPSAn2LTYsdmI2Lkg2LnZhdmE24zYp9iqINi12K/ZiNixJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N0ZXAgMSBvZiA1IC0gRWRpdCBjb21tb24gaW5mb3JtYXRpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmFtZSBpcyByZXF1aXJlZCEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT2JqZWN0IGlzIHJlcXVpcmVkISd9ID0gJ9ii2KjYrNqp2Kog2YXZiNix2K8g2YbbjNin2LIg2KfYs9iqISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGb3JtYXQgaXMgcmVxdWlyZWQhJ30gPSAn2YLYp9mE2KjigIzYqNmG2K/bjCDZhdmI2LHYryDZhtuM2KfYsiDYp9iz2KohJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N0ZXAgMiBvZiA1IC0gRWRpdCBvYmplY3QgaW5mb3JtYXRpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3RlcCAzIG9mIDUgLSBFZGl0IGZvcm1hdCBpbmZvcm1hdGlvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydpcyByZXF1aXJlZCEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3RlcCA0IG9mIDUgLSBFZGl0IG1hcHBpbmcgaW5mb3JtYXRpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gbWFwIGVsZW1lbnRzIGZvdW5kLid9ID0gJ9mH24zahiDYudmG2LXYsSDZhtqv2KfYtNiq24wg24zYp9mB2Kog2YbYtNivLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgTWFwcGluZyBFbGVtZW50J30gPSAn2KfZgdiy2YjYr9mGINi52YbYtdixINmG2q/Yp9i02KonOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3RlcCA1IG9mIDUgLSBFZGl0IHNlYXJjaCBpbmZvcm1hdGlvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXN0cmljdCBleHBvcnQgcGVyIHNlYXJjaCd9ID0gJ9mF2K3Yr9mI2K/Ys9in2LLbjCDYudmF2YTbjNin2Kog2LXYr9mI2LEg2KjZhyDYp9iy2KfbjCDYrNiz2KrYrNmIJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ltcG9ydCBpbmZvcm1hdGlvbid9ID0gJ9mI2LHZiNivINin2LfZhNin2LnYp9iqJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NvdXJjZSBGaWxlJ30gPSAn2YHYp9uM2YQg2YXZhtio2LknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW1wb3J0IHN1bW1hcnkgZm9yICVzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlY29yZHMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3VjY2Vzcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEdXBsaWNhdGUgbmFtZXMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGFzdCBwcm9jZXNzZWQgbGluZSBudW1iZXIgb2YgaW1wb3J0IGZpbGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT2snfSA9ICfYqtin24zbjNivJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZG1pbkltcG9ydEV4cG9ydC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gb2JqZWN0IGJhY2tlbmQgZm91bmQhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIGZvcm1hdCBiYWNrZW5kIGZvdW5kISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUZW1wbGF0ZSBub3QgZm91bmQhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhblwndCBpbnNlcnQvdXBkYXRlIHRlbXBsYXRlISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZWVkZWQgVGVtcGxhdGVJRCEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRXJyb3Igb2NjdXJyZWQuIEltcG9ydCBpbXBvc3NpYmxlISBTZWUgU3lzbG9nIGZvciBkZXRhaWxzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFcnJvciBvY2N1cnJlZC4gRXhwb3J0IGltcG9zc2libGUhIFNlZSBTeXNsb2cgZm9yIGRldGFpbHMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RlbXBsYXRlIExpc3QnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnbnVtYmVyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J251bWJlciBiaWdnZXIgdGhhbiB6ZXJvJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2ludGVnZXInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnaW50ZWdlciBiaWdnZXIgdGhhbiB6ZXJvJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VsZW1lbnQgcmVxdWlyZWQsIHBsZWFzZSBpbnNlcnQgZGF0YSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbnZhbGlkIGRhdGEsIHBsZWFzZSBpbnNlcnQgYSB2YWxpZCAlcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGb3JtYXQgbm90IGZvdW5kISd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL1N5c3RlbS9JbXBvcnRFeHBvcnQvRm9ybWF0QmFja2VuZC9DU1YucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbHVtbiBTZXBhcmF0b3InfSA9ICfYrNiv2KfaqdmG2YbYr9mHINiz2KrZiNmG4oCM2YfYpyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUYWJ1bGF0b3IgKFRBQiknfSA9ICfYrNiv2YjZhCDYs9in2LIgKFRBQiknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VtaWNvbG9uICg7KSd9ID0gJ9iz2YXbjCDaqdin2YTZhiAoOyknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29sb24gKDopJ30gPSAn2K/ZiNmG2YLYt9mHICg6KSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEb3QgKC4pJ30gPSAn2YbZgti32YcgKC4pJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbW1hICgsKSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFyc2V0J30gPSAn2qnYr9io2YbYr9uMINin2LfZhNin2LnYp9iqJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY2x1ZGUgQ29sdW1uIEhlYWRlcnMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29sdW1uJ30gPSAn2LPYqtmI2YYnOwoKICAgICMgU3lzQ29uZmlnCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGb3JtYXQgYmFja2VuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgaW1wb3J0L2V4cG9ydCBtb2R1bGUuJ30gPQogICAgICAgICfZgtin2YTYqOKAjNio2YbYr9uMINir2KjYqiDZhdin2pjZiNmEINio2LHYp9uMINmF2KfamNmI2YQg2YjYsdmI2K8v2LXYr9mI2LEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW1wb3J0IGFuZCBleHBvcnQgb2JqZWN0IGluZm9ybWF0aW9uLid9ID0gJ9mI2LHZiNivINmIINi12K/ZiNixINin2LfZhNin2LnYp9iqINii2KjYrNqp2KonOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW1wb3J0L0V4cG9ydCd9ID0gJ9mI2LHZiNivL9i12K/ZiNixJzsKCgogICAgcHVzaCBAeyAkU2VsZi0+e0phdmFTY3JpcHRTdHJpbmdzfSAvLyBbXSB9LCAoCiAgICApOwoKfQoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6OmZyX0ltcG9ydEV4cG9ydDsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7CgpzdWIgRGF0YSB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwoKICAgICMgVGVtcGxhdGU6IEFkbWluSW1wb3J0RXhwb3J0CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbXBvcnQvRXhwb3J0IE1hbmFnZW1lbnQnfSA9ICdHZXN0aW9uIGRlIGxcJ2ltcG9ydGF0aW9uL2V4cG9ydGF0aW9uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyZWF0ZSBhIHRlbXBsYXRlIHRvIGltcG9ydCBhbmQgZXhwb3J0IG9iamVjdCBpbmZvcm1hdGlvbi4nfSA9ICdDcsOpZXIgdW4gbW9kw6hsZSBwb3VyIGltcG9ydGVyIGV0IGV4cG9ydGVyIGxlcyBpbmZvcm1hdGlvbnMgZFwnb2JqZXQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3RhcnQgSW1wb3J0J30gPSAnRMOpbWFycmVyIGxcJ2ltcG9ydCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdGFydCBFeHBvcnQnfSA9ICdEw6ltYXJyZXIgbFwnZXhwb3J0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N0ZXAgMSBvZiA1IC0gRWRpdCBjb21tb24gaW5mb3JtYXRpb24nfSA9ICfDiXRhcGUgMSBzdXIgNSAtIMOJZGl0ZXIgbGVzIGluZm9ybWF0aW9uIGNvbW11bmVzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05hbWUgaXMgcmVxdWlyZWQhJ30gPSAnVW4gbm9tIGVzdCByZXF1aXMgISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPYmplY3QgaXMgcmVxdWlyZWQhJ30gPSAnVW4gb2JqZXQgZXN0IHJlcXVpcyAhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zvcm1hdCBpcyByZXF1aXJlZCEnfSA9ICdVbiBmb3JtYXQgZXN0IHJlcXVpcyAhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N0ZXAgMiBvZiA1IC0gRWRpdCBvYmplY3QgaW5mb3JtYXRpb24nfSA9ICfDiXRhcGUgMiBzdXIgNSAtIMOJZGl0ZXIgbGVzIGluZm9ybWF0aW9ucyBkZSBsXCdvYmpldCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdGVwIDMgb2YgNSAtIEVkaXQgZm9ybWF0IGluZm9ybWF0aW9uJ30gPSAnw4l0YXBlIDMgc3VyIDUgLSDDiWRpdGVyIGxlcyBpbmZvcm1hdGlvbnMgZHUgZm9ybWF0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2lzIHJlcXVpcmVkISd9ID0gJ2VzdCByZXF1aXMgISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdGVwIDQgb2YgNSAtIEVkaXQgbWFwcGluZyBpbmZvcm1hdGlvbid9ID0gJ8OJdGFwZSA0IHN1ciA1IC0gw4lkaXRlciBsZXMgaW5mb3JtYXRpb25zIGRlIG1hcHBhZ2UnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gbWFwIGVsZW1lbnRzIGZvdW5kLid9ID0gJ0F1Y3VuIMOpbMOpbWVudCBkZSBtYXBwYWdlIHRyb3V2w6kuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBNYXBwaW5nIEVsZW1lbnQnfSA9ICdBam91dGVyIHVuIMOpbMOpbWVudCBkZSBtYXBwYWdlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N0ZXAgNSBvZiA1IC0gRWRpdCBzZWFyY2ggaW5mb3JtYXRpb24nfSA9ICfDiXRhcGUgNSBzdXIgNSAtIMOJZGl0ZXIgbGVzIGluZm9ybWF0aW9ucyBkZSByZWNoZXJjaGUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVzdHJpY3QgZXhwb3J0IHBlciBzZWFyY2gnfSA9ICdSZXN0cmVpbmRyZSBsXCdleHBvcnRhdGlvbiBwYXIgcmVjaGVyY2hlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ltcG9ydCBpbmZvcm1hdGlvbid9ID0gJ0luZm9ybWF0aW9ucyBkXCdpbXBvcnRhdGlvbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTb3VyY2UgRmlsZSd9ID0gJ0ZpY2hpZXIgc291cmNlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ltcG9ydCBzdW1tYXJ5IGZvciAlcyd9ID0gJ0ltcG9ydGVyIGxlIHLDqXN1bcOpIHBvdXIgJXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVjb3Jkcyd9ID0gJ0VucmVnaXN0cmVtZW50cyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdWNjZXNzJ30gPSAnUsOpdXNzaSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEdXBsaWNhdGUgbmFtZXMnfSA9ICdOb21zIGVuIGRvdWJsZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXN0IHByb2Nlc3NlZCBsaW5lIG51bWJlciBvZiBpbXBvcnQgZmlsZSd9ID0gJ051bcOpcm8gZGUgbGEgZGVybmnDqHJlIGxpZ25lIHRyYWl0w6llIGRhbnMgbGUgZmljaGllciBkXCdpbXBvcnRhdGlvbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPayd9ID0gJ09rJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZG1pbkltcG9ydEV4cG9ydC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gb2JqZWN0IGJhY2tlbmQgZm91bmQhJ30gPSAnQXVjdW4gb2JqZXQgImJhY2tlbmQiIG5cJ2Egw6l0w6kgdHJvdXbDqSAhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIGZvcm1hdCBiYWNrZW5kIGZvdW5kISd9ID0gJ0F1Y3VuIGZvcm1hdCAiYmFja2VuZCIgblwnYSDDqXTDqSB0cm91dsOpICEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGVtcGxhdGUgbm90IGZvdW5kISd9ID0gJ01vZMOobGUgbm9uIHRyb3V2w6kgISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYW5cJ3QgaW5zZXJ0L3VwZGF0ZSB0ZW1wbGF0ZSEnfSA9ICdJbXBvc3NpYmxlIGRcJ2luc8OpcmVyIG91IG1ldHRyZSDDoCBqb3VyIGxlIG1vZMOobGUgISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZWVkZWQgVGVtcGxhdGVJRCEnfSA9ICdMXCdJRCBkdSBtb2TDqGxlIGVzdCByZXF1aXMgISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFcnJvciBvY2N1cnJlZC4gSW1wb3J0IGltcG9zc2libGUhIFNlZSBTeXNsb2cgZm9yIGRldGFpbHMuJ30gPSAnVW5lIGVycmV1ciBlc3Qgc3VydmVudWUsIGltcG9ydGF0aW9uIGltcG9zc2libGUgISBQb3VyIHBsdXMgZGUgZMOpdGFpbHMsIGNvbnN1bHRleiBsZSBqb3VybmFsIGTigJnDqXbDqW5lbWVudHMgc3lzdMOobWUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Vycm9yIG9jY3VycmVkLiBFeHBvcnQgaW1wb3NzaWJsZSEgU2VlIFN5c2xvZyBmb3IgZGV0YWlscy4nfSA9ICdVbmUgZXJyZXVyIGVzdCBzdXJ2ZW51ZSwgZXhwb3J0YXRpb24gaW1wb3NzaWJsZSAhIFBvdXIgcGx1cyBkZSBkw6l0YWlscywgY29uc3VsdGV6IGxlIGpvdXJuYWwgZOKAmcOpdsOpbmVtZW50cyBzeXN0w6htZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGVtcGxhdGUgTGlzdCd9ID0gJ0xpc3RlIGRlcyBtb2TDqGxlcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydudW1iZXInfSA9ICdub21icmUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnbnVtYmVyIGJpZ2dlciB0aGFuIHplcm8nfSA9ICdub21icmUgcGx1cyBncmFuZCBxdWUgesOpcm8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnaW50ZWdlcid9ID0gJ2VudGllcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydpbnRlZ2VyIGJpZ2dlciB0aGFuIHplcm8nfSA9ICdlbnRpZXIgcGx1cyBncmFuZCBxdWUgesOpcm8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWxlbWVudCByZXF1aXJlZCwgcGxlYXNlIGluc2VydCBkYXRhJ30gPSAnw4lsw6ltZW50IHJlcXVpcywgdmV1aWxsZXogZW50cmVyIGRlcyBkb25uw6llcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbnZhbGlkIGRhdGEsIHBsZWFzZSBpbnNlcnQgYSB2YWxpZCAlcyd9ID0gJ0Rvbm7DqWVzIGludmFsaWRlcy4gVmV1aWxsZXogaW5zw6lyZXIgdW5lICVzIHZhbGlkZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGb3JtYXQgbm90IGZvdW5kISd9ID0gJ0Zvcm1hdCBub24gdHJvdXbDqSAhJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvU3lzdGVtL0ltcG9ydEV4cG9ydC9Gb3JtYXRCYWNrZW5kL0NTVi5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29sdW1uIFNlcGFyYXRvcid9ID0gJ1PDqXBhcmF0ZXVyIGRlIGNvbG9ubmUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGFidWxhdG9yIChUQUIpJ30gPSAnVGFidWxhdGlvbiAoVEFCKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZW1pY29sb24gKDspJ30gPSAnUG9pbnQgdmlyZ3VsZSAoOyknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29sb24gKDopJ30gPSAnRGV1eCBwb2ludHMgKDopJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RvdCAoLiknfSA9ICdQb2ludCAoLiknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29tbWEgKCwpJ30gPSAnVmlyZ3VsZSAoLCknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhcnNldCd9ID0gJ0pldSBkZSBjYXJhY3TDqHJlcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNsdWRlIENvbHVtbiBIZWFkZXJzJ30gPSAnSW5jbHVyZSBsZXMgZW4tdMOqdGVzIGRlIGNvbG9ubmVzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbHVtbid9ID0gJ0NvbG9ubmUnOwoKICAgICMgU3lzQ29uZmlnCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGb3JtYXQgYmFja2VuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgaW1wb3J0L2V4cG9ydCBtb2R1bGUuJ30gPQogICAgICAgICdFbnJlZ2lzdHJlbWVudCBkdSBtb2R1bGUgIkZvcm1hdCBiYWNrZW5kIiBwb3VyIGxlIG1vZHVsZSBkXCdpbXBvcnRhdGlvbi9leHBvcnRhdGlvbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbXBvcnQgYW5kIGV4cG9ydCBvYmplY3QgaW5mb3JtYXRpb24uJ30gPSAnSW1wb3J0ZXIgZXQgZXhwb3J0ZXIgZGVzIGluZm9ybWF0aW9ucyBkXCdvYmpldCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbXBvcnQvRXhwb3J0J30gPSAnSW1wb3J0ZXIvRXhwb3J0ZXInOwoKCiAgICBwdXNoIEB7ICRTZWxmLT57SmF2YVNjcmlwdFN0cmluZ3N9IC8vIFtdIH0sICgKICAgICk7Cgp9CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6OmdsX0ltcG9ydEV4cG9ydDsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7CgpzdWIgRGF0YSB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwoKICAgICMgVGVtcGxhdGU6IEFkbWluSW1wb3J0RXhwb3J0CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbXBvcnQvRXhwb3J0IE1hbmFnZW1lbnQnfSA9ICdYZXN0acOzbiBkYSBpbXBvcnRhY2nDs24vZXhwb3J0YWNpw7NuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyZWF0ZSBhIHRlbXBsYXRlIHRvIGltcG9ydCBhbmQgZXhwb3J0IG9iamVjdCBpbmZvcm1hdGlvbi4nfSA9ICdDcmVhciB1biBtb2RlbG8gcGFyYSBpbXBvcnRhciBlIGV4cG9ydGFyIGEgaW5mb3JtYWNpw7NuIHNvYnJlIG9zIG9ieGVjdG9zLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdGFydCBJbXBvcnQnfSA9ICdJbmljaWFyIGEgaW1wb3J0YWNpw7NuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N0YXJ0IEV4cG9ydCd9ID0gJ0luaWNpYXIgYSBleHBvcnRhY2nDs24nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3RlcCAxIG9mIDUgLSBFZGl0IGNvbW1vbiBpbmZvcm1hdGlvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOYW1lIGlzIHJlcXVpcmVkISd9ID0gJ1JlcXXDrXJlc2UgdW4gbm9tZSEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT2JqZWN0IGlzIHJlcXVpcmVkISd9ID0gJ1JlcXXDrXJlc2UgdW4gb2J4ZWN0byEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRm9ybWF0IGlzIHJlcXVpcmVkISd9ID0gJ1JlcXXDrXJlc2UgdW4gZm9ybWF0byEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3RlcCAyIG9mIDUgLSBFZGl0IG9iamVjdCBpbmZvcm1hdGlvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdGVwIDMgb2YgNSAtIEVkaXQgZm9ybWF0IGluZm9ybWF0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2lzIHJlcXVpcmVkISd9ID0gJ0UgbmVjZXNhcmlvISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdGVwIDQgb2YgNSAtIEVkaXQgbWFwcGluZyBpbmZvcm1hdGlvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBtYXAgZWxlbWVudHMgZm91bmQuJ30gPSAnRWxlbWVudG9zIGRvIG1hcGEgbm9uIGF0b3BhZG9zJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBNYXBwaW5nIEVsZW1lbnQnfSA9ICdFbmdhZGlyIGVsZW1lbnRvIGRlIG1hcGVvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N0ZXAgNSBvZiA1IC0gRWRpdCBzZWFyY2ggaW5mb3JtYXRpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVzdHJpY3QgZXhwb3J0IHBlciBzZWFyY2gnfSA9ICdSZXN0cmlueGlyIGEgZXhwb3J0YWNpw7NuIGRhIGJ1c2NhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ltcG9ydCBpbmZvcm1hdGlvbid9ID0gJ0luZm9ybWFjacOzbiBkZSBpbXBvcnRhcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTb3VyY2UgRmlsZSd9ID0gJ0ZpY2hlaXJvIG9yaXhlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ltcG9ydCBzdW1tYXJ5IGZvciAlcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZWNvcmRzJ30gPSAnUmV4aXN0cm9zJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1Y2Nlc3MnfSA9ICdDb3JyZWN0byc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEdXBsaWNhdGUgbmFtZXMnfSA9ICdOb21lcyBkdXBsaWNhZG9zJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhc3QgcHJvY2Vzc2VkIGxpbmUgbnVtYmVyIG9mIGltcG9ydCBmaWxlJ30gPSAnTsO6bWVybyBkYSBkZXJyYWRlaXJhIGxpw7FhIHByb2Nlc2FkYSBkbyBhcnF1aXZvIGltcG9ydGFyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J09rJ30gPSAnQWNlcHRhcic7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWRtaW5JbXBvcnRFeHBvcnQucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIG9iamVjdCBiYWNrZW5kIGZvdW5kISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBmb3JtYXQgYmFja2VuZCBmb3VuZCEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGVtcGxhdGUgbm90IGZvdW5kISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYW5cJ3QgaW5zZXJ0L3VwZGF0ZSB0ZW1wbGF0ZSEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmVlZGVkIFRlbXBsYXRlSUQhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Vycm9yIG9jY3VycmVkLiBJbXBvcnQgaW1wb3NzaWJsZSEgU2VlIFN5c2xvZyBmb3IgZGV0YWlscy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRXJyb3Igb2NjdXJyZWQuIEV4cG9ydCBpbXBvc3NpYmxlISBTZWUgU3lzbG9nIGZvciBkZXRhaWxzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUZW1wbGF0ZSBMaXN0J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J251bWJlcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydudW1iZXIgYmlnZ2VyIHRoYW4gemVybyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydpbnRlZ2VyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2ludGVnZXIgYmlnZ2VyIHRoYW4gemVybyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbGVtZW50IHJlcXVpcmVkLCBwbGVhc2UgaW5zZXJ0IGRhdGEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW52YWxpZCBkYXRhLCBwbGVhc2UgaW5zZXJ0IGEgdmFsaWQgJXMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRm9ybWF0IG5vdCBmb3VuZCEnfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9TeXN0ZW0vSW1wb3J0RXhwb3J0L0Zvcm1hdEJhY2tlbmQvQ1NWLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb2x1bW4gU2VwYXJhdG9yJ30gPSAnU2VwYXJhZG9yIGRlIGNvbHVtbmFzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RhYnVsYXRvciAoVEFCKSd9ID0gJ1RhYnVsYWNpw7NuIChUQUIpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlbWljb2xvbiAoOyknfSA9ICdQdW50byBlIGNvbWEgKDspJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbG9uICg6KSd9ID0gJ0RvdXMgcHVudG9zIDonOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRG90ICguKSd9ID0gJ1B1bnRvICguKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb21tYSAoLCknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhcnNldCd9ID0gJ0Nvbnh1bnRvIGRlIGNhcmFjdGVyZXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5jbHVkZSBDb2x1bW4gSGVhZGVycyd9ID0gJ0luY2x1w61yIGFzIGNhYmVjZWlyYXMgZGFzIGNvbHVtbmFzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbHVtbid9ID0gJ0NvbHVtbmEnOwoKICAgICMgU3lzQ29uZmlnCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGb3JtYXQgYmFja2VuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgaW1wb3J0L2V4cG9ydCBtb2R1bGUuJ30gPQogICAgICAgICdNw7NkdWxvIGRlIHJleGlzdHJvIGRvIGZvcm1hdG8gZGUgYmFja2VuZCBwYXJhIG8gbcOzZHVsbyBpbXBvcnRhci9leHBvcnRhcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbXBvcnQgYW5kIGV4cG9ydCBvYmplY3QgaW5mb3JtYXRpb24uJ30gPSAnSW5mb3JtYWNpw7NuIHBhcmEgaW1wb3J0YXIgZSBleHBvcnRhciBvIG9ieGV0byc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbXBvcnQvRXhwb3J0J30gPSAnSW1wb3J0YWNpw7NuL0V4cG9ydGFjacOzbic7CgoKICAgIHB1c2ggQHsgJFNlbGYtPntKYXZhU2NyaXB0U3RyaW5nc30gLy8gW10gfSwgKAogICAgKTsKCn0KCjE7Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6Omh1X0ltcG9ydEV4cG9ydDsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7CgpzdWIgRGF0YSB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwoKICAgICMgVGVtcGxhdGU6IEFkbWluSW1wb3J0RXhwb3J0CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbXBvcnQvRXhwb3J0IE1hbmFnZW1lbnQnfSA9ICdJbXBvcnTDoWzDoXMvZXhwb3J0w6Fsw6FzIGtlemVsw6lzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyZWF0ZSBhIHRlbXBsYXRlIHRvIGltcG9ydCBhbmQgZXhwb3J0IG9iamVjdCBpbmZvcm1hdGlvbi4nfSA9ICdTYWJsb24gbMOpdHJlaG96w6FzYSBvYmpla3R1bWluZm9ybcOhY2nDs2sgaW1wb3J0w6Fsw6Fzw6Fob3ogw6lzIGV4cG9ydMOhbMOhc8OhaG96Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdGFydCBJbXBvcnQnfSA9ICdJbXBvcnTDoWzDoXMgaW5kw610w6FzYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdGFydCBFeHBvcnQnfSA9ICdFeHBvcnTDoWzDoXMgaW5kw610w6FzYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdGVwIDEgb2YgNSAtIEVkaXQgY29tbW9uIGluZm9ybWF0aW9uJ30gPSAnMS4gbMOpcMOpcyBheiA1LWLFkWwgLSBrw7Z6w7ZzIGluZm9ybcOhY2nDs2sgc3plcmtlc3p0w6lzZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOYW1lIGlzIHJlcXVpcmVkISd9ID0gJ0EgbsOpdiBrw7Z0ZWxlesWRISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPYmplY3QgaXMgcmVxdWlyZWQhJ30gPSAnQXogb2JqZWt0dW0ga8O2dGVsZXrFkSEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRm9ybWF0IGlzIHJlcXVpcmVkISd9ID0gJ0EgZm9ybcOhdHVtIGvDtnRlbGV6xZEhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N0ZXAgMiBvZiA1IC0gRWRpdCBvYmplY3QgaW5mb3JtYXRpb24nfSA9ICcyLiBsw6lww6lzIGF6IDUtYsWRbCAtIG9iamVrdHVtaW5mb3Jtw6FjacOzayBzemVya2VzenTDqXNlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N0ZXAgMyBvZiA1IC0gRWRpdCBmb3JtYXQgaW5mb3JtYXRpb24nfSA9ICczLiBsw6lww6lzIGF6IDUtYsWRbCAtIGZvcm3DoXR1bWluZm9ybcOhY2nDs2sgc3plcmtlc3p0w6lzZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydpcyByZXF1aXJlZCEnfSA9ICdrw7Z0ZWxlesWRISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdGVwIDQgb2YgNSAtIEVkaXQgbWFwcGluZyBpbmZvcm1hdGlvbid9ID0gJzQuIGzDqXDDqXMgYXogNS1ixZFsIC0gbGVrw6lwZXrDqXNpIGluZm9ybcOhY2nDs2sgc3plcmtlc3p0w6lzZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBtYXAgZWxlbWVudHMgZm91bmQuJ30gPSAnTmVtIHRhbMOhbGhhdMOzayB0w6lya8OpcGVsZW1lay4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIE1hcHBpbmcgRWxlbWVudCd9ID0gJ0xla8OpcGV6w6lzaSBlbGVtZWsgaG96esOhYWTDoXNhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N0ZXAgNSBvZiA1IC0gRWRpdCBzZWFyY2ggaW5mb3JtYXRpb24nfSA9ICc1LiBsw6lww6lzIGF6IDUtYsWRbCAtIGtlcmVzw6lzaSBpbmZvcm3DoWNpw7NrIHN6ZXJrZXN6dMOpc2UnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVzdHJpY3QgZXhwb3J0IHBlciBzZWFyY2gnfSA9ICdFeHBvcnTDoWzDoXMga29ybMOhdG96w6FzYSBrZXJlc8Opc2Vua8OpbnQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW1wb3J0IGluZm9ybWF0aW9uJ30gPSAnSW1wb3J0w6Fsw6FzaSBpbmZvcm3DoWNpw7NrJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NvdXJjZSBGaWxlJ30gPSAnRm9ycsOhc2bDoWpsJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ltcG9ydCBzdW1tYXJ5IGZvciAlcyd9ID0gJyVzIGltcG9ydMOhbMOhc2kgw7Zzc3plZ3rDqXNlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlY29yZHMnfSA9ICdSZWtvcmRvayc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdWNjZXNzJ30gPSAnU2lrZXJlcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEdXBsaWNhdGUgbmFtZXMnfSA9ICdOZXZlayBrZXR0xZF6w6lzZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXN0IHByb2Nlc3NlZCBsaW5lIG51bWJlciBvZiBpbXBvcnQgZmlsZSd9ID0gJ0F6IGltcG9ydGbDoWpsIHV0b2xzw7MgZmVsZG9sZ296b3R0IHNvcnN6w6FtYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPayd9ID0gJ09LJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZG1pbkltcG9ydEV4cG9ydC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gb2JqZWN0IGJhY2tlbmQgZm91bmQhJ30gPSAnTmVtIHRhbMOhbGhhdMOzIG9iamVrdHVtLWjDoXR0w6lycHJvZ3JhbSEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gZm9ybWF0IGJhY2tlbmQgZm91bmQhJ30gPSAnTmVtIHRhbMOhbGhhdMOzIGZvcm3DoXR1bS1ow6F0dMOpcnByb2dyYW0hJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RlbXBsYXRlIG5vdCBmb3VuZCEnfSA9ICdTYWJsb24gbmVtIHRhbMOhbGhhdMOzISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYW5cJ3QgaW5zZXJ0L3VwZGF0ZSB0ZW1wbGF0ZSEnfSA9ICdOZW0gbGVoZXQgYmVzesO6cm5pIHZhZ3kgZnJpc3PDrXRlbmkgYSBzYWJsb250ISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZWVkZWQgVGVtcGxhdGVJRCEnfSA9ICdTYWJsb24tYXpvbm9zw610w7Mgc3rDvGtzw6lnZXMhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Vycm9yIG9jY3VycmVkLiBJbXBvcnQgaW1wb3NzaWJsZSEgU2VlIFN5c2xvZyBmb3IgZGV0YWlscy4nfSA9ICdIaWJhIHTDtnJ0w6ludC4gQXogaW1wb3J0w6Fsw6FzIGxlaGV0ZXRsZW4hIE7DqXp6ZSBtZWcgYSByZW5kc3plcm5hcGzDs3QgYSByw6lzemxldGVrw6lydC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRXJyb3Igb2NjdXJyZWQuIEV4cG9ydCBpbXBvc3NpYmxlISBTZWUgU3lzbG9nIGZvciBkZXRhaWxzLid9ID0gJ0hpYmEgdMO2cnTDqW50LiBBeiBleHBvcnTDoWzDoXMgbGVoZXRldGxlbiEgTsOpenplIG1lZyBhIHJlbmRzemVybmFwbMOzdCBhIHLDqXN6bGV0ZWvDqXJ0Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUZW1wbGF0ZSBMaXN0J30gPSAnU2FibG9ubGlzdGEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnbnVtYmVyJ30gPSAnc3rDoW0nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnbnVtYmVyIGJpZ2dlciB0aGFuIHplcm8nfSA9ICdudWxsw6Fuw6FsIG5hZ3lvYmIgc3rDoW0nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnaW50ZWdlcid9ID0gJ2Vnw6lzeic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydpbnRlZ2VyIGJpZ2dlciB0aGFuIHplcm8nfSA9ICdudWxsw6Fuw6FsIG5hZ3lvYmIgZWfDqXN6JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VsZW1lbnQgcmVxdWlyZWQsIHBsZWFzZSBpbnNlcnQgZGF0YSd9ID0gJ0VsZW0gc3rDvGtzw6lnZXMsIHN6w7pyam9uIGJlIGFkYXRva2F0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ludmFsaWQgZGF0YSwgcGxlYXNlIGluc2VydCBhIHZhbGlkICVzJ30gPSAnw4lydsOpbnl0ZWxlbiBhZGF0b2ssIGVneSDDqXJ2w6lueWVzICVzIGJlc3rDunLDoXNhIHN6w7xrc8OpZ2VzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zvcm1hdCBub3QgZm91bmQhJ30gPSAnRm9ybcOhdHVtIG5lbSB0YWzDoWxoYXTDsyEnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9TeXN0ZW0vSW1wb3J0RXhwb3J0L0Zvcm1hdEJhY2tlbmQvQ1NWLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb2x1bW4gU2VwYXJhdG9yJ30gPSAnT3N6bG9wZWx2w6FsYXN6dMOzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RhYnVsYXRvciAoVEFCKSd9ID0gJ1RhYnVsw6F0b3IgKFRBQiknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VtaWNvbG9uICg7KSd9ID0gJ1BvbnRvc3Zlc3N6xZEgKDspJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbG9uICg6KSd9ID0gJ0tldHTFkXNwb250ICg6KSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEb3QgKC4pJ30gPSAnUG9udCAoLiknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29tbWEgKCwpJ30gPSAnVmVzc3rFkSAoLCknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhcnNldCd9ID0gJ0thcmFrdGVya8Opc3psZXQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5jbHVkZSBDb2x1bW4gSGVhZGVycyd9ID0gJ09zemxvcGZlamzDqWNlayBmZWx2w6l0ZWxlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbHVtbid9ID0gJ09zemxvcCc7CgogICAgIyBTeXNDb25maWcKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zvcm1hdCBiYWNrZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBpbXBvcnQvZXhwb3J0IG1vZHVsZS4nfSA9CiAgICAgICAgJ0Zvcm3DoXR1bSBow6F0dMOpcnByb2dyYW0gbW9kdWwgcmVnaXN6dHLDoWNpw7MgYXogaW1wb3J0w6Fsw6FzL2V4cG9ydMOhbMOhcyBtb2R1bGhvei4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW1wb3J0IGFuZCBleHBvcnQgb2JqZWN0IGluZm9ybWF0aW9uLid9ID0gJ09iamVrdHVtaW5mb3Jtw6FjacOzayBpbXBvcnTDoWzDoXNhIMOpcyBleHBvcnTDoWzDoXNhLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbXBvcnQvRXhwb3J0J30gPSAnSW1wb3J0w6Fsw6FzL2V4cG9ydMOhbMOhcyc7CgoKICAgIHB1c2ggQHsgJFNlbGYtPntKYXZhU2NyaXB0U3RyaW5nc30gLy8gW10gfSwgKAogICAgKTsKCn0KCjE7Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6OmlkX0ltcG9ydEV4cG9ydDsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7CgpzdWIgRGF0YSB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwoKICAgICMgVGVtcGxhdGU6IEFkbWluSW1wb3J0RXhwb3J0CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbXBvcnQvRXhwb3J0IE1hbmFnZW1lbnQnfSA9ICdNYW5hamFtZW4gSW1wb3IvRWtzcG9yJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyZWF0ZSBhIHRlbXBsYXRlIHRvIGltcG9ydCBhbmQgZXhwb3J0IG9iamVjdCBpbmZvcm1hdGlvbi4nfSA9ICdCdWF0IHNlYnVhaCB0ZW1wbGF0ZSB1bnR1ayBtZW5naW1wb3IgZGFuIGVrc3BvciBvYnllayBpbmZvcm1hc2kuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N0YXJ0IEltcG9ydCd9ID0gJ011bGFpIEltcG9yJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N0YXJ0IEV4cG9ydCd9ID0gJ011bGFpIEVrc3Bvcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdGVwIDEgb2YgNSAtIEVkaXQgY29tbW9uIGluZm9ybWF0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05hbWUgaXMgcmVxdWlyZWQhJ30gPSAnTmFtYSBkaWJ1dHVoa2FuISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPYmplY3QgaXMgcmVxdWlyZWQhJ30gPSAnT2J5ZWsgZGlidXR1aGthbiEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRm9ybWF0IGlzIHJlcXVpcmVkISd9ID0gJ0Zvcm1hdCBkaWJ1dHVoa2FuISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdGVwIDIgb2YgNSAtIEVkaXQgb2JqZWN0IGluZm9ybWF0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N0ZXAgMyBvZiA1IC0gRWRpdCBmb3JtYXQgaW5mb3JtYXRpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnaXMgcmVxdWlyZWQhJ30gPSAnZGlidXR1aGthbiEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3RlcCA0IG9mIDUgLSBFZGl0IG1hcHBpbmcgaW5mb3JtYXRpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gbWFwIGVsZW1lbnRzIGZvdW5kLid9ID0gJ1RpZGFrIGRpdGVtdWthbiBlbGVtZW4gcGV0YS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIE1hcHBpbmcgRWxlbWVudCd9ID0gJ1RhbWJhaCBFbGVtZW4gUGVtZXRhYW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3RlcCA1IG9mIDUgLSBFZGl0IHNlYXJjaCBpbmZvcm1hdGlvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXN0cmljdCBleHBvcnQgcGVyIHNlYXJjaCd9ID0gJ0JhdGFzIGVrc3BvciBwZXIgcGVuY2FyaWFuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ltcG9ydCBpbmZvcm1hdGlvbid9ID0gJ0luZm9ybWFzaSBpbXBvciAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU291cmNlIEZpbGUnfSA9ICdCZXJrYXMgU3VtYmVyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ltcG9ydCBzdW1tYXJ5IGZvciAlcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZWNvcmRzJ30gPSAnRGF0YSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdWNjZXNzJ30gPSAnQmVyaGFzaWwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRHVwbGljYXRlIG5hbWVzJ30gPSAnTmFtYSBkdXBsaWthdCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXN0IHByb2Nlc3NlZCBsaW5lIG51bWJlciBvZiBpbXBvcnQgZmlsZSd9ID0gJ05vbW9yIGJhcmlzIHRlcmFraGlyIGJlcmthcyBpbXBvciB5YW5nIGRpcHJvc2VzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J09rJ30gPSAnT2snOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FkbWluSW1wb3J0RXhwb3J0LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBvYmplY3QgYmFja2VuZCBmb3VuZCEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gZm9ybWF0IGJhY2tlbmQgZm91bmQhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RlbXBsYXRlIG5vdCBmb3VuZCEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2FuXCd0IGluc2VydC91cGRhdGUgdGVtcGxhdGUhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05lZWRlZCBUZW1wbGF0ZUlEISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFcnJvciBvY2N1cnJlZC4gSW1wb3J0IGltcG9zc2libGUhIFNlZSBTeXNsb2cgZm9yIGRldGFpbHMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Vycm9yIG9jY3VycmVkLiBFeHBvcnQgaW1wb3NzaWJsZSEgU2VlIFN5c2xvZyBmb3IgZGV0YWlscy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGVtcGxhdGUgTGlzdCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydudW1iZXInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnbnVtYmVyIGJpZ2dlciB0aGFuIHplcm8nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnaW50ZWdlcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydpbnRlZ2VyIGJpZ2dlciB0aGFuIHplcm8nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWxlbWVudCByZXF1aXJlZCwgcGxlYXNlIGluc2VydCBkYXRhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ludmFsaWQgZGF0YSwgcGxlYXNlIGluc2VydCBhIHZhbGlkICVzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zvcm1hdCBub3QgZm91bmQhJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvU3lzdGVtL0ltcG9ydEV4cG9ydC9Gb3JtYXRCYWNrZW5kL0NTVi5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29sdW1uIFNlcGFyYXRvcid9ID0gJ1BlbWlzYWggS29sb20nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGFidWxhdG9yIChUQUIpJ30gPSAnVGFiIChUQUIpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlbWljb2xvbiAoOyknfSA9ICdUaXRpa2tvbWEgKDspJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbG9uICg6KSd9ID0gJ1RpdGlrZHVhICg6KSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEb3QgKC4pJ30gPSAnVGl0aWsgKC4pJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbW1hICgsKSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFyc2V0J30gPSAnS2FyYWt0ZXInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5jbHVkZSBDb2x1bW4gSGVhZGVycyd9ID0gJ1NlcnRha2FuIEtlcGFsYSBLb2xvbSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb2x1bW4nfSA9ICdLb2xvbSc7CgogICAgIyBTeXNDb25maWcKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zvcm1hdCBiYWNrZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBpbXBvcnQvZXhwb3J0IG1vZHVsZS4nfSA9CiAgICAgICAgJ0Zvcm1hdCBtb2R1bCBwZW5kYWZ0YXJhbiBiYWNrZW5kIHVudHVrIG1vZHVsIGltcG9yL2Vrc3Bvci4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW1wb3J0IGFuZCBleHBvcnQgb2JqZWN0IGluZm9ybWF0aW9uLid9ID0gJ0luZm9ybWFzaSBvYnllayBpbXBvciBkYW4gZWtzcG9yLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbXBvcnQvRXhwb3J0J30gPSAnSW1wb3IvRWtzcG9yJzsKCgogICAgcHVzaCBAeyAkU2VsZi0+e0phdmFTY3JpcHRTdHJpbmdzfSAvLyBbXSB9LCAoCiAgICApOwoKfQoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6Oml0X0ltcG9ydEV4cG9ydDsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7CgpzdWIgRGF0YSB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwoKICAgICMgVGVtcGxhdGU6IEFkbWluSW1wb3J0RXhwb3J0CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbXBvcnQvRXhwb3J0IE1hbmFnZW1lbnQnfSA9ICdHZXN0aW9uZSBJbXBvcnRhemlvbmUvRXNwb3J0YXppb25lJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyZWF0ZSBhIHRlbXBsYXRlIHRvIGltcG9ydCBhbmQgZXhwb3J0IG9iamVjdCBpbmZvcm1hdGlvbi4nfSA9ICdDcmVhIHVuIHRlbXBsYXRlIHBlciBpbXBvcnRhcmUgZWQgZXNwb3J0YXJlIGxlIGluZm9ybWF6aW9uaSBkZWdsaSBvZ2dldHRpLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdGFydCBJbXBvcnQnfSA9ICdJbml6aWEgSW1wb3J0YXppb25lJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N0YXJ0IEV4cG9ydCd9ID0gJ0luaXppYSBFc3BvcnRhemlvbmUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3RlcCAxIG9mIDUgLSBFZGl0IGNvbW1vbiBpbmZvcm1hdGlvbid9ID0gJ1N0ZXAgMSBkaSA1IC0gTW9kaWZpY2EgaW5mb3JtYXppb25pIGNvbXVuaSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOYW1lIGlzIHJlcXVpcmVkISd9ID0gJ0lsIG5vbWUgw6ggb2JibGlnYXRvcmlvISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPYmplY3QgaXMgcmVxdWlyZWQhJ30gPSAnTFwnb2dnZXR0byDDqCBvYmJsaWdhdG9yaW8hJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zvcm1hdCBpcyByZXF1aXJlZCEnfSA9ICdJbCBmb3JtYXRvIMOoIG9iYmxpZ2F0b3JpbyEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3RlcCAyIG9mIDUgLSBFZGl0IG9iamVjdCBpbmZvcm1hdGlvbid9ID0gJ1N0ZXAgMiBkaSA1IC0gTW9kaWZpY2EgaW5mb3JtYXppb25pIG9nZ2V0dG8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3RlcCAzIG9mIDUgLSBFZGl0IGZvcm1hdCBpbmZvcm1hdGlvbid9ID0gJ1N0ZXAgMyBkaSA1IC0gTW9kaWZpY2EgaW5mb3JtYXppb25pIGZvcm1hdG8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnaXMgcmVxdWlyZWQhJ30gPSAnw6ggb2JibGlnYXRvcmlvISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdGVwIDQgb2YgNSAtIEVkaXQgbWFwcGluZyBpbmZvcm1hdGlvbid9ID0gJ1N0ZXAgNCBkaSA1IC0gTW9kaWZpY2EgaW5mb3JtYXppb25pIG1hcHBhdHVyYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBtYXAgZWxlbWVudHMgZm91bmQuJ30gPSAnTmVzc3VuIGVsZW1lbnRvIG1hcHBhIHRyb3ZhdG8uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBNYXBwaW5nIEVsZW1lbnQnfSA9ICdBZ2dpdW5naSB1biBlbGVtZW50byBkaSBtYXBwYXR1cmEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N0ZXAgNSBvZiA1IC0gRWRpdCBzZWFyY2ggaW5mb3JtYXRpb24nfSA9ICdTdGVwIDUgZGkgNSAtIE1vZGlmaWNhIGluZm9ybWF6aW9uaSBkaSByaWNlcmNhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Jlc3RyaWN0IGV4cG9ydCBwZXIgc2VhcmNoJ30gPSAnUmVzdHJpbmdlcmUgZXNwb3J0YXppb25lIHBlciByaWNlcmNhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ltcG9ydCBpbmZvcm1hdGlvbid9ID0gJ0ltcG9ydGFyZSBpbmZvcm1hemlvbmUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU291cmNlIEZpbGUnfSA9ICdBcmNoaXZpbyBvcmlnaW5lJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ltcG9ydCBzdW1tYXJ5IGZvciAlcyd9ID0gJ0ltcG9ydGEgcmllcGlsb2dvIHBlciAlcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZWNvcmRzJ30gPSAnVm9jaSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdWNjZXNzJ30gPSAnU3VjY2Vzc28nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRHVwbGljYXRlIG5hbWVzJ30gPSAnRHVwbGljYSBpIG5vbWknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGFzdCBwcm9jZXNzZWQgbGluZSBudW1iZXIgb2YgaW1wb3J0IGZpbGUnfSA9ICdOdW1lcm8gZGVsbFwndWx0aW1hIHJpZ2EgcHJvY2Vzc2F0YSBkZWwgZmlsZSBkYSBpbXBvcnRhcmUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT2snfSA9ICdPayc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWRtaW5JbXBvcnRFeHBvcnQucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIG9iamVjdCBiYWNrZW5kIGZvdW5kISd9ID0gJ05lc3N1biBvZ2dldHRvIGRpIGJhY2tlbmQgdHJvdmF0byEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gZm9ybWF0IGJhY2tlbmQgZm91bmQhJ30gPSAnTmVzc3VuIGZvcm1hdG8gZGkgYmFja2VuZCB0cm92YXRvISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUZW1wbGF0ZSBub3QgZm91bmQhJ30gPSAnTW9kZWxsbyBub24gdHJvdmF0byEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2FuXCd0IGluc2VydC91cGRhdGUgdGVtcGxhdGUhJ30gPSAnTm9uIMOoIHBvc3NpYmlsZSBpbnNlcmlyZS9tb2RpZmljYXJlIHRlbXBsYXRlISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZWVkZWQgVGVtcGxhdGVJRCEnfSA9ICdOZWNlc3NhcmlvIFRlbXBsYXRlSUQhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Vycm9yIG9jY3VycmVkLiBJbXBvcnQgaW1wb3NzaWJsZSEgU2VlIFN5c2xvZyBmb3IgZGV0YWlscy4nfSA9ICdFcnJvcmUgcmlzY29udHJhdG8uIEltcG9zc2liaWxlIGltcG9ydGFyZSEgTGVnZ2kgaSBTeXNsb2cgcGVyIHVsdGVyaW9yaSBkZXR0YWdsaS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRXJyb3Igb2NjdXJyZWQuIEV4cG9ydCBpbXBvc3NpYmxlISBTZWUgU3lzbG9nIGZvciBkZXRhaWxzLid9ID0gJ0Vycm9yZSByaXNjb250cmF0by4gSW1wb3NzaWJpbGUgZXNwb3J0YXJlISBMZWdnaSBpIFN5c2xvZyBwZXIgdWx0ZXJpb3JpIGRldHRhZ2xpLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUZW1wbGF0ZSBMaXN0J30gPSAnTGlzdGEgTW9kZWxsaSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydudW1iZXInfSA9ICdudW1lcm8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnbnVtYmVyIGJpZ2dlciB0aGFuIHplcm8nfSA9ICdudW1lcm8gcGnDuSBncmFuZGUgZGkgemVybyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydpbnRlZ2VyJ30gPSAnaW50ZXJvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2ludGVnZXIgYmlnZ2VyIHRoYW4gemVybyd9ID0gJ2ludGVybyBwacO5IGdyYW5kZSBkaSB6ZXJvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VsZW1lbnQgcmVxdWlyZWQsIHBsZWFzZSBpbnNlcnQgZGF0YSd9ID0gJ0VsZW1lbnRvIHJpY2hpZXN0bywgaW5zZXJpc2NpIGRhdGkgZ2VudGlsbWVudGUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW52YWxpZCBkYXRhLCBwbGVhc2UgaW5zZXJ0IGEgdmFsaWQgJXMnfSA9ICdEYXRpIG5vbiB2YWxpZGksIGluc2VyaXNjaSB1biAlcyB2YWxpZG8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRm9ybWF0IG5vdCBmb3VuZCEnfSA9ICdGb3JtYXRvIG5vbiB0cm92YXRvISc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL1N5c3RlbS9JbXBvcnRFeHBvcnQvRm9ybWF0QmFja2VuZC9DU1YucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbHVtbiBTZXBhcmF0b3InfSA9ICdTZXBhcmF0b3JlIGRpIGNvbG9ubmEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGFidWxhdG9yIChUQUIpJ30gPSAnVGFidWxhdG9yZSAoVEFCKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZW1pY29sb24gKDspJ30gPSAnUHVudG8gZSB2aXJnb2xhICg7KSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb2xvbiAoOiknfSA9ICdEdWUgcHVudGkgKDopJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RvdCAoLiknfSA9ICdQdW50byAoLiknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29tbWEgKCwpJ30gPSAnVmlyZ29sYSAoLCknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhcnNldCd9ID0gJ0NoYXJzZXQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5jbHVkZSBDb2x1bW4gSGVhZGVycyd9ID0gJ0luY2x1ZGkgbGUgQ29sb25uZSBkaSBJbnRlc3RhemlvbmUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29sdW1uJ30gPSAnQ29sb25uYSc7CgogICAgIyBTeXNDb25maWcKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zvcm1hdCBiYWNrZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBpbXBvcnQvZXhwb3J0IG1vZHVsZS4nfSA9CiAgICAgICAgJ1JlZ2lzdHJhemlvbmUgZGVsIG1vZHVsbyBkaSBiYWNrZW5kIGRlbCBmb3JtYXRvIHBlciBpbCBtb2R1bG8gZGkgaW1wb3J0YXppb25lL2VzcG9ydGF6aW9uZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW1wb3J0IGFuZCBleHBvcnQgb2JqZWN0IGluZm9ybWF0aW9uLid9ID0gJ0ltcG9ydGEgZWQgZXNwb3J0YSBsZSBpbmZvcm1hemlvbmkgc3VsbFwnb2dnZXR0by4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW1wb3J0L0V4cG9ydCd9ID0gJ0ltcG9ydGFyZS9Fc3BvcnRhcmUnOwoKCiAgICBwdXNoIEB7ICRTZWxmLT57SmF2YVNjcmlwdFN0cmluZ3N9IC8vIFtdIH0sICgKICAgICk7Cgp9CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6OmphX0ltcG9ydEV4cG9ydDsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7CgpzdWIgRGF0YSB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwoKICAgICMgVGVtcGxhdGU6IEFkbWluSW1wb3J0RXhwb3J0CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbXBvcnQvRXhwb3J0IE1hbmFnZW1lbnQnfSA9ICfjgqTjg7Pjg53jg7zjg4gv44Ko44Kv44K544Od44O844OI44Gu566h55CGJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyZWF0ZSBhIHRlbXBsYXRlIHRvIGltcG9ydCBhbmQgZXhwb3J0IG9iamVjdCBpbmZvcm1hdGlvbi4nfSA9ICfjgqrjg5bjgrjjgqfjgq/jg4jjga7jgqTjg7Pjg53jg7zjg4jjg7vjgqjjgq/jgrnjg53jg7zjg4jnlKjjga7jg4bjg7Pjg5fjg6zjg7zjg4jjgpLkvZzmiJDjgZnjgosnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3RhcnQgSW1wb3J0J30gPSAn44Kk44Oz44Od44O844OI6ZaL5aeLJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N0YXJ0IEV4cG9ydCd9ID0gJ+OCqOOCr+OCueODneODvOODiOmWi+Wniyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdGVwIDEgb2YgNSAtIEVkaXQgY29tbW9uIGluZm9ybWF0aW9uJ30gPSAnU3RlcCAxIG9mIDUgLSDln7rmnKzmg4XloLHjga7oqK3lrponOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmFtZSBpcyByZXF1aXJlZCEnfSA9ICflkI3np7Djga/lv4XpoIjjgafjgZkhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J09iamVjdCBpcyByZXF1aXJlZCEnfSA9ICfjgqrjg5bjgrjjgqfjgq/jg4jjga/lv4XpoIjjgafjgZkhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zvcm1hdCBpcyByZXF1aXJlZCEnfSA9ICfjg5Xjgqnjg7zjg57jg4Pjg4jjga/lv4XpoIjjgafjgZkhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N0ZXAgMiBvZiA1IC0gRWRpdCBvYmplY3QgaW5mb3JtYXRpb24nfSA9ICdTdGVwIDIgb2YgNSAtIOOCquODluOCuOOCp+OCr+ODiOaDheWgseOBruioreWumic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdGVwIDMgb2YgNSAtIEVkaXQgZm9ybWF0IGluZm9ybWF0aW9uJ30gPSAnU3RlcCAzIG9mIDUgLSDjg5Xjgqnjg7zjg57jg4Pjg4jmg4XloLHjga7oqK3lrponOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnaXMgcmVxdWlyZWQhJ30gPSAn5b+F6aCI44Gn44GZJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N0ZXAgNCBvZiA1IC0gRWRpdCBtYXBwaW5nIGluZm9ybWF0aW9uJ30gPSAnU3RlcCA0IG9mIDUgLSDjg57jg4Pjg5Tjg7PjgrDmg4XloLHjga7oqK3lrponOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gbWFwIGVsZW1lbnRzIGZvdW5kLid9ID0gJ+ODnuODg+ODlOODs+OCsOimgee0oOOBjOimi+OBpOOBi+OCiuOBvuOBm+OCk+OBp+OBl+OBnyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgTWFwcGluZyBFbGVtZW50J30gPSAn44Oe44OD44OU44Oz44Kw6KaB57Sg44Gu6L+95YqgJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N0ZXAgNSBvZiA1IC0gRWRpdCBzZWFyY2ggaW5mb3JtYXRpb24nfSA9ICdTdGVwIDUgb2YgNSAtIOaknOe0ouaDheWgseOBruioreWumic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXN0cmljdCBleHBvcnQgcGVyIHNlYXJjaCd9ID0gJ+aknOe0ouOBguOBn+OCiuOBruWHuuWKm+OCkuWItumZkCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbXBvcnQgaW5mb3JtYXRpb24nfSA9ICfmg4XloLHjgpLjgqTjg7Pjg53jg7zjg4gnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU291cmNlIEZpbGUnfSA9ICfjgr3jg7zjgrnjg5XjgqHjgqTjg6snOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW1wb3J0IHN1bW1hcnkgZm9yICVzJ30gPSAnJXPjga7jgqTjg7Pjg53jg7zjg4jjg7vjgrXjg57jg6rjg7wnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVjb3Jkcyd9ID0gJ+ODrOOCs+ODvOODiSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdWNjZXNzJ30gPSAn5oiQ5YqfJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0R1cGxpY2F0ZSBuYW1lcyd9ID0gJ+WQjeWJjeOBjOmHjeikh+OBl+OBpuOBhOOBvuOBmSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXN0IHByb2Nlc3NlZCBsaW5lIG51bWJlciBvZiBpbXBvcnQgZmlsZSd9ID0gJ+iqreOBv+i+vOOBv+a4iOOBv+ODleOCoeOCpOODq+OBruacgOe1guWun+ihjOihjOaVsCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPayd9ID0gJ09rJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZG1pbkltcG9ydEV4cG9ydC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gb2JqZWN0IGJhY2tlbmQgZm91bmQhJ30gPSAn5oyH5a6a44GV44KM44Gf44Kq44OW44K444Kn44Kv44OI44Gu44OQ44OD44Kv44Ko44Oz44OJ44GM6KaL44Gk44GL44KK44G+44Gb44KT77yBJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIGZvcm1hdCBiYWNrZW5kIGZvdW5kISd9ID0gJ+aMh+WumuOBleOCjOOBn+ODleOCqeODvOODnuODg+ODiOOBruODkOODg+OCr+OCqOODs+ODieOBjOimi+OBpOOBi+OCiuOBvuOBm+OCk++8gSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUZW1wbGF0ZSBub3QgZm91bmQhJ30gPSAn44OG44Oz44OX44Os44O844OI44GM6KaL44Gk44GL44KK44G+44Gb44KT77yBJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhblwndCBpbnNlcnQvdXBkYXRlIHRlbXBsYXRlISd9ID0gJ+ODhuODs+ODl+ODrOODvOODiOOBruaMv+WFpeODu+abtOaWsOOBjOOBp+OBjeOBvuOBm+OCk++8gSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZWVkZWQgVGVtcGxhdGVJRCEnfSA9ICfjg4bjg7Pjg5fjg6zjg7zjg4hJROOBruWFpeWKm+OBjOW/heimgeOBp+OBme+8gSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFcnJvciBvY2N1cnJlZC4gSW1wb3J0IGltcG9zc2libGUhIFNlZSBTeXNsb2cgZm9yIGRldGFpbHMuJ30gPSAn44Kk44Oz44Od44O844OI44GM5Ye65p2l44G+44Gb44KT77yI44Ko44Op44O844GM55m655Sf44GX44G+44GX44Gf44CC6Kmz57Sw44Gv44K344K544OG44Og44Ot44Kw44KS44GU56K66KqN44GP44Gg44GV44GE77yJ77yBJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Vycm9yIG9jY3VycmVkLiBFeHBvcnQgaW1wb3NzaWJsZSEgU2VlIFN5c2xvZyBmb3IgZGV0YWlscy4nfSA9ICfjgqjjgq/jgrnjg53jg7zjg4jjgYzlh7rmnaXjgb7jgZvjgpPvvIjjgqjjg6njg7zjgYznmbrnlJ/jgZfjgb7jgZfjgZ/jgILoqbPntLDjga/jgrfjgrnjg4bjg6Djg63jgrDjgpLjgZTnorroqo3jgY/jgaDjgZXjgYTvvInvvIEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGVtcGxhdGUgTGlzdCd9ID0gJ+ODhuODs+ODl+ODrOODvOODiOODu+ODquOCueODiCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydudW1iZXInfSA9ICfmlbDlgKQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnbnVtYmVyIGJpZ2dlciB0aGFuIHplcm8nfSA9ICcw5Lul5LiK44Gu5pWw5YCkJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2ludGVnZXInfSA9ICfmlbTmlbDlgKQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnaW50ZWdlciBiaWdnZXIgdGhhbiB6ZXJvJ30gPSAnMOS7peS4iuOBruaVtOaVsOWApCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbGVtZW50IHJlcXVpcmVkLCBwbGVhc2UgaW5zZXJ0IGRhdGEnfSA9ICfjg4fjg7zjgr/jgpLlhaXlipvjgZnjgovlv4XopoHjgYzjgYLjgorjgb7jgZnjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW52YWxpZCBkYXRhLCBwbGVhc2UgaW5zZXJ0IGEgdmFsaWQgJXMnfSA9ICfnhKHlirnjgarjg4fjg7zjgr/jgafjgZnjgILmnInlirnjgaogJXMg44KS5YWl5Yqb44GX44Gm44GP44Gg44GV44GE44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zvcm1hdCBub3QgZm91bmQhJ30gPSAn5oyH5a6a44GV44KM44Gf44OV44Kp44O844Oe44OD44OI44GM6KaL44Gk44GL44KK44G+44Gb44KT77yBJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvU3lzdGVtL0ltcG9ydEV4cG9ydC9Gb3JtYXRCYWNrZW5kL0NTVi5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29sdW1uIFNlcGFyYXRvcid9ID0gJ+ahgeOBruOCu+ODkeODrOODvOOCvyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUYWJ1bGF0b3IgKFRBQiknfSA9ICfjgr/jg5YgKFRBQiknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VtaWNvbG9uICg7KSd9ID0gJ+OCu+ODn+OCs+ODreODsyAoOyknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29sb24gKDopJ30gPSAn44Kz44Ot44OzICg6KSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEb3QgKC4pJ30gPSAn44OJ44OD44OIKC4pJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbW1hICgsKSd9ID0gJ+OCq+ODs+ODniAoLCknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhcnNldCd9ID0gJ+OCreODo+ODqeOCr+OCv+OCu+ODg+ODiCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNsdWRlIENvbHVtbiBIZWFkZXJzJ30gPSAn44OY44OD44OA5oOF5aCx44KS5ZCr44KAJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbHVtbid9ID0gJ+ahgSc7CgogICAgIyBTeXNDb25maWcKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zvcm1hdCBiYWNrZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBpbXBvcnQvZXhwb3J0IG1vZHVsZS4nfSA9CiAgICAgICAgJ2ltcG9ydC9leHBvcnTjg6Ljgrjjg6Xjg7zjg6vjga7jg5Djg4Pjgq/jgqjjg7Pjg4njg6Ljgrjjg6Xjg7zjg6vjgpLnmbvpjLInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW1wb3J0IGFuZCBleHBvcnQgb2JqZWN0IGluZm9ybWF0aW9uLid9ID0gJ+OCquODluOCuOOCp+OCr+ODiOaDheWgseOBruOCpOODs+ODneODvOODiOODu+OCqOOCr+OCueODneODvOODiCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbXBvcnQvRXhwb3J0J30gPSAn44Kk44Oz44Od44O844OIL+OCqOOCr+OCueODneODvOODiCc7CgoKICAgIHB1c2ggQHsgJFNlbGYtPntKYXZhU2NyaXB0U3RyaW5nc30gLy8gW10gfSwgKAogICAgKTsKCn0KCjE7Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6Om1rX0ltcG9ydEV4cG9ydDsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7CgpzdWIgRGF0YSB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwoKICAgICMgVGVtcGxhdGU6IEFBQUltcG9ydEV4cG9ydAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIG1hcHBpbmcgdGVtcGxhdGUnfSA9ICdBw7FhZGlyIHBsYW50aWxsYSBkZSBtYXBlbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFyc2V0J30gPSAnSnVlZ28gZGUgY2FyYWN0ZXJlcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb2xvbiAoOiknfSA9ICdEb3MgcHVudG9zICg6KSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb2x1bW4nfSA9ICdDb2x1bW5hJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbHVtbiBTZXBhcmF0b3InfSA9ICdTZXBhcmFkb3IgZGUgQ29sdW1uYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEb3QgKC4pJ30gPSAnUHVudG8gKC4pJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlbWljb2xvbiAoOyknfSA9ICdQdW50byB5IENvbWEgKDspJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RhYnVsYXRvciAoVEFCKSd9ID0gJ1RhYnVsYWRvciAoVEFCKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNsdWRlIENvbHVtbiBIZWFkZXJzJ30gPSAnSW5jbHVpciBDYWJlY2VyYSBkZSBsYSBDb2x1bW5hJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ltcG9ydCBzdW1tYXJ5IGZvcid9ID0gJ0ltcG9ydGFyIHJlc3VtZW4gcGFyYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbXBvcnRlZCByZWNvcmRzJ30gPSAnUmVnaXN0cm9zIGltcG9ydGFkb3MnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRXhwb3J0ZWQgcmVjb3Jkcyd9ID0gJ1JlZ2lzdHJvcyBleHBvcnRhZG9zJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlY29yZHMnfSA9ICdSZWdpc3Ryb3MnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2tpcHBlZCd9ID0gJ1NhbHRhZG8nOwoKICAgICMgVGVtcGxhdGU6IEFkbWluSW1wb3J0RXhwb3J0CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbXBvcnQvRXhwb3J0IE1hbmFnZW1lbnQnfSA9ICdHZXN0acOzbiBkZSBJbXBvcnRhY2nDs24vRXhwb3J0YWNpw7NuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyZWF0ZSBhIHRlbXBsYXRlIHRvIGltcG9ydCBhbmQgZXhwb3J0IG9iamVjdCBpbmZvcm1hdGlvbi4nfSA9ICdDcmVhciB1bmEgcGxhbnRpbGxhIHBhcmEgaW1wb3J0YXIgeSBleHBvcnRhciBpbmZvcm1hY2lvbiBkZWwgb2JqZXRvLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdGFydCBJbXBvcnQnfSA9ICdJbmljaWFyIEltcG9ydGFjacOzbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdGFydCBFeHBvcnQnfSA9ICdJbmljaWFyIEV4cG9ydGFjacOzbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdGVwIDEgb2YgNSAtIEVkaXQgY29tbW9uIGluZm9ybWF0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05hbWUgaXMgcmVxdWlyZWQhJ30gPSAnRWwgbm9tYnJlIGVzIHJlcXVlcmlkbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPYmplY3QgaXMgcmVxdWlyZWQhJ30gPSAnwqFEZWJlIGVzcGVjaWZpY2FyIE9iamV0byEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRm9ybWF0IGlzIHJlcXVpcmVkISd9ID0gJ8KhRGViZSBlc3BlY2lmaWNhciBGb3JtYXRvISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdGVwIDIgb2YgNSAtIEVkaXQgb2JqZWN0IGluZm9ybWF0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N0ZXAgMyBvZiA1J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2lzIHJlcXVpcmVkISd9ID0gJ8KhZXMgcmVxdWVyaWRvISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdGVwIDQgb2YgNSAtIEVkaXQgbWFwcGluZyBpbmZvcm1hdGlvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBtYXAgZWxlbWVudHMgZm91bmQuJ30gPSAnTm8gc2UgZW5jb250cmFyb24gZWxlbWVudG9zIGRlIG1hcGVvLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgTWFwcGluZyBFbGVtZW50J30gPSAnQcOxYWRpciBNYXBlbyBkZSBFbGVtZW50b3MnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3RlcCA1IG9mIDUgLSBFZGl0IHNlYXJjaCBpbmZvcm1hdGlvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXN0cmljdCBleHBvcnQgcGVyIHNlYXJjaCd9ID0gJ1Jlc3RyaW5naXIgZXhwb3J0YWNpw7NuIHBvciBiw7pzcXVlZGEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW1wb3J0IGluZm9ybWF0aW9uJ30gPSAnSW1wb3J0YXIgaW5mb3JtYWNpw7NuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NvdXJjZSBGaWxlJ30gPSAnQXJjaGl2byBvcmlnZW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3VjY2Vzcyd9ID0gJ8OJeGl0byc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGYWlsZWQnfSA9ICdGcmFjYXNhZG8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRHVwbGljYXRlIG5hbWVzJ30gPSAnTm9tYnJlcyBkdXBsaWNhZG9zJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhc3QgcHJvY2Vzc2VkIGxpbmUgbnVtYmVyIG9mIGltcG9ydCBmaWxlJ30gPSAnw5psdGltYSBuw7ptZXJvIGRlIGzDrW5lYSBwcm9jZXNhZGEgZGVsIGFyY2hpdm8gaW1wb3J0YXInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT2snfSA9ICdPayc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWRtaW5JbXBvcnRFeHBvcnQucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIG9iamVjdCBiYWNrZW5kIGZvdW5kISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBmb3JtYXQgYmFja2VuZCBmb3VuZCEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGVtcGxhdGUgbm90IGZvdW5kISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYW5cJ3QgaW5zZXJ0L3VwZGF0ZSB0ZW1wbGF0ZSEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmVlZGVkIFRlbXBsYXRlSUQhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Vycm9yIG9jY3VycmVkLiBJbXBvcnQgaW1wb3NzaWJsZSEgU2VlIFN5c2xvZyBmb3IgZGV0YWlscy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRXJyb3Igb2NjdXJyZWQuIEV4cG9ydCBpbXBvc3NpYmxlISBTZWUgU3lzbG9nIGZvciBkZXRhaWxzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydudW1iZXInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnbnVtYmVyIGJpZ2dlciB0aGFuIHplcm8nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnaW50ZWdlcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydpbnRlZ2VyIGJpZ2dlciB0aGFuIHplcm8nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWxlbWVudCByZXF1aXJlZCwgcGxlYXNlIGluc2VydCBkYXRhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ludmFsaWQgZGF0YSwgcGxlYXNlIGluc2VydCBhIHZhbGlkICVzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zvcm1hdCBub3QgZm91bmQhJ30gPSAnJzsKCiAgICAjIFN5c0NvbmZpZwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRm9ybWF0IGJhY2tlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIGltcG9ydC9leHBvcnQgbW9kdWxlLid9ID0KICAgICAgICAnUmVnaXN0cm8gZGUgbcOzZHVsbyBkZSBmb3JtYXRvIGJhY2tlbmQgcGFyYSBlbCBtw7NkdWxvIGltcG9ydC9leHBvcnQuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ltcG9ydCBhbmQgZXhwb3J0IG9iamVjdCBpbmZvcm1hdGlvbi4nfSA9ICdJbXBvcnRhciB5IGV4cG9ydGFyIGluZm9ybWFjacOzbiBkZSBvYmpldG9zLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbXBvcnQvRXhwb3J0J30gPSAnSW1wb3J0YXIvRXhwb3J0YXInOwoKfQoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6Om1zX0ltcG9ydEV4cG9ydDsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7CgpzdWIgRGF0YSB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwoKICAgICMgVGVtcGxhdGU6IEFkbWluSW1wb3J0RXhwb3J0CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbXBvcnQvRXhwb3J0IE1hbmFnZW1lbnQnfSA9ICdQZW5ndXJ1c2FuIEltcG9ydC9Fa3Nwb3J0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyZWF0ZSBhIHRlbXBsYXRlIHRvIGltcG9ydCBhbmQgZXhwb3J0IG9iamVjdCBpbmZvcm1hdGlvbi4nfSA9ICdDaXB0YSB0ZW1wbGF0IHVudHVrIGltcG9ydCBkYW4gZWtzcG9ydCBpbmZvcm1hc2kgb2JqZWsuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N0YXJ0IEltcG9ydCd9ID0gJ011bGEgaW1wb3J0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N0YXJ0IEV4cG9ydCd9ID0gJ011bGEgZWtzcG9ydCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdGVwIDEgb2YgNSAtIEVkaXQgY29tbW9uIGluZm9ybWF0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05hbWUgaXMgcmVxdWlyZWQhJ30gPSAnTmFtYSBkaWtlaGVuZGFraSEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT2JqZWN0IGlzIHJlcXVpcmVkISd9ID0gJ09iamVrIGFkYWxhaCBkaXBlcmx1a2FuISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGb3JtYXQgaXMgcmVxdWlyZWQhJ30gPSAnRm9ybWF0IGFkYWxhaCBkaXBlcmx1a2FuISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdGVwIDIgb2YgNSAtIEVkaXQgb2JqZWN0IGluZm9ybWF0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N0ZXAgMyBvZiA1IC0gRWRpdCBmb3JtYXQgaW5mb3JtYXRpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnaXMgcmVxdWlyZWQhJ30gPSAnZGlwZXJsdWthbiEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3RlcCA0IG9mIDUgLSBFZGl0IG1hcHBpbmcgaW5mb3JtYXRpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gbWFwIGVsZW1lbnRzIGZvdW5kLid9ID0gJ1RpYWRhIGVsZW1lbiBwZXRhIGRpdGVtdWkuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBNYXBwaW5nIEVsZW1lbnQnfSA9ICdUYW1iYWggZWxlbWVuIHBldGEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3RlcCA1IG9mIDUgLSBFZGl0IHNlYXJjaCBpbmZvcm1hdGlvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXN0cmljdCBleHBvcnQgcGVyIHNlYXJjaCd9ID0gJ0RpbGFyYW5nIGVrc3BvcnQgcGVyIGNhcmlhbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbXBvcnQgaW5mb3JtYXRpb24nfSA9ICdJbmZvcm1hc2kgaW1wb3J0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NvdXJjZSBGaWxlJ30gPSAnU3VtYmVyIGZhaWwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW1wb3J0IHN1bW1hcnkgZm9yICVzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlY29yZHMnfSA9ICdSZWtvZC1yZWtvZCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdWNjZXNzJ30gPSAnQmVyamF5YSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEdXBsaWNhdGUgbmFtZXMnfSA9ICdNZW55YWxpbiBuYW1hLW5hbWEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGFzdCBwcm9jZXNzZWQgbGluZSBudW1iZXIgb2YgaW1wb3J0IGZpbGUnfSA9ICdOb21ib3IgYmFyaXMgdGVyYWtoaXIgZGlwcm9zZXMgZmFpbCBpbXBvcnQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT2snfSA9ICdPayc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWRtaW5JbXBvcnRFeHBvcnQucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIG9iamVjdCBiYWNrZW5kIGZvdW5kISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBmb3JtYXQgYmFja2VuZCBmb3VuZCEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGVtcGxhdGUgbm90IGZvdW5kISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYW5cJ3QgaW5zZXJ0L3VwZGF0ZSB0ZW1wbGF0ZSEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmVlZGVkIFRlbXBsYXRlSUQhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Vycm9yIG9jY3VycmVkLiBJbXBvcnQgaW1wb3NzaWJsZSEgU2VlIFN5c2xvZyBmb3IgZGV0YWlscy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRXJyb3Igb2NjdXJyZWQuIEV4cG9ydCBpbXBvc3NpYmxlISBTZWUgU3lzbG9nIGZvciBkZXRhaWxzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUZW1wbGF0ZSBMaXN0J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J251bWJlcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydudW1iZXIgYmlnZ2VyIHRoYW4gemVybyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydpbnRlZ2VyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2ludGVnZXIgYmlnZ2VyIHRoYW4gemVybyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbGVtZW50IHJlcXVpcmVkLCBwbGVhc2UgaW5zZXJ0IGRhdGEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW52YWxpZCBkYXRhLCBwbGVhc2UgaW5zZXJ0IGEgdmFsaWQgJXMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRm9ybWF0IG5vdCBmb3VuZCEnfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9TeXN0ZW0vSW1wb3J0RXhwb3J0L0Zvcm1hdEJhY2tlbmQvQ1NWLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb2x1bW4gU2VwYXJhdG9yJ30gPSAnS29sdW0gcGVtaXNhaCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUYWJ1bGF0b3IgKFRBQiknfSA9ICdUYWJ1bGF0b3IgKFRBQiknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VtaWNvbG9uICg7KSd9ID0gJ1NlbWlrb2xvbiAoOyknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29sb24gKDopJ30gPSAnVGl0aWsgYmVydGluZGloICg6KSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEb3QgKC4pJ30gPSAnVGl0aWsgKC4pJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbW1hICgsKSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFyc2V0J30gPSAnU2V0IGthcmFrdGVyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY2x1ZGUgQ29sdW1uIEhlYWRlcnMnfSA9ICdUZXJtYXN1ayBLb2x1bSBLZXBhbGEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29sdW1uJ30gPSAnS29sdW0nOwoKICAgICMgU3lzQ29uZmlnCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGb3JtYXQgYmFja2VuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgaW1wb3J0L2V4cG9ydCBtb2R1bGUuJ30gPQogICAgICAgICdGb3JtYXQgYmFja2VuZCBtb2R1bCBwZW5kYWZ0YXJhbiB1bnR1ayBtb2R1bCBpbXBvcnQvZWtzcG9ydC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW1wb3J0IGFuZCBleHBvcnQgb2JqZWN0IGluZm9ybWF0aW9uLid9ID0gJ0luZm9ybWFzaSBvYmplayBpbXBvcnQgZGFuIGVrc3BvcnQuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ltcG9ydC9FeHBvcnQnfSA9ICdJbXBvcnQvRWtzcG9ydCc7CgoKICAgIHB1c2ggQHsgJFNlbGYtPntKYXZhU2NyaXB0U3RyaW5nc30gLy8gW10gfSwgKAogICAgKTsKCn0KCjE7Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6Om5iX05PX0ltcG9ydEV4cG9ydDsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7CgpzdWIgRGF0YSB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwoKICAgICMgVGVtcGxhdGU6IEFkbWluSW1wb3J0RXhwb3J0CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbXBvcnQvRXhwb3J0IE1hbmFnZW1lbnQnfSA9ICdBZG1pbmlzdHJhc2pvbiBhdiBJbXBvcnQvRWtzcG9ydCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcmVhdGUgYSB0ZW1wbGF0ZSB0byBpbXBvcnQgYW5kIGV4cG9ydCBvYmplY3QgaW5mb3JtYXRpb24uJ30gPSAnT3BwcmV0dCBlbiBtYWwgZm9yIMOlIGVrc3BvcnRlcmUgb2cgaW1wb3J0ZXJlIGluZm9ybWFzam9uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N0YXJ0IEltcG9ydCd9ID0gJ1N0YXJ0IGltcG9ydCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdGFydCBFeHBvcnQnfSA9ICdTdGFydCBla3Nwb3J0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N0ZXAgMSBvZiA1IC0gRWRpdCBjb21tb24gaW5mb3JtYXRpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmFtZSBpcyByZXF1aXJlZCEnfSA9ICdOYXZuIGVyIHDDpWtyZXZkISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPYmplY3QgaXMgcmVxdWlyZWQhJ30gPSAnT2JqZWt0IGVyIHDDpWtyZXZkISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGb3JtYXQgaXMgcmVxdWlyZWQhJ30gPSAnRm9ybWF0IGVyIHDDpWtyZXZkISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdGVwIDIgb2YgNSAtIEVkaXQgb2JqZWN0IGluZm9ybWF0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N0ZXAgMyBvZiA1IC0gRWRpdCBmb3JtYXQgaW5mb3JtYXRpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnaXMgcmVxdWlyZWQhJ30gPSAnZXIgcMOla3JldmQhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N0ZXAgNCBvZiA1IC0gRWRpdCBtYXBwaW5nIGluZm9ybWF0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIG1hcCBlbGVtZW50cyBmb3VuZC4nfSA9ICdJbmdlbiBlbGVtZW50ZXIgZnVubmV0Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgTWFwcGluZyBFbGVtZW50J30gPSAnTGVnZyB0aWwgbWFwcGluZy1lbGVtZW50JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N0ZXAgNSBvZiA1IC0gRWRpdCBzZWFyY2ggaW5mb3JtYXRpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVzdHJpY3QgZXhwb3J0IHBlciBzZWFyY2gnfSA9ICdCZWdyZW5zIGVrc3BvcnQgcGVyIHPDuGsnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW1wb3J0IGluZm9ybWF0aW9uJ30gPSAnSW1wb3J0LWluZm9ybWFzam9uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NvdXJjZSBGaWxlJ30gPSAnS2lsZGVmaWwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW1wb3J0IHN1bW1hcnkgZm9yICVzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlY29yZHMnfSA9ICdSYWRlcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdWNjZXNzJ30gPSAnVmVsbHlra2V0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0R1cGxpY2F0ZSBuYW1lcyd9ID0gJ0R1cGxpa2F0ZSBuYXZuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhc3QgcHJvY2Vzc2VkIGxpbmUgbnVtYmVyIG9mIGltcG9ydCBmaWxlJ30gPSAnU2lzdGUgcHJvc2Vzc2VydGUgbGluamVudW1tZXIgYXYgaW1wb3J0ZmlsJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J09rJ30gPSAnT2snOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FkbWluSW1wb3J0RXhwb3J0LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBvYmplY3QgYmFja2VuZCBmb3VuZCEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gZm9ybWF0IGJhY2tlbmQgZm91bmQhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RlbXBsYXRlIG5vdCBmb3VuZCEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2FuXCd0IGluc2VydC91cGRhdGUgdGVtcGxhdGUhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05lZWRlZCBUZW1wbGF0ZUlEISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFcnJvciBvY2N1cnJlZC4gSW1wb3J0IGltcG9zc2libGUhIFNlZSBTeXNsb2cgZm9yIGRldGFpbHMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Vycm9yIG9jY3VycmVkLiBFeHBvcnQgaW1wb3NzaWJsZSEgU2VlIFN5c2xvZyBmb3IgZGV0YWlscy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGVtcGxhdGUgTGlzdCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydudW1iZXInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnbnVtYmVyIGJpZ2dlciB0aGFuIHplcm8nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnaW50ZWdlcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydpbnRlZ2VyIGJpZ2dlciB0aGFuIHplcm8nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWxlbWVudCByZXF1aXJlZCwgcGxlYXNlIGluc2VydCBkYXRhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ludmFsaWQgZGF0YSwgcGxlYXNlIGluc2VydCBhIHZhbGlkICVzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zvcm1hdCBub3QgZm91bmQhJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvU3lzdGVtL0ltcG9ydEV4cG9ydC9Gb3JtYXRCYWNrZW5kL0NTVi5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29sdW1uIFNlcGFyYXRvcid9ID0gJ0tvbG9ubmVzZXBhcmF0b3InOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGFidWxhdG9yIChUQUIpJ30gPSAnVGFidWxhdG9yIChUQUIpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlbWljb2xvbiAoOyknfSA9ICdTZW1pa29sb24gKDspJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbG9uICg6KSd9ID0gJ0tvbG9uICg6KSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEb3QgKC4pJ30gPSAnUHVua3R1bSAoLiknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29tbWEgKCwpJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYXJzZXQnfSA9ICdUZWduc2V0dCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNsdWRlIENvbHVtbiBIZWFkZXJzJ30gPSAnSW5rbHVkZXIga29sb25uZW92ZXJza3JpZnRlcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb2x1bW4nfSA9ICdLb2xvbm5lJzsKCiAgICAjIFN5c0NvbmZpZwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRm9ybWF0IGJhY2tlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIGltcG9ydC9leHBvcnQgbW9kdWxlLid9ID0KICAgICAgICAnQmFrc2lkZW1vZHVsLXJlZ2lzdHJlcmluZyBmb3IgZm9ybWF0ZXQgdGlsIGltcG9ydC9la3Nwb3J0LW1vZHVsZW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW1wb3J0IGFuZCBleHBvcnQgb2JqZWN0IGluZm9ybWF0aW9uLid9ID0gJ0luZm9ybWFzam9uIGZvciBpbXBvcnQtIG9nIGVrc3BvcnQtb2JqZWt0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ltcG9ydC9FeHBvcnQnfSA9ICdJbXBvcnQvRWtzcG9ydCc7CgoKICAgIHB1c2ggQHsgJFNlbGYtPntKYXZhU2NyaXB0U3RyaW5nc30gLy8gW10gfSwgKAogICAgKTsKCn0KCjE7Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6Om5sX0ltcG9ydEV4cG9ydDsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7CgpzdWIgRGF0YSB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwoKICAgICMgVGVtcGxhdGU6IEFkbWluSW1wb3J0RXhwb3J0CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbXBvcnQvRXhwb3J0IE1hbmFnZW1lbnQnfSA9ICdJbXBvcnQvRXhwb3J0IGJlaGVlcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcmVhdGUgYSB0ZW1wbGF0ZSB0byBpbXBvcnQgYW5kIGV4cG9ydCBvYmplY3QgaW5mb3JtYXRpb24uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N0YXJ0IEltcG9ydCd9ID0gJ0ltcG9ydCBzdGFydGVuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N0YXJ0IEV4cG9ydCd9ID0gJ0V4cG9ydCBzdGFydGVuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N0ZXAgMSBvZiA1IC0gRWRpdCBjb21tb24gaW5mb3JtYXRpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmFtZSBpcyByZXF1aXJlZCEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT2JqZWN0IGlzIHJlcXVpcmVkISd9ID0gJ09iamVjdCBpcyB2ZXJwbGljaHQuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zvcm1hdCBpcyByZXF1aXJlZCEnfSA9ICdGb3JtYWF0IGlzIHZlcnBsaWNodC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3RlcCAyIG9mIDUgLSBFZGl0IG9iamVjdCBpbmZvcm1hdGlvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdGVwIDMgb2YgNSAtIEVkaXQgZm9ybWF0IGluZm9ybWF0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2lzIHJlcXVpcmVkISd9ID0gJ2lzIHZlcnBsaWNodCEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3RlcCA0IG9mIDUgLSBFZGl0IG1hcHBpbmcgaW5mb3JtYXRpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gbWFwIGVsZW1lbnRzIGZvdW5kLid9ID0gJ0dlZW4gZWxlbWVudGVuIGdldm9uZGVuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgTWFwcGluZyBFbGVtZW50J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N0ZXAgNSBvZiA1IC0gRWRpdCBzZWFyY2ggaW5mb3JtYXRpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVzdHJpY3QgZXhwb3J0IHBlciBzZWFyY2gnfSA9ICdCZXBlcmsgZXhwb3J0IHRvdCB6b2Vrb3BkcmFjaHQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW1wb3J0IGluZm9ybWF0aW9uJ30gPSAnSW1wb3J0LWluZm9ybWF0aWUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU291cmNlIEZpbGUnfSA9ICdCcm9uYmVzdGFuZCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbXBvcnQgc3VtbWFyeSBmb3IgJXMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVjb3Jkcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdWNjZXNzJ30gPSAnU3VjY2VzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0R1cGxpY2F0ZSBuYW1lcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXN0IHByb2Nlc3NlZCBsaW5lIG51bWJlciBvZiBpbXBvcnQgZmlsZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPayd9ID0gJ09LJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZG1pbkltcG9ydEV4cG9ydC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gb2JqZWN0IGJhY2tlbmQgZm91bmQhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIGZvcm1hdCBiYWNrZW5kIGZvdW5kISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUZW1wbGF0ZSBub3QgZm91bmQhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhblwndCBpbnNlcnQvdXBkYXRlIHRlbXBsYXRlISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZWVkZWQgVGVtcGxhdGVJRCEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRXJyb3Igb2NjdXJyZWQuIEltcG9ydCBpbXBvc3NpYmxlISBTZWUgU3lzbG9nIGZvciBkZXRhaWxzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFcnJvciBvY2N1cnJlZC4gRXhwb3J0IGltcG9zc2libGUhIFNlZSBTeXNsb2cgZm9yIGRldGFpbHMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RlbXBsYXRlIExpc3QnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnbnVtYmVyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J251bWJlciBiaWdnZXIgdGhhbiB6ZXJvJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2ludGVnZXInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnaW50ZWdlciBiaWdnZXIgdGhhbiB6ZXJvJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VsZW1lbnQgcmVxdWlyZWQsIHBsZWFzZSBpbnNlcnQgZGF0YSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbnZhbGlkIGRhdGEsIHBsZWFzZSBpbnNlcnQgYSB2YWxpZCAlcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGb3JtYXQgbm90IGZvdW5kISd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL1N5c3RlbS9JbXBvcnRFeHBvcnQvRm9ybWF0QmFja2VuZC9DU1YucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbHVtbiBTZXBhcmF0b3InfSA9ICdLb2xvbXNjaGVpZGluZ3N0ZWtlbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUYWJ1bGF0b3IgKFRBQiknfSA9ICdUYWInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VtaWNvbG9uICg7KSd9ID0gJ1B1bnRrb21tYSAoOyknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29sb24gKDopJ30gPSAnRHViYmVsZSBwdW50ICg6KSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEb3QgKC4pJ30gPSAnUHVudCAoLiknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29tbWEgKCwpJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYXJzZXQnfSA9ICdLYXJha3RlcnNldCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNsdWRlIENvbHVtbiBIZWFkZXJzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbHVtbid9ID0gJ0tvbG9tJzsKCiAgICAjIFN5c0NvbmZpZwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRm9ybWF0IGJhY2tlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIGltcG9ydC9leHBvcnQgbW9kdWxlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ltcG9ydCBhbmQgZXhwb3J0IG9iamVjdCBpbmZvcm1hdGlvbi4nfSA9ICdJbXBvcnQgZW4gZXhwb3J0IG9iamVjdGluZm9ybWF0aWUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW1wb3J0L0V4cG9ydCd9ID0gJ0ltcG9ydC9FeHBvcnQnOwoKCiAgICBwdXNoIEB7ICRTZWxmLT57SmF2YVNjcmlwdFN0cmluZ3N9IC8vIFtdIH0sICgKICAgICk7Cgp9CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6OnBsX0ltcG9ydEV4cG9ydDsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7CgpzdWIgRGF0YSB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwoKICAgICMgVGVtcGxhdGU6IEFkbWluSW1wb3J0RXhwb3J0CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbXBvcnQvRXhwb3J0IE1hbmFnZW1lbnQnfSA9ICdaYXJ6xIVkemFuaWUgSW1wb3J0ZW0vRXhwb3J0ZW0nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JlYXRlIGEgdGVtcGxhdGUgdG8gaW1wb3J0IGFuZCBleHBvcnQgb2JqZWN0IGluZm9ybWF0aW9uLid9ID0gJ1V0d8Ozcnogc3phYmxvbiBkbyBpbXBvcnR1IGkgZWtzcG9ydHUgZGFueWNoIG9iaWVrdMOzdy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3RhcnQgSW1wb3J0J30gPSAnUm96cG9jem5paiBpbXBvcnQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3RhcnQgRXhwb3J0J30gPSAnUm96cG9jem5paiBla3Nwb3J0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N0ZXAgMSBvZiA1IC0gRWRpdCBjb21tb24gaW5mb3JtYXRpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmFtZSBpcyByZXF1aXJlZCEnfSA9ICdOYXp3YSBqZXN0IHd5bWFnYW5hISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPYmplY3QgaXMgcmVxdWlyZWQhJ30gPSAnT2JpZWt0IGplc3Qgd3ltYWdhbnkhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zvcm1hdCBpcyByZXF1aXJlZCEnfSA9ICdGb3JtYXQgamVzdCB3eW1hZ2FueSEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3RlcCAyIG9mIDUgLSBFZGl0IG9iamVjdCBpbmZvcm1hdGlvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdGVwIDMgb2YgNSAtIEVkaXQgZm9ybWF0IGluZm9ybWF0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2lzIHJlcXVpcmVkISd9ID0gJ2plc3Qgd3ltYWdhbmEoeSkhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N0ZXAgNCBvZiA1IC0gRWRpdCBtYXBwaW5nIGluZm9ybWF0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIG1hcCBlbGVtZW50cyBmb3VuZC4nfSA9ICdOaWUgem5hbGV6aW9ubyBlbGVtZW50w7N3IG1hcHkuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBNYXBwaW5nIEVsZW1lbnQnfSA9ICdEb2RhaiBlbGVtZW50IG1hcG93YW5pYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdGVwIDUgb2YgNSAtIEVkaXQgc2VhcmNoIGluZm9ybWF0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Jlc3RyaWN0IGV4cG9ydCBwZXIgc2VhcmNoJ30gPSAnT2dyYW5pY3ogZWtzcG9ydCBwcnpleiB3eXN6dWthbmllJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ltcG9ydCBpbmZvcm1hdGlvbid9ID0gJ0ltcG9ydHVqIGluZm9ybWFjamUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU291cmNlIEZpbGUnfSA9ICdQbGlrIMW6csOzZMWCb3d5JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ltcG9ydCBzdW1tYXJ5IGZvciAlcyd9ID0gJ1BvZHN1bW93YW5pZSBpbXBvcnR1IGRsYSAlcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZWNvcmRzJ30gPSAnUmVrb3JkeSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdWNjZXNzJ30gPSAnUG93b2R6ZW5pZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEdXBsaWNhdGUgbmFtZXMnfSA9ICdEdXBsaWthdHkgbmF6dyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXN0IHByb2Nlc3NlZCBsaW5lIG51bWJlciBvZiBpbXBvcnQgZmlsZSd9ID0gJ05yIG9zdGFuaWVqIHByemV0d29yem9uZWogbGluaWkgcGxpa3UgaW1wb3J0b3dlZ28nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT2snfSA9ICdPayc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWRtaW5JbXBvcnRFeHBvcnQucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIG9iamVjdCBiYWNrZW5kIGZvdW5kISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBmb3JtYXQgYmFja2VuZCBmb3VuZCEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGVtcGxhdGUgbm90IGZvdW5kISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYW5cJ3QgaW5zZXJ0L3VwZGF0ZSB0ZW1wbGF0ZSEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmVlZGVkIFRlbXBsYXRlSUQhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Vycm9yIG9jY3VycmVkLiBJbXBvcnQgaW1wb3NzaWJsZSEgU2VlIFN5c2xvZyBmb3IgZGV0YWlscy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRXJyb3Igb2NjdXJyZWQuIEV4cG9ydCBpbXBvc3NpYmxlISBTZWUgU3lzbG9nIGZvciBkZXRhaWxzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUZW1wbGF0ZSBMaXN0J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J251bWJlcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydudW1iZXIgYmlnZ2VyIHRoYW4gemVybyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydpbnRlZ2VyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2ludGVnZXIgYmlnZ2VyIHRoYW4gemVybyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbGVtZW50IHJlcXVpcmVkLCBwbGVhc2UgaW5zZXJ0IGRhdGEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW52YWxpZCBkYXRhLCBwbGVhc2UgaW5zZXJ0IGEgdmFsaWQgJXMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRm9ybWF0IG5vdCBmb3VuZCEnfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9TeXN0ZW0vSW1wb3J0RXhwb3J0L0Zvcm1hdEJhY2tlbmQvQ1NWLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb2x1bW4gU2VwYXJhdG9yJ30gPSAnU2VwYXJhdG9yIGtvbHVtbnknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGFidWxhdG9yIChUQUIpJ30gPSAnVGFidWxhdG9yIChUQUIpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlbWljb2xvbiAoOyknfSA9ICfFmnJlZG5payAoOyknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29sb24gKDopJ30gPSAnRHd1a3JvcGVrICg6KSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEb3QgKC4pJ30gPSAnS3JvcGthICguKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb21tYSAoLCknfSA9ICdQcnplY2luZWsgKCwpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYXJzZXQnfSA9ICdLb2Rvd2FuaWUgJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY2x1ZGUgQ29sdW1uIEhlYWRlcnMnfSA9ICdVbWllxZvEhyBuYWfFgsOzd2tpIGtvbHVtbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb2x1bW4nfSA9ICdLb2x1bW5hJzsKCiAgICAjIFN5c0NvbmZpZwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRm9ybWF0IGJhY2tlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIGltcG9ydC9leHBvcnQgbW9kdWxlLid9ID0KICAgICAgICAnTW9kdcWCIGZvcm1hdG93YW5pYSBiYWNrZW5kIGRsYSBtb2R1xYJ1IGltcG9ydC9la3Nwb3J0Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbXBvcnQgYW5kIGV4cG9ydCBvYmplY3QgaW5mb3JtYXRpb24uJ30gPSAnSW1wb3J0dWogaSBla3Nwb3J0dWogaW5mb3JtYWNqZSBvYmlla3TDs3cuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ltcG9ydC9FeHBvcnQnfSA9ICdJbXBvcnQvZWtzcG9ydCc7CgoKICAgIHB1c2ggQHsgJFNlbGYtPntKYXZhU2NyaXB0U3RyaW5nc30gLy8gW10gfSwgKAogICAgKTsKCn0KCjE7Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6OnB0X0JSX0ltcG9ydEV4cG9ydDsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7CgpzdWIgRGF0YSB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwoKICAgICMgVGVtcGxhdGU6IEFkbWluSW1wb3J0RXhwb3J0CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbXBvcnQvRXhwb3J0IE1hbmFnZW1lbnQnfSA9ICdHZXJlbmNpYW1lbnRvIGRlIEltcG9ydGHDp8Ojby9FeHBvcnRhw6fDo28nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JlYXRlIGEgdGVtcGxhdGUgdG8gaW1wb3J0IGFuZCBleHBvcnQgb2JqZWN0IGluZm9ybWF0aW9uLid9ID0gJ0NyaWFyIHVtIG1vZGVsbyBwYXJhIGltcG9ydGFyIGUgZXhwb3J0YXIgaW5mb3JtYcOnw7VlcyBkZSBvYmpldG8uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N0YXJ0IEltcG9ydCd9ID0gJ0luaWNpYXIgSW1wb3J0YcOnw6NvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N0YXJ0IEV4cG9ydCd9ID0gJ0luaWNpYXIgRXhwb3J0YcOnw6NvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N0ZXAgMSBvZiA1IC0gRWRpdCBjb21tb24gaW5mb3JtYXRpb24nfSA9ICdQYXNzbyAxIGRlIDUgLSBFZGl0YXIgaW5mb3JtYcOnw7VlcyBjb211bnMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmFtZSBpcyByZXF1aXJlZCEnfSA9ICdOb21lIMOpIG9icmlnYXTDs3JpbyEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT2JqZWN0IGlzIHJlcXVpcmVkISd9ID0gJ09iamV0byDDqSBvYnJpZ2F0w7NyaW8hJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zvcm1hdCBpcyByZXF1aXJlZCEnfSA9ICdPIGZvcm1hdG8gw6kgb2JyaWdhdMOzcmlvISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdGVwIDIgb2YgNSAtIEVkaXQgb2JqZWN0IGluZm9ybWF0aW9uJ30gPSAnUGFzc28gMiBkZSA1IC0gRWRpdGFyIGluZm9ybWHDp8O1ZXMgZG8gb2JqZXRvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N0ZXAgMyBvZiA1IC0gRWRpdCBmb3JtYXQgaW5mb3JtYXRpb24nfSA9ICdQYXNzbyAzIGRlIDUgLSBFZGl0YXIgaW5mb3JtYcOnw7VlcyBkZSBmb3JtYXRvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2lzIHJlcXVpcmVkISd9ID0gJ8OpIG9icmlnYXTDs3JpbyEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3RlcCA0IG9mIDUgLSBFZGl0IG1hcHBpbmcgaW5mb3JtYXRpb24nfSA9ICdQYXNzbyA0IGRlIDUgLSBFZGl0YXIgaW5mb3JtYcOnw7VlcyBkZSBtYXBlYW1lbnRvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIG1hcCBlbGVtZW50cyBmb3VuZC4nfSA9ICdOw6NvIGjDoSBlbGVtZW50b3MgbWFwYSBlbmNvbnRyYWRvLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgTWFwcGluZyBFbGVtZW50J30gPSAnQWRpY2lvbmFyIGVsZW1lbnRvIGRlIG1hcGVhbWVudG8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3RlcCA1IG9mIDUgLSBFZGl0IHNlYXJjaCBpbmZvcm1hdGlvbid9ID0gJ1Bhc3NvIDUgZGUgNSAtIEVkaXRhciBpbmZvcm1hw6fDtWVzIGRlIHBlc3F1aXNhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Jlc3RyaWN0IGV4cG9ydCBwZXIgc2VhcmNoJ30gPSAnUmVzdHJpbmdpciBleHBvcnRhw6fDo28gcG9yIHBlc3F1aXNhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ltcG9ydCBpbmZvcm1hdGlvbid9ID0gJ0luZm9ybWHDp8O1ZXMgZGUgaW1wb3J0YcOnw6NvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NvdXJjZSBGaWxlJ30gPSAnQXJxdWl2byBkZSBPcmlnZW0nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW1wb3J0IHN1bW1hcnkgZm9yICVzJ30gPSAnUmVzdW1vIGRlIGltcG9ydGHDp8OjbyBwYXJhICVzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlY29yZHMnfSA9ICdSZWdpc3Ryb3MnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3VjY2Vzcyd9ID0gJ1N1Y2Vzc28nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRHVwbGljYXRlIG5hbWVzJ30gPSAnTm9tZXMgZHVwbGljYWRvcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXN0IHByb2Nlc3NlZCBsaW5lIG51bWJlciBvZiBpbXBvcnQgZmlsZSd9ID0gJ8OabHRpbW8gbsO6bWVybyBkZSBsaW5oYSBwcm9jZXNzYWRhIGRvIGFycXVpdm8gZGUgaW1wb3JhdGHDp8Ojbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPayd9ID0gJ09rJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZG1pbkltcG9ydEV4cG9ydC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gb2JqZWN0IGJhY2tlbmQgZm91bmQhJ30gPSAnTmVuaHVtIG9iamV0byBiYWNrZW5kIGVuY29udHJhZG8hJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIGZvcm1hdCBiYWNrZW5kIGZvdW5kISd9ID0gJ05lbmh1bSBmb3JtYXRvIGJhY2tlbmQgZW5jb250cmFkbyEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGVtcGxhdGUgbm90IGZvdW5kISd9ID0gJ01vZGVsbyBuw6NvIGVuY29udHJhZG8hJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhblwndCBpbnNlcnQvdXBkYXRlIHRlbXBsYXRlISd9ID0gJ07Do28gw6kgcG9zc8OtdmVsIGluc2VyaXIvYXR1YWxpemFyIG1vZGVsbyEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmVlZGVkIFRlbXBsYXRlSUQhJ30gPSAnTmVjZXNzw6FyaW8gVGVtcGxhdGVJRCEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRXJyb3Igb2NjdXJyZWQuIEltcG9ydCBpbXBvc3NpYmxlISBTZWUgU3lzbG9nIGZvciBkZXRhaWxzLid9ID0gJ09jb3JyZXUgdW0gZXJyby4gRm9pIGltcG9zc8OtdmVsIHJlYWxpemFyIGEgaW1wb3J0YcOnw6NvISBWZXJpZmlxdWUgbyBTeXNsb2cgcGFyYSBtYWlzIGRldGFsaGVzLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFcnJvciBvY2N1cnJlZC4gRXhwb3J0IGltcG9zc2libGUhIFNlZSBTeXNsb2cgZm9yIGRldGFpbHMuJ30gPSAnT2NvcnJldSB1bSBlcnJvLiBGb2kgaW1wb3Nzw612ZWwgcmVhbGl6YXIgYSBleHBvcnRhw6fDo28hIFZlcmlmaXF1ZSBvIFN5c2xvZyBwYXJhIG1haXMgZGV0YWxoZXMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RlbXBsYXRlIExpc3QnfSA9ICdMaXN0YSBkZSBtb2RlbG9zJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J251bWJlcid9ID0gJ27Dum1lcm8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnbnVtYmVyIGJpZ2dlciB0aGFuIHplcm8nfSA9ICduw7ptZXJvIG1haW9yIHF1ZSB6ZXJvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2ludGVnZXInfSA9ICdpbnRlaXJvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2ludGVnZXIgYmlnZ2VyIHRoYW4gemVybyd9ID0gJ2ludGVpcm8gbWFpb3IgcXVlIHplcm8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWxlbWVudCByZXF1aXJlZCwgcGxlYXNlIGluc2VydCBkYXRhJ30gPSAnRWxlbWVudG8gbmVjZXNzw6FyaW8sIHBvciBmYXZvciBpbnNpcmEgbyBkYWRvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ludmFsaWQgZGF0YSwgcGxlYXNlIGluc2VydCBhIHZhbGlkICVzJ30gPSAnRGFkbyBpbnbDoWxpZG8sIHBvciBmYXZvciBpbnNpcmEgdW0gJXMgdsOhbGlkbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGb3JtYXQgbm90IGZvdW5kISd9ID0gJ0Zvcm1hdG8gbsOjbyBlbmNvbnRyYWRvISc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL1N5c3RlbS9JbXBvcnRFeHBvcnQvRm9ybWF0QmFja2VuZC9DU1YucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbHVtbiBTZXBhcmF0b3InfSA9ICdTZXBhcmFkb3IgZGUgQ29sdW5hcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUYWJ1bGF0b3IgKFRBQiknfSA9ICdUYWJ1bGHDp8OjbyAoVEFCKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZW1pY29sb24gKDspJ30gPSAnUG9udG8gZSBWw61yZ3VsYSAoOyknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29sb24gKDopJ30gPSAnRG9pcyBQb250b3MgKDopJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RvdCAoLiknfSA9ICdQb250byAoLiknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29tbWEgKCwpJ30gPSAnVmlyZ3VsYSAoLCknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhcnNldCd9ID0gJ0NvZGlmaWNhw6fDo28gZGUgQ2FyYWN0ZXJlcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNsdWRlIENvbHVtbiBIZWFkZXJzJ30gPSAnSW5jbHVpciBDYWJlw6dhbGhvcyBkZSBDb2x1bmFzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbHVtbid9ID0gJ0NvbHVuYSc7CgogICAgIyBTeXNDb25maWcKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zvcm1hdCBiYWNrZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBpbXBvcnQvZXhwb3J0IG1vZHVsZS4nfSA9CiAgICAgICAgJ0Zvcm1hdG8gZGUgcmVnaXN0cm8gYmFja2VuZCBkbyBtw7NkdWxvIGRlIGltcG9ydGHDp8OjbyAvIGV4cG9ydGHDp8OjbyBtw7NkdWxvLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbXBvcnQgYW5kIGV4cG9ydCBvYmplY3QgaW5mb3JtYXRpb24uJ30gPSAnSW1wb3J0YXIgZSBleHBvcnRhciBpbmZvcm1hw6fDtWVzIGRlIG9iamV0by4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW1wb3J0L0V4cG9ydCd9ID0gJ0ltcG9ydGHDp8Ojby9FeHBvcnRhw6fDo28nOwoKCiAgICBwdXNoIEB7ICRTZWxmLT57SmF2YVNjcmlwdFN0cmluZ3N9IC8vIFtdIH0sICgKICAgICk7Cgp9CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6OnJvX0ltcG9ydEV4cG9ydDsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7CgpzdWIgRGF0YSB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwoKICAgICMgVGVtcGxhdGU6IEFBQUltcG9ydEV4cG9ydAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIG1hcHBpbmcgdGVtcGxhdGUnfSA9ICflop7liqDmmKDlsITmqKHniYgnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhcnNldCd9ID0gJ+Wtl+espumbhic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb2xvbiAoOiknfSA9ICflhpLlj7cgKDopJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbHVtbid9ID0gJ+WIlyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb2x1bW4gU2VwYXJhdG9yJ30gPSAn5YiX5YiG6ZqU56ymJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RvdCAoLiknfSA9ICflj6Xlj7cgKC4pJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlbWljb2xvbiAoOyknfSA9ICfliIblj7cgKDspJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RhYnVsYXRvciAoVEFCKSd9ID0gJ1RBQumUriAoVEFCKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNsdWRlIENvbHVtbiBIZWFkZXJzJ30gPSAn5YyF5ous5YiX5qCH6aKYJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ltcG9ydCBzdW1tYXJ5IGZvcid9ID0gJ+WvvOWFpeaAu+e7kyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbXBvcnRlZCByZWNvcmRzJ30gPSAn5a+85YWl6K6w5b2VJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0V4cG9ydGVkIHJlY29yZHMnfSA9ICflr7zlh7rorrDlvZUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVjb3Jkcyd9ID0gJ+iusOW9lSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTa2lwcGVkJ30gPSAn6Lez6L+H55qEJzsKCiAgICAjIFRlbXBsYXRlOiBBZG1pbkltcG9ydEV4cG9ydAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW1wb3J0L0V4cG9ydCBNYW5hZ2VtZW50J30gPSAn5a+85YWlL+WvvOWHuueuoeeQhic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcmVhdGUgYSB0ZW1wbGF0ZSB0byBpbXBvcnQgYW5kIGV4cG9ydCBvYmplY3QgaW5mb3JtYXRpb24uJ30gPSAn5Yib5bu65qih5p2/5a+85YWl5ZKM5a+85Ye65a+56LGh5L+h5oGv44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N0YXJ0IEltcG9ydCd9ID0gJ+W8gOWni+WvvOWFpSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdGFydCBFeHBvcnQnfSA9ICflvIDlp4vlr7zlh7onOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3RlcCAxIG9mIDUgLSBFZGl0IGNvbW1vbiBpbmZvcm1hdGlvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOYW1lIGlzIHJlcXVpcmVkISd9ID0gJ+WRveWQjeaYr+W/hemcgOeahO+8gSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPYmplY3QgaXMgcmVxdWlyZWQhJ30gPSAn5a+56LGh5piv5b+F6ZyA55qE77yBJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zvcm1hdCBpcyByZXF1aXJlZCEnfSA9ICfmoLzlvI/mmK/lv4XpnIDnmoTvvIEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3RlcCAyIG9mIDUgLSBFZGl0IG9iamVjdCBpbmZvcm1hdGlvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdGVwIDMgb2YgNSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydpcyByZXF1aXJlZCEnfSA9ICfmmK/lv4XpnIDnmoTvvIEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3RlcCA0IG9mIDUgLSBFZGl0IG1hcHBpbmcgaW5mb3JtYXRpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gbWFwIGVsZW1lbnRzIGZvdW5kLid9ID0gJ+ayoeacieaJvuWIsOaYoOWwhOeahOWtl+autSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgTWFwcGluZyBFbGVtZW50J30gPSAn5re75Yqg5pig5bCE5a2X5q61JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N0ZXAgNSBvZiA1IC0gRWRpdCBzZWFyY2ggaW5mb3JtYXRpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVzdHJpY3QgZXhwb3J0IHBlciBzZWFyY2gnfSA9ICfmjInmkJzntKLpmZDliLblr7zlh7onOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW1wb3J0IGluZm9ybWF0aW9uJ30gPSAn5a+85YWl5L+h5oGvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NvdXJjZSBGaWxlJ30gPSAn5rqQ5paH5Lu2JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1Y2Nlc3MnfSA9ICfmiJDlip8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRmFpbGVkJ30gPSAn5aSx6LSlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0R1cGxpY2F0ZSBuYW1lcyd9ID0gJ+mHjeWkjeeahOWQjeensCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXN0IHByb2Nlc3NlZCBsaW5lIG51bWJlciBvZiBpbXBvcnQgZmlsZSd9ID0gJ+WvvOWFpeaWh+S7tuacgOWQjuWkhOeQhueahOihjOaVsCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPayd9ID0gJ+ehruWumic7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWRtaW5JbXBvcnRFeHBvcnQucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIG9iamVjdCBiYWNrZW5kIGZvdW5kISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBmb3JtYXQgYmFja2VuZCBmb3VuZCEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGVtcGxhdGUgbm90IGZvdW5kISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYW5cJ3QgaW5zZXJ0L3VwZGF0ZSB0ZW1wbGF0ZSEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmVlZGVkIFRlbXBsYXRlSUQhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Vycm9yIG9jY3VycmVkLiBJbXBvcnQgaW1wb3NzaWJsZSEgU2VlIFN5c2xvZyBmb3IgZGV0YWlscy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRXJyb3Igb2NjdXJyZWQuIEV4cG9ydCBpbXBvc3NpYmxlISBTZWUgU3lzbG9nIGZvciBkZXRhaWxzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydudW1iZXInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnbnVtYmVyIGJpZ2dlciB0aGFuIHplcm8nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnaW50ZWdlcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydpbnRlZ2VyIGJpZ2dlciB0aGFuIHplcm8nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWxlbWVudCByZXF1aXJlZCwgcGxlYXNlIGluc2VydCBkYXRhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ludmFsaWQgZGF0YSwgcGxlYXNlIGluc2VydCBhIHZhbGlkICVzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zvcm1hdCBub3QgZm91bmQhJ30gPSAnJzsKCiAgICAjIFN5c0NvbmZpZwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRm9ybWF0IGJhY2tlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIGltcG9ydC9leHBvcnQgbW9kdWxlLid9ID0KICAgICAgICAn5Li65a+85YWlL+WvvOWHuuaooeWdl+eahOagvOW8j+WQjuerr+aooeWdl+azqOWGjOOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbXBvcnQgYW5kIGV4cG9ydCBvYmplY3QgaW5mb3JtYXRpb24uJ30gPSAn5a+85YWl5ZKM5a+85Ye65a+56LGh5L+h5oGv44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ltcG9ydC9FeHBvcnQnfSA9ICflr7zlhaUv5a+85Ye6JzsKCn0KCjE7Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6OnB0X0ltcG9ydEV4cG9ydDsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7CgpzdWIgRGF0YSB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwoKICAgICMgVGVtcGxhdGU6IEFkbWluSW1wb3J0RXhwb3J0CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbXBvcnQvRXhwb3J0IE1hbmFnZW1lbnQnfSA9ICdHZXN0w6NvIGRlIEltcG9ydGHDp8Ojby9FeHBvcnRhw6fDo28nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JlYXRlIGEgdGVtcGxhdGUgdG8gaW1wb3J0IGFuZCBleHBvcnQgb2JqZWN0IGluZm9ybWF0aW9uLid9ID0gJ0NyaWFyIHVtIG1vZGVsbyBwYXJhIGltcG9ydGFyIGUgZXhwb3J0YXIgaW5mb3JtYcOnw7VlcyBkZSBvYmpldG8uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N0YXJ0IEltcG9ydCd9ID0gJ0luaWNpYXIgSW1wb3J0YcOnw6NvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N0YXJ0IEV4cG9ydCd9ID0gJ0luaWNpYXIgRXhwb3J0YcOnw6NvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N0ZXAgMSBvZiA1IC0gRWRpdCBjb21tb24gaW5mb3JtYXRpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmFtZSBpcyByZXF1aXJlZCEnfSA9ICdOb21lIMOpIG9icmlnYXTDs3JpbyEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT2JqZWN0IGlzIHJlcXVpcmVkISd9ID0gJ09iamV0byDDqSBvYnJpZ2F0w7NyaW8hJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zvcm1hdCBpcyByZXF1aXJlZCEnfSA9ICdPIGZvcm1hdG8gw6kgb2JyaWdhdMOzcmlvISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdGVwIDIgb2YgNSAtIEVkaXQgb2JqZWN0IGluZm9ybWF0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N0ZXAgMyBvZiA1IC0gRWRpdCBmb3JtYXQgaW5mb3JtYXRpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnaXMgcmVxdWlyZWQhJ30gPSAnw6kgb2JyaWdhdMOzcmlvISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdGVwIDQgb2YgNSAtIEVkaXQgbWFwcGluZyBpbmZvcm1hdGlvbid9ID0gJ1Bhc3NvIDQgZGUgNSAtIEVkaXRhciBpbmZvcm1hw6fDo28gZGUgbWFwZWFtZW50byc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBtYXAgZWxlbWVudHMgZm91bmQuJ30gPSAnTsOjbyBow6EgZWxlbWVudG9zIG1hcGEgZW5jb250cmFkby4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIE1hcHBpbmcgRWxlbWVudCd9ID0gJ0FkaWNpb25hciBlbGVtZW50byBkZSBtYXBlYW1lbnRvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N0ZXAgNSBvZiA1IC0gRWRpdCBzZWFyY2ggaW5mb3JtYXRpb24nfSA9ICdQYXNzbyA1IGRlIDUgLSBFZGl0YXIgaW5mb3JtYcOnw6NvIGRlIHByb2N1cmEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVzdHJpY3QgZXhwb3J0IHBlciBzZWFyY2gnfSA9ICdSZXN0cmluZ2lyIGV4cG9ydGHDp8OjbyBwb3IgcGVzcXVpc2EnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW1wb3J0IGluZm9ybWF0aW9uJ30gPSAnSW5mb3JtYcOnw7VlcyBkZSBpbXBvcnRhw6fDo28nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU291cmNlIEZpbGUnfSA9ICdBcnF1aXZvIGRlIE9yaWdlbSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbXBvcnQgc3VtbWFyeSBmb3IgJXMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVjb3Jkcyd9ID0gJ1JlZ2lzdG9zJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1Y2Nlc3MnfSA9ICdTdWNlc3NvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0R1cGxpY2F0ZSBuYW1lcyd9ID0gJ05vbWVzIGR1cGxpY2Fkb3MnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGFzdCBwcm9jZXNzZWQgbGluZSBudW1iZXIgb2YgaW1wb3J0IGZpbGUnfSA9ICfDmmx0aW1vIG7Dum1lcm8gZGUgbGluaGEgcHJvY2Vzc2FkYSBkbyBhcnF1aXZvIGRlIGltcG9ydGHDp8Ojbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPayd9ID0gJ09rJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZG1pbkltcG9ydEV4cG9ydC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gb2JqZWN0IGJhY2tlbmQgZm91bmQhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIGZvcm1hdCBiYWNrZW5kIGZvdW5kISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUZW1wbGF0ZSBub3QgZm91bmQhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhblwndCBpbnNlcnQvdXBkYXRlIHRlbXBsYXRlISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZWVkZWQgVGVtcGxhdGVJRCEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRXJyb3Igb2NjdXJyZWQuIEltcG9ydCBpbXBvc3NpYmxlISBTZWUgU3lzbG9nIGZvciBkZXRhaWxzLid9ID0gJ09jb3JyZXUgdW0gZXJyby5JbXBvcnRhw6fDo28gaW1wb3Nzw612ZWwhVmVyaWZpY2FyIFN5c2xvZyBwYXJhIGRldGFsaGVzLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFcnJvciBvY2N1cnJlZC4gRXhwb3J0IGltcG9zc2libGUhIFNlZSBTeXNsb2cgZm9yIGRldGFpbHMuJ30gPSAnT2NvcnJldSB1bSBlcnJvLkV4cG9ydGHDp8OjbyBpbXBvc3PDrXZlbCFWZXJpZmljYXIgU3lzbG9nIHBhcmEgZGV0YWxoZXMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RlbXBsYXRlIExpc3QnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnbnVtYmVyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J251bWJlciBiaWdnZXIgdGhhbiB6ZXJvJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2ludGVnZXInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnaW50ZWdlciBiaWdnZXIgdGhhbiB6ZXJvJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VsZW1lbnQgcmVxdWlyZWQsIHBsZWFzZSBpbnNlcnQgZGF0YSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbnZhbGlkIGRhdGEsIHBsZWFzZSBpbnNlcnQgYSB2YWxpZCAlcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGb3JtYXQgbm90IGZvdW5kISd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL1N5c3RlbS9JbXBvcnRFeHBvcnQvRm9ybWF0QmFja2VuZC9DU1YucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbHVtbiBTZXBhcmF0b3InfSA9ICdTZXBhcmFkb3IgZGUgQ29sdW5hcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUYWJ1bGF0b3IgKFRBQiknfSA9ICdUYWJ1bGHDp8OjbyAoVEFCKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZW1pY29sb24gKDspJ30gPSAnUG9udG8gZSBWw61yZ3VsYSAoOyknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29sb24gKDopJ30gPSAnRG9pcyBQb250b3MgKDopJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RvdCAoLiknfSA9ICdQb250byAoLiknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29tbWEgKCwpJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYXJzZXQnfSA9ICdDb2RpZmljYcOnw6NvIGRlIENhcmFjdGVyZXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5jbHVkZSBDb2x1bW4gSGVhZGVycyd9ID0gJ0luY2x1aXIgQ2FiZcOnYWxob3MgZGUgQ29sdW5hcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb2x1bW4nfSA9ICdDb2x1bmEnOwoKICAgICMgU3lzQ29uZmlnCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGb3JtYXQgYmFja2VuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgaW1wb3J0L2V4cG9ydCBtb2R1bGUuJ30gPQogICAgICAgICdGb3JtYXRhciBtw7NkdWxvIGRlIHJlZ2lzdG8gYmFja2VuZCBkbyBtw7NkdWxvIGRlIGltcG9ydGHDp8OjbyAvIGV4cG9ydGHDp8Ojby4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW1wb3J0IGFuZCBleHBvcnQgb2JqZWN0IGluZm9ybWF0aW9uLid9ID0gJ0ltcG9ydGFyIGUgZXhwb3J0YXIgaW5mb3JtYcOnw7VlcyBkZSBvYmpldG8uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ltcG9ydC9FeHBvcnQnfSA9ICdJbXBvcnRhci9FeHBvcnRhcic7CgoKICAgIHB1c2ggQHsgJFNlbGYtPntKYXZhU2NyaXB0U3RyaW5nc30gLy8gW10gfSwgKAogICAgKTsKCn0KCjE7Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6OnJ1X0ltcG9ydEV4cG9ydDsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7CgpzdWIgRGF0YSB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwoKICAgICMgVGVtcGxhdGU6IEFkbWluSW1wb3J0RXhwb3J0CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbXBvcnQvRXhwb3J0IE1hbmFnZW1lbnQnfSA9ICfQo9C/0YDQsNCy0LvQtdC90LjQtSDQmNC80L/QvtGA0YLQvtC8L9Ct0LrRgdC/0L7RgNGC0L7QvCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcmVhdGUgYSB0ZW1wbGF0ZSB0byBpbXBvcnQgYW5kIGV4cG9ydCBvYmplY3QgaW5mb3JtYXRpb24uJ30gPSAn0KHQvtC30LTQsNC50YLQtSDRiNCw0LHQu9C+0L0g0LTQu9GPINC40LzQv9C+0YDRgtCwINC4INGN0LrRgdC/0L7RgNGC0LAg0LjQvdGE0L7RgNC80LDRhtC40Lgg0L7QsdGK0LXQutGC0L7Qsic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdGFydCBJbXBvcnQnfSA9ICfQndCw0YfQsNGC0Ywg0LjQvNC/0L7RgNGCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N0YXJ0IEV4cG9ydCd9ID0gJ9Cd0LDRh9Cw0YLRjCDRjdC60YHQv9C+0YDRgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdGVwIDEgb2YgNSAtIEVkaXQgY29tbW9uIGluZm9ybWF0aW9uJ30gPSAn0KjQsNCzIDEg0LjQtyA1IC0g0KDQtdC00LDQutGC0LjRgNC+0LLQsNGC0Ywg0L7QsdGJ0YPRjiDQuNC90YTQvtGA0LzQsNGG0LjRjic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOYW1lIGlzIHJlcXVpcmVkISd9ID0gJ9Ci0YDQtdCx0YPQtdGC0YHRjyDQuNC80Y8hJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J09iamVjdCBpcyByZXF1aXJlZCEnfSA9ICfQntCx0YrQtdC60YIg0L7QsdGP0LfQsNGC0LXQu9C10L0hJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zvcm1hdCBpcyByZXF1aXJlZCEnfSA9ICfQpNC+0YDQvNCw0YIg0L7QsdGP0LfQsNGC0LXQu9C10L0hJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N0ZXAgMiBvZiA1IC0gRWRpdCBvYmplY3QgaW5mb3JtYXRpb24nfSA9ICfQqNCw0LMgMiDQuNC3IDUgLSDQoNC10LTQsNC60YLQuNGA0L7QstCw0YLRjCDQuNC90YTQvtGA0LzQsNGG0LjRjiDQvtCxINC+0LHRitC10LrRgtC1JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N0ZXAgMyBvZiA1IC0gRWRpdCBmb3JtYXQgaW5mb3JtYXRpb24nfSA9ICfQqNCw0LMgMyDQuNC3IDUgLSDQoNC10LTQsNC60YLQuNGA0L7QstCw0YLRjCDRhNC+0YDQvNCw0YIg0LjQvdGE0L7RgNC80LDRhtC40LgnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnaXMgcmVxdWlyZWQhJ30gPSAn0L7QsdGP0LfQsNGC0LXQu9C10L0hJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N0ZXAgNCBvZiA1IC0gRWRpdCBtYXBwaW5nIGluZm9ybWF0aW9uJ30gPSAn0KjQsNCzIDQg0LjQtyA1IC0g0KDQtdC00LDQutGC0LjRgNC+0LLQsNGC0Ywg0LjQvdGE0L7RgNC80LDRhtC40Y4g0YHQvtC/0L7RgdGC0LDQstC70LXQvdC40Y8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gbWFwIGVsZW1lbnRzIGZvdW5kLid9ID0gJ9Cd0LXRgiDRjdC70LXQvNC10L3RgtC+0LIg0YHQvtC/0L7RgdGC0LDQstC70LXQvdC40Y8uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBNYXBwaW5nIEVsZW1lbnQnfSA9ICfQlNC+0LHQsNCy0YzRgtC1INGN0LvQtdC80LXQvdGCINGB0L7Qv9C+0YHRgtCw0LLQu9C10L3QuNGPJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N0ZXAgNSBvZiA1IC0gRWRpdCBzZWFyY2ggaW5mb3JtYXRpb24nfSA9ICfQqNCw0LMgNSDQuNC3IDUgLSDQoNC10LTQsNC60YLQuNGA0L7QstCw0YLRjCDQuNC90YTQvtGA0LzQsNGG0LjRjiDQv9C+0LjRgdC60LAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVzdHJpY3QgZXhwb3J0IHBlciBzZWFyY2gnfSA9ICfQntCz0YDQsNC90LjRh9C40YLRjCDRjdC60YHQv9C+0YDRgiDQv9C+0LjRgdC60L7QvCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbXBvcnQgaW5mb3JtYXRpb24nfSA9ICfQmNC90YTQvtGA0LzQsNGG0LjRjyDQvtCxINC40LzQv9C+0YDRgtC1JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NvdXJjZSBGaWxlJ30gPSAn0JjRgdGF0L7QtNC90YvQuSDRhNCw0LnQuyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbXBvcnQgc3VtbWFyeSBmb3IgJXMnfSA9ICfQmNC80L/QvtGA0YIg0YHQvtC00LXRgNC20LDQvdC40Y8g0LTQu9GPICVzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlY29yZHMnfSA9ICfQl9Cw0L/QuNGB0LXQuSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdWNjZXNzJ30gPSAn0KPRgdC/0LXRiNC90L4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRHVwbGljYXRlIG5hbWVzJ30gPSAn0JTRg9Cx0LvQuNGA0YPRjtGJ0LjQtSDQuNC80LXQvdCwJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhc3QgcHJvY2Vzc2VkIGxpbmUgbnVtYmVyIG9mIGltcG9ydCBmaWxlJ30gPSAn0J3QvtC80LXRgCDQv9C+0YHQu9C10LTQvdC10Lkg0L7QsdGA0LDQsdC+0YLQsNC90L3QvtC5INGB0YLRgNC+0LrQuCDQuNC80L/QvtGA0YLQuNGA0YPQtdC80L7Qs9C+INGE0LDQudC70LAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT2snfSA9ICdPayc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWRtaW5JbXBvcnRFeHBvcnQucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIG9iamVjdCBiYWNrZW5kIGZvdW5kISd9ID0gJ9Ce0LHRitC10LrRgiDQvdC1INC90LDQudC00LXQvSEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gZm9ybWF0IGJhY2tlbmQgZm91bmQhJ30gPSAn0JHRjdC60Y3QvdC0INC90LUg0L3QsNC50LTQtdC9ISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUZW1wbGF0ZSBub3QgZm91bmQhJ30gPSAn0KjQsNCx0LvQvtC9INC90LUg0L3QsNC50LTQtdC9ISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYW5cJ3QgaW5zZXJ0L3VwZGF0ZSB0ZW1wbGF0ZSEnfSA9ICfQndC10LLQvtC30LzQvtC20L3QviDQtNC+0LHQsNCy0LjRgtGML9C+0LHQvdC+0LLQuNGC0Ywg0YjQsNCx0LvQvtC9ISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZWVkZWQgVGVtcGxhdGVJRCEnfSA9ICfQotGA0LXQsdGD0LXRgtGB0Y8gSUQg0KjQsNCx0LvQvtC90LAhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Vycm9yIG9jY3VycmVkLiBJbXBvcnQgaW1wb3NzaWJsZSEgU2VlIFN5c2xvZyBmb3IgZGV0YWlscy4nfSA9ICfQntGI0LjQsdC60LAuINCY0LzQv9C+0YDRgiDQvdC10LLQvtC30LzQvtC20LXQvSEg0KHQvNC+0YLRgNC4INC/0L7QtNGA0L7QsdC90L7RgdGC0Lgg0LIgU3lzbG9nLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFcnJvciBvY2N1cnJlZC4gRXhwb3J0IGltcG9zc2libGUhIFNlZSBTeXNsb2cgZm9yIGRldGFpbHMuJ30gPSAn0J7RiNC40LHQutCwLiDQrdC60YHQv9C+0YDRgiDQvdC10LLQvtC30LzQvtC20LXQvSEg0KHQvNC+0YLRgNC4INC/0L7QtNGA0L7QsdC90L7RgdGC0Lgg0LIgU3lzbG9nLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUZW1wbGF0ZSBMaXN0J30gPSAn0KHQv9C40YHQvtC6INGI0LDQsdC70L7QvdC+0LInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnbnVtYmVyJ30gPSAn0L3QvtC80LXRgCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydudW1iZXIgYmlnZ2VyIHRoYW4gemVybyd9ID0gJ9C90L7QvNC10YAg0LHQvtC70YzRiNC1INC90YPQu9GPJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2ludGVnZXInfSA9ICfRhtC10LvQvtC1INGH0LjRgdC70L4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnaW50ZWdlciBiaWdnZXIgdGhhbiB6ZXJvJ30gPSAn0YbQtdC70L7QtSDRh9C40YHQu9C+INCx0L7Qu9GM0YjQtSDQvdGD0LvRjyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbGVtZW50IHJlcXVpcmVkLCBwbGVhc2UgaW5zZXJ0IGRhdGEnfSA9ICfQntCx0Y/Qt9Cw0YLQtdC70YzQvdGL0LUg0Y3Qu9C10LzQtdC90YIsINC/0L7QttCw0LvRg9C50YHRgtCwINCy0LLQtdC00LjRgtC1INC00LDQvdC90YvQtS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW52YWxpZCBkYXRhLCBwbGVhc2UgaW5zZXJ0IGEgdmFsaWQgJXMnfSA9ICfQndC10LLQtdGA0L3Ri9C1INC00LDQvdC90YvQtSwg0L/QvtC20LDQu9GD0LnRgdGC0LAsINGD0LrQsNC20LjRgtC1INCy0LXRgNC90YvQtSAlcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGb3JtYXQgbm90IGZvdW5kISd9ID0gJ9Ck0L7RgNC80LDRgiDQvdC1INC90LDQudC00LXQvSEnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9TeXN0ZW0vSW1wb3J0RXhwb3J0L0Zvcm1hdEJhY2tlbmQvQ1NWLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb2x1bW4gU2VwYXJhdG9yJ30gPSAn0KDQsNC30LTQtdC70LjRgtC10LvRjCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUYWJ1bGF0b3IgKFRBQiknfSA9ICfQotCw0LHRg9C70Y/RhtC40Y8gKFRBQiknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VtaWNvbG9uICg7KSd9ID0gJ9Ci0L7Rh9C60LAg0YEg0LfQsNC/0Y/RgtC+0LkgKDspJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbG9uICg6KSd9ID0gJ9CU0LLQvtC10YLQvtGH0LjQtSAoOiknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRG90ICguKSd9ID0gJ9Ci0L7Rh9C60LAgKC4pJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbW1hICgsKSd9ID0gJ9CX0LDQv9GP0YLQsNGPICgsKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFyc2V0J30gPSAn0JrQvtC00LjRgNC+0LLQutCwJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY2x1ZGUgQ29sdW1uIEhlYWRlcnMnfSA9ICfQktC60LvRjtGH0LjRgtGMINC30LDQs9C+0LvQvtCy0LrQuCDRgdGC0L7Qu9Cx0YbQvtCyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbHVtbid9ID0gJ9Ch0YLQvtC70LHQtdGGICc7CgogICAgIyBTeXNDb25maWcKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zvcm1hdCBiYWNrZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBpbXBvcnQvZXhwb3J0IG1vZHVsZS4nfSA9CiAgICAgICAgJ0Zvcm1hdCBiYWNrZW5kIG1vZHVsZSByZWdpc3RyYXRpb24g0LTQu9GPINC80L7QtNGD0LvRjyBpbXBvcnQvZXhwb3J0Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbXBvcnQgYW5kIGV4cG9ydCBvYmplY3QgaW5mb3JtYXRpb24uJ30gPSAn0JjQvNC/0L7RgNGCINC4INGN0LrRgdC/0L7RgNGCINC40L3RhNC+0YDQvNCw0YbQuNC4INC+0LEg0L7QsdGK0LXQutGC0LDRhSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbXBvcnQvRXhwb3J0J30gPSAn0JjQvNC/0L7RgNGCL9Ct0LrRgdC/0L7RgNGCJzsKCgogICAgcHVzaCBAeyAkU2VsZi0+e0phdmFTY3JpcHRTdHJpbmdzfSAvLyBbXSB9LCAoCiAgICApOwoKfQoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6OnNyX0N5cmxfSW1wb3J0RXhwb3J0OwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnN1YiBEYXRhIHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CgogICAgIyBUZW1wbGF0ZTogQWRtaW5JbXBvcnRFeHBvcnQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ltcG9ydC9FeHBvcnQgTWFuYWdlbWVudCd9ID0gJ9Cj0LLQvtC3L9CY0LfQstC+0Lcg0YPQv9GA0LDQstGZ0LDRmtC1JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyZWF0ZSBhIHRlbXBsYXRlIHRvIGltcG9ydCBhbmQgZXhwb3J0IG9iamVjdCBpbmZvcm1hdGlvbi4nfSA9ICfQmtGA0LXQuNGA0LDRmCDRiNCw0LHQu9C+0L0g0LfQsCDRg9Cy0L7QtyDQuCDQuNC30LLQvtC3INC40L3RhNC+0YDQvNCw0YbQuNGY0LAg0L4g0L7QsdGY0LXQutGC0YMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N0YXJ0IEltcG9ydCd9ID0gJ9Cf0L7Rh9C90Lgg0YPQstC+0LcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3RhcnQgRXhwb3J0J30gPSAn0J/QvtGH0L3QuCDQuNC30LLQvtC3JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N0ZXAgMSBvZiA1IC0gRWRpdCBjb21tb24gaW5mb3JtYXRpb24nfSA9ICfQmtC+0YDQsNC6IDEg0L7QtCA1IC0g0KPRgNC10LTQuCDQt9Cw0ZjQtdC00L3QuNGH0LrQtSDQuNC90YTQvtGA0LzQsNGG0LjRmNC1JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05hbWUgaXMgcmVxdWlyZWQhJ30gPSAn0JjQvNC1INGY0LUg0L7QsdCw0LLQtdC30L3QviEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT2JqZWN0IGlzIHJlcXVpcmVkISd9ID0gJ9Ce0LHRmNC10LrRgiDRmNC1INC+0LHQsNCy0LXQt9Cw0L0hJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zvcm1hdCBpcyByZXF1aXJlZCEnfSA9ICfQpNC+0YDQvNCw0YIg0ZjQtSDQvtCx0LDQstC10LfQsNC9ISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdGVwIDIgb2YgNSAtIEVkaXQgb2JqZWN0IGluZm9ybWF0aW9uJ30gPSAn0JrQvtGA0LDQuiAyINC+0LQgNSAtINCj0YDQtdC00Lgg0LjQvdGE0L7RgNC80LDRhtC40ZjQtSDQviDQvtCx0ZjQtdC60YLRgyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdGVwIDMgb2YgNSAtIEVkaXQgZm9ybWF0IGluZm9ybWF0aW9uJ30gPSAn0JrQvtGA0LDQuiAzINC+0LQgNSAtINCj0YDQtdC00Lgg0LjQvdGE0L7RgNC80LDRhtC40ZjQtSDQviDRhNC+0YDQvNCw0YLRgyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydpcyByZXF1aXJlZCEnfSA9ICfRmNC1INC+0LHQsNCy0LXQt9C90L4hJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N0ZXAgNCBvZiA1IC0gRWRpdCBtYXBwaW5nIGluZm9ybWF0aW9uJ30gPSAn0JrQvtGA0LDQuiA0INC+0LQgNSAtINCj0YDQtdC00Lgg0LjQvdGE0L7RgNC80LDRhtC40ZjQtSDQviDQvNCw0L/QuNGA0LDRmtGDJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIG1hcCBlbGVtZW50cyBmb3VuZC4nfSA9ICfQndC40ZjQtdC00LDQvSDQtdC70LXQvNC10L3RgiDQvNCw0L/QtSDQvdC40ZjQtSDQv9GA0L7QvdCw0ZLQtdC9Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgTWFwcGluZyBFbGVtZW50J30gPSAn0JTQvtC00LDRmCDQtdC70LXQvNC10L3RgiDQt9CwINC80LDQv9C40YDQsNGa0LUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3RlcCA1IG9mIDUgLSBFZGl0IHNlYXJjaCBpbmZvcm1hdGlvbid9ID0gJ9Ca0L7RgNCw0LogNSDQvtC0IDUgLSDQo9GA0LXQtNC4INC40L3RhNC+0YDQvNCw0YbQuNGY0LUg0LfQsCDQv9GA0LXRgtGA0LDQs9GDJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Jlc3RyaWN0IGV4cG9ydCBwZXIgc2VhcmNoJ30gPSAn0J7Qs9GA0LDQvdC40YfQtdGa0LUg0LjQt9Cy0L7Qt9CwINC/0L4g0L/RgNC10YLRgNCw0LfQuCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbXBvcnQgaW5mb3JtYXRpb24nfSA9ICfQo9Cy0L7QtyDQuNC90YTQvtGA0LzQsNGG0LjRmNCwJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NvdXJjZSBGaWxlJ30gPSAn0JjQt9Cy0L7RgNC90LAg0LTQsNGC0L7RgtC10LrQsCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbXBvcnQgc3VtbWFyeSBmb3IgJXMnfSA9ICfQoNC10LfQuNC80LUg0YPQstC+0LfQsCDQt9CwICVzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlY29yZHMnfSA9ICfQl9Cw0L/QuNGB0LgnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3VjY2Vzcyd9ID0gJ9Cj0YHQv9C10YjQvdC+JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0R1cGxpY2F0ZSBuYW1lcyd9ID0gJ9CU0YPQv9C70LjQutCw0YIg0LjQvNC10L3QsCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXN0IHByb2Nlc3NlZCBsaW5lIG51bWJlciBvZiBpbXBvcnQgZmlsZSd9ID0gJ9CR0YDQvtGYINC/0L7RgdC70LXQtNGa0LUg0L7QsdGA0LDRktC10L3QtSDQu9C40L3QuNGY0LUg0YPQstC10LfQtdC90LUg0LTQsNGC0L7RgtC10LrQtSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPayd9ID0gJ9CjINGA0LXQtNGDJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZG1pbkltcG9ydEV4cG9ydC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gb2JqZWN0IGJhY2tlbmQgZm91bmQhJ30gPSAn0J3QuNGY0LUg0L/RgNC+0L3QsNGS0LXQvSDQv9C+0LfQsNC00LjQvdGB0LrQuCDQvNC+0LTRg9C7INC+0LHRmNC10LrRgtCwISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBmb3JtYXQgYmFja2VuZCBmb3VuZCEnfSA9ICfQndC40ZjQtSDQv9GA0L7QvdCw0ZLQtdC9INC/0L7Qt9Cw0LTQuNC90YHQutC4INC80L7QtNGD0Lsg0YTQvtGA0LzQsNGC0LAhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RlbXBsYXRlIG5vdCBmb3VuZCEnfSA9ICfQqNCw0LHQu9C+0L0g0L3QuNGY0LUg0L/RgNC+0L3QsNGS0LXQvSEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2FuXCd0IGluc2VydC91cGRhdGUgdGVtcGxhdGUhJ30gPSAn0KjQsNCx0LvQvtC9INGB0LUg0L3QtSDQvNC+0LbQtSDRg9C90LXRgtC4L9Cw0LbRg9GA0LjRgNCw0YLQuCEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmVlZGVkIFRlbXBsYXRlSUQhJ30gPSAn0J/QvtGC0YDQtdCx0LDQvSDQmNCUINGI0LDQsdC70L7QvdCwISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFcnJvciBvY2N1cnJlZC4gSW1wb3J0IGltcG9zc2libGUhIFNlZSBTeXNsb2cgZm9yIGRldGFpbHMuJ30gPSAn0JTQvtCz0L7QtNC40LvQsCDRgdC1INCz0YDQtdGI0LrQsC4g0KPQstC+0Lcg0ZjQtSDQvdC10LzQvtCz0YPRmyEg0JfQsCDQtNC10YLQsNGZ0LUg0L/QvtCz0LvQtdC00LDRmNGC0LUg0YMg0YHQuNGB0YLQtdC80YHQutC4INC00L3QtdCy0L3QuNC6Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFcnJvciBvY2N1cnJlZC4gRXhwb3J0IGltcG9zc2libGUhIFNlZSBTeXNsb2cgZm9yIGRldGFpbHMuJ30gPSAn0JTQvtCz0L7QtNC40LvQsCDRgdC1INCz0YDQtdGI0LrQsC4g0JjQt9Cy0L7QtyDRmNC1INC90LXQvNC+0LPRg9GbISDQl9CwINC00LXRgtCw0ZnQtSDQv9C+0LPQu9C10LTQsNGY0YLQtSDRgyDRgdC40YHRgtC10LzRgdC60Lgg0LTQvdC10LLQvdC40LouJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RlbXBsYXRlIExpc3QnfSA9ICfQm9C40YHRgtCwINGI0LDQsdC70L7QvdCwJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J251bWJlcid9ID0gJ9Cx0YDQvtGYJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J251bWJlciBiaWdnZXIgdGhhbiB6ZXJvJ30gPSAn0LHRgNC+0Zgg0LLQtdGb0Lgg0L7QtCDQvdGD0LvQsCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydpbnRlZ2VyJ30gPSAn0YbQtdC+INCx0YDQvtGYJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2ludGVnZXIgYmlnZ2VyIHRoYW4gemVybyd9ID0gJ9GG0LXQviDQsdGA0L7RmCDQstC10ZvQuCDQvtC0INC90YPQu9CwJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VsZW1lbnQgcmVxdWlyZWQsIHBsZWFzZSBpbnNlcnQgZGF0YSd9ID0gJ9Cd0LXQvtC/0YXQvtC00LDQvSDQtdC70LXQvNC10L3Rgiwg0LzQvtC70LjQvNC+INGD0L3QtdGB0LjRgtC1INC/0L7QtNCw0YLQutC1JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ludmFsaWQgZGF0YSwgcGxlYXNlIGluc2VydCBhIHZhbGlkICVzJ30gPSAn0J3QtdC40YHQv9GA0LDQstC90Lgg0L/QvtC00LDRhtC4LCDRg9C90LXRgdC10YLQtSDQstCw0LbQtdGb0LggJXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRm9ybWF0IG5vdCBmb3VuZCEnfSA9ICfQpNC+0YDQvNCw0YIg0L3QuNGY0LUg0L/RgNC+0L3QsNGS0LXQvSEnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9TeXN0ZW0vSW1wb3J0RXhwb3J0L0Zvcm1hdEJhY2tlbmQvQ1NWLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb2x1bW4gU2VwYXJhdG9yJ30gPSAn0KHQtdC/0LDRgNCw0YLQvtGAINC60L7Qu9C+0L3QsCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUYWJ1bGF0b3IgKFRBQiknfSA9ICfQotCw0LHRg9C70LDRgtC+0YAgKFRBQiknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VtaWNvbG9uICg7KSd9ID0gJ9Ci0LDRh9C60LAg0Lgg0LfQsNC/0LXRgtCwICg7KSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb2xvbiAoOiknfSA9ICfQlNCy0L7RgtCw0YfQutCwICg6KSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEb3QgKC4pJ30gPSAn0KLQsNGH0LrQsCAoLiknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29tbWEgKCwpJ30gPSAn0JfQsNGA0LXQtyAoLCknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhcnNldCd9ID0gJ9Ca0LDRgNCw0LrRgtC10YDRgdC10YInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5jbHVkZSBDb2x1bW4gSGVhZGVycyd9ID0gJ9Cj0LrRmdGD0YfQuCDQvdCw0YHQu9C+0LLQtSDQutC+0LvQvtC90LAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29sdW1uJ30gPSAn0JrQvtC70L7QvdCwJzsKCiAgICAjIFN5c0NvbmZpZwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRm9ybWF0IGJhY2tlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIGltcG9ydC9leHBvcnQgbW9kdWxlLid9ID0KICAgICAgICAn0KTQvtGA0LzQsNGCINGA0LXQs9C40YHRgtGA0LDRhtC40ZjQtSDigJ5iYWNrZW5k4oCdINC80L7QtNGD0LvQsCDQt9CwINGD0LLQvtC3L9C40LfQstC+0Lcg0LzQvtC00YPQuy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW1wb3J0IGFuZCBleHBvcnQgb2JqZWN0IGluZm9ybWF0aW9uLid9ID0gJ9CY0L3RhNC+0YDQvNCw0YbQuNGY0LUg0L4g0YPQstC+0LfRgyDQuCDQuNC30LLQvtC30YMg0L7QsdGY0LXQutCw0YLQsCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbXBvcnQvRXhwb3J0J30gPSAn0KPQstC+0Lcv0JjQt9Cy0L7Qtyc7CgoKICAgIHB1c2ggQHsgJFNlbGYtPntKYXZhU2NyaXB0U3RyaW5nc30gLy8gW10gfSwgKAogICAgKTsKCn0KCjE7Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6OnNyX0xhdG5fSW1wb3J0RXhwb3J0OwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnN1YiBEYXRhIHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CgogICAgIyBUZW1wbGF0ZTogQWRtaW5JbXBvcnRFeHBvcnQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ltcG9ydC9FeHBvcnQgTWFuYWdlbWVudCd9ID0gJ1V2b3ovSXp2b3ogdXByYXZsamFuamUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JlYXRlIGEgdGVtcGxhdGUgdG8gaW1wb3J0IGFuZCBleHBvcnQgb2JqZWN0IGluZm9ybWF0aW9uLid9ID0gJ0tyZWlyYWogxaFhYmxvbiB6YSB1dm96IGkgaXp2b3ogaW5mb3JtYWNpamEgbyBvYmpla3R1Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdGFydCBJbXBvcnQnfSA9ICdQb8SNbmkgdXZveic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdGFydCBFeHBvcnQnfSA9ICdQb8SNbmkgaXp2b3onOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3RlcCAxIG9mIDUgLSBFZGl0IGNvbW1vbiBpbmZvcm1hdGlvbid9ID0gJ0tvcmFrIDEgb2QgNSAtIFVyZWRpIHphamVkbmnEjWtlIGluZm9ybWFjaWplJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05hbWUgaXMgcmVxdWlyZWQhJ30gPSAnSW1lIGplIG9iYXZlem5vISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPYmplY3QgaXMgcmVxdWlyZWQhJ30gPSAnT2JqZWt0IGplIG9iYXZlemFuISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGb3JtYXQgaXMgcmVxdWlyZWQhJ30gPSAnRm9ybWF0IGplIG9iYXZlemFuISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdGVwIDIgb2YgNSAtIEVkaXQgb2JqZWN0IGluZm9ybWF0aW9uJ30gPSAnS29yYWsgMiBvZCA1IC0gVXJlZGkgaW5mb3JtYWNpamUgbyBvYmpla3R1JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N0ZXAgMyBvZiA1IC0gRWRpdCBmb3JtYXQgaW5mb3JtYXRpb24nfSA9ICdLb3JhayAzIG9kIDUgLSBVcmVkaSBpbmZvcm1hY2lqZSBvIGZvcm1hdHUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnaXMgcmVxdWlyZWQhJ30gPSAnamUgb2JhdmV6bm8hJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N0ZXAgNCBvZiA1IC0gRWRpdCBtYXBwaW5nIGluZm9ybWF0aW9uJ30gPSAnS29yYWsgNCBvZCA1IC0gVXJlZGkgaW5mb3JtYWNpamUgbyBtYXBpcmFuanUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gbWFwIGVsZW1lbnRzIGZvdW5kLid9ID0gJ05pamVkYW4gZWxlbWVudCBtYXBlIG5pamUgcHJvbmHEkWVuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgTWFwcGluZyBFbGVtZW50J30gPSAnRG9kYWogZWxlbWVudCB6YSBtYXBpcmFuamUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3RlcCA1IG9mIDUgLSBFZGl0IHNlYXJjaCBpbmZvcm1hdGlvbid9ID0gJ0tvcmFrIDUgb2QgNSAtIFVyZWRpIGluZm9ybWFjaWplIHphIHByZXRyYWd1JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Jlc3RyaWN0IGV4cG9ydCBwZXIgc2VhcmNoJ30gPSAnT2dyYW5pxI1lbmplIGl6dm96YSBwbyBwcmV0cmF6aSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbXBvcnQgaW5mb3JtYXRpb24nfSA9ICdVdm96IGluZm9ybWFjaWphJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NvdXJjZSBGaWxlJ30gPSAnSXp2b3JuYSBkYXRvdGVrYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbXBvcnQgc3VtbWFyeSBmb3IgJXMnfSA9ICdSZXppbWUgdXZvemEgemEgJXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVjb3Jkcyd9ID0gJ1phcGlzaSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdWNjZXNzJ30gPSAnVXNwZcWhbm8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRHVwbGljYXRlIG5hbWVzJ30gPSAnRHVwbGlrYXQgaW1lbmEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGFzdCBwcm9jZXNzZWQgbGluZSBudW1iZXIgb2YgaW1wb3J0IGZpbGUnfSA9ICdCcm9qIHBvc2xlZG5qZSBvYnJhxJFlbmUgbGluaWplIHV2ZXplbmUgZGF0b3Rla2UnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT2snfSA9ICdVIHJlZHUnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FkbWluSW1wb3J0RXhwb3J0LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBvYmplY3QgYmFja2VuZCBmb3VuZCEnfSA9ICdOaWplIHByb25hxJFlbiBwb3phZGluc2tpIG1vZHVsIG9iamVrdGEhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIGZvcm1hdCBiYWNrZW5kIGZvdW5kISd9ID0gJ05pamUgcHJvbmHEkWVuIHBvemFkaW5za2kgbW9kdWwgZm9ybWF0YSEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGVtcGxhdGUgbm90IGZvdW5kISd9ID0gJ8WgYWJsb24gbmlqZSBwcm9uYcSRZW4hJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhblwndCBpbnNlcnQvdXBkYXRlIHRlbXBsYXRlISd9ID0gJ8WgYWJsb24gc2UgbmUgbW/FvmUgdW5ldGkvYcW+dXJpcmF0aSEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmVlZGVkIFRlbXBsYXRlSUQhJ30gPSAnUG90cmViYW4gSUQgxaFhYmxvbmEhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Vycm9yIG9jY3VycmVkLiBJbXBvcnQgaW1wb3NzaWJsZSEgU2VlIFN5c2xvZyBmb3IgZGV0YWlscy4nfSA9ICdEb2dvZGlsYSBzZSBncmXFoWthLiBVdm96IGplIG5lbW9ndcSHISBaYSBkZXRhbGplIHBvZ2xlZGFqdGUgdSBzaXN0ZW1za2kgZG5ldm5pay4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRXJyb3Igb2NjdXJyZWQuIEV4cG9ydCBpbXBvc3NpYmxlISBTZWUgU3lzbG9nIGZvciBkZXRhaWxzLid9ID0gJ0RvZ29kaWxhIHNlIGdyZcWha2EuIEl6dm96IGplIG5lbW9ndcSHISBaYSBkZXRhbGplIHBvZ2xlZGFqdGUgdSBzaXN0ZW1za2kgZG5ldm5pay4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGVtcGxhdGUgTGlzdCd9ID0gJ0xpc3RhIMWhYWJsb25hJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J251bWJlcid9ID0gJ2Jyb2onOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnbnVtYmVyIGJpZ2dlciB0aGFuIHplcm8nfSA9ICdicm9qIHZlxIdpIG9kIG51bGEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnaW50ZWdlcid9ID0gJ2NlbyBicm9qJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2ludGVnZXIgYmlnZ2VyIHRoYW4gemVybyd9ID0gJ2NlbyBicm9qIHZlxIdpIG9kIG51bGEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWxlbWVudCByZXF1aXJlZCwgcGxlYXNlIGluc2VydCBkYXRhJ30gPSAnTmVvcGhvZGFuIGVsZW1lbnQsIG1vbGltbyB1bmVzaXRlIHBvZGF0a2UnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW52YWxpZCBkYXRhLCBwbGVhc2UgaW5zZXJ0IGEgdmFsaWQgJXMnfSA9ICdOZWlzcHJhdm5pIHBvZGFjaSwgdW5lc2V0ZSB2YcW+ZcSHaSAlcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGb3JtYXQgbm90IGZvdW5kISd9ID0gJ0Zvcm1hdCBuaWplIHByb25hxJFlbiEnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9TeXN0ZW0vSW1wb3J0RXhwb3J0L0Zvcm1hdEJhY2tlbmQvQ1NWLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb2x1bW4gU2VwYXJhdG9yJ30gPSAnU2VwYXJhdG9yIGtvbG9uYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUYWJ1bGF0b3IgKFRBQiknfSA9ICdUYWJ1bGF0b3IgKFRBQiknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VtaWNvbG9uICg7KSd9ID0gJ1RhxI1rYSBpIHphcGV0YSAoOyknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29sb24gKDopJ30gPSAnRHZvdGHEjWthICg6KSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEb3QgKC4pJ30gPSAnVGHEjWthICguKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb21tYSAoLCknfSA9ICdaYXJleiAoLCknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhcnNldCd9ID0gJ0thcmFrdGVyc2V0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY2x1ZGUgQ29sdW1uIEhlYWRlcnMnfSA9ICdVa2xqdcSNaSBuYXNsb3ZlIGtvbG9uYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb2x1bW4nfSA9ICdLb2xvbmEnOwoKICAgICMgU3lzQ29uZmlnCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGb3JtYXQgYmFja2VuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgaW1wb3J0L2V4cG9ydCBtb2R1bGUuJ30gPQogICAgICAgICdGb3JtYXQgcmVnaXN0cmFjaWplIOKAnmJhY2tlbmTigJ0gbW9kdWxhIHphIHV2b3ovaXp2b3ogbW9kdWwuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ltcG9ydCBhbmQgZXhwb3J0IG9iamVjdCBpbmZvcm1hdGlvbi4nfSA9ICdJbmZvcm1hY2lqZSBvIHV2b3p1IGkgaXp2b3p1IG9iamVrYXRhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ltcG9ydC9FeHBvcnQnfSA9ICdVdm96L0l6dm96JzsKCgogICAgcHVzaCBAeyAkU2VsZi0+e0phdmFTY3JpcHRTdHJpbmdzfSAvLyBbXSB9LCAoCiAgICApOwoKfQoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6OnN2X0ltcG9ydEV4cG9ydDsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7CgpzdWIgRGF0YSB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwoKICAgICMgVGVtcGxhdGU6IEFkbWluSW1wb3J0RXhwb3J0CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbXBvcnQvRXhwb3J0IE1hbmFnZW1lbnQnfSA9ICdIYW50ZXJpbmcgYXYgSW1wb3J0L0V4cG9ydCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcmVhdGUgYSB0ZW1wbGF0ZSB0byBpbXBvcnQgYW5kIGV4cG9ydCBvYmplY3QgaW5mb3JtYXRpb24uJ30gPSAnU2thcGEgZW4gbWFsbCBmw7ZyIGF0dCBpbXBvcnRlcmEgb2NoIGV4cG9ydGVyYSBvYmpla3RpbmZvcm1hdGlvbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3RhcnQgSW1wb3J0J30gPSAnU3RhcnRhIGltcG9ydCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdGFydCBFeHBvcnQnfSA9ICdTdGFydGEgZXhwb3J0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N0ZXAgMSBvZiA1IC0gRWRpdCBjb21tb24gaW5mb3JtYXRpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmFtZSBpcyByZXF1aXJlZCEnfSA9ICdOYW1uIGtyw6R2cyEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT2JqZWN0IGlzIHJlcXVpcmVkISd9ID0gJ09iamVrdCBrcsOkdnMhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zvcm1hdCBpcyByZXF1aXJlZCEnfSA9ICdGb3JtYXQga3LDpHZzISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdGVwIDIgb2YgNSAtIEVkaXQgb2JqZWN0IGluZm9ybWF0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N0ZXAgMyBvZiA1IC0gRWRpdCBmb3JtYXQgaW5mb3JtYXRpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnaXMgcmVxdWlyZWQhJ30gPSAna3LDpHZzISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdGVwIDQgb2YgNSAtIEVkaXQgbWFwcGluZyBpbmZvcm1hdGlvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBtYXAgZWxlbWVudHMgZm91bmQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBNYXBwaW5nIEVsZW1lbnQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3RlcCA1IG9mIDUgLSBFZGl0IHNlYXJjaCBpbmZvcm1hdGlvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXN0cmljdCBleHBvcnQgcGVyIHNlYXJjaCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbXBvcnQgaW5mb3JtYXRpb24nfSA9ICdJbXBvcnRpbmZvcm1hdGlvbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTb3VyY2UgRmlsZSd9ID0gJ0vDpGxsZmlsJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ltcG9ydCBzdW1tYXJ5IGZvciAlcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZWNvcmRzJ30gPSAnUG9zdGVyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1Y2Nlc3MnfSA9ICdMeWNrYWQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRHVwbGljYXRlIG5hbWVzJ30gPSAnVXBwcmVwYSBuYW1uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhc3QgcHJvY2Vzc2VkIGxpbmUgbnVtYmVyIG9mIGltcG9ydCBmaWxlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J09rJ30gPSAnT2snOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FkbWluSW1wb3J0RXhwb3J0LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBvYmplY3QgYmFja2VuZCBmb3VuZCEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gZm9ybWF0IGJhY2tlbmQgZm91bmQhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RlbXBsYXRlIG5vdCBmb3VuZCEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2FuXCd0IGluc2VydC91cGRhdGUgdGVtcGxhdGUhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05lZWRlZCBUZW1wbGF0ZUlEISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFcnJvciBvY2N1cnJlZC4gSW1wb3J0IGltcG9zc2libGUhIFNlZSBTeXNsb2cgZm9yIGRldGFpbHMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Vycm9yIG9jY3VycmVkLiBFeHBvcnQgaW1wb3NzaWJsZSEgU2VlIFN5c2xvZyBmb3IgZGV0YWlscy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGVtcGxhdGUgTGlzdCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydudW1iZXInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnbnVtYmVyIGJpZ2dlciB0aGFuIHplcm8nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnaW50ZWdlcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydpbnRlZ2VyIGJpZ2dlciB0aGFuIHplcm8nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWxlbWVudCByZXF1aXJlZCwgcGxlYXNlIGluc2VydCBkYXRhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ludmFsaWQgZGF0YSwgcGxlYXNlIGluc2VydCBhIHZhbGlkICVzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zvcm1hdCBub3QgZm91bmQhJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvU3lzdGVtL0ltcG9ydEV4cG9ydC9Gb3JtYXRCYWNrZW5kL0NTVi5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29sdW1uIFNlcGFyYXRvcid9ID0gJ0tvbHVtbi1hdnNraWxqYXJlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RhYnVsYXRvciAoVEFCKSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZW1pY29sb24gKDspJ30gPSAnU2VtaWtvbG9uICg7KSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb2xvbiAoOiknfSA9ICdLb2xvbiAoOiknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRG90ICguKSd9ID0gJ1B1bmt0ICguKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb21tYSAoLCknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhcnNldCd9ID0gJ1RlY2tlbmtvZG5pbmcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5jbHVkZSBDb2x1bW4gSGVhZGVycyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb2x1bW4nfSA9ICdLb2x1bW4nOwoKICAgICMgU3lzQ29uZmlnCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGb3JtYXQgYmFja2VuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgaW1wb3J0L2V4cG9ydCBtb2R1bGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW1wb3J0IGFuZCBleHBvcnQgb2JqZWN0IGluZm9ybWF0aW9uLid9ID0gJ0ltcG9ydGVyYSBvY2ggZXhwb3J0ZXJhIG9iamVrdGluZm9ybWF0aW9uLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbXBvcnQvRXhwb3J0J30gPSAnSW1wb3J0L0V4cG9ydCc7CgoKICAgIHB1c2ggQHsgJFNlbGYtPntKYXZhU2NyaXB0U3RyaW5nc30gLy8gW10gfSwgKAogICAgKTsKCn0KCjE7Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6OnN3X0ltcG9ydEV4cG9ydDsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7CgpzdWIgRGF0YSB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwoKICAgICMgVGVtcGxhdGU6IEFkbWluSW1wb3J0RXhwb3J0CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbXBvcnQvRXhwb3J0IE1hbmFnZW1lbnQnfSA9ICdVc2ltYW1pemkgd2Ega3VsZXRhL0hhbWlzaGEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JlYXRlIGEgdGVtcGxhdGUgdG8gaW1wb3J0IGFuZCBleHBvcnQgb2JqZWN0IGluZm9ybWF0aW9uLid9ID0gJ1RlbmdlbmV6YSBraW9sZXpvIGt1bGV0YSBuYSBrdWhhbWlzaGEgdGFhcmlmYSB6YSBraXBlbmdlZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdGFydCBJbXBvcnQnfSA9ICdBbnphIGt1bGV0YSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdGFydCBFeHBvcnQnfSA9ICdBbnphIGt1aGFtaXNoYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdGVwIDEgb2YgNSAtIEVkaXQgY29tbW9uIGluZm9ybWF0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05hbWUgaXMgcmVxdWlyZWQhJ30gPSAnSmluYSBsaW5haGl0YWppa2EhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J09iamVjdCBpcyByZXF1aXJlZCEnfSA9ICdLaXBlbmdlZSBraW5haGl0YWppa2EhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zvcm1hdCBpcyByZXF1aXJlZCEnfSA9ICdVbWJpem8gdW5haGl0YWppa2EnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3RlcCAyIG9mIDUgLSBFZGl0IG9iamVjdCBpbmZvcm1hdGlvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdGVwIDMgb2YgNSAtIEVkaXQgZm9ybWF0IGluZm9ybWF0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2lzIHJlcXVpcmVkISd9ID0gJ0luYWhpdGFqaWthJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N0ZXAgNCBvZiA1IC0gRWRpdCBtYXBwaW5nIGluZm9ybWF0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIG1hcCBlbGVtZW50cyBmb3VuZC4nfSA9ICdIYWt1bmEgZWxlbWVudGkgemlsaXpvcGF0aWthbmEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIE1hcHBpbmcgRWxlbWVudCd9ID0gJ09uZ2V6YSBlbGVtZW50aSB6YSBrdXdla2EgcmFtYW5pJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N0ZXAgNSBvZiA1IC0gRWRpdCBzZWFyY2ggaW5mb3JtYXRpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVzdHJpY3QgZXhwb3J0IHBlciBzZWFyY2gnfSA9ICdadWlhIHVoYW1pc2hhamkga3dhIGtpbGEgdXRhZnV0YWppJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ltcG9ydCBpbmZvcm1hdGlvbid9ID0gJ0xldGEgdGFhcmlmYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTb3VyY2UgRmlsZSd9ID0gJ0ZhaWxpIGxhIGNoYW56byc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbXBvcnQgc3VtbWFyeSBmb3IgJXMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVjb3Jkcyd9ID0gJ0t1bWJ1a3VtYnUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3VjY2Vzcyd9ID0gJ01hZmFuaWtpbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEdXBsaWNhdGUgbmFtZXMnfSA9ICdKaW5hIGxpbWVqaXJ1ZGlhOic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXN0IHByb2Nlc3NlZCBsaW5lIG51bWJlciBvZiBpbXBvcnQgZmlsZSd9ID0gJ05hbWJhIHlhIG1zdGFyaSB1bmFva2F0aWthIG1jaGFrYXRvIHdhIG13aXNobyB3YSBmYWlsaSBsaWxpbG9sZXR3YSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPayd9ID0gJ1Nhd2EnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FkbWluSW1wb3J0RXhwb3J0LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBvYmplY3QgYmFja2VuZCBmb3VuZCEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gZm9ybWF0IGJhY2tlbmQgZm91bmQhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RlbXBsYXRlIG5vdCBmb3VuZCEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2FuXCd0IGluc2VydC91cGRhdGUgdGVtcGxhdGUhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05lZWRlZCBUZW1wbGF0ZUlEISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFcnJvciBvY2N1cnJlZC4gSW1wb3J0IGltcG9zc2libGUhIFNlZSBTeXNsb2cgZm9yIGRldGFpbHMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Vycm9yIG9jY3VycmVkLiBFeHBvcnQgaW1wb3NzaWJsZSEgU2VlIFN5c2xvZyBmb3IgZGV0YWlscy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGVtcGxhdGUgTGlzdCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydudW1iZXInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnbnVtYmVyIGJpZ2dlciB0aGFuIHplcm8nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnaW50ZWdlcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydpbnRlZ2VyIGJpZ2dlciB0aGFuIHplcm8nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWxlbWVudCByZXF1aXJlZCwgcGxlYXNlIGluc2VydCBkYXRhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ludmFsaWQgZGF0YSwgcGxlYXNlIGluc2VydCBhIHZhbGlkICVzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zvcm1hdCBub3QgZm91bmQhJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvU3lzdGVtL0ltcG9ydEV4cG9ydC9Gb3JtYXRCYWNrZW5kL0NTVi5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29sdW1uIFNlcGFyYXRvcid9ID0gJ0tpdGVuZ2FuaXNoaSBzYWZ1IHdpbWEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGFidWxhdG9yIChUQUIpJ30gPSAnVGFibyAoVEFCKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZW1pY29sb24gKDspJ30gPSAnQWxhbWEgeWEgbnVrdGEgbWthdG8gKDspJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbG9uICg6KSd9ID0gJ0NvbG9uICg6KSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEb3QgKC4pJ30gPSAnTnVrdGEgKC4pJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbW1hICgsKSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFyc2V0J30gPSAnU2V0aSB5YSBoZXJ1ZmknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5jbHVkZSBDb2x1bW4gSGVhZGVycyd9ID0gJ0FtYmF0aXNoYSB2aWNod2EgdnlhIGhhYmFyaSB2eWEgc2FmdXdpbWEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29sdW1uJ30gPSAnU2FmdXdpbWEnOwoKICAgICMgU3lzQ29uZmlnCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGb3JtYXQgYmFja2VuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgaW1wb3J0L2V4cG9ydCBtb2R1bGUuJ30gPQogICAgICAgICdVbWJpemEgdXNhamlsaSB3YSBtb2R1bGkgd2EgbWF6aW5naXJhIHlhIG55dW1hIGt3YSBhamlsaSB5YSBtb2R1bGkgeWEga3VsZXRhL2t1aGFtaXNoYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbXBvcnQgYW5kIGV4cG9ydCBvYmplY3QgaW5mb3JtYXRpb24uJ30gPSAnTGV0YSBuYSBoYW1pc2hhIHRhYXJpZmEgemEga2lwZW5nZWUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW1wb3J0L0V4cG9ydCd9ID0gJ0xldGEvSGFtaXNoYSc7CgoKICAgIHB1c2ggQHsgJFNlbGYtPntKYXZhU2NyaXB0U3RyaW5nc30gLy8gW10gfSwgKAogICAgKTsKCn0KCjE7Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6OnRoX1RIX0ltcG9ydEV4cG9ydDsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7CgpzdWIgRGF0YSB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwoKICAgICMgVGVtcGxhdGU6IEFkbWluSW1wb3J0RXhwb3J0CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbXBvcnQvRXhwb3J0IE1hbmFnZW1lbnQnfSA9ICfguIHguLLguKPguIjguLHguJTguIHguLLguKMg4LiZ4Liz4LmA4LiC4LmJ4LiyL+C4quC5iOC4h+C4reC4reC4gSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcmVhdGUgYSB0ZW1wbGF0ZSB0byBpbXBvcnQgYW5kIGV4cG9ydCBvYmplY3QgaW5mb3JtYXRpb24uJ30gPSAn4Liq4Lij4LmJ4Liy4LiH4LmB4Lih4LmI4LmB4Lia4Lia4LmA4Lie4Li34LmI4Lit4LiZ4Liz4LmA4LiC4LmJ4Liy4LmB4Lil4Liw4Liq4LmI4LiH4Lit4Lit4LiB4LiC4LmJ4Lit4Lih4Li54Lil4Lit4Lit4Lia4LmA4LiI4LiB4LiV4LmMJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N0YXJ0IEltcG9ydCd9ID0gJ+C5gOC4o+C4tOC5iOC4oeC4meC4s+C5gOC4guC5ieC4sic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdGFydCBFeHBvcnQnfSA9ICfguYDguKPguLTguYjguKHguKrguYjguIfguK3guK3guIEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3RlcCAxIG9mIDUgLSBFZGl0IGNvbW1vbiBpbmZvcm1hdGlvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOYW1lIGlzIHJlcXVpcmVkISd9ID0gJ+C4leC5ieC4reC4h+C4o+C4sOC4muC4uOC4iuC4t+C5iOC4rSEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT2JqZWN0IGlzIHJlcXVpcmVkISd9ID0gJ+C4leC5ieC4reC4h+C4o+C4sOC4muC4uOC4reC4reC4muC5gOC4iOC4geC4leC5jCEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRm9ybWF0IGlzIHJlcXVpcmVkISd9ID0gJ+C4leC5ieC4reC4h+C4o+C4sOC4muC4uOC4o+C4ueC4m+C5geC4muC4miEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3RlcCAyIG9mIDUgLSBFZGl0IG9iamVjdCBpbmZvcm1hdGlvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdGVwIDMgb2YgNSAtIEVkaXQgZm9ybWF0IGluZm9ybWF0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2lzIHJlcXVpcmVkISd9ID0gJ+C4leC5ieC4reC4h+C4o+C4sOC4muC4uCEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3RlcCA0IG9mIDUgLSBFZGl0IG1hcHBpbmcgaW5mb3JtYXRpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gbWFwIGVsZW1lbnRzIGZvdW5kLid9ID0gJ+C5hOC4oeC5iOC4nuC4muC4reC4h+C4hOC5jOC4m+C4o+C4sOC4geC4reC4muC5geC4nOC4meC4l+C4teC5iCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgTWFwcGluZyBFbGVtZW50J30gPSAn4LmA4Lie4Li04LmI4Lih4Lit4LiH4LiE4LmM4Lib4Lij4Liw4LiB4Lit4Lia4LiC4Lit4LiH4LiB4Liy4Lij4LiX4Liz4LmB4Lic4LiZ4LiX4Li14LmIJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N0ZXAgNSBvZiA1IC0gRWRpdCBzZWFyY2ggaW5mb3JtYXRpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVzdHJpY3QgZXhwb3J0IHBlciBzZWFyY2gnfSA9ICfguIHguLLguKPguIjguLPguIHguLHguJTguIHguLLguKPguKrguYjguIfguK3guK3guIHguJXguLLguKHguIHguLLguKPguITguYnguJnguKvguLInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW1wb3J0IGluZm9ybWF0aW9uJ30gPSAn4LiC4LmJ4Lit4Lih4Li54Lil4LiZ4Liz4LmA4LiC4LmJ4LiyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NvdXJjZSBGaWxlJ30gPSAn4LmB4Lir4Lil4LmI4LiH4LmE4Lif4Lil4LmMJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ltcG9ydCBzdW1tYXJ5IGZvciAlcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZWNvcmRzJ30gPSAn4LiB4Liy4Lij4Lia4Lix4LiZ4LiX4Li24LiBJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1Y2Nlc3MnfSA9ICfguITguKfguLLguKHguKrguLPguYDguKPguYfguIgnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRHVwbGljYXRlIG5hbWVzJ30gPSAn4LiK4Li34LmI4Lit4LiL4LmJ4LizJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhc3QgcHJvY2Vzc2VkIGxpbmUgbnVtYmVyIG9mIGltcG9ydCBmaWxlJ30gPSAn4Lir4Lih4Liy4Lii4LmA4Lil4LiC4LiC4Lit4LiH4LiB4Liy4Lij4Lib4Lij4Liw4Lih4Lin4Lil4LiE4Lij4Lix4LmJ4LiH4Liq4Li44LiU4LiX4LmJ4Liy4Lii4LiC4Lit4LiH4LiB4Liy4Lij4LiZ4Liz4LmE4Lif4Lil4LmM4LmA4LiC4LmJ4LiyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J09rJ30gPSAn4LmC4Lit4LmA4LiEJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZG1pbkltcG9ydEV4cG9ydC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gb2JqZWN0IGJhY2tlbmQgZm91bmQhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIGZvcm1hdCBiYWNrZW5kIGZvdW5kISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUZW1wbGF0ZSBub3QgZm91bmQhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhblwndCBpbnNlcnQvdXBkYXRlIHRlbXBsYXRlISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZWVkZWQgVGVtcGxhdGVJRCEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRXJyb3Igb2NjdXJyZWQuIEltcG9ydCBpbXBvc3NpYmxlISBTZWUgU3lzbG9nIGZvciBkZXRhaWxzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFcnJvciBvY2N1cnJlZC4gRXhwb3J0IGltcG9zc2libGUhIFNlZSBTeXNsb2cgZm9yIGRldGFpbHMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RlbXBsYXRlIExpc3QnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnbnVtYmVyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J251bWJlciBiaWdnZXIgdGhhbiB6ZXJvJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2ludGVnZXInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnaW50ZWdlciBiaWdnZXIgdGhhbiB6ZXJvJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VsZW1lbnQgcmVxdWlyZWQsIHBsZWFzZSBpbnNlcnQgZGF0YSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbnZhbGlkIGRhdGEsIHBsZWFzZSBpbnNlcnQgYSB2YWxpZCAlcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGb3JtYXQgbm90IGZvdW5kISd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL1N5c3RlbS9JbXBvcnRFeHBvcnQvRm9ybWF0QmFja2VuZC9DU1YucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbHVtbiBTZXBhcmF0b3InfSA9ICfguJXguLHguKfguITguLHguYjguJnguITguK3guKXguLHguKHguJnguYwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGFidWxhdG9yIChUQUIpJ30gPSAn4LiV4Lix4Lin4LiX4Liz4LiV4Liy4Lij4Liy4LiHKOC5geC4l+C5h+C4miknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VtaWNvbG9uICg7KSd9ID0gJ+C5gOC4hOC4o+C4t+C5iOC4reC4h+C4q+C4oeC4suC4ouC4reC4seC4kuC4oOC4suC4hCg7KSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb2xvbiAoOiknfSA9ICfguYDguITguKPguLfguYjguK3guIfguKvguKHguLLguKLguJfguKfguLTguKDguLLguIQgKDopJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RvdCAoLiknfSA9ICfguIjguLjguJQoLiknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29tbWEgKCwpJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYXJzZXQnfSA9ICfguYDguIvguJXguITguLLguYDguKPguIHguYDguJXguK3guKPguYwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5jbHVkZSBDb2x1bW4gSGVhZGVycyd9ID0gJ+C4o+C4p+C4oeC4l+C4seC5ieC4h+C4quC5iOC4p+C4meC4q+C4seC4p+C4guC4reC4h+C4hOC4reC4peC4seC4oeC4meC5jCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb2x1bW4nfSA9ICfguITguK3guKXguLHguKHguJnguYwnOwoKICAgICMgU3lzQ29uZmlnCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGb3JtYXQgYmFja2VuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgaW1wb3J0L2V4cG9ydCBtb2R1bGUuJ30gPQogICAgICAgICfguKPguLnguJvguYHguJrguJrguIHguLLguKPguKXguIfguJfguLDguYDguJrguLXguKLguJnguYLguKHguJTguLnguKUgYmFja2VuZCDguKrguLPguKvguKPguLHguJrguYLguKHguJTguLnguKXguIHguLLguKPguJnguLPguYDguILguYnguLIgLyDguKrguYjguIfguK3guK3guIEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW1wb3J0IGFuZCBleHBvcnQgb2JqZWN0IGluZm9ybWF0aW9uLid9ID0gJ+C4geC4suC4o+C4meC4s+C5gOC4guC5ieC4suC4q+C4o+C4t+C4reC4quC5iOC4h+C4reC4reC4geC4guC5ieC4reC4oeC4ueC4peC4reC4reC4muC5gOC4iOC4geC4leC5jCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbXBvcnQvRXhwb3J0J30gPSAn4LiB4Liy4Lij4LiZ4Liz4LmA4LiC4LmJ4LiyL+C4quC5iOC4h+C4reC4reC4gSc7CgoKICAgIHB1c2ggQHsgJFNlbGYtPntKYXZhU2NyaXB0U3RyaW5nc30gLy8gW10gfSwgKAogICAgKTsKCn0KCjE7Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6OnZpX1ZOX0ltcG9ydEV4cG9ydDsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7CgpzdWIgRGF0YSB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwoKICAgICMgVGVtcGxhdGU6IEFkbWluSW1wb3J0RXhwb3J0CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbXBvcnQvRXhwb3J0IE1hbmFnZW1lbnQnfSA9ICdRdeG6o24gbMO9IE5o4bqtcC9YdeG6pXQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JlYXRlIGEgdGVtcGxhdGUgdG8gaW1wb3J0IGFuZCBleHBvcnQgb2JqZWN0IGluZm9ybWF0aW9uLid9ID0gJ1ThuqFvIG3hu5l0IG3huqt1IMSR4buDIG5o4bqtcCB2w6AgeHXhuqV0IHRow7RuZyB0aW4gxJHhu5FpIHTGsOG7o25nLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdGFydCBJbXBvcnQnfSA9ICdC4bqvdCDEkeG6p3Ugbmjhuq1wIHbDoG8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3RhcnQgRXhwb3J0J30gPSAnQuG6r3QgxJHhuqd1IHh14bqldCByYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdGVwIDEgb2YgNSAtIEVkaXQgY29tbW9uIGluZm9ybWF0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05hbWUgaXMgcmVxdWlyZWQhJ30gPSAnWcOqdSBj4bqndSBwaOG6o2kgY8OzIHTDqm4hJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J09iamVjdCBpcyByZXF1aXJlZCEnfSA9ICdZw6p1IGPhuqd1IHBo4bqjaSBjw7MgxJHhu5FpIHTGsOG7o25nISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGb3JtYXQgaXMgcmVxdWlyZWQhJ30gPSAnWcOqdSBj4bqndSBwaOG6o2kgY8OzIMSR4buLbmggZOG6oW5nISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdGVwIDIgb2YgNSAtIEVkaXQgb2JqZWN0IGluZm9ybWF0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N0ZXAgMyBvZiA1IC0gRWRpdCBmb3JtYXQgaW5mb3JtYXRpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnaXMgcmVxdWlyZWQhJ30gPSAnbMOgIGLhuq90IGJ14buZYyEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3RlcCA0IG9mIDUgLSBFZGl0IG1hcHBpbmcgaW5mb3JtYXRpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gbWFwIGVsZW1lbnRzIGZvdW5kLid9ID0gJ0tow7RuZyB0w6xtIHRo4bqleSDEkeG7kWkgdMaw4bujbmcgbWFwLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgTWFwcGluZyBFbGVtZW50J30gPSAnVGjDqm0gxJHhu5FpIHTGsOG7o25nIG1hcHBpbmcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3RlcCA1IG9mIDUgLSBFZGl0IHNlYXJjaCBpbmZvcm1hdGlvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXN0cmljdCBleHBvcnQgcGVyIHNlYXJjaCd9ID0gJ0dp4bubaSBo4bqhbiBk4buvIGxp4buHdSB4deG6pXQgbeG7l2kgbOG6p24gdMOsbSBraeG6v20nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW1wb3J0IGluZm9ybWF0aW9uJ30gPSAnVGjDtG5nIHRpbiBuaOG6rXAgdsOgbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTb3VyY2UgRmlsZSd9ID0gJ1Thu4dwIG5ndeG7k24nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW1wb3J0IHN1bW1hcnkgZm9yICVzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlY29yZHMnfSA9ICdC4bqjbiBnaGknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3VjY2Vzcyd9ID0gJ1Row6BuaCBjw7RuZyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEdXBsaWNhdGUgbmFtZXMnfSA9ICdUcsO5bmcgdMOqbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXN0IHByb2Nlc3NlZCBsaW5lIG51bWJlciBvZiBpbXBvcnQgZmlsZSd9ID0gJ0TDsm5nIGN14buRaSBjw7luZyDEkcaw4bujYyB44butIGzDvSB0cm9uZyB04buHcCBuaOG6rXAgdsOgbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPayd9ID0gJ8SQ4buTbmcgw70nOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FkbWluSW1wb3J0RXhwb3J0LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBvYmplY3QgYmFja2VuZCBmb3VuZCEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gZm9ybWF0IGJhY2tlbmQgZm91bmQhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RlbXBsYXRlIG5vdCBmb3VuZCEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2FuXCd0IGluc2VydC91cGRhdGUgdGVtcGxhdGUhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05lZWRlZCBUZW1wbGF0ZUlEISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFcnJvciBvY2N1cnJlZC4gSW1wb3J0IGltcG9zc2libGUhIFNlZSBTeXNsb2cgZm9yIGRldGFpbHMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Vycm9yIG9jY3VycmVkLiBFeHBvcnQgaW1wb3NzaWJsZSEgU2VlIFN5c2xvZyBmb3IgZGV0YWlscy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGVtcGxhdGUgTGlzdCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydudW1iZXInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnbnVtYmVyIGJpZ2dlciB0aGFuIHplcm8nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnaW50ZWdlcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydpbnRlZ2VyIGJpZ2dlciB0aGFuIHplcm8nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWxlbWVudCByZXF1aXJlZCwgcGxlYXNlIGluc2VydCBkYXRhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ludmFsaWQgZGF0YSwgcGxlYXNlIGluc2VydCBhIHZhbGlkICVzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zvcm1hdCBub3QgZm91bmQhJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvU3lzdGVtL0ltcG9ydEV4cG9ydC9Gb3JtYXRCYWNrZW5kL0NTVi5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29sdW1uIFNlcGFyYXRvcid9ID0gJ1Bow6JuIGPDoWNoIGPhu5l0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RhYnVsYXRvciAoVEFCKSd9ID0gJ0Lhu5kgbOG6rXAgYuG6o25nIChUQUIpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlbWljb2xvbiAoOyknfSA9ICdE4bqldSBjaOG6pW0gcGjhuql5ICg7KSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb2xvbiAoOiknfSA9ICdE4bqldSBoYWkgY2jhuqVtICg6KSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEb3QgKC4pJ30gPSAnROG6pXUgY2jhuqVtICguKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb21tYSAoLCknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhcnNldCd9ID0gJ0Lhu5kgbcOjIGvDvSB04buxJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY2x1ZGUgQ29sdW1uIEhlYWRlcnMnfSA9ICdH4buTbSB0acOqdSDEkeG7gSBj4buZdCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb2x1bW4nfSA9ICdD4buZdCc7CgogICAgIyBTeXNDb25maWcKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zvcm1hdCBiYWNrZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBpbXBvcnQvZXhwb3J0IG1vZHVsZS4nfSA9CiAgICAgICAgJ8SQxINuZyBrw70gbcO0LcSRdW4gxJHhu4tuaCBk4bqhbmcgbuG7gW4gY2hvIG3DtC3EkXVuIG5o4bqtcC94deG6pXQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW1wb3J0IGFuZCBleHBvcnQgb2JqZWN0IGluZm9ybWF0aW9uLid9ID0gJ1Row7RuZyB0aW4gbmjhuq1wIHbDoCB4deG6pXQgxJHhu5FpIHTGsOG7o25nLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbXBvcnQvRXhwb3J0J30gPSAnTmjhuq1wL1h14bqldCc7CgoKICAgIHB1c2ggQHsgJFNlbGYtPntKYXZhU2NyaXB0U3RyaW5nc30gLy8gW10gfSwgKAogICAgKTsKCn0KCjE7Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6OnpoX0NOX0ltcG9ydEV4cG9ydDsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7CgpzdWIgRGF0YSB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwoKICAgICMgVGVtcGxhdGU6IEFkbWluSW1wb3J0RXhwb3J0CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbXBvcnQvRXhwb3J0IE1hbmFnZW1lbnQnfSA9ICflr7zlhaUv5a+85Ye6566h55CGJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyZWF0ZSBhIHRlbXBsYXRlIHRvIGltcG9ydCBhbmQgZXhwb3J0IG9iamVjdCBpbmZvcm1hdGlvbi4nfSA9ICfliJvlu7rmqKHmnb/lr7zlhaXlkozlr7zlh7rlr7nosaHkv6Hmga/jgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3RhcnQgSW1wb3J0J30gPSAn5byA5aeL5a+85YWlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N0YXJ0IEV4cG9ydCd9ID0gJ+W8gOWni+WvvOWHuic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdGVwIDEgb2YgNSAtIEVkaXQgY29tbW9uIGluZm9ybWF0aW9uJ30gPSAn5q2l6aqkIDEvNSAtIOe8lui+kemAmueUqOS/oeaBryc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOYW1lIGlzIHJlcXVpcmVkISd9ID0gJ+WRveWQjeaYr+W/hemcgOeahO+8gSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPYmplY3QgaXMgcmVxdWlyZWQhJ30gPSAn5a+56LGh5piv5b+F6ZyA55qE77yBJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zvcm1hdCBpcyByZXF1aXJlZCEnfSA9ICfmoLzlvI/mmK/lv4XpnIDnmoTvvIEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3RlcCAyIG9mIDUgLSBFZGl0IG9iamVjdCBpbmZvcm1hdGlvbid9ID0gJ+atpemqpCAyLzUgLSDnvJbovpHnm67moIfkv6Hmga8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3RlcCAzIG9mIDUgLSBFZGl0IGZvcm1hdCBpbmZvcm1hdGlvbid9ID0gJ+atpemqpCAzLzUgLSDnvJbovpHmoLzlvI/kv6Hmga8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnaXMgcmVxdWlyZWQhJ30gPSAn5piv5b+F6ZyA55qE77yBJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N0ZXAgNCBvZiA1IC0gRWRpdCBtYXBwaW5nIGluZm9ybWF0aW9uJ30gPSAn5q2l6aqkIDQvNSAtIOe8lui+keaYoOWwhOS/oeaBryc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBtYXAgZWxlbWVudHMgZm91bmQuJ30gPSAn5rKh5pyJ5om+5Yiw5pig5bCE55qE5a2X5q61JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBNYXBwaW5nIEVsZW1lbnQnfSA9ICfmt7vliqDmmKDlsITlrZfmrrUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3RlcCA1IG9mIDUgLSBFZGl0IHNlYXJjaCBpbmZvcm1hdGlvbid9ID0gJ+atpemqpCA1LzUgLSDnvJbovpHmkJzntKLkv6Hmga8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVzdHJpY3QgZXhwb3J0IHBlciBzZWFyY2gnfSA9ICfmjInmkJzntKLpmZDliLblr7zlh7onOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW1wb3J0IGluZm9ybWF0aW9uJ30gPSAn5a+85YWl5L+h5oGvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NvdXJjZSBGaWxlJ30gPSAn5rqQ5paH5Lu2JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ltcG9ydCBzdW1tYXJ5IGZvciAlcyd9ID0gJyVz55qE5a+85YWl5pGY6KaBJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlY29yZHMnfSA9ICforrDlvZUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3VjY2Vzcyd9ID0gJ+aIkOWKnyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEdXBsaWNhdGUgbmFtZXMnfSA9ICfph43lpI3nmoTlkI3np7AnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGFzdCBwcm9jZXNzZWQgbGluZSBudW1iZXIgb2YgaW1wb3J0IGZpbGUnfSA9ICflr7zlhaXmlofku7bmnIDlkI7lpITnkIbnmoTooYzmlbAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT2snfSA9ICfnoa7lrponOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FkbWluSW1wb3J0RXhwb3J0LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBvYmplY3QgYmFja2VuZCBmb3VuZCEnfSA9ICfmsqHmnInmib7liLDlr7nosaHnmoTlkI7nq6/vvIEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gZm9ybWF0IGJhY2tlbmQgZm91bmQhJ30gPSAn5rKh5pyJ5om+5Yiw5qC85byP55qE5ZCO56uv77yBJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RlbXBsYXRlIG5vdCBmb3VuZCEnfSA9ICfmsqHmnInmib7liLDmqKHmnb/vvIEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2FuXCd0IGluc2VydC91cGRhdGUgdGVtcGxhdGUhJ30gPSAn5LiN6IO95o+S5YWlL+abtOaWsOaooeadv++8gSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZWVkZWQgVGVtcGxhdGVJRCEnfSA9ICfpnIDopoFUZW1wbGF0ZUlE77yBJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Vycm9yIG9jY3VycmVkLiBJbXBvcnQgaW1wb3NzaWJsZSEgU2VlIFN5c2xvZyBmb3IgZGV0YWlscy4nfSA9ICflh7rnjrDplJnor6/jgILkuI3og73lr7zlhaXvvIHmn6XnnItTeXNsb2fojrflj5bor6bnu4bkv6Hmga/jgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRXJyb3Igb2NjdXJyZWQuIEV4cG9ydCBpbXBvc3NpYmxlISBTZWUgU3lzbG9nIGZvciBkZXRhaWxzLid9ID0gJ+WHuueOsOmUmeivr+OAguS4jeiDveWvvOWHuu+8geafpeeci1N5c2xvZ+iOt+WPluivpue7huS/oeaBr+OAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUZW1wbGF0ZSBMaXN0J30gPSAn5qih5p2/5riF5Y2VJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J251bWJlcid9ID0gJ+aVsOWtlyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydudW1iZXIgYmlnZ2VyIHRoYW4gemVybyd9ID0gJ+aVsOWtl+Wkp+S6jjAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnaW50ZWdlcid9ID0gJ+aVtOaVsCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydpbnRlZ2VyIGJpZ2dlciB0aGFuIHplcm8nfSA9ICfmlbTmlbDlpKfkuo4wJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VsZW1lbnQgcmVxdWlyZWQsIHBsZWFzZSBpbnNlcnQgZGF0YSd9ID0gJ+mcgOimgeWFg+e0oO+8jOivt+aPkuWFpeaVsOaNric7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbnZhbGlkIGRhdGEsIHBsZWFzZSBpbnNlcnQgYSB2YWxpZCAlcyd9ID0gJ+aXoOaViOeahOaVsOaNru+8jOivt+aPkuWFpeS4gOS4quacieaViOeahCVzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zvcm1hdCBub3QgZm91bmQhJ30gPSAn5rKh5pyJ5om+5Yiw5qC85byP77yBJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvU3lzdGVtL0ltcG9ydEV4cG9ydC9Gb3JtYXRCYWNrZW5kL0NTVi5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29sdW1uIFNlcGFyYXRvcid9ID0gJ+WIl+WIhumalOespic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUYWJ1bGF0b3IgKFRBQiknfSA9ICdUQULplK4gKFRBQiknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VtaWNvbG9uICg7KSd9ID0gJ+WIhuWPtyAoOyknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29sb24gKDopJ30gPSAn5YaS5Y+3ICg6KSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEb3QgKC4pJ30gPSAn5Y+l5Y+3ICguKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb21tYSAoLCknfSA9ICfpgJflj7fvvIgs77yJJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYXJzZXQnfSA9ICflrZfnrKbpm4YnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5jbHVkZSBDb2x1bW4gSGVhZGVycyd9ID0gJ+WMheaLrOWIl+agh+mimCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb2x1bW4nfSA9ICfliJcnOwoKICAgICMgU3lzQ29uZmlnCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGb3JtYXQgYmFja2VuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgaW1wb3J0L2V4cG9ydCBtb2R1bGUuJ30gPQogICAgICAgICfkuLrlr7zlhaUv5a+85Ye65qih5Z2X55qE5qC85byP5ZCO56uv5qih5Z2X5rOo5YaM44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ltcG9ydCBhbmQgZXhwb3J0IG9iamVjdCBpbmZvcm1hdGlvbi4nfSA9ICflr7zlhaXlkozlr7zlh7rlr7nosaHkv6Hmga/jgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW1wb3J0L0V4cG9ydCd9ID0gJ+WvvOWFpS/lr7zlh7onOwoKCiAgICBwdXNoIEB7ICRTZWxmLT57SmF2YVNjcmlwdFN0cmluZ3N9IC8vIFtdIH0sICgKICAgICk7Cgp9CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6OnpoX1RXX0ltcG9ydEV4cG9ydDsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7CgpzdWIgRGF0YSB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwoKICAgICMgVGVtcGxhdGU6IEFkbWluSW1wb3J0RXhwb3J0CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbXBvcnQvRXhwb3J0IE1hbmFnZW1lbnQnfSA9ICflsI7lhaUv5bCO5Ye6566h55CGJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyZWF0ZSBhIHRlbXBsYXRlIHRvIGltcG9ydCBhbmQgZXhwb3J0IG9iamVjdCBpbmZvcm1hdGlvbi4nfSA9ICflibXlu7rmqKHmnb/lsI7lhaXlkozlsI7lh7rlsI3osaHkv6Hmga/jgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3RhcnQgSW1wb3J0J30gPSAn6ZaL5aeL5bCO5YWlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N0YXJ0IEV4cG9ydCd9ID0gJ+mWi+Wni+WwjuWHuic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdGVwIDEgb2YgNSAtIEVkaXQgY29tbW9uIGluZm9ybWF0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05hbWUgaXMgcmVxdWlyZWQhJ30gPSAn5ZCN56ix5piv5b+F6ZyA55qE77yBJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J09iamVjdCBpcyByZXF1aXJlZCEnfSA9ICflsI3osaHmmK/lv4XpnIDnmoTvvIEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRm9ybWF0IGlzIHJlcXVpcmVkISd9ID0gJ+agvOW8j+aYr+W/hemcgOeahCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdGVwIDIgb2YgNSAtIEVkaXQgb2JqZWN0IGluZm9ybWF0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N0ZXAgMyBvZiA1IC0gRWRpdCBmb3JtYXQgaW5mb3JtYXRpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnaXMgcmVxdWlyZWQhJ30gPSAn5b+F6ZyA55qEJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N0ZXAgNCBvZiA1IC0gRWRpdCBtYXBwaW5nIGluZm9ybWF0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIG1hcCBlbGVtZW50cyBmb3VuZC4nfSA9ICfmspLmnInmib7liLDmmKDlsITnmoTlrZfmrrUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIE1hcHBpbmcgRWxlbWVudCd9ID0gJ+a3u+WKoOaYoOWwhOWtl+autSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdGVwIDUgb2YgNSAtIEVkaXQgc2VhcmNoIGluZm9ybWF0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Jlc3RyaWN0IGV4cG9ydCBwZXIgc2VhcmNoJ30gPSAn6ZmQ5Yi25bCO5Ye65q+P5YCL5pCc5bCLJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ltcG9ydCBpbmZvcm1hdGlvbid9ID0gJ+WwjuWFpeS/oeaBryc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTb3VyY2UgRmlsZSd9ID0gJ+a6kOaWh+S7tic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbXBvcnQgc3VtbWFyeSBmb3IgJXMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVjb3Jkcyd9ID0gJ+e0gOmMhCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdWNjZXNzJ30gPSAn5oiQ5YqfJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0R1cGxpY2F0ZSBuYW1lcyd9ID0gJ+mHjeikh+eahOWQjeeosSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXN0IHByb2Nlc3NlZCBsaW5lIG51bWJlciBvZiBpbXBvcnQgZmlsZSd9ID0gJ+WwjuWFpeaWh+S7tuacgOW+jOiZleeQhueahOihjOaVuCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPayd9ID0gJ09rJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZG1pbkltcG9ydEV4cG9ydC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gb2JqZWN0IGJhY2tlbmQgZm91bmQhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIGZvcm1hdCBiYWNrZW5kIGZvdW5kISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUZW1wbGF0ZSBub3QgZm91bmQhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhblwndCBpbnNlcnQvdXBkYXRlIHRlbXBsYXRlISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZWVkZWQgVGVtcGxhdGVJRCEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRXJyb3Igb2NjdXJyZWQuIEltcG9ydCBpbXBvc3NpYmxlISBTZWUgU3lzbG9nIGZvciBkZXRhaWxzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFcnJvciBvY2N1cnJlZC4gRXhwb3J0IGltcG9zc2libGUhIFNlZSBTeXNsb2cgZm9yIGRldGFpbHMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RlbXBsYXRlIExpc3QnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnbnVtYmVyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J251bWJlciBiaWdnZXIgdGhhbiB6ZXJvJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2ludGVnZXInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnaW50ZWdlciBiaWdnZXIgdGhhbiB6ZXJvJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VsZW1lbnQgcmVxdWlyZWQsIHBsZWFzZSBpbnNlcnQgZGF0YSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbnZhbGlkIGRhdGEsIHBsZWFzZSBpbnNlcnQgYSB2YWxpZCAlcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGb3JtYXQgbm90IGZvdW5kISd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL1N5c3RlbS9JbXBvcnRFeHBvcnQvRm9ybWF0QmFja2VuZC9DU1YucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbHVtbiBTZXBhcmF0b3InfSA9ICfliJfliIbpmpTnrKYnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGFidWxhdG9yIChUQUIpJ30gPSAn5Yi26KGo6Y21IChUQUIpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlbWljb2xvbiAoOyknfSA9ICfliIbomZ8gKDspJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbG9uICg6KSd9ID0gJ+WGkuiZnyAoOiknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRG90ICguKSd9ID0gJ+WPpeiZnyAoLiknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29tbWEgKCwpJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYXJzZXQnfSA9ICflrZfnrKbpm4YnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5jbHVkZSBDb2x1bW4gSGVhZGVycyd9ID0gJ+WMheaLrOWIl+aomemhjCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb2x1bW4nfSA9ICfliJcnOwoKICAgICMgU3lzQ29uZmlnCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGb3JtYXQgYmFja2VuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgaW1wb3J0L2V4cG9ydCBtb2R1bGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW1wb3J0IGFuZCBleHBvcnQgb2JqZWN0IGluZm9ybWF0aW9uLid9ID0gJ+WwjuWFpeWSjOWwjuWHuuWwjeixoeS/oeaBryc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbXBvcnQvRXhwb3J0J30gPSAn5bCO5YWlL+WwjuWHuic7CgoKICAgIHB1c2ggQHsgJFNlbGYtPntKYXZhU2NyaXB0U3RyaW5nc30gLy8gW10gfSwgKAogICAgKTsKCn0KCjE7Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TW9kdWxlczo6QWRtaW5JbXBvcnRFeHBvcnQ7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7Cgp1c2UgS2VybmVsOjpMYW5ndWFnZSBxdyhUcmFuc2xhdGFibGUpOwoKb3VyICRPYmplY3RNYW5hZ2VyRGlzYWJsZWQgPSAxOwoKc3ViIG5ldyB7CiAgICBteSAoICRUeXBlLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgYWxsb2NhdGUgbmV3IGhhc2ggZm9yIG9iamVjdAogICAgbXkgJFNlbGYgPSB7JVBhcmFtfTsKICAgIGJsZXNzKCAkU2VsZiwgJFR5cGUgKTsKCiAgICByZXR1cm4gJFNlbGY7Cn0KCnN1YiBSdW4gewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGdldCBuZWVkZWQgb2JqZWN0cwogICAgbXkgJEltcG9ydEV4cG9ydE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpJbXBvcnRFeHBvcnQnKTsKICAgIG15ICRQYXJhbU9iamVjdCAgICAgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6V2ViOjpSZXF1ZXN0Jyk7CiAgICBteSAkTGF5b3V0T2JqZWN0ICAgICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxheW91dCcpOwoKICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKICAgICMgdGVtcGxhdGUgZWRpdCAoY29tbW9uKQogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwogICAgaWYgKCAkU2VsZi0+e1N1YmFjdGlvbn0gZXEgJ1RlbXBsYXRlRWRpdDEnICkgewoKICAgICAgICAjIGdldCBvYmplY3QgbGlzdAogICAgICAgIG15ICRPYmplY3RMaXN0ID0gJEltcG9ydEV4cG9ydE9iamVjdC0+T2JqZWN0TGlzdCgpOwoKICAgICAgICBpZiAoICEkT2JqZWN0TGlzdCApIHsKICAgICAgICAgICAgJExheW91dE9iamVjdC0+RmF0YWxFcnJvcigKICAgICAgICAgICAgICAgIE1lc3NhZ2UgPT4gVHJhbnNsYXRhYmxlKCdObyBvYmplY3QgYmFja2VuZCBmb3VuZCEnKSwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgIyBnZXQgZm9ybWF0IGxpc3QKICAgICAgICBteSAkRm9ybWF0TGlzdCA9ICRJbXBvcnRFeHBvcnRPYmplY3QtPkZvcm1hdExpc3QoKTsKCiAgICAgICAgaWYgKCAhJEZvcm1hdExpc3QgKSB7CiAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkZhdGFsRXJyb3IoCiAgICAgICAgICAgICAgICBNZXNzYWdlID0+IFRyYW5zbGF0YWJsZSgnTm8gZm9ybWF0IGJhY2tlbmQgZm91bmQhJyksCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CgogICAgICAgICMgZ2V0IHBhcmFtcwogICAgICAgIG15ICRUZW1wbGF0ZURhdGE7CiAgICAgICAgbXkgJFRlbXBsYXRlSUQgPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnVGVtcGxhdGVJRCcgKTsKCiAgICAgICAgbXkgJFNhdmVDb250aW51ZSA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICdTdWJtaXROZXh0JyApOwoKICAgICAgICBpZiAoICEkU2F2ZUNvbnRpbnVlICkgewoKICAgICAgICAgICAgIyBpZiBuZWVkZWQgbmV3IGZvcm0KICAgICAgICAgICAgaWYgKCAhJFRlbXBsYXRlSUQgKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gJFNlbGYtPl9NYXNrVGVtcGxhdGVFZGl0MSgKICAgICAgICAgICAgICAgICAgICBOZXcgPT4gMSwKICAgICAgICAgICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CgogICAgICAgICAgICAjIGlmIHRoZXJlIGlzIHRlbXBsYXRlIGlkCiAgICAgICAgICAgICMgZ2V0IHRlbXBsYXRlIGRhdGEKICAgICAgICAgICAgJFRlbXBsYXRlRGF0YSA9ICRJbXBvcnRFeHBvcnRPYmplY3QtPlRlbXBsYXRlR2V0KAogICAgICAgICAgICAgICAgVGVtcGxhdGVJRCA9PiAkVGVtcGxhdGVJRCwKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICAgICApOwoKICAgICAgICAgICAgaWYgKCAhJFRlbXBsYXRlRGF0YS0+e1RlbXBsYXRlSUR9ICkgewogICAgICAgICAgICAgICAgJExheW91dE9iamVjdC0+RmF0YWxFcnJvcigKICAgICAgICAgICAgICAgICAgICBNZXNzYWdlID0+IFRyYW5zbGF0YWJsZSgnVGVtcGxhdGUgbm90IGZvdW5kIScpLAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBpZiBlZGl0CiAgICAgICAgICAgIGlmICggJFRlbXBsYXRlRGF0YS0+e1RlbXBsYXRlSUR9ICkgewogICAgICAgICAgICAgICAgcmV0dXJuICRTZWxmLT5fTWFza1RlbXBsYXRlRWRpdDEoICVQYXJhbSwgJXskVGVtcGxhdGVEYXRhfSApOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAjIGlmIHNhdmUgJiBjb250aW51ZQogICAgICAgIG15ICVTZXJ2ZXJFcnJvcjsKCiAgICAgICAgIyBnZXQgYWxsIGRhdGEgZm9yIHBhcmFtcyBhbmQgY2hlY2sgZm9yIGVycm9ycwogICAgICAgIGZvciBteSAkUGFyYW0gKHF3KENvbW1lbnQgT2JqZWN0IEZvcm1hdCBOYW1lIFZhbGlkSUQgVGVtcGxhdGVJRCkpIHsKICAgICAgICAgICAgJFRlbXBsYXRlRGF0YS0+eyRQYXJhbX0gPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAkUGFyYW0gKSB8fCAnJzsKICAgICAgICB9CgogICAgICAgICMgaXMgYSBuZXcgdGVtcGxhdGU/CiAgICAgICAgbXkgJE5ldzsKICAgICAgICBpZiAoICEkVGVtcGxhdGVEYXRhLT57VGVtcGxhdGVJRH0gKSB7CiAgICAgICAgICAgICROZXcgPSAxOwogICAgICAgIH0KCiAgICAgICAgIyBjaGVjayBuZWVkZWQgZmllbGRzCiAgICAgICAgIyBmb3IgbmV3IHRlbXBsYXRlcwogICAgICAgIGlmICgkTmV3KSB7CgogICAgICAgICAgICBpZiAoICEkVGVtcGxhdGVEYXRhLT57T2JqZWN0fSApIHsKICAgICAgICAgICAgICAgICRTZXJ2ZXJFcnJvcntPYmplY3R9ID0gMTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgaWYgKCAhJFRlbXBsYXRlRGF0YS0+e0Zvcm1hdH0gKSB7CiAgICAgICAgICAgICAgICAkU2VydmVyRXJyb3J7Rm9ybWF0fSA9IDE7CiAgICAgICAgICAgIH0KCiAgICAgICAgfQoKICAgICAgICAjIGZvciBhbGwgdGVtcGxhdGVzCiAgICAgICAgaWYgKCAhJFRlbXBsYXRlRGF0YS0+e05hbWV9ICkgewogICAgICAgICAgICAkU2VydmVyRXJyb3J7TmFtZX0gPSAxOwogICAgICAgIH0KCiAgICAgICAgIyBpZiBzb21lIGVycm9yCiAgICAgICAgaWYgKCAkU2VydmVyRXJyb3J7Rm9ybWF0fSB8fCAkU2VydmVyRXJyb3J7T2JqZWN0fSB8fCAkU2VydmVyRXJyb3J7TmFtZX0gKSB7CiAgICAgICAgICAgIHJldHVybiAkU2VsZi0+X01hc2tUZW1wbGF0ZUVkaXQxKAogICAgICAgICAgICAgICAgU2VydmVyRXJyb3IgPT4gXCVTZXJ2ZXJFcnJvciwKICAgICAgICAgICAgICAgIE5ldyAgICAgICAgID0+ICROZXcsCiAgICAgICAgICAgICAgICAleyRUZW1wbGF0ZURhdGF9LAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgIyBzYXZlIHRvIGRhdGFiYXNlCiAgICAgICAgbXkgJFN1Y2Nlc3M7CgogICAgICAgIGlmICgkTmV3KSB7CiAgICAgICAgICAgICRUZW1wbGF0ZURhdGEtPntUZW1wbGF0ZUlEfSA9ICRJbXBvcnRFeHBvcnRPYmplY3QtPlRlbXBsYXRlQWRkKAogICAgICAgICAgICAgICAgJXskVGVtcGxhdGVEYXRhfSwKICAgICAgICAgICAgICAgIFVzZXJJRCA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgICk7CiAgICAgICAgICAgICRTdWNjZXNzID0gJFRlbXBsYXRlRGF0YS0+e1RlbXBsYXRlSUR9OwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgJFN1Y2Nlc3MgPSAkSW1wb3J0RXhwb3J0T2JqZWN0LT5UZW1wbGF0ZVVwZGF0ZSgKICAgICAgICAgICAgICAgIFVzZXJJRCA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgICAgICAleyRUZW1wbGF0ZURhdGF9LAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgaWYgKCAhJFN1Y2Nlc3MgKSB7CiAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkZhdGFsRXJyb3IoCiAgICAgICAgICAgICAgICBNZXNzYWdlID0+IFRyYW5zbGF0YWJsZSgnQ2FuXCd0IGluc2VydC91cGRhdGUgdGVtcGxhdGUhJyksCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5SZWRpcmVjdCgKICAgICAgICAgICAgT1AgPT4KICAgICAgICAgICAgICAgICJBY3Rpb249JFNlbGYtPntBY3Rpb259O1N1YmFjdGlvbj1UZW1wbGF0ZUVkaXQyO1RlbXBsYXRlSUQ9JFRlbXBsYXRlRGF0YS0+e1RlbXBsYXRlSUR9IiwKICAgICAgICApOwogICAgfQoKICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKICAgICMgdGVtcGxhdGUgZWRpdCAob2JqZWN0KQogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwogICAgZWxzaWYgKCAkU2VsZi0+e1N1YmFjdGlvbn0gZXEgJ1RlbXBsYXRlRWRpdDInICkgewoKICAgICAgICAjIGdldCBvYmplY3QgbGlzdAogICAgICAgIG15ICRPYmplY3RMaXN0ID0gJEltcG9ydEV4cG9ydE9iamVjdC0+T2JqZWN0TGlzdCgpOwoKICAgICAgICBpZiAoICEkT2JqZWN0TGlzdCApIHsKICAgICAgICAgICAgJExheW91dE9iamVjdC0+RmF0YWxFcnJvcigKICAgICAgICAgICAgICAgIE1lc3NhZ2UgPT4gVHJhbnNsYXRhYmxlKCdObyBvYmplY3QgYmFja2VuZCBmb3VuZCEnKSwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgIyBnZXQgZm9ybWF0IGxpc3QKICAgICAgICBteSAkRm9ybWF0TGlzdCA9ICRJbXBvcnRFeHBvcnRPYmplY3QtPkZvcm1hdExpc3QoKTsKCiAgICAgICAgaWYgKCAhJEZvcm1hdExpc3QgKSB7CiAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkZhdGFsRXJyb3IoCiAgICAgICAgICAgICAgICBNZXNzYWdlID0+IFRyYW5zbGF0YWJsZSgnTm8gZm9ybWF0IGJhY2tlbmQgZm91bmQhJyksCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CgogICAgICAgICMgZ2V0IHRlbXBsYXRlIGlkCiAgICAgICAgbXkgJFRlbXBsYXRlSUQgPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnVGVtcGxhdGVJRCcgKTsKCiAgICAgICAgaWYgKCAhJFRlbXBsYXRlSUQgKSB7CiAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkZhdGFsRXJyb3IoCiAgICAgICAgICAgICAgICBNZXNzYWdlID0+IFRyYW5zbGF0YWJsZSgnTmVlZGVkIFRlbXBsYXRlSUQhJyksCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CgogICAgICAgIG15ICRTdWJtaXROZXh0ID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJ1N1Ym1pdE5leHQnICk7CgogICAgICAgIGlmICggISRTdWJtaXROZXh0ICkgewogICAgICAgICAgICByZXR1cm4gJFNlbGYtPl9NYXNrVGVtcGxhdGVFZGl0MiggVGVtcGxhdGVJRCA9PiAkVGVtcGxhdGVJRCApOwogICAgICAgIH0KCiAgICAgICAgIyBzYXZlIHRlbXBsYXRlIHN0YXJ0cyBoZXJlCgogICAgICAgICMgZ2V0IG9iamVjdCBhdHRyaWJ1dGVzCiAgICAgICAgbXkgJE9iamVjdEF0dHJpYnV0ZUxpc3QgPSAkSW1wb3J0RXhwb3J0T2JqZWN0LT5PYmplY3RBdHRyaWJ1dGVzR2V0KAogICAgICAgICAgICBUZW1wbGF0ZUlEID0+ICRUZW1wbGF0ZUlELAogICAgICAgICAgICBVc2VySUQgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICApOwoKICAgICAgICBteSAlQXR0cmlidXRlVmFsdWVzOwoKICAgICAgICBteSAkRXJyb3IgPSAwOwogICAgICAgIG15ICVTZXJ2ZXJFcnJvcjsKICAgICAgICBteSAlRGF0YVR5cGVFcnJvcjsKCiAgICAgICAgIyBnZXQgYXR0cmlidXRlIHZhbHVlcyBmcm9tIGZvcm0KICAgICAgICBmb3IgbXkgJEl0ZW0gKCBAeyRPYmplY3RBdHRyaWJ1dGVMaXN0fSApIHsKCiAgICAgICAgICAgICMgZ2V0IGZvcm0gZGF0YQogICAgICAgICAgICAkQXR0cmlidXRlVmFsdWVzeyAkSXRlbS0+e0tleX0gfSA9ICRMYXlvdXRPYmplY3QtPkltcG9ydEV4cG9ydEZvcm1EYXRhR2V0KAogICAgICAgICAgICAgICAgSXRlbSA9PiAkSXRlbSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgcmVsb2FkIGZvcm0gaWYgdmFsdWUgaXMgcmVxdWlyZWQgYW5kIGlzIG5vdCB0aGVyZQogICAgICAgICAgICBpZiAoICRJdGVtLT57Rm9ybX0tPntJbnZhbGlkfSApIHsKICAgICAgICAgICAgICAgICRTZXJ2ZXJFcnJvcnsgJEl0ZW0tPntOYW1lfSB9ID0gMTsKICAgICAgICAgICAgICAgICRFcnJvciA9IDE7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmICggJEF0dHJpYnV0ZVZhbHVlc3sgJEl0ZW0tPntLZXl9IH0gKSB7CgogICAgICAgICAgICAgICAgIyBsb29rIGZvciByZWdleHAgZm9yIGRhdGEgdHlwZSBhbGxvd2VkCiAgICAgICAgICAgICAgICBpZiAoCiAgICAgICAgICAgICAgICAgICAgJEl0ZW0tPntJbnB1dH0tPntSZWdleH0KICAgICAgICAgICAgICAgICAgICAmJgogICAgICAgICAgICAgICAgICAgICEkQXR0cmlidXRlVmFsdWVzeyAkSXRlbS0+e0tleX0gfSA9fiAkSXRlbS0+e0lucHV0fS0+e1JlZ2V4fQogICAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIHsKCiAgICAgICAgICAgICAgICAgICAgJERhdGFUeXBlRXJyb3J7ICRJdGVtLT57TmFtZX0gfSA9IDE7CiAgICAgICAgICAgICAgICAgICAgJEVycm9yID0gMTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgIyByZWxvYWQgd2l0aCBzZXJ2ZXIgZXJyb3JzCiAgICAgICAgaWYgKCRFcnJvcikgewogICAgICAgICAgICByZXR1cm4gJFNlbGYtPl9NYXNrVGVtcGxhdGVFZGl0MigKICAgICAgICAgICAgICAgIFNlcnZlckVycm9yICAgICAgPT4gXCVTZXJ2ZXJFcnJvciwKICAgICAgICAgICAgICAgIERhdGFUeXBlRXJyb3IgICAgPT4gXCVEYXRhVHlwZUVycm9yLAogICAgICAgICAgICAgICAgVGVtcGxhdGVEYXRhRm9ybSA9PiBcJUF0dHJpYnV0ZVZhbHVlcywKICAgICAgICAgICAgICAgIFRlbXBsYXRlSUQgICAgICAgPT4gJFRlbXBsYXRlSUQsCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAjIHNhdmUgdGhlIG9iamVjdCBkYXRhCiAgICAgICAgJEltcG9ydEV4cG9ydE9iamVjdC0+T2JqZWN0RGF0YVNhdmUoCiAgICAgICAgICAgIFRlbXBsYXRlSUQgPT4gJFRlbXBsYXRlSUQsCiAgICAgICAgICAgIE9iamVjdERhdGEgPT4gXCVBdHRyaWJ1dGVWYWx1ZXMsCiAgICAgICAgICAgIFVzZXJJRCAgICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICk7CgogICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5SZWRpcmVjdCgKICAgICAgICAgICAgT1AgPT4gIkFjdGlvbj0kU2VsZi0+e0FjdGlvbn07U3ViYWN0aW9uPVRlbXBsYXRlRWRpdDM7VGVtcGxhdGVJRD0kVGVtcGxhdGVJRCIsCiAgICAgICAgKTsKICAgIH0KCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICAjIHRlbXBsYXRlIGVkaXQgKGZvcm1hdCkKICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKICAgIGVsc2lmICggJFNlbGYtPntTdWJhY3Rpb259IGVxICdUZW1wbGF0ZUVkaXQzJyApIHsKCiAgICAgICAgIyBnZXQgb2JqZWN0IGxpc3QKICAgICAgICBteSAkT2JqZWN0TGlzdCA9ICRJbXBvcnRFeHBvcnRPYmplY3QtPk9iamVjdExpc3QoKTsKCiAgICAgICAgaWYgKCAhJE9iamVjdExpc3QgKSB7CiAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkZhdGFsRXJyb3IoCiAgICAgICAgICAgICAgICBNZXNzYWdlID0+IFRyYW5zbGF0YWJsZSgnTm8gb2JqZWN0IGJhY2tlbmQgZm91bmQhJyksCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CgogICAgICAgICMgZ2V0IGZvcm1hdCBsaXN0CiAgICAgICAgbXkgJEZvcm1hdExpc3QgPSAkSW1wb3J0RXhwb3J0T2JqZWN0LT5Gb3JtYXRMaXN0KCk7CgogICAgICAgIGlmICggISRGb3JtYXRMaXN0ICkgewogICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5GYXRhbEVycm9yKAogICAgICAgICAgICAgICAgTWVzc2FnZSA9PiBUcmFuc2xhdGFibGUoJ05vIGZvcm1hdCBiYWNrZW5kIGZvdW5kIScpLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQoKICAgICAgICAjIGdldCB0ZW1wbGF0ZSBpZAogICAgICAgIG15ICRUZW1wbGF0ZUlEID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJ1RlbXBsYXRlSUQnICk7CgogICAgICAgIGlmICggISRUZW1wbGF0ZUlEICkgewogICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5GYXRhbEVycm9yKAogICAgICAgICAgICAgICAgTWVzc2FnZSA9PiBUcmFuc2xhdGFibGUoJ05lZWRlZCBUZW1wbGF0ZUlEIScpLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQoKICAgICAgICBteSAkU3VibWl0TmV4dCA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICdTdWJtaXROZXh0JyApOwoKICAgICAgICBpZiAoICEkU3VibWl0TmV4dCApIHsKICAgICAgICAgICAgcmV0dXJuICRTZWxmLT5fTWFza1RlbXBsYXRlRWRpdDMoIFRlbXBsYXRlSUQgPT4gJFRlbXBsYXRlSUQgKTsKICAgICAgICB9CgogICAgICAgICMgc2F2ZSBzdGFydGluZyBoZXJlCgogICAgICAgICMgZ2V0IGZvcm1hdCBhdHRyaWJ1dGVzCiAgICAgICAgbXkgJEZvcm1hdEF0dHJpYnV0ZUxpc3QgPSAkSW1wb3J0RXhwb3J0T2JqZWN0LT5Gb3JtYXRBdHRyaWJ1dGVzR2V0KAogICAgICAgICAgICBUZW1wbGF0ZUlEID0+ICRUZW1wbGF0ZUlELAogICAgICAgICAgICBVc2VySUQgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICApOwoKICAgICAgICAjIGdldCBmb3JtYXQgZGF0YQogICAgICAgIG15ICRGb3JtYXREYXRhID0gJEltcG9ydEV4cG9ydE9iamVjdC0+Rm9ybWF0RGF0YUdldCgKICAgICAgICAgICAgVGVtcGxhdGVJRCA9PiAkVGVtcGxhdGVJRCwKICAgICAgICAgICAgVXNlcklEICAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgKTsKCiAgICAgICAgbXkgJEVycm9yID0gMDsKICAgICAgICBteSAlU2VydmVyRXJyb3I7CgogICAgICAgICMgZ2V0IGF0dHJpYnV0ZSB2YWx1ZXMgZnJvbSBmb3JtCiAgICAgICAgbXkgJUF0dHJpYnV0ZVZhbHVlczsKICAgICAgICBmb3IgbXkgJEl0ZW0gKCBAeyRGb3JtYXRBdHRyaWJ1dGVMaXN0fSApIHsKCiAgICAgICAgICAgICMgZ2V0IGZvcm0gZGF0YQogICAgICAgICAgICAkQXR0cmlidXRlVmFsdWVzeyAkSXRlbS0+e0tleX0gfSA9ICRMYXlvdXRPYmplY3QtPkltcG9ydEV4cG9ydEZvcm1EYXRhR2V0KAogICAgICAgICAgICAgICAgSXRlbSA9PiAkSXRlbSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgcmVsb2FkIGZvcm0gaWYgdmFsdWUgaXMgcmVxdWlyZWQKICAgICAgICAgICAgaWYgKCAkSXRlbS0+e0Zvcm19LT57SW52YWxpZH0gKSB7CiAgICAgICAgICAgICAgICAkU2VydmVyRXJyb3J7ICRJdGVtLT57TmFtZX0gfSA9IDE7CiAgICAgICAgICAgICAgICAkRXJyb3IgPSAxOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAjIHJlbG9hZCB3aXRoIHNlcnZlciBlcnJvcnMKICAgICAgICBpZiAoJEVycm9yKSB7CiAgICAgICAgICAgIHJldHVybiAkU2VsZi0+X01hc2tUZW1wbGF0ZUVkaXQzKAogICAgICAgICAgICAgICAgU2VydmVyRXJyb3IgPT4gXCVTZXJ2ZXJFcnJvciwKICAgICAgICAgICAgICAgIFRlbXBsYXRlSUQgID0+ICRUZW1wbGF0ZUlELAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgIyBzYXZlIHRoZSBmb3JtYXQgZGF0YQogICAgICAgICRJbXBvcnRFeHBvcnRPYmplY3QtPkZvcm1hdERhdGFTYXZlKAogICAgICAgICAgICBUZW1wbGF0ZUlEID0+ICRUZW1wbGF0ZUlELAogICAgICAgICAgICBGb3JtYXREYXRhID0+IFwlQXR0cmlidXRlVmFsdWVzLAogICAgICAgICAgICBVc2VySUQgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICApOwoKICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+UmVkaXJlY3QoCiAgICAgICAgICAgIE9QID0+ICJBY3Rpb249JFNlbGYtPntBY3Rpb259O1N1YmFjdGlvbj1UZW1wbGF0ZUVkaXQ0O1RlbXBsYXRlSUQ9JFRlbXBsYXRlSUQiLAogICAgICAgICk7CiAgICB9CgogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwogICAgIyB0ZW1wbGF0ZSBlZGl0IChtYXBwaW5nKQogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwogICAgZWxzaWYgKCAkU2VsZi0+e1N1YmFjdGlvbn0gZXEgJ1RlbXBsYXRlRWRpdDQnICkgewoKICAgICAgICAjIGdldCBvYmplY3QgbGlzdAogICAgICAgIG15ICRPYmplY3RMaXN0ID0gJEltcG9ydEV4cG9ydE9iamVjdC0+T2JqZWN0TGlzdCgpOwoKICAgICAgICBpZiAoICEkT2JqZWN0TGlzdCApIHsKICAgICAgICAgICAgJExheW91dE9iamVjdC0+RmF0YWxFcnJvcigKICAgICAgICAgICAgICAgIE1lc3NhZ2UgPT4gVHJhbnNsYXRhYmxlKCdObyBvYmplY3QgYmFja2VuZCBmb3VuZCEnKSwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgIyBnZXQgZm9ybWF0IGxpc3QKICAgICAgICBteSAkRm9ybWF0TGlzdCA9ICRJbXBvcnRFeHBvcnRPYmplY3QtPkZvcm1hdExpc3QoKTsKCiAgICAgICAgaWYgKCAhJEZvcm1hdExpc3QgKSB7CiAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkZhdGFsRXJyb3IoCiAgICAgICAgICAgICAgICBNZXNzYWdlID0+IFRyYW5zbGF0YWJsZSgnTm8gZm9ybWF0IGJhY2tlbmQgZm91bmQhJyksCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CgogICAgICAgICMgZ2V0IHBhcmFtcwogICAgICAgIG15ICRUZW1wbGF0ZURhdGEgPSB7fTsKICAgICAgICAkVGVtcGxhdGVEYXRhLT57VGVtcGxhdGVJRH0gPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnVGVtcGxhdGVJRCcgKTsKCiAgICAgICAgIyBnZXQgdGVtcGxhdGUgZGF0YQogICAgICAgICRUZW1wbGF0ZURhdGEgPSAkSW1wb3J0RXhwb3J0T2JqZWN0LT5UZW1wbGF0ZUdldCgKICAgICAgICAgICAgVGVtcGxhdGVJRCA9PiAkVGVtcGxhdGVEYXRhLT57VGVtcGxhdGVJRH0sCiAgICAgICAgICAgIFVzZXJJRCAgICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICk7CgogICAgICAgIGlmICggISRUZW1wbGF0ZURhdGEtPntUZW1wbGF0ZUlEfSApIHsKICAgICAgICAgICAgJExheW91dE9iamVjdC0+RmF0YWxFcnJvcigKICAgICAgICAgICAgICAgIE1lc3NhZ2UgPT4gVHJhbnNsYXRhYmxlKCdUZW1wbGF0ZSBub3QgZm91bmQhJyksCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CgogICAgICAgICMgZ2VuZXJhdGUgT2JqZWN0T3B0aW9uU3RyZwogICAgICAgIG15ICRPYmplY3RPcHRpb25TdHJnID0gJExheW91dE9iamVjdC0+QnVpbGRTZWxlY3Rpb24oCiAgICAgICAgICAgIERhdGEgICAgICAgICA9PiAkT2JqZWN0TGlzdCwKICAgICAgICAgICAgTmFtZSAgICAgICAgID0+ICdPYmplY3QnLAogICAgICAgICAgICBTZWxlY3RlZElEICAgPT4gJFRlbXBsYXRlRGF0YS0+e09iamVjdH0sCiAgICAgICAgICAgIFBvc3NpYmxlTm9uZSA9PiAxLAogICAgICAgICAgICBUcmFuc2xhdGlvbiAgPT4gMSwKICAgICAgICAgICAgQ2xhc3MgICAgICAgID0+ICdNb2Rlcm5pemUnLAogICAgICAgICk7CgogICAgICAgICMgZ2VuZXJhdGUgRm9ybWF0T3B0aW9uU3RyZwogICAgICAgIG15ICRGb3JtYXRPcHRpb25TdHJnID0gJExheW91dE9iamVjdC0+QnVpbGRTZWxlY3Rpb24oCiAgICAgICAgICAgIERhdGEgICAgICAgICA9PiAkRm9ybWF0TGlzdCwKICAgICAgICAgICAgTmFtZSAgICAgICAgID0+ICdGb3JtYXQnLAogICAgICAgICAgICBTZWxlY3RlZElEICAgPT4gJFRlbXBsYXRlRGF0YS0+e0Zvcm1hdH0sCiAgICAgICAgICAgIFBvc3NpYmxlTm9uZSA9PiAxLAogICAgICAgICAgICBUcmFuc2xhdGlvbiAgPT4gMSwKICAgICAgICAgICAgQ2xhc3MgICAgICAgID0+ICdNb2Rlcm5pemUnLAogICAgICAgICk7CgogICAgICAgICMgb3V0cHV0IG92ZXJ2aWV3CiAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ092ZXJ2aWV3JywKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgICAgICAgICBPYmplY3RPcHRpb25TdHJnID0+ICRPYmplY3RPcHRpb25TdHJnLAogICAgICAgICAgICAgICAgRm9ybWF0T3B0aW9uU3RyZyA9PiAkRm9ybWF0T3B0aW9uU3RyZywKICAgICAgICAgICAgfSwKICAgICAgICApOwoKICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jayggTmFtZSA9PiAnQWN0aW9uTGlzdCcgKTsKICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jayggTmFtZSA9PiAnQWN0aW9uT3ZlcnZpZXcnICk7CgogICAgICAgICRMYXlvdXRPYmplY3QtPkFkZEpTRGF0YSgKICAgICAgICAgICAgS2V5ICAgPT4gJ1RlbXBsYXRlRWRpdDQnLAogICAgICAgICAgICBWYWx1ZSA9PiAxLAogICAgICAgICk7CgogICAgICAgICMgb3V0cHV0IGhlYWRsaW5lCiAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ1RlbXBsYXRlRWRpdDQnLAogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICV7JFRlbXBsYXRlRGF0YX0sCiAgICAgICAgICAgICAgICBPYmplY3ROYW1lID0+ICRPYmplY3RMaXN0LT57ICRUZW1wbGF0ZURhdGEtPntPYmplY3R9IH0sCiAgICAgICAgICAgICAgICBGb3JtYXROYW1lID0+ICRGb3JtYXRMaXN0LT57ICRUZW1wbGF0ZURhdGEtPntGb3JtYXR9IH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgKTsKCiAgICAgICAgIyBnZXQgbWFwcGluZyBkYXRhIGxpc3QKICAgICAgICBteSAkTWFwcGluZ0xpc3QgPSAkSW1wb3J0RXhwb3J0T2JqZWN0LT5NYXBwaW5nTGlzdCgKICAgICAgICAgICAgVGVtcGxhdGVJRCA9PiAkVGVtcGxhdGVEYXRhLT57VGVtcGxhdGVJRH0sCiAgICAgICAgICAgIFVzZXJJRCAgICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICk7CgogICAgICAgICMgZ2V0IG9iamVjdCBhdHRyaWJ1dGVzCiAgICAgICAgbXkgJE1hcHBpbmdPYmplY3RBdHRyaWJ1dGVzID0gJEltcG9ydEV4cG9ydE9iamVjdC0+TWFwcGluZ09iamVjdEF0dHJpYnV0ZXNHZXQoCiAgICAgICAgICAgIFRlbXBsYXRlSUQgPT4gJFRlbXBsYXRlRGF0YS0+e1RlbXBsYXRlSUR9LAogICAgICAgICAgICBVc2VySUQgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICApOwoKICAgICAgICAjIGdldCBmb3JtYXQgYXR0cmlidXRlcwogICAgICAgIG15ICRNYXBwaW5nRm9ybWF0QXR0cmlidXRlcyA9ICRJbXBvcnRFeHBvcnRPYmplY3QtPk1hcHBpbmdGb3JtYXRBdHRyaWJ1dGVzR2V0KAogICAgICAgICAgICBUZW1wbGF0ZUlEID0+ICRUZW1wbGF0ZURhdGEtPntUZW1wbGF0ZUlEfSwKICAgICAgICAgICAgVXNlcklEICAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgKTsKCiAgICAgICAgIyBjcmVhdGUgaGVhZGVycyBmb3Igb2JqZWN0IGFuZCBhZGQgY29tbW9uIGhlYWRlcnMKICAgICAgICBteSBASGVhZGVyczsKCiAgICAgICAgZm9yIG15ICRIZWFkZXIgKCBAeyRNYXBwaW5nT2JqZWN0QXR0cmlidXRlc30gKSB7CiAgICAgICAgICAgIHB1c2ggQEhlYWRlcnMsICRIZWFkZXItPntOYW1lfTsKICAgICAgICB9CgogICAgICAgIGZvciBteSAkQ29tbW9uSGVhZGVyICggJ0NvbHVtbicsICdVcCcsICdEb3duJywgJ0RlbGV0ZScgKSB7CiAgICAgICAgICAgIHB1c2ggQEhlYWRlcnMsICRDb21tb25IZWFkZXI7CiAgICAgICAgfQoKICAgICAgICBmb3IgbXkgJEhlYWRlciAoQEhlYWRlcnMpIHsKCiAgICAgICAgICAgICMgb3V0cHV0IGF0dHJpYnV0ZSByb3cKICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgICAgICBOYW1lID0+ICdUZW1wbGF0ZUVkaXQ0VGFibGVIZWFkZXInLAogICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgSGVhZGVyID0+ICRIZWFkZXIsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgIyB0byB1c2UgaW4gY29sc3BhbiBmb3IgJ25vIGRhdGEgZm91bmQnIG1lc3NhZ2UKICAgICAgICBteSAkSGVhZGVyQ291bnRlciA9IEBIZWFkZXJzOwoKICAgICAgICBteSAkRW1wdHlNYXAgICAgICAgICAgICA9IDE7CiAgICAgICAgbXkgJEF0dHJpYnV0ZVJvd0NvdW50ZXIgPSAwOwogICAgICAgIGZvciBteSAkTWFwcGluZ0lEICggQHskTWFwcGluZ0xpc3R9ICkgewoKICAgICAgICAgICAgJEVtcHR5TWFwID0gMDsKCiAgICAgICAgICAgICMgb3V0cHV0IGF0dHJpYnV0ZSByb3cKICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgICAgICBOYW1lID0+ICdUZW1wbGF0ZUVkaXQ0Um93JywKICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgIE1hcHBpbmdJRCA9PiAkTWFwcGluZ0lELAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgZ2V0IG1hcHBpbmcgb2JqZWN0IGRhdGEKICAgICAgICAgICAgbXkgJE1hcHBpbmdPYmplY3REYXRhID0gJEltcG9ydEV4cG9ydE9iamVjdC0+TWFwcGluZ09iamVjdERhdGFHZXQoCiAgICAgICAgICAgICAgICBNYXBwaW5nSUQgPT4gJE1hcHBpbmdJRCwKICAgICAgICAgICAgICAgIFVzZXJJRCAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAjIGdldCBtYXBwaW5nIGZvcm1hdCBkYXRhCiAgICAgICAgICAgIG15ICRNYXBwaW5nRm9ybWF0RGF0YSA9ICRJbXBvcnRFeHBvcnRPYmplY3QtPk1hcHBpbmdGb3JtYXREYXRhR2V0KAogICAgICAgICAgICAgICAgTWFwcGluZ0lEID0+ICRNYXBwaW5nSUQsCiAgICAgICAgICAgICAgICBVc2VySUQgICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICAgICApOwoKICAgICAgICAgICAgZm9yIG15ICRJdGVtICggQHskTWFwcGluZ09iamVjdEF0dHJpYnV0ZXN9ICkgewoKICAgICAgICAgICAgICAgICMgY3JlYXRlIGZvcm0gaW5wdXQKICAgICAgICAgICAgICAgIG15ICRJbnB1dFN0cmluZyA9ICRMYXlvdXRPYmplY3QtPkltcG9ydEV4cG9ydEZvcm1JbnB1dENyZWF0ZSgKICAgICAgICAgICAgICAgICAgICBJdGVtICAgPT4gJEl0ZW0sCiAgICAgICAgICAgICAgICAgICAgUHJlZml4ID0+ICdPYmplY3Q6OicgLiAkQXR0cmlidXRlUm93Q291bnRlciAuICc6OicsCiAgICAgICAgICAgICAgICAgICAgVmFsdWUgID0+ICRNYXBwaW5nT2JqZWN0RGF0YS0+eyAkSXRlbS0+e0tleX0gfSwKICAgICAgICAgICAgICAgICAgICBJRCAgICAgPT4gJEl0ZW0tPntLZXl9IC4gJEF0dHJpYnV0ZVJvd0NvdW50ZXIsCiAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICMgb3V0cHV0IGF0dHJpYnV0ZSByb3cKICAgICAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gJ1RlbXBsYXRlRWRpdDRDb2x1bW4nLAogICAgICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBOYW1lICAgICAgPT4gJEl0ZW0tPntOYW1lfSwKICAgICAgICAgICAgICAgICAgICAgICAgSUQgICAgICAgID0+ICdPYmplY3Q6OicgLiAkQXR0cmlidXRlUm93Q291bnRlciAuICc6OicgLiAkSXRlbS0+e0tleX0sCiAgICAgICAgICAgICAgICAgICAgICAgIElucHV0U3RyZyA9PiAkSW5wdXRTdHJpbmcsCiAgICAgICAgICAgICAgICAgICAgICAgIENvdW50ZXIgICA9PiAkQXR0cmlidXRlUm93Q291bnRlciwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgZm9yIG15ICRJdGVtICggQHskTWFwcGluZ0Zvcm1hdEF0dHJpYnV0ZXN9ICkgewoKICAgICAgICAgICAgICAgICMgb3V0cHV0IGNvbHVtbiBjb3VudGVyCiAgICAgICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdUZW1wbGF0ZUVkaXQ0TWFwTnVtYmVyQ29sdW1uJywKICAgICAgICAgICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgQ291bnRlciA9PiAkQXR0cmlidXRlUm93Q291bnRlciwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBoaWRlIHRoZSB1cCBidXR0b24gZm9yIGZpcnN0IGVsZW1lbnQgYW5kIGRvd24gYnV0dG9uIGZvciB0aGUgbGFzdCBlbGVtZW50CiAgICAgICAgICAgIG15ICRVcEJsb2NrOwogICAgICAgICAgICBteSAkRG93bkJsb2NrOwogICAgICAgICAgICBteSAkTnVtYmVyT2ZFbGVtZW50cyA9IEB7JE1hcHBpbmdMaXN0fTsKCiAgICAgICAgICAgIGlmICggJEF0dHJpYnV0ZVJvd0NvdW50ZXIgPT0gMCApIHsKICAgICAgICAgICAgICAgICRVcEJsb2NrID0gJ1RlbXBsYXRlRWRpdDROb1VwQnV0dG9uJzsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICRVcEJsb2NrID0gJ1RlbXBsYXRlRWRpdDRVcEJ1dHRvbic7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgY2hlY2sgaWYgdGhpcyBpcyB0aGUgbGFzdCBlbGVtZW50CiAgICAgICAgICAgIGlmICggJEF0dHJpYnV0ZVJvd0NvdW50ZXIgPT0gKCAkTnVtYmVyT2ZFbGVtZW50cyAtIDEgKSApIHsKICAgICAgICAgICAgICAgICREb3duQmxvY2sgPSAnVGVtcGxhdGVFZGl0NE5vRG93bkJ1dHRvbic7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAkRG93bkJsb2NrID0gJ1RlbXBsYXRlRWRpdDREb3duQnV0dG9uJzsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyB1cCBidXR0b24gYmxvY2sKICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgICAgICBOYW1lID0+ICRVcEJsb2NrLAogICAgICAgICAgICAgICAgRGF0YSA9PiB7IE1hcHBpbmdJRCA9PiAkTWFwcGluZ0lEIH0sCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAjIGRvd24gYnV0dG9uIGJsb2NrCiAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgTmFtZSA9PiAkRG93bkJsb2NrLAogICAgICAgICAgICAgICAgRGF0YSA9PiB7IE1hcHBpbmdJRCA9PiAkTWFwcGluZ0lEIH0sCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAkQXR0cmlidXRlUm93Q291bnRlcisrOwogICAgICAgIH0KCiAgICAgICAgIyBvdXRwdXQgYW4gZW1wdHkgbGlzdAogICAgICAgIGlmICgkRW1wdHlNYXApIHsKCiAgICAgICAgICAgICMgb3V0cHV0IGxpc3QKICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgICAgICBOYW1lID0+ICdUZW1wbGF0ZUVkaXQ0Tm9NYXBGb3VuZCcsCiAgICAgICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICAgICBDb2x1bW5zID0+ICRIZWFkZXJDb3VudGVyLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgICMgb3V0cHV0IGhlYWRlciBhbmQgbmF2YmFyCiAgICAgICAgbXkgJE91dHB1dCA9ICRMYXlvdXRPYmplY3QtPkhlYWRlcigpOwogICAgICAgICRPdXRwdXQgLj0gJExheW91dE9iamVjdC0+TmF2aWdhdGlvbkJhcigpOwoKICAgICAgICAjIHN0YXJ0IHRlbXBsYXRlIG91dHB1dAogICAgICAgICRPdXRwdXQgLj0gJExheW91dE9iamVjdC0+T3V0cHV0KAogICAgICAgICAgICBUZW1wbGF0ZUZpbGUgPT4gJ0FkbWluSW1wb3J0RXhwb3J0JywKICAgICAgICAgICAgRGF0YSAgICAgICAgID0+IFwlUGFyYW0sCiAgICAgICAgKTsKCiAgICAgICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5Gb290ZXIoKTsKICAgICAgICByZXR1cm4gJE91dHB1dDsKICAgIH0KCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICAjIHRlbXBsYXRlIHNhdmUgKG1hcHBpbmcpCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICBlbHNpZiAoICRTZWxmLT57U3ViYWN0aW9ufSBlcSAnVGVtcGxhdGVTYXZlNCcgKSB7CgogICAgICAgICMgZ2V0IHRlbXBsYXRlIGlkCiAgICAgICAgbXkgJFRlbXBsYXRlSUQgPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnVGVtcGxhdGVJRCcgKTsKCiAgICAgICAgbXkgJVN1Ym1pdCA9ICgKICAgICAgICAgICAgU3VibWl0TmV4dCA9PiAnVGVtcGxhdGVFZGl0NScsCiAgICAgICAgICAgIFN1Ym1pdEJhY2sgPT4gJ1RlbXBsYXRlRWRpdDMnLAogICAgICAgICAgICBSZWxvYWQgICAgID0+ICdUZW1wbGF0ZUVkaXQ0JywKICAgICAgICAgICAgTWFwcGluZ0FkZCA9PiAnVGVtcGxhdGVFZGl0NCcsCiAgICAgICAgKTsKCiAgICAgICAgIyBnZXQgc3VibWl0IGFjdGlvbgogICAgICAgIG15ICRTdWJhY3Rpb24gICAgPSAkU3VibWl0e1JlbG9hZH07CiAgICAgICAgbXkgJFN1Ym1pdEJ1dHRvbiA9ICcnOwoKICAgICAgICBQQVJBTToKICAgICAgICBmb3IgbXkgJFN1Ym1pdEtleSAoIHNvcnQga2V5cyAlU3VibWl0ICkgewogICAgICAgICAgICBuZXh0IFBBUkFNIGlmICEkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAkU3VibWl0S2V5ICk7CgogICAgICAgICAgICAkU3ViYWN0aW9uICAgID0gJFN1Ym1pdHskU3VibWl0S2V5fTsKICAgICAgICAgICAgJFN1Ym1pdEJ1dHRvbiA9ICRTdWJtaXRLZXk7CiAgICAgICAgICAgIGxhc3QgUEFSQU07CiAgICAgICAgfQoKICAgICAgICAjIGdldCBtYXBwaW5nIGRhdGEgbGlzdAogICAgICAgIG15ICRNYXBwaW5nTGlzdCA9ICRJbXBvcnRFeHBvcnRPYmplY3QtPk1hcHBpbmdMaXN0KAogICAgICAgICAgICBUZW1wbGF0ZUlEID0+ICRUZW1wbGF0ZUlELAogICAgICAgICAgICBVc2VySUQgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICApOwoKICAgICAgICAjIGdldCBvYmplY3QgYXR0cmlidXRlcwogICAgICAgIG15ICRNYXBwaW5nT2JqZWN0QXR0cmlidXRlcyA9ICRJbXBvcnRFeHBvcnRPYmplY3QtPk1hcHBpbmdPYmplY3RBdHRyaWJ1dGVzR2V0KAogICAgICAgICAgICBUZW1wbGF0ZUlEID0+ICRUZW1wbGF0ZUlELAogICAgICAgICAgICBVc2VySUQgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICApOwoKICAgICAgICAjIGdldCBmb3JtYXQgYXR0cmlidXRlcwogICAgICAgIG15ICRNYXBwaW5nRm9ybWF0QXR0cmlidXRlcyA9ICRJbXBvcnRFeHBvcnRPYmplY3QtPk1hcHBpbmdGb3JtYXRBdHRyaWJ1dGVzR2V0KAogICAgICAgICAgICBUZW1wbGF0ZUlEID0+ICRUZW1wbGF0ZUlELAogICAgICAgICAgICBVc2VySUQgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICApOwoKICAgICAgICBteSAkQ291bnRlciA9IDA7CiAgICAgICAgTUFQUElOR0lEOgogICAgICAgIGZvciBteSAkTWFwcGluZ0lEICggQHskTWFwcGluZ0xpc3R9ICkgewoKICAgICAgICAgICAgIyBnZXQgb2JqZWN0IGF0dHJpYnV0ZSB2YWx1ZXMKICAgICAgICAgICAgbXkgJU9iamVjdEF0dHJpYnV0ZVZhbHVlczsKICAgICAgICAgICAgZm9yIG15ICRJdGVtICggQHskTWFwcGluZ09iamVjdEF0dHJpYnV0ZXN9ICkgewoKICAgICAgICAgICAgICAgICMgZ2V0IG9iamVjdCBmb3JtIGRhdGEKICAgICAgICAgICAgICAgICRPYmplY3RBdHRyaWJ1dGVWYWx1ZXN7ICRJdGVtLT57S2V5fSB9ID0gJExheW91dE9iamVjdC0+SW1wb3J0RXhwb3J0Rm9ybURhdGFHZXQoCiAgICAgICAgICAgICAgICAgICAgSXRlbSAgID0+ICRJdGVtLAogICAgICAgICAgICAgICAgICAgIFByZWZpeCA9PiAnT2JqZWN0OjonIC4gJENvdW50ZXIgLiAnOjonLAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBzYXZlIHRoZSBtYXBwaW5nIG9iamVjdCBkYXRhCiAgICAgICAgICAgICRJbXBvcnRFeHBvcnRPYmplY3QtPk1hcHBpbmdPYmplY3REYXRhU2F2ZSgKICAgICAgICAgICAgICAgIE1hcHBpbmdJRCAgICAgICAgID0+ICRNYXBwaW5nSUQsCiAgICAgICAgICAgICAgICBNYXBwaW5nT2JqZWN0RGF0YSA9PiBcJU9iamVjdEF0dHJpYnV0ZVZhbHVlcywKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgICAgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgZ2V0IGZvcm1hdCBhdHRyaWJ1dGUgdmFsdWVzCiAgICAgICAgICAgIG15ICVGb3JtYXRBdHRyaWJ1dGVWYWx1ZXM7CiAgICAgICAgICAgIGZvciBteSAkSXRlbSAoIEB7JE1hcHBpbmdGb3JtYXRBdHRyaWJ1dGVzfSApIHsKCiAgICAgICAgICAgICAgICAjIGdldCBmb3JtYXQgZm9ybSBkYXRhCiAgICAgICAgICAgICAgICAkRm9ybWF0QXR0cmlidXRlVmFsdWVzeyAkSXRlbS0+e0tleX0gfSA9ICRMYXlvdXRPYmplY3QtPkltcG9ydEV4cG9ydEZvcm1EYXRhR2V0KAogICAgICAgICAgICAgICAgICAgIEl0ZW0gICA9PiAkSXRlbSwKICAgICAgICAgICAgICAgICAgICBQcmVmaXggPT4gJ0Zvcm1hdDo6JyAuICRDb3VudGVyIC4gJzo6JywKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgc2F2ZSB0aGUgbWFwcGluZyBmb3JtYXQgZGF0YQogICAgICAgICAgICAkSW1wb3J0RXhwb3J0T2JqZWN0LT5NYXBwaW5nRm9ybWF0RGF0YVNhdmUoCiAgICAgICAgICAgICAgICBNYXBwaW5nSUQgICAgICAgICA9PiAkTWFwcGluZ0lELAogICAgICAgICAgICAgICAgTWFwcGluZ0Zvcm1hdERhdGEgPT4gXCVGb3JtYXRBdHRyaWJ1dGVWYWx1ZXMsCiAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgICAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAkQ291bnRlcisrOwogICAgICAgIH0KCiAgICAgICAgTUFQUElOR0lEOgogICAgICAgIGZvciBteSAkTWFwcGluZ0lEICggQHskTWFwcGluZ0xpc3R9ICkgewoKICAgICAgICAgICAgIyBkZWxldGUgdGhpcyBtYXBwaW5nIHJvdwogICAgICAgICAgICBpZiAoICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICJNYXBwaW5nRGVsZXRlOjokTWFwcGluZ0lEIiApICkgewogICAgICAgICAgICAgICAgJEltcG9ydEV4cG9ydE9iamVjdC0+TWFwcGluZ0RlbGV0ZSgKICAgICAgICAgICAgICAgICAgICBNYXBwaW5nSUQgID0+ICRNYXBwaW5nSUQsCiAgICAgICAgICAgICAgICAgICAgVGVtcGxhdGVJRCA9PiAkVGVtcGxhdGVJRCwKICAgICAgICAgICAgICAgICAgICBVc2VySUQgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgbmV4dCBNQVBQSU5HSUQ7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgbW92ZSBtYXBwaW5nIGRhdGEgcm93IHVwCiAgICAgICAgICAgIGlmICggJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gIk1hcHBpbmdVcDo6JE1hcHBpbmdJRCIgKSApIHsKICAgICAgICAgICAgICAgICRJbXBvcnRFeHBvcnRPYmplY3QtPk1hcHBpbmdVcCgKICAgICAgICAgICAgICAgICAgICBNYXBwaW5nSUQgID0+ICRNYXBwaW5nSUQsCiAgICAgICAgICAgICAgICAgICAgVGVtcGxhdGVJRCA9PiAkVGVtcGxhdGVJRCwKICAgICAgICAgICAgICAgICAgICBVc2VySUQgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgbmV4dCBNQVBQSU5HSUQ7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgbW92ZSBtYXBwaW5nIGRhdGEgcm93IGRvd24KICAgICAgICAgICAgaWYgKCAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAiTWFwcGluZ0Rvd246OiRNYXBwaW5nSUQiICkgKSB7CiAgICAgICAgICAgICAgICAkSW1wb3J0RXhwb3J0T2JqZWN0LT5NYXBwaW5nRG93bigKICAgICAgICAgICAgICAgICAgICBNYXBwaW5nSUQgID0+ICRNYXBwaW5nSUQsCiAgICAgICAgICAgICAgICAgICAgVGVtcGxhdGVJRCA9PiAkVGVtcGxhdGVJRCwKICAgICAgICAgICAgICAgICAgICBVc2VySUQgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgbmV4dCBNQVBQSU5HSUQ7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMgYWRkIGEgbmV3IG1hcHBpbmcgcm93CiAgICAgICAgaWYgKCAkU3VibWl0QnV0dG9uIGVxICdNYXBwaW5nQWRkJyApIHsKICAgICAgICAgICAgJEltcG9ydEV4cG9ydE9iamVjdC0+TWFwcGluZ0FkZCgKICAgICAgICAgICAgICAgIFRlbXBsYXRlSUQgPT4gJFRlbXBsYXRlSUQsCiAgICAgICAgICAgICAgICBVc2VySUQgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5SZWRpcmVjdCgKICAgICAgICAgICAgT1AgPT4gIkFjdGlvbj0kU2VsZi0+e0FjdGlvbn07U3ViYWN0aW9uPSRTdWJhY3Rpb247VGVtcGxhdGVJRD0kVGVtcGxhdGVJRCIsCiAgICAgICAgKTsKICAgIH0KCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICAjIHRlbXBsYXRlIGVkaXQgKHNlYXJjaCkKICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKICAgIGVsc2lmICggJFNlbGYtPntTdWJhY3Rpb259IGVxICdUZW1wbGF0ZUVkaXQ1JyApIHsKCiAgICAgICAgIyBnZXQgb2JqZWN0IGxpc3QKICAgICAgICBteSAkT2JqZWN0TGlzdCA9ICRJbXBvcnRFeHBvcnRPYmplY3QtPk9iamVjdExpc3QoKTsKCiAgICAgICAgaWYgKCAhJE9iamVjdExpc3QgKSB7CiAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkZhdGFsRXJyb3IoCiAgICAgICAgICAgICAgICBNZXNzYWdlID0+IFRyYW5zbGF0YWJsZSgnTm8gb2JqZWN0IGJhY2tlbmQgZm91bmQhJyksCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CgogICAgICAgICMgZ2V0IGZvcm1hdCBsaXN0CiAgICAgICAgbXkgJEZvcm1hdExpc3QgPSAkSW1wb3J0RXhwb3J0T2JqZWN0LT5Gb3JtYXRMaXN0KCk7CgogICAgICAgIGlmICggISRGb3JtYXRMaXN0ICkgewogICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5GYXRhbEVycm9yKAogICAgICAgICAgICAgICAgTWVzc2FnZSA9PiBUcmFuc2xhdGFibGUoJ05vIGZvcm1hdCBiYWNrZW5kIGZvdW5kIScpLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQoKICAgICAgICAjIGdldCBwYXJhbXMKICAgICAgICBteSAkVGVtcGxhdGVEYXRhID0ge307CiAgICAgICAgJFRlbXBsYXRlRGF0YS0+e1RlbXBsYXRlSUR9ID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJ1RlbXBsYXRlSUQnICk7CgogICAgICAgICMgZ2V0IHRlbXBsYXRlIGRhdGEKICAgICAgICAkVGVtcGxhdGVEYXRhID0gJEltcG9ydEV4cG9ydE9iamVjdC0+VGVtcGxhdGVHZXQoCiAgICAgICAgICAgIFRlbXBsYXRlSUQgPT4gJFRlbXBsYXRlRGF0YS0+e1RlbXBsYXRlSUR9LAogICAgICAgICAgICBVc2VySUQgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICApOwoKICAgICAgICBpZiAoICEkVGVtcGxhdGVEYXRhLT57VGVtcGxhdGVJRH0gKSB7CiAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkZhdGFsRXJyb3IoCiAgICAgICAgICAgICAgICBNZXNzYWdlID0+IFRyYW5zbGF0YWJsZSgnVGVtcGxhdGUgbm90IGZvdW5kIScpLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQoKICAgICAgICAjIGdlbmVyYXRlIE9iamVjdE9wdGlvblN0cmcKICAgICAgICBteSAkT2JqZWN0T3B0aW9uU3RyZyA9ICRMYXlvdXRPYmplY3QtPkJ1aWxkU2VsZWN0aW9uKAogICAgICAgICAgICBEYXRhICAgICAgICAgPT4gJE9iamVjdExpc3QsCiAgICAgICAgICAgIE5hbWUgICAgICAgICA9PiAnT2JqZWN0JywKICAgICAgICAgICAgU2VsZWN0ZWRJRCAgID0+ICRUZW1wbGF0ZURhdGEtPntPYmplY3R9LAogICAgICAgICAgICBQb3NzaWJsZU5vbmUgPT4gMSwKICAgICAgICAgICAgVHJhbnNsYXRpb24gID0+IDEsCiAgICAgICAgICAgIENsYXNzICAgICAgICA9PiAnTW9kZXJuaXplJywKICAgICAgICApOwoKICAgICAgICAjIGdlbmVyYXRlIEZvcm1hdE9wdGlvblN0cmcKICAgICAgICBteSAkRm9ybWF0T3B0aW9uU3RyZyA9ICRMYXlvdXRPYmplY3QtPkJ1aWxkU2VsZWN0aW9uKAogICAgICAgICAgICBEYXRhICAgICAgICAgPT4gJEZvcm1hdExpc3QsCiAgICAgICAgICAgIE5hbWUgICAgICAgICA9PiAnRm9ybWF0JywKICAgICAgICAgICAgU2VsZWN0ZWRJRCAgID0+ICRUZW1wbGF0ZURhdGEtPntGb3JtYXR9LAogICAgICAgICAgICBQb3NzaWJsZU5vbmUgPT4gMSwKICAgICAgICAgICAgVHJhbnNsYXRpb24gID0+IDEsCiAgICAgICAgICAgIENsYXNzICAgICAgICA9PiAnTW9kZXJuaXplJywKICAgICAgICApOwoKICAgICAgICAjIG91dHB1dCBvdmVydmlldwogICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdPdmVydmlldycsCiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgJVBhcmFtLAogICAgICAgICAgICAgICAgT2JqZWN0T3B0aW9uU3RyZyA9PiAkT2JqZWN0T3B0aW9uU3RyZywKICAgICAgICAgICAgICAgIEZvcm1hdE9wdGlvblN0cmcgPT4gJEZvcm1hdE9wdGlvblN0cmcsCiAgICAgICAgICAgIH0sCiAgICAgICAgKTsKCiAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soIE5hbWUgPT4gJ0FjdGlvbkxpc3QnICk7CiAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soIE5hbWUgPT4gJ0FjdGlvbk92ZXJ2aWV3JyApOwoKICAgICAgICAjIGdldCBzZWFyY2ggZGF0YQogICAgICAgIG15ICRTZWFyY2hEYXRhID0gJEltcG9ydEV4cG9ydE9iamVjdC0+U2VhcmNoRGF0YUdldCgKICAgICAgICAgICAgVGVtcGxhdGVJRCA9PiAkVGVtcGxhdGVEYXRhLT57VGVtcGxhdGVJRH0sCiAgICAgICAgICAgIFVzZXJJRCAgICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICk7CgogICAgICAgICMgY3JlYXRlIHJlc2NyaWN0IGV4cG9ydCBzdHJpbmcKICAgICAgICBteSAkUmVzdHJpY3RFeHBvcnRTdHJnID0gJExheW91dE9iamVjdC0+SW1wb3J0RXhwb3J0Rm9ybUlucHV0Q3JlYXRlKAogICAgICAgICAgICBJdGVtID0+IHsKICAgICAgICAgICAgICAgIEtleSAgID0+ICdSZXN0cmljdEV4cG9ydCcsCiAgICAgICAgICAgICAgICBJbnB1dCA9PiB7CiAgICAgICAgICAgICAgICAgICAgVHlwZSA9PiAnQ2hlY2tib3gnLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgVmFsdWUgPT4gc2NhbGFyIGtleXMgJXskU2VhcmNoRGF0YX0sCiAgICAgICAgKTsKCiAgICAgICAgIyBvdXRwdXQgbGlzdAogICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdUZW1wbGF0ZUVkaXQ1JywKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAleyRUZW1wbGF0ZURhdGF9LAogICAgICAgICAgICAgICAgUmVzdHJpY3RFeHBvcnRTdHJnID0+ICRSZXN0cmljdEV4cG9ydFN0cmcsCiAgICAgICAgICAgIH0sCiAgICAgICAgKTsKCiAgICAgICAgIyBnZXQgc2VhcmNoIGF0dHJpYnV0ZXMKICAgICAgICBteSAkU2VhcmNoQXR0cmlidXRlTGlzdCA9ICRJbXBvcnRFeHBvcnRPYmplY3QtPlNlYXJjaEF0dHJpYnV0ZXNHZXQoCiAgICAgICAgICAgIFRlbXBsYXRlSUQgPT4gJFRlbXBsYXRlRGF0YS0+e1RlbXBsYXRlSUR9LAogICAgICAgICAgICBVc2VySUQgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICApOwoKICAgICAgICAjIG91dHB1dCBvYmplY3QgYXR0cmlidXRlcwogICAgICAgIGZvciBteSAkSXRlbSAoIEB7JFNlYXJjaEF0dHJpYnV0ZUxpc3R9ICkgewoKICAgICAgICAgICAgIyBjcmVhdGUgZm9ybSBpbnB1dAogICAgICAgICAgICBteSAkSW5wdXRTdHJpbmcgPSAkTGF5b3V0T2JqZWN0LT5JbXBvcnRFeHBvcnRGb3JtSW5wdXRDcmVhdGUoCiAgICAgICAgICAgICAgICBJdGVtICA9PiAkSXRlbSwKICAgICAgICAgICAgICAgIFZhbHVlID0+ICRTZWFyY2hEYXRhLT57ICRJdGVtLT57S2V5fSB9LAogICAgICAgICAgICAgICAgQ2xhc3MgPT4gJ01vZGVybml6ZScsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAjIG91dHB1dCBhdHRyaWJ1dGUgcm93CiAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgTmFtZSA9PiAnVGVtcGxhdGVFZGl0NUVsZW1lbnQnLAogICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgTmFtZSAgICAgID0+ICRJdGVtLT57TmFtZX0gfHwgJycsCiAgICAgICAgICAgICAgICAgICAgSW5wdXRTdHJnID0+ICRJbnB1dFN0cmluZywKICAgICAgICAgICAgICAgICAgICBJRCAgICAgICAgPT4gJEl0ZW0tPntLZXl9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgICMgb3V0cHV0IGhlYWRlciBhbmQgbmF2YmFyCiAgICAgICAgbXkgJE91dHB1dCA9ICRMYXlvdXRPYmplY3QtPkhlYWRlcigpOwogICAgICAgICRPdXRwdXQgLj0gJExheW91dE9iamVjdC0+TmF2aWdhdGlvbkJhcigpOwoKICAgICAgICAjIHN0YXJ0IHRlbXBsYXRlIG91dHB1dAogICAgICAgICRPdXRwdXQgLj0gJExheW91dE9iamVjdC0+T3V0cHV0KAogICAgICAgICAgICBUZW1wbGF0ZUZpbGUgPT4gJ0FkbWluSW1wb3J0RXhwb3J0JywKICAgICAgICAgICAgRGF0YSAgICAgICAgID0+IFwlUGFyYW0sCiAgICAgICAgKTsKCiAgICAgICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5Gb290ZXIoKTsKICAgICAgICByZXR1cm4gJE91dHB1dDsKICAgIH0KCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICAjIHRlbXBsYXRlIHNhdmUgKHNlYXJjaCkKICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKICAgIGVsc2lmICggJFNlbGYtPntTdWJhY3Rpb259IGVxICdUZW1wbGF0ZVNhdmU1JyApIHsKCiAgICAgICAgIyBnZXQgdGVtcGxhdGUgaWQKICAgICAgICBteSAkVGVtcGxhdGVJRCA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICdUZW1wbGF0ZUlEJyApOwoKICAgICAgICBteSAlU3VibWl0ID0gKAogICAgICAgICAgICBTdWJtaXROZXh0ID0+ICdPdmVydmlldycsCiAgICAgICAgICAgIFN1Ym1pdEJhY2sgPT4gJ1RlbXBsYXRlRWRpdDQnLAogICAgICAgICAgICBSZWxvYWQgICAgID0+ICdUZW1wbGF0ZUVkaXQ1JywKICAgICAgICApOwoKICAgICAgICAjIGdldCBzdWJtaXQgYWN0aW9uCiAgICAgICAgbXkgJFN1YmFjdGlvbiA9ICRTdWJtaXR7UmVsb2FkfTsKCiAgICAgICAgUEFSQU06CiAgICAgICAgZm9yIG15ICRTdWJtaXRLZXkgKCBzb3J0IGtleXMgJVN1Ym1pdCApIHsKICAgICAgICAgICAgbmV4dCBQQVJBTSBpZiAhJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJFN1Ym1pdEtleSApOwoKICAgICAgICAgICAgJFN1YmFjdGlvbiA9ICRTdWJtaXR7JFN1Ym1pdEtleX07CiAgICAgICAgICAgIGxhc3QgUEFSQU07CiAgICAgICAgfQoKICAgICAgICAjIGRlbGV0ZSBhbGwgc2VhcmNoIHJlc3RyaWN0aW9ucwogICAgICAgIGlmICggISRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICdSZXN0cmljdEV4cG9ydCcgKSApIHsKCiAgICAgICAgICAgICMgZGVsZXRlIGFsbCBzZWFyY2ggZGF0YQogICAgICAgICAgICAkSW1wb3J0RXhwb3J0T2JqZWN0LT5TZWFyY2hEYXRhRGVsZXRlKAogICAgICAgICAgICAgICAgVGVtcGxhdGVJRCA9PiAkVGVtcGxhdGVJRCwKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICAgICApOwoKICAgICAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPlJlZGlyZWN0KAogICAgICAgICAgICAgICAgT1AgPT4gIkFjdGlvbj0kU2VsZi0+e0FjdGlvbn07U3ViYWN0aW9uPSRTdWJhY3Rpb247VGVtcGxhdGVJRD0kVGVtcGxhdGVJRCIsCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAjIGdldCBzZWFyY2ggYXR0cmlidXRlcwogICAgICAgIG15ICRTZWFyY2hBdHRyaWJ1dGVMaXN0ID0gJEltcG9ydEV4cG9ydE9iamVjdC0+U2VhcmNoQXR0cmlidXRlc0dldCgKICAgICAgICAgICAgVGVtcGxhdGVJRCA9PiAkVGVtcGxhdGVJRCwKICAgICAgICAgICAgVXNlcklEICAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgKTsKCiAgICAgICAgIyBnZXQgYXR0cmlidXRlIHZhbHVlcyBmcm9tIGZvcm0KICAgICAgICBteSAlQXR0cmlidXRlVmFsdWVzOwogICAgICAgIGZvciBteSAkSXRlbSAoIEB7JFNlYXJjaEF0dHJpYnV0ZUxpc3R9ICkgewoKICAgICAgICAgICAgIyBnZXQgZm9ybSBkYXRhCiAgICAgICAgICAgICRBdHRyaWJ1dGVWYWx1ZXN7ICRJdGVtLT57S2V5fSB9ID0gJExheW91dE9iamVjdC0+SW1wb3J0RXhwb3J0Rm9ybURhdGFHZXQoCiAgICAgICAgICAgICAgICBJdGVtID0+ICRJdGVtLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgIyByZWxvYWQgZm9ybSBpZiB2YWx1ZSBpcyByZXF1aXJlZAogICAgICAgICAgICBpZiAoICRJdGVtLT57Rm9ybX0tPntJbnZhbGlkfSApIHsKICAgICAgICAgICAgICAgICRTdWJhY3Rpb24gPSAkU3VibWl0e1JlbG9hZH07CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMgc2F2ZSB0aGUgc2VhcmNoIGRhdGEKICAgICAgICAkSW1wb3J0RXhwb3J0T2JqZWN0LT5TZWFyY2hEYXRhU2F2ZSgKICAgICAgICAgICAgVGVtcGxhdGVJRCA9PiAkVGVtcGxhdGVJRCwKICAgICAgICAgICAgU2VhcmNoRGF0YSA9PiBcJUF0dHJpYnV0ZVZhbHVlcywKICAgICAgICAgICAgVXNlcklEICAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgKTsKCiAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPlJlZGlyZWN0KAogICAgICAgICAgICBPUCA9PiAiQWN0aW9uPSRTZWxmLT57QWN0aW9ufTtTdWJhY3Rpb249JFN1YmFjdGlvbjtUZW1wbGF0ZUlEPSRUZW1wbGF0ZUlEIiwKICAgICAgICApOwogICAgfQoKICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKICAgICMgdGVtcGxhdGUgZGVsZXRlCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICBlbHNpZiAoICRTZWxmLT57U3ViYWN0aW9ufSBlcSAnVGVtcGxhdGVEZWxldGUnICkgewoKICAgICAgICAjIGdldCB0ZW1wbGF0ZSBpZAogICAgICAgIG15ICRUZW1wbGF0ZUlEID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJ1RlbXBsYXRlSUQnICk7CgogICAgICAgICMgZGVsZXRlIHRlbXBsYXRlIGZyb20gZGF0YWJhc2UKICAgICAgICAkSW1wb3J0RXhwb3J0T2JqZWN0LT5UZW1wbGF0ZURlbGV0ZSgKICAgICAgICAgICAgVGVtcGxhdGVJRCA9PiAkVGVtcGxhdGVJRCwKICAgICAgICAgICAgVXNlcklEICAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgKTsKCiAgICAgICAgIyByZWRpcmVjdCB0byBvdmVydmlldwogICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5SZWRpcmVjdCggT1AgPT4gIkFjdGlvbj0kU2VsZi0+e0FjdGlvbn0iICk7CiAgICB9CgogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwogICAgIyBpbXBvcnQgaW5mb3JtYXRpb24KICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKICAgIGVsc2lmICggJFNlbGYtPntTdWJhY3Rpb259IGVxICdJbXBvcnRJbmZvcm1hdGlvbicgKSB7CgogICAgICAgICMgZ2V0IG9iamVjdCBsaXN0CiAgICAgICAgbXkgJE9iamVjdExpc3QgPSAkSW1wb3J0RXhwb3J0T2JqZWN0LT5PYmplY3RMaXN0KCk7CgogICAgICAgIGlmICggISRPYmplY3RMaXN0ICkgewogICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5GYXRhbEVycm9yKAogICAgICAgICAgICAgICAgTWVzc2FnZSA9PiBUcmFuc2xhdGFibGUoJ05vIG9iamVjdCBiYWNrZW5kIGZvdW5kIScpLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQoKICAgICAgICAjIGdldCBmb3JtYXQgbGlzdAogICAgICAgIG15ICRGb3JtYXRMaXN0ID0gJEltcG9ydEV4cG9ydE9iamVjdC0+Rm9ybWF0TGlzdCgpOwoKICAgICAgICBpZiAoICEkRm9ybWF0TGlzdCApIHsKICAgICAgICAgICAgJExheW91dE9iamVjdC0+RmF0YWxFcnJvcigKICAgICAgICAgICAgICAgIE1lc3NhZ2UgPT4gVHJhbnNsYXRhYmxlKCdObyBmb3JtYXQgYmFja2VuZCBmb3VuZCEnKSwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgIyBnZXQgcGFyYW1zCiAgICAgICAgbXkgJFRlbXBsYXRlRGF0YSA9IHt9OwogICAgICAgICRUZW1wbGF0ZURhdGEtPntUZW1wbGF0ZUlEfSA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICdUZW1wbGF0ZUlEJyApOwoKICAgICAgICAjIGdldCB0ZW1wbGF0ZSBkYXRhCiAgICAgICAgJFRlbXBsYXRlRGF0YSA9ICRJbXBvcnRFeHBvcnRPYmplY3QtPlRlbXBsYXRlR2V0KAogICAgICAgICAgICBUZW1wbGF0ZUlEID0+ICRUZW1wbGF0ZURhdGEtPntUZW1wbGF0ZUlEfSwKICAgICAgICAgICAgVXNlcklEICAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgKTsKCiAgICAgICAgaWYgKCAhJFRlbXBsYXRlRGF0YS0+e1RlbXBsYXRlSUR9ICkgewogICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5GYXRhbEVycm9yKAogICAgICAgICAgICAgICAgTWVzc2FnZSA9PiBUcmFuc2xhdGFibGUoJ1RlbXBsYXRlIG5vdCBmb3VuZCEnKSwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgIyBnZW5lcmF0ZSBPYmplY3RPcHRpb25TdHJnCiAgICAgICAgbXkgJE9iamVjdE9wdGlvblN0cmcgPSAkTGF5b3V0T2JqZWN0LT5CdWlsZFNlbGVjdGlvbigKICAgICAgICAgICAgRGF0YSAgICAgICAgID0+ICRPYmplY3RMaXN0LAogICAgICAgICAgICBOYW1lICAgICAgICAgPT4gJ09iamVjdCcsCiAgICAgICAgICAgIFNlbGVjdGVkSUQgICA9PiAkVGVtcGxhdGVEYXRhLT57T2JqZWN0fSwKICAgICAgICAgICAgUG9zc2libGVOb25lID0+IDEsCiAgICAgICAgICAgIFRyYW5zbGF0aW9uICA9PiAxLAogICAgICAgICAgICBDbGFzcyAgICAgICAgPT4gJ01vZGVybml6ZScsCiAgICAgICAgKTsKCiAgICAgICAgIyBnZW5lcmF0ZSBGb3JtYXRPcHRpb25TdHJnCiAgICAgICAgbXkgJEZvcm1hdE9wdGlvblN0cmcgPSAkTGF5b3V0T2JqZWN0LT5CdWlsZFNlbGVjdGlvbigKICAgICAgICAgICAgRGF0YSAgICAgICAgID0+ICRGb3JtYXRMaXN0LAogICAgICAgICAgICBOYW1lICAgICAgICAgPT4gJ0Zvcm1hdCcsCiAgICAgICAgICAgIFNlbGVjdGVkSUQgICA9PiAkVGVtcGxhdGVEYXRhLT57Rm9ybWF0fSwKICAgICAgICAgICAgUG9zc2libGVOb25lID0+IDEsCiAgICAgICAgICAgIFRyYW5zbGF0aW9uICA9PiAxLAogICAgICAgICAgICBDbGFzcyAgICAgICAgPT4gJ01vZGVybml6ZScsCiAgICAgICAgKTsKCiAgICAgICAgIyBvdXRwdXQgb3ZlcnZpZXcKICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnT3ZlcnZpZXcnLAogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgICAgIE9iamVjdE9wdGlvblN0cmcgPT4gJE9iamVjdE9wdGlvblN0cmcsCiAgICAgICAgICAgICAgICBGb3JtYXRPcHRpb25TdHJnID0+ICRGb3JtYXRPcHRpb25TdHJnLAogICAgICAgICAgICB9LAogICAgICAgICk7CgogICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKCBOYW1lID0+ICdBY3Rpb25MaXN0JyApOwogICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKCBOYW1lID0+ICdBY3Rpb25PdmVydmlldycgKTsKCiAgICAgICAgIyBvdXRwdXQgbGlzdAogICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdJbXBvcnRJbmZvcm1hdGlvbicsCiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgJXskVGVtcGxhdGVEYXRhfSwKICAgICAgICAgICAgfSwKICAgICAgICApOwoKICAgICAgICAjIG91dHB1dCBoZWFkZXIgYW5kIG5hdmJhcgogICAgICAgIG15ICRPdXRwdXQgPSAkTGF5b3V0T2JqZWN0LT5IZWFkZXIoKTsKICAgICAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPk5hdmlnYXRpb25CYXIoKTsKCiAgICAgICAgIyBzdGFydCB0ZW1wbGF0ZSBvdXRwdXQKICAgICAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPk91dHB1dCgKICAgICAgICAgICAgVGVtcGxhdGVGaWxlID0+ICdBZG1pbkltcG9ydEV4cG9ydCcsCiAgICAgICAgICAgIERhdGEgICAgICAgICA9PiBcJVBhcmFtLAogICAgICAgICk7CgogICAgICAgICRPdXRwdXQgLj0gJExheW91dE9iamVjdC0+Rm9vdGVyKCk7CiAgICAgICAgcmV0dXJuICRPdXRwdXQ7CiAgICB9CgogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwogICAgIyBpbXBvcnQKICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKICAgIGVsc2lmICggJFNlbGYtPntTdWJhY3Rpb259IGVxICdJbXBvcnQnICkgewoKICAgICAgICAjIGdldCBwYXJhbXMKICAgICAgICBteSAkVGVtcGxhdGVEYXRhID0ge307CiAgICAgICAgJFRlbXBsYXRlRGF0YS0+e1RlbXBsYXRlSUR9ID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJ1RlbXBsYXRlSUQnICk7CgogICAgICAgICMgZ2V0IHRlbXBsYXRlIGRhdGEKICAgICAgICAkVGVtcGxhdGVEYXRhID0gJEltcG9ydEV4cG9ydE9iamVjdC0+VGVtcGxhdGVHZXQoCiAgICAgICAgICAgIFRlbXBsYXRlSUQgPT4gJFRlbXBsYXRlRGF0YS0+e1RlbXBsYXRlSUR9LAogICAgICAgICAgICBVc2VySUQgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICApOwoKICAgICAgICBpZiAoICEkVGVtcGxhdGVEYXRhLT57VGVtcGxhdGVJRH0gKSB7CiAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkZhdGFsRXJyb3IoCiAgICAgICAgICAgICAgICBNZXNzYWdlID0+IFRyYW5zbGF0YWJsZSgnVGVtcGxhdGUgbm90IGZvdW5kIScpLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQoKICAgICAgICAjIGdldCBzb3VyY2UgZmlsZQogICAgICAgIG15ICVTb3VyY2VGaWxlID0gJFBhcmFtT2JqZWN0LT5HZXRVcGxvYWRBbGwoCiAgICAgICAgICAgIFBhcmFtICA9PiAnU291cmNlRmlsZScsCiAgICAgICAgICAgIFNvdXJjZSA9PiAnU3RyaW5nJywKICAgICAgICApOwoKICAgICAgICAkU291cmNlRmlsZXtDb250ZW50fSB8fD0gJyc7CgogICAgICAgICMgaW1wb3J0IGRhdGEKICAgICAgICBteSAkUmVzdWx0ID0gJEltcG9ydEV4cG9ydE9iamVjdC0+SW1wb3J0KAogICAgICAgICAgICBUZW1wbGF0ZUlEICAgID0+ICRUZW1wbGF0ZURhdGEtPntUZW1wbGF0ZUlEfSwKICAgICAgICAgICAgU291cmNlQ29udGVudCA9PiBcJFNvdXJjZUZpbGV7Q29udGVudH0sCiAgICAgICAgICAgIFVzZXJJRCAgICAgICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICk7CgogICAgICAgIGlmICggISRSZXN1bHQgKSB7CiAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkZhdGFsRXJyb3IoCiAgICAgICAgICAgICAgICBNZXNzYWdlID0+IFRyYW5zbGF0YWJsZSgnRXJyb3Igb2NjdXJyZWQuIEltcG9ydCBpbXBvc3NpYmxlISBTZWUgU3lzbG9nIGZvciBkZXRhaWxzLicpLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQoKICAgICAgICAjIG91dHB1dCBoZWFkZXIgYW5kIG5hdmJhcgogICAgICAgIG15ICRPdXRwdXQgPSAkTGF5b3V0T2JqZWN0LT5IZWFkZXIoKTsKICAgICAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPk5hdmlnYXRpb25CYXIoKTsKCiAgICAgICAgIyBvdXRwdXQgaW1wb3J0IHJlc3VsdHMKICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnSW1wb3J0UmVzdWx0JywKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAleyRSZXN1bHR9LAogICAgICAgICAgICB9LAogICAgICAgICk7CgogICAgICAgICMgZ2V0IGFsbCByZXR1cm4gY29kZXMgYW5kIGNvbGxlY3QgdGhlIGR1cGxpY2F0ZSBuYW1lcwogICAgICAgIG15IEBEdXBsaWNhdGVOYW1lczsKICAgICAgICBSRVRVUk5DT0RFOgogICAgICAgIGZvciBteSAkUmV0Q29kZSAoIHNvcnQga2V5cyAleyAkUmVzdWx0LT57UmV0Q29kZX0gfSApIHsKCiAgICAgICAgICAgICMganVzdCBnZXQgdGhlIGR1cGxpY2F0ZSBuYW1lCiAgICAgICAgICAgIGlmICggJFJldENvZGUgPX4gbXsgXEEgRHVwbGljYXRlTmFtZSBccysgKC4rKSB9eG1zICkgewogICAgICAgICAgICAgICAgcHVzaCBARHVwbGljYXRlTmFtZXMsICQxOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnSW1wb3J0UmVzdWx0UmV0dXJuQ29kZScsCiAgICAgICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFJldHVybkNvZGVOYW1lICA9PiAkUmV0Q29kZSwKICAgICAgICAgICAgICAgICAgICAgICAgUmV0dXJuQ29kZUNvdW50ID0+ICRSZXN1bHQtPntSZXRDb2RlfS0+eyRSZXRDb2RlfSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgIyBvdXRwdXQgZHVwbGljYXRlIG5hbWVzIGlmIG5lY2Nlc3NhcnkKICAgICAgICBpZiAoQER1cGxpY2F0ZU5hbWVzKSB7CgogICAgICAgICAgICBteSAkRHVwbGljYXRlTmFtZXNTdHJpbmcgPSBqb2luICcsICcsIEBEdXBsaWNhdGVOYW1lczsKCiAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgTmFtZSA9PiAnSW1wb3J0UmVzdWx0RHVwbGljYXRlTmFtZXMnLAogICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgRHVwbGljYXRlTmFtZXMgPT4gJER1cGxpY2F0ZU5hbWVzU3RyaW5nLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgICMgb3V0cHV0IGxhc3QgcHJvY2Vzc2VkIGxpbmUgbXVtYmVyIG9mIGltcG9ydCBmaWxlCiAgICAgICAgaWYgKCAkUmVzdWx0LT57RmFpbGVkfSApIHsKICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgICAgICBOYW1lID0+ICdJbXBvcnRSZXN1bHRMYXN0TGluZU51bWJlcicsCiAgICAgICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICAgICBMYXN0TGluZU51bWJlciA9PiAkUmVzdWx0LT57Q291bnRlcn0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgIyBzdGFydCBvdXRwdXQKICAgICAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPk91dHB1dCgKICAgICAgICAgICAgVGVtcGxhdGVGaWxlID0+ICdBZG1pbkltcG9ydEV4cG9ydCcsCiAgICAgICAgICAgIERhdGEgICAgICAgICA9PiB7CiAgICAgICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgICAgIH0sCiAgICAgICAgKTsKCiAgICAgICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5Gb290ZXIoKTsKICAgICAgICByZXR1cm4gJE91dHB1dDsKICAgIH0KCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICAjIGV4cG9ydAogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwogICAgZWxzaWYgKCAkU2VsZi0+e1N1YmFjdGlvbn0gZXEgJ0V4cG9ydCcgKSB7CgogICAgICAgICMgZ2V0IHBhcmFtcwogICAgICAgIG15ICRUZW1wbGF0ZURhdGEgPSB7fTsKICAgICAgICAkVGVtcGxhdGVEYXRhLT57VGVtcGxhdGVJRH0gPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnVGVtcGxhdGVJRCcgKTsKCiAgICAgICAgIyBnZXQgdGVtcGxhdGUgZGF0YQogICAgICAgICRUZW1wbGF0ZURhdGEgPSAkSW1wb3J0RXhwb3J0T2JqZWN0LT5UZW1wbGF0ZUdldCgKICAgICAgICAgICAgVGVtcGxhdGVJRCA9PiAkVGVtcGxhdGVEYXRhLT57VGVtcGxhdGVJRH0sCiAgICAgICAgICAgIFVzZXJJRCAgICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICk7CgogICAgICAgIGlmICggISRUZW1wbGF0ZURhdGEtPntUZW1wbGF0ZUlEfSApIHsKICAgICAgICAgICAgJExheW91dE9iamVjdC0+RmF0YWxFcnJvcigKICAgICAgICAgICAgICAgIE1lc3NhZ2UgPT4gVHJhbnNsYXRhYmxlKCdUZW1wbGF0ZSBub3QgZm91bmQhJyksCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CgogICAgICAgICMgZXhwb3J0IGRhdGEKICAgICAgICBteSAkUmVzdWx0ID0gJEltcG9ydEV4cG9ydE9iamVjdC0+RXhwb3J0KAogICAgICAgICAgICBUZW1wbGF0ZUlEID0+ICRUZW1wbGF0ZURhdGEtPntUZW1wbGF0ZUlEfSwKICAgICAgICAgICAgVXNlcklEICAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgKTsKCiAgICAgICAgaWYgKCAhJFJlc3VsdCApIHsKICAgICAgICAgICAgJExheW91dE9iamVjdC0+RmF0YWxFcnJvcigKICAgICAgICAgICAgICAgIE1lc3NhZ2UgPT4gVHJhbnNsYXRhYmxlKCdFcnJvciBvY2N1cnJlZC4gRXhwb3J0IGltcG9zc2libGUhIFNlZSBTeXNsb2cgZm9yIGRldGFpbHMuJyksCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CgogICAgICAgIG15ICRGaWxlQ29udGVudCA9IGpvaW4gIlxuIiwgQHsgJFJlc3VsdC0+e0Rlc3RpbmF0aW9uQ29udGVudH0gfTsKCiAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPkF0dGFjaG1lbnQoCiAgICAgICAgICAgIFR5cGUgICAgICAgID0+ICdhdHRhY2htZW50JywKICAgICAgICAgICAgRmlsZW5hbWUgICAgPT4gJ0V4cG9ydC5jc3YnLAogICAgICAgICAgICBDb250ZW50VHlwZSA9PiAndGV4dC9jc3YnLAogICAgICAgICAgICBDb250ZW50ICAgICA9PiAkRmlsZUNvbnRlbnQsCiAgICAgICAgKTsKICAgIH0KCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICAjIG92ZXJ2aWV3CiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICBlbHNlIHsKCiAgICAgICAgIyBnZXQgb2JqZWN0IGxpc3QKICAgICAgICBteSAkT2JqZWN0TGlzdCA9ICRJbXBvcnRFeHBvcnRPYmplY3QtPk9iamVjdExpc3QoKTsKCiAgICAgICAgaWYgKCAhJE9iamVjdExpc3QgKSB7CiAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkZhdGFsRXJyb3IoCiAgICAgICAgICAgICAgICBNZXNzYWdlID0+IFRyYW5zbGF0YWJsZSgnTm8gb2JqZWN0IGJhY2tlbmQgZm91bmQhJyksCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CgogICAgICAgICMgZ2V0IGZvcm1hdCBsaXN0CiAgICAgICAgbXkgJEZvcm1hdExpc3QgPSAkSW1wb3J0RXhwb3J0T2JqZWN0LT5Gb3JtYXRMaXN0KCk7CgogICAgICAgIGlmICggISRGb3JtYXRMaXN0ICkgewogICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5GYXRhbEVycm9yKAogICAgICAgICAgICAgICAgTWVzc2FnZSA9PiBUcmFuc2xhdGFibGUoJ05vIGZvcm1hdCBiYWNrZW5kIGZvdW5kIScpLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQoKICAgICAgICAjIG91dHB1dCBvdmVydmlldwogICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdPdmVydmlldycsCiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgJVBhcmFtLAogICAgICAgICAgICB9LAogICAgICAgICk7CgogICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKCBOYW1lID0+ICdBY3Rpb25MaXN0JyApOwogICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKCBOYW1lID0+ICdBY3Rpb25BZGQnICk7CgogICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdPdmVydmlld1Jlc3VsdCcsCiAgICAgICAgICAgIERhdGEgPT4gXCVQYXJhbSwKICAgICAgICApOwoKICAgICAgICAjIGdldCB2YWxpZCBsaXN0CiAgICAgICAgbXkgJVZhbGlkTGlzdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpWYWxpZCcpLT5WYWxpZExpc3QoKTsKCiAgICAgICAgbXkgJEVtcHR5RGF0YWJhc2UgPSAxOwoKICAgICAgICBDTEFTUzoKICAgICAgICBmb3IgbXkgJE9iamVjdCAoIHNvcnQgeyAkT2JqZWN0TGlzdC0+eyRhfSBjbXAgJE9iamVjdExpc3QtPnskYn0gfSBrZXlzICV7JE9iamVjdExpc3R9ICkgewoKICAgICAgICAgICAgIyBnZXQgdGVtcGxhdGUgbGlzdAogICAgICAgICAgICBteSAkVGVtcGxhdGVMaXN0ID0gJEltcG9ydEV4cG9ydE9iamVjdC0+VGVtcGxhdGVMaXN0KAogICAgICAgICAgICAgICAgT2JqZWN0ID0+ICRPYmplY3QsCiAgICAgICAgICAgICAgICBVc2VySUQgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICAgICApOwoKICAgICAgICAgICAgaWYgKCAhJFRlbXBsYXRlTGlzdCB8fCByZWYgJFRlbXBsYXRlTGlzdCBuZSAnQVJSQVknIHx8ICFAeyRUZW1wbGF0ZUxpc3R9ICkgewogICAgICAgICAgICAgICAgbmV4dCBDTEFTUzsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgJEVtcHR5RGF0YWJhc2UgPSAwOwoKICAgICAgICAgICAgIyBvdXRwdXQgbGlzdAogICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgICAgIE5hbWUgPT4gJ092ZXJ2aWV3TGlzdCcsCiAgICAgICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICAgICBPYmplY3ROYW1lID0+ICRPYmplY3RMaXN0LT57JE9iamVjdH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICApOwoKICAgICAgICAgICAgZm9yIG15ICRUZW1wbGF0ZUlEICggQHskVGVtcGxhdGVMaXN0fSApIHsKCiAgICAgICAgICAgICAgICAjIGdldCB0ZW1wbGF0ZSBkYXRhCiAgICAgICAgICAgICAgICBteSAkVGVtcGxhdGVEYXRhID0gJEltcG9ydEV4cG9ydE9iamVjdC0+VGVtcGxhdGVHZXQoCiAgICAgICAgICAgICAgICAgICAgVGVtcGxhdGVJRCA9PiAkVGVtcGxhdGVJRCwKICAgICAgICAgICAgICAgICAgICBVc2VySUQgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgIyBvdXRwdXQgcm93CiAgICAgICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdPdmVydmlld0xpc3RSb3cnLAogICAgICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAleyRUZW1wbGF0ZURhdGF9LAogICAgICAgICAgICAgICAgICAgICAgICBGb3JtYXROYW1lID0+ICRGb3JtYXRMaXN0LT57ICRUZW1wbGF0ZURhdGEtPntGb3JtYXR9IH0sCiAgICAgICAgICAgICAgICAgICAgICAgIFZhbGlkICAgICAgPT4gJFZhbGlkTGlzdHsgJFRlbXBsYXRlRGF0YS0+e1ZhbGlkSUR9IH0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMgb3V0cHV0IGFuIGVtcHR5IGxpc3QKICAgICAgICBpZiAoJEVtcHR5RGF0YWJhc2UpIHsKCiAgICAgICAgICAgICMgb3V0cHV0IGxpc3QKICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgICAgICBOYW1lID0+ICdPdmVydmlld0xpc3QnLAogICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgT2JqZWN0TmFtZSA9PiBUcmFuc2xhdGFibGUoJ1RlbXBsYXRlIExpc3QnKSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICk7CiAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKCBOYW1lID0+ICdOb0RhdGFGb3VuZE1zZycgKTsKICAgICAgICB9CgogICAgICAgICMgb3V0cHV0IGhlYWRlciBhbmQgbmF2YmFyCiAgICAgICAgbXkgJE91dHB1dCA9ICRMYXlvdXRPYmplY3QtPkhlYWRlcigpOwogICAgICAgICRPdXRwdXQgLj0gJExheW91dE9iamVjdC0+TmF2aWdhdGlvbkJhcigpOwoKICAgICAgICAjIHN0YXJ0IHRlbXBsYXRlIG91dHB1dAogICAgICAgICRPdXRwdXQgLj0gJExheW91dE9iamVjdC0+T3V0cHV0KAogICAgICAgICAgICBUZW1wbGF0ZUZpbGUgPT4gJ0FkbWluSW1wb3J0RXhwb3J0JywKICAgICAgICAgICAgRGF0YSAgICAgICAgID0+IFwlUGFyYW0sCiAgICAgICAgKTsKCiAgICAgICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5Gb290ZXIoKTsKICAgICAgICByZXR1cm4gJE91dHB1dDsKICAgIH0KfQoKc3ViIF9NYXNrVGVtcGxhdGVFZGl0MSB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIG15ICVTZXJ2ZXJFcnJvcjsKICAgIGlmICggJFBhcmFte1NlcnZlckVycm9yfSApIHsKICAgICAgICAlU2VydmVyRXJyb3IgPSAleyAkUGFyYW17U2VydmVyRXJyb3J9IH07CiAgICB9CgogICAgIyBnZXQgbGF5b3V0IG9iamVjdAogICAgbXkgJExheW91dE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6T3V0cHV0OjpIVE1MOjpMYXlvdXQnKTsKCiAgICAjIG91dHB1dCBvdmVydmlldwogICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgTmFtZSA9PiAnT3ZlcnZpZXcnLAogICAgICAgIERhdGEgPT4gXCVQYXJhbSwKICAgICk7CgogICAgJExheW91dE9iamVjdC0+QmxvY2soIE5hbWUgPT4gJ0FjdGlvbkxpc3QnICk7CiAgICAkTGF5b3V0T2JqZWN0LT5CbG9jayggTmFtZSA9PiAnQWN0aW9uT3ZlcnZpZXcnICk7CgogICAgIyBnZW5lcmF0ZSBWYWxpZE9wdGlvblN0cmcKICAgIG15ICVWYWxpZExpc3QgICAgICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlZhbGlkJyktPlZhbGlkTGlzdCgpOwogICAgbXkgJVZhbGlkTGlzdFJldmVyc2UgPSByZXZlcnNlICVWYWxpZExpc3Q7CiAgICBteSAkVmFsaWRPcHRpb25TdHJnICA9ICRMYXlvdXRPYmplY3QtPkJ1aWxkU2VsZWN0aW9uKAogICAgICAgIE5hbWUgICAgICAgPT4gJ1ZhbGlkSUQnLAogICAgICAgIERhdGEgICAgICAgPT4gXCVWYWxpZExpc3QsCiAgICAgICAgU2VsZWN0ZWRJRCA9PiAkUGFyYW17VmFsaWRJRH0gfHwgJFZhbGlkTGlzdFJldmVyc2V7dmFsaWR9LAogICAgICAgIENsYXNzICAgICAgPT4gJ01vZGVybml6ZScsCiAgICApOwoKICAgIG15ICRDbGFzcyA9ICcgVmFsaWRhdGVfUmVxdWlyZWQgJzsKCiAgICBpZiAoICRTZXJ2ZXJFcnJvcntOYW1lfSApIHsKICAgICAgICAkQ2xhc3MgLj0gJ1NlcnZlckVycm9yJzsKICAgIH0KCiAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICBOYW1lID0+ICdUZW1wbGF0ZUVkaXQxJywKICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgJVBhcmFtLAogICAgICAgICAgICBWYWxpZE9wdGlvblN0cmcgPT4gJFZhbGlkT3B0aW9uU3RyZywKICAgICAgICAgICAgTmFtZUNsYXNzICAgICAgID0+ICRDbGFzcywKICAgICAgICB9LAogICAgKTsKCiAgICBpZiAoICRQYXJhbXtUZW1wbGF0ZUlEfSApIHsKICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnRWRpdE9iamVjdEZvcm1hdCcsCiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgJVBhcmFtLAogICAgICAgICAgICAgICAgT2JqZWN0TmFtZSA9PiAkUGFyYW17T2JqZWN0fSwKICAgICAgICAgICAgICAgIEZvcm1hdE5hbWUgPT4gJFBhcmFte0Zvcm1hdH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgKTsKICAgIH0KCiAgICBpZiAoICRQYXJhbXtOZXd9ICkgewoKICAgICAgICAjIGdldCBJbXBvcnRFeHBvcnQgb2JqZWN0CiAgICAgICAgbXkgJEltcG9ydEV4cG9ydE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpJbXBvcnRFeHBvcnQnKTsKCiAgICAgICAgIyBnZXQgb2JqZWN0IGxpc3QKICAgICAgICBteSAkT2JqZWN0TGlzdCA9ICRJbXBvcnRFeHBvcnRPYmplY3QtPk9iamVjdExpc3QoKTsKCiAgICAgICAgaWYgKCAhJE9iamVjdExpc3QgKSB7CiAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkZhdGFsRXJyb3IoCiAgICAgICAgICAgICAgICBNZXNzYWdlID0+IFRyYW5zbGF0YWJsZSgnTm8gb2JqZWN0IGJhY2tlbmQgZm91bmQhJyksCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CgogICAgICAgICMgZ2V0IGZvcm1hdCBsaXN0CiAgICAgICAgbXkgJEZvcm1hdExpc3QgPSAkSW1wb3J0RXhwb3J0T2JqZWN0LT5Gb3JtYXRMaXN0KCk7CgogICAgICAgIGlmICggISRGb3JtYXRMaXN0ICkgewogICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5GYXRhbEVycm9yKAogICAgICAgICAgICAgICAgTWVzc2FnZSA9PiBUcmFuc2xhdGFibGUoJ05vIGZvcm1hdCBiYWNrZW5kIGZvdW5kIScpLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQoKICAgICAgICAkQ2xhc3MgPSAnIFZhbGlkYXRlX1JlcXVpcmVkICc7CgogICAgICAgIGlmICggJFNlcnZlckVycm9ye09iamVjdH0gKSB7CiAgICAgICAgICAgICRDbGFzcyAuPSAnU2VydmVyRXJyb3InOwogICAgICAgIH0KCiAgICAgICAgIyBnZW5lcmF0ZSBPYmplY3RPcHRpb25TdHJnCiAgICAgICAgbXkgJE9iamVjdE9wdGlvblN0cmcgPSAkTGF5b3V0T2JqZWN0LT5CdWlsZFNlbGVjdGlvbigKICAgICAgICAgICAgRGF0YSAgICAgICAgID0+ICRPYmplY3RMaXN0LAogICAgICAgICAgICBOYW1lICAgICAgICAgPT4gJ09iamVjdCcsCiAgICAgICAgICAgIFNlbGVjdGVkSUQgICA9PiAkUGFyYW17T2JqZWN0fSB8fCAnJywKICAgICAgICAgICAgUG9zc2libGVOb25lID0+IDEsCiAgICAgICAgICAgIFRyYW5zbGF0aW9uICA9PiAxLAogICAgICAgICAgICBDbGFzcyAgICAgICAgPT4gJENsYXNzIC4gJyBNb2Rlcm5pemUnLAogICAgICAgICk7CgogICAgICAgICRDbGFzcyA9ICcgVmFsaWRhdGVfUmVxdWlyZWQgJzsKICAgICAgICBpZiAoICRTZXJ2ZXJFcnJvcntGb3JtYXR9ICkgewogICAgICAgICAgICAkQ2xhc3MgLj0gJ1NlcnZlckVycm9yJzsKICAgICAgICB9CgogICAgICAgICMgZ2VuZXJhdGUgRm9ybWF0T3B0aW9uU3RyZwogICAgICAgIG15ICRGb3JtYXRPcHRpb25TdHJnID0gJExheW91dE9iamVjdC0+QnVpbGRTZWxlY3Rpb24oCiAgICAgICAgICAgIERhdGEgICAgICAgICA9PiAkRm9ybWF0TGlzdCwKICAgICAgICAgICAgTmFtZSAgICAgICAgID0+ICdGb3JtYXQnLAogICAgICAgICAgICBTZWxlY3RlZElEICAgPT4gJFBhcmFte0Zvcm1hdH0gfHwgJycsCiAgICAgICAgICAgIFBvc3NpYmxlTm9uZSA9PiAxLAogICAgICAgICAgICBUcmFuc2xhdGlvbiAgPT4gMSwKICAgICAgICAgICAgQ2xhc3MgICAgICAgID0+ICRDbGFzcyAuICcgTW9kZXJuaXplJywKICAgICAgICApOwoKICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnTmV3T2JqZWN0Rm9ybWF0JywKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBPYmplY3RPcHRpb24gPT4gJE9iamVjdE9wdGlvblN0cmcsCiAgICAgICAgICAgICAgICBGb3JtYXRPcHRpb24gPT4gJEZvcm1hdE9wdGlvblN0cmcsCiAgICAgICAgICAgIH0sCiAgICAgICAgKTsKICAgIH0KCiAgICAjIG91dHB1dCBoZWFkZXIgYW5kIG5hdmJhcgogICAgbXkgJE91dHB1dCA9ICRMYXlvdXRPYmplY3QtPkhlYWRlcigpOwogICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5OYXZpZ2F0aW9uQmFyKCk7CgogICAgIyBzdGFydCB0ZW1wbGF0ZSBvdXRwdXQKICAgICRPdXRwdXQgLj0gJExheW91dE9iamVjdC0+T3V0cHV0KAogICAgICAgIFRlbXBsYXRlRmlsZSA9PiAnQWRtaW5JbXBvcnRFeHBvcnQnLAogICAgICAgIERhdGEgICAgICAgICA9PiBcJVBhcmFtLAogICAgKTsKCiAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPkZvb3RlcigpOwogICAgcmV0dXJuICRPdXRwdXQ7Cn0KCnN1YiBfTWFza1RlbXBsYXRlRWRpdDIgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICBteSAlU2VydmVyRXJyb3I7CiAgICBpZiAoICRQYXJhbXtTZXJ2ZXJFcnJvcn0gKSB7CiAgICAgICAgJVNlcnZlckVycm9yID0gJXsgJFBhcmFte1NlcnZlckVycm9yfSB9OwogICAgfQoKICAgIG15ICVEYXRhVHlwZUVycm9yOwogICAgaWYgKCAkUGFyYW17RGF0YVR5cGVFcnJvcn0gKSB7CiAgICAgICAgJURhdGFUeXBlRXJyb3IgPSAleyAkUGFyYW17RGF0YVR5cGVFcnJvcn0gfTsKICAgIH0KCiAgICAjIGdldCBsYXlvdXQgb2JqZWN0CiAgICBteSAkTGF5b3V0T2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxheW91dCcpOwoKICAgIG15ICRUZW1wbGF0ZUlEOwogICAgaWYgKCAkUGFyYW17VGVtcGxhdGVJRH0gKSB7CiAgICAgICAgJFRlbXBsYXRlSUQgPSAkUGFyYW17VGVtcGxhdGVJRH07CiAgICB9CiAgICBlbHNlIHsKICAgICAgICAkTGF5b3V0T2JqZWN0LT5GYXRhbEVycm9yKAogICAgICAgICAgICBNZXNzYWdlID0+IFRyYW5zbGF0YWJsZSgnTmVlZGVkIFRlbXBsYXRlSUQhJyksCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBnZXQgSW1wb3J0RXhwb3J0IG9iamVjdAogICAgbXkgJEltcG9ydEV4cG9ydE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpJbXBvcnRFeHBvcnQnKTsKCiAgICAjIGdldCB0ZW1wbGF0ZSBkYXRhCiAgICBteSAkVGVtcGxhdGVEYXRhOwogICAgJFRlbXBsYXRlRGF0YSA9ICRJbXBvcnRFeHBvcnRPYmplY3QtPlRlbXBsYXRlR2V0KAogICAgICAgIFRlbXBsYXRlSUQgPT4gJFRlbXBsYXRlSUQsCiAgICAgICAgVXNlcklEICAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICApOwoKICAgIGlmICggISRUZW1wbGF0ZURhdGEtPntUZW1wbGF0ZUlEfSApIHsKICAgICAgICAkTGF5b3V0T2JqZWN0LT5GYXRhbEVycm9yKAogICAgICAgICAgICBNZXNzYWdlID0+IFRyYW5zbGF0YWJsZSgnVGVtcGxhdGUgbm90IGZvdW5kIScpLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICRMYXlvdXRPYmplY3QtPkFkZEpTRGF0YSgKICAgICAgICBLZXkgICA9PiAnQmFja1VSTCcsCiAgICAgICAgVmFsdWUgPT4gIkFjdGlvbj0kU2VsZi0+e0FjdGlvbn07U3ViYWN0aW9uPVRlbXBsYXRlRWRpdDE7VGVtcGxhdGVJRD0kVGVtcGxhdGVJRCIsCiAgICApOwoKICAgICRMYXlvdXRPYmplY3QtPkFkZEpTRGF0YSgKICAgICAgICBLZXkgICA9PiAnQmFzZUxpbmsnLAogICAgICAgIFZhbHVlID0+ICRMYXlvdXRPYmplY3QtPntCYXNlbGlua30sCiAgICApOwoKICAgICRMYXlvdXRPYmplY3QtPkFkZEpTRGF0YSgKICAgICAgICBLZXkgICA9PiAnVGVtcGxhdGVPdmVydmlldycsCiAgICAgICAgVmFsdWUgPT4gMSwKICAgICk7CgogICAgIyBvdXRwdXQgb3ZlcnZpZXcKICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgIE5hbWUgPT4gJ092ZXJ2aWV3JywKICAgICAgICBEYXRhID0+IFwlUGFyYW0sCiAgICApOwoKICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKCBOYW1lID0+ICdBY3Rpb25MaXN0JyApOwogICAgJExheW91dE9iamVjdC0+QmxvY2soIE5hbWUgPT4gJ0FjdGlvbk92ZXJ2aWV3JyApOwoKICAgICMgb3V0cHV0IGxpc3QKICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgIE5hbWUgPT4gJ1RlbXBsYXRlRWRpdDInLAogICAgICAgIERhdGEgPT4gJFRlbXBsYXRlRGF0YSwKICAgICk7CgogICAgIyBnZXQgb2JqZWN0IGF0dHJpYnV0ZXMKICAgIG15ICRPYmplY3RBdHRyaWJ1dGVMaXN0ID0gJEltcG9ydEV4cG9ydE9iamVjdC0+T2JqZWN0QXR0cmlidXRlc0dldCgKICAgICAgICBUZW1wbGF0ZUlEID0+ICRUZW1wbGF0ZURhdGEtPntUZW1wbGF0ZUlEfSwKICAgICAgICBVc2VySUQgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICk7CgogICAgIyBnZXQgb2JqZWN0IGRhdGEKICAgIG15ICRPYmplY3REYXRhID0gJEltcG9ydEV4cG9ydE9iamVjdC0+T2JqZWN0RGF0YUdldCgKICAgICAgICBUZW1wbGF0ZUlEID0+ICRUZW1wbGF0ZURhdGEtPntUZW1wbGF0ZUlEfSwKICAgICAgICBVc2VySUQgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICk7CgogICAgIyBqYXZhc2NyaXB0IHZhbGlkYXRpb24gY2xhc3MgcGVyIGRhdGF0eXBlCiAgICBteSAlSlNDbGFzczsKICAgIG15ICVQcmVkZWZpbmVkRXJyb3JNZXNzYWdlczsKCiAgICAkSlNDbGFzc3tOdW1iZXJ9ICAgICAgICAgICAgICAgID0gJ1ZhbGlkYXRlX051bWJlcic7CiAgICAkSlNDbGFzc3tOdW1iZXJCaWdnZXJUaGFuWmVyb30gID0gJ1ZhbGlkYXRlX051bWJlckJpZ2dlclRoYW5aZXJvJzsKICAgICRKU0NsYXNze0ludGVnZXJ9ICAgICAgICAgICAgICAgPSAnVmFsaWRhdGVfTnVtYmVySW50ZWdlcic7CiAgICAkSlNDbGFzc3tJbnRlZ2VyQmlnZ2VyVGhhblplcm99ID0gJ1ZhbGlkYXRlX051bWJlckludGVnZXJCaWdnZXJUaGFuWmVybyc7CgogICAgJFByZWRlZmluZWRFcnJvck1lc3NhZ2Vze051bWJlcn0gPSAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoJ251bWJlcicpOwogICAgJFByZWRlZmluZWRFcnJvck1lc3NhZ2Vze051bWJlckJpZ2dlclRoYW5aZXJvfQogICAgICAgID0gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCdudW1iZXIgYmlnZ2VyIHRoYW4gemVybycpOwogICAgJFByZWRlZmluZWRFcnJvck1lc3NhZ2Vze0ludGVnZXJ9ID0gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCdpbnRlZ2VyJyk7CiAgICAkUHJlZGVmaW5lZEVycm9yTWVzc2FnZXN7SW50ZWdlckJpZ2dlclRoYW5aZXJvfQogICAgICAgID0gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCdpbnRlZ2VyIGJpZ2dlciB0aGFuIHplcm8nKTsKCiAgICAjIG91dHB1dCBvYmplY3QgYXR0cmlidXRlcwogICAgZm9yIG15ICRJdGVtICggQHskT2JqZWN0QXR0cmlidXRlTGlzdH0gKSB7CgogICAgICAgIG15ICRDbGFzcyA9ICcgJzsKICAgICAgICBteSAkVmFsdWU7CgogICAgICAgIG15ICREYXRhVHlwZUVycm9yOwogICAgICAgIG15ICRFcnJvck1lc3NhZ2U7CgogICAgICAgIGlmICggJEl0ZW0tPntJbnB1dH0tPntSZXF1aXJlZH0gKSB7CiAgICAgICAgICAgICRDbGFzcyAgICAgICAgPSAnVmFsaWRhdGVfUmVxdWlyZWQnOwogICAgICAgICAgICAkRXJyb3JNZXNzYWdlID0gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCdFbGVtZW50IHJlcXVpcmVkLCBwbGVhc2UgaW5zZXJ0IGRhdGEnKTsKICAgICAgICB9CgogICAgICAgIGlmICggJEl0ZW0tPntJbnB1dH0tPntEYXRhVHlwZX0gKSB7CiAgICAgICAgICAgICRDbGFzcyAuPSAiICRKU0NsYXNzeyAkSXRlbS0+e0lucHV0fS0+e0RhdGFUeXBlfSB9IjsKICAgICAgICAgICAgJEVycm9yTWVzc2FnZSA9ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSgKICAgICAgICAgICAgICAgICdJbnZhbGlkIGRhdGEsIHBsZWFzZSBpbnNlcnQgYSB2YWxpZCAlcycsCiAgICAgICAgICAgICAgICAkUHJlZGVmaW5lZEVycm9yTWVzc2FnZXN7ICRJdGVtLT57SW5wdXR9LT57RGF0YVR5cGV9IH0KICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgICMgZ2V0IGRhdGEgZnJvbSBmb3JtIG9yIGZyb20gZGF0YWJhc2UKICAgICAgICAjIFNlcnZlckVycm9yID0gc2hvdyB0aGUgd3JvbmcgZGF0YSBpbiBmb3JtCiAgICAgICAgIyAhU2VydmVyRXJyb3IgPSBzaG93IGRhdGFiYXNlIGRhdGEgb3IgbmV3IGZpZWxkcwoKICAgICAgICBpZiAoICRQYXJhbXtTZXJ2ZXJFcnJvcn0gfHwgJFBhcmFte0RhdGFUeXBlRXJyb3J9ICkgewogICAgICAgICAgICAkVmFsdWUgPSAkUGFyYW17VGVtcGxhdGVEYXRhRm9ybX0tPnsgJEl0ZW0tPntLZXl9IH07CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICAkVmFsdWUgPSAkT2JqZWN0RGF0YS0+eyAkSXRlbS0+e0tleX0gfTsKICAgICAgICB9CgogICAgICAgICMgZXJyb3IgYXJlYQoKICAgICAgICAjIHByZXBhcmUgZGlmZmVyZW50IGRhdGEgJiBtZXNzYWdlIHBlciBlcnJvcgogICAgICAgIGlmICggJFNlcnZlckVycm9yeyAkSXRlbS0+e05hbWV9IH0gfHwgJERhdGFUeXBlRXJyb3J7ICRJdGVtLT57TmFtZX0gfSApIHsKICAgICAgICAgICAgJENsYXNzIC49ICcgU2VydmVyRXJyb3InOwogICAgICAgIH0KCiAgICAgICAgIyBjcmVhdGUgZm9ybSBpbnB1dAogICAgICAgIG15ICRJbnB1dFN0cmluZyA9ICRMYXlvdXRPYmplY3QtPkltcG9ydEV4cG9ydEZvcm1JbnB1dENyZWF0ZSgKICAgICAgICAgICAgSXRlbSAgPT4gJEl0ZW0sCiAgICAgICAgICAgIENsYXNzID0+ICRDbGFzcyAuICcgTW9kZXJuaXplJywKICAgICAgICAgICAgVmFsdWUgPT4gJFZhbHVlLAogICAgICAgICk7CgogICAgICAgICMgYnVpbGQgaWQKICAgICAgICBteSAkSUQ7CiAgICAgICAgaWYgKCAkSXRlbS0+e1ByZWZpeH0gKSB7CiAgICAgICAgICAgICRJRCA9ICIkSXRlbS0+e1ByZWZpeH0kSXRlbS0+e0tleX0iOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgJElEID0gJEl0ZW0tPntLZXl9OwogICAgICAgIH0KCiAgICAgICAgIyBvdXRwdXQgYXR0cmlidXRlIHJvdwogICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdUZW1wbGF0ZUVkaXQyRWxlbWVudCcsCiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgTmFtZSAgICAgICAgID0+ICRJdGVtLT57TmFtZX0gfHwgJycsCiAgICAgICAgICAgICAgICBJbnB1dFN0cmcgICAgPT4gJElucHV0U3RyaW5nLAogICAgICAgICAgICAgICAgSUQgICAgICAgICAgID0+ICRJRCwKICAgICAgICAgICAgICAgIEVycm9yTWVzc2FnZSA9PiAkRXJyb3JNZXNzYWdlLAogICAgICAgICAgICB9LAogICAgICAgICk7CiAgICB9CgogICAgIyBvdXRwdXQgaGVhZGVyIGFuZCBuYXZiYXIKICAgIG15ICRPdXRwdXQgPSAkTGF5b3V0T2JqZWN0LT5IZWFkZXIoKTsKICAgICRPdXRwdXQgLj0gJExheW91dE9iamVjdC0+TmF2aWdhdGlvbkJhcigpOwoKICAgICMgc3RhcnQgdGVtcGxhdGUgb3V0cHV0CiAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPk91dHB1dCgKICAgICAgICBUZW1wbGF0ZUZpbGUgPT4gJ0FkbWluSW1wb3J0RXhwb3J0JywKICAgICAgICBEYXRhICAgICAgICAgPT4gXCVQYXJhbSwKICAgICk7CgogICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5Gb290ZXIoKTsKICAgIHJldHVybiAkT3V0cHV0OwoKfQoKc3ViIF9NYXNrVGVtcGxhdGVFZGl0MyB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIG15ICVTZXJ2ZXJFcnJvcjsKICAgIGlmICggJFBhcmFte1NlcnZlckVycm9yfSApIHsKICAgICAgICAlU2VydmVyRXJyb3IgPSAleyAkUGFyYW17U2VydmVyRXJyb3J9IH07CiAgICB9CgogICAgbXkgJFRlbXBsYXRlSUQ7CiAgICBpZiAoICRQYXJhbXtUZW1wbGF0ZUlEfSApIHsKICAgICAgICAkVGVtcGxhdGVJRCA9ICRQYXJhbXtUZW1wbGF0ZUlEfTsKICAgIH0KCiAgICAjIGdldCBsYXlvdXQgb2JqZWN0CiAgICBteSAkTGF5b3V0T2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxheW91dCcpOwoKICAgIGlmICggISRUZW1wbGF0ZUlEICkgewogICAgICAgICRMYXlvdXRPYmplY3QtPkZhdGFsRXJyb3IoCiAgICAgICAgICAgIE1lc3NhZ2UgPT4gVHJhbnNsYXRhYmxlKCdUZW1wbGF0ZSBub3QgZm91bmQhJyksCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBnZXQgSW1wb3J0RXhwb3J0IG9iamVjdAogICAgbXkgJEltcG9ydEV4cG9ydE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpJbXBvcnRFeHBvcnQnKTsKCiAgICAjIGdldCB0ZW1wbGF0ZSBkYXRhCiAgICBteSAkVGVtcGxhdGVEYXRhOwogICAgJFRlbXBsYXRlRGF0YSA9ICRJbXBvcnRFeHBvcnRPYmplY3QtPlRlbXBsYXRlR2V0KAogICAgICAgIFRlbXBsYXRlSUQgPT4gJFRlbXBsYXRlSUQsCiAgICAgICAgVXNlcklEICAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICApOwoKICAgIGlmICggISRUZW1wbGF0ZURhdGEtPntUZW1wbGF0ZUlEfSApIHsKICAgICAgICAkTGF5b3V0T2JqZWN0LT5GYXRhbEVycm9yKAogICAgICAgICAgICBNZXNzYWdlID0+IFRyYW5zbGF0YWJsZSgnVGVtcGxhdGUgbm90IGZvdW5kIScpLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICRQYXJhbXtCYWNrVVJMfSA9ICJBY3Rpb249JFNlbGYtPntBY3Rpb259O1N1YmFjdGlvbj1UZW1wbGF0ZUVkaXQyO1RlbXBsYXRlSUQ9JFRlbXBsYXRlSUQiOwoKICAgICMgb3V0cHV0IG92ZXJ2aWV3CiAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICBOYW1lID0+ICdPdmVydmlldycsCiAgICAgICAgRGF0YSA9PiBcJVBhcmFtLAogICAgKTsKCiAgICAkTGF5b3V0T2JqZWN0LT5CbG9jayggTmFtZSA9PiAnQWN0aW9uTGlzdCcgKTsKICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKCBOYW1lID0+ICdBY3Rpb25PdmVydmlldycgKTsKCiAgICAjIG91dHB1dCBsaXN0CiAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICBOYW1lID0+ICdUZW1wbGF0ZUVkaXQzJywKICAgICAgICBEYXRhID0+ICRUZW1wbGF0ZURhdGEsCiAgICApOwoKICAgICMgZ2V0IGZvcm1hdCBhdHRyaWJ1dGVzCiAgICBteSAkRm9ybWF0QXR0cmlidXRlTGlzdCA9ICRJbXBvcnRFeHBvcnRPYmplY3QtPkZvcm1hdEF0dHJpYnV0ZXNHZXQoCiAgICAgICAgVGVtcGxhdGVJRCA9PiAkVGVtcGxhdGVEYXRhLT57VGVtcGxhdGVJRH0sCiAgICAgICAgVXNlcklEICAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICApOwoKICAgICMgZ2V0IGZvcm1hdCBkYXRhCiAgICBteSAkRm9ybWF0RGF0YSA9ICRJbXBvcnRFeHBvcnRPYmplY3QtPkZvcm1hdERhdGFHZXQoCiAgICAgICAgVGVtcGxhdGVJRCA9PiAkVGVtcGxhdGVEYXRhLT57VGVtcGxhdGVJRH0sCiAgICAgICAgVXNlcklEICAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICApOwoKICAgIGlmICggISRGb3JtYXREYXRhICkgewogICAgICAgICRMYXlvdXRPYmplY3QtPkZhdGFsRXJyb3IoCiAgICAgICAgICAgIE1lc3NhZ2UgPT4gVHJhbnNsYXRhYmxlKCdGb3JtYXQgbm90IGZvdW5kIScpLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgb3V0cHV0IGZvcm1hdCBhdHRyaWJ1dGVzCiAgICBmb3IgbXkgJEl0ZW0gKCBAeyRGb3JtYXRBdHRyaWJ1dGVMaXN0fSApIHsKCiAgICAgICAgIyBidWlsZCBpZAogICAgICAgIG15ICRJRDsKICAgICAgICBpZiAoICRJdGVtLT57UHJlZml4fSApIHsKICAgICAgICAgICAgJElEID0gIiRJdGVtLT57UHJlZml4fSRJdGVtLT57S2V5fSI7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICAkSUQgPSAiJEl0ZW0tPntLZXl9IjsKICAgICAgICB9CgogICAgICAgIG15ICRDbGFzcyA9ICcgJzsKICAgICAgICBpZiAoICRJdGVtLT57SW5wdXR9LT57UmVxdWlyZWR9ICkgewogICAgICAgICAgICAkQ2xhc3MgPSAnVmFsaWRhdGVfUmVxdWlyZWQgJzsKICAgICAgICB9CgogICAgICAgIGlmICggJFNlcnZlckVycm9yeyAkSXRlbS0+e05hbWV9IH0gKSB7CiAgICAgICAgICAgICRDbGFzcyAuPSAnIFNlcnZlckVycm9yJzsKICAgICAgICB9CgogICAgICAgICMgY3JlYXRlIGZvcm0gaW5wdXQKICAgICAgICBteSAkSW5wdXRTdHJpbmcgPSAkTGF5b3V0T2JqZWN0LT5JbXBvcnRFeHBvcnRGb3JtSW5wdXRDcmVhdGUoCiAgICAgICAgICAgIEl0ZW0gID0+ICRJdGVtLAogICAgICAgICAgICBDbGFzcyA9PiAkQ2xhc3MgLiAnIE1vZGVybml6ZScsCiAgICAgICAgICAgIFZhbHVlID0+ICRGb3JtYXREYXRhLT57ICRJdGVtLT57S2V5fSB9LAogICAgICAgICk7CgogICAgICAgICMgb3V0cHV0IGF0dHJpYnV0ZSByb3cKICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnVGVtcGxhdGVFZGl0M0VsZW1lbnQnLAogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIE5hbWUgICAgICA9PiAkSXRlbS0+e05hbWV9IHx8ICcnLAogICAgICAgICAgICAgICAgSW5wdXRTdHJnID0+ICRJbnB1dFN0cmluZywKICAgICAgICAgICAgICAgIElEICAgICAgICA9PiAkSUQsCiAgICAgICAgICAgIH0sCiAgICAgICAgKTsKCiAgICAgICAgIyBvdXRwdXQgcmVxdWlyZWQgbm90aWNlCiAgICAgICAgaWYgKCAkSXRlbS0+e0lucHV0fS0+e1JlcXVpcmVkfSApIHsKICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgICAgICBOYW1lID0+ICdUZW1wbGF0ZUVkaXQzRWxlbWVudFJlcXVpcmVkJywKICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gJEl0ZW0tPntOYW1lfSB8fCAnJywKICAgICAgICAgICAgICAgICAgICBJRCA9PiAkSUQsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICApOwogICAgICAgIH0KICAgIH0KCiAgICAjIG91dHB1dCBoZWFkZXIgYW5kIG5hdmJhcgogICAgbXkgJE91dHB1dCA9ICRMYXlvdXRPYmplY3QtPkhlYWRlcigpOwogICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5OYXZpZ2F0aW9uQmFyKCk7CgogICAgIyBzdGFydCB0ZW1wbGF0ZSBvdXRwdXQKICAgICRPdXRwdXQgLj0gJExheW91dE9iamVjdC0+T3V0cHV0KAogICAgICAgIFRlbXBsYXRlRmlsZSA9PiAnQWRtaW5JbXBvcnRFeHBvcnQnLAogICAgICAgIERhdGEgICAgICAgICA9PiBcJVBhcmFtLAogICAgKTsKCiAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPkZvb3RlcigpOwogICAgcmV0dXJuICRPdXRwdXQ7Cgp9CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6T3V0cHV0OjpIVE1MOjpJbXBvcnRFeHBvcnQ6OkxheW91dENoZWNrYm94OwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKb3VyIEBPYmplY3REZXBlbmRlbmNpZXMgPSAoCiAgICAnS2VybmVsOjpTeXN0ZW06OkxvZycsCiAgICAnS2VybmVsOjpTeXN0ZW06OldlYjo6UmVxdWVzdCcsCik7Cgo9aGVhZDEgTkFNRQoKS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkltcG9ydEV4cG9ydDo6TGF5b3V0Q2hlY2tib3ggLSBsYXlvdXQgYmFja2VuZCBtb2R1bGUKCj1oZWFkMSBERVNDUklQVElPTgoKQWxsIGxheW91dCBmdW5jdGlvbnMgZm9yIGNoZWNrYm94IGVsZW1lbnRzIGluIGltcG9ydC9leHBvcnQuCgo9Y3V0Cgo9aGVhZDIgbmV3KCkKCkNyZWF0ZSBhbiBvYmplY3QKCiAgICAkQmFja2VuZE9iamVjdCA9IEtlcm5lbDo6T3V0cHV0OjpIVE1MOjpJbXBvcnRFeHBvcnQ6OkxheW91dENoZWNrYm94LT5uZXcoCiAgICAgICAgJVBhcmFtLAogICAgKTsKCj1jdXQKCnN1YiBuZXcgewogICAgbXkgKCAkVHlwZSwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGFsbG9jYXRlIG5ldyBoYXNoIGZvciBvYmplY3QKICAgIG15ICRTZWxmID0ge307CiAgICBibGVzcyggJFNlbGYsICRUeXBlICk7CgogICAgcmV0dXJuICRTZWxmOwp9Cgo9aGVhZDIgRm9ybUlucHV0Q3JlYXRlKCkKCkNyZWF0ZSBhIGlucHV0IHN0cmluZwoKICAgIG15ICRWYWx1ZSA9ICRCYWNrZW5kT2JqZWN0LT5Gb3JtSW5wdXRDcmVhdGUoCiAgICAgICAgSXRlbSAgID0+ICRJdGVtUmVmLAogICAgICAgIFByZWZpeCA9PiAnUHJlZml4OjonLCAgIyAob3B0aW9uYWwpCiAgICAgICAgVmFsdWUgID0+ICdWYWx1ZScsICAgICAjIChvcHRpb25hbCkKICAgICk7Cgo9Y3V0CgpzdWIgRm9ybUlucHV0Q3JlYXRlIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGlmICggISRQYXJhbXtJdGVtfSApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ05lZWQgSXRlbSEnLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICRQYXJhbXtQcmVmaXh9IHx8PSAnJzsKCiAgICBteSAkQ2hlY2tlZCA9ICRQYXJhbXtWYWx1ZX0gPyAnY2hlY2tlZD0iY2hlY2tlZCInIDogJyc7CgogICAgcmV0dXJuCiAgICAgICAgcXF7PGlucHV0IGlkPSIkUGFyYW17UHJlZml4fSRQYXJhbXtJdGVtfS0+e0tleX0iIHR5cGU9ImNoZWNrYm94IiBuYW1lPSIkUGFyYW17UHJlZml4fSRQYXJhbXtJdGVtfS0+e0tleX0iICRDaGVja2VkIC8+fTsKfQoKPWhlYWQyIEZvcm1EYXRhR2V0KCkKCkdldCBmb3JtIGRhdGEKCiAgICBteSAkRm9ybURhdGEgPSAkQmFja2VuZE9iamVjdC0+Rm9ybURhdGFHZXQoCiAgICAgICAgSXRlbSAgID0+ICRJdGVtUmVmLAogICAgICAgIFByZWZpeCA9PiAnUHJlZml4OjonLCAgIyAob3B0aW9uYWwpCiAgICApOwoKPWN1dAoKc3ViIEZvcm1EYXRhR2V0IHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGlmICggISRQYXJhbXtJdGVtfSApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ05lZWQgSXRlbSEnLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICRQYXJhbXtQcmVmaXh9IHx8PSAnJzsKCiAgICAjIGdldCBmb3JtIGRhdGEKICAgIG15ICRGb3JtRGF0YSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpXZWI6OlJlcXVlc3QnKS0+R2V0UGFyYW0oCiAgICAgICAgUGFyYW0gPT4gJFBhcmFte1ByZWZpeH0gLiAkUGFyYW17SXRlbX0tPntLZXl9LAogICAgKTsKCiAgICByZXR1cm4gJEZvcm1EYXRhOwp9CgoxOwoKPWhlYWQxIFRFUk1TIEFORCBDT05ESVRJT05TCgpUaGlzIHNvZnR3YXJlIGlzIHBhcnQgb2YgdGhlIE9UUlMgcHJvamVjdCAoTDxodHRwczovL290cnMub3JnLz4pLgoKVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoR1BMKS4gSWYgeW91CmRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBMPGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvZ3BsLTMuMC50eHQ+LgoKPWN1dAo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6T3V0cHV0OjpIVE1MOjpJbXBvcnRFeHBvcnQ6OkxheW91dFRUOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKb3VyIEBPYmplY3REZXBlbmRlbmNpZXMgPSAoCiAgICAnS2VybmVsOjpTeXN0ZW06OkxvZycsCik7Cgo9aGVhZDEgTkFNRQoKS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkltcG9ydEV4cG9ydDo6TGF5b3V0VFQgLSBsYXlvdXQgYmFja2VuZCBtb2R1bGUKCj1oZWFkMSBERVNDUklQVElPTgoKQWxsIGxheW91dCBmdW5jdGlvbnMgZm9yIGRpc3BsYXkgQzxUVD4gY29kZQoKPWN1dAoKPWhlYWQyIG5ldygpCgpDcmVhdGUgYW4gb2JqZWN0CgogICAgJEJhY2tlbmRPYmplY3QgPSBLZXJuZWw6Ok91dHB1dDo6SFRNTDo6SW1wb3J0RXhwb3J0OjpMYXlvdXRUVC0+bmV3KAogICAgICAgICVQYXJhbSwKICAgICk7Cgo9Y3V0CgpzdWIgbmV3IHsKICAgIG15ICggJFR5cGUsICVQYXJhbSApID0gQF87CgogICAgIyBhbGxvY2F0ZSBuZXcgaGFzaCBmb3Igb2JqZWN0CiAgICBteSAkU2VsZiA9IHt9OwogICAgYmxlc3MoICRTZWxmLCAkVHlwZSApOwoKICAgIHJldHVybiAkU2VsZjsKfQoKPWhlYWQyIEZvcm1JbnB1dENyZWF0ZSgpCgpDcmVhdGUgYSBpbnB1dCBzdHJpbmcKCiAgICBteSAkVmFsdWUgPSAkQmFja2VuZE9iamVjdC0+Rm9ybUlucHV0Q3JlYXRlKAogICAgICAgIEl0ZW0gPT4gJEl0ZW1SZWYsCiAgICApOwoKPWN1dAoKc3ViIEZvcm1JbnB1dENyZWF0ZSB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBpZiAoICEkUGFyYW17SXRlbX0gKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICdOZWVkIEl0ZW0hJwogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIHJldHVybiAkUGFyYW17SXRlbX0tPntJbnB1dH0tPntEYXRhfTsKfQoKPWhlYWQyIEZvcm1EYXRhR2V0KCkKCkdldCBmb3JtIGRhdGEKCiAgICBteSAkRm9ybURhdGEgPSAkQmFja2VuZE9iamVjdC0+Rm9ybURhdGFHZXQoKTsKCj1jdXQKCnN1YiBGb3JtRGF0YUdldCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIHJldHVybjsKfQoKMTsKCj1oZWFkMSBURVJNUyBBTkQgQ09ORElUSU9OUwoKVGhpcyBzb2Z0d2FyZSBpcyBwYXJ0IG9mIHRoZSBPVFJTIHByb2plY3QgKEw8aHR0cHM6Ly9vdHJzLm9yZy8+KS4KClRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCnRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQpkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgTDxodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0Pi4KCj1jdXQK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6T3V0cHV0OjpIVE1MOjpJbXBvcnRFeHBvcnQ6OkxheW91dFNlbGVjdGlvbjsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCm91ciBAT2JqZWN0RGVwZW5kZW5jaWVzID0gKAogICAgJ0tlcm5lbDo6U3lzdGVtOjpMb2cnLAogICAgJ0tlcm5lbDo6T3V0cHV0OjpIVE1MOjpMYXlvdXQnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpXZWI6OlJlcXVlc3QnLAopOwoKPWhlYWQxIE5BTUUKCktlcm5lbDo6T3V0cHV0OjpIVE1MOjpJbXBvcnRFeHBvcnQ6OkxheW91dFNlbGVjdGlvbiAtIGxheW91dCBiYWNrZW5kIG1vZHVsZQoKPWhlYWQxIERFU0NSSVBUSU9OCgpBbGwgbGF5b3V0IGZ1bmN0aW9ucyBmb3Igc2VsZWN0aW9uIGVsZW1lbnRzCgo9Y3V0Cgo9aGVhZDIgbmV3KCkKCkNyZWF0ZSBhbiBvYmplY3QKCiAgICAkQmFja2VuZE9iamVjdCA9IEtlcm5lbDo6T3V0cHV0OjpIVE1MOjpJbXBvcnRFeHBvcnQ6OkxheW91dFNlbGVjdGlvbi0+bmV3KAogICAgICAgICVQYXJhbSwKICAgICk7Cgo9Y3V0CgpzdWIgbmV3IHsKICAgIG15ICggJFR5cGUsICVQYXJhbSApID0gQF87CgogICAgIyBhbGxvY2F0ZSBuZXcgaGFzaCBmb3Igb2JqZWN0CiAgICBteSAkU2VsZiA9IHt9OwogICAgYmxlc3MoICRTZWxmLCAkVHlwZSApOwoKICAgIHJldHVybiAkU2VsZjsKfQoKPWhlYWQyIEZvcm1JbnB1dENyZWF0ZSgpCgpDcmVhdGUgYSBpbnB1dCBzdHJpbmcKCiAgICBteSAkVmFsdWUgPSAkQmFja2VuZE9iamVjdC0+Rm9ybUlucHV0Q3JlYXRlKAogICAgICAgIEl0ZW0gICA9PiAkSXRlbVJlZiwKICAgICAgICBQcmVmaXggPT4gJ1ByZWZpeDo6JywgICMgKG9wdGlvbmFsKQogICAgICAgIFZhbHVlICA9PiAnVmFsdWUnLCAgICAgIyAob3B0aW9uYWwpCiAgICAgICAgQ2xhc3MgID0+ICdNb2Rlcm5pemUnICAjIChvcHRpb25hbCkKICAgICk7Cgo9Y3V0CgpzdWIgRm9ybUlucHV0Q3JlYXRlIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGlmICggISRQYXJhbXtJdGVtfSApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ05lZWQgSXRlbSEnCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBzZXQgZGVmYXVsdCB2YWx1ZQogICAgJFBhcmFte1ByZWZpeH0gfHw9ICcnOwogICAgJFBhcmFte1ZhbHVlfSAgfHw9ICRQYXJhbXtJdGVtfS0+e0lucHV0fS0+e1ZhbHVlRGVmYXVsdH07CgogICAgaWYgKCAkUGFyYW17VmFsdWV9ICYmICRQYXJhbXtWYWx1ZX0gPX4gbXsgIyMjIyMgfXhtcyApIHsKICAgICAgICBteSBAVmFsdWVzID0gc3BsaXQgJyMjIyMjJywgJFBhcmFte1ZhbHVlfTsKICAgICAgICAkUGFyYW17VmFsdWV9ID0gXEBWYWx1ZXM7CiAgICB9CgogICAgIyBnZW5lcmF0ZSBvcHRpb24gc3RyaW5nCiAgICBteSAkU3RyaW5nID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxheW91dCcpLT5CdWlsZFNlbGVjdGlvbigKICAgICAgICBJRCAgICAgICAgICAgPT4gJFBhcmFte1ByZWZpeH0gLiAkUGFyYW17SXRlbX0tPntLZXl9LAogICAgICAgIENsYXNzICAgICAgICA9PiAkUGFyYW17Q2xhc3N9LAogICAgICAgIE5hbWUgICAgICAgICA9PiAkUGFyYW17UHJlZml4fSAuICRQYXJhbXtJdGVtfS0+e0tleX0sCiAgICAgICAgRGF0YSAgICAgICAgID0+ICRQYXJhbXtJdGVtfS0+e0lucHV0fS0+e0RhdGF9IHx8IHt9LAogICAgICAgIFNlbGVjdGVkSUQgICA9PiAkUGFyYW17VmFsdWV9LAogICAgICAgIFRyYW5zbGF0aW9uICA9PiAkUGFyYW17SXRlbX0tPntJbnB1dH0tPntUcmFuc2xhdGlvbn0sCiAgICAgICAgVHJlZVZpZXcgICAgID0+ICRQYXJhbXtJdGVtfS0+e0lucHV0fS0+e1RyZWVWaWV3fSB8fCAwLAogICAgICAgIFBvc3NpYmxlTm9uZSA9PiAkUGFyYW17SXRlbX0tPntJbnB1dH0tPntQb3NzaWJsZU5vbmV9LAogICAgICAgIE11bHRpcGxlICAgICA9PiAkUGFyYW17SXRlbX0tPntJbnB1dH0tPntNdWx0aXBsZX0sCiAgICAgICAgU2l6ZSAgICAgICAgID0+ICRQYXJhbXtJdGVtfS0+e0lucHV0fS0+e1NpemV9LAogICAgKTsKCiAgICByZXR1cm4gJFN0cmluZzsKfQoKPWhlYWQyIEZvcm1EYXRhR2V0KCkKCkdldCBmb3JtIGRhdGEKCiAgICBteSAkRm9ybURhdGEgPSAkQmFja2VuZE9iamVjdC0+Rm9ybURhdGFHZXQoCiAgICAgICAgSXRlbSAgID0+ICRJdGVtUmVmLAogICAgICAgIFByZWZpeCA9PiAnUHJlZml4OjonLCAgIyAob3B0aW9uYWwpCiAgICApOwoKPWN1dAoKc3ViIEZvcm1EYXRhR2V0IHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGlmICggISRQYXJhbXtJdGVtfSApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ05lZWQgSXRlbSEnCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgJFBhcmFte1ByZWZpeH0gfHw9ICcnOwoKICAgICMgZ2V0IGZvcm0gZGF0YQogICAgbXkgQEZvcm1EYXRhcyA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpXZWI6OlJlcXVlc3QnKS0+R2V0QXJyYXkoCiAgICAgICAgUGFyYW0gPT4gJFBhcmFte1ByZWZpeH0gLiAkUGFyYW17SXRlbX0tPntLZXl9LAogICAgKTsKCiAgICBteSAkRm9ybURhdGEgPSBqb2luICcjIyMjIycsIEBGb3JtRGF0YXM7CgogICAgcmV0dXJuICRGb3JtRGF0YSBpZiAkRm9ybURhdGE7CiAgICByZXR1cm4gJEZvcm1EYXRhIGlmICEkUGFyYW17SXRlbX0tPntJbnB1dH0tPntSZXF1aXJlZH07CgogICAgIyBzZXQgaW52YWxpZCBwYXJhbQogICAgJFBhcmFte0l0ZW19LT57Rm9ybX0tPntJbnZhbGlkfSA9IDE7CgogICAgcmV0dXJuICRGb3JtRGF0YTsKfQoKMTsKCj1oZWFkMSBURVJNUyBBTkQgQ09ORElUSU9OUwoKVGhpcyBzb2Z0d2FyZSBpcyBwYXJ0IG9mIHRoZSBPVFJTIHByb2plY3QgKEw8aHR0cHM6Ly9vdHJzLm9yZy8+KS4KClRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCnRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQpkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgTDxodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0Pi4KCj1jdXQK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6T3V0cHV0OjpIVE1MOjpJbXBvcnRFeHBvcnQ6OkxheW91dFRleHQ7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CgpvdXIgQE9iamVjdERlcGVuZGVuY2llcyA9ICgKICAgICdLZXJuZWw6OlN5c3RlbTo6TG9nJywKICAgICdLZXJuZWw6OlN5c3RlbTo6V2ViOjpSZXF1ZXN0JywKICAgICdLZXJuZWw6Ok91dHB1dDo6SFRNTDo6TGF5b3V0JywKKTsKCj1oZWFkMSBOQU1FCgpLZXJuZWw6Ok91dHB1dDo6SFRNTDo6SW1wb3J0RXhwb3J0OjpMYXlvdXRUZXh0IC0gbGF5b3V0IGJhY2tlbmQgbW9kdWxlCgo9aGVhZDEgREVTQ1JJUFRJT04KCkFsbCBsYXlvdXQgZnVuY3Rpb25zIGZvciB0ZXh0IGVsZW1lbnRzCgo9Y3V0Cgo9aGVhZDIgbmV3KCkKCkNyZWF0ZSBhbiBvYmplY3QKCiAgICAkQmFja2VuZE9iamVjdCA9IEtlcm5lbDo6T3V0cHV0OjpIVE1MOjpJbXBvcnRFeHBvcnQ6OkxheW91dFRleHQtPm5ldygKICAgICAgICAlUGFyYW0sCiAgICApOwoKPWN1dAoKc3ViIG5ldyB7CiAgICBteSAoICRUeXBlLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgYWxsb2NhdGUgbmV3IGhhc2ggZm9yIG9iamVjdAogICAgbXkgJFNlbGYgPSB7fTsKICAgIGJsZXNzKCAkU2VsZiwgJFR5cGUgKTsKCiAgICByZXR1cm4gJFNlbGY7Cn0KCj1oZWFkMiBGb3JtSW5wdXRDcmVhdGUoKQoKQ3JlYXRlIGEgaW5wdXQgc3RyaW5nCgogICAgbXkgJFZhbHVlID0gJEJhY2tlbmRPYmplY3QtPkZvcm1JbnB1dENyZWF0ZSgKICAgICAgICBJdGVtICAgICA9PiAkSXRlbVJlZiwKICAgICAgICBQcmVmaXggICA9PiAnUHJlZml4OjonLCAgIyAob3B0aW9uYWwpCiAgICAgICAgVmFsdWUgICAgPT4gJ1ZhbHVlJywgICAgICMgKG9wdGlvbmFsKQogICAgICAgIFJlYWRvbmx5ID0+IDEsICAgICAgICAgICAjIChvcHRpb25hbCkKICAgICk7Cgo9Y3V0CgpzdWIgRm9ybUlucHV0Q3JlYXRlIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGlmICggISRQYXJhbXtJdGVtfSApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ05lZWQgSXRlbSEnLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICRQYXJhbXtQcmVmaXh9IHx8PSAnJzsKCiAgICBteSAkVmFsdWUgPSAkUGFyYW17VmFsdWV9IHx8ICRQYXJhbXtJdGVtfS0+e0lucHV0fS0+e1ZhbHVlRGVmYXVsdH07CiAgICBteSAkU2l6ZSA9ICRQYXJhbXtJdGVtfS0+e0lucHV0fS0+e1NpemV9IHx8IDQwOwogICAgbXkgJFNpemVDbGFzczsKICAgIGlmICggJFNpemUgPCAxNSApIHsKICAgICAgICAkU2l6ZUNsYXNzID0gJ1cxMHBjJzsKICAgIH0KICAgIGVsc2lmICggJFNpemUgPCAzNSApIHsKICAgICAgICAkU2l6ZUNsYXNzID0gJ1czM3BjJzsKICAgIH0KICAgIGVsc2lmICggJFNpemUgPCA1MCApIHsKICAgICAgICAkU2l6ZUNsYXNzID0gJ1c1MHBjJzsKICAgIH0KICAgIGVsc2UgewogICAgICAgICRTaXplQ2xhc3MgPSAnVzc1cGMnOwogICAgfQoKICAgICMgcHJlcGFyZSBkYXRhCiAgICBteSAkSUQgPSAoICRQYXJhbXtQcmVmaXh9IHx8ICcnICkgLiAoICRQYXJhbXtJdGVtfS0+e0tleX0gKTsKICAgIG15ICROYW1lID0gKCAkUGFyYW17UHJlZml4fSB8fCAnJyApIC4gKCAkUGFyYW17TmFtZX0gfHwgJElEICk7CiAgICBteSAkQ2xhc3MgPSAoICRTaXplQ2xhc3MgfHwgJycgKSAuICggJFBhcmFte0NsYXNzfSB8fCAnJyApOwoKICAgIG15ICRTdHJpbmcgPSAiPGlucHV0IGlkPVwiJElEXCIgdHlwZT1cInRleHRcIiBuYW1lPVwiJE5hbWVcIiBjbGFzcz1cIiRDbGFzc1wiICI7CgogICAgaWYgKCRWYWx1ZSkgewoKICAgICAgICAjIGdldCBsYXlvdXQgb2JqZWN0CiAgICAgICAgbXkgJExheW91dE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6T3V0cHV0OjpIVE1MOjpMYXlvdXQnKTsKCiAgICAgICAgIyB0cmFuc2xhdGUKICAgICAgICBpZiAoICRQYXJhbXtJdGVtfS0+e0lucHV0fS0+e1RyYW5zbGF0aW9ufSApIHsKICAgICAgICAgICAgJFZhbHVlID0gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCRWYWx1ZSk7CiAgICAgICAgfQoKICAgICAgICAjIHRyYW5zZm9ybSBhc2NpaSB0byBodG1sCiAgICAgICAgJFZhbHVlID0gJExheW91dE9iamVjdC0+QXNjaWkySHRtbCgKICAgICAgICAgICAgVGV4dCAgICAgICAgICAgPT4gJFZhbHVlLAogICAgICAgICAgICBIVE1MUmVzdWx0TW9kZSA9PiAxLAogICAgICAgICk7CgogICAgICAgICRTdHJpbmcgLj0gInZhbHVlPVwiJFZhbHVlXCIgIjsKICAgIH0KCiAgICAjIGFkZCBtYXhpbXVtIGxlbmd0aAogICAgaWYgKCAkUGFyYW17SXRlbX0tPntJbnB1dH0tPntNYXhMZW5ndGh9ICkgewogICAgICAgICRTdHJpbmcgLj0gIm1heGxlbmd0aD1cIiRQYXJhbXtJdGVtfS0+e0lucHV0fS0+e01heExlbmd0aH1cIiAiOwogICAgfQoKICAgICMgYWRkIHJlYWRvbmx5CiAgICBpZiAoICRQYXJhbXtJdGVtfS0+e0lucHV0fS0+e1JlYWRvbmx5fSApIHsKICAgICAgICAkU3RyaW5nIC49ICdyZWFkb25seT0icmVhZG9ubHkiICc7CiAgICB9CgogICAgJFN0cmluZyAuPSAiLz4gIjsKCiAgICByZXR1cm4gJFN0cmluZzsKfQoKPWhlYWQyIEZvcm1EYXRhR2V0KCkKCkdldCBmb3JtIGRhdGEKCiAgICBteSAkRm9ybURhdGEgPSAkQmFja2VuZE9iamVjdC0+Rm9ybURhdGFHZXQoCiAgICAgICAgSXRlbSAgID0+ICRJdGVtUmVmLAogICAgICAgIFByZWZpeCA9PiAnUHJlZml4OjonLCAgIyAob3B0aW9uYWwpCiAgICApOwoKPWN1dAoKc3ViIEZvcm1EYXRhR2V0IHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGlmICggISRQYXJhbXtJdGVtfSApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ05lZWQgSXRlbSEnCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgJFBhcmFte1ByZWZpeH0gfHw9ICcnOwoKICAgICMgZ2V0IGZvcm0gZGF0YQogICAgbXkgJEZvcm1EYXRhID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OldlYjo6UmVxdWVzdCcpLT5HZXRQYXJhbSgKICAgICAgICBQYXJhbSA9PiAkUGFyYW17UHJlZml4fSAuICRQYXJhbXtJdGVtfS0+e0tleX0sCiAgICApOwoKICAgICMgcmVnZXggY2hlY2sKICAgIGlmICggJFBhcmFte0l0ZW19LT57SW5wdXR9LT57UmVnZXh9ICYmICRGb3JtRGF0YSAhfiAkUGFyYW17SXRlbX0tPntJbnB1dH0tPntSZWdleH0gKSB7CgogICAgICAgICRQYXJhbXtJdGVtfS0+e0Zvcm19LT57SW52YWxpZH0gPSAxOwogICAgICAgIHJldHVybiAkRm9ybURhdGE7CiAgICB9CgogICAgcmV0dXJuICRGb3JtRGF0YSBpZiAkRm9ybURhdGE7CiAgICByZXR1cm4gJEZvcm1EYXRhIGlmICEkUGFyYW17SXRlbX0tPntJbnB1dH0tPntSZXF1aXJlZH07CgogICAgIyBzZXQgaW52YWxpZCBwYXJhbQogICAgJFBhcmFte0l0ZW19LT57Rm9ybX0tPntJbnZhbGlkfSA9IDE7CgogICAgcmV0dXJuICRGb3JtRGF0YTsKfQoKMTsKCj1oZWFkMSBURVJNUyBBTkQgQ09ORElUSU9OUwoKVGhpcyBzb2Z0d2FyZSBpcyBwYXJ0IG9mIHRoZSBPVFJTIHByb2plY3QgKEw8aHR0cHM6Ly9vdHJzLm9yZy8+KS4KClRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCnRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQpkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgTDxodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0Pi4KCj1jdXQK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6T3V0cHV0OjpIVE1MOjpMYXlvdXQ6OkltcG9ydEV4cG9ydDsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCm91ciAkT2JqZWN0TWFuYWdlckRpc2FibGVkID0gMTsKCj1oZWFkMSBOQU1FCgpLZXJuZWw6Ok91dHB1dDo6SFRNTDo6TGF5b3V0OjpJbXBvcnRFeHBvcnQKCj1jdXQKCj1oZWFkMiBJbXBvcnRFeHBvcnRGb3JtSW5wdXRDcmVhdGUoKQoKUmV0dXJucyBhIGlucHV0IGZpZWxkIGh0bWwgc3RyaW5nCgogICAgbXkgJFN0cmluZyA9ICRMYXlvdXRPYmplY3QtPkltcG9ydEV4cG9ydEZvcm1JbnB1dENyZWF0ZSgKICAgICAgICBJdGVtICA9PiAkSXRlbVJlZiwKICAgICAgICBWYWx1ZSA9PiAnVmFsdWUnLCAgICMgKG9wdGlvbmFsKQogICAgKTsKCj1jdXQKCnN1YiBJbXBvcnRFeHBvcnRGb3JtSW5wdXRDcmVhdGUgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgaWYgKCAhJFBhcmFte0l0ZW19ICkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAnTmVlZCBJdGVtIScKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIGxvYWQgYmFja2VuZAogICAgbXkgJEJhY2tlbmRPYmplY3QgPSAkU2VsZi0+X0ltcG9ydEV4cG9ydExvYWRMYXlvdXRCYWNrZW5kKAogICAgICAgIFR5cGUgPT4gJFBhcmFte0l0ZW19LT57SW5wdXR9LT57VHlwZX0sCiAgICApOwoKICAgIHJldHVybiAnJyBpZiAhJEJhY2tlbmRPYmplY3Q7CgogICAgIyBsb29rdXAgaXRlbSB2YWx1ZQogICAgbXkgJFN0cmluZyA9ICRCYWNrZW5kT2JqZWN0LT5Gb3JtSW5wdXRDcmVhdGUoJVBhcmFtKTsKCiAgICByZXR1cm4gJFN0cmluZzsKfQoKPWhlYWQyIEltcG9ydEV4cG9ydEZvcm1EYXRhR2V0KCkKClJldHVybnMgdGhlIHZhbHVlcyBmcm9tIHRoZSBodG1sIGZvcm0gYXMgaGFzaCByZWZlcmVuY2UKCiAgICBteSAkRm9ybURhdGEgPSAkTGF5b3V0T2JqZWN0LT5JbXBvcnRFeHBvcnRGb3JtRGF0YUdldCgKICAgICAgICBJdGVtID0+ICRJdGVtUmVmLAogICAgKTsKCj1jdXQKCnN1YiBJbXBvcnRFeHBvcnRGb3JtRGF0YUdldCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBpZiAoICEkUGFyYW17SXRlbX0gKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICdOZWVkIEl0ZW0hJwogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgbG9hZCBiYWNrZW5kCiAgICBteSAkQmFja2VuZE9iamVjdCA9ICRTZWxmLT5fSW1wb3J0RXhwb3J0TG9hZExheW91dEJhY2tlbmQoCiAgICAgICAgVHlwZSA9PiAkUGFyYW17SXRlbX0tPntJbnB1dH0tPntUeXBlfSwKICAgICk7CgogICAgcmV0dXJuIGlmICEkQmFja2VuZE9iamVjdDsKCiAgICAjIGdldCBmb3JtIGRhdGEKICAgIG15ICRGb3JtRGF0YSA9ICRCYWNrZW5kT2JqZWN0LT5Gb3JtRGF0YUdldCglUGFyYW0pOwoKICAgIHJldHVybiAkRm9ybURhdGE7Cn0KCj1oZWFkMiBfSW1wb3J0RXhwb3J0TG9hZExheW91dEJhY2tlbmQoKQoKVG8gbG9hZCBhIGltcG9ydC9leHBvcnQgbGF5b3V0IGJhY2tlbmQgbW9kdWxlCgogICAgbXkgJEJhY2tlbmQgPSAkTGF5b3V0T2JqZWN0LT5fSW1wb3J0RXhwb3J0TG9hZExheW91dEJhY2tlbmQoCiAgICAgICAgVHlwZSA9PiAnU2VsZWN0aW9uJywKICAgICk7CgpBbiBpbnN0YW5jZSBvZiB0aGUgbG9hZGVkIGJhY2tlbmQgbW9kdWxlIGlzIHJldHVybmVkLgoKPWN1dAoKc3ViIF9JbXBvcnRFeHBvcnRMb2FkTGF5b3V0QmFja2VuZCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgZ2V0IGxvZyBvYmplY3QKICAgIG15ICRMb2dPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyk7CgogICAgaWYgKCAhJFBhcmFte1R5cGV9ICkgewogICAgICAgICRMb2dPYmplY3QtPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ05lZWQgVHlwZSEnLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIG15ICRHZW5lcmljTW9kdWxlID0gIktlcm5lbDo6T3V0cHV0OjpIVE1MOjpJbXBvcnRFeHBvcnQ6OkxheW91dCRQYXJhbXtUeXBlfSI7CgogICAgIyBsb2FkIHRoZSBiYWNrZW5kIG1vZHVsZQogICAgaWYgKCAhJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06Ok1haW4nKS0+UmVxdWlyZSgkR2VuZXJpY01vZHVsZSkgKSB7CiAgICAgICAgJExvZ09iamVjdC0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAiQ2FuJ3QgbG9hZCBiYWNrZW5kIG1vZHVsZSAkUGFyYW17VHlwZX0hIiwKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIGNyZWF0ZSBuZXcgaW5zdGFuY2UKICAgIG15ICRCYWNrZW5kT2JqZWN0ID0gJEdlbmVyaWNNb2R1bGUtPm5ldygKICAgICAgICAleyRTZWxmfSwKICAgICAgICAlUGFyYW0sCiAgICAgICAgTGF5b3V0T2JqZWN0ID0+ICRTZWxmLAogICAgKTsKCiAgICBpZiAoICEkQmFja2VuZE9iamVjdCApIHsKICAgICAgICAkTG9nT2JqZWN0LT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJDYW4ndCBjcmVhdGUgYSBuZXcgaW5zdGFuY2Ugb2YgYmFja2VuZCBtb2R1bGUgJFBhcmFte1R5cGV9ISIsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgcmV0dXJuICRCYWNrZW5kT2JqZWN0Owp9CgoxOwoKPWhlYWQxIFRFUk1TIEFORCBDT05ESVRJT05TCgpUaGlzIHNvZnR3YXJlIGlzIHBhcnQgb2YgdGhlIE9UUlMgcHJvamVjdCAoTDxodHRwczovL290cnMub3JnLz4pLgoKVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoR1BMKS4gSWYgeW91CmRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBMPGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvZ3BsLTMuMC50eHQ+LgoKPWN1dAo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJPdmVydmlldyIpICVdCjxkaXYgY2xhc3M9Ik1haW5Cb3ggQVJJQVJvbGVNYWluIExheW91dEZpeGVkU2lkZWJhciBTaWRlYmFyRmlyc3QiPgogICAgPGgxPlslIFRyYW5zbGF0ZSgiSW1wb3J0L0V4cG9ydCBNYW5hZ2VtZW50IikgfCBodG1sICVdPC9oMT4KCiAgICA8ZGl2IGNsYXNzPSJTaWRlYmFyQ29sdW1uIj4KClslIFJlbmRlckJsb2NrU3RhcnQoIkFjdGlvbkxpc3QiKSAlXQogICAgICAgIDxkaXYgY2xhc3M9IldpZGdldFNpbXBsZSI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkhlYWRlciI+CiAgICAgICAgICAgICAgICA8aDI+WyUgVHJhbnNsYXRlKCJBY3Rpb25zIikgfCBodG1sICVdPC9oMj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNvbnRlbnQiPgogICAgICAgICAgICAgICAgPHVsIGNsYXNzPSJBY3Rpb25MaXN0Ij4KWyUgUmVuZGVyQmxvY2tTdGFydCgiQWN0aW9uT3ZlcnZpZXciKSAlXQogICAgICAgICAgICAgICAgICAgIDxsaT4KICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iWyUgRW52KCJCYXNlbGluayIpICVdQWN0aW9uPVslIEVudigiQWN0aW9uIikgJV0iIGNsYXNzPSJDYWxsRm9yQWN0aW9uIEZ1bGxzaXplIENlbnRlciI+PHNwYW4+PGkgY2xhc3M9ImZhIGZhLWNhcmV0LWxlZnQiPjwvaT5bJSBUcmFuc2xhdGUoIkdvIHRvIG92ZXJ2aWV3IikgfCBodG1sICVdPC9zcGFuPjwvYT4KICAgICAgICAgICAgICAgICAgICA8L2xpPgpbJSBSZW5kZXJCbG9ja0VuZCgiQWN0aW9uT3ZlcnZpZXciKSAlXQpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJBY3Rpb25BZGQiKSAlXQogICAgICAgICAgICAgICAgICAgIDxsaT4KICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iWyUgRW52KCJCYXNlbGluayIpICVdQWN0aW9uPVslIEVudigiQWN0aW9uIikgJV07U3ViYWN0aW9uPVRlbXBsYXRlRWRpdDEiIGNsYXNzPSJDYWxsRm9yQWN0aW9uIEZ1bGxzaXplIENlbnRlciI+PHNwYW4+PGkgY2xhc3M9ImZhIGZhLXBsdXMtc3F1YXJlIj48L2k+WyUgVHJhbnNsYXRlKCJBZGQgdGVtcGxhdGUiKSB8IGh0bWwgJV08L3NwYW4+PC9hPgogICAgICAgICAgICAgICAgICAgIDwvbGk+ClslIFJlbmRlckJsb2NrRW5kKCJBY3Rpb25BZGQiKSAlXQogICAgICAgICAgICAgICAgPC91bD4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+ClslIFJlbmRlckJsb2NrRW5kKCJBY3Rpb25MaXN0IikgJV0KICAgICAgICA8ZGl2IGNsYXNzPSJXaWRnZXRTaW1wbGUiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJIZWFkZXIiPgogICAgICAgICAgICAgICAgPGgyPlslIFRyYW5zbGF0ZSgiTm90ZSIpIHwgaHRtbCAlXTwvaDI+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJDb250ZW50Ij4KICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJGaWVsZEV4cGxhbmF0aW9uIj4KICAgICAgICAgICAgICAgICAgICBbJSBUcmFuc2xhdGUoIkNyZWF0ZSBhIHRlbXBsYXRlIHRvIGltcG9ydCBhbmQgZXhwb3J0IG9iamVjdCBpbmZvcm1hdGlvbi4iKSB8IGh0bWwgJV0KICAgICAgICAgICAgICAgIDwvcD4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KCiAgICA8ZGl2IGNsYXNzPSJDb250ZW50Q29sdW1uIj4KICAgICAgICA8ZGl2IGNsYXNzPSJXaWRnZXRTaW1wbGUiPgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJPdmVydmlld0xpc3QiKSAlXQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJIZWFkZXIiPgogICAgICAgICAgICAgICAgPGgyPlslIFRyYW5zbGF0ZShEYXRhLk9iamVjdE5hbWUpIHwgaHRtbCAlXTwvaDI+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJDb250ZW50Ij4KICAgICAgICAgICAgICAgIDx0YWJsZSBjbGFzcz0iRGF0YVRhYmxlIj4KICAgICAgICAgICAgICAgICAgICA8dGhlYWQ+CiAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD5bJSBUcmFuc2xhdGUoIk51bWJlciIpIHwgaHRtbCAlXTwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+WyUgVHJhbnNsYXRlKCJOYW1lIikgfCBodG1sICVdPC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD5bJSBUcmFuc2xhdGUoIkZvcm1hdCIpIHwgaHRtbCAlXTwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+WyUgVHJhbnNsYXRlKCJWYWxpZGl0eSIpIHwgaHRtbCAlXTwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3M9IkNlbnRlciI+WyUgVHJhbnNsYXRlKCJEZWxldGUiKSB8IGh0bWwgJV08L3RoPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPlslIFRyYW5zbGF0ZSgiU3RhcnQgSW1wb3J0IikgfCBodG1sICVdPC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD5bJSBUcmFuc2xhdGUoIlN0YXJ0IEV4cG9ydCIpIHwgaHRtbCAlXTwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+CiAgICAgICAgICAgICAgICAgICAgPC90aGVhZD4KICAgICAgICAgICAgICAgICAgICA8dGJvZHk+ClslIFJlbmRlckJsb2NrU3RhcnQoIk5vRGF0YUZvdW5kTXNnIikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjciPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIFRyYW5zbGF0ZSgiTm8gZGF0YSBmb3VuZC4iKSB8IGh0bWwgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+ClslIFJlbmRlckJsb2NrRW5kKCJOb0RhdGFGb3VuZE1zZyIpICVdClslIFJlbmRlckJsb2NrU3RhcnQoIk92ZXJ2aWV3TGlzdFJvdyIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDx0ciBbJSBJRiBEYXRhLlZhbGlkSUQgIT0gMSVdY2xhc3M9IkludmFsaWQiWyUgRU5EICVdPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJBc0Jsb2NrIiBocmVmPSJbJSBFbnYoIkJhc2VsaW5rIikgJV1BY3Rpb249WyUgRW52KCJBY3Rpb24iKSAlXTtTdWJhY3Rpb249VGVtcGxhdGVFZGl0MTtUZW1wbGF0ZUlEPVslIERhdGEuVGVtcGxhdGVJRCB8IHVyaSAlXSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIERhdGEuTnVtYmVyIHwgaHRtbCAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+WyUgRGF0YS5OYW1lIHwgaHRtbCAlXTwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+WyUgVHJhbnNsYXRlKERhdGEuRm9ybWF0TmFtZSkgfCBodG1sICVdPC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD5bJSBUcmFuc2xhdGUoRGF0YS5WYWxpZCkgfCBodG1sICVdPC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iQ2VudGVyIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJbJSBFbnYoIkJhc2VsaW5rIikgJV1BY3Rpb249WyUgRW52KCJBY3Rpb24iKSAlXTtTdWJhY3Rpb249VGVtcGxhdGVEZWxldGU7VGVtcGxhdGVJRD1bJSBEYXRhLlRlbXBsYXRlSUQgfCB1cmkgJV0iIHRpdGxlPSJbJSBUcmFuc2xhdGUoIkRlbGV0ZSIpIHwgaHRtbCAlXSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGlkPSJEZWxldGVUZW1wbGF0ZUlEWyUgRGF0YS5UZW1wbGF0ZUlEIHwgaHRtbCAlXSIgY2xhc3M9ImZhIGZhLXRyYXNoLW8iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9IkludmlzaWJsZVRleHQiPlslIFRyYW5zbGF0ZSgiRGVsZXRlIikgfCBodG1sICVdPC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2k+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJbJSBFbnYoIkJhc2VsaW5rIikgJV1BY3Rpb249WyUgRW52KCJBY3Rpb24iKSAlXTtTdWJhY3Rpb249SW1wb3J0SW5mb3JtYXRpb247VGVtcGxhdGVJRD1bJSBEYXRhLlRlbXBsYXRlSUQgfCB1cmkgJV0iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBUcmFuc2xhdGUoIkltcG9ydCIpIHwgaHRtbCAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iWyUgRW52KCJCYXNlbGluayIpICVdQWN0aW9uPVslIEVudigiQWN0aW9uIikgJV07U3ViYWN0aW9uPUV4cG9ydDtUZW1wbGF0ZUlEPVslIERhdGEuVGVtcGxhdGVJRCB8IHVyaSAlXSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIFRyYW5zbGF0ZSgiRXhwb3J0IikgfCBodG1sICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KWyUgUmVuZGVyQmxvY2tFbmQoIk92ZXJ2aWV3TGlzdFJvdyIpICVdCiAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KICAgICAgICAgICAgICAgIDwvdGFibGU+CiAgICAgICAgICAgIDwvZGl2PgpbJSBSZW5kZXJCbG9ja0VuZCgiT3ZlcnZpZXdMaXN0IikgJV0KClslIFJlbmRlckJsb2NrU3RhcnQoIlRlbXBsYXRlRWRpdDEiKSAlXQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJIZWFkZXIiPgogICAgICAgICAgICAgICAgPGgyPlslIFRyYW5zbGF0ZSgiU3RlcCAxIG9mIDUgLSBFZGl0IGNvbW1vbiBpbmZvcm1hdGlvbiIpIHwgaHRtbCAlXTo8L2gyPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ29udGVudCI+CiAgICAgICAgICAgICAgICA8Zm9ybSBhY3Rpb249IlslIEVudigiQ0dJSGFuZGxlIikgJV0iIG1ldGhvZD0icG9zdCIgY2xhc3M9IlZhbGlkYXRlIFByZXZlbnRNdWx0aXBsZVN1Ym1pdHMiPgogICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IkFjdGlvbiIgdmFsdWU9IlslIEVudigiQWN0aW9uIikgJV0iIC8+CiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iU3ViYWN0aW9uIiB2YWx1ZT0iVGVtcGxhdGVFZGl0MSIgLz4KICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJUZW1wbGF0ZUlEIiB2YWx1ZT0iWyUgRGF0YS5UZW1wbGF0ZUlEICVdIiAvPgogICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IlN1Ym1pdE5leHQiIHZhbHVlPSIxIiAvPgoKICAgICAgICAgICAgICAgICAgICA8ZmllbGRzZXQgY2xhc3M9IlRhYmxlTGlrZSI+CgogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJOYW1lIj5bJSBUcmFuc2xhdGUoIk5hbWUiKSB8IGh0bWwgJV06PC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgoKPCEtLSBWYWxpZGF0ZV9SZXF1aXJlZCAtLT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBpZD0iTmFtZSIgY2xhc3M9IlslIERhdGEuTmFtZUNsYXNzICVdIiB0eXBlPSJ0ZXh0IiBuYW1lPSJOYW1lIiB2YWx1ZT0iWyUgRGF0YS5OYW1lIHwgaHRtbCAlXSIgc2l6ZT0iNTAiIG1heGxlbmd0aD0iMjAwIiAvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD0iTmFtZUVycm9yIiBjbGFzcz0iVG9vbHRpcEVycm9yTWVzc2FnZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHA+WyUgVHJhbnNsYXRlKCJOYW1lIGlzIHJlcXVpcmVkISIpIHwgaHRtbCAlXTwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD0iTmFtZVNlcnZlckVycm9yIiBjbGFzcz0iVG9vbHRpcEVycm9yTWVzc2FnZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHA+WyUgVHJhbnNsYXRlKCJOYW1lIGlzIHJlcXVpcmVkISIpIHwgaHRtbCAlXTwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KClslIFJlbmRlckJsb2NrU3RhcnQoIk5ld09iamVjdEZvcm1hdCIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9Ik9iamVjdCI+WyUgVHJhbnNsYXRlKCJPYmplY3QiKSB8IGh0bWwgJV06PC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIERhdGEuT2JqZWN0T3B0aW9uICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJPYmplY3RFcnJvciIgY2xhc3M9IlRvb2x0aXBFcnJvck1lc3NhZ2UiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwPlslIFRyYW5zbGF0ZSgiT2JqZWN0IGlzIHJlcXVpcmVkISIpIHwgaHRtbCAlXTwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD0iT2JqZWN0U2VydmVyRXJyb3IiIGNsYXNzPSJUb29sdGlwRXJyb3JNZXNzYWdlIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD5bJSBUcmFuc2xhdGUoIk9iamVjdCBpcyByZXF1aXJlZCEiKSB8IGh0bWwgJV08L3A+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CgogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJGb3JtYXQiPlslIFRyYW5zbGF0ZSgiRm9ybWF0IikgfCBodG1sICVdOjwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBEYXRhLkZvcm1hdE9wdGlvbiAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD0iRm9ybWF0RXJyb3IiIGNsYXNzPSJUb29sdGlwRXJyb3JNZXNzYWdlIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD5bJSBUcmFuc2xhdGUoIkZvcm1hdCBpcyByZXF1aXJlZCEiKSB8IGh0bWwgJV08L3A+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9IkZvcm1hdFNlcnZlckVycm9yIiBjbGFzcz0iVG9vbHRpcEVycm9yTWVzc2FnZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHA+WyUgVHJhbnNsYXRlKCJGb3JtYXQgaXMgcmVxdWlyZWQhIikgfCBodG1sICVdPC9wPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KWyUgUmVuZGVyQmxvY2tFbmQoIk5ld09iamVjdEZvcm1hdCIpICVdClslIFJlbmRlckJsb2NrU3RhcnQoIkVkaXRPYmplY3RGb3JtYXQiKSAlXQogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWw+WyUgVHJhbnNsYXRlKCJPYmplY3QiKSB8IGh0bWwgJV06PC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+WyUgRGF0YS5PYmplY3ROYW1lIHwgaHRtbCAlXTwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9Ik9iamVjdCIgdmFsdWU9IlslIERhdGEuT2JqZWN0IHwgaHRtbCAlXSIgLz4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD5bJSBUcmFuc2xhdGUoIkZvcm1hdCIpIHwgaHRtbCAlXTo8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj5bJSBEYXRhLkZvcm1hdE5hbWUgfCBodG1sICVdPC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iRm9ybWF0IiB2YWx1ZT0iWyUgRGF0YS5Gb3JtYXQgfCBodG1sICVdIiAvPgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KWyUgUmVuZGVyQmxvY2tFbmQoIkVkaXRPYmplY3RGb3JtYXQiKSAlXQoKICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgoKICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0iVmFsaWRJRCI+WyUgVHJhbnNsYXRlKCJWYWxpZCIpIHwgaHRtbCAlXTo8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBEYXRhLlZhbGlkT3B0aW9uU3RyZyAlXQogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgoKICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0iQ29tbWVudCI+WyUgVHJhbnNsYXRlKCJDb21tZW50IikgfCBodG1sICVdOjwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBpZD0iQ29tbWVudCIgdHlwZT0idGV4dCIgbmFtZT0iQ29tbWVudCIgdmFsdWU9IlslIERhdGEuQ29tbWVudCB8IGh0bWwgJV0iIHNpemU9IjUwIiBtYXhsZW5ndGg9IjIwMCIgLz4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIFNwYWNpbmdUb3AiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iUHJpbWFyeSBDYWxsRm9yQWN0aW9uIiB0eXBlPSJzdWJtaXQiPjxzcGFuPlslIFRyYW5zbGF0ZSgiTmV4dCIpIHwgaHRtbCAlXTwvc3Bhbj48L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIFRyYW5zbGF0ZSgib3IiKSB8IGh0bWwgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IlslIEVudigiQmFzZWxpbmsiKSAlXUFjdGlvbj1bJSBFbnYoIkFjdGlvbiIpICVdO1N1YmFjdGlvbj0nT3ZlcnZpZXcnIj5bJSBUcmFuc2xhdGUoIkNhbmNlbCIpIHwgaHRtbCAlXSA8L2E+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDwvZmllbGRzZXQ+CiAgICAgICAgICAgICAgICA8L2Zvcm0+CiAgICAgICAgICAgIDwvZGl2PgpbJSBSZW5kZXJCbG9ja0VuZCgiVGVtcGxhdGVFZGl0MSIpICVdCgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJUZW1wbGF0ZUVkaXQyIikgJV0KICAgICAgICAgICAgPGRpdiBjbGFzcz0iSGVhZGVyIj4KICAgICAgICAgICAgICAgIDxoMj5bJSBUcmFuc2xhdGUoIlN0ZXAgMiBvZiA1IC0gRWRpdCBvYmplY3QgaW5mb3JtYXRpb24iKSB8IGh0bWwgJV06PC9oMj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNvbnRlbnQiPgogICAgICAgICAgICAgICAgPGZvcm0gYWN0aW9uPSJbJSBFbnYoIkNHSUhhbmRsZSIpICVdIiBtZXRob2Q9InBvc3QiIGNsYXNzPSJWYWxpZGF0ZSBQcmV2ZW50TXVsdGlwbGVTdWJtaXRzIj4KICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJBY3Rpb24iIHZhbHVlPSJbJSBFbnYoIkFjdGlvbiIpICVdIiAvPgogICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IlN1YmFjdGlvbiIgdmFsdWU9IlRlbXBsYXRlRWRpdDIiIC8+CiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iVGVtcGxhdGVJRCIgdmFsdWU9IlslIERhdGEuVGVtcGxhdGVJRCB8IGh0bWwgJV0iIC8+CiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iU3VibWl0TmV4dCIgdmFsdWU9IjEiIC8+CgogICAgICAgICAgICAgICAgICAgIDxmaWVsZHNldCBjbGFzcz0iVGFibGVMaWtlIj4KCiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD5bJSBUcmFuc2xhdGUoIk5hbWUiKSB8IGh0bWwgJV06PC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgRGF0YS5OYW1lIHwgaHRtbCAlXQogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgoKICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPlslIFRyYW5zbGF0ZSgiT2JqZWN0IikgfCBodG1sICVdOjwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIERhdGEuT2JqZWN0IHwgaHRtbCAlXQogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgoKWyUgUmVuZGVyQmxvY2tTdGFydCgiVGVtcGxhdGVFZGl0MkVsZW1lbnQiKSAlXQogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJbJSBEYXRhLklEICVdIj5bJSBUcmFuc2xhdGUoRGF0YS5OYW1lKSB8IGh0bWwgJV06IDwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIERhdGEuSW5wdXRTdHJnICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJbJSBEYXRhLklEICVdRXJyb3IiIGNsYXNzPSJUb29sdGlwRXJyb3JNZXNzYWdlIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD5bJSBUcmFuc2xhdGUoRGF0YS5FcnJvck1lc3NhZ2UpIHwgaHRtbCAlXTwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD0iWyUgRGF0YS5JRCAlXVNlcnZlckVycm9yIiBjbGFzcz0iVG9vbHRpcEVycm9yTWVzc2FnZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHA+WyUgVHJhbnNsYXRlKERhdGEuRXJyb3JNZXNzYWdlKSB8IGh0bWwgJV08L3A+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+ClslIFJlbmRlckJsb2NrRW5kKCJUZW1wbGF0ZUVkaXQyRWxlbWVudCIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIFNwYWNpbmdUb3AiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iQmFjayBDYWxsRm9yQWN0aW9uIiB0eXBlPSJidXR0b24iIG5hbWU9IkJhY2siID48c3Bhbj5bJSBUcmFuc2xhdGUoIkJhY2siKSB8IGh0bWwgJV08L3NwYW4+PC9idXR0b24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJQcmltYXJ5IENhbGxGb3JBY3Rpb24iIHR5cGU9InN1Ym1pdCI+PHNwYW4+WyUgVHJhbnNsYXRlKCJOZXh0IikgfCBodG1sICVdPC9zcGFuPjwvYnV0dG9uPgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8L2ZpZWxkc2V0PgogICAgICAgICAgICAgICAgPC9mb3JtPgogICAgICAgICAgICA8L2Rpdj4KWyUgUmVuZGVyQmxvY2tFbmQoIlRlbXBsYXRlRWRpdDIiKSAlXQoKWyUgUmVuZGVyQmxvY2tTdGFydCgiVGVtcGxhdGVFZGl0MyIpICVdCiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkhlYWRlciI+CiAgICAgICAgICAgICAgICA8aDI+WyUgVHJhbnNsYXRlKCJTdGVwIDMgb2YgNSAtIEVkaXQgZm9ybWF0IGluZm9ybWF0aW9uIikgfCBodG1sICVdOjwvaDI+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJDb250ZW50Ij4KICAgICAgICAgICAgICAgIDxmb3JtIGFjdGlvbj0iWyUgRW52KCJDR0lIYW5kbGUiKSAlXSIgbWV0aG9kPSJwb3N0IiBjbGFzcz0iVmFsaWRhdGUgUHJldmVudE11bHRpcGxlU3VibWl0cyI+CiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iQWN0aW9uIiB2YWx1ZT0iWyUgRW52KCJBY3Rpb24iKSAlXSIgLz4KICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJTdWJhY3Rpb24iIHZhbHVlPSJUZW1wbGF0ZUVkaXQzIiAvPgogICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IlRlbXBsYXRlSUQiIHZhbHVlPSJbJSBEYXRhLlRlbXBsYXRlSUQgfCBodG1sICVdIiAvPgogICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IlN1Ym1pdE5leHQiIHZhbHVlPSIxIiAvPgoKICAgICAgICAgICAgICAgICAgICA8ZmllbGRzZXQgY2xhc3M9IlRhYmxlTGlrZSI+CgogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWw+WyUgVHJhbnNsYXRlKCJOYW1lIikgfCBodG1sICVdOjwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIERhdGEuTmFtZSB8IGh0bWwgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD5bJSBUcmFuc2xhdGUoIkZvcm1hdCIpIHwgaHRtbCAlXTo8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBEYXRhLkZvcm1hdCB8IGh0bWwgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KClslIFJlbmRlckJsb2NrU3RhcnQoIlRlbXBsYXRlRWRpdDNFbGVtZW50IikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0iWyUgRGF0YS5JRCAlXSI+WyUgVHJhbnNsYXRlKERhdGEuTmFtZSkgfCBodG1sICVdOiA8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBEYXRhLklucHV0U3RyZyAlXQpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJUZW1wbGF0ZUVkaXQzRWxlbWVudFJlcXVpcmVkIikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9IlslIERhdGEuSUQgJV1FcnJvciIgY2xhc3M9IlRvb2x0aXBFcnJvck1lc3NhZ2UiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwPlslIFRyYW5zbGF0ZShEYXRhLk5hbWUpIHwgaHRtbCAlXSBbJSBUcmFuc2xhdGUoImlzIHJlcXVpcmVkISIpIHwgaHRtbCAlXTwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD0iWyUgRGF0YS5JRCAlXVNlcnZlckVycm9yIiBjbGFzcz0iVG9vbHRpcEVycm9yTWVzc2FnZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHA+WyUgVHJhbnNsYXRlKERhdGEuTmFtZSkgfCBodG1sICVdIFslIFRyYW5zbGF0ZSgiaXMgcmVxdWlyZWQhIikgfCBodG1sICVdPC9wPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+ClslIFJlbmRlckJsb2NrRW5kKCJUZW1wbGF0ZUVkaXQzRWxlbWVudFJlcXVpcmVkIikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+ClslIFJlbmRlckJsb2NrRW5kKCJUZW1wbGF0ZUVkaXQzRWxlbWVudCIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIFNwYWNpbmdUb3AiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iQmFjayBDYWxsRm9yQWN0aW9uIiB0eXBlPSJidXR0b24iIG5hbWU9IkJhY2siID48c3Bhbj5bJSBUcmFuc2xhdGUoIkJhY2siKSB8IGh0bWwgJV08L3NwYW4+PC9idXR0b24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJQcmltYXJ5IENhbGxGb3JBY3Rpb24iIHR5cGU9InN1Ym1pdCI+PHNwYW4+WyUgVHJhbnNsYXRlKCJOZXh0IikgfCBodG1sICVdPC9zcGFuPjwvYnV0dG9uPgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8L2ZpZWxkc2V0PgogICAgICAgICAgICAgICAgPC9mb3JtPgogICAgICAgICAgICA8L2Rpdj4KWyUgUmVuZGVyQmxvY2tFbmQoIlRlbXBsYXRlRWRpdDMiKSAlXQoKWyUgUmVuZGVyQmxvY2tTdGFydCgiVGVtcGxhdGVFZGl0NCIpICVdCiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkhlYWRlciI+CiAgICAgICAgICAgICAgICA8aDI+WyUgVHJhbnNsYXRlKCJTdGVwIDQgb2YgNSAtIEVkaXQgbWFwcGluZyBpbmZvcm1hdGlvbiIpIHwgaHRtbCAlXTo8L2gyPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ29udGVudCI+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJNYXBIZWFkZXJSb3cgU3BhY2luZ1RvcCI+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iSGVhZGVyIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPlslIFRyYW5zbGF0ZSgiTmFtZSIpIHwgaHRtbCAlXTo8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBEYXRhLk5hbWUgfCBodG1sICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJIZWFkZXIiPgogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWw+WyUgVHJhbnNsYXRlKCJPYmplY3QiKSB8IGh0bWwgJV06PC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgRGF0YS5PYmplY3ROYW1lIHwgaHRtbCAlXQogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iSGVhZGVyIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPlslIFRyYW5zbGF0ZSgiRm9ybWF0IikgfCBodG1sICVdOjwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIERhdGEuRm9ybWF0TmFtZSB8IGh0bWwgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDxmb3JtIGFjdGlvbj0iWyUgRW52KCJDR0lIYW5kbGUiKSAlXSIgbWV0aG9kPSJwb3N0IiBjbGFzcz0iVmFsaWRhdGUgUHJldmVudE11bHRpcGxlU3VibWl0cyI+CiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iQWN0aW9uIiB2YWx1ZT0iWyUgRW52KCJBY3Rpb24iKSAlXSIgLz4KICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJTdWJhY3Rpb24iIHZhbHVlPSJUZW1wbGF0ZVNhdmU0IiAvPgogICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IlRlbXBsYXRlSUQiIHZhbHVlPSJbJSBEYXRhLlRlbXBsYXRlSUQgfCBodG1sICVdIiAvPgogICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9Ik1hcHBpbmdBZGQiIHZhbHVlPSIiIC8+CiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iU3VibWl0TmV4dCIgdmFsdWU9IiIgLz4KICAgICAgICAgICAgICAgICAgICA8dGFibGUgY2xhc3M9IkRhdGFUYWJsZSBTcGFjaW5nVG9wIj4KICAgICAgICAgICAgICAgICAgICAgICAgPHRoZWFkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJUZW1wbGF0ZUVkaXQ0VGFibGVIZWFkZXIiKSAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz0iQ2VudGVyIj5bJSBUcmFuc2xhdGUoRGF0YS5IZWFkZXIpIHwgaHRtbCAlXTwvdGg+ClslIFJlbmRlckJsb2NrRW5kKCJUZW1wbGF0ZUVkaXQ0VGFibGVIZWFkZXIiKSAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgICAgICAgICAgICAgPC90aGVhZD4KICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5PgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJUZW1wbGF0ZUVkaXQ0Tm9NYXBGb3VuZCIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IlslIERhdGEuQ29sdW1ucyAlXSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIFRyYW5zbGF0ZSgiTm8gbWFwIGVsZW1lbnRzIGZvdW5kLiIpIHwgaHRtbCAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgpbJSBSZW5kZXJCbG9ja0VuZCgiVGVtcGxhdGVFZGl0NE5vTWFwRm91bmQiKSAlXQoKWyUgUmVuZGVyQmxvY2tTdGFydCgiVGVtcGxhdGVFZGl0NFJvdyIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+ClslIFJlbmRlckJsb2NrU3RhcnQoIlRlbXBsYXRlRWRpdDRDb2x1bW4iKSAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iQ2VudGVyIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgRGF0YS5JbnB1dFN0cmcgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgpbJSBSZW5kZXJCbG9ja0VuZCgiVGVtcGxhdGVFZGl0NENvbHVtbiIpICVdClslIFJlbmRlckJsb2NrU3RhcnQoIlRlbXBsYXRlRWRpdDRNYXBOdW1iZXJDb2x1bW4iKSAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iQ2VudGVyIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgRGF0YS5Db3VudGVyICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KWyUgUmVuZGVyQmxvY2tFbmQoIlRlbXBsYXRlRWRpdDRNYXBOdW1iZXJDb2x1bW4iKSAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iQ2VudGVyIj4KWyUgUmVuZGVyQmxvY2tTdGFydCgiVGVtcGxhdGVFZGl0NFVwQnV0dG9uIikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iQXJyb3dVcCJ0eXBlPSJzdWJtaXQiIG5hbWU9Ik1hcHBpbmdVcDo6WyUgRGF0YS5NYXBwaW5nSUQgfCBodG1sICVdIiB2YWx1ZT0iWyUgVHJhbnNsYXRlKCJVcCIpIHwgaHRtbCAlXSI+IFslIFRyYW5zbGF0ZSgiVXAiKSB8IGh0bWwgJV0gPC9idXR0b24+ClslIFJlbmRlckJsb2NrRW5kKCJUZW1wbGF0ZUVkaXQ0VXBCdXR0b24iKSAlXQpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJUZW1wbGF0ZUVkaXQ0Tm9VcEJ1dHRvbiIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9IkFycm93VXAiIHR5cGU9InN1Ym1pdCIgZGlzYWJsZWQ9ImRpc2FibGVkIj4gWyUgVHJhbnNsYXRlKCJVcCIpIHwgaHRtbCAlXTwvYnV0dG9uPgpbJSBSZW5kZXJCbG9ja0VuZCgiVGVtcGxhdGVFZGl0NE5vVXBCdXR0b24iKSAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJDZW50ZXIiPgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJUZW1wbGF0ZUVkaXQ0RG93bkJ1dHRvbiIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9IkFycm93RG93biIgdHlwZT0ic3VibWl0IiBuYW1lPSJNYXBwaW5nRG93bjo6WyUgRGF0YS5NYXBwaW5nSUQgfCBodG1sICVdIiB2YWx1ZT0iWyUgVHJhbnNsYXRlKCJEb3duIikgfCBodG1sICVdIj4gWyUgVHJhbnNsYXRlKCJEb3duIikgfCBodG1sICVdPC9idXR0b24+ClslIFJlbmRlckJsb2NrRW5kKCJUZW1wbGF0ZUVkaXQ0RG93bkJ1dHRvbiIpICVdClslIFJlbmRlckJsb2NrU3RhcnQoIlRlbXBsYXRlRWRpdDROb0Rvd25CdXR0b24iKSAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJBcnJvd0Rvd24iIHR5cGU9InN1Ym1pdCIgZGlzYWJsZWQ9ImRpc2FibGVkIj4gWyUgVHJhbnNsYXRlKCJEb3duIikgfCBodG1sICVdPC9idXR0b24+ClslIFJlbmRlckJsb2NrRW5kKCJUZW1wbGF0ZUVkaXQ0Tm9Eb3duQnV0dG9uIikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9IkNlbnRlciI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiMiIGNsYXNzPSJEZWxldGVDb2x1bW4iIHRpdGxlPSJbJSBUcmFuc2xhdGUoIkRlbGV0ZSIpIHwgaHRtbCAlXSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz0iZmEgZmEtdHJhc2gtbyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9IkludmlzaWJsZVRleHQiPlslIFRyYW5zbGF0ZSgiRGVsZXRlIikgfCBodG1sICVdPC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9pPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9Ik1hcHBpbmdEZWxldGU6OlslIERhdGEuTWFwcGluZ0lEIHwgaHRtbCAlXSIgdmFsdWU9IiIgLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+ClslIFJlbmRlckJsb2NrRW5kKCJUZW1wbGF0ZUVkaXQ0Um93IikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KICAgICAgICAgICAgICAgICAgICA8L3RhYmxlPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IlcxMDBwYyBTcGFjaW5nVG9wU21hbGwgTGVmdCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9IkNhbGxGb3JBY3Rpb24gUGx1cyIgaWQ9Ik1hcHBpbmdBZGRCdXR0b24iIHR5cGU9InN1Ym1pdCIgbmFtZT0iTWFwcGluZ0FkZEJ1dHRvbiIgdmFsdWU9IlslIFRyYW5zbGF0ZSgiQWRkIikgfCBodG1sICVdIj48c3Bhbj48aSBjbGFzcz0iZmEgZmEtcGx1cy1zcXVhcmUiPjwvaT5bJSBUcmFuc2xhdGUoIkFkZCBNYXBwaW5nIEVsZW1lbnQiKSB8IGh0bWwgJV08L3NwYW4+IDwvYnV0dG9uPgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJTcGFjaW5nVG9wIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iQmFjayBDYWxsRm9yQWN0aW9uIiB0eXBlPSJzdWJtaXQiIG5hbWU9IlN1Ym1pdEJhY2siIHZhbHVlPSJTdWJtaXRCYWNrIj48c3Bhbj5bJSBUcmFuc2xhdGUoIkJhY2siKSB8IGh0bWwgJV08L3NwYW4+PC9idXR0b24+CiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9IlByaW1hcnkgQ2FsbEZvckFjdGlvbiIgdHlwZT0ic3VibWl0IiBuYW1lPSJTdWJtaXROZXh0QnV0dG9uIiBpZD0iU3VibWl0TmV4dEJ1dHRvbiIgdmFsdWU9IjEiPjxzcGFuPlslIFRyYW5zbGF0ZSgiTmV4dCIpIHwgaHRtbCAlXTwvc3Bhbj48L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDwvZm9ybT4KICAgICAgICAgICAgPC9kaXY+CgpbJSBSZW5kZXJCbG9ja0VuZCgiVGVtcGxhdGVFZGl0NCIpICVdCgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJUZW1wbGF0ZUVkaXQ1IikgJV0KICAgICAgICAgICAgPGRpdiBjbGFzcz0iSGVhZGVyIj4KICAgICAgICAgICAgICAgIDxoMj5bJSBUcmFuc2xhdGUoIlN0ZXAgNSBvZiA1IC0gRWRpdCBzZWFyY2ggaW5mb3JtYXRpb24iKSB8IGh0bWwgJV06PC9oMj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNvbnRlbnQiPgogICAgICAgICAgICAgICAgPGZvcm0gYWN0aW9uPSJbJSBFbnYoIkNHSUhhbmRsZSIpICVdIiBtZXRob2Q9InBvc3QiIGNsYXNzPSJWYWxpZGF0ZSBQcmV2ZW50TXVsdGlwbGVTdWJtaXRzIj4KICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJBY3Rpb24iIHZhbHVlPSJbJSBFbnYoIkFjdGlvbiIpICVdIiAvPgogICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IlN1YmFjdGlvbiIgdmFsdWU9IlRlbXBsYXRlU2F2ZTUiIC8+CiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iVGVtcGxhdGVJRCIgdmFsdWU9IlslIERhdGEuVGVtcGxhdGVJRCB8IGh0bWwgJV0iIC8+CiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iU3VibWl0TmV4dCIgdmFsdWU9IjEiIC8+CiAgICAgICAgICAgICAgICAgICAgPGZpZWxkc2V0IGNsYXNzPSJUYWJsZUxpa2UiPgogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWw+WyUgVHJhbnNsYXRlKCJUZW1wbGF0ZSBOYW1lIikgfCBodG1sICVdOjwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIERhdGEuTmFtZSB8IGh0bWwgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9IlJlc3RyaWN0RXhwb3J0Ij5bJSBUcmFuc2xhdGUoIlJlc3RyaWN0IGV4cG9ydCBwZXIgc2VhcmNoIikgfCBodG1sICVdOjwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIFNwYWNpbmdCb3R0b20iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgRGF0YS5SZXN0cmljdEV4cG9ydFN0cmcgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KClslIFJlbmRlckJsb2NrU3RhcnQoIlRlbXBsYXRlRWRpdDVFbGVtZW50IikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0iWyUgRGF0YS5JRCAlXSI+WyUgVHJhbnNsYXRlKERhdGEuTmFtZSkgfCBodG1sICVdOiA8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBEYXRhLklucHV0U3RyZyAlXQogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KWyUgUmVuZGVyQmxvY2tFbmQoIlRlbXBsYXRlRWRpdDVFbGVtZW50IikgJV0KCiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIFNwYWNpbmdUb3AiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iQmFjayBDYWxsRm9yQWN0aW9uIiB0eXBlPSJzdWJtaXQiIG5hbWU9IlN1Ym1pdEJhY2siIHZhbHVlPSJTdWJtaXRCYWNrIj48c3Bhbj5bJSBUcmFuc2xhdGUoIkJhY2siKSB8IGh0bWwgJV08L3NwYW4+PC9idXR0b24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJQcmltYXJ5IENhbGxGb3JBY3Rpb24iIHR5cGU9InN1Ym1pdCI+PHNwYW4+WyUgVHJhbnNsYXRlKCJGaW5pc2giKSB8IGh0bWwgJV08L3NwYW4+PC9idXR0b24+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDwvZmllbGRzZXQ+CiAgICAgICAgICAgICAgICA8L2Zvcm0+CiAgICAgICAgICAgIDwvZGl2PgpbJSBSZW5kZXJCbG9ja0VuZCgiVGVtcGxhdGVFZGl0NSIpICVdCgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJJbXBvcnRJbmZvcm1hdGlvbiIpICVdCiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkhlYWRlciI+CiAgICAgICAgICAgICAgICA8aDI+WyUgVHJhbnNsYXRlKCJJbXBvcnQgaW5mb3JtYXRpb24iKSB8IGh0bWwgJV06PC9oMj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNvbnRlbnQiPgogICAgICAgICAgICAgICAgPGZvcm0gYWN0aW9uPSJbJSBFbnYoIkNHSUhhbmRsZSIpICVdIiBtZXRob2Q9InBvc3QiIGVuY3R5cGU9Im11bHRpcGFydC9mb3JtLWRhdGEiIGNsYXNzPSJWYWxpZGF0ZSBQcmV2ZW50TXVsdGlwbGVTdWJtaXRzIj4KICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJBY3Rpb24iIHZhbHVlPSJbJSBFbnYoIkFjdGlvbiIpICVdIiAvPgogICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IlN1YmFjdGlvbiIgdmFsdWU9IkltcG9ydCIgLz4KICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJUZW1wbGF0ZUlEIiB2YWx1ZT0iWyUgRGF0YS5UZW1wbGF0ZUlEIHwgaHRtbCAlXSIgLz4KCiAgICAgICAgICAgICAgICAgICAgPGZpZWxkc2V0IGNsYXNzPSJUYWJsZUxpa2UiPgoKICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0iU291cmNlRmlsZSI+WyUgVHJhbnNsYXRlKCJOYW1lIikgfCBodG1sICVdOjwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIERhdGEuTmFtZSB8IGh0bWwgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9IlNvdXJjZUZpbGUiPlslIFRyYW5zbGF0ZSgiU291cmNlIEZpbGUiKSB8IGh0bWwgJV06PC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImZpbGUiIG5hbWU9IlNvdXJjZUZpbGUiIHNpemU9IjQwIiBjbGFzcz0iZml4ZWQiIC8+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCBTcGFjaW5nVG9wIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9IlByaW1hcnkgQ2FsbEZvckFjdGlvbiIgdHlwZT0ic3VibWl0IiB2YWx1ZT0iWyUgVHJhbnNsYXRlKCJTdGFydCBJbXBvcnQiKSB8IGh0bWwgJV0iPjxzcGFuPlslIFRyYW5zbGF0ZSgiU3RhcnQgSW1wb3J0IikgfCBodG1sICVdPC9zcGFuPjwvYnV0dG9uPgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8L2ZpZWxkc2V0PgogICAgICAgICAgICAgICAgPC9mb3JtPgogICAgICAgICAgICA8L2Rpdj4KWyUgUmVuZGVyQmxvY2tFbmQoIkltcG9ydEluZm9ybWF0aW9uIikgJV0KICAgICAgICA8L2Rpdj4KICAgIDwvZGl2PgoKPC9kaXY+CgpbJSBSZW5kZXJCbG9ja0VuZCgiT3ZlcnZpZXciKSAlXQoKWyUgUmVuZGVyQmxvY2tTdGFydCgiSW1wb3J0UmVzdWx0IikgJV0KPGRpdiBjbGFzcz0iTWFpbkJveCBBcmlhUm9sZU1haW4iPgogICAgPGRpdiBjbGFzcz0iVzUwcGMgU3BhY2luZ1RvcExhcmdlIFNwYWNpbmdCb3R0b21MYXJnZSBDZW50ZXJCb3giPgogICAgICAgIDxkaXYgY2xhc3M9IldpZGdldFNpbXBsZSI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkhlYWRlciI+CiAgICAgICAgICAgICAgICA8aDI+WyUgVHJhbnNsYXRlKCJJbXBvcnQgc3VtbWFyeSBmb3IgJXMiLCBEYXRhLk9iamVjdCkgfCBodG1sICVdPC9oMj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNvbnRlbnQiPgoKICAgICAgICAgICAgICAgIDxmb3JtIGFjdGlvbj0iWyUgRW52KCJDR0lIYW5kbGUiKSAlXSIgbWV0aG9kPSJwb3N0IiBlbmN0eXBlPSJtdWx0aXBhcnQvZm9ybS1kYXRhIj4KICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJBY3Rpb24iIHZhbHVlPSJbJSBFbnYoIkFjdGlvbiIpICVdIi8+CiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iU3ViYWN0aW9uIiB2YWx1ZT0iT3ZlcnZpZXciLz4KCiAgICAgICAgICAgICAgICAgICAgPGZpZWxkc2V0IGNsYXNzPSJUYWJsZUxpa2UiPgogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWw+WyUgVHJhbnNsYXRlKCJSZWNvcmRzIikgfCBodG1sICVdOjwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IlZhbHVlIj5bJSBEYXRhLkNvdW50ZXIgfCBodG1sICVdPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD5bJSBUcmFuc2xhdGUoIlN1Y2Nlc3MiKSB8IGh0bWwgJV06PC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iVmFsdWUiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgRGF0YS5TdWNjZXNzIHwgaHRtbCAlXQpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJJbXBvcnRSZXN1bHRSZXR1cm5Db2RlIikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIChbJSBUcmFuc2xhdGUoRGF0YS5SZXR1cm5Db2RlTmFtZSkgfCBodG1sICVdOiBbJSBEYXRhLlJldHVybkNvZGVDb3VudCB8IGh0bWwgJV0pClslIFJlbmRlckJsb2NrRW5kKCJJbXBvcnRSZXN1bHRSZXR1cm5Db2RlIikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD5bJSBUcmFuc2xhdGUoIkZhaWxlZCIpIHwgaHRtbCAlXTo8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJWYWx1ZSI+WyUgRGF0YS5GYWlsZWQgfCBodG1sICVdPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KClslIFJlbmRlckJsb2NrU3RhcnQoIkltcG9ydFJlc3VsdER1cGxpY2F0ZU5hbWVzIikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPlslIFRyYW5zbGF0ZSgiRHVwbGljYXRlIG5hbWVzIikgfCBodG1sICVdOjwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IlZhbHVlIj5bJSBEYXRhLkR1cGxpY2F0ZU5hbWVzIHwgaHRtbCAlXTwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+ClslIFJlbmRlckJsb2NrRW5kKCJJbXBvcnRSZXN1bHREdXBsaWNhdGVOYW1lcyIpICVdCgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJJbXBvcnRSZXN1bHRMYXN0TGluZU51bWJlciIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD5bJSBUcmFuc2xhdGUoIkxhc3QgcHJvY2Vzc2VkIGxpbmUgbnVtYmVyIG9mIGltcG9ydCBmaWxlIikgfCBodG1sICVdOjwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IlZhbHVlIj5bJSBEYXRhLkxhc3RMaW5lTnVtYmVyIHwgaHRtbCAlXTwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+ClslIFJlbmRlckJsb2NrRW5kKCJJbXBvcnRSZXN1bHRMYXN0TGluZU51bWJlciIpICVdCiAgICAgICAgICAgICAgICAgICAgPC9maWVsZHNldD4KCiAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9IkNlbnRlciBTcGFjaW5nVG9wU21hbGwiPgogICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJQcmltYXJ5IENhbGxGb3JBY3Rpb24iIHR5cGU9InN1Ym1pdCIgbmFtZT0iT2siIHZhbHVlPSJbJSBUcmFuc2xhdGUoIk9rIikgfCBodG1sICVdIj48c3Bhbj5bJSBUcmFuc2xhdGUoIk9rIikgfCBodG1sICVdPC9zcGFuPjwvYnV0dG9uPgogICAgICAgICAgICAgICAgICAgIDwvcD4KICAgICAgICAgICAgICAgIDwvZm9ybT4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KPC9kaXY+ClslIFJlbmRlckJsb2NrRW5kKCJJbXBvcnRSZXN1bHQiKSAlXQo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6U3lzdGVtOjpJbXBvcnRFeHBvcnQ7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CgpvdXIgQE9iamVjdERlcGVuZGVuY2llcyA9ICgKICAgICdLZXJuZWw6OlN5c3RlbTo6Q2FjaGUnLAogICAgJ0tlcm5lbDo6Q29uZmlnJywKICAgICdLZXJuZWw6OlN5c3RlbTo6Q2hlY2tJdGVtJywKICAgICdLZXJuZWw6OlN5c3RlbTo6REInLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpMb2cnLAopOwoKPWhlYWQxIE5BTUUKCktlcm5lbDo6U3lzdGVtOjpJbXBvcnRFeHBvcnQgLSBpbXBvcnQsIGV4cG9ydCBsaWIKCj1oZWFkMSBERVNDUklQVElPTgoKQWxsIGltcG9ydCBhbmQgZXhwb3J0IGZ1bmN0aW9ucy4KCj1oZWFkMSBQVUJMSUMgSU5URVJGQUNFCgo9Y3V0Cgo9aGVhZDIgbmV3KCkKCkNyZWF0ZSBhbiBvYmplY3QKCiAgICB1c2UgS2VybmVsOjpTeXN0ZW06Ok9iamVjdE1hbmFnZXI7CiAgICBsb2NhbCAkS2VybmVsOjpPTSA9IEtlcm5lbDo6U3lzdGVtOjpPYmplY3RNYW5hZ2VyLT5uZXcoKTsKICAgIG15ICRJbXBvcnRFeHBvcnRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SW1wb3J0RXhwb3J0Jyk7Cgo9Y3V0CgpzdWIgbmV3IHsKICAgIG15ICggJFR5cGUsICVQYXJhbSApID0gQF87CgogICAgIyBhbGxvY2F0ZSBuZXcgaGFzaCBmb3Igb2JqZWN0CiAgICBteSAkU2VsZiA9IHt9OwogICAgYmxlc3MoICRTZWxmLCAkVHlwZSApOwoKICAgIHJldHVybiAkU2VsZjsKfQoKPWhlYWQyIFRlbXBsYXRlTGlzdCgpCgpSZXR1cm4gYSBsaXN0IG9mIHRlbXBsYXRlcyBhcyBhcnJheSByZWZlcmVuY2UKCiAgICBteSAkVGVtcGxhdGVMaXN0ID0gJEltcG9ydEV4cG9ydE9iamVjdC0+VGVtcGxhdGVMaXN0KAogICAgICAgIE9iamVjdCA9PiAnVGlja2V0JywgICMgKG9wdGlvbmFsKQogICAgICAgIEZvcm1hdCA9PiAnQ1NWJyAgICAgICMgKG9wdGlvbmFsKQogICAgICAgIFVzZXJJRCA9PiAxLAogICAgKTsKCj1jdXQKCnN1YiBUZW1wbGF0ZUxpc3QgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgaWYgKCAhJFBhcmFte1VzZXJJRH0gKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICdOZWVkIFVzZXJJRCEnLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgY3JlYXRlIHNxbCBzdHJpbmcKICAgIG15ICRTUUwgPSAnU0VMRUNUIGlkIEZST00gaW1leHBvcnRfdGVtcGxhdGUgV0hFUkUgMT0xICc7CiAgICBteSBAQklORDsKCiAgICBpZiAoICRQYXJhbXtPYmplY3R9ICkgewogICAgICAgICRTUUwgLj0gJ0FORCBpbWV4cG9ydF9vYmplY3QgPSA/ICc7CiAgICAgICAgcHVzaCBAQklORCwgXCRQYXJhbXtPYmplY3R9OwogICAgfQogICAgaWYgKCAkUGFyYW17Rm9ybWF0fSApIHsKICAgICAgICAkU1FMIC49ICdBTkQgaW1leHBvcnRfZm9ybWF0ID0gPyAnOwogICAgICAgIHB1c2ggQEJJTkQsIFwkUGFyYW17Rm9ybWF0fTsKICAgIH0KCiAgICAjIGFkZCBvcmRlciBvcHRpb24KICAgICRTUUwgLj0gJ09SREVSIEJZIGlkJzsKCiAgICAjIGdldCBEQiBvYmplY3QKICAgIG15ICREQk9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpOwoKICAgICMgYXNrIGRhdGFiYXNlCiAgICAkREJPYmplY3QtPlByZXBhcmUoCiAgICAgICAgU1FMICA9PiAkU1FMLAogICAgICAgIEJpbmQgPT4gXEBCSU5ELAogICAgKTsKCiAgICAjIGZldGNoIHRoZSByZXN1bHQKICAgIG15IEBUZW1wbGF0ZUxpc3Q7CiAgICB3aGlsZSAoIG15IEBSb3cgPSAkREJPYmplY3QtPkZldGNocm93QXJyYXkoKSApIHsKICAgICAgICBwdXNoIEBUZW1wbGF0ZUxpc3QsICRSb3dbMF07CiAgICB9CgogICAgcmV0dXJuIFxAVGVtcGxhdGVMaXN0Owp9Cgo9aGVhZDIgVGVtcGxhdGVHZXQoKQoKR2V0IGEgaW1wb3J0IGV4cG9ydCB0ZW1wbGF0ZQoKUmV0dXJuCiAgICAkVGVtcGxhdGVEYXRhe1RlbXBsYXRlSUR9CiAgICAkVGVtcGxhdGVEYXRhe051bWJlcn0KICAgICRUZW1wbGF0ZURhdGF7T2JqZWN0fQogICAgJFRlbXBsYXRlRGF0YXtGb3JtYXR9CiAgICAkVGVtcGxhdGVEYXRhe05hbWV9CiAgICAkVGVtcGxhdGVEYXRhe1ZhbGlkSUR9CiAgICAkVGVtcGxhdGVEYXRhe0NvbW1lbnR9CiAgICAkVGVtcGxhdGVEYXRhe0NyZWF0ZVRpbWV9CiAgICAkVGVtcGxhdGVEYXRhe0NyZWF0ZUJ5fQogICAgJFRlbXBsYXRlRGF0YXtDaGFuZ2VUaW1lfQogICAgJFRlbXBsYXRlRGF0YXtDaGFuZ2VCeX0KCiAgICBteSAkVGVtcGxhdGVEYXRhUmVmID0gJEltcG9ydEV4cG9ydE9iamVjdC0+VGVtcGxhdGVHZXQoCiAgICAgICAgVGVtcGxhdGVJRCA9PiAzLAogICAgICAgIFVzZXJJRCAgICAgPT4gMSwKICAgICk7Cgo9Y3V0CgpzdWIgVGVtcGxhdGVHZXQgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICRBcmd1bWVudCAocXcoVGVtcGxhdGVJRCBVc2VySUQpKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyRBcmd1bWVudH0gKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICRBcmd1bWVudCEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgY2hlY2sgaWYgcmVzdWx0IGlzIGFscmVhZHkgY2FjaGVkCiAgICByZXR1cm4gJFNlbGYtPntDYWNoZX0tPntUZW1wbGF0ZUdldH0tPnsgJFBhcmFte1RlbXBsYXRlSUR9IH0KICAgICAgICBpZiAkU2VsZi0+e0NhY2hlfS0+e1RlbXBsYXRlR2V0fS0+eyAkUGFyYW17VGVtcGxhdGVJRH0gfTsKCiAgICAjIGdldCBEQiBvYmplY3QKICAgIG15ICREQk9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpOwoKICAgICMgYXNrIGRhdGFiYXNlCiAgICAkREJPYmplY3QtPlByZXBhcmUoCiAgICAgICAgU1FMID0+ICdTRUxFQ1QgaWQsIGltZXhwb3J0X29iamVjdCwgaW1leHBvcnRfZm9ybWF0LCBuYW1lLCB2YWxpZF9pZCwgY29tbWVudHMsICcKICAgICAgICAgICAgLiAnY3JlYXRlX3RpbWUsIGNyZWF0ZV9ieSwgY2hhbmdlX3RpbWUsIGNoYW5nZV9ieSBGUk9NIGltZXhwb3J0X3RlbXBsYXRlIFdIRVJFIGlkID0gPycsCiAgICAgICAgQmluZCAgPT4gWyBcJFBhcmFte1RlbXBsYXRlSUR9IF0sCiAgICAgICAgTGltaXQgPT4gMSwKICAgICk7CgogICAgIyBmZXRjaCB0aGUgcmVzdWx0CiAgICBteSAlVGVtcGxhdGVEYXRhOwogICAgd2hpbGUgKCBteSBAUm93ID0gJERCT2JqZWN0LT5GZXRjaHJvd0FycmF5KCkgKSB7CiAgICAgICAgJFRlbXBsYXRlRGF0YXtUZW1wbGF0ZUlEfSA9ICRSb3dbMF07CiAgICAgICAgJFRlbXBsYXRlRGF0YXtPYmplY3R9ICAgICA9ICRSb3dbMV07CiAgICAgICAgJFRlbXBsYXRlRGF0YXtGb3JtYXR9ICAgICA9ICRSb3dbMl07CiAgICAgICAgJFRlbXBsYXRlRGF0YXtOYW1lfSAgICAgICA9ICRSb3dbM107CiAgICAgICAgJFRlbXBsYXRlRGF0YXtWYWxpZElEfSAgICA9ICRSb3dbNF07CiAgICAgICAgJFRlbXBsYXRlRGF0YXtDb21tZW50fSAgICA9ICRSb3dbNV0gfHwgJyc7CiAgICAgICAgJFRlbXBsYXRlRGF0YXtDcmVhdGVUaW1lfSA9ICRSb3dbNl07CiAgICAgICAgJFRlbXBsYXRlRGF0YXtDcmVhdGVCeX0gICA9ICRSb3dbN107CiAgICAgICAgJFRlbXBsYXRlRGF0YXtDaGFuZ2VUaW1lfSA9ICRSb3dbOF07CiAgICAgICAgJFRlbXBsYXRlRGF0YXtDaGFuZ2VCeX0gICA9ICRSb3dbOV07CgogICAgICAgICRUZW1wbGF0ZURhdGF7TnVtYmVyfSA9IHNwcmludGYgIiUwNmQiLCAkVGVtcGxhdGVEYXRhe1RlbXBsYXRlSUR9OwogICAgfQoKICAgICMgY2FjaGUgdGhlIHJlc3VsdAogICAgJFNlbGYtPntDYWNoZX0tPntUZW1wbGF0ZUdldH0tPnsgJFBhcmFte1RlbXBsYXRlSUR9IH0gPSBcJVRlbXBsYXRlRGF0YTsKCiAgICByZXR1cm4gXCVUZW1wbGF0ZURhdGE7Cn0KCj1oZWFkMiBUZW1wbGF0ZUFkZCgpCgpBZGQgYSBuZXcgaW1wb3J0L2V4cG9ydCB0ZW1wbGF0ZQoKICAgIG15ICRUZW1wbGF0ZUlEID0gJEltcG9ydEV4cG9ydE9iamVjdC0+VGVtcGxhdGVBZGQoCiAgICAgICAgT2JqZWN0ICA9PiAnVGlja2V0JywKICAgICAgICBGb3JtYXQgID0+ICdDU1YnLAogICAgICAgIE5hbWUgICAgPT4gJ1RlbXBsYXRlIE5hbWUnLAogICAgICAgIFZhbGlkSUQgPT4gMSwKICAgICAgICBDb21tZW50ID0+ICdDb21tZW50JywgICAgICAgIyAob3B0aW9uYWwpCiAgICAgICAgVXNlcklEICA9PiAxLAogICAgKTsKCj1jdXQKCnN1YiBUZW1wbGF0ZUFkZCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgZ2V0IGxvZyBvYmplY3QKICAgIG15ICRMb2dPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyk7CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KE9iamVjdCBGb3JtYXQgTmFtZSBWYWxpZElEIFVzZXJJRCkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJExvZ09iamVjdC0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICRBcmd1bWVudCEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgc2V0IGRlZmF1bHQgdmFsdWVzCiAgICAkUGFyYW17Q29tbWVudH0gfHw9ICcnOwoKICAgICMgZ2V0IENoZWNrSXRlbSBvYmplY3QKICAgIG15ICRDaGVja0l0ZW1PYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q2hlY2tJdGVtJyk7CgogICAgIyBjbGVhbnVwIGdpdmVuIHBhcmFtcwogICAgZm9yIG15ICRBcmd1bWVudCAocXcoT2JqZWN0IEZvcm1hdCkpIHsKICAgICAgICAkQ2hlY2tJdGVtT2JqZWN0LT5TdHJpbmdDbGVhbigKICAgICAgICAgICAgU3RyaW5nUmVmICAgICAgICAgPT4gXCRQYXJhbXskQXJndW1lbnR9LAogICAgICAgICAgICBSZW1vdmVBbGxOZXdsaW5lcyA9PiAxLAogICAgICAgICAgICBSZW1vdmVBbGxUYWJzICAgICA9PiAxLAogICAgICAgICAgICBSZW1vdmVBbGxTcGFjZXMgICA9PiAxLAogICAgICAgICk7CiAgICB9CiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhOYW1lIENvbW1lbnQpKSB7CiAgICAgICAgJENoZWNrSXRlbU9iamVjdC0+U3RyaW5nQ2xlYW4oCiAgICAgICAgICAgIFN0cmluZ1JlZiAgICAgICAgID0+IFwkUGFyYW17JEFyZ3VtZW50fSwKICAgICAgICAgICAgUmVtb3ZlQWxsTmV3bGluZXMgPT4gMSwKICAgICAgICAgICAgUmVtb3ZlQWxsVGFicyAgICAgPT4gMSwKICAgICAgICApOwogICAgfQoKICAgICMgZ2V0IERCIG9iamVjdAogICAgbXkgJERCT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyk7CgogICAgIyBmaW5kIGV4aXRpbmcgdGVtcGxhdGUgd2l0aCBzYW1lIG5hbWUKICAgICREQk9iamVjdC0+UHJlcGFyZSgKICAgICAgICBTUUwgICA9PiAnU0VMRUNUIGlkIEZST00gaW1leHBvcnRfdGVtcGxhdGUgV0hFUkUgaW1leHBvcnRfb2JqZWN0ID0gPyBBTkQgbmFtZSA9ID8nLAogICAgICAgIEJpbmQgID0+IFsgXCRQYXJhbXtPYmplY3R9LCBcJFBhcmFte05hbWV9IF0sCiAgICAgICAgTGltaXQgPT4gMSwKICAgICk7CgogICAgIyBmZXRjaCB0aGUgcmVzdWx0CiAgICBteSAkTm9BZGQ7CiAgICB3aGlsZSAoICREQk9iamVjdC0+RmV0Y2hyb3dBcnJheSgpICkgewogICAgICAgICROb0FkZCA9IDE7CiAgICB9CgogICAgIyBhYm9ydCBpbnNlcnQgb2YgbmV3IHRlbXBsYXRlLCBpZiB0ZW1wbGF0ZSBuYW1lIGFscmVhZHkgZXhpc3RzCiAgICBpZiAoJE5vQWRkKSB7CiAgICAgICAgJExvZ09iamVjdC0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlID0+CiAgICAgICAgICAgICAgICAiQ2FuJ3QgYWRkIG5ldyB0ZW1wbGF0ZSEgVGVtcGxhdGUgd2l0aCBzYW1lIG5hbWUgYWxyZWFkeSBleGlzdHMgaW4gdGhpcyBvYmplY3QuIiwKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIGluc2VydCBuZXcgdGVtcGxhdGUKICAgIHJldHVybiBpZiAhJERCT2JqZWN0LT5EbygKICAgICAgICBTUUwgPT4gJ0lOU0VSVCBJTlRPIGltZXhwb3J0X3RlbXBsYXRlICcKICAgICAgICAgICAgLiAnKGltZXhwb3J0X29iamVjdCwgaW1leHBvcnRfZm9ybWF0LCBuYW1lLCB2YWxpZF9pZCwgY29tbWVudHMsICcKICAgICAgICAgICAgLiAnY3JlYXRlX3RpbWUsIGNyZWF0ZV9ieSwgY2hhbmdlX3RpbWUsIGNoYW5nZV9ieSkgVkFMVUVTICcKICAgICAgICAgICAgLiAnKD8sID8sID8sID8sID8sIGN1cnJlbnRfdGltZXN0YW1wLCA/LCBjdXJyZW50X3RpbWVzdGFtcCwgPyknLAogICAgICAgIEJpbmQgPT4gWwogICAgICAgICAgICBcJFBhcmFte09iamVjdH0sIFwkUGFyYW17Rm9ybWF0fSwgXCRQYXJhbXtOYW1lfSwgXCRQYXJhbXtWYWxpZElEfSwKICAgICAgICAgICAgXCRQYXJhbXtDb21tZW50fSwgXCRQYXJhbXtVc2VySUR9LCBcJFBhcmFte1VzZXJJRH0sCiAgICAgICAgXSwKICAgICk7CgogICAgIyBmaW5kIGlkIG9mIG5ldyB0ZW1wbGF0ZQogICAgJERCT2JqZWN0LT5QcmVwYXJlKAogICAgICAgIFNRTCAgID0+ICdTRUxFQ1QgaWQgRlJPTSBpbWV4cG9ydF90ZW1wbGF0ZSBXSEVSRSBpbWV4cG9ydF9vYmplY3QgPSA/IEFORCBuYW1lID0gPycsCiAgICAgICAgQmluZCAgPT4gWyBcJFBhcmFte09iamVjdH0sIFwkUGFyYW17TmFtZX0gXSwKICAgICAgICBMaW1pdCA9PiAxLAogICAgKTsKCiAgICAjIGZldGNoIHRoZSByZXN1bHQKICAgIG15ICRUZW1wbGF0ZUlEOwogICAgd2hpbGUgKCBteSBAUm93ID0gJERCT2JqZWN0LT5GZXRjaHJvd0FycmF5KCkgKSB7CiAgICAgICAgJFRlbXBsYXRlSUQgPSAkUm93WzBdOwogICAgfQoKICAgIHJldHVybiAkVGVtcGxhdGVJRDsKfQoKPWhlYWQyIFRlbXBsYXRlVXBkYXRlKCkKClVwZGF0ZSBhIGV4aXN0aW5nIGltcG9ydC9leHBvcnQgdGVtcGxhdGUKCiAgICBteSAkVHJ1ZSA9ICRJbXBvcnRFeHBvcnRPYmplY3QtPlRlbXBsYXRlVXBkYXRlKAogICAgICAgIFRlbXBsYXRlSUQgPT4gMTIzLAogICAgICAgIE5hbWUgICAgICAgPT4gJ1RlbXBsYXRlIE5hbWUnLAogICAgICAgIFZhbGlkSUQgICAgPT4gMSwKICAgICAgICBDb21tZW50ICAgID0+ICdDb21tZW50JywgICAgICAgICMgKG9wdGlvbmFsKQogICAgICAgIFVzZXJJRCAgICAgPT4gMSwKICAgICk7Cgo9Y3V0CgpzdWIgVGVtcGxhdGVVcGRhdGUgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGdldCBsb2cgb2JqZWN0CiAgICBteSAkTG9nT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhUZW1wbGF0ZUlEIE5hbWUgVmFsaWRJRCBVc2VySUQpKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyRBcmd1bWVudH0gKSB7CiAgICAgICAgICAgICRMb2dPYmplY3QtPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkQXJndW1lbnQhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICAjIHNldCBkZWZhdWx0IHZhbHVlcwogICAgJFBhcmFte0NvbW1lbnR9IHx8PSAnJzsKCiAgICAjIGNsZWFudXAgZ2l2ZW4gcGFyYW1zCiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhOYW1lIENvbW1lbnQpKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkNoZWNrSXRlbScpLT5TdHJpbmdDbGVhbigKICAgICAgICAgICAgU3RyaW5nUmVmICAgICAgICAgPT4gXCRQYXJhbXskQXJndW1lbnR9LAogICAgICAgICAgICBSZW1vdmVBbGxOZXdsaW5lcyA9PiAxLAogICAgICAgICAgICBSZW1vdmVBbGxUYWJzICAgICA9PiAxLAogICAgICAgICk7CiAgICB9CgogICAgIyBnZXQgREIgb2JqZWN0CiAgICBteSAkREJPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKTsKCiAgICAjIGdldCB0aGUgb2JqZWN0IG9mIHRoaXMgdGVtcGxhdGUgaWQKICAgICREQk9iamVjdC0+UHJlcGFyZSgKICAgICAgICBTUUwgICA9PiAnU0VMRUNUIGltZXhwb3J0X29iamVjdCBGUk9NIGltZXhwb3J0X3RlbXBsYXRlIFdIRVJFIGlkID0gPycsCiAgICAgICAgQmluZCAgPT4gWyBcJFBhcmFte1RlbXBsYXRlSUR9IF0sCiAgICAgICAgTGltaXQgPT4gMSwKICAgICk7CgogICAgIyBmZXRjaCB0aGUgcmVzdWx0CiAgICBteSAkT2JqZWN0OwogICAgd2hpbGUgKCBteSBAUm93ID0gJERCT2JqZWN0LT5GZXRjaHJvd0FycmF5KCkgKSB7CiAgICAgICAgJE9iamVjdCA9ICRSb3dbMF07CiAgICB9CgogICAgaWYgKCAhJE9iamVjdCApIHsKICAgICAgICAkTG9nT2JqZWN0LT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJDYW4ndCB1cGRhdGUgdGVtcGxhdGUgYmVjYXVzZSBpdCBoYXNuJ3QgYmVlbiBmb3VuZCEiLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgZmluZCBleGl0aW5nIHRlbXBsYXRlIHdpdGggc2FtZSBuYW1lCiAgICAkREJPYmplY3QtPlByZXBhcmUoCiAgICAgICAgU1FMICAgPT4gJ1NFTEVDVCBpZCBGUk9NIGltZXhwb3J0X3RlbXBsYXRlIFdIRVJFIGltZXhwb3J0X29iamVjdCA9ID8gQU5EIG5hbWUgPSA/JywKICAgICAgICBCaW5kICA9PiBbIFwkT2JqZWN0LCBcJFBhcmFte05hbWV9IF0sCiAgICAgICAgTGltaXQgPT4gMSwKICAgICk7CgogICAgIyBmZXRjaCB0aGUgcmVzdWx0CiAgICBteSAkVXBkYXRlID0gMTsKICAgIHdoaWxlICggbXkgQFJvdyA9ICREQk9iamVjdC0+RmV0Y2hyb3dBcnJheSgpICkgewogICAgICAgIGlmICggJFBhcmFte1RlbXBsYXRlSUR9IG5lICRSb3dbMF0gKSB7CiAgICAgICAgICAgICRVcGRhdGUgPSAwOwogICAgICAgIH0KICAgIH0KCiAgICBpZiAoICEkVXBkYXRlICkgewogICAgICAgICRMb2dPYmplY3QtPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSA9PgogICAgICAgICAgICAgICAgIkNhbid0IHVwZGF0ZSB0ZW1wbGF0ZSEgVGVtcGxhdGUgd2l0aCBzYW1lIG5hbWUgYWxyZWFkeSBleGlzdHMgaW4gdGhpcyBvYmplY3QuIiwKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIHJlc2V0IGNhY2hlCiAgICBkZWxldGUgJFNlbGYtPntDYWNoZX0tPntUZW1wbGF0ZUdldH0tPnsgJFBhcmFte1RlbXBsYXRlSUR9IH07CgogICAgIyB1cGRhdGUgdGVtcGxhdGUKICAgIHJldHVybiAkREJPYmplY3QtPkRvKAogICAgICAgIFNRTCA9PiAnVVBEQVRFIGltZXhwb3J0X3RlbXBsYXRlIFNFVCBuYW1lID0gPywnCiAgICAgICAgICAgIC4gJ3ZhbGlkX2lkID0gPywgY29tbWVudHMgPSA/LCAnCiAgICAgICAgICAgIC4gJ2NoYW5nZV90aW1lID0gY3VycmVudF90aW1lc3RhbXAsIGNoYW5nZV9ieSA9ID8gJwogICAgICAgICAgICAuICdXSEVSRSBpZCA9ID8nLAogICAgICAgIEJpbmQgPT4gWwogICAgICAgICAgICBcJFBhcmFte05hbWV9LCBcJFBhcmFte1ZhbGlkSUR9LCBcJFBhcmFte0NvbW1lbnR9LAogICAgICAgICAgICBcJFBhcmFte1VzZXJJRH0sIFwkUGFyYW17VGVtcGxhdGVJRH0sCiAgICAgICAgXSwKICAgICk7Cn0KCj1oZWFkMiBUZW1wbGF0ZURlbGV0ZSgpCgpEZWxldGUgZXhpc3RpbmcgaW1wb3J0L2V4cG9ydCB0ZW1wbGF0ZXMKCiAgICBteSAkVHJ1ZSA9ICRJbXBvcnRFeHBvcnRPYmplY3QtPlRlbXBsYXRlRGVsZXRlKAogICAgICAgIFRlbXBsYXRlSUQgPT4gMTIzLAogICAgICAgIFVzZXJJRCAgICAgPT4gMSwKICAgICk7CgogICAgb3IKCiAgICBteSAkVHJ1ZSA9ICRJbXBvcnRFeHBvcnRPYmplY3QtPlRlbXBsYXRlRGVsZXRlKAogICAgICAgIFRlbXBsYXRlSUQgPT4gWzEsNDQsMTY2LDVdLAogICAgICAgIFVzZXJJRCAgICAgPT4gMSwKICAgICk7Cgo9Y3V0CgpzdWIgVGVtcGxhdGVEZWxldGUgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGdldCBsb2cgb2JqZWN0CiAgICBteSAkTG9nT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhUZW1wbGF0ZUlEIFVzZXJJRCkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJExvZ09iamVjdC0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICRBcmd1bWVudCEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgIGlmICggIXJlZiAkUGFyYW17VGVtcGxhdGVJRH0gKSB7CiAgICAgICAgJFBhcmFte1RlbXBsYXRlSUR9ID0gWyAkUGFyYW17VGVtcGxhdGVJRH0gXTsKICAgIH0KICAgIGVsc2lmICggcmVmICRQYXJhbXtUZW1wbGF0ZUlEfSBuZSAnQVJSQVknICkgewogICAgICAgICRMb2dPYmplY3QtPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ1RlbXBsYXRlSUQgbXVzdCBiZSBhbiBhcnJheSByZWZlcmVuY2Ugb3IgYSBzdHJpbmchJywKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIGRlbGV0ZSBleGlzdGluZyBzZWFyY2ggZGF0YQogICAgJFNlbGYtPlNlYXJjaERhdGFEZWxldGUoCiAgICAgICAgVGVtcGxhdGVJRCA9PiAkUGFyYW17VGVtcGxhdGVJRH0sCiAgICAgICAgVXNlcklEICAgICA9PiAkUGFyYW17VXNlcklEfSwKICAgICk7CgogICAgIyBkZWxldGUgYWxsIG1hcHBpbmcgZGF0YQogICAgZm9yIG15ICRUZW1wbGF0ZUlEICggQHsgJFBhcmFte1RlbXBsYXRlSUR9IH0gKSB7CiAgICAgICAgJFNlbGYtPk1hcHBpbmdEZWxldGUoCiAgICAgICAgICAgIFRlbXBsYXRlSUQgPT4gJFRlbXBsYXRlSUQsCiAgICAgICAgICAgIFVzZXJJRCAgICAgPT4gJFBhcmFte1VzZXJJRH0sCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGRlbGV0ZSBleGlzdGluZyBmb3JtYXQgZGF0YQogICAgJFNlbGYtPkZvcm1hdERhdGFEZWxldGUoCiAgICAgICAgVGVtcGxhdGVJRCA9PiAkUGFyYW17VGVtcGxhdGVJRH0sCiAgICAgICAgVXNlcklEICAgICA9PiAkUGFyYW17VXNlcklEfSwKICAgICk7CgogICAgIyBkZWxldGUgZXhpc3Rpbmcgb2JqZWN0IGRhdGEKICAgICRTZWxmLT5PYmplY3REYXRhRGVsZXRlKAogICAgICAgIFRlbXBsYXRlSUQgPT4gJFBhcmFte1RlbXBsYXRlSUR9LAogICAgICAgIFVzZXJJRCAgICAgPT4gJFBhcmFte1VzZXJJRH0sCiAgICApOwoKICAgICMgY3JlYXRlIHRoZSB0ZW1wbGF0ZSBpZCBzdHJpbmcKICAgIG15ICRUZW1wbGF0ZUlEU3RyaW5nID0gam9pbiBxeywgfSwgbWFwIHsnPyd9IEB7ICRQYXJhbXtUZW1wbGF0ZUlEfSB9OwoKICAgICMgY3JlYXRlIGFuZCBhZGQgYmluZCBwYXJhbWV0ZXJzCiAgICBteSBAQklORCA9IG1hcCB7IFwkXyB9IEB7ICRQYXJhbXtUZW1wbGF0ZUlEfSB9OwoKICAgICMgcmVzZXQgY2FjaGUKICAgIGRlbGV0ZSAkU2VsZi0+e0NhY2hlfS0+e1RlbXBsYXRlR2V0fTsKCiAgICAjIGRlbGV0ZSB0ZW1wbGF0ZXMKICAgIHJldHVybiAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKS0+RG8oCiAgICAgICAgU1FMICA9PiAiREVMRVRFIEZST00gaW1leHBvcnRfdGVtcGxhdGUgV0hFUkUgaWQgSU4gKCAkVGVtcGxhdGVJRFN0cmluZyApIiwKICAgICAgICBCaW5kID0+IFxAQklORCwKICAgICk7Cn0KCj1oZWFkMiBPYmplY3RMaXN0KCkKClJldHVybiBhIGxpc3Qgb2YgYXZhaWxhYmxlIG9iamVjdHMgYXMgaGFzaCByZWZlcmVuY2UKCiAgICBteSAkT2JqZWN0TGlzdCA9ICRJbXBvcnRFeHBvcnRPYmplY3QtPk9iamVjdExpc3QoKTsKCj1jdXQKCnN1YiBPYmplY3RMaXN0IHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBnZXQgY29uZmlnCiAgICBteSAkTW9kdWxlTGlzdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyktPkdldCgnSW1wb3J0RXhwb3J0OjpPYmplY3RCYWNrZW5kUmVnaXN0cmF0aW9uJyk7CgogICAgcmV0dXJuIGlmICEkTW9kdWxlTGlzdDsKICAgIHJldHVybiBpZiByZWYgJE1vZHVsZUxpc3QgbmUgJ0hBU0gnOwoKICAgICMgY3JlYXRlIHRoZSBvYmplY3QgbGlzdAogICAgbXkgJE9iamVjdExpc3QgPSB7fTsKICAgIGZvciBteSAkTW9kdWxlICggc29ydCBrZXlzICV7JE1vZHVsZUxpc3R9ICkgewogICAgICAgICRPYmplY3RMaXN0LT57JE1vZHVsZX0gPSAkTW9kdWxlTGlzdC0+eyRNb2R1bGV9LT57TmFtZX07CiAgICB9CgogICAgcmV0dXJuICRPYmplY3RMaXN0Owp9Cgo9aGVhZDIgT2JqZWN0QXR0cmlidXRlc0dldCgpCgpHZXQgdGhlIGF0dHJpYnV0ZXMgb2YgYW4gb2JqZWN0IGJhY2tlbmQgYXMgYXJyYXkvaGFzaCByZWZlcmVuY2UKCiAgICBteSAkQXR0cmlidXRlcyA9ICRJbXBvcnRFeHBvcnRPYmplY3QtPk9iamVjdEF0dHJpYnV0ZXNHZXQoCiAgICAgICAgVGVtcGxhdGVJRCA9PiAxMjMsCiAgICAgICAgVXNlcklEICAgICA9PiAxLAogICAgKTsKCj1jdXQKCnN1YiBPYmplY3RBdHRyaWJ1dGVzR2V0IHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBnZXQgbG9nIG9iamVjdAogICAgbXkgJExvZ09iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKTsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICRBcmd1bWVudCAocXcoVGVtcGxhdGVJRCBVc2VySUQpKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyRBcmd1bWVudH0gKSB7CiAgICAgICAgICAgICRMb2dPYmplY3QtPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkQXJndW1lbnQhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICAjIGdldCB0ZW1wbGF0ZSBkYXRhCiAgICBteSAkVGVtcGxhdGVEYXRhID0gJFNlbGYtPlRlbXBsYXRlR2V0KAogICAgICAgIFRlbXBsYXRlSUQgPT4gJFBhcmFte1RlbXBsYXRlSUR9LAogICAgICAgIFVzZXJJRCAgICAgPT4gJFBhcmFte1VzZXJJRH0sCiAgICApOwoKICAgICMgY2hlY2sgdGVtcGxhdGUgZGF0YQogICAgaWYgKCAhJFRlbXBsYXRlRGF0YSB8fCAhJFRlbXBsYXRlRGF0YS0+e09iamVjdH0gKSB7CiAgICAgICAgJExvZ09iamVjdC0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAiVGVtcGxhdGUgd2l0aCBJRCAkUGFyYW17VGVtcGxhdGVJRH0gaXMgaW5jb21wbGV0ZSEiLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgbG9hZCBiYWNrZW5kCiAgICBteSAkQmFja2VuZCA9ICRLZXJuZWw6Ok9NLT5HZXQoCiAgICAgICAgJ0tlcm5lbDo6U3lzdGVtOjpJbXBvcnRFeHBvcnQ6Ok9iamVjdEJhY2tlbmQ6OicgLiAkVGVtcGxhdGVEYXRhLT57T2JqZWN0fQogICAgKTsKCiAgICByZXR1cm4gaWYgISRCYWNrZW5kOwoKICAgICMgZ2V0IGFuIGF0dHJpYnV0ZSBsaXN0IG9mIHRoZSBvYmplY3QKICAgIG15ICRBdHRyaWJ1dGVzID0gJEJhY2tlbmQtPk9iamVjdEF0dHJpYnV0ZXNHZXQoCiAgICAgICAgVXNlcklEID0+ICRQYXJhbXtVc2VySUR9LAogICAgKTsKCiAgICByZXR1cm4gJEF0dHJpYnV0ZXM7Cn0KCj1oZWFkMiBPYmplY3REYXRhR2V0KCkKCkdldCB0aGUgb2JqZWN0IGRhdGEgZnJvbSBhIHRlbXBsYXRlCgogICAgbXkgJE9iamVjdERhdGFSZWYgPSAkSW1wb3J0RXhwb3J0T2JqZWN0LT5PYmplY3REYXRhR2V0KAogICAgICAgIFRlbXBsYXRlSUQgPT4gMywKICAgICAgICBVc2VySUQgICAgID0+IDEsCiAgICApOwoKPWN1dAoKc3ViIE9iamVjdERhdGFHZXQgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICRBcmd1bWVudCAocXcoVGVtcGxhdGVJRCBVc2VySUQpKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyRBcmd1bWVudH0gKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICRBcmd1bWVudCEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgZ2V0IERCIG9iamVjdAogICAgbXkgJERCT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyk7CgogICAgIyBhc2sgZGF0YWJhc2UKICAgICREQk9iamVjdC0+UHJlcGFyZSgKICAgICAgICBTUUwgID0+ICdTRUxFQ1QgZGF0YV9rZXksIGRhdGFfdmFsdWUgRlJPTSBpbWV4cG9ydF9vYmplY3QgV0hFUkUgdGVtcGxhdGVfaWQgPSA/JywKICAgICAgICBCaW5kID0+IFsgXCRQYXJhbXtUZW1wbGF0ZUlEfSBdLAogICAgKTsKCiAgICAjIGZldGNoIHRoZSByZXN1bHQKICAgIG15ICVPYmplY3REYXRhOwogICAgd2hpbGUgKCBteSBAUm93ID0gJERCT2JqZWN0LT5GZXRjaHJvd0FycmF5KCkgKSB7CiAgICAgICAgJE9iamVjdERhdGF7ICRSb3dbMF0gfSA9ICRSb3dbMV07CiAgICB9CgogICAgcmV0dXJuIFwlT2JqZWN0RGF0YTsKfQoKPWhlYWQyIE9iamVjdERhdGFTYXZlKCkKClNhdmUgdGhlIG9iamVjdCBkYXRhIG9mIGEgdGVtcGxhdGUKCiAgICBteSAkVHJ1ZSA9ICRJbXBvcnRFeHBvcnRPYmplY3QtPk9iamVjdERhdGFTYXZlKAogICAgICAgIFRlbXBsYXRlSUQgPT4gMTIzLAogICAgICAgIE9iamVjdERhdGEgPT4gJEhhc2hSZWYsCiAgICAgICAgVXNlcklEICAgICA9PiAxLAogICAgKTsKCj1jdXQKCnN1YiBPYmplY3REYXRhU2F2ZSB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgZ2V0IGxvZyBvYmplY3QKICAgIG15ICRMb2dPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyk7CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KFRlbXBsYXRlSUQgT2JqZWN0RGF0YSBVc2VySUQpKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyRBcmd1bWVudH0gKSB7CiAgICAgICAgICAgICRMb2dPYmplY3QtPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkQXJndW1lbnQhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICBpZiAoIHJlZiAkUGFyYW17T2JqZWN0RGF0YX0gbmUgJ0hBU0gnICkgewogICAgICAgICRMb2dPYmplY3QtPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ09iamVjdERhdGEgbXVzdCBiZSBhIGhhc2ggcmVmZXJlbmNlIScsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBkZWxldGUgZXhpc3Rpbmcgb2JqZWN0IGRhdGEKICAgICRTZWxmLT5PYmplY3REYXRhRGVsZXRlKAogICAgICAgIFRlbXBsYXRlSUQgPT4gJFBhcmFte1RlbXBsYXRlSUR9LAogICAgICAgIFVzZXJJRCAgICAgPT4gJFBhcmFte1VzZXJJRH0sCiAgICApOwoKICAgIERBVEFLRVk6CiAgICBmb3IgbXkgJERhdGFLZXkgKCBzb3J0IGtleXMgJXsgJFBhcmFte09iamVjdERhdGF9IH0gKSB7CgogICAgICAgIG15ICREYXRhVmFsdWUgPSAkUGFyYW17T2JqZWN0RGF0YX0tPnskRGF0YUtleX07CgogICAgICAgIG5leHQgREFUQUtFWSBpZiAhZGVmaW5lZCAkRGF0YUtleTsKICAgICAgICBuZXh0IERBVEFLRVkgaWYgIWRlZmluZWQgJERhdGFWYWx1ZTsKCiAgICAgICAgIyBpbnNlcnQgb25lIHJvdwogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpLT5EbygKICAgICAgICAgICAgU1FMID0+ICdJTlNFUlQgSU5UTyBpbWV4cG9ydF9vYmplY3QgJwogICAgICAgICAgICAgICAgLiAnKHRlbXBsYXRlX2lkLCBkYXRhX2tleSwgZGF0YV92YWx1ZSkgVkFMVUVTICcKICAgICAgICAgICAgICAgIC4gJyg/LCA/LCA/KScsCiAgICAgICAgICAgIEJpbmQgPT4gWyBcJFBhcmFte1RlbXBsYXRlSUR9LCBcJERhdGFLZXksIFwkRGF0YVZhbHVlIF0sCiAgICAgICAgKTsKICAgIH0KCiAgICByZXR1cm4gMTsKfQoKPWhlYWQyIE9iamVjdERhdGFEZWxldGUoKQoKRGVsZXRlIHRoZSBleGlzdGluZyBvYmplY3QgZGF0YSBvZiBhIHRlbXBsYXRlCgogICAgbXkgJFRydWUgPSAkSW1wb3J0RXhwb3J0T2JqZWN0LT5PYmplY3REYXRhRGVsZXRlKAogICAgICAgIFRlbXBsYXRlSUQgPT4gMTIzLAogICAgICAgIFVzZXJJRCAgICAgPT4gMSwKICAgICk7CgogICAgb3IKCiAgICBteSAkVHJ1ZSA9ICRJbXBvcnRFeHBvcnRPYmplY3QtPk9iamVjdERhdGFEZWxldGUoCiAgICAgICAgVGVtcGxhdGVJRCA9PiBbMSw0NCwxNjYsNV0sCiAgICAgICAgVXNlcklEICAgICA9PiAxLAogICAgKTsKCj1jdXQKCnN1YiBPYmplY3REYXRhRGVsZXRlIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBnZXQgbG9nIG9iamVjdAogICAgbXkgJExvZ09iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKTsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICRBcmd1bWVudCAocXcoVGVtcGxhdGVJRCBVc2VySUQpKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyRBcmd1bWVudH0gKSB7CiAgICAgICAgICAgICRMb2dPYmplY3QtPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkQXJndW1lbnQhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICBpZiAoICFyZWYgJFBhcmFte1RlbXBsYXRlSUR9ICkgewogICAgICAgICRQYXJhbXtUZW1wbGF0ZUlEfSA9IFsgJFBhcmFte1RlbXBsYXRlSUR9IF07CiAgICB9CiAgICBlbHNpZiAoIHJlZiAkUGFyYW17VGVtcGxhdGVJRH0gbmUgJ0FSUkFZJyApIHsKICAgICAgICAkTG9nT2JqZWN0LT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICdUZW1wbGF0ZUlEIG11c3QgYmUgYW4gYXJyYXkgcmVmZXJlbmNlIG9yIGEgc3RyaW5nIScsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBjcmVhdGUgdGhlIHRlbXBsYXRlIGlkIHN0cmluZwogICAgbXkgJFRlbXBsYXRlSURTdHJpbmcgPSBqb2luIHF7LCB9LCBtYXAgeyc/J30gQHsgJFBhcmFte1RlbXBsYXRlSUR9IH07CgogICAgIyBjcmVhdGUgYW5kIGFkZCBiaW5kIHBhcmFtZXRlcnMKICAgIG15IEBCSU5EID0gbWFwIHsgXCRfIH0gQHsgJFBhcmFte1RlbXBsYXRlSUR9IH07CgogICAgIyBkZWxldGUgdGVtcGxhdGVzCiAgICByZXR1cm4gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyktPkRvKAogICAgICAgIFNRTCAgPT4gIkRFTEVURSBGUk9NIGltZXhwb3J0X29iamVjdCBXSEVSRSB0ZW1wbGF0ZV9pZCBJTiAoICRUZW1wbGF0ZUlEU3RyaW5nICkiLAogICAgICAgIEJpbmQgPT4gXEBCSU5ELAogICAgKTsKfQoKPWhlYWQyIEZvcm1hdExpc3QoKQoKUmV0dXJuIGEgbGlzdCBvZiBhdmFpbGFibGUgZm9ybWF0cyBhcyBoYXNoIHJlZmVyZW5jZQoKICAgIG15ICRGb3JtYXRMaXN0ID0gJEltcG9ydEV4cG9ydE9iamVjdC0+Rm9ybWF0TGlzdCgpOwoKPWN1dAoKc3ViIEZvcm1hdExpc3QgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGdldCBjb25maWcKICAgIG15ICRNb2R1bGVMaXN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKS0+R2V0KCdJbXBvcnRFeHBvcnQ6OkZvcm1hdEJhY2tlbmRSZWdpc3RyYXRpb24nKTsKCiAgICByZXR1cm4gaWYgISRNb2R1bGVMaXN0OwogICAgcmV0dXJuIGlmIHJlZiAkTW9kdWxlTGlzdCBuZSAnSEFTSCc7CgogICAgIyBjcmVhdGUgdGhlIGZvcm1hdCBsaXN0CiAgICBteSAkRm9ybWF0TGlzdCA9IHt9OwogICAgZm9yIG15ICRNb2R1bGUgKCBzb3J0IGtleXMgJXskTW9kdWxlTGlzdH0gKSB7CiAgICAgICAgJEZvcm1hdExpc3QtPnskTW9kdWxlfSA9ICRNb2R1bGVMaXN0LT57JE1vZHVsZX0tPntOYW1lfTsKICAgIH0KCiAgICByZXR1cm4gJEZvcm1hdExpc3Q7Cn0KCj1oZWFkMiBGb3JtYXRBdHRyaWJ1dGVzR2V0KCkKCkdldCB0aGUgYXR0cmlidXRlcyBvZiBhIGZvcm1hdCBiYWNrZW5kIGFzIGFycmF5L2hhc2ggcmVmZXJlbmNlCgogICAgbXkgJEF0dHJpYnV0ZXMgPSAkSW1wb3J0RXhwb3J0T2JqZWN0LT5Gb3JtYXRBdHRyaWJ1dGVzR2V0KAogICAgICAgIFRlbXBsYXRlSUQgPT4gMTIzLAogICAgICAgIFVzZXJJRCAgICAgPT4gMSwKICAgICk7Cgo9Y3V0CgpzdWIgRm9ybWF0QXR0cmlidXRlc0dldCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgZ2V0IGxvZyBvYmplY3QKICAgIG15ICRMb2dPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyk7CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KFRlbXBsYXRlSUQgVXNlcklEKSkgewogICAgICAgIGlmICggISRQYXJhbXskQXJndW1lbnR9ICkgewogICAgICAgICAgICAkTG9nT2JqZWN0LT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBnZXQgdGVtcGxhdGUgZGF0YQogICAgbXkgJFRlbXBsYXRlRGF0YSA9ICRTZWxmLT5UZW1wbGF0ZUdldCgKICAgICAgICBUZW1wbGF0ZUlEID0+ICRQYXJhbXtUZW1wbGF0ZUlEfSwKICAgICAgICBVc2VySUQgICAgID0+ICRQYXJhbXtVc2VySUR9LAogICAgKTsKCiAgICAjIGNoZWNrIHRlbXBsYXRlIGRhdGEKICAgIGlmICggISRUZW1wbGF0ZURhdGEgfHwgISRUZW1wbGF0ZURhdGEtPntGb3JtYXR9ICkgewogICAgICAgICRMb2dPYmplY3QtPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gIlRlbXBsYXRlIHdpdGggSUQgJFBhcmFte1RlbXBsYXRlSUR9IGlzIGluY29tcGxldGUhIiwKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIGxvYWQgYmFja2VuZAogICAgbXkgJEJhY2tlbmQgPSAkS2VybmVsOjpPTS0+R2V0KAogICAgICAgICdLZXJuZWw6OlN5c3RlbTo6SW1wb3J0RXhwb3J0OjpGb3JtYXRCYWNrZW5kOjonIC4gJFRlbXBsYXRlRGF0YS0+e0Zvcm1hdH0KICAgICk7CgogICAgcmV0dXJuIGlmICEkQmFja2VuZDsKCiAgICAjIGdldCBhbiBhdHRyaWJ1dGUgbGlzdCBvZiB0aGUgZm9ybWF0CiAgICBteSAkQXR0cmlidXRlcyA9ICRCYWNrZW5kLT5Gb3JtYXRBdHRyaWJ1dGVzR2V0KAogICAgICAgIFVzZXJJRCA9PiAkUGFyYW17VXNlcklEfSwKICAgICk7CgogICAgcmV0dXJuICRBdHRyaWJ1dGVzOwp9Cgo9aGVhZDIgRm9ybWF0RGF0YUdldCgpCgpHZXQgdGhlIGZvcm1hdCBkYXRhIGZyb20gYSB0ZW1wbGF0ZQoKICAgIG15ICRGb3JtYXREYXRhUmVmID0gJEltcG9ydEV4cG9ydE9iamVjdC0+Rm9ybWF0RGF0YUdldCgKICAgICAgICBUZW1wbGF0ZUlEID0+IDMsCiAgICAgICAgVXNlcklEICAgICA9PiAxLAogICAgKTsKCj1jdXQKCnN1YiBGb3JtYXREYXRhR2V0IHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KFRlbXBsYXRlSUQgVXNlcklEKSkgewogICAgICAgIGlmICggISRQYXJhbXskQXJndW1lbnR9ICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkQXJndW1lbnQhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICAjIGdldCBEQiBvYmplY3QKICAgIG15ICREQk9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpOwoKICAgICMgYXNrIGRhdGFiYXNlCiAgICAkREJPYmplY3QtPlByZXBhcmUoCiAgICAgICAgU1FMICA9PiAnU0VMRUNUIGRhdGFfa2V5LCBkYXRhX3ZhbHVlIEZST00gaW1leHBvcnRfZm9ybWF0IFdIRVJFIHRlbXBsYXRlX2lkID0gPycsCiAgICAgICAgQmluZCA9PiBbIFwkUGFyYW17VGVtcGxhdGVJRH0gXSwKICAgICk7CgogICAgIyBmZXRjaCB0aGUgcmVzdWx0CiAgICBteSAlRm9ybWF0RGF0YTsKICAgIHdoaWxlICggbXkgQFJvdyA9ICREQk9iamVjdC0+RmV0Y2hyb3dBcnJheSgpICkgewogICAgICAgICRGb3JtYXREYXRheyAkUm93WzBdIH0gPSAkUm93WzFdOwogICAgfQoKICAgIHJldHVybiBcJUZvcm1hdERhdGE7Cn0KCj1oZWFkMiBGb3JtYXREYXRhU2F2ZSgpCgpTYXZlIHRoZSBmb3JtYXQgZGF0YSBvZiBhIHRlbXBsYXRlCgogICAgbXkgJFRydWUgPSAkSW1wb3J0RXhwb3J0T2JqZWN0LT5Gb3JtYXREYXRhU2F2ZSgKICAgICAgICBUZW1wbGF0ZUlEID0+IDEyMywKICAgICAgICBGb3JtYXREYXRhID0+ICRIYXNoUmVmLAogICAgICAgIFVzZXJJRCAgICAgPT4gMSwKICAgICk7Cgo9Y3V0CgpzdWIgRm9ybWF0RGF0YVNhdmUgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGdldCBsb2cgb2JqZWN0CiAgICBteSAkTG9nT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhUZW1wbGF0ZUlEIEZvcm1hdERhdGEgVXNlcklEKSkgewogICAgICAgIGlmICggISRQYXJhbXskQXJndW1lbnR9ICkgewogICAgICAgICAgICAkTG9nT2JqZWN0LT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgaWYgKCByZWYgJFBhcmFte0Zvcm1hdERhdGF9IG5lICdIQVNIJyApIHsKICAgICAgICAkTG9nT2JqZWN0LT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICdGb3JtYXREYXRhIG11c3QgYmUgYSBoYXNoIHJlZmVyZW5jZSEnLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgZGVsZXRlIGV4aXN0aW5nIGZvcm1hdCBkYXRhCiAgICAkU2VsZi0+Rm9ybWF0RGF0YURlbGV0ZSgKICAgICAgICBUZW1wbGF0ZUlEID0+ICRQYXJhbXtUZW1wbGF0ZUlEfSwKICAgICAgICBVc2VySUQgICAgID0+ICRQYXJhbXtVc2VySUR9LAogICAgKTsKCiAgICBEQVRBS0VZOgogICAgZm9yIG15ICREYXRhS2V5ICggc29ydCBrZXlzICV7ICRQYXJhbXtGb3JtYXREYXRhfSB9ICkgewoKICAgICAgICBteSAkRGF0YVZhbHVlID0gJFBhcmFte0Zvcm1hdERhdGF9LT57JERhdGFLZXl9OwoKICAgICAgICBuZXh0IERBVEFLRVkgaWYgIWRlZmluZWQgJERhdGFLZXk7CiAgICAgICAgbmV4dCBEQVRBS0VZIGlmICFkZWZpbmVkICREYXRhVmFsdWU7CgogICAgICAgICMgaW5zZXJ0IG9uZSByb3cKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKS0+RG8oCiAgICAgICAgICAgIFNRTCA9PiAnSU5TRVJUIElOVE8gaW1leHBvcnRfZm9ybWF0ICcKICAgICAgICAgICAgICAgIC4gJyh0ZW1wbGF0ZV9pZCwgZGF0YV9rZXksIGRhdGFfdmFsdWUpIFZBTFVFUyAoPywgPywgPyknLAogICAgICAgICAgICBCaW5kID0+IFsgXCRQYXJhbXtUZW1wbGF0ZUlEfSwgXCREYXRhS2V5LCBcJERhdGFWYWx1ZSBdLAogICAgICAgICk7CiAgICB9CgogICAgcmV0dXJuIDE7Cn0KCj1oZWFkMiBGb3JtYXREYXRhRGVsZXRlKCkKCkRlbGV0ZSB0aGUgZXhpc3RpbmcgZm9ybWF0IGRhdGEgb2YgYSB0ZW1wbGF0ZQoKICAgIG15ICRUcnVlID0gJEltcG9ydEV4cG9ydE9iamVjdC0+Rm9ybWF0RGF0YURlbGV0ZSgKICAgICAgICBUZW1wbGF0ZUlEID0+IDEyMywKICAgICAgICBVc2VySUQgICAgID0+IDEsCiAgICApOwoKICAgIG9yCgogICAgbXkgJFRydWUgPSAkSW1wb3J0RXhwb3J0T2JqZWN0LT5Gb3JtYXREYXRhRGVsZXRlKAogICAgICAgIFRlbXBsYXRlSUQgPT4gWzEsNDQsMTY2LDVdLAogICAgICAgIFVzZXJJRCAgICAgPT4gMSwKICAgICk7Cgo9Y3V0CgpzdWIgRm9ybWF0RGF0YURlbGV0ZSB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgZ2V0IGxvZyBvYmplY3QKICAgIG15ICRMb2dPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyk7CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KFRlbXBsYXRlSUQgVXNlcklEKSkgewogICAgICAgIGlmICggISRQYXJhbXskQXJndW1lbnR9ICkgewogICAgICAgICAgICAkTG9nT2JqZWN0LT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgaWYgKCAhcmVmICRQYXJhbXtUZW1wbGF0ZUlEfSApIHsKICAgICAgICAkUGFyYW17VGVtcGxhdGVJRH0gPSBbICRQYXJhbXtUZW1wbGF0ZUlEfSBdOwogICAgfQogICAgZWxzaWYgKCByZWYgJFBhcmFte1RlbXBsYXRlSUR9IG5lICdBUlJBWScgKSB7CiAgICAgICAgJExvZ09iamVjdC0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAnVGVtcGxhdGVJRCBtdXN0IGJlIGFuIGFycmF5IHJlZmVyZW5jZSBvciBhIHN0cmluZyEnLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgY3JlYXRlIHRoZSB0ZW1wbGF0ZSBpZCBzdHJpbmcKICAgIG15ICRUZW1wbGF0ZUlEU3RyaW5nID0gam9pbiBxeywgfSwgbWFwIHsnPyd9IEB7ICRQYXJhbXtUZW1wbGF0ZUlEfSB9OwoKICAgICMgY3JlYXRlIGFuZCBhZGQgYmluZCBwYXJhbWV0ZXJzCiAgICBteSBAQklORCA9IG1hcCB7IFwkXyB9IEB7ICRQYXJhbXtUZW1wbGF0ZUlEfSB9OwoKICAgICMgZGVsZXRlIHRlbXBsYXRlcwogICAgcmV0dXJuICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpLT5EbygKICAgICAgICBTUUwgID0+ICJERUxFVEUgRlJPTSBpbWV4cG9ydF9mb3JtYXQgV0hFUkUgdGVtcGxhdGVfaWQgSU4gKCAkVGVtcGxhdGVJRFN0cmluZyApIiwKICAgICAgICBCaW5kID0+IFxAQklORCwKICAgICk7Cn0KCj1oZWFkMiBNYXBwaW5nTGlzdCgpCgpSZXR1cm4gYSBsaXN0IG9mIG1hcHBpbmcgZGF0YSBpZHMgc29ydGVkIGJ5IHBvc2l0aW9uIGFzIGFycmF5IHJlZmVyZW5jZQoKICAgIG15ICRNYXBwaW5nTGlzdCA9ICRJbXBvcnRFeHBvcnRPYmplY3QtPk1hcHBpbmdMaXN0KAogICAgICAgIFRlbXBsYXRlSUQgPT4gMTIzLAogICAgICAgIFVzZXJJRCAgICAgPT4gMSwKICAgICk7Cgo9Y3V0CgpzdWIgTWFwcGluZ0xpc3QgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICRBcmd1bWVudCAocXcoVGVtcGxhdGVJRCBVc2VySUQpKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyRBcmd1bWVudH0gKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICRBcmd1bWVudCEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgZ2V0IERCIG9iamVjdAogICAgbXkgJERCT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyk7CgogICAgIyBhc2sgZGF0YWJhc2UKICAgICREQk9iamVjdC0+UHJlcGFyZSgKICAgICAgICBTUUwgID0+ICdTRUxFQ1QgaWQgRlJPTSBpbWV4cG9ydF9tYXBwaW5nIFdIRVJFIHRlbXBsYXRlX2lkID0gPyBPUkRFUiBCWSBwb3NpdGlvbicsCiAgICAgICAgQmluZCA9PiBbIFwkUGFyYW17VGVtcGxhdGVJRH0gXSwKICAgICk7CgogICAgIyBmZXRjaCB0aGUgcmVzdWx0CiAgICBteSBATWFwcGluZ0xpc3Q7CiAgICB3aGlsZSAoIG15IEBSb3cgPSAkREJPYmplY3QtPkZldGNocm93QXJyYXkoKSApIHsKICAgICAgICBwdXNoIEBNYXBwaW5nTGlzdCwgJFJvd1swXTsKICAgIH0KCiAgICByZXR1cm4gXEBNYXBwaW5nTGlzdDsKfQoKPWhlYWQyIE1hcHBpbmdBZGQoKQoKQWRkIGEgbmV3IG1hcHBpbmcgZGF0YSByb3cKCiAgICBteSAkTWFwcGluZ0lEID0gJEltcG9ydEV4cG9ydE9iamVjdC0+TWFwcGluZ0FkZCgKICAgICAgICBUZW1wbGF0ZUlEID0+IDEyMywKICAgICAgICBVc2VySUQgICAgID0+IDEsCiAgICApOwoKPWN1dAoKc3ViIE1hcHBpbmdBZGQgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICRBcmd1bWVudCAocXcoVGVtcGxhdGVJRCBVc2VySUQpKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyRBcmd1bWVudH0gKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICRBcmd1bWVudCEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgZ2V0IERCIG9iamVjdAogICAgbXkgJERCT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyk7CgogICAgIyBmaW5kIG1heGltdW0gcG9zaXRpb24KICAgICREQk9iamVjdC0+UHJlcGFyZSgKICAgICAgICBTUUwgICA9PiAnU0VMRUNUIG1heChwb3NpdGlvbikgRlJPTSBpbWV4cG9ydF9tYXBwaW5nIFdIRVJFIHRlbXBsYXRlX2lkID0gPycsCiAgICAgICAgQmluZCAgPT4gWyBcJFBhcmFte1RlbXBsYXRlSUR9IF0sCiAgICAgICAgTGltaXQgPT4gMSwKICAgICk7CgogICAgIyBmZXRjaCB0aGUgcmVzdWx0CiAgICBteSAkTmV3UG9zaXRpb24gPSAwOwogICAgd2hpbGUgKCBteSBAUm93ID0gJERCT2JqZWN0LT5GZXRjaHJvd0FycmF5KCkgKSB7CgogICAgICAgIGlmICggZGVmaW5lZCAkUm93WzBdICkgewogICAgICAgICAgICAkTmV3UG9zaXRpb24gPSAkUm93WzBdOwogICAgICAgICAgICAkTmV3UG9zaXRpb24rKzsKICAgICAgICB9CiAgICB9CgogICAgIyBpbnNlcnQgYSBuZXcgbWFwcGluZyBkYXRhIHJvdwogICAgcmV0dXJuIGlmICEkREJPYmplY3QtPkRvKAogICAgICAgIFNRTCAgPT4gJ0lOU0VSVCBJTlRPIGltZXhwb3J0X21hcHBpbmcgKHRlbXBsYXRlX2lkLCBwb3NpdGlvbikgVkFMVUVTICg/LCA/KScsCiAgICAgICAgQmluZCA9PiBbIFwkUGFyYW17VGVtcGxhdGVJRH0sIFwkTmV3UG9zaXRpb24gXSwKICAgICk7CgogICAgIyBmaW5kIGlkIG9mIG5ldyBtYXBwaW5nIGRhdGEgcm93CiAgICAkREJPYmplY3QtPlByZXBhcmUoCiAgICAgICAgU1FMICAgPT4gJ1NFTEVDVCBpZCBGUk9NIGltZXhwb3J0X21hcHBpbmcgV0hFUkUgdGVtcGxhdGVfaWQgPSA/IEFORCBwb3NpdGlvbiA9ID8nLAogICAgICAgIEJpbmQgID0+IFsgXCRQYXJhbXtUZW1wbGF0ZUlEfSwgXCROZXdQb3NpdGlvbiBdLAogICAgICAgIExpbWl0ID0+IDEsCiAgICApOwoKICAgICMgZmV0Y2ggdGhlIHJlc3VsdAogICAgbXkgJE1hcHBpbmdJRDsKICAgIHdoaWxlICggbXkgQFJvdyA9ICREQk9iamVjdC0+RmV0Y2hyb3dBcnJheSgpICkgewogICAgICAgICRNYXBwaW5nSUQgPSAkUm93WzBdOwogICAgfQoKICAgIHJldHVybiAkTWFwcGluZ0lEOwp9Cgo9aGVhZDIgTWFwcGluZ0RlbGV0ZSgpCgpEZWxldGUgZXhpc3RpbmcgbWFwcGluZyBkYXRhIHJvd3MKCiAgICBteSAkVHJ1ZSA9ICRJbXBvcnRFeHBvcnRPYmplY3QtPk1hcHBpbmdEZWxldGUoCiAgICAgICAgTWFwcGluZ0lEICA9PiAxMjMsCiAgICAgICAgVGVtcGxhdGVJRCA9PiAzMjEsCiAgICAgICAgVXNlcklEICAgICA9PiAxLAogICAgKTsKCiAgICBvcgoKICAgIG15ICRUcnVlID0gJEltcG9ydEV4cG9ydE9iamVjdC0+TWFwcGluZ0RlbGV0ZSgKICAgICAgICBUZW1wbGF0ZUlEID0+IDMyMSwKICAgICAgICBVc2VySUQgICAgID0+IDEsCiAgICApOwoKPWN1dAoKc3ViIE1hcHBpbmdEZWxldGUgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICRBcmd1bWVudCAocXcoVGVtcGxhdGVJRCBVc2VySUQpKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyRBcmd1bWVudH0gKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICRBcmd1bWVudCEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgZ2V0IERCIG9iamVjdAogICAgbXkgJERCT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyk7CgogICAgaWYgKCBkZWZpbmVkICRQYXJhbXtNYXBwaW5nSUR9ICkgewoKICAgICAgICAjIGRlbGV0ZSBleGlzdGluZyBvYmplY3QgbWFwcGluZyBkYXRhCiAgICAgICAgJFNlbGYtPk1hcHBpbmdPYmplY3REYXRhRGVsZXRlKAogICAgICAgICAgICBNYXBwaW5nSUQgPT4gJFBhcmFte01hcHBpbmdJRH0sCiAgICAgICAgICAgIFVzZXJJRCAgICA9PiAkUGFyYW17VXNlcklEfSwKICAgICAgICApOwoKICAgICAgICAjIGRlbGV0ZSBleGlzdGluZyBmb3JtYXQgbWFwcGluZyBkYXRhCiAgICAgICAgJFNlbGYtPk1hcHBpbmdGb3JtYXREYXRhRGVsZXRlKAogICAgICAgICAgICBNYXBwaW5nSUQgPT4gJFBhcmFte01hcHBpbmdJRH0sCiAgICAgICAgICAgIFVzZXJJRCAgICA9PiAkUGFyYW17VXNlcklEfSwKICAgICAgICApOwoKICAgICAgICAjIGRlbGV0ZSBvbmUgbWFwcGluZyByb3cKICAgICAgICAkREJPYmplY3QtPkRvKAogICAgICAgICAgICBTUUwgID0+ICdERUxFVEUgRlJPTSBpbWV4cG9ydF9tYXBwaW5nIFdIRVJFIGlkID0gPycsCiAgICAgICAgICAgIEJpbmQgPT4gWyBcJFBhcmFte01hcHBpbmdJRH0gXSwKICAgICAgICApOwoKICAgICAgICAjIHJlYnVpbGQgbWFwcGluZyBwb3NpdGlvbnMKICAgICAgICAkU2VsZi0+TWFwcGluZ1Bvc2l0aW9uUmVidWlsZCgKICAgICAgICAgICAgVGVtcGxhdGVJRCA9PiAkUGFyYW17VGVtcGxhdGVJRH0sCiAgICAgICAgICAgIFVzZXJJRCAgICAgPT4gJFBhcmFte1VzZXJJRH0sCiAgICAgICAgKTsKCiAgICAgICAgcmV0dXJuIDE7CiAgICB9CiAgICBlbHNlIHsKCiAgICAgICAgIyBnZXQgbWFwcGluZyBsaXN0CiAgICAgICAgbXkgJE1hcHBpbmdMaXN0ID0gJFNlbGYtPk1hcHBpbmdMaXN0KAogICAgICAgICAgICBUZW1wbGF0ZUlEID0+ICRQYXJhbXtUZW1wbGF0ZUlEfSwKICAgICAgICAgICAgVXNlcklEICAgICA9PiAkUGFyYW17VXNlcklEfSwKICAgICAgICApOwoKICAgICAgICBmb3IgbXkgJE1hcHBpbmdJRCAoIEB7JE1hcHBpbmdMaXN0fSApIHsKCiAgICAgICAgICAgICMgZGVsZXRlIGV4aXN0aW5nIG9iamVjdCBtYXBwaW5nIGRhdGEKICAgICAgICAgICAgJFNlbGYtPk1hcHBpbmdPYmplY3REYXRhRGVsZXRlKAogICAgICAgICAgICAgICAgTWFwcGluZ0lEID0+ICRNYXBwaW5nSUQsCiAgICAgICAgICAgICAgICBVc2VySUQgICAgPT4gJFBhcmFte1VzZXJJRH0sCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAjIGRlbGV0ZSBleGlzdGluZyBmb3JtYXQgbWFwcGluZyBkYXRhCiAgICAgICAgICAgICRTZWxmLT5NYXBwaW5nRm9ybWF0RGF0YURlbGV0ZSgKICAgICAgICAgICAgICAgIE1hcHBpbmdJRCA9PiAkTWFwcGluZ0lELAogICAgICAgICAgICAgICAgVXNlcklEICAgID0+ICRQYXJhbXtVc2VySUR9LAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgIyBkZWxldGUgYWxsIG1hcHBpbmcgcm93cyBvZiB0aGlzIHRlbXBsYXRlCiAgICAgICAgcmV0dXJuICREQk9iamVjdC0+RG8oCiAgICAgICAgICAgIFNRTCAgPT4gJ0RFTEVURSBGUk9NIGltZXhwb3J0X21hcHBpbmcgV0hFUkUgdGVtcGxhdGVfaWQgPSA/JywKICAgICAgICAgICAgQmluZCA9PiBbIFwkUGFyYW17VGVtcGxhdGVJRH0gXSwKICAgICAgICApOwogICAgfQp9Cgo9aGVhZDIgTWFwcGluZ1VwKCkKCk1vdmUgYW4gbWFwcGluZyBkYXRhIHJvdyB1cAoKICAgIG15ICRUcnVlID0gJEltcG9ydEV4cG9ydE9iamVjdC0+TWFwcGluZ1VwKAogICAgICAgIE1hcHBpbmdJRCAgPT4gMTIzLAogICAgICAgIFRlbXBsYXRlSUQgPT4gMzIxLAogICAgICAgIFVzZXJJRCAgICAgPT4gMSwKICAgICk7Cgo9Y3V0CgpzdWIgTWFwcGluZ1VwIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KE1hcHBpbmdJRCBUZW1wbGF0ZUlEIFVzZXJJRCkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBnZXQgbWFwcGluZyBkYXRhIGxpc3QKICAgIG15ICRNYXBwaW5nTGlzdCA9ICRTZWxmLT5NYXBwaW5nTGlzdCgKICAgICAgICBUZW1wbGF0ZUlEID0+ICRQYXJhbXtUZW1wbGF0ZUlEfSwKICAgICAgICBVc2VySUQgICAgID0+ICRQYXJhbXtVc2VySUR9LAogICAgKTsKCiAgICByZXR1cm4gMSBpZiAkUGFyYW17TWFwcGluZ0lEfSA9PSAkTWFwcGluZ0xpc3QtPlswXTsKCiAgICAjIGdldCBEQiBvYmplY3QKICAgIG15ICREQk9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpOwoKICAgICMgYXNrIGRhdGFiYXNlCiAgICAkREJPYmplY3QtPlByZXBhcmUoCiAgICAgICAgU1FMICA9PiAnU0VMRUNUIHBvc2l0aW9uIEZST00gaW1leHBvcnRfbWFwcGluZyBXSEVSRSBpZCA9ID8nLAogICAgICAgIEJpbmQgPT4gWyBcJFBhcmFte01hcHBpbmdJRH0gXSwKICAgICk7CgogICAgIyBmZXRjaCB0aGUgcmVzdWx0CiAgICBteSAkUG9zaXRpb247CiAgICB3aGlsZSAoIG15IEBSb3cgPSAkREJPYmplY3QtPkZldGNocm93QXJyYXkoKSApIHsKICAgICAgICAkUG9zaXRpb24gPSAkUm93WzBdOwogICAgfQoKICAgIHJldHVybiAxIGlmICEkUG9zaXRpb247CgogICAgbXkgJFBvc2l0aW9uVXBwZXIgPSAkUG9zaXRpb24gLSAxOwoKICAgICMgdXBkYXRlIHBvc2l0aW9ucwogICAgJERCT2JqZWN0LT5EbygKICAgICAgICBTUUwgID0+ICdVUERBVEUgaW1leHBvcnRfbWFwcGluZyBTRVQgcG9zaXRpb24gPSA/IFdIRVJFIHRlbXBsYXRlX2lkID0gPyBBTkQgcG9zaXRpb24gPSA/JywKICAgICAgICBCaW5kID0+IFsgXCRQb3NpdGlvbiwgXCRQYXJhbXtUZW1wbGF0ZUlEfSwgXCRQb3NpdGlvblVwcGVyIF0sCiAgICApOwogICAgJERCT2JqZWN0LT5EbygKICAgICAgICBTUUwgID0+ICdVUERBVEUgaW1leHBvcnRfbWFwcGluZyBTRVQgcG9zaXRpb24gPSA/IFdIRVJFIGlkID0gPycsCiAgICAgICAgQmluZCA9PiBbIFwkUG9zaXRpb25VcHBlciwgXCRQYXJhbXtNYXBwaW5nSUR9IF0sCiAgICApOwoKICAgIHJldHVybiAxOwp9Cgo9aGVhZDIgTWFwcGluZ0Rvd24oKQoKTW92ZSBhbiBtYXBwaW5nIGRhdGEgcm93IGRvd24KCiAgICBteSAkVHJ1ZSA9ICRJbXBvcnRFeHBvcnRPYmplY3QtPk1hcHBpbmdEb3duKAogICAgICAgIE1hcHBpbmdJRCAgPT4gMTIzLAogICAgICAgIFRlbXBsYXRlSUQgPT4gMzIxLAogICAgICAgIFVzZXJJRCAgICAgPT4gMSwKICAgICk7Cgo9Y3V0CgpzdWIgTWFwcGluZ0Rvd24gewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICRBcmd1bWVudCAocXcoTWFwcGluZ0lEIFRlbXBsYXRlSUQgVXNlcklEKSkgewogICAgICAgIGlmICggISRQYXJhbXskQXJndW1lbnR9ICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkQXJndW1lbnQhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICAjIGdldCBtYXBwaW5nIGRhdGEgbGlzdAogICAgbXkgJE1hcHBpbmdMaXN0ID0gJFNlbGYtPk1hcHBpbmdMaXN0KAogICAgICAgIFRlbXBsYXRlSUQgPT4gJFBhcmFte1RlbXBsYXRlSUR9LAogICAgICAgIFVzZXJJRCAgICAgPT4gJFBhcmFte1VzZXJJRH0sCiAgICApOwoKICAgIHJldHVybiAxIGlmICRQYXJhbXtNYXBwaW5nSUR9ID09ICRNYXBwaW5nTGlzdC0+Wy0xXTsKCiAgICAjIGdldCBEQiBvYmplY3QKICAgIG15ICREQk9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpOwoKICAgICMgYXNrIGRhdGFiYXNlCiAgICAkREJPYmplY3QtPlByZXBhcmUoCiAgICAgICAgU1FMICA9PiAnU0VMRUNUIHBvc2l0aW9uIEZST00gaW1leHBvcnRfbWFwcGluZyBXSEVSRSBpZCA9ID8nLAogICAgICAgIEJpbmQgPT4gWyBcJFBhcmFte01hcHBpbmdJRH0gXSwKICAgICk7CgogICAgIyBmZXRjaCB0aGUgcmVzdWx0CiAgICBteSAkUG9zaXRpb247CiAgICB3aGlsZSAoIG15IEBSb3cgPSAkREJPYmplY3QtPkZldGNocm93QXJyYXkoKSApIHsKICAgICAgICAkUG9zaXRpb24gPSAkUm93WzBdOwogICAgfQoKICAgIG15ICRQb3NpdGlvbkRvd24gPSAkUG9zaXRpb24gKyAxOwoKICAgICMgdXBkYXRlIHBvc2l0aW9ucwogICAgJERCT2JqZWN0LT5EbygKICAgICAgICBTUUwgID0+ICdVUERBVEUgaW1leHBvcnRfbWFwcGluZyBTRVQgcG9zaXRpb24gPSA/IFdIRVJFIHRlbXBsYXRlX2lkID0gPyBBTkQgcG9zaXRpb24gPSA/JywKICAgICAgICBCaW5kID0+IFsgXCRQb3NpdGlvbiwgXCRQYXJhbXtUZW1wbGF0ZUlEfSwgXCRQb3NpdGlvbkRvd24gXSwKICAgICk7CiAgICAkREJPYmplY3QtPkRvKAogICAgICAgIFNRTCAgPT4gJ1VQREFURSBpbWV4cG9ydF9tYXBwaW5nIFNFVCBwb3NpdGlvbiA9ID8gV0hFUkUgaWQgPSA/JywKICAgICAgICBCaW5kID0+IFsgXCRQb3NpdGlvbkRvd24sIFwkUGFyYW17TWFwcGluZ0lEfSBdLAogICAgKTsKCiAgICByZXR1cm4gMTsKfQoKPWhlYWQyIE1hcHBpbmdQb3NpdGlvblJlYnVpbGQoKQoKUmVidWlsZCB0aGUgcG9zaXRpb25zIG9mIGEgbWFwcGluZyBsaXN0CgogICAgbXkgJFRydWUgPSAkSW1wb3J0RXhwb3J0T2JqZWN0LT5NYXBwaW5nUG9zaXRpb25SZWJ1aWxkKAogICAgICAgIFRlbXBsYXRlSUQgPT4gMTIzLAogICAgICAgIFVzZXJJRCAgICAgPT4gMSwKICAgICk7Cgo9Y3V0CgpzdWIgTWFwcGluZ1Bvc2l0aW9uUmVidWlsZCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhUZW1wbGF0ZUlEIFVzZXJJRCkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBnZXQgbWFwcGluZyBkYXRhIGxpc3QKICAgIG15ICRNYXBwaW5nTGlzdCA9ICRTZWxmLT5NYXBwaW5nTGlzdCgKICAgICAgICBUZW1wbGF0ZUlEID0+ICRQYXJhbXtUZW1wbGF0ZUlEfSwKICAgICAgICBVc2VySUQgICAgID0+ICRQYXJhbXtVc2VySUR9LAogICAgKTsKCiAgICAjIHVwZGF0ZSBwb3NpdGlvbgogICAgbXkgJENvdW50ZXIgPSAwOwogICAgZm9yIG15ICRNYXBwaW5nSUQgKCBAeyRNYXBwaW5nTGlzdH0gKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyktPkRvKAogICAgICAgICAgICBTUUwgID0+ICdVUERBVEUgaW1leHBvcnRfbWFwcGluZyBTRVQgcG9zaXRpb24gPSA/IFdIRVJFIGlkID0gPycsCiAgICAgICAgICAgIEJpbmQgPT4gWyBcJENvdW50ZXIsIFwkTWFwcGluZ0lEIF0sCiAgICAgICAgKTsKICAgICAgICAkQ291bnRlcisrOwogICAgfQoKICAgIHJldHVybiAxOwp9Cgo9aGVhZDIgTWFwcGluZ09iamVjdEF0dHJpYnV0ZXNHZXQoKQoKR2V0IHRoZSBhdHRyaWJ1dGVzIG9mIGFuIG9iamVjdCBiYWNrZW5kIGFzIGFycmF5L2hhc2ggcmVmZXJlbmNlCgogICAgbXkgJEF0dHJpYnV0ZXMgPSAkSW1wb3J0RXhwb3J0T2JqZWN0LT5NYXBwaW5nT2JqZWN0QXR0cmlidXRlc0dldCgKICAgICAgICBUZW1wbGF0ZUlEID0+IDEyMywKICAgICAgICBVc2VySUQgICAgID0+IDEsCiAgICApOwoKPWN1dAoKc3ViIE1hcHBpbmdPYmplY3RBdHRyaWJ1dGVzR2V0IHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBnZXQgbG9nIG9iamVjdAogICAgbXkgJExvZ09iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKTsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICRBcmd1bWVudCAocXcoVGVtcGxhdGVJRCBVc2VySUQpKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyRBcmd1bWVudH0gKSB7CiAgICAgICAgICAgICRMb2dPYmplY3QtPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkQXJndW1lbnQhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICAjIGdldCB0ZW1wbGF0ZSBkYXRhCiAgICBteSAkVGVtcGxhdGVEYXRhID0gJFNlbGYtPlRlbXBsYXRlR2V0KAogICAgICAgIFRlbXBsYXRlSUQgPT4gJFBhcmFte1RlbXBsYXRlSUR9LAogICAgICAgIFVzZXJJRCAgICAgPT4gJFBhcmFte1VzZXJJRH0sCiAgICApOwoKICAgICMgY2hlY2sgdGVtcGxhdGUgZGF0YQogICAgaWYgKCAhJFRlbXBsYXRlRGF0YSB8fCAhJFRlbXBsYXRlRGF0YS0+e09iamVjdH0gKSB7CiAgICAgICAgJExvZ09iamVjdC0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAiVGVtcGxhdGUgd2l0aCBJRCAkUGFyYW17VGVtcGxhdGVJRH0gaXMgaW5jb21wbGV0ZSEiLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgbG9hZCBiYWNrZW5kCiAgICBteSAkQmFja2VuZCA9ICRLZXJuZWw6Ok9NLT5HZXQoCiAgICAgICAgJ0tlcm5lbDo6U3lzdGVtOjpJbXBvcnRFeHBvcnQ6Ok9iamVjdEJhY2tlbmQ6OicgLiAkVGVtcGxhdGVEYXRhLT57T2JqZWN0fQogICAgKTsKCiAgICByZXR1cm4gaWYgISRCYWNrZW5kOwoKICAgICMgZ2V0IGFuIGF0dHJpYnV0ZSBsaXN0IG9mIHRoZSBvYmplY3QKICAgIG15ICRBdHRyaWJ1dGVzID0gJEJhY2tlbmQtPk1hcHBpbmdPYmplY3RBdHRyaWJ1dGVzR2V0KAogICAgICAgIFRlbXBsYXRlSUQgPT4gJFBhcmFte1RlbXBsYXRlSUR9LAogICAgICAgIFVzZXJJRCAgICAgPT4gJFBhcmFte1VzZXJJRH0sCiAgICApOwoKICAgIHJldHVybiAkQXR0cmlidXRlczsKfQoKPWhlYWQyIE1hcHBpbmdPYmplY3REYXRhRGVsZXRlKCkKCkRlbGV0ZSB0aGUgZXhpc3Rpbmcgb2JqZWN0IGRhdGEgb2YgYSBtYXBwaW5nCgogICAgbXkgJFRydWUgPSAkSW1wb3J0RXhwb3J0T2JqZWN0LT5NYXBwaW5nT2JqZWN0RGF0YURlbGV0ZSgKICAgICAgICBNYXBwaW5nSUQgPT4gMTIzLAogICAgICAgIFVzZXJJRCAgICA9PiAxLAogICAgKTsKCiAgICBvcgoKICAgIG15ICRUcnVlID0gJEltcG9ydEV4cG9ydE9iamVjdC0+TWFwcGluZ09iamVjdERhdGFEZWxldGUoCiAgICAgICAgTWFwcGluZ0lEID0+IFsxLDQ0LDE2Niw1XSwKICAgICAgICBVc2VySUQgICAgPT4gMSwKICAgICk7Cgo9Y3V0CgpzdWIgTWFwcGluZ09iamVjdERhdGFEZWxldGUgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGdldCBsb2cgb2JqZWN0CiAgICBteSAkTG9nT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhNYXBwaW5nSUQgVXNlcklEKSkgewogICAgICAgIGlmICggISRQYXJhbXskQXJndW1lbnR9ICkgewogICAgICAgICAgICAkTG9nT2JqZWN0LT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgaWYgKCAhcmVmICRQYXJhbXtNYXBwaW5nSUR9ICkgewogICAgICAgICRQYXJhbXtNYXBwaW5nSUR9ID0gWyAkUGFyYW17TWFwcGluZ0lEfSBdOwogICAgfQogICAgZWxzaWYgKCByZWYgJFBhcmFte01hcHBpbmdJRH0gbmUgJ0FSUkFZJyApIHsKICAgICAgICAkTG9nT2JqZWN0LT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICdNYXBwaW5nSUQgbXVzdCBiZSBhbiBhcnJheSByZWZlcmVuY2Ugb3IgYSBzdHJpbmchJywKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIGNyZWF0ZSB0aGUgdGVtcGxhdGUgaWQgc3RyaW5nCiAgICBteSAkTWFwcGluZ0lEU3RyaW5nID0gam9pbiBxeywgfSwgbWFwIHsnPyd9IEB7ICRQYXJhbXtNYXBwaW5nSUR9IH07CgogICAgIyBjcmVhdGUgYW5kIGFkZCBiaW5kIHBhcmFtZXRlcnMKICAgIG15IEBCSU5EID0gbWFwIHsgXCRfIH0gQHsgJFBhcmFte01hcHBpbmdJRH0gfTsKCiAgICAjIGRlbGV0ZSBtYXBwaW5nIG9iamVjdCBkYXRhCiAgICByZXR1cm4gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyktPkRvKAogICAgICAgIFNRTCAgPT4gIkRFTEVURSBGUk9NIGltZXhwb3J0X21hcHBpbmdfb2JqZWN0IFdIRVJFIG1hcHBpbmdfaWQgSU4gKCAkTWFwcGluZ0lEU3RyaW5nICkiLAogICAgICAgIEJpbmQgPT4gXEBCSU5ELAogICAgKTsKfQoKPWhlYWQyIE1hcHBpbmdPYmplY3REYXRhU2F2ZSgpCgpTYXZlIHRoZSBvYmplY3QgZGF0YSBvZiBhIG1hcHBpbmcKCiAgICBteSAkVHJ1ZSA9ICRJbXBvcnRFeHBvcnRPYmplY3QtPk1hcHBpbmdPYmplY3REYXRhU2F2ZSgKICAgICAgICBNYXBwaW5nSUQgICAgICAgICA9PiAxMjMsCiAgICAgICAgTWFwcGluZ09iamVjdERhdGEgPT4gJEhhc2hSZWYsCiAgICAgICAgVXNlcklEICAgICAgICAgICAgPT4gMSwKICAgICk7Cgo9Y3V0CgpzdWIgTWFwcGluZ09iamVjdERhdGFTYXZlIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBnZXQgbG9nIG9iamVjdAogICAgbXkgJExvZ09iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKTsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICRBcmd1bWVudCAocXcoTWFwcGluZ0lEIE1hcHBpbmdPYmplY3REYXRhIFVzZXJJRCkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJExvZ09iamVjdC0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICRBcmd1bWVudCEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgIGlmICggcmVmICRQYXJhbXtNYXBwaW5nT2JqZWN0RGF0YX0gbmUgJ0hBU0gnICkgewogICAgICAgICRMb2dPYmplY3QtPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ01hcHBpbmdPYmplY3REYXRhIG11c3QgYmUgYSBoYXNoIHJlZmVyZW5jZSEnLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgZGVsZXRlIGV4aXN0aW5nIG9iamVjdCBtYXBwaW5nIGRhdGEKICAgICRTZWxmLT5NYXBwaW5nT2JqZWN0RGF0YURlbGV0ZSgKICAgICAgICBNYXBwaW5nSUQgPT4gJFBhcmFte01hcHBpbmdJRH0sCiAgICAgICAgVXNlcklEICAgID0+ICRQYXJhbXtVc2VySUR9LAogICAgKTsKCiAgICBEQVRBS0VZOgogICAgZm9yIG15ICREYXRhS2V5ICggc29ydCBrZXlzICV7ICRQYXJhbXtNYXBwaW5nT2JqZWN0RGF0YX0gfSApIHsKCiAgICAgICAgbXkgJERhdGFWYWx1ZSA9ICRQYXJhbXtNYXBwaW5nT2JqZWN0RGF0YX0tPnskRGF0YUtleX07CgogICAgICAgIG5leHQgREFUQUtFWSBpZiAhZGVmaW5lZCAkRGF0YUtleTsKICAgICAgICBuZXh0IERBVEFLRVkgaWYgIWRlZmluZWQgJERhdGFWYWx1ZTsKCiAgICAgICAgIyBpbnNlcnQgb25lIG1hcHBpbmcgb2JqZWN0IHJvdwogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpLT5EbygKICAgICAgICAgICAgU1FMID0+ICdJTlNFUlQgSU5UTyBpbWV4cG9ydF9tYXBwaW5nX29iamVjdCAnCiAgICAgICAgICAgICAgICAuICcobWFwcGluZ19pZCwgZGF0YV9rZXksIGRhdGFfdmFsdWUpIFZBTFVFUyAoPywgPywgPyknLAogICAgICAgICAgICBCaW5kID0+IFsgXCRQYXJhbXtNYXBwaW5nSUR9LCBcJERhdGFLZXksIFwkRGF0YVZhbHVlIF0sCiAgICAgICAgKTsKICAgIH0KCiAgICByZXR1cm4gMTsKfQoKPWhlYWQyIE1hcHBpbmdPYmplY3REYXRhR2V0KCkKCkdldCB0aGUgb2JqZWN0IGRhdGEgb2YgYSBtYXBwaW5nCgogICAgbXkgJE9iamVjdERhdGFSZWYgPSAkSW1wb3J0RXhwb3J0T2JqZWN0LT5NYXBwaW5nT2JqZWN0RGF0YUdldCgKICAgICAgICBNYXBwaW5nSUQgPT4gMTIzLAogICAgICAgIFVzZXJJRCAgICA9PiAxLAogICAgKTsKCj1jdXQKCnN1YiBNYXBwaW5nT2JqZWN0RGF0YUdldCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhNYXBwaW5nSUQgVXNlcklEKSkgewogICAgICAgIGlmICggISRQYXJhbXskQXJndW1lbnR9ICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkQXJndW1lbnQhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICAjIGdldCBEQiBvYmplY3QKICAgIG15ICREQk9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpOwoKICAgICMgYXNrIGRhdGFiYXNlCiAgICAkREJPYmplY3QtPlByZXBhcmUoCiAgICAgICAgU1FMICA9PiAnU0VMRUNUIGRhdGFfa2V5LCBkYXRhX3ZhbHVlIEZST00gaW1leHBvcnRfbWFwcGluZ19vYmplY3QgV0hFUkUgbWFwcGluZ19pZCA9ID8nLAogICAgICAgIEJpbmQgPT4gWyBcJFBhcmFte01hcHBpbmdJRH0gXSwKICAgICk7CgogICAgIyBmZXRjaCB0aGUgcmVzdWx0CiAgICBteSAlTWFwcGluZ09iamVjdERhdGE7CiAgICB3aGlsZSAoIG15IEBSb3cgPSAkREJPYmplY3QtPkZldGNocm93QXJyYXkoKSApIHsKICAgICAgICAkTWFwcGluZ09iamVjdERhdGF7ICRSb3dbMF0gfSA9ICRSb3dbMV07CiAgICB9CgogICAgcmV0dXJuIFwlTWFwcGluZ09iamVjdERhdGE7Cn0KCj1oZWFkMiBNYXBwaW5nRm9ybWF0QXR0cmlidXRlc0dldCgpCgpHZXQgdGhlIGF0dHJpYnV0ZXMgb2YgYW4gZm9ybWF0IGJhY2tlbmQgYXMgYXJyYXkvaGFzaCByZWZlcmVuY2UKCiAgICBteSAkQXR0cmlidXRlcyA9ICRJbXBvcnRFeHBvcnRPYmplY3QtPk1hcHBpbmdGb3JtYXRBdHRyaWJ1dGVzR2V0KAogICAgICAgIFRlbXBsYXRlSUQgPT4gMTIzLAogICAgICAgIFVzZXJJRCAgICAgPT4gMSwKICAgICk7Cgo9Y3V0CgpzdWIgTWFwcGluZ0Zvcm1hdEF0dHJpYnV0ZXNHZXQgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGdldCBsb2cgb2JqZWN0CiAgICBteSAkTG9nT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhUZW1wbGF0ZUlEIFVzZXJJRCkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJExvZ09iamVjdC0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICRBcmd1bWVudCEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgZ2V0IHRlbXBsYXRlIGRhdGEKICAgIG15ICRUZW1wbGF0ZURhdGEgPSAkU2VsZi0+VGVtcGxhdGVHZXQoCiAgICAgICAgVGVtcGxhdGVJRCA9PiAkUGFyYW17VGVtcGxhdGVJRH0sCiAgICAgICAgVXNlcklEICAgICA9PiAkUGFyYW17VXNlcklEfSwKICAgICk7CgogICAgIyBjaGVjayB0ZW1wbGF0ZSBkYXRhCiAgICBpZiAoICEkVGVtcGxhdGVEYXRhIHx8ICEkVGVtcGxhdGVEYXRhLT57Rm9ybWF0fSApIHsKICAgICAgICAkTG9nT2JqZWN0LT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJUZW1wbGF0ZSB3aXRoIElEICRQYXJhbXtUZW1wbGF0ZUlEfSBpcyBpbmNvbXBsZXRlISIsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBsb2FkIGJhY2tlbmQKICAgIG15ICRCYWNrZW5kID0gJEtlcm5lbDo6T00tPkdldCgKICAgICAgICAnS2VybmVsOjpTeXN0ZW06OkltcG9ydEV4cG9ydDo6Rm9ybWF0QmFja2VuZDo6JyAuICRUZW1wbGF0ZURhdGEtPntGb3JtYXR9CiAgICApOwoKICAgIHJldHVybiBpZiAhJEJhY2tlbmQ7CgogICAgIyBnZXQgYW4gYXR0cmlidXRlIGxpc3Qgb2YgdGhlIGZvcm1hdAogICAgbXkgJEF0dHJpYnV0ZXMgPSAkQmFja2VuZC0+TWFwcGluZ0Zvcm1hdEF0dHJpYnV0ZXNHZXQoCiAgICAgICAgVXNlcklEID0+ICRQYXJhbXtVc2VySUR9LAogICAgKTsKCiAgICByZXR1cm4gJEF0dHJpYnV0ZXM7Cn0KCj1oZWFkMiBNYXBwaW5nRm9ybWF0RGF0YURlbGV0ZSgpCgpEZWxldGUgdGhlIGV4aXN0aW5nIGZvcm1hdCBkYXRhIG9mIGEgbWFwcGluZwoKICAgIG15ICRUcnVlID0gJEltcG9ydEV4cG9ydE9iamVjdC0+TWFwcGluZ0Zvcm1hdERhdGFEZWxldGUoCiAgICAgICAgTWFwcGluZ0lEID0+IDEyMywKICAgICAgICBVc2VySUQgICAgPT4gMSwKICAgICk7CgogICAgb3IKCiAgICBteSAkVHJ1ZSA9ICRJbXBvcnRFeHBvcnRPYmplY3QtPk1hcHBpbmdGb3JtYXREYXRhRGVsZXRlKAogICAgICAgIE1hcHBpbmdJRCA9PiBbMSw0NCwxNjYsNV0sCiAgICAgICAgVXNlcklEICAgID0+IDEsCiAgICApOwoKPWN1dAoKc3ViIE1hcHBpbmdGb3JtYXREYXRhRGVsZXRlIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBnZXQgbG9nIG9iamVjdAogICAgbXkgJExvZ09iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKTsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICRBcmd1bWVudCAocXcoTWFwcGluZ0lEIFVzZXJJRCkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJExvZ09iamVjdC0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICRBcmd1bWVudCEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgIGlmICggIXJlZiAkUGFyYW17TWFwcGluZ0lEfSApIHsKICAgICAgICAkUGFyYW17TWFwcGluZ0lEfSA9IFsgJFBhcmFte01hcHBpbmdJRH0gXTsKICAgIH0KICAgIGVsc2lmICggcmVmICRQYXJhbXtNYXBwaW5nSUR9IG5lICdBUlJBWScgKSB7CiAgICAgICAgJExvZ09iamVjdC0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAnTWFwcGluZ0lEIG11c3QgYmUgYW4gYXJyYXkgcmVmZXJlbmNlIG9yIGEgc3RyaW5nIScsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBjcmVhdGUgdGhlIHRlbXBsYXRlIGlkIHN0cmluZwogICAgbXkgJE1hcHBpbmdJRFN0cmluZyA9IGpvaW4gcXssIH0sIG1hcCB7Jz8nfSBAeyAkUGFyYW17TWFwcGluZ0lEfSB9OwoKICAgICMgY3JlYXRlIGFuZCBhZGQgYmluZCBwYXJhbWV0ZXJzCiAgICBteSBAQklORCA9IG1hcCB7IFwkXyB9IEB7ICRQYXJhbXtNYXBwaW5nSUR9IH07CgogICAgIyBkZWxldGUgbWFwcGluZyBmb3JtYXQgZGF0YQogICAgcmV0dXJuICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpLT5EbygKICAgICAgICBTUUwgID0+ICJERUxFVEUgRlJPTSBpbWV4cG9ydF9tYXBwaW5nX2Zvcm1hdCBXSEVSRSBtYXBwaW5nX2lkIElOICggJE1hcHBpbmdJRFN0cmluZyApIiwKICAgICAgICBCaW5kID0+IFxAQklORCwKICAgICk7Cn0KCj1oZWFkMiBNYXBwaW5nRm9ybWF0RGF0YVNhdmUoKQoKU2F2ZSB0aGUgZm9ybWF0IGRhdGEgb2YgYSBtYXBwaW5nCgogICAgbXkgJFRydWUgPSAkSW1wb3J0RXhwb3J0T2JqZWN0LT5NYXBwaW5nRm9ybWF0RGF0YVNhdmUoCiAgICAgICAgTWFwcGluZ0lEICAgICAgICAgPT4gMTIzLAogICAgICAgIE1hcHBpbmdGb3JtYXREYXRhID0+ICRIYXNoUmVmLAogICAgICAgIFVzZXJJRCAgICAgICAgICAgID0+IDEsCiAgICApOwoKPWN1dAoKc3ViIE1hcHBpbmdGb3JtYXREYXRhU2F2ZSB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgZ2V0IGxvZyBvYmplY3QKICAgIG15ICRMb2dPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyk7CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KE1hcHBpbmdJRCBNYXBwaW5nRm9ybWF0RGF0YSBVc2VySUQpKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyRBcmd1bWVudH0gKSB7CiAgICAgICAgICAgICRMb2dPYmplY3QtPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkQXJndW1lbnQhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICBpZiAoIHJlZiAkUGFyYW17TWFwcGluZ0Zvcm1hdERhdGF9IG5lICdIQVNIJyApIHsKICAgICAgICAkTG9nT2JqZWN0LT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICdNYXBwaW5nRm9ybWF0RGF0YSBtdXN0IGJlIGEgaGFzaCByZWZlcmVuY2UhJywKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIGRlbGV0ZSBleGlzdGluZyBmb3JtYXQgbWFwcGluZyBkYXRhCiAgICAkU2VsZi0+TWFwcGluZ0Zvcm1hdERhdGFEZWxldGUoCiAgICAgICAgTWFwcGluZ0lEID0+ICRQYXJhbXtNYXBwaW5nSUR9LAogICAgICAgIFVzZXJJRCAgICA9PiAkUGFyYW17VXNlcklEfSwKICAgICk7CgogICAgREFUQUtFWToKICAgIGZvciBteSAkRGF0YUtleSAoIHNvcnQga2V5cyAleyAkUGFyYW17TWFwcGluZ0Zvcm1hdERhdGF9IH0gKSB7CgogICAgICAgIG15ICREYXRhVmFsdWUgPSAkUGFyYW17TWFwcGluZ0Zvcm1hdERhdGF9LT57JERhdGFLZXl9OwoKICAgICAgICBuZXh0IERBVEFLRVkgaWYgIWRlZmluZWQgJERhdGFLZXk7CiAgICAgICAgbmV4dCBEQVRBS0VZIGlmICFkZWZpbmVkICREYXRhVmFsdWU7CgogICAgICAgICMgaW5zZXJ0IG9uZSBtYXBwaW5nIGZvcm1hdCByb3cKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKS0+RG8oCiAgICAgICAgICAgIFNRTCA9PiAnSU5TRVJUIElOVE8gaW1leHBvcnRfbWFwcGluZ19mb3JtYXQgJwogICAgICAgICAgICAgICAgLiAnKG1hcHBpbmdfaWQsIGRhdGFfa2V5LCBkYXRhX3ZhbHVlKSBWQUxVRVMgKD8sID8sID8pJywKICAgICAgICAgICAgQmluZCA9PiBbIFwkUGFyYW17TWFwcGluZ0lEfSwgXCREYXRhS2V5LCBcJERhdGFWYWx1ZSBdLAogICAgICAgICk7CiAgICB9CgogICAgcmV0dXJuIDE7Cn0KCj1oZWFkMiBNYXBwaW5nRm9ybWF0RGF0YUdldCgpCgpHZXQgdGhlIGZvcm1hdCBkYXRhIG9mIGEgbWFwcGluZwoKICAgIG15ICRPYmplY3REYXRhUmVmID0gJEltcG9ydEV4cG9ydE9iamVjdC0+TWFwcGluZ0Zvcm1hdERhdGFHZXQoCiAgICAgICAgTWFwcGluZ0lEID0+IDEyMywKICAgICAgICBVc2VySUQgICAgPT4gMSwKICAgICk7Cgo9Y3V0CgpzdWIgTWFwcGluZ0Zvcm1hdERhdGFHZXQgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICRBcmd1bWVudCAocXcoTWFwcGluZ0lEIFVzZXJJRCkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBnZXQgREIgb2JqZWN0CiAgICBteSAkREJPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKTsKCiAgICAjIGFzayBkYXRhYmFzZQogICAgJERCT2JqZWN0LT5QcmVwYXJlKAogICAgICAgIFNRTCAgPT4gJ1NFTEVDVCBkYXRhX2tleSwgZGF0YV92YWx1ZSBGUk9NIGltZXhwb3J0X21hcHBpbmdfZm9ybWF0IFdIRVJFIG1hcHBpbmdfaWQgPSA/JywKICAgICAgICBCaW5kID0+IFsgXCRQYXJhbXtNYXBwaW5nSUR9IF0sCiAgICApOwoKICAgICMgZmV0Y2ggdGhlIHJlc3VsdAogICAgbXkgJU1hcHBpbmdGb3JtYXREYXRhOwogICAgd2hpbGUgKCBteSBAUm93ID0gJERCT2JqZWN0LT5GZXRjaHJvd0FycmF5KCkgKSB7CiAgICAgICAgJE1hcHBpbmdGb3JtYXREYXRheyAkUm93WzBdIH0gPSAkUm93WzFdOwogICAgfQoKICAgIHJldHVybiBcJU1hcHBpbmdGb3JtYXREYXRhOwp9Cgo9aGVhZDIgU2VhcmNoQXR0cmlidXRlc0dldCgpCgpHZXQgdGhlIHNlYXJjaCBhdHRyaWJ1dGVzIG9mIGEgb2JqZWN0IGJhY2tlbmQgYXMgYXJyYXkvaGFzaCByZWZlcmVuY2UKCiAgICBteSAkQXR0cmlidXRlcyA9ICRJbXBvcnRFeHBvcnRPYmplY3QtPlNlYXJjaEF0dHJpYnV0ZXNHZXQoCiAgICAgICAgVGVtcGxhdGVJRCA9PiAxMjMsCiAgICAgICAgVXNlcklEICAgICA9PiAxLAogICAgKTsKCj1jdXQKCnN1YiBTZWFyY2hBdHRyaWJ1dGVzR2V0IHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBnZXQgbG9nIG9iamVjdAogICAgbXkgJExvZ09iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKTsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICRBcmd1bWVudCAocXcoVGVtcGxhdGVJRCBVc2VySUQpKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyRBcmd1bWVudH0gKSB7CiAgICAgICAgICAgICRMb2dPYmplY3QtPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkQXJndW1lbnQhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICAjIGdldCB0ZW1wbGF0ZSBkYXRhCiAgICBteSAkVGVtcGxhdGVEYXRhID0gJFNlbGYtPlRlbXBsYXRlR2V0KAogICAgICAgIFRlbXBsYXRlSUQgPT4gJFBhcmFte1RlbXBsYXRlSUR9LAogICAgICAgIFVzZXJJRCAgICAgPT4gJFBhcmFte1VzZXJJRH0sCiAgICApOwoKICAgICMgY2hlY2sgdGVtcGxhdGUgZGF0YQogICAgaWYgKCAhJFRlbXBsYXRlRGF0YSB8fCAhJFRlbXBsYXRlRGF0YS0+e09iamVjdH0gKSB7CiAgICAgICAgJExvZ09iamVjdC0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAiVGVtcGxhdGUgd2l0aCBJRCAkUGFyYW17VGVtcGxhdGVJRH0gaXMgaW5jb21wbGV0ZSEiLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgbG9hZCBiYWNrZW5kCiAgICBteSAkQmFja2VuZCA9ICRLZXJuZWw6Ok9NLT5HZXQoCiAgICAgICAgJ0tlcm5lbDo6U3lzdGVtOjpJbXBvcnRFeHBvcnQ6Ok9iamVjdEJhY2tlbmQ6OicgLiAkVGVtcGxhdGVEYXRhLT57T2JqZWN0fQogICAgKTsKCiAgICByZXR1cm4gaWYgISRCYWNrZW5kOwoKICAgICMgZ2V0IGFuIHNlYXJjaCBhdHRyaWJ1dGUgbGlzdCBvZiBhbiBvYmplY3QKICAgIG15ICRBdHRyaWJ1dGVzID0gJEJhY2tlbmQtPlNlYXJjaEF0dHJpYnV0ZXNHZXQoCiAgICAgICAgVGVtcGxhdGVJRCA9PiAkUGFyYW17VGVtcGxhdGVJRH0sCiAgICAgICAgVXNlcklEICAgICA9PiAkUGFyYW17VXNlcklEfSwKICAgICk7CgogICAgcmV0dXJuICRBdHRyaWJ1dGVzOwp9Cgo9aGVhZDIgU2VhcmNoRGF0YUdldCgpCgpHZXQgdGhlIHNlYXJjaCBkYXRhIGZyb20gYSB0ZW1wbGF0ZQoKICAgIG15ICRTZWFyY2hEYXRhUmVmID0gJEltcG9ydEV4cG9ydE9iamVjdC0+U2VhcmNoRGF0YUdldCgKICAgICAgICBUZW1wbGF0ZUlEID0+IDMsCiAgICAgICAgVXNlcklEICAgICA9PiAxLAogICAgKTsKCj1jdXQKCnN1YiBTZWFyY2hEYXRhR2V0IHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KFRlbXBsYXRlSUQgVXNlcklEKSkgewogICAgICAgIGlmICggISRQYXJhbXskQXJndW1lbnR9ICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkQXJndW1lbnQhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICAjIGdldCBEQiBvYmplY3QKICAgIG15ICREQk9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpOwoKICAgICMgYXNrIGRhdGFiYXNlCiAgICAkREJPYmplY3QtPlByZXBhcmUoCiAgICAgICAgU1FMICA9PiAnU0VMRUNUIGRhdGFfa2V5LCBkYXRhX3ZhbHVlIEZST00gaW1leHBvcnRfc2VhcmNoIFdIRVJFIHRlbXBsYXRlX2lkID0gPycsCiAgICAgICAgQmluZCA9PiBbIFwkUGFyYW17VGVtcGxhdGVJRH0gXSwKICAgICk7CgogICAgIyBmZXRjaCB0aGUgcmVzdWx0CiAgICBteSAlU2VhcmNoRGF0YTsKICAgIHdoaWxlICggbXkgQFJvdyA9ICREQk9iamVjdC0+RmV0Y2hyb3dBcnJheSgpICkgewogICAgICAgICRTZWFyY2hEYXRheyAkUm93WzBdIH0gPSAkUm93WzFdOwogICAgfQoKICAgIHJldHVybiBcJVNlYXJjaERhdGE7Cn0KCj1oZWFkMiBTZWFyY2hEYXRhU2F2ZSgpCgpTYXZlIHRoZSBzZWFyY2ggZGF0YSBvZiBhIHRlbXBsYXRlCgogICAgbXkgJFRydWUgPSAkSW1wb3J0RXhwb3J0T2JqZWN0LT5TZWFyY2hEYXRhU2F2ZSgKICAgICAgICBUZW1wbGF0ZUlEID0+IDEyMywKICAgICAgICBTZWFyY2hEYXRhID0+ICRIYXNoUmVmLAogICAgICAgIFVzZXJJRCAgICAgPT4gMSwKICAgICk7Cgo9Y3V0CgpzdWIgU2VhcmNoRGF0YVNhdmUgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGdldCBsb2cgb2JqZWN0CiAgICBteSAkTG9nT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhUZW1wbGF0ZUlEIFNlYXJjaERhdGEgVXNlcklEKSkgewogICAgICAgIGlmICggISRQYXJhbXskQXJndW1lbnR9ICkgewogICAgICAgICAgICAkTG9nT2JqZWN0LT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgaWYgKCByZWYgJFBhcmFte1NlYXJjaERhdGF9IG5lICdIQVNIJyApIHsKICAgICAgICAkTG9nT2JqZWN0LT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICdTZWFyY2hEYXRhIG11c3QgYmUgYSBoYXNoIHJlZmVyZW5jZSEnLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgZGVsZXRlIGV4aXN0aW5nIHNlYXJjaCBkYXRhCiAgICAkU2VsZi0+U2VhcmNoRGF0YURlbGV0ZSgKICAgICAgICBUZW1wbGF0ZUlEID0+ICRQYXJhbXtUZW1wbGF0ZUlEfSwKICAgICAgICBVc2VySUQgICAgID0+ICRQYXJhbXtVc2VySUR9LAogICAgKTsKCiAgICBEQVRBS0VZOgogICAgZm9yIG15ICREYXRhS2V5ICggc29ydCBrZXlzICV7ICRQYXJhbXtTZWFyY2hEYXRhfSB9ICkgewoKICAgICAgICAjIHF1b3RlCiAgICAgICAgbXkgJERhdGFWYWx1ZSA9ICRQYXJhbXtTZWFyY2hEYXRhfS0+eyREYXRhS2V5fTsKCiAgICAgICAgbmV4dCBEQVRBS0VZIGlmICEkRGF0YUtleTsKICAgICAgICBuZXh0IERBVEFLRVkgaWYgISREYXRhVmFsdWU7CgogICAgICAgICMgaW5zZXJ0IG9uZSByb3cKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKS0+RG8oCiAgICAgICAgICAgIFNRTCA9PiAnSU5TRVJUIElOVE8gaW1leHBvcnRfc2VhcmNoICcKICAgICAgICAgICAgICAgIC4gJyh0ZW1wbGF0ZV9pZCwgZGF0YV9rZXksIGRhdGFfdmFsdWUpIFZBTFVFUyAoPywgPywgPyknLAogICAgICAgICAgICBCaW5kID0+IFsgXCRQYXJhbXtUZW1wbGF0ZUlEfSwgXCREYXRhS2V5LCBcJERhdGFWYWx1ZSBdLAogICAgICAgICk7CiAgICB9CgogICAgcmV0dXJuIDE7Cn0KCj1oZWFkMiBTZWFyY2hEYXRhRGVsZXRlKCkKCkRlbGV0ZSB0aGUgZXhpc3Rpbmcgc2VhcmNoIGRhdGEgb2YgYSB0ZW1wbGF0ZQoKICAgIG15ICRUcnVlID0gJEltcG9ydEV4cG9ydE9iamVjdC0+U2VhcmNoRGF0YURlbGV0ZSgKICAgICAgICBUZW1wbGF0ZUlEID0+IDEyMywKICAgICAgICBVc2VySUQgICAgID0+IDEsCiAgICApOwoKICAgIG9yCgogICAgbXkgJFRydWUgPSAkSW1wb3J0RXhwb3J0T2JqZWN0LT5TZWFyY2hEYXRhRGVsZXRlKAogICAgICAgIFRlbXBsYXRlSUQgPT4gWzEsNDQsMTY2LDVdLAogICAgICAgIFVzZXJJRCAgICAgPT4gMSwKICAgICk7Cgo9Y3V0CgpzdWIgU2VhcmNoRGF0YURlbGV0ZSB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgZ2V0IGxvZyBvYmplY3QKICAgIG15ICRMb2dPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyk7CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KFRlbXBsYXRlSUQgVXNlcklEKSkgewogICAgICAgIGlmICggISRQYXJhbXskQXJndW1lbnR9ICkgewogICAgICAgICAgICAkTG9nT2JqZWN0LT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgaWYgKCAhcmVmICRQYXJhbXtUZW1wbGF0ZUlEfSApIHsKICAgICAgICAkUGFyYW17VGVtcGxhdGVJRH0gPSBbICRQYXJhbXtUZW1wbGF0ZUlEfSBdOwogICAgfQogICAgZWxzaWYgKCByZWYgJFBhcmFte1RlbXBsYXRlSUR9IG5lICdBUlJBWScgKSB7CiAgICAgICAgJExvZ09iamVjdC0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAnVGVtcGxhdGVJRCBtdXN0IGJlIGFuIGFycmF5IHJlZmVyZW5jZSBvciBhIHN0cmluZyEnLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgY3JlYXRlIHRoZSB0ZW1wbGF0ZSBpZCBzdHJpbmcKICAgIG15ICRUZW1wbGF0ZUlEU3RyaW5nID0gam9pbiBxeywgfSwgbWFwIHsnPyd9IEB7ICRQYXJhbXtUZW1wbGF0ZUlEfSB9OwoKICAgICMgY3JlYXRlIGFuZCBhZGQgYmluZCBwYXJhbWV0ZXJzCiAgICBteSBAQklORCA9IG1hcCB7IFwkXyB9IEB7ICRQYXJhbXtUZW1wbGF0ZUlEfSB9OwoKICAgICMgZGVsZXRlIHRlbXBsYXRlcwogICAgcmV0dXJuICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpLT5EbygKICAgICAgICBTUUwgID0+ICJERUxFVEUgRlJPTSBpbWV4cG9ydF9zZWFyY2ggV0hFUkUgdGVtcGxhdGVfaWQgSU4gKCAkVGVtcGxhdGVJRFN0cmluZyApIiwKICAgICAgICBCaW5kID0+IFxAQklORCwKICAgICk7Cn0KCj1oZWFkMiBFeHBvcnQoKQoKRXhwb3J0IGZ1bmN0aW9uCgogICAgbXkgJFJlc3VsdFJlZiA9ICRJbXBvcnRFeHBvcnRPYmplY3QtPkV4cG9ydCgKICAgICAgICBUZW1wbGF0ZUlEID0+IDEyMywKICAgICAgICBVc2VySUQgICAgID0+IDEsCiAgICApOwoKcmV0dXJucyBzb21ldGhpbmcgbGlrZQoKICAgICRSZXN1bHRSZWYgPSB7CiAgICAgICAgU3VjY2VzcyAgID0+IDIsCiAgICAgICAgRmFpbGVkICAgID0+IDAsCiAgICAgICAgRGVzdGluYXRpb25Db250ZW50ID0+IFsKICAgICAgICAgICAgWyAnQXR0cl8xYScsICdBdHRyXzFiJywgJ0F0dHJfMWMnLCBdLAogICAgICAgICAgICBbICdBdHRyXzJhJywgJ0F0dHJfMmInLCAnQXR0cl8zYycsIF0sCiAgICAgICAgXSwKICAgIH07Cgo9Y3V0CgpzdWIgRXhwb3J0IHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBnZXQgbG9nIG9iamVjdAogICAgbXkgJExvZ09iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKTsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICRBcmd1bWVudCAocXcoVGVtcGxhdGVJRCBVc2VySUQpKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyRBcmd1bWVudH0gKSB7CiAgICAgICAgICAgICRMb2dPYmplY3QtPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkQXJndW1lbnQhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICAjIGdldCB0ZW1wbGF0ZSBkYXRhCiAgICBteSAkVGVtcGxhdGVEYXRhID0gJFNlbGYtPlRlbXBsYXRlR2V0KAogICAgICAgIFRlbXBsYXRlSUQgPT4gJFBhcmFte1RlbXBsYXRlSUR9LAogICAgICAgIFVzZXJJRCAgICAgPT4gJFBhcmFte1VzZXJJRH0sCiAgICApOwoKICAgICMgY2hlY2sgdGVtcGxhdGUgZGF0YQogICAgaWYgKCAhJFRlbXBsYXRlRGF0YSB8fCAhJFRlbXBsYXRlRGF0YS0+e09iamVjdH0gfHwgISRUZW1wbGF0ZURhdGEtPntGb3JtYXR9ICkgewogICAgICAgICRMb2dPYmplY3QtPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gIlRlbXBsYXRlIHdpdGggSUQgJFBhcmFte1RlbXBsYXRlSUR9IGlzIGluY29tcGxldGUhIiwKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIGxvYWQgb2JqZWN0IGJhY2tlbmQKICAgIG15ICRPYmplY3RCYWNrZW5kID0gJEtlcm5lbDo6T00tPkdldCgKICAgICAgICAnS2VybmVsOjpTeXN0ZW06OkltcG9ydEV4cG9ydDo6T2JqZWN0QmFja2VuZDo6JyAuICRUZW1wbGF0ZURhdGEtPntPYmplY3R9CiAgICApOwoKICAgIHJldHVybiBpZiAhJE9iamVjdEJhY2tlbmQ7CgogICAgIyBsb2FkIGZvcm1hdCBiYWNrZW5kCiAgICBteSAkRm9ybWF0QmFja2VuZCA9ICRLZXJuZWw6Ok9NLT5HZXQoCiAgICAgICAgJ0tlcm5lbDo6U3lzdGVtOjpJbXBvcnRFeHBvcnQ6OkZvcm1hdEJhY2tlbmQ6OicgLiAkVGVtcGxhdGVEYXRhLT57Rm9ybWF0fQogICAgKTsKCiAgICByZXR1cm4gaWYgISRGb3JtYXRCYWNrZW5kOwoKICAgICMgZ2V0IGV4cG9ydCBkYXRhCiAgICBteSAkRXhwb3J0RGF0YSA9ICRPYmplY3RCYWNrZW5kLT5FeHBvcnREYXRhR2V0KAogICAgICAgIFRlbXBsYXRlSUQgPT4gJFBhcmFte1RlbXBsYXRlSUR9LAogICAgICAgIFVzZXJJRCAgICAgPT4gJFBhcmFte1VzZXJJRH0sCiAgICApOwoKICAgICMgZ2V0IGZvcm1hdCBkYXRhCiAgICBteSAkRm9ybWF0RGF0YSA9ICRTZWxmLT5Gb3JtYXREYXRhR2V0KAogICAgICAgIFRlbXBsYXRlSUQgPT4gJFBhcmFte1RlbXBsYXRlSUR9LAogICAgICAgIFVzZXJJRCAgICAgPT4gJFBhcmFte1VzZXJJRH0sCiAgICApOwoKICAgICMgaWYgY29sdW1uIGhlYWRlcnMgc2hvdWxkIGJlIGluY2x1ZGVkIGluIHRoZSBleHBvcnQKICAgIGlmICggJEZvcm1hdERhdGEtPntJbmNsdWRlQ29sdW1uSGVhZGVyc30gKSB7CgogICAgICAgICMgZ2V0IG9iamVjdCBhdHRyaWJ1dGVzICh0aGUgbmFtZSBvZiB0aGUgY29sdW1ucykKICAgICAgICBteSAkTWFwcGluZ09iamVjdEF0dHJpYnV0ZXMgPSAkU2VsZi0+TWFwcGluZ09iamVjdEF0dHJpYnV0ZXNHZXQoCiAgICAgICAgICAgIFRlbXBsYXRlSUQgPT4gJFBhcmFte1RlbXBsYXRlSUR9LAogICAgICAgICAgICBVc2VySUQgICAgID0+ICRQYXJhbXtVc2VySUR9LAogICAgICAgICk7CgogICAgICAgICMgY3JlYXRlIGEgbG9va3VwIGhhc2ggZm9yIHRoZSBvYmplY3QgYXR0cmlidXRlIG5hbWVzCiAgICAgICAgbXkgJUF0dHJpYnV0ZUxvb2t1cCA9IG1hcCB7ICRfLT57S2V5fSA9PiAkXy0+e1ZhbHVlfSB9IEB7ICRNYXBwaW5nT2JqZWN0QXR0cmlidXRlcy0+WzBdLT57SW5wdXR9LT57RGF0YX0gfTsKCiAgICAgICAgIyBnZXQgbWFwcGluZyBkYXRhIGxpc3QKICAgICAgICBteSAkTWFwcGluZ0xpc3QgPSAkU2VsZi0+TWFwcGluZ0xpc3QoCiAgICAgICAgICAgIFRlbXBsYXRlSUQgPT4gJFBhcmFte1RlbXBsYXRlSUR9LAogICAgICAgICAgICBVc2VySUQgICAgID0+ICRQYXJhbXtVc2VySUR9LAogICAgICAgICk7CgogICAgICAgICMgZ2V0IHRoZSBjb2x1bW4gbmFtZXMKICAgICAgICBteSBAQ29sdW1uTmFtZXM7CiAgICAgICAgZm9yIG15ICRNYXBwaW5nSUQgKCBAeyRNYXBwaW5nTGlzdH0gKSB7CgogICAgICAgICAgICAjIGdldCBtYXBwaW5nIG9iamVjdCBkYXRhCiAgICAgICAgICAgIG15ICRNYXBwaW5nT2JqZWN0RGF0YSA9ICRTZWxmLT5NYXBwaW5nT2JqZWN0RGF0YUdldCgKICAgICAgICAgICAgICAgIE1hcHBpbmdJRCA9PiAkTWFwcGluZ0lELAogICAgICAgICAgICAgICAgVXNlcklEICAgID0+ICRQYXJhbXtVc2VySUR9LAogICAgICAgICAgICApOwoKICAgICAgICAgICAgIyBnZXQgdGhlIGNvbHVtbiBuYW1lCiAgICAgICAgICAgIG15ICRDb2x1bW5OYW1lID0gJEF0dHJpYnV0ZUxvb2t1cHsgJE1hcHBpbmdPYmplY3REYXRhLT57S2V5fSB9OwoKICAgICAgICAgICAgcHVzaCBAQ29sdW1uTmFtZXMsICRDb2x1bW5OYW1lOwogICAgICAgIH0KCiAgICAgICAgIyBhZGQgY29sdW1uIGhlYWRlcnMgYXMgZmlyc3Qgcm93CiAgICAgICAgdW5zaGlmdCBAeyRFeHBvcnREYXRhfSwgXEBDb2x1bW5OYW1lczsKICAgIH0KCiAgICBteSAlUmVzdWx0ID0gKAogICAgICAgIFN1Y2Nlc3MgICAgICAgICAgICA9PiAwLAogICAgICAgIEZhaWxlZCAgICAgICAgICAgICA9PiAwLAogICAgICAgIERlc3RpbmF0aW9uQ29udGVudCA9PiBbXSwKICAgICk7CgogICAgRVhQT1JUREFUQVJPVzoKICAgIGZvciBteSAkRXhwb3J0RGF0YVJvdyAoIEB7JEV4cG9ydERhdGF9ICkgewoKICAgICAgICAjIGV4cG9ydCBvbmUgcm93CiAgICAgICAgbXkgJERlc3RpbmF0aW9uQ29udGVudFJvdyA9ICRGb3JtYXRCYWNrZW5kLT5FeHBvcnREYXRhU2F2ZSgKICAgICAgICAgICAgVGVtcGxhdGVJRCAgICA9PiAkUGFyYW17VGVtcGxhdGVJRH0sCiAgICAgICAgICAgIEV4cG9ydERhdGFSb3cgPT4gJEV4cG9ydERhdGFSb3csCiAgICAgICAgICAgIFVzZXJJRCAgICAgICAgPT4gJFBhcmFte1VzZXJJRH0sCiAgICAgICAgKTsKCiAgICAgICAgaWYgKCAhZGVmaW5lZCAkRGVzdGluYXRpb25Db250ZW50Um93ICkgewogICAgICAgICAgICAkUmVzdWx0e0ZhaWxlZH0rKzsKICAgICAgICAgICAgbmV4dCBFWFBPUlREQVRBUk9XOwogICAgICAgIH0KCiAgICAgICAgIyBhZGQgcm93IHRvIGRlc3RpbmF0aW9uIGNvbnRlbnQKICAgICAgICBwdXNoIEB7ICRSZXN1bHR7RGVzdGluYXRpb25Db250ZW50fSB9LCAkRGVzdGluYXRpb25Db250ZW50Um93OwogICAgICAgICRSZXN1bHR7U3VjY2Vzc30rKzsKICAgIH0KCiAgICAjIGxvZyByZXN1bHQKICAgICRMb2dPYmplY3QtPkxvZygKICAgICAgICBQcmlvcml0eSA9PiAnbm90aWNlJywKICAgICAgICBNZXNzYWdlICA9PiAiRXhwb3J0IG9mICRSZXN1bHR7RmFpbGVkfSByZWNvcmRzICgkVGVtcGxhdGVEYXRhLT57T2JqZWN0fSk6IGZhaWxlZCEiLAogICAgKTsKICAgICRMb2dPYmplY3QtPkxvZygKICAgICAgICBQcmlvcml0eSA9PiAnbm90aWNlJywKICAgICAgICBNZXNzYWdlICA9PiAiRXhwb3J0IG9mICRSZXN1bHR7U3VjY2Vzc30gcmVjb3JkcyAoJFRlbXBsYXRlRGF0YS0+e09iamVjdH0pOiBzdWNjZXNzZnVsISIsCiAgICApOwoKICAgIHJldHVybiBcJVJlc3VsdDsKfQoKPWhlYWQyIEltcG9ydCgpCgpJbXBvcnQgZnVuY3Rpb24KCiAgICBteSAkUmVzdWx0UmVmID0gJEltcG9ydEV4cG9ydE9iamVjdC0+SW1wb3J0KAogICAgICAgIFRlbXBsYXRlSUQgICAgPT4gMTIzLAogICAgICAgIFNvdXJjZUNvbnRlbnQgPT4gJFN0cmluZ1JlZiwgICMgKG9wdGlvbmFsKQogICAgICAgIFVzZXJJRCAgICAgICAgPT4gMSwKICAgICk7Cgo9Y3V0CgpzdWIgSW1wb3J0IHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgbXkgJENhY2hlT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkNhY2hlJyk7CgogICAgIyBEaXNhYmxlIHRoZSBjYWNoZSBmb3IgZmFzdGVyIGltcG9ydC4KICAgICRDYWNoZU9iamVjdC0+Q29uZmlndXJlKAogICAgICAgIENhY2hlSW5NZW1vcnkgID0+IDAsCiAgICAgICAgQ2FjaGVJbkJhY2tlbmQgPT4gMCwKICAgICk7CgogICAgIyBnZXQgbG9nIG9iamVjdAogICAgbXkgJExvZ09iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKTsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICRBcmd1bWVudCAocXcoVGVtcGxhdGVJRCBVc2VySUQpKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyRBcmd1bWVudH0gKSB7CiAgICAgICAgICAgICRMb2dPYmplY3QtPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkQXJndW1lbnQhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICAjIGdldCB0ZW1wbGF0ZSBkYXRhCiAgICBteSAkVGVtcGxhdGVEYXRhID0gJFNlbGYtPlRlbXBsYXRlR2V0KAogICAgICAgIFRlbXBsYXRlSUQgPT4gJFBhcmFte1RlbXBsYXRlSUR9LAogICAgICAgIFVzZXJJRCAgICAgPT4gJFBhcmFte1VzZXJJRH0sCiAgICApOwoKICAgICMgY2hlY2sgdGVtcGxhdGUgZGF0YQogICAgaWYgKCAhJFRlbXBsYXRlRGF0YSB8fCAhJFRlbXBsYXRlRGF0YS0+e09iamVjdH0gfHwgISRUZW1wbGF0ZURhdGEtPntGb3JtYXR9ICkgewogICAgICAgICRMb2dPYmplY3QtPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gIlRlbXBsYXRlIHdpdGggSUQgJFBhcmFte1RlbXBsYXRlSUR9IGlzIGluY29tcGxldGUhIiwKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIGxvYWQgb2JqZWN0IGJhY2tlbmQKICAgIG15ICRPYmplY3RCYWNrZW5kID0gJEtlcm5lbDo6T00tPkdldCgKICAgICAgICAnS2VybmVsOjpTeXN0ZW06OkltcG9ydEV4cG9ydDo6T2JqZWN0QmFja2VuZDo6JyAuICRUZW1wbGF0ZURhdGEtPntPYmplY3R9CiAgICApOwoKICAgIHJldHVybiBpZiAhJE9iamVjdEJhY2tlbmQ7CgogICAgIyBsb2FkIGZvcm1hdCBiYWNrZW5kCiAgICBteSAkRm9ybWF0QmFja2VuZCA9ICRLZXJuZWw6Ok9NLT5HZXQoCiAgICAgICAgJ0tlcm5lbDo6U3lzdGVtOjpJbXBvcnRFeHBvcnQ6OkZvcm1hdEJhY2tlbmQ6OicgLiAkVGVtcGxhdGVEYXRhLT57Rm9ybWF0fQogICAgKTsKCiAgICByZXR1cm4gaWYgISRGb3JtYXRCYWNrZW5kOwoKICAgICMgZ2V0IGltcG9ydCBkYXRhCiAgICBteSAkSW1wb3J0RGF0YSA9ICRGb3JtYXRCYWNrZW5kLT5JbXBvcnREYXRhR2V0KAogICAgICAgIFRlbXBsYXRlSUQgICAgPT4gJFBhcmFte1RlbXBsYXRlSUR9LAogICAgICAgIFNvdXJjZUNvbnRlbnQgPT4gJFBhcmFte1NvdXJjZUNvbnRlbnR9LAogICAgICAgIFVzZXJJRCAgICAgICAgPT4gJFBhcmFte1VzZXJJRH0sCiAgICApOwoKICAgIHJldHVybiBpZiAhJEltcG9ydERhdGE7CgogICAgIyBnZXQgZm9ybWF0IGRhdGEKICAgIG15ICRGb3JtYXREYXRhID0gJFNlbGYtPkZvcm1hdERhdGFHZXQoCiAgICAgICAgVGVtcGxhdGVJRCA9PiAkUGFyYW17VGVtcGxhdGVJRH0sCiAgICAgICAgVXNlcklEICAgICA9PiAkUGFyYW17VXNlcklEfSwKICAgICk7CgogICAgIyBpZiBjb2x1bW4gaGVhZGVycyBhcmUgYWN0aXZhdGVkLCB0aGUgZmlyc3Qgcm93IG11c3QgYmUgcmVtb3ZlZAogICAgaWYgKCAkRm9ybWF0RGF0YS0+e0luY2x1ZGVDb2x1bW5IZWFkZXJzfSApIHsKICAgICAgICBzaGlmdCBAeyRJbXBvcnREYXRhfTsKICAgIH0KCiAgICAjIE51bWJlciBvZiBzdWNjZXNzZnVsbHkgYW5kIG5vdCBzdWNjZXNzZnVsbHkgaW1wb3J0ZWQgcm93cwogICAgbXkgJVJlc3VsdCA9ICgKICAgICAgICBPYmplY3QgID0+ICRUZW1wbGF0ZURhdGEtPntPYmplY3R9LAogICAgICAgIFN1Y2Nlc3MgPT4gMCwKICAgICAgICBGYWlsZWQgID0+IDAsCiAgICAgICAgUmV0Q29kZSA9PiB7fSwKICAgICAgICBDb3VudGVyID0+IDAsCiAgICApOwogICAgSU1QT1JUREFUQVJPVzoKICAgIGZvciBteSAkSW1wb3J0RGF0YVJvdyAoIEB7JEltcG9ydERhdGF9ICkgewoKICAgICAgICAkUmVzdWx0e0NvdW50ZXJ9Kys7CgogICAgICAgICMgaW1wb3J0IGEgc2luZ2xlIHJvdwogICAgICAgIG15ICggJElELCAkUmV0Q29kZSApID0gJE9iamVjdEJhY2tlbmQtPkltcG9ydERhdGFTYXZlKAogICAgICAgICAgICBUZW1wbGF0ZUlEICAgID0+ICRQYXJhbXtUZW1wbGF0ZUlEfSwKICAgICAgICAgICAgSW1wb3J0RGF0YVJvdyA9PiAkSW1wb3J0RGF0YVJvdywKICAgICAgICAgICAgQ291bnRlciAgICAgICA9PiAkUmVzdWx0e0NvdW50ZXJ9LAogICAgICAgICAgICBVc2VySUQgICAgICAgID0+ICRQYXJhbXtVc2VySUR9LAogICAgICAgICk7CgogICAgICAgIGlmICggISRJRCApIHsKCiAgICAgICAgICAgICMgY291bnQgRHVwbGljYXRlTmFtZSBlbnRyaWVzIGFzIGVycm9ycwogICAgICAgICAgICBpZiAoICRSZXRDb2RlICYmICRSZXRDb2RlID1+IG17IFxBIER1cGxpY2F0ZU5hbWUgfXhtcyApIHsKICAgICAgICAgICAgICAgICRSZXN1bHR7UmV0Q29kZX0tPnskUmV0Q29kZX0rKzsKICAgICAgICAgICAgfQogICAgICAgICAgICAkUmVzdWx0e0ZhaWxlZH0rKzsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICRSZXN1bHR7UmV0Q29kZX0tPnskUmV0Q29kZX0rKzsKICAgICAgICAgICAgJFJlc3VsdHtTdWNjZXNzfSsrOwogICAgICAgIH0KICAgIH0KCiAgICAjIGxvZyByZXN1bHQKICAgICRMb2dPYmplY3QtPkxvZygKICAgICAgICBQcmlvcml0eSA9PiAnbm90aWNlJywKICAgICAgICBNZXNzYWdlID0+CiAgICAgICAgICAgICJJbXBvcnQgb2YgJFJlc3VsdHtDb3VudGVyfSAkUmVzdWx0e09iamVjdH0gcmVjb3JkczogIgogICAgICAgICAgICAuICIkUmVzdWx0e0ZhaWxlZH0gZmFpbGVkLCAkUmVzdWx0e1N1Y2Nlc3N9IHN1Y2NlZWRlZCIsCiAgICApOwogICAgZm9yIG15ICRSZXRDb2RlICggc29ydCBrZXlzICV7ICRSZXN1bHR7UmV0Q29kZX0gfSApIHsKICAgICAgICBteSAkQ291bnQgPSAkUmVzdWx0e1JldENvZGV9LT57JFJldENvZGV9IHx8IDA7CiAgICAgICAgJExvZ09iamVjdC0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnbm90aWNlJywKICAgICAgICAgICAgTWVzc2FnZSA9PgogICAgICAgICAgICAgICAgIkltcG9ydCBvZiAkUmVzdWx0e0NvdW50ZXJ9ICRSZXN1bHR7T2JqZWN0fSByZWNvcmRzOiAkQ291bnQgJFJldENvZGUiLAogICAgICAgICk7CiAgICB9CiAgICBpZiAoICRSZXN1bHR7RmFpbGVkfSApIHsKICAgICAgICAkTG9nT2JqZWN0LT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdub3RpY2UnLAogICAgICAgICAgICBNZXNzYWdlICA9PiAiTGFzdCBwcm9jZXNzZWQgbGluZSBudW1iZXIgb2YgaW1wb3J0IGZpbGU6ICRSZXN1bHR7Q291bnRlcn0iLAogICAgICAgICk7CiAgICB9CgogICAgIyBDbGVhbnVwIHRoZSBjYWNoZSBhZnRlciBpbXBvcnQuCiAgICAkQ2FjaGVPYmplY3QtPkNsZWFuVXAoKTsKCiAgICByZXR1cm4gXCVSZXN1bHQ7Cn0KCjE7Cgo9aGVhZDEgVEVSTVMgQU5EIENPTkRJVElPTlMKClRoaXMgU29mdHdhcmUgaXMgcGFydCBvZiB0aGUgT1RSUyBwcm9qZWN0IChMPGh0dHA6Ly9vdHJzLm9yZy8+KS4KClRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCnRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQpkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgTDxodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0Pi4KCj1jdXQK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6U3lzdGVtOjpJbXBvcnRFeHBvcnQ6OkZvcm1hdEJhY2tlbmQ6OkNTVjsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCnVzZSBLZXJuZWw6Okxhbmd1YWdlIHF3KFRyYW5zbGF0YWJsZSk7CgpvdXIgQE9iamVjdERlcGVuZGVuY2llcyA9ICgKICAgICdLZXJuZWw6OlN5c3RlbTo6SW1wb3J0RXhwb3J0JywKICAgICdLZXJuZWw6OlN5c3RlbTo6TG9nJywKICAgICdLZXJuZWw6OlN5c3RlbTo6TWFpbicsCik7Cgo9aGVhZDEgTkFNRQoKS2VybmVsOjpTeXN0ZW06OkltcG9ydEV4cG9ydDo6Rm9ybWF0QmFja2VuZDo6Q1NWIC0gaW1wb3J0L2V4cG9ydCBiYWNrZW5kIGZvciBDU1YKCj1oZWFkMSBERVNDUklQVElPTgoKQWxsIGZ1bmN0aW9ucyB0byBpbXBvcnQgYW5kIGV4cG9ydCBhIGNzdiBmb3JtYXQKCj1jdXQKCj1oZWFkMiBuZXcoKQoKQ3JlYXRlIGFuIG9iamVjdAoKICAgIHVzZSBLZXJuZWw6OlN5c3RlbTo6T2JqZWN0TWFuYWdlcjsKICAgIGxvY2FsICRLZXJuZWw6Ok9NID0gS2VybmVsOjpTeXN0ZW06Ok9iamVjdE1hbmFnZXItPm5ldygpOwogICAgbXkgJEltcG9ydEV4cG9ydENTVkJhY2tlbmRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SW1wb3J0RXhwb3J0OjpGb3JtYXRCYWNrZW5kOjpDU1YnKTsKCj1jdXQKCnN1YiBuZXcgewogICAgbXkgKCAkVHlwZSwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGFsbG9jYXRlIG5ldyBoYXNoIGZvciBvYmplY3QKICAgIG15ICRTZWxmID0ge307CiAgICBibGVzcyggJFNlbGYsICRUeXBlICk7CgogICAgaWYgKCAhJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06Ok1haW4nKS0+UmVxdWlyZSgnVGV4dDo6Q1NWJykgKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJDUEFOIG1vZHVsZSBUZXh0OjpDU1YgaXMgcmVxdWlyZWQgdG8gdXNlIHRoZSBDU1YgaW1wb3J0L2V4cG9ydCBtb2R1bGUhIiwKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIGRlZmluZSBhdmFpbGFibGUgc2VwYXJhdG9ycwogICAgJFNlbGYtPntBdmFpbGFibGVTZXBhcmF0b3JzfSA9IHsKICAgICAgICBUYWJ1bGF0b3IgPT4gIlx0IiwKICAgICAgICBTZW1pY29sb24gPT4gJzsnLAogICAgICAgIENvbG9uICAgICA9PiAnOicsCiAgICAgICAgRG90ICAgICAgID0+ICcuJywKICAgICAgICBDb21tYSAgICAgPT4gJywnLAogICAgfTsKCiAgICByZXR1cm4gJFNlbGY7Cn0KCj1oZWFkMiBGb3JtYXRBdHRyaWJ1dGVzR2V0KCkKCkdldCB0aGUgZm9ybWF0IGF0dHJpYnV0ZXMgb2YgYSBmb3JtYXQgYXMgYXJyYXkvaGFzaCByZWZlcmVuY2UKCiAgICBteSAkQXR0cmlidXRlcyA9ICRGb3JtYXRCYWNrZW5kLT5Gb3JtYXRBdHRyaWJ1dGVzR2V0KAogICAgICAgIFVzZXJJRCA9PiAxLAogICAgKTsKCj1jdXQKCnN1YiBGb3JtYXRBdHRyaWJ1dGVzR2V0IHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGlmICggISRQYXJhbXtVc2VySUR9ICkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAnTmVlZCBVc2VySUQhJywKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBteSAkQXR0cmlidXRlcyA9IFsKICAgICAgICB7CiAgICAgICAgICAgIEtleSAgID0+ICdDb2x1bW5TZXBhcmF0b3InLAogICAgICAgICAgICBOYW1lICA9PiBUcmFuc2xhdGFibGUoJ0NvbHVtbiBTZXBhcmF0b3InKSwKICAgICAgICAgICAgSW5wdXQgPT4gewogICAgICAgICAgICAgICAgVHlwZSA9PiAnU2VsZWN0aW9uJywKICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgIFRhYnVsYXRvciA9PiBUcmFuc2xhdGFibGUoJ1RhYnVsYXRvciAoVEFCKScpLAogICAgICAgICAgICAgICAgICAgIFNlbWljb2xvbiA9PiBUcmFuc2xhdGFibGUoJ1NlbWljb2xvbiAoOyknKSwKICAgICAgICAgICAgICAgICAgICBDb2xvbiAgICAgPT4gVHJhbnNsYXRhYmxlKCdDb2xvbiAoOiknKSwKICAgICAgICAgICAgICAgICAgICBEb3QgICAgICAgPT4gVHJhbnNsYXRhYmxlKCdEb3QgKC4pJyksCiAgICAgICAgICAgICAgICAgICAgQ29tbWEgICAgID0+IFRyYW5zbGF0YWJsZSgnQ29tbWEgKCwpJyksCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgUmVxdWlyZWQgICAgID0+IDEsCiAgICAgICAgICAgICAgICBUcmFuc2xhdGlvbiAgPT4gMSwKICAgICAgICAgICAgICAgIFBvc3NpYmxlTm9uZSA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICBLZXkgICA9PiAnQ2hhcnNldCcsCiAgICAgICAgICAgIE5hbWUgID0+IFRyYW5zbGF0YWJsZSgnQ2hhcnNldCcpLAogICAgICAgICAgICBJbnB1dCA9PiB7CiAgICAgICAgICAgICAgICBUeXBlICAgICAgICAgPT4gJ1RleHQnLAogICAgICAgICAgICAgICAgVmFsdWVEZWZhdWx0ID0+ICdVVEYtOCcsCiAgICAgICAgICAgICAgICBSZXF1aXJlZCAgICAgPT4gMSwKICAgICAgICAgICAgICAgIFRyYW5zbGF0aW9uICA9PiAwLAogICAgICAgICAgICAgICAgU2l6ZSAgICAgICAgID0+IDIwLAogICAgICAgICAgICAgICAgTWF4TGVuZ3RoICAgID0+IDIwLAogICAgICAgICAgICAgICAgUmVhZG9ubHkgICAgID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIEtleSAgID0+ICdJbmNsdWRlQ29sdW1uSGVhZGVycycsCiAgICAgICAgICAgIE5hbWUgID0+IFRyYW5zbGF0YWJsZSgnSW5jbHVkZSBDb2x1bW4gSGVhZGVycycpLAogICAgICAgICAgICBJbnB1dCA9PiB7CiAgICAgICAgICAgICAgICBUeXBlID0+ICdTZWxlY3Rpb24nLAogICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgMCA9PiBUcmFuc2xhdGFibGUoJ05vJyksCiAgICAgICAgICAgICAgICAgICAgMSA9PiBUcmFuc2xhdGFibGUoJ1llcycpLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIFRyYW5zbGF0aW9uICA9PiAxLAogICAgICAgICAgICAgICAgUG9zc2libGVOb25lID0+IDAsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgIF07CgogICAgcmV0dXJuICRBdHRyaWJ1dGVzOwp9Cgo9aGVhZDIgTWFwcGluZ0Zvcm1hdEF0dHJpYnV0ZXNHZXQoKQoKR2V0IHRoZSBtYXBwaW5nIGF0dHJpYnV0ZXMgb2YgYW4gZm9ybWF0IGFzIGFycmF5L2hhc2ggcmVmZXJlbmNlCgogICAgbXkgJEF0dHJpYnV0ZXMgPSAkRm9ybWF0QmFja2VuZC0+TWFwcGluZ0Zvcm1hdEF0dHJpYnV0ZXNHZXQoCiAgICAgICAgVXNlcklEID0+IDEsCiAgICApOwoKPWN1dAoKc3ViIE1hcHBpbmdGb3JtYXRBdHRyaWJ1dGVzR2V0IHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgb2JqZWN0CiAgICBpZiAoICEkUGFyYW17VXNlcklEfSApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ05lZWQgVXNlcklEIScsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgbXkgJEF0dHJpYnV0ZXMgPSBbCiAgICAgICAgewogICAgICAgICAgICBLZXkgICA9PiAnQ29sdW1uJywKICAgICAgICAgICAgTmFtZSAgPT4gVHJhbnNsYXRhYmxlKCdDb2x1bW4nKSwKICAgICAgICAgICAgSW5wdXQgPT4gewogICAgICAgICAgICAgICAgVHlwZSAgICAgPT4gJ1RUJywKICAgICAgICAgICAgICAgIERhdGEgICAgID0+ICcnLAogICAgICAgICAgICAgICAgUmVxdWlyZWQgPT4gMCwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgXTsKCiAgICByZXR1cm4gJEF0dHJpYnV0ZXM7Cn0KCj1oZWFkMiBJbXBvcnREYXRhR2V0KCkKCkdldCBpbXBvcnQgZGF0YSBhcyBDPDJELWFycmF5PiByZWZlcmVuY2UKCiAgICBteSAkSW1wb3J0RGF0YSA9ICRGb3JtYXRCYWNrZW5kLT5JbXBvcnREYXRhR2V0KAogICAgICAgIFRlbXBsYXRlSUQgICAgPT4gMTIzLAogICAgICAgIFNvdXJjZUNvbnRlbnQgPT4gJFN0cmluZ1JlZiwgICMgKG9wdGlvbmFsKQogICAgICAgIFVzZXJJRCAgICAgICAgPT4gMSwKICAgICk7Cgo9Y3V0CgpzdWIgSW1wb3J0RGF0YUdldCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhUZW1wbGF0ZUlEIFVzZXJJRCkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgcmV0dXJuIFtdIGlmICFkZWZpbmVkICRQYXJhbXtTb3VyY2VDb250ZW50fTsKCiAgICAjIGNoZWNrIHNvdXJjZSBjb250ZW50CiAgICBpZiAoIHJlZiAkUGFyYW17U291cmNlQ29udGVudH0gbmUgJ1NDQUxBUicgKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICdTb3VyY2VDb250ZW50IG11c3QgYmUgYSBzY2FsYXIgcmVmZXJlbmNlJywKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIGdldCBmb3JtYXQgZGF0YQogICAgbXkgJEZvcm1hdERhdGEgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SW1wb3J0RXhwb3J0JyktPkZvcm1hdERhdGFHZXQoCiAgICAgICAgVGVtcGxhdGVJRCA9PiAkUGFyYW17VGVtcGxhdGVJRH0sCiAgICAgICAgVXNlcklEICAgICA9PiAkUGFyYW17VXNlcklEfSwKICAgICk7CgogICAgIyBjaGVjayBmb3JtYXQgZGF0YQogICAgaWYgKCAhJEZvcm1hdERhdGEgfHwgcmVmICRGb3JtYXREYXRhIG5lICdIQVNIJyApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5vIGZvcm1hdCBkYXRhIGZvdW5kIGZvciB0aGUgdGVtcGxhdGUgaWQgJFBhcmFte1RlbXBsYXRlSUR9IiwKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIGdldCBjaGFyc2V0CiAgICBteSAkQ2hhcnNldCA9ICRGb3JtYXREYXRhLT57Q2hhcnNldH0gfHw9ICcnOwoKICAgICMgY2hlY2sgdGhlIGNoYXJzZXQKICAgIGlmICggJENoYXJzZXQgbmUgJ1VURi04JyApIHsKCiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJObyB2YWxpZCBjaGFyc2V0IGZvdW5kIGZvciB0aGUgdGVtcGxhdGUgaWQgJFBhcmFte1RlbXBsYXRlSUR9LiBDaGFyc2V0IG11c3QgYmUgVVRGLTghIiwKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIGdldCBzZXBhcmF0b3IKICAgICRGb3JtYXREYXRhLT57Q29sdW1uU2VwYXJhdG9yfSB8fD0gJyc7CiAgICBteSAkU2VwYXJhdG9yID0gJFNlbGYtPntBdmFpbGFibGVTZXBhcmF0b3JzfS0+eyAkRm9ybWF0RGF0YS0+e0NvbHVtblNlcGFyYXRvcn0gfSB8fCAnJzsKCiAgICAjIGNoZWNrIHRoZSBzZXBhcmF0b3IKICAgIGlmICggISRTZXBhcmF0b3IgKSB7CgogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAiTm8gdmFsaWQgc2VwYXJhdG9yIGZvdW5kIGZvciB0aGUgdGVtcGxhdGUgaWQgJFBhcmFte1RlbXBsYXRlSUR9IiwKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIGNyZWF0ZSB0aGUgcGFyc2VyIG9iamVjdAogICAgbXkgJFBhcnNlT2JqZWN0ID0gVGV4dDo6Q1NWLT5uZXcoCiAgICAgICAgewogICAgICAgICAgICBxdW90ZV9jaGFyICAgICAgICAgID0+ICciJywKICAgICAgICAgICAgZXNjYXBlX2NoYXIgICAgICAgICA9PiAnIicsCiAgICAgICAgICAgIHNlcF9jaGFyICAgICAgICAgICAgPT4gJFNlcGFyYXRvciwKICAgICAgICAgICAgZW9sICAgICAgICAgICAgICAgICA9PiAnJywKICAgICAgICAgICAgYWx3YXlzX3F1b3RlICAgICAgICA9PiAxLAogICAgICAgICAgICBiaW5hcnkgICAgICAgICAgICAgID0+IDEsCiAgICAgICAgICAgIGtlZXBfbWV0YV9pbmZvICAgICAgPT4gMCwKICAgICAgICAgICAgYWxsb3dfbG9vc2VfcXVvdGVzICA9PiAwLAogICAgICAgICAgICBhbGxvd19sb29zZV9lc2NhcGVzID0+IDAsCiAgICAgICAgICAgIGFsbG93X3doaXRlc3BhY2UgICAgPT4gMCwKICAgICAgICAgICAgYmxhbmtfaXNfdW5kZWYgICAgICA9PiAwLAogICAgICAgICAgICB2ZXJiYXRpbSAgICAgICAgICAgID0+IDAsCiAgICAgICAgfQogICAgKTsKCiAgICAjIGNyZWF0ZSBhbiBpbiBtZW1vcnkgdGVtcCBmaWxlIGFuZCBvcGVuIGl0CiAgICBteSAkRmlsZUNvbnRlbnQgPSAnJzsKICAgIG9wZW4gbXkgJEZILCAnKzwnLCBcJEZpbGVDb250ZW50OyAgICAjIyBubyBjcml0aWMKCiAgICAjIHdyaXRlIHNvdXJjZSBjb250ZW50CiAgICBwcmludCAkRkggJHsgJFBhcmFte1NvdXJjZUNvbnRlbnR9IH07CgogICAgIyByZXdpbmQgZmlsZSBoYW5kbGUKICAgIHNlZWsgJEZILCAwLCAwOwoKICAgICMgcGFyc2UgdGhlIGNvbnRlbnQKICAgIG15ICRMaW5lQ291bnQgPSAxOwogICAgbXkgQEltcG9ydERhdGE7CgogICAgIyBpdCBpcyBpbXBvcnRhbnQgdG8gdXNlIHRoaXMgc3ludGF4ICJ3aGlsZSAoICFlb2YoJEZIKSApIgogICAgIyBhcyB0aGUgQ1BBTiBtb2R1bGUgVGV4dDo6Q1NWX1hTIG1pZ2h0IHNob3cgZXJyb3JzIGlmIHRoZQogICAgIyBnZXRsaW5lIGNhbGwgaXMgd2l0aGluIHRoZSB3aGlsZSB0ZXN0CiAgICAjIGhhdmUgYSBsb29rIGF0IGh0dHA6Ly9idWdzLm90cnMub3JnL3Nob3dfYnVnLmNnaT9pZD05MjcwCiAgICB3aGlsZSAoICFlb2YoJEZIKSApIHsKICAgICAgICBteSAkQ29sdW1uID0gJFBhcnNlT2JqZWN0LT5nZXRsaW5lKCRGSCk7CiAgICAgICAgcHVzaCBASW1wb3J0RGF0YSwgJENvbHVtbjsKICAgICAgICAkTGluZUNvdW50Kys7CiAgICB9CgogICAgIyBlcnJvciBoYW5kbGluZwogICAgbXkgKCAkUGFyc2VFcnJvckNvZGUsICRQYXJzZUVycm9yU3RyaW5nICkgPSAkUGFyc2VPYmplY3QtPmVycm9yX2RpYWcoKTsKICAgIGlmICgkUGFyc2VFcnJvckNvZGUpIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gIkltcG9ydEVycm9yIGF0IGxpbmUgJExpbmVDb3VudCwgIgogICAgICAgICAgICAgICAgLiAiRXJyb3JDb2RlOiAkUGFyc2VFcnJvckNvZGUgJyRQYXJzZUVycm9yU3RyaW5nJyAiLAogICAgICAgICk7CiAgICB9CgogICAgIyBjbG9zZSB0aGUgaW4gbWVtb3J5IGZpbGUgaGFuZGxlCiAgICBjbG9zZSAkRkg7CgogICAgIyBzZXQgdXRmOCBmbGFnCiAgICBmb3IgbXkgJFJvdyAoQEltcG9ydERhdGEpIHsKICAgICAgICBmb3IgbXkgJENlbGwgKCBAeyRSb3d9ICkgewogICAgICAgICAgICBFbmNvZGU6Ol91dGY4X29uKCRDZWxsKTsKICAgICAgICB9CiAgICB9CgogICAgcmV0dXJuIFxASW1wb3J0RGF0YTsKfQoKPWhlYWQyIEV4cG9ydERhdGFTYXZlKCkKCkV4cG9ydCBvbmUgcm93IG9mIHRoZSBleHBvcnQgZGF0YQoKICAgIG15ICREZXN0aW5hdGlvbkNvbnRlbnQgPSAkRm9ybWF0QmFja2VuZC0+RXhwb3J0RGF0YVNhdmUoCiAgICAgICAgVGVtcGxhdGVJRCAgICA9PiAxMjMsCiAgICAgICAgRXhwb3J0RGF0YVJvdyA9PiAkQXJyYXlSZWYsCiAgICAgICAgVXNlcklEICAgICAgICA9PiAxLAogICAgKTsKCj1jdXQKCnN1YiBFeHBvcnREYXRhU2F2ZSB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhUZW1wbGF0ZUlEIEV4cG9ydERhdGFSb3cgVXNlcklEKSkgewogICAgICAgIGlmICggISRQYXJhbXskQXJndW1lbnR9ICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkQXJndW1lbnQhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICAjIGNoZWNrIGV4cG9ydCBkYXRhIHJvdwogICAgaWYgKCByZWYgJFBhcmFte0V4cG9ydERhdGFSb3d9IG5lICdBUlJBWScgKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICdFeHBvcnREYXRhUm93IG11c3QgYmUgYW4gYXJyYXkgcmVmZXJlbmNlJywKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIGdldCBmb3JtYXQgZGF0YQogICAgbXkgJEZvcm1hdERhdGEgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SW1wb3J0RXhwb3J0JyktPkZvcm1hdERhdGFHZXQoCiAgICAgICAgVGVtcGxhdGVJRCA9PiAkUGFyYW17VGVtcGxhdGVJRH0sCiAgICAgICAgVXNlcklEICAgICA9PiAkUGFyYW17VXNlcklEfSwKICAgICk7CgogICAgIyBjaGVjayBmb3JtYXQgZGF0YQogICAgaWYgKCAhJEZvcm1hdERhdGEgfHwgcmVmICRGb3JtYXREYXRhIG5lICdIQVNIJyApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5vIGZvcm1hdCBkYXRhIGZvdW5kIGZvciB0aGUgdGVtcGxhdGUgaWQgJFBhcmFte1RlbXBsYXRlSUR9IiwKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIGdldCBjaGFyc2V0CiAgICBteSAkQ2hhcnNldCA9ICRGb3JtYXREYXRhLT57Q2hhcnNldH0gfHw9ICcnOwoKICAgICMgY2hlY2sgdGhlIGNoYXJzZXQKICAgIGlmICggJENoYXJzZXQgbmUgJ1VURi04JyApIHsKCiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJObyB2YWxpZCBjaGFyc2V0IGZvdW5kIGZvciB0aGUgdGVtcGxhdGUgaWQgJFBhcmFte1RlbXBsYXRlSUR9LiBDaGFyc2V0IG11c3QgYmUgVVRGLTghIiwKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIGdldCBjb2x1bW5uIHNlcGFyYXRvcgogICAgJEZvcm1hdERhdGEtPntDb2x1bW5TZXBhcmF0b3J9IHx8PSAnJzsKICAgIG15ICRTZXBhcmF0b3IgPSAkU2VsZi0+e0F2YWlsYWJsZVNlcGFyYXRvcnN9LT57ICRGb3JtYXREYXRhLT57Q29sdW1uU2VwYXJhdG9yfSB9IHx8ICcnOwoKICAgICMgY2hlY2sgdGhlIHNlcGFyYXRvcgogICAgaWYgKCAhJFNlcGFyYXRvciApIHsKCiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJObyB2YWxpZCBzZXBhcmF0b3IgZm91bmQgZm9yIHRoZSB0ZW1wbGF0ZSBpZCAkUGFyYW17VGVtcGxhdGVJRH0iLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgY3JlYXRlIHRoZSBwYXJzZXIgb2JqZWN0CiAgICBteSAkUGFyc2VPYmplY3QgPSBUZXh0OjpDU1YtPm5ldygKICAgICAgICB7CiAgICAgICAgICAgIHF1b3RlX2NoYXIgICAgICAgICAgPT4gJyInLAogICAgICAgICAgICBlc2NhcGVfY2hhciAgICAgICAgID0+ICciJywKICAgICAgICAgICAgc2VwX2NoYXIgICAgICAgICAgICA9PiAkU2VwYXJhdG9yLAogICAgICAgICAgICBlb2wgICAgICAgICAgICAgICAgID0+ICcnLAogICAgICAgICAgICBhbHdheXNfcXVvdGUgICAgICAgID0+IDEsCiAgICAgICAgICAgIGJpbmFyeSAgICAgICAgICAgICAgPT4gMSwKICAgICAgICAgICAga2VlcF9tZXRhX2luZm8gICAgICA9PiAwLAogICAgICAgICAgICBhbGxvd19sb29zZV9xdW90ZXMgID0+IDAsCiAgICAgICAgICAgIGFsbG93X2xvb3NlX2VzY2FwZXMgPT4gMCwKICAgICAgICAgICAgYWxsb3dfd2hpdGVzcGFjZSAgICA9PiAwLAogICAgICAgICAgICBibGFua19pc191bmRlZiAgICAgID0+IDAsCiAgICAgICAgICAgIHZlcmJhdGltICAgICAgICAgICAgPT4gMCwKICAgICAgICB9CiAgICApOwoKICAgIGlmICggISRQYXJzZU9iamVjdC0+Y29tYmluZSggQHsgJFBhcmFte0V4cG9ydERhdGFSb3d9IH0gKSApIHsKCiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJDYW4ndCBjb21iaW5lIHRoZSBleHBvcnQgZGF0YSB0byBhIHN0cmluZyEiLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgY3JlYXRlIHRoZSBDU1Ygc3RyaW5nCiAgICBteSAkU3RyaW5nID0gJFBhcnNlT2JqZWN0LT5zdHJpbmcoKTsKCiAgICAjIHNldCB1dGY4IGZsYWcKICAgIEVuY29kZTo6X3V0Zjhfb24oJFN0cmluZyk7CgogICAgcmV0dXJuICRTdHJpbmc7Cn0KCjE7Cgo9aGVhZDEgVEVSTVMgQU5EIENPTkRJVElPTlMKClRoaXMgc29mdHdhcmUgaXMgcGFydCBvZiB0aGUgT1RSUyBwcm9qZWN0IChMPGh0dHBzOi8vb3Rycy5vcmcvPikuCgpUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQp0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChHUEwpLiBJZiB5b3UKZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIEw8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwtMy4wLnR4dD4uCgo9Y3V0Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6U3lzdGVtOjpDb25zb2xlOjpDb21tYW5kOjpBZG1pbjo6SVRTTTo6SW1wb3J0RXhwb3J0OjpJbXBvcnQ7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7Cgp1c2UgcGFyZW50IHF3KEtlcm5lbDo6U3lzdGVtOjpDb25zb2xlOjpCYXNlQ29tbWFuZCk7CgpvdXIgQE9iamVjdERlcGVuZGVuY2llcyA9ICgKICAgICdLZXJuZWw6OlN5c3RlbTo6TWFpbicsCiAgICAnS2VybmVsOjpTeXN0ZW06OkltcG9ydEV4cG9ydCcsCik7CgpzdWIgQ29uZmlndXJlIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgJFNlbGYtPkRlc2NyaXB0aW9uKCdUaGUgdG9vbCBmb3IgaW1wb3J0aW5nIGNvbmZpZyBpdGVtcycpOwogICAgJFNlbGYtPkFkZE9wdGlvbigKICAgICAgICBOYW1lICAgICAgICA9PiAndGVtcGxhdGUtbnVtYmVyJywKICAgICAgICBEZXNjcmlwdGlvbiA9PiAiU3BlY2lmeSBhIHRlbXBsYXRlIG51bWJlciB0byBiZSBpbXBvZXJ0ZWQuIiwKICAgICAgICBSZXF1aXJlZCAgICA9PiAxLAogICAgICAgIEhhc1ZhbHVlICAgID0+IDEsCiAgICAgICAgVmFsdWVSZWdleCAgPT4gcXIvXGQrL3NteCwKICAgICk7CiAgICAkU2VsZi0+QWRkQXJndW1lbnQoCiAgICAgICAgTmFtZSAgICAgICAgPT4gJ3NvdXJjZScsCiAgICAgICAgRGVzY3JpcHRpb24gPT4gIlNwZWNpZnkgdGhlIHBhdGggdG8gdGhlIGZpbGUgd2hpY2ggY29udGFpbmluZyB0aGUgY29uZmlnIGl0ZW0gZGF0YSBmb3IgaW1wb3J0aW5nLiIsCiAgICAgICAgUmVxdWlyZWQgICAgPT4gMSwKICAgICAgICBWYWx1ZVJlZ2V4ICA9PiBxci8uKi9zbXgsCiAgICApOwoKICAgIHJldHVybjsKfQoKc3ViIFByZVJ1biB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIG15ICRTb3VyY2VQYXRoID0gJFNlbGYtPkdldEFyZ3VtZW50KCdzb3VyY2UnKTsKICAgIGlmICggJFNvdXJjZVBhdGggJiYgIS1yICRTb3VyY2VQYXRoICkgewogICAgICAgIGRpZSAiRmlsZSAkU291cmNlUGF0aCBkb2VzIG5vdCBleGlzdCwgY2FuIG5vdCBiZSByZWFkLlxuIjsKICAgIH0KCiAgICByZXR1cm47Cn0KCnN1YiBSdW4gewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICBteSAkVGVtcGxhdGVJRCA9ICRTZWxmLT5HZXRPcHRpb24oJ3RlbXBsYXRlLW51bWJlcicpOwoKICAgICMgZ2V0IHRlbXBsYXRlIGRhdGEKICAgIG15ICRUZW1wbGF0ZURhdGEgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SW1wb3J0RXhwb3J0JyktPlRlbXBsYXRlR2V0KAogICAgICAgIFRlbXBsYXRlSUQgPT4gJFRlbXBsYXRlSUQsCiAgICAgICAgVXNlcklEICAgICA9PiAxLAogICAgKTsKCiAgICBpZiAoICEkVGVtcGxhdGVEYXRhLT57VGVtcGxhdGVJRH0gKSB7CiAgICAgICAgJFNlbGYtPlByaW50RXJyb3IoIlRlbXBsYXRlICRUZW1wbGF0ZUlEIG5vdCBmb3VuZCEuXG4iKTsKICAgICAgICAkU2VsZi0+UHJpbnRFcnJvcigiRXhwb3J0IGFib3J0ZWQuLlxuIik7CiAgICAgICAgcmV0dXJuICRTZWxmLT5FeGl0Q29kZUVycm9yKCk7CiAgICB9CgogICAgJFNlbGYtPlByaW50KCI8eWVsbG93PkltcG9ydGluZyBjb25maWcgaXRlbXMuLi48L3llbGxvdz5cbiIpOwogICAgJFNlbGYtPlByaW50KCAiPHllbGxvdz4iIC4gKCAnPScgeCA2OSApIC4gIjwveWVsbG93PlxuIiApOwoKICAgIG15ICRTb3VyY2VDb250ZW50OwogICAgbXkgJFNvdXJjZUZpbGUgPSAkU2VsZi0+R2V0QXJndW1lbnQoJ3NvdXJjZScpOwoKICAgIGlmICgkU291cmNlRmlsZSkgewoKICAgICAgICAkU2VsZi0+UHJpbnQoIjx5ZWxsb3c+UmVhZCBGaWxlICRTb3VyY2VGaWxlLjwveWVsbG93PlxuIik7CgogICAgICAgICMgcmVhZCBzb3VyY2UgZmlsZQogICAgICAgICRTb3VyY2VDb250ZW50ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06Ok1haW4nKS0+RmlsZVJlYWQoCiAgICAgICAgICAgIExvY2F0aW9uID0+ICRTb3VyY2VGaWxlLAogICAgICAgICAgICBSZXN1bHQgICA9PiAnU0NBTEFSJywKICAgICAgICAgICAgTW9kZSAgICAgPT4gJ2Jpbm1vZGUnLAogICAgICAgICk7CgogICAgICAgIGlmICggISRTb3VyY2VDb250ZW50ICkgewogICAgICAgICAgICAkU2VsZi0+UHJpbnRFcnJvcigiQ2FuJ3QgcmVhZCBmaWxlICRTb3VyY2VGaWxlLlxuSW1wb3J0IGFib3J0ZWQuXG4iKSBpZiAhJFNvdXJjZUNvbnRlbnQ7CiAgICAgICAgICAgIHJldHVybiAkU2VsZi0+RXhpdENvZGVFcnJvcigpOwogICAgICAgIH0KCiAgICB9CgogICAgIyBpbXBvcnQgZGF0YQogICAgbXkgJFJlc3VsdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpJbXBvcnRFeHBvcnQnKS0+SW1wb3J0KAogICAgICAgIFRlbXBsYXRlSUQgICAgPT4gJFRlbXBsYXRlSUQsCiAgICAgICAgU291cmNlQ29udGVudCA9PiAkU291cmNlQ29udGVudCwKICAgICAgICBVc2VySUQgICAgICAgID0+IDEsCiAgICApOwoKICAgIGlmICggISRSZXN1bHQgKSB7CiAgICAgICAgJFNlbGYtPlByaW50RXJyb3IoIlxuRXJyb3Igb2NjdXJyZWQuIEltcG9ydCBpbXBvc3NpYmxlISBTZWUgdGhlIE9UUlMgbG9nIGZvciBkZXRhaWxzLlxuIik7CiAgICAgICAgcmV0dXJuICRTZWxmLT5FeGl0Q29kZUVycm9yKCk7CiAgICB9CgogICAgIyBwcmludCByZXN1bHQKICAgICRTZWxmLT5QcmludCgiXG48Z3JlZW4+SW1wb3J0IG9mICRSZXN1bHQtPntDb3VudGVyfSAkUmVzdWx0LT57T2JqZWN0fSByZWNvcmRzOjwvZ3JlZW4+XG4iKTsKICAgICRTZWxmLT5QcmludCggIjxncmVlbj4iIC4gKCAnLScgeCA2OSApIC4gIjwvZ3JlZW4+XG4iICk7CiAgICAkU2VsZi0+UHJpbnQoIjxncmVlbj5TdWNjZXNzOiAkUmVzdWx0LT57U3VjY2Vzc30gc3VjY2VlZGVkPC9ncmVlbj5cbiIpOwogICAgaWYgKCAkUmVzdWx0LT57RmFpbGVkfSApIHsKICAgICAgICAkU2VsZi0+UHJpbnRFcnJvcigiJFJlc3VsdC0+e0ZhaWxlZH0gZmFpbGVkLlxuIik7CiAgICB9CiAgICBlbHNlIHsKICAgICAgICAkU2VsZi0+UHJpbnQoIjxncmVlbj5FcnJvcjogJFJlc3VsdC0+e0ZhaWxlZH0gZmFpbGVkLjwvZ3JlZW4+XG4iKTsKICAgIH0KCiAgICBmb3IgbXkgJFJldENvZGUgKCBzb3J0IGtleXMgJXsgJFJlc3VsdC0+e1JldENvZGV9IH0gKSB7CiAgICAgICAgbXkgJENvdW50ID0gJFJlc3VsdC0+e1JldENvZGV9LT57JFJldENvZGV9IHx8IDA7CiAgICAgICAgJFNlbGYtPlByaW50KCI8Z3JlZW4+SW1wb3J0IG9mICRSZXN1bHQtPntDb3VudGVyfSAkUmVzdWx0LT57T2JqZWN0fSByZWNvcmRzOiAkQ291bnQgJFJldENvZGU8L2dyZWVuPlxuIik7CiAgICB9CiAgICBpZiAoICRSZXN1bHQtPntGYWlsZWR9ICkgewogICAgICAgICRTZWxmLT5QcmludCgiPGdyZWVuPkxhc3QgcHJvY2Vzc2VkIGxpbmUgbnVtYmVyIG9mIGltcG9ydCBmaWxlOiAkUmVzdWx0LT57Q291bnRlcn08L2dyZWVuPlxuIik7CiAgICB9CgogICAgJFNlbGYtPlByaW50KCI8Z3JlZW4+SW1wb3J0IGNvbXBsZXRlLjwvZ3JlZW4+XG4iKTsKICAgICRTZWxmLT5QcmludCggIjxncmVlbj4iIC4gKCAnLScgeCA2OSApIC4gIjwvZ3JlZW4+XG4iICk7CiAgICAkU2VsZi0+UHJpbnQoIjxncmVlbj5Eb25lLjwvZ3JlZW4+XG4iKTsKCiAgICByZXR1cm4gJFNlbGYtPkV4aXRDb2RlT2soKTsKfQoKMTsKCj1oZWFkMSBURVJNUyBBTkQgQ09ORElUSU9OUwoKVGhpcyBzb2Z0d2FyZSBpcyBwYXJ0IG9mIHRoZSBPVFJTIHByb2plY3QgKEw8aHR0cHM6Ly9vdHJzLm9yZy8+KS4KClRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCnRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQpkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgTDxodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0Pi4KCj1jdXQK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6U3lzdGVtOjpDb25zb2xlOjpDb21tYW5kOjpBZG1pbjo6SVRTTTo6SW1wb3J0RXhwb3J0OjpFeHBvcnQ7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7Cgp1c2UgcGFyZW50IHF3KEtlcm5lbDo6U3lzdGVtOjpDb25zb2xlOjpCYXNlQ29tbWFuZCk7CgpvdXIgQE9iamVjdERlcGVuZGVuY2llcyA9ICgKICAgICdLZXJuZWw6OlN5c3RlbTo6TWFpbicsCiAgICAnS2VybmVsOjpTeXN0ZW06OkltcG9ydEV4cG9ydCcsCik7CgpzdWIgQ29uZmlndXJlIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgJFNlbGYtPkRlc2NyaXB0aW9uKCdUaGUgdG9vbCBmb3IgZXhwb3J0aW5nIGNvbmZpZyBpdGVtcycpOwogICAgJFNlbGYtPkFkZE9wdGlvbigKICAgICAgICBOYW1lICAgICAgICA9PiAndGVtcGxhdGUtbnVtYmVyJywKICAgICAgICBEZXNjcmlwdGlvbiA9PiAiU3BlY2lmeSBhIHRlbXBsYXRlIG51bWJlciB0byBiZSBleHBvcnRlZC4iLAogICAgICAgIFJlcXVpcmVkICAgID0+IDEsCiAgICAgICAgSGFzVmFsdWUgICAgPT4gMSwKICAgICAgICBWYWx1ZVJlZ2V4ICA9PiBxci9cZCsvc214LAogICAgKTsKICAgICRTZWxmLT5BZGRBcmd1bWVudCgKICAgICAgICBOYW1lICAgICAgICA9PiAnZGVzdGluYXRpb24nLAogICAgICAgIERlc2NyaXB0aW9uID0+ICJTcGVjaWZ5IHRoZSBwYXRoIHRvIGEgZmlsZSB3aGVyZSBjb25maWcgaXRlbSBkYXRhIHNob3VsZCBiZSBleHBvcnRlZC4iLAogICAgICAgIFJlcXVpcmVkICAgID0+IDEsCiAgICAgICAgVmFsdWVSZWdleCAgPT4gcXIvLiovc214LAogICAgKTsKCiAgICByZXR1cm47Cn0KCnN1YiBSdW4gewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICBteSAkVGVtcGxhdGVJRCA9ICRTZWxmLT5HZXRPcHRpb24oJ3RlbXBsYXRlLW51bWJlcicpOwoKICAgICMgZ2V0IHRlbXBsYXRlIGRhdGEKICAgIG15ICRUZW1wbGF0ZURhdGEgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SW1wb3J0RXhwb3J0JyktPlRlbXBsYXRlR2V0KAogICAgICAgIFRlbXBsYXRlSUQgPT4gJFRlbXBsYXRlSUQsCiAgICAgICAgVXNlcklEICAgICA9PiAxLAogICAgKTsKCiAgICBpZiAoICEkVGVtcGxhdGVEYXRhLT57VGVtcGxhdGVJRH0gKSB7CiAgICAgICAgJFNlbGYtPlByaW50RXJyb3IoIlRlbXBsYXRlICRUZW1wbGF0ZUlEIG5vdCBmb3VuZCEuXG4iKTsKICAgICAgICAkU2VsZi0+UHJpbnRFcnJvcigiRXhwb3J0IGFib3J0ZWQuLlxuIik7CiAgICAgICAgcmV0dXJuICRTZWxmLT5FeGl0Q29kZUVycm9yKCk7CiAgICB9CgogICAgJFNlbGYtPlByaW50KCI8eWVsbG93PkV4cG9ydGluZyBjb25maWcgaXRlbXMuLi48L3llbGxvdz5cbiIpOwogICAgJFNlbGYtPlByaW50KCAiPHllbGxvdz4iIC4gKCAnPScgeCA2OSApIC4gIjwveWVsbG93PlxuIiApOwoKICAgICMgZXhwb3J0IGRhdGEKICAgIG15ICRSZXN1bHQgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SW1wb3J0RXhwb3J0JyktPkV4cG9ydCgKICAgICAgICBUZW1wbGF0ZUlEID0+ICRUZW1wbGF0ZUlELAogICAgICAgIFVzZXJJRCAgICAgPT4gMSwKICAgICk7CgogICAgaWYgKCAhJFJlc3VsdCApIHsKICAgICAgICAkU2VsZi0+UHJpbnRFcnJvcigiRXJyb3Igb2NjdXJyZWQuIEV4cG9ydCBpbXBvc3NpYmxlISBTZWUgU3lzbG9nIGZvciBkZXRhaWxzLlxuIik7CiAgICAgICAgcmV0dXJuICRTZWxmLT5FeGl0Q29kZUVycm9yKCk7CiAgICB9CgogICAgJFNlbGYtPlByaW50KCAiPGdyZWVuPiIgLiAoICctJyB4IDY5ICkgLiAiPC9ncmVlbj5cbiIgKTsKICAgICRTZWxmLT5QcmludCgiPGdyZWVuPlN1Y2Nlc3M6ICRSZXN1bHQtPntTdWNjZXNzfSBzdWNjZWVkZWQ8L2dyZWVuPlxuIik7CiAgICBpZiAoICRSZXN1bHQtPntGYWlsZWR9ICkgewogICAgICAgICRTZWxmLT5QcmludEVycm9yKCIkUmVzdWx0LT57RmFpbGVkfSBmYWlsZWQuXG4iKTsKICAgIH0KICAgIGVsc2UgewogICAgICAgICRTZWxmLT5QcmludCgiPGdyZWVuPkVycm9yOiAkUmVzdWx0LT57RmFpbGVkfSBmYWlsZWQuPC9ncmVlbj5cbiIpOwogICAgfQoKICAgIG15ICREZXN0aW5hdGlvbkZpbGUgPSAkU2VsZi0+R2V0QXJndW1lbnQoJ2Rlc3RpbmF0aW9uJyk7CgogICAgaWYgKCREZXN0aW5hdGlvbkZpbGUpIHsKCiAgICAgICAgbXkgJEZpbGVDb250ZW50ID0gam9pbiAiXG4iLCBAeyAkUmVzdWx0LT57RGVzdGluYXRpb25Db250ZW50fSB9OwoKICAgICAgICAjIHNhdmUgZGVzdGluYXRpb24gY29udGVudCB0byBmaWxlCiAgICAgICAgbXkgJFN1Y2Nlc3MgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TWFpbicpLT5GaWxlV3JpdGUoCiAgICAgICAgICAgIExvY2F0aW9uID0+ICREZXN0aW5hdGlvbkZpbGUsCiAgICAgICAgICAgIENvbnRlbnQgID0+IFwkRmlsZUNvbnRlbnQsCiAgICAgICAgKTsKCiAgICAgICAgaWYgKCAhJFN1Y2Nlc3MgKSB7CiAgICAgICAgICAgICRTZWxmLT5QcmludEVycm9yKCJDYW4ndCB3cml0ZSBmaWxlICREZXN0aW5hdGlvbkZpbGUuXG5FeHBvcnQgYWJvcnRlZC5cbiIpOwogICAgICAgICAgICByZXR1cm4gJFNlbGYtPkV4aXRDb2RlRXJyb3IoKTsKICAgICAgICB9CgogICAgICAgICRTZWxmLT5QcmludCgiPGdyZWVuPkZpbGUgJERlc3RpbmF0aW9uRmlsZSBzYXZlZC48L2dyZWVuPlxuIik7CgogICAgfQoKICAgICRTZWxmLT5QcmludCgiPGdyZWVuPkV4cG9ydCBjb21wbGV0ZS48L2dyZWVuPlxuIik7CiAgICAkU2VsZi0+UHJpbnQoICI8Z3JlZW4+IiAuICggJy0nIHggNjkgKSAuICI8L2dyZWVuPlxuIiApOwogICAgJFNlbGYtPlByaW50KCI8Z3JlZW4+RG9uZS48L2dyZWVuPlxuIik7CgogICAgcmV0dXJuICRTZWxmLT5FeGl0Q29kZU9rKCk7Cn0KCjE7Cgo9aGVhZDEgVEVSTVMgQU5EIENPTkRJVElPTlMKClRoaXMgc29mdHdhcmUgaXMgcGFydCBvZiB0aGUgT1RSUyBwcm9qZWN0IChMPGh0dHBzOi8vb3Rycy5vcmcvPikuCgpUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQp0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChHUEwpLiBJZiB5b3UKZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIEw8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwtMy4wLnR4dD4uCgo9Y3V0Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CnVzZSB1dGY4OwoKdXNlIHZhcnMgcXcoJFNlbGYpOwoKIyBnZXQgbmVlZGVkIG9iamVjdHMKbXkgJENvbmZpZ09iamVjdCAgICAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyk7Cm15ICRVc2VyT2JqZWN0ICAgICAgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VXNlcicpOwpteSAkSW1wb3J0RXhwb3J0T2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkltcG9ydEV4cG9ydCcpOwpteSAkSGVscGVyICAgICAgICAgICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlVuaXRUZXN0OjpIZWxwZXInKTsKCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKIyBtYWtlIHByZXBhcmF0aW9ucwojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCgojIGNyZWF0ZSBuZWVkZWQgdXNlcnMKbXkgQFVzZXJJRHM7CnsKCiAgICAjIGRpc2FibGUgZW1haWwgY2hlY2tzIHRvIGNyZWF0ZSBuZXcgdXNlcgogICAgbXkgJENoZWNrRW1haWxBZGRyZXNzZXNPcmcgPQogICAgICAgICRDb25maWdPYmplY3QtPkdldCgnQ2hlY2tFbWFpbEFkZHJlc3NlcycpIHx8IDE7CgogICAgJENvbmZpZ09iamVjdC0+U2V0KAogICAgICAgIEtleSAgID0+ICdDaGVja0VtYWlsQWRkcmVzc2VzJywKICAgICAgICBWYWx1ZSA9PiAwLAogICAgKTsKCiAgICBmb3IgbXkgJENvdW50ZXIgKCAxIC4uIDIgKSB7CgogICAgICAgICMgY3JlYXRlIG5ldyB1c2VycyBmb3IgdGhlIHRlc3RzCiAgICAgICAgbXkgJFVzZXJJRCA9ICRVc2VyT2JqZWN0LT5Vc2VyQWRkKAogICAgICAgICAgICBVc2VyRmlyc3RuYW1lID0+ICdJbXBvcnRFeHBvcnQnIC4gJENvdW50ZXIsCiAgICAgICAgICAgIFVzZXJMYXN0bmFtZSAgPT4gJ1VuaXRUZXN0JywKICAgICAgICAgICAgVXNlckxvZ2luICAgICA9PiAnVW5pdFRlc3QtSW1wb3J0RXhwb3J0LScgLiAkQ291bnRlciAuICRIZWxwZXItPkdldFJhbmRvbUlEKCksCiAgICAgICAgICAgIFVzZXJFbWFpbCAgICAgPT4gJ1VuaXRUZXN0LUltcG9ydEV4cG9ydC0nIC4gJENvdW50ZXIgLiAnQGxvY2FsaG9zdCcsCiAgICAgICAgICAgIFZhbGlkSUQgICAgICAgPT4gMSwKICAgICAgICAgICAgQ2hhbmdlVXNlcklEICA9PiAxLAogICAgICAgICk7CgogICAgICAgIHB1c2ggQFVzZXJJRHMsICRVc2VySUQ7CiAgICB9CgogICAgIyByZXN0b3JlIG9yaWdpbmFsIGVtYWlsIGNoZWNrIHBhcmFtCgogICAgJENvbmZpZ09iamVjdC0+U2V0KAogICAgICAgIEtleSAgID0+ICdDaGVja0VtYWlsQWRkcmVzc2VzJywKICAgICAgICBWYWx1ZSA9PiAkQ2hlY2tFbWFpbEFkZHJlc3Nlc09yZywKICAgICk7Cn0KCiMgY3JlYXRlIG5lZWRlZCByYW5kb20gdGVtcGxhdGUgbmFtZXMKbXkgQFRlbXBsYXRlTmFtZTsKCmZvciBteSAkQ291bnRlciAoIDEgLi4gNSApIHsKCiAgICBwdXNoIEBUZW1wbGF0ZU5hbWUsICdVbml0VGVzdCcgLiAkSGVscGVyLT5HZXRSYW5kb21JRCgpOwp9CgojIGNyZWF0ZSBuZWVkZWQgcmFuZG9tIG9iamVjdCBuYW1lcwpteSBAT2JqZWN0TmFtZTsKcHVzaCBAT2JqZWN0TmFtZSwgJ1VuaXRUZXN0JyAuICRIZWxwZXItPkdldFJhbmRvbUlEKCk7CgojIGNyZWF0ZSBuZWVkZWQgZm9ybWF0IG5hbWVzCm15IEBGb3JtYXROYW1lID0gKCdDU1YnKTsKCiMgZ2V0IG9yaWdpbmFsIHRlbXBsYXRlIGxpc3QgZm9yIGxhdGVyIGNoZWNrcyAoYWxsIGVsZW1lbnRzKQpteSAkVGVtcGxhdGVMaXN0MUFsbCA9ICRJbXBvcnRFeHBvcnRPYmplY3QtPlRlbXBsYXRlTGlzdCgKICAgIFVzZXJJRCA9PiAxLAopOwoKIyBnZXQgb3JpZ2luYWwgdGVtcGxhdGUgbGlzdCBmb3IgbGF0ZXIgY2hlY2tzIChhbGwgZWxlbWVudHMpCm15ICRUZW1wbGF0ZUxpc3QxT2JqZWN0ID0gJEltcG9ydEV4cG9ydE9iamVjdC0+VGVtcGxhdGVMaXN0KAogICAgT2JqZWN0ID0+ICRPYmplY3ROYW1lWzBdLAogICAgVXNlcklEID0+IDEsCik7CgojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiMgZGVmaW5lIGdlbmVyYWwgdGVzdHMKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwoKbXkgJEl0ZW1EYXRhID0gWwoKICAgICMgdGhpcyB0ZW1wbGF0ZSBpcyBOT1QgY29tcGxldGUgYW5kIG11c3Qgbm90IGJlIGFkZGVkCiAgICB7CiAgICAgICAgQWRkID0+IHsKICAgICAgICAgICAgRm9ybWF0ICA9PiAkRm9ybWF0TmFtZVswXSwKICAgICAgICAgICAgTmFtZSAgICA9PiAkVGVtcGxhdGVOYW1lWzBdLAogICAgICAgICAgICBWYWxpZElEID0+IDEsCiAgICAgICAgICAgIFVzZXJJRCAgPT4gMSwKICAgICAgICB9LAogICAgfSwKCiAgICAjIHRoaXMgdGVtcGxhdGUgaXMgTk9UIGNvbXBsZXRlIGFuZCBtdXN0IG5vdCBiZSBhZGRlZAogICAgewogICAgICAgIEFkZCA9PiB7CiAgICAgICAgICAgIE9iamVjdCAgPT4gJE9iamVjdE5hbWVbMF0sCiAgICAgICAgICAgIE5hbWUgICAgPT4gJFRlbXBsYXRlTmFtZVswXSwKICAgICAgICAgICAgVmFsaWRJRCA9PiAxLAogICAgICAgICAgICBVc2VySUQgID0+IDEsCiAgICAgICAgfSwKICAgIH0sCgogICAgIyB0aGlzIHRlbXBsYXRlIGlzIE5PVCBjb21wbGV0ZSBhbmQgbXVzdCBub3QgYmUgYWRkZWQKICAgIHsKICAgICAgICBBZGQgPT4gewogICAgICAgICAgICBPYmplY3QgID0+ICRPYmplY3ROYW1lWzBdLAogICAgICAgICAgICBGb3JtYXQgID0+ICRGb3JtYXROYW1lWzBdLAogICAgICAgICAgICBWYWxpZElEID0+IDEsCiAgICAgICAgICAgIFVzZXJJRCAgPT4gMSwKICAgICAgICB9LAogICAgfSwKCiAgICAjIHRoaXMgdGVtcGxhdGUgaXMgTk9UIGNvbXBsZXRlIGFuZCBtdXN0IG5vdCBiZSBhZGRlZAogICAgewogICAgICAgIEFkZCA9PiB7CiAgICAgICAgICAgIE9iamVjdCA9PiAkT2JqZWN0TmFtZVswXSwKICAgICAgICAgICAgRm9ybWF0ID0+ICRGb3JtYXROYW1lWzBdLAogICAgICAgICAgICBOYW1lICAgPT4gJFRlbXBsYXRlTmFtZVswXSwKICAgICAgICAgICAgVXNlcklEID0+IDEsCiAgICAgICAgfSwKICAgIH0sCgogICAgIyB0aGlzIHRlbXBsYXRlIGlzIE5PVCBjb21wbGV0ZSBhbmQgbXVzdCBub3QgYmUgYWRkZWQKICAgIHsKICAgICAgICBBZGQgPT4gewogICAgICAgICAgICBPYmplY3QgID0+ICRPYmplY3ROYW1lWzBdLAogICAgICAgICAgICBGb3JtYXQgID0+ICRGb3JtYXROYW1lWzBdLAogICAgICAgICAgICBOYW1lICAgID0+ICRUZW1wbGF0ZU5hbWVbMF0sCiAgICAgICAgICAgIFZhbGlkSUQgPT4gMSwKICAgICAgICB9LAogICAgfSwKCiAgICAjIHRoaXMgdGVtcGxhdGUgbXVzdCBiZSBpbnNlcnRlZCBzdWNjZXNzZnVsbHkKICAgIHsKICAgICAgICBBZGQgPT4gewogICAgICAgICAgICBPYmplY3QgID0+ICRPYmplY3ROYW1lWzBdLAogICAgICAgICAgICBGb3JtYXQgID0+ICRGb3JtYXROYW1lWzBdLAogICAgICAgICAgICBOYW1lICAgID0+ICRUZW1wbGF0ZU5hbWVbMF0sCiAgICAgICAgICAgIFZhbGlkSUQgPT4gMSwKICAgICAgICAgICAgVXNlcklEICA9PiAxLAogICAgICAgIH0sCiAgICAgICAgQWRkR2V0ID0+IHsKICAgICAgICAgICAgT2JqZWN0ICAgPT4gJE9iamVjdE5hbWVbMF0sCiAgICAgICAgICAgIEZvcm1hdCAgID0+ICRGb3JtYXROYW1lWzBdLAogICAgICAgICAgICBOYW1lICAgICA9PiAkVGVtcGxhdGVOYW1lWzBdLAogICAgICAgICAgICBWYWxpZElEICA9PiAxLAogICAgICAgICAgICBDb21tZW50ICA9PiAnJywKICAgICAgICAgICAgQ3JlYXRlQnkgPT4gMSwKICAgICAgICAgICAgQ2hhbmdlQnkgPT4gMSwKICAgICAgICB9LAogICAgfSwKCiAgICAjIHRoaXMgdGVtcGxhdGUgaGF2ZSB0aGUgc2FtZSBuYW1lIGFzIG9uZSB0ZXN0IGJlZm9yZSBhbmQgbXVzdCBub3QgYmUgYWRkZWQKICAgIHsKICAgICAgICBBZGQgPT4gewogICAgICAgICAgICBPYmplY3QgID0+ICRPYmplY3ROYW1lWzBdLAogICAgICAgICAgICBGb3JtYXQgID0+ICRGb3JtYXROYW1lWzBdLAogICAgICAgICAgICBOYW1lICAgID0+ICRUZW1wbGF0ZU5hbWVbMF0sCiAgICAgICAgICAgIFZhbGlkSUQgPT4gMSwKICAgICAgICAgICAgVXNlcklEICA9PiAxLAogICAgICAgIH0sCiAgICB9LAoKICAgICMgdGhpcyB0ZW1wbGF0ZSBtdXN0IGJlIGluc2VydGVkIHN1Y2Nlc3NmdWxseQogICAgewogICAgICAgIEFkZCA9PiB7CiAgICAgICAgICAgIE9iamVjdCAgPT4gJE9iamVjdE5hbWVbMF0sCiAgICAgICAgICAgIEZvcm1hdCAgPT4gJEZvcm1hdE5hbWVbMF0sCiAgICAgICAgICAgIE5hbWUgICAgPT4gJFRlbXBsYXRlTmFtZVsxXSwKICAgICAgICAgICAgVmFsaWRJRCA9PiAxLAogICAgICAgICAgICBDb21tZW50ID0+ICdUZXN0Q29tbWVudCcsCiAgICAgICAgICAgIFVzZXJJRCAgPT4gMSwKICAgICAgICB9LAogICAgICAgIEFkZEdldCA9PiB7CiAgICAgICAgICAgIE9iamVjdCAgID0+ICRPYmplY3ROYW1lWzBdLAogICAgICAgICAgICBGb3JtYXQgICA9PiAkRm9ybWF0TmFtZVswXSwKICAgICAgICAgICAgTmFtZSAgICAgPT4gJFRlbXBsYXRlTmFtZVsxXSwKICAgICAgICAgICAgVmFsaWRJRCAgPT4gMSwKICAgICAgICAgICAgQ29tbWVudCAgPT4gJ1Rlc3RDb21tZW50JywKICAgICAgICAgICAgQ3JlYXRlQnkgPT4gMSwKICAgICAgICAgICAgQ2hhbmdlQnkgPT4gMSwKICAgICAgICB9LAogICAgfSwKCiAgICAjIHRoZSB0ZW1wbGF0ZSBvbmUgYWRkLXRlc3QgYmVmb3JlIG11c3QgYmUgTk9UIHVwZGF0ZWQgKHRlbXBsYXRlIHVwZGF0ZSBhcmd1bWVudHMgTk9UIGNvbXBsZXRlKQogICAgewogICAgICAgIFVwZGF0ZSA9PiB7CiAgICAgICAgICAgIFZhbGlkSUQgPT4gMiwKICAgICAgICAgICAgVXNlcklEICA9PiAkVXNlcklEc1swXSwKICAgICAgICB9LAogICAgfSwKCiAgICAjIHRoZSB0ZW1wbGF0ZSBvbmUgYWRkLXRlc3QgYmVmb3JlIG11c3QgYmUgTk9UIHVwZGF0ZWQgKHRlbXBsYXRlIHVwZGF0ZSBhcmd1bWVudHMgTk9UIGNvbXBsZXRlKQogICAgewogICAgICAgIFVwZGF0ZSA9PiB7CiAgICAgICAgICAgIE5hbWUgICA9PiAkVGVtcGxhdGVOYW1lWzFdIC4gJ1VQREFURTEnLAogICAgICAgICAgICBVc2VySUQgPT4gJFVzZXJJRHNbMF0sCiAgICAgICAgfSwKICAgIH0sCgogICAgIyB0aGUgdGVtcGxhdGUgb25lIGFkZC10ZXN0IGJlZm9yZSBtdXN0IGJlIE5PVCB1cGRhdGVkICh0ZW1wbGF0ZSB1cGRhdGUgYXJndW1lbnRzIE5PVCBjb21wbGV0ZSkKICAgIHsKICAgICAgICBVcGRhdGUgPT4gewogICAgICAgICAgICBOYW1lICAgID0+ICRUZW1wbGF0ZU5hbWVbMV0gLiAnVVBEQVRFMicsCiAgICAgICAgICAgIFZhbGlkSUQgPT4gMiwKICAgICAgICB9LAogICAgfSwKCiAgICAjIHRoZSB0ZW1wbGF0ZSBvbmUgYWRkLXRlc3QgYmVmb3JlIG11c3QgYmUgdXBkYXRlZCAodGVtcGxhdGUgdXBkYXRlIGFyZ3VtZW50cyBhcmUgY29tcGxldGUpCiAgICB7CiAgICAgICAgVXBkYXRlID0+IHsKICAgICAgICAgICAgTmFtZSAgICA9PiAkVGVtcGxhdGVOYW1lWzFdIC4gJ1VQREFURTMnLAogICAgICAgICAgICBDb21tZW50ID0+ICdUZXN0Q29tbWVudCBVUERBVEUzJywKICAgICAgICAgICAgVmFsaWRJRCA9PiAyLAogICAgICAgICAgICBVc2VySUQgID0+ICRVc2VySURzWzBdLAogICAgICAgIH0sCiAgICAgICAgVXBkYXRlR2V0ID0+IHsKICAgICAgICAgICAgTmFtZSAgICAgPT4gJFRlbXBsYXRlTmFtZVsxXSAuICdVUERBVEUzJywKICAgICAgICAgICAgVmFsaWRJRCAgPT4gMiwKICAgICAgICAgICAgQ29tbWVudCAgPT4gJ1Rlc3RDb21tZW50IFVQREFURTMnLAogICAgICAgICAgICBDcmVhdGVCeSA9PiAxLAogICAgICAgICAgICBDaGFuZ2VCeSA9PiAkVXNlcklEc1swXSwKICAgICAgICB9LAogICAgfSwKCiAgICAjIHRoZSB0ZW1wbGF0ZSBvbmUgYWRkLXRlc3QgYmVmb3JlIG11c3QgYmUgdXBkYXRlZCAodGVtcGxhdGUgdXBkYXRlIGFyZ3VtZW50cyBhcmUgY29tcGxldGUpCiAgICB7CiAgICAgICAgVXBkYXRlID0+IHsKICAgICAgICAgICAgTmFtZSAgICA9PiAkVGVtcGxhdGVOYW1lWzFdIC4gJ1VQREFURTQnLAogICAgICAgICAgICBWYWxpZElEID0+IDEsCiAgICAgICAgICAgIENvbW1lbnQgPT4gJycsCiAgICAgICAgICAgIFVzZXJJRCAgPT4gMSwKICAgICAgICB9LAogICAgICAgIFVwZGF0ZUdldCA9PiB7CiAgICAgICAgICAgIE5hbWUgICAgID0+ICRUZW1wbGF0ZU5hbWVbMV0gLiAnVVBEQVRFNCcsCiAgICAgICAgICAgIFZhbGlkSUQgID0+IDEsCiAgICAgICAgICAgIENvbW1lbnQgID0+ICcnLAogICAgICAgICAgICBDcmVhdGVCeSA9PiAxLAogICAgICAgICAgICBDaGFuZ2VCeSA9PiAxLAogICAgICAgIH0sCiAgICB9LAoKICAgICMgdGhpcyB0ZW1wbGF0ZSBtdXN0IGJlIGluc2VydGVkIHN1Y2Nlc3NmdWxseSAoY2hlY2sgc3RyaW5nIGNsZWFuZXIgZnVuY3Rpb24pCiAgICB7CiAgICAgICAgQWRkID0+IHsKICAgICAgICAgICAgT2JqZWN0ICA9PiAiIFx0IFxuIFxyICIgLiAkT2JqZWN0TmFtZVswXSAuICIgXHQgXG4gXHIgIiwKICAgICAgICAgICAgRm9ybWF0ICA9PiAiIFx0IFxuIFxyICIgLiAkRm9ybWF0TmFtZVswXSAuICIgXHQgXG4gXHIgIiwKICAgICAgICAgICAgTmFtZSAgICA9PiAiIFx0IFxuIFxyICIgLiAkVGVtcGxhdGVOYW1lWzJdIC4gIiBcdCBcbiBcciAiLAogICAgICAgICAgICBWYWxpZElEID0+IDEsCiAgICAgICAgICAgIENvbW1lbnQgPT4gIiBcdCBcbiBcciBUZXN0IENvbW1lbnQgXHQgXG4gXHIgIiwKICAgICAgICAgICAgVXNlcklEICA9PiAxLAogICAgICAgIH0sCiAgICAgICAgQWRkR2V0ID0+IHsKICAgICAgICAgICAgT2JqZWN0ICAgPT4gJE9iamVjdE5hbWVbMF0sCiAgICAgICAgICAgIEZvcm1hdCAgID0+ICRGb3JtYXROYW1lWzBdLAogICAgICAgICAgICBOYW1lICAgICA9PiAkVGVtcGxhdGVOYW1lWzJdLAogICAgICAgICAgICBWYWxpZElEICA9PiAxLAogICAgICAgICAgICBDb21tZW50ICA9PiAnVGVzdCBDb21tZW50JywKICAgICAgICAgICAgQ3JlYXRlQnkgPT4gMSwKICAgICAgICAgICAgQ2hhbmdlQnkgPT4gMSwKICAgICAgICB9LAogICAgfSwKCiAgICAjIHRoZSB0ZW1wbGF0ZSBvbmUgYWRkLXRlc3QgYmVmb3JlIG11c3QgYmUgdXBkYXRlZCAoY2hlY2sgc3RyaW5nIGNsZWFuZXIgZnVuY3Rpb24pCiAgICB7CiAgICAgICAgVXBkYXRlID0+IHsKICAgICAgICAgICAgTmFtZSAgICA9PiAiIFx0IFxuIFxyICIgLiAkVGVtcGxhdGVOYW1lWzJdIC4gIlVQREFURTEgXHQgXG4gXHIgIiwKICAgICAgICAgICAgVmFsaWRJRCA9PiAxLAogICAgICAgICAgICBDb21tZW50ID0+ICIgXHQgXG4gXHIgVGVzdCBDb21tZW50IFVQREFURTEgXHQgXG4gXHIgIiwKICAgICAgICAgICAgVXNlcklEICA9PiAxLAogICAgICAgIH0sCiAgICAgICAgVXBkYXRlR2V0ID0+IHsKICAgICAgICAgICAgTmFtZSAgICAgPT4gJFRlbXBsYXRlTmFtZVsyXSAuICdVUERBVEUxJywKICAgICAgICAgICAgVmFsaWRJRCAgPT4gMSwKICAgICAgICAgICAgQ29tbWVudCAgPT4gJ1Rlc3QgQ29tbWVudCBVUERBVEUxJywKICAgICAgICAgICAgQ3JlYXRlQnkgPT4gMSwKICAgICAgICAgICAgQ2hhbmdlQnkgPT4gMSwKICAgICAgICB9LAogICAgfSwKCiAgICAjIHRoaXMgdGVtcGxhdGUgbXVzdCBiZSBpbnNlcnRlZCBzdWNjZXNzZnVsbHkgKFVuaWNvZGUgY2hlY2tzKQogICAgewogICAgICAgIEFkZCA9PiB7CiAgICAgICAgICAgIE9iamVjdCAgPT4gJyDGlSDGmCAnIC4gJE9iamVjdE5hbWVbMF0gLiAnIMa1IMa7ICcsCiAgICAgICAgICAgIEZvcm1hdCAgPT4gJyDHkyDHoyAnIC4gJEZvcm1hdE5hbWVbMF0gLiAnIMelIMeuICcsCiAgICAgICAgICAgIE5hbWUgICAgPT4gJyDHtyDInCAnIC4gJFRlbXBsYXRlTmFtZVszXSAuICcgyJ4gyKAgJywKICAgICAgICAgICAgVmFsaWRJRCA9PiAyLAogICAgICAgICAgICBDb21tZW50ID0+ICcg0aAg0aQgVGVzdENvbW1lbnQ1IM+gIM6pICcsCiAgICAgICAgICAgIFVzZXJJRCAgPT4gMSwKICAgICAgICB9LAogICAgICAgIEFkZEdldCA9PiB7CiAgICAgICAgICAgIE9iamVjdCAgID0+ICfGlcaYJyAuICRPYmplY3ROYW1lWzBdIC4gJ8a1xrsnLAogICAgICAgICAgICBGb3JtYXQgICA9PiAnx5PHoycgLiAkRm9ybWF0TmFtZVswXSAuICfHpceuJywKICAgICAgICAgICAgTmFtZSAgICAgPT4gJ8e3IMicICcgLiAkVGVtcGxhdGVOYW1lWzNdIC4gJyDIniDIoCcsCiAgICAgICAgICAgIFZhbGlkSUQgID0+IDIsCiAgICAgICAgICAgIENvbW1lbnQgID0+ICfRoCDRpCBUZXN0Q29tbWVudDUgz6AgzqknLAogICAgICAgICAgICBDcmVhdGVCeSA9PiAxLAogICAgICAgICAgICBDaGFuZ2VCeSA9PiAxLAogICAgICAgIH0sCiAgICB9LApdOwoKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwojIHJ1biBnZW5lcmFsIHRlc3RzCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKCm15ICRUZXN0Q291bnQgPSAxOwpteSBAQWRkZWRUZW1wbGF0ZUlEczsKClRFTVBMQVRFOgpmb3IgbXkgJEl0ZW0gKCBAeyRJdGVtRGF0YX0gKSB7CgogICAgaWYgKCAkSXRlbS0+e0FkZH0gKSB7CgogICAgICAgICMgYWRkIG5ldyB0ZW1wbGF0ZQogICAgICAgIG15ICRUZW1wbGF0ZUlEID0gJEltcG9ydEV4cG9ydE9iamVjdC0+VGVtcGxhdGVBZGQoICV7ICRJdGVtLT57QWRkfSB9ICk7CgogICAgICAgIGlmICgkVGVtcGxhdGVJRCkgewogICAgICAgICAgICBwdXNoIEBBZGRlZFRlbXBsYXRlSURzLCAkVGVtcGxhdGVJRDsKICAgICAgICB9CgogICAgICAgICMgY2hlY2sgaWYgdGVtcGxhdGUgd2FzIGFkZGVkIHN1Y2Nlc3NmdWxseSBvciBub3QKICAgICAgICBpZiAoICRJdGVtLT57QWRkR2V0fSApIHsKICAgICAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICAgICAkVGVtcGxhdGVJRCwKICAgICAgICAgICAgICAgICJUZXN0ICRUZXN0Q291bnQ6IFRlbXBsYXRlQWRkKCkgLSBUZW1wbGF0ZUtleTogJFRlbXBsYXRlSUQiCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICAkU2VsZi0+RmFsc2UoICRUZW1wbGF0ZUlELCAiVGVzdCAkVGVzdENvdW50OiBUZW1wbGF0ZUFkZCgpIiApOwogICAgICAgIH0KICAgIH0KCiAgICBpZiAoICRJdGVtLT57QWRkR2V0fSApIHsKCiAgICAgICAgIyBnZXQgdGVtcGxhdGUgZGF0YSB0byBjaGVjayB0aGUgdmFsdWVzIGFmdGVyIHRlbXBsYXRlIHdhcyBhZGRlZAogICAgICAgIG15ICRUZW1wbGF0ZUdldCA9ICRJbXBvcnRFeHBvcnRPYmplY3QtPlRlbXBsYXRlR2V0KAogICAgICAgICAgICBUZW1wbGF0ZUlEID0+ICRBZGRlZFRlbXBsYXRlSURzWy0xXSwKICAgICAgICAgICAgVXNlcklEICAgICA9PiAkSXRlbS0+e0FkZH0tPntVc2VySUR9IHx8IDEsCiAgICAgICAgKTsKCiAgICAgICAgIyBjaGVjayB0ZW1wbGF0ZSBkYXRhIGFmdGVyIGNyZWF0aW9uIG9mIHRlbXBsYXRlCiAgICAgICAgZm9yIG15ICRUZW1wbGF0ZUF0dHJpYnV0ZSAoIHNvcnQga2V5cyAleyAkSXRlbS0+e0FkZEdldH0gfSApIHsKICAgICAgICAgICAgJFNlbGYtPklzKAogICAgICAgICAgICAgICAgJFRlbXBsYXRlR2V0LT57JFRlbXBsYXRlQXR0cmlidXRlfSB8fCAnJywKICAgICAgICAgICAgICAgICRJdGVtLT57QWRkR2V0fS0+eyRUZW1wbGF0ZUF0dHJpYnV0ZX0gfHwgJycsCiAgICAgICAgICAgICAgICAiVGVzdCAkVGVzdENvdW50OiBUZW1wbGF0ZUdldCgpIC0gJFRlbXBsYXRlQXR0cmlidXRlIiwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICB9CgogICAgaWYgKCAkSXRlbS0+e1VwZGF0ZX0gKSB7CgogICAgICAgICMgY2hlY2sgbGFzdCB0ZW1wbGF0ZSBpZCB2YXJpYWJsZQogICAgICAgIGlmICggISRBZGRlZFRlbXBsYXRlSURzWy0xXSApIHsKICAgICAgICAgICAgJFNlbGYtPkZhbHNlKAogICAgICAgICAgICAgICAgMSwKICAgICAgICAgICAgICAgICJUZXN0ICRUZXN0Q291bnQ6IE5PIExBU1QgSVRFTSBJRCBHSVZFTi4gUGxlYXNlIGFkZCBhIHRlbXBsYXRlIGZpcnN0LiIKICAgICAgICAgICAgKTsKICAgICAgICAgICAgbGFzdCBURU1QTEFURTsKICAgICAgICB9CgogICAgICAgICMgdXBkYXRlIHRoZSB0ZW1wbGF0ZQogICAgICAgIG15ICRVcGRhdGVTdWNlc3MgPSAkSW1wb3J0RXhwb3J0T2JqZWN0LT5UZW1wbGF0ZVVwZGF0ZSgKICAgICAgICAgICAgJXsgJEl0ZW0tPntVcGRhdGV9IH0sCiAgICAgICAgICAgIFRlbXBsYXRlSUQgPT4gJEFkZGVkVGVtcGxhdGVJRHNbLTFdLAogICAgICAgICk7CgogICAgICAgICMgY2hlY2sgaWYgdGVtcGxhdGUgd2FzIHVwZGF0ZWQgc3VjY2Vzc2Z1bGx5IG9yIG5vdAogICAgICAgIGlmICggJEl0ZW0tPntVcGRhdGVHZXR9ICkgewogICAgICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgICAgICRVcGRhdGVTdWNlc3MsCiAgICAgICAgICAgICAgICAiVGVzdCAkVGVzdENvdW50OiBUZW1wbGF0ZVVwZGF0ZSgpIC0gVGVtcGxhdGVLZXk6ICRBZGRlZFRlbXBsYXRlSURzWy0xXSIsCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICAkU2VsZi0+RmFsc2UoCiAgICAgICAgICAgICAgICAkVXBkYXRlU3VjZXNzLAogICAgICAgICAgICAgICAgIlRlc3QgJFRlc3RDb3VudDogVGVtcGxhdGVVcGRhdGUoKSIsCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgfQoKICAgIGlmICggJEl0ZW0tPntVcGRhdGVHZXR9ICkgewoKICAgICAgICAjIGdldCB0ZW1wbGF0ZSBkYXRhIHRvIGNoZWNrIHRoZSB2YWx1ZXMgYWZ0ZXIgdGhlIHVwZGF0ZQogICAgICAgIG15ICRUZW1wbGF0ZUdldCA9ICRJbXBvcnRFeHBvcnRPYmplY3QtPlRlbXBsYXRlR2V0KAogICAgICAgICAgICBUZW1wbGF0ZUlEID0+ICRBZGRlZFRlbXBsYXRlSURzWy0xXSwKICAgICAgICAgICAgVXNlcklEICAgICA9PiAkSXRlbS0+e1VwZGF0ZX0tPntVc2VySUR9IHx8IDEsCiAgICAgICAgKTsKCiAgICAgICAgIyBjaGVjayB0ZW1wbGF0ZSBkYXRhIGFmdGVyIHVwZGF0ZQogICAgICAgIGZvciBteSAkVGVtcGxhdGVBdHRyaWJ1dGUgKCBzb3J0IGtleXMgJXsgJEl0ZW0tPntVcGRhdGVHZXR9IH0gKSB7CiAgICAgICAgICAgICRTZWxmLT5JcygKICAgICAgICAgICAgICAgICRUZW1wbGF0ZUdldC0+eyRUZW1wbGF0ZUF0dHJpYnV0ZX0gfHwgJycsCiAgICAgICAgICAgICAgICAkSXRlbS0+e1VwZGF0ZUdldH0tPnskVGVtcGxhdGVBdHRyaWJ1dGV9IHx8ICcnLAogICAgICAgICAgICAgICAgIlRlc3QgJFRlc3RDb3VudDogVGVtcGxhdGVHZXQoKSAtICRUZW1wbGF0ZUF0dHJpYnV0ZSIsCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgfQp9CmNvbnRpbnVlIHsKCiAgICAjIGluY3JlbWVudCB0aGUgY291bnRlcgogICAgJFRlc3RDb3VudCsrOwp9CgojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiMgVGVtcGxhdGVMaXN0IHRlc3QgMSAoY2hlY2sgYXJyYXkgcmVmZXJlbmNlcykKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwoKIyBsaXN0IG11c3QgYmUgYW4gZW1wdHkgYXJyYXkgcmVmZXJlbmNlCiRTZWxmLT5UcnVlKAogICAgcmVmICRUZW1wbGF0ZUxpc3QxQWxsIGVxICdBUlJBWScgJiYgcmVmICRUZW1wbGF0ZUxpc3QxT2JqZWN0IGVxICdBUlJBWScsCiAgICAiVGVzdCAkVGVzdENvdW50OiBUZW1wbGF0ZUxpc3QoKSAtIGFycmF5IHJlZmVyZW5jZXMiLAopOwoKJFRlc3RDb3VudCsrOwoKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwojIFRlbXBsYXRlTGlzdCB0ZXN0IDIgKGxpc3QgbXVzdCBiZSBlbXB0eSkKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwoKIyBsaXN0IG11c3QgYmUgYW4gZW1wdHkgbGlzdAokU2VsZi0+VHJ1ZSgKICAgIHNjYWxhciBAeyRUZW1wbGF0ZUxpc3QxT2JqZWN0fSBlcSAwLAogICAgIlRlc3QgJFRlc3RDb3VudDogVGVtcGxhdGVMaXN0KCkgLSBlbXB0eSBsaXN0IiwKKTsKCiRUZXN0Q291bnQrKzsKCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKIyBUZW1wbGF0ZUxpc3QgdGVzdCAyIChjaGVjayBjb3JyZWN0IG51bWJlciBvZiBuZXcgaXRlbXMpCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKCiMgZ2V0IHRlbXBsYXRlIGxpc3Qgd2l0aCBhbGwgZWxlbWVudHMKbXkgJFRlbXBsYXRlTGlzdDIgPSAkSW1wb3J0RXhwb3J0T2JqZWN0LT5UZW1wbGF0ZUxpc3QoCiAgICBVc2VySUQgPT4gMSwKKTsKCiMgbGlzdCBtdXN0IGJlIGFuIGFycmF5IHJlZmVyZW5jZQokU2VsZi0+VHJ1ZSgKICAgIHJlZiAkVGVtcGxhdGVMaXN0MiBlcSAnQVJSQVknLAogICAgIlRlc3QgJFRlc3RDb3VudDogVGVtcGxhdGVMaXN0KCkgLSBhcnJheSByZWZlcmVuY2UiLAopOwoKbXkgJFRlbXBsYXRlTGlzdENvdW50ID0gc2NhbGFyIEB7JFRlbXBsYXRlTGlzdDJ9IC0gc2NhbGFyIEB7JFRlbXBsYXRlTGlzdDFBbGx9OwoKIyBjaGVjayBjb3JyZWN0IG51bWJlciBvZiBuZXcgaXRlbXMKJFNlbGYtPlRydWUoCiAgICAkVGVtcGxhdGVMaXN0Q291bnQgZXEgc2NhbGFyIEBBZGRlZFRlbXBsYXRlSURzLAogICAgIlRlc3QgJFRlc3RDb3VudDogVGVtcGxhdGVMaXN0KCkgLSBjb3JyZWN0IG51bWJlciBvZiBuZXcgaXRlbXMiLAopOwoKJFRlc3RDb3VudCsrOwoKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwojIFRlbXBsYXRlRGVsZXRlIHRlc3QgMSAoYWRkIG9uZSB0ZW1wbGF0ZSBhbmQgZGVsZXRlIGl0KQojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCgojIGdldCB0ZW1wbGF0ZSBsaXN0IHdpdGggYWxsIGVsZW1lbnRzCm15ICRUZW1wbGF0ZURlbGV0ZTFMaXN0MSA9ICRJbXBvcnRFeHBvcnRPYmplY3QtPlRlbXBsYXRlTGlzdCgKICAgIE9iamVjdCA9PiAkT2JqZWN0TmFtZVswXSwKICAgIFVzZXJJRCA9PiAxLAopOwoKIyBhZGQgYSB0ZXN0IHRlbXBsYXRlCm15ICRUZW1wbGF0ZURlbGV0ZUlEID0gJEltcG9ydEV4cG9ydE9iamVjdC0+VGVtcGxhdGVBZGQoCiAgICBPYmplY3QgID0+ICRPYmplY3ROYW1lWzBdLAogICAgRm9ybWF0ICA9PiAkRm9ybWF0TmFtZVswXSwKICAgIE5hbWUgICAgPT4gJFRlbXBsYXRlTmFtZVs0XSwKICAgIFZhbGlkSUQgPT4gMSwKICAgIFVzZXJJRCAgPT4gMSwKKTsKCiMgZ2V0IHRlbXBsYXRlIGxpc3Qgd2l0aCBhbGwgZWxlbWVudHMKbXkgJFRlbXBsYXRlRGVsZXRlMUxpc3QyID0gJEltcG9ydEV4cG9ydE9iamVjdC0+VGVtcGxhdGVMaXN0KAogICAgT2JqZWN0ID0+ICRPYmplY3ROYW1lWzBdLAogICAgVXNlcklEID0+IDEsCik7CgojIGxpc3QgbXVzdCBoYXZlIG9uZSBlbGVtZW50IG1vcmUKJFNlbGYtPlRydWUoCiAgICBzY2FsYXIgQHskVGVtcGxhdGVEZWxldGUxTGlzdDF9IGVxICggc2NhbGFyIEB7JFRlbXBsYXRlRGVsZXRlMUxpc3QyfSApIC0gMSwKICAgICJUZXN0ICRUZXN0Q291bnQ6IFRlbXBsYXRlRGVsZXRlKCkgLSBudW1iZXIgb2YgbGlzdGVkIGVsZW1lbnRzIiwKKTsKCiMgZGVsZXRlIHRoZSBuZXcgdGVtcGxhdGUKbXkgJFRlbXBsYXRlRGVsZXRlMSA9ICRJbXBvcnRFeHBvcnRPYmplY3QtPlRlbXBsYXRlRGVsZXRlKAogICAgVGVtcGxhdGVJRCA9PiAkVGVtcGxhdGVEZWxldGVJRCwKICAgIFVzZXJJRCAgICAgPT4gMSwKKTsKCiMgbGlzdCBtdXN0IGJlIHN1Y2Nlc3NmdWwKJFNlbGYtPlRydWUoCiAgICAkVGVtcGxhdGVEZWxldGUxLAogICAgIlRlc3QgJFRlc3RDb3VudDogVGVtcGxhdGVEZWxldGUoKSIsCik7CgojIGdldCB0ZW1wbGF0ZSBsaXN0IHdpdGggYWxsIGVsZW1lbnRzCm15ICRUZW1wbGF0ZURlbGV0ZTFMaXN0MyA9ICRJbXBvcnRFeHBvcnRPYmplY3QtPlRlbXBsYXRlTGlzdCgKICAgIE9iamVjdCA9PiAkT2JqZWN0TmFtZVswXSwKICAgIFVzZXJJRCA9PiAxLAopOwoKIyBsaXN0IG11c3QgaGF2ZSB0aGUgb3JpZ2luYWwgbnVtYmVyIG9mIGVsZW1lbnRzCiRTZWxmLT5UcnVlKAogICAgc2NhbGFyIEB7JFRlbXBsYXRlRGVsZXRlMUxpc3QxfSBlcSBzY2FsYXIgQHskVGVtcGxhdGVEZWxldGUxTGlzdDN9LAogICAgIlRlc3QgJFRlc3RDb3VudDogVGVtcGxhdGVEZWxldGUoKSAtIG51bWJlciBvZiBsaXN0ZWQgZWxlbWVudHMiLAopOwoKJFRlc3RDb3VudCsrOwoKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwojIFRlbXBsYXRlRGVsZXRlIHRlc3QgMiAoZGVsZXRlIGFsbCB1bml0IHRlc3QgdGVtcGxhdGVzKQojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCgpmb3IgbXkgJFRlbXBsYXRlSUQgKEBBZGRlZFRlbXBsYXRlSURzKSB7CgogICAgIyBkZWxldGUgdGhlIHRlbXBsYXRlCiAgICBteSAkU3VjY2VzcyA9ICRJbXBvcnRFeHBvcnRPYmplY3QtPlRlbXBsYXRlRGVsZXRlKAogICAgICAgIFRlbXBsYXRlSUQgPT4gJFRlbXBsYXRlSUQsCiAgICAgICAgVXNlcklEICAgICA9PiAxLAogICAgKTsKCiAgICAjIGNoZWNrIHN1Y2Nlc3MKICAgICRTZWxmLT5UcnVlKAogICAgICAgICRTdWNjZXNzLAogICAgICAgICJUZXN0ICRUZXN0Q291bnQ6IFRlbXBsYXRlRGVsZXRlKCkgVGVtcGxhdGVJRCAkVGVtcGxhdGVJRCIsCiAgICApOwoKICAgICRUZXN0Q291bnQrKzsKfQoKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwojIE9iamVjdExpc3QgdGVzdCAxIChjaGVjayBnZW5lcmFsIGZ1bmN0aW9uYWxpdHkpCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKCiMgZGVmaW5lIHRlc3QgbGlzdApteSAkT2JqZWN0TGlzdDFUZXN0TGlzdCA9IHsKICAgIFVuaXRUZXN0MSA9PiB7CiAgICAgICAgTW9kdWxlID0+ICdLZXJuZWw6OlN5c3RlbTo6SW1wb3J0RXhwb3J0OjpPYmplY3RCYWNrZW5kOjpVbml0VGVzdDEnLAogICAgICAgIE5hbWUgICA9PiAnVW5pdCBUZXN0IDEnLAogICAgfSwKICAgIFVuaXRUZXN0MiA9PiB7CiAgICAgICAgTW9kdWxlID0+ICdLZXJuZWw6OlN5c3RlbTo6SW1wb3J0RXhwb3J0OjpPYmplY3RCYWNrZW5kOjpVbml0VGVzdDInLAogICAgICAgIE5hbWUgICA9PiAnVW5pdCBUZXN0IDInLAogICAgfSwKfTsKCiMgZ2V0IG9yaWdpbmFsIG9iamVjdCBsaXN0Cm15ICRPYmplY3RMaXN0T3JnID0KICAgICRDb25maWdPYmplY3QtPkdldCgnSW1wb3J0RXhwb3J0OjpPYmplY3RCYWNrZW5kUmVnaXN0cmF0aW9uJyk7CgojIHNldCB0ZXN0IGxpc3QKJENvbmZpZ09iamVjdC0+U2V0KAogICAgS2V5ICAgPT4gJ0ltcG9ydEV4cG9ydDo6T2JqZWN0QmFja2VuZFJlZ2lzdHJhdGlvbicsCiAgICBWYWx1ZSA9PiAkT2JqZWN0TGlzdDFUZXN0TGlzdCwKKTsKCiMgZ2V0IG9iamVjdCBsaXN0Cm15ICRPYmplY3RMaXN0MSA9ICRJbXBvcnRFeHBvcnRPYmplY3QtPk9iamVjdExpc3QoKTsKCiMgbGlzdCBtdXN0IGJlIGEgaGFzaCByZWZlcmVuY2UKJFNlbGYtPlRydWUoCiAgICByZWYgJE9iamVjdExpc3QxIGVxICdIQVNIJywKICAgICJUZXN0ICRUZXN0Q291bnQ6IE9iamVjdExpc3QoKSAtIGhhc2ggcmVmZXJlbmNlIiwKKTsKCiMgY2hlY2sgdGhlIGxpc3QKS0VZOgpmb3IgbXkgJEtleSAoIHNvcnQga2V5cyAleyRPYmplY3RMaXN0MX0gKSB7CgogICAgaWYgKCAhJE9iamVjdExpc3QxVGVzdExpc3QtPnskS2V5fSApIHsKICAgICAgICAkT2JqZWN0TGlzdDFUZXN0TGlzdC0+e0R1bW15fSA9IDE7CiAgICB9CgogICAgbmV4dCBLRVkgaWYgJE9iamVjdExpc3QxLT57JEtleX0gbmUgJE9iamVjdExpc3QxVGVzdExpc3QtPnskS2V5fS0+e05hbWV9OwoKICAgIGRlbGV0ZSAkT2JqZWN0TGlzdDFUZXN0TGlzdC0+eyRLZXl9Owp9CgokU2VsZi0+VHJ1ZSgKICAgICEleyRPYmplY3RMaXN0MVRlc3RMaXN0fSwKICAgICJUZXN0ICRUZXN0Q291bnQ6IE9iamVjdExpc3QoKSAtIGNvbnRlbnQgaXMgdmFsaWQiLAopOwoKIyByZXN0b3JlIG9yaWdpbmFsIG9iamVjdCBsaXN0CiRDb25maWdPYmplY3QtPlNldCgKICAgIEtleSAgID0+ICdJbXBvcnRFeHBvcnQ6Ok9iamVjdEJhY2tlbmRSZWdpc3RyYXRpb24nLAogICAgVmFsdWUgPT4gJE9iamVjdExpc3RPcmcsCik7CgokVGVzdENvdW50Kys7CgojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiMgRm9ybWF0TGlzdCB0ZXN0IDEgKGNoZWNrIGdlbmVyYWwgZnVuY3Rpb25hbGl0eSkKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwoKIyBkZWZpbmUgdGVzdCBsaXN0Cm15ICRGb3JtYXRMaXN0MVRlc3RMaXN0ID0gewogICAgVW5pdFRlc3QxID0+IHsKICAgICAgICBNb2R1bGUgPT4gJ0tlcm5lbDo6U3lzdGVtOjpJbXBvcnRFeHBvcnQ6OkZvcm1hdEJhY2tlbmQ6OlVuaXRUZXN0MScsCiAgICAgICAgTmFtZSAgID0+ICdVbml0IFRlc3QgMScsCiAgICB9LAogICAgVW5pdFRlc3QyID0+IHsKICAgICAgICBNb2R1bGUgPT4gJ0tlcm5lbDo6U3lzdGVtOjpJbXBvcnRFeHBvcnQ6OkZvcm1hdEJhY2tlbmQ6OlVuaXRUZXN0MicsCiAgICAgICAgTmFtZSAgID0+ICdVbml0IFRlc3QgMicsCiAgICB9LAp9OwoKIyBnZXQgb3JpZ2luYWwgZm9ybWF0IGxpc3QKbXkgJEZvcm1hdExpc3RPcmcgPQogICAgJENvbmZpZ09iamVjdC0+R2V0KCdJbXBvcnRFeHBvcnQ6OkZvcm1hdEJhY2tlbmRSZWdpc3RyYXRpb24nKTsKCiMgc2V0IHRlc3QgbGlzdAokQ29uZmlnT2JqZWN0LT5TZXQoCiAgICBLZXkgICA9PiAnSW1wb3J0RXhwb3J0OjpGb3JtYXRCYWNrZW5kUmVnaXN0cmF0aW9uJywKICAgIFZhbHVlID0+ICRGb3JtYXRMaXN0MVRlc3RMaXN0LAopOwoKIyBnZXQgZm9ybWF0IGxpc3QKbXkgJEZvcm1hdExpc3QxID0gJEltcG9ydEV4cG9ydE9iamVjdC0+Rm9ybWF0TGlzdCgpOwoKIyBsaXN0IG11c3QgYmUgYSBoYXNoIHJlZmVyZW5jZQokU2VsZi0+VHJ1ZSgKICAgIHJlZiAkRm9ybWF0TGlzdDEgZXEgJ0hBU0gnLAogICAgIlRlc3QgJFRlc3RDb3VudDogRm9ybWF0TGlzdCgpIC0gaGFzaCByZWZlcmVuY2UiLAopOwoKIyBjaGVjayB0aGUgbGlzdApLRVk6CmZvciBteSAkS2V5ICggc29ydCBrZXlzICV7JEZvcm1hdExpc3QxfSApIHsKCiAgICBpZiAoICEkRm9ybWF0TGlzdDFUZXN0TGlzdC0+eyRLZXl9ICkgewogICAgICAgICRGb3JtYXRMaXN0MVRlc3RMaXN0LT57RHVtbXl9ID0gMTsKICAgIH0KCiAgICBuZXh0IEtFWSBpZiAkRm9ybWF0TGlzdDEtPnskS2V5fSBuZSAkRm9ybWF0TGlzdDFUZXN0TGlzdC0+eyRLZXl9LT57TmFtZX07CgogICAgZGVsZXRlICRGb3JtYXRMaXN0MVRlc3RMaXN0LT57JEtleX07Cn0KCiRTZWxmLT5UcnVlKAogICAgISV7JEZvcm1hdExpc3QxVGVzdExpc3R9LAogICAgIlRlc3QgJFRlc3RDb3VudDogRm9ybWF0TGlzdCgpIC0gY29udGVudCBpcyB2YWxpZCIsCik7CgojIHJlc3RvcmUgb3JpZ2luYWwgZm9ybWF0IGxpc3QKJENvbmZpZ09iamVjdC0+U2V0KAogICAgS2V5ICAgPT4gJ0ltcG9ydEV4cG9ydDo6Rm9ybWF0QmFja2VuZFJlZ2lzdHJhdGlvbicsCiAgICBWYWx1ZSA9PiAkRm9ybWF0TGlzdE9yZywKKTsKCjE7Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CnVzZSB1dGY4OwoKdXNlIHZhcnMgcXcoJFNlbGYpOwoKdXNlIERhdGE6OkR1bXBlcjsKCiMgZ2V0IG5lZWRlZCBvYmplY3RzCm15ICRNYWluT2JqZWN0ICAgICAgICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06Ok1haW4nKTsKbXkgJEltcG9ydEV4cG9ydE9iamVjdCAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SW1wb3J0RXhwb3J0Jyk7Cm15ICRGb3JtYXRCYWNrZW5kT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkltcG9ydEV4cG9ydDo6Rm9ybWF0QmFja2VuZDo6Q1NWJyk7CgojIGdldCBoZWxwZXIgb2JqZWN0CiRLZXJuZWw6Ok9NLT5PYmplY3RQYXJhbUFkZCgKICAgICdLZXJuZWw6OlN5c3RlbTo6VW5pdFRlc3Q6OkhlbHBlcicgPT4gewogICAgICAgIFJlc3RvcmVEYXRhYmFzZSA9PiAxLAogICAgfSwKKTsKbXkgJEhlbHBlciA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpVbml0VGVzdDo6SGVscGVyJyk7CgojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiMgbWFrZSBwcmVwYXJhdGlvbnMKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwoKIyBnZXQgaG9tZSBkaXJlY3RvcnkKJFNlbGYtPntIb21lfSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyktPkdldCgnSG9tZScpOwoKIyBhZGQgc29tZSB0ZXN0IHRlbXBsYXRlcyBmb3IgbGF0ZXIgY2hlY2tzCm15IEBUZW1wbGF0ZUlEczsKZm9yICggMSAuLiAzMCApIHsKCiAgICBteSAkUmFuZG9tSUQgPSAkSGVscGVyLT5HZXRSYW5kb21JRCgpOwoKICAgICMgYWRkIGEgdGVzdCB0ZW1wbGF0ZSBmb3IgbGF0ZXIgY2hlY2tzCiAgICBteSAkVGVtcGxhdGVJRCA9ICRJbXBvcnRFeHBvcnRPYmplY3QtPlRlbXBsYXRlQWRkKAogICAgICAgIE9iamVjdCAgPT4gJ1VuaXRUZXN0JyAuICRSYW5kb21JRCwKICAgICAgICBGb3JtYXQgID0+ICdDU1YnLAogICAgICAgIE5hbWUgICAgPT4gJ1VuaXRUZXN0JyAuICRSYW5kb21JRCwKICAgICAgICBWYWxpZElEID0+IDEsCiAgICAgICAgVXNlcklEICA9PiAxLAogICAgKTsKCiAgICBwdXNoIEBUZW1wbGF0ZUlEcywgJFRlbXBsYXRlSUQ7Cn0KCm15ICRUZXN0Q291bnQgPSAxOwoKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwojIEZvcm1hdExpc3QgdGVzdCAxIChjaGVjayBDU1YgaXRlbSkKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwoKIyBnZXQgZm9ybWF0IGxpc3QKbXkgJEZvcm1hdExpc3QxID0gJEltcG9ydEV4cG9ydE9iamVjdC0+Rm9ybWF0TGlzdCgpOwoKIyBjaGVjayBmb3JtYXQgbGlzdAokU2VsZi0+VHJ1ZSgKICAgICRGb3JtYXRMaXN0MSAmJiByZWYgJEZvcm1hdExpc3QxIGVxICdIQVNIJyAmJiAkRm9ybWF0TGlzdDEtPntDU1Z9LAogICAgIlRlc3QgJFRlc3RDb3VudDogRm9ybWF0TGlzdCgpIC0gQ1NWIGV4aXN0cyIsCik7CgokVGVzdENvdW50Kys7CgojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiMgRm9ybWF0QXR0cmlidXRlc0dldCB0ZXN0IDEgKGNoZWNrIGF0dHJpYnV0ZSBoYXNoKQojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCgojIGdldCBmb3JtYXQgYXR0cmlidXRlcwpteSAkRm9ybWF0QXR0cmlidXRlc0dldDEgPSAkSW1wb3J0RXhwb3J0T2JqZWN0LT5Gb3JtYXRBdHRyaWJ1dGVzR2V0KAogICAgVGVtcGxhdGVJRCA9PiAkVGVtcGxhdGVJRHNbMF0sCiAgICBVc2VySUQgICAgID0+IDEsCik7CgojIGNoZWNrIGZvcm1hdCBhdHRyaWJ1dGUgcmVmZXJlbmNlCiRTZWxmLT5UcnVlKAogICAgJEZvcm1hdEF0dHJpYnV0ZXNHZXQxICYmIHJlZiAkRm9ybWF0QXR0cmlidXRlc0dldDEgZXEgJ0FSUkFZJywKICAgICJUZXN0ICRUZXN0Q291bnQ6IEZvcm1hdEF0dHJpYnV0ZXNHZXQoKSAtIGNoZWNrIGFycmF5IHJlZmVyZW5jZSIsCik7CgojIGRlZmluZSB0aGUgcmVmZXJlbmNlIGhhc2gKbXkgJEZvcm1hdEF0dHJpYnV0ZXNHZXQxUmVmZXJlbmNlID0gWwogICAgewogICAgICAgIEtleSAgID0+ICdDb2x1bW5TZXBhcmF0b3InLAogICAgICAgIE5hbWUgID0+ICdDb2x1bW4gU2VwYXJhdG9yJywKICAgICAgICBJbnB1dCA9PiB7CiAgICAgICAgICAgIFR5cGUgPT4gJ1NlbGVjdGlvbicsCiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgVGFidWxhdG9yID0+ICdUYWJ1bGF0b3IgKFRBQiknLAogICAgICAgICAgICAgICAgU2VtaWNvbG9uID0+ICdTZW1pY29sb24gKDspJywKICAgICAgICAgICAgICAgIENvbG9uICAgICA9PiAnQ29sb24gKDopJywKICAgICAgICAgICAgICAgIERvdCAgICAgICA9PiAnRG90ICguKScsCiAgICAgICAgICAgICAgICBDb21tYSAgICAgPT4gJ0NvbW1hICgsKScsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFJlcXVpcmVkICAgICA9PiAxLAogICAgICAgICAgICBUcmFuc2xhdGlvbiAgPT4gMSwKICAgICAgICAgICAgUG9zc2libGVOb25lID0+IDEsCiAgICAgICAgfSwKICAgIH0sCiAgICB7CiAgICAgICAgS2V5ICAgPT4gJ0NoYXJzZXQnLAogICAgICAgIE5hbWUgID0+ICdDaGFyc2V0JywKICAgICAgICBJbnB1dCA9PiB7CiAgICAgICAgICAgIFR5cGUgICAgICAgICA9PiAnVGV4dCcsCiAgICAgICAgICAgIFZhbHVlRGVmYXVsdCA9PiAnVVRGLTgnLAogICAgICAgICAgICBSZXF1aXJlZCAgICAgPT4gMSwKICAgICAgICAgICAgVHJhbnNsYXRpb24gID0+IDAsCiAgICAgICAgICAgIFNpemUgICAgICAgICA9PiAyMCwKICAgICAgICAgICAgTWF4TGVuZ3RoICAgID0+IDIwLAogICAgICAgICAgICBSZWFkb25seSAgICAgPT4gMSwKICAgICAgICB9LAogICAgfSwKICAgIHsKICAgICAgICBLZXkgICA9PiAnSW5jbHVkZUNvbHVtbkhlYWRlcnMnLAogICAgICAgIE5hbWUgID0+ICdJbmNsdWRlIENvbHVtbiBIZWFkZXJzJywKICAgICAgICBJbnB1dCA9PiB7CiAgICAgICAgICAgIFR5cGUgPT4gJ1NlbGVjdGlvbicsCiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgMCA9PiAnTm8nLAogICAgICAgICAgICAgICAgMSA9PiAnWWVzJywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgVHJhbnNsYXRpb24gID0+IDEsCiAgICAgICAgICAgIFBvc3NpYmxlTm9uZSA9PiAwLAogICAgICAgIH0sCiAgICB9LApdOwoKJFNlbGYtPklzRGVlcGx5KAogICAgJEZvcm1hdEF0dHJpYnV0ZXNHZXQxLAogICAgJEZvcm1hdEF0dHJpYnV0ZXNHZXQxUmVmZXJlbmNlLAogICAgIlRlc3QgJFRlc3RDb3VudDogRm9ybWF0QXR0cmlidXRlc0dldCgpIC0gYXR0cmlidXRlcyBvZiB0aGUgcm93IGFyZSBpZGVudGljYWwiLAopOwoKJFRlc3RDb3VudCsrOwoKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwojIEZvcm1hdEF0dHJpYnV0ZXNHZXQgdGVzdCAyIChjaGVjayB3aXRoIG5vbiBleGlzdGluZyB0ZW1wbGF0ZSkKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwoKIyBnZXQgZm9ybWF0IGF0dHJpYnV0ZXMKbXkgJEZvcm1hdEF0dHJpYnV0ZXNHZXQyID0gJEltcG9ydEV4cG9ydE9iamVjdC0+Rm9ybWF0QXR0cmlidXRlc0dldCgKICAgIFRlbXBsYXRlSUQgPT4gJFRlbXBsYXRlSURzWy0xXSArIDEsCiAgICBVc2VySUQgICAgID0+IDEsCik7CgojIGNoZWNrIGZhbHNlIHJldHVybgokU2VsZi0+RmFsc2UoCiAgICAkRm9ybWF0QXR0cmlidXRlc0dldDIsCiAgICAiVGVzdCAkVGVzdENvdW50OiBGb3JtYXRBdHRyaWJ1dGVzR2V0KCkgLSBjaGVjayBmYWxzZSByZXR1cm4iLAopOwoKJFRlc3RDb3VudCsrOwoKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwojIE1hcHBpbmdGb3JtYXRBdHRyaWJ1dGVzR2V0IHRlc3QgMSAoY2hlY2sgYXR0cmlidXRlIGhhc2gpCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKCiMgZ2V0IG1hcHBpbmcgZm9ybWF0IGF0dHJpYnV0ZXMKbXkgJE1hcHBpbmdGb3JtYXRBdHRyaWJ1dGVzR2V0MSA9ICRJbXBvcnRFeHBvcnRPYmplY3QtPk1hcHBpbmdGb3JtYXRBdHRyaWJ1dGVzR2V0KAogICAgVGVtcGxhdGVJRCA9PiAkVGVtcGxhdGVJRHNbMF0sCiAgICBVc2VySUQgICAgID0+IDEsCik7CgojIGNoZWNrIG1hcHBpbmcgZm9ybWF0IGF0dHJpYnV0ZSByZWZlcmVuY2UKJFNlbGYtPlRydWUoCiAgICAkTWFwcGluZ0Zvcm1hdEF0dHJpYnV0ZXNHZXQxICYmIHJlZiAkTWFwcGluZ0Zvcm1hdEF0dHJpYnV0ZXNHZXQxIGVxICdBUlJBWScsCiAgICAiVGVzdCAkVGVzdENvdW50OiBNYXBwaW5nRm9ybWF0QXR0cmlidXRlc0dldCgpIC0gY2hlY2sgYXJyYXkgcmVmZXJlbmNlIiwKKTsKCiMgZGVmaW5lIHRoZSByZWZlcmVuY2UgaGFzaApteSAkTWFwcGluZ0Zvcm1hdEF0dHJpYnV0ZXNHZXQxUmVmZXJlbmNlID0gWwogICAgewogICAgICAgIEtleSAgID0+ICdDb2x1bW4nLAogICAgICAgIE5hbWUgID0+ICdDb2x1bW4nLAogICAgICAgIElucHV0ID0+IHsKICAgICAgICAgICAgVHlwZSAgICAgPT4gJ1RUJywKICAgICAgICAgICAgRGF0YSAgICAgPT4gJycsCiAgICAgICAgICAgIFJlcXVpcmVkID0+IDAsCiAgICAgICAgfSwKICAgIH0sCl07CgokU2VsZi0+SXNEZWVwbHkoCiAgICAkTWFwcGluZ0Zvcm1hdEF0dHJpYnV0ZXNHZXQxLAogICAgJE1hcHBpbmdGb3JtYXRBdHRyaWJ1dGVzR2V0MVJlZmVyZW5jZSwKICAgICJUZXN0ICRUZXN0Q291bnQ6IE1hcHBpbmdGb3JtYXRBdHRyaWJ1dGVzR2V0KCkgLSBhdHRyaWJ1dGVzIG9mIHRoZSByb3cgYXJlIGlkZW50aWNhbCIsCik7CgokVGVzdENvdW50Kys7CgojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiMgTWFwcGluZ0Zvcm1hdEF0dHJpYnV0ZXNHZXQgdGVzdCAyIChjaGVjayB3aXRoIG5vbiBleGlzdGluZyB0ZW1wbGF0ZSkKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwoKIyBnZXQgbWFwcGluZyBmb3JtYXQgYXR0cmlidXRlcwpteSAkTWFwcGluZ0Zvcm1hdEF0dHJpYnV0ZXNHZXQyID0gJEltcG9ydEV4cG9ydE9iamVjdC0+TWFwcGluZ0Zvcm1hdEF0dHJpYnV0ZXNHZXQoCiAgICBUZW1wbGF0ZUlEID0+ICRUZW1wbGF0ZUlEc1stMV0gKyAxLAogICAgVXNlcklEICAgICA9PiAxLAopOwoKIyBjaGVjayBmYWxzZSByZXR1cm4KJFNlbGYtPkZhbHNlKAogICAgJE1hcHBpbmdGb3JtYXRBdHRyaWJ1dGVzR2V0MiwKICAgICJUZXN0ICRUZXN0Q291bnQ6IE1hcHBpbmdGb3JtYXRBdHRyaWJ1dGVzR2V0KCkgLSBjaGVjayBmYWxzZSByZXR1cm4iLAopOwoKJFRlc3RDb3VudCsrOwoKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwojIGRlZmluZSBnZW5lcmFsIEltcG9ydERhdGFHZXQgdGVzdHMKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwoKbXkgJEltcG9ydERhdGFUZXN0cyA9IFsKCiAgICAjIEltcG9ydERhdGFHZXQgZG9lc24ndCBjb250YWlucyBhbGwgZGF0YSAoY2hlY2sgcmVxdWlyZWQgYXR0cmlidXRlcykKICAgIHsKICAgICAgICBTb3VyY2VJbXBvcnREYXRhID0+IHsKICAgICAgICAgICAgSW1wb3J0RGF0YUdldCA9PiB7CiAgICAgICAgICAgICAgICBVc2VySUQgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgfSwKCiAgICAjIEltcG9ydERhdGFHZXQgZG9lc24ndCBjb250YWlucyBhbGwgZGF0YSAoY2hlY2sgcmVxdWlyZWQgYXR0cmlidXRlcykKICAgIHsKICAgICAgICBTb3VyY2VJbXBvcnREYXRhID0+IHsKICAgICAgICAgICAgSW1wb3J0RGF0YUdldCA9PiB7CiAgICAgICAgICAgICAgICBUZW1wbGF0ZUlEID0+ICRUZW1wbGF0ZUlEc1sxXSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgfSwKCiAgICAjIG5vIHNvdXJjZSBjb250ZW50IGFyZSBnaXZlbiAoZW1wdHkgYXJyYXkgcmVmZXJlbmNlIG11c3QgYmUgcmV0dXJuZWQpCiAgICB7CiAgICAgICAgU291cmNlSW1wb3J0RGF0YSA9PiB7CiAgICAgICAgICAgIEltcG9ydERhdGFHZXQgPT4gewogICAgICAgICAgICAgICAgVGVtcGxhdGVJRCA9PiAkVGVtcGxhdGVJRHNbMV0sCiAgICAgICAgICAgICAgICBVc2VySUQgICAgID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBSZWZlcmVuY2VJbXBvcnREYXRhID0+IFtdLAogICAgfSwKCiAgICAjIHNvdXJjZSBjb250ZW50IG11c3QgYmUgYSBzY2FsYXIgcmVmZXJlbmNlIChjaGVjayByZXR1cm4gZmFsc2UpCiAgICB7CiAgICAgICAgU291cmNlSW1wb3J0RGF0YSA9PiB7CiAgICAgICAgICAgIEltcG9ydERhdGFHZXQgPT4gewogICAgICAgICAgICAgICAgVGVtcGxhdGVJRCAgICA9PiAkVGVtcGxhdGVJRHNbMV0sCiAgICAgICAgICAgICAgICBTb3VyY2VDb250ZW50ID0+IFtdLAogICAgICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICB9LAoKICAgICMgc291cmNlIGNvbnRlbnQgbXVzdCBiZSBhIHNjYWxhciByZWZlcmVuY2UgKGNoZWNrIHJldHVybiBmYWxzZSkKICAgIHsKICAgICAgICBTb3VyY2VJbXBvcnREYXRhID0+IHsKICAgICAgICAgICAgSW1wb3J0RGF0YUdldCA9PiB7CiAgICAgICAgICAgICAgICBUZW1wbGF0ZUlEICAgID0+ICRUZW1wbGF0ZUlEc1sxXSwKICAgICAgICAgICAgICAgIFNvdXJjZUNvbnRlbnQgPT4ge30sCiAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgIH0sCgogICAgIyBzb3VyY2UgY29udGVudCBtdXN0IGJlIGEgc2NhbGFyIHJlZmVyZW5jZSAoY2hlY2sgcmV0dXJuIGZhbHNlKQogICAgewogICAgICAgIFNvdXJjZUltcG9ydERhdGEgPT4gewogICAgICAgICAgICBJbXBvcnREYXRhR2V0ID0+IHsKICAgICAgICAgICAgICAgIFRlbXBsYXRlSUQgICAgPT4gJFRlbXBsYXRlSURzWzFdLAogICAgICAgICAgICAgICAgU291cmNlQ29udGVudCA9PiAnJywKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgICAgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgfSwKCiAgICAjIG5vIGV4aXN0aW5nIHRlbXBsYXRlIGlkIGlzIGdpdmVuIChjaGVjayByZXR1cm4gZmFsc2UpCiAgICB7CiAgICAgICAgU291cmNlSW1wb3J0RGF0YSA9PiB7CiAgICAgICAgICAgIEltcG9ydERhdGFHZXQgPT4gewogICAgICAgICAgICAgICAgVGVtcGxhdGVJRCAgICA9PiAkVGVtcGxhdGVJRHNbLTFdICsgMSwKICAgICAgICAgICAgICAgIFNvdXJjZUNvbnRlbnQgPT4gXGRvIHsnRHVtbXknfSwKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgICAgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgfSwKCiAgICAjIG5vIGNvbHVtbiBTZXBhcmF0b3IgYW5kIGNoYXJzZXQgYXJlIGdpdmVuIChjaGVjayByZXR1cm4gZmFsc2UpCiAgICB7CiAgICAgICAgU291cmNlSW1wb3J0RGF0YSA9PiB7CiAgICAgICAgICAgIEltcG9ydERhdGFHZXQgPT4gewogICAgICAgICAgICAgICAgVGVtcGxhdGVJRCAgICA9PiAkVGVtcGxhdGVJRHNbMl0sCiAgICAgICAgICAgICAgICBTb3VyY2VDb250ZW50ID0+IFxkbyB7J0R1bW15J30sCiAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgIH0sCgogICAgIyBubyBjb2x1bW4gU2VwYXJhdG9yIGlzIGdpdmVuIChjaGVjayByZXR1cm4gZmFsc2UpCiAgICB7CiAgICAgICAgU291cmNlSW1wb3J0RGF0YSA9PiB7CiAgICAgICAgICAgIEZvcm1hdERhdGEgPT4gewogICAgICAgICAgICAgICAgQ2hhcnNldCA9PiAnVVRGLTgnLAogICAgICAgICAgICB9LAogICAgICAgICAgICBJbXBvcnREYXRhR2V0ID0+IHsKICAgICAgICAgICAgICAgIFRlbXBsYXRlSUQgICAgPT4gJFRlbXBsYXRlSURzWzJdLAogICAgICAgICAgICAgICAgU291cmNlQ29udGVudCA9PiBcZG8geydEdW1teSd9LAogICAgICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICB9LAoKICAgICMgbm8gY2hhcnNldCBpcyBnaXZlbiAoY2hlY2sgcmV0dXJuIGZhbHNlKQogICAgewogICAgICAgIFNvdXJjZUltcG9ydERhdGEgPT4gewogICAgICAgICAgICBGb3JtYXREYXRhID0+IHsKICAgICAgICAgICAgICAgIENvbHVtblNlcGFyYXRvciA9PiAnRHVtbXknLAogICAgICAgICAgICB9LAogICAgICAgICAgICBJbXBvcnREYXRhR2V0ID0+IHsKICAgICAgICAgICAgICAgIFRlbXBsYXRlSUQgICAgPT4gJFRlbXBsYXRlSURzWzJdLAogICAgICAgICAgICAgICAgU291cmNlQ29udGVudCA9PiBcZG8geydEdW1teSd9LAogICAgICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICB9LAoKICAgICMgaW52YWxpZCBjb2x1bW4gU2VwYXJhdG9yIGlzIGdpdmVuIChjaGVjayByZXR1cm4gZmFsc2UpCiAgICB7CiAgICAgICAgU291cmNlSW1wb3J0RGF0YSA9PiB7CiAgICAgICAgICAgIEZvcm1hdERhdGEgPT4gewogICAgICAgICAgICAgICAgQ29sdW1uU2VwYXJhdG9yID0+ICdEdW1teScsCiAgICAgICAgICAgICAgICBDaGFyc2V0ICAgICAgICAgPT4gJ1VURi04JywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgSW1wb3J0RGF0YUdldCA9PiB7CiAgICAgICAgICAgICAgICBUZW1wbGF0ZUlEICAgID0+ICRUZW1wbGF0ZUlEc1syXSwKICAgICAgICAgICAgICAgIFNvdXJjZUNvbnRlbnQgPT4gXGRvIHsnRHVtbXknfSwKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgICAgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgfSwKCiAgICAjIHJlcXVpcmVkIHZhbHVlcyBhcmUgZ2l2ZW4gYnV0IHNvdXJjZSBjb250ZW50IGlzIGVtcHR5IChlbXB0eSBhcnJheSByZWZlcmVuY2UgbXVzdCBiZSByZXR1cm5lZCkKICAgIHsKICAgICAgICBTb3VyY2VJbXBvcnREYXRhID0+IHsKICAgICAgICAgICAgRm9ybWF0RGF0YSA9PiB7CiAgICAgICAgICAgICAgICBDb2x1bW5TZXBhcmF0b3IgPT4gJ1NlbWljb2xvbicsCiAgICAgICAgICAgICAgICBDaGFyc2V0ICAgICAgICAgPT4gJ1VURi04JywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgSW1wb3J0RGF0YUdldCA9PiB7CiAgICAgICAgICAgICAgICBUZW1wbGF0ZUlEICAgID0+ICRUZW1wbGF0ZUlEc1szXSwKICAgICAgICAgICAgICAgIFNvdXJjZUNvbnRlbnQgPT4gXGRvIHsnJ30sCiAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBSZWZlcmVuY2VJbXBvcnREYXRhID0+IFtdLAogICAgfSwKCiAgICAjIHNvdXJjZSBjb250ZW50IGlzIG9ubHkgYSBzdHJpbmcgd2l0aCBzcGFjZXMgKG9uZSBjZWxsIGFycmF5IHdpdGggdGhlIHNwYWNlcyBtdXN0IGJlIHJldHVybmVkKQogICAgewogICAgICAgIFNvdXJjZUltcG9ydERhdGEgPT4gewogICAgICAgICAgICBGb3JtYXREYXRhID0+IHsKICAgICAgICAgICAgICAgIENvbHVtblNlcGFyYXRvciA9PiAnU2VtaWNvbG9uJywKICAgICAgICAgICAgICAgIENoYXJzZXQgICAgICAgICA9PiAnVVRGLTgnLAogICAgICAgICAgICB9LAogICAgICAgICAgICBJbXBvcnREYXRhR2V0ID0+IHsKICAgICAgICAgICAgICAgIFRlbXBsYXRlSUQgICAgPT4gJFRlbXBsYXRlSURzWzRdLAogICAgICAgICAgICAgICAgU291cmNlQ29udGVudCA9PiBcZG8geycgICd9LAogICAgICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgUmVmZXJlbmNlSW1wb3J0RGF0YSA9PiBbCiAgICAgICAgICAgIFsnICAnXSwKICAgICAgICBdLAogICAgfSwKCiAgICAjIGFsbCByZXF1aXJlZCB2YWx1ZXMgYXJlIGdpdmVuIChjaGVjayB0aGUgcGFyc2VkIGNvbnRlbnQpCiAgICB7CiAgICAgICAgU291cmNlSW1wb3J0RGF0YSA9PiB7CiAgICAgICAgICAgIEZvcm1hdERhdGEgPT4gewogICAgICAgICAgICAgICAgQ29sdW1uU2VwYXJhdG9yID0+ICdTZW1pY29sb24nLAogICAgICAgICAgICAgICAgQ2hhcnNldCAgICAgICAgID0+ICdVVEYtOCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFNvdXJjZUZpbGUgICAgPT4gJ0ltcG9ydEV4cG9ydEZvcm1hdENTVjAwMS1NU0V4Y2VsLVNlbWljb2xvbi5jc3YnLAogICAgICAgICAgICBJbXBvcnREYXRhR2V0ID0+IHsKICAgICAgICAgICAgICAgIFRlbXBsYXRlSUQgICAgPT4gJFRlbXBsYXRlSURzWzVdLAogICAgICAgICAgICAgICAgU291cmNlQ29udGVudCA9PiAnU291cmNlRmlsZScsCiAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBSZWZlcmVuY2VJbXBvcnREYXRhID0+IFsKICAgICAgICAgICAgWyAnUm93MS1Db2wxJywgJ1JvdzEtQ29sMicsICdSb3cxLUNvbDMnIF0sCiAgICAgICAgICAgIFsgJ1JvdzItQ29sMScsICdSb3cyLUNvbDInLCAnUm93Mi1Db2wzJyBdLAogICAgICAgICAgICBbICdSb3czLUNvbDEnLCAnUm93My1Db2wyJywgJ1JvdzMtQ29sMycgXSwKICAgICAgICBdLAogICAgfSwKCiAgICAjIGFsbCByZXF1aXJlZCB2YWx1ZXMgYXJlIGdpdmVuLCBidXQgVGFidWxhdG9yIGlzIHVzZWQgYXMgU2VwYXJhdG9yIChjaGVjayB0aGUgcGFyc2VkIGNvbnRlbnQpCiAgICB7CiAgICAgICAgU291cmNlSW1wb3J0RGF0YSA9PiB7CiAgICAgICAgICAgIEZvcm1hdERhdGEgPT4gewogICAgICAgICAgICAgICAgQ29sdW1uU2VwYXJhdG9yID0+ICdUYWJ1bGF0b3InLAogICAgICAgICAgICAgICAgQ2hhcnNldCAgICAgICAgID0+ICdVVEYtOCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFNvdXJjZUZpbGUgICAgPT4gJ0ltcG9ydEV4cG9ydEZvcm1hdENTVjAwMS1NU0V4Y2VsLVNlbWljb2xvbi5jc3YnLAogICAgICAgICAgICBJbXBvcnREYXRhR2V0ID0+IHsKICAgICAgICAgICAgICAgIFRlbXBsYXRlSUQgICAgPT4gJFRlbXBsYXRlSURzWzVdLAogICAgICAgICAgICAgICAgU291cmNlQ29udGVudCA9PiAnU291cmNlRmlsZScsCiAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBSZWZlcmVuY2VJbXBvcnREYXRhID0+IFsKICAgICAgICAgICAgWydSb3cxLUNvbDE7Um93MS1Db2wyO1JvdzEtQ29sMyddLAogICAgICAgICAgICBbJ1JvdzItQ29sMTtSb3cyLUNvbDI7Um93Mi1Db2wzJ10sCiAgICAgICAgICAgIFsnUm93My1Db2wxO1JvdzMtQ29sMjtSb3czLUNvbDMnXSwKICAgICAgICBdLAogICAgfSwKCiAgICAjIGFsbCByZXF1aXJlZCB2YWx1ZXMgYXJlIGdpdmVuIChjaGVjayB0aGUgcGFyc2VkIGNvbnRlbnQpCiAgICB7CiAgICAgICAgU291cmNlSW1wb3J0RGF0YSA9PiB7CiAgICAgICAgICAgIEZvcm1hdERhdGEgPT4gewogICAgICAgICAgICAgICAgQ29sdW1uU2VwYXJhdG9yID0+ICdUYWJ1bGF0b3InLAogICAgICAgICAgICAgICAgQ2hhcnNldCAgICAgICAgID0+ICdVVEYtOCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFNvdXJjZUZpbGUgICAgPT4gJ0ltcG9ydEV4cG9ydEZvcm1hdENTVjAwMS1NU0V4Y2VsLVRhYnVsYXRvci5jc3YnLAogICAgICAgICAgICBJbXBvcnREYXRhR2V0ID0+IHsKICAgICAgICAgICAgICAgIFRlbXBsYXRlSUQgICAgPT4gJFRlbXBsYXRlSURzWzVdLAogICAgICAgICAgICAgICAgU291cmNlQ29udGVudCA9PiAnU291cmNlRmlsZScsCiAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBSZWZlcmVuY2VJbXBvcnREYXRhID0+IFsKICAgICAgICAgICAgWyAnUm93MS1Db2wxJywgJ1JvdzEtQ29sMicsICdSb3cxLUNvbDMnIF0sCiAgICAgICAgICAgIFsgJ1JvdzItQ29sMScsICdSb3cyLUNvbDInLCAnUm93Mi1Db2wzJyBdLAogICAgICAgICAgICBbICdSb3czLUNvbDEnLCAnUm93My1Db2wyJywgJ1JvdzMtQ29sMycgXSwKICAgICAgICBdLAogICAgfSwKCiAgICAjIGFsbCByZXF1aXJlZCB2YWx1ZXMgYXJlIGdpdmVuLCBidXQgU2VtaWNvbG9uIGlzIHVzZWQgYXMgU2VwYXJhdG9yIChjaGVjayB0aGUgcGFyc2VkIGNvbnRlbnQpCiAgICB7CiAgICAgICAgU291cmNlSW1wb3J0RGF0YSA9PiB7CiAgICAgICAgICAgIEZvcm1hdERhdGEgPT4gewogICAgICAgICAgICAgICAgQ29sdW1uU2VwYXJhdG9yID0+ICdTZW1pY29sb24nLAogICAgICAgICAgICAgICAgQ2hhcnNldCAgICAgICAgID0+ICdVVEYtOCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFNvdXJjZUZpbGUgICAgPT4gJ0ltcG9ydEV4cG9ydEZvcm1hdENTVjAwMS1NU0V4Y2VsLVRhYnVsYXRvci5jc3YnLAogICAgICAgICAgICBJbXBvcnREYXRhR2V0ID0+IHsKICAgICAgICAgICAgICAgIFRlbXBsYXRlSUQgICAgPT4gJFRlbXBsYXRlSURzWzVdLAogICAgICAgICAgICAgICAgU291cmNlQ29udGVudCA9PiAnU291cmNlRmlsZScsCiAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBSZWZlcmVuY2VJbXBvcnREYXRhID0+IFsKICAgICAgICAgICAgWyJSb3cxLUNvbDFcdFJvdzEtQ29sMlx0Um93MS1Db2wzIl0sCiAgICAgICAgICAgIFsiUm93Mi1Db2wxXHRSb3cyLUNvbDJcdFJvdzItQ29sMyJdLAogICAgICAgICAgICBbIlJvdzMtQ29sMVx0Um93My1Db2wyXHRSb3czLUNvbDMiXSwKICAgICAgICBdLAogICAgfSwKCiAgICAjIGFsbCByZXF1aXJlZCB2YWx1ZXMgYXJlIGdpdmVuIChjaGVjayB0aGUgcGFyc2VkIGNvbnRlbnQpCiAgICB7CiAgICAgICAgU291cmNlSW1wb3J0RGF0YSA9PiB7CiAgICAgICAgICAgIEZvcm1hdERhdGEgPT4gewogICAgICAgICAgICAgICAgQ29sdW1uU2VwYXJhdG9yID0+ICdTZW1pY29sb24nLAogICAgICAgICAgICAgICAgQ2hhcnNldCAgICAgICAgID0+ICdVVEYtOCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFNvdXJjZUZpbGUgICAgPT4gJ0ltcG9ydEV4cG9ydEZvcm1hdENTVjAwMS1PcGVuT2ZmaWNlLVNlbWljb2xvbi5jc3YnLAogICAgICAgICAgICBJbXBvcnREYXRhR2V0ID0+IHsKICAgICAgICAgICAgICAgIFRlbXBsYXRlSUQgICAgPT4gJFRlbXBsYXRlSURzWzVdLAogICAgICAgICAgICAgICAgU291cmNlQ29udGVudCA9PiAnU291cmNlRmlsZScsCiAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBSZWZlcmVuY2VJbXBvcnREYXRhID0+IFsKICAgICAgICAgICAgWyAnUm93MS1Db2wxJywgJ1JvdzEtQ29sMicsICdSb3cxLUNvbDMnIF0sCiAgICAgICAgICAgIFsgJ1JvdzItQ29sMScsICdSb3cyLUNvbDInLCAnUm93Mi1Db2wzJyBdLAogICAgICAgICAgICBbICdSb3czLUNvbDEnLCAnUm93My1Db2wyJywgJ1JvdzMtQ29sMycgXSwKICAgICAgICBdLAogICAgfSwKCiAgICAjIGFsbCByZXF1aXJlZCB2YWx1ZXMgYXJlIGdpdmVuIChjaGVjayB0aGUgcGFyc2VkIGNvbnRlbnQpCiAgICB7CiAgICAgICAgU291cmNlSW1wb3J0RGF0YSA9PiB7CiAgICAgICAgICAgIEZvcm1hdERhdGEgPT4gewogICAgICAgICAgICAgICAgQ29sdW1uU2VwYXJhdG9yID0+ICdUYWJ1bGF0b3InLAogICAgICAgICAgICAgICAgQ2hhcnNldCAgICAgICAgID0+ICdVVEYtOCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFNvdXJjZUZpbGUgICAgPT4gJ0ltcG9ydEV4cG9ydEZvcm1hdENTVjAwMS1PcGVuT2ZmaWNlLVRhYnVsYXRvci5jc3YnLAogICAgICAgICAgICBJbXBvcnREYXRhR2V0ID0+IHsKICAgICAgICAgICAgICAgIFRlbXBsYXRlSUQgICAgPT4gJFRlbXBsYXRlSURzWzVdLAogICAgICAgICAgICAgICAgU291cmNlQ29udGVudCA9PiAnU291cmNlRmlsZScsCiAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBSZWZlcmVuY2VJbXBvcnREYXRhID0+IFsKICAgICAgICAgICAgWyAnUm93MS1Db2wxJywgJ1JvdzEtQ29sMicsICdSb3cxLUNvbDMnIF0sCiAgICAgICAgICAgIFsgJ1JvdzItQ29sMScsICdSb3cyLUNvbDInLCAnUm93Mi1Db2wzJyBdLAogICAgICAgICAgICBbICdSb3czLUNvbDEnLCAnUm93My1Db2wyJywgJ1JvdzMtQ29sMycgXSwKICAgICAgICBdLAogICAgfSwKCiAgICAjIGFsbCByZXF1aXJlZCB2YWx1ZXMgYXJlIGdpdmVuIChjaGVjayB0aGUgcGFyc2VkIGNvbnRlbnQpCiAgICB7CiAgICAgICAgU291cmNlSW1wb3J0RGF0YSA9PiB7CiAgICAgICAgICAgIEZvcm1hdERhdGEgPT4gewogICAgICAgICAgICAgICAgQ29sdW1uU2VwYXJhdG9yID0+ICdDb2xvbicsCiAgICAgICAgICAgICAgICBDaGFyc2V0ICAgICAgICAgPT4gJ1VURi04JywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgU291cmNlRmlsZSAgICA9PiAnSW1wb3J0RXhwb3J0Rm9ybWF0Q1NWMDAxLU9wZW5PZmZpY2UtQ29sb24uY3N2JywKICAgICAgICAgICAgSW1wb3J0RGF0YUdldCA9PiB7CiAgICAgICAgICAgICAgICBUZW1wbGF0ZUlEICAgID0+ICRUZW1wbGF0ZUlEc1s1XSwKICAgICAgICAgICAgICAgIFNvdXJjZUNvbnRlbnQgPT4gJ1NvdXJjZUZpbGUnLAogICAgICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgUmVmZXJlbmNlSW1wb3J0RGF0YSA9PiBbCiAgICAgICAgICAgIFsgJ1JvdzEtQ29sMScsICdSb3cxLUNvbDInLCAnUm93MS1Db2wzJyBdLAogICAgICAgICAgICBbICdSb3cyLUNvbDEnLCAnUm93Mi1Db2wyJywgJ1JvdzItQ29sMycgXSwKICAgICAgICAgICAgWyAnUm93My1Db2wxJywgJ1JvdzMtQ29sMicsICdSb3czLUNvbDMnIF0sCiAgICAgICAgXSwKICAgIH0sCgogICAgIyBhbGwgcmVxdWlyZWQgdmFsdWVzIGFyZSBnaXZlbiAobmV3bGluZSBjaGVja3MpCiAgICB7CiAgICAgICAgU291cmNlSW1wb3J0RGF0YSA9PiB7CiAgICAgICAgICAgIEZvcm1hdERhdGEgPT4gewogICAgICAgICAgICAgICAgQ29sdW1uU2VwYXJhdG9yID0+ICdTZW1pY29sb24nLAogICAgICAgICAgICAgICAgQ2hhcnNldCAgICAgICAgID0+ICdVVEYtOCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFNvdXJjZUZpbGUgICAgPT4gJ0ltcG9ydEV4cG9ydEZvcm1hdENTVjAwMi1NU0V4Y2VsLVNlbWljb2xvbi5jc3YnLAogICAgICAgICAgICBJbXBvcnREYXRhR2V0ID0+IHsKICAgICAgICAgICAgICAgIFRlbXBsYXRlSUQgICAgPT4gJFRlbXBsYXRlSURzWzZdLAogICAgICAgICAgICAgICAgU291cmNlQ29udGVudCA9PiAnU291cmNlRmlsZScsCiAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBSZWZlcmVuY2VJbXBvcnREYXRhID0+IFsKICAgICAgICAgICAgWyAiXG5UZXN0IDEgLSAxIiwgIlRlc3QgMSAtIDIiLCAgICJUZXN0IDFcbi0gMyIsICAnVGVzdCBcblx0XHJccycgXSwKICAgICAgICAgICAgWyAiVGVzdCAyIFxuLSAxIiwgIlRlXG5zdCAyIC0gMiIsICJUZXN0IDIgLSAzXG4iLCAnJyBdLAogICAgICAgIF0sCiAgICB9LAoKICAgICMgYWxsIHJlcXVpcmVkIHZhbHVlcyBhcmUgZ2l2ZW4gKG5ld2xpbmUgY2hlY2tzKQogICAgewogICAgICAgIFNvdXJjZUltcG9ydERhdGEgPT4gewogICAgICAgICAgICBGb3JtYXREYXRhID0+IHsKICAgICAgICAgICAgICAgIENvbHVtblNlcGFyYXRvciA9PiAnVGFidWxhdG9yJywKICAgICAgICAgICAgICAgIENoYXJzZXQgICAgICAgICA9PiAnVVRGLTgnLAogICAgICAgICAgICB9LAogICAgICAgICAgICBTb3VyY2VGaWxlICAgID0+ICdJbXBvcnRFeHBvcnRGb3JtYXRDU1YwMDItTVNFeGNlbC1UYWJ1bGF0b3IuY3N2JywKICAgICAgICAgICAgSW1wb3J0RGF0YUdldCA9PiB7CiAgICAgICAgICAgICAgICBUZW1wbGF0ZUlEICAgID0+ICRUZW1wbGF0ZUlEc1s2XSwKICAgICAgICAgICAgICAgIFNvdXJjZUNvbnRlbnQgPT4gJ1NvdXJjZUZpbGUnLAogICAgICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgUmVmZXJlbmNlSW1wb3J0RGF0YSA9PiBbCiAgICAgICAgICAgIFsgIlxuVGVzdCAxIC0gMSIsICdUZXN0IDEgLSAyJywgICAiVGVzdCAxXG4tIDMiLCAgJ1Rlc3QgXG5cdFxyXHMnIF0sCiAgICAgICAgICAgIFsgIlRlc3QgMiBcbi0gMSIsICJUZVxuc3QgMiAtIDIiLCAiVGVzdCAyIC0gM1xuIiwgJycgXSwKICAgICAgICBdLAogICAgfSwKCiAgICAjIGFsbCByZXF1aXJlZCB2YWx1ZXMgYXJlIGdpdmVuIChuZXdsaW5lIGNoZWNrcykKICAgIHsKICAgICAgICBTb3VyY2VJbXBvcnREYXRhID0+IHsKICAgICAgICAgICAgRm9ybWF0RGF0YSA9PiB7CiAgICAgICAgICAgICAgICBDb2x1bW5TZXBhcmF0b3IgPT4gJ1NlbWljb2xvbicsCiAgICAgICAgICAgICAgICBDaGFyc2V0ICAgICAgICAgPT4gJ1VURi04JywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgU291cmNlRmlsZSAgICA9PiAnSW1wb3J0RXhwb3J0Rm9ybWF0Q1NWMDAyLU9wZW5PZmZpY2UtU2VtaWNvbG9uLmNzdicsCiAgICAgICAgICAgIEltcG9ydERhdGFHZXQgPT4gewogICAgICAgICAgICAgICAgVGVtcGxhdGVJRCAgICA9PiAkVGVtcGxhdGVJRHNbNl0sCiAgICAgICAgICAgICAgICBTb3VyY2VDb250ZW50ID0+ICdTb3VyY2VGaWxlJywKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgICAgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIFJlZmVyZW5jZUltcG9ydERhdGEgPT4gWwogICAgICAgICAgICBbICJcblRlc3QgMSAtIDEiLCAiVGVzdCAxIC0gMiIsICAgIlRlc3QgMVxuLSAzIiwgICdUZXN0IFxuXHRcclxzJyBdLAogICAgICAgICAgICBbICJUZXN0IDIgXG4tIDEiLCAiVGVcbnN0IDIgLSAyIiwgIlRlc3QgMiAtIDNcbiIsICcnIF0sCiAgICAgICAgXSwKICAgIH0sCgogICAgIyBhbGwgcmVxdWlyZWQgdmFsdWVzIGFyZSBnaXZlbiAobmV3bGluZSBjaGVja3MpCiAgICB7CiAgICAgICAgU291cmNlSW1wb3J0RGF0YSA9PiB7CiAgICAgICAgICAgIEZvcm1hdERhdGEgPT4gewogICAgICAgICAgICAgICAgQ29sdW1uU2VwYXJhdG9yID0+ICdUYWJ1bGF0b3InLAogICAgICAgICAgICAgICAgQ2hhcnNldCAgICAgICAgID0+ICdVVEYtOCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFNvdXJjZUZpbGUgICAgPT4gJ0ltcG9ydEV4cG9ydEZvcm1hdENTVjAwMi1PcGVuT2ZmaWNlLVRhYnVsYXRvci5jc3YnLAogICAgICAgICAgICBJbXBvcnREYXRhR2V0ID0+IHsKICAgICAgICAgICAgICAgIFRlbXBsYXRlSUQgICAgPT4gJFRlbXBsYXRlSURzWzZdLAogICAgICAgICAgICAgICAgU291cmNlQ29udGVudCA9PiAnU291cmNlRmlsZScsCiAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBSZWZlcmVuY2VJbXBvcnREYXRhID0+IFsKICAgICAgICAgICAgWyAiXG5UZXN0IDEgLSAxIiwgIlRlc3QgMSAtIDIiLCAgICJUZXN0IDFcbi0gMyIsICAnVGVzdCBcblx0XHJccycgXSwKICAgICAgICAgICAgWyAiVGVzdCAyIFxuLSAxIiwgIlRlXG5zdCAyIC0gMiIsICJUZXN0IDIgLSAzXG4iLCAnJyBdLAogICAgICAgIF0sCiAgICB9LAoKICAgICMgYWxsIHJlcXVpcmVkIHZhbHVlcyBhcmUgZ2l2ZW4gKG5ld2xpbmUgY2hlY2tzKQogICAgewogICAgICAgIFNvdXJjZUltcG9ydERhdGEgPT4gewogICAgICAgICAgICBGb3JtYXREYXRhID0+IHsKICAgICAgICAgICAgICAgIENvbHVtblNlcGFyYXRvciA9PiAnQ29sb24nLAogICAgICAgICAgICAgICAgQ2hhcnNldCAgICAgICAgID0+ICdVVEYtOCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFNvdXJjZUZpbGUgICAgPT4gJ0ltcG9ydEV4cG9ydEZvcm1hdENTVjAwMi1PcGVuT2ZmaWNlLUNvbG9uLmNzdicsCiAgICAgICAgICAgIEltcG9ydERhdGFHZXQgPT4gewogICAgICAgICAgICAgICAgVGVtcGxhdGVJRCAgICA9PiAkVGVtcGxhdGVJRHNbNl0sCiAgICAgICAgICAgICAgICBTb3VyY2VDb250ZW50ID0+ICdTb3VyY2VGaWxlJywKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgICAgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIFJlZmVyZW5jZUltcG9ydERhdGEgPT4gWwogICAgICAgICAgICBbICJcblRlc3QgMSAtIDEiLCAiVGVzdCAxIC0gMiIsICAgIlRlc3QgMVxuLSAzIiwgICdUZXN0IFxuXHRcclxzJyBdLAogICAgICAgICAgICBbICJUZXN0IDIgXG4tIDEiLCAiVGVcbnN0IDIgLSAyIiwgIlRlc3QgMiAtIDNcbiIsICcnIF0sCiAgICAgICAgXSwKICAgIH0sCgogICAgIyBhbGwgcmVxdWlyZWQgdmFsdWVzIGFyZSBnaXZlbiAoc3BhY2VzIGNoZWNrcykKICAgIHsKICAgICAgICBTb3VyY2VJbXBvcnREYXRhID0+IHsKICAgICAgICAgICAgRm9ybWF0RGF0YSA9PiB7CiAgICAgICAgICAgICAgICBDb2x1bW5TZXBhcmF0b3IgPT4gJ1NlbWljb2xvbicsCiAgICAgICAgICAgICAgICBDaGFyc2V0ICAgICAgICAgPT4gJ1VURi04JywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgU291cmNlRmlsZSAgICA9PiAnSW1wb3J0RXhwb3J0Rm9ybWF0Q1NWMDAzLU1TRXhjZWwtU2VtaWNvbG9uLmNzdicsCiAgICAgICAgICAgIEltcG9ydERhdGFHZXQgPT4gewogICAgICAgICAgICAgICAgVGVtcGxhdGVJRCAgICA9PiAkVGVtcGxhdGVJRHNbN10sCiAgICAgICAgICAgICAgICBTb3VyY2VDb250ZW50ID0+ICdTb3VyY2VGaWxlJywKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgICAgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIFJlZmVyZW5jZUltcG9ydERhdGEgPT4gWwogICAgICAgICAgICBbICcgIFRlc3QgICcsICcgICAgJywgJ1Rlc3QgICcgXSwKICAgICAgICAgICAgWyAnICAgIFRlc3QnLCAnJywgICAgICdUZXN0JyBdLAogICAgICAgICAgICBbICcnLCAgICAgICAgICcnLCAgICAgJyAnIF0sCiAgICAgICAgXSwKICAgIH0sCgogICAgIyBhbGwgcmVxdWlyZWQgdmFsdWVzIGFyZSBnaXZlbiAoc3BhY2VzIGNoZWNrcykKICAgIHsKICAgICAgICBTb3VyY2VJbXBvcnREYXRhID0+IHsKICAgICAgICAgICAgRm9ybWF0RGF0YSA9PiB7CiAgICAgICAgICAgICAgICBDb2x1bW5TZXBhcmF0b3IgPT4gJ1RhYnVsYXRvcicsCiAgICAgICAgICAgICAgICBDaGFyc2V0ICAgICAgICAgPT4gJ1VURi04JywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgU291cmNlRmlsZSAgICA9PiAnSW1wb3J0RXhwb3J0Rm9ybWF0Q1NWMDAzLU1TRXhjZWwtVGFidWxhdG9yLmNzdicsCiAgICAgICAgICAgIEltcG9ydERhdGFHZXQgPT4gewogICAgICAgICAgICAgICAgVGVtcGxhdGVJRCAgICA9PiAkVGVtcGxhdGVJRHNbN10sCiAgICAgICAgICAgICAgICBTb3VyY2VDb250ZW50ID0+ICdTb3VyY2VGaWxlJywKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgICAgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIFJlZmVyZW5jZUltcG9ydERhdGEgPT4gWwogICAgICAgICAgICBbICcgIFRlc3QgICcsICcgICAgJywgJ1Rlc3QgICcgXSwKICAgICAgICAgICAgWyAnICAgIFRlc3QnLCAnJywgICAgICdUZXN0JyBdLAogICAgICAgICAgICBbICcnLCAgICAgICAgICcnLCAgICAgJyAnIF0sCiAgICAgICAgXSwKICAgIH0sCgogICAgIyBhbGwgcmVxdWlyZWQgdmFsdWVzIGFyZSBnaXZlbiAoc3BhY2VzIGNoZWNrcykKICAgIHsKICAgICAgICBTb3VyY2VJbXBvcnREYXRhID0+IHsKICAgICAgICAgICAgRm9ybWF0RGF0YSA9PiB7CiAgICAgICAgICAgICAgICBDb2x1bW5TZXBhcmF0b3IgPT4gJ1NlbWljb2xvbicsCiAgICAgICAgICAgICAgICBDaGFyc2V0ICAgICAgICAgPT4gJ1VURi04JywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgU291cmNlRmlsZSAgICA9PiAnSW1wb3J0RXhwb3J0Rm9ybWF0Q1NWMDAzLU9wZW5PZmZpY2UtU2VtaWNvbG9uLmNzdicsCiAgICAgICAgICAgIEltcG9ydERhdGFHZXQgPT4gewogICAgICAgICAgICAgICAgVGVtcGxhdGVJRCAgICA9PiAkVGVtcGxhdGVJRHNbN10sCiAgICAgICAgICAgICAgICBTb3VyY2VDb250ZW50ID0+ICdTb3VyY2VGaWxlJywKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgICAgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIFJlZmVyZW5jZUltcG9ydERhdGEgPT4gWwogICAgICAgICAgICBbICcgIFRlc3QgICcsICcgICAgJywgJ1Rlc3QgICcgXSwKICAgICAgICAgICAgWyAnICAgIFRlc3QnLCAnJywgICAgICdUZXN0JyBdLAogICAgICAgICAgICBbICcnLCAgICAgICAgICcnLCAgICAgJyAnIF0sCiAgICAgICAgXSwKICAgIH0sCgogICAgIyBhbGwgcmVxdWlyZWQgdmFsdWVzIGFyZSBnaXZlbiAoc3BhY2VzIGNoZWNrcykKICAgIHsKICAgICAgICBTb3VyY2VJbXBvcnREYXRhID0+IHsKICAgICAgICAgICAgRm9ybWF0RGF0YSA9PiB7CiAgICAgICAgICAgICAgICBDb2x1bW5TZXBhcmF0b3IgPT4gJ1RhYnVsYXRvcicsCiAgICAgICAgICAgICAgICBDaGFyc2V0ICAgICAgICAgPT4gJ1VURi04JywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgU291cmNlRmlsZSAgICA9PiAnSW1wb3J0RXhwb3J0Rm9ybWF0Q1NWMDAzLU9wZW5PZmZpY2UtVGFidWxhdG9yLmNzdicsCiAgICAgICAgICAgIEltcG9ydERhdGFHZXQgPT4gewogICAgICAgICAgICAgICAgVGVtcGxhdGVJRCAgICA9PiAkVGVtcGxhdGVJRHNbN10sCiAgICAgICAgICAgICAgICBTb3VyY2VDb250ZW50ID0+ICdTb3VyY2VGaWxlJywKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgICAgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIFJlZmVyZW5jZUltcG9ydERhdGEgPT4gWwogICAgICAgICAgICBbICcgIFRlc3QgICcsICcgICAgJywgJ1Rlc3QgICcgXSwKICAgICAgICAgICAgWyAnICAgIFRlc3QnLCAnJywgICAgICdUZXN0JyBdLAogICAgICAgICAgICBbICcnLCAgICAgICAgICcnLCAgICAgJyAnIF0sCiAgICAgICAgXSwKICAgIH0sCgogICAgIyBhbGwgcmVxdWlyZWQgdmFsdWVzIGFyZSBnaXZlbiAoc3BhY2VzIGNoZWNrcykKICAgIHsKICAgICAgICBTb3VyY2VJbXBvcnREYXRhID0+IHsKICAgICAgICAgICAgRm9ybWF0RGF0YSA9PiB7CiAgICAgICAgICAgICAgICBDb2x1bW5TZXBhcmF0b3IgPT4gJ0NvbG9uJywKICAgICAgICAgICAgICAgIENoYXJzZXQgICAgICAgICA9PiAnVVRGLTgnLAogICAgICAgICAgICB9LAogICAgICAgICAgICBTb3VyY2VGaWxlICAgID0+ICdJbXBvcnRFeHBvcnRGb3JtYXRDU1YwMDMtT3Blbk9mZmljZS1Db2xvbi5jc3YnLAogICAgICAgICAgICBJbXBvcnREYXRhR2V0ID0+IHsKICAgICAgICAgICAgICAgIFRlbXBsYXRlSUQgICAgPT4gJFRlbXBsYXRlSURzWzddLAogICAgICAgICAgICAgICAgU291cmNlQ29udGVudCA9PiAnU291cmNlRmlsZScsCiAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBSZWZlcmVuY2VJbXBvcnREYXRhID0+IFsKICAgICAgICAgICAgWyAnICBUZXN0ICAnLCAnICAgICcsICdUZXN0ICAnIF0sCiAgICAgICAgICAgIFsgJyAgICBUZXN0JywgJycsICAgICAnVGVzdCcgXSwKICAgICAgICAgICAgWyAnJywgICAgICAgICAnJywgICAgICcgJyBdLAogICAgICAgIF0sCiAgICB9LAoKICAgICMgYWxsIHJlcXVpcmVkIHZhbHVlcyBhcmUgZ2l2ZW4gKHNwZWNpYWwgY2hhcmFjdGVyIGNoZWNrcykKICAgIHsKICAgICAgICBTb3VyY2VJbXBvcnREYXRhID0+IHsKICAgICAgICAgICAgRm9ybWF0RGF0YSA9PiB7CiAgICAgICAgICAgICAgICBDb2x1bW5TZXBhcmF0b3IgPT4gJ1NlbWljb2xvbicsCiAgICAgICAgICAgICAgICBDaGFyc2V0ICAgICAgICAgPT4gJ1VURi04JywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgU291cmNlRmlsZSAgICA9PiAnSW1wb3J0RXhwb3J0Rm9ybWF0Q1NWMDA0LU1TRXhjZWwtU2VtaWNvbG9uLmNzdicsCiAgICAgICAgICAgIEltcG9ydERhdGFHZXQgPT4gewogICAgICAgICAgICAgICAgVGVtcGxhdGVJRCAgICA9PiAkVGVtcGxhdGVJRHNbOF0sCiAgICAgICAgICAgICAgICBTb3VyY2VDb250ZW50ID0+ICdTb3VyY2VGaWxlJywKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgICAgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIFJlZmVyZW5jZUltcG9ydERhdGEgPT4gWwogICAgICAgICAgICBbICdUZXN0OzpfwrBeISLCpyQlJi8oKT0/wrRgKitUZXN0JywgJz48QH5cJ317W11cXCcgXSwKICAgICAgICAgICAgWyAnIiI7Ozo6Li4tLV9fIyMnLCAgICAgICAgICAgICAgICAgICcnIF0sCiAgICAgICAgXSwKICAgIH0sCgogICAgIyBhbGwgcmVxdWlyZWQgdmFsdWVzIGFyZSBnaXZlbiAoc3BlY2lhbCBjaGFyYWN0ZXIgY2hlY2tzKQogICAgewogICAgICAgIFNvdXJjZUltcG9ydERhdGEgPT4gewogICAgICAgICAgICBGb3JtYXREYXRhID0+IHsKICAgICAgICAgICAgICAgIENvbHVtblNlcGFyYXRvciA9PiAnVGFidWxhdG9yJywKICAgICAgICAgICAgICAgIENoYXJzZXQgICAgICAgICA9PiAnVVRGLTgnLAogICAgICAgICAgICB9LAogICAgICAgICAgICBTb3VyY2VGaWxlICAgID0+ICdJbXBvcnRFeHBvcnRGb3JtYXRDU1YwMDQtTVNFeGNlbC1UYWJ1bGF0b3IuY3N2JywKICAgICAgICAgICAgSW1wb3J0RGF0YUdldCA9PiB7CiAgICAgICAgICAgICAgICBUZW1wbGF0ZUlEICAgID0+ICRUZW1wbGF0ZUlEc1s4XSwKICAgICAgICAgICAgICAgIFNvdXJjZUNvbnRlbnQgPT4gJ1NvdXJjZUZpbGUnLAogICAgICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgUmVmZXJlbmNlSW1wb3J0RGF0YSA9PiBbCiAgICAgICAgICAgIFsgJ1Rlc3Q7Ol/CsF4hIsKnJCUmLygpPT/CtGAqK1Rlc3QnLCAnPjxAflwnfXtbXVxcJyBdLAogICAgICAgICAgICBbICciIjs7OjouLi0tX18jIycsICAgICAgICAgICAgICAgICAgJycgXSwKICAgICAgICBdLAogICAgfSwKCiAgICAjIGFsbCByZXF1aXJlZCB2YWx1ZXMgYXJlIGdpdmVuIChzcGVjaWFsIGNoYXJhY3RlciBjaGVja3MpCiAgICB7CiAgICAgICAgU291cmNlSW1wb3J0RGF0YSA9PiB7CiAgICAgICAgICAgIEZvcm1hdERhdGEgPT4gewogICAgICAgICAgICAgICAgQ29sdW1uU2VwYXJhdG9yID0+ICdTZW1pY29sb24nLAogICAgICAgICAgICAgICAgQ2hhcnNldCAgICAgICAgID0+ICdVVEYtOCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFNvdXJjZUZpbGUgICAgPT4gJ0ltcG9ydEV4cG9ydEZvcm1hdENTVjAwNC1PcGVuT2ZmaWNlLVNlbWljb2xvbi5jc3YnLAogICAgICAgICAgICBJbXBvcnREYXRhR2V0ID0+IHsKICAgICAgICAgICAgICAgIFRlbXBsYXRlSUQgICAgPT4gJFRlbXBsYXRlSURzWzhdLAogICAgICAgICAgICAgICAgU291cmNlQ29udGVudCA9PiAnU291cmNlRmlsZScsCiAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBSZWZlcmVuY2VJbXBvcnREYXRhID0+IFsKICAgICAgICAgICAgWyAnVGVzdDs6X8KwXiEiwqckJSYvKCk9P8K0YCorVGVzdCcsICc+PEB+XCd9e1tdXFwnIF0sCiAgICAgICAgICAgIFsgJyIiOzs6Oi4uLS1fXyMjJywgICAgICAgICAgICAgICAgICAnJyBdLAogICAgICAgIF0sCiAgICB9LAoKICAgICMgYWxsIHJlcXVpcmVkIHZhbHVlcyBhcmUgZ2l2ZW4gKHNwZWNpYWwgY2hhcmFjdGVyIGNoZWNrcykKICAgIHsKICAgICAgICBTb3VyY2VJbXBvcnREYXRhID0+IHsKICAgICAgICAgICAgRm9ybWF0RGF0YSA9PiB7CiAgICAgICAgICAgICAgICBDb2x1bW5TZXBhcmF0b3IgPT4gJ1RhYnVsYXRvcicsCiAgICAgICAgICAgICAgICBDaGFyc2V0ICAgICAgICAgPT4gJ1VURi04JywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgU291cmNlRmlsZSAgICA9PiAnSW1wb3J0RXhwb3J0Rm9ybWF0Q1NWMDA0LU9wZW5PZmZpY2UtVGFidWxhdG9yLmNzdicsCiAgICAgICAgICAgIEltcG9ydERhdGFHZXQgPT4gewogICAgICAgICAgICAgICAgVGVtcGxhdGVJRCAgICA9PiAkVGVtcGxhdGVJRHNbOF0sCiAgICAgICAgICAgICAgICBTb3VyY2VDb250ZW50ID0+ICdTb3VyY2VGaWxlJywKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgICAgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIFJlZmVyZW5jZUltcG9ydERhdGEgPT4gWwogICAgICAgICAgICBbICdUZXN0OzpfwrBeISLCpyQlJi8oKT0/wrRgKitUZXN0JywgJz48QH5cJ317W11cXCcgXSwKICAgICAgICAgICAgWyAnIiI7Ozo6Li4tLV9fIyMnLCAgICAgICAgICAgICAgICAgICcnIF0sCiAgICAgICAgXSwKICAgIH0sCgogICAgIyBhbGwgcmVxdWlyZWQgdmFsdWVzIGFyZSBnaXZlbiAoc3BlY2lhbCBjaGFyYWN0ZXIgY2hlY2tzKQogICAgewogICAgICAgIFNvdXJjZUltcG9ydERhdGEgPT4gewogICAgICAgICAgICBGb3JtYXREYXRhID0+IHsKICAgICAgICAgICAgICAgIENvbHVtblNlcGFyYXRvciA9PiAnQ29sb24nLAogICAgICAgICAgICAgICAgQ2hhcnNldCAgICAgICAgID0+ICdVVEYtOCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFNvdXJjZUZpbGUgICAgPT4gJ0ltcG9ydEV4cG9ydEZvcm1hdENTVjAwNC1PcGVuT2ZmaWNlLUNvbG9uLmNzdicsCiAgICAgICAgICAgIEltcG9ydERhdGFHZXQgPT4gewogICAgICAgICAgICAgICAgVGVtcGxhdGVJRCAgICA9PiAkVGVtcGxhdGVJRHNbOF0sCiAgICAgICAgICAgICAgICBTb3VyY2VDb250ZW50ID0+ICdTb3VyY2VGaWxlJywKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgICAgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIFJlZmVyZW5jZUltcG9ydERhdGEgPT4gWwogICAgICAgICAgICBbICdUZXN0OzpfwrBeISLCpyQlJi8oKT0/wrRgKitUZXN0JywgJz48QH5cJ317W11cXCcgXSwKICAgICAgICAgICAgWyAnIiI7Ozo6Li4tLV9fIyMnLCAgICAgICAgICAgICAgICAgICcnIF0sCiAgICAgICAgXSwKICAgIH0sCgogICAgIyBhbGwgcmVxdWlyZWQgdmFsdWVzIGFyZSBnaXZlbgogICAgewogICAgICAgIFNvdXJjZUltcG9ydERhdGEgPT4gewogICAgICAgICAgICBGb3JtYXREYXRhID0+IHsKICAgICAgICAgICAgICAgIENvbHVtblNlcGFyYXRvciA9PiAnU2VtaWNvbG9uJywKICAgICAgICAgICAgICAgIENoYXJzZXQgICAgICAgICA9PiAnVVRGLTgnLAogICAgICAgICAgICB9LAogICAgICAgICAgICBTb3VyY2VGaWxlICAgID0+ICdJbXBvcnRFeHBvcnRGb3JtYXRDU1YwMDUtTVNFeGNlbC1TZW1pY29sb24uY3N2JywKICAgICAgICAgICAgSW1wb3J0RGF0YUdldCA9PiB7CiAgICAgICAgICAgICAgICBUZW1wbGF0ZUlEICAgID0+ICRUZW1wbGF0ZUlEc1s5XSwKICAgICAgICAgICAgICAgIFNvdXJjZUNvbnRlbnQgPT4gJ1NvdXJjZUZpbGUnLAogICAgICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgUmVmZXJlbmNlSW1wb3J0RGF0YSA9PiBbCiAgICAgICAgICAgIFsgJ8O8w7bDpMOfJywgJ8Ocw5bDhCcgXSwKICAgICAgICAgICAgWyAnw5/DpMO2w7wnLCAnw4TDlsOcJyBdLAogICAgICAgIF0sCiAgICB9LAoKICAgICMgYWxsIHJlcXVpcmVkIHZhbHVlcyBhcmUgZ2l2ZW4KICAgIHsKICAgICAgICBTb3VyY2VJbXBvcnREYXRhID0+IHsKICAgICAgICAgICAgRm9ybWF0RGF0YSA9PiB7CiAgICAgICAgICAgICAgICBDb2x1bW5TZXBhcmF0b3IgPT4gJ1RhYnVsYXRvcicsCiAgICAgICAgICAgICAgICBDaGFyc2V0ICAgICAgICAgPT4gJ1VURi04JywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgU291cmNlRmlsZSAgICA9PiAnSW1wb3J0RXhwb3J0Rm9ybWF0Q1NWMDA1LU1TRXhjZWwtVGFidWxhdG9yLmNzdicsCiAgICAgICAgICAgIEltcG9ydERhdGFHZXQgPT4gewogICAgICAgICAgICAgICAgVGVtcGxhdGVJRCAgICA9PiAkVGVtcGxhdGVJRHNbOV0sCiAgICAgICAgICAgICAgICBTb3VyY2VDb250ZW50ID0+ICdTb3VyY2VGaWxlJywKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgICAgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIFJlZmVyZW5jZUltcG9ydERhdGEgPT4gWwogICAgICAgICAgICBbICfDvMO2w6TDnycsICfDnMOWw4QnIF0sCiAgICAgICAgICAgIFsgJ8Ofw6TDtsO8JywgJ8OEw5bDnCcgXSwKICAgICAgICBdLAogICAgfSwKCiAgICAjIGFsbCByZXF1aXJlZCB2YWx1ZXMgYXJlIGdpdmVuCiAgICB7CiAgICAgICAgU291cmNlSW1wb3J0RGF0YSA9PiB7CiAgICAgICAgICAgIEZvcm1hdERhdGEgPT4gewogICAgICAgICAgICAgICAgQ29sdW1uU2VwYXJhdG9yID0+ICdTZW1pY29sb24nLAogICAgICAgICAgICAgICAgQ2hhcnNldCAgICAgICAgID0+ICdVVEYtOCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFNvdXJjZUZpbGUgICAgPT4gJ0ltcG9ydEV4cG9ydEZvcm1hdENTVjAwNS1PcGVuT2ZmaWNlLVNlbWljb2xvbi5jc3YnLAogICAgICAgICAgICBJbXBvcnREYXRhR2V0ID0+IHsKICAgICAgICAgICAgICAgIFRlbXBsYXRlSUQgICAgPT4gJFRlbXBsYXRlSURzWzldLAogICAgICAgICAgICAgICAgU291cmNlQ29udGVudCA9PiAnU291cmNlRmlsZScsCiAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBSZWZlcmVuY2VJbXBvcnREYXRhID0+IFsKICAgICAgICAgICAgWyAnw7zDtsOkw58nLCAnw5zDlsOEJyBdLAogICAgICAgICAgICBbICfDn8Okw7bDvCcsICfDhMOWw5wnIF0sCiAgICAgICAgXSwKICAgIH0sCgogICAgIyBhbGwgcmVxdWlyZWQgdmFsdWVzIGFyZSBnaXZlbgogICAgewogICAgICAgIFNvdXJjZUltcG9ydERhdGEgPT4gewogICAgICAgICAgICBGb3JtYXREYXRhID0+IHsKICAgICAgICAgICAgICAgIENvbHVtblNlcGFyYXRvciA9PiAnVGFidWxhdG9yJywKICAgICAgICAgICAgICAgIENoYXJzZXQgICAgICAgICA9PiAnVVRGLTgnLAogICAgICAgICAgICB9LAogICAgICAgICAgICBTb3VyY2VGaWxlICAgID0+ICdJbXBvcnRFeHBvcnRGb3JtYXRDU1YwMDUtT3Blbk9mZmljZS1UYWJ1bGF0b3IuY3N2JywKICAgICAgICAgICAgSW1wb3J0RGF0YUdldCA9PiB7CiAgICAgICAgICAgICAgICBUZW1wbGF0ZUlEICAgID0+ICRUZW1wbGF0ZUlEc1s5XSwKICAgICAgICAgICAgICAgIFNvdXJjZUNvbnRlbnQgPT4gJ1NvdXJjZUZpbGUnLAogICAgICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgUmVmZXJlbmNlSW1wb3J0RGF0YSA9PiBbCiAgICAgICAgICAgIFsgJ8O8w7bDpMOfJywgJ8Ocw5bDhCcgXSwKICAgICAgICAgICAgWyAnw5/DpMO2w7wnLCAnw4TDlsOcJyBdLAogICAgICAgIF0sCiAgICB9LAoKICAgICMgYWxsIHJlcXVpcmVkIHZhbHVlcyBhcmUgZ2l2ZW4KICAgIHsKICAgICAgICBTb3VyY2VJbXBvcnREYXRhID0+IHsKICAgICAgICAgICAgRm9ybWF0RGF0YSA9PiB7CiAgICAgICAgICAgICAgICBDb2x1bW5TZXBhcmF0b3IgPT4gJ0NvbG9uJywKICAgICAgICAgICAgICAgIENoYXJzZXQgICAgICAgICA9PiAnVVRGLTgnLAogICAgICAgICAgICB9LAogICAgICAgICAgICBTb3VyY2VGaWxlICAgID0+ICdJbXBvcnRFeHBvcnRGb3JtYXRDU1YwMDUtT3Blbk9mZmljZS1Db2xvbi5jc3YnLAogICAgICAgICAgICBJbXBvcnREYXRhR2V0ID0+IHsKICAgICAgICAgICAgICAgIFRlbXBsYXRlSUQgICAgPT4gJFRlbXBsYXRlSURzWzldLAogICAgICAgICAgICAgICAgU291cmNlQ29udGVudCA9PiAnU291cmNlRmlsZScsCiAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBSZWZlcmVuY2VJbXBvcnREYXRhID0+IFsKICAgICAgICAgICAgWyAnw7zDtsOkw58nLCAnw5zDlsOEJyBdLAogICAgICAgICAgICBbICfDn8Okw7bDvCcsICfDhMOWw5wnIF0sCiAgICAgICAgXSwKICAgIH0sCgogICAgIyBhbGwgcmVxdWlyZWQgdmFsdWVzIGFyZSBnaXZlbiAoVVRGLTggY2hlY2tzKQogICAgewogICAgICAgIFNvdXJjZUltcG9ydERhdGEgPT4gewogICAgICAgICAgICBGb3JtYXREYXRhID0+IHsKICAgICAgICAgICAgICAgIENvbHVtblNlcGFyYXRvciA9PiAnU2VtaWNvbG9uJywKICAgICAgICAgICAgICAgIENoYXJzZXQgICAgICAgICA9PiAnVVRGLTgnLAogICAgICAgICAgICB9LAogICAgICAgICAgICBTb3VyY2VGaWxlICAgID0+ICdJbXBvcnRFeHBvcnRGb3JtYXRDU1YwMDYtT3Blbk9mZmljZS1TZW1pY29sb24uY3N2JywKICAgICAgICAgICAgSW1wb3J0RGF0YUdldCA9PiB7CiAgICAgICAgICAgICAgICBUZW1wbGF0ZUlEICAgID0+ICRUZW1wbGF0ZUlEc1sxMF0sCiAgICAgICAgICAgICAgICBTb3VyY2VDb250ZW50ID0+ICdTb3VyY2VGaWxlJywKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgICAgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIFJlZmVyZW5jZUltcG9ydERhdGEgPT4gWwogICAgICAgICAgICBbICfKqSDKrCDKricsICAgICAnIMqhIMukIM6MICcgXSwKICAgICAgICAgICAgWyAnICDOlyDPlyDPoCAgJywgJ86GIM6bIM6eJyBdLAogICAgICAgIF0sCiAgICB9LAoKICAgICMgYWxsIHJlcXVpcmVkIHZhbHVlcyBhcmUgZ2l2ZW4gKFVURi04IGNoZWNrcykKICAgIHsKICAgICAgICBTb3VyY2VJbXBvcnREYXRhID0+IHsKICAgICAgICAgICAgRm9ybWF0RGF0YSA9PiB7CiAgICAgICAgICAgICAgICBDb2x1bW5TZXBhcmF0b3IgPT4gJ1RhYnVsYXRvcicsCiAgICAgICAgICAgICAgICBDaGFyc2V0ICAgICAgICAgPT4gJ1VURi04JywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgU291cmNlRmlsZSAgICA9PiAnSW1wb3J0RXhwb3J0Rm9ybWF0Q1NWMDA2LU9wZW5PZmZpY2UtVGFidWxhdG9yLmNzdicsCiAgICAgICAgICAgIEltcG9ydERhdGFHZXQgPT4gewogICAgICAgICAgICAgICAgVGVtcGxhdGVJRCAgICA9PiAkVGVtcGxhdGVJRHNbMTBdLAogICAgICAgICAgICAgICAgU291cmNlQ29udGVudCA9PiAnU291cmNlRmlsZScsCiAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBSZWZlcmVuY2VJbXBvcnREYXRhID0+IFsKICAgICAgICAgICAgWyAnyqkgyqwgyq4nLCAgICAgJyDKoSDLpCDOjCAnIF0sCiAgICAgICAgICAgIFsgJyAgzpcgz5cgz6AgICcsICfOhiDOmyDOnicgXSwKICAgICAgICBdLAogICAgfSwKCiAgICAjIGFsbCByZXF1aXJlZCB2YWx1ZXMgYXJlIGdpdmVuIChVVEYtOCBjaGVja3MpCiAgICB7CiAgICAgICAgU291cmNlSW1wb3J0RGF0YSA9PiB7CiAgICAgICAgICAgIEZvcm1hdERhdGEgPT4gewogICAgICAgICAgICAgICAgQ29sdW1uU2VwYXJhdG9yID0+ICdDb2xvbicsCiAgICAgICAgICAgICAgICBDaGFyc2V0ICAgICAgICAgPT4gJ1VURi04JywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgU291cmNlRmlsZSAgICA9PiAnSW1wb3J0RXhwb3J0Rm9ybWF0Q1NWMDA2LU9wZW5PZmZpY2UtQ29sb24uY3N2JywKICAgICAgICAgICAgSW1wb3J0RGF0YUdldCA9PiB7CiAgICAgICAgICAgICAgICBUZW1wbGF0ZUlEICAgID0+ICRUZW1wbGF0ZUlEc1sxMF0sCiAgICAgICAgICAgICAgICBTb3VyY2VDb250ZW50ID0+ICdTb3VyY2VGaWxlJywKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgICAgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIFJlZmVyZW5jZUltcG9ydERhdGEgPT4gWwogICAgICAgICAgICBbICfKqSDKrCDKricsICAgICAnIMqhIMukIM6MICcgXSwKICAgICAgICAgICAgWyAnICDOlyDPlyDPoCAgJywgJ86GIM6bIM6eJyBdLAogICAgICAgIF0sCiAgICB9LAoKICAgICMgYWxsIHJlcXVpcmVkIHZhbHVlcyBhcmUgZ2l2ZW4gKGNoZWNrIHRoZSBwYXJzZWQgY29udGVudCkKICAgIHsKICAgICAgICBTb3VyY2VJbXBvcnREYXRhID0+IHsKICAgICAgICAgICAgRm9ybWF0RGF0YSA9PiB7CiAgICAgICAgICAgICAgICBDb2x1bW5TZXBhcmF0b3IgPT4gJ1NlbWljb2xvbicsCiAgICAgICAgICAgICAgICBDaGFyc2V0ICAgICAgICAgPT4gJ1VURi04JywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgU291cmNlRmlsZSAgICA9PiAnSW1wb3J0RXhwb3J0Rm9ybWF0Q1NWMDA3LU9wZW5PZmZpY2UtU2VtaWNvbG9uLmNzdicsCiAgICAgICAgICAgIEltcG9ydERhdGFHZXQgPT4gewogICAgICAgICAgICAgICAgVGVtcGxhdGVJRCAgICA9PiAkVGVtcGxhdGVJRHNbNV0sCiAgICAgICAgICAgICAgICBTb3VyY2VDb250ZW50ID0+ICdTb3VyY2VGaWxlJywKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgICAgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIFJlZmVyZW5jZUltcG9ydERhdGEgPT4gWwogICAgICAgICAgICBbICdSb3cxLUNvbDEnLCAnUm93MS1Db2wyJywgICdSb3cxLUNvbDMnIF0sCiAgICAgICAgICAgIFsgJ1JvdzItQ29sMScsICdSb3cyLUNvbDInLCAgJ1JvdzItQ29sMycgXSwKICAgICAgICAgICAgWyAnUm93My1Db2wxJywgJzBSb3czLUNvbDInLCAnUm93My1Db2wzJyBdLAogICAgICAgIF0sCiAgICB9LAoKICAgICMgYWxsIHJlcXVpcmVkIHZhbHVlcyBhcmUgZ2l2ZW4gKGNoZWNrIHRoZSBwYXJzZWQgY29udGVudCkKICAgIHsKICAgICAgICBTb3VyY2VJbXBvcnREYXRhID0+IHsKICAgICAgICAgICAgRm9ybWF0RGF0YSA9PiB7CiAgICAgICAgICAgICAgICBDb2x1bW5TZXBhcmF0b3IgPT4gJ1NlbWljb2xvbicsCiAgICAgICAgICAgICAgICBDaGFyc2V0ICAgICAgICAgPT4gJ1VURi04JywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgU291cmNlRmlsZSAgICA9PiAnSW1wb3J0RXhwb3J0Rm9ybWF0Q1NWMDA4LU9wZW5PZmZpY2UtU2VtaWNvbG9uLmNzdicsCiAgICAgICAgICAgIEltcG9ydERhdGFHZXQgPT4gewogICAgICAgICAgICAgICAgVGVtcGxhdGVJRCAgICA9PiAkVGVtcGxhdGVJRHNbNV0sCiAgICAgICAgICAgICAgICBTb3VyY2VDb250ZW50ID0+ICdTb3VyY2VGaWxlJywKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgICAgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIFJlZmVyZW5jZUltcG9ydERhdGEgPT4gWwogICAgICAgICAgICBbICdSb3cxLUNvbDEnLCAnUm93MS1Db2wyJywgICdSb3cxLUNvbDMnIF0sCiAgICAgICAgICAgIFsgJ1JvdzItQ29sMScsICcwUm93Mi1Db2wyJywgJ1JvdzItQ29sMycgXSwKICAgICAgICAgICAgWyAnUm93My1Db2wxJywgJ1JvdzMtQ29sMicsICAnUm93My1Db2wzJyBdLAogICAgICAgIF0sCiAgICB9LAoKXTsKCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKIyBydW4gZ2VuZXJhbCBJbXBvcnREYXRhR2V0IHRlc3RzCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKClRFU1Q6CmZvciBteSAkVGVzdCAoIEB7JEltcG9ydERhdGFUZXN0c30gKSB7CgogICAgIyBjaGVjayBTb3VyY2VJbXBvcnREYXRhIGF0dHJpYnV0ZQogICAgaWYgKCAhJFRlc3QtPntTb3VyY2VJbXBvcnREYXRhfSB8fCByZWYgJFRlc3QtPntTb3VyY2VJbXBvcnREYXRhfSBuZSAnSEFTSCcgKSB7CgogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAwLAogICAgICAgICAgICAiVGVzdCAkVGVzdENvdW50OiBObyBTb3VyY2VJbXBvcnREYXRhIGZvdW5kIGZvciB0aGlzIHRlc3QuIgogICAgICAgICk7CgogICAgICAgIG5leHQgVEVTVDsKICAgIH0KCiAgICAjIHNldCBkZWZhdWx0IEltcG9ydERhdGFHZXQKICAgIGlmICggISRUZXN0LT57U291cmNlSW1wb3J0RGF0YX0tPntJbXBvcnREYXRhR2V0fSApIHsKICAgICAgICAkVGVzdC0+e1NvdXJjZUltcG9ydERhdGF9LT57SW1wb3J0RGF0YUdldH0gPSB7fTsKICAgIH0KCiAgICAjIHNldCBzb3VyY2UgY29udGVudAogICAgaWYgKAogICAgICAgICRUZXN0LT57U291cmNlSW1wb3J0RGF0YX0tPntTb3VyY2VGaWxlfQogICAgICAgICYmICRUZXN0LT57U291cmNlSW1wb3J0RGF0YX0tPntJbXBvcnREYXRhR2V0fS0+e1NvdXJjZUNvbnRlbnR9CiAgICAgICAgJiYgJFRlc3QtPntTb3VyY2VJbXBvcnREYXRhfS0+e0ltcG9ydERhdGFHZXR9LT57U291cmNlQ29udGVudH0gZXEgJ1NvdXJjZUZpbGUnCiAgICAgICAgKQogICAgewoKICAgICAgICBteSAkU291cmNlRmlsZSA9ICRUZXN0LT57U291cmNlSW1wb3J0RGF0YX0tPntTb3VyY2VGaWxlfTsKCiAgICAgICAgIyByZWFkIHNvdXJjZSBmaWxlCiAgICAgICAgbXkgJFNvdXJjZUNvbnRlbnQgPSAkTWFpbk9iamVjdC0+RmlsZVJlYWQoCiAgICAgICAgICAgIExvY2F0aW9uID0+ICRTZWxmLT57SG9tZX0gLiAnL3NjcmlwdHMvdGVzdC9zYW1wbGUvSW1wb3J0RXhwb3J0LycgLiAkU291cmNlRmlsZSwKICAgICAgICAgICAgUmVzdWx0ICAgPT4gJ1NDQUxBUicsCiAgICAgICAgICAgIE1vZGUgICAgID0+ICdiaW5tb2RlJywKICAgICAgICApOwoKICAgICAgICAkVGVzdC0+e1NvdXJjZUltcG9ydERhdGF9LT57SW1wb3J0RGF0YUdldH0tPntTb3VyY2VDb250ZW50fSA9ICRTb3VyY2VDb250ZW50OwogICAgfQoKICAgICMgc2V0IHRoZSBmb3JtYXQgZGF0YQogICAgaWYgKAogICAgICAgICRUZXN0LT57U291cmNlSW1wb3J0RGF0YX0tPntGb3JtYXREYXRhfQogICAgICAgICYmIHJlZiAkVGVzdC0+e1NvdXJjZUltcG9ydERhdGF9LT57Rm9ybWF0RGF0YX0gZXEgJ0hBU0gnCiAgICAgICAgJiYgJFRlc3QtPntTb3VyY2VJbXBvcnREYXRhfS0+e0ltcG9ydERhdGFHZXR9LT57VGVtcGxhdGVJRH0KICAgICAgICApCiAgICB7CgogICAgICAgICMgc2F2ZSBmb3JtYXQgZGF0YQogICAgICAgICRJbXBvcnRFeHBvcnRPYmplY3QtPkZvcm1hdERhdGFTYXZlKAogICAgICAgICAgICBUZW1wbGF0ZUlEID0+ICRUZXN0LT57U291cmNlSW1wb3J0RGF0YX0tPntJbXBvcnREYXRhR2V0fS0+e1RlbXBsYXRlSUR9LAogICAgICAgICAgICBGb3JtYXREYXRhID0+ICRUZXN0LT57U291cmNlSW1wb3J0RGF0YX0tPntGb3JtYXREYXRhfSwKICAgICAgICAgICAgVXNlcklEICAgICA9PiAxLAogICAgICAgICk7CiAgICB9CgogICAgIyBnZXQgaW1wb3J0IGRhdGEKICAgIG15ICRJbXBvcnREYXRhID0gJEZvcm1hdEJhY2tlbmRPYmplY3QtPkltcG9ydERhdGFHZXQoCiAgICAgICAgJXsgJFRlc3QtPntTb3VyY2VJbXBvcnREYXRhfS0+e0ltcG9ydERhdGFHZXR9IH0sCiAgICApOwoKICAgIGlmICggISRUZXN0LT57UmVmZXJlbmNlSW1wb3J0RGF0YX0gKSB7CgogICAgICAgICRTZWxmLT5GYWxzZSgKICAgICAgICAgICAgJEltcG9ydERhdGEsCiAgICAgICAgICAgICJUZXN0ICRUZXN0Q291bnQ6IEltcG9ydERhdGFHZXQoKSAtIHJldHVybiBmYWxzZSIKICAgICAgICApOwoKICAgICAgICBuZXh0IFRFU1Q7CiAgICB9CgogICAgaWYgKCByZWYgJEltcG9ydERhdGEgbmUgJ0FSUkFZJyApIHsKCiAgICAgICAgIyBjaGVjayBhcnJheSByZWZlcmVuY2UKICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgMCwKICAgICAgICAgICAgIlRlc3QgJFRlc3RDb3VudDogSW1wb3J0RGF0YUdldCgpIC0gcmV0dXJuIHZhbHVlIGlzIGFuIGFycmF5IHJlZmVyZW5jZSIsCiAgICAgICAgKTsKCiAgICAgICAgbmV4dCBURVNUOwogICAgfQoKICAgICMgY2hlY2sgbnVtYmVyIG9mIHJvd3MKICAgICRTZWxmLT5JcygKICAgICAgICBzY2FsYXIgQHskSW1wb3J0RGF0YX0sCiAgICAgICAgc2NhbGFyIEB7ICRUZXN0LT57UmVmZXJlbmNlSW1wb3J0RGF0YX0gfSwKICAgICAgICAiVGVzdCAkVGVzdENvdW50OiBJbXBvcnREYXRhR2V0KCkgLSBzYW1lIG51bWJlciBvZiByb3dzIiwKICAgICk7CgogICAgIyBjaGVjayBjb250ZW50IG9mIGltcG9ydCBkYXRhCiAgICBteSAkQ291bnRlclJvdyA9IDA7CiAgICBST1c6CiAgICBmb3IgbXkgJEltcG9ydFJvdyAoIEB7JEltcG9ydERhdGF9ICkgewoKICAgICAgICAjIGV4dHJhY3QgcmVmZXJlbmNlIHJvdwogICAgICAgIG15ICRSZWZlcmVuY2VSb3cgPSAkVGVzdC0+e1JlZmVyZW5jZUltcG9ydERhdGF9LT5bJENvdW50ZXJSb3ddOwoKICAgICAgICBpZiAoIHJlZiAkSW1wb3J0Um93IG5lICdBUlJBWScgfHwgcmVmICRSZWZlcmVuY2VSb3cgbmUgJ0FSUkFZJyApIHsKCiAgICAgICAgICAgICMgY2hlY2sgYXJyYXkgcmVmZXJlbmNlCiAgICAgICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAgICAgMCwKICAgICAgICAgICAgICAgICJUZXN0ICRUZXN0Q291bnQ6IEltcG9ydERhdGFHZXQoKSAtIGltcG9ydCByb3cgYW5kIHJlZmVyZW5jZSByb3cgbWF0Y2hlZCIsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICBuZXh0IFRFU1Q7CiAgICAgICAgfQoKICAgICAgICAjICMgcHJpbnQgdGhlIGZpbGUgbmFtZQogICAgICAgICMgJFNlbGYtPlRydWUoCiAgICAgICAgIyAgICAgMSwKICAgICAgICAjICAgICAkVGVzdC0+e1NvdXJjZUltcG9ydERhdGF9LT57U291cmNlRmlsZX0sCiAgICAgICAgIyApOwoKICAgICAgICAjIGNoZWNrIG51bWJlciBvZiBjb2x1bW5zCiAgICAgICAgJFNlbGYtPklzKAogICAgICAgICAgICBzY2FsYXIgQHskSW1wb3J0Um93fSwKICAgICAgICAgICAgc2NhbGFyIEB7JFJlZmVyZW5jZVJvd30sCiAgICAgICAgICAgICJUZXN0ICRUZXN0Q291bnQ6IEltcG9ydERhdGFHZXQoKSAtIHNhbWUgbnVtYmVyIG9mIGNvbHVtbnMiLAogICAgICAgICk7CgogICAgICAgIG15ICRDb3VudGVyQ29sdW1uID0gMDsKICAgICAgICBmb3IgbXkgJENlbGwgKCBAeyRJbXBvcnRSb3d9ICkgewoKICAgICAgICAgICAgIyBzZXQgY29udGVudCBpZiB2YWx1ZXMgYXJlIHVuZGVmCiAgICAgICAgICAgIGlmICggIWRlZmluZWQgJENlbGwgKSB7CiAgICAgICAgICAgICAgICAkQ2VsbCA9ICdVTkRFRi11bml0dGVzdCc7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKCAhZGVmaW5lZCAkUmVmZXJlbmNlUm93LT5bJENvdW50ZXJDb2x1bW5dICkgewogICAgICAgICAgICAgICAgJFJlZmVyZW5jZVJvdy0+WyRDb3VudGVyQ29sdW1uXSA9ICdVTkRFRi11bml0dGVzdCc7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgY2hlY2sgY2VsbCBkYXRhCiAgICAgICAgICAgICRTZWxmLT5JcygKICAgICAgICAgICAgICAgICRDZWxsLAogICAgICAgICAgICAgICAgJFJlZmVyZW5jZVJvdy0+WyRDb3VudGVyQ29sdW1uXSwKICAgICAgICAgICAgICAgICJUZXN0ICRUZXN0Q291bnQ6IEltcG9ydERhdGFHZXQoKSAiLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgJENvdW50ZXJDb2x1bW4rKzsKICAgICAgICB9CgogICAgICAgICRDb3VudGVyUm93Kys7CiAgICB9Cn0KY29udGludWUgewogICAgJFRlc3RDb3VudCsrOwp9CgojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiMgZGVmaW5lIGdlbmVyYWwgRXhwb3J0RGF0YVNhdmUgdGVzdHMKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwoKbXkgJEV4cG9ydERhdGFUZXN0cyA9IFsKCiAgICAjIEV4cG9ydERhdGFTYXZlIGRvZXNuJ3QgY29udGFpbnMgYWxsIGRhdGEgKGNoZWNrIHJlcXVpcmVkIGF0dHJpYnV0ZXMpCiAgICB7CiAgICAgICAgU291cmNlRXhwb3J0RGF0YSA9PiB7CiAgICAgICAgICAgIEV4cG9ydERhdGFTYXZlID0+IHsKICAgICAgICAgICAgICAgIEV4cG9ydERhdGFSb3cgPT4gWydEdW1teSddLAogICAgICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICB9LAoKICAgICMgRXhwb3J0RGF0YVNhdmUgZG9lc24ndCBjb250YWlucyBhbGwgZGF0YSAoY2hlY2sgcmVxdWlyZWQgYXR0cmlidXRlcykKICAgIHsKICAgICAgICBTb3VyY2VFeHBvcnREYXRhID0+IHsKICAgICAgICAgICAgRXhwb3J0RGF0YVNhdmUgPT4gewogICAgICAgICAgICAgICAgVGVtcGxhdGVJRCA9PiAkVGVtcGxhdGVJRHNbMjBdLAogICAgICAgICAgICAgICAgVXNlcklEICAgICA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICB9LAoKICAgICMgRXhwb3J0RGF0YVNhdmUgZG9lc24ndCBjb250YWlucyBhbGwgZGF0YSAoY2hlY2sgcmVxdWlyZWQgYXR0cmlidXRlcykKICAgIHsKICAgICAgICBTb3VyY2VFeHBvcnREYXRhID0+IHsKICAgICAgICAgICAgRXhwb3J0RGF0YVNhdmUgPT4gewogICAgICAgICAgICAgICAgVGVtcGxhdGVJRCAgICA9PiAkVGVtcGxhdGVJRHNbMjBdLAogICAgICAgICAgICAgICAgRXhwb3J0RGF0YVJvdyA9PiBbJ0R1bW15J10sCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgIH0sCgogICAgIyBleHBvcnQgZGF0YSByb3cgbXVzdCBiZSBhbiBhcnJheSByZWZlcmVuY2UgKGNoZWNrIHJldHVybiBmYWxzZSkKICAgIHsKICAgICAgICBTb3VyY2VFeHBvcnREYXRhID0+IHsKICAgICAgICAgICAgRXhwb3J0RGF0YVNhdmUgPT4gewogICAgICAgICAgICAgICAgVGVtcGxhdGVJRCAgICA9PiAkVGVtcGxhdGVJRHNbMjBdLAogICAgICAgICAgICAgICAgRXhwb3J0RGF0YVJvdyA9PiAnJywKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgICAgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgfSwKCiAgICAjIGV4cG9ydCBkYXRhIHJvdyBtdXN0IGJlIGFuIGFycmF5IHJlZmVyZW5jZSAoY2hlY2sgcmV0dXJuIGZhbHNlKQogICAgewogICAgICAgIFNvdXJjZUV4cG9ydERhdGEgPT4gewogICAgICAgICAgICBFeHBvcnREYXRhU2F2ZSA9PiB7CiAgICAgICAgICAgICAgICBUZW1wbGF0ZUlEICAgID0+ICRUZW1wbGF0ZUlEc1syMF0sCiAgICAgICAgICAgICAgICBFeHBvcnREYXRhUm93ID0+IHt9LAogICAgICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICB9LAoKICAgICMgbm8gZXhpc3RpbmcgdGVtcGxhdGUgaWQgaXMgZ2l2ZW4gKGNoZWNrIHJldHVybiBmYWxzZSkKICAgIHsKICAgICAgICBTb3VyY2VFeHBvcnREYXRhID0+IHsKICAgICAgICAgICAgRXhwb3J0RGF0YVNhdmUgPT4gewogICAgICAgICAgICAgICAgVGVtcGxhdGVJRCAgICA9PiAkVGVtcGxhdGVJRHNbLTFdICsgMSwKICAgICAgICAgICAgICAgIEV4cG9ydERhdGFSb3cgPT4gWydEdW1teSddLAogICAgICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICB9LAoKICAgICMgbm8gY29sdW1uIFNlcGFyYXRvciBhbmQgY2hhcnNldCBhcmUgZ2l2ZW4gKGNoZWNrIHJldHVybiBmYWxzZSkKICAgIHsKICAgICAgICBTb3VyY2VFeHBvcnREYXRhID0+IHsKICAgICAgICAgICAgRXhwb3J0RGF0YVNhdmUgPT4gewogICAgICAgICAgICAgICAgVGVtcGxhdGVJRCAgICA9PiAkVGVtcGxhdGVJRHNbMjFdLAogICAgICAgICAgICAgICAgRXhwb3J0RGF0YVJvdyA9PiBbJ0R1bW15J10sCiAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgIH0sCgogICAgIyBubyBjb2x1bW4gU2VwYXJhdG9yIGlzIGdpdmVuIChjaGVjayByZXR1cm4gZmFsc2UpCiAgICB7CiAgICAgICAgU291cmNlRXhwb3J0RGF0YSA9PiB7CiAgICAgICAgICAgIEZvcm1hdERhdGEgPT4gewogICAgICAgICAgICAgICAgQ2hhcnNldCA9PiAnVVRGLTgnLAogICAgICAgICAgICB9LAogICAgICAgICAgICBFeHBvcnREYXRhU2F2ZSA9PiB7CiAgICAgICAgICAgICAgICBUZW1wbGF0ZUlEICAgID0+ICRUZW1wbGF0ZUlEc1syMV0sCiAgICAgICAgICAgICAgICBFeHBvcnREYXRhUm93ID0+IFsnRHVtbXknXSwKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgICAgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgfSwKCiAgICAjIG5vIGNoYXJzZXQgaXMgZ2l2ZW4gKGNoZWNrIHJldHVybiBmYWxzZSkKICAgIHsKICAgICAgICBTb3VyY2VFeHBvcnREYXRhID0+IHsKICAgICAgICAgICAgRm9ybWF0RGF0YSA9PiB7CiAgICAgICAgICAgICAgICBDb2x1bW5TZXBhcmF0b3IgPT4gJ0R1bW15JywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgRXhwb3J0RGF0YVNhdmUgPT4gewogICAgICAgICAgICAgICAgVGVtcGxhdGVJRCAgICA9PiAkVGVtcGxhdGVJRHNbMjFdLAogICAgICAgICAgICAgICAgRXhwb3J0RGF0YVJvdyA9PiBbJ0R1bW15J10sCiAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgIH0sCgogICAgIyBpbnZhbGlkIGNvbHVtbiBTZXBhcmF0b3IgaXMgZ2l2ZW4gKGNoZWNrIHJldHVybiBmYWxzZSkKICAgIHsKICAgICAgICBTb3VyY2VFeHBvcnREYXRhID0+IHsKICAgICAgICAgICAgRm9ybWF0RGF0YSA9PiB7CiAgICAgICAgICAgICAgICBDb2x1bW5TZXBhcmF0b3IgPT4gJ0R1bW15JywKICAgICAgICAgICAgICAgIENoYXJzZXQgICAgICAgICA9PiAnVVRGLTgnLAogICAgICAgICAgICB9LAogICAgICAgICAgICBFeHBvcnREYXRhU2F2ZSA9PiB7CiAgICAgICAgICAgICAgICBUZW1wbGF0ZUlEICAgID0+ICRUZW1wbGF0ZUlEc1syMV0sCiAgICAgICAgICAgICAgICBFeHBvcnREYXRhUm93ID0+IFsnRHVtbXknXSwKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgICAgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgfSwKCiAgICAjIGV4cG9ydCBkYXRhIGFyZSBvbmUgY2VsbHMgd2l0aCBlbXB0eSBzdHJpbmdzIChvbmUgZW1wdHkgY2VsbCBtdXN0IGJlIHJldHVybmVkKQogICAgewogICAgICAgIFNvdXJjZUV4cG9ydERhdGEgPT4gewogICAgICAgICAgICBGb3JtYXREYXRhID0+IHsKICAgICAgICAgICAgICAgIENvbHVtblNlcGFyYXRvciA9PiAnU2VtaWNvbG9uJywKICAgICAgICAgICAgICAgIENoYXJzZXQgICAgICAgICA9PiAnVVRGLTgnLAogICAgICAgICAgICB9LAogICAgICAgICAgICBFeHBvcnREYXRhU2F2ZSA9PiB7CiAgICAgICAgICAgICAgICBUZW1wbGF0ZUlEICAgID0+ICRUZW1wbGF0ZUlEc1syMl0sCiAgICAgICAgICAgICAgICBFeHBvcnREYXRhUm93ID0+IFsnJ10sCiAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBSZWZlcmVuY2VEZXN0aW5hdGlvbkNvbnRlbnQgPT4gJyIiJywKICAgIH0sCgogICAgIyBleHBvcnQgZGF0YSBhcmUgb25lIGNlbGxzIHdpdGggZW1wdHkgc3RyaW5ncyAob25lIGVtcHR5IGNlbGwgbXVzdCBiZSByZXR1cm5lZCkKICAgIHsKICAgICAgICBTb3VyY2VFeHBvcnREYXRhID0+IHsKICAgICAgICAgICAgRm9ybWF0RGF0YSA9PiB7CiAgICAgICAgICAgICAgICBDb2x1bW5TZXBhcmF0b3IgPT4gJ1RhYnVsYXRvcicsCiAgICAgICAgICAgICAgICBDaGFyc2V0ICAgICAgICAgPT4gJ1VURi04JywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgRXhwb3J0RGF0YVNhdmUgPT4gewogICAgICAgICAgICAgICAgVGVtcGxhdGVJRCAgICA9PiAkVGVtcGxhdGVJRHNbMjJdLAogICAgICAgICAgICAgICAgRXhwb3J0RGF0YVJvdyA9PiBbJyddLAogICAgICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgUmVmZXJlbmNlRGVzdGluYXRpb25Db250ZW50ID0+ICciIicsCiAgICB9LAoKICAgICMgZXhwb3J0IGRhdGEgYXJlIG9uZSBjZWxscyB3aXRoIGVtcHR5IHN0cmluZ3MgKG9uZSBlbXB0eSBjZWxsIG11c3QgYmUgcmV0dXJuZWQpCiAgICB7CiAgICAgICAgU291cmNlRXhwb3J0RGF0YSA9PiB7CiAgICAgICAgICAgIEZvcm1hdERhdGEgPT4gewogICAgICAgICAgICAgICAgQ29sdW1uU2VwYXJhdG9yID0+ICdDb2xvbicsCiAgICAgICAgICAgICAgICBDaGFyc2V0ICAgICAgICAgPT4gJ1VURi04JywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgRXhwb3J0RGF0YVNhdmUgPT4gewogICAgICAgICAgICAgICAgVGVtcGxhdGVJRCAgICA9PiAkVGVtcGxhdGVJRHNbMjJdLAogICAgICAgICAgICAgICAgRXhwb3J0RGF0YVJvdyA9PiBbJyddLAogICAgICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgUmVmZXJlbmNlRGVzdGluYXRpb25Db250ZW50ID0+ICciIicsCiAgICB9LAoKICAgICMgZXhwb3J0IGRhdGEgYXJlIG9uZSBjZWxscyB3aXRoIGVtcHR5IHN0cmluZ3MgKG9uZSBlbXB0eSBjZWxsIG11c3QgYmUgcmV0dXJuZWQpCiAgICB7CiAgICAgICAgU291cmNlRXhwb3J0RGF0YSA9PiB7CiAgICAgICAgICAgIEZvcm1hdERhdGEgPT4gewogICAgICAgICAgICAgICAgQ29sdW1uU2VwYXJhdG9yID0+ICdEb3QnLAogICAgICAgICAgICAgICAgQ2hhcnNldCAgICAgICAgID0+ICdVVEYtOCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEV4cG9ydERhdGFTYXZlID0+IHsKICAgICAgICAgICAgICAgIFRlbXBsYXRlSUQgICAgPT4gJFRlbXBsYXRlSURzWzIyXSwKICAgICAgICAgICAgICAgIEV4cG9ydERhdGFSb3cgPT4gWycnXSwKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgICAgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIFJlZmVyZW5jZURlc3RpbmF0aW9uQ29udGVudCA9PiAnIiInLAogICAgfSwKCiAgICAjIGV4cG9ydCBkYXRhIGFyZSB0aHJlZSBjZWxscyB3aXRoIGVtcHR5IHN0cmluZ3MgKHRocmVlIGVtcHR5IGNlbGxzIG11c3QgYmUgcmV0dXJuZWQpCiAgICB7CiAgICAgICAgU291cmNlRXhwb3J0RGF0YSA9PiB7CiAgICAgICAgICAgIEZvcm1hdERhdGEgPT4gewogICAgICAgICAgICAgICAgQ29sdW1uU2VwYXJhdG9yID0+ICdTZW1pY29sb24nLAogICAgICAgICAgICAgICAgQ2hhcnNldCAgICAgICAgID0+ICdVVEYtOCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEV4cG9ydERhdGFTYXZlID0+IHsKICAgICAgICAgICAgICAgIFRlbXBsYXRlSUQgICAgPT4gJFRlbXBsYXRlSURzWzIyXSwKICAgICAgICAgICAgICAgIEV4cG9ydERhdGFSb3cgPT4gWyAnJywgJycsICcnIF0sCiAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBSZWZlcmVuY2VEZXN0aW5hdGlvbkNvbnRlbnQgPT4gJyIiOyIiOyIiJywKICAgIH0sCgogICAgIyBleHBvcnQgZGF0YSBhcmUgdGhyZWUgY2VsbHMgd2l0aCBlbXB0eSBzdHJpbmdzICh0aHJlZSBlbXB0eSBjZWxscyBtdXN0IGJlIHJldHVybmVkKQogICAgewogICAgICAgIFNvdXJjZUV4cG9ydERhdGEgPT4gewogICAgICAgICAgICBGb3JtYXREYXRhID0+IHsKICAgICAgICAgICAgICAgIENvbHVtblNlcGFyYXRvciA9PiAnVGFidWxhdG9yJywKICAgICAgICAgICAgICAgIENoYXJzZXQgICAgICAgICA9PiAnVVRGLTgnLAogICAgICAgICAgICB9LAogICAgICAgICAgICBFeHBvcnREYXRhU2F2ZSA9PiB7CiAgICAgICAgICAgICAgICBUZW1wbGF0ZUlEICAgID0+ICRUZW1wbGF0ZUlEc1syMl0sCiAgICAgICAgICAgICAgICBFeHBvcnREYXRhUm93ID0+IFsgJycsICcnLCAnJyBdLAogICAgICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgUmVmZXJlbmNlRGVzdGluYXRpb25Db250ZW50ID0+ICJcIlwiXHRcIlwiXHRcIlwiIiwKICAgIH0sCgogICAgIyBleHBvcnQgZGF0YSBhcmUgdGhyZWUgY2VsbHMgd2l0aCBlbXB0eSBzdHJpbmdzICh0aHJlZSBlbXB0eSBjZWxscyBtdXN0IGJlIHJldHVybmVkKQogICAgewogICAgICAgIFNvdXJjZUV4cG9ydERhdGEgPT4gewogICAgICAgICAgICBGb3JtYXREYXRhID0+IHsKICAgICAgICAgICAgICAgIENvbHVtblNlcGFyYXRvciA9PiAnQ29sb24nLAogICAgICAgICAgICAgICAgQ2hhcnNldCAgICAgICAgID0+ICdVVEYtOCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEV4cG9ydERhdGFTYXZlID0+IHsKICAgICAgICAgICAgICAgIFRlbXBsYXRlSUQgICAgPT4gJFRlbXBsYXRlSURzWzIyXSwKICAgICAgICAgICAgICAgIEV4cG9ydERhdGFSb3cgPT4gWyAnJywgJycsICcnIF0sCiAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBSZWZlcmVuY2VEZXN0aW5hdGlvbkNvbnRlbnQgPT4gJyIiOiIiOiIiJywKICAgIH0sCgogICAgIyBleHBvcnQgZGF0YSBhcmUgdGhyZWUgY2VsbHMgd2l0aCBlbXB0eSBzdHJpbmdzICh0aHJlZSBlbXB0eSBjZWxscyBtdXN0IGJlIHJldHVybmVkKQogICAgewogICAgICAgIFNvdXJjZUV4cG9ydERhdGEgPT4gewogICAgICAgICAgICBGb3JtYXREYXRhID0+IHsKICAgICAgICAgICAgICAgIENvbHVtblNlcGFyYXRvciA9PiAnRG90JywKICAgICAgICAgICAgICAgIENoYXJzZXQgICAgICAgICA9PiAnVVRGLTgnLAogICAgICAgICAgICB9LAogICAgICAgICAgICBFeHBvcnREYXRhU2F2ZSA9PiB7CiAgICAgICAgICAgICAgICBUZW1wbGF0ZUlEICAgID0+ICRUZW1wbGF0ZUlEc1syMl0sCiAgICAgICAgICAgICAgICBFeHBvcnREYXRhUm93ID0+IFsgJycsICcnLCAnJyBdLAogICAgICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgUmVmZXJlbmNlRGVzdGluYXRpb25Db250ZW50ID0+ICciIi4iIi4iIicsCiAgICB9LAoKICAgICMgZXhwb3J0IGRhdGEgYXJlIHRocmVlIGNlbGxzIHdpdGggZW1wdHkgYW5kIHVuZGVmIGNvbnRlbnQgKHRocmVlIGVtcHR5IGNlbGxzIG11c3QgYmUgcmV0dXJuZWQpCiAgICB7CiAgICAgICAgU291cmNlRXhwb3J0RGF0YSA9PiB7CiAgICAgICAgICAgIEZvcm1hdERhdGEgPT4gewogICAgICAgICAgICAgICAgQ29sdW1uU2VwYXJhdG9yID0+ICdTZW1pY29sb24nLAogICAgICAgICAgICAgICAgQ2hhcnNldCAgICAgICAgID0+ICdVVEYtOCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEV4cG9ydERhdGFTYXZlID0+IHsKICAgICAgICAgICAgICAgIFRlbXBsYXRlSUQgICAgPT4gJFRlbXBsYXRlSURzWzIyXSwKICAgICAgICAgICAgICAgIEV4cG9ydERhdGFSb3cgPT4gWyB1bmRlZiwgJycsIHVuZGVmIF0sCiAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBSZWZlcmVuY2VEZXN0aW5hdGlvbkNvbnRlbnQgPT4gJzsiIjsnLAogICAgfSwKCiAgICAjIGV4cG9ydCBkYXRhIGFyZSB0aHJlZSBjZWxscyB3aXRoIGVtcHR5IGFuZCB1bmRlZiBjb250ZW50ICh0aHJlZSBlbXB0eSBjZWxscyBtdXN0IGJlIHJldHVybmVkKQogICAgewogICAgICAgIFNvdXJjZUV4cG9ydERhdGEgPT4gewogICAgICAgICAgICBGb3JtYXREYXRhID0+IHsKICAgICAgICAgICAgICAgIENvbHVtblNlcGFyYXRvciA9PiAnVGFidWxhdG9yJywKICAgICAgICAgICAgICAgIENoYXJzZXQgICAgICAgICA9PiAnVVRGLTgnLAogICAgICAgICAgICB9LAogICAgICAgICAgICBFeHBvcnREYXRhU2F2ZSA9PiB7CiAgICAgICAgICAgICAgICBUZW1wbGF0ZUlEICAgID0+ICRUZW1wbGF0ZUlEc1syMl0sCiAgICAgICAgICAgICAgICBFeHBvcnREYXRhUm93ID0+IFsgdW5kZWYsICcnLCB1bmRlZiBdLAogICAgICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgUmVmZXJlbmNlRGVzdGluYXRpb25Db250ZW50ID0+ICJcdFwiXCJcdCIsCiAgICB9LAoKICAgICMgZXhwb3J0IGRhdGEgYXJlIHRocmVlIGNlbGxzIHdpdGggZW1wdHkgYW5kIHVuZGVmIGNvbnRlbnQgKHRocmVlIGVtcHR5IGNlbGxzIG11c3QgYmUgcmV0dXJuZWQpCiAgICB7CiAgICAgICAgU291cmNlRXhwb3J0RGF0YSA9PiB7CiAgICAgICAgICAgIEZvcm1hdERhdGEgPT4gewogICAgICAgICAgICAgICAgQ29sdW1uU2VwYXJhdG9yID0+ICdDb2xvbicsCiAgICAgICAgICAgICAgICBDaGFyc2V0ICAgICAgICAgPT4gJ1VURi04JywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgRXhwb3J0RGF0YVNhdmUgPT4gewogICAgICAgICAgICAgICAgVGVtcGxhdGVJRCAgICA9PiAkVGVtcGxhdGVJRHNbMjJdLAogICAgICAgICAgICAgICAgRXhwb3J0RGF0YVJvdyA9PiBbIHVuZGVmLCAnJywgdW5kZWYgXSwKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgICAgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIFJlZmVyZW5jZURlc3RpbmF0aW9uQ29udGVudCA9PiAnOiIiOicsCiAgICB9LAoKICAgICMgZXhwb3J0IGRhdGEgYXJlIHRocmVlIGNlbGxzIHdpdGggZW1wdHkgYW5kIHVuZGVmIGNvbnRlbnQgKHRocmVlIGVtcHR5IGNlbGxzIG11c3QgYmUgcmV0dXJuZWQpCiAgICB7CiAgICAgICAgU291cmNlRXhwb3J0RGF0YSA9PiB7CiAgICAgICAgICAgIEZvcm1hdERhdGEgPT4gewogICAgICAgICAgICAgICAgQ29sdW1uU2VwYXJhdG9yID0+ICdEb3QnLAogICAgICAgICAgICAgICAgQ2hhcnNldCAgICAgICAgID0+ICdVVEYtOCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEV4cG9ydERhdGFTYXZlID0+IHsKICAgICAgICAgICAgICAgIFRlbXBsYXRlSUQgICAgPT4gJFRlbXBsYXRlSURzWzIyXSwKICAgICAgICAgICAgICAgIEV4cG9ydERhdGFSb3cgPT4gWyB1bmRlZiwgJycsIHVuZGVmIF0sCiAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBSZWZlcmVuY2VEZXN0aW5hdGlvbkNvbnRlbnQgPT4gJy4iIi4nLAogICAgfSwKCiAgICAjIGFsbCByZXF1aXJlZCB2YWx1ZXMgYXJlIGdpdmVuIChjaGVjayB0aGUgcGFyc2VkIGNvbnRlbnQpCiAgICB7CiAgICAgICAgU291cmNlRXhwb3J0RGF0YSA9PiB7CiAgICAgICAgICAgIEZvcm1hdERhdGEgPT4gewogICAgICAgICAgICAgICAgQ29sdW1uU2VwYXJhdG9yID0+ICdTZW1pY29sb24nLAogICAgICAgICAgICAgICAgQ2hhcnNldCAgICAgICAgID0+ICdVVEYtOCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEV4cG9ydERhdGFTYXZlID0+IHsKICAgICAgICAgICAgICAgIFRlbXBsYXRlSUQgICAgPT4gJFRlbXBsYXRlSURzWzIzXSwKICAgICAgICAgICAgICAgIEV4cG9ydERhdGFSb3cgPT4gWyAnUm93MS1Db2wxJywgJ1JvdzEtQ29sMicsICdSb3cxLUNvbDMnIF0sCiAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBSZWZlcmVuY2VEZXN0aW5hdGlvbkNvbnRlbnQgPT4gJyJSb3cxLUNvbDEiOyJSb3cxLUNvbDIiOyJSb3cxLUNvbDMiJywKICAgIH0sCgogICAgIyBhbGwgcmVxdWlyZWQgdmFsdWVzIGFyZSBnaXZlbiAoY2hlY2sgdGhlIHBhcnNlZCBjb250ZW50KQogICAgewogICAgICAgIFNvdXJjZUV4cG9ydERhdGEgPT4gewogICAgICAgICAgICBGb3JtYXREYXRhID0+IHsKICAgICAgICAgICAgICAgIENvbHVtblNlcGFyYXRvciA9PiAnQ29tbWEnLAogICAgICAgICAgICAgICAgQ2hhcnNldCAgICAgICAgID0+ICdVVEYtOCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEV4cG9ydERhdGFTYXZlID0+IHsKICAgICAgICAgICAgICAgIFRlbXBsYXRlSUQgICAgPT4gJFRlbXBsYXRlSURzWzIzXSwKICAgICAgICAgICAgICAgIEV4cG9ydERhdGFSb3cgPT4gWyAnUm93MS1Db2wxJywgJ1JvdzEtQ29sMicsICdSb3cxLUNvbDMnIF0sCiAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBSZWZlcmVuY2VEZXN0aW5hdGlvbkNvbnRlbnQgPT4gJyJSb3cxLUNvbDEiLCJSb3cxLUNvbDIiLCJSb3cxLUNvbDMiJywKICAgIH0sCgogICAgIyBhbGwgcmVxdWlyZWQgdmFsdWVzIGFyZSBnaXZlbiAoY2hlY2sgdGhlIHBhcnNlZCBjb250ZW50KQogICAgewogICAgICAgIFNvdXJjZUV4cG9ydERhdGEgPT4gewogICAgICAgICAgICBGb3JtYXREYXRhID0+IHsKICAgICAgICAgICAgICAgIENvbHVtblNlcGFyYXRvciA9PiAnVGFidWxhdG9yJywKICAgICAgICAgICAgICAgIENoYXJzZXQgICAgICAgICA9PiAnVVRGLTgnLAogICAgICAgICAgICB9LAogICAgICAgICAgICBFeHBvcnREYXRhU2F2ZSA9PiB7CiAgICAgICAgICAgICAgICBUZW1wbGF0ZUlEICAgID0+ICRUZW1wbGF0ZUlEc1syM10sCiAgICAgICAgICAgICAgICBFeHBvcnREYXRhUm93ID0+IFsgJ1JvdzEtQ29sMScsICdSb3cxLUNvbDInLCAnUm93MS1Db2wzJyBdLAogICAgICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgUmVmZXJlbmNlRGVzdGluYXRpb25Db250ZW50ID0+ICJcIlJvdzEtQ29sMVwiXHRcIlJvdzEtQ29sMlwiXHRcIlJvdzEtQ29sM1wiIiwKICAgIH0sCgogICAgIyBhbGwgcmVxdWlyZWQgdmFsdWVzIGFyZSBnaXZlbiAoY2hlY2sgdGhlIHBhcnNlZCBjb250ZW50KQogICAgewogICAgICAgIFNvdXJjZUV4cG9ydERhdGEgPT4gewogICAgICAgICAgICBGb3JtYXREYXRhID0+IHsKICAgICAgICAgICAgICAgIENvbHVtblNlcGFyYXRvciA9PiAnQ29sb24nLAogICAgICAgICAgICAgICAgQ2hhcnNldCAgICAgICAgID0+ICdVVEYtOCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEV4cG9ydERhdGFTYXZlID0+IHsKICAgICAgICAgICAgICAgIFRlbXBsYXRlSUQgICAgPT4gJFRlbXBsYXRlSURzWzIzXSwKICAgICAgICAgICAgICAgIEV4cG9ydERhdGFSb3cgPT4gWyAnUm93MS1Db2wxJywgJ1JvdzEtQ29sMicsICdSb3cxLUNvbDMnIF0sCiAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBSZWZlcmVuY2VEZXN0aW5hdGlvbkNvbnRlbnQgPT4gJyJSb3cxLUNvbDEiOiJSb3cxLUNvbDIiOiJSb3cxLUNvbDMiJywKICAgIH0sCgogICAgIyBhbGwgcmVxdWlyZWQgdmFsdWVzIGFyZSBnaXZlbiAoY2hlY2sgdGhlIHBhcnNlZCBjb250ZW50KQogICAgewogICAgICAgIFNvdXJjZUV4cG9ydERhdGEgPT4gewogICAgICAgICAgICBGb3JtYXREYXRhID0+IHsKICAgICAgICAgICAgICAgIENvbHVtblNlcGFyYXRvciA9PiAnRG90JywKICAgICAgICAgICAgICAgIENoYXJzZXQgICAgICAgICA9PiAnVVRGLTgnLAogICAgICAgICAgICB9LAogICAgICAgICAgICBFeHBvcnREYXRhU2F2ZSA9PiB7CiAgICAgICAgICAgICAgICBUZW1wbGF0ZUlEICAgID0+ICRUZW1wbGF0ZUlEc1syM10sCiAgICAgICAgICAgICAgICBFeHBvcnREYXRhUm93ID0+IFsgJ1JvdzEtQ29sMScsICdSb3cxLUNvbDInLCAnUm93MS1Db2wzJyBdLAogICAgICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgUmVmZXJlbmNlRGVzdGluYXRpb25Db250ZW50ID0+ICciUm93MS1Db2wxIi4iUm93MS1Db2wyIi4iUm93MS1Db2wzIicsCiAgICB9LAoKICAgICMgYWxsIHJlcXVpcmVkIHZhbHVlcyBhcmUgZ2l2ZW4gKG5ld2xpbmUgY2hlY2tzKQogICAgewogICAgICAgIFNvdXJjZUV4cG9ydERhdGEgPT4gewogICAgICAgICAgICBGb3JtYXREYXRhID0+IHsKICAgICAgICAgICAgICAgIENvbHVtblNlcGFyYXRvciA9PiAnU2VtaWNvbG9uJywKICAgICAgICAgICAgICAgIENoYXJzZXQgICAgICAgICA9PiAnVVRGLTgnLAogICAgICAgICAgICB9LAogICAgICAgICAgICBFeHBvcnREYXRhU2F2ZSA9PiB7CiAgICAgICAgICAgICAgICBUZW1wbGF0ZUlEICAgID0+ICRUZW1wbGF0ZUlEc1syNF0sCiAgICAgICAgICAgICAgICBFeHBvcnREYXRhUm93ID0+IFsgIlxuVGVzdCAxIiwgIlRlc3QgXG4gMiIsICdUZXN0IDMgXG5cdFxyXHMnLCAiVGVzdCA0XG4iIF0sCiAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBSZWZlcmVuY2VEZXN0aW5hdGlvbkNvbnRlbnQgPT4gcXF7IlxuVGVzdCAxIjsiVGVzdCBcbiAyIjsiVGVzdCAzIFxcblxcdFxcclxccyI7IlRlc3QgNFxuIn0sCiAgICB9LAoKICAgICMgYWxsIHJlcXVpcmVkIHZhbHVlcyBhcmUgZ2l2ZW4gKG5ld2xpbmUgY2hlY2tzKQogICAgewogICAgICAgIFNvdXJjZUV4cG9ydERhdGEgPT4gewogICAgICAgICAgICBGb3JtYXREYXRhID0+IHsKICAgICAgICAgICAgICAgIENvbHVtblNlcGFyYXRvciA9PiAnVGFidWxhdG9yJywKICAgICAgICAgICAgICAgIENoYXJzZXQgICAgICAgICA9PiAnVVRGLTgnLAogICAgICAgICAgICB9LAogICAgICAgICAgICBFeHBvcnREYXRhU2F2ZSA9PiB7CiAgICAgICAgICAgICAgICBUZW1wbGF0ZUlEICAgID0+ICRUZW1wbGF0ZUlEc1syNF0sCiAgICAgICAgICAgICAgICBFeHBvcnREYXRhUm93ID0+IFsgIlxuVGVzdCAxIiwgIlRlc3QgXG4gMiIsICdUZXN0IDMgXG5cdFxyXHMnLCAiVGVzdCA0XG4iIF0sCiAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBSZWZlcmVuY2VEZXN0aW5hdGlvbkNvbnRlbnQgPT4KICAgICAgICAgICAgcXF7IlxuVGVzdCAxIlx0IlRlc3QgXG4gMiJcdCJUZXN0IDMgXFxuXFx0XFxyXFxzIlx0IlRlc3QgNFxuIn0sCiAgICB9LAoKICAgICMgYWxsIHJlcXVpcmVkIHZhbHVlcyBhcmUgZ2l2ZW4gKG5ld2xpbmUgY2hlY2tzKQogICAgewogICAgICAgIFNvdXJjZUV4cG9ydERhdGEgPT4gewogICAgICAgICAgICBGb3JtYXREYXRhID0+IHsKICAgICAgICAgICAgICAgIENvbHVtblNlcGFyYXRvciA9PiAnQ29sb24nLAogICAgICAgICAgICAgICAgQ2hhcnNldCAgICAgICAgID0+ICdVVEYtOCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEV4cG9ydERhdGFTYXZlID0+IHsKICAgICAgICAgICAgICAgIFRlbXBsYXRlSUQgICAgPT4gJFRlbXBsYXRlSURzWzI0XSwKICAgICAgICAgICAgICAgIEV4cG9ydERhdGFSb3cgPT4gWyAiXG5UZXN0IDEiLCAiVGVzdCBcbiAyIiwgJ1Rlc3QgMyBcblx0XHJccycsICJUZXN0IDRcbiIgXSwKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgICAgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIFJlZmVyZW5jZURlc3RpbmF0aW9uQ29udGVudCA9PiBxcXsiXG5UZXN0IDEiOiJUZXN0IFxuIDIiOiJUZXN0IDMgXFxuXFx0XFxyXFxzIjoiVGVzdCA0XG4ifSwKICAgIH0sCgogICAgIyBhbGwgcmVxdWlyZWQgdmFsdWVzIGFyZSBnaXZlbiAobmV3bGluZSBjaGVja3MpCiAgICB7CiAgICAgICAgU291cmNlRXhwb3J0RGF0YSA9PiB7CiAgICAgICAgICAgIEZvcm1hdERhdGEgPT4gewogICAgICAgICAgICAgICAgQ29sdW1uU2VwYXJhdG9yID0+ICdEb3QnLAogICAgICAgICAgICAgICAgQ2hhcnNldCAgICAgICAgID0+ICdVVEYtOCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEV4cG9ydERhdGFTYXZlID0+IHsKICAgICAgICAgICAgICAgIFRlbXBsYXRlSUQgICAgPT4gJFRlbXBsYXRlSURzWzI0XSwKICAgICAgICAgICAgICAgIEV4cG9ydERhdGFSb3cgPT4gWyAiXG5UZXN0IDEiLCAiVGVzdCBcbiAyIiwgJ1Rlc3QgMyBcblx0XHJccycsICJUZXN0IDRcbiIgXSwKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgICAgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIFJlZmVyZW5jZURlc3RpbmF0aW9uQ29udGVudCA9PiBxcXsiXG5UZXN0IDEiLiJUZXN0IFxuIDIiLiJUZXN0IDMgXFxuXFx0XFxyXFxzIi4iVGVzdCA0XG4ifSwKICAgIH0sCgogICAgIyBhbGwgcmVxdWlyZWQgdmFsdWVzIGFyZSBnaXZlbiAoc3BhY2VzIGNoZWNrcykKICAgIHsKICAgICAgICBTb3VyY2VFeHBvcnREYXRhID0+IHsKICAgICAgICAgICAgRm9ybWF0RGF0YSA9PiB7CiAgICAgICAgICAgICAgICBDb2x1bW5TZXBhcmF0b3IgPT4gJ1NlbWljb2xvbicsCiAgICAgICAgICAgICAgICBDaGFyc2V0ICAgICAgICAgPT4gJ1VURi04JywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgRXhwb3J0RGF0YVNhdmUgPT4gewogICAgICAgICAgICAgICAgVGVtcGxhdGVJRCAgICA9PiAkVGVtcGxhdGVJRHNbMjRdLAogICAgICAgICAgICAgICAgRXhwb3J0RGF0YVJvdyA9PiBbICcgIFRlc3QgICcsICcgICAgJywgJ1Rlc3QgICcsICcgICAgVGVzdCcsICcnLCAnVGVzdCcsICcnLCAnICcgXSwKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgICAgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIFJlZmVyZW5jZURlc3RpbmF0aW9uQ29udGVudCA9PiAnIiAgVGVzdCAgIjsiICAgICI7IlRlc3QgICI7IiAgICBUZXN0IjsiIjsiVGVzdCI7IiI7IiAiJywKICAgIH0sCgogICAgIyBhbGwgcmVxdWlyZWQgdmFsdWVzIGFyZSBnaXZlbiAoc3BhY2VzIGNoZWNrcykKICAgIHsKICAgICAgICBTb3VyY2VFeHBvcnREYXRhID0+IHsKICAgICAgICAgICAgRm9ybWF0RGF0YSA9PiB7CiAgICAgICAgICAgICAgICBDb2x1bW5TZXBhcmF0b3IgPT4gJ1RhYnVsYXRvcicsCiAgICAgICAgICAgICAgICBDaGFyc2V0ICAgICAgICAgPT4gJ1VURi04JywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgRXhwb3J0RGF0YVNhdmUgPT4gewogICAgICAgICAgICAgICAgVGVtcGxhdGVJRCAgICA9PiAkVGVtcGxhdGVJRHNbMjRdLAogICAgICAgICAgICAgICAgRXhwb3J0RGF0YVJvdyA9PiBbICcgIFRlc3QgICcsICcgICAgJywgJ1Rlc3QgICcsICcgICAgVGVzdCcsICcnLCAnVGVzdCcsICcnLCAnICcgXSwKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgICAgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIFJlZmVyZW5jZURlc3RpbmF0aW9uQ29udGVudCA9PgogICAgICAgICAgICAiXCIgIFRlc3QgIFwiXHRcIiAgICBcIlx0XCJUZXN0ICBcIlx0XCIgICAgVGVzdFwiXHRcIlwiXHRcIlRlc3RcIlx0XCJcIlx0XCIgXCIiLAogICAgfSwKCiAgICAjIGFsbCByZXF1aXJlZCB2YWx1ZXMgYXJlIGdpdmVuIChzcGFjZXMgY2hlY2tzKQogICAgewogICAgICAgIFNvdXJjZUV4cG9ydERhdGEgPT4gewogICAgICAgICAgICBGb3JtYXREYXRhID0+IHsKICAgICAgICAgICAgICAgIENvbHVtblNlcGFyYXRvciA9PiAnQ29sb24nLAogICAgICAgICAgICAgICAgQ2hhcnNldCAgICAgICAgID0+ICdVVEYtOCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEV4cG9ydERhdGFTYXZlID0+IHsKICAgICAgICAgICAgICAgIFRlbXBsYXRlSUQgICAgPT4gJFRlbXBsYXRlSURzWzI0XSwKICAgICAgICAgICAgICAgIEV4cG9ydERhdGFSb3cgPT4gWyAnICBUZXN0ICAnLCAnICAgICcsICdUZXN0ICAnLCAnICAgIFRlc3QnLCAnJywgJ1Rlc3QnLCAnJywgJyAnIF0sCiAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBSZWZlcmVuY2VEZXN0aW5hdGlvbkNvbnRlbnQgPT4gJyIgIFRlc3QgICI6IiAgICAiOiJUZXN0ICAiOiIgICAgVGVzdCI6IiI6IlRlc3QiOiIiOiIgIicsCiAgICB9LAoKICAgICMgYWxsIHJlcXVpcmVkIHZhbHVlcyBhcmUgZ2l2ZW4gKHNwYWNlcyBjaGVja3MpCiAgICB7CiAgICAgICAgU291cmNlRXhwb3J0RGF0YSA9PiB7CiAgICAgICAgICAgIEZvcm1hdERhdGEgPT4gewogICAgICAgICAgICAgICAgQ29sdW1uU2VwYXJhdG9yID0+ICdEb3QnLAogICAgICAgICAgICAgICAgQ2hhcnNldCAgICAgICAgID0+ICdVVEYtOCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEV4cG9ydERhdGFTYXZlID0+IHsKICAgICAgICAgICAgICAgIFRlbXBsYXRlSUQgICAgPT4gJFRlbXBsYXRlSURzWzI0XSwKICAgICAgICAgICAgICAgIEV4cG9ydERhdGFSb3cgPT4gWyAnICBUZXN0ICAnLCAnICAgICcsICdUZXN0ICAnLCAnICAgIFRlc3QnLCAnJywgJ1Rlc3QnLCAnJywgJyAnIF0sCiAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBSZWZlcmVuY2VEZXN0aW5hdGlvbkNvbnRlbnQgPT4gJyIgIFRlc3QgICIuIiAgICAiLiJUZXN0ICAiLiIgICAgVGVzdCIuIiIuIlRlc3QiLiIiLiIgIicsCiAgICB9LAoKICAgICMgYWxsIHJlcXVpcmVkIHZhbHVlcyBhcmUgZ2l2ZW4gKHNwZWNpYWwgY2hhcmFjdGVyIGNoZWNrcykKICAgIHsKICAgICAgICBTb3VyY2VFeHBvcnREYXRhID0+IHsKICAgICAgICAgICAgRm9ybWF0RGF0YSA9PiB7CiAgICAgICAgICAgICAgICBDb2x1bW5TZXBhcmF0b3IgPT4gJ1NlbWljb2xvbicsCiAgICAgICAgICAgICAgICBDaGFyc2V0ICAgICAgICAgPT4gJ1VURi04JywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgRXhwb3J0RGF0YVNhdmUgPT4gewogICAgICAgICAgICAgICAgVGVtcGxhdGVJRCAgICA9PiAkVGVtcGxhdGVJRHNbMjVdLAogICAgICAgICAgICAgICAgRXhwb3J0RGF0YVJvdyA9PiBbCiAgICAgICAgICAgICAgICAgICAgJ1Rlc3Q7Ol9eISIkJSYvKCk9P2AqK1Rlc3QnLAogICAgICAgICAgICAgICAgICAgICc+PEB+XCd9e1tdXFwnLAogICAgICAgICAgICAgICAgICAgICcnLAogICAgICAgICAgICAgICAgICAgICciIjs7OjouLi0tX18jIycKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICBVc2VySUQgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIFJlZmVyZW5jZURlc3RpbmF0aW9uQ29udGVudCA9PgogICAgICAgICAgICAnIlRlc3Q7Ol9eISIiJCUmLygpPT9gKitUZXN0IjsiPjxAflwnfXtbXVwiOyIiOyIiIiIiOzs6Oi4uLS1fXyMjIicKICAgIH0sCgogICAgIyBhbGwgcmVxdWlyZWQgdmFsdWVzIGFyZSBnaXZlbiAoc3BlY2lhbCBjaGFyYWN0ZXIgY2hlY2tzKQogICAgewogICAgICAgIFNvdXJjZUV4cG9ydERhdGEgPT4gewogICAgICAgICAgICBGb3JtYXREYXRhID0+IHsKICAgICAgICAgICAgICAgIENvbHVtblNlcGFyYXRvciA9PiAnVGFidWxhdG9yJywKICAgICAgICAgICAgICAgIENoYXJzZXQgICAgICAgICA9PiAnVVRGLTgnLAogICAgICAgICAgICB9LAogICAgICAgICAgICBFeHBvcnREYXRhU2F2ZSA9PiB7CiAgICAgICAgICAgICAgICBUZW1wbGF0ZUlEICAgID0+ICRUZW1wbGF0ZUlEc1syNV0sCiAgICAgICAgICAgICAgICBFeHBvcnREYXRhUm93ID0+IFsKICAgICAgICAgICAgICAgICAgICAnVGVzdDs6X14hIiQlJi8oKT0/YCorVGVzdCcsCiAgICAgICAgICAgICAgICAgICAgJz48QH5cJ317W11cXCcsCiAgICAgICAgICAgICAgICAgICAgJycsCiAgICAgICAgICAgICAgICAgICAgJyIiOzs6Oi4uLS1fXyMjJwogICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgIFVzZXJJRCA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgUmVmZXJlbmNlRGVzdGluYXRpb25Db250ZW50ID0+CiAgICAgICAgICAgICciVGVzdDs6X14hIiIkJSYvKCk9P2AqK1Rlc3QiJwogICAgICAgICAgICAuICJcdCIKICAgICAgICAgICAgLiAnIj48QH5cJ317W11cXCInCiAgICAgICAgICAgIC4gIlx0IgogICAgICAgICAgICAuICciIicKICAgICAgICAgICAgLiAiXHQiCiAgICAgICAgICAgIC4gJyIiIiIiOzs6Oi4uLS1fXyMjIicsCiAgICB9LAoKICAgICMgYWxsIHJlcXVpcmVkIHZhbHVlcyBhcmUgZ2l2ZW4gKHNwZWNpYWwgY2hhcmFjdGVyIGNoZWNrcykKICAgIHsKICAgICAgICBTb3VyY2VFeHBvcnREYXRhID0+IHsKICAgICAgICAgICAgRm9ybWF0RGF0YSA9PiB7CiAgICAgICAgICAgICAgICBDb2x1bW5TZXBhcmF0b3IgPT4gJ0NvbG9uJywKICAgICAgICAgICAgICAgIENoYXJzZXQgICAgICAgICA9PiAnVVRGLTgnLAogICAgICAgICAgICB9LAogICAgICAgICAgICBFeHBvcnREYXRhU2F2ZSA9PiB7CiAgICAgICAgICAgICAgICBUZW1wbGF0ZUlEICAgID0+ICRUZW1wbGF0ZUlEc1syNV0sCiAgICAgICAgICAgICAgICBFeHBvcnREYXRhUm93ID0+IFsKICAgICAgICAgICAgICAgICAgICAnVGVzdDs6X14hIiQlJi8oKT0/YCorVGVzdCcsCiAgICAgICAgICAgICAgICAgICAgJz48QH5cJ317W11cXCcsCiAgICAgICAgICAgICAgICAgICAgJycsCiAgICAgICAgICAgICAgICAgICAgJyIiOzs6Oi4uLS1fXyMjJwogICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgIFVzZXJJRCA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgUmVmZXJlbmNlRGVzdGluYXRpb25Db250ZW50ID0+CiAgICAgICAgICAgICciVGVzdDs6X14hIiIkJSYvKCk9P2AqK1Rlc3QiOiI+PEB+XCd9e1tdXCI6IiI6IiIiIiI7Ozo6Li4tLV9fIyMiJywKICAgIH0sCgogICAgIyBhbGwgcmVxdWlyZWQgdmFsdWVzIGFyZSBnaXZlbiAoc3BlY2lhbCBjaGFyYWN0ZXIgY2hlY2tzKQogICAgewogICAgICAgIFNvdXJjZUV4cG9ydERhdGEgPT4gewogICAgICAgICAgICBGb3JtYXREYXRhID0+IHsKICAgICAgICAgICAgICAgIENvbHVtblNlcGFyYXRvciA9PiAnRG90JywKICAgICAgICAgICAgICAgIENoYXJzZXQgICAgICAgICA9PiAnVVRGLTgnLAogICAgICAgICAgICB9LAogICAgICAgICAgICBFeHBvcnREYXRhU2F2ZSA9PiB7CiAgICAgICAgICAgICAgICBUZW1wbGF0ZUlEICAgID0+ICRUZW1wbGF0ZUlEc1syNV0sCiAgICAgICAgICAgICAgICBFeHBvcnREYXRhUm93ID0+IFsKICAgICAgICAgICAgICAgICAgICAnVGVzdDs6X14hIiQlJi8oKT0/YCorVGVzdCcsCiAgICAgICAgICAgICAgICAgICAgJz48QH5cJ317W11cXCcsCiAgICAgICAgICAgICAgICAgICAgJycsCiAgICAgICAgICAgICAgICAgICAgJyIiOzs6Oi4uLS1fXyMjJwogICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgIFVzZXJJRCA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgUmVmZXJlbmNlRGVzdGluYXRpb25Db250ZW50ID0+CiAgICAgICAgICAgICciVGVzdDs6X14hIiIkJSYvKCk9P2AqK1Rlc3QiLiI+PEB+XCd9e1tdXFwiLiIiLiIiIiIiOzs6Oi4uLS1fXyMjIicsCiAgICB9LAoKICAgICMgYWxsIHJlcXVpcmVkIHZhbHVlcyBhcmUgZ2l2ZW4gKFVURi04IGNoZWNrcykKICAgIHsKICAgICAgICBTb3VyY2VFeHBvcnREYXRhID0+IHsKICAgICAgICAgICAgRm9ybWF0RGF0YSA9PiB7CiAgICAgICAgICAgICAgICBDb2x1bW5TZXBhcmF0b3IgPT4gJ1NlbWljb2xvbicsCiAgICAgICAgICAgICAgICBDaGFyc2V0ICAgICAgICAgPT4gJ1VURi04JywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgRXhwb3J0RGF0YVNhdmUgPT4gewogICAgICAgICAgICAgICAgVGVtcGxhdGVJRCAgICA9PiAkVGVtcGxhdGVJRHNbMjZdLAogICAgICAgICAgICAgICAgRXhwb3J0RGF0YVJvdyA9PiBbICcg0aog0awg0bInLCAn0a8g0bQg0b8nLCAn0oIg0oog0pYgJyBdLAogICAgICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgUmVmZXJlbmNlRGVzdGluYXRpb25Db250ZW50ID0+ICciINGqINGsINGyIjsi0a8g0bQg0b8iOyLSgiDSiiDSliAiJywKICAgIH0sCgogICAgIyBhbGwgcmVxdWlyZWQgdmFsdWVzIGFyZSBnaXZlbiAoVVRGLTggY2hlY2tzKQogICAgewogICAgICAgIFNvdXJjZUV4cG9ydERhdGEgPT4gewogICAgICAgICAgICBGb3JtYXREYXRhID0+IHsKICAgICAgICAgICAgICAgIENvbHVtblNlcGFyYXRvciA9PiAnVGFidWxhdG9yJywKICAgICAgICAgICAgICAgIENoYXJzZXQgICAgICAgICA9PiAnVVRGLTgnLAogICAgICAgICAgICB9LAogICAgICAgICAgICBFeHBvcnREYXRhU2F2ZSA9PiB7CiAgICAgICAgICAgICAgICBUZW1wbGF0ZUlEICAgID0+ICRUZW1wbGF0ZUlEc1syNl0sCiAgICAgICAgICAgICAgICBFeHBvcnREYXRhUm93ID0+IFsgJyDRqiDRrCDRsicsICfRryDRtCDRvycsICfSgiDSiiDSliAnIF0sCiAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBSZWZlcmVuY2VEZXN0aW5hdGlvbkNvbnRlbnQgPT4gIlwiINGqINGsINGyXCJcdFwi0a8g0bQg0b9cIlx0XCLSgiDSiiDSliBcIiIsCiAgICB9LAoKICAgICMgYWxsIHJlcXVpcmVkIHZhbHVlcyBhcmUgZ2l2ZW4gKFVURi04IGNoZWNrcykKICAgIHsKICAgICAgICBTb3VyY2VFeHBvcnREYXRhID0+IHsKICAgICAgICAgICAgRm9ybWF0RGF0YSA9PiB7CiAgICAgICAgICAgICAgICBDb2x1bW5TZXBhcmF0b3IgPT4gJ0NvbG9uJywKICAgICAgICAgICAgICAgIENoYXJzZXQgICAgICAgICA9PiAnVVRGLTgnLAogICAgICAgICAgICB9LAogICAgICAgICAgICBFeHBvcnREYXRhU2F2ZSA9PiB7CiAgICAgICAgICAgICAgICBUZW1wbGF0ZUlEICAgID0+ICRUZW1wbGF0ZUlEc1syNl0sCiAgICAgICAgICAgICAgICBFeHBvcnREYXRhUm93ID0+IFsgJyDRqiDRrCDRsicsICfRryDRtCDRvycsICfSgiDSiiDSliAnIF0sCiAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBSZWZlcmVuY2VEZXN0aW5hdGlvbkNvbnRlbnQgPT4gJyIg0aog0awg0bIiOiLRryDRtCDRvyI6ItKCINKKINKWICInLAogICAgfSwKCiAgICAjIGFsbCByZXF1aXJlZCB2YWx1ZXMgYXJlIGdpdmVuIChVVEYtOCBjaGVja3MpCiAgICB7CiAgICAgICAgU291cmNlRXhwb3J0RGF0YSA9PiB7CiAgICAgICAgICAgIEZvcm1hdERhdGEgPT4gewogICAgICAgICAgICAgICAgQ29sdW1uU2VwYXJhdG9yID0+ICdEb3QnLAogICAgICAgICAgICAgICAgQ2hhcnNldCAgICAgICAgID0+ICdVVEYtOCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEV4cG9ydERhdGFTYXZlID0+IHsKICAgICAgICAgICAgICAgIFRlbXBsYXRlSUQgICAgPT4gJFRlbXBsYXRlSURzWzI2XSwKICAgICAgICAgICAgICAgIEV4cG9ydERhdGFSb3cgPT4gWyAnINGqINGsINGyJywgJ9GvING0ING/JywgJ9KCINKKINKWICcgXSwKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgICAgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIFJlZmVyZW5jZURlc3RpbmF0aW9uQ29udGVudCA9PiAnIiDRqiDRrCDRsiIuItGvING0ING/Ii4i0oIg0oog0pYgIicsCiAgICB9LApdOwoKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwojIHJ1biBnZW5lcmFsIEV4cG9ydERhdGFTYXZlIHRlc3RzCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKClRFU1Q6CmZvciBteSAkVGVzdCAoIEB7JEV4cG9ydERhdGFUZXN0c30gKSB7CgogICAgIyBjaGVjayBTb3VyY2VFeHBvcnREYXRhIGF0dHJpYnV0ZQogICAgaWYgKCAhJFRlc3QtPntTb3VyY2VFeHBvcnREYXRhfSB8fCByZWYgJFRlc3QtPntTb3VyY2VFeHBvcnREYXRhfSBuZSAnSEFTSCcgKSB7CgogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAwLAogICAgICAgICAgICAiVGVzdCAkVGVzdENvdW50OiBObyBTb3VyY2VFeHBvcnREYXRhIGZvdW5kIGZvciB0aGlzIHRlc3QuIgogICAgICAgICk7CgogICAgICAgIG5leHQgVEVTVDsKICAgIH0KCiAgICAjIHNldCBkZWZhdWx0IEV4cG9ydERhdGFTYXZlCiAgICBpZiAoICEkVGVzdC0+e1NvdXJjZUV4cG9ydERhdGF9LT57RXhwb3J0RGF0YVNhdmV9ICkgewogICAgICAgICRUZXN0LT57U291cmNlRXhwb3J0RGF0YX0tPntFeHBvcnREYXRhU2F2ZX0gPSB7fTsKICAgIH0KCiAgICAjIHNldCB0aGUgZm9ybWF0IGRhdGEKICAgIGlmICgKICAgICAgICAkVGVzdC0+e1NvdXJjZUV4cG9ydERhdGF9LT57Rm9ybWF0RGF0YX0KICAgICAgICAmJiByZWYgJFRlc3QtPntTb3VyY2VFeHBvcnREYXRhfS0+e0Zvcm1hdERhdGF9IGVxICdIQVNIJwogICAgICAgICYmICRUZXN0LT57U291cmNlRXhwb3J0RGF0YX0tPntFeHBvcnREYXRhU2F2ZX0tPntUZW1wbGF0ZUlEfQogICAgICAgICkKICAgIHsKCiAgICAgICAgIyBzYXZlIGZvcm1hdCBkYXRhCiAgICAgICAgJEltcG9ydEV4cG9ydE9iamVjdC0+Rm9ybWF0RGF0YVNhdmUoCiAgICAgICAgICAgIFRlbXBsYXRlSUQgPT4gJFRlc3QtPntTb3VyY2VFeHBvcnREYXRhfS0+e0V4cG9ydERhdGFTYXZlfS0+e1RlbXBsYXRlSUR9LAogICAgICAgICAgICBGb3JtYXREYXRhID0+ICRUZXN0LT57U291cmNlRXhwb3J0RGF0YX0tPntGb3JtYXREYXRhfSwKICAgICAgICAgICAgVXNlcklEICAgICA9PiAxLAogICAgICAgICk7CiAgICB9CgogICAgIyBnZXQgZXhwb3J0IGRhdGEgcm93CiAgICBteSAkRXhwb3J0U3RyaW5nID0gJEZvcm1hdEJhY2tlbmRPYmplY3QtPkV4cG9ydERhdGFTYXZlKAogICAgICAgICV7ICRUZXN0LT57U291cmNlRXhwb3J0RGF0YX0tPntFeHBvcnREYXRhU2F2ZX0gfSwKICAgICk7CgogICAgaWYgKCAhZGVmaW5lZCAkVGVzdC0+e1JlZmVyZW5jZURlc3RpbmF0aW9uQ29udGVudH0gKSB7CgogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAhZGVmaW5lZCAkRXhwb3J0U3RyaW5nLAogICAgICAgICAgICAiVGVzdCAkVGVzdENvdW50OiBFeHBvcnREYXRhU2F2ZSgpIC0gcmV0dXJuIGZhbHNlIgogICAgICAgICk7CgogICAgICAgIG5leHQgVEVTVDsKICAgIH0KCiAgICBpZiAoICFkZWZpbmVkICRFeHBvcnRTdHJpbmcgKSB7CgogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAhZGVmaW5lZCAkVGVzdC0+e1JlZmVyZW5jZURlc3RpbmF0aW9uQ29udGVudH0sCiAgICAgICAgICAgICJUZXN0ICRUZXN0Q291bnQ6IEV4cG9ydERhdGFTYXZlKCkgLSByZXR1cm4gZmFsc2UiCiAgICAgICAgKTsKCiAgICAgICAgbmV4dCBURVNUOwogICAgfQoKICAgIGlmICggISRUZXN0LT57U291cmNlRXhwb3J0RGF0YX0tPntFeHBvcnREYXRhU2F2ZX0tPntFeHBvcnREYXRhUm93fSApIHsKCiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgIGRlZmluZWQgJEV4cG9ydFN0cmluZywKICAgICAgICAgICAgIlRlc3QgJFRlc3RDb3VudDogRXhwb3J0RGF0YVNhdmUoKSAtIHJldHVybiBmYWxzZSIKICAgICAgICApOwoKICAgICAgICBuZXh0IFRFU1Q7CiAgICB9CgogICAgIyBjaGVjayB0aGUgZXhwb3J0IHN0cmluZwogICAgJFNlbGYtPklzKAogICAgICAgICRFeHBvcnRTdHJpbmcsCiAgICAgICAgJFRlc3QtPntSZWZlcmVuY2VEZXN0aW5hdGlvbkNvbnRlbnR9LAogICAgICAgICJUZXN0ICRUZXN0Q291bnQ6IEV4cG9ydERhdGFTYXZlKCkiLAogICAgKTsKfQpjb250aW51ZSB7CiAgICAkVGVzdENvdW50Kys7Cn0KCiMgY2xlYW51cCBpcyBkb25lIGJ5IFJlc3RvcmVEYXRhYmFzZS4KCjE7Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgojIyBubyBjcml0aWMgKE1vZHVsZXM6OlJlcXVpcmVFeHBsaWNpdFBhY2thZ2UpCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7Cgp1c2UgdmFycyAocXcoJFNlbGYpKTsKdXNlIEZpbGU6OlBhdGggcXcocm10cmVlKTsKCiMgZ2V0IG5lZWRlZCBvYmplY3RzCm15ICRDb21tYW5kT2JqZWN0ICAgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q29uc29sZTo6Q29tbWFuZDo6QWRtaW46OklUU006OkltcG9ydEV4cG9ydDo6SW1wb3J0Jyk7Cm15ICRJbXBvcnRFeHBvcnRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SW1wb3J0RXhwb3J0Jyk7CgojIGdldCBoZWxwZXIgb2JqZWN0CiRLZXJuZWw6Ok9NLT5PYmplY3RQYXJhbUFkZCgKICAgICdLZXJuZWw6OlN5c3RlbTo6VW5pdFRlc3Q6OkhlbHBlcicgPT4gewogICAgICAgIFJlc3RvcmVEYXRhYmFzZSA9PiAxLAogICAgfSwKKTsKbXkgJEhlbHBlciA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpVbml0VGVzdDo6SGVscGVyJyk7CgojIHRlc3QgY29tbWFuZCB3aXRob3V0IC0tdGVtcGxhdGUtbnVtYmVyIG9wdGlvbgpteSAkRXhpdENvZGUgPSAkQ29tbWFuZE9iamVjdC0+RXhlY3V0ZSgpOwoKJFNlbGYtPklzKAogICAgJEV4aXRDb2RlLAogICAgMSwKICAgICJObyAtLXRlbXBsYXRlLW51bWJlciAgLSBleGl0IGNvZGUiLAopOwoKIyBhZGQgdGVzdCB0ZW1wbGF0ZQpteSAkVGVtcGxhdGVJRCA9ICRJbXBvcnRFeHBvcnRPYmplY3QtPlRlbXBsYXRlQWRkKAogICAgT2JqZWN0ICA9PiAnSVRTTUNvbmZpZ0l0ZW0nLAogICAgRm9ybWF0ICA9PiAnQ1NWJywKICAgIE5hbWUgICAgPT4gJ1RlbXBsYXRlJyAuICRIZWxwZXItPkdldFJhbmRvbUlEKCksCiAgICBWYWxpZElEID0+IDEsCiAgICBDb21tZW50ID0+ICdDb21tZW50JywKICAgIFVzZXJJRCAgPT4gMSwKKTsKCiRTZWxmLT5UcnVlKAogICAgJFRlbXBsYXRlSUQsCiAgICAiSW1wb3J0L0V4cG9ydCB0ZW1wbGF0ZSBpcyBjcmVhdGVkIC0gJFRlbXBsYXRlSUQiLAopOwoKIyBnZXQgJ0hhcmR3YXJlJyBjYXRhbG9nIGNsYXNzIElECm15ICRDb25maWdJdGVtRGF0YVJlZiA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpHZW5lcmFsQ2F0YWxvZycpLT5JdGVtR2V0KAogICAgQ2xhc3MgPT4gJ0lUU006OkNvbmZpZ0l0ZW06OkNsYXNzJywKICAgIE5hbWUgID0+ICdIYXJkd2FyZScsCik7Cm15ICRIYXJkd2FyZUNvbmZpZ0l0ZW1JRCA9ICRDb25maWdJdGVtRGF0YVJlZi0+e0l0ZW1JRH07CgojIGdldCBvYmplY3QgZGF0YSBmb3IgdGVzdCB0ZW1wbGF0ZQpteSAlVGVtcGxhdGVSZWYgPSAoCiAgICAnQ2xhc3NJRCcgID0+ICRIYXJkd2FyZUNvbmZpZ0l0ZW1JRCwKICAgICdDb3VudE1heCcgPT4gMTAsCik7Cm15ICRTdWNjZXNzID0gJEltcG9ydEV4cG9ydE9iamVjdC0+T2JqZWN0RGF0YVNhdmUoCiAgICBUZW1wbGF0ZUlEID0+ICRUZW1wbGF0ZUlELAogICAgT2JqZWN0RGF0YSA9PiBcJVRlbXBsYXRlUmVmLAogICAgVXNlcklEICAgICA9PiAxLAopOwoKJFNlbGYtPlRydWUoCiAgICAkU3VjY2VzcywKICAgICJPYmplY3REYXRhIGZvciB0ZXN0IHRlbXBsYXRlIGlzIGFkZGVkIiwKKTsKCiMgYWRkIHRoZSBmb3JtYXQgZGF0YSBvZiB0aGUgdGVzdCB0ZW1wbGF0ZQpteSAlRm9ybWF0RGF0YSA9ICgKICAgIENoYXJzZXQgICAgICAgICAgICAgID0+ICdVVEYtOCcsCiAgICBDb2x1bW5TZXBhcmF0b3IgICAgICA9PiAnQ29tbWEnLAogICAgSW5jbHVkZUNvbHVtbkhlYWRlcnMgPT4gMSwKKTsKJFN1Y2Nlc3MgPSAkSW1wb3J0RXhwb3J0T2JqZWN0LT5Gb3JtYXREYXRhU2F2ZSgKICAgIFRlbXBsYXRlSUQgPT4gJFRlbXBsYXRlSUQsCiAgICBGb3JtYXREYXRhID0+IFwlRm9ybWF0RGF0YSwKICAgIFVzZXJJRCAgICAgPT4gMSwKKTsKCiRTZWxmLT5UcnVlKAogICAgJFN1Y2Nlc3MsCiAgICAiRm9ybWF0RGF0YSBmb3IgdGVzdCB0ZW1wbGF0ZSBpcyBhZGRlZCIsCik7CgojIHNhdmUgdGhlIHNlYXJjaCBkYXRhIG9mIGEgdGVtcGxhdGUKbXkgJVNlYXJjaERhdGEgPSAoCiAgICBOYW1lID0+ICdUZXN0Q29uZmlnSXRlbSonLAopOwokU3VjY2VzcyA9ICRJbXBvcnRFeHBvcnRPYmplY3QtPlNlYXJjaERhdGFTYXZlKAogICAgVGVtcGxhdGVJRCA9PiAkVGVtcGxhdGVJRCwKICAgIFNlYXJjaERhdGEgPT4gXCVTZWFyY2hEYXRhLAogICAgVXNlcklEICAgICA9PiAxLAopOwoKIyBhZGQgbWFwcGluZyBkYXRhIGZvciB0ZXN0IHRlbXBsYXRlCmZvciBteSAkT2JqZWN0RGF0YVZhbHVlIChxdyggTmFtZSBEZXBsU3RhdGUgSW5jaVN0YXRlICkpIHsKCiAgICBteSAkTWFwcGluZ0lEID0gJEltcG9ydEV4cG9ydE9iamVjdC0+TWFwcGluZ0FkZCgKICAgICAgICBUZW1wbGF0ZUlEID0+ICRUZW1wbGF0ZUlELAogICAgICAgIFVzZXJJRCAgICAgPT4gMSwKICAgICk7CgogICAgbXkgJU1hcHBpbmdPYmplY3REYXRhID0gKCBLZXkgPT4gJE9iamVjdERhdGFWYWx1ZSApOwogICAgbXkgJFN1Y2Nlc3MgPSAkSW1wb3J0RXhwb3J0T2JqZWN0LT5NYXBwaW5nT2JqZWN0RGF0YVNhdmUoCiAgICAgICAgTWFwcGluZ0lEICAgICAgICAgPT4gJE1hcHBpbmdJRCwKICAgICAgICBNYXBwaW5nT2JqZWN0RGF0YSA9PiBcJU1hcHBpbmdPYmplY3REYXRhLAogICAgICAgIFVzZXJJRCAgICAgICAgICAgID0+IDEsCiAgICApOwoKICAgICRTZWxmLT5UcnVlKAogICAgICAgICRTdWNjZXNzLAogICAgICAgICJPYmplY3REYXRhIGZvciB0ZXN0IHRlbXBsYXRlIGlzIG1hcHBlZCAtICRPYmplY3REYXRhVmFsdWUiLAogICAgKTsKfQoKIyBtYWtlIGRpcmVjdG9yeSBmb3IgZXhwb3J0IGZpbGUKbXkgJFNvdXJjZVBhdGgKICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKS0+R2V0KCdIb21lJykgLiAiL3NjcmlwdHMvdGVzdC9zYW1wbGUvSW1wb3J0RXhwb3J0L1RlbXBsYXRlRXhwb3J0LmNzdiI7CgojIHRlc3QgY29tbWFuZCB3aXRoIHdyb25nIHRlbXBsYXRlIG51bWJlcgokRXhpdENvZGUgPSAkQ29tbWFuZE9iamVjdC0+RXhlY3V0ZSggJy0tdGVtcGxhdGUtbnVtYmVyJywgJEhlbHBlci0+R2V0UmFuZG9tSUQoKSwgJFNvdXJjZVBhdGggLiAnVGVtcGxhdGVFeHBvcnQuY3N2JyApOwoKJFNlbGYtPklzKAogICAgJEV4aXRDb2RlLAogICAgMSwKICAgICJDb21tYW5kIHdpdGggd3JvbmcgdGVtcGxhdGUgbnVtYmVyIC0gZXhpdCBjb2RlIiwKKTsKCiMgdGVzdCBjb21tYW5kIHdpdGhvdXQgU291cmNlIGFyZ3VtZW50CiRFeGl0Q29kZSA9ICRDb21tYW5kT2JqZWN0LT5FeGVjdXRlKCAnLS10ZW1wbGF0ZS1udW1iZXInLCAkVGVtcGxhdGVJRCApOwoKJFNlbGYtPklzKAogICAgJEV4aXRDb2RlLAogICAgMSwKICAgICJObyBTb3VyY2UgYXJndW1lbnQgLSBleGl0IGNvZGUiLAopOwoKIyB0ZXN0IGNvbW1hbmQgd2l0aCAtLXRlbXBsYXRlLW51bWJlciBvcHRpb24gYW5kIFNvdXJjZSBhcmd1bWVudAokRXhpdENvZGUgPSAkQ29tbWFuZE9iamVjdC0+RXhlY3V0ZSggJy0tdGVtcGxhdGUtbnVtYmVyJywgJFRlbXBsYXRlSUQsICRTb3VyY2VQYXRoICk7CgokU2VsZi0+SXMoCiAgICAkRXhpdENvZGUsCiAgICAwLAogICAgIk9wdGlvbiAtIC0tdGVtcGxhdGUtbnVtYmVyIG9wdGlvbiBhbmQgU291cmNlIGFyZ3VtZW50IiwKKTsKCiMgZ2V0IGNvbmZpZyBpdGVtIElEcwpteSAkQ29uZmlnSXRlbUlEcyA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ29uZmlnSXRlbScpLT5Db25maWdJdGVtU2VhcmNoRXh0ZW5kZWQoCiAgICBOYW1lID0+ICdUZXN0Q29uZmlnSXRlbSonCik7Cm15ICROdW1Db25maWdJdGVtSW1wb3J0ZWQgPSBzY2FsYXIgQHskQ29uZmlnSXRlbUlEc307CgojIGNoZWNrIGlmIHRoZSBjb25maWcgaXRlbXMgYXJlIGltcG9ydGVkCiRTZWxmLT5UcnVlKAogICAgJE51bUNvbmZpZ0l0ZW1JbXBvcnRlZCwKICAgICJUaGVyZSBhcmUgJE51bUNvbmZpZ0l0ZW1JbXBvcnRlZCBpbXBvcnRlZCBjb25maWcgaXRlbXMiLAopOwoKIyBjbGVhbnVwIGlzIGRvbmUgYnkgUmVzdG9yZURhdGFiYXNlLgoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgojIyBubyBjcml0aWMgKE1vZHVsZXM6OlJlcXVpcmVFeHBsaWNpdFBhY2thZ2UpCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7Cgp1c2UgdmFycyAocXcoJFNlbGYpKTsKdXNlIEZpbGU6OlBhdGggcXcobWtwYXRoIHJtdHJlZSk7CgojIGdldCBuZWVkZWQgb2JqZWN0cwpteSAkQ29tbWFuZE9iamVjdCAgICAgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q29uc29sZTo6Q29tbWFuZDo6QWRtaW46OklUU006OkltcG9ydEV4cG9ydDo6RXhwb3J0Jyk7Cm15ICRHZW5lcmFsQ2F0YWxvZ09iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpHZW5lcmFsQ2F0YWxvZycpOwpteSAkQ29uZmlnSXRlbU9iamVjdCAgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SVRTTUNvbmZpZ0l0ZW0nKTsKCiMgZ2V0IGhlbHBlciBvYmplY3QKJEtlcm5lbDo6T00tPk9iamVjdFBhcmFtQWRkKAogICAgJ0tlcm5lbDo6U3lzdGVtOjpVbml0VGVzdDo6SGVscGVyJyA9PiB7CiAgICAgICAgUmVzdG9yZURhdGFiYXNlID0+IDEsCiAgICB9LAopOwpteSAkSGVscGVyID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlVuaXRUZXN0OjpIZWxwZXInKTsKCiMgdGVzdCBjb21tYW5kIHdpdGhvdXQgLS10ZW1wbGF0ZS1udW1iZXIgb3B0aW9uCm15ICRFeGl0Q29kZSA9ICRDb21tYW5kT2JqZWN0LT5FeGVjdXRlKCk7CgokU2VsZi0+SXMoCiAgICAkRXhpdENvZGUsCiAgICAxLAogICAgIk5vIC0tdGVtcGxhdGUtbnVtYmVyICAtIGV4aXQgY29kZSIsCik7CgojIGdldCAnSGFyZHdhcmUnIGNhdGFsb2cgY2xhc3MgSUQKbXkgJENvbmZpZ0l0ZW1EYXRhUmVmID0gJEdlbmVyYWxDYXRhbG9nT2JqZWN0LT5JdGVtR2V0KAogICAgQ2xhc3MgPT4gJ0lUU006OkNvbmZpZ0l0ZW06OkNsYXNzJywKICAgIE5hbWUgID0+ICdIYXJkd2FyZScsCik7Cm15ICRIYXJkd2FyZUNvbmZpZ0l0ZW1JRCA9ICRDb25maWdJdGVtRGF0YVJlZi0+e0l0ZW1JRH07CgojIGdldCAnUHJvZHVjdGlvbicgZGVwbG95bWVudCBzdGF0ZSBJRHMKbXkgJFByb2R1Y3Rpb25EZXBsU3RhdGVEYXRhUmVmID0gJEdlbmVyYWxDYXRhbG9nT2JqZWN0LT5JdGVtR2V0KAogICAgQ2xhc3MgPT4gJ0lUU006OkNvbmZpZ0l0ZW06OkRlcGxveW1lbnRTdGF0ZScsCiAgICBOYW1lICA9PiAnUHJvZHVjdGlvbicsCik7Cm15ICRQcm9kdWN0aW9uRGVwbFN0YXRlSUQgPSAkUHJvZHVjdGlvbkRlcGxTdGF0ZURhdGFSZWYtPntJdGVtSUR9OwoKbXkgQENvbmZpZ0l0ZW1JRHM7CgojIGFkZCB0ZXN0IGNvbmZpZyBpdGVtcwpmb3IgKCAxIC4uIDEwICkgewoKICAgICMgY3JlYXRlIENvbmZpZ0l0ZW0gbnVtYmVyCiAgICBteSAkQ29uZmlnSXRlbU51bWJlciA9ICRDb25maWdJdGVtT2JqZWN0LT5Db25maWdJdGVtTnVtYmVyQ3JlYXRlKAogICAgICAgIFR5cGUgICAgPT4gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKS0+R2V0KCdJVFNNQ29uZmlnSXRlbTo6TnVtYmVyR2VuZXJhdG9yJyksCiAgICAgICAgQ2xhc3NJRCA9PiAkSGFyZHdhcmVDb25maWdJdGVtSUQsCiAgICApOwoKICAgICMgYWRkIHRlc3QgQ29uZmlnSXRlbQogICAgbXkgJENvbmZpZ0l0ZW1JRCA9ICRDb25maWdJdGVtT2JqZWN0LT5Db25maWdJdGVtQWRkKAogICAgICAgIE51bWJlciAgPT4gJENvbmZpZ0l0ZW1OdW1iZXIsCiAgICAgICAgQ2xhc3NJRCA9PiAkSGFyZHdhcmVDb25maWdJdGVtSUQsCiAgICAgICAgVXNlcklEICA9PiAxLAogICAgKTsKCiAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAkQ29uZmlnSXRlbUlELAogICAgICAgICJDb25maWcgaXRlbSBpcyBjcmVhdGVkIC0gJENvbmZpZ0l0ZW1JRCIsCiAgICApOwoKICAgIG15ICRDb25maWdJdGVtTmFtZSA9ICdUZXN0Q29uZmlnSXRlbScgLiAkSGVscGVyLT5HZXRSYW5kb21JRCgpOwogICAgbXkgJFZlcnNpb25JRCAgICAgID0gJENvbmZpZ0l0ZW1PYmplY3QtPlZlcnNpb25BZGQoCiAgICAgICAgTmFtZSAgICAgICAgID0+ICRDb25maWdJdGVtTmFtZSwKICAgICAgICBEZWZpbml0aW9uSUQgPT4gMSwKICAgICAgICBEZXBsU3RhdGVJRCAgPT4gJFByb2R1Y3Rpb25EZXBsU3RhdGVJRCwKICAgICAgICBJbmNpU3RhdGVJRCAgPT4gMSwKICAgICAgICBVc2VySUQgICAgICAgPT4gMSwKICAgICAgICBDb25maWdJdGVtSUQgPT4gJENvbmZpZ0l0ZW1JRCwKICAgICk7CgogICAgJFNlbGYtPlRydWUoCiAgICAgICAgJFZlcnNpb25JRCwKICAgICAgICAiVmVyc2lvbiBmb3IgY29uZmlnIGl0ZW0gJENvbmZpZ0l0ZW1JRCBpcyBjcmVhdGVkIC0gJENvbmZpZ0l0ZW1OYW1lIiwKICAgICk7CgogICAgcHVzaCBAQ29uZmlnSXRlbUlEcywgJENvbmZpZ0l0ZW1JRDsKfQoKIyBnZXQgSW1wb3J0RXhwb3J0IG9iamVjdApteSAkSW1wb3J0RXhwb3J0T2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkltcG9ydEV4cG9ydCcpOwoKIyBhZGQgdGVzdCB0ZW1wbGF0ZQpteSAkVGVtcGxhdGVJRCA9ICRJbXBvcnRFeHBvcnRPYmplY3QtPlRlbXBsYXRlQWRkKAogICAgT2JqZWN0ICA9PiAnSVRTTUNvbmZpZ0l0ZW0nLAogICAgRm9ybWF0ICA9PiAnQ1NWJywKICAgIE5hbWUgICAgPT4gJ1RlbXBsYXRlJyAuICRIZWxwZXItPkdldFJhbmRvbUlEKCksCiAgICBWYWxpZElEID0+IDEsCiAgICBDb21tZW50ID0+ICdDb21tZW50JywKICAgIFVzZXJJRCAgPT4gMSwKKTsKCiRTZWxmLT5UcnVlKAogICAgJFRlbXBsYXRlSUQsCiAgICAiSW1wb3J0L0V4cG9ydCB0ZW1wbGF0ZSBpcyBjcmVhdGVkIC0gJFRlbXBsYXRlSUQiLAopOwoKIyBnZXQgb2JqZWN0IGRhdGEgZm9yIHRlc3QgdGVtcGxhdGUKbXkgJVRlbXBsYXRlUmVmID0gKAogICAgJ0NsYXNzSUQnICA9PiAkSGFyZHdhcmVDb25maWdJdGVtSUQsCiAgICAnQ291bnRNYXgnID0+IDEwLAopOwpteSAkU3VjY2VzcyA9ICRJbXBvcnRFeHBvcnRPYmplY3QtPk9iamVjdERhdGFTYXZlKAogICAgVGVtcGxhdGVJRCA9PiAkVGVtcGxhdGVJRCwKICAgIE9iamVjdERhdGEgPT4gXCVUZW1wbGF0ZVJlZiwKICAgIFVzZXJJRCAgICAgPT4gMSwKKTsKCiRTZWxmLT5UcnVlKAogICAgJFN1Y2Nlc3MsCiAgICAiT2JqZWN0RGF0YSBmb3IgdGVzdCB0ZW1wbGF0ZSBpcyBhZGRlZCIsCik7CgojIGFkZCB0aGUgZm9ybWF0IGRhdGEgb2YgdGhlIHRlc3QgdGVtcGxhdGUKbXkgJUZvcm1hdERhdGEgPSAoCiAgICBDaGFyc2V0ICAgICAgICAgICAgICA9PiAnVVRGLTgnLAogICAgQ29sdW1uU2VwYXJhdG9yICAgICAgPT4gJ0NvbW1hJywKICAgIEluY2x1ZGVDb2x1bW5IZWFkZXJzID0+IDEsCik7CiRTdWNjZXNzID0gJEltcG9ydEV4cG9ydE9iamVjdC0+Rm9ybWF0RGF0YVNhdmUoCiAgICBUZW1wbGF0ZUlEID0+ICRUZW1wbGF0ZUlELAogICAgRm9ybWF0RGF0YSA9PiBcJUZvcm1hdERhdGEsCiAgICBVc2VySUQgICAgID0+IDEsCik7CgokU2VsZi0+VHJ1ZSgKICAgICRTdWNjZXNzLAogICAgIkZvcm1hdERhdGEgZm9yIHRlc3QgdGVtcGxhdGUgaXMgYWRkZWQiLAopOwoKIyBzYXZlIHRoZSBzZWFyY2ggZGF0YSBvZiBhIHRlbXBsYXRlCm15ICVTZWFyY2hEYXRhID0gKAogICAgTmFtZSA9PiAnVGVzdENvbmZpZ0l0ZW0qJywKKTsKJFN1Y2Nlc3MgPSAkSW1wb3J0RXhwb3J0T2JqZWN0LT5TZWFyY2hEYXRhU2F2ZSgKICAgIFRlbXBsYXRlSUQgPT4gJFRlbXBsYXRlSUQsCiAgICBTZWFyY2hEYXRhID0+IFwlU2VhcmNoRGF0YSwKICAgIFVzZXJJRCAgICAgPT4gMSwKKTsKCiMgYWRkIG1hcHBpbmcgZGF0YSBmb3IgdGVzdCB0ZW1wbGF0ZQpmb3IgbXkgJE9iamVjdERhdGFWYWx1ZSAocXcoIE5hbWUgRGVwbFN0YXRlIEluY2lTdGF0ZSApKSB7CgogICAgbXkgJE1hcHBpbmdJRCA9ICRJbXBvcnRFeHBvcnRPYmplY3QtPk1hcHBpbmdBZGQoCiAgICAgICAgVGVtcGxhdGVJRCA9PiAkVGVtcGxhdGVJRCwKICAgICAgICBVc2VySUQgICAgID0+IDEsCiAgICApOwoKICAgIG15ICVNYXBwaW5nT2JqZWN0RGF0YSA9ICggS2V5ID0+ICRPYmplY3REYXRhVmFsdWUgKTsKICAgIG15ICRTdWNjZXNzID0gJEltcG9ydEV4cG9ydE9iamVjdC0+TWFwcGluZ09iamVjdERhdGFTYXZlKAogICAgICAgIE1hcHBpbmdJRCAgICAgICAgID0+ICRNYXBwaW5nSUQsCiAgICAgICAgTWFwcGluZ09iamVjdERhdGEgPT4gXCVNYXBwaW5nT2JqZWN0RGF0YSwKICAgICAgICBVc2VySUQgICAgICAgICAgICA9PiAxLAogICAgKTsKCiAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAkU3VjY2VzcywKICAgICAgICAiT2JqZWN0RGF0YSBmb3IgdGVzdCB0ZW1wbGF0ZSBpcyBtYXBwZWQgLSAkT2JqZWN0RGF0YVZhbHVlIiwKICAgICk7Cn0KCiMgbWFrZSBkaXJlY3RvcnkgZm9yIGV4cG9ydCBmaWxlCm15ICREZXN0aW5hdGlvblBhdGggPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpLT5HZXQoJ0hvbWUnKSAuICIvdmFyL3RtcC9JbXBvcnRFeHBvcnQvIjsKbWtwYXRoKCBbJERlc3RpbmF0aW9uUGF0aF0sIDAsIDA3NzAgKTsgICAgIyMgbm8gY3JpdGljCgojIHRlc3QgY29tbWFuZCB3aXRoIHdyb25nIHRlbXBsYXRlIG51bWJlcgokRXhpdENvZGUgPSAkQ29tbWFuZE9iamVjdC0+RXhlY3V0ZSgKICAgICctLXRlbXBsYXRlLW51bWJlcicsCiAgICAkSGVscGVyLT5HZXRSYW5kb21OdW1iZXIoKSwKICAgICREZXN0aW5hdGlvblBhdGggLiAnVGVtcGxhdGVFeHBvcnQuY3N2JwopOwoKJFNlbGYtPklzKAogICAgJEV4aXRDb2RlLAogICAgMSwKICAgICJDb21tYW5kIHdpdGggd3JvbmcgdGVtcGxhdGUgbnVtYmVyIC0gZXhpdCBjb2RlIiwKKTsKCiMgdGVzdCBjb21tYW5kIHdpdGhvdXQgZGVzdGluYXRpb24gYXJndW1lbnQKJEV4aXRDb2RlID0gJENvbW1hbmRPYmplY3QtPkV4ZWN1dGUoICctLXRlbXBsYXRlLW51bWJlcicsICRUZW1wbGF0ZUlEICk7CgokU2VsZi0+SXMoCiAgICAkRXhpdENvZGUsCiAgICAxLAogICAgIk5vIGRlc3RpbmF0aW9uIGFyZ3VtZW50IC0gZXhpdCBjb2RlIiwKKTsKCiMgdGVzdCBjb21tYW5kIHdpdGggLS10ZW1wbGF0ZS1udW1iZXIgb3B0aW9uIGFuZCBkZXN0aW5hdGlvbiBhcmd1bWVudAokRXhpdENvZGUgPSAkQ29tbWFuZE9iamVjdC0+RXhlY3V0ZSggJy0tdGVtcGxhdGUtbnVtYmVyJywgJFRlbXBsYXRlSUQsICREZXN0aW5hdGlvblBhdGggLiAnVGVtcGxhdGVFeHBvcnQuY3N2JyApOwoKJFNlbGYtPklzKAogICAgJEV4aXRDb2RlLAogICAgMCwKICAgICJPcHRpb24gLSAtLXRlbXBsYXRlLW51bWJlciBvcHRpb24gYW5kIGRlc3RpbmF0aW9uIGFyZ3VtZW50IiwKKTsKCiMgcmVtb3ZlIHRlc3QgZGVzdGluYXRpb24gcGF0aAokU3VjY2VzcyA9IHJtdHJlZSggWyREZXN0aW5hdGlvblBhdGhdICk7CiRTZWxmLT5UcnVlKAogICAgJFN1Y2Nlc3MsCiAgICAiVGVzdCBkaXJlY3RvcnkgZGVsZXRlZCAtICREZXN0aW5hdGlvblBhdGgiLAopOwoKIyBjbGVhbnVwIGlzIGRvbmUgYnkgUmVzdG9yZURhdGFiYXNlLgoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CnVzZSB1dGY4OwoKdXNlIHZhcnMgKHF3KCRTZWxmKSk7CgojIGdldCBzZWxlbml1bSBvYmplY3QKbXkgJFNlbGVuaXVtID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlVuaXRUZXN0OjpTZWxlbml1bScpOwoKJFNlbGVuaXVtLT5SdW5UZXN0KAogICAgc3ViIHsKCiAgICAgICAgIyBnZXQgbmVlZGVkIG9iamVjdHMKICAgICAgICBteSAkSGVscGVyICAgICAgICAgICAgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VW5pdFRlc3Q6OkhlbHBlcicpOwogICAgICAgIG15ICRHZW5lcmFsQ2F0YWxvZ09iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpHZW5lcmFsQ2F0YWxvZycpOwoKICAgICAgICAjIGdldCAnTG9jYXRpb24nIGNhdGFsb2cgY2xhc3MgSURzCiAgICAgICAgbXkgJENvbmZpZ0l0ZW1EYXRhUmVmID0gJEdlbmVyYWxDYXRhbG9nT2JqZWN0LT5JdGVtR2V0KAogICAgICAgICAgICBDbGFzcyA9PiAnSVRTTTo6Q29uZmlnSXRlbTo6Q2xhc3MnLAogICAgICAgICAgICBOYW1lICA9PiAnTG9jYXRpb24nLAogICAgICAgICk7CiAgICAgICAgbXkgJExvY2F0aW9uQ29uZmlnSXRlbUlEID0gJENvbmZpZ0l0ZW1EYXRhUmVmLT57SXRlbUlEfTsKCiAgICAgICAgIyBnZXQgJ1Byb2R1Y3Rpb24nIGRlcGxveW1lbnQgc3RhdGUgSUQKICAgICAgICBteSAkRGVwbFN0YXRlRGF0YVJlZiA9ICRHZW5lcmFsQ2F0YWxvZ09iamVjdC0+SXRlbUdldCgKICAgICAgICAgICAgQ2xhc3MgPT4gJ0lUU006OkNvbmZpZ0l0ZW06OkRlcGxveW1lbnRTdGF0ZScsCiAgICAgICAgICAgIE5hbWUgID0+ICdQcm9kdWN0aW9uJywKICAgICAgICApOwogICAgICAgIG15ICRQcm9kdWN0aW9uRGVwbFN0YXRlSUQgPSAkRGVwbFN0YXRlRGF0YVJlZi0+e0l0ZW1JRH07CgogICAgICAgICMgZ2V0IG5lZWRlZCBvYmplY3RzCiAgICAgICAgbXkgJENvbmZpZ0l0ZW1PYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SVRTTUNvbmZpZ0l0ZW0nKTsKICAgICAgICBteSAkQ29uZmlnT2JqZWN0ICAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyk7CgogICAgICAgICMgY3JlYXRlIENvbmZpZ0l0ZW0gbnVtYmVyCiAgICAgICAgbXkgJENvbmZpZ0l0ZW1OdW1iZXIgPSAkQ29uZmlnSXRlbU9iamVjdC0+Q29uZmlnSXRlbU51bWJlckNyZWF0ZSgKICAgICAgICAgICAgVHlwZSAgICA9PiAkQ29uZmlnT2JqZWN0LT5HZXQoJ0lUU01Db25maWdJdGVtOjpOdW1iZXJHZW5lcmF0b3InKSwKICAgICAgICAgICAgQ2xhc3NJRCA9PiAkTG9jYXRpb25Db25maWdJdGVtSUQsCiAgICAgICAgKTsKCiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICRDb25maWdJdGVtTnVtYmVyLAogICAgICAgICAgICAiQ29uZmlnSXRlbSBudW1iZXIgaXMgY3JlYXRlZCAtICRDb25maWdJdGVtTnVtYmVyIiwKICAgICAgICApOwoKICAgICAgICAjIGFkZCAnTG9jYXRpb24nIHRlc3QgQ29uZmlnSXRlbQogICAgICAgIG15ICRDb25maWdJdGVtSUQgPSAkQ29uZmlnSXRlbU9iamVjdC0+Q29uZmlnSXRlbUFkZCgKICAgICAgICAgICAgTnVtYmVyICA9PiAkQ29uZmlnSXRlbU51bWJlciwKICAgICAgICAgICAgQ2xhc3NJRCA9PiAkTG9jYXRpb25Db25maWdJdGVtSUQsCiAgICAgICAgICAgIFVzZXJJRCAgPT4gMSwKICAgICAgICApOwoKICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgJENvbmZpZ0l0ZW1JRCwKICAgICAgICAgICAgIkNvbmZpZ0l0ZW0gJ0xvY2F0aW9uJyBpcyBjcmVhdGVkIC0gSUQgJENvbmZpZ0l0ZW1JRCIsCiAgICAgICAgKTsKCiAgICAgICAgIyBhZGQgYSBuZXcgdmVyc2lvbgogICAgICAgIG15ICRWZXJzaW9uTmFtZSA9ICJTZWxlbml1bSIgLiAkSGVscGVyLT5HZXRSYW5kb21JRCgpOwogICAgICAgIG15ICRWZXJzaW9uSUQgICA9ICRDb25maWdJdGVtT2JqZWN0LT5WZXJzaW9uQWRkKAogICAgICAgICAgICBOYW1lICAgICAgICAgPT4gJFZlcnNpb25OYW1lLAogICAgICAgICAgICBEZWZpbml0aW9uSUQgPT4gMSwKICAgICAgICAgICAgRGVwbFN0YXRlSUQgID0+ICRQcm9kdWN0aW9uRGVwbFN0YXRlSUQsCiAgICAgICAgICAgIEluY2lTdGF0ZUlEICA9PiAxLAogICAgICAgICAgICBVc2VySUQgICAgICAgPT4gMSwKICAgICAgICAgICAgQ29uZmlnSXRlbUlEID0+ICRDb25maWdJdGVtSUQsCiAgICAgICAgKTsKCiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICRWZXJzaW9uSUQsCiAgICAgICAgICAgICJUZXN0IHZlcnNpb24gb2YgdGhlIENvbmZpZ0l0ZW0gaXMgY3JlYXRlZCAtIElEICRWZXJzaW9uSUQiLAogICAgICAgICk7CgogICAgICAgICMgY3JlYXRlIHRlc3QgdXNlciBhbmQgbG9naW4KICAgICAgICBteSAkVGVzdFVzZXJMb2dpbiA9ICRIZWxwZXItPlRlc3RVc2VyQ3JlYXRlKAogICAgICAgICAgICBHcm91cHMgPT4gWyAnYWRtaW4nLCAnaXRzbS1jb25maWdpdGVtJyBdLAogICAgICAgICkgfHwgZGllICJEaWQgbm90IGdldCB0ZXN0IHVzZXIiOwoKICAgICAgICAkU2VsZW5pdW0tPkxvZ2luKAogICAgICAgICAgICBUeXBlICAgICA9PiAnQWdlbnQnLAogICAgICAgICAgICBVc2VyICAgICA9PiAkVGVzdFVzZXJMb2dpbiwKICAgICAgICAgICAgUGFzc3dvcmQgPT4gJFRlc3RVc2VyTG9naW4sCiAgICAgICAgKTsKCiAgICAgICAgIyBuYXZpZ2F0ZSB0byBBZG1pbkltcG9ydEV4cG9ydCBzY3JlZW4KICAgICAgICBteSAkU2NyaXB0QWxpYXMgPSAkQ29uZmlnT2JqZWN0LT5HZXQoJ1NjcmlwdEFsaWFzJyk7CiAgICAgICAgJFNlbGVuaXVtLT5WZXJpZmllZEdldCgiJHtTY3JpcHRBbGlhc31pbmRleC5wbD9BY3Rpb249QWRtaW5JbXBvcnRFeHBvcnQiKTsKCiAgICAgICAgIyBjaGVjayBzY3JlZW4KICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCggInRhYmxlIiwgICAgICAgICAgICAgJ2NzcycgKTsKICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCggInRhYmxlIHRoZWFkIHRyIHRoIiwgJ2NzcycgKTsKICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCggInRhYmxlIHRib2R5IHRyIHRkIiwgJ2NzcycgKTsKCiAgICAgICAgIyBjbGljayBvbiAnQWRkIHRlbXBsYXRlJwogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCIvL2FbY29udGFpbnMoXEBocmVmLCBcJ0FjdGlvbj1BZG1pbkltcG9ydEV4cG9ydDtTdWJhY3Rpb249VGVtcGxhdGVFZGl0JyApXSIpCiAgICAgICAgICAgIC0+VmVyaWZpZWRDbGljaygpOwoKICAgICAgICAjIGNoZWNrIGFuZCBpbnB1dCBzdGVwIDEgb2YgNSBzY3JlZW4KICAgICAgICBmb3IgbXkgJFN0ZXBPbmVJRCAoCiAgICAgICAgICAgIHF3KE5hbWUgT2JqZWN0IEZvcm1hdCBWYWxpZElEIENvbW1lbnQpCiAgICAgICAgICAgICkKICAgICAgICB7CiAgICAgICAgICAgIG15ICRFbGVtZW50ID0gJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoICIjJFN0ZXBPbmVJRCIsICdjc3MnICk7CiAgICAgICAgICAgICRFbGVtZW50LT5pc19lbmFibGVkKCk7CiAgICAgICAgICAgICRFbGVtZW50LT5pc19kaXNwbGF5ZWQoKTsKICAgICAgICB9CiAgICAgICAgbXkgJEltcG9ydEV4cG9ydE5hbWUgPSAiSW1wb3J0RXhwb3J0IiAuICRIZWxwZXItPkdldFJhbmRvbUlEKCk7CiAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoICIjTmFtZSIsICdjc3MnICktPnNlbmRfa2V5cygkSW1wb3J0RXhwb3J0TmFtZSk7CiAgICAgICAgJFNlbGVuaXVtLT5leGVjdXRlX3NjcmlwdCgKICAgICAgICAgICAgIlwkKCcjT2JqZWN0JykudmFsKCdJVFNNQ29uZmlnSXRlbScpLnRyaWdnZXIoJ3JlZHJhdy5JbnB1dEZpZWxkJykudHJpZ2dlcignY2hhbmdlJyk7IgogICAgICAgICk7CiAgICAgICAgJFNlbGVuaXVtLT5leGVjdXRlX3NjcmlwdCgiXCQoJyNGb3JtYXQnKS52YWwoJ0NTVicpLnRyaWdnZXIoJ3JlZHJhdy5JbnB1dEZpZWxkJykudHJpZ2dlcignY2hhbmdlJyk7Iik7CiAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoICIjQ29tbWVudCIsICdjc3MnICktPnNlbmRfa2V5cygnU2VsZW5pdW1UZXN0Jyk7CiAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoIi8vYnV0dG9uW1xAY2xhc3M9J1ByaW1hcnkgQ2FsbEZvckFjdGlvbiddW1xAdHlwZT0nc3VibWl0J10iKS0+VmVyaWZpZWRDbGljaygpOwoKICAgICAgICAjIGNoZWNrIGFuZCBpbnB1dCBzdGVwIDIgb2YgNSBzY3JlZW4KICAgICAgICBmb3IgbXkgJFN0ZXBUd29JRCAoCiAgICAgICAgICAgIHF3KENsYXNzSUQgQ291bnRNYXggRW1wdHlGaWVsZHNMZWF2ZVRoZU9sZFZhbHVlcykKICAgICAgICAgICAgKQogICAgICAgIHsKICAgICAgICAgICAgbXkgJEVsZW1lbnQgPSAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCggIiMkU3RlcFR3b0lEIiwgJ2NzcycgKTsKICAgICAgICAgICAgJEVsZW1lbnQtPmlzX2VuYWJsZWQoKTsKICAgICAgICAgICAgJEVsZW1lbnQtPmlzX2Rpc3BsYXllZCgpOwogICAgICAgIH0KICAgICAgICAkU2VsZW5pdW0tPmV4ZWN1dGVfc2NyaXB0KAogICAgICAgICAgICAiXCQoJyNDbGFzc0lEJykudmFsKCckTG9jYXRpb25Db25maWdJdGVtSUQnKS50cmlnZ2VyKCdyZWRyYXcuSW5wdXRGaWVsZCcpLnRyaWdnZXIoJ2NoYW5nZScpOyIKICAgICAgICApOwogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCIvL2J1dHRvbltcQGNsYXNzPSdQcmltYXJ5IENhbGxGb3JBY3Rpb24nXVtcQHR5cGU9J3N1Ym1pdCddIiktPlZlcmlmaWVkQ2xpY2soKTsKCiAgICAgICAgIyBjaGVjayBhbmQgaW5wdXQgc3RlcCAzIG9mIDUgc2NyZWVuCiAgICAgICAgZm9yIG15ICRTdGVwVGhyZWVJRCAoCiAgICAgICAgICAgIHF3KENvbHVtblNlcGFyYXRvciBDaGFyc2V0IEluY2x1ZGVDb2x1bW5IZWFkZXJzKQogICAgICAgICAgICApCiAgICAgICAgewogICAgICAgICAgICBteSAkRWxlbWVudCA9ICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAiIyRTdGVwVGhyZWVJRCIsICdjc3MnICk7CiAgICAgICAgICAgICRFbGVtZW50LT5pc19lbmFibGVkKCk7CiAgICAgICAgICAgICRFbGVtZW50LT5pc19kaXNwbGF5ZWQoKTsKICAgICAgICB9CiAgICAgICAgJFNlbGVuaXVtLT5leGVjdXRlX3NjcmlwdCgKICAgICAgICAgICAgIlwkKCcjQ29sdW1uU2VwYXJhdG9yJykudmFsKCdDb21tYScpLnRyaWdnZXIoJ3JlZHJhdy5JbnB1dEZpZWxkJykudHJpZ2dlcignY2hhbmdlJyk7IgogICAgICAgICk7CiAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoIi8vYnV0dG9uW1xAY2xhc3M9J1ByaW1hcnkgQ2FsbEZvckFjdGlvbiddW1xAdHlwZT0nc3VibWl0J10iKS0+VmVyaWZpZWRDbGljaygpOwoKICAgICAgICAjIGNoZWNrIGFuZCBpbnB1dCBzdGVwIDQgb2YgNSBzY3JlZW4KICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCggIiNNYXBwaW5nQWRkQnV0dG9uIiwgJ2NzcycgKS0+VmVyaWZpZWRDbGljaygpOwogICAgICAgIGZvciBteSAkU3RlcEZvdXJJRCAoCiAgICAgICAgICAgIHF3KEtleSBJZGVudGlmaWVyKQogICAgICAgICAgICApCiAgICAgICAgewogICAgICAgICAgICBteSAkRWxlbWVudCA9ICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCIuLy8qW1xAaWQ9J09iamVjdDo6MDo6JFN0ZXBGb3VySUQnXSIpOwoKICAgICAgICAgICAgJEVsZW1lbnQtPmlzX2VuYWJsZWQoKTsKICAgICAgICAgICAgJEVsZW1lbnQtPmlzX2Rpc3BsYXllZCgpOwogICAgICAgIH0KCiAgICAgICAgZm9yIG15ICRTdGVwRm91ckNsYXNzICgKICAgICAgICAgICAgcXcoQXJyb3dVcCBBcnJvd0Rvd24gRGVsZXRlQ29sdW1uKQogICAgICAgICAgICApCiAgICAgICAgewogICAgICAgICAgICBteSAkRWxlbWVudCA9ICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAiLiRTdGVwRm91ckNsYXNzIiwgJ2NzcycgKTsKICAgICAgICAgICAgJEVsZW1lbnQtPmlzX2VuYWJsZWQoKTsKICAgICAgICAgICAgJEVsZW1lbnQtPmlzX2Rpc3BsYXllZCgpOwogICAgICAgIH0KICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCggInRhYmxlIiwgICAgICAgICAgICAgJ2NzcycgKTsKICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCggInRhYmxlIHRoZWFkIHRyIHRoIiwgJ2NzcycgKTsKICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCggInRhYmxlIHRib2R5IHRyIHRkIiwgJ2NzcycgKTsKCiAgICAgICAgIyBzZWxlY3QgJ051bWJlcicgbWFwcGluZyBlbGVtZW50CiAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoIi4vLypbXEBpZD0nT2JqZWN0OjowOjpLZXknXS9vcHRpb25bMl0iKS0+Y2xpY2soKTsKCiAgICAgICAgIyBhZGQgYW5kIHNlbGVjdCAnTmFtZScgbWFwcGluZyBlbGVtZW50CiAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoICIjTWFwcGluZ0FkZEJ1dHRvbiIsICdjc3MnICktPlZlcmlmaWVkQ2xpY2soKTsKICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCgiLi8vKltcQGlkPSdPYmplY3Q6OjE6OktleSddL29wdGlvblszXSIpLT5jbGljaygpOwoKICAgICAgICAjIGFkZCBhbmQgc2VsZWN0ICdEZXBsb3ltZW50IFN0YXRlJyBtYXBwaW5nIGVsZW1lbnQKICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCggIiNNYXBwaW5nQWRkQnV0dG9uIiwgJ2NzcycgKS0+VmVyaWZpZWRDbGljaygpOwogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCIuLy8qW1xAaWQ9J09iamVjdDo6Mjo6S2V5J10vb3B0aW9uWzRdIiktPmNsaWNrKCk7CgogICAgICAgICMgYWRkIGFuZCBzZWxlY3QgJ0luY2lkZW50IFN0YXRlJyBtYXBwaW5nIGVsZW1lbnQKICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCggIiNNYXBwaW5nQWRkQnV0dG9uIiwgJ2NzcycgKS0+VmVyaWZpZWRDbGljaygpOwogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCIuLy8qW1xAaWQ9J09iamVjdDo6Mzo6S2V5J10vb3B0aW9uWzVdIiktPmNsaWNrKCk7CiAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoICIjU3VibWl0TmV4dEJ1dHRvbiIsICdjc3MnICktPlZlcmlmaWVkQ2xpY2soKTsKCiAgICAgICAgIyBjaGVjayBzdGVwIDUgb2YgNSBzY3JlZW4KICAgICAgICBmb3IgbXkgJFN0ZXBGb3VySUQgKAogICAgICAgICAgICBxdyhSZXN0cmljdEV4cG9ydCBOdW1iZXIgTmFtZSBEZXBsU3RhdGVJRHMgSW5jaVN0YXRlSURzIFR5cGUgUGhvbmUxIFBob25lMgogICAgICAgICAgICBGYXggRS1NYWlsIEFkZHJlc3MgTm90ZSkKICAgICAgICAgICAgKQogICAgICAgIHsKICAgICAgICAgICAgbXkgJEVsZW1lbnQgPSAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCggIiMkU3RlcEZvdXJJRCIsICdjc3MnICk7CiAgICAgICAgICAgICRFbGVtZW50LT5pc19lbmFibGVkKCk7CiAgICAgICAgICAgICRFbGVtZW50LT5pc19kaXNwbGF5ZWQoKTsKICAgICAgICB9CgogICAgICAgICMgc2VhcmNoIENvbmZpZ0l0ZW0gYnkgbnVtYmVyIGFuZCBkZXBsb3ltZW50IHN0YXRlCiAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoICIjUmVzdHJpY3RFeHBvcnQiLCAnY3NzJyApLT5jbGljaygpOwogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAiI051bWJlciIsICAgICAgICAgJ2NzcycgKS0+c2VuZF9rZXlzKCRDb25maWdJdGVtTnVtYmVyKTsKICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCggIiNOYW1lIiwgICAgICAgICAgICdjc3MnICktPnNlbmRfa2V5cygkVmVyc2lvbk5hbWUpOwogICAgICAgICRTZWxlbml1bS0+ZXhlY3V0ZV9zY3JpcHQoCiAgICAgICAgICAgICJcJCgnI0RlcGxTdGF0ZUlEcycpLnZhbCgnJFByb2R1Y3Rpb25EZXBsU3RhdGVJRCcpLnRyaWdnZXIoJ3JlZHJhdy5JbnB1dEZpZWxkJykudHJpZ2dlcignY2hhbmdlJyk7IgogICAgICAgICk7CiAgICAgICAgJFNlbGVuaXVtLT5leGVjdXRlX3NjcmlwdCgiXCQoJyNJbmNpU3RhdGVJRHMnKS52YWwoJzEnKS50cmlnZ2VyKCdyZWRyYXcuSW5wdXRGaWVsZCcpLnRyaWdnZXIoJ2NoYW5nZScpOyIpOwogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCIvL2J1dHRvbltcQGNsYXNzPSdQcmltYXJ5IENhbGxGb3JBY3Rpb24nXVtcQHR5cGU9J3N1Ym1pdCddIiktPlZlcmlmaWVkQ2xpY2soKTsKCiAgICAgICAgIyBnZXQgbmVlZGVkIG9iamVjdHMKICAgICAgICBteSAkSW1wb3J0RXhwb3J0T2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkltcG9ydEV4cG9ydCcpOwogICAgICAgIG15ICREQk9iamVjdCAgICAgICAgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKTsKCiAgICAgICAgIyBnZXQgVGVtcGxhdGVJRCBvZiBjcmVhdGVkIHRlc3QgdGVtcGxhdGUKICAgICAgICAkREJPYmplY3QtPlByZXBhcmUoCiAgICAgICAgICAgIFNRTCAgID0+ICdTRUxFQ1QgaWQgRlJPTSBpbWV4cG9ydF90ZW1wbGF0ZSBXSEVSRSBuYW1lID0gPycsCiAgICAgICAgICAgIEJpbmQgID0+IFsgXCRJbXBvcnRFeHBvcnROYW1lIF0sCiAgICAgICAgICAgIExpbWl0ID0+IDEsCiAgICAgICAgKTsKCiAgICAgICAgIyBmZXRjaCB0aGUgcmVzdWx0CiAgICAgICAgbXkgJFRlbXBsYXRlSUQ7CiAgICAgICAgd2hpbGUgKCBteSBAUm93ID0gJERCT2JqZWN0LT5GZXRjaHJvd0FycmF5KCkgKSB7CiAgICAgICAgICAgICRUZW1wbGF0ZUlEID0gJFJvd1swXTsKICAgICAgICB9CgogICAgICAgICMgbmF2aWdhdGUgdG8gdGVzdCBjcmVhdGVkIENvbmZpZ0l0ZW0gYW5kIHZlcmlmeSBpdAogICAgICAgICRTZWxlbml1bS0+VmVyaWZpZWRHZXQoIiR7U2NyaXB0QWxpYXN9aW5kZXgucGw/QWN0aW9uPUFnZW50SVRTTUNvbmZpZ0l0ZW1ab29tO0NvbmZpZ0l0ZW1JRD0kQ29uZmlnSXRlbUlEIik7CiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgIGluZGV4KCAkU2VsZW5pdW0tPmdldF9wYWdlX3NvdXJjZSgpLCAkVmVyc2lvbk5hbWUgKSA+IC0xLAogICAgICAgICAgICAiVGVzdCBDb25maWdJdGVtIG5hbWUgJFZlcnNpb25OYW1lIC0gZm91bmQiLAogICAgICAgICk7CgogICAgICAgICMgZXhwb3J0IGNyZWF0ZWQgdGVzdCB0ZW1wbGF0ZQogICAgICAgIG15ICRFeHBvcnRSZXN1bHRSZWYgPSAkSW1wb3J0RXhwb3J0T2JqZWN0LT5FeHBvcnQoCiAgICAgICAgICAgIFRlbXBsYXRlSUQgPT4gJFRlbXBsYXRlSUQsCiAgICAgICAgICAgIFVzZXJJRCAgICAgPT4gMSwKICAgICAgICApOwoKICAgICAgICAjIGRlbGV0ZSBjcmVhdGVkIHRlc3QgQ29uZmlnSXRlbSwgc28gaXQgY2FuIGJlIGltcG9ydGVkIGJhY2sKICAgICAgICAkQ29uZmlnSXRlbU9iamVjdC0+Q29uZmlnSXRlbURlbGV0ZSgKICAgICAgICAgICAgQ29uZmlnSXRlbUlEID0+ICRDb25maWdJdGVtSUQsCiAgICAgICAgICAgIFVzZXJJRCAgICAgICA9PiAxLAogICAgICAgICk7CgogICAgICAgIG15ICRDb25maWdJdGVtID0gJENvbmZpZ0l0ZW1PYmplY3QtPkNvbmZpZ0l0ZW1HZXQoCiAgICAgICAgICAgIENvbmZpZ0l0ZW1JRCA9PiAkQ29uZmlnSXRlbUlELAogICAgICAgICAgICBDYWNoZSAgICAgICAgPT4gMCwKICAgICAgICApOwoKICAgICAgICAjIGNoZWNrIGlmIENvbmZpZ0l0ZW0gaXMgZGVsZXRlZAogICAgICAgICRTZWxmLT5GYWxzZSgKICAgICAgICAgICAgJENvbmZpZ0l0ZW0sCiAgICAgICAgICAgICJDb25maWdJdGVtIGlzIGRlbGV0ZWQgLSBJRCAkQ29uZmlnSXRlbUlEIiwKICAgICAgICApOwoKICAgICAgICAjIHJlZnJlc2ggc2NyZWVuIGFuZCB2ZXJpZnkgdGhhdCB0ZXN0IENvbmZpZ0l0ZW0gZG9lcyBub3QgZXhpc3QgYW55bW9yZQogICAgICAgICRTZWxlbml1bS0+VmVyaWZpZWRSZWZyZXNoKCk7CiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgIGluZGV4KCAkU2VsZW5pdW0tPmdldF9wYWdlX3NvdXJjZSgpLCAiQ2FuXCd0IHNob3cgaXRlbSwgbm8gYWNjZXNzIHJpZ2h0cyBmb3IgQ29uZmlnSXRlbSBhcmUgZ2l2ZW4hIiApID4gLTEsCiAgICAgICAgICAgICJUZXN0IENvbmZpZ0l0ZW0gbmFtZSAkVmVyc2lvbk5hbWUgaXMgbm90IGZvdW5kIiwKICAgICAgICApOwoKICAgICAgICAjIGdldCBtYWluIG9iamVjdAogICAgICAgIG15ICRNYWluT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06Ok1haW4nKTsKCiAgICAgICAgIyBjcmVhdGUgdGVzdCBFeHBvcnRlZCBmaWxlIHRvIGEgc3lzdGVtCiAgICAgICAgbXkgJEV4cG9ydEZpbGVOYW1lID0gIklUU01FeHBvcnQiIC4gJEhlbHBlci0+R2V0UmFuZG9tSUQoKSAuICIuY3N2IjsKICAgICAgICBteSAkRXhwb3J0TG9jYXRpb24gPSAkQ29uZmlnT2JqZWN0LT5HZXQoJ0hvbWUnKSAuICIvdmFyL3RtcC8iIC4gJEV4cG9ydEZpbGVOYW1lOwogICAgICAgIG15ICRTdWNjZXNzICAgICAgICA9ICRNYWluT2JqZWN0LT5GaWxlV3JpdGUoCiAgICAgICAgICAgIExvY2F0aW9uICAgPT4gJEV4cG9ydExvY2F0aW9uLAogICAgICAgICAgICBDb250ZW50ICAgID0+IFwkRXhwb3J0UmVzdWx0UmVmLT57RGVzdGluYXRpb25Db250ZW50fS0+WzBdLAogICAgICAgICAgICBNb2RlICAgICAgID0+ICd1dGY4JywKICAgICAgICAgICAgVHlwZSAgICAgICA9PiAnQXR0YWNobWVudCcsCiAgICAgICAgICAgIFBlcm1pc3Npb24gPT4gJzY2NCcsCiAgICAgICAgKTsKICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgJFN1Y2Nlc3MsCiAgICAgICAgICAgICJFeHBvcnQgZmlsZSAkRXhwb3J0RmlsZU5hbWUgJyRFeHBvcnRMb2NhdGlvbicgaXMgY3JlYXRlZCIsCiAgICAgICAgKTsKCiAgICAgICAgIyBuYXZpZ2F0ZSB0byBBZG1pbkltcG9ydEV4cG9ydCBzY3JlZW4KICAgICAgICAkU2VsZW5pdW0tPlZlcmlmaWVkR2V0KCIke1NjcmlwdEFsaWFzfWluZGV4LnBsP0FjdGlvbj1BZG1pbkltcG9ydEV4cG9ydCIpOwoKICAgICAgICAjIGNsaWNrIG9uICdJbXBvcnQnCiAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoIi8vYVtjb250YWlucyhcQGhyZWYsIFwnU3ViYWN0aW9uPUltcG9ydEluZm9ybWF0aW9uO1RlbXBsYXRlSUQ9JFRlbXBsYXRlSUQnICldIikKICAgICAgICAgICAgLT5WZXJpZmllZENsaWNrKCk7CgogICAgICAgICMgc2VsZWN0IEV4cG9ydGVkIGZpbGUgYW5kIHN0YXJ0IGltcG9ydGluZwogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCIvL2lucHV0W2NvbnRhaW5zKFxAbmFtZSwgXCdTb3VyY2VGaWxlJyApXSIpLT5zZW5kX2tleXMoJEV4cG9ydExvY2F0aW9uKTsKCiAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoIi8vYnV0dG9uW1xAdmFsdWU9J1N0YXJ0IEltcG9ydCddW1xAdHlwZT0nc3VibWl0J10iKS0+VmVyaWZpZWRDbGljaygpOwoKICAgICAgICAjIGNoZWNrIGZvciBleHBlY3RlZCBvdXRjb21lCiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgIGluZGV4KCAkU2VsZW5pdW0tPmdldF9wYWdlX3NvdXJjZSgpLCAnKENyZWF0ZWQ6IDEpJyApID4gLTEsCiAgICAgICAgICAgICJJbXBvcnQgdGVzdCBDb25maWdJdGVtIC0gc3VjY2VzcyIsCiAgICAgICAgKTsKCiAgICAgICAgIyBuYXZpZ2F0ZSB0byBpbXBvcnRlZCB0ZXN0IGNyZWF0ZWQgQ29uZmlnSXRlbSBhbmQgdmVyaWZ5IGl0CiAgICAgICAgbXkgJEltcG9ydGVkQ29uZmlnSXRlbUlEID0gJENvbmZpZ0l0ZW1JRCArIDE7CiAgICAgICAgJFNlbGVuaXVtLT5WZXJpZmllZEdldCgKICAgICAgICAgICAgIiR7U2NyaXB0QWxpYXN9aW5kZXgucGw/QWN0aW9uPUFnZW50SVRTTUNvbmZpZ0l0ZW1ab29tO0NvbmZpZ0l0ZW1JRD0kSW1wb3J0ZWRDb25maWdJdGVtSUQiCiAgICAgICAgKTsKICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgaW5kZXgoICRTZWxlbml1bS0+Z2V0X3BhZ2Vfc291cmNlKCksICRWZXJzaW9uTmFtZSApID4gLTEsCiAgICAgICAgICAgICJUZXN0IENvbmZpZ0l0ZW0gbmFtZSAkVmVyc2lvbk5hbWUgaXMgZm91bmQiLAogICAgICAgICk7CgogICAgICAgICMgbmF2aWdhdGUgdG8gQWRtaW5JbXBvcnRFeHBvcnQgc2NyZWVuCiAgICAgICAgJFNlbGVuaXVtLT5WZXJpZmllZEdldCgiJHtTY3JpcHRBbGlhc31pbmRleC5wbD9BY3Rpb249QWRtaW5JbXBvcnRFeHBvcnQiKTsKCiAgICAgICAgIyBjbGljayB0byBkZWxldGUgdGVzdCB0ZW1wbGF0ZQogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAiI0RlbGV0ZVRlbXBsYXRlSUQkVGVtcGxhdGVJRCIsICdjc3MnICktPlZlcmlmaWVkQ2xpY2soKTsKCiAgICAgICAgIyBkZWxldGUgdGVzdCBpbXBvcnRlZCBDb25maWdJdGVtCiAgICAgICAgJFN1Y2Nlc3MgPSAkQ29uZmlnSXRlbU9iamVjdC0+Q29uZmlnSXRlbURlbGV0ZSgKICAgICAgICAgICAgQ29uZmlnSXRlbUlEID0+ICRJbXBvcnRlZENvbmZpZ0l0ZW1JRCwKICAgICAgICAgICAgVXNlcklEICAgICAgID0+IDEsCiAgICAgICAgKTsKICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgJFN1Y2Nlc3MsCiAgICAgICAgICAgICJDb25maWdJdGVtIGlzIGRlbGV0ZWQgLSBJRCAkSW1wb3J0ZWRDb25maWdJdGVtSUQiLAogICAgICAgICk7CgogICAgICAgICMgZGVsZXRlIHRlc3QgRXhwb3J0ZWQgZmlsZSBmcm9tIHN5c3RlbQogICAgICAgICRTdWNjZXNzID0gJE1haW5PYmplY3QtPkZpbGVEZWxldGUoCiAgICAgICAgICAgIExvY2F0aW9uID0+ICRFeHBvcnRMb2NhdGlvbiwKICAgICAgICAgICAgVHlwZSAgICAgPT4gJ0F0dGFjaG1lbnQnLAogICAgICAgICk7CiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICRTdWNjZXNzLAogICAgICAgICAgICAiRXhwb3J0IGZpbGUgJEV4cG9ydEZpbGVOYW1lIGlzIGRlbGV0ZWQiLAogICAgICAgICk7CgogICAgfQopOwoKMTsK
Um93MS1Db2wxO1JvdzEtQ29sMjtSb3cxLUNvbDMNClJvdzItQ29sMTtSb3cyLUNvbDI7Um93Mi1Db2wzDQpSb3czLUNvbDE7Um93My1Db2wyO1JvdzMtQ29sMw0K
Um93MS1Db2wxCVJvdzEtQ29sMglSb3cxLUNvbDMNClJvdzItQ29sMQlSb3cyLUNvbDIJUm93Mi1Db2wzDQpSb3czLUNvbDEJUm93My1Db2wyCVJvdzMtQ29sMw0K
IlJvdzEtQ29sMSI6IlJvdzEtQ29sMiI6IlJvdzEtQ29sMyINCiJSb3cyLUNvbDEiOiJSb3cyLUNvbDIiOiJSb3cyLUNvbDMiDQoiUm93My1Db2wxIjoiUm93My1Db2wyIjoiUm93My1Db2wzIg0K
IlJvdzEtQ29sMSI7IlJvdzEtQ29sMiI7IlJvdzEtQ29sMyINCiJSb3cyLUNvbDEiOyJSb3cyLUNvbDIiOyJSb3cyLUNvbDMiDQoiUm93My1Db2wxIjsiUm93My1Db2wyIjsiUm93My1Db2wzIg0K
IlJvdzEtQ29sMSIJIlJvdzEtQ29sMiIJIlJvdzEtQ29sMyINCiJSb3cyLUNvbDEiCSJSb3cyLUNvbDIiCSJSb3cyLUNvbDMiDQoiUm93My1Db2wxIgkiUm93My1Db2wyIgkiUm93My1Db2wzIg0K
IgpUZXN0IDEgLSAxIjtUZXN0IDEgLSAyOyJUZXN0IDEKLSAzIjtUZXN0IFxuXHRcclxzDQoiVGVzdCAyIAotIDEiOyJUZQpzdCAyIC0gMiI7IlRlc3QgMiAtIDMKIjsNCg==
IgpUZXN0IDEgLSAxIglUZXN0IDEgLSAyCSJUZXN0IDEKLSAzIglUZXN0IFxuXHRcclxzDQoiVGVzdCAyIAotIDEiCSJUZQpzdCAyIC0gMiIJIlRlc3QgMiAtIDMKIgkNCg==
IgpUZXN0IDEgLSAxIjoiVGVzdCAxIC0gMiI6IlRlc3QgMQotIDMiOiJUZXN0IFxuXHRcclxzIg0KIlRlc3QgMiAKLSAxIjoiVGUKc3QgMiAtIDIiOiJUZXN0IDIgLSAzCiI6DQo=
IgpUZXN0IDEgLSAxIjsiVGVzdCAxIC0gMiI7IlRlc3QgMQotIDMiOyJUZXN0IFxuXHRcclxzIg0KIlRlc3QgMiAKLSAxIjsiVGUKc3QgMiAtIDIiOyJUZXN0IDIgLSAzCiI7DQo=
IgpUZXN0IDEgLSAxIgkiVGVzdCAxIC0gMiIJIlRlc3QgMQotIDMiCSJUZXN0IFxuXHRcclxzIg0KIlRlc3QgMiAKLSAxIgkiVGUKc3QgMiAtIDIiCSJUZXN0IDIgLSAzCiIJDQo=
ICBUZXN0ICA7ICAgIDtUZXN0ICANCiAgICBUZXN0OztUZXN0DQo7OyANCg==
ICBUZXN0ICAJICAgIAlUZXN0ICANCiAgICBUZXN0CQlUZXN0DQoJCSANCg==
IiAgVGVzdCAgIjoiICAgICI6IlRlc3QgICINCiIgICAgVGVzdCI6OiJUZXN0Ig0KOjoiICINCg==
IiAgVGVzdCAgIjsiICAgICI7IlRlc3QgICINCiIgICAgVGVzdCI7OyJUZXN0Ig0KOzsiICINCg==
IiAgVGVzdCAgIgkiICAgICIJIlRlc3QgICINCiIgICAgVGVzdCIJCSJUZXN0Ig0KCQkiICINCg==
IlRlc3Q7Ol/CsF4hIiLCpyQlJi8oKT0/wrRgKitUZXN0Ijs+PEB+J317W11cDQoiIiIiIjs7OjouLi0tX18jIyI7DQo=
IlRlc3Q7Ol/CsF4hIiLCpyQlJi8oKT0/wrRgKitUZXN0Igk+PEB+J317W11cDQoiIiIiIjs7OjouLi0tX18jIyIJDQo=
IlRlc3Q7Ol/CsF4hIiLCpyQlJi8oKT0/wrRgKitUZXN0IjoiPjxAfid9e1tdXCINCiIiIiIiOzs6Oi4uLS1fXyMjIjoNCg==
IlRlc3Q7Ol/CsF4hIiLCpyQlJi8oKT0/wrRgKitUZXN0IjsiPjxAfid9e1tdXCINCiIiIiIiOzs6Oi4uLS1fXyMjIjsNCg==
IlRlc3Q7Ol/CsF4hIiLCpyQlJi8oKT0/wrRgKitUZXN0IgkiPjxAfid9e1tdXCINCiIiIiIiOzs6Oi4uLS1fXyMjIgkNCg==
w7zDtsOkw587w5zDlsOEDQrDn8Okw7bDvDvDhMOWw5wNCg==
w7zDtsOkw58Jw5zDlsOEDQrDn8Okw7bDvAnDhMOWw5wNCg==
IsO8w7bDpMOfIjoiw5zDlsOEIg0KIsOfw6TDtsO8Ijoiw4TDlsOcIg0K
IsO8w7bDpMOfIjsiw5zDlsOEIg0KIsOfw6TDtsO8Ijsiw4TDlsOcIg0K
IsO8w7bDpMOfIgkiw5zDlsOEIg0KIsOfw6TDtsO8Igkiw4TDlsOcIg0K
IsqpIMqsIMquIjsiIMqhIMukIM6MICINCiIgIM6XIM+XIM+gICAiOyLOhiDOmyDOniINCg==
IsqpIMqsIMquIjoiIMqhIMukIM6MICINCiIgIM6XIM+XIM+gICAiOiLOhiDOmyDOniINCg==
IsqpIMqsIMquIgkiIMqhIMukIM6MICINCiIgIM6XIM+XIM+gICAiCSLOhiDOmyDOniINCg==
IlJvdzEtQ29sMSI7IlJvdzEtQ29sMiI7IlJvdzEtQ29sMyINCiJSb3cyLUNvbDEiOyJSb3cyLUNvbDIiOyJSb3cyLUNvbDMiDQoiUm93My1Db2wxIjsiMFJvdzMtQ29sMiI7IlJvdzMtQ29sMyINCg==
IlJvdzEtQ29sMSI7IlJvdzEtQ29sMiI7IlJvdzEtQ29sMyINCiJSb3cyLUNvbDEiOyIwUm93Mi1Db2wyIjsiUm93Mi1Db2wzIg0KIlJvdzMtQ29sMSI7IlJvdzMtQ29sMiI7IlJvdzMtQ29sMyINCg==
Ik5hbWUiLCJEZXBsb3ltZW50IFN0YXRlIiwiSW5jaWRlbnQgU3RhdGUiCiJUZXN0Q29uZmlnSXRlbXRlc3QxNDM1ODU2ODk1MTQ3OTYyMzc2IiwiUHJvZHVjdGlvbiIsIk9wZXJhdGlvbmFsIgoiVGVzdENvbmZpZ0l0ZW10ZXN0MTQzNTg1Njg5NTE0MTgwMjc3IiwiUHJvZHVjdGlvbiIsIk9wZXJhdGlvbmFsIgoiVGVzdENvbmZpZ0l0ZW10ZXN0MTQzNTg1Njg5NTE4MDg3MzMxMCIsIlByb2R1Y3Rpb24iLCJPcGVyYXRpb25hbCIKIlRlc3RDb25maWdJdGVtdGVzdDE0MzU4NTY4OTU1MTM5MjQ0MzkiLCJQcm9kdWN0aW9uIiwiT3BlcmF0aW9uYWwiCiJUZXN0Q29uZmlnSXRlbXRlc3QxNDM1ODU2ODk1MzAwNzMwMzMiLCJQcm9kdWN0aW9uIiwiT3BlcmF0aW9uYWwiCiJUZXN0Q29uZmlnSXRlbXRlc3QxNDM1ODU2ODk1NDkzMjczNjg4IiwiUHJvZHVjdGlvbiIsIk9wZXJhdGlvbmFsIgoiVGVzdENvbmZpZ0l0ZW10ZXN0MTQzNTg1Njg5NTE4ODIxNjA2NSIsIlByb2R1Y3Rpb24iLCJPcGVyYXRpb25hbCIKIlRlc3RDb25maWdJdGVtdGVzdDE0MzU4NTY4OTU5ODY2OTMzOSIsIlByb2R1Y3Rpb24iLCJPcGVyYXRpb25hbCIKIlRlc3RDb25maWdJdGVtdGVzdDE0MzU4NTY4OTU2MjE5MTAwODYiLCJQcm9kdWN0aW9uIiwiT3BlcmF0aW9uYWwiCiJUZXN0Q29uZmlnSXRlbXRlc3QxNDM1ODU2ODk1NTQ0MTk2NzI0IiwiUHJvZHVjdGlvbiIsIk9wZXJhdGlvbmFsIg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgpwYWNrYWdlIHZhcjo6cGFja2FnZXNldHVwOjpJbXBvcnRFeHBvcnQ7ICAgICMjIG5vIGNyaXRpYwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKb3VyIEBPYmplY3REZXBlbmRlbmNpZXMgPSAoCiAgICAnS2VybmVsOjpTeXN0ZW06OkRCJywKICAgICdLZXJuZWw6OkNvbmZpZycsCiAgICAnS2VybmVsOjpTeXN0ZW06OlN5c0NvbmZpZycsCik7Cgo9aGVhZDEgTkFNRQoKdmFyOjpwYWNrYWdlc2V0dXA6OkltcG9ydEV4cG9ydCAtIGNvZGUgdG8gZXhlY3V0ZSBkdXJpbmcgcGFja2FnZSBpbnN0YWxsYXRpb24KCj1oZWFkMSBQVUJMSUMgSU5URVJGQUNFCgo9Y3V0Cgo9aGVhZDIgbmV3KCkKCkNyZWF0ZSBhbiBvYmplY3QKCiAgICB1c2UgS2VybmVsOjpTeXN0ZW06Ok9iamVjdE1hbmFnZXI7CiAgICBsb2NhbCAkS2VybmVsOjpPTSA9IEtlcm5lbDo6U3lzdGVtOjpPYmplY3RNYW5hZ2VyLT5uZXcoKTsKICAgIG15ICRDb2RlT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgndmFyOjpwYWNrYWdlc2V0dXA6OkltcG9ydEV4cG9ydCcpOwoKPWN1dAoKc3ViIG5ldyB7CiAgICBteSAoICRUeXBlLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgYWxsb2NhdGUgbmV3IGhhc2ggZm9yIG9iamVjdAogICAgbXkgJFNlbGYgPSB7fTsKICAgIGJsZXNzKCAkU2VsZiwgJFR5cGUgKTsKCiAgICAjIGFsd2F5cyBkaXNjYXJkIHRoZSBjb25maWcgb2JqZWN0IGJlZm9yZSBwYWNrYWdlIGNvZGUgaXMgZXhlY3V0ZWQsCiAgICAjIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBjb25maWcgb2JqZWN0IHdpbGwgYmUgY3JlYXRlZCBuZXdseSwgc28gdGhhdCBpdAogICAgIyB3aWxsIHVzZSB0aGUgcmVjZW50bHkgd3JpdHRlbiBuZXcgY29uZmlnIGZyb20gdGhlIHBhY2thZ2UKICAgICRLZXJuZWw6Ok9NLT5PYmplY3RzRGlzY2FyZCgKICAgICAgICBPYmplY3RzID0+IFsnS2VybmVsOjpDb25maWcnXSwKICAgICk7CgogICAgcmV0dXJuICRTZWxmOwp9Cgo9aGVhZDIgQ29kZUluc3RhbGwoKQoKUnVuIHRoZSBjb2RlIGluc3RhbGwgcGFydAoKICAgIG15ICRSZXN1bHQgPSAkQ29kZU9iamVjdC0+Q29kZUluc3RhbGwoKTsKCj1jdXQKCnN1YiBDb2RlSW5zdGFsbCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIHJldHVybiAxOwp9Cgo9aGVhZDIgQ29kZVJlaW5zdGFsbCgpCgpSdW4gdGhlIGNvZGUgcmVpbnN0YWxsIHBhcnQKCiAgICBteSAkUmVzdWx0ID0gJENvZGVPYmplY3QtPkNvZGVSZWluc3RhbGwoKTsKCj1jdXQKCnN1YiBDb2RlUmVpbnN0YWxsIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgcmV0dXJuIDE7Cn0KCj1oZWFkMiBDb2RlVXBncmFkZSgpCgpSdW4gdGhlIGNvZGUgdXBncmFkZSBwYXJ0CgogICAgbXkgJFJlc3VsdCA9ICRDb2RlT2JqZWN0LT5Db2RlVXBncmFkZSgpOwoKPWN1dAoKc3ViIENvZGVVcGdyYWRlIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgcmV0dXJuIDE7Cn0KCj1oZWFkMiBDb2RlVXBncmFkZUZyb21CZWZvcmVfMl8wXzMoKQoKVGhpcyBmdW5jdGlvbiBpcyBvbmx5IGV4ZWN1dGVkIGlmIHRoZSBpbnN0YWxsZWQgbW9kdWxlIHZlcnNpb24gaXMgc21hbGxlciB0aGFuIDIuMC4zLgoKICAgIG15ICRSZXN1bHQgPSAkQ29kZU9iamVjdC0+Q29kZVVwZ3JhZGVGcm9tQmVmb3JlXzJfMF8zKCk7Cgo9Y3V0CgpzdWIgQ29kZVVwZ3JhZGVGcm9tQmVmb3JlXzJfMF8zIHsgICAgIyMgbm8gY3JpdGljCiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgZml4IGEgdHlwbyBpbiB0aGUgZGF0YWJhc2UKICAgICRTZWxmLT5fRml4RGF0YWJhc2VUeXBvKCk7CgogICAgcmV0dXJuIDE7Cn0KCj1oZWFkMiBDb2RlVXBncmFkZUZyb21Mb3dlclRoYW5fNF8wXzkxKCkKClRoaXMgZnVuY3Rpb24gaXMgb25seSBleGVjdXRlZCBpZiB0aGUgaW5zdGFsbGVkIG1vZHVsZSB2ZXJzaW9uIGlzIHNtYWxsZXIgdGhhbiA0LjAuOTEuCgpteSAkUmVzdWx0ID0gJENvZGVPYmplY3QtPkNvZGVVcGdyYWRlRnJvbUxvd2VyVGhhbl80XzBfOTEoKTsKCj1jdXQKCnN1YiBDb2RlVXBncmFkZUZyb21Mb3dlclRoYW5fNF8wXzkxIHsgICAgIyMgbm8gY3JpdGljCiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hhbmdlIGNvbmZpZ3VyYXRpb25zIHRvIG1hdGNoIHRoZSBuZXcgbW9kdWxlIGxvY2F0aW9uLgogICAgJFNlbGYtPl9NaWdyYXRlQ29uZmlncygpOwoKICAgIHJldHVybiAxOwp9Cgo9aGVhZDIgQ29kZVVuaW5zdGFsbCgpCgpydW4gdGhlIGNvZGUgdW5pbnN0YWxsIHBhcnQKCiAgICBteSAkUmVzdWx0ID0gJENvZGVPYmplY3QtPkNvZGVVbmluc3RhbGwoKTsKCj1jdXQKCnN1YiBDb2RlVW5pbnN0YWxsIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgcmV0dXJuIDE7Cn0KCj1oZWFkMSBQUklWQVRFIElOVEVSRkFDRQoKPWhlYWQyIF9GaXhEYXRhYmFzZVR5cG8oKQoKICAgIG15ICRSZXN1bHQgPSAkQ29kZU9iamVjdC0+X0ZpeERhdGFiYXNlVHlwbygpOwoKPWN1dAoKc3ViIF9GaXhEYXRhYmFzZVR5cG8gewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGZpeCB0aGUgQ29sdW1uU2VwZXJhdG9yIHR5cG8gKGNvcnJlY3QgaXMgQ29sdW1uU2VwYXJhdG9yKQogICAgcmV0dXJuIGlmICEkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKS0+RG8oCiAgICAgICAgU1FMID0+ICJVUERBVEUgaW1leHBvcnRfZm9ybWF0ICIKICAgICAgICAgICAgLiAiU0VUIGRhdGFfa2V5ID0gJ0NvbHVtblNlcGFyYXRvcicgIgogICAgICAgICAgICAuICJXSEVSRSBkYXRhX2tleSA9ICdDb2x1bW5TZXBlcmF0b3InIiwKICAgICk7CgogICAgcmV0dXJuIDE7Cn0KCj1oZWFkMiBfTWlncmF0ZUNvbmZpZ3MoKQoKY2hhbmdlIGNvbmZpZ3VyYXRpb25zIHRvIG1hdGNoIHRoZSBuZXcgbW9kdWxlIGxvY2F0aW9uLgoKICAgIG15ICRSZXN1bHQgPSAkQ29kZU9iamVjdC0+X01pZ3JhdGVDb25maWdzKCk7Cgo9Y3V0CgpzdWIgX01pZ3JhdGVDb25maWdzIHsKCiAgICAjIGNyZWF0ZSBuZWVkZWQgb2JqZWN0cwogICAgbXkgJENvbmZpZ09iamVjdCAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyk7CiAgICBteSAkU3lzQ29uZmlnT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlN5c0NvbmZpZycpOwoKICAgIG15IEBOZXdTZXR0aW5nczsKCiAgICAjIG1pZ3JhdGUgTmF2QmFyIG1vZHVsZXMKICAgICMgZ2V0IHNldHRpbmcgY29udGVudCBmb3IgTmF2QmFyIG1vZHVsZXMKICAgIG15ICRTZXR0aW5nID0gJENvbmZpZ09iamVjdC0+R2V0KCdGcm9udGVuZDo6TmF2aWdhdGlvbk1vZHVsZScpOwoKICAgICMgdXBkYXRlIG1vZHVsZSBsb2NhdGlvbgogICAgJFNldHRpbmctPnsnQWRtaW5JbXBvcnRFeHBvcnQnfS0+e01vZHVsZX0gPSAiS2VybmVsOjpPdXRwdXQ6OkhUTUw6Ok5hdkJhcjo6TW9kdWxlQWRtaW4iOwoKICAgICMgQnVpbGQgbmV3IHNldHRpbmcuCiAgICBwdXNoIEBOZXdTZXR0aW5ncywgewogICAgICAgIE5hbWUgICAgICAgICAgID0+ICdGcm9udGVuZDo6TmF2aWdhdGlvbk1vZHVsZSMjI0FkbWluSW1wb3J0RXhwb3J0JywKICAgICAgICBFZmZlY3RpdmVWYWx1ZSA9PiAkU2V0dGluZy0+eydBZG1pbkltcG9ydEV4cG9ydCd9LAogICAgfTsKCiAgICAjIFdyaXRlIG5ldyBzZXR0aW5nLgogICAgJFN5c0NvbmZpZ09iamVjdC0+U2V0dGluZ3NTZXQoCiAgICAgICAgVXNlcklEICAgPT4gMSwKICAgICAgICBDb21tZW50cyA9PiAnSW1wb3J0RXhwb3J0IC0gcGFja2FnZSBzZXR1cCBmdW5jdGlvbjogX01pZ3JhdGVDb25maWdzJywKICAgICAgICBTZXR0aW5ncyA9PiBcQE5ld1NldHRpbmdzLAogICAgKTsKCiAgICByZXR1cm4gMTsKfQoKMTsKCj1oZWFkMSBURVJNUyBBTkQgQ09ORElUSU9OUwoKVGhpcyBTb2Z0d2FyZSBpcyBwYXJ0IG9mIHRoZSBPVFJTIHByb2plY3QgKGh0dHA6Ly9vdHJzLm9yZy8pLgoKVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoR1BMKS4gSWYgeW91CmRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBMPGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvZ3BsLTMuMC50eHQ+LgoKPWN1dAo=
Ly8gLS0KLy8gQ29weXJpZ2h0IChDKSAyMDAxLTIwMTggT1RSUyBBRywgaHR0cHM6Ly9vdHJzLmNvbS8KLy8gLS0KLy8gVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKLy8gdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoR1BMKS4gSWYgeW91Ci8vIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgovLyAtLQoKInVzZSBzdHJpY3QiOwoKdmFyIElUU00gPSBJVFNNIHx8IHt9OwpJVFNNLkFkbWluID0gSVRTTS5BZG1pbiB8fCB7fTsKCgovKioKICogQG5hbWVzcGFjZSBBZG1pbgogKiBAYXV0aG9yIE9UUlMgQUcKICogQGRlc2NyaXB0aW9uCiAqICAgICAgVGhpcyBuYW1lc3BhY2UgY29udGFpbnMgdGhlIHNwZWNpYWwgbW9kdWxlIGJlaGF2aW91cnMgZm9yIElUU00gU2VydmljZSBab29tLgogKi8KIElUU00uQWRtaW4uSW1wb3J0RXhwb3J0ID0gKGZ1bmN0aW9uIChUYXJnZXROUykgewoKICAgIC8qKgogICAgICogQG5hbWUgSW5pdAogICAgICogQG1lbWJlcm9mIEFkbWluLkltcG9ydEV4cG9ydAogICAgICogQGZ1bmN0aW9uCiAgICAgKiBAZGVzY3JpcHRpb24KICAgICAqICAgICAgVGhpcyBmdW5jdGlvbiBpbml0aWFsaXplcyBhY3Rpb25zIGZvciBJVFNNIFNlcnZpY2UgWm9vbS4KICAgICAqLwogICAgVGFyZ2V0TlMuSW5pdCA9IGZ1bmN0aW9uKCkgewoKICAgICAgICB2YXIgJE5leHRCdXR0b24sICRGaXJzdENvbHVtbjsKCiAgICAgICAgaWYgKENvcmUuQ29uZmlnLkdldCgnVGVtcGxhdGVFZGl0NCcpKSB7CgogICAgICAgICAgICAvLyBmaW5kIHRoZSBuZXh0IGJ1dHRvbiBhbmQgZ2V0IHRoZSBmaXJzdCBjb2x1bW4gZHJvcGRvd24KICAgICAgICAgICAgJE5leHRCdXR0b24gPSAkKCJidXR0b24uUHJpbWFyeVtuYW1lPSdTdWJtaXROZXh0QnV0dG9uJ10iKS5maXJzdCgpOwogICAgICAgICAgICAkRmlyc3RDb2x1bW4gPSAkKCcjT2JqZWN0XFw6XFw6MFxcOlxcOktleScpOwoKICAgICAgICAgICAgLy8gaGFuZGxlIGNoYW5nZXMgdG8gdGhlIGZpcnN0IGNvbHVtbiBzZWxlY3RvcgogICAgICAgICAgICAkRmlyc3RDb2x1bW4uYmluZCgnY2hhbmdlJywgZnVuY3Rpb24gKCkgewoKICAgICAgICAgICAgICAgIC8vIGNoZWNrIGlmIHRoZXJlIGlzIGF0IGxlYXN0IG9uZSBjb2x1bW4gd2l0aCBhIHZhbHVlCiAgICAgICAgICAgICAgICBpZiAoJEZpcnN0Q29sdW1uLnZhbCgpKSB7CiAgICAgICAgICAgICAgICAgICAgLy8gd2UgcmVtb3ZlIHRoZSBkaXNhYmxlZCBhdHRyaWJ1dGUKICAgICAgICAgICAgICAgICAgICAkTmV4dEJ1dHRvbi5yZW1vdmVBdHRyKCJkaXNhYmxlZCIpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgLy8gd2UgYWRkIHRoZSBkaXNhYmxlZCBhdHRyaWJ1dGUKICAgICAgICAgICAgICAgICAgICAkTmV4dEJ1dHRvbi5hdHRyKCJkaXNhYmxlZCIsICJkaXNhYmxlZCIpOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgfSkudHJpZ2dlcignY2hhbmdlJyk7CgogICAgICAgICAgICAvLyBzZXQgdGhlIGhpZGRlbiBmaWVsZCB0byBkZWxldGUgdGhpcyBjb2x1bW4gYW5kIHN1Ym1pdCB0aGUgZm9ybQogICAgICAgICAgICAkKCcuRGVsZXRlQ29sdW1uJykudW5iaW5kKCdjbGljaycpLmJpbmQoJ2NsaWNrJywgZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAkKHRoaXMpLmNsb3Nlc3QoJ3RkJykuZmluZCgnaW5wdXRbdHlwZT0iaGlkZGVuIl0nKS52YWwoMSk7CiAgICAgICAgICAgICAgICAkKHRoaXMpLmNsb3Nlc3QoJ2Zvcm0nKS5zdWJtaXQoKTsKICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgICQoJyNNYXBwaW5nQWRkQnV0dG9uJykuYmluZCgnY2xpY2snLCBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgICAkKCdpbnB1dFtuYW1lPU1hcHBpbmdBZGRdJykudmFsKCcxJyk7CiAgICAgICAgICAgICAgICAkKCdpbnB1dFtuYW1lPVN1Ym1pdE5leHRdJykudmFsKCcwJyk7CiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgJCgnI1N1Ym1pdE5leHRCdXR0b24nKS5iaW5kKCdjbGljaycsIGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICAgICQoJ2lucHV0W25hbWU9TWFwcGluZ0FkZF0nKS52YWwoJzAnKTsKICAgICAgICAgICAgICAgICQoJ2lucHV0W25hbWU9U3VibWl0TmV4dF0nKS52YWwoJzEnKTsKICAgICAgICAgICAgfSk7CiAgICAgICAgfQoKICAgICAgICBpZiAoQ29yZS5Db25maWcuR2V0KCdUZW1wbGF0ZU92ZXJ2aWV3JykpIHsKCiAgICAgICAgICAgICQoJ2J1dHRvbi5CYWNrJykuYmluZCgnY2xpY2snLCBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgICBsb2NhdGlvbi5ocmVmID0gQ29yZS5Db25maWcuR2V0KCdCYXNlbGluaycpICsgQ29yZS5Db25maWcuR2V0KCdCYWNrVVJMJyk7CiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgQ29yZS5Gb3JtLlZhbGlkYXRlLkFkZE1ldGhvZCgiVmFsaWRhdGVfTnVtYmVyQmlnZ2VyVGhhblplcm8iLCBmdW5jdGlvbihWYWx1ZSkgewogICAgICAgICAgICAgICAgdmFyIE51bWJlciA9IHBhcnNlSW50KFZhbHVlLCAxMCk7CiAgICAgICAgICAgICAgICBpZiAoaXNOYU4oTnVtYmVyKSkgewogICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZiAoTnVtYmVyID4gMCkgewogICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwoKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICBDb3JlLkZvcm0uVmFsaWRhdGUuQWRkTWV0aG9kKCJWYWxpZGF0ZV9OdW1iZXJJbnRlZ2VyIiwgZnVuY3Rpb24oVmFsdWUpIHsKICAgICAgICAgICAgICAgIHJldHVybiAoVmFsdWUubWF0Y2goL15bMC05XSskLykpID8gdHJ1ZSA6IGZhbHNlOwoKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICBDb3JlLkZvcm0uVmFsaWRhdGUuQWRkUnVsZSgiVmFsaWRhdGVfTnVtYmVyQmlnZ2VyVGhhblplcm8iLCB7IFZhbGlkYXRlX051bWJlckJpZ2dlclRoYW5aZXJvOiB0cnVlIH0pOwogICAgICAgICAgICBDb3JlLkZvcm0uVmFsaWRhdGUuQWRkUnVsZSgiVmFsaWRhdGVfTnVtYmVySW50ZWdlciIsIHsgVmFsaWRhdGVfTnVtYmVySW50ZWdlcjogdHJ1ZSB9KTsKICAgICAgICAgICAgQ29yZS5Gb3JtLlZhbGlkYXRlLkFkZFJ1bGUoIlZhbGlkYXRlX051bWJlckludGVnZXJCaWdnZXJUaGFuWmVybyIsIHsgVmFsaWRhdGVfTnVtYmVySW50ZWdlcjogdHJ1ZSwgVmFsaWRhdGVfTnVtYmVyQmlnZ2VyVGhhblplcm86IHRydWUgfSk7CgogICAgICAgIH0KCiAgICB9OwoKICAgIENvcmUuSW5pdC5SZWdpc3Rlck5hbWVzcGFjZShUYXJnZXROUywgJ0FQUF9NT0RVTEUnKTsKCiAgICByZXR1cm4gVGFyZ2V0TlM7Cn0oSVRTTS5BZG1pbi5JbXBvcnRFeHBvcnQgfHwge30pKTsK
LyoKQ29weXJpZ2h0IChDKSAyMDAxLTIwMTggT1RSUyBBRywgaHR0cHM6Ly9vdHJzLmNvbS8KClRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCnRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQpkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwtMy4wLnR4dC4KKi8KCi8qKgogKiBAcGFja2FnZSAgICAgU2tpbiAiRGVmYXVsdCIKICogQHNlY3Rpb24gICAgIEltcG9ydCBFeHBvcnQgU2NyZWVuCiAqLwoKQG1lZGlhIHNjcmVlbixwcm9qZWN0aW9uLHR2LGhhbmRoZWxkIHsKCi8qKgogKiBAc3Vic2VjdGlvbgogKi8KCgouTWFwSGVhZGVyUm93IGxhYmVsIHsKICAgIGNvbG9yOiAjOTI5MjkyOwp9CgouTWFwSGVhZGVyUm93IC5IZWFkZXIsCi5NYXBIZWFkZXJSb3cgLkZpZWxkIHsKICAgIGRpc3BsYXk6IGlubGluZTsKICAgIG1hcmdpbi1yaWdodDogMTVweDsKICAgIHBhZGRpbmctbGVmdDogMnB4Owp9CgpidXR0b24uQXJyb3dVcCwKYnV0dG9uLkFycm93RG93biB7CiAgICBoZWlnaHQ6IDE2cHg7CiAgICB3aWR0aDogMTZweDsKICAgIHBhZGRpbmc6IDFweDsKICAgIG1hcmdpbi10b3A6IDA7CiAgICBtYXJnaW4tYm90dG9tOiAxcHg7CiAgICBib3JkZXItc3R5bGU6IG5vbmU7CiAgICB0ZXh0LWluZGVudDogLTk5OTlweDsKICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7CiAgICBjdXJzb3I6IHBvaW50ZXI7Cn0KCmJ1dHRvbi5BcnJvd1VwOmFjdGl2ZSwKYnV0dG9uLkFycm93RG93bjphY3RpdmUgewogICAgbWFyZ2luLXRvcDogMXB4OwogICAgbWFyZ2luLWJvdHRvbTogMDsKfQoKYnV0dG9uLkFycm93VXBbZGlzYWJsZWQ9ImRpc2FibGVkIl06YWN0aXZlLApidXR0b24uQXJyb3dEb3duW2Rpc2FibGVkPSJkaXNhYmxlZCJdOmFjdGl2ZSB7CiAgICBtYXJnaW4tdG9wOiAwcHg7CiAgICBtYXJnaW4tYm90dG9tOiAxcHg7Cn0KCmJ1dHRvbi5BcnJvd1VwIHsKICAgIGJhY2tncm91bmQ6IHVybCguLi9pbWcvaWNvbnMvaW1wb3J0ZXhwb3J0X2Fycm93X3VwLnBuZyk7Cn0KCmJ1dHRvbi5BcnJvd1VwW2Rpc2FibGVkPSJkaXNhYmxlZCJdIHsKICAgIGJhY2tncm91bmQ6IHVybCguLi9pbWcvaWNvbnMvaW1wb3J0ZXhwb3J0X2Fycm93X3VwX2Rpc2FibGVkLnBuZyk7CiAgICBjdXJzb3I6IGRlZmF1bHQ7Cn0KCmJ1dHRvbi5BcnJvd0Rvd24gewogICAgYmFja2dyb3VuZDogdXJsKC4uL2ltZy9pY29ucy9pbXBvcnRleHBvcnRfYXJyb3dfZG93bi5wbmcpOwp9CgpidXR0b24uQXJyb3dEb3duW2Rpc2FibGVkPSJkaXNhYmxlZCJdewogICAgYmFja2dyb3VuZDogdXJsKC4uL2ltZy9pY29ucy9pbXBvcnRleHBvcnRfYXJyb3dfZG93bl9kaXNhYmxlZC5wbmcpOwogICAgY3Vyc29yOiBkZWZhdWx0Owp9Cgp9IC8qIGVuZCBAbWVkaWEgKi8K
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAZlJREFUeNqkUztLA0EQnr3bvEhhI9FC09gJInJiZbAQREHUWhTtbK8ULEWwFVLZaJE/YKWFgn2SQgxBgjYSIoYkEsxxuec6c/FxCXmAGZjbmdmZ7+a1TAgBw5AEQxL3K7OnjxAMhyEQCkEgGARJllfJ7jrOjWWaYBkGmM0mPBzOdAdoIyF2MFD9lkfxmxqYgT/Ysix1fzOukHp59apCq1epgT0QFGya6u56XMnnG0C8vTahkI3u+gJ4wYah7m1NKcWiBrregFqtArlcCTaWxhW66wRpKwEdEjTW5EUmS/riXEzhXMB9upSFdMnzYYwl/KXwjgwOsHEgXBds285oQgYHAQ1dB875PJMkmkz/Jjq2DbqmeXJFDoHDwAMwUI9Eo/0BtHod9EbjVy/zKDgugIkARHSy52uUFroDFM9WgI9NQ2T5qJUBj2AJfwD63QnY73mUznuPkRy022MwcfNsJnlMMtlawYMXadItP8Wst1yhmmz9SVQLBbTRUn0iv1CrfpyZ/zXiiOgYQY72WHDq5QfGuF0B/kNfAgwAlIbWNoRkTzIAAAAASUVORK5CYII=
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAQAAAC1+jfqAAAAAXNSR0IArs4c6QAAAAJiS0dEAP+Hj8y/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH2goUEigB30KkogAAAMpJREFUKM+lkT0OAWEQhp/9ESJKF5FPK1oSCQfYXvvVDuAcCola5w5sKdkL6EQhYv+NYpddSyi8xUwxT2bemTGE7zJ/1LGzNKNBnRrWANJNTEjAvAzkclINtFm+dQAQJ9ZjBWstFIhZlCM9Uh4eQxVpcSqAOKGeqAM+J/b0VfhE8hFRT1i40FEWWxfA6GVjckCmKTeSXcoNH7trYlVNJlwBQQiAZhU4c8k6IfiAT+sVOD52AQJ4xsJk6VrRp1PHWXJXgOGWAePvb94BXKRFykgCmkUAAAAASUVORK5CYII=
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAZBJREFUeNrEU79Lw0AUfpemhZI4CIpCJ92cHE4HJ0HEQcFRQdShIJ0E/5SCOBSkgxZE7CS4iIt06NIMnVxUcKhWCJb+iPl1l/gu1ppKKkIHH1zu3r33ffnu3Tvi+z4MYxIMaXLYWcy/9taEkBxOtOtqqDTzFbtNT0QTeIyFXbq5kgoIzq9rf1PgOk5fsNVyQZTo5/5AgqauQ1JVe75puuB5AI5lfe91OvidiiYwms0gOakogd9ovYPjuuCY5ifYMMC17cEKhDEEGO02yLIMNYsB9wjYSMCwPh7nvx8BK51DzZSjbo5E9biCBBAQoFW6ORpOmegi2nYJEyhNr9EHPOo9qvXAB3V1iY4mAF7OrjS83tLARkJwwbWsbPmoqCkJCXQmwRuPQVyW4Clf1ERM5IQxJNzK6vwWSmcQm1nfxv2Dsb0dyjHcOD4Vf87yu8uCVb2AMKaPAJPEJK5gRF7Y3yCTs7uBsnr1hJUPi7gUd9j2Q6AognEcKRwxMr08FxA83lS6KaLXnxHjRRL8y2v8EGAAqEvNnH+aSSAAAAAASUVORK5CYII=
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAQAAAC1+jfqAAAAAXNSR0IArs4c6QAAAAJiS0dEAP+Hj8y/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH2goUEig6bklNhgAAAMlJREFUKM+lkT0KAjEQhb9IFEE9TToP4BU8gq2exG23FAKCYCmIra25iYL4w/6asVhddlW0cJo3yXy8CS9K+F6NH3N0IVMAVIgBnIwAJlXgVogZGNh8ckgfxzNS9jXgQAeACE8MwLUOnIjpACcyYuBa+uinVc4ZzQVPRI5/XSGhN54cQYhhB+IYVYBkK2ZojkR4+qbNyqltLSixSTBzLRIyNEuXBGJfkhSbBtb16LJwaTmuPBLEZszHoIKmfcvhieR70Ovqnfr7N++lLlCSshf+TwAAAABJRU5ErkJggg==