GeneralCatalog
3.3.95
OTRS AG
http://otrs.org/
GNU AFFERO GENERAL PUBLIC LICENSE Version 3, November 2007
Build for OTRS::ITSM 4 beta5.
Build for OTRS::ITSM 4 beta4.
Build for OTRS::ITSM 4 beta3.
Build for OTRS::ITSM 4 beta2.
Build for OTRS::ITSM 4 beta1.
The General Catalog package.
Das General Catalog Paket.
El paquete General Catalog.
4.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 this table 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 creadas durante la instalación serán borradas.
¡Todos los datos de esas tablas serán irrevocablemente perdidos!.
<br/>
<br/>
((enjoy))<br/>
<br/>
# 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)->CodeUpgrade();
2014-10-31 12:22:42
opms.otrs.com
H4sIAAAAAAACA+1dXW/jNhZ9n18heF5awGFEiaSocTPFdoDuLtCiRSd96YtB24yiHVkyJDkZ92F/+5KSncSSZcn68I6T6yAftmkekrrn8JLivfnhx6/LwHiQceJH4c0II3NkyHAeLfzQuxn9efvzFR/9+PHdDwtffFDfXiyWhvpEmOhnN6P7NF19uL5+fHxEwSYRaRSjwF+jRF7/VwSBuFaFrkcf3xnGywoWIhX6te2rIk1jf7ZOpRGKpbwZzcT8ixdH63Axyktty82jIIqNBxHcjN7fZY/R9baa6716jtS9Ep6cxVJ8qa7aVA/XbVP1SsbFaperKPFVkXSzKhWpqEf/fFFmWypRhULv4/t/4Pd5k7YvPNd1qKGVIOlSxJ4flnHU2AT5QFiIW5alBoO63DUd4uDdmJwONzsvXHBeuPi8cH4yXUVxGgs/LUPOoiiQIsxR70SQyPZAyVwEysaO9ctE1LI5pqZNue6eY1vt8e78NI166lL+8hMBTyWzF/uL41zeK1FRy6O/SO+nX2sGsP2A5fVvBqv/wU/8WSAP9cAP0xwAd69+00/1xSuUifrzxztaRF5b5ayx4JJKevqs4a39hUxqTG2/TEVN99ti13WjXizXdGDylwpzeAYRiI2Mt9X/9Dx7G9sLrKabeC1Hhpin/sPu2YsxiWb/kfN029nPqQgXIl4YV8at/JqOXvgmI8Nf3Ix+M/dHq9g/VZvSx9JwraInm6JjbBW7XxaQqrpns2LVsWq9CL1APlVvIuVD0IlFEOdcoSGGcTvEVI9BjaEXylSpeeYw7JUr+Ba/3f7x2SDGz+ryysco/lLhaRzhYZWwR2F6CFi/btyJpR9sVPtEmIyMJN1og1FeaP7Rf8ngQab+XLy069NbcC997/5gG17O0czce+BumPtGWG+IbTD2ValCm5w7/dUNSHkCXriUh6+jDNfL7XTTEOWg5pzGjIesSUVuPDfFriFc/mKuPQ3E6Cf5ty/jX/xQvpAkcytJuKsk4bHrDChJJuIuthgbXylloo5pYXviUERsx1LACJu8JfpM/j3NutG8c+X3HeUdj10TkaOFCCIWxWOqCpvUPlqUItumdKz6SghTPW/Xt3kUhzKeaktIqs3MLLXk4HunACunW06LzC57HEJ/dUDIvMey4Tx7jpZZqYcng2W6Xj2KLefjhUjuAxl6x/ph9asDf/neX8Ir6MDONbG66oCiAjYdd2wpE3baDngjSSggTfpBjtV6pFYPKqH+70VP7msU+/tzYsGucTN1OPa5U9ok1mmkfO9039GrXUW35sWfv/6iKPEpEElyYFa0u7LBtZFrUWtsuYhgzAZkg0LiTo5kM8wm2HKQbdExxchibZFlIJfTfBYZupMZVI2g2zayaQ96nmGVHOqi6mI1TfcAVtgN3VuveFKNrAimc7UWDSLv4HLlFKwklbGMtGVXIXaGUB7v8oBg9Fa/mKnPqnV2Z/ZXDdF6tYplkkyf3kgGh4pW6iqnSlkGg9ptRDXsVLZ/0QmoYZe6A23tbbCRe4zF6gwXKIMRd4qf0/m9KKnpk5YSp62rnw3TNHNVDzuUzxhmN4xUeF7d/Nz+wjfz7HHBs7eHXKjkEO0Q7vwgqEfYvxt4+gbbsH0Io3ipZqnCJlh5A2werZU3GRuhfCzvg33K32zpFm5nhfo2hP5ytk6MZRRGRtBzK1ZRsFlG8eren9c3RLcgWYm57LkRc+2r6j8bj4Xel+x9LJ6uyDfSnp041Tai8S5tS4bUOpYYufvaRfqxxgbAtrv/6IGMDVB5H4beBGd/WGmvhl2/Xuhut0NhVHuFxRsx62XwVLj+hkzpoEdhMeAversBU1jTlKHCtDcsNdTro2C9IZUXU8NhZQ61H/jppp8bIM3Xbw3PQbQYPs3QaTKPDttGa7iKeztn4UxhSyBXobPR6EHEennynXKvvwc+AZ8un0/6faAP0Afo04o+d+twrjfGhL5SwCPgEfCoFY/0WZ/F9IwLomQpggBWRUCfV0Gf3V2gs89AFsxAQKHXQaFYilROU/+M66GFQgT2AHteDXtmG9jRBuoAdU6izr0IPZh4gD3AnvbsgYkHqPOKqHPS8ffnw5nXNQfhlitFPTnUGc5d/cl+kHTjwJuKaGDSOfTO4sPGA2cAJjKdCSYEYa6jPhFxv/144H/mN9M/HTleD9HA/UUDFw0R4oEvNh6YdhYl4iLC8Jg7iLG2Jw2bxQFyxLjLs8hgl9vccScanDI25hyZxLWGjAyu6uaBmD2MmI352FW/SSHLTLEoRwQTR4cKO8w+Xqurw7ywDhU2bduyCIdYYYgVPkusMOuqEYSNCRlQGQhFLh0TW/2c6CBFHR9JGDLbR2I2ig4udKtcgLsNCqi278VtVsddlor2HgTcMNC3L0noMwj4SUvCUGYnWZKSyuzeMdRSe6G9NWXgaZSF/xrP7ypuWeWUQ4VaT6TX71GwqZiAnc7kcgYmV5YayNL0Yja3JsRBpiIb0eHHvH1EQwN6OTXsIbR1z2W4mIo4jh6PiLfVseppnYbvZTxrB1E729F+54mKpS3vasS2gxwrtyqHDmjMOxxbrW4dOlG/HZbjMqct8DkXuutEDb3xnb/4/o0tcvHZF7kVJjnYWrcYuAlr3b79WPci/VgX8YvwY10lpQ392GJR8GOH8WNZ335sxfSPOye6xDZBDuE6xRu16aB73DskhlxiWpMXyIy3RT6nC/DGJn6zGO5rksG3t6uMEeb+b3nurxKn7ikvbQuZprIHgly77Zq3oThtkWxkEqz3tykimI5diijGzmUk5v3w4d+3n381yJu7DUeYSwixiZpXOCb7mUSH0akKuwSdukSdsnrRKZq5NpwPr1MaSemSg7nSKRsRrrPnIkv9fTEHBoy3eWIA67uNXO/qYlNdRqvrvfyGUnXINEGqLlGq7D6kimh74AgPL1UZknLmGdfrPYaw62hkm7kX8L8OLBOTK9O9whRWfueQqYNmCTJ1iTLV/cQlNhEbExPZwyZ1znFsFzmYsckTKmm9SwobUq9Klg6bIYjSWUWpzc68WbEzz3vZmT+e1B53PtvpIJe5lI6pWua5bMg7XwoJ75AIIxOCtXdGx46DCGmL3CyrfS+dfJNZ7W9lkkIq+4ap7NsnyoZM9pDJHjLZQyZ7yGQPmezbnLSFTPaQyR4y2UMme8hkD5nsIf0CZC6BTPbAJ+DTt8snyGQP9AH6tKYPZLIHHgGPIJM90AfoA5nsgUJAIchkDwmFgT1vlD2QUBioA9SBTPbAHmCPAZnsgTpAncEjDV57JnvcOSOsRRAjhI0ZQ2TYyIInJIpcE5PJC2TWOrIAwqteU3hVpTFCgNXFBFhh2jnCKn8eiI2MP77Ln6hvLxbLj+/+B3jPEk99qAAA
iVBORw0KGgoAAAANSUhEUgAABhUAAAQHCAIAAAB0kX8BAAAABmJLR0QA/wD/AP+gvaeTAAAgAElEQVR4nOzdaXRc5Z0n/ltSSbZkecHIm7zhBQMONgSwGQzOgjsJkKZjCIQ0GaYDxE0nM0yns0xykjndOSE5fTKZ0z3TaTjHYTlpHBZDYmKSsCXQNI4XMGKMAwZjC29Ysi3ZsmVLtpaq+r+o/ItCskqlxbrXqs/nBafq3lv1/G6VZOp+9XueiqVSqQAAAAAAuhEPuwAAgGhJJBKNjY2xWOzMM88MuxYAgEgoCrsAAIBoSedHR44cCbsQAICokB8BAHyA2f0AAJ3IjwAAPiCdH8VisbALAQCICusfAQCcRFj5USqVSgdYRUX+zgcARIXPJQAAHxBu/9Hhw4dramrq6+tDGR0A4KTkRwAAHxDu+kdmzwEAESQ/AgA4iRDnr4UyLgBADvIjAIAPiEIHkP4jACBS5EcAAB9g/hoAQCfyIwCAkwh3/pr8CACIFPkRAMAHhJvgWP8IAIgg+REAwAdEIcHRfwQAREo87AIAAKKltLT0jDPOKC0tDWV089cAgAiSHwEAfMDw4cOHDx8e1ujyIwAggsxfAwCIkCjMngMA6ER+BAAQIfqPAIAIkh8BAESO/AgAiBT5EQBAhOg/AgAiSH4EABAh1j8CACJIfgQAECH6jwCACJIfAQBEjvwIAIgU+REAQIToPwIAIigedgEAANFSX19/+PDhsWPHnnnmmYM/uvWPAIAI0n8EAPAB4SY4+o8AgAjSfwQA8AHjxo2rrKwMK8EpKioqKiqSHwEAkRLTIw0AAABADuavAQAAAJCL/AgAAACAXORHAAAAAOQiPwIAAAAgF/kRAAAAALnIjwAAAADIRX4EAAAAQC7xsAsAAIiWo0ePdnR0jBgxorS0NOxaAAAiQX4EAPABhw8fPnHiRGlp6eDnR8lkcv/+/UEQTJo0aZCHBgDIQX4EAPABqVQqCIJYLDb4QyeTyWPHjg3+uAAAucmPAAA+IJ0fhaKoqGj8+PFhjQ4A0B35EQDASYTSf1RUVDR69OjBHxcAIDffvwYA8AEhzl8DAIgm+REAwAeEOH8NACCa5EcAAB+g/wgAoBP5EQDASciPAAAy5EcAAB9g/hoAQCfyIwCADzB/DQCgE/kRAMBJyI8AADLiYRcAABAtIfYfJZPJRCIRi8XicR/SAIAI0X8EAPC+cBc/amlp2blzZ11dXYg1AAB0JT8CADiJUPqPLL0EAEST/AgA4H2Z/qMQQxz5EQAQNfIjAID3hTt/Tf8RABBN8iMAgJMIcf4aAEDUyI8AAN4XbgeQ/iMAIJrkRwAA7zN/DQCgK/kRAMD79B8BAHQVD7sAAIAIKS4urqyslB8BAGSTHwEAvK+4uPiMM84Itwb5EQAQNeavAQBEhf4jACCa5EcAAFEhPwIAokl+BAAQFfIjACCa5EcAAFEhPwIAokl+BAAQFen8CAAgauRHAABRof8IAIgm+REAQFTIjwCAaJIfAQC8L5lMtre3JxKJUEaXHwEA0SQ/AgB439GjR3fu3Ll///5QRpcfAQDRJD8CAHhfuAmO/AgAiKZ42AUAAETImDFjxowZE9boJSUlqVSquLg4rAIAAE4q5mtiAQAAAMjB/DUAAAAAcpEfAQAAAJCL/AgAAACAXORHAAAAAOQiPwIAAAAgF/kRAAAAALnIjwAAAADIJR52AQAAEdLU1HTixImKiory8vKwawEAiAr9RwAA72tubj5y5EhbW9vgD51KpXbv3r179+5UKjX4owMA5KD/CACgs1gsNviDplKp1tbWwR8XAKBH8iMAgPele39CyY9isdikSZPCGh0AIAf5EQDA+8LNjyoqKgZ/XACAHln/CADgfdYeAgDoSn4EAPC+EPuPAAAiS34EANCZ/AgAIJv8CADgffqPAAC6kh8BALxPfgQA0JX8CADgfdbPBgDoSn4EAPA+/UcAAF3Fwy4AACBCQsyPEolEa2trUVHR8OHDB390AIAc9B8BAHQWSn7U0tKyd+/ehoaGwR8aACA3+REAwPtCn79m6hwAEEHyIwCA94WYH4UeXQEAdEd+BADwvhC/f01+BABElvwIAOBPMuGR/iMAgGzyIwCAzkLMjwAAIkh+BADwJ/qPAABOSn4EAPAn8iMAgJOKh10AAEBUFBUVTZo0KazR5UcAQGTJjwAA/iQWi1VUVIQ1uvwIAIgs89cAACJEfgQARJD8CAAgEvQfAQCRJT8CAIgE+REAEFnyIwCASJAfAQCRJT8CAIgE+REAEFnyIwCASEjnRwAAESQ/AgCIhHR+VFTk4xkAEDnxsAsAAIiKRCLR0dERi8VKS0sHf3T9RwBAZPkDFwDAn7S0tOzevbu+vj6U0a1/BABElvwIAOBPYrFYSUlJPB5Og7b8CACILPPXGGq+973vZf4LAL1SUVFRUVER1ujl5eUhplcAMMhOl2u306XOUy1aH1Da2tpeffXVd955p76+/sSJE8OHD6+srDznnHMuueSS7GUI8n/bvve973U6uKSkZMyYMbNnz7788su7fkBMJpPV1dVvvPHGgQMHWltbhw0bVllZedZZZ33oQx+aOHFib8/l7rvvPnLkSP4F5zjMTyoADHmVlZVhlwBAJJw4caK6unr79u319fXHjx8fNmzYuHHj5syZc/HFFw8fPjzs6k65jo6O119//Z133qmrq2tpaSkuLh47duycOXMWLlw4YsSIsKsrXBHKj3bt2vX4448fO3Yss6W5ubm5uXnXrl1r16793Oc+N3369P6P0t7eXl9fX19f/8c//vH2228/44wzMrva2tpWrFixZ8+ezJbjx4/v2bNnz549a9as6W2C8/vf/76pqan/BQMAAFA4tm3btmrVquPHj2e2tLS07Nq1a9euXWvWrLnmmmvmz58fYnmn2nvvvff444+nWzHSOjo66urq6urq1q9ff80111x44YW9ekLdQwMlKvnRnj17HnzwwUQiUVVVdfnll0+fPr2srOz48eO7d+9eu3bt3r17H3zwwVtvvXXKlCnByd74Hn8gMruam5v37Nnz7LPPNjY2vvDCC5/97Gczx7z44ot79uwZMWLExz/+8bPPPruioqK9vb2hoWHHjh1vvPFGb09n48aNF1988auvvtqrB+Y+CwAAAIaw7du3P/zww6lUasaMGQsXLpwyZUp5eXlbW1tDQ8PWrVurq6tXrVo1hPOj995772c/+1lHR0dVVdWll146ffr0ioqKjo6OQ4cOvfPOOxs3bvzVr37V2/yIgRKJ/CiRSPzyl79MJBIXXnjhX/zFXxQV/WlV74qKirlz55577rlPPvnkpk2bfvGLX9x5553FxcX9GWvEiBHnnntueXn5Aw888O6772bvevPNN4MguP7662fNmpXeUlxcPGXKlClTpixevLhXp/Pkk0+OGDHiz/7sz/qQHwEAAFCA2tvbn3jiiVQq9dGPfvTjH/94ZntZWdnUqVOnTp16xRVXPPXUUyFWeEolEolf/OIXHR0dl1xyyTXXXJNJBuLxeFVVVVVV1aJFi4bw6UdfJPKjzZs3Hz58eNy4cddee23mRySjqKjo2muv3bt3b3rS2YBkjenFjFpbW7M3Hj16NAiCqVOn9vPJ16xZU19ff8MNN5yKianp7qR/+Id/qK6ufu211xoaGtrb2//hH/4hCIK9e/du2rRp586djY2NsVhs9OjR55xzzhVXXFFWVtb1Gb73ve9t2rRp48aN9fX1RUVFU6dOXbJkSfplef3119PbU6nU1KlTP/GJT3Rd+6mxsXHdunU1NTVNTU3xeHzSpEmXXnrpueeemzng//yf/3P48OE77rhj0qRJ6S1PPPHE66+/HgTBBRdccN1116U31tXVLV++/Iwzzvjbv/3bzGP37Nmzbt26PXv2HD9+vKysbNq0aYsWLUq3nuXzOnTV2tq6atWqrVu3FhUVXX311QsWLOjlqw4AAHDKbdq0qbm5edq0adnhUbbhw4dff/31Xbf3eIEWZF0Jvv766y+//HL6SnDatGmZK8G+PWF/Lk47SScDEydOzA6PspWWli5dujRzN59RMvN7sif6ZG73rc60fK5bgyDYtm3b2rVr6+rqUqlUZWXlxRdffPHFF5+mU+oikR9t3bo1CIL/9J/+U3e9RcXFxZdeeulvfvObrVu3Dkh+VFdXFwTBqFGjsjeOHDnyyJEj27dvnzt3bp+fub6+fs2aNbNnzz7//PP7W2X3fvvb33btbLr33nuz7zY0NDQ0NGzZsmXZsmXl5eWdDn766adffvnlzN1t27bt2rVr2bJlGzdufOWVVzLba2pq3nvvvTvuuGPs2LHZG1euXNnW1pa+29HRsWPHjh07dnzkIx+58sor0xtnzpz52muv7dixI5Mf7dixo9ONIAjSLWAzZszIbNm4ceNTTz2V/gLjIAiOHTu2ZcuWt95668///M8vvvjifF6HThobGx955JEDBw6Ul5ffeOON2WMBAABEx7Zt24Ig6O0fvPO5QMt49tln169fnz3irl277rjjjjPPPLNvT9j/i9OMTDJw0vCoq76NMiDPkOd164YNG5555pnM3dra2tra2n379uVTWwRFIj+qra0NPhgidJXemz6yP9ILjz377LNBEMybNy971/z589esWbNq1aqamppzzjln8uTJvV3aPZVKPfnkk0VFRZ/+9Kf7WWdu1dXVixYtuuiii8aOHZv51TrrrLMuvvjiadOmVVRUtLW11dbWvvDCC3v37l2zZs2nPvWpTs+wcePGyy+//KKLLho1atT+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P2bMmE7fmNZns2fPrqqqam5u3rRpU48Hv/fee8HJ1jDr5Hsnk72rv0XnlI6BO2Vh69atG/CB5syZEwTB2rVrezxy+PDhkyZNSiQSGzZsCLL6jNJB0oYNGxKJxKRJk4YPH555SDpL6vrkf/jDH4Je9vOXlJTcfPPNs2fPbm1t/fnPf/7OO+/k/1gAClaI+VEsFhs2bJhvewAoZPPnzx81alRdXV36i4DyeUj+F2h56v8T9vniNJ0M7Nu3r7vTb2tr+9WvftXbUdLHtLa2DlSdeV63pm90fcL169f3OEQ0RSI/Ki4uTq9OvWnTpvvuu+/NN988duxYIpFIL0t+//33b9q0KXPMQA16+eWXB0Gwfv36zJTOu++++/nnn9++ffuRI0c6Ojra29sPHTq0bt26xx9/PAiCuXPnDtTQp0J6zabVq1fX19e3t7cfOHBg9erVr7/++oAPtGjRovLy8tdee+2RRx6pqak5evRoMpk8ceJEbW3tunXrli9fnn1wOio6ceJELBbL/BbNmDEjFoulf3s7TV679NJLi4qKtm7d+utf//rQoUOJROLQoUOrV6/etm1bcXFx1yXccovH45///OfnzJnT0dHx6KOP/vGPf+zPiQNQCNKfVn3rAgChiMfjN954Y3Fx8auvvvrTn/70tddeO3jwYHt7ezKZbGlpeffdd1evXt3pIb26QMtH/5+wzxenxcXFN9xwQzwef/XVV++7777NmzcfOXIkkUi0trbW1dX9x3/8x//9v/830wKS/yijR48OguD//b//l71Cdn/qzPO6deHChUVFRVu2bHnqqacaGxsTiURjY+NTTz11mi6eHURk/loQBFOnTv0v/+W/PPbYY7W1tem8JtuIESNuvPHGqVOnDuCI55133hlnnHHw4MGtW7eee+65QRDU19fX19evWbPmpOV97GMfG8DRB9zHPvaxhx9+ePv27enV8tMWLlz4yiuvDOxAI0eOvPnmm1euXLl169b0xLQcZs6cmY5gJ0yYkFmLdMSIEePHj9+/f3/wwcWzgyCYOHHi1Vdf/dRTT1VXV1dXV2e2x2Kxa665Jv3r3SvxePymm256/PHH33777VWrVrW2tub4yjYACLH/CACCIJg6deoXv/jFX/ziF/v27XvyySe7HjBy5Mhrrrkm+27+F2j56P8T9ufidMqUKV/84hcff/zx2traVatW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fOELP/rRj2pqambNmjUwJwCnjP4jAGAoS6VSw4cPHz58eNiFdEv/EUEQ3HfffTNmzKioqPjc5z535MiRTvN0nnzyyUsvvbS8vHzu3LmrVq3KfmD6yGPHji1durS0tLTr3Jkcjw2yJgStWLHivPPOGzVq1F133ZXZe88999x+++1VVVWTJ09etmzZjh07Bup8169ff/XVV48ePbqsrGzx4sXPP//8nDlzehx39uzZ6WpjWTo9c39qfvTRRz/84Q+PGDHioosueuyxxzrtzf0e9ed8c8txRk888URpaWksFisrK7vkkktWrVp1/vnn57k3beHChQsXLsyzkoxOL37X9yL3u5D7p67H12rbtm2LFi2Kx+Ndf9r7M27G8uXLb7/99l69IAcOHOjz3iAIbr311uXLl/dqRAhHCgCAUL3zzjvvvPNOR0dH2IUwwGbMmLF58+bsLSf9+P3YY49dccUV27dvb2tre+ONN77xjW9kH/boo4/efPPN7777bmtr6xtvvLFkyZJnnnmm03P+zd/8zUsvvZRMJletWlVSUpL/Y9MPv+mmm66//vrq6uq2trann346s2v79u3pGw0NDd/97ndnzpzZtfg+XFA8++yz8+bNe+aZZw4ePNjW1rZr166777577NixeY6be8Q+1/zII4/ccMMNzc3NqVSqubn5hhtuWLlyZWZv7veon+eb+7xynFFJScmqVatSqVQikThw4MCKFSvGjRuX5960Sy655JJLLsnzRLItXrx47dq16dtr1679yEc+kmfNad391PX4WgVB8Od//udvvPFG15/2/oybbd68eW+++WZ3J37StykWi+U4puvev/u7v8ve8sc//vH888/vbkSIDvkRAEDIEolEIpEIuwoGXiY/6rpkT1VVVeawCy64IDtmevnll7OvP+fOnfvee+9l7r7zzjuXX3559ihBEDz22GPZd/N/bPr43/72tz2eS0dHx0mvnPuQH82fP3/Dhg15Htx13PxH7FXN55133ttvv525+/bbb5933nmZu7nfo9zyPN98nrDTGZWXl99zzz2HDx8+6cG59/bTgw8+eOutt6Zvf/GLX1yxYkV3R570Xejup67H1yoIgrq6uuy7AzJutrKysnSM2F0BPW7s8W6n/OjYsWPDhw/PXRVEQSylUxoAAE6BmTNnrl69et68eZkt6U6ETodVVFTU19eX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fvvtvXpBDhw40Oe9QRDceuuty5cv79WIAINMfgQADE3mr3G6SM/J+uY3v/n1r3+9tbV15cqVN910U/YBn/rUp+6///7a2trNmzdPmDDhz/7sz7IfuH///gceeOC666577LHH7rvvvuzHrly5cuXKlY8++ujhw4cff/zxe+6559lnn+06eh8mhaVSqcWLF69duzZ9d+3atR/5yEeyn6e7mrMr//znP/+rX/3qoYceOnjw4IIFC9K7nnvuuTvuuOOrX/3qjh07mpqaHnrooa1bt3ZaHuhrX/vavffe297env9r1eO42Z555pmuix/l1tjY2Oe9QRB84hOfePrpp3s1IsAgiw3aFGIAgMFUU1OTTCanT59eWloadi0UqJkzZ65evXrevHmTJ0+ura3N3lVVVbV3797M3Vgs9thjj914442Zu919Sk8kEvF4PLM3Fou1t7fH4/FYLNbS0lJWVpb92A996EPPPffc5MmT03e3bdt26623/uEPfxiQs1uxYsW///u/p2d13XrrrUuWLPnP//k/51NzpvLf/va311xzTaeDL7jggp/+9KeXXnppd+PGYrG6urqJEydm7ub5WuUeN1t5eXlDQ0N5eXl3BXQdsdPGXt0NgqC5ubmysvL48eM5qmJouOuuuxobG//pn/4p7EKg1/QfAQBDUCKRSCaTwWnSf3T8+PFt27bt3Lkz7EI4Vfbu3Ztp80nfyA6P0jLhUScHDhz4xje+MXfu3PLy8srKyk996lOdDshM0iwrK+u0q6amZsqUKZnJZXPmzHnttdcG4HyCIAiCG2644bnnnmtqampqavrd7353ww035F9z2klDnLfffvv888/PPXQmPOqkP+NmG5A/sed+kpMmUP0fFODUkR8BAENQevJacXHxaXFJVlRUFARBOvCCTpYuXXrttddu2bKlpaVl7969P/vZz/J/7Ny5c996661UlpaWloEqrKysbOnSpQ8//PBDDz103XXXDR8+fEBqnjFjxqZNm/pWUn/GzTZr1qz+57mJRCL/vTt27Jg9e3Y/RwQ4peRHAMAQdHotfpTOj6wqwEnt3LmzsbGxtbW1vr5+3bp1P/7xj/N/7A9+8INly5a98sorx48fb25ufu211z772c92OqZv62enLVu27N57773vvvuWLVs2UDV///vf/8pXvrJ9+/YgCJqbm996663ly5ffeuut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Wltbm5OTM2jQIA9LJePGjRs3bpyHN+JswoQJp06dkj6fOnXqoYce8jBmSXs/dR2OlSAIP/3pTy9evNj6p707/TpLTEz83//93/ZuvM3HJIqim2tal968edP5zFdffTVq1Kj2egQAv/fNN998/fXX9fX1cgcCAAC8V3/JH7Xesken0zmuHD16dGFhoePw888/d/79MyEh4dtvv3Ucfv311z/84Q+dOxIEYffu3c6HnteVrv/www87vB3pr4Ktz3chf3Tfffd99tlnHl7cul/Pe+xUzPfee+/ly5cdh5cvX7733nsdh+6fkXse3q8nDbrckVarzcrKcklGeFjaTf/93/+dnp4ufX766adzcnLau7LNp9DeT12HYyUIQk1NjfNhj/TrTKPRSGnE9gLo8GSHhy4Ppbm5OSgoyH1UAODHGhsbv/7664qKCrkDAQAA3ku0+++2we+9994HH3ywd+9e55PSTASXK0NCQm7cuKHRaKRDvV4fEhLiuCwoKMhkMjlfr9FoDAZDe206H3ZYt72QBEGora198803Dx48WFFRodVqx4wZc/To0dZXtlfdjcDAwO+++669xQgd9uumx+7ErFarGxsbHU/BaDQOHDjQMXrun1F37td9VO7v6NChQ4888ojFYlGr1f/2b/82YMCA9957LykpyZPSbjIajXFxcZcuXRIEISEhoaSkJCgoyJOY3dys4MFYuflp706/zjQaTX19vVar9SSA9qKy2WzO6/tcShsaGpzfJKXX6wcNGuTyHyYA9B82m628vNxmsw0fPtzxrwkAAIAz9j8SBEGIjY0tLS11HBYWFjqXJiQkFBUVOWfdPP89szt1U1NTZ8yYcenSJYPBUFVVtXXrVg8rdig6Ovr8+fM91a9zgqw7McfGxlZWVjoOKysrnfczdv+M3HN/v+65v6Np06aZzWaz2VxVVXXixIn58+c//PDDHpZ2k0ajSU1N3bFjx/bt29PS0py/7nfnKfTeWHnunnvuqaio6FpdB/cvonYpLS8vj42N7WaPAOC7FAqF9JeDW7duyR0LAADwUuSPBEEQVqxYsWTJkmvXrlmt1osXL27bts25dPXq1RkZGWfOnDEajXq9/ty5czNnzvSw5e7UraioaGhoMJlMN27cKCgoWLt2befuqn0rV65cvHhxSUmJIAh6vb6oqCg7Ozs9Pd3DflUqlbRrck1NzYYNG5xfaNWdmDMzM5ctWya9nb2urm7ZsmWZmZmOUvfPqDv36577Oxo0aNCJEycsFou0v2x8fLzzm7/cl0q6tn+2JCMjY9OmTZs3b87IyPA8Zvd6b6w8N3Xq1GPHjnWqikajKSgokD6fPXs2NDTUecKRS6kgCC4zmD755JNp06Z1LVoA8A+hoaGCINy6dcuPZ6YDAIBu6YU1cd6izf2zIyMj27x448aNUVFRGo3m0UcflVIYzqWHDh1KSkpSq9WDBw9esGBBZWWlo8hlJFsPrJu69lZf0ZyLjh8/Pnbs2KCgoCFDhixatKiqqqrNjrr2NI8fPz5x4sShQ4cOHDgwKSlpw4YNjh1n3Pdrt9ulXZNFURw+fPgLL7xQXV3dUzHv2LEjPj5epVLFx8fv2LHDJWb3z6jL9+s+Kvd3lJSUlJubm5iYqFQqBUFwbJjtSalk7NixXds/29FFUlJS65t1/wTd/9h4MlZtHnazX4fi4uIxY8a4nHT/mKSfSUEQwsPDdTrdp59+6lzXpVShULjsfzR69OjS0tL24gGAfqKsrOzrr7+WUkgAAAAu+t3+R55oaGgYMmSIy75F8Co8I/+WkZExadKkefPm9UbjSqWyvr4+LCxMOty5c+fx48ezs7N7oy8A8CH19fXfffddSEjI0KFD5Y4FAAB4Hdavuaqrq/v9738/f/58uQNBu3hGfu/111//85//3Dd9bdq06fe//33f9AX4iqqqKmmantyBoE8NGDBAEAS9Xu9+CzkAANA/kT8SBEEwm80rV65UKBSiKMbGxgYHBzMZwdvwjPqV8PDwkydP9k1fx44dCw8P75u+AJ+g1+sNBkN9fT35o/5GrVYHBgba7fampia5YwEAAF6H9Wt+KCoq6urVq20WRf4/9u49uInz3v/4s7pZki+yja8y4JIYSkwSKOVyhimdM0BD4ExaU0IgbdLWpR7aTC85JLSd0MOZknT6S+iZzoRTOuZWGGKCgQNJSEJCQsphwExJw6RMBofYxDZg2ZYsX3WxJEv7+2N7VNUXWb6uLb1ff3n32X32s48SbH+9z7MzZ0a+4yw+JNr9YpT6zF8D0EcoFOrq6pJlOSMjQ+0smGidnZ12u91gMBQWFqqdBQAATC46tQNg7CVaxSTR7hcAxpVGo0lPT1c7BdSRmpra2trq9/u9Xq/JZFI7DgAAmESYvwYAAAAhhNBoNCkpKUKIzs5OtbMAAIDJhfoRAAAA/k6Z3utyuUKhkNpZAADAJEL9CAAAAH9nNBpZRRsAAPRH/QgAAAD/kJqaKoTw+/1qBwEAAJMI62dj6gkEAnq9Xu0UAADEJ4vFkpKSwrdaAAAQieePMDySJEmSNAEXcjgcK1eu7LPzo48+2rp1q9Vq7X/8xYsXH3744RUrVkiSZDAYTp8+HXvrV77yFafTOea3AADAVKTRaCgeAQCAPhKuflRYWKh2hKlNluWJudAvf/nLH/zgB+FNm832/e9//8qVK7/4xS9aW1v7H19WVnbkyJEPPvhAluULFy48+eSTsbf+6Ec/eu6558bpRgBg8vN6vcFgUO0UAAAAmLwSbv7a7du31Y6Aod26deujjz46cOBAeI/Vaj148GCUUzQaTXZ2tvL1smXL3G537K3f/va3X3zxxVu3bt17771jcwMAMHXIstzc3BwMBgsKCkwmk9pxAAAAMBkl3PNHA1LmZLlcrpKSEoPB0H9+0549ezZv3my1WgsKCsrKyurq6iJPfPnll1NTU6uqql5//XWLxdLn3DfeeGPp0qVms7m4uPjUqVP9r75kyZIlS5aMLHN4KlmfzSiZI48XQhw5cuS+++5LS0t7/vnnw61XrlxZs2aNxWIxmUzLly8/f/78nDlzIk+vqalZtmyZTqeLfaxiuW5YeXn55s2bhzUgdrt9xK1CiNLS0vLy8mFdEQDiQ2dnZ29vr06nMxqNamcBAADAJEX9SIj/m5O1bdu2Z555xufzVVZWbty4MfKA1atXHzhwwGazXb9+PTc3d9WqVZEntrS0HDx4cN26dcePH9+/f3/kuZWVlZWVlceOHevo6Dhx4sSePXvefffd/lcfwaQwWZaXL19++fJlZfPy5ctf/epXI/sZLHNk8k2bNr322msVFRVOp3Px4sVK07lz57Zs2fL000/X1dV1dXVVVFTcvHmzz/JAW7du3bdvXyAQiH2shrxupHfeeaf/4kfRtbe3j7hVCPG1r33t7Nmzw7oiAMQBWZaVfyHT09MnZnk7AAAATEXShC1nM/EOHz585syZkydPCiEKCgpsNltkq9VqbWxsDG9KknT8+PENGzaENwcbmWAwqNPpwq2SJAUCAZ1OJ0mSx+MxmUyR586bN+/cuXMFBQXKZk1NTWlp6aVLl8bkBo8cOfLnP/9ZmdVVWlq6cuXKJ554IpbM4eRvvfXW2rVr+xw8f/78vXv3Ll26dLDrSpLU1NSUl5cX3oxxrKJfN5LZbG5tbTWbzYMF6H/FPjuHtSmEcLvdWVlZXq83SirEB51O53Q6LRaL2kGASaG7u7u5uVmr1X7hC1/QaPirEgAAAAaWKD8pNjY2hh/zUb6ILB4pwsWjPux2+7PPPltcXGw2m7OyslavXt3nAJ3u78tI9V824tatW9OnTw9PLpszZ861a9fG4H6EEEI8+uij586d6+rq6urqeu+99x599NHYMysGLOJ8+umn999/f/RLh4tHfYzmupHGpKwZvZMBK1CjvygATC1tbW1CCIvFQvEIAAAAUfDD4tBKSkoeeeSRGzdueDyexsbGQ4cOxX5ucXFxdXW1HMHj8YxVMJPJVFJScvTo0YqKinXr1kWuWzGazLNmzfr4449HFmk0141077331tfXj+zcsOjvEurTWldXV1RUNMorAsDU0t3d7ff7NRpNRkaG2lkweblcru7ubrVTAAAAlVE/Glp9fX17e7vP53M4HFVVVbt27Yr93BdeeKGsrOzq1ater9ftdl+7dm39+vV9jhnZ+tmKsrKyffv27d+/v6ysbKwy79y586mnnqqtrRVCuN3u6urq8vLy0tLSWM4dzXUjPfzwwx988MGwTjGZTFVVVcrXH374YVpaWuQTRtFbhRDvv//+mjVrRpYWAKYo5eGj9PR0Hj7CYFwuV1NTU2traxyveAAAAGKRcD8vzpw5s/9OZeJS5LvMIjdfffXV559/Pj09/cEHH6ysrPzFL37R55g+J0Z+sXbt2u3bt//4xz9OT0+/9957//CHP/z+97/vc/VgMDjin8nmz5+v1Wq1Wu2DDz4YuT9K5j732OetbUKIxx577OWXX96yZYvVap0+ffp3v/vdQCDwhz/8YZRjNeR1I/3whz88cOBAn52RZ/XvoaKi4l//9V8lScrOzi4pKTlz5oxer4+xVQhx6NChLVu2DJYHAOKPy+Xi4SMMKTk5Wa/Xp6SkUD8CACDBJcr62ZhyysrKVq5cuWnTpgm41quvvnrhwoXy8vIJuBZUx/rZgKKhocHv92dmZk6bNk3tLAAAAJjsEu75I0wVv/3tb//7v/97Yq61b9++3/zmNxNzLQCYDMIPH6Wnp6udBQAAAFOATu0AwMCysrIuXbo0Mdca7lpLADDVhVc+0mq1amcBAADAFMDzRwAAJBa32+3z+Xj4CAAAALGjfgQAQGJRHj5KS0vj4SMAAADEiPoRAAAJxO129/T0SJLEa9cAAAAQO+pHAAAkEKfTKYSwWCw6HWsgAgAAIFbUjwAASBQul0tZ+SgzM1PtLJiqZFmWZVntFAAAYKJRPwIAIFGEHz5i5SOMTGdnZ319fXd3t9pBAADARKN+NAVIkqR2hAFMzlQJKBAIqB0BwNTQ3d3t9/s1Gg0rH2HEQqFQb29ve3u72kEAAMBEo370D6dPnzYYDJIkpaam3nvvvd/4xjfUTqSa69evS5JEhWhIEzZKDodj5cqVfXZ+9NFHW7dutVqt/Y+/ePHiww8/vGLFCkmSDAbD6dOnY2/9yle+ojyhACDOaDQavV7Pw0cYDYvFotFo/H6/2+1WOwsAAJhQUhzPYD98+PCZM2dOnjwZubOwsLChoWHA4w0GQ2Vl5bp16yYk3d9ZrVabzTaRV4ydJI3kP4/JfEfjYWSjNFybN29etWrV448/rmzabLZf/epXCxcu3LBhQ15eXv8AX/ziFy9dupSdnS2EqKqqeuihh1wuV4ytFRUVFy9eLC8vH++bUotOp3M6nRaLRe0ggAqUlWs0Gv56hJFzOp1tbW1Go3HGjBlqZwEAABMn4epHUX7bn5hCwGS4aIxGlm0y39F4mID7vXXr1vr16z/++OPYA9x3333V1dWDHRO9VQjx4IMPnj59+t577x2D9JMP9SMAGI1gMFhXVyfL8vTp000mk9pxAADABOEvkEIIUVhYqMxCkiKEW2PZdLlcJSUlBoOh/2ygK1eurFmzxmKxmEym5cuXnz9/fs6cOUKIoqKiKBdV1NTURJkhdezYsS996UvJyckLFy48fvx4ZNOQqfbs2bN582ar1VpQUFBWVlZXVxf7cA2WKvodDbZn9uzZkZ0sWbJkyZIlsYcZsPP+14p+v+GDjxw5ct9996WlpT3//PPh1sE+wcgBWbZsmU6nG+44R79uWHl5+ebNm4c1IHa7fcStQojS0tI4fv4IADAaWq02NTVVCNHR0aF2FgAAMHGoHwkhRENDg/L8hRwh3Nrn0YwBN7dt2/bMM8/4fL7KysqNGzeGW8+dO7dly5ann366rq6uq6uroqLi5s2byuIytbW1US6qmD179mDPthw7dux//ud/Ll++7Ha7L126dOLEicgSUvRUQojVq1cfOHDAZrNdv349Nzd31apVsQ/XYKmi31F3d/ecOXMiKxddXV1z5879y1/+EtnJyN4KLMvy8uXLL1++rGxevnz5q1/9amQ/0e9XOXLTpk2vvfZaRUWF0+lcvHix0hTlEwzbunXrvn37AoHAcMc5ynUjvfPOO/0XP4ou+sqmQ657+rWvfe3s2bPDuiIAIHEoS7C7XC6/3692FgAAMEHieapR5Py1goKCPovyWK3WxsbGyD2xT23rv3n8+PENGzb0b50/f/7evXuXLl06WMhYZj8NeExxcfHp06e/+MUvKps3b95ct27djRs3YknVRzAY1Ol0/VujZxusNcpZ+/btu3bt2h//+Edl87nnnsvKytq6detglxiWI0eO/PnPfz548KAQorS0dOXKlU888cSARw54v5IkvfXWW2vXru1zcCyfYFNTU15eXnhzWOM82HUjmc3m1tZWs9k8WIAhP7thbQoh3G53VlaW1+uNkmrqYv4aAIxec3Nzd3d3ampq+DsgAACIb4lSPwob2fpHI/5tPCkpqa2tLTk5ebCQI64fGQyGzs7O8LoDXq83PT3d5/PFksput7/00ktvv/12fX292WxesGDB+fPnJ6B+FAwGFy1aVFFRUVxcfOfOnbVr13700UcGg2HQOx8Or9c7e/ZspYJWXFxcW1trNBqVpljud7DYw/0EhzvOsfwHYDKZnE7nKOtHoVAocn5flFYhhNvtzs7O9ng80YNNUdSPAGD0/H6/8kKSwsLCsfpWDgAAJjPmrw1ba2tr7AfPmjVrsGWPBxRZAIquqKgo8kVyDQ0Nsa92XFJS8sgjj9y4ccPj8TQ2Nh46dCj2hMMVeUdarfbFF1/ctm2bEGL79u07duwYw584TSZTSUnJ0aNHKyoq1q1bFy4eidHd73A/wUhjNc733ntvfX39yM4NCwaDsbfW1dUVFRWN8ooAgDhmMBhSUlKEEG1tbWpnAQAAE4H6UUz0ev3p06d9Pt+77777ve99L/YTd+7c+dRTT9XW1goh3G53dXV1eXl5aWlpn56FEE1NTbt37162bFmMPe/YsePZZ59Vilmtra3PPvvsjh07Yjy3vr6+vb3d5/M5HI6qqqpdu3bFfkdDin5HDz30UCgUevHFFz///PPw3LpII1s/W1FWVrZv3779+/eXlZVF7h/N/Q75CUYxVuP88MMPf/DBB8M6xWQyVVVVKV9/+OGHaWlpkQ8cRW8VQrz//vtr1qwZWVoAk0cwGAwEAmqnQNzKzMwUQnR3d7MKEgAACUGOX4cOHVq/fn2fnTNnzhzw4OjDcurUKb1en5qa+sQTT7S0tEQe0+eU/j1cuHBhxYoV+fn56enpixcv3r17t9vt7tOzJEkzZsz46U9/arPZBovUP9jRo0fnzp2r1+vnzp179OjRAW9nwM0LFy4sXLjQaDTm5eVt2bIlvA5ULNcdMlWUO1J88sknkiRduXJlwA9i4cKFixYtGrApFosXL168eHGfndHvt/9N9T99sE9wNOM85HXDampqFixY0Gdn9A9C+RSEEFlZWVar9X//938jz43eKsvy/Pnzb926NVieqU6r1XZ0dKidApgIdru9pqamvb1d7SCIW42NjZ999llzc7PaQQAAwLhLuPWPoLrXX3/96NGjlZWVageZSsrKylauXLlp06YJuNarr7564cKF8vLyCbiWKlj/CInDZrO53e6CgoLBFlADRqmnp+fOnTuSJBUWFip/mQAAAPFKp3YAJJbe3t4dO3a89tprageZYn7729+WlJRMTP1o3759x48fn4ALARhvVqu1p6cncj04YGwZjUaTyeT1ejs6OrKzs9WOAwAAxhH1I0yQyNd73XPPPXH84Nt4yMrKunTp0sRca7hrLQGYzCgeYbxlZmY2NjZ2dnZmZGTodPxgCQBA3GL9bEyQPjMn1Y4DAADGgNlsNpvNsiw7nU61swAAgHFE/QgAAAAjN23aNCFEV1cXL2IDACCOUT8CAADAyBmNxuTkZCFEW1ub2lkAAMB4oX4EAACAUcnMzBRCeDyeUCikdhYAADAuWOYQAAAAo2I0GvPy8pKTkzUa/jYJAEB84ns8AABxore3V+0ISFypqakUjwAAiGN8m58gkW+vnyo9T0WMBoCE1dvbW19fb7PZmEAEAACAMUf9aAxcv35dkqTRVy7GpJMJ7nlsRR/JsRpnAIhLDodDluVQKMQzIAAAABhzCfcjZmFh4Zj3+eCDD8qyHP2YIQ+I8ZiJ7HniRR/JsRrn/qxW6wjOAoDJw+PxuFwuSZJycnLUzgIAAIA4lHD1o9u3b6sdAZNOU1OT2hEAYORkWXY4HEKItLQ0g8GgdhwAAADEoYSrHw1I+j8Dbgoh9uzZs3nzZqvVWlBQUFZWVldXF3vnNTU1UWZdHTx4cPbs2SkpKY8++mhra+uwYo+y5yVLlixZsmRYVxRCnD592mAwSJJkMpkWLVp06tSp+++/X2lSwrz88supqalVVVWvv/66xWI5ffp05OmjGcnoooyGst/lcpWUlBgMBoPBEE5VVFSknCJFGKtIADAxurq6/H6/VqudNm2a2lkAAAAQn6gfCSGELMvLly+/fPmysnn58uWvfvWrkTOhVq9efeDAAZvNdv369dzc3FWrVsXe+ezZswebVHXkyJFXXnnlvffeczqdP//5z3/1q18NK/Yoe5ZleQSzvTZu3FhZWSnLstvtPnv2rMfjsdvt4Q6FEC0tLQcPHly3bt3x48f379+/cePGyNNHM5LRRRkNZf+2bdueeeYZn89XWVkZTlVbW6u0yhHGKhIATIBgMOh0OoUQmZmZWq1W7TgAAACIT1Ic/7Z8+PDhM2fOnDx5UghRUFBgs9kiW61Wa2NjY3jzyJEjf/7znw8ePCiEKC0tXbly5RNPPDFgt8FgUKfT9R83SYo2mAO23n///ZWVlfPmzVM2r1279uUvf3m4n8j49Tyg5OTk3/3ud9/61rcsFsuAYQKBgE6nkyTJ4/GYTKYowzKGIzlkqyRJx48f37Bhw4CHRe8TcUan0zmdzgH/AwamIofD0dHRYTAYZs6cyROUmCRkWW5vb+/u7p4xYwYLugMAEB8S5Tt6Y2Nj+NES5YvI4pEQ4tFHHz137lxXV1dXV9d777336KOPhpvsdvuzzz5bXFxsNpuzsrJWr149Vqlqa2vvueee8ObcuXMnf88nT5782c9+lp6enpSUNGPGjOLi4g8//DDyAJ1Op3xhMpn6nDt+IxmLcPEIAOKG3+/v7OwUQmRnZ1M8wqSiTKvs6upSOwgAABgbiVI/GpLJZCopKTl69GhFRcW6deuMRmO4qaSk5JFHHrlx44bH42lsbDx06NBYXbSoqOjzzz8Pb968eXPy97xmzRq/3+/3+xsbGy9evPjkk08+9NBDMZ47fiM5tnw+n9oRACAmra2tsiybzWaz2ax2FuAfJEnKzs7Ozc1NT09XOwsAABgb1I/+oaysbN++ffv37y8rK4vcX19f397e7vP5HA5HVVXVrl27xuqK27Zt+8lPftLQ0OD3+//617/u379/Inse2frZ2dnZFy9eDAQCWVlZs2bNmjt3rtvtjvHc8RvJUdLr9cqK2k1NTbt37162bJnaiQBgaG632+12K7+oq50F6Cs5OTktLU3tFAAAYMwkXP1o5syZgzXNnz9fq9VqtdoHH3wwcv+rr776/PPPp6enP/jgg5WVlb/4xS+EEAO+rK3/C7yit373u9/dtGnTihUrMjIyfvvb3/7617+O7Dm60fccDAZHsOjPrFmzmpub/+Vf/kWv10uSpCynHY7UZ2T6fDF+Izlka/88kQcoK2prNJqlS5fW1ta++eabwx0WAJhgoVBIeX1BRkaGwWBQOw4AAADiXDwvGxy5fjYAKFg/G/HB6XS2tbXp9frCwkJWPgIAAMB4S7jnjwAAmOr8fn97e7sQIisri+IRAAAAJgD1IwAAphiHwyHLcnJyckpKitpZAAAAkBCoH01SynyEARUWFqqdDgCgGpfL5fF4WDYbAAAAE0mndgAMrKGhQe0IAIBJJxQKORwOIURGRoZer1c7DgAAABIF9SMAAKaMjo6O3t5enU6XkZGhdhZgGHp7e1tbW4UQeXl5amcBAAAjwfw1AACmhlAoFF42W6PhOzimkmAw6HK5uru7PR6P2lkAAMBI8NMnAABTg0ajmTFjRmZmZmpqqtpZgOFJSkqyWCzi/1Z/VzsOAAAYNupHAABMGQaDYdq0aWqnAEZi2rRpWq3W7/d3dHSonQUAAAwb9SMAAACMO41Gk5WVJYRoa2vr7e1VOw4AABge6keYGiRJkiRpAi7kcDhWrlwZ3nz11Ve1Wq30fwwGw+nTpyOPv3jx3k55aQAAIABJREFU4sMPP7xixYoRtH7lK19xOp3jejsAAEweaWlpRqMxFAopa2kDAIApJOHqR4WFhWpHGDNWq1XtCBNnwtZK+OUvf/mDH/wgvPnd7373zTfflP9PZWXlxo0bI48vKys7cuTIBx98IMvyhQsXnnzyydhbf/SjHz333HPjejsAAEwq2dnZQoju7m6v16t2FgAAMAwJVz+6ffu22hHGTFNTk9oR4s2tW7c++uijxx9/PLzHarWuWbMmvLlu3bo+j9xrNBrlR2EhxLJly9xud+yt3/72t69cuXLr1q2xvQsAACYto9GYlpYmhLDb7SykDQDAFJJw9aPBXLlyZc2aNRaLxWQyLV++/Pz583PmzAm3Hjt27Etf+lJycvLChQuPHz8e3q/MaXr55ZdTU1Orqqpef/11i8USnqMUvVXxxhtvLF261Gw2FxcXnzp1KrJJOd3lcpWUlBgMhsjZT0VFRcpkLilC5LmnT582GAySJJlMpkWLFp06der+++/vc8tLlixZsmTJcAeqz+X6X33Pnj2bN2+2Wq0FBQVlZWV1dXX9TxdCHDly5L777ktLS3v++efDrdE/BSFETU3NsmXLdDpd/7lgo7luWHl5+ebNmyP31NfXR25+/vnn//7v/x65x263DzJUQ7cKIUpLS8vLy6MfAwBAPMnOztbpdH6/v62tTe0sAAAgVtSPhBDi3LlzW7Zsefrpp+vq6rq6uioqKm7evBlemObYsWP/8z//c/nyZbfbfenSpRMnToRLSMrfzVpaWg4ePLhu3brjx4/v378/PL8peqsQorKysrKy8tixYx0dHSdOnNizZ8+7774bblVO37Zt2zPPPOPz+SJnTtXW1iqtcoTIO9q4cWNlZaUsy263++zZsx6Pp38ho/9ZsZBlefny5ZcvX1Y2L1++/NWvfjWyn9WrVx84cMBms12/fj03N3fVqlV9ThdCbNq06bXXXquoqHA6nYsXL1aaon8Kiq1bt+7bty8QCPSfRzbi60Z65513Ihc/6sPlclVXV//Xf/1X5M729vZBB2uoViHE1772tbNnz0Y/BkDC6u3t5QENxJ/ww7nt7e0+n0/tOAAAICZSHP9gevjw4TNnzpw8eVIIUVBQYLPZIlutVmtjY6Py9fz58/fu3bt06dIB+ykuLj59+vQXv/hFZfPmzZvr1q27ceOGsilJUiAQ0Ol0kiR5PB6TySRJ/xjV6K3z5s07d+5cQUGBsllTU1NaWnrp0qXwpSVJOn78+IYNG8KbkZ9Xn81IycnJv/vd7771rW9ZLJYYhyt2R44c+fOf/3zw4EEhRGlp6cqVK5944okBjwwGgzqdrk9ISZLeeuuttWvX9jk4+qegnNjU1JSXlxfeHOz2h3XdSGazubW11Ww292+y2+03b95cvnx5/1RRPpQhPzK3252VlcUaEBNJp9M5nc7x+F8DGHN3797t7e3Ny8szGo1qZwHGmM1mc7vdRqNxxowZamcBAABDS5T6UdiARYekpKS2trbk5OQB+zEYDJ2dnSaTSdn0er3p6enhP5eFO+z/xZCtRqOxz5/dTCaTx+MZLG3s9aOzZ89+4xvfCAQCBoMhJycnNTX18OHDAz5xMwJer3f27NlKBa24uLi2tjb8i43dbn/ppZfefvvt+vp6s9m8YMGC8+fP96/jDBg7+qfQ/8TIzdFcN5LJZHI6nf3rR5988ondbl+xYkUsqUKhUOT8viitQgi3252dnR35oWO8UT/CVBEIBO7cuSPLcmFhoU6nUzsOMMZ6e3sbGhpCoVB2dnZ6erracQAAwBCYvyaEELNmzfr4448Hay0qKmpoaAhvNjQ03HvvvWNy3eLi4urq6sg5aKOpI0SWotasWeP3+/1+f2Nj48WLF5988smHHnpoLCILIYTJZCopKTl69GhFRcW6desi/ypeUlLyyCOP3Lhxw+PxNDY2Hjp0KPZuo38K0Y3mupHuvffePgseCSGuXr06WPFoQMFgMPbWurq6oqKi4WQEkCj0en1hYWF+fj7FI8QlnU43bdo0IYTT6ezzbgoAADAJUT8SQoidO3c+9dRTtbW1Qgi3211dXV1eXl5aWqq07tix49lnn21tbRVCtLa2Pvvsszt27BiT677wwgtlZWVXr171er1ut/vatWvr16+P/XS9Xq+sId3U1LR79+5ly5aFm7Kzsy9evBgIBLKysmbNmjV37tw+b/4SI10/W1FWVrZv3779+/eXlZVF7q+vr1fWMnA4HFVVVbt27Yq9z+ifQnSjuW6khx9++IMPPojcc/HiRaPRGFk86rNUuclkqqqqUr7+8MMP09LSIh84it4qhHj//fcj3+8GAJG0Wu2AM2qB+JCenm40GkOh0JCvmwAAAOqT49ehQ4fWr1/fZ+fMmTMHPPjChQsrVqzIz89PT09fvHjx7t273W53uPXo0aNz587V6/Vz5849evRoeH/kMA72xWCtirNnzy5evNhgMOTm5n7/+99vaGgYsPP+m7Isnzp1Sq/XS5I0Y8aMn/70pzabLdy0ePHiysrKBx54QPmrtV6vP3XqVJ9bXrhw4aJFi4Yex0EsXrx48eLFfXZeuHBh4cKFRqMxLy9vy5Yt4RWm+t/UgP/5RfkUoo/GKK8bVlNTs2DBgsg9KSkp0f+vUT4FIURWVpbVav3f//3f2FtlWZ4/f/6tW7cGy4PxoNVqOzo61E4BAJBlWfZ6vZ999tlnn33mcrnUzgIAAKJJuPWPgOjKyspWrly5adOmCbjWq6++euHChfLy8gm4FsJY/wgAJpXW1tb29nadTldYWKjR8Gg8AACTFN+kgX/y29/+9r//+78n5lr79u37zW9+MzHXAgBgcpo2bVpSUlJvby+z2AAAmMyoHwH/JCsr69KlSxNzrQ8++CArK2tirgUAwOQkSVJOTo4Qoru72+/3qx0HAAAMjFe6AAAAQE1GozE7O9toNBoMBrWzAACAgfH8EQAAkwJvMUciU97FpnYKAAAwKOpHAACor6urq62t7fbt26FQSO0sAAAAQF/UjwAAUFkgEHA4HEKIjIwM3j8FAACASYgfUgEAUJndbg+FQkajMSMjQ+0sAAAAwACoHwEAoKbOzk6PxyNJUm5urtpZAAAAgIFRP0pokiSpHQEAElpvb29ra6sQIjMzkzdPAQAAYNKifoRJSpIkylsA4l5zczMz14ABybLc2dmpdgoAAPB3CVc/KiwsVDvCP7FarSr2LMvyOF199IabbfxGEgDGSVtbm9fr1Wg0eXl5VMyBPmw2m91ub2trUzsIAAAQIgHrR7dv31Y7wj9pamqacj1PTol2vwCmup6eHuUX4+zsbL1er3YcYNJJTU3VaDT83wEAwCSRcPWjwVy5cmXNmjUWi8VkMi1fvvz8+fNz5swJt4bnUh05cuS+++5LS0t7/vnnw61vvPHG0qVLzWZzcXHxqVOn+vS8Z8+ezZs3W63WgoKCsrKyuro6ZX9RUZHSpxShz7nRex5MLD3X1NQMuF/Z+fLLL6emplZVVb3++usWi+X06dPDSrVkyZIlS5bEmDbSwYMHZ8+enZKS8uijjyoLgkSa+JEEgHESCoWam5tlWU5NTU1LS1M7DjAZpaWlfeELX0hNTVU7CAAAEEIIndoBJoVz5849++yzu3btqqioSE1NbWpqevPNN51OZ/gAWZYlSdq0aVMgEKioqHjggQfOnz+vNFVWVr7xxhvHjh0rKCioqan52c9+lpycvHr16vC5q1evfuqpp4QQTqfz97///apVq27duiWEqK2tFUJIkjTYRK0hex7MkD0LIWbPnq3cVJ/9ys6WlpaDBw+uW7du1apV+/fv37hxo9/vjz3VyKbFHTly5JVXXnnvvffy8/P/9re//epXv+pzwMSPJACMk9bW1kAgoNPpcnJy1M4CTF5arVbtCAAA4O+ilRimusOHD585c+bkyZNCiIKCApvNFtlqtVobGxuVr+fPn793796lS5dG6U2SpLfeemvt2rV99s+bN+/cuXMFBQXKZk1NTWlp6aVLlwbsJBgM6nS6yDGPUvUYVs8DBh7ywx3wGEmSlN9qJEnyeDwmkynysFGmiuL++++vrKycN2+esnnt2rUvf/nLg93CRI4k4oxOp3M6nRaLRe0gSFxut1v5llRQUGA2m9WOAwAAAAwtUZ4/CpeKBqwyfPrpp/fff/+QnfQvHgkhbt26NX369Mg9JpMp/LXdbn/ppZfefvvt+vp6s9m8YMGC2DNH73lc6XS6wa44fqlqa2vvueee8ObcuXMjW6foSAJAH8FgsKWlRQiRnp5O8QgAAABTBesfCSHErFmzPv7445GdW1xcXF1dLUfweDzh1pKSkkceeeTGjRsej6exsfHQoUPRe/P5fDH2PFyRPY/G2KaKVFRU9Pnnn4c3b968Gdk6eUYSAEbDbrcHg0GDwZCVlaV2FgAAACBW1I+EEGLnzp1PPfWUsoyO2+2urq4uLy8vLS2N5dwXXnihrKzs6tWrXq/X7XZfu3Zt/fr14db6+vr29nafz+dwOKqqqnbt2tXndL1er6xO3dTUtHv37mXLlsXY85Ci9DwasaQa2frZ27Zt+8lPftLQ0OD3+//617/u378/slXFkQSAsdLR0eFyuSRJysvL678CHQAAADB5yfHr0KFD69ev77Nz5syZAx584cKFFStW5Ofnp6enL168ePfu3W63O9wafdDOnj27ePFig8GQm5v7/e9/v6GhIbLbhQsXGo3GvLy8LVu2hKfRhQ84deqUXq+XJGnGjBk//elPbTZbjD0PKUrPUf5LiNzs/0WMqRYuXLho0aLYo4aVl5ffc889ZrP5m9/8psPhiLyuiiOJOKPVajs6OtROgUTk9Xpramo+++wz/gsERqO3t1ftCAAAJKJEWT8bABSsnw1VhEKh27dvBwKBlJSU/Px8teMAU5Isyw6Hw+VyzZw5M7xWIwAAmBjMXwMAYNz5fL7e3l6tVpuTk6N2FmAK8/l8wWCwqakpjv8CCgDA5ET9CACAcWcymWbOnJmfn6/VatXOAkxVkiRZrVadTtfT06O8xxAAAEwY6kdTUmFhoTSIwsJCtdMBAAZgMBhMJpPaKYCpTavVKsvPd3d3d3Z2qh0HAIAEwtTxKamhoUHtCAAAACowmUyZmZlOp9PhcBiNxqSkJLUTAQCQEHj+CAAAAFNJZmZmSkqKLMs2my0YDKodBwCAhED9CAAAAFNMTk6OXq/v7e212+1qZwEAICFQPwIAAMAUE14IyeVytbW1qR0HAID4R/0IAAAAU4/RaMzOzhZCOJ1Ot9utdhwAAOIc9SOMC0mS1I4AAKppbW1tbW2VZVntIECcs1gs6enpQojm5mafz6d2HAAA4hn1o/gkSRIVHABQhd/vb29vb29v93q9amcB4l9WVpbZbA6FQqylDQDAuEq4+lFhYaHaEf6J1Wodj25V/6P3yAKM02gAwEQyGAz5+fmZmZlms1ntLED8kyQpLy9PWUu7qalJ9R+BAACIVwlXP7p9+7baEf5JU1OT2hEmEUYDQHxISUmZNm2a2imARKHVaq1Wq0aj8Xq9DodD7TgAAMSnhKsfDebKlStr1qyxWCwmk2n58uXnz5+fM2dOuDU8HezIkSP33XdfWlra888/H2594403li5dajabi4uLT5061afnPXv2bN682Wq1FhQUlJWV1dXVKfuLioqUPqUIfc6N3vOQvF7v9773vZSUlC984Qvl5eWR9xJ5LWVz9uzZkecuWbJkyZIlw72iEKKmpmaw2XPKfpfLVVJSYjAYDAbD6dOnlaZYRgMAAGBABoMhJydHCNHZ2dnV1aV2HAAA4hD1IyGEOHfu3JYtW55++um6urqurq6KioqbN286nc7wAcqz0Js2bXrttdcqKiqcTufixYuVpsrKysrKymPHjnV0dJw4cWLPnj3vvvtuZOerV68+cOCAzWa7fv16bm7uqlWrlP21tbVKt3KEyBOH7HlI//Ef//Htb3+7paXl1KlTf/rTn44dOyaE6O7unjNnjt1uDx/W1dU1d+7cv/zlL5Hn9s8To9mzZw92orJ/27ZtzzzzjM/nq6ys3Lhxo9I05GgAAABEkZqampmZKYSw2+2sPgYAwJiT4vi39MOHD585c+bkyZNCiIKCApvNFtlqtVobGxuVr+fPn793796lS5dG6U2SpLfeemvt2rV99s+bN+/cuXMFBQXKZk1NTWlp6aVLlwbsJBgM6nS6yDGXpEE/gmH1PGDg9957L1yu+uSTT771rW9dv35dCLFv375r16798Y9/VJqee+65rKysrVu3xthzjFcf8L4kSTp+/PiGDRsGPCzKaABjRafTOZ1Oi8WidhAAwNhrampyuVxarXb69OkGg0HtOAAAxI94/nU9sn4UNmCFIikpqa2tLTk5OUpvg5U2jEZjn/fFmkwmj8ejfG2321966aW33367vr7ebDYvWLDg/PnzMVZMovc8JEmSuru7U1JSlE2Px5OTk+NyuYQQwWBw0aJFFRUVxcXFd+7cWbt27UcffTS2P2NFqR9FuX3qR5gA1I8AII7Jsnz37l1JkpQVkdSOAwBA/ODbqhBCzJo16+OPPx7ZucXFxdXV1ZGzriJLPCUlJY888siNGzc8Hk9jY+OhQ4ei9xZZMIrecywip6R9+umn4RWdtFrtiy++uG3bNiHE9u3bd+zYMTn/QNenfAYAABCdUjmieAQAwJjjO6sQQuzcufOpp56qra0VQrjd7urq6vLy8tLS0ljOfeGFF8rKyq5ever1et1u97Vr19avXx9ura+vb29v9/l8Doejqqpq165dfU7X6/XKGtJNTU27d+9etmxZjD3H4u233z5//rzH4/nwww9/8IMfbN++Pdz00EMPhUKhF1988fPPPw/PJos04vWzRyPKaADA5NTa2trR0aF2CgD/oNVqKR4BADDmdGoHmGgzZ87sv/Oxxx7Lzc3dsmVLdXW11+udPXv2d77znT/84Q/hA8KvBlM2I+dYrV27VqPR/PjHP/7b3/6WkZHxb//2b7///e/Dra+++urWrVsff/zx9PT0b3zjGzt27Hj55ZcjZ2kpa0j39vZOnz593bp1b775Zow9R6dE3blz5w9/+MOvf/3r2dnZ27dv71N++t3vfvfAAw9UVVUN2EMwGBzBz159XuumfBG+2fAwKnv6bIqoowEAk1B3d3d7e7sQwmg0Go1GteMAAAAA4yWel5sZcP0jhL3++utHjx6trKxUOwgwoVj/CGOlp6fn7t27sixnZmZOmzZN7TgAAADAOEq454+g6O3t3bFjx2uvvaZ2EACYknp7e5uammRZTk5OpngEAACAuEf9KOFETjG755574vgBNAAYJ6FQyGaz9fb2JiUl5efnqx0HAAAAGHcsLjglFRYWSoMoLCyMfq78zyYmMADEk5aWFp/Pp9VqrVZrZFEewKQVCoWam5sDgYDaQQAAmKp4/mhKamhoUDsCACSotrY2l8slSVJ+fr5Ox7dRYGqw2+3d3d1+v3/AV6kAAIAh8YMvAACxcrlcTqdTCJGdnW0ymdSOAyBWWVlZgUAgJydH7SAAAExV1I8AAIiJz+draWkRQlgsFl7hB0wtOp1uxowZaqcAAGAKY/0jAACGpiyeEgqFjEZjdna22nEAAACACUX9CACAIciy3NTU5Pf7tVptfn4+a2YDAAAg0VA/Smj8CgQAsWhubvZ4PBqNpqCggDWzAQAAkICoHw1NkiTqLBOPYQcwSSgvXBNC5OXlJSUlqR0HAAAAUEHC1Y8KCwuHe4osy+ORZLxZrdYhj5nMtzbcbLHcLwAMV3d3d/iFa8nJyWrHATD2vF6v2hEAAJgCEq5+dPv2bbUjTJCmpia1I0yoRLtfABPA6/UqL1xLT09PT09XOw6Asdfa2nr37t2Ojg61gwAAMNklXP1oMFeuXFmzZo3FYjGZTMuXLz9//vycOXMiD6ipqVm2bJlOpzMYDKdPn45s2rNnz+bNm61Wa0FBQVlZWV1dXbhJmYTlcrlKSkoMBkP/c/fv3z9r1qyUlJTHHnuss7Ozz6StN954Y+nSpWazubi4+NSpUzHeS1FRkdKJFKHPMTU1NQPuV3a+/PLLqampVVVVr7/+usVi6ZN5yFRLlixZsmRJjGkjHTx4cPbs2SkpKY8++mhra2uf1sHGOZb7HdlIAkhkgUCgqalJluXk5GReuAbEN4fD0dXVpXYKAAAmNepHQghx7ty5LVu2PP3003V1dV1dXRUVFTdv3lQmLIRt3bp13759gUCgsrJy48aNkU2rV68+cOCAzWa7fv16bm7uqlWrwk3KJKxt27Y988wzPp+vz7knTpw4fPjw+++/397e/p//+Z8vvPCCiJi3VVlZWVlZeezYsY6OjhMnTuzZs+fdd9+N5XZqa2uVTuQIfY6ZPXv2gBPElJ0tLS0HDx5ct27d8ePH9+/fH5k5llQDXnFIR44ceeWVV9577z2n0/nzn//8V7/6VZ8DBhvnIe93xCMJIJGFQiFJkgwGQ15entpZAIyXrKws5enClpYWSkgAAEQhTeYVcEbp8OHDZ86cOXnypBCioKDAZrNFtlqt1sbGRuXr+fPn7927d+nSpYN1JUlSU1NT+FcISRp03ILBoE6ni2yVJOn48eMbNmzof+6CBQuOHDnywAMPKJtXr15dunRpuHXevHnnzp0rKChQNmtqakpLSy9duhTj7UcJGf0YSZICgYBOp5MkyePxmEymyMNGmSqK+++/v7Kyct68ecrmtWvXvvzlLw9rnAc7ePwyYyrS6XROp9NisagdBFNAb2+vLMt6vV7tIADGl9PpbGtrE0JkZ2czWRUAgAElykuIw6WiAasMn3766f333x+9h8H+/my321966aW33367vr7ebDYvWLCg/zHh4lEftbW1RUVF4c1w6URx69at6dOnR+4xmUzRQ46V8Nup+19x/FLV1tbec8894c25c+dGtsYyzoNRcSQBTGnhfwwBxLdp06YJIdra2hwOhxCCEhIAAP0xf00IIWbNmvXxxx+P7NySkpJHHnnkxo0bHo+nsbHx0KFDsZ9bVFR069at8Ob169cjW4uLi6urqyPnZHk8npGFFEL4fL4Rnzt+qSIVFRV9/vnn4c2bN29Gtg53nCPvd/wyAwCA+DBt2rTMzEwhhMPh6OzsVDsOAACTDvUjIYTYuXPnU089VVtbK4Rwu93V1dXl5eWlpaWxnFtfX9/e3u7z+RwOR1VV1a5du2K/7vbt259++unm5uZgMPjJJ5+88sorka0vvPBCWVnZ1atXvV6v2+2+du3a+vXrY+9cr9cr6143NTXt3r172bJlsZ8bRSypRrZ+9rZt237yk580NDT4/f6//vWv+/fvj2wdcpyj3O8oRxIAACSCcAnJbrdTQgIAoC85fh06dGj9+vV9ds6cOXPAgy9cuLBixYr8/Pz09PTFixfv3r3b7XYrTX3Gqs/mhQsXFi5caDQa8/LytmzZEp4oF8u5sizv3bu3sLDQZDJ985vfVN44Fpnq7NmzixcvNhgMubm53//+9xsaGmK//VOnTun1ekmSZsyY8dOf/tRms4WbovyXELnZ/4sYUy1cuHDRokWxRw0rLy+/5557zGbzN7/5TeUB8hjHOfr9xpIZiUOr1XZ0dKidAgAwSbW0tHz22WefffZZZ2en2lkAAJhEEmX97Cmhvb09Ly9vrCaaARgQ62cDAKILP3+Uk5PD9wsAABTMX5ssWltbf/Ob3zz55JNqBwGAhBMIBJQnQAFACJGTk5ORkSGEsNvt/OMAAICC+pGa/H7/zp07NRqNJElFRUXJycnl5eVqhwKAxCLLcmNjY3t7O78lAgjLysrKysoSQvCPAwAACupHajIYDDt27AiFQrIsd3R0/PrXv9ZqtbGcWFhYKA2isLBwvGMDQDyRJCkrK0uv1/PGbgCRMjIywiUku92udhwAAFSmUzsARqKhoUHtCAAQP1JSUpKTkyVJUjsIgMklIyNDo9EoyyGFQqHc3Fz+oQAAJCyePwIAQPA7IYABWSyWnJwcIUR3d7fdbo/jN88AABAd9SMAAABgUBaLRXnyyO12B4NBteMAAKAO5q8BAAAA0aSlpWm1Wp1Op9PxwzMAIEHxLRAAAAAYQnJystoRAABQE/PXMC5YSQTA5BQIBNSOAAAAAEw91I+GJknSlKuGTMXMADDeuru7Gxoaurq61A4CAAAATDEJVz8qLCwc7ilT8UUbqmceWQCr1TrmSQBA4XK5WlpaZFnu6elROwsAAAAwxSRc/ej27dtqR8Cgmpqa1I4AID65XK6mpiZZlsOv4gaAseJ2u9WOAADAuEu4+tFgrly5smbNGovFYjKZli9ffv78+Tlz5kQeUFNTs2zZMp1OZzAYTp8+Hdm0Z8+ezZs3W63WgoKCsrKyurq6cJMyj8zlcpWUlBgMhv7n7t+/f9asWSkpKY899lhnZ2efeWdvvPHG0qVLzWZzcXHxqVOnhntTXq/3e9/7XkpKyhe+8IXy8vLISJFXUTZnz54dee6SJUuWLFky3CsKIWpqagabPRdlNIqKipRTpAgjuDoA9Od2u5ubm4UQqampFI8AjC2Hw2Gz2ZxOp9pBAAAYX9SPhBDi3LlzW7Zsefrpp+vq6rq6uioqKm7evNnn54CtW7fu27cvEAhUVlZu3Lgxsmn16tUHDhyw2WzXr1/Pzc1dtWpVuEmZxrVt27ZnnnnG5/P1OffEiROHDx9+//3329vb//M///OFF14QETO/KisrKysrjx071tHRceLEiT179rz77rvDuq//+I//+Pa3v93S0nLq1Kk//elPx44dE0J0d3fPmTPHbreHD+vq6po7d+5f/vKXyHNlWR7ZHLTZs2cPdmKU0aitrVVa5QgjuDoA9OH1epUnj1JSUvLy8tSOAyDeaLVaIURSUpLaQQAAGF9SHP+Wfvjw4TNnzpw8eVIIUVBQYLPZIlutVmvbo63sAAAgAElEQVRjY6Py9fz58/fu3bt06dLBupIkqampKfyLhyQNOm7BYFCn00W2SpJ0/PjxDRs29D93wYIFR44ceeCBB5TNq1evLl26NNw6b968c+fOFRQUKJs1NTWlpaWXLl2K8fYlSXrvvffCxaxPPvnkW9/61vXr14UQ+/btu3bt2h//+Eel6bnnnsvKytq6dWuMPcd49QGHKMpoRDkLGEM6nc7pdFosFrWDYCL4fL67d++GQiGTyVRQUMCDjQDGQyAQ0Ov1aqcAAGB8xfOv65H1o7ABKxRJSUltbW3JycmDdRWlzGG321966aW33367vr7ebDYvWLDg/PnzUWoikZspKSkOh8NkMimbbrc7JSUl3Go0Gn0+X2QMk8nk8Xhiu3shSVJ3d3dKSoqy6fF4cnJyXC6XECIYDC5atKiioqK4uPjOnTtr16796KOPDAZDjD3HePXB6kcxDg4wTqgfJQ6fz9fY2BgMBo1GY0FBgUbDI7cAAADACPHDtBBCzJo16+OPPx7ZuSUlJY888siNGzc8Hk9jY+OhQ4diP7eoqOjWrVvhTeXhoLDi4uLq6urI+VyxF48UkVPSPv300/CKTlqt9sUXX9y2bZsQYvv27Tt27Bjb4tFY6VM+A4DY+f1+ikcAAADAWOHnaSGE2Llz51NPPVVbWyuEcLvd1dXV5eXlpaWlsZxbX1/f3t7u8/kcDkdVVdWuXbtiv+727duffvrp5ubmYDD4ySefvPLKK5GtL7zwQllZ2dWrV71er9vtvnbt2vr164d1X2+//fb58+c9Hs+HH374gx/8YPv27eGmhx56KBQKvfjii59//nl4NlmkEa+fPRp6vV5ZUbupqWn37t3Lli2b4AAA4oPP57tz5w7FIwAAAGCs6NQOMNFmzpzZf+djjz2Wm5u7ZcuW6upqr9c7e/bs73znO3/4wx+U1vB7wZSpVX02X3311a1btz7++OPp6enf+MY3duzY8fLLLw92cJ/NDRs2dHR0/Mu//Ivdbl+zZs3evXv37NkTTrV27VqNRvPjH//4b3/7W0ZGxr/927/9/ve/j/E2lQvt3Lnzhz/84de//vXs7Ozt27f3KT/97ne/e+CBB6qqqgbsIRgMjuA3rj6vdVO+CE9Jiz4aQghlRe3e3t7p06evW7fuzTffHG4AAFCmrYVCIYpHAAAAwFiJ5+VmBlz/aDJrb2/Py8ubsElbr7/++tGjRysrKyfmcsAkwfpH8c3v99+9e5cnjwBMBp2dnd3d3fn5+co72gAAmNIS7vmjSau1tfX//b//9+STT07M5Xp7e3fs2PHaa69NzOUAYAJQPAIweYRCIafTGQwG79y5Y7VaJ+dakwAAxI6frdXk9/t37typ0WgkSSoqKkpOTi4vLx/vi0qSJEmSXq+/fv36PffcM96XA4CJEQgElAWzDQaD1WqleARAXRqNZvr06Xq9PhAI3Llzx+12q50IAIBR4cdrNRkMhh07doRCIVmWOzo6fv3rX8f4eHNhYaE0iMLCwujnyv9sLO4DAFSmPHnU29trMBimT5/OVBEAk4HBYJgxY4bZbA6FQjabra2tTe1EAACMHPPXpqSGhga1IwDAZCHLcmNjI8UjAJOQVqu1Wq1Op7O9vd3pdPb09OTl5fGAJABgKuK7FwBgapMkKTc312QyzZgxg+IRgMlGkqSsrCxlXq3b7W5oaOjp6VE7FAAAwxbPzx999NFH77zzDm9ZAhBJq9W6XC7+ZYgzZrPZbDarnQIABpWcnDxz5sympiafz3f37t2srKz09HS1QwEAMAzxXD+aN2/eV77ylT179qgdBMAkMmfOHAoNAICJp9frZ8yYYbfbu7q6HA5HT09Pbm6uJElq5wIAICbxXD8yGo0pKSm8YgxAHyw8AQBQhTLf1mAwtLa2dnd3BwKBvLw8vV6vdi4AAIbGL1EAAADAxMnIyCgoKNBqtT09Pbdv3+7u7lY7EQAAQ4vn54+EEH/5y18ee+wxtVMAmERCoZDaEQAAic5sNs+cObO5udnr9TY3N7vd7pycHB6PBQBMZpIsy2pnGC/19fUffvih2ikATDolJSVMFpiiurq6QqEQi84CiA+yLLe1tbW1tQkhDAZDXl5eUlKS2qEAABhYPNePAADxpKen586dO0KI6dOnm0wmteMAwNhwuVwtLS2hUEij0eTn5/OSBwDA5BTn89cAAHHDaDRmZGQIISgeAYgnKSkpRqOxubk5EAjw/BEAYNLi+SMAAABAZbIsBwIBg8GgdhAAAAZG/QgAAAAAAADR8JYHAAAAAAAAREP9CAAAAAAAANFQPwIAAAAmr2Aw6HA4QqGQ2kEAAAmN+hEAYHLx+/0NDQ0+n0/tIAAwKdjt9o6OjpaWFrWDAAASGvUjAMAk4vV679y54/f7HQ6H2lkAYFJIT0/X6/WZmZlqBwEAJDTevwYAmCy6u7tbWlpkWTYajVarVavVqp0IAAAAgBBC6NQOAACAEEJ0dnba7XYhhNlszs/P12h4QhYAAACYLKgfAQDU53Q629rahBCpqam5ubmSJKmdCAAAAMA/UD8CAKhJluWWlpbu7m4hREZGRlZWltqJAGAq6e3t1Wq1lN0BAOON+hEAQDXBYNBms/X09EiSlJOTk5aWpnYiAJhKZFm22WyyLOfk5JhMJrXjAADiGetnAwDU4ff7bTZbIBDQaDT5+flms1ntRAAwxQQCgbt37/b29goh0tLSsrOzWTwOADBOqB8BAFTg9XptNlsoFNLpdAUFBQaDQe1EADAlybLsdDrb29uFEBqNJisry2KxqB0KABCHqB8BACZad3d3S0uLLMtGo9FqtWq1WrUTAcDU5vP5WlpafD6fEMJkMuXk5FCXBwCMLepHAIAJ1dHR4XA4hBBmszk/P5+pFgAwJmRZbmtra29vl2VZo9FMmzYtPT1d7VAAgPhB/QgAMEFkWXY4HJ2dnUKItLS0nJwcXhgEAGPL5/PZ7faenh4hRFJSUk5OjtFoVDsUACAeUD8CAEyEyFetZWdnszwHAIyfjo4Op9MZCoWEEBaLZdq0acwUBgCMEvUjAMC4k2X59u3bfr9fo9Hk5eUlJyernQgA4lwoFHI6nR0dHUIIprMBAEaP+hEAYCJ0dHR0dnZarVa9Xq92FgBIFD09PQ6Hg+lsAIDRo34EAJggoVCI1bIBYILJstze3t7W1ibLsiRJ6enpmZmZ/GsMABgu6kcAAABAnAsEAg6Hw+12CyG0Wm1+fr7JZFI7FABgKuEvDwAAAECc0+v1VqvVarUaDAZZlg0Gg9qJAABTDM8fAQAAAIlClmW/35+UlKR2EADAFEP9CAAwlnw+H7+WAAAAAHGG+WsAgDHjcDhu376trK8BAAAAIG5QPwIAjJlQKCSE8Pl8agcBAIxEd3e3y+VSOwUAYDJi/hoAYMzIsuzxeJKTk9UOAgAYtlAoVF9fHwwG8/PzU1JS1I4DAJhceP4IADBmJEmieAQAU1daWlpSUhL/kgMA+uP5IwAAAAAAAETD80cAAAAAAACIhvoRAGDYgsGg2hEAABMtFAop70kAACQg6kcAgOFxOp319fV+v1/tIACACaX8+9/R0cEKGACQgKgfAQBiFQwGGxsb29raQqEQL3gGgISivGEzGAw6HA6qSACQgFg/GwAQk56enubm5kAgIElSTk5OWlqa2okAABNKluWurq62trbe3l4hhE6nmzZtWmpqqiRJakcDAIw76kcAgKF1dHS0trbKsqzX6/Pz85OSktROBABQhyzLnZ2dbW1tylp4er0+IyMjLS2NKhIAxDfqRwCAaHp7e1taWjwejxDCYrFkZ2fzGwIAQKkitbe3h59FysjIsFgsfI8AgHhF/QgAMCiPx9Pc3BwMBjUaTXZ2NnPWAACRZFnu7u5ua2sLBAJCCK1Wa7FYMjIyNBpWWQWAeEP9CAAwsNbW1vb2diFEUlJSXl6ewWBQOxEAYDLqsy6SVqtVnkWiigQA8YT6EQCgr97e3ubmZq/XK4RIT0/PyspiPgIAIDqlitTe3h75LFJ6erpWq1U7GgBgDFA/AgD8E6/X29zc3Nvby3vWAADDpcxoa29v9/v9QghJktLS0jIyMvR6vdrRAACjQv0IAPB3siy3tbW1tbUJIQwGQ35+PnPWAAAj4/V629vb3W63EMJqtSYnJ6udCAAwKtSPAABCCBEIBJqbm3t6egTvWQMAjBGPx9Pd3Z2bm6t2EADAaFE/AgCIjo6O1tZWWZZ1Ol1ubq7ZbFY7EQAAAIBJRKd2AACAyoLBYFtbmyzLJpMpLy9Pp+NbAwBgggSDQRbYBoApgeePAADC5XL5/f7MzEy1gwAAEojf7799+3ZqaioT3ABg8uOPzAAAkZKSonYEAEDCcblcsiwHg0G1gwAAhsbzRwAAAADU4fV6NRpNUlKS2kEAAEOgfgQAAAAAAIBoNGoHAABMkEAgwBwBAMAU4vF4urq6+IM3AEwGPH8EAAnB5XK1tLSYzeb8/Hy1swAAEJO7d+8qE9zS0tLS09P1er3aiQAgcbF+NgAkBJ1OJ8tyb29vKBTSaHj4FAAwBSQnJ/f29gYCgY6Ojo6O/9/e3QfHUd93HN+He37Q6Vmy8UNlGwM2CRgCIePgBHCgNJniJjBTQognBpLgAafDODKNW6dOgh0yNJOWTGMMaVKmJdNmGigp0IJ5kqEODmBIYqAEP0m2HOt0z0+7e/vQP7ZsLpLufLIeVjq9X39oVru/3f2eBB7d576/36ZDoVAsFguHw6Ioul0aAMw59B8BwFxRKpUCgQB/cwMAZpdCoZDJZAqFgv2tLMtNTU2xWIx2JACYTuRHAAAAAGY6uwspm82apmnvCQaDsVgsEonw0QgATAPyIwAAAACzRrFYtNuR7DcykiSFw+GmpqZQKOR2aQDQyMiPAAAAAMwy5XI5m81ms1ld1+09gUCgqakpGo2yzB8ATAXyIwBoHPl8PpfL8YQ1AMDcUSgUstms044kiqLTjsS8NgCYRORHANAIDMMYGhrK5/OCIHR2dsZiMbcrAgBg+hiGkcvlstmsqqqCIEiS1NPTQyMSAEwi8iMAmPVyuVw8HjcMQxTFlpaW1tZWPnEFAMxNmqZls1lBENrb292uBQAaCvkRAMxi5XJ5aGioWCwKguD3+7u6uvx+v9tFAQAAAGg0HrcLAACcoXQ6nUgkTNOk7QgAgDrZM74jkUg0GnW7FgCYTciPAGD2URRlaGjIXuIhFAp1dnZ6vV63iwIAYBbI5XL5fF7XdfIjABgX8iMAmE1M0xweHs5kMoIgyLLc3t7e1NTkdlEAAMwa4XDYMAw+dwGA8WL9IwCYNYrF4tDQULlcFgQhHA53dnZ6PHwMAADAJLMsiynhADACbzwAYBYwDGN4eNh+oIwsyx0dHXTdAwAwFYrF4uDgYCgUikQikUhEkiS3KwKAGYH+IwCY6TKZzPDwsGmagiA0NTW1t7fLsux2UQAANKbh4eFUKmVvi6IYDocjkUg4HCZIAjDHkR8BwMxVuU52IBDo7Oz0+/1uFwUAQINTFMVZZtveI4qi3ZEUDof5FAfA3ER+BAAzlGVZR44cMQxDkqTW1tbm5mbWYgAAYDopipLP5/P5vL34oC0QCNhNST6fz8XaAGCakR8BwMyVyWSKxWJHRwfrZAMA4CJVVQuFQj6ft5uCbV6vNxwOh8PhYDDIZzwAGh75EQAAAADURdf1QqFQKBSKxaLzTkqSJLsjKRQKsUwSgEZFfgQAAAAA42OaZrFYtLMkwzDsnYFAYOHChe4WBgBThPwIAAAAAM5cqVTK5/OFQiEajba1tbldDgBMCfIjAHCTpmmJRKKzs5OHuQAAMNtZllVtISTLsjRN4zmqAGYvZucCgJtOnTqVz+cTiYTbhQAAgImqsYq2oij9/f39/f3TWQ8ATCLyIwBwU3t7ezgcbmlpcbsQAAAwhTRNE0XR5/O5XQgAnCHmrwEAAADAlLMsyzTNGjPWFUUJBALTWRIA1I/8CAAAAABcVi6Xjx49KklSMBgMhULBYJDFkgDMKB63CwAAAACAua5cLsuybBhGoVAoFAqCIJAlAZhR6D8CgKmVy+USicS8efP4yw8AANSmqmrpfYZhOPudLMnv9wcCgRoLdQPAFCE/AoCpUiqV4vG4qqqCIESj0e7ubrcrAgAAs0a1LEkURb/fH3yfJPFMJADTgfwIACZfuVyOx+NO83lLS0tLSwsfFQIAgDNTLUsSBMHOkmKxGA93AzClyI8AYDIZhpFIJLLZrP2va1NTU1tbm8fDYnMAAGBy6Lpux0mKoiiKYv/JsWjRImbKA5hS5EcAMDlM00yn06lUyjRNQRBCoVB7ezt/yQEAgKljGIadIrW1tVUbo+u6IAh8mgVggsiPAGCiLMuykyO7nzwYDLa3twcCAbfrAgAAEIaGhjKZTEtLS3t7u9u1AJjFCKEBYEIymUwymbQ/2fN6ve3t7ZFIxO2iAAAA/p9lWaIo8skWgAmi/wgAzpCiKMPDw6VSSRAESZJaW1ubm5tZJBsAAMw09pu+an+llEqloaGhQCDg9/vtr/w9A2A0+o8AYNw0TUskEvl8XhAEURRjsVhra6ssy27XBQAAMIbaeZCqqpqmaZrmDPb5fE6c5PP5iJMACPQfAcC46Lo+PDycy+Xsb6PRaFtbm9frdbcqAACAM+Yswq2qqqqq9qx8hyiKXq/X7/f7/X6fz+f3+1mKG5ibyI8AYBxUVe3v7xcEIRaLtbS0kBwBAIAGo+u6WqFcLo8YIMuyHSQ5oRINSsBcQH4EAOOTTCZDoRCLUAIAgLnAsqxyuex0J6mqappm5YD58+eHw2G3ygMwbciPAAAAAAB1sSxL07TKBqVFixZV68gul8uapvl8Plq2gQZAfgQAAAAAmHypVGp4eDgajXZ3d7tdC4CJYuUzAPgDpmlmMplAIBAMBt2uBQAAYBYTRdFeI6nGmOHhYa/X6/P5fD4fT7MFZjL6jwDgD8Tj8XQ6HQwGFyxY4HYtAAAAjUzX9SNHjjjfSpJkB0ler9cOlbxeryRJLlYIwEH/EQD8gZaWlnw+H41G3S4EAACg8bW0tGiapmlauVw2TVNRFEVRKgfIsuxkSU6uRKgETD/6jwAAAAAALrNX5raX3C6Xy/aGYRhjDrZDpXA43NraOs11AnMW/UcAAAAAAJeNuViSaZpOllQZKtl8Pl+NC+ZyOY/HEwgERFGc4tqBOYH8CMCcY5pmNpuNxWL8MQEAADCTSZJUI1TyeKq+n7Us69SpU5Zl9fT0VBtmWRZ/DQL1Iz8CMIeYpplOp1OplGmasiyzyBEAAMCsM2aoNIJpmqFQSNf1GhlTMplMpVIej8fr9TpfbbIs8zA4YATyIwBzgmEY6XQ6nU6bpikIgsfj4eMmAACARiXL8vz582uP0XXdsiy7lWn0UVEUZVm2syQnVKpMl/hjEnMN62cDaHC6rieTyWw2a/9zFwgEWltbw+Gw23UBAADATaZp6u8rl8vOtr240mlPnz9/Pn9SYk6h/whAw9J1PZVKZTIZOzny+/2tra2RSMTtugAAAOA+SZJ8Pt+Yi3BbluVkSZW5kr1h97NLklTtyoVC4eTJk6FQqEYPlGmaNa4AzEDkRwAakKqqqVQqn8/TcwQAAIDxEkXR6/V6vd4xj5qmaRhGjZWVDMOwLKv2XJ/jx4+rqiqPRZIk+2vlxkRfEjBh5EcAGkqxWEylUsVi0f42HA63tLQEg0F3qwIAAEDDOG2gE41GQ6FQ7fzIniJX51w5QRBGJEpdXV3VarDvy/JMqJ8dd5qmaZqmZVlOAFq5EYlEWP8IQCOwLCuTyaTTaXv5Q1EUY7FYc3NztU+NAAAAAHcZVdj9Tc7XMd+zL1u2rFpClEgkkslkc3NzR0dHtVunUilRFO01wis37IjK3jNprxPTQlVVQRB8Pl+1312hUMjlcpUJkRMY1ZMLtbe3038EYHYzTdNe5Mj+6EaSpObm5ubmZh65CgAAgJnMnq122mH2m/wR0VKNfOe0yzNZljU8PFz7pnaEZGdJ9qXsUu2Aqaurq9qJqqoahuHz+WrM75uzdF3XNM3etn9NgiDYOY71vhrb0Wi0paWl2sX7+/sFQViyZEm1/6g0TcvlcrUrdH7v9q++Ml70+Xz8RgHMbv39/XbPkSzLds8RyREAAAAahv1mvv44pr29vaWlpXZ+FIlEKttPRvehOJnF6NNrV5JMJvP5fEdHR3Nz85gDyuXy0aNH7e3KRicnqLKN2HaGeb3ezs7OandPJBKaprW0tAQCgTEHaJqWSCRq1O8Yke/Y26FQqL29vdopR44c0XV94cKF1e5eKpV+97vf1XP3MVW7rM3j8VTrVrMFg8H29vaJ9J2RHwGY3cLhcD6fb2lpaWpqYmVBAAAAzHGiKNaOeCRJmjdv3piHRq+DI7yfpDjbtf/k9nq9fr+/RgGVAceImVP1LAVVO0MpFouKokSj0WoDDMPI5/OnvUs1tX+wdvhSI8GRJMleXsP+GTqRjX2i0+ElVKRplSNr372np6d28YFAoPZP77RY/wjA7Ga37zJDGwAAAJgVnKan0SvvjO6gGdEDJUlSKBSqduV8Pm8YRigUqrYKqq7rhUKhniIr5zQ4kZksy36/v9ophmFU5kGNh/wIAAAAAAAAtTDXA8CMZi+Pnc1m3S4EAAAAAOYu8iMAM1oulxseHk4mk24XAgAAAABzF+tnA5jRmpqa8vl8NBq1LKtRJxIDAAAAwAzH+kcAAAAAAACohflrANyn67rbJQAAAAAAqmL+GgDXWJZVKBTS6bSiKD09PZXPyAQAAAAAzBzkRwBcoOt6JpPJZrN255EoiqVSKRKJuF0XAAAAAGAM5EcAplWxWEyn04VCwf5WluVYLBaLxTwe/jkCAAAAgBmKN2wApoOu6+l0OpfLOUsdRSKRWCwWCoXcLQwAAAAAcFrkRwCmlr3CUbFYtL+l4QgAAAAAZh3evwGYEqZp5nK5TCajqqq9JxAIxGKxaDQqiqK7tQEAAAAAxoX8CMAkUxQlk8nkcjnLsgRBEEUxGo3GYrFAIOB2aQAAAACAM0F+BGDSFAqFRCLhNBz5/f6mpqampiZJktwtDAAAAAAwEeRHACaTqqqyLNuxkc/nc7scAAAAAMAkEO0JJgAwcZZlZbPZaDRKwxEAAAAANBLyIwAAAAAAANRCjwCAeum6Ho/HT5486XYhAAAAAIBpxfpHAMYhnU4LglAul71er9u1AAAAAACmCfPXAIxDKpXy+/2hUMjtQgAAAAAA04f8CAAAAAAAALWw/hGA/1cul5PJ5MDAALEyAAAAAKAS6x8Bc51hGNlsNpvNappm7ykUCpFIxN2qAAAAAAAzB/kRMEdZllUoFHK5XKFQcBqOgsFgNBpleSMAAAAAQCXyI2BusSyrWCwWCoV8Pm8Yhr3T7/dHo9FoNOrx8G8CAAAAAGAk3isCc0WxWMzlcvl83jRNe4/H44lGo01NTT6fz93aAAAAAAAzGfkR0OAURcnlcrlczuk2kmU5EolEo9FgMOhubQAAAACAWYH8CGhMqqrasZGu6/YeSZKc2EgURXfLAwAAAADMIuRHQGOKx+OlUkkQBEmS7LWN6DYCAAAAAJwZ8iOgMUWjUTs5CofDkiS5XQ4AAAAAYBYTned2AwAAAAAAAKPRlQDMSul0+tixY4VCwe1CAAAAAACNj/wImJU0TdM0LZ/Pu10IAAAAAKDxMX8NmJVUVVUUJRKJyLLsdi0AAAAAgAZHfgTMRJZlFYtFv9/v8bDIPQAAAADAZbw1BWYQXdfz+XyhUCiVSpZltbW1tba2ul0UAAAAAGCuIz8C3KfreqFQyOfzdmxk7/R4PKIoulsYAAAAAAAC+RHgIlVV7W4jVVWdnT6fLxwORyKRQCDgYm0AAAAAADjIj4BpZS9sVCgUCoWCruvO/mAwGA6Hw+Gwz+dzsTwAAAAAAEYjPwKmg6ZpdmakKIozQ02W5UgkEg6Hg8GgJEnuVggAAAAAQDXkR8DUymQy2WxWURRnj8fjsWeoBYNBVjgCAAAAAMx85EfA1FJV1Q6PAoGAPUPN7/e7XRQAAAAAAOMgOlNpAEwFRVFUVQ2Hwx4PcS0AAAAAYFYiPwImpFgs5vP55uZm1r0GAAAAADQqGiKACUmlUsVi0ev1kh8BAAAAABoV+REwIdFo1Ov1BoNBtwsBAAAAAGCqMH8NqMqyrFKpVCgU2traJElyuxwAAAAAANxB/xEwUrlcLhQKxWKxWCzaAWswGIxEIm7XBQAAAACAO8iPAEEQBF3XS6WSnRnpuu7sl2U5FArJsuxibQAAAAAAuIv8CHOXYRh2ZlQqlTRNc/aLohgMBkOhUCgU8vv9LlYIAAAAAMBMQH6EuUXX9WKxqChKsVgsl8vOfjIjAAAAAACqIT/CnGCaZiqVspOjyv0+ny8UCtnJEStkAwAAAAAwJvIjzBWpVMpeDNvj8dh9RsFg0OPhfwEAAAAAAE6DN8+YEyRJamlp8Xg8wWDQ5/O5XQ4AAAAAALOJaHdkALOaoijxeFySpLPOOsvtWgAAAAAAaDT0H6ERSJKkKIooipZliaLodjkAAAAAADQU+o8wO2iaJghCjaln2Ww2GAx6vd5pLAoAAAAAgDmBB05hhrIsq1gsJhKJEydOHDp06NixY8lkssb4pqYmwiMAAAAAmKC3335748aN5557biQSCYfD55xzzu233/7222+PGCbWodrgcDi8cuXKu+6663e/+93oAkql0n333feRj3ykubnZ4/G0tbWtXr1669atb7755pm9ospixlV2nZU4J950002j737TTTeNvnI98vn84sWLz+DEKUL/EWYQwzCUCqZpOockSYpEIl1dXS6WBwAAAACN7d577926dathGCP2y7K8Y8eO3t5eZ089oYYTOFQb3NXVtW/fvp6eHmfP0NDQlVdeefDgwdoXHBf77va59Zddf4WhDWYAABO6SURBVCX2NUVR9Pv9J0+ebG5udg6l0+l58+apqmqPH1f9d9555+7du+25ODMhuqH/CC5TVTWTyZw6derYsWOHDx8eHBxMJpPFYtE0TVmWI5FIR0fHwoULlyxZQngEAAAAAFPn7/7u7+6++27TNG+55ZZXXnkll8sVCoX9+/ffeuutpmlu2bLl7//+753B1h+qsXP0KUNDQ4899tiSJUtOnTr1V3/1V5Vjent7Dx48eNZZZ/3oRz8aGBhQVTWdTu/bt2/Hjh0f/OAHJ/4a6y97vJVceeWViqI88sgjlTv/5V/+RVGUq666arx17tu37x/+4R8qAzvX0X+E6VajyUgQBJ/PFwwGA4FAIBCosdoRAAAAAGASDQwMLFu2TNO0f/zHf/zCF74w4uiPfvSjDRs2+Hy+Q4cOLViwYPTplT0+dR59+eWXP/rRj3Z2dp46dcrZ2dbWlkwm9+3bd9lll03wFdVTW41D9VdiX+SRRx757Gc/e9FFF7322mvOoYsuuujAgQM/+clPbrzxxmo3Gk3TtFWrVpXL5V/96lfBYLD+E6cUz1/DtBoYGFAUpXKPJEl2WmTHRpJETxwAAAAATLddu3Zpmnb99dePDo8EQfjCF77wxBNP/Pu///uuXbu+9a1vTcodL7jgAkEQMplM5c5CoSAIwtlnn33a08eMfmrHWONSfyW2T3/6062tra+//vobb7xx4YUXCoJw4MCBAwcOtLa2/tmf/dm4br1jx4633nprz549gUBgvGVPHd6rY1rZ8ZDX641Go52dnYsWLVq6dOlZZ53V1tYWCoUIjwAAAADAFc8884wgCLfddlu1AfahPXv2TNYdX3/9dUEQRnQzrVq1ShCEW2655b333pusG52Z8Vbi9/vt9bN/+MMf2nvsjc997nN+v7/++7711ls7d+783Oc+dwaz3qYU89cwaQzDyGaz5XK5s7Oz2phyuSxJkizL01kYAAAAAKC21tbWVCqVSCRaW1vHHDA8PNzR0dHW1jY8PDz66Ljmrw0PD+/du/euu+46evTotm3btm/f7ozcu3fv1VdfbU9bWbJkyYUXXnj++eevWbPm4x//+Ig3kvX3H53Z/LUzqOTNN9+88MILW1paBgcHBUGYN29eOp1+8803P/jBD9bZGGWa5kc/+tH//d//feeddzo6OmpXOM3IjzBpDMM4fPiwIAhLliwhIQIAAACAWcTr9eq6Xi6XPZ6xF7opl8s+n8/j8ZTL5dFH68mPRrvxxhv/6Z/+yev1Vu585513duzY8dhjj+VyOWfnggULvve9733mM5+p8+XUWVvtsuuspPIil1xyyauvvvrII49YlnXTTTddcskl+/fvP+2NHPfff/+mTZseeuihW265pZ4KpxP5EeplWZaqqoIg1JiBGY/HvV5vU1MTM9EAAAAAYBaZhv6jERYsWPD444/b08RGMwzjN7/5zcGDB/fv3//kk0/+9re/FUXx0Ucfve666+p9SXXUVk86c9pKKi+ya9eu22+//aqrrrIs67nnntu1a9eXvvSlOm/U39+/cuXKVatWvfjii85PjPwIs4BpmqVSSVEUVVVVVdV1XRCEcDg8f/58t0sDAAAAAEymSy+99Je//OXTTz/9iU98YswBTz/99DXXXHPppZe+8soro4/WP3+tXC4fOXLknnvuefjhhzs6On796193dXXVrs00za1bt377298e8XSzOk0wPzptJZUXyWQy8+fPL5VKgiAEg8GTJ082NTXVeaNPfvKTe/bseeONN84777wzrnDq0CSC3zNNU1GUTCYzNDQ0MDBw+PDhwcHBZDJZKBTs8EiWZRqLAAAAAKDxrF27VhCEBx98sNoA+5A9bCK8Xu/y5ct//OMfX3PNNfF4fOvWrac9RZKkLVu2CIJw8ODBCd59gk5bSSwWu/766y3LsizrhhtusMOjOj355JOapq1YsUKsYB+q3HYL/Udzmq7rmqapqqooiqZpmqaNGODxePx+v9/vDwQCfr+/2jxYAAAAAMCs1t/fv2zZsnK5/PDDD998880jjj788MPr16/3+XzvvffewoULR58+rvWzbe++++7KlSsFQTh48ODy5ctrl/fqq69ecskl1WbP1TaJ/UdjVjLiIn19fR/72Mfsjcsvv7z+G502IXI3wCEOmIsSiYQ9K80wjBGHvF6v/32BQIBlsAEAAABgLli0aNHOnTs3b968fv36vXv33nbbbStXrhRF8eDBgw8++KDdfPTtb397zPDozCxfvnzDhg27d+/eunXrT3/6U3vnypUr161bt2bNmhUrVnR2dlqWdfLkyaeeeuqee+4RBOHaa691Th/vo9bGq/5KRlizZs2ZFTBZCdcUof9oLjp27JjdaiSKot1YZKdFXq/X9Y44AAAAAIBb7rnnnm3btpmmOWK/JEnf/OY3v/a1r1U78Qz6jwRBGBwcXLZsmaIo+/fv/9CHPiTU7ME577zznnvuue7u7hrXHG+odNpDZ1xJ/TeqjfwIU6VcLmezWVEUq62ZLwhCJpMRBMGOjQiMAAAAAACOgwcPfv/733/22WdPnDhh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WMxms6lUKh6Pnzx58vjx4wMDA7VPNE2zxmQ0j8fT09OzcOHCefPmtbe3Nzc3h8Nhv99PeAQAAAAAwLRZu3bt+vXrL7744t27dx85ckTTtFwu984773znO99xxmzfvn3z5s19fX35fL5QKDz77LOf/OQnT3vlcZ11wQUXfOc730kmk+l0+qc//ekXv/jF017/j//4j//kT/7k8ssvf+KJJzKZjKIov/jFL9atW2c/f63GBRctWrRnzx7TNMd1982bN2/atOmFF17I5/MvvPDCV77ylS1bttiHent7N23atHfv3kKhsHfv3k2bNp22+Fnk95P9DMMwDMNZfsjedvbUmLC3bNmyagtU2yd6PB5WsAYAAAAAYIbr6+u7//77X3755Xg87vP5Fi9efPXVV99yyy0f+MAH7AEvvvji9u3b9+/fb5rmZZddtnXr1quuukoYay2hyj31n3X06NE777xz7969iqKce+65d9111/r16+0xtZe7fuqpp+6///79+/dnMpm2trbVq1dv3LjxqquuqnHBn/3sZ5s3b+7v7zcMw95T59137dp13333HTt2bPHixVu2bLntttucMh544IGdO3cODg4uXrz4jjvu6O3ttddRagCiZVn9/f2app12SSdJkpyZZc6kM1mWA4EA8RAAAAAAAIBj3759GzZsePvtt90uZHJ4BEGw168SBEEUxcpgaMR2taWwAAAAAAAAcPPNN2/ZsmXJkiW//vWvv/zlL2/YsMHtiiaNRxCE7u5uURRlWWbVIQAAAAAAgDOzdu3aG2+88fDhw4sXL77tttu+8pWvuF3RpKk1exAAAAAAAABgShoAAAAAAABqIT8CAAAAAABALeRHAAAAAAAAqIX8CAAAAAAAALWQHwEAAAAAgN87duzYwMCAvZ3P548ePWpvq6qaSCScYZlMplQqVZ5YOTiRSPT394+4snMFVVWPHz9+/PjxXC43Ja8Bk03+m7/5G7drAAAAAAAAM8Ljjz/+zDPPPP/88+++++6iRYs2btwYj8f379/f0dGxdevWn/zkJ3/+538uCEIul7viiiu6urpWrFhhn3jy5ElnsCAIO3fuPH78+K9+9atLL73UHvDb3/7WucJLL7309a9/fWhoKBwOL1y40K0Xi/qJlmW5XQMAAAAAAJhBstns7bff/pGPfGTlypVXXHHFpz/96Z/97GeCIKxbt+6xxx4TBGHbtm2tra0LFiy4/vrr7VO+//3vO4PPPffcz372s+eff/7atWv37NlTeWX7Ci+88MK//uu/XnfddVdffbUkMTVqFuCXBAAAAAAAfs+yrN7e3q9+9avxeLyjo2P0gBdeeOGcc85pb28XBOHw4cOvvvpqqVSqHHz55Zf/4Ac/eOihh9577z1nQOUVli9ffsMNNwwODv7FX/zFNLwiTJzH7QIAAAAAAMAMsnnz5htuuOHCCy/cv3//4ODg+eefL4pi5YDnnnsumUy+++67sizHYrFTp04tXbr0rLPOcgZfe+21y5cvVxTl4osvHhwcPHr06NKlS4PBoHOF+fPnz58/XxCE6667brpfHs4I89cAAAAAAMD/27179w9+8IPVq1efffbZN99885e//OV58+ZdcMEF69at27Zt25NPPvnFL37x7rvvFgThn//5nwOBgDN/LZlMOoPXrFnz0EMPDQ4O3nrrrWvWrHEGOFf4wAc+sHfv3sHBwY9//OMbNmxw7dWibuRHAAAAAABgbJZlKYpS2TpU5+BcLhcOh2usbZTJZEKhkNfrnbRaMZX+D8EIbOTPYe07AAAAAElFTkSuQmCC
PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiID8+CjxvdHJzX2NvbmZpZyB2ZXJzaW9uPSIxLjAiIGluaXQ9IkZyYW1ld29yayI+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJGcm9udGVuZDo6TW9kdWxlIyMjQWRtaW5HZW5lcmFsQ2F0YWxvZyIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5Gcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWRtaW5HZW5lcmFsQ2F0YWxvZyBjb25maWd1cmF0aW9uIGluIHRoZSBhZG1pbiBhcmVhLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPkZyYW1ld29yazwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkZyb250ZW5kOjpBZG1pbjo6TW9kdWxlUmVnaXN0cmF0aW9uPC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPEZyb250ZW5kTW9kdWxlUmVnPgogICAgICAgICAgICAgICAgPEdyb3VwPmFkbWluPC9Hcm91cD4KICAgICAgICAgICAgICAgIDxEZXNjcmlwdGlvbj5BZG1pbjwvRGVzY3JpcHRpb24+CiAgICAgICAgICAgICAgICA8VGl0bGU+R2VuZXJhbCBDYXRhbG9nPC9UaXRsZT4KICAgICAgICAgICAgICAgIDxOYXZCYXJOYW1lPkFkbWluPC9OYXZCYXJOYW1lPgogICAgICAgICAgICAgICAgPE5hdkJhck1vZHVsZT4KICAgICAgICAgICAgICAgICAgICA8TW9kdWxlPktlcm5lbDo6T3V0cHV0OjpIVE1MOjpOYXZCYXJNb2R1bGVBZG1pbjwvTW9kdWxlPgogICAgICAgICAgICAgICAgICAgIDxOYW1lIFRyYW5zbGF0YWJsZT0iMSI+R2VuZXJhbCBDYXRhbG9nPC9OYW1lPgogICAgICAgICAgICAgICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkNyZWF0ZSBhbmQgbWFuYWdlIHRoZSBHZW5lcmFsIENhdGFsb2cuPC9EZXNjcmlwdGlvbj4KICAgICAgICAgICAgICAgICAgICA8QmxvY2s+VGlja2V0PC9CbG9jaz4KICAgICAgICAgICAgICAgICAgICA8UHJpbz40MTA8L1ByaW8+CiAgICAgICAgICAgICAgICA8L05hdkJhck1vZHVsZT4KICAgICAgICAgICAgPC9Gcm9udGVuZE1vZHVsZVJlZz4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJHZW5lcmFsQ2F0YWxvZ1ByZWZlcmVuY2VzIyMjQ29tbWVudDIiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMCI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+UGFyYW1ldGVycyBmb3IgdGhlIGV4YW1wbGUgY29tbWVudCAyIG9mIHRoZSBnZW5lcmFsIGNhdGFsb2cgYXR0cmlidXRlcy48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5HZW5lcmFsQ2F0YWxvZzwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkdlbmVyYWxDYXRhbG9nOjpQcmVmZXJlbmNlczwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJNb2R1bGUiPktlcm5lbDo6T3V0cHV0OjpIVE1MOjpHZW5lcmFsQ2F0YWxvZ1ByZWZlcmVuY2VzR2VuZXJpYzwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTGFiZWwiPkNvbW1lbnQyPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJEZXNjIj5EZWZpbmUgdGhlIGdlbmVyYWwgY2F0YWxvZyBjb21tZW50IDIuPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJCbG9jayI+VGV4dEFyZWE8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkNvbHMiPjUwPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJSb3dzIj41PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJQcmVmS2V5Ij5Db21tZW50MjwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IkdlbmVyYWxDYXRhbG9nUHJlZmVyZW5jZXMjIyNQZXJtaXNzaW9ucyIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIwIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5QYXJhbWV0ZXJzIGZvciB0aGUgZXhhbXBsZSBwZXJtaXNzaW9uIGdyb3VwcyBvZiB0aGUgZ2VuZXJhbCBjYXRhbG9nIGF0dHJpYnV0ZXMuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+R2VuZXJhbENhdGFsb2c8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5HZW5lcmFsQ2F0YWxvZzo6UHJlZmVyZW5jZXM8L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTW9kdWxlIj5LZXJuZWw6Ok91dHB1dDo6SFRNTDo6R2VuZXJhbENhdGFsb2dQcmVmZXJlbmNlc0dlbmVyaWM8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkxhYmVsIj5QZXJtaXNzaW9uczwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iRGVzYyI+RGVmaW5lIHRoZSBncm91cCB3aXRoIHBlcm1pc3Npb25zLjwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQmxvY2siPlBlcm1pc3Npb248L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkNsYXNzIj5JVFNNOjpDb25maWdJdGVtOjpDbGFzczwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iUHJlZktleSI+UGVybWlzc2lvbnM8L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJMb2FkZXI6OkFnZW50OjpDb21tb25KUyMjIzEwMC1HZW5lcmFsQ2F0YWxvZyIgUmVxdWlyZWQ9IjEiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5MaXN0IG9mIEpTIGZpbGVzIHRvIGFsd2F5cyBiZSBsb2FkZWQgZm9yIHRoZSBhZ2VudCBpbnRlcmZhY2UuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+RnJhbWV3b3JrPC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+Q29yZTo6V2ViPC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPEFycmF5PgogICAgICAgICAgICAgICAgPEl0ZW0+dGhpcmRwYXJ0eS9qc2NvbG9yXzEuNC4xL2pzY29sb3IuanM8L0l0ZW0+CiAgICAgICAgICAgIDwvQXJyYXk+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgo8L290cnNfY29uZmlnPgo=
IyAtLQojIEtlcm5lbC9MYW5ndWFnZS9iZ19HZW5lcmFsQ2F0YWxvZy5wbSAtIHRyYW5zbGF0aW9uIGZpbGUKIyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxNCBPVFJTIEFHLCBodHRwOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6OmJnX0dlbmVyYWxDYXRhbG9nOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnN1YiBEYXRhIHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CgogICAgIyBUZW1wbGF0ZTogQUFBR2VuZXJhbENhdGFsb2cKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Z1bmN0aW9uYWxpdHknfSA9ICfQpNGD0L3QutGG0LjQvtC90LDQu9C90L7RgdGCJzsKCiAgICAjIFRlbXBsYXRlOiBBZG1pbkdlbmVyYWxDYXRhbG9nCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydHZW5lcmFsIENhdGFsb2cgTWFuYWdlbWVudCd9ID0gJ9Cj0L/RgNCw0LLQu9C10L3QuNC1INC90LAg0L7RgdC90L7QstC90LjRjyDQutCw0YLQsNC70L7Qsyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgQ2F0YWxvZyBJdGVtJ30gPSAn0JTQvtCx0LDQstC4INC10LvQtdC80LXQvdGCINC60YrQvCDQutCw0YLQsNC70L7Qs9CwJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBDYXRhbG9nIENsYXNzJ30gPSAn0JTQvtCx0LDQstC4INC60LvQsNGBINCyINC60LDRgtCw0LvQvtCz0LAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2F0YWxvZyBDbGFzcyd9ID0gJ9Ca0LvQsNGB0L7QstC1INCyINC60LDRgtCw0LvQvtCz0LAnOwoKICAgICMgU3lzQ29uZmlnCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcmVhdGUgYW5kIG1hbmFnZSB0aGUgR2VuZXJhbCBDYXRhbG9nLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWRtaW5HZW5lcmFsQ2F0YWxvZyBjb25maWd1cmF0aW9uIGluIHRoZSBhZG1pbiBhcmVhLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0dlbmVyYWwgQ2F0YWxvZyd9ID0gJ9Ce0YHQvdC+0LLQtdC9INC60LDRgtCw0LvQvtCzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBleGFtcGxlIGNvbW1lbnQgMiBvZiB0aGUgZ2VuZXJhbCBjYXRhbG9nIGF0dHJpYnV0ZXMuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIGV4YW1wbGUgcGVybWlzc2lvbiBncm91cHMgb2YgdGhlIGdlbmVyYWwgY2F0YWxvZyBhdHRyaWJ1dGVzLid9ID0KICAgICAgICAnJzsKCn0KCjE7Cg==
IyAtLQojIEtlcm5lbC9MYW5ndWFnZS9jc19HZW5lcmFsQ2F0YWxvZy5wbSAtIHRyYW5zbGF0aW9uIGZpbGUKIyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxNCBPVFJTIEFHLCBodHRwOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6OmNzX0dlbmVyYWxDYXRhbG9nOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnN1YiBEYXRhIHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CgogICAgIyBUZW1wbGF0ZTogQUFBR2VuZXJhbENhdGFsb2cKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Z1bmN0aW9uYWxpdHknfSA9ICdGdW5rY2lvbmFsaXRhJzsKCiAgICAjIFRlbXBsYXRlOiBBZG1pbkdlbmVyYWxDYXRhbG9nCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydHZW5lcmFsIENhdGFsb2cgTWFuYWdlbWVudCd9ID0gJ1NwcsOhdmEgSGxhdm7DrWhvIEthdGFsb2d1JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBDYXRhbG9nIEl0ZW0nfSA9ICdQw7hpZGF0IFBvbG/FuGt1IEthdGFsb2d1JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBDYXRhbG9nIENsYXNzJ30gPSAnUMO4aWRhdCBUw7jDrWR1IEthdGFsb2d1JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhdGFsb2cgQ2xhc3MnfSA9ICdUw7jDrWR5IEthdGFsb2d1JzsKCiAgICAjIFN5c0NvbmZpZwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JlYXRlIGFuZCBtYW5hZ2UgdGhlIEdlbmVyYWwgQ2F0YWxvZy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFkbWluR2VuZXJhbENhdGFsb2cgY29uZmlndXJhdGlvbiBpbiB0aGUgYWRtaW4gYXJlYS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydHZW5lcmFsIENhdGFsb2cnfSA9ICdIbGF2bsOtIEthdGFsb2cnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIGV4YW1wbGUgY29tbWVudCAyIG9mIHRoZSBnZW5lcmFsIGNhdGFsb2cgYXR0cmlidXRlcy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgZXhhbXBsZSBwZXJtaXNzaW9uIGdyb3VwcyBvZiB0aGUgZ2VuZXJhbCBjYXRhbG9nIGF0dHJpYnV0ZXMuJ30gPQogICAgICAgICcnOwoKfQoKMTsK
IyAtLQojIEtlcm5lbC9MYW5ndWFnZS9jdF9HZW5lcmFsQ2F0YWxvZy5wbSAtIHRyYW5zbGF0aW9uIGZpbGUKIyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxNCBPVFJTIEFHLCBodHRwOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6OmN0X0dlbmVyYWxDYXRhbG9nOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnN1YiBEYXRhIHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CgogICAgIyBUZW1wbGF0ZTogQUFBR2VuZXJhbENhdGFsb2cKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Z1bmN0aW9uYWxpdHknfSA9ICdGdW5jaW9uYWxpdGF0JzsKCiAgICAjIFRlbXBsYXRlOiBBZG1pbkdlbmVyYWxDYXRhbG9nCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydHZW5lcmFsIENhdGFsb2cgTWFuYWdlbWVudCd9ID0gJ0dlc3Rpw7MgZGVsIGNhdMOgbGVnIGdlbmVyYWwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIENhdGFsb2cgSXRlbSd9ID0gJ0FmZWdpciBhcnRpY2xlIGRlIGNhdMOgbGVnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBDYXRhbG9nIENsYXNzJ30gPSAnQWZlZ2lyIGNsYXNzZSBkZSBjYXTDoGxlZyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYXRhbG9nIENsYXNzJ30gPSAnQ2xhc3NlIGRlIGNhdMOhbGVnJzsKCiAgICAjIFN5c0NvbmZpZwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JlYXRlIGFuZCBtYW5hZ2UgdGhlIEdlbmVyYWwgQ2F0YWxvZy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFkbWluR2VuZXJhbENhdGFsb2cgY29uZmlndXJhdGlvbiBpbiB0aGUgYWRtaW4gYXJlYS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnR2VuZXJhbCBDYXRhbG9nJ30gPSAnQ2F0w6BsZWcgZ2VuZXJhbCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgZXhhbXBsZSBjb21tZW50IDIgb2YgdGhlIGdlbmVyYWwgY2F0YWxvZyBhdHRyaWJ1dGVzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgZXhhbXBsZSBwZXJtaXNzaW9uIGdyb3VwcyBvZiB0aGUgZ2VuZXJhbCBjYXRhbG9nIGF0dHJpYnV0ZXMuJ30gPSAnJzsKCiAgICAjCiAgICAjIE9CU09MRVRFIEVOVFJJRVMgRk9SIFJFRkVSRU5DRSwgRE8gTk9UIFRSQU5TTEFURSEKICAgICMKCn0KCjE7Cg==
IyAtLQojIEtlcm5lbC9MYW5ndWFnZS9kYV9HZW5lcmFsQ2F0YWxvZy5wbSAtIHRyYW5zbGF0aW9uIGZpbGUKIyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxNCBPVFJTIEFHLCBodHRwOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6OmRhX0dlbmVyYWxDYXRhbG9nOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnN1YiBEYXRhIHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CgogICAgIyBUZW1wbGF0ZTogQUFBR2VuZXJhbENhdGFsb2cKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Z1bmN0aW9uYWxpdHknfSA9ICdGdW5rdGlvbmFsaXRldCc7CgogICAgIyBUZW1wbGF0ZTogQWRtaW5HZW5lcmFsQ2F0YWxvZwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnR2VuZXJhbCBDYXRhbG9nIE1hbmFnZW1lbnQnfSA9ICdHZW5lcmFsIEthdGFsb2cgTWFuYWdlbWVudCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgQ2F0YWxvZyBJdGVtJ30gPSAnVGlsZsO4aiBrYXRhbG9nIHBvc3QnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIENhdGFsb2cgQ2xhc3MnfSA9ICdUaWxmw7hqIEthdGFsb2cga2xhc3NlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhdGFsb2cgQ2xhc3MnfSA9ICdLYXRhbG9nIEtsYXNzZSc7CgogICAgIyBTeXNDb25maWcKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyZWF0ZSBhbmQgbWFuYWdlIHRoZSBHZW5lcmFsIENhdGFsb2cuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZG1pbkdlbmVyYWxDYXRhbG9nIGNvbmZpZ3VyYXRpb24gaW4gdGhlIGFkbWluIGFyZWEuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnR2VuZXJhbCBDYXRhbG9nJ30gPSAnR2VuZXJhbCBLYXRhbG9nJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBleGFtcGxlIGNvbW1lbnQgMiBvZiB0aGUgZ2VuZXJhbCBjYXRhbG9nIGF0dHJpYnV0ZXMuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIGV4YW1wbGUgcGVybWlzc2lvbiBncm91cHMgb2YgdGhlIGdlbmVyYWwgY2F0YWxvZyBhdHRyaWJ1dGVzLid9ID0KICAgICAgICAnJzsKCn0KCjE7Cg==
IyAtLQojIEtlcm5lbC9MYW5ndWFnZS9kZV9HZW5lcmFsQ2F0YWxvZy5wbSAtIHRyYW5zbGF0aW9uIGZpbGUKIyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxNCBPVFJTIEFHLCBodHRwOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6OmRlX0dlbmVyYWxDYXRhbG9nOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnN1YiBEYXRhIHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CgogICAgIyBUZW1wbGF0ZTogQUFBR2VuZXJhbENhdGFsb2cKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Z1bmN0aW9uYWxpdHknfSA9ICdGdW5rdGlvbmFsaXTDpHQnOwoKICAgICMgVGVtcGxhdGU6IEFkbWluR2VuZXJhbENhdGFsb2cKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0dlbmVyYWwgQ2F0YWxvZyBNYW5hZ2VtZW50J30gPSAnR2VuZXJhbC1LYXRhbG9nLVZlcndhbHR1bmcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIENhdGFsb2cgSXRlbSd9ID0gJ0thdGFsb2ctRWludHJhZyBoaW56dWbDvGdlbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgQ2F0YWxvZyBDbGFzcyd9ID0gJ0thdGFsb2ctS2xhc3NlIGhpbnp1ZsO8Z2VuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhdGFsb2cgQ2xhc3MnfSA9ICdLYXRhbG9nLUtsYXNzZSc7CgogICAgIyBTeXNDb25maWcKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyZWF0ZSBhbmQgbWFuYWdlIHRoZSBHZW5lcmFsIENhdGFsb2cuJ30gPSAnR2VuZXJhbC1LYXRhbG9nIGVyc3RlbGxlbiB1bmQgdmVyd2FsdGVuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWRtaW5HZW5lcmFsQ2F0YWxvZyBjb25maWd1cmF0aW9uIGluIHRoZSBhZG1pbiBhcmVhLid9ID0KICAgICAgICAnRnJvbnRlbmRtb2R1bC1SZWdpc3RyYXRpb24gZGVyIEFkbWluR2VuZXJhbENhdGFsb2cgS29uZmlndXJhdGlvbiBpbSBBZG1pbi1CZXJlaWNoLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydHZW5lcmFsIENhdGFsb2cnfSA9ICdHZW5lcmFsLUthdGFsb2cnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIGV4YW1wbGUgY29tbWVudCAyIG9mIHRoZSBnZW5lcmFsIGNhdGFsb2cgYXR0cmlidXRlcy4nfSA9CiAgICAgICAgJ1BhcmFtZXRlciBmw7xyIGRlbiBCZWlzcGllbC1Lb21tZW50YXIgMiBkZXIgR2VuZXJhbC1LYXRhbG9nLUF0dHJpYnV0ZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIGV4YW1wbGUgcGVybWlzc2lvbiBncm91cHMgb2YgdGhlIGdlbmVyYWwgY2F0YWxvZyBhdHRyaWJ1dGVzLid9ID0KICAgICAgICAnUGFyYW1ldGVyIGbDvHIgZGllIHp1Z3JpZmZzYmVyZWNodGlndGUgR3J1cHBlIGRlciBHZW5lcmFsLUthdGFsb2ctQXR0cmlidXRlLic7Cgp9CgoxOwo=
IyAtLQojIEtlcm5lbC9MYW5ndWFnZS9lc19HZW5lcmFsQ2F0YWxvZy5wbSAtIHRyYW5zbGF0aW9uIGZpbGUKIyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxNCBPVFJTIEFHLCBodHRwOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6OmVzX0dlbmVyYWxDYXRhbG9nOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnN1YiBEYXRhIHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CgogICAgIyBUZW1wbGF0ZTogQUFBR2VuZXJhbENhdGFsb2cKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Z1bmN0aW9uYWxpdHknfSA9ICdGdW5jaW9uYWxpZGFkJzsKCiAgICAjIFRlbXBsYXRlOiBBZG1pbkdlbmVyYWxDYXRhbG9nCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydHZW5lcmFsIENhdGFsb2cgTWFuYWdlbWVudCd9ID0gJ0dlc3Rpw7NuIGRlbCBDYXTDoWxvZ28gR2VuZXJhbCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgQ2F0YWxvZyBJdGVtJ30gPSAnQcOxYWRpciBFbGVtZW50byBhbCBDYXTDoWxvZ28nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIENhdGFsb2cgQ2xhc3MnfSA9ICdBw7FhZGlyIENsYXNlIGFsIENhdMOhbG9nbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYXRhbG9nIENsYXNzJ30gPSAnQ2xhc2UgZGUgQ2F0w6Fsb2dvJzsKCiAgICAjIFN5c0NvbmZpZwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JlYXRlIGFuZCBtYW5hZ2UgdGhlIEdlbmVyYWwgQ2F0YWxvZy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFkbWluR2VuZXJhbENhdGFsb2cgY29uZmlndXJhdGlvbiBpbiB0aGUgYWRtaW4gYXJlYS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydHZW5lcmFsIENhdGFsb2cnfSA9ICdDYXTDoWxvZ28gR2VuZXJhbCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgZXhhbXBsZSBjb21tZW50IDIgb2YgdGhlIGdlbmVyYWwgY2F0YWxvZyBhdHRyaWJ1dGVzLid9ID0KICAgICAgICAnUGFyw6FtZXRyb3MgcGFyYSBlbCBlamVtcGxvIGNvbWVudGFyaW8gMiBkZSBsb3MgYXRyaWJ1dG9zIGRlbCBjYXTDoWxvZ28gZ2VuZXJhbC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIGV4YW1wbGUgcGVybWlzc2lvbiBncm91cHMgb2YgdGhlIGdlbmVyYWwgY2F0YWxvZyBhdHRyaWJ1dGVzLid9ID0KICAgICAgICAnUGFyw6FtZXRyb3MgcGFyYSBsb3MgcGVybWlzb3MgZGUgZWplbXBsbyBkZSBsb3MgYXRyaWJ1dG9zIGRlbCBjYXTDoWxvZ28gZ2VuZXJhbC4nOwoKfQoKMTsK
IyAtLQojIEtlcm5lbC9MYW5ndWFnZS9mYV9HZW5lcmFsQ2F0YWxvZy5wbSAtIHRyYW5zbGF0aW9uIGZpbGUKIyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxNCBPVFJTIEFHLCBodHRwOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6OmZhX0dlbmVyYWxDYXRhbG9nOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnN1YiBEYXRhIHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CgogICAgIyBUZW1wbGF0ZTogQUFBR2VuZXJhbENhdGFsb2cKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Z1bmN0aW9uYWxpdHknfSA9ICfaqdin2LHaqdix2K/bjCc7CgogICAgIyBUZW1wbGF0ZTogQWRtaW5HZW5lcmFsQ2F0YWxvZwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnR2VuZXJhbCBDYXRhbG9nIE1hbmFnZW1lbnQnfSA9ICfZhdiv24zYsduM2Kog2YHZh9ix2LPYqiDYudmF2YjZhduMJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBDYXRhbG9nIEl0ZW0nfSA9ICfYp9i22KfZgdmHINqp2LHYr9mGINuM2qkg2YLZhNmFINmB2YfYsdiz2KonOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIENhdGFsb2cgQ2xhc3MnfSA9ICfYp9i22KfZgdmHINqp2LHYr9mGINqp2YTYp9izINmB2YfYsdiz2KrbjCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYXRhbG9nIENsYXNzJ30gPSAn2YHZh9ix2LPYqiDaqdmE2KfYs9uMJzsKCiAgICAjIFN5c0NvbmZpZwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JlYXRlIGFuZCBtYW5hZ2UgdGhlIEdlbmVyYWwgQ2F0YWxvZy4nfSA9ICfYs9in2K7YqiDZiCDZhdiv24zYsduM2Kog2YHZh9ix2LPYqiDYudmF2YjZhduMJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZG1pbkdlbmVyYWxDYXRhbG9nIGNvbmZpZ3VyYXRpb24gaW4gdGhlIGFkbWluIGFyZWEuJ30gPQogICAgICAgICfYq9io2Kog2YXYp9qY2YjZhCDYqNix2KfbjCDZvtuM2qnYsdio2YbYr9uMINmB2YfYsdiz2Kog2LnZhdmI2YXbjCDYr9ixINio2K7YtCDZhdiv24zYsduM2KonOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnR2VuZXJhbCBDYXRhbG9nJ30gPSAn2YHZh9ix2LPYqiDYudmF2YjZhduMJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBleGFtcGxlIGNvbW1lbnQgMiBvZiB0aGUgZ2VuZXJhbCBjYXRhbG9nIGF0dHJpYnV0ZXMuJ30gPQogICAgICAgICfZvtin2LHYp9mF2KrYsdmH2KfbjNuMINio2LHYp9uMINiq2YjYttuM2K0g2YbZhdmI2YbZhyDbsiDZhdix2KjZiNi3INio2Ycg2YjbjNqY2q/bjOKAjNmH2KfbjCDZgdmH2LHYs9iqINi52YXZiNmF24wnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIGV4YW1wbGUgcGVybWlzc2lvbiBncm91cHMgb2YgdGhlIGdlbmVyYWwgY2F0YWxvZyBhdHRyaWJ1dGVzLid9ID0KICAgICAgICAn2b7Yp9ix2KfZhdiq2LHZh9in24zbjCDYqNix2KfbjCDar9ix2YjZh+KAjNmH2KfbjCDYr9iz2KrYsdiz24wg2YbZhdmI2YbZhyDZhdix2KjZiNi3INio2Ycg2YjbjNqY2q/bjOKAjNmH2KfbjCDZgdmH2LHYs9iqINi52YXZiNmF24wnOwoKfQoKMTsK
IyAtLQojIEtlcm5lbC9MYW5ndWFnZS9mcl9HZW5lcmFsQ2F0YWxvZy5wbSAtIHRyYW5zbGF0aW9uIGZpbGUKIyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxNCBPVFJTIEFHLCBodHRwOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6OmZyX0dlbmVyYWxDYXRhbG9nOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnN1YiBEYXRhIHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CgogICAgIyBUZW1wbGF0ZTogQUFBR2VuZXJhbENhdGFsb2cKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Z1bmN0aW9uYWxpdHknfSA9ICdGb25jdGlvbm5hbGl0w6knOwoKICAgICMgVGVtcGxhdGU6IEFkbWluR2VuZXJhbENhdGFsb2cKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0dlbmVyYWwgQ2F0YWxvZyBNYW5hZ2VtZW50J30gPSAnR2VzdGlvbiBkdSBDYXRhbG9ndWUgR8OpbsOpcmFsJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBDYXRhbG9nIEl0ZW0nfSA9ICdBam91dGVyIHVuIEVsZW1lbnQgYXUgQ2F0YWxvZ3VlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBDYXRhbG9nIENsYXNzJ30gPSAnQWpvdXRlciB1bmUgQ2xhc3NlIGRlIENhdGFsb2d1ZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYXRhbG9nIENsYXNzJ30gPSAnQ2xhc3NlIGRlIENhdGFsb2d1ZSc7CgogICAgIyBTeXNDb25maWcKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyZWF0ZSBhbmQgbWFuYWdlIHRoZSBHZW5lcmFsIENhdGFsb2cuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZG1pbkdlbmVyYWxDYXRhbG9nIGNvbmZpZ3VyYXRpb24gaW4gdGhlIGFkbWluIGFyZWEuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnR2VuZXJhbCBDYXRhbG9nJ30gPSAnQ2F0YWxvZ3VlIEfDqW7DqXJhbCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgZXhhbXBsZSBjb21tZW50IDIgb2YgdGhlIGdlbmVyYWwgY2F0YWxvZyBhdHRyaWJ1dGVzLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBleGFtcGxlIHBlcm1pc3Npb24gZ3JvdXBzIG9mIHRoZSBnZW5lcmFsIGNhdGFsb2cgYXR0cmlidXRlcy4nfSA9CiAgICAgICAgJyc7Cgp9CgoxOwo=
IyAtLQojIEtlcm5lbC9MYW5ndWFnZS9pdF9HZW5lcmFsQ2F0YWxvZy5wbSAtIHRyYW5zbGF0aW9uIGZpbGUKIyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxNCBPVFJTIEFHLCBodHRwOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6Oml0X0dlbmVyYWxDYXRhbG9nOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnN1YiBEYXRhIHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CgogICAgIyBUZW1wbGF0ZTogQUFBR2VuZXJhbENhdGFsb2cKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Z1bmN0aW9uYWxpdHknfSA9ICdGdW56aW9uYWxpdMOgJzsKCiAgICAjIFRlbXBsYXRlOiBBZG1pbkdlbmVyYWxDYXRhbG9nCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydHZW5lcmFsIENhdGFsb2cgTWFuYWdlbWVudCd9ID0gJ0dlc3Rpb25lIGRlbCBDYXRhbG9nbyBHZW5lcmFsZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgQ2F0YWxvZyBJdGVtJ30gPSAnQWdnaXVuZ2kgRWxlbWVudG8gYWwgQ2F0YWxvZ28nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIENhdGFsb2cgQ2xhc3MnfSA9ICdBZ2dpdW5naSBDbGFzc2UgYWwgQ2F0YWxvZ28nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2F0YWxvZyBDbGFzcyd9ID0gJ0NsYXNzZSBkaSBDYXRhbG9nbyc7CgogICAgIyBTeXNDb25maWcKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyZWF0ZSBhbmQgbWFuYWdlIHRoZSBHZW5lcmFsIENhdGFsb2cuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZG1pbkdlbmVyYWxDYXRhbG9nIGNvbmZpZ3VyYXRpb24gaW4gdGhlIGFkbWluIGFyZWEuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnR2VuZXJhbCBDYXRhbG9nJ30gPSAnQ2F0YWxvZ28gR2VuZXJhbGUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIGV4YW1wbGUgY29tbWVudCAyIG9mIHRoZSBnZW5lcmFsIGNhdGFsb2cgYXR0cmlidXRlcy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgZXhhbXBsZSBwZXJtaXNzaW9uIGdyb3VwcyBvZiB0aGUgZ2VuZXJhbCBjYXRhbG9nIGF0dHJpYnV0ZXMuJ30gPQogICAgICAgICcnOwoKfQoKMTsK
IyAtLQojIEtlcm5lbC9MYW5ndWFnZS9qYV9HZW5lcmFsQ2F0YWxvZy5wbSAtIHRyYW5zbGF0aW9uIGZpbGUKIyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxNCBPVFJTIEFHLCBodHRwOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6OmphX0dlbmVyYWxDYXRhbG9nOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnN1YiBEYXRhIHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CgogICAgIyBUZW1wbGF0ZTogQUFBR2VuZXJhbENhdGFsb2cKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Z1bmN0aW9uYWxpdHknfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFkbWluR2VuZXJhbENhdGFsb2cKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0dlbmVyYWwgQ2F0YWxvZyBNYW5hZ2VtZW50J30gPSAn5LiA6Iis44Kr44K/44Ot44Kw566h55CGJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBDYXRhbG9nIEl0ZW0nfSA9ICfjgqvjgr/jg63jgrDpoIXnm67jgpLov73liqAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIENhdGFsb2cgQ2xhc3MnfSA9ICfjgqvjgr/jg63jgrDjgq/jg6njgrnjgpLov73liqAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2F0YWxvZyBDbGFzcyd9ID0gJyc7CgogICAgIyBTeXNDb25maWcKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyZWF0ZSBhbmQgbWFuYWdlIHRoZSBHZW5lcmFsIENhdGFsb2cuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZG1pbkdlbmVyYWxDYXRhbG9nIGNvbmZpZ3VyYXRpb24gaW4gdGhlIGFkbWluIGFyZWEuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnR2VuZXJhbCBDYXRhbG9nJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBleGFtcGxlIGNvbW1lbnQgMiBvZiB0aGUgZ2VuZXJhbCBjYXRhbG9nIGF0dHJpYnV0ZXMuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIGV4YW1wbGUgcGVybWlzc2lvbiBncm91cHMgb2YgdGhlIGdlbmVyYWwgY2F0YWxvZyBhdHRyaWJ1dGVzLid9ID0KICAgICAgICAnJzsKCn0KCjE7Cg==
IyAtLQojIEtlcm5lbC9MYW5ndWFnZS9tc19HZW5lcmFsQ2F0YWxvZy5wbSAtIHRyYW5zbGF0aW9uIGZpbGUKIyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxNCBPVFJTIEFHLCBodHRwOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6Om1zX0dlbmVyYWxDYXRhbG9nOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnN1YiBEYXRhIHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CgogICAgIyBUZW1wbGF0ZTogQUFBR2VuZXJhbENhdGFsb2cKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Z1bmN0aW9uYWxpdHknfSA9ICdGdW5nc2knOwoKICAgICMgVGVtcGxhdGU6IEFkbWluR2VuZXJhbENhdGFsb2cKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0dlbmVyYWwgQ2F0YWxvZyBNYW5hZ2VtZW50J30gPSAnS2F0YWxvZyBQZW5ndXJ1c2FuIEdlbmVyYWwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIENhdGFsb2cgSXRlbSd9ID0gJ1RhbWJhaGFuIEl0ZW0gS2F0YWxvZyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgQ2F0YWxvZyBDbGFzcyd9ID0gJ1RhbWJhaCBLZWxhcyBLYXRhbG9nJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhdGFsb2cgQ2xhc3MnfSA9ICdLZWxhcyBLYXRhbG9nJzsKCiAgICAjIFN5c0NvbmZpZwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JlYXRlIGFuZCBtYW5hZ2UgdGhlIEdlbmVyYWwgQ2F0YWxvZy4nfSA9ICdDaXB0YSBkYW4gdXJ1cyBLYXRhbG9nIEdlbmVyYWwuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZG1pbkdlbmVyYWxDYXRhbG9nIGNvbmZpZ3VyYXRpb24gaW4gdGhlIGFkbWluIGFyZWEuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnR2VuZXJhbCBDYXRhbG9nJ30gPSAnS2F0YWxvZyBHZW5lcmFsJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBleGFtcGxlIGNvbW1lbnQgMiBvZiB0aGUgZ2VuZXJhbCBjYXRhbG9nIGF0dHJpYnV0ZXMuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIGV4YW1wbGUgcGVybWlzc2lvbiBncm91cHMgb2YgdGhlIGdlbmVyYWwgY2F0YWxvZyBhdHRyaWJ1dGVzLid9ID0KICAgICAgICAnJzsKCn0KCjE7Cg==
IyAtLQojIEtlcm5lbC9MYW5ndWFnZS9uYl9OT19HZW5lcmFsQ2F0YWxvZy5wbSAtIHRyYW5zbGF0aW9uIGZpbGUKIyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxNCBPVFJTIEFHLCBodHRwOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6Om5iX05PX0dlbmVyYWxDYXRhbG9nOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnN1YiBEYXRhIHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CgogICAgIyBUZW1wbGF0ZTogQUFBR2VuZXJhbENhdGFsb2cKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Z1bmN0aW9uYWxpdHknfSA9ICdGdW5rc2pvbmFsaXRldCc7CgogICAgIyBUZW1wbGF0ZTogQWRtaW5HZW5lcmFsQ2F0YWxvZwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnR2VuZXJhbCBDYXRhbG9nIE1hbmFnZW1lbnQnfSA9ICdBZG1pbmlzdHJhc2pvbiBhdiBHZW5lcmVsbCBLYXRhbG9nJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBDYXRhbG9nIEl0ZW0nfSA9ICdMZWdnIHRpbCBrYXRhbG9nb2JqZWt0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBDYXRhbG9nIENsYXNzJ30gPSAnTGVnZyB0aWwga2F0YWxvZy1rbGFzc2UnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2F0YWxvZyBDbGFzcyd9ID0gJ0thdGFsb2cta2xhc3NlJzsKCiAgICAjIFN5c0NvbmZpZwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JlYXRlIGFuZCBtYW5hZ2UgdGhlIEdlbmVyYWwgQ2F0YWxvZy4nfSA9ICdPcHByZXR0IG9nIGFkbWluaXN0csOpciBkZW4gZ2VuZXJlbGxlIGthdGFsb2dlbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWRtaW5HZW5lcmFsQ2F0YWxvZyBjb25maWd1cmF0aW9uIGluIHRoZSBhZG1pbiBhcmVhLid9ID0KICAgICAgICAnRm9yc2lkZW1vZHVsLXJlZ2lzdHJlcmluZyBmb3IgQWRtaW5HZW5lcmFsQ2F0YWxvZy1vcHBzZXR0IGkgYWRtaW4tZGVsZW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0dlbmVyYWwgQ2F0YWxvZyd9ID0gJ0dlbmVyZWxsIEthdGFsb2cnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIGV4YW1wbGUgY29tbWVudCAyIG9mIHRoZSBnZW5lcmFsIGNhdGFsb2cgYXR0cmlidXRlcy4nfSA9CiAgICAgICAgJ1BhcmFtZXRyZSBmb3IgZWtzZW1wZWxrb21tZW50YXIgMiBpIGF0dHJpYnV0dGVuZSBmb3IgZ2VuZXJlbGwga2F0YWxvZyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgZXhhbXBsZSBwZXJtaXNzaW9uIGdyb3VwcyBvZiB0aGUgZ2VuZXJhbCBjYXRhbG9nIGF0dHJpYnV0ZXMuJ30gPQogICAgICAgICdQYXJhbWV0ZXJlIGZvciB0aWxnYW5nc2dydXBwZS1la3NlbXBlbCBpIGF0dHJpYnV0dGVuZSBmb3IgZ2VuZXJlbGwga2F0YWxvZy4nOwoKfQoKMTsK
IyAtLQojIEtlcm5lbC9MYW5ndWFnZS9ubF9HZW5lcmFsQ2F0YWxvZy5wbSAtIHRyYW5zbGF0aW9uIGZpbGUKIyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxNCBPVFJTIEFHLCBodHRwOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6Om5sX0dlbmVyYWxDYXRhbG9nOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnN1YiBEYXRhIHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CgogICAgIyBUZW1wbGF0ZTogQUFBR2VuZXJhbENhdGFsb2cKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Z1bmN0aW9uYWxpdHknfSA9ICdGdW5jdGlvbmFsaXRlaXQnOwoKICAgICMgVGVtcGxhdGU6IEFkbWluR2VuZXJhbENhdGFsb2cKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0dlbmVyYWwgQ2F0YWxvZyBNYW5hZ2VtZW50J30gPSAnQ2F0YWxvZ3VzIEJlaGVlcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgQ2F0YWxvZyBJdGVtJ30gPSAnQ2F0YWxvZ3VzLWl0ZW0gdG9ldm9lZ2VuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBDYXRhbG9nIENsYXNzJ30gPSAnQ2F0YWxvZ3VzLWtsYXNzZSB0b2V2b2VnZW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2F0YWxvZyBDbGFzcyd9ID0gJ0NhdGFsb2d1cyBrbGFzc2UnOwoKICAgICMgU3lzQ29uZmlnCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcmVhdGUgYW5kIG1hbmFnZSB0aGUgR2VuZXJhbCBDYXRhbG9nLid9ID0gJ0Fhbm1ha2VuIGVuIGJlaGVyZW4gdmFuIGl0ZW1zIGluIGRlIGNhdGFsb2d1cy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFkbWluR2VuZXJhbENhdGFsb2cgY29uZmlndXJhdGlvbiBpbiB0aGUgYWRtaW4gYXJlYS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydHZW5lcmFsIENhdGFsb2cnfSA9ICdDYXRhbG9ndXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIGV4YW1wbGUgY29tbWVudCAyIG9mIHRoZSBnZW5lcmFsIGNhdGFsb2cgYXR0cmlidXRlcy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgZXhhbXBsZSBwZXJtaXNzaW9uIGdyb3VwcyBvZiB0aGUgZ2VuZXJhbCBjYXRhbG9nIGF0dHJpYnV0ZXMuJ30gPQogICAgICAgICcnOwoKfQoKMTsK
IyAtLQojIEtlcm5lbC9MYW5ndWFnZS9wbF9HZW5lcmFsQ2F0YWxvZy5wbSAtIHRyYW5zbGF0aW9uIGZpbGUKIyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxNCBPVFJTIEFHLCBodHRwOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6OnBsX0dlbmVyYWxDYXRhbG9nOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnN1YiBEYXRhIHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CgogICAgIyBUZW1wbGF0ZTogQUFBR2VuZXJhbENhdGFsb2cKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Z1bmN0aW9uYWxpdHknfSA9ICdGdW5rY2pvbmFsbm/Fm8SHJzsKCiAgICAjIFRlbXBsYXRlOiBBZG1pbkdlbmVyYWxDYXRhbG9nCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydHZW5lcmFsIENhdGFsb2cgTWFuYWdlbWVudCd9ID0gJ1phcnrEhWR6YW5pZSBrYXRhbG9naWVtIGfFgsOzd255bSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgQ2F0YWxvZyBJdGVtJ30gPSAnRG9kYWogZWxlbWVudCBrYXRhbG9ndSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgQ2F0YWxvZyBDbGFzcyd9ID0gJ0RvZGFqIGtsYXPEmSBrYXRhbG9ndSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYXRhbG9nIENsYXNzJ30gPSAnS2xhc2Ega2F0YWxvZ3UnOwoKICAgICMgU3lzQ29uZmlnCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcmVhdGUgYW5kIG1hbmFnZSB0aGUgR2VuZXJhbCBDYXRhbG9nLid9ID0gJ1V0d8OzcnogaSB6YXJ6xIVkemFqIGthdGFsb2dpZW0gZ8WCw7N3bnltLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWRtaW5HZW5lcmFsQ2F0YWxvZyBjb25maWd1cmF0aW9uIGluIHRoZSBhZG1pbiBhcmVhLid9ID0KICAgICAgICAnUmVqZXN0cmFjamEgbW9kdcWCdSBmcm9udGVuZCBkbyBrb25maWd1cmFjamkgbW9kdcWCdSBBZG1pbkdlbmVyYWxDYXRhbG9nIHcgcGFuZWx1IGFkbWluaXN0cmF0b3JhLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydHZW5lcmFsIENhdGFsb2cnfSA9ICdLYXRhbG9nIGfFgsOzd255JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBleGFtcGxlIGNvbW1lbnQgMiBvZiB0aGUgZ2VuZXJhbCBjYXRhbG9nIGF0dHJpYnV0ZXMuJ30gPQogICAgICAgICdQYXJhbWV0cnkgZG8gcHJ6eWvFgmFkb3dlZ28ga29tZW50YXJ6YSAyIGF0cnlidXTDs3cga2F0YWxvZ3UgZ2VuZXJhbG5lZ28uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBleGFtcGxlIHBlcm1pc3Npb24gZ3JvdXBzIG9mIHRoZSBnZW5lcmFsIGNhdGFsb2cgYXR0cmlidXRlcy4nfSA9CiAgICAgICAgJ1BhcmFtZXRyeSBkbGEgcHJ6eWvFgmFkb3d5Y2ggZ3J1cCB1cHJhd25pZcWEIGF0cnlidXTDs3cga2F0YWxvZ3UgZ8WCw7N3bmVnby4nOwoKfQoKMTsK
IyAtLQojIEtlcm5lbC9MYW5ndWFnZS9wdF9CUl9HZW5lcmFsQ2F0YWxvZy5wbSAtIHRyYW5zbGF0aW9uIGZpbGUKIyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxNCBPVFJTIEFHLCBodHRwOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6OnB0X0JSX0dlbmVyYWxDYXRhbG9nOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnN1YiBEYXRhIHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CgogICAgIyBUZW1wbGF0ZTogQUFBR2VuZXJhbENhdGFsb2cKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Z1bmN0aW9uYWxpdHknfSA9ICdGdW5jaW9uYWxpZGFkZSc7CgogICAgIyBUZW1wbGF0ZTogQWRtaW5HZW5lcmFsQ2F0YWxvZwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnR2VuZXJhbCBDYXRhbG9nIE1hbmFnZW1lbnQnfSA9ICdHZXJlbmNpYW1lbnRvIGRvIENhdMOhbG9nbyBHZXJhbCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgQ2F0YWxvZyBJdGVtJ30gPSAnQWRpY2lvbmFyIEl0ZW0gYW8gQ2F0w6Fsb2dvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBDYXRhbG9nIENsYXNzJ30gPSAnQWRpY2lvbmFyIENsYXNzZSBhbyBDYXTDoWxvZ28nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2F0YWxvZyBDbGFzcyd9ID0gJ0NsYXNzZSBkbyBDYXTDoWxvZ28nOwoKICAgICMgU3lzQ29uZmlnCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcmVhdGUgYW5kIG1hbmFnZSB0aGUgR2VuZXJhbCBDYXRhbG9nLid9ID0gJ0NyaWFyIGUgZ2VyZW5jaWFyIG8gQ2F0w6Fsb2dvIEdlcmFsLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWRtaW5HZW5lcmFsQ2F0YWxvZyBjb25maWd1cmF0aW9uIGluIHRoZSBhZG1pbiBhcmVhLid9ID0KICAgICAgICAnTcOzZHVsbyBkZSByZWdpc3RvIGRhIGludGVyZmFjZSBwYXJhIGEgY29uZmlndXJhw6fDo28gQWRtaW5HZW5lcmFsQ2F0YWxvZyBuYSDDoXJlYSBhZG1pbmlzdHJhdGl2YS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnR2VuZXJhbCBDYXRhbG9nJ30gPSAnQ2F0w6Fsb2dvIEdlcmFsJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBleGFtcGxlIGNvbW1lbnQgMiBvZiB0aGUgZ2VuZXJhbCBjYXRhbG9nIGF0dHJpYnV0ZXMuJ30gPQogICAgICAgICdQYXLDom1ldHJvcyBwYXJhIG8gY29tZW50w6FyaW8gZGUgZXhlbXBsbyAyIGRvcyBhdHJpYnV0b3MgZG8gY2F0w6Fsb2dvIGdlcmFsLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgZXhhbXBsZSBwZXJtaXNzaW9uIGdyb3VwcyBvZiB0aGUgZ2VuZXJhbCBjYXRhbG9nIGF0dHJpYnV0ZXMuJ30gPQogICAgICAgICdQYXLDom1ldHJvcyBwYXJhIG9zIGdydXBvcyBkZSBwZXJtaXNzw6NvIGRlIGV4ZW1wbG8gZG9zIGF0cmlidXRvcyBkbyBjYXTDoWxvZ28gZ2VyYWwuJzsKCn0KCjE7Cg==
IyAtLQojIEtlcm5lbC9MYW5ndWFnZS9wdF9HZW5lcmFsQ2F0YWxvZy5wbSAtIHRyYW5zbGF0aW9uIGZpbGUKIyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxNCBPVFJTIEFHLCBodHRwOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6OnB0X0dlbmVyYWxDYXRhbG9nOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnN1YiBEYXRhIHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CgogICAgIyBUZW1wbGF0ZTogQUFBR2VuZXJhbENhdGFsb2cKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Z1bmN0aW9uYWxpdHknfSA9ICdGdW5jaW9uYWxBbnRpZ3VpZGFkZSc7CgogICAgIyBUZW1wbGF0ZTogQWRtaW5HZW5lcmFsQ2F0YWxvZwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnR2VuZXJhbCBDYXRhbG9nIE1hbmFnZW1lbnQnfSA9ICdHZXN0w6NvIGRvIENhdMOhbG9nbyBHZXJhbCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgQ2F0YWxvZyBJdGVtJ30gPSAnQWRpY2lvbmFyIEl0ZW0gYW8gQ2F0w6Fsb2dvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBDYXRhbG9nIENsYXNzJ30gPSAnQWRpY2lvbmFyIENsYXNzZSBhbyBDYXTDoWxvZ28nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2F0YWxvZyBDbGFzcyd9ID0gJ0NsYXNzZSBkbyBDYXTDoWxvZ28nOwoKICAgICMgU3lzQ29uZmlnCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcmVhdGUgYW5kIG1hbmFnZSB0aGUgR2VuZXJhbCBDYXRhbG9nLid9ID0gJ0NyaWFyIGUgZ2VyaXIgbyBDYXTDoWxvZ28gR2VyYWwuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZG1pbkdlbmVyYWxDYXRhbG9nIGNvbmZpZ3VyYXRpb24gaW4gdGhlIGFkbWluIGFyZWEuJ30gPQogICAgICAgICdNw7NkdWxvIGRlIHJlZ2lzdG8gZGEgaW50ZXJmYWNlIHBhcmEgYSBjb25maWd1cmHDp8OjbyBBZG1pbkdlbmVyYWxDYXRhbG9nIG5hIMOhcmVhIGFkbWluaXN0cmF0aXZhLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydHZW5lcmFsIENhdGFsb2cnfSA9ICdDYXTDoWxvZ28gR2VyYWwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIGV4YW1wbGUgY29tbWVudCAyIG9mIHRoZSBnZW5lcmFsIGNhdGFsb2cgYXR0cmlidXRlcy4nfSA9CiAgICAgICAgJ1BhcsOibWV0cm9zIHBhcmEgbyBjb21lbnTDoXJpbyBkZSBleGVtcGxvIDIgZG9zIGF0cmlidXRvcyBkbyBjYXTDoWxvZ28gZ2VyYWwuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBleGFtcGxlIHBlcm1pc3Npb24gZ3JvdXBzIG9mIHRoZSBnZW5lcmFsIGNhdGFsb2cgYXR0cmlidXRlcy4nfSA9CiAgICAgICAgJ1BhcsOibWV0cm9zIHBhcmEgb3MgZ3J1cG9zIGRlIHBlcm1pc3PDo28gZGUgZXhlbXBsbyBkb3MgYXRyaWJ1dG9zIGRvIGNhdMOhbG9nbyBnZXJhbC4nOwoKfQoKMTsK
IyAtLQojIEtlcm5lbC9MYW5ndWFnZS9ydV9HZW5lcmFsQ2F0YWxvZy5wbSAtIHRyYW5zbGF0aW9uIGZpbGUKIyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxNCBPVFJTIEFHLCBodHRwOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6OnJ1X0dlbmVyYWxDYXRhbG9nOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnN1YiBEYXRhIHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CgogICAgIyBUZW1wbGF0ZTogQUFBR2VuZXJhbENhdGFsb2cKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Z1bmN0aW9uYWxpdHknfSA9ICfQpNGD0L3QutGG0LjQvtC90LDQu9GM0L3QvtGB0YLRjCc7CgogICAgIyBUZW1wbGF0ZTogQWRtaW5HZW5lcmFsQ2F0YWxvZwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnR2VuZXJhbCBDYXRhbG9nIE1hbmFnZW1lbnQnfSA9ICfQo9C/0YDQsNCy0LvQtdC90LjQtSDQntCx0YnQuNC8INC60LDRgtCw0LvQvtCz0L7QvCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgQ2F0YWxvZyBJdGVtJ30gPSAn0JTQvtCx0LDQstC70LXQvdC40LUg0Y3Qu9C10LzQtdC90YLQsCDQutCw0YLQsNC70L7Qs9CwJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBDYXRhbG9nIENsYXNzJ30gPSAn0JTQvtCx0LDQstC70LXQvdC40LUg0LrQu9Cw0YHRgdCwINC60LDRgtCw0LvQvtCz0LAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2F0YWxvZyBDbGFzcyd9ID0gJ9Ca0LvQsNGB0YEg0LrQsNGC0LDQu9C+0LPQsCc7CgogICAgIyBTeXNDb25maWcKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyZWF0ZSBhbmQgbWFuYWdlIHRoZSBHZW5lcmFsIENhdGFsb2cuJ30gPSAn0KHQvtC30LTQsNC90LjQtSDQuCDRg9C/0YDQsNCy0LvQtdC90LjQtSDQntCx0YnQuNC8INC60LDRgtCw0LvQvtCz0L7QvCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWRtaW5HZW5lcmFsQ2F0YWxvZyBjb25maWd1cmF0aW9uIGluIHRoZSBhZG1pbiBhcmVhLid9ID0KICAgICAgICAnTW9kdWxlIHJlZ2lzdHJhdGlvbiDQtNC70Y8g0LrQvtC90YTQuNCz0YPRgNCw0YbQuNC4IEFkbWluR2VuZXJhbENhdGFsb2cg0LIg0L/QsNC90LXQu9C4INCw0LTQvNC40L3QuNGB0YLRgNCw0YLQvtGA0LAuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0dlbmVyYWwgQ2F0YWxvZyd9ID0gJ9Ce0LHRidC40Lkg0LrQsNGC0LDQu9C+0LMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIGV4YW1wbGUgY29tbWVudCAyIG9mIHRoZSBnZW5lcmFsIGNhdGFsb2cgYXR0cmlidXRlcy4nfSA9CiAgICAgICAgJ9CU0L7QsdCw0LLQu9C10L3QuNC1INC00L7Qv9C+0LvQvdC40YLQtdC70YzQvdC+0LPQviDQutC+0LzQvNC10L3RgtCw0YDQuNGPINC6INCw0YLRgNC40LHRg9GC0LDQvCDQntCx0YnQtdCz0L4g0LrQsNGC0LDQu9C+0LPQsCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgZXhhbXBsZSBwZXJtaXNzaW9uIGdyb3VwcyBvZiB0aGUgZ2VuZXJhbCBjYXRhbG9nIGF0dHJpYnV0ZXMuJ30gPQogICAgICAgICcnOwoKfQoKMTsK
IyAtLQojIEtlcm5lbC9MYW5ndWFnZS9zdl9HZW5lcmFsQ2F0YWxvZy5wbSAtIHRyYW5zbGF0aW9uIGZpbGUKIyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxNCBPVFJTIEFHLCBodHRwOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6OnN2X0dlbmVyYWxDYXRhbG9nOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnN1YiBEYXRhIHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CgogICAgIyBUZW1wbGF0ZTogQUFBR2VuZXJhbENhdGFsb2cKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Z1bmN0aW9uYWxpdHknfSA9ICdGdW5rdGlvbmFsaXRldCc7CgogICAgIyBUZW1wbGF0ZTogQWRtaW5HZW5lcmFsQ2F0YWxvZwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnR2VuZXJhbCBDYXRhbG9nIE1hbmFnZW1lbnQnfSA9ICdIYW50ZXJhIGdydW5ka2F0YWxvZyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgQ2F0YWxvZyBJdGVtJ30gPSAnTMOkZ2cgdGlsbCBrYXRhbG9ncG9zdCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgQ2F0YWxvZyBDbGFzcyd9ID0gJ0zDpGdnIHRpbGwga2xhc3MgaSBrYXRhbG9nJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhdGFsb2cgQ2xhc3MnfSA9ICdLYXRhbG9na2xhc3MnOwoKICAgICMgU3lzQ29uZmlnCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcmVhdGUgYW5kIG1hbmFnZSB0aGUgR2VuZXJhbCBDYXRhbG9nLid9ID0gJ1NrYXBhIG9jaCBoYW50ZXJhIGdydW5ka2F0YWxvZ2VuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZG1pbkdlbmVyYWxDYXRhbG9nIGNvbmZpZ3VyYXRpb24gaW4gdGhlIGFkbWluIGFyZWEuJ30gPQogICAgICAgICdSZWdpc3RyZXJpbmcgYXYgZnJvbnRlbmRtb2R1bCBmw7ZyIEFkbWluR2VuZXJhbENhdGFsb2ctaW5zdMOkbGxuaW5nYXIgaSBhZG1pbmFyZWFuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydHZW5lcmFsIENhdGFsb2cnfSA9ICdHcnVuZGthdGFsb2cnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIGV4YW1wbGUgY29tbWVudCAyIG9mIHRoZSBnZW5lcmFsIGNhdGFsb2cgYXR0cmlidXRlcy4nfSA9CiAgICAgICAgJ1BhcmFtZXRyYXIgZsO2ciBleGVtcGVsa29tbWVudGFyIDIgaSBhdHRyaWJ1dGVuIGbDtnIgZ3J1bmRrYXRhbG9nZW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBleGFtcGxlIHBlcm1pc3Npb24gZ3JvdXBzIG9mIHRoZSBnZW5lcmFsIGNhdGFsb2cgYXR0cmlidXRlcy4nfSA9CiAgICAgICAgJ1BhcmFtZXRyYXIgZsO2ciBleGVtcGVsIHDDpSBiZWjDtnJpZ2hldHNlZ3J1cHBlciBpIGdydW5ka2F0YWxvZ2VucyBhdHRyaWJ1dC4nOwoKfQoKMTsK
IyAtLQojIEtlcm5lbC9MYW5ndWFnZS96aF9DTl9HZW5lcmFsQ2F0YWxvZy5wbSAtIHRyYW5zbGF0aW9uIGZpbGUKIyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxNCBPVFJTIEFHLCBodHRwOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6OnpoX0NOX0dlbmVyYWxDYXRhbG9nOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnN1YiBEYXRhIHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CgogICAgIyBUZW1wbGF0ZTogQUFBR2VuZXJhbENhdGFsb2cKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Z1bmN0aW9uYWxpdHknfSA9ICflip/og70nOwoKICAgICMgVGVtcGxhdGU6IEFkbWluR2VuZXJhbENhdGFsb2cKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0dlbmVyYWwgQ2F0YWxvZyBNYW5hZ2VtZW50J30gPSAn55uu5b2V566h55CGJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBDYXRhbG9nIEl0ZW0nfSA9ICfmt7vliqDnm67lvZXpobnnm64nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIENhdGFsb2cgQ2xhc3MnfSA9ICfmt7vliqDmlrDnm67lvZXnsbsnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2F0YWxvZyBDbGFzcyd9ID0gJ+ebruW9leexuyc7CgogICAgIyBTeXNDb25maWcKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyZWF0ZSBhbmQgbWFuYWdlIHRoZSBHZW5lcmFsIENhdGFsb2cuJ30gPSAn5Yib5bu65ZKM566h55CG55uu5b2VJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZG1pbkdlbmVyYWxDYXRhbG9nIGNvbmZpZ3VyYXRpb24gaW4gdGhlIGFkbWluIGFyZWEuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnR2VuZXJhbCBDYXRhbG9nJ30gPSAn55uu5b2VJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBleGFtcGxlIGNvbW1lbnQgMiBvZiB0aGUgZ2VuZXJhbCBjYXRhbG9nIGF0dHJpYnV0ZXMuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIGV4YW1wbGUgcGVybWlzc2lvbiBncm91cHMgb2YgdGhlIGdlbmVyYWwgY2F0YWxvZyBhdHRyaWJ1dGVzLid9ID0KICAgICAgICAnJzsKCn0KCjE7Cg==
IyAtLQojIEtlcm5lbC9MYW5ndWFnZS96aF9UV19HZW5lcmFsQ2F0YWxvZy5wbSAtIHRyYW5zbGF0aW9uIGZpbGUKIyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxNCBPVFJTIEFHLCBodHRwOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6OnpoX1RXX0dlbmVyYWxDYXRhbG9nOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnN1YiBEYXRhIHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CgogICAgIyBUZW1wbGF0ZTogQUFBR2VuZXJhbENhdGFsb2cKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Z1bmN0aW9uYWxpdHknfSA9ICflip/og70nOwoKICAgICMgVGVtcGxhdGU6IEFkbWluR2VuZXJhbENhdGFsb2cKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0dlbmVyYWwgQ2F0YWxvZyBNYW5hZ2VtZW50J30gPSAn55uu6YyE566h55CGJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBDYXRhbG9nIEl0ZW0nfSA9ICfmt7vliqDnm67pjITpoIXnm64nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIENhdGFsb2cgQ2xhc3MnfSA9ICfmt7vliqDmlrDnm67pjITpoZ7liKUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2F0YWxvZyBDbGFzcyd9ID0gJ+ebrumMhOmhnuWIpSc7CgogICAgIyBTeXNDb25maWcKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyZWF0ZSBhbmQgbWFuYWdlIHRoZSBHZW5lcmFsIENhdGFsb2cuJ30gPSAn5Ym15bu65ZKM566h55CG55uu6YyEJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZG1pbkdlbmVyYWxDYXRhbG9nIGNvbmZpZ3VyYXRpb24gaW4gdGhlIGFkbWluIGFyZWEuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnR2VuZXJhbCBDYXRhbG9nJ30gPSAn55uu6YyEJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBleGFtcGxlIGNvbW1lbnQgMiBvZiB0aGUgZ2VuZXJhbCBjYXRhbG9nIGF0dHJpYnV0ZXMuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIGV4YW1wbGUgcGVybWlzc2lvbiBncm91cHMgb2YgdGhlIGdlbmVyYWwgY2F0YWxvZyBhdHRyaWJ1dGVzLid9ID0KICAgICAgICAnJzsKCn0KCjE7Cg==
IyAtLQojIEtlcm5lbC9Nb2R1bGVzL0FkbWluR2VuZXJhbENhdGFsb2cucG0gLSBhZG1pbiBmcm9udGVuZCBvZiBnZW5lcmFsIGNhdGFsb2cgbWFuYWdlbWVudAojIENvcHlyaWdodCAoQykgMjAwMS0yMDE0IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpNb2R1bGVzOjpBZG1pbkdlbmVyYWxDYXRhbG9nOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKdXNlIEtlcm5lbDo6U3lzdGVtOjpHZW5lcmFsQ2F0YWxvZzsKdXNlIEtlcm5lbDo6U3lzdGVtOjpWYWxpZDsKCnN1YiBuZXcgewogICAgbXkgKCAkVHlwZSwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGFsbG9jYXRlIG5ldyBoYXNoIGZvciBvYmplY3QKICAgIG15ICRTZWxmID0geyVQYXJhbX07CiAgICBibGVzcyggJFNlbGYsICRUeXBlICk7CgogICAgIyBjaGVjayBuZWVkZWQgb2JqZWN0cwogICAgZm9yIG15ICRPYmplY3QgKHF3KENvbmZpZ09iamVjdCBQYXJhbU9iamVjdCBMb2dPYmplY3QgTGF5b3V0T2JqZWN0KSkgewogICAgICAgIGlmICggISRTZWxmLT57JE9iamVjdH0gKSB7CiAgICAgICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+RmF0YWxFcnJvciggTWVzc2FnZSA9PiAiR290IG5vICRPYmplY3QhIiApOwogICAgICAgIH0KICAgIH0KICAgICRTZWxmLT57R2VuZXJhbENhdGFsb2dPYmplY3R9ID0gS2VybmVsOjpTeXN0ZW06OkdlbmVyYWxDYXRhbG9nLT5uZXcoJVBhcmFtKTsKICAgICRTZWxmLT57VmFsaWRPYmplY3R9ICAgICAgICAgID0gS2VybmVsOjpTeXN0ZW06OlZhbGlkLT5uZXcoJVBhcmFtKTsKCiAgICByZXR1cm4gJFNlbGY7Cn0KCnN1YiBSdW4gewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICAjIGNhdGFsb2cgaXRlbSBsaXN0CiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICBpZiAoICRTZWxmLT57U3ViYWN0aW9ufSBlcSAnSXRlbUxpc3QnICkgewogICAgICAgIG15ICRDbGFzcyA9ICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbSggUGFyYW0gPT4gIkNsYXNzIiApIHx8ICcnOwoKICAgICAgICAjIGNoZWNrIG5lZWRlZCBjbGFzcwogICAgICAgIGlmICggISRDbGFzcyApIHsKICAgICAgICAgICAgcmV0dXJuICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+UmVkaXJlY3QoIE9QID0+ICJBY3Rpb249JFNlbGYtPntBY3Rpb259IiApOwogICAgICAgIH0KCiAgICAgICAgIyBvdXRwdXQgb3ZlcnZpZXcKICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdPdmVydmlldycsCiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgJVBhcmFtLAogICAgICAgICAgICB9LAogICAgICAgICk7CiAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnT3ZlcnZpZXdJdGVtJywKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgICAgICAgICBDbGFzcyA9PiAkQ2xhc3MsCiAgICAgICAgICAgIH0sCiAgICAgICAgKTsKCiAgICAgICAgIyBnZXQgYXZhaWxhYmlsaXR5IGxpc3QKICAgICAgICBteSAlVmFsaWRMaXN0ID0gJFNlbGYtPntWYWxpZE9iamVjdH0tPlZhbGlkTGlzdCgpOwoKICAgICAgICAjIGdldCBjYXRhbG9nIGl0ZW0gbGlzdAogICAgICAgIG15ICRJdGVtSURMaXN0ID0gJFNlbGYtPntHZW5lcmFsQ2F0YWxvZ09iamVjdH0tPkl0ZW1MaXN0KAogICAgICAgICAgICBDbGFzcyA9PiAkQ2xhc3MsCiAgICAgICAgICAgIFZhbGlkID0+IDAsCiAgICAgICAgKTsKCiAgICAgICAgIyBjaGVjayBpdGVtIGxpc3QKICAgICAgICBpZiAoICEkSXRlbUlETGlzdCB8fCAhJXskSXRlbUlETGlzdH0gKSB7CiAgICAgICAgICAgIHJldHVybiAkU2VsZi0+e0xheW91dE9iamVjdH0tPkVycm9yU2NyZWVuKCk7CiAgICAgICAgfQoKICAgICAgICBmb3IgbXkgJEl0ZW1JRCAoIHNvcnQgeyAkSXRlbUlETGlzdC0+eyRhfSBjbXAgJEl0ZW1JRExpc3QtPnskYn0gfSBrZXlzICV7JEl0ZW1JRExpc3R9ICkgewoKICAgICAgICAgICAgIyBnZXQgaXRlbSBkYXRhCiAgICAgICAgICAgIG15ICRJdGVtRGF0YSA9ICRTZWxmLT57R2VuZXJhbENhdGFsb2dPYmplY3R9LT5JdGVtR2V0KAogICAgICAgICAgICAgICAgSXRlbUlEID0+ICRJdGVtSUQsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAjIG91dHB1dCBvdmVydmlldyBpdGVtIGxpc3QKICAgICAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jaygKICAgICAgICAgICAgICAgIE5hbWUgPT4gJ092ZXJ2aWV3SXRlbUxpc3QnLAogICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgJXskSXRlbURhdGF9LAogICAgICAgICAgICAgICAgICAgIFZhbGlkID0+ICRWYWxpZExpc3R7ICRJdGVtRGF0YS0+e1ZhbGlkSUR9IH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgIyBBY3Rpb25PdmVydmlldwogICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ0FjdGlvbkFkZEl0ZW0nLAogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgICAgIENsYXNzID0+ICRDbGFzcywKICAgICAgICAgICAgfSwKICAgICAgICApOwoKICAgICAgICAjIEFjdGlvbk92ZXJ2aWV3CiAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnQWN0aW9uT3ZlcnZpZXcnLAogICAgICAgICk7CgogICAgICAgICMgb3V0cHV0IGhlYWRlciBhbmQgbmF2YmFyCiAgICAgICAgbXkgJE91dHB1dCA9ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+SGVhZGVyKCk7CiAgICAgICAgJE91dHB1dCAuPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPk5hdmlnYXRpb25CYXIoKTsKCiAgICAgICAgIyBjcmVhdGUgb3V0cHV0IHN0cmluZwogICAgICAgICRPdXRwdXQgLj0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5PdXRwdXQoCiAgICAgICAgICAgIFRlbXBsYXRlRmlsZSA9PiAnQWRtaW5HZW5lcmFsQ2F0YWxvZycsCiAgICAgICAgICAgIERhdGEgICAgICAgICA9PiBcJVBhcmFtLAogICAgICAgICk7CgogICAgICAgICMgYWRkIGZvb3RlcgogICAgICAgICRPdXRwdXQgLj0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5Gb290ZXIoKTsKCiAgICAgICAgcmV0dXJuICRPdXRwdXQ7CiAgICB9CgogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwogICAgIyBjYXRhbG9nIGl0ZW0gZWRpdAogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwogICAgZWxzaWYgKCAkU2VsZi0+e1N1YmFjdGlvbn0gZXEgJ0l0ZW1FZGl0JyApIHsKICAgICAgICBteSAlSXRlbURhdGE7CgogICAgICAgICMgZ2V0IHBhcmFtcwogICAgICAgICRJdGVtRGF0YXtJdGVtSUR9ID0gJFNlbGYtPntQYXJhbU9iamVjdH0tPkdldFBhcmFtKCBQYXJhbSA9PiAiSXRlbUlEIiApOwoKICAgICAgICAjIGFkZCBhIG5ldyBjYXRhbG9nIGl0ZW0KICAgICAgICBpZiAoICRJdGVtRGF0YXtJdGVtSUR9IGVxICdORVcnICkgewoKICAgICAgICAgICAgIyBnZXQgY2xhc3MKICAgICAgICAgICAgJEl0ZW1EYXRhe0NsYXNzfSA9ICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbSggUGFyYW0gPT4gIkNsYXNzIiApOwoKICAgICAgICAgICAgIyByZWRpcmVjdCB0byBvdmVydmlldwogICAgICAgICAgICBpZiAoICEkSXRlbURhdGF7Q2xhc3N9ICkgewogICAgICAgICAgICAgICAgcmV0dXJuICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+UmVkaXJlY3QoIE9QID0+ICJBY3Rpb249JFNlbGYtPntBY3Rpb259IiApOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAjIGVkaXQgYW4gZXhpc3RpbmcgY2F0YWxvZyBpdGVtCiAgICAgICAgZWxzZSB7CgogICAgICAgICAgICAjIGdldCBpdGVtIGRhdGEKICAgICAgICAgICAgbXkgJEl0ZW1EYXRhUmVmID0gJFNlbGYtPntHZW5lcmFsQ2F0YWxvZ09iamVjdH0tPkl0ZW1HZXQoCiAgICAgICAgICAgICAgICBJdGVtSUQgPT4gJEl0ZW1EYXRhe0l0ZW1JRH0sCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAjIGNoZWNrIGl0ZW0gZGF0YQogICAgICAgICAgICBpZiAoICEkSXRlbURhdGFSZWYgKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5FcnJvclNjcmVlbigpOwogICAgICAgICAgICB9CgogICAgICAgICAgICAlSXRlbURhdGEgPSAleyRJdGVtRGF0YVJlZn07CiAgICAgICAgfQoKICAgICAgICAjIG91dHB1dCBvdmVydmlldwogICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ092ZXJ2aWV3JywKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgICAgICAgICBDbGFzcyA9PiAkSXRlbURhdGF7Q2xhc3N9LAogICAgICAgICAgICB9LAogICAgICAgICk7CgogICAgICAgICMgZ2VuZXJhdGUgVmFsaWRPcHRpb25TdHJnCiAgICAgICAgbXkgJVZhbGlkTGlzdCAgICAgICAgPSAkU2VsZi0+e1ZhbGlkT2JqZWN0fS0+VmFsaWRMaXN0KCk7CiAgICAgICAgbXkgJVZhbGlkTGlzdFJldmVyc2UgPSByZXZlcnNlICVWYWxpZExpc3Q7CiAgICAgICAgbXkgJFZhbGlkT3B0aW9uU3RyZyAgPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJ1aWxkU2VsZWN0aW9uKAogICAgICAgICAgICBOYW1lICAgICAgID0+ICdWYWxpZElEJywKICAgICAgICAgICAgRGF0YSAgICAgICA9PiBcJVZhbGlkTGlzdCwKICAgICAgICAgICAgU2VsZWN0ZWRJRCA9PiAkSXRlbURhdGF7VmFsaWRJRH0gfHwgJFZhbGlkTGlzdFJldmVyc2V7dmFsaWR9LAogICAgICAgICk7CgogICAgICAgICMgb3V0cHV0IEl0ZW1FZGl0CiAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnSXRlbUVkaXQnLAogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICVJdGVtRGF0YSwKICAgICAgICAgICAgICAgIFZhbGlkT3B0aW9uU3RyZyA9PiAkVmFsaWRPcHRpb25TdHJnLAogICAgICAgICAgICB9LAogICAgICAgICk7CgogICAgICAgICMgc2hvdyBlYWNoIHByZWZlcmVuY2VzIHNldHRpbmcKICAgICAgICBteSAlUHJlZmVyZW5jZXMgPSAoKTsKICAgICAgICBpZiAoICRTZWxmLT57Q29uZmlnT2JqZWN0fS0+R2V0KCdHZW5lcmFsQ2F0YWxvZ1ByZWZlcmVuY2VzJykgKSB7CiAgICAgICAgICAgICVQcmVmZXJlbmNlcyA9ICV7ICRTZWxmLT57Q29uZmlnT2JqZWN0fS0+R2V0KCdHZW5lcmFsQ2F0YWxvZ1ByZWZlcmVuY2VzJykgfTsKICAgICAgICB9CgogICAgICAgIElURU06CiAgICAgICAgZm9yIG15ICRJdGVtICggc29ydCBrZXlzICVQcmVmZXJlbmNlcyApIHsKCiAgICAgICAgICAgICMgc2tpcCBpdGVtcyB0aGF0IGRvbid0IGJlbG9uZyB0byB0aGUgY2xhc3MKICAgICAgICAgICAgaWYgKCAkUHJlZmVyZW5jZXN7JEl0ZW19LT57Q2xhc3N9ICYmICRQcmVmZXJlbmNlc3skSXRlbX0tPntDbGFzc30gbmUgJEl0ZW1EYXRhe0NsYXNzfSApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIG5leHQgSVRFTTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBmaW5kIG91dHB1dCBtb2R1bGUKICAgICAgICAgICAgbXkgJE1vZHVsZSA9ICRQcmVmZXJlbmNlc3skSXRlbX0tPntNb2R1bGV9CiAgICAgICAgICAgICAgICB8fCAnS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkdlbmVyYWxDYXRhbG9nUHJlZmVyZW5jZXNHZW5lcmljJzsKCiAgICAgICAgICAgICMgbG9hZCBtb2R1bGUKICAgICAgICAgICAgaWYgKCAhJFNlbGYtPntNYWluT2JqZWN0fS0+UmVxdWlyZSgkTW9kdWxlKSApIHsKICAgICAgICAgICAgICAgIHJldHVybiAkU2VsZi0+e0xheW91dE9iamVjdH0tPkZhdGFsRXJyb3IoKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBjcmVhdGUgb2JqZWN0IGZvciB0aGlzIHByZWZlcmVuY2VzIGl0ZW0KICAgICAgICAgICAgbXkgJE9iamVjdCA9ICRNb2R1bGUtPm5ldygKICAgICAgICAgICAgICAgICV7JFNlbGZ9LAogICAgICAgICAgICAgICAgQ29uZmlnSXRlbSA9PiAkUHJlZmVyZW5jZXN7JEl0ZW19LAogICAgICAgICAgICAgICAgRGVidWcgICAgICA9PiAkU2VsZi0+e0RlYnVnfSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgc2hvdyBhbGwgcGFyYW1ldGVycwogICAgICAgICAgICBteSBAUGFyYW1zID0gJE9iamVjdC0+UGFyYW0oIEdlbmVyYWxDYXRhbG9nRGF0YSA9PiB7ICVJdGVtRGF0YSwgJVBhcmFtIH0gKTsKICAgICAgICAgICAgZm9yIG15ICRQYXJhbUl0ZW0gKEBQYXJhbXMpIHsKCiAgICAgICAgICAgICAgICBpZiAoCiAgICAgICAgICAgICAgICAgICAgcmVmKCAkUGFyYW1JdGVtLT57RGF0YX0gKSBlcSAnSEFTSCcKICAgICAgICAgICAgICAgICAgICB8fCByZWYoICRQcmVmZXJlbmNlc3skSXRlbX0tPntEYXRhfSApIGVxICdIQVNIJwogICAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAkUGFyYW1JdGVtLT57J09wdGlvbid9ID0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CdWlsZFNlbGVjdGlvbigKICAgICAgICAgICAgICAgICAgICAgICAgJXsgJFByZWZlcmVuY2VzeyRJdGVtfSB9LAogICAgICAgICAgICAgICAgICAgICAgICAleyRQYXJhbUl0ZW19LAogICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jaygKICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICRQYXJhbUl0ZW0tPntCbG9ja30gfHwgJFByZWZlcmVuY2VzeyRJdGVtfS0+e0Jsb2NrfSB8fCAnT3B0aW9uJywKICAgICAgICAgICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgJXsgJFByZWZlcmVuY2VzeyRJdGVtfSB9LAogICAgICAgICAgICAgICAgICAgICAgICAleyRQYXJhbUl0ZW19LAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBpZiAoICRJdGVtRGF0YXtDbGFzc30gZXEgJ05FVycgKSB7CgogICAgICAgICAgICAjIG91dHB1dCBJdGVtRWRpdENsYXNzQWRkCiAgICAgICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCiAgICAgICAgICAgICAgICBOYW1lID0+ICdJdGVtRWRpdENsYXNzQWRkJywKICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgIENsYXNzID0+ICRJdGVtRGF0YXtDbGFzc30sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICApOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKCiAgICAgICAgICAgICMgb3V0cHV0IEl0ZW1FZGl0Q2xhc3NFeGlzdAogICAgICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgICAgICAgICAgTmFtZSA9PiAnSXRlbUVkaXRDbGFzc0V4aXN0JywKICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgIENsYXNzID0+ICRJdGVtRGF0YXtDbGFzc30sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgIyBBY3Rpb25PdmVydmlldwogICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ0FjdGlvbk92ZXJ2aWV3JywKICAgICAgICApOwoKICAgICAgICAjIG91dHB1dCBoZWFkZXIKICAgICAgICBteSAkT3V0cHV0ID0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5IZWFkZXIoKTsKICAgICAgICAkT3V0cHV0IC49ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+TmF2aWdhdGlvbkJhcigpOwoKICAgICAgICAjIGNyZWF0ZSBvdXRwdXQgc3RyaW5nCiAgICAgICAgJE91dHB1dCAuPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPk91dHB1dCgKICAgICAgICAgICAgVGVtcGxhdGVGaWxlID0+ICdBZG1pbkdlbmVyYWxDYXRhbG9nJywKICAgICAgICAgICAgRGF0YSAgICAgICAgID0+IFwlUGFyYW0sCiAgICAgICAgKTsKCiAgICAgICAgIyBhZGQgZm9vdGVyCiAgICAgICAgJE91dHB1dCAuPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPkZvb3RlcigpOwoKICAgICAgICByZXR1cm4gJE91dHB1dDsKICAgIH0KCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICAjIGNhdGFsb2cgaXRlbSBzYXZlCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICBlbHNpZiAoICRTZWxmLT57U3ViYWN0aW9ufSBlcSAnSXRlbVNhdmUnICkgewogICAgICAgIG15ICVJdGVtRGF0YTsKCiAgICAgICAgIyBnZXQgcGFyYW1zCiAgICAgICAgZm9yIG15ICRQYXJhbSAocXcoQ2xhc3MgSXRlbUlEIFZhbGlkSUQgQ29tbWVudCkpIHsKICAgICAgICAgICAgJEl0ZW1EYXRheyRQYXJhbX0gPSAkU2VsZi0+e1BhcmFtT2JqZWN0fS0+R2V0UGFyYW0oIFBhcmFtID0+ICRQYXJhbSApIHx8ICcnOwogICAgICAgIH0KCiAgICAgICAgIyBnZXQgbmFtZSBwYXJhbSwgbmFtZSBtdXN0IGJlIG5vdCBlbXB0eSwgYnV0IG51bWJlciB6ZXJvICgwKSBpcyBhbGxvd2VkCiAgICAgICAgJEl0ZW1EYXRhe05hbWV9ID0gJFNlbGYtPntQYXJhbU9iamVjdH0tPkdldFBhcmFtKCBQYXJhbSA9PiAnTmFtZScgKTsKCiAgICAgICAgIyBjaGVjayBjbGFzcwogICAgICAgIGlmICggJEl0ZW1EYXRhe0NsYXNzfSBlcSAnTkVXJyApIHsKICAgICAgICAgICAgcmV0dXJuICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+UmVkaXJlY3QoIE9QID0+ICJBY3Rpb249JFNlbGYtPntBY3Rpb259IiApOwogICAgICAgIH0KCiAgICAgICAgIyBzYXZlIHRvIGRhdGFiYXNlCiAgICAgICAgbXkgJFN1Y2Nlc3M7CiAgICAgICAgbXkgJEl0ZW1JRCA9ICRJdGVtRGF0YXtJdGVtSUR9OwogICAgICAgIGlmICggJEl0ZW1EYXRhe0l0ZW1JRH0gZXEgJ05FVycgKSB7CiAgICAgICAgICAgICRTdWNjZXNzID0gJFNlbGYtPntHZW5lcmFsQ2F0YWxvZ09iamVjdH0tPkl0ZW1BZGQoCiAgICAgICAgICAgICAgICAlSXRlbURhdGEsCiAgICAgICAgICAgICAgICBVc2VySUQgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICAgICApOwogICAgICAgICAgICAkSXRlbUlEID0gJFN1Y2Nlc3M7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICAkU3VjY2VzcyA9ICRTZWxmLT57R2VuZXJhbENhdGFsb2dPYmplY3R9LT5JdGVtVXBkYXRlKAogICAgICAgICAgICAgICAgJUl0ZW1EYXRhLAogICAgICAgICAgICAgICAgVXNlcklEID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgICMgdXBkYXRlIHByZWZlcmVuY2VzCiAgICAgICAgbXkgJEdDRGF0YSAgICAgID0gJFNlbGYtPntHZW5lcmFsQ2F0YWxvZ09iamVjdH0tPkl0ZW1HZXQoIEl0ZW1JRCA9PiAkSXRlbUlEICk7CiAgICAgICAgbXkgJVByZWZlcmVuY2VzID0gKCk7CiAgICAgICAgbXkgJE5vdGUgICAgICAgID0gJyc7CgogICAgICAgIGlmICggJFNlbGYtPntDb25maWdPYmplY3R9LT5HZXQoJ0dlbmVyYWxDYXRhbG9nUHJlZmVyZW5jZXMnKSApIHsKICAgICAgICAgICAgJVByZWZlcmVuY2VzID0gJXsgJFNlbGYtPntDb25maWdPYmplY3R9LT5HZXQoJ0dlbmVyYWxDYXRhbG9nUHJlZmVyZW5jZXMnKSB9OwogICAgICAgIH0KCiAgICAgICAgZm9yIG15ICRJdGVtICggc29ydCBrZXlzICVQcmVmZXJlbmNlcyApIHsKICAgICAgICAgICAgbXkgJE1vZHVsZSA9ICRQcmVmZXJlbmNlc3skSXRlbX0tPntNb2R1bGV9CiAgICAgICAgICAgICAgICB8fCAnS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkdlbmVyYWxDYXRhbG9nUHJlZmVyZW5jZXNHZW5lcmljJzsKCiAgICAgICAgICAgICMgbG9hZCBtb2R1bGUKICAgICAgICAgICAgaWYgKCAhJFNlbGYtPntNYWluT2JqZWN0fS0+UmVxdWlyZSgkTW9kdWxlKSApIHsKICAgICAgICAgICAgICAgIHJldHVybiAkU2VsZi0+e0xheW91dE9iamVjdH0tPkZhdGFsRXJyb3IoKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgbXkgJE9iamVjdCA9ICRNb2R1bGUtPm5ldygKICAgICAgICAgICAgICAgICV7JFNlbGZ9LAogICAgICAgICAgICAgICAgQ29uZmlnSXRlbSA9PiAkUHJlZmVyZW5jZXN7JEl0ZW19LAogICAgICAgICAgICAgICAgRGVidWcgICAgICA9PiAkU2VsZi0+e0RlYnVnfSwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgbXkgQFBhcmFtcyA9ICRPYmplY3QtPlBhcmFtKCBHZW5lcmFsQ2F0YWxvZ0RhdGEgPT4gJEdDRGF0YSApOwogICAgICAgICAgICBpZiAoQFBhcmFtcykgewogICAgICAgICAgICAgICAgbXkgJUdldFBhcmFtID0gKCk7CiAgICAgICAgICAgICAgICBmb3IgbXkgJFBhcmFtSXRlbSAoQFBhcmFtcykgewogICAgICAgICAgICAgICAgICAgIG15IEBBcnJheSA9ICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRBcnJheSggUGFyYW0gPT4gJFBhcmFtSXRlbS0+e05hbWV9ICk7CiAgICAgICAgICAgICAgICAgICAgJEdldFBhcmFteyAkUGFyYW1JdGVtLT57TmFtZX0gfSA9IFxAQXJyYXk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAoCiAgICAgICAgICAgICAgICAgICAgISRPYmplY3QtPlJ1bigKICAgICAgICAgICAgICAgICAgICAgICAgR2V0UGFyYW0gPT4gXCVHZXRQYXJhbSwKICAgICAgICAgICAgICAgICAgICAgICAgSXRlbUlEICAgPT4gJEdDRGF0YS0+e0l0ZW1JRH0sCiAgICAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAkTm90ZSAuPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPk5vdGlmeSggSW5mbyA9PiAkT2JqZWN0LT5FcnJvcigpICk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGlmICggISRTdWNjZXNzICkgewogICAgICAgICAgICByZXR1cm4gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5FcnJvclNjcmVlbigpOwogICAgICAgIH0KCiAgICAgICAgIyByZWRpcmVjdCB0byBvdmVydmlldyBjbGFzcyBsaXN0CiAgICAgICAgcmV0dXJuICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+UmVkaXJlY3QoCiAgICAgICAgICAgIE9QID0+ICJBY3Rpb249JFNlbGYtPntBY3Rpb259O1N1YmFjdGlvbj1JdGVtTGlzdDtDbGFzcz0kSXRlbURhdGF7Q2xhc3N9IgogICAgICAgICk7CiAgICB9CgogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwogICAgIyBvdmVydmlldwogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwogICAgZWxzZSB7CgogICAgICAgICMgb3V0cHV0IG92ZXJ2aWV3CiAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnT3ZlcnZpZXcnLAogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgfSwKICAgICAgICApOwogICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ092ZXJ2aWV3Q2xhc3MnLAogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgfSwKICAgICAgICApOwoKICAgICAgICAjIGdldCBjYXRhbG9nIGNsYXNzIGxpc3QKICAgICAgICBteSAkQ2xhc3NMaXN0ID0gJFNlbGYtPntHZW5lcmFsQ2F0YWxvZ09iamVjdH0tPkNsYXNzTGlzdCgpOwoKICAgICAgICBmb3IgbXkgJENsYXNzICggQHskQ2xhc3NMaXN0fSApIHsKCiAgICAgICAgICAgICMgb3V0cHV0IG92ZXJ2aWV3IGNsYXNzIGxpc3QKICAgICAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jaygKICAgICAgICAgICAgICAgIE5hbWUgPT4gJ092ZXJ2aWV3Q2xhc3NMaXN0JywKICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgIENsYXNzID0+ICRDbGFzcywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAjIEFjdGlvbkFkZENsYXNzCiAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnQWN0aW9uQWRkQ2xhc3MnLAogICAgICAgICk7CgogICAgICAgICMgb3V0cHV0IGhlYWRlciBhbmQgbmF2YmFyCiAgICAgICAgbXkgJE91dHB1dCA9ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+SGVhZGVyKCk7CiAgICAgICAgJE91dHB1dCAuPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPk5hdmlnYXRpb25CYXIoKTsKCiAgICAgICAgIyBjcmVhdGUgb3V0cHV0IHN0cmluZwogICAgICAgICRPdXRwdXQgLj0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5PdXRwdXQoCiAgICAgICAgICAgIFRlbXBsYXRlRmlsZSA9PiAnQWRtaW5HZW5lcmFsQ2F0YWxvZycsCiAgICAgICAgICAgIERhdGEgICAgICAgICA9PiBcJVBhcmFtLAogICAgICAgICk7CgogICAgICAgICMgYWRkIGZvb3RlcgogICAgICAgICRPdXRwdXQgLj0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5Gb290ZXIoKTsKCiAgICAgICAgcmV0dXJuICRPdXRwdXQ7CiAgICB9Cn0KCjE7Cg==
IyAtLQojIEtlcm5lbC9PdXRwdXQvSFRNTC9HZW5lcmFsQ2F0YWxvZ1ByZWZlcmVuY2VzR2VuZXJpYy5wbQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE0IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkdlbmVyYWxDYXRhbG9nUHJlZmVyZW5jZXNHZW5lcmljOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKdXNlIEtlcm5lbDo6U3lzdGVtOjpHcm91cDsKCnN1YiBuZXcgewogICAgbXkgKCAkVHlwZSwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGFsbG9jYXRlIG5ldyBoYXNoIGZvciBvYmplY3QKICAgIG15ICRTZWxmID0geyVQYXJhbX07CiAgICBibGVzcyggJFNlbGYsICRUeXBlICk7CgogICAgIyBnZXQgbmVlZGVkIG9iamVjdHMKICAgIGZvciBteSAkT2JqZWN0ICgKICAgICAgICBxdyhDb25maWdPYmplY3QgTG9nT2JqZWN0IERCT2JqZWN0IExheW91dE9iamVjdCBVc2VySUQKICAgICAgICBQYXJhbU9iamVjdCBDb25maWdJdGVtIEdlbmVyYWxDYXRhbG9nT2JqZWN0IEVuY29kZU9iamVjdCBNYWluT2JqZWN0KQogICAgICAgICkKICAgIHsKICAgICAgICBkaWUgIkdvdCBubyAkT2JqZWN0ISIgaWYgKCAhJFNlbGYtPnskT2JqZWN0fSApOwogICAgfQoKICAgICRTZWxmLT57R3JvdXBPYmplY3R9ID0gS2VybmVsOjpTeXN0ZW06Okdyb3VwLT5uZXcoICV7JFNlbGZ9ICk7CgogICAgcmV0dXJuICRTZWxmOwp9CgpzdWIgUGFyYW0gewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICBteSBAUGFyYW1zID0gKCk7CiAgICBteSAkR2V0UGFyYW0gPSAkU2VsZi0+e1BhcmFtT2JqZWN0fS0+R2V0UGFyYW0oIFBhcmFtID0+ICRTZWxmLT57Q29uZmlnSXRlbX0tPntQcmVmS2V5fSApOwoKICAgIGlmICggIWRlZmluZWQoJEdldFBhcmFtKSApIHsKICAgICAgICAkR2V0UGFyYW0KICAgICAgICAgICAgPSBkZWZpbmVkKCAkUGFyYW17R2VuZXJhbENhdGFsb2dEYXRhfS0+eyAkU2VsZi0+e0NvbmZpZ0l0ZW19LT57UHJlZktleX0gfSApCiAgICAgICAgICAgID8gJFBhcmFte0dlbmVyYWxDYXRhbG9nRGF0YX0tPnsgJFNlbGYtPntDb25maWdJdGVtfS0+e1ByZWZLZXl9IH0KICAgICAgICAgICAgOiAkU2VsZi0+e0NvbmZpZ0l0ZW19LT57RGF0YVNlbGVjdGVkfTsKICAgIH0KCiAgICBpZiAoICEoIGRlZmluZWQgJFNlbGYtPntDb25maWdJdGVtfS0+e0Jsb2NrfSAmJiAkU2VsZi0+e0NvbmZpZ0l0ZW19LT57QmxvY2t9ICkgKSB7CiAgICAgICAgJFNlbGYtPntDb25maWdJdGVtfS0+e0Jsb2NrfSA9ICdUZXh0JzsKICAgIH0KCiAgICBpZiAoICRTZWxmLT57Q29uZmlnSXRlbX0tPntCbG9ja30gZXEgJ1Blcm1pc3Npb24nICkgewogICAgICAgICRQYXJhbXtEYXRhfSAgICAgICAgID0geyAkU2VsZi0+e0dyb3VwT2JqZWN0fS0+R3JvdXBMaXN0KCBWYWxpZCA9PiAxICkgfTsKICAgICAgICAkUGFyYW17UG9zc2libGVOb25lfSA9IDE7CiAgICAgICAgJFBhcmFte0Jsb2NrfSAgICAgICAgPSAnT3B0aW9uJzsKICAgIH0KCiAgICBwdXNoKAogICAgICAgIEBQYXJhbXMsCiAgICAgICAgewogICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgICAgIE5hbWUgICAgICAgPT4gJFNlbGYtPntDb25maWdJdGVtfS0+e1ByZWZLZXl9LAogICAgICAgICAgICBTZWxlY3RlZElEID0+ICRHZXRQYXJhbSwKICAgICAgICB9LAogICAgKTsKCiAgICByZXR1cm4gQFBhcmFtczsKfQoKc3ViIFJ1biB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIGZvciBteSAkS2V5ICggc29ydCBrZXlzICV7ICRQYXJhbXtHZXRQYXJhbX0gfSApIHsKICAgICAgICBteSBAQXJyYXkgPSBAeyAkUGFyYW17R2V0UGFyYW19LT57JEtleX0gfTsKICAgICAgICBmb3IgbXkgJFZhbHVlIChAQXJyYXkpIHsKCiAgICAgICAgICAgICMgcHJlZiB1cGRhdGUgZGIKICAgICAgICAgICAgJFNlbGYtPntHZW5lcmFsQ2F0YWxvZ09iamVjdH0tPkdlbmVyYWxDYXRhbG9nUHJlZmVyZW5jZXNTZXQoCiAgICAgICAgICAgICAgICBJdGVtSUQgPT4gJFBhcmFte0l0ZW1JRH0sCiAgICAgICAgICAgICAgICBLZXkgICAgPT4gJEtleSwKICAgICAgICAgICAgICAgIFZhbHVlICA9PiAkVmFsdWUsCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgfQoKICAgICRTZWxmLT57TWVzc2FnZX0gPSAnUHJlZmVyZW5jZXMgdXBkYXRlZCBzdWNjZXNzZnVsbHkhJzsKICAgIHJldHVybiAxOwp9CgpzdWIgRXJyb3IgewogICAgbXkgJFNlbGYgPSBzaGlmdDsKCiAgICByZXR1cm4gJFNlbGYtPntFcnJvcn0gfHwgJyc7Cn0KCnN1YiBNZXNzYWdlIHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CgogICAgcmV0dXJuICRTZWxmLT57TWVzc2FnZX0gfHwgJyc7Cn0KCjE7Cg==
IyAtLQojIEFBQUdlbmVyYWxDYXRhbG9nLnR0IC0gJFRleHQgdmFyaWFibGUgZmlsZQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE0IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCiMgQ29tbW9uClslIFRyYW5zbGF0ZSgiRnVuY3Rpb25hbGl0eSIpIHwgaHRtbCAlXQo=
IyAtLQojIEFkbWluR2VuZXJhbENhdGFsb2cudHQgLSBwcm92aWRlcyBIVE1MIGZvcm0gZm9yIEFkbWluR2VuZXJhbENhdGFsb2cKIyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxNCBPVFJTIEFHLCBodHRwOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0LgojIC0tCgpbJSBJbnNlcnRUZW1wbGF0ZSgiQ29sb3JwaWNrZXIudHQiKSAlXQoKWyUgUmVuZGVyQmxvY2tTdGFydCgiT3ZlcnZpZXciKSAlXQo8ZGl2IGNsYXNzPSJNYWluQm94IEFSSUFSb2xlTWFpbiBMYXlvdXRGaXhlZFNpZGViYXIgU2lkZWJhckZpcnN0Ij4KICAgIDxoMT5bJSBUcmFuc2xhdGUoIkdlbmVyYWwgQ2F0YWxvZyBNYW5hZ2VtZW50IikgfCBodG1sICVdPC9oMT4KCiAgICA8ZGl2IGNsYXNzPSJTaWRlYmFyQ29sdW1uIj4KICAgICAgICA8ZGl2IGNsYXNzPSJXaWRnZXRTaW1wbGUiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJIZWFkZXIiPgogICAgICAgICAgICAgICAgPGgyPlslIFRyYW5zbGF0ZSgiQWN0aW9ucyIpIHwgaHRtbCAlXTwvaDI+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSdDb250ZW50Jz4KICAgICAgICAgICAgICAgIDx1bCBjbGFzcz0iQWN0aW9uTGlzdCI+ClslIFJlbmRlckJsb2NrU3RhcnQoIkFjdGlvbkFkZEl0ZW0iKSAlXQogICAgICAgICAgICAgICAgICAgIDxsaT4KICAgICAgICAgICAgICAgICAgICAgICAgPGZvcm0gYWN0aW9uPSJbJSBFbnYoIkNHSUhhbmRsZSIpICVdIiBtZXRob2Q9ImdldCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJBY3Rpb24iIHZhbHVlPSJbJSBFbnYoIkFjdGlvbiIpICVdIi8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJTdWJhY3Rpb24iIHZhbHVlPSJJdGVtRWRpdCIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iQ2xhc3MiIHZhbHVlPSJbJSBEYXRhLkNsYXNzIHwgaHRtbCAlXSIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iSXRlbUlEIiB2YWx1ZT0iTkVXIi8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJDYWxsRm9yQWN0aW9uIFBsdXMiIHR5cGU9InN1Ym1pdCIgdmFsdWU9IlslIFRyYW5zbGF0ZSgiQWRkIikgfCBodG1sICVdIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj5bJSBUcmFuc2xhdGUoIkFkZCBDYXRhbG9nIEl0ZW0iKSB8IGh0bWwgJV08L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgICAgICAgPC9mb3JtPgogICAgICAgICAgICAgICAgICAgIDwvbGk+ClslIFJlbmRlckJsb2NrRW5kKCJBY3Rpb25BZGRJdGVtIikgJV0KWyUgUmVuZGVyQmxvY2tTdGFydCgiQWN0aW9uQWRkQ2xhc3MiKSAlXQogICAgICAgICAgICAgICAgICAgIDxsaT4KICAgICAgICAgICAgICAgICAgICAgICAgPGZvcm0gYWN0aW9uPSJbJSBFbnYoIkNHSUhhbmRsZSIpICVdIiBtZXRob2Q9ImdldCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJBY3Rpb24iIHZhbHVlPSJbJSBFbnYoIkFjdGlvbiIpICVdIi8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJTdWJhY3Rpb24iIHZhbHVlPSJJdGVtRWRpdCIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iSXRlbUlEIiB2YWx1ZT0iTkVXIi8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJDbGFzcyIgdmFsdWU9Ik5FVyIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iQ2FsbEZvckFjdGlvbiBQbHVzIiB0eXBlPSJzdWJtaXQiIHZhbHVlPSJbJSBUcmFuc2xhdGUoIkFkZCIpIHwgaHRtbCAlXSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+WyUgVHJhbnNsYXRlKCJBZGQgQ2F0YWxvZyBDbGFzcyIpIHwgaHRtbCAlXTwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgICAgICAgICAgICAgICAgICA8L2Zvcm0+CiAgICAgICAgICAgICAgICAgICAgPC9saT4KWyUgUmVuZGVyQmxvY2tFbmQoIkFjdGlvbkFkZENsYXNzIikgJV0KWyUgUmVuZGVyQmxvY2tTdGFydCgiQWN0aW9uT3ZlcnZpZXciKSAlXQogICAgICAgICAgICAgICAgICAgIDxsaT4KICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iWyUgRW52KCJCYXNlbGluayIpICVdQWN0aW9uPVslIEVudigiQWN0aW9uIikgJV0iIGNsYXNzPSJDYWxsRm9yQWN0aW9uIj48c3Bhbj5bJSBUcmFuc2xhdGUoIkdvIHRvIG92ZXJ2aWV3IikgfCBodG1sICVdPC9zcGFuPjwvYT4KICAgICAgICAgICAgICAgICAgICA8L2xpPgpbJSBSZW5kZXJCbG9ja0VuZCgiQWN0aW9uT3ZlcnZpZXciKSAlXQogICAgICAgICAgICAgICAgPC91bD4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KCiAgICA8ZGl2IGNsYXNzPSJDb250ZW50Q29sdW1uIj4KICAgICAgICA8ZGl2IGNsYXNzPSJXaWRnZXRTaW1wbGUiPgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJPdmVydmlld0NsYXNzIikgJV0KICAgICAgICAgICAgPGRpdiBjbGFzcz0iSGVhZGVyIj4KICAgICAgICAgICAgICAgIDxoMj5bJSBUcmFuc2xhdGUoIkxpc3QiKSB8IGh0bWwgJV08L2gyPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ29udGVudCI+CiAgICAgICAgICAgICAgICA8dGFibGUgY2xhc3M9IkRhdGFUYWJsZSI+CiAgICAgICAgICAgICAgICAgICAgPHRoZWFkPgogICAgICAgICAgICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+WyUgVHJhbnNsYXRlKCJDYXRhbG9nIENsYXNzIikgfCBodG1sICVdPC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgICAgICAgICA8L3RoZWFkPgogICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KWyUgUmVuZGVyQmxvY2tTdGFydCgiT3ZlcnZpZXdDbGFzc0xpc3QiKSAlXQogICAgICAgICAgICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9IkFzQmxvY2siICBocmVmPSJbJSBFbnYoIkJhc2VsaW5rIikgJV1BY3Rpb249WyUgRW52KCJBY3Rpb24iKSAlXTtTdWJhY3Rpb249SXRlbUxpc3Q7Q2xhc3M9WyUgRGF0YS5DbGFzcyB8IHVyaSAlXSI+WyUgRGF0YS5DbGFzcyB8IGh0bWwgJV08L2E+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgpbJSBSZW5kZXJCbG9ja0VuZCgiT3ZlcnZpZXdDbGFzc0xpc3QiKSAlXQogICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+CiAgICAgICAgICAgICAgICA8L3RhYmxlPgogICAgICAgICAgICA8L2Rpdj4KWyUgUmVuZGVyQmxvY2tFbmQoIk92ZXJ2aWV3Q2xhc3MiKSAlXQoKWyUgUmVuZGVyQmxvY2tTdGFydCgiT3ZlcnZpZXdJdGVtIikgJV0KICAgICAgICAgICAgPGRpdiBjbGFzcz0iSGVhZGVyIj4KICAgICAgICAgICAgICAgIDxoMj5bJSBUcmFuc2xhdGUoIkxpc3QiKSB8IGh0bWwgJV08L2gyPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ29udGVudCI+CgogICAgICAgICAgICAgICAgPHRhYmxlIGNsYXNzPSJEYXRhVGFibGUiPgogICAgICAgICAgICAgICAgICAgIDx0aGVhZD4KICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzPSJXNjBwYyI+WyUgRGF0YS5DbGFzcyB8IGh0bWwgJV08L3RoPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzPSJDZW50ZXIiPlslIFRyYW5zbGF0ZSgiVmFsaWQiKSB8IGh0bWwgJV08L3RoPgogICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgICAgICAgIDwvdGhlYWQ+CiAgICAgICAgICAgICAgICAgICAgPHRib2R5PgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJPdmVydmlld0l0ZW1MaXN0IikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IlslIEVudigiQmFzZWxpbmsiKSAlXUFjdGlvbj1bJSBFbnYoIkFjdGlvbiIpICVdO1N1YmFjdGlvbj1JdGVtRWRpdDtJdGVtSUQ9WyUgRGF0YS5JdGVtSUQgfCB1cmkgJV0iPlslIERhdGEuTmFtZSB8IGh0bWwgJV08L2E+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJDZW50ZXIiPlslIFRyYW5zbGF0ZShEYXRhLlZhbGlkKSB8IGh0bWwgJV08L3RkPgogICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgpbJSBSZW5kZXJCbG9ja0VuZCgiT3ZlcnZpZXdJdGVtTGlzdCIpICVdCiAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KICAgICAgICAgICAgICAgIDwvdGFibGU+CiAgICAgICAgICAgIDwvZGl2PgpbJSBSZW5kZXJCbG9ja0VuZCgiT3ZlcnZpZXdJdGVtIikgJV0KClslIFJlbmRlckJsb2NrU3RhcnQoIkl0ZW1FZGl0IikgJV0KICAgICAgICAgICAgPGRpdiBjbGFzcz0iSGVhZGVyIj4KICAgICAgICAgICAgICAgIDxoMj5bJSBUcmFuc2xhdGUoIkl0ZW0iKSB8IGh0bWwgJV0gWyUgVHJhbnNsYXRlKCJFZGl0IikgfCBodG1sICVdOjwvaDI+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJDb250ZW50Ij4KCiAgICAgICAgICAgICAgICA8Zm9ybSBhY3Rpb249IlslIEVudigiQ0dJSGFuZGxlIikgJV0iIG1ldGhvZD0iZ2V0IiBjbGFzcz0iVmFsaWRhdGUiPgogICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IkFjdGlvbiIgdmFsdWU9IlslIEVudigiQWN0aW9uIikgJV0iLz4KICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJTdWJhY3Rpb24iIHZhbHVlPSJJdGVtU2F2ZSIvPgogICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9Ikl0ZW1JRCIgdmFsdWU9IlslIERhdGEuSXRlbUlEIHwgaHRtbCAlXSIvPgogICAgICAgICAgICAgICAgICAgIDxmaWVsZHNldCBjbGFzcz0iVGFibGVMaWtlIj4KWyUgUmVuZGVyQmxvY2tTdGFydCgiSXRlbUVkaXRDbGFzc0FkZCIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz0iTWFuZGF0b3J5IiBmb3I9IkNsYXNzRHNjIj48c3BhbiBjbGFzcz0iTWFya2VyIj4qPC9zcGFuPlslIFRyYW5zbGF0ZSgiQ2F0YWxvZyBDbGFzcyIpIHwgaHRtbCAlXTo8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iQ2xhc3MiIGlkPSJDbGFzc0RzYyIgdmFsdWU9IlslIERhdGEuTmFtZSB8IGh0bWwgJV0iIGNsYXNzPSJXNTBwYyBWYWxpZGF0ZV9SZXF1aXJlZCIgbWF4bGVuZ3RoPSIxMDAiIC8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJDbGFzc0RzY0Vycm9yIiBjbGFzcz0iVG9vbHRpcEVycm9yTWVzc2FnZSIgPjxwPlslIFRyYW5zbGF0ZSgiVGhpcyBmaWVsZCBpcyByZXF1aXJlZC4iKSB8IGh0bWwgJV08L3A+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJDbGFzc0RzY1NlcnZlckVycm9yIiBjbGFzcz0iVG9vbHRpcEVycm9yTWVzc2FnZSI+PHA+WyUgVHJhbnNsYXRlKCJUaGlzIGZpZWxkIGlzIHJlcXVpcmVkLiIpIHwgaHRtbCAlXTwvcD48L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KWyUgUmVuZGVyQmxvY2tFbmQoIkl0ZW1FZGl0Q2xhc3NBZGQiKSAlXQpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJJdGVtRWRpdENsYXNzRXhpc3QiKSAlXQogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWw+WyUgVHJhbnNsYXRlKCJDYXRhbG9nIENsYXNzIikgfCBodG1sICVdOiA8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBEYXRhLkNsYXNzIHwgaHRtbCAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iQ2xhc3MiIHZhbHVlPSJbJSBEYXRhLkNsYXNzIHwgaHRtbCAlXSI+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+ClslIFJlbmRlckJsb2NrRW5kKCJJdGVtRWRpdENsYXNzRXhpc3QiKSAlXQogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9Ik1hbmRhdG9yeSIgZm9yPSJOYW1lIj48c3BhbiBjbGFzcz0iTWFya2VyIj4qPC9zcGFuPlslIFRyYW5zbGF0ZSgiTmFtZSIpIHwgaHRtbCAlXTogPC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIG5hbWU9Ik5hbWUiIGlkPSJOYW1lIiB2YWx1ZT0iWyUgRGF0YS5OYW1lIHwgaHRtbCAlXSIgY2xhc3M9Ilc1MHBjIFZhbGlkYXRlX1JlcXVpcmVkIiBtYXhsZW5ndGg9IjEwMCIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD0iTmFtZUVycm9yIiBjbGFzcz0iVG9vbHRpcEVycm9yTWVzc2FnZSIgPjxwPlslIFRyYW5zbGF0ZSgiVGhpcyBmaWVsZCBpcyByZXF1aXJlZC4iKSB8IGh0bWwgJV08L3A+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJOYW1lU2VydmVyRXJyb3IiIGNsYXNzPSJUb29sdGlwRXJyb3JNZXNzYWdlIj48cD5bJSBUcmFuc2xhdGUoIlRoaXMgZmllbGQgaXMgcmVxdWlyZWQuIikgfCBodG1sICVdPC9wPjwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJJbnB1dEtleSIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9IlslIERhdGEuTmFtZSB8IGh0bWwgJV0iPlslIFRyYW5zbGF0ZShEYXRhLkxhYmVsKSB8IGh0bWwgJV0gWyUgVHJhbnNsYXRlKERhdGEuS2V5KSB8IGh0bWwgJV06IDwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJbJSBEYXRhLk5hbWUgfCBodG1sICVdIiBpZD0iWyUgRGF0YS5OYW1lIHwgaHRtbCAlXSIgdmFsdWU9IlslIERhdGEuU2VsZWN0ZWRJRCB8IGh0bWwgJV0iIGNsYXNzPSJXNTBwYyIgbWF4bGVuZ3RoPSIxMDAiLz4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KWyUgUmVuZGVyQmxvY2tFbmQoIklucHV0S2V5IikgJV0KWyUgUmVuZGVyQmxvY2tTdGFydCgiSW5wdXQiKSAlXQogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJbJSBEYXRhLk5hbWUgfCBodG1sICVdIj5bJSBUcmFuc2xhdGUoRGF0YS5MYWJlbCkgfCBodG1sICVdOjxici8+PGVtPihbJSBUcmFuc2xhdGUoRGF0YS5EZXNjKSB8IGh0bWwgJV0pPC9lbT48L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iWyUgRGF0YS5OYW1lIHwgaHRtbCAlXSIgaWQ9IlslIERhdGEuTmFtZSB8IGh0bWwgJV0iIHZhbHVlPSJbJSBEYXRhLlNlbGVjdGVkSUQgfCBodG1sICVdIiBjbGFzcz0iVzUwcGMiLz4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KWyUgUmVuZGVyQmxvY2tFbmQoIklucHV0IikgJV0KWyUgUmVuZGVyQmxvY2tTdGFydCgiVGV4dEFyZWEiKSAlXQogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJbJSBEYXRhLk5hbWUgfCBodG1sICVdIj5bJSBUcmFuc2xhdGUoRGF0YS5MYWJlbCkgfCBodG1sICVdOjxici8+PGVtPihbJSBUcmFuc2xhdGUoRGF0YS5EZXNjKSB8IGh0bWwgJV0pPC9lbT48L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGV4dGFyZWEgbmFtZT0iWyUgRGF0YS5OYW1lIHwgaHRtbCAlXSIgaWQ9IlslIERhdGEuTmFtZSB8IGh0bWwgJV0iIHJvd3M9IlslIERhdGEuUm93cyB8IGh0bWwgJV0iIGNvbHM9IlslIERhdGEuQ29scyB8IGh0bWwgJV0iPlslIERhdGEuU2VsZWN0ZWRJRCB8IGh0bWwgJV08L3RleHRhcmVhPgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgpbJSBSZW5kZXJCbG9ja0VuZCgiVGV4dEFyZWEiKSAlXQpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJPcHRpb24iKSAlXQogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJbJSBEYXRhLk5hbWUgfCBodG1sICVdIj5bJSBUcmFuc2xhdGUoRGF0YS5MYWJlbCkgfCBodG1sICVdIFslIFRyYW5zbGF0ZShEYXRhLktleSkgfCBodG1sICVdOjxici8+PGVtPihbJSBUcmFuc2xhdGUoRGF0YS5EZXNjKSB8IGh0bWwgJV0pPC9lbT48L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBEYXRhLk9wdGlvbiAlXQogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgpbJSBSZW5kZXJCbG9ja0VuZCgiT3B0aW9uIikgJV0KWyUgUmVuZGVyQmxvY2tTdGFydCgiVXBsb2FkIikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0iWyUgRGF0YS5OYW1lIHwgaHRtbCAlXSI+WyUgVHJhbnNsYXRlKERhdGEuTGFiZWwpIHwgaHRtbCAlXSBbJSBUcmFuc2xhdGUoRGF0YS5LZXkpIHwgaHRtbCAlXTogPC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG5hbWU9IlslIERhdGEuTmFtZSB8IGh0bWwgJV0iIGlkPSJbJSBEYXRhLk5hbWUgfCBodG1sICVdIiB0eXBlPSJmaWxlIiBzaXplPSIzMCIgY2xhc3M9ImZpeGVkIi8+PGJyLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiI+WyUgRGF0YS5GaWxlbmFtZSB8IGh0bWwgJV08L2E+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+ClslIFJlbmRlckJsb2NrRW5kKCJVcGxvYWQiKSAlXQpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJQYXNzd29yZCIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9IlslIERhdGEuTmFtZSB8IGh0bWwgJV0iPlslIFRyYW5zbGF0ZShEYXRhLkxhYmVsKSB8IGh0bWwgJV0gWyUgVHJhbnNsYXRlKERhdGEuS2V5KSB8IGh0bWwgJV06IDwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJwYXNzd29yZCIgbmFtZT0iWyUgRGF0YS5OYW1lIHwgaHRtbCAlXSIgaWQ9IlslIERhdGEuTmFtZSB8IGh0bWwgJV0iIHZhbHVlPSIiIGNsYXNzPSJXNTBwYyIvPgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgpbJSBSZW5kZXJCbG9ja0VuZCgiUGFzc3dvcmQiKSAlXQpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJDb2xvclBpY2tlciIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9IlslIERhdGEuTmFtZSB8IGh0bWwgJV0iPlslIFRyYW5zbGF0ZShEYXRhLkxhYmVsKSB8IGh0bWwgJV06PGJyLz48ZW0+KFslIFRyYW5zbGF0ZShEYXRhLkRlc2MpIHwgaHRtbCAlXSk8L2VtPjwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJbJSBEYXRhLk5hbWUgfCBodG1sICVdIiBpZD0iWyUgRGF0YS5OYW1lIHwgaHRtbCAlXSIgdmFsdWU9IlslIERhdGEuU2VsZWN0ZWRJRCB8IGh0bWwgJV0iIGNsYXNzPSJXNTBwYyBKU0NvbG9yUGlja2VyIHtwaWNrZXJCb3JkZXJDb2xvcjonI0JCQiAjQkJCICNCQkIgI0JCQicsIHBpY2tlckluc2V0Q29sb3I6JyNCQkIgI0JCQiAjQkJCICNCQkInfSIvPgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgpbJSBSZW5kZXJCbG9ja0VuZCgiQ29sb3JQaWNrZXIiKSAlXQogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJWYWxpZElEIj5bJSBUcmFuc2xhdGUoIlZhbGlkIikgfCBodG1sICVdOiA8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBEYXRhLlZhbGlkT3B0aW9uU3RyZyAlXQogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgoKICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0iQ29tbWVudCI+WyUgVHJhbnNsYXRlKCJDb21tZW50IikgfCBodG1sICVdOiA8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iQ29tbWVudCIgaWQ9IkNvbW1lbnQiIHZhbHVlPSJbJSBEYXRhLkNvbW1lbnQgfCBodG1sICVdIiBjbGFzcz0iVzUwcGMiIG1heGxlbmd0aD0iMjAwIi8+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCBTcGFjaW5nVG9wIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9IlByaW1hcnkiIHR5cGU9InN1Ym1pdCIgaWQ9IlN1Ym1pdCIgdmFsdWU9IlslIFRyYW5zbGF0ZSgiU3VibWl0IikgfCBodG1sICVdIj5bJSBUcmFuc2xhdGUoIlN1Ym1pdCIpIHwgaHRtbCAlXTwvYnV0dG9uPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgVHJhbnNsYXRlKCJvciIpIHwgaHRtbCAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iWyUgRW52KCJCYXNlbGluayIpICVdQWN0aW9uPVslIEVudigiQWN0aW9uIikgJV0iPlslIFRyYW5zbGF0ZSgiQ2FuY2VsIikgfCBodG1sICVdPC9hPgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgoKICAgICAgICAgICAgICAgICAgICA8L2ZpZWxkc2V0PgogICAgICAgICAgICAgICAgPC9mb3JtPgogICAgICAgICAgICA8L2Rpdj4KWyUgUmVuZGVyQmxvY2tFbmQoIkl0ZW1FZGl0IikgJV0KICAgICAgICA8L2Rpdj4KICAgIDwvZGl2PgogICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2Pgo8L2Rpdj4KWyUgUmVuZGVyQmxvY2tFbmQoIk92ZXJ2aWV3IikgJV0K
IyAtLQojIENvbG9ycGlja2VyLnR0IC0gcHJvdmlkZXMgdGhlIGRhdGEgbmVlZGVkIGZvciB0aGUgSlMgY29sb3JwaWNrZXIKIyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxNCBPVFJTIEFHLCBodHRwOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0LgojIC0tCgpbJSBXUkFQUEVSIEpTT25Eb2N1bWVudENvbXBsZXRlICVdCjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4vLzwhW0NEQVRBWwoKICAgIC8qZ2xvYmFsIGpzY29sb3I6IHRydWUgKi8KICAgIGpzY29sb3IuZGlyID0gJ1slIENvbmZpZygiRnJvbnRlbmQ6OkphdmFTY3JpcHRQYXRoIikgJV0nICsgJ3RoaXJkcGFydHkvanNjb2xvcl8xLjQuMS8nOwogICAganNjb2xvci5iaW5kQ2xhc3MgPSAnSlNDb2xvclBpY2tlcic7CiAgICBqc2NvbG9yLmluc3RhbGwoKTsKCi8vXV0+PC9zY3JpcHQ+ClslIEVORCAlXQo=
IyAtLQojIEtlcm5lbC9TeXN0ZW0vR2VuZXJhbENhdGFsb2cucG0gLSBhbGwgZ2VuZXJhbCBjYXRhbG9nIGZ1bmN0aW9ucwojIENvcHlyaWdodCAoQykgMjAwMS0yMDE0IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpTeXN0ZW06OkdlbmVyYWxDYXRhbG9nOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKb3VyIEBPYmplY3REZXBlbmRlbmNpZXMgPSAoCiAgICAnS2VybmVsOjpDb25maWcnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpDYWNoZScsCiAgICAnS2VybmVsOjpTeXN0ZW06OkNoZWNrSXRlbScsCiAgICAnS2VybmVsOjpTeXN0ZW06OkRCJywKICAgICdLZXJuZWw6OlN5c3RlbTo6TG9nJywKICAgICdLZXJuZWw6OlN5c3RlbTo6TWFpbicsCik7Cgo9aGVhZDEgTkFNRQoKS2VybmVsOjpTeXN0ZW06OkdlbmVyYWxDYXRhbG9nIC0gZ2VuZXJhbCBjYXRhbG9nIGxpYgoKPWhlYWQxIFNZTk9QU0lTCgpBbGwgZ2VuZXJhbCBjYXRhbG9nIGZ1bmN0aW9ucy4KCj1oZWFkMSBQVUJMSUMgSU5URVJGQUNFCgo9b3ZlciA0Cgo9Y3V0Cgo9aXRlbSBuZXcoKQoKY3JlYXRlIGFuIG9iamVjdAoKICAgIHVzZSBLZXJuZWw6OlN5c3RlbTo6T2JqZWN0TWFuYWdlcjsKICAgIGxvY2FsICRLZXJuZWw6Ok9NID0gS2VybmVsOjpTeXN0ZW06Ok9iamVjdE1hbmFnZXItPm5ldygpOwogICAgbXkgJEdlbmVyYWxDYXRhbG9nT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkdlbmVyYWxDYXRhbG9nJyk7Cgo9Y3V0CgpzdWIgbmV3IHsKICAgIG15ICggJFR5cGUsICVQYXJhbSApID0gQF87CgogICAgIyBhbGxvY2F0ZSBuZXcgaGFzaCBmb3Igb2JqZWN0CiAgICBteSAkU2VsZiA9IHt9OwogICAgYmxlc3MoICRTZWxmLCAkVHlwZSApOwoKICAgICMgbG9hZCBnZW5lcmF0b3IgcHJlZmVyZW5jZXMgbW9kdWxlCiAgICBteSAkR2VuZXJhdG9yTW9kdWxlCiAgICAgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpLT5HZXQoJ0dlbmVyYWxDYXRhbG9nOjpQcmVmZXJlbmNlc01vZHVsZScpCiAgICAgICAgfHwgJ0tlcm5lbDo6U3lzdGVtOjpHZW5lcmFsQ2F0YWxvZzo6UHJlZmVyZW5jZXNEQic7CiAgICBpZiAoICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpNYWluJyktPlJlcXVpcmUoJEdlbmVyYXRvck1vZHVsZSkgKSB7CiAgICAgICAgJFNlbGYtPntQcmVmZXJlbmNlc09iamVjdH0gPSAkR2VuZXJhdG9yTW9kdWxlLT5uZXcoJVBhcmFtKTsKICAgIH0KCiAgICAjIGRlZmluZSBjYWNoZSBzZXR0aW5ncwogICAgJFNlbGYtPntDYWNoZVR5cGV9ID0gJ0dlbmVyYWxDYXRhbG9nJzsKICAgICRTZWxmLT57Q2FjaGVUVEx9ICA9IDYwICogNjAgKiAzOwoKICAgIHJldHVybiAkU2VsZjsKfQoKPWl0ZW0gQ2xhc3NMaXN0KCkKCnJldHVybiBhbiBhcnJheSByZWZlcmVuY2Ugb2YgYWxsIGdlbmVyYWwgY2F0YWxvZyBjbGFzc2VzCgogICAgbXkgJEFycmF5UmVmID0gJEdlbmVyYWxDYXRhbG9nT2JqZWN0LT5DbGFzc0xpc3QoKTsKCj1jdXQKCnN1YiBDbGFzc0xpc3QgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGFzayBkYXRhYmFzZQogICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyktPlByZXBhcmUoCiAgICAgICAgU1FMID0+ICdTRUxFQ1QgRElTVElOQ1QoZ2VuZXJhbF9jYXRhbG9nX2NsYXNzKSAnCiAgICAgICAgICAgIC4gJ0ZST00gZ2VuZXJhbF9jYXRhbG9nIE9SREVSIEJZIGdlbmVyYWxfY2F0YWxvZ19jbGFzcycsCiAgICApOwoKICAgICMgZmV0Y2ggdGhlIHJlc3VsdAogICAgbXkgQENsYXNzTGlzdDsKICAgIHdoaWxlICggbXkgQFJvdyA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpLT5GZXRjaHJvd0FycmF5KCkgKSB7CiAgICAgICAgcHVzaCBAQ2xhc3NMaXN0LCAkUm93WzBdOwogICAgfQoKICAgICMgY2FjaGUgdGhlIHJlc3VsdAogICAgbXkgJENhY2hlS2V5ID0gJ0NsYXNzTGlzdCc7CiAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q2FjaGUnKS0+U2V0KAogICAgICAgIFR5cGUgID0+ICRTZWxmLT57Q2FjaGVUeXBlfSwKICAgICAgICBUVEwgICA9PiAkU2VsZi0+e0NhY2hlVFRMfSwKICAgICAgICBLZXkgICA9PiAkQ2FjaGVLZXksCiAgICAgICAgVmFsdWUgPT4gXEBDbGFzc0xpc3QsCiAgICApOwoKICAgIHJldHVybiBcQENsYXNzTGlzdDsKfQoKPWl0ZW0gQ2xhc3NSZW5hbWUoKQoKcmVuYW1lIGEgZ2VuZXJhbCBjYXRhbG9nIGNsYXNzCgogICAgbXkgJFRydWUgPSAkR2VuZXJhbENhdGFsb2dPYmplY3QtPkNsYXNzUmVuYW1lKAogICAgICAgIENsYXNzT2xkID0+ICdJVFNNOjpDb25maWdJdGVtOjpTdGF0ZScsCiAgICAgICAgQ2xhc3NOZXcgPT4gJ0lUU006OkNvbmZpZ0l0ZW06OkRlcGxveW1lbnRTdGF0ZScsCiAgICApOwoKPWN1dAoKc3ViIENsYXNzUmVuYW1lIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KENsYXNzT2xkIENsYXNzTmV3KSkgewogICAgICAgIGlmICggISRQYXJhbXskQXJndW1lbnR9ICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkQXJndW1lbnQhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICAjIGNsZWFudXAgZ2l2ZW4gcGFyYW1zCiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhDbGFzc09sZCBDbGFzc05ldykpIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q2hlY2tJdGVtJyktPlN0cmluZ0NsZWFuKAogICAgICAgICAgICBTdHJpbmdSZWYgICAgICAgICA9PiBcJFBhcmFteyRBcmd1bWVudH0sCiAgICAgICAgICAgIFJlbW92ZUFsbE5ld2xpbmVzID0+IDEsCiAgICAgICAgICAgIFJlbW92ZUFsbFRhYnMgICAgID0+IDEsCiAgICAgICAgICAgIFJlbW92ZUFsbFNwYWNlcyAgID0+IDEsCiAgICAgICAgKTsKICAgIH0KCiAgICByZXR1cm4gMSBpZiAkUGFyYW17Q2xhc3NOZXd9IGVxICRQYXJhbXtDbGFzc09sZH07CgogICAgIyBjaGVjayBpZiBuZXcgY2xhc3MgbmFtZSBhbHJlYWR5IGV4aXN0cwogICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyktPlByZXBhcmUoCiAgICAgICAgU1FMICAgPT4gJ1NFTEVDVCBpZCBGUk9NIGdlbmVyYWxfY2F0YWxvZyBXSEVSRSBnZW5lcmFsX2NhdGFsb2dfY2xhc3MgPSA/JywKICAgICAgICBCaW5kICA9PiBbIFwkUGFyYW17Q2xhc3NOZXd9IF0sCiAgICAgICAgTGltaXQgPT4gMSwKICAgICk7CgogICAgIyBmZXRjaCB0aGUgcmVzdWx0CiAgICBteSAkQWxyZWFkeUV4aXN0cyA9IDA7CiAgICB3aGlsZSAoIG15IEBSb3cgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKS0+RmV0Y2hyb3dBcnJheSgpICkgewogICAgICAgICRBbHJlYWR5RXhpc3RzID0gMTsKICAgIH0KCiAgICBpZiAoJEFscmVhZHlFeGlzdHMpIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gIkNhbid0IHJlbmFtZSBjbGFzcyAkUGFyYW17Q2xhc3NPbGR9ISBOZXcgY2xhc3NuYW1lIGFscmVhZHkgZXhpc3RzLiIKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIHJlc2V0IGNhY2hlCiAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q2FjaGUnKS0+Q2xlYW5VcCgKICAgICAgICBUeXBlID0+ICRTZWxmLT57Q2FjaGVUeXBlfSwKICAgICk7CgogICAgIyByZW5hbWUgZ2VuZXJhbCBjYXRhbG9nIGNsYXNzCiAgICByZXR1cm4gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyktPkRvKAogICAgICAgIFNRTCA9PiAnVVBEQVRFIGdlbmVyYWxfY2F0YWxvZyBTRVQgZ2VuZXJhbF9jYXRhbG9nX2NsYXNzID0gPyAnCiAgICAgICAgICAgIC4gJ1dIRVJFIGdlbmVyYWxfY2F0YWxvZ19jbGFzcyA9ID8nLAogICAgICAgIEJpbmQgPT4gWyBcJFBhcmFte0NsYXNzTmV3fSwgXCRQYXJhbXtDbGFzc09sZH0gXSwKICAgICk7Cn0KCj1pdGVtIEl0ZW1MaXN0KCkKCnJldHVybnMgYSBsaXN0IGFzIGEgaGFzaCByZWZlcmVuY2Ugb2Ygb25lIGdlbmVyYWwgY2F0YWxvZyBjbGFzcwoKICAgIG15ICRIYXNoUmVmID0gJEdlbmVyYWxDYXRhbG9nT2JqZWN0LT5JdGVtTGlzdCgKICAgICAgICBDbGFzcyAgICAgICAgID0+ICdJVFNNOjpTZXJ2aWNlOjpUeXBlJywKICAgICAgICBWYWxpZCAgICAgICAgID0+IDAsICAgICAgICAgICAgICAgICAgICAgICMgKG9wdGlvbmFsKSBkZWZhdWx0IDEKICAgICAgICBQcmVmZXJlbmNlcyAgID0+IHsgICAgICAgICAgICAgICAgICAgICAgICMgKG9wdGlvbmFsKSBkZWZhdWx0IHt9CiAgICAgICAgICAgIFBlcm1pc3Npb24gPT4gMiwgICAgICAgICAgICAgICAgICAgICAjIG9yIHdoYXRldmVyIHByZWZlcmVuY2VzIGNhbiBiZSB1c2VkCiAgICAgICAgfSwKICAgICk7Cgo9Y3V0CgpzdWIgSXRlbUxpc3QgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgaWYgKCAhJFBhcmFte0NsYXNzfSApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ05lZWQgQ2xhc3MhJwogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgc2V0IGRlZmF1bHQgdmFsdWUKICAgIGlmICggIWRlZmluZWQgJFBhcmFte1ZhbGlkfSApIHsKICAgICAgICAkUGFyYW17VmFsaWR9ID0gMTsKICAgIH0KCiAgICBteSAkUHJlZmVyZW5jZXNDYWNoZUtleSA9ICcnOwogICAgbXkgJFByZWZlcmVuY2VzVGFibGUgICAgPSAnJzsKICAgIG15ICRQcmVmZXJlbmNlc1doZXJlICAgID0gJyc7CiAgICBteSBAUHJlZmVyZW5jZXNCaW5kOwoKICAgICMgaGFuZGxlIGdpdmVuIHByZWZlcmVuY2VzCiAgICBpZiAoIGV4aXN0cyAkUGFyYW17UHJlZmVyZW5jZXN9ICYmIHJlZiAkUGFyYW17UHJlZmVyZW5jZXN9IGVxICdIQVNIJyApIHsKCiAgICAgICAgJFByZWZlcmVuY2VzVGFibGUgPSAnLCBnZW5lcmFsX2NhdGFsb2dfcHJlZmVyZW5jZXMnOwogICAgICAgIG15IEBXaGVyZXM7CgogICAgICAgICMgYWRkIGFsbCBwcmVmZXJlbmNlcyBnaXZlbiB0byB3aGVyZS1jbGF1c2UKICAgICAgICBmb3IgbXkgJEtleSAoIHNvcnQga2V5cyAleyAkUGFyYW17UHJlZmVyZW5jZXN9IH0gKSB7CgogICAgICAgICAgICBpZiAoIHJlZiggJFBhcmFte1ByZWZlcmVuY2VzfS0+eyRLZXl9ICkgbmUgJ0FSUkFZJyApIHsKICAgICAgICAgICAgICAgICRQYXJhbXtQcmVmZXJlbmNlc30tPnskS2V5fSA9IFsgJFBhcmFte1ByZWZlcmVuY2VzfS0+eyRLZXl9IF07CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHB1c2ggQFdoZXJlcywgJyhwcmVmX2tleSA9ID8gQU5EIHByZWZfdmFsdWUgSU4gKCcKICAgICAgICAgICAgICAgIC4gam9pbiggJywgJywgbWFwIHsnPyd9IEB7ICRQYXJhbXtQcmVmZXJlbmNlc30tPnskS2V5fSB9ICkKICAgICAgICAgICAgICAgIC4gJykpJzsKCiAgICAgICAgICAgIHB1c2ggQFByZWZlcmVuY2VzQmluZCwgXCRLZXksIG1hcCB7IFwkXyB9IEB7ICRQYXJhbXtQcmVmZXJlbmNlc30tPnskS2V5fSB9OwoKICAgICAgICAgICAgIyBhZGQgZnVuY3Rpb25hbGl0eSBsaXN0IHRvIGNhY2hlIGtleQogICAgICAgICAgICAkUHJlZmVyZW5jZXNDYWNoZUtleSAuPSAnIyMjIycgaWYgJFByZWZlcmVuY2VzQ2FjaGVLZXk7CiAgICAgICAgICAgICRQcmVmZXJlbmNlc0NhY2hlS2V5IC49IGpvaW4gcXsjIyMjfSwgJEtleSwgbWFwIHskX30gQHsgJFBhcmFte1ByZWZlcmVuY2VzfS0+eyRLZXl9IH07CiAgICAgICAgfQoKICAgICAgICAkUHJlZmVyZW5jZXNXaGVyZQogICAgICAgICAgICA9ICdBTkQgZ2VuZXJhbF9jYXRhbG9nLmlkID0gZ2VuZXJhbF9jYXRhbG9nX3ByZWZlcmVuY2VzLmdlbmVyYWxfY2F0YWxvZ19pZCc7CiAgICAgICAgJFByZWZlcmVuY2VzV2hlcmUgLj0gJyBBTkQgJyAuIGpvaW4gJyBBTkQgJywgQFdoZXJlczsKICAgIH0KCiAgICAjIGNyZWF0ZSBzcWwgc3RyaW5nCiAgICBteSAkU1FMID0gIlNFTEVDVCBpZCwgbmFtZSBGUk9NIGdlbmVyYWxfY2F0YWxvZyAkUHJlZmVyZW5jZXNUYWJsZSAiCiAgICAgICAgLiAiV0hFUkUgZ2VuZXJhbF9jYXRhbG9nX2NsYXNzID0gPyAkUHJlZmVyZW5jZXNXaGVyZSAiOwogICAgbXkgQEJJTkQgPSAoIFwkUGFyYW17Q2xhc3N9LCBAUHJlZmVyZW5jZXNCaW5kICk7CgogICAgIyBhZGQgdmFsaWQgc3RyaW5nIHRvIHNxbCBzdHJpbmcKICAgIGlmICggJFBhcmFte1ZhbGlkfSApIHsKICAgICAgICAkU1FMIC49ICdBTkQgdmFsaWRfaWQgPSAxICc7CiAgICB9CgogICAgIyBjcmVhdGUgY2FjaGUga2V5CiAgICBteSAkQ2FjaGVLZXkKICAgICAgICA9ICdJdGVtTGlzdDo6JyAuICRQYXJhbXtDbGFzc30gLiAnIyMjIycgLiAkUGFyYW17VmFsaWR9IC4gJyMjIyMnIC4gJFByZWZlcmVuY2VzQ2FjaGVLZXk7CgogICAgIyBjaGVjayBpZiByZXN1bHQgaXMgYWxyZWFkeSBjYWNoZWQKICAgIG15ICRDYWNoZSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDYWNoZScpLT5HZXQoCiAgICAgICAgVHlwZSA9PiAkU2VsZi0+e0NhY2hlVHlwZX0sCiAgICAgICAgS2V5ICA9PiAkQ2FjaGVLZXksCiAgICApOwogICAgcmV0dXJuICRDYWNoZSBpZiAkQ2FjaGU7CgogICAgIyBhc2sgZGF0YWJhc2UKICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpLT5QcmVwYXJlKAogICAgICAgIFNRTCAgPT4gJFNRTCwKICAgICAgICBCaW5kID0+IFxAQklORCwKICAgICk7CgogICAgIyBmZXRjaCB0aGUgcmVzdWx0CiAgICBteSAlRGF0YTsKICAgIHdoaWxlICggbXkgQFJvdyA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpLT5GZXRjaHJvd0FycmF5KCkgKSB7CiAgICAgICAgJERhdGF7ICRSb3dbMF0gfSA9ICRSb3dbMV07CiAgICB9CgogICAgIyBjaGVjayBpdGVtCiAgICBpZiAoICElRGF0YSApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gIkNsYXNzICRQYXJhbXtDbGFzc30gbm90IGZvdW5kIGluIGRhdGFiYXNlISIsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBjYWNoZSB0aGUgcmVzdWx0CiAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q2FjaGUnKS0+U2V0KAogICAgICAgIFR5cGUgID0+ICRTZWxmLT57Q2FjaGVUeXBlfSwKICAgICAgICBUVEwgICA9PiAkU2VsZi0+e0NhY2hlVFRMfSwKICAgICAgICBLZXkgICA9PiAkQ2FjaGVLZXksCiAgICAgICAgVmFsdWUgPT4gXCVEYXRhLAogICAgKTsKCiAgICByZXR1cm4gXCVEYXRhOwp9Cgo9aXRlbSBJdGVtR2V0KCkKCmdldCBpdGVtIGF0dHJpYnV0ZXMKCiAgICBteSAkSXRlbURhdGFSZWYgPSAkR2VuZXJhbENhdGFsb2dPYmplY3QtPkl0ZW1HZXQoCiAgICAgICAgSXRlbUlEID0+IDMsCiAgICApOwoKICAgIG9yCgogICAgbXkgJEl0ZW1EYXRhUmVmID0gJEdlbmVyYWxDYXRhbG9nT2JqZWN0LT5JdGVtR2V0KAogICAgICAgIENsYXNzID0+ICdJVFNNOjpTZXJ2aWNlOjpUeXBlJywKICAgICAgICBOYW1lICA9PiAnVW5kZXJwaW5uaW5nIENvbnRyYWN0JywKICAgICk7CgpyZXR1cm5zCgogICAgbXkgJEl0ZW0gPSB7CiAgICAgICAgJ0l0ZW1JRCcgICAgID0+ICcyMycsCiAgICAgICAgJ0NsYXNzJyAgICAgID0+ICdJVFNNOjpTZXJ2aWNlOjpUeXBlJywKICAgICAgICAnTmFtZScgICAgICAgPT4gJ1VuZGVycGlubmluZyBDb250cmFjdCcKICAgICAgICAnQ29tbWVudCcgICAgPT4gJ1NvbWUgQ29tbWVudCcsCiAgICAgICAgJ1ZhbGlkSUQnICAgID0+ICcxJywKICAgICAgICAnQ3JlYXRlVGltZScgPT4gJzIwMTItMDEtMTIgMDk6MzY6MjQnLAogICAgICAgICdDcmVhdGVCeScgICA9PiAnMScsCiAgICAgICAgJ0NoYW5nZVRpbWUnID0+ICcyMDEyLTAxLTEyIDA5OjM2OjI0JywKICAgICAgICAnQ2hhbmdlQnknICAgPT4gJzEnLAogICAgfTsKCj1jdXQKCnN1YiBJdGVtR2V0IHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGlmICggISRQYXJhbXtJdGVtSUR9ICYmICggISRQYXJhbXtDbGFzc30gfHwgJFBhcmFte05hbWV9IGVxICcnICkgKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICdOZWVkIEl0ZW1JRCBPUiBDbGFzcyBhbmQgTmFtZSEnCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBjcmVhdGUgc3FsIHN0cmluZwogICAgbXkgJFNRTCA9ICdTRUxFQ1QgaWQsIGdlbmVyYWxfY2F0YWxvZ19jbGFzcywgbmFtZSwgdmFsaWRfaWQsIGNvbW1lbnRzLCAnCiAgICAgICAgLiAnY3JlYXRlX3RpbWUsIGNyZWF0ZV9ieSwgY2hhbmdlX3RpbWUsIGNoYW5nZV9ieSBGUk9NIGdlbmVyYWxfY2F0YWxvZyBXSEVSRSAnOwogICAgbXkgQEJJTkQ7CgogICAgIyBhZGQgb3B0aW9ucyB0byBzcWwgc3RyaW5nCiAgICBpZiAoICRQYXJhbXtDbGFzc30gJiYgJFBhcmFte05hbWV9IG5lICcnICkgewoKICAgICAgICAjIGNoZWNrIGlmIHJlc3VsdCBpcyBhbHJlYWR5IGNhY2hlZAogICAgICAgIG15ICRDYWNoZUtleSA9ICdJdGVtR2V0OjpDbGFzczo6JyAuICRQYXJhbXtDbGFzc30gLiAnOjonIC4gJFBhcmFte05hbWV9OwogICAgICAgIG15ICRDYWNoZSAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDYWNoZScpLT5HZXQoCiAgICAgICAgICAgIFR5cGUgPT4gJFNlbGYtPntDYWNoZVR5cGV9LAogICAgICAgICAgICBLZXkgID0+ICRDYWNoZUtleSwKICAgICAgICApOwogICAgICAgIHJldHVybiAkQ2FjaGUgaWYgJENhY2hlOwoKICAgICAgICAjIGFkZCBjbGFzcyBhbmQgbmFtZSB0byBzcWwgc3RyaW5nCiAgICAgICAgJFNRTCAuPSAnZ2VuZXJhbF9jYXRhbG9nX2NsYXNzID0gPyBBTkQgbmFtZSA9ID8nOwogICAgICAgIHB1c2ggQEJJTkQsICggXCRQYXJhbXtDbGFzc30sIFwkUGFyYW17TmFtZX0gKTsKICAgIH0KICAgIGVsc2UgewoKICAgICAgICAjIGNoZWNrIGlmIHJlc3VsdCBpcyBhbHJlYWR5IGNhY2hlZAogICAgICAgIG15ICRDYWNoZUtleSA9ICdJdGVtR2V0OjpJdGVtSUQ6OicgLiAkUGFyYW17SXRlbUlEfTsKICAgICAgICBteSAkQ2FjaGUgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q2FjaGUnKS0+R2V0KAogICAgICAgICAgICBUeXBlID0+ICRTZWxmLT57Q2FjaGVUeXBlfSwKICAgICAgICAgICAgS2V5ICA9PiAkQ2FjaGVLZXksCiAgICAgICAgKTsKICAgICAgICByZXR1cm4gJENhY2hlIGlmICRDYWNoZTsKCiAgICAgICAgIyBhZGQgaXRlbSBpZCB0byBzcWwgc3RyaW5nCiAgICAgICAgJFNRTCAuPSAnaWQgPSA/JzsKICAgICAgICBwdXNoIEBCSU5ELCBcJFBhcmFte0l0ZW1JRH07CiAgICB9CgogICAgIyBhc2sgZGF0YWJhc2UKICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpLT5QcmVwYXJlKAogICAgICAgIFNRTCAgID0+ICRTUUwsCiAgICAgICAgQmluZCAgPT4gXEBCSU5ELAogICAgICAgIExpbWl0ID0+IDEsCiAgICApOwoKICAgICMgZmV0Y2ggdGhlIHJlc3VsdAogICAgbXkgJUl0ZW1EYXRhOwogICAgd2hpbGUgKCBteSBAUm93ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyktPkZldGNocm93QXJyYXkoKSApIHsKICAgICAgICAkSXRlbURhdGF7SXRlbUlEfSAgICAgPSAkUm93WzBdOwogICAgICAgICRJdGVtRGF0YXtDbGFzc30gICAgICA9ICRSb3dbMV07CiAgICAgICAgJEl0ZW1EYXRhe05hbWV9ICAgICAgID0gJFJvd1syXTsKICAgICAgICAkSXRlbURhdGF7VmFsaWRJRH0gICAgPSAkUm93WzNdOwogICAgICAgICRJdGVtRGF0YXtDb21tZW50fSAgICA9ICRSb3dbNF0gfHwgJyc7CiAgICAgICAgJEl0ZW1EYXRhe0NyZWF0ZVRpbWV9ID0gJFJvd1s1XTsKICAgICAgICAkSXRlbURhdGF7Q3JlYXRlQnl9ICAgPSAkUm93WzZdOwogICAgICAgICRJdGVtRGF0YXtDaGFuZ2VUaW1lfSA9ICRSb3dbN107CiAgICAgICAgJEl0ZW1EYXRhe0NoYW5nZUJ5fSAgID0gJFJvd1s4XTsKICAgIH0KCiAgICAjIGNoZWNrIGl0ZW0KICAgIGlmICggISRJdGVtRGF0YXtJdGVtSUR9ICkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAnSXRlbSBub3QgZm91bmQgaW4gZGF0YWJhc2UhJywKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIGdldCBnZW5lcmFsIGNhdGFsb2cgcHJlZmVyZW5jZXMKICAgIG15ICVQcmVmZXJlbmNlcyA9ICRTZWxmLT5HZW5lcmFsQ2F0YWxvZ1ByZWZlcmVuY2VzR2V0KCBJdGVtSUQgPT4gJEl0ZW1EYXRhe0l0ZW1JRH0gKTsKCiAgICAjIG1lcmdlIGhhc2gKICAgIGlmICglUHJlZmVyZW5jZXMpIHsKICAgICAgICAlSXRlbURhdGEgPSAoICVJdGVtRGF0YSwgJVByZWZlcmVuY2VzICk7CiAgICB9CgogICAgIyBjYWNoZSB0aGUgcmVzdWx0CiAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q2FjaGUnKS0+U2V0KAogICAgICAgIFR5cGUgID0+ICRTZWxmLT57Q2FjaGVUeXBlfSwKICAgICAgICBUVEwgICA9PiAkU2VsZi0+e0NhY2hlVFRMfSwKICAgICAgICBLZXkgICA9PiAnSXRlbUdldDo6Q2xhc3M6OicgLiAkSXRlbURhdGF7Q2xhc3N9IC4gJzo6JyAuICRJdGVtRGF0YXtOYW1lfSwKICAgICAgICBWYWx1ZSA9PiBcJUl0ZW1EYXRhLAogICAgKTsKICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDYWNoZScpLT5TZXQoCiAgICAgICAgVHlwZSAgPT4gJFNlbGYtPntDYWNoZVR5cGV9LAogICAgICAgIFRUTCAgID0+ICRTZWxmLT57Q2FjaGVUVEx9LAogICAgICAgIEtleSAgID0+ICdJdGVtR2V0OjpJdGVtSUQ6OicgLiAkSXRlbURhdGF7SXRlbUlEfSwKICAgICAgICBWYWx1ZSA9PiBcJUl0ZW1EYXRhLAogICAgKTsKCiAgICByZXR1cm4gXCVJdGVtRGF0YTsKfQoKPWl0ZW0gSXRlbUFkZCgpCgphZGQgYSBuZXcgZ2VuZXJhbCBjYXRhbG9nIGl0ZW0KCiAgICBteSAkSXRlbUlEID0gJEdlbmVyYWxDYXRhbG9nT2JqZWN0LT5JdGVtQWRkKAogICAgICAgIENsYXNzICAgICAgICAgPT4gJ0lUU006OlNlcnZpY2U6OlR5cGUnLAogICAgICAgIE5hbWUgICAgICAgICAgPT4gJ0l0ZW0gTmFtZScsCiAgICAgICAgVmFsaWRJRCAgICAgICA9PiAxLAogICAgICAgIENvbW1lbnQgICAgICAgPT4gJ0NvbW1lbnQnLCAgICAgICAgICAgICAgIyAob3B0aW9uYWwpCiAgICAgICAgVXNlcklEICAgICAgICA9PiAxLAogICAgKTsKCj1jdXQKCnN1YiBJdGVtQWRkIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KENsYXNzIFZhbGlkSUQgVXNlcklEKSkgewogICAgICAgIGlmICggISRQYXJhbXskQXJndW1lbnR9ICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkQXJndW1lbnQhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICAjIG5hbWUgbXVzdCBiZSBub3QgZW1wdHksIGJ1dCBudW1iZXIgemVybyAoMCkgaXMgYWxsb3dlZAogICAgaWYgKCAkUGFyYW17TmFtZX0gZXEgJycgKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkIE5hbWUhIiwKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIHNldCBkZWZhdWx0IHZhbHVlcwogICAgZm9yIG15ICRBcmd1bWVudCAocXcoQ29tbWVudCkpIHsKICAgICAgICAkUGFyYW17JEFyZ3VtZW50fSB8fD0gJyc7CiAgICB9CgogICAgIyBjbGVhbnVwIGdpdmVuIHBhcmFtcwogICAgZm9yIG15ICRBcmd1bWVudCAocXcoQ2xhc3MpKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkNoZWNrSXRlbScpLT5TdHJpbmdDbGVhbigKICAgICAgICAgICAgU3RyaW5nUmVmICAgICAgICAgPT4gXCRQYXJhbXskQXJndW1lbnR9LAogICAgICAgICAgICBSZW1vdmVBbGxOZXdsaW5lcyA9PiAxLAogICAgICAgICAgICBSZW1vdmVBbGxUYWJzICAgICA9PiAxLAogICAgICAgICAgICBSZW1vdmVBbGxTcGFjZXMgICA9PiAxLAogICAgICAgICk7CiAgICB9CiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhOYW1lIENvbW1lbnQpKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkNoZWNrSXRlbScpLT5TdHJpbmdDbGVhbigKICAgICAgICAgICAgU3RyaW5nUmVmICAgICAgICAgPT4gXCRQYXJhbXskQXJndW1lbnR9LAogICAgICAgICAgICBSZW1vdmVBbGxOZXdsaW5lcyA9PiAxLAogICAgICAgICAgICBSZW1vdmVBbGxUYWJzICAgICA9PiAxLAogICAgICAgICk7CiAgICB9CgogICAgIyBmaW5kIGV4aXRpbmcgaXRlbSB3aXRoIHNhbWUgbmFtZQogICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyktPlByZXBhcmUoCiAgICAgICAgU1FMID0+ICdTRUxFQ1QgaWQgRlJPTSBnZW5lcmFsX2NhdGFsb2cgJwogICAgICAgICAgICAuICdXSEVSRSBnZW5lcmFsX2NhdGFsb2dfY2xhc3MgPSA/IEFORCBuYW1lID0gPycsCiAgICAgICAgQmluZCA9PiBbIFwkUGFyYW17Q2xhc3N9LCBcJFBhcmFte05hbWV9IF0sCiAgICAgICAgTGltaXQgPT4gMSwKICAgICk7CgogICAgIyBmZXRjaCB0aGUgcmVzdWx0CiAgICBteSAkTm9BZGQ7CiAgICB3aGlsZSAoICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpLT5GZXRjaHJvd0FycmF5KCkgKSB7CiAgICAgICAgJE5vQWRkID0gMTsKICAgIH0KCiAgICAjIGFib3J0IGluc2VydCBvZiBuZXcgaXRlbSwgaWYgaXRlbSBuYW1lIGFscmVhZHkgZXhpc3RzCiAgICBpZiAoJE5vQWRkKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgPT4KICAgICAgICAgICAgICAgICJDYW4ndCBhZGQgbmV3IGl0ZW0hIEdlbmVyYWwgY2F0YWxvZyBpdGVtIHdpdGggc2FtZSBuYW1lIGFscmVhZHkgZXhpc3RzIGluIHRoaXMgY2xhc3MuIiwKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIHJlc2V0IGNhY2hlCiAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q2FjaGUnKS0+Q2xlYW5VcCgKICAgICAgICBUeXBlID0+ICRTZWxmLT57Q2FjaGVUeXBlfSwKICAgICk7CgogICAgIyBpbnNlcnQgbmV3IGl0ZW0KICAgIHJldHVybiBpZiAhJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyktPkRvKAogICAgICAgIFNRTCA9PiAnSU5TRVJUIElOVE8gZ2VuZXJhbF9jYXRhbG9nICcKICAgICAgICAgICAgLiAnKGdlbmVyYWxfY2F0YWxvZ19jbGFzcywgbmFtZSwgdmFsaWRfaWQsIGNvbW1lbnRzLCAnCiAgICAgICAgICAgIC4gJ2NyZWF0ZV90aW1lLCBjcmVhdGVfYnksIGNoYW5nZV90aW1lLCBjaGFuZ2VfYnkpIFZBTFVFUyAnCiAgICAgICAgICAgIC4gJyg/LCA/LCA/LCA/LCBjdXJyZW50X3RpbWVzdGFtcCwgPywgY3VycmVudF90aW1lc3RhbXAsID8pJywKICAgICAgICBCaW5kID0+IFsKICAgICAgICAgICAgXCRQYXJhbXtDbGFzc30sIFwkUGFyYW17TmFtZX0sCiAgICAgICAgICAgIFwkUGFyYW17VmFsaWRJRH0sCiAgICAgICAgICAgIFwkUGFyYW17Q29tbWVudH0sIFwkUGFyYW17VXNlcklEfSwKICAgICAgICAgICAgXCRQYXJhbXtVc2VySUR9LAogICAgICAgIF0sCiAgICApOwoKICAgICMgZmluZCBpZCBvZiBuZXcgaXRlbQogICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyktPlByZXBhcmUoCiAgICAgICAgU1FMID0+ICdTRUxFQ1QgaWQgRlJPTSBnZW5lcmFsX2NhdGFsb2cgJwogICAgICAgICAgICAuICdXSEVSRSBnZW5lcmFsX2NhdGFsb2dfY2xhc3MgPSA/IEFORCBuYW1lID0gPycsCiAgICAgICAgQmluZCA9PiBbIFwkUGFyYW17Q2xhc3N9LCBcJFBhcmFte05hbWV9IF0sCiAgICAgICAgTGltaXQgPT4gMSwKICAgICk7CgogICAgIyBmZXRjaCB0aGUgcmVzdWx0CiAgICBteSAkSXRlbUlEOwogICAgd2hpbGUgKCBteSBAUm93ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyktPkZldGNocm93QXJyYXkoKSApIHsKICAgICAgICAkSXRlbUlEID0gJFJvd1swXTsKICAgIH0KCiAgICByZXR1cm4gJEl0ZW1JRDsKfQoKPWl0ZW0gSXRlbVVwZGF0ZSgpCgp1cGRhdGUgYW4gZXhpc3RpbmcgZ2VuZXJhbCBjYXRhbG9nIGl0ZW0KCiAgICBteSAkVHJ1ZSA9ICRHZW5lcmFsQ2F0YWxvZ09iamVjdC0+SXRlbVVwZGF0ZSgKICAgICAgICBJdGVtSUQgICAgICAgID0+IDEyMywKICAgICAgICBOYW1lICAgICAgICAgID0+ICdJdGVtIE5hbWUnLAogICAgICAgIFZhbGlkSUQgICAgICAgPT4gMSwKICAgICAgICBDb21tZW50ICAgICAgID0+ICdDb21tZW50JywgICAgIyAob3B0aW9uYWwpCiAgICAgICAgVXNlcklEICAgICAgICA9PiAxLAogICAgKTsKCj1jdXQKCnN1YiBJdGVtVXBkYXRlIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KEl0ZW1JRCBWYWxpZElEIFVzZXJJRCkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBuYW1lIG11c3QgYmUgbm90IGVtcHR5LCBidXQgbnVtYmVyIHplcm8gKDApIGlzIGFsbG93ZWQKICAgIGlmICggJFBhcmFte05hbWV9IGVxICcnICkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCBOYW1lISIsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBzZXQgZGVmYXVsdCB2YWx1ZXMKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KENvbW1lbnQpKSB7CiAgICAgICAgJFBhcmFteyRBcmd1bWVudH0gfHw9ICcnOwogICAgfQoKICAgICMgY2xlYW51cCBnaXZlbiBwYXJhbXMKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KENsYXNzKSkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDaGVja0l0ZW0nKS0+U3RyaW5nQ2xlYW4oCiAgICAgICAgICAgIFN0cmluZ1JlZiAgICAgICAgID0+IFwkUGFyYW17JEFyZ3VtZW50fSwKICAgICAgICAgICAgUmVtb3ZlQWxsTmV3bGluZXMgPT4gMSwKICAgICAgICAgICAgUmVtb3ZlQWxsVGFicyAgICAgPT4gMSwKICAgICAgICAgICAgUmVtb3ZlQWxsU3BhY2VzICAgPT4gMSwKICAgICAgICApOwogICAgfQogICAgZm9yIG15ICRBcmd1bWVudCAocXcoTmFtZSBDb21tZW50KSkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDaGVja0l0ZW0nKS0+U3RyaW5nQ2xlYW4oCiAgICAgICAgICAgIFN0cmluZ1JlZiAgICAgICAgID0+IFwkUGFyYW17JEFyZ3VtZW50fSwKICAgICAgICAgICAgUmVtb3ZlQWxsTmV3bGluZXMgPT4gMSwKICAgICAgICAgICAgUmVtb3ZlQWxsVGFicyAgICAgPT4gMSwKICAgICAgICApOwogICAgfQoKICAgICMgZ2V0IGNsYXNzIG9mIGl0ZW0KICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpLT5QcmVwYXJlKAogICAgICAgIFNRTCAgID0+ICdTRUxFQ1QgZ2VuZXJhbF9jYXRhbG9nX2NsYXNzIEZST00gZ2VuZXJhbF9jYXRhbG9nIFdIRVJFIGlkID0gPycsCiAgICAgICAgQmluZCAgPT4gWyBcJFBhcmFte0l0ZW1JRH0gXSwKICAgICAgICBMaW1pdCA9PiAxLAogICAgKTsKCiAgICAjIGZldGNoIHRoZSByZXN1bHQKICAgIG15ICRDbGFzczsKICAgIHdoaWxlICggbXkgQFJvdyA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpLT5GZXRjaHJvd0FycmF5KCkgKSB7CiAgICAgICAgJENsYXNzID0gJFJvd1swXTsKICAgIH0KCiAgICBpZiAoICEkQ2xhc3MgKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJDYW4ndCB1cGRhdGUgaXRlbSEgR2VuZXJhbCBjYXRhbG9nIGl0ZW0gbm90IGZvdW5kIGluIHRoaXMgY2xhc3MuIiwKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIGZpbmQgZXhpdGluZyBpdGVtIHdpdGggc2FtZSBuYW1lCiAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKS0+UHJlcGFyZSgKICAgICAgICBTUUwgICA9PiAnU0VMRUNUIGlkIEZST00gZ2VuZXJhbF9jYXRhbG9nIFdIRVJFIGdlbmVyYWxfY2F0YWxvZ19jbGFzcyA9ID8gQU5EIG5hbWUgPSA/JywKICAgICAgICBCaW5kICA9PiBbIFwkQ2xhc3MsIFwkUGFyYW17TmFtZX0gXSwKICAgICAgICBMaW1pdCA9PiAxLAogICAgKTsKCiAgICAjIGZldGNoIHRoZSByZXN1bHQKICAgIG15ICRVcGRhdGUgPSAxOwogICAgd2hpbGUgKCBteSBAUm93ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyktPkZldGNocm93QXJyYXkoKSApIHsKICAgICAgICBpZiAoICRQYXJhbXtJdGVtSUR9IG5lICRSb3dbMF0gKSB7CiAgICAgICAgICAgICRVcGRhdGUgPSAwOwogICAgICAgIH0KICAgIH0KCiAgICBpZiAoICEkVXBkYXRlICkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlID0+CiAgICAgICAgICAgICAgICAiQ2FuJ3QgdXBkYXRlIGl0ZW0hIEdlbmVyYWwgY2F0YWxvZyBpdGVtIHdpdGggc2FtZSBuYW1lIGFscmVhZHkgZXhpc3RzIGluIHRoaXMgY2xhc3MuIiwKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIHJlc2V0IGNhY2hlCiAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q2FjaGUnKS0+Q2xlYW5VcCgKICAgICAgICBUeXBlID0+ICRTZWxmLT57Q2FjaGVUeXBlfSwKICAgICk7CgogICAgcmV0dXJuICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpLT5EbygKICAgICAgICBTUUwgPT4gJ1VQREFURSBnZW5lcmFsX2NhdGFsb2cgU0VUICcKICAgICAgICAgICAgLiAnbmFtZSA9ID8sIHZhbGlkX2lkID0gPywgY29tbWVudHMgPSA/LCAnCiAgICAgICAgICAgIC4gJ2NoYW5nZV90aW1lID0gY3VycmVudF90aW1lc3RhbXAsIGNoYW5nZV9ieSA9ID8gJwogICAgICAgICAgICAuICdXSEVSRSBpZCA9ID8nLAogICAgICAgIEJpbmQgPT4gWwogICAgICAgICAgICBcJFBhcmFte05hbWV9LAogICAgICAgICAgICBcJFBhcmFte1ZhbGlkSUR9LCBcJFBhcmFte0NvbW1lbnR9LAogICAgICAgICAgICBcJFBhcmFte1VzZXJJRH0sICBcJFBhcmFte0l0ZW1JRH0sCiAgICAgICAgXSwKICAgICk7Cn0KCj1pdGVtIEdlbmVyYWxDYXRhbG9nUHJlZmVyZW5jZXNTZXQoKQoKc2V0IEdlbmVyYWxDYXRhbG9nIHByZWZlcmVuY2VzCgogICAgJEdlbmVyYWxDYXRhbG9nT2JqZWN0LT5HZW5lcmFsQ2F0YWxvZ1ByZWZlcmVuY2VzU2V0KAogICAgICAgIEl0ZW1JRCA9PiAxMjMsCiAgICAgICAgS2V5ICAgID0+ICdVc2VyQ29tbWVudCcsCiAgICAgICAgVmFsdWUgID0+ICdzb21lIGNvbW1lbnQnLAogICAgKTsKCj1jdXQKCnN1YiBHZW5lcmFsQ2F0YWxvZ1ByZWZlcmVuY2VzU2V0IHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CgogICAgIyBkZWxldGUgY2FjaGUKICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDYWNoZScpLT5DbGVhblVwKAogICAgICAgIFR5cGUgPT4gJFNlbGYtPntDYWNoZVR5cGV9LAogICAgKTsKCiAgICByZXR1cm4gJFNlbGYtPntQcmVmZXJlbmNlc09iamVjdH0tPkdlbmVyYWxDYXRhbG9nUHJlZmVyZW5jZXNTZXQoQF8pOwp9Cgo9aXRlbSBHZW5lcmFsQ2F0YWxvZ1ByZWZlcmVuY2VzR2V0KCkKCmdldCBHZW5lcmFsQ2F0YWxvZyBwcmVmZXJlbmNlcwoKICAgIG15ICVQcmVmZXJlbmNlcyA9ICRRdWV1ZU9iamVjdC0+R2VuZXJhbENhdGFsb2dQcmVmZXJlbmNlc0dldCgKICAgICAgICBJdGVtSUQgPT4gMTIzLAogICAgKTsKCj1jdXQKCnN1YiBHZW5lcmFsQ2F0YWxvZ1ByZWZlcmVuY2VzR2V0IHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CgogICAgcmV0dXJuICRTZWxmLT57UHJlZmVyZW5jZXNPYmplY3R9LT5HZW5lcmFsQ2F0YWxvZ1ByZWZlcmVuY2VzR2V0KEBfKTsKfQoKMTsKCj1iYWNrCgo9aGVhZDEgVEVSTVMgQU5EIENPTkRJVElPTlMKClRoaXMgU29mdHdhcmUgaXMgcGFydCBvZiB0aGUgT1RSUyBwcm9qZWN0IChodHRwOi8vb3Rycy5vcmcvKS4KClRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCnRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIEw8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0Pi4KCj1jdXQK
IyAtLQojIEtlcm5lbC9TeXN0ZW0vR2VuZXJhbENhdGFsb2cvUHJlZmVyZW5jZXNEQi5wbSAtIHNvbWUgcHJlZmVyZW5jZXMgZnVuY3Rpb25zIGZvciBnZW5lcmFsIGNhdGFsb2cKIyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxNCBPVFJTIEFHLCBodHRwOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6U3lzdGVtOjpHZW5lcmFsQ2F0YWxvZzo6UHJlZmVyZW5jZXNEQjsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCm91ciBAT2JqZWN0RGVwZW5kZW5jaWVzID0gKAogICAgJ0tlcm5lbDo6Q29uZmlnJywKICAgICdLZXJuZWw6OlN5c3RlbTo6REInLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpMb2cnLAopOwoKPWhlYWQxIE5BTUUKCktlcm5lbDo6U3lzdGVtOjpHZW5lcmFsQ2F0YWxvZzo6UHJlZmVyZW5jZXNEQiAtIHNvbWUgcHJlZmVyZW5jZXMgZnVuY3Rpb25zIGZvciBnZW5lcmFsIGNhdGFsb2cKCj1oZWFkMSBTWU5PUFNJUwoKc29tZSBwcmVmZXJlbmNlcyBmdW5jdGlvbnMgZm9yIGdlbmVyYWwgY2F0YWxvZwoKPWhlYWQxIFBVQkxJQyBJTlRFUkZBQ0UKCj1vdmVyIDQKCj1jdXQKCj1pdGVtIG5ldygpCgpjcmVhdGUgYW4gb2JqZWN0CgogICAgdXNlIEtlcm5lbDo6U3lzdGVtOjpPYmplY3RNYW5hZ2VyOwogICAgbG9jYWwgJEtlcm5lbDo6T00gPSBLZXJuZWw6OlN5c3RlbTo6T2JqZWN0TWFuYWdlci0+bmV3KCk7CiAgICBteSAkR2VuZXJhbENhdGFsb2dQcmVmZXJlbmNlc0RCT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkdlbmVyYWxDYXRhbG9nOjpQcmVmZXJlbmNlc0RCJyk7Cgo9Y3V0CgpzdWIgbmV3IHsKICAgIG15ICggJFR5cGUsICVQYXJhbSApID0gQF87CgogICAgIyBhbGxvY2F0ZSBuZXcgaGFzaCBmb3Igb2JqZWN0CiAgICBteSAkU2VsZiA9IHt9OwogICAgYmxlc3MoICRTZWxmLCAkVHlwZSApOwoKICAgICMgcHJlZmVyZW5jZXMgdGFibGUgZGF0YQogICAgJFNlbGYtPntQcmVmZXJlbmNlc1RhYmxlfSAgICAgID0gJ2dlbmVyYWxfY2F0YWxvZ19wcmVmZXJlbmNlcyc7CiAgICAkU2VsZi0+e1ByZWZlcmVuY2VzVGFibGVLZXl9ICAgPSAncHJlZl9rZXknOwogICAgJFNlbGYtPntQcmVmZXJlbmNlc1RhYmxlVmFsdWV9ID0gJ3ByZWZfdmFsdWUnOwogICAgJFNlbGYtPntQcmVmZXJlbmNlc1RhYmxlR2NJRH0gID0gJ2dlbmVyYWxfY2F0YWxvZ19pZCc7CgogICAgcmV0dXJuICRTZWxmOwp9Cgo9aXRlbSBHZW5lcmFsQ2F0YWxvZ1ByZWZlcmVuY2VzU2V0KCkKClNldCBwcmVmZXJlbmNlcyBmb3IgYW4gaXRlbQoKICAgICRQcmVmZXJlbmNlc09iamVjdC0+R2VuZXJhbENhdGFsb2dQcmVmZXJlbmNlc1NldCgKICAgICAgICBJdGVtSUQgPT4gMTIzNCwKICAgICAgICBLZXkgICAgPT4gJ0Z1bmN0aW9uYWxpdHknLAogICAgICAgIFZhbHVlICA9PiAnb3BlcmF0aW9uYWwnLAogICAgKTsKCj1jdXQKCnN1YiBHZW5lcmFsQ2F0YWxvZ1ByZWZlcmVuY2VzU2V0IHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkTmVlZGVkIChxdyhJdGVtSUQgS2V5IFZhbHVlKSkgewogICAgICAgIGlmICggIWRlZmluZWQoICRQYXJhbXskTmVlZGVkfSApICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkTmVlZGVkISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBkZWxldGUgb2xkIGRhdGEKICAgIHJldHVybiBpZiAhJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyktPkRvKAogICAgICAgIFNRTCA9PiAiREVMRVRFIEZST00gJFNlbGYtPntQcmVmZXJlbmNlc1RhYmxlfSBXSEVSRSAiCiAgICAgICAgICAgIC4gIiRTZWxmLT57UHJlZmVyZW5jZXNUYWJsZUdjSUR9ID0gPyBBTkQgJFNlbGYtPntQcmVmZXJlbmNlc1RhYmxlS2V5fSA9ID8iLAogICAgICAgIEJpbmQgPT4gWwogICAgICAgICAgICBcJFBhcmFte0l0ZW1JRH0sCiAgICAgICAgICAgIFwkUGFyYW17S2V5fSwKICAgICAgICBdLAogICAgKTsKCiAgICAjIGluc2VydCBuZXcgZGF0YQogICAgcmV0dXJuICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpLT5EbygKICAgICAgICBTUUwgPT4gIklOU0VSVCBJTlRPICRTZWxmLT57UHJlZmVyZW5jZXNUYWJsZX0gKCRTZWxmLT57UHJlZmVyZW5jZXNUYWJsZUdjSUR9LCAiCiAgICAgICAgICAgIC4gIiAkU2VsZi0+e1ByZWZlcmVuY2VzVGFibGVLZXl9LCAkU2VsZi0+e1ByZWZlcmVuY2VzVGFibGVWYWx1ZX0pICIKICAgICAgICAgICAgLiAiIFZBTFVFUyAoPywgPywgPykiLAogICAgICAgIEJpbmQgPT4gWwogICAgICAgICAgICBcJFBhcmFte0l0ZW1JRH0sCiAgICAgICAgICAgIFwkUGFyYW17S2V5fSwKICAgICAgICAgICAgXCRQYXJhbXtWYWx1ZX0sCiAgICAgICAgXSwKICAgICk7Cn0KCj1pdGVtIEdlbmVyYWxDYXRhbG9nUHJlZmVyZW5jZXNHZXQoKQoKR2V0IGFsbCBQcmVmZXJlbmNlcyBmb3IgYW4gaXRlbQoKICAgIG15ICVQcmVmZXJlbmNlcyA9ICRQcmVmZXJlbmNlc09iamVjdC0+R2VuZXJhbENhdGFsb2dQcmVmZXJlbmNlc0dldCgKICAgICAgICBJdGVtSUQgPT4gMTIzLAogICAgKTsKCj1jdXQKCnN1YiBHZW5lcmFsQ2F0YWxvZ1ByZWZlcmVuY2VzR2V0IHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkTmVlZGVkIChxdyhJdGVtSUQpKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyROZWVkZWR9ICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkTmVlZGVkISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBjaGVjayBpZiBxdWV1ZSBwcmVmZXJlbmNlcyBhcmUgYXZhaWxhYmxlCiAgICBpZiAoICEkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpLT5HZXQoJ0dlbmVyYWxDYXRhbG9nUHJlZmVyZW5jZXMnKSApIHsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBnZXQgcHJlZmVyZW5jZXMKICAgIHJldHVybiBpZiAhJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyktPlByZXBhcmUoCiAgICAgICAgU1FMID0+ICJTRUxFQ1QgJFNlbGYtPntQcmVmZXJlbmNlc1RhYmxlS2V5fSwgJFNlbGYtPntQcmVmZXJlbmNlc1RhYmxlVmFsdWV9ICIKICAgICAgICAgICAgLiAiIEZST00gJFNlbGYtPntQcmVmZXJlbmNlc1RhYmxlfSBXSEVSRSAkU2VsZi0+e1ByZWZlcmVuY2VzVGFibGVHY0lEfSA9ID8iLAogICAgICAgIEJpbmQgPT4gWyBcJFBhcmFte0l0ZW1JRH0gXSwKICAgICk7CgogICAgbXkgJURhdGE7CiAgICB3aGlsZSAoIG15IEBSb3cgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKS0+RmV0Y2hyb3dBcnJheSgpICkgewogICAgICAgICREYXRheyAkUm93WzBdIH0gPSAkUm93WzFdOwogICAgfQoKICAgICMgcmV0dXJuIGRhdGEKICAgIHJldHVybiAlRGF0YTsKfQoKMTsKCj1iYWNrCgo9aGVhZDEgVEVSTVMgQU5EIENPTkRJVElPTlMKClRoaXMgc29mdHdhcmUgaXMgcGFydCBvZiB0aGUgT1RSUyBwcm9qZWN0IChodHRwOi8vb3Rycy5vcmcvKS4KClRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCnRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIEw8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0Pi4KCj1jdXQK
IyAtLQojIEdlbmVyYWxDYXRhbG9nLnQgLSBnZW5lcmFsIGNhdGFsb2cgdGVzdHMKIyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxNCBPVFJTIEFHLCBodHRwOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0LgojIC0tCgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CnVzZSB1dGY4OwoKdXNlIHZhcnMgcXcoJFNlbGYpOwoKdXNlIEtlcm5lbDo6U3lzdGVtOjpHZW5lcmFsQ2F0YWxvZzsKdXNlIEtlcm5lbDo6U3lzdGVtOjpVc2VyOwoKIyBjcmVhdGUgbG9jYWwgb2JqZWN0cwpteSAkQ29uZmlnT2JqZWN0ICAgICAgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpOwpteSAkR2VuZXJhbENhdGFsb2dPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6R2VuZXJhbENhdGFsb2cnKTsKbXkgJFVzZXJPYmplY3QgICAgICAgICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlVzZXInKTsKCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKIyBtYWtlIHByZXBhcmF0aW9ucwojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCgojIGNyZWF0ZSBuZWVkZWQgdXNlcnMKbXkgQFVzZXJJRHM7CnsKCiAgICAjIGRpc2FibGUgZW1haWwgY2hlY2tzIHRvIGNyZWF0ZSBuZXcgdXNlcgogICAgbXkgJENoZWNrRW1haWxBZGRyZXNzZXNPcmcgPSAkQ29uZmlnT2JqZWN0LT5HZXQoJ0NoZWNrRW1haWxBZGRyZXNzZXMnKSB8fCAxOwogICAgJENvbmZpZ09iamVjdC0+U2V0KAogICAgICAgIEtleSAgID0+ICdDaGVja0VtYWlsQWRkcmVzc2VzJywKICAgICAgICBWYWx1ZSA9PiAwLAogICAgKTsKCiAgICBmb3IgbXkgJENvdW50ZXIgKCAxIC4uIDIgKSB7CgogICAgICAgICMgY3JlYXRlIG5ldyB1c2VycyBmb3IgdGhlIHRlc3RzCiAgICAgICAgbXkgJFVzZXJJRCA9ICRVc2VyT2JqZWN0LT5Vc2VyQWRkKAogICAgICAgICAgICBVc2VyRmlyc3RuYW1lID0+ICdHZW5lcmFsQ2F0YWxvZycgLiAkQ291bnRlciwKICAgICAgICAgICAgVXNlckxhc3RuYW1lICA9PiAnVW5pdFRlc3QnLAogICAgICAgICAgICBVc2VyTG9naW4gICAgID0+ICdVbml0VGVzdC1HZW5lcmFsQ2F0YWxvZy0nIC4gJENvdW50ZXIgLiBpbnQgcmFuZCAxXzAwMF8wMDAsCiAgICAgICAgICAgIFVzZXJFbWFpbCAgICAgPT4gJ1VuaXRUZXN0LUdlbmVyYWxDYXRhbG9nLScgLiAkQ291bnRlciAuICdAbG9jYWxob3N0JywKICAgICAgICAgICAgVmFsaWRJRCAgICAgICA9PiAxLAogICAgICAgICAgICBDaGFuZ2VVc2VySUQgID0+IDEsCiAgICAgICAgKTsKCiAgICAgICAgcHVzaCBAVXNlcklEcywgJFVzZXJJRDsKICAgIH0KCiAgICAjIHJlc3RvcmUgb3JpZ2luYWwgZW1haWwgY2hlY2sgcGFyYW0KICAgICRDb25maWdPYmplY3QtPlNldCgKICAgICAgICBLZXkgICA9PiAnQ2hlY2tFbWFpbEFkZHJlc3NlcycsCiAgICAgICAgVmFsdWUgPT4gJENoZWNrRW1haWxBZGRyZXNzZXNPcmcsCiAgICApOwp9CgojIGNyZWF0ZSBuZWVkZWQgcmFuZG9tIGNsYXNzZXMKbXkgQENsYXNzUmFuZDsKCmZvciBteSAkQ291bnRlciAoIDEgLi4gMyApIHsKCiAgICBwdXNoIEBDbGFzc1JhbmQsIGludCByYW5kIDFfMDAwXzAwMDsKfQoKIyBzdG9yZSBvcmlnaW5hbCBnZW5lcmFsIGNhdGFsb2cgcGVybWlzc2lvbiBwcmVmZXJlbmNlcyBzZXR0aW5nCm15ICRHZW5lcmFsQ2F0YWxvZ1ByZWZlcmVuY2VzUGVybWlzc2lvbnNPcmc7CmlmICggJENvbmZpZ09iamVjdC0+R2V0KCdHZW5lcmFsQ2F0YWxvZ1ByZWZlcmVuY2VzJykgKSB7CiAgICAkR2VuZXJhbENhdGFsb2dQcmVmZXJlbmNlc1Blcm1pc3Npb25zT3JnCiAgICAgICAgPSAkQ29uZmlnT2JqZWN0LT5HZXQoJ0dlbmVyYWxDYXRhbG9nUHJlZmVyZW5jZXMnKS0+e1Blcm1pc3Npb25zfTsKfQoKIyBlbmFibGUgZ2VuZXJhbCBjYXRhbG9nIHBlcm1pc3Npb24gcHJlZmVyZW5jZXMgc2V0dGluZyB3aXRoIGEgZHVtbXkgdHJ1ZSB2YWx1ZQokQ29uZmlnT2JqZWN0LT5TZXQoCiAgICBLZXkgICA9PiAnR2VuZXJhbENhdGFsb2dQcmVmZXJlbmNlcyMjI1Blcm1pc3Npb25zJywKICAgIFZhbHVlID0+IDEsCik7CgojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiMgZGVmaW5lIGdlbmVyYWwgdGVzdHMKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwoKbXkgJEl0ZW1EYXRhID0gWwoKICAgICMgdGhpcyBpdGVtIGlzIE5PVCBjb21wbGV0ZSBhbmQgbXVzdCBub3QgYmUgYWRkZWQKICAgIHsKICAgICAgICBBZGQgPT4gewogICAgICAgICAgICBOYW1lICAgID0+ICdUZXN0SXRlbTEnLAogICAgICAgICAgICBWYWxpZElEID0+IDEsCiAgICAgICAgICAgIFVzZXJJRCAgPT4gMSwKICAgICAgICB9LAogICAgfSwKCiAgICAjIHRoaXMgaXRlbSBpcyBOT1QgY29tcGxldGUgYW5kIG11c3Qgbm90IGJlIGFkZGVkCiAgICB7CiAgICAgICAgQWRkID0+IHsKICAgICAgICAgICAgQ2xhc3MgICA9PiAnVW5pdFRlc3Q6OlRlc3RDbGFzcycgLiAkQ2xhc3NSYW5kWzBdLAogICAgICAgICAgICBWYWxpZElEID0+IDEsCiAgICAgICAgICAgIFVzZXJJRCAgPT4gMSwKICAgICAgICB9LAogICAgfSwKCiAgICAjIHRoaXMgaXRlbSBpcyBOT1QgY29tcGxldGUgYW5kIG11c3Qgbm90IGJlIGFkZGVkCiAgICB7CiAgICAgICAgQWRkID0+IHsKICAgICAgICAgICAgQ2xhc3MgID0+ICdVbml0VGVzdDo6VGVzdENsYXNzJyAuICRDbGFzc1JhbmRbMF0sCiAgICAgICAgICAgIE5hbWUgICA9PiAnVGVzdEl0ZW0yJywKICAgICAgICAgICAgVXNlcklEID0+IDEsCiAgICAgICAgfSwKICAgIH0sCgogICAgIyB0aGlzIGl0ZW0gaXMgTk9UIGNvbXBsZXRlIGFuZCBtdXN0IG5vdCBiZSBhZGRlZAogICAgewogICAgICAgIEFkZCA9PiB7CiAgICAgICAgICAgIENsYXNzICAgPT4gJ1VuaXRUZXN0OjpUZXN0Q2xhc3MnIC4gJENsYXNzUmFuZFswXSwKICAgICAgICAgICAgTmFtZSAgICA9PiAnVGVzdEl0ZW0zJywKICAgICAgICAgICAgVmFsaWRJRCA9PiAxLAogICAgICAgIH0sCiAgICB9LAoKICAgICMgdGhpcyBpdGVtIG11c3QgYmUgaW5zZXJ0ZWQgc3VjZXNzZnVsbHkKICAgIHsKICAgICAgICBBZGQgPT4gewogICAgICAgICAgICBDbGFzcyAgID0+ICdVbml0VGVzdDo6VGVzdENsYXNzJyAuICRDbGFzc1JhbmRbMF0sCiAgICAgICAgICAgIE5hbWUgICAgPT4gJ1Rlc3RJdGVtNCcsCiAgICAgICAgICAgIFZhbGlkSUQgPT4gMSwKICAgICAgICAgICAgVXNlcklEICA9PiAxLAogICAgICAgIH0sCiAgICAgICAgQWRkR2V0ID0+IHsKICAgICAgICAgICAgQ2xhc3MgICAgPT4gJ1VuaXRUZXN0OjpUZXN0Q2xhc3MnIC4gJENsYXNzUmFuZFswXSwKICAgICAgICAgICAgTmFtZSAgICAgPT4gJ1Rlc3RJdGVtNCcsCiAgICAgICAgICAgIFZhbGlkSUQgID0+IDEsCiAgICAgICAgICAgIENvbW1lbnQgID0+ICcnLAogICAgICAgICAgICBDcmVhdGVCeSA9PiAxLAogICAgICAgICAgICBDaGFuZ2VCeSA9PiAxLAogICAgICAgIH0sCiAgICB9LAoKICAgICMgdGhlIHByZWZlcmVuY2VzIG9mIHRoZSBpdGVtIG9uZSBhZGQtdGVzdCBiZWZvcmUgbXVzdCBiZSBzZXQKICAgIHsKICAgICAgICBQcmVmZXJlbmNlc1NldCA9PiB7CiAgICAgICAgICAgIEhlbGxvID0+ICdXb3JsZCcsCiAgICAgICAgICAgIENvbG9yID0+ICdSZWQnLAogICAgICAgIH0sCiAgICAgICAgUHJlZmVyZW5jZXNHZXQgPT4gewogICAgICAgICAgICBIZWxsbyA9PiAnV29ybGQnLAogICAgICAgICAgICBDb2xvciA9PiAnUmVkJywKICAgICAgICB9LAogICAgfSwKCiAgICAjIHRoaXMgaXRlbSBoYXZlIHRoZSBzYW1lIG5hbWUgYXMgb25lIHRlc3QgYmVmb3JlIGFuZCBtdXN0IG5vdCBiZSBhZGRlZAogICAgewogICAgICAgIEFkZCA9PiB7CiAgICAgICAgICAgIENsYXNzICAgPT4gJ1VuaXRUZXN0OjpUZXN0Q2xhc3MnIC4gJENsYXNzUmFuZFswXSwKICAgICAgICAgICAgTmFtZSAgICA9PiAnVGVzdEl0ZW00JywKICAgICAgICAgICAgVmFsaWRJRCA9PiAxLAogICAgICAgICAgICBVc2VySUQgID0+IDEsCiAgICAgICAgfSwKICAgIH0sCgogICAgIyB0aGlzIGl0ZW0gbXVzdCBiZSBpbnNlcnRlZCBzdWNlc3NmdWxseQogICAgewogICAgICAgIEFkZCA9PiB7CiAgICAgICAgICAgIENsYXNzICAgPT4gJ1VuaXRUZXN0OjpUZXN0Q2xhc3MnIC4gJENsYXNzUmFuZFswXSwKICAgICAgICAgICAgTmFtZSAgICA9PiAnVGVzdEl0ZW01JywKICAgICAgICAgICAgVmFsaWRJRCA9PiAxLAogICAgICAgICAgICBVc2VySUQgID0+IDEsCiAgICAgICAgfSwKICAgICAgICBBZGRHZXQgPT4gewogICAgICAgICAgICBDbGFzcyAgICA9PiAnVW5pdFRlc3Q6OlRlc3RDbGFzcycgLiAkQ2xhc3NSYW5kWzBdLAogICAgICAgICAgICBOYW1lICAgICA9PiAnVGVzdEl0ZW01JywKICAgICAgICAgICAgVmFsaWRJRCAgPT4gMSwKICAgICAgICAgICAgQ29tbWVudCAgPT4gJycsCiAgICAgICAgICAgIENyZWF0ZUJ5ID0+IDEsCiAgICAgICAgICAgIENoYW5nZUJ5ID0+IDEsCiAgICAgICAgfSwKICAgIH0sCgogICAgIyB0aGUgcHJlZmVyZW5jZXMgb2YgdGhlIGl0ZW0gb25lIGFkZC10ZXN0IGJlZm9yZSBtdXN0IGJlIHNldAogICAgewogICAgICAgIFByZWZlcmVuY2VzU2V0ID0+IHsKICAgICAgICAgICAgSGVsbG8gPT4gJ05ld1dvcmxkJywKICAgICAgICAgICAgQ29sb3IgPT4gJ0JsdWUnLAogICAgICAgIH0sCiAgICAgICAgUHJlZmVyZW5jZXNHZXQgPT4gewogICAgICAgICAgICBIZWxsbyA9PiAnTmV3V29ybGQnLAogICAgICAgICAgICBDb2xvciA9PiAnQmx1ZScsCiAgICAgICAgfSwKICAgIH0sCgogICAgIyB0aGUgaXRlbSBvbmUgYWRkLXRlc3QgYmVmb3JlIG11c3QgYmUgTk9UIHVwZGF0ZWQgKGl0ZW0gdXBkYXRlIGFyZ3VtZW50cyBOT1QgY29tcGxldGUpCiAgICB7CiAgICAgICAgVXBkYXRlID0+IHsKICAgICAgICAgICAgVmFsaWRJRCA9PiAkVXNlcklEc1swXSwKICAgICAgICAgICAgVXNlcklEICA9PiAkVXNlcklEc1swXSwKICAgICAgICB9LAogICAgfSwKCiAgICAjIHRoZSBpdGVtIG9uZSBhZGQtdGVzdCBiZWZvcmUgbXVzdCBiZSBOT1QgdXBkYXRlZCAoaXRlbSB1cGRhdGUgYXJndW1lbnRzIE5PVCBjb21wbGV0ZSkKICAgIHsKICAgICAgICBVcGRhdGUgPT4gewogICAgICAgICAgICBOYW1lICAgPT4gJ1Rlc3RJdGVtNVVQREFURTEnLAogICAgICAgICAgICBVc2VySUQgPT4gJFVzZXJJRHNbMF0sCiAgICAgICAgfSwKICAgIH0sCgogICAgIyB0aGUgaXRlbSBvbmUgYWRkLXRlc3QgYmVmb3JlIG11c3QgYmUgTk9UIHVwZGF0ZWQgKGl0ZW0gdXBkYXRlIGFyZ3VtZW50cyBOT1QgY29tcGxldGUpCiAgICB7CiAgICAgICAgVXBkYXRlID0+IHsKICAgICAgICAgICAgVmFsaWRJRCA9PiAkVXNlcklEc1swXSwKICAgICAgICB9LAogICAgfSwKCiAgICAjIHRoZSBpdGVtIG9uZSBhZGQtdGVzdCBiZWZvcmUgbXVzdCBiZSB1cGRhdGVkIChpdGVtIHVwZGF0ZSBhcmd1bWVudHMgYXJlIGNvbXBsZXRlKQogICAgewogICAgICAgIFVwZGF0ZSA9PiB7CiAgICAgICAgICAgIE5hbWUgICAgPT4gJ1Rlc3RJdGVtNVVQREFURTInLAogICAgICAgICAgICBWYWxpZElEID0+ICRVc2VySURzWzBdLAogICAgICAgICAgICBVc2VySUQgID0+ICRVc2VySURzWzBdLAogICAgICAgIH0sCiAgICAgICAgVXBkYXRlR2V0ID0+IHsKICAgICAgICAgICAgTmFtZSAgICAgPT4gJ1Rlc3RJdGVtNVVQREFURTInLAogICAgICAgICAgICBWYWxpZElEICA9PiAkVXNlcklEc1swXSwKICAgICAgICAgICAgQ29tbWVudCAgPT4gJycsCiAgICAgICAgICAgIENyZWF0ZUJ5ID0+IDEsCiAgICAgICAgICAgIENoYW5nZUJ5ID0+ICRVc2VySURzWzBdLAogICAgICAgIH0sCiAgICB9LAoKICAgICMgdGhlIGl0ZW0gb25lIGFkZC10ZXN0IGJlZm9yZSBtdXN0IGJlIHVwZGF0ZWQgKGl0ZW0gdXBkYXRlIGFyZ3VtZW50cyBhcmUgY29tcGxldGUpCiAgICB7CiAgICAgICAgVXBkYXRlID0+IHsKICAgICAgICAgICAgTmFtZSAgICA9PiAnVGVzdEl0ZW01VVBEQVRFMycsCiAgICAgICAgICAgIFZhbGlkSUQgPT4gMSwKICAgICAgICAgICAgVXNlcklEICA9PiAxLAogICAgICAgIH0sCiAgICAgICAgVXBkYXRlR2V0ID0+IHsKICAgICAgICAgICAgTmFtZSAgICAgPT4gJ1Rlc3RJdGVtNVVQREFURTMnLAogICAgICAgICAgICBWYWxpZElEICA9PiAxLAogICAgICAgICAgICBDb21tZW50ICA9PiAnJywKICAgICAgICAgICAgQ3JlYXRlQnkgPT4gMSwKICAgICAgICAgICAgQ2hhbmdlQnkgPT4gMSwKICAgICAgICB9LAogICAgfSwKCiAgICAjIHRoaXMgdGVtcGxhdGUgbXVzdCBiZSBpbnNlcnRlZCBzdWNlc3NmdWxseSAoY2hlY2sgc3RyaW5nIGNsZWFuZXIgZnVuY3Rpb24pCiAgICB7CiAgICAgICAgQWRkID0+IHsKICAgICAgICAgICAgQ2xhc3MgICA9PiAiIFx0IFxuIFxyIFVuaXQgVGVzdCA6OiBUZXN0IENsYXNzIFx0IFxuIFxyICIgLiAkQ2xhc3NSYW5kWzBdLAogICAgICAgICAgICBOYW1lICAgID0+ICIgXHQgXG4gXHIgVGVzdCBJdGVtIFx0IFxuIFxyICIsCiAgICAgICAgICAgIFZhbGlkSUQgPT4gMSwKICAgICAgICAgICAgQ29tbWVudCA9PiAiIFx0IFxuIFxyIFRlc3QgQ29tbWVudCBcdCBcbiBcciAiLAogICAgICAgICAgICBVc2VySUQgID0+IDEsCiAgICAgICAgfSwKICAgICAgICBBZGRHZXQgPT4gewogICAgICAgICAgICBDbGFzcyAgICA9PiAnVW5pdFRlc3Q6OlRlc3RDbGFzcycgLiAkQ2xhc3NSYW5kWzBdLAogICAgICAgICAgICBOYW1lICAgICA9PiAnVGVzdCBJdGVtJywKICAgICAgICAgICAgVmFsaWRJRCAgPT4gMSwKICAgICAgICAgICAgQ29tbWVudCAgPT4gJ1Rlc3QgQ29tbWVudCcsCiAgICAgICAgICAgIENyZWF0ZUJ5ID0+IDEsCiAgICAgICAgICAgIENoYW5nZUJ5ID0+IDEsCiAgICAgICAgfSwKICAgIH0sCgogICAgIyB0aGUgaXRlbSBvbmUgYWRkLXRlc3QgYmVmb3JlIG11c3QgYmUgdXBkYXRlZCBzdWNlc3NmdWxseSAoY2hlY2sgc3RyaW5nIGNsZWFuZXIgZnVuY3Rpb24pCiAgICB7CiAgICAgICAgVXBkYXRlID0+IHsKICAgICAgICAgICAgTmFtZSAgICA9PiAiIFx0IFxuIFxyIFRlc3QgSXRlbSBVUERBVEUxIFx0IFxuIFxyICIsCiAgICAgICAgICAgIFZhbGlkSUQgPT4gJFVzZXJJRHNbMF0sCiAgICAgICAgICAgIENvbW1lbnQgPT4gIiBcdCBcbiBcciBUZXN0IENvbW1lbnQgVVBEQVRFMSBcdCBcbiBcciAiLAogICAgICAgICAgICBVc2VySUQgID0+ICRVc2VySURzWzBdLAogICAgICAgIH0sCiAgICAgICAgVXBkYXRlR2V0ID0+IHsKICAgICAgICAgICAgTmFtZSAgICAgPT4gJ1Rlc3QgSXRlbSBVUERBVEUxJywKICAgICAgICAgICAgVmFsaWRJRCAgPT4gJFVzZXJJRHNbMF0sCiAgICAgICAgICAgIENvbW1lbnQgID0+ICdUZXN0IENvbW1lbnQgVVBEQVRFMScsCiAgICAgICAgICAgIENyZWF0ZUJ5ID0+IDEsCiAgICAgICAgICAgIENoYW5nZUJ5ID0+ICRVc2VySURzWzBdLAogICAgICAgIH0sCiAgICB9LAoKICAgICMgdGhpcyBpdGVtIG11c3QgYmUgaW5zZXJ0ZWQgc3VjZXNzZnVsbHkgKHVuaWNvZGUgY2hlY2tzKQogICAgewogICAgICAgIEFkZCA9PiB7CiAgICAgICAgICAgIENsYXNzICAgPT4gJ1VuaXRUZXN0OjpUZXN0Q2xhc3PCqScgLiAkQ2xhc3NSYW5kWzFdLAogICAgICAgICAgICBOYW1lICAgID0+ICcgz5Igz6EgVGVzdCBJdGVtIMapIM+eICcsCiAgICAgICAgICAgIFZhbGlkSUQgPT4gMSwKICAgICAgICAgICAgQ29tbWVudCA9PiAnIM+gINCvIFRlc3QgQ29tbWVudCDRrCDRoCAnLAogICAgICAgICAgICBVc2VySUQgID0+IDEsCiAgICAgICAgfSwKICAgICAgICBBZGRHZXQgPT4gewogICAgICAgICAgICBDbGFzcyAgICA9PiAnVW5pdFRlc3Q6OlRlc3RDbGFzc8KpJyAuICRDbGFzc1JhbmRbMV0sCiAgICAgICAgICAgIE5hbWUgICAgID0+ICfPkiDPoSBUZXN0IEl0ZW0gxqkgz54nLAogICAgICAgICAgICBWYWxpZElEICA9PiAxLAogICAgICAgICAgICBDb21tZW50ICA9PiAnz6Ag0K8gVGVzdCBDb21tZW50INGsINGgJywKICAgICAgICAgICAgQ3JlYXRlQnkgPT4gMSwKICAgICAgICAgICAgQ2hhbmdlQnkgPT4gMSwKICAgICAgICB9LAogICAgfSwKCiAgICAjIHRoZSBpdGVtIG9uZSBhZGQtdGVzdCBiZWZvcmUgbXVzdCBiZSB1cGRhdGVkIHN1Y2Vzc2Z1bGx5ICh1bmljb2RlIGNoZWNrcykKICAgIHsKICAgICAgICBVcGRhdGUgPT4gewogICAgICAgICAgICBOYW1lICAgID0+ICdUZXN0IEl0ZW0gxqkgyaQgVVBEQVRFMScsCiAgICAgICAgICAgIFZhbGlkSUQgPT4gJFVzZXJJRHNbMV0sCiAgICAgICAgICAgIENvbW1lbnQgPT4gJyBUZXN0IENvbW1lbnQg0Zkg0ZIgVVBEQVRFMSAnLAogICAgICAgICAgICBVc2VySUQgID0+ICRVc2VySURzWzFdLAogICAgICAgIH0sCiAgICAgICAgVXBkYXRlR2V0ID0+IHsKICAgICAgICAgICAgTmFtZSAgICAgPT4gJ1Rlc3QgSXRlbSDGqSDJpCBVUERBVEUxJywKICAgICAgICAgICAgVmFsaWRJRCAgPT4gJFVzZXJJRHNbMV0sCiAgICAgICAgICAgIENvbW1lbnQgID0+ICdUZXN0IENvbW1lbnQg0Zkg0ZIgVVBEQVRFMScsCiAgICAgICAgICAgIENyZWF0ZUJ5ID0+IDEsCiAgICAgICAgICAgIENoYW5nZUJ5ID0+ICRVc2VySURzWzFdLAogICAgICAgIH0sCiAgICB9LAoKICAgICMgdGhpcyBpdGVtIG11c3QgYmUgaW5zZXJ0ZWQgc3VjZXNzZnVsbHkgKGEgc2Vjb25kIGl0ZW0gd2l0aCBGdW5jdGlvbmFsaXR5ICd0ZXN0MScpCiAgICB7CiAgICAgICAgQWRkID0+IHsKICAgICAgICAgICAgQ2xhc3MgICA9PiAnVW5pdFRlc3Q6OlRlc3RDbGFzcycgLiAkQ2xhc3NSYW5kWzBdLAogICAgICAgICAgICBOYW1lICAgID0+ICdUZXN0SXRlbTYnLAogICAgICAgICAgICBWYWxpZElEID0+IDEsCiAgICAgICAgICAgIFVzZXJJRCAgPT4gMSwKICAgICAgICB9LAogICAgICAgIEFkZEdldCA9PiB7CiAgICAgICAgICAgIENsYXNzICAgID0+ICdVbml0VGVzdDo6VGVzdENsYXNzJyAuICRDbGFzc1JhbmRbMF0sCiAgICAgICAgICAgIE5hbWUgICAgID0+ICdUZXN0SXRlbTYnLAogICAgICAgICAgICBWYWxpZElEICA9PiAxLAogICAgICAgICAgICBDb21tZW50ICA9PiAnJywKICAgICAgICAgICAgQ3JlYXRlQnkgPT4gMSwKICAgICAgICAgICAgQ2hhbmdlQnkgPT4gMSwKICAgICAgICB9LAogICAgfSwKCiAgICAjIHRoZSBpdGVtIG9uZSBhZGQtdGVzdCBiZWZvcmUgbXVzdCBiZSB1cGRhdGVkIChzZXQgZnVuY3Rpb25hbGl0eSB0byAnJykKICAgIHsKICAgICAgICBVcGRhdGUgPT4gewogICAgICAgICAgICBOYW1lICAgID0+ICdUZXN0SXRlbTZVUERBVEUxJywKICAgICAgICAgICAgVmFsaWRJRCA9PiAxLAogICAgICAgICAgICBVc2VySUQgID0+IDEsCiAgICAgICAgfSwKICAgICAgICBVcGRhdGVHZXQgPT4gewogICAgICAgICAgICBOYW1lICAgICA9PiAnVGVzdEl0ZW02VVBEQVRFMScsCiAgICAgICAgICAgIFZhbGlkSUQgID0+IDEsCiAgICAgICAgICAgIENvbW1lbnQgID0+ICcnLAogICAgICAgICAgICBDcmVhdGVCeSA9PiAxLAogICAgICAgICAgICBDaGFuZ2VCeSA9PiAxLAogICAgICAgIH0sCiAgICB9LAoKICAgICMgdGhpcyBpdGVtIG11c3QgYmUgaW5zZXJ0ZWQgc3VjZXNzZnVsbHkgKHNwZWNpYWwgY2hhcmFjdGVyIGNoZWNrcykKICAgIHsKICAgICAgICBBZGQgPT4gewogICAgICAgICAgICBDbGFzcyAgID0+ICdVbml0VGVzdDo6VGVzdENsYXNzW3Rlc3RdJSpcXCcgLiAkQ2xhc3NSYW5kWzFdLAogICAgICAgICAgICBOYW1lICAgID0+ICcgW3Rlc3RdJSpcXCBUZXN0IEl0ZW0gW3Rlc3RdJSpcXCAnLAogICAgICAgICAgICBWYWxpZElEID0+IDEsCiAgICAgICAgICAgIENvbW1lbnQgPT4gJyBbdGVzdF0lKlxcIFRlc3QgQ29tbWVudCBbdGVzdF0lKlxcICcsCiAgICAgICAgICAgIFVzZXJJRCAgPT4gMSwKICAgICAgICB9LAogICAgICAgIEFkZEdldCA9PiB7CiAgICAgICAgICAgIENsYXNzICAgID0+ICdVbml0VGVzdDo6VGVzdENsYXNzW3Rlc3RdJSpcXCcgLiAkQ2xhc3NSYW5kWzFdLAogICAgICAgICAgICBOYW1lICAgICA9PiAnW3Rlc3RdJSpcXCBUZXN0IEl0ZW0gW3Rlc3RdJSpcXCcsCiAgICAgICAgICAgIFZhbGlkSUQgID0+IDEsCiAgICAgICAgICAgIENvbW1lbnQgID0+ICdbdGVzdF0lKlxcIFRlc3QgQ29tbWVudCBbdGVzdF0lKlxcJywKICAgICAgICAgICAgQ3JlYXRlQnkgPT4gMSwKICAgICAgICAgICAgQ2hhbmdlQnkgPT4gMSwKICAgICAgICB9LAogICAgfSwKCiAgICAjIHRoZSBpdGVtIG9uZSBhZGQtdGVzdCBiZWZvcmUgbXVzdCBiZSB1cGRhdGVkIHN1Y2Vzc2Z1bGx5IChzcGVjaWFsIGNoYXJhY3RlciBjaGVja3MpCiAgICB7CiAgICAgICAgVXBkYXRlID0+IHsKICAgICAgICAgICAgTmFtZSAgICA9PiAnIFt0ZXN0XSUqXFwgVGVzdCBJdGVtIFVQREFURTEgW3Rlc3RdJSpcXCAnLAogICAgICAgICAgICBWYWxpZElEID0+ICRVc2VySURzWzFdLAogICAgICAgICAgICBDb21tZW50ID0+ICcgW3Rlc3RdJSpcXCBUZXN0IENvbW1lbnQgVVBEQVRFMSBbdGVzdF0lKlxcICcsCiAgICAgICAgICAgIFVzZXJJRCAgPT4gJFVzZXJJRHNbMV0sCiAgICAgICAgfSwKICAgICAgICBVcGRhdGVHZXQgPT4gewogICAgICAgICAgICBOYW1lICAgICA9PiAnW3Rlc3RdJSpcXCBUZXN0IEl0ZW0gVVBEQVRFMSBbdGVzdF0lKlxcJywKICAgICAgICAgICAgVmFsaWRJRCAgPT4gJFVzZXJJRHNbMV0sCiAgICAgICAgICAgIENvbW1lbnQgID0+ICdbdGVzdF0lKlxcIFRlc3QgQ29tbWVudCBVUERBVEUxIFt0ZXN0XSUqXFwnLAogICAgICAgICAgICBDcmVhdGVCeSA9PiAxLAogICAgICAgICAgICBDaGFuZ2VCeSA9PiAkVXNlcklEc1sxXSwKICAgICAgICB9LAogICAgfSwKCiAgICAjIHRoaXMgaXRlbSBtdXN0IGJlIGluc2VydGVkIHN1Y2Vzc2Z1bGx5CiAgICB7CiAgICAgICAgQWRkID0+IHsKICAgICAgICAgICAgQ2xhc3MgICA9PiAnVW5pdFRlc3Q6OlRlc3RDbGFzcycgLiAkQ2xhc3NSYW5kWzBdLAogICAgICAgICAgICBOYW1lICAgID0+ICdUZXN0SXRlbVByZWZlcmVuY2VzJywKICAgICAgICAgICAgVmFsaWRJRCA9PiAxLAogICAgICAgICAgICBVc2VySUQgID0+IDEsCiAgICAgICAgfSwKICAgICAgICBBZGRHZXQgPT4gewogICAgICAgICAgICBDbGFzcyAgICA9PiAnVW5pdFRlc3Q6OlRlc3RDbGFzcycgLiAkQ2xhc3NSYW5kWzBdLAogICAgICAgICAgICBOYW1lICAgICA9PiAnVGVzdEl0ZW1QcmVmZXJlbmNlcycsCiAgICAgICAgICAgIFZhbGlkSUQgID0+IDEsCiAgICAgICAgICAgIENvbW1lbnQgID0+ICcnLAogICAgICAgICAgICBDcmVhdGVCeSA9PiAxLAogICAgICAgICAgICBDaGFuZ2VCeSA9PiAxLAogICAgICAgIH0sCiAgICB9LAoKICAgICMgdGhlIHByZWZlcmVuY2VzIG9mIHRoZSBpdGVtIG9uZSBhZGQtdGVzdCBiZWZvcmUgbXVzdCBiZSBzZXQKICAgIHsKICAgICAgICBQcmVmZXJlbmNlc1NldCA9PiB7CiAgICAgICAgICAgIFRlc3QgID0+ICdoZWxsbyB3b3JsZCcsCiAgICAgICAgICAgIEdyb3VwID0+IDMzLAogICAgICAgIH0sCiAgICAgICAgUHJlZmVyZW5jZXNHZXQgPT4gewogICAgICAgICAgICBUZXN0ICA9PiAnaGVsbG8gd29ybGQnLAogICAgICAgICAgICBHcm91cCA9PiAzMywKICAgICAgICB9LAogICAgfSwKCiAgICAjIHRoZSBwcmVmZXJlbmNlcyBvZiB0aGUgaXRlbSBvbmUgYWRkLXRlc3QgYmVmb3JlIG11c3QgYmUgc2V0CiAgICB7CiAgICAgICAgUHJlZmVyZW5jZXNTZXQgPT4gewogICAgICAgICAgICBUZXN0ID0+ICdoZWxsbycsCiAgICAgICAgICAgIFNpemUgPT4gMzgsCiAgICAgICAgfSwKICAgICAgICBQcmVmZXJlbmNlc0dldCA9PiB7CiAgICAgICAgICAgIFRlc3QgPT4gJ2hlbGxvJywKICAgICAgICAgICAgU2l6ZSA9PiAzOCwKICAgICAgICB9LAogICAgfSwKCiAgICAjIHRoaXMgaXRlbSBoYXMgYW4gZW1wdHkgbmFtZSBhbmQgbXVzdCBub3QgYmUgYWRkZWQKICAgIHsKICAgICAgICBBZGQgPT4gewogICAgICAgICAgICBDbGFzcyAgID0+ICdVbml0VGVzdDo6VGVzdENsYXNzJyAuICRDbGFzc1JhbmRbMF0sCiAgICAgICAgICAgIE5hbWUgICAgPT4gJycsCiAgICAgICAgICAgIFZhbGlkSUQgPT4gMSwKICAgICAgICAgICAgVXNlcklEICA9PiAxLAogICAgICAgIH0sCiAgICB9LAoKICAgICMgdGhpcyBpdGVtIG11c3QgYmUgYWRkZWQsIHRoZSBudW1iZXIgemVybyAoMCkgaXMgYWxsb3dlZCBhcyBuYW1lCiAgICB7CiAgICAgICAgQWRkID0+IHsKICAgICAgICAgICAgQ2xhc3MgICA9PiAnVW5pdFRlc3Q6OlRlc3RDbGFzcycgLiAkQ2xhc3NSYW5kWzBdLAogICAgICAgICAgICBOYW1lICAgID0+ICcwJywKICAgICAgICAgICAgVmFsaWRJRCA9PiAxLAogICAgICAgICAgICBVc2VySUQgID0+IDEsCiAgICAgICAgfSwKICAgICAgICBBZGRHZXQgPT4gewogICAgICAgICAgICBDbGFzcyAgICA9PiAnVW5pdFRlc3Q6OlRlc3RDbGFzcycgLiAkQ2xhc3NSYW5kWzBdLAogICAgICAgICAgICBOYW1lICAgICA9PiAnMCcsCiAgICAgICAgICAgIFZhbGlkSUQgID0+IDEsCiAgICAgICAgICAgIENvbW1lbnQgID0+ICcnLAogICAgICAgICAgICBDcmVhdGVCeSA9PiAxLAogICAgICAgICAgICBDaGFuZ2VCeSA9PiAxLAogICAgICAgIH0sCiAgICB9LAoKICAgICMgdGhlIGl0ZW0gb25lIGFkZC10ZXN0IGJlZm9yZSBtdXN0IGJlIHVwZGF0ZWQgc3VjZXNzZnVsbHkgKHVwZGF0aW5nIG5hbWUgdG8gbnVtYmVyIHplcm8gKDApICkKICAgIHsKICAgICAgICBVcGRhdGUgPT4gewogICAgICAgICAgICBOYW1lICAgID0+ICcwJywKICAgICAgICAgICAgVmFsaWRJRCA9PiAxLAogICAgICAgICAgICBDb21tZW50ID0+ICcnLAogICAgICAgICAgICBVc2VySUQgID0+IDEsCiAgICAgICAgfSwKICAgICAgICBVcGRhdGVHZXQgPT4gewogICAgICAgICAgICBOYW1lICAgICA9PiAnMCcsCiAgICAgICAgICAgIFZhbGlkSUQgID0+IDEsCiAgICAgICAgICAgIENvbW1lbnQgID0+ICcnLAogICAgICAgICAgICBDcmVhdGVCeSA9PiAxLAogICAgICAgICAgICBDaGFuZ2VCeSA9PiAxLAogICAgICAgIH0sCiAgICB9LAoKICAgICMgdGhlIGl0ZW0gb25lIGFkZC10ZXN0IGJlZm9yZSBtdXN0IG5vdCBiZSB1cGRhdGVkIHN1Y2Vzc2Z1bGx5CiAgICAjIChlbXB0eSBzdHJpbmcgYXMgbmFtZSBpcyBub3QgYWxsb3dlZCApCiAgICB7CiAgICAgICAgVXBkYXRlID0+IHsKICAgICAgICAgICAgTmFtZSAgICA9PiAnJywKICAgICAgICAgICAgVmFsaWRJRCA9PiAxLAogICAgICAgICAgICBDb21tZW50ID0+ICcnLAogICAgICAgICAgICBVc2VySUQgID0+IDEsCiAgICAgICAgfSwKICAgIH0sCl07CgojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiMgcnVuIGdlbmVyYWwgdGVzdHMKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwoKbXkgJFRlc3RDb3VudCA9IDE7Cm15ICRMYXN0QWRkZWRJdGVtSUQ7Cm15ICVBZGRlZEl0ZW1Db3VudGVyOwoKZm9yIG15ICRJdGVtICggQHskSXRlbURhdGF9ICkgewoKICAgIGlmICggJEl0ZW0tPntBZGR9ICkgewoKICAgICAgICAjIGFkZCBuZXcgaXRlbQogICAgICAgIG15ICRJdGVtSUQgPSAkR2VuZXJhbENhdGFsb2dPYmplY3QtPkl0ZW1BZGQoCiAgICAgICAgICAgICV7ICRJdGVtLT57QWRkfSB9LAogICAgICAgICk7CgogICAgICAgICMgY2hlY2sgaWYgaXRlbSB3YXMgYWRkZWQgc3VjY2Vzc2Z1bGx5IG9yIG5vdAogICAgICAgIGlmICggJEl0ZW0tPntBZGRHZXR9ICkgewoKICAgICAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICAgICAkSXRlbUlELAogICAgICAgICAgICAgICAgIlRlc3QgJFRlc3RDb3VudDogSXRlbUFkZCgpIC0gSXRlbUtleTogJEl0ZW1JRCIsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICBpZiAoJEl0ZW1JRCkgewoKICAgICAgICAgICAgICAgICMgc2V0IGxhc3QgaXRlbSBpZCB2YXJpYWJsZQogICAgICAgICAgICAgICAgJExhc3RBZGRlZEl0ZW1JRCA9ICRJdGVtSUQ7CgogICAgICAgICAgICAgICAgIyBpbmNyZW1lbnQgdGhlIGFkZGVkIGl0ZW0gY291bnRlcgogICAgICAgICAgICAgICAgJEFkZGVkSXRlbUNvdW50ZXJ7ICRJdGVtLT57QWRkR2V0fS0+e0NsYXNzfSB9Kys7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICRTZWxmLT5GYWxzZSgKICAgICAgICAgICAgICAgICRJdGVtSUQsCiAgICAgICAgICAgICAgICAiVGVzdCAkVGVzdENvdW50OiBJdGVtQWRkKCkiLAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgIyBnZXQgaXRlbSBkYXRhIHRvIGNoZWNrIHRoZSB2YWx1ZXMgYWZ0ZXIgY3JlYXRpb24gb2YgaXRlbSB1c2luZyBJdGVtSWQgYW5kIFVzZXJJRAogICAgICAgIG15ICRJdGVtR2V0ID0gJEdlbmVyYWxDYXRhbG9nT2JqZWN0LT5JdGVtR2V0KAogICAgICAgICAgICBJdGVtSUQgPT4gJEl0ZW1JRCwKICAgICAgICAgICAgVXNlcklEID0+ICRJdGVtLT57QWRkfS0+e1VzZXJJRH0sCiAgICAgICAgKTsKCiAgICAgICAgIyBjaGVjayBpdGVtIGRhdGEgYWZ0ZXIgY3JlYXRpb24gb2YgaXRlbQogICAgICAgIGZvciBteSAkSXRlbUF0dHJpYnV0ZSAoIHNvcnQga2V5cyAleyAkSXRlbS0+e0FkZEdldH0gfSApIHsKICAgICAgICAgICAgJFNlbGYtPklzKAogICAgICAgICAgICAgICAgJEl0ZW1HZXQtPnskSXRlbUF0dHJpYnV0ZX0sCiAgICAgICAgICAgICAgICAkSXRlbS0+e0FkZEdldH0tPnskSXRlbUF0dHJpYnV0ZX0sCiAgICAgICAgICAgICAgICAiVGVzdCAkVGVzdENvdW50OiBJdGVtR2V0KCkgLSBVc2luZyBJdGVtSUQgYW5kIFVzZXJJRCAtICRJdGVtQXR0cmlidXRlICIsCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAjIGdldCBpdGVtIGRhdGEgdG8gY2hlY2sgdGhlIHZhbHVlcyBhZnRlciBjcmVhdGlvbiBvZiBpdGVtIHVzaW5nIENsYXNzIGFuZCBOYW1lCiAgICAgICAgJEl0ZW1HZXQgPSAkR2VuZXJhbENhdGFsb2dPYmplY3QtPkl0ZW1HZXQoCiAgICAgICAgICAgIENsYXNzID0+ICRJdGVtLT57QWRkR2V0fS0+e0NsYXNzfSwKICAgICAgICAgICAgTmFtZSAgPT4gJEl0ZW0tPntBZGRHZXR9LT57TmFtZX0sCiAgICAgICAgKTsKCiAgICAgICAgIyBjaGVjayBpdGVtIGRhdGEgYWZ0ZXIgY3JlYXRpb24gb2YgaXRlbQogICAgICAgIGZvciBteSAkSXRlbUF0dHJpYnV0ZSAoIHNvcnQga2V5cyAleyAkSXRlbS0+e0FkZEdldH0gfSApIHsKICAgICAgICAgICAgJFNlbGYtPklzKAogICAgICAgICAgICAgICAgJEl0ZW1HZXQtPnskSXRlbUF0dHJpYnV0ZX0sCiAgICAgICAgICAgICAgICAkSXRlbS0+e0FkZEdldH0tPnskSXRlbUF0dHJpYnV0ZX0sCiAgICAgICAgICAgICAgICAiVGVzdCAkVGVzdENvdW50OiBJdGVtR2V0KCkgLSBVc2luZyBDbGFzcyBhbmQgTmFtZSAtICRJdGVtQXR0cmlidXRlICIsCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgfQoKICAgIGlmICggJEl0ZW0tPntVcGRhdGV9ICkgewoKICAgICAgICAjIGNoZWNrIGxhc3QgaXRlbSBpZCB2YXJhaWJsZQogICAgICAgIGlmICggISRMYXN0QWRkZWRJdGVtSUQgKSB7CiAgICAgICAgICAgICRTZWxmLT5GYWxzZSgKICAgICAgICAgICAgICAgIDEsCiAgICAgICAgICAgICAgICAiVGVzdCAkVGVzdENvdW50OiBOTyBMQVNUIElURU0gSUQgR0lWRU4iLAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgIyB1cGRhdGUgdGhlIGl0ZW0KICAgICAgICBteSAkVXBkYXRlU3VjZXNzID0gJEdlbmVyYWxDYXRhbG9nT2JqZWN0LT5JdGVtVXBkYXRlKAogICAgICAgICAgICAleyAkSXRlbS0+e1VwZGF0ZX0gfSwKICAgICAgICAgICAgSXRlbUlEID0+ICRMYXN0QWRkZWRJdGVtSUQsCiAgICAgICAgKTsKCiAgICAgICAgIyBjaGVjayBpZiBpdGVtIHdhcyB1cGRhdGVkIHN1Y2Nlc3NmdWxseSBvciBub3QKICAgICAgICBpZiAoICRJdGVtLT57VXBkYXRlR2V0fSApIHsKICAgICAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICAgICAkVXBkYXRlU3VjZXNzLAogICAgICAgICAgICAgICAgIlRlc3QgJFRlc3RDb3VudDogSXRlbVVwZGF0ZSgpIC0gSXRlbUtleTogJExhc3RBZGRlZEl0ZW1JRCIsCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICAkU2VsZi0+RmFsc2UoCiAgICAgICAgICAgICAgICAkVXBkYXRlU3VjZXNzLAogICAgICAgICAgICAgICAgIlRlc3QgJFRlc3RDb3VudDogSXRlbVVwZGF0ZSgpIiwKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgICMgZ2V0IGl0ZW0gZGF0YSB0byBjaGVjayB0aGUgdmFsdWVzIGFmdGVyIHRoZSB1cGRhdGUKICAgICAgICBteSAkSXRlbUdldDIgPSAkR2VuZXJhbENhdGFsb2dPYmplY3QtPkl0ZW1HZXQoCiAgICAgICAgICAgIEl0ZW1JRCA9PiAkTGFzdEFkZGVkSXRlbUlELAogICAgICAgICAgICBVc2VySUQgPT4gJEl0ZW0tPntVcGRhdGV9LT57VXNlcklEfSwKICAgICAgICApOwoKICAgICAgICAjIGNoZWNrIGl0ZW0gZGF0YSBhZnRlciB1cGRhdGUKICAgICAgICBmb3IgbXkgJEl0ZW1BdHRyaWJ1dGUgKCBzb3J0IGtleXMgJXsgJEl0ZW0tPntVcGRhdGVHZXR9IH0gKSB7CiAgICAgICAgICAgICRTZWxmLT5JcygKICAgICAgICAgICAgICAgICRJdGVtR2V0Mi0+eyRJdGVtQXR0cmlidXRlfSwKICAgICAgICAgICAgICAgICRJdGVtLT57VXBkYXRlR2V0fS0+eyRJdGVtQXR0cmlidXRlfSwKICAgICAgICAgICAgICAgICJUZXN0ICRUZXN0Q291bnQ6IEl0ZW1HZXQoKSAtICRJdGVtQXR0cmlidXRlIiwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICB9CgogICAgaWYgKCAkSXRlbS0+e1ByZWZlcmVuY2VzU2V0fSApIHsKCiAgICAgICAgZm9yIG15ICRLZXkgKCBzb3J0IGtleXMgJXsgJEl0ZW0tPntQcmVmZXJlbmNlc1NldH0gfSApIHsKCiAgICAgICAgICAgICMgc2V0IHByZWZlcmVuY2VzCiAgICAgICAgICAgIG15ICRTdWNjZXNzID0gJEdlbmVyYWxDYXRhbG9nT2JqZWN0LT5HZW5lcmFsQ2F0YWxvZ1ByZWZlcmVuY2VzU2V0KAogICAgICAgICAgICAgICAgS2V5ICAgID0+ICRLZXksCiAgICAgICAgICAgICAgICBWYWx1ZSAgPT4gJEl0ZW0tPntQcmVmZXJlbmNlc1NldH0tPnskS2V5fSwKICAgICAgICAgICAgICAgIEl0ZW1JRCA9PiAkTGFzdEFkZGVkSXRlbUlELAogICAgICAgICAgICApOwoKICAgICAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICAgICAkU3VjY2VzcywKICAgICAgICAgICAgICAgICJUZXN0ICRUZXN0Q291bnQ6IFByZWZlcmVuY2VzU2V0KCkgLSAkS2V5IiwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICB9CgogICAgIyBjaGVjayBwcmVmZXJlbmNlcwogICAgaWYgKCAkSXRlbS0+e1ByZWZlcmVuY2VzR2V0fSApIHsKICAgICAgICBteSAlUHJlZmVyZW5jZXMgPSAkR2VuZXJhbENhdGFsb2dPYmplY3QtPkdlbmVyYWxDYXRhbG9nUHJlZmVyZW5jZXNHZXQoCiAgICAgICAgICAgIEl0ZW1JRCA9PiAkTGFzdEFkZGVkSXRlbUlELAogICAgICAgICk7CgogICAgICAgIGZvciBteSAkS2V5ICggc29ydCBrZXlzICV7ICRJdGVtLT57UHJlZmVyZW5jZXNHZXR9IH0gKSB7CiAgICAgICAgICAgIGlmICggJEl0ZW0tPntQcmVmZXJlbmNlc0dldH0tPnskS2V5fSBlcSAkUHJlZmVyZW5jZXN7JEtleX0gKSB7CiAgICAgICAgICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgICAgICAgICAxLAogICAgICAgICAgICAgICAgICAgICJUZXN0ICRUZXN0Q291bnQ6IFByZWZlcmVuY2VzR2V0KCkgLSAkS2V5IiwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgICAgICAgICAwLAogICAgICAgICAgICAgICAgICAgICJUZXN0ICRUZXN0Q291bnQ6IFByZWZlcmVuY2VzR2V0KCkgLSAkS2V5IiwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgJFRlc3RDb3VudCsrOwp9CgojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiMgbWFrZSBwcmVwYXJhdGlvbnMgZm9yIGxhdGVyIHRlc3RzCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKCiMgY3JlYXRlIG5lZWRlZCBhcnJheXMKbXkgJUV4aXN0aW5nQ2xhc3Nlc1RtcDsKSVRFTToKZm9yIG15ICRJdGVtICggQHskSXRlbURhdGF9ICkgewogICAgbmV4dCBJVEVNIGlmICEkSXRlbS0+e0FkZEdldH0tPntDbGFzc307CiAgICAkRXhpc3RpbmdDbGFzc2VzVG1weyAkSXRlbS0+e0FkZEdldH0tPntDbGFzc30gfSA9IDE7Cn0KbXkgQEV4aXN0aW5nQ2xhc3NlcyA9IHNvcnQga2V5cyAlRXhpc3RpbmdDbGFzc2VzVG1wOwoKbXkgJUV4aXN0aW5nRnVuY3Rpb25hbGl0aWVzVG1wOwpJVEVNOgpmb3IgbXkgJEl0ZW0gKCBAeyRJdGVtRGF0YX0gKSB7CiAgICAkSXRlbS0+e1VwZGF0ZUdldH0tPntGdW5jdGlvbmFsaXR5fSB8fD0gJyc7CiAgICAkRXhpc3RpbmdGdW5jdGlvbmFsaXRpZXNUbXB7ICRJdGVtLT57VXBkYXRlR2V0fS0+e0Z1bmN0aW9uYWxpdHl9IH0gPSAxOwp9Cm15IEBFeGlzdGluZ0Z1bmN0aW9uYWxpdGllcyA9IHNvcnQga2V5cyAlRXhpc3RpbmdGdW5jdGlvbmFsaXRpZXNUbXA7CgpteSBATm9uRXhpc3RpbmdDbGFzc2VzID0gKCAnVW5pdFRlc3Q6Ok5vRXhpc3RpbmdDbGFzczEnLCAnVW5pdFRlc3Q6Ok5vRXhpc3RpbmdDbGFzczInICk7CgojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiMgQ2xhc3NMaXN0IHRlc3QgMQojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCgpteSAkQ2xhc3NMaXN0MSA9ICRHZW5lcmFsQ2F0YWxvZ09iamVjdC0+Q2xhc3NMaXN0KCk7Cgpmb3IgbXkgJENsYXNzIChARXhpc3RpbmdDbGFzc2VzKSB7CgogICAgbXkgJENsYXNzQ291bnQgPSAwOwogICAgaWYgKCAkQ2xhc3NMaXN0MSAmJiByZWYgJENsYXNzTGlzdDEgZXEgJ0FSUkFZJyApIHsKICAgICAgICAkQ2xhc3NDb3VudCA9IGdyZXAgeyAkXyBlcSAkQ2xhc3MgfSBAeyRDbGFzc0xpc3QxfTsKICAgIH0KCiAgICAkU2VsZi0+SXMoCiAgICAgICAgJENsYXNzQ291bnQsCiAgICAgICAgMSwKICAgICAgICAiVGVzdCAkVGVzdENvdW50OiBDbGFzc0xpc3QoKSAtICRDbGFzcyBsaXN0ZWQiLAogICAgKTsKCiAgICAkVGVzdENvdW50Kys7Cn0KCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKIyBJdGVtTGlzdCB0ZXN0IDEKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwoKZm9yIG15ICRDbGFzcyAoQE5vbkV4aXN0aW5nQ2xhc3NlcykgewoKICAgIG15ICRJdGVtTGlzdCA9ICRHZW5lcmFsQ2F0YWxvZ09iamVjdC0+SXRlbUxpc3QoCiAgICAgICAgQ2xhc3MgPT4gJENsYXNzLAogICAgICAgIFZhbGlkID0+IDAsCiAgICApOwoKICAgICRTZWxmLT5GYWxzZSgKICAgICAgICAkSXRlbUxpc3QsCiAgICAgICAgIlRlc3QgJFRlc3RDb3VudDogSXRlbUxpc3QoKSAtICRDbGFzcyBub3QgZXhpc3RzIiwKICAgICk7CgogICAgJFRlc3RDb3VudCsrOwp9CgojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiMgSXRlbUxpc3QgdGVzdCAyCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKCmZvciBteSAkQ2xhc3MgKEBFeGlzdGluZ0NsYXNzZXMpIHsKCiAgICBteSAkSXRlbUxpc3QgPSAkR2VuZXJhbENhdGFsb2dPYmplY3QtPkl0ZW1MaXN0KAogICAgICAgIENsYXNzID0+ICRDbGFzcywKICAgICAgICBWYWxpZCA9PiAwLAogICAgKTsKCiAgICBteSAkTGlzdENvdW50ID0gJ05VTEwnOwogICAgaWYgKCBkZWZpbmVkICRJdGVtTGlzdCAmJiByZWYgJEl0ZW1MaXN0IGVxICdIQVNIJyApIHsKICAgICAgICAkTGlzdENvdW50ID0ga2V5cyAleyRJdGVtTGlzdH07CiAgICB9CgogICAgJFNlbGYtPklzKAogICAgICAgICRMaXN0Q291bnQsCiAgICAgICAgJEFkZGVkSXRlbUNvdW50ZXJ7JENsYXNzfSwKICAgICAgICAiVGVzdCAkVGVzdENvdW50OiBJdGVtTGlzdCgpIC0gJENsYXNzIGNvcnJlY3QgbnVtYmVyIG9mIGl0ZW1zIiwKICAgICk7CgogICAgJFRlc3RDb3VudCsrOwp9CgojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiMgSXRlbUxpc3QgdGVzdCAzIC0gSXRlbSBMaXN0IHdpdGggcHJlZmVyZW5jZXMgKHNpbmdsZSBoYXNoIGVudHJ5KQojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCgp7CgogICAgbXkgJENsYXNzICAgID0gJ1VuaXRUZXN0OjpUZXN0Q2xhc3MnIC4gJENsYXNzUmFuZFswXTsKICAgIG15ICRJdGVtTGlzdCA9ICRHZW5lcmFsQ2F0YWxvZ09iamVjdC0+SXRlbUxpc3QoCiAgICAgICAgQ2xhc3MgICAgICAgPT4gJENsYXNzLAogICAgICAgIFZhbGlkICAgICAgID0+IDEsCiAgICAgICAgUHJlZmVyZW5jZXMgPT4gewogICAgICAgICAgICBIZWxsbyA9PiAnV29ybGQnLAogICAgICAgIH0sCiAgICApOwoKICAgIG15ICRMaXN0Q291bnQgPSAnTlVMTCc7CiAgICBpZiAoIGRlZmluZWQgJEl0ZW1MaXN0ICYmIHJlZiAkSXRlbUxpc3QgZXEgJ0hBU0gnICkgewogICAgICAgICRMaXN0Q291bnQgPSBrZXlzICV7JEl0ZW1MaXN0fTsKICAgIH0KCiAgICAkU2VsZi0+SXMoCiAgICAgICAgJExpc3RDb3VudCwKICAgICAgICAxLAogICAgICAgICJUZXN0ICRUZXN0Q291bnQ6IEl0ZW1MaXN0KCkgcHJlZmVyZW5jZXMgKHNpbmdsZSBoYXNoIGVudHJ5KSAtICRDbGFzcyBjb3JyZWN0IG51bWJlciBvZiBpdGVtcyIsCiAgICApOwoKICAgICRUZXN0Q291bnQrKzsKfQoKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwojIEl0ZW1MaXN0IHRlc3QgNCAtIEl0ZW0gTGlzdCB3aXRoIHByZWZlcmVuY2VzIChhcnJheSkKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwoKewoKICAgIG15ICRDbGFzcyAgICA9ICdVbml0VGVzdDo6VGVzdENsYXNzJyAuICRDbGFzc1JhbmRbMF07CiAgICBteSAkSXRlbUxpc3QgPSAkR2VuZXJhbENhdGFsb2dPYmplY3QtPkl0ZW1MaXN0KAogICAgICAgIENsYXNzICAgICAgID0+ICRDbGFzcywKICAgICAgICBWYWxpZCAgICAgICA9PiAxLAogICAgICAgIFByZWZlcmVuY2VzID0+IHsKICAgICAgICAgICAgQ29sb3IgPT4gWyAnUmVkJywgJ0JsdWUnIF0sCiAgICAgICAgfSwKICAgICk7CgogICAgbXkgJExpc3RDb3VudCA9ICdOVUxMJzsKICAgIGlmICggZGVmaW5lZCAkSXRlbUxpc3QgJiYgcmVmICRJdGVtTGlzdCBlcSAnSEFTSCcgKSB7CiAgICAgICAgJExpc3RDb3VudCA9IGtleXMgJXskSXRlbUxpc3R9OwogICAgfQoKICAgICRTZWxmLT5JcygKICAgICAgICAkTGlzdENvdW50LAogICAgICAgIDIsCiAgICAgICAgIlRlc3QgJFRlc3RDb3VudDogSXRlbUxpc3QoKSBwcmVmZXJlbmNlcyAoYXJyYXkpIC0gJENsYXNzIGNvcnJlY3QgbnVtYmVyIG9mIGl0ZW1zIiwKICAgICk7CgogICAgJFRlc3RDb3VudCsrOwp9CgojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiMgUHJlZmVyZW5jZXMgdGVzdCAxCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKZm9yIG15ICRDbGFzcyAoQEV4aXN0aW5nQ2xhc3NlcykgewoKICAgIG15ICRJdGVtSUQgPSAkR2VuZXJhbENhdGFsb2dPYmplY3QtPkl0ZW1BZGQoCiAgICAgICAgQ2xhc3MgICA9PiAkQ2xhc3MsCiAgICAgICAgTmFtZSAgICA9PiAnSXRlbSBQcmVmZXJlbmNlcycsCiAgICAgICAgVmFsaWRJRCA9PiAxLAogICAgICAgIFVzZXJJRCAgPT4gMSwKICAgICk7CgogICAgJEdlbmVyYWxDYXRhbG9nT2JqZWN0LT5HZW5lcmFsQ2F0YWxvZ1ByZWZlcmVuY2VzU2V0KAogICAgICAgIEl0ZW1JRCA9PiAkSXRlbUlELAogICAgICAgIEtleSAgICA9PiAnVW5pdFRlc3RQcmVmJywKICAgICAgICBWYWx1ZSAgPT4gJzEnLAogICAgKTsKCiAgICBteSAkSXRlbUxpc3QgPSAkR2VuZXJhbENhdGFsb2dPYmplY3QtPkl0ZW1MaXN0KAogICAgICAgIENsYXNzICAgICAgID0+ICRDbGFzcywKICAgICAgICBQcmVmZXJlbmNlcyA9PiB7CiAgICAgICAgICAgIFVuaXRUZXN0UHJlZiA9PiAxLAogICAgICAgIH0sCiAgICApOwoKICAgICRTZWxmLT5JcygKICAgICAgICAkSXRlbUxpc3QtPnskSXRlbUlEfSwKICAgICAgICAnSXRlbSBQcmVmZXJlbmNlcycsCiAgICAgICAgIlRlc3QgJFRlc3RDb3VudDogSXRlbUxpc3QoKSAtIENsYXNzICRDbGFzcyBQcmVmZXJlbmNlcyBtYXRjaCIsCiAgICApOwoKICAgICRHZW5lcmFsQ2F0YWxvZ09iamVjdC0+R2VuZXJhbENhdGFsb2dQcmVmZXJlbmNlc1NldCgKICAgICAgICBJdGVtSUQgPT4gJEl0ZW1JRCwKICAgICAgICBLZXkgICAgPT4gJ1VuaXRUZXN0UHJlZicsCiAgICAgICAgVmFsdWUgID0+ICcyJywKICAgICk7CgogICAgJEl0ZW1MaXN0ID0gJEdlbmVyYWxDYXRhbG9nT2JqZWN0LT5JdGVtTGlzdCgKICAgICAgICBDbGFzcyAgICAgICA9PiAkQ2xhc3MsCiAgICAgICAgUHJlZmVyZW5jZXMgPT4gewogICAgICAgICAgICBVbml0VGVzdFByZWYgPT4gMSwKICAgICAgICB9LAogICAgKTsKCiAgICAkU2VsZi0+RmFsc2UoCiAgICAgICAgJEl0ZW1MaXN0LAogICAgICAgICJUZXN0ICRUZXN0Q291bnQ6IEl0ZW1MaXN0KCkgLSBDbGFzcyAkQ2xhc3MgUHJlZmVyZW5jZXMgbm90IG1hdGNoIGFmdGVyIFByZWZlcmVuY2VzU2V0IENoYW5nZSIKICAgICk7CgogICAgJEdlbmVyYWxDYXRhbG9nT2JqZWN0LT5JdGVtVXBkYXRlKAogICAgICAgIEl0ZW1JRCAgPT4gJEl0ZW1JRCwKICAgICAgICBOYW1lICAgID0+ICdJdGVtIFByZWZlcmVuY2VzJywKICAgICAgICBWYWxpZElEID0+IDIsCiAgICAgICAgVXNlcklEICA9PiAxLAogICAgKTsKCiAgICAkVGVzdENvdW50Kys7Cn0KCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKIyBQcmVmZXJlbmNlcyB0ZXN0IDIKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwoKPXBvZAoKbXkgJUZ1bmN0aW9uYWxpdHlMaXN0MTsKbWFwIHsgJEZ1bmN0aW9uYWxpdHlMaXN0MXskX30gPSAxIH0gQEV4aXN0aW5nRnVuY3Rpb25hbGl0aWVzOwoKZm9yIG15ICRDbGFzcyAoQEV4aXN0aW5nQ2xhc3NlcykgewoKICAgIG15ICRGdW5jdGlvbmFsaXR5TGlzdCA9ICRHZW5lcmFsQ2F0YWxvZ09iamVjdC0+RnVuY3Rpb25hbGl0eUxpc3QoCiAgICAgICAgQ2xhc3MgPT4gJENsYXNzLAogICAgKTsKCiAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAkRnVuY3Rpb25hbGl0eUxpc3QgJiYgcmVmICRGdW5jdGlvbmFsaXR5TGlzdCBlcSAnQVJSQVknLAogICAgICAgICJUZXN0ICRUZXN0Q291bnQ6IEZ1bmN0aW9uYWxpdHlMaXN0KCkgLSByZXR1cm4gYSBhcnJheSByZWZlcmVuY2UiLAogICAgKTsKCiAgICBmb3IgbXkgJEZ1bmN0aW9uYWxpdHkgKCBAeyRGdW5jdGlvbmFsaXR5TGlzdH0gKSB7CiAgICAgICAgZGVsZXRlICRGdW5jdGlvbmFsaXR5TGlzdDF7JEZ1bmN0aW9uYWxpdHl9OwogICAgfQoKICAgICRUZXN0Q291bnQrKzsKfQoKJFNlbGYtPlRydWUoCiAgICAha2V5cyAlRnVuY3Rpb25hbGl0eUxpc3QxLAogICAgIlRlc3QgJFRlc3RDb3VudDogRnVuY3Rpb25hbGl0eUxpc3QoKSIsCik7CgokVGVzdENvdW50Kys7Cgo9Y3V0CgojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiMgQ2xhc3NSZW5hbWUgdGVzdCAxIChjaGVjayBub3JtYWwgcmVuYW1lKQojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCgpDTEFTUzoKZm9yIG15ICRDbGFzcyAoQEV4aXN0aW5nQ2xhc3NlcykgewoKICAgIG15ICRPbGRJdGVtTGlzdCA9ICRHZW5lcmFsQ2F0YWxvZ09iamVjdC0+SXRlbUxpc3QoCiAgICAgICAgQ2xhc3MgPT4gJENsYXNzLAogICAgICAgIFZhbGlkID0+IDAsCiAgICApOwoKICAgIG15ICRTdWNjZXNzID0gJEdlbmVyYWxDYXRhbG9nT2JqZWN0LT5DbGFzc1JlbmFtZSgKICAgICAgICBDbGFzc09sZCA9PiAkQ2xhc3MsCiAgICAgICAgQ2xhc3NOZXcgPT4gJENsYXNzIC4gJ1JFTkFNRTEnLAogICAgKTsKCiAgICBpZiAoICEkU3VjY2VzcyApIHsKICAgICAgICAkU2VsZi0+RmFsc2UoCiAgICAgICAgICAgIDEsCiAgICAgICAgICAgICJUZXN0ICRUZXN0Q291bnQ6IENsYXNzUmVuYW1lKCkgLSBSZW5hbWUgZmFpbGVkIiwKICAgICAgICApOwogICAgICAgIG5leHQgQ0xBU1M7CiAgICB9CgogICAgbXkgJE5ld0l0ZW1MaXN0ID0gJEdlbmVyYWxDYXRhbG9nT2JqZWN0LT5JdGVtTGlzdCgKICAgICAgICBDbGFzcyA9PiAkQ2xhc3MgLiAnUkVOQU1FMScsCiAgICAgICAgVmFsaWQgPT4gMCwKICAgICk7CgogICAgaWYgKAogICAgICAgICEkT2xkSXRlbUxpc3QKICAgICAgICB8fCAhJE5ld0l0ZW1MaXN0CiAgICAgICAgfHwgcmVmICRPbGRJdGVtTGlzdCBuZSAnSEFTSCcKICAgICAgICB8fCByZWYgJE5ld0l0ZW1MaXN0IG5lICdIQVNIJwogICAgICAgICkKICAgIHsKICAgICAgICAkU2VsZi0+RmFsc2UoCiAgICAgICAgICAgIDEsCiAgICAgICAgICAgICJUZXN0ICRUZXN0Q291bnQ6IENsYXNzUmVuYW1lKCkgLSBJdGVtTGlzdCBmYWlsZWQiLAogICAgICAgICk7CiAgICAgICAgbmV4dCBDTEFTUzsKICAgIH0KCiAgICBPTERLRVk6CiAgICBmb3IgbXkgJE9sZEtleSAoIHNvcnQga2V5cyAleyRPbGRJdGVtTGlzdH0gKSB7CgogICAgICAgIGlmICggIWV4aXN0cyAkTmV3SXRlbUxpc3QtPnskT2xkS2V5fSApIHsKICAgICAgICAgICAgJE5ld0l0ZW1MaXN0LT57RmFpbGVkRHVtbXl9ID0gMTsKICAgICAgICAgICAgbmV4dCBPTERLRVk7CiAgICAgICAgfQoKICAgICAgICBuZXh0IE9MREtFWSBpZiAkT2xkSXRlbUxpc3QtPnskT2xkS2V5fSBuZSAkTmV3SXRlbUxpc3QtPnskT2xkS2V5fTsKCiAgICAgICAgZGVsZXRlICROZXdJdGVtTGlzdC0+eyRPbGRLZXl9OwogICAgfQoKICAgICRTZWxmLT5UcnVlKAogICAgICAgICFrZXlzICV7JE5ld0l0ZW1MaXN0fSwKICAgICAgICAiVGVzdCAkVGVzdENvdW50OiBDbGFzc1JlbmFtZSgpIiwKICAgICk7CgogICAgJFRlc3RDb3VudCsrOwp9CgojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiMgQ2xhc3NSZW5hbWUgdGVzdCAyIChjaGVjayBzdHJpbmcgY2xlYW5lciBmdW5jdGlvbikKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwoKQ0xBU1M6CmZvciBteSAkQ2xhc3MgKEBFeGlzdGluZ0NsYXNzZXMpIHsKCiAgICBteSAkT2xkSXRlbUxpc3QgPSAkR2VuZXJhbENhdGFsb2dPYmplY3QtPkl0ZW1MaXN0KAogICAgICAgIENsYXNzID0+ICRDbGFzcyAuICdSRU5BTUUxJywKICAgICAgICBWYWxpZCA9PiAwLAogICAgKTsKCiAgICBteSAkU3VjY2VzcyA9ICRHZW5lcmFsQ2F0YWxvZ09iamVjdC0+Q2xhc3NSZW5hbWUoCiAgICAgICAgQ2xhc3NPbGQgPT4gJENsYXNzIC4gJ1JFTkFNRTEnLAogICAgICAgIENsYXNzTmV3ID0+ICcgJyAuICRDbGFzcyAuICJSRSBOQSBNRSAyIFxuIFxyIFx0ICIsCiAgICApOwoKICAgIGlmICggISRTdWNjZXNzICkgewogICAgICAgICRTZWxmLT5GYWxzZSgKICAgICAgICAgICAgMSwKICAgICAgICAgICAgIlRlc3QgJFRlc3RDb3VudDogQ2xhc3NSZW5hbWUoKSAtIFJlbmFtZSBmYWlsZWQiLAogICAgICAgICk7CiAgICAgICAgbmV4dCBDTEFTUzsKICAgIH0KCiAgICBteSAkTmV3SXRlbUxpc3QgPSAkR2VuZXJhbENhdGFsb2dPYmplY3QtPkl0ZW1MaXN0KAogICAgICAgIENsYXNzID0+ICRDbGFzcyAuICdSRU5BTUUyJywKICAgICAgICBWYWxpZCA9PiAwLAogICAgKTsKCiAgICBpZiAoCiAgICAgICAgISRPbGRJdGVtTGlzdAogICAgICAgIHx8ICEkTmV3SXRlbUxpc3QKICAgICAgICB8fCByZWYgJE9sZEl0ZW1MaXN0IG5lICdIQVNIJwogICAgICAgIHx8IHJlZiAkTmV3SXRlbUxpc3QgbmUgJ0hBU0gnCiAgICAgICAgKQogICAgewogICAgICAgICRTZWxmLT5GYWxzZSgKICAgICAgICAgICAgMSwKICAgICAgICAgICAgIlRlc3QgJFRlc3RDb3VudDogQ2xhc3NSZW5hbWUoKSAtIEl0ZW1MaXN0IGZhaWxlZCIsCiAgICAgICAgKTsKICAgICAgICBuZXh0IENMQVNTOwogICAgfQoKICAgIE9MREtFWToKICAgIGZvciBteSAkT2xkS2V5ICggc29ydCBrZXlzICV7JE9sZEl0ZW1MaXN0fSApIHsKCiAgICAgICAgaWYgKCAhZXhpc3RzICROZXdJdGVtTGlzdC0+eyRPbGRLZXl9ICkgewogICAgICAgICAgICAkTmV3SXRlbUxpc3QtPntGYWlsZWREdW1teX0gPSAxOwogICAgICAgICAgICBuZXh0IE9MREtFWTsKICAgICAgICB9CgogICAgICAgIG5leHQgT0xES0VZIGlmICRPbGRJdGVtTGlzdC0+eyRPbGRLZXl9IG5lICROZXdJdGVtTGlzdC0+eyRPbGRLZXl9OwoKICAgICAgICBkZWxldGUgJE5ld0l0ZW1MaXN0LT57JE9sZEtleX07CiAgICB9CgogICAgJFNlbGYtPlRydWUoCiAgICAgICAgIWtleXMgJXskTmV3SXRlbUxpc3R9LAogICAgICAgICJUZXN0ICRUZXN0Q291bnQ6IENsYXNzUmVuYW1lKCkiLAogICAgKTsKCiAgICAkVGVzdENvdW50Kys7Cn0KCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKIyBDbGFzc1JlbmFtZSB0ZXN0IDIgKGlkZW50aWNhbCBuYW1lIHRlc3QpCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKCmZvciBteSAkQ2xhc3MgKEBFeGlzdGluZ0NsYXNzZXMpIHsKCiAgICBteSAkU3VjY2VzcyA9ICRHZW5lcmFsQ2F0YWxvZ09iamVjdC0+Q2xhc3NSZW5hbWUoCiAgICAgICAgQ2xhc3NPbGQgPT4gJENsYXNzIC4gJ1JFTkFNRTInLAogICAgICAgIENsYXNzTmV3ID0+ICRDbGFzcyAuICdSRU5BTUUyJywKICAgICk7CgogICAgJFNlbGYtPlRydWUoCiAgICAgICAgJFN1Y2Nlc3MsCiAgICAgICAgIlRlc3QgJFRlc3RDb3VudDogQ2xhc3NSZW5hbWUoKSAtIG9sZG5hbWUgYW5kIG5ld25hbWUgaWRlbnRpY2FsIiwKICAgICk7CgogICAgJFRlc3RDb3VudCsrOwp9CgojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiMgQ2xhc3NSZW5hbWUgdGVzdCAzIChuZXcgY2xhc3MgbmFtZSBhbHJlYWR5IGV4aXN0cykKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwoKJEdlbmVyYWxDYXRhbG9nT2JqZWN0LT5JdGVtQWRkKAogICAgQ2xhc3MgICAgICAgICA9PiAnVW5pdFRlc3Q6OlRlc3RDbGFzcycgLiAkQ2xhc3NSYW5kWzJdLAogICAgTmFtZSAgICAgICAgICA9PiAnRHVtbXknLAogICAgRnVuY3Rpb25hbGl0eSA9PiAnJywKICAgIFZhbGlkSUQgICAgICAgPT4gMSwKICAgIFVzZXJJRCAgICAgICAgPT4gMSwKKTsKCmZvciBteSAkQ2xhc3MgKEBFeGlzdGluZ0NsYXNzZXMpIHsKCiAgICBteSAkU3VjY2VzcyA9ICRHZW5lcmFsQ2F0YWxvZ09iamVjdC0+Q2xhc3NSZW5hbWUoCiAgICAgICAgQ2xhc3NPbGQgPT4gJENsYXNzIC4gJ1JFTkFNRTInLAogICAgICAgIENsYXNzTmV3ID0+ICdVbml0VGVzdDo6VGVzdENsYXNzJyAuICRDbGFzc1JhbmRbMl0sCiAgICApOwoKICAgICRTZWxmLT5GYWxzZSgKICAgICAgICAkU3VjY2VzcywKICAgICAgICAiVGVzdCAkVGVzdENvdW50OiBDbGFzc1JlbmFtZSgpIC0gbmV3IGNsYXNzIG5hbWUgYWxyZWFkeSBleGlzdHMiLAogICAgKTsKCiAgICAkVGVzdENvdW50Kys7Cn0KCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKIyBjbGVhbnVwCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKCiMgcmVzdG9yZSBvcmlnaW5hbCBnZW5lcmFsIGNhdGFsb2cgcGVybWlzc2lvbiBwcmVmZXJlbmNlcyBzZXR0aW5nCiRDb25maWdPYmplY3QtPlNldCgKICAgIEtleSAgID0+ICdHZW5lcmFsQ2F0YWxvZ1ByZWZlcmVuY2VzIyMjUGVybWlzc2lvbnMnLAog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Z0DHEEdB0+snd7lfPq9NpH/55K3+aAnpToJ2InbBnUOnf3Vad5r9uHyRSB5vXhwE+pOgY4ijoGf9L2nwgxoXOWtVrAT78okiBDkD2pXYkbUHSf+kipO8zof43OX8aOgY4hDo9A8ef+9KVcz41678F0AnzytR0OnSxFHJ6Xd0oZvTavfnQfsRf9bS/3/9z77+A2DdeCv3ceV0AAAAAElFTkSuQmCC
LyoqDQogKiBqc2NvbG9yLCBKYXZhU2NyaXB0IENvbG9yIFBpY2tlcg0KICoNCiAqIEB2ZXJzaW9uIDEuNC4xDQogKiBAbGljZW5zZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGh0dHA6Ly93d3cuZ251Lm9yZy9jb3B5bGVmdC9sZXNzZXIuaHRtbA0KICogQGF1dGhvciAgSmFuIE9kdmFya28sIGh0dHA6Ly9vZHZhcmtvLmN6DQogKiBAY3JlYXRlZCAyMDA4LTA2LTE1DQogKiBAdXBkYXRlZCAyMDEzLTA0LTA4DQogKiBAbGluayAgICBodHRwOi8vanNjb2xvci5jb20NCiAqLw0KDQoNCnZhciBqc2NvbG9yID0gew0KDQoNCglkaXIgOiAnJywgLy8gbG9jYXRpb24gb2YganNjb2xvciBkaXJlY3RvcnkgKGxlYXZlIGVtcHR5IHRvIGF1dG9kZXRlY3QpDQoJYmluZENsYXNzIDogJ2NvbG9yJywgLy8gY2xhc3MgbmFtZQ0KCWJpbmRpbmcgOiB0cnVlLCAvLyBhdXRvbWF0aWMgYmluZGluZyB2aWEgPGlucHV0IGNsYXNzPSIuLi4iPg0KCXByZWxvYWRpbmcgOiB0cnVlLCAvLyB1c2UgaW1hZ2UgcHJlbG9hZGluZz8NCg0KDQoJaW5zdGFsbCA6IGZ1bmN0aW9uKCkgew0KCQlqc2NvbG9yLmFkZEV2ZW50KHdpbmRvdywgJ2xvYWQnLCBqc2NvbG9yLmluaXQpOw0KCX0sDQoNCg0KCWluaXQgOiBmdW5jdGlvbigpIHsNCgkJaWYoanNjb2xvci5iaW5kaW5nKSB7DQoJCQlqc2NvbG9yLmJpbmQoKTsNCgkJfQ0KCQlpZihqc2NvbG9yLnByZWxvYWRpbmcpIHsNCgkJCWpzY29sb3IucHJlbG9hZCgpOw0KCQl9DQoJfSwNCg0KDQoJZ2V0RGlyIDogZnVuY3Rpb24oKSB7DQoJCWlmKCFqc2NvbG9yLmRpcikgew0KCQkJdmFyIGRldGVjdGVkID0ganNjb2xvci5kZXRlY3REaXIoKTsNCgkJCWpzY29sb3IuZGlyID0gZGV0ZWN0ZWQhPT1mYWxzZSA/IGRldGVjdGVkIDogJ2pzY29sb3IvJzsNCgkJfQ0KCQlyZXR1cm4ganNjb2xvci5kaXI7DQoJfSwNCg0KDQoJZGV0ZWN0RGlyIDogZnVuY3Rpb24oKSB7DQoJCXZhciBiYXNlID0gbG9jYXRpb24uaHJlZjsNCg0KCQl2YXIgZSA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdiYXNlJyk7DQoJCWZvcih2YXIgaT0wOyBpPGUubGVuZ3RoOyBpKz0xKSB7DQoJCQlpZihlW2ldLmhyZWYpIHsgYmFzZSA9IGVbaV0uaHJlZjsgfQ0KCQl9DQoNCgkJdmFyIGUgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnc2NyaXB0Jyk7DQoJCWZvcih2YXIgaT0wOyBpPGUubGVuZ3RoOyBpKz0xKSB7DQoJCQlpZihlW2ldLnNyYyAmJiAvKF58XC8panNjb2xvclwuanMoWz8jXS4qKT8kL2kudGVzdChlW2ldLnNyYykpIHsNCgkJCQl2YXIgc3JjID0gbmV3IGpzY29sb3IuVVJJKGVbaV0uc3JjKTsNCgkJCQl2YXIgc3JjQWJzID0gc3JjLnRvQWJzb2x1dGUoYmFzZSk7DQoJCQkJc3JjQWJzLnBhdGggPSBzcmNBYnMucGF0aC5yZXBsYWNlKC9bXlwvXSskLywgJycpOyAvLyByZW1vdmUgZmlsZW5hbWUNCgkJCQlzcmNBYnMucXVlcnkgPSBudWxsOw0KCQkJCXNyY0Ficy5mcmFnbWVudCA9IG51bGw7DQoJCQkJcmV0dXJuIHNyY0Ficy50b1N0cmluZygpOw0KCQkJfQ0KCQl9DQoJCXJldHVybiBmYWxzZTsNCgl9LA0KDQoNCgliaW5kIDogZnVuY3Rpb24oKSB7DQoJCXZhciBtYXRjaENsYXNzID0gbmV3IFJlZ0V4cCgnKF58XFxzKSgnK2pzY29sb3IuYmluZENsYXNzKycpXFxzKihcXHtbXn1dKlxcfSk/JywgJ2knKTsNCgkJdmFyIGUgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaW5wdXQnKTsNCgkJZm9yKHZhciBpPTA7IGk8ZS5sZW5ndGg7IGkrPTEpIHsNCgkJCXZhciBtOw0KCQkJaWYoIWVbaV0uY29sb3IgJiYgZVtpXS5jbGFzc05hbWUgJiYgKG0gPSBlW2ldLmNsYXNzTmFtZS5tYXRjaChtYXRjaENsYXNzKSkpIHsNCgkJCQl2YXIgcHJvcCA9IHt9Ow0KCQkJCWlmKG1bM10pIHsNCgkJCQkJdHJ5IHsNCgkJCQkJCXByb3AgPSAobmV3IEZ1bmN0aW9uICgncmV0dXJuICgnICsgbVszXSArICcpJykpKCk7DQoJCQkJCX0gY2F0Y2goZUludmFsaWRQcm9wKSB7fQ0KCQkJCX0NCgkJCQllW2ldLmNvbG9yID0gbmV3IGpzY29sb3IuY29sb3IoZVtpXSwgcHJvcCk7DQoJCQl9DQoJCX0NCgl9LA0KDQoNCglwcmVsb2FkIDogZnVuY3Rpb24oKSB7DQoJCWZvcih2YXIgZm4gaW4ganNjb2xvci5pbWdSZXF1aXJlKSB7DQoJCQlpZihqc2NvbG9yLmltZ1JlcXVpcmUuaGFzT3duUHJvcGVydHkoZm4pKSB7DQoJCQkJanNjb2xvci5sb2FkSW1hZ2UoZm4pOw0KCQkJfQ0KCQl9DQoJfSwNCg0KDQoJaW1hZ2VzIDogew0KCQlwYWQgOiBbIDE4MSwgMTAxIF0sDQoJCXNsZCA6IFsgMTYsIDEwMSBdLA0KCQljcm9zcyA6IFsgMTUsIDE1IF0sDQoJCWFycm93IDogWyA3LCAxMSBdDQoJfSwNCg0KDQoJaW1nUmVxdWlyZSA6IHt9LA0KCWltZ0xvYWRlZCA6IHt9LA0KDQoNCglyZXF1aXJlSW1hZ2UgOiBmdW5jdGlvbihmaWxlbmFtZSkgew0KCQlqc2NvbG9yLmltZ1JlcXVpcmVbZmlsZW5hbWVdID0gdHJ1ZTsNCgl9LA0KDQoNCglsb2FkSW1hZ2UgOiBmdW5jdGlvbihmaWxlbmFtZSkgew0KCQlpZighanNjb2xvci5pbWdMb2FkZWRbZmlsZW5hbWVdKSB7DQoJCQlqc2NvbG9yLmltZ0xvYWRlZFtmaWxlbmFtZV0gPSBuZXcgSW1hZ2UoKTsNCgkJCWpzY29sb3IuaW1nTG9hZGVkW2ZpbGVuYW1lXS5zcmMgPSBqc2NvbG9yLmdldERpcigpK2ZpbGVuYW1lOw0KCQl9DQoJfSwNCg0KDQoJZmV0Y2hFbGVtZW50IDogZnVuY3Rpb24obWl4ZWQpIHsNCgkJcmV0dXJuIHR5cGVvZiBtaXhlZCA9PT0gJ3N0cmluZycgPyBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChtaXhlZCkgOiBtaXhlZDsNCgl9LA0KDQoNCglhZGRFdmVudCA6IGZ1bmN0aW9uKGVsLCBldm50LCBmdW5jKSB7DQoJCWlmKGVsLmFkZEV2ZW50TGlzdGVuZXIpIHsNCgkJCWVsLmFkZEV2ZW50TGlzdGVuZXIoZXZudCwgZnVuYywgZmFsc2UpOw0KCQl9IGVsc2UgaWYoZWwuYXR0YWNoRXZlbnQpIHsNCgkJCWVsLmF0dGFjaEV2ZW50KCdvbicrZXZudCwgZnVuYyk7DQoJCX0NCgl9LA0KDQoNCglmaXJlRXZlbnQgOiBmdW5jdGlvbihlbCwgZXZudCkgew0KCQlpZighZWwpIHsNCgkJCXJldHVybjsNCgkJfQ0KCQlpZihkb2N1bWVudC5jcmVhdGVFdmVudCkgew0KCQkJdmFyIGV2ID0gZG9jdW1lbnQuY3JlYXRlRXZlbnQoJ0hUTUxFdmVudHMnKTsNCgkJCWV2LmluaXRFdmVudChldm50LCB0cnVlLCB0cnVlKTsNCgkJCWVsLmRpc3BhdGNoRXZlbnQoZXYpOw0KCQl9IGVsc2UgaWYoZG9jdW1lbnQuY3JlYXRlRXZlbnRPYmplY3QpIHsNCgkJCXZhciBldiA9IGRvY3VtZW50LmNyZWF0ZUV2ZW50T2JqZWN0KCk7DQoJCQllbC5maXJlRXZlbnQoJ29uJytldm50LCBldik7DQoJCX0gZWxzZSBpZihlbFsnb24nK2V2bnRdKSB7IC8vIGFsdGVybmF0aXZlbHkgdXNlIHRoZSB0cmFkaXRpb25hbCBldmVudCBtb2RlbCAoSUU1KQ0KCQkJZWxbJ29uJytldm50XSgpOw0KCQl9DQoJfSwNCg0KDQoJZ2V0RWxlbWVudFBvcyA6IGZ1bmN0aW9uKGUpIHsNCgkJdmFyIGUxPWUsIGUyPWU7DQoJCXZhciB4PTAsIHk9MDsNCgkJaWYoZTEub2Zmc2V0UGFyZW50KSB7DQoJCQlkbyB7DQoJCQkJeCArPSBlMS5vZmZzZXRMZWZ0Ow0KCQkJCXkgKz0gZTEub2Zmc2V0VG9wOw0KCQkJfSB3aGlsZShlMSA9IGUxLm9mZnNldFBhcmVudCk7DQoJCX0NCgkJd2hpbGUoKGUyID0gZTIucGFyZW50Tm9kZSkgJiYgZTIubm9kZU5hbWUudG9VcHBlckNhc2UoKSAhPT0gJ0JPRFknKSB7DQoJCQl4IC09IGUyLnNjcm9sbExlZnQ7DQoJCQl5IC09IGUyLnNjcm9sbFRvcDsNCgkJfQ0KCQlyZXR1cm4gW3gsIHldOw0KCX0sDQoNCg0KCWdldEVsZW1lbnRTaXplIDogZnVuY3Rpb24oZSkgew0KCQlyZXR1cm4gW2Uub2Zmc2V0V2lkdGgsIGUub2Zmc2V0SGVpZ2h0XTsNCgl9LA0KDQoNCglnZXRSZWxNb3VzZVBvcyA6IGZ1bmN0aW9uKGUpIHsNCgkJdmFyIHggPSAwLCB5ID0gMDsNCgkJaWYgKCFlKSB7IGUgPSB3aW5kb3cuZXZlbnQ7IH0NCgkJaWYgKHR5cGVvZiBlLm9mZnNldFggPT09ICdudW1iZXInKSB7DQoJCQl4ID0gZS5vZmZzZXRYOw0KCQkJeSA9IGUub2Zmc2V0WTsNCgkJfSBlbHNlIGlmICh0eXBlb2YgZS5sYXllclggPT09ICdudW1iZXInKSB7DQoJCQl4ID0gZS5sYXllclg7DQoJCQl5ID0gZS5sYXllclk7DQoJCX0NCgkJcmV0dXJuIHsgeDogeCwgeTogeSB9Ow0KCX0sDQoNCg0KCWdldFZpZXdQb3MgOiBmdW5jdGlvbigpIHsNCgkJaWYodHlwZW9mIHdpbmRvdy5wYWdlWU9mZnNldCA9PT0gJ251bWJlcicpIHsNCgkJCXJldHVybiBbd2luZG93LnBhZ2VYT2Zmc2V0LCB3aW5kb3cucGFnZVlPZmZzZXRdOw0KCQl9IGVsc2UgaWYoZG9jdW1lbnQuYm9keSAmJiAoZG9jdW1lbnQuYm9keS5zY3JvbGxMZWZ0IHx8IGRvY3VtZW50LmJvZHkuc2Nyb2xsVG9wKSkgew0KCQkJcmV0dXJuIFtkb2N1bWVudC5ib2R5LnNjcm9sbExlZnQsIGRvY3VtZW50LmJvZHkuc2Nyb2xsVG9wXTsNCgkJfSBlbHNlIGlmKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCAmJiAoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbExlZnQgfHwgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbFRvcCkpIHsNCgkJCXJldHVybiBbZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbExlZnQsIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxUb3BdOw0KCQl9IGVsc2Ugew0KCQkJcmV0dXJuIFswLCAwXTsNCgkJfQ0KCX0sDQoNCg0KCWdldFZpZXdTaXplIDogZnVuY3Rpb24oKSB7DQoJCWlmKHR5cGVvZiB3aW5kb3cuaW5uZXJXaWR0aCA9PT0gJ251bWJlcicpIHsNCgkJCXJldHVybiBbd2luZG93LmlubmVyV2lkdGgsIHdpbmRvdy5pbm5lckhlaWdodF07DQoJCX0gZWxzZSBpZihkb2N1bWVudC5ib2R5ICYmIChkb2N1bWVudC5ib2R5LmNsaWVudFdpZHRoIHx8IGRvY3VtZW50LmJvZHkuY2xpZW50SGVpZ2h0KSkgew0KCQkJcmV0dXJuIFtkb2N1bWVudC5ib2R5LmNsaWVudFdpZHRoLCBkb2N1bWVudC5ib2R5LmNsaWVudEhlaWdodF07DQoJCX0gZWxzZSBpZihkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQgJiYgKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aCB8fCBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0KSkgew0KCQkJcmV0dXJuIFtkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGgsIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHRdOw0KCQl9IGVsc2Ugew0KCQkJcmV0dXJuIFswLCAwXTsNCgkJfQ0KCX0sDQoNCg0KCVVSSSA6IGZ1bmN0aW9uKHVyaSkgeyAvLyBTZWUgUkZDMzk4Ng0KDQoJCXRoaXMuc2NoZW1lID0gbnVsbDsNCgkJdGhpcy5hdXRob3JpdHkgPSBudWxsOw0KCQl0aGlzLnBhdGggPSAnJzsNCgkJdGhpcy5xdWVyeSA9IG51bGw7DQoJCXRoaXMuZnJhZ21lbnQgPSBudWxsOw0KDQoJCXRoaXMucGFyc2UgPSBmdW5jdGlvbih1cmkpIHsNCgkJCXZhciBtID0gdXJpLm1hdGNoKC9eKChbQS1aYS16XVswLTlBLVphLXorLi1dKikoOikpPygoXC9cLykoW15cLz8jXSopKT8oW14/I10qKSgoXD8pKFteI10qKSk/KCgjKSguKikpPy8pOw0KCQkJdGhpcy5zY2hlbWUgPSBtWzNdID8gbVsyXSA6IG51bGw7DQoJCQl0aGlzLmF1dGhvcml0eSA9IG1bNV0gPyBtWzZdIDogbnVsbDsNCgkJCXRoaXMucGF0aCA9IG1bN107DQoJCQl0aGlzLnF1ZXJ5ID0gbVs5XSA/IG1bMTBdIDogbnVsbDsNCgkJCXRoaXMuZnJhZ21lbnQgPSBtWzEyXSA/IG1bMTNdIDogbnVsbDsNCgkJCXJldHVybiB0aGlzOw0KCQl9Ow0KDQoJCXRoaXMudG9TdHJpbmcgPSBmdW5jdGlvbigpIHsNCgkJCXZhciByZXN1bHQgPSAnJzsNCgkJCWlmKHRoaXMuc2NoZW1lICE9PSBudWxsKSB7IHJlc3VsdCA9IHJlc3VsdCArIHRoaXMuc2NoZW1lICsgJzonOyB9DQoJCQlpZih0aGlzLmF1dGhvcml0eSAhPT0gbnVsbCkgeyByZXN1bHQgPSByZXN1bHQgKyAnLy8nICsgdGhpcy5hdXRob3JpdHk7IH0NCgkJCWlmKHRoaXMucGF0aCAhPT0gbnVsbCkgeyByZXN1bHQgPSByZXN1bHQgKyB0aGlzLnBhdGg7IH0NCgkJCWlmKHRoaXMucXVlcnkgIT09IG51bGwpIHsgcmVzdWx0ID0gcmVzdWx0ICsgJz8nICsgdGhpcy5xdWVyeTsgfQ0KCQkJaWYodGhpcy5mcmFnbWVudCAhPT0gbnVsbCkgeyByZXN1bHQgPSByZXN1bHQgKyAnIycgKyB0aGlzLmZyYWdtZW50OyB9DQoJCQlyZXR1cm4gcmVzdWx0Ow0KCQl9Ow0KDQoJCXRoaXMudG9BYnNvbHV0ZSA9IGZ1bmN0aW9uKGJhc2UpIHsNCgkJCXZhciBiYXNlID0gbmV3IGpzY29sb3IuVVJJKGJhc2UpOw0KCQkJdmFyIHIgPSB0aGlzOw0KCQkJdmFyIHQgPSBuZXcganNjb2xvci5VUkk7DQoNCgkJCWlmKGJhc2Uuc2NoZW1lID09PSBudWxsKSB7IHJldHVybiBmYWxzZTsgfQ0KDQoJCQlpZihyLnNjaGVtZSAhPT0gbnVsbCAmJiByLnNjaGVtZS50b0xvd2VyQ2FzZSgpID09PSBiYXNlLnNjaGVtZS50b0xvd2VyQ2FzZSgpKSB7DQoJCQkJci5zY2hlbWUgPSBudWxsOw0KCQkJfQ0KDQoJCQlpZihyLnNjaGVtZSAhPT0gbnVsbCkgew0KCQkJCXQuc2NoZW1lID0gci5zY2hlbWU7DQoJCQkJdC5hdXRob3JpdHkgPSByLmF1dGhvcml0eTsNCgkJCQl0LnBhdGggPSByZW1vdmVEb3RTZWdtZW50cyhyLnBhdGgpOw0KCQkJCXQucXVlcnkgPSByLnF1ZXJ5Ow0KCQkJfSBlbHNlIHsNCgkJCQlpZihyLmF1dGhvcml0eSAhPT0gbnVsbCkgew0KCQkJCQl0LmF1dGhvcml0eSA9IHIuYXV0aG9yaXR5Ow0KCQkJCQl0LnBhdGggPSByZW1vdmVEb3RTZWdtZW50cyhyLnBhdGgpOw0KCQkJCQl0LnF1ZXJ5ID0gci5xdWVyeTsNCgkJCQl9IGVsc2Ugew0KCQkJCQlpZihyLnBhdGggPT09ICcnKSB7DQoJCQkJCQl0LnBhdGggPSBiYXNlLnBhdGg7DQoJCQkJCQlpZihyLnF1ZXJ5ICE9PSBudWxsKSB7DQoJCQkJCQkJdC5xdWVyeSA9IHIucXVlcnk7DQoJCQkJCQl9IGVsc2Ugew0KCQkJCQkJCXQucXVlcnkgPSBiYXNlLnF1ZXJ5Ow0KCQkJCQkJfQ0KCQkJCQl9IGVsc2Ugew0KCQkJCQkJaWYoci5wYXRoLnN1YnN0cigwLDEpID09PSAnLycpIHsNCgkJCQkJCQl0LnBhdGggPSByZW1vdmVEb3RTZWdtZW50cyhyLnBhdGgpOw0KCQkJCQkJfSBlbHNlIHsNCgkJCQkJCQlpZihiYXNlLmF1dGhvcml0eSAhPT0gbnVsbCAmJiBiYXNlLnBhdGggPT09ICcnKSB7DQoJCQkJCQkJCXQucGF0aCA9ICcvJytyLnBhdGg7DQoJCQkJCQkJfSBlbHNlIHsNCgkJCQkJCQkJdC5wYXRoID0gYmFzZS5wYXRoLnJlcGxhY2UoL1teXC9dKyQvLCcnKStyLnBhdGg7DQoJCQkJCQkJfQ0KCQkJCQkJCXQucGF0aCA9IHJlbW92ZURvdFNlZ21lbnRzKHQucGF0aCk7DQoJCQkJCQl9DQoJCQkJCQl0LnF1ZXJ5ID0gci5xdWVyeTsNCgkJCQkJfQ0KCQkJCQl0LmF1dGhvcml0eSA9IGJhc2UuYXV0aG9yaXR5Ow0KCQkJCX0NCgkJCQl0LnNjaGVtZSA9IGJhc2Uuc2NoZW1lOw0KCQkJfQ0KCQkJdC5mcmFnbWVudCA9IHIuZnJhZ21lbnQ7DQoNCgkJCXJldHVybiB0Ow0KCQl9Ow0KDQoJCWZ1bmN0aW9uIHJlbW92ZURvdFNlZ21lbnRzKHBhdGgpIHsNCgkJCXZhciBvdXQgPSAnJzsNCgkJCXdoaWxlKHBhdGgpIHsNCgkJCQlpZihwYXRoLnN1YnN0cigwLDMpPT09Jy4uLycgfHwgcGF0aC5zdWJzdHIoMCwyKT09PScuLycpIHsNCgkJCQkJcGF0aCA9IHBhdGgucmVwbGFjZSgvXlwuKy8sJycpLnN1YnN0cigxKTsNCgkJCQl9IGVsc2UgaWYocGF0aC5zdWJzdHIoMCwzKT09PScvLi8nIHx8IHBhdGg9PT0nLy4nKSB7DQoJCQkJCXBhdGggPSAnLycrcGF0aC5zdWJzdHIoMyk7DQoJCQkJfSBlbHNlIGlmKHBhdGguc3Vic3RyKDAsNCk9PT0nLy4uLycgfHwgcGF0aD09PScvLi4nKSB7DQoJCQkJCXBhdGggPSAnLycrcGF0aC5zdWJzdHIoNCk7DQoJCQkJCW91dCA9IG91dC5yZXBsYWNlKC9cLz9bXlwvXSokLywgJycpOw0KCQkJCX0gZWxzZSBpZihwYXRoPT09Jy4nIHx8IHBhdGg9PT0nLi4nKSB7DQoJCQkJCXBhdGggPSAnJzsNCgkJCQl9IGVsc2Ugew0KCQkJCQl2YXIgcm0gPSBwYXRoLm1hdGNoKC9eXC8/W15cL10qLylbMF07DQoJCQkJCXBhdGggPSBwYXRoLnN1YnN0cihybS5sZW5ndGgpOw0KCQkJCQlvdXQgPSBvdXQgKyBybTsNCgkJCQl9DQoJCQl9DQoJCQlyZXR1cm4gb3V0Ow0KCQl9DQoNCgkJaWYodXJpKSB7DQoJCQl0aGlzLnBhcnNlKHVyaSk7DQoJCX0NCg0KCX0sDQoNCg0KCS8vDQoJLy8gVXNhZ2UgZXhhbXBsZToNCgkvLyB2YXIgbXlDb2xvciA9IG5ldyBqc2NvbG9yLmNvbG9yKG15SW5wdXRFbGVtZW50KQ0KCS8vDQoNCgljb2xvciA6IGZ1bmN0aW9uKHRhcmdldCwgcHJvcCkgew0KDQoNCgkJdGhpcy5yZXF1aXJlZCA9IHRydWU7IC8vIHJlZnVzZSBlbXB0eSB2YWx1ZXM/DQoJCXRoaXMuYWRqdXN0ID0gdHJ1ZTsgLy8gYWRqdXN0IHZhbHVlIHRvIHVuaWZvcm0gbm90YXRpb24/DQoJCXRoaXMuaGFzaCA9IGZhbHNlOyAvLyBwcmVmaXggY29sb3Igd2l0aCAjIHN5bWJvbD8NCgkJdGhpcy5jYXBzID0gdHJ1ZTsgLy8gdXBwZXJjYXNlPw0KCQl0aGlzLnNsaWRlciA9IHRydWU7IC8vIHNob3cgdGhlIHZhbHVlL3NhdHVyYXRpb24gc2xpZGVyPw0KCQl0aGlzLnZhbHVlRWxlbWVudCA9IHRhcmdldDsgLy8gdmFsdWUgaG9sZGVyDQoJCXRoaXMuc3R5bGVFbGVtZW50ID0gdGFyZ2V0OyAvLyB3aGVyZSB0byByZWZsZWN0IGN1cnJlbnQgY29sb3INCgkJdGhpcy5vbkltbWVkaWF0ZUNoYW5nZSA9IG51bGw7IC8vIG9uY2hhbmdlIGNhbGxiYWNrIChjYW4gYmUgZWl0aGVyIHN0cmluZyBvciBmdW5jdGlvbikNCgkJdGhpcy5oc3YgPSBbMCwgMCwgMV07IC8vIHJlYWQtb25seSAgMC02LCAwLTEsIDAtMQ0KCQl0aGlzLnJnYiA9IFsxLCAxLCAxXTsgLy8gcmVhZC1vbmx5ICAwLTEsIDAtMSwgMC0xDQoJCXRoaXMubWluSCA9IDA7IC8vIHJlYWQtb25seSAgMC02DQoJCXRoaXMubWF4SCA9IDY7IC8vIHJlYWQtb25seSAgMC02DQoJCXRoaXMubWluUyA9IDA7IC8vIHJlYWQtb25seSAgMC0xDQoJCXRoaXMubWF4UyA9IDE7IC8vIHJlYWQtb25seSAgMC0xDQoJCXRoaXMubWluViA9IDA7IC8vIHJlYWQtb25seSAgMC0xDQoJCXRoaXMubWF4ViA9IDE7IC8vIHJlYWQtb25seSAgMC0xDQoNCgkJdGhpcy5waWNrZXJPbmZvY3VzID0gdHJ1ZTsgLy8gZGlzcGxheSBwaWNrZXIgb24gZm9jdXM/DQoJCXRoaXMucGlja2VyTW9kZSA9ICdIU1YnOyAvLyBIU1YgfCBIVlMNCgkJdGhpcy5waWNrZXJQb3NpdGlvbiA9ICdib3R0b20nOyAvLyBsZWZ0IHwgcmlnaHQgfCB0b3AgfCBib3R0b20NCgkJdGhpcy5waWNrZXJTbWFydFBvc2l0aW9uID0gdHJ1ZTsgLy8gYXV0b21hdGljYWxseSBhZGp1c3QgcGlja2VyIHBvc2l0aW9uIHdoZW4gbmVjZXNzYXJ5DQoJCXRoaXMucGlja2VyQnV0dG9uSGVpZ2h0ID0gMjA7IC8vIHB4DQoJCXRoaXMucGlja2VyQ2xvc2FibGUgPSBmYWxzZTsNCgkJdGhpcy5waWNrZXJDbG9zZVRleHQgPSAnQ2xvc2UnOw0KCQl0aGlzLnBpY2tlckJ1dHRvbkNvbG9yID0gJ0J1dHRvblRleHQnOyAvLyBweA0KCQl0aGlzLnBpY2tlckZhY2UgPSAxMDsgLy8gcHgNCgkJdGhpcy5waWNrZXJGYWNlQ29sb3IgPSAnVGhyZWVERmFjZSc7IC8vIENTUyBjb2xvcg0KCQl0aGlzLnBpY2tlckJvcmRlciA9IDE7IC8vIHB4DQoJCXRoaXMucGlja2VyQm9yZGVyQ29sb3IgPSAnVGhyZWVESGlnaGxpZ2h0IFRocmVlRFNoYWRvdyBUaHJlZURTaGFkb3cgVGhyZWVESGlnaGxpZ2h0JzsgLy8gQ1NTIGNvbG9yDQoJCXRoaXMucGlja2VySW5zZXQgPSAxOyAvLyBweA0KCQl0aGlzLnBpY2tlckluc2V0Q29sb3IgPSAnVGhyZWVEU2hhZG93IFRocmVlREhpZ2hsaWdodCBUaHJlZURIaWdobGlnaHQgVGhyZWVEU2hhZG93JzsgLy8gQ1NTIGNvbG9yDQoJCXRoaXMucGlja2VyWkluZGV4ID0gMTAwMDA7DQoNCg0KCQlmb3IodmFyIHAgaW4gcHJvcCkgew0KCQkJaWYocHJvcC5oYXNPd25Qcm9wZXJ0eShwKSkgew0KCQkJCXRoaXNbcF0gPSBwcm9wW3BdOw0KCQkJfQ0KCQl9DQoNCg0KCQl0aGlzLmhpZGVQaWNrZXIgPSBmdW5jdGlvbigpIHsNCgkJCWlmKGlzUGlja2VyT3duZXIoKSkgew0KCQkJCXJlbW92ZVBpY2tlcigpOw0KCQkJfQ0KCQl9Ow0KDQoNCgkJdGhpcy5zaG93UGlja2VyID0gZnVuY3Rpb24oKSB7DQoJCQlpZighaXNQaWNrZXJPd25lcigpKSB7DQoJCQkJdmFyIHRwID0ganNjb2xvci5nZXRFbGVtZW50UG9zKHRhcmdldCk7IC8vIHRhcmdldCBwb3MNCgkJCQl2YXIgdHMgPSBqc2NvbG9yLmdldEVsZW1lbnRTaXplKHRhcmdldCk7IC8vIHRhcmdldCBzaXplDQoJCQkJdmFyIHZwID0ganNjb2xvci5nZXRWaWV3UG9zKCk7IC8vIHZpZXcgcG9zDQoJCQkJdmFyIHZzID0ganNjb2xvci5nZXRWaWV3U2l6ZSgpOyAvLyB2aWV3IHNpemUNCgkJCQl2YXIgcHMgPSBnZXRQaWNrZXJEaW1zKHRoaXMpOyAvLyBwaWNrZXIgc2l6ZQ0KCQkJCXZhciBhLCBiLCBjOw0KCQkJCXN3aXRjaCh0aGlzLnBpY2tlclBvc2l0aW9uLnRvTG93ZXJDYXNlKCkpIHsNCgkJCQkJY2FzZSAnbGVmdCc6IGE9MTsgYj0wOyBjPS0xOyBicmVhazsNCgkJCQkJY2FzZSAncmlnaHQnOmE9MTsgYj0wOyBjPTE7IGJyZWFrOw0KCQkJCQljYXNlICd0b3AnOiAgYT0wOyBiPTE7IGM9LTE7IGJyZWFrOw0KCQkJCQlkZWZhdWx0OiAgICAgYT0wOyBiPTE7IGM9MTsgYnJlYWs7DQoJCQkJfQ0KCQkJCXZhciBsID0gKHRzW2JdK3BzW2JdKS8yOw0KDQoJCQkJLy8gcGlja2VyIHBvcw0KCQkJCWlmICghdGhpcy5waWNrZXJTbWFydFBvc2l0aW9uKSB7DQoJCQkJCXZhciBwcCA9IFsNCgkJCQkJCXRwW2FdLA0KCQkJCQkJdHBbYl0rdHNbYl0tbCtsKmMNCgkJCQkJXTsNCgkJCQl9IGVsc2Ugew0KCQkJCQl2YXIgcHAgPSBbDQoJCQkJCQktdnBbYV0rdHBbYV0rcHNbYV0gPiB2c1thXSA/DQoJCQkJCQkJKC12cFthXSt0cFthXSt0c1thXS8yID4gdnNbYV0vMiAmJiB0cFthXSt0c1thXS1wc1thXSA+PSAwID8gdHBbYV0rdHNbYV0tcHNbYV0gOiB0cFthXSkgOg0KCQkJCQkJCXRwW2FdLA0KCQkJCQkJLXZwW2JdK3RwW2JdK3RzW2JdK3BzW2JdLWwrbCpjID4gdnNbYl0gPw0KCQkJCQkJCSgtdnBbYl0rdHBbYl0rdHNbYl0vMiA+IHZzW2JdLzIgJiYgdHBbYl0rdHNbYl0tbC1sKmMgPj0gMCA/IHRwW2JdK3RzW2JdLWwtbCpjIDogdHBbYl0rdHNbYl0tbCtsKmMpIDoNCgkJCQkJCQkodHBbYl0rdHNbYl0tbCtsKmMgPj0gMCA/IHRwW2JdK3RzW2JdLWwrbCpjIDogdHBbYl0rdHNbYl0tbC1sKmMpDQoJCQkJCV07DQoJCQkJfQ0KCQkJCWRyYXdQaWNrZXIocHBbYV0sIHBwW2JdKTsNCgkJCX0NCgkJfTsNCg0KDQoJCXRoaXMuaW1wb3J0Q29sb3IgPSBmdW5jdGlvbigpIHsNCgkJCWlmKCF2YWx1ZUVsZW1lbnQpIHsNCgkJCQl0aGlzLmV4cG9ydENvbG9yKCk7DQoJCQl9IGVsc2Ugew0KCQkJCWlmKCF0aGlzLmFkanVzdCkgew0KCQkJCQlpZighdGhpcy5mcm9tU3RyaW5nKHZhbHVlRWxlbWVudC52YWx1ZSwgbGVhdmVWYWx1ZSkpIHsNCgkJCQkJCXN0eWxlRWxlbWVudC5zdHlsZS5iYWNrZ3JvdW5kSW1hZ2UgPSBzdHlsZUVsZW1lbnQuanNjU3R5bGUuYmFja2dyb3VuZEltYWdlOw0KCQkJCQkJc3R5bGVFbGVtZW50LnN0eWxlLmJhY2tncm91bmRDb2xvciA9IHN0eWxlRWxlbWVudC5qc2NTdHlsZS5iYWNrZ3JvdW5kQ29sb3I7DQoJCQkJCQlzdHlsZUVsZW1lbnQuc3R5bGUuY29sb3IgPSBzdHlsZUVsZW1lbnQuanNjU3R5bGUuY29sb3I7DQoJCQkJCQl0aGlzLmV4cG9ydENvbG9yKGxlYXZlVmFsdWUgfCBsZWF2ZVN0eWxlKTsNCgkJCQkJfQ0KCQkJCX0gZWxzZSBpZighdGhpcy5yZXF1aXJlZCAmJiAvXlxzKiQvLnRlc3QodmFsdWVFbGVtZW50LnZhbHVlKSkgew0KCQkJCQl2YWx1ZUVsZW1lbnQudmFsdWUgPSAnJzsNCgkJCQkJc3R5bGVFbGVtZW50LnN0eWxlLmJhY2tncm91bmRJbWFnZSA9IHN0eWxlRWxlbWVudC5qc2NTdHlsZS5iYWNrZ3JvdW5kSW1hZ2U7DQoJCQkJCXN0eWxlRWxlbWVudC5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSBzdHlsZUVsZW1lbnQuanNjU3R5bGUuYmFja2dyb3VuZENvbG9yOw0KCQkJCQlzdHlsZUVsZW1lbnQuc3R5bGUuY29sb3IgPSBzdHlsZUVsZW1lbnQuanNjU3R5bGUuY29sb3I7DQoJCQkJCXRoaXMuZXhwb3J0Q29sb3IobGVhdmVWYWx1ZSB8IGxlYXZlU3R5bGUpOw0KDQoJCQkJfSBlbHNlIGlmKHRoaXMuZnJvbVN0cmluZyh2YWx1ZUVsZW1lbnQudmFsdWUpKSB7DQoJCQkJCS8vIE9LDQoJCQkJfSBlbHNlIHsNCgkJCQkJdGhpcy5leHBvcnRDb2xvcigpOw0KCQkJCX0NCgkJCX0NCgkJfTsNCg0KDQoJCXRoaXMuZXhwb3J0Q29sb3IgPSBmdW5jdGlvbihmbGFncykgew0KCQkJaWYoIShmbGFncyAmIGxlYXZlVmFsdWUpICYmIHZhbHVlRWxlbWVudCkgew0KCQkJCXZhciB2YWx1ZSA9IHRoaXMudG9TdHJpbmcoKTsNCgkJCQlpZih0aGlzLmNhcHMpIHsgdmFsdWUgPSB2YWx1ZS50b1VwcGVyQ2FzZSgpOyB9DQoJCQkJaWYodGhpcy5oYXNoKSB7IHZhbHVlID0gJyMnK3ZhbHVlOyB9DQoJCQkJdmFsdWVFbGVtZW50LnZhbHVlID0gdmFsdWU7DQoJCQl9DQoJCQlpZighKGZsYWdzICYgbGVhdmVTdHlsZSkgJiYgc3R5bGVFbGVtZW50KSB7DQoJCQkJc3R5bGVFbGVtZW50LnN0eWxlLmJhY2tncm91bmRJbWFnZSA9ICJub25lIjsNCgkJCQlzdHlsZUVsZW1lbnQuc3R5bGUuYmFja2dyb3VuZENvbG9yID0NCgkJCQkJJyMnK3RoaXMudG9TdHJpbmcoKTsNCgkJCQlzdHlsZUVsZW1lbnQuc3R5bGUuY29sb3IgPQ0KCQkJCQkwLjIxMyAqIHRoaXMucmdiWzBdICsNCgkJCQkJMC43MTUgKiB0aGlzLnJnYlsxXSArDQoJCQkJCTAuMDcyICogdGhpcy5yZ2JbMl0NCgkJCQkJPCAwLjUgPyAnI0ZGRicgOiAnIzAwMCc7DQoJCQl9DQoJCQlpZighKGZsYWdzICYgbGVhdmVQYWQpICYmIGlzUGlja2VyT3duZXIoKSkgew0KCQkJCXJlZHJhd1BhZCgpOw0KCQkJfQ0KCQkJaWYoIShmbGFncyAmIGxlYXZlU2xkKSAmJiBpc1BpY2tlck93bmVyKCkpIHsNCgkJCQlyZWRyYXdTbGQoKTsNCgkJCX0NCgkJfTsNCg0KDQoJCXRoaXMuZnJvbUhTViA9IGZ1bmN0aW9uKGgsIHMsIHYsIGZsYWdzKSB7IC8vIG51bGwgPSBkb24ndCBjaGFuZ2UNCgkJCWlmKGggIT09IG51bGwpIHsgaCA9IE1hdGgubWF4KDAuMCwgdGhpcy5taW5ILCBNYXRoLm1pbig2LjAsIHRoaXMubWF4SCwgaCkpOyB9DQoJCQlpZihzICE9PSBudWxsKSB7IHMgPSBNYXRoLm1heCgwLjAsIHRoaXMubWluUywgTWF0aC5taW4oMS4wLCB0aGlzLm1heFMsIHMpKTsgfQ0KCQkJaWYodiAhPT0gbnVsbCkgeyB2ID0gTWF0aC5tYXgoMC4wLCB0aGlzLm1pblYsIE1hdGgubWluKDEuMCwgdGhpcy5tYXhWLCB2KSk7IH0NCg0KCQkJdGhpcy5yZ2IgPSBIU1ZfUkdCKA0KCQkJCWg9PT1udWxsID8gdGhpcy5oc3ZbMF0gOiAodGhpcy5oc3ZbMF09aCksDQoJCQkJcz09PW51bGwgPyB0aGlzLmhzdlsxXSA6ICh0aGlzLmhzdlsxXT1zKSwNCgkJCQl2PT09bnVsbCA/IHRoaXMuaHN2WzJdIDogKHRoaXMuaHN2WzJdPXYpDQoJCQkpOw0KDQoJCQl0aGlzLmV4cG9ydENvbG9yKGZsYWdzKTsNCgkJfTsNCg0KDQoJCXRoaXMuZnJvbVJHQiA9IGZ1bmN0aW9uKHIsIGcsIGIsIGZsYWdzKSB7IC8vIG51bGwgPSBkb24ndCBjaGFuZ2UNCgkJCWlmKHIgIT09IG51bGwpIHsgciA9IE1hdGgubWF4KDAuMCwgTWF0aC5taW4oMS4wLCByKSk7IH0NCgkJCWlmKGcgIT09IG51bGwpIHsgZyA9IE1hdGgubWF4KDAuMCwgTWF0aC5taW4oMS4wLCBnKSk7IH0NCgkJCWlmKGIgIT09IG51bGwpIHsgYiA9IE1hdGgubWF4KDAuMCwgTWF0aC5taW4oMS4wLCBiKSk7IH0NCg0KCQkJdmFyIGhzdiA9IFJHQl9IU1YoDQoJCQkJcj09PW51bGwgPyB0aGlzLnJnYlswXSA6IHIsDQoJCQkJZz09PW51bGwgPyB0aGlzLnJnYlsxXSA6IGcsDQoJCQkJYj09PW51bGwgPyB0aGlzLnJnYlsyXSA6IGINCgkJCSk7DQoJCQlpZihoc3ZbMF0gIT09IG51bGwpIHsNCgkJCQl0aGlzLmhzdlswXSA9IE1hdGgubWF4KDAuMCwgdGhpcy5taW5ILCBNYXRoLm1pbig2LjAsIHRoaXMubWF4SCwgaHN2WzBdKSk7DQoJCQl9DQoJCQlpZihoc3ZbMl0gIT09IDApIHsNCgkJCQl0aGlzLmhzdlsxXSA9IGhzdlsxXT09PW51bGwgPyBudWxsIDogTWF0aC5tYXgoMC4wLCB0aGlzLm1pblMsIE1hdGgubWluKDEuMCwgdGhpcy5tYXhTLCBoc3ZbMV0pKTsNCgkJCX0NCgkJCXRoaXMuaHN2WzJdID0gaHN2WzJdPT09bnVsbCA/IG51bGwgOiBNYXRoLm1heCgwLjAsIHRoaXMubWluViwgTWF0aC5taW4oMS4wLCB0aGlzLm1heFYsIGhzdlsyXSkpOw0KDQoJCQkvLyB1cGRhdGUgUkdCIGFjY29yZGluZyB0byBmaW5hbCBIU1YsIGFzIHNvbWUgdmFsdWVzIG1pZ2h0IGJlIHRyaW1tZWQNCgkJCXZhciByZ2IgPSBIU1ZfUkdCKHRoaXMuaHN2WzBdLCB0aGlzLmhzdlsxXSwgdGhpcy5oc3ZbMl0pOw0KCQkJdGhpcy5yZ2JbMF0gPSByZ2JbMF07DQoJCQl0aGlzLnJnYlsxXSA9IHJnYlsxXTsNCgkJCXRoaXMucmdiWzJdID0gcmdiWzJdOw0KDQoJCQl0aGlzLmV4cG9ydENvbG9yKGZsYWdzKTsNCgkJfTsNCg0KDQoJCXRoaXMuZnJvbVN0cmluZyA9IGZ1bmN0aW9uKGhleCwgZmxhZ3MpIHsNCgkJCXZhciBtID0gaGV4Lm1hdGNoKC9eXFcqKFswLTlBLUZdezN9KFswLTlBLUZdezN9KT8pXFcqJC9pKTsNCgkJCWlmKCFtKSB7DQoJCQkJcmV0dXJuIGZhbHNlOw0KCQkJfSBlbHNlIHsNCgkJCQlpZihtWzFdLmxlbmd0aCA9PT0gNikgeyAvLyA2LWNoYXIgbm90YXRpb24NCgkJCQkJdGhpcy5mcm9tUkdCKA0KCQkJCQkJcGFyc2VJbnQobVsxXS5zdWJzdHIoMCwyKSwxNikgLyAyNTUsDQoJCQkJCQlwYXJzZUludChtWzFdLnN1YnN0cigyLDIpLDE2KSAvIDI1NSwNCgkJCQkJCXBhcnNlSW50KG1bMV0uc3Vic3RyKDQsMiksMTYpIC8gMjU1LA0KCQkJCQkJZmxhZ3MNCgkJCQkJKTsNCgkJCQl9IGVsc2UgeyAvLyAzLWNoYXIgbm90YXRpb24NCgkJCQkJdGhpcy5mcm9tUkdCKA0KCQkJCQkJcGFyc2VJbnQobVsxXS5jaGFyQXQoMCkrbVsxXS5jaGFyQXQoMCksMTYpIC8gMjU1LA0KCQkJCQkJcGFyc2VJbnQobVsxXS5jaGFyQXQoMSkrbVsxXS5jaGFyQXQoMSksMTYpIC8gMjU1LA0KCQkJCQkJcGFyc2VJbnQobVsxXS5jaGFyQXQoMikrbVsxXS5jaGFyQXQoMiksMTYpIC8gMjU1LA0KCQkJCQkJZmxhZ3MNCgkJCQkJKTsNCgkJCQl9DQoJCQkJcmV0dXJuIHRydWU7DQoJCQl9DQoJCX07DQoNCg0KCQl0aGlzLnRvU3RyaW5nID0gZnVuY3Rpb24oKSB7DQoJCQlyZXR1cm4gKA0KCQkJCSgweDEwMCB8IE1hdGgucm91bmQoMjU1KnRoaXMucmdiWzBdKSkudG9TdHJpbmcoMTYpLnN1YnN0cigxKSArDQoJCQkJKDB4MTAwIHwgTWF0aC5yb3VuZCgyNTUqdGhpcy5yZ2JbMV0pKS50b1N0cmluZygxNikuc3Vic3RyKDEpICsNCgkJCQkoMHgxMDAgfCBNYXRoLnJvdW5kKDI1NSp0aGlzLnJnYlsyXSkpLnRvU3RyaW5nKDE2KS5zdWJzdHIoMSkNCgkJCSk7DQoJCX07DQoNCg0KCQlmdW5jdGlvbiBSR0JfSFNWKHIsIGcsIGIpIHsNCgkJCXZhciBuID0gTWF0aC5taW4oTWF0aC5taW4ocixnKSxiKTsNCgkJCXZhciB2ID0gTWF0aC5tYXgoTWF0aC5tYXgocixnKSxiKTsNCgkJCXZhciBtID0gdiAtIG47DQoJCQlpZihtID09PSAwKSB7IHJldHVybiBbIG51bGwsIDAsIHYgXTsgfQ0KCQkJdmFyIGggPSByPT09biA/IDMrKGItZykvbSA6IChnPT09biA/IDUrKHItYikvbSA6IDErKGctcikvbSk7DQoJCQlyZXR1cm4gWyBoPT09Nj8wOmgsIG0vdiwgdiBdOw0KCQl9DQoNCg0KCQlmdW5jdGlvbiBIU1ZfUkdCKGgsIHMsIHYpIHsNCgkJCWlmKGggPT09IG51bGwpIHsgcmV0dXJuIFsgdiwgdiwgdiBdOyB9DQoJCQl2YXIgaSA9IE1hdGguZmxvb3IoaCk7DQoJCQl2YXIgZiA9IGklMiA/IGgtaSA6IDEtKGgtaSk7DQoJCQl2YXIgbSA9IHYgKiAoMSAtIHMpOw0KCQkJdmFyIG4gPSB2ICogKDEgLSBzKmYpOw0KCQkJc3dpdGNoKGkpIHsNCgkJCQljYXNlIDY6DQoJCQkJY2FzZSAwOiByZXR1cm4gW3YsbixtXTsNCgkJCQljYXNlIDE6IHJldHVybiBbbix2LG1dOw0KCQkJCWNhc2UgMjogcmV0dXJuIFttLHYsbl07DQoJCQkJY2FzZSAzOiByZXR1cm4gW20sbix2XTsNCgkJCQljYXNlIDQ6IHJldHVybiBbbixtLHZdOw0KCQkJCWNhc2UgNTogcmV0dXJuIFt2LG0sbl07DQoJCQl9DQoJCX0NCg0KDQoJCWZ1bmN0aW9uIHJlbW92ZVBpY2tlcigpIHsNCgkJCWRlbGV0ZSBqc2NvbG9yLnBpY2tlci5vd25lcjsNCgkJCWRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdib2R5JylbMF0ucmVtb3ZlQ2hpbGQoanNjb2xvci5waWNrZXIuYm94Qik7DQoJCX0NCg0KDQoJCWZ1bmN0aW9uIGRyYXdQaWNrZXIoeCwgeSkgew0KCQkJaWYoIWpzY29sb3IucGlja2VyKSB7DQoJCQkJanNjb2xvci5waWNrZXIgPSB7DQoJCQkJCWJveCA6IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpLA0KCQkJCQlib3hCIDogZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JyksDQoJCQkJCXBhZCA6IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpLA0KCQkJCQlwYWRCIDogZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JyksDQoJCQkJCXBhZE0gOiBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKSwNCgkJCQkJc2xkIDogZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JyksDQoJCQkJCXNsZEIgOiBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKSwNCgkJCQkJc2xkTSA6IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpLA0KCQkJCQlidG4gOiBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKSwNCgkJCQkJYnRuUyA6IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKSwNCgkJCQkJYnRuVCA6IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKFRISVMucGlja2VyQ2xvc2VUZXh0KQ0KCQkJCX07DQoJCQkJZm9yKHZhciBpPTAsc2VnU2l6ZT00OyBpPGpzY29sb3IuaW1hZ2VzLnNsZFsxXTsgaSs9c2VnU2l6ZSkgew0KCQkJCQl2YXIgc2VnID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7DQoJCQkJCXNlZy5zdHlsZS5oZWlnaHQgPSBzZWdTaXplKydweCc7DQoJCQkJCXNlZy5zdHlsZS5mb250U2l6ZSA9ICcxcHgnOw0KCQkJCQlzZWcuc3R5bGUubGluZUhlaWdodCA9ICcwJzsNCgkJCQkJanNjb2xvci5waWNrZXIuc2xkLmFwcGVuZENoaWxkKHNlZyk7DQoJCQkJfQ0KCQkJCWpzY29sb3IucGlja2VyLnNsZEIuYXBwZW5kQ2hpbGQoanNjb2xvci5waWNrZXIuc2xkKTsNCgkJCQlqc2NvbG9yLnBpY2tlci5ib3guYXBwZW5kQ2hpbGQoanNjb2xvci5waWNrZXIuc2xkQik7DQoJCQkJanNjb2xvci5waWNrZXIuYm94LmFwcGVuZENoaWxkKGpzY29sb3IucGlja2VyLnNsZE0pOw0KCQkJCWpzY29sb3IucGlja2VyLnBhZEIuYXBwZW5kQ2hpbGQoanNjb2xvci5waWNrZXIucGFkKTsNCgkJCQlqc2NvbG9yLnBpY2tlci5ib3guYXBwZW5kQ2hpbGQoanNjb2xvci5waWNrZXIucGFkQik7DQoJCQkJanNjb2xvci5waWNrZXIuYm94LmFwcGVuZENoaWxkKGpzY29sb3IucGlja2VyLnBhZE0pOw0KCQkJCWpzY29sb3IucGlja2VyLmJ0blMuYXBwZW5kQ2hpbGQoanNjb2xvci5waWNrZXIuYnRuVCk7DQoJCQkJanNjb2xvci5waWNrZXIuYnRuLmFwcGVuZENoaWxkKGpzY29sb3IucGlja2VyLmJ0blMpOw0KCQkJCWpzY29sb3IucGlja2VyLmJveC5hcHBlbmRDaGlsZChqc2NvbG9yLnBpY2tlci5idG4pOw0KCQkJCWpzY29sb3IucGlja2VyLmJveEIuYXBwZW5kQ2hpbGQoanNjb2xvci5waWNrZXIuYm94KTsNCgkJCX0NCg0KCQkJdmFyIHAgPSBqc2NvbG9yLnBpY2tlcjsNCg0KCQkJLy8gY29udHJvbHMgaW50ZXJhY3Rpb24NCgkJCXAuYm94Lm9ubW91c2V1cCA9DQoJCQlwLmJveC5vbm1vdXNlb3V0ID0gZnVuY3Rpb24oKSB7IHRhcmdldC5mb2N1cygpOyB9Ow0KCQkJcC5ib3gub25tb3VzZWRvd24gPSBmdW5jdGlvbigpIHsgYWJvcnRCbHVyPXRydWU7IH07DQoJCQlwLmJveC5vbm1vdXNlbW92ZSA9IGZ1bmN0aW9uKGUpIHsNCgkJCQlpZiAoaG9sZFBhZCB8fCBob2xkU2xkKSB7DQoJCQkJCWhvbGRQYWQgJiYgc2V0UGFkKGUpOw0KCQkJCQlob2xkU2xkICYmIHNldFNsZChlKTsNCgkJCQkJaWYgKGRvY3VtZW50LnNlbGVjdGlvbikgew0KCQkJCQkJZG9jdW1lbnQuc2VsZWN0aW9uLmVtcHR5KCk7DQoJCQkJCX0gZWxzZSBpZiAod2luZG93LmdldFNlbGVjdGlvbikgew0KCQkJCQkJd2luZG93LmdldFNlbGVjdGlvbigpLnJlbW92ZUFsbFJhbmdlcygpOw0KCQkJCQl9DQoJCQkJCWRpc3BhdGNoSW1tZWRpYXRlQ2hhbmdlKCk7DQoJCQkJfQ0KCQkJfTsNCgkJCWlmKCdvbnRvdWNoc3RhcnQnIGluIHdpbmRvdykgeyAvLyBpZiB0b3VjaCBkZXZpY2UNCgkJCQlwLmJveC5hZGRFdmVudExpc3RlbmVyKCd0b3VjaG1vdmUnLCBmdW5jdGlvbihlKSB7DQoJCQkJCXZhciBldmVudD17DQoJCQkJCQknb2Zmc2V0WCc6IGUudG91Y2hlc1swXS5wYWdlWC10b3VjaE9mZnNldC5YLA0KCQkJCQkJJ29mZnNldFknOiBlLnRvdWNoZXNbMF0ucGFnZVktdG91Y2hPZmZzZXQuWQ0KCQkJCQl9Ow0KCQkJCQlpZiAoaG9sZFBhZCB8fCBob2xkU2xkKSB7DQoJCQkJCQlob2xkUGFkICYmIHNldFBhZChldmVudCk7DQoJCQkJCQlob2xkU2xkICYmIHNldFNsZChldmVudCk7DQoJCQkJCQlkaXNwYXRjaEltbWVkaWF0ZUNoYW5nZSgpOw0KCQkJCQl9DQoJCQkJCWUuc3RvcFByb3BhZ2F0aW9uKCk7IC8vIHByZXZlbnQgbW92ZSAidmlldyIgb24gYnJvc3dlcg0KCQkJCQllLnByZXZlbnREZWZhdWx0KCk7IC8vIHByZXZlbnQgRGVmYXVsdCAtIEFuZHJvaWQgRml4IChlbHNlIGFuZHJvaWQgZ2VuZXJhdGVkIG9ubHkgMS0yIHRvdWNobW92ZSBldmVudHMpDQoJCQkJfSwgZmFsc2UpOw0KCQkJfQ0KCQkJcC5wYWRNLm9ubW91c2V1cCA9DQoJCQlwLnBhZE0ub25tb3VzZW91dCA9IGZ1bmN0aW9uKCkgeyBpZihob2xkUGFkKSB7IGhvbGRQYWQ9ZmFsc2U7IGpzY29sb3IuZmlyZUV2ZW50KHZhbHVlRWxlbWVudCwnY2hhbmdlJyk7IH0gfTsNCgkJCXAucGFkTS5vbm1vdXNlZG93biA9IGZ1bmN0aW9uKGUpIHsNCgkJCQkvLyBpZiB0aGUgc2xpZGVyIGlzIGF0IHRoZSBib3R0b20sIG1vdmUgaXQgdXANCgkJCQlzd2l0Y2gobW9kZUlEKSB7DQoJCQkJCWNhc2UgMDogaWYgKFRISVMuaHN2WzJdID09PSAwKSB7IFRISVMuZnJvbUhTVihudWxsLCBudWxsLCAxLjApOyB9OyBicmVhazsNCgkJCQkJY2FzZSAxOiBpZiAoVEhJUy5oc3ZbMV0gPT09IDApIHsgVEhJUy5mcm9tSFNWKG51bGwsIDEuMCwgbnVsbCk7IH07IGJyZWFrOw0KCQkJCX0NCgkJCQlob2xkU2xkPWZhbHNlOw0KCQkJCWhvbGRQYWQ9dHJ1ZTsNCgkJCQlzZXRQYWQoZSk7DQoJCQkJZGlzcGF0Y2hJbW1lZGlhdGVDaGFuZ2UoKTsNCgkJCX07DQoJCQlpZignb250b3VjaHN0YXJ0JyBpbiB3aW5kb3cpIHsNCgkJCQlwLnBhZE0uYWRkRXZlbnRMaXN0ZW5lcigndG91Y2hzdGFydCcsIGZ1bmN0aW9uKGUpIHsNCgkJCQkJdG91Y2hPZmZzZXQ9ew0KCQkJCQkJJ1gnOiBlLnRhcmdldC5vZmZzZXRQYXJlbnQub2Zmc2V0TGVmdCwNCgkJCQkJCSdZJzogZS50YXJnZXQub2Zmc2V0UGFyZW50Lm9mZnNldFRvcA0KCQkJCQl9Ow0KCQkJCQl0aGlzLm9ubW91c2Vkb3duKHsNCgkJCQkJCSdvZmZzZXRYJzplLnRvdWNoZXNbMF0ucGFnZVgtdG91Y2hPZmZzZXQuWCwNCgkJCQkJCSdvZmZzZXRZJzplLnRvdWNoZXNbMF0ucGFnZVktdG91Y2hPZmZzZXQuWQ0KCQkJCQl9KTsNCgkJCQl9KTsNCgkJCX0NCgkJCXAuc2xkTS5vbm1vdXNldXAgPQ0KCQkJcC5zbGRNLm9ubW91c2VvdXQgPSBmdW5jdGlvbigpIHsgaWYoaG9sZFNsZCkgeyBob2xkU2xkPWZhbHNlOyBqc2NvbG9yLmZpcmVFdmVudCh2YWx1ZUVsZW1lbnQsJ2NoYW5nZScpOyB9IH07DQoJCQlwLnNsZE0ub25tb3VzZWRvd24gPSBmdW5jdGlvbihlKSB7DQoJCQkJaG9sZFBhZD1mYWxzZTsNCgkJCQlob2xkU2xkPXRydWU7DQoJCQkJc2V0U2xkKGUpOw0KCQkJCWRpc3BhdGNoSW1tZWRpYXRlQ2hhbmdlKCk7DQoJCQl9Ow0KCQkJaWYoJ29udG91Y2hzdGFydCcgaW4gd2luZG93KSB7DQoJCQkJcC5zbGRNLmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNoc3RhcnQnLCBmdW5jdGlvbihlKSB7DQoJCQkJCXRvdWNoT2Zmc2V0PXsNCgkJCQkJCSdYJzogZS50YXJnZXQub2Zmc2V0UGFyZW50Lm9mZnNldExlZnQsDQoJCQkJCQknWSc6IGUudGFyZ2V0Lm9mZnNldFBhcmVudC5vZmZzZXRUb3ANCgkJCQkJfTsNCgkJCQkJdGhpcy5vbm1vdXNlZG93bih7DQoJCQkJCQknb2Zmc2V0WCc6ZS50b3VjaGVzWzBdLnBhZ2VYLXRvdWNoT2Zmc2V0LlgsDQoJCQkJCQknb2Zmc2V0WSc6ZS50b3VjaGVzWzBdLnBhZ2VZLXRvdWNoT2Zmc2V0LlkNCgkJCQkJfSk7DQoJCQkJfSk7DQoJCQl9DQoNCgkJCS8vIHBpY2tlcg0KCQkJdmFyIGRpbXMgPSBnZXRQaWNrZXJEaW1zKFRISVMpOw0KCQkJcC5ib3guc3R5bGUud2lkdGggPSBkaW1zWzBdICsgJ3B4JzsNCgkJCXAuYm94LnN0eWxlLmhlaWdodCA9IGRpbXNbMV0gKyAncHgnOw0KDQoJCQkvLyBwaWNrZXIgYm9yZGVyDQoJCQlwLmJveEIuc3R5bGUucG9zaXRpb24gPSAnYWJzb2x1dGUnOw0KCQkJcC5ib3hCLnN0eWxlLmNsZWFyID0gJ2JvdGgnOw0KCQkJcC5ib3hCLnN0eWxlLmxlZnQgPSB4KydweCc7DQoJCQlwLmJveEIuc3R5bGUudG9wID0geSsncHgnOw0KCQkJcC5ib3hCLnN0eWxlLnpJbmRleCA9IFRISVMucGlja2VyWkluZGV4Ow0KCQkJcC5ib3hCLnN0eWxlLmJvcmRlciA9IFRISVMucGlja2VyQm9yZGVyKydweCBzb2xpZCc7DQoJCQlwLmJveEIuc3R5bGUuYm9yZGVyQ29sb3IgPSBUSElTLnBpY2tlckJvcmRlckNvbG9yOw0KCQkJcC5ib3hCLnN0eWxlLmJhY2tncm91bmQgPSBUSElTLnBpY2tlckZhY2VDb2xvcjsNCg0KCQkJLy8gcGFkIGltYWdlDQoJCQlwLnBhZC5zdHlsZS53aWR0aCA9IGpzY29sb3IuaW1hZ2VzLnBhZFswXSsncHgnOw0KCQkJcC5wYWQuc3R5bGUuaGVpZ2h0ID0ganNjb2xvci5pbWFnZXMucGFkWzFdKydweCc7DQoNCgkJCS8vIHBhZCBib3JkZXINCgkJCXAucGFkQi5zdHlsZS5wb3NpdGlvbiA9ICdhYnNvbHV0ZSc7DQoJCQlwLnBhZEIuc3R5bGUubGVmdCA9IFRISVMucGlja2VyRmFjZSsncHgnOw0KCQkJcC5wYWRCLnN0eWxlLnRvcCA9IFRISVMucGlja2VyRmFjZSsncHgnOw0KCQkJcC5wYWRCLnN0eWxlLmJvcmRlciA9IFRISVMucGlja2VySW5zZXQrJ3B4IHNvbGlkJzsNCgkJCXAucGFkQi5zdHlsZS5ib3JkZXJDb2xvciA9IFRISVMucGlja2VySW5zZXRDb2xvcjsNCg0KCQkJLy8gcGFkIG1vdXNlIGFyZWENCgkJCXAucGFkTS5zdHlsZS5wb3NpdGlvbiA9ICdhYnNvbHV0ZSc7DQoJCQlwLnBhZE0uc3R5bGUubGVmdCA9ICcwJzsNCgkJCXAucGFkTS5zdHlsZS50b3AgPSAnMCc7DQoJCQlwLnBhZE0uc3R5bGUud2lkdGggPSBUSElTLnBpY2tlckZhY2UgKyAyKlRISVMucGlja2VySW5zZXQgKyBqc2NvbG9yLmltYWdlcy5wYWRbMF0gKyBqc2NvbG9yLmltYWdlcy5hcnJvd1swXSArICdweCc7DQoJCQlwLnBhZE0uc3R5bGUuaGVpZ2h0ID0gcC5ib3guc3R5bGUuaGVpZ2h0Ow0KCQkJcC5wYWRNLnN0eWxlLmN1cnNvciA9ICdjcm9zc2hhaXInOw0KDQoJCQkvLyBzbGlkZXIgaW1hZ2UNCgkJCXAuc2xkLnN0eWxlLm92ZXJmbG93ID0gJ2hpZGRlbic7DQoJCQlwLnNsZC5zdHlsZS53aWR0aCA9IGpzY29sb3IuaW1hZ2VzLnNsZFswXSsncHgnOw0KCQkJcC5zbGQuc3R5bGUuaGVpZ2h0ID0ganNjb2xvci5pbWFnZXMuc2xkWzFdKydweCc7DQoNCgkJCS8vIHNsaWRlciBib3JkZXINCgkJCXAuc2xkQi5zdHlsZS5kaXNwbGF5ID0gVEhJUy5zbGlkZXIgPyAnYmxvY2snIDogJ25vbmUnOw0KCQkJcC5zbGRCLnN0eWxlLnBvc2l0aW9uID0gJ2Fic29sdXRlJzsNCgkJCXAuc2xkQi5zdHlsZS5yaWdodCA9IFRISVMucGlja2VyRmFjZSsncHgnOw0KCQkJcC5zbGRCLnN0eWxlLnRvcCA9IFRISVMucGlja2VyRmFjZSsncHgnOw0KCQkJcC5zbGRCLnN0eWxlLmJvcmRlciA9IFRISVMucGlja2VySW5zZXQrJ3B4IHNvbGlkJzsNCgkJCXAuc2xkQi5zdHlsZS5ib3JkZXJDb2xvciA9IFRISVMucGlja2VySW5zZXRDb2xvcjsNCg0KCQkJLy8gc2xpZGVyIG1vdXNlIGFyZWENCgkJCXAuc2xkTS5zdHlsZS5kaXNwbGF5ID0gVEhJUy5zbGlkZXIgPyAnYmxvY2snIDogJ25vbmUnOw0KCQkJcC5zbGRNLnN0eWxlLnBvc2l0aW9uID0gJ2Fic29sdXRlJzsNCgkJCXAuc2xkTS5zdHlsZS5yaWdodCA9ICcwJzsNCgkJCXAuc2xkTS5zdHlsZS50b3AgPSAnMCc7DQoJCQlwLnNsZE0uc3R5bGUud2lkdGggPSBqc2NvbG9yLmltYWdlcy5zbGRbMF0gKyBqc2NvbG9yLmltYWdlcy5hcnJvd1swXSArIFRISVMucGlja2VyRmFjZSArIDIqVEhJUy5waWNrZXJJbnNldCArICdweCc7DQoJCQlwLnNsZE0uc3R5bGUuaGVpZ2h0ID0gcC5ib3guc3R5bGUuaGVpZ2h0Ow0KCQkJdHJ5IHsNCgkJCQlwLnNsZE0uc3R5bGUuY3Vyc29yID0gJ3BvaW50ZXInOw0KCQkJfSBjYXRjaChlT2xkSUUpIHsNCgkJCQlwLnNsZE0uc3R5bGUuY3Vyc29yID0gJ2hhbmQnOw0KCQkJfQ0KDQoJCQkvLyAiY2xvc2UiIGJ1dHRvbg0KCQkJZnVuY3Rpb24gc2V0QnRuQm9yZGVyKCkgew0KCQkJCXZhciBpbnNldENvbG9ycyA9IFRISVMucGlja2VySW5zZXRDb2xvci5zcGxpdCgvXHMrLyk7DQoJCQkJdmFyIHBpY2tlck91dHNldENvbG9yID0gaW5zZXRDb2xvcnMubGVuZ3RoIDwgMiA/IGluc2V0Q29sb3JzWzBdIDogaW5zZXRDb2xvcnNbMV0gKyAnICcgKyBpbnNldENvbG9yc1swXSArICcgJyArIGluc2V0Q29sb3JzWzBdICsgJyAnICsgaW5zZXRDb2xvcnNbMV07DQoJCQkJcC5idG4uc3R5bGUuYm9yZGVyQ29sb3IgPSBwaWNrZXJPdXRzZXRDb2xvcjsNCgkJCX0NCgkJCXAuYnRuLnN0eWxlLmRpc3BsYXkgPSBUSElTLnBpY2tlckNsb3NhYmxlID8gJ2Jsb2NrJyA6ICdub25lJzsNCgkJCXAuYnRuLnN0eWxlLnBvc2l0aW9uID0gJ2Fic29sdXRlJzsNCgkJCXAuYnRuLnN0eWxlLmxlZnQgPSBUSElTLnBpY2tlckZhY2UgKyAncHgnOw0KCQkJcC5idG4uc3R5bGUuYm90dG9tID0gVEhJUy5waWNrZXJGYWNlICsgJ3B4JzsNCgkJCXAuYnRuLnN0eWxlLnBhZGRpbmcgPSAnMCAxNXB4JzsNCgkJCXAuYnRuLnN0eWxlLmhlaWdodCA9ICcxOHB4JzsNCgkJCXAuYnRuLnN0eWxlLmJvcmRlciA9IFRISVMucGlja2VySW5zZXQgKyAncHggc29saWQnOw0KCQkJc2V0QnRuQm9yZGVyKCk7DQoJCQlwLmJ0bi5zdHlsZS5jb2xvciA9IFRISVMucGlja2VyQnV0dG9uQ29sb3I7DQoJCQlwLmJ0bi5zdHlsZS5mb250ID0gJzEycHggc2Fucy1zZXJpZic7DQoJCQlwLmJ0bi5zdHlsZS50ZXh0QWxpZ24gPSAnY2VudGVyJzsNCgkJCXRyeSB7DQoJCQkJcC5idG4uc3R5bGUuY3Vyc29yID0gJ3BvaW50ZXInOw0KCQkJfSBjYXRjaChlT2xkSUUpIHsNCgkJCQlwLmJ0bi5zdHlsZS5jdXJzb3IgPSAnaGFuZCc7DQoJCQl9DQoJCQlwLmJ0bi5vbm1vdXNlZG93biA9IGZ1bmN0aW9uICgpIHsNCgkJCQlUSElTLmhpZGVQaWNrZXIoKTsNCgkJCX07DQoJCQlwLmJ0blMuc3R5bGUubGluZUhlaWdodCA9IHAuYnRuLnN0eWxlLmhlaWdodDsNCg0KCQkJLy8gbG9hZCBpbWFnZXMgaW4gb3B0aW1hbCBvcmRlcg0KCQkJc3dpdGNoKG1vZGVJRCkgew0KCQkJCWNhc2UgMDogdmFyIHBhZEltZyA9ICdocy5wbmcnOyBicmVhazsNCgkJCQljYXNlIDE6IHZhciBwYWRJbWcgPSAnaHYucG5nJzsgYnJlYWs7DQoJCQl9DQoJCQlwLnBhZE0uc3R5bGUuYmFja2dyb3VuZEltYWdlID0gInVybCgnIitqc2NvbG9yLmdldERpcigpKyJjcm9zcy5naWYnKSI7DQoJCQlwLnBhZE0uc3R5bGUuYmFja2dyb3VuZFJlcGVhdCA9ICJuby1yZXBlYXQiOw0KCQkJcC5zbGRNLnN0eWxlLmJhY2tncm91bmRJbWFnZSA9ICJ1cmwoJyIranNjb2xvci5nZXREaXIoKSsiYXJyb3cuZ2lmJykiOw0KCQkJcC5zbGRNLnN0eWxlLmJhY2tncm91bmRSZXBlYXQgPSAibm8tcmVwZWF0IjsNCgkJCXAucGFkLnN0eWxlLmJhY2tncm91bmRJbWFnZSA9ICJ1cmwoJyIranNjb2xvci5nZXREaXIoKStwYWRJbWcrIicpIjsNCgkJCXAucGFkLnN0eWxlLmJhY2tncm91bmRSZXBlYXQgPSAibm8tcmVwZWF0IjsNCgkJCXAucGFkLnN0eWxlLmJhY2tncm91bmRQb3NpdGlvbiA9ICIwIDAiOw0KDQoJCQkvLyBwbGFjZSBwb2ludGVycw0KCQkJcmVkcmF3UGFkKCk7DQoJCQlyZWRyYXdTbGQoKTsNCg0KCQkJanNjb2xvci5waWNrZXIub3duZXIgPSBUSElTOw0KCQkJZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2JvZHknKVswXS5hcHBlbmRDaGlsZChwLmJveEIpOw0KCQl9DQoNCg0KCQlmdW5jdGlvbiBnZXRQaWNrZXJEaW1zKG8pIHsNCgkJCXZhciBkaW1zID0gWw0KCQkJCTIqby5waWNrZXJJbnNldCArIDIqby5waWNrZXJGYWNlICsganNjb2xvci5pbWFnZXMucGFkWzBdICsNCgkJCQkJKG8uc2xpZGVyID8gMipvLnBpY2tlckluc2V0ICsgMipqc2NvbG9yLmltYWdlcy5hcnJvd1swXSArIGpzY29sb3IuaW1hZ2VzLnNsZFswXSA6IDApLA0KCQkJCW8ucGlja2VyQ2xvc2FibGUgPw0KCQkJCQk0Km8ucGlja2VySW5zZXQgKyAzKm8ucGlja2VyRmFjZSArIGpzY29sb3IuaW1hZ2VzLnBhZFsxXSArIG8ucGlja2VyQnV0dG9uSGVpZ2h0IDoNCgkJCQkJMipvLnBpY2tlckluc2V0ICsgMipvLnBpY2tlckZhY2UgKyBqc2NvbG9yLmltYWdlcy5wYWRbMV0NCgkJCV07DQoJCQlyZXR1cm4gZGltczsNCgkJfQ0KDQoNCgkJZnVuY3Rpb24gcmVkcmF3UGFkKCkgew0KCQkJLy8gcmVkcmF3IHRoZSBwYWQgcG9pbnRlcg0KCQkJc3dpdGNoKG1vZGVJRCkgew0KCQkJCWNhc2UgMDogdmFyIHlDb21wb25lbnQgPSAxOyBicmVhazsNCgkJCQljYXNlIDE6IHZhciB5Q29tcG9uZW50ID0gMjsgYnJlYWs7DQoJCQl9DQoJCQl2YXIgeCA9IE1hdGgucm91bmQoKFRISVMuaHN2WzBdLzYpICogKGpzY29sb3IuaW1hZ2VzLnBhZFswXS0xKSk7DQoJCQl2YXIgeSA9IE1hdGgucm91bmQoKDEtVEhJUy5oc3ZbeUNvbXBvbmVudF0pICogKGpzY29sb3IuaW1hZ2VzLnBhZFsxXS0xKSk7DQoJCQlqc2NvbG9yLnBpY2tlci5wYWRNLnN0eWxlLmJhY2tncm91bmRQb3NpdGlvbiA9DQoJCQkJKFRISVMucGlja2VyRmFjZStUSElTLnBpY2tlckluc2V0K3ggLSBNYXRoLmZsb29yKGpzY29sb3IuaW1hZ2VzLmNyb3NzWzBdLzIpKSArICdweCAnICsNCgkJCQkoVEhJUy5waWNrZXJGYWNlK1RISVMucGlja2VySW5zZXQreSAtIE1hdGguZmxvb3IoanNjb2xvci5pbWFnZXMuY3Jvc3NbMV0vMikpICsgJ3B4JzsNCg0KCQkJLy8gcmVkcmF3IHRoZSBzbGlkZXIgaW1hZ2UNCgkJCXZhciBzZWcgPSBqc2NvbG9yLnBpY2tlci5zbGQuY2hpbGROb2RlczsNCg0KCQkJc3dpdGNoKG1vZGVJRCkgew0KCQkJCWNhc2UgMDoNCgkJCQkJdmFyIHJnYiA9IEhTVl9SR0IoVEhJUy5oc3ZbMF0sIFRISVMuaHN2WzFdLCAxKTsNCgkJCQkJZm9yKHZhciBpPTA7IGk8c2VnLmxlbmd0aDsgaSs9MSkgew0KCQkJCQkJc2VnW2ldLnN0eWxlLmJhY2tncm91bmRDb2xvciA9ICdyZ2IoJysNCgkJCQkJCQkocmdiWzBdKigxLWkvc2VnLmxlbmd0aCkqMTAwKSsnJSwnKw0KCQkJCQkJCShyZ2JbMV0qKDEtaS9zZWcubGVuZ3RoKSoxMDApKyclLCcrDQoJCQkJCQkJKHJnYlsyXSooMS1pL3NlZy5sZW5ndGgpKjEwMCkrJyUpJzsNCgkJCQkJfQ0KCQkJCQlicmVhazsNCgkJCQljYXNlIDE6DQoJCQkJCXZhciByZ2IsIHMsIGMgPSBbIFRISVMuaHN2WzJdLCAwLCAwIF07DQoJCQkJCXZhciBpID0gTWF0aC5mbG9vcihUSElTLmhzdlswXSk7DQoJCQkJCXZhciBmID0gaSUyID8gVEhJUy5oc3ZbMF0taSA6IDEtKFRISVMuaHN2WzBdLWkpOw0KCQkJCQlzd2l0Y2goaSkgew0KCQkJCQkJY2FzZSA2Og0KCQkJCQkJY2FzZSAwOiByZ2I9WzAsMSwyXTsgYnJlYWs7DQoJCQkJCQljYXNlIDE6IHJnYj1bMSwwLDJdOyBicmVhazsNCgkJCQkJCWNhc2UgMjogcmdiPVsyLDAsMV07IGJyZWFrOw0KCQkJCQkJY2FzZSAzOiByZ2I9WzIsMSwwXTsgYnJlYWs7DQoJCQkJCQljYXNlIDQ6IHJnYj1bMSwyLDBdOyBicmVhazsNCgkJCQkJCWNhc2UgNTogcmdiPVswLDIsMV07IGJyZWFrOw0KCQkJCQl9DQoJCQkJCWZvcih2YXIgaT0wOyBpPHNlZy5sZW5ndGg7IGkrPTEpIHsNCgkJCQkJCXMgPSAxIC0gMS8oc2VnLmxlbmd0aC0xKSppOw0KCQkJCQkJY1sxXSA9IGNbMF0gKiAoMSAtIHMqZik7DQoJCQkJCQljWzJdID0gY1swXSAqICgxIC0gcyk7DQoJCQkJCQlzZWdbaV0uc3R5bGUuYmFja2dyb3VuZENvbG9yID0gJ3JnYignKw0KCQkJCQkJCShjW3JnYlswXV0qMTAwKSsnJSwnKw0KCQkJCQkJCShjW3JnYlsxXV0qMTAwKSsnJSwnKw0KCQkJCQkJCShjW3JnYlsyXV0qMTAwKSsnJSknOw0KCQkJCQl9DQoJCQkJCWJyZWFrOw0KCQkJfQ0KCQl9DQoNCg0KCQlmdW5jdGlvbiByZWRyYXdTbGQoKSB7DQoJCQkvLyByZWRyYXcgdGhlIHNsaWRlciBwb2ludGVyDQoJCQlzd2l0Y2gobW9kZUlEKSB7DQoJCQkJY2FzZSAwOiB2YXIgeUNvbXBvbmVudCA9IDI7IGJyZWFrOw0KCQkJCWNhc2UgMTogdmFyIHlDb21wb25lbnQgPSAxOyBicmVhazsNCgkJCX0NCgkJCXZhciB5ID0gTWF0aC5yb3VuZCgoMS1USElTLmhzdlt5Q29tcG9uZW50XSkgKiAoanNjb2xvci5pbWFnZXMuc2xkWzFdLTEpKTsNCgkJCWpzY29sb3IucGlja2VyLnNsZE0uc3R5bGUuYmFja2dyb3VuZFBvc2l0aW9uID0NCgkJCQknMCAnICsgKFRISVMucGlja2VyRmFjZStUSElTLnBpY2tlckluc2V0K3kgLSBNYXRoLmZsb29yKGpzY29sb3IuaW1hZ2VzLmFycm93WzFdLzIpKSArICdweCc7DQoJCX0NCg0KDQoJCWZ1bmN0aW9uIGlzUGlja2VyT3duZXIoKSB7DQoJCQlyZXR1cm4ganNjb2xvci5waWNrZXIgJiYganNjb2xvci5waWNrZXIub3duZXIgPT09IFRISVM7DQoJCX0NCg0KDQoJCWZ1bmN0aW9uIGJsdXJUYXJnZXQoKSB7DQoJCQlpZih2YWx1ZUVsZW1lbnQgPT09IHRhcmdldCkgew0KCQkJCVRISVMuaW1wb3J0Q29sb3IoKTsNCgkJCX0NCgkJCWlmKFRISVMucGlja2VyT25mb2N1cykgew0KCQkJCVRISVMuaGlkZVBpY2tlcigpOw0KCQkJfQ0KCQl9DQoNCg0KCQlmdW5jdGlvbiBibHVyVmFsdWUoKSB7DQoJCQlpZih2YWx1ZUVsZW1lbnQgIT09IHRhcmdldCkgew0KCQkJCVRISVMuaW1wb3J0Q29sb3IoKTsNCgkJCX0NCgkJfQ0KDQoNCgkJZnVuY3Rpb24gc2V0UGFkKGUpIHsNCgkJCXZhciBtcG9zID0ganNjb2xvci5nZXRSZWxNb3VzZVBvcyhlKTsNCgkJCXZhciB4ID0gbXBvcy54IC0gVEhJUy5waWNrZXJGYWNlIC0gVEhJUy5waWNrZXJJbnNldDsNCgkJCXZhciB5ID0gbXBvcy55IC0gVEhJUy5waWNrZXJGYWNlIC0gVEhJUy5waWNrZXJJbnNldDsNCgkJCXN3aXRjaChtb2RlSUQpIHsNCgkJCQljYXNlIDA6IFRISVMuZnJvbUhTVih4Kig2Lyhqc2NvbG9yLmltYWdlcy5wYWRbMF0tMSkpLCAxIC0geS8oanNjb2xvci5pbWFnZXMucGFkWzFdLTEpLCBudWxsLCBsZWF2ZVNsZCk7IGJyZWFrOw0KCQkJCWNhc2UgMTogVEhJUy5mcm9tSFNWKHgqKDYvKGpzY29sb3IuaW1hZ2VzLnBhZFswXS0xKSksIG51bGwsIDEgLSB5Lyhqc2NvbG9yLmltYWdlcy5wYWRbMV0tMSksIGxlYXZlU2xkKTsgYnJlYWs7DQoJCQl9DQoJCX0NCg0KDQoJCWZ1bmN0aW9uIHNldFNsZChlKSB7DQoJCQl2YXIgbXBvcyA9IGpzY29sb3IuZ2V0UmVsTW91c2VQb3MoZSk7DQoJCQl2YXIgeSA9IG1wb3MueSAtIFRISVMucGlja2VyRmFjZSAtIFRISVMucGlja2VySW5zZXQ7DQoJCQlzd2l0Y2gobW9kZUlEKSB7DQoJCQkJY2FzZSAwOiBUSElTLmZyb21IU1YobnVsbCwgbnVsbCwgMSAtIHkvKGpzY29sb3IuaW1hZ2VzLnNsZFsxXS0xKSwgbGVhdmVQYWQpOyBicmVhazsNCgkJCQljYXNlIDE6IFRISVMuZnJvbUhTVihudWxsLCAxIC0geS8oanNjb2xvci5pbWFnZXMuc2xkWzFdLTEpLCBudWxsLCBsZWF2ZVBhZCk7IGJyZWFrOw0KCQkJfQ0KCQl9DQoNCg0KCQlmdW5jdGlvbiBkaXNwYXRjaEltbWVkaWF0ZUNoYW5nZSgpIHsNCgkJCWlmIChUSElTLm9uSW1tZWRpYXRlQ2hhbmdlKSB7DQoJCQkJdmFyIGNhbGxiYWNrOw0KCQkJCWlmICh0eXBlb2YgVEhJUy5vbkltbWVkaWF0ZUNoYW5nZSA9PT0gJ3N0cmluZycpIHsNCgkJCQkJY2FsbGJhY2sgPSBuZXcgRnVuY3Rpb24gKFRISVMub25JbW1lZGlhdGVDaGFuZ2UpOw0KCQkJCX0gZWxzZSB7DQoJCQkJCWNhbGxiYWNrID0gVEhJUy5vbkltbWVkaWF0ZUNoYW5nZTsNCgkJCQl9DQoJCQkJY2FsbGJhY2suY2FsbChUSElTKTsNCgkJCX0NCgkJfQ0KDQoNCgkJdmFyIFRISVMgPSB0aGlzOw0KCQl2YXIgbW9kZUlEID0gdGhpcy5waWNrZXJNb2RlLnRvTG93ZXJDYXNlKCk9PT0naHZzJyA/IDEgOiAwOw0KCQl2YXIgYWJvcnRCbHVyID0gZmFsc2U7DQoJCXZhcg0KCQkJdmFsdWVFbGVtZW50ID0ganNjb2xvci5mZXRjaEVsZW1lbnQodGhpcy52YWx1ZUVsZW1lbnQpLA0KCQkJc3R5bGVFbGVtZW50ID0ganNjb2xvci5mZXRjaEVsZW1lbnQodGhpcy5zdHlsZUVsZW1lbnQpOw0KCQl2YXINCgkJCWhvbGRQYWQgPSBmYWxzZSwNCgkJCWhvbGRTbGQgPSBmYWxzZSwNCgkJCXRvdWNoT2Zmc2V0ID0ge307DQoJCXZhcg0KCQkJbGVhdmVWYWx1ZSA9IDE8PDAsDQoJCQlsZWF2ZVN0eWxlID0gMTw8MSwNCgkJCWxlYXZlUGFkID0gMTw8MiwNCgkJCWxlYXZlU2xkID0gMTw8MzsNCg0KCQkvLyB0YXJnZXQNCgkJanNjb2xvci5hZGRFdmVudCh0YXJnZXQsICdmb2N1cycsIGZ1bmN0aW9uKCkgew0KCQkJaWYoVEhJUy5waWNrZXJPbmZvY3VzKSB7IFRISVMuc2hvd1BpY2tlcigpOyB9DQoJCX0pOw0KCQlqc2NvbG9yLmFkZEV2ZW50KHRhcmdldCwgJ2JsdXInLCBmdW5jdGlvbigpIHsNCgkJCWlmKCFhYm9ydEJsdXIpIHsNCgkJCQl3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpeyBhYm9ydEJsdXIgfHwgYmx1clRhcmdldCgpOyBhYm9ydEJsdXI9ZmFsc2U7IH0sIDApOw0KCQkJfSBlbHNlIHsNCgkJCQlhYm9ydEJsdXIgPSBmYWxzZTsNCgkJCX0NCgkJfSk7DQoNCgkJLy8gdmFsdWVFbGVtZW50DQoJCWlmKHZhbHVlRWxlbWVudCkgew0KCQkJdmFyIHVwZGF0ZUZpZWxkID0gZnVuY3Rpb24oKSB7DQoJCQkJVEhJUy5mcm9tU3RyaW5nKHZhbHVlRWxlbWVudC52YWx1ZSwgbGVhdmVWYWx1ZSk7DQoJCQkJZGlzcGF0Y2hJbW1lZGlhdGVDaGFuZ2UoKTsNCgkJCX07DQoJCQlqc2NvbG9yLmFkZEV2ZW50KHZhbHVlRWxlbWVudCwgJ2tleXVwJywgdXBkYXRlRmllbGQpOw0KCQkJanNjb2xvci5hZGRFdmVudCh2YWx1ZUVsZW1lbnQsICdpbnB1dCcsIHVwZGF0ZUZpZWxkKTsNCgkJCWpzY29sb3IuYWRkRXZlbnQodmFsdWVFbGVtZW50LCAnYmx1cicsIGJsdXJWYWx1ZSk7DQoJCQl2YWx1ZUVsZW1lbnQuc2V0QXR0cmlidXRlKCdhdXRvY29tcGxldGUnLCAnb2ZmJyk7DQoJCX0NCg0KCQkvLyBzdHlsZUVsZW1lbnQNCgkJaWYoc3R5bGVFbGVtZW50KSB7DQoJCQlzdHlsZUVsZW1lbnQuanNjU3R5bGUgPSB7DQoJCQkJYmFja2dyb3VuZEltYWdlIDogc3R5bGVFbGVtZW50LnN0eWxlLmJhY2tncm91bmRJbWFnZSwNCgkJCQliYWNrZ3JvdW5kQ29sb3IgOiBzdHlsZUVsZW1lbnQuc3R5bGUuYmFja2dyb3VuZENvbG9yLA0KCQkJCWNvbG9yIDogc3R5bGVFbGVtZW50LnN0eWxlLmNvbG9yDQoJCQl9Ow0KCQl9DQoNCgkJLy8gcmVxdWlyZSBpbWFnZXMNCgkJc3dpdGNoKG1vZGVJRCkgew0KCQkJY2FzZSAwOiBqc2NvbG9yLnJlcXVpcmVJbWFnZSgnaHMucG5nJyk7IGJyZWFrOw0KCQkJY2FzZSAxOiBqc2NvbG9yLnJlcXVpcmVJbWFnZSgnaHYucG5nJyk7IGJyZWFrOw0KCQl9DQoJCWpzY29sb3IucmVxdWlyZUltYWdlKCdjcm9zcy5naWYnKTsNCgkJanNjb2xvci5yZXF1aXJlSW1hZ2UoJ2Fycm93LmdpZicpOw0KDQoJCXRoaXMuaW1wb3J0Q29sb3IoKTsNCgl9DQoNCn07DQoNCi8vLS0tIE9UUlNDSURlcGxveW1lbnRTdGF0ZUNvbG9ycw0KLy9qc2NvbG9yLmluc3RhbGwoKTsNCi8vLS0t
IyAtLQojIEdlbmVyYWxDYXRhbG9nLnBtIC0gY29kZSB0byBleGNlY3V0ZSBkdXJpbmcgcGFja2FnZSBpbnN0YWxsYXRpb24KIyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxNCBPVFJTIEFHLCBodHRwOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0LgojIC0tCgpwYWNrYWdlIHZhcjo6cGFja2FnZXNldHVwOjpHZW5lcmFsQ2F0YWxvZzsgICAgIyMgbm8gY3JpdGljCgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CgpvdXIgQE9iamVjdERlcGVuZGVuY2llcyA9ICgKICAgICdLZXJuZWw6OlN5c3RlbTo6REInLAopOwoKPWhlYWQxIE5BTUUKCkdlbmVyYWxDYXRhbG9nLnBtIC0gY29kZSB0byBleGNlY3V0ZSBkdXJpbmcgcGFja2FnZSBpbnN0YWxsYXRpb24KCj1oZWFkMSBTWU5PUFNJUwoKQWxsIGZ1bmN0aW9ucwoKPWhlYWQxIFBVQkxJQyBJTlRFUkZBQ0UKCj1vdmVyIDQKCj1jdXQKCj1pdGVtIG5ldygpCgpjcmVhdGUgYW4gb2JqZWN0CgogICAgdXNlIEtlcm5lbDo6U3lzdGVtOjpPYmplY3RNYW5hZ2VyOwogICAgbG9jYWwgJEtlcm5lbDo6T00gPSBLZXJuZWw6OlN5c3RlbTo6T2JqZWN0TWFuYWdlci0+bmV3KCk7CiAgICBteSAkQ29kZU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ3Zhcjo6cGFja2FnZXNldHVwOjpHZW5lcmFsQ2F0YWxvZycpOwoKPWN1dAoKc3ViIG5ldyB7CiAgICBteSAoICRUeXBlLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgYWxsb2NhdGUgbmV3IGhhc2ggZm9yIG9iamVjdAogICAgbXkgJFNlbGYgPSB7fTsKICAgIGJsZXNzKCAkU2VsZiwgJFR5cGUgKTsKCiAgICAjIGFsd2F5cyBkaXNjYXJkIHRoZSBjb25maWcgb2JqZWN0IGJlZm9yZSBwYWNrYWdlIGNvZGUgaXMgZXhlY3V0ZWQsCiAgICAjIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBjb25maWcgb2JqZWN0IHdpbGwgYmUgY3JlYXRlZCBuZXdseSwgc28gdGhhdCBpdAogICAgIyB3aWxsIHVzZSB0aGUgcmVjZW50bHkgd3JpdHRlbiBuZXcgY29uZmlnIGZyb20gdGhlIHBhY2thZ2UKICAgICRLZXJuZWw6Ok9NLT5PYmplY3RzRGlzY2FyZCgKICAgICAgICBPYmplY3RzID0+IFsnS2VybmVsOjpDb25maWcnXSwKICAgICk7CgogICAgcmV0dXJuICRTZWxmOwp9Cgo9aXRlbSBDb2RlSW5zdGFsbCgpCgpydW4gdGhlIGNvZGUgaW5zdGFsbCBwYXJ0CgogICAgbXkgJFJlc3VsdCA9ICRDb2RlT2JqZWN0LT5Db2RlSW5zdGFsbCgpOwoKPWN1dAoKc3ViIENvZGVJbnN0YWxsIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgcmV0dXJuIDE7Cn0KCj1pdGVtIENvZGVSZWluc3RhbGwoKQoKcnVuIHRoZSBjb2RlIHJlaW5zdGFsbCBwYXJ0CgogICAgbXkgJFJlc3VsdCA9ICRDb2RlT2JqZWN0LT5Db2RlUmVpbnN0YWxsKCk7Cgo9Y3V0CgpzdWIgQ29kZVJlaW5zdGFsbCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIHJldHVybiAxOwp9Cgo9aXRlbSBDb2RlVXBncmFkZSgpCgpydW4gdGhlIGNvZGUgdXBncmFkZSBwYXJ0CgogICAgbXkgJFJlc3VsdCA9ICRDb2RlT2JqZWN0LT5Db2RlVXBncmFkZSgpOwoKPWN1dAoKc3ViIENvZGVVcGdyYWRlIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBtaWdyYXRlICdmdW5jdGlvbmFsaXR5JyB0byBleHRlcm5hbCB0YWJsZQogICAgIyB0aGlzIGlzIG9ubHkgbmVjY2VzYXJ5IGluIENvZGVVcGdyYWRlLCBmb3IgbmV3IGluc3RhbGxhdGlvbnMgdGhpcyBpcyBkb25lCiAgICAjIGluIHRoZSBwYWNrYWdlIElUU01Db3JlIGR1cmluZyBDb2RlSW5zdGFsbAogICAgJFNlbGYtPl9NaWdyYXRlRnVuY3Rpb25hbGl0eSgpOwoKICAgIHJldHVybiAxOwp9Cgo9aXRlbSBDb2RlVW5pbnN0YWxsKCkKCnJ1biB0aGUgY29kZSB1bmluc3RhbGwgcGFydAoKICAgIG15ICRSZXN1bHQgPSAkQ29kZU9iamVjdC0+Q29kZVVuaW5zdGFsbCgpOwoKPWN1dAoKc3ViIENvZGVVbmluc3RhbGwgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICByZXR1cm4gMTsKfQoKPWl0ZW0gX01pZ3JhdGVGdW5jdGlvbmFsaXR5KCkKCj1jdXQKCnN1YiBfTWlncmF0ZUZ1bmN0aW9uYWxpdHkgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIFNFTEVDVCBhbGwgZnVuY3Rpb25hbGl0eSB2YWx1ZXMKICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpLT5QcmVwYXJlKAogICAgICAgIFNRTCA9PiAnU0VMRUNUIGlkLCBmdW5jdGlvbmFsaXR5IEZST00gZ2VuZXJhbF9jYXRhbG9nJywKICAgICk7CgogICAgbXkgQExpc3Q7CiAgICBST1c6CiAgICB3aGlsZSAoIG15IEBSb3cgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKS0+RmV0Y2hyb3dBcnJheSgpICkgewogICAgICAgIG5leHQgUk9XIGlmICEkUm93WzFdOwoKICAgICAgICBwdXNoIEBMaXN0LCBcQFJvdzsKICAgIH0KCiAgICAjIHNhdmUgZW50cmllcyBpbiBuZXcgdGFibGUKICAgIGZvciBteSAkRW50cnkgKEBMaXN0KSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyktPkRvKAogICAgICAgICAgICBTUUwgPT4KICAgICAgICAgICAgICAgICdJTlNFUlQgSU5UTyBnZW5lcmFsX2NhdGFsb2dfcHJlZmVyZW5jZXMoIGdlbmVyYWxfY2F0YWxvZ19pZCwgcHJlZl9rZXksIHByZWZfdmFsdWUgKScKICAgICAgICAgICAgICAgIC4gJyBWQUxVRVMoID8sIFwnRnVuY3Rpb25hbGl0eVwnLCA/ICknLAogICAgICAgICAgICBCaW5kID0+IFsgXCRFbnRyeS0+WzBdLCBcJEVudHJ5LT5bMV0gXSwKICAgICAgICApOwogICAgfQoKICAgICMgZHJvcCBjb2x1bW4gZnVuY3Rpb25hbGl0eQogICAgbXkgKCREcm9wKSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpLT5TUUxQcm9jZXNzb3IoCiAgICAgICAgRGF0YWJhc2UgPT4gWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBUYWcgICAgID0+ICdUYWJsZUFsdGVyJywKICAgICAgICAgICAgICAgIE5hbWUgICAgPT4gJ2dlbmVyYWxfY2F0YWxvZycsCiAgICAgICAgICAgICAgICBUYWdUeXBlID0+ICdTdGFydCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIFRhZyAgICAgPT4gJ0NvbHVtbkRyb3AnLAogICAgICAgICAgICAgICAgTmFtZSAgICA9PiAnZnVuY3Rpb25hbGl0eScsCiAgICAgICAgICAgICAgICBUYWdUeXBlID0+ICdTdGFydCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIFRhZyAgICAgPT4gJ1RhYmxlQWx0ZXInLAogICAgICAgICAgICAgICAgVGFnVHlwZSA9PiAnRW5kJywKICAgICAgICAgICAgfSwKICAgICAgICBdLAogICAgKTsKCiAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKS0+RG8oCiAgICAgICAgU1FMID0+ICREcm9wLAogICAgKTsKCiAgICByZXR1cm4gMTsKfQoKMTsKCj1iYWNrCgo9aGVhZDEgVEVSTVMgQU5EIENPTkRJVElPTlMKClRoaXMgU29mdHdhcmUgaXMgcGFydCBvZiB0aGUgT1RSUyBwcm9qZWN0IChodHRwOi8vb3Rycy5vcmcvKS4KClRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCnRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLnR4dC4KCj1jdXQK