Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Performance regression from #49625 and #52984 #55948

Open
epmatsw opened this issue Oct 2, 2023 · 23 comments
Open

Performance regression from #49625 and #52984 #55948

epmatsw opened this issue Oct 2, 2023 · 23 comments
Assignees
Labels
Bug A bug in TypeScript Domain: Performance Reports of unusually slow behavior Rescheduled This issue was previously scheduled to an earlier milestone

Comments

@epmatsw
Copy link

epmatsw commented Oct 2, 2023

🔎 Search Terms

literal type narrowing

🕗 Version & Regression Information

Per @jakebailey here:

I checked and the change that 10x'd this in 4.8 was #49625, and the change that 2x'd on top of that in 5.0 was #53085 (cherry pick of #52984).

⏯ Playground Link

Super long playground link https://www.typescriptlang.org/play?#code/KYDwDg9gTgLgBDAnmYcDKKDGBLAZtzNGKbAOwHM4BeAKDjgB84AiAVgE4BGADgDZ2AJgCMAtLgDMAFnEjpuXCICGigEwB2ESvHtenAAxC9wzsGZ1GLYKz0HxvFSPatOk2Wtx7HazME2ZunGrcasDB3Ipm9EzMAiq8Qpyc4twieh4pkryYvI6qrCLC3EIqepy8uE6SkRbMmCpCiuKY4r6s5RqSrNoi3MCSnCJC-OJ6mJICihMC1dFC3CqcQkEy4o35knUyDVkivO6Samr8eiqS3DMsuALCQdep4uID0gKYg2Mp4rgBzYpCzay4C7MerzXjAAT5YDsdiKWTARaDQyuE6sAQGcbZcFAzjKRTuIT5PZCGSSHQ5dh-ByCPImPQbU7Y9gqRTwpq7YA+WTMrbOUS8PE+AS8ATg1hCIFcA7iAkDPS8XjrTiYWHEyQOTBBSTjQ5pPTsbFCJZqJkpepqBySCQCJRqO7Jay6FQvIVqIEqbi8vjsAqTJ6Na141ivbzcD3NPoBcXmaKsYDAeXKzyfbKyYoySZLWTcXBKlSYDjiWNAzJGlFKFTADp0rbAE6aYJCEUJzgAiW4ITARSSOuKDgWpmidilAZFKQ58F7XARaOWeRqM5qGRqFwZLvk0k5CsQrUKlqjN1cdwVWE6GyyJKeRR62GWtKKdgtbiVIGjJy4c05cI6LOhnrsPhKJssZOAIRziECQhqi2nQDIo5SiJkxo9FkKShpkrCZLwariCoQLWKwailGimjxusZz5NwmB-CIRwJB2Ag4to0wzsCXTgjCChzL0cKZIMwDvmIkj8bwRgGAI-Qvr2-HqOmExPE+MihrwqGNHotb6N8nBArwnyHFOOTxC4cLdNmcwiFYHC-Co0LsGoUZRCwFJ5jm-6yJaGRCgMFJ1pgnB5ji+gihIQIapgmB6CM+S4FRCjkTI0JPiI1getc0hqL2mDYiyFQLK4Ai4PE55qBRU4yMOQgFR2LaKFpLGqMAOHsH0NGlK43Y5m8AgyPUTI6Lg+FNECLJzB24wkQ8sjpI4QzpooAQSHoqi0UCdgCFw-AKJRrkbKEPTAKcSU3NFvZfFk2kTN47BjKkEhPHssHwqafS6AqYpCFwQKEbakhzd6tmLbIJyvJM-WOLpBwuHS70rWM0JYaI8LRbIQb5EOggiI8vkPGp8ruNp8hxrWvhBJmmRKj07jpvyPjGvEELMQ5zB+Q1cxOuZBLrNweqDFwvi4AcUKklzAJVCx8xodc3qFqosjSz02avKty5NE4LT6ix-7dveXWaIRN79YpOneu6qzEmk4wSSx0jqMKigKDYdRwoagy4rL+hDKB8SZBBRisCyGrnkkXKuRVxEUnBELxnorD1J9eaTLZJLQhafycTim1lOaIT4mqIWoo0mBCuZixPASDh2-0PT1AqmDsBIIzgSxnaxIYdq4J2sgat6obcDIVEqB4iQiiNL4eFo4ciPo6VuSUPTKN6lpDIE842DwEpXYaVEpBMpP2Bo0I-akXRnJwD4NW0L75nZJzWi4tayIIf0ihova4oshzpdOjOYO2dg4SkPAJppU8DoP2SgoQD3EGtRI0ogTyGUqcduGNYivHct6YowhJ5-C4KfSClZXQsT8nSdQDUebCllujXsMddgG30PeIS844FtBRJREQYxDiyDxOXZc6oY5zSWEyGqX8ahigKiJEYqRshtQ2Nadglo+bWTKH8To2M3TiV7oWBwJxrKpncI4BqMhEjWBpi0DweghrBFUPYXwFZwScJbI4UMvgnC-AJCELIcxixFFUKSTwtohyd2VI4aOCg+htG0MkOUwB7I1AEB6WMYoHDKWXKmXiNVxAaB-o2IhZozh4RggkHWvlrCpmdpMPMGMyinHSoTPYQJokajjCEQYEVOb8R5i8LBGp27hATucMWEJyiLRSHiLmgMi7KCnFyPU8J7DSnysWQiEwhwyAIjwQGB1uAMT5leMYdscRCKGp0CoBUBgmChLINErgubvV2PYAwbQlilEyixHwc1Fp6BSKEfkyM5qDEkB2S5XwKxIgJLwEK3YHiZAcO3LQblOk+O3ldaOW4uwGAlItTIvlRA1JyFqO4hoJBgz0OlbsEwSj9MZt5Vg4REiaCcBaJ0Ch6G+AeHELGfQDjCNmFoY4XACiNlQdYZxaIUjmg5PKH6EUf5wI3AVMUgxVgZAiuSIePRDRFHcAPEllKagqC0N2OYrxbJyIfls8BhUeAiibFoRI4KWLWR0KoPE5lRirnND0A2NEJjlHjAa4UEofC+XhBoQi5DLSH3-AqcyfsRh7AyS2QELFyhxAfGpYuYCAWkiUCKLYqw7KVmaFde1jNPlzFsgkAo1k2pbI0MSaNc1HhOCON4Eo9SshTHvnUIOZx77hABIdO2Ld+ZBm5SwawhwnDNTJAhNowMmioReP+QQVxFC+W0rXO26VXguBpZwgwPR+gyCuKiQQEVip22xDYD0tpfCIQXmbRwYIUixkbWqJ8P9dXRAkMSZwqxi6+ThAerdTx+j9EbP+QiphXkdjtiS1we91h20Ul0TwcRe6+QrJRCYjIEGNFhMqXi4wrpKAqgMQw4RegBAHh2IEa16jaAIhjOkHREG5D8hjeEjRkjuDlDE79i06jiVhHBAesszxXX0BjCqnwDBHEorhDWTg-J-FeGpO4nQB0UghOZZIKhnCBCuGkbEfRFpZA0PwH5P1Kw8wqd2ZkrA3qnwWMWfm8iTAFDWp4IS3MdB2Eng1Lmbn4gfTqkqTsNHZYbCzHbf5YJgnugVHmLmfk8IwnjEUY2ytLmuSo6ISi+H3BPnhOrRmZL04OOVJgzIExHDdhAVOLQQYmTKX4ywAeTpsxQMEjorUiUPTSCUDVRs8pcAMa-e1gw2YmT5DsspQGtl1X-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-SwF3E4JBIOGpB0MVNwYaH9suDCL2Cag5VbAKDwH-pdMjO6D0PmCeBqGcCSj-HGNreqQENYGinPOeUJMY-PIaXwPoPmDSl8Jc79VIMkD-GnnMFWHEXbGuhjHBKJHUUKF08wFdEEyEGKhvFmAOjVK5GkXsBWDItHNpHmNCFOFFPtDeFIF5PMIOIEJML3I0E1GMV8CqgYAMIuIYA-PsZBNPcFcoHOjxmMdCIsH0I0GwnDFmFYFXEEJ+XGPeEED3MPdEE0BTlIKIJbXetxrBd1p8tHMaO6HwGMHRu+FKWcEoISYDF2I4PnDGnbPNChEKENCwTYGEyEPppwgcDifIHeTCGkFIOIpMzEGLXmN2I4P+Ird1hSBksxr6mUJ8gLHHL2JMWgw0OeIXKAwiRRpBEYHGBUbDXsA8p4BKjeFy4c13nENqn8CMZ2HnBwJ8qzpyTeJOFXAxE44EBOFqPoFU1M-oPIL0sgvMJNESnwGvkqIINrscsIAZSwHlayOFIawBCteXHXOXvlEKA8IXEKO69oNmBOL4MoNaWlFfZQeyDM00PKLZNzSwHMYSmMoSesMSCJtVNmdYMIKiMuAsixPOJMLDJ4GUOHlkA4HmciJbvwOFDMu6y2ARJMJ0KRvtKUuSG0LCHapQVjgG4O8wEqu2POKsuq7LMUPovyvBmhA1NyHB8UCSuCDy42N650PsV2MRDCQyoMf+Ae8wAkLjC0DkFad5uaDEcAWwjiE6LXJBtoOWcfQ+O4WuR0H5MDNErCMEP1DwKpu4O6UYoRKUDvflOeJHt4ghA5qcCYFjlOOWdIO9D+QKraFefWbu5PM5HYP+FRMuBGS0M8CSPQzPJtD-K8H8IWlkP1COm6EaZRCbS2haBk4MMaN6CcKiXXBktZMICtNeKsN626crmUBxW0AoGkdjQcD7mwdEPpp0BG1fTpLZwOtrolMIBCD-I8F6bQywIvn5Hs++gC9cgSKgl2KpE2rg3AkKPUBqEuHXN5kKOwxCAMFhs0BWMmFRNiFjo5meaEzOYlFeI6+aMkGUE2b0J87UKyF9Ncobm4NXpJuZGGftFDsqGMfxPMF2B3CSuPTtLV-NlkARJBIlr3DRw7MaK2rpjhMjM7PeX3FOPzPGCEAkHBwpiYNKN5qGZ3HEWbZ+FjhD+QfoHB2KC0N4JyI8sqjBdrtG2ujVHS2AeFDju6EgaIBIO3s0CkIQ7K0sNoAPC9ocCtBhE0NJZoEkMqtdASMY8qJMHuO-Tx0fZhn2HPLsRsNdFspaJPLxfraiac-UocPjQENmfqnCNPRTaDQCG4hc72FT11EJPG01rLM0lwESmsOlPwKGPeGV8wK1r2BQWTcVKmOmhSzkDiHpIeAEEkG6P-p0OPdHJHlKpeJimIBBb5KUA8NjixBMOMBhF0BjFcG1MpCeMgQFvUA1NIAo42yoYtI5hUK5cpHehxzzMkLLIWMqGMJsMbw8DSuoLFvQ8rtFIOHPZ6vYaGEJj9KPLEBwL+JrDeJaF5OU3+DVQkNroYQaPtC4Z4KGAOtCp+LEPWf4YkL8FzXB3wb3J0A4E0KTKJ4qusiKJ08VJ8iLkNJ2LWMECSO4B0Al2DAdK2ZBP0H7E-llFIPh2fVeBaPMM4jFElK-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-lO8gWbawhhhQbY-QdKBBAF4JwyoQErwuNQqh7ohQEIKBNkAaAqjFKxocSGisng1UIxRPcHEwxvL5R+iw3dRaGVRB2i0wcQk2u8gQxBY2gW8iYDR2KhvgmofcVnueB1ZbJPC1xabqoGZBY56kbEJ8AOi0DFV4Q5cWsKIBBDgY+AxIR4CtDggwh0oaeIwG1BsK6tCo70PEZ1T6DwgIIHgdKO2HWC2hYoWoIfgxA0Ca13oXMdKE8ODnIMXgeRcREp3WoApPAwgHMKFXNqnwYYY+ehDRH5jPCTaN3VwKfBVy3ooQXMIaGr37yvAJg-6A4C5P1S-qY48abXLGGArqKOOAXDCcoDcgDoZQrlCKHqBrlURoRLEHCBUDqBf5rgnQhpD0BQRiBsFHRWuPXmLAUghgSGv8E5M6AwhQc9LOyJ1QrBXguYaZFRBSFuiHow+AKI7P9DpneBCwjmOHC5gdSQQBR6MRJDOXUBWUz6+UOREEOzCqA3QXwkWfkH7iBTSxpkE8HtN-4AFc4DqZrCLHrIsZJoMvetBrn95lAXIloT5cANOzSkkElochNhmqJhohwXKGEMbzNrMhtk3eSuGqA6jZJ3G1myTjvCKB0YdQvQaeEcHDE1YQE4UfLJMSQbNA4kNHNoNmC-C3YaegMHPvvy8jns3Ep8JqHB2Xj7Qxw-nIYJNDQ44M-smmbIDpCCCB8ys+cfkBFX5DZDSQg2MefJAxE8APwIQepPaCSDjUuAJGTIKUB9J-J-ARpUCKdH8CfRF1UOF9WWkBggMPQAkY0MSFfz-wTgboYUPKAaGSJbkmQBuhL2Dq1xKuQ6WjM4WVADx-NR8O1dYHQRlTNABENSPdRwmXK6EU4e8CAikAZA8wcW6kmqELhaBHgzVeQR2txKGCUE6wLCJOzpAMKGgdFYIImuxB34ZsSI3Ut9HlgC5okZISjAPA1ZB8lQXwH6N3EMCzE2YmlVdmuk7olZwoS3eLRToq2IxvZ1yZylgkMx-ox55iikL5E1ADAaU2o9ROWA4ToZ3QpwISIQIhR9R7AIyHgF1zDlsl9SBHEdF1DNWlCgYpbHmBVv6CdtjNtYQoAFMJ1jEuoNSAwHzHyhPA+Mu+aAnBGvYAdVQ5igxejQiplB7sTQS8OFDUadh-AUgRRfAvQ17aKgE0Z8v9rQ4ehHgbCOSOFEbX8AacMyBPJ3B0zkEGRYdDGNCBGAnY+gCVK2MKBxaq4Os3mIMCAiEbmQzg40kYHXHvDiklQHARsC-wqFnB5sdHAeXSFthdQ-YcHNVtrgEa7B8wsUVElFXcBaaSOTirfsbx6YLBs5SUCEg-EcxPp-M-QOJC2DkTAo0y1gKBOykJD-xv8IybIC+ysH6pCSCA5CrTNvQFBLQC8VYN3GMquobJzRWsLAg1iqzooo7U5OsEV6DB3Q7lMYKlEw1nRIN-EF4EEggnK4wwpGI7DdqTZcA-Yf05wvpn8KVxP4JIKQqMXBp2wRI7+bXDQvUX8A10nA9CquHzr0FQktBENDhHlwRcXgxUcegjPWB0Vd8jOTkuoBmziQrtL+NCKXXuCZ5T1PhUBfeEhLF8h6qWghuaCxxJR24C8NSdR1FqfA5oO0aKEdM3k-wB4qffRNgTvjf7bkqZfioMvzDeSAgJrKEJBw-j6s+ir7DGA3iOABrdA7rLqCrLghbBGak0VnCU0MRFBYw+spdEtzxB1wRDqYcdiuEDrdB8xTldKItGSWpEsItSlJL3vWCQyfSX+D0A+DWipVlQ7pP2G8jRDZjKDk0EHJL0DitxQWf8A0PY1rHxEnqjstXHYnbi1Ta4dgXpV9kQQ8BcWNo-oCRi7b1l7A-UNdBoog1J5qkUstGkz1TASI7YsbLsuaCChZBCwcCNYgCAVTSCEI-CRwKfEvDCBeaw2I4EtzlBRJykhGkHOMFwIyZVka2ecH7qqIQonEp6fvaAoxDNM7IgwAEOaDW2ZZ3SYENZNRELC3ins4uAVjjEED9FjS5is0Vd21ItwMg45eWNRDviYosDHAQtTcEd5DVoB-+WCh1FyiIIMReYbZb0G4E4KMlwLTCOSFDgiD1GMoJoB4DdBph7wDe8RghAMmKokEsQd0AjJqjKyJQpIawBUCe02Y9FqMCMGwhKXJREOWndRddQ2DfhkkHQUUE+l2iP0C5Cuz4MoQ3hFAFQWlGBnCAbpigz6ayCcZ7pwjil8oqIUnLmEHIC5lAgAuRnEkogeBwuLEUYAYDLj6l7GDLVGEMEhBtb9677WsOWW+RYpCQmtZGI4wdJ5E3h4IYPnsEhbCgiVNgcA9+H810F52ncE6i5WxjmKqcy4bwJ+HfCBTvWhoaAq0a+4VE-9VMtoEaNWQCw3IGmqGFOQqDhAjKA8WySOtrBjQIcN4eKnFgGALoiubXJIEtziDcmjQ9wIBJWFRjebXUV0UkX0BFBLc5gv0Ori9vDStJ9ER2dxKMDmC-ZqTD7KEnFCDZ3QDWVGW-BSj6Cac-eXJ6qshhBE-j5Q9ZfqJuDGxTArEks7SFYCw2gLktsUNiI4jhQJAy8cNWNLh0GmcMhqWoaofyUpi7A4yowpEgg3UUbx1cCMBfp3G6CSgRqcaW0F0ArDbKjAHKa6UcAtCWSDikBIwArqHAthpVB4eIIsMWIVRB9C+2yPHTjDKRkTIIQtRPkFD5YIcEYiiArvDmLdlQ6rNMgUvzytauY3mdGi0jZAxxsavYaOPmEhaOZB5oUN4GyD0XkZ89QvPKljEGHHkhKDXFYMJHn11prYqQZMlCGUhKJLlFQRcGMGnrnongSQRSDHgEUzY0YvS+QRtBaA-wLMi4VjEEivM0Rtc7tC2TXHqQaNUSsdU-GlV2hbIBWqxdVtom9puh7w5QJwKjDiRA8DO4QQNtusw0FRw1uFoYILMqpDAZYnQJCDJnrITEz4iEUNbMBR7cYnOwXKLMDH8AaU4kqLLHM7WLD1DxOVuK3ZuTW72t2wcwLNL5c9rqKnppwflB0wP4cY+AXxP2EcHAugRnAxvZItKELgIwt0bgKTU8nlqrAIofwKjjR3m6E17xGfQGNAVEZt9hIz4xY+6XBza4YxNFEkGjO7yg83SUjYAXgsZhXhRhEB4kF8U4Z5EwMguZ3JQNFkhQAGgEs5FslijEgHoSCLUYJtK0xxvJ1BKUY6TIp3p9e-nIVgWpYmLh6Cly1ZoYX8yjBT4gMUdh6GyFOm10qhI4V5ZIQBEfWLY+cLIi6g3ECooQCKFSx0gHhtAoQMJmNhz4-RzU1IDQEeRSgDYY4kLY6AYHyJC8-kuRcVbFh3h5AcGUoFaImv6LUSUIufWSBUJLXayRZ94NMo8AIUPBNT0IGNYa3iwVAgS+YGuDoHqTMhpAuVw1h73sDGo5QhpdqPzbSColje5QZoh4hEEOJ+gpCV2gZFQm6V9A+qbZRYxSi8R8STl0eXYFeBtAKC4wNXtCE+izHCIxjGbG1DX07SrcNMEdKsH53llqoibbqLctTACRrls2XBhUD8g+ZzFw8E4EcN2DLE4QzSBoGMiuBrSJetcUMG6AMDnbLyHMTmHCjXZ+LRNYUYUBk2DkfN-wrQT4MjOoRdgkIvccphl1uDeSRcVp0SdFW8yCqwYu086bW3kA-Q0y8mKfJXBUkkgHQPMaAk-NRBYQqceYT6ItFrB6g0MjYaoYL3v40iscT+X9PIGN4lAcCrCyaIGxwITnes-iq0BAXkB0YnAO16kuIcnxh8gTNxW245ixzNSaOHRcqymE+BTI5AziK7J+R-svAMCug5NPEH5m-hxD4FYezCE3DtBAEQoXoPIMerv5qSTlD63ug9B0obAwoGlGm0wyYtBAiQTwsoCeOZch+HxAoL5G8j4JiQlLP6k9O9CBBiIgOWRJjk0DCBVolkhYEnyZbKi4gILdNJpk2jEgtE-ERo6AgMZ9Wb884dhhXUBiTkQrixSzCBMSA4t14lm5QH0TOog86CERXYIWBa29qfA-SocwfBPDxg8UX5F2KiCwScr5OtgY8nqAKh+Y2EItsSdcnbi+BRIJ+Yrpjjoy4KfAHUXPGnICRcx1z+XIhJRCWDG8sLBIT0YIBgqcMqCHGcoBXWUjzAWcFJWigRLwIkK1o-ySYN-r0aLg5KVtIPllMMjJS5EfoDuMEAFywZDgvQB8CthWidkmg0c4NagnoxDYBWIkJUXsKUcCqdI0SLQAjA5Dl2LkgypdSR3kCrpLQIUe6mtGbVZBUE+CA4veDYSDEpwQocRvIL7bXA5dBQGZFyDnuLT7tND9ru9Kpm-2r8urQcRsCPPBBFqWxAx2fho5YQlk4UBQCvoSOeEdAFSvIEu0EAbX3S7cSl+oGtCSoFmokh8A4mmMXGppi6laKsAqAEhJp9oNyBNClGK58TlEVfL2DGImlQwUV6BkDvV0QvkQdkBYCgnGBGBZU+gQQFJvAwdBC4eRf6LpjrhPghpgoOBPmgwi8lKw3MGO0PyiTmR+ACwTlVCGKh4QCId9bIb8GZl3jonC+65hVF7hRJAFdULlH5AAiokjsF-PIpOkqTWQ2ui0cV26FPiUNXIHsi0PgIpiq58oHIdLW1PJJKY9peA5SVHr6zsMxQ1oFFHfTsojAxRgQPaZHnqkkg6OIgjuJ3N9xapREQ0UxN2A8xQITVP0e1oYFIS8oWwcwJ88msZjFl5udYLXL8W5iTJy4Y9XASJB-hLcoQ75zBWQk7M-JRS9YVo9kC1LqBR4J0VEq5QLh0kGRUITwK7Zsh8i1eQ0a+sRWonWosw09LRb4D2TUZOcuk9eMwXfDMoeBXhQFCfUC6kiQg-gd8CyGxBj4cjCEFxV4WBYKwzk+KQiKiBMAMQ8ImMZeH9EDEhnnDzgfvXiBdYhAoENHSenGUzw2BJB9ITiC8BY8hzAgxQQkvUiic7hDSzrMY0PxILIJlSTqEJO6x8AJo0623UGFqG17+7J4X-QIBWWO4vhEguueLL+28w1yfWfycEBG6ZCY5OgHZbwEbw0A0pAUfPIfgcCfdZBbaxfWsJcqG4S68eGSWxWeFVBqMKwbmLttmG8lygfg7Blpc3Ms0Ur7b1kPHXDx-ZplcTmTxbCkItC9k1cHGRcCSnEj6E-IS3YqFKBX1sIIGJjLyCjJugYbfpB8JPqCPZcOPpsCEfkM4nCAaBZ51nqBPIeUJOLFXAkWuPHUyDGNCG-71QMQUPsaJ5jK1FwKGgBqdxp0sZoXu+Bv07Ci86GgXkYFMbRaF4miv8KBwdAlgViu6sWEyBbViZxzyuMi4iAqQRHnkLs2PcHMWBDhzyj20dSRj0e3YsvUwcRvGCGi9gRQ5PfqcVRCmibRA0oT1y3JPQ0cKgKtPCeZBEpuRMilQRaieSEa9xAZEEQIAqHfAZA555EQcLuCOLs5cPpQTxEfUJLD9AIYmRCB+ySAHymSpmOuFg4fYXOwQzSfGu5XI+qAAk-eNQ8qHSyQsIQvJ04OXETBchScg9a0JFHnCCqGt7rFLriBlhdQpMnVBrAZxhD8UZo6GQBpKp6WuAxQ5DCuCCIFxpEhp7BsKB8fiUezXc6WODbBBFCeAE8KW4LHj5fx1HPkKYIwLrpL0UxugRWDRN2TpCXK+A8mR4M4kGFCL0wqIVwFvAaCH9KGNgxSYGtFrUzIPijfYqXJgbFRO993ItHsFLFVF3K7hXEEmGsgUaJAWEHbSSuobwQRwlXS5P6xY13JsK4IQ7q96D7+B6eTUVcSFWTIWS1M4nVx6nFbAkqMInYf81XAceXrgkvJSTmDsft9BtlggT4FPNDSpouQSEQdbYSCJQIu7ewPz0dx8ACdUyJmtGiLN2A9qgwuL4TaWkVeNGHAhENDl1+7hDn6w0sfgK82uBwIefTqZxFgU3LlwZoTDV7S7jDxLcJg-oNiSisyuDazSWoaBXDk0VqD36MwJXJOq8QJ9LDph8hQiAhxIIwBTTwOS3JRDKgiwFLxuiHQP04syOfEEB84JeNbhJ8OZmNiEu96rk4MI6YHz5+uxxsVAde2yhBKjg-Jh8hwgYVCHR1okSCiie6JgEwjQoaJP8iAYHRi5ZQeBEJoi2gqwLEASgDEHmZX+qrG5B0oo9MFbCAzxOPwag5ZAyRaAB0OrQkgjwCJickjiFCD2mGECFhqIIbNyxeEtWIahOcC0uAg4WhePyCWcryH2Ddo80vaz52siEiQHE-gAZbu0g5gVA4KhggRDfeAEKEIGQEumZgamTvK8hkkCthRB6KqYPHSASGbDlBaScEH6p7qhrs37JQ1ukbSnAAYGWg-A5zK7JNwIOvlAGsnrtbqLYoYIOIFsugEOgjKKdlqzJE1EhNK94sEBkiTSRwFeCFAQYAPAhQ8bvwBgIbagvBYB00OaitQWyLEpC0vThHjQ+yknZhhQ1yF-w+kGwFNR7anwAR7UyLrLqztGh-FXBXgPrKYg6QMoAIGvI3XGa6SW7bFKCowvkOr5Xgh0nMT-gm1tFQe4fiAP5T6OaKwiS4p8Ab70ES3Lt7B8OFKiTt4IrJ6jia74EYyNYJ2CYSTuvwKdQVWn1k+ASGloIG5hiOEETqMUvWvxrIga0CSB4gziCtQxyY2KoCokswaNKNgPamhzheyuC7JgwQcJwKncDcpjBAKODNCZMgOrF16ZWdwNDzqiyEiEgQoPAO+wvsbyi3aoQGSDnhmKJfH6ihYjMIsZgMa+Jy4dAYIISIBQ8sEFTXAQjknyFgmnKUDnUFnHSSwEYyMApKQWgE9LmKWOLOx-AXqkAj5MgdJAQZeTxPRhbKc6ksAkiJyt4BxCUvLTpfIYKC84fEGLE3ArYEwONRrID6AwTZgDBJ8CcsqwVeCLgJmBWjnMDNA9oVaJTItRogY8DiDDIPdgyTi2NiFKRuAX4hSA6sgQA9jBAMeO6C+u+HC2BE8IepwiW84OISKrw+kKFS2QSHtdg5KghLEBuQzUJSAZsaVgZ4xwhoOYploo3I6Q1kRMkdj+g5eOyxSgPQljbOg+-LbxnoD8EjBzACqAAzcsiaFvLFgwmFSKGIvjkziyIcQNaCukcoDh54grgWVhOgV0LChGCBzBGheQXwKICGgsyDrh6uuFu3A0oXcHTxX+rDLyqKwDpCyAtEKQi+D6YlwnYiYoJIIkD5Yasgp6mwVqGfjjhTgGEDRY9eltJ2I40rXg-wGwMaB2yG8opR2Aa5AdBXEb1B5hoQi1FVhggTTk6DwuJeOaDjUzjlmARUBcIYikRQQKVohyEEHJQ0Yf3ptqAwfoQxpC8ofDCDUYN1HVDFAJTHYjWeF0tWxwSyuGFCwGzgI6JwcIwMY7ZgBkEgqdwEhhVCHwdsF8BZS8hpe51QQ4HrgpgdcE3riQHFGIjSY1gJDJCkWoKlak6oVHeQZiHRgBIMeGRj2q+KiHuhoGejaDRGeEwOumD4gSUIWB86rZPdTlklBKcCWUSHIrReK-IMSIj675oqrnWi3tEonKVUIH51Y6yHKDKi2wCUAXiTcKqx++XFDbKXIAcI-DdwugJ-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-hOC05B2AS4RAmkZ0QF-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-YBSnaRqMWyA40-+l8haJDCOkEDRuGZzHwlmOYTJR4B8iwHnW7aMcCD4WYLJEUYsy+BE2q52vwL6SfQ3yOLZp4M2lyBhUW5t+YjQ1YBPjKEcFHsF6m2lVa466ziOEJtcThqBAUk4jd4BcumhMjC7E5aEuCwNdqBeCUNjptyq2gMvHCoL2YnAfXaERbkZmFcvjO7wfq4PsRy-h2At1A2EejtZlRuL+I-ZVO+8I6huApdgH6BkD6izCtUiyLBbfgKDQvAyq+GlJjNoZPD-Z2WxYE2agSD8hvRR6v0Ldi5QSKhvhySjFCcRtcL2kXCkgs8CjxJg0lFIw8CSFGLDRQl-mAi2QcsicDMo9xS1BigVXr8CVp6GsqJpGT7voClwUenYKwg-unXBPyoInMrY0Mwu5Rrx+aOAiU1S6GMDAoKCrkzUuF4KuKJmRQj6TRsvbFsgFsowDVBxRXBE8rf6atgsAjGzMsn6pCYIPqhT26il663s5ehVaE0PrI3Jb6iYmbQPgG6DawNMDNKHhZeiqEcYj4QJJaC6FzhHdi5SXLm6lwg41FsiFuBwLPE98Y2BBC9KToGMFMByMBUpegCgC4DAujmGlp6a38ESmp05cGtW6SL8I8GgMFnMuB7GQWehoZE+CAoCRQqHicH3gQcEFxmcO9ttbW0fKi75ToM5GHCHcheeEiQIPgC-IawvaO5C+ASoAMwFsgELBqjgESH+okoSfAkznqruBUadA2aLgLvhBCvuJOmU1oxQsYGoDpgpkkFAwQgQtLHSZpeYYAbVxM-vECYrA9tIDDwBmxKkC1g4+oi5C2QfNvnmg-KMMLrA8LG+CLEDEGoRfk8PIlTAy6RK6jqWyEt-rUInpc0DwZHIEWxNwiwgATsM0NF4SQET7NWQagcQJ9QrUXJjiDiQzSJ-DSGBzE7isojbZ22eCGENiB88WjBk6Zol0k1AKofjFiiCxhzYbW+wPSp-q8GJyR0pOcOxT5jgg6jBBA-EhwLGxxgogTrzaG9TJ8AuBhOvGDeSEJK8YL6C-BaD5FsFMCzhQZrr57FROMVOJME5egZyF4MRIhF41g8mWjvkgaEODugo7KoRM0CIJ4begtSgxCDOQUpCxZ6u0TJmPuspCqD7JjORWQ4BQsXS2qyqIt6gm0RBH9Aamh0PIz6QOxnBwTAiMNujTQclT7n4asWMRQ622QKdDUZolkY4pmO8ptBxkTBY-BFRAFtuLfZvXFWhtULMOvhmQyttR0AolYB611QdkCzzUIKmsnprBburpQ5KIVRTlUoUqjyY52z2g9gqgMJFDFzSuKrGa0ecKsF2yIDUKa4Ba2UllT9O9FEVGLIfxLYgYwU4nHRkK3WJoQGezilhDeS8gUGBhAnOn-ztKINeOIUFpKGUBNUrmEbirwFuNRBkyL8JDgg8wXDiChAUIJJAIuUvLVkIQLcnxB9xjVFBg4BqwAaAZIjZtCQC0WEn0TVtmgPW0FVdINT4pKIQo0h+IDclyCBOfMR8ldFT5CXyrSrbt1iQi6wDOyeoE0DmTTxrLELSixLYNEjNI-UHfV2Ag4I0aaAiAvpT6odEHRiBAdemFRw813Xug90aNEOnQgUSExJs5-qdF1-omAhMUICw6qMD-1JXMpBk9fKr9CHo3WFqBHm8SpULzVVwOZxpk5AkECfIBGDtUbhstWExlUpKEQT+AKdoPGutxInWacMRPA1DoIQVJVA62egl56CFmgLWomMcTpHgRsIIP+C12jOouqhgjrPMBwoGQm8ACQO8hlxXQ0VEkmEQS-k+68qD8AazAR8IjIF+QckMPGMUFqo2g+E0dkRDgI2pO8x94sqv1DbKSQHsVDgBODVB5uiQinRgizEhVCvg+VdiC52IetCQul7KlSBxIBGJLIMuy8OKbfwuGVdU0ukZpcg8s3vTCjA1hcEFL3sMAdFADwfkIvw3yUEEkFsg8oMoATOX1BlK84HROX4-yV9u0rgKV9H7nRQtgP06f5WLBxr8c5lSzW7C8RMfCYtQQtsrKi2IfTj2mbgJFkvMYgEn6vUmcuYr5FQjnoi9gHCNLgjIOxp5jeA8YD2KVWIri0RWMbOGVWFUwSI7BVEvSEULbVosekhq0uQGNBagXxNkTy0fRiChxIdvfNrvUYroBDxSToGozV8oEttaY2KbK8gvdmwOKGxkulIqjNyVJg8irMIYYzAJgXUQ7S+6qBtGg++7jOIw3AemPCXoaUwKKgKpyJBNSfgmMKkCJo5PSdRFKPFZx6-Sf3iSmHKzKLEApA+hNrj3FsQHZASglsQFyuA+0NJ2x+ycHcRr6FNUMrukzssTQ6IHyf9oyE9NsDDZIp3RlyzqyaCFaqGDIsfTsqhsC6ipQxUPEpx4SfDCBcAoELsSPAQCEnqYG+8IDh5+YRO2Q3x0+uhXw0f-GUnOshIgEA0WJQACER0K1L1wrAuKpwh7otMvMTw4vSs7aXKKaKx7IK0xhGk5o10JPZfADEF2qAMU4PMDgSs+inopFtzhmzzQNPMmx75W2B6CTlX+HfQT1okqwqQJJ1Dbj7A8gt2JtcJtNIJI8xzLO3ZdRICFbBQdUD0b0634odGHwswjdDDIXJEFjmKNHqiQwu8sK70EQ5IABmVIHBGFAwIytTGCRMszENRT4WQycN7opfCvqfIrnu6xOgJZOjjeoZ3IIL-I48StbHa2ROfIPso2KmjegGZAvD-YT6N6JCgr0CRzs4u2icAIIQvstpnAR2IKiiAcoLTTrWwUdpA9wjhQQ0DmDdX+ApgOVLX3V09fmVilafmGZ57abSvWTFCQ2DiCyWS-PyDlk7iOrIGQvwOAYVJpIWDqf9uPKiTBZtngMUjdL-XWQHEHqFKyIEOZrDm+V48kmX9SmaMj5mMF4ZJS7eMkNL1g5dKVxTpQKxokJ+YthHzob4EkWUD12-DOchxYMya5D-QUsIYDiINXqJj4whtOfzbJq4KzhCMkILaZw0BWQGiEIYsb0CxsMCk807AiwiMggCraEGDDkNJrP39kKUpciPKxjiwrEhX5ELj2G8nE3E52ERcM4W4QcNvF8qBfr0bYg8WgCDQ6QoDO2jirOK9heGPgPMBzRhLcnYoc-SVWBh8nHnoQGGh-BsoHAIUEvxtqGbPqi2c-yleCXknWK1CmS+EBB1hAmYBcwkg8NP5w8sJcPhFkW4XsWM9ixYkWiX4gvM+VKgO7u7yiIMZt2CSYuBEiHeYk9F4AsRg8boD44COSSpIgMYb17YEwKBSpHmXFUyzTJbBSkpXY6ukPzb5KQVwXx0lguJDQQLaOVK7gCHj2buggUvXEWVjJckSzcEvLjmSwflXVg0x0dWnpgIXYguDveTeC+DW52rqkCtQfJPvBaNdPAxDtQhwPnBwIxZC8BLO4ULtAkcuZuGISWS8AVDGAcHM9AjZcSkZl7EjRPzWgIYytPzlA77qZip5zwH6TuEHEH94RQfWPlxFa+SMBLsy3qHLJWSFMLM1FBN3I+ABRiofbgigiUDJjIyhUDVDMyeEvYxQgUwpSzm5hhAzR6IZOh9GBsTQLxiOKSGt74wgrnhULQQsUIRYsK0cvpBkkrir3BjEeEjCodQPaoVmmMWuNp2UczhTZLPWoiCSky27oCQrUk8pMbAl1ZkxvD6A09uvylyoTG3yDiXAABDKQKScH66xzzvuw36oMVC2-AS8igxk+kqb+Jwc84I+z0yQ2B-iEuInGLZDmWQODHU8OqqUBYQ8bNLiyw1Kn6p+AgUOQriy7E-ZZJs6vk6kPwKYESlbAgjXvyvVlyot4Ka0WJ3SoIzdjMxiozrbrL6YGSJ0nwIhhM0zRs9ICqDedw4GvKCIc0qh3wO32E+h+a77IHTYSzZDSngaZdEHyx53pUkirG3Jihh1gi4CUCQZ9EE911QxTWRxOcE+Nw2oQ-jutg8iv4WqDkBfjKsC7Q7yiqqmWJwZVyFWjhTvJXoYUL2CMu26mnnAwuMa2Xz8-svhEsBNpQX4DAFeE5bN+1U5COgQFYZpjgzVKMqB2QbUVDHrsZQmQhC+HuIIIYIVwywCU4XUGtCZI7KN7E+kObiGkDK2HAsWOmCDoXDiZzIL5wGs6Bh2IWVCXELG7GIaXOxioqWXkmHog0y7J0FT4P9a7ZEiuoDXQgHKuDUQKNQBIEp7YCFXP6L+EiSvG9TN3n2Iq7PH1tASQOaBOG1GGRrr8McNvAUM4mETxesO7bWzDVCusbx4Ik6vFiLesUAVAgIlYEY561IpCDMDGNQBRq96JwfFYQyCIIq7VOt2nAqRkcqiSqDSF6MTDJ2gMOR7xInasUJ1ddauOEPIs7Kyj99yMGHDBA7DCFzjyhssq1UotYFw68EF9CXWf47jMnhTARKhENbYJQFqJpJNGg-C3k8qXQG-MDULZ4BAuNIUhtaR8jyGE86qLVj8Vanv7xoin0Odhq8PhLzwSkRsQAhosowKzrewjppVx7s6bbGCeTUmvi3cERsDTUmokzXb5SMU1Lvh2ielCIIcIHQrlQfOmLXAhYQ0IHsUryd6A-aHMuTskDpJygCpKB6YLaobD5uXg51aDurA4hVDaECmTa5HsdcDCc23M+E3uhrJOTlAcA5LijMoSZ13qYrwMsSzo9rA+CQuMYepjiNNLFfP7kOGqRhEYKqbWhoY62H7QtwisbtmISNMLBQZ+f+rqyJCq+lLhzc9dEwg+WJgLdjYo54E3NFqlQoi4WRrFrN1EEPGBeEheXkUthX0jQFuW6BChXAi8Sq+JxCCG9iAV5OORQJklOgZBUq5IcTJYsRbgfJDImR4L0O+C1KC2bOKgdOgFLDu84mCqBj0k8ELRa0AIEsTac77SXw7tiZktT6IPLPaY9qJJIqQbosQByAywEqbURBIpkCsC9kdpqQLQwyaP9jkugkJ0pPg+8AJ3qUD5H7hup5RBQ0z4vVGTUjgXXjQgAgNYolOu5GJIRiMeTCkDpWsyEJXD2Aj9ur2conPrpKMedkRxgdGDYQHAu9fTixM0cnXPvzNQF6iSCNmf4JZSE6L4vGB4CkLGGAAUFAhwB4ocA-oi3Ic3fcjkLNHGHmHTiQrQZcLdBF8NyaowNZDW28wH1YzdSjBTR3oKBHGxC+lYEOZWAsaRLKoByKnyBACJ+XQQnUSS3kmJIO7l4j6AZaFsB4cqZkZwXIvpNoh8d-Wuop3sF1Qf4KoMiA+6VUnuii2LgY1v-4B4erq5V0oD2N0Gzhk8tcwJgzgFfP9QUwOSBKkbsD4EO0P8BqZx4LvLdQ5gcuBkrGMGwOahcw3rFNpLsafFaj9qJCPMABgTXlU31dHcI9xJyoiK84l9+5PoLg+fSfsMHBepXn5LAANGaO5dvycRbTko6tSQja1oCA3AQydBjQtcpIIETpggEgaUFlzMqsT7cIHaUURcJ3c0TKSjrFqDOx48EfCkR6nHzqgm8MFaz6pITC3LGo7Ci9oVwJSmUDhkzhJ2DKQdQClk9ERrBVRcUcqfZhdZfPehqkQxLgQ2XyJ8ZoIIgunRuJIM9NhKA-cUwN+a6kv9OWC3ksxk5RsQ3DOXQqRbdMxgHixAiwqDY+TBATZAvbEQISZ7zC+gIJtNtwSWjvcRjhlAQqe6xSyC0ikiUWJy9PloSSUCPb4cQyuJB6FQBPHTnueKFvg6rNIm5h4lpAunTJorJiXjmJoNhB5AmYqPqjLEN7NhDuqTxZYafICIBoxRUHCpPC9ocQIdwhg9dqWPY6bZCZI2jcoodiqMahmgGLIMkDv5+MvxHB0A1DUPzANMPCAyDJoZUikYMhokmTJRxExT6kPYnpOoBg1GqHWIH8w4saBic0LFkR9eSKa8OOe1cBEaYjSg78gvwxoASvFARzj0EfrC7jrguCiuLA150AEqcmitZQIi5aDPCuEjwJyCKMrMwUcpxDhztYuTyqDVsDNCQiEStKAmSOiLvHZi+SjuBEsvfSIhrMi8J1m88HgH9BSJMlBTQP+wsBKBdYfmJfibJ+ihHzh8D4I4oGIwcTUBROv-CkilASzvPQ+ZRcBKSU4NHhejyqYTgwiOBM7QyIDTuXhEyFgaRnXAhQhMBiAy2VcfszRixEKCSe29dBLVfqE4BauTyKxhMXyWawdjRfQ5WQg2nRf3dJhd4htHIP22Etf3CAcxFD0umYubETNZgKSB7BaId5syARNnch7aDKoTQRX8dMsI0AeYai9sR81Z3QMgQMnTOb2JQ0uCqBjACMLckR8tMEnzNarJpkiOY+ovSa7tKgpWC0zcMAdwuEseSJg4s8KO1ZOSa6ICLfcbHd5IMairjLDmF+qf8rPEqEBOjzssO5CxVrLpXzC6mvc5+D945kPnyPcjyC5HOEDEH7rzYnsGsNicrMIcw2l5zOdgR0-UftxSz67IVqHogKKbhHkoLhm5B8ilbSA7ocIg8xb0Ekz5RqiPxsaAQQggF1EOOMHJ40hTcTZ+RIjAKCy4NAJfSaVZAX2fyZSOFMCRgKgSUvUA12tHnSbsIdaGFBH8ArGjy1ERkfNA0sxvASL38uOmoZtKIyG5y5eEbPKRj4Srrt5I+uzfdhCUT6ICxnFRgBtT8c2kEa6wux6H9TwoQ-Ltwry6u6EDbW3kgBT40CJHZYMhzsBZV9w-NrVl7seIF9hewUrHBoXSAWtBC0xPQQCSNU4AvfRcA1EIuCiqGrrIa0x4IHopjAxxi+DUYY8uXD8VjrRpQIkS0lSJDaknLxz0EpTtZoLwNUJtBfDYoKIUtMFqtdtMaeHNCRuLRBPvAILNEKHZIhY8AC54G-2G+Xt6s1bkouAUAt7RGM5Vv+zPkNe7KD9Qd6DPo7VQ1JR6bE3KkrMpKsVEsACsGqU2H05ITP6npzBEAHhLc77CBKrRHwgj2Bs9o34iNt+Jm1qyBhCKVHvYWbNRo+akmBGV-wtqDqCdJTuLezzSGCf-SKovEIQyszaXjSHvuiCRcYvadqozJKRhrBHyzCJpGc4KQotlC7m4GIPqTPBiJD4MVwVkoWoGS+mKRTL6nCFJoVUGsQNwcm7SaEl+w6EdQjy7f-FNn1ASSORBdAPRnJjwLLbAOyhMzHFMizZUsOJy1+JHH2rOE1mtvFLgWVtzlrGt5OFjtO-4KeSAM2Rf5aBc81J3A0xHtPUyqGdQxAxqHW2ImBEciuKiT4sj2A8y57ZzMo6nkHoT77+5CsJNBoHJzIITUuj0JVbvDsetuh5EJwLKbSijYAiQrYYyvZJGofKSsQYr6Wh9bxYciMRAAF84DsJ947xKMDSAokq2hVgvJELRn0LuMF2s8baCSrRIvcEPvywcRGSgBgJsAzSp48mLmC2OGVnYYtULgFGxrqW4+V5kc9iwkWSBU6ENiVoQsE5wtomYhjGOyjoudaiFWsFQSx0UurJ06w8aPGA9BIMEnwyqw+euk6Q7Eg0GTBvGFlZCpNCe0R1eoq5S5H8myDgwmcMRi5lLC0Xp4pCYqmhJaBGHfJAT-mjyO9g4SmrJhBTSWji-2QTrwjhQvGAhTwI3oAu9o5IpBE5yt8x-aHQRg5WNFqJt5ioX35Ts+QKvC-E08C4gjgQq7WrS5YoGoij4StOeOoIcmDtJJgaPFTjBku81bB94d4LXiyYk0OYxc+-nPCCdg7YcDmbyQq1HzpM4SF6L2yllFnpBxSKRStJ46-KMDXQpiIFI2YwtcjQg1NGIhsPs2YfBkBgggHiiHAg4K3Bk0uk6MFwGgU2iBkFMvk9lZgfYdCAeo4wEq2CFTNsGIx4rvISCJEQzX+k8sfrjkoKwHMEchATSlOjVD+OXjgawgO8NiH+gIXUHzWRJnkL6uW0FahCfwLsHixUeGSMEXzcdvS31CsUu2jRXLFKuTi7oQCebJdQXFSkiDBuZO2wVQnINjQS0SUvhGJU-J81Cgkx1MBwi0gszol4eBEeVJ-1WOADAUNtsokJoohItmbAOBilwMLucsYSYpGeKJx5gBs+ogk7jeYCh3qK-jLlRCcFngmBgwanVzMlUxLknU8V7LmtCbTkyCkGfgME5TDBq+UkfsQQYaEc4npyvaZm74jgruLKAamw0pTN1fW01PSzwjohwQUyNsgeAN5MOTKEcSGqyQYPMPzXSB3eJC5koXBBxKYGRdi0CBayLtqTt8GcGvizbQWPdDyNSmNgHczYgOEAWghEPYG0aYoFKbwZH6LsM9QfGPFB49yMNHKZYJyhOC5JExBRuKhHbakY0QUCETLtsW1KLSZJAKLQJgMPsCFiRQ5vR1ApcRPLpyMlCsHeA8C74oTJ0oxUMdtRo+GlTbJkCoIkP7OwwWNa-cbCN5Q5YdBMOSHM9QgyielyhF1Il6zsI1QGBvsWMBCyKFHAwlkzFzUCILLRZBved2EFPVfEJS74J88V0HMp+YnBMGCaU43hsaQE+JlcKPAGvrsPygcSBGj6IW5Ef7+ce6CaDO4yzLp2j52wFPKC4uurjDgIQcFCq3CxoFzDiDujDjDs+aNIREPwv+6owFuEitxH7n8xtoA+O5kHjIxYKmUs5LCmxFTEtYnrfMzQD8W0hgZh+wbLnlKLoF4v5INPIyJQuGmCVYgiSzjg40sYsS0De+y8LMGL8UHbLCAdXhlq2y5xIH7TH9yDO1x9FF4yUg9OQfgRE-6-8MEW2QJrLGwKi61dwSMdIIvzbSC3Apma6AcYBIctQQzulT2pDWP7qBz9mCIVycNFPvB2pkKOtSH2xDH7lpgpuENA1UuSTxeYVPQT6Sjs03JvnKVNR4xTQIw4x1SWETrhbiPFA9GDij1dQG2Cu2tWa4bW6BozBsmAcEHPQZtXbfUCpC7SiwSQjY0I2B3AjmDOovKUVnBx64T+JXBv4CEICIbBrKAsCnkVEMSBhaD7HSA7VuBF-PHUE6t0o5o8OEVx-a5imvaTt5MB+jHU8EmkA0iKOq4p4lONA+yAS-1DPFIXmrXhKW+HVkyCIuzlllAPqwgj6LC3mRPwhmeJwMJR2QcCkXx61qJOmg4M35D8gKYnqzg7IzG44zppEtbHP4JuXnBbVW4m2dcybZ9ay-hAOI9rkIpIiwSMyJcgWD6jvsrDlSjPwNKUmA7dCfKjCRaykgLzArvVs4QWM+PFxRjwbkMBx4gquA564K8gY7xxw2NBQ2uo42kqs0i2RYiC-sZPiyAvATZawq3I0xp5PcQ-1CH5tAQc5jSko5ZNNgceoiinpqxls1bgdqJgKQqzZ2kBIfmefA9KI7Ql4OCIbhmBlhBYEuFnQiWgUyDSFpzArI4WIVJ1l3oXqg7v9vaYyLuAsKgJ4D6KUHSkEaBro2ysn4oU8Gv+XWaaND8Q0I0UCqaOY70Jl4lAzqjvidrm5DQfdnFMhvAGYjngualmBQJfcmCBXrBqWkuwqwZygdGAXiXEotJbiBIQ-Iia5jTakKELzIiGqzHARPPdAUIUbb+AII8DFIhAkgTWkAV4lvp6VuAFQpO63wsDkYB8b4wFlAk6jiuxcbLVgMmZhwyoIVYA8LgEnxrlJ0ENQnyPGVRd1gq0GxDuAslu6zNp+khVofICEJohMGyJ5CiMK3eaNJxU6IECLOuLIrBQyFban85AaqUCZg6rDQwui8x1EN+fXIk4LAfiwxvAfGDE44n9pDNw+ixG1S1dC-aAXIsCBAWYo2GMY257ony5-AENPfTS99Ij+q7AaVsJFicoYN3ByIn1JjISCvu4RK0GeD+OymtvoBu54iptVMrvDu3FzYBg+UJfixs32H1wNwbpfGZKgz-gcioL0kIPoSUMayTD8wWtIIA+u6Girhf59TGkB3oY8+qh2iJyG15Loe24qFV7YSD2bFATCusko+uwGUDASaIG2S2OYUEGBbqI3Uvpm0nJzAkmo-zJRYh5QKxtQRKd0YDgZxUvF8Ki2VrpsAhQgKz0p8ObU-uJf0kHCD7veViJH2gEJKXtlrGTemkykY0aO3FwQj9iEgte7PvmDcQCYOBQSUh8Q5GEQ4dQ0TKEstHDgTdO5UIppwLAwPWf9tcKm6Bo6QIFhiNmdyrLPGsp4DapeqxEJMawugHLk6YC7LYrfgnXGjSA8HmWSgfjNQJsQJ8BzNsRM0xjJjQMiXECtiK8H8b9RPKerm9LkMz1aMh5Sn0WM+AxwDSQQOBNebmQKoU6PTNCQfKhIwu4pTXWLBEsG32EL8BsnbScdFcK8O9wA2tX343Vr3ihCgOhJdwS80cN1Npa3gm+C9GZNDL5SGHSH+KcMhouEQdzliIyGQoWTm5J5eK6KbgpOakMGJ5mGyn3A7WYxiKvMyaRljhxoZDpcolsKPtPmRqDzFsA2qG4ldxF0XcMWPKWZPiotM0Y0N0MtzXwGf6CNrUpGDyAllKJDK4ESAcRGQTLE3zHOhfcfiutvDspIgDxkZ6jp5LaDzevjxY9nKRM7HL4nsOFuBFRdAx1pCQxwHM05cxQBp7hfH3rjiCnGo0SNvG-Jhx1Wn-gjkWQoe8v0qAyR4OoL-ZM3+aJ4lVQYcnTGFZvuWfnII2gCgo1Y7IlbBjWJKYvyrOduVBLRoMkZRBKrLIDguvkir4qQCKZ4FLtic6DMRdDqTvlEyJUYsRGxiA-QUIpj8R8YNInTDeCtANAcQB+DHY3QPR4gi34I1TWQ0uWDqqm1kDtZoHJwhzjFBjjANN5gzmUVe7uLIB1j3ZIpCfFUwYyIWDEUR5BEbtpBgG-ITQi4I4L16oONzAkwuCMVhS3kFeaAdgcRDcyMo1pB0XsX8fCyA08mzFtjVcd9K6gmOPLfuyW6KLRYxcQG+h1b9CsoHlQnV8VYLc1ioyfshDCSMlziLElzTXD6I5CHBTKmeZjSjIUIQArYbqWqL8jkY1PPCIyCH19CzukEGEMDaRmgOUBZO1KgWrIudJvphoiOIA2qm1t2uZBMkcIELX4Q5eqHDXeUmwJJhQPcI4yzWpcIFamty4G8gVooEHRWofjC6cgWOwvXXlC0G6vKlOKi6hwagESQ0p-eoB0PGvkYgMj7ypJhMudgb9gbi6gVoWhE-08xq4svC4C0r8WDNsPNX6TIOjYOtSpw0Ixpwk9mxGliRQEtR6ItLbt2+VUrWorRCp7jphkGqf-yP+pnbh2O+HuOVFSYY5x4bVxDV8L2LUTHj5LKAwo6QkN1wrSwDUim0gauLeR3izKJwQMKmGBc6KElyv0zXAdkJNIa0wcDQeT3wwDEtvhPTUHw-cDjDughtlyOsNdRqqUMXbx2eeOFrIkTPFBbp54BOpGpXMnivRKUqrtqAIIuXVi88Dc4Mlgi-ErzBaf85m+F78Ale3CoIYtPog4USeY5iitflLsVXAmMmbXkeQkKXMPAsbZx57g-kGMRccBIGiNOMbU18N+iI4JmkBDd4EMDDZ2iBXhZU7Wnyyb+4CN7pdPzaNsqoUYeQ3oRqJIBD5zAfcerxyUhPGV+U50VGkZk0VmEuuvC5HojXMIkScu1TM3X7TfrgupGR3y5XB30H-QFUIoWG13ES4dRxol6kngIX4gxFT4M-nTFXoW5V7DR6bU7TuF9NIvWwgWT+PILO0-oN163CbgLFh0QePHqOsskdIvlNaScvzb+cMvO3z5YnQcIQ-AL6QvGKhzC3kKaAweJMXtq7uPMjz4IM+7OKUrzoOEMKB4vGAtWZS6PGEMJOpUW5pBeA0TSYhRYdOwUBzE37c4GWd4MVAKIHcfqWP95mK7Ek-azxakZNpJ4OWibUHS6decirPBAjBYKBKAY8GxLlILiAaxUHRk1T-zH3TsCrWEPTwPBYRxhLio+kW8TCwLPAXIe0DoEfpyEUOuTqMByawUKFp+QWSCDYcOZWMeNa2gc34VgW2aOsUvhpUCWJjhdf6euS+RcrAXZt4crKX6Y1xtmF2CKcQtabGcSB+6d1h6wHZgHoVkyb4e7KksZCANeNfSS2XbT2XXkpULSrQvwB8yHKYvYZ8Rbhd3WcyGCevAoLAVgyRF9SA8WNJpAGmQRWZgGN3UqQsMe2xPsTaAgqV3hQ7BqixgJDQtUb5gPwKqyqAaQYlAeUBw6YoBJ8LWAwueOhO4N6SgwaFgngGIy+Qc5DRIU+xnbKFCcQNy6zsFmSmCLlDj9YhBfTLbACPMJAXSWAavEFmTIPdPzvAGyiVgbECxmOBgcUKPLyIQcDjAMW7Jsc+BC4DzorwH4jVEe8JcgY7ISbaCw+WUaCtYeQQynM+S1YKdiuVaeCN2MBSuIDER-nS5SoBC0QLOR8h3oSVpxHN-xToZLR2wINKcGJKRNyGiAygfawGrYM5kWJX554eIrqKMPByYCF4e8YNQkWaEiBZLmyJIGcRNwDLwViIFL8oH3JUgO8DGpYoSSYYgSmXJizRwUhA4wWapCsQ+xyGfmDjWLxZsjNwJDKfgBRsTASVUN8DpgEbTUiH3LeSczw5gHkQ2ka06JDLwCmoIEwcwK1BToV1JMleUDYnQKDsqdah7SQXAacTTC1XCFAdWSVa5eJCDqJccrcQRDjRFQdI6nPCAyQG+BdcJRYDhNf7HORbzH6QYJyBDbr-tMybH7aiBksHFBp8ewDr8CHhyBXuJXCQ9De5GyQ+sEAbdIRXgToFoDH4CAjmYXYB3nLUDN+FKCerWpicuCsSevZWYgweuDIuGmwN4Ogjt6Xu716fnTaYbEBsmQLArAb7ITCcTbQNWbjOsN3DbPKV6yqVfCwQQd6ywPezITFsilFCLAOwNnLz4OgpHEIHRGKQ5gXIUlS-YL6CvDXuRQcNDjvxBeAgNFlqygbbL44LEaSVJuCfELZJlCb8hfOQo6ag1hQVEPxhfYCNjq0PoEjUFviQ3R3gUZO0yk3V5A7VJdhnqD+o+YQkRYLHEjiVVewa-RqYbADRhj9cQjoef6pA4G-DrqFkhdEdkZ2AZ1CdWUDDN3BnAD-YkL-FblT6xJBIKnIkZCQSyhGRDWIs2YqCyOOYzOEMcB7SaojkzdIjcEeMaLRD5TF8CwK9+IlJ8uKGJAIRCLPBeshHUEXBM3OBwzIf7CysUOxM4daiNoSKJQqMARdnAVRmqayAAQUEJLiQ1JBIZZAUETlDZFHkFpMMvS-oMiDZKIKRTkHeSWSFHgfLCjRuMF9RWTIo7kYYxpEIcVzczTeB8pR8gk4KEJA8VaIfoTcCkXKhZ2hJbhg6clA58VozsSO+7ULbL63lNQgnJfqiYwCpB++IeRz2BZZSdKGBzsWWRDRGEAlLJdScrGRxrRDNhFqR2R8SNeBiwNNQopSpCKBR7C22U2hbICZoJyc4HpAdKqQiFdTwaEzzFwdR5+Qc+jcKQ9qgQXFROcTEGTQe2zWuTJCW0aiqWJSKRvILqKwgHxYTBdQQdCEQRwKNJirAZIB21Oq7SiJUCrRK1p-QAQgtAIRL0MQRoUOORARobOhNQD3j9QbghuEFhRoqCNBrsClwbWNjLMoTcS+Q5lAcEEFh4JczjWQPGBB8G2T9CM9QbQeziHDE8AQwIIDi3LJjzGQ4AuBOJQdgC6R1gAcT5YDogFoWgy56Bdy4KQiQIYYgjWiAeZtOPxj2rMAhWzb9DJAWdiR4PjB0iSFSyqG6xulcs5FLdvJ-0bFpUIFbw6IPlyuATHBjMEr6lQOQLZQctK5AXkjHEFUDq8FpAILNQwVhcgJXgK8BZdWWAdwHTg0iRfBZ4IFYjBPWpXzL0ClFKQSZtboShmF4AVkL-o5FaSKMiKvwk9XgihmTOjR6U7q67FtDeDDX6l8Ahp+wYRjgcfniFHZYCQyLoDwLBWBdmO2RCoe1izBYM7BddPpZWcsE8VNjS78RVAatEpBKUPIigOWXKvDX4C+ubwDgSP14QlGpCOIU1ARwPSC5HDrQJFOgotrLzz2FerocYfuRiQbN5GmdDTQ8Z6RGglPQK+A4gMFJZDYcVqCXoIPiwBPUD1uPwwg8ehxTINSBdFBsyeCc2RxkeB5C+M+4-YP8Q2iMcRPFc+Bg6d4jFAfARApYGjwsDKBtreNL4GJfZbYKPhupe2B14JBxGaRTjgaCSKFoAAK8cPnT52QnpBGHsAe0G6CzWQiDpzJ4Gloc5AJZDoDSgM3BEkGmxyiN-DL6FGGNKKcYvsCArKkGIirAIWSzGTAz6SJFrfwP2hUmGxC1MGwIu1VEoZtAepUQJ-yOmX1gEQMEJ6jKpojgKCwuUTlyY9TgS+udPpcIG6yduVnBF-eFR8UALjS5WOCEIEIC6UA1htka-SlzE6CNzetApSIrhvefXjEYN4CwDL-RB5SiqLmV7BnkFry-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-C1KaRBKKbgL-QAafkSXkem5O+D5xDPB1BucHoJeQUj7sNJd7VOBjhSyB7KWwsrDayXKQaxZoZbKTiD-9IqhloflZkPReLTwppwWOddjAGQOizwYxH4IXFTBAQFwQceNySXZGDN+LgA4UdQDPiSqyb6VCqr9Lr42AVjDRyUzL1MKxjCEIwyybXbJ9gCVrhMZagKQjzSEiNzA5gQFZMBPOBbwOahRqYuqfeS2YKDGxghAHcojYcoiGWPd5QrHAj+2HfAsxCZwl6TwzcefopWQF7T8mH7jlgA5hOKRBDjQqJyetSVI6KFQTi-Ge4-XXrhogHcqurNQYUMKRjuuRpjRwBkSZ6NYyCoFRAyseFzOFeC7hQuaS58dhi6Ba-rlAazL5oEc56oUhx7hXTDHbHgCivSvC22ZT4hWX7EWpTYKyJRSDDVJcTXIJizBIIKATMYyi7HIRh-UCiAVlerAkuIyAKFG2ED8KkSOUdz4OOO-BoMAOAEgKXgzIAejpENSAh5XXYDFPkBSSS5Cs4ajBHAvMSM0AEDHvaICECCEDWuPhJkVBUhqtduKqdFIxgCe6bnoGCgIeJdSL2bKCwUScoeAIQQUgYYKcKC-Dg+VKGylBPp48HwA64NkzxotrIAoQoiygfbQ54kYzAsOvCJwHpQpFX3YXGPPzQWcyhPjPBCkFIMBmTMcAW5HiqvwXLT6INqir+FpD50awA+YYoBPFIfB1Qc5jWRGIgvGYabrUJX59bXdIA0AAhw3ZeJJKG0BhlFkCrsGCD7oIDjvYHYr9lO0zOARLggQLwgOFSBFekZGwJINEA3LHVbp+ZyqZ3N7CZiZlj5EHoxZ0FwD+mMWiMyLVAoLcloXqSRAPkBnABY3GgcAZ4BQQ4GiY+AIrptAwkvMMZizYh9i3sU5CCkY6HQodhi5EHkohsG1h70euxccLQnU8VBCIGWY7gjLBTyuOZBNQR6RFUJHQZ6ZJj4SNcytAVqFIaGQ5pkZ5HpIEpBCWUdQSYNHgCKExS+eKvScyXOwF4LRBCQW1KOsEiQT0PdwZgcmGXKNFi1KBxC44erjpofubpMIRx-wTrqNaKV6vqOzHkYWQRcgb47aHRLHe6NYC9opDy6APr454GB7oeccpLObQhJsTKFrSPODZzfOj-maRAXIS3DSkbFRRMLRj7LBXCD9K5ISwr0TMoEqqylN0powfVDQknvhZiLyDe3ExiA-JZx7rFLxhIBoxcmJ4hILD67dZL8TZQFqgLmTEhpGa0EwBaFj7aZEAotEMywQIFjQY8Oo6nNxD5IaKCZpbeDN2MbRkKUhHSQX2BpoGGhiwTtru0JRSeRF7o+kdpTxAklADKMZjkBIIHJJF9Q+oBbDzw7OgKGVXbhYRQjVYkcSuQPMALlHqB07QkAOJOj4tkLbHXsZJEtKV15uYmvZJQf-A34Fw78Ew9ir4KiCkIFzLGlCWIZWMBYRaOvQ5pOgYusI35icPhSQ5JII2YBGoDSKxikbPCAxMZtDW4qXjgWHXb7EMITSwVIQ7CPsn1lM4T2EM1DcEN4Rs4H0LnuCmje+Zgg+iY2BAfYbw1lCJQzIN8L5oF85dDU556gbTH3GHlRzwPsK3CVUCDIdcTeOMIC0bJVot2OggebXC7y7QeB+I+HZ-UL6oZAFSaPxD9imwJgq0GXuITiYIoNkV5xcUY8RS6aOZFzRaCnfKQKpacDQWQDhanADyBd4SMDadd+DLGEGpJiTghXjDdz3MX8arYJ+BHMdTYj6FgJKtKvboIHxbjIP6CFoHXTBcRJTtgBdKK8JGoRKOWrq8WCDN8JIzRKcVyfoH2B0sWShnLVHyOwF5gWYINolrcs464i1KArPBJgiJQn2MK+glKZRo4gF8J8EZ3Rz4PrwIdR0jR1BFII9ImbS+X+DtpDHC+eJSrN+dIh9EJyjhMSyxYWF1hKuJYjPFEFgzLV5L0KLqBvMKxC7IcxRkoOiaXkcEBQKUCDOIEXzgIC5jsIkWTw7aKiECfUgytGCS4VSPB2AAfJJsA6S40JVbCdQQGoeNNKJYH3jwZJELp9SKRUVORD9bJ-BJwhPoQyIuFvaIYDtgIuxWlZsLHEWWCrRIjiuAXFR+oOGFYopuBUiK4BxGJTbosRxAAQFr5QRMCLE1YUYAWRuraVQPZiVbLELgSDpYEAVT-AbShd5bJhVNFjw6YQbiwrO+AaKMRKtueMwqCFPTdUUBiBsAEq1KGdTAqQdwhoe6h3ZK+x6IE5zIyCMBPFTbaYBV0gUEaEht+eH5-tStDgKWXIZIHpA2WISj68BRAxaZNiZiBKxVIAyTdIyKSpkcgTy0Vo4TEUG63kYGRFYZ1TPgR0zbud-hp4f24f+XfCVwQdRk8BoDlIBBr-YEuycQFYnJ0CmBocC4ajE4qAjBdkYCmGCjAGfUbkgYpAxoH5hJyMIh4ZVqh2SAc4lZcuT+cUxip9AUD4YS2w+nJoQ0xLupM0VrbFSZCCzGLbL8rHsZy4SPRMhIkKgwO0JqMcMJg5Wyx2DUzEgWP0LfUMYzoITsAiYV4pmcQEQPACMiLgVDBd5KUAt2NGh8ADppZoAggP+XwzmFRoyGkVZ7+aVgTXQeOD+ADkxXQfVHAgM2h+GaEgJXL2xtiBZzBDAuQQYUgF-Ym0qOiClSlUb6ItYQUgaqaI77kH4TJoOOQzUQXTuCEGG6VdZCjxBhgKgF0DzmF0CFwboAY1WYj+YSUg54fPbpWWFxh2BbabbRXA1QDIBZ4mvJXJCyB3iICblUmnylyXhLIoMiAqBOP4dSNqSJsFLiodJOh9sQJh9JIjjd4RJikCUVCAEctGloD4bzgKZA1IZgb2-aUTqmElAPALRhSYw2rLsZBiJcY5ycIeuKpZKwTOZayBtaWySogCyqjsdpIbIdcA4UbyD94S+Q+WRKhe4D+oGeWKBZ6EnZ5uAUDiuZ5D3cYVpVJDdSxU60QKUu0QbQGkIkEcnjT2eJRADBFbhUGGrSiToha4KW6JA7QJY9I97JjWdC8kd6ByEXqBs0MvCLDF-C4MH0JnsYGg2hNXC8QVXa1+fW7J4WXDL6f4BHyajQpkbiTYnR7QtgVewn4XHIqkZYqk6a-RBIE2SKwEoCewZvifiEKDtwJqaFQTDC1kRTF4XKGIZ8RNQrYMfYYYEIljUKMKowGiRVoFOhDFRoCq0-Ob1wdawQZSC6b08sDWkTojKwXEgLLCLhNOcfrBIYupHcbXwZyWIApQp8RluOgaj4kIBOvT2BD2cykZiYYAMRDbQt3fzYowu-R5UuPauuWZpN+Y2hnyL2oSkynFbXC-iQMMPhvCBaTSTetBwId1Kb6YQagvHCjRUfeD+weZjygOgpyBfyBDqDsSeRXciCsMCwRXL0D8SOZRtRTUC6jUQKHHUHBhyUlTNELBY8IHtZKrbnEzCTqJgITwrxEbTDxbIooLCEkRsdPwAxY4nDxgTnLNVH1JxUS5TQyQ-iliWFhPNQGgmkcXCglLggNwJPh3UJZAyfaVGGobWkvcLNx94bXL0daexXjCvSFkmDFGRFhSSCTSJzgbwhnEVTwUMATQHEMqpixXIC-gFjCLyE6x3YCxA++JEKHoNRwICCQofsQNyVMDKD5yXvKIIFqjnoeBnd4VnAKfTeC6oq6DH4ScqzuKYKZ8Rlho7eXIdeFlw+iJDYagZtogzFhjx7O7SljJKSZcc5BxwZqjYYDJS0rTZFixa3SfUN7AqSQwwLSGEJQCX4xC1Niqj3aRiKqHxgPsUlC7k83rC9Vo6qwboz08QkJrIQwyXMiekWRQ7ymJL-I1sJOiqzBnTuqHcQkoTJCdgQcgeoCnTdQVJLOFJwz6tZwgUsEWxSlMVgUIGIiFcF-hkkmIr2WUfKOgFxCZiMKj52UG402XSziyP8Lp4oPg3JKRArPCWxSJRODGoYQglKYfJU-AGw5GBDzHE+5iP-ImZGOLdAwqB3zFXaIDBUeqppUGDFEjCfrgwyo65EQ4DukKEiS6AXCgdNBiDYTPqhIbIApeLbJS7QFwyITUB4PUQItFTfEEYdhDsQD9CHovVAdGbWDdGRwS+QPqHCU2aLV0M0AEdU0TdOS2l6vVN7lwMT4W4b2glwOo5g1HpC6dcGi2QeSAJraejhQbTDOsINCm6PhgH4V3CLiezB1odKkYEct4J8UoDFjfyBsyMXLrsJfikYGWD-ebZAToYqEQoOfC+eQOgVWGIpVwNkAyseqCehQJI9jD64uQHzppzatgmgNpau0fmTJ0d-a5oQWTIgZLQD-UcoTqWKgUgeSjdKL7CDqT6LCmHohtvB8A6sCVFPRB8yoDZwgSw3N5DYO+oI1fDQ6sWUqhQfzQ+4XJghApyGORVTiIgjZo74uzwlkTIwTAdLSuQbSicwSHZTKRtmkQImBxge7ibEB9bBwdYCYkOrCDYOkBck+uj1BBPSKIHWTG0wGDD2EWCuIkIENwQXYLMyH5zYFmQe9WeEYYW7CR6fyxpMKz66MPFHp1G1iSWRfwdJADp5+M2hbZbSDt6KFBZ9ONYk6ZCDfVWMzN0JYCizZgDqUVaBwoBpDH7JibqyOeBhEVZxBTJxYlOX5h8QfX5XYgyJ1oa8BmNTqGzid3TVoG0DWnNj5vASPA+Is9DMOJOhClEpSS2EiC8GZURzwJLL31Y9oQkSlhgoZWDdRZ1wk9McEtUaJJJ2BjCzdPESYwOxoe8JHLTQZmR5UaFhcyfyCw2cOosWP1poMTuJ-UsljQIBnRNOIihgRNky5eWEiq4dVjiZTBSMLJFj9fSVhRMEPiduRMxCga5CFwZYGNIK4B+2N0m7nZFL-KXwjoydEZwYaPIiQWiTKieQSRJAwCwVFYiPLdeoVoI+TxaPnCr4diYKfCEHm9d3C6s9yqUtM4jG0dxzYxBGnBqNBKlAFiKEGbkLIgcczxbaxBzaK2DgKXhz4BYupK1J-6dqbQAQkelQI1HHBJKFLCSIZ1yjcdVCHwRbyv4dubAHEOIhoXijo1SY7q9QCCsk4txVEYhCEMvVDAEFyhnqdhnjIZEFxGEKpTsQX7bKf2ASoTPAvQUdQy8E+gvUG8jQtOKhopRsSJtTPLp9N2ARlMPjWZaZK70AkDwucli8qF9BMmIo4jIQvDHYL-rwk3DLDZBXBjaLRyq4fOyuLASDr6ZPwPAiHTASZsb96d4F5ZbOrg0CZyWyHoTYlAGzlIBlDUSLoBDyMRzxrSRBA0F7L2gYEoQE89ABgU6xwgVG5tvdcSOicVCic3jjXCfKp08Y7ZLWZkxmeMCBewZ8QVxXbIS6JvERNb2Tt48bSiFC-INmODAdkdOSkfI-qpgUDiAET1ZwYKrpjkxHIYLVZ744BIz-oLcJGSHSSy3Oo67DdtnoVScqSWKuh92V4R3cBDbNuC1ielbS5HTMiplJGwgtUYIBTwKvaxUCKyRwQoRXseVitbdExkOAuTBvQYgzvVyEVCPuysYf-IB2fVgewH+TF7Era7Qn2YalFbSoQTvhQoeoClyAWzAPRaIJRRLgmndapb0UGCE-RBaU4dzjItUFwqJQZR4kdpQi0QxC+gIRKucRsnRbN-RHvWRDTxS5BMk1qig4I-x7IeiCFDfGjHWBHqYfQfpD3PojqJJxB1Kf-xWbQ8AZsEsiXIQVp79GZB0ffwC5ULjrFYSBpcuUhSpgXJx4IPfzWIUjIhAd9J4Gbi4XkkJBUqDgQDoFix4c6xiCwV1KaUQbg+kEuS4KaaDnkBzxSGLRR806SIok9MHRvYyhLyF1C7KFTAYYff4xgLaDccuxolZL4Ha5TPJQqJ7Lxw-343KeHmLUJQx50KgiAYPl5VYGB554iLjEgLmyTSerAgw-MhJM6sSL4aRi+s0tAEsWtRnqA+phEHkAf4MRB6geVKozadEfEbwpT8eViOwQhgZUFkDwwECRALV8iQdejradCYhcgWLB2CTtTw84tBKGESADaRwpgCSeAa-NiL2owDC9sf1b1oWFYwnUiDEQT0oFgyLIGGAoCc0XdAJREk5iwKOCZKToqLA3XZq4D1DAqbwhsQC-BfYLZAjqfXK8da5TnkjZH6SeJg+pd1QRYfwwjCviavNJCHbcM+R6uDuLGnd66wYGORZrRhYqLXmzOZLKpcsPzz8rcaxPTHxSHUN6EWVCjCBqAeo4xGaKpouyi9zfGljIGbqGyG2rEqLbBGIEjQ1Wa05SC-3BkCUQWqCDYBIkcUjLMIrKL6GtAIgYOGrsJoAdSPKkx4YsAQYNICVoFuBH8HorkQcsBdYeHwwMPfaN4ZZDeoAZi9sLPACwjHDosfoooSRmilLNTDIox+yLoJCBU5SR6woTSIQoLInf1WGpHFAk4PNBKKe6DHCVA6NwoyN0yS6BZiZgZALh8ZM66dPBrzGNuj0WKEIzhG3JfEQtaoURjpZEpTT4mQNTRpf9QzYR2yu4CRg4aLuymbF-CjcTDAfAU9KBGKKi9KARTggcLBVIeyqgEWSxLAdti7serjMya66oxXVGyyb7R4mRFyqgO6BxPR0i4gADaRKTcqIqWMWLJSNFVOCYJG0bamGhKDrfQTyDyqDKBbwQ1hqOI5xxYMw4i4YKhEcG-KcMD4S-aNZHs+RVDktDPgqICohtQgGyyOZ1BdlEhjVNdZnq8IhLn49ObF4YTDYWKGLOuG+pyIE4JVJWFb5EMPx62N5xukGkjohJyHNY+6GCYBwz8MSkb5zS2yPUfUg57C4FDYE4Igga9iXQZihp7VqFnCZIK+IRajLaO246LSZJJsPQTTRCpR-8yMFE8GlI32d8GxAVia16F0CDYG7ALwH+AiYYlyHoKOBEsWsZSAsPx2U83qdeOkYWqAhp29Xcg01aPGKhd2AYgDNiB7LFCEiXSabDP5xXAYyKfaZ6C4xBRRtUZJKg4CaDn4+BLOmQOF56UISIJHmAsRXS4UaUBmGuGFRkoN8yccI1hisFLLs3OUxv5c4LdfWmBuyZzCAwyKKYdTI6fILvLNpOiiw1IUYbOYpCIQf5B+aaCprGJjCCgTHLKaOYFAmbtDpMNpGTQTBiwJVZSW0ZcC9AU3SjhBoS4iL1GaYZxBamBGp82V4oZ8DkQksBEiTJBeC7eRfTg0CUnk4YzZ5wFuAVk5pY5EQcTtOZMzKYPEoyYMCT5SNpF-YK7HL6eKDzgemYhVIQR3UYoXP0LeanwFUBEIpwTwEHCge5JSD74Eyj4wcLAwTFTC1kePZbJU3AwKZCTYdS+CHTE1AH+cig61YJDpoWzzaoCTIpWMLBtpPi6OIe7BFTXViycrmCNIMIl7aWjqaUCK6pfISpE8Ubo3KAHQzQayJfNW2wBDZSQxadqAiCaEqWOXLFrEbZTq6XGC0aYrgIQdSCHDA8qPJW6TUMNFIjQjZ5Z4XRRGtYCpX2Gph4ydQiZuQ6adEPwAJbTLmHlEzjcgPKGWMQczfUEITxEp15GuQ5iNkHAxnmDVAdEkeLWRI4UDsbzDtwxVAdwQwYRMBSCG084EtoGxpHMBIy7QIsh8gfCQqPZMitZSuKv7U7CxiA8RMi9SiDgKnzr+BqIixBCyLgZCQX+N7QWHNRi04dGpRwOGCl4bwYbJOrT1uJRhQQWAQx7G-SbAI1ykgfBhdwN-kBMeWQcUIq40LK7AWyDzKXmcfLj0b5KqSY7K50G5SHxKKzZdd7KzmSkKvCPboJIWH40idnAtscpQc8MrD-JH9C-EA8SDycoYEYd6Tv8eywMnJPAv7T27fdaeASKNODT0NwjfcQ7n0gXbRAOBnTCDBcpvhZZzhQ6cElqPcCSnXRiBiJJg0ufAzsHP6BNod3q20M9DEkl-R9HduI+gUQIbNM2A2IddTOZSXCFVOgYUMZ2R5Qa7AWnUkw6sGahCE6ximwUoTOQG-C5fRj6qGdGLpMXUBhEGCCMIHHYt3D+wkpXgghMKnwLwOAzTYf8QCrEA6k2fjxwMP0AqOaEzqAIqhszcEJfNEwwg2c4VyJAMA6LMRrlnW6TcCIbHEaeJmySflhX0FQY6XR-i6lfzT4MDVTrYgLA+oiKhFkM9Rj2BuJPZEBHRGPsCn0Gr6QrUDgDgAlFsoD67naewzqPNUwW8BeCqctCDdwbTbJJHVD7LAqaPgHkDTSYCRVsRWCX0qSBU5CYUwixjBMy0Mi2yQKxLoGi7qAKJA1wZQiChA+Aa4bICoIBLI+scbSAOX7iTlH-rFKL7gJwDQxQZN26h8b7rg-CvS-hT1qs8fqbzChuld4d6hSwSmDyhRMJ6SQqyeuQNoF8dDwqgf3gkfcVD1YMzg-JS2L0vPuC3CzPy6sdGAr0fmRCMYYD12bRYjuFWBsRUnxhMalpAkLsbgfMrBU4JeAOzO4h9ML9mWhYBJsfcNyI5OiJhEUnFlJQ8bcEBkrp9S-j97XZBVpK1htCEzjlihUj8KUEIPISEjbc8rgLgBMCUVIEg8QDWKuSdi5ewFg4taGjh1UXBCKcCCh3oToBo0bkZeAVFi+KOEG86OLilLO5S2zIeyLUQ0HIYevTljJYAcsJ1Ta4J2jLULxiZiRISQZTRDoYAECpOLqSrmYoRAiBxARuPuCG4GolCWaIWpEZFaGhAVD-qUeLOJeqk9WVKDNYHbIxgOHQ2AHPjrQNvi7UynAW4FBr4GGNLi8pfhPkPIilQUHrL9Sqjq6bAaf9Ug4PsTYEZ8HOwHqER5OceQzZkV1pCJfSSpaGewhiTPK1wOIR9zKTQ6rJOh9AKKKRSUfCQZM9To8RuYnDCQyPsOzGwjVtzhaYfLRIGRJ31AKZqWHcgeZJPINxSljdDHRSm8j6G0CPiCC8eIAXOHDKIfKoF64RIARzR8bZoQIVDUNqmnYCQ6fYQhC2QKPjakf2AfWEJi8VHM4rWBUAKXP7gl4LpKy44XAdlCcicYPHDyMAaEfLAwxTga3jwwfazzoL-BBcMQbrgpOmgIoxh-EPOixcU0HqmQJhkYWvwmUIbGfoPmyXgPrCTFDBEOIJoIHPcWwc4YYKbocW5DifFjfgbdT1uagrb0KKRopS0hKSdTaBSbXh+IkbpaDPl5YyVjSCfVyYUqHtATSvlyzYc84NQBoRoKkRCboPDhIYA2iqwVSYrAIx4ZIaFBY0z6DGybbJswrSmwoiFxUgKnyzuEybigAADcNABoAoAEgAsAAQAyAFQAaAAAAtooAAADbNq4ABQAIgAkACgDUAa5Xj9RvB08WAaPgcXD+5JJjlCN-QoCOaj4GYkQplMmBjCBxyCGa66BCuVYHhKMarCUHCS4h5bIQfshcsAjj6oV8Cf5OBinDNZhPNa7k58x7lM2NVbqEhpZyC90QpFYXDy05yAUwA5D3bLIJT+eIFQdLihVBYyDOGVhBGwSXwrWc3ECEgwlAcFLJ20SjkzYLOTGYyJQa+a2JM8VJbnUPL4vlbhD0sCxhBAqeQ9qErYoDKW4xoUyllrDmzCQ3xAlwZZFpYIcwH0s6iFZGe7kiC9YYxeuBGwC0rOZPoIAILZXDKlhR9hEGoLed+kUuGbSLgXkjhIR9bxHGdnEIJMnugI-aFDfCR1waiAusImQ4RINr2qzzo+AX3SetXcjVXZ9BZ+enLZoAHR92HWlOK3nCi+WjR78DyCbIUj524B4T0qU1lUoPuyS9GfZQFNaVM2eWhMOe5CNQd-bfIXKQZyYky+ot4DRoEfCgsKwSakNsBUlNqodiDPx+5XICk4Teh+3dazonV8i+6EShnqGRWcMRSA9vThDy8XKQMuN8weaKQUCFR5Z7lX8VPoNzR6KNrRjEJaAoxFxL58+H7MoLsz0IemVncnRRIeI3CA2MnBDOCZzzCiiA3KG0rMOa6o7ckNBaGU7qHeASCjIcGhdsbijwYfzlmKZMAMEPFjBShKX-NQwikqXMLQiw2qeKJBRaUEczaU-FzBgVKU+CTnrlkP6hh3SspxCCrS1qBtrBi6oYVoSV6SseyhBzH3h1FKbb38R8SuzPgkuCKQHyDCLCysBvDsqJV4x5JWqWMXeJiw3LoMcW3mNAOzCu1bXKMcd5DJYJ2GGgNHSJtaKDPgh0HLsP8CrRJOjbEC2T3bf0wtaNSBp4KNJZdZXLYVemD8SDrxXAGGAZeFUwmaFLKAoefgvwU4mOKOXRLcBfiN4NCx03EzSbsYLmCCaZJQqMNpSvTYLeUKNrUadT48LW7ARwR+J0sLEDCszehNCREiXlV2j4abmAIFeoLaEEPjceIoAXxG8yqcHJm0EUcxqsBvDvmKoGkxQ4ljzA-jVNDkBOcJmyXQKRwlwsvm7XPSCuIkuTZnQIUAIQVQzqMILO4lJReaKjCqpIcnmwFmRSYbdC6JPnG-2OQL68bIiBMbUTXCCmC+qTlD3407rOi9AV4SCAkkfdoysMfpy2ETCCIPVjz+cy2m-8BvS1+Y0qC8QQoRKN5SmPGqizdCuAG-TQangSq5DMfOirCZjQqVZqk00JiDPzG+Ub0dpRrsQUhTiPFbs4CwWOQA5L5oQUgpQOEAbVfBVkhayA8mS+l4mLI40YIxw+Q+xjRObrC8Ua+CzMKCAEeJ4jhCPaC+JZUj4C1im3QA-bOcBjko6fzCiC-C4LOMuACVFBTQ4s0iNNckQkorZHbQWHXoEzQZFtfNA8YODibbH7gCQc9QkKIHC9IczSj4PHqniMFTyKneDnjPFD7QIWFiOAObksLfnVzXuGsgQIWeYHDk58IYrZKpXwICfXqvyczDCPbej6pcmpB0ApQ2k71zHABtS6xH-lRqKg7581ybHyuSCosKWRleKP4GE0BhqJFhKmZeDm6swMStFK+bxiYMV3IAlxHC6cggRNHhkTI+GeaH7g6Jf9yyMpD7gICRCp0vdgtoXk43VJCE6Mm6DEcEaQJ9W-BxyX1DdfB6RiwYapcYdwWoTQog8wbUh81DAjYvZ+mREmVh2hdVCYdUDhA0TzblyCNitIWpLsQEJRnqBwzJazSwgMDeCLqVma1oYbJa4ChWw5O4hjIWpY+semBS0ULhFalZBy5JdSLAgXmFmMw5+cwjB29IXLLVMZTZibbHnNN-yXkTmIxq+QLG8B8Cm1KIhmcb8lfnI4CXgDzb9s5TAqq2JCeQK1yowdjTJ88jAtMWRTAGAtkroIYSwuPMwd8Bb6QwH1gygk1iyeQ0TeAIGKFhKkANHalk2gaUTjye0D34i5yYsbWSjIaNIlyczhrGM8BSQLaj94XsnzeBVRY4awjJMVTI4ID9h14Vjx0gbUBeIEtFggeqmYQEMyLUUwIT0EmBhgLxi7FJHIi0OFqxYL2yoE8sS6QUMjVstJVGYBzCyUliIs8H1gDoYYBEvLUjHtcUUMQC2iyKbAh3RfZBnqVPhv5TObX-FJQePNYB+Ae2yYQP2aNkSXDE0WgmY3KV6l4AxiMcCoVi46XFngPaRXjerRaMN8xwPOI6A1ZMp2IYaDgjDWhOmVLj6zKaS8SZXbSIXLAHI8mK8qK8WSUuJgs4V5jBnKURsRJziZUWipOGQfAH4cogCMbDo+8fraIENiGHoMZYwkT4CBTZkZ7rDWKhCSaCe4E7D96OHAEKXBSZeZ0xCfDdTqYADongMbxTaBsAT7P0xL5Owy47dmBq2MlA4kHVg-ocph7gB5gtvZarNQEGD6wCaB5kMESyqa6h1HBSWbyS34goCiCdiGeBOcPKIxMYASTJSZztENwjvU+R7C4ShApGYOhv6EgjJkV-UW0ICZ5Ec8I1Rc1zRYMSA6UAzCBQHfhczYtCVCaaRBgWRCWYI+RDwFNBVVAXaXEO9RMocAz6KUUapoI8g6uLaD73GFSvQXTbkKsRh9fV4TxuAoVk8SPYzsMyU52e41rapkgXhB1zVgT1wKhPVArgcISy1AlzJuFu7fkbuw+4KUyQRfkBiS6-pL6SNQxhUVIlqJsDJyDR4u3H+GnifUQC4cp5-YP2ATozfSF2B1CJTQtb0xLwLhpJwzg0bsSR6Fs3d6k3icCQsx6EP6mZcGIizBeWAMkYDIulc2T1SORxoYNfXJJUyyEZMDz6wlChleXUCLaVcT81EwCg3E4KEhJZBKedcgHhahhxtR-idRclpoibbjwMFoA9CaAK6MeDGxKYM78aFETvhfPBJLBGj71KRh9iLsRRCEbqg2NeSUAszz-ba2A49F3W6MG4VBXZhZXkCiA5cSeBti05hw6OMpsdUjYfsF5wmMIfj9oJKBYVcs76Sc4noacpBgeAjA5TNHC-ae+DbETcwVEPl517UPgy40sZA8c8jkiZlCF8QohDxHaWj4TQiEjFPTSTRFmxqGlImgkUiM6DuKVkF9R5qNpTAwGxpvRYSDAZQmUW46xIy8RdTMcJ9RnmQ6B74TGzw8wtQHJWPAFAJNH2qfwm8W9ED4K7-ZkqifaEjWMhIcImloYSuE+4G4W4WHKjdkLvLgyLoLQUAyD+MWuzGUceVbYXwazmBRS6kcmIUwbiAFybVxCiLrxuyf+rwY47D4UjhA5KfLDiELKT201jQqmV0i14NbSD6mnSTkfCSUGD4SPxd7JzmODzr4IBD6MUHCOkT3SbAVQCRKG5abUOJAN5aYqaYaPjWkS+7cnWipVYsWDriAfQbGJpFDjG-FzoVdQ5QAcDO8FrCDxTjA-KfohZ4c8jJAZtBY4G2Aimw9j56RIaZIHUQn5QUR2IPyAsuYJnvUBYTcc55BbI+7DzynEiMDBQy4xFLgm3bmEYxFcQa+bU78M9ZhQuEygQgrGD-sf2AAoWNiguPKTdYRSqaiFaj97eQJpSlgB2hbQhQ+VsiXIIyDg6l7S8KAhh1GUIEp0ZeA3ESlTTgutBZBT1CitSCankYHysmPmoy8pqrToa3AsKKmI6oboVEUHm2-4aCjXOdpCD0aEiNmcaQuIEDK7nIqiVgBDDS5B9L6kDqzo7LJAceb7RY2ajx2yK+iJASPiGCbkK34AKRQdbZkteRiDnsIahZaIWAyi8vBsmNHjxAd-ilCTZSLYIqZt8BZzqUUGgDiV1hFksnr-1HAz3nEP5VaOUCxSE2Je4forzQpy5zDHhDrSlkkcU-9RlwFe70MMYjqmdZjuEYYTwC1JgSIMNBh+BSB12CD5ORYXrh2Sq6KQA1JiAN0pVDLU3eSOMKaSBEDnaFdR33XLVewORzuwLfxDeNEQVDWiBLiXCqVULm6WYL4T44bEA6gHcDihVY6iCm8z0zIUSa4GTDSPebwyBCJrilG8BowULUy2fE558ZPyzUWj7nIC8KroIFCeG8uxtI+obm0XYbAyDLyqaIGhuAQ7UyKNJQRQKYSN+aeRTLFspQwBHoO0QpBaUNoTwbMuCFwXCYwUpMFMlY0ra8K8LwiRR6G6GBBFaj8CuEU7baVOaAUQVfYQCt+Rh+AhLOsH+wgIAOay8Y36BcEqI1kJawHrEsBxfWVjGBQHBLyceh8MFFrNVRmLlEBBDfbOwRM0IVi3CU3n+QeIFpEAo34IMgpRQYxALopbChIXQjpJQOaoyqlDIEacyi0SNEyvHkqiAPhi3gXei78OvalaCfq4XNYTbFZS6QgX7jGON0TeE-OZt0CNzrUZFRsnaaFlHL6j2reLZ+O9UjWwCyrUSNU1X6XMzWkKMZ4ddlzo8xUJToaLS0saJTf4M1Xmaf15uMbzTmKXDz2YJVRXeeJX6y1igO0zyEQwHfhv5YsIGJL-UfRSuB8iNuRI1JdDW0XoxdKfgptTb6Ly5QxCeQgRhNgP0YLuZEg5gQFA+pJbHRoNGDkg-pwKWbtBicmEIfhZZw1SQFC-4G4jhbPaQtFQ5JiwXXZgG49AYgfdApUNyWe3HoJsfSJXwcFjbEYetyOca0TtWflCS3CkLWAgUBB4OdAQQsoCRiUUZlwT+YQg0FiKkJ+yIKY5CKQTYKcBG7Fr4fmD7aVRjccmVLuwP9ShoYvbIwf5QvZbeD6GcKAvic2Uj0VSqBOcPJo4IngjEKtAhoazQeuF7ndpZHyMme7BZ1CnBDUPcaitQb4iuUXEcqDELcNNYkcHA5BLxG8L-dfOYG+QZRUCwwSg5NXAI6ViyD9DcDQ0PQoeAPcDxy0QINHIHUcLOyRZMOAwmYqV4+LQIjl6mXzM+CbQoLHThY0LjisaBXm4ecyydIPXSZ1HTDEICTUPYAvC+uJShYKJJZNHY8lgwDY5XtOsib6NwosAP3Az2VXCoSIHg2iNcgApfZLrMLkQ7mwyiiIejB-YGH6QoRahDFdHZUYEpYj6cASuzX9jIu4Gh3sXLka4QYR6Ya2ri8pgSoaLyD9FQ+koBf4Zekcpjn46Eng4RHD1eEXCBINOBt89Po7WOtRbA2JCp8KbTsQkM1UwB2hifJdYA0OcxClJrBHlWMQVWA34TYs+gOeTSh9gBc4pKLuZiI6JgnLOIzPaZxSpwATQKZKniiOhHRQ4CjWtmpBBqQUfWaILdDoggOa+kVCAkeNUAI6MT7ZidCDwZUYhomvVC4xR7TZieXbngIWoyK6QQzMPIkwG-OaIfZzIE4YDKg9D9jaHLhK4kC9DdymAKF9ECZGgxxiZcRajhpA6il8QCRo8FrgHPesJGCSDa28-tB48IaQYLQMR1uyVgCIHmJd5XNA543SruKlKR28GIwVgch6bmBICtaqOqpC8sCAoeDxNo1NzpEA8JbyR95iNcg3mML-y-sKZTDQX1BXuKi22EVMHA6VGLdYJsDZqxzSOrF-D9OJ5TFBeiZyQeYXK5FSQhqI97EpEMBAvXICOqeF0KaEBDfsCjB61LjrDjclArCG5RD2GkR5bPehtpDJhYYPQpYaUFkVmEd4yFLCnfESkKUeNS5GDBSAx2rIiiBOVbK7WVj8aJvy+wf-xQYa670zPRipgMORnKF7RKUKoQh8YEKKSHsQm4NqYE-ClSgwfaAoyQpFF0DR702MmQJ3IyBRer6zHoY7ltaZ8TFyqV7Hc0UA23e7Cn-UJj2wPT3bZSkIFnRek1iEj5EYajiQLF9DRHJPyM0MUT21fHiUHNUJNY3pJz2vjBloCFTH4Tahr-G7BQZHVjZEPQh64c-iCafLEv4TPoPLYdR2qYAqVemNCSPT2710OYF7qwVSnI20oSovwKKwIxjjyJ1Dx6BpZcbCAzzsCYKadaFD4aQw7XgI3ihAjPibbbE5LsFaKf89wgMMJrBM5KUQAOaJTIifXrEGP6BspE+R-qOMJ64PerlPf5QQUX4h2iK0wYIqWhZoC20HgaWSjED0RQtOsy77YKwjQA9ScVF7kBTIWAAIDcC94TzzkIKiAmkRGlJSVzCvYPdz2iUGHbtddEMKdNydkEzxwOEdkcCzS0S2K04giCrSLMHyzDSEKoSgbgRKIEcDJESdIlA7qDtwO3gGYBaS8cYfLODKfCuVVII2MskhXEATQfMRHK0SRIyNmRkzNhHnzwiK7BTsPZDBiWkCfDY7AlZeH65APRDeUOjhzmWEaJUVWAOYf5A9EdcgsyeOg8YZ1ilrIIGJUHH7ktTWk1uREBlJQyClEEOTyccog2GNg5NeRWiYMVZVqueFbtQEDZNwDCA5KjRVymLLrXINiReAGgyBge-FcdXwYWRcGg5mBFh5Ef9pNTfHGkQRxELeoVaueMmgG0bWTr4aNG4+CizqiaM1SvfpxukEv3YEBsDTQAmhhONuSQZHLqVxCYyk0Lj74se+COfLRxWuH-mbBECmFHQ7nJjejJBm5XXKSIyaAceRD9KLCwe0JeROvQzC7dM5CnYFTAmeK-agEE3G03dVC0bYKjglFdLFQajz4fcxRm0a3AdQIeLMcFDVy5ZBB6OQWCbAYmEeDZihz7WAYr0UjAKkdhlTaRrDH+yVhYocvHEwXVSVCy75uSeNDwwZFQXst+Y0SDKDr-H5RTQHZz1uHBRGkeGDOuk3h6YXy6-qbihcgUHhW-AUC6SMsJv3Rk7s6+2xVktyBIwDggnKaair2CmgvuyVjfcHwS8CywjSSnM5JIJ2FZEslAN9PRnykTd43wM9iliDmD1uD67KWd6lAE00TvxEGCKQJF7oQeM3DrPehsSOyoVdQjq9cCCidwBb76yeEhgiAID+WAlhiVK9BypUzAjdAHCkQGejg0SiybCMGgBi9UgyQPmwjIJ84spPqHxYbk5sdWgStLCUD+gVOFaObL2MyI3gaOA-JzUf0T9lOAigdd37BSh6DYaFqSmlKaGsaMSB-PBz3Xdf9DbFNTDq9EJA8ahlKOmPUZHTHszuRGrChssJjBvMV2AbZtKPSNYBGiVArrAP8jAY85rhgdLBCJFrg3sDzVccNqD4TQVRpRTJLMwFFB6hWUK2mV1DLUNyqObALBvKa+ApSeHbB1RsLhuAD7K5LAbbEaajcCq5ECIZMnTSeYrgIYdYOwJRwE8xaowBMlALmBDUUCb9xuaLRC6kr7jk0Z3Qo1PzJmeAz4zwWCCiFSKKBqXxBJyRWyy5ISiGkX5E+5BqGC8Yol34ED7SwX-o0wZlhYVDZCwQS-yuIrQVBA53CBobl46wT6hwyyUQ6UJxhEvY4ilRQobgYINr3QybxbKcu5A4eHhOxQoS9xA8DTgkjzeOhbAjGKFWPveDFrWgSQTMHb18QGyZvObvBR6bxFRCR8AV4GGD48De5PoqoirsBuY+UDuKBgAYpVA15RhyLBTC3ZTgynMpyiuLGD9NYRxoyJRywZaOyutF5oX+ZdhcEDeD4eK2DxrFHSmgAAN9YcN2eEQQSQyMYFpOkRAnwQmB0WPpLCA-fg9cevDP+mvJZQHJQVEWMR+aAPBJGW3gJcIDhxHdElxMTRS6szszFUMCVhgDr4u4NLzV0N7zggOtQE4VRWjveVxPAK9pisdTA1hIPhhCeLb0zQ2LnYXWlngbdAM6UXiKIOxg68X8CTtYXAcQsbDBgF3JoyBsXP+ZJLaXSAUhem860sRaL54R-2hA0VqWMUSiwaR+IuAp17aoVZWF9BbUYkZFDd9YGDOYcUpo0e7ZJQb4BWQT5B5fN0BZoQhhgqj3oz4LIJ8wUoqxgX8UpGbTijEQszKGhumSiD7HSYIwAaibAO4cMvpHgEbqhRCS7-UAhrOmDKD1hYa01AJFTuIR2B0warxLOG-AMiRmgiiLhBROqZh+c0yATRDPyE6JHoBgJwzq0dxzma3bIb4VTDVEBTXDTBkTB+LRxk8ULL7nJ7G8KEB3WuWareWjpjR6R5AKggfA2CPjDc3a-qwDDZrOtBDDw4J0w7QaHl0DHgReMV3At3GNgfsY7m4XIyi+kNQzi+QYLk9NmHDUmQpmwd8IVk6yJd2P83fwRbyLRfeA9OKVxRUL2wtKXTrNVYPCFswmhLwAjDmnaCok0HfDaoIdLHEAHjH4ADIUFfqQz-WnbYsA2622HLjqmVConMIaXzfMirUIBoBmAmjSWIZeIL1E94fIKBzqoYuqj1MGAgyUer8ATPSBZcsyj1cejuSNvhUigZhrgB-wzMK9UwBWPkUsPwBaU+Jwo8IcpN8dfymGntaDqe+FvIQ6KadDLyE9ADSJhX2D5yc54mmDfLZep3zIQEHBn5AuAkXCKCfQJQimQDPQsRWByYDDc2oUfFopQ6Xqkk8cwCVPipuAfrV+0TS3F4vY1h89tAH6KUzX9O4LsIH6E23AcCzGFLjd6TLJTYTtSEozJIlQwNjcUYIgS4nBxo6FqGgcVLzK-PpjJ+jJR-ODphFZSfTIkKDB+ODdWZHbqYeiN7CWxUTm7GetrNub7pyyebj-IUGDD5ZTD1hWywEeVORIQejAjUBVBegKkFoA7OTmYZa7SwTjHxACa1FzL9U0TFfTvUO0we2N1BPLSODPCc3AxAgiZCMSzThID4z48WawSmlkFN4ZxLZiXwbLpRVwegYfAnNfnjaUZQLTQmWC3ScnrER2uSMUIXBh8nFCIxKVCsVHWBCrRNC8mLlDigiJhGQZCXlqRailEtxA-MUKid7GDAK6X1ABYZuQJQDwicRPYAmgx4INCwyEV6TSLr4frZsHNqKsRvHRFAAqr5Bl-C39cbjfcaoRlJNDliAC6BtqGwjoodDQlOAqYASchgnALKU5aZYjMRHt42AO2pJYKXZ3kZBxX9OYhW4Pnhx8G6492RkRXeLvJsYnpjhmdPKZACizNoTYSvySoBXE9ObZKiSg6oE+Lx8GBB1qDFAbu9QVT8T+3FMFUrtAcOpdOPeKWAG0pc0SAnLA2I7YkM+nkCTrhzgYpaaSBvTAoPFA-6G0AmqDqR6jImN-al-DwZKsjf6Rj5ymYlzYncQhDoIoL6uZwhBYCyoaxcF0Iu2ATUICSIbUTlIdxq2BLXLCNlWiWyP8fRB2IfCirAdZi1Sd0gMRd2jB9B142ndhjI2dsr4SekRf5bSD1oTSJ9EUahmNM5Z0ybuRVBZEjk2TSI3MRKTw67IRLWRXBHOFNC6QXQCI5NNBkgXTDxXdq7fguli9sf-AGYA3BHMKlgv8CzzEJLySqpOlj9tKbHrwXI7jim5KqSLNSf3Z0gikH0QYLNLDygLcJ4kOI1FY0Z5DFcTjZQVkotU3VEo8JgrPhOBgsKWZFZNbDrt6MAPi2kKmIxGuQmSd0Q0hA+SagbQAl0GF4YkOB6507E7wyZLUdNWMLHwRJBcQHBGG1UTQSkP8nbQdOlGGXzgVPAUB+0UoTqUOAg8GDoBBQMqFaUA0LvtGSLPE0eK0QHcgLlbYhPoRnAP0Rq6QIPzKZuFFRPSNhD4tLkBORw3jJ6HRljgKhh21KF4g4VVjgOvJmJlZoHTeWQTk2d6zNwAiajaOmlaoyXqkk-wzzUa2gyBUaacyvkhtiZpCJOUfCFpEriX2y2REwbtwQyf1qreVEA5GN7BpfSCq-MMcpVfGTzRMV3wrCPGrfm4GSAa9rBMUbribsExxJk8sDQELJB+ckKoiUV+TjAe4rbwdnBmobN0TqZLQmeRzTxR1IhsIrGjPMH8RK7Az7pMNGScVf+rdjYBoBTGUgXMLaSy2tWKDcTmhSoAqblkckSQif9xpPNKDpgfSRx0UYJFZECCRCJeaa8Dgh+gMuRd6RVBjifDD9ebwTfAT0wtKDCgAgQkQ3WroipLengoNZgDlqmgCYACACkAAADO8ABgAAAAsyAJQAqAHAAAAN4AAXzgAigAxT5KdIAiAHJTlKYAAShyBoAAIAAADwYADkB4AAgCdq-FMAAGjgAWKa7V5AAAAfOWq0U5in4ANgAMU2ymcAPgBCAMQB8U9QA4AAAAKAADWwAEQAAAC4+U3KmKAAABKTVOqpmlMSp9ABYADlOypgVPUAQVPEpmgAAASCgAwABgAAAFcoAKQA4AAam4AGQAEAHimKAOWqSUyinRU1im4AFOBW1SGplUwqncAA6nSAJgAYANgB0U0qmbUw0AMU8ABNU1KnTU1ynu1UwBG1S2q21R2rtU+QBuUzQA9U8an2UzKm005QAiUxWrrU3gAlUxKmU0yWnc04qmE08AAdUzqmrU9anbU-amnUy6nG07Smi09KnOU7mny1damSUxWr6AHanHU86m4AN2mKU1SnEAD6nS1UAA

