Spaces:
Sleeping
Sleeping
Create app.py
Browse files
app.py
ADDED
|
@@ -0,0 +1,35 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# run_encrypted.py
|
| 2 |
+
|
| 3 |
+
import os
|
| 4 |
+
import base64
|
| 5 |
+
from cryptography.fernet import Fernet
|
| 6 |
+
|
| 7 |
+
# Replace this with the ciphertext from your local encryption step:
|
| 8 |
+
ENCRYPTED_CODE_B64 = """
|
| 9 |
+
Z0FBQUFBQm51OVdjU1E5bTV2X0syaW5WZjJyd3VDeE1DVm16QlRhT1RORkY2ZGFQbGZMbUVUNE9aelZ6dnFhX2xxb1R1aTRkRlQzc1h3Rzh6N0UzVlNMMzRJUXE2aUFFT3Nsc3ZJakVEVVBackx3Sm5VbGdwejBSQk9tS0dwVjBTNjBKam5IbkYxQ01CLXUxNDROMzVjY29LM2VfczdvRG1OZFY0c0ZpUnVFMVYydWxHOTBXdFpERFVrS29vSDlNUjNmeEw0aVRpc0RDSGdvSHJsZWV5dU1RdG5MN1Z4cGNPcnFaRGtzY1h6dG1LR0V5TEVGLVlCX3hTU21yRW4wNFdZOEgxOWc0Ymo4NTJOZHFpSEZ3Ri1oSkN4S1d0eWFVVlpzWUYxTENYYVhTZEo0dmdWczVQZmhaVy1RYUtaN0xtTWRGS0ZNaTZfdEpQcWJnOUNCSFJrUzdZVmZBRV80bzBleGhiaFVVLXc4VUtCSXNFX2g4azZlT2dBYjFmS0R6WHNOOXRNa0dWeDRBejAxMGdxUExIUVZqcWV3UzlMTTZhLWpkMUNJR0Y5MDJkbkFjQjdJZ3hWemFuTzZUUTl0WFg4UWc2SU5oeDNteHhfVjk4blVGSjJJR2Y4QjZzUzdjVlUxb1dZME9tbWJmLUtjZ0RITjE1Wms4UHNVd3Boc3VWTHNXaVlGYlFIbFBUV2syci11UkZfbXJnQjJURE1ITGlQaWIzZ0FqSE95Vkl2d25aYjk2eWJFZ2VBbHVCWERyQ1JNR0tXZm5Sb2p1WGFEdmN4RVhwRU5mbzhHTEFWNzgxZGloeFhaNUh3V3hhZ0pma0drNXg5NUk4eGFYZHo5RDI0d3dRMklVTF9BdE0teGdNeXp2QnBwNnBYbTEwMmk3Q0hRcy01LWprQ2Uwc2JXWjhVcEpiUGRLejBhMTd5WUg4SDFxTm8yRzNGWWVMSVpSTFR3NjFoT2cxU3g3VEdYU0JqZGdaaHp6Q0pkS3ptWmlsTHJXMGVOTWlYY1haQ0Uya2JGeFFqcUZrNUpxczVxaDJYV2xfRUdVYmdPeGQxUlptUkhDWVNBUXF6VU5qRzdydHVtOFBZQWxCOTh2Nzk1eWZOSzJ3R0Y3NmszSi12cThycnhxdWZ0Wm51SWl1NVhqS3BVYlBfV2VvdzJnZkRXeUhZR2ZSTjBmT2pWUGdvSk1Zbmk2b19BTld1YzJ0V2JCZFVGdGdveTZacmROZkhQcW5sSkFUYVZ4U0hSS1JVdzRZNUFkckV6NUFqT25Bblp1MVppdXFUQi1wWnVZOTF3b2oxVjN0ZzBtNWdUVXBSUWFaSUwtckt2bXllVlIzaEtoWHhvWDZhNGpKb3AyWE9BbnF5blFhTkxzOE0tWEJoZXNFUmFabFp2SWN4UHNaY3FyQjViemdwVzRFYkFWZmNMcHNtNHhqSlNhWDExOE40bmk2aTdJZTNQYlJMMXdxanRzOVJpTi1QRTl5Mk14cXBiZko2b2gxTTRNTU1YYVdNdmtYbC0zZzhtMFQ3ellFSVJGWWh0WHFjWGp4SnRtRC1MR0UzeFRsMEpsRkZWRFZ2RTUyRWp1eWNYVjRCWFNOSmdlczJFUWoySnh0SG01WnhZOElJTEZJZGJuOXRIWHV0bGtRSC11QWRWNFIwLTBZU25TZ2lWVlRmWkZyQVhYOGtLYVJKd0ZpXzJ1UHR4Zk91bUpBR3hiMEU1N3J3S2xqT193OXBJc09hRWREYVc3YU1ydm0xdFN2Z3lRZVNJMFVoQThNdFBZVGxYTU1JYmZJYUVDamdBLW1oWWNCemRHNTB0c2lRRFpjc2RJYjI0aHppMk9jTDFER1VXa2FHVGhMMHNiNlpKUTNsWWZCMXAtSVJweWF0di0yTkhJUUtBellpRzR3Z1RFV2Qya2Vwa1g1R0VMTm1OY0lWbkJoMXRqcjUwZVpLYmJ5VTFURDBxd3FjNHRMOHdjQlZxTHVWTF9KalNPZXdEVGlaRkJJYzc3NlVnVHVXR19kSTk2b0hYTTZLYjZxLV9RM29lQk8zQlBrdTM1Z3Uwb09pNUN2emtLTVNRc2dOb2hsVUVkNjFLeWw0NWR1bkwxb2hiNzR5ZnBiS2pyZlZUUUhTLXhuRk90Qi1rMlpocmFvME0xLVVLbkFETkxaV2c4TUtBZ01oaEw1ZjBGVXlGalJjeklJUkVFd3cwWXBhZFIybV9jQU9rQ0dSM2Q2X0ZEVVpqWXdlc0hZampRZldmQlFhZEN1clVHZG5BZloxZVBvSkdTSG1tdVBzUloySWY2dVpnSkU1WHg3dnRlazVtUzRUN1J2cjhzN0N3ZnczOWpZZFNRY3k3UWdCQ3RkUkJvNjlTbVZrLUl1b0xXWWdVcmdudVJvbzZwdExaMWJPek1ESUZXX05XcXo1VFE5ZnRRZGxBbnpycUhEMHh5dXNNSjRaMHdrTEMtLVFNbFR4M2RRTUprMnU4cC15NkljX3F0cHRCR09HdG95V3pZWDBreWV1cm5jYkhVR1hzcTR2R2tvR2dGeE5NdHF0dXJWcnQ5b1dPdUNEUFJOWTV0eWNoUlFhUExacENlU1BlbGN1RHdvOVdCVUtFdncydGYxT3lmLTlTT1R0X0VvQlhxMkJGZEc0Q1VPTk9WZ0xxaFVfUGVwOXFsZGk1dVlPQUE3MFlJRlZpNENVc25uVFhKbTNzbzZ5UWlXMDFsVW84ZlJPWTR1WVpvNWZKVjkxU3RYbEk3LW9MQVFuMmRoUFZKQjdnMGxvS3RiWjhXODVSUUwwN0N0RzloOEVjb2JvdGw0VFhzTW95Y0xXNVA4T2l4OUY4S2l1VDhrbVNVTDRUZU96WGxCd1g2bVdHNloyVzVFNTI2TVNSd3dlV0VNVG90WlNfdUVNbUdHUW80dm44aWpQWTBaLXo4TmRST21JdHh5V0FkSVNFb25DMXVaRk0yTy03RFpjdzBQNldhT2w0dVIyZF9RR2VFdEsyejdjRzF6MjRrMGpwZGpFUm5ZdS1QODRwNGpSQTZQd19TWXVVeU9YZTlJckhLWXlCOHlnUGk3QTBOUFdUcVIzdEgwUXlfNUZBOUNUT2taS3BrNVZiRklSVlROZkEzM2l5ODcxM0xmTGZvRlg4ZFN0TExteTlSWndSbTVOZXBjVmZNZ1MzTVR1cU1wS1E3NmhXaE9nVDRtaXE0d0NQQXlKNkk3eHJ3cmJpNTNxbUdrNUswUFVRTTNaWXg4dGR4VGJSYlphSGxQTllFRWJ1cVdsRGRxbmZaUnVUbXkyU1lLbGZOV25qV2lmQ2JFd0x3akxHZXhRMWxDSlZFaDJHV3JjbGNsZ19PNWZaU2VJbXZVbzBjdkhtenlnWVo0ckZ6a0RSOGtKa0pzZU1LQ09XUlN1ZjNmMGRYMEhiRjg2NmVkVjFJWFRZLTdZMmtyX0NrVG43MUZ6REYtQTVRX2hHakNZdXdrWDdVdjIwZ3FOV2dvdF9NVUowN2IzRG1obGJEOThFMXBzdG9OcXRpbnlfU19SNmE4UXJhNzRfUzVrb1RNLTNFbWFNUUpIdTRRTnlBSVJsX0tHcVdXR0Y2d3ZvY3pISTdqQUgxc21OX3pLYzVXajFkV1NabTZEbU5reXJrTlJTWTB4VW04TDdDQzRQaTR2LWdPRFlYaVRTeVZvQTl3dHc0X1V4b3Fvc0FFeFhKdDl2bVRsS3FYbFlwaW82b2VqOEd3ZTdlMUZqVFdWa2FOaEtkRXc4b2l2RjNvM2ZTNlpQcWZBY0VaZ0NOWkhXbFNkWDFIcjFteU9EenRkN0dXRlNOR215Mk4zTTNUN0Uxa1VRRVNDYl9raHpPRm94TW1XQXlZa01jM2xsUkpGcTh6NnQtRUVlUHlJTi01RjV4VFBmZDdCb24zcGxxeGlQNVV3YWJaaGhydG13blJ4RXJ0ZFFjaEtfdHZpaUhCUnpBZmk4V1g2WlNMZ0xLa1FGaDNNMUt2YmhFSFhHQ3kyaVpnS2FpQmxPOXdhaEhOWWItMHZ0eWNjcnZlWGVob2k5Q0NPajlxR0Q3OEFFNFZIQ1ZJUVdrdks4SldTOG9uZXFUTEpCOFN6TEM0T1Zwel9jNUExVUNsaG16XzV4eFFacjZFNTY2eXpHVTM1Z2VoakRjS2Jmak9TTTFNY2EwSDA5S2dNTHI3cXJ0SnFUME1RZXQzZ2tDakdIVFJaNzVvVlVnYlNheWRuTm1IV1ZzWDNLbVlvN3dWUWtDWi1nSkV1OWRUWEs5QkNjdVZCRGhTaHViZGx5Vi1XTWJ1NVhkYm1HYXZBNTlnN1J1MzUzYTBnQWxxWXYxSkk0NEN0eXpVT3NXeDRWc1JPM2lnQUxobmwzQVJmQi1KUHFBdWYzYU5OSkVMT1BETmlrUVRFMTVvSjB3V2JCU2pfd1ZjaXh3a2dJLWhmMnJXSUhuaFBMNGtKdFYtUGRET3dCWU5tM2RFblJJN1hVeXdwYk81UDk4VEw4TUkydDZOYWptMUtnNEI1MDRtaTRkbkh3QUt6NDNzTUZBc2p5cENfNHpyWmk3S3c3MlBQU0ZLNmxWcFZ5ajFMZUxERDFINjl1RjJuTkZEN19wVm9vVk13ZDVCQkdzSDZsemV6Ml9lY2dnRFFIVnlLRzhlcmdxaXZ5ZDQwYld0TDVvVzU1S0NDbXZuSUY1WmVYQVFtZVRrMFdPSUF4TTlQREhSLWIyM1FKTERIRjNfSHBMYjlUZkNISjlSY2E3Z1hXLS1kNHlLM1FFVEpnUlJyaHNaaDBFOTlpZnlEU0FhRVJCUDV2VXdJRkZzekxIWFl2cE5mcUNzWTVnMmZKcUlnNUFkTlF4cU1ESXlkM2c4d3pQelMzeE5xOGxDcU1rdlZmUWY5ZmNaYk9GRlc3dUpUM2N6OTl0NzNpR1J6a0FxZkRKcklZZ3dlTDhYQTJISDNsYWx0bDV0V3NlZ1hYUlRqTTF0Q2RtUVpTaWhUQVBLeGo0SERudG0zUVBaQVFhNk9vcEt5X2E1UmNZZ0g5RFdDZ1FXbDgtOTV2cnpaWUFoOFVhYmk4VzlaWTlRZEZNSXB0TFo0a3Noa0NTT05aWGpfWnJYeTBzX2I4N0xqTENZQzUzUnJjSEd3ekdKb2d3bkFZb1NMVExWd2tUcWI5cHhIZk5hRFp3OERkaFZ0N0YwcU1BaGVtZGIzd1VNSWVNY2hKUjVaam83STNiOUZua0hkWnBaTk9iUEhpVmthNFk5c0xrNU9nak51aDNZVU5QMkhlemQ2V3ZXZzVxVTRzOHVwUFRYemJ5c0UtODZxZFN3R1ZDemkyc01tc3RxVjNJcEZjLVFRRzRZSjZRNm4tWl9TcVNnM01jblBwXzNqMnBjOEt5WEsyaHlqM3ktVk54MnItSXRjWFA2VThZY3VoUGZzU0R1ZTBac2p0clFUSW5pNzVJMWtVc2FRSmx2TTA0RHhBbnNvd1hMVDJXdFR5RlJBU1JwR2RlZjh6UjdPWnNUYmQ2bWN0am50aUxxQzVjQWJoWDdtbWc2amN6a1ZZSnlZU0lkZkFkODhNZ2drNmZWQUcxZkF1SkNiM01DMkhFa0hFSUNRZ01DTUk4d3U3Q3EzZHFtR0poQ08tSnc1LWVDOWVlQzJMUUVReTdMN1ZyZ1dXa0hTQlBlS21QM0V3YlpzQ0xialdkc2lJWkphOEMyVW9kdjd6M2xzYXd2THBLVGwxRXZkTW5EX0VTTkg2Y2ZZUEltcFpUb1NNazg1MFFCUXBOZ0R2ZFppOTZVTTZwWG9HcWZHLUxxNVl6UHBnblVnM2FJYXFPa09Za21ER1pCRGtJSk5kQmxDemtqLW12OUNjbEppTzRoeGZtUk83czF3OUstZGhoT01SZ2VaZUhSLXU2cjMzWk15WkNRR3M2UG12b3FmTUE5XzJCN2JDODF1OEhKeUdGUzNRcTNCN0pkNTJlSVRmbkg1ZWM5eml4UDByb0hwYXBuSkxjUzEyUDUxLVVzY3cwSjY3NjVUS1BISjNBbldQYjhnTUZxMmdlLVIyQ3J4T0JDUmRoS25LdTdFbEp6YWJQa3pudk45YmpHcDJTcWZjUzJiTmRnQVFBMk5xcGNoVzFONUR0NHJTNjhiQl9XY2pGVjlnQ2xReHJfSmRWM1pLTXhWempiZkR3N0VmUmpXQXJJb2kwckh5ZExaY1U1YmpIVHVmZ3dhRWxENzluVUttSXZaMUtQcUdsZFFQdHA4QjZOUGdEWXVlSjNKNFJSS0dKd184bjJkQmhEYmtfRGg0LS1tYVZsaDFMQVY5V3F6WV9WalRaUVhvYWk0WktpT1VXOWIzLVZzSmF2WU1fTWZ3WHBTajl3NHotdUxId0NSdWsyTnA0VXFuNVduOFF2bXNRTGp2cHhOUW96bmZ0anIwbjBJWS02OURfMmdZQzh3SFFPSi1WQS01N09pU2JDUS1JSGVCVVExYWNKc2JCWFZ6anFGUlFJYzljN3NBQzZxd3JMMjRpaTNKX08wWUhOV3pIaGhwa2hqX3JRTURkQ3RlUjVRVF9CS015eFdkYmlYc3MzNXkxWFJjV2Q5ckRsR042Rm1qVWpGUGQ4SDlhdVZhTVc1cUNRenF4QlRFZ1RKQVV2MEhKZE5SUVVMQ3VTVmlFSkp0SGcyMnFZMmx4N0czdVZWWlZ4UUVyMnhLSUE2d1NrRGx0dEprU3hkRG9veE05RGI5UFdaZDBYWDFLdjlmUDg5NjVmYmdyYldIOU5BMHJZRExSUGdNdkJfU0puOFdGczI1bGZrdVphajgtckdNb0o2MzVOaG54WGd1QmRNcXh1VGtKRUxwR2pfcHBpTHhVQnp6RjJlQ2NRRGFPY3JsSkNHYWFVZUtGZjJTb1NpWnlmTUZ6emR2VmdOYWVfMVhOSk1zSmJtUE5yOXJjQW4zeGFfeDVSd0FjaXhmcmJiMlREQnFfOG5JdWxoNENUdnkwLUtza19YemlXMUNsbklXSWNuS05IQXBjdkF3d21xaW1RVVhEaHFVSTRRQlJJVmU2RlFkZXgzbjhBQUQ5Snl2MjBWdi1lTzAzVHA2MGVtTklvWFYzWnV3M3l4ZjZJWkZzWTZNX253YnBydXU5cVBvTTM1bHpyMWJxQ195R1Z6MjBVd3ZGWEktNXpUclZoazRLTGJ6ZzQ4TXI1T25hanVBbEV0YXpDVVc1RzB3R2pEY0pRcy1sSTRVZFpKOXllX2htLVF5Y0t5NUR4XzNud0lSMkNpb0tTRU1KdTUzdktJakdTVlAtU1FuT1dRSm1veV9TYUU1b3VCRmdtTUdySzlXR2NFdWpLa0R3c2h4dGhGc2tYbF9USXdEa3lXRTlid3NsMWJNc1RvWHcyLUd3dVVsUXVQREZJcTFSbTJlb0l6Ni1KeWlBSWdwc3hSRDk3VHlBSldlRUJKZzVrdFBIb1NXMktqQl83b1V5LTBDVjBiVER2aGxQdDBXbHVHQWxBSExqWXhpY0cwbkRnbm9CMHNEMmNjTGxaYkFYbW13SUVPY0IyU0tKcVQ3bEdIREhIQi1DUTdHUFZybVQ2dXFtYk5IcEN6NVFKRmVKZGtLa08zbUpoMW5kMTJ4TTRxYzMweGh1anRKY0NZYVNFbjdDSm5ZZTRYUWhnV2piME5PV2VtQkhBRGx0ekNZV0ctXzg4SmZQRTNvXzBydWE2OWVYZzlCRTluZElLV3FPcW5YenFBaTlSblRyTU1IMTRFUDZvQU53ZEhyMm9tQTAwMXAxdHJfd1BmalVTTWNQRGJQTkZodmpqUHJ4WVFId2Jsa3RpOGxVMVZ1aWlPMmRTTXlPQmtZaUpaYnRvOGVSdFNlejlpd1JaMGU3MTF1RVBLT3hNakx6REFpVk5NQzNTTnlIWkxOeHZfMzcwVzVWdTZORW43SmhHMVZwMXVCY0ZmdUpBQ1hlcGZMNTlYSllIaUh3VzFQaUNJOXFiQ1hGcERYWVRkVFVBVVdOTElkNm9IWEljaVF5R0pMUm9GUWJpVUF5SG05aXJUTE9xR0dlUjFwbm1GeWVPZDJ4bFJWekd5bkFSN3VYSFRJandKVVZKZFpGc19MVHctZk51emo5U1B3SHVmQlFSazNnM2lwOE9fZnRhZEdZSDFPZWNkR2kxX0tOWGhzUkQwZWVIa25iQmlSSFN1d3N3ajNuRHlmbm9GSGtseXZlcDFiTUpSYjloODU5Um5teDNIM005S2YyVGp2WTMzWEpWdXZza0VPdm5lMDU0a1EyUEVjckJiVDdaYmxLMUp1a05nV3pDeS1NT0JkWTdaOUxubDJGbVFrdzBMb3M4TFJBZHJPaU9tSzJpdVZVR1U0OC1tWFE4ZlJjVlQzZzZnRmZQQUR3OTFwRDYzMzJHRVhybjlGUGdDNTRUalA3TXpBTmc2OWZ5di1zbFZiVVVMdnBFUnh1d1NhcHYyQjdmbmxHb1ZPX08yZHpnMFFMUUMxYUFjbnJyU3dzOXQ0TjBHUHk1bDVodXNzQ0xmcmduTklqenU4TTNmbGtSbloxYUg0N1hralltSkhueHZZLW4ycm0tR3lGdVRwVmcwa290OHFfODlpN3NBU29ZcUo4Sk5EZWpCazVKQWp0b1NPYUFqUmJDMDBqOG5fZTI0ZjcyZl9nZmZKRXVQQU81MjBaSzNTNDJaNzRreVhsZGJsMEloZTlnRXZXM0FJdDBscE1BbWtUdi1Td21iUkZIdTVUZHZjNy1Wa1FrNm5saUtSUGYxNF84N2tTS1BvNFlmYnJkQ2VjSWV3cWZENG5XZGZqVDkyR2NsZnhFZzZrZERQcUl4ZjA1RnRnLUVuS2txT2tHMm53YW9YTWtfY0lENjBQc2pDTExIRFh6Vk1OVnQ3WUpoMHNXZVpsVGdCUVZxTDZNdnpMUmdNZFBrNzctcTEwT2pVYV84a2hPMUE5Y2lzU2RLcWdvajZRY2ZmbGVjYWo0X0EtX0FuWjdYdkw2Q2taVjB2Q0hTdFIxZU1yZnRWaVBNYUdQQ0lucG9FYlJ1UUJRV2JKYm5FZXZPTTlSMVZjZzFWblg2VTFaZmZvSXcxYWcxdjhDN0JFbW5GRDAyRVRTOGIzOFBoRFNQZ3ZUcUMydjRfbzFWZzZuQXk4eTZpUXZ4STd1VExiZGgtaE5hU1ZwYkFkUnFMMGw2b3FINXNfQWd6T3FpeTM3M05qdzNMQThUeUc0UWRZc1l1aUd0UUxqTFlYRXZ2RlRVaVNNNVMzWlo4Nk5XNS1jVG9WVjhjd2Q5QWRtbUE1ZHp3OEVWc0lZLVo2cC05UmJzWk9hU09kMlMyRXZDUXpfTkdCVFBmRHhKZG1qRnd5dkw5M0hWVDY1a2pWMGRiNGxiajhnVGFwNWlaM08yWTNJVTVZR0JsLVUtTGltaWp0WXNfWjZiYW82Q1VzZ05qYU5SZkRibF92VW1wcHh5dGJNalhzR05ETDduTWM5UGl2VjhpYlBCVGV5eEZWc0c2UXpPRkJjOFRwSkU2OE9EQWR0emh1aVcxM0ZqS2FSWlN5MkNRZ2Z0OVEwNHFVRS11MEMyOGltTVpSZDRtMFBBYTR5QnUxZUxQTm5vR3dYd0tBeTItdldSNkVwZGwzVTMwX3JIcElmZUlYNXhUaTZ6TmNYcTctdmNJZUJEdmNOb29ZNzU1aEJYQ3d4T21GSm9qTnExZWtYTkotdHVHWlF5SjhHOFNQRzlyXzk3WGtFa3ZKd2R1OWl2YTdqcW4wUFpMRjBhcXhBaDFFcEM0ckFneUFOd0hIWi1UVHc0MXpHb2MteG1Ed2NvWDV4VDdOSTdDQkxkSFdSMEQzdS1UNVFqM09VWmZkSHRBUjRtZ05sWENWdWpEcXEwa1dQNV9LWGwwSHV6YnpBZWF5d2JwTzlNQW1wSGlZN25KOGhZR08tNnI2OC1vME1jZ0FmU3JnY0tCTmhxTzNFMmFjUGZScl9zVkR2UXVUVUJ6ZWtfX0xqMWVQWHgxMlo4SFdJQzM2Z005R3VkZlpBWTNOTnBNUUIyRFBnTjFTSExoMTJpTU9PLWVYOFduaXR3U0ZucnhzalJWS0hoelZCT2g3eWZEZzdwOFU1LXdsUG5XcjNuN3JKZjR2TExxTmtobUR6LWUycGdrUTZfak9IYms5X29mZG04cVc2QkZpOEllUWhMWmttSGFkMEUwdVp1V3B3MEl2OGFyQWEzNHNqaWo3YzNfRlVHN0JkMzhITmlHVTd6LTJkWXlmcjcyUElEeDlpUnJNQ0xRenN1c1RSa2hfX0JjY2hlNUxpOXAtSFpMT2ZPZmxLdjR4OWY2VHpQSzFwNnFBa1B6SGVnNS1RYmhaTjI3OVJsQklFUjlXVW9pVUZjN2dZa3dva0ppT3MyT3luWHZ0SVdGVkRiek85aHJpRTVvMUJaNW11V0NkdXMyXzRLWUZ5UUJKa25jeTBhbFp4eVNtUFgzMVlCRzUtaEVMXzl5WDdadnFHTDU4LTFfOWg3SVRrNTJ3dXlQa3dTNEdwVzRRWEN5akpRSEVqcTlkVm90UXJzdTZHX29nMjdLWlN6UUkyWnl0UXdHYVc3UW5mQUpwWktneTlkRHRNWTd4Y2JyN3ZUczJxVk1mbVZvRzBzd2I2M3FpRDBRSXV1MzRPb1hWa0RYRHRFUHdvU21hYlY5dVNvU3pzYVktaC1jZXo5RnVubktMT3hQX210U24yZUxCdDh6VmhfRHc5MlpxWmVqcUQ4dW9fWnpYRmVXUmhtSVFJamdaX0o1OEZ5akpXdXVGaHZldEN4VW1xRjB2YmhUM1pLUEl4NENCSEw0V0RaelNfaldoZF9WeTJieWZueFJ2aWo3OHV1dTBoUy1fdGZ6eHVlQkNDb2ZESVAwZFFMQ2FHQWtpNGFFNEsyM1o4c1lCOW9QeC1ZNDFadkUtX2lLdEJKYktqSUVJN0tHSy1zdHA1MHZWdC1nYVphQUd3UWVwU2hKY252VEoybVNmUzlFdkM2aW5BWjBMQjYyTFJKVFplQVI0dHZMbExBWEFJTUFzbk50ZlgtS0t6anVwcldMWS1pblZWdTZ0U2U0amxMN1FCRUlpcVdGYTFlYllXYnVLTTZRbDAzZHo4RG9lRDRLUHFUR2ZKMFZGS1U1MG01bkRqSTVWXzhwdWxkeHZzazlVd3RxTTVmVUJnNno3a2xuREU0ZTc3alk4UUotRTg2Z0ZBVC1rS004ZmN1UEQ2Qk4wa3g1R3pnQV9jZ3ozSm9LUnAzbmR5SGxCbVlWbEdfNTd6OXAyYUw2NnFBUzhTR1ZIZ3R1WmpaemczSFZaazhSNzZPYWxERjF0TDBfUE1qaUxleUtMNTkyRk9yX0R2STRyVVFrQVI1aEtnR2t4NjVvd211VzY0M3UxQ3lzR3pKTFhic3hlbkNLbUp6ZEtyV3MtV19TRnRqS1BQSURBT205Z0UyQ2VVSklzZkVTX0N1OXZMVkpWT3FVUktWZGVjQ25YTzlxcXFZazRhQWtqRkZuZ2xjSTFydldRS1M4czItaEotdGQyMzFCcFNvU0FMYmVQaGdwTGowUGt6TmdhQW5PbG1sd05vZFFDdVJuNl9EUnU1ckxycHAzcXJVQmpSVmwzSk5hQVcyOEVWVkhoT1hHbGhQNE1fSzVqeWNjRUxzMVFSb1Z3M1BfU2NEdTJKbVBmeGt1V290YmlIZzJNSmJVcV9FcGxnVWdsZHNlemUzeDBUOXRqSFpMa2xFc3pHUWN4ZVVZeDBnemFRTi02Szhzd1pnX1o2X3dHcDl0bERSSU91X2xLUTZZc2J5bFd0bENkcFNpYzI3bFRELWltNzBtT0R2MEg1OVl4WW1IOWJFRTVsX09oZ3NFcExESGQtOHlPTGIwYURKWlI0TjRLLThBWkJxTmtYODJEUGk3WTZjdjNPdnp0UFdiU0NBQjRZWGxIc2dwanYwSkYzWmhHQXNrZGNsSENEWko3Y1J3Y0hSLXUyRFNwOU55aUxiWHJzcFJLREp5SVl0VmtxY002X2JHN0Y0VFV4VWhFV2l0R19vSGZuU1kwUnRUajdXNmtpWlZjekhWOTE1NTY1SWZIVFdPaWYybGxsS25QYzRXZlNNZHJwR0JqSXNEX0NtVEk4TTF1cUNCaWczcG5jTUluR01xNmJhb1I1OVZ4QXkyZEp5M3lTSDZtU3pjM01OMER0cGNNZjgyZkhKNi1LNkFqYUlTd2FGaGxmTF8tY2hOa0NHYXRmU2N6NXBLMWZEX0dUeFdLbXhIYzVrX2ZLcDZ3UkZaQ0xQclpBYy04cGppVjQtNENxOWRYOExJU0ZJWUFBdUtab20wck1DUF9MTkcwUHJTSzJOQlBoOG4xSUM1TDNRTjZsTUFpS29QZXVSVzJ6Y09RWWdiMkZYQnZHMnYyc3U5c0NuTnlteUpsRzFjaGdVUGVzYzBHZk4zVzk4dmhyVVlsZ3dWSUtNT3gyYkRSVndlWmdtcndUTXp5WWNBbzEzbFpxTS1vUkc2b0ZaaEE1UUo5dWNETFgzTGxqRERnOG1XaFIzMEJhc1AwQ0EtSzhEUWZVT1Z5Y21tMy10THRIUWRYMUdhTzQyVVRxNkdzWHp1UHlCaXUyUVY0bHN1S1l4dXRGcVVPbjdJYXVSTGprM0xYZWlnakJoa2Y3Y2dGbjJjQXpocFY1SndON0JMZ0JtM0RvVEFmc2Z0OUVOeXFocUREWV9uR3VadlZoWjRYSktLS1oxNjJwcjJLYVVnbF9uS3B6R2M0T0k3OGhLMVU0am5RUjdZdWF2NUV5OHVqamI0REZFOE03aGVvUUtQVlFqNUpzLWZCaUtPY2x1eGdXU2FvWm5BSDRHU2xtTzJxZ3B2VUZQRTdDM29kOGdXQjJxRVZVaVZtLVF4NGdveWVvSE0ySFdfdzdvdnJSb0x5NmpwYjNZNV9pbnBSaElnd1VSSEZxN2F0aWh6OHByMGZzNjdfaDhOS2p5a0R5MDg1MU9uYVBqNnN0QTNqZVBTU3ZtWTFEQTNsRC13Z3hMZFI0TjBCbFFaa2V1Z18zX1BuMWwzOFhyMGNTRWFjUndFelMxb2pJYkR4dVM5NEJBd0FES3JYeDFIVzRQU3RmUTZYZmpZXzVDeDhReXNZMVpsVkd0ajZzQ09remtQWjB4TG9FdmVUQlhNZW1hREtXSDRPWVgtNFVxVkpJMGlrOFFEbXgyQ1NPazZOVnZKcTZGNFlGWWNaSEpvUnkyS1l3OEgyV3Z6ZHBoejRTR25zTmsyN0dCLTI0b1ZaU0ZlMXlZVnNHZEVhaFdBU1dzcWwxV08yOUNkYS0zWkM5cXl5Q2VXSTRlSmFhUHlzYjZ2UDVUZXdPU2Z0RUM2MkJiVTdVeFlmbVRjOGlKYjVlNFk2cnVtSC1HVHhJaC1OMTZYdU5qd0lzME5LdHFINVJQNFRsSFFUWjd2djBUaUEwMlplc1BBMDhLeXdlQ2stb04tV2EtdHVGVlRtbHI4YVhFdEJVcnNnT0hocHdKWFJDMjg5TXpBUW5SREtDclFDeEpMdnpWczFiQ0VVV3doY1pmZGRxWXZ1OTY5NXhMNmJFWEM0M1VzcTJ5M0VwUklIMEZSMzBpOXY2T2Z5RHk0N0N3ek1GazFoWWh2U2FDVXR5Szd6SmFDTHJtQzRpOU9rVjNTUDFyejhReUY0N2ZKNXFxYUg3eXc1VHdqTmg2RUdHQmVSMWRwWUI0N2o2S09MYjBSUWlXVkFjX0xKZ2trNTRURWVZeTZLbzlHeC01RGkxd1h1WFdTeExRNGNtbFJnN2dLdktUaUk0LUx6cEEyRWlXUktKMHNEWHBiU1RUSnR5UVlXWG1xdjN0WXNMcFFvbnJtTEpFUkNqaGpsZFRkTWxmZUZ5VFp2T0c3ckVpaEFsbVA0dHJGazIxSGQ1b2FCc0g2c2FsU0hMbmY3Zm14OHNKdU5sQ0V6NlY3dUdEN0pZbS0xRTRJVDNmazFsWWtRdi03TmFPWDRzb19qNmdKMmlHbVdxTTl0M0hZYnZIQm9kSGo2S0FNQ3JFa25rRFkzUTRMYjRRZ3R5U0V0SnhUWEZZcGdibXdhOHFxbWdPY2xDeGlzSkJ3a1BwWjhtTFVMcS10X3dLU0oyTkVmeldRNmJ1dmNIZmlUNGdaYUpZQXV4VEsyZmlWdmNDNDFQNlY4eWN5aTFBaG1YYkZGZHR4T1F3MEhpMFdiMmk0T3VvcTJFalFyQmQxSURfNFNRTzMzejIxeDVGbi1mN2R2Z0w1Vl9SUHd2ZHFUN2tYUEhqOXh3cHczNHZ0N3liVUszenNNY2MzTnRxcHZITXh5aFp3cndXRWx1aDZUbzFCMm5GblNJSnByRzNrR2pjMmpBcXJiMVJmQ1Zlc3BkQVFLVTU3bVRiT2R5TlNwLU1oVkhkSmphMW9RNjI5UWNheVYyUTQ1OHgzSHk2aFJBRFBTUURuNUxJdVIwLW0xcUM4Sm4yR2JROTVEcjhpNm9pcVl2eVNUTzBWU2p5cFBidjlWZklTdDNxUUNScjJRQUxZSk1WZ3BKZG94M053RzV5Vk12SkZGZHI4ejl0b2d1bmRKUVc3d2pUQUF1ZHZ6QlNJTy1uQzAyM19QcGJTbjZOckxISnFsa3prM291Zy1oaHFEamphbVhiUDRMcUc2aGxUQS1jb2s4X2tWOWt0LUdRR1E1OFAyd2lsQXRNY0x6cDF6SFBIRFlRbHozWFgxODdkR2N1NEEzMmVQTTdMaXlYWjNOV2lSYi02dlJYcGUzS1JxMHh2S2xJbWJrX0tXMmRxUGdWbF9GNURWWkhGMGl2cG9HRXJnOE43dlBPdTRKY19YYjVmdlNxSmk0NGVRMXI4WU9lR09kVDZ1ZEJwUVM0MVNlSVVHalBYM1M5WTFhTDl1ZmtVWnRjQWZXR212MjBQNzJFeGN1ZFBMTnBpT2dVNjl1cDF0eEJ1SEhocVd5SEhJZDR2dFE1Wkl0RjVnZGxFbU51MmRZSWYzcXJGa3owYWhZdFlJS2c5SGl4cmFSZGpOVXlQalA1WkdLSTBZTG5NVkVNcDllNDdtWng0RnFoajNaSkFzSnZHNDFWNjBFSmZfdFNvWnc2UE5ab1pCU0k2MnRDSmdrVmxaZFBfd29rbHdJZmZFT0RzTi1tX2labWFBTUcwVTVRTzNqZGVpeElsZ1NoS2JfVWRRSXlxS21LdGpwZmk0UTdMYl9Pd1lScjhyUml6NHkxWkNDbXVqeHJLRFV0YmdqOUxqZTBvZExTY25aVThfN08welUzbHpBcVZlQWxRcUZ0a3Jjb2wtZ0xUcFFBQ0hnaGxUazl2OU52b2pEOUkzZXJMQVJOdkNTLW5JREFuMmF6TWsycmZmWC1ndXhqWlowN1RjamtQVWo4UWVfZDBSZ0FRb3NKY1VEZ054a21zWnQ1Q2ZKblN4VmdzQ2ZRelNzZlA2Ty1yMVBIYUxlVjBqTkxkaTdneEgwRzBDdTV3ZEJqbjROOXotTzRvWFRkM2FnaFQ3aVBSMHQtZGZhTFphVmFaZzM2YnpsenlaX1RCdVZWcWFEUlh3LXRMeVJYVmUyNXpRQlotOEdOSmtLdG9hMU1uTUdUQ3BTWFZLQ0w2Q1oxS3hyc20xRENTYWVSSGFveE5aTUNmTExhM0xNZ0dKeV84UzVIMDc3QUhGY0w4UUxBc0thOWQ3NkVhdFM1dVduZW1UX0xKSkc0UW1qSmVWVXFPT1U4MGY4MVBaV1psRTdMQzIySjR3SXlLOEtFMzdIdXcwZ0MtOGR1dTVYdDh6UFktS3VEMHpfdjZFSHhpX2Y2QkNaRVpJY2stVTdjOHNpeTZXalpDWTJheGd3Z0JIX0lmQWxDWWplWkZYMFF5MVR5VmtMcUE2cGNMRW9LdnFfOS1iZjE5V0JtcEpfRGdySllsejdweE1QQ3RxY2pjazlobzR1Q1NlMUlTR3ZQc1ZhemtwYW1ZeUNZRGhRNG9nbWVaQlBlTDZUWDk2WE5FRXVJWkpCN05vWTdBdmxJQjRMd0s2WVoxakRRMHNSVlJkZ1JOZlVUVTJSWVRZbVRVZm1ZMHY2d2pPSndjWkxfaHIwY2JCbHFOdXhMWFY0Y2lIZElaOTAtMGRJbkNUS0hsdkVGVl8xWGF6OV9HU3RqUUtFckFzLVR2T1pFNnZrX2VITm1kR2FWMUxrLV8tZzdtazVRMHZhWU9mVUtBRWpVNmp0UmR4Z19XOXZTUFBXVHJ4UkVIRHhocGkxcXpqZzFOLXZEZElwWnhpclk1Z3kwUkJBMHNPVjFxT2hOamQyQ2tjUzlXT1pOLVIxbWJiSEVGTm1PSm1HZVB3MDAyZmxwUmRMU08yNkJ1RnhwQWFlT01aZ3dVWlc3M0NrbnphcnRYWDBod010Y254bUZWSFhWb0l5eFVoN09TQVJUQlZVN3hlUE1mQXZjRnRzeTVHOHZ5eHhIZ0xmNEVJY1pQVkRzbWp3ZThvTk03SlhrV2Q2d3ZLdzRGNDZVOTNDNnBVekZKelF3QS1QU3dOMHM3YTdGYVN4ODlLZTZwWnE0WWtOY0dtTnN1WHdoSjl0YktoNzdtYm5MWWowU21uamFwLXVkWlhsLVdPWUc1R2RESGZGVmh6NW5kWTh4bG5tRTlOTDNRNmtOMTFScHd2dkI1TWp0MERwOURQTU0wcnQ3NWxGNF9xc0VvRVAzamd1SHZEdi1XQlAyc1Npc08zSXkxOHQyVWNndWV2a3dPZFhyb0RGTkVzWkZ3Smtaem9NSDZkMXZFc0tPZlZXTkt5WlRqTVJ2Wk9fXy1STnU2R3d6U2g1Z1haTnk2ZHFueVV0N0xKVnFLRnRXZGRBRFpiQmJKMEhVQ2QzbWpMTW1VT3pSaXE4ZjlxUU5aeFRlVGZfYXFMbGo1TU50WTlRRnhxUXNxVkR1ZWVOVllkdE0tZ2RPdWdydmRwYkpQeXFOcXMteHVUWUtSclRzeTY4a1VCRVhHT3hDMkQtLXlWU09nd1l3Tm55clhkOGVRb2ZLaEZyZ0ZNejZtYWVSTXNoY0NmU0xBU1JvQnFnX1dnZVRGUWxnNDViQV83a1FHTEJpSGV3MTJ5UmtTdldzc0tQUWc5Szk4emdib2FmOEJFTDBjaV9ZeWRJSU02OEwzX2ZPclUwMExXS0NVNGNHNllGVV9yVG5PMmlxM2pQU1lJRG5VcTRfbmNnbllPd3ZUeDhXTVpKLVdNX2NESGhfT0NaMkI4ZGZWcEdHYWZBYnlqcE1CcF9vZ1lfTGhXNDA4WGlla1IxY3dLYllqaUZIczN3ZWNCOG13N2R4c25fWmd1SDJmei1KUkdnQWpmd3pOdjNNOHZWRUtmc3hmZlhTVmxuZmsyR1gweExCNWkwR01fazAzQTduUVpCQzRQTVhqNlIwQkI5SFdEOVF4aFdMZmExTjBTQlpUcWhDamh3YjdkMUFHWjBxWHV3bjRIRmx5aHk0RFVPVkowUnJpaWdwcDA2VVJpSFBMOVJfa2J4eldKVDBpclR5YmJfR0dTaER6RzVxOEhyOWRUSmtWTkc2QmFQUmdINF8tQWtuVlQwel9KVm45NHM0dl9lc1lCdnhVOEN1aVRNVjBaMTF2Y2E1cVlzd0tJVG9aVFQ2N0wxM05wN2VVZVhIS2piNTdJWVdLTXByYkVZakFHTTJCWndHdWhUSVJJeS1nczZsY2NqMzcydW5aeURNa0VMV1NOcEIyQ0ZVbEhFQUVuREtPMF9FMjRXaHhXRjVoU0lvcnpXUjVRc3F3cWdad3YyOGhWM21abFZ0a0tlWHZBOWJmaW5qQkl6cFhlWFhHeXRicXdBOWFaQ1VOZHpaRUdsUlpTNmxuWXBoWXdubGh2b1RnRnBmVWR2Z01BbzBmN2JKeDF6WUVGcFZVT1o2RFlVWmNnblMxb3hTeXRGbEdUcmNXMGNKQldiVkpfYmlVZ3B6YVd0UDdvMEl0RE80UlAtOVVuY2xQb0haeEk5UFBrOElQVElVWWZvNE1jMHprMHhNYmowakphZTRjVjF3d3JfNVVBYVV6MTBxZmZwTUk4VmFZZnZBZlRTRHN6aFdSV2llMExUWHJ4RmU2RER0QW5LVlJnZlFMMmVyVzNvZDY4S0YzMGRDWEttWnlQaFhkMmgyNmJCVmRsU0stX1MyaFp5VmlicnVaM0VWRGlQal9hLXlCQm95S212VDRXOTlMLVRLTWJpY0U0T0VZanJBMGs4RVJMeVlmcVJ1UEl2SHFTYVpkbXZTaG96NGJJZTlXM08tMG9tY1VqYjRBVFFUUUEzSlFtdmlxR3VsNUlUMGtnWjlVM3BiSi1NTWhOLTNCM3Btek1INVg3bDhlaUZmSGpJNEtfamxFMElITHg5cVRWc2dXSG1OUGNzRi1ob2tteUwtNzkzUFBsb240b1NhY1kzaFM0eEdvZGp2TlgweDZLZm5Nd2Jqak1fbkIydnk2MGkzbDVXbGpTSUJTX1hrWk42NVNPMm5JY0FWZ0FMOVZaMEJFQUVBc3g0aVFGVTNGLVhBOW54WDNmMHBmSDhqWDlkbVZYd2kyc2Z0dWNtWnl1Y1ZILTN0X2tfUU1JX1B3NXNIQWtnNVYwQ1RpenJFNzhYTEZSV3U2Vm1XNk94UFAwUzlNdEN6eTZESElpVmtHa0tTNXEwQkFmS3J1bXhfRGhCMWRreUY3WWJvdUZMZ2trQVdWTUNUNjdyQWVKVEJNTjlUbVRwUmY5RkFqcnk2TVdiMTBuVTZweC1QMEJRV1ltZl9ZSzdBdWZQRkFmN2wtb0xya25BZ3duWkpGLXZWYjVyZ2hENUF3c2FMbTRuUkhDdEF1UVFfMnRZcVB0STlkSmZpX21Kc1VWdnZfd0dsaHZKUXNpQ0p1aTRkYmFKR2FJbzlWYnJVanl0MzFBUnpwclVRWnM1bDJ1WWFwSHB1Nms5ZVE3WXluOGpLTHBabVBxN3F0elItdmVqWU81RmJiX3JGdFZJYTNNU0lRYmR2MS1FNDMxR1lXUzRHcC15TU9ZWHVUMnVGb2syaVVjOW54SmQ4WnZmUVIxMXpHRHpuSU9NYy1Ba2tiSGJQOUF5Y2lUb1BYQ2JvRDZlNjBtOHhJZFNkckhXaUw3R2lWVy1TTmppREY3R0R6OEYxd1N2aDgyc0JnZUtfZkhONUFNdGZ3aUVIQ21uV2kyRVFNUWZaenRsbWdjSU8yOXJieVpJd2xWU0plUUlqV0xVdnFmcVV4MDZDMUZFMXI0TWFvQnIyUUk2elZQMDFTeFZJRDVONEN4Rnh6Ukd5bjJ4LXJHUktsNE1VbVFjY0JQZlZqQ2VYWElSNUVNc3JkS3MxSGRlR1d5bDg3MHZ2ekxrOVN5RkowUFhzZEk4MnVmSWtvV0w0YW9tUXloQk56TjViWHM1YlpQTFVYZlZLeWN1NjMtX2FVcGNPR01iRGZmNFo2bEpNMFJZeFJVclJKLWkzTGtOQ21CcE9vMXVGRHRKaXZtUE5oZ1dMLTc1T3VEUGlQVXQxRnM5Z3FyWGpBWDNQSlE4WUNSZzJld2FfS3Z3Y1RQaXdQbkpJNkhRVUYzaVRKM09wWmk5MkM5UjRVMzk0akxYNzF1TG1sT2ZsUjg5eF8yYUc5bHdVeTlXaE1HQWY0QkMybmJVR3dVZnZoVG5ZTm01dERleTVoV1AxeElxQ2Z6NjB3SDVHMzgwQmZsTkNvbEsyZ0hZS2trN083ZUJ4TDdrc1dUU1NGSXJkRXZ6RmZmdWNpc2x3QjdxX1poRkc1STFKRUNNQ2JHRmljM05Tem1aYUljM3lnRnMxV3RqeF9lcXFKZTJIY05hMVVJZGhTeHctc0t0UGppNDlDMlNYVWdPbG50NkJfZWN1MlY1YUZqbmdKQ3FIUWlJd0RvNUN2Q1hBbE42aW1QWEl0eEx1V2Z6LUdRNkdpd2V3Y0FIaXM4U2RZejBuY2tUdTluMEtYcUtmSTNkTERLSVo2aHJ2VUhJc3JtVWlPa0ctS0YzMU1TZ3dMVWc4SzVMckdEb2R3dEdpU2tEZTNGUzFoSXNKZzFLR2tNTFhVRm56WHdFbzhFdXNqb3BfQXhZNURPamhTUmliTDRYZktibzNtMTVORzVwRWM0S3c3UjYzSDFoS2V1dW55SkRtUHl5QThsdmlPeXViem1abnNBMHMycTRoaVozMDRYVnk1bEFXX2xUeHlVODhXcGR0aV91RFdqTy1wSDFyOFVENlIxOUVRamdsS3NGbXhLelh0bzE1QVEwcFVEbnZBaWFzZGk2bmZnUEFvcW92MXFPVkprSkJYMEc5bThGaGx4dTRYXzMycUlRbmhnbXJOd0pSaTZrbnJGQUUzR1NpU2p0Z05yWENqZEowUEV0Wkc5bE5WNGZiYnM1VUxUMjBhbXJyOGNpWXB0b3hqWVRDd196cXV4cTIwU090M0hiZ3FFTlZxMm9sa1Rmc0xtSlZVdVNuVzNEcXVGd0dzMTJYaWNsWV9uSkJwRUs0cWl4Y2MyaDNqZFRtSXI5YnhWb245a0t3MGZJbUEyOU4yMGVMZURpanhTNTVCUTRuTUhzQWZmdG4xSU1BNnA1SS1ibFh3N0VDNzNtVUFTa2kwNVVCNVU2cVJJcWpVd3FNSXlydGVpWWtRR2lqa2lQSlZRbmU0emFLOHE3MlRlTUw5NXdRTHVoeG4wRnJhNDBFMkhuTndhbklTSjFndlRUTmUxZVl6WnRMRWFWcFFEOFZQbGJ3UC16YnJmQm9McTN5MVRfOU1jVTNTV2dXaWRScEpUTDlzdEJ5ZzNoa24yQnNiZHF4N3Y5NG9QZXg5Z1l0SndlSEFuWFkycDNnLVlRZGltV1ZTLXItNlFSQWpFMUJtNm13RElIaE1sTlNqbTRkNmljYkFxd2taelU4YnNLbDB3SjFqanNzT1pFdlBGSmxiNEFCRE4wQ3p6eGt4TTZhcENKOTluQUdOOC1CYWYtbmczT0JIWEk4R2JTZk5RNEZHYkNaUkdWWHd1VVppV0xGYmVyUEFtTFk4OWlTaHFNYjI4azZKbkNIVjBpQWpxWmhxLUlQQzFBSjVEa1lXYnN5SDdLQmdKTy11YlFQb0RIYzNmMEVhWEFldDdXVElRSGpYT1hrMFoxYmR0YUZ4dEkyeHdYMlNNYzEwX2NUUFNPQmJLd1M1N2VTX19kaUZZSmlVaXJnUGloUFJ4endjSUlPdTMycDNuUi1lb3pMQzF2SjR4RERNN1oxcFVma2hUODhhcGhMZzV5SU5DWnpXdlRUaEgzMHU1R1JpWUZyenpnb3Z1TG96OVhBM2tXTEV6LVNCUC1qNkFfaVBPZmd6TXJUNDBpMTVpcnRGc3pCbmNfUE02N1JTS2pvc0xabUQ0Ul9MLUp2MkNlZmxsZjNwc3NUekNVY0JmMUR2QldONW9rUE5MdWxiRkdQRkpjTF9SNzNpdk9HZEowYmw0VWFmVGNvNDZiUVdMWm5oRGwtRWVkRVhsSV92c0w3U0NKUEdlaktnR3pFTkVNWVljUThhenlXNTM5RTd4THhWTHdnTVNySVpFSTVtYUpsLVNTd1BNcm9pX0p4Q3FwcTE3dWNJblBhcENFSVJ3bzN2aGpTTFY1eWR1YjZJOG5SZE1Tdk1GRHNVV0lvcjkzeS1Gdm9jU3FWV0NHb1JPM2VWNHFxVnVlWFRBb2xSb1NrNkxkQWJnMTBQb0Q3R0IzZ1hzZVdHWXZlOVlSQ1NaQ2s0YnhibkdseXlOMXdUV1RGQVI3OG8wMlA4SUtVM1pFQjZxR2FEZ1pmVk9HTEZEWkJya2pncHlGeklKdldMUVJfUzJsaTdzMVR0UF9QSXZBNzBiMDhlX0xmUjRQVFY1NDFGbGY2eXNjOEE4RTVLaXNGb2luLURGdTZ6VURvSEtHUWJieEV0WHJOTi16ak5GRWRreTJGUzJEdzFLUXVvMTV4T0FKc1NQOUl4R0hPcWJDVEFUdEJwbHgyZWJ5ckZMY3I3WTloTWFqMUhYZGJ5Ml9EWUVTb0hkU1M3NjVrRmwtemwyamJMVlNjWUZwY2VyOTlnZFNyMkxFRVQ2NmxHV1J2RE1JUlRNa1VnS1c1RGlvQmE3UlBoY1JBSWF4aUFBZkRfN1VvRjJUaVJrYUxPVUpXVDJQdklOWFhzRHZnX3BnM05YZEJSX1lLNnpTS3RHTk1oVUx3aTVIVmg1YUhPQTkwb1VuNE1seXgyekhVU0QxcEt0NU1DNXV0Q3FvS1pmRWVpSk9zOEdpTGhtR1VFNm5DZV9mazI1RXR3dTdpOUxtNnEyV3A0b29KSHZYUkFCekRqakk3ZVJkSDFVQmhMTkJ2c3ZrV1B4V1Q2UjJDcmZ0YVlnQWtYVlo0UE5BaXBWdFlveTdsNkZJM3R2cEhNdUtGZU9BZGp1ZThQWTZ0RDhWY2p3X1FzVXIyLXU2Y1pCRDA4QkR3SVFQQ3BSRkU3eGN0czdJZGlPUFlrTFd0b0s2eFB6TFVxNng1cnVUUHRXS2ZYSmNDcmxCSWFFNDhHaHVGRHNiMU5kcjdRNjBNQ0Fwa2p0dXZSYkdqSTR3S294OTJfeDhrODFqNTZSVmtoSHltd3NqYW5OUkpON1lXYnlFMzA4WjdEaEN0aFcwSVhWeEYxcnJBdHFmMHlUWTdRQWF0X2tSSml3Um0xVkFQV3locFY0UmVGVjBYSjlhMnNmc295cHpZRjhLWFh5RVAtQ2NaTWpuZG9fdmRJNzlLUVNlOUlMV01zd2xMMy1rZnp0MVctOUhFMnBXTk5RWGdtbXBWMlh2b0xIME5fSXRWWUt1bWxwLVptZUVVR0YwYXZ4cXQ4M2JGTmZjd3JhMXRGLXhLLVZqVnpHbldsV2NmZk1KWURSRG1NOG1fdmZ1Q3gtREtKdzlnOGxJMEZjbkZXTnBkNDVqbzZEMUFZSHpOTHNoa2FnaFpLRnZkTEZkMEVQNWZwZ0QycVNITEMzcVNsNjJyVFhUOWNsWlVxNVlzU1Y3akFPa3JodXFaTHhOc0VVUjZoWUpreklBZXpvdjNsVXpZamdoaDlNbjUxY0szRWVoMzltRE9mazUycWRKalZmelVIbFVpZGloTnMxZlN3VVNVaDRCNHlUTFYtcloycFBJTjl4MTlGUmxrREhrY0JvSkRVU3A3QllvTExJYXNiNFAtSFl6bmZDcXQ3WGlmSEROX2t5ZF96Umc0LUhveTZUVkZsTHJ3NkZMZHZxRmZVRjFPM3ZRY1ZzN196M2FKcWpDOXF0LUI5SXJ4YWRYY3Q3ZW9LN01aeEdObFRHMlVOejBwc1RNaWRGaVJadGFHdjgweEQwYzhjOTFmNk1UYUtNbVhaaUdTMFpGNE54SWlYcFN3b3J4bUpCVWxBQ2F0bHZ1X3VaMl9vSjI0dnp5TTZhZ1VuTmlIRTctejduYWZKb1BfVXViT2V5ZzRIcG1LcXY1SHVwY2l1bldwQ3QwQUxySG1LdjlNX3hzZHhxbHF1NmZDZkZCcmtHN2l4a2k4OHZwQWJWbE5NR25CbnVzWGFrQmFFai05eEJXdTJRYWdRWGo0SUpkUWdWZHlwZHZLZU1HWlQzamhsdkx3Y1E5bnN1ek1tdll0Zk5hRGNrRUhNYXV1NjNxN2hHWUk1SU5FcGR1QzMtdEYteGt3Y3Z0aWtOME9SSWdPVXIxb2JGaEkwbV9ldlg2R3NEekNGNWhocGs4VUlybWw0TVRqTThIbVBKV05QbjVzUGoyMHJJVWNRQTJlWkdiX0VTMEJBWGRPUVdDMDdCR1ZFN0oxc0RiLXRoMTRYbDAwMUtLekVBSE1hekdoZWZyRms5LVMxVFNpYWNJYl90dVR2bGsxOEF4M1FGWWdfMHFSN2QwOHd3VEVCYnhBdWRRVVlkcXdrNTFUYlI5Vnh3NW1qQnNfcm9WYWlzWkowY3J4czU5d2tsLWN0MWVkYXZnbEhXV3NLZ1VyVnJqYVBjRGNDSG5BRlM0SHZJNzBCQjdDd0ExU2w2bGlqa0UyaFhCWHNQaXRBdTdZY0duVGtpMTBWeVIwaXJiYzhSSTFoTFF5a19nN3VjbjQ3eXM5Z1ExQ1pTZ25rUEwxNUp1TUlIUXNqMnh0QjVhcW1DMG9vOEhONnN1NDdDV2pSaG1fMFJNNkVPVkRpTXA3VWZxbkRXcnRqOXZocXZaR1U1VGVBWkRuOXFPa0JNUWRRcWhRSkN6LWd6cUdTSzFPWDJxdFJFX0Vzb1F0SFpXNkxHc1hNRDd2b3VfRUxuVm14S29VazN1SllvQlRhNllNanVqcHg3UUVySmtjUkxRLXFsb3VLVG1aZ3lvQkFoQVd5UEZTZzVXcFJDZmN6TFNXc1JRSjc4c0ZrRlRCZ0NaOXNueURDYnoyYWdLcExJUXNlNm1RZFBRMTNFckQwcjJ6cWJyLUo3NmU2bndjWWpfYnFmRkZ2WW5FbjQxaHVOSzJQQXJqaExaOGxSSmdldmVvcnpuOFZVWmRSVEtQWXZWQnBuYlRDTC1ISXNzT2VJRTM2SXFHaWQ5NkZOa0pUSWZlaFMwUm5ub1gycGhPRHNXT2V0STFsZXFfLTJMQmhwZTZkeS1ObmlNaDBLTnZKM2F0RS1wMndRQkx4RUp0YTNYRjN3ejlUdmV1cFdYdzhkclplOWtlV1RrdC1wMklfY0xWMEpmTUFWV21ITG95Z0N6d0kyQ1ZMQzJlTlVZT0NQdHh0YkVsdWFtRy1HMmVMS1RWaWdXTkNuMFVvQ0ZjS0llTnI4LS0zcDdvWlFUbWMwYUNvSWZyWFJibDctYlF1S0RPcXJ0S0tnVDhvTmdFVHBsVUVVd1d1MWdPYXdZdVpjNGtTZFV6ZTFKSG5YOWlYeERla0pYUnI2SjJkdm5qdE1GcVRfZDJ2Sld3cGI4SFlSX0VQbllINzEwQUdXT1VYM2Q5RzRwRTBza2pRZjJLREtzRFZJLWVtTWNlTVFvNGk2cFVmdFJ6aEhpSjVfeHRsTDBLQWhvUnB6VWhwbmVPSnVpakNmQWdXUTZVQnhnVUpXc1pndzFWbGR2Q1Y1dGFHQmJPUjgwcnJJWmp3TTN1V0xiU0tobDAtUm91ajFwTEMzVHQxU20tWnpWT0otMGhCd04xVENqWXJDbEJkNmE3MGdkVWtSY0prQmMyNzJ3OHE1cU1ZbGF0UjVwNWdwWkk1WDlqZG55VGp2YmdGTDNyeURxOC1EcHo1VmRkOEZUMHNHTGFvYUJIaGpmcmZGdGZfUTg1M0YyN2xHUVVRR19aUHV0MUd6U3U2Y3lUc2pMTjlDNTFuUl9pVUVsV25zb2k3eFFhQy05cHpwamJjTGxoM0w0WXNyck9MeU1jdlIxQ0lnM1Q0ZFRxMWFnTzRxUjdGa21RMzVZT2Nwek1ncmlPQW5lV0VhcGo1Vm1QSTQxT0NDcXV3QWZrVVpsSjVPNk0zQXEzS2xRbFFHTG03bGJETkxTaUJsVlV1SmwzYmFlQ2xtR1E4dU5IcW5LTHZvZDJQcEZleG1SZHRWZ213UTZwM1dwR1QtdW1ETlpvNGx3M0ZEdU9MSG5pTGpkWC00WnlWNExwQVdGQkNnVzFIMV9YZlZOQzRKTEFJYV9JMmlFSnlDQm5ESUhEYXhPdlAzOTNmWTZXcUxMb1NBV1lyQ2ZtbFBRZ0xBR0xWdzM0M1BTRXdsMVlEdDUtQmJVS0tKMENUM2YzeGxsSXdlYlNJTnRsOWRCWjJYQ1NiaHlVNVJDVXdvN2NUMU1Mcm42SU1GU0pSQmtsRDNqelIyTFAzNnBaaXNNUk5SYW9kRl9ZQ3p2MUxENzBNVGtSN0JwMTdBakF1Sl81NG8xbko0WEllXzJJTlFQYmlJajM1eDVPTE5oeThLb2xZdWtxdjV4dHdvakZzdFRrNjU3alV3ZmdyanVVOG5QSWNCN2daVUUzbUJ0VlVmR045Wl9ZMEN3T0hQUElfcXJtazhQYU1UYk5lV21RRHF1c1B3em9wbzZReU5LX1p4SWNKRFYxbXIxSGVXR19ZT3FkdlVhMHRscXpwa0x4YTJXeW82a1JGTjZLN25tUGFjckxHQjVNU3cxRWdTZThxbkc5cW55eUZUZTgwN240WGxmal92WEJLU2RJM2tTNVF1Yk5yQlFRdUxnQjRObC03SmY5Q00tMkFYQVVqVDItZzRVMHFzUlZlY0pUVG5mRFlCSF9XckVvY3ZJMkMtcjhhVjQzOUpTTjJqU00xRXVKT09MLWpqdEJ4UXZIYVhScGhUa3UwM29wcnZib0N0LUlOdWFwYWNXd1NRd2tLT3hTRWhZbG02eGJ3VXAxcnRfRW5KT0h0Y0hkWTE0SW9Cd01reFJhVG5WYU9wclNSTjBFUHZfSFZpRWZhT2V0VEdUVlE1Vl9RX2VZMGZnZkxGQWx1dzdNNWV0QXpuNmNvUnNtcmM2UlNZZWRmMGcxMmVjdE12dHhsajVfbFRBOFczYS0ydzlsQmpHZ2pnYjNRTDh5NS1IaUN1RmdpcWxQVVFxMVNTZ1dNb3l1c2pUODZ6WTVLbE9YTDJXUzZXTUZ6ZkpaQkZOb25IZVU4Y1RoelRxM0FWNGlpLUo1UEcxakRaRlhvakpySURCM3hzTGZXdWE4VmVlVE9QdE5WTVFOeW5tdW5iNlhNeDU1Z2NsdU0xM0d1V1RoNU80c2IwY2xIN3g1TWJuN2ExRThYYlQtRjFZT0xWWUlQOFVjVXlUSXVDYW5qUmZjZTVBWE5QRzg1MC1QV0I5T3phU0RJSjV5YlNiZllUaTVtWjA4cTQ0SXJFUndqSHJ0b0JMQy1XcGFWSGc1S3dkSEV4REpjY0VSTjNqeno0SzN3QUtqTHFFWThjWWVOV1FUdkhoRUJOeUpLRFRGSGRKbmlLSFVNc2tUaXMtd2hpSXpqaHQxZ1V4b0tVMUE5c1ZQS05ZZWZRX1VnelFJVWNQcjdVcHpqNFNMWEdTb2xTakVxNEdlZkh2Skg4dlgtLXBIb0pqQ2hPZ3EySlJibTJSMkFMa2cyLUpTcmNkUXZLby1BM1ZOaUlxMFlRakg2R1lqYmQtd2JtblFkS0VjeE9yVVV1Q1lkc3dkUERXbEQ3dGdlSWU3WkpXaTJKRjh2ME5VcVBhMEUwRjBOQzF5U2JNMFpQaXpCdkhMUTdSSm9FX29BM2JfRDJuZWxscGM0d042R3YwSWNyMzJqTDg5Mm4wRWEtelQtWFJWa1JSQ2NXWVhDb2ppc25aSkVJRmJubnBya29mTG5FSjNBLWVZWERnQk9HOXJ5U0oyRlNXYkJyTEQ3NFluQzhtOXoyMXMzOWtwbEtsVkhoNVRWQklMNTBhTUZwZGVITll2ZHNFQk5WUTJFUWNSNll0Y1ZvekZPWWk0WlJ6NDZnQ2hsM3ZqaS13T0ZReHZyWnEzZ3RIV0lwVktaRXVpenpoYVZWbWlPQk52V1FUX2NfdThNMnlCNVBfeDN5RmZWem51UHNfNDNGeDZjZXhsMm1SbDVkVGgzczhkTzV1ZldEbDBKVDhzeHRZaDVNM0dXc19WOGRHX2xmd3JMeWpmUzRrZWtLTmJEVmV2Ujl3dEpzU2JaYWFvZUNBMGVZS3pVSTdkckhfdHhqeE5OMHE0OTFYSktOdEkxWGFFWnYtN3l4RU5QZmp0NFVXallCVGdLNDNmQVdkRlg2SE04LWhTYXZta21zX29OZ2pWSWtzeUE5NzV4cFVOZWN0aW1QNnJ6RHdUdnJkS2NOa09HdHBXbERiZnp5TjU1el9fR1hkdklJQzJUengwQ09KU1EyV0dKZW1wakpNUDE2bVpNdm5TeUYzaUJQYTZ5eWVYbjd1YUM2elIxU1BmMUlHTDB0UlMweUlNR0xoV0pFSnJtcHFEQWJDYXBoV0FTbGVsNjRBbDVaeXlSb1VjWU1QUWRuMV9haF9lbTFXTVBuTlVwNmxLYmFZVmRhM2sxR21TUXJEZXRBR1RiX2hiNUUwZ3hPU2VuRHNCQlpDY2JSY1B3SVpZVU04OFREM21lLWNTZTZXS1ZlVUtzczh4ZFJUUWF1NDVtMlVPYTF2Qnhjc253TDlhczdONWh2Z180ei1UTzduTGREbHFWdElBUmQxbF9DNWw4UWpDVHJ3UlI5LTJMSjdoclpuWUpLZmNPS0JlODY2M1ROZDhraTl6Z2ZWcmtCMXRWc1I0OWVuZThIbDItOFhhTktPcENQVFdQYzkwc1NvX19na2NiN1F1YjRya0JlcVZpMndHSG90WkFTbmtnUXIzLVBJenYtVEphRDl0dXNGcTNtT3lmRmFkalpmWld2TzVWR0IzM1M1bFFEMzY5bUtqRG45R3M0M1FmRkI4LU1DYWV0eENDZ25iMzNIdXN3OTdJZ0ZSYk9KOHlnaUh3U09WNDE2UGlEd3ZteXRYYlRCU19NNlNmM0RLNU5NRjhfQ3duRFdaM1lDOUs5UGZjUWxZcW96RGVZQllyVDZhS0JnX1JJM3Rwb3JoWUdXZVJnb1ZsUEktQUplNWtRRGE0MGJpc1l5djJxaXljTzNaTXFhbF9CRVZNTF9OWk1FSlRqdFluTUFrcGR2LWxnZ3FxeGlzN19pUF9KZkZuY0ZsQkd6N2tranQzQWhJMGQwbzhuRG5tc0k4RlZJdFFDdHpZemhwM002dEo2OTBhQnhlYkFiQURrUXRic2x4b0VIQmlobVM0ZnFBV216V2xWSHZuRnItd3FXalJKNjVteWR4RklhRHdmZ0dQZld5TVZyTEZaUWlITENwU1k2SjZ5dVFYWVRNZmVjSVZNNUl3dmNnanJscFZidm9VTE0tNzRaeHRUcFFHeXdQa0JIcU5uRm9JNEloUWEyZFFrZE80dURRUlR3bUwzLUh5M2NNWDliZVJpTHZoWEZzLWYtbmY4ZlptZjFMT1pzZmRPXzQxN1M1RExDbDJYZVZCcmtrbk43MmJZN0JualItNDZCRy1HOFAyUnNwNUpZeUR1QnpvZVoyM2M1WXZmVV9ybFBoVEFMMHVtN1o0c3o0UVk1bFdtLTNxenBBWi04ckZ3WGlGWUswdDlGbkxNZWRFdkVuSGEzLUp2MUpNcGZkSGVRb1ZheEc2RTlTZFhRS2JXRmdiclhFTDZHWkwzQ0YyQmt4TjdKdS1IM0xwbVlNRXZGNmtvUzctTzBjUzV5dkp3Yi1VQjZCaUFFOWRwUkt1MXNZZWw2aGxWSzQ3STlqVWJnT0t2YmNaYXdLM25JblhWQ2cyTHF0cXNQcHNoTHdBZGJCMzNIbm44OGRVcWZfb29VRkRBdjlOUVAtR0RIc0FJTHdoQ3ZTRG1WU2t2MFh6eUh3TlZsWVJDdEtxTUY3elhkVnlyemFpOTJRS01NZjd4SDMzMzhwaGtjVDN4bEI4NVE4dWJ4dWE4S0ZEWFh4LTZHLUdodUFHMUlxdE1fV050S1VGT3pLcDNqdjlkMmhOM0hJMWRWeWlrMkFZOVQ0Sl9IZVk1WDJtOVBHSHBCbVNMS2NhcnJVdU80SmtzQlVmZTRoX1V1UVEyT1YwaFV5eEk0NDhpMW5CTG5ySVBtazc3S3l5aThZSlpBRG1MRXdWTW9Bd1dVWm5DcmxTcHktdTByRGRaM190bllpRHU5ZG9aUEdZeFc2NkQzbE41WmpmYzM5Qm91OC1ka3Q0WjUwSXkweDJCbmttTzN3TzFyVFlkLVp3YU55WXJRZ25pdnBDUlJhcXppMURWVWhSSlM3cUU1NkhiSXh3Wkk1U2VhenVfcHB0Tm9RTzhvNW9CeEdFRkpFbmpyMjNTZ2h1Y1U4Z2swejA3RVdaM1Yya3UzZTRjdjNZQzFVeERENTBzcGplaDNqa1VZYk9DdEx4dkdlWENPMVhzMTh6N0Y3SFptZEhPdTFOSFVRejFNR0hvN3YwLThrbXdVbWs4Qm15RFpJQ21KUm5PNEx5TkY3X0J5QkdReEpuSS1nVWdodThKaTJ3bURlLVJBREl0eEdlVkI3TjZhSnNhbGt1cllhZ0NyaVZKVEtvM3JnUzdiX3JDR1BKZ0NybEJteG1SaHZKLWcwUExIcUpHME15UVFJWjRVSUlTa1VURXduNHdMXzM3anpCc19DTllPOEZwWG5yV3JhMDZGaW1mOXRTb2ZiYXpnMENfblhJZFFCT09JNkJsVHZfYmwxQmo3NlkwbmtpdllqaFdZejU5N0l6RXAtdnlTTUdqRXAtSjlVWUtLUXNlYWVHT3VWVG5lMXZYOEItNWdqQkZCSkNpaVc0emExcHFtR1hkZmphblVyX2tpS0hJYmlTd3BhX2FDcUZYU1hGaW41bS1teS1fd3VONmtzZndkc0xkRWdvbUFEMDFzRjN5TkNCaGRFcFNUSGFmRzBUajBsODdLY3o2WkxPNzhDaGM3UHpiX2RXYS1aSGZVcmY2cUtpenhReDBBOUxHU2FSYW12c0RSS1Uzd2hueURoN2dzZnJ4ODFDSlFnOVBuc2hFWnJGcnFJbUFBdGk5VkZMZklmeXZZZXpuWFRkcGtQcFhVZWdaRnpxT3JJd3dKRnlVYWt0YlE0SVc2d3hGQVlRdUliY3RscU9nVmpQdVExeXZRYk5XT25UbFl5ekZvTUxrLTRpZVNOb0h0WldrTmNvVkFwNVhzMWlSdTRUZ21ydFhjQkxIVHFiNXU4VzVaeWZFXzVSb2MzMlRhZ2pfQmtqeDRiUUIwRFZPUXJ6dGY5MUdKZFBwSHV2TTJ0TG1OZU9kUTNFZHhvOEl5cmFkV2RNWWtObGxJZGdnYVlnSjU0VWU1akpLUTh1R0JRM2I5NzE3Yk5aSWlDN01pSGFSQUdJUFNsQ1Bpc21RVUZLY1lxT28xMlFHSzZmZG1GVUw3cF9DWll3bVJ1aktrWk9SS200SlAzZktDbGF0WUw0NTBPRnJKSGhxUGVtQXo5MGhqZ2Q0ZTJSYTdmaVA5dnBRWTVIMGV5T3BSQnl2anVVdWZIbi1RX1VPX3JOQ3J1T3RUeklNWjY0UEM2RXNPeHAzalI5ZXEtenhwV1p4dG5IcmxTRVpqZ2dqVUJkMWxCY1RnSG5nbERZeHJWbDJQVzIwSHB0MUtQWndZcEw3MEJ0QzNmNy1wU0FuSTJDY2hZaDVMTElLMHZIWFkydzZyMDVuVjRWVnB1dXM0N1ViNlZFZDNfNjlqYWV2T05FV29qa0JNRHBuV0lUanJydnBTOVNjbHNSYWxoUXhfWk5rNmwwMDBoaDlIS0pBLXBmSDRUdFc3WGwyS0ZYc1VTRjN4N1c4cGJSczdyWkprMlFnWjdnS2R3d0dFRi1jTG54TDRVY204RG0wVjlxZFBkblJZT1ZhZ1FmcUwxOHdiZ3RMSHNXQ01WZGNheHFmUC16eUxjcHZtMTB5dUdHYUE0c184QW9Qc0Q5QTVfTE1wNGFTRjJfOGUwMjlCbnRDQVlJSkRBdjNnNVpiOGVMd3AwZkZsSGYwWWlERXliR21mLW5nYXlvYTd1aEFmTG04WElJT19WMk44VklTY1BTVGR0dkRTRDBtODZDaElVNGFrSi13X2ZuVlZUb0dLMEtYV3RKY0E5ZUNIcG9pWjRzbzExMkwzTkdfanJxeHZIU3BFZklKeU1Wa2FvY0JMc0xaWThsUlI4S2x1bjZ5RnJ0ckozcXRyaXhoUWhLVTVUUTRyZlVCWnlGUXVfa1kxcDJCSGY3UmFGZThLYmhpVGF1YVhJX0ZMWklPX0xPeHNBb3hIcEdjTHc3QTY1anJXSkpMYVFtZlpxblNRSlBkR0loRHR4S3lubG56MDlqTWxRY0FUcXN2Ql9DdElGWmdpbXNkaTc1OWI2bkFCWFdPZklJVGx5VjRPVWhSQmI3RGFZcTFUVUZoUjdDVzBMSDcyR2dpQUN1X1pkYVktdjE4OG9ENG4yLUxRQUlzTWFYQUhqM3Z2aHVOYnNmVFlKQUlnQXVNNXJ6RmQxQ0g5amdpbW9oMkkxWUhFYzJSUFpMck1zSk9TbGNzdmEzWDhkcm1IclhDZUpYUDhvNURMVDZTMFJVS0dURGZSODlwWnpkSUJlVFpOSVN6QkptUVVZaHJ1Rk9UWU9LajRSTXdsam4xbXk1TnZZZGMtUXVZTGVmNTVIeTMxMWNyQXRIWFpOWm5adVlmM19FU0tWN296cXZwbW9XdDFua0xNQ2l6Z3BSRjQtQVc3QUdqaDRQSEtOeDBsTkNST3NiS1c0Nkg2cGVQb293STQ1S0hqRGVkZ05GZTlhM3g3M3B1bVExLUFFLVVZVlE3aUFlbVZSOVBpWEsyTXVHeXZNSGdhZHBmYjB3bVpacncxczBQdFplSmRPektyN3VYcUQzNmQxM0pHenQ2QUJEbTNZV2RrcF9JbFFDbzJKWFRvX1VVdnVmZ1J2TEwyZGlrV2xqcGRrNEFvOUhBd1FXT241aElkdTNwZ1FyZFNsS21LVEpUdF9ZdktBMjdTNWF0NEkzTnlYVUVncG5ZYWluRWUwV2lhallYY01rSDZna1lvaWtGbllpYVg4c1p3WDh6cU9acUtnQTFxXzF1SUp5T29RWElxVGJneXNCUWltTlJlQmJjSHlpOW9NLXYxVmlaM0ttVHM3elliVFNiT2Y3WEZpWXpVXzdORnJ4MWRxcE5MMjFQZzJ0LTg0VUxBQldlak5KNnBwVGp4bnhFUkJ0Sk1sSGs0NEJLM3RaT2syWGhSR3Y3cEdaLUstX2xYQWR5N1h0OUJUaGVmblA3X1pWek5jQ0Vad1FiM0twWldTVzFZT01vbE9hQURhbE4yekJrZVRpbVRFRTlCX1M5d09pdU42NU84Z0tvNW1UNVoyVHI2VC1raDBlSVRqSDM0RGlDY0JIUXNYb3dobXEyQWktSmVOTmE1czFYYS1uX1czYzlvNnVHNWdEcGlVTXZJeGU1NGh4TVAwVGkzaEM3MDFqUFJmS2lVcUtBWDBEU0ZGbFBLWXJYVUVrRW90U3hmTVExX3NtRXdJelBCTUlRSzJraW1nQ1V4bE5ydlAxb2NJS0stY3MwWXNrRm9jU29Ua2F2Uk9Ca3VTUXNVTkQ5M1NLdXFEWVRoY0l4a2JZbkxmQzRBa0RxZGEwQWdPcE1pSVlNOWRFRmYwM1NpLTEtQWlpZVJqT3hKMjFNUXR0SHlGTF9UeVhnWFVpV2ZtdExPR2QxSVJsbnoyNVBqLWZ1M1FDaFJFQmVpN1NZMkg1RWp4ZGRtTm8tM2VhYnE3LUxKSW5Gelp1XzF2NVRPQktvb3RzZUdNV2hSYXNBRkY1OGFJS2dPV3RoTE9paTlkNXFXTWU4WHNGX3VOdlNmeEg0ZHVqZE1QTndvQzloWkNxM0l1RUx3aFhVbWNiZ3Z4UGVTM3NKTHZ3Vno5dXpaUl82M3RKeVRqbmxtNm9IZEtocFR6bnJPTE90RzFCVlJNTXpGaVptZllSRXlWYnQwX25lMHdRVG5VaFllUXp0RUhuUTRTb1ZsWTcxQkZQMjdQejNmVlVhWDJ2Y1pyUFVrWlNLSVlBcXB2aS1KaFVKb3l6dS1fUXJlcURWUGd4Mm4zMkNJelBGbGkzSEstS1l1Nld5YXRCUTk1bjlTRVoxRTZpeHZKZWFqeTJfRjJCTmdjb044TERYWjFPRVVJNGVWakJVdUdkMmFkcUZsMl9XdmhMcXBxOEpnaC1uR3NEczVKemdpRWFzcEFWZnFRcXFHTmV4YXRacFdpYWU0REx6LTN6WU5qTFk5YmduRHhsWml3UXcwSE5Ba1h5QTNWU1ZyTDdwSUVzQlBzTTNDLU56VkZGeVlESUFuZEduaGxYdjVqUlVYVTc5WkJ2XzBWQkZHZVo4VDVZOFB6U0tFc0FEcFZKQ1luMlZOcmVuaklqcy1sQ0JJa2ZvdUlLVGJBZ0xrTXdvTUJwY05ZOGR4bjBNNGhtM2RLTDRQamtHUTduRG0xUm1EcWNlQjhVTDdCYkRpUGx6MDJXVDl5MGxwbGsxSWpHT1BzWlYyV1JTSDdnTUpWMXlJN1JvRmtOQm15QTN4VzVaa04zeU1FV3NOUE5HeWp3ckt6UTJQampBdTN6ZVMxbmNfcS1yQnc5OG12VGVJTFBtZ3RLVEhDRkp6cEkwc3RTWmFwVmlUaXBhUjFHSTF4ZkZ1YTFKT0lPNlJBaFFNN2pLNG5wNmhCQUVWQzNWZlNEcmlNenFfNkVBSG5TRXFtRzV3dmdYT1lDZjJlbUNqSkctSERWdHREakxxVkpJbVUwdE42bU0tODlINEJzY3A3cHlPejdYVmpYLUFobDA3MElZZXdjeVNLS3dVMVJ1dWVGMEM0SFQtTDFhdUpudC1UVnJjZEZhZGdGVHpLc0tvZ0RHZF9DSmhVZUpuVGVMRGVJTS16aUlaMUtDRzE4cmY0VmltRndXRDZPZHplZ2RKMS1CRlM3OHNKS09uMG5kZVNGbk5laHB2d0JSNEZUQ0J1YkVjQXYxSjZkTDJqWmFQUnZWYWJiQUpVM0R5YlVUTjhuRkZuekNKdDh2MlhJMDVCTVN1Si1rYnF3UGY5M1c2RW5ORDhUS04tSnl1MmQ5ZDlpd0NDZ0x2d0FTV1k1R3FWUk9WYkMwdUJJampLSW9iVTN6SURsUTZtR1ZqVWFmZW9VZGpJc3hxUDR3S3dBR1JLS3lEeHA2TmZwRmdXNzRIOU1JeHcycHpPWnp5OVV6Wi11NVdPTVJ6Y3Zscl9tMEJxMWs1UnR1YW5WbnBoaXZVX3IxWTJzeEx5R3g3NllMUDZ3a1NrU0o3SWhGMDhQcktLOGhRNm5qMURIeE5PTkl3ZmNITHBEZ3Z3N1ItSW1ZSERzWVNiNW9aTFN0STdKQVZPanZuTnhnVHJqam1sTGJIaW51MkhNc19Fai01SmVEd1l3WTYwc19LVFZURE95Q2VFTVpsZE1EemZLUXVRRzhuVUpFdTAzQ1pqU242cm9GNVU3MlRSbXhZU0g5R1JfeWcyckg2c1BRWVVaT0k2aDM3VV9xS212X3daa2JLbmhGVnEtLWFKUmIyTjJvcHh6VDRicEVMLXFSVDdUZ0lRTGtfWllOc1Nub25EZ3h5WXdsUFNZTm1GUWo5WkdyRTZBd0x5dGV1ZFYtWWJ6Y0RtZUVHbHdRNTJFaTI1SWlTTkdCcUlpYzlSMV9iN3pLU3hNZ2pWanJzMzJQYmlXSGdTMER6dXJQN2NSRi1yYVFPM1BiZ1BGM05DQ2pEMDhwSGxmc2p4b3JnTHNGRFJUM3hoaENXWUJGZnpYNWdHczU4ZTNNSGxQVEZibmFDVS1OMWtCU0tYRm9qNWtsOUlJZE1qRlpqN184RlZ2bmhON3hpc2JMSkZKYU4yQjcza1VRTVpxdk44Zkd5YzhpNURneUhiTF8xRy1mbFR2WmxPTWowS2NfU25XU3JsV28zeTY5UDBlNnF0VW5CcnB3NVJRaGhsRm9vZkY3MDRxaG9jNHVnODVPVDFWUTRLTEVfRVU0ZXJ3QVlJMldfQ2hHdDZmUXNlcHYwX3ZJcU9ZX1BRZk1rZjlJREUySVJmQlZqMVhaUnV6cjkwb3Q4TUNFZU1kY3FYOGRnRDVVX3NlcEFMZXJGOGNiMjJoMTR5WGJpcEhlNWdySVpHbURwTUc4T3Bfa3BZUG9CMkdIbndTZEt3OGVvem5HZXVGU1UtNXpBM2FJdWtsOGllQVRwU3NEQUdFV0hlQnlnTldaeUk4OFZfTmZITktGT1JGVjZwdEZvOXhhM2V3OUxXcGZ4eEhONXNYeGhxOG5QZkIyRFJueVJ2cXltOEtaQlY2NVl6VnBIS09RclRMVHlUVk9ORElubnBPd3JBaU8yV01sdVBXWjBWdXZjRTNRd1BrSXRRU3F1bzdiczRkNE5vdzRtMEIxdU5FMWQxZGkwQ0NrSmsteFBMYTg1Z2dGZEZCTjFJWllrS3RLcmVRMXBfSXJicTFpbGZlWjVySVhBa2RKZVh6dlc4bmRWV3c0RXZ5Zk1ja3RUSWJoUTh3TjZwQldXdHI0V25zZWVEODhfcFV1MkkzTmFweWllOFM5QmtJclotZGRXQUVLcmRzbUpmVURhWTVMeV9HRXgydF9sLVV0OGhjc2Y3Y0JuSlVoSWNZdjdSNHFqaW5NemdwaXZlT2RwTUlBNUQtWlJNOXREZFYwdEJRNWR6ZW9pekdRdk1lVVhwVTMwcmozbmdhdVUyRGpLcE14T2FTS3p3eWhIeUhFOEJqSWNQa2dvWGp4ODI0YldoSzlxbW9yX2MydHVUeldQODRXUm5kdS1KZWg3WmFFMjRBbVMwczFpbDFUMUx6TlZsaTBZMUNZVWFzSnNSTFYtcFhGU2t3OE11aU5XX0lqWnJvLThWQkFiMmQ0bnJwMXpVaHgtS0ZxRzVnTFhVOGtPS0x5SUxaQkUwNHhGOFV1ZVdtZWVzd240TEh3Q2JFVVZManNfM21fanA4MTktTy1FT3pGVFlfZEhzVXZvaFBhaEJCNVpzOTlKQnI2WV9XYkJLaHN2MWtkVWRzWEFTa1VrWUM2NzdjYjN6YmR3RGh4RExUZUpmejlCcGpGYW9pcXhycHZ3RHFUeDlDWHl2dHpmdWJLN0xnN2pMWmV6UjcycDl6X2F1bTNWZXV3N2lfTXE1ZXp1WmZTaWdMblBLNEs5Qm1xWkt6Tlc4ZEszR3VwdTIzRGVOMC00Z0JseVhJdHpBbnlEcTNSaUItNTNFUVlSa1gxNkRSSVQ1bDEzYXVRa3RtVkltQ1dZcTZuLWdBZ051MllMZ2FKODZjZ2ZXMjRpNVBDU1Q2NThQVWdQZHN1VzJHaVBLVERDV3BEMnk4Y0ZmTGNDOFRQTTllUHE2VXhlcVBBdTVpQ1gxdERWRGcwYzZnOURuajhnR2FEbW9wbE45MjdxcFdIRldKeHBLUUhLWkcwSWQ1WHpSNlo1WGE3RDBLQnVWYmZHUXdFWlJQMGYwZXlQVnhTNGVacmM4WVhSX0R5NlBteXVIcmgxcGVmMFVSN0dOWmcyLUZRRF9NQllSeEh3d3ZHMmt1NmFPRWFhOXR2VTU3aUVGdy1EYVpkZ3lFcWFpQ3dUdkpDd3lwcjNObjZSd0xrMXI2Z19jWXJIZllBbFhlNXBIZmRXUVNZY3Q4ak1sM01fQk1NZXUzYWMwamNEQ28zSWJFZVlITFoyY1VxaEF6U2xQaEhzZjhOZWJKb3FrSWROOWtwWTBPMDJ4T2RRMmJQazN3Vm96X0hPTUgzeHhVX29yV2I2cHpfNTJsLXpwNEw4Z0lLcHE4ekFjaEVVUThrVlBXelhBaTFFUVZYMGJKUElta1NHYzdFLXlvYTZuOEk0MV9vRU1aOFFBYklLdVplcVdIZUdhNXpRekVVQWlJTGttOEREUW5TYlpTTFNtOF8zX2Y1amJQVkdSSjIxdWFVcmRBRkZEakdPdmZVTGFyNGEtVmJDZWRsTEpBS2dVODdtRmZJeVo4UW9xN2ZnUkc5TnZ3cDhsMGt6MWIxZUkteWlORHI3MHNkSU16Unh2MVZGeEJsT3hNbDlodVFZQXM9""".strip()
|
| 10 |
+
|
| 11 |
+
def main():
|
| 12 |
+
# 1) Read the key from environment
|
| 13 |
+
secret_key = os.getenv("ENCRYPTION_KEY")
|
| 14 |
+
if not secret_key:
|
| 15 |
+
raise ValueError("Missing ENCRYPTION_KEY in environment variables!")
|
| 16 |
+
|
| 17 |
+
# 2) Decode from Base64 -> bytes
|
| 18 |
+
ciphertext = base64.b64decode(ENCRYPTED_CODE_B64)
|
| 19 |
+
|
| 20 |
+
# 3) Decrypt with the provided key
|
| 21 |
+
fernet = Fernet(secret_key.encode())
|
| 22 |
+
decrypted_bytes = fernet.decrypt(ciphertext)
|
| 23 |
+
|
| 24 |
+
# 4) Execute in memory
|
| 25 |
+
# If your code defines a Gradio demo, it should be launched here
|
| 26 |
+
exec_globals = {}
|
| 27 |
+
exec(decrypted_bytes, exec_globals)
|
| 28 |
+
|
| 29 |
+
# If your decrypted script defines a 'demo' (gr.Blocks),
|
| 30 |
+
# it might automatically launch. If not, call:
|
| 31 |
+
if "demo" in exec_globals:
|
| 32 |
+
exec_globals["demo"].launch(server_name="0.0.0.0", server_port=7860)
|
| 33 |
+
|
| 34 |
+
if __name__ == "__main__":
|
| 35 |
+
main()
|