【NOIP模拟】board(线段树维护二进制,树序号化为二进制)
题目背景
SOURCE:NOIP2016-RZZ-2 T3
题目描述
给出这样一棵“二叉树”:
- 每个节点有左右两个儿子,并如下定义每个节点的高度:假设父亲节点的高度为 h ,那么他的两个儿子的节点的高度都是 h + 1 ,相同高度的所有节点称作一层。
- 每个节点的左儿子的子树都在右儿子的子树的左边,每一层相邻的两个节点之间有一条边。
下面是一个例子:
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAXAAAADSCAYAAABTuptuAAAgAElEQVR4nO3dCbR1dVk/8GM2Z3M2UBZpmChKSmikzIogICBQDDIF2MJVViyrZa3larUqaFqFikwy876YgKggIoSSQyqKoKVlmpkNls02aPO/zy+/7397Ovfes8/Ze59z7vk9a51173vfc/b57Wc/v+8zP7+H/Pf/0KhSpUqVKq0cfd6iF1CpUqVKlWajCuCVKlWqtKJUAbxSpUqVVpQ+f9ELqFSpDf3Xf/1XeX3mM58Z/f3f//3oL//yL0cf//jHy+uTn/zk6B//8R9H//mf/1ne+8Vf/MWjr/3arx3ttttuo2/7tm8rP7/u675u9LCHPWz0BV/wBaOHPOQh5VWp0qrSQ2oSs9KqEFH913/919Ef/dEfje6///7RAw88MPrjP/7j0X/8x3+MvuzLvmz0pV/6pQW0P//zP7+A/L//+7+P/vmf/3n0D//wD+U9wHuvvfYa7bfffqPHPOYxo6/8yq8s761UaVWpAnillSBi+i//8i+jd73rXaMbb7xx9IEPfKAA8L777jvae++9i3X9FV/xFQXEgXLAnkX+N3/zN6OPfvSjo/vuu2/0kY98pLznsMMOGx1zzDGjb/3Wbx099KEPrZZ4pZWkCuCVlp5Y08D7nnvuGV166aUlVAKAjz766NEjH/nIAtxCIp/3eZ/3OWERop2Qy6c//ekSbrn33ntHN9988+gTn/jE6MgjjxydeeaZ5RoJqVSqtEpUAbzSUpN49l//9V+PXvOa14x27Ngx+qIv+qICugcffPDo4Q9/+K4QyFbgS8y9APmHPvSh0fXXXz/67d/+7dFBBx00OvXUU0ePfvSjy7UriFdaJaoAXmlpiWj+7d/+bQmZ7Ny5c/Tt3/7to7PPPruETcS8Z01CUgqscdelGJ7whCeMfvAHf3C05557Fku8UqVVoZrBqbSUBLwlHsW8X/va146+8zu/c3TeeecVsJ3XUhbz/qZv+qbRaaedNvrUpz5Vri8u7vqqVRKKqVRp2akCeKWlJAD+F3/xF6Pbb7999CVf8iWjk046afT4xz++szCHawjBCMf8yZ/8yei3fuu3Rt/1Xd9Vyg6//Mu/vAJ4pZWg2shTaSlJBckb3vCG0Yc//OHRIYcc0onlPU6u9YhHPGJ01llnjb75m7959Ja3vGX0sY99rCQ9a2Sx0ipQBfBKS0fAU7mfipGv+ZqvGX33d3/36Ku/+qt7sYqFU1jehx56aKlu+f3f//1SO14BvNIqUAXwSktHYt/vfe97S8POYx/72BKX/sIv/MJeANw1hWie8pSnlDg4xaHxpwJ4pVWgCuCVlo403wBStMcee/RmfYckLcXDJTb/7M/+rDT+VACvtApUAbzS0pFQhkYbXZJi03032bi2ssSv//qvH/3VX/1VmbEiDl6p0rJTBfBKS0dK+4QxzC4RA2ch900SpF/1VV81+rd/+7fiAQjjVKq07FQBvNLSkQoULzFpwNo3gLPAfYdBWH7XrZmJhpUqLTNVAK+0tJT2977j0bl+ftYa8EqrQhXAKy0dqQrx+qd/+qdiDQ+RUBQyMTALiYfXMbOVVoEqgFdaOjImVuWJZKZZKMIZfYO42LfkpTCKTswK4JVWgSqAV1o60s7+jd/4jaUSRVkfcO2TKAfWPoUhcUqB1DBKpVWgCuCVlo7M9za8ihVs9Ku67L7a2zM0i6Iwe0XpIgUyROVLpUrzUpXSSktHgFv7PBB38o55KKpS+kpoKht861vfWo5g853VAq+0KlQBvNJSEkv4wAMPLHNJ3vOe95RDHboGb1Y9xfDud7979La3va00DTnYQQK1AnilVaAK4JWWksw+MWDqcY973Ogd73hHOcBYlUhXIJ7j1pyV6aSfP//zPy/Wt/AJ8B6ifLFSpXmpAnilpaTM6z7qqKPK70AWkHc1KRB4mwN+5ZVXlsFZGobE251yL+bue4aofqlUaR566M/8Dy16EZUqbUTi4X/4h384uuuuu0YPPvhgmVci1MFCR7OEOiQt//RP/3R0ySWXjG655ZZS8XLssceWiYSA3CES4u7+rhs031HDKpWWjSqAV1oKanZDsnw18Pze7/3e6KqrrhrdcccdJdGoSuR973tfmVlicmBa36exkhMyEfN2jQsuuGD0+te/vnzP3/3d35UacGduGpxFUXg/ZeF7VaRknG3zuyqgV1o01UONKy2UmsDNMha6MAfcOZVeAHT//fcfHX300WXErEOIAa7QynHHHVdAV+MN4HU4Q86zTAwbaLvuZz7zmVLn7ZSfV77ylSVMcvLJJ48OO+ywchLP6173utI0xAp/znOeU2aQC604uf6pT33q6OlPf3pRHBKcvILmgcoVyCstiiqAV1oYBWTTBSlU8va3v3305je/uUwj/JZv+ZbR93zP95Rk5hvf+MbRO9/5ztERRxxREo9AFzA7TcdxawBXzFwJIDAH3JKegJrlLiRy//33l9Pod9999xIyAd6SlsoHWfu33Xbb6E1velNRGpKnlINr+g7gr9lnn332KZY5i5wHQGlUAK+0KKoAXmlQaoqbUAmg/t3f/d0S45akBLp77bXX6PDDDy/AqPoEiGutB9iPecxjigX8B3/wB6X0z2dUkCCgCrzThOP9lAOAFtt2KPLBBx882nfffUe77bbb58wZB/iAG9A74JgSYemrTPH9/t/199xzz5L8ZPWrVTfuNtZ4BfJKQ1MF8EqD0HioBFADQg00koZ+V4N90EEHFVB85CMfWd4PoFnDT37yk0uHZsAZoAqLsLBZz+9///uLZc5SFtcG8kCWtc1CpxTEzR/2sIf9nxBIk1xXGMfZmEI4gNxagfWznvWsYnWLybPMWfDCKtZLwTTnp1QwrzQEVQCv1DslVAK4WbkqQFjWv/mbv1mAEhiyjg844IAC0qxxp8UDTLNJAGNCFePAOO3I2bZWMiAXExfSufPOO4uXYG2AHGhTNu5FjFyIZ7/99itrNMmweX5nBfJKfVIF8Eq9UqpKhEpYyOLQ9913X6m3Zg0LSQhpiFOzqL/3e7+3WLmAULmgpOEi55JYO6vemlnjasWFY3gFgFqY5ZnPfGZRMo5jkwS1bmC+kdKpVKkrqgBeqXMaD5eoHrn33ntH99xzT4lXs66f9rSnlRCHIVLizMCQ1SthKHkpPr0slESrBKgSRPeSUkMKSNiHtQ7MhVXcM9B+1KMeVZKqUUAVyCt1TXXocaVOKaV7AI9VrRRP6Z6QieoN4QbVHYCPVS5+DdhY3ikHXLZJgNbH6qZYNPc88YlPLKEV9yWEIgzEi3AP3qe+3GeUPvIqeBNeLPLmNStVmpeqBV6pE0ocGmCxqiUVVYkAbsAFtA855JCSUBTj/oZv+IaSmNRYA9glAlflEIVY5MoeJWHdp3vmWVBMkp7uV2mjkIuQintljbvHJFErVZqXKoBXmosC3ID4Yx/7WLG43/Wud5VmHGERYQTg5d/iyRpwxIrFv4VOWN2rDGbA2r2JkQNysX1ATVGpelElA9glapUzfsd3fEepjGmOAljl+6+0WFoNk6fSUlEzxi1cAqSAl2YbsWFVGipKJCOFUQAW8Gada5wBYs0k3yqTWSmPfexjy/hbFSqStJqM7r777lK1svfeexdl9fGPf7zE//0uMStUpPRQyKVJq86PSsNStcArtaJmSeCnPvWp0Qc/+MFSZicmzMJ80pOeVBKRrG5ztm+99dbReeedV+LGzVjwdgOqKDM16KptVKwA8XR+qkP3ElZRkshjoeQymCux/+3Gl0r9UgXwSlNRgJslreJCNQZL00+WNQsUIOlwlNhTZge41ErvscceJfm3KjHueShAbjSABC3FRpFJ2GpOwhckB+ClJj6J0TQqAfFlS+RWWk6qAF5pSwooASGn4ygHlJxEQgRi2ZJ4AJsFrmyQZantXYhhO1rcW1G8FKWFkp3muKTtH3BL6FJ6joxjlVN84ul4KWYeZbdufKvUjiqAV5pIzTi3igthAVP8gDcgFyKRqFNaB4hY3WLez3jGM0r3pLCA17qHBfBPaAnPJHlVrajC0RykUoXXovlH4tcgrec+97mlA7U5XRGtMw8rbUwVwCv9H2rOzgY0YtwOPmA9qipRScJSZFEKEzz72c8uCTzxbVUlqbBAFXj+vzIUfpI3+J3f+Z2SG8hERY1ARgkAbD+VHgJ8HZ6UIxBPDXnlZ6UmVQCv9DkU15+1CLg1paigUN9slCvrWqWFeK4wifi3uC63P92TFWQ2pvDXIc0qdsyDUYKINAOZfZ4STE1PSi55Ns2Sy8rfSqEK4JUKxeoWyzaFzwEHQFxMW7xWTFZds0SbcAlAcdCBfzcPUqg0HQXIM04Xz4E54s2cdNJJhd9OJFJDfvzxx5f6cmWIPJ2a5KyEKoCvKTUn+OXwA2NSL7vssuLiA48XvOAFowMPPLBY1s6PFFI555xzilvPKgTqFbjno1T2GGGroufyyy8vJYg6U50MZH45r0ey0/OhUE844YSSCJ0UH6/PYr2oAviaURO0JdeUuzkc4YYbbihDmljTEpGAWsJNZ+WP/diP7SpxYw02x6VW6pac+sP7ufbaa0t+QWWPo+Pw3mETkseqVjwDYSxAHyVawyvrRxXA14SaVSVJToq9qojwk3vu3EdJSkDhRBzvUacs9t0sbavUL7HIJYxZ4p6PpKZaccOydH0aniX0QtHKQ+jmZKXr8KzW+HpRBfBtTk3gZnFLnklCirn6qe1dmERJmwoIoC2M8n3f932lCkLiLKGSSsNRYuRyEo5487zU1wudOOJNspNXpBKINa6SBcgDcYBeD11eD6oAvk1pfCZ32t6d6q7emJWn6uHEE08s8e6Xv/zlZUaJuKswCouuJssWT/GYHDmnKsjxc+bLaKAC5ADb8/PM1Oo7KUhXp783j46rIL49qQL4NqTmae/K0GxsjSJccoOnxE6FSGxwVQ1ml4h3i6fmAOG66ZeLAuTi4rfddluxysXLJTV5UDo+eVQqWMxcyQhfOYtqjW9fqgC+jajZMCJUoprERtf+bvMr/VNBknGnygT9nfudoUq1qmS5KcfT8abMWZG/4F2xwlnflLGRtix2HZ1pBALkKodQfb7bhyqAbwNqhktsZocpCJOwqsW9zSRhlWnGEVO18R39lfMnWeFKBavVvTqUrk4WufEGnikr3LOWiPbyvFUWUczHHHNMiZ97vs1kdH3eq00VwFeYmiWBOiJZXmZyO+pL9YgNfOSRR5bNzBI3i1uiUs23CYHpnqybeDWpOfnQcDEVK4ZmAXfzVYRTDNLiXVHWOWxC56whYzU+vvpUAXxFKZuX1aU6QRMIK0zbO3eaKy0RKZ5tA3O1HV0mXOLvzfMZK60+kQX5Dl2yvC8hFtUowmbAm/J26AZZkORE5MGrjkBYXaoAvqIkdi3GzX22MVlhkpOaPJT+OVBXg456YvXCLC+udCpL6mbdfpRE5yc+8YnSuUlpa8RShcTbyqlBSkX9v0mIKpHIRDprK60WVQBfMeIec4vNzRAuMfhIqET1iA1pQJJSsx/+4R8uZYE2L4ucNVZLAteD0mWr4khoRUiNZc7SZo0LqSkzBOhKEr1XJYuuz+qZrRZVAO+YcvajEi9WsWoQcy5sKgDKEhbC0IQRy2crYG2WBLK2zcQA1K6j2cbGM5rU3AzNHGKdAJ3VVWdKrx+NN2/Jh4iNi5FLeioX3W+//UpXp/AbIjtkU2xcWIVcNuUlSoEse1EOwncsfu+jEFxXyI5c59zPajT0SxXAO6AArI2iAsR0OeELgAvQI8g2AYvYv1UEsJAlFdXy+vekk2soA+V+6riBN+tbPFMZoPeqLnGowjXXXFM2pfpumzAlgaEK3utHTSAnR7w1QM4ap+SBtFpxcsNL06LPKCCTAFiXLjBmjPg/1rzQixJFifAcTI3IOWKYsOwlSuVhWPs5B7VS91QBfE5K8oibqlOORUNghTVsDmCbY8UIOcF30C0gBvQAHYAr85JgVNIHbD0WsUoH47K4bSCbbJ999ilxTBsEaANqbe/WwQLyfc3NUoG7Uhq7yAgwlhdhaKhMIoNkTvkhmSVXEuE8PN2eADnnejrflLeXM05Z7EJzOfzDWanAnWyTXcrAyGFeouuPW/WV5qcK4HMQwWV1X3TRRQXACbvTasypEL6IgKdUKxuJNcT9BOTi2E5nkUDyWSe421CsJEeYacLhlkpKKg2zkWwOI0V9JrHMhGJqWVilSdS0xsntpz/96SK7QNx4BYYHa9koBSEUVSyAXMgF4DMy/B+PL4Oz0qqPEmIB8uRTV6jDQAxG85nTTjutGCg5lKJSN1QBfAZKbJGQ/vIv/3IRcsLpPEOWRvN08UnCGiD3Sgv0K17xilJVIqzCimYB2RRPe9rTioubTkpWjg3l+1SdNOOMFbwrbUXjQC6eLUSnmokRAnxVMvHiWNIsbR5e8itNK3pc1pqWPgXhurxH1wXc9oeKKAZJjY13QxXAZyDgzXK58MILSzfc6aefXixkIY6mVRKaJOjN312P68kSuu666wpIS0KqGGC92GRCKcDcMVuZODepCacCeKVpaBzIWc6s7ptvvrkArpyObt2TTz65xLInlZ9uJtco3aLyNzt37izljU4W4j2y4quszk8P/Zn/oUUvYtWI6/lTP/VTJZ790z/90wW80xzT7G7byCIe/79Up4hBsr7Fu1N1IswidOJYM2Auzg28m4qidtRVakvj8ieXQuZ4gYwJhsLznve8At7jXZvTyHVeLHZJdkl6cm2gGgOEp9o8/LrSbFT9mJbEqvjFX/zF4h6ef/75BVi5h7PGn/MZ4C/r71AF4RHxR7HyDPFPaGWSkqhUaVaK/DBGNP14OfXn3HPPLXKX05fmkW0gTo55qsKLt9xyS7HKWf6V5qMK4C2IwDnuynB9x1xpfsgpKPOAaT5LCQBpJ+AoEzR1zt8SKqlJykp9kNAHg0SJoVZ7IQ4GQ/Ir88p2ZJhhcuaZZ5Z8jpi7JqIawZ2PKoC3IFbxS17yktFuu+02OuWUU0rYA3UFqLFWJC25r34310LSslorlfoicWqWt3CdElWWtzBdl0S2XZOHKTyjfNH8HvmfSrNTBfApCYBqX9egw0JRATKp8WZeiqAr21KOmLpagl6tlUpdE5kiYyqheJPAm2HSx7wc15PDEaJBlIYEfZXr2akC+JRE0LiYhE3SMsPx+yCCrhaXNeR37q0YZRX0Sl2TcIYOTZ2Zwnc5JLmvMJ3kuwY3SU014ubTV5qdKoBPScIYQijK+5QL9j3Rz/U16AjX+G4ddBXAK3VN8iw8PLKlyzLWd59EUQBxMfB8d6XZqAL4lGR4j5fxm0OUP1EOShO9fG+1wCv1QWmtZxkzFlIy2Be5tppyTUGUh9rwKtezUx0APCURdGEUXWpDzU22mbTVGyKk5V7ipw4FqtQl6WlQ+y1sosQvhzv0SQwg3yWvI4GqNLfK9WxUAXxKMnSKoDWbGvqmlF9pgOBq1mFAlbomvQZGHvMshxr/SobzXUA8kwwrtacK4FNSRmcOGcrI+FmxcBtMYrPOkKjUJWXGPEAla0OUq2Z8hJ+82SrTs1MF8ClJKEPsjstJ0NOh1icZCCRso+341FNPLc0V1dWs1CWpQNFCrwpFOAOwdl0DPk6+z+wVsiyUUo9ym50q56aknDZijvJQzQeGWnnJ2muzV6dbAbxSl0SuJS8/+tGPlkYeZYWMlT6JYSJsYwQFr7KGBWenCuBTkrpVNbJqwbmdhK9PMBUXVCOr1MoY2XoYcaU+iAWsfFAYRUMPK7zPca8ZoawkF3grCqg0O9Xg05RE0NWAq0a57bbbiqXSZyyckjDwh7Wv6xOAV/Cu1DVJjAvNMU6U9AFxIY6+iGHC2heKZJjI71S5np0qgE9JrG3zkVkrpqmJHfaVPbeBzIkwc1zT0KMf/eje45KV1pNY2mRa168EvZngDuPuK5np2gwTe8d3Zp5QpdmoAviUxEpgLThVRMLHcVF9VKS4HuvE1EMJTLPAh+j8rLSeRKaEAx1kDEwZDklsdi3bkv85nJtXaf79pENJKk1PFcBbkGy546UOOOCAcnqOcyvV0XYl6K6j65JyMPhefNApPH13x1Vab2IcAFQWsa7M22+/vYA4wO2KKATgff3115cEpoMidGNWuZ6PKoC3IMImwfPCF76w/Py1X/u1ctRZV/FwFrfjrHbs2FHKrFhEwLta35X6JLJF1hgL5tA7hf6aa64pZ712EQ9n5DiM27mvigDE3VW6TDp+sFI7qkeqzUCEnaXiYAdjOAmkOPWsteHAX/b/2muvHf36r/96EfhzzjmnnALuu/zbtSuQV+qDIlNAVYkfS5l3yaAQNlRqOKvsseLtkUsvvXR01113jZ74xCeOfuiHfqgkMBk+cks1vzM7VQBvQTkAVi34L/3SL5XfVaW85z3vKcIoGZR292kOf/WThWPG+M/93M8VAAfWruvvQijCKTaTjQTMNzoRvFKlWYkcSip+6EMfKgl6s1HIn3+rSnn4wx9eehGAeMoLJ8lfU65VTwmVqNjiqYqt+4zqKhVVKl5e/vKXl78B8zTzVLluR/VU+ikJm+IKvuhFLypWw0/+5E8WYbzyyiuLgIojPuMZzyhWhrIsySGCmYMfogAIt0lsrPj77ruvbBq1sc4NFGMH6FxYFpHTeR73uMeVFwA3ndB31/bjSl0QmWQlm7XzG7/xG8VYIIfyPGSalylZL7ziJB2eJoucoRJAd41chwX/yU9+shg5wosPPvhgaRTiTeqlePWrXz36wAc+MHrUox5VwjWOJWSokGnyXRvV2lEF8CmJYLKGf/VXf7X8+8UvfnERcll0HWxK/sSvWS3i1k7iJpiEl8B7HytdklITg0qTzPl+6lOfOjr88MPLSSU6LoG7RNJ1111XPusACZaQz5944okFzIeYGldpe1MsZTL7yle+soAtWQS2vEkhFGWFEuoqR8glazyyDZAZMIwSIcDUkZNr/5akdD0nSwF+oM84ueqqq4rhctRRR5UTgAD6HnvsUcp0a1lhO6oAPgURckJ8wQUXFCH+hV/4hQLeWtsRAQbw3EOb4d577y1hFW3wqaeNa+jfrAylgSz1gw8+uMw64aImhu49vueOO+4olrhNYzMYgs/CpxRsnFgr1e2s1JYC3gD1hhtuGL3jHe8oJatm7ghpZOY9q1pCHTCzzp3Rqow24yQie67nd16jz7PiVbU84hGPKLKahKXPAexLLrmkWPjAXXjQHth7772L15qDwittTRXAtyBhE3O4L7zwwmI1C5uwFFjZKKGRphvJUgbeLG2Cz+oWY2Q1s6i5jywYgs11bGbjm9dzjZtvvnm0c+fOYsGcfPLJu2rP99lnn2IB9XEuZ6XtTZFTHZHky1mvAPSMM84oIJoj1ZqySH6BL/ljaTvmj6XNSs9QKoYFI4PBwdqedKq9a9kflMHFF19c9hSLn/dpvwg9ChvaG5W2pgrgm5Dwhpj3ZZddVhIyZ5555ujII4/clUzcLJHDis6ryWKfIfDjWf1J17JpCLXYpPAM0LdRWO9HHHFEEXYhlyEmI1baPgSIWdHCdG95y1tK7sZB3WLSG1m/zQRlAH28WzNy3czPbHQtHqvvZv3zXFnhFIf68EMOOaR4nP5dY+KbU61C2YAiYC972cuKgLFOgOZWJ3YH2L2H8LGux19Nq2SzwyHiknJDbRbKxE8Czq3l9qpH7+sU8Urbj1jewPvWW28t8i3cIa+iE3Oz0EVTVjeS7aZhspVcey+LnTHCSGHRm8liHQa4SYRmAmeV642pAvgEYqGoXb3iiiuKMJ1++unF8k4p1VAn8mSziAtKKlmX7L4SL67nRz7ykZL8EUpJGKYKe6VJFKtZSA948+hYvcC7aXkPKT9kVlUV+VYFIx5Ptu05hopkqf+rcr0xVQAfI/E5dbBaflkGyvqOOeaYEtcbErxDAXGWOIHOMCDxRdMRKRVA3uzarFSpSSlfFbsWNtFQw/L9/u///pJoXES3b74LiMsLCQMCcC38PE4xeYl8oUvx8Hqc4GSq88AbJGzC8haX42YCbqVOrIRFgHcoIC7mffzxxxc3WKULUJfoTAxxno65StuXALiQhIOxyY2Y97HHHluO6SNDi5Zrxod6cP+mYJwBi3gMYuHmhtcw4WSqFvhnieUNvM1rIEBCJgBcnG4ZwhMRdjFvlrhqgLe+9a3lp/Ivm1JMPCfZV0u8Egp4a8jxAojCJsBbeGLRoJh9xcLmFSSc8uEPf7gYTurEEWtcmKcm7D+XKoCPRrvaiDXOCJ8861nPKll5QLkM4B0KiEvuqEjRLKGWVnhHSEXNuA3q/+qYzko5/cbkTKWoKphOOumkovCj5JdBRpognjyTcIryW38D6E6nYkyR/WXZj8tAaw/gwhFiyAQcGGqUEfcWklgm8A413U4hFQkf0+OUPBJwdbx+t/a0O1daT2K1SlYqQyUvmnQ0zgDyZQHv0DiII54w8GaVi4lbtzAnK7waKP9Law3gqjqMzDTLRPhEHA54q/hYRvAOZV02JbcTiGuMIPhCLOZNWL/7SEddpfUiSlyykmEiFOEgEuDNgl028A5FroVKeJLAXNWMZiGyzUtWheV+/LvWiK8xgAub0O5KBcWSDes55ZRTCuhFuy+jkIdiiUtcin9nHou1C6k86UlPKkLOjR5vrqi0vQngGcNw9dVXl5zIaaedVlrbWbDL3rkbuVZ5wjhhgJjHoiJM2Ed4ULdnOj2XfZ/2TWsJ4EqqWK2qTe68885imZx77rlFMFZJKNIQAcS5mCpnDAlS16v1Xpu0ChWhlrRHV9q+RFkDb9UmkvES88DbvJ1lSFhOSwFxyocRojb8gQceKPdGrjX9aGrjbabyal1p7QAceMvKm75muqChVGeffXbpAlsl8A6NJzZl74F4hhBlelw9EGL7E4AzdE0Pg/CgBrRnPvOZSx022YiyD4E4GXY/CgwYKeLgLHB7No0+6zlOlfcAACAASURBVBpOWSsAT0mVITq60TTCOPlGN+Myx7y3oqybNaIJQvLH+E+AzjL3uwYJlnhtTd6exNqWzHYoiOfL8paQZ6WuGniHmk1sigqANBBnhBlTS2Gpa2ec6EZeR0t8bQAceMvKOwVEYmevvfYanX/++WUy4Cpa3uMUYWetuCfJHlMUCb0qGwrK+FqxxVW+z0r/l1in8jiGrukLUOft8AXgHblYVWqOkwDi9jEPU5KW0pLHYokzVlb5PmelpZ1GmKlntK2Eo5BA85RsDwvwJinTdKHGASqxQa6l453EiM30lvzbbjO1MypUdc3P/uzPluSm2t+DDjpo12ZgpbPEmwIfXufEINeIaIS/GQ/atOi2C9+GovFplZHr5mS/8LrpFW421S/gLa+jVFAPQ7N7eLsQHklmMsBUWomH/8AP/EC5V3ywnzPyAjUnKMKQ4IifoQzhymvVDLmlAvAsBYM9EALJejS4ye9iuhF0STkhA5lq2teLxdGsffYgXJO2ltB76UtfWsZVsrxzDt8qPaxpKTOXnQAuXMTzkMjyt5zwo2ac64mf/i7ZKcyibMvMDC36GdoPTMRR8Rr4s4S0N1MC9SzD6SgGSWbF4zMwwmvzPsh7KoZUiwgJCHmpivKsxk9xD3h7xgwTs7k9Vy3ySvCWvdpkFgoQp29DmaQQIZnEx+OOO66EjXLvkp85ulDs3E9yzphzHe/jkUqUBkdcC46sSp350gB4BBxIsx4lGNVm6yRzqAIXCvgADcznKurU8pAIN2FXx83SzGxhD0C3onIq5YJK6174wheO9txzz5V5QLNSeMk6c+8scSBOwIEE8CasBNpYUUCQo7DSTIGvOQsU6CR5BCB087me/MEydfUtI1GSeKib0CAyz4TrD1zwDGCkxI88k3nPISWhQl9GCDtKz3u9jyJw6tOOHTvKM9Q97KCR5mTK7UjxMCnAm266qRyaDHwpLp41o0Pi00u8XIzcTzz1HPCZMYK3OZsWr5G/UwhPf/rTy5Avlv2y48TCATxfj5msbMlF1jLA8GAAjrkNGfCeQ1SBOIDScitJp8yIpe0hOrnGCR9AiqZ+yUteUq7lJHmx7zS3LPODmZeiEPFEfTgX27/VuzuJhdCyogEJ4NYUpFZYYjenBQGChFZYLSnf8gIa3sfqA+Sx6NF25msbCu8YGhqttLQ7TowS1DGL1xRgAAXfAvaeiTyG+TY8I89HXBtQM1AkqjMx09wez4GMb2fwDgXE8UgpsBkvDDexcPFxvPT/ckDeC5QZHBQghZiKrIQLPR+15ngN7JFno6mPx24vLGt8faEAHgEHMhhoFokHoOyNQLIoCHeOHRunPACWISDKCSP+TiOz2mXlff7nf/7niyWzTiATEOetsEQcJovwkktJyAk04acoA9yTrI6cocjyE9JyDJfzESlaFQHcV4OHIuzrwN/NCL8ytx2fNNZQmmSQXMeaTl5h/LMMFEAuvEKm1XazOsV9fZaXCtgpT0Aj/rsO4B0KjxhwZgAxUihDMkq58dTxSRklY45HudEJP67jWRnV/N73vrdY9fAIDpFrpcaMnUkYtGhaGIAHXAj1PffcU6wJv3MVTQHUVNNMtG0kmFk+MPIAWIceQMIvrJUXvehFxfJc12aWDDXCF+EkVhuBBtzG5RJ0Fl4zbrpR0gwReK4nIReHJPTA36hbrue6D+FP2AnIvu51ryuhDnIITJxlGtd8I9keP76M9wOsATlFrKXcs2KN8zZzCPG68TtKktV80UUXFf6QvQC3PQ+E47mjzeQ618t8obvvvrtgktAsXsOkZQPxhZYRAl1MN4sEY505SeMR9iQjtwKC/D+BBvgemBg3K9yDdS3AYtOsK6jkvgkmBYe3Ss28CLsY9vhxWJtdx/sy/pNFCDyAOKteqItVv07WYJOap73feOONJebNDXd4glAgxTnpsN8mNStPkq/wOQDCIxU6oCBYlhRmZmWvG4U/QPfBBx8sXrjQBxzhmaQVf1q5Do6Ik8MN+QTGjmeI37Al5+EuCy0EwOP+cHUuv/zyEkLRUMP6lqicNYPuM4CDawpYhFbEtbj1Yo7LnpDoi/BbAo0FDsSdAh5FGeukLV8i7MBf/JuAi/PyglROrHIDyTyE18IeeM2KEzJhJVOU8Shn4XVay3PiO4vcs6Qwk39YR16n+1TRgxCKrmqn2s86OiBAjp94TY4ZJoxBOEK2l+l0oIVZ4Mp+xK5oThZyVy2/TWFXmaK1XPwQoGP+OoIKN5A7SNAlc+QHWBPzNjA1251ZiBKbFCalICabpqF14jdrkJdjjCv5Y3kD71kVZSh8pATwmgEkRAPA1vU0JjwQxnvVq15Vfmd5C3fMqihD4bX9gdfkGIir5GLVU5rLEkoZ3O9KfFDlCEBhGbO8u7bYWIdAREux31n6XM9mw8Q6UEbmGtrF/eNaApauRgfEEqccKQZg4tnaWBKe60RkixKTtAQoytFUQMwL3qEYJwBEIpQy5lmxDinpJakIHoxUoSl6AKwqcSTTxxvUZqVmG7/Ql2fJo08F1rLgyEIAnPWtFhaDMCZzDrq2HnLwr6SoRBIXf1kYPxQJaQBUFQxisdzMJHO74nesFSWagMXGUsLl5zqBCtCWCwCoxhngx7SjCzwnCWF13co8N+JbFKY9I0knVCCpuUygMhSxihUrsIqBd07r6YoC4q5r7zB8hH2V0y4LrwcF8JQN6qRiFcrIixH2VR3imjSoMisAA8C5nOsCKhmbKwkjMSPp1ddkurj3Sq5YiBJKYsHWsA78TjxW3Js1DLyVnk1jmPispKcJmZdcckmxKnmpG1EUZmaAGNDGuxS+WQdeI54lLw+IK1/VlNZHIjd5NQlNvFZ95Vl51stAgwdyCKYEDGtFZyTG9Bm3c23WkMSGI9NYo0AmjQC0qt+5YTZcfpcYskYAyNpBMtIZJk8TiyMDLRZTukS5tMCS5cXTEBoSI/a7eJowhvv3d99HCFlRfvf3CIv32/wSKayrJFWszXu8X42x+7NWaxOyEDbyWbXf7o2i9G9uYHPeeR9kA7GGbCi5DbxrzpvZzgQ4PQObOwPFPPdpeM01Z7WnjZ48qa/3XDernCBLZNN3AjLhSDK4DmRPkG2yJb/V55A213V9AG7v4zelif+LpsGTmKwTsW8/jzjiiF2JxT7J9WlOZwNivLBKuriAnI3H+smJ2P4OYG0kiVabhMCYK8LqAaC6OjNzwoTDdIdplsmkNO4wq4gVqqQsG1Q83vtd98ILLyy8AHyXXnrprtO4vd/v1qFBCVj7u2y73ykP90OYgKQ6ejXCLD+drGrr8ZbCck8adXg8fdfCuzbLm9UvXAPI1qFCwvM0jiB5HTX207r0wls+lxJYnYHkkiLfSvnhNcPEc/Xsydd25zWyNySKKSw12vZinwCOGEU6aWGBxDSrf9E0uAUO2MT7AFNqs/sm35E5CaxQQk7gJYGsQZiFhW4DsYZY6B4O8JXVJhzIpmRdsay8B+i6ls8CKla4WJzreJ/WdN/HWvZdANV35XfWsPfbrJQHxUIgrUm4wxp9Nu28NL5N6u/WAChSccOboQi8x98pB59xP3769xBA6vr4gnfWsyyxwr4JgPM4uNae/7RAyssD4JQ/48BzooD9jSdDRjYihkSsQHvK3rKOdQBw9wtI7Tuebd/3HF7bnzxlBuEy8HpwAE+LMEYMOZsauPoucfAf//EfL8AC3MxRyPwJc1hSJaNqI+/RNu6zNqffWUUSdCwAv7O406ZLS2cUaE7Qbv7u5f1+cscIgvf7vOunScZ18rv1+N178nveg/DS73hrTb4LIJi9IcFFIST23Tcl7+C7jEZgWa5D/T1ZwWshLsrYs5qGgK6kWOZdC5tQyBksttke8ffIHe8rJ7hvd14joUr85rEMETZKbTh+MwTtQ/tt0eWEC/n2aK4hu8fiinoIHkCEP7OB/Z4EEHDMGm2mtDQTlMxxznsApd9R/p57bP49G9p353ebN+9xnfzdmpq/xwrznggMCze/u6b3ZIhPfo+QoaFqhJvPtSno2x1U0oadkbDT3i9LUqjOi4yy8gAT0mW52QyOZgchHpOndVCWKKHJIfsM8l3Bg2WgwQE8liQr0WsoYjEDy+c+97klbLEOiTWJMLF0VT+s/iHCGRme5bvU5mrQWodTgNyvhhJeD08KwExjGXLHhQKANBm1J4RfJMnlN8Ra/XsSZb44RSmEZjSCcNw6tNVrGJNvYrBsVrHTFWVEgucKO5rzVRZJgwM4C4GbJ5k4ZBwJiHHtJdYM/1kG5vdNBliJEUr4iM8S9r7j4BmfCpDE//uuEFgWct/cecljsk2JbRUH9zxY28CAsvN5fPNZ5YSSk/IlG4VFfGfCaIAbr8XftzuvEewQbmKYCDX1mcREmZpKWXiusGQZ+Dw4gLNKuIVi0ao/1IH3DaaYb9yk783A+3UAcOEfG5qVpuRKJUrfhxqnzj8t3xkFvAzC3ie5bwpLCITCVB2yVYms0j+8kqPQsZmGNsAu6a76SGgllU/jxBr0Pb7Dd3ne68BrlNOheCnyBQyzvu474bGc5kNxDFWAsRUNjmI2tgoM7ohaYdZa3/EkddAsIw+577rzZSIhIyWGLDj15soPxUr75LfnqQuTgOeAgXUgMoXXXvgsMbnVKAGfefzjHz/af//9P6fpB89UMLHKJZ+bZ8E2SciFEuBV2VMAfF3IPlalI+REYfYZRsnxdQxOVnhwZBlocAAnnFw9rr1Rsuoqm4eMdk2EX2yS9tR6vFE8cTsSL4MFrolHCEWdMgHsC8DxWieiuO74AbPrQGRLfoWMC3/IQWzGa8/GPHbJynHwtT90EDcPIWkSi5+SYKFTlqzRaStftgMxTig/RoImKNU/fcl1woLk2nPiLS0Ljgy6u5LF5SqK7YnRsowxv48Em2tKBml4sVkMclqXLD1yn8IYmZmRmd3NE+e7Irx2bZMf/S751lfb/jJSysxYzsCXx8O9ZxluxGvv91yAwvhhGv4PSEwazoS/Qifm+/jp+7b7WZjj5D6FlvQ8CEOZiSIf0LVcx/qWq2CBM0w2CmktghZiHtGemmKAOItNRrlry5CQUwxqkVlCZ511VtHW6yLgIYKWIVP4gde8kS5DKZnC5/QZsXZNSBJy62QRIrLF6zBdU/jEwDZWsnBhV4TXEniurfZbQ5xQwrp0YDaJ8uNdSig6so433+UEzIA3IxCvGT6qfTzjZeH14K30uXECJ+HDUtGAgCkyyV1ZyABFR5tGHfFBBxgM0ba/bJQhU3jNQhafxmO8TkJzHn4TcgqS5a3Nn3elnC0n9SyLoA9BqYEn2ypRWMisQtaxv83rjeQIQgUAZJtCNh5BCIantQ6lsU3KuNccJiLXRa7xYl4LOeWwlMJNN91UQJwn2xx9vQy0kAMdMhIzmVzzkzFItyQreR4QZ6F4kK9+9avL+Y8ARbLHw5As6mNs7bITYUspn0l3DzzwQBFwws59nxVYAt7CYOrNKYQcHZZBTuvG6zSI8TIpyxzHBcTHzx1tQ3jNS/X8zO2hjO0fSlJVhOuvU3gQhddww55XaSZWTVmSP7yZRamlvh54k2vejnEWDBN4skyhqoUGcjA5pVMSbICWhWHOCOFsw6jUxErqcOU1VBDyQw89tMTauVtKgZrnEa4TARSAzWJR/WNgF/dQaEUCrHkG6VaU0QPambmWRhAAK007rjXviSirTmSM/AISwKIcMI1NqYufdsxsGkjEuh0mQK6FHU3Gk0xLniHvXTee4yO55l3b/2aqS9gL4zlrQKJzWsWWox6FqIA3uU5OJyfxLJuSXOihxsCacEtC0HAEVfaeFqUBMS5zRSZZc6nP9H7XMHmPa/n+97+/1OQCK63KzoD0QJUbZSDNMj2EIYhwswYle4AscBG6UkPLsstch41OS8/YAMItG0/hCk9xXYE/vroOS5BSXkceh8JrQMud12RD2eEbecRHPN6M12kcUZIo+SzGC5wysMw1gLiYLEvTZyiGZbIOhyD3zVCj2IRNJRjxmJzjVTxMfNmINzFIAD9DBJ/hkmcGuH0ev2HKNBMih6SFzUIB1hJqwicyyQ5+xXBCD8T9pFUlaACCGHmGBMXaZlljOqtbxt+DY/k4gUeCVFjmoosuKiEDD4I2BV421ToRfgMCoOve5QOAgBgtZUdo1SGzDiOkLLvMgSHcgBuvZeIpQvFXgKHqQgzW/3M3DQEDLP62TIe/DkUUIV4zJvDv6KOPLvxQ6kYOHXZswJfKERUN5FIIIFZ5pjiKoQMQhonJhPio/hhgk3/XId8JFeguJvuZrbMuRMmRa1UipoIyBMmoZ0BhXnHFFYX/+E2R4hEcAeYwSGMOA5CnRK5hCc9U1Vq8U0aKl2cKi1jiyxIDXxiAy85nboSKFECNKTQoAOcuYujOnTvLZwA40CGgNokHJ/7qJ+HHaAkGSR2C7r2ACGgTdoDCCvfwPLh1SrAJTbEICTQeqS0GGsCaiwlYVI+w8ng+wDugkkw8ZQmk8Q3oiHMDE8Dh2XgOhN8zFYu0aWyYZbJW+qYoO8YHXggFAhX8YYyoBhK+AuYAgWziMV7zFgPgeN3ssFTRg9f2CPCwZyhQVqJnmpHEk+rFtzNRZICaIWi/298UHyNPLoZFTraFQ8gk/uRQlQC4vYHX5N7/wR8YYl+kth7mUKYMHYai57UsinJwACfkmGYsKzdHnAqgJG5K82EkJgJwzOciEWogwfLOkVK0qgQOSwaQJDQQcCb8z372s8tmAeLPf/7zy+nsPqMmfB3czRxqzC0EEoAgLe6x/ggrHuM14GGRsALxPAlnAOGZAGZCDvwjyBnuo1UfOFEW3ut7pj2VZtUpXqX7Z2HjDUDh2eANmaQY8c7cdxajEBavhmLM+aF4iW9A214g4z7jOqkXB/o8TN8FzP3NcwMyLNBlOjW9T6Is8YDsUmI8+ZxqhQ8wgrwDXVjCyibTeAb88c2egBswAa/hiN8TjkL4j9+8S5jFQExoZdE06FNOzJqFDcC5IxI7gDZJrzAVA7k7wF1ohJBjvE2S+CGwjvWSudtNsPBvVpATO5S4scJp7MQYtzulIse929zHH398Eb4oOLwGCpQnPgINQILXAJxVgtfex3MJrwFSkjl55WgrJ9Or/qE0fRfLc10qf4CHHAzL76STTvqcUspM4QyQ4w2DJLzm5ZBLMuuZAPEcPNJMvOfl2qqqGCRCKTnkA7+Xpc27T8Ir/BbWwE/3zEJmYADhWNnk1t+UAOK1V2bn+//kb1zDPkjlSnN0rGtQCAwh38GL8n4YtWgaDMCTJRf2ULlAaI12NbSnGc5o/iSUXhjIAmzO4c2maFY7TAIJG+HMM88sgMKN0p5M47KA2pxbuIpEUJWdiRECDMosNazNe07nH6AA0DZD8zDiJkhvxOvUm7OECDorXHzdtdZhGiHFx8vhzuMzwGgeqdb8maQa2WOkjB/8HLneqJLH34A7LydnnjJOVKVkVLNntQwWYl/EqDOKg2XNiye3wq5+AuQYGE1ek/3M8w81eY0mybXPwx8WPq9J2SylkLDvImnQb6f1CBw3BDNYEJudINIEDg8kJ2LEkslUwc3qjX0Wo0877bQCKBQHDep8S55An3NYFkmEVDxQDSvihQh7bBY2agr8OK/HrcCNPk9hZmQBQGP5b3fCa3JtYwtfHH744cVImIXXsbi38lp8Fqjwmsg0BSIcozKor7byZSF7VriP95EjCuVkhEvlGcb5Po4jG/F6s2fle1wbcHvWjCLhmEXTYABOmCRehE6U5EimiTUNocE8KAcoE3gP3b89EMoja9tuJFRF0FQxiLmy1obwNmwGliCLUAJJlRGA2c7k/sg1EFV1wqsc4vBonk1qwQGakEJGJGxHmUY5e5QX76f8F28aoPKohWW75nuscDkJVVf2EcNIbL3LMQmz0CAAnsQli0yGPhUMfQt5yHdgvvJC8UKKRCmdn1yiPoY7LZJYhITb+ZjcRsnFTAbsm99x79PUow1ZHXOXMyqWiQCmzSxER1Fm4uUQck1Z8qrsJWEUz9wQMc+f5wNctpNcI4lLHrRwiTwAQzDVP+LZfRUmRGHitcgBpS1MKN+xyHxa7wCeBhDZYmNdWb1iVkMPRKcsdGXK5iuXk8xUxqViYMij3YYg7rN7Y5VxLyV1hiybBCxce0lTsUpjDYDLdkwcMwgoKa44+WIoDHn+KOvbM2Z58rYoSx2EXkB9O1EG1AFOv8u38OIpTkZKnwc6JwQjRCbHIVmcskLe7qKoVwCPKycWK3Sh6098VEZ36MoE30XIzV9W6A+4hVU8jBxovOrWSpQloaIsWQyEXFJnyLkkSUCzwrmcGobkG1JpsR3IfahooJyEiljeyjGH8ipRXHsK2vcDErIt5+O5A/ftINchsi1p6cVAoCgvvfTSEvNP4rJPCr+FbShNhlJG+i7KOOkNwCM4XGebV8ZYXazQBWAZOnvr+8SuJJgkUHkEyri4mrfccsvCXaEuCL8lVsw5cT9JXLK+F8Fv4Ztzzz23bK4kNPs+EWgIilyLe0tcAm6GiTLLoWfA+C5yDcAZRmRajTJr1L5L2eyqU2LfrG+/x7OUWBSqS8t835QJiEJVrH8ej+KIRRknvc5CcUM2relpYuDnnHNOEfZFNhl40GKUYvGpLdeqrFhfBcUqT9AT8wSUrG9JxDPOOGNXjf0iCB+BN+Hm8eC7RNOqt9in6mTHjh0FyE8//fQCKIuaf574rHVx6ylJnc4Se0CG57nocrd5KJMYJS4pTQqKceA+GYU8jiFlKmW3nj3vK8nURYz07eWpxvq2cbkYXBzt8ppy+nZzNiOM96AzqUz8UnJP+ZHNR8mM1+SuEumglLhkIWgkUXWz6I2L3xJNNp0SN8C36Mz9vARMJC6FBMVegbca+EUSQGEcARJyTVnydsmABN8qe5eAWtiEt+M+xJ9Vnuhx8O+hezl8Fw+HJy+UI2Spx0S+Z2js6Hx3B7wxXYWH8ARtycVMLHaR5Pu5uhQKcCEYMsq8BA+hz8NR+ySCTFFKXIo9c/GWYd5Lcg8HHnhgiRWa37HKCU1xWDzmygNLFQnx3BZJvp8xAsQBCeXCKGGFk4tVleuEBVWdGBcAvHPgsxyWpPEieM/SFroh15QleZBElocYEsR7Mc/SRGKwEWuAtStetSyDjYRwdCamVllZkrWxDHkNq2aFZ9ogJUSgKadmF+CiiaJUoaE+WuiKsGf2xyoRo0SSkBJihRtUBVCWZe5IDvoVDhSb5SUwouRDyPaqKc2M3mBk8eQZgvYt5eReydOi2tnjzeO3/SYUyyPQaT4kfvRigYsNqYtVridsInG4TC3r6RhUgSLEQNi5QkIPXLOcz7kqAGO9Dm4W/+TSizMv06Au62CtnHDCCcULE8dkTa1SnbJ18iCEqMiL5BkDIDXfy8BrsqxTkFeQE2XEh5XsyvOQk1WijN5gZMlXCVWRbR4GwFz04Sy+m9cDR6xL0liIcMiywl4AnPVt+h8Gn3LKKUuXREmZmzADoWCl0J5cTRaiWPKqAAurkEWrnI1LrxqBIloGQAkl6aMJwoxliW0gaFOuCp8BIk9NMpYlCCTFl5dJUSKxeDKtIkUiE3CrABPKXLWxBsJVJg0yqhhcvB2yravY3l2GQ7M9f+uSV+NVDo0fc6NqJvvROrSiTcn6pv0lr2zaZXExmxQrXL0sK4qWp2SAoPWmO3OZACa5BWEecXuCwpIF3jZnStmWrZ2afOBnxntKAJkiR0Yo+1hUZGhZwlfhNeC2NnwWkoglmMqHZSTNahQ5rxeP1Stba+5pGfi7FSX2rUTPT56FxiTPgJzYs8sQkk0FEHkQvmQECvfIOQzB55mQNeDAJeNWirH5maE6zqS0KVldLFsC5cXdGLLRYdK6CbC16eiyZrHjJDOVXNHwwEX5na6rnE6zyJGoaRXOKS0EOfz2b/NG0sRhdCxeq/pwPzn4dhFrzynqeGyd1s8ipHj8BNZimvjLqiUfrFprzwYdct2RD2sm015ceDItl8P6poQAoj4Cz4B8UJqLTBgnbNmUa2t3LwAwc8k/+MEPFjAkE/6dk2mWgdKERlnitxflw3sg2xkPi/85vWgZvPoYJzwfkQbesC5Y8gvQrRWfs+au6SH/3VJN5Dgzbg03mGDbjG4i585JMohv2pAZM6qhhNuj9IaVO3TZlXUTamu2+QC2zZk5LQQnBxS4F2T9EkISFWL5/j00qNiYgNm6xdi4xdYHMGJVscjxm5AQdv/2fwYdxZ22aYdcOxAUD0ySGO8zUdKzAC45xMPaM6MZsEhOAR3gTqH2HecMcFMsQC7yERDEt5xKRL5zeg7FQ67Fw/HYhh3yVJwodgpS/iMHcuA9flkveaAcI9fWjceKCsg1y5HcLwLIm4agUEmOj4sSIuueAzC0VgYVo0TuwbpzoPPQijOHd8AP4VdDxKzbMzBOmMzAC3kfvKfkYR55ZqB0WbM+NYAnVGKhKajHdEwUAyK8BCHzCBJSsQkAkPfaBJKFkppCFwGVvglDgYi4PAYDC8zd/bPD7zM4nzDYECwZpW7W7H4Bo4oDbfiJvfWt/aMoAbf6aesHDoSAUsnJRQETm9PGJfz4rTbVT2tVdiX2PMTaM69CzS5vAP9Y1JQJIbYJyUzCDwFGXoWNEMVK0IXgZPht2r5izal0wC/jHrjoOVuVfKRpJOv1XgqfXJMPL+sSGlLalhDREPJhndx1zVuUjr+RC5YguSYb6bsInxlX1gwg3aNYPj6nwWooq9ZaGSdAW9yYp+75ex74HcWN38DSe5MzsXfFwck1IB+C3ygYmNAOT51RxbNkjFiHvehlr+YQcPsSbylNg/wYJ+mQnlemtwTwaElCa7EqS1hVGEwrsqhtTuDdnK0bKwvj3SDrIFlazCY4QAUg9dVFFatbfbeSRsIL/FhLrCZMFCcEDlEk1ozxsQpoVesmXEBF7alYc6b7k+pBqAAAIABJREFU9UG+HwgCE0OpbLaUPeI5C4rAhN/Nz8Wada/icfIRQNQG1bDEIu+r5ZvyA8AqNQg3ZcGaNmzI+qMom+5vXFAblbD7PDcUMPmbWC5gNHkuctLVun03q9v34TPrNbXUkQ+ue0YRRK6tFyCyfMkz5UoBAB5gSD6ATB9hlVjdlLPwgpe9SdnEoianket8f+Qa6LtPgO8FjMiGdQOXIbxMMiqkRkbIuHuBJ+4Bz62fcRIvPconRhXQp+TtAyCO34yDvsJYAW589pytm3ySV/yy5ij7HOno/QkxkxM8hyGeAby0ZvvZPczj/WwJ4NH04n8sQYu2KVnQcb9yLuJGNx+BB6YAkcYVemEtPOc5zykbvOvKCevmgmkrZ1mxSJT70H4SIgR8s3i8z+fUakLjgRE2QoT5TvbZvYfjwnynB43X+IS/mgVsrpzVt9V3hudNQNQIAYSAofV3HVIh3L6DosxAJfwGhO5hGssfzxPrBy68JXICYJQgkjubuos1Z+Qqr0wOwfrw2AsYjAP3OMWNJteUJfmgLF2TUZPDBbpab76TPDIoKEm8ARr2D6PE7+Qjp9FMIkBOMdrTgJDlSwEhz0vPhn252TXmIQYdDMB3z5jS4xl64Xtkpal8EuLKuu1roS7XYejYh/jNKocjXZO9RNHbjzxLOEZBU5g5uzTHOmZPBfR9NjIt7Gzd9qT7sV78ZtzMWlGz6SyUaHsWrAFJFmamtiFJGB5mN0+0mPTKeYA2Be0KQP1dl5ibwoCuD2Klsa+44ooi6Bh18sknFyDkXmL2+Gk+k9bsPTZg3GkPDSi6JmHiEnU5mCvhB+NJKR3eAuBihQJva4n1uhm/s37vj4XgWRF8m9Xf8bwrzwcvANh1111XrH1hD3ICcG3Q8VNPNluz93JFrQ/P8QTIABv/joU4L1E4lDtFSR61nVNslEUm2221ZvJBrt0jufKyYcm1DZuwYldynUM6rJslSK4dIMEoaSr3aeTae1l/eGqNQlgAFSWZ37WHaf28wmuvvbasn7K0ft44D8s+Y1jltK2EI5K8xGsWLqzwnAC+/yfTQhrWDF+6zEMkZAK4FWfARHIiDMyCJjvkxV6KzIyvO8e5wQ972vopBHuGwudtuPdZ5GRDAI+Fwaq68sory+/ma2SuReJl0wBAU4AwNwKfVl/uUE4W6UJoCMr1119fgJCL5UxM2tLDj2afFrgi9B4CgSc01uuBEvzmIcHzEmXJJXYwrutSOpIhycC3XXdAxmb1zKyTsFOahKiLOubkRYCKhI5GIrmCJKq3OoZt0rp9Jof/WiN+JzbN4pl3JAOQpYR37txZ1onPwMRG2szq3my99gPlArQ9R0BFDgFkFzHaHNLBwxGOlJMBfvZNqkmm5XPeF2VJNvA0Ndf2Cb53WTGG52TvqquuKkqI5WlefPZ903rdbN3j54kCRQRHXNczgC1dKM1UUdnr5Ns1GSYAfJIhuNGam0Ysftt7ZE14BYhTEO4joc02NBHAm3Olr7nmmmL9CHWI//qSWV3vfCYjGQk7F9TmtAG6iIdTNKxXc4Jpx+c973ll07dROJPWHYGnfKzbJsJ8lkCGRs2z7gzsoSwJ86mnnloSYrHwZ439NhUnoeHCppWdZT7pkOM2xKWXRBMXFF/nyuJ7lNo867YuAk9xiiNyYd0D0J0VXMi153b55ZeXzedgbZZUQHYeHtsXrmONwiqsQkBjs88TSklNtDg9bxjo4XP2yyzrHjeq7Gu/C0uwCoF64rPzgjjZhiE33nhjAfFmCDKhtTbf0eQ3HOExIPwW3sDveQskEq4SxtPlDKd4aQxYSmIr4N5ozU1+uw6PnuKxVvum7QHgG1rgrB5VBMBQ6IH1ndGk8zzQJogTakJC69ucQhLAcB7GA8GXvexlZf3Pf/7zi3s5i5BstHbXYTEQHLFT8V5Ay2qZ1crK4QBXX311sdxYJsIQqejpYt1eNjvBpvklolMGNyu4WLfr8HTcP1DxDLtKNuYarEOyZ/PjN4U8ayjF5/GZAgYiNmQXB1405domxAOAInlF4QPEWa1CSpcnzDNjRBx77LGfkw+Yd90xTshDchm+k6Kc1yuO8uHx2OOUJSzpYtxD1k5J4rHvEgaipF2/LRg21+waPMo0yfF2hE3sn3mwJJ+LMUjZUzrkBKhTRm3yDxOfDI3JLcZw5j7rOwcQd+FSNYWd1lGNknkegGxWInRCEDZ6Ki66rnCJBqUYJH2U+SmpnGdEKn5LSFGWFJiwT9czNmKxsE7kMAgiYRdz9/2zkI0pccc6lrAT34tl3OW68RtgsYBsJuue5Rg8mxI45VxWStIm6mq9TUDBD8lF/CWTNukslEoZljc+k7tmcrSrdZMNSlI8mlKXKMXneacYWr+kPEVPiQFC4NpVAj1GFZyCI2LpqXabVa4R+XL/PAdKx4TPrs6VzXPzDHlTeG6t9hLPrc3QsYkALnaH6YROAo3F03UdbtOdyDAYsSaaKI00bYjWtF4WLGXDsmpuzvG1u0cbWYhFXIuSOu2000YXXHBBEYC0dW+0dtemJDxQ684UslnW7btU+bgGb6evOd6JiatY8AIuFDXF17bt1/vJCEBkRSTH0Ne6KWJxUx4bN58X0WaDWi8gpNxZOMBb3LHrcsrIGmsqvQ4qD1j+bQ92Th4q9fFpYpnXCtxo3UCVB0XxAG5GBYNqnvb7JF7xXtK1y5zR+NpZ4fiTo85mnbWT2Ld1kzv4RPl0WbUVOeEl4Lm1+z5em/VPSxN3G0FTsUBDSJb0VaedmwAAxo0SFDGnWaZ5ZaQqtwfDWfbNKoJxSo24zYF5FBULUnz44osvLptuMwAHhJSOz7EKUxo0y7oJGoHjylt7jofqi+euz6L1HQB8luOgAAte43kqAubJM0yzbsClRM8za+s5uD+VFtYsMdznvPSEJMgg0CLPaWRry2eftWYeKus7lRd9rDvJejxmhZMNL2tIrX7qyfM3/yYL+T0/0wfi8/aSUAyedxUWbFKux/ujIICtEJkc3iyGibUzJCldFj2A7aOsMoqHXCu7xS+VLng2LU0MyhEWG5Ml2PckwdwEIPSQM3y+bVwW020SlO6saSjNF8IWGcYuISfjz1XdbN2+g8XMkgcqNlhbTyXHzrFQeDoszL67yqwvVSKUWIDFa9q1i5WSEZvGZk/Ip08CuFxOHo8yvViG03wv+QDgElOuYdP0uV7XxhOKknLmGrOs2vDJvfmMdaeTr+85765N8ZAPc89VvaQNnyIBwpkSyPAh7/YKfnofy9WeIhdwRIhRjsue7LOjNjgCvGEWGWFUUaBta6zdX5qFVFXFk++DXFc+jfHoZ8Io+DUNTQRwQs5FddGh5nhjuhiTxSsXa5uAAL4ABROSJZ5G0/tcc8gSrUtxTbPBAQoeZf7L+LzlgOL4ZMBY9kmW8HaAKG0/xLCvJAbxGIADiPHmia3I/VI8+C3+2FfjR5Myfxl5Xp5bwjbNZ90Mm+XlOec+M1StbyIfFDIekWng1qZULN18Pgu4eapDzCyxXvFwOADIYIF8BzC2fh4jT5UnY43i25Si+wXy6ZoF3F4+j+dkrm9jkEwnX0c+0y05LUVpwhKUcso+yTOFN3juu9uE2iZKQ9qxCc1QZ1hikhsQA1JWSJO2BXBJB0LURulwxWX3JZoIrHtXLkkIXGMzCy8C4/vEr1SlsGozita14k7m8IKM3g14e1iZEjfUBkWeq00mJqxJq21VB+vEJrbmviatjVPCP34mZwAU0jiRRoo0gWS4mt/xGwDlDMWh1ovHXgwDnh1PbdrvTmMXa9fz6bKrczNKma89CFiAoDXzEMmsNQib2bPkNwOarDceBoMkc2NS4dI3liS0ScngFZ7nmLNpKR6xF7nuK6/TpGafSdsRxRPRojm/eQiByXdgOqtKE05bC9yaxby4Hm02p4ctzi8Jx9qRlKMIxAHTabrZuvNdQj8ApWlBNx/8JAsxvyfO6P1Dzmr23axCoMJKasM3G5PHMkvzQRdkg6Xhp+nRhH/j3k9OamckDHUIQ+TDd5MpVl1iwNNQrEF7QqXCUPOvA4TpsCUfUY5NTEgOAf/TAGXNrHC/kxEKCCili3gILy05JMUIO3bsaG2B28cS5WlxH0JW0lTVNi8zEcDdfM6IHAJQsskIK0AwryOjaKclCkfdeizbaYmlAazFspF4lxZ8D1D8cjOGxqL2Ei9XxpSJZKiZRMXTAN343ykNTQ5DnhOZ2RLcXXG+tvX3QEUbumc21PB6FO8FoEn4AoY8g7yazyUvnzNFM9UrQ63Xd3vGwECORLhpWoWX0614pGiesrg2lD1kb1g32QYwvr+ZqPRzPHnZ/D2hgMj5UBTPmWwC4zaUunVrX8S62yqLiQAOtBK3m6e+uQ0lFg241SkT9DY3Y520vSRAm2x/5m+klRcg5BSWrRRBYpQEBdhTPBvNRpn0cGK9eL/hPizxKM2+tb41u0e5B8CipK4tgItvqhpiiSds1Oe68SplbcogJb49r+azblrgzb9lTvqdd95ZntkQYJhZQuRJroSilCBsEwOXaxC7B0SzVLHMQpm8h7eZ9pfZ8+OKMSHCSS9rVlWhImSWUtVZKIdbkEOGmWattNtP+3k8d0A4mRnqfMscZtH2VPuJAO7BZcBNYuF9bkwLFq9iHclyA/G2VQ2Az+bQDCMxlxDQVoRp6l25XYRRRYnvnWbYU0rpCCsLNnOu24Z+CJj7Td1t38dFpaQOICS51LYEkHy4Z/wTGiAns3a+TUtJ+GaehO+bNsHks9brJ/mwyfs+0dxmZFRQGOLH4slt5rhkZjZeC2NQlGSu71CK9VLQwijjJw6Ng8tGYBMLmEzL8ZDrvo2TeA4UB8XJc5BodQ9trkG2GCa8cIosRlZfFEUP/9o2Tk1cFcEm7Jm/26fmTHwScLL4MXyWunMMjhVJYBKO2GjtabYA1MDMA7MGgqZhRPnRZqcGpdhf8hO/lNLNEltNfbMSMZpfrLTv0FUSp/ieKYdt3TfPaPfddy/KhhKz9ljhfRH5wB/P2SZrA2TkQ1KOouY5APG+5TrrxZd8dxvyPDwbn6UMrNs1+yTrpiQpDMqmOXa4GQrMqzl9b3wSn/vNbHL87jtEGKUBt+whe1tINMnsaV8Z5pXS076t8IyrpewZJG2mKU4EcEJjc2KG+OwsbcttCMPF+XyvFudZxkEGwL2EUVj0m7nJHpT47ymnnFLaZHWfiauaQ6Irs9kINIlcW+UJ/uBVGixmIQIuBp/qCg9zlq7OackGVZEhTCaEMovCdK/CAjwmFjhLizXe5wa1Zg0WStbaHqjh/igrzynHj7XtjGxD6aCUSCPXmUHfls82ND4zEty/a/YZ1gSyKsE8U4pjngMeMroBGAInrz6VvD3DihWKBNyplGlLPHdywtNTSz5rR+c05Lrw1Z70PYopKM1paeIOcANAyYVyengfgJLYJBC0qbQ3E9ZZ3JVYsgZLUQhCKWH8JOb7Du9naQPvDPPP2YabPfh0T5oOR+A1Aimnm0XI07Vn3bwPGx4v2sbCpqEkaMzVIJiENM0Vs6xb2ZMKHryy6fG9jwRhDl/QWOK5cY3bhti8V4jL8wUiFCWQ6kOucwiKMks8oXAAWdsyusiGzzI2WIP2CpDqY91p1jGalUzMO7o3StPa8YPMtWkTb0PBEgoen3wnAG+LJakcgn/Wjh+iEH3lTJIr4F35bsYkhTctTby7aE7JLRtHIsLPLoUmCRGWMrCl7cwkmafrCZBIbNkwpp8RxFRIjINKSqVYRyyjvHK60GYhBYJicwq5AF3VEG3rN8fXIk5nypwNazhWDi/uCgzjXgIA1wdmlBfFM2v7O35TPF42jmtnJkxX684wJzKoVNOa0zTSds0+Y1aGa2g+Ef4CLF3LNcte6MRBFFFys3Z++oxnZK6KaynrY1B5ll0qytSc54gznpWS3HnkGvHyXMfeSkliH1Z4KnZ4KYhMtikfbFKMwSge+7yvkBtZoSTsd14aY9LenJY2HCcLSLhtYptxA+eda9ykMPyWW24pD9aoxpThzZowsC6fByyumTkdXZ/zZwMpNURnnHHGluWG06zb+lg7EkjWngaJrhoJKB2WvYmPLDgVMxlfMM8cbPLg3tXgsyJsVMqoiwNy4+mYN27dLCIhLxtrlh6FNF4BFWvV5AEUxdO7mouS2de33npr4TOZxudZuxAjG9YsdILPvD48Zux0IdfJ5+TIMPvFoRws8HnroH3WNQKu5BqOzHsox/j6eZY5lJryUfGToV+zUMKhwNV+T15ws7xYW/I8GT7km6yIQDAu2oTaNgRwNw48CIkv0bFnsye8MA/zUwVhjrTyOQB44okn7kpCznPtZM5tSHW/QFyCsKuxoeLeL33pS8smNdfYEK6c5znvtYEenqdrD5gTmnlbkFk8AEuDlHVbM4WZGdXzblBrZsGxkFmeOQFo3iForEybUqeojQO8eYXzVLvgo+S1a1CUNigAB+TzdgoCbxamEjQhJZY3l3ieWeAhvLT/KDR7EeCSc3+b99pyF7xVe9E96ETG565Oe4cXXnjNc7XHJf27Or+SQuNVUvKuaeww5TNPI2LOK0gTln1DITAiujiyDXgLzeil4KkJCyqe8EzbYOBEAM+HMSAnddDO3E4PgsDPMrQ/ZT4UgsYVXVKIFSsUkW6ueSjtyzaNzSSUglGUQ1rV2z7UuMWEz2ERaoltztNPP71s/C6soPCS9gXcBJLFnFK/ZmnhNN+VEBXhJiAOMQCGrB/KMmM9u9igrkPYWSrkxPPNYR2xJtp0H9o0YscAhdKxgcyR5jXE6pyVEle2Nt/B4rQ5gRU+N08SmpYSf+WpOu+RzOGzhHgXk+xS/ZEeA/zIUYRkOpUWee+0a8Znlp8REJQkN14ifxYg2Wrt5JdMqH5iieN3jlWc9TviOTDUnGRF4StAcA/znOnZxD8KEth6tsLI5AaQz/pMM2IDr3lpsIRSED5NaLDNuje0wLM4F+P+AAFfStjTHuuhTPMAAtyuo1wPeNvossWYQWPmoOMu3KrEt1mEBEb8ChgCtLjQ0wonAKUIJNAc2ksZeJBiktzjrk6fCeVoNWvHW7zGc8LpnnJ46mbf6T4JNkA1TY6n4x5cm2JT8dLlBvWKC86V9f3uIXkT99HMLWxEGTiliog1xbWkgCg0DSVt3cvN1mwtKmcYJXjMOnQP1kk+pt2gFDs5pnAZJK4nbmoz4nOmS3axZuTaOekHf4U4AUJyONM8U3LAkrcnWIA6mPHCvZNrHnHa0buinIVLDvHKPrJuQJ6zJdvwCN95qgDQvuRNWbsj8rrkOaVDfvFK8p/CS6i27UydGFQUsPlLTvshcwwTXvEso3an8r0s2gOQZHRxGtQNMftl9f0cL0dL4hAA2hzcPsJNUFyLmwZECH+K5bsc5JTxsoRRDDLWkeoDa2bxs44mWeWxTIQd3Kt1u5aqDZryV37lVwpQSZC2mW2xFbkOwWQZEmphDkJCeRJSwioh5GUtPKFYGokDWid+i5XiNd6ytrnyQDVdfe6xq+FC1i3RSFGSBWArdEUJWbuYtbhkqjHwPIofDyl266aohKiAE1ny3GxGIANkM82vC2JQ4DPDgTxYP2ABBNaqiw+fKbxxIwXvvB+fgWnKGz2PE044ocg6cLLeLuXa9+aaeGP/+F6HMwMXJWjuBb9Zjk0wjxcJ9PE41U6UozyRl73oeXRd9xxQyhxxzxBPPFe8E/sFvtNY5D7vHnjD4t1k2n0llESmu1SYfqaRh8Hqu3mzEvaqzyRLtxpCh/f4bD8KjZIxsmetzZPsZzEEt5QsgkjLuwEWp9gVoQUmXFzuIhcA84Up4uKmC81nbWY3Tptxb2gbm8TD8v/pMOsSwAkiQMBkbhVrSNWB9TrwGDCkbjxdfZiH0dbkRcMDF8INuHPog43u76yYNjWbW1E2GZDFK9Ut+EpIgCELl9Ym+IRmvPPT2ikeQIqXPufUIMrKcxFC8RysHb/nrTAI5XAMzxHweb5IRj0bDe8zEpXSi/KwDnxMowdQogCEqMQx/T95Ay4UlPKuLsh1XdPzF56xHspGSCW5Gfke/G8qSgYJ/uEjuSbjZEnYgYylLNPzsl6g1UXMFKXL0E8xavKYI9vwmOeCv+4p45ntsYQayLR7Jl/2B/7aGzwbf+Nlel9fLft4RlFTMBSdtcORhCXJq7XkzNPISO7bfmZMeU6UkHvDd/fK0/Qe8t+mDG8zsq8iJ/ZWkowsaHINxBkl/uYFJ5qhGxiI5xSl95IJ/2Y0kDny7pnZN67fpvoktClipoTLDdA+BBqAs0pYWjQKZkbwm9PK0gZMmFm6J598crlJv+e0aw8yhwp4b5cZXuCLKbH4rBnjAIMHIJQT6ykdWE0rwWfcozg3UEphv3skaBJVBAY/ujqFBs8klFwX4AIzgkxJEBQChOfWzzvwXGy4bDZrpmAIh/enzhtQs95ch0DS/qkz72LdruUZptuRhUWQbSTKg+InxNbNhXYPaRm2Ca0RaLN4yQeQdi+AzzN0TZ8li+6jC9c+mx2/MjYV8OkFEHoi06xUa0WxkHICjcSytQJA8uE67tv/28hi1K7fZft4ugztMby1H/GKh8VQYfkDFmsGGDk5HWWuj3vFa+WUjCj3nLCUZwZUfA9Z7LJlH1/sSWFYe9B8FeuDCWLYPAieBOMEb70y5wY2kHMv+8M67QX3zMOmcFi1vE788beu9iM55eUIXfGIzWlihDpvlyFHoeA5fATAfrqvWN2MEzxNZ6hjGylezw/+2BcUWbpUO7PAEwLJsUrAILOXPXBCAxAJPG0aCyzaO0mXDCoHRHFzAvA5FcYNdAkoCDADgFhE1p3aZ0BBAHyvTYbJcRttDvdpvdZN2VhjNoL1cVMvu+yyzhsqUjZHSPEmcUgva7cu4ECAWHcZfhMCht7nRdk0E1uuQSkgQt6llRWr1PVTzZF26jx7ylAYh6Bad/gWOcm6x3mdipZYkO63i9AP19umsj58znPP4cyxbnOYQfoJmvKRV6qQrDtt82QPT9xrF2E23413LGU8iYLz8n34nvI5e9G68Sxdm5lvlCRcZmZnXYDHffhsOmq73I/WArwRGfb9eAnMGXIsaQCcRhzvB4DBEs8JMDOY0qQTWfM+XhIg9cy6Uj7Nzk58Tmt++AgHeAVeDBPPO4aJdadbGVhbsxeFSX4ycwXP86w6BXBEGGnNJO08ZJQvSUWKl/fmAINdF/9sTGpSaCTNKxgC+AlNV8dcYTwAJ+jNmRmJMWV2CevFmpuzR1KlEOtl0npSD5pETFcucqbt4QXl2KxNztp9r1ebAT3IvRAcYEJg8DyJzHkoeQ7C6/nFuwolYUh2Ij9tyGcpYYKetuZ5h1BZMxc8Mpjn16wEwuMMv/KMo3AiHxslkpPgwms8Ybm1fVaTyPdTJAAKP4BIU67xvKnkI9ehTN2clJzFD/eLx/Y7Hk87DG4aSs8HcKbwGH/ZXwFnspOZ/DwAMpX1J3nvuVijtTbvw98zvdT3+GwXJYqwTJiMwYPnzZHLZJCRBZCFs+xZL95CZCXVWd7rlZno4Yln5Tnai7OG2za1wDHSA2X1pHRwnJolN20fuOu5LiYlOdOFe8xSsdkxaKMW92y+1Ki2oViFBJLG7erYuWxS/N6qnb8tBVhsIMk3QikEMC/FMrRuGxG/u3S9rRsvbHDPFCC2Pa1pnGwU17LOjeq/Ix+xctusl3wwTFhuwLALi5CcJRZr029Uox2F6TVtjiP7wH7JYKUuQ5pkhGWf+Sqs0ubziwJKRcpGndMbJfnca2rirZ08zgvgKfdjvDJ4xOWtvUn4H/zwvCeteyMjMMaYdWcOin3fFsA3REsLwQwXt7i2A/+nIdezOYF3ys+6IAAlxpkBQl2TjWHdvqfLUIRNI0zg+pkC1yXlrEO85qZ20dKczZm8QcI+XbneiPUDaLmpnuu8a3bvXoAw1RpdUTZmzo60+dscMDKJEk/lqruWZ9j18WqZwpcKrC4rUch1wqTJSW209oSixqcbbiVTseLJBzyZl/CcRU1O4JJ1b5Zk3Gjdm605BizQziESbWkigEeTpD7WBgJYXQpM+fLPThBM4q4rAJccIPA5XLXLOm3kmh4o7dwFoIQylSyVGl0DIcswh9VSFF2cpBM58TPlgV0Ty5CcJAY8L7iwvj031+yyDDSUg5PJM6sTv+ehlIgCcDJBmXXN5zStRCF3ecoST95eodxZ333ISPIAnisvbd61p4Ajh8wIt3Z9Xi0lnCKDAHjbdW9ogadawcME3l3E8cbJxqGBAgJdTOBjoagicK10G3ZNHiSeZJZBFxP4ErIC4LMcaDEN2aQ5HJdgJmw1D6Vr0lqTWOtj3TZ+DqqdZ6Kd+1XBY8MA8K7auUOJkSe2zmtgic9DKeW1R4AsS7NrMEmewk8gmN6MeamZfKWIMze/a+LxkG1GUE5tmpXSxQzAU5aYRsMuiZx4lgyrVNh0AuABE1rTA+0jFBGXg0DaROJ7XcwdTzMLYaGV+zi9JOVyLAmdnvO6yCgjSG1SgthVXL1JGaEbS6WLueM8HWtOp10fJ4/jA2UMYDzbeeaOkzFK1+dzmnrXROaiKMn1PBMPc1oLRWBPMhwygKxLykn0PJIcWN3FCNWMSwWqeJIuya6J/CWBDgPmnZmeXACek5NZJxtuRqnAglWe8SxKc0NOuhj3j2abdUb3NOQGMIflCQzmJRuGdTnvLOPNyDVzwgoA7yJemAMAbJpYb12v3fUAuLXHupjXewDevDQbv6vhR5No98/Op2eJznOyi/WyBnl+5K4PazAlm17AhDzOKiOJxZINm5sF24dcJ/nKi0q9eRdynTG1FKdwQea5dLn+GIMp+aUw5j2sw+c9N8qYp9ZH2Me6GRDkxP4n122V5oYWOI3JAgcmypL6Ilo/Cap5j1zyWdYVcFKj2dWUwHEKEBJ2iscmnTeEQmCEfggKns+HIWSBAAAKvklEQVQ7JXAjylmWeA1457VUyIjrEMI+4vYh1wfisQ5n9XqEYAAKo6SrstVxSimijU8ufOescfC48pQO/rLAu2x4a1KMKQDe1VFiScwDpq7HsTYpJaHuIVU0s1JKY8m15yjf1dc5pADcnszohU4A3EWAkgumhKsvwqC49DTePG5b2l4JHgu8L2FBBMWDBShAfN6YGxdKt2FKi/oSGPxOc1MOf51V+QBRAE7ZZ0RrXxZ4OnpzKPEs4JK6XvcNwCngPiiVKDmWT9hnVu/S/QJTcuZ6fcsGAE/VSBeJTDgCwBkm9nkfOSmU8CCjzXcC4HnCVsJePFSGA2+tL7lO6DEh1Lbn4U5cVWYPEHhWTx/uQ4gwJlbNep5Hc6a6ImGCPtxjlEQVEMArHWTzxMEjMCy11K73JTCuC8DFUX3nPCe7ABX8TgJz3jnxm5HrGg+A4jm0XbdNDQxTvtpHiWkonXssrHQWtgWU1CKnYihKpy8eWzNFnKqIeZPc1i8UQ8nLXzSbj/og4O17yPQ851jmvAIYSGH2UakUSv27fRnF0wmA0z6YLXzSF9MT3gAogEs8Oa2osxBAwniCDqD6YjrCExah71DVMM9J8hQlK97DY9X3kcAMhd+UHH6xDGfdpGnOsGkyI7lPYkxk9MIsigcgpauuT6sKkQ9gy+pkWGRgW1siE+43Z2N2XTXTJLLBGmSFk4t5E5nul3zwrDN8ra8QW5qufAfvbNYEfUZfZ86QsE+f+zGnLVGaFEbGB0xLEyUYiBJ0LrE4Xp9AiDCJ4BjsMqtF6DMJwwDWvhKYoSQ3fM/4UKm2RGAMIPJ5tet9JDCblBkvGbQzSyIz7dHuPbMh+orbh2xOwJvRsm03aFrRE4roc62uTbExJjzP5lySacn9ZcIkBene+1SSAXC8sQ/nbUIiXzkDk0ecnFRflFp2AD7PnCLrztyWrk7g2YgotJzFa832YxuaGGNIB1LaU/sWdJufhjYBLhqo7Xcm251urz7dY2R9eGPa3vjcibYEQFnxKHMi+qQkjtPCO4uVlQM6gKIZFn27xyiHEltzWx4lz5Cw4DyHZ09DGV1gxCyFYW7GLGvOmALhGJZx38YUvhgD7Lvm9VIAEgDPXJk+gRAB8Mwsmee7YJ+8hf2dE7f6ogA4HjGaM+ht2u+cKFEJBwif9Ok+hCzeREOTyeZJLOWUdKVWW51aMy/Fwjr11FMLvzLpry2lTZqrCVht1L4BPDFgsfvxAWTTknXb5ACKEuszThjyTE2tkydhXLQFF1ag58Vz6qNRapzIowmBlLLf21rP1kcxZs54jjfsk3jd9qERufPW9ae0z7OixOY9Wm4rcn3GRMJAswJv5pJ4bn3mHFCesdG46Q5uI9cP+e8JvjONb85t5lD3qTnTtp/mjGmPhRonIMQC9wJOmNJXvC2UJFPGjM6iMHxWkuqiiy4q9/0TP/ETvXs9vpNlJPyBVyyWtglI/BZDFwcXRkp3YN/rTrin7Qkm6a7LjPqste/1jlOb77PelJeRrzZHAc5K2Y/xgufhESCUmLcP0wzYV94hvMazzIyfhVcZoS2cSwlQCH00ezW/z3rThQ5r2+yjiQCeofWptugz2YMmTR6b5RrZpE3g7ttimZfS9WrOBYFLDLzv7xQCiasWfrXhVZcbfUhqytqyrzdrbYYUl33NTSJfiUO3OZB7kRRADf51dfD3Vt/ZpDY8mgjgXQBqpemoqXhQZiQP8b1Nqs+4UqX/pVXaGxMBvNKwtEoCU6lSpeWhfrNllaaiCtiVKlWahWYC8CTv0s7cTE4kvqpkS9wrg+djZfqcRFJOOqngtTXhZzpUx5MceQ5JAI8/B/+Xk0MWEafWiCKmaN3NKgR/y/zj5hF2uV/rFlay7r6To9uBIgc5Oi0JPPz1d//v/yI/KElS/M7/9V0K2qTm2nKiV2QgiT1rzNGMzdBiE38iI0OuO+vL9zfzbsE4vMz/jd9v7mlefj/0Z/6H2n4IUw1euuuuu0q2VrlhMrVuTEv8LbfcUipCJOWaD0V1y+tf//ry7/HzE/sm685hqTl/Lkz3b39Xd+tvzQOBM6dApUwEaUhAwc+77767HFSRA4Dz4NWPv/GNbyxngGZmNkp3J16ra01DwtBAeOedd5YTx/EzB9kinXJO9bZu/G3+nwoZJ5Xff//9RSkpCxsKWMhBTmZvVrsgmzJnNqLx/yNb/i+HaA9J5AA/VVA0J0O6B3z0f0pVc3I6cp/2o+ejmijzbIYiMuog4je96U2Ff74/YzvIx9vf/vbRu9/97gJ61t0c6SHpT7YczqE6x2eHXDdeklEH3lhbcw6Qv732ta8tdfBKV4ONjFr8dr94T67n7VeZCT3dwPve977RK17xiiIgTsLOcUNpSlEW95SnPGV01FFH7QJD/+eBXHzxxaNzzz23nADeZ4nOOBESjPXwnUx//PHHfw6g3HPPPWXtTk/fd999d63bpty5c2cR8nPOOae3OeMbkfXecMMNZR2Zypd1O5z36quvLiVbhx122C5BzrmPV1xxRalFVh9vUw9Nt9122+htb3tb4WVTwRBuSt5GOOmkk3b1HCAK61WvelX5P/ebuv4hiBzccccdpSZX01CTb9YF7AD1AQccUCZeRn5tWgYNGTvuuONKDfGQypIcXHPNNaWOWN118zDvd77znaMdO3YU/mtyUzqK3AeQ9IzUffv/PuZeb0RklGzcdNNNpQ+EDES54L/nYMDb0UcfXcoQm4dik21ynxJWax9y3YwjMkqu8RS/m2u77LLLCoaQEWtEANyzuPHGG0eHHnpouad5B6rNbP4SDhbdpK7JcVdt/HMbnVTfN3FdgLRNePjhh4+OPfbYXcDAwn7zm99ctKNNsM8+++z6HMYDfpvUZ8YPN+2b4hbHgm7yu/l/TcqM5I2ew1C0kasYL2eS227dk9zmIUgPxBve8IZSv8ziM9UyAO5vt99+e+mYA5IMkJD/e81rXlMsK4YLAB+SIgeTwk3h5Tg/vW+R+7H5/ZNqtpuysxnGDC0jKCXWKcNtUrBxUuNS/q+rev6Znpovf/KTn7xrsE6zC9H/EewXv/jF/2dgvv/bf//9y/s1CA1pfSOMtiYac3wWdI4bm3ROYk7gmeXU6C4Ir84777ziwWgsaPKU5fSjP/qjZW3Nsb/eA3zOP//8wu/NDmTtk1jXBx10UPECmuN9AeCZZ55ZwlIsr6brbpbN2WefXf7P/Q3Jc3IgtMfKyhFjIetPe/n4XA//R0Z8Zmi5Rvj0ghe8oPCRx9Ksu9bJqVmLXJP9EJnQ2ZqOwz6OTdyMyCjv3fPPQRUha2GVs1Stufl/iDz9yI/8SHlemVI55LpZ/GeddVaRBetrygLvXkMePGnuOx6mvQBjMlBuXpqpjDBJzMz/ILzRQumEmpTEbCY/o6GG1J6+O+chElhAEUEHFuYfcN2EKGzGxLqtN4O2nvCEJ5TNO/S6kzDZLImJ17mfZhIzJ38sMok5KUmVJOa4tR3ZmqUzbV4S4+ZpkV8ykFPDkbAPSzvzdpo5HOE18oPn8j59z1oZp8hBmk/Gk5jWlf9bpiQmGfD98cZmSWIGS4ZctzUH/8Yt6o2SmOF3l0nMtaoDT8NMwj7NZGSzmWa8s3Cz/6u0vSjygcafdZv/W4RbX2n9aK0AvFKlSpW2E1UzoVKlSpVWlP4fLRAgTs6caB4AAAAASUVORK5CYII=" alt="" />
每一条图上的路径用一个字符串表示,字符串中的每一个字符表示一个移动。字符仅包含如下五种:
- 1:表示移动到当前节点的左儿子
- 2:表示移动到当前节点的右儿子
- U:表示移动到当前节点的父亲节点
- L:表示移动到当前节点同层的左边的节点(保证当前节点在这一层中不是最左边的节点)
- R:表示移动到当前节点同层的右边的节点(保证当前节点在这一层中不是最右边的节点)
用一条路径来表示这条路径的终点,例如路径:221LU 就表示上图中的节点 A 。
给出两条路径,你的任务是求出着两条路径的终点之间的最短路。
输入格式
输入两行,每行一个字符串,分别表示两条路径。
输出格式
输出一行一个整数,表示能得到的串的总数。
样例数据 1
输入
221LU
12L2
输出
3
备注
【数据规模与约定】
用 D 表示所有经过的节点中,深度最大的节点的深度;S 表示输入字符串的最大长度。对于 10% 的数据,D≤10。对于 30% 的数据,D≤50。
对于 50% 的数据,D≤1000。
对于 70% 的数据,D≤20000。
对于 100% 的数据,D≤100000;S≤100000。
【题目分析】
难题一:找到两个点的终点。
因为路径可能很长,十进制数很容易炸,所以考虑将树的编号用二进制表示:
向左儿子走二进制数后面加$0$, 右儿子加$1$, 向父亲走删除二进制数最后的数字。这些都好实现, 不过在向左时我们需要给二进制数加$1$(右减$1$),此时便涉及到进位。
【线段树维护二进制数】
将二进制数建成一颗线段树,这样在加$1$时,我们只需找到第一个$0$将它修改为$1$, 并把此前的$1$全部修改为$0$即可(减$1$反之)
查找第一个$x(0 / 1)$时,我们先在右儿子中查找(保证最前),若未找到则再在左儿子中找。
将最后的二进制数导出,我们就知道此时点到根的路径了(不走横向边)。
难题2:怎样才是最短路?
画图观察即可知,最短路径要求两点至少得在同一深度,则先将深度较大的点上移至同一深度,$ans += |dep_{i} - dep_{j}|$
这时再加上他们中间的距离即可。但是如果再同时往上跳,他们间的距离可能更小T_T,这时就需要从根节点开始,分别沿着从难题一中导出的路径向下找出剩余距离的最短值。
可以发现,若当前层距离为$dis$,则下一层的距离会根据两点走的方向发生变化:
$or$
$dis = dis × 2$
$dis = dis × 2 - 1$
$dis = dis × 2 + 1$
最后$ans += min\{dis + 2 × (dep - i)\} (其中dep为终点深度较小的深度, i为跳至的深度)$
具体可以看代码。
【code】
#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<cmath>
#include<algorithm>
#include<vector>
using namespace std; const int D = , S = ; char s[S], t[S];
int ls, lt, ans, ret;
struct node{
int len, sum, tag;
node():len(), sum(), tag(){}
};
namespace SegTree{
node tr[D * ];
inline void upt(int k){
int lc = k << , rc = k << | ;
tr[k].sum = tr[lc].sum + tr[rc].sum;
}
inline void cover(int k, int v){
tr[k].sum = (v - ) * tr[k].len;
tr[k].tag = v;
}
inline void pushDown(int k){
int lc = k << , rc = k << | ;
if(tr[k].tag){
cover(lc, tr[k].tag);
cover(rc, tr[k].tag);
tr[k].sum = (tr[k].tag - ) * tr[k].len;
tr[k].tag = ;
}
}
inline void build(int k, int l, int r){
tr[k].len = r - l + ;
if(l == r) return;
int mid = l + r >> , lc = k << , rc = k << | ;
build(lc, l, mid);
build(rc, mid + , r);
upt(k);
}
inline void modify(int k, int l, int r, int x, int y, int v){
if(x <= l && r <= y){
cover(k, v);
return;
}
pushDown(k);
int mid = l + r >> , lc = k << , rc = k << | ;
if(x <= mid) modify(lc, l, mid, x, y, v);
if(y > mid) modify(rc, mid + , r, x, y, v);
upt(k);
}
inline int query_1(int k, int l, int r, int pos){
if(pos < l) return ;
if(tr[k].sum == ) return ;
if(l == r) return tr[k].sum == ? l : ;
int mid = l + r >> , lc = k << , rc = k << | ;
pushDown(k);
int ret = ;
ret = query_1(rc, mid + , r, pos);
if(!ret) ret = query_1(lc, l, mid, pos);
return ret;
}
inline int query_0(int k, int l, int r,int pos){
if(pos < l) return ;
if(tr[k].sum == tr[k].len) return ;
if(l == r) return tr[k].sum == ? l : ;
pushDown(k);
int ret = ;
int mid = l + r >> , lc = k << , rc = k << | ;
ret = query_0(rc, mid + , r, pos);
if(!ret) ret = query_0(lc, l, mid, pos);
return ret;
}
inline void treeExport(int k, int l, int r, char *p){
if(l == r){
p[l] = tr[k].sum + '';
// if(l == 1) cout<<"!!!!!!!"<<p[l]<<endl;
return;
}
pushDown(k);
int mid = l + r >> , lc = k << , rc = k << | ;
treeExport(lc, l, mid, p);
treeExport(rc, mid + , r, p);
}
}using namespace SegTree; inline void loadIn(char *f, int &q){
static char p[S];
scanf("%s", p + );
int maxx = strlen(p + );
q = ;
memset(tr, , sizeof tr);
build(, , maxx);
for(int i = ; i <= maxx; i++){
switch(p[i]){
case '':{
q++;
modify(, , maxx, q, q, );
}
break;
case '':{
q++;
modify(, , maxx, q, q, );
}
break;
case 'U':{
q--;
}
break;
case 'R':{
int first_0 = query_0(, , maxx, q);
modify(, , maxx, first_0, first_0, );
modify(, , maxx, first_0 + , q, );
}
break;
case 'L':{
int first_1 = query_1(, , maxx, q);
modify(, , maxx, first_1, first_1, );
modify(, , maxx, first_1 + , q, );
}
break;
default:break;
}
}
treeExport(, , maxx, f);
} inline int Re(){
int i = , f = ; char ch = getchar();
for(; (ch < '' || ch > '') && ch != '-'; ch = getchar());
if(ch == '-') ch = getchar(), f = -;
for(; ch >= '' && ch <= ''; ch = getchar())
i = (i << ) + (i << ) + (ch - '');
return i * f;
} inline void Wr(int x){
if(x < ) putchar('-'), x = -x;
if(x > ) Wr(x / );
putchar(x % + '');
} int main(){
loadIn(s, ls), loadIn(t, lt);
ans = abs(ls - lt);
int n = min(ls, lt), dis = ;
ret = * n;
for(int i = ; i <= n; i++){
if(s[i] == t[i]) dis = dis * ;
else if(s[i] == '' && t[i] == '') dis = * dis + ;
else if(s[i] == '' && t[i] == ''){
dis = * dis - ;
if(dis < ) dis = -dis, swap(s, t);
}
if(dis > ret) break;
ret = min(ret, dis + * (n - i));
}
// cout<<s+1<<" "<<t + 1<<endl;
// Wr(ans), putchar(' ');
Wr(ans + ret), putchar('\n');
return ;
}
【NOIP模拟】board(线段树维护二进制,树序号化为二进制)的更多相关文章
- NOIP模拟测试5「星际旅行·砍树·超级树」
星际旅行 0分 瞬间爆炸. 考试的时候觉得这个题怎么这么难, 打个dp,可以被儿子贡献,可以被父亲贡献,还有自环,叶子节点连边可以贡献,非叶子也可以贡献,自环可以跑一回,自环可以跑两回, 关键是同一子 ...
- 【noip模拟赛7】足球比赛 树
描述 在2009的中国城市足球比赛中,在2^N支队中,有一些队在开赛前宣布了退出比赛.比赛采取的是淘汰赛.比如有4支队伍参加,那么1队和2队比赛,3队和4队赛,然后1队和2队的胜者与3队和4队的胜者争 ...
- 【NOIP模拟赛】飞(fly) 数论+树状数组
树状数组一个被发明以来广为流行的数据结构,基于数组,核心是lowerbit()操作.他向前lowerbit()操作为前缀,向后lowerbit()操作为上辖,我们运用树状数组都是使一个由O(1)变为O ...
- HDU4117 GRE WORDS(AC自动机+线段树维护fail树的dfs序)
Recently George is preparing for the Graduate Record Examinations (GRE for short). Obviously the mos ...
- 【NOIP模拟】jzoj5233概率博弈(树规)
Description 小A和小B在玩游戏.这个游戏是这样的: 有一棵
- 【2019.7.15 NOIP模拟赛 T2】与非树(nand)(树形DP)
树形\(DP\) 实际上,这道题应该不是很难. 我们设\(f_{x,i,j}\)表示在以\(x\)为根的子树内,原本应输出\(i\),结果输出了\(j\)的情况数. 转移时,为了方便,我们先考虑与,再 ...
- 【BZOJ 2957】楼房重建&&Codechef COT5 Count on a Treap&&【NOIP模拟赛】Weed 线段树的分治维护
线段树是一种作用于静态区间上的数据结构,可以高效查询连续区间和单点,类似于一种静态的分治.他最迷人的地方在于“lazy标记”,对于lazy标记一般随我们从父区间进入子区间而下传,最终给到叶子节点,但还 ...
- 【8.26校内测试】【重构树求直径】【BFS模拟】【线段树维护DP】
题目性质比较显然,相同颜色联通块可以合并成一个点,重新建树后,发现相邻两个点的颜色一定是不一样的. 然后发现,对于一条链来说,每次把一个点反色,实际上使点数少了2个.如下图 而如果一条链上面有分支,也 ...
- 2019牛客暑期多校训练营(第八场)E:Explorer(LCT裸题 也可用线段树模拟并查集维护连通性)
题意:给定N,M,然后给出M组信息(u,v,l,r),表示u到v有[l,r]范围的通行证有效.问有多少种通行证可以使得1和N连通. 思路:和bzoj魔法森林有点像,LCT维护最小生成树. 开始和队友 ...
随机推荐
- SQL万能语句-经典操作
一.基础 1.说明:创建数据库CREATE DATABASE database-name 2.说明:删除数据库drop database dbname3.说明:备份sql server--- 创建 备 ...
- require 增量更新与版本管理
使用require.js 加载JS文件时,当JS文件有更新,可以通过更改全局版本号( urlArgs : 'v=1'),告诉浏览器加载新的文件. 但该方法虽然使用方便,但美中不足的是有些不需要更新的文 ...
- string services
string通用字符串操作: re,正则表达式 difflib,比较序列 stringIO:以文件的方式来读和写字符串 CstringIO:更快捷的stringIO版本 textwrap:文本包装和填 ...
- JMS 之 Active MQ 消息存储
一.消息的存储方式 ActiveMQ支持JMS规范中的持久化消息与非持久化消息 持久化消息通常用于不管是否消费者在线,它们都会保证消息会被消费者消费.当消息被确认消费后,会从存储中删除 非持久化消息通 ...
- 在64位Ubuntu系统上安装32位程序包
在64位Ubuntu系统上安装32位的程序包 $sudo apt-get install package_name:i386 例如: $sudo apt-get install openjdk-7-j ...
- [0] MVC&MVP&MVVM差异点
MVC: 用户的请求首先会到达Controller,由Controller从Model获取数据,选择合适的View,把处理结果呈现到View上: MVP: 用户的请求首先会到达View,View传递请 ...
- Jquery DataTables 使用AJAX POST的问题
最近项目在用需要用表格,听说DataTables很好很强大,于是用了一下. Get请求没什么问题,问题处在POST请求上 Jquery原生的POST请求没有问题,代码如下 $.ajax({ url ...
- websocket多线程问题
title: websocket多线程问题 date: 2017-06-28 11:21:24 categories: websocket tags: [websocket] --- 开发框架 spr ...
- perl 祖先类UNIVERSAL
在perl 面向对象编程里,同其它语言一样存在祖先类.所有类默认继承UNIVERSAL的属性和方法. UNIVERSAL类有几个常用方法can,isa. can可以检查一个对象是否有相应的方法,这个 ...
- 2.vue 安装教程
安装node.js 从node.js官网下载并安装node,安装过程很简单,一路"下一步"就可以了(傻瓜式安装). 安装完成之后,打开命令行工具,输入 node -v,如下图,如果 ...