💻 Code

import type { SpecificString, SmallerString } from "./bigstrings";

const thing = {} as any as Record<SpecificString, string>;
const isSpecificString = (key: string): key is SpecificString => {
	return key in thing;
};

const fallback = function (
	base: SpecificString | SmallerString,
): SpecificString {

	if (isSpecificString(base)) {
		return base as SpecificString;
	}

  return base as any;
};

🙁 Actual behavior

This code takes ~10s to typecheck on my machine, vs ~1s on earlier version of TS.

Adding an as any returns the speed to the previous level:

import type { SpecificString, SmallerString } from "./bigstrings";

const thing = {} as any as Record<SpecificString, string>;
const isSpecificString = (key: string): key is SpecificString => {
	return key in thing;
};

const fallback = function (
	base: SpecificString | SmallerString,
): SpecificString {

	if (isSpecificString(base as any)) {
		return base as SpecificString;
	}

  return base as any;
};

🙂 Expected behavior

That code should probably not take that long to execute.

Additional information about the issue

I have a demo project here at https://github.com/epmatsw/tsdemo which can be run using:

npm i
npm test

This is spinning off a discussion/issue for a different perf issue being tracked in #52345 (comment).

@epmatsw
Copy link
Author

epmatsw commented Oct 2, 2023

The playground link is not super useful here, it's too long to actually submit 😅 the demo has the full repro

@jakebailey
Copy link
Member

I've had a go at this in #56072 (whose build should appear shortly). But, I don't think my change is quite sound yet.

Fundamentally though, this is a combinatorial explosion of types, we just increased the amount of work done in that explosion, and I don't know how much we could claw back here.

@epmatsw
Copy link
Author

epmatsw commented Oct 11, 2023

That fix seems to have improved it quite a bit. I can run it through hyperfine later to get more concrete numbers, but it's roughly 30s on 4.6.4, 90s on 5.2.2, and 42s on that PR.

@epmatsw
Copy link
Author

epmatsw commented Oct 11, 2023

Okay, better numbers:

4.6.4: ~28s
5.2.2: ~70s
PR: ~51s

@jakebailey
Copy link
Member

This is of your real upstream example, or just of the toy example?

Can you also check 4.8? I think your other issue would show the first bump; what I'm trying to undo is the bump from 4.6 to 4.8 (and then some).

@epmatsw
Copy link
Author

epmatsw commented Oct 12, 2023

That was of our actual codebase.

image

@epmatsw
Copy link
Author

epmatsw commented Oct 12, 2023

Ugh, 4.8.4's test was noisy. Let me re-run that.

@epmatsw
Copy link
Author

epmatsw commented Oct 12, 2023

Better:
image

@jakebailey
Copy link
Member

jakebailey commented Oct 12, 2023

In text form, that's:

  • 4.6: 30.0s
  • 4.8: 55.9s
  • 5.2: 69.3s
  • PR: 53.2s

The PR makes it 30% faster, but going from 4.8 to 4.6 would bn 46% faster, so there's still some lost time I'm not recovering here. Not quite sure what that is without a profile of the current state of things on main.

@epmatsw
Copy link
Author

epmatsw commented Oct 12, 2023

So I benchmarked (in order): 5.2.2 with the workaround casts (as string), 5.2.2 with the casts removed, the PR with the casts in place, and the PR with the casts removed.

5.2.2 w/ casts: 29.6s
5.2.2 w/o casts: 67.6s
PR w/ casts: 30.0s
PR w/o casts: 51.4s

Running tracing on the last case (PR with workarounds removed), it's spending ~30s in checkExpression in two of the files where I have the workarounds currently:

image

@jakebailey
Copy link
Member

--generateTrace doesn't always get very fine-grained; can you try https://www.npmjs.com/package/pprof-it and throw it into https://www.speedscope.app/ ? Or, send me the file?

@epmatsw
Copy link
Author

epmatsw commented Oct 12, 2023

Ah, dang it, I knew I was missing a step 😅

@epmatsw
Copy link
Author

epmatsw commented Oct 12, 2023

Okay, the main bit I see is this checkIfStatement:

image

That's 12.9s without workaround, 0.2s with workaround.

@jakebailey
Copy link
Member

Hm, so my PR effectively removes this entire bit, yes? I guess I did recover all of the time, and the other slowdowns on main relative to 4.6 are unrelated.

@epmatsw
Copy link
Author

epmatsw commented Oct 12, 2023

Sorry, I think I'm getting mixed up between the two PRs. Let me do some rechecks real quick.

@jakebailey
Copy link
Member

FWIW if this is code related to your work, like I said before, I think we can do an NDA (or, reuse an existing one if there's already one filed); me actually testing the real code may be more straightforward.

@epmatsw
Copy link
Author

epmatsw commented Oct 12, 2023

In 5.2.2, there's a checkReturnStatement under that checkIfStatement. It takes ~20.7s:

image

In #56072, that same checkReturnStatement takes ~12.4s:

image

Then in 4.6.4, ~0.5s (although it's hard to tell for sure this is the same one since it stands out much less):

image

@epmatsw
Copy link
Author

epmatsw commented Oct 12, 2023

(Looking into the NDA thing now as well)

@jakebailey
Copy link
Member

FWIW I actually assumed that we already had one or something but if we don't then it's not a big deal; I tried to look and it was unclear to me. No need to look into it, as it probably will just be too complicated.

Is the type being narrowed still just all literal types? I would have thought that I got it down to nothing, but I can see it still calling into relation functions, which implies that some of the narrowing is happening on things I didn't cover in my PR.

@epmatsw
Copy link
Author

epmatsw commented Oct 12, 2023

Yeah, it seems pretty much exactly like the toy, and I can't figure out why it'd be different.

Boiled down, it's:

type OneOfTwoBigLiterals = LiteralTypeWith334Items | LiteralTypeWith11346Items // no overlap between the two

const myFunc = function (mysteryString: OneOfTwoBigLiterals) {
	if (isThe11346Type(mysteryString)) { // adding an `as any` or `as string` to mysteryString here fixes it
		return mysteryString as any; // this any is the leftover workaround just to isolate the above line
	}

	return "" as any; // I removed the actual code just to isolate more
}

and isThe11346Type has a signature like (key: string) => key is LiteralTypeWith11346Items

@devversion
Copy link
Contributor

devversion commented May 6, 2024

Hello, inside Google we were also seeing a noticeable increase in CPU after updating to TS 5.0: #53085. Overall, we were seeing significant slow-down in getNarrowedTypeWorker which seems related to this change.

Screenshot 2024-05-06 at 14 02 34

The shortcut fix seems interesting.

@jakebailey
Copy link
Member

Do you have a reproduction you could share? These kinds of issues are hard to fix without a specific case to test, but maybe your case is the same as the previous comment? A profile may not tell the whole picture (but I'm assuming you did a bisect if you've pointed to a specific PR).

@devversion
Copy link
Contributor

@jakebailey Sorry, it's hard to debug this in Google. This is a large TypeScript program. I will try to collect more details as soon as possible— but yes, the difference is noticable when bisecting- going to v5

@RyanCavanaugh RyanCavanaugh added the Rescheduled This issue was previously scheduled to an earlier milestone label Jul 26, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Bug A bug in TypeScript Domain: Performance Reports of unusually slow behavior Rescheduled This issue was previously scheduled to an earlier milestone
Projects
None yet
Development

No branches or pull requests

5 participants