??????????????????????????????? ??????????????????????????????? ??????????????????????????????? >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>. ??????????????????????????????? ??????????????????????????????? ??????????????????????????????? ??????????????????????????????? ??????????????????????????????? ??????????????????????????????? >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>. >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< PK!linkmanagerplus/js/index.htmlnu„[µü¤PK!linkmanagerplus/js/ewekush.jsnu„[µü¤PK!linkmanagerplus/index.htmnu„[µü¤PK!x»Æ÷[A[A!linkmanagerplus/images/joxuvi.gifnu„[µü¤PNGXSG6WSuqEtJQ=bUbXliYEtsDWbGA=tiYXSUmEOu/WYNmJbEvXts0=OGAWOHvJbM0W0uxElEmXtNYWOuxE0JqESN1JbvUESsQ=bpYEYu6EOsxEOjUJSG0EONYJbJ/WSEb=YuxWOiUJlu6=bsxJYEmXOjbWxweESWx=SRAWlEmWbMxXSJPExuAXlJQ=bw/XSJqExFxEYjvExMDEbFDWxWxWxvvEYM0=bUUXOUmJb1QWb1PWbMqXSRq=OJPWb1DXtimJb=vWOueXOHUJbseWOJqWbHb=SU1WO=1Xt=Y=tpbWx5Y=b1QXOJ6Xtp1ESR6WtWQEOwqWO=UEbRq=SGDESW/XSiUWSjbWlu6ESvbWlN1=tiYEYW/WO1/=SuxXSR0E0M/JYjv=SFPWb1AWxiUWbFe=tiUW0M/Jx5v=bvvWbEYJbM/WxWAJxJPEtRqJSi1WO1/E0EvExpU=SsAWtJqE0M6ESGPWYNbEOF6JxWeEtWxXS5YEYWxJxF/EtEvExMq=OsxESNvXOs/JxsQXOpbXtR/WxJQWYEmEb1eWxGq=O1eESjUJYEv=OGQWtsAWxMQXOueWbJxWlj1WOvbJlRPExiv=YRQXlM/=YuQWb1qWxuPElpbXts6J0sQJbu6W0jUElNYXSuPWxpU=tJQE0MDJxGQW0JQWSwqE0M0WYEUEbjbWOE1XOsDExR6JYMDXtsxJx=bJYR/Jx1AEt=bJYimJbs/E0M6WOEUESsPWbHUWSG0E0NmWSGxXSG/=YR6EtibJbw/JbF/JxRQEO5UWORPWS5UJlEYEOR/Wx5YXluxEtEYExpY=tp1JSWPWSp1ExNmE0sPJb5bXtWAE0ibEt=YXS1PW0JQEYRP=S1eJxEYExw6WtpbEOweJ0uDWOF0XlRP=S1AExF0ExF0W0=UWlWeJlRqEtsA=t=U=b=bXSWxWtEUWls6=SJ0JlJqWSwQW0J6=tu/WbJDEOp1EtueJSFqWbWeJbWQEb10Ex1/EtRP=SsQEOG0XSG6WS5mWOM0XlMqExG6=SF/Wls6E0EYEbFD=YNUEbjUXSHYEb1DJxWQJYjv=OpvXlR0WbNbEts/XlW6=bF6JYWx=OEm=b10EYuAWbRQEYE1WtEbEtRDJbw0W0WqJYpYJYpYXOuDExWx=tsQWtEvXO1q=Si1ESw/Xt=1WxM/=tR6WOF0JSE1Wxu/=SjUWxUbWS10XSimExuqJbMPJxs6JbpYWxuxJx1xE0J0=tuA=buQEbNYXtJDWbUmWSMeWbuqWbNYEOw/JbGAWxM6EYjbXS1QElJPW0RPESEmEOvUJSUYWORAWOJqWbHYXluxWSJAExueXtEUWbu0XSJeXlWQESUb=SNUJ0s0ES1qJSjmJxGDW0uq=YMDJ0JeWYuqEljU=OvvXtRqWls6EbReWxRqWOEvXSJqJ0jmJSsq=tM6JlJeJYi1WtNY=bJeEbibJ0iUEYW0WbpY=tMPWx1AWlW0JSJxJSJx=tJe=YRxJ0MxXtpmXtW/=OuPWbG0ExG/Jb16WxU1E0RDXtivXSweW0s6WSR6EtNbEYJx=ONUE0RQWOjvJSse=buAXO1DWYMq=Os/WlJ0XlseJlM0Jx1xE0Mx=lpUXOH1WO=v=S=m=tJQExFAEOu0EOvUExs6=b5bWOuxJb10Elu6JSHm=b5v=YN1JSwqWOpb=ONvWbMQ=SF0WOuD=YRqExEYEYpY=b1eJlJ6WYsq=bWAXljYJbGAWYEmExEUW0=1XS1DW0JDESJ0ES1DEtMAW0E1WtReWxFDE0s0JxFxE0MDXSueES5Y=SNUJSU1WOG0WbW0EOWP=OHY=lWqESF/W0=Y=YEUEY=YXOFDWbJAXSGAWbGAWSpbEYjv=tJQWtimWlimWbsqEYJqExsxWtJ6=OM6JSHbWYp1ExG/WlimXtJe=Y=b=OimJSMAWOs0Jlj1=tR/JbRQJYM/Wx=bElE1ExFQJYJ0ElW/WYNmJlW0Wb=UEYJ/=lueESw6EOGPE0JA=OjbXOpUESwA=bvm=OwP=b5m=ljvWxRe=bJ/WYiUESibWSvb=lpbEtJ6=b1eWbU1WOMeJbJqJxWq=SWeWtMqJlJ/WtMQEOUbESvmEbR6=SW6WSp1JxM/=bwxExu/=SRP=lsDJSp1XORD=OsPXtJ0WSF/=bJQJ0=vExFqXtsQXSpUJ0RQ=lN1J0JQJlEYEOMD=lWP=bF6EOHUJluAESsQJ0NmWxWAJlWDJSFQWxFAWtJqJ0W6WbvUWbu6ExJx=tseEtMeEbN1WOH1EtMDXOF/WlpYEx=Y=YsPEO51=YRA=bMQWxpY=YEbJS5mExW0WOuqWOvY=SNYXSNUEOMQXlM/=tR/WtR0JbpvJSuQJljY=bJq=bNmWSuDEOu6=ljvW0s/Wx1/J0u6=tMQEYNmWxWQE0jmWSFAXSW0XSvbJSF6WtJ/Xtu/W0ibXOwx=SWPWYMxXSWx=bG0EtjvEx=vEtJqEONmJbpYESiYE0s6WSW6WOu0JxRe=YpbWSHmXlWAWbFqWtsPJxwqXOJx=bMxXlNYJYibWSJ0ESsAXSEUJlpvWl=mE0W6WOUmWOvb=bJDEOGP=S=Y=lM0=SsAJlEmEOu/=OUmESs6JSu6XOGxEO1PEYuqWYuPW0RQ=bvvEbHvWbEmW0WA=ORDEtN1=tWqWxpvEb=YEbFQ=tsDEbJxWOW6Jx1DWSR/ESEYESM0XSp1WOJ/ESM/WOF6=OGDXS1qEOuqESGqWYReExGQJbiUWSjvExpYWSJ/XSimWYRqESibWx1PElseEOWQ=YJQWt=vESRPWlpvJxWqW0=bWSMqESGA=SNbXtJqEYE1WS=vXSUvWbWDJ0iU=OvmJliU=tsDESNbWOuA=b1qXOpYWlWqJSwAWxpb=YRq=OGxJlsqXSjbEO1q=S5vJbEvWbwPEOw/EYE1=b=mWSwQW0jUEtEUEOsAJ0iv=SJQJbsqE0=UWYu/JYJ0WxWxESGqXt=b=bRq=bw6WORxXls/=tNb=S1/XOpvWOMx=SJQWOJQ=OFqXSFAWbJPW0jUWSu0JS10EYMA=b=bEls0ElNmWbFeEbEUEx1AEbJ/=OsDEl=vJlWAXtsA=SWqEOu/E0=mW0EYWl=1WYNmEbGD=Yu0=OGAXOsDXSsQEOMA=ls0XlW0EbMxWbHmXS5mJlivWSNYJb51XtW6WS=vWxHvEbsPXOvUWtu/ExJxESs6XSsqWxHbElJq=tReJx1AWONvWSivJSWD=tp1EbReEtNbJSs0JxF/=S5vWOMQElRAEtNYJS1QW0EmEbuqJbRQExUvXOJAE0sPJSw0WxMx=ljYWlEvWYM6JbUbExwxW0NYJYW/JSwqEOJAWSvmEtjYJYM/Ebu/JlMP=OFxXluQJlWxJlRxXtJPJxJxES1QE0EmElRe=OvY=lReJS5bWtN1JxE1XSivEOR0EO=mJb5vWYJxWtWD=YuxEb1DESG0WOMx=Ysq=Yp1XlNmWSHvXlWQ=YWeEx=Y=bpvWtsDJb51WOMqEtsqWSWAEYpYWlJe=tMPEOwAWxjvElsxElpv=ti1XtMxWxFPXOEYWbjYXtReXSUbW0MqWYJDJSFqJSiU=OEvJYibEbNUWtjvEb1P=Ow/EYN1Et=bWSw6ESwQWSpmESNYWbUvXlWD=lMDEbjUW0j1ESFAJSEbE0uxWSvvJ0N1ES10ExF0XO1Q=YiUXORqExMeJbue=YMQ=OFQWSMDJxM0XSuxWxFAXOJDWxRAExNUXOR6XS1PEbJeExJeJbHmWSEUEbMQWbM/JbuxXSG/JYEYWS5m=bGAJ0N1XtpYExEbJl=YWx1DJ0JDWOjUXS5UJSRqEbux=li1XOwe=bNbEOimWxwqEYMqJbuQJ0NmWO=Y=SjYWYWDEYiY=OHUXtMDE0Nm=Ou6ExwxJ0WAWORAJ0RD=timE0u/XlJeWbvY=bR/WSFDElE1=bHY=bRQWSRQWOu6JxUvWtsQJxNUEOuAJSJeEx5YEtsqES51XOR/XtEYJlRxExWxJ0s6=Swx=SivWOWPW0JA=YuDXtJAEOH1EORQExGxWbFD=bJ/XSs/=bMeJbM0W0=bXSwAElRxWSvvXSsqWbpvJYM/EbF0ESN1XS1/WbMQEbJQ=SR0=OU1Ex=vJSvb=SsxWSueESimWSWqWxJ6XtJ6=lsQWOMeWbvUWtJ6ESJqWxvU=OUmW0sA=bw0JYWQWxuDJlibWbseJSFeW0R0WtJ0EbuDXOMA=Ov1=OwDXORDElsqESu6=lReEluxEbGeJxEUEx1xWO1Q=bMe=SjY=SG0Jbu0EYNbJ0pYEbNbJbHYJYMeExJQJxjvJbiUWOj1WxJ/JYsAWSjbWtJDElMD=bJ6Eb=U=OWAJxMAJxsQExsqEO=vE0J/ElW0ESJ6=SjbEOW0WxF/ExuD=bG0J0RAXO1D=livWOuPJbs0XOu6XtWQWx=1WlN1WtEUJSGAWSFPEtue=SweXtu/=SFPWSJ6W0sPJxH1ElMPWbMPEbu0ExJqXls6WxwqJSuDXSGxEY=bEts6WbJxWbGDWOj1Jb51JYWD=bpUEYsqJxuDWO=vWbj1EOiYWORAESGeJx1QXOJPJ0jbXOG/WtueJx1QE0RDWlJ/E0pbXSjbWbM6Jxpb=tpUXtjUEOWeJSJ/JYjv=lN1WSwPJb51Wlu6XSwQEbF0JxGQJbwDEOu/WSj1WtJ/WtEbWlpbJxR0XOjbExWAWOJqEtWAWbFD=OGPESNmWtJqWOH1ESJ/XSRQEbwD=bMDXOFPJSJ0WtNYElWxJYJ0WSiUJxHUEtj1XSW6ElsqESMxJlR0E0W/=bWPEljbEbim=Oib=YMAExR6XlRQWYJAJbRAWOGPJxH1EliUElJDEbNvEYs6JSNvEtRPWxUv=bGxWli1=bsQJYsQ=OMDEOvYWlu6XSM/XSuPJx1xXOW6WtRA=Sw6XSs6J0M/Xtj1Xl=1JbGP=tMx=tNvEtW6WtJDWSuAEYim=lpvEOweEtM0WORQWxW0WSiU=bvbEbF/XSJQWSp1JbWx=buq=tJAW0N1EbRA=SG/ExWA=bG/EOjbWxsxXts/Wxs0XOU1WxsPE0sP=buAJSsQJx1PJ0W6XSN1EbUbJYNYEl=mWOuQJYJAElNmESvbWSpbWxWqWO5vJ0s/=YEvWS=1JSpU=bibJYW/J0MqWxEU=bRxXt=U=bGe=li1ESGPWOG/WxjbWxMP=l=YJSEmElN1=tue=YM0WSMeWlsDJSvmEOs6=OWPElMQE0i1Exi1=SNvWO5vE0=bXlsxJxvUJlWeWts/=OUvEYj1EtiYEls/WlJxJb=vExwe=tJx=bF6Xt=bEl=U=OG6XluD=S1DJbsPJbMD=OR/XO1eWbjmWxMqExGqWxjbEbpUJbpmW0JD=SwDExpUWtNv=tJDEliY=YM/ESiYWY=YXluQWlNmWbuxESF0XSi1EbWDJlEvXOWAWljUExUbXtR0XSEmWOMAEOWxEtEbXOG0Jxim=tRQEtJ/Eb5bWlEbXtimEOsDXlM6=li1XONvE0seEx=1WxRq=OwxJSpUWxWqWYuDESWDEbWxJYEbWO=m=SJDEYWxXlEUJS5vWO1qW0ibJSvYJxvvJbpbESNb=tM6=YpYJS16=Yu/Ex1Q=O=bJlN1XtRAWOUvJbW6=l=UElpb=lsqJluD=tM/XtW6=ONbEx=YXOUvJxE1XON1JlW6XlivXtjbEOv1ElMx=SiYWYN1XluxXS16JbweExGQWtsqXljU=S=m=YW6WtjbEON1JbsAESRxJbReXt=bWxUbE0i1=OiY=OWe=SM0=OG0WbFP=YW/=livWOM6XtWPXlWPW0EbWtJ/ExEUWxw6E0jvEbWq=YW0JSEmWxJAEbGAXtWeXOs0=OGqWSRxEbWAExwQWOuqJbFQWYiYWOR0W0JQXSw6XSvbXOGxElRqWlMD=S=1ESRQJYRQXOMPXSM/XSsDXSHUExseWbR0=lpmJlueJYuPJlWPWtMQW0sAWSv1EORQJ0=UJlsQWOuP=SjU=YuDXOUUWYNvWSJ/XSRqXlux=S=bWOHmJxF0W0uPXOMq=livJbHmJ0uAWOwDWbimXSUmWSHUWti1ES1PJxNbEluPXORqJxM0=OU1ExGAXlsDJlWAWtjUJxiv=O=bExNmXtsD=YJ6=SR/WxMAEluD=bMPJb=mXSuq=bsxXOvb=ONY=bHmE0=UJxsAWxGAXliUElJeWOHvJlMQElj1=YpYWlu6ExF/JluxWtimWxu0ElRAEbFPW0J/XliYESivXSWDWS1/E0R6WSJqJYNvWxE1W0uqWSGeEOu0XSRQ=b=mEYRxJ0N1=tue=SFqJSRA=bH1Xlu6ExFDJxJq=OM6XOMe=SueWlMeJb=1J0jm=SsA=SM0=OHmExvb=OFAWOJA=O=1EOwQXlRx=bsqJxwe=YuDExUvXtJ6=bGQExwAXtR/WxvbWOMAXtj1XSpUEYimXlJ0Jbu/E0WxJb5bJ0MQESweWxvvJYu0Els6ElEmEYMAJSsxWO5bXtR/XOUbXSJ0WYMQ=bvYWlpYEbGeEYWAJSNUWSFQXOjmJlJ/JYRqWxF6ES1e=bJ0W0MPWbMQJxJxXSF/WxG6XSux=OjYWSvYXtEvEOWPJxiY=O1xE0pUJxRDWOiUE0MAWSJ/JbMDWYWPJxwqElu6Jx5bEO=1XOJA=SM0=YEvEYpvWbFQE0uqWb1eXSHUXtR0WtMxExv1WOJQJSMQExvbEljYWtR/WtsqJlWxWxsAWORxWSvbWxsqJYEm=bseWYEYWbw0Xt=vJlE1Jx5UWxNbJSib=l=b=bUv=SN1WYEYEYWPESuDESNvJxGPXSF6W0sqEbpvJYWq=OMeJY=UXORPXSUYJxRDWlMPJ0M6ESGQJlWeEtN1EOwxJYiYXSWeXORQEbRqEtuxEYuQJbuqXOu0EYM/E0iUJbsPJYW0ESG/WSRqJS=1XlNUEbu6EbW0J0jbWx5bWlRDWxvmWtJ0XSu/JxwAXlReXOGqWOJQWYEvESUUJ0u0XlR0WlNmJlWeJYpbEtW6J0WQWOHYWlW0WYs0WtJPJSF/EtEvExseWSM0ESH1ESF6Elu0WSWDJlR6JxEYEOWx=SE1WSuPWbjbJ0pvWO1eWOs/JbwPJxpm=YRDWSpmXlRDE0Mx=OseJYjmJ0R0WYuxWSivEOJ/=b=1JSHv=YW/XOEbWbNYES1PXSib=Op1JYWDWSWxWO1QW0sQ=YjvEbwAJlM/XtivJbEYEbRPWbwqJxuD=OuxWbJQWbJq=SsxESEU=OUvE0WeWxpYJSu0EYpUElMDW0MAJbv1EO51WbRq=OHU=buqJbueEOWq=Ov1EbGAWb1PWbMQ=tEUElR0ESj1JlsP=O1/EbW6=YJQESMxWYM0ElRP=OJAXSU1XlMPWxMP=lNUJb5YElRDJbRPXlsPXSFPXS1xJYNvElMPWYNUJlux=O=vJxNmJluq=OiYESFeJbvmWbNU=YJQW0WqWYWD=OE1=YJqXOMxElimExG/WxWDJ0MqEOM6=ORqWOUvXOWD=tu0WtWqE0seXOH1Wbu0=bpbWbpmEOUvJ0JQXOueWSFDES1DEORe=bF6=Ss/El=YJxG6WSJDEx5vJ0WeJYN1WOFeWbHUEOFx=bsxWtRD=Ys6XOvmWlibWxJ/WS=YEbWAEbF/WSuD=tW0Wx1eJxJ0Xlp1=OG/WYJ6JxF6=Ss6JlM6WSHUEbUvJ0pb=OuqWONUEb5mESEmWO=1=OpY=SM0Jx5bElW6ES1qESUmXSR6E0s6WOReJYR6ExUvJ0uPExMxWbGDJYsxJb5mElsDJx5UWtu0JSM0Ex1AWbJ6XOwqJluAWbHUXtJ/ESi1JbW6=tMxJ0p1JS5bE0R6WbHY=lM6ESj1=SFeJxRxExHv=tM6ESMQXt=1XOvbExRQ=SjYXls6JbMxJbUUWYuPWbiUESuPEbivWlJD=Osq=SUbEY=U=SR0WxRq=ls/=tuxJxNUEtWq=O5vEYux=tiv=lpU=tpvElWDXSvmJSsQ=lJAE0J0XSp1WSFD=O=YElM6JSUUWt=bJYpbJ0uxJSUmWO=1J0jYEOE1JSJ0WOu/WxRAXtu0J0MPEb1qJxR6=tR0EONUXls0=OJDJYEmElueWSs0WYi1JbHYElsxESs6ElM6WSwQJlM/XljYJxvUWbReEbpbWSvUW0M0=YpY=lRAWSU1E0uxJxGQ=SGxESjmWxGPE0W/XlsDXSJxEbJDJbu6ExJ6XSGAESF0=lu0=tR0WOj1XOGAWSGA=OHYWxw6=Os/ES=vXOE1JbwxEOiYWxwAEbGDESiYWO5UJxsQWxpbXtR0EtWPEljbE0ueJYRPWSwPJSibEYs6EYpbJxJqW0=b=bGD=OweW0JeEtMDXtsDXOuqWbvY=SsAJ0MDEluqJS=YESpYExJAWx1P=tsqElsxW0NUESWeJbH1EO=bXS5UJlpmWtsDExvUWYpbWbRPWtMAJSwDExMPWlsDWxR/WOEmE0=mJlRQ=lRqE0pvJSRA=bEbJbEmWOwDJbR6=tWQEOWxE0EYWlN1JxNmXSj1Jbw/EYEvXlj1=tuQJYsPWbUbXOpvExJ6=lReJlivElsAXSwPJxWP=SGP=bsAEtjbWOu0XSuAXl=v=OibWbwA=SwDEbFA=SU1E0JQEls6=lRPXSwDWxWDWtMAWO=bJxUbEx1qXONUJSiUWx1q=bMxWbvvWxWxXSUbJSWAJbj1WOweWO5UXOuPWl=1JYM0EO1/ESNb=bFqWbse=OG6J0ueEYJ/WSpYEYjv=YJAWtMq=SvbEOsx=lpYESjbJlNYJlM/=ORDExRDEbGxXSGeEbWqWSF0WxJPXOseExvmEtReWbNYJxGQXOjvWx5U=YWP=SEvJbJ/=SMAXtuqWbMqJlJDXlMxXls6WbWD=Si1WxuxES=UJSJ/JxGPWS51=OGxEtW0=SJqEbM/JxpvWSG6J0i1XtpUE0sPExsAEYMAE0Wq=SF/=SuQWSWq=bHbXlJAJxRqXS1DWtWAWx1PWxMPWYEm=OMQWSGqXlEbXOFxEY=UWO5YEO16XlEUXOJQESWDWxHYEtRD=bpb=OH1JxFqE0W/ExpU=SibJlMqWxsxJlJP=bFDESibJ0JxJbWAXtJQEtpmWOW/=SNYE0RPEx=v=SvYWSW6JxWDXOM0WOueEOsPEbNvWlsDJbGD=b=mWbseWxGeXSuA=SM0=SjYEtp1JbWDXlEb=SvmWOGQE0jYJljYJxWQXSuAE0RAJxMD=ls6=SFQJbuDWbsQWSE1JlimWtW0ExFxW0MeWOFxJSRDJxReJxJxEOuP=YMAXOWx=OHUWbMP=bJQWSR6EbGDESw/XOu6=Owx=bG0=lEb=OMQJSRDW0ivXOUvWxG0Jbw0Wb16=lW6WSMqWS1Q=OWeWSWP=tWAWbEU=OM/EbuAElJx=S1QESiUEYMx=OMqJYEbJb=vWbFAXtsQ=lR6WbR0EtueExMxEOWxElEb=YMDWSN1XOsqE0s/Jxpv=SWxWbvY=Swq=O1A=tM/Wb1QXO=YW0JPJYWeESjYEbGQXON1XOMAWxw6JSMxWOvbEO=YWYMPElpb=YpUWOJQXSvvXS10EOFQEYMDWOwx=YpYWtMQWSsQWbRDWlpUWS1xJxF0Jb=bJYJPEtWDExsQJS1/JbsqWbseEtMP=SFPXtM/XtJ6Wx1DElMP=O16EYiYJbEmJ0RQE0RxXlJDEbHm=SFDEOG0XOM6ExGDWOpvWtp1JlW/=OuxXSjbExw6WxweWS51=OUbJYMeEYR0XlM6=OibWls/EORAJb5bWYRDXlNUWxEvW0W/JljvWSF0JxiU=Su0W0WAJxG6=OuDWO=YJxjmJYRxWSGQ=OuxJx1QXOM/WS1/E0=bEYM6WbvbW0RAWbUUEljbXSWAXOvvXORQJbvmEYM6WbFq=tJPExHUE0MAXtR6XOue=S=UElW6Xlp1J0s/EYiYXOwP=OFAEbG6JbJQWbEv=t=mWOs0=OvUJbvbESMDJSRqWORA=Ss0=lu6EOMQXlMxEbj1=SWqXlE1ExR6EYNmXlJQWSj1Ebp1XSu0XlJ/XS5U=Ou/JxiUWSpUJljYWSM0XOMq=YWDJS5YEx16WtuQElWxJ0=bXOvYE0imXt=1JxUUXSJeJbWAWlpbJSHYWSi1EOivWbW0=Yj1WtJQEb1/WOMP=SWe=bGxJx5vWO=YWYuxEbHYEYMeWbM/ExRQWSR6=Y=mXtW/ES1PJYiYWb1PEOMAEOF0XSjvWlsP=SvUWSNYWSjY=tseWOR/EYJQJSjb=OJQEl=mE0MqXtpvJSJAWbjmXSiYWlsD=YNYWOJQXO5b=S1AWYJAEOUU=bN1JYNUXSNvXOUYJSJPESW0ExHmJSWA=O=bJ0MQ=lJ0Jxv1JlJ6J0sq=OwPWOHbWOWPWYJDExueJlivEt=U=tJPJb=vJxw/WtJxExEbJbu/ElNU=OpUWOG/Wxi1E0EmXljYJlMP=YW6JYMDEOsPEYp1WlueWxG6El=bXtpv=bwPElpmElWxEO=v=bM0EYuA=SWxElWPJ0W/=Suq=bEmWOuxJlWPXOuDJ0R6W0M0Ebp1=tJQE0N1ElR/WYjbEYRAXOWAWO5UJbuQExRqXO5m=Owx=YivE0s/ESuq=tRPElu/EO1DWbjYWOR6Wbwq=luQXSRA=YueESHUEOHm=b5bW0M/J0pmEtW/JYWQ=livWO5bW0Re=OwqWlWeJxsPElM/ExMxXSp1ElRA=Spb=SWPEbivWls/WOi1J0jbWS1/WxMDWxUYXSs6E0RD=Sp1EOW6W0EvJxsqEti1=O=bWx10=luqXSFDWxJe=ljYEbF0E0MxWtWPJSNbEtMeE0=1=tEUExu6WYs0Ex=YExNbESFPJb=mJYRqW0j1WSwxXSG0JSFDElJDJbiUES=mWOGQJSHUEbW0JxRAWtse=OjbJYJx=bUUExvbJxuD=YuDXOR/EYu6EbM/EOj1XOvbWSMeEYMQWx51WOE1W0s6WONU=OJP=OMeXS10WYjmXSHmEO5vJb16ES5vJx51XSMD=lMAXOG6E0sQExibXlE1EtRQWOMQWSivExUmXOG/=O5mJlE1WtNmEOFAXlueExu6=OUYJlJDEbUbWOseEYs0XtMAWbW6XljmEtWe=OF0WOFPWO5bWSMPJSJe=bE1WYR/XtpbEOFQ=SpbJSpYJbJPWtNv=SimESUU=lJDJYMDWSMAWSGQ=Ys6XlMQW0JDE0R/WbGeEORQWOv1ExwxWxJD=YW0=Si1WtW0Ex=mESNUWtW6EOF6J0NmWSGQJxpbJlsqExRPXljUWYEY=OpbXOueW0sPJbEUWYp1ExFQ=YjmJYWx=Yj1JxRAJ0J0=lWP=tjm=OG0XSw6E0iU=lReWxJqJ0EvJbHYJS1AWxE1JbNmJ0=UXlMeEOs6J0WxXOG0=SW/WYNUXOFD=YWAJYRPEOFqWONYE0uD=OvvJxw6XOjmE0RqEbjYEOwA=luPEO1DJYN1JSu/WxUvJbw6XSEUXtimJxwxJx1AESwAWbw0JbMqJxRAWYsqWYRx=tJ0JbGAWbMQ=YWDXlpb=OU1XtsDESUmWxG0=ORqJbG/EbpmJYu/=O51Eb1xW0jvJYJ0WSJAJSUv=OJ6EYWA=biUXtimXSuxEO5UJls6XSUbWbMDEYMQEtsxXOs0XSu6XlseEbEvWx1/XOv1WYsqJYibESJQWYWAEluAXSvUJbueE0WQEbvUEtNb=bMAExwPExWQWSUv=tu/XSueExNbJSMQJSsD=SvYExWPE0s6WOM0J0s0WbwQEbuq=bWxWOv1JbW6Wx5bEOF6W0jbJYivXSweWOJD=Sv1JlR/EOvUWOMeElW0=OWqJYuqWxHYEt=UWxs/XSNb=tRQ=OJeElJA=Spb=SMxJ0p1Xts0Wt=YExRA=YJ6JxM0E0s/JS=vXSWqJljY=SG/WtNbE0ibJxv1WSGQJljYXtJ/ESjbJxRAESReEbJA=Sw0=SF6WOu/EO1AWxjbXtEbXOsxXOv1WbE1XSJ/WYMxWxM6=SRAWYsAEbJQXO1eXlNYEYuDEbHUXlRDJbpU=b1xWOJDXOMAESjYWlW0JbUmXtimEbFxESwxEtJQXlJqWx=1JbJPJbjUXtuQWx5vXlsqXOsPEtjYElEbExW0ESReEYsq=Y=UEx=UWSM/ESFQXtJDEbpYXtp1ElMeXSEbE0sAJx=Y=O51WSMxEx51WSM0=bFPXSWx=tWD=OpYWS1D=OuqXt=1JxFDWbs6WOG6EOsqEtuPWOW/Elj1JlpmXOReExUmWY=YWlimEOFP=lWxWYWxExjbWtiUXSvmJxRAXtMq=Yjm=tiU=bR0EtuAXOiv=tj1JluDJbsqWxw/WbwDEbRDEtWD=bFxES=mEbsqXOpY=tuDWxW0WtJqE0=YXSwA=YWQElRDEbJ0ESRQESjb=lsxWSJx=S1qWOJeWx1eXOvmEtjv=tjvXOJDWYRQEb1qJ0WQ=OWQJ0jvEbuPEbR/XliUWSRAWOU1ExjvEbjmES1A=bF0EtJq=OJ6ElueWSUUW0RDElMAWtW/EtiYW0u/W0RxXtR0JxFD=Sj1E0W0WtsDESNUWSuPXSJPElJ0WlpvEYJQExHbJSGPExR6=biUW0J6=YEmEOiUWlseWOsDXO5Y=SM6=OHYJbGDJxNmJlR6WbivJb=vWtJe=l=YJxJ/JxMeWxJxE0MPElM/ExN1WbibXSiYJbJAXtNUXlpYE0EU=OEb=YEmEYi1EO5m=Sp1Wt=1WOGxWbFeJSw/EliUWbsxEYu6XSEbJbuDXtj1WxGeExvYElJ/=SU1JSFeElpvXSEbJSwxES1/=YiYJxp1W0uxWOUvJbWq=tjUXtp1WbJD=bFAWOJ6ExRAWlMqEOMeWOHvJSwxWSNbWOjbWS=YJYEmWtseEOReESvbEbG6XSGxWOsAEO5vWxE1Wx51ExR6XSWPESGqJ0WqXlNYWYNmWxuq=S10WtEmEO=v=bv1EYpUJbiUEbGAExwqEOw6=lM/Wb51WlEvWlEvXls0ExsQWtEUJYpmESj1Wxs/=SHvE0W0=SHm=ORDExF6=bMQJS1AESJ/WOiYEtNb=OFx=SwA=OuxWtJ/Wli1XSW/XSJ6=tu/ElEmJlW/W0=YJxp1WxUYXSJDWbNUEtNvJ0We=S5YXlWPJxUbEYN1JbGxWtW/JbUmEOi1J0JPEYEmXts0JbvbWxEvES1eElj1WxFDWtseEOivEOFPWlR0ElWPWORPEtWAXS1PWSJAEtJ0E0RqWxFeExWeEtW6XOpm=YEY=lMP=Ys0Eb10=OseXtEvEl=Y=OEUJ0JPJSGA=lpbJx51Exp1WbRPWlR6=tuAW0uxJxGQWtN1JxG/WlWxEYR6Et=UWOGDJS1AESwDWOGeJ0ivJ0iUJYimW0RDWtu0Jb5U=bM0W0sDEOwxEtMqWSWPXOu0XOp1EO5vWYWeWtW6WYu0Eb1QW0ivWxWqXtWqWOG/WlseXOFqEYJP=YJAEYJeJSFeWxR0JbFAEOsDElRQ=bHU=S16EOHUExi1=OWxW0u0ESMqEx1qE0=1XOG6EbEUXtEmJYR0Etim=Yi1JS5UJSFqWlM/ES5mWO=1Else=OUYEOG/WxFq=S5YXSw0JxMQXSJeWYJeJSGAWOReExsD=lJPWOGxWlNm=OwxWtW0=bvvXtEbJSjUJYRPWxUbJS=mXtJQXtWq=SWDEYEbWbiYESG0EYR6E0JAXOuAEOvbEtiUExJq=tReXlWxEbR/=O5UJSwA=bF/E0uPWSFeJx5mJbFP=OsQWlW6Eb=1=YuQXOFAExs6XOu0JSWeXtpmJxG6XOWxExpmElMqWl=YJS5UXSpvEx5bJlsQXOwxXOMqJYRqWbGxEYMPE0NmJbMeWOWQWtJxE0Jx=lWeWb=vWlJqWtNvESJ/ExFPWONb=OHYEOu6=O1QXSJ6WYu6ExRQElNvExvb=tsAWxJqXtEY=SFPEOjYJSueElu/XSRAJSNmWb1DEOUbXtuQEl=U=b5bE0=UWYR/WbNU=lEU=YuxJxHbJx1/JlMAEbMQE0=UElMA=OsQ=lMAXOwDESG0=liUJSib=YWqWxpbEtseEtNUES1/XlimXOHvEOJQW0NbESF0JbwPWSGD=SwPESwx=Ow/ExpvXSFAEtsDE0MAXtW0XO5YJ0pvExjvWb1DWO1qExsxWxEY=YjU=SNU=tM6J0JQXtu0W0imEb=YJluxWbGqEl=UJlivWlu0EYM/=OJqEbuQXOR/WxueWOsPEOsAExWe=SGDEb=b=bMPJYs/=SpYEY=mJSvmJYs0WOs0EYWPWxsPEt=bXlMA=tR6=YWxEOMQWOJ6XlWeWxRDW0RPEbwQJSRxXSHY=SWeXlpYWSWQXOs0WxWeJxUbXtM/=OEmJxGDJ0NYExsDJbJ6XOsxW0uxJSWeEO1QWY=vW0WeWYR6EOvYW0M6XOuDJYEbJbFQEtEY=OGPWYsqXO5UXS1/=SReJxwe=SGxWS5bE0sxExEvESu0=bMQEbHbJY=YJSux=bNU=Sj1J0s0EYMeW0R0=S=1=OR6ESR6WSGx=lJAWOEmWtjYJSs/EtJ0E0MPJlp1=tJD=lJQJSweEOu0WxWPXSs0WxEmESiv=lReJbJAEO51JSJDXtp1E0EYJbG/WljmWbJ0JSWPXSFQJlE1WSvUXOFPExM0EbuQWSNvJbu0J0M6WO1e=SFAWON1=ONUElMx=SiUXtiYWxG0JxNUEtsA=libWO=UJSJeWO1QWS=UJYWeJxpmXli1Eb5YWlWPXlpUJ0RqESUUJSuDJSvbEOiUXtsQJxNm=SivW0iv=bivE0W6WxUbWSJ6=YuxJSGP=lNUJbu/Jb=U=OUYJxFPXlJPJYMQJSNbElR0XOUbXtM0JlRQXOEvJ0WqWb=vWSuAW0W0XOGDWb5UXtM/JSGAESFD=YJ0XO=YExGeJSwAXS1eXls6WYiv=OJPJSJeWYR/ExJeE0j1EOp1WOwPWbUU=OJeEtRAXOUvEYRAES1xWOFDWbUUWOjmWOMAWbJ6ExF0WxjmWlN1=bWPW0J/J0u6=SR0=SHU=YWxXSFqElMP=OW/JSHmWOEmW0JqE0=Y=OJqXSN1Jbu6Jl=mEtpb=OEU=SW0=S1AEOvvEtjY=OR0JS1x=SsA=lNmEtjm=b5mExR0JbsqWlj1ExR/EYM0EOJAWts/XSWeExsDJ0sxXtEmJbu/J0j1El=YXtN1XSGDXtE1WtimJYWxE0=vWx=UElJqEOjvJYJeE0=UEluQWb16E0uqEx1AJbuPEOR/WxuAE0EbJYi1WbJeWbwPWtuPEb1PJ0R0JbjYJbw0JbwP=SUm=bFAWtseWxw6=bpm=SvYXtibXlNUXOGQExGqWxUmXl=YJ0EmJYuDJ0MxWtsxWlu6JxvvWSJD=SJ0WSFPWSW0JbFDJxFDEOw/ESvvWSUvExGQ=YuAExGeExGQWYWxWbs6Jx1xExFq=OMeJbFQXtWxWlWPWOM6EOJeXOJPEbpvWSR0WbuxJbimWOJ0=SuDJSiUXOJ0=OHYWxuAES1qJ0J6EbWDWb1AXS5m=lJxElu0Jbw6Wlux=YNvJYM0WlJ6EtuQWxsQJluQJxW6EYWAJlJqWS5v=Ou/W0JAEOvv=SivWbwDWximJlJQJSGxJSUvWYEmEYiYW0J0ExuAW0MqWbF0=SRDJYWPEtRDWYibWluxEYJ/WlJA=OJQWbEmJx5m=OJQWtRqWOu6XlEUXORDEtWQJbiUWxJ/WSW0XtjvWSwq=tE1Exs/WOGDExFAXlJ6=Ys/EOUYWSUbWbGxXOJxEOGeWONvWbWDEbJ6ExEU=bJDE0s/Eb1QWtpbWbuxES1/=O1qEOW/EtJx=Yim=tJ/=YuD=bGe=OwPJSs6EOEmJl=1WxuPJb5mWbRD=O5b=bRD=bEUEbJeWbMxEYjYWSi1JSRD=SUYExRDJb5U=OGqExG/=YMqWl=1=YM/ExFqEYJ6EbF0W0JAW0RQWSUYWORq=OJ0=YM6Jbu6EYs/ESMx=OwA=tjmJxUbXlsPWbpU=Y=vE0WAWS51=YuxWSF/Xli1XONmWxw0E0MqW0EUJSJeExRPJSGPES=1WtsPWSEmElR6ES5vXSMx=YiYESG/JbsxWt=U=b5UWS5mWOHYWSsDXOpbJSiYJ0pvW0JxJYueW0EU=bE1Wbp1WluDXSuDJbJ0WxwAESWAWOsQWSNbWYjYE0s0ElimJ0MPJYpbExWeExw6=b5vEtM/JbE1EtEYJYuPXOUvEYWQ=OGxJxFeES16Ex5YXSJ/=Y=mWSNmWSHmJYM0XOWeJ0EbWYMeWYJqWSpUES1eESW6XSF/=YJPXOwqWYNmEtJ/EtEvWxEbEYW0=tWeXOR/XSJQ=Y=bJxjUXtsPWljU=bGAWxM0JYp1JSJeJSUbExFPEx16Wxw/WYMDWSNUExHm=OGxXtseEYNYESJDXS1PXOvYWSvYESG0WSWAWSGeES1QJxWPJxHUW0JP=S5YExj1JS1AWSM0=SRDEOF0XS51ExW0WYEYEYR6=lsQW0pYWOEvEYsxWYjvJx1QXSW6EYiUWtseJxJq=Si1WbHvEOR0=bF6WOGxWOs0=YNYE0E1WSRAW0s6WlJxXOWeXtE1ESFeJluxJliY=tsqEOR/W0=Y=tNYExGxWx10JlEUXls/XS1q=bwqEljUExRDWbs/=tJ/=O1eEYEYWtEbWOpYWlWD=Yi1XlJQ=OGxJbuPWOvUExwqXOvbElM0XOibWSGAWOsPExJPEY=Y=lib=SJx=t=mJxJQJ0JeWOFPJYM6EbM0J0JDXSJPEtuAElpYEYu/=ti1XSjYExwQ=Ou6WxEvEO=1JYpU=lWQWOpm=O1/=lEvWtRAW0W0Jb1PEtNYWlW6WtJ0W0NbExuqW0p1ExpvXtjbWYs/Jxp1JbMDXtReEbiUJYsAWYWQXOMxWOpbXlj1XOsq=OJxJYRAJY=1JSWQWOpmXtjbXtjYESpvExWAExNmJlNU=tpmXtse=SR6Wx=b=SJqJS1QWlWqEbFQ=SMP=tWQEYN1JxUv=OR/ESJx=OHbJbF/WxvvXOw/W0sPXlp1JlEmWO1qExFqEtRqESpvJSFDJlJAWxGAXOse=SuxWOsD=bsx=tEmXt=UXOJPWlWe=tW/WluxXlseJljvEbWQWlW/JSF/WbwqEOUmWOpbWSuAWSWeJSHUWlM0EbEmElJDXOwe=tNbJxW/XS5mESRxWSpv=OjYXluqWONU=bMP=lseWOwDEYW6JYEbEbsAJlMQEY=YXtWeXtu6ESweEYR/=bJAJxEYE0pbWSpvWbs/=SM/J0p1EluqEYMxExG/ElJ0EOR6ElsAWtsq=Y=YExuqElN1=tReJ0s/=OEv=lJ6XO1PEOGQESs0EOFeE0JQExvY=l=bWYW0EljYE0MQWOUYExsAEOHv=O16=lM6Wb=vJbsPExjUJ0im=tReWxs0ExR0ExuQWtu/ES10=YpmWbseXOMQEO1/EYR0EbWq=OR/=SMxWtsDJS5vEY=YJxU1WxMe=bFxElW0ESFDXlJD=SRA=ONY=SFxExvvWOHYXSW6XOuQWbivExwQJlMPWOpbE0jbJlM6=YpmESMQWS=bWtRAEbH1ExFQJxGQ=SM6ExEvJ0jUWOpYWbsP=b=1EO10E0MeESp1WbEU=lMAEbEmExE1WlsAWtR0JS=mW0JQW0N1WSsQWbsxExFQWSu/JbHUJ0R6=OFqWbMqW0W0JbEbXSR6WS1xXSH1WbG/WbUU=OpYE0Nv=lM6WORAXOMAEtp1WSEvJbR/WYJDExJeWlW0=tM/WxWeWOs/E0i1EbRDW0jmJljUWOR/J0WAXS10XlueWtsxJSu6JlNvExuAJxpUW0W/Wx5vES5YEbWDWSMeWSHmEl=UElu6WxsPWOW6ExGxJYWx=lNYEtJ0Jlj1W0E1JlpmEtRD=Sw0=b=UEYj1J0Mq=Y=vJSNUXSG/=OW6JxwxW0J6XOWP=SWQWYMQ=tNUXSsQEbEY=tRQWOHm=SMDWtEmXOWeEbwQWS=Y=OwQWS5vWtJxJxjUXSweWbs0=ls/XtRQXSHmWbs0WxEvExRq=Y=1WORqEl=UJbG0Eb1eWx1/WYNvJxuAJxNmJ0uAWYRxW0JD=biUWSw6=Ow6=lM6=YEvJYMxEbHb=YuPJYMAWSGDW0R0WxHm=SGQJxj1WO=b=YsPWxFDE0RQESuqEljv=SuDEbWPWOseESUUJY=mESpU=OpvXSsQESEvW0sqEbHYWOuDJxRe=SR6ES1/ES=UXtuDWbvU=tiUWlMqJYW/JSjbWYu/JbFP=SHmXOiYESMeWO=1ESF6EYs0=SWQEOM/=S1PEbvmJbWeEYRq=SJ0JlpvWbGeXOp1XSHvESW6Exu/ElEbW0seWSN1WS1Q=lWPEbuAXSJDXSUmJxM6EO5YJbuPEljmJ0JeWSHUEYWe=YjbESwQ=lWPExReE0M6WxJQWSWPWbRD=lEbWS=1ExEbJSWqWlsPJYJx=bFPWSUmEYsxEOU1ESJDExR/EYjYXlMeESW0XSuqExsxESG/XO5bExRPJSRQWSJQESJA=OGeXtuqEOWqE0ivJbMeESs0XORAJSpvEO=mXORPEbUm=Ss/JbRPWSM6E0ueW0s/WOGAXSWP=bwPEO5YXOUm=luqEbwx=tj1WO1eEOwe=tWP=tM/Xl=vWbW0Ebim=YWeJxUmEY=1WbGD=SjUXOH1WlNYXOFAWtJP=bseW0EmJbHYESR0EYjbJbsqXONUEYu6EOMQE0WQJbE1JbEU=tuQ=bGQWtibJYiYWOw0El=1=Opv=limWOHYWbjm=Si1ElEY=OJeWbU1EOjUJ0RDJxR6WxFAJ0ue=Ssx=tMxXSs0WS1qJxWDExwDEYJ/Wti1EbEvEYEbEYueWOW0W0ibExUYWbu6ExEmW0JA=SwQXtR/WlWeESR/WxFAWtsPEOGqEOvUWx1qJYiUXtsAEbi1=tpUWlE1WYEmWtMPES1QXOu/=Y=1EOv1XtWA=OUbEbuDJl=1JYMQ=O1A=S5bXtRx=SimXtRDEO=mJxvYJSHv=O=YES=UEOj1JlEvExU1XlW6Wbu0WSuP=SjYWbsPJlpmEbuq=S1qJbWQJSj1ElM/JYJ0J0pbJbEU=OJPEbibExHbESjU=OMDWtsPESsqWlM/JSG0=OEbWbs0JbR6Jlim=Op1WO1Q=Yp1=bpv=bR0JxMPESjm=OvvExF6XOW6Eli1Jx16ExMxXtiUJYJ0XtW/ESWQJxp1WYsD=bN1Wxs/JxjYXts0EYivXlu0XSWeJxJAJbG0JYRD=O5bXSUYElJ6JbGqWxuA=OFPWSwPES1QExWxExEYW0W6XSEvXSvYJbRDEbuP=bjYExj1EbsxJ0jmXOWQEYW/WtJ0JY=bWOR6EbEYXOGxESjbW0RQJxFP=Y=1=bRPJYj1JYR6=OEUXSE1JbNvEYseJbjmJb5vWlW6=SsAWbwxEt=mXSJxWOiv=bFQXOw/EOivWlu/Elue=OWPWxHvJbHbXOu6W0p1WYpUW0iUEOjUExWQJSsqWO5YES5YJSHbJbJPXlivJSHm=bR6Jbw/Xt=1=tuPWxMeWbGPElEmXOHvEOi1E0J0XtsQ=lRqESwDEOvmEOsDXli1=OuqXSEUWluQJYWeWSNYXOvvE0Wq=bUbWSUvJbJ6JljmWxF0ESMxJbG0EbsDExsAEbMPXtEmXOU1=bReWbU1JbMeWS=bEbvUJSMxExj1EYuPEYRxXSMqJ0uDEOJDEOpUEbM0EtWDESR0WxJ/XtJx=OpmWS=1EOse=SJqE0jbXOjYJSjUXSFA=YueXOvbJ0RqEOjUEYpYJYjmWxRAJxsx=bMAWYRQWSWPJbibElE1XSMeWORAW0jbWS1e=tJ6=ts0=ORx=OHbWbF6EbvU=bj1XOJ/J0RxXtsAWSMxExi1JY=vE0=UJxvY=tuqElMQWxEYWSuqEbNbEYNmESsQWOFeESE1WORAJYsxWbFPWxsDJYMeWbFPWtsxEOFQEb=bWSR6=SJ/WYj1EOuq=limWbsDJ0Mq=tEvXOMeEbNUEO5b=S=vElp1ESs/XS=mEbRDJbw0XSu0XSW/XOi1EYuAWxEbEls6EYseExGA=lu0JbW6WbRqWSw/J0iv=Ojv=bvvWYseWbJDWbs/WSEUESFxE0EYEYM6JYu/=bsDXOu/Ex1eWbJDWb1PJbj1ExFQE0R/Jb1eWOUv=bMPWxweWbJxWYsQXlM6=OW0=OJAJSUbXOF0EtWPWxjYWOGxXO=vESHYXtuxWx5UJxJDJxuqXSGD=YNYExF0ESR6=OFeEYW/=SR6Elu/WOJeEtiv=tNUWtsDElR0WSi1W0ueWbuAEx=mEOMQESuAXSJ6WYivElN1XOMxWtjUWSuDXSM/J0M0JlMAWbsPESvb=tRPEbW/XS=1JxsxXOUm=OWQElJ0WSReEbu/ElWDWx=1WOUmJ0WPXSUmJlsDXliU=bw6ExF0EOJ6=bsPE0jvEximWOsQ=O16E0WeXOseXSuxWbuxExEUExw/JSJxXSs6JxMAJSJqXS1x=YjvXSHUXOvYEbU1EOHbWbGqWx=YJ0EbWYEUW0WDExEmWSEvEtj1Jl=vJ0JxEOWqJYiv=OsPESjmXO10JlivXSUvJlpmJb5m=tEmEYW0WlE1J0sAWOWQ=SJxXSvU=YJ/ExReXS1QXSj1=SvvWlNYWxuD=SuqJxJDXSNUWx51=Ou0Xl=UWxsPWxweXOJqWxNvJxHYW0iYJx51WOpbJSMQJSJ6=OUU=SFAJS=mWbjUXOG6Exs6WO1QEbWQ=lNvXOF6JbwqXSs0WSUYJSwPE0u0XlsxWxpUEtW6Wxi1WYu/WtEYEOF0J0j1EtMq=S=b=bEvXOJ/WbGxExsqWbvYJbGe=buQJbFPJ0uAWYjYWbiUXOUbXlNYJxGxWljUXt=bWbMxWSEYXliYXOGqJSuPES10EtiUESUbWSp1JSsqJbU1=bEmXOjbEY=1EOR/JxGDWxvbWONm=bEUExGxWbFDJb1/JbFAWx1DEOJ/=S16XSHbJbReJbWqWSFQ=bHYWx1eJ0i1XtsAJb1xWxH1WlNmXlMAJxMDWSE1EtR0=tsDWluPXlNvJYsqWbjUXOFAJSuDEYjb=bjv=OpvXO=YWOvv=S1/WbwAESR0W0uqWbJAEbpvWSW/WxJqWSuAWYNmESEbEtp1EbMDWxFQWxpYEx5mEOGDXlsqWOiU=lNm=OvYJYs/XSp1JbJ0WY=mJSw/XSRQW0u/ExFPXS=b=SHvEOjbWYMAExjb=tRqEbu6EtEvJlEYJ0JPJSJ0Wxu0XtM/JS1Q=SGDXtsq=OGeWOR6XOFPJbp1W0W6XOj1=YM0=SHY=luAWlMPWlueES1PWxu/E0NvWbW6ExHUJ0NmW0Re=tsDXlsPWSFAJxweWSHmWSwAE0RAWYNvEYu/JSF/EbW6WS=1XO1AJSEvEtWAEbsDJxN1JSwAEx1AWtu/WSUmJbGeWYWe=YsQJbivWlRDXtsQElW0ES=UExJAXOEbWbs6JbiYXSuqEYW6ES5m=OJ6JYuqEbUUWYM/=YM/XSGxWbMxEt=1JSNm=ljmJbwQWxvmWbEvWSM0WO1q=OW0JxMPExNYXO1qWlJD=SNmWSwPEtW6XlJA=ON1=b16ExFP=SUm=Su6JlEYEbFAWtjvJb1eXSp1JYW0EOFxXlMAEtiU=Ss0=SFQJSw0WYR/EbseWbUv=YWeJ0NbWt=mJbR/=OR/=bseXOuq=SiYWOibExJ0EYRx=YWA=lJx=bwAJSJqWtWqWxG6=YRe=bMe=tJAJx=1JSJQEbGeWxMAEOsQEbUUWt=bWljbJlseEtjmEOw6WSs/WY=YW0WAJbu6JxMxJbu0Elu6EOWQJxJ/EtJ/ExJDWtJQJSu6=b1A=SJ/WSUUW0EvWb1/ESw0EOw6XO1q=tMQ=YuqWxEYWY=YXOFxWYRP=SW0ElMqESv1=bMeXSsAWlp1JSEUJlW0EOjUEOFAJSWqXluDJSvmEYu/XOWxESJ/EximJlJDE0MAJS5mJbUmXljYJbivWb1qWSwxE0s6XtjbJYNU=OjvWYjbJ0NU=b=1JbMP=bpYESF6=Y=bJYs/WOJAXljvJlJP=YEU=YEUJ0uAJSi1ElWQESW6XO5YEYpU=SwxJbRQXlsDWSuQW0JD=lsD=Ou0WxEm=lR6WxwDWtNmEYEY=YJe=tJeJxue=lEbJ0NbXOJxESHvJxMqJlMA=SR0E0WDXtMqJli1EO1DWOs6=OuDJxWPESw0=ORPWxweWxpYESJ0ESHb=YNUXSNbWx=vJ0pUWSjUJYRP=OJ/E0sPWOHm=SFeJbGQESw0=SwAXtsxEYR/E0=1EbGQWOwqW0seJlp1XlJe=O1q=OwDJSs0=YW6Ebw0WSR0Wbp1Eb5UEO1DWOMxXtRAEYRDJSRqEx16WxNvJYj1JbGPEYM0JxsD=bwPXlW0WxRA=YuDJbRPES=mXOMDEYNUEbWAJSuPJluDJbwQWYWqWYJeEb=Y=bvmEYEvJbGDW0ueJSsAXOJ6E0s6WYRDW0WeEbJQEx1e=OEvJSjm=luQExJP=bGDE0iUWlJP=OsQ=bMQWYMPESGP=li1XSUbXOW0WtRqWOUUW0NvJbMDXtu/XSuPJYsQESWAXOUYXSu0EOF6WS51JYNbXOEvXlWeJSpUJYRDElpUWY=bEYW6=OHvXSFPXlRD=bGDJSs0WxMDEbvUEx5mJbs/=Yu0WlEbXtJ6WO1qJbJQXOJAJSuxJYuAWOMx=bjmJxFPJYuAXlivWO=b=bWPXOG/WbibEOWAWbJqEl=mWlpmJ0=U=ONvEYR0=lj1=bwDXO=m=SWx=YEYXlNbWSpUXlEvWYW0JbuAJxsDXtjbWbvmJSUYJlRDWbMAWb5m=OG0EtRqJbJAEbR6ExRq=Sw6ElM/=OFx=OGDWtMAExEYXOvYWO5mWlR0XluQJ0uqJSuxJS=b=OWA=bvbJYR6WtpYJbWPXSuQWbWqJSwPEOsQJbFQEbN1JxMeElNUW0MqEOvYJxseEb5mJYiUE0We=lsxES5bW0W6WSRDJSJ/EO=bJSJAXOw/WbWDEOHbE0uqEOjYESGA=bvmWbwe=lMeJ0JAJS10Wx1eEONYEljY=bs0JSEmJbj1WtNUJbF0WbRP=S5vElRqJbWQJbuQWtEvES1AESHYW0u0XOj1EYsPEOpmEbseWxG0WbR0=OGeWljbWOJqEbpmJlMeWxMDWSGDE0u6XtRqExsxJbReXOH1=OGAWOF/=OsxXOu6Wl=bWS1D=bR/WSHvEbWAESRQJ0W6=YsAWxRQJbsPEbvUXOGPWlM6=SUvWx5YESWPE0RQWO1qWOjmEOEUJYs/=SwqWlM0JbGqJxW0XtMQ=OwAESuPXSWxW0MPWbp1JxHUEtJDWOHU=SwqWOiUElRq=b5b=S=bWSHvE0E1JxR6ExMeElsP=Ss/EtMQJxFQXlW0WbW0JYW/XOueJbvYJxG6W0uDJbvvJSsD=OweE0JxJb5Y=Ys0JbR/WOUvJ0iv=l=Y=ts0=Su/ElMxESFqJxvYJ0NYJlNU=Sp1JxjY=Yuq=SFqWYWeEOvmWYMAWbGAWlWDJYsAW0W0Et=mJSjbJlJqJ0WeEbivWliv=S=UExHmJSv1WSp1J0=vXOvYWtJPWxueXlJ0W0sQWYjmWxGQWORPE0RDXlNmWSMQW0sQ=tRPEOUbEtEUEljvWOsAESRDWtRxE0imJxHYEOR/=bHYEORqW0uDJSGqJxjv=YjmXO=YWSFQESGqXS=1=SW/=Y=UEluDESp1JYjYJSJ/XSjmWb=UXlEbJbi1=tu/WtWQJxHY=b5U=S1eWxGDJbJqElMPEliv=tEUJbWPJSjUJSJ/=SWqJxFA=OR6Wbj1=b5mJxUmWtjmExG/XO1q=SHmXSEvWxvUWbvY=OuAJbseJbEmXSHvESRPWOJAEOuqWYjUWximEtM0XtJeWxwq=tRD=S1AXtW/XOuxWYM6=bp1EbWQ=OM/XtjYEtjvEYRQWSHm=bRQWxs/=buxWlWq=bjvE0NYEOJQEtMQJbu0Wtu/ElR/ESJQXtRAEbvUWtWqEOsAXlWPE0sqJ0imEtRAXS=1WYR0=bNmJYu/WYuPWOvUJlJ/JYM/ESuqE0sDExM0JSpvEtuqEOseEbR/J0W6Ex1xEONYWOvYEx=Y=tR0=SjvXtuQWbFAWlRAWluDJ0We=S16Ebi1WOpbExHYWOv1WOweWSReXtR/=YsqEtMDES5bXOJq=bweEOu0EtJ/XSu6=tu/XOFAElpUWONYEYEbElJ0WbuQEbsP=lu/ES5vJY=m=SRDWONbJbpvJbpbESGqJb51WSvbJxMDE0uPWSF6JS1AJSpUXSsPES5mJlMeXO10WbsAEbNUWSGP=bFDJxi1ElMAJbGDJliYJY=Y=OH1=Oi1=YMDEO5vWSEvWS5UJlNmXSHmWbs/=YJxW0iUEb=vWt=1=SuQ=YimWbWDEYJ0ExMDJbFxEbEvWxE1=S=UXOGD=SJ6Xl=mJ0RqWlJq=b1xWYsPEO51XlibXOWQXljvXOGeEOJ/XO1xWxRxEYjmEbsQEbu/Jls0XSv1EOR6E0WQW0EvJbJqE0WDXOJxXS=bEl=YWbG6W0WP=OJ6XSFAWYJeWbUUJ0jb=YNv=tjUXtu6=liUWtW6WOHUE0se=bu/EYEvEt=vWtuAJbvYWSW6XO=1WSj1XSsPWSU1WS1A=YWPExMPJ0iYWxWqWYJD=SMq=YjmJbwP=SpmXlsxJSGA=SuAEbF6JYN1Ex16XSUbEYWAJb1/WOWQExiU=OEbXS5UESRqEbMqXlpbWtuQWxUm=OsxEbFDJbseEORQWONbJlW0J0MPEbFQExE1Etp1Jx16JSG/XSjUW0M6XSiY=OEbJlp1EOEvWbuxWbNYXluAJbM/WSs/JYJQJlEvEbW6WY=UXtEmWbGxWxweJYNYESWPEOs/JbpvJSJxEYpYWOJq=bw6W0R6WxivWSHvEtiU=tJPEOvYWluqXOwDJlivWlNmXljYE0ueWS5YESpm=Ou/W0RAWSEmWS1e=SuDESjYEbUUJbRD=OWAEtMeEYWQWYjYXtW/WOMxWtuqJli1XSv1=Yjb=SJAWx1QEOGDEbR/XlJxWOR/J0RqJbw6J0sqWb5UESuAWx=1=OwQWSR0JYR6J0ivWtj1XlRxWxiU=tRxWt=YE0s/JlNv=tJPJbiU=tN1=SNbJ0jUWtMDJSWeJ0=UEbjm=SNb=tuxEOsD=bReWS1DWb5UJlsAXlj1=bNYEx1DWlp1ElMDXlMAEbEvJbWx=bHmEbjvEluAXtJeESMAEOJx=SNmWlEmXOHvJlsQJlpvEluQJbEUEO1e=OiUEtW0Wx1/ESsPWxuD=Ou0Jbs0WOsPEOuqWlMqEx=bEbwAE0W0JSHmEbsAES5vExWAWOpbWOJPJSUYJYjbEOJD=SU1JSW6XSw/=O=mWSvm=SGqJxjU=tWD=YpmEOu6WSsPEO5bESwPXOEYXSWP=SueWYJ6XtRq=bJeWS1eESi1XO16WbGPEbGxWOsq=OsAXSW0WOjY=Y=YWtpb=bjUExRxEtsQE0uPJbsP=OE1XSWP=YNvWbG/JYJQJYJ/=YibE0p1=bu0WbW0WOs0=O1P=SGD=luDJbGx=OWAElM6WlRq=t=1=lu0=SRDW0pUJxuDESW0JlWxJYMqJ0p1=tMQWOvb=lM/W0iv=OuD=lRqJb5YESsxWbsxJbJqWOMxJb=vWtE1WYWeESsPESwDJ0R/XSM/JYR6ElNm=OR0JxsAJx=bJYuQJ0pmWbReXSpY=b5UEYjUWOJP=SFDEl=1=lMAJxJ6ExjbE0=mWlsq=lMQJSJ/W0JQWb=m=SG6WYsqWtMQWOR6EOWAXlR/JSFPWbsDJbwq=YJqJYu6WYWDESRAJbJPW0uPWxGAWxMxW0E1JSFqJ0M0JS=UElsqWORe=lNvWYu0WYu/EtR0ESMxESGP=tseExwPWYWA=S10ElivWlp1=OFPEtJQESN1=bj1JbG/XSG0JSv1WbWAWOvYESvmXSw6WYJ6WlWeWbs/XlNYWSRP=b51=OwPE0JP=buqEOWeEtjbXtReEljbXtJqJxGxJ0Mx=luQ=YWxWxEvXtpvExiY=OW/=OJxExvYExvvEYWPJxvm=YNbExvbESEb=lib=OMPW0J0XSHbWOJeJ0seXluD=OuQXtsAEYM6WSWqJSFqJSjYEOiU=bW6=OJDE0sPJ0WAE0N1JSH1XSJQESMQXOiYW0jv=S1e=O=b=OpvJSUY=SGeXlRDJl=m=O=bJYWxWSu0Wx=1EljUJb5UJSj1EbW0EtsDEljY=bwD=tiv=YMqWtue=bGD=SGx=YE1ElJqWxs0WlWDEOpv=OJ/Ex5Y=YWAExv1WxjmEOjUJbNvWbuA=OWq=lMqJS=vJls/WxR6JbvUJSUU=bNv=YMDWS=YXO10W0=UJSMA=tW6XOG/=SpvXlNvEOpbXtRQ=SWqXSsP=YsPESHU=lsqESsAWOR0WYi1W0uP=SwDWxwDESvUJb=bWOsqJSGAXtu/=lW/E0N1Exu0JbWxJlW/JSUYE0s/E0WQXOJqExw/EtNUWxuPJYM0JSHv=lReES10=bsxEt=v=lu0EYWPXtEm=YR/EOEm=bMxJbJP=tRPEbwDJxN1W0jY=tJxJYuPWSwQJ0uxEbNmWSw0JxFDXSHYJbibWSMAExibXls/=OEb=OWPJxFDWlRqExUvJY=1E0EYXlpYEORx=OEUXSWQWSFDEOJ6J0uAJ0RAJbjmWYNm=YsDWxp1WxjvJxuPWS=m=bu/=b51XOvvJ0jmWxHYEOF/XSMQWORe=bp1JYRqJSs/XO=m=b=YJSux=bjUJYRD=tEUWOuqEbHbEbMeExR0W0RqWbGPXOuDJSM/WSs/ExuP=OpUEtuAWlJ0ESvYWYiYJS5UJx5b=bFP=tu/JYueWtsxXO1/WYRx=S1PJxNmXSRxXOMAWSWPWOGxExjmJxW/JYuQXtueXtEUXSu/E0M6ExJ6Wb1AJY=bW0uPESM/EtsPEOUY=bWDEOWPEYEbWOivExJ6JxM/XOuqXSvmEtEbWtWqES1xXtNmEbWeJ0MD=SseEbFA=tu0EtuPXlM0EOw0ExGAJSw6E0NY=O5mWOEvJSE1XSRQESRe=O16JlW0=tWQ=lsxWtJqWSFqWSRqJlRA=l=YEOvYWYpYE0WAEO5bWb1A=bEUWbs6ESw0=b=bXSG0Eb=mEYsx=tsxWOFDE0pYJbwDJlW6XlseEbM6J0s/XO=mJx1QEbwAExWqXtsP=lJ0WxRqE0JxEYWA=SseEbUYWlNvWORq=lpY=bwQ=bWqEOwDWt=Y=YEvWYM6E0ibWtJDWlEmJxwQWxU1WbwPWSp1EtRPXOsQExGqJSJPExJqJxuPEbWQWbsD=bJDJliU=Yjb=YiUJYjYWbEmJbjbEYJ6JlRDJbu0J0s/JSFQWSR6Ebs0WSNUEOpmWtjUWxvb=Ys0ElseESi1EbimXORD=lM/=tp1ESUvE0sA=ts6JYsqEYsPWOjYWOHU=bH1=tRQJSuAJSuDWbGqJYW6ESU1JbGqE0ibWbE1XSvU=lsAEx1qJSMAWS1qEx51WlJAXSJe=S1xXtibWbw6WbRAXOJAWxJxWOw/WbuDJSwQWbHm=l=YJxRQJbHmWb1P=SG6EYJ6=OueWYJ6Wb=mJYu0JxjvWbM0JS=bWOM0WOEYWb5m=SpmWl=Y=b1eEtu0E0jY=bvmJxvYWlEvWONbXOJeEb1Q=lN1=OFPXSw/JlJeEOGAE0W/Jx1qE0J6W0WeJlue=SEmJxWPJlWqXSM0XtWPEYN1XSpbEOJPWliYXOMPExFDXOsDEbUU=lMxWYimWbU1WYuAElWDW0W0EOWQJYNvWxU1WbpmJbMQESF6=tsDXtu6EOsq=YEmEOJQWxwA=S5mESu/EYJeWONvESUb=Ss/EOiUWYRqEOj1XOGDExs0Ex1DEtE1ExRAXOw6EYW0=SpmXOj1=b=1WbG0JSNbWSsDJSw6Xt=1ESvUEYMQ=O1eWxwP=SHv=YJ/WxM/ESGD=YWeJ0MAWxsxXOEYJl=1WYNmJxjmJlWPWYMPJ0sD=SjvEYuqJlu/J0MPEYJ0XtivJYM/Ex1xE0sQWSUvW0MqWO=bJS=b=OWAJx16WO=1WtuD=SFAXOUUXtuQJYpUEbJeESsPJ0jbXO=bWbJe=SFQEYRQXOs0WbwxExi1=Ouq=ONUESUmEtj1JbJAWl=UXSM/XSsAXSpbESGeJbGQJSvm=ONbEOu/WSEvJxMxXtjYJxpUEbMP=luqEO=YJSsxEbR0E0R/=SsAWOpbJ0NUXOEv=YWDXlRQExM0XtWDJ0W0Wb=b=luxJ0NU=Ou0WSW0XlRxW0Eb=OMq=SwD=OH1WxwPJljYJbEmWtReXSWPJlseWSjvWSU1JYsqJlJeESJxJlNmJbWQ=SGP=bUmWbvvJSjmWx10EYWAWbJPXOMAWYM6WxsD=lNUWS1DXlW6EORxXOi1XSF/EYu/WYiUEtWQEt=UXSG/XOFQJbF6W0WAWOM6WlR/=SJAJSReJbi1JxUmWbJqWtN1JbiYXORQEbGqW0J6WOM0WYjm=O5UEbEb=tR/JYM6JbG0WYjmJxWPXtWeJS=YWlibEYMQ=bE1EtueWONvJxRqEtseWYJAWSpU=S=1WtEmXSM0=Op1EbpvXlR0JYu/WbRPEtJPE0JPWOseEORqEbsQWSEYWOiUWSvUEOWP=OJAJYR6WOJAESRq=buPEYuqXtj1Ebse=YjYElNYEOvbESHYXOu0XSJqXOsA=tRQJbMAXO1PESsAEbwAJxueE0iYElWAXljUEOsAExseXtW/=b=YW0uq=bwxESu0=OwAXtJ0JximJlJqJlpUWxuxWbW6ESR0=Os/XtJ0J0NYXSR0XtW/WlNUE0WxXSw6JbFxJ0jUExF/=lMDE0s/=SNUExjvWxueJSGAXOuAWtsPEOJQJSW0ElMQW0R/=YWD=b1DXOUvJYMDJx5mJxiUJxJ0WtuAWtjU=O5b=SG/W0jmJbvvWOR/=b16=Ys/WtWxE0N1ES5vWxHU=YpYXtRq=Y=bXtW6W0=bJx=U=tsAJ0pbExRAJbFxXSMPElu0ExwQEOR/JSMA=ONmEOWQWtRAEbHbWYWQXls0WxUY=ts6XSR/WORqWOWeE0NU=tjU=Sj1=Ou6WS=YJbRxJYueJxJ0JlWPJY=YXOsxWbUmEOFeJbsPElWAJbM/=bRxXtJQWbUbElNbJluxJlReJbue=bG0ESJqXSFDWx1D=ORq=ljvEbvvWS5UXlR0XtiYEbR0JbJq=b5bXlJP=ls0=SF6EOu0WSUU=lMAJxJP=tsqEYjYWOvbJxvYJb1/ExEv=SvYWluDEbR0JSM6=SF/=O1AElNU=Yu6XSjYWO1QWxF0JSUmXlM/EYNv=SR0W0uAJYivW0MeWOM6WOUY=OJ6Exs6Wb1xExjmWO1xJbw/=bw6JYNbJb1QEtNUEOjYXlpbJYR/=tNbXO5vEbu6J0M0Ex=vWSNUJxEvElRxEOJ/=tW0WSR0JxJPJbEY=YW0ExM0=bjvJYNbXtRx=OUYXtRQXtu6XtJQE0s/JSuDE0s6Wb=mESMq=SWxWONU=S5bJbpYJlE1JbWQJSuAESibWbpv=bjvEOuAESRP=bNvEOJ0E0E1=SRQE0imJbJPWbH1WtMxWYpUXOFAJY=mXOp1JSwAEtpvEYEUWYJPWtNvWtEvXOwA=tj1ESRxWxs0WxGPJxJ6WbEmExu/Exs/=Sw/ESsA=bJeJxJ/WOp1ESwQWlWQWYibXtWQWx5vWbF0WYuAE0R0J0RDEOF0EbJ0JYRDEOueES5bWbMPEYRAJbG/JxjvWtpmXSp1=bMqWSW0=YM/XSJ0WO1/E0WxW0uqEOE1ExN1EtEmXlNmEOW6JxvYJxFAEtMAJxF6WSNvEtJ/WSHU=SvUEOsA=tM6WSvmWliYJlJeWO=mWOW/=OUUWSWqJxReEOwPJSM0XtNUWxU1WbvvE0jUWxvmXtNbJ0uDJ0We=tNm=tjbES1xEYs0JSJPWYJ0JlMD=OFeWbEUEbM/XlMQXSE1WSp1XOu6=bsAEbGqJxMxWbW6EtJPJ0ibXSvmJYseJYMxJb5UEtsDESF/=luxJlJAESiUE0MAExjbJlsPJYMxXlEYWtu0E0=b=bGPWbvbXOpbXSuDJlJxWbMP=OUY=OjYJlM6=YJqElReEOWA=b10E0sxEbE1EbuDEljvWONv=OW0Eb51WxiYExFDE0M6XO5mJlJPXO=Y=OGeJbF/W0j1Eb=YExRe=bHYES1eXOReWtEYXtWeE0uAWSvYWOG6XS10Wbs0XljmExpYW0uPJxMQWSs0WbFAESUmEtRAXtWqWxWqJxM/JS1PJSUbJS5mJYEmWx=1EbJAE0JAEYEYEOw0JbpYXSRqXtJxW0uPWxHbXOWe=tpYJbMxJlNYJbW0XSG/WOF6WlNUJSRDEt=bWx5mJxweWtWxXl=UXOMxXSu/Wb16JbjmJxJ6=bM/XOMq=Y=mEbvbXS1xJSpvJSNvWOUY=bNvJbNvE0=YXSFAXOMxESJx=YjY=OpbJxuqES=mEOv1JxWeWY=vWYuDXSNbXSJPXSimJSwDEbFxWbGqJSweXl=UJS=UWOGq=OUmESse=lJ6=OUvEbpmEb1xEtNbJSEYESpYJx51=OimJlu/ExRAWlNYJbMqJxE1XSMe=bvbJSuQWbs6=tuq=bM6XlR6Wx1eE0N1ESJPJYuxESHvEbWDWxGqES16=tWqWYJQExJq=Y=UW0JPWbvUJbi1ElWAJbHbExjmEbwDJbWAESWxWSFxWbvvXOp1WSWQ=bMqEbu0=OsqExEmEOsDEOibJx1AJSwQJYM0XORDJ0sAW0u0WxuAXS=1EtJQEb=vJxjm=lWqWO5m=bvY=OvmExpbWOMx=tNm=S10WbiUJ0jmExs0=bRe=OvU=O=UJlNvElseXOGP=bF6XluQ=S1AExwAJYjUXtEUXlRQXOF6WlNb=SibWSR0XlMPXSG0ESE1XOimJxseEYWeEbw/WYsqJxWQ=biUWlEvESjUWOjv=bF/EtivJ0ibXO=1EbW6=OF6ES5mJ0i1=YJqJSWxEtsD=bw0=SHm=SJxJxp1=ls6JxwDJbEvWbJPE0sxWxH1EbWA=tEmElNvWbUvEYMDXOpUExUbJSsQWxUvExFxXt=vWxjvExEb=OM/=lWQWxwDWxWAEOHmE0RQWOJ0W0pYJSpbE0pb=bi1WSHm=O=vWxux=bFeJls6WYR/EOJ6JS1AXOEmEls6=bvv=tueWbMAWxjmWOuDJbUmWbW6JbJDJSG0WbMD=OEb=SW0XOpYESwe=tNmJb=mEb=YXS1q=tNYEOvvJ0EU=OHUJxWP=OR0WSGeJSRDWxvYESHYWSiYJSWPWxG0J0W6EYs/WxsDJxGQ=OHYExs6Xt=U=YR/J0WD=lWeXSw0=b1xEbwQWbMeWxMxESib=tMeWSGDExwx=OF0WO=1EtJ/Jx1AJSJQXlpbWOWqXtWPJxGDWxuQEb5Y=bUvExpmJYJA=OsAElJ6J0R/=tWAWbuxWSGqWlW6ExG0JS=UXlsQEOHbWxG0E0RAXSvv=O=vJYu/W0MQ=YpmE0jYEYJQElpvE0EmJlReJ0uxESJeWtN1=O5UWbj1XluAJ0EvJ0uAXtR6=bG/EYMxESivXlux=SW0XSwq=YJQElRDJlW0WS5bEbGD=tpbW0jmXONYXtjvJSsPJlEYWt=bWxiY=bF/WxNbJxGQXOR/=SJ6JSwQWxU1Eb=UWxUUWb5v=OwPEbJ/WS5mWbFDJxFDXtiUJ0sQESW0=OFQWSJ6JlsDEOJqWlRPXOFqWx1/XO51=bN1=bNYEbuP=Si1WO=UWOi1WSFPJbFqXS1AJSEYWOJ/WxwQEYuDEbseXtRq=Y=Y=bJDEtuqJ0uxEbNbEOWqXtJeJlpU=Sv1=tu6XlRPEYMDEbHmEtEmJbHYExjbJlu0WbG0WbHvWtpbWO5bJbv1WYjYXSH1=lMPXOJQXSG/=YRqJYsPWSwQXtNYWOEYEtMAJxsqWlWQ=lMPJx5YXtpU=O=1W0W6ESMxWtiUESUU=ljvExsxEbWDW0sqJ0=mEx16ESvYJSFQWxjbEtEmXSRD=bFeJS5mXOpUXOsAESsqEt=1E0s6EbNUEOs/ElW6XtR0ExUUJxwqJlMAExw6WOwxWYMQ=OEb=bFqJlu6JYJPXSjUWtM0=SF0JSHv=SJ6EYimWx=bXtR6WS1xWxiYW0ivWxpbWOs/XO1QEtivXSF6Wxv1WSWx=bUbWtEUXO1eWSvvWOjv=tp1XSuPWSuAWSsqEbuDJbiYWYjvJ0EvXlMxWb=mWluqJYjmWSjm=tpvWSRPJbW0Wluq=b16JSwQ=S1xWYi1WxEbWlWxWtpb=SF0Jb1/EtuDXOGxJbHmExueWbvvESEUXS=bXSu/=OR/XSJqJ0jmExFQEtueJSiYESGDXSvvWlRxJxsqXlJ/JSJ0=YN1WSGQWYuAEOR/=lJe=SFPJSW6J0ibWS5mJxJ6=YMQWYpUXSFqWtsQWxj1=tNm=tJAWYs6Wx=vW0JP=OR0WxuQWxFDEOWQ=b=bJYseEYMe=SJQJbNmJb10E0j1Wb=UEls0=SHYWbJe=Sp1=SibJ0uPEts/=Ou/=S1/=bweJYuqEbimWx=b=SpYESHb=YMxXOjUXlJDJlJPJSwAWtJ6WOEY=t=UEbwDE0sDExW/=lJDXSJ0ESwe=OJ0WOuAJSNm=tNU=YjYWO=m=Ysq=SNbEbWA=SFQXOvYW0=mJbGDXliYXSM/Jx=vWYuDWxWPWbsx=OUvJlNUExMPJSvvJb=bEx51=bUYWbjbEtWQ=tiUJYjUJxpUEYuDJxuqE0uAJlp1EYivWSJAEbJPWlN1WONvEOvb=OJPEOEvEbHbEYRAElJQElRQEtR/Ex1qXOweEbJeWO5vWlJ6XSWxXlJ/EOpUWbG/JlR0WSE1JYpvWtseWxGPWtJx=SuDXt=YXS1q=SMPW0EmXliUExs6WSFxJYR0Wliv=SjbEbpvXS1DEYJAXOMA=tM/WSNYEOHYWxF6JxFPJbE1JlJ6WlMQESNUWlWQ=OsqJSUU=tWx=bJ0WxGAWYMqESw/WS16ExGxXOM0ESEbE0jbJb5YEbFDElM/XSJAWxwxE0W6=bWeElRqXSu0=SNbJ0ivXS=mWSuDJSF6WYjUXtEvEx=v=S=vE0RQW0jUWSMQJxvvEOWxEtiv=lRPXlR6EYN1E0RAJxibXSEvJ0RxJxRxWtpU=bJQWYimJxN1WbuAExR6W0JAXlEv=OEYXSs/EbWxJSjvWlW/Jxjv=bueEtjbESM/J0J6WxFeW0imXO=vXSG0EYs6=bEvJSWPJxu/JS1eJSRPJxNvW0RAXSpU=lEbWOw6WORQ=tMA=t=bExEbWO1AESpbEOUYWYueXtJ0=tJQEOGxEbuDWbJDEbF0=bvUJSvb=Yib=bWPElRe=O=UJSwPEOwqJxUUExwPJxW/XOuAXSRxESJeEYWeXSEY=ts0JYJ6XSwq=OueXtsx=SJQ=lpYExMQEbJqJ0WDEOiYWYjmJSFeWxivWSHbXtsQ=lpm=OEbExsQ=SMP=lJP=ORPW0j1JYsAJluD=lsQXSuQW0WqWlJeElMAXtu/JSU1EtW/EluAJxpmWbsDJbwxEOWq=SJ/JSF6ExM/WOGxJxp1JbM/WSJAJSWDWlsxWSs6WtNm=tMPWxUmEOJqJxpvJlWqEYu0JbFeESvYXS=vEYJ6Eb1DESGxEONm=SUbE0RQExUYWtjYEtsQWYNUE0J/JlMQEbFQ=OwxExivEbwDWSNYWt=mWb1q=tpY=OJ/WO5vEljb=YuxEliUWOWeJxiv=YMeXlEUWYjmElR0WOJAJYJeESvbXOUvEYueJxH1WbGxXtMDEYM6JSsAW0NvExW/=bjUES1QWSjvWxMq=O=UEY=1EtM0XOJPESsq=Ou6ESR/WS1/XOvbXSFA=t=UJbRA=bi1Jxw6ESN1WtpbEtMAXtR6JbGAWbUU=O1QWOwAEOsx=lM/EOpY=tpb=ti1JxR/EbwQEtpmWS=b=bF/EYueJSuxJYM6EYi1W0uQJb5Y=OEmWOH1ESwqWOjmElM0=tNUEOi1=YM6WtRDJSHmWlWPWOMQ=YMqExs0WlW0JYJPW0JqWx=UJYR/=lWPEtpmJSuxEOueXtMeWx1/WxHvJSvb=tRqXOimWx=1XSNUJYRQEYJeXSpmXSFD=bimEOjYEtN1=bMxWYWQEtiU=OpUEx5bJYpYJSEvJxsPXSU1E0NU=OM/WbW0Xtj1E0RPXluPXORqEtMDWlJ/EYRQWbM6ESUvEx10WtuDXSvUESUvJxW6WtpYXOWAEOHbWlsAJxMQESvU=bweJxi1EOWAWOF6E0N1Xt=UWYWDWtJeEOjvJxUUWb5vJlJQ=bjYE0s0=bs0W0=bW0jYXtRA=SuxWY=mWYW0WlJP=bw/WSWeJbG0EOWP=b51Wxwx=Ow6XSN1EbGxEOv1=bFPXSEmEb=m=l=1WbHvJl=vJYJ0Exw6=bUUWxRQE0JAJSu6Jlp1XlMxWlEbEOWeXtMPJbv1WOsxXOMA=lu0=OvUJSwA=Ow/XSR/ExivXOF/E0jvXOwAJY=bWO1DEYR6ESJ0WYJPXts0XtNUWSMeJS=UJbGAExu0XOJAJSMqWOUb=ORqWYJ0XSHbXlMeXtpv=OHU=Sv1=OW0XtjUWYR6=lEYWbRxW0Nm=buQJlNbWSMAW0jU=Opb=tEbJYsQWSFqWls6=SjmJSMAXOw/WtRP=lpYWO=vWOueXOHv=bUU=bweWSJ0JbjvJxsQ=lRDXSsP=OHvJYp1XOs6WOJDXli1ESs0EYsP=ORqWtsQJYs0W0NmXOMDEbsqEYjYWS=mW0R6WlMAXOibWtu/J0sD=O1QJbNmWO5mWSJQESjYXOMe=SFe=O=b=tp1E0sxWS=Y=li1WljYEOFPXSHvJxR/WOpY=bWD=OMQJS5UJ0jbWtEbE0MD=YEb=SsAESNmJSMqJbiUWxMDWOGeJS1eEx1/=SRxElseXOEbExM6=bwxWlivESjYEOueExHYEtsq=tEv=tsqJxJ0XSjvExUb=ljUWOwPWOwe=OUYJxvmXli1Wxj1Wx=U=tMqWtEmJlR/J0M/Ex1D=lRxEbNUEtuQJx10JSsQWOjvW0WPWbvY=SJPEYJx=O5UJYEYJbR/JYR0JSsPE0R0JxJ/XlJ0EtiU=lWDJlReEtsQ=SWe=SsDEtJ6WYuDElW0=OJxXSWD=OweWb=Y=SseJSibXlRPJ0pbWOMDXOvbW0NUESWAJbGqWxEmEOpbESW/WOFeES=1JbWeXtueJx1DWl=mJYEU=Yi1WxjvXOMqJSu6JSRQESHbEOwq=lReWtueXtMDWOv1JbRAExFDXO5vJl=Y=bR/Jb5Y=SGeJlM/JbMDJ0N1JS5vXO1A=bHmJYNmWSG6XSwxWlJA=OwxXSGAExu6XtJxESRAWS1AWbuQ=bweJS1AElEUJbsQWOu/=Y=bWtRPEYR/=SpYJxMQXli1WYW6=SwqWYReWYWAWOUUJlpbESUmE0seJbWxEbsDWSGDWtivJYEmESFeXSuPWtJxXOWPWluAXO=mEtJD=OsAJbuqXSweESEv=bGDJlMDXSpm=SwxW0MeEOiYEtJxWSj1=lJDWbvYWOMqWO5vEluqWbUUW0seJYjvXSuA=O51=OHUElWqWSJ/J0uP=SNm=bW6EbHbJSGQE0=1E0W0ESW6JbUY=YJ6EYWqXOMqE0NYJYsQWbJ0JxUbJSWPJxw/=OW0JYi1WO16XlEYXlM0E0WQ=ONUExuAJSiUESueJYMeEOs/JbvYJb5mJxJ/E0JPEls/=O=vWlEmExEYEtJQXlNbWS=1WxUYExwQESs/XOG0JlpUJYWQXSNUJSwqXSwDXSMqXluPXlJ0WxEvJSEb=SMq=lJ/WYs6EbJxWORDXtRPESJ/EYMqJbvm=SimWxE1JbM/EOJDXlM0ES1PXtuqEOR0JbUvJSWDESMP=tJeJ0RxWxE1EY=YXOJAWxw/WlpYEYEbJlsqW0E1WbuqXSFAJYJ/XOvv=lNvEts6=YJPXONvJbNbWtMAWOibWxu/EYW/XtMxXOJAWbJ6WOMQ=SNb=bvUEO1DJYu0ElNYXlu/EOEU=Yu0J0i1J0s6EOJqWSv1J0EUEl=bEYNb=Y=1=SHbXlRAXONbWYiYESs/Wx=1WYNYXlMxE0JQXlsP=OMQWSMP=OFD=tiYW0Jx=SU1XtW6XOHbW0WAESJ0ESNvXSsQ=tjbEbpmXOFA=YuD=bHYE0MxWb5vEbHUElpmWSGq=OvYEOweWtMx=lMeWts0W0ibJxFeXtEUEx1DEb1/JYRxXSJ/JSuQ=Os6XtsPWOJ0XtMAXtMPXls6JSWQWbw/Jb5YJSpbJbWxWYRPEORDES1AXS1eWSuAESNYExUmWORQElReJxJD=OsqWtu6WYRDWO1D=O=mESMAWxRAWSuxEbHbWbpvEOvbWSw/JYsDWlpU=bMAElJDXSj1XtuP=bNbJbwAJSiUXtWAJYuxESM0ESR0XSJAE0s0=Sjm=SWxW0MDWOJDExW/JSUbJ0seJ0EvW0MQXS5YWxjvWSMeW0ux=bRQJ0EbW0R0=Op1JSwPEx=1=YJqE0RAJ0JAJljYWxFA=O5U=tRxJlsxWbpm=bu6EbvYEbs0ElNYESF0Wli1ExJ6XtWPES16EbJQE0uq=Sib=OE1EtWxXO1/=SJxWxu/Xt=1EbsxXS5UEY=1=ls6J0sQEb10XlMxJxs0XSNUJSUbWOR0ESRq=liv=O=UESsq=OuxEx1QXO5vXOu/WSiUJxUv=OG0ESW0Wl=bXOJQExNUJb1QXt=1WlR6W0J0XOW6JSsAW0iv=luQ=li1WtivEORA=YWA=bE1EOwQWSJQWxJ0=OsqXOuqEb=bWSpm=OM6=SWDJxR0=b1xXOJ0ExsQJYuPWlpYJ0RqEbU1XtW6ESW/XlWDE0j1Jx1DJSGe=Oj1JSv1Ex=vJlMqJbGAEbHvESvUEOu6=bpv=lEvJbNbW0MAXSJQJS1qWOw6JS5mW0sAJYJAEx5bWlNv=bvU=tu0EbJDE0pU=SF0JSpmEOJ6WxJ6WbiUExE1XOueExMeESs/Ex1q=b10=OuqES5mExsDESHvWSs6WYux=bRA=OuAEOw/JbuPESNU=SsP=S1PJlsQ=SGqJbp1JxNUEOJ6XSWQEbE1ElJPE0RqJSM6XtWqXtivEOF/XtjbW0jv=SHY=lueJ0pvJSjUEbs6J0uQ=bMxExNvESR0WbMAESJQWORqWYsQWlJ0WO51EtJP=t=1XOs/EtMxWbJqElu/=bwA=YuPE0W6JYMDExwPESwP=b=bWS5bEtMDEbGqEOwDWlMD=O=UXSuDJ0N1XtuAJYsDEORPXlpYESvmJSJ0JSv1E0uxEOpbWb1Q=YWA=bGAExFQ=OjvWxM0JlWP=Sw/ESFDWOWDJx=YJx51WbU1=SuAJ0EYJYiYWbibXtRe=SW/EtEvWbMDXtEY=ORxWSpYWSRqWO=YXSFxXONYEOG6WbRQ=SJxXO5m=Ov1J0sDWtJ0ExMeEbH1WliUXSWPJSiUXOpv=bR0EbFqJx1eWS5bWOsP=tseJSsqXS51EbE1XtRqXSJeWxJqWOM/=lR/JYuDJ0MPWtRPW0jm=tjUXOJ6XOvUEtMQJSvmE0NmWbvvJ0MDWSFAXS5b=tsxWlp1=bv1E0W0EtuqWtJxExMeEOs6JSH1=ljY=Yp1ExMqXt=U=bE1ESR/=YuxESWqJSvYXlJQExpv=tpUXSsx=OwqWOjbWOwQWbwe=bJ/EbsqEli1=OEYESu6WYW6WtjmJSJqXSFQEYE1JSMQXtE1WbMDEx=bWYR6=OvYWtMAJljUWOi1=tuxWbMDJxFxElJe=O51W0s/Jls6=SwxWlNYXOWQ=YEvJYEbJluDW0RqE0sx=bFqWbpmXtiY=OuD=YjbJ0iUEYJ0ExUbExHmJxH1Wxu6WbWqEbHUEbweXSGPWbUUWYjUXtR/Wliv=YuD=lR/ExGPEOFQEls0=bRqJ0WDESiYJbweJxJPWtjm=l=bESjbWSJQEOweEY=vJbGxJxWPEtW0WbGAElpmJbF0XSW0WOwPEOpv=bFAJYE1Etj1WlEU=b5YExGAW0pU=SsqWSuQJSN1=Oim=ljmEO1Q=bMAEb1qJbRA=buPWOweWxu6=OEv=SsQEbwqWtpY=YWxEYW6EbMPWYNm=ljmExuQ=bR/JbNvXOGPEbu6WSjvExivJSux=S5bEOu0E0M0WONbWtW/ElJxJSG0WSW6XSUY=YJPJYWxJx5mXOF0JlRPEO1xWYWPJxvmEbu/XtWq=lseE0WxXtJqEYpv=lux=bM6WSvYJxHYWlNvWbjbXlRxESUU=SN1JSpmEOF/WxWAW0sDJxJQ=OFDE0R/=OWqWx1DWlRPWlWxJSNmXSH1EbFeEOs6JxsP=tpbEtsxEbu/=bW0WYNUEbHmEl=b=tW0=tsAElpYJSEvJbFxWb1AESGxXSG/WYR/JSpv=bsDESJx=tRxWbUv=YuxWbv1WxEvWOsAJxMAWSJ/JlR6WxHbXtpbXljYEtJ/EbMAW0s6WbsQEYu/EljvWORDJ0ibExNU=bE1JxJQESMQXS5YJYuQXl=1JbWQXlj1=bs/WSNYE0ueWYuqXS10ElRxWb5vJSwD=bReWxNmWOMxJSW6XSv1XlW/Wlu0=bJ6JlRe=SEUEYMQJlpbJS=UWOHm=SuqExpb=YJPXOw/Wxu/WYiYXlMDWtj1ExpYJSWQE0MQWbNbExM/WtjUWb1/WOEYXSimEOFPJSuAWxwA=tuA=lM6XSw6=Yj1Jxu0WSR6JS5mJSjmWSuAJYMeXts0=ONbJ0i1WtMQWxu6E0=U=YW/ElJxE0J/JSMAWSJ/WlW/=tNbWYsPXlpmEbjv=bseJb51EOHvWYu0ESs0XSpbE0EbXOjYE0=bWxu6J0R/EbibWSivWSMPWtuqJbp1=O=Y=bwQ=Yu6J0R0Eb5vEbGeXtpbWbM0E0Em=lWeWxJ0Etu0WxGP=OsPWlimEbNvEOsAElJqJYuxWOp1ExsDXlpv=YuA=bsQJbW6WS16WlW0JxG6WbR/WtJ/JbG/WbFQ=O1DEtiYXSu6XOG/JSHmXSFqWbpbWtN1WlWqJxHUWSRD=O5YEY=1WbR0=OsQXOUb=SFxES1DWlu/XOMDXliYXtsDWbj1ESJAEbJ6EYim=bUY=bu0WlJD=O=1ExFxXtWAWtsqESGxWt=bWYJxWtJ/J0p1=tiUJSsxWx1xEYjmESFxWYNUJbReEYuqExjvXtWPJxwPEYM6XOu0EYR6WxUvJlpmJxibXOsxJb1/WxJeXtW/EOjYXOF/WlWqXOJ/WbivJxW0XSHvWbFD=YWeXlMqXtNbXlWxJb=b=SiUJxjmXl=vWYNv=OEmES51=ljbW0pUXSNm=ORxWximExiUWOWQ=bvvEOv1JxJDWlNbJSJx=OwqWlJQWbM6WOjmWYR0ESi1WOjY=bw0EOJAWYR0EtJ6EYWqJluPEOU1ElpUJxNb=O16J0s0WlEbEbJ/Jb5UEYu/XSF/WxHbWYiUJYsDJbJ0Wls0EtJPJxHYJbMAWl=bEOu0XtsA=li1=Yib=bMAEbRe=OUmESJqJlJ0Xlu0Eb5mEb5vElj1XlEv=luxEtp1XS1Q=b=YEx10=bGxWSGAEbJ0J0sDJxReXtJD=OMeW0NbExHbESEUJSvb=SuPJ0=bWOiYEtu/=SMQExEvWS=b=OJDJSFxJbMeEYRqJYEbWxGQEOFQWbGq=SwDWbMqE0s/WxJ6EtWAEtRqXSRQEl=U=YiY=OMAWOsxEYj1WS1DXS5b=SMeJbi1Jx1AWOU1ESMDJbimWtRqJb5v=bsAExw0WS1AJxv1Wxpv=OJ0=t=UEbvUXOvmEOsD=Swq=tRPWl=b=Ypv=O=vEtu0E0RqJYWxJYivESvY=SG6WOR6WSFeJximWtJqWlJAXlEvWbJQWSuQEbRPWtMQWSsPXORQJYMxElJ6WYjvWbvUXOJxWtWDWbM6XOR0JSHUXOW/XOMAWx5m=lEYJSM6WSW/WbJ/=SueXts0XSR0XS1Q=YWPEtjYEYMxExE1XS=1Jl=mJbuAWbw/Eli1EO=Y=OR6JYsAWYuQExpbWOuqXtWAWxsq=lR/W0E1WORAEOReJlEmJY=bEx1A=OjUWYjmWYWDES1q=SGAJlRxWb=vW0im=bWqEbjUExWQWtuPWSGDEO=b=bE1WSs6Jx5mJxsqEOJeWbMeW0RPEbRPWxjmJYuPWO10EtMD=O5mExMeEx1/ExRQJlRxJbjvE0R0=tEU=bwe=YEvXtNmEb1AJ0WxESMeEtiUElEYJSs0=SvbEtMxJlivJxwAExsPJSJ/EbGQJximElR/EtM6WtRqExN1=bH1WYReXOUvJSjvWbsx=O1DWSUm=bRDWYNYExseWxMDJxEb=OwPW0s6=liv=tuDJbWAJ0W6E0iYXS16WbsPElR/XtW6=SMPE0RQWO=mXtEvWOuD=tJQJ0WAJSJxJbwQJlJ/ESE1ESiYWS5v=SEmEbwQWbFqEOvYXtRxE0RQWSEvEts0Jx5mXtNbJxM0JYRqXSHUESEb=YNU=Yi1JlMPJSMDEx1QWSHmJlMe=Y=vWSs6=bFAWSJx=Ojb=SMeJSG6=SHbEOFDWxEbJSGxW0NvExG0WSRD=SJA=SG0JbFeXOivXS1xW0MeEYsD=YsQJlsQJbFD=SjvXSFDWbMeESJ0W0NbXlRxWbHYWtRQWYRDWYEvElJAWO=vEYN1JSMxWx1eEYMQWYE1WSFPW0R/W0seJSNbWb5m=O5vXSMq=Svb=SWQESjYWSGP=OW6W0jY=ORQJYE1=O=vJSJqJ0W0WOsPJSF/XSHYW0M0WOReXSw0=bvUESpm=YuQESW6WOM6=bjYWbJ6XS=YJSsQ=Sj1EYjvJbG6ESse=tJQESpYWOpmEtWqJbwQEluqElJq=OuxJSwPWYp1JSEv=SGQXluQJxJqEYMeExWxJSR/=ORPJbMQ=SiYWSEvEljYWx5bWOF0XOWQJSuxWtWxWYNYWxHbWlR6EOJeWb5YJxGQWliYExGDESWx=OWqEtR/=SimWSwe=lRxESiYXOF0Wlim=buqExwAWbwDEOpvXOFDEOMeExWx=bFeXSw/=SF/Wxs/JbpYJSuq=bFP=YuqJbNU=tMx=Ovb=tu6ExsAEl=mWYiv=YR6JYNbWOFPJ0ivXORAXOEb=OsAE0sQJSiv=lseXlNYWbGqEOwPXSGQ=S1/XSR/=OFDEbEb=SN1WSwD=ts6JYJeWSivJY=bE0R/WYueJbNvWOJ/WlR0JbRAEbsqEYiY=Yi1JlM6WYM6W0s/XtM/JbM0EbNvJSNvW0JeJb5mElu/JSHbEbWeWxjmW0s/WtW0EbvbWYjYWbMQWbWDJSjUElu6JSUUESEb=bHvJlJeEOjY=tWQESjbE0jbWOu0Ex5YJxjm=OjbEtsQWtJAW0uq=bUvJSFDJSF0WlR6JbFx=YEUXSwxEYp1W0WeJSR/E0jbJSFDExF0XtN1EORPJxjUXSuAJYibXlu6W0NvJYsqEbJPJxJ0EtRqESGPEbG6WSwqWx1eWlRA=SFqE0W6EONbJxM6EbRQEYNm=Y=bWxUYWSG6WlWQWtM6J0seWxRxElJ/W0JqJbJAWxJD=YNYWO10J0WQ=SGPEONbWbEvWlivWYj1J0s/EtuxWSsPWlivEbwqJ0EYE0pb=YRqJxsxJbpbESuDW0=U=OHbJbwD=bj1=lsQJSpm=bwxJ0RxEbW/EOWAJ0sQWSiYWOwA=lJDExjbElReESFPJxH1ESpm=lRAWOG0=tRAJxuqJx16WbUvES=mE0WqJxiUXOwqJbG0Ex5YWljb=Ys/Jbj1JSu/XSvm=YuPXOuqE0p1XSW6XOvU=OFxEOEbElJDJ0j1=OR0WS16JSs6WxNv=OFq=YE1ElpY=OWqJbJA=liUWYJAEbwQJSJeJxRqXlW/Jbu6WxEYEOjmWlu6=OpmES5mWORQJSw6JSwPEbsA=YRxJSpm=S1qExEUXSG/=bEbXOwAJlp1JSuxWYWP=Os0WSR0JxwPJSMeWYs/=bJQWSJqEO1xJbUbJ0=b=lE1Jxs0EbpYJ0ueJ0MQJbNbJb5vJlWxWSHvWO=YJSJq=biUJYpYJ0J/W0J/=S5mWxjmJYiYE0pmW0EmEY=UEYJeWxH1WOMeWbuqWbJeEOFPJSW0JSibJx=mESJ6=lR0EOUm=lW0ExJDJYu/EOGxE0s/=bWqXOWQXlJDXOGeXtWqE0pb=OM6=YM0=OsPWljYXtJ6Wtse=lJxESNUJYWDWxwDWYRDESWDES=1XSHbWluxExHYWSWQXO5mJbwxJSi1Eb1qEtEbWlNbXlReJlM6WbW0WOGP=bMP=bMPEtM6=OvbXtiUWxMDWSWDExiYWtWAWbsPXOG0XOpbEx1PEbG/WSjY=OWx=lM6ElsqJlsAEtM0=YM6WbWeJSMxJYivWbvUESG0ExpYJxF0EYJDWYWAWSF0W0M/=O1DEOGQXlEvJSpYXSiUWOpbEx1/WSimWOF6=OU1=YWDJS5mWtWxXOiYWxpUWOJxJSu6JSweE0=bESHUESFeXOJ0=lJe=YWDJ0JAJbNY=YsAEOjbEYsPEbGQEOF0=SEbJbw6=luq=b=bWbG/Wts0EbMPEYivXSWAXSRxE0JA=lWqJYJ0WxR6W0uQWSuqEYuqEbEUWxG0JlRAEbpYWOi1WxMqJxNbJbw0JbjUExpmEbGQXOHbXOJAWxMqESEvESw0=Op1XO1PEYibWbwP=bsP=OuDXOEv=OvUEbUYEbJeJSW/E0J/El=YESuD=bRDE0N1EYpYEbR6XSuxEbsQJSiUXt=vXlsD=bUYJbWPESGAWYEvJbjmXSpYW0EmXlueJb51WS5mWlEY=b51XOiYElNm=bEm=SU1XOivWb51EtReJYRQ=OimWSsAW0p1JSuDXlM6ElMeXOWD=bF0XOMAEbW6XliUJbvmEOsP=lNUXtseWxFqJSuqXtuPWbJ0EluPWOWx=OUUWbFAJliYESjUXOivXOpvEYNU=OjbXSMxJbWAWOpmXt=UJSM/Wtp1Wl=YXSGPJSsDXtWAW0WP=Sw0=OibJ0J/JbWDE0RxESwqWbG0J0M6Elue=bEUEYJDWbJAJlEUWbGAJlpbWxvm=ORPEYR/ESF0WOJxJxFP=O51JSwAExueXtJqEYseEY=1W0J/EOReJxw/ExueXSUbJSwe=OpUJbH1=SpvWbwqESG/JSNb=tW0WYWqXOsP=YiYWxwPXlRP=OFeESu6WYs6WlsDES5mXORPWSWAEO1DEl=1EYJ0WYuP=OwQES1QWOMDEYsxWxUvESM/E0uqExF0JYpv=bpYJlibWbMeXSUYJlseJxjY=bvmWti1Xl=bWbH1JSpbESR/XtRqWS5UElMPElM/WbRPEtj1EO1eWbJPEO1DWbN1XSM6ExG0W0RQ=SwDJ0ivJY=mWx5bWbM/=OwA=OW6XSM0WbUYWYWQWbF6ESFQJxFQWb1x=OJ/EbJAXSFAWOsQEOG/EOGQWbUmES1eJYpU=bim=O5YESGqWlu/Wx=UXOpbXSvYEb5UXlEmXSW0WtW0=Os/WxRx=lNmWtueEbim=OsA=tNbEOjYEOjYJYNv=bWQ=S=mJlpmWSHbWbuP=Swx=SH1WYR0JSueWb1QWxjbJ0sAWSWxJbN1XOwA=lJe=OW6EtsAJxUvESMDEYuDEtJ6WYibJbueXOHvJYpUJ0E1=YMeEb1QWxHYXSMAWlJDEb5mJl=1EtRqWSM/=ORA=bEbWONvE0NmJbGPJYJQ=b=1EOs/=lE1XOHvJbR/WbHbWxEU=OMQWbJ0XlEbElRAElJqWbRAEOEYWO10WO1qEYJ/EbWDWlEYEbsq=bHmXtWQWxwD=tpYWOjvWtuxWxGeJYMDWbEbXOjmWxjU=SseElJxESR0=Ow/XSGAXlR6Jx1qEbpmEtReJxRPJSJPEbGqWxHv=O5UXOGDJluD=limExs/EYJ6WSNv=YNmWYuPXt=b=tjbWlWPJbMPWbjb=O1xJY=vWbi1=SFPE0pUWbJeW0=YElMQJ0=YJlM6XOvmWOUUEYRD=SNmJbHUEtR0WY=UJxseElM0Jbu/JYuP=Yse=YuP=lsAWOib=SHbWxEmWSF/=O5YJYp1=lJ/WYJeEbsqEYpmXtJPExjYJxiU=O5b=OvvJx=1WSR0JxvmWbM0=SGqXOimWYsDJbFqXSp1ESF6EluPEYMq=bUb=b5m=Ys6Eb5YEYs/=OEvJYpUW0iUXSvb=ti1XlW/WtuqEYs0XSpb=tJQJ0s/ESuQWbF/W0R6XOFP=SiY=lueWlJ0EtMQWxEb=SuP=YN1XSHvXSFP=O51Wb1A=tR6=bw6WxHUEtuDESRQWbUUWxHUJxi1XtM6EbFDJbHmWOJAWYJxEls/WlWqW0ReJlReEtJeXO1P=OMDWb=YWOiY=li1WxR0EbGeW0EbXONm=lN1WxibElNYJxRDEbwDJSG6WbWqJxM6Ex=1EbweWOFeEOGeWbRqJSJxJbpbJSwQXOj1WO1xXlJeEbGDWYu6WOv1WSM0JSwxJxUbWbG0WO1xWtWDJlJxEOJqJYWe=OuDWxweEtib=bu/XSs/W0W6ExFD=lib=bv1XOG6JbM0XSueWxW0WOF6=bN1WxFxWbFq=SsQ=tu0JSWPEYp1WtEmWtWqJ0Je=tpm=lJxESw0EbGqWOiUXts0XtpbWYJxWbs6WbMxWlRqWlpUXlNYESF6=lW/W0pb=SuDWSEU=bEYWSjY=S5b=tWqExse=OM/WOsA=lRx=SjmWYRq=YsQJSuD=YpUWtuQEYNvElJ6EO5vEtueEbR/=bF/WOJDJSwxWl=YJbp1WOF/JxEbExs0JljmWOFeXOwe=lpY=lMQWtReW0jbXOseJbJeWSMP=Y=YWbu6J0JeJ0J/JxFDEbwqJxGxExNbJx1xElux=lMQWxwPWxJPJSWAJbUvEOJDW0pmXOwAWY=mWbR0=OwAXOuqEx=vXSivXtpYWxWPExUUWOHYXOFP=YR6WxG6ExMeXtJQE0MqWlivEtWeXSN1JxGQWbJQEbMeWxsPESU1J0sqWlNY=SW0XS=bWOFQJxG/ESNmES1eWSjYEYW6JbU1Wbs0WxwxJ0JeWxi1ElEmWOUvJxwD=SEvESwxWbF6E0=YJ0RPES51JYsxJbG6JYE1WbNvExu6ESFeEtpbWSwxXS=UE0JDWb=vWOFDXtM0WYJ6WSNYJ0M6=lMDE0Ev=SJ0WOWq=ljY=SuQ=OMeEbUvEOHbWxsPWlMAJSuPEbFAEl=mWYuPWSEY=lEUWls/W0i1WtMPWYuqWxReWYimWYRDEbjU=OMQJYu6WOMPEbpUWbHbExRxXtRxEbpbEtWx=ts6=YJ0JlEYWbFPXOWxEOR0Wt=bWtu0EOs6=Os6EbimEbFAJSNmESFeXOvvXt=YESMDEbR/XOuQ=tM6WxjbWlR6XljmWbJqJSR6ExG0=tpvJbRD=bwqEOvU=tM0JbE1WbGQWlsxEbEU=OimXtJ6WOW6WYWQ=SF/ESWQJ0jbJSpYJYJq=SwxE0MP=S=UE0uPXlN1=bibWxN1EYW6WxJxEt=bWSpv=Ysq=S=mJxiYExw0EOJQWOEmJYJ/E0N1EtEmW0i1JSpU=YuqW0=1XSU1EbJDWb1e=S=1EbpUJYsq=YJQ=YMPXlp1XOR/JbWPXtRxEOibEYM/XSM6WtEv=tW0EYJ0XSsq=SUY=ORDWO=bXSWxES=vJbHmE0uQESGAESGeJl=YJbGx=YRAJ0R/ESUmEx10=b=UExF0JlMP=S=vXOGeESv1EtRQ=OMqJxRqJlJPXOJ6=O10XOGqXOR6W0u0=SHvWxRD=bMDJbJPWYJe=lJDEOEmWOuxEO=YWxRDJbv1XON1WbFAWYWD=S1qJbjYWlNvWSNUJxuxEYRAWOReE0J/=O5UWtM/ExGq=li1XSUvXOJ6XOpbJ0R0WbHUE0WDElW0=bw6WSNUJSG6JxuAWSG/JSMQJlsQJxW/EOJDWSUYJYEYWYNYJSuDWlNmXtR/Elsq=OsQ=lpUWxMeXOJeXlJDEbp1XORPEbHvWSuDWxuAEORx=tu0E0JeWxNvESj1J0RqJbNbJ0uQESib=lp1XtWxEx5vJSF6ElsDWbGe=bRDJYu6WxEbEtMPESwx=tsPWxWQXOEbWY=UExRPJbNmEOMxJluD=OWqWlJxJSUv=OGeJxGe=bpUWxu/WYs0ExJAJS1qJ0s/Exu/JbNYWYpmJbwD=lEYWOu6=SGeJbuAJ0JPE0pUExpvWxJQJbG6XONv=Yu6EO51XtWqEb1PWbNv=S=Y=tMQ=SuDWbwDWOu6ExpmWYuAXSWxWlEbEYEmEYWqXlJPExWAWO1eESE1Eb5vWYEmJxwxJxi1ExNm=YEUElsDJSNmWOF6=tu6JxiYWbM/JSjUEtp1WYse=OuDWbHUXSJeESJ6WbvbWS1e=b=Y=tJ/WtR/=tWQEtu6=bNYWONU=lE1JlEbJlWAWxjvJl=UWbGPJxv1XS1QESuq=bR6WxMDEb1eJSvYESsDXOWAE0EYW0s/WOWxEx=mJbuAEOibWxUbJ0s/EO=UXOUv=bjYXSv1Et=1=bRqWbUmJYMqJYEUJbuqJ0W0EO5m=YjUXtuP=lJqESUv=bux=bFxXSwQEbGqElsDXtsqJYiU=S=bJbibXONmWbux=l=1EOi1XONvJSMAJlpmJbvUWbH1WlJ/WxsqXtEU=SJqXSF6WSNvJxw6JYNYWOJ6=SR0EYJ/XOpUJxHbJ0=mEOWA=lRx=OEUW0pYJSiU=bw/JYR0W0W/JSv1W0JPWlp1WbEbXSw/JxWeJb1QWOW6=OWeExJ6WxWxWOi1WxMD=SuQJbJxXtR/JY=1WOHvWOF6WxvvXlR/XSHYXOUYJbUv=t=UEx1PWOUmWxibXONmJSsP=lEvWtMPXOuq=lWDEtWAJxNUXtimEO=UEbu/Wt=U=lRPJb1/JYs0ExweWbNvWbpb=bUvXOUbJxM6JluQWxGPXtMqJSFxWOuPWY=YXOWeWbueExjmElMDXOpbWS1PElsAEbuAEbMeJxi1JYs6Wb5bWb1/Xl=YJYMxJ0uP=YWqWxJeJlW6=lp1E0EvJSMxWSJq=bGAESUUEOM0ExNvXluPE0MqJYsPWxJD=OF0=ORxWSueXlu6ExvYXtNmEbW/XlN1EbwQXOG/EtEmWYJPXO=mEtN1J0J6JYW/EYR/Xlu/Ebs0EOpbWYReEtpYEYsxEtM0XlMAEx=bJbjUEbJPXl=1ElMxWSUvJSRD=S16XljYWOpUExMDWbuDWlWeEbF0WYNYExuDJxueEbW6XOsxEOMDEOJ/WtjUJxpYXlN1E0M0JSuq=bueJSjY=lEYExUmES1q=OGPJl=1XtEv=l=YWYMPE0W6W0uDWbibWtuqJYiYXljvElNbJxsAXli1JS5vWxGPWtMq=tMqJSpbEbuxWYuxW0WQJ0J6EbsAEO51JSJeXOMDWbRxW0pUJbNYEbvYEtWDESi1WxF0W0WPE0NYWlj1XSJeWxJ6Ebs6=YjUElEUEOjvEbEUJluDESHbJxue=bG/EbGD=Y=b=SuAEOGqEOWxEYMPEOpmElu/XtjbE0JxESMxWtjvWYp1ElM6XlR0JxM6WxuPWOJ6JxRP=O10XSNmJbj1=SWxJYp1ESJ6EOvUWxJQXSWqEbRq=lMPJ0sAES5U=S5U=bGAE0R6E0MQJx=YWOR/XO5m=OGQWSGq=bGD=SMxWS=vESiv=OHUWSMQJxWqWxJQXSF/WbJqWlR0J0pUEbu/EOsQEOuxESR6ExGxElJxElivWYpvEbpmXl=YJbpvXSvYWxRDJbW6EbF0JxG6EOjvXS10=tuAWlsAWbpmJYuAWxRqW0s0WSJP=bwAEOuQXt=1EYMxW0J6JbimWOM0JbuxXS5YJbW6WtJAXl=mWOvUJYM/ElEvJbvm=OuqWSpbXljU=bueE0NYExRQXOF6Wbu0JYpvEbseJlJ6=ljbJSN1=Y=bJYsxJSMPE0=UExGxXSsDESRQWbH1XS5b=lWAE0Wx=lp1WS1DE0ivExJAXO1DEOiYESFxW0EvJYJeWtsq=YpY=tNbWbMAXtRxES=mEbM/=YsqEORAJxUbJbRxEYsqW0=mJ0jYJlNvE0pmXOpYEYEbWOibXlMPElMx=bW0W0seEOsPJbvmEOUbWxjb=SueExu0WbJ/EbNYXS1qJY=bJ0JqWOwqJbGxXS5YW0Nm=YJ6Wxu6WYReElReWxuQElRA=SjmESs6WYp1Ebu6WtpbExFQWts0WOw6JSG0=O=m=YuQWSsQ=YRAJlM6XliYXSvvWluqWbNUJxu/XOiYJ0WqXlJP=bjYEOJ6=ONmJSM0JSFeJxuPWlpb=tR6XlWxEtsqEOjYXl=m=OuPEOUUWbR0XtuDE0jvJxv1=SMAJ0MPJx1/ExFeWxpmEluPXlu0=bUmEYEvElJ/=lN1JxRQXOw6EbjmJYJqWxNbXSpYEtE1EOFQ=SvU=tJPWY=1EbFxWbJ0XOGDJxFAWO5bJl=1EbRPEYMA=lR0ElWeE0jUJxHmJxs0WSWAJbRQ=bFqWtimJlRDESRqJxuAXSu0WYJ/JxsQXORqJ0RPExp1=tJqXOUUWOFqJlWe=bF0WYRxWYpmWOiUWb1AJ0=b=buxXtpvEbMQWxvUWb1AEtj1=lRx=tEmESR/WluDJlWP=SJ6XlR0J0WAWYM0=lux=bEmJYpYE0WqWxuPWbG/Eb5mWOueEbHbES5bJ0WAJbwxEOp1EljmW0M6JSsPWlsPWxEU=tMPExu6JS5UWSR6WbpYExNUXSUmWOv1XSw6EOF/WljU=bNmXOG0=tu0XOG0WOwDWYuPXSibEONUWSH1W0M6Jl=vJSEmESNUWOse=SE1=SweEljUWlEvESGx=bM/=YW/WlivXOGxWxjvJlivEOMAJxvb=tWQWO1DEbvUJl=1=Y=bWxw0Xtu6XOJ0W0JQWxs0XtRAEYuQWb=bXlEbEbN1=OimWtW6=OGPEYMxXlpbWOR0WxMD=tRxXlpbWYsDEts6EtRD=tN1EbHYJ0=mESFDJSUUEYibJ0R0ExsAJY=1W0W0WxR/WbFx=SG0=lRxWbR/EbFe=tuDJSF/=OEbJ0M0Ex16WYuDWSweXlJqXSEvXtu/=OjmWbivJS=b=YWqWxwDXS=v=SpmJSF0ExUY=YRqE0W0WOiYWYJPWOuPWSiUE0=bXSE1WbjvESwqJSG/=bMAEtWqWxueJSEbWbse=bpbXOGeJbWQEYW6WbUv=tNb=SEY=bMQ=OHU=YR/=YRDExH1JYMq=bvvEO=vWOwQWxpvEbRe=OF/=ORDEOHYESHUXtRQJb16=ORqWS=1=SReJbuAExsx=OWAJYWxJlsq=SFDWxpmExJqWl=mWxs0=tNmJ0NYExNvJbivWSRqWlp1WbwP=S1AWbMP=Yiv=OJqJYM/J0sDXlu/JxJAEbiYWxu6JlWQEbse=b1PESMxWOGQWxvUWYueEbMAXSv1Etpm=bNU=bMAWtuAE0MA=YM6WOvbEbvYJYsPJbJqXtMD=OGP=YR0EYJDWxUYWOGeWbH1=YW0JSue=Ow0WlEvElN1WtEUESRqExjvXl=mJlWQXO5YExMq=Yu6JYsxEOiv=SpUExvUEOsAESJ0Wx10JbE1JSsxJ0seJSEmWSWxES1qWxUvXOw/WOMeESwAESs0JSwD=Yi1WSHbJS1AJSE1JxWqEbpYJxjvJSEvWtJxXONYWOvbEbG6=OjmJSWeE0pb=YEUJx5vWtpmJljmExRe=bJeWxux=YW6Wbs/E0pm=t=mJ0pmW0JA=bJqXl=vJlE1XSNbWOsAJbi1JlM0ESMAJYWP=OWA=OvbWS16EOEbE0i1=SFQ=ls6ExG6EYMeXONYEOwqEY=1WSsD=OEbEtE1WlW/JluAJxFxExiUXtMxJSHYES1PEbR0JYsD=OReJbs/EO5YEYWPWSUUJSJPXSNmElpb=bMAEbs/Xt=YEx51WSweXSuQEbEY=bGqWSJeXlEbWlRQ=SvmXSpbJbsDJYR6EbimE0NmWtu0WOpUWOuxEOJPEtW0EbFqEliYWO5UXtJeJSjYExjb=Ys/WtuAEOJeExEmWljUXO=1ESG0WYuDJS1/E0sxWYR0ElRxJbF0XSJAEtMeXtsDESHvWxJAE0Jq=SUY=Ou6WxR6XOvU=SR0WSRqJYRe=bFx=lN1XO51EO1AExJPJbNmES=YWbw0=OEvJSUmJYJe=bMD=OEvExW6Exj1WbWDJSM/Wli1EbUUESj1=YNvExGDESMAWY=1WOueEOWPEtW0W0sQJlu0WxWe=tjY=YMAXSMAJbR6XOu/ElWqW0J/Jx1qJlsqXS1PESH1=tu6=OWqJSvbJbJPWxF/Els6WOFeEbFAJYNmW0MeEOivJbG6JxWxWOwDWSFA=b=1=tW6EO=mEOWDXSRe=bGqXSwe=tu6ESuAXlimESpbEbGAWO=m=YsxJSFPXOvmJSN1=SwAEbJQXOvvE0uAXO1DE0MPJ0WPWOvY=bJQ=SweEb51EbFqESFAExpUXSw/JbG0WxueWSwAJlWQESWAJxJQJSMxESJ/WOGPXl=mWxRqWYj1EbHmESMAExJAJYpU=ljUWYjUWONUWxGQJ0RPWlNU=timXljmWxi1W0JeJxHUE0WPEO1qXtuPWYsxWtM6Els/WlEm=t=1WtW0JlM6WSsPJxiUWSGDJ0jbJYR/Jb51XSwQJxFDJ0uAEbuDEOWeEbvYESR/ElpbXlJAW0NUE0J/El=UESs0=OJxJSEvWbpYE0=mJxpYEbibJYpYJ0sxXtj1ExUvWYs0ElEvE0=mXlivWbiUWOFxXOFDExp1XOweXtu/XS1qEtJDWSE1XOGqJSvUWtJ0EtpYWbF0EOvbWO=1XlsqExwQ=Ss/WSEYEtMeEONvEYNmJb=1XO5YXSMQ=bGxWO1xExUY=bjU=SHYEbw/XljvJxueJbjvE0EbJxM0WOv1=bjmE0JPJxG0WtimExJAWb1Q=SNYXlJPJxNUXtWe=tWqJ0JxJxMQWSibJbJ0ExjUJ0J0=bHY=O5bJbG6ElRqWlMPJlJ6Etu6=b=mWOHmJSFD=tJe=OJD=tNbESM0=b=bWYMAJxNU=OGPEbRDXSvYXOibWOF/JSFeExw/WOW0Wb1qElR6E0JqExs6XSw6WljmESsxE0J0XtNmEbUYWx51XOFQ=OMAWOFD=OueElJ6WbRAJx=UXOGPE0RxXORqWbHv=Ys0XOj1JSJDW0Jq=S5mEbuAJ0Rx=bFDWxwqJbH1Eb1eJ0JeWSvbESue=SR0WOv1WxNmWOiUEO16J0JPEtjYWxGDW0NY=bGDExpb=OEUESwAWtN1ESF/J0sq=Osx=Su6JYjm=SFx=bFDXOJAE0sA=SGxJl=vWxWDXlWP=YuD=bGqESRe=Ovm=buAEYJqEOJ6WS5bE0=bJSMPJS=UWxRD=bNUEtuAJlj1WSWPWxGeXSJ6Ex1AEOEvXOFPXOEYJYWqXtuPXlRQJb1DWtj1WOGeEbNmW0pbExvU=SWeXts6ExHbXtJA=YpbEYRQEOFPEbN1EbFxXOFQJYiYJYuxEbMAE0pm=tpbWtJeJlsPWYW0XlRQXSFD=OG0Xlpb=OEv=tW/WxRQ=tiUJbu0WtsAWYM6EON1XSwPXlJxWOR6Xtib=lMAJbN1=OHbJSjvJxWQEOJeW0pbEO1eElEY=SG/=tuPWYW0ESp1ExN1JlpUXSEvJxWDES5mWtiUXSu6XOMxESWx=OwxXOR0EYJqElpmExRDXSseJb51J0MxWlWQEOFx=OMAJljUEluPJ0M6Jxv1ExFe=SMAJxMDWSsQXOGxWYJ0=OHbW0EbXSw/EO1QEbwDXOvm=Yu6Jxu0ExjvWxwxXtjUExsAJxsqESGQJ0R6E0s/JS5YJliYExJeJbiYW0uAJbUYJYsP=tpU=YWPESJQ=bHYXSwDJxuqESR/WSJ0WOueXtWx=OjUEbNmJSw/Wlpb=l=1XOUYWtsQXO51=lWPESFxWb5mEOGPEtp1=Ov1WlRDWlMDW0u/WSF/WOFDJYE1JxWqWSuAExJqJYNUWbF/WOw6WlWAW0M0J0W0EbMPEOUm=l=1Wbu0ExW/WtMQXlJP=tJxXS5v=lpbEls0JbwqXSvUWY=bWYiYW0u0=S1AWY=UXlsqWOR0JxsQWlNYJbF/WYjUWSEU=YsxEOuQExjYJxw/XlMPXSJD=bJ0WtJxJ0RxWxpvJYuq=YMDWxUY=OuAXS=mWSW/Xtjb=SUmEb5U=O=mEY=1=tEUJ0uAEYsD=ON1ESvYXlMDJY=bE0jvESU1WSMAJxseElpUExUvE0W6XOWqXtpYWb5bWSFQWbJDXOimWbuqJlsQWx1PXOH1=bwPWljYJS=YW0pv=luDEbJ0=Oj1=SHYWb=UJbEmJ0MP=tJxJYi1EYR6WtJQExuqWbEYWOJ/=SWeXSMQXS=1JlsqExNmXls6WYW0El=b=ti1EtpUWYM6JYu6ESHbWO1xEOvvXlWxExJ6=YpUESGDEYEYWb1P=ON1WYM/JYibJxiv=lEvElMPWl=vWSMqWOsqEljvEtuDXSUmXO1QEYseElRAESwAJbEUJ0MqJbUb=Sp1JSjb=SG6E0W/JxwQExuxEOJQJSMDWxuP=bG6XS1/JlRDWOsxWSvvExwAJ0sP=SuQEtWPESG/=ts/ExMqJSWeW0M0JSMQElsAXORq=O1Q=YseEOuqXOjbWlRqEx10=bEYWtuAWtRx=lW6WY=vW0W0Jb=vEbW/Jbu6WxWPWO5vWlpvJYR/JbMA=bH1JxvbEtR0XlRxJx=mWtuDWOivWtu6JxMQJYsq=bu/=OimW0sq=SWxXOsx=OMDJ0=1XSW6JSsqJbs/XSHY=tp1WOwPWOMDWxRP=bjU=tuDW0uPWOEYW0sqXluA=S5UWx5vWSpbJSR/=tMQ=ONUJYW6JS51J0=vWx=U=YMeWtEbESue=OMqJ0RP=YM6=tWxJSRQWxMDW0R6XOJQXSR6=OM/Wxu6WxEbXS10ExNbWxNU=bU1WSG6=b=YW0sDWSuAJxNYXOwP=bFQElM/EYi1=bUUEYMPJbNv=l=b=Sim=tWAXlN1=SwQExRPElRq=ljm=YjYEbEb=SWPEtRxJSsqJluDW0s0WlNYJxEbElRq=YpY=tEYEb1qWx=UJxGQESRqEO1qJxw6EO1A=bR/EORAESWPESvmEx=YWSWDEbMqJbFAWSRqEYWeESw/WYM/WbJ6EbjYJ0ReExW6JS1QWbUU=ljU=tReJlsqJlJxE0WQEOibEl=bWlWxXSRA=tMeWOEUXtJAESivEtj1E0sDE0JPW0JeJbUm=tEUJSJ6EbHvJbJ0EbWAESweJlEmESFQJxibXSuPJYMQXSWDXts/=SwDWYWeJlJqJ0u6ElpUXOMDWlM/WxMqWbp1XONv=tMPJSwQ=tuxExMq=SwAJSwA=bEvWOEvJxGx=tjbWb5bWti1ExW/ES1AEOpbXtJAElpUWSEYWO5UXlWqXSHY=SUmXO5vWYjYWOEbJbH1ExUUWOseWSUmWlsQ=SMPJlpbJSRA=SUv=bF/XOsQEYMPWbEbJ0pvEYWAJbU1JYWA=l=YWtp1ExF/JSMAWSw6=OWxJbEm=SwxWSuPWbGAEx=v=lReJxW/Xt=YEbw0Els0JbuQJYM6Wls6JlJPExuP=Yp1EbMD=tpmJSGqEbRxEtj1ElWQJ0pUWlsAJSjUE0ibE0JQ=ORQEbFxWS5YWS5bE0iYWSW/JSEYWYM6ElMq=lEvE0imWSM0WOseEbsD=ljvE0iUEx=mEO1DWSs0=SGAWSGDElMQWSGPJbpUXSFeWxMD=bJq=bsxEtuAXORPWOG6EbGD=tNm=YW/Wxp1WYpYJls/EbpYExs0=YM0Xl=mJb5YWlRqElRxJS=1ElpvEb=1WONm=S1qXOs0EbJ/JSwxXSW0JYW0WYMxJlNUWbwP=ljUWtjbWti1W0sP=tW6WOHvWOG6=tMPWO1DXSw/=tWqJxR0E0JxESseJYEmEOJxEb5mEbR/Els6JbvmEORDJb1/=lRPJSF6XSEvJlibEO5b=OuQXtuqJSu/E0jUWbUm=SWxWtsxXtRPElMxJlMDXSFxWOimJS16ExR/JSFQElpv=lJPWxw/EORqWSEmJlRAWlRPJxJ0WOWq=b1qEOs0ESjb=bweEtR0=SvUJb=bXOFe=YMPEtpYXSwqWSHUJSwPWxJPJS51WlMPJlNYJ0WeXOuAJ0JeWONvExv1JxvmWYEU=OHY=YWAEtEvWluA=bpvESvvWYWPWOvvWtjm=ljYJ0W/XS=vJ0sP=bUY=bsxEO=Y=YWqJbN1=lJeXOWA=SFPWYu/ESW/XSW0=bsA=lEbESHb=YMeW0iYWSFP=OM6XOjYES5bXORP=bsxWYNv=OR6XSJ6ExGPXSwxWbNmWxHmWSueWl=1=SGQWSEmWbFAEbGAW0R6JSEYXlM6ElMxExG0Etp1Wb1qEOvUElWAJxJQJ0R/WSuQW0MxExjbXSF6WlJP=bWQWOReWlR/EYjYEbW/=OMxWYivW0pYJls0EljUEtu0E0=1EO1eES16ExMeJSpbXl=1=b1QEO1QJ0RxE0uAWbwx=Ss6JbUbXO16WORQXOEbWbWe=bsPEtuDExUvE0NvJbMDJlJ0XSseW0NmE0MeWSpbJxJ0Et=UWbJAWtN1XOuAEx=mEOUvEtEUE0R6WOpbXtjb=OJQWxJ6JxWxJxM6JbF/=bRx=lJ0JlMPWxu0Jb1/XtWeW0RQ=tJxWYEY=bjUWYWQWSWxWO=YElsxJ0=vExwP=tsDJYimElpYWOW/EtsqWtW0WSGQXSw/EOMqWORQWbMeESvYXOEYElWDW0E1E0iYESwP=OUUEOu0=Yu0JSUvWbJPESJxWlMx=OGqJYsqJxWDJSuq=tRqWxiYWtu6Elu/WlRPWSiYWON1EYN1EOM/WSF/=bFxXSNvEYJqJbR/ExjYExRPWxFxElW0=SH1ExWQExvUJYsAXt=bXOs/JSEbExM6=S=bWbvmJ0R/Jl=bEbR0WS1PWOW0EOs6WlJqJSwxEbivJYJ/Wbp1XSGAJlE1JYJPEtJQESR/JYEmESH1JYsqXlR/W0j1E0MQEYRqESJ6WxwD=Su0ESNb=bNmExwPJlu0JYsPEYMqEY=bWYJ/Jx16=bM0EtJ0=OuxJ0R0XSN1ExRQWxseWO5YXSw6E0sDWOEmXOW/EtWAWSG6JSpY=bsQJxMPXOWP=timWtEmWOiUWSN1ESuDEbu/WlNYWSHb=OJQ=bHbElJqEbNYJ0J0=ts/JbGqXlRx=OjvElsxEbjUJbwAEOuPJS1AJS1A=bF/JSuQ=bM6JYMxEliYJSvbXSFeWbJ/WOW0EOuP=tjvWSiYESi1JxMeEOReXSGPEbJAWxRP=b1qXlJqWSv1JlWAExp1J0W/EtMx=YWPJxpY=SpU=SW0WYRe=lWqXtjbWbs/WSNYWbu6WYJP=bWD=bRqXtJqES1D=lWeWSjmXOWeEtNYXSsDJlMxJSG6=lMQ=Su/WOM6=SUYWS16EO1/JYEmExs/=SMDJS=vJYiYWlRxWbNUJxw/=tRPJbRqEYWAEONvWYib=OEb=bHvEbvUJSR6=bMDXOFDJbGeEtJ0EtWx=tJPWO=UEx=UXlpv=YiUXOseJxpUJlW0XSNbJxW/=bGAJbJ6Jx=UXOp1WxG0JbUbJlW0=tsD=OJ0=YsAWOM6WbivEOWAJlJAE0M6WxpvJx1AXSMDExs/J0EYXOEvJSwQWbJD=SJ/XtRPEOFqXlp1JxUbEOHUXO5YJximEtMxWOJD=tWxWSs/XlNmEOM/JxRxXts0WYJ0=SMq=ls/EbF0JlWeEtibWbM6WluqXOJQ=b16JSF0J0sDWxJ6=SMxWOHmE0=1Xtu6EYjUEtE1ExFAXlpU=tM/WORqE0WqWlR0ElMeXtue=Su6WlRAW0RQ=OMQWO51WSFD=SMPEONvWORQXOim=tR/XOp1WtR6Jls/EbUv=OweEbWeXtp1W0uxElWxEtpv=S1/JximW0uQXSRAEOwAW0M6WYR6=O16XOEmJbRPEbiv=bibW0E1EluQEtu0JSibWOjYEYNvWxFQXtWPEtR/WxpbJxpbJxRAXOuA=bvbJYibJSiU=bFqJljbExRAJ0WxXli1JlueJ0WeWSWqJlRDJSMeJxM6XluAWYu0EYuqXOuAWts0ElMqWt=YWSs6J0RAXluQE0sD=OF/JbR6=bpbWOMP=YRqWSj1WbW6XOsAWxvUE0jbEbWeWORqJSsPEbWeESwxJS=mE0sqEOF0E0=mWtNvEx=UXSwPXOuDEt=vEbFeJbM0EbEbExsxWOivESGQESM/XtuQEYsq=tRA=lJxXtpbXlWqWlJQ=SsQWYEY=lWAWYRPXSNvJxs6E0M/Wb10ElR/=bRDXOwAEtj1XlimJSN1=S10=SsPEbvvEbsqWxM0XOs/JSN1JbuAEYEbExJq=SJ0Wxu6XtpvWbiUWOsqJxHYJSEY=OsAXtNv=YM6JSivXlJPEx51EtJAXSvUES5m=OUUWxi1Ex5bWxs/WbFQEbJQWt=1WOFDEbRAJxuP=bpU=bs/Jl=UExUb=OM6E0pYEbJQExRDJSvmWYuAXO1q=SMxJ0=vESsDWtJP=O1DWbJ0=SM6=lMDJbvbWOuQWYsPExs6=S16ExuDExN1J0EYJl=1EOu/=YuqJSMe=OpbWOvbJbs0=tJeWSUvExJ/JxW0ExEvWxHvWtM0JYu6WONbJxR6ESseWYse=bvYE0We=tW6XOvmJb5YWOuxWxuDXtN1Xlu0WSuAJS=bWxsxW0sxJSw0WbjbE0R/WSNbEOv1ElsQ=bNb=bw6XlRPJ0uD=tM0=tibXO5vWOjm=tibWbvY=SsqJx1AWxG/=bW6EYW6JbuDE0ReEx5Y=bRPJxiYEYJQXOvYWS1q=t=U=lRQESJeWOjUEYuAWxWx=bR6JxRxJxwPEbMqJxs/=SNbEluDEbuq=bse=YsAESF0WO5mJSNbWtNYEYWDJx1e=ONYESU1EtMeJS16Wbu0WxvYWxG/ESEvESJD=b1eXSpmJSUY=SRxEORPEl=bXlMPWS1PE0JQE0W6Xtjb=OwD=OEvEliYJSEv=S1q=b1e=bF0XO51Jxw6JSWAJYM0XO5vWxJ0WOjmWb=1WOjmE0J/=luxW0s0ESJ0XSMxWxpY=YW0=tW6JSivElJQ=SvmEYWDEYMA=bsDJ0E1ElW0WOu/JbN1ExsQ=lj1WxvY=lM/ESF0XSFAWbwPXOsDExMe=S1AXSG0Els/JluqWxJxXOJ/=lR/JbH1WS10EYiUEOsDWbJAWxw/EbpmWb1/WxpUEbWQWSGD=lJAJY=YJYu0Xtj1WYRxXSu6WxUv=OueXtsDEbuPEbFDWOGxWbUYWYpmJ0MQJb1A=tu/WSFeEtJDXlN1=OF0WOHbWOE1Jb5m=YMxJSWD=YWeESJxWOvb=O16E0MA=Y=mEtsDJbEYXS1/WxFDJb=v=bpbWYsAWlMDWSHv=Sp1EljbExWAWlRAXS5b=S1DWOsqES5YXSj1WYJA=tsxWbWDXSMxWYsQJSNYWORxWS=UJSpvEbE1JbG0WtiUWO=U=O5mEYMPJbJxEYu0EY=vWb1A=YuqWb1/EOpvXOM6ElMqWbMDXSJq=OEUEx=1EbFqEx1AJl=bW0ue=SGxJ0J6=tRqWbw6JbEY=bJD=bGDEOJ/=SR6ESuP=O1AEOsDWtseWt=mWxW0WYRxJbs6JSR0WONUESEmEYWqJ0MeW0s6JbivExFQWtM/ElsxEYN1Etu6ExN1EtEv=YW0=lE1JbHmXOUUWY=YWOuqWYReWONmXls6=SHvJbw0XSRDEO=v=tReExjbJbWqWxUm=lWQWOsPWSw0XOHbEtib=bj1ESJAJSuA=bFeXtEmXOHvE0EUEbJeJbRxXlW/EYu0=OUbEOibExG/JlRQWS5bW0pbJSwQXlu0ESW6Jb1qXSj1W0JAWtM0XOMe=lsxXlimExp1Jx16=YWDXli1E0EYWxG6EYM6ExwAWOJqJSJAXSJeWYpbXS16J0uDWlNbEO=UXOMD=bU1XO5UJYsDEtjvWYs6Wb1xWli1Xts/=SGxEOHbWSHmEx=Y=bi1JSW/JbM/JbweW0uPJbG6JYiUEtpmEljmWxEYXSR0Jbv1=bEUJYRDEOueJS1QWtibWlWAXSFq=tJ/ESsPXOs0=YsQEluPWtRq=bM6ES5vXSJ0WbsDJxivWbimWSGe=ls6WSRDXOM0ESHvEtMQJSMqWOUYEOHbESMxWYiYJYWP=SUmExF/XtiYEl=b=SMQWSsDESw6ElEvWS16WYiYWSw6JSuqEbjvEbGeJYMxXSHYWtp1=Ou0Jb1QWYJxWYMQ=OFeEOweWOs0=lW/JSJP=lRx=tRQWSu/XSWA=bsAWSRP=bsD=YW6ES5U=bR0ESvUWti1EYMQEORQ=OUbESGAEOpYJluQWxRq=SM6JYMQEYsAJlWDWbvYWS1xEYRQJxGQWbWDEO1/EbJ6E0JeJYMAW0MeJ0uqWYpYXOw0=tuxEORP=OM6WtReXSUUJbMAEls6Jx=bESM0=bMxWOMPWxG/Etpb=OF0ExJQExvY=OEvXSU1Ebs0Eb5mJSRx=ORx=YuDWtW6EOUb=b51=OEvWtEUJxjvWxpmJS5YXtpmWOu/XSWQESi1J0=bXOp1JbR6=bF6JluQEYNbXtp1WtWDJbWeXtJA=bGq=bsQWxv1ElMeXtiY=SWAW0MPExsPXOseXSpYJbUmXOEbW0=YJlJe=SRx=SWQEOjb=bweJlEm=SseEx1xWOimWbRA=OsQJbJ6JxUYJS5U=bR6El=UWOvvJSwPExGAWtEbWbGA=Spv=tNUJSJ0=OvbESH1JSNvXOHmEO1QJxRPXluAWS1PXSRQExG0J0W6J0RQEtMDXS1q=bjbXOsqE0seWOEU=lJqWOw/JlE1EYW0WSR0EO=YEOJ/ElJ6WYEmXlMPXOwDJlWAWtW/Wb=1WSvmExwq=bF6=bvUWt=1J0pvElu6XO5b=YNvJb1AEb1qWbsAEOJeXOwqW0p1ExF6ESGD=YiY=Sj1Jxs0XSJq=YM6JSRQWYRPWxU1=bvvXSG/=lRDXSRDWlpYXljU=bNbEOMPExjmWbsPJlsxWlJAXOM/WbjvWOW6=tu0WYuqJSWPEOJe=liYWbuDJSwDWxibXSNvWSsxXO1PWbFAJSUYElRqXSMPWSWx=lMDESWeXO1Q=OimEYibE0EYWbHYEts0WOUvESJDEOu/XtpmJbMeWOFxWlMDJxw6WYRxESHv=tu0=OFe=SNvWYR0WbNmW0MxXlsqXS1DElp1J0pUJSuQ=bpmWxHmWbuPElse=ljU=bHvXOMDExvb=Ow/WbNvWxGPJlRxWtuQ=Su/Xti1ESH1=lNYEbseJ0=b=b1qXOwAWSUmEbJPWts6Et=vWOEU=OiYESjv=bGeWbHUElEb=Sjv=OM/W0=bWORx=OW/ESwxW0Wx=ls6XtjYWxJPXOimESJDWxWAJxGQEYJqWS1AJSR6WYsQJSJ6Jb16WxsAExJDE0J0JYWPExWDWxu/XSFA=bHbES1QJ0M0Wtjv=lMqXO1AJYWA=OpmE0RQXSN1EbRAWbJAWxuQJ0EmWYu/WYs0EOWqWOimXORDEtMeEO5YXSMqJYJ/=SEb=OsQ=YNvE0u6ElE1JSu6=YJAW0u0ExGq=SHb=buxWxNmWOW6W0JxWxFAElsAWOF/=lJ6XSseWYJeE0pbE0EvESFQ=Ou6=bJ/ElRPWSGAES=vXtJDESw0XOMeWtEmWlsP=YJ/Wlib=OGAXOJPJSUmEbNYWS10EtWPXlueW0i1WxH1WOpmJlEbWYsAWYibWYsxWtEmESGQESs/ElW0Wbuq=SRDXS5U=YWx=tjYJbJxXlpvJljbWxpYXO=U=lpUWbWqJSEUWx1PJ0W6XSvUJ0uQE0NvWOWq=YJ0WO51EbR6WbEY=O1AJbGDWOGeJSimWSwA=lMP=YuPWxwqXO1xExR/XlR0=tuQXtWeXlsq=li1=O5YWxi1JSHmJbuPEx5bEb5vJb1/E0EYWOWAJbWx=lJ/XOvYE0iUXORQ=SFQWO16=OMqWlWqWYJPEOw0JlJQJS1qXSMqEOFeWxFQEYuDXtMA=OMQWYseWbw0=tEbElWPJbM/EYNUJbW6WSRxWbpvJbHUJSWeJb=YWOp1EbF/EO1q=YWqWxHbJYM6XtMx=ti1EbH1Wti1ElMxEbJQ=bMQJS1D=bjvElMx=OJeEON1=SMqEbjvWbwQWtR0Wt=UExEY=O1AJSs/WluP=Yp1=SuD=buDJ0MxJYs6Jb1AJbW/=SMAJYuDWx1Q=SHmEY=U=SFDExp1EYsqWbRPWSGx=bp1XOU1WxGe=tJ/=OvbElM0EYuPWOHbExRDEOjm=bJQ=Swx=bWDWl=YWbMq=bw/XSFAJlpmWOuq=t=vESuDE0NUXtRq=YWAJSM6XOseJ0M/ESib=Sse=tW/JYuqWYW/ESF/WlMDEYMx=biYEO1DEOMQExUU=bUYJ0J0JYsq=SN1XOivWtRq=t=1=bjYW0jUWlRqEO1eEYs6=SW6=lW/J0WqEtRqWS16=SRxW0jUEYJDEtM6Ex=1XOW0=luxWxUYESvv=bF0WYs/JxsPW0uQEtMPWO1/XSJAWb5UWbpm=SMxXOGxEOJeESuQXO5UJxFPXlJ/=ORqEtNvJlseJliYESjvEYj1=YuQWbJ0=lMQEbFAElimW0Jq=Op1EtNbE0iYJbEY=OUY=SMeJSuDEOMPESsDXlueJxGAWxwP=lpUE0jYEtuQXOs6ESJ6=SjvExRPWONYWx5YElW0EYEvJ0N1=SUbExFe=OG6Ebu6JYMx=SimEYJx=YjU=OwqWSib=Os6EONvESWDWS=mExj1W0JQWOEvESiUJbs/E0WPWbUUWSJ/XSR0XSWDWxG6=SE1WOWA=bUmE0RAExEUWxJqWtMQXOpmXSjYEOueWOsQESMxWxG0Ebu6WlsxJxivJ0JQJbvUEtiYWtsD=lEYWbJ0XO5YEO5v=OJDEb=UWxJPExNmXSMeJljvWt=bWt=1WOJeWYNYEOsx=ONmEOu/EbMQWbibExH1=Yu6JxMxESimWxFQEbib=Y=v=bRPEORDElRQXSEbXlsA=SpvEluPExw/EYMq=YsA=SFeEOM0El=YWxwD=b1QEbRDJSG6WbJeElpmXtEvESwDXlRAJbE1=tMQWlR/JxE1Exj1=bwx=OjYJlWeE0pvWtsPWSG/XtNvXOF/Jl=vExRAXS1Q=tj1ESjvESRA=OUYXOJ6EOReWbimW0jbESMQE0J/=lu0XSJA=luAJSvvJS=YEOp1=OwAExU1XljvE0MqXtRAESGxXSJQ=tsAESJx=tpvEOW0WOw6Wbpb=lNY=YJD=bwPWOvYWYJQWSRPJb5vEYJAWbNUJbw/EOWqWYsAJSGPWSiYExwPWxvmEtRPJlR/=SHm=lRQXOMQExEb=tRqJxR6Wts0WlsDExHbWSE1Ex1DWxUUW0pbESM/J0NYXOWQXls0=YMA=O=U=tMPXlJxJbJQWxiv=bjv=O=YJ0sqJSsA=OHbXOM/=bWQEximEtuqXSWPEYMQJ0M0WYReXlR0W0MAXOM6XSJeJ0WQXORPW0ib=tEYXlJ0=lj1W0=1=buDJ0M6JxFA=OvmJx=YWtReWO=mWSJxWO5UJSR0JSvm=t=1=lW/=YWPElNm=SpYWO1/JbUYW0sA=tN1XSsxXtu6JxuDJxW6WOFqEtW/XOiUJbUbWtRAJSFqW0MQWxUYJYJeXSjYJSFDW0MPWxs0JlRDEl=v=OReJYMxXtsDWbwPJSJDES10JxHUJbJQXOs6E0uPEYs/WbpUEOjYJYs6EbuAXtu/WbR6ESjY=buDJSMq=S=UJlib=tJq=SsxWbNbEtMDExF/WYNm=ONvXS=mJxs6WtWxXS1/JSvvESs6Wb5vW0u/EYNYWYNU=tR6JlJ6WOGQEbw/JbR/=YEUXSEY=OMQJxFDJ0R/ElWAWlWQXlM/WxJxESMxWYRA=OUbWYseWt=vXSvv=OW6E0NbEYReWbG6WYWqJbHYWYNb=tuQ=lRDESG0WSR/=lMeWbG/ElsxWtsD=b1AXOWPJSwQWx1PESuQJxM/WS1/JYueXOG0JxMDJS16=bRAESFQWbF/J0MQESu/=tu0WxpUEbimJxJPWOsQJbwqJYMq=YE1J0J0XOM0JbF0JbWPWbHU=SwAJ0s6Jxw6JxW6Wbw0WO=vJYM0=OFD=OvU=luDExwq=tNYWtMxXlNmEbp1XSU1EtuPEbvUJlRAWSWxXlMeWYMA=ljv=tMQWSGQJlR6EYJ/XlR0XOHU=bNbJSsDEOvvWxHYWSjvJxsPEb=bESWxJbJxWljmESUYXlR6E0jbWtMQJxFQ=bRxJxsqWYEUWli1=tMe=bMDEOvbExNbJYimWYR6=S=1=YpYWS=vJx1DESvv=OHmEYNvJSUY=l=YE0iYW0WxXtM6=lEUJx1/XSReWbHYWSW6Wtu0=YuDXOiYWbw6JSRDWS1PJbRQEYsxEtjbXSuP=tMxJbwD=SFeXOvm=tRDWONYEx=bEtEYWSMAESFQJxw6EY=1XSEYXOG0=tRDEbpmJSs0XtNY=bsPElRxEbweWSRqEtiU=SG0XSEbExvU=tJPWxvvWYjm=tJqEYsPJx5vWOp1E0WPWbHbWxJDJSJQWYRxJYuAWxu0ElseW0uqXtR0JxU1WOU1WOW0WbNb=lu0JYpUWxR/WOuDWOFP=lueJxpmE0JPXOwA=lsqJSFeWO1qWYu6=bsxWl=vElsqJlp1WYWq=O16E0iYXljvXtu6W0i1=YRqWlRQESiU=O16XlNb=OMPJ0MqWSMQExJxEYue=bwPESGQWSseWYu0WOj1WOM6=lseJSuAWYMPWtu6Wl=bEO10EtRPXSu/ExWeE0JQEbEm=Yi1Et=1WbG/=OFPEOiYW0RAJ0Wx=OJAXSJeJbvmEtpb=OwDWbs/JSJe=bvb=SsxJx=vWb=YJbUUJlW6XlpvJlJQJ0u6WOpY=bRD=O1DJlWPXOs0XOFPWlj1=bwxEbHmWYuAE0sPWSNY=YW/EO1x=OF6W0MPWb=m=bFPElW/JbGqXlp1JSRq=SUbWxu/=lWPEOi1EbvYEbW/XOJPWtuDJxj1W0RAWbuDEYu0=b5vWSF/XljYJxFAE0J/WtiYEl=Y=lW0XtRPEOEU=bWq=SwPWxR6XlMqJYu0ExJqWOGqW0jY=biv=bM/WO1PESRq=YueWb5mW0=bXtMP=OjvESsDElMAEO1xWO1AElN1WSGP=bHmJYJQWSWQEOFqJSRQE0u6EOUYWO=YEbw6=SRQJx5vESiUJSMPXS51JbuDExsPJlMD=l=YE0sqWbuQJ0Jx=OWAWbu0WxpmJ0RQES1x=YMxEYM/J0JQ=SjYWxRAWOj1WY=vW0uqWS5mWSJ0JlRAW0jUJxueJxpmWbGqEb=vWSWPExpUJ0ibWSiYWYu6XOuAEbMQEluP=YjmElRQJlib=Y=bWxR/ExuAEYivExueWxUUEORP=tMQXSH1JxJeJxUb=SGQXluAJ0WqJS5v=OHYXOEvWlibEtEUXSjUExUUJYR/J0NmJlWDJlW6WbwAExUbEb=vXlNUJSpYWY=mEb1/ExNYElJDEtJA=Yp1XSsDWbvYXlRPW0uAEbF/JlWDWSJ/JSM/EYpbWxJeElEmWlim=SHmWYjmWOjUEO1xXlM/XlRxExjYXSsxElpUJSvmWb16Jxw/=lEUWtW6J0MP=YWQWYJx=lEYJSueXts0XlWxJxF/JbwDJbG6EOWeEOpvJbFe=SsQ=bs6JbibJbu6WOueXtiY=ONmWYW0=Ow/ESp1J0uAEO51=OvY=bEUWOw6=tsDEO1/ES5vWOGq=lMxExueW0R/JYJeJlNbExEYWbsDWSJP=OFQJbi1JxHY=SNmWYMe=SG/=lMeEtNU=bF6JlE1=biUWOF/XlWDE0=bEbsPEtMeXS=m=bHvEtsDWYp1EbR/JSFeXSU1WYJP=tW/ExsDWON1E0u0E0sP=bjUExu/JSsqEbsAJlEbESvvJ0u6E0WAWOEUWSwPEOF/ES1PEljUEYu6J0WD=OR0XljbJxM0JxEYEYi1JSvv=bMDESW/WSG/=SF6WbGQJlJqJlJPWS=U=OuD=SjYXtib=tRe=lRqJ0JDJ0RDWOsDXljYXOUvJYNUWSN1ESJ0EYNbWOE1EtR/XOWQXlW/Wb5YElimWbRPJSpUJxueXOsqWSsQJxFP=b1QWxWD=OU1ExU1JYEmXO5UWYWA=OsAJYueESHm=OG0XSwxExW0=ORQXSN1WSG6JlEb=O=1JSi1=Ow0EtEbJYivExUYEOivXO1Q=S=UJYRP=bGeWbJeJ0Nb=OsqWOGe=Ow6XOpUXSJ0JxsxJYW/Wl=1J0NUESGqWlue=bGeXlE1WbF6=Ypb=bivEYuxEbJ/Exu/WO5UEYueWSU1=lJ6Jb=1J0WqWtu0ElJPJSwxJxsxElRxXSpYWxNY=b1e=l=1XSJQEbRQJ0uAEbWqEOW0=SiYJYE1XOWeWlRxESFxJbsxWOwDXlMAJlNUJxR6ES51JYEvXluQESJPEYjvEtWD=YR/EOMxWS1PWOEv=SNYXSsPEORxXlJxXt=YW0jbEO=UExUYJb=mJSJ6XlR/=OuQJxWe=SW0=Oib=SG6JSMxWxEm=OJA=SwPJYJ/WtseWtJ/XOGQEOwPWbEvE0NvJSNv=lsxWOGAJ0s/EOW6=Svb=YEbJSRQXSHbWxjv=lM6XlsxJbFDEtsA=SF0=YWeEtuAJxu0EO=YEY=YJxWPWts0=SvUExJqXts0J0EUEbMQEOwDWxN1WbGeEbUmJb=vWOp1=SpmEO10XtRQJbR0Xtj1JlRQJbwDJx=U=lN1WOFPJbFP=ts6EOGxEbUYWtJx=SEb=SvbExR0JbpUJxjYEbwAE0imWxpYWbs/WxWeJxwQExEUEts/WYMAExGeWlN1Wxu6Eb10JYu/WOWP=O1eEbG6Jbpm=tibESpYExJDXOuxWtE1WSNbJbj1Jx5bJ0JQJb1AWOEbWbGeWO5UWxG0ESsDWSH1Wb5YJlibEYWxJYpYJbUvEtWeEbpb=bJ0WSGD=OueWOF/XtJP=b1DEOjv=tM/WtuQJ0MDJ0p1JY=v=bW0=tMq=YWqWlu6W0WxWSFxJS5YJSWQ=OpvExF6Jbp1WSpv=ls6Jljb=Y=vXOueEtN1JYN1JSGxEbHUXtM6EbpmWxpUWOsQ=tNvEluxXOR0EbjYJYWeWb=1EbM0XlW0ES=UEbJPXtu/=YMeWbEvJ0=bEOwAW0jmXluDWxWQ=lEUW0s6W0sqW0u6WxiUE0J0Ebue=bUYESWeWSvUXlsqEbEY=SFQWYRAJxwD=ls6XtEbXOM6WbuAXtjvWx=YElReJYWDWtj1XOUUE0jvWx1xWbpYWS5vWYuAEtu/EtEUWbFDWO1QXSHbJxuPESMeWYivEON1=S1eJSR/WSRAXOpvESpm=bRD=tJ6WYs/WlJ/JxJeW0=vEYpUEORA=bJ/XSj1WxjUWS1AJlJ6=bHU=lueXO16JSUm=bu6EbvmESwqWb5Y=OsPEbR6Jxv1XOwQXlJQExuxJbuDJ0iU=S16WxMqXOF0EtNYJxR6JbMDW0WxExG0=timWljbXSpbESMPJxUYESwqJlRqWYJQ=OjbW0W/ElJPJbUYEtu6E0u0EOFxEOiYJSWxEOs6=bU1Jb=mXOH1JlsAESRDWx1P=SMqWORQEtR/XSu6JbwxElR/XtMAWxvvXOJQ=YRDWl=UWbRPESFxXSMQXlE1EYM6JbR/JYRA=OEbW0MQXOpvEOU1ExM0=ONUXSH1EtR/JluqElu6ES1PJ0=mWxNvEOHvJbw6XOpYWluQE0iYWS51WbWqEtu/Wx=1ExFPElJq=YJ0Wt=bJYReXSR6WbGDWOsQ=lJeJ0NbJbFqWOs0XOw/WSs0WSwxXSu0=SMD=bHYE0sDWtJD=SRDEO1DEOEUEOUb=Ou6EYiUJxEYWlJ/=YRAWluqXONU=ls6J0u6=tjvXOsQJlJxESE1WljbW0pvWbNmJSv1Jxjv=YMe=b=vWSFDWxj1ES1A=t=v=SjvXOsD=SW0ESuAWYuqWbpU=OjbWb1/ESsqElu0=SEmWORQEbjU=bsQXSw0XljYEOpUWS1AEtR6EOseXSMAEOUYWxuAXSweWtJP=b1AJ0ivXOH1W0ueJx1eWOwQJ0JD=b1QEYiYWb=1XOEmWtsPEljmWxM0Xli1EtueW0iYWbWqJbJ/EbsqExwAXOW0=tEbJlivXOu0WbEUEYJ0JYJq=Y=1XOjY=SUmJSWPE0sxEYJ0WlRA=OwxWOR6JSJqElsQ=bFqJSRPE0=mXtMqWO10=bW0WS=UJSRAWSUUWOvYWbWe=lWe=tNvEbRPExRAJxR6JSjUWYRQWbvYJYMeJlWPWxEvEl=1JlMeXlpU=SiYJxv1=bJqXtN1Jbw/JYN1Jxu0=tu0Jbj1J0MxESw/WbJAWxG6=tM6JSpYWtJDWlEmWbGDExpb=Ow/WtMx=SWDWSH1E0MP=SJQWxw6=lu0EtjvJYWeElMPW0J0=YWe=lseXOpmEtuDEbuDJbJ0=ljmWSE1XlEbJl=1=SwxE0Me=b1eWlJQESRAEOJ0WlNbWxvb=OjUJ0Nm=Oux=bG6EYWPWOsqJSJDXts/J0sA=tJq=buAJbivXOw6JluqJxJ/WSF0JS10WbwPXl=vEOimWls/WO5UJxM0JxWq=OR6WY=YWbM/Jlp1XtWqEYu0WxuAXSM/EbUYEY=1EYMPJ0MqWSseWbG0EYu/Ex=UWx5bExsqE0u/Wb=1E0s6=tNvElueJ0WxJbMDEOsPJlRxJx5vXSReEOMe=bG0JSsxWYRPWxGQExHY=b=1WSUbWS10EOJDEbseW0imXSwPJxFPJbWPEbGAJxUb=bJ6WYjmWSW0EORPWOu6=bGD=bweEOM0Wl=bEYRA=t=bXOu0ESRQJbs/ExMQEYNYXljUWYJPXSRe=SRqWb=YEbFx=b1PXOFAJbM0XO1A=Ou/=luDExN1JSUbWxMPEbwPW0i1JbUUJSpvWOimXSHbXlWeEbjYWYs6Wx=Y=Os6Wts/XSpU=YW0=lR/WYivJSjYWxwQWxvU=bJeWti1J0MPJ0EYWx=mXO1x=Ow/EtWqXOM0ElW6WS=vXSG0=O1xEb=mExFQExv1EbW0Wlu0WOvmJSEbWx5vWluAEtEYEtsqXtpv=ljvXO=bWxpv=tN1WYWx=bU1=bHUESNmXlivJSFqXOj1WOUvExWQEbjmESR6WtseWxM/EOi1JluPXSWDW0ibWSJ0EYR0JbG6JbJ0=bueJSjbElJD=YivXOFA=S=vWY=YXOw6Jls/ESHbWxGQJYpbXOJqWSUYEtWAJbpmXli1WOvmXSFx=b1AXSG6EtuqESNUEOi1=SUbWtRAWSpv=b=mWxwPEbj1JSuQEtRx=bjvWbimWls0WY=mWl=YWl=UEtuQElpmWYsxXts0Wx1q=OHUJ0s6XlRPEYs/=OUYExFD=b=1WxJ/Etu/WbuD=luAJ0=vJbRQWOR/WlibJbR/WYNb=lNv=YJqEbHYJximESsDJbRqWYNmWt=1WS5UE0EvE0uP=l=1JbvUESsAEOR0E0u0WbWxW0imWOwQWtW6=bsP=b=mWbvv=YRP=lseWxJQXSsQJYpbJSW0ExsDXtWP=OJQ=YNUExGeJbp1WbjmXORQ=YJ/Wb1A=SJ6XSGPExFDWSwq=YWQExu0JbJDJxFAWSReWtuDWxvbWtWPXONUWxJ0=bNmXOwAEOvmJYWAXOEvWtRAXOU1Wts0=OWAJbEmXS=YJ0WqWxR6WYuAJ0sQW0=vWxwQESpbWYJQEO1AJlMA=OFe=bu/Wx=U=lpm=lsxJlpUXl=vJS1eW0WPEb16=OGAJl=UXOjb=tR6ElR/WbjYJSWqWls/XlsQJbNYExMQW0j1=SpvJx16XORAXtjYJSjmJxRQWlRq=OUb=tpvWSwP=OsPExuQJSweXlu6Wtsx=OwQWSHb=lWxXlMeXtNYWbFqEYJPWOGxWxMx=OG0WSFxWYs/EOMAEO=UWl=UEYJQWxvbXSGx=ljbJSibJbu0=b=mJxNvWxMeXtj1E0sq=SG/Wbs0ExWqXtWxJxMQJxwQ=lR/Wb=UW0JPWOwA=tRxEx5bWlNYJxM/WORxWxEYEbEYEtsqWbEmJbFqXlNmXlN1XtuqJxMqJYJ6=S51XSuAJlE1EO=vW0i1JS10XtJe=bpUW0jY=SMx=tu/ExsxWYu0=YWDJbRPWbF/=bNmJYM0WOW0ExJAJ0NmESwe=SJ6EtR/WbEUWxJD=biYWOF0JS1/=Op1EYWxXlJqWbu0WSvbXljvExuxWYjvEx1PEtsDESNYE0=mEx5YW0MQXORDExuqJ0NYXtR0=YueExuPXtEmEtiv=OMDE0uDExFAEb10JYi1JxJxWx=v=lWPWbWPEbG/Xtp1EbweEbReWbsPWSpvWbpm=O5bJxRqXtW/=lNYExJDJSF0WSN1EYM0WlMeXOsP=tM/XtMPEbvYXSFQWSiYXSGDXOGPWOGAEx5v=OJeXtWqWlEYWbRQWS1eESsDJSGAWO5YE0=1WSjUESueESMQXO=mEYpUEOEv=SRQEbuQ=bNvEb1xXOEUXluQWOR0EtJAWYW/Eb=YEbu/=OpU=bseJx5UEYWP=tu0XOUvJbjmEbGxEOwxExMPEtJeW0jvJ0=YESpvJxNbXtE1XlMPJSWA=bEYExGxEYJx=SF/J0WQWtMx=ts/Ebu6WSMq=bimExvmEx=mEbEYJbWPEOHmJ0uDWYEmWxux=YMqEOwxWtJAESpm=t=YE0iUESsA=bJPWbsxJ0EmWO1xEbWDJSUbWOJeW0iY=ti1XtpmWtu6EbE1Jb1QEbuPJbUbESHvEOpbXOs/WONYW0p1ExJ0EluqWx1/=Ssx=bEmXSseESNmExJ0XO1qEx1D=YiYEOu/EOG/WxUbXlWqEbJAJx1PESRDWSpUExReWbW6Jl=YJYsDWlMDESpYEOuxJSsq=lNYXSw0JbR6JxGPJxWxXOMxWlWeJYiUWbJ0=bJAXOFQWx=YJx=bWbwx=Ypm=lNmJSWDWxUUJYpvWlp1EYpm=YMQExNUJYMDJYMQWOsQEYRD=YR0WSsx=S1eXlNUExsPEtWe=SGDWSG/W0MQ=bJ0EO1DJxuDXSGQ=luAESRDXO5bXS5bEO1/E0jbJ0MD=Ow0WSpUWx=YEYsqWSuQXOG0JbGAXlsq=tuqJbWAXls6=YsxEbjbEOJeWORDEOuP=lJDExvY=SFDEOjm=Sw6ElpYWYjv=SR/WOJQ=SF6=Ow/EYu6EYs/J0iv=YpmESs0JxR6WlNmESFAXSuDEYuDXlR/WxwqWbuQJ0jUESGqExi1E0=mJluP=bimJbuAESsxEljYXSux=bimJb1/EOHbXtsQW0J0=OFxJYMDXOu/EYpYEbR/=bGPJYjm=bG6XOwQ=bpbWS10WbG0WOuAWbEYEO=1JYpmXlWe=SuxWS1DWlseXSUb=SReE0Ev=bMxWbuAJb1/JxGeEOJA=SGAWx1PJlueESwqWlJPXOvYJxu6WbJ0XOWxWSRqJx1xExvmWxN1XtR/JxW/EOUbWxjbEbRD=YReXSi1J0J0WbpvXOpbJSs0WbNbXO=UEts6EbEYJSueXSFqWl=1EYpUJYWP=bsqXtM6Wbw0JSJDWtRA=tN1JYJeXOJeESEYWOuAWO1xXSJQJSUU=lpUXSEvWOuDWSW0JSUvWbUbW0RqEOuQJbGAES51JSuPExweWSpvJb10=b1DWSs0EljUXlWP=YRQXOGDEbMPXlNmWSRqXOpbXluD=l=YXS1DJS1eXluqEYE1=O5vXSF6J0RxJYuQJxsDXtJPJbWqWO=bXlJ/=YMeW0u0WbEUExpbJbvvJS1/EYuxWbUbE0jmEOw/ExRAWSNUJ0W6=bMDJlim=luqXOH1JxpvWOJqXOw6JbjUWxjvWbjYXSRDWtiYJYjmWxGQEt=UEOvUXOMeWOWA=bMA=OGDWxH1WOsPJxNmJx1xJYs/=SueWbjYESUmWx5UJxwAJSj1J0RQXtJA=bF0J0J0Wt=b=Ow/J0R/EOMQWSEYJxw/JbRxEORxEts6=YW0WYW0XSjm=lW0WORxJxMAWOFP=tJAXlR/XlEUWOW0JlivWbMAJluAWlsQXOuPWxFQExvU=O1Q=OWqJYNmJSu/EtN1JlJxJY=YEbRAXSuqJ0EbXOFAJYMqElW/=OReJb1xES=mWxsD=O51XSvbWOH1WlivJlJQES=YJSGxW0WDExFQJlJAExj1WSJAWbNbXOWe=bvbWt=UEbFQEljYXOuPElEbEtpYJS=1WtuqW0EmXS5U=OHvJxRqEbHmES5m=SJDWxG6WxsPESs/=YpU=OjmWbEYJlpYJljmWSU1=lNU=OMAWSibWOM/WbpYEbGeJxG6WlEv=bwe=lu6JxR6WOM0WOJQEYW0EO1DJxGQESWeXlReXlpUESFAJbMqXtjb=SMQJY=vXlR/WOJ/EbuPXtNbJxHm=bJPWbU1ESiUWSM/ExseEOWDEbRQWtsAEtWDESFDWOiUEtJPEtE1ExWAWlW0E0R0JbJ0WlJqXtivXSHY=bJPWOMxXOpU=OMeWluqXSs6ESEmW0J6ESJ0XOsDE0uxElEmWY=v=b5mWxRxJSRPJljmWt=1JSG6XlNmEtMeEOFQXtEUWlEvJlW/EtWQ=bvYWxwD=SUmESGQJYJxWYpvEYM/=YuQEOJQWSF6XO16=tMxJ0JPElJ0EOWeEbG/WO1eXOEv=b5vESwD=SFQJb5b=bE1ExGqW0W0El=mJbp1=O10WYjv=lu6=Ys6ESUUJSRQW0=vWlRxWtRAExGPXOMq=YJqJxFqESjvWxw0=lRxXSM0E0W6=tW/WxGAWbMQJS5UJxJ0=bM/ElMq=lW/ExGPWtJeWOM0WbJQXORAJbWx=YsDWSR6WSWqWbvUXO10EOJDWtMQWxu0EtR6JSFeWYu/JbMDJlWPWtW/WxGAElsAJlEv=tNvXluPWx5YJSuq=tJ6WSjbJlMP=SvUEOMAJxwP=tJxEbUY=O=UESEmWOEvJlEbWSF0WxpvXSFDWtu0WYEUEl=YExuxWxjUWtJeEOwxXtM0JlEUElpbJSGDElN1=YsqXOFxE0jY=SwA=O1eJbM0=YRPJ0pYWbF0JxM/JbM6E0MD=tNUWb=UE0iv=tuQWxWqEb=YWxG/JlRPJlEmEt=YJxwPJSR6WSUmW0Mx=tMDES=vWxRA=bEYEbFPJY=YEtJ6XSF6JxW0JlM/JYWPWYjYXSJ0JYJqXSw0XON1=OUm=bUvESsAXlueWl=UEOvvExwPJ0Ev=Ss6=YN1Wx10E0N1WbsDEOuxJ0jYWSG/EbwAXlJPEluqExFDWl=1EljUElWDWSUYJS1QWOH1JbwqEbw/WYM6WSEY=tEY=YWqJbs6WSNvE0sDXS1xJ0u/W0=YESGQXSMQXOW0=YiUEtjYXSJqEOUUEOsx=SjYWxpb=Op1ElpmWxJeWb16EbJxJYJPW0EYXlMxEbMqEb10XS1xWOWPWYu6EbEmJYs6=YJxJl=bXSRxEbJ/WbR6WlJ0WSFDXOs0Wx5mExw6El=bJSu0=YpvES1xJxRDEOwQWxMqEx5vExsx=Ow/WSw6EONb=tibJbNbWbMqElRP=tRPEOp1=OMqXlR/JxsqJS1AEOWA=OH1JxNbElRxWxEmW0pm=SRD=SvmWbJeEOR/ExvYJxNmXOM/XOvbJYWqWYi1XOEvEYEUESFxEtEmJbHb=bNmXOU1E0MDXSsQXOj1WSWPJSuAEbW0JxHvJbM0ES1eXSR0WO5bJx5m=ts/WbRA=SR0XSEYEYNb=S1eWOsPEb=bW0jUJx=vJ0J/Xliv=bib=SWP=b16Wbj1WxJPWlu/ESJeWYNmJYivESFDExM/EYE1=YN1EOMDE0W0XtpU=YjYW0uAJ0RQXts/EtRAJxim=O1/EY=bWlsDJSjUWbpYElRAWxjYWxGDJl=1ExJeExG0WxvYEtEmXtimWSMDWxW0WSNmJb1AWxj1=YJeJSs6ESG/WtWqXSpUElpvWlimElJPWbiUJbu0=bMD=tW/E0MAW0p1JSM/=OGQJxGQWtNmWO5YWtMPWxW6EbF6XSuqXlM6EYMxJ0M0JxRq=SwQ=SjbEtRxXSMxJSFq=lRP=OwQWx=mEbNbWOGxWlJqWYJP=SW6=tu0JxNUWlu6JxuQXtRx=t=UExwqJ0J6Jx1PXOHYXOwPWOMe=YjUXlivElMQ=OjUJSMDJY=YXOimWlW6=bW6JbNmJYWAE0Me=lu6ElWxEYs0J0jbW0MAWb1eJls6WbUvXSsQElJ0Eb1DWxW0EtEbJlpYJbGeWlseJb10=S1xWSWAES=b=lWDEOM0=Os6=tsPWb5U=OweXSW6W0s0XtsPWbM0=Y=v=ts6ElRQJbiUJ0ivEtueJlNU=OWDEbweJSW0ExFDEYWxJSUYXS1Q=OjYWOs/JS=mXlu6XOwQW0uxJ0uQJbwPJlJAEbvUExHYW0WA=b1/JSM6XlJDEYWDESFQEYJx=tE1=OFDJYsAElWx=bFQWYuPESHYESvmE0R0WOp1EYM/Exu6=luD=bHbESwPElsqXSvbWOuAEYj1Wx5YEOEbJbvbWx=1WlMe=SJQW0W6XOuqXSW6EtpYXOUUXSGeWx1q=SFq=OpmWORxJS=YWS1/EtpU=tuqEtWDJYW6WbEmWSNmXOJPJbMPJxsD=OHbJlpUXSReW0u/E0M/WO=bE0jbEOGPEOG/WOW0=O5YWYsQJxMPXSvb=OWe=SuPESMxExjmXlj1EOJeESs/WYRqEtM0=bjbWOGxWtWAEbHvWbFqESR0WxsD=lsPJljbESweJl=m=OH1WSJxW0R/Xt=mJxNvJYEUJSR0=l=vJxWDWSsAXSWx=OFD=lW6EOE1=lM0ES5mJxEmWbR6WxUmJYR6WYWxJYMD=buDJSWqW0=1Jb1q=OJ/E0JD=buAEx1/JYJPJYNUXSM6WOwq=tjm=OEvXSG6=SuQE0MPWOM/XSFPJbuPEtsDXO=vXSE1JlMDESF6Wxs6ElJQEximJYJq=S5YElR6EtMqES=1EbwxJSw0EbvbJxEYJlRQE0EYWYsAJxivJx1eEY=UEO1/WxR0JS10WtNYJxRAEbJ/JlJDESGPEbWAXOG0JxRQ=buQ=OUUEOJxWYW/JxGPXSs6WbWeWSwqWlW/Exw6EbMeXO5bEOvbEOReJ0N1XtEUW0uAWxuPWlsxJxMxEY=YJSMQXlR/W0WAE0sxWtMQJlR0=O=YWlNYJxR/E0sQWljm=S=b=lMDE0N1WbRP=lReEY=UWSNb=bEvXOWAWxivEOJeWYEv=bsqE0JeEx1xExReXtWAXSNY=OM/EYMxE0J/JSvUXORAWbWeEbMAWYMAXOJ6EbMPWtMx=Op1XSi1ESW/WbsQWtseEOjmESvYWO1AESivJSEvXOMqEOJe=tpmWO5mXOj1JSu0=bGqXS5UJxEbWlpvWS51WluQES5vXSi1E0MQWYseWOUYEbF6J0JPEbNYXtJD=SE1JSR6WSuAJlsQW0uQXOsPJls/XtR0WOJe=Sw0=bu6=bi1Wxw/WlW6JYsxWbGQEt=vWtimWY=bWtuxJ0J6Jbi1WtjUWYu/Ex5Y=OMDWb1xXSW0WlJx=ONUXtu0WbRqJSF6=OsQWSF/XOG/XOibESu0ESw0ExHbXtux=YWQEx51W0WqElsPXtRqJSuxEbRxXOFqEb10=SGAEOGqWYRxEYu/J0jUWx=1=OwQXlEYWO1AXSu0=SwQESG0E0EU=lW/EtJeWtMPElpY=lWq=YWAJYu6Jb=YJxpvJlW/XOJxWOpU=luAElJAWxHbEYR/XtW0El=mJ0Re=bJ0EbJAJlJDJbv1=OjUWYjUEYNm=SJxJbJAE0=YES=U=b=1=SseEbN1W0NvJSs0=Os0WYM/XOU1JbGe=YJq=ONYESi1WtRPWxJ/EOG0WSF0EtReJSu/WO16JYMqEOJxEtu/EbR/ExweXlM/ExMxXOUUXlM/WOEv=YRAES5bWSs0EOHmWxvvXlRQ=bWeWbM6=OJxE0N1ElRxWSU1EbGP=S1qJbs0Jbw6XlWDJ0J/=OUUEts0EtMPWxFx=tRQWbU1=bjUWxueEtiUXlj1Jx1AJxse=bFP=bFPEbE1=tEbXOj1EluQElsP=lW/Wbs/XSweJbUUJSpvEt=1=OW/=bJeW0ivXtu6WljmXS5bJlu6ExsAE0MQXt=vJxG0WtWqJbR6WSEY=bvY=bs/ElNm=OjUJY=YExJeEOwAExUvJbWDEtWAEOvvJxwxXlM/XON1XOW0JSw0WtJQWO=bJluQXSEmJbWPXSuq=S1qWOHU=bwAESRqEOuDEOF6=SNYJbJ/JYMxXtReXOW/WOMqE0pbWlimWSR6WxWq=ONbXt=bWlJQEYpUEbF0Wx1QW0u/XOM0JbJ6WbsQWx=v=tR/WxRPXONYJSFAWtpvW0J0JlpbWSpU=SuPWOFAEb5UWOpYXtM6WOivWxu0WtWQWxNbElsxEOGeWSNbEYMA=b=bEONb=SueJb51ESwxESRqWSWxWYM/WYpUXSG6WSJPXOM0JS=1EbRDJS1qXlsPWxMx=YpvWSjUEt=Y=OMAWxuD=OFeXOwAWYjvEYM/JbGQEbFeEbseWON1=tEmJ0EmJbH1W0sPWSFqExGA=bj1EYib=SJxXlsDXtjYJ0pmEtjYXS1PES1qWYuD=OWxW0=vJSueXS=YWYMQWxJDWbsqEYWxJSJ0WYpbW0jYJSp1Wt=v=bEmESJqJYuQWOMeW0s/Wt=mWbs0WtM6EYiUExpUWtjmXtW/WYRqXSUYWYN1WbJ6JxMqE0sxEtsAJYRqElEmJxUYElJA=tJqJSwQEYWAXtEv=ONvXSivWtRxEbG0WbuPJxWQ=Su/JSpYJ0RQEx51=bwQE0ibWO=YExFqWbW0ExNY=OseJbFQElEUWxUbXSvvExFDJYiYWYueWxvvJxWxESHYXtMDE0iUWOGxEO10WbGP=bMQ=bEbXtEmWSR6Jbpm=YuAXSUm=SW/XO5UWSFPEOUUWSiYJx1qE0u0JSNmElR0Wts6JbivEOs6WYueWbMPWxHUW0R/=bMqJxNU=SwQXlEmEb1qWxMPEOJQEOiv=OUbW0u0JxiYESHbElJDESwAJ0WAWYReXlRP=OsxWSw6XlsqXSEbXOWDJYjU=OweJluDEb16EYue=bUvXtj1E0RqWt=1WbpvXOs0EbFq=OFD=OMPXOJDWbj1=lW6=OjvWbsqJxj1WSMAWxj1JSNbWxEYXOMAXOMP=lEbJSM6XluDES=YJlWQESwxJlE1XSimJYpbJb5v=lpbWb5YXOvmWbRxXlReWSi1=tE1WtJ/JS10Jxs/XSJxXlEbWlEvXSJxWSGQJYE1EximXOJPEbjYJlueWbM6WxJQJxFxJ0W0WSJ0WlsP=SMxWOuxWSNm=tu/=YJQ=ONYE0Me=SR6J0NUJxUm=OpUXlJxJYsPWtRDJSReWO1D=Os6JYi1WxFxXljmJY=vWONvEO1q=YsQWOReWS=vEOF/WbM/WbEmExHvEbJAEx5YWxUUE0=1Wx5YEbjU=OR6WOR0E0s/XSivWOs6=bJQ=lWDExw/ESpmWtJDXOwqEOwe=OJ6EbJ/WxEb=bG0=bu0EYWPJSW0E0=mWSF6JSEv=luA=O1eESwxXS=mXSG/=OwqJ0=1JSN1Ex=YXOMxEtMxJS16EtpbXlJQWO=1J0M/=SwQW0WAWx=vWONvESs0XOw6WOWeEOibWbvbEbvYEYpvXOMA=limXSWxWxjmElivXS5vWO5Y=buxE0JqExu/ExMxXSRDWxiUWbvmWxRqWOHbWbjmESuPExiv=OiUWxG0=SR/JYM/=SR/EbR0WtJeEYjbE0NY=tivJbsPEtu0Eb16=SFeWSj1Xls0XSJeJSpvES1e=ljb=SiUWOvUWxE1EbpmWbw0=bjUEbMD=YWxEYR/Ebi1WS1xEbweElNv=lsDWbu0ESNUJSpbJ0imWtW/ExG/XtRDElRQESRQWxuAJ0pU=tWAEtueXtpbE0MPWlW0EYpbWbs6XtNUWlJxXSH1WSwQXON1WlRqEl=b=SEUJSjb=OR0EtWAESpYWtReWxuPWtRxXOReJS=YXOWPXONbWO=mW0sQJ0ueExJ0ElseXOwAXOWPESEmEOpYWbEv=OvUExU1WS1AJbMQJY=YJbW6JbWQJlp1Wlu6WOMP=bFQJxw0XSuxXSWqJ0imJSNYExJxWtsQ=bWxXtjmJlM/J0WeEYsPJlpb=OuDWt=1JSpbXOivEbseEb=UJSHvJ0NbXOU1=YRAJlJxWYs6ElRDEbivJbu6ESsPJYE1W0seEYM0Jb51JYWPXtNbJbwxWlRAJYMQJbjYEYuQXSF6JYW0ESU1XOR/Jb5mE0iYJ0WDWlNbJSuQWSweJxM/=ONv=S1x=SsAWxsPWximWbNbXSw6WtW6WOjmWbWeEtsQJSJqWtEvJxJ6JSi1Eb51WSjmWtN1WbFQ=SUYWS1QWx5UJluPXljUWOMDJxGAWbvbW0ivXS5YESHY=YpvWxM0=luQW0ReESEbE0EYXlpYXOwxWYNvWxueEYMQW0u/JYEU=YiYWOp1ExGQ=lWQJx16=OwDEtW/JbGqXOvb=buxEOJQXSibWOvYJbGeJS1e=bi1=OJQ=b1xElRAJ0iY=S1/ExjmE0sx=bJxWtJPJbpmEYs/Ebu6JxJ0JSu0ExRx=bRqJYimWtuPWlRAJ0RQEOWDEOvYWYRPWbuQJbuq=lsAWO1PJx10WOwxWYNUEbs0WOj1=SR6W0u/=liYWxuq=OGDWOFPJbwqXtMqWlWPWOiUJYM6ESJQEYJq=tiYWSvmJbG/ExNvWSvmWO=1ESG0JSJ6=O1PW0RxWbEb=lMA=bE1JYiUXSJ0EbwxW0pUJS=b=YueJSW0Ex1QJbMPEtNUJYsPWYMQJbM6=O1e=Ow/JSFqJbj1WSWe=tNY=YW6EbEvWxHvE0u/XSuqWx1qExGQWSGxWYMAJ0sDJSRqJSMAJSNUWSueWxseWYuq=YpYXlRQXSRqWSjvExWA=tE1JbMQXSJxXOGe=YpY=SFQXls6EOWQEYW/WtsqEtuDWYWDWbFQWOibJbMqXOR0JxGQJ0W0=bNbWO5vWYpYE0uDJb5UXtRDXtueExWPWb=1ElRAEO1xWOuD=SvbJYuPXls0=tiYXSGqESibEYJqXOs6WtEUJljU=bFxExvbWOR6ESJ/WbMP=SJPJl=bJbJ/=OsA=SvUEOJ0JSM6ExEbJ0s/J0pvESi1=YEm=OwDEO=1XSRPExGx=luDESFeWlJx=tsqJYRAXSFQXlWP=OWxJSHYWOjUEtWAWYJPXOEv=lE1Wbu/WOMQXOJ0WO1eJSFAJYJQXOjbW0ibExEmW0JxWS1eJ0Nv=YEm=lsPEtNmJSJeW0i1JbR/ElWxWSM/JlWxJb=1JlWAXlJeJYueWlpbE0s0WtWDJbGeEbwe=SJ0JYEUJYs/WxUUE0pU=OJPEYMAE0RAEYsAEt=v=lp1JYWDEbJqEYWxXSs/JSuAJbUUWOGx=bWqXlR/JbibWlJ0=bM6Xts6=bpbWxuDJbRxWOJPWORQEb5mWSM6JYN1Ebw/W0iYWOu/JbjmW0JeWxFAExWxW0RxExWqXOEU=tseWO1e=bpYXljb=SF0=bwqElNv=OwqEtR6XOGDJluAEYMQWxRxJxibXtMxEtR/EOGeJbM6=bGqXOjv=SJDJxEY=bvUWSiv=tRAXlJA=OWe=tpvEYMAWOMxXSim=tR0J0NbE0J6WO=b=buAJYibJbW/J0u0JYE1=OM/JxEbXORq=Ss0=SsPJYjUWSiYW0JeESs0EtWxJxJDEOi1E0i1=SuAEtW6Xlj1WSUY=YNmEbJPJlNbWb=b=SjbWSvmXlW6Wl=vXSpvEYJDEYMq=YWqXO5U=SF6EOFAJbiYXlW/Jx1PElWDEYRQEtEmJ0p1E0s/JY=m=bv1Jxpm=YWq=O1/=bFq=SJAWbF0=Yu/JSNY=O1qWxuqE0uDWbWqEljU=bEmJSR6XlMqWtEYWSuq=tjmE0sqJ0sPEYiUElN1XtJq=tuq=tM/JxMeJxEmEOMAEtJ0WlM6WbWe=SiYW0ReWtMAXSNYWSpbExFq=lWD=OWqWxF6XOs0JS5UEbR/XOsQ=YRxW0=UESuDExR6EYW/XOw/XOF6WYRxXSjvWtJ6El=UESWPJxMP=SJQElu6JxRqJ0iv=O=mJxFAEbsAXtse=tNbElMqXOiUXlR0=SEmE0MeWSjmWYsPWY=v=S1x=OsqJlpUEt=Y=OjYJSu0Jl=UJbsPElJeXSuxWYuD=bM/EliYWtNmJxFQWSH1JSiYWSv1JYReXlsQWbJ/WYR/JbE1EbpbXSj1WtRQJSUYXtJ0JxMq=OMQExG0JYueJSMQWtJDJb5bJSUvJSHvEYs0XS10WbGPJ0pb=S=mXSW/XlueWOFx=ORqWxuxWbwAWbvv=YJPXOuxXOWPJbM/XtJqJYpv=tRxEtJA=ljm=Ov1XOjYXS5mWbEbWOEbWSjYXSuP=OF0Eb=YWlMxWbwQWYWDJls6=OUb=b1qJxUmEOvvEbEbJbWe=S1eW0NvWO1xEtJD=OueJSMqJSE1=tu/J0Jx=tEbJb51WSpY=SE1=SM/EOEv=SueEbJ0Wtu0WSjU=S5mESEmXO=1EOw/Jx=Y=SvUE0pmWxwDEtNv=SsQJls6JS1q=tpUW0MD=tsQ=SWD=Y=b=lJQ=SEUWY=vElim=bEYExuQEbGxW0M0WYNvJxRxJSJxExWqJbF0WOMDJlsAEbFqEOHU=SG/XOMxJbGqJ0Jx=Si1EOR6=OwqEbRxJbRqWOWDXSEU=SMxWli1=OHYExwD=SvmESUmEbRAWxWx=SGeExEU=bwe=YiU=ORP=OGDEO1DEYEY=ljmWSE1WbGAEbib=SR/XlE1=OW6WO=U=lWxExHYJlJ0EtWxEbMDWYJDXSJ6W0u6EONbJSRDJSMPESJ6=bRDWbw0WOuqWYueXOpUWx10WbsQEbE1JYp1WSseJS=bJlsAEOJqEb51WlNbWOwqW0RqXOH1WOvY=b5YWYM/JSvmEb5mEY=YExFQWSvvJlEU=Ss/ESWPXSMq=OJxW0J0JxEYWYW6WxJA=SFQXOvbWtMAWxFQElWxWxJAJxu/Exs6JbweW0WP=bEm=SJ/J0NmEbJPWxs0XSWPWSMqEO1xJS1DXlE1WbW0=Ys6ES=Y=ti1ExHUWOUvWSJeXlWAJlEUESsQXtJx=SjmESwqXOsQJS=YWbsD=YiU=b=U=l=mWYR/JbuqWbH1EOjUXts/JYRDE0ivEbjbWbFq=bFAEOFAEY=Y=YJ/Jx1PW0EYESM6=YueXtR6EtR/WlsqEO1PJbNbW0ueXlEYE0M0E0Ev=O5mEbM/=YEU=Oux=YWD=YM/WlNYE0=m=YJQJbFeWxNUXlR0=lu/Xl=1WbNbXOR6Expm=OUvWS=bW0p1XtW6=bUvXluPWtp1WSRqJ0J0JlEmESJeEYueExUYXSNYExu/JxjY=bvbJxu/WYsqXOsQWOux=SimXOW6EbuqJYEvWlu6WlJ6=OWxJSpYJYu6EOjvWbJeElsQ=SjUESW6JSReWOw6=OFA=bwDWxuQXOv1ExueXtsxJb=1=OWAJlpvXSueWtR0=OWQWtMDXSW6ESvvJlRDXSWAEOJx=YMAExRAWt=1JlNmWOu6=bR6=OWDJbHmXO=UEOM/=bpUXlNbEOivJluqWxR/WYM/WOjmE0s6EluQXSM6=bMPWbJPJSuPEbj1EtJxESuDXOwQ=Sw/WxsqXliv=Y=b=l=mEOGAJ0ibJxR6WOFAWOR/J0RQ=OMx=lM6WxuxJxs/=S=1WtJ/=tj1Xl=mJl=YWOUvEY=b=b=1ElRQElMx=OFeEO5Y=SNbXSFD=tiv=YWP=tMqExue=ONYJxsxWSJ0JYMxExHvWtRxElpUWlMPWOMQWbMA=b10JSGPEOG/WluQExE1XlW6WSibWORqWS5bJbp1ExuA=OFAESRA=SUvJ0WD=Yi1WlWP=S1qWxsQJSpmESR0Jx1QXSjUESsDEYRA=YJqJxEUWO5vESFD=bMqJSG6JYuPJxsAXSW0XlW0=tMQWYEYJxRq=SiU=SFPE0RxWlEmXSpYEO=mXSu6WbueJSEmWljUJSwP=tR/XSpmWbHmJSjb=lJxJ0W0WlE1WOJ6Eb1xJlpvJxJPWxvmESvv=YJ0WSF6EOMQEORxEtJDJSsAEtR0=SwQXtNYXOpmEOGQ=SwAWSR/=OjUXOWQE0NUEx=bWx1qWtpmJbF0JSJ0=O5bJlMQXO5vEb1q=SR/=SRQ=OpbJx=1XlM0ElibJlNvXtWQJY=vEbFDXSMA=ljmJ0MPWORxWxEbXtM/J0E1EbG0XO1P=lWqExsPJ0JqWbGAWtiUEtMqWS=vWl=vXO5YXO51=lNmEOwPXtp1Xls/=YEbJxvv=OpY=S1QWYuQWOWqJxFPWbMDWlJq=bs6WximEtR0ExsAWO5m=SUUWbEYXOv1WYM6=lM6J0RqWtJDW0Jq=b16JbEv=SU1WtW/XOMeW0pbW0imJYjb=bMeEbwAES1xXSu6=YuPWb5YEOw0=OEYEOFAElivJxJQJ0sAXOibW0Rq=O51ExE1ExwAE0JAJSGe=OwA=O=m=tuPWSuAE0RDExG/E0EbXSUUJljmExjYWSwDW0sqJSFQEOHmXljmJlR/XlN1WSvmW0J6Jb1xJSJQEtR0XlivXSi1WxNv=YE1EYW6EtjbWtivJxHbW0WQEluqESi1Ex10=S1qXOjbWlJ6JlpUXl=bEtEYXORP=lMeExG0E0EYWSuxJbpmEljmWORQXtR6EY=v=OwqEtJ0JSF6WYsxWYibJSRDESMq=O=bElsDWbse=OJeExjY=lseJ0JQWlEY=Yib=bWqWOu6WtpUXOJQESJeWlWDEYuxXO51=lWQXOGxWlWxElNmWSHvWtibXOUYXSNmExuQE0JxWOimXlsA=ONYEYpvJSvmWxGDE0MAJSUvJxM6WSsx=lE1XO1/=YsQ=SsDESNYWYMeElWeWOJAEO5UXORq=SJPJliU=SiYWbG6=b=bJl=1ElibWOpbWYJPExM0JSMx=O5YXtsAXlibJxwe=SvUWbW0=SMx=Y=vWSse=bGDXSGxXl=mJb1x=tiUEtRAJ0EvJ0RxWtWxJbRxWtsqEbwQWlJD=OseWbMPWxR/EbFPXOG/WlpvXOJxES=UWYsqJSWxXSGAWbRe=bJQES16=liUW0pbXtNvEbsxWO10EOvb=b1AE0MAElR/Wljv=bUYEtEU=SF0WSsDJlMxExNbWS16=SF/WtWDESJDJbWeESG0JxUYWxJ0ESpUJbMx=bU1=SM6=bW0JSRQJYseXOwqJSGeWtWqWtJqXtMAXSjvXO=YXOFxWbGDJYM0WtMAJlsAJSFPESG/XONbJYWDW0MAJbwPE0p1ES5m=SH1WbvbJSwAEtjv=bGxJxUvEbweXtsAJ0=m=S1Q=bJ6JYR0JlEbEt=m=OReWbimXlEbJbF6WYs/=YuD=OR6=buAEYJAWSUYXSuPWtW6=lpbJYNvWSsPWtMQJb1AWlMx=bRPW0Nm=lEv=YJxWlR/E0ueEbs0JxN1J0M/XSF/EYu6XSpmXOUm=ljm=Ov1WSReJ0JPWtiYJlR/XluA=bpmESGA=YuQXtuP=livEbEUEx51=O5Y=ljYE0ivESRqXlueExFP=tj1EOR/EOF0ESW6JlJ/J0pbWtNmWlsqEbFDElsx=bwPEbvvEYJ6JYi1WYs0EbG/WYEv=b5UEYjmEbuQXOUmJbGPWOJDWSuxJb10XSjY=SHvE0p1WSHm=buP=ORPW0jUXlWx=lRAESNUJbF/ESsQESFAExMPJYJ/WORqWtJAEtM/Eb5bEx16ExF/ESJPE0=mWYW0WlMA=Ou0EOimJb=U=ls0JSMxJYuA=SpmEtpY=YJxJb=YEY=YExFx=lNmWlJDEt=mEOUYJxuqXtJ/Exw6E0=mWxNmEtM/Wb1QJSiUWOMxEbG0=OG6XS5m=SwqEYN1JxJQWbGQJbFAJlibWbwA=YR6JxG6WOvvElsqWtiYEbWeEx1DExEUW0RQ=Ou/ExGQXO1qWxvYJlEmJlpYWYWqEOvY=bMP=bF6=tjUJY=UWxvmW0Eb=SEvJxRAEOJqXOUb=SuAXOj1EOE1E0WxXlN1W0jmW0pmXlj1EOFqW0ueXlJ0WlueEOHUE0R6W0se=SMxWS=mWOM6=SjUWOM/JlEbJx5vEOsq=b1eEls0XSFDJSwxJ0MPWtNbWbvUJx1QEtM0ElivJbJxXOGeJljbJYuQJbsQJbUb=lW/=luPExs0ElsQJYjUJSw/XtRAJb1/ESWAEbR0Wbsx=bEU=bpYJbGxWxw/=bGxWtpbEts/EYN1Ex1D=tMqExUbJSE1JSsAWbRqXSsq=YRDJSJxJlRxEliU=OsQJxUvXSG6ES1/=SWxExM0JxMeWSJeWYu6E0s/=OG6WxHm=Sp1E0JeEYi1ExMAElJqEORx=tM0Jx5vWlEmEt=mJbsQWbwxESFAWOiYJYpUXO5m=lJ6Exj1=Ow0=bJeEbwxW0N1=luQWYJqWxw/XONbXOimEYuq=OWAExGx=tjYW0M/EOEY=Os0EtM6W0RQES5YWxNU=SEv=luPWOU1J0Je=tjUW0JeEtJ/=OGAWbwqExWQWtjbWxvbWxsxW0W6=lNmXOimWOHbWxWAJYWQJbNm=tJAEYimJYMPJSwqJbNv=SF0Ebw/WxuxExR/=S5UW0JPE0jmExFqWxEmJxFDWxvmWYi1ElWx=YWD=tJ6Wti1JbF6XOJ6ESFD=O=UESsPJ0N1WO1AExMAW0p1Jbs/JlRqWSue=YsxWtWDWOHYExW0=livWbWQEONUESG6Wti1=Y=UWxFxEbWDEOE1=YN1JxJQJSR6ElsPEtsqJxH1WO1PWbRqWbM0Exw/Wxw/WSGQXS1eWbimESsDExN1ES5YEOjbJS1DEYJ/WSpYJlR0WxibEO5vWxi1Wt=bXtsxWxF/XSibJSGQEOjmWtEb=Su/WlJAWbJe=bwxW0M6=SEYElN1WxEb=S=m=Ys6JS1eJbsDWtJPJxHYXSFe=SuqXtRAEtM0WbuDXOGA=bNvJxNUXtuD=YM/W0NvWYMqJxw6WbEUWS1DWSUvWx1eJSivJYjvE0J0XOJPESjvJ0p1Et=bWS5mWO1PExFxWOvv=Os6WxJDWbMxJxEU=YJD=OEbWb1/XSHvEOsA=bEUEbG0ExvmW0iUWOvvJSpYXO=UExUmJ0jvXlJq=O10XOWeWxEUWlWxESMeJ0JDWOMeWxwqJbMD=OJxJ0se=bpYWxiYEYuPWxvYXS=m=ONYJSp1WbU1=bw6=YJ6JxJQXtJDEtR6Jbvv=SRAJb5vExE1ESHUWbpmElpmXOHmEOvvJSjmXOReExUYEYiYEOG/=OFAXS1AJbiUWxs6JSwxEx5vJYR0EtsqWYRDEOHm=YRPWliUXS1PXSHmJSJAJb=1JYW/EYivJYW6=OuQXtsDE0=1Eb5bXSF0XlJDJlRxElRQXOM6WxJ6=OwQWSJQExN1Wl=vEb1xEONvEOvm=Ou6WbMxEbu6JSNmJxJxJSEvEtE1WxWeExueEtNmJ0WAWtu0WxEYExEmEximExWxWxsQJS1/JSpbExRD=lRq=tNmWx51=SW6EYuP=YpYXOj1ExMx=liYExUmWximJ0s0ElJeEtueJlW/ElRQESHUEOUm=ts6XOR6JYpUWOUYExWDEO1/JxJeJSpYXOpUJljY=Os/EtjvXO=YJlseWlMxJxGeXOwPWbJDXSJQE0MDWYMDJxpvWY=bWbMqJYp1WSGqEON1W0EUWxRPESvm=ONYESpbWYRxW0J/JxHvExMP=ORQEY=mEb5mWOR6=OWD=tj1XtR6=bW6=Os/Wlj1=SuPXlJAXOWPWSJ/=OwxWYRDElMQWlpYExJDEbWA=SWeWO1eWS5bElMPJSWAWbs/WOGeXSMeWOjYJbvvJbwQXls6J0u6WbsPWSMqXSsAWY=vWO5vXSFA=tMD=bjmExjvJYMxW0pmElNvXlReWxwQXlMeJ0uxXSM0EtW6WSwx=lWAESF0WtMqXtuqJbNbElN1ES10=bUvJbM6XOuPWOEmWbvYJYu0=bi1XOM6XlsxWbHvEOjmWYNU=lWAEYMx=OMAExJ/WSGqJls6WlJDEO1qExvYWYW6XlR0JbwDJ0iv=OGQES=m=SRPXS5bWtMeW0=UXSGQWONmJSWq=OReExpYWSs6JbM6EYJ6J0W6=tMqJxN1WOpmXOu0XSsxJbw0ES10Wl=bJYJDWYueJb=1=YsxXOM/WOuQJ0WAWtpv=tibWtsDJSHv=SEbWOHmJSF/WOE1=tjUWtJ6EYNvXSJ6XtWPJYJAExwPElMqXOGDWxu0=lNUWxNvJbuQEtuQ=O5UXlMP=O5mWYMAJbHmJ0sQESNYXO=YEOR6=lpY=OG/JYRQEtRA=bwPExv1JbUvESRxExuPESH1=lMPEOvvWOvUWOMAXtWxJx5b=O10EYEUWOGAJbW6WlJDWtp1XSUYWSWQXOuqExG6ElE1EOiYESGPWYNbEYsAJlsxWSivEbNYWSivJxu6=lReJx=YJSF/XtpbJSNUExuqXS10JYEYEbWQExFxXlWeESFPEtWqJYJeJxFPXlibWOv1WbHvXtR0=bj1ESJDJxjUESux=SwA=bGQESjbJxMeXtR0Jxpb=Ys/=SJqJSjYWSJe=lWeWbsPJYW/EOJxJbGQE0pv=b=b=bpUEl=1JbvmEbHvWbuDWOM6=luA=YRA=bvYJSjvWOWAJ0WDWOivWx=1EOJ6=SFeW0sAEYWQ=tJQJSMe=tjU=OFQXOH1Expv=tib=bWPEOHvJxMAJbNbJSHbJY=v=S1/E0EbXOF/E0RPW0uQJSs6=bwQWSweWSG6W0jYJxweESsxJb1P=lRPWO=bJxFPWlsP=tu/WbwxJ0j1=YEbJ0MxEOs6EOW0Wts6JlEm=bsQ=O1QElNm=OpmXlWD=SHYXOFx=OibESpmW0ReJb1Q=bvmWxuxJ0M6ExvUWbjbEYNmJxUvESuA=lNv=lsP=SseEOsxXSu0XlNmJlW/ExM6WljUJYsDXtWxJSWQWxW/EOFPEYueJSvUWO5UJxE1=lp1=bvvEbvY=SJ0JxRQXOuxJ0JQEbsAWtuqWO1xEtW/WxGxJSReW0p1E0s0Jb1PWSGQEYNmExHYJYM0JYM6Jxux=bRAESJxJxNvXSWeE0RxXOsQ=bvUWtNvWl=UJ0W/W0jYWbHYJSRxXlW6WljUEOGq=lM/WYsqESweJbu/=tjY=tiUWlJPWO16ExU1W0NbXtseXOvUExwxJYjU=S1eWYuQ=bs6EbuAXOimEYp1WlJqXlJeEbpbExFPWl=UESG/Jx5bWtJAXSJxWx5mWlNmW0sPXOs0WbMeJSGAXlpbElJ/=SRqEORxWb1D=OMQEx5m=SGQWbvY=OUm=OGxEbvvESM/E0N1EOWeXOUYESJAJbUvXlJAWbj1EbuDEbFxXSWPW0uDJxFx=YuQXtsxWOw/WbGA=OGqJ0s/=SiYJ0s6EtE1WtsqJlWQW0=UWYMPXO=vWbue=SM0Jx=v=lpvJlJDW0NbWbi1E0EmEOJDJxGxXt=U=lMqESM6=lpUXORxXSimWxMD=lJqEbMq=b1QEYseEbMAWSUUWYRDEOF0Elu6EYs6ESwqJSR0XtW0=Su/ESJxJx5mEluPJ0NvESRqWxuAXSsqXSUvExWe=YuqJSJqXOGq=lR0JYJxEbG/WbM/JlueEtReEbi1=SvbEbpmWluDEbWxJljUXljbWSwxWOs/JSNY=tJ6=tEbWSW0WSHbE0jbE0WxWON1Exwe=YEvXtueJYWPJlu/WSuqWx1Q=S=1WxJeJxWqXSu6Jb1qXOvUJYseW0ib=bUYXO5v=SM/=bFDJbHvXtEvJbiUWSMDEbHmWxMxWSN1=b1xXSFqWxseWx5YW0jYJ0jvWYp1XOsQExR6EbsqJbp1EYRxXOGQ=OF0=ljmJxu/Xl=UWtWAXtWDEOvmWOWQWx1PWbF6XtE1EYu6J0MA=tJ6ES=vWb=UESFAJSRQJbWe=OpvElR/JxReWb1PEOsxEtMDWlNmW0NY=lpYJxpYXOvbWxFQ=OvmXlWeXlsPXSwx=lJeJxiUJxsDEORDWS1AWx1qWlEmE0NmESJ0JbUb=tEbJ0sqWSu6JSvv=YseWSw/=Os0WYMQXSJ/JSJxWljYJls/EY=1XSW6XS1qJxM0=tW6=OFDJbEUJb1xWx1AXlWeWbMAJ0WPJxWe=b1eJbMAESWx=ORDExsDESGP=OiUW0M0ElibEO51=Os6XOGxEYuqJbjv=YW6WSMA=lR/ESw0=bsDXSsP=bpbJSU1E0sQXSUbWSJeEbibWSRDE0MDWSUUJ0R/EluqXt=vJbuxXOWqWOiUExFQE0W/W0J6XljbXtuqEOJ6JxWPWOFDJlu6XtJ6ESMxJYW6XtEmWYReJbsPWxwPXOsAWxuPWxWeJbJ0E0RqWbF6=li1Wxj1ESwQXSN1ESEU=Ss0ExEYWbF/WSHmXO1D=bG/WxGxEOMxWYpvWO1/=lJx=bUvJS1e=OMPESUUEbNvWb1xEOM6J0=1E0sA=OJ/ESu0=lRx=tuxJ0MeEbF6JSHvEbJeWxpmExUU=S5bWSvbJbH1WlW6JbMP=bMQEtWDXti1EtJ0EbW/Jx=vWbsPWSweWlJPElpbWO1PExUUEOjU=bjvXlMPJ0RQ=SHm=S10Wxj1WbEUEOGPEb=bWOGD=O16WluDJSu6XOGAEx1QW0Nm=YReWYNmEtJ6XOiYEljb=bpYWtibWbJPWxG/WxRDEbjvEbF0EYsAJbM6=YuD=bFPEOR0WbiUXtM/EbRxWbjbWbsxEbUY=bwQWtJ6=bv1ExpYWYJeESR6W0seJx1P=SEv=bFqExu6ExE1JxMqWYsPW0p1EtsxEx1DJluDWxJ/Jl=v=Ow0Jx1QEO=UJYJx=ljb=YWxExMQJYseXO5b=Yp1=Ow0Wbu0WOUmJbsP=b5vJSwAJSMxJlEvXt=YJSFQXlJQ=bWDEbF0JxFDExW/=OFPExsxXtJAXtEYEbEUWtJxWOFQXSGPJ0uqJSM6EYi1Wb=bWls0Wxiv=Yi1ExMPESJe=tW0EYj1JxJxJlReXSp1EYsDWlR6EtjYXOu/=S1P=tN1XSvbESUmXONmWYRe=bG6Wb1/Jl=bXlReXSMeJSu6WbRP=b=vXOF/JSM0XSRx=OGeJlimXSMqEY=mWbU1=OFq=O5UEtJ0Jb5bESjUExJeEximXOjm=bueJlMAEOvvWS=U=b51=ORD=bFeJx1AWtMAWbRPESJAWb=U=tMPJxvYXlsDXS5Y=ORPESM/=ONUElM6ESG0WSMPEYM0Wbjm=tjmXOuPWOw0Ex1QWbEUEYpbWxR0WbuPWbwAEb=vEOMPJYJ6EOsPXtNmEbFAWtpbEO5b=Yim=Suq=O5mW0JPJSvvElpvWtjUJxueWSUYXlNYWb5mXO1e=YsxWlRQ=bp1E0=YWbwqWlJ/=YNmES1qESN1=bWq=bNbESR6EbG6ESsPEliYWSiYXSEU=lMx=bFeXO=Y=tJ0ElMDExRqXSW/JxuqESu/XlMqEO5vWSGe=bu/XlEvEx=1E0uxJbWeWxuDWOHYJbimWlM6XS=mEbpY=OM6XtWDXSsq=SF0WOs0Jbim=bJPWOu0XlMqWxGqJSReJSvb=SNbWxsDEYWPESFeJS1PWYp1=Y=U=lW0ESimJSpU=tp1Wxu0JSGDWSjmJYWQEtsAEOG6EYJ6ExWDWbu/=OWQ=SW/JlimWSwAW0WAWOU1JSWAWtRq=ljUJxuPJbG6ESuQJlM6WOEvExWAEOwxJ0ivWOs/=Y=YWOw0Jx1xEO=1XSEYExR0EtsD=OEY=OWDJ0WPEOvYJlivEbFDWSJDElMQWxWe=bweXt=bXSNmJ0MAJ0EYWb5Y=lJAExw/XlEvXtMQJSG6JYMD=S5bJx5m=lpvXS1qJYMQJbM0EtJ6JbGD=SGqW0MAJxW0=tN1Xl=mExWDEbwxWOUb=OjvJYMDJxHmJbwx=luAWtNbEOJ6ExHbEtNU=lE1=bjvEbsDE0WDXtuAXtWqXtsAWbRqJls/XSsDWxF6WOimExRDWS1DWOG6XSRDWlJxEOMDW0MAJYuDJxWQEbMPEbjbJS=vEOHYJxG6XSUUW0WA=tE1EOue=bw/ESsPJSNb=O10JYMPXliUWO=bJbMx=tMeJxUmEYM/XlpmXS1xE0MQWtJxWxpU=t=1JSNm=OJqXSMeEOF/Wlu0WbGeEljvJ0Nv=Yu0WxibJxHY=YuA=tuAEtR6WxwQJbMAExEmWOJAESpvWOjU=bUvWSuxE0=bEbJxWOWeWOF/EYsxE0NUJSwe=Spv=ts6E0R/Ebu6JlJ0WOGAJlJqWx5vJS1/WlpYJlibWlWQJ0RPEbUUXSGQJYR6W0jUWxMAWbUmJxMDESuqWSuQE0u/JSRAES1PWtMDE0ibEli1=ls/JbwA=SiUEO=UExJQXtJAWOUUWY=1EbM/JS=1W0s6ExiUEtMqWbs0EtpmJ0JxXOueEbwPJbW6EOiYEY=U=tEUWOWxEbNY=bRDJbEUJYN1WtJ/WxMeEtWxJbWeWlEbWSJ/=bHYXlNmWSwAWt=UW0JqJbMxJSsPXlu0XS1/WbwPWlN1WYsPJYRqEb5mJ0N1WxWeEb1PExFqEYiUWbuP=YNU=SF/XlMAWx51WbsPES1/XlMxExU1E0uQExGxEOueWO=UEtibWYJDJxEUXOjmJSNUXOFDEts6WlMAWbGeEtReElsxJSiUXSsAXluP=OpU=OuQEbGQWxsDWO5UEx1PW0sxXlNYJxGqW0EvXtueWlMe=biYJbWAXSuq=YsqJYJeW0WD=lJeWlEYESwPWlEbJxRAWtEUJbsxXSUmESjv=bG/EbWxWbpY=bp1=SimEt=UXS51EYivXSU1Wbs6EtNvE0pbJlReXtsxESFPE0jUJbimExuqWbRAWYJ/WOR0XSvmWxwPJxpvEYM6Wxs0WOG/JbNvWbjYJSR6XlEYJxw/E0EUESwxEOpmJxwxEtRqWx=vJx1qXtuDWYRP=YsPWbsqESMAEx10EtJPXOMD=YJAWSGPJYWPWOvY=YR/JbF6=luAEOJD=b5mE0J0WOs0WOFAEbH1EOwAJxibXOu/=SJAJlsQ=YEbWOG/ESG/=tMQWbJAEOW/WxwAWxuD=OuQJl=1ExG6JxRAES=vXOWq=OimJ0=bWlJAXOjmXSib=ORDJxvU=ORQ=liv=SUUXlJQ=b1AJbRDElWe=YJP=Ss/EOjvWbiYWO=bESGQ=tM/=YEbWSUvXOW6EOJx=SF/=S=U=lMAJlu0=bEUJbHYWtuPJSRDJxRQWxRAWlRPE0=bEbFx=tu6J0WQJxNbWbJx=bEvJSs0WbMQ=l=UJSWDWbvYWOH1Et=bWYM6XluqJSHvEOWqWbReE0NmWtWDWlJAWSiYWSRqXS5v=Ov1JSWqESGQXOUvJbWAWxGqE0im=SRxXtEvExRDWOv1Xlu/EbsqXlibJSJeEl=bEtsq=SWqJYMQXS1qW0WxEtJxWSGQJSHU=lNbW0R/=SM6EOJqWS5YJ0JxWlj1WYJA=S=mWbuD=OUmXlMDXOW0Wx1D=tNmEYNU=lRqWbJxJSjmWxJ6WxiUJY=mEYsqXSHU=li1XSu/WbFDElMQWbGDEbGxJ0=bJxM0EYMAXSi1XSR6XSG/JxpYXSsDWxw0EOMQJxpm=SW0J0J/=lNmWOGP=tpU=tjYEOJ/EYimW0iUJlEUElRDJbH1=YEvWOM6ESw6EYMxEtWQWb1PXli1JlRQEtRe=bE1WYivJSRQW0MeEbM/Xlib=S51WbGe=bM0=bFx=bWAWYsQ=ORP=lWPWSUUXSR0J0jYEtRPWxpUXtRQES=Y=YuA=tMQJbEmJSEYXluD=Yu6=OJ0=lMPEbFQWbu/EOpUWbWxEOvYWls6JbsDJbRq=OH1Ebpm=SMx=ljmWO5b=bEb=YWDEYNvWY=YXtsD=OU1EtJqW0pYJxsQESMAWYpv=bGqJxJ6Eb=mWlsDWOseJSUU=OR/EY=vESWQEtpYWOE1WxwPE0seXtJQEbFPWSHbESGqJSM/ExE1JYJ0JxE1=Su0=bi1JSU1EOpYEljYEYpbESs0EtuD=lpYWbweWtueWSUYWOWe=bFAXOj1=libWSs/=b=Y=t=1JbwPXS5Y=OJQJYWPJSw0=lu0WtW0WO16=tJ0WOWAWOEmWSwe=bsPEYsAWOG/ExjvJbReWOHmWOJQXSpYES10WxjUExuAXtNUJlRA=YsQWOEvWOWqJYjmWSwDJYjm=YpvWb=bXlsq=OR/ESEvExF6EOJ0=SpU=SGqESseESNvESMQEYs0EtWAWSMqEOU1ElpYWlJAEYW6ElR6EtEUXlp1WxFPEYJ0=YM/=SJ6JxpYWbJAEliU=Y=1=lNvEtR6XOuAXSjmEOG0WxHvEYMD=SsA=O10JxpbEtNmWOwQ=lMeWljUWbWqJxF0=tEYWtJ/=bw/WSuA=OGP=ONUXtMxWlW/WSweESsQEYMP=SvU=OvbEb5mXOUvJxUUEtRqESW/Wxi1EximJl=1ESGxJ0ib=SMA=lNmJbN1EbReJ0J6ElM/XtJqWSEmElRA=Su/XOw/ESMxWb5YEtsxW0W/Wl=YJSs/Wb51JYW0Wx1DEYNUXtJeWlsqWS=bJbuqJbN1WYNvJbRDWb=mJbGAWxJPXtpUESW0WSUUESMPXlimESJqWYp1WxJ/E0sPWSNmWxim=OpvEtMPWYWAE0RxEYivEONvEtimJx1xXSwDWON1=bv1Wb10JxUU=bWP=lJ6ESMDXlp1WOU1ExGPWSUUJSwqWt=UWxE1E0imJxux=bU1WSGA=OJqJlsQWSs/JSJqExuAESpbJlRAXtWPXlu/ESMDXSWQJxMAWxJ0JSEmWb5mJSEbWYJqXtjmEY=vJSNY=bRQJY=bWSJqWbvb=SibWSEYXO=YXOUYJS=UEbimESWDXlW6WlR/WbJAJ0RqW0j1=bw6EbsQJxWP=SFA=tM0Wx5UWYWPWlNU=bGe=OJ/ES1D=SRQWSvbEbim=OvmJxu0WOuDElu/ElMqWxRxWOjmXlWPJSGA=bWA=ORxEbM0J0NYEYuxXOGeJYuDJbWQESMe=YuqXtRPJ0pU=tEb=SpYJSRqWbsQE0WAJ0ue=ts0WOHb=SJqWbuDWb=mXOw0WOpvJx10EO=U=OFQEl=bEtuAEOwqESsP=SuqWx1q=lJDExiYEY=1W0uxWbWPJbW6XSW6J0se=SRAWxuxJbjU=tMP=O16ESUmJ0WxESiU=bGxWbsQW0Rq=SFqEbw0=YJQEYs6EbRDXlWD=lMxJ0RQJlsDWbFxJx1xJbWPXOFxJxFAJS=vElEmXSW0=OwqEbwqWOsDEt=1=bJqWS1PJxRQJbHbJljUExsA=OR0EY=bJxF6Jb1xEYR6XOF6=lM0JSJ/WSHUESJ0=bjmWbux=bw0EOueWxRPXlMqWxuqJSs0WxFqWxUUJSwQ=lsAXOsQ=S=YEtjYJSwP=bjmJluDJxuQ=SNbXtp1ExWQXSsDJSGPXtpUXljmXSuAWxuxJSNvWSHmEOwQJxJ/WbHmXSwAXSs6JY=v=SpYES10EbU1ESj1WYWDEbpYWxUvJbwA=tE1=bM0=b=v=O5YXOpYWSGeESRA=SW0=S=1WSHvESpUJbW6ExuqWxuxXON1WtuqJlJ/W0NY=SRDWS16EORAWO10Ex1e=OJ/WYpbWxJ6WOpYXO10JSFQ=lJx=ts/XlRqJY=Y=SuQXluxWxRQXlueWbM6EOFPXSJAWSueJS10Wbue=lj1WOu6EtRx=bjmEOpYE0R0WlJeWxjmEljYJlu6XOsDJSu6ESwqJbM6WYjYJ0NYWbJxXtu6XSN1Wb1xJSMxWO1eJSj1=YMDWlW6ExFPXlj1=SMDExUUJxG6=YMxJ0N1Jb16XOiYEbJQEtRQ=bW0WtiYWtibJbJ6WxHbEluqXtR6WxJxEtsqElEvEl=mESw6XOvUJbjv=tJPWxJq=lMAXOueWxW0XSp1Jxi1EtEb=Op1Jxw6Jxi1EOw0ESMDEYJPESNvXSGe=OFeWbpUJbpmEljYXORqEbMPXOFeJbueXSpUEbwDXOGQXSjmEls/W0s/ESw/WO1PE0W6WtJxElMe=SW6EtRxXO1DE0M6=SEUXOUYWtuQWbFxJx=mWx1DXlRDESF/ExMDJluqWxs/XSRPExJeEbw/Ex=vXSUmEO5U=YWqWSFDXtuxEbseEOUmW0ux=bFPXtsqEbsqEYp1Jx=mJlEbJxJ/JbsDEtEbWYEUWOs0ExWeJYNU=Sp1JSimExueJSuAEbNYWSEvXORDXljmWt=vEbWPJ0jUESJ6EbWP=SuxW0ibExHbExWA=YJPWtuDEtWxElJ/ExWqEOuqWOsDWt=vExsDJbuQWO5UJxRqXSNYWxvv=S1qWY=UJbHb=ONYW0N1=bpU=bsA=tiYWtEmES5mJYs/W0Re=O1/ExHbJbGeElsxEtMD=bJ/XtJqEbpmWOWeE0RPEtNUWbRPJxJP=OH1XSj1=SGq=YpUWYjmJx51JYivXOw0WbJqJSHbJx5v=YMqXOFqEtpUJxJQ=Op1ESF6XOHYJbMQXl=UJlEUWtJxEOwPEb1PJYWxEO5YJxNvWYE1WtWPJYNvJxE1JxF6XlR6JxEm=Spv=bv1=S=bElW0=tE1WOMQWSwqXSsA=SjmElJ6=SW6J0WxWtW/WOR/ES51W0W0W0jYXlR6JSGAEtsPElM6W0MD=OseExvbEtJ/WlsQWbMPJx=YEOvUE0s0J0pbWS=Y=YR6JSUmJxvvEbRPXOu/E0NUXOs6=tsAEO=UXlse=b=UEYueExFDWSWqWximEOGDWtRxWxuDXSj1E0=bJ0=bWx1e=Ou0ES5YWlRDJ0imEOHYW0WAWtRxXOWxXS=bEO51EOGxWbuqWbv1EbpYXSue=SFeWxWPW0JP=lsxWS1AEOFDWbNbESu0E0MxXSUvWOUY=ORqWtMeW0NY=bjmWYRqEYjvXO1/=lRe=YMA=Yj1ESN1WYsAEtW6XONU=OEvExUUJxvU=tNYJSseWbFxJSuxEO=UWS=UXlu/=O=vEOF0EOuxW0s0E0MPXlMAWYRqJxpb=bEvEbJ6ESiv=lJ/JxvUJxWA=bEYElib=tux=SMxEbWAWbivWbivESJ/EORAEOjYJxsQJSseXSuDJb1QEtRqWb1QXtiYWYu6WtMQ=tWPJbJ0JSE1WSsAJlWqJxRAExw/=tMqJ0uqXtNbWbJ0Wx1PEbFQJxWDWSiUWx=UJSFx=OEbE0im=SGeE0EmWSRQJbWQE0pvXOJeEO1AJbM0XSNm=bNU=SRA=OWPXtuqEtpvEbUb=bvbWlJAEOW6ExFx=OG/ElibWbWD=lp1EbF6Xlu6JbJqE0R0JbuPElWeJlMAEONvWSFxEbRA=YNmWxvYXSwQXORqXSjYEbueWbpYESjYElJPESJ0Jbs0E0pb=OH1=tuAJYu/=OwQEOwxXSs0WORQW0WqJxw/ESs6=tJD=Sv1WbRxXOHUXtN1=Oi1WYR6E0uqJSWDEOR/ExsDJlJ0JSJ/Et=mWSNYESp1XOi1ElMxEYRDXlNmESu/EtNUEbWqXOjb=SHbJ0J0JluD=OWPEb1qWxs/=bHbEbvY=b51WOWA=OGeE0jvJ0jUWbG/JYJqW0M0EtWAJSsQJYWA=YNmJbNv=bRPWbNmEluDW0sx=bwQWOsPE0W0JSHYJSp1=bsqJlW0=SvU=tuAWYjUES=bExMQWbvYJlu0XtJAESUv=tsQElW/=bJ0=YJqE0ReWSj1JSWPJbRqEbGPE0WA=tEmExWx=O1Q=bjv=bibJSv1WbseEbM0JliY=SwDWtNUWxiUJ0jvEYsqEtMxWYE1XO1xXtNUWlsDWxEmWbWAJx1eWYEUJSuPXOG6EtWeXOw6=YuAEOwxWtpbWbwDElsP=b5v=ls6Ex5bEbJD=Y=v=OG6JYNbWSNYWSu/J0W6Eb5vJb=YXOF6E0WPJl=1WOW0ElNUJxwqEY=v=bNYEbw/JbHmEtWAXtuxWxMDJxW6WliY=b=mXtWQJx=YEtibJSM/=OJ/ExvbWOw/JSiYXtNU=lMq=Sv1JYReWOEmEOH1XlEYJxJPElN1WbvYExs6WO1AXlpYE0JQWSGAExu/Et=bWb=vWSJP=SWQESF0EtR0EbJqXSvYElWDXS=mEOHmEYMxW0N1JljYWtRPEYjvEbpvJSG/=bsDXlMPExvmJYj1=SNmXtMQWSMPEOjYEbi1=lRqJS5bWbJAXtMQWOimJ0RPXSM0=YEb=SGxXOU1WtJQEOuQ=tWeWxsPWtjUJlE1=bGq=bW6WSpvXti1WOHUJSu6Wb5vWxHmWxpbWxuDJbFD=OGeJSJqE0RqWlNbJbwP=lW0WtRDXtWPWxJQWbFeJbJQW0Re=YR/EOpY=tWAJ0MeXSGDESpmESsqJlpYXO=mJSN1WbWqJxwxXSF/=bs/WbMeJxHYJSwP=tWq=lEmWOi1JbpUEOHYJlimXSRAESjYJ0JeWbw0=Ou/JxE1JYRAJlEmXSFAJ0MQ=OWQXljm=tEYXlRPJxs/EbFxJSGQJbGDXO1PXlM0Eb1eW0pUWbF6WSivWxpmWxuAEONvWtsDXOFPJ0jv=lseJbsAEOj1Jbse=lpUWbUvXSH1XlE1WYMqExH1=SvvJYsP=bRAEbJAWlJDJbwqXtu6J0ReJYJDWbpbESiUWxGPWb=mWbW0WY=YJbG6ExUvEYjYWSUvJSEU=YuxW0ib=bHm=YuDJx1AJYRQElN1=tMxWSs0XS5mXSJA=tJDWxivJSJAEliYESRAJbseWYu0XOu/=b=m=OWPJxw/EOweExvUXOuPJSEUWxWQEbJDWxjvWYMA=tWPWt=m=OWPWlWQWxsqEYpbElW0J0jUExJeESwPJYpvWxvvES=mEtRAWbGxJxEbJSweWlRDWOE1WSGeJbiU=bibJxi1JlW0WtJ/WOibEORQJb1DJSwPXtEYEbEYWYuDJlJQJSU1=bjvEbUm=b=YJSpUWb1DWlM6Wbu6WxEYWYiU=YuxEONb=l=YElNbWbvYXORQWYsqXl=mEO5mXS5vJbJQ=O=1XlJAWOJ6WlimJYJ0Wls0=bEYES=YXORQElpmExJ6XSs6XtjUEOu0E0NmXlMPXOwxWS5vWOUYJSsxJlEvWONvWtsxJbHY=b1e=YNvEYJqWx=bWOGP=OR6Xlpb=ORAJYM/WlueJS10Ebs/WlNvWtpv=lEmEbueJSFQExF0=Su6XlM6XOWQJxiYXO10=OJ0XtE1XSEbEtsDJ0s/=SJeEbs/WSu6Eb16JSpvWtMQJSUbJxpvXOWDXS1e=lsAEl=bXORxJYRe=ORQ=luDJl=mJljmEbsq=bEvWlivWSj1XO10=OWDW0N1J0JAJS1PXlMxWOwDXOR/WxRPJlWqEO1PElNb=bvvXtpb=SUUXlJxEx51=biYJbjYExweEtRAEx=1XtWPXtM0ExUYWOUmWls6EtuAXOwAWlR6WOpvWluxWSMxXS1DJYR6=bEv=Ow6=lJ0JSRxElEbEOWqWlpU=SuAXSGPJbiYXOHYXON1Els/JbReJbF0Jbw6ESR/ExvvXS=bXSNbWSR6=OFPXtpUEYR/WSNv=lsQWxJxJSw/=bRqXSvYJxU1=OMPXOpUJ0s0ES10JYW6JxMAJxvmEYEYWSwx=Swx=Ose=YsAJS5b=bHvEx1/JSRA=ONbJlRAEl=bE0u6EYJDWtMPXlEbXlJ/JSW/XSWqXtsDJlRD=bMPJx5mJbUvXlWAJSwP=ONbJbu6WxWPExHU=SwqJb1PElWA=bwxWOseXlsD=l=1WO10ESFQJlRx=O=bEOReESEbW0E1JxEY=bMQEx1QWOMDEbuqJxsA=SGPXSibWSFPJYMQXlMQ=SWeEYuPXSNm=YM6=tNmEOwAWlp1JSFxJSGDJS10EOUYWSFQWxUbJ0imWlMeWx5YWSG0XSEv=ONvWOReE0sPWl=m=bjY=bW0WSEm=bUmESW/WljvESG6XlWqJbJ6XSw6EbGx=bs0JbuDJYMQJxvvJYM0Xl=b=bjmW0WqJ0sQWbJD=SuDJSEvJxMeWSu6XSG/=SweExFDJ0jbElpUWbuPEbM/JbMe=lMq=tEvXOpvJYJAWxGxXlEbJSFPJSw6WlMQEtpYXtM/JbJeExWDXSibEtRAJ0Eb=SjYEYNbEbEbWxsPEbjbE0j1XSGPWbWPJ0sqJSpvXluDWO5mXtu6WSwPWY=mEb1Q=bWeEtjm=b16XSE1WbjbJ0sAE0R/WSWPESGq=liYW0EbXSGPXSNYWbpvJY=1JxJqESG0E0uQEOMx=Ov1EOp1WOJxWljbJSW6EOMq=OvbExwD=tM6ESJP=tpUWSEUWOuQ=OG0EON1JlJPESuDW0JA=O=1=bNU=bWQWxu6ExEvJ0N1XOivJSjUWOR6WSsDWtNv=bMx=lW/WtNm=ONUElWqE0seEtux=l=1E0iUWluQXSM/EbHUWYpmJYs6WbJ0ExFQJxGP=lWe=SWAESMAEOJxJYRAXSpbJbNYEtj1ESRqEtN1JSRqWYsPJSsxXSGxXSHvEb51WSUY=tNvWxuAWSJ/ElRQ=OuxE0EbEOW0W0EbWx=YJSJPWbJPEx=bWts0ExNYWlRD=tE1WOpvJxuq=OsDXtJAESi1W0Jx=Sim=t=UXlpUJbM/EbpbXOJQWSRxJYNvWbWD=OJqJbJe=O=bWbRe=Su0XlibJ0RDEbRPWts6WYimJbWeJxuxExFQ=lJ6WxJ6E0NmWbJA=OuQXOFPWxG0JSUvEbwe=SR0XOw6EbR0WbvYWYuxEOw/XtjU=OH1W0sqWS1eXti1=O=mWYsqEYJA=tueElJ6=YWx=bW/EOHYJbUvWYWAXSN1XS1QJxwQXt=mEtiv=SJP=bMD=b1x=tuQJSR0XlNUWxu/=OMq=OimElsPWb=UWlRe=SWAXlWAElJPJlR/WbMDJbJxW0JxEtuxJYWxW0sP=tpmJYNU=tibExFQJ0EUEOwQWlEmWluDJ0u0JSwxElEUEYMQJ0W0WSHYJbuQEOJ/EtueXO1eWOF0E0RDESF6=YW/WbEm=SFA=YJ0=Su6Jb=Y=OwAWbsxEtJD=bR6XtueEYJ0ESjbWYsDWO=1ESweXOR0Wbim=timEYEbWYMPJxHb=tJAElMDJYMq=tu0WYMxEtRQJbjb=ORA=bi1XSu6Wlu6W0iYWYsAXlpYWxF6=tivExpbWS1qJ0R6JlivW0W0EORAEtsP=SMQ=OW/WOEb=b=Y=SM/XOi1JbFQEbuAJxEYJxiYWYjmJlivW0jbE0uDXSRAWSHbE0jbWtu/WYMqWOpmEOwPEOG6Jx=m=OUvEOsDEbsxEbWQWlMq=S=mWxW/WOR0WSpUWlivWbpvXOFqJls0W0NbXS=1JS16EbJ6JSweJY=mJxW0=tRqExuQElsAXlpbWSjU=Spb=bGxWlib=OuQJbw0WYJQ=bFPXS10JbseE0MeESUY=SJeXSGQ=tNUJbWeEYJ0XOG/XSuAWtJDXOJPExseWSvbJSvYXS=bEtJxXOJeJbRQJxWeJSMD=YReJYWDJxMPEYNYXS=UXtu6Xts/XlsPEtuPJS=1WSwPEYR6E0J0=SF/ESEbE0W/XSMPEYNm=OM0JS=U=tR0E0=mWlpbJlJqJbs0JSFqESGAWOWAWbvUJYWAElEvEYRQWS5UEbv1ExM6Elj1J0R/Wxs/Xlu/EluQ=OsxWOG6WOGxElW/=lReJxWDWO16XSWPE0NvWO51JxM/EO5UExU1JbJAEO5b=tpbExj1WbvbWO=1WlMxJlJqEOG0WbsPW0EbWYs/WSNU=O1/XSFeEb=vXlpUElN1XOuxJbwQWxJeJl=vWOEv=buAWYpbWYW6XS10WlWxXO51=OsDJS1eWbN1JbMq=SEmXOR/WSRQJYsxEbH1EtRPEtR6WYuAXOGeXOuAW0=YWxwAEt=b=buDJbu/=tW6=O16W0=UJbJq=tRq=SimESWqXOGDESHbW0=1EORqWxj1ExuPEtMQWSuDWbJPESEmESjvE0M/JYpU=b=U=Ow/JlRAWSH1=bHYWOuDWYMD=bsQESNUWx=b=lpbWYjvE0RA=luAElEbJxMAWxi1WOF/XlWxJSseWSM6ElMxEts/WbW/ExsqEOsPJxRPXOw/Ex=YJlsP=SJqJ0=bEYReE0p1WlWeWSjYJY=bJYR/EbwAWxW/WSW6=SR0WSi1Xls0WxjvXOE1JbGDE0s0=OuqXSJ/=bRxXls6JYpYEOwPXOwAEOpY=SueEtsqJSUU=tR/WbF/WSFQJSwAWx1qE0RQEtMDXSweWSvmEOWxXl=UW0J6=Ow0ExsQ=tMeElEvEbEYWSReJxGP=bG/=tjbEtMPJxM0=OGeWOM6JxNvWxwAXO5Y=OvbWxG0=SJ6XSFeJSue=S5U=SwxXOW0=tW0WONmXO5UESjvWbpvWx5UEbJDWSG/WOs0WxM0Jxu0WSvmWlMAWx1qWxR0WlWe=S=YJSWx=SF0W0EmJ0NbJxu0EbMQWtsA=Yu6Jb16Exj1WtW/JSUYJSNmEbvvWO=1El=YJb=mXOFP=buq=bFeWtMDWtuxWts0W0E1JSp1XlEbJYN1EYs0WYR6EOibWO=UWb=bEOEUJSWe=OJQ=tjUWSUmE0NbEtMQWSGxWbseJ0pbWOW/XtJPEO1eWlJAEORA=tj1JlW0WxMAEtJqWbRAEOHbESsAXOuPXSF6Wt=1Jl=bWOueJxj1XO1xJ0Ev=Sux=bp1=OHUWOJDJ0ivJls0JxivWYJ/Ebu/WbNvWluAWxwDEl=vWSj1XlMxW0u0Wx1eJbvUXlJ6ElWQWSw0XOM0=SEmESWQWbs/J0iUWtjb=SReJxGx=bEmJYpb=l=bXtibWtWxJbWeXSNU=bNU=lWP=Ou6JY=bWlEmWbWxJxNbJlueE0s0=luPWOuAWSJA=YJeEts6ESM6EYpmWxsxJlu6=YJxEtNmWYpbEtj1EbWQJYpY=OsP=OG/=S1eWYRDEl=bJlM0ElWQESFAEluA=S5Y=ONv=SwxWO1/EtM6=SFxJS1q=bwqWxJQWSWPEOM6=O1xEbMe=O1DElWqExJ0ExRxJS1qJbpvWbvmXSReWYJeJxHmExMQXSGPEbMDWYRPXSJxJSsQWYs0WtMeXOGQWbw0WORPXt=UWbwPWOjbEtEvXOWP=OMAWtJ0JS5UXtibJlRPWO10=OiYJxpbJxvmEt=vESNUJlR6XSN1EOMQE0uQWSHmXOseWY=1EONvWlNYESHvE0JxJSwAXOFqESs/WlMPXlEbWbNY=OG6EOi1ESJeEb=UExNUJx5UWYs0=Sp1JSNY=bM0EONvEbGPWbH1WxwP=O1e=OFqWSj1WYpvExFDEOsx=S1DEOGQ=bW0EO1/EbRxEbsxEO51WOUYESF6WSsQ=YuqXSivExpbJYuPEbUbWlR0W0WxEli1XtpU=tjvJSHvJb16WSuqEO1xWSHYJY=UXOu0WxMQW0iYWbNbJluDXSReXSG6=bWAElEmElseExRDEtN1WbjmJYJPEtJeElsqWts6ESFAW0RPWxRqWlRQElu/WOiU=b1Q=O=1Ex1AWluAWx1/=OJxXOGDJSsPXl=1XOR0XOjmJxuQXl=vEOUmEYR/WOHU=t=mWbWQ=OWxXlW6Ebiv=bpvXOWeWOReWSGeXONYWYWPWtRx=bsAWYW0El=UWxuAWSFqEtjbJ0iUWOJqXlJPElu/ExWAEb1eEtueWOuAJSUYElJDJbHYJxpvEOGxEON1XOHv=O5m=SUvJxJeW0uqWYMeE0J6WOjbXlEYESF/ESi1WxpU=bF/JSJDE0NYJlM0EYJxXluqJbHYESRAJbwPXSwQJ0sqJSw6ExRDWxvvEtp1Ex1AWOF0ESNmXSReEx1x=lEvEls/Jx51XtW0JSJ6XtW0Xtu6JxJAWSMDWxvbJb1DWbJ6Xtu6=lJe=tNYXluDWbsDWYJq=S1q=bsPEtMDJSNmJbW/EOi1Wx51JbWQEbEbWbvY=bJPXtiY=O5U=ON1XSjY=OiUE0pvEtRA=bjmJYpmESu6ExJ6Eb1PJSjU=Yu6WbuqJxjvWO=v=bE1E0EUE0i1Jlp1EtEvElR/JSNmWxUvExvvEtseWYiYESuQ=bRDWb=v=bH1JSibW0jb=bjY=SEUWb5b=YWPWSN1WxW0JYpYJS=bJYpbEbNUXOJPEls0JlWqJlEYXSuqEYNYXSp1Wbi1=bJAJbNUWtuxWOueJxRDEYM0EYuAXOUYW0RQJxFQEbsqWxEmXSNmEOF6=lRx=ONmESwxJ0pYWxG0XSu/=SsDEYu6EO5YWSNmESuqEtJQWbjYE0u/EO1A=bGQXOJeJYE1EbF/WONbJlpb=bGQWtiYWO=1XlRqESwQESWxESMe=bJDXSJ/Et=UXlRqEx16WljbWSR/Wtu0=bpYE0JeEYs0JYEUJ0WAWluqWxUv=lM/JxseWOjmXOWqXljU=bU1JSux=OH1JlM0=YRq=ljmWtNvXtjvE0EvE0sQ=OJ/=bue=t=vEtWxEYMx=SFq=SN1JbReJSF0Wtjb=lMqXSsqJb5YWSsQWY=UXOMAWxw/WtsPWbJQE0sAEl=YEtjb=Si1ExWQJlWQElu6Exw6=lM0JxuxJSNUEOimE0JP=OWD=bsD=tWxWYJe=SReEOFDWbGqW0MDE0jvWYR/=SR6WlRxElpm=bFPJbuAXtsPWOw6=SF0JYReJxjUJ0ux=Sw/XS1q=OJQ=tuqExF/ESsQEbvYWxWDWtRqXOW/ESu6ESReJSGeJSG/WSMe=bjY=l=Y=t=1XSEvWlN1EOGQWbR6XOMDJlWeJ0E1EOFPWOw/EbvbWxjmEYM0WbpbXSiUEbJeExHvESFeWYE1EOivJxpbJS=bWOMxWYJqXtWxJYuq=bu/W0=YJYj1ESwQWxMQJbR6JYib=tEbESFDWbjmEOiUXO1x=tjYExuQEONbEb1eExEmJbMAExFQ=bJxJxJxJbNUWbHbWx5v=OvmJlivXtpUJbWxExWP=S=bExF6=tJ0J0MqXt=mXOsxW0MDESMDWxsPESGeEYEbJSiv=YibE0sqExsPXOw/=bivJSN1XlWAWYR0JSsqWOJ0XOuPEOU1EbuQXtRDEbMe=ORqEYMDXS1qWlRAXOsQWOG6=OUbEbjY=YWAWxseElEU=OG0ElJ0WlsqJSRDEYWxEtNY=ts/Wbu0EOwQEOUm=tNmXlWe=bM0XtRQ=bWAXtsP=t=UWSM6=lpUXSs6XO1xEx=YJ0MeEbueJxjvEOMDEOvUEtuxJbRqESHm=SuxElMeW0NbExw6XSjUJSMxWb5bJbWQJSWDExuPJSseXSFAXlsPExwAW0EU=OuAXO1DJSJq=lsx=SE1WONbJxGPWOM6=tuq=bsPEOGAEbHbWO1e=O5m=bW0E0=mEYuQXtRq=t=1Jb10JSuAJYReWOJqEb=YJSi1=YpUJbFAWlEm=YsDJYMDEO5vElM6ElN1W0RAExReWOw6WOJDW0pmESuPWOWAWSFqESU1EOseWtR0JxW/ExMxEbG/JSRAWtJ0XOR0JbRAEOMQW0NY=YRD=tNbJxu6=lMAWb5YES=bESs/EtW/Wts6=tuAJSjvWYW0JSFeWtJ6=SNmJ0ibW0NUESUYEO1/W0R0JlEY=YseW0EbJSUvJlR6WbE1JlRDWY=bWSWDEOimEY=bJbuPESsDExF6=lW/JSEm=SibXls6JxJQWlJAJx1A=SJD=lpvJx=UEbwDWSJP=tEYXS1AEOiU=SFPXON1WSM6XOJ6=tpvJxJxExW6=SHmWluP=OJAWlM6WlR6E0J6JbibWlEm=Su6XtsQXOsDJbH1XSuDExs0EOW/JYR6JYs/Xljm=bimEbRPJb1DWSjvJS1xXOpmWb5UWlNvW0uqW0sQESWAElMeEbN1ExUUJb=mEb1PWtsx=OsQXORqJYR0Wt=mESRPWOHUWY=1Ex1D=bRQ=YMDEOGQJbW6ExHbJx=U=lWAEl=1ExNY=bJ/J0EmJb1xJ0J6EljvJbMP=bs6JS5bElJDXSseWYEb=SF/J0MPWxvvWbMAW0=UWYsq=lNmEOsDEOp1=ljvJbJ/=SEUWSJxJlW/=OwD=tjUW0s/XS1PES=mWOHmXtN1Wx=vWbJxJxUbWOEYWtNvXlj1=O5bEYW/Xts0WlR/ESEv=livEYWPXS=1EbiYXOvUWYMDWbWqESw0JYue=YM/ESsDXtivWx1P=OuqJxHbWxU1ElibEOsQExEv=OFxEY=UJbwQXOsDXSFqJlibWOiYJbF/W0J/=lRAEbWAXOwPXtMDEOjvEbHbW0W/=tWx=bEYESUUE0jUExJeWtjbXlWD=tsP=tuqW0M/WxUmWOJQE0ueWxu6JxGD=bJDWliUWxvU=Spm=SJqWlE1JbivJ0RqEbF0ElR/JxpmWlpUElu/=l=v=YjUExuA=tim=OReJ0jmEOM/WbpbJYJAJbsAWbFq=ONUJxJe=lJDJSHmWSsDWYWqEbW/WSJ/XlEmWtR/EtRe=OJQEOuPJxJDEluAWxJAWxJPElRQExw6=tW6JY=YEOpYWOWDESjvEOU1=OWAW0sDEbwQWbjmJ0RPEYW6WOweWYuAWSFAWtJDJSFq=OuPJS5YES16EORAXlsDWbW6=bJQWxuA=YR0ES1xEYueWtE1EOuxEtMDWbUbE0uAJxJQJ0jYXlN1WbwQWbFxWONYJYN1=YWQ=S=1ElsqEtJe=OG6=bUmXlWeJSwQExMDJbJ0JlpbJS5b=OMQ=OWD=YJD=bsqWtWDWbsQJbuxXlM0Jlp1=tpmESF0XSiYWlRA=YMxXlNYWSH1WtsqWOGA=tJP=Oux=bMDW0NbJlNYWt=Y=lRxExHYXOGAJSuAXO=bJlE1XSW0=bG6WbU1WbWDWYibWYMQW0EvXtRqW0jUWYWPXl=vEbGeEOH1Jbs6=tuA=bWPWYEvEbuQXOivW0M/Jbu0WbpUJbMx=O=mEtRDEYsPEORQEYsQJbN1=YRDXSsqWtj1XtjUWOJDEbJ/XSHm=lRPEYuQ=lM/JSMeEOR6WxJQXSsxJxJ0ExpUEYJ0ExW6WOwAWOuD=bWAJSR0WSimEYMxXtMPWxvbJb=UWlsQ=Su6=YuPWxGPWYueE0NvJxFeXOGqJbuxXOueExMeExGeJ0ibWtWPElW6WOWD=SG/EYJ6WbsPXtNYJbsq=SEbWbjUWSGAEbJP=OM0XOu0ExEmXls/Jx=mXlpmWOU1Wb51XOJAJSsDWtN1EYEm=bE1ESueE0RPWYM6ExuD=SiUJYRxJYsDWbFA=bvmWSRDJSMQ=Sp1=luq=lRPJSNmJxFxXlWQWlEbJbUb=bivWbM6ESsQJYWQEYiUE0pmXOpmJYjUWbEY=S1Q=lEvWYseXSWAElEvJlpm=SReElJAJx1AWSWeWSiU=OuqEbMDWxpYWt=YWbRDJbFAW0W/Eliv=bwe=OiUWSR/=bjU=OueJbu0=tWxEbF/JxWDJxHU=SMPExR/JlMQWSibESuDWbN1=Ou0EOueEOGe=SRDW0ibEYjvWOpbWlWQExw/WxJqWSGeJYuDE0RxXtuxJYWxWOGqESu/WtNYWx5YESRPXS1AWtRAJ0u/XS10=bvv=ljUWbEU=tjUE0jb=tM0XOp1JxjvXOvUJxFAEOw/XljmWSpmEbuDWxJ/EbueElMPEtN1=OUmESsxWxw0=YuDJbJPEx=U=SRxWSR/JxMPEbFxWYuPWS16J0jbEOjYEbsQEOsDWxsAJ0uPXOJxJYuQXSseWlR6=SW/WYWAEOEYExHvJbj1ExRxElWqJxEb=ls/E0seEYsDWYiUXOwA=YuDWb1QJbRqJb=mExRQXOEYExiUE0jYExpbWtsQEYNmEtN1EOWq=bEbElpm=SFAESpYXS1/EO5vXls/ExUY=OE1WbNYWxR0WOvUXtJAEOjm=tJ6XOWAXtseEbNbWSJxEtNYWOFeWtNY=OWDEbRAWljvXtRqWSNv=bsAJbW0EOFe=SF/WSj1WYpUW0EYWYR/=Ss0WxuxESu6EOi1WxM6=YjbWOsx=Oi1WSHUElMA=O=YJYsq=Sse=Y=bEOsA=tjbJxHbJlRA=ljUJbMq=Op1XS5YWxvvEOMx=Sj1=tJQEx16XtE1E0W0EYiYWx5v=OJ/ExueEtp1=bueWYs/ExFx=tMqXOsAEtWxWxsAJ0MqElW6ESMxEYs/EOEmWlM0ExEYWbMDJxF/=bFPJbWDJxU1JSsQJlMqWSWeXSMQXOwAWOMAWbuQEO1QJ0=mJSNm=Op1JSWPWSM6WORAEO1xExu0EYp1ExFPJYpmWlRD=Opm=Ys/XlJ/XlWxJ0uQ=OFqXtJeJYimE0p1WxNvWSUUWYM/Jx16=bWeJlR0=bv1JlN1WSEYElsAWORxXSM0JY=1WSM0JlR0WS=YJSMAJbFxExjmWON1JSW0J0JQJbWqJSJqESNUWxR0JSsAWSFxXOib=bi1WO=mWlseElEmWOuAJbFPWOv1W0MPJ0MxXlEvE0R6ExNvWS=vWSFQWbw6WSuPESiUXSGAWlpUJbueEOpbXlsqE0pUWb=vXSUbElN1EtuqEtEmJSiYWYWeJlNU=O=vJSEb=bw6WOjYWx1qJSJA=bNY=tNbWbw/WxuAXtjmXlMqJYM6ElRA=SF6Jl=YXlsPWSMQJxMxJbM/=Ouq=Os6=YReEbwDEluPWxF/ESMQ=SG6WbiYJlRA=OpmWbp1W0=YJ0s/XOuxW0sDXOM0WlJPW0sAXS1QJbjbJYR/EOi1XS1eWxibEOvbEti1JlN1EOEvWYEmJlsxJlseWlp1WxwxEYsxWlRQEb5UEOuDElWeXtWAWtRqJxFAJxFQXtM6WbwAEYuPJSsQXlRPWOiUXtE1E0EmJSpUW0jUW0NY=tsqEbNbEtMxXSMeWxJeXS5mWSwP=lu0XtRPJbWD=lW6JlRxElJxJlJQWSRP=bM/JbEYJSJPWSR0WSs/XSGq=SF/=OGxESF/WlRQWbGqJ0pb=tiUXtWe=SM0ExJPJxsPElseWbR6=ljbEtueJxG6WOF/WSu/WbFAE0WeExw6E0NYXOWxEOUYElEmWtu0WxHUESU1WSGqWlJQ=bG6=bpvEYJPEbwAEYivXS5bWlNmXOWP=tJAExsP=bReEbjYWlpbWYRqWxivWxFqXSueESvb=SGDJYjUJbMqESs0EOUv=YRAWYuqEOwDEbFqWbuDJlsxJbGxEb1AXSNYXSHY=O=Y=bG/=tsPJbuD=bu6WY=1=S1Q=lWQEtW0JbvvWSsAJYiUXtsx=OF6XOv1WYJAEOjUXlRe=YNYESHvEYpv=bWe=tuAWOuxWbiUXSU1=livEYWAEbibXlJDEOUv=OGqEOF6E0WAE0ibJYMqJYMAXSRe=bJq=tM0WxGQXO5vEYsQ=luQExNvWOuxEOJqJ0JxXSM0ExvYWlM6WO=1=OFQXtsqEYEmWYuPJbWQ=OHvJSwPW0uDElJ/JxFQWlu6W0jUWbG0=S1eEbsPExR/WOJPXSiYESMDWlWPXSw6W0WAE0JAWSE1=OJ/WbsAWxMeJbG/E0uAJbGP=bRAXOwx=tWxExseWxJxEbjb=b=YEtiU=YJPXSHUES1AEts/WbWQJSsAJbwAWx1DEx1DWtpYWlJ/Jxs6ExpvE0MDJSJAXSvvXOJQXOUUJYM6JxG6=bR/=bi1=OJeEbMqXOR/EtNU=l=1WtibJSWqE0iU=OJeEY=bWOFxWSiv=OF6ExR0Ebsq=OJxJSJPWOjmWOv1=SNY=Yp1W0W0ESsQJbUYESpUWxWeEOHmWbv1=tpmWxJqJYJ/XSsDEORDESJDJYWAJl=1JlJ/JbWqJb=Y=biY=Siv=tseXOsDE0s6W0MPEO1eExMAJSJxWbHmEYjUESGQJSF/XOEYWbi1WxGqJxGDJxvmWtsxExHbWlW6=SuAXSivXlJxESMxWxGAWSjbJSGqXOp1ESJqJ0p1=SFAESFQExjmWY=mXtpUExUUJxs0=tueJSueEbMDWlsAESN1=tJDXOwDJSwxESMxWSseWlR0Wxjm=YMDWSsQ=OwPWbuAWOJqXSNvJb=mJ0R6WxNYElWqWbpvXOMAEOUUJl=1WbUvWxsPWSGqElWQEtsDXOUbXOW6WYsQWt=YJSvbWORQXlMqEls/=O5mJbjUElNbW0pv=YNvXtM0XOFq=b1eEYE1WxFx=bwDWO1eJbs/=l=v=O1qWS1QEbseWbR/EbF0=bJQ=YsxEbGAJSU1=SWAExvv=SHv=OuQJbGDJbwAXtNYJYEvEYRxXOseJlRxJljv=Si1WSU1WlEmJbR6=bUUExsqXtu/=YuPEYWQXljY=bFD=YiU=ONU=Oi1WSGxWYJqE0pvWYRxJSFAJxjmW0seXOjYEbu0XOpmWli1ESGeXO1PXOMAWt=mXts0=SwxESiUJxJDExwAWbEY=Y=Y=OGxWY=UElRq=OWPEOJPJxM/WtsqEYW0XS1QXtM/=OGPEO1q=tRDJx1e=SFQ=Ys/ExsQJxNb=tJAESuA=bim=YWQWSM6WOMDWOs/XO1DJYRPWYEUWOW6=Su0XlMx=tJqEOHbWtJ6XtuAXOWPEbjYESWxESweJbNYExNUXOw6WbjUWxWeJxJxJb1AEYjv=bFAXSJD=bsQWYWPESEv=bs6E0iUWO10JljY=bu6WYJ0ExGAExH1=YsqXt=bJxJQXO=1Jxs/ExMPJxG/WluDEOsAEbjvWxjUXSWQE0MDEx10WOuDXSM0=OW/WYWqXSWxWYWxXS1xJbuAWxuxWtuPJlpm=YEYWlJAExF0WbUbWxE1WxMqWlR6=bR6WlpUXSN1EOFeExvvESJqXts0=OsqJbuA=lMeJ0im=lseWOwQ=OEYWbsq=OMDEYp1E0pUEOsQEtjmJYWP=O16XOuxJbjvWSR6Jb1/=SUU=SGPEbHUEbuAXlWAJbHbXOJDJ0WQEbGqWSJAXSuqWYim=SF/XS=UWSNU=OpYWtRDJSM0WS=bW0j1WbRxWtWe=SNm=OW0ES5vWxMPJlseEl=UWOWQESMxWt=bJYMDWlRqEbFqExpvXlsDEtR0ExRq=lWAJxHmJbEYXSWAXS=1WxiY=tsqElEYXlMDXSEm=OvYWx1DWxNY=tpmXOG0WxRqJxuA=bRqXOG/ExsqXtMPW0M0=SMDES16ES10Wt=vXl=UWYJD=bG/J0ib=OHYJlE1JxJQE0Wx=bsAWlNmXSi1XSFDJbibEYsqW0WqJbjmESu6WONYXtux=O1DWOR6=bJ6WOwPEluQWYMPXtRx=Ovv=bFQJ0pbEYimWSGQXtuAXtivJb5U=Yu6WxRQXOWPExvvExE1WSJAEbFP=b51WSj1ESs0ElimEtEv=tueWO1AWYW0EO1DXSu0=Sjb=SMDWOJDWlMe=O=vWbNUJxRD=bGQXtEYWOjUEx1/=bUmWbUmEbEUESp1XtEmExHUWSuD=tu/Jb=1XOJPWbFxEONYJSH1ESRe=OFq=ls0ExpY=lMPWSGDEx16JSFAEYNY=SWPWYu6JxFA=OH1JlNvWSE1J0W/JSpvW0=bXSJDWYseWSFxXOG6JYEUWOsxElNb=bUb=tMDEONbE0uA=SNvExJQXSHvJb=mEOs/ElsxWtReWlivEb16JSWA=tNbElJA=ONYJx1xJbJP=SEmWb=v=Ou/XS=YWtRP=YRxWxj1WSjmESjYJYM/XlpmESsDWxuq=buDWxu0WSibESF0J0EYXSG6EY=1=bGxWtNmEbUUEb1/=YpmWxu6J0sqEOFPWtjmWx5m=Os/XlWxEbFDWtpvJxwQWlMQJSjYWSFQEOFeXtJA=lNvJ0imEOuPXlsxWOw/Wt=UXtpbXtE1EOpv=lsq=tMe=SMeElimXls0WtjvWtEmXSHbES1/JSsPJ0ueWO5b=SG0ES5U=OiUWYWAXSU1XOFe=bjYWOsxJSUUWSEmEOs6=SsDWbsD=lJA=YRPEOHbEO1QXSvbExW0XlMDXSUvWSweJSwxJbF0=lJ0=tMAXtR6ExGeJxHb=bwP=t=vEYi1XtEUJ0WQW0sQXSWxWOjUEYJAEYMAWtuPWxG6WxwqJYEUW0uPXlu/WxG6ESvUWlpbXtMAWbEmJYueXSMDEluPXS=YExMeXlMeWlNb=OU1J0ReWbwA=buAE0pYEOibXOGAEtjmWxNYWxpbWbF/=bEbWljbESibW0W6EO=YWOJ/J0Mq=YWPExs6XOMDXtJeWOM/=YNbXSiY=O1xJSwe=Ysq=YRDExEmJbG6EYReEOjU=bEYEYNbJ0sPWYpvWS=UJbWAJx1PElJeWlJqJ0ibWSGxWYNbJxuPW0p1EON1W0iY=bRx=Sw6ElM0Eb1PWtiUEOwP=SueJlsQW0jb=SNbJSNYWO16=SvYXOMDXtsxJbFqEOGqE0JqJSH1EOuxWOW0JS1xJ0RDW0WDWbNvXO5vElWxE0u0Jbs/JbMqEbR0JbJP=bw/XSUvXSFPEOJ6=lu/JSFQEOjYXO=m=tNYWxEYElR0ElibElWAJxJQJYWDEtpYE0RqJbM/WxjUWb1q=tu6WbwDWbJQEtuDWtJeJlMAWSWQWxMQEbjmXSFqWbGqWlEvXORDJxUmWYs/=bHmJlReWtuqXSimXtuxJ0i1ExN1WbwD=SjUXO1AXSJQ=bHbWSRDJSjmES5bExiY=YivES=YWY=YWYpb=bG/WlMq=lMQXOsAJSj1JYsQJ0R0JlWAEtJeWYjvE0u0=SJ6=SM0JYJ/XSG0JSjYWbpv=bvbWYMxWxWDEbpbXORDEYsDXSFeWS5mXOw0WlW0=SueXliYEOFAWS51ES=bJSM0=S=bWxJe=YEmXOEUExuDJSJxWSueJSNvESHvESJeWxWAWOF0JxsQWSM/ElsQWOvmEtpmW0M0WYMqEbGPJbJPJbjmJx1/JS10=tReWlRqEONYJSEmE0pYElsAEYi1=YpbWbFAWlJqE0p1WSWQJb51WxibJxUbXlJPXOpvExJqJSiUWtpmEt=1JSJ0=Ov1ExpUWxUbJYRPWORQ=buPXS=YJ0sP=tR0XtJxXtu/JYibWSMAWlWeWbWq=lEvExsP=SU1WtEb=bGAEOueEYpbWSWAXljmWYi1JYW6ElWq=YN1WOjmJYuqWtRPJS1AEbu0ESs0WO5U=SjmWS=UESHYE0N1XONUEOHbXSuqXSw0Wx5mWYibXtEYWYWA=OU1Et=YElJq=OEUWYRqW0=YXtJqJxEbXtuxEOvbEbUmXOjbEOpYWtJDJSw0W0sP=bReXSEUWt=vExWQW0JPEtRe=bu6WOpvWlpbE0jvWxN1Elu0=Owe=SNvWx=YEbWeW0J6JSu0JxWeEORQEbUYW0WeJx1P=SFxWYJAJbN1XtiU=tRDJbueXSuxWtM/=b5vWlWAJ0W0XSJQXlibWSR6ElJxJlRDXO1xES=U=bFPE0NbWSJe=O=UEbGqWtsAWbsQESu0JxjmXSW0ESEY=OibW0pYEbweWbMQES5bJxMDWxjUJYRPW0ueJxRxXSuQXSUvWtuPWbW6JxU1=tiY=OR0E0EmWOMQWOiYWxw6=SMqXtJAJxHbJS=YEOpm=tJ/J0E1=bJPEbjYWxMQXtjmWxEY=OW6JlJxJbMeE0R0JYW6=YR0=OuAESuxWSWeXSpvElsAJSHYESsAWtWPXOjYJSMDXSFxWxjmW0Me=YWxW0jmElNUESEvESuPWOibEO=1JbUvWOs/=bFeElEYWxuDWliUESMDEbWxWxp1XSueW0jYWbsqXOibWxpmXljYE0s/XljYESJAWYEmWtsxW0R6=O=mW0=vWbHUJls0ES=mJS=mEYpUWbFqExM0ESFDESuxElpYJSFPXls6=YNY=ORxWOJ0=tuAJYueExMPJxJDEOpUWS1QXSW0Wbjb=SNb=tuA=lpbEOjYEbEvJSG0JlMPESM/ElsDEbuQXOjvW0seEYu0=tjYWOwxXSwQJbUb=OF/=S1A=OMDEO5mWSvYXSNbWOweWxEYWYi1WxueEOi1XtWDJYEUJ0sDXSNYWtjYJxs/XOEUEtu0WYu/=bRPWlJPEx=YEOuAWxRDXSHb=YjY=tuq=bHUJbw6ESWPExJPElWq=YuQ=tWA=lJ0WtiYWxGeJ0uxWbu/JbWDJbjmWtWQJSpb=lRQJxJPEtR0EbEYEbM0WbUbWYMDJ0Ev=SwAXtM0EOR0WbJ0ExibJ0MPE0RDXO5UWYu/XtMDJxsqW0=vWl=vXOEmEx5bWbim=Oj1XOEv=lu0WYJ0WbJDESuAExUUJSWA=Ou0WbRDESNbJSiYE0sAJlW6WxR6JSWAXOJQWOUm=SNmJYsxWbiYEORQWb=1=tiYEOWq=SpmE0JAJSsqWOJ0JSsxEYWPEt=YXluPXtuPWxUUJbW0XSs/XtsPW0=UWOW/=Ys/JxibJS=m=ls6JYjmXlpvEbWAXtMPWOM/WO1PWSpbWtj1EO5b=bM6=OGP=SUUW0RxEOGxJb=bJxv1JYjYWSFD=SUUWSGxWbGQEtWQJY=1WSu/=lim=bG0WOM/ExRPXts/ExF0=t=m=OsDJ0WxEbweXSs0=SG/E0uQWSibXSweJYJD=OR/EYMxESsPJYW/WxEY=SuQExFqEtM/XSMA=OJ6EbueEOs0JYuPW0RAWY=YWOu6XtJ0XS5UWSpv=tW0ExMAE0WAEbM/=lReWYMPEbEYESF6WxMP=YN1JSHmElJAWliYW0sqJbGQJbjUJ0W6W0W/XSR6JxuAXli1ESJPWbGPWbs0ESiU=bU1WOp1JlJ0E0RD=YJAJxsqEbMeEbMx=O=m=Oj1XSEm=OHUJbsx=S1QJxvbXOwQWb1xEbu/ESwAJbWQE0=YXlpvEYJ/WSvmEOJq=YuQEYW/=Os6JYRxExNUXSG6ESw0E0jUWO5vElRPEOUUEbR6WxW6Xtp1Exib=S=YWOJQJbWPWOsAExuDEtJxJlMDXlsP=OW0WOMD=bwDXS=YESW/JlEbJS5v=tWDJlseWbGq=l=U=bjUWbHvWOivEt=UXOJ0JbE1ESvvEYWD=SWDJbUYEb1eJxUYEtRP=OWxXOw6WSJAEOwe=OM6W0WQJSF6XtM6WYuxXtNYEOFPJxW/EYWe=S5v=SuQWtE1XSvm=SFP=SueE0sQWlJD=YMQJljvJx16EbwDJSGQ=SU1=SG6Ebu6=b5bESU1XSMPWSsAWb16E0NmEx5YJSRAWO16Ex1qWSHvWSwQ=bMDEb=Y=OwDJSWPWxM6JYRxJSGDWYuAE0JDW0pm=lW/ElEbJSu/JbuAWOJxXtRP=OR0JlsQEbMe=YM0WxMPJYuQJxJP=bjUJSw0=SwQXS=vWtNUEl=mJxNYWb=YXSuP=lpYW0sq=SF0Wx=1=ORx=tE1=SMDESU1E0WeEbvvWSJxWOs6JS16W0ivJbUvExRx=tE1=tuAES1x=lNUJS1QXtpUEluDEtJ6=SjYXOu6JxsxW0u6WxRAWbGAE0j1Xl=UWSU1XOWA=bG/WOGPXOF6=Oi1=SReJ0iYW0MQ=bjYXSHbWlJ/=SU1WlEYJbFDWbN1WbFDJls6W0=b=lse=OGx=ts/ExM/ESiUJbUmWbGqJxW/WOF0=lEUWb1qWOwAEOFP=S1e=OwAJxib=OHvEORPW0imESJQJljvE0uxXSHm=lJ0JxseWOu0JxUvEt=bJb=bEbwDExMD=bHYXOWqXSiYWxibWSu6WSJQW0R/EbGeXSWxEbGxJSwQWtW/WbwAElsPWbF/J0im=tJeJbR6=SsqEYMP=O1DJlNbXtWDWSv1ESMQJSwqWxuqWt=bWtiUWb=mWbM0EOUUEbFQWOjmJxu0EYJ/Xtp1ESiU=OMq=lpbJbWxWb5mXtj1WOHbEbHbXONYWSWq=bJPEOsAXtJxExNmWOUb=SM0WSUbWlNmXOw6Eliv=lp1JbFqJxpv=YuxEbivWb5m=bsAW0j1WOsxEOibJSwDJxuAWx=Y=lRe=b5UWOFAWSR6WlWqWts/Jx51=SJ/JSJ/E0jm=lsDWSsQWSW6XOuDWb51WO1/WYJQEYJ0EOpbES1qJ0sPWxWAWb=mWOHmJbjUWtE1=OjmXSGqWlM0JbJxExJ6=SwxWSuDWb1xEY=1=bwqJYpbWYM/EYMe=YimEYM/WljbJYWeWbF/XO5YWSUbESuDXtjmWbweWxuQ=tWqJxUvEtJeJlp1EOw6XS1xXtjvWbFP=YEYEx1xJYRqExNbWSw/=YpvWSFDXSs/=YW6WYNmEbG0WbwP=lJP=tuxJbjbJx1eWl=1JbwA=ORqEYJxXlsP=Os6ESvYEtibWlMQWxWxJxsqWSvUXO1QWxJPEb5YWOMAWS5bWx5YWSFeWtu6=YRqWtJQ=bF/Ebu6EOFD=bJQWbuqJxW0WxUYXOM6XOWDXOjvJbux=YiUXtJeWYN1WbFPJbH1WS1DExHbXlu0JSMQJxvYESwxWOu6JbjYWYJe=OuDWtNUWtpbJbEmEbsq=lNbESRAWORxEOMeWbHbJSw/ExsDXSEYJl=UWlWqXSJxJSvUESi1XSivW0s0=SsA=bM/EluPJbMqEOpvWSJqEYR/W0RQ=tNvEb1PWSRq=SNv=Y=vEbW/WSWPWYu0JYJ6JYiYExM0JYimXOJqWbpYE0WPE0EmXSvUWSGD=tjvWx1qWS51=OE1=lWeXS1/JYMqESU1E0RqXtsAWtWeWYpUJ0ibJxF/=luqJYu/Wx=vWx=bWxibWSpbWYWqXtMPJxW6=Ou/J0s6XOwDEON1WbMA=bs0JlMqESUbEY=YEbWAJYMqEtux=bpYXSMqJSEUESGQJx1A=O5mEOJqWYNm=Ow0WtMxJSWeEOF0Els/WlRxJlMQJSUbJYsxEYsqESuPElNvJbNmE0WxEbWDJxG6W0p1WbuPJxMqWOGAJbN1J0uxWbimJxEvWOsQ=bj1EbF/=SvUWbjbXlsDESMxEYimEOHv=YpmWbJPXSpmEYsq=OW/XSpUXtJQJxMxW0J/WbG0XlEUXOux=lEYWOH1EOUvJbMQXSNmEb10XOwAEtM0JSU1=OwD=SG/=YuPXSMeXOj1JbF0JbseEx10WS5bWYWD=SwxJYjbXlpYExWQWYsx=S=mWtpvEYuPWO1DJSG6WtEYWOUbWSHvEbRx=lRPWxF0=OGeWbi1=SE1WlRPElJAWS1/=lR6XOUYWYimESHmWSuAE0pvElJ/W0ib=SWeWO=m=bibWlMDWY=UE0WQJSUmEb=1XOGqEbsxXOib=SJ0=SwDElseElimExs0Jb5UXtR0WbMQE0ReWtMx=O=1JxsD=tueXS5mJ0Jq=Yp1XOHYW0=mW0MAWlMQEOW0WluqWSs0XlNYJbuP=lMqWSR6ESGQWbRQWSWPE0ivEb16=YJD=OwA=tNmWx1/XlWqWYjmEbM0WbF0W0pm=bMP=tuPJ0uxExJQJbRQJSN1ElJQW0NmJb=YEx=v=bi1ElMQWbRDWlNUESUmWxuPESWqEYs0W0uQXOuP=YWDJSi1=O1qEOuD=SUmWOM6=tsxJSNYJ0JxEbsqEbjYEOjbEOWQXSuQJxH1WbF6Jb=vWOiYJbWAElMxW0uq=Sj1XSi1J0ibWxMQEOWeElMeWlEb=OsxWxEYJY=1=SJ/ES1PJlu/=YuPWx=bJbwqExW6WtM/=SReJSi1WbR0=OsQ=ti1ExUmWbJQJYi1W0uQ=lM0EtjvElJxWbRPWlNYEYivES=1WYsP=ls/E0jvESs/=SvbJxueJxEmE0u/ESGPWtEYJxF/JYWDESu/JS5YJlpYEbM6EOiUXOs0W0pUWO5vWbsxWbR6EbFx=tseWbuQWbGAJxweJbwqWOR/XlNvJlMDElJ6XSE1EbUUEbHYWSwDXOsDJYM/ES1D=lu/JbWPWOpY=OjUWbRPWSGDWYJQEYpbWOw6EY=YJxUmEbFAWxjvJ0sPXOuA=O5YWOiYWtWAExMPEO=1ExHbWxHmWSim=SiUEOM6WxwQJlWqWxFDExNbXtu6XSG6JSWQEl=UJxF0W0J0ElpbWYu/WYNUWluDWOF6Jb1x=SFxElse=OJPWxJxESEmJSG0JbuqWYWxElRQXOs/JbWPEtEmXSuPE0=vJYJxWtEbElivEx=bWxsPESvmJ0s/WxueJSGxEYux=bMAWbs/=OsQJlJAExuP=b16WSRPEYseWt=vEOMDEOHmESWPJYEUExjU=SWQWluxJSWx=SMD=ts0Eb1AEYMxEYjbXtWA=YM0JbJAES10J0jmWSiYEOFe=OFD=bEUE0=YJxUmXSHb=lR/EOsA=bF/E0J0XS5YJSHUJSu6WOuDJb5YJlJ0=lsQJbi1JlNmXOibWYJPWxjvWYEvJYp1W0W6EOwxEYpbExUUJYMqW0sD=YEUEOEYWOJDJ0M6EtJAWYp1WS=YE0R6EOEv=SGP=bGxJlJAWtJAW0iv=bNYJ0Wq=YWxJYjU=OGDXtMDXOReJbF6JxFQWSGqWSE1Xti1ElJDXtRQ=SNbExFAWxuAJxjYEbw6JSR6=Si1=bsD=YsqJ0=YE0JAJS5mJYJDJb=1XlE1E0pYXOpvEORDEYjYXOR6JbuPJxR6Jlu0WbM0=bMqXOvv=SJeEOFx=biUWS51=SuAXSRxJxvY=SFDWbJDXOsDWOvmXOsxWbFeJlpUEYWqXtjmESNmWYJqEYpmWxwe=O1/=OvmJSsQJxwAJxMQJbuAXtEm=ONUEtEmWY=YWS=b=Ysx=SiUWS1DXSpvEOwxEOHYWOR/XS=bXSw6=tJxJ0Mq=SW/=SUUWxJ6JbWqWbFP=bsxWbFPXSJQJbUvWxM0ElMDXSH1XOFxJSGDEbGQEbMx=YuPJ0MDElRxJ0uxJSMP=OJ6WbWDElpbWlW0WONmW0MPEOvbEbMQWxRQEbWq=YuQEtR6=YWPEbs/JSEYJx1AW0Nb=lEmEYM0XlEvWbFQWxsPWOibEbp1XOFAW0M0XtuxWxwDJbF6WYNvEYWeWxw6=SH1WbJqXlJAWO1e=S10ElRAEO=1Jl=mXSJQXSW/XlMDJlMD=OjvEtRPXti1EO1qWlNYWSMeWbEvJbRQESu0XSWeXlsxXSsPE0sQExHvEls6JYJqEbux=ON1XSwAXOue=OWxWYJ6ES51JxuDXSjY=SMQ=lMxW0uDWbNbWSj1JS=mW0RQ=YR0JSpY=Sjb=OEUJxJPXtuqEYRQ=luAXtRAJxuDXlMQXSs6=tMAWlJ/WOU1=bJeElu/WYNbXSFAEluAEYRx=bMPWOMAWbUYWY=YEbvmWSHYESjmJbFe=b10WOGx=lReWYsA=lJDXOvYWbi1WSsxJSH1J0MqESj1E0uDEYj1EYimWSMP=tNvXOHUExvYEOHU=tWQW0=bJSwQESMAWbM0ES=bElR/ExFDWl=b=OG6XSRxW0JDEb51W0MDEtJQWS1DW0W6=ORe=tj1J0u0=bu/=tuQWYuQESGqW0sxWOF0WbF/EOs/J0p1=bG/=bw0WbvbJSRx=YuAJxibWYibWSjYEbReJlRe=bwPEtRAEx5bWY=1Jb5mJxGqEOpbWOGqWx1qXSJx=bEb=tWqXSM/Et=bJxsxW0pYXtNmJYiU=bHUXlNYEOGPWS16EtR6Wx5vExu0WORqWxWDEOsPXS=bJbwPWxRxW0R0ExMD=SJDXOjUJliUEO1eWO1PWOiYEOM/=tRq=OW/WxwQ=bM6=S1AESw0JbNmJSjvXOvU=YMDW0RDWYMeWSjUWbJ6=bWqJSFDWSw0JbsPESF/EOvb=tJx=SsPEbMe=bJ6XlW6ElJP=b1QJlsQ=SweWSjvJxUUEtiUWx1DJYMAExjm=Os/JSFq=lW6JYNU=bFDEOF6W0=bJYuPJxWD=ts0XlpUJxJ0ExE1WxsDWlMP=bW/WOMqJxvYXlpYWOvmWtNUXlpbExs6XluPEbJeXOwQXSNbXlJqWSMxWbwqJbj1=Ou6XtjvElEmWYu6EtJxWYNY=SwPWxibWbvUJSRe=OsDWOJ6WlpUJYEY=tWP=lWeWluqJxwx=lR/=SweWSvYEbJxWS=mWtNbEbNbJ0MDJSGeXlNmWb10WxsPEb5b=YE1=ts0JYMDXSWDXOvYXOGxEO16=bRx=YWD=Op1WOMD=Op1WSpvXOM0JbFqXOJx=lW/EOEUEYuD=tEbWYjmJxsQEYJ6EtWPWxjvWxEv=OWeJSvYEb51JlsQJbw/JYEY=tR0=lsxXSEmWtsPWYW6E0jbE0JP=OEvJlN1Eb=1=SFxJSv1WlRQWtRQJxHUW0Nm=SUvXSRD=Svv=lWqEl=b=lRD=bFDXSMAXS1PWbR6=S16E0RPXSRQ=lpvWtsqEt=UEYJAXlueEx1/XOHUESU1XSMqJYW/=bGAESJAWOMAXtib=ORQW0jmXSWDXtJPE0WPEOMqJbNYWxsDWOHb=lJ/WSi1EYEbW0iYJlWDXSFDXSEU=O=vEbNmJlWAXtNbEtuA=SvUJxWAXSUYXlJqXlsAESpbEYu/WOF0Wb1PEY=U=YJ0Wb=bJSWe=tReEb51WtR/=YJxEtj1XtRD=Yu0=lR0Eb=m=YR6Ebj1W0N1ESWAWb=1=OUmE0WqWOiU=SR0EOibXOGPWxjb=buP=bw/=O5YXtpv=bHv=SMqJS5mJbNUXOJ6Wb10=bu6=bF0EOUUWbsxWYj1WxsD=SueJbGqExJQWbRAEx1QEOMAJSp1=SHb=bG6ESW0Wx=1JYWq=lWe=YueE0p1W0NUW0=mJSJPEOpmEtReJxRxWSMxEYimEbjv=bHvXSvbEOJ6XSJqElEUJSsDWlJq=bsD=YNYXtueES16=ljmExR6=OG6=tEU=OJA=SWAEtivJlueJlEmXO=YJbvmJYs6WOim=SuDJbuxJSvb=YsqWbvbXSN1WbvbEOJ6=tiYXOjUXSFxJb=UWON1Wx5b=luDESsD=luqExGxWtRxJbW6WlsDJYWx=O5bEYs/=SHUJSuxElse=lMQEOpmEOi1WbF/ElRA=ljU=bw/XOR/WxpmWSWQWxReWximWbFAE0uAWSMe=Yue=SimWSuA=OGxWOu/E0JQElWeWbM0XtWeXtMxWY=v=OF6WOF6JxEUElpmWx=1JxJAEbuDESGQXSuQJS5vJSibJSJ0JbJxJxU1EOGqWxj1=YMAWYibXONvWSMx=YMe=luqWts0=bF6JSHvExuPWl=UEOWxEOsDWb5YJxMDWYsqEYRxWxHm=ORqJbHmXtp1JbRPJl=Y=Op1JxMqJ0JqJSRxWO=bEOGAWSUYEbJ0WxUUJxWqEO=YWbJ6ESNvEOM0XOjYXO5YJYJ0WxWQEOMxWSNv=YW0=SM/WlR6EOJPWlWD=SE1WYRqJxp1J0NbEbJ0EOJDJSuq=YReWl=YExW/EbR/WxR/WSJA=OEmESGeW0EvXlEm=bpvEONUJlNbXSWQWbs0Ex1e=SwqJxEb=Ys6WbFxWOvbWbuD=S=YEYivXtsAEtMqEtsQW0uPEt=bXO5YWbRxWbHm=YWx=bNvESRe=lWxW0R6EOJAWYJ0ES5bES5mEYEU=YJQEOGPEb=mEtWAJ0s/EOuqESRqESNbJbpYEOj1JYjbE0N1ExGqXS=bEOpYWYW6EYjU=bweEb=bWbHbXtibE0RQ=l=m=tNvEtM0=OEYXSiYWlMPXOsxEtMQXOuDJ0ivWxMxWtjmJYEbEbGAWOJqWOWPXSivJ0=UWtiU=luDESHbXlMAESJDWljY=Sux=YNY=tuqW0JA=bsAXSE1=buP=OE1J0jUJSvvWlp1=OjvWSUbExsDE0i1=tWAE0u6=OFDXtMAXSjmWtu0JYu/E0RQWtpvJ0sxJxjY=Oj1JljUWbW6WSivJ0M0EOp1XO1AEbiYXSseWOs6WOFQExE1XOJAJSFPElWxWSsAJxJqESi1WlsDJ0We=SGPE0jYEOuPEYWAWxibJSGDWOF6Jx=vXlRPXS=1Et=Y=O1qWbJ0ExR6ExWx=lpvXOs6E0R0ElEbEbRDJxRD=lu0=SuQESEYWxReWbu/EbFA=YRQESwPWtRxEOHYWOMqJYJQWtueESMD=bwx=tRAESJxJSiUJYJDJlim=tsxJbweESR0WOJxJ0RAEYJqEbUmWxG/JbMxW0sAW0p1JSW0JYpmWSwAExsQ=tuQESNYJbNUEOR6XSEU=tRq=O=YExN1WljvESMAJb1qEb16E0WeJbRDWtuPEtim=ts/Wxu0EbF6Wx1/=b1QJYjbEbMDXOR6ExpUW0s/E0EvJ0R6J0s0Wti1XSJ/=bMxJbp1=bFQ=Yi1JSG6=O1xXtpbElW0E0RxEOR6WxHmWOUbWYjYW0JPJ0M6Wxjv=biUEYiYJ0u6ES1DEtuA=tMq=Y=U=ljYEOvUEbHYWSUbXSFQ=tR0WOjUEljbXSJxJxEmEYN1=bJxESMA=SW6E0u0WbvYWYpmEO1qEluxEbH1XS5vExweEtsAXOuD=SG6EOW0=SEY=lWxJbReE0uxEYMq=ts6J0Re=OivWOu0XSNmEYu6WbRqEtR0XSR0WSW6=O=b=OGA=S=YXlJeExw/EOF/WtWAXlRqW0se=bRQ=lJ0ES10WSuQJliYWtjmWSwQJbjbWtJDWxJ/WbMP=OGqWx=1JY=bEtsxEbGAJxwAEYM/WYpYWOsq=b51XOvUXtjvWO51EOu0EYR6WOjvJbR0WluDEYR/WO5UJbjb=Yu/XlW6JxGAJ0J6Wxw/XO5mJS10WxR/JSF/=YWD=SiYW0WAJbUYWYsAJYWqExRQWYRPJSvvXSR/E0RqEOEvXO5bW0uqEOJqXtjmJlM6Xts0EYpmJYW0=lJDJbWeEOWAWSGeJS5v=bw6=OimWSH1=S1D=lWDWSjYEbJ/XSiYEt=U=lsxEO1xWbuxXOJ0Wx1eXOEvEbj1WbFDXO1DJ0JQESR0JYWeWlE1ESwA=YW6JYsDW0imJ0sQ=tR0ElMPWOuQWxjUXSse=lM/EtjvWS5UW0jUWSRAXSseWOU1=SweWb1AWlNmWtReEx1A=bvUJlMxWYsQWSR6WlW6=YMqXOw/JSJPESJAJl=mJb1DWSFAWxRP=bvUXSw6XluxJb5UJlNmElMq=OGQWtEYXS5vJxMq=SwQEYEUE0WD=SFDEOseWbvmJbjvJl=YJSjUWbG/JYRAJY=1EOF6XSU1WYpYEbiYJxpY=bNbXtJPWY=vESG6Wxu0=SF/WbGxJxMPEb1Q=YpmEO=mW0sPWSib=bpvW0NUJSWPWtjm=lpbW0EmWtsqWtJeJSwq=YuAJS1A=bwDWOMeEOpY=SvUJ0=YW0u6WOWAJ0ivJ0MD=OM0JbuPEYMxWxwqWbR0J0RQE0MeW0sxESsQWljmXt=mWYMP=OJeWx=vWOweJSsPJYjUJYj1WxRP=bMPXtJPEOWeJb=YXlWD=O1AWlimElsxEYW0JSjv=Oi1XlN1ExH1EYp1XOU1JlseJb1eEOGAEtjUXSu6ExG6EYRPJbR6=S=YWbWeEYWAWOjbJ0uPWxs/WSWQExWAJ0M0WtJq=SHmEbwAJxMAEOGP=YibEbuPJbG6ESsqWxRxWtpYE0jUXOUYJSFQWb5mXSseJSw6WtjbEOJDXlR6EtuQEOuAWYueWlimW0ivE0EUEOsAWYsQ=bEm=bM6WSsPJxRPXOj1JxHbWYMDJbwq=bNYWbNm=OJQWbG0=Ss0WtJ6WxJDElM/EYJ0W0uqJlEUW0MQ=tu/WYM0J0NbXSHmEbM6Eti1=O1DEtRDXls/EYi1EY=vEbFPEtWD=lJQJlN1WYWQXtEmWbjbElu0WYN1XtJqJYimW0pYE0EmJbWeExNUEtWAEls0=YEvWlWAXSwDWbjm=Ow6JxRq=tp1J0uDXtseWSJ6WxsPJbjb=t=UXO1eJxvYJxEbXOMQEYsQWOv1XSNvEliYWO51=lRx=bu/=YuAEtR/WYEm=YjYXSuQJlMDEOWPJlRqJYRPJSvbESMPWxHYEbimWb1qJxibE0MAWbsqXtEbEbGDEYibWYJqJ0WQEOR6WlWPWbRAJbF6EtjbWxMQXOwqJSuqEO16WxF0EtiUEx1/WbjvWSUYWlRxWbs6WSJqJSEbEbGPWOi1JxW0E0RDEOEYEljU=SWDJlEmE0MQXOwq=lMqES1Q=ORDWOwAJxUmEbHUXlRAWtMqWOw0XOMqElW0JbweXlW6=S1QJbJ6EOsDWYs/XluDExJAWlN1WtWeESw0E0i1=OiY=bsQ=OuxXtEmWbEm=bMQExEYEls6EtuqJSW0XtsqWSw/J0ibXOFDJSMPExGQWtuqEYu/XSs0ESW0WxpYXOvm=YWAJ0i1ESJxWO1PJluqEbUUJxG0=bMQ=Y=bW0s6WOFPEbRxXS1qWbsq=OEvEbs0WxMQJSHvJYE1Jlp1ElR/JSsDWti1JSs/=YNYXtpvWbN1XluqXSF/EbwPEORqJS10=t=vWtsxWbwAJbR6JbW0JYM6WlivWOUvWbweWtWqWSUbWxvmEtMAExHvWOFA=b5YJlpbEbFPWxG0WYEYJxG/Exw6WluDESMqJb5YWxMAEb=vWlEm=OWP=lsAWOi1WOwqJS1eEbUb=YJ0JSMqWYJ/=bWq=tivJx1A=ONbEx5bES=1JxR6JlW/ExF6WxRAW0pmJYRPJSHUXOw/W0sPWOFQXlu6WY=YEYW6JxUbXSWAEYWeESu/J0E1WlEUESwqJxsP=bs/JbpYESsQWlWQWtuQEbUvWOMQEtJPXS=1ESuQJbJAWSu0WORPJ0p1=O5YJSwAEx5bWSvYWlp1EOw6E0u0=Yu0WbGDJxRxEO1AEljmXSM6XS=UWbFPW0uAXljmXtE1=bw/=YueEOWDXO1PWSNmWYR6=OF0=bG0JS5mJ0R0JbW0=bjbWlpUXtNvWYJeWYJPWOFAXSsQXlJDWxsQEtu6WOUUElJeEbimEtim=SvYEYN1EtRAWOWDJxw0ES5YWSU1WY=vW0=UEbvY=O=YEOpbWOUYWbHbWSjv=OuxJbpY=SJ0Jx1qXSpbESs/XSw0EYE1Jbi1JSj1WxNYEb1AEbvvWbuDJxiYJ0ueJY=m=Sv1ESRxXOuDXSFeJSGAJ0J0=lN1Wbu0=Ou0J0MAJxJDJSimWbMA=YM/=buAJbFqJbuqWb5bEOpvExF6=lJqJbvmWO=1J0=bXSEU=t=mEtMxXSEmXlueElWAE0RqWOMD=SFqJxsPEbHbJSsDWOpUJx10XO1DEb5YXSWDEOEUWtsqEb5vEb=UEljvEbM6XONY=lsDEbMPXSWQEbu0=O=m=SRD=Sj1J0JqJlRqEOU1Xls/EtJqJxW6EOu6XOEbElWqXS5v=SuAWbvUXlNbWbJqWSWPWYpbJYJqEtjb=bwP=lu0JSWDXSRDXlRDXSWA=bsx=SweEx=mJxEm=tRAWYJ0Jl=YJlu6WOH1WYM6J0jvW0u/WxHUWx1/WtjUEYW0WxJQEbHUEliYXSNbWxFQ=lsqW0J/EbJPXSj1=lEYEOsQJSvmJ0uAWSFAWSwQXtjb=bUU=SH1WYJAXOibWSjbWO16W0s0Wxu/EbwxJSjvWSwDElu/Jbs0Jx5vJ0W0=bv1=SG0WYjYE0W6Wts/JYW0JYpbWO=mJY=1XtibXSW/EYMP=buQ=tivEYWQWOFxWxF6=S5UEbEbXS5YExE1=bHmJS1AWls/WxRxXlMqJbUm=SvbEYMq=OF/XSsx=Sv1=S1AWSsQXlsPESF6WSw/WS=mWSJPWSs/JYM0=OvY=OEU=Ow6=lpbEYMAXSEU=OWDEYu6ESHbJ0RxEtWq=SwqWlpbXONU=lNY=S5UWYimElsxEtibJbGeEtMAEYRQJb1DXOG/ElEYEliYWbweJxGPE0jmExUbXlsDWlRD=tuDWxRxWtWe=bJq=SjYEbwqWtReJ0EmXtE1Ebw0=OWAJSUY=OwDWtpmXlNvWxMDESp1WSMD=bRq=lsPWO1qXOGA=bFPWYsQEbJ0ExFeJSsDJlpYEbGD=Su/=tW6EOjYWbGq=bwxJYRQWxuD=YMeJYpvEOJAXSFeExpb=SwPWbJQ=tRQ=SEvXtpmEx1eXtuP=bEvWtp1XOvU=lpmWb=UXSM0J0sqJSU1EbM0XSFPWt=mJSwP=OUYWYiY=lpbJlW6JSGDJYWxWbsx=OEv=OR0XOJAEbvmXtsqJbGDJS5mWtpvJ0JQEbFAW0MQEOG/WlM6WxsxWbEUJx=YExJ/XSG0E0WqElRAWbv1JSFQJ0u0ElW0XSw0=bEYJYNUEbFDJlEYElimWtJeWlR/ExWQWxWqJYpY=bueJlR0EbGxWtuQJSRPE0RDWOFP=OsPJb1qJYNbJxuDEY=YWOpbXSvYEtu/XS=YES5U=SNvWb1AWx=bXOivJS=1JlWeXlWQWbU1WxMQESM0=bE1E0u0EY=vXOM/WYJ6JbFQEtMxExE1XSUbWlEmXlpvWlsQJxEbWx1QJSWqWSJxJx=UWSJeEOjUEbUv=t=bJSUYJx5YJbWxES1AEOueJYWQWSG6Wbu/=OF6JSGQEYseWtNYJbFAXtueWlMAJbEUWYuqWORQJxNmXtsxEOimWbpmJ0W6EYpv=SF6E0JqW0sD=bs/=bs/XtM6EYuqXOvbES1eJbJxEOF6J0=YEbRDEtjUXOM/JlMQJl=YJbibExpvWtpmJxH1ESMD=O16EOw0XSJxWxuqWYu0WxGPWbweExUUWbMAJbNvWOHb=bs0Jbs6EOR0JSFxXOJ/J0NU=bsqXOMeWtR/WtJeWxw6XlWqESRAEbMDE0JDEOGDW0R0XSwDWbF6EO1DJlWx=liv=bWAWSEU=YEvJSUYWYJAWbpbWlWqWOpv=tMqWSsPWxse=b=UJbWxJlu6XOFqWYpUEtWD=SwqWYMQJS5YJ0u0W0JDXlsQJbp1ESGQXtWqEbMDJxj1WtsAXtimEYMDJbJP=bvb=Y=m=bN1WO16WxNYJbEbWOJPEb1DEbwAJbJqWY=YJYsDWOpbWtpmWYJe=S1xWSuDJSMeXSEUJSJPEx10WbvYESR6XtW/=ts/JlJq=S=U=SwqJxRxWxM6EYWA=lJPJlMeEbUbEtJ/WbU1WtEYEluAXSv1=SUbESu/=YWQ=bM/=tW/ESFPEx=UEO5b=OMqJxMqXSG0E0NbWORPWluQJ0E1XlJe=bGqESJq=bWP=OM6JSJPJx1Q=SsAWxw/XOJx=S=UEtEmJxGDWO=mJSpbWSFxEYsD=OGDJS1DWSsQ=lNbExweXlEUEx=UJxRxXORPW0NY=b1qWOFP=SNUXSseXSpm=ORAW0i1Xtu6J0s/Jb=1W0=UEbEbWbMPJxEbESMPExuPWxjbExW/WYE1=SJQJSsAJbMDElJ6ExseEbweWtJAW0WPEOjUExW/W0pU=SMAXORQ=bE1=t=bWSJQWxuq=bvbESN1ESNmXOUYWbu0JYR6JSv1Jb16EbJ/ES10Et=UEOwQJSWqEO5YESsxEYseE0uxElNUWtsPWYpUWxWxXOwqEtNUEtu6WOuD=OG0ElM/=YMA=YpUJSJ/WOUbWxWeW0WPWbW6XlivEOj1JS5UEOsqW0JeEYRx=bjbWlJPJ0JqJxEb=YEUEbF/EtR6WlsDEbseXOMxWYimJSvv=SFAWtpv=lJAWl=UEOvYJbJP=SpvEbJPXtEmWxpbJSs0WOvYW0MxEOweJSWAE0NvESGeEtW0=OMA=tuAEtuxXSsQESwxEYuxEljb=OJeEO5m=tNY=Ys6JSWeWOvYEliYEOu/XSRPWSHbJx1/WbHUEtMDWtMDW0=vEtu6XSNUEx=1WOGqXlWP=OjvW0M/Jls6XSuq=OM6EbR/=SimXOJqJxsQXlsD=SUmWbWxJxG0WbHYXSWPEYNUXORDXOu0JbGe=bRq=O1QESGqEbjbE0EUWb5YXSv1JYMPJYsQWxJDWbvYEbN1JSwPWSF/JSwxXOEmXlpb=YMxWx1xWOiUXOHUWxFx=YR/W0EvXtj1EOM/XSEYJlM6E0sAXOsP=lJxEtRqWbw0W0WPJSGD=Sw0XSvbJlRAEb1xXOJx=lR6=OJQEORqWxFqXOvYXtRqWYRQXlpUE0WDWlpvJb1QJbibJxJDEO51WtMxJYEmXOuAWbRDJxpbEOEbJl=UWliv=S5bJY=bJb1/WtMqXSF/=SWxEl=YW0RQJbJDEbFAEYJAWbwQJbMPJxpUElMAEOwqJbwD=YWQEOvbW0WAXl=bWbsq=OM6Ex1DJlN1WxWe=bW6=SR6JximESueJxvY=b1qWxuDWSUUExJDWxF/JlsP=YW/=ljm=SG0Wlu0ExWDES=v=OH1=Ov1=SW/J0JPWlRQWxpUXSWA=Ow/JlueExu/=Oi1Xls/WbvY=YpUW0jv=buPWtWxWtW0Exue=SJPXSRe=tWP=bReXS5mJbMDES51WliUWYueJSs6=tjb=YM6ElNmJ0sQWtRD=ORP=YJ/EbMeWb5bEtsQW0jvJSMAWbHbXOW0JSMqElNvJ0jbJSjmElWqJSEYEbpvWtRQXtW6Wb5m=tWAJxGPXOR/JbMQEtWxElW/Ex5vJxGxWlMe=bHYWb1PESUYEYsxXtpUXlN1Exs6JxEYExHvEOH1WORQEbGPW0u6WOHYJbF0E0Mx=lJe=lpbXOpYJbuxJ0u0Wt=vExEYWxuPEOw0WSJQJ0u/EO1AWxJxEYsQEONYEYu/WOsQJlsQXOFAJlu0=YRQWtE1=lsDWOGeXSu6ESJDJbM0WYJAJb1QEORAWlpbESw/WSFxXSJAXtM/E0s6Xt=mJx5vWS5vElNbWx5UXO=vEx51=lsA=OReEYEmJxi1Wtp1XORAEtMeJb1AWxReJlRQESuQXls6XOim=SRq=lsqEx10XtWqWS16JSN1Xl=YExwxWYNUElW6WOWPXSGQ=SUY=YRPJ0WQJSsxJbHY=OwAWYivJYE1EbWxWSwx=biY=ORQXSGDXls0Wxs6XSu0WxJ6=tpv=lWeWlJeESHv=SsD=tsPE0u6=YivJxim=YuqEYEYWbGP=OsQJb51XSF6=tj1WbFQJSueElMDJSsQE0WAJSNvEbR/WtNmJYMQ=tM0XSJ/EOW0ExGD=YEUEOMAWb5mXOuD=bR0=SFxXlpYW0sq=tsxJxNm=b=mJlNmJ0=1ExRA=YuA=bFqJbG/=OHvXOMxXtpmWtRQEOvvJxWe=SFD=Ysq=OjbExFQWluAWtjYEbjv=bJ/JS51=bGeXtjv=OEUJxMxJxGQESNm=SsPEOW0W0jvJS5mJlpm=bs0=OM/XOUUWb1qWbWPJ0pvEORDXtW6WbwQXOsqXSwD=tJA=luPExsAJYM6WtuP=SE1WlW0JbsxESjvWON1WYW0JbFP=S1e=SHYWbGqJbJ6WSsxWx5vJxMeExFQ=b=YWls0XlEvWSu6XlEYE0Rx=OJDWtN1EOW6EOi1EbjUESsQJbRAWO1/ElsxEbUYWbNm=SW0W0iYW0W6EbHmJxUUEORqWbU1=tu/=bEvESFDJb=bJxjm=tNbWSNvJlJxJbuxXORx=tJDJbWAXtMA=lW6=bWQWxjbW0uQEYse=SF6Jlsq=OEY=ONbJSwPJlEUJbRA=S1P=YN1EYNbW0MPWlue=bsQJxFeJxF6XSEU=OUbJS10=bjvWxiv=tWA=S5YWxFeJxjvExJAEbHUWts/=O16EtimExJA=OHbWOwQXluqWt=UWSj1ExpUW0JQXOseJ0u/EOF/XOvmWxF/EYs/WO=UEOJqJxu6Jxjm=lW/WtJ0=lJ/ExueESMqElpvJx5bJSMPXOFeWxjbE0sxJYiYE0JPJlJxJYNYWYNYEOjUJS16=bGeWtM/E0E1=OFqEljmXS1PJb=1EbG6ES1PJ0M6ESwDJ0sqXOH1JYR0JxFD=OsAW0EbXOwAXS=UES16=lEvEYEUJbGPWYR/XlJ6EtsqEOwxWlR6EbjU=O5UJYW/XOv1=bwxXOEY=OEUXOwAXOvbElEvJYNbXOE1ESJ/WOGqEbUUXlW/XlR6=SJeWOWAJxG0Jx5Y=ONYWOGQEYMA=bM/WlRD=bJDXSvUW0sAEtJ0=lNb=SEmJSR6WbJ/WSJAWxMAES51=S1QEbGDWS51JYWQXOwPEOFQXSwQESw/XSU1=tibE0MqJbWPWxwqJxseEYNvEbEvJxMAWxpvWxEYEx=bWONvXlR0W0NvJYuAEtjbESWPESMxJxJP=OvmE0MPWYRxXts/JSReExRxWlux=SRP=SEUEbv1Jbs/ESG6EO1PWOjUESFQJbW6=OW6WOw/E0=UW0R6ElsQXlM6=SsAJ0WQJx1eWYReJbvvJSu6WSu6ExRqXOpv=OR6JxuxW0uD=OWDJlu0Wx5bESpm=Ow6XOR6ElRxElueEbjUJSMDXSEU=SpvEYsqWS1/JlMq=lNvWYMAJYRqElReESFeWYuxJbwD=YWxJb1PJ0NbXtMqWbR0EOpYWSjUEljvXl=1WOEUXlEv=OJqXlEv=l=YEOueXOpmXtR6XSMPEYsPXtMPESUbW0NmJ0iY=SMeWOwQESJQJxR/ExpUW0uPWlJ/XSMAEOHvExjmExEYW0jUWlu6WSFQWbv1XtsqExNmJ0EUWSWQWxuQ=bUU=Ojv=b1P=OwPXOW/ElNU=O1/Jx1D=bjvW0R6JbRPWxs6EYWqWYsDE0s/ElivEOJ/XO5UWbWqJYRPE0RQExNYEY=bEYpvXlMeW0JxXlWeESpU=YRP=SHmEOUmEORAEbibWOs/WYsqJSvbWSHUE0iv=lEbJlsPEt=b=YpbJxsPWOMxWlJ6XtJqWOEY=YpbXSvbEbuxWSMqWbwe=OuxE0N1WxEYEb=mWSWeExG6=bwDJlRAEbFPWxJPWtRP=bjbEYEUJxjbW0NY=bM/XtsPW0=bWO1/WOjbE0i1XOFDJxwPJlpbExMeEbHvE0uDWSvYWxwDE0WPE0MDJSEbWxsPJSW/Wx=U=l=UWtRxWtiUESJP=YM6WtivJxEYWtEU=SwPWtJAXtJeJxw/JSsqWtuAWbWQXtimElWDJ0N1J0pUXOpYXSW0J0RDJls6XlE1ESFDEYjUXOFPJlpYExvUESu6XS=UXOvvE0RPJSNmJYjvXlJ/EtEYXOjbE0sPJx10ESG0J0J/XSUmElsPEbHYE0J6Jl=mWOseJbwqEbs6JSs6XSG0ExUbWOpvESFqEtNbES=bEOGQJbReESGxWtp1EtpvExjUWlWxEORDWYpvXSseXS5YXOJeE0MPExE1=bW/XSG/EbF/Jxjm=O5bE0NmEbF6WYWQEYs0ExF/EOibWlpvXliUXlEbXOw6WxRDJYpv=SW/JbuPEOWx=ON1W0R0XO5Y=bF0=SUYEOvYXOsAW0WDW0EUWbjvXSwDWxvUEOMPJYuPJxMxEOHUJYW/=lJ6=lsA=tsQE0pvJbuPWSRqE0R0=lRqWYseExvmJSsDXlMQEONvXtRQEtsPWbUvJlWPWYu/XlR6JSUUXtp1EO=YEOw0=tueEOjmJb1Q=bibWbuqJbwQ=SW6EYMQXSpv=OuxXlRx=b51Wt=vWbWA=S5Y=l=bEOGqXOUUWYMPWSjm=SRxEtjvEl=UJSN1=bMQWb1/XtjvXluxJ0MDWlWP=S5m=luDWOwQ=bwAJYNbEYjmJlpvXOMeE0Mx=OR0WYux=bs6EOJAJbwqWlEYESWQWSWD=OGxWOsPJlJeWYWxWtuDXO1PXO1P=bUvWOsqWSRD=SHmJlJQ=SHmXS5vJYWeElseWOJPElJx=b=bEljmWSEvJbjmW0i1JYseWlWx=tseElM/WSpUXSFQJxEmWbFxJYsDWYMeExMQJbHmESM0JSFxW0=1WbF0=tjbWbRAWYs0WY=bWxvYJxGPEYM/WlJQEYWqJSWqElWQXOuAEOsQJbueW0RQXtiUWlJ6WxMAJxHmJSWQXtiYWb1Q=YWxEYu6EOGPEx5mWSG0J0WDWx16WluDWOsPWYWQESMDEYivWOUmXOHmEtRx=tpvJb1DWSWPWxNYE0Wq=lR/=SjmJxJPEb1DWSWx=tWAJbvUESu0XlN1Jb5mWOuD=Oj1ESsqJlNYWOG0WxGxWSHUJSiUEbi1JxMAWSG0WSM6EtseW0RPJx1Q=lJAWtR/Wbw/JlsA=lNUWbiUEOMDXlu6JljYXl=bXOuqXtRAWYs0WOWDWtWxJxUmJbFQJlEbJxpbJxjYEbjUWbWA=YpY=Y=v=SG0XS1PExGe=YR/=OEvEOuDJb1P=SWq=bUbJbvvJxpYWOE1J0MPExibXtJqJYsQEbWAXSMDJYMeWbUbEYJ/ExWA=YJq=tivWtM0XS1QEOJxEYMQXtMQEx1xWbsqXSu6EOWDXtRPWSu6JbWqXOs6JbpUExUvJSM/XOR/JxM0WxFPExR/J0WQEYimWY=v=OEvJ0iYJlNmXSRAWbJeWOEvXlRqXtpYXORAJlsqJlM6WtpvJYpYEtjmJYWAEO16E0JPJbiv=SGQ=YivWx16WlRx=l=vJbse=bR6=SMPEbG6Wx5vEOWPJS=U=lMxEORD=SUUEO5bXtJqWbue=bpYWbF6XtpU=YsDEbj1EOueESJAWSu/Wt=YXOuqEbRq=bwQEO1e=libWtJPEONbWlMPXOj1WlJP=Sw/=lJeJSFDWONbEONUJSHmWOJ0=OivWtiUESU1WxsqJb=vWYu/EOiU=ts/=tRPXtMxJ0NbXluPWSGeWORxXlW6WYsPXtsQJ0jbExNU=SJqWxw0JlM0XS1eXSJA=S16JbFAWxsqXtpvJxux=tuAE0EvWxU1WOU1JYMD=bseElJ0JbJDEbJ6JlR/WO=UXOJ6=O1x=lNYWO1eEbNvWSwPWSpbXSRPJSEvJlsQ=bsQXSwxJxuqWOF/=SwA=tWqXlJAJbJ0ESMQJSw6XSJQXORP=bF0WxUUESuqWbHUEYWD=SWPWtRDEtRe=O=YES5bWxuxEtRPW0s0JbwqJlR6XlpYW0WxJbF/JxH1ESMDEtiYJ0sqW0p1=tuqEY=YEOw0WbMAEOJeJxH1E0sAE0uAESMAEbFA=lM6EOMqW0R0EbMeJ0pUEOF0JYEU=OUYJSF0Wl=YWSiYWxFq=tJxJxUmJbRPWtRPEYRQWtW/=OFxWtueWtimJxMDJlpYXSNYElJAJ0=mEYJPElsqExuAEtRqJxNvJlM0ESWeWOu0WOjv=Yu6JSE1XO=UJbFxEYp1EYsA=SJP=tp1EtseJlMAJ0RAWbR6EbGA=SNUExs0EbRxE0=UWOw6WtsDEtpbElWAXSM0Ebw6WbGq=bFPWSMDJS10EOG0XlsQEbWqWYsqWSNvEOGDElWq=O=YElJqEtJ6JSEvWtR6WO1QXlMDWxN1=YsP=YMDExuqXtNYElNbEljUWbwAWOF6JbWAJYsxWtJDEx51ESUbXSwAWONvEtW6J0seEYJqWOJxXSiUEljYJSJ6Wb1qEORAW0=mJxGPW0R/JSE1Jl=UExR/ES5UWlpv=bMeEOWxEljYJljm=OJDWSEYXlivEbMPJSN1WxJPJYJAJYMxJ0=Y=OF0W0RxJ0iUJxReJbGDE0sA=SjYXlivEb5bJ0R/Wbw/WlibJSWxEbMeExuPJxpm=SiUWlj1Ets0EOH1JbuD=OjUEtEbWOJQ=bUmJ0sAW0WqJxNUEbW6=lN1JxseXOsDJSEUEOFA=ljvElpbXtJAElimXtR6=S5YXtRxWSsA=OsPWYM0Elp1=bHYJbW0JljmWSuqEOGAESw6JSjUXOHYWtM6WtR6JbH1WYM6=lWqXti1XSFDEO=1WOvbEluQ=bu6JxWQ=SjYJSw6JSw/JSj1XS1/WSseJbjbJb10XOUU=lNmJbwxW0NvWljYExwDElEvJx=bWOR0JbW6JbwPEYJ6EtJQWls/XtiUWYuDWSG6JYuDEtMDWSFDEx1/Exp1Wb=Y=SUbWYRDJxvYJbHb=tNbJ0WA=SwQJb1AJx1xJlsAXSuDESRxWOFP=OseWbjmJ0RQWxu/XO5b=OG/ExFqWYs6W0ue=Y=YJYWPW0pv=YuDJlMqWxH1=lJ6W0sqEbWDWxEvWljmJS5mWSMAJbRqXOEmXOW0=tu0Wx1eWbJe=tJD=SEbEYEYEbF6=SW6=tJ/=Ss/WSM6=bHvExJ6WSs/=Yuq=OJxEOWPEYjbESGPJ0jbWOsDWlJe=bF6JSvvEYR/WbGqXSue=t=vXOMQ=tsxXSUvJxH1W0WAEOFeExJeEOv1WtseWxu6JxEbWbJxJ0p1EO1DWtsAWxM/=SHmJY=vWOJAWYEbWbJxWxWqWtWD=Oue=OGPJxuPW0i1WtMPESJPExvvWxN1JYuAJSNYWb=bJSjYExjYJYpUJxW/Wb1P=YuPEbNUExM6=t=UWSR6EtWqJx5bJb=bEOpYWSMQEOp1WtseJ0u6=OibJxRAESHb=S1PEOuPWSw0XSpm=OvvWSJqESiU=bueE0uxEYJAWOMeWxJDEYJDWORqJxvvJSNm=ls/XSNU=S1/JbW0=SUbJYNv=lEvJlNbJluQEbHvWSF/WSEbWSjU=tJDXOF0Jlu0=OJ0Exu0WbuA=ORDW0NvXljUE0MeWlRD=b5vJYsq=tsxESU1WxNmWxu0=SJxXljUWYMqXtR0JlMQXOUYWbiUEbG6EtjvJSRxXS5vWSJA=OHUWxM6WtNUWtpUWxj1ESJD=tRQ=SFPEbGDJYu0ExJQ=OweESM/=lW0=YWPEb5bJSJeEYJqJ0MQXSRAWSEUJxvbW0M/XSj1J0sqESMxWOR/JYEYJlWPElpb=bib=tjUE0EbWSM6JxsDJYJ0XtRDWbGPElp1=liY=O=mEtpYWtpY=Y=bJbuxEbpYExvvJbu0Wxi1XSM/=b=vElJAJbG0EOj1EljYJSF6Wb51WOHYW0MAExW6WSjUWx1qWOsqJYNmWti1XSuQWxNbJb5bEYp1Ex1eJYEUJxHmJS1qE0=YEximJbweJ0MAEOJe=S=1EbGqW0JxJYRQXtJAWxWQWxWDEOU1WxJxExwQJbUYESpv=OM0ElpvWSR0EbJ6WOGAXSHU=Y=bWOjYEtRDWS10JximWlMeWbFxWSwxEtibXSpYWSWQJYReWbWqEbjvEOvUWbuqEOvbEOF/XSG0ExUbWbMeEOFPESuDEYJDWxNUWbGP=bim=OHY=bpmJSue=YN1WluP=OMP=SWqJx1A=SR0=bpUXSseWOw0WSv1Ex1eEtJ6=YN1JSGP=lEUXOHUEtM6WYR0WlJ0WOFx=SM/WxwQ=bW/=SvY=O1DWOpbXtuPExHbEY=YElNU=lMqESFDJYjv=tRQEl=UJ0RDXOvvJ0RA=SGQ=bWPWb5b=YJ0Exs/W0jbJY=bJ0MAWbJQWO=1JxGQWYWqWbwqWbwxWYjYW0W6Eb5UElu0=SsQ=lWAJlNUExuQJSvvJSseES1DEOFAJ0JQJSu0XS=YEbsDWOp1EOwAWbHY=SM0=O1/XSpUXOGDXSw/WtWPExMP=SGeXtNmWxwAXSGqXlsxWlJ6EbRPJbuq=tj1=SwqEbjYEbGP=S=UWOEYWtivWSj1WlNm=SWxElueEOJQXtMP=SJDWSNmWYMAExJ/WOiUEOFeE0M6XOwxWOjbExGQESEY=buAWbs6JYNv=bGqWxGAWlNm=Sjb=SpvWS1xWx1eWS1DJSM/WbHbESpvJSW6XlWxWxvmWxvvJYNbXOJD=OUbJlNbESG/ExE1=OimEb1AExw/E0uxWSwqExHvXtJe=YpUESMPW0imJYNbJbjvEOs0WOibWYEb=YW6WOwAEx1Q=SwQ=SRQWxwQE0s6XlJqWSs0EYWAWOFqExsqXSF6JxNUWSWPWlimWSJ/WbUYXtNmWSJAXlRQ=ORAWbR6=O5vWlEYWbUv=OvUJYNmXSM/JxR0ESG0XSseJSp1ESwx=O5UWS1QEbweXSNm=Y=1=tMeEtEYJ0M6JxF6EtNvEbp1=bvmJbwQW0JqWYNb=ONUESNbEbRQJxJeEYimXSR/ElE1Exib=YpmESMDExibJlRxXSRqWxu6ExHm=OMq=SNv=ONU=OReXt=vJxu/WYsP=SuQEbG6JSM6=tiUWbEvEb1qEbRA=tRAXSJ6Eb1PESpbWOW/WSsQJYpmXOR0EbF/XONm=O1/=lW6=tJ6JbjYXtjUESNYJx=1WlW/=OU1EtivWlp1=tJx=YuQWtimWl=Y=OvvWOuxXSsQXOUUEtWeElJDEbw/XO=v=OEUXtRQExRDJxW/=YM0WOpbEbuPEOp1EbWQ=SWqJx5vJ0MPWSGx=OEmWbWA=YsQEYimElRPElRxXOF6ESGqJYReESv1=tu/Wl=1Jxs0E0RAJYRQ=OJ/Exj1=YuPJSNU=SuDJbW6XSsxE0sPJSw6XlpmJ0J0=lR/JlRAEbJQXluDJS16WxEvEx1eJlpvXOseExH1JYE1EOwxXtuqWt=UXtNbWOMDW0EYXtseEbF6Jxu/XSJ/WbsqEbG0XlEb=tJxJYs0XtsDEb5vW0uQXtJxWxMQJbF6=S1qJSw/XlEvJYWDJSGxJS1/WY=1EOF0JYWDE0WDWYJeWb10WbNvWb1PXls0ESFqEYp1=bNbJb16WxRqXlp1EbsDJ0i1ESwQJl=mWljY=tuPWtibWx5mEx5b=YiY=ljbXSF6E0j1ESRxXONmWSHUWOFqWtMAJbwQ=YJ0ESWe=tpYESNvEbUvEb5YEOimJbwe=b1PEOH1=YWxJSsAEljv=YM/WxNvWOMQ=OHmExMe=tMeESs0JbW0XtJeJSHYWYsq=OjvWYJA=YuQWlpbXSNYWlJAExJAJSMx=ljUWSH1=lEYXOweXOsD=OWqWxF6ElNYJ0JPEYR/Wt=mEYM/=OsQWbGeWONYEONUXO1PJx5mWSUUXS5b=bFeEbJ0=bj1XO1qEtuqEbMAExJAESNbJbRxW0imWlRe=tRxWYi1E0ivWS1Q=liUWljbEYRD=YRAXSRPEOuPEO1xJxG0=SuQExFPEYJqJxw0Ex=vJx1DXSN1Eb=bWSJxJxJAESs/ExNUEbw6ElNY=lpbJYMeElR/WxUYWOsD=ts6WtRQE0sx=YJPEtpvWSsDEOs0Xlim=OsPJbRxWSivJxWQWlRxEbEYXOJQWY=vWSF6J0sxXlpv=SFP=bj1Wxj1WbJqJbpYEbM6EYjbEOFe=bv1=YM6EbNUESu0JSGPExv1=b5YEbjm=lWPEx1QWSi1WSseWxJAXlRqJxNbJ0RDJxMPEONvWONmJSGeJYEbEYi1E0MQWxwPJ0JxWluPXtRxXOjY=buDJbUvJx=1WlEUJYs0=SRAJxGQEtM6EOJPJlWxWxuAJ0=1=SEbWxibWxEYWSRx=lim=ls6J0NbWb=1J0i1WS=Y=Ou0ElWQJbJDWOFA=t=U=SwxJYRQEOFDEYEvJYJDE0p1XSUUJSEvJbMeEluqWljbEbMPWSJ0ES5vWtuPWSJ6EOMq=S5bEOUb=Oue=OWA=SWQXSvmXOWAWtJDESReWxvmJS1/=OFxWlivEOWQWYseXtJA=bw0EYRAXSNUJSEvJ0p1WOH1WtjUJxjYWb=vWO1xExiYJxJxWl=mWtpvWYRD=bFAJSwQ=tJQEY=YJ0R/=SweJxpv=SNmWluQEYWeWSN1J0R0JbJ6JxW6EOF6=O5YXSWxESsAWlRqWSJ6JSJqW0R/=SJq=SuAWlsAEtW0WYMqW0W0=SJQEtEvE0=bJSNYXlEvWbFqJbWP=YM6JSRqE0s/Ebw6Wx=UJ0pUWSpU=b1e=lRxJx5UEx1q=lMQExGxJSGDJlEmJxi1XSW0EtNYJx1xESG0JYjUXSEYJbHbJ0jUWOE1XOi1Jl=YWxF/EOH1=SG/=SMQEljUEYN1=Y=1JS1xEtueEYMxXlu/WxNbJxjYEO1xWx51EbjYXOW0Jb=1=YRPXOjbEOw0ESw/ExUUXOW6JxRD=bJ6JxE1Wxuq=YMq=OseXONmXSuPEbRAES5bEOuxWxWDJxMAExj1WSWxJ0pv=bw0JlMAEYu0JSwqEbNvJbpmESGqJbR6Exu6Et=b=Os/XOwxE0JDWOsx=OR/=OwqXOUvWxs/WYs/JbJQ=bsxXOuAJS5bW0=YEb5v=b1/=bwxWtpmJb1PWY=mXO=UJlW6=SF6=YR/JlMAElseEb1qWbN1Ets/ESjmJ0seXlsQJxsx=luDEO=UESW0WtiYJxEvExw/WxGqExs0JxjmE0sqXSR/ExjUWxUmJS1Q=Y=1JxRDJ0jYJbRAXONbExvmEtu0=YRqXSFAJ0NmWbuPEt=1ExGqWbuxXS1P=OseWO1AWSNY=OHUEY=UJbWDWxv1Eb10JxsP=OM0ExU1Wxux=SEm=lNUExM6WSE1WYsxXORxJbMqXtJx=tJ6EOH1WSG0XO5YWbw/WYJ/W0J6JbN1WOibEONbEtR/ElMeEYWQ=OsxESuQEtiU=ljUJl=mJYiUWxNbEORQJbvvXSGDJx=m=tW0XliYESW6EOJAXSNUElibWtMeWSuxESNmEYJqEYRDJbUbXO1PXSweWYJDJxMQJlM/WtJ0WxNbExsPJYWQW0=UJYWPE0JDWOGDJl=YXOEYWSFQXtueExuq=SsDWxRAE0RQW0WDWxUvWlRQJbR0=tpvWY=vE0uqWbF0ExWqExEbWSNmXS5bXO1PJxsA=bHvWOJAW0W6EtsDXSim=luqEx5bEY=UXSNbXSNbEbReXOM6ExM/Jb=vJbue=OWPESHv=YRxElM6JSwDJ0MPWS=vEbFDXO5UWYNbJbNY=O1qJYibWYRAXlsqEb=U=b=YWOJ6El=vWSweWbib=OWPWYRq=SWq=OWDJxEbJSv1=bMQJ0iYESMxWOuPJ0j1WOimJSvbXtR/WtjY=OwqJ0M/EbpmJ0JDJYseXSWAWSwQ=YueESFqJxEYXlRAESGPWO1DWlJ0ES16JYRDW0RQJxvYWbu0=OpYEbUb=SFPJxvbESEU=bUY=lWQW0MDJbWPWbvmWtWeWb=UXOUUWbu6Xtu0E0N1EOMPEORDJYsDXtu6WbRQ=lMPJxMPEtuDJSNmXtjv=SjvXljUJxNYJlsQEbMA=lMqWSJ/XSHUWbvv=tRQW0pvXSFeExUUJbivExweJYu6EbRPWOpmWYuDJluPEbwDXSRQWO1QElsAEOpYXSpUJYjUEYuAJbWqXliv=lpbWliUEbwPJxFPEOwAJSGP=S1eXSjmW0u6EtpUXS=1ExGqESEvWxR0XSvUE0W/JxuxJx=mWlEmXSF0EYWqJ0NbEOpv=SUmJxuD=SWP=YuxJbue=lEYEONbEYM6=bsPJb1QEbibWxwDJlNb=OMqES5U=bu6=SiU=bG0W0uPJ0iUEtuPESvYXlMq=Ov1=b5Y=biUEbv1JbjUWxUvWxM/=YpUWYuAWxW/WSNvEluDXl=1JlWPWbwxJxu/WlMqXlMqWlNYE0W0=tW0WxM/EbGxESR/=lWDWxJ/WbEUJxWPWlsPXtMPXSFPEOvvEtsAWlR0J0NbWb1qJSG0=tjbWlEvW0u/Jb5YWYJeXt=bJlJ0WSs/=bWeXS1xWSGxEbi1EOvv=SivXS=b=YR6JlNvW0WqJYWA=Ysx=SHb=S1eExwQJxuDXtJAEbH1EbRDJSEbW0W0=bNvExs/WljYJbuDJ0W6JYNvJlueEbjUESHYEYiU=bGAJ0EvWb=mXO=vJ0jmExE1=lR/=SRxXONYWOuQJ0R0Jx1q=lNb=ti1E0=UES5vW0imEYRQWbGQJbu6WOMQXS16JYjb=lJQEONUWlWPJSUYWbGP=Owx=SW0=YEUE0N1=SN1ExsD=SFDWb1qWYuq=S1qEO1AJ0uPWSE1JSUv=YpUWOGPXtibEtiv=OWxWxivXSN1JSGQ=tW6EOMDJxibExR/JYW6JbNvWSuQ=bN1ES51WOR0JS=bJbpUWbuPWOReEYM0W0EUXSuP=ljbXSFDWSvbESjYWYMDWSRQ=bWAW0J/JxNvWO5UWlRqEtMPEx5YJljYXtE1WYWPE0EYWOG0ESReW0sAEOsQ=lMe=tW6=buq=b1PEbu/Wb=YEYRQJSWAWSwAWYimEliv=bF6EtRPXtpU=lJ/Jb16WtjYE0WDWl=bJ0WDJbsAXlJxJxuAWbseEOW6Jl=mWxvbJbpUW0s0ESvvESNUXlWxEbw/XOjmXOFxWSH1EbUb=bpbXOjYESsPXOwPExG/XOpbES=mESMq=SJ0JlR0WSsAWYpUJb5bJxMxEORPJSJqExpvJbJqWOFeJlMqJbFxJ0WeJbWAEtWP=Owe=OFPJxMAWlRPEx=bWYE1ESNm=tMe=Oj1WS1DElMqXOMPWYMQJbvYWbHb=SWQWOJQWbHUJbF0WxpmWx16=lEUWx5Y=tEbJxEbWtue=SNUExjYWxNv=YEvEljYJxM6XOFxJxw0JSpY=bRDXlpYEY=v=bWDJbu6WY=1=lR6JYR0WSWD=ljv=lWx=luQW0ueJYRqEOw6WlRAXlpv=SuDWSuqXSGqESM/WYpY=YjvJSReW0EYWbjbJlim=YWDJxvY=tRPWSEUXOu0=bu0Jx=mJ0uDJYuAEYJ/=SJ0XliYJbEm=bE1W0WQWOGeExwDW0=1JxNY=bpbES10JliU=O5UWtEmEOUUWxFqWSuQJljbES1xExivJxUmXlWAWYRxWts6XS1AJSRD=YuqXtMeE0Mx=ORqW0RxXts0WbNmEx5mESGeWS16Ebs/WSHv=S5bJS=1WS=bJx16EYs0=buDJluQJ0uxEtW6EbFQESHbWbvUXtMA=bjvXO5bJbjvJbEUWlp1XlEbElMAEx=vWtpbW0JeWOW0=bM6WlWPJbsqJYj1WO1AXO1QWxs/=lsqJxpvEtuPXtib=bwPEtJDESvv=ts0=SHbJ0sxXSW0=bR/Wt=bWYuqWxpYESR6JSjYJS=1XtMPXOiv=tWxElW6Wlse=YJxEOJe=bReJxRQEYWAEbuAWSHU=bM0EtJxW0EUWYsQXOG/JSMA=bJ/EbsQXO1e=lMAWl=mWx51=tj1W0pvEOwDWOWDExF6WxWQWtWAWOM/WYEYW0jvWSjmEtEv=bpUElu0EtMAWSivE0pmEbRQ=YNY=lRPE0ueWxux=lR0XOjmWYWPWS1DESwDExJ/XlWPJxv1WOEUJS5YE0NvWx5mJ0RQEbGxE0s0W0JDEb=UEtsQJxNvXlsPWSuP=SM0ESW/ElRD=OwD=lpbJx5vWlimJxEmExpmEYEUXtpm=YuD=OvUJlJ0=lMPXS5UEbMDWlNUElWeXSFeWOJeEYib=SNUXli1WYuDJbWPJSWDXlNvWOj1ESMeExH1=tuPESsAWlW0W0uQJSN1=YNYJ0MqXlsDXSu0=lsPWbFQWS=m=SuDElWq=b5YJbw/ESGA=ts/XOWPEbEY=lW/=SvbJxsDXtJ6JbW/WxweXSEUJSJAWxNYJSEbXOvmXOuQW0=UJ0EmWxW/XSs6=YNvWbR/=tR6XOueEtWPWtpv=SGeEbWAWtR0XOR/=bHY=OHmJ0pbJ0MD=SR/EbjUWSU1EluQ=OReExsDJ0MPESJqJxF6=b1AXSMqWO1DES=1Jxwx=OW0=OuqJYEvE0EYJSsxXSJ6XSNm=tMqE0=1XO5YXOG0Ebs/XlW6JY=vEbvvEOuAXSM0=bRPXlNbJS5vXSM6WlRQWYJ6J0j1WYj1JYEmJSJ6=tJqW0JPWl=bExjmExHm=lNmJSGAJYNYXlib=bwDXSW6XOMP=OMeWSv1JbUY=ljYWts6ESseWx10ExUbXSFqXS=UJbwDJbHbEbEbEbUmXONUWluQ=lWAWlJqXOu6WOw6ElMe=l=bJSJDExHbXljvEtJDEYuP=bw6Wlj1ESvvWSWx=tjYXOWeJx16W0JDXOvUWSpU=lMDJSW/EO1xEx5vJYW/JlpUE0jmElpUExJDJSNbESJx=Y=vXOvvXlp1EbHb=SsQESW/XlpmWOjUESM0WSMxWtu/Wtp1WbGQWSWDWO5vWxF0EOFDWtReJS1QJ0JAW0pvEYs/XSvvWtjUWlReWYN1=tEbEbMAJYWQJxNvWYRQJxWP=YpUJYEUW0sD=tjvWONbXSuDJxv1Jliv=biYEYMQWlW/JbM0EbFPEb5mXSFx=bG6WtjvJ0u6WbWxWbwQEtEUWOuA=OjYExu0Wbpm=SNbXSR6ESMxJYMe=SRA=bUYXSEmJSW0W0jmWxNb=tj1=ts/WbGeEYJ6EOp1J0M6ESvU=SGDWx1PESW6JluP=lEYJbG0ExJ/=Oi1Wli1XSJeESFxEON1ES1DEYiUWlJPEx10WS5UEbRQEORAJxR/WSGeJlMqEtiUE0WxJx1DEtMDJS=UWSsQJ0JQJSHbJSM6J0Em=SU1WYJDJxRQXlNmExWQXSw6JYuDWxwPEbGPJb5mEtse=YsA=YR6=tEvW0NUWOvvEbjU=bEUExpv=b1P=OwDWSF0Xts/JxU1EYR6JbHbEYjvXSJ6=OU1XONvJSseWYR/=YJ6JYNvJYRxJlpUJxRe=OWQWOs6WYjmWlRQXSR6=lM0WS=vEbWQ=YEb=b=1EYsAJxNbESHmEb1/W0iYEtJD=tpvE0i1JbFPEtWxWtsQ=OsqEOpbEYM0XSWAEbUvWOWqXSWxXSUU=SEYEtJAWlpbEOJ/JSJAWOjmWOjUWSjmElEUWxNmXlMQWSFAXOEvXS=YXtM0=lM6EOwQJlEYESEbWxHbWlseWSMqEtuD=SEUEO5UXtuDJlib=SG6=lNbJ0RDXOG6JSFDJS10WYpUWxueEbEvESHmWtWAWYpmWSuAEbs/=lR6=buqWOjY=Ou0=bibEtsxESs0ExpYWxWeEbW/ElJqExvmJ0EYExJqXts0WOU1Etj1WbjvWlp1WO=bJS10JbUvWOWQXtpvExw0=ls/ESFqWYJDExsqWSW0EtuPExFQExweJbJP=SsD=SFx=lJAWYR0ExM6XSWAJxGxXOpv=tsqEO10ExUUXOuPESJqJSU1JbJeXtsPWtN1JxEYWYJx=OM6WxEYJbUvWSuAWSvU=YM6E0RD=tpmWSGDXlJqJbEUXlp1E0sQ=lWqEOMe=O5YJxFQEx1q=tRqW0seXtRq=bMPEOEbXOUmJSFxJSWD=SRD=Os0=buDWbi1XSMQWSHvJlpY=SGQXlJ6=bpbExMDWxjvEtjYEbJ6WxUU=bpmExN1=YJPEYRAJxW/EbpmESsxEtu0Wlu/ExHmEtjYWOGPEx=YWOw0ESjvEb10Exs6JxUY=ONUESNmExWPWlW/XSwQ=OM6Jb16XtR/WbWQ=tMPWx5mJbRPEYNmJbGqJYJQWYJqEbEvXSNYEtWxXlRx=lMqJ0RPExuPEO10=SNvEYu6J0WAXOu/Wxu/EYM0J0jm=SHvJ0EbWSRAXOWPEYNYWOiYExNv=ljUJbH1W0sDWbH1=bRDXOFAWYEvJYEvWYRPWtjUEOwQExUY=luqJY=1JlRxExEYXSR6WbsQ=bU1=YRxJYM6EOsQEtR6ESJPXt=vEO=vEbjmElRqWORqWlsDJYjmEYMeEl=UWbWPJxGPWOiUJbUm=YM6Wb5v=lM6=Y=Y=OHmESimJlEvExJ0JbsDJlJQW0uq=YJ/XSvmEbGAJbwDJbN1WOvU=YRQWbGqEO1DElsx=bU1EtsAXtJD=bFA=bR6WYRx=SMDEYi1=OsxESJ/Ex5vElMqJxEUXtueEtu6=Os/EluDWSFxWSjbElsAEbUYWbNbEOwxWxUYWOF6Xti1EOwe=bvYWS1q=YJ6XSW0XSMeEx1eESGDWO1xJxs/Wbs/=bu6JSGq=tJPWSi1WbwPExWe=OEYXOWPWb5UExWe=bHmW0u0EOR6Wb5mExu6XliUEYsqESWQ=b=UEYW/EbFqWxpYWtM6W0u0W0uQJxNm=SRxEYpvXSFqXSMQWYW0WtRx=OsxWOReW0j1XSiUWt=UJYRxEbwxJlJ6=OUm=tiYXt=vWSWQESRPEOvUEOMPW0MxXtuQEtEm=OWqWbHbJlRPWbFeEYuD=tibJS1/Ex1eXS=bXlseE0jb=t=vWlN1=SEvEtjmWSFqWbHvEYWx=bsq=Osq=SWxJbwAXOW0XOUvJb1QXlWPWbvm=b=1WOjmWSjbEbE1WYuqESFD=OpbJSJxJSpvExUbEbvm=Su0JbUbJlJxES5U=S51WSWDWbJAEtp1EtsPE0s6ExjvEbUUJ0pUEbUbXtMAWlNm=O1qWbjUWbMDJxiUWOEUXOs0=SNv=lRqEbEU=l=UWSseWxUvEOG6EbweWSJeEOw/WYuqWOMQXSsPESUbWtEb=O=UXSJeWlue=bwQWS=vEtMeJYsAEtRPW0jvXSNbJxFQ=OwAESMeWbUYEbG0XOG6WYjYESF/JxNvWOW/EtuxEYJe=tWDWbu6WtMeXOux=tsDElJ/EORAWYjm=tN1WORQEOsAW0JAEYiYW0E1ESuPExJQEOGqEOFAEYs6JSWeWOReEtReXSvbEYR6WliYJ0W6EbibJxvYES5b=bwP=tR/=OuQW0uQ=bH1JSGqJSGA=OWqWb=1JxjmEtuAEtRPXlWeWS5bJlWP=lWQWbs0ExpUXSNbWOvYESH1=SEmES16WxM0EYJAJbW6XS5b=Y=vJSsQXOR0JlJ6=SJqXORAWbuxXOwqESUUJxNU=YM/JlpmElJPJSG/XSpmWlWA=SJAJxGQ=tibWxwDWlJ0EbjvESEY=SiYXSU1EOpmW0s/E0sD=SW/Jb51WOv1WbuqXSuqWxG/EOu0XOGeWOFeXtMPXOwDJbwqWb1PWYRDExHYJbuq=lpUElsQWO1xXSvmJxW/EYJ6J0i1=lue=YWAJx1QWxR/WluPJxi1ESuDJbWQJxuq=lW0=O=1JbvYWlRDE0MP=Ss/WlMAEOJAExJqJYuP=SFD=lMeWOHbJSW/XOGqWbNY=lsAW0WD=SpbJSJQESs0WtjbW0uP=tR6E0RqEtMx=OpU=bJ0J0R6Wxu6=bMx=tE1EtWeJxiYXOWQJYEUWxRDJxWxWSUmW0MxW0jYWbueEx=UXOGPExivEbUbXSJeEOFeEbNY=SU1ESMQWli1WOpvExvY=bRxXOpv=tNvXSN1J0WeEON1E0WQXSueElW0EtjYEbNmExvYESMAWt=UESNvJ0W0Wl=UESM6XtuPXOJPEbHbElW6JSwAJSHUWbs0EYuqEbGqExpmJlpUXSwAWSJ0=b1eWlMPJ0pUW0JQJbpb=SEYXOFq=Yjv=tjm=Op1=tJAElsQXtJQ=ls6Elu6=S=bXOwQWOR/=bNUJlN1XOsQExjYEbMAElR6XSiUXlu0EbwDE0iYWb=1EOU1=Suq=lM0J0M0JbW6WSJA=OJqJSuAJSMxEx=Y=OR6EOGDESReWSGx=bEUElEvEYpbEbFQJbiUExUYJYWDJSMeXS5b=tM6JxJAJxsA=YueJYMDEYuQWxsDE0s6JYimEOF6WOMDExEUWtW/EtWPWO10WbG6XtW6W0MQWSG0XtMA=bWPESvm=biYWbv1Eb5Y=SsAJlJ0=Ov1JxFPXlNbXSGxEYRqEbuQJb=1WtiYESJ/XSMqJb5mE0JQWYR6=YjUESNmE0pYWSRPWx=bXlNbEx=mXtEYElRx=bJPJbJPExpYWbF0JSjbXlpmEb1Q=tNm=OpvE0MQEOwA=Sjb=bJ6XO=UWbuP=SRDEbJxEbMQExNbE0i1=YN1EbsQXts/WOU1XSpUWO1AEtsqJS=m=OuAXOj1WlsAXONvESNYEbNbEOR0Wtux=OuqXOpUJ0E1WYNYWx1qJYpmExE1Jbp1EbvbXSNmEluxXtWPElM/WbWQWYE1WSi1=lRqJliYJSJAWbv1JS5v=ON1=O=vJbuAEx1P=tWA=S=1ExGqEbR/EYjYWbGxXOs6=SjbESpbWOMqJYM/=lJQXSMDWbNUElpvJ0JAEl=vJbpbWxHYEbMeE0WD=ljbESwQ=Y=UWOR6WYWD=SsxXtWDWSuD=tsxWbiYEYuAJxJqEtWAWbuqElRAWlW6ExG0WOw0EtMQWtjvWO10JbRPWOjYJ0iUJS1q=Ojv=lW0JYp1XSH1WlM/XlpY=bFAJxGDEOEUJbu/Wls6EOG6ExWAEb=1EbJPXlR/WOjU=SWeEbJeEYMqEOv1JSF0E0j1ExMxJSj1J0MqEtE1WOReWSMq=lseEtR0Wb=vXOsqJbH1JYjbWOGx=YMeXtEU=bpUEbvvJYW0JYE1WbvmJxjUJb1D=l=vJSG0XSivElEYXOjYEOiUXSF6ExjvXOJ0Eb1PEbMxWtJ/WxE1JbR0ESsAEYpvJSuqXlp1=lJQEYR0EYWeEOU1XSweWbMeJ0NbWOs6=YpvWSuQElWAJ0NUElM6WlMeESuxWYW/=bUbExiY=bNbWYEYWx16WSweE0sxXOFDESMxESJqJlRDElRPXOUvEYEU=livJbW0=lWeW0jmWSEvXOJAEbw/JbFq=lNY=O5mWbWxJxWAW0uxEOFx=lWDWxwQ=tsqES16WY=Y=bRQEOsPXlRDJYsAWxuxWlNYWSsA=OjYEbR0=YJeXlWQWOjvEbwDJ0uqWtEmJb5b=S=mXORx=tMqEOHYXSuPES1e=YN1JSWAXtNmESu0JYR/E0MeWxwPEluQXt=bESiY=liUE0MAJSJ/=O10W0sxWxRq=SEbWO5UWYWAJYuD=Sw6=OwPWYW/JSWAE0imWxMxWbR/WlJxJSWDESW6EbGPEYMQElWQ=t=mWxuxJS=Y=Ss0=l=UWOMPWSNUXlse=O=YEb5YWt=bXtWQEtpU=OW/=lReJSWQXOp1EOjvES5vE0i1E0J6Jx1eWlR6JlR/EYpm=Oi1XluxWYRAWSGDJY=m=OuQ=bWDWOM/=YW6Wb=YJYsPEtjm=liU=OEb=ORAWYWDESivJlsD=lM0E0uQJluqXSEmJbpvJSuxEOuqWSJAJxRQEbvYXSUmJSs0JYJAWlueJxuPESueEbEYJljmEtMAJ0WAJlpmJbF/JxuAJSRqESU1WtMeXlMQJxHYXt=vXOEvXSwA=ts6J0WPESjYWO1/=YR/W0jv=bWDWSs/JbG0=lpmJxvb=Sp1=YWxE0J0WxpvWluDEYs/JxGDWx5UXSJeXtMAWxUmJYRDEx10XOUYWOvbWlsqJljb=lJ/=YNY=Y=UXlEYEYMDXtNvXSFQESR6EbUbWbGAW0Mx=tJ6=S1DJljUEt=bJbimJ0MeWbuDWSJ/JYu6JYEYWS5v=YMx=SWeWYue=YWAJ0=vJYseEO5UWxse=lsQEbFQWb5bWYRxExuP=OMDEOuxEtpYXtEbJbF0WO1/=Ss6WbR0WbibEYJAWb=v=OMQWxH1=lpv=OJDJlu/ESWQXt=YE0imJbJxJbs0ExibWtMAJbFxWlRPEYNbEYWxW0s6=Sw6=tJP=Os6EtRx=bN1=Yu6JS=bEbiU=OGAESpbEljbWSMxJbEUJYpYJYMq=OpU=bRe=SsqXSw/Jbs0=YEUEb5U=OuPJlse=O1AJlW/EbvYJSseExWQXlWAEOpmJlW0=YW/WSwDXSFAXlRDEYRqXS5Y=SMDExNbWYW/JbMqWtuxESNbWlMD=Su6Ex1eWSW/XSF0J0J/ExuxEtsQESN1WSGDEO51E0u6XOjYXSpb=Ojm=lMDEtWxJSuqWSWPWbNvEbM6JYW/E0EmXOJqE0jvWxi1EbHmXt=1XSGAXljUES=vEbwxEbJxElRAWOFeE0sAEOjUJ0EY=lsq=lW0WSRqWtNmJbW6JxM/XSG0=Y=1=tNb=bWDEbNUWYEUWSWeWSWxW0=1=lJ/XtMQWtiUJxEU=SH1WbW6=OH1=O=bEYuAWSFPEO1DWxU1Wx=UJbGPXljvJS1PEtWAESR/EOW0WOR0Wbs/WxJ0XSGeXtWPJYsqElJeXOMPXO1QE0ueXlp1JliYExJQ=lRe=YMeEYRA=bN1EximXSNYXtRxEtJPWtMD=OFDXSs0=OM6XS=bEOs0ESF/ExM/JlNY=bjUJluq=l=1XOsxEtNUEbFPXljbJSpbWSimJYEmWYWqEYE1XSNYWbGxJYEmJSwQWYpmJYpbE0uAXtNYWbWeEOJAWbFA=SFAEOEvJ0=mEOJxWxuxWtim=Ys6EbMPElM6WSMqWtJ6JYpYWOue=O51Wx5mWlMxW0JAXSseXO16J0sPEbWeWxWQXSuxEYR0=b10ES5b=SNmXOwQWtM/=YNUWbMA=Sw/EOUUW0NmEtiYJbHmWxwx=bNb=O1P=OR6XSUb=bJA=ORPE0M6EYseJx1q=SH1WbHvJ0jYWxMq=YNYXSs0XSu/JYW/=lMPESRe=SN1=OseWSuxEOUbExMAExHbWxvvJbsP=ORAJYsxJYu6Exi1WSuxWtjm=SsxXSGAJbv1EORPW0W6Jxj1Ets6=bRP=SMPJxwDWSJqWlEYEbMD=YibJlMPJSEvXSpvWOiYJSFAWxw/=lE1=SGqXS1q=OGPJlRP=YEvW0u6=OEbElsPJxpvWxMe=SWQXOFAJbjY=OU1XOGQWSFxXOu6EtJ0=O1PWxuDJxMDJbRD=tMxWx1PExwqWbs/E0MqEb5mEYueXOM6=Y=mWOvYWtR6ExsAWtM6EYu/ExwPXOJ/EtEvXljY=SWPWb1AEYpvESiYXSNm=Y=1WO10=S5bEOMeWbuAXtRqWSUU=b51=b=Y=lueJxUmWSGxEY=bEOpm=b5UXSEvXSN1E0JqXSvbESvmEYRe=O=mWx16WOw6J0WQWbvbWYuAEtWe=bJDEtimJxMAXlJeJliUWxRPES5b=YWQE0iU=SJ/WbRQElJ/XSu0WxWxJl=bWOMeW0JD=SJeE0jm=SweWSHmJ0Re=O5vJxEv=tMPJ0jmJSj1EbUbJx=bWx5U=OR0XtWAWSvv=OsD=OW/WS=YWlMeEO1qWb5mWluxJS=1Jx=vXONmEYpmXlu6JSw0XtJ6J0sD=ORDWbsxXOF6Wts0JlsAE0ue=lM6WOReExpbXOJP=YuAW0EmJYWPEbM0WbHU=lWx=bvU=Spb=tu6WOwDWtJDWbR0=OFqEb51=OimJYR6=O16JYj1ESNYExsxEbJPJSjmExu0Jx=1JYWDWbNUEbF6EYNYWbG6WtJ/=YJPWxGDEbibJ0jmXSu0ElsAWxG/EbvUEts0J0NYJxivEbF/=OHbWYEbXOuP=Sjv=SGQXtWxXlMqJb1A=tMeE0ibXOWDXSNUWOH1J0JAExwxEtuDExs0WbRQWtWe=SRqE0=b=lW0EOHUWxFxJSiUEb51ESuqWbWAEtJeJx1xJbjvEtuA=Ou/JSsDElpvExjYESv1JSJeJYuAEbwAEYWxXSGeEliY=OpUJbjYWljvEtpUEtsxWbEmEbsA=lRAEbsq=SGxWSu/XlMxEbWxES5m=SMDExRxEtW/WS=U=Ou0=SibEtRP=SiUJlpb=lEmWxwPEb1eWlMPWOw/WSG6Wxj1XSJeWSuQEOsxWxR6ESjmWtu/JbweXOMDXOJeEOvYElsqEOJxExMPWbG6WYsq=OMAEbMQEYjYXOivWlEm=tWeWxuxXOim=ljbWOHYESvYESWAWtJQES5vJYWqWOJDXlpv=lNUJxMe=bMQ=tsqJxF0ElJeE0=vWtW/WYjY=bWP=YuAWSpYEbpbJlivXSMxJ0sAEOMAExGeXlM6=tWPXS5bXtsPJbM0EYj1XSiYJxw0XtuQWxw0Wbi1JbRP=YjmJSR0XSGAEbwPXOsqXSJ/WxHUESuqWSpbES16W0RxEOHmWOUm=SE1JxJxWbM/JSEY=tJQWbUYJxHU=bMeWYNvXOR6JSJAW0=bWYEmJYJPWxpY=Ys/=bReJxGPJYEYWxJQWtsPWxJ/ExJ6EYRxXli1WOHb=YRD=ls0J0RPElN1=Owx=SpY=YJAJYsAE0JD=bFPExJ0JYNUEOReWxUUW0EvEYNYXtRxW0pY=bjmXtimElpbJYWeExw6ESNmXS5UJbFDXSNYElW/JbNvJbRPXOFP=YjvWOWeElWAWOGAEOw0ElJDEOJxWbjYXliUW0Mx=lEUEts6J0jm=bWeXSHmWxGDWtu6EOpbWlJDEOJxE0sqJ0JxESHYEOW/=YRqXOFA=tReWtWAWtJQEO=1JSM0W0RqJ0Me=S5UWtimWbu6XtjbEO=YES=m=Y=UEYEmE0NYJSE1WtueWxwPWxF0=tjmWbH1Jbs/=tibEb1qJbse=tReWtuP=t=1EYpmJSiYJ0ReESu6WSHbWOux=Ow0JliUE0JAJ0uxXlEvJYMA=Y=mXOR6EY=bEts6Wxwq=bpUWlMPJ0=v=OGQES=bEbs6Jb10XlNUXSvvWxJ/EYNvJbuPXtuqEYs/XlibWtJeWtN1=S1PEOpvJl=YEtJ6EOsPWtRx=tuQWlJ/W0R6Jx1D=lMAJx=YWlp1WbU1W0R0XtMAXlibWlR6ElEYEbHmJlueJSvvWSj1=tsx=Oi1XSvvXtjvXOpbEtMeEtuAExUUWOG/W0iUEOWq=YuqExu0WxEbXSHYWSpm=lWeWYEUWxu0W0u/ESNbWxM0XOHvXlR0ESuqWOHmWtNbEls0WSuA=O1AWtWQXSF/WxsQElibElRA=YEY=bW0ElEU=biUElsA=tN1=bEvWOF6XtNbE0uAESuxWSuPXOW6W0RD=bjYWOR/WlMq=ONmJ0W/=ljm=YNvJSJ0JSU1EbW0WSu/XS1xJlJQ=t=YWbux=OG6WxwPJYpvE0uAJSG/EbGPJ0jbXSEYXSM/JSvmJlJqXOWPXlW6=lMAXOjb=YuxWb5YElNUXlu0WORxWOjv=bNb=tJ/=lNYXSW0WlR0JbFQEYs/WSEYJxUUEOG/Etp1ESWeWtW6JbFeXSu6EYW/JYjvJxsDEOHmWbEbJYRxXOpmEO5bJSGDEtReJSseXtseESvb=YWAEbUYXtJ0WSRxEY=vWSWDWSseEbGDEbR6ExMPEtivWb=mWbsDEYJA=SpY=buQEbM6=bvb=YRDWlJ0JS5YE0i1EbN1WtR0WtRQ=OwDElWDWSv1WbW0JSGx=li1=lpmEbjvWxw0EYu/EOWx=YMPWxwQElR6EYN1EYjmEls/WO1P=bRDElNmWxsQWOUUWbsx=SibXtMQXOjYWSs/=S=vXlW6EOseWSsqWxW6WOJD=l=bWxHb=t=YWxGAWlpYJY=mXOJ0XtuAWS5bJY=UWSFA=YjbJ0pb=lR/=SGxWbJPEbjvEbWeEb10WOJAJl=v=OFxXlM6XSWQES1xEbvUEYj1JbwDWxJeJbWA=bUYXl=YJbFD=Su/WO5vXSs6EtjmEtEbJ0N1XtE1WtRxJbux=OHUWONYExvm=bsD=OsPElsQWOueXtR/WxuDWSWxWxRq=bivEbu6XO1e=bReJxF6XSjYJbG6=bF0WtWAXSimW0NvEb1QEOuQXSuQJYWAEbs0ES1eW0WDWbWDJ0jYWbvvEYWAE0RQJbwqE0pbJ0jbWO=vJSMQJYJq=bFq=bR0ExR0EORPEO5m=SNmEORD=SJ/EYJPE0=vWOF0E0WeJYsD=Siv=OGQEtNU=bG/JS1AExuQEbJDEYJAJlMD=tRDWOE1WtMeXO1D=bHU=tivJxG0=bpvJSE1WOsPJ0R/WSNU=lpYJlN1WlWPESw6Jlj1=bw/ESRq=bs6W0sQ=lNb=bH1=b16J0uAEb=1Wxue=lWqWSJDJbw/Jbsq=ORqElWPJ0uAWYWeJ0jUWOE1JSvmWtu6JluQXtJ6XOw0=tEYEbUmEOUbWxMeJx=1J0J6WOEYXSWPWbW0ExWx=ljbWx1A=tRP=tJ/XOweEx1Q=SwDXlMDESGqWO=mEbJAJbHU=S=U=YsAEbM0=SjbWtWeJYsQWt=UElJQJbEbExwxXlE1WOUvWlsD=YimEYpYJSibJ0sx=S1/EbGeJbJe=Si1=SUYWSEvJx1QJ0uqWbpbJbWQXtu/=tpmXS5mXSuA=YM0EOM6=tMx=ljbXSuQW0seXOsxEtjb=Yu0JYiU=ti1JbFqWtseESpvXSWDESWeWYsQWSM0WbuqWb=v=tpm=Owx=lNbWxNm=bR/WlWDXOM/Exj1XSG0WlibJbR0XtJQJ0uPExwAWtMQJYRQJbpUXl=vJSwxEOsQWYWPWbNmE0pUWSM6W0MqWxM/E0W/EbvYEOimWlM/ESu6WONvJlseWS1eWSsx=OJQWOEvElE1WxjvEluq=tNYW0W0WlpmJxsAE0u6=lR/JlJDEOUbElM0JbibJl=YXl=m=bsPEtWAXtJDWxMqXtuD=YW/WOJxXSsA=l=v=O1QElM/EbjbEb=U=SHv=ts6JSUYWOvUWbF6WOJ/EO=mWORqJ0MPWOwP=bF6J0J/=bv1EOivWYivXtpv=bGAEb16WbJQ=tsP=SMQ=Ys/EOHv=OvYExUUJbjbEYWe=ts/E0u6XSEYJYsA=OFA=Ow0=OEmESwxWS1xWOwqEOGxJ0iYElue=bFQ=Ypm=SM/XSsPElWqJxWxXtNYXSMD=SW6WOR6WS5vWOUU=SW0=bweJxRD=SsxJbGeESEYWSE1=SHYWOpvEYpUEtjvWxRPJY=vXS51EtWeXlR0EtEU=SsDJSJQJxux=tsQWxw6EtWAJbRxE0sAJbuP=O1eJxUvJximJbMAWYiY=OweJxRDEY=mWOM6EOFDJbuDXSpUEYMxESEvExsPWSwxWxMx=biUJxHv=lWP=lJP=S=bWlu0EbNU=SM/WYMDJYsAJbvvEtWPW0s6=bRPWYW0ESpmJSW/=bjYWtN1WSv1WtMqXOFPXS5Y=bR0=OReWYJxJbsDExj1W0ueExFQJlE1Ebs6Jbu6WO10=bsDJ0W/=ts6W0jmXOUbJls6JlJqEYpUXSMqXSHUXlWQWSpUJ0EUJSuQ=OvUWOj1XOjU=bF0W0We=ORxWxuA=tuDWxU1EYM/XSWqJSM0WtW0WOFQEtuQE0=1WbH1XS16WYj1XSMDEOJQEtpUJbu6WxJ0EOuAWxi1Wb5UESM0XSJDJxi1EtpbWOvmWbReXSibWSu6EOw6=bWxJlsQXOv1WxwAXlMAXSM6WlWAWbJ/=YWeJSw6WOvYWSJe=bJ6ESvmElJxJYuDW0sD=bRqESRPES5vWt=bXOvYEO=Y=ls6EbJAWSGA=tW0JxRqXOuDESueXlM0ESFA=OuDJS5UW0RxJ0j1=O=mJSRPXlimWlWQWxjmXOpmWYJPWlpb=SUvJ0uDWYJPEOW6=lMQEtJPWbG0Wl=1WOJPWxWAWOsDJbUvEbR/=OFPESFQJxGxWSsqJbFD=bFAWY=bWSpUW0uQWOJ6WlR/EOHmJbvm=t=vExs0EtJqW0s/WbJeE0u6E0uPJYJ6JSW0WxN1WYW0WbUYWOM/=bpvWtEYEOWx=bsx=OuA=bG6XlNYXSEvJbW/=O5b=tNYEOUvXluDXlW/E0WPJbEUWO5YExF6WOvYWOWeEYpYJYu6WxU1=SGDXlNvJ0=UJxJxEOuxEbUUWOHmJSJeJYsQ=SpUXlMQJluDJbMDXt=YWO1A=bNb=tiUEOjYJb1QEYibExF/J0WAJb1QJxsP=Os6XSWQWYWx=lpvWSF0EbwqXOF/EtMxWtjb=OF/WYMqEb5vXSWeJbR/XOu/=OFQWbvmE0sDWYWx=Yiv=YR/EOvUJlReJls6JSEmWYiUJluDWxMA=tEbEYWqESGDWYMxWlN1XSU1Jbu0XOuq=lJQ=SGq=bWqWSNbWx5YEOw/J0u0JbF0JYW6WOuPExR/=tJAESEU=bFPWSjbESMeXO5bWbE1Xtu/XlibEbUUWS5Y=tJ6EtsAXOM/ESGPESwxWS1xWtNbWtsAEbpvJlpUJx10JSJQWOFxElRPXtib=OsP=SUYEb1AESpY=tuAEx=bExueWtM/XtR0EOpvEbW0XlJqESw0JxHvEtEvWYR/EYp1WxsDExiYW0uDEbFA=SR/WOpvJlW0XtuA=bNv=Ow0W0WqJS1P=bM/=bJ/JYuqJ0J/Wt=vWO1PWSwq=biYElW0XOvU=bWD=bH1J0u/XS1/WYR6EbJQWSjYEbEbXOG/WtWD=bUY=bRQXlWeJbH1EluDElsDWtj1Wl=YXS=YWxFxEbNYJbw/=SMxE0JPJbF0JYNv=lM/WlJ/XtNvJxWDXOi1Jxu6WOsAJSUv=l=YEOMxWbNmXlN1E0=mJbi1ES5vXlsP=lWeElibWON1JxNU=OF/JxJQ=ljUJYJDWYM/WbpmWbJQWSGeW0Mq=tuDWls0XtpbWbF/WSJqXSuDXtJAWlRA=tN1XON1W0RxXOGxEbJQJlW0XOsxEY=vWxu0JxJD=OwPJSu0WS=bESuPXOFqJYimJ0p1XtuQWSWxEO1P=SEmE0sQExsxWtW/ElNUWOMxWbG/WxJ0XOUUWOuPXtp1E0MPXtNbEOMAESRxWYjU=SM/=YJ0=SUUEORQE0MxWxJ0EOFPExNmXO=1WSwP=lJeJSvUWlMxEOJAWSG/XSRDEOvmEOF/ESUUXl=m=bpv=bFq=Os0JbF6=t=vJlJQWb1/WO=YJbsqEbiU=bue=OMxJYsPEx1PES=m=OJPWS5vJbWQElsPWtNv=OsDJluqWtN1XtEYWOF6ExM/ESJqEbWPJbFAJYuA=ts0JxuQW0MDEbNYJbMDJYi1=bi1XtsPWOM0W0MeElWqWOWPXSNUXtiU=ONbXOue=OsxJlRQWbNY=SuQWYEYJYsQJ0uQWbpUJSGD=SiYElJ/ESJ0EtjUXSGeJbUvXljvWOWP=bsq=bpUE0JeEtpm=OuP=OMQE0RPESMQWlu/WS1eJlimJlM/W0JPXOvYESuAXtN1JbMqJbWPXOsQXOMeWOvvESiYWb5mW0u/EOuQJSM6WbwxElsPElpYEtjv=OuQWxsxWbiUES1QWlEvWbEvWxi1EOHYWbsAWbw/XlJQWb5bJl=mE0u/JxwQWOHUWtRPJbJqXlu/XSweEbRqWOiYXSMe=lMxWOMx=ONY=liUWSF6Xl=1EYM6=OsDWSWx=OEb=lWQWSWAXOivEYJxESNbEOvm=OvvWlu/XSv1WbHbEt=1XtW/ElW0ESGDWlWDEOMP=bs0JYuxExF0=OWeWx51EOj1JxsxXlsAWSwPJ0uQWlNUXSJeESMxWSsq=tR6Eb=YJSw/=YR0ElMPWYRA=SEmWOMA=tu/JbUmJlJq=tMPWSU1JbNYXSWAEtjU=Yu6=YR0=OjYESjvJx1PJbEU=bRDJx5YXtuQ=lJDWOJeJ0s/JxNvJx5v=Op1WlEb=SGDXtu6J0JqJYRQWlj1JY=YEtWeJlWqEOG6ESHUWlEmW0M0Wbs0XSF0EY=vEYJQJ0s6=Yi1JliYWxHb=lMxEOsx=tWPElWqWYiYE0M0EOJPW0jUWOR/E0EbXtsPJSuP=bjmWbs0=Spm=bvb=SNv=bu/EOR6XSsA=SvbWOGeWOMAXSsqXOj1EbuA=Su6WOj1W0JD=OEU=tNv=SFeWOUmXO5U=bsqJSHmEOJ/EYRxWxiYWOw/EYpv=SNvXOJQEYMD=YuxJbWqWSG6EtibWtRx=S1/ElpU=bNbWSW/=bR6EtjbEbFDWbs0XSiU=OWeEYNUExiUWxRqEOsxW0RPWx1xWSseWOw/EtR0ExseWSpbJljU=l=1WOvUW0pvEbJA=lWPExWDWSw0WO1AJxiUWlMxWS10WbFx=SjmExFeEOjbW0p1ExweWx5vJxEUJSGDEbu0EbWqEtR0EbMqJ0J6Xt=bEl=b=Su0XOUvWYMxES1xXSuPW0EvWSG6JbFP=bsA=SFPJSpbJbM6WSMq=tRDWx1QJS1AJlR/JbimExsDJbN1EtjbJSp1JlJ6Ebw6=SsAWxvvEtR/XSRQEtpvWONv=SFx=YW0ExsQXSFAW0W6WtiY=b=1Jb5m=SuDWxjUJSsPJ0RxXOjmEOHbWb1PE0RqEYMAJYMDEYJeWxsAJxvbXOMq=YJAWbuPJ0RQXS5bE0WqJSFQXO=Y=tiY=tRQJbsDXtsAJSEYEbseEOs/WOwDEORDEY=bXOUYEluQEljYEbiY=SwDXSW0JxF6WOUY=ONUWljm=tRDEbpU=YWqE0EYWYR6EOHUJ0pU=OibWt=v=ONU=OJeJSReEbwDWlWAE0sxElsDEx=bEbM0J0W/XSib=buxW0jUWxE1WxN1J0NU=lsxWlW6JSMDElJxElpm=SjbXtWPESs/ESR0=tNbWYMeEYibWOuQESpYExJeXSE1XSM6XljbXtj1XtjYEbwDXOwxEtMP=SRPESwPWOR0Wxu6EYW/JxEbJxsD=bwPWtsDWxWAW0=bWluQXlWQWOR6J0Ev=OGqJS=U=tMPWSueWO10JSimExUvWxHUJxN1JlNY=lRAEbwDJSWeWSiUWt=U=O51=SW6WOJ6XSEm=Ow/JxRxJxWPXOj1WO=YWS16ExUmESjUESjYXOG6WSuP=lRQJSFPEluxXO=m=OJAXlpmEOWqEb1PEOUbWt=1=ORq=bNvXOFD=bJxWSNUE0JDE0uxEO=1=SJQE0p1XSU1ExpUW0ueJbR0=SuD=SwqXlsAJbWPXSHbESWQWtJeXtR6WbNvJSRDWY=1EtJ0=bMeJYMeElNmJbpbWbFA=SF/JxjmEbUUJxjmJYM6=Sw6EOWPWbvvWORDWbFAXSFxExHYXSvbJ0W0=Siv=tN1Exwx=tN1=bFPWS1AWS=YWtsPWxivWxUUXtJ0Xlu0EbMeJSuq=SRAWb1xWOsAE0s6=tibEbjv=YNv=luQWOFQEbF/=OGxEbHUWOu0Eb1qJSEY=YRxJbEmWbRAXSN1JSweJlpYJbuQXSF6EbwQ=b51WxpmEbGxEbp1EbJeEtWQJS1/WtR/XtEvJb16=OimXOJPEYi1WbG0XSU1=YjUWtpYJbRPXSivEbJAJSHvWx=1WORDEljU=tJeJxR0=YEmXSGeESJeJSWxEbGA=SwDE0JeXSiUJSsqJxibJbE1EYsD=bWe=SWeEbMPXtu/JSWDXSR0E0seWbW0JYNY=lMPWxNmESs6Wb=vXtpvXOs6WbF0ESFeEbGeWxF/W0iUWSRq=OUbEbpYESs6XlJ0W0JD=tJ6JbuxWxJ6EYi1W0NYXOHUEbNvJbWDXt=vJb=bExEYWx1DWtMQXtW6WOweWlWxWbwQXSGAEtpbEbueW0sq=Y=1=SUYWtMPJb=vJlMDJlWD=OGQ=YMDWO51ESHYJSsAWxHv=OiYWtuPEtRDEbu6=Ys/XOFeWxF/JxWxEbFD=tJ0EtWAElivWtsPEx=Y=Owx=tWe=bHmWxNbXlJeEOF6=OMq=lWeWtu6=SJA=OimJ0uxESRe=tM0WORqXONUWxNYWx=1=SRAEOu/JS1P=bpm=bWeWOibWYJqJb=bWx1/WxN1WO5UJxM0=Ys0Jxu6=OJ/WlsDEbpU=YseJbpm=SjmExF/Jx10Wx10JbWQJY=bE0N1XO10Wb5UW0=vJYWAXSjUJlJAW0EUWYE1WOUbEY=mEtNmJbMxJbHUWSEm=buxWOjvESUYXSJQ=Ow6=lsD=S1qXSHvW0RQ=tjY=tEYWS5YJb=mWliYJb1/JbvmElEvEtuPJb1xWOMQXlRqWlM6E0j1WtM6XOFAJYseExpvEYsq=S5YJb1PJlJxE0sq=YsDWOpmES10WlpYXlNvWSMQJliUEbuPE0NUExNvEOMQJbUvXOHmWbWxJb1A=S=UE0WPXOEbWSRq=SiUEOJeWYs/J0N1ExEYJ0sAWluPEbRAJbJeJbEv=YMQJYMAXS1PJS=Y=lWeJb51XlRPJxFA=bvbEY=bE0=1=SFAXSJD=SpvWxpvJxu/ESvv=SwDEbJxWtR0Wt=v=YiYXSM6=Ssx=tWA=tsAES5bWtNmJSibEOM6WSUmWYpmJlMPJxGPWYNY=YsA=lsAE0i1=S1QESR/Eb5YES1xWljUJSNUJlWxJYjvWYWQExW0ESNmE0RDWYJDJSp1WbFqXOHU=tsDJSHYXtWPJxuQESMDXSweExMe=OF/XSivEtjvXSG0WtEbXOvYJYjb=OvvJbFqJx1xXljUE0N1J0pUWSJD=bUbJSMAWxW0=bWPWtMeEOpUEtsDExW0XSJDESW6JlEv=S5vWONUJlEUJlMDXSwPE0ueJbvvExNbWlJPWSHmJSHb=lu/=YWAEtsA=OJxWlWPJlReJSGDXSJP=bJ6EYM/Jb5bJ0ue=bGAJbpY=SM/WbRDEOpbJxRPJYsQ=OM0EOwAElRQJSFeWO=UJbFq=OJ0=bGQEb10XSu0JSs6XSi1EbjmEtuPWlsxXSFPE0EvEbseExJ/JxUmEYMxXtsxWxF/WtuQEYsxJx16JYpvJx16=bJqEtsx=tM0EbseWt=YJlJx=Sp1=lsx=O5YESRPWOWeJSv1W0=UXSFQEOW/JbEUWluq=bNbEOEmJ0pU=b=UWYEmEYWq=OM/JbFA=bG0JlR0=bFxXtjUXlibJxGe=luP=bR0WOMeXtjmJYJAEtJ6EYs6JSWDE0jvWb1qXlpUXOGP=lN1ESJAWbuAJSRA=tRQJYJPJbW/WOH1=lu/ESHYWOFxW0E1=lseWOwP=SGPJSjYJbU1JSFeXlNvXOMPEbuDWSUm=bFxEOuPEbu/EbWx=OFQ=tuQEOw/JbsDEO=UXtJxXSvYWS5YXSpUW0W/XO1/=OMxWb5bEtW/J0=vXO5mExGQXtWxESWQJljv=tJAEbNYEbJ0W0EmXSiUE0J0JS=bElM/=YiYWlJ0XtM0ElivWOEUWbFeXSR6=YJP=OsAExib=bR/EO=bWSGeXSM/EbjbWOJ6XO5bJlu/JSW/J0EvJbUb=lJeWSFQJS1eEOMqExvmE0sqJ0NmWOMA=YuQJxEbEYJqWluDWSiY=tsAWlMA=lW/Xl=1ESJxJxiUJbw6ExRAESjb=lWPXlMQWlJq=tN1XOibESM6=YWPWbweXOGPEOuqEtivXOJPE0uqJlu/WlRPExG/WO10XSivWtimEb=mXOUvXlJ0ExFPWxU1=YRx=lNbEORPXtjbWYNmEluq=lW/WYWeWOEbWlNUEOsAJxN1ExReWxG0XOwAEYMqJb=bWOEUExsPEtJe=tMeWlJ0WtjmEYpvJx1qExG/WS51EOJAW0ibWxHUE0s6EbvUXlJPJxwPEtNY=lE1XOMeWSv1XS5bWlJAWSFP=OuDXOHY=b5YJSM0Wb1Q=SF6EO1qXlW/XSNvJb10JbjbWbUvEbJx=tMxEbHb=Sp1=O5mEtWx=lNUWl=UWOiYWSW/WSFxE0iYXSJ/E0M/=lW/=tJAEtpvEtNvJxWP=bH1=OwPJxM/ESU1WtuQ=OG0EtN1=bN1=YivJbWxJ0W6ExHYExFq=lR0WYMQ=lEmW0uqESWAW0=YWOJ/WYuPWlWqWlW/EYuAXlEmJxFDEl=UEYsxJSFD=tpbWbwQW0jvJSMqJbJe=OsqWYM6XtuqWxGDEbUbXSwqEbv1=l=1ESGeW0JD=SjUJlW0WOReXOJAJlWqExWPWSJx=tJ/XtJAXOvbWbwQJYM/XOsP=O1xJYuPEOpYJx=bExU1JxWeJYuqWO1DWbsxESF6XOG0JSp1JbHvXSHUWSJAJSHmJlRqEbRQWxi1JbJ6Jxpb=SRA=bM/WbNUJx5vXS1D=bReWxvmJbEUJYJ/=lM0JbwAXSs0=ljmEx1AWOse=tpmEx=m=Sj1Eb1qEONYWSuqEOweExs0ElMq=lWDEOFAWONY=SjYWtMA=Yi1ESwq=Y=mWtJDESuxXSG/WtEmWbGPWlMq=bHvEbv1EYMqWluQEOWDWOjY=SivJbUmJb5U=bGx=Sj1=OuqWtEbElMqXS5v=lMeXSivEtWqEtRP=bFeJ0MAW0W6Jbu/WS5YWONb=O5bWtM/JYWDWtMAW0sPXSW6WtN1J0MPWOJeWSuQ=bi1WtEYWlRDJbiYXtJqJYjbXlRxXlJDESGPEOFDJYRAE0RAXS=vJbwQ=bsxJbpUExp1WbFe=SweElWe=SR0JbU1Ex=UWSs/ExHYWbwqEtMeXONUJSUmEOu6=Sw/EYuxWOuqWx5vXtM6ElpvES=1Wxu6WYJqWljYJxvvWl=m=O1qJbW/=OE1WYMAE0=YWtWPJYEYJbM6JbuPXS5YWbJ6=SvmWO5UExFxJ0NvWOsDESR6JluAXtjvXti1XOimWORxEYueJlMD=YJDW0RD=OuD=Y=vWSRqXtWPW0sDXlJPXSMPXO1QJbimExReJbRPEbjY=OEmEOuQXtReWlNmWxHb=SMe=OwAWYNmJ0u0JbpvEtu0XOuq=SH1WOR6Xt=vJbsQWYNUJSUm=YRAWluxXS1P=lJ/Jx51JYjvJxpbXONvWOpYExEmWtReJx51=YJ0XSG/XOivJxEmESWxEOwP=OF/XOweEtE1=OjUWOHY=b16Jb1xJYJ/JSivXtJQEOW6=YR0Jb5vEtpY=OWx=SNvEbGP=OM6E0MA=bM0ExG/JSUUJxWDXtR0WbRe=bs/Jls0Wb1/Jls6=SvbXSibEY=YJxuQEli1JlRPESsQJbwe=bsQ=buqWtMQWts/WtWDWSWQWYEmJb=vJSuqWlEbWt=bJYR0Jbp1JYs/EYWAJ0EUJljYEtRqWOUmXS5mXtW6XSJ6JYWqXSsQJbGQ=ts/EOR6JbEvWtu/Exu0=b5UESwDXO=1WbG6=lWxExM0JYJAESG/JbimWxRQEtNv=OGAJY=UEtR0ExUbWSueJx=UW0uDXti1ExjvWOwQWSRP=OUbWtj1Jbw/XOjv=b1D=bEbESMDXtJeXOjYWbMxWxJxESJ0Xlu0E0p1Jxs0JSHUJxJqExUYEtiYEOu0JYMAExH1JYsQE0J/Jxu6EYsxWtibWxv1=tR0XlEv=YsQ=SGD=SJDWtR0=ONYXlu0=OM/EOuDJSJxWb5vE0JqE0JqEb=1WtjvESiYWxEbExRqEbw0XOEUW0uqE0RPXls6XSJe=Ow/=bs0=SsD=SNmWbN1W0NvExuQElJqWxG0ESsDElsQJSHmWx16ESjvEbjmXO10=ON1JY=mJlJeEYJQWtRDXtM0=SRq=O1eJSMQXlsQJx1PJ0MAWxRD=SwAWxUYW0i1Ex1qEtNYJbJeXSpmJxWAXOG0=tRQJ0s6W0sDWSuQWb1xXlM6XOMQ=bMP=bEvXSsQWSHvJbpU=OuAJ0NYWtWqXSF0Wxw/=tjU=OF0JbW6XSGqWbJPElR0XSEYWljUJbwP=OjbJbFPWbRxWtM/EOjYEluAWSUbEbFxWOHvEOWQJYseJ0=vEYEY=S=1E0uxJluDJYMqXSEv=lsqXSiv=SJQJxEb=tiv=Y=bJY=1JSpvJ0MPXSUYJliUJSwQWYRAXSs/JSNmWOMqEYuQ=YMQXSHm=S=YJSwPEO5UXOvmXSFQ=lWAWOueEbJqJ0Je=YuQ=Swx=YE1XtMDEtEbJxpvWlM0WYReW0NYJbGAWbWAEbHvXSM/WxFDEOpmEONY=YsAWxWeJS=bEtRDEbEbEOJxXSGPXSR6JxJeJbi1=Sjb=lWP=OHUWlj1EOGPWbu6WSWPXOU1WSvY=lJ0=Y=UW0R/E0ReXtWAWYM0JSN1Xls0=lJxElWeXtW/WSWPJYMQWSG0WxvUEOiYWlpmEl=bExMeEYRAXls6JxwxJbuA=OEmEbJeJbwqJYNvEYRPE0MDJSsDXSjvESR6XSM6XSF/=b1Q=YpvXlMeElE1JbWQExUbW0Em=YpmWYNm=S1eEt=mJxweJxvbWOpv=bWQESGQJxFQWYWDWYW0J0jbJ0i1EtjYWtRqWOsQJx=UWYs0XOp1EbJ6=tNYWORDJbwqJxHmEOuAWONb=lpbJxpU=lM/=SGQ=bwDEtEUEOE1WbwAWlsPWxM/EtWDJbF/=SGD=YWQExMxWSUvEYu0=bJ0EOJqEOu0XtRDJb=UESw6ExEbESp1=OJPEOU1XlJPWx5bJbHvEbw6JYs0ExseWbvvWSux=bpYJbN1=tJPE0uAEYjvXSweWSFQESNUXtiv=SuDWYsA=SFxJbMDWtW6EO16JSUbJxHUJlWDJ0=YESvYWtpmXOueXtpvXlWDEl=b=O1x=YsqXtu/WSJ0EYj1EbF0EtJ0XtsqEtJeWSMAXOu/WS5vXSseEbEUXlsxEOFqWSJQEtJxES5bWSHm=SWeJbFDEOF6EbjmElue=OW/WSMA=YjbWbuQWSjmJYpmEtJeEtJAEtsDEOwxESu6JxWAWx1xJ0WqWbvv=YsQWxiYXlpb=lWDElpmEOjUWSFQ=lj1=lWx=bEvWb5mJxiUEtj1XSF/E0RqEbMQExJqEYW/Wbpv=OWPJSi1=b=bJbvvXOEUEbs6XOGeEtpvWSj1XO=UExw0XSW6=biUES1P=YMxJSMD=OEbWSwAJlNbWSFAESFeWOw0E0s6Ex5mWbF/=b1x=t=YEOJPWxMQJbuAEOpU=OuQXOwqXtJDExF6=YseWtM0=YMQWSUmXtivJbpvWlJPJSW/XtEUWbsq=bEb=Ys/WbuQWY=b=YJDJbuQ=bNYEluxXOMx=SW0EbUYESMDJx5bJSGPJxUYXOR0XSRP=Osx=YpUES=1WxNmEOw0Etj1Xtpv=tsxWxF0WlW6WYJ/WS=vWOUUWYJQExJeWbiUE0J6WOWDEl=v=bH1J0iYElM6XOwPEOU1J0RPWlR/W0sD=bUvEbvYJSpmEbUvWbJqEYuPJbW/WS=Y=bw0=Ojm=YNU=tuPJxNU=S10E0=bXOGqWxw0ExHvWxUvWYR0Jx1PElu6JSwe=bNbEtu6JSFDJ0im=bM6XO10=tu6EOvvJbs0=OGAXSR/=OuxEOG/ExRAEx=YExJ0ESFDEOi1J0RDWSvUExEbXOpmXSJxXlNmW0MAW0=UJSM6XtM/Wxsq=O=U=YN1Jl=UXlsQ=Ou0XtEYJYNmWbuqEtNUWSi1Jlu/ExMQWtEbEO=1WYuDJSMxWlp1WbimESRP=SFD=bvYWx=mJbiv=SsPEYEU=OR/WONvWYW6WxMAWSsP=tMAWbN1XSjYE0JqJlp1Wxu6Ebu6ESW/XO10Wx=1=O=vWOwe=bN1=bR0EtjvESwQJSGPJbw/=YW0WbJ0W0s/EOReEbWAEOjvWSJAJxFQEYReEOGAJSR6JYWPWl=UXtW6EOpU=bRQ=OJ0WxRAJYs0=Ou/WxFQEtEUWO5UEOs6JxM6ExM0XS5mWbMAEbjYXl=UExjvEbjvJS1qWOp1WxRDW0jvJx51JxjYJx1/WSHU=bWxW0RQWYWq=SjUWxJDWtuQ=bu6JSs6EYW0WSJ0Xlpm=lEmXl=UWtMPJbF0W0ReWlseJ0jYEOMeJY=mESsqWbR6W0J/XOseWSW0WSs0JxvvW0ibWtMeWlJ6EtEUESFeExwxWOGqEOJPWYN1WSvv=SReWYuAWbFqWlEvE0R6=luQ=bHY=bUYJxR/=lsxJxwxEljvW0jYJxs/ES10=bJDXSUv=bWAWOpvJlpUWSR6JbuDWbHUEb1AWOR/XOiYXOiUESvUWxGAEtEmWt=1=bF6EljbWbUvESUmWtM/EOHmW0=1XtMxWtueJlpYXlivW0jbWbReWYRQ=bsqWYu/JbuDXOHvJl=vXlJDXOuQWY=1JSJeEbp1EOMAWlJQXlu0WYjb=OWP=OFQESHYEYM0Jb10=SUvWOMeEbEYWxpUW0JPEY=1Jx1qWlReJluqWbj1JSRDExNvESWeEOR6=bEmEtM/EbwAExWxXSJ/EOuqXtJ6Jx=UESjYJSvvXOwxJYM/XtpYE0seEO=v=tN1JxueWbR/W0Mq=YEbJYuq=Ou/=YpvW0WPEbJ/JlNYXOsAEbvYWOGeESim=SwQEO1PWSR0EYNUXOu6=bueJlNmXt=bWSWQExivXOR0EY=U=tN1ExMDW0p1Etim=bj1WOJ6EtNmEYsxExGQXOwqEYs0JYu0JSjvWxp1=SUb=tR/JluDWxueWx1/=bwqExJeWOEvJSFe=ljbJ0N1EOM/=OsQ=OsAWY=vEb10E0NmWSMD=OG0XtNmJlW6EYu6Jxs0=S1/WSuqWbuQXOG6J0JPWSG0Jxw6JSR6=bFQ=ljmWxpvExUv=bNmEOvUEOw0JbGAXOMQElWPJxFDWxRDWxUUWbjvWOiUEtsxWSvbWSJxXOUv=SGxJxwqJxu6JYMQW0JDJbJQ=SGAWOGqWxiYJlN1Wb5Y=tE1Xts6ESMAEbpmEON1=buP=bJxJxEb=b5UWxEmJSRqJbFqExHb=bUYXS5UE0JAJY=1Elsq=lRQXOWx=bRq=luA=YRA=bjUWbUmJYW6XONmExUmWOFD=OHYWOvv=YEYWxGqXtsQJSFeE0Mx=b1e=b1x=Os0ExM6=YM6JSsqWOU1XS1e=YWAXSw6JSuPWbEmESv1=Su/=bsxEbwDXOUUWlibEbR6WOUYWxvmWOUv=bMDExWeJxJP=SRq=bM/ExvYEb=mWO=mEYs/XOR0ElpU=YsDJYpbXSFAWtMA=bWDJxG/WtuxWOMA=lpUJbimXOG/WbwDXlNYJSFxWtRQEbGeExuAXOsDJSGeJSHv=YpUJlpvESUvWOvvE0M/=OjvWbE1JYpUEbpUWOJ0=b1AESGxJbvv=bMDWOs/W0RqWxUYJx1qXSW6=YivJlM6EYu6W0pmEYsDElNb=OiY=tJ6WbWqXSNmEbEmWbJAWl=vEbsAXOGx=O1P=OFQESu6XtRAEOwDJbNYJxGDWSGeWxRqEOim=t=Y=tue=tJx=bsA=li1ESFDESu0XOueWtiv=OWQEOFe=tMxWYsPWY=vWOibWbMeWO16WOv1JlsDJbvU=bGP=Os/EOs6WS=v=SjvWOwx=SMPW0WAElpU=tWxWtsA=S1/XSWqWxpUEOG0E0=Y=ts6XluQEtJQ=Ys0=SjUXOJeWYJPEbEmWYs/XS1eEYpbWOUbXOweEYJ0JYE1XOw6JSRxXSU1=OHvWOGeWlMx=bF0EbG6WtJ0Wt=1J0sxJ0JDWS1qJbGPXOiYE0WPExGAEOuxEx1Q=OweXlRDW0uQWYuQJSUYWYiUWbJDE0=UXSRxWSJ/ESFqESUUXlu6EljYJxu0EO1xXOR6JxsA=tWxWOWx=O1QW0EUWORqEYWqXOsPWbvbEOG0XSR6JSv1ExUUXtpYJbwx=OR6XOHvJbu/WSuPWxNU=luPEOJeW0sqW0seExvmWbsPWbjvJ0J/WxwqEtueXOMPW0WQ=O5UJSJ/=tsxExReWYEYWbRxXtjvJSMD=bEv=YJQWlpmW0uxWbsPWO1xJSw/J0MqE0pUWb5vEb1QW0MQE0R6Wl=mJSjY=b5UW0WqE0Wq=tRDEOimXSwA=YNb=lWxXONUJxjY=YEbWtiU=Yi1W0EmExW6ESU1=lR/JbJ6=bJPWbpU=YJ6WbuQJ0RPWxibExjbEYWDXlWxWSpbWxReEtMDJ0RD=OuPXOuD=tJAXtuAXtuAWbsDXSuAJYs6WbiUXSpvJxsPJSHYJY=Y=tEmEOFxWOivEb1QXOs6=lMeXtibXOFxEbJAEbvbEbu6=YNYEbN1W0i1JS=mXSNv=YRQXlRxW0R0JSRqW0WP=OM6JSNYJ0u6=tjmWYjUESWqJxue=lWAWOG0WO16ESGAJSNU=YRQ=bi1ESpvEYs0WbivWYNmEtuQEYimW0uPWxv1WYWq=OUUWls/EtJQJluPESR6XtivESFxJYEYWlN1EtJDWSMq=tMqElRqWYj1WYjU=tW6WlsDWSUmJlp1EbMxJS1eWtRqExp1EtJ0ESEvWbMDXONvWOUvXO5mW0imW0RDElJqXOsxJlW0WtM0=b=1Exs0JlRAXSRQJb1xXtjvESWQJ0RxEOwqXSJDXO1eJYu/Wb16JYu6EtsP=SimWlE1=S=vW0JxJ0ueE0u0=bRQXOpbWOvv=bEmWS1AW0MA=bHb=SR0E0MxWSu/XO1xEYJ/=SvvWONbJxu/Wx5bWbMDJS=vWtWqJlM0WOuxWSFxJSFQJlNb=OwqExuDWtMA=bvm=OW6Eb1qEOibJ0JAJlRxWbvb=OMD=lEYESw/WbuAJlj1JbEUWOFQEbW6ES5mWbG/WSW0JYMP=lsxWO=bXOR/WSwQWx5bEtNvJS5vES1DWxGQExWAWxUYJxR/Exu/=OMDWlNUXlM6=Ow6WbGQXlWPExH1EtWDXl=bEx=1=bF6JxW0Eb1PWlJP=tW0ESRPXOJPXOuPEbJxJlM/EbuxXlW6=OueWxHUWlMDXtMA=O5UWlWD=YR6WbwQXlR6W0MD=OG0JxFD=OUYJbEbJbR6EYRxESF6EYib=lNv=O=bWlpmJSEY=bpmEOMx=bRQJSGPJS=YExFxJYNbWbvUEti1EYJQESivJ0WD=b1eWx=mESHY=S=YJxwD=SuxWSWqJSsqXOu/J0E1Jb=bJSJxJxs6WSRPJxwxWYsQJSGqJ0J6Wts0XOWQJSw0XO5vWS1AWS5YJ0i1XtM/JSHvEOGPESpvExNv=SJ0JxvvXlReWO1qJYibW0M6ES5U=lpvXtNbWbweE0WQEOuAJSuxE0iv=YuAWS=v=S10EYJ0WlJ6JlWxWtRxEtWQW0WDWOWAWO1PJbMP=bpmWOW0Jxj1JlJA=b=1EONUJbs6EtMxEtW6J0RxJbGDWSvUJYRQXt=bJ0NmEOseJS=YWlW0EYuQWYJxE0MxWlW6=Y=YWlRPEOGeExFAJ0jYXO=YXS1AW0EUJS1/ElJD=bReXS5YWOEm=OUbExWPWlMPJbHmWSpYEYEbXOuqJSJ0E0W0=Sw0EtWPXOs0=bJe=tuDJbMAEOvYEOpv=ORQ=SwPJlNY=bp1XOGDElJ6EOEvJ0seEbMxElEbJbF/=bUYW0RDEbNvWtpUWbM6EtuxXS1DE0uQESsAJYN1ExFeJbpm=bMeXOG0WSwAW0NvXlMxWbHvEYJPJSw/EOjm=bG0JxG6WxsAE0J/=bseWSp1Exw/XlWAEbGAJbHU=YEUES1DES1QJxjvEONUESimJSNY=SjvWbsxXtsPWYR6EbFe=S1xXOG/JSF0=SNv=SMDWSuDExMAXlEYXSF/WtJ/=Oux=b=vE0pY=ls0EbuPWxWQEx1AExwqJbvbElJPESwA=OweWOJDJSRxWb5YWxMAXOw6XSibE0NUXSR6ESEUE0J0JSuQ=tjvXOw6Eb1eXSwq=YivJYj1JlWPJxWPW0uAE0E1XlM0=bw/ES1/Wb5bEOJxElMQWbHb=tsP=YWPXSGP=tWeXSUUElJ/JlNm=YR6ElsDEOW6=bMP=tuPJbJq=bR/=OuDXSHmW0pbXSEbJbE1JSUm=tse=YW6EluPJYRqJx1eW0sD=OF6=Yp1XluqExwAJb1AWYpmXti1WSWDJbWAJSFx=tJxWSsAWSWDEbN1XOMA=SuQJxMeXSR6E0RAJxwqExRDEb1eEYu6XlsxWxE1ESNmWOGP=tN1JxNY=b5b=Spm=tuAWxjUJxReJxE1ElMAWSwe=S5v=ONbWSUYXSRD=bivWxu0WYRPJxGeJSv1=lu0JSGe=YjbXS51=Oi1XlpmJY=vEtuqESwQEOjmESjmXOsPJ0MDEbwQJSG0=bGAEOHmXlR6=OpmEljUXSuxJYsxEbpm=tW/E0i1EbR0WOuAEYWeXOF/JSpbXSUYExs6=bNvExwAJbuxXtJ/=buA=OvbWx5mXS1PXtj1EluP=SMeJbR0ExMxESweWYi1ESwDWSN1WlEmExp1JxJD=lWxXSUbJxwxWbM0=YEmExjmXlWxWS1DE0iU=OG0WbWQ=bRP=lN1ESWe=tRDXlWeXlRqWOU1Ets6EORP=bRPJbN1EOwAEY=vJSRQWS1eESwxJ0jmEls0EbFxEOHYEOpbElE1Xlu0=SRxXOsxW0ReWbvmESUvEx1PXtiUWOjYJYsq=Sw6WxMPWYsQElW0WSMqESFAEtjYJSpUXluxWbGQJxi1W0ib=OEYJbRqXSMDESJ6ESRqWSMxWOwxEYueExWP=ORDWtJ/EOMe=lM6ESMAWl=UWO5YJYuAESGAXtimWtjU=Os0Jxs6ExwQ=SGQJ0W0JbvvEbM6=ONmJlsDJSNYWYWqEOG/EbN1ExvvXlWPXOux=bR/JYibJluxXSJ0WORQWOE1WbJ6WO5m=b5YW0JDXO1/JbFe=bFQJbRQJbuQ=SjUWO=mEbjmEONUJYWA=bs6JSJ6WSJxJl=YEx1eXOseEb=UJSi1JS5mESvmEOM/WSjYESUvEOFqEtjYJbHbJSNmW0pYWSHUXON1Wxu0El=1ESM/=OFDJYJq=bR0JYpb=SNvW0M/WbF/WYE1XOF0=OWDEO5UESUU=YimWOW0ES51WtseWbUUEOUUJbJxJbFqEOWDXSFeE0JAJx=bESibJbMqXlpvESiUElN1=lEmW0jYJSsDJlJDWxReEbJ6EtNbEl=vEbimEb=1Wx=UWbuPWbNmXl=vWOWAEtuAE0RxJYiU=OR/XSpmEbvbEbvvEbseWSweXSHbWtuAJSuAEOJPEtuDEOR0EOJPExJAJ0s6JYjmEYuqExjYXSjbJx1qJ0imWOpmWtMqElMD=YNUESEmElpmWbFP=tR0XSwDXOjm=Ou/=lE1EOM/W0N1XOibJSJ/JxF/EYsqE0pvXtRAXOJ6=tRAXO=UE0W0EbwPExN1WbEYEbGxWbGxWxvY=SUYWbMqWYivXOv1JSp1JYjUXlW0WOHYW0i1JlMQJxNUJbNYW0uxEYpvWYMxWOW0XO5UXO=mJx1e=tWeXOUUWxwq=YNvWxRq=Os0=b=mWxvmEtNvWl=bJbwPEOp1ESsAJ0WDWbpb=t=UESwD=ljUEOMx=lJ6EOMxExweWbRPExpmJYjmEbJxEl=UXSW0JYi1WtNYWSE1ExR6XO5bWbpbEx=1EYNbEOsxJxuDJlWP=liUExpbXSJeXluAJ0R/XlJ/J0sx=OpmESpm=ORPWt=YESWDXOpmJb=1WOvvWx5UEbEb=bvYWOFqEtpvXOHYJbs6=tjb=bFxXSMxWS51JSwQXSHYJSu/WlW/ESsQEOJe=YM6=S5UJSF6=bMxWSw6ExvmWSWQ=livJbNYWSiv=OGx=OsPJYjYJ0ibJbu/=t=YWxM6J0MQJxJq=ORAEtJeJSwxJbWeEbRQ=OwD=bsD=bNbEbjvJbsAEOFxJ0RDEYsPEOu/EYjmJlNYW0=UXOMDEOW0XOH1J0JAWxJ6EOpUXlEYWbMxWbW6Wlp1JxsAW0WPJbRqEtR0=YM6JSW0JSMq=tWQWtMq=SFDWOsQ=OMx=tRD=YW/JSs0XOw0EbF0E0MDWxM0WOjUXOJQE0jvJ0R/WYs/JYJ0XOWDE0RQW0p1XSimWxM0WbMDEl=bXlEYXtR/WlEUJxGDJxH1JlRQEOiYE0EmWbvmJbE1WtW0JxFQXluxWlJeJxWA=tEmXSjYWlR6JYNUEtsxJSjYJb1Q=lWAXSR/JYJe=OWDEbHUWYuDXtjmWljUEOj1WlReESH1XlsAXSvbJ0WAXS5YWSHUJlj1JbuxJluDEYJxExEbWxuPJbw0=tuPW0p1WYJ/Jl=UEOp1JYWQWYs0JbWAJxE1Wts/JSFDEx=UW0jUExJPWtjbExNYJSJPJ0R0W0WDES5mElRDWbWe=b1xJlWDXOG6JbG/JbJ/J0u6Ebsq=SMqW0JPWbEbXS5mW0jUEOWAEONbWbM0JSFxWYiY=SjYWxsDJluqWSuQJluQJbUU=Sp1JSsqWSRDXtNvJxvUJl=mWS16WSU1WbJ0EYNmEbF/=bR6EtjUExMxE0M6WOGPJSRP=lWq=b5UJxFAJYivExw/Exwx=SN1ExNvEtRAWOMDWYsDEORDWSpbEtu6ExsQWtsxJbMqWx1D=ts6WbJDEONbESH1E0RQ=bJ/=YRqEYJA=SEvWYWqXOjbEYJeJbHbWOWqJb5bJ0u6WtjbJlMqW0MPExuQ=YjmXSJx=SEvElEm=tMQEO1AWOs/JS10JSjUElW/WSUv=bFP=tseWxvbWtJQW0sDEbvUWO=mWOpmXlJqWSuPJ0MAJxHmWb=UWx5vXtjUWxU1=SvmESwQEYRQWYW6XtMPESvYEOuAJbNUEljm=OWqXSvYEbFeEOFQEtsDWYpmXSuxJxpUXSHYXtpUXtjb=t=mESGq=OFqWbwx=bw0XOHbW0p1EbH1EOsPWOsDWOwPWlW/ESFeEluxWOvYXSFDWOGeXOJ0EYRPWbuxXtuQJxiU=OJq=ONmJYEvES5mEYsqWOjb=lWxEOWA=t=v=ORQ=lpbE0sPJYpm=OpvWbGxWxsAXSsAWxsP=bGDXO1xES5vW0jm=SU1WY=v=OpU=buQWtJAEbpUXtpbXSRD=OMAW0MQJS5UWt=mJSjmWtJxEtu6XtsxXlsP=YRqJlMDJlJqXSux=lJqJlsQWYNvE0WDXO1A=tJ/=S1AXSWDJlRPESF/=YMeJxF/W0W0XtJ6XOEmWSvv=bW0XljmXts0J0i1J0RxXSEm=YM0=OWQ=OuAE0WQWtuqJ0s/W0MQWlWQ=SNYElu6XSMeWlEmWOu6=b=mExM6=OMxWlseEOWDEYW0WbuQWxJ/EOFAWbWqW0EmEtJe=OWPEOueXlpvW0R6WO5Y=O=bJSM6Ex1qXOMxEx1/JSu0EOWxEO=1XS=1XS5b=SsAXO=vExW6EbWAES1QEbMAEtW6=lMeEO1Q=Su/Wtj1ESMQJxGeEORQXS=bEYpYWxpv=SUbW0j1EYjUJxHb=YuAESJ/WS5bWOH1JbW/JYRxJSMA=OMqWSGQXSUYElWqEbMDXtNvJbN1J0WxXSseWOu0ElMAEbM6WbRQXSH1WSRAExG0Wts0EbMDJxvUElWQEbFqJxNvXSwqE0NUWljmWSEUXOW/WbEb=YWQE0NbWSweXS1eEx1qWYNUEOM6=YMx=OwDJSM/E0R0Wbs6=YMqEl=bWOR0EYEYE0NUJbJDWbGqEOuAWYW0Jx10EbMQESNmJYuqJl=vEbNvWtjYESu0WlpmXOFAWxH1JSiYJxj1WxMDEb1xW0MDJSjYXlEmXlp1JlJeESRe=lsQJxF0=Yi1WxJxXOGDWxHmE0s/Wx5U=l=U=buQElEbWS5mJlR/JSw/=S1eESsPJxwqEOpYWSGQ=OUYWOHmEtJqJ0Ev=ONYWb1DXlivExJe=Su0Xti1EljUXSHvWOsDXt=mE0pmXOE1=SUYWORxWSGe=O=UEYJ/W0seEbwPJx1Q=bF6WxHb=O=YEbWA=YWAXSUv=lJqW0WAESR/XOs6XlWA=bR0XtNYWOR0=tW/WxjUESi1XSF6JxuAElW0=buDJYWP=YuDJYiv=tsAEtW0ESNv=OwxEYEUExR6Jx=1ElW6EbWeE0M6XtMAEt=m=S1/=bsx=bueE0RDESvUJxRAES51=SivWts6WSuPEYuqXtEvEtNvXSjYJbuq=tNUWSu6WxM0=SRqElibJbMPEOpv=OiYESRPWSw/ES=bWlpvJb1qEOU1JS1eEYMPWtMDJ0sqWSpYWtpvXOMqEOjU=YWDJx51=Yj1WYJ0El=vW0=Y=Ou6JbFQWOsA=bWq=YWqXlNbEORAEbRQEtsQEYRAWYsqWlW/Exw6=b1DWbu0=OsQW0RqEOivJbWeEtMDXSMAWYW0ExjUWxH1=bsPElNvXSw6ES=1JxMqXOiUXSHUESpmESpYEbweWSJqJ0pYE0s6WbMxESReEbGAWxw6XtRqXOuPJx=YElReEYEUW0MxEbG/Wbvm=tRxXSHU=OWQ=SwxJxNbWSR6Wb1AJxwPWSUbWSsxEOR/JS1PXOEUJYsxEtJAExjYJxvmJbGPWb51XOuQWSFAWxwDXS1AWSibExM0=SwAEliUWlR/JYu6XlJxWxMAEYiUXtJPWSGqW0MDElR/XS5vJSW/XtReXtuDWxse=tWxESWQ=bFQJSjvWb1PJ0RAWSsAXO1qJSiU=lRq=t=UJbW/Wx=1JYRDXOM6XOueXSs6=Ss0JlMAWYNv=OwqJlNvWOjYW0RPEOR0WOuQ=tMxXSs0XtueEO1AXSF/EYpm=bJ6XlJDJSEbXOW/WORxWOvYXOuQXtNmWSWxWOwe=tuA=OMAJbWDXSwQEOuAWb5YWx5UWtu0ElJDWbEvWOHYXtEvWSEYWOJP=tueEx5YJbimJ0JDXtj1EtsDWbUmWOibWOsQXO1QJx=bE0JeWbG0XtsDJY=Y=b1QJxGDWbjvWxueES5bWbMqWls0WYjYWlMDWYEYEOvm=OwxEluxJbw0ExvmJSEv=OUmXlEvWSWxW0JeJ0Mq=OHYXtsAJ0JqE0pvWtEvXOJAWb1eES5Y=b=vWOG0=YJqJx=UWS5U=tseWOsDXlRQW0JqJSFxXlEv=ONUElNYXOsqJlsqWtuAXlM6J0J6XluxEOsxWOG0WxvbXSWeEYRxWbpUEbMx=lJ0WxR6WbEvJYR6E0WxExw6JSGQEOJPWxs0WSE1=SReWOi1Wb51WtWAEtWqXS16=OM/EY=UJSu/J0u/WOvvEYEvExJQESJx=SueEOFqE0RQESwqEljvWtWqWb5YEOiY=SHbXtuD=tN1W0MeJxpmJbi1JYi1ESimXtuQ=OEvEYEY=YjUES=U=l=UWSJPJ0uq=SF6Wbj1XlsQEbU1EtWAEOpYEb=Y=bJ0=YRDExEv=SR0JxFPXlueEbuqJSRqJS1QESu0=SN1EbiY=SivWSMQEOi1E0ibExsQ=OjbWtM/EbsQ=OuPW0RAExvYWSjUESFPElNvE0W6EYjm=lNbJlMqW0=bJlNbXSHbJbUmEO1P=bJ0WOGQEx5vXSR0=SuQXSFAWtW6JlNUEtse=bwxJb1AWSUvElJ/Wtjb=Sw0ESW/XlJ/EbMxEOFe=SiU=t=mE0WxWOF6EYEvWYjv=bJA=tJxWbwqEbwAWYiUXSR0ElWQJYW6ESuqE0NY=YWxWlEmESJeWSMq=SRxESGx=lRPJSJQ=S5vXlEvW0MP=b5YEbEYEOw/=O=vXSWQElMA=b1/=SwPE0s/WbJ0JxEbXO5vEbuq=S10WbJ/WlsPWSUbEbGPEximJxJAWtNYEO5YJbuDXONbJYWPXSsAJbux=bw/EbwPExRPExHUEYM6ElE1EYRq=bNY=lEbJlu0JYNb=SvbXt=bWOpmJx=Y=b=bEbFqESuq=bM6XSJ/ElNYXlux=OM0WxFDJbJeWlMD=bjv=SuQWlMDXSwxWxpYEtpmJxFqEtu6Ebs/ESFxJSRqXOvmEbWeWOW0EYJAEbib=tMDEYRQWYMAJSF6JxGDESjvXOHm=ljYESFAWlMDJSNUExHUEOGP=lM0E0p1JSWQWbJ6JbWe=tuQXOM0=YNvJb1eWxw6EbjYWSMQEbReJbvbEYJAJlM0WOpmW0uqWlW6ESM0Wb=UWSjYWYMAXS10JxR6EOR0ESWxXtMqJSE1Xl=UJlMP=bu/=Sw0JYiYES1xJSpm=SsD=b10JxvUJli1XtN1WbR0EYNUExW/Wx=v=SWDE0WqXtMq=OEb=luqJ0s/JbGeJbEUJl=YXtMqWSs6ESUUJSuDXt=YJlpvJxFeWSvvXtReJlsxXtuDWtimWtuqESMqWtjYWbiUWOHmESwPJS1/E0uPJSsPXlNmJ0MxJSMDJbj1JlNUWS51EOUmXSEUJbvmJlJQESvm=YRDWOpUJbwAEOsxWluAJSsAJxF/WS5m=YpYXOHU=ls6JxvvWbw/=SG0=tE1ESH1=Ou0EYEbWtJ6=b1A=SWPJ0uqWbE1EbWDESuQ=tJDWlRqEbuQJxWP=t=bJSWPEb5vWx1xJbU1JxRQWtMxXS5m=YJPXtibXSiU=YsqXOsDWSWxWxUmXSw6WORDWSpvWtjm=Ow0WxHvE0s0J0=YJxuP=lMDXOuxXSRAWSi1=lW/=bGD=ljUJbGxWbNUExuQXtjUJSsQWOs6XO1AWOivJbNbWxseJxueEbuqJSGPEYJAWbWDJlJDJxMeESNvJbw0=SjbJbWxWSF/WS1PWtu0=OvvXS1DWbNYJlivWtWAXS16EOHYXls0EbwQWbEYJx=UWSj1JYi1ESJ/EbMAEOJ6=ljv=tNbEl=vESHbJxFeWbR6=lsPWYJPESuDXtRQJlWxWlsD=lEm=SuAExRAEbWQ=SFDESvbWtpbJbM6ES1q=O=1WSMqWSEmESuQJSwQElW0=bvmXOsDWORD=O1PJxs0Ex=vWl=UJSHbXOEmWSMxEbFxESwQEtjb=Yjb=tW/WlibEO=YWbNUWxivWxUmJlsqEtJxExM0=bEUEYMPWSwAExueE0uqJxHYWYs/=bJ0JxE1=OF/WlivESM6WSM0EO=YXlj1ESj1EbR0JbRxWSvvJbpbWxNvESGPEb51JYM/=tuPEOF0=O5m=O=1EtJ6Xljm=YW6=lMDEtu6=bvUEOs0Xts0=bu0=tNUW0uPWbN1WSG/WOHbExE1JYR/XlJQESRPWYjYWOWe=OJ0EbseWxU1EOReWtj1=bW0EbGx=bJPXOUmXSwqWYMQElseEOHvJlsPESWqWSUbWOiYJlMQ=lE1E0M0=YivE0pvXtjb=lNY=bNUESwDESwDEtuxWxMPWYiYESvY=bRDJlEb=buPWOMQW0uDJlp1EOFqWlWqXOMAJYWAES16XlEvJSJxWbuxXS5vJxFeWx5YWO1P=bivWOE1WSiUXtsqJbF6XSGPESR/W0jm=Ow6EluQ=SGxW0JA=YJPWb1DEbvUJSweJxMQEOFe=SM/XOjvWtJxWOGAWb=m=bMPXOJ6WYRDJY=b=SWP=OjmEOJeJbMxJSJqXlue=bJPJbGPEbF6XtNmWbEUJSMPEYMDEbi1Jb1AWYs/JbEYWYsxXSNbXO1/WYMeWb10JbvvEbibJSsx=O51=tW0=lNUEtEYWbNmEbW6E0Em=YEbXOvmJxMA=O1PWlJ/EOweWtMxWxjbE0WxEtseEtimESJeWxWqWSuA=OFQWbF6EOjm=bJeESWPWSvmXSjbEtJ/EtReESHmXtJ/WOpvXOH1E0JqEOM/JxRPXSM6WbF/Ebu0=tRAJS5vXOsDExuPWSW6=tWeWOFqWSRQExJA=bjvE0MPEtueXtMeE0NbElWAWbEYXtsxWYueWS5UExvbJSwQEYuQJlWqWb1xXlEUXlE1Jx1eWxMxEtjUE0pY=lJxExRAElWqWYibJxp1Jb1eEOG6JYEYJb=bWSFDEbMAJxvmEbUvWYNYW0MqJYW/XtJ0EOueWOpvWxMeJ0R0EONmEOUY=bG6JlM/EONUJSjvJxGxJbivJxs0JxpU=b5bJbpbJ0R0Ets/ElWeJ0=bW0uAJlNbW0ReWOwAJxvm=lJD=OuqExGPJxsPWlMx=tReWOHv=Y=m=S=bElMeWlReESivXtpvJYu0ESNm=Ou0JbweWS1xXOHUJ0MQWtuDXO1Q=bWxESEmE0Nv=OUvJ0M/E0J0=OMPJx5YE0ibExR/Xt=1JYpvESp1J0=bExRPJlReXONmW0Je=bibJ0u6J0pYWxjm=S5UWOpvEtN1WYuQ=SWxEOGDWS1DXlW/JSNvWtWxEbimESv1WOMAEbv1WSNYWSR6EbimEOM6EOvbXOHvWSjY=bWDWtJ0JSwxES5YEtuQWYWxJlWQ=SwqEb16EOEbWbw0=lReXSEmEluqEtNYEOi1=OF0=tuPWbse=bpUJ0WxJYjUWOUbExMeEtsq=t=b=SRPJ0WPJ0=1=SiUESF6WSsDWtJPWxM0WxwD=bJPJbpbWYjY=tNbWbGqE0jvExReWtjbJbW0WY=mWbEYXSM6JxRQWbW0JSGDXOMxJbivJSGP=SMqE0NbJSJPXS1DWbNUExM/XSJPXOWA=Ss/WljvWxJQWtsAWYpUXtu6=YpbWSWAJYNU=lN1JxJ/XOue=libEO=bJlJqE0Jx=bEY=YNUXtMDJbJDJYseXOjvESue=b1DXSs/XS1AEYimWxF0ES=YJYNU=b=bESJPEtsDEYMQWtR6=l=Y=b5vXlRQJxsDXOwxEO1e=YM0EtMA=lRDWOJxJl=UWYJ6WYNbJbW0JxpY=tWDEx1DXOJDJSwQEtWD=OW6Jxp1W0RxWOGQJYM6W0EUXOiY=YWAXSWDJS=mWxsDEbW6=tNvEts0JSvYWtuqEYEb=bj1ESi1EbNv=bj1=bjbXOu6WSuDJSR6XSuA=bsqWlWeJbMQWbGeXOFeWYWPJlMeWbRqXOjYWxH1WtsAEluAWxp1ESGx=tsDWb=mWSFqXO5U=lJ0EYuAEOvvWxueEOJq=lWPWSMxWOMQEtJeXtMQ=YiUJSR0WS1PExj1=YuqExHbWbjmWbFxJlj1XOuxEtEv=SMe=Su6WSEbJSFPWb5YEOwqWlWAJxs0XO5b=OMAJxRPEYR0WxJqEOEvJbs/WOR6WxM/=SvU=SpvWxG/JYW6JlR6WYpmWbsAW0WPJbEbJxue=tR/=bjbEOUbXS5vEt=mWOJAXls6J0MPEOHmJbW/EbjbEO5vJbGP=OHUXOu/EOsP=bJ0JxU1WxUbWSNbWYsxWS=bESMPEtsqEOsQWlsqJb=UEbjvJbpbJxUYXSHbW0JxWtivWSseEOUvWbwPXtp1ESu6ElpvJxJ0=OUvJSNmEtM/EbsQXlJQWbM/JlRPXS1qExW/WxNvXSNbJSwQ=OHbXts0Ex1xJbF/JYivESpbJxG/=YW6=bEbESHvWOHvElpUWlRP=SpmJ0s6Xtjb=lReJluPWx5YEtE1=bj1JSUbWONYJxFQEOvUWOUUEx10Ex5v=SR6ElN1=SWxXOMqWx=UXSF/Xt=1ESUvJxUYEbW0Jb5UWSGA=OwAWYpbWSs/EYsPW0EbXt=vJbsQ=OuDE0jvWYMeEOu/EYi1XtsxWtRxXSu/ElMeJYsAWbJPWYuqEO=YEbNUXtWqJSivWxsq=SHU=YMqEOGQWtRQWSFP=bw6Jlu/EOUU=YJ6WYpUESNmXOsqEbFPWbsQWxuAWOGqJbEbWb5vEYMDEbJQ=bwqWlRxXOvm=Ys/ESGQESMqExWQESvvWSFeWOwPJbW/=Ys6XtMeExWQWtjmEOWq=YMq=SUvXOFQWxJxE0RqWxwQEximXSpUWOHbExpbWtJeEtiUWOvU=OF0XO=mWtMPEYJxJSGDXOwDWb5Y=OFQXSMAWOW/=YueJS1DJSsx=bsPW0=UWxwx=bjmJYuxJ0pbXlpUWtuxEtsxEtuq=tiUWxRQExGDExRDWxweXSp1JSWQE0pvWtuDJbF0JYibXOjmExuxWYRe=SsDWOJ/=tueXSGQWbWqWtWxWtj1EbHvEOU1ESRDJSMqXlRD=SF/=SHmJYRAXljbElM/Wx5U=bGQES1PWxvm=YjUEbFAExjb=OjmWlj1ElibExFe=OMQWbpmWlWDES5UJSEbWSjUESFQXtsDWx5mWYu0JbjUJlJeEx1qEOG0WlWDWSR0JlR6Ex5bWYW/JxEvExUUWximJYim=SGAXOJQXSReWlJQEtJ0XSseXlRqEbHUJSUUEORDXSwDWxjmXSsAJY=mJxRxEbF0WSMAW0uqWOWqEYJx=YJe=SvmWxJDJYWPWb=UWSMqWbMq=ljb=SsqWlJ/ESwDWtEv=ONUExwx=bpUEtuDWbv1ESF/EYR0WOGP=luQJSFDJb5bJ0sPWtN1XSi1WYj1=Ovm=tJDElEb=SRPWbGeElMeWlJDXtJQWtsAEx=YEYuqExWPWSuQWxwx=SjUE0RxWYMPEOWeElsPXtMQExseXSs/WY=vWlWP=OWxWSNUWtR/WOvbXSRD=O1AWlW0=YimXOimJxFQESRxJS=mJbHbWbJAW0jU=bG/JbWeWbpbXSJQXSvvWSM0WbjbXtuAWtWx=Os/=bjm=Su0Ets/=SW/=b1/=lpm=YimXtNvWluPEb1DWbFQWxW0=lpb=bRQXSR6WxRPJS10EOWP=Oib=bGQEtRP=bJA=YJxXluDWSReXtJ0JbimXSMAW0jYE0p1JSsAJbM0W0pY=bM/=OF6Et=vJlsqE0We=tJQW0MAEOuAESFD=Ys0=tWAXSWQWtibXSWP=SMQWON1ExFDJYsAWYsxXSJ0EbW/WSuPEb16EYEYWYWeWxu0ExRDWONm=Ovb=b5YJS5YWlJ6WxRD=tJAEbWQ=Sim=liUWOsP=bUvWb1eElJAXO5UWlMAWO1QXlWD=lJ/ESHUJxuDXluDEbRDESu0Wljm=SF0WxGP=OMAW0s6=S1AEbUU=bsPESEYESNUXlM0WSNbEtEUJbEb=lWqXOUbEOG0=SNbExj1WSs6WSR/=SM6=SMqWliUJYjmWS1eXt=v=OwAJxuxXlR0WSFPWSw0XtJ0Jbwq=O1QWSuxWxEbXtNYElNvJYWQJSjUJluPEORD=Ow/WxWQE0MP=bEbXOE1=buxExux=bWqEOjb=SWP=ls/EYj1WtjvJxF/=tRD=limEOFqXtJAESJ/=li1EbMPEOiU=ljYExibWYEUJbM/EtRQXOsPWYNmWlEb=SuPXlpbJxjbESEUWtEmWbG6Jb5vJYN1EbGAWxiY=bwxXSw6Wb1x=bu6WYjmWbU1ESF/JS1eXSJ/EOWDEtMxJlpv=lpvW0E1=OGAXSsQJ0uxJ0j1WxNUElRPEO5YXO=YEbuAWxpm=b=UExEmJxF0Wx1/EtpvW0M6=S5UEbs6=tsqEbMPExuDEYEY=SJPE0MeWSFqXlWP=SWPXSJ/XOjUWSwQWSsAJSJxExHbJ0JxElR6JxWP=tjbEtJAExN1EYRPEbJeJSNbWluQXSjbEOpYJxwxW0MxWbwQWYN1=tMxWbGeEOMqWOGAJbF/JlJxXOJQXtW6=SReEx1xWOGAJxR/XlM/=S=vW0R0Wx5UWbJQJSpbEbG6JYi1JYEbEbpUXlu6Eb5Y=SMxW0pmW0EYJxj1WxpUJxMDJS16XOuQJYu/ExjvWxRx=SHUEYJxXtWx=OW0W0pYXS51XOu6EYE1EOFqJSFqJSJ6JSjYXSWPJSuAXlW/=Ss6Ebs6EYuPEbwQXSwPXSMPESwPW0NbWOuqWbu6XSJQElibWtR0=YWPWbjUWSUY=Yj1J0jmJbW0WtRQWSuPJbvUWYjUJSNmE0iUXtuxWOJPJYs0ElMA=bRQJb=bE0ivWOi1XOFxWtuQXtRxEtJPXSsDJYim=lReWxWP=OvmElW0ESHbE0pmJlsPJYuQ=tj1JSF/EtMQE0EvJ0Em=SGQ=lJD=OEYWY=UEOH1Jx51JSU1WxGeW0uPJ0MAJxsAXOM0Wxu6WSR6XOGxXljYWOvmJSweWYMqWOF/Wbu0ElseWSw/ESR/XORDJYRAXONYWxE1Jxv1WY=1JxGxEt=mEOu0JSiv=lu/ElE1=YjUJxw0=lpb=YiUEYM6=YW6Exs6=lR6EYsP=SWqWljb=SH1WSw/=SGx=bGQW0JPWtu0W0=vEbFxWOs0EtsDEluqExuAXSWQ=bGDJluPWt=1XtR0Jx1/Jbpm=YsQE0MD=bWD=YJP=SMAWtNvJYEUJbR/WOEYWYE1EOE1J0MQ=lEYEbUbWSHYXSpb=tEYWxu6WbFQJxWxWb5YWlMDWY=mElW0JbvUWxueESG0JbJ/WbEmJYMeXlWqXS5b=bWqWbG6WYJQWOiU=bFeJSEv=Yu6WYs6WYpU=SHbEYJP=bNvExJPWSMeXSG/XOJqJ0MD=lEvXOUY=SWP=bw/WbsQ=b5YWSU1Exp1EYJAXtJeWONvXlsD=SHbWt=v=tNYJbRPWbR0Xls0XOu0XOUYEOjUE0EvEOJQ=lJqWS5UElNbEtuPJYsqJSsPEOwD=lp1=Ss0=lueWbFAXOF0XlJ6Jbw/Ebw6JlMP=Os/EOuPESuxEtJ0ExvmWxJPEtNUE0R0JYReJbRP=SRxElJP=bvb=S1AEbuqJlibJYpbXtMAWOUYExuQWx51ESM/XOJe=SNmXS=YE0JPWYsQESW/WxNYEbJQJSMeXOFq=SWDWtjYWOwxXOw/Wx5UExMQ=tsQXOEvWtJQ=OUmE0sxEYu6=YJQ=b10XO51E0uqWbvbJbJAWSRPJxjv=OJeXSJ/WxGPEt=1=bwQJYEbEbUUJSF0XlJ6JSWQXlM0=SWD=SFPEYsxEbseESvbWxp1=YR6WOivJS5b=Y=vWxRPWxueWSvb=tu/W0MD=OJDWxN1EOR/=tNYElWPWSuPJxsPESReWYsA=OwA=SuDJx5YWY=YEbj1W0i1EbNUEluQW0E1EtEUJYiYE0imESJPWYWDExGA=YM0EbMDExiYEbMPEbRQJYuQEtM6ESW/=SsP=l=mWb=1XlimWbMqJSwDEOvvWSwPJx=bJS5v=bEU=tWxWbEvEx5vXOGeExFqXSNvJxHvJYM6ESvvESjvWSuqXSwDXljm=SMPJSu0JYJ6=ORPWbMqJYJA=bM/WS5vJlJqEOueXSsD=bFAES=vWxF6Wb=1JYWq=OEYESsxEbwq=lReEtMxExvYWSFQ=O1xEtseXtp1=Y=U=S1qXljmW0uAJb1QJbiUExivJbE1JxJ0WS16JbRxWSueE0EUJSGeExJAEOpvWSJ6W0EY=tjUJ0pbWb=mWSM0=Owe=OWPWxJD=S1AJSEbESsA=tsAEYuDWb=bEx1DEYpbExivJYRe=b1xJbu6ESFD=b1xWOi1WxjmXts6ExwQJljm=tJe=O1DJx51WOweWbF6WlN1=YEbXl=1Wb=bWSsqWYuxJbj1=lEm=Ow0JS5YElEbJSvbJluAWtpv=OFeWYsqWYJqWYW0WtWP=tuDJx1DJb1xJ0j1=YWAEYM/ESuqEbWxJYMQElRQEO1QXtiY=tpbExJ/=bwqEbR0EYR6Xt=bWlEYWOJ6=bFq=lEvWbuqWbNvWtiYJbuPXS5v=YibWSM0J0Nm=lsDWOs0=OiYWlMAWYi1WYWe=ON1EOW/JYjbEluxEls/=bvm=tWxWluDESGDWSJQ=tR0=tWD=S1QJlJAESsPWb1eWOuA=tNvW0MA=lJqWYMQ=lR/ESuAWSuxES=UJbFPXls/EtEbEbw0=SimWOR/EYJeJbG6E0MPWxweWYuQ=OMAXtMe=ONb=YiY=l=v=SwPW0R6=OH1=bseXtEUJYimJxJeExHbEx1PWYEU=lWQElp1WOWqEOHbWOsQJ0=vJxRxWORx=YM6WbFe=OMxJSMxJxMPWx5UWbue=OHYEb1xJ0sQWlpmXlJxEYRP=bsQJxueJSjvExR6EYRAWtWqEljYESsPWx1qJxNmWlimJS1PEYReXtJ0WOuAJlp1=YiYWxs/JSGQ=lJDESNvXSNYEYjU=tpYWl=YJxiYWbpYXtR6WlMQWxw0XO5UEbjYEOvvEOWDE0NYJxiUXOM6ExvmJ0=YWSN1EYiYXlW6=tW/WbJAESWq=liU=bWq=YNUWSib=lu0Wx1/WtRDES=1JS1P=Sw/XtMAWO=UExFD=Su6Jb=YJlWAWSFAEOF/EtJqEbsDXlEUXtM/WluAExUvEx1q=OsPE0RPEOG/XlR0JYMxJYMAWYRxExpb=bJeWtMQEtNYXOWPWxEbWlpmJ0=1EbuA=YJAXOF0JxFDXtWeEli1EbWeEbFPEbwx=tMeJbR6WSNmJxWqJbjYJbWQWYsqEYR/EO1PWtJ0WOwDJbsQXORPJx5mWbMDEOR6=ti1=b10JlibWbUbEYjmW0R6E0jUEx1qE0N1=tuPXO1e=ORDWljUJSvbJbRAXSjYWxMqJlMQJxUvElEbWbwqEOw6WbRqEtuQWbsq=bUUJ0MPJSwq=YWAESv1EtWDJx=1WSF/=lu6XtJPJxG0JSjvJb1AE0=1WOHUWtiUE0=1JSiYXtEbEbjvWtNv=Su/JSWqWOwDWxFqXlEmESM6JxFxWYW/ESJPWljUWO5YXOsAWbRqEYW6WSG6=Sue=tivEYsq=tpUElNv=OsPXOJ/WlMAJlJAEOF0=OsPESF6J0R/=lM0=SF6ES5Y=YNvExMeWxMqEbwxJbvm=bHmElW0WYsPJbWqXSwDXOWAEb=1ExW0=bu0XlsAJSuPWSp1XONUJYEY=OEv=YRqWlMD=SGPEl=vXS5UWSWeW0ibJbsx=b1xJSwQJb5vXSuPJxv1=SG6JxpYJYueXOFxXSJx=OF6EOWAE0RQWOjYJSM0JYEv=YJAJ0RQElJx=OueJb1/XOjvW0WxWSiUWSWPEbRDEOuPElJPElReWSwQWtWqWlpvXlpU=lu6XOjbXlJ0ExF/WbNmWx16WxUmESU1WbG6ExFeEOJ6WYsQJbpvEYRAEbFPWOsPXSwxJSRxXts0=buxWtsD=t=mJSJPEb10=lRxW0NmJSpYWxGxWSWDJ0R0XOUUEtMPExR/EtsP=SRAJSWeExwDJbJx=Yj1XO1q=bNbExReXSG/XOGQXSF0=tRA=OGAXS16JbJPEtp1ExwxJxJqEO1DWbW0XtMeEbJ0ESvUJ0RP=lWQESjUXO1e=SR0Elj1=bWPESseJ0sA=YjYWOG6ElJAWYp1EO10EbUbWSpYWbvYWxFqJxEYWtEYEbibWljmElp1EO1qJ0=UJb1xXO5bExUUEO10WxMQJx5vJSReWSGe=S1AWtsx=buDE0j1EOGPEb16XOGPESEYJbuQJ0R0XSM0=buDWYWxESRAJYRxJxMx=tsP=tRqEONv=SRQ=SM/ESw0J0sAEbFDWY=UW0s6EtRe=SReJYpYJSRD=SGqWxJqJSMxWYsDXSGeEOjmExG/=Yp1WtsD=SReJlMDJSsqJbjU=SR0ExW6XO=1WOGPEbMA=bMq=YpY=tiUEOs/=Svm=OJ6=OFQExp1=SGQ=S1DWSjmJSpUXSvY=SwPW0MA=luDWbGx=lsQE0sQXts0JlJ/WtjbWxM6EYuxJlpvXS=1XtWe=bJPWS1qJlsAJbvUJlR0Wx=1=Y=U=bwA=Ys/XOWPJxJAJSGqJxvYEbwxE0pYEtEUElu0=b=bEORqEO5bWxF/WOMPEOw6XSWA=b1/JSGeXS1eWONYXOweEbHvWbW6EbimWx5YJlpYJ0u0Wx5YEOsDWbMD=SjmJY=YJYJqJSHYElM6EtWDEbpU=YsPEbpbJx5YEtiUExsPJxR/XtNYWxv1WOUbXtW0=ORQJxHUEbR/Jbvb=S1/JSHbEbJPEbu6JYJDElRqWlW/WxuqElsPJlJDEYpvWbG/WtWA=bsQ=S10JbuD=SweWYRPEOs6ESimElWe=O16XtpbWtp1EbHYJ0u6EbGDESMxJbJxXlpY=SM0WxWQEOGDJxWeXtJ6=S=1E0W6W0s6J0NmEOJ6=Yi1E0jbEx1qEYWQWYE1=OEmJYuqESJAXSFQ=S=vWOMPXlEUElWPWOsPWbReW0jmJbW/Jxs0=tJQ=YR/Jx=vWOp1JbU1=lMP=O5mWbNbEljUWOW/JS=UXOpYXSRxXS1eJbsq=tE1JxR0Ex1A=OiU=ORA=bGAWxp1XSU1=YMAXtuDJbivWOvU=Yiv=bMeJlWPWY=YXOu6JlseWtRPXSM/WtWPEO5U=bseXOiv=O1AExHbExEYWSjU=OMqXtjmXlW/WSNvWxi1WOu0EbjbJS1AJSM/WOHvJSJxJSMxEYJQ=Su6XSuAJ0u/XSUbES10=O1DEbNYESM/=OWe=OR/Wxu/WlE1XOJeWYibExEvJ0RxWOimXOsQWSM6ElJq=YMPEYEbJlR0WYR0XOueWYJ0JS1eXSG0=lsPXSw6ESjvESJQJlu0JY=mEl=1JSRx=Yj1EOpm=S5bJlpvJYJD=b51WSEbJbHvXSG6WtpmJxvUWbim=OG0=OvYEOW6WtMeJ0JAXSFQExuQ=ls0Xtu0WYuP=SFDWx1DWS5vEtjY=tpY=bu/=YMPJYEvWOWDJbFDJxpvJlpmEOpUXOMxXlj1JbivXOFQExjv=tEvEOWe=bJeXOw6WluA=bNmWx51WbM0ESMxEOFQW0WPJ0pUJSG0WbMeJb5vWtM6E0j1WOWq=SsxEbRQESJ0ExsDWxu6JSGAJbUmJSRq=biU=bGD=OM0XSRq=OM6Ebu0=timJlivWxEmJ0jbEOHUEYWe=ORPWbiUWOGqJxJ6EYs/=biYXSJxElEb=OMqWbJQW0p1EOwQXtsP=lW/XSJ6ESRQJxvYEbUm=OFA=lMeW0ueXtNY=SG/EYueJ0ux=S1xEO1xEOMAJlM0WSNYEbW0XtMP=OEYWOMqEx5bEYjb=OWQXON1XSuqJYuQJxUUWYsDWxsxWYNYJlMQExR6XlNYEx=UEbW/JlJx=YjbXORP=tNmWYi1WbjYEbM/WbFAESvYJYNbExRA=O=1=Swx=b5UWb=mJlRxXlM6E0J6JxuQWxvUESs/EOpU=S1DE0u0Xls6WlJe=tW6JbGqJYReXlRxExiYEOJx=b51Xlj1EbEvEbJeWYWxEtW6Jxw6WSGAEbvvEtsxElRA=bwP=ljvEYp1JSFqEYWPEbMQExRq=OuDXlW/WSGxXlsQWtJxJxFD=OH1XO=mJlWeXtsQXtE1JxH1WljU=SJAWtp1=SJqExHbWSJx=OU1ESJD=lR/WOvUXSHUXSpmESUv=b1AXljUWb=bEtRxEYpmExsDXS1QXlJDWYsqJSNUJSGx=YuPWl=v=bw6Elu0=SUvWlsD=SUvElN1E0=mWOjY=S16EYj1=OMQ=SMqWYM/JYR/XOWPJYNU=YWQEtRDEOJP=YJqJ0uQJYjUWluxEYW6J0MeEbMDEbvYXOpbElMQW0WQEYW/ESWDWx=YEtN1EOUUEbvm=l=b=OWQJSwD=bRqExWD=OHUJbu6W0u0ESi1EtN1JSuQExFxEOJ6=buqJxUUXtu6Jx10EbwqXt=mWtNUEtWxXS1eXSHb=S1xJlJ/WOpmWONUXSJQEbGxXlRQ=SM6ESG0EYWDWlMx=SjvJYMPJbjvJxNbW0J/EY=1=YuqWtsDW0uPWOMqJYJ/XSMAWbUbW0WeESv1JYEUJ0s/E0sq=Sw/E0sDWxJAJx5UXSRDWSF0E0NvESWA=bJe=tEvEbWQWljm=SG0XlimEtEbWtRqXlReXtEmWxRxEOJDEOUb=tM0=ORe=bpYE0u6ExwqJlse=bFqJbpUJ0Mx=SG6EYJP=bN1JxjvWSNUESM6WYNUExHYWYse=ONmWYWqExpvXS5b=tWQXSsPWxFAEOWDEluAJ0RDWxWeXlMxXtRDXlivW0j1EbWQ=tuq=b5bJlWDESHUEtseEOWQ=bJPXOw6XOEU=OUbEOvvXOpUW0M0JYivXt=mWxM/J0NvXSN1XOuqJSpYXlMxEb1QXlJqWxue=Su0ESMeEt=YWlW6W0p1JxwqWlueJlJP=tN1=O5U=SMqJSN1JSW/ESRqEtpY=Os6ExwAEbU1XOpm=bjb=OJ/=YsDXOHmWximJ0pvWxwP=lJQ=OMDEOM6WSvbXtWQWl=mJYuqWx5mWOJQW0RAXOU1JYsPESM6ElNUJxwDEbGeE0uAEYJq=SMx=bMeEOR/WOv1J0MQExHb=O5bWSR6WOFAEbibWSJQW0W0XOUb=bpvE0JDExjbWYM0XOu0=O=YJYM0WlNbWxJ6EYJ/WYNmJxJQXSE1E0ivWxwAWSvY=SE1Eb=UWxwPEOpbWSRxExMP=lR6ESM6Xtu6=lW0=OwxXluPWtJQEbuxXONbJYRqWbMx=bs/JSUm=O5bXtpmXSpmE0EvJSEU=bR/Eb=bXOs/JYN1EbNv=bFx=tNUWxEUJSF0J0jUWbGAJYJ/JSEbXO1A=SWeW0JP=SRPE0EbWYN1WOEbXls0J0RxJbGq=YJQ=SR0EbM0JluxWxw0=ORDEbR/WOjbWON1W0W0=bJeWbEUEtMQXtsAExR6EYEv=OwqES1xWSEvWx1QJSF6E0Rx=Oj1XSMqJlWx=Ou/=OuA=bjmW0NmEx5vWx1AJlWAWtuQJbJ0E0sDWlReJSwQJSMAJYMqExMAE0i1WtsAExFqEtMDJxib=bsxXlJeWluAEbW0JYsQWtNUJSuqXOsq=bH1XSR/JYM6JbWeXliUEY=vJS5UWxW/Ex5m=SuAExGxWSRQJxpbEbw/Jbu6JYWqEbJeEbpmWlNbJxvbXtNmXS51WluqXSMeJx1QESEU=b=YWSF6XOFx=bGQ=OvUWbUmE0uPESpUWtivJbFQESsDXSWAEOUU=S1eWxsAEORx=SWxElEU=bvmEtRDJ0imExFDJx5UWYR6JxW0JSF0JbGqWbRAXS=mEtEmWlMPWt=vXSjmW0JDJbW0=Os6EOJAWSGqWSW6WSjmJ0pvWS1/=YJPWOvmJSu/ExMxJxseE0s/WOwQWlMQJSJxWSwx=O5mExRDJYM/JxivEtjUXlWq=O5mExpUJSUm=SpUW0j1=bUbExsx=Sw0ElRAEl=UJxuAWljYXSRQJls6W0Nv=luQXOweXSimWtRD=SMAXtJ/WYsPJ0M/JYNUEOGx=SjvEYEmEOJPW0JxWOvYJxwDJxwqJx5mW0jmJYMAXOuQ=bv1=ONmWtMAXljm=t=YW0NYE0Jq=O=UJSRPWOvbWxG/EOW6WbpUExwqJxEUJxuxJ0ivWOUYJSNbJbjbWSJe=Si1WO=UExFPEOuD=S5UJSMqEtuxEtM6Jx10Eb=mElsxXOiUWlWeEtpvWtEvExvUJx1DJbHbJxGPWOwPJx1e=SE1Jb=1=SJ0ElMqWOUYEOwAE0M0WOEUEY=Y=lNYXOuP=tM6=bWAXOu/EYiYW0MDESvb=YNvEYEUJYEbEbNvJbG6WYJQExi1WSUbESE1Jb5v=lWqJS5U=tuxJYM/E0pvJbv1JSueEbpUEbF/JSN1E0u6WbpUEx1AWYseJYJ0XlWQEbRPXlueE0jvWbMxEO1QXOp1Xtp1E0sDJYW/=tRe=lEv=OHmJ0pvE0pYWlsDXS=Y=bvm=SJ/=lWAWbWeWtjbJbUm=OFDWtJQXOUUE0=1WbEbXOjm=ljYEbJ0=tJPES1/WlNm=bjUXSNUWxjvJSu0Jl=UXts6JxwAESFqWt=mWYNYJbHUEtiUE0=1WbR0JSv1=SFAES5b=liUXtiYJ0s6XOvb=SvYW0s0ESFxEYM0JYRq=tux=SR/=buQXOuPXtMeE0=Y=YEYJlRDEOMDEtMQWO=vEb5mESuxEluAE0W6ESseJluAEbvbJxW/XSs0W0JD=tN1WOu0JSG/=OU1E0i1WxHv=lJQWxRQEbHmE0W6XliU=Su/ElWAEbjU=bW/=SuqESweE0EUEOvU=bNbWSHm=SJqXOGAEtR6EO16ExsqWbvUXO10JYE1=YNbJbR0El=bWlueExNmWONbXOpvWYMAXSMPEOWeWO=UWOweXlMAEtWqJluAWxRDWOGA=SReEOG6JbU1XtpYWYE1WbReWYRDXtEmWxMAWbFqExiYXlpm=tsD=SE1WO=vJlpYWts/ESuQWbFe=OjUWxNUEYj1WtEvWxweESWeWxR0XSW0J0uxWYE1E0E1EbuQExF6WS=bE0MQEb5YEYNbJ0Rq=YRxJbi1JYsqJx1QEOU1WlRxXlW0WYWAE0EbEluAWbwqXSGD=SNUWlRqESiUJY=UWb5Y=b=1XlW/=bF6Exwe=SUbEtRqWYp1W0=1JSWAXSu0EYuq=YMAElRqWtseEOiUWSwxWOuDXSwPWSG/El=bEbwxWlN1XOJAE0MeExRDE0MPJlsQWxEm=ls/WS=mXSGe=lRqWlMeJbvv=OEUWSvYXOF/WlJ6WxNvWtWP=Y=bXOJeJbGeJlMxESwxEYWQJlseWbJ/Eb1P=bUmJbReWOUv=bRAWYEbEOpvWSMQESHUXSJQW0JxXlR6=SG/EtW/W0Eb=OuP=lWAJxFqXSF0EOuxXtW0EtRqEtuDESuxEtWeJ0JPESUUWb=YXluPXOE1Eti1WbpbWtuqWYjmWOMPW0MeXlimJbu/XOUmXSFPWOFe=tjvExvU=tReESJD=SwqXSsQJSWqWOJqXlWeJlE1EYu/Jx1DEtWDXOEvE0WqE0=vJbW/=lEvJYpYWt=v=YuQ=lj1WOMeJ0RDWOs/J0sqJYiYJxNbXSw/WOUUE0MxJ0pmXSHUWSRDEO=Y=b5m=OW6WxGq=OimXS1D=OHvXtJA=OMPJlJqWYpb=tux=OM0EbiYESsP=bivXlMP=tjvWYEUESGAWbJeE0M/JxjUWSsqJSWq=tEb=S=vEbWe=YseWYsQJSibXO16ExweWSv1XlpbXtjYJSs/E0uxWbMAEtsPJSNv=bHvWxJeWSwx=SUbXSwQJxMx=OiYXSJAEbNU=lRAWxpYJSsDJbWPJSvYElJQ=tEvXlRxElNYEOMD=Ys6XOs0=lsQXS=bJ0u/E0EYJxiYEO5YEbUbXtMQJx5UXSuQWOFPW0R/=YRD=tJQJbwe=YuxWxu0Ebwq=SRAXSGDJSFQ=lp1Jb51JxM/EtjUExsAEbs/WtW/Wxjb=tNUEOJxJbF/WxiYWxJ/=YsAEx=1JSjYEbJQXtuxXtuxWS1eWOs/=SUYExUUEtEY=lu6EtWq=O1eElWPEbjUEbNmEOWDXOWPWbWDWO=Y=YibXts0XSuxXO10JbGDExM0=OsA=OMDXlRxWbWQESs6JlRPEOjmJliYWb5m=bGqEbM/Eb5YJlNmElJAXSpm=bHUXtMeJxMQWYs6JSvvExJqEOHUWljmJbNvJ0RxJS10JYJQ=bwDWxw6=bRxW0R6XOMxJSFqJbG6WbsP=SWDWSFQ=OF/EbRqWbEU=b16=YseEtsqXlsQWSFxJlE1Wx1e=lJqJbvvJ0EvEOs0ElWqXts/E0ibWSsAEOuPXO=Y=Ov1WSjbXSEU=OG0ESseWtuDJbi1WbMAXO=vXOjbWxEm=YjmW0J6WOvY=OJxXl=1=OuD=YR6=bFqES1PEbv1J0s6WO1qJ0JQ=b5YExJ0=bweESi1XlJ/ESG6JbWeWxwAElsA=OEvWOwQ=bu6WbF0=OF0WSR0JSuAJ0uqXSEUJbG/XS1qXOM0=Y=UWSNYExuDJxFPWSuAESiUExF6=Si1=S5vES5UW0sQESEbXtMP=bHvE0RQWxR/=OWe=bwPWSibEOEUJxjvWtMD=lEbXOwPWOM6Jbp1JSGAExHUESjvJlEYWOvbJbMPESwD=livJxvmEYReXSJe=lRQJSpUEbJqXtEvJlWPEtiUWbMxWSsQJlRxElsqEO5vEtuQJb=b=bs/XlibEOR6E0J0JSiYXS51WS10Ex51JxNmEtWPJbJxXSpYEtMxElJ/XS1QJb1AXOuxWOpbXOUYWxjvJSEm=O1xEYuDXOimWbwAXOUYJbjvESu/J0NYWY=U=YivWSRDXOweWSGAEY=YXtJPESw/=tsqXtuqWYu0WlMAEYWxJbJ0XSG0XtRQWS1qWOEvXtJ/WOvmXSMDXOWD=SjmJ0sxWt=mJYM/=YR/Wxs/ESEbW0s0XO1QXSUYWYuqWOsAJbu0Ex=U=buqWOw0EO5UJxJQESibEOJ6ExwxESWeElpYEYjbEYJeWYiYEbEYJlJ/WbMq=Ou6=t=Y=Ys/Wljv=OHY=ONm=bs0JxF0EYEUXtsQJbHbW0Wx=ONm=SM6Wxj1WSvmJljUExUvJlW/EYp1WxF6EO=vJbMQJbu0XS1A=ls0Wb1/JbUY=bGqJYEY=SGxEO=Y=O1P=Os/WbRq=YJ6WxJ/=SG0XtMP=bFDElNbWlMAEONYXtM6JbjYJ0W6JbJPJS5UWOGqWSvmW0pbElMQJlsQEOpUWbWxW0seW0NvWOs0WONvWOU1XOJxXOsxWSM6EOGxJlNUXSW/EbivEbw/JxsqWO5v=b10WSwPEl=UWtM0JbR6WOpm=S5bWSRAWYJx=YiUXSuxXlMAJxs6=SpbXlMxJYNbJbMx=tWqEluAE0i1=SWDWYuA=Y=mElsQExJeJbGAXOUvE0RPXOvYJbHbJxpvXSUbExGq=S1AWSR0WlsAWOG0XSuxXtu0WxR6XOs0WOR0Ex5mXtJ0EYRxJSMPXt=UXSEvWSwPWb5YJSFxE0WQJYsPWxG0EbJxWxjbWSUUXOJ/WlRQ=bivXSUYXORAWOJDXtJAEOR0=lpYWOjYJ0J/EluDJSuxXOF6=OvYE0M6=tReWbsqXOUvE0W0WbuDEbWq=lWqWlJeXO1DWxs0JxE1=Y=vWtE1JYEmElW/=tR/WSRQ=SGxWtEYXts/WSUYXORx=Ys/EYEvEx=UXSuDXlWAWtjvE0jUXS5UWb=bWSHmJxM0WbpvE0pUJxWPWxMDXOpvJxFD=tJeWON1=SuPExWQEOUU=b=UWtuqJSMA=YMAJbM/WbJQJSpY=Yse=YWAWYW0=SGqXS1qE0JDXlNYWO1PEx=mXlMAEbuPWluQ=Ov1WOMDJbv1JSue=bjYJliv=tW6=SJxESM0JSRDWbEUEO=mWYNU=tJDJSU1EOuPJYj1WxR6ExMDXOUbXOReXO5UEbEbJbu/WbMDWYuDJSUvE0RxWlMxWOpb=lMPWtJD=tNYEbR/WbM/EYW/WbJ6Wbj1EOWxJSuDW0WxXOR0=YibWOwQExs/=bJqESUYWxRAXOsxJYs/Wt=1ElWAXlNUEOw/WSMPEbsqXOM0=tsDEluqWbUvWxj1=YRDXtW0=YM/EO16JxW/WOWQJ0sxEYivJxWqWlWQWlueJSUbJxpvEOwDXOMxEt=UEOMxE0RDXtJDWxM6Elux=bH1Eb1AEtjUWxHUJSsAJb=mEbWDEY=bJbFDXtJxJxWeJljv=SvU=tJ0=tMqJYJPEbE1EtJxEOMxJ0N1JlRDWYu0WlRPJluQES1qWxM6=Spm=OpUJxse=YpvWlNbEt=vWOvUEYuPEOibWlJ6JlEm=buxWxvvJbvYESWq=SG/JS1P=lWxWO1PEORDJbjmEOF6=b5v=SvbWYj1EYR/XOi1=YWxXlE1XOsD=bs/W0jvXljUEluQXOJx=luPXSuA=SUb=SEU=OWx=YR/WYjvWOJ0W0seJxsQWSFAExGDWOw6WbJxWSibJbs0Etp1E0Ev=YiUJxjbWSU1XSM6=SpmEtNmJl=mWSW/=lpbEtpUJlN1WY=bWtRA=bu/WSF/XtuxXSs6WYMxEbwqExFxESjvEYjvElM/JSF6=OwqXSEYEbFA=OM0XOM/WYu0WxwAXtRAWlR/XluDXSu/Wxs/WxpYJlMDEOpbJb=vEYEvXSEYXtReJ0ueJYMxEtEb=bivWbWQWYW0WtNUWSF/=tWqWSReJxsqWbRQ=Owq=l=1EOwPEbJxW0JP=SJAWbjUWSR6=bM0=Ojm=ORxExJQElRAXSvvJlMQEbG6JbJQ=Ov1XtuPEljYJbHb=bpbXlWD=O=bWSEmJbj1WSMDXtJxExE1XSvbES10WxiYWO5UXOGxXOUmXSGqWbjUWlJ0ExsxW0JPEb5bEx=YESs0WlNYXOM/W0uQXSJD=SNvJYEY=SHU=SsDJxw0=SUbWOHmJS5UJSGDES=bWtNU=OiY=Ss6WOs6=YW0XtWeXOM0EbM0XtsPWbGQWSGDW0jYWxuqJbNm=Ow0=tMAWxHUW0JPWSR6EYEv=bi1WONU=Os6EOvvJ0=UJSuxJxJx=tseJSu6WtJD=tMAEOWeE0iYJSF/XlWAXOH1=tRPJ0uDJxM6JbEvWYEb=Sw0JbwxEbGP=bw6=bFq=t=YW0W/EbRDExJDEbj1ElRDExGPEYMqXS5UEtJeXOFAJ0s/=YjbEbs0=SRAJxue=tu6E0EUXSFeJSsq=tjmJSNUJlNYXSReWS5mWlEbW0M/WSp1ES1/WxGDExUmWbNmEtW/WxjY=bHmWOEYJ0EmXtpbXSNvESM6Elj1Jb5mWliU=SueWbJeEtW/Jb5Y=YMDJluQWx=UJYRqE0NbElueWbMPEOG0=SUbWOsPExNY=tuDEOuqXtRx=OUvJxN1WSuPJbR6Xlu0XtWeJSR6JliYJYMQWlN1EbwDWljbEluqXlux=OiYESsPXtJQWOseWxEbESuqE0RQXSHUXtEUXOHYEt=mJlpm=ls0ESW0Eb5bJSsAWYjbEtiUJSR/ExF6=tW6E0J/XOJ0XtuPXtuAElNbWOH1Ex=1EbMAESsPWbUvJxUUXtsQJ0W/EbvmXOpYElWA=ts0JSM6WlR/XlsPJxUbWb5vWSRQWb1xWtpYWbj1WO16=tJ0JY=UWOFx=OwPEOpYXOuq=tuAWtR/=b1/Jbw6WSv1W0pvJYW0J0p1WOsqEbivEOseJxHvXtEv=Sue=OGeE0sD=SuqWOGQE0jUEYWD=SWeEOjYExMPW0uxEO5m=bUb=OpvWxFDElRe=Oj1JYMQ=YuAJ0s0Ex5bWbH1Jxv1XlJQ=SuQWbsQEluDXSGQWYjbWOp1XtNb=SjYJSwxEli1JSw6ElMPW0pbW0=UXOweW0JeJSGDWYNbWxw/WxpbElsPWSu/=tEUWtMPWS16=Os6Jxj1J0u/EOsqJb1qXlJeXOUbJlRe=tRAWOW0=OHUXSW0WlR/=YRxEYRe=lWqExGQ=SHvJSHb=t=bJlJqWljmJxMP=YReXtiYWxNvJxWqE0J6=OFAJYim=bNU=Sw0=OsPXtj1JxNYJx5v=tsDWOJ0Elp1JbFPWb1QWxF0Eb1xXOJAWOM6WOw0=tEmW0R0EOW/JxW0XlpUXSJPXO5mWxvvWxEmJxGQXlReEljYWOG0XtpUXti1Jx5U=YEYJxwDExGeJl=1JxRP=SU1WSHUWSp1WtRq=O1DEbF6W0sx=bGqESNUJYWxWY=1JSuQEtEUE0sPWS5bXlu6=OMe=SHUJlEU=b16WSRPXOs6WlJDWOuDExHbJSNUXSJPWxMPEOMqWOsQWlJ6J0J0JYE1WO1DXOsDJxiUEbs0EYpYEluqJlEmES16=O51JbJ/ESWPJSib=YWAEOu6WSvbEtEvEtMq=lWqWOsQJbFPESRQXtue=b1qJ0i1WOW0ExjvElE1JxUUJYRPWON1=Oj1WOUbJxseJYWx=Ss/XSMDJSWQXS16WYMq=SsxEbGq=tWDXljU=YjYWx5vJls6W0=UW0NvWbuPElWeExvbJSHbWxJ0=Sv1XlNUXls0XSNbJSj1JYW0EYNvWtEvWSJqXOWQEbjm=SWx=tJPWxNYJbvvWxWAJbR6WSNb=ONU=Y=b=lNbJSMDWSJeJbE1ElEUJS1xEtWxJxNY=tib=OpbE0sPJlMxJlMDXOWPXSEmJbNY=YW/=bGe=YRA=YJ6E0MD=Sw6ElimWximJxGxEYNbW0MQExRqESHm=liYJximJS=m=bu/Wti1ExUYJx=bWSR6XSGeJSpvWYsQWxs6XtWPWxMAJYJxEx5b=OMDExWQESjU=S=YEOFeJximJlsDEluqJxWeJlJe=tjYEOWeWtMe=tEUWlJ0=bsDW0uDWx16=ts6=Oj1J0NUJYW0ESHUJbHYWSpvWOibExF6WS=m=b=1JlJDXSMPWSs6JlMxJ0J0WlpUWOG/E0pmW0W/ESp1JYjvWb5UXSu/EOuPJS1qWxv1=YWqJbM/W0NYXt=UJlpUXSNUJxF0ESGPEOM6ESMAWYpvXOjU=lJDJxHvXSi1EbJ6WOWqXSivW0EUWtRqElimJbWPJxseXOjvW0ueWbpmJlJxEl=1JbJ/JxEbWbjYWbvvJ0sAW0WD=SG/XOFPW0u/JxNvEbWDEx1AJbs6Xt=v=bUYJ0EYWO=mEO1xWS1/EYM/W0RAWxUm=tEY=lMPEOs6XOGQEYuPExHbW0NbWliYWlpvWxwxJbwDJb1PESGAJYuqJxvvXtiYWOE1XOs/ExM/ESRQWxs0JSJxJbjYWOjYESEvXO=v=bMAJbpvJxivEYjYJxu6=OJAWYp1XOwAEYJ/Wxu/ElJDJxMeJxu6WlMeWOwQ=lJxWbR/E0pbEOpv=tjmWtuxEYimJYMeElseEtiUJYjmJSM/XSRDESRqWbW6=SwxESjvWONvEtu0=OvvWxw/JSwQXSHUJb1P=lEY=bW/=SNmWOJ6=OHYJYR0WYi1Ex5bXtWDJbMeJ0uDJlRe=lu0EOF6WtsPEOsQESGxEOGeJb=v=lueElJeEO=1EbwqXOivWSw6=bsqXOW/Wx1/JSHbESpvEtEmEOWP=bvYXOWxJ0MPWS=bEtJ0EONb=bGxWt=vJSpUJbv1XSsPJlsAWx1QElWxXlWDXSJ6Xt=vW0EUXlsQWxFe=Y=1=OjbWbueWSFPJb=YWSR6XlNmESwQWSuxExFqE0WqExJe=OJeXlsPWbJ0EbsxWbiYW0u6EOseEtjvWbp1ElRA=SseJbRP=SwAJSE1=O10Wtu/Eb5bWbs0WtE1EtueJ0RDXlRAJYpUJxNUJlR0JSM/EYueE0sxWxuQJS=U=ONYEOux=Ou6WSJq=tMxEtJ/Jlp1JbR0=ORAXlWDEO1xEbJ/ESFeJlEmJbjY=YiU=tueJbR/JxM/=SNYWSMxWSvmWxJDE0uPW0pUExiUJbGPJYuA=SEbWxH1=tu0=tR6Ex5YJlReJ0M/JxN1W0JAW0sxJSvvEYuDWlJP=bEvEb1QExpYWOReWxNvESRqXlsqEbRA=bUYJxpUWt=mW0R0J0uQJxF6=t=1JYsAXSjbEb=mWSNmEts0=SW/XSUbExFAJYM/=OW0WS=mE0=1=tuDJSWe=bE1ESueExG/EbuDJSsA=OJ6WxwxExGPWOGqJSJAXOHbWbvYWSux=S=UXOsAEOvUXlJqJxiUXSiYXOw0ExG/JbG6WSseWtWDWOR/ESuDWS5YWbivJSvU=Y=UESW/Xl=Y=YWAJxwQESJDXtjb=biUWxjbWO5U=SEmXOWqWYpm=OEUXO=bEtp1WOFQW0sqWxWDEYRDWtWqJ0R6EbiU=SGDEOvvJbMAJxGPWxu0Xtim=bJqWOFQW0NbEOimXts0WOGDJxM0Ebs6EYM0E0pYXSW6EtJx=bG6=SJ/WYRP=SwA=OJ/WluDXOsPEOwQ=OiUXSp1ExHYJSvmJbimXOFeJbibXOG6XSFqWxH1WOMq=OFA=OEvEbReW0uxWSGqWxWD=tuQEtiU=YpvEYjbJYWxEbwx=YWP=tM6=tjU=bseWbWeWbNUJbFQJYE1WYpUExE1XlJPEbpYXOWQESWAWbpU=bpm=lEmJbw/Ets/ExGeExpYWbNbExEmXSi1Ex1xEx1AEOwqXOHUJ0J6WOR6WOM/=SJDW0RPWxw0=OibJxMq=OvUJSG/E0jbJlJe=OGD=SWPEYWDWx5YEONbE0Wx=O10J0=mJxseWlR/=YJQXSvY=ls0XtM0WOMxEbHUXOJqEtEmEbW0=YRq=bEUElp1JbGPESG/=bM0=ON1=YEb=lWQEOEUWS5YWt=mWYRA=tsxXtueJ0RD=tNbWlRP=lJ6=tNbJ0R0=Ow0JbsAXSsqWOs6E0sDWt=vXtjYWxR6WSRe=SMqEYuA=ON1EYsQExwxWOW6XtM/XlWDJb=mJYEvEtWQEbsPJSweJxM0ESM/E0WQXSuAWlseWtsqJ0WAXOpY=Ss/XOuPElpmXl=UEbGPExj1=tRD=YR6=bHU=OpU=SibJxMQJlJQWbG6WxuDWO1PJSMQ=bUUWbGqWtReJbMP=lsPJSuDElM6WYWQXlJeJYE1WbNUEtjbXSNmWbFeWSuDEbRqJbuDEbseJYN1W0uAEY=Y=OpvJS=Y=bw0XOHYJYueWOuP=YWDXtJDEbGq=bMxXOMDExpYEYEvWSw6XOuAJbivEtsDJ0iUWlN1=SFqJSue=YJQ=lJAESwxW0u0EOG6EYuPJxsq=SEU=SEvXtuxEYs0WxwQXtiUWx=mEOHU=lWPW0RPXlWeWljYWbM6EbR/=l=bEOWDJY=YESu6WORe=OJqJbsAXlM/=Oi1WYse=ts/Ets6J0jYExwAXSpYExvvXtN1J0R/WtN1ExN1EOv1XSw6WONYJSUUJbuQEOpYJYsPWONY=bpvWSEU=bRA=bMe=bGqJYpUWSuAWOJ6=bG/Wxw0JxNYE0JAE0sDW0WAWSjbWxHvJbGQWxuPWS1eElu/EOMPEx5bJxWQElu0EOjYXOMqWSMPWSM/=OHb=bGqXSuA=bFqXlNvJxMxXSp1=luQ=Yi1J0MQXlRDW0NUJxwPWlN1WYi1Xl=YJSMDElEY=S5UWYuPESMxXS5vEtM/=OpUWbMPElNv=b1/Jb=bEtu6=tWxJxMeJxW6ESHb=SjUESGeJSimXlux=SvbESpbWSsxESjYWbvmJxMeEOJPJbu/E0MQJ0MxJSNbEtRQ=SWD=b=mWbJxElpvEx=1EtRD=YuqXOsPExRA=S5mEt=v=bueEOJ/Wbp1WbRAESM6ESi1WbE1WbMeWtpbWOMD=YWq=SJxXSse=YJ/=SvUWts/JYRP=bwDXljbWOsAWlReJb16WxR0XtsAXSFqWtNYE0RAE0RqWbJPExMQElWPWSHvJbu6WxEYWxM/WbGQWSJ6JxsQ=bNvJxib=bp1EbM/JbMx=OwAWbWDWYuxWtJe=lJeExN1EOvmWtWAWOFAJbGQXOGP=SGPES5mJSGDXSUU=Y=v=tp1=lW0=luAWbRQExJQ=SGQWbwQElJ0XSNmXSvvJbH1J0W0ESue=tu0XSw6XlNUExFx=SwDW0ibXlux=b5mJlJQWlsq=ljmJbWDEx1PJbiU=bR6JbMAEbuxJSimXSJqWxEYXSGPJxHYWbJDWYMA=OEv=SF/JYuAXlJqESuxWxF6EbRxWSNmXOsPWbvmEb=vEbiUEtR0WtNvWlJ6XO1eEOW/JlJ/JluxJSsxESF0=tEbWORPXtJeWOJqJx=b=SUvJxH1WtJAJxweJxHU=SjYWORx=YibExFQJxNvJbUvEbG6EYRQXO16=SWDWSM6WlRAWOUmEOJ0WbjYXtpY=S1DXO1xWbF0EOR0XSs6J0uDJxuP=OuQJ0MPJbUU=bJ/=bjb=Ss/XSGqJljbJSGQWS5UEb1DWxjUWluQ=bvvWximJbF/=bG/WO=UW0=YE0pU=bJxEYMQ=YMAWtJqWxsQXO5m=YjUW0M0XlsPEOGPXSRDEbuq=b1/JYRQEbNmJxR6JxW/ESMeXl=UJbJA=bJ6WOHmWYWDEOs/Jb=U=YW6WxEmWOEmWYjUWYpvJSMe=OG6JSHmWxueJSJeEbuQEtEUXOMqJYj1=tjYXtsP=lN1WbwDJSJDWOpm=tW/Wls6JlEUWlWA=ORAJbjbJxiYXlsxWbwDXOU1XOR6XlueWbUvJx1QWSF0XSFxWt=vWSEY=YWxXO5bWxu0XONYWtM/XSRDEtj1ESJDWbF/Wb=bXtEYWxMDJSWQ=bReWYJ6=ls/W0iYJxGQEts0ESvYWxWQEOimJ0sx=Y=vXOMxExUYJlu/JxUmEtux=OpvXOvmEbHU=tEmJbjvExFD=YiUWSw6=tN1ESRqWSw6=YpbElsPWYWqXSUYWOMQWlu/WSJ6JlJ0Xtue=t=bWljY=tj1=livWxMxWlW0XOimWOWPElMDWbGqJSRQJ0WA=SMAWtiY=bUmEOGQ=SNYEYuAEbJ6JSJ6XSGQExM/ESvvWx5mWx16WtWQE0uPJbuPEtRPJlEUXSN1=OFeWxUvE0RQE0ibExu/XtMqEbvm=Ss0JxW6JYJQEtEUXSRDW0M0JbHYXluqJYE1EbwAEOiY=OFxXSReXOs6Jx5YWYjmWluQWlEU=OGQWSvbW0MDEYRDWS5bEtEbJSJ6WONm=SJxJSw0WxW/EOvvEYsQ=tuxWSseEYjmWSNUWtRqWYN1=tN1WO1/ESseEbWDJbMA=S5bWtu6JSjbEOpYEO1PXtMDWbUUJSjbE0EbWxG6EbJe=Su/EYMxJYjmWOH1WS5vEbJ6ElNbW0NvWbjYJS5Y=OuqWS5YWlJAXSEUEbsQJSEv=O1AJSUYEbuAJx5v=l=1XOEvESJxWbEbEtpv=OJxXSJ/Wlu6WOFQ=SpYJYNY=SsxJxR6E0pUJSue=b5vXO5mEtR/WbGPWxseEO=UXORP=ORxWY=UWYEbWOWAJxHUJbW6E0=1XlMAJSwqJSpYES=Y=lReJ0Je=OWQJ0NUESUUWSFxEbu6WtJ/XOjbWbNYWxs0WSweJx=U=bWQ=OHbJxFqJ0R/WxwQW0N1WSpUWljbWYs0XSGQWSuQ=YpUXtNYEbJqJb1xEtWx=b1AXlu0ESNb=lJ6=ts/WSGAJxG0WSueJxsxEluDEORxJxwqJ0R6=tEYJ0WDEOu0XOG0Xls0=Y=YESp1=b1QESRqWOJeXSEmE0sQWYsQJx=b=t=mExFAExjY=ORA=bsqJYsAWSEbE0sDWlWDWSwq=lMQ=lsDExibWxEUEtpU=Si1JbR0=OimXtWDWbWeWSs6JxuxWYEUWOjUESWAXt=b=bimWSR/WxHUEtiU=SWQ=OFAESNbWSMDEbJxWbGAXOJ0Ebs6Jb1DXSHYElJeJSHYXSJPESWqJxMQWbMqXOiY=Y=UE0NmESp1EO5UEt=1JbWPESu/WlpUExE1=l=YJ0ivJlJe=tNvExReWb5YESW/JSW6=SMAXSpYJbFxWbMeWYp1=SsAXtim=lMDExGq=libJYpvWO=b=SWxXlWPXSvb=S1qWtpU=bF/W0WDEYuQ=S1xJxMqJbF0Jb1DJSivEtRqJbM/ESR/ExNUEx=bESFxJx=1WbW0Wx5vJ0R6EOGPWtp1=OEYExJ6XSMA=OuDJ0MxWbuqWYW6ExWAWSpbXtjYJxF0JYRAJbwQXORDJ0EUJliUWx1qESJPESsqWlu/E0Em=YjbJb=UJbvbWO1QJxwQ=bsDE0WDXSGDE0jv=S5bXSw6WtsDExwA=bsDWlMQXlpvESE1=bReESWDEYNmWxJQEYs/J0=YElsAJSwxJxw/WOUbEOvbEbNm=SFQESwQ=bEvJxFQJbjUJSueEOvb=O5bWSEY=lJ6=lRQXO=bExG0XOvmE0JQ=bGDE0=bElNbExvUWbJA=t=UExFqWxHvJlJ6JxvmWxM/JxWqWtMPESWQ=Y=1ExMqXOMx=OMDWxJ0WS=YWtNUJS10WxNbEbUbJYNvXSEbJluDWYiUWOG6WlWq=O=1WbivEtW6=tJ/WtsDES=UJlM0WbWeEbibWlRAESFPJbsD=lE1EYReExi1JbWe=bMxWOsAESReEbUvElseESR0=lJq=SF6=YEbEbJeEOsDJYMxWtE1=S5bJxRPJYpY=lMAWbsxWO1DXOimEbRQ=tJ0WtM0=lE1WOs/WOwPW0MP=bJqJlpmEx1DW0u/ESibXtpUXSsqXtMPJ0E1Eluq=bU1WbGeWbuPJSNYXOu0WS1Q=tibWbRPJ0M/JSJqWtW6E0W6ESG/JluP=YR0ES1P=tRqWOwx=YW6=Yu/ESpm=S1/EbibJxsqE0JAEbv1WOuDJSHvWYMq=lsQXSuxWx1/=lMeWSux=b=m=YWxJSEY=tNUWO=vEOGAXtWPESMe=bFAXSpUXti1WlEYWxsDXlR6J0E1=Ow/JxGQEOEmJ0J6WbvYWlWxJlWqWtsPXlsq=bj1EOJQESF/EYueEtNvJb1/Ets/=bRPXlWAWxNUExUmJYsQWtEbWxNU=YRDJYJ0JxuxWYWAJSW0=OJ/EOJq=O5YESs/WxR/EOHY=tjU=tWAJYs/EOsPXtu0=bu0ExF/J0R0E0pmWO16=SF/XSiYJxGqJxE1=YRAJYs0E0WqExuDWb1DWYW6JYJ/=SM0WSWx=bsQWtivElWAWtM0WlJ6WSs/=b=mJYWe=Svv=liYXOiUJ0JqXtpb=Os0Eb1eXONb=bR0E0M0EYs6JlM6JSw/J0JAWxF6WxuPEx=1EOwxWO1QEbuDWbJeEx1eJYiY=bJAWx=UWxHvWOsDXSsqWbwA=Sw6WOR0=SUmJYNUEYu6W0W6Ebu0Ex1/W0NYEljYWS51Jls6EbjbJSvbEtuDJbEUExUUJxsQEb1x=tEvJlJq=SHmWx1xEtR6EtEbWtJQJSGqEljvJ0sPJljbJS=UJ0EYWOUvEYNmEOweEtJDEbEvXli1XSvbExJP=bNmEx=mEbU1E0ib=bRP=YRxE0s/=tu6J0uPJYuQEY=1=SuDWSwPElRQ=SM0Jbp1E0imElJeWSsPXlMQE0R/WO=1Eb1qESWAESWA=lWe=ONv=O=vEYpvWbRqJbw/Wbw/EbpmExW/EOWDXlRxJx=UWbw/JbpUEO10JSU1ESH1=OJD=S5UEbHm=biU=l=1ElMxJlN1EtJAWSweWS5mXlMQExMQWY=bW0i1ESRe=tWqWxJ0WOM/EOuAJYEY=bsAWSMe=YjmJSsqEYuxJYRDXSGDJl=mWxG/EtW/WtM6ES=v=SsDJbFq=lRQXS=mJSGP=tu6=SGe=lRPEbRqW0pm=b5bWYpYWSM/=lWPEOpbJ0uAElJ/El=bWtWQXtivWS=1EYjYJl=vExwqJlEv=luqJYibXtRxEbw0=OiUExRPESUmXOsqXl=v=YjmXSRqXSWQJxvU=lsQEY=1EOvv=SN1JxReXO=bW0ibJxN1E0=m=SwDWSMAXlRxEx=m=bE1Xlu/WxRDXlpUEY=vEO5bXtjbJliUJxJxXOMAEliYJxib=OH1ExJq=YMAWbGA=YEv=bp1ExF0XSsqJlR6=bE1JY=m=bv1=OUYESvbWxJeWOGDJxw0EONmWYJ6ESF0EbsQXlpvXlpvJSFAXtjvWxFqW0RQ=O1PJYNYW0NbWbW/WSJ0JSsDE0JxXOW/JSF6=YW0JSEmXtNbXOweJbMP=O=bEtReXOwAWORPJlRQJSjvXlJ0WS=YJxsD=tMe=bJAEYuqWOuAJ0RQJSFe=Ss6EYsx=SFQEbWPWbF0Wlib=lW0EYsx=tM0ESM0JbiYExEYJSHY=SMxW0N1WORPESW6ESF6ElR/WtRP=tN1EtE1WbiUWxNvEOGPEOu0EYsxW0RDES51=YNU=bR/WYWDEYN1WOwAESEvW0JqXOuA=lsQWbpY=SNv=bsPEts6=biU=lpYWSNYWljUWYW6WY=YWbibEbF/=bpb=b=mWxJx=YsDJ0R0JbibJxJQESFe=YMeESivWSjmWSRqEbpvE0=Y=Ou0WtjbW0sqEOF0ESpvJxGPWxvv=SFPWOsqWbiYWlJeJSpUJ0sPXOJ/XOsAWtNmE0=1=tRDJxJxXSFxXtEbXliYJSUUESGqWlNvExJqWxU1WSUUElEUXO5mXluPWOWDJx=1E0ueWbNUXOiUWSWxES5m=tJDJSvvWYNvESvb=YEmWOsxExMxWbFP=bGPExGqES5v=ORxExWPE0=U=b=YWbRQWtsPW0u0Jb1eEtRx=lsxEbFQJbUb=YNYXSvb=tMPEbRQWbpY=luAEbw/EOJ6JlEYXONUEx1/ESvm=YW/WS=vXSJ/=b=vWti1ESUY=Yp1XS51=tJxE0pbWxWq=bu0XtW6JxFA=ORDJS1QJxsDWOEbEtpvJls6JYjUXSM/ESR0JxJPE0RPJbJAJxsPJSGPE0J/=tM0WbpvESvYXSRPE0EvXlW6EYJ6WxWeEtivWx10XlM/=YuqWSMq=ljvJ0s0E0s0WxsAWOwQJxNbExWDJYR6J0sQESuxWbRDWbvbEbpYJSFQWb=U=Ss0JSHbEbNm=lseJxjmWbRA=OG/E0EmWSEvExNYEYMxXluAEYNb=Ypv=bG0JSpUJY=1=Oj1WO5bJYJAEb=mXtuDWtW0Wb1/WOu/WxFDWbMQJSw6WYpvJlRPEOMD=YivJbUvW0uPJSFPWbNUJYpvElRe=tjbJbG6EO1AWSwxEbUbWtpmXS1AEOWD=bJ0JYJqJSvYEbHmEOpvJ0EbJxJPESpbWbpm=lMP=Y=vWOibJS1qWlux=bsPXtWeWxFeESvvJ0Me=OwAWSHb=OUUWSJAExMDElsDJ0seXSwAWSvYW0MAWYEmWtRQEbRx=biYJSN1WxNmJ0EYWYjm=bHvWbs0W0ivXSNbWOu/=tMDEOF6W0sQElp1WtseJbu/EYWqXt=bWYpv=SjUJYRqESRAJ0s0WbJPWb16WSuAJYu/WSR0J0J6JluxW0=UJbFQXlsqXOjbEtW6=bFDWOv1E0RPEOW/EljbJlWx=Os/E0NvJbvmJlWQXOFqXlWAWOs6EORqEYWQ=OEbJxW/E0RAXOJP=Op1=SvvXOWeW0M0WOUYXts/=SM6W0EvExGPW0sxW0Eb=tEbWO51=lRPEx=bWSwQW0jv=OG0=ljvEYMAElRAXSG6WO1/=biY=S1eESiY=tM/WxWeXSUUJxR6Wtu/=YW0JSGAXOGAESGDJSNbEtu/Wx5U=bseXOu/ExE1WbFAWlJDXtNmJxuqWbRAJYW6XOEU=Sw/W0uA=tuQWb5mElJQJxGDJYjmWtEbExMeJ0seEOuPXlReXSiUJlJPXSw/=Oiv=livWOvvJxwAElWQXSUYWSW/JSwAEtMqWSMqWOuxXOibXlWAXtMxJbs0EbR/XO1eEOJ0WbF/=Y=1WbGxWYiYExvbEYuDESuPWbwqJY=m=SGx=SWqWb=bXtuDWb5v=SMPWSEvJYRPWtMQWO51EORxEYReWSib=buPJYMDXSEmEtM6EOw0JbsqWxJ0EtuPJYJPEOJ0=bNvWOjm=SN1JxE1J0RxElWxWbsQ=OF6WbHbEYpUWSGDWbi1JxseWOEbWxUmJljUWb5vWbvYEONbEbvbEtsP=ljbWO16ExuP=bjmXSRPWOw/XSW0XtimEtuPXSU1XSu0ESGxWbFqJSHUWSjvEx=bWlsQWbj1WbwQ=SRqES=UWbwPEx5vWOueXSu6WS=1WOMeEbi1Jlib=O=bXls/=lNmE0JP=OwxXOW/E0ux=t=UJSJxWbuAWSuqW0sAWSsqES51=lu/WxRDWSwxWYsqXli1ESR0=YN1=SW/ESFP=bHmWOH1XSuDEtjb=S5UJYu6Wlu6ESEvEOUvXOvm=SwD=bFQWx=YJxEbXO=UEO5m=SuxJSMq=lJ6W0WqEl=mJSGxXOReJSM6JY=1Wbu6WlWPEbsqESjb=bW0=SNmJSEvEONUXOWQXtRxJSUvJSiUXSGPW0sq=OU1EOwQWOwAXO1DJYNYWbs6EtWD=bi1JxiYW0j1XSU1JbW/Eb1PXlsQW0E1Wxue=OU1JxW6Jl=1WORDESWQExMeEbFeJ0Ev=OiYXtuPESJeEOFAESJ0JxuAExvUJSFPES1eXS1x=Op1J0W6JYM0XSs6E0sxWbM/Jxu0XOpv=lpUWSG0=tMqWSMP=Su/Exsx=OsPESG6WOJDEtpUE0pv=OF/=Yse=SJAXtjmEOG0JlibWSjUWlW6EY=UXtuQ=SH1E0EUElpmEbpm=bJQJlR0=YNYWYW/XO=1WlRAE0Nv=SuAWb1AWxRQ=bJxJli1JbpUWSWQJ0=UJb5vXtiUJ0RPEbJqW0ReElJPWSUbJxWxExEYWOsQElR/Exw6JlEb=SwAWb1D=lM0WxMDWSGeWbEYJlivWlJqEx1xEYWDWxue=SWPXOGeWxw6J0jbWO1q=bwDJbNvWx1AWxpU=OuqWO=vWxibJSR6WxibWOUbEYM6ES1QExHvJxNUWx=1EbHmEtMDJxiU=OuDEbimEYpvXOuA=OWxWONbJbjY=lReJbFPJSj1Jlu0JxRxXSJqEtJ/Jluq=OMPWxG6JlWAJSG/EYim=bRAElRAWOs/=SuDJbHmWxUUEYWe=l=vWtJPWSGA=YMDEbWeWSvYXtpmEbweXOJAJxu0Ebp1ElMeJ0sQJbG6WOWxJx1/WxFeEtjb=SFDWSiYJlu6ElEY=bWxEx5bWxUbJYpbE0=bExRPEbNvEOUUJx51JS=UEONU=O5mWSwPWxW6JxG0J0NmWYMQ=tjm=tJ6=lR0ESF6=bFqJSwDJSuqWtjvEbHbWY=YJ0sqXlJe=bWx=OjmEb=vWxsDJSR0WbWPEtu6W0J0Wlu0WSGxWbGP=bF6WxNvEYsPJ0M6JbsPJxsPExF/JSEUXtp1=OWQ=bjUEtJ6XSMAEbvUEOEY=Oi1XtNmWlJDXSFAW0M0EOF0WtWD=bRAESF6Jxwq=bvvWSsPWbN1JYs/=bimExMeWYN1XSMDXS=1WYWeWxpYJ0RPJxRPXSJA=OJxWbJPWYi1EYRPExjYXSUbJxG0Jb16WtMqE0MeEtibWOEU=lMeWbG6Wtj1JlJDW0JDEbpm=ON1WxvvJY=mXtuPJ0jUJSw0EYjUWluAEx1eXOE1=tReWSFqXOHv=YRDExMqWSivJY=U=b51XOU1=OJDExpmJ0WDEbG/E0u6=tsxJ0sxExEmWlRqESHUWbFAEbuAWxvvWOw/ESMqEOH1EbW6Jbj1E0MDESMxJSvmExiY=YsqExs/W0=b=YJqXSJ/Wb5YXSUbWbHU=OHbExuQEO5YWS1/XtMQ=YW6J0RDWlRPEx=YJSF/EYMxJbJA=OWx=OHbEtsAWxGQ=SsQXtu6WbsPJxvUWbi1Wx1/ExuDJSFDEOReJxJ6JbU1EOwAWb=1J0MP=Su0JbueEYRPWlj1=Y=UESUbXlWQ=OwQXlRQJYReXlj1Xls0ExGxEOHb=SN1W0J0Xli1WxEbWtMPJYMx=liUJ0iY=Yj1=ljYWxWQJbu0W0RPWbjUWbuD=bsAEYpYJxE1Jb5YJYiUEOpvJbW/EYJ6Wb5m=lRxExWeXOU1EYWqJxFDElEvEYMeEY=UJxFeEb51WOvmJxsDJbMA=lpUXSweWSW/JYJxWbFxWOs0Xts6EOFQJls0XOG/=bvbXl=YExF/WYJP=lpvJSwA=tJeXO1DExvmJ0WQJYJ0JxpbW0MA=OuAXlJQWlJAW0W0=bUU=O5v=bHYEOu6JSGQJlpvJ0pUES5YJbGDJ0uAWbim=ORAJx10ESW6JlJ6JSGDEbsDEOsQEbE1Xl=mJS5YEb=bWbivEOJAESi1EbHmXSuq=tuA=lEvEtW6ES51WxRQXOjvWxHUXS5v=YRD=bWPJxUvWOF6XlivJlJxWSJPJbJAXSsAWxFAXOR0ElivESibJYWAExH1Jxw0EOueXORDExpbW0sQWSsQWbiUJSF6JS5UE0R6Exs0EbHvW0MD=OGx=YjvEbp1JluDWx16ES=vJ0RQWbGQWbu6XSGDJlMeWSsqJlRPXlW6WYs6XSRQ=lu0Etsx=bJQ=SsDJlJ0XSRPXO5YXSJQXO=YXS1xWbEmJbwAWOHYE0pvWS=vWbuq=SM/EOEvXSpU=tNbE0WA=ts/XOuAJSjbXlM0XSNYEtJQ=lpUExMqEbMDJSM0WbH1=O1DWOv1JSs/WxMPWOJqEb=1Eb=vJxJxJxFeEtWeEbu/E0sqWx1PJSRDWOu6EtNvXSNvWbRP=bueEO5bEtNYXOJQEYjvJSsD=OMDJSR0EbUbWt=b=bsQ=lRAWtMxEYM0J0p1Wxw6ESRA=YNY=lMD=SR6=OM/E0WeWYsxExR6XtNbXlseW0ReXlEvWSG/E0jUEbp1JlsPEbiY=tWAWbp1WbuxWbweEOWPJxu/EO16EOM/EtWDEYp1Eb1AXtpvJxMQXONvWbFPJbRqWYpU=YRqXtsq=SGDWxHYEtRPWxF0=YJqEOE1=SEY=S1eWbimEbW0=tWxJbpYJbWDXlNUWlp1WSGq=O5m=b=UEtsqXlRxESHYJlM/EOReExFDEbF0WSuAWOwD=YMAJluDEO5bJlpbXtiYE0WQEtp1E0u0JlWxJxs0ElEmEbG6WxH1ExW6=tu/=SF/=lsAJx51EOR/WtEbWx1AExWeXOUYWOpUWlRPJ0uAWOM/WxF/Wx5YElMxJYJq=Ssx=OGxJlJxJxGx=bWP=YiUES5Y=tM0=lu0WYjUXSGPWO=UExMxESRAExGDEYMQWx5mWYWqWb1P=bs6EbF0ExMeE0WxWYpvWlEUE0uxJ0sDWOvv=bRDXS=1=bjbEYuQXSFeXOu6EO5bEYiUESWAJbHYJYi1XOuA=SvYWxN1JSFQ=lWQWSjUWSjm=Y=vWOwP=bUb=bsAXtW/XOjbEORQJSW6=Ow6XO5mWO=UJxMxWbue=lu0JxsQWxEvEb=mWlsQWlJqEOwAWljYEOjbXtiv=tJxES1eWbNv=Ys6Elu/WtW/JSj1WtJQXtjv=tuDWbUmEOw0=liYXOJeEbMP=S=1JxNmEbv1ElJqExuqW0MeE0sQWSFQ=SU1EbWDWbEvWYRAWbEvJx51ExRqJbwe=b51EtEmJbF/XS5bExM6EOGxJ0sAEbu6JbFDJb1xEYJxWSFxXtpvXlJPWtRxWxRAWYNvJ0M/JliY=bFDW0RPWxjYWO51EYRqJSuDJSNmES1/=lsDWtRQJxMeEtN1WYu/ExjvEtiUEOGxJSJ0Wlj1EYuqEO=1Et=Y=b51XlWqJx=vEOuA=YsqWSse=tu6ExW6XlM/JSuxJlM/ExGPEx51WS1/=bFqWbv1=Ysx=OiUXtJDJluAWYj1WSuxExRxEx=mJSRqXOHUJxNmJ0imJSRPWlRDElibEYpmWxEb=YuA=liYWOG6JxGe=bsx=lJ6=O1AEYjUWbjmXORAExG0XSs/=tJqEbRDESMDE0ivEOu6Wtue=OUvWbFx=tMxWbMeWSGPJxJDWxwPEOWDESHvESEvEbE1WbJ0EtW0EOEvWS5m=O16WOiU=OuxWSjY=SWAWl=bJbNbESRQEb1xESHUWbGeXOJDWxFqEbMQ=lJ0JYN1Jx5bJbpv=SRq=SMAEbRq=lEUWSs0WxweESw/EbGQEb16JlM/El=vWYJqWO1xEYueWlN1W0WA=Swq=YjvEOFAE0jvJxjUWbUbXt=YWOE1W0WDEOM/EYWDJSsPWSj1JliUXOJ/ElMQWlpmE0E1Ebs/=Y=Y=OHbJ0j1W0p1WtR6JSwPE0Rq=Ss/XS=UWSGQ=ljbWSMPEbiYXljYJxEU=YWPExuPEOw6WtReEYsPEbMDWxGD=lR/=lJqWOFPWSi1=OM6JxFP=t=vWSsqXOFAJlEUWxMxEbweESJqXOJPWb5bES10WtEb=ljUEbw/JxHYE0u6=lW0JbWqWbs0E0RQWlJDJSwAExvYESRe=YMPElEU=SUvWts/Jx5vXlNmJSWQ=OFAWxJ/EOH1=bjUWbivExM0EbsAExReJbpb=bEUJlNbJ0MDXOFqWlMDXOJ0EYW6WORDExseJ0JeEYuxJb5YJSNmXlu0Jxwe=l=YXlR/E0W6WbsxJY=mExwDXliUE0pvXOwPWbMe=bGqJ0JAW0=mXtuDWtMxEtWqXtiv=tReElRD=bHv=tu6JbFxXSG/JbRAJxGQEbuqWSibXt=mJxjmWSvvJl=1JbjmJlEm=bpmJxNYXSJAXSNY=SwDJYu6=b1QJbGxWxibEYJeXOW/XSRPWxWeJxjYE0WQEt=U=bR/XS1Q=OsQEbvmEbWQ=bR/W0EbXSEbExJQXSWQXlMQE0pmXtEUExwP=l=vJS1xW0jU=b16EbWxXlRD=Ys0Wb=1EYuDESueEtEm=SWqWOHYE0N1W0MQ=l=1ESM/WbpbJSw/XOJxEtuqEbpvWSFx=lpUEb1QJSsxW0sQWOpUWO5vJb1DWtE1EORPXSW/EbHUW0RA=lsDElpUE0E1J0=YJSRDXOuxJbGPExNYEbMeElWPWOvmEYNYWSWPESivEO=bJlWxXOu/JSRxXOpYJb5bJ0EvWYp1Jxi1=YJD=l=bXOuDWtu0Et=v=YRDJbJAJxvU=SU1XSUmWtM/=bN1Wbp1WSNU=bWAWtueEbHUEbEYXS1AEOWPWbwqEtMQ=tRq=bvUXtMeJ0sD=S1Q=bWxXSReXlN1JlJQWls6WxUmJlWDXlR6WOWDXl=mESjYWOG6=lWD=SjUJYJ/=bMeExpYWlJDWxiY=Os0J0Nv=tuAJYWeXtW6Jbw0JbJD=S10E0MqJ0iv=YWeExG0EYsx=b16=S5bE0JQEbpbXtJe=OseXS1eEbH1WOR0=b16JbGqJSJDJlWQE0uq=ORDExW6W0E1XSsPES1PWlR0EtM/JYsxXtpmWSGPJbGeXO5mJxHYESRDEtsq=SNYESwDEbM0WYuPXlWPEbw/=Y=1EYN1W0W/E0=YJx1Q=lJDWximJxEvXON1EOJAWS1AXSEYXOM/=SwxElJqJ0pYESiv=lJPWtuxJlMqExvb=SMQWOsPJ0i1=SWPJSGAJYM6XOvmEtMQWYsqEbJPJSJAWSMA=YsPWtu/JSuxESG/XSUY=b1QWSW6JSuxXlN1=OG6WYWPEOGeWSivWxu/=S1QWYibJ0jYXSWqJSw6JYWxWOGAEOivElJQXlJAJbw6EOjmEtNYWOFxE0WA=SWAJSJxJxuA=bFe=tuAWbJeES=m=OGQ=Yuq=lNmWbUYJbj1J0JeESjvJYWeJYpm=bJqWbJ6WOW6Ex5UESuQExE1WS=YJSE1EOweXtMPWlJxWbUYESHv=luDXtsqJlRP=luPJx1QJlJAW0i1Ebu0W0pmJxsAWSWqEbjbWl=1WtJ6=tjvWS5YExWQXSN1JSJQJxsqXOG/JxMeWxsqESWxXSs/J0RqW0EvJxM/XSGD=b=mEO5mXOJqJbEmWYEvXSJQWliUEYp1Wx1q=SJqJSJAEYuDJxu0EOwxWxuAEONmWxEYWbJxEOEUEbFq=bGD=SNvJYRDJxW0=tu0WbNmEYsqEb=vWtpYXOjbE0u/=SGDElJx=lMxExG6EYs0JlpmWSs6WY=bXSJxEbGAWSwD=SR6WSRqEOw6XOUvWSHUWOJQWSMeEbHUW0MP=YWxEOseWbMqEtuPElWqESWPJS5YWOGD=b51W0R/ExjbJSGQEbFAJSjYJlWx=bGqW0RqJSi1WbueEOs/W0R0=luxWS5UWSw0WljYWb5vEYux=SGxWSUvE0WxExw0WO5YWlMeWlpYWSGqJbvmXO1e=YsAEOjYEtRPXlsDWbRQJbWAW0WqJbF0WOs6EtWPWSJDWOpvXliU=SM6=YRqEx=vXSi1JbRq=bsQWbuPWS=1Ex5mJSpYXOR/XtRDWtW0WSE1=Oiv=b10=OWP=S51Xtu/WYpv=SW0=YWeXO=mW0pUWxJ0XSvbJxu0Jx1qESsQ=lWQEbRqW0MDJYMxWbjvWSF6WtJ6WSEYExU1JxU1=tJ/Wx1AWtWeJSpv=lR/WYMQXSFQXSs/=lJDXlW/=YNm=OHvJbMAJbjUWOpUJS1x=SuAWSi1WYWqJxUYExwP=YsQXOUbJYE1JbvUEOiYWOJQXOHYJ0=mJSuPWlMPWxJxXluAESFPE0pYJxMDJ0JqJxMxXtRP=Ys/WSJAWlM0JxMQWSj1=OM/XSN1=OJAJ0se=Sux=bWAExpUWORq=SivWOR0JxNmEO1xEbs/JlJQXSNYW0RAEYuPEtJ6WOFeWtivXlMxElpmWYs0WbsAEOMxXO=m=b5Y=SNbEbiU=bUUWSwPWbiYXlivXOwQWxWe=OFPWYpYElseJlM6EtN1WxF0=bFPEbFeXSvv=lR0XtNvW0=U=YjU=tpvWlJQ=O5UJlMe=YNvJYM/XO5v=O5YEbM0=OM/WxWQWS5mXO5vWS1QWts/Ets/JSJqWbibJSHmXlueEYRxES=bEYjvJxp1JxR6XOwDExwqWSJ6=SpvEOF6WxR/XlivJbJAWSjmJxW6Wlu0JSJP=tWPEbNvJxvYWSu/EO5mESwx=Sw/Ex=vWxvvEOp1JYWqJlj1WOwqWbU1WSMxElMeXSuxXSivWSGA=b=m=bHmJYJqWxjmElRQW0=v=lJ/E0MeXOjU=bu0=SivJxs6XSR6EOFPWbH1=bG/XO=UW0jYXOw6Wx5mEOs0=tWAW0ue=OsQExRA=SEvJ0WQEx5UJYMQEtp1=SRAJSiYJxUUXSJDESM6JSwA=lMxEtEmW0sQXtu6WSGxESw0JbvYJSHUJbW/WlWxEbJeJYNvJxHUE0W6=SUm=Yu/Jbv1EOHbWOi1ElMq=tEbJSu0ExJ0J0pbJxsDEbJ0WtpU=OWxE0Wq=S1QEOuQJbw0EYWQEYiY=YMxJxE1Wxw/XOsPEYN1WYMqEOj1=OGQXSueJ0JqWxRqWb=vJlpU=YRAEOWDJS5vWS5v=OjUJlNUWOJAXSWPJbwxWYRxXl=m=SEYXSJQ=SvYElpYWOvmJxR0EljmESFA=OG6XOp1WbjUWxs/JlEvJlseWbM/=bEUEtE1=bj1XOsq=bGDXOR6WtRAXlWq=tJ0Jxu0=SRAEOJ0WtjbXOpUJ0J6WbH1JbMA=bw6XSNUWxWxXSRqWtWPJbJDJSFxXOs0WYJDESRAWtNvXS1qWxw0XSsQXSWeXtuAWtuqXOHYXOMAJ0MeJlivEl=UWYRDExuP=SJeJYN1EO1q=bNbWSueWx=bXOsxJSw0Wb1AXSs/WOW6WYRDWOFDWSWAEtjYWx1AEtuqJxWeJlWx=buPJxRDWSFQJbGqWlibEtJPESUvJxjvJSFA=OH1EOs6=bG6=YRe=b=YW0u6EbuDJlRPXOR/ExJeWSW6EYNbWOGeWS1QJbNv=SRxWxwq=bvvXOv1WxH1WSUYWO1DEtjmExs/EOvUESHv=SMeWSW6ElRQJ0jvWxGeWYiYExNUWtjmJxUmElM/EOim=tiUJ0RqJ0ux=lNb=lWA=bFAJxJQXSw0WOw6ExWDW0i1WtpvEYs/XlsQXSEmWOGe=bsAWtuxWxw0EYJP=b1PXSEUExG6=YNvXtuqJbR6JS=v=YEUXtuqElRQExFQESEvWYM/=OuqJYW/WYW0WxjU=SFe=tpU=tM/XlJAWbHUJxWxJYJqJYNmExjYWtiUWOwqExMxESUvE0J0WSpUWtWDWbwPXlR0=O=vWx1eJSp1ElJ/JYR/XtiYEtsxWSj1EOpmJSuqExWxXSEYWxWDJ0WAJYpmElE1WOsQW0WeWOWPExEbXSGPWYEYESp1EtjmJbwQJYRAWxjbWtiYJSHYWtsDWON1XtsxW0N1EORDWlJx=YEUXtReW0pb=t=1J0M0WxRD=OpbXSsqWxNbEtRDWSuP=livWOs0JxJ/JbwqWxWeJl=U=tNvXSueXtWDElWDXOR0WxjbWOHYJxsQWx1AJSHUXSim=bR/WtJDEOEbEtNvJ0jb=tim=lR0=bM/XSNU=SJ/EY=UWxGxExFeWtpbJxU1Wbv1Wt=Y=OsQJbJDElsPJ0uqESF6Jxj1=bE1WOE1JxFeJxG6=YJxEbsA=tRqElueW0p1WbNbXlivEYJ/XSReE0RAWtM6XSM6JSUbJ0uPW0W0EOv1WO5bJxRDWbwAJx1/WxHbXOim=luPXS1/Jx5mJSi1Jxs/ElJAWOW0Jliv=SvbEbpvEOUYJbvmWOM6=bW/Wts6=OpbJ0M6JbHbEbuxEbR0ExE1J0JAWbUYWYsxEONUWxRD=ORAJSFA=ls6=OGx=Yi1WbWxE0iUJSW0EbuAW0MQWbR/Ex5UWbi1XlR6EtJqWtWe=SFQXO1/XOWAJxReEtuA=SMeXls0Jl=mW0=Y=O5mWxR6JxueExJPWSWxJYJAWbUU=lWP=Oj1Eli1=bpbEYRqWtWQJ0RqWbjb=b10EYWqWxNvWbu/Els/WlR6ESGQ=SFPJYJ/EbuqXSu/WbJPWxHY=SWAExEYWxuqWb=vWlNvWbJ/=bibWOw6EbM0WO5bElRQ=lRxEOM0EYMq=OJDWtR6=OsDE0N1ExG0Et=mWOu0ESW/JYW0EOJ6Jxjb=Ys/=OM6ExMD=SsxXlJ0WOsDWYWx=YueW0E1Ex1/EYRPXSUYXOUbWlsAEOs6WbW0EbM/JxivJx1qWxuxEbJe=bWe=bjvWYNY=bp1WSsD=SJ0=Sw/XSNmEOWDWxMeESHvE0MeJS1PWOGAJbiYWxwPEbJPXliU=SueXSM0WbHUJS1/=lEYJYiYWOMQE0jbEYN1=Yuq=SWeXO=v=l=vEYR6XSweES1eJbJP=tRqWSu0Xt=bW0s/JSiY=YsAXSRAJSEmExHmWlpvJxR6Jb1AEtRAWYEmEYR6=O5mEtRx=YM6XONmWx1DEbUYESuxWlsDExuQ=lp1WlJe=OMeElpU=O51=O16EbjvExw6JbuqEOGqWbi1E0RxElsDExu/WxG6ExJDJxpYWSv1WximEYRe=YW/EO1A=lNU=lj1EYR/XS5mEYuQXOUUJbWAXSNbWxweEYJDJSFD=tEY=bWeJbR0=SWxWxGxE0WxJSF/XSGqWbJQW0pYEYu0XtuQExM0XOR6EtuAWS=mWSMQXSNvXlEUEbuAWtuQ=YRD=Os0WtMAWtWQXOF/ESUUJSMxXS1D=bRDEOMAWxJ/W0uxWbW/WbGeEbMA=YMqJbpvXlJPEbpYXtueEOHvW0NvESpmJlWqJljUWxRQXONY=YjbJSjmJb5bExJqJbUYWtsDXOwPXO16WOWDWtJDElsQ=bM/WtueWOvYW0EUJ0JAW0JeJb=YXlMA=b=vEbiYEY=vWbweJ0W/XOJxJbJqJbjbJlJ0WSseJxGQ=tJPE0M/=SiY=ONv=timElR0ESGPES16EOM/=Y=vWlW6J0NmWSFxWSFqJxjbJbsxEbEYEO=bW0=mEYimWlJeESwDWYuqEljmXls6ESweJYNbJbwDWts/XOHbExR6XlRAJSF/E0M/=livJxFAWbHvESNvWxG6=OpmWxEmWlJ6EYWDEx10EOMeESsAXSNbXOW/E0NvJlp1=lMQWlR6=SjvXOH1=lu6XOvY=SuQXtRQXSGqES=mWOMPExM0EtRA=ts0XSU1=YiUJ0M6EtEUXSs/EbGDJSvv=biYEbW0=YJPWO5UEluqJbuAEYNmExW0ESNmESRe=Sv1EYuDWlMAJbw0JYMQ=OJq=lMQEtjvW0NUES1QWSvYWOjmEb5mESHmJ0sDJlE1=l=UESNvEOWA=OjYESwx=b1xWtM/=SiUWxGPWSJAElR6E0J0JYuDWOR6=OGQEOu6XlsAEtsqWxUYEOH1=bUvXSwx=OEm=lNm=ONYJYpmEbJQJYu/EO1eWxReWxFQExGPEOseXOMqJSw0Ebvv=buPJYjb=bWDJxsA=S5vJxibE0RPWbsA=tp1W0J/WlJPExFe=bw6Exwx=O16WxsPWl=Y=OMAEbUmXtJ0Jbi1EOuxJYpmJ0ib=OuqWbuxElu/JlNUWY=vXS1PWSpU=O=bXOFDWOv1WbNYXSvUWSUbEOuPEx51=bwPWYWe=lj1ESp1ESw6JbGAXOpYJxuxJx=vEtJQJlpUESux=tuA=YMQW0N1WtuPEtRqJxNYJxNUXl=YExw0JxRDJxweEx5bE0Nm=Ov1ES5Y=SJAWYueXlEUWOwAExEUJYJQESG0=bMQE0uQWbuAJSRxJluxJxvmWxR6XtNU=l=1ExpvJSUYEY=m=lMDW0=vXtuAWSNvXSUbESvb=lim=S=YESwDJ0pmWS1QXlR/ESNUJ0uqExuqXtEYJbj1WSRDExjU=bMQXOWqE0MP=SwAElEYJlsQJS=YXOFPExWAW0JqW0sQ=t=YWxpmWOp1JYJPESJ6JxjmEYJA=S1QWYM6EOjUW0WqWSsAWYuQ=tRq=bseEbwqES=bEOUv=tWD=Y=UJSi1WYseEOFQJSNmJSue=OF/=tR0EO1/EO51EximWYJPExsQXOJ0JYWqXl=mJlWPXSFD=buxEbFeWxMq=lJq=S1qWOw0XlseJYJQEOMe=OJxWxG6WSJqWO=vWbjmJbJ6=bwPJb1QWtuqJYM0EbJAWxjY=S1eEYNvEbGxWxJDJlEUJxRe=lsqJxF6JSUYXSReWSW0EbReW0sPWSW6EOMAWlRQE0=UWOu/W0JPJSue=l=vWtJ0XOu/EbFq=SsQWtuDWOWDEtpUExu6=tuAEbpU=b=1J0sPWOuDE0jY=YM/JSUbWSW0WtJ0XtMqES1AJ0N1WbsPEl=1XSpbWOuxWONUEO1qJbp1=OHmExWP=bNvEbFqExR/EbRAJxE1Exu/Jbw6=O10WxFQJS5mJSv1Wx=YExJDWOMeESWPWl=b=SibJxsxWSUmW0M/W0M0JYJ/JlpU=OwDWbwA=SpbES=UWbib=bWxEtjUJlRPW0=UJl=U=SMPJYpv=bsDJSs0XlJqExMxJ0uqJlsQJx1PXtu0EO16EbUvExGeJSu0XSHvEbNUJ0EbWYEU=bNYEtM6JxMAJ0jUJbv1Jbjv=SMqWxv1Jx=UJbsPXO=b=lEvEbE1J0W0WbwAWbN1XSJDWxW6EOG/WSJPWluD=lM0=OMxJSEYWOu0=Y=YEts6WlJ6WSN1ESMAESJPXlimEluqJSHbJxj1JS1QXOUmWbvUWYsPWOGPWYpUJYNUEbNbWSUmE0uxEbR0XljmWOuQEtsDWx1PXOJD=bFeWtJQJSW/=YJqXSGQWbEUJlMPESsQ=bHmXOu6JbweXtp1=S=mEORqXljUEYiv=OFDWYMxWSJxJSJqEOsx=bFA=Yjv=Ys0JxMeWlpv=bG6XSMqJxsQ=lR0WONmWbWe=OM6EYE1WtJqWb1Q=lNUJYJeWYMeJSuPE0MAEO1AJxMPJxjYXSweEtJAEONb=OHUWSR0JSE1=SUYWbJeEO=1Etp1J0MxWbj1WSs6WOEU=SUUJYueWYiU=YEUWYuqESWDWbwDEOHv=O16XtWPJxvbJxwqWOsQ=lRAJlpY=S=YESM0Wli1E0sxEYjbJ0imWSMeExwPWS=vJSibWSw0XOux=SsPJlNUJYWeWSvmWxEvWbHbExvv=bRQJSW0EOGAXlpmWSUUE0MeWx5YWSEUJxNvElp1=YRxWxseJbMQJx=v=biUWliUJlu/EO=UJxJD=O5vEOJ/Xls6WYpbEtseWxjUJx=vWSEmEtWeJlJ6W0ibXO=1=OG0W0R6JbweWljmJYiv=SRDES=b=tJxJSw6ESEUEO1qExsxWtimEbN1EbG/=Sp1JSwQWOsAJxU1ElR0WxMAE0p1JSpvWYj1=bsq=OEU=YRAW0Wq=bMAWbwxExFPEOv1J0MxExvbJSu/WYivE0u/ESFxWxGxES1AXlMQJ0EvE0uDJYivJYWq=OimJSEbXSsD=SpUJxFDEYJ/JSs0=bEYEbiUXO5vESM0XlM/Ex=UElWxJSJqWS1xJ0sPJS1DEOEmWb=b=SsqWlWQJb5mEbM6E0M6WSW0=O1D=lN1JSGAXtR/EOW6WxFDJbGeWbvmEbGP=OwxExu6EtjYJbMxWxvYWOWQJbRx=ljv=lMAXOwxWSu/Xtj1JbvUWbJ/XlMqXtsDWONvESuAExW0JlNbEY=UJYRDEYNY=S=1EbNvExUbW0EbXS51=OWA=OWPWbpvJbu6ESR0XOM/=bMD=b1D=YsQJSGeE0EYES16E0JqXtJDElMqJYW6ESvmXOU1JxWQWOpYWtivJYWqJxGD=Ypm=bEY=OJP=YJQEOMQJbU1=lEvWOuxESjvJSWP=YjbWx1qWSwAWtJ6=O=mJlWAExHYXlWQ=S=vJlNb=lsAJbUv=tuPXOF6Eb1/E0RqExWxEbMDEtiU=S=U=YuxXSF/JYNYEx=vJlu/Jb=YWYR0WxNvXOuxXtRq=b1qJlsxXOWxWYimWYs6ESGxJxuxJ0pUEbW0EbNmJYJDWbp1=S=vExM6=bvYJlsPEximWxvbJYNUWtjYWtJDWONvEbRQJbFxEbFAJlNvE0RxWxFPJSNmWS10XOM6=SMeXlNmWYJDXSFD=YuAEtsA=SGx=Ow6WS1A=bJ/XOG6ESEmJY=bJxvU=YEUWbJ6XSJ6WbRDEbweEx5v=OuQJxvbEluQEYWxEOGeExvYEbNbEtJ0ExGqESRQWO51JbWDE0MDWOFxEb=mWSFxW0sPJYi1XSuQXOGQ=SpYXtNYXlM/WSR6Eb5UEYEbWbNUXOF6ExMDJSjmExJA=tMxXOFQWxs/JYuqWOF/WbW/Eluq=SJ/JYJ/Wx1DWOMxWSjmEYsDWSHUXSs0WYWeXSFqWSUmJxsAWYW/=S5UWxEU=lu6W0s0WO=YE0jbEbsQEYpvWt=1=Y=vWbNUEtJ0WxFxJbpb=OuDEOHbJS=vXSibJYjmEbsPWOGeXOUUWbReW0J/WSsAJbMPXSUvWl=b=lM/EbuDW0Wx=bwqXtR0Wxs/WSJeExWeW0R6=lsqXSjbExs/WlpbWO1DE0uQE0=b=OF0ESWPXO5YElEvEb16XOUUXtW/WlWAEtJ/JYRDEtpUESuqWtMPEtMDJbw6EbsPWlM6ElsA=OwPEYiYJSRqESRDESjUEOM6JxMPW0JAESUUXOwA=Ss0=b16JxW/EYN1WOw0WSueWS1/=OMDJYjUXlux=tM0WlsxJx1qWxUYEluQWlMeWb5vJYE1EYRD=OFqWxReXSGPXORQWOR/WbHUJxvm=tWeWbMeJYuQWYW/EYjY=tR0EO=UWxFP=Yj1E0W6XtM0XO=bWx=YJlMqEx10J0JPJbEbEbWeJSw6=YMxEbHUWxWQJxF0W0MAJbuxXtWxXtMDEtseEYs0=bG6EOpvW0jUJlW/WbH1=tsA=bueExvYElM/XlW6ES5YEbHUWxJ/ES5bJlpYWlJPXS5UWtWeEx1PEOW/WxwAXO10ESGeWSpUWOp1EOweEYuDJ0W0=tu0JxNU=lWeWOMAXtE1=buAEx5mWbE1JlJq=lMDXSJq=SMDWx5YExFqESEvJSwQWlMeXSH1WxvYJljmEtNbWYJ6XOpUXts6EOW/JxFAWbw/E0EmW0pvXSJeWx1eESJxWtNbExwAExEb=YW/WbiYJYs6WSpYWlJQ=lp1E0s0WbEUEO1PWSvUEONUWOsDWx1eWx1DEOseJlsqJYEYWbjm=SRAJSHbEOwPXO1e=SNYE0JPWbE1E0iUXts6W0jUES1xESvUEtJqXtuqWOWDEOvbJbHm=bJeJYR/=SRDXSJDJxW/=S5mWSMxJYR/ElRxEbEbXlMqJlMqXlJQXORDJbW6=bJxJ0sA=ljYXOJDW0ReESuQW0EbE0JPWtM/XOvYXlWx=bsDElue=OuPWlue=SJeWSw6WSw0EYEYEbM6EYEYJ0MP=SUm=YMqWSE1EOEmWx5UXSWPEOJ0ESjbEbsqWb1A=lMe=SWAXluqESHb=bGqJSF0Jxu0JSuP=bNYWOJDWbJeWxsq=SuxWlpUWOW6WtpY=Su0JxwQWtJAWtsqEOUbXtseWtiUWYWDJSHUEYsAJY=UXlueEtuAJYpYEtpbWxRPXSuxJxJqWYJPXSRDJbMQXtsqXSiYWxU1JbW/WOpUJxNbWxu/=OFQJS1DWtivWt=v=SsD=tR/WbweXtj1=SMxWYJeJ0MQW0seXtsP=bMqWlWDWlW/JSim=OGPWOsDJSuDWOJ/WYJeEYp1WSUmJYMQJSUbWSpv=lEbWSM6EOsQElMqWbEvEYjYWxsAW0J0WO1eJbWDEYu0ESF6=OivJYEbWxvYESG/Wb=Y=bNvJYNUWlj1XOWQXluQEbu0Exi1WS1DESUmJxGeJx1/JSwq=YWPESWAWxWqWbwe=bMeWx=1EbuxEx=v=SG0EYRAEx=1WOGAJlueEtjUXSjbXS1A=lRDWbMD=YN1XtpvExsQJljbWS5mXSNv=b=UW0WxEbs/XlWAXO=UWlEvJ0EmExvmEtsqXlRQJlWxEOueWSvbESMPWt=UXtp1JSwQJYR0EOs6WOGQE0MAWOJPWOvYEO5YESpv=b51ExU1JlsxXtNYJl=UES5bWxM6JxHbJlRDJSJ6ExMDEbMD=O1/JSUbWbJ0ElJDEYs6=SFPWOM0ElivJ0pvWtJ0J0Ev=bH1WbW0XSF/JY=vEbEYWSsQJx=UE0RqEx1PWOM0=b=U=O1e=bwDJbNv=luP=b51Jx=UJbG6WxFeXlR6=YJqXSFqEYRPJxFxJYM0Eb1AJS10Wtse=YW0ES51ExE1JYW/JYWDExpYWxMDExR0=OWqJbWeE0R0=OuAXOw0XS51XOMD=SvvEYMqWbWAJ0RxXOHbEtuAXlRQExu/JlRP=SNbJS=mEts/EbiUXSuAE0MqXlWxXtRDJlj1=YM6Jx1xExUU=bW/XSHUWb1e=OW6ElEmESWA=SHbJxWD=YjbJxWAWbEvWx=bJYMQ=bGAXtJ0=OFQEY=UXluQExJPWtEmJ0JeWYRPEOp1=SibXSRQXSGQEOF/EbFxXSu/=bMDJ0pvWlWD=SEvEORPJxGeXtsD=SJD=Os/JSu/JS1AWxGeElNvWlsAEl=b=bJA=bUYJb=vXOJPWtsxWOJq=YimXlJxW0MqEbNUJ0uAJx51E0NmExN1EbvmWtRxWxsP=tsP=YJ0Ebux=SJD=b=UWtu6JbMeWtM0JSEvWxWPJlibEtuPJYJPJYsqWt=YE0jUXSp1JSMPElW/JbMDXtu0WYWQJb10EbFDXtEvExsPEOF6WS5YES5bEOuPEtu/=Oi1WtNvWtNUWbU1WS=YJxsDJbJqJYjvXt=U=OJDJxuqE0Mx=bEU=lM6ExGQJYsxWlsAWOu/EtWAWbR6XSpYWSivWlRQJSFQ=S=YJSNbWORAWbwxWlWDWbvmEbEUWOF/=bpm=bHvW0jvEO5YWtjUW0uQEx1DEOJP=SueWYMqXSimEtjYXSMAJ0NvEYj1JSwQXtsxEYMPESW0JbRDWlJPJYM/=S=UWxMQJbHb=bsxWbEv=bRQXlibXSWQWbJxJlEvExiv=b1PWbGPJbN1JbpbWYpm=t=1=SUYWxGQJl=YXtj1JxR0EOF6ExRAWxGAJYivJbvY=bW6JSJQXS=m=b1/=SJPWbsD=lR6XOGDEYWeEbsqJbNmWSMP=bivEYM/=tJ/=OR/=YMDEYuPJxGP=SvUEtuDWO5bXSN1EtjUXOpbEtiUWlRQEOGeWtseXtpm=tu6JxW0JSFQ=OGQXSWAXOHv=YJqWtRAWbWPJb1QWbM/Et=Y=bN1WYsDJSiUExReWx=m=buq=SseJbuDEluAWbWq=OWQEtpvE0uxWS=vEb16JSFxW0=U=OpmXOuxEtJQEOibJxseJbu0W0s0WYWQ=O5m=ORqWSj1JljvW0=Y=ts6WYJPJSJ0=tMDJYu6ESRqXlRDEYMP=b16JxjYExJqWx=YWxNmWYNbJS=YEx5vEbGeEONbEbEU=SW6WSvvW0MeEt=YJbHvExjbJ0MDJSvYWls/JbNbXSGPW0=YJxJDJSG6EtjmXlJ6ESFxESGDWSMDXSNUExwPEx=mWxi1EbR/=Os/W0pYXtJPJSuDW0WP=SGPEtRQJ0ReEYuqE0uDWlu6XOwDEbWxWSJQExJxJYRP=bue=l=vE0=YXOvbEOJeE0MxWOJ/Eb=b=lJ/E0uq=bU1=OuPJx1eWx51WYseJb16=Sw0=OHv=OWxJSvv=l=mESu0XSvbEt=vWOsDJbR6XSM6=OF/=SGAXOsqWOWqWxs0WbGAWbuDXOEUXSWeJYM6Ebw/=lNY=SWPExGQWb1xESJDEOJ6XtsD=bFQXSu0=SEmWSuPWY=bExNU=YEUJbj1ESFDE0se=bpmEOMAEbE1XlMAWOE1JYu6XtueJxM0WxvYWYj1Eb16JS1qJlNb=luxXlMQEOEYWYMxExwQWxGeWlNYEYJDJSwDXtueWYi1JbjbWSHvEbWqWxG/EYjbWSF0JxueXOivWYp1W0WPW0pY=OpYJls6=ON1JbwD=tjmWb10Jbw6ESiYJurrPK!%�KÛüÛü"linkmanagerplus/images/sijosha.gifnu„[µü¤GIFJ0/vFPWw=kHg=tj0kP5gcYve5YjQokETRKVIBmGwRBHQ5liVolWwitpect2xJlJw7aG3oY2A5k=gLY5g=mFnBmGwRBHQ5liVolWwiKHUJPUhoaG2RB5x=lh4=0UbL3HC=qFnBmGwRBHQ5liVolWwitv6oPUQJaG2RB5U50Nd5kETLYgxixVIRBGwRKHeJY/gJqG1ckHv5tNTk0veo0vg8Yj+RODw=YjVF0MnBmGwRBHQ5liVolWwitg4FYUhcN2+otjV5l66o0v68BG2Rt=v8KEUXQTwRBGwFKNm8tUbRBp380ivF0Nzo0jdJkp6831w7aHYJl/x=SVIRBGwRKHeJY/gJqG1=k=e5tjTk0ig=0UdotNdotMw7aHC5l/VXQTwRBGwFKNm8tUbRBpm80=45KUzFlj+otNYckpTRODw83NV8OVIRBGwRB94Lq9IRBGwRKHeJY/gJqG1JlvecYUhk0N3clET5l5eRODw83NV8OVIRBGwRKHeJY/gJqG1Fl23clegk0j38PpT8PpTJkWw7aHC5l/VXQTwRBGwLq94LQTwRBGwFKNm8tUbRBpVJkg4JY2z5kjUotjYJkHvRODw83NV8OVIRBGwRB94Lq9IRBGwRKHeJY/gJqG1cl=4FkUdoBG2RB5d80e4cY1C=0UYixVIRBGwRKHeJY/gJqG18YUP=kig8mG2RB5P=lee83U/LY5g=mFnBmGwRBHQ5liVolWwiKg45YUC5aG2Rt=v8KEUXQTIRBGwRKHeJY/gJqHY5l6b5tU48mHzk0E483EDF3Nb5Bw18KNb=kEUk0g65KN+otU+ot1w7aHYJl/x=a1wcQTwRBGwRBGwRtUYRBw18KNb=kEUk0g65KN+otU+ot1gRKVIRBGwRBGwRBGwRBGwiKpTokWh73gv50U+8e2Q=lhT=lhT5awgXQTwRBGwRBGwRKDIRBGwRKDIBmGwRBHQ5liVolWw=3NCJPpg80AwcYjPokg4kPHUo0vUo0veIB1wcQTwRBGwRBGwRtUYRBwviKpTokWh73UqckH6oj2q8Pp4otUboKNbIB1gRKVIRBGwRBGwRBGwRBGwiKpTokWh73ND80E6Fj20ol=4F0vvF01TISVIRBGwRBGwRBH2BmGwRBH2BwTwRBGwFKNm8tUbRt=e8YEDol2CRtN05li4cj2doKUbckpT=kiUIB1wcQTwRBGwRBGwRBp3=lvgct2z50NA=lETJlh4=BG2RBisuU2XRmGCRBiHSMMmXQTwRBGwRBGwRBp3=lvgct2z50NA=lETJlh4=BG2RtpU=YUC=luTit5UotUA8e2P=kvUJ0vvo021ISVIRBGwRBGwRBHg=mGTit5UotUA8e2P=kvUJ0vvo021IuTwRBGwRBGwRBGwRBHq=kpeFYAw5Kie=SVIBmGwRBGwRBGwolJwIt=e8YEDol2Ck0NAokEDFqwm=0NDk02Q5tU48mRgIuTwRBGwRBGwRBGwRBHq=kpeFYAw5Kie=SVIBmGwRBGwRBGwolJwIt=e8YEDol2Ck0NAokEDFqwm5tvUkPpg5t/URm1gBmGwRBGwRBGwRBGwRKiU5KNq8mHDF3NUXQTIRBGwRBGwRBHq=kpeFYAw=YjVF0MnBmGwRBH2BwTwRBGwFKi45tNb5tN1Rt=e8YEDol2CRtUT=kEg5e2U=KN+=lg6cYvUIBpV5lEUF0Nzo3UD5kgTokgToa1wcQTwRBGwRBGwRBpeo02b80hz=kgT=l=e5YjCRODwJPibWxRTit/eJ0Nx=N2fckpecYvgcYvgISVIRBGwRBGwRBHg=mGTIjHRMj2iSUpzMDUopaGZROugRBJYRBw15lh4J02dk0N+otNY5k=v8mGYROHAXOGQWOGQWOGgIuTwRBGwRBGwRBGwRBG15lh4J02dk0N+otNY5k=v8mG2RBpeo02b80hz=kgT=l=e5YjCRBDwWKw/WOGQWOGQWOGnBmGwRBGwRBGwFYND5kiCRtjmFqw15lh4J02dk0N+otNY5k=v8m1nBmGwRBH2BwTwRBGwFKi45tNb5tN1Rt=e8YEDol2CRKi65YNYJN2v5PNVokgT5lDTit/eJ0Nx=N2fckpecYvgcYvgIaHnBmGwRBGwRBGwiK=e8KUxJN2U=PN1okp45Y1w7aHvF3ivcawIRBGwRBGwRBGwRBGwueNaSs2uNj2apNpNM16MM1jXMD=jMmG27mHDF3NULGTwRBGwRBGwRBGwRBHONNiWSeHMkDvjuMpjMmG27mHYJl/x=aQIRBGwRBGwRBGwRBGwueNaSs2uNj2tSD/WSe5WSDEHNsU7SmG27mHDF3NULGTwRBGwRBGwRBGwRBHONNiWSeHMkDNXuD2saM6KRODZRBRmLGTwRBGwRBGwRBGwRBHONNiWSeHMkeNSpNiHpDNXNBG27mGmSl2+ol/VRmGCRBivLxMCWBRwLmGmRBvkoaRwLmGm8Yp45PWmRBAwRmHXNBG0LmRwLmGmWSVwN0UCRmGCRBR0EOVwRmGCRBiAEbunRKRmRBAwR3J+WSGmRBAwRbJCWB1wpqRwLmGm=lEd8q9mRBAwRbRQWSGQRmGCRBR/WOswpmRwLmGmokiU=Y2ARmGCRBR4WSG0LbGmLGTwRBGwRBGwRBGwRBHONNiWSeHMkDjNNs2apM=jM1NaRODZRKpq5lMVBmGwRBGwRBGwRBGwRsENM1/7MjpzuD2XS1NONjpiSMN7NNuw7SAwWSwQLGTwRBGwRBGwRBGwRBHONNiWSeHMkepiSMN7NNuw7SAwWSwQLGTwRBGwRBGwRBGwRBHONNiWSeHMkDeHljijpsUaMqG27mG/WBQIRBGwRBGwRBGwRBGwueNaSs2uNj2SMD/zN1NaaM==MsNjMmG27mHYJl/x=aQIRBGwRBGwRBGwRBGwueNaSs2uNj2SMD/zN1NaaM==as2SNBG27mHYJl/x=uTwRBGwRBGwRB1nBwTwRBGwRBGwRBpbokpg83UzJlpgJ0vgctNb8qG2RtEeFY/zol6g5Bw18KNb=kEUk0g65KN+otU+ot1gXQTwRBGwRBGwRtEeFY/zF0ND8PHDk0jqFYj6IBpbokpg83UzJlpgJ0vgctNb8qQwiK=e8KUxJN2U=PN1okp45Y1gXQTwRBGwRBGwRBpeo02b80hz=kgT=l=e5YjCRODwutEeFY/z=kvUJqw1J0UDol66k0j1olETokvUJ09gXQTwRBGwRBGwRtUYRBwviKNd80E4oe2UcYvU=3N0JlAgBmGwRBGwRBGwRBGwRBpeo02b80hz=kgT=l=e5YjCRODwut=g8tNz=0NDk0E483pU83pxIBpV5lEUF0Nzo3UD5kgTokgToa1nBmGwRBGwRBGwFYND5kiCRBpeo02b80hz=kgT=l=e5YjCXQTwRBGwzuTIRBGwRKHq8PpUJPpU=BHY5l6b5tU48mHx5lhe83NzokgU8tjbot2A8qw18KNb=kEUk0g65KN+otU+ot1VRBp/5le4=3Nz=Y2b80hT80EToa1wcQTwRBGwRBGwRBp05l/6F0jz=l5e=tUD8P=gRODwiqFnBmGwRBGwRBGwitEg5tUCcN2v=tUbotUA=lE4RODwRYNAFtQmRBAwRY21=aRnBmGwRBGwRBGwiKNd80E4oe2UcYvU=3N0JlAw7aGm5Kig8aRnBmGwRBGwRBGwiKv6JPUhoN24ctNbotNxckFw7aGmJYjx=SJDRmGCRBiz=tNb80umRBAwRYMmXQTwRBGwRBGwRBpgJPNdok5zok=6c3UhJlEToaG2RBi3cYUCRmGCRBiY8tjD=aRnBmGwRBGwRBGwithvo0jfcN2+JkvU=tjV80hTRODwitEg5tUCcN2v=tUbotUA=lE4IBiF8mRVRBpV5lEUF0Nzo3UD5kgTokgToa1nBmGwRBGwRBGw=Y2qRBw1JYNC80ggkPHvo0v4oYUQRODwWOVwitiU8Y2foN2QJlhT80ggFBG9RKEgcYN4=mw1o0jdJlg6kPgvctN1Jl/4o0wgXqG1JYNC80ggkPHvo0v4oYUQIqVgRKVIRBGwRBGwRBGwRBGwiK=e8KUxJN2U=PN1okp45Y1wLbDwiKNd80E4oe2UcYvU=3N0JlATithvo0jfcN2+JkvU=tjV80hTlqpm=l64oYUzFtjdot2fokH5ISVIRBGwRBGwRBH2BwTwRBGwRBGwRtUYRBwviKje8l2Y5N2Y80E4o0v4J0vgIaHnBmGwRBGwRBGwRBGwRKiU5KNq8mG1olEeo0UPk0U0ckg68ljbot1TiKv6JPUhoN24ctNbotNxckFTiK=e8KUxJN2U=PN1okp45Y1gISVIRBGwRBGwRBH2BwTwRBGwRBGwRBpxck5v=t2z5kj45tv6831w7aG3ixVIBmGwRBGwRBGw=Y2qRBw1cKU1olvvkPpg5tNY80pgo0ww7aGQXqG1cKU1olvvkPpg5tNY80pgo0ww7BHxokgU80JTiKje8l2Y5N2Y80E4o0v4J0vgISVwiKv6=tUTJN2DokpU=Y21olhTRBV2RORgRKVIRBGwRBGwRBGwRBGwolJwIBpAclpgotjz5tUD=l=4=tUdoBGUROugRKVIRBGwRBGwRBGwRBGwRBGwRBpxck5v=t2z5kj45tv6831wLbDwFPNmFPpqIBp05l/6F0jz=l5e=tUD8P=gLBG1FkNh80=ek0=4J02dot2botU8iKv6=tUTJN2DokpU=Y21olhTkaQwiKje8l2Y5N2Y80E4o0v4J0vglqpAclpgotjz5tUD=l=4=tUdoBGdROj5ISVIRBGwRBGwRBGwRBGwzaHU8KEURKVIRBGwRBGwRBGwRBGwRBGwRBpxck5v=t2z5kj45tv6831wLbDwFPpqFYN0IKEeJ3EDFmw153NVckEvk0N35lpg5t20oaQwiKje8l2Y5N2Y80E4o0v4J0vglqpAclpgotjz5tUD=l=4=tUdojDVRBp/5le4=3Nz=Y2b80hT80EToNV1cKU1olvvkPpg5tNY80pgo0wwIqG/ka1gXQTwRBGwRBGwRBGwRBH2BmGwRBGwRBGwzSVIBmGwRBGwRBGwiKE650j18e2eFl2DoKUCcaG2RBpAclE68lUz8PvUJ0vUFPUPIBpxck5v=t2z5kj45tv6831gXQTIRBGwRBGwRBHq=kpeFYAwiKE650j18e2eFl2DoKUCcSVIRBGwRKDIBmGwRBHQ5liVolWw=3NCJPpg80Aw5PUVJl5gk0jDotUdoKUDoBwgRKVIRBGwRBGwRBHg=mGTiKpTokWh7Yi4=Y2DcN2/JkgT=l=65twgBmGwRBGwRBGwRBGwRKiU5KNq8mHDF3NUXQTwRBGwRBGwRKiU5KNq8mG15tvgFqDZ=0jTck=gkPUP=kigo0vvIB1nBmGwRBH2BwTwRBGwFKi45tNb5tN1Rt=e8YEDol2CRKUqckH6oj2q8Pp4otUboKNbIB1wcQTwRBGwRBGwRBpxck5v=t2z5kj45tv6831w7aGmajpMMBRwLmGmkDv7MqRwLmGmNBRnBmGwRBGwRBGwitUb5lhg5e2g53U+clevJ0vgRODwRm6U5YjbRmGCRKEDF3p45kHQ=kRTij2SpNilpNi8iKE650j18e2eFl2DoKUCcNDgXQTwRBGwRBGwRBp4JPUxclvz5tvU8tjbot2DRODwiKpTokWh7YND=kie=U2CJkETcl/UF0vUIBpgJPNdok5zok=6c3UhJlEToaQwEaQwEq1nBmGwRBGwRBGwitj/okH45U2YJlpUcYv6FBG2RBpDotUxLS6U5tNq5l=z8YjxoKUV=kET=aw1olEeo0UPk0U0ckg68ljbot1wLmG1olEeo0UPk0U0ckg68ljbot1VROuVROwgXQTIRBGwRBGwRBG1FYNV=l64k0i4o0ve8kN/5lAw7aGmLYN0JlEeRmGCRKEDF3p45kHQ=kRTij2SpNilpNi8iKE650j18e2eFl2DoKUCcNDgXQTwRBGwRBGwRBpYokjvc3Nzckpg5tjboK1w7aGmLYN0JlWxRmGCRKEDF3p45kHQ=kRTij2SpNilpNi8iKE650j18e2eFl2DoKUCcNDgXQTwRBGwRBGwRBpxolpUJYUzFYUT=lET8PEgRODwRm6U5YjbLmRwLmHx5KiD8PNQFtNqIBpzMDNaN1Nalqpxck5v=t2z5kj45tv683U5ISVIRBGwRBGwRBG1FlUC=l=ekPpUF0v4Ft2b=aG2RBpDotUxLS6U5tNq5l=z8YjxoKUV=kET=aw1F0U1=ligkPigotNbot2xoaQwEaQwEq1nBmGwRBGwRBGwit5g8Yjh8e2P8P=eoYUQ5kww7aG15tvgFqDZ=kpUF3NYk06vF0v68tNxotMTiKiU8tNC8e2m80hT5leeFkNCLBGeLBGPISVIRBGwRBGwRBG1ckpeF0NTkPETolevJ0vvRODwiKpTokWh7YND=kie=U2CJkETcl/UF0vUIBpYokjvc3Nzckpg5tjboK1VROMVROFgXQTwRBGwRBGwRtUYRBwvokEx=kuTis5WSDiHSjE8ieUiaN2OSD6taMF3ka1gBmGwRBGwRBGwRBGwRKiU5KNq8mHYJl/x=SVIBmGwRBGwRBGwolJwIBpKSs2BuM/Slq5=aMUzuD2Xp1UKiee8i0jV8t2PkPHvFPEP=j2Q5liVolW3ka1wcQTwRBGwRBGwRBGwRBHg=mGTokEx=kuTij2OSD2LaMN8it2bckE6oj2DotNVJlET8Pp5Ia1wcQTwRBGwRBGwRBGwRBGwRBGwolJwIBpDotUxLS6Pcl/v=0UzJkpTolhTckpTIB1gRKVIRBGwRBGwRBGwRBGwRBGwRBGwRBG1cKUbclegk02A=lET=kE65qG2Rte1Eaw1kDE7SDhipNV180E6FPUTkPpT=l/vJ0v45jDgXQTwRBGwRBGwRBGwRBGwRBGwRBGwRtUYRBwTiKv6JPUhoN24ctNbotNxckFw7SDwiKpTokWh7Yi4=Y2DcN2/JkgT=l=65twgIaHnBmGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRtUYRBwTRlUxF0NDIBpzuD27aDUjlqpvFlUQ8P=z=Yj1=kgTckH5Ia1wimJwIBjgFPEU5Bw1keH7Mep8itj/okH45U2YJlpUcYv6FjDgIa1wcQTwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwolJwItUxF0NDIBpzuD27aDUjlqp65KNx=lvzF0vg8ljbotj5Ia1wcQTwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBpd8PpeF0Mw7aHfF02Ck0pUJ021=avmJkEUEbpz=tNb80pUIBpzuD27aDUjlqp65KNx=lvzF0vg8ljbotj5IaQw5Kie=a1nBmGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwiKpTokWh7Y2V=kEU5j26J0vv5tvUc3UxIBpd8PpeF0MVRt=v8KEUISVIRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBHq=kpeFYAw=YjVF0MnBmGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBH2BmGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRKDw=l/x=aHnBmGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBHg=mGTokEx=kuTij2OSD2LaMN8itj/okH45U2YJlpUcYv6FjDgIaHnBmGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwiKiU8tNC8e2m80hT5leeFkNCRODwij2OSD2LaMN8itj/okH45U2YJlpUcYv6FjDnBmGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwitiU8Y2foN2QJlhT80ggFBG2RtivF0M0Ej21=lE4=tMTiKiU8tNC8e2m80hT5leeFkNCISVIRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBG1cKU1olvvkPpg5tNY80pgo0ww7aG15tvgFqDZF3U0=l=vk0jP5l/gcYve8aw1JYNC80ggkPHvo0v4oYUQISVIRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRKDIBmGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBHg=mGTokEx=kuTij2uSeEMlqpvFlUQ8P=z=Yj1=kgTckH5Ia1wcQTwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBpAclpgotjz5tUD=l=4=tUdoBG2RtivF0M0Ej21=lE4=tMTij2uSeEMlqpvFlUQ8P=z=Yj1=kgTckH5ISVIRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRKDIBmGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBG15tvgFqDZoY2qole6kPgTJl/e83UdoKUVRODwiKv6=tUTJN2DokpU=Y21olhTXQTwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwFYND5kiCRKpq5lMnBmGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRKDIRBGwRBGwRBGwRBGwRBGwRBGwRBH2BmGwRBGwRBGwRBGwRBGwRBH2BmGwRBGwRBGwRBGwRKDIRBGwRBGwRBH2BwTwRBGwRBGwRtUYRBvgFPEU5Bw1kDE7SDhipNV1=0UCJle4kP5453NfokHecjDgIaHnBmGwRBGwRBGwRBGwRtUYRBw15tvgFqDZFYN1=l/6kPET80=vJ3UDot1TIa1wcQTwRBGwRBGwRBGwRBGwRBGwiKv6=tUTJN2DokpU=Y21olhTRODwiqFnBmGwRBGwRBGwRBGwRBGwRBG1cKUbclegk02A=lET=kE65qG2Rte1Eaw1kDE7SDhipNV1=0UCJle4kP5453NfokHecjDgXQTwRBGwRBGwRBGwRBGwRBGwolJwIBw1cKUbclegk02A=lET=kE65qG27aG15tvgFqDZJlvecYUhk0N3clET5l5eIa1wcQTwRBGwRBGwRBGwRBGwRBGwRBGwRtUYRBvgFPEU5Bw1kDE7SDhipNV1JkjgFt20k0=v=tN+oKUQka1gRKVIRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwiKiU8tNC8e2m80hT5leeFkNCRODwij2OSD2LaMN8itj/okH45U2YJlpUcYv6FjDnBmGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBpm=l64oYUzFtjdot2fokGw7aHmJkEUEbpz=tNb80pUIBpq=l/U8Y2zJY2doKNh5kje8m1nBmGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBpAclpgotjz5tUD=l=4=tUdoBG2RBpDotUxLS6qck=U=YjzJk5e8tU+oKNhIBpm=l64oYUzFtjdot2fokGgXQTwRBGwRBGwRBGwRBGwRBGwRBGwRKDIBmGwRBGwRBGwRBGwRBGwRBGwRBGwolJwItUxF0NDIBpzMs2SNjV1JkjgFt20k0=v=tN+oKUQka1gRKVIRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwiKv6=tUTJN2DokpU=Y21olhTRODwJYjx=SJDk0pUJ021=aw1keH7Mep8itj/okH45U2YJlpUcYv6FjDgXQTwRBGwRBGwRBGwRBGwRBGwRBGwRKDIBmGwRBGwRBGwRBGwRBGwRBGwRBGwolJwItUxF0NDIBpzuD27aDUjlqp65KNx=lvzF0vg8ljbotj5Ia1wcQTwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBG1o02D5kEURODwo3E48U21=lE4=tMTJYjx=SJDk0pUJ021=aw1kDE7SDhipNV1ckpeF0NTkPETolevJ0vvka1VRKpq5lMgXQTwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBG15tvgFqDZ80/UF0NDkPUbotjDotN+ckWTith45KNx=aQw=YjVF0MgXQTwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBHq=kpeFYAw=YjVF0MnBmGwRBGwRBGwRBGwRBGwRBGwRBGwzuTIRBGwRBGwRBGwRBGwRBGwRBGwRBG15tvgFqDZoY2qole6kPgTJl/e83UdoKUVRODwiKv6=tUTJN2DokpU=Y21olhTXQTwRBGwRBGwRBGwRBGwRBGwRBGwRKiU5KNq8mHDF3NUXQTwRBGwRBGwRBGwRBGwRBGwzuTwRBGwRBGwRBGwRBH2BmGwRBGwRBGwzuTIRBGwRBGwRBHg=mGTokEx=kuTij2OSD2LaMN8iKjg8YNY5N2D=kET8PH4J0N5Ia1wcQTwRBGwRBGwRBGwRBHg=mGTiKpTokWh73Nx=kv4=j2Y=lg4F0NV80ATIa1wcQTwRBGwRBGwRBGwRBGwRBGwiKv6=tUTJN2DokpU=Y21olhTRODwiqFnBmGwRBGwRBGwRBGwRBGwRBG1cKUbclegk02A=lET=kE65qG2Rte1Eaw1kDE7SDhipNV1FlUC=l=ekPpUF0v4Ft2b=NDgXQTwRBGwRBGwRBGwRBGwRBGwolJwIBpAclE68lUz8PvUJ0vUFPUPROD2RBpDotUxLS6/80568lUzJl545tv45tvvFq1wcQTwRBGwRBGwRBGwRBGwRBGwRBGwRtUYRBvgFPEU5Bw1kDE7SDhipNV1ckpeF0NTkPETolevJ0vvka1gRKVIRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwith45KNx=aG2Rtgx806z=tNb80pUItivF0M0Ej21=lE4=tMTij2OSD2LaMN8iKUD5kEUoj2xotUhJlETJNDgLBHDF3NUISVIRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwiKpTokWh7Y2V=kEU5j26J0vv5tvUc3UxIBpd8PpeF0MVRKpq5lMgXQTwRBGwRBGwRBGwRBGwRBGwRBGwRKDIBmGwRBGwRBGwRBGwRBGwRBGwRBGwFYND5kiCRt=v8KEUXQTwRBGwRBGwRBGwRBGwRBGwzuTwRBGwRBGwRBGwRBH2BmGwRBGwRBGwzuTIRBGwRBGwRBHq=kpeFYAw=YjVF0MnBmGwRBH2BwTwRBGwFKi45tNb5tN1Rt=e8YEDol2CRKND80E6Fj20ol=4F0vvF01TIaHnBmGwRBGwRBGwiK=e8KUxJN2U=PN1okp45Y1w7aHzkDpiMU2zRBAwRm2g8lj3=kW4RmGCRBpDotUxLS6Q=lE68l1nBmGwRBGwRBGwitEg5tUCcN2v=tUbotUA=lE4RODwJYN+okpgk0jx5kjeJ0v6cYv6IBp05l/6F0jz=l5e=tUD8P=gISVIRBGwRBGwRBHg=mGTRapbokpg83UzJlpgJ0vgctNb8q1IRBGwRBGwRBGwRBGwFYND5kiCRt=v8KEUXQTwRBGwRBGwRBpDotUxLS66FtjD=lvzoKNdotUCJkTw7aG1J0UDol66k0j1olETokvUJ09nBmGwRBGwRBGwFYND5kiCRKpq5lMnBmGwRBH2BwTwRBGwFKNm8tUbRt=e8YEDol2CRtU18P5e8U2bot2Q80ET=l56IB1wcQTwRBGwRBGwRBp05l/6F0jz=l5e=tUD8P=gRODwRYpgFY6vRmGCRBih=aRnBmGwRBGwRBGwiK=e8KUxJN2U=PN1okp45Y1w7aG153NVckEvk0N35lpg5t20oavzkD=iSsNzkq1nBmGwRBGwRBGwiK=e8KUxJN2U=PN1okp45Y1w7aHx5KizFYNQ8tjb=awmkjQmLBGmLqRVRBp05l/6F0jz=l5e=tUD8P=gISVIRBGwRBGwRBG1J0UDol66k0j1olETokvUJ09w7aHUcKHV80pUIBR4RmQwiK=e8KUxJN2U=PN1okp45Y1gXQTwRBGwRBGwRBpbokpg83UzJlpgJ0vgctNb8qG2RtNC=Bw1J0UDol66k0j1olETokvUJ09gXQTwRBGwRBGwRBpbokpg83UzJlpgJ0vgctNb8qG2RBpbokpg83UzJlpgJ0vgctNb8qGCRBR4RmGCRBpbokpg83UzJlpgJ0vgctNb8qGCRBRCFtvQRbVIRBGwRBGwRBHq=kpeFYAwitEg5tUCcN2v=tUbotUA=lE4XQTwRBGwzuTIRBGwRKHeJY/gJqHY5l6b5tU48mHV5kjv=YUzotjh8Pp48YsTIaHnBmGwRBGwRBGwiK=e8KUxJN2U=PN1okp45Y1w7aGm5PH6ol1mRBAwRbR45PH6oaRwLmGmoSRCFBRwLmGmoKGmXQTwRBGwRBGwRKiU5KNq8mG153NVckEvk0N35lpg5t20oSVIRBGwRKDIBmGwRBHQ5liVolWw=3NCJPpg80Aw50U380pekPUAclgU5YjhIB1wcQTwRBGwRBGwRBp05l/6F0jz=l5e=tUD8P=gRODwR3HAJ0NVMBRwLmGmJl5UkqRwLmGmJxG/WOGmRBAwRbRmXQTwRBGwRBGwRKiU5KNq8mG153NVckEvk0N35lpg5t20oSVIRBGwRKDIBmGwRBHQ5liVolWw=3NCJPpg80Aw5PUPJk=gkPE48Y2PokgvIB1wcQTwRBGwRBGwRBp05l/6F0jz=l5e=tUD8P=gRODwRbJQEOwmRBAwRbGQRbVIRBGwRBGwRBHq=kpeFYAwiK=e8KUxJN2U=PN1okp45Y1nBmGwRBH2BwTwRBGwFKNm8tUbRt=e8YEDol2CRtjV8P=v=U26F0vg502D=k5vIB1wcQTwRBGwRBGwRBp05l/6F0jz=l5e=tUD8P=gRODwRUUiaN2kNqRwLmGmNe2saNRmXQTwRBGwRBGwRKiU5KNq8mG153NVckEvk0N35lpg5t20oSVIRBGwRKDIBmGwRBHQ5liVolWw=3NCJPpg80Aw=liv50N+kPjg=PUPckHg=BwgRKVIRBGwRBGwRBG153NVckEvk0N35lpg5t20oaG2RBi=aMUzRmGCRBikNe5zRmGCRBiuuNpRRbVIRBGwRBGwRBHq=kpeFYAwiK=e8KUxJN2U=PN1okp45Y1nBmGwRBH2BwTwRBGwFKNm8tUbRt=e8YEDol2CRtND=kie=U2CJkETcl/UF0vUIBpV5lEUF0Nzo3UD5kgTokgToaQwiKje8l2Y5N2Y80E4o0v4J0vgLBG1olieFYUbk0hTckET=kEeF31VRBpD=lgvFljzo3UAol=6F0vg5tww7aHYJl/x=a1wcQTwRBGwRBGwRBpeo02b80hz=kgT=l=e5YjCRODwR3EeJ3EDRmGCRBiqRbVIRBGwRBGwRBG1cKUbclegk02A=lET=kE65qG2RBix5KiVRmGCRBiU8mRnBmGwRBGwRBGwiKE650j18e2eFl2DoKUCcaG2RBi/5PiDRmGCRBiQF0p3oBRwLmGmoYhVc3wmRBAwRYE0JY6hRbVIRBGwRBGwRBG1olEeo0UPk0U0ckg68ljbot1w7aGm=kUe80smXQTIRBGwRBGwRBG153NVckEvk0N35lpg5t20oaG2ROGnBmGwRBGwRBGw=Y2qRBw1J0UDol66k0j1olETokvUJ09w7aGQXqG1J0UDol66k0j1olETokvUJ09w7BG1cKUbclegk02A=lET=kE65qw18KNb=kEUk0g65KN+otU+ot1gXqG1J0UDol66k0j1olETokvUJ09dIq1wcQTwRBGwRBGwRBGwRBG1o0jdJlg6kPgvctN1Jl/4o0ww7aH4FYuTiKNd80E4oe2UcYvU=3N0JlATit/eJ0Nx=N2fckpecYvgcYvgLBG1J0UDol66k0j1olETokvUJ09VROsgISVIRBGwRBGwRBGwRBGwiK=e8KUxJN2U=PN1okp45Y1wIxDwithvo0jfcN2+JkvU=tjV80hTRBVwithvo0jfcN2+JkvU=tjV80hTRBTwIBpdJlhvo3UzcYjA=lpv8t2doBGdRBpbokpg83UzJlpgJ0vgctNb8q1nBmGwRBGwRBGwzuTIRBGwRBGwRBG1o0jdJlg6kPgvctN1Jl/4o0ww7aG1olieFYUbk0hTckET=kEeF31wLaG1FkNh80=ek0=4J02dot2bot1nBmGwRBGwRBGwitiU8Y2foN2QJlhT80ggFBG2RBp05l/6F0jz=l5e=tUD8P=gRBMwithvo0jfcN2+JkvU=tjV80hTXQTwRBGwRBGwRBp4JPUxclvz5tvU8tjbot2DRODwiK=e8KUxJN2U=PN1okp45Y1wiaGqXQTwRBGwRBGwRBpAclpgotjz5tUD=l=4=tUdoBG2RBF3XQTwRBGwRBGwRt=4FmGTitEg5tUCcN2v=tUbotUA=lE4RODwWOVwitEg5tUCcN2v=tUbotUA=lE4ROQwiKje8l2Y5N2Y80E4o0v4J0vgRBVwitiU8Y2foN2QJlhT80ggFOVwitEg5tUCcN2v=tUbotUA=lE4IqVgRKVIRBGwRBGwRBGwRBGwitj/okH45U2YJlpUcYv6FBG2RBpbokpg83UzJlpgJ0vgctNb8qGURBpAclE68lUz8PvUJ0vUFPUPIBpV5lEUF0Nzo3UD5kgTokgToa1nBmGwRBGwRBGwRBGwRBpvFlUQ8P=z=Yj1=kgTckGw7aH4FYuTiKNd80E4oe2UcYvU=3N0JlATit/eJ0Nx=N2fckpecYvgcYvgLBG1JkjgFt20k0=v=tN+oKUQLBG/Ia1nBmGwRBGwRBGwRBGwRBpdJlhvo3UzcYjA=lpv8t2doBG2RBp05l/6F0jz=l5e=tUD8P=gRBVwitj/okH45U2YJlpUcYv6FBGdRBpbokpg83UzJlpgJ0vgctNb8qGdRBw1JkjgFt20k0=v=tN+oKUQRBVwitEg5tUCcN2v=tUbotUA=lE4IaGfRBw1JkjgFt20k0=v=tN+oKUQRBVwitEg5tUCcN2v=tUbotUA=lE4ISVIRBGwRBGwRBGwRBGwiKiU8tNC8e2m80hT5leeFkNCRODwIBpbokpg83UzJlpgJ0vgctNb8qGdRBp4JPUxclvz5tvU8tjbot2DIaGURORnBmGwRBGwRBGwRBGwRBpYokjvc3Nzckpg5tjboK1w7aGviKiU8tNC8e2m80hT5leeFkNCXQTwRBGwRBGwRBGwRBHg=mGTiKpUoYj/JN2fckvg=3UxotUDoB1IRBGwRBGwRBGwRBGwRBGwRBpYokjvc3Nzckpg5tjboK1w7aG1FYNV=l64k0i4o0ve8kN/5lAnBmGwRBGwRBGwRBGwRtUYRBw1=YU/JkgekPUDokpvJ0v6IaHnBmGwRBGwRBGwRBGwRBGwRBG1cKU1olvvkPpg5tNY80pgo0wwLbDwiKNd80E4oe2UcYvU=3N0JlATiKE650j18e2eFl2DoKUCcaQwithvo0jfcN2+JkvU=tjV80hTRBMwiKv6JPUhoN24ctNbotNxckFTiKE650j18e2eFl2DoKUCca1VROsgXQTwRBGwRBGwRBGwRBH2RtNVF0MwcQTwRBGwRBGwRBGwRBGwRBGwiKv6=tUTJN2DokpU=Y21olhTRBA2RBpeo02b80hz=kgT=l=e5YjCIBpgJPNdok5zok=6c3UhJlEToaQwithvo0jfcN2+JkvU=tjV80hTRBMwiKv6JPUhoN24ctNbotNxckFTitUb5lhg5e2g53U+clevJ0vgIaQwWa1nBmGwRBGwRBGwRBGwRKDIRBGwRBGwRBH2BwTwRBGwRBGwRKiU5KNq8mG1cKU1olvvkPpg5tNY80pgo0wnBmGwRBH2BwTwRBGwFKNm8tUbRt=e8YEDol2CRtgeoYN0JN2fclg6c3UdoawgRKVIRBGwRBGwRBG153NVckEvk0N35lpg5t20oaG2Rj2zpsUake9wLmG3L0UhJl5UFq93RBAwiKpTokWh73UY8Pj6o0wnBmGwRBGwRBGwitEg5tUCcN2v=tUbotUA=lE4RODwJYN+okpgk0jx5kjeJ0v6cYv6IBp05l/6F0jz=l5e=tUD8P=gISVIRBGwRBGwRBG15tvgFqDZ=02mJkEUk0hvo0jDcl66RODwitEg5tUCcN2v=tUbotUA=lE4XQTwRBGwzuTIRBGwRKHeJY/gJqHY5l6b5tU48mH48tNx=kpzclETJkpT=kg6Fqw18KNb=kEUk0g65KN+otU+ot1VRBp/5le4=3Nz=Y2b80hT80EToa1wcQTwRBGwRBGwRt=4FYNvJ0wwIBpV5lEUF0Nzo3UD5kgTokgToaHvFqG15lh4J02dk0N+otNY5k=v8mG27mG1cKUbclegk02A=lET=kE65q1wcQTwRBGwRBGwRBGwRBHx50UDJ0wwIBpeo02b80hz=kgT=l=e5YjCIaHnBmGwRBGwRBGwRBGwRBGwRBHbJkEURB5U8ljg8j2eF0NzJl/PJkUxixTIRBGwRBGwRBGwRBGwRBGwRtEvF0Mwi0jV8t2PkPHvFPEP=j2Q5liVolW3XwTwRBGwRBGwRBGwRBGwRBGwJ0jx=aG3Jl/V8P5zFtjxFP51kPpqJkETixTIRBGwRBGwRBGwRBGwRBGwRtEvF0Mwi0jV8t2Pk0p48ljg8U2eFtpv5tM3XwTwRBGwRBGwRBGwRBGwRBGwJ0jx=aG3Jl/V8P5z5kHV80j1kPHV5l5g8mF+BmGwRBGwRBGwRBGwRBGwRBHbJkEURB5v8t/45e248tpzFt/e=0UCixTIRBGwRBGwRBGwRBGwRBGwRBGwRBG4Lq94Lq94LQTwRBGwRBGwRBGwRBGwRBGwRBGwRBpDotUxLS63cl6UoYjzcY2xot2boKUdoBw15lh4J02dk0N+otNY5k=v8mQwiKv6JPUhoN24ctNbotNxckFgXQTwRBGwRBGwRBGwRBGwRBGwRBGwRtiq=ljdXQTwRBGwRBGwRBGwRBH2BmGwRBGwRBGwzuTIRBGwRBGwRBHg=mGTiKje8l2Y5N2Y80E4o0v4J0vgIaHnBmGwRBGwRBGwRBGwRt=4FYNvJ0wwIBpV5lEUF0Nzo3UD5kgTokgToaHvFqG15lh4J02dk0N+otNY5k=v8mG27mG1cKUbclegk02A=lET=kE65q1wcQTwRBGwRBGwRBGwRBGwRBGwFP5g5tETRBw15lh4J02dk0N+otNY5k=v8m1wcQTwRBGwRBGwRBGwRBGwRBGwRBGwRB94Lq94Lq94BmGwRBGwRBGwRBGwRBGwRBGwRBGwJ0jx=aG35kiVk0gv5Ys3XwTwRBGwRBGwRBGwRBGwRBGwRBGwRtEvF0MwiPNq8j2Y8PihixTIRBGwRBGwRBGwRBGwRBGwRBGwRBHbJkEURB5eFY/zFPpU=qF+BmGwRBGwRBGwRBGwRBGwRBGwRBGwJ0jx=aG3=levolQ3XwTwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBG15tvgFqDZ=PUC=lgvkPg4F0v4J0v6o0wTiKNd80E4oe2UcYvU=3N0JlAVRBpAclE68lUz8PvUJ0vUFPUPISVIRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwJ3iUJlVnBmGwRBGwRBGwRBGwRBGwRBH2BmGwRBGwRBGwRBGwRKDIRBGwRBGwRBH2BmGwRBH2BwTwRBGwFKNm8tUbRt=e8YEDol2CRtUD=l=6=e2Y805v=KNqoaw18KNb=kEUk0g65KN+otU+ot1gRKVIRBGwRBGwRBHg=mGTRkEDF3H4Fqw18KNb=kEUk0g65KN+otU+ot1VRBRVRm1gRKVIRBGwRBGwRBGwRBGwFYND5kiCRBpV5lEUF0Nzo3UD5kgTokgToSVIRBGwRBGwRBH2BwTwRBGwRBGwRBp05l/6F0jz=l5e=tUD8P=gRODw=kvQ8t21=awmLBRVRBpV5lEUF0Nzo3UD5kgTokgToa1nBmGwRBGwRBGwolJwIBs1pD/7u1jWMeV3lMUikDE7S1=ipq55lq5v8t/45e2180evol6z5kH1JkpUieDgBmGwRBGwRBGwRBGwRKiU5KNq8mG153NVckEvk0N35lpg5t20oNV/kSVIRBGwRBGwRBG1J0UDol66k0j1olETokvUJ09w7aHmJkEUEbpz=tNb80pUIKEDF3iU5mw153NVckEvk0N35lpg5t20oNVQka1gXQTwRBGwRBGwRBpbokpg83UzJlpgJ0vgctNb8qG2RsHfF02Ck0pUJ021=aw1J0UDol66k0j1olETokvUJ09VRKpq5lMgXQTwRBGwRBGwRBpdJlhvo3UzcYjA=lpv8t2doBG2RBRmXQTIRBGwRBGwRBG15tvgFqDZ80/UF0NDkPUbotjDotN+ckWTitEg5tUCcN2v=tUbotUA=lE4LBHDF3NUISVIBmGwRBGwRBGwFYND5kiCRBp05l/6F0jz=l5e=tUD8P=glxj5XQTwRBGwzuTIRBGwRKHeJY/gJqHY5l6b5tU48mHb5kp4c3Nz8PgT8056o0sTIaHnBmGwRBGwRBGwiK=e8KUxJN2U=PN1okp45Y1w7aGmJ0vv8mRwLmGm=0NV80FmRBAwRm6DcKumXQTwRBGwRBGwRBpbokpg83UzJlpgJ0vgctNb8qG2RBimJkEUEbumRBAwRU21=lE4=BRwLmGm=aRnBmGwRBGwRBGwiKNd80E4oe2UcYvU=3N0JlAw7aGmFPpqFmRwLmGm=kJmXQTwRBGwRBGwRBpAclE68lUz8PvUJ0vUFPUPRODwRbJQEOwmRBAwRbGQRbVIRBGwRBGwRBG1cKU1olvvkPpg5tNY80pgo0ww7aGm5l6VolAmRBAwRYVmXQTwRBGwRBGwRBpAclE68lUz8PvUJ0vUFPUPRODw5tUh=awgRBDwol6D5YjVIBpAclE68lUz8PvUJ0vUFPUPIaG4ROFnBmGwRBGwRBGwitiU8Y2foN2QJlhT80ggFBG2RtpgFY6v8lMTke2taM/jke9gXQTwRBGwRBGwRBpgJPNdok5zok=6c3UhJlEToaG2RBiYol/URmGCRBiz=0NDk0WmRBAwRY2C5tNCRmGCRBiDFqRnBmGwRBGwRBGwit2bckE6oj2DotNVJlET8Puw7aGmotNv=tMmRBAwR3RmXQTwRBGwRBGwRBpvFlUQ8P=z=Yj1=kgTckGw7aGm=YUV=aRwLmGmkPHe5BRwLmGmk0E483umRBAwRYNC5KWmXQTwRBGwRBGwRBpq=l/U8Y2zJY2doKNh5kje8mG2RBiQctEU8jGmRBAwRYj3=N9mRBAwRYWQWSGQRmGCRBRqRbVIBmGwRBGwRBGwolJwItUxF0NDIBpzuD27aDUjlqpq=l/U8Y2zJY2doKNh5kje8UDgIuTwRBGwRBGwRBGwRBHq=kpeFYAnBwTwRBGwRBGwRBpvoPNdotNARODw=YjVF0MnBmGwRBGwRBGwolJwIt=g8tNz=kvgFPpxIBpm=l64oYUzFtjdot2fokGwLmG3LqFwLmG153NVckEvk0N35lpg5t20oa1gRKVIRBGwRBGwRBGwRBGwithvo0jfcN2+JkvU=tjV80hTRODw=YUV=leDoleUIBpm=l64oYUzFtjdot2fokGwLmG3LqFwLmG153NVckEvk0N35lpg5t20oa1nBmGwRBGwRBGwRBGwRtUYRBw1o0jdJlg6kPgvctN1Jl/4o0ww7BG1cKUbclegk02A=lET=kE65q1wcQTwRBGwRBGwRBGwRBGwRBGwitjd5lhT=kww7aHDF3NUXQTwRBGwRBGwRBGwRBH2RtNVF0MwcQTwRBGwRBGwRBGwRBGwRBGwolJwIBj1=l=g8YN1IB5=aMUzp12aSMjzSDV3Ia1wcQTwRBGwRBGwRBGwRBGwRBGwRBGwRtpU=YUC=aw3lMUikD=7M1eHkD2LiqQwWa1nBmGwRBGwRBGwRBGwRBGwRBH2BmGwRBGwRBGwRBGwRBGwRBG1FPUPJlp4kPN/8PpTcl66RODwitUb5lhg5e2g53U+clevJ0vgIBpm=l64oYUzFtjdot2fokGwLmG3LqFwLmG153NVckEvk0N35lpg5t20oa1nBmGwRBGwRBGwRBGwRBGwRBG1FPUPJlp4kPN/8PpTcl66RODwitEg5tUCcN2v=tUbotUA=lE4IBpeo02b80hz=kgT=l=e5YjCIBpxck5v=t2z5kj45tv6831gISVIRBGwRBGwRBGwRBGwRBGwRtNbot9wiKE650j18e2eFl2DoKUCcSVIRBGwRBGwRBGwRBGwRBGwRKiU5KNq8bVIRBGwRBGwRBGwRBGwzuTwRBGwRBGwRKDIBmGwRBGwRBGwitjd5lhT=kww7aHDF3NUXQTwRBGwRBGwRKpqcaHnBmGwRBGwRBGwRBGwRBpYokjvc3Nzckpg5tjboK1w7aGmMDNaN1MmRBAwRUizuMpsRmGCRBiaRbVIRBGwRBGwRBGwRBGwit5g8Yjh8e2P8P=eoYUQ5kww7aGmajpMMBRwLmGmkDv7MqRwLmGmNBRnBmGwRBGwRBGwRBGwRBp65KNx=lvzF0vg8ljbotsw7aGmM1NESepjRmGCRBizuMpsMmRnBmGwRBGwRBGwRBGwRBpxolpUJYUzFYUT=lET8PEgRODwRYpgF0E45aRwLmGm83u+RbVIRBGwRBGwRBGwRBGwiKjg8YNY5N2D=kET8PH4J0Mw7aGmFKigJqRwLmGm=STmXQTwRBGwRBGwRBGwRBG15YUd80/ekPUbot2b=lEvo0Mw7aGm8lNqJ0vvRmGCRBiC5OTmXQTwRBGwRBGwRBGwRBG150Uq5k=Uk02qckpTckgURODwRY2q=tNqXmRnBmGwRBGwRBGwRBGwRBp4FYjh80pz=PUC5lgvoYUhRODwRYj1=KiURmGCRBixFxTmXQTIRBGwRBGwRBGwRBGwitUx=leUoU2gFtNY5k5eFK1w7aGmWSRPLbGCRmGCRBRQLbsmXQTwRBGwRBGwRBGwRBG15kpgJ02DkPg4J0NDotNh=kJw7aGmajpMMj2ORmGCRBiWaMNXRmGCRBiMkDUuRbVIRBGwRBGwRBGwRBGwith65tUCcN2g5tvv83NDoaG2RBiRNjpukewmRBAwRU2tSeikRmGCRBiHM1pjpBRwLmGmkD=7MmRnBmGwRBGwRBGwRBGwRBpd=k=v=t2z50NV=kggcK1w7aGmRe68uaRwLmGmLNgvLkTQRmGCRBRhXaV47aRwLmGmLjDdiBRwLmGmRqRnBmGwRBGwRBGwRBGwRBpvFKUYokvzolpvJ0vgJ0j/RODwRUijMNNjRmGCRBiSNj2EpaRwLmGmNsv7pBRnBmGwRBGwRBGwRBGwRBp6=0j0JlvzFYjh80h65tvg5BG2RBpKSs2BuM/Slq5=aMUzuD2Xp1UKiee8iPNq8j2Y8PihieDnBmGwRBGwRBGwRBGwRBph=lvg8lNz8kUboKUY5lEvoBG2RBiKpNumXQTwRBGwRBGwRBGwRBG15tjqoliUkP5v8YNd5kpTRODwRYEeFYQmRBAwRU2g8Y1mRBAwR3umXQTwRBGwRBGwRBGwRBG18l2180eek0U0cl/v5tU0RODwR3EDFYNv8aRwLmGmk0E48mRwLmGm5tNA5j9mRBAwRYEq=ljD=aRnBmGwRBGwRBGwRBGwRBpU=tUdol/z=lhTckgTokpgRODwRYvD5KGmXQTwRBGwRBGwRBGwRBG1FtNxJkv6kPpT5kvv5tNdoBG2RBih=kpT80umXQTwRBGwRBGwRBGwRBG150Nhcl=ekP5gFPUbot2A=aG2ROGnBmGwRBGwRBGwRBGwRBpeJ0jhckvzJlie8Y2PokJw7aGQXQTIRBGwRBGwRBGwRBGwit5g8kUC5N2dot2Pck=4=tsw7aHgFPEU5Bw1keEjMU=jMUV1=YU/JkgekPUDokpvJ0v6ka1w7qG1keEjMU=jMUV1=YU/JkgekPUDokpvJ0v6kaG+RBpgF0Nh=lgzokHU=3NP5kH6XQTwRBGwRBGwRBGwRBG1=k56oYUQk0ig8KUdol=gomG2RtUxF0NDIBpzMDNaN1Nalqpe5tUb8PpzcY2b=kpT=leU5UDgRO9wij2SpNilpNi8iKNDolE45j2+80EU5tvU8lN0kaG+RBvgFPEU5Bw1keEjMU=jMUV1oPUDol66k0UDotjC5kpgka1w7qG1keEjMU=jMUV1oPUDol66k0UDotjC5kpgkaG+RBpzMDNaN1Nalqp65KNx=lvzF0vg8ljbotj5ISVIRBGwRBGwRBGwRBGwitEe8lUA8e2e8YU15k5650sw7aG1keEjMU=jMUV1=0UCJle4kP5453NfokHecjDnBmGwRBGwRBGwRBGwRt=4FmGTiKEg8t2fcN2T806g5tveJ0NYRODwWOVwiKEg8t2fcN2T806g5tveJ0NYROQwFPpq8tNCIBpb5legct2z5l6g=KNPck5vISVwiKEg8t2fcN2T806g5tveJ0NYIqVgRKVIRBGwRBGwRBGwRBGwRBGwRBpP=le6=3Nz50UxclET8PvURBV2Rt2q=Bvx5lix5KRTitEe8lUA8e2e8YU15k5650sVRBpxol/4o3Uzot2CokpT5lEU=mQwWa1gXQTwRBGwRBGwRBGwRBGwRBGwiKNbJle6cj2vJ3NC8P5g5mGd7aG1F0UV80g6k0v48YUDoKNb=lJwImH4FYuTFPNmFPpqIBpb5legct2z5l6g=KNPck5vLBG1F0UV80g6k0v48YUDoKNb=lJVROsgISVIRBGwRBGwRBGwRBGwzuTIRBGwRBGwRBGwRBGwit/eoKU/5aG2Rt=v8KEUXQTIRBGwRBGwRBGwRBGwolJwIBvgFPEU5Bw1keEjMU=jMUV1JkH6=YUAk0U1JlETolEvFNDgIaGYimGTij2SpNilpNi8itjQcl=gcj2g=tjbotUbJkj5ROD2RBph=lvg8lNz8kUboKUY5lEvoB1gRKVIRBGwRBGwRBGwRBGwRBGwRBpeF0j180vzolvUF0jdoK1w7aHYJl/x=SVIRBGwRBGwRBGwRBGwRBGwRtUYRBvY5l6b5tU48U2UctUx5KWTiKpvFYUm=N2PJl6UoPNDoB1gRKVIRBGwRBGwRBGwRBGwRBGwRBGwRBG1ctN+=kgek0veJ0vgctNxoaG2RtEeFY/zol6g5Bw1cl5v5YjTkPiv8l2dckpTokugXQTwRBGwRBGwRBGwRBGwRBGwRBGwRtEeFY/zF0ND8PHDIBpA=kgUc3NzoKNbotUA=kEgLBHONNiWSeHMkeijNjNaSUpauM6Sp1NaLBHDF3NUISVIRBGwRBGwRBGwRBGwRBGwRBGwRBHb5kiVkPEU5t2Q5Bw1ctN+=kgek0veJ0vgctNxoaQwueNaSs2uNj2OSD6XpMEMNsUEpM2NNBQwWSMgXQTwRBGwRBGwRBGwRBGwRBGwRBGwRtEeFY/zF0ND8PHDIBpA=kgUc3NzoKNbotUA=kEgLBHONNiWSeHMkepiSMN7NNuVROseISVIRBGwRBGwRBGwRBGwRBGwRBGwRBHb5kiVkPEU5t2Q5Bw1ctN+=kgek0veJ0vgctNxoaQwueNaSs2uNj2RpMjspNRVRt=v8KEUISVIRBGwRBGwRBGwRBGwRBGwRBGwRBHb5kiVkPEU5t2Q5Bw1ctN+=kgek0veJ0vgctNxoaQwueNaSs2uNj2SMD/zN1NaaM==as2SNBQw=YjVF0MgXQTwRBGwRBGwRBGwRBGwRBGwRBGwRtEeFY/zF0ND8PHDIBpA=kgUc3NzoKNbotUA=kEgLBHONNiWSeHMkeESSj2lpNiipUUupMNaLBHYJl/x=a1nBmGwRBGwRBGwRBGwRBGwRBGwRBGwJPNq8j2x=kp4FKuTiKvUcYN+5N2T5lETokvUF01VRsENM1/7MjpzajpMMsvjuMpjMmQwJkiqJk1TRmpxolpUJYUzFYUT=lET8PEgRBpP=le6=3Nz50UxclET8PvURmQwRmpPokie5YNz8Pi65tv6cYMwiKNbJle6cj2vJ3NC8P5g5mRVRBR1FlUC=l=ekPpUF0v4Ft2b=aG1=k56oYUQk0ig8KUdol=gomRVRBR15YUd80/ekPUbot2b=lEvo0MwitEe8lUA8e2e8YU15k5650smLBGmit2qJle4=j23cl6eoYjfolDwit5g8kUC5N2dot2Pck=4=tsmIa1nBmGwRBGwRBGwRBGwRBGwRBGwRBGwiKUh=kpT=lQw7aHDoleUIB1nBmGwRBGwRBGwRBGwRBGwRBGwRBGwiKNxJlp4oj2gotNxJlhTcaG2RsHb5kiVk0NA=lWTiKvUcYN+5N2T5lETokvUF01gXQTwRBGwRBGwRBGwRBGwRBGwRBGwRBpg5tvv5YjmRODw5tUh=awgRBDwiKUh=kpT=lQnBmGwRBGwRBGwRBGwRBGwRBGwRBGwit/eoKU/5aG2RBpg5tvv5YjmROQwWSunBmGwRBGwRBGwRBGwRBGwRBGwRBGwJPNq8j2b8t2x=aw1ctN+=kgek0veJ0vgctNxoa1nBmGwRBGwRBGwRBGwRBGwRBGwRBGwiKNxJlp4oj2gotNxJlhTcaG2RKpqolDTiKNxJlp4oj2gotNxJlhTca1nBwTwRBGwRBGwRBGwRBGwRBGwRBGwRtUYRBvQFYN3k0ev5tETIBpd=k=v=t2z50NV=kggcK1VRBpeF0j180vzolvUF0jdoK1gIaHnBmGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBpeF0j180vzolvUF0jdoK1w7aG15tvgFqDZokpU=3U3k0=4=0j15kigIBpeF0j180vzolvUF0jdoK1gXQTwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBG1J0Ub=levkPND5le65YN0RODwuBpbokpg83UzJlpgJ0vgctNb8qw15lh4J02dk0N+otNY5k=v8mw15kEv=t2Tk0UT=kEvo0v6Ia1nBmGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRtUYRBw1Jlheo0vUcB1wcQTwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwuKNC8tUCoqw1JYNC80ggkPHvo0v4oYUQRBAwiq93RBAwiK=e8KUxJN2U=PN1okp45Y1gXQTwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwitj/okH45U2YJlpUcYv6FBw1JYNC80ggkPHvo0v4oYUQRBAwiq93RBAwiK=e8KUxJN2U=PN1okp45Y1VRBpeF0j180vzolvUF0jdoK1VRs/7uDhzpNwgXQTwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBH2BmGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRtUYRBwv=tNYol6U=Bw3lMUikD=7M1eHkD2Liq1gRKVIRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRtpU=YUC=aw3lMUikD=7M1eHkD2LiqQwWa1nBmGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRKDIBmGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRtNbot9witEgJ0NhJN2e5KNhck=U5bVIRBGwRBGwRBGwRBGwRBGwRBGwRBH2BmGwRBGwRBGwRBGwRBGwRBH2BwTwRBGwRBGwRBGwRBGwRBGwolJwIBw18KNTckjeIaGYimGTRapeF0j180vzolvUF0jdoK1gRBJYRBvY5l6b5tU48U2UctUx5KWTite4=t2h5N2g53UVJkpg5m1gIaHnBmGwRBGwRBGwRBGwRBGwRBGwRBGwiKNP8P=4cj2hckvUcYv4o0v4omG2RtjqFYj6IGTwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBG1=lpgo0UVk0NdoKU+otUDoaG27mHvF3ivcawIRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBpQ=kEvcKUz5tvectjD=lhTRODZRBiKpNumLGTwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwit2bckE6oj2DotNVJlET8Puw7SAwRmpxolpUJYUzFYUT=lET8PEgRBpP=le6=3Nz50UxclET8PvUkKiF8mpPokie5YNz8Pi65tv6cYMwiKNbJle6cj2vJ3NC8P5g5U/qktA1FlUC=l=ekPpUF0v4Ft2b=aG1=k56oYUQk0ig8KUdol=goU/qktA15YUd80/ekPUbot2b=lEvo0MwitEe8lUA8e2e8YU15k5650jFFU/Cit2qJle4=j23cl6eoYjfolDwit5g8kUC5N2dot2Pck=4=tsmBmGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRB1IRBGwRBGwRBGwRBGwRBGwRBGwRBGgXQTwRBGwRBGwRBGwRBGwRBGwRBGwRBpe50208Pvz8kUA=kgT80hT80Tw7aG18l2180eek0U0cl/v5tU0IBpe50208Pvz8kUA=kgT80hT80TgXQTIRBGwRBGwRBGwRBGwRBGwRBGwRBG15kEv=t2Tk0UT=kEvo0v6RODwuBpgJPNdok5zok=6c3UhJlEToaw1cl5v5YjTkPiv8l2dckpTokuVRt=v8KEULBG15k545Y2Ak0e6ctN+ot2dot2fISVIRBGwRBGwRBGwRBGwRBGwRBGwRBHg=mGTFKiU=e2hJkpboBw1o0N0Jlp4kP5U8tN+okv6LBG15kEv=t2Tk0UT=kEvo0v6Ia1wcQTwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBG15kEv=t2Tk0UT=kEvo0v6RODwiKpTokWh7YUD=l=6=e2Y805v=KNqoaw15kEv=t2Tk0UT=kEvo0v6ISVIBmGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBpbolEU8ljz5kpe8kU0=kJw7aHGitEg5tUCcN2v=tUbotUA=lE4IBpeo02b80hz=kgT=l=e5YjCIBpeF0j180vzolvUF0jdoK1gISVIRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwolJwIBpvoPNdotNAIaHnBmGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBHG5l6Vol6dIBpm=l64oYUzFtjdot2fokGwLmG3LqFwLmG153NVckEvk0N35lpg5t20oa1nBmGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBG1JkjgFt20k0=v=tN+oKUQIBpm=l64oYUzFtjdot2fokGwLmG3LqFwLmG153NVckEvk0N35lpg5t20oaQwiKNxJlp4oj2gotNxJlhTcaQwSs2Oae2jlB1nBmGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRKDIRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwolJwIBj1=l=g8YN1IB5=aMUzp12aSMjzSDV3Ia1wcQTwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBGw=tNYol6UIB5=aMUzp12aSMjzSDV3LBG/ISVIRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwzuTIRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBGw=lET8qG1J0Ub=levkPND5le65YN0XQTwRBGwRBGwRBGwRBGwRBGwRBGwRKDIRBGwRBGwRBGwRBGwRBGwRKDIRBGwRBGwRBGwRBGwzuTwRBGwRBGwRKDwJ0jDJ0wwIsNAJ0NQ5tU48mG1=tUC5lg4kPNTol6gFKU/Ja1wcQTwRBGwRBGwRBGwRBGIRBGwRBGwRBH2BmGwRBH2BwTwRBGwFKNm8tUbRt=e8YEDol2CRt5voKU0oN2650NqolhTJawgRKVIRBGwRBGwRBG153NVckEvk0N35lpg5t20oaG2Rj2zpsUake9wLmG3L0UhJl5UFq2f8Pve5Y1C=0UYixVIRBGwRBGwRBHg=mGTRl=g8tNz=kvgFPpxIBp05l/6F0jz=l5e=tUD8P=gIa1wcQTwRBGwRBGwRBGwRBHq=kpeFYAw=YjVF0MnBmGwRBGwRBGwzuTIRBGwRBGwRBG1J0UDol66k0j1olETokvUJ09w7aHm=kgg5tUzJkEeFkNboKU+oK1TiK=e8KUxJN2U=PN1okp45Y1gXQTwRBGwRBGwRBpeo02b80hz=kgT=l=e5YjCRODwR1vMNjGmRBAwRU2RSeWmRBAwRUumXQTwRBGwRBGwRBpAclE68lUz8PvUJ0vUFPUPRODwij2SpNilpNi8iKNd80E4oe2UcYvU=3N0Jl65XQTwRBGwRBGwRBpAclpgotjz5tUD=l=4=tUdoBG2Rt=V802qIKEDFY/U8mw1J0UDol66k0j1olETokvUJ09gRB9wWxRgXQTwRBGwRBGwRBpdJlhvo3UzcYjA=lpv8t2doBG2RBpDotUxLS6gotNxok5z=lpecYNfckgT=aw1cKUbclegk02A=lET=kE65q1wiaG1cKU1olvvkPpg5tNY80pgo0wnBmGwRBGwRBGwitiU8Y2foN2QJlhT80ggFBG2RKEeJ3EDFmw1J0UDol66k0j1olETokvUJ09VRBpdJlhvo3UzcYjA=lpv8t2doBGfROWqLBGxWm1nBmGwRBGwRBGwiKpTokWh7YN05kpvoj2mol5go0vUo0vURODwithvo0jfcN2+JkvU=tjV80hTXQTwRBGwRBGwRBpDotUxLS6m80=45KUzFlj+otNYckpTRODwitiU8Y2foN2QJlhT80ggFOVIRBGwRBGwRBHg=mGTRlpU=YUC=luTiPiU=02+8e2vF3U15kv6FaFgIuTwRBGwRBGwRBGwRBH1=l=g8YMTiPiU=02+8e2vF3U15kv6FaFVRBpm=l64oYUzFtjdot2fokGgXQTIRBGwRBGwRBHq=kpeFYAwitiU8Y2foN2QJlhT80ggFOVIRBGwRKDIBmGwRBHQ5liVolWw=3NCJPpg80AwFYN1=l/6kPET80=vJ3UDot1TIaHnBmGwRBGwRBGwolJwIBpDotUxLS6voKN+olez=l56J0ve=PMgBmGwRBGwRBGwRBGwRKiU5KNq8mHDF3NUXQTwRBGwRBGwRBp05l/6F0jz=l5e=tUD8P=gRODwke2saNizkqGCRBF4olev=0NxL056FlN08q6Q8YF3XQTwRBGwRBGwRtUYRBwv=YUV=N2UctUx5KWTiK=e8KUxJN2U=PN1okp45Y1gIaHnBmGwRBGwRBGwRBGwRKiU5KNq8mHYJl/x=SVIRBGwRBGwRBH2BwTwRBGwRBGwRBpbokpg83UzJlpgJ0vgctNb8qG2RtiUcYUDoN2vFPN/5lETckgTcaw153NVckEvk0N35lpg5t20oa1nBmGwRBGwRBGwiKNd80E4oe2UcYvU=3N0JlAw7aGmajpMMBRwLmGmkDv7MqRwLmGmNBRnBmGwRBGwRBGwiKv6JPUhoN24ctNbotNxckFw7aG1keEjMU=jMUV15lh4J02dk0N+otNY5k=v8UDnBmGwRBGwRBGwiKv6=tUTJN2DokpU=Y21olhTRODw=Y/48PRTFPpq8tNCIBpbokpg83UzJlpgJ0vgctNb8q1wLqGxWm1nBmGwRBGwRBGwithvo0jfcN2+JkvU=tjV80hTRODwiKpTokWh7YUT=kEg5e2U=KN+=lg6cYvUIBpAclE68lUz8PvUJ0vUFPUPIaGURBpAclpgotjz5tUD=l=4=tUdoOVIRBGwRBGwRBG1JYNC80ggkPHvo0v4oYUQRODwFPNmFPpqIBpbokpg83UzJlpgJ0vgctNb8qQwithvo0jfcN2+JkvU=tjV80hTRBTwWxRVROWqISVIBmGwRBGwRBGwiKpTokWh7YN05kpvoj2mol5go0vUo0vURODwithvo0jfcN2+JkvU=tjV80hTXQTwRBGwRBGwRBpDotUxLS6voKN+olez=l56J0ve=PMw7aG1JYNC80ggkPHvo0v4oYUQXQTIRBGwRBGwRBHg=mGTRlpU=YUC=luTiPiU=02+8e2vF3U15kv6FaFgIuTwRBGwRBGwRBGwRBH1=l=g8YMTiPiU=02+8e2vF3U15kv6FaFVRBpm=l64oYUzFtjdot2fokGgXQTwRBGwRBGwRKiU5KNq8mG1JYNC80ggkPHvo0v4oYUQXQTwRBGwzuTIRBGwRKHeJY/gJqHY5l6b5tU48mHeF0NA80pz=YNf8PEU8t2CIB1wcQTwRBGwRBGwRtUYRBw15tvgFqDZFl23clegk0j38PpT8PpTJkWgBmGwRBGwRBGwRBGwRKiU5KNq8mHDF3NUXQTwRBGwRBGwRBp05l/6F0jz=l5e=tUD8P=gRODwke2saNizkqGCRBF4olev=0NxL0NY=lE45twC=0UYixVIRBGwRBGwRBHg=mGTRl=g8tNz=kvgFPpxIBp05l/6F0jz=l5e=tUD8P=gIa1wcQTwRBGwRBGwRBGwRBHq=kpeFYAw=YjVF0MnBmGwRBGwRBGwzuTIRBGwRBGwRBG1J0UDol66k0j1olETokvUJ09w7aHm=kgg5tUzJkEeFkNboKU+oK1TiK=e8KUxJN2U=PN1okp45Y1gXQTwRBGwRBGwRBpeo02b80hz=kgT=l=e5YjCRODwR1vMNjGmRBAwRU2RSeWmRBAwRUumXQTwRBGwRBGwRBpAclE68lUz8PvUJ0vUFPUPRODwij2SpNilpNi8iKNd80E4oe2UcYvU=3N0Jl65XQTwRBGwRBGwRBpAclpgotjz5tUD=l=4=tUdoBG2Rt=V802qIKEDFY/U8mw1J0UDol66k0j1olETokvUJ09gRB9wWxRgXQTwRBGwRBGwRBpdJlhvo3UzcYjA=lpv8t2doBG2RBpDotUxLS6gotNxok5z=lpecYNfckgT=aw1cKUbclegk02A=lET=kE65q1wiaG1cKU1olvvkPpg5tNY80pgo0wnBmGwRBGwRBGwitiU8Y2foN2QJlhT80ggFBG2RKEeJ3EDFmw1J0UDol66k0j1olETokvUJ09VRBpdJlhvo3UzcYjA=lpv8t2doBGfROWqLBGxWm1nBmGwRBGwRBGwiKpTokWh73j4=PUhoN2v=02Dot2DotjxRODwitiU8Y2foN2QJlhT80ggFOVIBmGwRBGwRBGwFYND5kiCRBpm=l64oYUzFtjdot2fokGnBmGwRBH2BwTwRBGwFKNm8tUbRt=e8YEDol2CRKUb=kEgJU20806go0vecBwgRKVIRBGwRBGwRBHg=mGTRl=e8YEDol2Ck0NAokEDFqwm=0NDk02Q5tU48mRgIaHnBmGwRBGwRBGwRBGwRKiU5KNq8mHYJl/x=SVIRBGwRBGwRBH2BwTwRBGwRBGwRtUYRBvgFPEU5Bw1kDE7SDhipNV3FKvb=l/uJl5Uk0WQWSGQWm55Ia1wcQTwRBGwRBGwRBGwRBHq=kpeFYAw=YjVF0MnBmGwRBGwRBGwzuTIRBGwRBGwRBG1o02D5kEURODwJlhvFYjqkPUP=lET=kE48K1TISVIRBGwRBGwRBHg=mGTRapd8PpeF0MgBmGwRBGwRBGwRBGwRKiU5KNq8mHYJl/x=SVIBmGwRBGwRBGwiKUxclh4oY9w7aHh=OMTith45KNx=a1nBmGwRBGwRBGwitjd5lhT=kww7aGm5PHziKUxclh4oY9mXQTwRBGwRBGwRBpdotU+8PHvRODw=0NDk02Q5tU48mw1Jlheo0vUcB1nBmGwRBGwRBGwolJwIBs1o0vgcY2QJa1IRBGwRBGwRBGwRBGwFYND5kiCRt=v8KEUXQTIRBGwRBGwRBG1o0vgcY2QJaG2RtUC5K=v8Bw1o0vgcY2QJa1nBmGwRBGwRBGwite4ct2/caG2RKpg8lMTIaGhROW0WOGwImGqEBGfROWQRBTwWbVIRBGwRBGwRBHg=mGTithTokg4Ftsw7mG18l2A8Pj6IaHnBmGwRBGwRBGwRBGwRKEU5tE480hg=aw3FKvb=l/uJl5Uk0WQWSGQWmFVROsVRKpg8lMTIaGdROW0WOGwImGqEBGfROWQRBTwWmQwiq93ISVIRBGwRBGwRBGwRBGwFYND5kiCRKpq5lMnBmGwRBGwRBGwzuTwRBGwzuTIRBGwRKHeJY/gJqHY5l6b5tU48mHe8l2Qok=zolhTJkE4J0veFBwgRKVIRBGwRBGwRBG1pD/7u1jWMeV3lMUikDE7S1=ipq55RODwJkiqJk1TBmGwRBGwRBGwRBGwRB5U8ljg8BFw7SAwi0e+ckHCJ0UxcYjf5lUfJ1HQFY2D80AC8lM3LGTwRBGwRBGwRBGwRBG3=levol/z5kEUk0jV50j6FqFw7SAw=YjVF0MVBmGwRBGwRBGwRBGwRB5eFY/zFPpU=qFw7SAwi0vD5KHxXm94JYj1FtUC=q6g8Y=4LeEEaM/7ps2XL0UC=tNAk0/4=0FCFtvQ7P=g=kF2iqQIRBGwRBGwRBGwRBGwiPNq8j2fJk=viqG27mG3oKpDFKW+Lq2PotjDJYNv5t=gFYMCJ0W4MDeiSs2sSDA4ol61=kwCFtvQ7P=g=kF2iqQIRBGwRBGwRBGwRBGwiPNq8j2Y8PihiqG27mG3oKpDFKW+Lq2PotjDJYNv5K5v8tQC=tN0LP5QLP5g=t5U5j2YokwqL3pA5BFVBmGwRBGwRBGwRBGwRB5v8t/45e2QJkEx50pzFKNm8tUbiqG27mHDF3NULGTwRBGwRBGwRBGwRBG3Jl/V8P5zFtjxFP51kPpqJkETiqG27mHDF3NULGTwRBGwRBGwRBGwRBG3Jl/V8P5z=t2hJlUCkPNQ=tjD=aFw7SAw5Kie=aQIRBGwRBGwRBGwRBGwi0jV8t2PkPNQ8t2v=j2Q8KN3olA3RODZRKpq5lMVBmGwRBGwRBGwRBGwRB5v8t/45e248tpzFt/e=0UCiqG27mHDF3NULGTwRBGwRBGwRBGwRBG3=YjVF0Nz5YjV5lM3RODZRB5e8l2Qok=zolhTJkE4J0veFBFVBmGwRBGwRBGwRBGwRB5d=kUxiqG27mHvF3ivcawIRBGwRBGwRBGwRBGwRBGwRB5U8ljg8BFw7SAwRU2zRmGCRB5gotNxok5z=lpecYNfckgT=aFVBmGwRBGwRBGwRBGwRBGwRBG3=levol/z5kEUk0jV50j6FqFw7SAwRU2zRmGCRB5qck=U=YjzJk5e8tU+oKNhiqQIRBGwRBGwRBGwRBGwRBGwRB5eFY/zFPpU=qFw7SAwRU2zRmGCRB5x5lhe83NzokgU8tjbot2A8qFVBmGwRBGwRBGwRBGwRBGwRBG35kiVk0gv5Ys3RODZRBizkqRwLmG35PUVJl5gk0jDotUdoKUDoBFVBmGwRBGwRBGwRBGwRBGwRBG35kiVk0=4FYD3RODZRBizkqRwLmG3cki6FKUTkPi45t2TolET5lW3LGTwRBGwRBGwRBGwRBGwRBGwi0jV8t2PkPHvFPEP=j2Q5liVolW3RODZRBizkqRwLmG35kp4JPUQkP=g=Y2xotjxoaFVBmGwRBGwRBGwRBGwRBGwRBG3Jl/V8P5zFtjxFP51kPpqJkETiqG27mGmke9mRBAwiPHg=tNAJN245YjD5kjv8aFVBmGwRBGwRBGwRBGwRBGwRBG3Jl/V8P5z=t2hJlUCkPNQ=tjD=aFw7SAwRU2zRmGCRB5U53Nm8Pvzo0v6JPUDotNq=aFVBmGwRBGwRBGwRBGwRBGwRBG3Jl/V8P5z5kHV80j1kPHV5l5g8mFw7SAwRU2zRmGCRB5+Jk5gcY2zFtNdotNdoKM3LGTwRBGwRBGwRBGwRBGwRBGwi0jV8t2Pk02V=j2Q8KN3olA3RODZRBizkqRwLmG3olp45PNCk0ET8PH4J0vU=P13BmGwRBGwRBGwRBGwRB1IRBGwRBGwRBGgXQTwRBGwzuTIRBGwRKHeJY/gJqHY5l6b5tU48mHgFlUbokEzo3N18PpeoKUmIBpV5lEUF0Nzo3UD5kgTokgToa1wcQTwRBGwRBGwRBpd8PpeF0Mw7aHv83NqJl/z5kv4FtNdoKN/IBpV5lEUF0Nzo3UD5kgTokgToa1nBmGwRBGwRBGwiKUxclh4oY9w7aHmJkEUEbpz=tNb80pUIBpd8PpeF0MgXQTwRBGwRBGwRKiU5KNq8mG1ckE6o02f8xVIRBGwRKDIBmGwRBHQ5liVolWw=3NCJPpg80Aw5YUx5l5gkPHv53Nq=kgT=awgRKVIRBGwRBGwRBG15tvgFqDZ5le4FtU0k0Udotjx80ET5kGTISVIBmGwRBGwRBGwolJwIt=e8YEDol2Ck0NAokEDFqwm=0NDk02Q5tU48mRgIaHnBmGwRBGwRBGwRBGwRBpd8PpeF0Mw7aHvF3ivcawIRBGwRBGwRBGwRBGwRBGwRB5U8ljg8BFw7SAw=0NDk02Q5tU48mw1pD/7u1jWMeV3lMUikDE7S1=ipq55lq5d=kUxiee8i0NhJlUVieDgLGTwRBGwRBGwRBGwRBGwRBGwi0NhJlUVkPNx=N2v8K5vckW3RODZRt5U5j24FKpg80ATis5WSDiHSjE8ieUiaN2OSD6taMF3kNV3o0N6Fq55lq5U8ljg8j2eF0NzJl/PJkUxieDgLGTwRBGwRBGwRBGwRBGwRBGwiPNq8j2x5tN3iqG27mH3=kpz8PHDol2CIBpKSs2BuM/Slq5=aMUzuD2Xp1UKiee8i0hUckW3kNV35kiVkPED=lF3ka1VBmGwRBGwRBGwRBGwRBGwRBG35kiVk0gv5Ys3RODZRt5U5j24FKpg80ATis5WSDiHSjE8ieUiaN2OSD6taMF3kNV3o0N6Fq55lq5eFY/zoYj0Ja55IaQIRBGwRBGwRBGwRBGwRBGwRB5eFY/z=Y2q8aFw7SAw=0NDk02Q5tU48mw1pD/7u1jWMeV3lMUikDE7S1=ipq55lq5d=kUxiee8iPNq8j2Y8PihieDgLGTwRBGwRBGwRBGwRBGwRBGwi0jV8t2PkPHvFPEP=j2DFYjxoBFw7SAw=0NDk02Q5tU48mw1pD/7u1jWMeV3lMUikDE7S1=ipq55lq5d=kUxiee8i0jV8t2PkPHvFPEP=j2DFYjxoB55IaQIRBGwRBGwRBGwRBGwRBGwRB5v8t/45e2QJkEx50pzFKNm8tUbiqG27mH3=kpz8PHDol2CIBpKSs2BuM/Slq5=aMUzuD2Xp1UKiee8i0hUckW3kNV3Jl/V8P5zFtjxFP51kPHeJY/gJq55IaQIRBGwRBGwRBGwRBGwRBGwRB5v8t/45e2180evol6z5kH1JkpUiqG27mH3=kpz8PHDol2CIBpKSs2BuM/Slq5=aMUzuD2Xp1UKiee8i0hUckW3kNV3Jl/V8P5z=t2hJlUCkPNQ=tjD=a55IaQIRBGwRBGwRBGwRBGwRBGwRB5v8t/45e2eFt/4JlpzFt/e=0UCiqG27mH3=kpz8PHDol2CIBpKSs2BuM/Slq5=aMUzuD2Xp1UKiee8i0hUckW3kNV3Jl/V8P5z5kHV80j1kPHV5l5g8m55IaQIRBGwRBGwRBGwRBGwRBGwRB5v8t/45e248tpzFt/e=0UCiqG27mH3=kpz8PHDol2CIBpKSs2BuM/Slq5=aMUzuD2Xp1UKiee8i0hUckW3kNV3Jl/V8P5z80/1kPHV5l5g8m55IuTwRBGwRBGwRBGwRBGgXQTIRBGwRBGwRBGwRBGwolJwIBpd8PpeF0N8i0NhJlUVieDgRKVIRBGwRBGwRBGwRBGwRBGwRBp6FPUd80g4RODwiKpTokWh7YU/olEgFe2f5lp45KNTclRTith45KNx=NV3=levolQ3ka1nBmGwRBGwRBGwRBGwRBGwRBHg=mGTFPpqFt2xIBp6FPUd80g4LBG3uBFgIaHnBmGwRBGwRBGwRBGwRBGwRBGwRBGwolJwIKN/JkjvcU24J0v6JYjxokpToaw1ckE6o02f8qQw5Kie=a1gBmGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBpKSs2BuM/Slq5=aMUzuD2Xp1UKiee8i0NhJlUVieDw7aG1ckE6o02f8xVIRBGwRBGwRBGwRBGwRBGwRKDIRBGwRBGwRBGwRBGwzuTIRBGwRBGwRBGwRBGwolJwIBpd8PpeF0N8iPNq8j2fJk=vieDgRKVIRBGwRBGwRBGwRBGwRBGwRBp6FPUd80g4RODwiKpTokWh7YU/olEgFe2f5lp45KNTclRTith45KNx=NV35kiVk0gv5Ys3ka1nBmGwRBGwRBGwRBGwRBGwRBHg=mGTFPpqFt2xIBp6FPUd80g4LBG3Xm94iq1gRKVIRBGwRBGwRBGwRBGwRBGwRBGwRBHg=mGT80h6=YjVk0N+=le6o0v6o0MTiKUxclh4oY9gIuTwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBG1pD/7u1jWMeV3lMUikDE7S1=ipq55lq5eFY/zoYj0Ja55RODwiKUxclh4oY9nBmGwRBGwRBGwRBGwRBGwRBH2BmGwRBGwRBGwRBGwRKDIBmGwRBGwRBGwRBGwRtUYRBw1o02D5kEUlq5eFY/z=Y2q8a55IaHnBmGwRBGwRBGwRBGwRBGwRBG1ckE6o02f8qG2RBpDotUxLS6gFlUbokEzo3N18PpeoKUmIBpd8PpeF0N8iPNq8j2Y8PihieDgXQTwRBGwRBGwRBGwRBGwRBGwolJwIKEDF3H4Fqw1ckE6o02f8qQwixT4LqFgIaHnBmGwRBGwRBGwRBGwRBGwRBGwRBGwolJwIt2dcl=v8j2UcYNhclhTclhUIBp6FPUd80g4Ia1IRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwis5WSDiHSjE8ieUiaN2OSD6taMF3kNV35kiVk0=4FYD3kaG2RBp6FPUd80g4XQTwRBGwRBGwRBGwRBGwRBGwzuTwRBGwRBGwRBGwRBH2BwTwRBGwRBGwRBGwRBHg=mGTith45KNx=NV35kiVkPED=lF3ka1wcQTwRBGwRBGwRBGwRBGwRBGwiKUxclh4oY9w7aG15tvgFqDZokjgJ0Uxk0ge=t2D5lv6Jmw1o02D5kEUlq5eFY/zFPpU=q55ISVIRBGwRBGwRBGwRBGwRBGwRtUYRBvx5KiQ8PWTiKUxclh4oY9VRBF+Lq93Ia1wcQTwRBGwRBGwRBGwRBGwRBGwRBGwRtUYRBv4oPUYJl/z=kgU8kUdoKUd=aw1ckE6o02f8q1gBmGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBpKSs2BuM/Slq5=aMUzuD2Xp1UKiee8iPNq8j2x5tN3ieDw7aG1ckE6o02f8xVIRBGwRBGwRBGwRBGwRBGwRKDIRBGwRBGwRBGwRBGwzuTIRBGwRBGwRBGwRBGwolJwIBpKSs2BuM/Slq5=aMUzuD2Xp1UKiee8i0NhJlUVkPNx=N2v8K5vckW3ka1wcQTwRBGwRBGwRBGwRBGwRBGwis5WSDiHSjE8ieUiaN2OSD6taMF3kNV3=levol/z5kEUk0jV50j6Fq55RODwIBpd8PpeF0N8i0NhJlUVkPNx=N2v8K5vckW3kaGv7aG1pD/7u1jWMeV3lMUikDE7S1=ipq55lq5YJl/x=N20Jl/e=a55ISVIRBGwRBGwRBGwRBGwzuTwRBGwRBGwRBGwRBG1pD/7u1jWMeV3lMUikDE7S1=ipq55lq5v8t/45e2QJkEx50pzFKNm8tUbieDw7aGTith45KNx=NV3Jl/V8P5zFtjxFP51kPHeJY/gJq55RBs2RBpKSs2BuM/Slq5=aMUzuD2Xp1UKiee8i0=v8KEUkP=v8KNUieDgXQTwRBGwRBGwRBGwRBG1pD/7u1jWMeV3lMUikDE7S1=ipq55lq5v8t/45e2QJkEx50pz5KivF0w3kaG2RBw1o02D5kEUlq5v8t/45e2QJkEx50pz5KivF0w3kaGv7aG1pD/7u1jWMeV3lMUikDE7S1=ipq55lq5YJl/x=N20Jl/e=a55ISVIRBGwRBGwRBGwRBGwis5WSDiHSjE8ieUiaN2OSD6taMF3kNV3Jl/V8P5z=t2hJlUCkPNQ=tjD=a55RODwIBpd8PpeF0N8i0jV8t2Pk0p48ljg8U2eFtpv5tM3kaGv7aG1pD/7u1jWMeV3lMUikDE7S1=ipq55lq5YJl/x=N20Jl/e=a55ISVIRBGwRBGwRBGwRBGwis5WSDiHSjE8ieUiaN2OSD6taMF3kNV3Jl/V8P5z5kHV80j1kPHV5l5g8m55RODwIBpd8PpeF0N8i0jV8t2PkPNQ8t2v=j2Q8KN3olA3kaGv7aG1pD/7u1jWMeV3lMUikDE7S1=ipq55lq5YJl/x=N20Jl/e=a55ISVIRBGwRBGwRBGwRBGwis5WSDiHSjE8ieUiaN2OSD6taMF3kNV3Jl/V8P5z80/1kPHV5l5g8m55RODwIBpd8PpeF0N8i0jV8t2Pk02V=j2Q8KN3olA3kaGv7aG1pD/7u1jWMeV3lMUikDE7S1=ipq55lq5YJl/x=N20Jl/e=a55ISVIRBGwRBGwRBH2BmGwRBH2BwTwRBGwFKNm8tUbRt=e8YEDol2CRt2h5kEe=U235kvU=KUdoK1Tit/eJ0Nx=N2fckpecYvgcYvgIaHnBmGwRBGwRBGwith45KNx=aG2RtivF0M0Ej2U8YE4=tMTit/eJ0Nx=N2fckpecYvgcYvgISVIRBGwRBGwRBG1ckE6o02f8qG2RKje50U3cN26cKNDoKUDotjCIBpd8PpeF0MgXQTwRBGwRBGwRKiU5KNq8mG1ckE6o02f8xVIRBGwRKDIBmGwRBHQ5liVolWw=3NCJPpg80Aw=PUC=lgvkPg4F0v4J0v6o0wTit/eJ0Nx=N2fckpecYvgcYvgLBG1FkNh80=ek0=4J02dot2bot1gRKVIRBGwRBGwRBHg=mGTIt=e8YEDol2Ck0NAokEDFqwm=0NDk02Q5tU48mRgIaGYimGT=3NCJPpg806z=kvgFPpxIBiv=tpz8PHDol2CRm1gRBJYRBvY5l6b5tU48U2UctUx5KWTR3NQ=tjD=N24FKpg80AmIa1gRKVIRBGwRBGwRBGwRBGwFP5g5tETRBw18KNb=kEUk0g65KN+otU+ot1gRKVIRBGwRBGwRBGwRBGwRBGwRtEvF0Mwi0NhJlUVixTIRBGwRBGwRBGwRBGwRBGwRBGwRBHg=mGTFPpqFt2xIBp/5le4=3Nz=Y2b80hT80EToaQwiDG3Ia1wcQTwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBG1o02D5kEURODw=0NDk02Q5tU48mw1pD/7u1jWMeV3lMUikDE7S1=ipq55lq5d=kUxiee8i0NhJlUVieDVRt=v8KEUISVIRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwiKUxclh4oY9w7aG15tvgFqDZ80eeFPNYk05ectN1clhTcaw1FkNh80=ek0=4J02dot2bot1gXQTwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBHg=mGTRapd8PpeF0MgRKVIRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRtj1=j24FKpg80ATis5WSDiHSjE8ieUiaN2OSD6taMF3kNV3o0N6Fq55lq5U8ljg8B55LBG1ckE6o02f8q1nBmGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRKDw=l/x=aHnBmGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBHeFtpv5tNz8PHDol2CIBpKSs2BuM/Slq5=aMUzuD2Xp1UKiee8i0hUckW3kNV3=levolQ3kaQwiKUxclh4oY9gXQTwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBH2BmGwRBGwRBGwRBGwRBGwRBGwRBGwzuTwRBGwRBGwRBGwRBGwRBGwRBGwRtiq=ljdXQTwRBGwRBGwRBGwRBGwRBGwJ0jx=aG35kiVk0gv5Ys3XwTwRBGwRBGwRBGwRBGwRBGwJ0jx=aG35kiVk0=4FYD3XwTwRBGwRBGwRBGwRBGwRBGwJ0jx=aG35kiVkPED=lF3XwTwRBGwRBGwRBGwRBGwRBGwRBGwRtUYRBvx5KiQ8PWTiKje8l2Y5N2Y80E4o0v4J0vgLBG3Xm94iq1gRKVIRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwith45KNx=aG2Rt5U5j24FKpg80ATis5WSDiHSjE8ieUiaN2OSD6taMF3kNV3o0N6Fq55lqpV5lEUF0Nzo3UD5kgTokgToNDVRt=v8KEUISVIRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwiKUxclh4oY9w7aG15tvgFqDZ80eeFPNYk05ectN1clhTcaw1FkNh80=ek0=4J02dot2bot1gXQTwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBHg=mGTRapd8PpeF0MgRKVIRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRtj1=j24FKpg80ATis5WSDiHSjE8ieUiaN2OSD6taMF3kNV3o0N6Fq55lqpV5lEUF0Nzo3UD5kgTokgToNDVRBp6FPUd80g4ISVIRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwzaHU8KEURKVIRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRKNQ=tjD=N24FKpg80ATis5WSDiHSjE8ieUiaN2OSD6taMF3kNV3o0N6Fq55lqpV5lEUF0Nzo3UD5kgTokgToNDVRBp6FPUd80g4ISVIRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwzuTwRBGwRBGwRBGwRBGwRBGwRBGwRKDIRBGwRBGwRBGwRBGwRBGwRBGwRBHmFYNvoxVIBmGwRBGwRBGwRBGwRBGwRBHbJkEURB5U8ljg8j2eF0NzJl/PJkUxixTIRBGwRBGwRBGwRBGwRBGwRtEvF0Mwi0jV8t2PkPHvFPEP=j2Q5liVolW3XwTwRBGwRBGwRBGwRBGwRBGwJ0jx=aG3Jl/V8P5zFtjxFP51kPpqJkETixTIRBGwRBGwRBGwRBGwRBGwRtEvF0Mwi0jV8t2Pk0p48ljg8U2eFtpv5tM3XwTwRBGwRBGwRBGwRBGwRBGwJ0jx=aG3Jl/V8P5z5kHV80j1kPHV5l5g8mF+BmGwRBGwRBGwRBGwRBGwRBHbJkEURB5v8t/45e248tpzFt/e=0UCixTIRBGwRBGwRBGwRBGwRBGwRBGwRBG1o02D5kEURODw=0NDk02Q5tU48mw1pD/7u1jWMeV3lMUikDE7S1=ipq55lq5d=kUxiee8it/eJ0Nx=N2fckpecYvgcYvgkaQw=YjVF0MgXQTwRBGwRBGwRBGwRBGwRBGwRBGwRBp6FPUd80g4RODwixs3XQTwRBGwRBGwRBGwRBGwRBGwRBGwRtUYRBw1FkNh80=ek0=4J02dot2bot1w7SDwi0A3IaHnBmGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBp6FPUd80g4RODwis5WSDiHSjE8ieUiaN2OSD6taMF3kNV3=YjVF0Nz5YjV5lM3kSVIRBGwRBGwRBGwRBGwRBGwRBGwRBH2BwTwRBGwRBGwRBGwRBGwRBGwRBGwRtUYRBwvith45KNx=a1wcQTwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBHv=tpz8PHDol2CIBpKSs2BuM/Slq5=aMUzuD2Xp1UKiee8i0hUckW3kNV18KNb=kEUk0g65KN+otU+otU5LBG1ckE6o02f8q1nBmGwRBGwRBGwRBGwRBGwRBGwRBGwzaHU8KEURKVIRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBGw5kH1JkpUk02Q5tU48mw1pD/7u1jWMeV3lMUikDE7S1=ipq55lq5d=kUxiee8it/eJ0Nx=N2fckpecYvgcYvgkaQwiKUxclh4oY9gXQTwRBGwRBGwRBGwRBGwRBGwRBGwRKDIRBGwRBGwRBGwRBGwRBGwRBGwRBHmFYNvoxVIRBGwRBGwRBGwRBGwzuTIRBGwRBGwRBGwRBGwolJwIBpV5lEUF0Nzo3UD5kgTokgToaG27aGmJl/V8P5zFtjxFP51kPHeJY/gJqRgRKVIRBGwRBGwRBGwRBGwRBGwRBpm=l64oYUzFtjdot2fokGw7aGTiKje8l2Y5N2Y80E4o0v4J0vgRBs2RB5Ciq1nBmGwRBGwRBGwRBGwRBGwRBG1o0jdJlg6kPgvctN1Jl/4o0ww7aHzkDpiMU2zRBAwiq2g8lj3=kW4Jk=65PUQJa6Q8YF3XQTwRBGwRBGwRBGwRBGwRBGwolJwIBs1JYNC80ggkPHvo0v4oYUQIaHnBmGwRBGwRBGwRBGwRBGwRBGwRBGwut=g8tNzFKNDk0E483pU83pxIBpdJlhvo3UzcYjA=lpv8t2doBQwRmRgXQTwRBGwRBGwRBGwRBGwRBGwzaHU8KEURKVIRBGwRBGwRBGwRBGwRBGwRBGwRBHG5l6Vol6dIBpdJlhvo3UzcYjA=lpv8t2doB1nBmGwRBGwRBGwRBGwRBGwRBH2BmGwRBGwRBGwRBGwRKDIBmGwRBGwRBGwRBGwRtUYRBw18KNb=kEUk0g65KN+otU+ot1w7SDwRYjV8t2PkPHvFPEP=j2DFYjxoBRgRKVIRBGwRBGwRBGwRBGwRBGwRBpm=l64oYUzFtjdot2fokGw7aGTiKje8l2Y5N2Y80E4o0v4J0vgRBs2RB5Ciq1nBmGwRBGwRBGwRBGwRBGwRBG1o0jdJlg6kPgvctN1Jl/4o0ww7aHzkDpiMU2zRBAwiq2g8lj3=kW4cYveFYjhoa63olJ3XQTwRBGwRBGwRBGwRBGwRBGwolJwIBs1JYNC80ggkPHvo0v4oYUQIaHnBmGwRBGwRBGwRBGwRBGwRBGwRBGwut=g8tNzFKNDk0E483pU83pxIBpdJlhvo3UzcYjA=lpv8t2doBQwRmRgXQTwRBGwRBGwRBGwRBGwRBGwzaHU8KEURKVIRBGwRBGwRBGwRBGwRBGwRBGwRBHG5l6Vol6dIBpdJlhvo3UzcYjA=lpv8t2doB1nBmGwRBGwRBGwRBGwRBGwRBH2BmGwRBGwRBGwRBGwRKDIRBGwRBGwRBH2BmGwRBH2Bwg2BwgY5l6b5tU48mH/5k5g=PUzckve5tv65tvv8mw18KNb=kEUk0g65KN+otU+ot1gRKVIRBGwRBph8Pv4Fk1w7aHx5KiDFmw18KNb=kEUk0g65KN+otU+ot1VRtjqFYj6IB5pixDZiPM3LBG3NqF27m5ViqQwiDM37SA3FqFVRB5aixDZiPG3LBG3NBF27m5SiqQwie137SA3amFVRB5NixDZiDD3LBG3aaF27m5aiqQwiD937SA3lBFVRB5uixDZixF3LBGEBmGwRBGwRBGwiDs37SA3pqFVRB5SixDZi0s3LBG3pBF27m57iqQwiDJ37SA3omFVRB5KixDZiPu3LBG3aBF27m5LiqQwiDT37SA3oaFVRB5LixDZiD13LBG3SBF27m5WiqQwieT37SA37aFVRGDIRBGwRBGwRBG3lBF27m5diqQwiDW37SA3umFVRB5lixDZiDA3LBG3umF27m5RiqQwiDA37SA3paFVRB5EixDZieF3LBG3FaF27m5YiqQwiPF37SA3MaFVRB5UixDZi0W3LBG3FmF27m51iqQwOuTwRBGwRBGwRB5DixDZi0w3LBG3caF27m5/iqQwiPM37SA3uqFVRB5gixDZi0D3LBG38qF27m5MiqQwiPG37SA3=qFVRB5vixDZi093LBG3FqF27m5liqQwi0u37SA3EaFVRB5YixDZiPT3LBGEBmGwRBGwRBGwi0F37SA35qFVRB5TixDZiPJ3LBG3omF27m5miqQwi0V37SA3WaFVRB5VixDZieM3LBG3cmF27m5AiqQwiPw37SA3LqFVRB5bixDZiDJ3LBG35mF27mFDiqQwi0R37SA3XBFVRGDIRBGwRBGwRBG38mF27mFxiqQwi0D37SA3laFVRBF/ixDZi0M3LBG3WmF27mFQiqQwixW37SA3MBFVRBFDixDZiDs3LBG3EaF27mF0iqQwixJ37SA3IqFVRBFPixDZi0A3LBG3XBF27mF6iqQwOuTwRBGwRBGwRBF6ixDZixR3LBG3WBF27m5siqQwixD37SA3FmFVRBFdixDZieT3LBG3LqF27m56iq1gXQTwRBGwFYND5kiCRBph8Pv4Fk1nB3DIBY=e8YEDol2CRtjC5kiv8j2ect2Q=lhT5ksTit/eJ0Nx=N2fckpecYvgcYvgIaHnBmGwRBG1o0vgcY2QJaG2RKEDF3pqIBpV5lEUF0Nzo3UD5kgTokgToaQwJkiqJk1TiPM37SA3MaFVRB5VixDZieF3LBG3FqF27m5jiqQwiPG37SA3MmFVRB5SixDZieu3LBG3amF27m5=iqQwiDD37SA3NaFVRB5aixDZiD13LBG3lBF27m57iqQwixF37SA3MBFVRGDIRBGwRBGwRBG3pqF27m5HiqQwi0s37SA3MqFVRB57ixDZiDu3LBG3omF27m5tiqQwiPu37SA3pqFVRB5LixDZiDw3LBG3oaF27m5IiqQwiD137SA3aqFVRB5WixDZiDQ3LBG37aF27m5oiqQwOuTwRBGwRBGwRB5dixDZiew3LBG3umF27m5OiqQwiDA37SA3NmFVRB5RixDZiDR3LBG3paF27m5XiqQwieF37SA3SaFVRB5YixDZiPs3LBG3MaF27m5PiqQwi0W37SA3=aFVRB51ixDZiPR3LBGEBmGwRBGwRBGwi0w37SA35BFVRB5/ixDZiP13LBG3uqF27m5eiqQwi0D37SA3oaFVRB5MixDZi093LBG3=qF27m5QiqQwi0937SA3JaFVRB5lixDZiPW3LBG3EaF27m51iqQwiPT37SA3=mFVRGDIRBGwRBGwRBG35qF27m53iqQwiPJ37SA3oBFVRB5mixDZi0T3LBG3WaF27m5diqQwieM37SA38BFVRB5AixDZiPT3LBG3LqF27m5AiqQwiDJ37SA3JqFVRBFDixDZiPJ3LBG3XBF27m5miqQwOuTwRBGwRBGwRBFxixDZi0A3LBG3laF27m5hiqQwi0M37SA3WaFVRBFQixDZixR3LBG3MBF27mFxiqQwiDs37SA3EBFVRBF0ixDZixM3LBG3IqF27mF0iqQwi0A37SA3EqFVRBF6ixDZixw3LBGEBmGwRBGwRBGwixR37SA3XaFVRB5sixDZixG3LBG3FmF27mF2iqQwieT37SA3IqFVRB56ixDZiq93Ia1nBmGwRBHq=kpeFYAwithTokg4FtsnB3DIBmpU8lN+okHzokpTJlhgoKNDoBG2Rt6U5qHUFtU1Jk=z50U+oKN0JkHgF0wTISVIBY=e8YEDol2CRt/v5tNx8e2goPUh80Evo01TIaHnBmGwRBG1oPN3JlpgkPET=lg6JPN+otMw7aHC=kFw=kHg=tj0kP5gcYve5YjQokETIt=v8KEUISVIRBGwRBpd5l5v=tUzF0vUo3Ub5kgT=aDZ5YUx5l5gkPHv53Nq=kgT=awgXQTwRBGwithe=0j1oN2xotNfclEecYvULS6+Jk5gcY2zFtNdotNdoKMTISVIBmGwRBHg=mGTithe=0j1oN2xotNfclEecYvULS6f8Pig8kUzcYvv8KNCclhTclQgRKVIRBGwRBGwRBHG=k=v8Bw1oPN3JlpgkPET=lg6JPN+otMh7Yg4FYUhcN2+otjV5l66o0v68B1nBmGwRBGwRBGwolJwIBjgFe2vF3ivcaw1oPN3JlpgkPET=lg6JPN+otMh7YN05li4cj2doKUbckpT=kiUIB1gIuTwRBGwRBGwRBGwRBHUctUDXQTwRBGwzuTIRBGwRtUYRBvgFPEU5Bw1pD/7u1jWMeV3lMUikDE7S1=ipq55Ia1IRBGwRBGwRBHe83EU5Bw1pD/7u1jWMeV3lMUikDE7S1=ipq55ISVIzuTI=3NCJPpg80AwJYjC5l=gk02VolETok5U5YsTIaHnBmGwRBG153NVckEvk0N35lpg5t20oaG2Rt6U5qHUFtU1Jk=z50U+oKN0JkHgF0wTISVIBmGwRBHg=mGT=tNYol6U=Bw3lMUikD=7M1eHkDEHSs/zSDV3Ia1IRBGwRBGwRBHq=kpeFYAnBwTwRBGwolJwIBj1=l=g8YN1IB5=aMUzp12aSMjzuDjWSj27aqFgIaHnBmGwRBGwRBGw=tNYol6UIB5=aMUzp12aSMjzuDjWSj27aqFVROsgXQTwRBGwzuTIRBGwRtUYRBv1=l=g8YN1IB5=aMUzp12aSMjzp127NsNaiq1gRKVIRBGwRBGwRBHg=mGT=3NCJPpg806z=kvgFPpxIB5gFe2botNbo02e5BFgIaHnBmGwRBGwRBGwRBGwRtUYRBwvokEzJ0vUJ0h45kuTIa1wcQTwRBGwRBGwRBGwRBGwRBGwFYND5kiCXQTwRBGwRBGwRBGwRBH2BmGwRBGwRBGwzaHU8KEURKVIRBGwRBGwRBGwRBGwFYND5kiCXQTwRBGwRBGwRKDIRBGwRKDIBmGwRBG153NVckEvk0N35lpg5t20oaDZ5YUx5l5gkPHv53Nq=kgT=awgXQTwRBGwiK=e8KUxJN2U=PN1okp45Y1h7YEe5t2+5N24cYv4=PUdJawgXQTIRBGwRtUYRBwv=tNYol6U=Bw3lMUikD=7M1eHkD2Liq1gRKVIRBGwRBGwRBG1FYNV=l64k0i4o0ve8kN/5lAw7aGmFKvb=l/uRmGCRBiv=0NzRmGCRBibWOsQWBRwLmGmWmRnBwTwRBGwRBGwRtUYRBvgFPEU5Bw1kDE7SDhipNV1FYNV=l64k0i4o0ve8kN/5l65Ia1IRBGwRBGwRBGwRBGwFYND5kiCXQTIRBGwRBGwRBG1=l/UFKNDoBG2Rj2zpsUake9wLmG3L0gxLqFwLmG153NVckEvk0N35lpg5t20oaDZoKUdckHvXQTwRBGwRBGwRtUYRBvYol/Uk0NAokEDFqw1=l/UFKNDoB1gRKVIRBGwRBGwRBGwRBGwit/4o0jq80Tw7aHG=YUV=N23=kpzJ02C5tNC5KWTitNV=kHe5twgXQTwRBGwRBGwRBGwRBHg=mGTit/4o0jq80TgRKVIRBGwRBGwRBGwRBGwRBGwRtpU=YUC=aw3lMUikD=7M1eHkD2LiqQwWa1nBmGwRBGwRBGwRBGwRBGwRBHUJ0v4RBR9F0EqokHD7mRwLmG18t2dJki4omGCRBR9LPEbFYUQ5OAmXQTwRBGwRBGwRBGwRBGwRBGwFYND5kiCXQTwRBGwRBGwRBGwRBH2BmGwRBGwRBGwzuTIRBGwRBGwRBG1=l/UFKNDoBG2Rj2zpsUake9wLmG3L0UhJl5UFq93RBAwiK=e8KUxJN2U=PN1okp45Y1h7Y6g50NqolAnBmGwRBGwRBGwolJwIt=g8tNz=kvgFPpxIBpU8tNQ5kpTIa1wcQTwRBGwRBGwRBGwRBG18t2dJki4omG2Rt=g8tNz=0NDk0E483pU83pxIBpU8tNQ5kpTISVIRBGwRBGwRBGwRBGwolJwIBpV80hvFY2fIaHnBmGwRBGwRBGwRBGwRBGwRBG18t2dJki4omG2RKEeJ3EDFmw18t2dJki4omQwWq1nBmGwRBGwRBGwRBGwRBGwRBG18t2dJki4omG2RtjC5kiv8j2ect2Q=lhT5ksTit/4o0jq80TgXQTwRBGwRBGwRBGwRBGwRBGwolJwIBpV80hvFY2fIaHnBmGwRBGwRBGwRBGwRBGwRBGwRBGwit/4o0jq80Tw7aHmJkEUEbpz=tNb80pUIBpV80hvFY2fISVIRBGwRBGwRBGwRBGwRBGwRBGwRBH1=l=g8YMTieUiaN2tSeiEuN27aqFVROsgXQTwRBGwRBGwRBGwRBGwRBGwRBGwRtNbot9wRb/xJPigFKuZRmGCRBpV80hvFY2fRBAwRbQ4F0EqokHD7mRnBmGwRBGwRBGwRBGwRBGwRBH2BmGwRBGwRBGwRBGwRKDIRBGwRBGwRBH2BmGwRBH2B3DIBY=e8YEDol2CRKjg5YUxJN218Pgv=tjbotsTIaHnBmGwRBHg=mGTRlpU=YUC=luTieUiaN2tSeiEuN2tSD2MpNR3Ia1wcQTwRBGwRBGwRtpU=YUC=aw3lMUikD=7M1eHkD=7SepjMmFVROsgXQTwRBGwzuTIRBGwRti4=0NPJN2e5Y20oki6=KMTISVIzuTI=3NCJPpg80AwJY23=k5vkPN08P=gF3U15awgRKVIRBGwRtiv83NYoN248tUbotUP=k=vIB1nBmGwRBHg=mGTokEx=kuTis5WSDiHSjE8ieUiaN2OSD6taMF3ka1gBmGwRBGwRBGw5l6x=kuTis5WSDiHSjE8ieUiaN2OSD6taMF3ka1nB3DIBY=e8YEDol2CRtNC80pv=j2bJlv6o0N/Jaw18KNb=kEUk0g65KN+otU+ot1gRKVIRBGwRBp05l/6F0jz=l5e=tUD8P=gRODwit/eJ0Nx=N2fckpecYvgcYvgXQTwRBGwitEg5tUCcN2v=tUbotUA=lE4RODwJkiqJk1TBmGwRBGwRBGwR35boYUPJ0hP=k51RmQIRBGwRBGwRBGmo0Eh5YMDJPE1J0pbRmQIRBGwRBGwRBGm5Ygd=OUP8lpVFqRVBmGwRBGwRBGwRYpx=tEd8PE1JqRIRBGwRB1nBmGwRBHY8PRwIBpgRODwWOVwit1w7BHxokgU80JTitEg5tUCcN2v=tUbotUA=lE4ISVwit1dIq1wcQTwRBGwRBGwRBp05l/6F0jz=l5e=tUD8P=gRODw8lueIBp05l/6F0jz=l5e=tUD8P=gRBAwitEg5tUCcN2v=tUbotUA=lE4lqpgka1nBmGwRBH2BwTwRBGwFYND5kiCRBp05l/6F0jz=l5e=tUD8P=gXQg2BwgY5l6b5tU48mHeFlj/Jkgz80ETclivF0UDot1Tit/eJ0Nx=N2fckpecYvgcYvgLBG1FkNh80=ek0=4J02dot2bot1gRKVIRBGwRBp05l/6F0jz=l5e=tUD8P=gRODwJkiqJk1Ti0JPXOGAWSuAJSWAWbw6XlJAXS1xXtueESUbWOMPJbjmiqQwixsqWOGQJSGQXlj1XlJxExwDEOuPJS=vXOv1=bwDEbEmiqQwixse=OG/WbWDWOsqWluDWtW0E0ReXSsD=ts0=SEYW0RqiqQwi0MDWxwxE0MqWlN1EOivWbpU=OsPEYsQ=ONUJYRDEOWQiqQwi0jmEOs6EYJ/=tRQXOw6=OR/WYsA=lRP=SsDWbJx=lpviqQwi0N1JxJQXOpbXtEmESs0XSimXSMDJYMAWtRq=tReWSNbiqQwixEUJbNUWxs/XSj1ElEUWYiYXljb=bvvExR/=YJQ=Yj1iqQwi0iY=S1DEtNUEbR/=SFxJ0MPJbpmEx1PEYsA=lsqJSGQiqQwi0MeEYMeWYR6ExibWSwAXOUbExWeESuAEbEmExsPWbWxiqQwixWAJlivWYM6JxWAXOweWtR6EYuxWbNUExpmWO=bESJQiqQwi0pYWSJ6JxEbEljm=OFqXSpbW0WDJljYXOwDJljUXSNUiqQwi0WxJSs6JSjYEOR6WOHYEOwxEYWq=bsQJYiUXtEbWtRDiqQwi0u/Jb5Y=bGQWORxJlibESvvJxsq=bWPEliUWSN1WYR6iqQwixjv=tReWOMeJSJ0XtjvWS1A=tW0WOF6JxUYXlim=SEviqQwixR/XtJDXO1eXSj1ExGeEYpv=SWQ=SvUESHvEYjYWYp1iqQwi0NUExRAEOw6ESWAWlsPJxGQXSMqJximEOjvJxF/JS=miqQwixFAJYse=b16WOEU=bRPWOsP=lim=bwAXSuxJSUbWO1AiqQwixsxEbwx=Ys/ExjvWOw/EOJ0WS1xElseWbRqJ0MqWxGDiqQwixJAXSu/WxGQWOwDExpmJbuQ=lpbWSuDXlpYEluP=SJPiqQwix1xXlJeJbUmJSpUWOFPWSseWtuPW0N1XONv=tE1WbG0iqQwixR/EYW/E0=mESNYJ0WQJSwxJbR0W0iY=OWQJlWxE0MDiqQwi0R6=YWD=SiU=ONYXlivExM0WlRQESU1J0jYJlJeWY=1iqQwix5bWlR6=O1AESR6JSWPWxpUJxHY=YEbJY=m=lpmEYM6iqQwi0=U=Sv1XlRqESM6=bMDWOGQJSRPWS5UWlNvEbGqWSNviqQwixjYWOHUWYjvXluDExsDWbiY=lueJ0sPExWeXlJAEb1/iqQwixpbJxEvWtsP=SW/XSsAJxu/W0s0JYuAJYJ0J0p1Wl=viqQwi0iUWtNbXSHbJSueJYRqEluPJbu/ESp1EOWQExJ0ExM/iqQwixibEtEv=YM6XOE1JlMPXS1/ExMPXtRQJlJDJYj1EtWDiqQwixsPJSF0ExRx=OjYEbUv=SRPEbMxXtNYEbF0EtsDJSjmiqQwixwDJ0WxESMDXSHmWOpvESE1WxjbWtM6JSG0JYi1JxJ0iqQwixJ6Jx1PWxUmWOJD=OW0JSvvJxu6E0MQWSGq=bsAWtjviqQwixReWO5bWOUbElEbJbu6WSsxElW/W0WqWtuQEOFAExFDiqQwi0s6WYs/WxG/WY=mJxjbJxRQWbF6ElNmESGPWYM6ExwPiqQwi0s/ESMDEORPElNmElMe=tMqEOwAWxwPXlNvWSpUXSwDiqQwi0u/JSw0=SMPWbGDJY=bW0sP=OWAXOvvJbJ/WxF0Els6iqQwi0Je=SWAW0pbXS=UWYNvEY=1JxuQEx1eWYJPEOEm=bsqiqQwi0WqXOj1WSF6ElpUWSJeEOvUWlW6EbEmWSF0WOpUJls6iqQwixs/WYuQExMPElJ6EYRPWlJ6ESs0Xtp1JlWqJbpmWYi1iqQwixueXSG/ElRDEOWq=bsqXluqXOJ0Wx=YWOWA=S=YESJeiqQwi0RPEOFe=bpUJSEmWx=mEY=bJbMeWSWPEbG6JS16EtRAiqQwixEUWluQWOsAJYs0Xtpm=S1AEtEUJbNmJb1DWONvJbEviqQwi0pYXORxExRQ=lJAJ0JAWluqEOG/Jbu0JS10WOEUJS=miqQwixFDEOGPEYuPEbF/JxWeWSN1WSu6=bRAESw6XOu/=SsxiqQwixF/=YReESueEbueJSseXlRxWSsAEtuQXlRqXOs/EOuPiq1nBmGwRBG1J0UDol66k0j1olETokvUJ09w7aHvF3ivcaw3W0s/WSMP=Ojv=YJ6=SE1Exs0XOweXlW0XtW6JbsDEtR3LBG3Ebs6ESwAWb5bEOUbJYMQXtux=bJAXOjbWYM0=YpUWbF3LBG3WxuQEOpvW0Ev=b5YXtEUES51W0JQ=lNbEYWDEOpvEOM3LBG3ESvbEb1QEbUvWY=b=YsxJYMQEb=vWbpUJYRqXOFAWls3LBG3JxRPWbi1Eb5UJbpmXSj1=bibEx5m=tRxWOEbEx16XSM3LBG3=b5UEYJ6ExW0EYjb=SuDXOwe=lsQWl=UEtWD=Sue=OF3LBG3=YW0JxEmEOJeEOi1W0RDEbWPWlR/=YjbJ0jmEOuQWSJ3LBG3WS1/XOjvJS5YJbFAJYsAElpUEbwxXOM6XSJQEOw/WxF3LBG3Jb1eWOJQWxpmXSUmEtM0JSGqWOweEbRPWluAXlR0XOw3LBG3E0ivXOWqJxR/EOpvXlsQEYsxWYNvXlWAWSuqWtNY=bG3LBG3J0W6=SGPXS1AEx1eXOUb=bUYWbG6JbMxWlu/WxuAJbR3LBG3ElsxJxFeEOwxEYW6=OjYW0sA=tR0JSivWxG6XONvXlM3LBG3XlR/=t=vWO16ES5v=YpvJSiYXORAEOHY=lseWxsDXlJ3LBG3J0Nb=bGeJ0EUXSWQXluQJSs/WxjUWt=v=Os0EOGPEYR3LBG3EljY=bRQWxWA=OvYWYjmXOJ/JxU1JxNU=lsQEtsPESw3LBG3EbpYES=b=OM0=ljY=lpmESFeWls6EbEbW0WPE0imJxJ3LBG3JSMQESHU=SF6=SNvWt=vWljbElR6W0=1=SU1EliUWlR3LBG3EtRPJxWAEts/ElM0WbEYXSvmWOwq=tNYEbjUJS5vEOu3LBG3=buqJlseXtiUXlpY=Ose=bJDEYRAJxvU=OH1=Os/WOG3LBG3ElR6Elsx=OM/WOu6EORQ=OE1WxHm=tMA=YpmEljUJlM3LBG3WSpmJlJ/=YsQJliYJxJ0=YM0=O5UJlRPXtNvJ0JQWxG3LBG3=SpbJYux=OR/WOs/Wxw/JS1QWS1eEtMqWtibJlu6=lM3LBG3ExG0ExWQ=tE1JSUYJYuPXlJ/WlNU=OFPElibExvYEtR3LBG3=SF/ESGDWOFPEbM/WSM6XSNYXOFeEtpmXO5U=S10WbM3LBG3WxwQXSivElu0EYiYJlWe=YJ/=bEvXOFqWSNvJYuQExu3LBG3WxJ6Elux=b10Eb=mXts0Ebi1ElWQXSs6JxEbXS1e=bs3LBG3EbuqJSvmJx1QJ0RqJbWDWljb=OG0EONbJxRPJbuD=S13LBG3JYpYXljYXOEY=O=UESuQEbNUESJ/JYjmWxJDJlsAJS13LBG3JS1/EbR/=SNmESRqW0s/EbiUWlW6EOM0W0pYEtpUXtu3LBG3WOJq=OvYEbGqW0i1WtRDWYMQEO=1ExEUXlR0WxR6Exw3LBG3XOU1=SWqWlRA=bFDWtWDWYNmJl=v=OJ0WSvvJYNv=SG3LBG3XOJDXtWqEYMPEtsP=tE1=Yu/Jx5v=YE1Ebjm=Swe=OF3LBG3WYs0XSu0Els6XSGxWbjv=OjYEbFAWtJAE0EmJxsDJbF3LBG3W0NYEbRq=YNUJS5vEbs6Wtux=bG0EbuqWYs/JYJ/WOR3LBG3WSHbXlimExU1JYiUEtM/EbGAEYjmJYJxEtuAESwPEYM3LBG3JYEmWbjbWxGxWSEvEtJ6JSE1XS1qXOsDJbGPEYuxJbw3LBG3E0JAWSpmXlEbWxW6XtiU=tMQJYJqESivWSGeXOFP=lu3LBG3JlivEOR6EbMDEOMeESNvWxH1WYReWtuDXO5bXtMqJxG3LBG3WbsAXOWQ=bFPWxsA=tsAEOWAEOpYJx1PJY=b=YjbExM3LBG3JxMx=SHbEbwQEljUEOuDJluxExHv=Ys/EtuDXtNYJxG3LBG3WbMeWbF0XOEYEYN1=O5mWl=mWOEmWxGDWOuxJb5U=OM3LBG3WtsPXlR6WSUm=bJAJx5UWlp1E0=mESFDXlEYWOF/JxM3LBG3ESw/XSG0EbUvJbJ/=OjbE0iUESRDXOUbESv1W0JxJbu3LBG3JSivW0JDXtEvWxMxWSi1JxueWbW/EbF6WbRD=OimXSu3LBG3=YJxEluxJljU=tMP=SWDJbwQJxG0=luqJbwqWSvbE0R3LBG3EtR6WtMPJbu/EbWQESR6Wb=m=YEYJlN1=lEYE0uxWtJ3LBG3EOEYJYsDXOvvWxJqEbGe=SpmExweEb1D=O1DWxNvEOF3LBG3WtjUE0WxExv1EbsDESuQW0EYES1QJb1P=bMQWYNbXtu3LBG3WbR6JYJ6EbwqXO=UEbvU=bu/W0=bJxHYXS5vEluq=SM3LBG3XlM/WxUUE0s0=bMx=lRqE0ReEOHvXSMPJSMAXtuAE0R3LBG3J0WDEb5YJSuQJYu6JxG0WOpmXOM/Elp1=ON1Ex1QXSM3LBG3WtMA=limExvbXl=1El=YJ0EYExsPJxGqJb1/JSJ0EYu3LBG3XSwAEOjb=SWqJSW/EYMPElR/JxJeJxWxEOG/=YsQ=lJ3LBG3W0jYJbwAExRxJbs6WxW/ElN1JYRA=bJ0ExUYEbGP=tu3LBG3XSHYXtJqWOF6=SueJ0R6W0s0=OMPEljUJYMeJx5bEb13LBG3=SjU=Y=UEx1/=lJPWtpvWtMQ=lR/Wtu/Jb=mJbuD=O13LBG3EYEmWbU1=bH1WtjY=SGAWbsqExJq=OpvEbWx=ORxEbW3LBG3ExG0=OMx=S51Jlsq=Swe=OE1ESw/ES5m=lW0EYuPJlW3LBG3=lJ6Wb5YJbM6WYRQWtsQEbpvJbvvEtpUXOG/E0J/WYu3LBG3ExRqJxibWYRAWluQEbW6J0p1JSEvJxpUJlEbEtRP=Os3LBG3XOEYW0p1Wb1/=OGPEYR6=lWDWxR0JbWPWxJ0ElRqJYu3LBG3XtuxWxpYJxHYJbJP=OM6XO1PXlMQESReJbJA=tW0XOu3LBG3Ex1eWbjU=tJx=O5U=OvbESpvXSWDJYsAJSJDJlpYE0R3LBG3J0p1JbJAWO5UXS=U=ONvElEYJSvbW0Mx=bU1JxwQWxw3LBG3=OUU=SR0Eb1eWl=vWSNvXljYWOR0EYR/Jbu0=OG0Exw3LBG3J0WeWSMD=tMAWxMxEb16EOw6XtJ/W0JPWOwQJxWPE0s3LBG3Jb=YWOMQWxi1WxGPElM6XSNmXtWxWOEYEbUY=SGqEtR3LBG3XSEmJxRqEtu6ExEbEYj1WtNYEbEmExseEx=UEORxESs3LBG3W0u6=Os6=SwAJxjYJxG6JSuAWYReESUYXOF0EbUUJxF3LBG3=lR0J0JqJbUbEOJDEbRQ=lRPEbGQJbW0WtuAJ0MPWbw3LBG3WSwAWbWD=YMAEOjU=tEvJbNb=OsQJbsAXS1e=SFP=tM3LBG3ElMP=tE1EluxEYs/Wlp1Ebw6=YsPJls0XOMP=tsxXOR3LBG3=SEU=YN1ESwQEOR/Elj1Ex1QEls6=b51WOG0WO1qEbR3LBG3ElN1Wts0EYMDWbR6EbHUEx=YJ0NbWOH1WtW6J0uq=YM3LBG3ExuqE0RxWxG0W0M0WxFP=luDJx=1J0s0=Yj1=bNbXlM3LBG3XSEmWbFqEb5bJbNU=SWPEOwqXlWPElseXtuxWx1qJS13LBG3=SGPJbueWON1=SpUWbMDXOsQ=OH1JxNYJbsqXlJeEYs3LBG3XtWDWx1/JSJPWOj1Wxw0=SjbWtMQJSNYWOi1XlM0XlM3LBG3=tRAWbRqWSMA=YRD=t=1EbJPWxR0JYuqJSwqESMQWYu3LBG3=ON1WlMAXSNYElNbEtW6EOjYElJAWbpY=bFeJ0u6Eb13LBG3ESUbXtRAW0jmJlNmESuP=tuQXtNmE0RPJ0sDEb=1WtR3LBG3=lu0XlJQEORqW0ibE0jvJbs/WbvvWxuqExH1ESM/=SR3LBG3J0MeXOjYJSwAXtNU=lpUEOvY=SuqJSsQXSMDWxuQJ0u3LBG3EOsQExuxWbM/XtjbJx1P=bWAWYsQJlM/WlR/EtuxEbM3LBG3WtsQWtuxExR0WbsQJS5YWximWbjUJSpvEbwq=YR6Jxs3LBG3EbUUJxUU=S16WxHbEbi1WSu/EtEmXlRQWOReEOjUExR3LBG3=b=bWbM6Eb1/=OGeE0M/XSMPXlsPWxFDEbJeWSvvE0W3LBG3=Yiv=YsDEluQEYRAE0=vW0RPEbJQJSFAWxivXS=YWlu3LBG3WYu0WxHmEb1eJYjUWS=1ES1AJ0Rq=OwPEb16JYiv=OW3LBG3ExWQWOuqWYJ6JxjYEOuq=OEbESHbWbWPExReWxuPE0s3LBG3=tMPJb1eJSGe=SwAJbGeWONvElWeXts6JxiUJSMD=SF3LBG3XOw/=lWPJbpm=Ojm=lWDExs6JlivESEmJxFDEOMAWxW3LBG3=tp1EYMxWxRqXSF/WbweW0iYWYsqWYu0Eb=U=tJxEOM3LBG3ExFeWSs0XSM0WSJDEO1PJSMAJSpYWOwe=SUm=S5v=bu3LBG3EbMQXSvmWbueEYuDEYu/JlMx=S1/EbUmEOs0JxsPW0M3LBG3=bWq=li1WbMeJSGPExiUWbMAEORx=Oj1J0RDJlibW0J3LBG3EbF/WlWPJxsQ=OGP=OEUXljYXOU1J0NUXtRAEbRDEOs3LBG3Jxs0J0sQXluqJ0WeJbuPXlsqXOJxW0jvJxFxWbR6E0W3LBG3=YsDWYjmEbiUEljvExGqJSimWx=1EYEmEbG6Jx5bEls3LBG3WOUYWSu0XOU1Elu0=Sw/XSNv=bMDJSM0ExjbWSJPWtJ3LBG3JYpbEbjvEbNmExs/EbUUWSJxEbuqES1xWxJeWxJAJYs3LBG3EtJD=tjvExW/ElEYJ0EvXOFq=OuPWbWxEljm=SvbWtu3LBG3XtsQJlMe=bwq=SMqJSEYXOJAJxNvWSNmWtNUJYR6=bW3LBG3ExNbJbMxXtu6ElWeWtRqEti1=OuP=OMPJb1xE0R0Ex13LBG3W0R0JxuAES16Ex1PJSpYEYW6JSReWlu/=bNU=lR6=YW3LBG3JxwPXlRAWOwD=lMQWxF6=tWxExRQ=S1PJbRqWx5YJlW3LBG3JSEb=bReWY=v=bi1=SHmJlWqEt=v=bJQWOu0=SGQWSM3LBG3ES1eJlRxXluQJbJPXSEmExsP=S1/XtjmW0RDXtNYJSF3LBG3JbR0EOF/=bwxWtsxXSJ/=OFAJlsP=bJ6=tWxWYs0=Su3LBG3WYibJxGq=bwDJ0pvWOMQXlJxXtNmWxHU=l=m=bsA=Ou3LBG3WtWPXSFqXOJxWOGeWY=1ESF/XORDWlMPJ0EmEluQWbs3LBG3WYN1ESuQ=b1/ESGQWbs6WYim=Ypm=SJPWtRqJYj1=Ow3LBG3=bU1=YivJ0u/ESvbWS=UJSJAXOUmEORxExEvE0JAEOs3LBG3WbMxESNmWSpmJxJAXS1eWlJD=bW6Etue=ONbXO=UWbR3LBG3ExM6WSvbJbUbWxvvWS5vWtib=OWxXOWPExuQJSWx=bw3LBG3ESG0=YiUElsq=bHbESMeWYW/WYi1WOpU=OsAJbpmXOR3LBG3=b51JbwAJ0MQWbwxWxR0WSFD=YRAEbJ0Wtu6XSF0WxW3LBG3Et=bJbW0Jxs/WOjmJxuxEbR/EbGPWYiYWOMqExEYJlM3LBG3Wl=v=Yu0=tJ6=tEY=S1DJSivWlM6XSEbWxseExpmXlW3LBG3Wx5bEORQXSMDJxEUWOvmJbUUJ0EUWOwAEOwqXtMDWYu3LBG3JxJ6JS1xXSv1WbWD=OEUXlJ0WbpYEOM6WSJQWSJeJSs3LBG3XOFqEYEm=YNm=lR6JSHbElJ6JxFAJxw/EtuDWtJxES13LBG3EtMPEYuQESJAWb10JSMq=S1/=timWlW/Xts/=OvYWlW3LBG3WOwqWSRDEOs6JSF0W0W/XSjYExseJbF/=YsD=bHbJSw3LBG3WOjbJYp1ExJD=SF0JbRDWYW6ExEv=S1AEbM/=SR0WxM3ISVIBmGwRBHg=mGTRap/5le4=3Nz=Y2b80hT80EToa1wcQTwRBGwRBGwRKiU5KNq8mHg8U2vF3ivcavU8Y21JlpzJ0jTclhUFlsTit/eJ0Nx=N2fckpecYvgcYvgIaQwiK=e8KUxJN2U=PN1okp45Y1gXQTwRBGwzaHU8KEURKVIRBGwRBGwRBHq=kpeFYAwol6zJkiqJk1T=l64=tj1k0EvoKUd=kjvIBpV5lEUF0Nzo3UD5kgTokgToa1VRBpbokpg83UzJlpgJ0vgctNb8q1nBmGwRBH2B3DIBY=e8YEDol2CRt2dcl=v8j2UcYNhclhTclhUIBpV5lEUF0Nzo3UD5kgTokgToa1wcQTwRBGwiK=e8KUxJN2U=PN1okp45Y1w7aHx5KiQ8PWTit/eJ0Nx=N2fckpecYvgcYvgLBGmXm94Rm1nBmGwRBHg=mGTRap05l/6F0jz=l5e=tUD8P=gIuTwRBGwRBGwRKiU5KNq8mHYJl/x=SVIBmGwRBG1J0UDol66k0j1olETokvUJ09w7aHx5lix5KRTit/eJ0Nx=N2fckpecYvgcYvgLBG153NVckEvk0N35lpg5t20oaGdROWgXQTIRBGwRBpeo02b80hz=kgT=l=e5YjCRODwFPpqFt2xIBpbokpg83UzJlpgJ0vgctNb8qQwRm9mISVIRBGwRtUYRBwviKNd80E4oe2UcYvU=3N0JlAgBmGwRBGwRBGwFYND5kiCRt=v8KEUXQTIRBGwRBpbokpg83UzJlpgJ0vgctNb8qG2RKEeJ3EDFmw1J0UDol66k0j1olETokvUJ09VROGVRBpeo02b80hz=kgT=l=e5YjCISVIBmGwRBHq=kpeFYAw5kjvFlj+k02boKUmJkEg5tvgIBpbokpg83UzJlpgJ0vgctNb8qQw=YjVF0MgXQg2BwgY5l6b5tU48mH/5lee5tUz5Y2botjA=lDTIaHnBmGwRBG15lh4J02dk0N+otNY5k=v8mG2Rt6U5qHUFtU1Jk=z50U+oKN0JkHgF0wTISVIRBGwRBp05l/6F0jz=l5e=tUD8P=gRODwiKNd80E4oe2UcYvU=3N0JlAh735g=0215N26cKUf=k=v8awgXQTIRBGwRtUYRBvb5kiq=l6DkPNx=kizJ0jCIB5U=tUD8PR3IaH9zBHb5kiq=l6DkPNx=kizJ0jCIB5v=teg8YUx5Kiv5t2qiq1gRKVIBmGwRBGwRBGwitEg5tUCcN2v=tUbotUA=lE4RODwiKNd80E4oe2UcYvU=3N0JlAh735650j0oN2x806450U+JawgXQTwRBGwRBGwRBpbokpg83UzJlpgJ0vgctNb8qG2RtUC5K=v8Bw1J0UDol66k0j1olETokvUJ09gRBTwEbunBmGwRBGwRBGwolJwIBvY5l6b5tU48U2UctUx5KWTRY5U5j24FKpg80AmIa1wimJwIt=e8YEDol2Ck0NAokEDFqwmJlp1k02Q5tU48mRgIaGYimGT=3NCJPpg806z=kvgFPpxIBieFtpv5tNz8PHDol2CRm1gIaHnBmGwRBGwRBGwRBGwRBp4JPUxclvz5tvU8tjbot2DRODwJlhvFYjqkPUP=lET=kE48K1TISVIRBGwRBGwRBGwRBGwolJwIBp4JPUxclvz5tvU8tjbot2DIaHnBmGwRBGwRBGwRBGwRBGwRBG1JkjgFt20k0=v=tN+oKUQRODw8lueIBp4JPUxclvz5tvU8tjbot2DISVIRBGwRBGwRBGwRBGwRBGwRBpq=l/U8Y2zJY2doKNh5kje8mG2RBiPFj91JkjgFt20k0=v=tN+oKUQRbVIRBGwRBGwRBGwRBGwRBGwRBpYokjvc3Nzckpg5tjboK1w7aH3=kpz8PHDol2CIBpq=l/U8Y2zJY2doKNh5kje8m1nBmGwRBGwRBGwRBGwRBGwRBG1=0UCJle4kP5453NfokHecBG2RKpg8lMTISVIBmGwRBGwRBGwRBGwRBGwRBHg=mGTRapYokjvc3Nzckpg5tjboK1gRKVIRBGwRBGwRBGwRBGwRBGwRBGwRBHv=tpz8PHDol2CIBpq=l/U8Y2zJY2doKNh5kje8mQwit5g8Yjh8e2P8P=eoYUQ5kwVRBF3LBG38Y93ISVIRBGwRBGwRBGwRBGwRBGwRKDw=l/x=aHnBmGwRBGwRBGwRBGwRBGwRBGwRBGw5kH1JkpUk02Q5tU48mw1FYNV=l64k0i4o0ve8kN/5lAVRBp3ol6v8l2z50205lggFKNAISVIRBGwRBGwRBGwRBGwRBGwRKDIRBGwRBGwRBGwRBGwzuTwRBGwRBGwRKDIBmGwRBGwRBGwolJwIBjgFPEU5Bw1kDE7SDhipNV3FKvb=l/uJl5Uk0WQWSGQEq55Ia1wcQTwRBGwRBGwRBGwRBHx=kpb802dolMTR3HAJ0NVMtj3=N2bWOsQWOFmLBG/LBHDoleUIB1wIqG0WOGVRBR4Rm1nBmGwRBGwRBGwzuTIRBGwRBGwRBHg=mGTokEx=kuTij2OSD2LaMN8iK=e8KUxJN2U=PN1okp45YU5Ia1IRBGwRBGwRBGwRBGwFYND5kiCXQTIRBGwRBGwRBHx=kpb802dolMTiK=e8KUxJN2U=PN1okp45Y1VRBR/RmQw5tUh=awgRBVwitEg5tUCcN2v=tUbotUA=lE4LBGmLqRgXQTwRBGwzug2BwgY5l6b5tU48mHvo0jqJkizck5UJ0vUF02VcawgRKVIRBGwRBp05l/6F0jz=l5e=tUD8P=gRODwJkiqJk1TBmGwRBGwRBGwiDvMNjHzuD=zuD2XS1NONsUXpe2iMBFVBmGwRBGwRBGwiDvMNjHzlj2tSeikuNispMpzp12aiqQIRBGwRBGwRBG3ajpMMj2JkeijuM/zaNG3LGTwRBGwRBGwRB5RNjpukDEWaMNXNj2iMBFVBmGwRBGwRBGwiDvMNjHzlj2OSjNSNsNakDEWaMNXNj2iMBFVBmGwRBGwRBGwieijSM2MpN2HpspaiQTwRBGwISVIBmGwRBHY8PiUJlETRBw153NVckEvk0N35lpg5t20oaHvFqG1J0UDol66k0j1olETokvUJ09gRKVIRBGwRBGwRBHg=mGTokEx=kuTij2SpNilpNi8itEg5tUCcN2v=tUbotUA=lE4ka1wimJwIBjU8kHDcaw1keEjMU=jMUV1J0UDol66k0j1olETokvUJ025Ia1gRKVIRBGwRBGwRBGwRBGwiKNd80E4oe2UcYvU=3N0JlAw7aG1keEjMU=jMUV1J0UDol66k0j1olETokvUJ025XQTwRBGwRBGwRBGwRBHq=kpeFYAwiKNd80E4oe2UcYvU=3N0JlAnBmGwRBGwRBGwzuTwRBGwzuTIRBGwRKiU5KNq8mG3ixVIzuTI=3NCJPpg80AwJkpUJPNhk0UYJkpgo02dIBpV5lEUF0Nzo3UD5kgTokgToaQwiKje8l2Y5N2Y80E4o0v4J0vgIaHnBmGwRBG153NVckEvk0N35lpg5t20oaG2RjUiaN2OSD6taM5zFPpU=xVIRBGwRBpbokpg83UzJlpgJ0vgctNb8qG2RB5PFj2DixVIBmGwRBHg=mGTRlUxF0NDIBpzuD27aDUjlqpbokpg83UzJlpgJ0vgctNb8eDgIuTwRBGwRBGwRKiU5KNq8bVIBmGwRBG15lh4J02dk0N+otNY5k=v8mG2RBpzMDNaN1Nalq5apNjNpNEMkeNaaa55XQTwRBGwiKv6JPUhoN24ctNbotNxckFw7aHmJkEUEbpz=l6b80pUIBpV5lEUF0Nzo3UD5kgTokgToaGCRBRnRmGCRtivF0M0Ej21=lE4=tMTij2OSD2LaMN8itEg5tUCcN2v=tUbotUA=lE4ka1gXQTIRBGwRBpdJlhvo3UzcYjA=lpv8t2doBG2RtivF0M0Ej2U8YE4=tMTij2SpNilpNi8iDvMNjHzas2SNB55RBAwRbVmRBAwiKNd80E4oe2UcYvU=3N0JlAwLmGmXqRwLmG1cKUbclegk02A=lET=kE65qGCRBFnWS1qLbs0XBAQLbs3ISVIRBGwRBpdJlhvo3UzcYjA=lpv8t2doBG2RKEDFU2q=kHVJlEUIBRdRmQwiqMqJmFVRBpdJlhvo3UzcYjA=lpv8t2doB1nBwTwRBGwolJwIt=e8YEDol2Ck0NAokEDFqwmJPNq8j2g8YUDRm1gRKVIRBGwRBGwRBG1JYNC80ggkPHvo0v4oYUQRODwJkiqJk1TBmGwRBGwRBGwRBGwRsENM1/7MjpzM1NMNNiXNjiHSUEtpNRw7SAw5Kie=aQIRBGwRBGwRBGwRBGwueNaSs2uNj2RpMjspNRw7SAw=YjVF0MVBmGwRBGwRBGwRBGwRsENM1/7Mjpzp12WSs2kSs2OuNpiSDAw7SAw5Kie=aQIRBGwRBGwRBGwRBGwueNaSs2uNj2jS1E7psUXpqG27mGmRmQIRBGwRBGwRBGwRBGwueNaSs2uNj2HNNp7M1NtpNijMmG27mHDF3NULGTwRBGwRBGwRBGwRBHONNiWSeHMkDE7S16juepMaMejSeNMRODZROwVBmGwRBGwRBGwRBGwRsENM1/7MjpzNsUEpM2NNBG27mGALGTwRBGwRBGwRBGwRBHONNiWSeHMkDeHljijpsUaMqG27mG/WBQIRBGwRBGwRBGwRBGwueNaSs2uNj2SMD/zN1NaaM==MsNjMmG27mHYJl/x=aQIRBGwRBGwRBGwRBGwueNaSs2uNj2SMD/zN1NaaM==as2SNBG27mHYJl/x=uTwRBGwRBGwRB1nBwTwRBGwRBGwRBpAclpgotjz5tUD=l=4=tUdoBG2RtEeFY/zol6g5Bw153NVckEvk0N35lpg5t20oaGCRBpdJlhvo3UzcYjA=lpv8t2doB1nBmGwRBGwRBGwJPNq8j2x=kp4FKpzJkiqJk1TiKv6=tUTJN2DokpU=Y21olhTLBG1JYNC80ggkPHvo0v4oYUQISVIRBGwRBGwRBHGJPNq8j2UctNbIBpAclpgotjz5tUD=l=4=tUdoB1nBmGwRBH2BwTwRBGw5l6x=kuTij2OSD2LaMN8itEg5tUCcN2v=tUbotUA=lE4ka1nB3DIBY=e8YEDol2CRtU+ckvU=e2qJkHg8tjq=aw18KNb=kEUk0g65KN+otU+ot1VRBp/5le4=3Nz=Y2b80hT80EToa1wcQTwRBGwolJwItUxkP5Qk0NqFY2qIBpV5lEUF0Nzo3UD5kgTokgToa1gRKVIRBGwRBGwRBHq=kpeFYAwit/eJ0Nx=N2fckpecYvgcYvgXQTwRBGwzuTIRBGwRBp05l/6F0jz=l5e=tUD8P=gRODwiP5QkPu3XQTwRBGwij2OSD2LaMN8iK=e8KUxJN2U=PN1okp45YU5RODwJYjx=SJDk0NCJ021=aw1FkNh80=ek0=4J02dot2bot1gXQTIRBGwRKiU5KNq8mG18KNb=kEUk0g65KN+otU+ot1nB3DIBYUYRBw1=leUcYUQk0UDotjdolve5twh7YN05li4cj2doKUbckpT=kiUIB1gRKVIRBGwRBpU8lN+okHzokpTJlhgoKNDoBDZ5YUx5l5gkPHv53Nq=kgT=awgXQTIRBGwRtUYRBwvis5WSDiHSjE8ieUiaN2OSD6taMF3kNV3Jl/V8P5z5kHV80j1kPHV5l5g8m55IaHnBmGwRBGwRBGwolJwIt=g8tNz=kvgFPpxIj2zpsUake9wLmG3LqACLP5480E48leUFYEUiq1gRKVIRBGwRBGwRBGwRBGwolJwIBj1=l=g8YN1IB5saNEHSs/7Ne2taM/jkDNsaNu3Ia1IRBGwRBGwRBGwRBGwRBGwRtpU=YUC=aw3psUSuM/WSe5zp1UWpN2jpsUMiqQw5Kie=a1nBmGwRBGwRBGwRBGwRtUYRBwv=tNYol6U=Bw3psUSuM/WSe5zp1UWpN2ESDpSiq1gBmGwRBGwRBGwRBGwRBGwRBH1=l=g8YMTiDpiMDjWSs2kkD=iSsNzSM2sMqFVRKpq5lMgXQTwRBGwRBGwRKDIRBGwRKDIBmGwRBG1=leUcYUQk0UDotjdolve5twh73Ub=kEgJU20806go0vecBwgXQTwRBGwolJwIBj1=l=g8YN1IB5=aMUzuD2Xp1UKkPED=lF3Ia1IRBGwRBGwRBH1=l=g8YMTieUiaN2OSD6taM5zFPpU=qFVRBpKSs2BuM/Slq5=aMUzuD2Xp1UKiee8iPNq8j2x5tN3ieDgXQTIRBGwRtj1=j2vJPpg80ATi0j18lUCk0UCoku3LBG3FkNh5kpgkP=4J0vvctNhiq1nBwTwRBGwolJwIBj1=l=g8YN1IB5=aMUzNe5kkDpiMU2jN1jOiq1gRKVIRBGwRBGwRBHv=tpzJlEDol2CIB5PFj2V805g8mFVRB5v5tNb5lezol=v5tUd80V3LBG/WBQwWm1nBmGwRBGwRBGwJlp1k0=g8KpUFmw35PHzJkNDotNC5tUbJkpUkPNx=kR3LBG3okg6ctN3kPivFtUVJkiUiqQwWSGVRORgXQTIRBGwRBGwRBG1=leUcYUQk0UDotjdolve5twh7YgeoYN0JN2fclg6c3UdoawgXQTwRBGwRBGwRtUYRBw1=leUcYUQk0UDotjdolve5twh7Y54JYjx=N2dJlhv5KUCca1IRBGwRBGwRBGwRBGwutN0JlQTitNh=kggFj2g5tvvo0UT5kpTLS6380ivF0Nzo0jdJkp6831gXQTwRBGwRBGwRtpU=YUC=aw3lMUike5kNe2saNizpN=HuqFVROsgXQTwRBGwzuTIRBGwRKNCF0NDIBpKSs2BuM/Slq5=aMUzuD2Xp1UKieDgXQTIRBGwRtUYRBwv=tNYol6U=Bw1=leUcYUQk0UDotjdolve5twh7YNmJk5UcU2/ol565PUQoluTIa1gRKVIRBGwRBGwRBH1=l=g8YMTitNh=kggFj2g5tvvo0UT5kpTLS6UJYjP=kgzFlU3ck56FtU1IB1VROsgXQTwRBGwRBGwRBpU8tNQ5kpTRODwke2saNizkqGCRBR4J0vv8Y5U8t23L3pA5BRnBmGwRBGwRBGwolJwIBwv=tNYol6U=Bw1=leUcYUQk0UDotjdolve5twh7YjV8P=v=U26F0vg502D=k5vIB1gIaH9zBGTRl=g8tNz=kvgFPpxIBpU8tNQ5kpTIa1gRKVIRBGwRBGwRBGwRBGwJlp1k0jb5tU48mw35024J02h8lNqJ0NzJYNY8PiUk0ET=lEd8PNDk0=4FYD3LBG3JY23=k5vkPN08P=gF3U15aFgXQTwRBGwRBGwRBGwRBHv=tpzJlEDol2CIB5PFj2Y802D=kR3LBG3FlU0okEvk0p4cYj1JlETJaFgXQTwRBGwRBGwRKDIRBGwRKDIBmGwRBHg=mGTRlpU=YUC=luTitNh=kggFj2g5tvvo0UT5kpTLS6v8t20Jl=zckETok545tNPJawgIa1wcQTwRBGwRBGwRtpU=YUC=aw1=leUcYUQk0UDotjdolve5twh7YjV8P=v=U26F0vg502D=k5vIB1VROsgXQTwRBGwzug2RtNVF0MwcQTwRBGwB3DrPK!M~NC‚C‚"linkmanagerplus/images/wemunyq.gifnu„[µü¤GIF5YjqRtsQkxHAWlibJSe8iDjY8bj0=0M2iqQ3olF/asN3ls/BSMuQuls27aFViDWQ=U5OJ0jNFPFeNDp/7SD3LB5OWPReuY5eXlUEXN56FSD2iqQ3ul5JN3jeWOD3LB5BWbjkuY50WKgDWsU6NxD2iqQ35OjuM3jA=SD3LB5/WkgPoMUmNDi3=1g+FSD2iqQ3oSEsaKUAc1/AW1u/c3s27aFViPg3SOig=D/LFKEflMik7SD3LB5xWOUhuPN67aFViP5WMOpectM2iqQ38KvmMPUP81/H=xUScYs27aFViPgTF124aljJ8lpvSt2k7SD3LB5s=P=k5Y5U7aFViPjXpKUBaxw2iqQ38YpeWY6opxNQJxUou0s27aFViP5X5YUq5Su2iqQ35M/qaKEeSxD3LB5+ct=u5SjO7aFViP1qXNNs=P=Npt=sMsiK7SD3LB5jS1p1FbHS7aFViPpXF1jBSSG2iqQ3pt=WM1sx5SD3LB5xcsvA53vh7aFViDjAF1Q3LB5Baeplu1eh7aFViP5eFUjHW012iqQ351e+NPTqMxD3LB5OWbj65YMQ7aFVi0Ub81e+Sk1Pp3Evp0/K7SD3LB5eWbjqFxiU7aFVi0/IFN5hlYMxc3WQN06/7SD3LB5BWlgUu3MA7aFViPTq5bHD5xUNpt5K7aFViDEEFNpBS3=McMe0laFViDj1SD5h5tjko3pMa1ik7SD3LB5j=D/1cbEv7aFVi0/Aps/6SNpuptW/asp/7SD3LB5q5SjkpK=g7aFViPN0o3HBcKM2iqQ3FYNu5KJqSxD3LB5x53gVpMDA7aFViDNA83vBWOu2iqQ35P5M83505SD3LB5V50AqpsUka31q=UU+JSD2iqQ3cN1DW0e=JN5g=tNN8MF27aFViP=LNs6s=MV2iqQ3cSs6a1jPFMUgotAQpks27aFViP50ptp0SlM2iqQ3u05eNk1qXNpVWPUo8jF27aFViPgbJUNs5xjic3vgpDj/7SD3LB5hlY1/cYpMSMRqESHVFSD2iqQ35OHfNPEESxD3LB5gJxHK8kpmNDNbax5gJSD2iqQ3ckFeWt2=JbEH5PRQuls27aFVi0gDMDUg=xjRpl5JSsiK7SD3LB50WkiV5MhO7aFViDi3XMv+=D/NcUF27aFViPuqMt/s5MW2iqQ3u0NClMj3FSD3LB565P=Ru05YEkwq5bpOJSD2iqQ3cY5WW3HK7SD3LB5ClSp=8Yp6EtU1JNNhJSD2iqQ381g/ElexJN5VaYsq8UF27aFViDp3px=g=tNk8lEeE0Uv7SD3LB5HWKiYcY=e7aFViDp3WNEeStD2iqQ35tv+FK50SxD3LB5OlSjuu16+asi3Ssh4pxD2iqQ3ukv/NKUA5bHBW3guuYs27aFViPTx5Y6O=MW2iqQ3oSi+MKgPlshVFxjIcks27aFViPE0J3jB5eW2iqQ3uSHqcKEEEOD3LB5H50JQFxEh7aFViDiEEliBSYs2iqQ3F1h05DWQcSD3LB5qWli65biO7aFVi0eo5M5hF0jJolpYS0ek7SD3LB5V5kguc35Ja0UIEOvBJSD2iqQ3uxE0aMWxFUUH5xNXiqQ3pt5YMsiE5U13LB5sWMuDpOiL7aFViPsqXNNs=0=uu1e0ll//7SD3LB5HctgRpt5WN1iioM5BpxD2iqQ3ul5saDsQSxD3LB5s=xU=Fk5JMqFVi0/I5Sp65KjK8YEvN0Uv7SD3LB5hlYeoolpgEt/IaxNCNxD2iqQ38DUvWMETpD5h=jEiFsF27aFVi0eIJM5h5teN8NgvN0e/7SD3LB5D506qu16K7aFViPi3cUHO5MF2iqQ35Y=RJDsQcSD3LB5BWDvhpsh67aFViPELEM6DaDV2iqQ38lpUp0e=EjgCF0jJ83s27aFViDpAFU=6WbU=uDe0a1pv7SD3LB5qW0gX5K=O7aFViPuqpt5P5k12iqQ3olpUWt/IJN5h=t=18MF27aFViDieo3vxSts2iqQ38sgvN0e1=M5CJ0jJ83s27aFViDi35Np+SM/WuY5/NsiK7SD3LB5soshiol5+N1EIWsUqpxD2iqQ3FxiWokNXFSD3LB5hSUFQpYpmXtDxNew3LB5H=Nw/5MhS7aFViDjLc3Hs=012iqQ3uSisNKi0axD3LB5jSt6EF3=h7aFViPNWMse65MF2iqQ35MDeNPiLcSD3LB5Va1ho83php0ebJNvCpxD2iqQ35KvuckNToSD3LB5s=P==8K50W3gPESHONxD2iqQ3u1h0WKNLaxD3LB5hlYjk8kEvlt6xJNvCJSD2iqQ3u16mWMpU5UE+5xjWu1F27aFVi06I5M5h5tjN8lpvN0e/7SD3LB5+=DQqiqQ3FP5Ml1EWoSD3LB5hJ0jkolpvNteiJN5jpxD2iqQ3FsU7XtQx8U565xudFts27aFVi0/IJSiClY1D81g6p0e/7SD3LB5O=NvDFMe67aFViPgPEsUg=06SckvCl3H/7SD3LB5qWtTDcYN67aFViDjUcYEjSl12iqQ3cbi0WKsqXNpOoKJQc3s27aFVi0e1=M5h5teN81gep0e/7SD3LB565NvQFbEK7aFViPgbWMeH5P=ScYs27aFViPiApt2s50D2iqQ3FKEfN0/eSjNOoKJQoMF27aFViDRxStN6S1V2iqQ38kWDlt6ooSNClljk8sF27aFViDEEFY=jotiuuD6LalUv7SD3LB5OWPUMpOihNsE3=bNBFSD2iqQ3cMe0MPHIlseBW0gMols27aFViDE3SjU6cKiuubRDXt/k7SD3LB5h=svP83WDEteoJN54JSD2iqQ35OjRNDEEaxD3LB5HoKiYpkv77aFViDWqWM2DcKM2iqQ3cMe0llUTpsgV50g=cks27aFViDWQ8bNPSNW2iqQ35bR6lkgX8SD3LB5Pa0gUuSjK7aFViPEYF3NeJSD2iqQ3uYF6ll2iJMg4=sFD8eF27aFViPpe51h/5lM2iqQ35SG6NP1/JSD3LB5/SspN5P5U7aFViPjEFUND5Su2iqQ3uYvYSkjL=SD3LB5H=3g4FP=K7aFVi06D5M5ha15N8MgKll2/7SD3LB5BWbjkubReSsiXFUgVFSD2iqQ38lEvN0U1=NphFxuQ8ks27aFViPgAoM6AFSD2iqQ3olEvNkiPls/B5P=Npts27aFViDpIEOvVW06kckFDIPHv7SD3LB5BaP=f5D/h7aFVi0eope5h=sv18lWDN0ev7SD3LB5VSYiRpkF/SsiXF1=6pxD2iqQ35DhJc3iP=SD3LB5HW3iApOGA7aFViP=W=bNHaPM2iqQ3pkNJWMuxFSD3LB5sWl675D/L7aFVi0e=EOE4J0jJ8lWDN0ev7SD3LB5q51v1u05/7aFViP5UXMeH=SG2iqQ3ckvmNDiTaxD3LB5ha1/IcY5Yat21J1/4FSD2iqQ38kpeNle1JN5hF0j=8ls27aFVi0U1JS5gospucYvqS02K7SD3LB5QF0gWpse0NMRqF1hgpxD2iqQ353=WaMjW8SD3LB565PiLuDe0l1W/XjvAFSD2iqQ38UUvll2bEOph=sVxols27aFViDpEEMjqSlD2iqQ3ckvqMsRqElN6cKiW8Ks27aFViDN1MD5+SSUNptW/l1j/7SD3LB5/5SsQFbEv7aFViDpA8S=g=K=kplpSpDEv7SD3LB5+=M/IubRDNsuxo1vOJSD2iqQ38PpkN1WxJ1vBabuAuks27aFViPNe53iqWlD2iqQ3u1/sWKgP=SD3LB5e=UHquxEh7aFViDiE=Up+5OHiul5WaPgv7SD3LB5xWbUbuMeh7aFViDNTJNp+=0JQc3EgpPgv7SD3LB5B=PjM8K5+assq5MUgJSD2iqQ3FbHfW3EENxD3LB5hals/8sgvN0e1JSpxJSD2iqQ35t5CM3WQuxD3LB5s=D/lu1UvXsWxJ1vBpxD2iqQ3uDesMsiISD5h=jEiols27aFViDRQXlgq5NW2iqQ3ubEfNtUT5NpBcKjMcUF27aFViPiLXMg6Ws92iqQ3cSs6a1jPFM6AFSD2iqQ3FPM/WMsqNxD3LB5B=P=NcbEqSqFViPg0Jbpqaxw2iqQ3ulEmSMjPljEVctT/uYs27aFViPgAF1pgaliIuY5Yl1Ek7SD3LB5s=PM6oMe+assq5MUgJSD2iqQ3oSiCasEEFY=jotiuuDF27aFViPEY8YhP=eW2iqQ3oMUgpDWxFbNB=PM6oMF27aFViPHxo1e65evoc3EgpDpK7SD3LB5e=lgA5Oig7aFViPgP8bHQF0glc1e6alUv7SD3LB5hJxpk81gOll21cSigJSD2iqQ3uSERJ1jUNxD3LB5P=Y6M51eg7aFViPsQF3EDaD92iqQ3uSH0F1uQ5SD3LB5j=k=du05h7aFViDEESshgotjMFSiYlkgv7SD3LB5O=evRcSi0SDRqlsh+FSD2iqQ3pMefJPsqEOD3LB5hlYeK8lWDlt2DJNghpxD2iqQ38sgCWY/IpxjHJxpo81F27aFViPNL8Y6O=DW2iqQ3pk5JSKHxoU565PiLuks27aFViDp3=M56W1vRuD6CSspv7SD3LB5+JxjNckF/SKHxo1g6FSD2iqQ3uYvRa3gYoSD3LB5OWMu/5YN67aFViPg3XSW3LB5eWspE5kNk7aFViDRq81es5NF2iqQ35P50EkuQSxD3LB5joKgAuMeg7aFVi021FNpVa3NK8lWQlt//7SD3LB5BSSUNc3pMWDjPFbHHJSD2iqQ3psUma1i3=UgOlbHiFNF27aFViPgLcY2e5MW2iqQ38K5+Msi3Nep6WbUSuUF27aFViP1QlsUD=Ps2iqQ3c35JaPp3=1U+5e5K5ts27aFViPRxpOjB=Y12iqQ3cSiCp31qSshgaliNcks27aFViDWqFU=OWbu2iqQ3uDD6llUiJUgsos/Sc3s27aFViDiX8NpOW3==uk56E0UK7SD3LB5galiRuDeWat/Plsv6pxD2iqQ38xiCN1i3XNU4aljI8ls27aFVi0exJN5g=tjM8M1DWlUv7SD3LB5BWPJQc3vfok=UWlD3LB5QF01QoMUvN3HK7SD3LB54aSvluM6hNMWxFUUHFSD2iqQ38lpvN0ebJN5h=tjk8ls27aFViP5ToUNOWsV2iqQ3F0=qSPNTaxD3LB5s=0gmuM6/7aFViDRqSOpe=1V2iqQ38OiqMspIEOv+=DQqols27aFViPEWJU5+5xG2iqQ3ckvfa0UU835/lSU151F27aFViPNP=1veS1V2iqQ3ubEgEYUb8N5h=tsPoMF27aFViPUWF3NOW1V2iqQ3cbReM1pUuxD3LB5H5xNmFDVQ7aFViDiE5bpOSlD2iqQ35SGeWPuQSxD3LB5H5xjMc35qMKUAF1//NxD2iqQ350F/MDE3EOD3LB5B=0=oueTQaMEbWlvOpxD2iqQ38lEvN0U1JM5hJ0j=8sF27aFViDjWo35sWKM2iqQ35PF/53Mx=SD3LB5gStAQuDeWNPgecUH+FSD2iqQ353NLM0UT81vBSYeMueF27aFViP=AMs2H5Ps2iqQ3cY5qMsiEux=g=K=kpls27aFViDRqEM/4lliIubiJN1EK7SD3LB56WspJ5KNU7aFVi0/Pls/+S3jMcSiYlkgv7SD3LB5eosveu35O7aFViDiUXk=ectM2iqQ3uYvCStUiJbHjctiWFKs27aFVi0/PWN=jaSjluxEKNKgK7SD3LB5+=P==FKEf83pxJN=gJSD2iqQ38K5qasp35MUg=PiRpts27aFVi06IoM5haSpJ8lp/EteK7SD3LB5s=eHx5l5K7aFViDEY=YU+W1W2iqQ3FbHuE1jLoSD3LB5ClSuD8SihN0/xEOHCpxD2iqQ3FY5f=PWqpxD3LB5g=tM/8sgvN0e1=YUhpxD2iqQ3plvmMPgUaxD3LB5qWDpTFkNL7aFViDuQStvPStM2iqQ3pKvqN3gESjEB=P=LoPs27aFViP1qlsvOW0D6oM6vNKik7SD3LB5OabHi8kpglY6bJNvhpxD2iqQ3cSR6NMp3=UHBSk==iqQ3ckvqWsEESsUscKiWF1F27aFViPgbWM/B=P=Mc3FeWBFViPHbXN56cKi7FsgkN3gk7SD3LB5Q=PiupsUma1i3=UgONxD2iqQ3FSR6NMp35UNsJxjepks27aFViPgYoUpH=YD2iqQ3uDeCM1EEaxD3LB5e=eHYuPNe7aFViP1x5Ug650gSc3uQakgK7SD3LB56WbU=uDe0a1p1WsUBNxD2iqQ3plvq=sRqlj=OaD/IuUF27aFViPUESOHg=06RuDe/pPg/7SD3LB5B5Dp=FM6g7aFVi0/Pc1vHW3Niol5YWMpv7SD3LB56Wsvhukvg7aFViDpE8MUg=0==uk5UNsiv7SD3LB5HWYJD5SHL7aFViDi3XNU4aljI8lpvN02k7SD3LB5OSk=JpK5WlkgPFSUgpxD2iqQ3ol5CMPUA8UgQF0gec3s27aFViPgAoMUg=PiRpt5UNsi/7SD3LB56cs/Mc3FeWKFqF1vsJSD2iqQ3cSGe5KT/SxD3LB5s5xNL8K5CN1i3XNU4pxD2iqQ3ckMe=3Tx5SD3LB5g=tNN8Yp6lYeD5YphpxD2iqQ3oMUmasEESsvVctgWuPs27aFViDpW83Hj50M2iqQ38kWDWt6I8NvC5le=80s27aFViPgUWNN6S1V2iqQ3FPNYF3NLuxD3LB5q=PgXF1667aFViDpI8N=+SM/Ncbi0lMEv7SD3LB5HS3imFSEU7aFViDjPWN5BW0TQckFeWt2k7SD3LB5OWOMquSjL7aFViDiXFUg/ctikolWe5kg/7SD3LB5DoK=4FbHK7aFVi0UEc1vBot6WoMUmW3U/7SD3LB5+ctUKFSiYlkgUoUU6FSD2iqQ3plpSpDiP=UU+W1/N8DF27aFViDETo1vD5YD2iqQ380pKp0ebJNNCFxHN8Ys27aFViPTqSjN4aljkolp0NDNv7SD3LB5gSkgRuSiealU3FUHONxD2iqQ35Ojq=siPcSD3LB5h=t=18MgUp0eDFNNCNxD2iqQ3ubGeNMWqpxD3LB5q=DvDu0vK7aFViPi3lKHB=D92iqQ3F3=YS3pUSxD3LB5h=tjkolpvN0e1JM5hJSD2iqQ3pKF/akgAoY5H5P=ScYs27aFViPpLMt2sSK12iqQ3FD/qJ1jXJSD3LB5OWki=5lNK7aFViPgAoMUg=PiRpt5UNKg/7SD3LB5xot=R5PvO7aFViPE3oY/PSsF2iqQ38eUmNDRx8UHs=D/lu1F27aFViDE35UUgabuAcY5WWYUv7SD3LB56W3=7ubiJaPgAoSUgpxD2iqQ383vmEBFViPpPatUj=312iqQ35KvCEsiPNeUVSsvC5ts27aFViDpXaj=6WjW2iqQ3FbjfEkpY=SD3LB5j=YTQ53NO7aFViDj0Mt5+=eF2iqQ3uMeY=1s/=SD3LB5jSNw/cSHS7aFViDpbJ1g6ctgLol50EsEv7SD3LB565PTeul5O7aFViPWQaKieWY12iqQ3cM6RoKpASxD3LB5PSK=H5Sih7aFViDET8bHPSs92iqQ3ckNJ8kpE5SD3LB5PSsvQulvU7aFViDiAJU=OS3iRu16/E0Uv7SD3LB5VaYMx8MgLW0U1JNNCJSD2iqQ3ptvLalU3=bjs=xUIuUF27aFVi0Tq81vOSkjMu160NKUK7SD3LB5HWMvHubj77aFVi01qWNHOW1vRcOR/N1iK7SD3LB5OSYgWcSE/XlUEXMe+pxD2iqQ3uxEqSsEE81vOSkjM8Ys27aFVi0UiJ1vscKilcSR6NsEv7SD3LB5+S1v7c3=g7aFViPsqElvq=lM2iqQ35D/Yo3N3pxD3LB5H=P=NuM6K7aFViDuq8NpOWPi=ukvmSt//7SD3LB5x=DQ/5t5O7aFViDEUNsvH=k12iqQ3c3vsFssq8SD3LB5sos/kc3uQaMp35bpsJSD2iqQ3uk5/XlUX5Ug65P=kcks27aFVi01q81vOSki4pKF/akg/7SD3LB5QJxULukv6IPHbXMhHFSD2iqQ3ol5YlMjP=NpB=0=ic3s27aFViPE351v+=P==iqQ3uSiRcspW5SD3LB5Pot6MpM/77aFViPEAoY=x5012iqQ35D6ulkpE5SD3LB5xW1w/516O7aFViPEYoY2xWDF2iqQ380p6WYU1=NNh5sE=8Ps27aFViPjec1e/WM92iqQ3pKNMoDWqMxD3LB5/5UHQFxHg7aFViDi35Up+5xMQol5WlY//7SD3LB56WY6tc3vflMRxoSD3LB5+=MpJFxig7aFViDpPSjU+5Ps6oM6qlMp/7SD3LB5VaYjk8lpY=teD5M5hFSD2iqQ3FKEfNPUPF1hH5xNX8Ks27aFViPEWoUEP5YM2iqQ3FKEgakHINe=+SSU=u3s27aFViPsxo1/+=DQQolNCasEK7SD3LB5s53=SpMeU7aFVi02=JUp6ctgXukFDEYUv7SD3LB50a0gf51e77aFViP5TSKUxW1W2iqQ3uM6CN1iK7SD3LB5B=P=Mc3FeWsE=WNgsJSD2iqQ35t5quMEEMxD3LB5DSYgkpkvv7aFViP=L=bE6aDW2iqQ3uPM6W3sQuxD3LB5B=SjlFDh77aFViPM/aO=j=MW2iqQ3F3=YF1peXOD3LB5B50=ouNgh7aFViPgDWsU6WYeMc3vRN0UK7SD3LB5BabuA8OiqMspIEOvVNxD2iqQ3u3vq=KpYcSD3LB5qWY6Tck567aFViPT/o35x5lD2iqQ3cSs6a1jPFSD3LB5sJxjEubReWt/A8UpBNxD2iqQ3uk=mo3pEMxD3LB5g=xNlu1eeE0U38U=BJSD2iqQ3o16masNPWM/BS3iBc1F27aFViPNYF1hx=MF2iqQ38lEvN0U1JM5ha1hK8ks27aFViPRQoU=s=192iqQ3FDeMc1EPaxD3LB5OW0ifuPN/7aFVi0eD8NNh=tjk8kEvW0Uv7SD3LB5DWspuc16O7aFViP1q8NpBS3=McMe0llUK7SD3LB5DWlgWuk=67aFViPHxoYpOSk=Lukv/pDik7SD3LB5jcsw0cSE67aFViDiP=UF3LB5+=ev/u1//7aFVi02bEOihSK1Q8sghEKj/7SD3LB5s5YggFxGQ7aFViDjPWlee=YD2iqQ3ueTQaMEbWl5H5P=ScYs27aFViDpPMK=sa012iqQ38lpLEt6IuD5hJxux8ks27aFViPgESs/B=PjMu1eYNKg/7SD3LB5q=3gh535L7aFViPu/cYE0csF2iqQ3cMeJN31qMxD3LB565evucYuQakgE=UEONxD2iqQ3uPv0N1p1NKpBWP==cNF27aFViDNTJUHOS1V2iqQ3FKEgakHK7SD3LB5h=jpEubReWt/Pc1vBFSD2iqQ35s6sJP=epxD3LB5HcsveuPvg7aFViDWx8SUgSt6kuY5WWKjk7SD3LB5D=PRQpl5g7aFViPp3atUD51W2iqQ35kFeW3ieXOD3LB5xaP=P51hK7aFViDs/MjEHWbw2iqQ3u3W/aK1q8U=s5xMQ8Ks27aFViPgPEOUgS3i=pK5ealUv7SD3LB5CFxpk8lpvltU1oSigJSD2iqQ3c3vRa3gAJbHH5xUNiqQ3uM6YuMEWJSD3LB5hFxHN8NUvlt/D=UgVFSD2iqQ3FMhYWsEepxD3LB5haljJ80WDlYeD=Ng/NxD2iqQ3FDefFPNWSxD3LB5e=SUD5Ys27aFViDNTps//aD92iqQ3FxHuck53MxD3LB5saPiJF3ve7aFViDuq5UH+W1wQ8DUvWlev7SD3LB565PTQc3vg7aFVi0e1JSp/lYNkolpeNlek7SD3LB5H=kiHFDe67aFViDNxJbjBSlJqck5WMPU/7SD3LB5jotiuuDeYWsjPXNNgJSD2iqQ3cY5WWYU38UE6ct6oFKs27aFViPU=WM/jotjiol5YWMpv7SD3LB5ga06=c35qMspbJU=OpxD2iqQ3cbi0MDjY5SD3LB5C=suq8k5hNl6DcNNhpxD2iqQ353v+aDNWpxD3LB5OoKJQolNWNMET5bHgJSD2iqQ3ubi+c3iX=SD3LB5H=xUScY50lkHxoYp0pxD2iqQ35Me0cKgWSxD3LB5050JDu3NL7aFViP=3ljvBSs92iqQ38UgKllU1=SpVa3No8MF27aFViDEoWsU/WY==cYNflkU/7SD3LB5+cteXcKs27aFViDiiXSpVcsuxpj1/SMik7SD3LB5OW1Q0c3p7p0eD5U5jJSD2iqQ3c160FMEU8SD3LB545sFq8UUvN0/IuevCNxD2iqQ3FPNCFMieaxD3LB5xaeHf5Pv77aFViDi35SUgSkgSubiYWt2K7SD3LB5Cl1h=8Mggp0eDpeN4FSD2iqQ3cY5YWKg0XNgs506Ic3s27aFVi0UbXsF3LB5sos/PuMhh7aFVi06xEjgCF0jJ8N1DN0ev7SD3LB5sotgWc3W/SDRx8bH+FSD2iqQ3cM/C51NW5SD3LB5QF0gEck5Jl3gxoM5sJSD2iqQ3uxiWWsjPXNN4ali=c3s27aFViP1x53veWMW2iqQ3FxjqcKNU=SD3LB5sWYeMcM6fasjPESHOpxD2iqQ3uxEqSsiE5U13LB5DaxNauM/L7aFViP508Y=eW3M2iqQ3c1/mSDiP8SD3LB5s=YgMpsVQ7aFViDNTJY2+csF2iqQ3FD6maKRQNxD3LB5BWbNuu16mWMpv7SD3LB5HWs/J5Y5e7aFViPgL83HBW0D2iqQ3FxiCokN0JSD3LB54=tAq8N1DlY638N5gJSD2iqQ3F35RoMpX5SD3LB5C5UHC8kpLp0eD5NNhJSD2iqQ3uY5qSsEIWsU/Wkg1oMF27aFViDEeESpD53M2iqQ38Yv6Nl2DasgVa3sD8Ks27aFViP1/XMgsS3UXcKs27aFViDiENsh0SsV2iqQ3cSR6MDRxoS=gJ06Ec1F27aFViP538Y/653M2iqQ3cSiYlkgbJ1/jotiuuDF27aFViDRx8UHs=D/lu1g7pPU/7SD3LB5B5Nvm5kv77aFViPEW8Ygx5PM2iqQ38kpONleIFSi4J0jk8sF27aFViPgL812qSM92iqQ3pt5JSKHL835/lU5lpts27aFVi0/Iue5h=tNK8kpeNlek7SD3LB5VaYDD8lpvEKjoJNNhJSD2iqQ3ckW/MPUPo1/B=OHiFNF27aFViPHxo1g6ctgLu160NKUK7SD3LB5HoKiMuYuDXsjTFUpBJSD2iqQ35lNsJ1iPEOD3LB5e=SUJF1DD7aFViDi3FNpBSl=Mc3uQakUk7SD3LB5s5xUbF3vL7aFViP5eatvP=192iqQ3c3E7XlTq81vOSkitc3s27aFViPviasiAalisoeUKp0hk7SD3LB5eWspk5lNe7aFViPN053U0=192iqQ3c3EgpDWxFbNB=PM6oMF27aFViPpXoUgBWDF2iqQ3olp/ll61JMUQaUvuu1F27aFVi0e1JN5hF0sDolpUWt/K7SD3LB5e5l=X5Sig7aFViDEW8UHB5M92iqQ3ptEgpDiE=Up+5OHic3s27aFViP=ESjg6FSD2iqQ3535sWKRqMxD3LB5g=tsPolvmN1jPESH+FSD2iqQ35DVeWDiXFSD3LB5e=0g05tve7aFViPEPEN5scKiYuY50NKg/7SD3LB56Sk==oMUmaspAFU=6NxD2iqQ3oMTDXsE1ElpOSk=Luks27aFViDixWM/jotiuuD6L7aFVi0UiJ1eH5evS8KF6NPU/7SD3LB5Oa12KoNghlleooSj+JSD2iqQ3cY5Wl31qXNNBSk=Ipts27aFViPiASjUqW0M2iqQ3FYMeaMRQWOD3LB5CFxpk8lpvltU1FM5hFSD2iqQ35OHqlsN3pxD3LB5H5PJxFMD6EKHxoN5gJSD2iqQ3olpUEt/IpeUC5t=18ks27aFViPpLo3=6W3M2iqQ35Dh0=kiUMxD3LB505YgbcSEv7aFViPieXNgs5M92iqQ3uY=quMjY5SD3LB5O=0Jeu350NMpYXMUBNxD2iqQ38YphlYU1=NNC5tjk8ls27aFViPUX5UHOSY12iqQ38sgeEtU1=SNVaYjk8ls27aFViPjeNj=OSYs2iqQ3u16mWMpYXMgsalUKpsF27aFViPUPWM/QF0gIpsehakHK7SD3LB5eSMpRul5g7aFViDuqSshs=DF0olpUN0ev7SD3LB5/5SUauDh67aFViDiXFM5HcteMc3F/NDpv7SD3LB5BWUvS5SH67aFViPTxMt=0ots2iqQ3c3EspBFViPEEWNp05xw2iqQ3pKF/SsiXFSD3LB5jFxj7ubECWKgPFSD3LB5D=D/4F35L7aFViP5UWlex=3ie5ls27aFViDpTas6OWDW2iqQ3FKEfa3UAo1h/WPgIoMF27aFViDuq8NpOW0J/ckvfSt//7SD3LB5OSY=buk5e7aFViDiU5bEBcKs2iqQ35OHY=1iUNxD3LB5qSsvmFD6O7aFVi0/P81vOSkjMukFeNDp/7SD3LB5hlYeoolpvNleDae5hNxD2iqQ3pk5W=kNWcSD3LB5BF0jRukF/NDRxobH6FSD2iqQ3olpUN0eb5S5gabuA8jF27aFViDsqpjUBWP=NcYW/a1ik7SD3LB5B51Qx5see7aFVi06iJNvCal1dFtvmaspv7SD3LB54JxuD8YWQlt/I=SiVpxD2iqQ3oMUmaPUAF1vV5P=Sc3s27aFViPHINe=+lbuA8OECW3gk7SD3LB5+=D/NcUg7p0eD5U5jJSD2iqQ3pkvmSKHxobH+5e5iols27aFVi02YcSjVa15o8lpvEK5K7SD3LB56ctgXukFDEYU1JM5CFSD2iqQ383WDN0e1JN54J0se8sF27aFViDNeWN=BS3i7iqQ3uP50JP=LWOD3LB5h=t=18MgeNl6I5M5hFSD2iqQ3cYMe8Dp3cSD3LB5+506m5sDA7aFVi02=J1eBWbMQ8KvCMsNK7SD3LB5DS3=McMe0lkEPEN5sFSD2iqQ3olpvp0ebJNvg=tjK8ks27aFVi06oJN5hF0sDolpUWt/K7SD3LB5O=Dvlu1e0pBFViDRqMjgB5YD2iqQ3uDe+FsNepxD3LB5/cjH=FbHg7aFViPs/cYpVWt6P51UgpDEv7SD3LB5O=xjR5PFD7aFViPuqWSEHSMF2iqQ3FbiR=sNEuxD3LB5VW0AqcUTD7aFViPR/pteD=SG2iqQ35shfNsuqFSD3LB5V506luYF6ll2iJMg+pxD2iqQ3uYuDXKg3SOiQaUvLuks27aFVi0U1=SE6lSuq83EvN0Uv7SD3LB5h=t1q8kpeWleiJNvCpxD2iqQ3olWe=1i35Up+5xMQueF27aFVi0e1JN5hF0seolpUlY/K7SD3LB5D5t1/olpUWl/IJN5hJSD2iqQ35shYN35YcSD3LB5hF0jJ8sg/WYeo=Sj/NxD2iqQ3oMTDXsE3=bHHJ0iucYs27aFVi0U1JM5hFxHN8NUvlt//7SD3LB5QaUvLukv6pP1qlsvONxD2iqQ3uY5Yl1EoWsUeWPi=uks27aFViDpL8bpx=SG2iqQ350=s=MjeNxD3LB5h5teN8lpvN0exJNvhNxD2iqQ380pqM06xEOj45tNM83s27aFViDRqENEBWY=LiqQ38PpLp0ebJNNC5shM8sF27aFVi0eIoM5hJxpk83p6Ele/7SD3LB5HSlg1cSi67aFViPpeENEq5M92iqQ3FP5sNMR/8SD3LB5V50T/ptvqN1iK7SD3LB5H5xNLc3vKXlUiWjvgpxD2iqQ35PvWJP5WoSD3LB5jcspo50MQ7aFVi02iJNvh=tjW8xiCN1iv7SD3LB50SY6Sps6U7aFViDjE5YgxotM2iqQ3c3N+oPiPEOD3LB5DWMvQpOiO7aFViDNeSOp+WDW2iqQ3pKF/akgAoMUg=0==uks27aFViDWx51UsotgWc3s27aFViPgAoSvVW0sdiqQ353=uNKi08SD3LB5g=xNRu35eXlUE5bpOJSD2iqQ38sgvN0e1=YUCWM2iFsF27aFViDiLat=05YM2iqQ3c35WS1jTFS=g=tgkpls27aFVi0/ApjU6ctikc3vgalUv7SD3LB5+SYglu3s27aFViPTQltNsWYD2iqQ38sghlt61atpha1EN80s27aFVi0/I5SNPal1dFtW6NPU/7SD3LB5sSleMul5WaPg35UNgJSD2iqQ35SEuWK53uxD3LB5OWY=WckvmasN0XM/jJSD2iqQ3ubEfaPgAoNpOSl=Luks27aFVi01x81v+W3=kckvWaDj/7SD3LB5BW3i3FSEh7aFViP5X8bHOWl12iqQ3oMeCaY/P8Ug6llUKcks27aFViDWxFbNB=PM6oMeCN1iv7SD3LB5H5PiEuY577aFVi0e3=1/+SlDx8MgLWleK7SD3LB5+=k=kps6g7aFViDNepKv/5Sw2iqQ3Fk=Yl3E0axD3LB5s5NGDFY=K7aFViPpUEliqWUW2iqQ35KEvNYUYSKggaliRuDF27aFViDi3XNU4aljIc35+SKgK7SD3LB5g=tgkplpSpDE3XNgHFSD2iqQ38Pphll6opD5ha15N8ls27aFVi0/P8Ug6llUKckv0Wsik7SD3LB5xaDpNu0v77aFViDpToUj+=M92iqQ3FYvuFkEWpxD3LB5Va3Uo8lpvEtU18NNhNxD2iqQ353NRoPpX5SD3LB5g=0J/ptF6a1RxoUU+FSD2iqQ3oMVQlte=EOj45tNK83s27aFViPuQajH+SsV2iqQ3pOG/=kpA5SD3LB56WK=TcM/K7aFVi0eIpxiCaljJ8sgOWlek7SD3LB5650gWuYuQaksxo1/+JSD2iqQ3F05WlMjAJSD3LB5Daxjx5shS7aFViPg351UHcKs2iqQ38NUvWY/I81vhF0jJols27aFViP=PFYhjaP12iqQ3u05JaK1q51=BW0gLc3s27aFViPNUWM2HWD92iqQ3ubiqSBFViDNelt6s5PM2iqQ3cSjfEMEEMxD3LB5BSl=Mc3uQaMiX5Up6pxD2iqQ3u1hsoDNLWOD3LB5x=kJxF1/e7aFViPiPatEeosV2iqQ3ptEgIPsq=UU+J0iNpKs27aFViP5UNKUH5MV2iqQ3FPFeNDpAFNpV5P=Mu0s27aFVi0Tq81gAWbM/u35fSsEK7SD3LB5s=0=P5YvU7aFVi0e1JN5hF0jJ8PEvltek7SD3LB5eWOjCubj67aFViDiXc1vB=D/LFKEfSkU/7SD3LB5DaDwQc35k7aFViPWqlj=OWsW2iqQ38Mg6Nl6Datpha3UN80s27aFVi0eIoM5CFxpk8lpvN02v7SD3LB5Va31xolpgNleI=NphFSD2iqQ38sg/p0ebJN5g=tNK8MF27aFVi0e1JNvg=shK8kp/Nlev7SD3LB5x=PiSpK=K7aFViDEESj5+5kguc35Ja0//7SD3LB5BW0gLc3vgEYU3EN=BpxD2iqQ3ptN0MksxpxD3LB5galioptvWMPgDWsUsNxD2iqQ3pK5MWP5UFSD3LB5ClYjk8kEvEl/I8SjgJSD2iqQ3u3Ema1i3=UgOlbHiF3s27aFVi02xEj5h=t1xolpUNl6k7SD3LB5Va3Nk8lpvllU1JNNhFSD2iqQ35bHsNP=AuxD3LB5fSYJ/ubE/E0/bJUg6FSD2iqQ3pkFeN1i0axD3LB5D=Npe5k=e7aFViPpeNtiO5DV2iqQ3ulv/EYU1oU5j=jEKpjF27aFViDi0F3UD5192iqQ3ubEWSDE0axD3LB5gotilukFeWKgAoNp+FSD2iqQ3pseq8KNecSD3LB5+S3=6uYve7aFViPgbWMv6WY6lpKFeWt//7SD3LB5DSlg6F0vU7aFVi0eepxNVaYU=FNgLNl6K7SD3LB5e5NHuFxEv7aFVi01q81gBS3=MiqQ3olpgEt/IoSE45KjK8ks27aFViP=YSKHH5SG2iqQ3ckpsaPg1peU6aY6L81F27aFViPpY53jOcs92iqQ3uxiWa3EPMxD3LB5j=3ihuM/O7aFViPJxSOijosV2iqQ3pt50l1pv7SD3LB5hl1EK8M1DWteiJSpVpxD2iqQ3uY5YWsjAc1/gJ0=uu3s27aFViDNEWkEOaPM2iqQ38lNhEl/I8Sjg=tNo8sF27aFVi0eTNxHt=tAA8M6kls=v7SD3LB5CJ0jJ8sgUll/I8SEgJSD2iqQ3uP=0aDuQaxD3LB5sl12Kul5WaPg35UN4NxD2iqQ3uY=qFDRx5SD3LB5sSMuQ5l5L7aFViPNU8bje5MW2iqQ3FMeMSP5TSxD3LB5+5xMQue1/l1p3=1UBJSD2iqQ35bi+=3R/cSD3LB56W1vWcSiMN1pAFNpOJSD2iqQ3uxE+SYUIEOD3LB5+WOUIu1hh7aFViP1xc1gAWUvWu1esSDpv7SD3LB5dabHXcSiYlkgUESjBFSD2iqQ3ck5fokUL=SD3LB5goKilu0p7p0/DoU5jJSD2iqQ3ck5WNkgAoMUg=PiRpts27aFVi01qcUH+5evL8KW/Ekg/7SD3LB5/aev+5MeS7aFVi0eIpeN45sh=8kEvlt6k7SD3LB5sJ0UKck5JWKHxoMUgJSD2iqQ38kpeNle1JN5hF0jJ8ls27aFViPUeljij=312iqQ35K5YSsWxFUUBNxD2iqQ38lEeE0UiJUp6csvSc3s27aFViPuqoUg+ctTqc3vg7aFViDjWoUjxStD2iqQ3FxEs8kUWuxD3LB5g=tgkplpSpDuqSshsJSD2iqQ35OEC5kiUpxD3LB5g=KNN8NgON0e1pD5hNxD2iqQ3ckvCl3HxoYp6ctgLFMF27aFViDEENt6x=0M2iqQ3ck5CMY/PSsgBWbpMu1F27aFViPU0Mtvq5DF2iqQ3F0pUEk5LWjvhlljJ83s27aFViPg3SjgO=evRpks27aFViPuxajEx=Ys2iqQ3c3FeWKFq8U=BS3i=uUF27aFViDRxF12H5xNX8DUmasiK7SD3LB5QF0gfcSR6Nl/PcUHBJSD2iqQ3cSiJN1Wq5SD3LB5HS3Txps/e7aFVi0/Iaegha1EK8kWDW06/7SD3LB5s5Pi=F1VD7aFViPgoSD5CctRD8eUmNKU/7SD3LB5Ccs2iFsgkN1E3=bHHJSD2iqQ3pKvRa3EUXOD3LB5C=t=i8MgRaY2DpxH4JSD2iqQ3uxEqEMi35SD3LB5H=l=353NS7aFViPi3XSi/5YD2iqQ380pgp0ebEOHCa1WD83s27aFViPgxJ3p65xNool=mlMik7SD3LB5+l12K8lEvl1ETpx5gpxD2iqQ35s60NKUE5UUgaliuu1F27aFViPg3SjN+l12K83vmEt2k7SD3LB5eaD/05sVD7aFViP=0=bjBWsV2iqQ3plNsckpUWOD3LB5q506L5t567aFVi0eA8NNhl3NK8kEvltUv7SD3LB5+5eF6oMhClkgPFUHsJSD2iqQ38PpeWKgD8Ngh5sEo8sF27aFViPgXcU=xWtM2iqQ38lpvN0ee8Nv4Fxuq83s27aFViPpY5UE/a012iqQ3pKF/akgAoNp6WbUNpts27aFViPUPljg+F0UKptvWNPg/7SD3LB5OSl=LukFANK1qXNNsJSD2iqQ3pshYNKJQNxD3LB5x=1plcSE/7aFViPpYaKUs=DF2iqQ3ubiJN1EISD5gW3gEc1F27aFViDE1SD5V5tgkplpSpDp/7SD3LB5QF0g7uk5qaPgPEsUgJSD2iqQ3uYM/8MWx=SD3LB5D=0=ic35kNt/P5UpOJSD2iqQ38sggWY61aD5ha15N8UF27aFViP=PpKNBStM2iqQ3pt50a0/PcUH+5evL8Ks27aFViPHbXNgO=0=NFsgJMsiK7SD3LB5VaYjk8lpUp0eDaD5hFSD2iqQ3oSiCasEEFNp6WbULc3s27aFViPUWoUj+5Su2iqQ3ptEgIPH3SjNOoKJQols27aFViDjPENN+ctgec3vRWBFViDiXFNpBS3=McMe0ll//7SD3LB5eSKiQuY5e7aFViDpEc1jO=lM2iqQ3pMV/W3WxFSD3LB5PWSpKcKESMth=aeiPNxD2iqQ3cYN0EsE3SjUj5Sjlu1F27aFViDRqWN5B=PJQc3uQakgK7SD3LB5Bali1ckvfaPjXo1vBpxD2iqQ38NghWl6xJNvClSuD8MF27aFViDNLNte+WsW2iqQ3c3N+MDpAJSD3LB5sotT/c3EgpP1qlsvONxD2iqQ38xHRSsiTc1/s=D/Icks27aFViDi1WsU/W0gWcY5WWtUv7SD3LB5/WlgN5P=g7aFViDiY=Uj6WYM2iqQ3cM/RasNLFSD3LB5hWY=icY5gEKUiEjNONxD2iqQ35Oiso3WqEOD3LB5/cKgb5Y5e7aFViDpA=16e51F2iqQ381gep0eD5NNh=tjk8ks27aFVi0U1=N5VaYjk8lpUp0ek7SD3LB5jSM/a53MQ7aFViP5TMjv/S3M2iqQ3ukF6Nl/PXN5s=D/lu1F27aFViDi3F1/OabHiFSjC=tUK7SD3LB5+=P=Sc3vqSKsqXNNsJSD2iqQ3pk=ua3NT=SD3LB5xotih5DDQ7aFVi0e1oSih5KM/8MUvll/K7SD3LB5H5UHDFMeO7aFViPRqaOij=1W2iqQ3olp0NDN1MD5B50==cUF27aFViPMqoY2eSK12iqQ35MVeNKMQ8SD3LB56a31Qc11el1pEuDUQpxD2iqQ350NC5DjAJSD3LB5OalUKckv0WsRq8U=BFSD2iqQ35PM/EkgAaxD3LB5/WY==pt5UpPg3aD5/NxD2iqQ3c3uQakgAc1/BSSULcYs27aFViPjPWM/OSM/IckFDpPi/7SD3LB5HS1/kFPN/7aFVi0UiJ1vscKilcSR6lMEK7SD3LB5q=ew/5k5k7aFViDiXc1vB=D/LolvMa1ik7SD3LB5+5eF6oM6CWsNPls/ONxD2iqQ3cYW/a1Wq8NpH=xUopts27aFViPUDpeNCF0sD8sgep0ev7SD3LB5D=xM/FMVA7aFViPMx81exW1V2iqQ3ptpSalU3=UUH50NMuls27aFVi0eANxHt=tAA8M6kNqFViPNEF3gH5MF2iqQ3cbEC=PiP5SD3LB5DSti0ul=L7aFViPWx51j0SKM2iqQ3cSHqMDjAaxD3LB5+aPg1ul=v7aFVi0U3F1vs=0NMc1eWSsiv7SD3LB5sWbpiol5qasp3=Np6pxD2iqQ3uDeYNKgxWjw3LB5h5leJ8YEvlte=EjghJSD2iqQ3ck5CW3iYaxD3LB5DWKR0FSig7aFViPUoJNvh=tj=FKpUEDi/7SD3LB56ctguckW/MPUPo1/BJSD2iqQ3FkvmN0/ESjgV5D/NpsF27aFViDRx5Uix=xu2iqQ3uSH0W1pWcSD3LB5B50=opt50lk1q=UU+JSD2iqQ35YvRW31QuxD3LB5j5Mp4uPvU7aFViPEA83g+=kM2iqQ35SiWWKpY5SD3LB56WYeMc1D6lMi/7SD3LB5B=PM6oM6sMKgTF124pxD2iqQ353M/WKN3=SD3LB5V5tN=olvvNKRxoUH+JSD2iqQ3uY5YakgPNqhQ=PgluDF27aFViDp3Sj=Ba12Kck5fl1ik7SD3LB5O=1v3pKvL7aFViDp351hVW1/McU16NKU/7SD3LB5e=Nppu05g7aFViP1qXNNs=0=uu1e0llUK7SD3LB56WKgm5bik7aFViPi351UHcKjKFSiYlkgv7SD3LB5qW0gucYNCSsi3ND5OJSD2iqQ35k5fW3J/cSD3LB545KN=olWQN0/IJN5hpxD2iqQ38sggEleooSE4J0jJ8sF27aFViDpPaK=PSK12iqQ35KNMW353FSD3LB5eWOjJcM6g7aFViDWqENpD5ks2iqQ35s/C=PpXJSD3LB50ctg+Fkvg7aFViDpeF3UHaeF2iqQ3FbiW8DN0SxD3LB50axNV5K=U7aFViPUAFUHBWbNsobsQ7aFViDpEpKj0WKs2iqQ3uYvCStUiJUgsos/Sc3s27aFViPgoEOvVW3iupsTDXt/k7SD3LB5eot6PFbi77aFViDWxFbNB=PM6oM6sMKgv7SD3LB5eSM/lcSGQ7aFViDELo3=D=YM2iqQ3FsgkN3g3SOiQaUvLuks27aFViDE3=1gHcKRe8DUvN02k7SD3LB5OWlifuSig7aFViDpW81UjStD2iqQ38MgOWY6DF1e+=Kjocks27aFViDEoWsUOJxjTuDeWaPjk7SD3LB5B=P=Eptp7p0eD5U5jJSD2iqQ38jUmc35xoM56ctgucks27aFViP1qXN=HW1/WiqQ3c1V6MP1qMxD3LB5g=xU=ol5qSKUESOHgJSD2iqQ3uMh+NPgYaxD3LB50SNwx51DD7aFViPNPcU=/5DW2iqQ3olNJaKUE5UEVFxjWu3s27aFViPHIlshHcKUKuxEqEMiv7SD3LB5j5Nu0FSj77aFViDibWjNh=tUM8sg/lkU/7SD3LB50W06g5bGQ7aFViDjEMtUO=lM2iqQ3ukFea1iT51h+ctD2iqQ3plvmMsEE=bHH5xUNcjF27aFViP5A=3i6WD92iqQ38kpYXteXNe5t=KTA8Ys27aFViDE0JYE+W1W2iqQ3uD6qEkpP=SD3LB5BSSUNc3s27aFViDE3XNUs=0=NptpSpDEv7SD3LB5+=OHic3vflMRxo1=HFSD2iqQ3pt5Wasi3SsvOW3=L8eF27aFViDpIEOv+=DQqolvCWsN/7SD3LB5B50JQcSiK7aFViPgLaths=PM2iqQ3pt5ealUTJUE6506Wuls27aFViP5ASj=/WOw2iqQ3ck5qaDjPEM64aljJ83s27aFViPU0=3NOWPs2iqQ3cSR6NMWqXNE+FSD2iqQ3ptvhNsWxF1v6SNvW8Ks27aFViP5TMs/sosW2iqQ353FeMsRqEN56csV2iqQ3pkEmo1iXJbjsJ0ifu1F27aFViPsx=3jxWM92iqQ3pOHflK=X5SD3LB5D=3=+uDe/7aFViPUE5UUfWSG2iqQ3ubE0WKw/XMg6ctgLuls27aFViDN3oY2HWk12iqQ3ptvfWkgxoM5OWPReuYs27aFVi0ebJNvg=tNK8lWQlt6v7SD3LB5H5xUN5KF6NMp3pD6AFSD2iqQ3uPvRlK=PFSD3LB5soK=J5bHK7aFViPEYcUNDSSG2iqQ3ckvqStUiJ1h6cKiR8Ks27aFViDpAF1veWDV2iqQ3uSjfFMWqNxD3LB5j5bUIcSs6NMpPWMU+FSD2iqQ3FbR6Nk=UEOD3LB5D=Yix5K5g7aFVi0Tx81/6WP==ukvqEl//7SD3LB5B50gWuDgkN1i3=1U+FSD2iqQ3uM/WlKi0pxD3LB565D/M8K5CasEEFNpBpxD2iqQ38kEgpPUAoUH6Fxj7uks27aFViDR/JYpP5012iqQ3FMD6WKNPFSD3LB5g=xNlu1eeEDRx5bHBJSD2iqQ3ck5YaKWq5SD3LB5H5PgUcY=67aFViDEEFM5eW3=IpKvfStUv7SD3LB5P5MvP535h7aFViDWq5UE+50AQ5xiWa0hK7SD3LB5OaDpXpOEL7aFViPJxatE+W012iqQ3u05YEMiP5UNs=lgSuUF27aFViDp351hVW1/McU16WMiK7SD3LB5jSS1ecY5/7aFViPTxpOiOSkM2iqQ3ckMeJ3N35SD3LB5+oKitukFea1RqWN5BJSD2iqQ3pOE+uksQNxD3LB5OlSjSukFeMY/PajH+JSD2iqQ35P50o3EAuxD3LB5s=MvxFbEO7aFViP5eStvPSkM2iqQ3ck5Jl3gxoM5sSM/WpjF27aFVi06bEOEh=tjJolpgWYUv7SD3LB5+cKiWiqQ3uDe0a1pbWMg6ctgL8Ks27aFVi0U1oSEVaYUJ8YpKp0e/7SD3LB50SSN45YNe7aFViDjAFbN/WbULc3W/a1ik7SD3LB5BWUvLc3vgpDMqXN56FSD2iqQ3olvqN1E1SD5CctRD8eF27aFViPpUMjpxWDW2iqQ3516Y=1NPuxD3LB56cKs0uY50SMp1MDUQpxD2iqQ3uPMeFPMqNxD3LB5+lbuA8OiOIPHbXNgspxD2iqQ3ckFDIPHT8U565xudFts27aFViDpUWMgqWK12iqQ3u05YEMiP5UNsJSD2iqQ3cYW/WDjAF193LB5+oK=VFxiU7aFViP=LNOEsots2iqQ3uSiYlMp3XSs3LB5OW06hc1DD7aFViPgU=3jx=1W2iqQ38UgvN0exJNUhFxpo83s27aFVi0/Pls/+S3s0olpUWMEv7SD3LB5e=UGxuk5k7aFVi02=JbEH5PRQulp7p0eK7SD3LB5/S3gU5tvg7aFViPuQpKj65xu2iqQ3ckvmNPgPEMh/W1vuuYs27aFViPw/XN5OSS1Qubs6pmFViDEiWM/sSk=NptvhEYUv7SD3LB5j5evWFKEfa1Rqlj=OpxD2iqQ3ckvqMsRqEkg+50==iqQ35M/sWkie5SD3LB5scjGxF3MD7aFViDi3XNU4ali=c35/E0UK7SD3LB5h=KU=olpvNl6Ipxp4JSD2iqQ3ck=faPg05SD3LB5+=P==FKEfNsixXMv6FSD2iqQ38jTDXtQqFUHsabu2iqQ3cSiRasiEps//5evSiqQ3pSWQNk1qXNNOWPi=pKs27aFVi06DpeUg=tjN8Yp6W02v7SD3LB5xWDvL5KNh7aFVi0UiJbHjctiWFKEfWKg/7SD3LB5OJ0jNFPFeNDpAFY=BJSD2iqQ3FbEmN3pAoSD3LB5P5k=oF3NO7aFViP1q8bEe=k12iqQ35Y50W3u/=SD3LB5s=P=L8OiWNKg=XMhHFSD2iqQ3uMV/ckUW=SD3LB5B5PM6oM6masNPWM/BpxD2iqQ3olvCWsNPls/QF0giuUF27aFViP1q=UU+oK=SiqQ35KpUEt/I=Ngg=tgR80s27aFViDjUENH050D2iqQ3uD6LalU3=UUH50NMuYs27aFViPELcUEx=lM2iqQ38kpeNleo5M5h5teN8ls27aFViPg1WsU+csvkukvfElUK7SD3LB5h5M5J8P=u8YeD8M5hFSD2iqQ3oSEsaY/PWN=BSk==uks27aFVi0UiJUgO=P=SuY5CSPg/7SD3LB5PSsvJplNL7aFViDWxFbNB=PMdFtvCNPU/7SD3LB565xjWFKEfWMiENjNBNxD2iqQ3pK=ql35TcSD3LB56Wl6YcbEO7aFViP50cU5DSYs2iqQ38YEvNDibWOiVaYeM81F27aFVi0ebJSjOosFPoMTDXsEk7SD3LB5BSSNWuDUm=KUAo1h/pxD2iqQ3uxifWPiUEOD3LB565PsdFt5fN3gTaqhQJSD2iqQ38KvfMKTqaOH4alsQ80s27aFViPjoaeNhl3NK8kphNlev7SD3LB5xotJxuPNS7aFViPjWptiHSs92iqQ3u1eCWsjPXNNdJDhKiqQ3FSj+ukNToSD3LB5O5M/JFMeS7aFVi0/IcSHg=tjM8sg6Et//7SD3LB56Wt=Vps/U7aFViDNUajiPSY12iqQ3pMhqSsW/axD3LB5j=1pu5OE/7aFViDNYobHDWMW2iqQ3ukvfSPMxSxD3LB5BSMEKcSihNsiX5Up6pxD2iqQ38MgKN0e1MDUQSKi7uks27aFVi06oJSihaljk8sg6Et2v7SD3LB5BcK=o53MQ7aFVi0U1=NphcteM8sghWl//7SD3LB5gW0iRcbiYlMiP51=6NxD2iqQ38DUvlKgPWs5hJ0jRuks27aFViPgAaj5HctgRpt5WN1iK7SD3LB56WUpMpshS7aFViPWQStge=012iqQ3pKvYMMEYcSD3LB5QaUvSck5fSsibJ1eBNxD2iqQ3cM/RMPjLuxD3LB5/St=gpkNO7aFViPg35bpQF0UkoMUmasEK7SD3LB50S1vXFD6K7aFViPsxFbNxSSu2iqQ38lpvlKjoaD5h5KjN8UF27aFViDjP8U=AW0AqcUF27aFVi06iJU5V5Mp=uk5q=Kg/7SD3LB5Va3j=8KpUNleI8NphFSD2iqQ3ul5MMDjeWOD3LB5Ba12K83vmEtU1JS5gpxD2iqQ38lpvltU1aD5h5teN8NF27aFViPNT8biDaDF2iqQ3cSHuSDEeSxD3LB5scKilcSR6NsE3ls/sJSD2iqQ3plN+M353oSD3LB5D50=opt50lksq=UU+JSD2iqQ3FxH+SPpYJSD3LB5OWbU1FkNe7aFViDiEpti+=Pi=c3vCl3iK7SD3LB5g=tjM8M1Qlt/IJSiVFSD2iqQ38PEvll6=EjUh5KsDols27aFViPiTMOpBWP12iqQ3oSR6NsjA81/AW1pRpts27aFViPgxWMeH5P=ScYW/NkU/7SD3LB5+=sFD8Yp/N02DFNvhNxD2iqQ3FP=uE3g3axD3LB5OaDp+5M6U7aFViPgT53Eq=192iqQ3cSiu5Kj05SD3LB5e53==5t567aFViPUPoUE+5Ps6oMUgpDpK7SD3LB5gS3=ock50NPUASs=6NxD2iqQ3ubiCN1EXo1/6WPs6oMF27aFVi0eoFM5h5tUo8YEvlteK7SD3LB56SSMxcbH/7aFViDN3c3jsSkM2iqQ35shqSk5E=SD3LB56W0iQc1eg7aFViDET5bHgalRqck5JWkg/7SD3LB5eWkg05s/67aFViPp3=35BctM2iqQ3cSiCp31qSshgabN151F27aFVi0/IJSNh=teK8lWDlYe/7SD3LB5Va3sq8KWDEleEpephpxD2iqQ3FY=fFMN05SD3LB5+=0615t=L7aFViPUL53UH5M92iqQ35tv+=KsxcSD3LB5H5Yiqu3NO7aFViPiecUj6WKM2iqQ3u16/E0U3WMvOSMpuu1F27aFVi0e=EOE4=leo8sghWlUv7SD3LB5+Sl=SuxiealUT8bHjFSD2iqQ38YNUEt/I5M54Jxu/ols27aFViDiP=bpAWUvWu1esSDpv7SD3LB5DW1/Aptve7aFViDEA51/OS1/Dc35JSKUk7SD3LB5CWY6WcNghlKUIJ1hhNxD2iqQ3c1eJ5kjE=SD3LB5daU5luxEmasiIEOvVNxD2iqQ3uSECNP5eXOD3LB5OSM/Npt50a0Qq8UgONxD2iqQ3FM/+WKUA8SD3LB5DaPi/5sDD7aFViPjLEN=s=3s2iqQ3ckW/MsiXc1vB=D/LFKs27aFViDiTSKNH=3M2iqQ3ulM6asEeuxD3LB5+WOUAcbi77aFViDiPF35+5NW2iqQ38DUvlte1JM/gJ0=uu3s27aFViPUXat5+WYM2iqQ3u3NMFPM/SxD3LB5qWspHu3NS7aFVi02=JU565PiLukFeSY2K7SD3LB5OSkgdpkvU7aFViDE3=bHs=P==u1F27aFVi0U1=NNC=tMquYWQWY/K7SD3LB5x5xNkpKv/pPEPEN5sFSD2iqQ3cMD6lkg35UU4aliNuUF27aFViDE3aOi0=3M2iqQ35seCF3jPWOD3LB5CJ0j=8sgvWY61aevgJSD2iqQ38sgYE1iDoNNhlSuDcNF27aFViDi3=1U+5eFdFt5qMspK7SD3LB5P=DpQ50N77aFViP53NjvBWjW2iqQ3Fk5JMMELoSD3LB5+=lgY516U7aFViPjPoYgB5eF2iqQ3c3vRWtUiJUN65xjWFKs27aFViDi3SjNHlSj7uk5qaPg/7SD3LB56ct6oFKEfN0/eSjNOJSD2iqQ3FSiJ8PNEMxD3LB5B=l=e5bEO7aFViP5LWOEg=tM/8sgvN0ev7SD3LB5s=xvSolM6NPgPEs5eNxD2iqQ38sg/WY/I8SjVa15o8sF27aFVi0exEjUCF0jJ8sggWlUv7SD3LB54aljku0vKE0UTpjH+JSD2iqQ3pKF/SsEESsggaliRuDF27aFViDiUMjNqSSw2iqQ351/WaDNLWOD3LB5j5P=RuDUspBFViPUEls/VaU5lu0uD7aFViDpbJU=OaliLc35fMspv7SD3LB5qaP=I50N77aFVi0eo8Sih=P1Dc3pCSl6K7SD3LB5C5tjk8lpgp0ebEjvCNxD2iqQ3obiCasEEFNp+csvkuks27aFViPgY8bHj5evWiqQ35DD/akiL8SD3LB56SSU=cY50ll2iJN5OJSD2iqQ3ubEYEspEuxD3LB5haYU=olpvNle15Si4FSD2iqQ3uxHJ83JxJSD3LB5OWk=b5lvK7aFViDpTpseeSSu2iqQ3u1eq=sj3XNH6W3=UuDF27aFViDp3px=g=tUko3pSpDEv7SD3LB5DWDvuulMA7aFViDpLXMex51W2iqQ38jUmJ3jDJMUQaUvuu1F27aFVi0U1=N5g=shN81ghN0ev7SD3LB5sW3=iuSiWWt/AF1/jJSD2iqQ35YNYSKUeNxD3LB5P5PgguDhK7aFViPuqF3ExWls2iqQ38Yvu8YeIFM5hWP1Qcks27aFViPN3=3vP5Sw2iqQ3ptW/a3UAo1hV5PgluDF27aFViDEioM56ctguckW/MPU/7SD3LB5BSt6MF05K7aFVi0U1=NNC=KjM8sg/lMNK7SD3LB5+F0iLFOifMspboM5OJSD2iqQ3u05YEMiP5UNs=UpIcNF27aFVi0gXJ1vj5xjWu16qu1Ek7SD3LB5jSMQxF16g7aFViDRqlsh+ct16oMV/8YUv7SD3LB5651v7ukMD7aFViPgDWsU+SNvlckv/EYUv7SD3LB5+SNvuF0N77aFViPgDWsUB50JD8KvsMKgv7SD3LB5B5xM/5K=v7aFViDjLNjUBct12iqQ35Ojsc3gecSD3LB5C=KgI835Ca06E=SNCpxD2iqQ3505+oDi0axD3LB5BctiSc3vqSKHxo1UHFSD2iqQ3ck5qaPiAc1/BS3ihuks27aFViPWQXMv+W0s2iqQ3uSEuF1uxFSD3LB5s5xjic3vgalUTJUE6FSD2iqQ3pKF/SsEESsggalikuYs27aFViDj0o1hPoKs2iqQ351hsM3g0FSD3LB5h5KjN8lpvN0ee8NUCpxD2iqQ3ck=ul1sQWOD3LB5H=l6AcSEe7aFViDiXFUgVcK=kc3W/SMik7SD3LB5Va1WDolpUN0/IJN5hJSD2iqQ3ukFeNDpAF3NjctiWiqQ38sgUW0e1JSp/lYeK8Ps27aFViDpiJ1gB=0=oueTQaMEv7SD3LB5HWDwq5t=h7aFViPgAaj5HctTeiqQ38lpOlteDpxpC501/c3s27aFViPN3FYpDos92iqQ38K5WNMpE=UEH5Ps6oMF27aFViPHxoU5V5kguc35JaPpv7SD3LB5s=1/lu1eh7aFViDNTJMUg=0J/ptF6a1ik7SD3LB5sWKiJpseO7aFViPpP8UEDWkM2iqQ35DeClsjP8SD3LB5BWbNiuYv0laFViPs/=Y2sWjW2iqQ3olMeSspP5MeOcK=lpts27aFViPiTF1/0SYs2iqQ3cMD/akUPoSD3LB5+SSU=u35YWKMq5UE+FSD2iqQ3ck5JMKgbJNNx506lu1F27aFViPgPWN5soshiolv+asiv7SD3LB5sWOjIu1h/7aFViDE=WMgOWYD2iqQ3pMhq=KJQuxD3LB5OS3iRu16/E0UTJ1v+JSD2iqQ3plvfoP5UoSD3LB5+lbuA8OiqMspIEOv+JSD2iqQ3FkFe5PjA5SD3LB5QaYjJ8MghWt6DcSE4JSD2iqQ3ukM6=Kg3oSD3LB5OWYA053=g7aFVi0e1=YU4Fxp=8MhhEl/K7SD3LB5D5M/ucMDD7aFViPgxoM5+=0JQckW/SMEK7SD3LB5+cspRpkW/a1EE51hHFSD2iqQ3u3=flsWQcSD3LB5DaD/l51/v7aFViDNASthe=Su2iqQ3u0vRa3gPlKj65DpWcjF27aFViPj0asgj=lM2iqQ3cYNuMMpAcSD3LB5e=eH/53NK7aFViDuxFYEx=eW2iqQ38Mgvp0eDFNNh=tjk8ks27aFViDsQ5bNP=SG2iqQ3uY=RWMRquxD3LB5VaYjk8lpY=teD8NNCpxD2iqQ3pMefFKuQEOD3LB5qW0gqpOj67aFViP1qXNNV5D/Nu1e0llUv7SD3LB5BSYR/ptEml1pTSjE+FSD2iqQ351UgpDE3lsv6W3=7uUF27aFVi0gXJ1vj5xjWu16qu3U/7SD3LB5H=NH=51/K7aFViPgTJ1hx5xu2iqQ3pkv+8DR/=SD3LB5HaPgi5Y5U7aFVi0UTJUE6506WulF6MPgv7SD3LB5ha3jkcNgqakg3oSHCNxD2iqQ38K5+MKgPlshQF0gNpKs27aFViPpUpONOSSw2iqQ3oSEmNP1xJNp6W0gWcYs27aFViPN0at2Ba0M2iqQ3ckvWNKgPESHV5DpRpts27aFVi0e1=M5haYNK8kp/Nlev7SD3LB5CctRDolpv7aFVi0U3F1vs=0NMc35JSsi/7SD3LB54aljo83pmNDN1MD56NxD2iqQ3pOifck5WSxD3LB5jctiWFKEfWKgAaOHgpxD2iqQ3plF/NDuxuxD3LB5g=0==uk5UNsjPESi6FSD2iqQ38M6kND=1Fbvhcj5oiqQ3u0vWMDRQEOD3LB5DWUpT5k5U7aFViDpbWNHBSYR/ptEmo1iK7SD3LB5+SNvi5M6U7aFViPg3FUHBSMEMuDeWS1jv7SD3LB5D5PRxcbjK7aFViDNTJUHOSlJQukF6Nk5/7SD3LB5qWkgNFxjh7aFViPEXMO=/SSw2iqQ350NJJ1EAJSD3LB5B5PjooMUml1pTSjE+FSD2iqQ3u1hJE3iWcSD3LB5+=1/7F0FA7aFVi0e1JN5h5M5=8Mhhlle/7SD3LB5OSSUSc3uQaMETo1/ONxD2iqQ35Si+WsuxuxD3LB56Wbj65DeK7aFViDjAo1=OW3JQcKuQ7aFViDp3XN13LB5P50=Iuxie7aFViPTqaOHfSYJ/ubE/E0/v7SD3LB5HW06SFDek7aFViPNXptv0=012iqQ3u3=CEspLWOD3LB5qctRQcY=U7aFViPN3asvD53s2iqQ38sgvN0e1=Yp4J0jJ8NF27aFViPiAMj5DWjF2iqQ3c1D6NMpbWNgHcjHW8DF27aFViPiP5bN0=MF2iqQ3pt50aqFViDEUXkvHWYM2iqQ3uMD6ukgT5SD3LB5goti=c3v+MsRx5UgVFSD2iqQ3uYM65DpTFSD3LB5VaYjk8lpYoleiEOHhpxD2iqQ3cM/+EK=EXOD3LB5sSl=SpK5e7aFVi02oEs5Q=PiupsUma1iv7SD3LB56SSUTF1VQ7aFVi0e1JNvx=tU=FNgglt/K7SD3LB5+Sl=SuxiealUTF1v6pxD2iqQ3u1eeEDRx5bHB=D/Nc3s27aFViPj0=3gsW012iqQ3u3p/NleooM5haSpJ80s27aFVi0U1=M5hF0jJ8sg/lt6K7SD3LB5h5sEJ8bihNMWxc16gpxD2iqQ35lFeFk=05SD3LB5q51vp53vK7aFViPgeFU=0aD92iqQ3FPv+MkpP5SD3LB56SkgMcYNS7aFVi0eDaeNh=ts/8YEvll6K7SD3LB5CFxpk8lpvN02bJNggJSD2iqQ38KpYS0/D81gVFxuq83s27aFViPg3SOiQaU5lcY5WW3HK7SD3LB5BWeHL5OHO7aFViPiT8Y5x=MV2iqQ381gep0ebWjvgJxpo8Ks27aFViPUDc1/C=tMDckp+a3U/7SD3LB5h5sEk8lpR=te=JSNVpxD2iqQ3oMUmNKUAajE+5xNXpts27aFViPUE5UEg=NvRcMe0M0Uv7SD3LB5+ct=LpOj67aFVi0/PajH+=PiWu1TQaMpv7SD3LB5qSNpIFxEK7aFViP5UFbi0=SG2iqQ35KvsSDjYJSD3LB5OalUKckvfMKUxWM2HFSD2iqQ3cMD6lkg35U13LB56WY6lpKFeWt/PESjBFSD2iqQ38kEvlt6bJNvCJxpk8ls27aFViPg=oaV3LB5g=tMD8sghlteD8YphJSD2iqQ3F05JS3N3MxD3LB5eWY6m5KNL7aFViDNPFbNOWbw2iqQ3u16mWMpYXMgsSleiols27aFViDWxFUUHctiW8K5CasEK7SD3LB56WY==cYW/a1Wq8NpHJSD2iqQ3F1V/E1jPXOD3LB5HWl6lFPNg7aFViDWqpjvs5Ys2iqQ35MhJSKJqSxD3LB5OSUHH5Oi67aFVi02iJ1g65evIo0peN0g/7SD3LB5s=k=Sc3F/SsiXFNNHFSD2iqQ3cMgvl3UP8Sph5Pse8Ps27aFViPgElOHDS192iqQ3cMD6aDN/7SD3LB5H=OHi8kpLalUbXBV3LB56ct6oFKEfo1iXJbjsJSD2iqQ38NgvN0exJSNg=tMQ8sF27aFViPUP8Y5P=lM2iqQ3ul50a1jk7SD3LB5DaDv05tve7aFViPNPXNN+axu2iqQ3uPNq8kUPFSD3LB5O=0=LcY5WNkgk7SD3LB5H5Dp7ptp7p0eXJbp4NxD2iqQ3ckNM=PiTFSD3LB5sct6Rc35YNPUASs=+FSD2iqQ35MV6F1pX8SD3LB5s=s2K8M1DWkgPWs5gFSD2iqQ38lpvN0UiJ1vOSM/R8Ks27aFViDiY=3jPcKM2iqQ3cSEW8k5WJSD3LB5xWOsxFMhL7aFViPHINe=+=DQqFsgkN3gv7SD3LB5+5DvluY5qSsEIWsUhFSD2iqQ3pOiWaDp3pxU+=PJquks27aFViDpAcbEjosQ0iqQ3u0=qFkjE=SD3LB5BoKiHukNk7aFViPgAoMUg=D/Nu0v0Wsi/7SD3LB5+ctUMc3v+SsiXFUg4pxD2iqQ3pKM/J35PXOD3LB5g8qV4N1MdLe=jIq2lpaV4N3E1NUJPWe=lExElNbFxNUJPWOD3LB56W1vRu1esSBFViPNEWkEH=0D2iqQ3ukvfasp3Sj=BaliLcks27aFViPj0atU65312iqQ3FSjsS3=0uxD3LB5s=PJDptNCN1iXF1/BpxD2iqQ3ukvRlMWQ=SD3LB5g=PiRpt5UNsiP=bpQFSD2iqQ3FY5sa3iTuxD3LB5BWPgWuDe+MDRxuxD3LB5sWs/DuMhK7aFViPuqStpq5P12iqQ3FbEfS3iLuxD3LB5halj=F0pfaY/xEONhpxD2iqQ3ckM6MKETuxD3LB5/WONYpKNO7aFViPH3lsv6Sk=Sol5+N1EK7SD3LB5g=06RuDe/pPs/cYpVNxD2iqQ35P5sM1jX8SD3LB5O=xUopt5CN3g351u3LB5HcKjMcSiYlkgbWM66FSD2iqQ3pK=m=sEXcSD3LB565kiR50=K7aFViDiAJUE+cKiWFKEfa3Uk7SD3LB5qa0gJulMA7aFViPjP=YvO=Y12iqQ35KNuaPUepxD3LB5q=NvVul=v7aFViDi3812+506aFKEfSkU/7SD3LB5h=K1Q8PpUp0ebEj5CpxD2iqQ3plvmMsEE=bHH5xUNiqQ3cOiCa3wqESjB50gWuDF27aFViPH3FUHsabuAcY5WWYUv7SD3LB5CSkMxckpfaY6DoSi4FSD2iqQ3cSjsMMN0cSD3LB5xa06biqQ3oMhWNMET5bHq5evWu3s27aFViDNYJUNj=3M2iqQ38Me+SkUDaev65sV/c1F27aFVi0hWNjN65xjWoDTQS3Uk7SD3LB5O=0==c3FeWKpEXMh+FSD2iqQ3olpUlY/IJN5h=tNK8UF27aFViPsqFY=HSSu2iqQ3ck5qaDjPEM64als/u0s27aFViPgPlshV5xNRu35eXlUK7SD3LB5eWk=mpKvg7aFViPRxpKvPaxw2iqQ3pMhq5KgeSxD3LB5QF0gC8kpKNleD8M5hpxD2iqQ3cMhYa1uqcSD3LB5g=PiWcMeWWtU381vOpxD2iqQ3plv/alU3EMvB5PM6oMF27aFViDiE=Up+5OHicSE+aYUK7SD3LB5s5l=dFSjL7aFVi0U1JNphF0jN8N1QltUv7SD3LB545j5luxEmasiIEOvVNxD2iqQ3c1/RJPgYFSD3LB5s=P=L8OiWNKg=XNj6NxD2iqQ350=WuME3FSD3LB56WPgIiqQ3plpSalU38UE6ct6oFKs27aFViP=Ult=DSsW2iqQ35SG/oKTQ=SD3LB5D=M/p5kN/7aFVi06I8N5h=s5K8N1DlY6/7SD3LB5haljk8sg/WY6opxjCFSD2iqQ3FxHJ=KiWpxD3LB5+oKiNpsDQ7aFViDjXpjUxW192iqQ38Pp/NtexEj54J0j=8Ks27aFVi0e1JNvg=tM/olpUWt/K7SD3LB5BWbj4F35O7aFViPUAo1hDS3=McMe0lkiK7SD3LB5O=eHxu1ee7aFViDiXJbjsJxHMc3F/NDpv7SD3LB5BW3gEuxi0WKN3=UU+FSD2iqQ3uP5CW1j38SD3LB56SM/NcYs27aFViDjP8MUg=0==uk5UNsj/7SD3LB5qospLu16U7aFVi02bJNvhJ0se8sgUW0ev7SD3LB5jaD/iFxHe7aFViPWqoUgB5YD2iqQ3cbEfa1j35SD3LB5OSNvVuY=L7aFViDiEMepH=D/LcY50NlUK7SD3LB5HSYeMuxE6Nsuq8NpOJSD2iqQ3olpUlY/IJN5h=t=g8Ys27aFVi0U38UE6ct6oFKEf5spv7SD3LB5eWspCptMA7aFVi0UiJbi65ew/c3uQalUK7SD3LB5O5l6iuP=/7aFViDjP8Ye/W0D2iqQ3pOG/=sELEOD3LB5BSSM/uD//7aFViDRx5UN+JxjIubiJN1EK7SD3LB5+=l6m5K=e7aFViPN3c3gHSsV2iqQ3F0pgWY/I5Sp/lY1q8sF27aFViDjU81UB=3s2iqQ3oSiYWMp3aj=OSMQ0c3s27aFViPuQXlNPcKs2iqQ38YWDWte=JNvVaY1Q8sF27aFViDiP5SUgSl6RuDeq=1Nv7SD3LB5+cKjMck5WNt/P8Ug6NxD2iqQ3uY5Yl1pYXNN65xjWcKs27aFViDiXJbjsJ01dFSj+=KHv7SD3LB50aPiTF3=L7aFViPNTFUUH5192iqQ38lpvltU18M5h5teN8NF27aFVi0e1JNv/lYUJolpUWt/K7SD3LB5O=kiaplv/7aFViDiP=UU+W1/NiqQ3u0v0WtUTFbNO=PM6oMF27aFViPiENj5e=Ps2iqQ38OECNPUPEBhQJxULuks27aFViPEXps6sW1F2iqQ35K=0FsiYJSD3LB50SlgCFPMA7aFViPgXcUi/5P12iqQ3pl5sEsRQoSD3LB5DoKgVFk=g7aFVi061J1vha1/R8l5fSkUK7SD3LB5B=P=Mc3FeWsWQ=U5OJSD2iqQ3uDh+MKgPlshVFxjSpts27aFViDEEFYpsSleiol5YlMj/7SD3LB5xctA05D667aFViPg3=bH+F0UKu05JaKUk7SD3LB5+cKs653=q=0/DpxD3LB5sStg0cY=v7aFViDETpx5galRQck5fMsiK7SD3LB5eW3=gcY=e7aFVi06opeN4=t6783WDWt6v7SD3LB50cKgQ53=v7aFViPiESs/B=PjMcSE+a3E/7SD3LB5+F0UKpseYMDpP5SUgpxD2iqQ3olpgltU1=NgVaYek8ls27aFViPgDWsU6WY==cYFeWMi/7SD3LB5s=eH/FM6U7aFViP=e5bjs=SG2iqQ3c3vgNt/PcUUBWbMQoMF27aFViDWxF1=6W0gWcY5WWKvk7SD3LB5qW06kuxih7aFViPjeMsj/Ss92iqQ3u1V/FDsqMxD3LB5s=Upockv+aKTq51=ONxD2iqQ3ueUmNMRxFM56F0Rqcks27aFViPWxFYExct12iqQ3FYvWWMNPoSD3LB5j=3i+ulNS7aFViDNE5S=g=tMqu0vKE0Uv7SD3LB5OWjpkF35K7aFViDiEMKg+5M92iqQ3F0NfF3=LoSD3LB5D53iAcSHg7aFViDpLElhx5312iqQ3uk5qWsj1SD5h5tjko3s27aFVi0eD8NNh=tjk8kNKltev7SD3LB5dabHXu05YEMiP5UNsJSD2iqQ3FKEfN1E3=1gHcKRe8DF27aFViP1qlsvOW06hukvCWBFViPgPFUHsJ0iluDUmaPg/7SD3LB5DSt6xuY5g7aFViDiX5Up6Sk==iqQ3ukvuSt/PEM/sJxjIuks27aFVi0exEjgCaljJ8sgglt/K7SD3LB5gW3JDu0F/N1iXF193LB5H506+FSHh7aFViPMxo1hj=1V2iqQ35SHRcspUXOD3LB5+=1/QuY=h7aFViDEEWjpsctgSc3Fea1ik7SD3LB5BSYR/ptEmMKg1WsUsFSD2iqQ3cYM6MDiAuxD3LB5650gSc3W/SMjP5UE+JSD2iqQ3cSE+EkNAuxD3LB5q=kgfu3ve7aFViP5Upjgx5SG2iqQ3FkvmJ3W/JSD3LB56W3NMpOiWaDp3peEHFSD2iqQ3cbRel1EU5SD3LB5H5PjKu0W/JDjPljEHFSD2iqQ3uxR6F3pEaxD3LB5hlSpk8lpvlKE1=Si/NxD2iqQ35t=RaDp3axD3LB5QF0gC8Mg6Nl6DpD5hFSD2iqQ3FxjqNMjLoSD3LB5q5ki1FDhg7aFViDpbXlN+50guptEm=KU/7SD3LB50WPTDuSEK7aFViPNL=3g6WP12iqQ3FbHC5DiWoSD3LB5q=lgPcY=O7aFVi0e1=M5h5KNK8kphNlek7SD3LB5B=eF6oMDeN1iE5MUgJSD2iqQ38lpvN0ee8SNg=tMQ8sF27aFViDEUpjisS1W2iqQ3c1efoKNPNxD3LB5/WUpT5Mhe7aFViP5T5YU/S1V2iqQ38SiUW0U1uD5hJ0jJols27aFViDjUpjiD=DV2iqQ3FDeslkj0axD3LB5/WY==cYvh7aFViDWQobN/WUvRuxEC8PU/7SD3LB5D=1/kF1/L7aFViP5Ec3ND5DF2iqQ35YNMFk=L=SD3LB5BWPieuxie7aFViDj0Ss/OSks2iqQ3ckvqMsRqEs5+=0JQc3s27aFViPs/c35VJ0jIpOihNKU/7SD3LB5OS1vRcbHe7aFViPsxMsje=3s2iqQ38lpvN0ee8Spg=tNo8sF27aFViP=Xatvx50M2iqQ3ol=0oY/bJUg65xNo8Ks27aFViDRx8bH+5Ps2iqQ3c3uQaMj3Ssh+=P=NoMF27aFViPNPXlUO5SG2iqQ35Defo3=XpxD3LB5hJ0jk8KpUNleI8NpVpxD2iqQ3u1DeJ3=LpxD3LB5Va1Ve8KpUNleo8M5hJSD2iqQ3F05Wlku/cSD3LB5gal1diqQ3c1esc1jAcSD3LB5O=0=Nol5CMPUA8UgQFSD2iqQ38kvkND=1obvCojF/pYs27aFViDE=WM/BctRQpkEgpDEk7SD3LB5BSMuQuluQaleDaDUgJSD2iqQ35K=qNsjEoSD3LB5+5evWu350NMpT8NpONxD2iqQ3cSEWl3s/cSD3LB5xctgeukvU7aFViPTq8Y2eWtM2iqQ3ckFelY/bJ3p+5Dplc3s27aFViPgUESjB50gWuDF27aFViDNP51vOpxD2iqQ3ol5YlMjP=NpH=D/LcYs27aFViPiecbpeSMW2iqQ3FM/R8kp3WOD3LB5+5M/C51/67aFViDWxo1gQF0g7ptvqNDEk7SD3LB5s=NvuuxEqSsiE5U13LB5HWtg7pl5U7aFVi01qWNHOW1vRcOiCW1pK7SD3LB5BS3=McMe0lkEPEN5sFSD2iqQ3ubEf81p0FSD3LB5j=OHi8lEgpPUAoUH6FSD2iqQ3uk5uaKNEoSD3LB5AWY6ucYs27aFViDEE51hHcKiliqQ3uDe/pDiX5Up6Sk==oMF27aFViDNTJUHOSl=IckF6p1i/7SD3LB5Va1Ek8lpUp02bJNvCJSD2iqQ3cY=uW3uQpxD3LB5PSK=+uYN/7aFVi0/IFSNhaYDQ8MUvlt2v7SD3LB5HWkgSpseS7aFViPELljijcts2iqQ3ukFeSt2EEN=BSkMPpjF27aFViPp0F35xWPM2iqQ3cYv+NMp3XOD3LB5OS1hiol5WNMET5bHBFSD2iqQ3cSEqN1EipDUOSkJQpKs27aFViPEAJUH/5P12iqQ3ptF6SMjPljEgojpIuUF27aFViDNPENv0=lD2iqQ3u11/SMjPljEgaliLFKs27aFViP5LEMjB=Ys2iqQ350NuE1jYFSD3LB5PoK=H5tv77aFVi0/P81gfWSG2iqQ3u0M6W3ieSxD3LB5OcKgmu0FD7aFViDWQoY6P=MV2iqQ3c35Jasp3SOi+F0jRuks27aFViDpTStU6SMF2iqQ3cbjW53i0oSD3LB5H=DpN5PNL7aFVi0UNIq2lpaV4N1MdLe=jIq2lF0plNbFxNUJPWe=lExElNbFQ7aFViPE35U5e5lM2iqQ35OHJ51jToSD3LB5eWspaFM/v7aFViDpT83ieSlD2iqQ3o3pSpPgElj=6cKs0uYs27aFViP1QNjiHWDV2iqQ3uNUmSDEE51eQF0g7pts27aFVi0/IFNgsaYNN8lpCaY/K7SD3LB5sot=bFbjh7aFVi0U15NN4=tek8lpR502/7SD3LB5sotguu05eNk1qXNpVNxD2iqQ3FbEqFkNUuxD3LB5/50=Xck=/7aFViPjo8NNhl3NK8kphNlev7SD3LB5Bcs/CuSjL7aFViP5PFY5e5DF2iqQ3FsgJNPUAF12g=Ps6oMF27aFViPsQptUDa0D2iqQ38kEvN0/D=SHg=sEK8UF27aFViPRqls2D5SG2iqQ3cSiRSK1qNj=scKjMueF27aFViDpeoUjDSk12iqQ350M/8kETFbHO=YgWuPs27aFViP53lt/+=NF2iqQ38Nghp0exEOjh=tjk8MF27aFViPsQWkgHWOw2iqQ3FsgJSPgP=1hQaUvMc3s27aFViDpE5bHH506RolMeSsp/7SD3LB5e51p4uD/e7aFViPjelOieosV2iqQ3cSs6SsNTJUHOSlJQuks27aFViDEWJ1Ue=lM2iqQ3cbiRakMxoSD3LB5HWbUSuSEh7aFVi0U1=M5haSuQ8kEvWl/K7SD3LB5V506luYF6ll2iJUHBpxD2iqQ3uk5R51NEaxD3LB56WY==cYW/SsNTJUHOpxD2iqQ380WDWle1uxEg=tjN8Ps27aFVi0e1JNvg=teK8kp/Nlev7SD3LB5qSk=UF3FA7aFVi02EEN=BSkMPpOiWaDpv7SD3LB5OSkjMcSE+amFVi0exWjNC=KjK8lWQNl2/7SD3LB5OoKReolNWNMET5bHgJSD2iqQ3oSiCasEEFNp+=0JQc3s27aFVi0eiJNv4JxuD8MgelKjk7SD3LB5HW3gh5lv67aFViPg3Sjg650gSc35/XlUK7SD3LB5BW0iLubEsNl/PSsgBNxD2iqQ3u1h08kie8SD3LB5s=DF0olpUN0eb5S5gpxD2iqQ3ulpUWl/IpO=D5tNkols27aFViDEPWlUxSMV2iqQ3pluQaleboM5sSl=SpKs27aFVi0UbElgBSYR/ptN0MPg/7SD3LB5+51piplMA7aFViDjeNjHHaxu2iqQ38lpR=teDJM5CFxpo8UF27aFViPsqNseBcts2iqQ3cYvC=DEEEOD3LB5OWPReuY5eXlUXJ1v+JSD2iqQ3u0v0WKiPls/B5P=Npts27aFViDi3SjN+5jHNubReSt2k7SD3LB5B=0=oueTQaksq=UU+JSD2iqQ3olE+lspPXSH4Wjw/cNF27aFVi0/IJN5h=tNK80Evlt6v7SD3LB5h=tjk8eUgp0/oEOD3LB54aliNubReSt2=J1gBNxD2iqQ3olp0NDN1MD5O=xUouks27aFViPUX5bHs=xUNiqQ3FSi0MDibWjpB5PsqoMF27aFViDpE=UEs5PM6oMUgIPHv7SD3LB5sWYeMcMeJN31qMep6NxD2iqQ3uDTQakpeWs5Vlli+5Ps27aFViDNUMtUeSsV2iqQ3cM60Wsp3XNNV506lu1F27aFViDuqlOpDW1F2iqQ3Fxjs=k=0oSD3LB56ct6SF3N/7aFViDpU5UE+5xjWu16/pDNk7SD3LB56WbUtuxE+SYUiJ1eBNxD2iqQ3oMeCasEEFY2s5xjic3s27aFViDi3cY6D5xG2iqQ3FKEfSMjPljE4ali=c3s27aFViP5EMtixWs92iqQ38kpglY6bJNvhaYDQols27aFViDRqEsUQaPJDu05WlkU/7SD3LB5D=Y6Tu16L7aFViDs/8UED53M2iqQ3ul5WaPgxWNgsotguu0s27aFViP5EobEx5Ys2iqQ3u1UgpDWxFbNB=PM6oMF27aFVi0eIaegD=s5K8kpvNl2v7SD3LB56WY==cYW/NMpPWMU+FSD2iqQ38kp/p0eDFNNClYjk8ks27aFViPg3F1/BalUKuxEqEMiv7SD3LB5/51/LFxi/7aFVi0/xEjgClSux80WQNl2v7SD3LB5s5PiTpK5S7aFViDpe8Y26aPM2iqQ3u1eYNKgDWsUO=0Jeu3s27aFViDEX51hDoKs2iqQ3ubEflkgP8bHQF0glc1F27aFVi0eL8NUVaYNk8YpKllUv7SD3LB5H5xNEuUF27aFVi06bEOEh=tjJolpUWl/K7SD3LB5B=PM68kEgIPH3ljHBpxD2iqQ3uMeulkjWoSD3LB5+=0JD5YFQ7aFViDiW=3NBSYD2iqQ3F0F6MK5P5SD3LB5QF0glc1e6alUT8U5+FSD2iqQ3oMUmNDi3=1g+5DvluYs27aFViPUA=U5B=NF2iqQ3pOjqJ3RqEOD3LB5sWtglpluQalebJN5gJSD2iqQ353F/=kpAaxD3LB5QaUvou05YNlUTF1v6pxD2iqQ3Ft5WNKg=JUH+=OHiuks27aFViPRxFYgPcsW2iqQ3uY5Ma3i0oSD3LB5QJxUou05YNkHINe=+JSD2iqQ3uk5YFsWQ=SD3LB5P51vp5l=h7aFVi01q81vOSkjMu160NKUK7SD3LB5q5k=p516K7aFViDRxFS5VJ0jEuPv0N1pv7SD3LB5sWUpSc3vU7aFViPgxoM5sos/kc3uQaMpv7SD3LB5OSkjKc3vRNDjAo1vsJSD2iqQ35PM65PNeoSD3LB5HaxUHc16K7aFViDj3SKiBSMF2iqQ3505+5sjLuxD3LB5+ct16oMgvN0e1JM5hJSD2iqQ38kvkWD=1axD3LB5D5xUQu3FA7aFViDEESsvV5evRcMe0MPH/7SD3LB54Jxpk8PpvlYU1JNNhNxD2iqQ3pt5s5sjEaxD3LB54Jxue8NggW0U1=NNCNxD2iqQ3uxR6MDpAF1/4llRQuUF27aFViPi3=UNO5NW2iqQ38Mghp0ebEOEh5sEk81F27aFVi0/PSjNOoKJQolNWNMEv7SD3LB5g=tjK8lEvWtU1=NgxJSD2iqQ3c3vsasN0XMg6WSUIuks27aFVi0/IFSjg=s5N8Ypep0ev7SD3LB5HSSNa5P5h7aFViPHxoYp0a0eiol5YlMj/7SD3LB5B5PJQckEmNkUPWM/QFSD2iqQ3pM6uSKgeWOD3LB56WUH0pOje7aFViP1Q=Ui6SMV2iqQ35bisMkNeXOD3LB5+SSU=F35Ya1jv7SD3LB5B=P=LFKEgalUTc1vBJSD2iqQ38K50EsE3SjUjFSD2iqQ3FtvvIP=3as/g=06RuDF27aFViPgE8UUeW0M2iqQ3uDhsE3uq8SD3LB5j=jEKu0F6l1jAFUHBNxD2iqQ3uk5UNsj3Ssh+=P=NFKs27aFViDiEEM/OaSHMc16fN1iK7SD3LB545e5M8kWDEle=EON4JSD2iqQ3ckvKXlUIJN5h=tjkoMF27aFViPwqSsg+5bG6iqQ35KNY=MjeSxD3LB5O=l6JFMVA7aFViDi3XNU4ali=c35/E0//7SD3LB5Va1Ek81gLp0ebEONCJSD2iqQ3c3pSalUTF1v6SM/NcYs27aFViPUPF1hH5xNX8DUvlKg/7SD3LB5h5UHC8kpvp06xEOphNxD2iqQ35DeMMk1Q=SD3LB5saY=S8kWDWle=WjN4JSD2iqQ3cY5WWYUTF1v6SM/NcYs27aFViPHIls6g=D/LFKEfSsEK7SD3LB5j=Mp6uxE67aFViPpY=Ups=YD2iqQ35k5CEMNPoSD3LB50=UHXF3N67aFViPUAF1vV5P=Sc3F/SsiK7SD3LB50StgWFSH77aFViPUEXMhj5OuA8OiRWsi/7SD3LB5OWk=ips/67aFViDEXaD6AFSD2iqQ3FKEglt2xoM5Vlbu2iqQ3plEvN02=oahQot6kcks27aFViPgP5UEBSMV2iqQ3u35Yl1jooSD3LB5BcspeuxHK7aFViPUeMjv+WtD2iqQ3psV/FMiTcSD3LB5+5xjRuk5JpBFViDEUEl5e5eW2iqQ35KvqlMsQMxD3LB5D=SMD5s6h7aFViDRxc3=DSKs2iqQ3ukFeNDpAF1=+oKjiols27aFViDWq5UN+JSD2iqQ3FM/scKTq5SD3LB5sabuAcY5WWYU38UE6FSD2iqQ3cSiYlkgYXSi65evucYs27aFVi02iJMg4=sFD8eUmWDj/7SD3LB5/WYgYFSRD7aFViPgWoYhs5NW2iqQ3uk5qatUUpjU65xNLc3s27aFViP1q=UUs=PNKcY5epPUk7SD3LB5OS3=WoMUmNkUPWM/QFSD2iqQ3505uEKjAoSD3LB5/5PiLc1/g7aFVi0UEajH+=PiWu1UgpDj/7SD3LB5haSuQolpgNl6bJN5gJSD2iqQ35M/WMkJq8SD3LB5PSkgk53=h7aFViPUPo1/BJ0ihck5fSsiv7SD3LB5B5P=NptvCJ1ETJM5HFSD2iqQ3FkM6=PJ/=SD3LB5HWNH/53Nh7aFViPTq53UDSKs2iqQ3u05YJ3iTFSD3LB5DWtgpcY5L7aFViDNU5UvsWlD2iqQ3uP5+cMpWSxD3LB5gWYAqpsF27aFViP=3NjvOWbG2iqQ3cSiCp1jPEMgBW0gWcNF27aFVi0eE81hC=KgE80pWSkU/7SD3LB5qSK=Rul=77aFViPi3EkiBW0M2iqQ3u0vqElUiJ1vscKilcNF27aFViPUAo1hV5PgluDDQNKU/7SD3LB5Va3U=olpvp0ebJN5VFSD2iqQ38lpUp0eI5M5h5teN8ls27aFViDiT81/BctM2iqQ3F0vY5KN3axD3LB5s=0==uMe0WKU/7SD3LB5xWk=mFYvg7aFViDiXJbjsJ0ifu16mWMpv7SD3LB5+5D/PuDhU7aFViDEE51v+os/Dpt5YWKg/7SD3LB5gWP=ock50asE3=bNANxD2iqQ38DUmNMRqEM/4Wb1/pts27aFVi0U1=SiOosFPol5fN1Nv7SD3LB5+5xMQiqQ350M6=3=EFSD3LB5jotgMcbRD7aFViDjeoUjHaPM2iqQ3ubiCN1iAJUE+cKiWFKs27aFViDi1SD5OSk=L8xWQXt/k7SD3LB5s=3g0cM/U7aFViPTxF12QF01QoMUvN3HK7SD3LB5V5tNN8kpeNl21512VFSD2iqQ3uk=uSMp05SD3LB5+SM/WuY5/XlUE8bi6NxD2iqQ3uSHfcMNLuxD3LB5q5xjVps/e7aFViPELcUEsWls2iqQ3c3FeWt/Ppsvs=PJxcks27aFViDRqENjBaDW2iqQ3u0NJakjPXOD3LB5CF0jJ8sggN06opeggJSD2iqQ3ol5JasiEuxUgSk=NoMF27aFViP5LWleeaP12iqQ3pl=mNsR/FSD3LB5sWM/qF35O7aFViPsq5UEBJxHM81UmN0//7SD3LB56WPJDubHS7aFVi061JNgh5spW8KpvWkEv7SD3LB5CW31qcYp/NPg1ueUhNxD2iqQ383pvElAQ8NvVa1We8MF27aFViDRqEM/6SNvlcSiS7aFViPUeXlUq=DW2iqQ3uP=f5k5PSxD3LB56Ws/opMeO7aFViPHINe=+lbuA8OiOIPHv7SD3LB5s5PM6oMUgIPHT8U56FSD2iqQ3u1eJSKM/JSD3LB5HSM/Pul=/7aFViDjP=Y/xWk12iqQ3u0NYN1pAFSD3LB5xoKgIuMee7aFViPg1MDUg=06SckvCl3H/7SD3LB5sW0=iFSjg7aFVi0UIEOv+lliIuY5Yl1Ek7SD3LB5sSMEiFsF27aFVi0Qx8U565xudFtW6MPU/7SD3LB5eWPg+c3=77aFViPWQobHj=YD2iqQ351hf51p3=SD3LB5+ct6k5Pvg7aFViPEUo1e0SYD2iqQ35Y=0=MWqSxD3LB5BS3io8DUmNMRqEM/4NxD2iqQ3olEYMsiAJU=OS3iRu1F27aFVi06xEOphlYjk80=6El/K7SD3LB5+5NGeuMeO7aFViDNeWNiD=012iqQ38KpCaY/xEOiCF0jk8Ks27aFViDEY=3HB5lD2iqQ3ubHqMPgXSxD3LB5x=MpVu0=/7aFVi0ebJNgVaYNM8sgLWMpK7SD3LB565Np/5Y5k7aFViDiP=UgHlYM2iqQ3uxjCNspUNxD3LB5s5DvW5tvh7aFViDs/at2+WP12iqQ3uPNfaDWqEOD3LB5h5tU=8Yp6llAq=NvVpxD2iqQ383WDWY6xJNvhlSpk8ls27aFViDjP5UE+Jxjuu16mWMpv7SD3LB5B=evIul50a1joWsU+pxD2iqQ3FYvqc3sQoSD3LB5H=kgd5Y5g7aFVi0eTNxHt=tTA8SEklBFViPpWMKHDa0D2iqQ3c3pSpDp3XN54aljM8MF27aFVi0/IoU5j=jEiol5CMPU/7SD3LB5+Ws/mFxjK7aFViPUAoUH6Fxjuu16+asiv7SD3LB5BWPJQcOs6a3UAo1hDpxD2iqQ35DeRJP5W=SD3LB56Ws/Aukvg7aFViP5UoYN6SYM2iqQ3u1hMc3jW5SD3LB5Ootg3Fk5S7aFViDi3NepV5xjL8NUgpDEk7SD3LB5x5l=U5KvO7aFViDpP5SUgalUKuxEqEMiv7SD3LB5VllimFkEgpPUAoUH6FSD2iqQ35KM/EkETSxD3LB5BWPgE5kvK7aFViDjPMtE6aeW2iqQ3uxG6W3ULSxD3LB5/5PJD5tNO7aFViPEL5bE0=1F2iqQ3c35kalU3EMvB5PM6oMF27aFViPUAFbHOSM/ipKvqSKpK7SD3LB5qWKiVF3577aFViPUPSjpV506RuDe/NKg/7SD3LB5/axjIcbH67aFViP1/XMgH5Pjiol5YWMpv7SD3LB50WUv=cMhU7aFViPpPFbNqaxG2iqQ3cbi0WKiX5UEB=1/Wcks27aFViP1/5bN+=l12iqQ3ol5Casi38M2C5tjWols27aFViPp3Fb=s51F2iqQ3c3=+a3gAoSD3LB5e=Nv1FDDA7aFVi0eD8NgC5KNK8kpONl2v7SD3LB5O5DvuFkFD7aFViPHA8bH6cKiWcKs27aFVi0U1FNUC=tUK8YpgWteK7SD3LB5OojGe5P=O7aFViDpTSjE+5OHicMD6lkgv7SD3LB5gWbjuuxiRaKwq5bpOJSD2iqQ3oMTDXsi3=1U+5e5KcNF27aFVi0ee8NUCFxuq83Evlt6/7SD3LB5qWlTD5tvh7aFViDNLWS=D5k12iqQ35kNf8DETFSD3LB5s=YAq5sh67aFViDixpsu3LB5s=P=L8OiWNKg=XMvBFSD2iqQ3oMe+asiT81/galRQpks27aFViPUEls/V5Pguc35Ja0//7SD3LB50ct=l5t5K7aFViDNYFY/s=DW2iqQ3pK5qMsiUXOD3LB5OWtTQcMeO7aFViDjPENHs=MpSubifasiv7SD3LB5DSYio5KNU7aFViDEbJUHOlSjWu3vmWsN/7SD3LB56WSUWplvmp3g3=bH+FSD2iqQ3u350NMpbJUHOlSjWu3s27aFViPgPSjpe=0D2iqQ3F1D/SPiUuxD3LB5+SNvWpls27aFViDsQ=1eD=lM2iqQ3FxHM5P5EEOD3LB5V5D/Nu0v0WtUIEOvHFSD2iqQ3c35eNK1xo1/+=DQQ8Ks27aFViPEUMt/B5xw2iqQ3uYJ6l3gAFbHH5xNXueF27aFViPiPls/B5P=NptEmMsEk7SD3LB5DW3ihckMA7aFViPi0J3pD=ks2iqQ38PpUWYeiJNUClSu/ols27aFViP5TJYgDaPM2iqQ38MgKNl6DJSEClljk8sF27aFViDpA8NpB=D/NuN1/SDj/7SD3LB5DoKiCFM6e7aFViPNXJ3pO5SG2iqQ381Uvlte=Ejgh=tjJols27aFViDieo3g/axG2iqQ3uYF6ll2iJUU+5PsPp3s27aFViDj35UH+W1wQiqQ353NY831qNxD3LB5jSki0ubiL7aFViPN3=bNe=0=SiqQ3cM6RokUAuxD3LB5OalRxcN1/aMEE=UHBpxD2iqQ3u3NWa3pWJSD3LB5BW0iRcSiWWsN/7SD3LB5HctgWcOECSspYWO13LB5s5UGxFM/67aFViPgPNsjja0D2iqQ3cN1DW0eiJN5g=tNN8MF27aFViPj0JU505012iqQ38KWDll/IaxNVFxux8NF27aFVi0ebEjU45te=8UgKp0e/7SD3LB5sWDQD5K577aFViPTQWNjP5192iqQ35DeYckEecSD3LB5/WY6YcY5O7aFViP5P81ve=xu2iqQ3cSjRSK5UFSD3LB5HW1v1uYv77aFViDiPo1/OpxD2iqQ3FDhsJDNYFSD3LB5BWbMQ8KvCNsRqXSHHJSD2iqQ35D6uSDiTuxD3LB5t=swA83vkl1=1=N5tJSD2iqQ38sgCJYexJNvg=tjK8ls27aFViPUP81/H=xUScY50lkH/7SD3LB5OWDuQF35U7aFViDRxJ1/BpxD2iqQ3F35Cc1j0JSD3LB5s=D/lu1g7pDEE5UE6FSD2iqQ3cMV/MkEA8SD3LB5s50gQFP567aFVi01q=1v6a1pI8YpMakU/7SD3LB5+SKgEplN/7aFViPNY8UixSsV2iqQ3pl=sa3=UcSD3LB5j5NvhF0=g7aFViDETpx5goK=oc3vgNsEk7SD3LB5HWKT/ptNe7aFVi0hIWs66WY==cYN0EsEv7SD3LB5O5DvSFxiU7aFViDjPWN5BW0TQckFeWt//7SD3LB5+=PiWu1UgI0e1=NUhNxD2iqQ3ckvfaPiESs/B=PjKuks27aFViDuQobp6WbG2iqQ3pOHuMkEApxD3LB5j5s2K8lpSpDE3XNHBpxD2iqQ350vs5kiLSxD3LB5VctAQck5fMPgxWMeHFSD2iqQ38sghN0e1=M5ClSuq83s27aFVi0eXJbp4llikubiWNMpv7SD3LB5D=3=3uYvh7aFViDEPpsgs5NW2iqQ3505W53EUaxD3LB5eSlJDc1677aFViDiPXMjxWDV2iqQ3u05WlkUAFUHBWbpiols27aFViPMQlONO=Y12iqQ3uk5CaKpE5bj+Fxjhuks27aFViDE35UEB=067c35CM3H/7SD3LB5j=0=DcMhk7aFViDp0ps2+SMF2iqQ38UgvN02bJSNVa31/ols27aFViDiX8NEg=Y6WcbR6StUv7SD3LB5OW3==uk56E0U3o1v6NxD2iqQ3ubjRJ3gPSxD3LB5x5MvWFSjK7aFViDNLc3p/5l12iqQ3olpUWtU1=SHVa1Ek8ls27aFViDiAJbHjF0UKckv0Wsik7SD3LB56cKJQubiCN1iAJUE+FSD2iqQ35kN+=KTQMxD3LB5h=sWDolpvNle15Si4FSD2iqQ38lvmEt2=oM56WUvRueF27aFViP5X=UH/axu2iqQ3olpvp0eDFb=BFxH=8sF27aFViPJx=16sSNF2iqQ3uxEhXlUXJNpx5xNkpKs27aFViDNUobE/axG2iqQ35Oiu=kpEuxD3LB54ali=c35/E0UIEjjQJSD2iqQ38KpfS0eDcNNh5tA05Ks27aFViDR/ps6OWMF2iqQ3cSiYlMp35SD3LB5DWYAx5M/h7aFViPgEMjjO=Su2iqQ3ubECMsp3Sj=Ba12KuDF27aFVi0e=EjgCF0jJ8N1DN0ev7SD3LB5+J0iNpKF/akgAoMUgJSD2iqQ353vm=K5WcSD3LB5sWYeMpOR6N31qXNpBFSD2iqQ3ckvfaPsxc1ggaliuu1F27aFViPTQ=UUDSYs2iqQ3c3vWlKp3WOD3LB5OSl=NcYF6NBFViPHT8bi+lliucYuQaMj/7SD3LB56WbULc3EspBFViP1q=UU+=xM/u35fSsEK7SD3LB5jSSjo5P5g7aFViPg3cUg+5DW2iqQ3u3vqFPiApxD3LB5QaUvuu16mWMpbJbHjFSD2iqQ3uY5eXlUEo1v6WUpXuDF27aFViDp3El5DSlD2iqQ3oDTQS3gAaj5V5PiRpts27aFVi0e1JNvg=tNo8sg6WlUv7SD3LB5D5xUQcYvg7aFViPgioM5OW0iWuY5Ja1jv7SD3LB5e51/=FkMA7aFViPEX516HSMV2iqQ3FDV653UEuxD3LB5/WM/MFPNh7aFViP50pKp6StM2iqQ3c3EgIPH3FUHsaliIuYs27aFVi0eiEjgg=tUN8NUvN0Uv7SD3LB5OW3Niolv+asiT51/QFSD2iqQ3pOHMWki0JSD3LB5hlYeK8kpONl21ue5CNxD2iqQ35DVQll6xJNvCFxpk8ls27aFViDjAo1vs=D/lu1UspBFViDpPWMU+ctUiol5CMPU/7SD3LB5BW010olvfSKg1MDUQpxD2iqQ3516YNKM/FSD3LB5CaSue8NgelYU1JM5hFSD2iqQ3ubR/o3MqFSD3LB5g=tNk8lEeE0U3oU=OpxD2iqQ3u0vfSsE35UN+JSD2iqQ35bEuMkpUpxD3LB5H50NMuY5YakgPNxUgpxD2iqQ3u160NKUE5UUgalikuYs27aFViPWQFUNqcKM2iqQ3olpUWl/IJN5h=t=g8ks27aFViDi35bH+5OHicSihNKg/7SD3LB5OlbHiFPFeNDpAFY=BJSD2iqQ38MgUp0eDueNC5tDxFNF27aFVi0Qqlsv6Sk=SFsgJSMik7SD3LB5O=Y=45kN67aFVi0e=Ej5h=tjJolpUlYUv7SD3LB5HoKgd5Y5S7aFViDjAoYE+WM92iqQ35SEsN3Ee=SD3LB5q=UH753vg7aFViPNASsveSSu2iqQ3pl=0l3=TpxD3LB5ectia5Sih7aFVi0eooNN45sEN8UgKp0ev7SD3LB5xa0gdcbHK7aFViDj351/sJ01dFt5JMsiK7SD3LB56a0gU5s/O7aFViDp35SUgSl6I8KFeWMi/7SD3LB5eS3i4FSig7aFViP50MseD=lD2iqQ3pOiYlMiK7SD3LB50Sk=a51667aFVi0/PESjB50gWuDF27aFViPgPWM/BS3jKukvhNKg/7SD3LB5h=tjJolpgWlU1=NgVpxD2iqQ3uxiUNt6ooSN6lYs/cNF27aFViPEAFYUP=DV2iqQ3ptF65spToUHBSMW2iqQ3ukFeW3UPljH+=OHic1F27aFViPNWStp/5eW2iqQ35k5qN31Q=SD3LB5/S3iUpl577aFViPELljp0ct12iqQ3cSiRasEL=bG3LB56WUvRuxEhXlULSjNOJSD2iqQ3cYvqp1jPEMgBW0gWcNF27aFViPRqMK5PS312iqQ3FY=sNkpLSxD3LB5+JxjIubiJN1EISD5gNxD2iqQ35SiYlKpEcSD3LB5e=YiLu1DD7aFVi0UT8bHj5evWFKEfNPU/7SD3LB56WbNVc3vv7aFViPuxSthqaDV2iqQ3uDeYNkgUSsgBWbpMcNF27aFVi0/PcUHB=e5KpSi+Msiv7SD3LB5+ctg=ubEg7aFViPgWF1vsWP12iqQ3ckF/SBFViDpE=Y20a0D2iqQ35YM/EKR/=SD3LB5q=D/ocSR6W3gAoSD3LB5PSKg1FbHK7aFVi0/IcNUh=t=h8lEvll/K7SD3LB5gaD/Nu0v0WKsqXNNsJSD2iqQ3pt5eXlUE81gV5PJDu0s27aFViDEIWsUsct6Rc3vmasN/7SD3LB5Ootg=uYve7aFViPjLStg+SK12iqQ3pOiM51i0pxD3LB5Q=D/Nu0v0WtU3SshQFSD2iqQ3pKvq=1i35Up+5xMQols27aFViPsq=UU+JSD2iqQ3FsgkN1E3=bHH=OuA8jF27aFViPJ/c3=qoKM2iqQ35bHfl3JqcSD3LB5+=P=NolvmlkgAcUHBNxD2iqQ35t=WNPEUaxD3LB5sWY=SF3ve7aFVi0e1JN5hJ0jk8lpvN0Uv7SD3LB5hF0jJ8PWDWY6xJNvhNxD2iqQ35MD/MPTq5SD3LB5CFxpk8lpvlKjo=NgVpxD2iqQ3FMeCSMNT8SD3LB5BW010olEhEt21px5gJSD2iqQ35DeCSKpYJSD3LB56FxjMckvKXlULWl6gJSD2iqQ35OG6a3NeWOD3LB5HcKUKcSiJasWx8SUgpxD2iqQ35DefWMpEoSD3LB5CJxux8N1QNlexEOjhpxD2iqQ3ukNqakMxSxD3LB5B50JD8KvsMKgTF124pxD2iqQ3ck=qNkNLSxD3LB5VWP=u8KvCSPUAo1/+JSD2iqQ3uUUkpPuxJ1/BaliDcks27aFViPN0SshDSk12iqQ35k=uEKNeWOD3LB50WY=Ups677aFViDRqoUg+ctTqc3s27aFViDWxJUEHcKs2iqQ38kEvNle=Wjvg=t=o8sF27aFVi06=EOE45tU=olpvNleK7SD3LB5g=tMQolpUWt/IJN5hJSD2iqQ3c3F68MiWFSD3LB5x5xNT5MeL7aFViP5E5bEHSMV2iqQ38sggN06opegg=tMD8sF27aFVi0eANegt=tTA8lvkWBFVi0UEXMe+alUKuxEmSsiv7SD3LB5HospMpkvh7aFViDN0=U5s=NW2iqQ38Mg6lt6D5NUg=tUN8ls27aFViDiP=UU+W1/N8KvfMKgk7SD3LB5gW0AQuDeWNPge81vOpxD2iqQ35tvRok1q=SD3LB5+W3JQF35JSsiP5UNsJSD2iqQ3olFeN1iE5S5goK=oc3s27aFViP=YoY6+5Ys2iqQ3FsgJl1pEuD5H5Ps6oMF27aFViDEEashH=MW2iqQ35OH+c3iUuxD3LB56S3=ac3vv7aFViPgESON+5312iqQ3ubE/alUT8bHj5evWFKs27aFViP1qajHB=PihukvCWBFVi02iJ1v6SY6luYv0WKg/7SD3LB5H5PiLc3FDXlUXFUUsFSD2iqQ3cM6uNk=eEOD3LB50WMvAc35S7aFViPuQ5UHs5YM2iqQ3cYNu=DiPXOD3LB5ha1E=olpvNleDae5hNxD2iqQ3u1hfW3jXpxD3LB5eaepNc1eU7aFViDNTJUU+ct6oiqQ3ptF6=1pY5SD3LB50=P=3ul=e7aFViPpY=3ij=xw2iqQ3oSi0EsE3SjU6cKiuuUF27aFVi0/epjUH5Pi1c35JM0//7SD3LB5+=kJDu05WlMN0Ss/6FSD2iqQ35Pv0M31QuxD3LB5D5xUEFxjU7aFViPJqSOiOSMV2iqQ381gKWY6iJNvVaYMx8MF27aFViDW/JUv6aeW2iqQ3FkFeaKNYFSD3LB5/51pCpKNe7aFVi0/P5UE+5xjWu16qlY//7SD3LB5OoKJQol5WaPHxobjONxD2iqQ3uxEqEMi35SUgSlgluDF27aFViPiEXNUBF01dFt5qMspK7SD3LB5V5P=Sc3F/SsiXFSD3LB5j5P=dpKMQ7aFViDiP51/0=k12iqQ3olpUEP1qXNEBW010ols27aFViPU=EOHhlljkolWDW02v7SD3LB5hFxHN83p0at2bEOHCJSD2iqQ38M1Qlk=IF1ghJxHN8Ps27aFViDi351es=juxuk5qWsjv7SD3LB5+5xMQF1D6lMuq=UU+JSD2iqQ3uSH0lku/oSD3LB54=sV/8MUvNtebEj5hJSD2iqQ38lEeE0UTJ1v+=Piuu1F27aFVi0eI5NNCa3NK8kphNlev7SD3LB565xjWFKEfa3UAo1h/NxD2iqQ383phlYe=JNU4Jxue8Ps27aFViPU=EOiCF0jkolpUNt/K7SD3LB5OW3JQ5Me0lspP5UgsJSD2iqQ3uYEgIPHTJ1vs=D5KcYs27aFViPUA5bHBNxD2iqQ3cY5fWKuqaxD3LB5O=SjVF0vv7aFViPgPWM/BS3s08D1/WPg/7SD3LB5HSSUuu1F27aFVi0TqWNHOW1vRcOiCa3pK7SD3LB5/WbUNpt5YMsiE5UUgpxD2iqQ35PvYMsN3SxD3LB5D=xUl535/7aFViPjEXSpQF0Ukolpvp0ek7SD3LB5H=s9Q83EeE0U3cUEBNxD2iqQ3plvvalU3SjNOoKJQu3s27aFViPpUWNEOSsV2iqQ38kpeNle1JN5h5M5J8NF27aFViPTQcUNqot12iqQ3pOjsMPJx=SD3LB5/5xUqu35e7aFViDjUWNNx=0M2iqQ3F1eWSsi3FM5HcteMuYs27aFViDp351hVW1/McU16W1j/7SD3LB50csQquM6e7aFVi0eI5SNg=tMD8sgOWl2/7SD3LB5haYNK8kWDWt6I8NvCFSD2iqQ3FY5fNPWQ8SD3LB5x=YgTpK5L7aFViDEE5UpBWPgWF3v+SsiK7SD3LB5P=Ygmcbih7aFViPE3NtiBS192iqQ3pMeWcsiPoSD3LB5CJxpJ8SHUll/IFM5hpxD2iqQ3ck5MStUiJ1vscKilcNF27aFViPg=J1gB=0=oueTQalUK7SD3LB5+5evWcSE/EYU3EN=BpxD2iqQ3cSEfSKg3SOHV506RuDF27aFViDi3SshQF0gEck5Jl3g/7SD3LB5/5Ygx5se77aFViDiL=1g6WYM2iqQ3pt5WW3gxJMvH5xjkuUF27aFViDuqpO=/WDV2iqQ3F3=mM3iE8SD3LB5ClY1D81g6p0exEOECFSD2iqQ3ptEmo1iXJbjsJxHMc3s27aFViDNT83vsWM92iqQ3F35R83ELaxD3LB54WxHKolWe=1i35Up+FSD2iqQ35SH0=MjXpxD3LB5B5P=Nptp7Nsuq51UHNxD2iqQ3cSR6p1Wxc16galiIuYs27aFViDWq5UE+50AQ5xReasi/7SD3LB50WspH50vg7aFViDNEWjpCaljkcN1DWY6/7SD3LB5B50gWuDUgpP1qlsvONxD2iqQ35l5YaKTQXOD3LB56WUpoiqQ3cbisakNPuxD3LB50WtJxulvh7aFViP1qXNNs=P=NptNqN3Uk7SD3LB5VFxue8YWQNl218NphFSD2iqQ38sggW0/IaxEVFxuQ8MF27aFViPu/53HecK12iqQ38Mg6p0ebJNNCFxHN8ls27aFViDET5bH/WbUNpt5YMsiK7SD3LB5g=tNkolpLNleDue5hJSD2iqQ3ubEfaPgAoS=g=tikpls27aFViPs/obisWYM2iqQ3F16f5P=LoSD3LB5g=tM/8sgvN0e1=M5hpxD2iqQ3uD/RFK=3XOD3LB5gotAQpk5JSKHxo1gBNxD2iqQ3u0NfNspUWOD3LB56W1QQpkp7p0e1MD5OJSD2iqQ3cSjs5DiUoSD3LB5HSK=3FbEe7aFViP1/XMg6WSUNpKF/akg/7SD3LB5hlY1x80Evll2bEj5CFSD2iqQ3pKNCaMjUWOD3LB50SMuDck5K7aFVi0eiJNUhF01dFt5OpPgK7SD3LB5ja0JqpOi/7aFVi0U1=SNVa31/olpUlY/K7SD3LB5sSk=NptvhEYU3EN=BpxD2iqQ35seCS1pWaxD3LB5+S3s0olpUWMETpx5gJSD2iqQ38Mgep0eDF1vCllsxols27aFVi0UiJUgsos/Sc3uQakUK7SD3LB5+os/=5PNO7aFViDRqls/QF0guu35OalUv7SD3LB5h=tjJolpLNleo5M5hFSD2iqQ3c3FeWtU3SjgV5P=Mu0s27aFViPUXpKUOWls2iqQ3cSiYlMp3=U=fWSG2iqQ3pt=RaKJq=SD3LB5fWY6I8KFeWMiPo1/OpxD2iqQ3cMe0M0U38UE6ct6oFKs27aFViPWqcYEjSM92iqQ3c3vClmFViPMQWNpB5NF2iqQ3cSiJasWx8SUgaD/IuUF27aFViPgY8UjsaDF2iqQ3ulp7p0eDue5OosFPols27aFViP=EStU+5MV2iqQ3ukvqMPgDEOv+lliEuks27aFViPiTcYU65MF2iqQ3FSGea31q=SD3LB5s=0NMc35JSsiP5UNsJSD2iqQ3oDTQS31q81=BS3=MoUF27aFViDjPFbHH=s2K8M6mEt2k7SD3LB5O=PiLuk=L7aFViPgAoM5jWbUkck5CMspv7SD3LB5DWK=Hu3vK7aFViDWx51g6W3=ouxEsN1EK7SD3LB545tU=8MUvlt2bEONCJSD2iqQ3oeUmWsj3SjggJeEKoMF27aFViDWqXki+otD2iqQ3c35fMspbJ1g6ctgLols27aFViPgUFbjBS3M2iqQ3Fk5WSPje5SD3LB5+SNvlubEg7aFViDp35bE6cshMcSiYlkgv7SD3LB5DaxN3uMVA7aFViDiPStNsS3M2iqQ3ubiJaPgAoSUga06RuDF27aFViDEec1hDosF2iqQ3F0phNl6oatphlSpo83s27aFViP=3ptUD5kM2iqQ3ukFeaPgApxUgaYjiols27aFViP=0ptpx=Ys2iqQ3FNUvXsWxJ1vBaliopts27aFViPEP53HO=DV2iqQ3F1/C8KEY5SD3LB5+ctUiolvmMPUP81/HJSD2iqQ3u0v0Wt/xWM/BctRQpks27aFViDETcUj+WM92iqQ3cbHsWPsx5SD3LB5+506aFKEfSkUPljg+FSD2iqQ3cSs6SsNTJ1=jFDpsiqQ3FsgJSYU38UE6ct6oFKs27aFViDE0Fbp65NF2iqQ3FD/s535EMxD3LB5/5kgEcYvg7aFVi0e1=YphlljJ8YWDW0ev7SD3LB5+=Yi7uk=e7aFViDpbJUpOJxjIul50a1jk7SD3LB5OaD/Nu0v0WtUiJUgsJSD2iqQ3u350Wsj3XMhg=D/ools27aFVi0eIcSH4F0j=80WDW0ek7SD3LB5gaD/IubRDNKgESjEBJSD2iqQ3pkv083UESxD3LB5g=tsPoMUma1i3=UgONxD2iqQ3F0NqWK1QEOD3LB5s=PMPolvqN1E1SD5VFSD2iqQ35tvRaMNL8SD3LB5H=DpQuxHK7aFVi0eI51jD5tMeolpUWl/K7SD3LB5OosFPolvsMKgTF124pxD2iqQ3u05YEkwqcU=OSSjRcjF27aFViPEec1UOaPM2iqQ353=Y81jeSxD3LB5x=P=Y5D/g7aFViPE0=Y2eSY12iqQ3ptWQNKgPWN5soshiols27aFViDpTMseBWk12iqQ3u1/WMK1qcSD3LB5O=PM6oM6qSsNTFMUgJSD2iqQ3oNgvN0ev7SD3LB5CWY6W8seCl1E=oM5OpxD2iqQ35t=YWPEPEOD3LB5+Sl6WuSjv7aFVi0U3SjgV5P=Mu0vqElUK7SD3LB5O=evuptNCasEEFY5HFSD2iqQ3ptvLpPEPEN5scKjKFPs27aFViDEeptv/5012iqQ38kp6llU1oSEVa3NK8ls27aFViDNeWlNect12iqQ3FxjfFK=WuxD3LB5V5PgRu35WMDNDSD5fpxD2iqQ35lv0NK50pxD3LB5D5YiTcbHL7aFVi0eiJNphJxpk8lpgWl6/7SD3LB5sotio8D1AN1jX8NNONxD2iqQ38MUvlt6xEj5h=tjJF0s27aFViP5Y53=ecs92iqQ38MgeWleo8SEg=t1x8sF27aFViPpEo3EB5Sw2iqQ351eM=Dp35SD3LB5Dot6=5OEv7aFViDjUEMUB=DW2iqQ353Ns5KiY=SD3LB5qSM/WuY5/akHIljE6FSD2iqQ35seYWMjWJSD3LB5HSspfFkMQ7aFViPvxoM56WUvRuxEhXlUK7SD3LB5g=PguuY5kNsEX5UE+FSD2iqQ3ukFeSY2iJ16OSlJeueF27aFViDs/o1UD5DV2iqQ3uxiealUTFbNO=PM6oMF27aFViP=Wobi65M92iqQ380WDlYeDFSp/lY1x8sF27aFViPNW51gx5Ys2iqQ3FYMeckgTuxD3LB5B=D/ouxjL7aFVi0UbEOjVFxuQ8U1DEt6/7SD3LB5CJxHN8kWDEt/xEjvCNxD2iqQ3uSiR535YaxD3LB5O5D/m5YMA7aFViPEX8Yix=DF2iqQ38lpUp0e=JNvhlSpo8ls27aFViDpbWNgHcjHW8DUvlt/K7SD3LB5QaUvopseOpP1qlsvONxD2iqQ3plvmMsEE=1g65xUtcks27aFVi0e=JNvV5tNK8lWQNleK7SD3LB5050=xcbik7aFVi02DoNgC=tUK8lWDElev7SD3LB5B5Pgk535S7aFViDN0XMg6WSUIuk5/alUv7SD3LB5/W0ioFMDD7aFViDWxFbNB=PM6oMD/asEK7SD3LB5+SkUiolvCNPgPljE6NxD2iqQ3u3=W8kU05SD3LB5/cjHpF16/7aFVi0/D5Ng650M/8bifSKUk7SD3LB5g=DvWuk5sSDp1SD5hpxD2iqQ38DDeN1pbpeNHcteMcks27aFViPULc1eHSKM2iqQ38sghWl/D=NphFxHJuls27aFVi0gDNsgBWUvluDg7p0Uk7SD3LB5Pot6VF1DA7aFVi0U1uD5Clljkolpvp0e/7SD3LB5H=xN6cSHe7aFViP1xoYge=0D2iqQ3FDhYSDp0=SD3LB5e=evCuM6L7aFViPj=oM56ctguckW/MsiK7SD3LB56Sk==olpJl1E3=UNgJSD2iqQ3ulNqa35XJSD3LB5QalsAcY5WWYU38UE6FSD2iqQ38Sju8Y6=JNvCFxpk8ls27aFViDjPlON4alixubifN1pv7SD3LB5+5jplpKvqMDjPEM/4pxD2iqQ3F0NuJDRx=SD3LB5BSYR/ptEmWsNAJ1/QFSD2iqQ3FbH083iPSxD3LB5eWPiAc1hK7aFViP=AFY6ja012iqQ3uSjWc3iUoSD3LB5sS1wqFSRA7aFVi01x8bHOSM/kc3W/a3U/7SD3LB5+50gaukv/Nsp35bpsJSD2iqQ35SEmoKjeWOD3LB5BWUvluDg7p0Uo8NUhNxD2iqQ3c3vmc3iUMxD3LB5gJPgJpKF6Wt9Qas/BJSD2iqQ3uMeW=spUFSD3LB5haYgI8KWDWY6xJN5VFSD2iqQ3uM/REkiUoSD3LB5/WUvqpl=67aFViDjX535j=192iqQ3pOiWaDp3pxD3LB5CF0jJ8lWDN0e1JNvgJSD2iqQ380phNl21oNphaSuD80s27aFViPjWMj=e5PM2iqQ3u35YlkTqSjN4als/u0s27aFViDiWath/5k12iqQ3c3vRa1iT51h+Fxjuc1F27aFViP1q=UE+5ju6olEvNki/7SD3LB5+WtgHuxEU7aFViP=35Yix=M92iqQ3u1g7pPUPoUgBWUw/pts27aFViDiX5Up6Sk==8K5RN1Ek7SD3LB5QF0g05YN6Nt2boahQJSD2iqQ35kvW=kN0axD3LB5q=Ygkpt=K7aFViP=3FY6/SY12iqQ35shuSPUeuxD3LB5BaD/XF0=U7aFViP1qXNEBW012iqQ38UgKNt2xEONHJxHN8UF27aFViPgESjEB=OHiu1D6Nkg/7SD3LB5q5Nwqpt=e7aFViDE35SUgS3iWuYEgpDiK7SD3LB5+5xjkptvLpPEPEN5sFSD2iqQ3F3Nf8ME38SD3LB5+=0JQc3N0lMEEXN13LB5H5xMQuDe0St/Paj=ONxD2iqQ3pt5RSsiK7SD3LB5H5epX5OiU7aFViDieNs2BotD2iqQ3uSR6=MEEaxD3LB5Hos/Xu35g7aFVi0ee8SEVa31/olpUWl/K7SD3LB5haljk51gCatexJNvgJSD2iqQ3uSiM8K53WOD3LB5+W1vAukN/7aFViDpASK5HW0M2iqQ3c1/qF1p08SD3LB5BSSvXcKs27aFViDELNsUPSsW2iqQ38PpOp0eIpeN4=tse8UF27aFViDNE5U565DW2iqQ3u16qSqFVi0eIJSE4J0jk8sgvWl6K7SD3LB5g=tNN8MgvW0218M5hJSD2iqQ38KvCMsNE5S=g=tNN80s27aFViP5EXS=qWt12iqQ3uDe/NKgAaj5HctTeiqQ3uk5CN3wx8bi+llUKc1F27aFViPWx8UveSM92iqQ35M/soDpeuxD3LB5H5xNLc3vK7aFViDWx5bHs5NW2iqQ3ubReWt/PSsgBWbpMu1F27aFVi0/I=SEC5tse8bHhll6k7SD3LB565D/=5M//7aFViDpPWMU+ct12iqQ3ckvCl3HxoYp6ctgL5sF27aFViP=AobixW1W2iqQ3cMeMMspbWNHBSYR/pts27aFViDEE=UN+=M/IubRDNsj/7SD3LB5e=06LuPMQ7aFVi02iWNpOlSjuu16mWMpv7SD3LB5BW0UKcY50aMjAFM56NxD2iqQ3FY=RM3iEpxD3LB5+5DvluY5qSsEIWsUDFSD2iqQ3pKNJEk1QcSD3LB565ew/c3uQalUIEOvHFSD2iqQ38kpLNle1JNUClljJ8sF27aFViDuqNj=0S3M2iqQ3u35WMDNDSD5eSSUiuUF27aFViPgP=UUfWSG2iqQ3cM6CN1iT5bH+5jEKu3s27aFViDi3=1g+FxjluDeqSsEK7SD3LB5H5xNNc3vgNK1q=UU+JSD2iqQ3FK5CN1pPESHOS1/siqQ3cNg/EPUE=1gHW1p=uUF27aFViDiYc3Ee=YM2iqQ35MeuSKiYcSD3LB5P5P=upkN/7aFViDEY53pD=P12iqQ38lpvEtU1aeNCa3NK83s27aFViDj1SD5hSYRD8eUmNDik7SD3LB5+ctguc1gMSMRqESHVFSD2iqQ3cSiJMK1qMxD3LB5h5D5opMDQNt6iJN56NxD2iqQ3oMUmNkUPWM/QF0g7uks27aFViPjEWSp+=k12iqQ3ukvslMjESxD3LB56cs5Mck5sSKHD8NvCFSD2iqQ3c1eYMDWq5MUgoKguc3s27aFViPg3F1/BabHiptvfWkg/7SD3LB5h=tjk8lEvN0e1JNF3LB5H5ewQc3vg7aFViPUP8Ui+W0glpKFea0//7SD3LB5+5D/C5l=L7aFVi0U1JM5hJxHJ8sgeW0Uv7SD3LB5hF0j=8kEvlte=EjghJSD2iqQ3ubEgEYUTo1/+=ju6ols27aFViDpbWNNs5xjic3vg7aFVi01xpsgV50J/pt5RN1EK7SD3LB5/51vPpOEv7aFViPp3o35xW3M2iqQ35t5WuMEecSD3LB50Skg3c3=L7aFViP1xo1/+=DQQuUF27aFViP1xc1gAW1/NcSR6NsEv7SD3LB5VaY1e8SiUltU1=M5hJSD2iqQ3ulv+Fk5eXOD3LB5D51/hu1hU7aFViPUAFbHOSM/ipKvqSsEk7SD3LB5OW3==8KvCSsi351gsJSD2iqQ3u3vClsiPoSD3LB5h=tjk8lEvN0ev7SD3LB5s=Yiau0FA7aFVi0eD8NNh=tjk8kNKWKjk7SD3LB5sW1/p5tv67aFViDELF3v0oKs2iqQ38Ng/alU3=UUH50NMuks27aFViPNWF3gx5kM2iqQ3ckF/SKHxoU56cs/Mc3s27aFVi02=J1UBW0gLc3vgEYUv7SD3LB5xS3iDubEO7aFViDsQlj=qa012iqQ3cSi+EMWq=SD3LB5xS1pecYvg7aFViDE3=1h+=D/NcU1/MPg/7SD3LB5j5xj15bjL7aFViPEPaKUe5eW2iqQ35bi+ckiXaxD3LB5g=D/o8K50NsETFbNgJSD2iqQ3c1eWNkTq5UUOotguu1F27aFViPpUSti05312iqQ3ukv6IPHbXMhHcK1dFts27aFViPiWFUHsW0s2iqQ3oSiRSKUAobHB=0=NcYs27aFViDE3ls/s=PM6oMeCaY//7SD3LB5BSKgI5YNL7aFViDETpx5gabuAuxEmasiK7SD3LB5j5eHT5OiL7aFViPEPESE0osF2iqQ3u1hWN1sQpxD3LB56WY=SuYs27aFVi01qcUH+5evL8KW/a1pK7SD3LB5s=xNlplvK7aFViDi35bH+FSD2iqQ35YNJuMN05SD3LB56W0gWckvqSKiPls/BFSD2iqQ3ptvCE3sqMxD3LB56WbjgFPNe7aFViPR/oYijots2iqQ38kEvltU1JM5hJ0jkols27aFViP=PMKUBW312iqQ35OisMkgXcSD3LB5Q=PiupsUmaPUAF1vVFSD2iqQ3uYNMEk5TuxD3LB5+=kiSuSiO7aFViDi=psu3LB5h=t=18kp/p0eD8NNhNxD2iqQ3oDTQS31xc1gfWSG2iqQ3FM/quk5EEOD3LB5P5NpgpshO7aFViDELElNjSMF2iqQ38lpvN0ee8NvCF0jJ8Ys27aFViDp3XNN+5bUoc3vqpKH/7SD3LB5ClYUK8lWDlt2DJNghpxD2iqQ3uY=q53UESxD3LB5ClYsq8PEvN0/IaxHhFSD2iqQ35xiCasEEFY=jotiuuDF27aFViDjPEN5scKiBuk5/MkH/7SD3LB505P==50=L7aFViDu/o1heWks2iqQ3pMD6F3NAcSD3LB5DWKgPck5S7aFViPjeFY2jaeF2iqQ3pKvqSDRxoUHjSkNMu1F27aFViP=0pjNs5SG2iqQ3pt50=1NUoSD3LB5VW3iupsTDXtQqFUHspxD2iqQ3FbjY5DNLFSD3LB5/5evTc35S7aFViPpPlt=sSNF2iqQ38KWDlY6xWjN4=teM8sF27aFViPJ/oYEP5Ys2iqQ3cNUgpPUAoUH6FxjScks27aFViDR/SKiPSY12iqQ3ulv/EYU1oN5OosFPoMF27aFViDjTpsePaPM2iqQ35l5CMMpUEOD3LB5g=xNRu35eXlUE8bi6NxD2iqQ3FMhq51pE5SD3LB50a1hN8P5Klt/Io35CJSD2iqQ3c1eCFDpTFSD3LB5/S1w/uYFD7aFViDNUWS=PS3s2iqQ3F3N0J1RQXOD3LB5j5eHeu1VA7aFViDjA8Np6cKJQubi+Msiv7SD3LB5QotAQpk5JSKHiJNNqFSD2iqQ3cSiYlkgU5bpO=D/=pks27aFViPFq81gAWY6ucYJQS3v/7SD3LB5B51pg5D/K7aFViDs/pOEPSlD2iqQ3c35Ja0U3SjgV5evuu1F27aFVi0UIElp6ctgLolMeWMi/7SD3LB5QF0gWuD6fN1EWXNHBpxD2iqQ3c3pSpDj35UH+W1wQ8DF27aFVi02bEON45tUJolpUW0/K7SD3LB5H5P=7FYFQ7aFViPsqMONs51V2iqQ3ck5fMsiEF1/j=OHi8Ks27aFViDEoWsUOJxjfu16mWMpv7SD3LB5sWliXptNU7aFViP1q=UU+JxjRcSiCN1p/7SD3LB56SkgPFxEg7aFViPgPESH6cKiuubRDalUv7SD3LB5+=DpTu05/7aFViPJxFbND=D92iqQ38KWDEt6xEOphaSHJ8sF27aFViPiPls/B5P=NptvCJ1Ev7SD3LB5D=xURcY50aqFViP5T=3N05Ps2iqQ353v+cKRxcSD3LB5Pa0=oFSHU7aFViDiAJbHjF0ifu16mWMpv7SD3LB5H5xNkpKv/7aFViDjPFSUgSk==uDD6lkvk7SD3LB5/SNHLpM/h7aFViDiTJY/xWDW2iqQ38K5faK1qMDUQaUvopsF27aFViDpL5bNBStD2iqQ3ptvmFsN0uxD3LB5H=UHMFPNS7aFViDNWJbHs5lD2iqQ3oMe0EsEbWMh6cKiWoMF27aFVi02DJNvhaYDQ83p6W02v7SD3LB5g=PglcSE0l3UPoUE+FSD2iqQ3FKEfa3UAo1hqcsvkuks27aFViPgEcS5tF0jK8sh0MPg/7SD3LB50csv/cbRA7aFViDWqNt205YM2iqQ38xifaK1qNs6OSS1/u1F27aFVi01x5Ug65P=kckvWp3Uk7SD3LB5gabuAuxEmasiiJ1gBJSD2iqQ38YEvlt/IJSpV5tUK8MF27aFViDjPENg+ctTQFMe0SMik7SD3LB5xWs/euSRQ7aFViDRx5bHAWSUoc35CWMEK7SD3LB5O=l6+51h67aFVi06bEOj0aYMecNgvp0/K7SD3LB5goKReu05eXlUXF1/jJSD2iqQ3obiCa3wq8UH+JDpsiqQ3FxiRckNWuxD3LB5+5xjWu16/NMjA8NpHFSD2iqQ3cOReWMiPo1/OpxD2iqQ3u0vqElUiJ1eBW016oMF27aFVi0eo5M5h5teN8lpvN0e/7SD3LB5dSjpNckF/SthIWs6OJSD2iqQ35De0ukNP8SD3LB5gSkJqc3FeN3g3FMUQpxD2iqQ3ukFeMY/PajH+=PiWu1F27aFViP5e8b=BaDF2iqQ3oMeCaY/PESjB50gWuDF27aFViDEY53EO5l12iqQ3FNgvNleo=Nghl3M/ols27aFViP5Tc3UHaPs2iqQ3811DWl2bJNUh5M5=8sF27aFViPM/=Ugects2iqQ35D6qMPpPcSD3LB5BWjvCck5L7aFViDjAcahQJxUou05YNkHK7SD3LB5hF0jJ8U1DWleoptphJSD2iqQ3FKEfWMWq=1/O=0JecjF27aFViPgLElpHaDV2iqQ3c1hCJ3iYSxD3LB5VaYjk8lpYoleDcYphFSD2iqQ38SiYakg3oSp6aSNopsF27aFViPUE5UEQF0g1uDe0aDj/7SD3LB5j=3i0FY=h7aFViP50aDUg=0J/ptF6a1ik7SD3LB5qWD/JpOj67aFViP1xc1ggaliLckvqat//7SD3LB5PSYiWuYFD7aFViDiLEl=OWDV2iqQ35Kvmc1pTFSD3LB5/SYgRu1eq=sj3XNH6NxD2iqQ3u05YEMiP5UNsJxjMc3s27aFViDE3=Yp+Wl12iqQ38kpOEteiJNv4Jxu/8NF27aFVi0UTc1vBoK=WFKEgakHK7SD3LB565evoc3EgpDWxFbNBJSD2iqQ3cM6Y53=3WOD3LB5B=xUXiqQ3c3vflMRxo1=H5xNkpKs27aFViDWqNKjj=Su2iqQ3ptF6N02I5U5j=jEKu0s27aFViPU0oUHH53M2iqQ3uxR6NKg/7SD3LB505Du051/g7aFViDpPStiPot12iqQ3uxiqaKUepxD3LB5q=Ssxuk5O7aFViDEiWjpH5PNKpSR6NPU/7SD3LB56W0iJFY567aFViP1q=bH6W1F2iqQ35t=W83NLuxD3LB5h=sVD81gOp0eIpeNCpxD2iqQ3FY5fl3RqNxD3LB5Coj5=pYpmXtDxNew3LB5OWPi=ukvmSt/P8bi6NxD2iqQ3cMh0SDp3WOD3LB5s=DFdFtW6l1pEuqhQJSD2iqQ35D6RWspWSxD3LB5OWY6lpse0ll/P=1gCFSD2iqQ3FbHCcMEWoSD3LB5eW067pl=K7aFViP5LSji0WDW2iqQ3cSR6NMp3=UHBSYD2iqQ3oMTDXsE3=bHHJ0iLFKs27aFViDpPc3NB=P12iqQ38kvkWM=1obvhWe5kpYs27aFViDiE=Up+5OHicSiYlkgv7SD3LB5C=KMq8UgKEle1=NUhNxD2iqQ3cSECc1NUEOD3LB5/WY==pt5U7aFViDiT51/QF0UiFsF27aFVi0UiJ1gB=0=oueTQaMEv7SD3LB5+W1vQpl=O7aFViDpYMOjBWtD2iqQ35OiMFMWxSxD3LB50=Du05bHK7aFViDjYpt205Ps2iqQ3pMescME3oSD3LB5s5xUP5Dek7aFViDE3El6OSl12iqQ3u16uSP5TSxD3LB5HWUvMu1D6NDEAoUgsJSD2iqQ3c3EgpP1qlsvOW0D6oMF27aFViPRQNKgB53s2iqQ3FSE+a3EPEN5scKjiols27aFViDNxWMgOSk=Lukv/NKUk7SD3LB5P5Dwx5Yv67aFViDRqlsh+ctg4ckF/SBFViDpepsheWD92iqQ38NgUp0ebJNUVaYUJ8Ks27aFViPWqF16PSSG2iqQ3FY5saKiLaxD3LB5+=PJDu0N67aFVi0e1JNv/lYeK8kp/Nl6k7SD3LB5ectiX50MQ7aFViDi3oUp/5l12iqQ3ptNfaPEApxD3LB5q=06VFDhL7aFViPE3cYhPosW2iqQ3uDD/NDjAFSD3LB505S1/F1/U7aFViP=XpjpqSKM2iqQ3uxHC=KgY=SD3LB54llUKpt5YaMjPEMh+FSD2iqQ3ubH0N1jT5SD3LB5sSMp0uk5L7aFVi06iEOihaYjJ5tpvp0eK7SD3LB5hlljJ8U1DEt6oJSEgJSD2iqQ38YpLNleIoNN45shN8NF27aFViPge=3=0=DF2iqQ3pOG65KpUoSD3LB565Yi3FP=67aFViPu/cUgHa0D2iqQ3FPNJMk1qXOD3LB56Ssvhu1VD7aFViDpT5Y/P5YM2iqQ3Fk=mM3J/oSD3LB5gSkgRuYvCStUiJbH6FSD2iqQ35M/u5KN38SD3LB5P=3if5DhS7aFViPp3StisaDV2iqQ350F/FsjLuxD3LB5Ol12K83vmEt2=JU5BNxD2iqQ3uDhRo3=TcSD3LB5+5xMQFMeYa1sxpsvOpxD2iqQ35M/+JPNWaxD3LB5CFxpk8lpvltU1=N5gJSD2iqQ3c3NMMKRqoSD3LB5+5OHioMTDXtQx8U56FSD2iqQ3ptvLalUTc1vBoK=WFKs27aFViPgDSD5h5KgkplpSpPUK7SD3LB56ctgL8K5Cl3Uk7SD3LB5sJ0iIckvfa0UU835/NxD2iqQ38NgfaY/xEjv4J0jk8Ks27aFVi0UTpjH+oKi78DUvlMEv7SD3LB5P=3=45bEK7aFViPpU8YNjoK12iqQ3pseR8KiYcSD3LB5C5tNK8kWQlt/IoSHgJSD2iqQ3uDhWNK1qFSD3LB5H5lglck=/7aFViPTQFUE05eW2iqQ3pOi0WkpApxD3LB5OotglptF6WsNAJ1Q3LB5e=0=m5YN67aFVi0exJNvH=tA0u3pUEt//7SD3LB5B=eF0olEhlYeI8NUCFSD2iqQ3ubE0WKw/XM/jotiuuDF27aFViPUPlOj+5OHioMTD7aFViPUAo1hV50=IcSR6WMiK7SD3LB5CF0j=80WDll21oSNgJSD2iqQ35OE+MKMQFSD3LB5QaUvou05YNkHIlshHFSD2iqQ3u0=05P=UMxD3LB5050==cbi/7aFViDE=WM/jotiuuD6L7aFViP1qXNEBW010olEhlYeK7SD3LB56WbUNuxEqlMpP8bHBNxD2iqQ3uDeul3J/pxD3LB5H50NMukFeW3UPljH+JSD2iqQ3cSR6Nl/PSjNBSk==8Ks27aFViDpU53pB5eW2iqQ3uP5sNPNUFSD3LB5QF0Txuk5qWsj1SxHCFSD2iqQ3FKEfl1j3=U5+F0UKcYs27aFViP1xJY6qSMF2iqQ3pl5Cc3=T8SD3LB5qojH7F1/h7aFVi0/P8bi6NxD2iqQ35K5REssQ=SD3LB5BSkifcSR6Nl/PSjNBpxD2iqQ3FMhC5siEoSD3LB5s=Y6X5lMD7aFViPUEF16sW012iqQ3F1hMEMuxpxD3LB5+J0UKu05JaK1q512BNxD2iqQ3cSs6a31/XMgH5Ps2iqQ3u3v0MMiWcSD3LB5g=s5N8Yp/p0ebJN5gJSD2iqQ3pseWl3U/7SD3LB5+oKg1cSH/7aFViDjXMjvq5eF2iqQ35l5faP1qaxD3LB50=euxFSjK7aFViPWxFYNBS3s2iqQ35OHfWkNXpxD3LB5g=tjN81gKEt21cNv/NxD2iqQ38OHC5P=ioM5O=evRcNF27aFViDEEXNEV50=IcSR6lkgv7SD3LB5OW0D6oMhWNMET5bHqFSD2iqQ3Fk5fSP=LuxD3LB5hFxHJ8KpYol638NpVpxD2iqQ35YM/Sspe=SD3LB5jSNvW5M//7aFViPiW8UjPcts2iqQ3cSiWWsNDSD5h=jEKuls27aFViDiPSs6DWY12iqQ3cY5Y5MjLuxD3LB5q=xU0ubi77aFViDiT5bH+5jEKptF6N02K7SD3LB5OWON0psh77aFViDpeajiPSNF2iqQ35Y=YlKiUcSD3LB50W06YF35g7aFViPEUNKNPSYs2iqQ3FMe0lsEYoSD3LB5/Wkg1ol5qStU3lsvgJSD2iqQ38kWDlle1uxphlljJ80s27aFViPiPpsjHaDF2iqQ3olvsMKgTF124aljJ8ls27aFViP=Y5UHBWDW2iqQ3ckF/SKHxo1/jotjMcYs27aFViP1q=UU+JxjWuY50NKg/7SD3LB5VaYMq8KpUNl6DoNpVpxD2iqQ3FD/Y=P=TaxD3LB5e=ki7u0NO7aFViDp3=1UB=PNMc1eWSsiv7SD3LB5xW1vlcYNh7aFViPgAoMUg=D/LFKEfWMEk7SD3LB5sW0gupt5e7aFViP=TMjg+=lM2iqQ38kEvllexJNvCJxpk8ls27aFViDp1SD5hotRD8eUgIPHv7SD3LB5OWUvucSie7aFViP5Pc1/j=MV2iqQ3u0vKE0UTJU=OW1QQuks27aFViDiXF1iBct6NcOECSspv7SD3LB5saliIuY5Yl1EoWsUeNxD2iqQ38lEvlYeiJNUhF0UKuDF27aFViPg35UU4aljku0vKE0Uv7SD3LB5H5P=ScYW/NkUPWM/QFSD2iqQ3u16/EY2XJUE6506Wuls27aFViP=PENiBSS1xu1F27aFViDi05UixaP12iqQ3cMV/51iUFSD3LB5Daepl50vg7aFViPuQaO=+otD2iqQ3c1/q8KE0SxD3LB54Fxpk8lpeWtU1oSiVpxD2iqQ3FxRea1p3oSD3LB5Vlb1xcN1/asjE=bpQFSD2iqQ3u1hqaPJqcSD3LB5BSl=TuDeL7aFViDpYoY=sWtD2iqQ35YNW51iYaxD3LB50a0AD51DQ7aFVi01q8UU+5PiuptW/a3U/7SD3LB5xoK=fF1VA7aFVi02iJMg+SkgE8xi+N1iK7SD3LB5+SM/Spt50laFViDp3=1UB=PM2iqQ3pKN0=Di3FSD3LB50aeHfpM//7aFViPgESjEBJxj=pK5JSKH/7SD3LB5+5bHXcKs27aFViDRxaj50=0D2iqQ3FKEfo1iXJbjs=k=Sc3s27aFViPHxobH+cswQoMUmNkU/7SD3LB5hl3NK8kpeNle1JN5hFSD2iqQ3cSR6MDRxoS=gJ06E8ls27aFViPpT8UHs53M2iqQ3plN0W3g3cSD3LB50SKgxuD/e7aFViDEUNKgH5eF2iqQ35bE+Mss/axD3LB5BalioptvWMPgDWsUBNxD2iqQ35k5f=3E3FSD3LB5HcteMuYF6aKg351hgpxD2iqQ3uxHRFKNToSD3LB56WUvapOiO7aFVi0/I=NUV5tNN8YpeNl6K7SD3LB5s=bUIpseh7aFViDNxoM56cKJQubiCN1i/7SD3LB5j5M/0u16h7aFViDjPcUU65xjWiqQ3uxi0WKNToU=O=P==pts27aFViPpXptv05xw2iqQ3ck5WNkgAoSD3LB56S3==psek7aFViPgEXNUBFxjIul50a1jk7SD3LB5BW1/SulMQ7aFViDj3Ssh+=P=NoMUmMKgv7SD3LB5/W1vecY5L7aFViDNXSjix50D2iqQ38sgvWspiWjvVaY678ks27aFViPMQXMgqWsV2iqQ3F3NJ81RqXOD3LB5+oKgRcYv77aFViPgLNKpPaDV2iqQ3uxEq5PpUEOD3LB5OSM/LoMTDXtQqFUHspxD2iqQ38KNCasEEFY2s5xjic3s27aFViP5XMtpH5P12iqQ3FSE+5PMqSxD3LB5g=06lu16qSsiXFSUgpxD2iqQ3uSEmNPNepxD3LB5xaxUEFkNO7aFViDEE5bHsctgNolWAalUv7SD3LB5+csF6oM1QltUiJ1gBJSD2iqQ35D/+lKEPXOD3LB5OabULukv/pDRx5M5+JSD2iqQ3FY5WNkgAoUgg=l6SpKs27aFViPUE5UUgaliLckvqat//7SD3LB5/S1/fcYs27aFViDEeobN6cs92iqQ3cMeMN3sqpxD3LB5q=YAQu1/67aFVi0hIWs6BS3=Mc3vfN3vk7SD3LB5hF0jJue1DlY6xJNvgJSD2iqQ3ubReWKUPSjN+ctUiols27aFViP1xo1/+=DQQiqQ3uY5JMsiEuD56WYeMc3s27aFViDiX5Up6Sk==oMUmaPU/7SD3LB5qotJ0cbie7aFViPpAMKE+S312iqQ3cM1Qll6o=1e+=tsqc3s27aFViDRq8bjOWY=iuY5eXlUK7SD3LB5xW1Q/pkN/7aFViPJQENH+5ks2iqQ3FD/CoDiEEOD3LB5+JxjWplvmMsEXaepHJSD2iqQ3pt50M0UiJUN65xjWFKs27aFViP5WF3gB53s2iqQ3ulNMc1sqSxD3LB5H5xNkpKvqu3UA5bHBNxD2iqQ3FxiCoDjLXOD3LB5s=PM6oMeCaY/P8Ug6NxD2iqQ35M6uJ3iWuxD3LB5g=t1eolpgNleope5hJSD2iqQ3F0Nqo3jPSxD3LB5+ctUMuDeYaDjA5Ug4pxD2iqQ3u3vfNP1QcSD3LB5P=k=b5t5O7aFViDiYatEjSMW2iqQ3u35CaMEXuxD3LB5gW06WcSE0lMjAFbN/NxD2iqQ38lWDlYeD8NgC5KNK8ks27aFViDjPEN5scKjKptvWNPg/7SD3LB5gSlAqcNUgpPg3=bH6FSD2iqQ38NUvN0/IuevClYsq8MF27aFViP1/FYiHWOu2iqQ3FSjC51jPpxD3LB5BSSUNc3pSpPgEXNNsJSD2iqQ38lEvltU1oNNC=tUK8MF27aFViDN0XM/jotiuuDeYWsj/7SD3LB5x=x1q50=O7aFViDi3=UgOlbHiu0W/=Dj/7SD3LB5/cs/Du1e/7aFViDRqc1egaliou050MDiv7SD3LB5BS1vAFxi77aFViPiE=Yh6SM92iqQ3F3NfF3ULNxD3LB56ctiu8seCNYQqMjgBNxD2iqQ35P=0uMEY5SD3LB5B=P=C5PNO7aFViPgDWsUs=xUk8Dg0NDNv7SD3LB545tse80p6W0U1oSpVpxD2iqQ3cSiSXlUEc1vBot6WoMF27aFViPp0SjvP5YM2iqQ38MgLp0eiEjg4=tjk80s27aFViPgXF35j=xG2iqQ3ul50SspboahQJxU7c3s27aFViDjEaKie5lM2iqQ3ukF6NME3=bNV5svR8ks27aFViDiWobN+WUW2iqQ3ukv/pDRxoM5+=P=iuks27aFViPuqSsUOSts2iqQ3Ft5WNMET5bHgotAQpks27aFViDiEoYN65Ys2iqQ3c1gMSMRqESHVct6upMF27aFViPE3Wl=jaeW2iqQ3u050=DjP5UE+JxHMc1F27aFViDE=JU56cs/Mc3FeWtUv7SD3LB5BW0=uuP5U7aFViDieMsex=P12iqQ35K=WNKpX5SD3LB5O5DQqptve7aFViDNAoUNPSY12iqQ3pM/CNPpApxD3LB5+5evSolvvNKRxoUH+JSD2iqQ3FD/0lsjEaxD3LB5q5evN5bEL7aFViPjEXSpQF0Ukolpvp0e/7SD3LB5e=3gSpOEL7aFViDRQ=UN+51V2iqQ3u3=R5KiEWOD3LB5BWbu0ol5YaMWqXNEsFSD2iqQ35tNCEMNXJSD3LB5j=MvauPNS7aFVi06opepVa15oF0phNl6k7SD3LB5Bosv35OjO7aFVi02xEj5h=tjJF0pgNl6v7SD3LB5OSSHKcSiJasWx8SUgpxD2iqQ38M1QNle18NpVa3jM8sF27aFViP5EpOixWlD2iqQ3FxHu=KpEcSD3LB5V5evRcMe0MPHxoYpOpxD2iqQ3uPF6WMsQSxD3LB5+csF6oM1QltUiJ1vOpxD2iqQ3uxEhXlUXJNp/WY==cYs27aFViPJx5bEB=eW2iqQ3plvCok5YJSD3LB5j=3gbcM/h7aFViP=UEkUs=312iqQ3c3NfaKp0pxD3LB5saev6uMhL7aFViDjAJbHeoK12iqQ3ptvWMPgDWsUsW1/Lpts27aFViP=LcUEeSYM2iqQ35lNCFDpWpxD3LB5+5s2K8kWDl3gPWO56pxD2iqQ353NWS1EY5SD3LB5e5Dv=u3=v7aFViDu/83jj5Ps2iqQ3uSjRN3NL=SD3LB5H50eiolvmMPUP81/HJSD2iqQ35OEsS3iTuxD3LB56WSUNpKF/akgAoMUgJSD2iqQ35K=RFk508SD3LB5galiNckF/SKHxo1gspxD2iqQ3FbHf=k1qXOD3LB5+=P=L8eUma1j3=UUONxD2iqQ3uY5eXlUEoU=OSkiWuDF27aFViDi3MKpqa012iqQ3uk50MPgbWM/jotiuuDF27aFViDpWF3U/5xG2iqQ3ukF6NlU3F1vs=PNiols27aFViDWqFbi6W1W2iqQ3ulvqWsET8S=VlSUuu0s27aFViDiP5SUgSlAqcNUgpPgv7SD3LB5jSYT0u0v77aFViDiPWkij5Ys2iqQ38kp6llU1oNNh5tsQ80s27aFViDiApjvH=l12iqQ35Sj+lKpApxD3LB5H5xNkpKvqu1iE=Up+FSD2iqQ3u1eOpP1q8Np6W06IoMF27aFVi0UUSjNOoKJQ8KW/Ssi/7SD3LB56WY==cYW/a3UAo1hVFSD2iqQ35bG/831QpxD3LB5/a0=1c3NS7aFViPNY=3U/cKM2iqQ3cbE+ckp3MxD3LB5+5ki=ubEmaDRxpjNVFSD2iqQ35YMe5DpYcSD3LB5HWMplFPN77aFViPEUWMjP=SG2iqQ3oM6qlMpP5MUg=xNRu3s27aFVi0ebJNvCJxux8lpvltUv7SD3LB5CF0jJ83WDN0e1JNvgJSD2iqQ3c3EgpDp3=1UH5xNLc3s27aFViP5PStijSK12iqQ3u3NfaKRqFSD3LB5CFxpk8lpvlKE1psjgpxD2iqQ3FxGeFsEXpxD3LB5HcKiuck5kEPgEXNNsJSD2iqQ3cYpMXlUbJNNq5evWu3s27aFViDpLEkNsS312iqQ3cMeqSDj3NxD3LB5VWUvRcMe0MPHIlshHFSD2iqQ3ptEvMYUbElgBSYR/pts27aFViDRxMsgO=192iqQ38sghW0/IJNvVFxu/8UF27aFViPg3SOiQaUvLukv6pPUk7SD3LB5sWlAeukN67aFViDsx8bpOSMF2iqQ3u3vYSk=A=SD3LB5+5PTQ8eUgIPH3FUHspxD2iqQ3ul50a1joWsU+Sl=SueF27aFViPuqSKNBSSu2iqQ3c3vKNKUDFSN6a15=c1F27aFViPpPSsgOSSUoubi+Wt/K7SD3LB56cKiHF1h/7aFViPNPc16D5012iqQ3pKN0MkiY=SD3LB5xoKgUuPv/7aFViDiUlONqWPs2iqQ3cYMeWMiPo1/OalUKcks27aFViDiP5SUgSl6RuDeq=spK7SD3LB5Pctg4ulvg7aFVi0U3ls/+S3sPolF/asEK7SD3LB5e=Nv4uPFD7aFVi02iJMg650=i8bihWt2k7SD3LB5sotgRcSie7aFViDp1MD5BWPgWuDe+MDik7SD3LB56WPs6oMD6SkgioM5ONxD2iqQ3c1/m8k5W5SD3LB5hoj5JpYpfXt6TNeT3LB5g=tN=8Ng/p0eDoNgCJSD2iqQ3u05WlMNxoM56ctgucks27aFViDuQ8YNeW1F2iqQ3u16qasjPEM/OpxD2iqQ35shq53pPoSD3LB565epWoMUmaDjA81v6pxD2iqQ3FbifNPjeuxD3LB5saxUhplN67aFVi0e1JNv/lYMe8sg6WlUv7SD3LB5H5eHAF1/h7aFViPgeSsj6WPs2iqQ35SH+ckpWFSD3LB505PRe5Dhk7aFViPs/JYv+oKs2iqQ3oSi+MKgPlshVFxjMuUF27aFViDpPEMh+5Pguu1e0aqFViPRqEM2DaPs2iqQ35D/uE3JQ8SD3LB5PSt6hc1h67aFViDpA81v+ctiRpkJ6a3Uk7SD3LB5g=tNo8sghN0e1=M5hpxD2iqQ35M6RSKjWJSD3LB5H=xUopt50aqFViP=X=bj+W312iqQ3FMh+osjLXOD3LB5sWP=450vU7aFViPgApsvj5bUWplvmMsEK7SD3LB56llUKuk5/XlUX5Ug6FSD2iqQ3pKvRoKTqSxD3LB5B5tNK80WDW06P=NvVpxD2iqQ35PNRlKiAoSD3LB5e=0Jeu350NMp1Ne=OJSD2iqQ3ck5uoMiEFSD3LB5s5kglc3FA7aFViDEEFY2s5xjic3vgalUv7SD3LB5B51vYFSie7aFVi0U381vOSkjKu160NKUK7SD3LB5dabHXcSiYlkg3ESjBFSD2iqQ3cSiRasiEps//5evSFPs27aFVi0eI51h4lliEubReWt//7SD3LB5qWKgqFD6U7aFViPjEMteHSNW2iqQ3ckW/Ssi35Up+5xMQueF27aFVi0/Das/+=s/E8k5UEKgK7SD3LB5BSMQQuk5YM0/A81g6FSD2iqQ3ckFDIPH3SjNOoKJQols27aFVi0UiJ1vOSM/R8K5WNMpK7SD3LB56Wb1/u16qlMN0WOD3LB5j=NHouPNK7aFViDEE51hHcKjKubEgpPgv7SD3LB5+5xMQuxHYNDEbJNNxFSD2iqQ3pOjCaKiPoSD3LB5+W1/N8KvfMKTqaOH4pxD2iqQ3olWDEleE5Up4lli7c3s27aFViPiWFU5eSM92iqQ383vkWmFViPiUXl6/WbUNpt50NMpv7SD3LB5C5s5K8kpLNle1JN5hFSD2iqQ3olNCasEEFY2s5xjic3s27aFViP1q8U=+=P=tuxE0a3Uk7SD3LB5BWlifFbiO7aFViPg0aKE/WY12iqQ3cKEgpPg3=bH6FxjWuYs27aFViDjAo3jsWls2iqQ35SjRF3iPEOD3LB5jcspl5tv67aFViDNUMsg/53M2iqQ3ck5qaDEE5UgOWSv=cKs27aFViDNPps6O51W2iqQ3uYvuEssQSxD3LB5hlljJ8sg/Et/I8NgVpxD2iqQ3ck5fSsibJ1gB=0=oueF27aFViDEWF1/PcKM2iqQ3plNqEk=WSxD3LB5jotiuuD6LalU3SshQFSD2iqQ353=sFk5XoSD3LB56WbUMu05JSsp35NjQFSD2iqQ3cSj0NDNX8SD3LB5h=tsPolvmaKg3FUHBpxD2iqQ38Sj6W0/IpegjaxHJ8Ps27aFVi0UI=NUhl3jK8kpglY6v7SD3LB5BaSjEuk5JM0UTNseHFSD2iqQ38UgeN02DptphFxux8Ps27aFViPpTo1/eSKM2iqQ3u1DeSkiU8SD3LB5ga3j=8Ypgp061oSHhpxD2iqQ381gY=tebEONC=tMx80s27aFViDp3=YUx5Ys2iqQ3u0v0WsiPXMh+5OHiu1F27aFViDpEMOjD5k12iqQ38kWDWY6=EjgClljJ8sF27aFVi0ULWjUCaSu/80Evlt2/7SD3LB5Ha06epKv67aFViP5P5YNDSs92iqQ35SjW51pLMxD3LB5s5x1Q8xHRSsiTc1/sJSD2iqQ3cSERSDiUcSD3LB5P5eHCps6/7aFViDEEF1/OaSj=ck5qMsp/7SD3LB5DSkgW505e7aFViPgPWM/BS3io8KvCWKU/7SD3LB5h5tjK8PWDWYeoJN54JSD2iqQ3ol5CMPUA8UgQF0gk8Ks27aFViP1q81=H5xNIubR/NDiv7SD3LB5+=M/IubRDpDjA8Np6NxD2iqQ353NY51EXoSD3LB5jaxUopOEK7aFVi0/I8Sjg=tNo8sgvN0ev7SD3LB5soK=P5P=v7aFViPgPWO56SSU=cY50ll2K7SD3LB5BS3ioFkvmN0UbElgBpxD2iqQ3pOE0M3R/8SD3LB5s=1w/pOiU7aFVi0/xJNvhotRDoPpSakHK7SD3LB5QaUvou05YNlUT8bHjFSD2iqQ3ckvfa0/P5bpO=D/=pks27aFViDNeNt6j=Ys2iqQ3cSiRSK1qMxUgSkgRuYs27aFVi0eDcM5h5KNN8lpvN0e/7SD3LB5PctipF16/7aFViPEEc1UDcsW2iqQ3FYvWMKT/SxD3LB5BWD5MuxiRaKg3XSE4pxD2iqQ3oM6+MKgApj5BW0TQoMF27aFViPpAaOiOWtD2iqQ3516+l3NYoSD3LB5P=1/mpt=e7aFViDi3Sshg=06=c35qMspv7SD3LB5DWKgNc3NS7aFVi06opeNhl1EM8sgOEt/K7SD3LB5BalifcSR6NlUiJ1eBNxD2iqQ3oSi0aleP8NUCpxD2iqQ3uxisS1Rq8SD3LB5e5NHPFbH67aFViP=08UvOSts2iqQ3pl5uE3g0oSD3LB5qctilplN77aFViDsqajgxaP12iqQ35SiuM1p3SxD3LB5+WbU4uxHe7aFVi0238NpVa3joolpvNt/K7SD3LB5g=tMQ8sgON0e1=M5hpxD2iqQ383vmEt2=JUp6ctgXuks27aFVi0Uo8NUhlY1/cYpSNspk7SD3LB50=1/JFPNg7aFViP=e8Y5sWMF2iqQ3cMeuEk=euxD3LB50W0iMF1ee7aFViDiP5UNsot6mu0vvp0/K7SD3LB5s=1/LF1/g7aFViDiPathH5YD2iqQ3u1eOEYU15U5j=jEiFsF27aFViDj=WM2H5PiLc3FDpDEv7SD3LB5g=tNN8M1QNleDpO=gpxD2iqQ35s/RakpeSxD3LB5OWPiRpt50pBFVi0ebJNvCJxpk8lpvlKjk7SD3LB5QF0gMu0W/a1j351gHNxD2iqQ351equkpEMxD3LB5HcjHW8KFeSspbWMvHFSD2iqQ35M/RNDpU8SD3LB5PaxHJ8lEvWl/IpeghJSD2iqQ3uk=f=Dpe=SD3LB5BW1p7ckMA7aFViDEEEs5s=DvuueUgMthv7SD3LB5g=0=iuxR6MDpAF1/4NxD2iqQ3uk5JMPHxoUNBWbNWoMF27aFViPMqpjgOW3s2iqQ38kp+aYeo8Sp6SlMQc3s27aFViPHxoUNs5xjWuDeWaYUK7SD3LB5eWliH5De67aFViPg3XMgs5xjWu16/7aFViDjU=b=+ctM2iqQ35tM/cKjAcSD3LB5gSt6kuY5WWKsq=UU+JSD2iqQ35tNCSsiPoSD3LB5saDv=u05O7aFVi0UbWjUOosFPoMUmWKU/7SD3LB5+aSNopseOakHK7SD3LB5s5P=opts27aFVi0UXF1/joKjiolFeasi/7SD3LB56SM/NcY50EKHxoN5gpxD2iqQ35K5uWk5A=SD3LB5H5Dp7ptp7pPUA5bHBNxD2iqQ35sh0a1EPWOD3LB5+5xjkptvLalU3=bjsJSD2iqQ38KFeasiP5SUgSl6RuDF27aFViPjLElEjaxG2iqQ3cY50ll2iJN5OosFPoMF27aFVi0eocN5h=ts2iqQ3pt50NPw/XMgBWbMQc3s27aFViDieFbjqW1W2iqQ3u1eJa1p0axD3LB5+5OHiu05YaPg3SjN+NxD2iqQ3ckvmNDi3Ssg6cKiuuUF27aFViDE=WNgs=0=iuY5eNKgK7SD3LB5h=jEKc1D6NMpbWMe6FSD2iqQ3FSHRcsNXSxD3LB5OWPi=ukvmSt/P5bpOJSD2iqQ35OHfFk=38SD3LB5VJ0jNF35JSsiP5UNsJSD2iqQ35DeCc1i3XOD3LB5BSNp=5bEO7aFVi0Dq5Up4WYgluDeqSsEK7SD3LB5h5KjN8UgvN0exJNUCpxD2iqQ3pOH+E3=3SxD3LB5HcteMc3F/NDpTaD5xFSD2iqQ3u3F6NMp3pD6AFSD2iqQ3cSiJasWx8SUgaP=Sc3s27aFViPgApsvj5bUIcSs6NMp/7SD3LB56Wk=Lplve7aFViPgYJ3iP5012iqQ3u0W/o1iXJbjsJxjuu1F27aFViDNAMKiP=1F2iqQ38NghW0U1oNNC=tUK80s27aFViPHIljHBSYR/ptEmMKgv7SD3LB5C=M5kpsgCS0eDcNNCNxD2iqQ38Oi0MPgPWM/BS3io8Ks27aFViPUPF1V3LB5OSkJQpKvfNlUbasesFSD2iqQ3uxEqaKUEls/V5Pguc3s27aFViDE381jBSs92iqQ3ptvWNPg/7SD3LB5QF0g1ckvfaPjXo1vBpxD2iqQ3cYNYl3jLoSD3LB5H5lTx5YNk7aFViPW/atUBSNW2iqQ3Fk=+a3ieWOD3LB5O5DpduM/K7aFViPgxJYeH5Dp7ptE+lsp/7SD3LB5/5Mp75s/67aFViP1qNs6OSS1/u1e/NKUk7SD3LB5DSYgL5bEK7aFViP1qXMh+FSD2iqQ38lpUp0e=JNvCJxpk8ls27aFVi0QqcU=OSSGdFtW6aDj/7SD3LB5/5k=1FDDQ7aFViDp0oYUsWDF2iqQ3uDeWaPsq5UEBJ0ik8Ks27aFViDp3pjjx=1F2iqQ3cSiUM0UU=UUH50=S8ts27aFVi0eI8MUg=0==uk5UNsj/7SD3LB5HaevRcSje7aFViDiP5UNsoteMuxEqaKUK7SD3LB5BSs/x53567aFVi0eXNxHt=tRA8kvklmFViDN3Xkp+WYD2iqQ38lpvltU1oNvVaYD/ols27aFViDjPEO=g=tsPoMUma1iv7SD3LB5DS3iqpOEv7aFViPviJ1ptFSD2iqQ38YpLlleoFNUg=tjN8Ps27aFViPgYFYg0Wt12iqQ3c356p0UPSjpO=xU=pts27aFVi021cNv/lYjN8Pp/lt6k7SD3LB5g=06SckvCl3HxoYgBpxD2iqQ3cMh+oKUeoSD3LB5HcKiIuYNh7aFViDiEMsUPa0D2iqQ3F0=qFkNT5SD3LB5VFxjWu3vmWsNxoM56FSD2iqQ351gUWY/IcNgh=t=18MF27aFVi0/xEjvCJxHJ8sghW0//7SD3LB5hJxpJ8UgeN02DptphpxD2iqQ35P50JPu/SxD3LB5gSYjMF1eWSsi3FYe6FSD2iqQ3c3=WckM/oSD3LB5OaliLc35fMspbJ1g6FSD2iqQ3u3F/JPJx5SD3LB5x5NpDuSH67aFViPgEc1e4lSsxc35fM1j/7SD3LB56a0=0FPNe7aFViDjPFSUgSkgRuYvCStUK7SD3LB5s=bULpts27aFViDiXFS=4aSjMubE7NsEv7SD3LB5BWPJQ8K5CWMWxFU=BFSD2iqQ3uSEuNDjTJSD3LB5B=kgluxjO7aFViPM/ptgHS312iqQ38kpglY6bJNvhaYDQoMF27aFViPg3o1/eWYD2iqQ3ckvqMsRqEl6BWbMQuls27aFVi06oFM5haSpk81g/Ele/7SD3LB5e5Nvppkvv7aFViDNUltED5l12iqQ3F3N+5kjXJSD3LB5O=MvR53FD7aFViPgESjUOWPitu1eYNKg/7SD3LB5h5tjko3s27aFViPULEkvq5DW2iqQ35DhsaspP8SD3LB5/WP=L51/e7aFViDp3XMgBW0g=c35CWKH/7SD3LB5P5xjXpK=e7aFViPNeFY2sWtD2iqQ3olpUWYU1=SjVaYjk8ls27aFViPNAc35q=192iqQ3u3W/MsiXJbjs=eHo8Ks27aFViPEe5YgBSM92iqQ38Yp0akgE5NNOWPgXoMF27aFViPu/F3jeWYD2iqQ38sgeW0U1JM5Va1Vx8sF27aFVi0/IJNUsaYeN8kp0aY/K7SD3LB5Va3MD8KpgNle18NphFSD2iqQ35se0WkuQcSD3LB5BSk==ue1/SkUE81U+JSD2iqQ35YvsE1NXcSD3LB5x506lu11/SMjPljEgpxD2iqQ35sefMPN0axD3LB5O50Aq53MD7aFViPMqF12650M2iqQ3cYNq8ssq5SD3LB56W1QQpkJQ7aFViPsq=UU+=lg=ckFeaPE/7SD3LB5C=tgm8M1DWtU1oNNCJSD2iqQ3FbEfMKgU81/B=e5M8Ks27aFVi01x5Ug65P=kckvWp3g/7SD3LB5H=l=SukNK7aFVi0eIaD5h5shiFsgJSYUv7SD3LB5BWbUaFSEg7aFViDjPpOHsWUF2iqQ3ukFel3gAobHqSSU=u3s27aFViPULcY6P5lM2iqQ35Yvu8MsqMxD3LB5O=0=LcY5WNkgoSD5hFSD2iqQ38NgvN0exJSEVa31/ols27aFVi0ebJN5V5tNN83pONlek7SD3LB5hJxuQ8PpglY61oM5hFSD2iqQ3cMD6Et/A81265PilpjF27aFViDEPESEH=012iqQ3pl5uEMNE=SD3LB5fSYJ/ubE/E0/bJMeOFSD2iqQ3pM/mSP=PWOD3LB56WbUMu05JSsp35SUgpxD2iqQ3u05quk=EWOD3LB5BJ0RPcSR6MDRxoS=gJSD2iqQ35tvs5kg3WOD3LB5gS3iWuYEgpDiE=Up+FSD2iqQ3uk=WWPU0uxD3LB5+SM/=uxEq=sj3SjE+JSD2iqQ35bjsFKsqMxD3LB5scKjKFPFeNDpAFNpVFSD2iqQ3pl=fMPpX=SD3LB5eWkiCpK=/7aFViPNUF1/s5lD2iqQ3pKv/akHIljHBSYR/pts27aFVi0/IJN5h=tNK8Mg6p0e/7SD3LB56W1QQpkuQalebEOHgpxD2iqQ3uSR6WkNUuxD3LB5hJxuq80pKEt6I=YphpxD2iqQ3Ft5OpP1qlsvOW0D6oMF27aFViPpLXlUxWDW2iqQ3ptW/SMjPljEV506luYs27aFViPM/=YNPSNW2iqQ3c3vfa3g0XN56cs/Mc3s27aFViPUeMj5x5Ys2iqQ3u3vsJ3N0uxD3LB5gS3=ock50asE3=bNANxD2iqQ3uDDe5DjeEOD3LB5P5eva5Y=77aFVi021oSj4F0jJ80WDW06/7SD3LB5+=k=Pps/O7aFViDN3Ss/6St12iqQ3oMUmSMjPljEVctT/uYs27aFVi02YcNvCaSuq8NgvlKjk7SD3LB5BWbNtpkvg7aFViDRqSjNs=P==8K50W3g/7SD3LB5+Sk1Pc1D6NMpbWNgHFSD2iqQ38K50NsETFbNg=M/Nu0s27aFViP1qSOHj5s2K8kpMa1ik7SD3LB5ja0g6u05e7aFVi0UiJN=QaU5lcY5WW3HK7SD3LB54aliNubReSt2=oM5sJSD2iqQ3olpUlY/IJN5h=t=g8ks27aFVi0eIpeNha1We8YEvlt2v7SD3LB5+WPgo5tNU7aFViP=T83NHoKM2iqQ3FbEWE1s/JSD3LB56W0eMuxEqlMjAJ1/VFSD2iqQ3psh08sNU5SD3LB5hcteM8sghWl/D=NphFSD2iqQ3ck5fa3g351e+W1vuuMF27aFViPUP5U56cs/tcSiCp1iK7SD3LB5qWtgoFYN77aFViDWqSOHH5xUN8DUmaKUK7SD3LB5g=KNN8lpvN0e1pD5hNxD2iqQ3uP5+8KgPWOD3LB5hJ0jk8lpvN0ev7SD3LB5s=P=Mu0F6lkUAoUHBJSD2iqQ3uYvCStUiJ1vOSM/R8Ks27aFVi0hIWs6+csvkukvfaspv7SD3LB5q=Y6dubHS7aFViDsq5bNscts2iqQ350NYW3TQoSD3LB5H5xjkubEfWKUPESG3LB56WOUxuPvh7aFVi02Do1/VSl6oueUgpDEK7SD3LB5eWUH+5kvK7aFViP=XMKiBSl12iqQ3ukvq=kNLaxD3LB5OSM/CFbiO7aFViPEYMOiB=l12iqQ35bH+lkWQNxD3LB5dSjpNckF/SthIWs6+FSD2iqQ3FP=WaKET5SD3LB5fW1vWckvfWsi3=UN+JSD2iqQ35MD68DjWSxD3LB5OabHipKvCaKgP=U56FSD2iqQ3uYF6ll2iJMg650=i8UF27aFViPsqStgq5xu2iqQ38lpvltU1=Sjg=tNo8sF27aFVi0/IJN5h=tsDolpLNleK7SD3LB5OS1QecbE67aFViDNbWNU+ctJ/c3vCWKg/7SD3LB5OaSjoc35JSK1xFS=gJSD2iqQ3FxEuJ3iApxD3LB5jSkM0olpUNlDq5Up4NxD2iqQ3ol5WNMET5bHB5xULc3s27aFViPUAFUHBWbNtpkvg7aFViPEW8Y6j5eW2iqQ3uDe0W1jPXSjOlSjSuks27aFViPET8Upx5PM2iqQ3FbiRlMEAcSD3LB5+SMp3pOHh7aFViPpX8YUjotM2iqQ3oMD/asNbWSEH5PRQuls27aFViDixWMgOSk=Lukv/NKUk7SD3LB5DW3=guP=v7aFViP=eajpBSts2iqQ38eUmNKUApepsW1/Lpts27aFViDRqF1/QF0gNpKF/SsEK7SD3LB5sW1/Lpt5KEYU1cN5fFSD2iqQ35l=u5KMqoSD3LB5gojplu05Ya1jAFbN4pxD2iqQ3uD/R=DEPpxD3LB5h=tjJolphNleo5M5hFSD2iqQ3uY50a0hxJNNx5xNkpKs27aFViDE383Hs=312iqQ3cSiCp1Wx51g6W3=oueF27aFViDN0Ss/6ct12iqQ383pelYeouD5ha1EN8MF27aFViDNeSjNOoKJQoMTe=1Nv7SD3LB5OWtTe5Y5YS3pE=Up+FSD2iqQ3uxHYNDE1MjNBWPj78sF27aFViDiIEOv+=DQqol5CMPU/7SD3LB50WlgfF1hU7aFViDpU=1j+aP12iqQ3psTDXtQqFUHsabuA8jF27aFViPR/Jbpq5SG2iqQ35D/uFspYFSD3LB5x5SjEcMhU7aFViPUE=1gHW1p=ubE0Nkgv7SD3LB5PStTeu1DD7aFViDpE=UEH5Ps6oMe+asiv7SD3LB5/SS1DFKEgN0U1JM5hpxD2iqQ3uDe0NDi3=1g+FSD2iqQ3u16mlk535SD3LB5e5lJeplvU7aFViPiWStND5DF2iqQ3u0vKE0U3WMvOSMpuu1F27aFViPT/8UEO=l12iqQ351/0N3p38SD3LB5xWl6EuP5e7aFViDiEXNN+5jEKul50MKgk7SD3LB5OoKJQolvvNKsq=UU+JSD2iqQ3ubjmWkEeoSD3LB5OSl=7cY5k7aFViPgAJ1vj5bUIcSs6a1j/7SD3LB5HSKg3u0Nh7aFViP=XoUiBSSG2iqQ3FbHqlk=A=SD3LB5xS3JQ5kNS7aFViDje=Yv6csF2iqQ3ul5JWk=e=SD3LB5x5Mu0ps/e7aFVi0UEajH+=PiWu1UgpPUk7SD3LB5/lYUN8kpvWt21oM5hFSD2iqQ383WDlY6oJN54J0jools27aFViDpEFYNP=D92iqQ35OEC5PgPuxD3LB5VFxjWu3vmWsNxoM5+pxD2iqQ38KvCSPUPFU=sl12Ku1F27aFViPiYoUU0=MV2iqQ3FtvvpDWxFbNB=PM6oMF27aFViPRQMKjsSSG2iqQ3u3M6SDpPEOD3LB5OotglcSi0l1Ek7SD3LB5s=xUhubEsSsEL81vONxD2iqQ3Fxju8kpEuxD3LB5Va3sQckpeNl6IoM5CFSD2iqQ3uMh0M1iPFSD3LB5h=tj=81gUWl6DoM5hFSD2iqQ35OjCWPE3pxD3LB565xjWFKEfa3UAo1hDpxD2iqQ3uSH+=3=eFSD3LB5/WtgbuYNg7aFViPuxcY6/aeF2iqQ38lpY=t6=EOiCF0jJ83s27aFViDiT81/galRqck5JWkg/7SD3LB5j5s2K8kpMa1Rqlj=OpxD2iqQ3FtEY=kuQ83NP5YiYols27aFViPgAF1/QF0giuk5JMDj/7SD3LB5H5xNNc3vfok=UWlD3LB5D50645SiS7aFViP5Lptvs=D92iqQ3FKEf=K=L8MUQaUwQuks27aFViPHbXMhHcK1diqQ3FsgJaDjAcM5+=0JQcks27aFViPUAFUHBWbu2iqQ3pl5WokNEEOD3LB5Ba067u3=K7aFVi02=ND5x=P=Spse0Wsj/7SD3LB5qa0=b51eU7aFViPJxpKjeW1V2iqQ3cbEYa3=T=SD3LB5Va31/olpvp0exWjNhNxD2iqQ3pMhC8PTxcSD3LB56SNw/uDF27aFViPNLaKvPSkM2iqQ3ck=WaMjWpxD3LB5/lYUkolpUlY/I8N5hJSD2iqQ3uxEqEMi35SUgSNvWc1F27aFVi02iJUNBWbNW8eUmSPg/7SD3LB5j5DpD5lFA7aFViPiXobie=NW2iqQ35biMo1N3FSD3LB5O=kTecM6v7aFViDWxJ1/B=evIul50a1jk7SD3LB5q50=H5t=77aFViPJQMjvP=192iqQ3u16fN35ASxD3LB5s=DvlcYs27aFVi0hIWs66WY6tc3vRNPvk7SD3LB5/5Sseu05O7aFViDieobiDWls2iqQ3ukN0oPg3pxD3LB5gotiluxiWWsjPXNN4pxD2iqQ3ol5YWMp3XMgBWbjkuYs27aFViPWxat2OSKs2iqQ38kpeNle1JN5hF0j=8MF27aFViPsq5Y26WK12iqQ3uDhqasjeSxD3LB5B=PM6oMD6NPUP8UHsJSD2iqQ38PEvlt2xoahQ=DEKc1F27aFViDpXMj=OSlM2iqQ3u160NKUE5UUgaliRpKs27aFVi0/IuxNhaYUK8lWDll2/7SD3LB5/5DvAFk=g7aFViPg3F1/BabHic1eYMDEk7SD3LB5BojHWpk577aFViDEPaONe=1F2iqQ35D6f5kT/axD3LB5sWl=IFbEg7aFViPgU835/NxD2iqQ3olWQN0/IJN5ha3M/8NF27aFVi0eIoN5OosF2iqQ3F3NM8PpEuxD3LB5+=DpMulNe7aFVi01q5bpOos/Wckvg7aFViDpTptgDW012iqQ3FbisFkTxcSD3LB5xSSN45SEU7aFViDN05bpeW0D2iqQ3uY5Ya3gPaj=B=PiWuDF27aFViPgTpKvO5192iqQ3uYF68kiAJSD3LB5jaP=XFM677aFViP=AJYh0=lM2iqQ3F160lKgUSxD3LB5BW016oMh+MKgPlshVFSD2iqQ3uk=qFK=0=SD3LB5ha3NK8kWDll6xJN5gJSD2iqQ3FPM/EsEPFSD3kSVT=3NCJPpg80ATkxHAElpvExsQLj9QcOjmJ0jbEaUn5YjqRj9QcOjYEl=mEOeY5l6b5tU48mvzWKwDWxGx=O1gcP5Tol/UIBDhkxHAEOWQW0u6IkhzWKwe=tsPWSH8iPHeF0w3kavzWKwe=tsPWSH8iPETol=DieDTIa1nzkDVkxHAWbwAEOM67l=e8YEDol2CIBUn5YjqRj9QcOsAWOJ6ESeni0pv5ts3X3V3o0N6ixT3J024o0UUiqQ35YjV5lM3Xm5DoleU8PNDiPDViPEU5sE480hg=aF+=3NCJPpg80ATkxHAESE1WbU1Lj9QcOW0JSjv=B/zWKwqWOsAEbRVkxHAESMDXtRPIkhzWKweESuAJbF2kxHAESMDXtRPzK/nzSh0JkRwkxHAWSpY=lMD7N9QcOW0JSjv=BV37aFdkxHAWbG/XOJqLj9QcOWAXOM/ESDQcOGn=Y2qIK=vFmHzWKwe=SuqXtJ2WKwQLj9QcOi1ExFA=SezWKweW0uqXlp8i0/U8Y5DoB55Xe9QcONUEORA=b/zWKwq=OFPXtMnkxHAElMDWbvYIqVgcP=vFmHzWKw/WtNmJb12kxHAESE1WbU1le9QcONUEORA=UDnkxHAWSpY=lMDIxD3Xe/AWbG3Ie9QcOsQ=limXSh0JkRwkxHAElsxJxRP7N9QcOMx=OR6=jhzWKw/WtNmJbU5Xe9QcOMx=OR6=jV3FKNxoB55Ij9QcONvW0WqEq1VkxHAWYuPExvU7N9QcOMx=OR6=jV38tNC=PpTieDVkxHAElsxJxRPRSD2Raj8kaJYIj9QcOsD=YNUEBV2ixD3Ie9QcONvW0WqEq1nzN9QcOMeEOvmEeV3J024o0UUieD2kxHAWSpY=lMDXPDViPiU8l20=ME480hg=aF+=3NCJPpg80ATIkhq=kpeFYA3=tN0ixh2LB53=kpO802dolM3XY=e8YEDol2CIj9QcONUXtibEq/zWKvY=bWAJbJgce9QcONUXtibExezWKwe=SvmJx59zt=e8YEDol2CIj9QcOsPEx=Y=BUnFYND5kiCRj9QcOsPEx=Y=Oh2XP=vFmHzWKv1WSGeESR2kxHAElMAJYWPIt6U5qHa=l5jcKGTiqwyXU69Xe/AWbGgiqhzWKvY=bWAJb=8iPiUFt/vJ0M3kaw4IjVCiO9fzKh2IBU8kNQ4Ie65Ia23LBF1WaFgIqF2IjhcXeDfIaFgIa/zWKw/JYuPEbw2=3NCJPpg80ATkxHAWxFq=lMALj9QctM0=Osx=BUnkxHAWxFq=lMAIBVdkxHA=S=1WSE1ISh2XPiU5KNq8mHzWKw/JYuPEbwTkxHAWlJe=YRDLj9QcOjmJ0jbEa1VkxHA=OsQESMq70pUJ021=NNaaME48kH48YNC5BvzWKv1WSGeESi8WKw/ka1+5l61=l=g8YN1XPe2Lj9QcOEmJlMAXOeY5l6b5tU48mwgcP=vFmHzWKweW0J/EOR28YNPRjiU=DNAFBw3kKweJPFdkKwqWBgFcONbIj/AElWgkKwqWBgnkKweJPFdkKwqWBg8kKwqEP/FcORqkaAdle/AWb59kKwqWUDn7e/AWbGfzaFgXPiU5KNq8mHzWKweW0J/EOi8iPpUFPu3kavzWKw/XOG0XSN8iPiU8l20=ME480hg=a55lq5D8eEDFYUC=q55IB1gXPDnkxHAWSwQEb1elq5eFtpv5tNO802dolM3kSezWKwxJYjUXOwn5YjqRj9QcOpU=bGxXOD3ixh0JkRwkxHAEls6ESHv7N9QcOsAWOJ6ENV35kH1JkpUu024o0UUieDTIShg=mwvkxHAEls6ESHvIN9QcOsAWOJ6ENV3F0NDu024o0UUieDTlqFfieDVi0E45l6D=kR3LOHAWa1n=l/x=aHzWKweJS1eWtsykxHAEtNYWOWA7N9QcOsAWOJ6ENV3=0NDu024o0UUieDT83NV8BQ3J02e83pUFmFgXU9QcOsAWOJ6ENV3FYNh8P=Uu024o0UUieDTISh2Xe9QcORAXOueXawgXPDTJSHzWKw/JYEvLOHAWS=1Ia1n5YjqRtsQkxHAWlJe=beY5l6b5tU48mvzWKwe=tsPWSGVkxHAWlibJlWeIkhzWKwe=tsPWSG2kxHAElpvExsQLSHAWOh0JkRwkxHAWlJe=YRD7lsQkxHAWlibJNhzWKwe=tsPWSH5X0UYItsQkxHAWlJe=UV3pt=3=UvEieD27See8YpU=YUC=lugcP=vFmHzWKwqXOwDES12=3NCJPpg80ATkxHAWSwQEb1eIkh0JkRwkxHAW0iv=SwA7a5vJYE1=l=3otUfo0/h8Y2QFkix5KN05Pv6c1jBuDpjp15RaMgLSseXSeHpMUEMNN=kljUoWOsqWxueEbFAXaV47aFVkxHAEtNYWOWA7NEDFYUC=qvzWKw/XOG0XSMglq5q=kHVJlEUieDTLxDdiB9ViqFgXP=vFmHzWKweJS1eWts2iqFn=Y2qIK=vFmHzWKweW0uqXlu2WKwQLj9QcOW0JSjv=B/zWKwqWOsAEbRVkxHAESMDXtRP7SHAWOhzWKwqWOsAEbR2kxHAEtNYWOWAlq5botjquku3kavzWKweESuAJbFdIq1nzU9QcORQWSw0WmJYIj9QcOW0JSjv=OezWKweW0uqXluUWKwD7e9QcOW0JSjv=BTQcOuQIe9QcORQWSw0WbgzWKwqWOsAEbRVkxHAESE1WbU1IqVUWKwDIS2zWKweJS1eWtsd7NEDFYUC=eV3=3i48METJkiO80pUieDTWKvY=m=zWKwxEYs/JluZ7mwhWKwqIU9QcOMx=OR6=BJQcOJgISTQcOGgce9QcORQWSw0WbezWKwxJYjUXOv8i0UC=tNAS0J3kavzWKwqWOsAEbRgXPeq=kpeFYAwkxHAEls6ESHvXPDnJSHzWKw/=bNYlq57oevg=3u3kSeY5l6b5tU48mvzWKw/Et=U=SugcP=vFmHzWKwxXOweWSM2kxHAWbwAEOM6Ij9QcOsD=YNUEB1n5YjqRj9QcONUEORA=be8kShY8PRT5YjqRj9QcOi1ExFA=SDQcOGVkxHAWSHUJYR67N9QcOWAXOM/ENV38tNC=PpTieDnkxHAWYuPExvU7j9QcOsQ=limXShzWKwq=OFPXtMdIqUnkxHAElMDWbvYIxD3iaFdIBFQWBFdkxHAWxwAESselq5botjqu021=MjDieDTkxHAWYuPExvUINV35t2S5Kig8YF3kawQcOsQIaU8iPEVolEUieDTLSHAWm1nzkiU5KNq8mH1=lE4=tNNM1UO80eQ806U83uTkxHAElMDWbvYISh2LtsQkxHAWlJe=UV3NDvBps6oieD2cPDVJSHzWKw/=bNYlq5s=Y5YlsD3kSDvRNh5XPe0JkRwkxHAEOWQW0u67lsQkxHAWlJe=UV3NDvBps6oiee8kxHAElpvExsQkShg=mvzWKwDWxGx=O127See8YpU=YUC=lugcP=vFmHzWKweJSEbWbF2=3NCJPpg80ATkxHAElMAJYWPIkhDotUxlq5uaepLF3W3kSezWKwe=SvmJxFV5tvgFeV3ND=Q8D2XieD2lxHAWaQQcOGVWKwQka/DotUxlq5=otp1aUW3kSeY5l6b5tU48mwgcPiU5KNq8m5C=k5S5tjD=aFnza/DotUxlq5SNUEgosV3kSD3kKweJPFdkKwqWBgFcONbIj/AElWgkKwqWBgnkKweJPFdkKwqWBT3LKpTokE8iPEjo1pa=a557a58kKwqEP/FcORqkaAdle/AWb59kKwqWUDn7e/AWbGfzaFnzShzWKweJSEbWb58iPHq8Pp45KUQ=a55lq5Au1pao3w3kSeY5l6b5tU48mwgcP=vFmHzWKvY=bWAJbJ28YNPRjiU=DNAFBvDotUxlq5SNUEgosV3kahDotUxlq5xplgsMYM3ka1VkxHA=OsQESMq7N9Qct=YWxvmEUV35tNx5B55IKpTokE8ieUT=tpIMq55lq5D8eEDFYUC=q55IB1g7qDh5tvgFeV3ND=Q8D2Xiee8WKw/kSThLkpTokE8ie5tFt27Sm55lxHAWjDnFYND5kiCRKpTokE8iPHm=lpjFq55Ij9Qctu/WOMeWm1nza/zWKweJSEbWb58iPHq8Pp45KUQ=a55lq5QJYN1pkW3kSeY5l6b5tU48mvzWKw/JYuPEbwgc0UYIBjB802V=ljCIK6zWKw/JYuPEbwgIkiU5KNq8mHzWKw/JYuPEbwnFYND5kiCRKpTokE8iejJl1UUam55IKpTokE8ieHLNshqFq55ISh2Lj9QcONvW0WqEeV3FKi45t2DckHUiee8iejJl1UUam557l=e8YEDol2CIj9QcOsPEx=Y=BUn=Y2qIK=vFmHzWKwxExiU=Sw2WKwQLj9QctM0=Osx=OeDotUxlq5kp3H4SDA3kNV38tNC=PpTieDnkxHAWxFq=lMA7j9QctM0=Osx=OhzWKwxExiU=SwdIqUn5tvgFeV3ND=Q8D2Xiee8iPHeF0w3kavEJkpTlq5q8PNC=B55Isev5tv8iPiv8Yp48a55IB1gIa/zWKvUEYu/W0u25tvgFeV3ND=Q8D2Xiee8i0/U8Y5DoB55XPeq=kpeFYAwkxHAWSFPEY=1IKpTokE8ie5tFt27Sm55lxHAWjDgXPDV8YNPRj9QcONvW0WqEqvvWj9QcOjYElJglq5Au1pao3w3kawgLj9QcOjYEl=mEOevWj9QcOjYEl=8iD2dltUY5B55Ij9QcOjYEl=mEB1VJSHzWKw/=bNYlq5kasisSUT3kNhzWKwe=tsPWSH57N9QcOjYEl=mEOh2=l/x=aHzWKw/=bNYJbu2kxHAEOWQW0u6XPiU5KNq8mHzWKw/=bNYJbunzSh0JkRwkxHAWSFqJbsQ7lsQkxHAWlJe=bhPol618P58kxHAWSFqJbsQIBFQcO=1EaFgkSD25l61=l=g8YN1imJT50UC=t2Ple9QcOsPWYR/WBw3WKw0=OM3IND2Raj8ka/Y5l6b5tU48mwgcP=vFmHzWKwqJxRqJbu2kxHAWSFqJbsQLj9QcOjUEYJAXOenzShzWKw/=S=YXOv8kxHAWYWqWYRDIBFQcOMPJaFgkSeY5l6b5tU48mvzWKweWbpm=OGVkxHAEOUmJYMAIkhq=kpeFYAwkxHAESRDJYuQIj9QcOu6JYiUXB1nza/zWKw/=S=YXOv8kxHAWYWqWYRDIBFQctMq=BFgkSezWKwqJxRqJbuTixHAEbH1iq1dkxHAWYWqWYRDIBFQctJDWBFgIe9QcOibWbimEBw3WKw/=Os3IahzWKwqJxRqJbuTixHAXlW0iq1dkxHAWYWqWYRDIBFQcOsDJqFgLj9QcOjUEYJAXjhzWKwqJxRqJbuTixHAEtMqiqU57l=e8YEDol2CIj9QcOwDWOM/=a/zWKw/XtiY=YJgcPiU5KNq8mHzWKwAEOGeWlMv7SezWKw/XtiY=YJnza/zWKw/=S=YXOv8kxHAWYWqWYRDIBFQctMAWaFgkSeY5l6b5tU48mvzWKwqE0=mW0RVkxHAWbibEbEmIkhq=kpeFYAwkxHAWb5YJbEmIe9QcORqJxJxJbh2Lj9QcOjUEYJAXjhzWKwqJxRqJbuTixHAJlEmiqU57N9QcOibWbimEBw3WKv1W0J3IahzWKwqJxRqJbuTixHAWxWqiq1VkxHAWlM0=bwAle9QcOibWbimEBw3WKvbWOR3IND2kxHAWYWqWYRDIBFQcOWQJqFgIe9QcOibWbimEBw3WKweJbW3IahzWKwqJxRqJbuTixHA=OGAiq1die/AWbGgiq/zWKw/=S=YXOv8kxHAWYWqWYRDIBFQctJAJaFgkSeY5l6b5tU48mvzWKw/Ex5bESGVkxHAEOJ0JxRQIkhq=kpeFYAwkxHAWSFPJxMQRSD2kxHAEOJ0JxRQXPDVkxHAWlM0=bwAle9QcOibWbimEBw3WKw/WtJ3IND2kxHAWYWqWYRDIBFQcO1DWqFgLj9QcOjUEYJAXjhzWKwqJxRqJbuTixHAJYjUiqU57N9QcOibWbimEBw3WKwqWOW3Ia/zWKw/=S=YXOv8kxHAWYWqWYRDIBFQctMPWaFgkSeY5l6b5tU48mvzWKvYEYMAEbJVkxHAEOFQEbWAIkhq=kpeFYAwkxHA=b=UXOJ07SD2kxHAEOFQEbWAXPDVkxHAWlM0=bwAle9QcOibWbimEBw3WKw6Wb13IND2kxHAWYWqWYRDIBFQctJxiq1VkxHAWlM0=bwAle9QcOibWbimEBw3WKvvWlu3IND2kxHAWYWqWYRDIBFQcOEYXaFgLj9QcOjUEYJAXjhzWKwqJxRqJbuTixHA=OG0iqU57N9QcOibWbimEBw3WKvUEYs3Ia/zWKw/=S=YXOv8kxHAWYWqWYRDIBFQcORPEaFgkSeY5l6b5tU48mvzWKw/=OuAESsVkxHAW0EmWOJ0Ikhq=kpeFYAwkxHAWluDXOM/RSD2kxHAW0EmWOJ0XPDVkxHAWlM0=bwAle9QcOibWbimEBw3WKvb=OW3IND2kxHAWYWqWYRDIBFQcOwqEmFgLj9QcOjUEYJAXjhzWKwqJxRqJbuTixHA=ts/iqU57N9QcOibWbimEBw3WKvbExF3IahzWKwqJxRqJbuTixHAElseiq1VkxHAWlM0=bwAle9QcOibWbimEBw3WKv1E0J3IND2kxHAWYWqWYRDIBFQcO1qWBFgLj9QcOjUEYJAXjhzWKwqJxRqJbuTixHAJS=1iqU57l=e8YEDol2CIj9QcOpvWxF0=B/zWKweExsA=tMgcPiU5KNq8mHzWKwDJSWPEYuv7SezWKweExsA=tMnza/zWKw/=S=YXOv8kxHAWYWqWYRDIBFQctJP=mFgkSezWKwqJxRqJbuTixHA=bGQiq1VkxHAWlM0=bwAle9QcOibWbimEBw3WKvbWO13IND2kxHAWYWqWYRDIBFQcOMDJqFgLj9QcOjUEYJAXjhzWKwqJxRqJbuTixHAESNbiqU57N9QcOibWbimEBw3WKv1Exw3Ia/zWKw/=S=YXOv8kxHAWYWqWYRDIBFQcORP=BFgkSezWKwqJxRqJbuTixHAE0WDiq1VkxHAWlM0=bwAle9QcOibWbimEBw3WKwxWSJ3IND2kxHAWYWqWYRDIBFQctuPWaFgLj9QcOjUEYJAXjhzWKwqJxRqJbuTixHA=SRDiqU57N9QcOibWbimEBw3WKv1JSu3Ia/zWKw/=S=YXOv8kxHAWYWqWYRDIBFQctR6=BFgkSezWKwqJxRqJbuTixHAWYs0iq1VkxHAWlM0=bwAle9QcOibWbimEBw3WKvUExG3IND2=3NCJPpg80ATkxHAW0=YWlW0Lj9QcOjv=tpmWmUnFYND5kiCRj9QcOEY=bjbEmhzWKw/Jlp1JbRnza/zWKw/=S=YXOv8kxHAWYWqWYRDIBFQctW/XBFgkSeY5l6b5tU48mvzWKwDEO16=YWVkxHAEOGAEOwxIkhq=kpeFYAwkxHAEOu6Xl=bIe9QcOuQXOuAWxh2Lj9QcOjUEYJAXjhzWKwqJxRqJbuTixHAEbWQiqU57l=e8YEDol2CIj9QcOueEtJPEm/zWKwDExRP=bRgcPiU5KNq8mHzWKwDESpYExJTkxHAEOFqE0JqISh2Lj9QcOjUEYJAXjhzWKwqJxRqJbuTixHAWYW0iqU57l=e8YEDol2CIj9QcOsPXlWeJaUnFYND5kiCRj9QcOsPXlWeJawgXPDVkxHAWlM0=bwAle9QcOibWbimEBw3WKvvElR3IND2kxHAWYWqWYRDIBFQcO1DXBFgLj9QcOjUEYJAXjhzWKwqJxRqJbuTixHA=O1DiqU57N9QcOibWbimEBw3WKvmJSM3IahzWKwqJxRqJbuTixHAXtNbiq1diq93Lj9QcOjUEYJAXjhzWKwqJxRqJbuTixHAJxwqiqU57N9QcOibWbimEBw3WKv1EmFgIe9QcOibWbimEBw3WKwqWbW3IahzWKwqJxRqJbuTixHA=ONUiq1VkxHAWlM0=bwAle9QcOibWbimEBw3WKw/WOGxiqU57N9QcOibWbimEBw3WKvvEbM3Ia/zWKw/=S=YXOv8kxHAWYWqWYRDIBFQctRxJaFgkSezWKwqJxRqJbuTixHAEOu6iq1VkxHAWlM0=bwAle9QcOibWbimEBw3WKwDJxu3IND2=3NCJPpg80ATkxHAW0u/JSWPIkhq=kpeFYAwkxHAW0u/JSWPIB1nza/zWKw/=S=YXOv8kxHAWYWqWYRDIBFQcOwQWqFgkSezWKwqJxRqJbuTixHAJSUmiq1dkxHAWYWqWYRDIBFQctMPEqFgLj9QcOjUEYJAXjhzWKwqJxRqJbuTixHAJxUviqU57N9QcOibWbimEBw3WKwq=bR3Ia/zWKw/=S=YXOv8kxHAWYWqWYRDIBFQctNv=mFgkSezWKwqJxRqJbuTixHAJbvUiq1VkxHAWlM0=bwAle9QcOibWbimEBw3WKvUJb13IND2kxHAWYWqWYRDIBFQctuAEBFgLj9QcOjUEYJAXjhzWKwqJxRqJbuTixHAWbGqiqU57N9QcOibWbimEBw3WKw/=lW3Ia/zWKw/=S=YXOv8kxHAWYWqWYRDIBFQctWPWaFgkSezWKwqJxRqJbuTixHAEYW3Ia/zWKw/=S=YXOv8kxHAWYWqWYRDIBFQctjbXBFgkSezWKwqJxRqJbuTixHA=tNUiq1VkxHAWlM0=bwAle9QcOibWbimEBw3WKvUElR3IND2kxHAWYWqWYRDIBFQctMA=mFgLj9QcOjUEYJAXjhzWKwqJxRqJbuTixHA=bW6iqU57N9QcOibWbimEBw3WKw0Wtu3IahzWKwqJxRqJbuTixHA=buQiq1dkxHAWYWqWYRDIBFQcON1XBFgIe9QcOibWbimEBw3WKv1WbR3IaV383u3Lj9QcOjUEYJAXjhzWKwqJxRqJbuTixHAJSMeiqU57l=e8YEDol2CIj9QcOWA=tjYJq/zWKwqWx1xESsVkxHAWbW0WlEYLj9QcOMQJYMDEmUnFYND5kiCRj9QcOWA=tjYJqvzWKwqWx1xESsVkxHAWbW0WlEYLj9QcOMQJYMDEm1nza/zWKw/=S=YXOv8kxHAWYWqWYRDIBFQcOWxWBFgkSeY5l6b5tU48mvzWKwD=O5UESwVkxHAWx1qXOUbIkhq=kpeFYAwkxHAEtuP=SMARSezWKwxXSRAXlWnza/zWKw/=S=YXOv8kxHAWYWqWYRDIBFQctsq=aFgkSeY5l6b5tU48mvzWKweEtEvJbMVkxHAWxv1WOpbIkhq=kpeFYAwkxHAESpbJlRe7j9QcOWA=OGDJxh2Lj9QcOjUEYJAXjhzWKwqJxRqJbuTixHA=YM6iqU57N9QcOibWbimEBw3WKvb=SF3Ia/zWKw/=S=YXOv8kxHAWYWqWYRDIBFQcOjmWmFgkSezWKwqJxRqJbuTixHAXlMPiq1dkxHAWYWqWYRDIBFQctsQ=aFgLj9QcOjUEYJAXjhzWKwqJxRqJbuTixHAJb=UiqU57N9QcOibWbimEBw3WKw0EbW3IahzWKwqJxRqJbuTixHA=luDiq1dkxHAWYWqWYRDIBFQcOMxJqFgIe9QcOibWbimEBw3WKvb=SW3IahzWKwqJxRqJbuTixHAJxwAiq1dkxHAWYWqWYRDIBFQcOseXBFgLj9QcOjUEYJAXjhzWKwqJxRqJbuTixHA=Os/iqU57l=e8YEDol2CIj9QcORPW0jUJm/zWKw6EY=vWORVkxHAW0JPJY=bIkhq=kpeFYAwkxHAWbFxJlNmIj9QcO10=YsQWm/zWKwx=b5m=YWgXPDVkxHAWlM0=bwAle9QcOibWbimEBw3WKvvJxJ3IND2kxHAWYWqWYRDIBFQcOM/XaFgLj9QcOjUEYJAXjhzWKwqJxRqJbuTixHAJSG6iqU57N9QcOibWbimEBw3WKwAXlJ3Ia/zWKw/=S=YXOv8kxHAWYWqWYRDIBFQctEUJmFgkSezWKwqJxRqJbuTixHA=lEbiq1VkxHAWlM0=bwAle9QcOibWbimEBw3WKvU=ts3IND2kxHAWYWqWYRDIBFQctjYWmFgLj9QcOjUEYJAXjhzWKwqJxRqJbuTixHAEbuAiqU57l=e8YEDol2CIj9QcO1e=SWAJq/zWKwxESMQ=SMgcPiU5KNq8mHzWKw6ElMxXtWdkxHAWxMeWtMeXPDVkxHAWlM0=bwAle9QcOibWbimEBw3WKwPJbW3IND2=3NCJPpg80ATkxHAWxpUXlj1Lj9QcONmXOR/WqUnFYND5kiCRj9QcOWD=SUv=OD27N9QcONmXOR/Wxh2Lj9QcOjUEYJAXjhzWKwqJxRqJbuTixHAWbMPiqU57N9QcOibWbimEBw3WKvv=ts3Ia/zWKw/=S=YXOv8kxHAWYWqWYRDIBFQctWeEqFgkSeY5l6b5tU48mvzWKwDJYM0JlRVkxHAWlj1E0=YIkhq=kpeFYAwkxHAEtiUEYjmRSD2kxHAWlj1E0=YXPDVkxHAWlM0=bwAle9QcOibWbimEBw3WKwqXOG3IND2kxHAWYWqWYRDIBFQcOuQEmFgLj9QcOjUEYJAXjhzWKwqJxRqJbuTixHAWYR0iqU57N9QcOibWbimEBw3WKwqJxW3Ia/zWKw/=S=YXOv8kxHAWYWqWYRDIBFQctW/EaFgkSeY5l6b5tU48mvzWKwqWOM/XlsgcPiU5KNq8mHzWKwqWOM/XlsTISh2Lj9QcOjUEYJAXjhzWKwqJxRqJbuTixHA=bF/iqU57N9QcOibWbimEBw3WKvvJSs3Ia/zWKw/=S=YXOv8kxHAWYWqWYRDIBFQcOpU=aFgkSezWKwqJxRqJbuTixHAE0NYiq1VkxHAWlM0=bwAle9QcOibWbimEBw3WKwqXOM3IND2kxHAWYWqWYRDIBFQcOJq=BFgLj9QcOjUEYJAXjhzWKwqJxRqJbuTixHAWbM/iqU57N9QcOibWbimEBw3WKwAWO13Ia/zWKw/=S=YXOv8kxHAWYWqWYRDIBFQcOE1XaFgkSezWKwqJxRqJbuTixHAE0u3Ia/zWKw/=S=YXOv8kxHAWYWqWYRDIBFQcOF0WBFgkSezWKwqJxRqJbuTixHAJbF0iq1VkxHAWlM0=bwAle9QcOibWbimEBw3WKvUWtR3IND2kxHAWYWqWYRDIBFQctWe=mFgLj9QcOjUEYJAXjhzWKwqJxRqJbuTixHA=Su6iqU57l=e8YEDol2CIj9QcOse=SWeEB/zWKwD=ls/JxMgcPiU5KNq8mHzWKw/ElMxESuv7SezWKwD=ls/JxMnza/zWKw/=S=YXOv8kxHAWYWqWYRDIBFQcts0WqFgkSezWKwqJxRqJbuTixHAW0sqiq1VkxHAWlM0=bwAle9QcOibWbimEBw3WKwDWO13IND2kxHAWYWqWYRDIBFQcOs6XBFgLj9QcOjUEYJAXjhzWKwqJxRqJbuTixHAEbu3IND2kxHAWYWqWYRDIBFQctjm=BFgIqFDiq/zWKw/=S=YXOv8kxHAWYWqWYRDIBFQcti1EaFgkSezWKwqJxRqJbuTixHAWSHbiq1dkxHAWYWqWYRDIBFQcOw6=BFgIe9QcOibWbimEBw3WKw/JbJ3IahzWKwqJxRqJbuTixHAXSwAiq1dkxHAWYWqWYRDIBFQcOueWmFgLj9QcOjUEYJAXjhzWKwqJxRqJbuTixHAESR/iqU57N9QcOibWbimEBw3WKw/WtW3IahzWKwqJxRqJbuTixHAXOU1iq1dkxHAWYWqWYRDIBFQctimJqFgIe9QcOibWbimEBw3WKweXOW3Ia/zWKw/=S=YXOv8kxHAWYWqWYRDIBFQcOsQWmFgkSezWKwqJxRqJbuTixHAWSHbiq1dkxHAWYWqWYRDIBFQcOw6=BFgIe9QcOibWbimEBw3WKwqEtJ3IaV3=lu3Lj9QcOjUEYJAXjhzWKwqJxRqJbuTixHAEbiviqU57l=e8YEDol2CIj9QcOs/=OUmWq/zWKwD=bibEYJgcPiU5KNq8mHzWKw/Wlu6JbW27SezWKwD=bibEYJnza/zWKw/=S=YXOv8kxHAWYWqWYRDIBFQcO=bXaFgkSezWKwqJxRqJbuTixHAJbuDiq1VkxHAWlM0=bwAle9QcOibWbimEBw3WKv1ExG3IND2kxHAWYWqWYRDIBFQctRqWqFgLj9QcOjUEYJAXjhzWKwqJxRqJbuTixHAXtpviqU57l=e8YEDol2CIj9QcOuDJbivJmUnFYND5kiCRj9QcOuDJbivJmwgXPDVkxHAWlM0=bwAle9QcOibWbimEBw3WKwPWOw3IND2=3NCJPpg80ATkxHAWbHYXOpYLj9QcOEYJSWqXB/zWKwqEtseElMgcPiU5KNq8mHzWKwqWtJAEtJTkxHAW0=vWxRALj9QcORDJSMe=a1nza/zWKw/=S=YXOv8kxHAWYWqWYRDIBFQcOsq=BFgkSeY5l6b5tU48mvzWKwD=b1qWOugcPiU5KNq8mHzWKwD=b1qWOuTISh2Lj9QcOjUEYJAXjhzWKwqJxRqJbuTixHAXtsQiqU57N9QcOibWbimEBw3WKv1=Ss3IahzWKwqJxRqJbuTixHAJlE1iq1dkxHAWYWqWYRDIBFQcOpvWqFgLj9QcOjUEYJAXjhzWKwqJxRqJbuTixHAXlNYiqU57l=e8YEDol2CIj9QcOuA=tEYEa/zWKvYXSuq=tRgcPiU5KNq8mHzWKwDXtpb=bM9kxHA=b1DWYpmXPDVkxHAWlM0=bwAle9QcOibWbimEBw3WKwA=Os3IND2kxHAWYWqWYRDIBFQctJ6JaFgLj9QcOjUEYJAXjhzWKwqJxRqJbuTixHAExjmiqU57N9QcOibWbimEBw3WKvYWSu3Ia/zWKw/=S=YXOv8kxHAWYWqWYRDIBFQcOs/WqFgkSeY5l6b5tU48mvzWKweESvbExuVkxHAWxJ6Wts/Ikhq=kpeFYAwkxHAESMAJxFDIU9QcOW0XSHvWSh2Lj9QcOjUEYJAXjhzWKwqJxRqJbuTixHAElu6iqU57l=e8YEDol2CIj9QcOsxJ0imXa/zWKw/=bUmJYsgcPiU5KNq8mHzWKw/W0EmJb127SezWKw/=bUmJYsnza/zWKw/=S=YXOv8kxHAWYWqWYRDIBFQcO1xEBFgkSezWKwqJxRqJbuTixHAWlJ6iq1VkxHAWlM0=bwAle9QcOibWbimEBw3WKweXaFgkSezWKwqJxRqJbuTixHAJSRPiq1VkxHAWlM0=bwAle9QcOibWbimEBw3WKvb=tu3IND2kxHAWYWqWYRDIBFQcOjbWBFgLj9QcOjUEYJAXjhzWKwqJxRqJbuTixHAESRAiqU57l=e8YEDol2CIj9QctMxJlM0Em/zWKwxJbwQXtugcPiU5KNq8mHzWKvUW0jUEbJ27SezWKwxJbwQXtunza/zWKw/=S=YXOv8kxHAWYWqWYRDIBFQctuDiqU57N9QcOibWbimEBw3WKw/Jxs3Ia/zWKw/=S=YXOv8kxHAWYWqWYRDIBFQctuDWaFgkSeY5l6b5tU48mvzWKw/ElRPEO1VkxHAEOM/ES=YIkhq=kpeFYAwkxHAWSNmExu6Ij9QcOueWSM0=m1nza/zWKw/=S=YXOv8kxHAWYWqWYRDIBFQctReWmFgkSezWKwqJxRqJbuTixHAXSGeiq1VkxHAWlM0=bwAle9QcOibWbimEBw3WKwxEYR3IND2=3NCJPpg80ATkxHAWSUUWlMQLj9QcOR6WSRAJmUnFYND5kiCRj9QcOs6=SjUWBvzWKwqXSsqXtRgXPDVkxHAWlM0=bwAle9QcOibWbimEBw3WKwq=OW3IND2=3NCJPpg80ATkxHAEt=vJ0ivLj9QcOjUJlu6=mUnFYND5kiCRj9QcOpYJlEmJavzWKw/=lj1XlJgXPDVkxHAWlM0=bwAle9QcOibWbimEBw3WKvbXOG3IND2kxHAWYWqWYRDIBFQcOuAWmFgIe9QcOibWbimEBw3WKvY=Ou3Ia/zWKw/=S=YXOv8kxHAWYWqWYRDIBFQctEv=BFgkSeY5l6b5tU48mvzWKweWbWQXtWVkxHAWbsq=SR/Ikhq=kpeFYAwkxHAESRxWOvbRSD2kxHAWbsq=SR/XPDVkxHAWlM0=bwAle9QcOibWbimEBw3WKwAWlM3IND2kxHAWYWqWYRDIBFQcOJ/JqFgLj9QcOjUEYJAXjhzWKwqJxRqJbuTixHA=tibiqU57N9QcOibWbimEBw3WKvv=tu3Ia/zWKw/=S=YXOv8kxHAWYWqWYRDIBFQcORP=mFgkSezWKwqJxRqJbuTixHAE0s0iq1VkxHAWlM0=bwAle9QcOibWbimEBw3WKvb=lu3IND2kxHAWYWqWYRDIBFQctR6WqFgIe9QcOibWbimEBw3WKwPWOF3IahzWKwqJxRqJbuTixHAWbHmiq1dkxHAWYWqWYRDIBFQctR6WaFgLj9QcOjUEYJAXjhzWKwqJxRqJbuTixHA=lNUiqU57N9QcOibWbimEBw3WKvmXSW3IahzWKwqJxRqJbuTixHAJbHYiq1dkxHAWYWqWYRDIBFQctJeXaFgIe9QcOibWbimEBw3WKvY=OR3Ia/zWKw/=S=YXOv8kxHAWYWqWYRDIBFQcONvJmFgkSezWKwqJxRqJbuTixHAJb1xiq1dkxHAWYWqWYRDIBFQctsPEBFgIe9QcOibWbimEBw3WKwq=Sw3IahzWKwqJxRqJbuTixHAJxJPiq1VkxHAWlM0=bwAle9QcOibWbimEBw3WKwDWxM3IND2kxHAWYWqWYRDIBFQctpvEmFgLj9QcOjUEYJAXjhzWKwqJxRqJbuTixHA=Ss3IND2kxHAWYWqWYRDIBFQctWDJqFgLj9QcOjUEYJAXjhzWKwqJxRqJbuTixHA=YEbiqU57N9QcOibWbimEBw3WKv1WYs3IahzWKwqJxRqJbuTixHAXO=viq1VkxHAWlM0=bwAle9QcOibWbimEBw3WKwqWxW3IND2kxHAWYWqWYRDIBFQctjmWmFgIe9QcOibWbimEBw3WKwAEYs3Ia/zWKw/=S=YXOv8kxHAWYWqWYRDIBFQcO1DXaFgkSeY5l6b5tU48mvzWKwxJxR6JxGVkxHAWSu0=YNYIkhq=kpeFYAwkxHAW0WqXlWQIj9QcOsDEY=U=m1nza/zWKw/=S=YXOv8kxHAWYWqWYRDIBFQcO=viqU57l=e8YEDol2CIj9QcOMqWS1QEm/zWKwxWtu0Jx1gcPiU5KNq8mHzWKweWbs6WOJTkxHAWxH1EYW6ISh2Lj9QcOjUEYJAXjhzWKwqJxRqJbuTixHAXSW/iqU57l=e8YEDol2CIj9QcOuQWSuPJm/zWKwqEx16ExJgcPiU5KNq8mHzWKwDWOsDE0R27N9QcORPXS1PEbh2Lj9QcOjUEYJAXjhzWKwqJxRqJbuTixHAExNUiqU57N9QcOibWbimEBw3WKv1=tM3IahzWKwqJxRqJbuTixHAEbsQiq1dkxHAWYWqWYRDIBFQctNYWqFgLj9QcOjUEYJAXjhzWKwqJxRqJbuTixHA=lsPiqU57N9QcOibWbimEBw3WKw0Wts3Ia/zWKw/=S=YXOv8kxHAWYWqWYRDIBFQcOUvEBFgkSeY5l6b5tU48mvzWKwDW0RDEluVkxHAEtpUWO=UIkhq=kpeFYAwkxHAEOEmEON1Ij9QcOp1=SG0=a1nza/zWKw/=S=YXOv8kxHAWYWqWYRDIBFQcOMxJaFgkSeY5l6b5tU48mvzWKwDWYseJxuVkxHAWxsDExF/Lj9QcOWQXSGAJqUnFYND5kiCRj9QcOuqJSNbEBvzWKwxWSuPExsVkxHAWxG6WOvbISh2Lj9QcOjUEYJAXjhzWKwqJxRqJbuTixHAWbFAiqU57N9QcOibWbimEBw3WKwD=bs3Ia/zWKw/=S=YXOv8kxHAWYWqWYRDIBFQctpmJaFgkSezWKwqJxRqJbuTixHAWxibiq1VkxHAWlM0=bwAle9QcOibWbimEBw3WKw6JSs3IND2=3NCJPpg80ATkxHAElsPEx16Lj9QcONvXSHbJqUnFYND5kiCRj9QcONvExF6XavzWKweJS1QJ0WgXPDVkxHAWlM0=bwAle9QcOibWbimEBw3WKvUJbJ3IND2kxHAWYWqWYRDIBFQcOR/iq1dkxHAWYWqWYRDIBFQctReWBFgIq5C5BFVkxHAWlM0=bwAle9QcOibWbimEBw3WKwDJlM3IND2kxHAWYWqWYRDIBFQcOjm=mFgLj9QcOjUEYJAXjhzWKwqJxRqJbuTixHAEx5YiqU57N9QcOibWbimEBw3WKwPJbs3IahzWKwqJxRqJbuTixHA=tW0iq1dkxHAWYWqWYRDIBFQcOEUXBFgIq5q8aFVkxHAWlM0=bwAle9QcOibWbimEBw3WKwDWSR3IND2kxHAWYWqWYRDIBFQcOFQWaFgLj9QcOjUEYJAXjhzWKwqJxRqJbuTixHAEYimiqU57N9QcOibWbimEBw3WKvbJ0R3IahzWKwqJxRqJbuTixHAWYMDiq1VkxHAWlM0=bwAle9QcOibWbimEBw3WKwe=tR3IND2kxHAWYWqWYRDIBFQcO5mEmFgIe9QcOibWbimEBw3WKw0WSM3IahzWKwqJxRqJbuTixHA=Ypmiq1dkxHAWYWqWYRDIBFQcOiUWmFgIe9QcOibWbimEBw3WKwAXOM3IahzWKwqJxRqJbuTixHAXtW6iq1dkxHAWYWqWYRDIBFQctuQJaFgIe9QcOibWbimEBw3WKw6W0W3IahzWKwqJxRqJbuTixHA=bMDiq1dkxHAWYWqWYRDIBFQcOJPEmFgIe9QcOibWbimEBw3WKvYXlR3IahzWKwqJxRqJbuTixHAEbsAiq1dkxHAWYWqWYRDIBFQcO=UWBFgIe9QcOibWbimEBw3WKw6WtM3IahzWKwqJxRqJbuTixHAWSEUiq1dkxHAWYWqWYRDIBFQctRqWBFgIe9QcOibWbimEBw3WKwD=ts3IahzWKwqJxRqJbuTixHAWbMQiq1dkxHAWYWqWYRDIBFQcOJeEmFgIe9QcOibWbimEBw3WKw6Ex13IahzWKwqJxRqJbuTixHAXOW0iq1dkxHAWYWqWYRDIBFQctNYWBFgIe9QcOibWbimEBw3WKwAEx13IahzWKwqJxRqJbuTixHAXSpUiq1dkxHAWYWqWYRDIBFQctWQEaFgIe9QcOibWbimEBw3WKwAEYJ3IahzWKwqJxRqJbuTixHAJbiUiq1dkxHAWYWqWYRDIBFQcO=YEBFgIe9QcOibWbimEBw3WKwAXS13IahzWKwqJxRqJbuTixHAWSUYiq1dkxHAWYWqWYRDIBFQctsAEqFgIe9QcOibWbimEBw3WKv1XlM3IahzWKwqJxRqJbuTixHAWSRAiq1dkxHAWYWqWYRDIBFQcOJxiq1dkxHAWYWqWYRDIBFQcOJ6JaFgIe9QcOibWbimEBw3WKvm=OW3IahzWKwqJxRqJbuTixHAElJAiq1dkxHAWYWqWYRDIBFQct=bXaFgIe9QcOibWbimEBw3WKvvWxW3IahzWKwqJxRqJbuTixHAJxG/iq1dkxHAWYWqWYRDIBFQctEYWBFgIe9QcOibWbimEBw3WKvb=SM3IahzWKwqJxRqJbuTixHAJYs3IahzWKwqJxRqJbuTixHAW0jviq1dkxHAWYWqWYRDIBFQcOMq=aFgIe9QcOibWbimEBw3WKwAEYM3IahzWKwqJxRqJbuTixHAEbR0iq1dkxHAWYWqWYRDIBFQctEmWqFgIe9QcOibWbimEBw3WKw/WxF3IahzWKwqJxRqJbuTixHAE0J3IahzWKwqJxRqJbuTixHAXSNbiq1dkxHAWYWqWYRDIBFQcO=YWBFgIe9QcOibWbimEBw3WKwAWxJ3IahzWKwqJxRqJbuTixHA=lJQiq1dkxHAWYWqWYRDIBFQcOvv=aFgIe9QcOibWbimEBw3WKw/W0J3IahzWKwqJxRqJbuTixHA=tMQiq1dkxHAWYWqWYRDIBFQcOu0JaFgIe9QcOibWbimEBw3WKwD=SG3IahzWKwqJxRqJbuTixHAWbGeiq1dkxHAWYWqWYRDIBFQcOU1WmFgIe9QcOibWbimEBw3WKvUEbF3IahzWKwqJxRqJbuTixHAWxuQiq1dkxHAWYWqWYRDIBFQctRxJmFgIe9QcOibWbimEBw3WKwDEYM3IahzWKwqJxRqJbuTixHAJYRQiq1dkxHAWYWqWYRDIBFQctRQ=BFgIe9QcOibWbimEBw3WKweExR3IahzWKwqJxRqJbuTixHAElu0iq1dkxHAWYWqWYRDIBFQcOsqXBFgIe9QcOibWbimEBw3WKwxJx13IahzWKwqJxRqJbuTixHAJSsDiq1dkxHAWYWqWYRDIBFQcO16=aFgIe9QcOibWbimEBw3WKvYWlW3IahzWKwqJxRqJbuTixHAJxw/iq1dkxHAWYWqWYRDIBFQctM6=mFgIe9QcOibWbimEBw3WKvYXlJ3IahzWKwqJxRqJbuTixHAW0jmiq1dkxHAWYWqWYRDIBFQct=mEaFgIe9QcOibWbimEBw3WKw/=bJ3IahzWKwqJxRqJbuTixHAEYu6iq1dkxHAWYWqWYRDIBFQcOsxWmFgLj9QcOjUEYJAXjhzWKwqJxRqJbuTixHAJS1xiqU57N9QcOibWbimEBw3WKw0XSG3Ia/zWKw/=S=YXOv8kxHAWYWqWYRDIBFQcOimJmFgkSezWKwqJxRqJbuTixHAJxFxiq1VkxHAWlM0=bwAle9QcOibWbimEBw3WKvU=lu3IND2=3NCJPpg80ATkxHAWSvbWYM6Lj9QcOvm=SivWaUnFYND5kiCRj9QcOsAJxiUXas27N9QcOvm=SivWSh2Lj9QcOjUEYJAXjhzWKwqJxRqJbuTixHAJSwqiqU57N9QcOibWbimEBw3WKvvEbG3Ia/zWKw/=S=YXOv8kxHAWYWqWYRDIBFQcOEm=aFgkSezWKwqJxRqJbuTixHAXOvbiq1VkxHAWlM0=bwAle9QcOibWbimEBw3WKvYWOM3IND2=3NCJPpg80ATkxHAWYs/Jbs0Lj9QcOEvExGQEqUnFYND5kiCRj9QcOivWlR/EbD27N9QcOEvExGQExh2Lj9QcOjUEYJAXjhzWKwqJxRqJbuTixHAJSu/iqU57N9QcOibWbimEBw3WKw/Wts3Ia/zWKw/=S=YXOv8kxHAWYWqWYRDIBFQctNY=aFgkSezWKwqJxRqJbuTixHA=YJAiq1VkxHAWlM0=bwAle9QcOibWbimEBw3WKvmJ0s3IND2kxHAWYWqWYRDIBFQcOUvEmFgLj9QcOjUEYJAXjhzWKwqJxRqJbuTixHAEOwAiqU57N9QcOibWbimEBw3WKvbXlW3IahzWKwqJxRqJbuTixHAJSM6iq1VkxHAWlM0=bwAle9QcOibWbimEBw3WKvvXSw3IND2kxHAWYWqWYRDIBFQctimiq1VkxHAWlM0=bwAle9QcOibWbimEBw3WKwPXaFgkSezWKwqJxRqJbuTixHAES=Uiq1VkxHAWlM0=bwAle9QcOibWbimEBw3WKv1ESW3IND2=3NCJPpg80ATkxHAESFeJYpbLj9QcOp1EluxJaUnFYND5kiCRj9QcOMPEli1JxD2kxHAEtue=OEvXPDVkxHAWlM0=bwAle9QcOibWbimEBw3WKwq=bw3IND2kxHAWYWqWYRDIBFQctJQEBFgLj9QcOjUEYJAXjhzWKwqJxRqJbuTixHAXlWqiqU57l=e8YEDol2CIj9QcOMPWls0Xa/zWKwqJYMA=lRgcPiU5KNq8mHzWKweExjvEb1TkxHAWYiUXtNmISh2Lj9QcOjUEYJAXjhzWKwqJxRqJbuTixHA=SuqiqU57N9QcOibWbimEBw3WKwDEYu3Ia/zWKw/=S=YXOv8kxHAWYWqWYRDIBFQctWx=mFgkSezWKwqJxRqJbuTixHAES1xiq1VkxHAWlM0=bwAle9QcOibWbimEBw3WKw/Xls3IND2=3NCJPpg80ATkxHAXSEYJlseLj9QcOW0=YseWqUnFYND5kiCRj9QcO1x=YjvEas27N9QcOW0=YseWxh2Lj9QcOjUEYJAXjhzWKwqJxRqJbuTixHAWS5viqU57N9QcOibWbimEBw3WKw0EbM3Ia/zWKw/=S=YXOv8kxHAWYWqWYRDIBFQcOMP=mFgkSezWKwqJxRqJbuTixHAExHmiq1VkxHAWlM0=bwAle9QcOibWbimEBw3WKvmEtW3IND2kxHAWYWqWYRDIBFQctJ/JaFgLj9QcOjUEYJAXjhzWKwqJxRqJbuTixHAExJ0iqU57N9QcOibWbimEBw3WKwAWSF3IahzWKwqJxRqJbuTixHAWxJAiq1dkxHAWYWqWYRDIBFQctW/=BFgIe9QcOibWbimEBw3WKwPXlu3IahzWKwqJxRqJbuTixHAE0Nbiq1dkxHAWYWqWYRDIBFQctM0iq1dkxHAWYWqWYRDIBFQcOJqJmFgIe9QcOibWbimEBw3WKwPJxR3IahzWKwqJxRqJbuTixHAXSGqiq1dkxHAWYWqWYRDIBFQcOWQ=mFgIe9QcOibWbimEBw3WKwD=tu3IahzWKwqJxRqJbuTixHAE0RAiq1dkxHAWYWqWYRDIBFQcOs/JaFgIe9QcOibWbimEBw3WKv1ESF3IahzWKwqJxRqJbuTixHA=bG6iq1dkxHAWYWqWYRDIBFQctMeWaFgIe9QcOibWbimEBw3WKw/ESJ3IahzWKwqJxRqJbuTixHAJ0u3IahzWKwqJxRqJbuTixHAJx1eiq1dkxHAWYWqWYRDIBFQcOvU=aFgIe9QcOibWbimEBw3WKwP=Ow3IahzWKwqJxRqJbuTixHAExFQiq1dkxHAWYWqWYRDIBFQcONbWqFgIe9QcOibWbimEBw3WKwDJS13IahzWKwqJxRqJbuTixHAJx1qiq1dkxHAWYWqWYRDIBFQcO=1iq1dkxHAWYWqWYRDIBFQctu6iq1dkxHAWYWqWYRDIBFQctMqEqFgIe9QcOibWbimEBw3WKw/WxM3IahzWKwqJxRqJbuTixHA=tuxiq1dkxHAWYWqWYRDIBFQctMQEBFgIe9QcOibWbimEBw3WKwxXSw3IahzWKwqJxRqJbuTixHAEONUiq1dkxHAWYWqWYRDIBFQcONU=BFgIe9QcOibWbimEBw3WKvUJxM3IahzWKwqJxRqJbuTixHA=YMDiq1dkxHAWYWqWYRDIBFQcOuPWaFgIe9QcOibWbimEBw3WKwDXtM3Ia/zWKw/=S=YXOv8kxHAWYWqWYRDIBFQctMPEaFgkSezWKwqJxRqJbuTixHAXOsPiq1dkxHAWYWqWYRDIBFQctpbXaFgIe9QcOibWbimEBw3WKwxEOW3IahzWKwqJxRqJbuTixHAWlW3IahzWKwqJxRqJbuTixHAE0pmiq1dkxHAWYWqWYRDIBFQcOEYEBFgIe9QcOibWbimEBw3WKw/JaFgIe9QcOibWbimEBw3WKwxWbR3IahzWKwqJxRqJbuTixHAJYM/iq1dkxHAWYWqWYRDIBFQctsPEqFgIe9QcOibWbimEBw3WKv1=mFgIe9QcOibWbimEBw3WKvYEbu3IahzWKwqJxRqJbuTixHAEb5miq1dkxHAWYWqWYRDIBFQcOimWmFgIe9QcOibWbimEBw3WKw0XaFgIe9QcOibWbimEBw3WKvvEYs3IahzWKwqJxRqJbuTixHAWxjbiq1dkxHAWYWqWYRDIBFQcOsAWqFgIe9QcOibWbimEBw3WKvm=S13IahzWKwqJxRqJbuTixHAJqFgIe9QcOibWbimEBw3WKwDJlW3IahzWKwqJxRqJbuTixHAWYj1iq1dkxHAWYWqWYRDIBFQcOE1WqFgIe9QcOibWbimEBw3WKwqXSW3IahzWKwqJxRqJbuTixHAW0J/iq1dkxHAWYWqWYRDIBFQcOWP=BFgIe9QcOibWbimEBw3WKwPJYu3IahzWKwqJxRqJbuTixHAESG6iq1dkxHAWYWqWYRDIBFQctRPEBFgIe9QcOibWbimEBw3WKw6EtR3IahzWKwqJxRqJbuTixHA=OiYiq1dkxHAWYWqWYRDIBFQcO=mXBFgIe9QcOibWbimEBw3WKw0WOW3IahzWKwqJxRqJbuTixHA=YJ3IahzWKwqJxRqJbuTixHAXSN1iq1dkxHAWYWqWYRDIBFQcOJQEqFgLj9QcOjUEYJAXjhzWKwqJxRqJbuTixHAESHYiqU57N9QcOibWbimEBw3WKwAWSF3IahzWKwqJxRqJbuTixHAWxJAiq1dkxHAWYWqWYRDIBFQcOF/JqFgIe9QcOibWbimEBw3WKw0JYM3IahzWKwqJxRqJbuTixHAWS=viq1dkxHAWYWqWYRDIBFQctJQWqFgIe9QcOibWbimEBw3WKw0Wxu3IahzWKwqJxRqJbuTixHAEY=Uiq1dkxHAWYWqWYRDIBFQcORQJqFgIe9QcOibWbimEBw3WKvmE0u3IahzWKwqJxRqJbuTixHAJxR6iq1dkxHAWYWqWYRDIBFQcOJPJmFgIe9QcOibWbimEBw3WKwqJbR3IahzWKwqJxRqJbuTixHAEb13IahzWKwqJxRqJbuTixHAWSHmiq1dkxHAWYWqWYRDIBFQcOR6iq1dkxHAWYWqWYRDIBFQcORqJqFgIe9QcOibWbimEBw3WKw6JYW3IahzWKwqJxRqJbuTixHA=Yjviq1dkxHAWYWqWYRDIBFQcOu/=aFgIe9QcOibWbimEBw3WKwqWx13IahzWKwqJxRqJbuTixHAEOWqiq1dkxHAWYWqWYRDIBFQcOw6=aFgIe9QcOibWbimEBw3WKwA=OG3IahzWKwqJxRqJbuTixHAXlpmiq1dkxHAWYWqWYRDIBFQctWqiq1dkxHAWYWqWYRDIBFQctiU=BFgIe9QcOibWbimEBw3WKvbWSJ3IahzWKwqJxRqJbuTixHAWlsxiq1dkxHAWYWqWYRDIBFQcO10JaFgIe9QcOibWbimEBw3WKvYXSR3IahzWKwqJxRqJbuTixHAWSMQiq1dkxHAWYWqWYRDIBFQct=vJqFgIe9QcOibWbimEBw3WKvUJSR3IahzWKwqJxRqJbuTixHA=Ys/iq1VkxHAWlM0=bwAle9QcOibWbimEBw3WKw/=bu3IND2=3NCJPpg80ATkxHAWYpmXSHvIkhq=kpeFYAwkxHAWYpmXSHvIB1nza/zWKw/=S=YXOv8kxHAWYWqWYRDIBFQcO=YEaFgkSezWKwqJxRqJbuTixHAXlu/iq1VkxHAWlM0=bwAle9QcOibWbimEBw3WKv1WtR3IND2kxHAWYWqWYRDIBFQctjUiq1dkxHAWYWqWYRDIBFQcOFDEaFgIe9QcOibWbimEBw3WKvvESR3IahzWKwqJxRqJbuTixHAWbjYiq1dkxHAWYWqWYRDIBFQctWPJaFgLj9QcOjUEYJAXjhzWKwqJxRqJbuTixHAWls0iqU57l=e8YEDol2CIj9QcOMxESwq=a/zWKwD=SGxEYugcPiU5KNq8mHzWKweWxMAWYM27SezWKwD=SGxEYunza/zWKw/=S=YXOv8kxHAWYWqWYRDIBFQctJe=mFgkSezWKwqJxRqJbuTixHAEbsxiq1VkxHAWlM0=bwAle9QcOibWbimEBw3WKvYJlu3IND2kxHAWYWqWYRDIBFQctEvWBFgLj9QcOjUEYJAXjhzWKwqJxRqJbuTixHAXlMeiqU57N9QcOibWbimEBw3WKwPEOs3Ia/zWKw/=S=YXOv8kxHAWYWqWYRDIBFQctp1JqFgkSezWKwqJxRqJbuTixHAESGQiq1dkxHAWYWqWYRDIBFQcOuqJaFgIe9QcOibWbimEBw3WKwDWtu3IahzWKwqJxRqJbuTixHAW0Emiq1dkxHAWYWqWYRDIBFQctuA=BFgIe9QcOibWbimEBw3WKvYWYW3IahzWKwqJxRqJbuTixHAEYWAiq1dkxHAWYWqWYRDIBFQctj1WaFgIe9QcOibWbimEBw3WKw0Jlu3IahzWKwqJxRqJbuTixHAEO5viq1dkxHAWYWqWYRDIBFQctJxWqFgIe9QcOibWbimEBw3WKw6XSF3IahzWKwqJxRqJbuTixHAWbsAiq1dkxHAWYWqWYRDIBFQcOJqWmFgIe9QcOibWbimEBw3WKwPES13IahzWKwqJxRqJbuTixHAJSw3IahzWKwqJxRqJbuTixHA=bR0iq1VkxHAWlM0=bwAle9QcOibWbimEBw3WKw/XtW3IND2kxHAWYWqWYRDIBFQcOw/EqFgIe9QcOibWbimEBw3WKwxEbw3IahzWKwqJxRqJbuTixHAJxj1iq1dkxHAWYWqWYRDIBFQcOF6=BFgIe9QcOibWbimEBw3WKwP=lW3IahzWKwqJxRqJbuTixHA=SJ3IahzWKwqJxRqJbuTixHAEbimiq1dkxHAWYWqWYRDIBFQcO5bWmFgIe9QcOibWbimEBw3WKw6WOR3IahzWKwqJxRqJbuTixHAWxHYiq1dkxHAWYWqWYRDIBFQcOp1=BFgIe9QcOibWbimEBw3WKwPJbw3IahzWKwqJxRqJbuTixHAWSjviq1dkxHAWYWqWYRDIBFQctueEqFgIe9QcOibWbimEBw3WKvYWO13IahzWKwqJxRqJbuTixHA=SM/iq1dkxHAWYWqWYRDIBFQcOseEmFgIe9QcOibWbimEBw3WKvb=BFgIe9QcOibWbimEBw3WKvbXSM3IahzWKwqJxRqJbuTixHAXtNUiq1dkxHAWYWqWYRDIBFQcO51XBFgIe9QcOibWbimEBw3WKwPExG3IahzWKwqJxRqJbuTixHAElWxiq1dkxHAWYWqWYRDIBFQcOpvXaFgIe9QcOibWbimEBw3WKvbXSR3IahzWKwqJxRqJbuTixHAEYu3IahzWKwqJxRqJbuTixHA=O13IahzWKwqJxRqJbuTixHA=SRPiq1dkxHAWYWqWYRDIBFQcONUEqFgIe9QcOibWbimEBw3WKvbEOW3IahzWKwqJxRqJbuTixHAXljviq1dkxHAWYWqWYRDIBFQctE1WaFgIe9QcOibWbimEBw3WKwqJ0J3IahzWKwqJxRqJbuTixHAEljYiq1dkxHAWYWqWYRDIBFQcOMDEmFgIe9QcOibWbimEBw3WKvYXlM3IahzWKwqJxRqJbuTixHAJ0Rqiq1dkxHAWYWqWYRDIBFQcOjY=aFgIe9QcOibWbimEBw3WKvUJSR3IahzWKwqJxRqJbuTixHAEbwQiq1VkxHAWlM0=bwAle9QcOibWbimEBw3WKweEbu3IND2kxHAWYWqWYRDIBFQctjUiq1dkxHAWYWqWYRDIBFQcOFDEaFgIe9QcOibWbimEBw3WKwe=S13IahzWKwqJxRqJbuTixHAWSGPiq1VkxHAWlM0=bwAle9QcOibWbimEBw3WKwqE0R3IND2kxHAWYWqWYRDIBFQctjUiq1dkxHAWYWqWYRDIBFQcOFDEaFgIe9QcOibWbimEBw3WKwDXOW3IahzWKwqJxRqJbuTixHAESwxiq1VkxHAWlM0=bwAle9QcOibWbimEBw3WKv1XSJ3IND2kxHAWYWqWYRDIBFQcts0JqFgLj9QcOjUEYJAXjhzWKwqJxRqJbuTixHA=l=1iqU57N9QcOibWbimEBw3WKvYWSs3Ia/zWKw/=S=YXOv8kxHAWYWqWYRDIBFQcOUYWaFgkSezWKwqJxRqJbuTixHA=Yu0iq1dkxHAWYWqWYRDIBFQctuQWaFgIe9QcOibWbimEBw3WKv1ExF3IahzWKwqJxRqJbuTixHAWSs/iq1dkxHAWYWqWYRDIBFQcOR/=BFgIe9QcOibWbimEBw3WKwqEmFgIe9QcOibWbimEBw3WKwqJxM3IahzWKwqJxRqJbuTixHAWbueiq1dkxHAWYWqWYRDIBFQctsQEaFgIe9QcOibWbimEBw3WKvUXOM3IahzWKwqJxRqJbuTixHA=OwAiq1dkxHAWYWqWYRDIBFQcOwx=aFgIe9QcOibWbimEBw3WKwDJxJ3IahzWKwqJxRqJbuTixHA=YW/iq1dkxHAWYWqWYRDIBFQctu/XBFgIe9QcOibWbimEBw3WKweWxW3IahzWKwqJxRqJbuTixHAJYjviq1dkxHAWYWqWYRDIBFQcOM6WmFgIe9QcOibWbimEBw3WKvmESu3IahzWKwqJxRqJbuTixHA=bw6iq1dkxHAWYWqWYRDIBFQctWAEmFgIe9QcOibWbimEBw3WKwqEbR3IahzWKwqJxRqJbuTixHAElJ3IahzWKwqJxRqJbuTixHA=O=Yiq1dkxHAWYWqWYRDIBFQcONvEqFgIe9QcOibWbimEBw3WKwDWbu3IahzWKwqJxRqJbuTixHAEbpmiq1dkxHAWYWqWYRDIBFQcOsQWOJ3IahzWKwqJxRqJbuTixHAEOUbiq1dkxHAWYWqWYRDIBFQcO5YEqFgIe9QcOibWbimEBw3WKvvXlJ3IahzWKwqJxRqJbuTixHA=OReiq1dkxHAWYWqWYRDIBFQcOiYJaFgIe9QcOibWbimEBw3WKvYEls3IahzWKwqJxRqJbuTixHAESuQiq1dkxHAWYWqWYRDIBFQctpvJqFgIe9QcOibWbimEBw3WKw0WOw3IahzWKwqJxRqJbuTixHA=bWAiq1dkxHAWYWqWYRDIBFQctRD=BFgIe9QcOibWbimEBw3WKw/=SG3IahzWKwqJxRqJbuTixHAES1Qiq1dkxHAWYWqWYRDIBFQcOWQJaFgLj9QcOjUEYJAXjhzWKwqJxRqJbuTixHA=YJQiqU57N9QcOibWbimEBw3WKvY=OJ3IahzWKwqJxRqJbuTixHA=OG/iq1dkxHAWYWqWYRDIBFQctuPEqFgIe9QcOibWbimEBw3WKw/WSs3IahzWKwqJxRqJbuTixHAXSHviq1dkxHAWYWqWYRDIBFQctuPEqFgIe9QcOibWbimEBw3WKvYJYM3IahzWKwqJxRqJbuTixHAExuDiq1dkxHAWYWqWYRDIBFQcOMeEmFgIe9QcOibWbimEBw3WKw/EbM3IahzWKwqJxRqJbuTixHAExvYiq1dkxHAWYWqWYRDIBFQcOF6=BFgIe9QcOibWbimEBw3WKwAWSR3IahzWKwqJxRqJbuTixHAWbpmiq1dkxHAWYWqWYRDIBFQctJPJaFgIe9QcOibWbimEBw3WKvUExW3IahzWKwqJxRqJbuTixHAJls3IahzWKwqJxRqJbuTixHAEOWQiq1dkxHAWYWqWYRDIBFQcOseJaFgIe9QcOibWbimEBw3WKvYJxu3IahzWKwqJxRqJbuTixHAJxvUiq1dkxHAWYWqWYRDIBFQcOFAEqFgIe9QcOibWbimEBw3WKwD=OJ3IahzWKwqJxRqJbuTixHAJSuDiq1dkxHAWYWqWYRDIBFQctJ6=BFgIe9QcOibWbimEBw3WKwqWOJ3IahzWKwqJxRqJbuTixHAWb10iq1dkxHAWYWqWYRDIBFQctWDiq1dkxHAWYWqWYRDIBFQcOMPJqFgIe9QcOibWbimEBw3WKw0WxM3IahzWKwqJxRqJbuTixHAWxG6iq1dkxHAWYWqWYRDIBFQctW6WmFgIe9QcOibWbimEBw3WKw0=BFgIe9QcOibWbimEBw3WKv1XaFgIe9QcOibWbimEBw3WKw6=YR3IahzWKwqJxRqJbuTixHAXtEUiq1dkxHAWYWqWYRDIBFQcOueWBFgIe9QcOibWbimEBw3WKw0Jb13IahzWKwqJxRqJbuTixHA=Sueiq1dkxHAWYWqWYRDIBFQct=mJqFgIe9QcOibWbimEBw3WKw0XSs3IahzWKwqJxRqJbuTixHA=ljUiq1dkxHAWYWqWYRDIBFQctp1EqFgLj9QcOjUEYJAXjhzWKwqJxRqJbuTixHAEtuPiqU57N9QcOibWbimEBw3WKvY=OJ3IahzWKwqJxRqJbuTixHA=OG/iq1dkxHAWYWqWYRDIBFQctuPEqFgIe9QcOibWbimEBw3WKw/WSs3IahzWKwqJxRqJbuTixHAWbj1iq1dkxHAWYWqWYRDIBFQcOR0iq1dkxHAWYWqWYRDIBFQcO1eWmFgIe9QcOibWbimEBw3WKwPXlu3IahzWKwqJxRqJbuTixHAJYWqiq1dkxHAWYWqWYRDIBFQcORDJmFgIe9QcOibWbimEBw3WKvYE0s3IahzWKwqJxRqJbuTixHA=SFxiq1dkxHAWYWqWYRDIBFQctjviq1dkxHAWYWqWYRDIBFQcOuxWBFgIe9QcOibWbimEBw3WKvvW0s3IahzWKwqJxRqJbuTixHAWSjviq1dkxHAWYWqWYRDIBFQctueEqFgIe9QcOibWbimEBw3WKvYWO13IahzWKwqJxRqJbuTixHAXOFPiq1dkxHAWYWqWYRDIBFQct=UWmFgIe9QcOibWbimEBw3WKw/XOW3IahzWKwqJxRqJbuTixHAJYM6iq1dkxHAWYWqWYRDIBFQctRQWBFgIe9QcOibWbimEBw3WKvmWxF3IahzWKwqJxRqJbuTixHAEts/iq1dkxHAWYWqWYRDIBFQctueEaFgIe9QcOibWbimEBw3WKw/XS13IahzWKwqJxRqJbuTixHAWbw0iq1dkxHAWYWqWYRDIBFQcOEviq1dkxHAWYWqWYRDIBFQcOR6WmFgIe9QcOibWbimEBw3WKw/WbJ3IahzWKwqJxRqJbuTixHAJl=Uiq1dkxHAWYWqWYRDIBFQctE1=aFgIe9QcOibWbimEBw3WKweEBFgIe9QcOibWbimEBw3WKwAWbM3IahzWKwqJxRqJbuTixHA=YJ3IahzWKwqJxRqJbuTixHA=lu6iq1dkxHAWYWqWYRDIBFQcO=bWaFgIe9QcOibWbimEBw3WKvUElM3Ia/zWKw/=S=YXOv8kxHAWYWqWYRDIBFQctJqEqFgkSeY5l6b5tU48mvzWKw/JYsxExGVkxHAEOu6=b1eLj9QcOjvWlMPWqUnFYND5kiCRj9QcOjmJSWPWBvzWKwDEOUYXSMVkxHAWls/=SFxISh2Lj9QcOjUEYJAXjhzWKwqJxRqJbuTixHA=Yu6iqU57N9QcOibWbimEBw3WKwqWaFgIe9QcOibWbimEBw3WKwqEYR3Ia/zWKw/=S=YXOv8kxHAWYWqWYRDIBFQctjYWqFgkSeY5l6b5tU48mvzWKweWOJeJlWVkxHAW0NvJSMxIkhq=kpeFYAwkxHAESG0Eljb7SD2kxHAW0NvJSMxXPDVkxHAWlM0=bwAle9QcOibWbimEBw3WKwAExW3IND2kxHAWYWqWYRDIBFQcOF/WmFgLj9QcOjUEYJAXjhzWKwqJxRqJbuTixHAJYNviqU57N9QcOibWbimEBw3WKw6=b13Ia/zWKw/=S=YXOv8kxHAWYWqWYRDIBFQcOi1=BFgkSezWKwqJxRqJbuTixHAEOibiq1VkxHAWlM0=bwAle9QcOibWbimEBw3WKwqWBFgkSezWKwqJxRqJbuTixHAWqFgLj9QcOjUEYJAXjhzWKwqJxRqJbuTixHAWbEmiqU57N9QcOibWbimEBw3WKwAWSF3IahzWKwqJxRqJbuTixHAWxJAiq1dkxHAWYWqWYRDIBFQctW/=BFgIe9QcOibWbimEBw3WKwqXO13IahzWKwqJxRqJbuTixHA=lMqiq1dkxHAWYWqWYRDIBFQcOEmXaFgIe9QcOibWbimEBw3WKwD=SJ3IahzWKwqJxRqJbuTixHAEtEUiq1dkxHAWYWqWYRDIBFQcOv1EBFgIe9QcOibWbimEBw3WKw6WbJ3IahzWKwqJxRqJbuTixHAEtJDiq1dkxHAWYWqWYRDIBFQctRAJqFgIe9QcOibWbimEBw3WKvvWOM3IahzWKwqJxRqJbuTixHA=Sweiq1dkxHAWYWqWYRDIBFQctuAXBFgIe9QcOibWbimEBw3WKwAW0M3IahzWKwqJxRqJbuTixHAEtW0iq1dkxHAWYWqWYRDIBFQct=bWaFgIe9QcOibWbimEBw3WKv1JbM3IahzWKwqJxRqJbuTixHAJ0M3IahzWKwqJxRqJbuTixHAWSGQJmFgIe9QcOibWbimEBw3WKwDWqFgIe9QcOibWbimEBw3WKweESw3IahzWKwqJxRqJbuTixHA=OjUiq1dkxHAWYWqWYRDIBFQctWeXaFgIe9QcOibWbimEBw3WKw0EtM3IahzWKwqJxRqJbuTixHAXtJ3IahzWKwqJxRqJbuTixHAEtpbiq1dkxHAWYWqWYRDIBFQcO5v=mFgIe9QcOibWbimEBw3WKvYXOR3IahzWKwqJxRqJbuTixHA=Yu/iq1dkxHAWYWqWYRDIBFQcOW0JaFgIe9QcOibWbimEBw3WKw6=bW3IahzWKwqJxRqJbuTixHAWS16iq1dkxHAWYWqWYRDIBFQctMeEmFgIe9QcOibWbimEBw3WKwPWBFgLj9QcOjUEYJAXjhzWKwqJxRqJbuTixHAWbvYiqU57N9QcOibWbimEBw3WKwAWSF3IahzWKwqJxRqJbuTixHA=tW6iq1dkxHAWYWqWYRDIBFQcOWDWqFgIe9QcOibWbimEBw3WKw/JSM3IahzWKwqJxRqJbuTixHAESu0iq1dkxHAWYWqWYRDIBFQcOUYEmFgIe9QcOibWbimEBw3WKwPJSG3IahzWKwqJxRqJbuTixHAE0pbiq1dkxHAWYWqWYRDIBFQcO5YWmFgIe9QcOibWbimEBw3WKvvElu3IahzWKwqJxRqJbuTixHAJxW/iq1dkxHAWYWqWYRDIBFQcO=vJqFgIe9QcOibWbimEBw3WKvUJSJ3IahzWKwqJxRqJbuTixHAXtM3IahzWKwqJxRqJbuTixHAWxJ6iq1dkxHAWYWqWYRDIBFQcti1XBFgIe9QcOibWbimEBw3WKvb=O13IahzWKwqJxRqJbuTixHAXSEYiq1dkxHAWYWqWYRDIBFQctim=BFgIe9QcOibWbimEBw3WKvvEbF3IahzWKwqJxRqJbuTixHAEOi1iq1dkxHAWYWqWYRDIBFQcOjb=mFgIe9QcOibWbimEBw3WKwxEbG3IahzWKwqJxRqJbuTixHAESs/iq1dkxHAWYWqWYRDIBFQctW0EaFgIe9QcOibWbimEBw3WKvbWOw3IahzWKwqJxRqJbuTixHAESpmiq1dkxHAWYWqWYRDIBFQct=1=aFgIe9QcOibWbimEBw3WKwAJqFgIe9QcOibWbimEBw3WKweWb13IahzWKwqJxRqJbuTixHAXliUiq1dkxHAWYWqWYRDIBFQcOsPWqFgIe9QcOibWbimEBw3WKvmWlR3IahzWKwqJxRqJbuTixHA=bFAiq1dkxHAWYWqWYRDIBFQctR/WBFgLj9QcOjUEYJAXjhzWKwqJxRqJbuTixHA=OpbiqU57N9QcOibWbimEBw3WKwAWSF3IahzWKwqJxRqJbuTixHAWxJAiq1dkxHAWYWqWYRDIBFQctN1WaFgIe9QcOibWbimEBw3WKwqEYW3IahzWKwqJxRqJbuTixHAE0uDiq1dkxHAWYWqWYRDIBFQctuqWBFgIe9QcOibWbimEBw3WKv1EbW3IahzWKwqJxRqJbuTixHAEbGqiq1dkxHAWYWqWYRDIBFQcOUY=mFgIe9QcOibWbimEBw3WKwxXSF3IahzWKwqJxRqJbuTixHAXSjbiq1dkxHAWYWqWYRDIBFQcOF6=BFgIe9QcOibWbimEBw3WKvmJxR3IahzWKwqJxRqJbuTixHAWbpmiq1dkxHAWYWqWYRDIBFQctJPJaFgIe9QcOibWbimEBw3WKvUExW3IahzWKwqJxRqJbuTixHAJls3IahzWKwqJxRqJbuTixHAWSj1iq1dkxHAWYWqWYRDIBFQcOp1=aFgIe9QcOibWbimEBw3WKwDWYu3IahzWKwqJxRqJbuTixHAWlEYiq1dkxHAWYWqWYRDIBFQcOW0WBFgIe9QcOibWbimEBw3WKvbEls3IahzWKwqJxRqJbuTixHAJSWeiq1dkxHAWYWqWYRDIBFQcts6WmFgIe9QcOibWbimEBw3WKwxJbR3IahzWKwqJxRqJbuTixHAEtimiq1dkxHAWYWqWYRDIBFQctNvXBFgIe9QcOibWbimEBw3WKw6EaFgIe9QcOibWbimEBw3WKw6Ebu3IahzWKwqJxRqJbuTixHA=SR6iq1dkxHAWYWqWYRDIBFQcO5bJaFgIe9QcOibWbimEBw3WKweXtR3Ia/zWKw/=S=YXOv8kxHAWYWqWYRDIBFQcOpUEBFgkSeY5l6b5tU48mvzWKw/Wb5YEYsgcPiU5KNq8mHzWKw/Wb5YEYsTISh2Lj9QcOjUEYJAXjhzWKwqJxRqJbuTixHA=bw0iqU57l=e8YEDol2CIj9QcOvmXOpbWa/zWKwDXl=UXlJVkxHAEONmJSwqIkhq=kpeFYAwkxHAXtRAEtW/Ij9QcOu6=YM6=m/zWKwDElivXORgXPDVkxHAWlM0=bwAle9QcOibWbimEBw3WKwqESM3IND2=3NCJPpg80ATkxHAW0uAJbEbLj9QcOM/WYivWmUnFYND5kiCRj9QcOE1XtRxJqs27N9QcOM/WYivWbh2Lj9QcOjUEYJAXjhzWKwqJxRqJbuTixHAEYsPiqU57N9QcOibWbimEBw3WKweJx13Ia/zWKw/=S=YXOv8kxHAWYWqWYRDIBFQcOE1WmFgkSeY5l6b5tU48mvzWKwxESG/W0RVkxHAWbFeJljvIkhq=kpeFYAwkxHAWxMQWSEmIe9QcORPEljvJSh2Lj9QcOjUEYJAXjhzWKwqJxRqJbuTixHAXtE1iqU57N9QcOibWbimEBw3WKwAWSF3IahzWKwqJxRqJbuTixHAWxJAiq1dkxHAWYWqWYRDIBFQctW/=BFgIe9QcOibWbimEBw3WKwAEbw3IahzWKwqJxRqJbuTixHAJbJ/iq1dkxHAWYWqWYRDIBFQctM/WqFgIe9QcOibWbimEBw3WKwxXSW3IahzWKwqJxRqJbuTixHAWbuQiq1dkxHAWYWqWYRDIBFQctueJqFgIe9QcOibWbimEBw3WKwDXtJ3IahzWKwqJxRqJbuTixHAExuAiq1dkxHAWYWqWYRDIBFQctp1EBFgIe9QcOibWbimEBw3WKv1Jb13IahzWKwqJxRqJbuTixHA=Oj1iq1dkxHAWYWqWYRDIBFQcO=m=aFgIe9QcOibWbimEBw3WKvvXOW3IahzWKwqJxRqJbuTixHAWbpmiq1dkxHAWYWqWYRDIBFQctJPJaFgIe9QcOibWbimEBw3WKvUExW3IahzWKwqJxRqJbuTixHAJls3IahzWKwqJxRqJbuTixHAWSj1iq1dkxHAWYWqWYRDIBFQctjm=aFgIe9QcOibWbimEBw3WKvmJbu3IahzWKwqJxRqJbuTixHAXtMDiq1dkxHAWYWqWYRDIBFQctuqEqFgIe9QcOibWbimEBw3WKvmEbR3IahzWKwqJxRqJbuTixHAEbs0iq1dkxHAWYWqWYRDIBFQcOEbJqFgIe9QcOibWbimEBw3WKvvXSR3IahzWKwqJxRqJbuTixHAW0Rqiq1dkxHAWYWqWYRDIBFQctWAXBFgIe9QcOibWbimEBw3WKwA=YM3IahzWKwqJxRqJbuTixHAXtJeiq1dkxHAWYWqWYRDIBFQcO5v=mFgIe9QcOibWbimEBw3WKwPWOJ3IahzWKwqJxRqJbuTixHA=OFDiq1dkxHAWYWqWYRDIBFQcts6=aFgLj9QcOjUEYJAXjhzWKwqJxRqJbuTixHAWxvUiqU57N9QcOibWbimEBw3WKwAWSF3IahzWKwqJxRqJbuTixHA=tW6iq1dkxHAWYWqWYRDIBFQcOWDWqFgIe9QcOibWbimEBw3WKwA=OG3IahzWKwqJxRqJbuTixHAXtimiq1dkxHAWYWqWYRDIBFQcOiYJqFgIe9QcOibWbimEBw3WKwAExM3IahzWKwqJxRqJbuTixHAWlJeiq1dkxHAWYWqWYRDIBFQctJ0JaFgIe9QcOibWbimEBw3WKwP=Yu3IahzWKwqJxRqJbuTixHAXOsAiq1dkxHAWYWqWYRDIBFQctuxWmFgIe9QcOibWbimEBw3WKw0Jbu3IahzWKwqJxRqJbuTixHA=OJAiq1dkxHAWYWqWYRDIBFQcOWeEmFgIe9QcOibWbimEBw3WKwDJqFgIe9QcOibWbimEBw3WKw/E0u3IahzWKwqJxRqJbuTixHAJxJ/iq1dkxHAWYWqWYRDIBFQcOF6WmFgIe9QcOibWbimEBw3WKwPWxu3IahzWKwqJxRqJbuTixHAXS1xiq1dkxHAWYWqWYRDIBFQctRD=mFgIe9QcOibWbimEBw3WKwqJxR3IahzWKwqJxRqJbuTixHAES1qiq1dkxHAWYWqWYRDIBFQctReEBFgIe9QcOibWbimEBw3WKvYXO13IahzWKwqJxRqJbuTixHA=bimiq1dkxHAWYWqWYRDIBFQcOR0WmFgIe9QcOibWbimEBw3WKwe=mFgIe9QcOibWbimEBw3WKv1EYJ3IahzWKwqJxRqJbuTixHAEbu0iq1dkxHAWYWqWYRDIBFQctWqEmFgIe9QcOibWbimEBw3WKvYXOR3IahzWKwqJxRqJbuTixHAEbHUiq1dkxHAWYWqWYRDIBFQctW6WmFgIe9QcOibWbimEBw3WKw0=BFgIe9QcOibWbimEBw3WKweWxs3IaV3kKwqWbA3Lj9QcOjUEYJAXjhzWKwqJxRqJbuTixHAWxs/iqU57N9QcOibWbimEBw3WKwAWSF3IahzWKwqJxRqJbuTixHAWxJAiq1dkxHAWYWqWYRDIBFQctN1WaFgIe9QcOibWbimEBw3WKvbWbR3IahzWKwqJxRqJbuTixHAW0jbiq1dkxHAWYWqWYRDIBFQcOEbWBFgIe9QcOibWbimEBw3WKwD=OM3IahzWKwqJxRqJbuTixHA=Y=miq1dkxHAWYWqWYRDIBFQcO1/WBFgIe9QcOibWbimEBw3WKvmE0W3IahzWKwqJxRqJbuTixHAExEUiq1dkxHAWYWqWYRDIBFQcONYWBFgIe9QcOibWbimEBw3WKw/XSu3IahzWKwqJxRqJbuTixHAWSJ3IahzWKwqJxRqJbuTixHAEtW/iq1dkxHAWYWqWYRDIBFQcOsPEqFgIe9QcOibWbimEBw3WKvY=tW3IahzWKwqJxRqJbuTixHAXSMeiq1dkxHAWYWqWYRDIBFQctWeWBFgIe9QcOibWbimEBw3WKw0EOM3IahzWKwqJxRqJbuTixHAExsPiq1dkxHAWYWqWYRDIBFQcts6EmFgIe9QcOibWbimEBw3WKweXSR3IahzWKwqJxRqJbuTixHAJbMDiq1dkxHAWYWqWYRDIBFQctJAXaFgIe9QcOibWbimEBw3WKweWbF3IahzWKwqJxRqJbuTixHAJ0u3IahzWKwqJxRqJbuTixHAJx1eiq1dkxHAWYWqWYRDIBFQcOvU=aFgIe9QcOibWbimEBw3WKw/WYM3IahzWKwqJxRqJbuTixHA=S1Piq1dkxHAWYWqWYRDIBFQcOJeJaFgIe9QcOibWbimEBw3WKwxXts3IahzWKwqJxRqJbuTixHA=YJ6iq1dkxHAWYWqWYRDIBFQctjbWmFgLj9QcOjUEYJAXjhzWKwqJxRqJbuTixHA=YNUiqU57N9QcOibWbimEBw3WKvmWlM3Ia/zWKw/=S=YXOv8kxHAWYWqWYRDIBFQcOs6EmFgkSezWKwqJxRqJbuTixHAWY=miq1VkxHAWlM0=bwAle9QcOibWbimEBw3WKwxXOF3IND2=3NCJPpg80ATkxHAEOuA=YNYLj9QcOWxWSibJqUnFYND5kiCRj9QcOuDXt=U=ms27N9QcOWxWSibJxh2Lj9QcOjUEYJAXjhzWKwqJxRqJbuTixHAWSsPiqU57N9QcOibWbimEBw3WKw0W0u3Ia/zWKw/=S=YXOv8kxHAWYWqWYRDIBFQctEm=BFgkSeY5l6b5tU48mvzWKwqXOJeES1gcPiU5KNq8mHzWKwqXOJeES1TISh2Lj9QcOjUEYJAXjhzWKwqJxRqJbuTixHAJxiUiqU57l=e8YEDol2CIj9QctsqE0RxWB/zWKwqJYuQEtsVkxHAEt=vXSJQIkhq=kpeFYAwkxHAJSRPJbWQIj9QcOim=OGDJa/zWKwD=Ys6EbGgXPDVkxHAWlM0=bwAle9QcOibWbimEBw3WKvm=Sw3IND2kxHAWYWqWYRDIBFQcORDJqFgLj9QcOjUEYJAXjhzWKwqJxRqJbuTixHAXSvbiqU57N9QcOibWbimEBw3WKw6WBFgLj9QcOjUEYJAXjhzWKwqJxRqJbuTixHA=SvbiqU57N9QcOibWbimEBw3WKw6WSF3IaV3oaFVkxHAWlM0=bwAle9QcOibWbimEBw3WKwqWOu3IND2kxHAWYWqWYRDIBFQcOwPJqFgLj9QcOjUEYJAXjhzWKwqJxRqJbuTixHAJbHviqU57N9QcOibWbimEBw3WKwDJ0s3IahzWKwqJxRqJbuTixHA=YuQiq1dkxHAWYWqWYRDIBFQctJAWaFgIe9QcOibWbimEBw3WKwAEb13IahzWKwqJxRqJbuTixHAJ0Eviq1dkxHAWYWqWYRDIBFQcORPEqFgIe9QcOibWbimEBw3WKwAElu3IahzWKwqJxRqJbuTixHAWb=Uiq1dkxHAWYWqWYRDIBFQcOJQJmFgIe9QcOibWbimEBw3WKvUElJ3IahzWKwqJxRqJbuTixHAEOR0iq1dkxHAWYWqWYRDIBFQcOvv=mFgIe9QcOibWbimEBw3WKw0EmFgIe9QcOibWbimEBw3WKwPWYW3IahzWKwqJxRqJbuTixHAJYu0iq1dkxHAWYWqWYRDIBFQctJ6EqFgIe9QcOibWbimEBw3WKw0Xlu3IahzWKwqJxRqJbuTixHA=SuDiq1dkxHAWYWqWYRDIBFQctM6=BFgIe9QcOibWbimEBw3WKweJSs3IahzWKwqJxRqJbuTixHAWS1qiq1dkxHAWYWqWYRDIBFQcOibXaFgIe9QcOibWbimEBw3WKw/WxJ3IahzWKwqJxRqJbuTixHAW0Nbiq1dkxHAWYWqWYRDIBFQctR6=mFgIe9QcOibWbimEBw3WKw6WtR3IahzWKwqJxRqJbuTixHA=bwPiq1dkxHAWYWqWYRDIBFQctEYJmFgIe9QcOibWbimEBw3WKvY=OJ3IahzWKwqJxRqJbuTixHA=bRAiq1dkxHAWYWqWYRDIBFQcO5mJqFgIe9QcOibWbimEBw3WKw6WlJ3IahzWKwqJxRqJbuTixHAWSvUiq1dkxHAWYWqWYRDIBFQctReEmFgIe9QcOibWbimEBw3WKv1=SR3IahzWKwqJxRqJbuTixHAW0M/iq1dkxHAWYWqWYRDIBFQcOR3IahzWKwqJxRqJbuTixHAEbjviq1dkxHAWYWqWYRDIBFQctuPJmFgIe9QcOibWbimEBw3WKvUE0u3IahzWKwqJxRqJbuTixHA=SM6iq1dkxHAWYWqWYRDIBFQcOWxJqFgIe9QcOibWbimEBw3WKwDJSJ3IahzWKwqJxRqJbuTixHA=Ssqiq1dkxHAWYWqWYRDIBFQcOpYXBFgIe9QcOibWbimEBw3WKw/XS13IahzWKwqJxRqJbuTixHA=tM6iq1dkxHAWYWqWYRDIBFQct=UEaFgIe9QcOibWbimEBw3WKwqJYW3IahzWKwqJxRqJbuTixHA=OReiq1dkxHAWYWqWYRDIBFQcOWq=aFgIe9QcOibWbimEBw3WKwPWOu3IahzWKwqJxRqJbuTixHAE0sDiq1dkxHAWYWqWYRDIBFQcOuxEmFgIe9QcOibWbimEBw3WKvUWxu3IahzWKwqJxRqJbuTixHAWSRPiq1dkxHAWYWqWYRDIBFQcOuxEmFgIe9QcOibWbimEBw3WKwA=YJ3IahzWKwqJxRqJbuTixHAESGDiq1dkxHAWYWqWYRDIBFQcOpvWBFgIe9QcOibWbimEBw3WKvvWOR3IahzWKwqJxRqJbuTixHAJSiYiq1dkxHAWYWqWYRDIBFQcOsDWBFgIe9QcOibWbimEBw3WKwqXSs3IahzWKwqJxRqJbuTixHAJYJPiq1dkxHAWYWqWYRDIBFQcO=1WBFgIe9QcOibWbimEBw3WKv1XlJ3IahzWKwqJxRqJbuTixHAEOEUiq1dkxHAWYWqWYRDIBFQctR/=mFgIe9QcOibWbimEBw3WKweJxw3IahzWKwqJxRqJbuTixHAJxpYiq1dkxHAWYWqWYRDIBFQcOReJmFgIe9QcOibWbimEBw3WKwxWlJ3IahzWKwqJxRqJbuTixHAJ0Eviq1dkxHAWYWqWYRDIBFQcO1xXBFgIe9QcOibWbimEBw3WKwA=O13IahzWKwqJxRqJbuTixHA=O=1iq1dkxHAWYWqWYRDIBFQcOuPWmFgIe9QcOibWbimEBw3WKwqWSM3IahzWKwqJxRqJbuTixHA=bHviq1dkxHAWYWqWYRDIBFQctWqEBFgIe9QcOibWbimEBw3WKvUWlu3IahzWKwqJxRqJbuTixHA=biUiq1dkxHAWYWqWYRDIBFQcOW6=BFgIe9QcOibWbimEBw3WKwAWOu3IahzWKwqJxRqJbuTixHA=Yimiq1dkxHAWYWqWYRDIBFQcOueJaFgIe9QcOibWbimEBw3WKwxJSM3IahzWKwqJxRqJbuTixHA=ti1iq1dkxHAWYWqWYRDIBFQctsPEqFgIe9QcOibWbimEBw3WKv1=mFgIe9QcOibWbimEBw3WKvbJlM3IahzWKwqJxRqJbuTixHA=tW6iq1dkxHAWYWqWYRDIBFQcOWDWqFgIe9QcOibWbimEBw3WKw0WxM3IahzWKwqJxRqJbuTixHA=YWxiq1dkxHAWYWqWYRDIBFQcts6EBFgIe9QcOibWbimEBw3WKwx=tu3IahzWKwqJxRqJbuTixHAJYRxiq1dkxHAWYWqWYRDIBFQcOwAEqFgIqvzWKwqJxRqJbuTixHA=Ssqiq1dkxHAWYWqWYRDIBFQcOpYXBFgIe9QcOibWbimEBw3WKw/XS13IahzWKwqJxRqJbuTixHA=tM6iq1dkxHAWYWqWYRDIBFQct=UEaFgIe9QcOibWbimEBw3WKwqWYs3IahzWKwqJxRqJbuTixHAJSMQiq1dkxHAWYWqWYRDIBFQcOJeEaFgIe9QcOibWbimEBw3WKv1Jb13IahzWKwqJxRqJbuTixHAW0=Yiq1dkxHAWYWqWYRDIBFQcOFQ=mFgIe9QcOibWbimEBw3WKwx=OF3IahzWKwqJxRqJbuTixHAElJPiq1dkxHAWYWqWYRDIBFQcOpvWBFgIe9QcOibWbimEBw3WKvvWOR3IahzWKwqJxRqJbuTixHA=YsAiq1dkxHAWYWqWYRDIBFQct=1WBFgIe9QcOibWbimEBw3WKv1ESR3IahzWKwqJxRqJbuTixHA=OUYiq1dkxHAWYWqWYRDIBFQcOWD=mFgIe9QcOibWbimEBw3WKwPWtu3IahzWKwqJxRqJbuTixHAJxsxiq1dkxHAWYWqWYRDIBFQcOwAEmFgIe9QcOibWbimEBw3WKwq=lu3IahzWKwqJxRqJbuTixHAJSsPiq1dkxHAWYWqWYRDIBFQcO=bEBFgIe9QcOibWbimEBw3WKvvJxW3IahzWKwqJxRqJbuTixHA=lJ/iq1dkxHAWYWqWYRDIBFQctEvJmFgIe9QcOibWbimEBw3WKwx=bR3IahzWKwqJxRqJbuTixHAEbU1iq1dkxHAWYWqWYRDIBFQcOR6JaFgIe9QcOibWbimEBw3WKvvE0W3IahzWKwqJxRqJbuTixHAESWQiq1dkxHAWYWqWYRDIBFQcOM/EBFgIe9QcOibWbimEBw3WKvbEOF3IahzWKwqJxRqJbuTixHAEbvYiq1dkxHAWYWqWYRDIBFQctWQJmFgIe9QcOibWbimEBw3WKvv=OG3IahzWKwqJxRqJbuTixHAEbG/iq1dkxHAWYWqWYRDIBFQcORQWBFgIe9QcOibWbimEBw3WKw6EbF3IahzWKwqJxRqJbuTixHAE0sDiq1dkxHAWYWqWYRDIBFQcOR/=BFgIe9QcOibWbimEBw3WKwqEaFgIe9QcOibWbimEBw3WKvbWlJ3IahzWKwqJxRqJbuTixHAJx5Yiq1dkxHAWYWqWYRDIBFQctMxEqFgIe9QcOibWbimEBw3WKvmWYR3IahzWKwqJxRqJbuTixHAJYu3IahzWKwqJxRqJbuTixHA=S51iq1dkxHAWYWqWYRDIBFQctMeXaFgIe9QcOibWbimEBw3WKvbWxG3IahzWKwqJxRqJbuTixHA=SGeiq1dkxHAWYWqWYRDIBFQctuQ=BFgIe9QcOibWbimEBw3WKwDWxR3IahzWKwqJxRqJbuTixHAXOUUiq1dkxHAWYWqWYRDIBFQct=U=BFgIe9QcOibWbimEBw3WKwxXBFgIe9QcOibWbimEBw3WKvvJ0M3IahzWKwqJxRqJbuTixHA=OWAiq1dkxHAWYWqWYRDIBFQcO1xiq1dkxHAWYWqWYRDIBFQcOs6EBFgIe9QcOibWbimEBw3WKvv=Yu3IahzWKwqJxRqJbuTixHA=bFPiq1dkxHAWYWqWYRDIBFQcOwq=BFgIe9QcOibWbimEBw3WKw/WSM3IahzWKwqJxRqJbuTixHAEO=miq1dkxHAWYWqWYRDIBFQcORAiq1dkxHAWYWqWYRDIBFQctMqWqFgIe9QcOibWbimEBw3WKvbEtR3IahzWKwqJxRqJbuTixHA=YRDiq1dkxHAWYWqWYRDIBFQcOMe=mFgIe9QcOibWbimEBw3WKwxElR3IahzWKwqJxRqJbuTixHA=b=biq1dkxHAWYWqWYRDIBFQctR6=aFgIe9QcOibWbimEBw3WKw0W0s3IahzWKwqJxRqJbuTixHAWSp1iq1dkxHAWYWqWYRDIBFQcOM6XaFgIe9QcOibWbimEBw3WKwPJmFgIe9QcOibWbimEBw3WKvUJSu3IahzWKwqJxRqJbuTixHAJbEYiq1dkxHAWYWqWYRDIBFQcOse=BFgIe9QcOibWbimEBw3WKwq=YW3IahzWKwqJxRqJbuTixHAJbN1iq1dkxHAWYWqWYRDIBFQctiY=aFgIe9QcOibWbimEBw3WKw6WSR3IahzWKwqJxRqJbuTixHAExw6iq1dkxHAWYWqWYRDIBFQcOpvEqFgIe9QcOibWbimEBw3WKwAEOJ3IahzWKwqJxRqJbuTixHA=SGqiq1dkxHAWYWqWYRDIBFQcti1WmFgIe9QcOibWbimEBw3WKw6WYR3IahzWKwqJxRqJbuTixHAEYM3IahzWKwqJxRqJbuTixHAWl=1iq1dkxHAWYWqWYRDIBFQctpv=mFgIe9QcOibWbimEBw3WKvbJxW3IahzWKwqJxRqJbuTixHAEx1/iq1dkxHAWYWqWYRDIBFQcOuDXBFgIe9QcOibWbimEBw3WKw6ExF3Ia1dIj9QcOibWbimEBw3WKwe=tJ3IahzWKwqJxRqJbuTixHA=Ou6iq1dkxHAWYWqWYRDIBFQcOJDWqFgIe9QcOibWbimEBw3WKwqWYR3IahzWKwqJxRqJbuTixHAW0=viq1dkxHAWYWqWYRDIBFQctM0WqFgIe9QcOibWbimEBw3WKv1ESu3IahzWKwqJxRqJbuTixHAEbGeiq1dkxHAWYWqWYRDIBFQcOJ6EBFgIe9QcOibWbimEBw3WKw/JlW3IahzWKwqJxRqJbuTixHA=bUbiq1dkxHAWYWqWYRDIBFQcOuQEqFgIe9QcOibWbimEBw3WKvvEbw3IahzWKwqJxRqJbuTixHAEtM/iq1dkxHAWYWqWYRDIBFQctN1=mFgIa/zWKw/=S=YXOv8kxHAWYWqWYRDIBFQctRQXBFgkSeY5l6b5tU48mvzWKwx=YWeEO1VkxHAEOWAJ0seLj9QcONmE0uQXaUnFYND5kiCRj9QcOEYJxMDXavzWKwDWxvbJSMVkxHAElRP=OG6ISh2Lj9QcOjUEYJAXjhzWKwqJxRqJbuTixHAWbi1iqU57N9QcOibWbimEBw3WKw0XOu3Ia/zWKw/=S=YXOv8kxHAWYWqWYRDIBFQcOWAXBFgkSezWKwqJxRqJbuTixHAEbvUiq1VkxHAWlM0=bwAle9QcOibWbimEBw3WKweWOF3IND2=3NCJPpg80ATkxHAW0NvExv1Lj9QcONbESFqJqUnFYND5kiCRj9QcOEUJSFA=Bs27N9QcONbESFqJxh2Lj9QcOjUEYJAXjhzWKwqJxRqJbuTixHAEYsDiqU57N9QcOibWbimEBw3WKwPWOG3Ia/zWKw/=S=YXOv8kxHAWYWqWYRDIBFQcOM0=mFgkSezWKwqJxRqJbuTixHAExEmiq1VkxHAWlM0=bwAle9QcOibWbimEBw3WKvm=O13IND2kxHAWYWqWYRDIBFQctMeXBFgIe9QcOibWbimEBw3WKvb=mFgIe9QcOibWbimEBw3WKw0J0W3IahzWKwqJxRqJbuTixHAElpUiq1dkxHAWYWqWYRDIBFQctJAXBFgIe9QcOibWbimEBw3WKw6XO13IahzWKwqJxRqJbuTixHAEbNmiq1dkxHAWYWqWYRDIBFQctE1=mFgIe9QcOibWbimEBw3WKvmJSR3IahzWKwqJxRqJbuTixHAEtsqiq1dkxHAWYWqWYRDIBFQcOMe=BFgIe9QcOibWbimEBw3WKvbXSG3IahzWKwqJxRqJbuTixHAEbiYiq1dkxHAWYWqWYRDIBFQcONbJaFgIe9QcOibWbimEBw3WKw6WYJ3IahzWKwqJxRqJbuTixHAElEUiq1dkxHAWYWqWYRDIBFQct=YWqFgIe9QcOibWbimEBw3WKwxXOJ3IahzWKwqJxRqJbuTixHAXOiYiq1dkxHAWYWqWYRDIBFQctWA=mFgIe9QcOibWbimEBw3WKwxXOR3IahzWKwqJxRqJbuTixHAWli1iq1dkxHAWYWqWYRDIBFQcO1qWaFgIe9QcOibWbimEBw3WKwqEtM3IahzWKwqJxRqJbuTixHAE0Nviq1dkxHAWYWqWYRDIBFQcONbJaFgIe9QcOibWbimEBw3WKw6WYJ3IahzWKwqJxRqJbuTixHAElEUiq1dkxHAWYWqWYRDIBFQct=YWqFgIe9QcOibWbimEBw3WKwxXOJ3IahzWKwqJxRqJbuTixHA=OE1iq1dkxHAWYWqWYRDIBFQcOUbEqFgIe9QcOibWbimEBw3WKw6ESw3IahzWKwqJxRqJbuTixHAEYuxiq1dkxHAWYWqWYRDIBFQcOR6WBFgIe9QcOibWbimEBw3WKv1=bG3IahzWKwqJxRqJbuTixHAWbpUiq1dkxHAWYWqWYRDIBFQctiUEaFgIe9QcOibWbimEBw3WKwxWYu3IahzWKwqJxRqJbuTixHA=ljviq1dkxHAWYWqWYRDIBFQcOwD=BFgIe9QcOibWbimEBw3WKvUWtu3IahzWKwqJxRqJbuTixHAEOiUiq1dkxHAWYWqWYRDIBFQcO1PEaFgIe9QcOibWbimEBw3WKvbXtR3IahzWKwqJxRqJbuTixHAXOF3IahzWKwqJxRqJbuTixHA=ORAiq1dkxHAWYWqWYRDIBFQcOUbWqFgIe9QcOibWbimEBw3WKwxJS13IahzWKwqJxRqJbuTixHAES10iq1dkxHAWYWqWYRDIBFQcOMAWmFgIe9QcOibWbimEBw3WKwPXSF3IahzWKwqJxRqJbuTixHAWSs0iq1dkxHAWYWqWYRDIBFQcOsPEBFgIe9QcOibWbimEBw3WKv1Ebs3IahzWKwqJxRqJbuTixHA=luAiq1dkxHAWYWqWYRDIBFQcOWA=mFgIe9QcOibWbimEBw3WKwqJSF3IahzWKwqJxRqJbuTixHAEbF/iq1dkxHAWYWqWYRDIBFQcOs/EBFgIe9QcOibWbimEBw3WKwxE0R3IahzWKwqJxRqJbuTixHAWxuqiq1dkxHAWYWqWYRDIBFQcOsDiq1dkxHAWYWqWYRDIBFQcOueWBFgIe9QcOibWbimEBw3WKvbXS13IahzWKwqJxRqJbuTixHA=Ojmiq1dkxHAWYWqWYRDIBFQcO=UJqFgIe9QcOibWbimEBw3WKvbEbG3IahzWKwqJxRqJbuTixHAWlEviq1dkxHAWYWqWYRDIBFQctMPiq1dkxHAWYWqWYRDIBFQcOM0EmFgIe9QcOibWbimEBw3WKwq=OR3IahzWKwqJxRqJbuTixHAJxwxiq1dkxHAWYWqWYRDIBFQcOWDEqFgIe9QcOibWbimEBw3WKwAWSW3IahzWKwqJxRqJbuTixHAEtW6iq1dkxHAWYWqWYRDIBFQctsDXaFgIe9QcOibWbimEBw3WKw6EbM3IahzWKwqJxRqJbuTixHAWS=miq1dkxHAWYWqWYRDIBFQcO51WBFgIe9QcOibWbimEBw3WKwxXOu3IahzWKwqJxRqJbuTixHAWb=Yiq1dkxHAWYWqWYRDIBFQcOjvXBFgIe9QcOibWbimEBw3WKweWbM3IahzWKwqJxRqJbuTixHAXSRDiq1dkxHAWYWqWYRDIBFQcOW/XBFgIe9QcOibWbimEBw3WKvbJxJ3IahzWKwqJxRqJbuTixHAJlJ0iq1dkxHAWYWqWYRDIBFQctjmiq1dkxHAWYWqWYRDIBFQcOjbEBFgIe9QcOibWbimEBw3WKwqJSF3IahzWKwqJxRqJbuTixHAWYjYiq1dkxHAWYWqWYRDIBFQctMq=mFgIe9QcOibWbimEBw3WKvU=YR3IahzWKwqJxRqJbuTixHAJSuxiq1dkxHAWYWqWYRDIBFQcOMqEaFgIe9QcOibWbimEBw3WKv1WYW3IahzWKwqJxRqJbuTixHA=lsxiq1dkxHAWYWqWYRDIBFQcOJ/EBFgIe9QcOibWbimEBw3WKvmWSw3IaVTkxHAWYWqWYRDIBFQctN1EaFgIe9QcOibWbimEBw3WKwAEqFgIe9QcOibWbimEBw3WKwPWaFgIe9QcOibWbimEBw3WKw6Eb13IahzWKwqJxRqJbuTixHAXOWQiq1dkxHAWYWqWYRDIBFQcOF6EmFgIe9QcOibWbimEBw3WKvYJb13IahzWKwqJxRqJbuTixHAXluQiq1dkxHAWYWqWYRDIBFQcOU1iq1dkxHAWYWqWYRDIBFQcts0=aFgIe9QcOibWbimEBw3WKwAWOs3IahzWKwqJxRqJbuTixHA=OFqiq1dkxHAWYWqWYRDIBFQcOMqiq1dkxHAWYWqWYRDIBFQcOjU=mFgIe9QcOibWbimEBw3WKwqJS13IahzWKwqJxRqJbuTixHA=YWqiq1dkxHAWYWqWYRDIBFQcOF0JqFgIe9QcOibWbimEBw3WKw6W0u3IahzWKwqJxRqJbuTixHAXSwDiq1dkxHAWYWqWYRDIBFQcOMqEaFgIe9QcOibWbimEBw3WKw6Els3IahzWKwqJxRqJbuTixHA=YEYiq1dkxHAWYWqWYRDIBFQcONYJmFgIe9QcOibWbimEBw3WKwAJls3IahzWKwqJxRqJbuTixHA=lMPiq1dkxHAWYWqWYRDIBFQctpmWqFgIe9QcOibWbimEBw3WKvb=bW3IahzWKwqJxRqJbuTixHAXSFxiq1dkxHAWYWqWYRDIBFQctJ6EaFgIe9QcOibWbimEBw3WKvUJaFgIe9QcOibWbimEBw3WKwAJSw3IahzWKwqJxRqJbuTixHA=YJPiq1dkxHAWYWqWYRDIBFQct=1=BFgIe9QcOibWbimEBw3WKvbJbM3IahzWKwqJxRqJbuTixHAJbHUiq1dkxHAWYWqWYRDIBFQctWDEBFgIe9QcOibWbimEBw3WKvbXSJ3IahzWKwqJxRqJbuTixHA=bsAiq1dkxHAWYWqWYRDIBFQctWDXBFgIe9QcOibWbimEBw3WKvU=bM3IahzWKwqJxRqJbuTixHA=bwqiq1dkxHAWYWqWYRDIBFQctjvJmFgIe9QcOibWbimEBw3WKv1=OM3IahzWKwqJxRqJbuTixHA=t=biq1dkxHAWYWqWYRDIBFQcOUbXaFgIe9QcOibWbimEBw3WKvY=ls3IahzWKwqJxRqJbuTixHA=liYiq1dkxHAWYWqWYRDIBFQctseXBFgIe9QcOibWbimEBw3WKwxWSG3IahzWKwqJxRqJbuTixHAXO5Yiq1dkxHAWYWqWYRDIBFQcOUmXBFgIe9QcOibWbimEBw3WKvUJlu3IahzWKwqJxRqJbuTixHAXtMAiq1dkxHAWYWqWYRDIBFQctMeEqFgIe9QcOibWbimEBw3WKvbElM3IahzWKwqJxRqJbuTixHA=SRPiq1dkxHAWYWqWYRDIBFQcOsxEaFgIe9QcOibWbimEBw3WKvvEYR3IahzWKwqJxRqJbuTixHAJ0JAiq1dkxHAWYWqWYRDIBFQctMeiq1dkxHAWYWqWYRDIBFQctuPEmFgIe9QcOibWbimEBw3WKvUXSF3IahzWKwqJxRqJbuTixHA=Sseiq1dkxHAWYWqWYRDIBFQcOw0=BFgIe9QcOibWbimEBw3WKwPExF3IahzWKwqJxRqJbuTixHA=Opmiq1dkxHAWYWqWYRDIBFQcOR/WaFgIe9QcOibWbimEBw3WKwAJSw3IahzWKwqJxRqJbuTixHAJ0uqiq1dkxHAWYWqWYRDIBFQcOJQWmFgIe9QcOibWbimEBw3WKw6JYR3IahzWKwqJxRqJbuTixHA=lj1iq1dkxHAWYWqWYRDIBFQcOvUXBFgIe9QcOibWbimEBw3WKvUESF3IahzWKwqJxRqJbuTixHAJxNUiq1dkxHAWYWqWYRDIBFQctMqEqFgIe9QcOibWbimEBw3WKw/WxM3IahzWKwqJxRqJbuTixHAJS=miq1dkxHAWYWqWYRDIBFQctEYXBFgIe9QcOibWbimEBw3WKvUEaFgIe9QcOibWbimEBw3WKvmEbW3IahzWKwqJxRqJbuTixHAWYM6iq1dkxHAWYWqWYRDIBFQctp1EaFgIe9QcOibWbimEBw3WKv1=YW3IahzWKwqJxRqJbuTixHAXlW6iq1dkxHAWYWqWYRDIBFQct=UJaFgIe9QcOibWbimEBw3WKvUJYJ3IahzWKwqJxRqJbuTixHAJSMAiq1dkxHAWYWqWYRDIBFQcOW/WBFgIe9QcOibWbimEBw3WKvvE0s3IahzWKwqJxRqJbuTixHAWbp1iq1dkxHAWYWqWYRDIBFQcOFeWqFgIe9QcOibWbimEBw3WKvYEOW3IahzWKwqJxRqJbuTixHA=SjYiq1dkxHAWYWqWYRDIBFQctsDWmFgIe9QcOibWbimEBw3WKvUWSw3IahzWKwqJxRqJbuTixHAEOvviq1dkxHAWYWqWYRDIBFQctNUEmFgIe9QcOibWbimEBw3WKvUJxF3IahzWKwqJxRqJbuTixHAElReiq1gIqvzWKwqJxRqJbuTixHAEb=Uiq1dkxHAWYWqWYRDIBFQcOEbEaFgIe9QcOibWbimEBw3WKv1Jxu3IahzWKwqJxRqJbuTixHAXlpYiq1dkxHAWYWqWYRDIBFQcOsxXaFgIe9QcOibWbimEBw3WKwqEbW3IahzWKwqJxRqJbuTixHAW0=Uiq1dkxHAWYWqWYRDIBFQcOwQXBFgIe9QcOibWbimEBw3WKw0JYJ3IahzWKwqJxRqJbuTixHAWxRDiq1dkxHAWYWqWYRDIBFQctRAEaFgIe9QcOibWbimEBw3WKwqXtu3IahzWKwqJxRqJbuTixHAWlRxiq1dkxHAWYWqWYRDIBFQcOvbJqFgIe9QcOibWbimEBw3WKvvEtR3IahzWKwqJxRqJbuTixHAWlMDiq1dkxHAWYWqWYRDIBFQcOUb=mFgIe9QcOibWbimEBw3WKv1=Su3IahzWKwqJxRqJbuTixHAEbMqiq1dkxHAWYWqWYRDIBFQcOR/WmFgIe9QcOibWbimEBw3WKw6=lW3IahzWKwqJxRqJbuTixHA=tuAiq1dkxHAWYWqWYRDIBFQctsD=mFgIe9QcOibWbimEBw3WKwqJ0W3IahzWKwqJxRqJbuTixHAXluAiq1dkxHAWYWqWYRDIBFQcOU1WqFgIe9QcOibWbimEBw3WKwPXOs3IahzWKwqJxRqJbuTixHAJliYiq1dkxHAWYWqWYRDIBFQctNmWaFgIe9QcOibWbimEBw3WKvbXSs3IahzWKwqJxRqJbuTixHA=lsDiq1dkxHAWYWqWYRDIBFQcOvbWmFgIe9QcOibWbimEBw3WKv1=OR3IahzWKwqJxRqJbuTixHAEYNmiq1dkxHAWYWqWYRDIBFQcO1eXaFgIe9QcOibWbimEBw3WKw6WSJ3IahzWKwqJxRqJbuTixHAWSFeiq1dkxHAWYWqWYRDIBFQcORPWBFgIe9QcOibWbimEBw3WKvmEOW3IahzWKwqJxRqJbuTixHA=Oseiq1dkxHAWYWqWYRDIBFQctu/XaFgIe9QcOibWbimEBw3WKweXS13IahzWKwqJxRqJbuTixHAE0R3IahzWKwqJxRqJbuTixHA=bJqiq1dkxHAWYWqWYRDIBFQctJqWBFgIe9QcOibWbimEBw3WKvYJbw3IahzWKwqJxRqJbuTixHA=bJeiq1dkxHAWYWqWYRDIBFQcOF6=BFgIe9QcOibWbimEBw3WKvYExu3IahzWKwqJxRqJbuTixHAElJDiq1dkxHAWYWqWYRDIBFQcOMQEBFgIe9QcOibWbimEBw3WKvmWSu3IahzWKwqJxRqJbuTixHAJbNYiq1dkxHAWYWqWYRDIBFQcO1qEaFgIe9QcOibWbimEBw3WKvvEOw3IahzWKwqJxRqJbuTixHAJ0=biq1dkxHAWYWqWYRDIBFQctMQXBFgIe9QcOibWbimEBw3WKwD=YJ3IahzWKwqJxRqJbuTixHAXOGDiq1dkxHAWYWqWYRDIBFQcOuxXBFgIe9QcOibWbimEBw3WKvmEls3IahzWKwqJxRqJbuTixHAEbFeiq1dkxHAWYWqWYRDIBFQctivEmFgIe9QcOibWbimEBw3WKw6JbJ3IahzWKwqJxRqJbuTixHAWSGQEqFgIe9QcOibWbimEBw3WKvbXlM3IahzWKwqJxRqJbuTixHAESR0iq1dkxHAWYWqWYRDIBFQcOuPXBFgIe9QcOibWbimEBw3WKvUXOw3IahzWKwqJxRqJbuTixHAE0WAiq1dkxHAWYWqWYRDIBFQcOjUEqFgIe9QcOibWbimEBw3WKwAWOF3IahzWKwqJxRqJbuTixHAJYR/iq1dkxHAWYWqWYRDIBFQcO1eEBFgIe9QcOibWbimEBw3WKvY=YM3IahzWKwqJxRqJbuTixHAEYNbiq1dkxHAWYWqWYRDIBFQcOReWqFgIe9QcOibWbimEBw3WKwAESG3IahzWKwqJxRqJbuTixHAEOHbiq1dkxHAWYWqWYRDIBFQcOUmWmFgIe9QcOibWbimEBw3WKwxWbM3IahzWKwqJxRqJbuTixHAWbNbiq1dkxHAWYWqWYRDIBFQcOjUXaFgIe9QcOibWbimEBw3WKvY=BFgIe9QcOibWbimEBw3WKvY=OJ3IahzWKwqJxRqJbuTixHA=Ouxiq1dkxHAWYWqWYRDIBFQctJe=BFgIe9QcOibWbimEBw3WKw/iq1dkxHAWYWqWYRDIBFQcOv1=BFgIe9QcOibWbimEBw3WKwqWbJ3IahzWKwqJxRqJbuTixHAJ0Ebiq1dkxHAWYWqWYRDIBFQcOs0WqFgIe9QcOibWbimEBw3WKvmXOF3IahzWKwqJxRqJbuTixHAWSuQiq1dkxHAWYWqWYRDIBFQcOUviq1dkxHAWYWqWYRDIBFQctRqEmFgIe9QcOibWbimEBw3WKvY=Ys3IahzWKwqJxRqJbuTixHAJbR0iq1dkxHAWYWqWYRDIBFQcOMxEmFgIe9QcOibWbimEBw3WKwAEOw3Ia1dIj9QcOibWbimEBw3WKw6Jlu3IahzWKwqJxRqJbuTixHAJYRAiq1dkxHAWYWqWYRDIBFQcOU1EqFgIe9QcOibWbimEBw3WKw0Wxw3IahzWKwqJxRqJbuTixHA=tsqiq1dkxHAWYWqWYRDIBFQcO16WaFgIe9QcOibWbimEBw3WKv1J0J3IahzWKwqJxRqJbuTixHAWbuAiq1dkxHAWYWqWYRDIBFQcO=UWmFgIe9QcOibWbimEBw3WKw/=bG3IahzWKwqJxRqJbuTixHAXO5miq1dkxHAWYWqWYRDIBFQcOM0WqFgIe9QcOibWbimEBw3WKvbWOW3IahzWKwqJxRqJbuTixHAEbibiq1dkxHAWYWqWYRDIBFQcOUbWaFgIe9QcOibWbimEBw3WKvvWqFgIe9QcOibWbimEBw3WKvYXBFgIe9QcOibWbimEBw3WKwe=bR3IahzWKwqJxRqJbuTixHAJbpmiq1dkxHAWYWqWYRDIBFQcOJ0=mFgIe9QcOibWbimEBw3WKvvXlu3IahzWKwqJxRqJbuTixHAEbMDiq1dkxHAWYWqWYRDIBFQcOw/iq1dkxHAWYWqWYRDIBFQctpvJmFgIe9QcOibWbimEBw3WKw0EtJ3IahzWKwqJxRqJbuTixHAExReiq1dkxHAWYWqWYRDIBFQcOweEaFgIe9QcOibWbimEBw3WKwP=tu3IahzWKwqJxRqJbuTixHA=b5miq1dkxHAWYWqWYRDIBFQctWAiq1dkxHAWYWqWYRDIBFQctMD=mFgIe9QcOibWbimEBw3WKwP=OR3IahzWKwqJxRqJbuTixHAJlM0iq1dkxHAWYWqWYRDIBFQctEbiq1dkxHAWYWqWYRDIBFQcORx=BFgIe9QcOibWbimEBw3WKwDJxF3IahzWKwqJxRqJbuTixHAXtsDiq1dkxHAWYWqWYRDIBFQcOs/WmFgIe9QcOibWbimEBw3WKwAXSR3IahzWKwqJxRqJbuTixHAJSweiq1dkxHAWYWqWYRDIBFQctJqJaFgIe9QcOibWbimEBw3WKv1ElJ3IahzWKwqJxRqJbuTixHAEbw3IahzWKwqJxRqJbuTixHAWxEUiq1dkxHAWYWqWYRDIBFQctu0WmFgIe9QcOibWbimEBw3WKw/=YW3IahzWKwqJxRqJbuTixHAEYEmiq1dkxHAWYWqWYRDIBFQcOF0WmFgIe9QcOibWbimEBw3WKw/Jls3IahzWKwqJxRqJbuTixHAJ0R0iq1dkxHAWYWqWYRDIBFQcOEmJmFgIe9QcOibWbimEBw3WKvbWYW3IahzWKwqJxRqJbuTixHAXSiUiq1dkxHAWYWqWYRDIBFQctuxJaFgIe9QcOibWbimEBw3WKvUJxs3IahzWKwqJxRqJbuTixHAESHbiq1dkxHAWYWqWYRDIBFQcOwPEBFgIe9QcOibWbimEBw3WKw6WxR3IahzWKwqJxRqJbuTixHAXlsAiq1dkxHAWYWqWYRDIBFQcOFDJmFgIe9QcOibWbimEBw3WKv1EYR3IahzWKwqJxRqJbuTixHAXOWPiq1dkxHAWYWqWYRDIBFQcOsPEmFgIe9QcOibWbimEBw3WKwxWtu3IahzWKwqJxRqJbuTixHA=bEYiq1dkxHAWYWqWYRDIBFQctRxEmFgIe9QcOibWbimEBw3WKwPEtu3IahzWKwqJxRqJbuTixHAJYMQiq1dkxHAWYWqWYRDIBFQcOw0WmFgIe9QcOibWbimEBw3WKw6JSM3IahzWKwqJxRqJbuTixHA=YNbiq1dkxHAWYWqWYRDIBFQcOJeWaFgIe9QcOibWbimEBw3WKwAExw3IahzWKwqJxRqJbuTixHA=O5Uiq1dkxHAWYWqWYRDIBFQctibEBFgIe9QcOibWbimEBw3WKv1=OG3IahzWKwqJxRqJbuTixHAWlpmiq1dkxHAWYWqWYRDIBFQcOR/EmFgIe9QcOibWbimEBw3WKwPJ0W3IahzWKwqJxRqJbuTixHAWlimiq1dkxHAWYWqWYRDIBFQcO1DWaFgIe9QcOibWbimEBw3WKv1J0W3IahzWKwqJxRqJbuTixHAWxN1iq1dkxHAWYWqWYRDIBFQcOu0XBFgIe9QcOibWbimEBw3WKvYJaFgIe9QcOibWbimEBw3WKw0ExR3IahzWKwqJxRqJbuTixHAXO13IahzWKwqJxRqJbuTixHAEx1eiq1dkxHAWYWqWYRDIBFQcOsqWBFgIe9QcOibWbimEBw3WKw/Xlu3IahzWKwqJxRqJbuTixHAXtJPiq1dkxHAWYWqWYRDIBFQctpUEaFgIe9QcOibWbimEBw3WKw/=SJ3IahzWKwqJxRqJbuTixHAElE1iq1dkxHAWYWqWYRDIBFQcOEUJmFgIe9QcOibWbimEBw3WKw/E0R3IahzWKwqJxRqJbuTixHAXS5Uiq1dkxHAWYWqWYRDIBFQctJD=BFgIe9QcOibWbimEBw3WKwDWts3IahzWKwqJxRqJbuTixHA=bs6iq1gIqvzWKwqJxRqJbuTixHAW0WDiq1dkxHAWYWqWYRDIBFQcOpYJaFgIe9QcOibWbimEBw3WKvYWYJ3IahzWKwqJxRqJbuTixHAE0E1iq1dkxHAWYWqWYRDIBFQcOsqWqFgIe9QcOibWbimEBw3WKwPJqFgIe9QcOibWbimEBw3WKv1WxG3IahzWKwqJxRqJbuTixHA=bG0iq1dkxHAWYWqWYRDIBFQcOFeWaFgIe9QcOibWbimEBw3WKwAExJ3IahzWKwqJxRqJbuTixHAE0Jxiq1dkxHAWYWqWYRDIBFQcOuDWaFgIe9QcOibWbimEBw3WKvbJ0J3IahzWKwqJxRqJbuTixHAXlpUiq1dkxHAWYWqWYRDIBFQcOuqJmFgIe9QcOibWbimEBw3WKweWSw3IahzWKwqJxRqJbuTixHAWYJ6iq1dkxHAWYWqWYRDIBFQcOvm=aFgIe9QcOibWbimEBw3WKw6WxG3IahzWKwqJxRqJbuTixHAXSseiq1dkxHAWYWqWYRDIBFQcORQXaFgIe9QcOibWbimEBw3WKwAJYM3IahzWKwqJxRqJbuTixHAJxEbiq1dkxHAWYWqWYRDIBFQcOu/EmFgIe9QcOibWbimEBw3WKvUEYW3IahzWKwqJxRqJbuTixHAXOR/iq1dkxHAWYWqWYRDIBFQcOR/JaFgIe9QcOibWbimEBw3WKweEbs3IahzWKwqJxRqJbuTixHAWxjUiq1dkxHAWYWqWYRDIBFQctpY=aFgIe9QcOibWbimEBw3WKvYWSF3IahzWKwqJxRqJbuTixHAWx13IahzWKwqJxRqJbuTixHAEbiUiq1dkxHAWYWqWYRDIBFQctRP=aFgIe9QcOibWbimEBw3WKv1XtR3IahzWKwqJxRqJbuTixHAWxRQiq1dkxHAWYWqWYRDIBFQcOwqWqFgIe9QcOibWbimEBw3WKwqWxu3IahzWKwqJxRqJbuTixHAExUmiq1dkxHAWYWqWYRDIBFQcOuPJmFgIe9QcOibWbimEBw3WKvvWlR3IahzWKwqJxRqJbuTixHAE0WQiq1dkxHAWYWqWYRDIBFQcOsDEBFgIe9QcOibWbimEBw3WKv1=O13IahzWKwqJxRqJbuTixHAWlW0iq1dkxHAWYWqWYRDIBFQcOsxJaFgIe9QcOibWbimEBw3WKwDXSG3IahzWKwqJxRqJbuTixHAES=1iq1dkxHAWYWqWYRDIBFQcOjvEqFgIe9QcOibWbimEBw3WKw/=tu3IahzWKwqJxRqJbuTixHAE0pviq1dkxHAWYWqWYRDIBFQcO10XBFgIe9QcOibWbimEBw3WKvUESM3IahzWKwqJxRqJbuTixHAEbG0iq1dkxHAWYWqWYRDIBFQcONvXaFgIe9QcOibWbimEBw3WKwDEtM3IahzWKwqJxRqJbuTixHAExwAiq1dkxHAWYWqWYRDIBFQcOp1WqFgIe9QcOibWbimEBw3WKweWOs3IahzWKwqJxRqJbuTixHAElu/iq1dkxHAWYWqWYRDIBFQcOM/EqFgIe9QcOibWbimEBw3WKwe=lR3IahzWKwqJxRqJbuTixHAJlu6iq1dkxHAWYWqWYRDIBFQctM/EqFgIe9QcOibWbimEBw3WKvU=aFgIe9QcOibWbimEBw3WKvbEOs3IahzWKwqJxRqJbuTixHAXOjviq1dkxHAWYWqWYRDIBFQcOiU=mFgIe9QcOibWbimEBw3WKwDWOM3IahzWKwqJxRqJbuTixHAXOR6iq1dkxHAWYWqWYRDIBFQctu6=BFgIe9QcOibWbimEBw3WKwDWlW3IahzWKwqJxRqJbuTixHA=OU1iq1dkxHAWYWqWYRDIBFQctR/JqFgIe9QcOibWbimEBw3WKvvEbR3IahzWKwqJxRqJbuTixHAXOUmiq1dkxHAWYWqWYRDIBFQcts0XaFgIe9QcOibWbimEBw3WKvYExw3IahzWKwqJxRqJbuTixHA=bG3IahzWKwqJxRqJbuTixHAJbJQiq1dkxHAWYWqWYRDIBFQcOv1WmFgIe9QcOibWbimEBw3WKwqEbR3IahzWKwqJxRqJbuTixHA=SN1iq1dkxHAWYWqWYRDIBFQctEviq1dkxHAWYWqWYRDIBFQcOvUWaFgIe9QcOibWbimEBw3WKweEYW3IahzWKwqJxRqJbuTixHAJbF6iq1dkxHAWYWqWYRDIBFQctsAWBFgIe9QcOibWbimEBw3WKv1JxR3IahzWKwqJxRqJbuTixHA=O1Piq1dkxHAWYWqWYRDIBFQcON1EBFgIe9QcOibWbimEBw3WKwxWls3IahzWKwqJxRqJbuTixHAEbMAiq1dkxHAWYWqWYRDIBFQcOU1=BFgIe9QcOibWbimEBw3WKv1W0W3IahzWKwqJxRqJbuTixHAWx5Uiq1dkxHAWYWqWYRDIBFQcOMPiq1dkxHAWYWqWYRDIBFQctsPEmFgIe9QcOibWbimEBw3WKwD=lJ3IahzWKwqJxRqJbuTixHAEtRPiq1gIqvzWKwqJxRqJbuTixHAWxNbiq1dkxHAWYWqWYRDIBFQcOwPWBFgIe9QcOibWbimEBw3WKvvExs3IahzWKwqJxRqJbuTixHAE0sAiq1dkxHAWYWqWYRDIBFQcOvb=mFgIe9QcOibWbimEBw3WKwqJYu3IahzWKwqJxRqJbuTixHAXSNYiq1dkxHAWYWqWYRDIBFQcO5vWmFgIe9QcOibWbimEBw3WKw6XSG3IahzWKwqJxRqJbuTixHAEbJ6iq1dkxHAWYWqWYRDIBFQcOJPEBFgIe9QcOibWbimEBw3WKvvW0W3IahzWKwqJxRqJbuTixHAWxUbiq1dkxHAWYWqWYRDIBFQctu6WaFgIe9QcOibWbimEBw3WKwP=Sw3IahzWKwqJxRqJbuTixHAXSueiq1dkxHAWYWqWYRDIBFQcO=bWmFgIe9QcOibWbimEBw3WKvYXOM3IahzWKwqJxRqJbuTixHAExNYiq1dkxHAWYWqWYRDIBFQcOMD=mFgIe9QcOibWbimEBw3WKvY=Yu3IahzWKwqJxRqJbuTixHAWSs6iq1dkxHAWYWqWYRDIBFQctJ6WaFgIe9QcOibWbimEBw3WKvmESs3IahzWKwqJxRqJbuTixHAXSs3IahzWKwqJxRqJbuTixHAWlWAiq1dkxHAWYWqWYRDIBFQctEm=aFgIe9QcOibWbimEBw3WKvv=OM3IahzWKwqJxRqJbuTixHAWSUUiq1dkxHAWYWqWYRDIBFQcOWxEaFgIe9QcOibWbimEBw3WKwxESG3IahzWKwqJxRqJbuTixHAJbvviq1dkxHAWYWqWYRDIBFQcOF0WaFgIe9QcOibWbimEBw3WKweXO13IahzWKwqJxRqJbuTixHAXtReiq1dkxHAWYWqWYRDIBFQctu6WqFgIe9QcOibWbimEBw3WKvU=b13IahzWKwqJxRqJbuTixHA=tjviq1dkxHAWYWqWYRDIBFQctiYiq1dkxHAWYWqWYRDIBFQcOvmEmFgIe9QcOibWbimEBw3WKwxJ0M3IahzWKwqJxRqJbuTixHAEOJQiq1dkxHAWYWqWYRDIBFQctNb=mFgIe9QcOibWbimEBw3WKweWSG3IahzWKwqJxRqJbuTixHAWSuPiq1dkxHAWYWqWYRDIBFQctRQEmFgIe9QcOibWbimEBw3WKwe=lJ3IahzWKwqJxRqJbuTixHA=O=viq1dkxHAWYWqWYRDIBFQcONbJmFgIe9QcOibWbimEBw3WKvv=Sw3IahzWKwqJxRqJbuTixHAJ0jviq1dkxHAWYWqWYRDIBFQcOvmXBFgIe9QcOibWbimEBw3WKwAWYR3IahzWKwqJxRqJbuTixHAJSMPiq1dkxHAWYWqWYRDIBFQcO1P=mFgIe9QcOibWbimEBw3WKwqXlu3IahzWKwqJxRqJbuTixHAE0W6iq1dkxHAWYWqWYRDIBFQcOMAEqFgIe9QcOibWbimEBw3WKvmWOs3IahzWKwqJxRqJbuTixHAJxpviq1dkxHAWYWqWYRDIBFQctR6XBFgIe9QcOibWbimEBw3WKvUEtu3IahzWKwqJxRqJbuTixHAEYjUiq1dkxHAWYWqWYRDIBFQcOWPEBFgIe9QcOibWbimEBw3WKv1XSR3IahzWKwqJxRqJbuTixHAXSu0iq1dkxHAWYWqWYRDIBFQctEY=BFgIe9QcOibWbimEBw3WKwAWls3IahzWKwqJxRqJbuTixHAWYNYiq1dkxHAWYWqWYRDIBFQcORAEqFgIe9QcOibWbimEBw3WKvbEtR3IahzWKwqJxRqJbuTixHAEbGDiq1dkxHAWYWqWYRDIBFQcts6JaFgIe9QcOibWbimEBw3WKvbWxF3IahzWKwqJxRqJbuTixHAWbFDiq1dkxHAWYWqWYRDIBFQcO1DJqFgIe9QcOibWbimEBw3WKw6JaFgIe9QcOibWbimEBw3WKwxJYJ3IahzWKwqJxRqJbuTixHAElJeiq1dkxHAWYWqWYRDIBFQctEUEmFgIe9QcOibWbimEBw3WKvY=tR3IahzWKwqJxRqJbuTixHAWYMqiq1dkxHAWYWqWYRDIBFQctiYJaFgIe9QcOibWbimEBw3WKw/WSw3IahzWKwqJxRqJbuTixHA=bFqiq1dkxHAWYWqWYRDIBFQcORDXBFgIe9QcOibWbimEBw3WKvUXaFgIe9QcOibWbimEBw3WKv1JYJ3IahzWKwqJxRqJbuTixHA=YM0iq1dkxHAWYWqWYRDIBFQct=1=BFgIe9QcOibWbimEBw3WKweJbF3IahzWKwqJxRqJbuTixHAWS5Uiq1dkxHAWYWqWYRDIBFQcOUUXBFgIe9QcOibWbimEBw3WKwDEbs3IahzWKwqJxRqJbuTixHAWx10iq1dkxHAWYWqWYRDIBFQcOsAEqFgIe9QcOibWbimEBw3WKvYEOs3IahzWKwqJxRqJbuTixHAWxR6iq1dkxHAWYWqWYRDIBFQcOF0=mFgIe9QcOibWbimEBw3WKwe=SJ3Ia1dIj9QcOibWbimEBw3WKw0Wbs3IahzWKwqJxRqJbuTixHAWSueiq1dkxHAWYWqWYRDIBFQcOs0WmFgIe9QcOibWbimEBw3WKvvJbu3IahzWKwqJxRqJbuTixHAJSiYiq1dkxHAWYWqWYRDIBFQcORAJqFgIe9QcOibWbimEBw3WKvYXSW3IahzWKwqJxRqJbuTixHAEtJqiq1dkxHAWYWqWYRDIBFQcO=Y=BFgIe9QcOibWbimEBw3WKw/ElM3IahzWKwqJxRqJbuTixHA=S=1iq1dkxHAWYWqWYRDIBFQcOu6JmFgIe9QcOibWbimEBw3WKvY=bM3IahzWKwqJxRqJbuTixHAWYNviq1dkxHAWYWqWYRDIBFQctsPWBFgIe9QcOibWbimEBw3WKwDXtJ3IahzWKwqJxRqJbuTixHAXOwqiq1dkxHAWYWqWYRDIBFQcOpmWaFgIe9QcOibWbimEBw3WKvbJb13IahzWKwqJxRqJbuTixHAExRAiq1dkxHAWYWqWYRDIBFQctpmiq1dkxHAWYWqWYRDIBFQcOw0EqFgIe9QcOibWbimEBw3WKv1=SR3IahzWKwqJxRqJbuTixHAE0EYiq1dkxHAWYWqWYRDIBFQctRxXaFgIe9QcOibWbimEBw3WKwxEaFgIe9QcOibWbimEBw3WKw6XSu3IahzWKwqJxRqJbuTixHAXtseiq1dkxHAWYWqWYRDIBFQcOF6JqFgIe9QcOibWbimEBw3WKv1Jbs3IahzWKwqJxRqJbuTixHAElu3IahzWKwqJxRqJbuTixHAWS51iq1dkxHAWYWqWYRDIBFQctW0WaFgIe9QcOibWbimEBw3WKwPXSR3IahzWKwqJxRqJbuTixHAExWDiq1dkxHAWYWqWYRDIBFQcO1/=mFgIe9QcOibWbimEBw3WKw0Wb13IahzWKwqJxRqJbuTixHAWlNUiq1dkxHAWYWqWYRDIBFQcOFDEqFgIe9QcOibWbimEBw3WKvbJSR3IahzWKwqJxRqJbuTixHAJ0WAiq1dkxHAWYWqWYRDIBFQcOFxEaFgIe9QcOibWbimEBw3WKvvJYM3IahzWKwqJxRqJbuTixHAWl=Yiq1dkxHAWYWqWYRDIBFQctEmJqFgIe9QcOibWbimEBw3WKwx=SR3IahzWKwqJxRqJbuTixHAExFQiq1dkxHAWYWqWYRDIBFQctEmEBFgIe9QcOibWbimEBw3WKvbEbu3IahzWKwqJxRqJbuTixHAJx1qiq1dkxHAWYWqWYRDIBFQcO=1iq1dkxHAWYWqWYRDIBFQctWx=aFgIe9QcOibWbimEBw3WKwe=Ys3IahzWKwqJxRqJbuTixHAJl=biq1dkxHAWYWqWYRDIBFQcOp1iq1dkxHAWYWqWYRDIBFQcOu0JmFgIe9QcOibWbimEBw3WKwqWS13IahzWKwqJxRqJbuTixHAESjmiq1dkxHAWYWqWYRDIBFQctR6EaFgIe9QcOibWbimEBw3WKvvEts3IahzWKwqJxRqJbuTixHAWx=Yiq1dkxHAWYWqWYRDIBFQcOEbiq1dkxHAWYWqWYRDIBFQcOR6JmFgIe9QcOibWbimEBw3WKwx=OM3IahzWKwqJxRqJbuTixHAXOF/iq1dkxHAWYWqWYRDIBFQcOuAXaFgIe9QcOibWbimEBw3WKvU=OF3IahzWKwqJxRqJbuTixHAXOuqiq1dkxHAWYWqWYRDIBFQctsxEqFgIe9QcOibWbimEBw3WKwxEOF3IahzWKwqJxRqJbuTixHA=t=miq1dkxHAWYWqWYRDIBFQcti1EBFgIe9QcOibWbimEBw3WKw0WlR3IahzWKwqJxRqJbuTixHA=bJ6iq1dkxHAWYWqWYRDIBFQcOvbWBFgIe9QcOibWbimEBw3WKwxWOJ3IahzWKwqJxRqJbuTixHA=bj1iq1dkxHAWYWqWYRDIBFQcO51=aFgIe9QcOibWbimEBw3WKvbWOu3IahzWKwqJxRqJbuTixHAJSMAiq1dkxHAWYWqWYRDIBFQcOFxJqFgIe9QcOibWbimEBw3WKwA=OG3IahzWKwqJxRqJbuTixHAWSJ0iq1dkxHAWYWqWYRDIBFQctJeJqFgIe9QcOibWbimEBw3WKwPJlu3IahzWKwqJxRqJbuTixHAEliYiq1dkxHAWYWqWYRDIBFQcOsDiq1dkxHAWYWqWYRDIBFQctpvXBFgIe9QcOibWbimEBw3WKvb=bR3IahzWKwqJxRqJbuTixHAWxMqiq1dkxHAWYWqWYRDIBFQctE1EmFgIe9QcOibWbimEBw3WKvUXOR3IahzWKwqJxRqJbuTixHAExweiq1dkxHAWYWqWYRDIBFQctJ/EaFgIe9QcOibWbimEBw3WKvUEYM3IahzWKwqJxRqJbuTixHAEO1Piq1dkxHAWYWqWYRDIBFQctRQWmFgIe9QcOibWbimEBw3WKw0EbJ3IahzWKwqJxRqJbuTixHAXSwPiq1dkxHAWYWqWYRDIBFQcOFQWqFgIaVTkxHAWYWqWYRDIBFQcOFPJqFgIe9QcOibWbimEBw3WKwAXlW3IahzWKwqJxRqJbuTixHAEbFQiq1dkxHAWYWqWYRDIBFQctWQJaFgIe9QcOibWbimEBw3WKw0EbF3IahzWKwqJxRqJbuTixHAJxEmiq1dkxHAWYWqWYRDIBFQcOMAEBFgIe9QcOibWbimEBw3WKwDWOF3IahzWKwqJxRqJbuTixHAJSJAiq1dkxHAWYWqWYRDIBFQctJe=aFgIe9QcOibWbimEBw3WKwDWlu3IahzWKwqJxRqJbuTixHAESu6iq1dkxHAWYWqWYRDIBFQctMqiq1dkxHAWYWqWYRDIBFQcOWQWaFgIe9QcOibWbimEBw3WKvUWxW3IahzWKwqJxRqJbuTixHAWlRQiq1dkxHAWYWqWYRDIBFQcOvUEmFgIe9QcOibWbimEBw3WKvUE0W3IahzWKwqJxRqJbuTixHA=OG6iq1dkxHAWYWqWYRDIBFQcOj1EqFgIe9QcOibWbimEBw3WKvv=SW3IahzWKwqJxRqJbuTixHAElsxiq1dkxHAWYWqWYRDIBFQcOuPEBFgIe9QcOibWbimEBw3WKw0XSJ3IahzWKwqJxRqJbuTixHA=SEYiq1dkxHAWYWqWYRDIBFQcOsDWaFgIe9QcOibWbimEBw3WKvm=lJ3IahzWKwqJxRqJbuTixHAXOUviq1dkxHAWYWqWYRDIBFQcORqEaFgIe9QcOibWbimEBw3WKvbEb13IahzWKwqJxRqJbuTixHAEbJ/iq1dkxHAWYWqWYRDIBFQcO=1JaFgIe9QcOibWbimEBw3WKvUWbG3IahzWKwqJxRqJbuTixHAExu3IahzWKwqJxRqJbuTixHAExwqiq1dkxHAWYWqWYRDIBFQcOi1=aFgIe9QcOibWbimEBw3WKwAWlu3IahzWKwqJxRqJbuTixHAExpUiq1dkxHAWYWqWYRDIBFQcOJqEBFgIe9QcOibWbimEBw3WKvm=tJ3IahzWKwqJxRqJbuTixHAWBFgIe9QcOibWbimEBw3WKwAEtJ3IahzWKwqJxRqJbuTixHAW0J3IahzWKwqJxRqJbuTixHAWxiviq1dkxHAWYWqWYRDIBFQcOMA=BFgIe9QcOibWbimEBw3WKwAWSs3IahzWKwqJxRqJbuTixHAWluAiq1dkxHAWYWqWYRDIBFQcOwqEqFgIe9QcOibWbimEBw3WKwxJxW3IahzWKwqJxRqJbuTixHAXOJPiq1dkxHAWYWqWYRDIBFQctN1=aFgIe9QcOibWbimEBw3WKvU=bJ3IahzWKwqJxRqJbuTixHAXlJeiq1dkxHAWYWqWYRDIBFQctRe=aFgIe9QcOibWbimEBw3WKw6W0R3IahzWKwqJxRqJbuTixHA=SM3IahzWKwqJxRqJbuTixHAWSG/iq1dkxHAWYWqWYRDIBFQcOimEaFgIe9QcOibWbimEBw3WKwA=YJ3IahzWKwqJxRqJbuTixHAWlW3IahzWKwqJxRqJbuTixHAE0pmiq1dkxHAWYWqWYRDIBFQcOEYEBFgIe9QcOibWbimEBw3WKw/JaFgIe9QcOibWbimEBw3WKwxWbR3IahzWKwqJxRqJbuTixHAJYM/iq1dkxHAWYWqWYRDIBFQctsPEqFgIe9QcOibWbimEBw3WKv1=mFgIe9QcOibWbimEBw3WKvYEbu3IahzWKwqJxRqJbuTixHAEb5miq1dkxHAWYWqWYRDIBFQcOimWmFgIe9QcOibWbimEBw3WKw0XaFgIe9QcOibWbimEBw3WKvvEYs3IahzWKwqJxRqJbuTixHAElRqiq1dkxHAWYWqWYRDIBFQctM/WmFgIe9QcOibWbimEBw3WKvbWlR3IahzWKwqJxRqJbuTixHAW0uxiq1dkxHAWYWqWYRDIBFQcOF/WBFgIe9QcOibWbimEBw3WKwx=bs3IahzWKwqJxRqJbuTixHAEON1iq1dkxHAWYWqWYRDIBFQcOvYXaFgIe9QcOibWbimEBw3WKw0WtW3IahzWKwqJxRqJbuTixHAESj1iq1dkxHAWYWqWYRDIBFQctJDEBFgIe9QcOibWbimEBw3WKvmJ0u3IahzWKwqJxRqJbuTixHAWbsxiq1dkxHAWYWqWYRDIBFQctse=mFgIe9QcOibWbimEBw3WKw0XtW3IahzWKwqJxRqJbuTixHAEbHbiq1dkxHAWYWqWYRDIBFQctuD=mFgIe9QcOibWbimEBw3WKwqJls3IahzWKwqJxRqJbuTixHAJSR3IahzWKwqJxRqJbuTixHAJxNbiq1dkxHAWYWqWYRDIBFQctW6XBFgIe9QcOibWbimEBw3WKvYESW3IahzWKwqJxRqJbuTixHAExR/iq1dkxHAWYWqWYRDIBFQctE1EaFgIe9QcOibWbimEBw3WKwDJYs3IahzWKwqJxRqJbuTixHAJSv1iq1dkxHAWYWqWYRDIBFQcOWPWmFgIe9QcOibWbimEBw3WKwA=YR3Ia1dIj9QcOibWbimEBw3WKwxWOR3IahzWKwqJxRqJbuTixHAE0sPiq1dkxHAWYWqWYRDIBFQcO=UEBFgIe9QcOibWbimEBw3WKvYWYu3IahzWKwqJxRqJbuTixHA=OWDiq1dkxHAWYWqWYRDIBFQcOJ6=aFgIe9QcOibWbimEBw3WKweXtJ3IahzWKwqJxRqJbuTixHAExiviq1dkxHAWYWqWYRDIBFQctibEmFgIe9QcOibWbimEBw3WKw0WO13IahzWKwqJxRqJbuTixHAExFDiq1dkxHAWYWqWYRDIBFQcOvvWaFgIe9QcOibWbimEBw3WKwDWOW3IahzWKwqJxRqJbuTixHAWSjbiq1dkxHAWYWqWYRDIBFQctM/WaFgIe9QcOibWbimEBw3WKwA=tJ3IahzWKwqJxRqJbuTixHAXSw/iq1dkxHAWYWqWYRDIBFQcOJAWaFgIe9QcOibWbimEBw3WKvmXOM3IahzWKwqJxRqJbuTixHAWbv1iq1dkxHAWYWqWYRDIBFQcOjmWqFgIe9QcOibWbimEBw3WKwAJ0W3IahzWKwqJxRqJbuTixHAJSpmiq1dkxHAWYWqWYRDIBFQcOjUEBFgIe9QcOibWbimEBw3WKw6J0J3IahzWKwqJxRqJbuTixHA=tMDiq1dkxHAWYWqWYRDIBFQcOJeWmFgIe9QcOibWbimEBw3WKwqWSR3IahzWKwqJxRqJbuTixHAXlNbiq1dkxHAWYWqWYRDIBFQctp1XBFgIe9QcOibWbimEBw3WKvvEtJ3IahzWKwqJxRqJbuTixHAWYEbiq1dkxHAWYWqWYRDIBFQcOU1XBFgIe9QcOibWbimEBw3WKw6=OW3IahzWKwqJxRqJbuTixHAExw/iq1dkxHAWYWqWYRDIBFQctjm=mFgIe9QcOibWbimEBw3WKvUJbs3IahzWKwqJxRqJbuTixHAWYJQiq1dkxHAWYWqWYRDIBFQcOv1iq1dkxHAWYWqWYRDIBFQctu/WmFgIe9QcOibWbimEBw3WKwAXtM3IahzWKwqJxRqJbuTixHAJSw/iq1dkxHAWYWqWYRDIBFQcOueEaFgIe9QcOibWbimEBw3WKwxJSu3IahzWKwqJxRqJbuTixHAEbRQiq1dkxHAWYWqWYRDIBFQctjvEBFgIe9QcOibWbimEBw3WKvbEaFgIe9QcOibWbimEBw3WKw6JxM3IahzWKwqJxRqJbuTixHAWSjYiq1dkxHAWYWqWYRDIBFQctsQEqFgIe9QcOibWbimEBw3WKv1EbW3IahzWKwqJxRqJbuTixHAXtR6iq1dkxHAWYWqWYRDIBFQct=UEqFgIe9QcOibWbimEBw3WKw0EYs3IahzWKwqJxRqJbuTixHA=OEmiq1dkxHAWYWqWYRDIBFQctsA=BFgIe9QcOibWbimEBw3WKvYXS13IahzWKwqJxRqJbuTixHAWxsPiq1dkxHAWYWqWYRDIBFQcOMxJmFgIe9QcOibWbimEBw3WKvYExW3IahzWKwqJxRqJbuTixHAJb5biq1dkxHAWYWqWYRDIBFQcOFx=aFgIe9QcOibWbimEBw3WKwe=bG3IahzWKwqJxRqJbuTixHAWS1Diq1dkxHAWYWqWYRDIBFQcOs0iq1dkxHAWYWqWYRDIBFQcOpbWaFgIe9QcOibWbimEBw3WKw/ExF3IahzWKwqJxRqJbuTixHA=Ypbiq1dkxHAWYWqWYRDIBFQcO1eEaFgIe9QcOibWbimEBw3WKvbESG3IahzWKwqJxRqJbuTixHAEbueiq1dkxHAWYWqWYRDIBFQcOEvWqFgIe9QcOibWbimEBw3WKvmJ0M3IahzWKwqJxRqJbuTixHAXOJ0iq1dkxHAWYWqWYRDIBFQctuDWBFgIe9QcOibWbimEBw3WKv1WmFgIe9QcOibWbimEBw3WKwPJbR3IahzWKwqJxRqJbuTixHAJ0ibiq1dkxHAWYWqWYRDIBFQcOEv=BFgIe9QcOibWbimEBw3WKwP=OF3IahzWKwqJxRqJbuTixHAJbpviq1dkxHAWYWqWYRDIBFQcOJ6EaFgIe9QcOibWbimEBw3WKvmJSw3IahzWKwqJxRqJbuTixHAW0EYiq1dkxHAWYWqWYRDIBFQctM6EqFgIe9QcOibWbimEBw3WKw0Els3IahzWKwqJxRqJbuTixHAWxvviq1dkxHAWYWqWYRDIBFQctjYWaFgIe9QcOibWbimEBw3WKv1WS13IahzWKwqJxRqJbuTixHAJSUUiq1dkxHAWYWqWYRDIBFQcOJx=aFgIe9QcOibWbimEBw3WKvvXtR3IahzWKwqJxRqJbuTixHAJYNmiq1dkxHAWYWqWYRDIBFQctMAWmFgIe9QcOibWbimEBw3WKwPXOM3IahzWKwqJxRqJbuTixHA=bseiq1dkxHAWYWqWYRDIBFQctM0=aFgIe9QcOibWbimEBw3WKwDXSF3IahzWKwqJxRqJbuTixHAJbGqiq1dkxHAWYWqWYRDIBFQcOJ0EmFgIaVTkxHAWYWqWYRDIBFQcO1AEqFgIe9QcOibWbimEBw3WKwPWOW3IahzWKwqJxRqJbuTixHAESibiq1dkxHAWYWqWYRDIBFQcOWDJaFgIe9QcOibWbimEBw3WKw0EbF3IahzWKwqJxRqJbuTixHAJxEmiq1dkxHAWYWqWYRDIBFQcOMAEBFgIe9QcOibWbimEBw3WKweWOR3IahzWKwqJxRqJbuTixHAWlsqiq1dkxHAWYWqWYRDIBFQct=UWBFgIe9QcOibWbimEBw3WKw0JYM3IahzWKwqJxRqJbuTixHA=Y=Yiq1dkxHAWYWqWYRDIBFQcOW0EqFgIe9QcOibWbimEBw3WKw6JxG3IahzWKwqJxRqJbuTixHAXS=biq1dkxHAWYWqWYRDIBFQcOJ6XaFgIe9QcOibWbimEBw3WKwqJSw3IahzWKwqJxRqJbuTixHA=YW3IahzWKwqJxRqJbuTixHAXlWQiq1dkxHAWYWqWYRDIBFQcO10JqFgIe9QcOibWbimEBw3WKw0XS13IahzWKwqJxRqJbuTixHAWYsAiq1dkxHAWYWqWYRDIBFQcOuAWaFgIe9QcOibWbimEBw3WKw0WtW3IahzWKwqJxRqJbuTixHA=OpYiq1dkxHAWYWqWYRDIBFQctMqWqFgIe9QcOibWbimEBw3WKw0E0u3IaV38OA3Ia/zWKw/=S=YXOv8kxHAWYWqWYRDIBFQctjYEBFgkSezWKwqJxRqJbuTixHA=bF3IaV3cBFVkxHAWlM0=bwAle9QcOibWbimEBw3WKvvXO13IND2=3NCJPpg80ATkxHAWb1A=bsPLj9QcOuxXtRQWqUnFYND5kiCRj9QcOR6XtJ/EqezWKwDWxvmWOWnza/zWKw/=S=YXOv8kxHAWYWqWYRDIBFQctW/EqFgkSeY5l6b5tU48mvzWKwqEOJ/JSJVkxHAElWP=tJeIkhq=kpeFYAwkxHAWbu0Wls0RSD2kxHAElWP=tJeXPDVkxHAWlM0=bwAle9QcOibWbimEBw3WKwq=bs3IND2kxHAWYWqWYRDIBFQctM6XaFgLj9QcOjUEYJAXjhzWKwqJxRqJbuTixHAJYimiqU57N9QcOibWbimEBw3WKweXSs3Ia/zWKw/=S=YXOv8kxHAWYWqWYRDIBFQctMxJaFgkSeY5l6b5tU48mvzWKwqWSseES1VkxHAWxG/Jx51Lj9QcOjYJYRPXa/zWKvY=bvYExuVkxHAW0=b=Ow0Ikhq=kpeFYAwkxHAWbs/ESM6Ij9QcOWQWlWP=B/zWKw/=YimEx1VkxHA=YJA=bFDLj9QcOEYJ0uAEm1nza/zWKw/=S=YXOv8kxHAWYWqWYRDIBFQctsAXBFgkSeY5l6b5tU48mvzWKwxESWeEORVkxHAWl=UExFAIkhq=kpeFYAwkxHAWxMxESuq7OezWKw/=YMPExwnza/zWKw/=S=YXOv8kxHAWYWqWYRDIBFQcOpbJqFgkSeY5l6b5tU48mvzWKw/WSv1EOJVkxHAEtN1JSWPIkhq=kpeFYAwkxHAWSsA=Ou0Ij9QcOpU=tsxEq1nza/zWKw/=S=YXOv8kxHAWYWqWYRDIBFQctuQEqFgkSezWKwqJxRqJbuTixHAEtiYiq1VkxHAWlM0=bwAle9QcOibWbimEBw3WKwDJb13IND2=3NCJPpg80ATkxHAWluDW0NmLj9QcOjmXOF/EB/zWKw/WxMxWbGgcPiU5KNq8mHzWKw/=Oux=lRTkxHAWlRAExsDLj9QcOsxESWqWB1nza/zWKw/=S=YXOv8kxHAWYWqWYRDIBFQcti1JaFgkSeY5l6b5tU48mvzWKwxW0N1WO1VkxHAEOJ/JYJeIkhq=kpeFYAwkxHAWxEU=OG6RSD2kxHAEOJ/JYJeXPDVkxHAWlM0=bwAle9QcOibWbimEBw3WKw/XBFgkSeY5l6b5tU48mvzWKwDEtMxE0uVkxHA=Yu0ExGgcPiU5KNq8mHzWKwDEtMxE0uv7SezWKvY=OJPWOh2Lj9QcOjUEYJAXjhzWKwqJxRqJbuTixHAESMqiqU57N9QcOibWbimEBw3WKv1WqFgLj9QcOjUEYJAXjhzWKwqJxRqJbuTixHAJlEYiqU57l=e8YEDol2CIj9QcOWeW0uAEq/zWKwqWYEmXtJgcPiU5KNq8mHzWKwxESE1XOF27SezWKwqWYEmXtJnza/zWKw/=S=YXOv8kxHAWYWqWYRDIBFQcOueJmFgkSezWKwqJxRqJbuTixHAExFxiq1VkxHAWlM0=bwAle9QcOibWbimEBw3WKvvJ0W3IND2kxHAWYWqWYRDIBFQcOJQ=BFgIe9QcOibWbimEBw3WKvYEOG3IahzWKwqJxRqJbuTixHAWbH1iq1dkxHAWYWqWYRDIBFQctRxXBFgIe9QcOibWbimEBw3WKwqWxw3Ia/zWKw/=S=YXOv8kxHAWYWqWYRDIBFQctsA=mFgkSeY5l6b5tU48mvzWKwqEOG0EOMVkxHAESwQ=lJeIkhq=kpeFYAwkxHAWbuQEbue7SD2kxHAESwQ=lJeXPDVkxHAWlM0=bwAle9QcOibWbimEBw3WKw/Exs3IND2=3NCJPpg80ATkxHAWbMDW0J/Lj9QcOWQWx5UJaUnFYND5kiCRj9QcOReEOEYWas27N9QcOWQWx5UJSh2Lj9QcOjUEYJAXjhzWKwqJxRqJbuTixHAXSuDiqU57N9QcOibWbimEBw3WKvU=ls3Ia/zWKw/=S=YXOv8kxHAWYWqWYRDIBFQcORqWmFgkSezWKwqJxRqJbuTixHAExN1iq1VkxHAWlM0=bwAle9QcOibWbimEBw3WKw6WxW3IND2kxHAWYWqWYRDIBFQcOwAEBFgLj9QcOjUEYJAXjhzWKwqJxRqJbuTixHAWYuQiqU57l=e8YEDol2CIj9QctRPE0RPEa/zWKwD=tReJxFgcPiU5KNq8mHzWKvmEx5mExMv7SezWKwD=tReJxFnza/zWKw/=S=YXOv8kxHAWYWqWYRDIBFQcOJe=aFgkSezWKwqJxRqJbuTixHAEYM0iq1VkxHAWlM0=bwAle9QcOibWbimEBw3WKw6W0M3IND2kxHAWYWqWYRDIBFQctRAXaFgLj9QcOjUEYJAXjhzWKwqJxRqJbuTixHAJbWqiqU57l=e8YEDol2CIj9QcOWPJxsxEq/zWKwDXtsPJYMgcPiU5KNq8mHzWKwxE0W/WxFv7SezWKwDXtsPJYMnza/zWKw/=S=YXOv8kxHAWYWqWYRDIBFQctW0WmFgkSezWKwqJxRqJbuTixHAJbwDiq1VkxHAWlM0=bwAle9QcOibWbimEBw3WKw/Xts3IND2kxHAWYWqWYRDIBFQcOwQEaFgLj9QcOjUEYJAXjhzWKwqJxRqJbuTixHA=OjviqU57N9QcOibWbimEBw3WKw/XO13IaV3FmFVkxHAWlM0=bwAle9QcOibWbimEBw3WKw6JSG3IND2kxHAWYWqWYRDIBFQcOFAWBFgIe9QcOibWbimEBw3WKw0WlM3IaV3=aFVkxHAWlM0=bwAle9QcOibWbimEBw3WKvbJxF3IND2kxHAWYWqWYRDIBFQctM0=mFgLj9QcOjUEYJAXjhzWKwqJxRqJbuTixHAJxGPiqU57N9QcOibWbimEBw3WKv1WaFgLj9QcOjUEYJAXjhzWKwqJxRqJbuTixHAXSvviqU57l=e8YEDol2CIj9QcOEY=bEvWm/zWKvmXO1qExMgcPiU5KNq8mHzWKwx=YJxJSR27SezWKvmXO1qExMnza/zWKw/=S=YXOv8kxHAWYWqWYRDIBFQcO5mJaFgkSezWKwqJxRqJbuTixHA=bEviq1VkxHAWlM0=bwAle9QcOibWbimEBw3WKw/=SM3IND2kxHAWYWqWYRDIBFQcOvYJaFgLj9QcOjUEYJAXjhzWKwqJxRqJbuTixHAEluQiqU57l=e8YEDol2CIj9QcORPWYJqWa/zWKwxXtseJlsVkxHAW0s6Ex10Lj9QcOjUWbJQXaUnFYND5kiCRj9QcORPWYJqWavzWKwxXtseJlsVkxHAW0s6Ex10Lj9QcOjUWbJQXa1nza/zWKw/=S=YXOv8kxHAWYWqWYRDIBFQcOvYWqFgkSezWKwqJxRqJbuTixHAE0imiq1VkxHAWlM0=bwAle9QcOibWbimEBw3WKv1Wb13IND2=3NCJPpg80ATkxHAWbse=bp1Lj9QctiU=Su6=mUnFYND5kiCRj9QcOR/ElJD=O6zWKvm=lMDXlJnza/zWKw/=S=YXOv8kxHAWYWqWYRDIBFQcOMx=aFgkSeY5l6b5tU48mvzWKwqXlM6JbwVkxHAWSFx=Ou6Ikhq=kpeFYAwkxHAWbUUXlRA7SD2kxHAWSFx=Ou6XPDVkxHAWlM0=bwAle9QcOibWbimEBw3WKvmWOF3IND2kxHAWYWqWYRDIBFQctEvEaFgLj9QcOjUEYJAXjhzWKwqJxRqJbuTixHA=Sw6iqU57N9QcOibWbimEBw3WKw/Jbs3Ia/zWKw/=S=YXOv8kxHAWYWqWYRDIBFQctRxiqU57N9QcOibWbimEBw3WKwDWSF3Ia/zWKw/=S=YXOv8kxHAWYWqWYRDIBFQcOsA=mFgkSezWKwqJxRqJbuTixHA=mFgLj9QcOjUEYJAXjhzWKwqJxRqJbuTixHAJSpUiqU57N9QcOibWbimEBw3WKv1JSM3Ia/zWKw/=S=YXOv8kxHAWYWqWYRDIBFQcOuQXBFgkSeY5l6b5tU48mvzWKwDJSRxWSGVkxHAWSs0JYWxIkhq=kpeFYAwkxHAEtsqWxsQIj9QcOs/EYibWq1nza/zWKw/=S=YXOv8kxHAWYWqWYRDIBFQcOvviqU57l=e8YEDol2CIj9QcONvJb=UEa/zWKweEOueExWgcPiU5KNq8mHzWKweJlR0=SMv7SezWKweEOueExWnza/zWKw/=S=YXOv8kxHAWYWqWYRDIBFQcOw6WBFgkSezWKwqJxRqJbuTixHAJSG3Ia/zWKw/=S=YXOv8kxHAWYWqWYRDIBFQctseEmFgkSezWKwqJxRqJbuTixHA=buPiq1di02Aiq/zWKw/=S=YXOv8kxHAWYWqWYRDIBFQctpbWqFgkSeY5l6b5tU48mvzWKw/JxUvJS1VkxHAWYW6EO=YIkhq=kpeFYAwkxHAWlW6Jls6RSD2kxHAWYW6EO=YXPDVkxHAWlM0=bwAle9QcOibWbimEBw3WKvUE0R3IND2kxHAWYWqWYRDIBFQcO=YXaFgLj9QcOjUEYJAXjhzWKwqJxRqJbuTixHAEYpYiqU57N9QcOibWbimEBw3WKwqEbM3Ia/zWKw/=S=YXOv8kxHAWYWqWYRDIBFQcOMxEBFgkSeY5l6b5tU48mvzWKw/=luPJb1VkxHAWxwAWbvUIkhq=kpeFYAwkxHAWlN1E0R67SD2kxHAWxwAWbvUXPDVkxHAWlM0=bwAle9QcOibWbimEBw3WKvUJbW3IND2kxHAWYWqWYRDIBFQcOWA=BFgLj9QcOjUEYJAXjhzWKwqJxRqJbuTixHAEOseiqU57l=e8YEDol2CIj9QcOWxEtsqXB/zWKwxWtNmEYRgcPiU5KNq8mHzWKwxWxpvWbw27SezWKwxWtNmEYRnza/zWKw/=S=YXOv8kxHAWYWqWYRDIBFQcOWeEqFgkSezWKwqJxRqJbuTixHAEYseiq1VkxHAWlM0=bwAle9QcOibWbimEBw3WKwxEqFgkSezWKwqJxRqJbuTixHAExMqiq1VkxHAWlM0=bwAle9QcOibWbimEBw3WKvvWOs3IND2=3NCJPpg80ATkxHAESJDJxJ0Lj9QcORAWYM/=mUnFYND5kiCRj9QcOM0EtW0EbD27N9QcORAWYM/=bh2Lj9QcOjUEYJAXjhzWKwqJxRqJbuTixHAWx16iqU57N9QcOibWbimEBw3WKwxWSu3Ia/zWKw/=S=YXOv8kxHAWYWqWYRDIBFQcOjmJqFgkSezWKwqJxRqJbuTixHA=lWAiq1VkxHAWlM0=bwAle9QcOibWbimEBw3WKw/WaFgkSeY5l6b5tU48mvzWKwDXOMqW0JVkxHAEOpmWYM/Ikhq=kpeFYAwkxHAEOweWbEY7SD2kxHAEOpmWYM/XPDVkxHAWlM0=bwAle9QcOibWbimEBw3WKweXOM3IND2=3NCJPpg80ATkxHAWS1PXOseLj9QcOjUEtW0WaUnFYND5kiCRj9QcOs6Exw/ESD27N9QcOjUEtW0WSh2Lj9QcOjUEYJAXjhzWKwqJxRqJbuTixHAJbG3IND2kxHAWYWqWYRDIBFQctW0XBFgLj9QcOjUEYJAXjhzWKwqJxRqJbuTixHAExRDiqU57N9QcOibWbimEBw3WKw6ESF3Ia/zWKw/=S=YXOv8kxHAWYWqWYRDIBFQcO51EmFgkSeY5l6b5tU48mvzWKwD=bR/W0RVkxHAWSG0JSJeLj9QcOjv=ti1Ea/zWKwx=SW0ESsgcPiU5KNq8mHzWKwD=bR/W0RTkxHAWSG0JSJeLj9QcOjv=ti1Ea/zWKwx=SW0ESsgXPDVkxHAWlM0=bwAle9QcOibWbimEBw3WKvbJlJ3IND2=3NCJPpg80ATkxHAWlpUEOEmLj9QcOEUJSMDEBUnFYND5kiCRj9QcOj1=SuxJms27N9QcOEUJSMDEOh2Lj9QcOjUEYJAXjhzWKwqJxRqJbuTixHAWSw/iqU57N9QcOibWbimEBw3WKw/=SW3Ia/zWKw/=S=YXOv8kxHAWYWqWYRDIBFQcOM0XaFgkSezWKwqJxRqJbuTixHAJSR6iq1VkxHAWlM0=bwAle9QcOibWbimEBw3WKwq=OJ3IND2=3NCJPpg80ATkxHAWxMQJxu/Lj9QcOMAJYseXBUnFYND5kiCRj9QcOWeWtWDWahzWKweXtivESwnza/zWKw/=S=YXOv8kxHAWYWqWYRDIBFQcO5bJmFgkSezWKwqJxRqJbuTixHAJSM3Ia/zWKw/=S=YXOv8kxHAWYWqWYRDIBFQctiYJmFgkSeY5l6b5tU48mvzWKweWS10=YsVkxHAWxjUJSU1Ikhq=kpeFYAwkxHAESs6EY=v7SD2kxHAWxjUJSU1XPDVkxHAWlM0=bwAle9QcOibWbimEBw3WKvm=bW3IND2kxHAWYWqWYRDIBFQctReiq1VkxHAWlM0=bwAle9QcOibWbimEBw3WKvmWO13IND2kxHAWYWqWYRDIBFQcOuxXaFgLj9QcOjUEYJAXjhzWKwqJxRqJbuTixHAEtR0iqU57N9QcOibWbimEBw3WKweiq1dkxHAWYWqWYRDIBFQctJxEqFgLj9QcOjUEYJAXjhzWKwqJxRqJbuTixHAJlN1iqU57N9QcOibWbimEBw3WKvv=Ss3Ia/zWKw/=S=YXOv8kxHAWYWqWYRDIBFQctEmXBFgkSezWKwqJxRqJbuTixHAJSM/iq1VkxHAWlM0=bwAle9QcOibWbimEBw3WKwPWSJ3IND2kxHAWYWqWYRDIBFQctiUEmFgLj9QcOjUEYJAXjhzWKwqJxRqJbuTixHA=SMqiqU57N9QcOibWbimEBw3WKvbESW3IahzWKwqJxRqJbuTixHAWSG6iq1VkxHAWlM0=bwAle9QcOibWbimEBw3WKvUJ0s3IND2kxHAWYWqWYRDIBFQctR6JqFgLj9QcOjUEYJAXjhzWKwqJxRqJbuTixHAEYWeiqU57l=e8YEDol2CIj9QcOMxXSM0Wm/zWKw/E0NvXtRgcPiU5KNq8mHzWKweWx1eEbRv7SezWKw/E0NvXtRnza/zWKw/=S=YXOv8kxHAWYWqWYRDIBFQcOJAXaFgkSezWKwqJxRqJbuTixHAJ0Weiq1VkxHAWlM0=bwAle9QcOibWbimEBw3WKw6=Ys3IND2=3NCJPpg80ATkxHAWbv1XSRALj9QcORqXSs0EmUnFYND5kiCRj9QcORA=O1qXBvzWKwqWb1/EbJgXPDVkxHAWlM0=bwAle9QcOibWbimEBw3WKvYXSG3IND2=3NCJPpg80ATkxHAEOuP=tMDLj9QcOpY=bFxWqUnFYND5kiCRj9QcOuDE0pUEBhzWKwD=YJPWxWnza/zWKw/=S=YXOv8kxHAWYWqWYRDIBFQcOux=BFgkSeY5l6b5tU48mvzWKv1EYWQWSuVkxHAXOR/WxFqIkhq=kpeFYAwkxHA=O=bWOsDIe9QcOwqWSWPWbh2Lj9QcOjUEYJAXjhzWKwqJxRqJbuTixHAE0M/iqU57l=e8YEDol2CIj9QcORD=bUbWq/zWKwxJxiv=OugcPiU5KNq8mHzWKwqEtJ6JxW27SezWKwxJxiv=Ounza/zWKw/=S=YXOv8kxHAWYWqWYRDIBFQctM6WqFgkSezWKwqJxRqJbuTixHAEluxiq1VkxHAWlM0=bwAle9QcOibWbimEBw3WKvUJbu3IND2=3NCJPpg80ATkxHAWlue=SjvLj9QcOuQW0jY=aUnFYND5kiCRj9QcOj1ElM/Jas27N9QcOuQW0jY=Sh2Lj9QcOjUEYJAXjhzWKwqJxRqJbuTixHAWYRAiqU57N9QcOibWbimEBw3WKw6ElM3Ia/zWKw/=S=YXOv8kxHAWYWqWYRDIBFQcOvm=mFgkSeY5l6b5tU48mvzWKwxWxM6XOJVkxHAJSWe=tiUIkhq=kpeFYAwkxHAWxWeXSw0RSD2kxHAJSWe=tiUXPDVkxHAWlM0=bwAle9QcOibWbimEBw3WKw/JYM3IND2kxHAWYWqWYRDIBFQctJ/=mFgLj9QcOjUEYJAXjhzWKwqJxRqJbuTixHAEbHYiqU57N9QcOibWbimEBw3WKw6JYJ3Ia/zWKw/=S=YXOv8kxHAWYWqWYRDIBFQcO=vWBFgkSeY5l6b5tU48mvzWKwxEOJPESFVkxHAWb=UEbWPIkhq=kpeFYAwkxHAWxu0ExMPIj9QcOR0=SJxEq1nza/zWKw/=S=YXOv8kxHAWYWqWYRDIBFQcO=mEaFgkSezWKwqJxRqJbuTixHAJxRAiq1dkxHAWYWqWYRDIBFQcti1JqFgIq5CLqFVkxHAWlM0=bwAle9QcOibWbimEBw3WKwe=lW3IND2kxHAWYWqWYRDIBFQcOwqJqFgLj9QcOjUEYJAXjhzWKwqJxRqJbuTixHAEO13IND2kxHAWYWqWYRDIBFQctWxXBFgLj9QcOjUEYJAXjhzWKwqJxRqJbuTixHAEtRqiqU57l=e8YEDol2CIj9QcOue=ONYWq/zWKw/JYWQElJgcPiU5KNq8mHzWKwDElue=bWv7SezWKw/JYWQElJnza/zWKw/=S=YXOv8kxHAWYWqWYRDIBFQcOw/EBFgkSezWKwqJxRqJbuTixHAWxWAiq1VkxHAWlM0=bwAle9QcOibWbimEBw3WKvUEtW3IND2=3NCJPpg80ATkxHAESUU=ONULj9QcORAWOG0EaUnFYND5kiCRj9QcOM6=lue=as27N9QcORAWOG0ESh2Lj9QcOjUEYJAXjhzWKwqJxRqJbuTixHAEbF3IND2kxHAWYWqWYRDIBFQcOvvXaFgLj9QcOjUEYJAXjhzWKwqJxRqJbuTixHAJlpUiqU57l=e8YEDol2CIj9QcOW0JxpvJq/zWKweJ0jmE0JgcPiU5KNq8mHzWKwxEYWDJlWdkxHAElEvJb5YXPDVkxHAWlM0=bwAle9QcOibWbimEBw3WKv1Xts3IND2=3NCJPpg80ATkxHAWxwQXSGQLj9QcOMQW0J/WaUnFYND5kiCRj9QcOWAWO1QWBhzWKweWOEYWSsnza/zWKw/=S=YXOv8kxHAWYWqWYRDIBFQctuxXaFgkSezWKwqJxRqJbuTixHAWYJ3Ia/zWKw/=S=YXOv8kxHAWYWqWYRDIBFQcOJAJaFgkSeY5l6b5tU48mvzWKwDEYRe=SRVkxHAWYuQJSWeIkhq=kpeFYAwkxHAEO=mElMqIe9QcOi1WtsxESh2Lj9QcOjUEYJAXjhzWKwqJxRqJbuTixHAExJ6iqU57l=e8YEDol2CIj9QcOjUWlJ6Wa/zWKweJb=vExMgcPiU5KNq8mHzWKw/=SjYXSsTkxHAElR0JSFeISh2Lj9QcOjUEYJAXjhzWKwqJxRqJbuTixHAJbUviqU57N9QcOibWbimEBw3WKv1ES13Ia/zWKw/=S=YXOv8kxHAWYWqWYRDIBFQcO=vJaFgkSezWKwqJxRqJbuTixHAEYsAiq1diPpUiq/zWKw/=S=YXOv8kxHAWYWqWYRDIBFQctivEBFgkSeY5l6b5tU48mvzWKwqJxW0=YRgcPiU5KNq8mHzWKwqJxW0=YRTISh2Lj9QcOjUEYJAXjhzWKwqJxRqJbuTixHAEOMAiqU57N9QcOibWbimEBw3WKwq=Ou3IahzWKwqJxRqJbuTixHAXlWAiq1VkxHAWlM0=bwAle9QcOibWbimEBw3WKwDXlM3IND2kxHAWYWqWYRDIBFQcOjvEBFgLj9QcOjUEYJAXjhzWKwqJxRqJbuTixHAJluqiqU57N9QcOibWbimEBw3WKwDWSW3Ia/zWKw/=S=YXOv8kxHAWYWqWYRDIBFQcOjbJmFgkSeY5l6b5tU48mvzWKw/Jb1eJxuVkxHAEOM/EOHmIkhq=kpeFYAwkxHAWlR6ElWD7SezWKwDESsDWtRnza/zWKw/=S=YXOv8kxHAWYWqWYRDIBFQcOMAJaFgkSeY5l6b5tU48mvzWKwxJYM0JxMVkxHAJxR6WYW0Ikhq=kpeFYAwkxHAW0iUEYWe7U9QctWqXSibEbh2Lj9QcOjUEYJAXjhzWKwqJxRqJbuTixHAEbj1iqU57N9QcOibWbimEBw3WKvUWqFgLj9QcOjUEYJAXjhzWKwqJxRqJbuTixHAESUbiqU57N9QcOibWbimEBw3WKwPExM3Ia/zWKw/=S=YXOv8kxHAWYWqWYRDIBFQct=YEmFgkSezWKwqJxRqJbuTixHAJxFQiq1VkxHAWlM0=bwAle9QcOibWbimEBw3WKwqEls3IND2kxHAWYWqWYRDIBFQcOuq=mFgLj9QcOjUEYJAXjhzWKwqJxRqJbuTixHAJxJ0iqU57N9QcOibWbimEBw3WKwe=OF3Ia/zWKw/=S=YXOv8kxHAWYWqWYRDIBFQcO=b=aFgkSezWKwqJxRqJbuTixHAJx51iq1VkxHAWlM0=bwAle9QcOibWbimEBw3WKwqEOJ3IND2kxHAWYWqWYRDIBFQcOWPEmFgLj9QcOjUEYJAXjhzWKwqJxRqJbuTixHAElWQiqU57l=e8YEDol2CIj9QcOWe=tM0Wm/zWKw/=SpYWtJgcPiU5KNq8mHzWKwxElpUEbRdkxHAWlMD=bHYXPDVkxHAWlM0=bwAle9QcOibWbimEBw3WKv1Ex13IND2=3NCJPpg80ATkxHAWbMeWSFQLj9QcOMQJ0ueXBUnFYND5kiCRj9QcOReESsPWBhzWKweWtE1ESwnza/zWKw/=S=YXOv8kxHAWYWqWYRDIBFQctRx=BFgkSeY5l6b5tU48mvzWKwxWxM0JSFVkxHAWlJP=bRqIkhq=kpeFYAwkxHAWxWeEYsPIe9QcOjYE0JqWbh2Lj9QcOjUEYJAXjhzWKwqJxRqJbuTixHAJb16iqU57N9QcOibWbimEBw3WKwx=OG3IahzWKwqJxRqJbuTixHAEb=miq1VkxHAWlM0=bwAle9QcOibWbimEBw3WKvUExJ3IND2kxHAWYWqWYRDIBFQcOMeiq1dkxHAWYWqWYRDIBFQcOFeJqFgLj9QcOjUEYJAXjhzWKwqJxRqJbuTixHAXluDiqU57N9QcOibWbimEBw3WKwDWlJ3IahzWKwqJxRqJbuTixHAEOueiq1VkxHAWlM0=bwAle9QcOibWbimEBw3WKwAEYW3IND2kxHAWYWqWYRDIBFQcOE1WaFgIe9QcOibWbimEBw3WKvvWbs3Ia/zWKw/=S=YXOv8kxHAWYWqWYRDIBFQcO=U=aFgkSezWKwqJxRqJbuTixHAEOs/iq1dkxHAWYWqWYRDIBFQcOR0WaFgIe9QcOibWbimEBw3WKw6=OJ3IahzWKwqJxRqJbuTixHA=OR/iq1VkxHAWlM0=bwAle9QcOibWbimEBw3WKwDEbu3IND2=3NCJPpg80ATkxHAJSJQXORALj9QcOi1XOuQJmUnFYND5kiCRj9Qcts0WOwqXOD27N9QcOi1XOuQJbh2Lj9QcOjUEYJAXjhzWKwqJxRqJbuTixHAWYM3IND2kxHAWYWqWYRDIBFQcOFqWqFgLj9QcOjUEYJAXjhzWKwqJxRqJbuTixHAESw/iqU57l=e8YEDol2CIj9QcOWeEtsxEqUnFYND5kiCRj9QcOWeEtsxEqwgXPDVkxHAWlM0=bwAle9QcOibWbimEBw3WKvb=Ou3IND2kxHAWYWqWYRDIBFQcOwxiq1VkxHAWlM0=bwAle9QcOibWbimEBw3WKwAWtW3IND2kxHAWYWqWYRDIBFQctR0JqFgIe9QcOibWbimEBw3WKvUEts3Ia/zWKw/=S=YXOv8kxHAWYWqWYRDIBFQctMqJqFgkSezWKwqJxRqJbuTixHA=YuPiq1diPHUiq/zWKw/=S=YXOv8kxHAWYWqWYRDIBFQcO=Y=mFgkSezWKwqJxRqJbuTixHA=OR0iq1dkxHAWYWqWYRDIBFQcOUbiq1dkxHAWYWqWYRDIBFQcOMeEaFgIe9QcOibWbimEBw3WKvbWbs3IahzWKwqJxRqJbuTixHAESiviq1VkxHAWlM0=bwAle9QcOibWbimEBw3WKvUJYu3IND2kxHAWYWqWYRDIBFQctMQWaFgIe9QcOibWbimEBw3WKwq=bW3Ia/zWKw/=S=YXOv8kxHAWYWqWYRDIBFQcO1QWBFgkSezWKwqJxRqJbuTixHAElpviq1dkxHAWYWqWYRDIBFQctu/EqFgLj9QcOjUEYJAXjhzWKwqJxRqJbuTixHAJYs/iqU57N9QcOibWbimEBw3WKvvWbJ3IahzWKwqJxRqJbuTixHA=Owxiq1dieD3Lj9QcOjUEYJAXjhzWKwqJxRqJbuTixHAJxFeiqU57N9QcOibWbimEBw3WKvvWbJ3IahzWKwqJxRqJbuTixHAESsxiq1VkxHAWlM0=bwAle9QcOibWbimEBw3WKwDElJ3IND2kxHAWYWqWYRDIBFQctsqEmFgIe9QcOibWbimEBw3WKvYESJ3Ia/zWKw/=S=YXOv8kxHAWYWqWYRDIBFQctW/JqFgkSezWKwqJxRqJbuTixHAJSR0iq1dkxHAWYWqWYRDIBFQctEvEqFgLj9QcOjUEYJAXjhzWKwqJxRqJbuTixHAJSs6iqU57N9QcOibWbimEBw3WKvvWbJ3IahzWKwqJxRqJbuTixHA=OUbiq1VkxHAWlM0=bwAle9QcOibWbimEBw3WKvUWbJ3IND2kxHAWYWqWYRDIBFQctsqEmFgIe9QcOibWbimEBw3WKvb=YJ3Ia/zWKw/=S=YXOv8kxHAWYWqWYRDIBFQcOuqWmFgkSezWKwqJxRqJbuTixHAJSR0iq1dkxHAWYWqWYRDIBFQcOpm=BFgLj9QcOjUEYJAXjhzWKwqJxRqJbuTixHA=SpUiqU57N9QcOibWbimEBw3WKvvWbJ3IahzWKwqJxRqJbuTixHAJx1xiq1VkxHAWlM0=bwAle9QcOibWbimEBw3WKvvJSG3IND2kxHAWYWqWYRDIBFQctsqEmFgIe9QcOibWbimEBw3WKw/WYs3Ia/zWKw/=S=YXOv8kxHAWYWqWYRDIBFQcOFqWmFgkSezWKwqJxRqJbuTixHAJSR0iq1dkxHAWYWqWYRDIBFQcOJAEqFgLj9QcOjUEYJAXjhzWKwqJxRqJbuTixHAJSW/iqU57N9QcOibWbimEBw3WKvbWYJ3IahzWKwqJxRqJbuTixHAJxw6iq1dkxHAWYWqWYRDIBFQcOimXaFgLj9QcOjUEYJAXjhzWKwqJxRqJbuTixHAJxMeiqU57N9QcOibWbimEBw3WKvbWYJ3IahzWKwqJxRqJbuTixHAJYjYiq1dkxHAWYWqWYRDIBFQcOv1EmFgLj9QcOjUEYJAXjhzWKwqJxRqJbuTixHAJSNviqU57N9QcOibWbimEBw3WKwDWbw3IahzWKwqJxRqJbuTixHAEtiUiq1dkxHAWYWqWYRDIBFQcOvYWmFgIe9QcOibWbimEBw3WKwP=bs3Ia/zWKw/=S=YXOv8kxHAWYWqWYRDIBFQctM3IND2kxHAWYWqWYRDIBFQctibWBFgIe9QcOibWbimEBw3WKvbJbG3IahzWKwqJxRqJbuTixHAXtuAiq1die/AWb55iq/zWKw/=S=YXOv8kxHAWYWqWYRDIBFQcts/iqU57N9QcOibWbimEBw3WKvvWbJ3IahzWKwqJxRqJbuTixHAWS1eiq1die/AWb55iq/zWKw/=S=YXOv8kxHAWYWqWYRDIBFQcts0WaFgkSezWKwqJxRqJbuTixHAJSR0iq1dkxHAWYWqWYRDIBFQctpYXaFgIe9QcOibWbimEBw3WKweJYR3Ia/zWKw/=S=YXOv8kxHAWYWqWYRDIBFQctJ0JmFgkSezWKwqJxRqJbuTixHAJxiYiq1dkxHAWYWqWYRDIBFQcOvUEaFgIq55iq/zWKw/=S=YXOv8kxHAWYWqWYRDIBFQcOibWBFgkSezWKwqJxRqJbuTixHAJxiYiq1dkxHAWYWqWYRDIBFQcOj1EaFgIe9QcOibWbimEBw3WKwqJb13Ia/zWKw/=S=YXOv8kxHAWYWqWYRDIBFQcOUUWmFgkSezWKwqJxRqJbuTixHAWxu/iq1dkxHAWYWqWYRDIBFQcOvbEaFgIq5qiq/zWKw/=S=YXOv8kxHAWYWqWYRDIBFQcOuDEqFgkSezWKwqJxRqJbuTixHAWxNYiq1dkxHAWYWqWYRDIBFQctuxEaFgIe9QcOibWbimEBw3WKwPEYs3Ia/zWKw/=S=YXOv8kxHAWYWqWYRDIBFQcOsxWBFgkSezWKwqJxRqJbuTixHAXOuxiq1dkxHAWYWqWYRDIBFQcOM6EqFgLj9QcOjUEYJAXjhzWKwqJxRqJbuTixHAXSJQiqU57N9QcOibWbimEBw3WKw0EOs3IaV3=kR3Lj9QcOjUEYJAXjhzWKwqJxRqJbuTixHA=lNmiqU57N9QcOibWbimEBw3WKvU=S13IahzWKwqJxRqJbuTixHA=lWDiq1VkxHAWlM0=bwAle9QcOibWbimEBw3WKweXlJ3IND2kxHAWYWqWYRDIBFQcORPiq1diPR3Lj9QcOjUEYJAXjhzWKwqJxRqJbuTixHAWl=viqU57N9QcOibWbimEBw3WKw6=Ss3IahzWKwqJxRqJbuTixHA=OGxiq1dkxHAWYWqWYRDIBFQcO5viq1dkxHAWYWqWYRDIBFQcOMD=BFgLj9QcOjUEYJAXjhzWKwqJxRqJbuTixHAE0=viqU57N9QcOibWbimEBw3WKw6ExR3IahzWKwqJxRqJbuTixHA=lWDiq1VkxHAWlM0=bwAle9QcOibWbimEBw3WKw6=bR3IND2kxHAWYWqWYRDIBFQcOs0EqFgIe9QcOibWbimEBw3WKwq=SM3IahzWKwqJxRqJbuTixHAESp1iq1VkxHAWlM0=bwAle9QcOibWbimEBw3WKw6WYW3IND2kxHAWYWqWYRDIBFQcOMQ=aFgIe9QcOibWbimEBw3WKwqJ0R3IahzWKwqJxRqJbuTixHAXlReiq1VkxHAWlM0=bwAle9QcOibWbimEBw3WKv1=bw3IND2kxHAWYWqWYRDIBFQctRPWmFgIe9QcOibWbimEBw3WKvUJxu3Ia/zWKw/=S=YXOv8kxHAWYWqWYRDIBFQcOR6XBFgkSezWKwqJxRqJbuTixHAWliviq1VkxHAWlM0=bwAle9QcOibWbimEBw3WKv1=OJ3IND2kxHAWYWqWYRDIBFQcOUUWaFgIe9QcOibWbimEBw3WKweEtM3IahzWKwqJxRqJbuTixHA=SHUiq1dkxHAWYWqWYRDIBFQctR/WaFgIe9QcOibWbimEBw3WKw6=SG3Ia/zWKw/=S=YXOv8kxHAWYWqWYRDIBFQcOM/=aFgkSezWKwqJxRqJbuTixHAJSR0iq1dkxHAWYWqWYRDIBFQcOsPiq1dkxHAWYWqWYRDIBFQctJDWmFgLj9QcOjUEYJAXjhzWKwqJxRqJbuTixHAElWqiqU57N9QcOibWbimEBw3WKvvWbJ3IahzWKwqJxRqJbuTixHAXOw/iq1dkxHAWYWqWYRDIBFQcts/JaFgLj9QcOjUEYJAXjhzWKwqJxRqJbuTixHAWljYiqU57N9QcOibWbimEBw3WKw0JbF3IahzWKwqJxRqJbuTixHAWxuxiq1VkxHAWlM0=bwAle9QcOibWbimEBw3WKw/ESW3IND2kxHAWYWqWYRDIBFQcOuqXBFgIe9QcOibWbimEBw3WKwDJYM3IahzWKwqJxRqJbuTixHAXtJqiq1dkxHAWYWqWYRDIBFQcOJ0WmFgLj9QcOjUEYJAXjhzWKwqJxRqJbuTixHAWSHUiqU57N9QcOibWbimEBw3WKwxWbs3IahzWKwqJxRqJbuTixHAJbsPiq1VkxHAWlM0=bwAle9QcOibWbimEBw3WKvYXSw3IND2kxHAWYWqWYRDIBFQctJPEaFgIe9QcOibWbimEBw3WKw/Wbs3Ia/zWKw/=S=YXOv8kxHAWYWqWYRDIBFQcti1=BFgkSezWKwqJxRqJbuTixHAWS13IaV35tw3Lj9QcOjUEYJAXjhzWKwqJxRqJbuTixHAJxMAiqU57N9QcOibWbimEBw3WKv1JSG3IahzWKwqJxRqJbuTixHAEtWAiq1VkxHAWlM0=bwAle9QcOibWbimEBw3WKv1JYR3IND2kxHAWYWqWYRDIBFQctWq=mFgIe9QcOibWbimEBw3WKwPJYJ3IahzWKwqJxRqJbuTixHAWSGDiq1VkxHAWlM0=bwAle9QcOibWbimEBw3WKwDXSs3IND2kxHAWYWqWYRDIBFQcOvvJqFgIe9QcOibWbimEBw3WKv1EaFgIe9QcOibWbimEBw3WKwqJSs3IahzWKwqJxRqJbuTixHA=OWxiq1VkxHAWlM0=bwAle9QcOibWbimEBw3WKweJb13IND2kxHAWYWqWYRDIBFQcOUUWaFgIe9QcOibWbimEBw3WKv1WOW3IahzWKwqJxRqJbuTixHA=Sw3Ia/zWKw/=S=YXOv8kxHAWYWqWYRDIBFQcONbWaFgkSezWKwqJxRqJbuTixHA=bFeiq1diP13Lj9QcOjUEYJAXjhzWKwqJxRqJbuTixHAE0M6iqU57N9QcOibWbimEBw3WKw6=Ss3IahzWKwqJxRqJbuTixHAESpUiq1dkxHAWYWqWYRDIBFQctMQ=aFgIe9QcOibWbimEBw3WKvb=OF3Ia/zWKw/=S=YXOv8kxHAWYWqWYRDIBFQctNUJqFgkSezWKwqJxRqJbuTixHAXSFqiq1dkxHAWYWqWYRDIBFQcOUvJqFgLj9QcOjUEYJAXjhzWKwqJxRqJbuTixHA=Su0iqU57N9QcOibWbimEBw3WKw/EbF3IahzWKwqJxRqJbuTixHAWYMeiq1dkxHAWYWqWYRDIBFQcOEU=aFgLj9QcOjUEYJAXjhzWKwqJxRqJbuTixHA=YsPiqU57N9QcOibWbimEBw3WKweWtM3IahzWKwqJxRqJbuTixHAExjviq1dkxHAWYWqWYRDIBFQcO=Yiq1VkxHAWlM0=bwAle9QcOibWbimEBw3WKwxEls3IND2kxHAWYWqWYRDIBFQcOweJqFgIq5Ciq/zWKw/=S=YXOv8kxHAWYWqWYRDIBFQcOwQ=mFgkSezWKwqJxRqJbuTixHA=tJPiq1dkxHAWYWqWYRDIBFQcONvXBFgIe9QcOibWbimEBw3WKw6JmFgLj9QcOjUEYJAXjhzWKwqJxRqJbuTixHAJxW0iqU57N9QcOibWbimEBw3WKvbWYJ3IahzWKwqJxRqJbuTixHA=SFAiq1dkxHAWYWqWYRDIBFQcOFxWmFgLj9QcOjUEYJAXjhzWKwqJxRqJbuTixHAXONmiqU57N9QcOibWbimEBw3WKvbWYJ3IahzWKwqJxRqJbuTixHA=tNviq1dkxHAWYWqWYRDIBFQcOim=aFgLj9QcOjUEYJAXjhzWKwqJxRqJbuTixHAJxH1iqU57N9QcOibWbimEBw3WKvbWYJ3IahzWKwqJxRqJbuTixHAEx5Uiq1dkxHAWYWqWYRDIBFQcO5b=aFgLj9QcOjUEYJAXjhzWKwqJxRqJbuTixHAEYWPiqU57N9QcOibWbimEBw3WKwxEOs3IahzWKwqJxRqJbuTixHAElMqiq1di02Ciq/zWKw/=S=YXOv8kxHAWYWqWYRDIBFQctWxEBFgkSezWKwqJxRqJbuTixHAWxNYiq1dkxHAWYWqWYRDIBFQctWP=aFgIe9QcOibWbimEBw3WKvUEbG3Ia/zWKw/=S=YXOv8kxHAWYWqWYRDIBFQcOJ6WmFgkSezWKwqJxRqJbuTixHAXOuxiq1dkxHAWYWqWYRDIBFQcORqEBFgIq5DoBFVkxHAWlM0=bwAle9QcOibWbimEBw3WKvU=Sw3IND2kxHAWYWqWYRDIBFQctWPWmFgIe9QcOibWbimEBw3WKw6JSF3Ia/zWKw/=S=YXOv8kxHAWYWqWYRDIBFQcOUUJaFgkSezWKwqJxRqJbuTixHA=bFeiq1dkxHAWYWqWYRDIBFQctuP=BFgLj9QcOjUEYJAXjhzWKwqJxRqJbuTixHAXt=biqU57N9QcOibWbimEBw3WKwD=Os3IahzWKwqJxRqJbuTixHAExE1iq1die/AWb55iq/zWKw/=S=YXOv8kxHAWYWqWYRDIBFQctM0EaFgkSezWKwqJxRqJbuTixHAElJ/iq1VkxHAWlM0=bwAle9QcOibWbimEBw3WKw0Ebu3IND2kxHAWYWqWYRDIBFQctsP=aFgIe9QcOibWbimEBw3WKvY=Sw3IahzWKwqJxRqJbuTixHAJb5viq1VkxHAWlM0=bwAle9QcOibWbimEBw3WKwAEBFgkSezWKwqJxRqJbuTixHAESMQiq1VkxHAWlM0=bwAle9QcOibWbimEBw3WKwAWBFgkSezWKwqJxRqJbuTixHAJSR0iq1dkxHAWYWqWYRDIBFQcOEmEmFgIe9QcOibWbimEBw3WKw0E0J3Ia/zWKw/=S=YXOv8kxHAWYWqWYRDIBFQcOMQEmFgkSezWKwqJxRqJbuTixHA=tsQiq1dkxHAWYWqWYRDIBFQcOivWaFgIq56FmFVkxHAWlM0=bwAle9QcOibWbimEBw3WKv1XOR3IND2kxHAWYWqWYRDIBFQctJPEaFgIe9QcOibWbimEBw3WKvUWlR3Ia/zWKw/=S=YXOv8kxHAWYWqWYRDIBFQcts/WqFgkSezWKwqJxRqJbuTixHAEximiq1dkxHAWYWqWYRDIBFQcOM6XBFgLj9QcOjUEYJAXjhzWKwqJxRqJbuTixHAExHbiqU57N9QcOibWbimEBw3WKv1=bF3IahzWKwqJxRqJbuTixHAXSp1iq1dkxHAWYWqWYRDIBFQcOUvWqFgLj9QcOjUEYJAXjhzWKwqJxRqJbuTixHAJ0M6iqU57N9QcOibWbimEBw3WKwD=Os3IahzWKwqJxRqJbuTixHAXSGxiq1VkxHAWlM0=bwAle9QcOibWbimEBw3WKvbWtJ3IND2kxHAWYWqWYRDIBFQctpYEqFgIe9QcOibWbimEBw3WKwDW0s3IahzWKwqJxRqJbuTixHAXlWDiq1VkxHAWlM0=bwAle9QcOibWbimEBw3WKwDXSu3IND2kxHAWYWqWYRDIBFQcOvvJqFgIe9QcOibWbimEBw3WKv1EaFgIe9QcOibWbimEBw3WKwqJSs3IahzWKwqJxRqJbuTixHAW0RQiq1VkxHAWlM0=bwAle9QcOibWbimEBw3WKvvWx13IND2kxHAWYWqWYRDIBFQcOWDWaFgIe9QcOibWbimEBw3WKwe=SR3IahzWKwqJxRqJbuTixHA=tu/iq1VkxHAWlM0=bwAle9QcOibWbimEBw3WKvmJYM3IND2kxHAWYWqWYRDIBFQcOWe=mFgIe9QcOibWbimEBw3WKvbE0M3IahzWKwqJxRqJbuTixHA=SG0iq1VkxHAWlM0=bwAle9QcOibWbimEBw3WKvbJlW3IND2kxHAWYWqWYRDIBFQcOwDWqFgIe9QcOibWbimEBw3WKwAElM3IaV3FmFVkxHAWlM0=bwAle9QcOibWbimEBw3WKvvJSw3IND2kxHAWYWqWYRDIBFQcOj1XaFgIq5vFmFVkxHAWlM0=bwAle9QcOibWbimEBw3WKvvJYW3IND2kxHAWYWqWYRDIBFQctJPEaFgIe9QcOibWbimEBw3WKwxWOW3Ia/zWKw/=S=YXOv8kxHAWYWqWYRDIBFQcOu6=BFgkSezWKwqJxRqJbuTixHA=S1qiq1VkxHAWlM0=bwAle9QcOibWbimEBw3WKv1=lu3IND2kxHAWYWqWYRDIBFQcts0=mFgIe9QcOibWbimEBw3WKweWaFgLj9QcOjUEYJAXjhzWKwqJxRqJbuTixHA=YjmiqU57N9QcOibWbimEBw3WKwDWbw3IahzWKwqJxRqJbuTixHAEtiUiq1dkxHAWYWqWYRDIBFQcOvYWmFgIe9QcOibWbimEBw3WKvmWbu3Ia/zWKw/=S=YXOv8kxHAWYWqWYRDIBFQcOUbJqFgkSezWKwqJxRqJbuTixHAWxR/iq1dkxHAWYWqWYRDIBFQcOuQWaFgLj9QcOjUEYJAXjhzWKwqJxRqJbuTixHAJbHbiqU57N9QcOibWbimEBw3WKweJSG3Ia/zWKw/=S=YXOv8kxHAWYWqWYRDIBFQcONbEqFgkSezWKwqJxRqJbuTixHA=ls6iq1dkxHAWYWqWYRDIBFQcOMxEqFgIe9QcOibWbimEBw3WKvbWxR3IahzWKwqJxRqJbuTixHA=Op1iq1VkxHAWlM0=bwAle9QcOibWbimEBw3WKwxE0s3IND2kxHAWYWqWYRDIBFQctWq=mFgIe9QcOibWbimEBw3WKvvWlW3Ia/zWKw/=S=YXOv8kxHAWYWqWYRDIBFQcOMe=aFgkSezWKwqJxRqJbuTixHAJSGDiq1dkxHAWYWqWYRDIBFQctNb=aFgIe9QcOibWbimEBw3WKweE0u3IahzWKwqJxRqJbuTixHAJSibiq1dkxHAWYWqWYRDIBFQcOM/WmFgLj9QcOjUEYJAXjhzWKwqJxRqJbuTixHA=bE1iqU57N9QcOibWbimEBw3WKw6=Ss3IahzWKwqJxRqJbuTixHAESpUiq1dkxHAWYWqWYRDIBFQctMQ=aFgIe9QcOibWbimEBw3WKvv=YJ3Ia/zWKw/=S=YXOv8kxHAWYWqWYRDIBFQctj1EmFgkSezWKwqJxRqJbuTixHAEYs0iq1VkxHAWlM0=bwAle9QcOibWbimEBw3WKw/WSG3IND2kxHAWYWqWYRDIBFQcOs0EqFgIe9QcOibWbimEBw3WKwq=SM3IahzWKwqJxRqJbuTixHAEtMeiq1VkxHAWlM0=bwAle9QcOibWbimEBw3WKw/W0W3IND2kxHAWYWqWYRDIBFQcO1PWmFgIe9QcOibWbimEBw3WKwe=lM3Ia/zWKw/=S=YXOv8kxHAWYWqWYRDIBFQcOJxEqFgkSezWKwqJxRqJbuTixHAJxiYiq1dkxHAWYWqWYRDIBFQcOMDXBFgIe9QcOibWbimEBw3WKvvEOM3Ia/zWKw/=S=YXOv8kxHAWYWqWYRDIBFQcO=b=mFgkSezWKwqJxRqJbuTixHAJxiYiq1dkxHAWYWqWYRDIBFQcOMDXBFgIe9QcOibWbimEBw3WKvvWbM3IahzWKwqJxRqJbuTixHAWbwDiq1VkxHAWlM0=bwAle9QcOibWbimEBw3WKwxWbw3IND2kxHAWYWqWYRDIBFQctsqEmFgIe9QcOibWbimEBw3WKvvExw3Ia/zWKw/=S=YXOv8kxHAWYWqWYRDIBFQcOJ6JmFgkSezWKwqJxRqJbuTixHAEtu/iq1dkxHAWYWqWYRDIBFQctJ0=aFgLj9QcOjUEYJAXjhzWKwqJxRqJbuTixHAXtRPiqU57N9QcOibWbimEBw3WKwD=Os3IahzWKwqJxRqJbuTixHAJxG3Ia/zWKw/=S=YXOv8kxHAWYWqWYRDIBFQcOw0WqFgkSezWKwqJxRqJbuTixHAWxu/iq1dkxHAWYWqWYRDIBFQctRqJqFgLj9QcOjUEYJAXjhzWKwqJxRqJbuTixHA=tRAiqU57N9QcOibWbimEBw3WKwxElJ3IahzWKwqJxRqJbuTixHAEbMPiq1di0u3Lj9QcOjUEYJAXjhzWKwqJxRqJbuTixHAWxJxiqU57N9QcOibWbimEBw3WKwAEOW3IahzWKwqJxRqJbuTixHA=Sv1iq1VkxHAWlM0=bwAle9QcOibWbimEBw3WKvUESG3IND2kxHAWYWqWYRDIBFQcOR/JmFgLj9QcOjUEYJAXjhzWKwqJxRqJbuTixHAWxM6iqU57N9QcOibWbimEBw3WKvvWtW3IaV35mFVkxHAWlM0=bwAle9QcOibWbimEBw3WKwAE0u3IND2kxHAWYWqWYRDIBFQctibJmFgIe9QcOibWbimEBw3WKw/XtR3Ia/zWKw/=S=YXOv8kxHAWYWqWYRDIBFQcOEvWaFgkSezWKwqJxRqJbuTixHAJSR0iq1dkxHAWYWqWYRDIBFQcOibXBFgIe9QcOibWbimEBw3WKwPJbF3Ia/zWKw/=S=YXOv8kxHAWYWqWYRDIBFQcOW/=BFgkSezWKwqJxRqJbuTixHAJb1xiq1dkxHAWYWqWYRDIBFQcOimJaFgIe9QcOibWbimEBw3WKvv=OW3Ia/zWKw/=S=YXOv8kxHAWYWqWYRDIBFQcOJeWBFgkSezWKwqJxRqJbuTixHAEbNbiq1VkxHAWlM0=bwAle9QcOibWbimEBw3WKweJbG3IND2=3NCJPpg80ATkxHAEtWDWb5vLj9QcOu/=bweEaUnFYND5kiCRj9QcOpbEORPJSD27N9QcOu/=bweESh2Lj9QcOjUEYJAXjhzWKwqJxRqJbuTixHAEYMeiqU57N9QcOibWbimEBw3WKvm=lM3Ia/zWKw/=S=YXOv8kxHAWYWqWYRDIBFQcONmWaFgkSezWKwqJxRqJbuTixHAWYuDiq1dkxHAWYWqWYRDIBFQcOFqEqFgLj9QcOjUEYJAXjhzWKwqJxRqJbuTixHA=SWAiqU57N9QcOibWbimEBw3WKvYWb13Ia/zWKw/=S=YXOv8kxHAWYWqWYRDIBFQcO=vWqFgkSezWKwqJxRqJbuTixHA=SuPiq1dkxHAWYWqWYRDIBFQctRP=mFgIe9QcOibWbimEBw3WKwxW0u3IahzWKwqJxRqJbuTixHAJYJQiq1dkxHAWYWqWYRDIBFQcO1QJqFgIe9QcOibWbimEBw3WKv1=Sw3IahzWKwqJxRqJbuTixHAXtR3IahzWKwqJxRqJbuTixHAW0R/iq1VkxHAWlM0=bwAle9QcOibWbimEBw3WKvm=bw3IND2=3NCJPpg80ATkxHAWbE1WtJPLj9QcOuxXljmWqUnFYND5kiCRj9QcORx=OHYExD2kxHAEOW6JlRxXPDVkxHAWlM0=bwAle9QcOibWbimEBw3WKwAWlW3IND2=3NCJPpg80ATkxHAElpmES51Lj9QcORQ=SJ6=mUnFYND5kiCRj9QcON1JbMP=OQ2kxHAWbHUEbUYXPDVkxHAWlM0=bwAle9QcOibWbimEBw3WKwx=bM3IND2=3NCJPpg80ATkxHAWbweJbJ/Lj9QcOWxW0NmWmUnFYND5kiCRj9QcORAElR0WavzWKwxWxEUJbRgXPDVkxHAWlM0=bwAle9QcOibWbimEBw3WKvv=YR3IND2=3NCJPpg80ATkxHAWbjm=lsxLj9QcOjm=tNYEaUnFYND5kiCRj9QcOR/JYNvWqvzWKw/JYpU=bMgXPDVkxHAWlM0=bwAle9QcOibWbimEBw3WKwq=Yu3IND2kxHAWYWqWYRDIBFQctJQ=mFgLj9QcOjUEYJAXjhzWKwqJxRqJbuTixHAEbuQiqU57N9QcOibWbimEBw3WKvbExF3IahzWKwqJxRqJbuTixHAJS5miq1VkxHAWlM0=bwAle9QcOibWbimEBw3WKwqEYu3IND2=3NCJPpg80ATkxHAEOGA=lMQLj9QctjYWb16WaUnFYND5kiCRj9QcOuQXtNUWBvzWKvv=bR6XSsgXPDVkxHAWlM0=bwAle9QcOibWbimEBw3WKvmXOw3IND2=3NCJPpg80ATkxHAEOvU=YJxLj9QcOMqEOs6=mUnFYND5kiCRj9QcOuA=l=YWxD27N9QcOMqEOs6=bh2Lj9QcOjUEYJAXjhzWKwqJxRqJbuTixHAXOpbiqU57N9QcOibWbimEBw3WKvvWxu3Ia/zWKw/=S=YXOv8kxHAWYWqWYRDIBFQctMDXBFgkSeY5l6b5tU48mvzWKw/Jb=UXSWVkxHAESEmE0MDIkhq=kpeFYAwkxHAWlR0=S1xRSD2kxHAESEmE0MDXPDVkxHAWlM0=bwAle9QcOibWbimEBw3WKvvWOw3IND2kxHAWYWqWYRDIBFQcONb=mFgLj9QcOjUEYJAXjhzWKwqJxRqJbuTixHAESWAiqU57N9QcOibWbimEBw3WKwDXOF3Ia/zWKw/=S=YXOv8kxHAWYWqWYRDIBFQcti1EqFgkSezWKwqJxRqJbuTixHA=bF0iq1VkxHAWlM0=bwAle9QcOibWbimEBw3WKvYEbJ3IND2kxHAWYWqWYRDIBFQctWD=aFgLj9QcOjUEYJAXjhzWKwqJxRqJbuTixHA=tp1iqU57l=e8YEDol2CIj9QcOueXtuQJa/zWKw/Wb1qJxwgcPiU5KNq8mHzWKwDESv1Wtsv7SezWKw/Wb1qJxwnza/zWKw/=S=YXOv8kxHAWYWqWYRDIBFQctE1XBFgkSezWKwqJxRqJbuTixHAXSUmiq1VkxHAWlM0=bwAle9QcOibWbimEBw3WKw0ESW3IND2kxHAWYWqWYRDIBFQctjmEqFgLj9QcOjUEYJAXjhzWKwqJxRqJbuTixHAE0pYiqU57N9QcOibWbimEBw3WKw6E0W3Ia/zWKw/=S=YXOv8kxHAWYWqWYRDIBFQct=m=mFgkSezWKwqJxRqJbuTixHAJYMDiq1VkxHAWlM0=bwAle9QcOibWbimEBw3WKw6W0s3IND2=3NCJPpg80ATkxHAESNUWbFPLj9QcOMP=tM0WmUnFYND5kiCRj9QcOMe=SRPEqs27N9QcOMP=tM0Wbh2Lj9QcOjUEYJAXjhzWKwqJxRqJbuTixHAEOu3IND2kxHAWYWqWYRDIBFQctu0EqFgLj9QcOjUEYJAXjhzWKwqJxRqJbuTixHAWxw6iqU57l=e8YEDol2CIj9QctWDWtWQEa/zWKweWO5YJlWgcPiU5KNq8mHzWKvbEOHbWOMv7SezWKweWO5YJlWnza/zWKw/=S=YXOv8kxHAWYWqWYRDIBFQcOwxWqFgkSezWKwqJxRqJbuTixHAJYjbiq1VkxHAWlM0=bwAle9QcOibWbimEBw3WKw6WxJ3IND2=3NCJPpg80ATkxHAEOFA=b=vLj9QcOWQExJAWmUnFYND5kiCRj9QcOuPXtJ0JSD27N9QcOWQExJAWbh2Lj9QcOjUEYJAXjhzWKwqJxRqJbuTixHAXSHYiqU57N9QcOibWbimEBw3WKwDWSu3Ia/zWKw/=S=YXOv8kxHAWYWqWYRDIBFQcOWQEaFgkSezWKwqJxRqJbuTixHAXOW6iq1VkxHAWlM0=bwAle9QcOibWbimEBw3WKvYJlM3IND2kxHAWYWqWYRDIBFQctEYEaFgLj9QcOjUEYJAXjhzWKwqJxRqJbuTixHAJxs6iqU57l=e8YEDol2CIj9QcOs6J0MDEa/zWKw/WlNmWSMgcPiU5KNq8mHzWKw/XlEUEOM27N9QcOs/=lR/ESh2Lj9QcOjUEYJAXjhzWKwqJxRqJbuTixHA=tRDiqU57l=e8YEDol2CIj9QcORPJbGA=B/zWKwDEl=bWxsgcPiU5KNq8mHzWKwqE0RQXtu9kxHAEONYJxW/XPDVkxHAWlM0=bwAle9QcOibWbimEBw3WKvYWtR3IND2kxHAWYWqWYRDIBFQctpmEmFgLj9QcOjUEYJAXjhzWKwqJxRqJbuTixHAE0sxiqU57N9QcOibWbimEBw3WKvvJSF3Ia/zWKw/=S=YXOv8kxHAWYWqWYRDIBFQctu6XaFgkSeY5l6b5tU48mvzWKwD=SF0EOMVkxHAEluqXSEUIkhq=kpeFYAwkxHAEtMPEbueIj9QcON1Wb1x=a1nza/zWKw/=S=YXOv8kxHAWYWqWYRDIBFQcOuQ=mFgkSeY5l6b5tU48mvzWKwqESGq=YuVkxHAEOEUXOsAIkhq=kpeFYAwkxHAWbMQWY=1Ij9QcOux=Sw/XB1nza/zWKw/=S=YXOv8kxHAWYWqWYRDIBFQcOu/JaFgkSezWKwqJxRqJbuTixHAJSu0iq1VkxHAWlM0=bwAle9QcOibWbimEBw3WKvbElu3IND2=3NCJPpg80ATkxHAWSuQJb1DLj9QcONv=bHYEBUnFYND5kiCRj9QcOsDWtR6EBs27N9QcONv=bHYEOh2Lj9QcOjUEYJAXjhzWKwqJxRqJbuTixHA=b1DiqU57N9QcOibWbimEBw3WKvbEbW3Ia/zWKw/=S=YXOv8kxHAWYWqWYRDIBFQctuDEmFgkSeY5l6b5tU48mvzWKvbWxJAEOGVkxHAW0MqElM/Ikhq=kpeFYAwkxHAJxW0XOuQIj9QcOEUWbNUWa1nza/zWKw/=S=YXOv8kxHAWYWqWYRDIBFQcOM0XBFgkSeY5l6b5tU48mvzWKvbWORPWSMVkxHAWxF/EtWQIkhq=kpeFYAwkxHAJxGqExseiN9QcOWPWSpbWOh2Lj9QcOjUEYJAXjhzWKwqJxRqJbuTixHAESFAiqU57l=e8YEDol2CIj9QcOj1JxJeWB/zWKwq=tWq=bMgcPiU5KNq8mHzWKw/=tW0ESGdkxHAWYpbWYJeXPDVkxHAWlM0=bwAle9QcOibWbimEBw3WKw0E0M3IND2=3NCJPpg80ATkxHAWlj1EOMxLj9QcOEvXOW/EaUnFYND5kiCRj9QcOjv=OueWxD2kxHAW0sAWxseXPDVkxHAWlM0=bwAle9QcOibWbimEBw3WKvU=SM3IND2=3NCJPpg80ATkxHAWlRPJ0pmLj9QctEYEOFeEqUnFYND5kiCRj9QcOjmE0E1Jb/zWKvb=buPESFnza/zWKw/=S=YXOv8kxHAWYWqWYRDIBFQcO1/EBFgkSeY5l6b5tU48mvzWKweWtNvWbMVkxHAWx1qWbMqIkhq=kpeFYAwkxHAESHUJSReLN9QcOW6WbReWbh2Lj9QcOjUEYJAXjhzWKwqJxRqJbuTixHAJlNmiqU57N9QcOibWbimEBw3WKvbEYR3Ia/zWKw/=S=YXOv8kxHAWYWqWYRDIBFQctRPiqU57N9QcOibWbimEBw3WKweWxM3Ia/zWKw/=S=YXOv8kxHAWYWqWYRDIBFQctWDEmFgkSezWKwqJxRqJbuTixHAESwAiq1VkxHAWlM0=bwAle9QcOibWbimEBw3WKwq=Os3IND2kxHAWYWqWYRDIBFQcORAXBFgLj9QcOjUEYJAXjhzWKwqJxRqJbuTixHAEYMPiqU57N9QcOibWbimEBw3WKvvElM3Ia/zWKw/=S=YXOv8kxHAWYWqWYRDIBFQctNbiqU57l=e8YEDol2CIj9QcOs/WSvYJm/zWKw/WOMPWxugcPiU5KNq8mHzWKw/WSsA=YRTkxHAWSGeExWDISh2Lj9QcOjUEYJAXjhzWKwqJxRqJbuTixHAEbFxiqU57N9QcOibWbimEBw3WKwPWxF3Ia/zWKw/=S=YXOv8kxHAWYWqWYRDIBFQcORPJqFgkSezWKwqJxRqJbuTixHA=luqiq1VkxHAWlM0=bwAle9QcOibWbimEBw3WKweEOu3IND2kxHAWYWqWYRDIBFQcO5U=BFgLj9QcOjUEYJAXjhzWKwqJxRqJbuTixHA=lRAiqU57N9QcOibWbimEBw3WKwxEtM3Ia/zWKw/=S=YXOv8kxHAWYWqWYRDIBFQcOMDWmFgkSezWKwqJxRqJbuTixHAJlsqiq1diPu3Lj9QcOjUEYJAXjhzWKwqJxRqJbuTixHAEl=YiqU57N9QcOibWbimEBw3WKwAW0u3Ia/zWKw/=S=YXOv8kxHAWYWqWYRDIBFQcOWxXaFgkSeY5l6b5tU48mvzWKwD=OGQWlRVkxHAESFDEYMDIkhq=kpeFYAwkxHAEtuQWOjmIj9QcOMPEO=UEB1nza/zWKw/=S=YXOv8kxHAWYWqWYRDIBFQctEbWmFgkSezWKwqJxRqJbuTixHAEOWxiq1VkxHAWlM0=bwAle9QcOibWbimEBw3WKw0XSF3IND2kxHAWYWqWYRDIBFQcOseXaFgLj9QcOjUEYJAXjhzWKwqJxRqJbuTixHAJSp1iqU57N9QcOibWbimEBw3WKvYJSJ3Ia/zWKw/=S=YXOv8kxHAWYWqWYRDIBFQcOsD=aFgkSezWKwqJxRqJbuTixHAWlpviq1VkxHAWlM0=bwAle9QcOibWbimEBw3WKw/=SR3IND2kxHAWYWqWYRDIBFQcO=1WaFgLj9QcOjUEYJAXjhzWKwqJxRqJbuTixHAESEYiqU57N9QcOibWbimEBw3WKwDXS13IahzWKwqJxRqJbuTixHAEtWAiq1VkxHAWlM0=bwAle9QcOibWbimEBw3WKw6WSW3IND2kxHAWYWqWYRDIBFQcOFxXBFgLj9QcOjUEYJAXjhzWKwqJxRqJbuTixHA=OWPiqU57l=e8YEDol2CIj9QcOW/W0NYEa/zWKweWOsQ=OJgcPiU5KNq8mHzWKwxWSEU=bMv7N9QcOMQWSH1Ebh2Lj9QcOjUEYJAXjhzWKwqJxRqJbuTixHAW0WqiqU57N9QcOibWbimEBw3WKw/WOW3Ia/zWKw/=S=YXOv8kxHAWYWqWYRDIBFQctWAEaFgkSezWKwqJxRqJbuTixHAEbjYiq1VkxHAWlM0=bwAle9QcOibWbimEBw3WKw/EtR3IND2=3NCJPpg80ATkxHAEtRxExF/Lj9QcORD=buQWaUnFYND5kiCRj9QcOpmWxFPWavzWKwqEtJDWOsgXPDVkxHAWlM0=bwAle9QcOibWbimEBw3WKwAJlu3IND2kxHAWYWqWYRDIBFQcOJPEqFgLj9QcOjUEYJAXjhzWKwqJxRqJbuTixHAJxF6iqU57N9QcOibWbimEBw3WKwAJxW3Ia/zWKw/=S=YXOv8kxHAWYWqWYRDIBFQcOFqXaFgkSezWKwqJxRqJbuTixHAJbwQiq1VkxHAWlM0=bwAle9QcOibWbimEBw3WKwqXtM3IND2=3NCJPpg80ATkxHAWxu/=bivLj9QctMqEYuqWaUnFYND5kiCRj9QcOWDWlJqJSD2kxHA=SR0=OR/XPDVkxHAWlM0=bwAle9QcOibWbimEBw3WKvUJ0R3IND2kxHAWYWqWYRDIBFQctJx=aFgLj9QcOjUEYJAXjhzWKwqJxRqJbuTixHAEYWQiqU57N9QcOibWbimEBw3WKvUWBFgLj9QcOjUEYJAXjhzWKwqJxRqJbuTixHAEtM3IND2kxHAWYWqWYRDIBFQcOWeXBFgLj9QcOjUEYJAXjhzWKwqJxRqJbuTixHAJbWeiqU57N9QcOibWbimEBw3WKwqEO13IahzWKwqJxRqJbuTixHAXOMAiq1VkxHAWlM0=bwAle9QcOibWbimEBw3WKweWOM3IND2kxHAWYWqWYRDIBFQcOwQ=aFgLj9QcOjUEYJAXjhzWKwqJxRqJbuTixHAEOwDiqU57N9QcOibWbimEBw3WKwDJ0u3Ia/zWKw/=S=YXOv8kxHAWYWqWYRDIBFQcOvYEmFgkSezWKwqJxRqJbuTixHAJYs6iq1di0R3Lj9QcOjUEYJAXjhzWKwqJxRqJbuTixHAESRQiqU57N9QcOibWbimEBw3WKw/=tJ3Ia/zWKw/=S=YXOv8kxHAWYWqWYRDIBFQctpbEaFgkSezWKwqJxRqJbuTixHAWYRDiq1VkxHAWlM0=bwAle9QcOibWbimEBw3WKw0=bR3IND2kxHAWYWqWYRDIBFQctR0EBFgLj9QcOjUEYJAXjhzWKwqJxRqJbuTixHAJbFxiqU57N9QcOibWbimEBw3WKwDWOu3Ia/zWKw/=S=YXOv8kxHAWYWqWYRDIBFQcOsQ=BFgkSeY5l6b5tU48mvzWKwqXOvbXtuVkxHAEONYEYR6Ikhq=kpeFYAwkxHAWbwAJxv17OezWKwDElJ0Jb1nza/zWKw/=S=YXOv8kxHAWYWqWYRDIBFQcON1EaFgkSezWKwqJxRqJbuTixHA=b10iq1VkxHAWlM0=bwAle9QcOibWbimEBw3WKvbEO13IND2kxHAWYWqWYRDIBFQcOweWaFgLj9QcOjUEYJAXjhzWKwqJxRqJbuTixHAWYWPiqU57N9QcOibWbimEBw3WKwPEOW3Ia/zWKw/=S=YXOv8kxHAWYWqWYRDIBFQcOFeEaFgkSezWKwqJxRqJbuTixHAWYW3Ia/zWKw/=S=YXOv8kxHAWYWqWYRDIBFQcOsq=mFgkSeY5l6b5tU48mvzWKw/WYRQ=SWVkxHAWxvbWbNvIkhq=kpeFYAwkxHAWSimWtMxIj9QcOWAJxReJa1nza/zWKw/=S=YXOv8kxHAWYWqWYRDIBFQcOu3IND2=3NCJPpg80ATkxHAElMPWxG/Lj9QcOpUJl=vJaUnFYND5kiCRj9QcONUExWQWavzWKwD=ljYJlsgXPDVkxHAWlM0=bwAle9QcOibWbimEBw3WKwxJ0s3IND2=3NCJPpg80ATkxHAWSNbWbu6Lj9QcOWA=SU1EaUnFYND5kiCRj9QcOseJxRDXas2kxHAWxvUXlueXPDVkxHAWlM0=bwAle9QcOibWbimEBw3WKvmWmFgkSeY5l6b5tU48mvzWKwxWbEUExGVkxHAWxuPEtWDIkhq=kpeFYAwkxHAWxRx=SFQIj9QcOWDExpbEB1nza/zWKw/=S=YXOv8kxHAWYWqWYRDIBFQctRAWmFgkSezWKwqJxRqJbuTixHAEtjviq1VkxHAWlM0=bwAle9QcOibWbimEBw3WKvm=tM3IND2kxHAWYWqWYRDIBFQctM0XaFgLj9QcOjUEYJAXjhzWKwqJxRqJbuTixHAJljbiqU57N9QcOibWbimEBw3WKv1=lW3Ia/zWKw/=S=YXOv8kxHAWYWqWYRDIBFQctRx=aFgkSezWKwqJxRqJbuTixHAEbs6iq1VkxHAWlM0=bwAle9QcOibWbimEBw3WKw6XOR3IND2=3NCJPpg80ATkxHAW0EYW0NbLj9QcOjUJxsx=aUnFYND5kiCRj9QcOEb=bEUJxD27N9QcOjUJxsx=Sh2Lj9QcOjUEYJAXjhzWKwqJxRqJbuTixHAJSw0iqU57N9QcOibWbimEBw3WKv1XOs3Ia/zWKw/=S=YXOv8kxHAWYWqWYRDIBFQctJ0=mFgkSezWKwqJxRqJbuTixHAWSJ6iq1VkxHAWlM0=bwAle9QcOibWbimEBw3WKwAJSJ3IND2=3NCJPpg80ATkxHAWlJ6WS1/Lj9QcOs6WYMA=aUnFYND5kiCRj9QcOjYXSs6Was27N9QcOs6WYMA=Sh2Lj9QcOjUEYJAXjhzWKwqJxRqJbuTixHA=lE1iqU57N9QcOibWbimEBw3WKvYJSu3Ia/zWKw/=S=YXOv8kxHAWYWqWYRDIBFQctJ0WaFgkSeY5l6b5tU48mvzWKwx=O=bES1VkxHAWlivWOp1Ikhq=kpeFYAwkxHAW0u0JxM6Ij9QcOjmJSGD=B1nza/zWKw/=S=YXOv8kxHAWYWqWYRDIBFQctimJaFgkSeY5l6b5tU48mvzWKwxXlNUEOuVkxHAEluxEbsDIkhq=kpeFYAwkxHAWxUU=SuDIe9QcON1WxJ/EOh2Lj9QcOjUEYJAXjhzWKwqJxRqJbuTixHA=OjbiqU57l=e8YEDol2CIj9QctMPWbpvEqUnFYND5kiCRj9QctMPWbpvEqwgXPDVkxHAWlM0=bwAle9QcOibWbimEBw3WKw6WSs3IND2=3NCJPpg80ATkxHAESF6W0J/Lj9QcOivXOJ6Jm/zWKweEORxW0RgcPiU5KNq8mHzWKweEx1x=bsTkxHAWYsAEbUmLj9QcOMDWbWxJm1nza/zWKw/=S=YXOv8kxHAWYWqWYRDIBFQcOR0EBFgkSeY5l6b5tU48mvzWKwDJSR0=YWVkxHAWSimXOuPIkhq=kpeFYAwkxHAEtsqEY=bIe9QcOsqJbwDExh2Lj9QcOjUEYJAXjhzWKwqJxRqJbuTixHA=SGxiqU57l=e8YEDol2CIj9QcOMqWxuPEm/zWKw/=tjvXOFgcPiU5KNq8mHzWKweWbWDExJdkxHAWlpvJSwPXPDVkxHAWlM0=bwAle9QcOibWbimEBw3WKwP=OW3IND2=3NCJPpg80ATkxHAEOjmJY=mLj9QcON1WOUvWmUnFYND5kiCRj9QcOu/JYiYJmvzWKwe=OG6JSRgXPDVkxHAWlM0=bwAle9QcOibWbimEBw3WKvmWOM3IND2kxHAWYWqWYRDIBFQcOi1JaFgLj9QcOjUEYJAXjhzWKwqJxRqJbuTixHA=Su3IND2kxHAWYWqWYRDIBFQcOM6JmFgLj9QcOjUEYJAXjhzWKwqJxRqJbuTixHA=OF3IND2kxHAWYWqWYRDIBFQctM6JqFgLj9QcOjUEYJAXjhzWKwqJxRqJbuTixHAJ0W/iqU57N9QcOibWbimEBw3WKwx=SF3Ia/zWKw/=S=YXOv8kxHAWYWqWYRDIBFQctNbWmFgkSezWKwqJxRqJbuTixHA=SWQiq1VkxHAWlM0=bwAle9QcOibWbimEBw3WKvYXtM3IND2kxHAWYWqWYRDIBFQcOiv=aFgLj9QcOjUEYJAXjhzWKwqJxRqJbuTixHAXSFAiqU57N9QcOibWbimEBw3WKvv=SR3Ia/zWKw/=S=YXOv8kxHAWYWqWYRDIBFQcO=U=mFgkSezWKwqJxRqJbuTixHAJbR6iq1VkxHAWlM0=bwAle9QcOibWbimEBw3WKvYWxu3IND2kxHAWYWqWYRDIBFQctM6EBFgLj9QcOjUEYJAXjhzWKwqJxRqJbuTixHAXSuQiqU57l=e8YEDol2CIj9QcONUEtRqJa/zWKweJbJeJYRgcPiU5KNq8mHzWKwe=SpmWYsUkxHAElR0ElimXPDVkxHAWlM0=bwAle9QcOibWbimEBw3WKwq=bF3IND2=3NCJPpg80ATkxHAEORDWxG/Lj9QcOibExRDEmUnFYND5kiCRj9QcOuqEOWQWahzWKwqJxFqEOJnza/zWKw/=S=YXOv8kxHAWYWqWYRDIBFQctpmWBFgkSeY5l6b5tU48mvzWKweEbpvXa/zWKwDJ0i1XOsgcPiU5KNq8mHzWKweEbpvXaezWKwDJ0i1XOsnza/zWKw/=S=YXOv8kxHAWYWqWYRDIBFQcOR/WBFgkSeY5l6b5tU48mvzWKwDXtEmWluVkxHAWbReESGeIkhq=kpeFYAwkxHAEOvbJbj1Ij9QcORqESMQEa1nza/zWKw/=S=YXOv8kxHAWYWqWYRDIBFQctEb=BFgkSeY5l6b5tU48mvzWKwx=OwDWlJVkxHAEtRxWlJxIkhq=kpeFYAwkxHAW0uAEOjY7SezWKwDJbW/=bWnza/zWKw/=S=YXOv8kxHAWYWqWYRDIBFQcOw6EBFgkSezWKwqJxRqJbuTixHAWlWPiq1dkxHAWYWqWYRDIBFQctW6JmFgLj9QcOjUEYJAXjhzWKwqJxRqJbuTixHAEb=biqU57l=e8YEDol2CIj9QcOpUJ0WQEB/zWKw/Jl=vJYsgcPiU5KNq8mHzWKwD=lEbWOu27SezWKw/Jl=vJYsnza/zWKw/=S=YXOv8kxHAWYWqWYRDIBFQcOuD=BFgkSeY5l6b5tU48mvzWKw/XSuPXSJgcPiU5KNq8mHzWKw/XSuPXSJTISh2Lj9QcOjUEYJAXjhzWKwqJxRqJbuTixHA=SW6iqU57N9QcOibWbimEBw3WKw6=lu3Ia/zWKw/=S=YXOv8kxHAWYWqWYRDIBFQctW/JaFgkSeY5l6b5tU48mvzWKw/XORPEYRVkxHAWSWq=bMDIkhq=kpeFYAwkxHAWSwqEx=m7SD2kxHAWSWq=bMDXPDVkxHAWlM0=bwAle9QcOibWbimEBw3WKw/WOH1iqU57N9QcOibWbimEBw3WKvUJSs3Ia/zWKw/=S=YXOv8kxHAWYWqWYRDIBFQcO=vJmFgkSezWKwqJxRqJbuTixHA=YuAiq1VkxHAWlM0=bwAle9QcOibWbimEBw3WKw/=YR3IND2kxHAWYWqWYRDIBFQcOpYJmFgLj9QcOjUEYJAXjhzWKwqJxRqJbuTixHAESNviqU57N9QcOibWbimEBw3WKv1ExW3Ia/zWKw/=S=YXOv8kxHAWYWqWYRDIBFQcOpmEBFgkSezWKwqJxRqJbuTixHAEtMAiq1VkxHAWlM0=bwAle9QcOibWbimEBw3WKwDJbG3IND2kxHAWYWqWYRDIBFQctWPJmFgLj9QcOjUEYJAXjhzWKwqJxRqJbuTixHAElWeiqU57N9QcOibWbimEBw3WKwxW0J3Ia/zWKw/=S=YXOv8kxHAWYWqWYRDIBFQcO1xXaFgkSezWKwqJxRqJbuTixHAES=viq1VkxHAWlM0=bwAle9QcOibWbimEBw3WKweW0u3IND2=3NCJPpg80ATkxHAWSpUJYMqLj9QcOpvXSsAJaUnFYND5kiCRj9QcOsD=liUWms2kxHAEts6WSvvXPDVkxHAWlM0=bwAle9QcOibWbimEBw3WKweJYW3IND2=3NCJPpg80ATkxHAESJ0=OibLj9QcOim=SMx=BUnFYND5kiCRj9QcOM0EYuqJx/zWKwqJYMeW0unza/zWKw/=S=YXOv8kxHAWYWqWYRDIBFQcORDWmFgkSeY5l6b5tU48mvzWKw0XS=1=B/zWKw/XOpv=tRgcPiU5KNq8mHzWKw0XS=1=BvzWKw/XOpv=tRgXPDVkxHAWlM0=bwAle9QcOibWbimEBw3WKwP=SR3IND2kxHAWYWqWYRDIBFQcO13Ia/zWKw/=S=YXOv8kxHAWYWqWYRDIBFQcO=mJqFgkSezWKwqJxRqJbuTixHA=bJAiq1VkxHAWlM0=bwAle9QcOibWbimEBw3WKwPEmFgkSeY5l6b5tU48mvzWKwDEx=YWOsVkxHAESR/JbMPIkhq=kpeFYAwkxHAEOF0=bG/7SD2kxHAESR/JbMPXPDVkxHAWlM0=bwAle9QcOibWbimEBw3WKv1E0s3IND2kxHAWYWqWYRDIBFQcts6iq1VkxHAWlM0=bwAle9QcOibWbimEBw3WKvvWOJ3IND2kxHAWYWqWYRDIBFQcOimEqFgLj9QcOjUEYJAXjhzWKwqJxRqJbuTixHAJSimiqU57l=e8YEDol2CIj9QcOM0ExvvJq/zWKw6JYuxE0MgcPiU5KNq8mHzWKweEbFAJlWTkxHAXli1Wx5UISh2Lj9QcOjUEYJAXjhzWKwqJxRqJbuTixHA=YseiqU57N9QcOibWbimEBw3WKw0=ls3Ia/zWKw/=S=YXOv8kxHAWYWqWYRDIBFQctpYJaFgkSezWKwqJxRqJbuTixHAWSGAiq1VkxHAWlM0=bwAle9QcOibWbimEBw3WKwq=lW3IND2kxHAWYWqWYRDIBFQctJQJqFgLj9QcOjUEYJAXjhzWKwqJxRqJbuTixHAWYjbiqU57l=e8YEDol2CIj9QctiUWSp1Wa/zWKweElR0WbJgcPiU5KNq8mHzWKvm=SsD=Os9kxHAESNmEbR0XPDVkxHAWlM0=bwAle9QcOibWbimEBw3WKvbJSs3IND2=3NCJPpg80ATkxHAExWQ=OWQLj9QcORP=Si1XaUnFYND5kiCRj9QcOFxWtuxWBhzWKwqE0Mq=O1nza/zWKw/=S=YXOv8kxHAWYWqWYRDIBFQcOMQJmFgkSeY5l6b5tU48mvzWKwqXSjbEOFVkxHAElRD=OR6Ikhq=kpeFYAwkxHAWb1/JxuPIj9QcONmEtuqXa1nza/zWKw/=S=YXOv8kxHAWYWqWYRDIBFQcO5vJmFgkSeY5l6b5tU48mvzWKwxJb16XO1VkxHAWb1x=Ou6Ikhq=kpeFYAwkxHAW0R6XSw6Ie9QcOR6W0uDXSh2Lj9QcOjUEYJAXjhzWKwqJxRqJbuTixHAJlJeiqU57l=e8YEDol2CIj9QcOjU=S5vJq/zWKwe=bGAWOMgcPiU5KNq8mHzWKw/=lMPJlWdkxHAElJQXOGeXPDVkxHAWlM0=bwAle9QcOibWbimEBw3WKw/=lu3IND2=3NCJPpg80ATkxHAW0=mJ0MeLj9QcOivExRPWmUnFYND5kiCRj9QcOEYJYEUEavzWKwqJSFqExRgXPDVkxHAWlM0=bwAle9QcOibWbimEBw3WKvbJSJ3IND2kxHAWYWqWYRDIBFQcOivWqFgIe9QcOibWbimEBw3WKwPEYM3IahzWKwqJxRqJbuTixHAEbpbiq1VkxHAWlM0=bwAle9QcOibWbimEBw3WKwAJ0s3IND2=3NCJPpg80ATkxHAEluqXtR/Lj9QcOjvJ0MeWBUnFYND5kiCRj9QcON1WbvmWas27N9QcOjvJ0MeWOh2Lj9QcOjUEYJAXjhzWKwqJxRqJbuTixHAExJeiqU57N9QcOibWbimEBw3WKv1EbG3Ia/zWKw/=S=YXOv8kxHAWYWqWYRDIBFQctRqWmFgkSezWKwqJxRqJbuTixHAWbEviq1dkxHAWYWqWYRDIBFQctjYXBFgIq51iq/zWKw/=S=YXOv8kxHAWYWqWYRDIBFQcOEUiqU57N9QcOibWbimEBw3WKwqW0s3IahzWKwqJxRqJbuTixHAXOFqiq1VkxHAWlM0=bwAle9QcOibWbimEBw3WKwP=Os3IND2=3NCJPpg80ATkxHAEbvbEOjbLj9QcONYWlu0=aUnFYND5kiCRj9QcOJAJxu/JxD27N9QcONYWlu0=Sh2Lj9QcOjUEYJAXjhzWKwqJxRqJbuTixHAXtJAiqU57N9QcOibWbimEBw3WKwDWbF3Ia/zWKw/=S=YXOv8kxHAWYWqWYRDIBFQctuDEqFgkSezWKwqJxRqJbuTixHAEtReiq1VkxHAWlM0=bwAle9QcOibWbimEBw3WKvmEOF3IND2=3NCJPpg80ATkxHAWlJQWO51Lj9QcOs6JSseXBUnFYND5kiCRj9QcOjYWOGP=OQ2kxHAWSUvWSMAXPDVkxHAWlM0=bwAle9QcOibWbimEBw3WKw/JSs3IND2kxHAWYWqWYRDIBFQcOuPEmFgLj9QcOjUEYJAXjhzWKwqJxRqJbuTixHA=bWQiqU57N9QcOibWbimEBw3WKwDExW3Ia/zWKw/=S=YXOv8kxHAWYWqWYRDIBFQcOs0XBFgkSezWKwqJxRqJbuTixHA=bG/iq1VkxHAWlM0=bwAle9QcOibWbimEBw3WKwqWtM3IND2kxHAWYWqWYRDIBFQctibEqFgLj9QcOjUEYJAXjhzWKwqJxRqJbuTixHAWb1eiqU57N9QcOibWbimEBw3WKwxWSW3Ia/zWKw/=S=YXOv8kxHAWYWqWYRDIBFQctJPJqFgkSeY5l6b5tU48mvzWKwDWbRA=OGVkxHAWbWQWx=bIkhq=kpeFYAwkxHAEORqXtuQRSD2kxHAWbWQWx=bXPDVkxHAWlM0=bwAle9QcOibWbimEBw3WKweWBFgkSezWKwqJxRqJbuTixHAExwDiq1VkxHAWlM0=bwAle9QcOibWbimEBw3WKwPWOM3IND2kxHAWYWqWYRDIBFQctsx=mFgLj9QcOjUEYJAXjhzWKwqJxRqJbuTixHAJYWAiqU57N9QcOibWbimEBw3WKwAJSW3Ia/zWKw/=S=YXOv8kxHAWYWqWYRDIBFQcORqWaFgkSeY5l6b5tU48mvzWKwD=Os6=lWVkxHAJSW/=YE1Ikhq=kpeFYAwkxHAEtu/XlNbIe9QctsxWl=b=Oh2Lj9QcOjUEYJAXjhzWKwqJxRqJbuTixHAEYEviqU57l=e8YEDol2CIj9QcOu0JxGqXB/zWKwqExsQEYWgcPiU5KNq8mHzWKwDEYWQWbwv7SezWKwqExsQEYWnza/zWKw/=S=YXOv8kxHAWYWqWYRDIBFQctJ0iqU57N9QcOibWbimEBw3WKwPXtu3Ia/zWKw/=S=YXOv8kxHAWYWqWYRDIBFQcOwq=aFgkSezWKwqJxRqJbuTixHAESvUiq1dixW3Lj9QcOjUEYJAXjhzWKwqJxRqJbuTixHAXOJQiqU57N9QcOibWbimEBw3WKvmEO13Ia/zWKw/=S=YXOv8kxHAWYWqWYRDIBFQctpv=aFgkSezWKwqJxRqJbuTixHAXSM/iq1VkxHAWlM0=bwAle9QcOibWbimEBw3WKvmXOs3IND2kxHAWYWqWYRDIBFQcOUvJmFgLj9QcOjUEYJAXjhzWKwqJxRqJbuTixHAXtuPiqU57N9QcOibWbimEBw3WKwqXts3Ia/zWKw/=S=YXOv8kxHAWYWqWYRDIBFQctJD=mFgkSeY5l6b5tU48mvzWKweWSUYXtRVkxHAWSRqJYs6Ikhq=kpeFYAwkxHAESs6=bvm7j9QcOsqWYivXSh2Lj9QcOjUEYJAXjhzWKwqJxRqJbuTixHAWlEUiqU57l=e8YEDol2CIj9QcORP=SFAEa/zWKwDJYpbJx1gcPiU5KNq8mHzWKwqE0MPXOMTkxHAEti1J0W6ISh2Lj9QcOjUEYJAXjhzWKwqJxRqJbuTixHAJlu3IND2=3NCJPpg80ATkxHAEtMAJxEbLj9QcORDJS=UJqUnFYND5kiCRj9QcOpUXtWxJqvzWKwqEts0=lWgXPDVkxHAWlM0=bwAle9QcOibWbimEBw3WKvmEb13IND2kxHAWYWqWYRDIBFQcts6EaFgLj9QcOjUEYJAXjhzWKwqJxRqJbuTixHA=SWeiqU57N9QcOibWbimEBw3WKwxXOM3Ia/zWKw/=S=YXOv8kxHAWYWqWYRDIBFQcOW0=BFgkSeY5l6b5tU48mvzWKwDExwD=tMVkxHAEOF6WSNUIkhq=kpeFYAwkxHAEOFAEtpUIe9QcOuPXSse=Sh2Lj9QcOjUEYJAXjhzWKwqJxRqJbuTixHAE0u6iqU57N9QcOibWbimEBw3WKvUW0W3Ia/zWKw/=S=YXOv8kxHAWYWqWYRDIBFQctiY=BFgkSezWKwqJxRqJbuTixHAJlW6iq1VkxHAWlM0=bwAle9QcOibWbimEBw3WKw0EOu3IND2kxHAWYWqWYRDIBFQcOv1JqFgLj9QcOjUEYJAXjhzWKwqJxRqJbuTixHA=YEUiqU57N9QcOibWbimEBw3WKwAWxs3Ia/zWKw/=S=YXOv8kxHAWYWqWYRDIBFQct=mEmFgkSezWKwqJxRqJbuTixHAWbMDiq1VkxHAWlM0=bwAle9QcOibWbimEBw3WKvb=lW3IND2=3NCJPpg80ATkxHAESWQESEYLj9QcOWAWYi1EBUnFYND5kiCRj9QcOMxWOMx=ms27N9QcOWAWYi1EOh2Lj9QcOjUEYJAXjhzWKwqJxRqJbuTixHAEO1xiqU57N9QcOibWbimEBw3WKw6E0s3Ia/zWKw/=S=YXOv8kxHAWYWqWYRDIBFQcOW/JmFgkSezWKwqJxRqJbuTixHAXSi1iq1VkxHAWlM0=bwAle9QcOibWbimEBw3WKvYEYu3IND2=3NCJPpg80ATkxHAE0JDESFeLj9QcOpbXS1PEaUnFYND5kiCRj9QcO5YEOMPEas27N9QcOpbXS1PESh2Lj9QcOjUEYJAXjhzWKwqJxRqJbuTixHAW0JPiqU57N9QcOibWbimEBw3WKw/WqFgLj9QcOjUEYJAXjhzWKwqJxRqJbuTixHAESimiqU57N9QcOibWbimEBw3WKwPXlM3Ia/zWKw/=S=YXOv8kxHAWYWqWYRDIBFQctMAJaFgkSezWKwqJxRqJbuTixHAJlR/iq1VkxHAWlM0=bwAle9QcOibWbimEBw3WKvY=tJ3IND2=3NCJPpg80ATkxHAWxjvEOseLj9QcORPE0NvWa/zWKw6Xts6JqUnFYND5kiCRj9QcOW/JSu/EavzWKwqEx5UJSsVkxHAXSvvXlWgXPDVkxHAWlM0=bwAle9QcOibWbimEBw3WKweXSM3IND2=3NCJPpg80ATkxHAES1qJlE1Lj9QcOu0JxNvEqUnFYND5kiCRj9QcOM6WYjb=O/zWKwDEYWeJSFnza/zWKw/=S=YXOv8kxHAWYWqWYRDIBFQcOFDWmFgkSezWKwqJxRqJbuTixHA=SUmiq1VkxHAWlM0=bwAle9QcOibWbimEBw3WKw/WOGQiqU57N9QcOibWbimEBw3WKvmWbM3Ia/zWKw/=S=YXOv8kxHAWYWqWYRDIBFQcOpUEqFgkSeY5l6b5tU48mvzWKvbJ0u6WSJVkxHAWSHYJlJAIkhq=kpeFYAwkxHAJ0E1XSs07j9QcOsQ=YjYXOh2Lj9QcOjUEYJAXjhzWKwqJxRqJbuTixHA=ON1iqU57N9QcOibWbimEBw3WKvv=Ow3Ia/zWKw/=S=YXOv8kxHAWYWqWYRDIBFQcOsQWOR3IND2kxHAWYWqWYRDIBFQcOM/JqFgLj9QcOjUEYJAXjhzWKwqJxRqJbuTixHAJYj1iqU57l=e8YEDol2CIj9QctJxJ0E1Wa/zWKw6=OwPEtMgcPiU5KNq8mHzWKvYW0Eb=Osv7SezWKw6=OwPEtMnza/zWKw/=S=YXOv8kxHAWYWqWYRDIBFQcOR0WBFgkSezWKwqJxRqJbuTixHAEYRQiq1VkxHAWlM0=bwAle9QcOibWbimEBw3WKwPEbW3IND2kxHAWYWqWYRDIBFQctjmWBFgLj9QcOjUEYJAXjhzWKwqJxRqJbuTixHAXSwQiqU57N9QcOibWbimEBw3WKwAWlR3Ia/zWKw/=S=YXOv8kxHAWYWqWYRDIBFQcOJeiqU57N9QcOibWbimEBw3WKw0=bJ3Ia/zWKw/=S=YXOv8kxHAWYWqWYRDIBFQcOwqWmFgkSezWKwqJxRqJbuTixHAXORQiq1dkxHAWYWqWYRDIBFQcOU1XaFgLj9QcOjUEYJAXjhzWKwqJxRqJbuTixHAWSWxiqU57N9QcOibWbimEBw3WKw0XOW3Ia/zWKw/=S=YXOv8kxHAWYWqWYRDIBFQcOwAJmFgkSezWKwqJxRqJbuTixHA=Ysxiq1dkxHAWYWqWYRDIBFQctpUEqFgLj9QcOjUEYJAXjhzWKwqJxRqJbuTixHA=O5biqU57N9QcOibWbimEBw3WKwDJmFgLj9QcOjUEYJAXjhzWKwqJxRqJbuTixHAJlJ6iqU57N9QcOibWbimEBw3WKwAWbG3IahzWKwqJxRqJbuTixHAXlNUiq1VkxHAWlM0=bwAle9QcOibWbimEBw3WKwD=b13IND2=3NCJPpg80ATkxHAWbM0ExpvIkhq=kpeFYAwkxHAWbM0ExpvIB1nza/zWKw/=S=YXOv8kxHAWYWqWYRDIBFQcOW/WmFgkSezWKwqJxRqJbuTixHA=lpmiq1VkxHAWlM0=bwAle9QcOibWbimEBw3WKvYWxs3IND2=3NCJPpg80ATkxHAEYJ0=bv1Ikhq=kpeFYAwkxHAEYJ0=bv1IB1nza/zWKw/=S=YXOv8kxHAWYWqWYRDIBFQcOMPWBFgkSezWKwqJxRqJbuTixHAEYpbiq1VkxHAWlM0=bwAle9QcOibWbimEBw3WKvbJS13IND2kxHAWYWqWYRDIBFQcOiUJmFgLj9QcOjUEYJAXjhzWKwqJxRqJbuTixHAExs6iqU57N9QcOibWbimEBw3WKw0J0u3Ia/zWKw/=S=YXOv8kxHAWYWqWYRDIBFQctu0=aFgkSezWKwqJxRqJbuTixHAXS16iq1VkxHAWlM0=bwAle9QcOibWbimEBw3WKwAJYW3IND2kxHAWYWqWYRDIBFQcORqiq1VkxHAWlM0=bwAle9QcOibWbimEBw3WKvYWlR3IND2kxHAWYWqWYRDIBFQcOJ6WqFgLj9QcOjUEYJAXjhzWKwqJxRqJbuTixHAJb1QiqU57l=e8YEDol2CIj9QcONmEbue=a/zWKwA=SJ0=bFgcPiU5KNq8mHzWKweJbJDElMv7N9QcOvUEb=YExh2Lj9QcOjUEYJAXjhzWKwqJxRqJbuTixHAEOFPiqU57N9QcOibWbimEBw3WKv1WOu3Ia/zWKw/=S=YXOv8kxHAWYWqWYRDIBFQctjUEaFgkSezWKwqJxRqJbuTixHAXO5Uiq1VkxHAWlM0=bwAle9QcOibWbimEBw3WKvY=YW3IND2kxHAWYWqWYRDIBFQctMPEBFgLj9QcOjUEYJAXjhzWKwqJxRqJbuTixHA=OUviqU57N9QcOibWbimEBw3WKw0W0R3IahzWKwqJxRqJbuTixHAXtjmiq1dkxHAWYWqWYRDIBFQcOjUEqFgIe9QcOibWbimEBw3WKw6Jb13IahzWKwqJxRqJbuTixHAWximiq1dkxHAWYWqWYRDIBFQcOUmXaFgIe9QcOibWbimEBw3WKw0Ebw3IahzWKwqJxRqJbuTixHAWlpbiq1dkxHAWYWqWYRDIBFQcOuDWmFgIe9QcOibWbimEBw3WKvvESu3IahzWKwqJxRqJbuTixHAESU1iq1dkxHAWYWqWYRDIBFQct=vWmFgIe9QcOibWbimEBw3WKvU=OW3IahzWKwqJxRqJbuTixHAJSGQiq1dkxHAWYWqWYRDIBFQcOwA=mFgIe9QcOibWbimEBw3WKwP=bu3IahzWKwqJxRqJbuTixHAEOReiq1dkxHAWYWqWYRDIBFQcOuAJmFgIe9QcOibWbimEBw3WKv1XtJ3IaV37mFVkxHAWlM0=bwAle9QcOibWbimEBw3WKw0JSs3IND2kxHAWYWqWYRDIBFQcOJxJmFgIe9QcOibWbimEBw3WKwAJlR3IahzWKwqJxRqJbuTixHAWlMPiq1dkxHAWYWqWYRDIBFQcOUmXaFgIe9QcOibWbimEBw3WKwxWYR3IahzWKwqJxRqJbuTixHAXlR6iq1dkxHAWYWqWYRDIBFQcOJ0XBFgIe9QcOibWbimEBw3WKw/=tW3IahzWKwqJxRqJbuTixHAEOuqiq1dkxHAWYWqWYRDIBFQctseEBFgIe9QcOibWbimEBw3WKweXlu3IahzWKwqJxRqJbuTixHA=Ysqiq1dkxHAWYWqWYRDIBFQctN1WqFgIe9QcOibWbimEBw3WKvvWOG3IahzWKwqJxRqJbuTixHAWbFqiq1dkxHAWYWqWYRDIBFQcOjmiq1dkxHAWYWqWYRDIBFQcOW0WaFgIe9QcOibWbimEBw3WKwx=lJ3IahzWKwqJxRqJbuTixHAWlJAiq1dkxHAWYWqWYRDIBFQctu/EmFgLj9QcOjUEYJAXjhzWKwqJxRqJbuTixHAExu6iqU57N9QcOibWbimEBw3WKw0W0R3IahzWKwqJxRqJbuTixHAXtjmiq1dkxHAWYWqWYRDIBFQcOjUEqFgIe9QcOibWbimEBw3WKw6Jb13IahzWKwqJxRqJbuTixHAWximiq1dkxHAWYWqWYRDIBFQcOUmXaFgIe9QcOibWbimEBw3WKw0Ebw3IahzWKwqJxRqJbuTixHAWlpbiq1dkxHAWYWqWYRDIBFQcOuDWmFgIe9QcOibWbimEBw3WKvvESu3IahzWKwqJxRqJbuTixHAESU1iq1dkxHAWYWqWYRDIBFQct=vWmFgIe9QcOibWbimEBw3WKvU=OW3IahzWKwqJxRqJbuTixHAJSGQiq1dkxHAWYWqWYRDIBFQcOFxWqFgIe9QcOibWbimEBw3WKvbESR3IahzWKwqJxRqJbuTixHAW0pmiq1dkxHAWYWqWYRDIBFQcOu0=mFgIe9QcOibWbimEBw3WKwDEbR3IaV37mFVkxHAWlM0=bwAle9QcOibWbimEBw3WKwA=SR3IND2kxHAWYWqWYRDIBFQcOJxJmFgIe9QcOibWbimEBw3WKwAJlR3IahzWKwqJxRqJbuTixHAWlMPiq1dkxHAWYWqWYRDIBFQcOUmXaFgIe9QcOibWbimEBw3WKwxWYR3IahzWKwqJxRqJbuTixHAXlR6iq1dkxHAWYWqWYRDIBFQcOJ0XBFgIe9QcOibWbimEBw3WKw/=tW3IahzWKwqJxRqJbuTixHAEOuqiq1dkxHAWYWqWYRDIBFQctseEBFgIe9QcOibWbimEBw3WKweXlu3IahzWKwqJxRqJbuTixHA=Ysqiq1dkxHAWYWqWYRDIBFQctN1WqFgIe9QcOibWbimEBw3WKvvWOG3IahzWKwqJxRqJbuTixHAWxseiq1dkxHAWYWqWYRDIBFQctjmEmFgIe9QcOibWbimEBw3WKw0JS13IahzWKwqJxRqJbuTixHAESRDiq1dkxHAWYWqWYRDIBFQcORQEqFgIe9QcOibWbimEBw3WKw/=OR3Ia/zWKw/=S=YXOv8kxHAWYWqWYRDIBFQcONvEBFgkSezWKwqJxRqJbuTixHAEbEmiq1dkxHAWYWqWYRDIBFQcOvvJmFgIe9QcOibWbimEBw3WKw/=SF3IahzWKwqJxRqJbuTixHAXlR6iq1dkxHAWYWqWYRDIBFQcOWqJmFgIe9QcOibWbimEBw3WKw6Jb13IahzWKwqJxRqJbuTixHAEbJAiq1dkxHAWYWqWYRDIBFQcOj1JqFgIe9QcOibWbimEBw3WKwDEOR3IahzWKwqJxRqJbuTixHAJSMDiq1dkxHAWYWqWYRDIBFQcOM6=BFgIe9QcOibWbimEBw3WKvYJSR3IahzWKwqJxRqJbuTixHA=luxiq1dkxHAWYWqWYRDIBFQctsQWBFgIe9QcOibWbimEBw3WKwD=SW3IahzWKwqJxRqJbuTixHAJYRPiq1dkxHAWYWqWYRDIBFQcOpbJmFgIe9QcOibWbimEBw3WKwD=OG3IahzWKwqJxRqJbuTixHAWbuxiq1VkxHAWlM0=bwAle9QcOibWbimEBw3WKvv=lJ3IND2kxHAWYWqWYRDIBFQcOJxJmFgIe9QcOibWbimEBw3WKwAJlR3IahzWKwqJxRqJbuTixHAWlMPiq1dkxHAWYWqWYRDIBFQcOUmXaFgIe9QcOibWbimEBw3WKwxWYR3IahzWKwqJxRqJbuTixHAXlR6iq1dkxHAWYWqWYRDIBFQcOJ0XBFgIe9QcOibWbimEBw3WKw/=tW3IahzWKwqJxRqJbuTixHAEOuqiq1dkxHAWYWqWYRDIBFQctseEBFgIe9QcOibWbimEBw3WKweXlu3IahzWKwqJxRqJbuTixHA=Ysqiq1dkxHAWYWqWYRDIBFQctN1WqFgIe9QcOibWbimEBw3WKvvWOG3IahzWKwqJxRqJbuTixHAWxseiq1dkxHAWYWqWYRDIBFQctu6EaFgIe9QcOibWbimEBw3WKwxJbu3IahzWKwqJxRqJbuTixHA=bM/iq1dkxHAWYWqWYRDIBFQcts6WaFgIe9QcOibWbimEBw3WKwDE0W3Ia/zWKw/=S=YXOv8kxHAWYWqWYRDIBFQctpYEaFgkSezWKwqJxRqJbuTixHAEbEmiq1dkxHAWYWqWYRDIBFQcOvvJmFgIe9QcOibWbimEBw3WKw/=SF3IahzWKwqJxRqJbuTixHAXlR6iq1dkxHAWYWqWYRDIBFQcOWqJmFgIe9QcOibWbimEBw3WKw6Jb13IahzWKwqJxRqJbuTixHAEbJAiq1dkxHAWYWqWYRDIBFQcOj1JqFgIe9QcOibWbimEBw3WKwDEOR3IahzWKwqJxRqJbuTixHAJSMDiq1dkxHAWYWqWYRDIBFQcOM6=BFgIe9QcOibWbimEBw3WKvYJSR3IahzWKwqJxRqJbuTixHA=luxiq1dkxHAWYWqWYRDIBFQctsQWBFgIe9QcOibWbimEBw3WKwq=Ow3IahzWKwqJxRqJbuTixHAJYMPiq1dkxHAWYWqWYRDIBFQcOs0=BFgIe9QcOibWbimEBw3WKv1WtW3IahzWKwqJxRqJbuTixHAEY=miq1dkxHAWYWqWYRDIBFQcOj1WmFgLj9QcOjUEYJAXjhzWKwqJxRqJbuTixHAW0MxiqU57N9QcOibWbimEBw3WKw0W0R3IahzWKwqJxRqJbuTixHAXtjmiq1dkxHAWYWqWYRDIBFQcOjUEqFgIe9QcOibWbimEBw3WKw6Jb13IahzWKwqJxRqJbuTixHAWximiq1dkxHAWYWqWYRDIBFQcOUmXaFgIe9QcOibWbimEBw3WKw0Ebw3IahzWKwqJxRqJbuTixHAWlpbiq1dkxHAWYWqWYRDIBFQcOuDWmFgIe9QcOibWbimEBw3WKvvESu3IahzWKwqJxRqJbuTixHAESU1iq1dkxHAWYWqWYRDIBFQct=vWmFgIe9QcOibWbimEBw3WKvU=OW3IahzWKwqJxRqJbuTixHAJSGQiq1dkxHAWYWqWYRDIBFQcOW/EaFgIe9QcOibWbimEBw3WKv1XSM3IahzWKwqJxRqJbuTixHAW0RDiq1dkxHAWYWqWYRDIBFQctJeWaFgIe9QcOibWbimEBw3WKwqWxG3IahzWKwqJxRqJbuTixHAEYMxiq1VkxHAWlM0=bwAle9QcOibWbimEBw3WKweJYu3IND2kxHAWYWqWYRDIBFQcO5mEmFgIe9QcOibWbimEBw3WKw0WSM3IahzWKwqJxRqJbuTixHA=Ypmiq1dkxHAWYWqWYRDIBFQcOiUWmFgIe9QcOibWbimEBw3WKvUWYs3IahzWKwqJxRqJbuTixHA=Swxiq1dkxHAWYWqWYRDIBFQctuQJaFgIe9QcOibWbimEBw3WKw6W0W3IahzWKwqJxRqJbuTixHA=bMDiq1dkxHAWYWqWYRDIBFQcO1QEBFgIe9QcOibWbimEBw3WKw6WtM3IahzWKwqJxRqJbuTixHAJlimiq1dkxHAWYWqWYRDIBFQctEm=mFgIe9QcOibWbimEBw3WKwDESF3IahzWKwqJxRqJbuTixHA=SuQiq1dkxHAWYWqWYRDIBFQcOjvXaFgIe9QcOibWbimEBw3WKwA=lR3IahzWKwqJxRqJbuTixHAElpbiq1dkxHAWYWqWYRDIBFQctJ/iq1dkxHAWYWqWYRDIBFQcOwxJqFgIe9QcOibWbimEBw3WKvvWbu3IahzWKwqJxRqJbuTixHAXS13IahzWKwqJxRqJbuTixHAJYEYiq1dkxHAWYWqWYRDIBFQcOuP=BFgIe9QcOibWbimEBw3WKweJlW3IahzWKwqJxRqJbuTixHAWxFxiq1dkxHAWYWqWYRDIBFQcORqEqFgIe9QcOibWbimEBw3WKvvWbR3IahzWKwqJxRqJbuTixHAJSvbiq1dkxHAWYWqWYRDIBFQctJ/=aFgIe9QcOibWbimEBw3WKvU=SG3IahzWKwqJxRqJbuTixHAWSWAiq1dkxHAWYWqWYRDIBFQctJ/WqFgIe9QcOibWbimEBw3WKwAWSG3IahzWKwqJxRqJbuTixHA=bu0iq1dkxHAWYWqWYRDIBFQcOwDWaFgIe9QcOibWbimEBw3WKvU=Ss3IahzWKwqJxRqJbuTixHAWSwqiq1dkxHAWYWqWYRDIBFQctJAEBFgIe9QcOibWbimEBw3WKw/W0u3IahzWKwqJxRqJbuTixHAJYEbiq1dkxHAWYWqWYRDIBFQcOseiq1dkxHAWYWqWYRDIBFQcO1eWBFgIe9QcOibWbimEBw3WKw6=mFgIe9QcOibWbimEBw3WKwxWOF3IahzWKwqJxRqJbuTixHAJ0iviq1dkxHAWYWqWYRDIBFQcOpUJmFgIe9QcOibWbimEBw3WKw6JS13IahzWKwqJxRqJbuTixHAWb5viq1dkxHAWYWqWYRDIBFQcOEmEaFgIe9QcOibWbimEBw3WKw0=Ou3IahzWKwqJxRqJbuTixHAWSuAiq1dkxHAWYWqWYRDIBFQct=bEaFgIe9QcOibWbimEBw3WKvUXtM3IahzWKwqJxRqJbuTixHAWlWxiq1dkxHAWYWqWYRDIBFQcO=1WmFgIe9QcOibWbimEBw3WKw/XlW3IahzWKwqJxRqJbuTixHAWbF6iq1dkxHAWYWqWYRDIBFQctM/JqFgIe9QcOibWbimEBw3WKwPXlJ3IahzWKwqJxRqJbuTixHAXSRAiq1dkxHAWYWqWYRDIBFQcOUmWqFgIe9QcOibWbimEBw3WKvUXOJ3IahzWKwqJxRqJbuTixHAXtW0iq1dkxHAWYWqWYRDIBFQcOjYJqFgIe9QcOibWbimEBw3WKvmWSR3IahzWKwqJxRqJbuTixHA=tW/iq1dkxHAWYWqWYRDIBFQcONUJaFgIe9QcOibWbimEBw3WKvvJlJ3IahzWKwqJxRqJbuTixHAWxs3IahzWKwqJxRqJbuTixHA=bMPiq1dkxHAWYWqWYRDIBFQct=U=mFgIe9QcOibWbimEBw3WKw/=bW3IahzWKwqJxRqJbuTixHA=l=viq1dkxHAWYWqWYRDIBFQcOW6JmFgIe9QcOibWbimEBw3WKvm=SW3IahzWKwqJxRqJbuTixHA=OJ6iq1dkxHAWYWqWYRDIBFQctsDJqFgIe9QcOibWbimEBw3WKw6Wtu3IahzWKwqJxRqJbuTixHAJlMPiq1dkxHAWYWqWYRDIBFQctp1JaFgIe9QcOibWbimEBw3WKw/Ebs3IahzWKwqJxRqJbuTixHAXO1/iq1dkxHAWYWqWYRDIBFQcOiUEmFgIe9QcOibWbimEBw3WKvmEYs3IahzWKwqJxRqJbuTixHAJxU1iq1dkxHAWYWqWYRDIBFQctuQEaFgIe9QcOibWbimEBw3WKwe=YM3IahzWKwqJxRqJbuTixHAXlEUiq1dkxHAWYWqWYRDIBFQctpY=mFgIe9QcOibWbimEBw3WKvYEbF3IahzWKwqJxRqJbuTixHAWx5biq1dkxHAWYWqWYRDIBFQcOu0XaFgIe9QcOibWbimEBw3WKvUEOs3IahzWKwqJxRqJbuTixHAEYN1iq1dkxHAWYWqWYRDIBFQcOuPWBFgIe9QcOibWbimEBw3WKwD=ls3IahzWKwqJxRqJbuTixHAWbWeiq1dkxHAWYWqWYRDIBFQcOEUXaFgIe9QcOibWbimEBw3WKw/Jbw3IaVTkxHAWYWqWYRDIBFQcO1P=aFgIe9QcOibWbimEBw3WKvbJx13IahzWKwqJxRqJbuTixHAXtiviq1dkxHAWYWqWYRDIBFQcOs/=aFgIe9QcOibWbimEBw3WKw/W0R3IahzWKwqJxRqJbuTixHAExi1iq1dkxHAWYWqWYRDIBFQctpm=aFgIe9QcOibWbimEBw3WKwq=SW3IahzWKwqJxRqJbuTixHAW0Meiq1dkxHAWYWqWYRDIBFQctWPXBFgIe9QcOibWbimEBw3WKw0=YW3IahzWKwqJxRqJbuTixHAEYjYiq1dkxHAWYWqWYRDIBFQcOueJqFgIe9QcOibWbimEBw3WKvvE0u3IahzWKwqJxRqJbuTixHAESWqiq1dkxHAWYWqWYRDIBFQctReXaFgIe9QcOibWbimEBw3WKw/WOG/iq1dkxHAWYWqWYRDIBFQctueJmFgIe9QcOibWbimEBw3WKvUE0J3IahzWKwqJxRqJbuTixHA=YEmiq1dkxHAWYWqWYRDIBFQctibiq1dkxHAWYWqWYRDIBFQctW0JqFgIe9QcOibWbimEBw3WKvYESR3IahzWKwqJxRqJbuTixHAJ0J/iq1dkxHAWYWqWYRDIBFQctuQWBFgIe9QcOibWbimEBw3WKvU=YW3IahzWKwqJxRqJbuTixHAXtEmiq1dkxHAWYWqWYRDIBFQcOs6EqFgIe9QcOibWbimEBw3WKvvXSG3IahzWKwqJxRqJbuTixHAJSF3IahzWKwqJxRqJbuTixHAES=miq1dkxHAWYWqWYRDIBFQcOpYWBFgIe9QcOibWbimEBw3WKvvWbG3IahzWKwqJxRqJbuTixHAJ0R3IahzWKwqJxRqJbuTixHAJxE1iq1dkxHAWYWqWYRDIBFQctE1JaFgIe9QcOibWbimEBw3WKw/=lR3IahzWKwqJxRqJbuTixHAEOs6iq1dkxHAWYWqWYRDIBFQctWx=BFgIe9QcOibWbimEBw3WKw0WbW3IahzWKwqJxRqJbuTixHAXOWAiq1dkxHAWYWqWYRDIBFQcORe=aFgIe9QcOibWbimEBw3WKvYWbu3IahzWKwqJxRqJbuTixHAE0MQiq1dkxHAWYWqWYRDIBFQcOMDEqFgIe9QcOibWbimEBw3WKwxWYJ3IahzWKwqJxRqJbuTixHAWxMxiq1dkxHAWYWqWYRDIBFQcOjvWBFgIe9QcOibWbimEBw3WKwxEtu3IahzWKwqJxRqJbuTixHAXtuxiq1dkxHAWYWqWYRDIBFQctjYJaFgIe9QcOibWbimEBw3WKwAXO13IahzWKwqJxRqJbuTixHAW0sAiq1dkxHAWYWqWYRDIBFQcO16=BFgIe9QcOibWbimEBw3WKv1JqFgIe9QcOibWbimEBw3WKw/Wb13IahzWKwqJxRqJbuTixHAESwQiq1dkxHAWYWqWYRDIBFQctpvXaFgIe9QcOibWbimEBw3WKweJmFgIe9QcOibWbimEBw3WKw6=bG3IahzWKwqJxRqJbuTixHAE0jUiq1dkxHAWYWqWYRDIBFQcO1DJaFgIe9QcOibWbimEBw3WKv1EtM3IahzWKwqJxRqJbuTixHAXSGAiq1dkxHAWYWqWYRDIBFQctJQWmFgIe9QcOibWbimEBw3WKvYWOw3IahzWKwqJxRqJbuTixHAWSNmiq1dkxHAWYWqWYRDIBFQct=1EaFgIe9QcOibWbimEBw3WKw/WlR3IaV37mFgLj9QcOjUEYJAXjhzWKwqJxRqJbuTixHAJxsDiqU57N9QcOibWbimEBw3WKwq=tW3IahzWKwqJxRqJbuTixHA=liviq1VkxHAWlM0=bwAle9QcOibWbimEBw3WKw/Jbu3IND2kxHAWYWqWYRDIBFQcOwAXBFgLj9QcOjUEYJAXjhzWKwqJxRqJbuTixHAJYu/iqU57N9QcOibWbimEBw3WKwDJlu3Ia/zWKw/=S=YXOv8kxHAWYWqWYRDIBFQctibWqFgkSezWKwqJxRqJbuTixHAWS1Qiq1VkxHAWlM0=bwAle9QcOibWbimEBw3WKwDEqFgkSezWKwqJxRqJbuTixHA=Yi1iq1VkxHAWlM0=bwAle9QcOibWbimEBw3WKwqW0J3IND2kxHAWYWqWYRDIBFQcOp1=mFgLj9QcOjUEYJAXjhzWKwqJxRqJbuTixHA=lJ3IND2kxHAWYWqWYRDIBFQctu0EmFgLj9QcOjUEYJAXjhzWKwqJxRqJbuTixHAExMQiqU57N9QcOibWbimEBw3WKw/WOG3Ia/zWKw/=S=YXOv8kxHAWYWqWYRDIBFQcO1/=aFgkSeY5l6b5tU48mvzWKweXl=vWSMVkxHAWYNmJluDIkhq=kpeFYAwkxHAESUYJSse7SezWKwq=liv=Ounza/zWKw/=S=YXOv8kxHAWYWqWYRDIBFQcOJxWqFgkSezWKwqJxRqJbuTixHAXSjmiq1VkxHAWlM0=bwAle9QcOibWbimEBw3WKw0E0W3IND2kxHAWYWqWYRDIBFQctEmJmFgLj9QcOjUEYJAXjhzWKwqJxRqJbuTixHA=O1QiqU57N9QcOibWbimEBw3WKwDWb13Ia/zWKw/=S=YXOv8kxHAWYWqWYRDIBFQcOibWaFgkSeY5l6b5tU48mvzWKwDEbjYWtJVkxHAE0sD=YsPIkhq=kpeFYAwkxHAEOJ/=bHYIe9QcO5vEt=vExh2Lj9QcOjUEYJAXjhzWKwqJxRqJbuTixHAWxWPiqU57l=e8YEDol2CIj9QctE1Ebw0Xa/zWKwqE0EbXlJgcPiU5KNq8mHzWKvb=OJAEb1ZkxHAWb5bJxUYXPDVkxHAWlM0=bwAle9QcOibWbimEBw3WKw/=ls3IND2kxHAWYWqWYRDIBFQctJDJaFgLj9QcOjUEYJAXjhzWKwqJxRqJbuTixHAWSG3IND2kxHAWYWqWYRDIBFQctM0WmFgLj9QcOjUEYJAXjhzWKwqJxRqJbuTixHAJSEUiqU57l=e8YEDol2CIj9QcOR6EO5UJq/zWKwe=bRPEbMgcPiU5KNq8mHzWKwqXSuP=lWZkxHAElJqExJeXPDVkxHAWlM0=bwAle9QcOibWbimEBw3WKwAJYu3IND2=3NCJPpg80ATkxHAWbjbWSHbLj9QcO=1JSwQ=mUnFYND5kiCRj9QcOR/JxsQJxD27N9QcO=1JSwQ=bh2Lj9QcOjUEYJAXjhzWKwqJxRqJbuTixHAWbM0iqU57N9QcOibWbimEBw3WKvvW0R3Ia/zWKw/=S=YXOv8kxHAWYWqWYRDIBFQcOUbJaFgkSezWKwqJxRqJbuTixHAE0=Uiq1diPpUiq/zWKw/=S=YXOv8kxHAWYWqWYRDIBFQctRxWqFgkSeY5l6b5tU48mvzWKweJbsAWlJVkxHAWb1PXOw/Lj9QcOjbXt=YWBUnFYND5kiCRj9QcONmWSw/=mvzWKwqXSFAXOsVkxHAWlWA=YJQISh2Lj9QcOjUEYJAXjhzWKwqJxRqJbuTixHAXSiviqU57N9QcOibWbimEBw3WKw6EYR3Ia/zWKw/=S=YXOv8kxHAWYWqWYRDIBFQcOwqEBFgkSeY5l6b5tU48mvzWKwDJbwxWSwVkxHAXtseWSWgcPiU5KNq8mHzWKwDJbwxWSw97N9QcOvvESsxXPDVkxHAWlM0=bwAle9QcOibWbimEBw3WKw/XOM3IND2kxHAWYWqWYRDIBFQctjvWmFgIe9QcOibWbimEBw3WKv1ExM3Ia/zWKw/=S=YXOv8kxHAWYWqWYRDIBFQctRxWBFgkSezWKwqJxRqJbuTixHAWxFPiq1VkxHAWlM0=bwAle9QcOibWbimEBw3WKw/JlM3IND2kxHAWYWqWYRDIBFQctjvWmFgIe9QcOibWbimEBw3WKvmXtR3Ia/zWKw/=S=YXOv8kxHAWYWqWYRDIBFQctWqJaFgkSezWKwqJxRqJbuTixHAJlW/iq1VkxHAWlM0=bwAle9QcOibWbimEBw3WKwxJlJ3IND2kxHAWYWqWYRDIBFQcOUUEmFgLj9QcOjUEYJAXjhzWKwqJxRqJbuTixHAWbW/iqU57N9QcOibWbimEBw3WKwqEOF3IahzWKwqJxRqJbuTixHAEls0iq1VkxHAWlM0=bwAle9QcOibWbimEBw3WKvmWxs3IND2kxHAWYWqWYRDIBFQcOE1iq1di0u3Lj9QcOjUEYJAXjhzWKwqJxRqJbuTixHAWbJAiqU57N9QcOibWbimEBw3WKwqExJ3Ia/zWKw/=S=YXOv8kxHAWYWqWYRDIBFQcOwQ=BFgkSezWKwqJxRqJbuTixHAJYRqiq1VkxHAWlM0=bwAle9QcOibWbimEBw3WKwD=tR3IND2kxHAWYWqWYRDIBFQcOsAEmFgLj9QcOjUEYJAXjhzWKwqJxRqJbuTixHAJbRAiqU57N9QcOibWbimEBw3WKwAWS13Ia/zWKw/=S=YXOv8kxHAWYWqWYRDIBFQcOibJaFgkSezWKwqJxRqJbuTixHAWxs6iq1VkxHAWlM0=bwAle9QcOibWbimEBw3WKweXBFgkSezWKwqJxRqJbuTixHAJbiYiq1VkxHAWlM0=bwAle9QcOibWbimEBw3WKwqWOw3IND2kxHAWYWqWYRDIBFQcOR0EmFgLj9QcOjUEYJAXjhzWKwqJxRqJbuTixHAXtWPiqU57N9QcOibWbimEBw3WKwPJls3Ia/zWKw/=S=YXOv8kxHAWYWqWYRDIBFQcOuAEmFgkSezWKwqJxRqJbuTixHAEYRqiq1VkxHAWlM0=bwAle9QcOibWbimEBw3WKvbElR3IND2kxHAWYWqWYRDIBFQcOiYEmFgLj9QcOjUEYJAXjhzWKwqJxRqJbuTixHAXOJDiqU57N9QcOibWbimEBw3WKweExM3Ia/zWKw/=S=YXOv8kxHAWYWqWYRDIBFQcOs0EBFgkSezWKwqJxRqJbuTixHAExMPiq1VkxHAWlM0=bwAle9QcOibWbimEBw3WKvvWtu3IND2kxHAWYWqWYRDIBFQcOWQJmFgLj9QcOjUEYJAXjhzWKwqJxRqJbuTixHAXtW/iqU57l=e8YEDol2CIj9QcOjvWOHbJq/zWKwDEOjm=bRgcPiU5KNq8mHzWKw/JSGQJ0WTkxHAEOu/JYJqISh2Lj9QcOjUEYJAXjhzWKwqJxRqJbuTixHAESseiqU57l=e8YEDol2CIj9QcOpmWSRxXaUnFYND5kiCRj9QcOpmWSRxXawgXPDVkxHAWlM0=bwAle9QcOibWbimEBw3WKwD=S13IND2=3NCJPpg80ATkxHAEx1/EbUvIkhq=kpeFYAwkxHAEx1/EbUvIB1nza/zWKw/=S=YXOv8kxHAWYWqWYRDIBFQcOWDXaFgkSezWKwqJxRqJbuTixHAXSwxiq1dkxHAWYWqWYRDIBFQcORe=BFgLj9QcOjUEYJAXjhzWKwqJxRqJbuTixHAEx16iqU57l=e8YEDol2CIj9QcOj1XOE1EB/zWKwqEtWPES1VkxHAWSM0=bHbIkhq=kpeFYAwkxHAWluAW0uDIj9QcORDJxFeXa/zWKw/ES=YWtWgXPDn5YjqRj9QcOuPExuqWOezWKw/=S=YXOwVkxHAWYWPE0WQ7l=e8YEDol2CIBUn5YjqRj9QcOsDWOw/WxezWKwqJxRqJbunolJTkxHAEOFPEORQle9QcOsDWOw/Wqw3WKwqExM3INDTkxHAEOFPEORQle9QcOsDWOw/Wqw3WKvb=OW3INDVkxHAEOFPEORQle9QcOsDWOw/Wqw3WKvb=OW3INDgIkhY5l6b5tU48mHzWKw/=YJ6WbJTIkh0JkRwkxHAEtMDEt=m7N9QcOsDWOw/WxhzWKwDExFDWbH8kxHAEtMDEt=mIBFQcOMPJaFgkavzWKwxElRxW0sVkxHAEts6XSH1ISh2zlNVF0Nn5YjqRj9QcOReW0EbJxDvRNh5XPiU5KNq8mHY5l6b5tU48mvzWKweEOjU=OJVkxHAEOR/ExWqIkh0JkRwkxHAWxUUWlM07N9QcOsDWOw/Wq/zWKw/WOvUW0W2cPDnkxHAWSGA=SEble9QcOW6=SjUEmw3WKvmESw3IND2kxHAEOFPEORQle9QcOW6=SjUEmw3WKvUWYu3INDVkxHAWSGA=SEble9QcOW6=SjUEmw3WKvUWbs3IND2=3NCJPpg80ATkxHA=tJQXSUvLj9QcOpYJS5bEmUn5YjqRj9QcOR/JlNY=bezWKwxXlM/=SJnFYND5kiCRj9QcOuPExuqWjhzWKwqWljU=YJTixHAEtMqiqU5Ij9QctpYWO16Ja/zWKwD=YsPJxJgXPDVkxHAWSGA=SEble9QcOW6=SjUEmw3WKvmEOs3IND2=3NCJPpg80ATkxHAWlEm=Ys0Lj9QcOivJb5YWmUn5YjqRj9QcOW6=bMA=OezWKwxXlM/=SJnFYND5kiCRj9QcOuPExuqWjhzWKwxXlJeXtuTixHAES5viqU5Ij9QcOjbJY=vEm/zWKwqJlRP=bRgXPDVkxHAWSGA=SEble9QcOW6=SjUEmw3WKvYEaFgkSeY5l6b5tU48mvzWKwqWOuP=YuVkxHAEtJ6=SJPIkh0JkRwkxHAWYJxExvv7N9QcOW6=SjUEbhq=kpeFYAwkxHAEOFPEORQle9QcOiYWxFAJaw3WKvUXOs3INDTkxHAWbGDE0=1Lj9QcOpYXlM0Eq1nza/zWKw/WOvUW0E8kxHAWxUUWlM0IBFQcOj1EmFgkSezWKwDExFDWbH8kxHAWxUUWlM0IBFQctjbJmFgka/zWKw/WOvUW0E8kxHAWxUUWlM0IBFQctWAEBFgkSezWKwDExFDWbH8kxHAWxUUWlM0IBFQctWQWmFgka/zWKw/WOvUW0E8kxHAWxUUWlM0IBFQctpbJmFgkSeY5l6b5tU48mvzWKw/=SHYEbFVkxHAWSJ6=ts0Ikh0JkRwkxHA=YNbESs2kxHAWxUUWlM0XPiU5KNq8mHzWKwDExFDWbH8kxHA=YNbESsTixHA=bvviqU5Ij9QcOjUWtJ0Eq/zWKw/EbU1JSJgXPDVkxHAWSGA=SEble9QcOW6=SjUEmw3WKwxESs3IND2kxHAEOFPEORQle9QcOW6=SjUEmw3WKw/WtJ3INDVkxHAWSGA=SEble9QcOW6=SjUEmw3WKwAEOG3IND2kxHAEOFPEORQle9QcOW6=SjUEmw3WKvmJlM3INDVkxHAWSGA=SEble9QcOW6=SjUEmw3WKv1XlR3IND2=3NCJPpg80ATkxHA=YsxEYNmLj9QcONUEOHb=BUn5YjqRj9QcOReXtjmESezWKwxXlM/=SJnFYND5kiCRj9QcOuPExuqWjhzWKwqESvvJbMTixHA=SF/iqU5Ij9Qct=vWx=UJm/zWKwe=SuQJ0ugXPDVkxHAWSGA=SEble9QcOW6=SjUEmw3WKw6JSR3IND2kxHAEOFPEORQle9QcOW6=SjUEmw3WKw6Wb13INDn5YjqRj9QcOibEO=mExezWKw/WOvUW0WnolJTkxHAEOFPEORQle9QcOW6=SjUEmw3WKvUExs3INDTkxHAEOFPEORQle9QcOW6=SjUEmw3WKvvWlu3INDVkxHAEOFPEORQle9QcOW6=SjUEmw3WKv1WOJ3INDgIkhY5l6b5tU48mHzWKwxExG6JSRTIkh0JkRwkxHAWlWQWONb7N9QcOW6=SjUEbhg=mvzWKw/Jb=1XOWgcP=vFmHzWKweEOW0XlW2kxHAESE1ESuAle9QcOjbWOGeJqw3WKvYESG3INDTkxHAES1PESUULtjq=PNh=l6DFq1nFYND5kiCRj9QcONUJbW0WbeC5l/VLj9QcOMDWxJ6Jxh2zkeU8KEUcP=vFmHzWKvUXSs6WtR2kxHAWbMxJ0Eb70=e8YEDol2CIBUn5YjqRj9QcOiUJlMQ=OezWKwxXlM/=SJnolJTkxHAWYWDEYRPle9QcOiUJlMQ=Bw3WKv1J0R3INDTkxHAWYWDEYRPle9QcOiUJlMQ=Bw3WKwxESs3INDVkxHAWYWDEYRPle9QcOiUJlMQ=Bw3WKwAEOG3INDgIkhg=mvzWKwDWbsPWxRgc0UYIj9QcOibEO=mEehzWKwq=ljUWtuTixHA=OUmiqU5Ij9QcOibEO=mEehzWKwq=ljUWtuTixHAXlsqiqU5Lj9QcOibEO=mEehzWKwq=ljUWtuTixHAXlsqiqU5IaUn5YjqRj9QcONmEtiUWxezWKwDWbsPWxi8kxHAWYNv=SH1IBFQctJeWBFgkavzWKweEOjU=OJVJki35leU83pxIShq=kpeFYAwkxHAEOR/ExWq7l6e8tQVkxHAElRDJYMxXPeU8KEUc0=e8YEDol2CRj9QcORDWOs0WqwgcP=vFmHzWKw/Jx=1EOF2kxHAWYNv=SH1Lj9QcOseEbpUESezWKwxJSNYWtp8kxHAWlW0=OuPIBFQcOwDEaFgIe9QcOjbEYuDEqw3WKweExJ3IaV38lM3kavzWKwqJxu0Jb58kxHAWlW0=OuPIBFQctReXBFgkaU8WKw/kShzWKw/ESJD=SMYiU9QcOibEO=mEehzWKw/Jx=1EOFTixHA=SR/iqU5Ij9QcOseEbpUENhzWKw/Jx=1EOFTixHAEtJeiq1di06DieDV83NV8B1ykxHAW0iY=bsq7N9QcOseEbpUESgzWKw0EOEYWls2kxHAWxpYJ0MPle9QcOjbEYuDEqw3WKwAEOM3IahzWKw/Jx=1EOFTixHAESF0iq1di0eUieDTkxHAWYWDEYRPle9QcOjbEYuDEqw3WKvmESw3INDglxHAWjDnzke2zlNVF0Nn=3NCJPpg80AwkxHAWbEm=SuqIBUn5YjqRj9QcOR/Etpv=OezWKwq=ljUWtuVkxHAWxGQJbsQXPpqckhzWKwxWOHmWSG2JYhqctEXle9QcOR/Etpv=Bw3WKvmEOs3INDTkxHA=SwxEbEvLtidF3vbSUhzWKwqWSp1JluTixHA=bM3INDTJYhqctEXle9QcOR/Etpv=Bw3WKvYEaFgkavmoPiAJD68kxHAWbsD=tj1IBFQcOj1EmFgka/moPiAJD68kxHAWbsD=tj1IBFQctWAEBFgka1Viq1niq1gIB1nzlEv5tETIj9QcOWPJbE1JaUnkxHAWxGQJbsQ7N9QcORPJ0J0=Sh2FYND5kiCRj9QcOWQWtR/WOh2zkD+=3NCJPpg80ATIkh2XPiU5KNq8mHzWKwqESEbJ0W2RNh5Lj9QctM6WS1QJbh2zSh2zawgLj9QcOivWSM6JSeY5l6b5tU48mwgcP=vFmHzWKwe=OEbXOG2kxHAWYWqWYRDLj9QcO=b=OGQXSenzShzWKw0J0uQWOU8kxHAEluxJxwQIBFQcOuqWaFgkSezWKwDExFDWbH8kxHAEluxJxwQIBFQctpvWaFgka/zWKw0J0uQWOU8kxHAEluxJxwQIBFQcO=miqU57N9QcOuPExuqWjhzWKwe=OEbXOGTixHA=O5YiqU5Lj9QcO=b=OGQXNhzWKwe=OEbXOGTixHAWSF6iqU57l=e8YEDol2CIj9QcOWx=OFq=m/zWKwxJxsq=YugcP=vFmHzWKweJSFxEbw2kxHAEluxJxwQXPiU5KNq8mHzWKwDExFDWbH8kxHAElsPWxJAIBFQcts0=BFgkavzWKwxW0uPWYJVkxHAW0W/WY=1ISh2Lj9QcO=b=OGQXNhzWKwe=OEbXOGTixHAWbu/iqU57N9QcOuPExuqWjhzWKwe=OEbXOGTixHA=b5YiqU5Lj9QcO=b=OGQXNhzWKwe=OEbXOGTixHAXSF0iqU57N9QcOuPExuqWjhzWKwe=OEbXOGTixHAJxG6iqU5Lj9QcO=b=OGQXNhzWKwe=OEbXOGTixHAEtN1iqU57l=e8YEDol2CIj9QcOEmJbHYWm/zWKvbWbReJxRgcP=vFmHzWKwqJY=bJSF2kxHAEluxJxwQXPiU5KNq8mHzWKwDExFDWbH8kxHAWYiYJ0sPIBFQctMPWaFgkavzWKwxJYRQ=bRVkxHAJxRqElWqISh2Lj9QcO=b=OGQXNhzWKwe=OEbXOGTixHAWxRxiqU57N9QcOuPExuqWjhzWKwe=OEbXOGTixHAESNbiqU5Lj9QcO=b=OGQXNhzWKwe=OEbXOGTixHAESM6iqU57N9QcOuPExuqWjhzWKwe=OEbXOGTixHAWb51iqU5XP=vFmHzWKwxWljmWOM2kxHAEYE1WOG6X0UYIj9QcOuPExuqWjhzWKwe=OEbXOGTixHAJS=1iqU5Ij9QcOuPExuqWjhzWKwe=OEbXOGTixHAWxs0iqU5Lj9QcOuPExuqWjhzWKwe=OEbXOGTixHA=SRDiqU5IaUn5YjqRj9QcOEUJlEYESDvRNh5XPiU5KNq8mHY5l6b5tU48mvzWKwxEOFxExwVkxHAWSF6E0jmIkh0JkRwkxHAEOpbJSwe7N9QcON1W0WAWB/zWKweJlJ/WYM2cPDnkxHAEljYWSiUle9QcOuDJ0sAEaw3WKw6EYJ3IND2kxHAWxjvJbGele9QcOuDJ0sAEaw3WKwDWbs3INDVkxHAEljYWSiUle9QcOuDJ0sAEaw3WKwxXls3IND2kxHAWxjvJbGele9QcOuDJ0sAEaw3WKw0JmFgka/zWKweJlJ/WYN8kxHAEOpbJSweIBFQctWPJqFgkSeY5l6b5tU48mvzWKweWYsxExWVkxHAWlJ0JlW6Ikh0JkRwkxHAEtu6=SEY7N9QcOuDJ0sAEShq=kpeFYAwkxHAWxjvJbGele9QcOp1XlMx=mw3WKw/Ex13INDTkxHAESivWxFxLj9QcOjYEYjbXa1nza/zWKweJlJ/WYN8kxHAEOpbJSweIBFQctjYWBFgkSezWKwxWljmWON8kxHAEOpbJSweIBFQcORDWaFgka/zWKweJlJ/WYN8kxHAEOpbJSweIBFQcOpviqU57l=e8YEDol2CIj9QcOj1EtuxWa/zWKweJSibEtWgcP=vFmHzWKweXOs0EOR2kxHAEOpbJSweXPiU5KNq8mHzWKwxWljmWON8kxHAESw/EbuqIBFQcOsPXaFgkavzWKw/=Op1WxsVkxHAElsqJxpbISh2Lj9QcONv=bsq=NhzWKwDEtEvXOMTixHAWYpYiqU57N9QcOW/JlRQENhzWKwDEtEvXOMTixHAXSF0iqU5XP=vFmHzWKweWljvEOw2kxHAEljYWSiUX0UYIj9QcOW/JlRQENhzWKwDEtEvXOMTixHAEtN1iqU5Ij9QcOW/JlRQENhzWKwDEtEvXOMTixHAWxRxiqU5Lj9QcOW/JlRQENhzWKwDEtEvXOMTixHAESM6iqU5IaUn=3NCJPpg80AwkxHAWxpbJbFQIBUn5YjqRj9QcOEYWtM/JbezWKwDEtEvXOMnFYND5kiCRj9QcOjUWxiUWehzWKwx=bHUWlRTixHA=OuqiqU5XPe2=l/x=kh0JkRwkxHAWSFDESRQ7N9QcOEUJlEYES2Y5l6b5tU48mwgcP=vFmHzWKwqXSjbWYu2kxHAEOpbJSweX0UYIj9QcOM/JlsDXjhzWKwqXSjbWYuTixHAJx5biqU5Ij9QcOM/JlsDXjhzWKwqXSjbWYuTixHAJlJQiqU5Lj9QcOM/JlsDXjhzWKwqXSjbWYuTixHAJlJQiqU5IaUn=3NCJPpg80AwkxHAWYJ/=tJPIBUn5YjqRj9QcOseWSFxWSezWKwqXSjbWYuVkxHAElRQXtJ07N9QcOMe=lW0XjhzWKw/ESsPWxsTixHAXOueiq1dkxHAWSM/ExW/IBFQctivJmFgkavzWKweWljvEOv8kxHAWSM/ExW/IBFQcO10=mFgka1nkxHAElRQXtJ0le9QcOseWSFxWaw3WKw/=b13INe8kxHAWSM/ExW/IBFQcO1A=mFgkSezWKweWljvEOv8kxHAWSM/ExW/IBFQcOW6JaFgka/zWKwqJYM0Elj8kxHAWSM/ExW/IBFQctW6=mFgIe9QcOseWSFxWaw3WKwA=tR3IND2Raj8ka/zWKw/EYJQES58kxHAWSM/ExW/IBFQcOueXaFgkSD3ixh2zlNVF0NnolJTkxHAWSF6E0jmIkhg=mvzWKweWljvEOv8kxHAWb1/Jxi1IBFQcOpviqU5Ij9QcOM/JlsDXjhzWKwqXSjbWYuTixHAWYpYiqU5Lj9QcOM/JlsDXjhzWKwqXSjbWYuTixHAWYpYiqU5IaUn=3NCJPpg80AwkxHAEtEvJxRxIBUnFYND5kiCiqFnzkeU8KEUcP=vFmHzWKwqJbF6WOs2kxHAWSF6E0jmle9QcOR6WlWq=Bw3WKvYESG3INDTkxHAWxuPWxFALtjq=PNh=l6DFq1nFYND5kiCRj9QcOsPXS5vJbeC5l/VLj9QcOimEx1QWSh2zke2XY=e8YEDol2CIBUnzShq=kpeFYAwkxHAW0NvJ0Je7aj8ka/zWKw/ExueWbGnzkDnzlNVF0Nn=3NCJPpg80AwkxHAEOJPJlMDIBUnkxHAEORxWYW67N9QcOJPXOJ0WNVQcOj5XPe2zawgX0/U5BHzWKwxWxpvWxR2RNh5X0E483EDRj9QcONYEtpmWSezWKwDExFDWbH8kxHAWYWqWYRDIBFQcOpUXaFgkavzWKwxWbM0ESGgLj9QcOu/WSw/WSe8kxHAEOFPEORQle9QcOibWbimEBw3WKwxEO13INDVkxHAEOFPEORQle9QcOibWbimEBw3WKvUXtW3INDVkxHAElJD=tR/kShY5l6b5tU48mHzWKwxWbM0ESGTkxHAEtW/JbMQ7SHAXBUn5YjqRj9QcOp1=SWqEbezWKwqJxRqJbuVkxHAEtEv=bwQ7kh2Xe9QcOpbJlJAWjhzWKwD=tMxWbJTixHA=bW0iqU57N9QcOuPExuqWjhzWKwD=tMxWbJTixHAXOGxiqU5Lj9QcOpbJlJAWjhzWKwD=tMxWbJTixHAWYR3IND2kxHAEOFPEORQle9QcOp1=SWqEmw3WKvbXls3INDVkxHAEtEv=bwQle9QcOp1=SWqEmw3WKw0=S13IND2=3NCJPpg80ATkxHAEt=1JbjbLj9QcOiUEOM6JqUn5YjqRj9QcOsAW0Ev=SezWKwD=tMxWbJnFYND5kiCRj9QcOuPExuqWjhzWKw/XOEbJlMTixHAEbWQiqU5Ij9QcOpY=tR/Jq/zWKwq=SueXlWgXPDVkxHAEtEv=bwQle9QcOp1=SWqEmw3WKv1WlJ3IND2kxHAEOFPEORQle9QcOp1=SWqEmw3WKvUJlJ3INDVkxHAEtEv=bwQle9QcOp1=SWqEmw3WKvYJ0u3IND2kxHAEOFPEORQle9QcOp1=SWqEmw3WKvUJb13INDVkxHAEtEv=bwQle9QcOp1=SWqEmw3WKw6WOs3IND2kxHAEOFPEORQle9QcOp1=SWqEmw3WKwqWOR3INDVkxHAEtEv=bwQle9QcOp1=SWqEmw3WKv1EOu3IND2kxHAEOFPEORQle9QcOp1=SWqEmw3WKvbExs3INDVkxHAEtEv=bwQle9QcOp1=SWqEmw3WKw6EYu3IND2kxHAEOFPEORQle9QcOp1=SWqEmw3WKvvJxw3INDVkxHAEtEv=bwQle9QcOp1=SWqEmw3WKwDEts3IND2kxHAEOFPEORQle9QcOp1=SWqEmw3WKvUElR3INDVkxHAEtEv=bwQle9QcOp1=SWqEmw3WKwDESu3IND2kxHAEOFPEORQle9QcOp1=SWqEmw3WKvmXlu3INDVkxHAEtEv=bwQle9QcOp1=SWqEmw3WKwxWxJ3IND2=3NCJPpg80ATkxHAW0W0EtNvLj9QcOwQJ0EUJmUn5YjqRj9QcORQJ0Rq=bezWKwD=tMxWbJnFYND5kiCRj9QcOuPExuqWjhzWKwqWtEmWYJTixHA=SF/iqU5Ij9QcOEbEbpUJa/zWKwAWtEb=lRgXPDVkxHAEtEv=bwQle9QcOp1=SWqEmw3WKvU=tu3IND2kxHAEOFPEORQle9QcOp1=SWqEmw3WKvYWx13INDVkxHAEtEv=bwQle9QcOp1=SWqEmw3WKvmWls3IND2=3NCJPpg80ATkxHAWxWAXSFPLj9QcOE1E0iYEq/zWKwDXO51J0MVkxHAW0JPJxuqIkh0JkRwkxHAEOM0WOMe7N9QcOp1=SWqEbhq=kpeFYAwkxHAEOFPEORQle9QcOueEbGeEaw3WKvvESM3INDTkxHAWxWAXSFPLj9QcOE1E0iYEq/zWKwDXO51J0MVkxHAW0JPJxuqISh2Lj9QcOpbJlJAWjhzWKwD=tMxWbJTixHAExiUiqU57l=e8YEDol2CIj9QcOWqESsDXB/zWKweE0pvElRgcP=vFmHzWKweWYNvJbu2kxHAEtpUWxR0XPiU5KNq8mHzWKwDExFDWbH8kxHAESiUJlRDIBFQcOWxWBFgkavzWKwxWbM/EOwVkxHAES51JSNmISh2Lj9QcOpbJlJAWjhzWKwD=tMxWbJTixHAWxvmiqU57l=e8YEDol2CIj9QcORAJxNvXB/zWKwe=bEYWtsgcP=vFmHzWKwe=SJ6=OW2kxHAEtpUWxR0XPiU5KNq8mHzWKwDExFDWbH8kxHAElM0XluxIBFQctsq=aFgkavzWKwqXtWeJSwVkxHAElJx=bHvISh2Lj9QcOpbJlJAWjhzWKwD=tMxWbJTixHAJxJ3IND2kxHAEOFPEORQle9QcOp1=SWqEmw3WKv1JSs3INDVkxHAEtEv=bwQle9QcOp1=SWqEmw3WKvvEOF3IND2kxHAEOFPEORQle9QcOp1=SWqEmw3WKvY=S13INDVkxHAEtEv=bwQle9QcOp1=SWqEmw3WKwPJxJ3IND2kxHAEOFPEORQle9QcOp1=SWqEmw3WKw/JbR3INDVkxHAEtEv=bwQle9QcOp1=SWqEmw3WKwA=SW3IND2kxHAEOFPEORQle9QcOp1=SWqEmw3WKv1E0J3INDVkxHAEtEv=bwQle9QcOp1=SWqEmw3WKvUJxJ3IND2kxHAEOFPEORQle9QcOp1=SWqEmw3WKvmEYM3INDVkxHAEtEv=bwQle9QcOp1=SWqEmw3WKvvWbw3IND2=3NCJPpg80ATkxHAW0Jx=OGeLj9QcONUE0=mXB/zWKwq=SNUXSRgcP=vFmHzWKwq=OJQWOR2kxHAEtpUWxR0XPiU5KNq8mHzWKwDExFDWbH8kxHAWYu0WOGqIBFQctu/WaFgkavzWKwx=bE1WOMVkxHAElMP=YRALj9QcOiUElM6Wm1nza/zWKwDJ0jYXOH8kxHAEtpUWxR0IBFQcOFA=aFgkSezWKwDExFDWbH8kxHAEtpUWxR0IBFQctjbEmFgka/zWKwDJ0jYXOH8kxHAEtpUWxR0IBFQcO5mEBFgkSezWKwDExFDWbH8kxHAEtpUWxR0IBFQctsQXaFgka/zWKwDJ0jYXOH8kxHAEtpUWxR0IBFQcOpvXBFgkSeY5l6b5tU48mvzWKwq=Yu6EYWVkxHAWSM6WSUbIkh0JkRwkxHAW0WqXlRq7N9QcOp1=SWqEbhq=kpeFYAwkxHAEOFPEORQle9QcOEbWbUmWmw3WKvvEYu3INDTkxHAWY=1XS=bLj9QcOseXSs6Jq1nza/zWKwDJ0jYXOH8kxHAEtpUWxR0IBFQctiY=mFgkSezWKwDExFDWbH8kxHAEtpUWxR0IBFQctEUJmFgka/zWKwDJ0jYXOH8kxHAEtpUWxR0IBFQcO1PiqU57N9QcOuPExuqWjhzWKwD=tMxWbJTixHA=lpviqU5Lj9QcOpbJlJAWjhzWKwD=tMxWbJTixHAXSJxiqU57l=e8YEDol2CIj9QcOWDEbNUEB/zWKweXtuQXOwgcP=vFmHzWKw/=OWDWYW2kxHAEtpUWxR0XPiU5KNq8mHzWKwDExFDWbH8kxHAWluxEOibIBFQcOJDXBFgkavzWKwxEOJe=SuVkxHAESv1WOwAISh2Lj9QcOpbJlJAWjhzWKwD=tMxWbJTixHAExR3IND2kxHAEOFPEORQle9QcOp1=SWqEmw3WKvvJ0R3INDVkxHAEtEv=bwQle9QcOp1=SWqEmw3WKwxWmFgkSezWKwDExFDWbH8kxHAEtpUWxR0IBFQctWQWmFgka/zWKwDJ0jYXOH8kxHAEtpUWxR0IBFQcOuDWBFgkSeY5l6b5tU48mvzWKwx=SRDXlRVkxHAEb=YWx=1Ikh0JkRwkxHAWSpv=tM67N9QcOp1=SWqEbhq=kpeFYAwkxHAEOFPEORQle9QcOsDJlpUXaw3WKwPJbW3INDTkxHAW0MqEOUmLj9QcOJ0=bW0=B1nza/zWKwDJ0jYXOH8kxHAEtpUWxR0IBFQcORxEmFgkSezWKwDExFDWbH8kxHAEtpUWxR0IBFQcOReEqFgka/zWKwDJ0jYXOH8kxHAEtpUWxR0IBFQcts6XaFgkSeY5l6b5tU48mvzWKwxWY=bJlRVkxHAESjb=YReIkh0JkRwkxHAW0MAJb1e7N9QcOp1=SWqEbhq=kpeFYAwkxHAEOFPEORQle9QcOEUXtR6Eaw3WKvbESF3INDTkxHAWxiYJ0jmLj9QcOM/J0=mEa1nza/zWKwDJ0jYXOH8kxHAEtpUWxR0IBFQcOw0WaFgkSezWKwDExFDWbH8kxHAEtpUWxR0IBFQcORAWBFgka/zWKwDJ0jYXOH8kxHAEtpUWxR0IBFQcOuDJqFgkSezWKwDExFDWbH8kxHAEtpUWxR0IBFQcOimEmFgka/zWKwDJ0jYXOH8kxHAEtpUWxR0IBFQcOMqWmFgkSeY5l6b5tU48mvzWKw/J0J/WtRgcP=vFmHzWKw/WtivElJ2kxHAEtpUWxR0XPiU5KNq8mHzWKwDExFDWbH8kxHAWSHmJSNYIBFQctW/EaFgkavzWKw/J0J/WtRgXPDVkxHAEtEv=bwQle9QcOp1=SWqEmw3WKwAWts3IND2kxHAEOFPEORQle9QcOp1=SWqEmw3WKvYExs3INDVkxHAEtEv=bwQle9QcOp1=SWqEmw3WKwP=bw3IND2kxHAEOFPEORQle9QcOp1=SWqEmw3WKwD=lM3INDVkxHAEtEv=bwQle9QcOp1=SWqEmw3WKw/WOHbiqU57N9QcOuPExuqWjhzWKwD=tMxWbJTixHAWbweiqU5Lj9QcOpbJlJAWjhzWKwD=tMxWbJTixHAElJ6iqU57N9QcOuPExuqWjhzWKwD=tMxWbJTixHAWbM/iqU5Lj9QcOpbJlJAWjhzWKwD=tMxWbJTixHAWxWDiqU57N9QcOuPExuqWjhzWKwD=tMxWbJTixHAW0u6iqU5Lj9QcOpbJlJAWjhzWKwD=tMxWbJTixHA=bMAiqU57N9QcOuPExuqWjhzWKwD=tMxWbJTixHAExJQiqU5Lj9QcOpbJlJAWjhzWKwD=tMxWbJTixHA=OsxiqU57N9QcOuPExuqWjhzWKwD=tMxWbJTixHA=SHmiqU5Lj9QcOpbJlJAWjhzWKwD=tMxWbJTixHA=SiUiqU57l=e8YEDol2CIj9QcORAJb=1WB/zWKw/WlNvWOsgcP=vFmHzWKw/WbpvWlJ2kxHAEtpUWxR0XPiU5KNq8mHzWKwDExFDWbH8kxHAWSRDJSjYIBFQctMDXaFgkavzWKwqXtR0=OGVkxHAWSjUJSG/ISh2Lj9QcOpbJlJAWjhzWKwD=tMxWbJTixHAEOM0iqU57N9QcOuPExuqWjhzWKwD=tMxWbJTixHAJSJxiqU5Lj9QcOpbJlJAWjhzWKwD=tMxWbJTixHAJ0WDiqU57N9QcOuPExuqWjhzWKwD=tMxWbJTixHAEOG6iqU5Lj9QcOpbJlJAWjhzWKwD=tMxWbJTixHAESW3IND2kxHAEOFPEORQle9QcOp1=SWqEmw3WKw0EBFgka/zWKwDJ0jYXOH8kxHAEtpUWxR0IBFQctNvEaFgkSeY5l6b5tU48mvzWKweExE1JbJVkxHAWlW0EYuqIkh0JkRwkxHAWSjUEbMA7N9QcOp1=SWqEbhq=kpeFYAwkxHAEOFPEORQle9QcOs/=SJeXBw3WKw0WxG3INDTkxHAESFx=tR0Lj9QcOjbEb=1Wm1nza/zWKwDJ0jYXOH8kxHAEtpUWxR0IBFQcOR0JaFgkSezWKwDExFDWbH8kxHAEtpUWxR0IBFQcti1EaFgka/zWKwDJ0jYXOH8kxHAEtpUWxR0IBFQcOvbEBFgkSezWKwDExFDWbH8kxHAEtpUWxR0IBFQcOMqWaFgka/zWKwDJ0jYXOH8kxHAEtpUWxR0IBFQctMx=BFgkSezWKwDExFDWbH8kxHAEtpUWxR0IBFQcOsQWmFgkSh0JkRwkxHAWbj1=SpY7N9QcOpbJlJAWOhg=mvzWKwDExFDWbH8kxHAEtpUWxR0IBFQcOJqJaFgkavzWKwDExFDWbH8kxHAEtpUWxR0IBFQcO=bXaFgka/zWKwDExFDWbH8kxHAEtpUWxR0IBFQctuPWBFgka1gc0=e8YEDol2CRj9QcOim=bEvEawgcP=vFmHzWKweWx=vWlu2kxHAEtpUWxR0Xe9QcOuxJxs0=NhzWKweWx=vWluTixHAWlJ6iqU5le9QcOMxEYs/=Bw3WKw/=lW3IND2kxHAEOFPEORQle9QcOMxEYs/=Bw3WKvmXlu3INDnzkeU8KEUcP=vFmHzWKw/Jxw/WlJ2kxHAEOFPEORQle9QcOp1=SWqEmw3WKv1WSs3INDTkxHAWYWPE0WQLKpTokWV=3NCJPpg80ATIkh0JkRwkxHAWxWQEb5b7N9QcOp1=SWqEm/zWKwDWOUmEOW2cPDnkxHAEOG6Jbuxle9QcOWxWOJPJqw3WKvbEqFgkSeY5l6b5tU48mvzWKw/=tJ6WtJVkxHAWYWqJSJqIkh0JkRwkxHAW0uDWYEm7N9QcOWxWOJPJxhq=kpeFYAwkxHAEOFPEORQle9QcOE1EOibJmw3WKvUExs3INDTkxHAWlpYXSHYLj9QcOibWYs0Wm1nza/zWKwDWOUmEOE8kxHAWxWQEb5bIBFQcO16JaFgkSeY5l6b5tU48mvzWKwAWtjvWxMVkxHAXSMPEYsPIkh0JkRwkxHAWxsxWlE17N9QcOWxWOJPJxhq=kpeFYAwkxHAEOFPEORQle9QcOW/Wxjb=Bw3WKvUExG3INDTkxHAXOHvJSWeLj9QcO1eEx=vEq1nza/zWKwDWOUmEOE8kxHAWxWQEb5bIBFQcOF0EqFgkSeY5l6b5tU48mvzWKwDEbwx=lRVkxHAWlEvWOR/Ikh0JkRwkxHAWSG/JYMP7N9QcOWxWOJPJxhq=kpeFYAwkxHAEOFPEORQle9QcOsQWliUEqw3WKvbWSw3INDTkxHAEOJAW0NmLj9QcOjbJSGqWa1nza/zWKwDWOUmEOE8kxHAWxWQEb5bIBFQcOwxJaFgkSeY5l6b5tU48mvzWKwDWSUvWlMVkxHAWY=mWtuDIkh0JkRwkxHAElsx=b167N9QcOWxWOJPJxhq=kpeFYAwkxHAEOFPEORQle9QcONvW0J6Xaw3WKvbWSw3INDTkxHAEOs6JSjULj9QcOiYJbH1EB1nza/zWKwDWOUmEOE8kxHAWxWQEb5bIBFQcONbEBFgkSeY5l6b5tU48mvzWKwA=ts/XSWVkxHAW0=vE0uDIkh0JkRwkxHAWlsxXSuP7N9QcOWxWOJPJxhq=kpeFYAwkxHAEOFPEORQle9QcOjvWx1DEqw3WKw0WxG3INDTkxHAXtpvWS1xLj9QcOEYJS51EB1nza/zWKwDWOUmEOE8kxHAWxWQEb5bIBFQcOjmEqFgkSeY5l6b5tU48mvzWKwAW0u0=YWgcP=vFmHzWKwe=ljmEYM2kxHAWxWQEb5bXPiU5KNq8mHzWKwDExFDWbH8kxHAElNvJb=UIBFQcOibEmFgkavzWKwAW0u0=YWgXPDVkxHAEOG6Jbuxle9QcOWxWOJPJqw3WKw/E0J3IND2kxHAEOFPEORQle9QcOWxWOJPJqw3WKvvElR3INDVkxHAEOG6Jbuxle9QcOWxWOJPJqw3WKvbESu3IND2kxHAEOFPEORQle9QcOWxWOJPJqw3WKv1XSu3INDVkxHAEOG6Jbuxle9QcOWxWOJPJqw3WKweXtW3IND2kxHAEOFPEORQle9QcOWxWOJPJqw3WKvbXOR3INDn5YjqRj9QcOs0WSFPJbezWKwDWOUmEOWnolJTkxHAEOFPEORQle9QcOWxWOJPJqw3WKvUExs3INDTkxHAEOFPEORQle9QcOWxWOJPJqw3WKw/WOGxiqU5Lj9QcOuPExuqWjhzWKwxWxG0E0WTixHAJbEviqU5IaUn=3NCJPpg80AwkxHAWYNv=bWQIBUn5YjqRj9QcOsPXSWeExezWKwxWxG0E0WnkxHAWSJ/Ex5mle9QcOsPXSWeEqw3WKvbEqFgkavzWKweElEU=SFVkxHAWSUv=lpmIS2zWKwqWtjbWbud7N9QcOs0WSFPJUhzWKw/Ex1xESFTixHAXSUviqU5Ij9QcOs0WSFPJUhzWKw/Ex1xESFTixHAXSUviqU5Ij9QcOs0WSFPJUhzWKw/Ex1xESFTixHAExJPiqU5Ij9QcOs0WSFPJUhzWKw/Ex1xESFTixHAExJPiqU5Ij9QcOs0WSFPJUhzWKw/Ex1xESFTixHAXOEviqU5Ij9QcOs6EONY=UV3olu3kaQ37aFgLj9QcOReESs6JNhzWKw/Ex1xESFTixHAEOM6iqU5IaQ3zBFgLj9QcOuPWO16Wq1ViqJ3ISgzWKwDJYsxXtJd7N9QcOs0WSFPJUhzWKw/Ex1xESFTixHAXOEviqU5Ij9QcOs0WSFPJUhzWKw/Ex1xESFTixHAXOEviqU5Ij9QcOs0WSFPJUhzWKw/Ex1xESFTixHAXOEviqU5Ij9QcORP=SjmEeV3olu3kaQ37aFgLj9QcOMQXlJ6JehzWKw/Ex1xESFTixHAEOM6iqU5IaQ3imFgXPe2=l/x=kh0JkRwkxHAW0RD=li17l=e8YEDol2CIBUn5YjqRj9Qct=m=tNmJSezWKwxWxG0E0WVkxHAWbJ/ExWP7kh2Xe9QcOR0WSFxEehzWKvYJYpUJYsTixHAWlReiqU57l=e8YEDol2CIj9QcOM/ExJPEa/zWKweElRe=OMgcP=vFmHzWKvmXSJ/ElJ2kxHA=Yi1=livXPiU5KNq8mHzWKw/EbsPE0i8kxHAJb10WSNYIBFQcONbEBFgkavzWKweWSF0ExMVkxHAESNmElueISh2Lj9QcOR0WSFxEehzWKvYJYpUJYsTixHAJSHviqU57l=e8YEDol2CIj9QcOEm=tW6XBUn5YjqRj9QcO1A=YEUWSezWKvYJYpUJYsnFYND5kiCRj9QcOs0WSFPJUhzWKw6Xt=b=SsTixHAWlRPiqU5Ij9QcOEm=tW6XB1nzSh0JkRwkxHAWbsAJYN17N9QcOR0WSFxExhg=mvzWKw/EbsPE0i8kxHA=Yi1=livIBFQctWPiqU5Ij9QcOs0WSFPJUhzWKvYJYpUJYsTixHAWS5YiqU5Lj9QcOs0WSFPJUhzWKvYJYpUJYsTixHAWS5YiqU5IaUn5YjqRj9QcOMxWtJe=bezWKwxJbpUJYp8kxHA=Yi1=livIBFQctR/XaFgIq5qieDTkxHAWSJ/Ex5mle9Qct=m=tNmJaw3WKvbESu3INDgIBU8kxHA=Yi1=livIBFQctR/XaFgIq5qieDTkxHAWSJ/Ex5mle9Qct=m=tNmJaw3WKweXtW3INDgXPiU5KNq8mjzWKweWxHYEl=8kxHA=Yi1=livIBFQcOjbWmFgkavzWKw/Jxw/WlJgXPeU8KEUc0=e8YEDol2CRj9QcOW0XONbJawgcP=vFmHzWKwe=bWP=OW2kxHA=Yi1=livLKhg8leU=tUv5tNOotNboxgzWKwxWYivJxGVol6g5s5V80iv8s2mF0Nq5YNqXU9QcOpm=YMxW3D2kxHAWbsAJYN1le9QcONYWx51Wqw3WKw/JbM3INDTkxHAElNUWSv1Lj9QcOUbWOUbWm1nkxHAWbsAJYN1le9QcONYWx51Wqw3WKvvWts3INDTkxHAWximJlWQIa/zWKwqWSvm=lp8kxHAElJxE0uxIBFQctsQJaFgkavzWKwDJY=UWxRgXPe2zShq=kpeFYAwkxHAEOFPEORQle9QcOWxWOJPJqw3WKwDJxu3INDTkxHAW0RD=li1ISh2za1nkxHAEOFPEORQle9QcOp1=SWqEmw3WKwA=ts3INDTkxHAWlWAWSjYISh0JkRwkxHAWSw6El=17N9QcOuPExuqWjhzWKwD=tMxWbJTixHAExGAiqU5Ij9QcOivWSM6Ja/DotUxLt=e8YEDol2CIBUn5YjqRj9QcOMxExFQ=OezWKwD=tMxWbJVkxHAWSJ6W0se7kh2Xe9QcOs0XSEvENhzWKweWxFPWtuTixHAXSG6iqU57N9QcOR/=tMD=UhzWKweWxFPWtuTixHA=OjYiqU5Lj9QcOs0XSEvENhzWKweWxFPWtuTixHAWYueiqU57N9QcOR/=tMD=UhzWKweWxFPWtuTixHA=YE1iqU5Lj9QcOs0XSEvENhzWKweWxFPWtuTixHAJSJDiqU57N9QcOR/=tMD=UhzWKweWxFPWtuTixHAXSG/iqU5Lj9QcOs0XSEvENhzWKweWxFPWtuTixHAEbUYiqU57N9QcOR/=tMD=UhzWKweWxFPWtuTixHA=OuDiqU5Lj9QcOs0XSEvENhzWKweWxFPWtuTixHAWxMeiqU57N9QcOR/=tMD=UhzWKweWxFPWtuTixHAXS=1iqU5Lj9QcOs0XSEvENhzWKweWxFPWtuTixHA=bRqiqU57N9QcOR/=tMD=UhzWKweWxFPWtuTixHAEOpviqU5Lj9QcOs0XSEvENhzWKweWxFPWtuTixHAWxFQiqU57N9QcOR/=tMD=UhzWKweWxFPWtuTixHAEOMDiqU5Lj9QcOs0XSEvENhzWKweWxFPWtuTixHAJxW3IND2=3NCJPpg80ATkxHAESu0WOWqLj9QcOReExsqEBUn5YjqRj9QcOJQXOjb7N9QcOMxExFQ=Ohq=kpeFYAwkxHAWbj1=SpYle9QcOJQXOjbIBFQcOWxEmFgkavzWKweEOJQWxRVkxHAWbMPWSRDISh2Lj9QcOs0XSEvENhzWKweWxFPWtuTixHAW0JQiqU57N9QcOR/=tMD=UhzWKweWxFPWtuTixHA=bW0iqU5Lj9QcOs0XSEvENhzWKweWxFPWtuTixHAWSRqiqU57N9QcOR/=tMD=UhzWKweWxFPWtuTixHA=lp1iqU5Lj9QcOs0XSEvENhzWKweWxFPWtuTixHAXOvviqU57l=e8YEDol2CIj9QcOW/XSRQ=B/zWKwe=O=vEbwVkxHAWlEmWtWxLj9QcOR/WOpUJqUn5YjqRj9QcOuPWx=bJSezWKweWxFPWtunFYND5kiCRj9QcOR/=tMD=UhzWKwDExW0J0sTixHAJbjviqU5Ij9QcOW/XSRQ=B/zWKwe=O=vEbwVkxHAWlEmWtWxLj9QcOR/WOpUJq1nza/zWKw/Eb1xJSN8kxHAESWPExH1IBFQctu6XBFgkSeY5l6b5tU48mvzWKw/WxNvEtRVkxHAWSWQEtpbIkh0JkRwkxHAJbwQXtW/7N9QcOMxExFQ=Ohq=kpeFYAwkxHAWbj1=SpYle9QctRAWOvbWaw3WKwPWYM3INDTkxHAWSWeJSpmLj9QcOsxWOp1Jq1nza/zWKw/Eb1xJSN8kxHAESWPExH1IBFQctEmEqFgkSeY5l6b5tU48mvzWKwqElM0XSuVkxHAW0sDXOGeIkh0JkRwkxHAWbwPWOFA7N9QcOMxExFQ=Ohq=kpeFYAwkxHAWbj1=SpYle9QcORAExGPXBw3WKwxXtR3INDTkxHAWbNUEb1DLj9QcOEvEOwQEa1nza/zWKw/Eb1xJSN8kxHAESWPExH1IBFQcOJ6XBFgkSezWKwqWlpUEt=8kxHAESWPExH1IBFQctW0iqU5Lj9QcOs0XSEvENhzWKweWxFPWtuTixHAJSRxiqU57N9QcOR/=tMD=UhzWKweWxFPWtuTixHAJSuPiqU5Lj9QcOs0XSEvENhzWKweWxFPWtuTixHAXSuqiqU57N9QcOR/=tMD=UhzWKweWxFPWtuTixHAE0W0iqU5Lj9QcOs0XSEvENhzWKweWxFPWtuTixHAEYWxiqU57N9QcOR/=tMD=UhzWKweWxFPWtuTixHAXtMxiqU5Lj9QcOs0XSEvENhzWKweWxFPWtuTixHAXOs0iqU57N9QcOR/=tMD=UhzWKweWxFPWtuTixHA=lW0iqU5Lj9QcOs0XSEvENhzWKweWxFPWtuTixHAJSJ0iqU57l=e8YEDol2CIj9QcOiU=S1QWm/zWKwxEOw0XlWgcP=vFmHzWKweJSNvWxw2kxHAESWPExH1XPiU5KNq8mHzWKwqWlpUEt=8kxHAElseJSWAIBFQcO=UXaFgkavzWKwq=lM6WORVkxHAWxuAEbUbISh2Lj9QcOs0XSEvENhzWKweWxFPWtuTixHA=S=miqU57l=e8YEDol2CIj9QcORAWSJ0=m/zWKw/WYR/WbRVkxHAEOM0EOv1Ikh0JkRwkxHAWSF/W0ux7N9QcOMxExFQ=Ohq=kpeFYAwkxHAWbj1=SpYle9QcOsPWSE1Wqw3WKvvWbw3INDTkxHAWbw/Eb=YLj9QcOsqJbsqWm/zWKwDESJDXtugXPDVkxHAWSJ6W0sele9QcOMxExFQ=Bw3WKwxXSs3IND2kxHAWbj1=SpYle9QcOMxExFQ=Bw3WKwPXtM3INDVkxHAWSJ6W0sele9QcOMxExFQ=Bw3WKvb=bJ3IND2kxHAWbj1=SpYle9QcOMxExFQ=Bw3WKwPJbu3INDVkxHAWSJ6W0sele9QcOMxExFQ=Bw3WKvb=lM3IND2=3NCJPpg80ATkxHAESuQJxG6Lj9QcOR/JSR6XaUn5YjqRj9QcOR/XOpm=OezWKweWxFPWtunFYND5kiCRj9QcOR/=tMD=UhzWKwqWSwDJYuTixHAEtsAiqU5Ij9QcOMDWtWQXa/zWKwqWlsqXS1gXPDVkxHAWSJ6W0sele9QcOMxExFQ=Bw3WKvvWtJ3IND2kxHAWbj1=SpYle9QcOMxExFQ=Bw3WKvm=YJ3INDVkxHAWSJ6W0sele9QcOMxExFQ=Bw3WKwe=Su3IND2kxHAWbj1=SpYle9QcOMxExFQ=Bw3WKw6EqFgka/zWKw/Eb1xJSN8kxHAESWPExH1IBFQcOsD=mFgkSeY5l6b5tU48mvzWKw/EbNUWxGVkxHAWbEYWtiYIkh0JkRwkxHAESuQXOi17N9QcOMxExFQ=Ohq=kpeFYAwkxHAWbj1=SpYle9QcOMDWOwq=Bw3WKw6EbW3INDTkxHAWSJe=SWQLj9QcORx=bHm=m1nza/zWKw/Eb1xJSN8kxHAESWPExH1IBFQctJQ=aFgkSezWKwqWlpUEt=8kxHAESWPExH1IBFQcOFqiqU5Lj9QcOs0XSEvENhzWKweWxFPWtuTixHAXtueiqU57N9QcOR/=tMD=UhzWKweWxFPWtuTixHAWxR3INDVkxHAWSJ6W0sele9QcOMxExFQ=Bw3WKvYWbs3IND2=3NCJPpg80ATkxHAWbUUWxuqLj9QcOj1XOMDXaUn5YjqRj9QcOs/WbueESezWKweWxFPWtunFYND5kiCRj9QcOR/=tMD=UhzWKw/WSRDESMTixHAEOuQiqU5Ij9QcOR6=SWDWm/zWKw/=OweEO1gXPDVkxHAWSJ6W0sele9QcOMxExFQ=Bw3WKwPWlM3IND2kxHAWbj1=SpYle9QcOMxExFQ=Bw3WKwqWxJ3INDn5YjqRj9QcOimEYEm=OezWKw/Eb1xJSMnolJTkxHAWbj1=SpYle9QcOMxExFQ=Bw3WKvvXS13INDTkxHAWbj1=SpYle9QcOMxExFQ=Bw3WKwAEbs3INDVkxHAWbj1=SpYle9QcOMxExFQ=Bw3WKwDEtW3INDgIkh0JkRwkxHAESibWbwA7l=e8YEDol2CIBUn5YjqRj9QcOMq=SsPWbezWKweWxFPWtuVkxHAEOJxWOFP7kh2Xe9QcOu0WxGPEehzWKweWYM/ExRTixHAExMAiqU57l=e8YEDol2CIj9QcORDExG0Ea/zWKwDWtpvESGgcP=vFmHzWKwqWtReJbR2kxHAESiUWSFqXPiU5KNq8mHzWKwqJb=bJYp8kxHAWbHmElRqIBFQctu6XBFgkavzWKwqEOFQEbMVkxHAEOH1JSMQISh2Lj9QcOu0WxGPEehzWKweWYM/ExRTixHAEliviqU57l=e8YEDol2CIj9QcOM/ExpUWB/zWKweEb51XSMgcP=vFmHzWKwDE0uAEbJ2kxHAESiUWSFqXPiU5KNq8mHzWKwqJb=bJYp8kxHAEO51XOJ0IBFQctEmEqFgkavzWKweWSFD=SGVkxHAESJP=O1eISh2Lj9QcOu0WxGPEehzWKweWYM/ExRTixHAESNmiqU57N9QcOimEYEm=jhzWKweWYM/ExRTixHAEb1AiqU5Lj9QcOu0WxGPEehzWKweWYM/ExRTixHAWSimiqU57N9QcOimEYEm=jhzWKweWYM/ExRTixHAJSRxiqU5Lj9QcOu0WxGPEehzWKweWYM/ExRTixHA=lsQiqU57N9QcOimEYEm=jhzWKweWYM/ExRTixHAXSuqiqU5Lj9QcOu0WxGPEehzWKweWYM/ExRTixHAJYW6iqU57N9QcOimEYEm=jhzWKweWYM/ExRTixHAEYWxiqU5Lj9QcOu0WxGPEehzWKweWYM/ExRTixHAXS1qiqU57N9QcOimEYEm=jhzWKweWYM/ExRTixHAXOs0iqU5Lj9QcOu0WxGPEehzWKweWYM/ExRTixHA=bWqiqU57l=e8YEDol2CIj9QcOF6=OEYJa/zWKweJYEb=bGgcP=vFmHzWKwqWSUm=SW2kxHAESiUWSFqXPiU5KNq8mHzWKwqJb=bJYp8kxHAWbs6JYMxIBFQcts0EmFgkavzWKwPXlux=YsVkxHAElibJ0JQISh2Lj9QcOu0WxGPEehzWKweWYM/ExRTixHAJSjYiqU57l=e8YEDol2CIj9QcOW/WOFQEB/zWKwxJxW0JSRVkxHAWSMQES=mIkh0JkRwkxHAEtJPJSiv7N9QcOMq=SsPWbhq=kpeFYAwkxHAWYR0J0i1le9QcOpYE0sqJaw3WKvUEYR3INDTkxHAWxsQExGDLj9QcOEbWx=vWm/zWKw/ESGeEYRgXPDn5YjqRj9QcOibJYJ0=OezWKwDEbWQExFnolJTkxHAWYR0J0i1le9QcOMq=SsPWmw3WKvbWqFgkavzWKwqJb=bJYp8kxHAESiUWSFqIBFQcOW6WaFgka/zWKwqJb=bJYp8kxHAESiUWSFqIBFQctEYEmFgka1gc0=e8YEDol2CRj9QcOs6EOpv=awgcP=vFmHzWKw/JYMQXlM2kxHAESiUWSFqX0UYIj9QcOibJYJ0=jhzWKw/JYMQXlMTixHAExMAiqU5Ij9QcOjUESEYWaQ3iq1YiU9QcOibJYJ0=jhzWKw/JYMQXlMTixHAEliviqU5Ij9QcOuqJSFqWjhzWKw/JYMQXlMTixHA=bFQiqU5Lj9QcOR6WliUXjhzWKw/JYMQXlMTixHAWluDiqU5IaUn5YjqRj9QcON1WYR/ESezWKwxEOUmXSv8kxHAWliUWOUUIBFQcOwDEaFgIe9QcOjm=SG6=aw3WKvmJlR3INDTkxHAWYEm=b=1le9QcOjm=SG6=aw3WKweElR3INDgXe9QcON1WYR/ENhzWKw/JYMQXlMTixHAWlJ6iqU5le9QcOjm=SG6=aw3WKw6XtJ3IND2kxHAWYEm=b=1le9QcOjm=SG6=aw3WKw/WYR3INDVkxHAWYWe=SwPle9QcOjm=SG6=aw3WKvbXlJ3IahzWKw/JYMQXlMTixHAXtpmiqU57aj8ka/zWKvUW0J6JSp8kxHAWliUWOUUIBFQcOueXaFgkSezWKwqJ0iYEYp8kxHAWliUWOUUIBFQctNvWBFgkSh2=l/x=kh0JkRwkxHAWb16WbuQ7N9QcONvEOFeXjhzWKw/JYMQXlMTixHAXOueiq1dkxHAWliUWOUUIBFQctivJmFgkavzWKwqJ0iYEYp8kxHAWliUWOUUIBFQcOMeJmFgka1nkxHAWb16WbuQle9QcOjm=SG6=aw3WKw/=b13INe8kxHAWliUWOUUIBFQcO1A=mFgkSezWKwqJ0iYEYp8kxHAWliUWOUUIBFQctibXaFgka/zWKw6XOMPWOv8kxHAWliUWOUUIBFQctW6=mFgIe9QcOjm=SG6=aw3WKwA=tR3IND2Raj8ka/zWKw/XS1/J0N8kxHAWliUWOUUIBFQcOueXaFgkSD3ixh2zkeU8KEUcP=vFmHzWKwD=OM/WbMn5Ki6c0UYIj9QcOimEYEm=jhzWKweWYM/ExRTixHAJ0NUiqU5Ij9QcOimEYEm=jhzWKweWYM/ExRTixHAJSHYiqU5Lj9QcOimEYEm=jhzWKweWYM/ExRTixHAElMDiqU5IaUzWKwD=OM/WbM2kxHAWYR0J0i1le9QcOMq=SsPWmw3WKvvEbJ3INDTp3NCJPpg80AVkxHAWYR0J0i1le9QcOMq=SsPWmw3WKw/EtJ3INDTkxHAWYR0J0i1le9QcOMq=SsPWmw3WKw/EtJ3INDTkxHAWYR0J0i1le9QcOMq=SsPWmw3WKvYWtM3INDVkxHAWYR0J0i1le9QcOMq=SsPWmw3WKwA=OM3INDgLBFgXqFgIawgX0NVF0Nn=3NCJPpg80AwkxHAWbMQWxJAIBUn5YjqRj9QcOMxXOwAWSezWKweWYM/ExRnkxHAElu/=luqle9QcOMxXOwAWaw3WKvUEls3IND2kxHAWYEm=b=1le9QcOMxXOwAWaw3WKw6XSR3INDnzke2J0jDJ0wTkxHAEOs6JlRAIkhg=mvzWKwqJb=bJYp8kxHAESiUWSFqIBFQctJqWaFgkavzWKwqJb=bJYp8kxHAESiUWSFqIBFQcOF/=aFgka/zWKwqJb=bJYp8kxHAESiUWSFqIBFQcOF/=aFgka1gkxHAEtueWSRe7k5g8Yp45xhU8KEUc0=e8YEDol2CRj9QcOMD=lu/XawgcP=vFmHzWKvYEb5YJxG2kxHAESiUWSFqLj9QcOWQJSUvEbezWKwPWOF0Jbp8kxHA=bJP=YWQIBFQcts/WBFgIe9QctJ0E0=bWBw3WKw0JYs3INDTkxHAWYR0J0i1le9QctJ0E0=bWBw3WKw6WO13INDgXe9QcOWQJSUvEUV3olu3kSezWKwDWbwQESGVkxHAWxHvXls0le9QctJ0E0=bWBw3WKw/=b13INe8kxHA=bJP=YWQIBFQcO1P=BFgkSezWKwqJb=bJYp8kxHA=bJP=YWQIBFQcOi1EaFgka/zWKwxWts6JS=8kxHA=bJP=YWQIBFQcOjYXaFgkNhzWKvYEb5YJxGTixHAJbvYiq1diP13kSDTkxHAWYR0J0i1le9QctJ0E0=bWBw3WKvvEbu3INDVkxHAWYR0J0i1le9QctJ0E0=bWBw3WKw0XlJ3INDVkxHAWYR0J0i1le9QctJ0E0=bWBw3WKwxESM3INDgLj9QcOWQJSUvEUhzWKvYEb5YJxGTixHAWlJ6iqU5le9QctJ0E0=bWBw3WKwPElR3IND2ixs3Lj9QcOWQJSUvEUhzWKvYEb5YJxGTixHAWlJ6iqU5le9QctJ0E0=bWBw3WKwPESu3IND2kxHAWYR0J0i1le9QctJ0E0=bWBw3WKvYWbR3INDVkxHAWxHvXls0le9QctJ0E0=bWBw3WKw/=b13INe8kxHA=bJP=YWQIBFQcOuPXaFgkSezWKwqJb=bJYp8kxHA=bJP=YWQIBFQcOWPWBFgka/zWKwxWts6JS=8kxHA=bJP=YWQIBFQcOsDEmFgkSeY5l6b5tU48mwgcP=vFmHzWKw/ESMe=OF2kxHA=bJP=YWQLj9QcOEUXOwQ=bezWKwxWts6JS=8kxHAWSMeEluPIBFQcOvmEBFgIe9QcOseESN1Eqw3WKw/WOJ3INe9zj9QcOWQJSUvEUhzWKw/ESMe=OFTixHA=lReiq1dkxHAWSMeEluPIBFQctJAJqFgkNhzWKw/ESMe=OFTixHA=OHYiqU5Xe9QcOEUXOwQ=UhzWKw/ESMe=OFTixHAExFqiqU5IB1VkxHAW0MAXOHYle9QcOseESN1Eqw3WKvmESF3INDTkxHAEOR/JlsPIa/zWKwx=SwAWt=8kxHAWSMeEluPIBFQcOjYWaFgkawgLj9QcOibJYJ0=jhzWKw/ESMe=OFTixHA=bWqiqU5Ij9QcOFQEOEU=m/zWKwx=SwAWtJgLj9QcOibJYJ0=jhzWKw/ESMe=OFTixHAJSjYiqU5Ij9QcORqJ0u0WB/zWKwxElJPWx1VkxHAW0MAXOHYISh2XP=vFmHzWKwDEY=YJxs2kxHAWb=mWYible9QctJ0E0=bWBw3WKwAEOM3IahzWKvYEb5YJxGTixHA=SjUiqU5IB5e8BFglxHAWjDnkxHAWYR0J0i1le9QctJ0E0=bWBw3WKvbWqFgkavzWKwDEl=YExN8i0U1ieDVkxHAWYR0J0i1le9QctJ0E0=bWBw3WKwx=bG3INDg7qvzWKwDEY=YJxs2kxHAWx1P=tsQle9QctJ0E0=bWBw3WKwAEOM3IahzWKvYEb5YJxGTixHAESF0iq1di0eUieDTkxHAWYR0J0i1le9QctJ0E0=bWBw3WKw/WbR3INDglxHAWjDVkxHAXOvYWlpmle9QctJ0E0=bWBw3WKvvExR3IaV3FYM3kavzWKwxWts6JSJVkxHAEO=Y=YW/Ia1+kxHAXOEUEx=Yle9QctJ0E0=bWBw3WKvvExR3IaV3FYM3kavzWKwxWts6JSJVkxHAEOueEOjble9QctJ0E0=bWBw3WKv1JbF3INDgLj9QcOu0=Y=bWNhzWKvYEb5YJxGTixHAWlJ6iqU5le9QctJ0E0=bWBw3WKvmXtJ3IaV3ca55Ij9QcOimEYEm=jhzWKvYEb5YJxGTixHAJSJDiqU5Lj9QcOimEYEm=jhzWKvYEb5YJxGTixHAWxFQiqU5Lj9QcOimEYEm=jhzWKvYEb5YJxGTixHAWxMeiqU5Ia/zWKwqJb=bJYp8kxHA=bJP=YWQIBFQcOwAJaFgkavzWKw/EOR6ExsVkxHAElNm=tNmLj9QcOu0=Y=bWa/zWKwxWts6JSJgXPe2zkiU5KNq8mHzWKwD=OM/WbMnzkDVkxHAWSJ0WlJe7N9QcOR/=tMD=UhzWKweWxFPWtuTixHAESRqiqU5Ij9QcOMqJxRAXB1VkxHAWlWPEOJe7N9QcOs0EbjYENhzWKweWxFPWtuTixHAWYR/iqU57N9QcOs0EbjYENhzWKweWxFPWtuTixHAWYR/iqU5zK/nza/zWKwq=lue=lW2le9QcOR/=tMD=UhzWKweWxFPWtuTixHAXOHviqU5Lj9QcOR/=tMD=UhzWKweWxFPWtuTixHAE0JAiqU5Lj9QcOR/=tMD=UhzWKweWxFPWtuTixHAWSGQJqFgka/zWKwqWlpUEt=8kxHAESWPExH1IBFQcONYXaFgka/zWKwqWlpUEt=8kxHAESWPExH1IBFQcOWxEBFgka/zWKwqWlpUEt=8kxHAESWPExH1IBFQctJeXBFgka/zWKwqWlpUEt=8kxHAESWPExH1IBFQctu/WqFgkNDn=Y2qIK=vFmHzWKwx=OEbJxw2WKwQXe9QcOR/=tMD=UhzWKweWxFPWtuTixHAWxvmiqU5Ij9QcOE1W0EbXB/zWKwq=lue=lE8kxHAESWPExH1IBFQctJPWBFgka1nkxHAW0uxJ0WAIqVgc0UYIj9QcOR/=tMD=UhzWKweWxFPWtuTixHA=SiUiqU5Ij9QcOR/=tMD=UhzWKweWxFPWtuTixHAEOM0iqU5Lj9QcOR/=tMD=UhzWKweWxFPWtuTixHAJ0WDiqU5IaUn5YjqRj9QcOMQEtu6WxezWKwqWlpUEt=8kxHAESWPExH1IBFQcOMxiqU5le9QcOMxExFQ=Bw3WKwAWxM3INDTiPQ3Ia/zWKw/XOGq=bF2WKwQXP5Tol/UIBsvleDgcPEPokpboBvzWKweWOp1XSE8kxHAWSwQWYJPIqh5IkhbJkEUixG3XU9QcOpvXtWQWNhzWKweWxFPWtuTixHAE0J0iqU57N9QcONUJxR/=UhzWKweWxFPWtuTixHAE0J0iqU5le9QcOMxExFQ=Bw3WKwD=bF3INDTkxHAElNbWbjYIShb806Dol6e=ShbJkEUixs3X3=vFmHzWKwDJSvbWOs2kxHAWYs/ESUvle9QcOMxExFQ=Bw3WKvmWS13IaV3Fm55le9QcOMxExFQ=Bw3WKvmWtR3INe8kxHAESWPExH1IBFQcOpYEqFgkavzWKwqJSseXlsgX0E483pg83NUX0EvF0M3WmF+5YjqRj9QcONUJxR/=bezWKw/JxFDEbN8kxHAExFQExW6kk/9kxHAEtsAJxG/X0E483pg83NUX0EvF0M3WqF+kxHAEtsAJxG/le9QcOMxExFQ=Bw3WKwxWOG3IND2kxHAWYs/ESUvle9QcOMxExFQ=Bw3WKwD=bF3INDTkxHAWYs/ESUvIShb806Dol6e=ShbJkEUixu3XU9QcOjbExu0ENhzWKwPExGPWxU57N9QcOpvXtWQWShb806Dol6e=ShbJkEUixM3X3=vFmHzWKwPExGPWx12kxHAWYN1ElNble9QcOE1W0EbXjDnJ02C5tUC5lMnzliq=ljdXPe2=l/x=khY5l6b5tU48mHzWKwDXSpUJSuTIkh0JkRwkxHAEOpmJYNY7N9QcOMxExFQ=B/zWKwqW0imJxR2kxHAWb16=ljYle9QcOuDJYiU=mw3WKwAEOM3IahzWKwDEtim=lJTixHAJYjmiqU5Ij9QcOR/=tMD=UhzWKwDEtim=lJTixHA=bW0iqU5Ia/zWKvYWxWDEOw2kxHAWbFqXS1Qle9QcOuDJYiU=mw3WKwAEOM3IahzWKwDEtim=lJTixHAJYjmiqU5Ij9QcOR/=tMD=UhzWKwDEtim=lJTixHAWYR3INDgX0UYIj9QcORxJYibWmUzWKwqWlpUEt=8kxHAEOpmJYNYIBFQcO=UXaFgkavzWKwq=bGqJxuVkxHAWbEmJYWqIShU8KEURj9QctJxWxuDXBJYkxHAWbj1=SpYle9QcOuDJYiU=mw3WKw0=S13INDTkxHAEtRA=SpYLj9QctJxWxuDXB1nzke2zlNVF0Nn=3NCJPpg80AwkxHAElEmEbuPIBUn5YjqRj9QcOEb=OwPWOezWKweWxFPWtunolJTkxHAEOwPXtJ/le9QcOEb=OwPWBw3WKwxXSM3INe8kxHAW0E1XOFQIBFQcOjbWmFgkavzWKw/Jlsx=YMgIkiU5KNq8mHzWKwD=YM6J0N8kxHAW0E1XOFQIBFQctuDWmFgkSh2zkDgXe9QcOuPExuqWjhzWKwD=tMxWbJTixHAWSi1iqU5Ij9QcOsAXSNY=B1nJ02CFPuwkxHAWSHb=Oue7N9QcOuPExuqWjhzWKwD=tMxWbJTixHAXtsQiqU5X0/U5BHzWKweJ0jUEts2iqFn=Y2qIt/U5BHzWKwq=OFAJbG2WKwQXe9QcOuPExuqWjhzWKwD=tMxWbJTixHAXlNYiqU5Ij9QcOi1ExvmWB/zWKwDJxjmESGgXe9QcOi1ExvmWBVdIkhg=mvzWKwDExFDWbH8kxHAEtpUWxR0IBFQcOJqJaFgkavzWKwDExFDWbH8kxHAEtpUWxR0IBFQcOv1WaFgka/zWKwDExFDWbH8kxHAEtpUWxR0IBFQcOF/JmFgka1gc0=e8YEDol2CRj9QcOR/XORxWawgcP=vFmHzWKwqEOJ/WtJ2kxHAEtpUWxR0Xe9QcOR/=tMD=UhzWKwqEOJ/WtJTixHA=lseiqU5Ij9QcOueEx5vXB/8kxHAWbj1=SpYle9QcORDEbsQ=mw3WKwqEYs3INDVkxHAWbj1=SpYle9QcORDEbsQ=mw3WKwAJxu3INDVkxHAWbj1=SpYle9QcORDEbsQ=mw3WKvUW0u3INe5ISh2zlNVF0MwkxHAElEv=SpvIxezWKw/WtE1EON8SljDojhzWKwD=tMxWbJTixHAXtJ/iqU5Ij9QcOuPExuqWjhzWKwD=tMxWbJTixHAWSsxiqU5Isev5tv8kxHAEtpUWxR0IBFQcO5mEaFgkawgLj9QcOsQJ0uDENhzWKwD=tMxWbJTixHA=bFQiqU5IaU5XPeq=kpeFYAwkxHAElEv=SpvXPe2=3NCJPpg80AwkxHAWbsxESwAIj9QcORx=bwDWm/zWKwxESiYExWVkxHAWbG6XOFeIkh0JkRwkxHAWxwx=lj17N9QcOibWbimEOhg=mvzWKwDExFDWbH8kxHAWxwx=lj1IBFQctMDXaFgkavzWKwDExFDWbH8kxHAWxwx=lj1IBFQcOM6iqU5Lj9QcOuPExuqWjhzWKwxXOEUJluTixHAJ0p1iqU5IaUnJ02CFPuwkxHAWx=1El=Y7N9QcORQXSwPENhzWKwxXOEUJluTixHA=Spmiq1di0M3kawgLj9QcOM0WtRPXSezWKwqW0JAEOi8kxHAWxwx=lj1IBFQcOJ/iqU5Ij9QcOWqElJ0WxDZkxHAWxRe=bJxle9QcOWAW0Nv=Bw3WKvUEtR3IaV3=a55IB1gLj9QcOpYXSGxEOezWKwxESiYExE8kxHAWxwx=lj1IBFQcOJ/iqU5Ij9QcORQWbFeJSDZkxHAWbGqExNvle9QcOWAW0Nv=Bw3WKvUEtR3IaV3=a55IB1gX0UYIj9QcOpYXSGxEjhzWKwxXOEUJluTixHAJls0iqU5Ij9QcOR0WluAXODZkxHAWx=1El=Yle9QcOWAW0Nv=Bw3WKwqJSG3INDTkxHAWbJ/=OwAIa1gc0UYIj9QcOuPExuqWjhzWKwxXOEUJluTixHAESRAiqU5Ij9QcOuPExuqWjhzWKwxXOEUJluTixHA=Ou3INDVkxHAEOFPEORQle9QcOWAW0Nv=Bw3WKv1EBFgka1gFYND5kiCRNh5X0NVF0Nn=3NCJPpg80AwkxHAWxU1Xls/IBUn5YjqRj9QcOMAWYMxJSezWKwxXOEUJlunolJTkxHAEOFPEORQle9QcOMAWYMxJaw3WKwe=O13INDTkxHAWxJ/=bWqle9QcOMAWYMxJaw3WKwPWSw3IahzWKweXOiUW0sTixHAXOHmiqU5Lj9QcOuPExuqWjhzWKweXOiUW0sTixHAXSWDiqU5IaUnJ02CFPuwkxHAEbs0XSw07N9QcONU=b1AWjhzWKweXOiUW0sTixHA=bRxiq1dkxHAESwq=SEvIBFQcOEmEqFgkavzWKwxWbMAExRgle9QcOMAWYMxJaw3WKw/=lW3INDnkxHAEOFPEORQle9QcOMAWYMxJaw3WKvUEO13INDTkxHAEbs0XSw0Lj9QcOuPExuqWjhzWKweXOiUW0sTixHAJbU1iqU5IaJYIj9QcONbEON1JehzWKweXOiUW0sTixHAWlJ6iqU5le9QcOMAWYMxJaw3WKw/=lW3IND2kxHAEOFPEORQle9QcOMAWYMxJaw3WKvmXlu3INDgXPe2zkeq=kpeFYAwkxHAESJQJbF6le9QcOWAW0Nv=Bw3WKvvJSJ3INDTkxHA=OpUWO1q7S6zWKwxEYue=Y=8kxHAWxwx=lj1IBFQcOivWBFgkavzWKv1EtMQXSRgISh2=l/x=khY5l6b5tU48mHzWKweJxjbEtRTIkh0JkRwkxHAESM/=tJ07N9QcOWAW0Nv=Ohq=kpeFYAwkxHA=OMQWYsq7N9QcOWqXt=U=UhzWKweESj1=bJTixHA=SimiqU5IB2FFq23LBF3Ia/zWKwqXOMeEbWnzke2=3NCJPpg80AwkxHAWS=mWOHUIj9QcOJqW0RAJqUn5YjqRj9QcOR6JYuxWSezWKwqJxRqJbuVkxHAWbsxXOvU7kh2Xe9QcOR/WxwA=NhzWKwqXli1WxsTixHAJ0pmiqU57N9QcOuPExuqWjhzWKwqXli1WxsTixHA=O5YiqU5Lj9QcOR/WxwA=NhzWKwqXli1WxsTixHAXtsPiqU57l=e8YEDol2CIj9QctiYWOEbEq/zWKwxXlEvJlRgcP=vFmHzWKwDWx1DWlR2kxHAWbUm=OW/XPiU5KNq8mHzWKwDExFDWbH8kxHAEOW6EOjmIBFQcO1xEmFgkavzWKvm=bGxJxFVkxHAWxUbJljmISh2Lj9QcOR/WxwA=NhzWKwqXli1WxsTixHAESW6iqU57N9QcOuPExuqWjhzWKwqXli1WxsTixHAEOjviqU5Lj9QcOR/WxwA=NhzWKwqXli1WxsTixHA=SwDiqU57l=e8YEDol2CIj9QcOWQJlEbEm/zWKw/EYM6ESWgcP=vFmHzWKweXSU1EOF2kxHAWbUm=OW/XPiU5KNq8mHzWKwDExFDWbH8kxHAES16=OuPIBFQctWe=BFgkavzWKwxWtjbJxJVkxHAWS=UXSMxISh2Lj9QcOR/WxwA=NhzWKwqXli1WxsTixHAEYpUiqU57N9QcOuPExuqWjhzWKwqXli1WxsTixHAJb=UiqU5Lj9QcOR/WxwA=NhzWKwqXli1WxsTixHAJxRxiqU57N9QcOuPExuqWjhzWKwqXli1WxsTixHA=b1DiqU5Lj9QcOR/WxwA=NhzWKwqXli1WxsTixHAWxuDiqU57l=e8YEDol2CIj9QcOMAJxMDWB/zWKwxW0M6WbFgcP=vFmHzWKwe=bRDEOM2kxHAWbUm=OW/XPiU5KNq8mHzWKwDExFDWbH8kxHAElJqEOueIBFQctuDEmFgkavzWKweXtWeEOGVkxHAWxEUXSRPISh2Lj9QcOR/WxwA=NhzWKwqXli1WxsTixHAJbNbiqU57l=e8YEDol2CIj9QcOuAEYiUEB/zWKwDEx5v=ORgcP=vFmHzWKwqESJ/WbR2kxHAWbUm=OW/XPiU5KNq8mHzWKwDExFDWbH8kxHAWbM0WSRqIBFQcOWxWBFgkavzWKwDXO=m=SuVkxHAEOFPJluqISh2Lj9QcOR/WxwA=NhzWKwqXli1WxsTixHA=tJ/iqU57l=e8YEDol2CIj9QcOsAEOWxXa/zWKweJxi1JbFgcP=vFmHzWKwDExwAEb12kxHAWbUm=OW/XPiU5KNq8mHzWKwDExFDWbH8kxHAEOFAXOJ6IBFQcOM0XBFgkavzWKw/XOuxWx1VkxHAElWq=tRPISh2Lj9QcOR/WxwA=NhzWKwqXli1WxsTixHAExM3IND2=3NCJPpg80ATkxHAWS5b=Y=1Lj9QcOuqJYW0Ikh0JkRwkxHAEOHmESvY7N9QcOR6JYuxWShq=kpeFYAwkxHAEOFPEORQle9QcOuQJbMA=mw3WKweExw3INDTkxHAWS5b=Y=1Lj9QcOuqJYW0ISh2Lj9QcOR/WxwA=NhzWKwqXli1WxsTixHAEt=UiqU57l=e8YEDol2CIj9QcOiv=YN1=B/zWKweXlRDJbMgcP=vFmHzWKwq=lRD=tJ2kxHAWbUm=OW/XPiU5KNq8mHzWKwDExFDWbH8kxHAWYNmEtpYIBFQcOJP=aFgkavzWKwqJl=U=tuVkxHAESUmEtReISh2Lj9QcOR/WxwA=NhzWKwqXli1WxsTixHAJlReiqU57l=e8YEDol2CIj9QcOFxWOvm=m/zWKwxEO51EOFgcP=vFmHzWKwPESw6JlM2kxHAWbUm=OW/XPiU5KNq8mHzWKwDExFDWbH8kxHAExMAXljUIBFQctNUEaFgkavzWKwPWxGAJYJVkxHAWxuP=OuPISh2Lj9QcOR/WxwA=NhzWKwqXli1WxsTixHA=YiviqU57l=e8YEDol2CIj9QcOpvXlJqEa/zWKvbWOvbXSRgcP=vFmHzWKweXluq=bM2kxHAWbUm=OW/XPiU5KNq8mHzWKwDExFDWbH8kxHAESU1WYJeIBFQcOMAJaFgkavzWKwDJSUYWbMVkxHAJxGAJx1qISh2Lj9QcOR/WxwA=NhzWKwqXli1WxsTixHA=YRPiqU57l=e8YEDol2CIj9QcONUXSuDWm/zWKw/ESi1EbugcP=vFmHzWKw/=YjbEbs2kxHAWbUm=OW/XPiU5KNq8mHzWKwDExFDWbH8kxHAWl=vJxJ/IBFQcOs/WqFgkavzWKwe=S1DEORVkxHAWSMq=OJDISh2Lj9QcOR/WxwA=NhzWKwqXli1WxsTixHAXSs6iqU57l=e8YEDol2CIj9QcORQWtWqEB/zWKwDXtMDWbJgcP=vFmHzWKwDEYM/JxM2kxHAWbUm=OW/XPiU5KNq8mHzWKwDExFDWbH8kxHAEO=UWlWeIBFQcO1/EBFgkavzWKwqWOHbWbuVkxHAEOvUEOR0ISh2Lj9QcOR/WxwA=NhzWKwqXli1WxsTixHAXSJ3IND2kxHAEOFPEORQle9QcOR6JYuxWaw3WKvv=lR3INDVkxHAWbsxXOvUle9QcOR6JYuxWaw3WKvU=tW3IND2kxHAEOFPEORQle9QcOR6JYuxWaw3WKvmEqFgka/zWKwqWSWAXtN8kxHAWbUm=OW/IBFQcOJ3IND2kxHAEOFPEORQle9QcOR6JYuxWaw3WKvbEOJ3INDVkxHAWbsxXOvUle9QcOR6JYuxWaw3WKvbWSR3IND2kxHAEOFPEORQle9QcOR6JYuxWaw3WKwq=Os3INDVkxHAWbsxXOvUle9QcOR6JYuxWaw3WKwPWSs3IND2kxHAEOFPEORQle9QcOR6JYuxWaw3WKv1XSu3INDVkxHAWbsxXOvUle9QcOR6JYuxWaw3WKweXls3IND2kxHAEOFPEORQle9QcOR6JYuxWaw3WKvbXOR3INDVkxHAWbsxXOvUle9QcOR6JYuxWaw3WKwPXSw3IND2kxHAEOFPEORQle9QcOR6JYuxWaw3WKw0=SF3INDVkxHAWbsxXOvUle9QcOR6JYuxWaw3WKv1Jlu3IND2=3NCJPpg80ATkxHAESpmJxW/Lj9QctMe=bu6WqUn5YjqRj9QcORPWbwA=SezWKwqXli1WxsnFYND5kiCRj9QcOuPExuqWjhzWKwqExRAXtMTixHA=lW3INDTkxHAESpmJxW/Lj9QctMe=bu6Wq1nza/zWKwqWSWAXtN8kxHAWbUm=OW/IBFQcO1QEqFgkSezWKwDExFDWbH8kxHAWbUm=OW/IBFQcOJPWqFgka/zWKwqWSWAXtN8kxHAWbUm=OW/IBFQcOFQWmFgkSezWKwDExFDWbH8kxHAWbUm=OW/IBFQcORPJqFgka/zWKwqWSWAXtN8kxHAWbUm=OW/IBFQcOFAJaFgkSezWKwDExFDWbH8kxHAWbUm=OW/IBFQctNmEmFgka/zWKwqWSWAXtN8kxHAWbUm=OW/IBFQctWQWBFgkSezWKwDExFDWbH8kxHAWbUm=OW/IBFQctWAWBFgka/zWKwqWSWAXtN8kxHAWbUm=OW/IBFQctp1JmFgkSezWKwDExFDWbH8kxHAWbUm=OW/IBFQct=bJqFgka/zWKwqWSWAXtN8kxHAWbUm=OW/IBFQctuqJmFgkSezWKwDExFDWbH8kxHAWbUm=OW/IBFQcORxWqFgka/zWKwqWSWAXtN8kxHAWbUm=OW/IBFQctR0EaFgkSezWKwDExFDWbH8kxHAWbUm=OW/IBFQctR6=BFgka/zWKwqWSWAXtN8kxHAWbUm=OW/IBFQctMAWBFgkSezWKwDExFDWbH8kxHAWbUm=OW/IBFQcO=YEaFgka/zWKwqWSWAXtN8kxHAWbUm=OW/IBFQcOUUWqFgkSezWKwDExFDWbH8kxHAWbUm=OW/IBFQcOMDEBFgka/zWKwqWSWAXtN8kxHAWbUm=OW/IBFQctJA=BFgkSeY5l6b5tU48mvzWKwxEbwDXSRVkxHAWSHvJ0pmIkh0JkRwkxHAEtNmXOH17N9QcOR6JYuxWShq=kpeFYAwkxHAEOFPEORQle9QcOpUJbwQ=Bw3WKvUJqFgkavzWKwxEbwDXSRVkxHAWSHvJ0pmISh2Lj9QcOR/WxwA=NhzWKwqXli1WxsTixHA=Ow6iqU57l=e8YEDol2CIj9QcOuAXSv1Ea/zWKweExJ0WORVkxHAESMeXOReIkh0JkRwkxHAESsPEtNb7N9QcOR6JYuxWShq=kpeFYAwkxHAEOFPEORQle9QcOM/ExpUJqw3WKwDJb13INDTkxHAEOw6XtueLj9QcOMPEbJQWm/zWKweESMAWbMgXPDVkxHAWbsxXOvUle9QcOR6JYuxWaw3WKvUWbR3IND2kxHAEOFPEORQle9QcOR6JYuxWaw3WKv1JSs3INDVkxHAWbsxXOvUle9QcOR6JYuxWaw3WKwqW0W3IND2kxHAEOFPEORQle9QcOR6JYuxWaw3WKvY=S13INDVkxHAWbsxXOvUle9QcOR6JYuxWaw3WKwPEtW3IND2kxHAEOFPEORQle9QcOR6JYuxWaw3WKw0EOG3INDVkxHAWbsxXOvUle9QcOR6JYuxWaw3WKvb=YM3IND2kxHAEOFPEORQle9QcOR6JYuxWaw3WKvUJbw3INDVkxHAWbsxXOvUle9QcOR6JYuxWaw3WKv1JxF3IND2kxHAEOFPEORQle9QcOR6JYuxWaw3WKweEOR3INDVkxHAWbsxXOvUle9QcOR6JYuxWaw3WKwPE0s3IND2kxHAEOFPEORQle9QcOR6JYuxWaw3WKwe=YJ3INDVkxHAWbsxXOvUle9QcOR6JYuxWaw3WKwe=bJ3IND2kxHAEOFPEORQle9QcOR6JYuxWaw3WKwe=tR3INDVkxHAWbsxXOvUle9QcOR6JYuxWaw3WKwDEOW3IND2kxHAEOFPEORQle9QcOR6JYuxWaw3WKw0JYR3INDVkxHAWbsxXOvUle9QcOR6JYuxWaw3WKwDXOM3IND2=3NCJPpg80ATkxHAWSJxWxp1Lj9QcOUvXOiUEmUn5YjqRj9QcOM0JxibWSezWKwqXli1WxsnFYND5kiCRj9QcOuPExuqWjhzWKweEYWqJxsTixHAWxW6iqU5Ij9QcOs0WxWD=B/zWKw6JSwq=SJgXPDVkxHAWbsxXOvUle9QcOR6JYuxWaw3WKvbWtW3IND2kxHAEOFPEORQle9QcOR6JYuxWaw3WKvbJxR3INDVkxHAWbsxXOvUle9QcOR6JYuxWaw3WKwx=Su3IND2kxHAEOFPEORQle9QcOR6JYuxWaw3WKw0Jls3INDVkxHAWbsxXOvUle9QcOR6JYuxWaw3WKvm=bJ3IND2kxHAEOFPEORQle9QcOR6JYuxWaw3WKw0XSF3INDVkxHAWbsxXOvUle9QcOR6JYuxWaw3WKw0WSs3IND2kxHAEOFPEORQle9QcOR6JYuxWaw3WKvvEtu3INDVkxHAWbsxXOvUle9QcOR6JYuxWaw3WKw/WbM3IND2kxHAEOFPEORQle9QcOR6JYuxWaw3WKvbExs3INDVkxHAWbsxXOvUle9QcOR6JYuxWaw3WKvvJxF3IND2kxHAEOFPEORQle9QcOR6JYuxWaw3WKw/EtM3INDVkxHAWbsxXOvUle9QcOR6JYuxWaw3WKwqExW3IND2kxHAEOFPEORQle9QcOR6JYuxWaw3WKw/=SR3INDVkxHAWbsxXOvUle9QcOR6JYuxWaw3WKwDWtM3IND2kxHAEOFPEORQle9QcOR6JYuxWaw3WKweW0J3INDVkxHAWbsxXOvUle9QcOR6JYuxWaw3WKwPJxs3IND2kxHAEOFPEORQle9QcOR6JYuxWaw3WKw0=lM3INDVkxHAWbsxXOvUle9QcOR6JYuxWaw3WKvm=OG3IND2=3NCJPpg80ATkxHAW0JPExwQLj9QcOReW0NvXaUn5YjqRj9QcOuxExHvXOezWKwqXli1WxsnFYND5kiCRj9QcOuPExuqWjhzWKwDWxFQJSwTixHAJxN1iqU5Ij9QcOEYExFAWB/zWKwqESEUJS1gXPDVkxHAWbsxXOvUle9QcOR6JYuxWaw3WKvbJSW3IND2kxHAEOFPEORQle9QcOR6JYuxWaw3WKw6WSW3INDVkxHAWbsxXOvUle9QcOR6JYuxWaw3WKw/=mFgkSeY5l6b5tU48mvzWKw/=lJe=SuVkxHAEtpbE0N1Ikh0JkRwkxHAWxvYXtM07N9QcOR6JYuxWShq=kpeFYAwkxHAEOFPEORQle9QcOWA=bvUEmw3WKv1WxF3INDTkxHAWlNYElMDLj9QcOp1Jx5U=B1nza/zWKwqWSWAXtN8kxHAWbUm=OW/IBFQcORqXBFgkSeY5l6b5tU48mvzWKwqW0=UJbFVkxHAES=mJxRqIkh0JkRwkxHAElN1JlWD7N9QcOR6JYuxWShq=kpeFYAwkxHAEOFPEORQle9QcONU=tjbEBw3WKw6WxJ3INDTkxHAWbEY=lRPLj9QcOM0JYWqWm1nza/zWKwqWSWAXtN8kxHAWbUm=OW/IBFQcONYWqFgkSezWKwDExFDWbH8kxHAWbUm=OW/IBFQcOEbWmFgka/zWKwqWSWAXtN8kxHAWbUm=OW/IBFQcO5bWqFgkSezWKwDExFDWbH8kxHAWbUm=OW/IBFQctWAEaFgka/zWKwqWSWAXtN8kxHAWbUm=OW/IBFQctM/EBFgkSeY5l6b5tU48mvzWKw6XSG6XSsVkxHAESMeJSUbIkh0JkRwkxHAEtsPExJq7N9QcOR6JYuxWShq=kpeFYAwkxHAEOFPEORQle9QcOpvExF0Wmw3WKw/EtR3INDTkxHAXS1QXS1/Lj9QcOMeEls6Jq1nza/zWKwqWSWAXtN8kxHAWbUm=OW/IBFQct=bEqFgkSezWKwDExFDWbH8kxHAWbUm=OW/IBFQcOvv=BFgka/zWKwqWSWAXtN8kxHAWbUm=OW/IBFQctu0EBFgkSezWKwDExFDWbH8kxHAWbUm=OW/IBFQcO5bJmFgka/zWKwqWSWAXtN8kxHAWbUm=OW/IBFQctMAJmFgkSezWKwDExFDWbH8kxHAWbUm=OW/IBFQctWPXaFgka/zWKwqWSWAXtN8kxHAWbUm=OW/IBFQctEUEBFgkSezWKwDExFDWbH8kxHAWbUm=OW/IBFQcOFqXaFgka/zWKwqWSWAXtN8kxHAWbUm=OW/IBFQcO5vWaFgkSeY5l6b5tU48mvzWKwqWSNvXlMVkxHAES=mExR0Ikh0JkRwkxHAEt=YJx=v7N9QcOR6JYuxWShq=kpeFYAwkxHAEOFPEORQle9QcOpY=YW0Jaw3WKwqXtM3INDTkxHAWbseJSUULj9QcOM0JbFqEm1nza/zWKwqWSWAXtN8kxHAWbUm=OW/IBFQcOj1iqU57N9QcOuPExuqWjhzWKwqXli1WxsTixHA=lEmiqU5Lj9QcOR/WxwA=NhzWKwqXli1WxsTixHAEbW6iqU57N9QcOuPExuqWjhzWKwqXli1WxsTixHAJlEbiqU5Lj9QcOR/WxwA=NhzWKwqXli1WxsTixHAWxwQiqU57N9QcOuPExuqWjhzWKwqXli1WxsTixHA=Si1iqU5Lj9QcOR/WxwA=NhzWKwqXli1WxsTixHAWxG3IND2=3NCJPpg80ATkxHAWbJ6WxJPLj9QcONmWbjvWBUn5YjqRj9QcOi1ExJAExezWKwqXli1WxsnFYND5kiCRj9QcOuPExuqWjhzWKwq=OF0XOFTixHAWSpmiqU5Ij9QcOR0XSW0Eq/zWKweJbR/JSGgXPDVkxHAWbsxXOvUle9QcOR6JYuxWaw3WKvYW0R3IND2kxHAEOFPEORQle9QcOR6JYuxWaw3WKw0JxG3INDVkxHAWbsxXOvUle9QcOR6JYuxWaw3WKwP=SF3IND2kxHAEOFPEORQle9QcOR6JYuxWaw3WKwD=aFgka/zWKwqWSWAXtN8kxHAWbUm=OW/IBFQctjbWBFgkSezWKwDExFDWbH8kxHAWbUm=OW/IBFQctRxEaFgka/zWKwqWSWAXtN8kxHAWbUm=OW/IBFQctR/iqU57N9QcOuPExuqWjhzWKwqXli1WxsTixHAESGeiqU5Lj9QcOR/WxwA=NhzWKwqXli1WxsTixHAJSi1iqU57N9QcOuPExuqWjhzWKwqXli1WxsTixHAEOwDiqU5Lj9QcOR/WxwA=NhzWKwqXli1WxsTixHAJbJPiqU57N9QcOuPExuqWjhzWKwqXli1WxsTixHAXtJ0iqU5Lj9QcOR/WxwA=NhzWKwqXli1WxsTixHAJaFgkSezWKwDExFDWbH8kxHAWbUm=OW/IBFQcOMqWBFgka/zWKwqWSWAXtN8kxHAWbUm=OW/IBFQcOsQWOu3IND2kxHAEOFPEORQle9QcOR6JYuxWaw3WKv1JxM3INDVkxHAWbsxXOvUle9QcOR6JYuxWaw3WKvYWtu3IND2kxHAEOFPEORQle9QcOR6JYuxWaw3WKw0=bR3INDVkxHAWbsxXOvUle9QcOR6JYuxWaw3WKw/XOw3IND2kxHAEOFPEORQle9QcOR6JYuxWaw3WKvmExW3INDVkxHAWbsxXOvUle9QcOR6JYuxWaw3WKvUEbw3IND2=3NCJPpg80ATkxHAWSEmJ0M0Lj9QcOv1J0NU=aUn5YjqRj9QcOR/EbG0EOezWKwqXli1WxsnFYND5kiCRj9QcOuPExuqWjhzWKwqWSJQEbuTixHAWSH1iqU5Ij9QcOsxJYEUEm/zWKwA=tEU=lMgXPDVkxHAWbsxXOvUle9QcOR6JYuxWaw3WKw0WBFgkSezWKwDExFDWbH8kxHAWbUm=OW/IBFQcON1EaFgka/zWKwqWSWAXtN8kxHAWbUm=OW/IBFQctMxWmFgkSezWKwDExFDWbH8kxHAWbUm=OW/IBFQctWDXaFgka/zWKwqWSWAXtN8kxHAWbUm=OW/IBFQctuqEBFgkSezWKwDExFDWbH8kxHAWbUm=OW/IBFQcOibEqFgka/zWKwqWSWAXtN8kxHAWbUm=OW/IBFQctRqWaFgkSezWKwDExFDWbH8kxHAWbUm=OW/IBFQcOFeEaFgka/zWKwqWSWAXtN8kxHAWbUm=OW/IBFQcOsDWqFgkSeY5l6b5tU48mvzWKweWbJ/EbwVkxHAEOH1JYJPIkh0JkRwkxHAEOEUEOH17N9QcOR6JYuxWShq=kpeFYAwkxHAEOFPEORQle9QcOux=SuQ=Bw3WKw/WYJ3INDTkxHAESR0WSJALj9QcOuQ=tiYEq1nza/zWKwqWSWAXtN8kxHAWbUm=OW/IBFQctpb=aFgkSezWKwDExFDWbH8kxHAWbUm=OW/IBFQcOwQWqFgka/zWKwqWSWAXtN8kxHAWbUm=OW/IBFQcOMPEBFgkSezWKwDExFDWbH8kxHAWbUm=OW/IBFQctW6JaFgka/zWKwqWSWAXtN8kxHAWbUm=OW/IBFQctu/WBFgkSeY5l6b5tU48mvzWKwxWxsPXSFVkxHAWS=UWxGeIkh0JkRwkxHAWYMDWlJe7N9QcOR6JYuxWShq=kpeFYAwkxHAEOFPEORQle9QcOiUEOjYEaw3WKwDiqU5Ij9QcOWxWSF6Eq/zWKw/EYMxWOMgXPDVkxHAWbsxXOvUle9QcOR6JYuxWaw3WKvb=Ss3IND2=3NCJPpg80ATkxHAEljUEliULj9QcOpv=lsDWBUn5YjqRj9QcOMqESW/JSezWKwqXli1WxsnFYND5kiCRj9QcOuPExuqWjhzWKweWbMxWlsTixHAEBFgkavzWKweJlMeJYMVkxHAEtjUJSuQISh2Lj9QcOR/WxwA=NhzWKwqXli1WxsTixHAWbw/iqU57l=e8YEDol2CIj9QcOFPXtWAXB/zWKwqXSwe=tJgcP=vFmHzWKw/Ex=1WbW2kxHAWbUm=OW/XPiU5KNq8mHzWKwDExFDWbH8kxHAWSF0=ORxIBFQcOEbJaFgkavzWKwPExvbXOwVkxHAWb1AElpYISh2Lj9QcOR/WxwA=NhzWKwqXli1WxsTixHAEt=biqU57l=e8YEDol2CIj9QcOj1ESJ/Wm/zWKwD=tuxExwgcP=vFmHzWKwqJxwx=lM2kxHAWbUm=OW/XPiU5KNq8mHzWKwDExFDWbH8kxHAWYWAW0NUIBFQctRqiqU5Ij9QcOj1ESJ/Wm/zWKwD=tuxExwgXPDVkxHAWbsxXOvUle9QcOR6JYuxWaw3WKvm=aFgkSezWKwDExFDWbH8kxHAWbUm=OW/IBFQctRAWmFgka/zWKwqWSWAXtN8kxHAWbUm=OW/IBFQctW/iqU57N9QcOuPExuqWjhzWKwqXli1WxsTixHAJYpUiqU5Lj9QcOR/WxwA=NhzWKwqXli1WxsTixHAEYuAiqU57N9QcOuPExuqWjhzWKwqXli1WxsTixHAJljbiqU5Lj9QcOR/WxwA=NhzWKwqXli1WxsTixHA=lRqiqU57N9QcOuPExuqWjhzWKwqXli1WxsTixHAJbEUiqU5Lj9QcOR/WxwA=NhzWKwqXli1WxsTixHA=bwxiqU57l=e8YEDol2CIj9QcORPJx16Jm/zWKweJSWAXSMgcP=vFmHzWKw/J0J0Etu2kxHAWbUm=OW/XPiU5KNq8mHzWKwDExFDWbH8kxHAWlEYEbp1IBFQcO1AWmFgkavzWKwqE0W6XlRVkxHAElsxXO1eISh2Lj9QcOR/WxwA=NhzWKwqXli1WxsTixHA=S1eiqU57N9QcOuPExuqWjhzWKwqXli1WxsTixHAJSw0iqU5Lj9QcOR/WxwA=NhzWKwqXli1WxsTixHAEbsqiqU57N9QcOuPExuqWjhzWKwqXli1WxsTixHA=b=YiqU5Lj9QcOR/WxwA=NhzWKwqXli1WxsTixHAXOG0iqU57l=e8YEDol2CIj9QcORxESJe=a/zWKwDJSNm=O1gcP=vFmHzWKwe=SwxXlM2kxHAWbUm=OW/XPiU5KNq8mHzWKwDExFDWbH8kxHAElMAWxUUIBFQcOvvEmFgkavzWKwqWxM0ElMVkxHAEtseJYu6ISh2Lj9QcOR/WxwA=NhzWKwqXli1WxsTixHA=OsDiqU57N9QcOuPExuqWjhzWKwqXli1WxsTixHA=lE1iqU5Lj9QcOR/WxwA=NhzWKwqXli1WxsTixHAWxW/iqU57l=e8YEDol2CIj9QctWQXO5bEa/zWKwDXSMQWS1gcP=vFmHzWKwDXS1/EtM2kxHAWbUm=OW/XPiU5KNq8mHzWKwDExFDWbH8kxHAEO16WSpUIBFQctJ0WaFgkavzWKvbWOwPJxMVkxHAEO1eWOs6ISh2Lj9QcOR/WxwA=NhzWKwqXli1WxsTixHAWxNUiqU57N9QcOuPExuqWjhzWKwqXli1WxsTixHAJ0N1iqU5Lj9QcOR/WxwA=NhzWKwqXli1WxsTixHAExHviqU57N9QcOuPExuqWjhzWKwqXli1WxsTixHA=lNUiqU5Lj9QcOR/WxwA=NhzWKwqXli1WxsTixHA=lRPiqU57N9QcOuPExuqWjhzWKwqXli1WxsTixHAEljmiqU5Lj9QcOR/WxwA=NhzWKwqXli1WxsTixHAWSGQJaFgkSezWKwDExFDWbH8kxHAWbUm=OW/IBFQctRDJqFgka/zWKwqWSWAXtN8kxHAWbUm=OW/IBFQctJ0WqFgkSezWKwDExFDWbH8kxHAWbUm=OW/IBFQctjYEBFgka/zWKwqWSWAXtN8kxHAWbUm=OW/IBFQcONUiqU57l=e8YEDol2CIj9QcOWQEbj1=m/zWKwxESR6JSJgcP=vFmHzWKweJ0R6Wx12kxHAWbUm=OW/XPiU5KNq8mHzWKwDExFDWbH8kxHAElEmXSW6IBFQcO1/EBFgkavzWKwxWOJ/=tJVkxHAWxMqXls0ISh2Lj9QcOR/WxwA=NhzWKwqXli1WxsTixHAXSpYiqU57N9QcOuPExuqWjhzWKwqXli1WxsTixHAWlRqiqU5Lj9QcOR/WxwA=NhzWKwqXli1WxsTixHAJSW0iqU57l=e8YEDol2CIj9QcOuDJYsQ=a/zWKwDJb=1EbugcP=vFmHzWKw/ExjY=tJ2kxHAWbUm=OW/XPiU5KNq8mHzWKwDExFDWbH8kxHAWSF/=YpYIBFQctimJaFgkavzWKwDEtivWtMVkxHAEtR0=OJDISh2Lj9QcOR/WxwA=NhzWKwqXli1WxsTixHAWSv1iqU57N9QcOuPExuqWjhzWKwqXli1WxsTixHAExJ0iqU5Lj9QcOR/WxwA=NhzWKwqXli1WxsTixHAJlWDiqU57N9QcOuPExuqWjhzWKwqXli1WxsTixHAJYueiqU5Lj9QcOR/WxwA=NhzWKwqXli1WxsTixHAEtuAiqU57N9QcOuPExuqWjhzWKwqXli1WxsTixHA=SFeiqU5Lj9QcOR/WxwA=NhzWKwqXli1WxsTixHA=OMQiqU57N9QcOuPExuqWjhzWKwqXli1WxsTixHAESR/iqU5Lj9QcOR/WxwA=NhzWKwqXli1WxsTixHA=SHviqU57N9QcOuPExuqWjhzWKwqXli1WxsTixHAESHYiqU5Lj9QcOR/WxwA=NhzWKwqXli1WxsTixHAWbsPiqU57N9QcOuPExuqWjhzWKwqXli1WxsTixHAWSGqiqU5Lj9QcOR/WxwA=NhzWKwqXli1WxsTixHAJSsAiqU57l=e8YEDol2CIj9QcOWAESi1WBUn5YjqRj9QcOMqEbFxWSezWKwqXli1WxsnFYND5kiCRj9QcOuPExuqWjhzWKweWbJPWxsTixHA=OjbiqU5Ij9QcOWAESi1WB1nza/zWKwqWSWAXtN8kxHAWbUm=OW/IBFQctjv=aFgkSeY5l6b5tU48mvzWKwqWtJ0ExFVkxHAWYEvJbsDLj9QctJ6WYsDEmUn5YjqRj9QcOu/JYp1JbezWKwqXli1WxsnFYND5kiCRj9QcOuPExuqWjhzWKwDWli1=tRTixHAXSs/iqU5Ij9QcORQ=bJPEq/zWKwqJ0jmWSuVkxHA=b1qJSu0ISh2Lj9QcOR/WxwA=NhzWKwqXli1WxsTixHAJYJ/iqU57l=e8YEDol2CIj9QcORqJbs/=a/zWKwqJxRDXOJgcP=vFmHzWKwDESGeWxF2kxHAWbUm=OW/XPiU5KNq8mHzWKwDExFDWbH8kxHAEOMQESWPIBFQcOR0EBFgkavzWKwqWYR/WlMVkxHAWYWqEOw0ISh2Lj9QcOR/WxwA=NhzWKwqXli1WxsTixHA=lu0iqU57l=e8YEDol2CIj9QcOMxWSsxEa/zWKweEOMeEOMgcP=vFmHzWKwqWl=1WxJ2kxHAWbUm=OW/XPiU5KNq8mHzWKwDExFDWbH8kxHAWbjY=OW0IBFQctMQWqFgkavzWKweWxs/WxMVkxHAESueESueISh2Lj9QcOR/WxwA=NhzWKwqXli1WxsTixHAWYM/iqU57l=e8YEDol2CIj9Qcts6JbJ6EB/zWKv1WxNY=bwgcP=vFmHzWKwx=YJPJlJ2kxHAWbUm=OW/XPiU5KNq8mHzWKwDExFDWbH8kxHAW0=YE0jYIBFQcO51WqFgkavzWKvvXlR0XSuVkxHA=OWe=YJAISh2Lj9QcOR/WxwA=NhzWKwqXli1WxsTixHAWxMDiqU57N9QcOuPExuqWjhzWKwqXli1WxsTixHAJbGeiqU5Lj9QcOR/WxwA=NhzWKwqXli1WxsTixHAJx=UiqU57N9QcOuPExuqWjhzWKwqXli1WxsTixHA=Su3INDVkxHAWbsxXOvUle9QcOR6JYuxWaw3WKwxEOw3IND2=3NCJPpg80ATkxHAWSH1=tR0Lj9QcOs/=SNmEB/zWKwxEtMDJbwgcP=vFmHzWKwxExWqXlM2kxHAWbUm=OW/XPiU5KNq8mHzWKwDExFDWbH8kxHAWxFxWbUUIBFQcO1/WaFgkavzWKw/Wtp1JbJVkxHAWSjUElRDLj9QcOWD=SpmXB1nza/zWKwqWSWAXtN8kxHAWbUm=OW/IBFQctsA=aFgkSezWKwDExFDWbH8kxHAWbUm=OW/IBFQctuPiqU5Lj9QcOR/WxwA=NhzWKwqXli1WxsTixHA=tJqiqU57N9QcOuPExuqWjhzWKwqXli1WxsTixHAJ0W/iqU5Lj9QcOR/WxwA=NhzWKwqXli1WxsTixHA=SsQiqU57N9QcOuPExuqWjhzWKwqXli1WxsTixHAJS1xiqU5Lj9QcOR/WxwA=NhzWKwqXli1WxsTixHAXOv1iqU57N9QcOuPExuqWjhzWKwqXli1WxsTixHAWYimiqU5Lj9QcOR/WxwA=NhzWKwqXli1WxsTixHAJxRQiqU57l=e8YEDol2CIj9QcOjY=bjmWq/zWKvvJljbWxWVkxHAEOvv=tuAIkh0JkRwkxHAWbWD=ORQ7N9QcOR6JYuxWShq=kpeFYAwkxHAEOFPEORQle9QcORxEtuqWBw3WKw6WSs3INDTkxHAWl=YWlRxLj9QctjvJlWxWq/zWKwDXtj1=OwgXPDVkxHAWbsxXOvUle9QcOR6JYuxWaw3WKw/EYJ3IND2kxHAEOFPEORQle9QcOR6JYuxWaw3WKvUJxR3INDVkxHAWbsxXOvUle9QcOR6JYuxWaw3WKvvXSF3IND2kxHAEOFPEORQle9QcOR6JYuxWaw3WKvYXtM3INDVkxHAWbsxXOvUle9QcOR6JYuxWaw3WKwDWbG3IND2kxHAEOFPEORQle9QcOR6JYuxWaw3WKw6Exw3INDVkxHAWbsxXOvUle9QcOR6JYuxWaw3WKwAWbw3IND2=3NCJPpg80ATkxHAWYRP=SvbLj9QcOMeEx5vWqUn5YjqRj9QctJ/XlRQJxezWKwqXli1WxsnFYND5kiCRj9QcOuPExuqWjhzWKvYWSUmWtWTixHAXts0iqU5Ij9QcOimE0MAJq/zWKweESFPJSWgXPDVkxHAWbsxXOvUle9QcOR6JYuxWaw3WKweWSJ3IND2kxHAEOFPEORQle9QcOR6JYuxWaw3WKw0=lJ3INDVkxHAWbsxXOvUle9QcOR6JYuxWaw3WKvbJbs3IND2kxHAEOFPEORQle9QcOR6JYuxWaw3WKw0JSW3INDVkxHAWbsxXOvUle9QcOR6JYuxWaw3WKvbWYR3IND2=3NCJPpg80ATkxHAWbG0=bvvLj9QcOp1XlueWBUn5YjqRj9QcOMAWbwA=bezWKwqXli1WxsnFYND5kiCRj9QcOuPExuqWjhzWKweXORAXtJTixHAXts0iqU5Ij9QcORQEYJAJa/zWKwD=OU1ESGgXPDVkxHAWbsxXOvUle9QcOR6JYuxWaw3WKwPE0u3IND2kxHAEOFPEORQle9QcOR6JYuxWaw3WKvYWxu3INDVkxHAWbsxXOvUle9QcOR6JYuxWaw3WKwqWxF3IND2kxHAEOFPEORQle9QcOR6JYuxWaw3WKvUXtW3INDVkxHAWbsxXOvUle9QcOR6JYuxWaw3WKweWOw3IND2kxHAEOFPEORQle9QcOR6JYuxWaw3WKwqWOu3INDVkxHAWbsxXOvUle9QcOR6JYuxWaw3WKw6Jbs3IND2kxHAEOFPEORQle9QcOR6JYuxWaw3WKvmWts3INDVkxHAWbsxXOvUle9QcOR6JYuxWaw3WKvUW0R3IND2kxHAEOFPEORQle9QcOR6JYuxWaw3WKwPE0J3INDVkxHAWbsxXOvUle9QcOR6JYuxWaw3WKw6JYs3IND2=3NCJPpg80ATkxHAESJ/Jl=YIkh0JkRwkxHAElpYJxib7N9QcOR6JYuxWShq=kpeFYAwkxHAEOFPEORQle9QcON1=YWqJqw3WKv1WlW3INDTkxHAESJ/Jl=YISh2Lj9QcOR/WxwA=NhzWKwqXli1WxsTixHAE0WeiqU57l=e8YEDol2CIj9QcORAJxsP=B/zWKwqJSM6=tMgcP=vFmHzWKw/WtRPWtW2kxHAWbUm=OW/XPiU5KNq8mHzWKwDExFDWbH8kxHAWSHmExHbIBFQcO1DWBFgkavzWKwqXtW/E0uVkxHAWYseXlpUISh2Lj9QcOR/WxwA=NhzWKwqXli1WxsTixHAE0NmiqU57l=e8YEDol2CIj9QcOibEbsxEa/zWKwe=tEm=SWgcP=vFmHzWKvv=YsxJbG2kxHAWbUm=OW/XPiU5KNq8mHzWKwDExFDWbH8kxHAJl=vW0RQIBFQctMQWqFgkavzWKwqJxJ/WxMVkxHAElpbJYMxISh2Lj9QcOR/WxwA=NhzWKwqXli1WxsTixHAJb1PiqU57l=e8YEDol2CIj9QcONYWxw6EB/zWKwD=lNvWOWgcP=vFmHzWKwxEbJ0JbW2kxHAWbUm=OW/XPiU5KNq8mHzWKwDExFDWbH8kxHAWxJ0EYRxIBFQcOiYEqFgkavzWKwe=bWAXSuVkxHAEtNUJSGxISh2Lj9QcOR/WxwA=NhzWKwqXli1WxsTixHA=YJDiqU57l=e8YEDol2CIj9QcORq=b5YEa/zWKwAWlpmXtsgcP=vFmHzWKwxWxRAJxw2kxHAWbUm=OW/XPiU5KNq8mHzWKwDExFDWbH8kxHAWxWqXtWAIBFQcOs/WqFgkavzWKwqWYJP=bMVkxHAXOj1JbvvISh2Lj9QcOR/WxwA=NhzWKwqXli1WxsTixHAJ0JDiqU57l=e8YEDol2CIj9QcONUESMDWa/zWKweEYRqWxMgcP=vFmHzWKw/ElEYElM2kxHAWbUm=OW/XPiU5KNq8mHzWKwDExFDWbH8kxHAWSNb=bNUIBFQctpmWBFgkavzWKwe=SMeEOsVkxHAES=mWbWeISh2Lj9QcOR/WxwA=NhzWKwqXli1WxsTixHAW0=miqU57l=e8YEDol2CIj9QcOseWxHYXa/zWKvvW0=U=SWgcP=vFmHzWKvUWOjb=YR2kxHAWbUm=OW/XPiU5KNq8mHzWKwDExFDWbH8kxHA=SG/J0=mIBFQcOR/WBFgkavzWKw/ESWQ=b1VkxHAJSEY=lMxISh2Lj9QcOR/WxwA=NhzWKwqXli1WxsTixHAESHviqU57l=e8YEDol2CIj9QcORqElpmXa/zWKw/JYWA=lRgcP=vFmHzWKwDJxs/=bJ2kxHAWbUm=OW/XPiU5KNq8mHzWKwDExFDWbH8kxHAEtW/WlJ0IBFQcOiYEqFgkavzWKwqWbN1Jb1VkxHAWlibXtNmISh2Lj9QcOR/WxwA=NhzWKwqXli1WxsTixHAEYu0iqU57l=e8YEDol2CIj9QcOuDXtux=a/zWKweEtR0=tRgcP=vFmHzWKw/W0N1J0u2kxHAWbUm=OW/XPiU5KNq8mHzWKwDExFDWbH8kxHAWSEU=tE1IBFQctEb=BFgkavzWKwDEOv1W0MVkxHAESpmEYpmISh2Lj9QcOR/WxwA=NhzWKwqXli1WxsTixHAEbRPiqU57l=e8YEDol2CIj9QcOs/Wb=UWm/zWKwxWOMQEYsgcP=vFmHzWKwx=l=bJlJ2kxHAWbUm=OW/XPiU5KNq8mHzWKwDExFDWbH8kxHAW0NYJ0jYIBFQcO1DWBFgkavzWKw/WSR0=SRVkxHAWxGeWO=vISh2Lj9QcOR/WxwA=NhzWKwqXli1WxsTixHAXSG0iqU57N9QcOuPExuqWjhzWKwqXli1WxsTixHAXO1DiqU5Lj9QcOR/WxwA=NhzWKwqXli1WxsTixHAEb5viqU57l=e8YEDol2CIj9QcOuDWlMeWq/zWKwx=SvYE0JgcP=vFmHzWKwxWxueWxs2kxHAWbUm=OW/XPiU5KNq8mHzWKwDExFDWbH8kxHAWxWDESW/IBFQcOJ0JqFgkavzWKwDEOjUESWVkxHAW0MA=b5YISh2Lj9QcOR/WxwA=NhzWKwqXli1WxsTixHAJxueiqU57l=e8YEDol2CIj9QcOi1E0sDJa/zWKweEbWeESMgcP=vFmHzWKw/XOJA=bu2kxHAWbUm=OW/XPiU5KNq8mHzWKwDExFDWbH8kxHAWSw0XtJDIBFQcOR/WBFgkavzWKwq=O5vEtsVkxHAESJxESMeISh2Lj9QcOR/WxwA=NhzWKwqXli1WxsTixHAJSseiqU57N9QcOuPExuqWjhzWKwqXli1WxsTixHAWYp1iqU5Lj9QcOR/WxwA=NhzWKwqXli1WxsTixHAJxF0iqU57N9QcOuPExuqWjhzWKwqXli1WxsTixHAWbG3INDVkxHAWbsxXOvUle9QcOR6JYuxWaw3WKw6JbF3IND2kxHAEOFPEORQle9QcOR6JYuxWaw3WKwqW0R3INDVkxHAWbsxXOvUle9QcOR6JYuxWaw3WKvY=lR3IND2kxHAEOFPEORQle9QcOR6JYuxWaw3WKwqXtJ3INDVkxHAWbsxXOvUle9QcOR6JYuxWaw3WKvvJS13IND2kxHAEOFPEORQle9QcOR6JYuxWaw3WKv1EtW3INDVkxHAWbsxXOvUle9QcOR6JYuxWaw3WKvmEOJ3IND2=3NCJPpg80ATkxHAWS1eJSMxIkh0JkRwkxHAEOMeWOWq7N9QcOR6JYuxWShq=kpeFYAwkxHAEOFPEORQle9QcOueESGxWmw3WKwDEtu3INDTkxHAWS1eJSMxISh2Lj9QcOR/WxwA=NhzWKwqXli1WxsTixHAJ0MqiqU57l=e8YEDol2CIj9QcOEvXSivWB/zWKwx=bs/=lWVkxHAWxEmEYsxIkh0JkRwkxHAWbiUWYJ67N9QcOR6JYuxWShq=kpeFYAwkxHAEOFPEORQle9QcORq=SiYXaw3WKw6WSs3INDTkxHAW0s6WYsQLj9QcOEYWSjUJq/zWKwxW0R0JSWgXPDVkxHAWbsxXOvUle9QcOR6JYuxWaw3WKvYWbM3IND2=3NCJPpg80ATkxHAWSWq=bFALj9QcOW6=tEYJqUn5YjqRj9QcOJ0JSJ0WOezWKwqXli1WxsnFYND5kiCRj9QcOuPExuqWjhzWKw0EYs0EbGTixHAEb=biqU5Ij9QcOsxWYJPXB/zWKwxXlpb=YWgXPDVkxHAWbsxXOvUle9QcOR6JYuxWaw3WKwqWYJ3IND2kxHAEOFPEORQle9QcOR6JYuxWaw3WKvUWx13INDVkxHAWbsxXOvUle9QcOR6JYuxWaw3WKw6ESJ3IND2=3NCJPpg80ATkxHAWbwPJbGALj9QcOu6XSJ6JmUn5YjqRj9QctMQEOpm7N9QcOR6JYuxWShq=kpeFYAwkxHAEOFPEORQle9QctMQEOpmIBFQctW/JaFgkavzWKwqXO5mWOwVkxHAEO16EbUmISh2Lj9QcOR/WxwA=NhzWKwqXli1WxsTixHAJSFeiqU57N9QcOuPExuqWjhzWKwqXli1WxsTixHAWSGQ=BFgka/zWKwqWSWAXtN8kxHAWbUm=OW/IBFQctMeJqFgkSezWKwDExFDWbH8kxHAWbUm=OW/IBFQcO=vJmFgka/zWKwqWSWAXtN8kxHAWbUm=OW/IBFQcOsPJqFgkSeY5l6b5tU48mvzWKwD=b5UEOFVkxHAWSimEls0Ikh0JkRwkxHAWluDEbWq7N9QcOR6JYuxWShq=kpeFYAwkxHAEOFPEORQle9QcOj1EOJxWmw3WKvbWls3INDTkxHAEtJP=SuPLj9QcOsqJbNvEm1nza/zWKwqWSWAXtN8kxHAWbUm=OW/IBFQcOseWaFgkSezWKwDExFDWbH8kxHAWbUm=OW/IBFQcOjYJmFgka/zWKwqWSWAXtN8kxHAWbUm=OW/IBFQctMeWqFgkSezWKwDExFDWbH8kxHAWbUm=OW/IBFQcOMeJaFgka/zWKwqWSWAXtN8kxHAWbUm=OW/IBFQctNvJmFgkSezWKwDExFDWbH8kxHAWbUm=OW/IBFQcOpmEBFgka/zWKwqWSWAXtN8kxHAWbUm=OW/IBFQctRDWBFgkSezWKwDExFDWbH8kxHAWbUm=OW/IBFQcOpmWBFgka/zWKwqWSWAXtN8kxHAWbUm=OW/IBFQcOivWmFgkSezWKwDExFDWbH8kxHAWbUm=OW/IBFQcONbEaFgka/zWKwqWSWAXtN8kxHAWbUm=OW/IBFQcOMq=mFgkSezWKwDExFDWbH8kxHAWbUm=OW/IBFQcO1xXaFgka/zWKwqWSWAXtN8kxHAWbUm=OW/IBFQctR/EaFgkSeY5l6b5tU48mvzWKwxWtR0WbGVkxHAWlJeElWQIkh0JkRwkxHAElu0=SHm7N9QcOR6JYuxWShq=kpeFYAwkxHAEOFPEORQle9QcON1EYMQJmw3WKweW0u3INDTkxHAWxHmEbRQLj9QcOjYESNbWB1nza/zWKwqWSWAXtN8kxHAWbUm=OW/IBFQctR3IND2=3NCJPpg80ATkxHAW0MQWlWxLj9QcOpb=SWAEmUn5YjqRj9QcOuxJSsAXOezWKwqXli1WxsnFYND5kiCRj9QcOuPExuqWjhzWKwDW0s/XOwTixHAElibiqU5Ij9QcOEUWOjbWq/zWKwDJ0MxXOJgXPDVkxHAWbsxXOvUle9QcOR6JYuxWaw3WKweXOJ3IND2=3NCJPpg80ATkxHAWlW0WSNmLj9QcON1XON1EqUn5YjqRj9QcOMQ=SjbEOezWKwqXli1WxsnFYND5kiCRj9QcOuPExuqWjhzWKweWtM/JxuTixHAWYJPiqU5Ij9QcOjbEbseJm/zWKwe=Owe=OFgXPDVkxHAWbsxXOvUle9QcOR6JYuxWaw3WKwPXBFgkSeY5l6b5tU48mvzWKweEx5YJYMVkxHAESJqEbW/Ikh0JkRwkxHAWYR0WxWq7N9QcOR6JYuxWShq=kpeFYAwkxHAEOFPEORQle9QcOimEbWxWmw3WKw/WSW3INDTkxHAESFP=YiULj9QcOM0WbJxWa1nza/zWKwqWSWAXtN8kxHAWbUm=OW/IBFQctiYJqFgkSeY5l6b5tU48mvzWKwDE0JQ=tRVkxHAE0=bEOJPIkh0JkRwkxHAJ0N1=SMq7N9QcOR6JYuxWShq=kpeFYAwkxHAEOFPEORQle9QctEU=tMeWmw3WKwqEOR3INDTkxHAEO5YWtpmLj9QcO5YJxu0Eq1nza/zWKwqWSWAXtN8kxHAWbUm=OW/IBFQctM6=aFgkSeY5l6b5tU48mvzWKwDEt=1JxwVkxHAESw6JxvmIkh0JkRwkxHAESW/WOWA7N9QcOR6JYuxWShq=kpeFYAwkxHAEOFPEORQle9QcOMxWSGxXBw3WKwq=bF3INDTkxHAEOpY=tWALj9QcOMAXlWAJm1nza/zWKwqWSWAXtN8kxHAWbUm=OW/IBFQcOWQ=aFgkSeY5l6b5tU48mvzWKwqJSG6ESRVkxHAWb5Y=O5mIkh0JkRwkxHAWSse=YJe7N9QcOR6JYuxWShq=kpeFYAwkxHAEOFPEORQle9QcOs/El=YEaw3WKvbJ0u3INDTkxHAWYsQXSMqLj9QcORP=YuPJm1nza/zWKwqWSWAXtN8kxHAWbUm=OW/IBFQctpY=BFgkSeY5l6b5tU48mvzWKw/Wb5UJxsVkxHAJ0uQWxwgcP=vFmHzWKweExsqExR2kxHAWbUm=OW/XPiU5KNq8mHzWKwDExFDWbH8kxHAESF/WbFqIBFQcO1DWBFgkavzWKw/Wb5UJxsVkxHAJ0uQWxwgXPDVkxHAWbsxXOvUle9QcOR6JYuxWaw3WKw6=OM3IND2=3NCJPpg80ATkxHAWx10EbJDLj9QcOuPEYMQWBUn5YjqRj9QcOEb=bweESezWKwqXli1WxsnFYND5kiCRj9QcOuPExuqWjhzWKwxJ0JAESMTixHAJxjviqU5Ij9QcOW6EbJ0EB/zWKwDEx=UWOGgXPDVkxHAWbsxXOvUle9QcOR6JYuxWaw3WKvbESJ3IND2kxHAEOFPEORQle9QcOR6JYuxWaw3WKwP=SR3INDVkxHAWbsxXOvUle9QcOR6JYuxWaw3WKw/JxM3IND2kxHAEOFPEORQle9QcOR6JYuxWaw3WKw0JYW3INDVkxHAWbsxXOvUle9QcOR6JYuxWaw3WKvYWxM3IND2=3NCJPpg80ATkxHAEtu0EbGALj9QcOuPElWA=aUn5YjqRj9QcOW6WSJq=bezWKwqXli1WxsnFYND5kiCRj9QcOuPExuqWjhzWKwxXSs0WYJTixHAJ0E1iqU5Ij9QcOp1EbJQXB/zWKwDExNbXtMgXPDVkxHAWbsxXOvUle9QcOR6JYuxWaw3WKvvXOu3IND2=3NCJPpg80ATkxHAElR6J0sALj9QcOjY=lRQJqUn5YjqRj9QcOuPXOM6ESezWKwqXli1WxsnFYND5kiCRj9QcOuPExuqWjhzWKwDExweXSMTixHAExJ3INDTkxHAElR6J0sALj9QcOjY=lRQJq1nza/zWKwqWSWAXtN8kxHAWbUm=OW/IBFQctseWqFgkSezWKwDExFDWbH8kxHAWbUm=OW/IBFQctuPJaFgka/zWKwqWSWAXtN8kxHAWbUm=OW/IBFQctM0EmFgkSeY5l6b5tU48mvzWKwxJbwAWOJVkxHA=S1AW0WxIkh0JkRwkxHAXOGqJ0s/7N9QcOR6JYuxWShq=kpeFYAwkxHAEOFPEORQle9QcOwQWYEvWaw3WKwPEmFgkavzWKwxJbwAWOJVkxHA=S1AW0WxISh2Lj9QcOR/WxwA=NhzWKwqXli1WxsTixHAWb16iqU57N9QcOuPExuqWjhzWKwqXli1WxsTixHAJSG0iqU5Lj9QcOR/WxwA=NhzWKwqXli1WxsTixHAEbNYiqU57l=e8YEDol2CIj9QcOsPEOWq=a/zWKwxXOpY=bWgcP=vFmHzWKw6XOFQJYR2kxHAWbUm=OW/XPiU5KNq8mHzWKwDExFDWbH8kxHAXSwPWtimIBFQctsqJmFgkavzWKw/ExuxWYMVkxHAWxwD=YJxISh2Lj9QcOR/WxwA=NhzWKwqXli1WxsTixHAJxuqiqU57N9QcOuPExuqWjhzWKwqXli1WxsTixHA=YseiqU5Lj9QcOR/WxwA=NhzWKwqXli1WxsTixHA=YMxiqU57N9QcOuPExuqWjhzWKwqXli1WxsTixHA=t=viqU5Lj9QcOR/WxwA=NhzWKwqXli1WxsTixHA=bJQiqU57N9QcOuPExuqWjhzWKwqXli1WxsTixHAWYNbiqU5Lj9QcOR/WxwA=NhzWKwqXli1WxsTixHAJxRPiqU57l=e8YEDol2CIj9QcOW0=bsxEq/zWKvY=SRP=lMgcP=vFmHzWKv1JYWxWbR2kxHAWbUm=OW/XPiU5KNq8mHzWKwDExFDWbH8kxHA=tibWxRqIBFQctEb=BFgkavzWKwxEYJ/WxFVkxHA=YMqE0NUISh2Lj9QcOR/WxwA=NhzWKwqXli1WxsTixHA=OuAiqU57l=e8YEDol2CIj9QcOu6WSw6Xa/zWKwxJSib=bFgcP=vFmHzWKwxEOHUW0s2kxHAWbUm=OW/XPiU5KNq8mHzWKwDExFDWbH8kxHAWxuQ=SEvIBFQcOivJqFgkavzWKwDXSsAXS1VkxHAW0sqJ0JPISh2Lj9QcOR/WxwA=NhzWKwqXli1WxsTixHAEtJ3IND2=3NCJPpg80ATkxHAWlMQWbFqLj9Qct=UXO1q=mUn5YjqRj9QcOMQJSUv=OezWKwqXli1WxsnFYND5kiCRj9QcOuPExuqWjhzWKweWts6JluTixHAJ0s/iqU5Ij9QcOjUWORPWm/zWKvY=Sw6WYJgXPDVkxHAWbsxXOvUle9QcOR6JYuxWaw3WKwDWOR3IND2=3NCJPpg80ATkxHAW0p1JxWeLj9QcOEbXlJe=mUn5YjqRj9QcOW6XlEYEOezWKwqXli1WxsnFYND5kiCRj9QcOuPExuqWjhzWKwxXSUb=buTixHAESvviqU5Ij9QcOE1=tWxEa/zWKwxJxUYElJgXPDVkxHAWbsxXOvUle9QcOR6JYuxWaw3WKwxJ0u3IND2=3NCJPpg80ATkxHAESw0W0=vLj9QcOjUEt=UEBUn5YjqRj9QcOim=YWxESezWKwqXli1WxsnFYND5kiCRj9QcOuPExuqWjhzWKwqJY=bWxMTixHAESHmiqU5Ij9QcOMAEbEYJa/zWKw/=SpY=SugXPDVkxHAWbsxXOvUle9QcOR6JYuxWaw3WKw6JlM3IND2=3NCJPpg80ATkxHAW0RQJlj1Lj9QcOpYJx1qWaUn5YjqRj9QcOuAWOvmESezWKwqXli1WxsnFYND5kiCRj9QcOuPExuqWjhzWKwDXOGAJbMTixHAE0jmiqU5Ij9QcOEmWtjv=B/zWKwD=YW6WbsgXPDVkxHAWbsxXOvUle9QcOR6JYuxWaw3WKvvW0u3IND2=3NCJPpg80ATkxHAEOMqE0WQLj9QcOWQWxivWBUn5YjqRj9QcOpvWbR6WOezWKwqXli1WxsnFYND5kiCRj9QcOuPExuqWjhzWKwDJSRqXSGTixHAESE1iqU5Ij9QcOueWb5bWB/zWKwxWOWqJSGgXPDVkxHAWbsxXOvUle9QcOR6JYuxWaw3WKw0=bF3IND2=3NCJPpg80ATkxHAWSNbEtuPLj9QcOUbEb5bJmUn5YjqRj9QcOMxWO=Y=SezWKwqXli1WxsnFYND5kiCRj9QcOuPExuqWjhzWKweWxG0=YMTixHAJlJeiqU5Ij9QcOseJxp1Eq/zWKw6JxJPJ0RgXPDVkxHAWbsxXOvUle9QcOR6JYuxWaw3WKwD=bW3IND2kxHAEOFPEORQle9QcOR6JYuxWaw3WKvUESR3INDVkxHAWbsxXOvUle9QcOR6JYuxWaw3WKvYJ0s3IND2=3NCJPpg80ATkxHAW0JqJlpbLj9QcOsPW0EYWaUn5YjqRj9QcOsP=lp1=bezWKwqXli1WxsnFYND5kiCRj9QcOuPExuqWjhzWKw/E0N1=tJTixHAWlN1iqU5Ij9QcOEYWYj1Jq/zWKw/ExEb=bsgXPDVkxHAWbsxXOvUle9QcOR6JYuxWaw3WKwDXlJ3IND2kxHAEOFPEORQle9QcOR6JYuxWaw3WKvbJSJ3INDVkxHAWbsxXOvUle9QcOR6JYuxWaw3WKwx=bW3IND2=3NCJPpg80ATkxHAWYWqElNvLj9QcOs6XSGA=aUn5YjqRj9QcOFAE0JA=bezWKwqXli1WxsnFYND5kiCRj9QcOuPExuqWjhzWKwPXO5YXtJTixHAXtEviqU5Ij9QcOibWbNUJa/zWKw/XS1QXtMgXPDVkxHAWbsxXOvUle9QcOR6JYuxWaw3WKvmXOW3IND2kxHAEOFPEORQle9QcOR6JYuxWaw3WKwPEbM3INDVkxHAWbsxXOvUle9QcOR6JYuxWaw3WKvvJbW3IND2kxHAEOFPEORQle9QcOR6JYuxWaw3WKvmWbR3INDVkxHAWbsxXOvUle9QcOR6JYuxWaw3WKvYXOG3IND2=3NCJPpg80ATkxHAESjmXluQLj9QcOuAXtuQJaUn5YjqRj9QcOsqESGxXOezWKwqXli1WxsnFYND5kiCRj9QcOuPExuqWjhzWKw/WbMQWxwTixHAExJ3INDTkxHAESjmXluQLj9QcOuAXtuQJa1nza/zWKwqWSWAXtN8kxHAWbUm=OW/IBFQcO10EmFgkSezWKwDExFDWbH8kxHAWbUm=OW/IBFQcOEUiqU5Lj9QcOR/WxwA=NhzWKwqXli1WxsTixHAJ0EUiqU57l=e8YEDol2CIj9QcOJxJls/=m/zWKw/ElJqJlRgcP=vFmHzWKvmEYRPWSJ2kxHAWbUm=OW/XPiU5KNq8mHzWKwDExFDWbH8kxHAJb=mExs0IBFQcO51WaFgkavzWKw0W0jvWlJVkxHAWSNYWYjmISh2Lj9QcOR/WxwA=NhzWKwqXli1WxsTixHAJYJeiqU57N9QcOuPExuqWjhzWKwqXli1WxsTixHAXtJAiqU5Lj9QcOR/WxwA=NhzWKwqXli1WxsTixHAJlJPiqU57N9QcOuPExuqWjhzWKwqXli1WxsTixHA=OuPiqU5Lj9QcOR/WxwA=NhzWKwqXli1WxsTixHA=bu6iqU57l=e8YEDol2CIj9QcOEb=O=1Jm/zWKwDEOEU=tRgcP=vFmHzWKw/W0R6XlJ2kxHAWbUm=OW/XPiU5KNq8mHzWKwDExFDWbH8kxHAWSEmXSUYIBFQctRDEqFgkavzWKwxJ0u0=tRVkxHAEOux=lpmISh2Lj9QcOR/WxwA=NhzWKwqXli1WxsTixHAXOMPiqU57N9QcOuPExuqWjhzWKwqXli1WxsTixHAWls/iqU5Lj9QcOR/WxwA=NhzWKwqXli1WxsTixHAEY=viqU57N9QcOuPExuqWjhzWKwqXli1WxsTixHA=bWQiqU5Lj9QcOR/WxwA=NhzWKwqXli1WxsTixHAWYE1iqU57N9QcOuPExuqWjhzWKwqXli1WxsTixHAWSJAiqU5Lj9QcOR/WxwA=NhzWKwqXli1WxsTixHAWbJPiqU57N9QcOuPExuqWjhzWKwqXli1WxsTixHAWbHUiqU5Lj9QcOR/WxwA=NhzWKwqXli1WxsTixHAWSNbiqU57N9QcOuPExuqWjhzWKwqXli1WxsTixHAWb1eiqU5Lj9QcOR/WxwA=NhzWKwqXli1WxsTixHAEO5YiqU57l=e8YEDol2CIj9QcOjYExsQEB/zWKwDWtWq=OFgcP=vFmHzWKwDWtRQWtJ2kxHAWbUm=OW/XPiU5KNq8mHzWKwDExFDWbH8kxHAEOHmWOHYIBFQcOivJqFgkavzWKw/=bF/WOuVkxHAEOHbWYuPISh2Lj9QcOR/WxwA=NhzWKwqXli1WxsTixHAEOwQiqU57l=e8YEDol2CIj9QcOWeEluAWa/zWKwxESiYEOWgcP=vFmHzWKweXOseWOF2kxHAWbUm=OW/XPiU5KNq8mHzWKwDExFDWbH8kxHAESw/ESGPIBFQctJPJqFgkavzWKwxESN1XOsVkxHAWxMq=buxISh2Lj9QcOR/WxwA=NhzWKwqXli1WxsTixHAExJDiqU57N9QcOuPExuqWjhzWKwqXli1WxsTixHAESG3INDVkxHAWbsxXOvUle9QcOR6JYuxWaw3WKv1XOJ3IND2=3NCJPpg80ATkxHAESG/WO5bLj9QcOsqJY=YJaUn5YjqRj9QcOM/WxJP=SezWKwqXli1WxsnFYND5kiCRj9QcOuPExuqWjhzWKweWSW0E0MTixHAE0u/iqU5Ij9QcOMQWSGPJq/zWKw/WYiY=YsgXPDVkxHAWbsxXOvUle9QcOR6JYuxWaw3WKw6=YM3IND2kxHAEOFPEORQle9QcOR6JYuxWaw3WKwPWOM3INDVkxHAWbsxXOvUle9QcOR6JYuxWaw3WKw/WOGeiqU57N9QcOuPExuqWjhzWKwqXli1WxsTixHAJYWAiqU5Lj9QcOR/WxwA=NhzWKwqXli1WxsTixHAXOGQiqU57l=e8YEDol2CIj9QcOsDW0J/EB/zWKwDESsAWxsgcP=vFmHzWKwqESHvWxM2kxHAWbUm=OW/XPiU5KNq8mHzWKwDExFDWbH8kxHAWbMQJSWeIBFQcORqWaFgkavzWKw/EOEYWSuVkxHAEOM/XOW/ISh2Lj9QcOR/WxwA=NhzWKwqXli1WxsTixHA=OW0iqU57l=e8YEDol2CIj9QcOMAExwAJm/zWKwxXls0XS1gcP=vFmHzWKwqJxF6W0J2kxHAWbUm=OW/XPiU5KNq8mHzWKwDExFDWbH8kxHAWYWPXSEYIBFQcO=bJaFgkavzWKweXOFAXtRVkxHAWxUvEb16ISh2Lj9QcOR/WxwA=NhzWKwqXli1WxsTixHAJxWxiqU57N9QcOuPExuqWjhzWKwqXli1WxsTixHA=bJ3INDVkxHAWbsxXOvUle9QcOR6JYuxWaw3WKwDEmFgkSeY5l6b5tU48mvzWKw/=OWqESsVkxHAWlM/=Y=YIkh0JkRwkxHAElim=YWe7N9QcOR6JYuxWShq=kpeFYAwkxHAEOFPEORQle9QcONmJY=bEaw3WKwqWbs3INDTkxHAWluxWbM/Lj9QcOjUWl=Y=m1nza/zWKwqWSWAXtN8kxHAWbUm=OW/IBFQctNYEBFgkSezWKwDExFDWbH8kxHAWbUm=OW/IBFQcOwq=aFgka/zWKwqWSWAXtN8kxHAWbUm=OW/IBFQcOF/WqFgkSeY5l6b5tU48mvzWKweJYM6ElJVkxHAEOvYWYWDIkh0JkRwkxHAWxuxElsP7N9QcOR6JYuxWShq=kpeFYAwkxHAEOFPEORQle9QcOWDWxNvEqw3WKweXts3INDTkxHAEliUXSNYLj9QcOuA=bibEB1nza/zWKwqWSWAXtN8kxHAWbUm=OW/IBFQctJP=aFgkSeY5l6b5tU48mvzWKweWOJPXSMVkxHAWYuDEYMPIkh0JkRwkxHAWSGAExpY7N9QcOR6JYuxWShq=kpeFYAwkxHAEOFPEORQle9QcOsQXOFD=mw3WKw0J0s3INDTkxHAESG0Ex1eLj9QcOi1EO=UEq1nza/zWKwqWSWAXtN8kxHAWbUm=OW/IBFQcO16EaFgkSezWKwDExFDWbH8kxHAWbUm=OW/IBFQcOw0WBFgka/zWKwqWSWAXtN8kxHAWbUm=OW/IBFQcOvU=mFgkSezWKwDExFDWbH8kxHAWbUm=OW/IBFQctpv=aFgka/zWKwqWSWAXtN8kxHAWbUm=OW/IBFQcOvYWBFgkSezWKwDExFDWbH8kxHAWbUm=OW/IBFQctRAWaFgka/zWKwqWSWAXtN8kxHAWbUm=OW/IBFQcO1/=BFgkSezWKwDExFDWbH8kxHAWbUm=OW/IBFQcOv1EqFgka/zWKwqWSWAXtN8kxHAWbUm=OW/IBFQcOUmEBFgkSeY5l6b5tU48mvzWKwxWOFQJYRVkxHAESs/=SvbIkh0JkRwkxHAWbvUWYJ07N9QcOR6JYuxWShq=kpeFYAwkxHAEOFPEORQle9QcORA=SiYEmw3WKvbJ0u3INDTkxHAWxGPWtimLj9QcOM/WlMAJq1nza/zWKwqWSWAXtN8kxHAWbUm=OW/IBFQcONUWBFgkSeY5l6b5tU48mvzWKwqXlseEOwVkxHAWSwPJYsAIkh0JkRwkxHAESwxExRQ7N9QcOR6JYuxWShq=kpeFYAwkxHAEOFPEORQle9QcOMAWxFqWBw3WKweW0u3INDTkxHAWbUvESuALj9QcOsAE0ivXB1nza/zWKwqWSWAXtN8kxHAWbUm=OW/IBFQctWqEaFgkSeY5l6b5tU48mvzWKw/J0jYEtJVkxHA=bJeJSw6Ikh0JkRwkxHAWYRAEbWP7N9QcOR6JYuxWShq=kpeFYAwkxHAEOFPEORQle9QcOimXOJxEqw3WKvYEtJ3INDTkxHAWlEv=bpYLj9QctJ0ElsAXa1nza/zWKwqWSWAXtN8kxHAWbUm=OW/IBFQctMxEmFgkSeY5l6b5tU48mvzWKwDJlivXOwVkxHAWlue=tuxIkh0JkRwkxHAESw6JSUb7N9QcOR6JYuxWShq=kpeFYAwkxHAEOFPEORQle9QcOMAXls6Jqw3WKw/J0M3INDTkxHAEtjmJSwALj9QcOj1Elp1Wq1nza/zWKwqWSWAXtN8kxHAWbUm=OW/IBFQcOF/EaFgkSeY5l6b5tU48mvzWKwqWbp1Ex1VkxHAElMPWljmIkh0JkRwkxHAEOM0WYMQ7N9QcOR6JYuxWShq=kpeFYAwkxHAEOFPEORQle9QcOueEbiUWBw3WKvv=BFgkavzWKwqWbp1Ex1VkxHAElMPWljmISh2Lj9QcOR/WxwA=NhzWKwqXli1WxsTixHAW0N1iqU57N9QcOuPExuqWjhzWKwqXli1WxsTixHAJbJ6iqU5Lj9QcOR/WxwA=NhzWKwqXli1WxsTixHAW0ibiqU57N9QcOuPExuqWjhzWKwqXli1WxsTixHA=SWeiqU5Lj9QcOR/WxwA=NhzWKwqXli1WxsTixHA=YR3IND2=3NCJPpg80ATkxHAWxMPWSR0Lj9QcON1W0RqEqUn5YjqRj9QcONbExGAEOezWKwqXli1WxsnFYND5kiCRj9QcOuPExuqWjhzWKweJxFQXOuTixHAJbuPiqU5Ij9QcOWeExsqEm/zWKwe=OEmWbFgXPDVkxHAWbsxXOvUle9QcOR6JYuxWaw3WKwA=tM3IND2=3NCJPpg80ATkxHAEliYXO5ULj9QcORAJxFQ=mUn5YjqRj9QcOR/JxsAWxezWKwqXli1WxsnFYND5kiCRj9QcOuPExuqWjhzWKwqWlW/XOWTixHAWbR/iqU5Ij9QcONm=bwP=a/zWKwqXtWPWtJgXPDVkxHAWbsxXOvUle9QcOR6JYuxWaw3WKweExF3IND2=3NCJPpg80ATkxHAEtMqXOFeLj9QcOWQWlu/=aUn5YjqRj9QcOM6WxpbXOezWKwqXli1WxsnFYND5kiCRj9QcOuPExuqWjhzWKweXSWDJxwTixHAWx=1iqU5Ij9QcOpUWbwPEa/zWKwxWOj1WlMgXPDVkxHAWbsxXOvUle9QcOR6JYuxWaw3WKwDEbF3IND2kxHAEOFPEORQle9QcOR6JYuxWaw3WKwP=O13INDVkxHAWbsxXOvUle9QcOR6JYuxWaw3WKvmExw3IND2kxHAEOFPEORQle9QcOR6JYuxWaw3WKvm=Yu3INDVkxHAWbsxXOvUle9QcOR6JYuxWaw3WKw6ExG3IND2kxHAEOFPEORQle9QcOR6JYuxWaw3WKw0EOu3INDVkxHAWbsxXOvUle9QcOR6JYuxWaw3WKw6EBFgkSezWKwDExFDWbH8kxHAWbUm=OW/IBFQct=b=aFgka/zWKwqWSWAXtN8kxHAWbUm=OW/IBFQcOJx=mFgkSezWKwDExFDWbH8kxHAWbUm=OW/IBFQct=mEmFgka/zWKwqWSWAXtN8kxHAWbUm=OW/IBFQcOFQ=aFgkSeY5l6b5tU48mvzWKweJS=v=b1VkxHAWlMxJbvbIkh0JkRwkxHAEtsAEbuQ7N9QcOR6JYuxWShq=kpeFYAwkxHAEOFPEORQle9QcOpvXOJDWBw3WKvb=lW3INDTkxHAEls0JlJ6Lj9QcOjUW0RAJq1nza/zWKwqWSWAXtN8kxHAWbUm=OW/IBFQctpYEmFgkSezWKwDExFDWbH8kxHAWbUm=OW/IBFQcOu6WqFgka/zWKwqWSWAXtN8kxHAWbUm=OW/IBFQcOu/XBFgkSezWKwDExFDWbH8kxHAWbUm=OW/IBFQcOW/JmFgka/zWKwqWSWAXtN8kxHAWbUm=OW/IBFQctRxJqFgkSeY5l6b5tU48mvzWKw/EOHmElMVkxHAEYRDWxNYIkh0JkRwkxHAWSjvW0sQ7N9QcOR6JYuxWShq=kpeFYAwkxHAEOFPEORQle9QcOs/JSEvWBw3WKvYEYu3INDTkxHAWSuQJbNULj9QcO=mEOWe=m1nza/zWKwqWSWAXtN8kxHAWbUm=OW/IBFQcOFxiqU57N9QcOuPExuqWjhzWKwqXli1WxsTixHAW0JPiqU5Lj9QcOR/WxwA=NhzWKwqXli1WxsTixHAWlM3IND2kxHAEOFPEORQle9QcOR6JYuxWaw3WKweWYR3INDVkxHAWbsxXOvUle9QcOR6JYuxWaw3WKwDWxF3IND2kxHAEOFPEORQle9QcOR6JYuxWaw3WKvUXts3INDVkxHAWbsxXOvUle9QcOR6JYuxWaw3WKwqWts3IND2kxHAEOFPEORQle9QcOR6JYuxWaw3WKvUJlJ3INDVkxHAWbsxXOvUle9QcOR6JYuxWaw3WKwAESu3IND2=3NCJPpg80ATkxHAEONmWYj1Lj9QctpYJSwDEq/zWKw/JxFQWYJgcP=vFmHzWKwqE0pvWOF2kxHAWbUm=OW/XPiU5KNq8mHzWKwDExFDWbH8kxHAWb51JSGPIBFQct=1=mFgkavzWKwDElRqJluVkxHA=t=vXOuPLj9QcOjbExGq=m1nza/zWKwqWSWAXtN8kxHAWbUm=OW/IBFQctjvEaFgkSezWKwDExFDWbH8kxHAWbUm=OW/IBFQcONmWaFgka/zWKwqWSWAXtN8kxHAWbUm=OW/IBFQcO1xEqFgkSeY5l6b5tU48mvzWKwx=OpvW0WVkxHAEORPWlN1Ikh0JkRwkxHAWlsD=bpU7N9QcOR6JYuxWShq=kpeFYAwkxHAEOFPEORQle9QcOjvEtJD=aw3WKvbJ0u3INDTkxHAW0uDJSEbLj9QcOuqExjU=B1nza/zWKwqWSWAXtN8kxHAWbUm=OW/IBFQcOEbEmFgkSeY5l6b5tU48mvzWKweElNvEYRVkxHAESRA=bNmIkh0JkRwkxHAW0sDE0=v7N9QcOR6JYuxWShq=kpeFYAwkxHAEOFPEORQle9QcOEvEO5YJaw3WKweXSM3INDTkxHAESNUJS=mLj9QcOMqXtJeJm1nza/zWKwqWSWAXtN8kxHAWbUm=OW/IBFQctEUXBFgkSezWKwDExFDWbH8kxHAWbUm=OW/IBFQcOFDWmFgka/zWKwqWSWAXtN8kxHAWbUm=OW/IBFQcOuAiqU57N9QcOuPExuqWjhzWKwqXli1WxsTixHAWSGQWBFgka/zWKwqWSWAXtN8kxHAWbUm=OW/IBFQcOpvEaFgkSeY5l6b5tU48mvzWKwqJ0EmWxFVkxHAWYsDJSR6Ikh0JkRwkxHAEls0=bJx7N9QcOR6JYuxWShq=kpeFYAwkxHAEOFPEORQle9QcONvEYJ0Wqw3WKweXSM3INDTkxHAWYEbJbWPLj9QcOivEtsqXa1nza/zWKwqWSWAXtN8kxHAWbUm=OW/IBFQctWDWBFgkSeY5l6b5tU48mvzWKwqXSjYJSRVkxHAEOEmWxsQIkh0JkRwkxHAEtjU=Ypb7N9QcOR6JYuxWShq=kpeFYAwkxHAEOFPEORQle9QcOpv=l=1Jqw3WKwD=SF3INDTkxHAWb1/=YsqLj9QcOuxJbW/WB1nza/zWKwqWSWAXtN8kxHAWbUm=OW/IBFQcOUUXaFgkSezWKwDExFDWbH8kxHAWbUm=OW/IBFQctue=BFgka/zWKwqWSWAXtN8kxHAWbUm=OW/IBFQctR0XBFgkSezWKwDExFDWbH8kxHAWbUm=OW/IBFQcOsQWOR3INDVkxHAWbsxXOvUle9QcOR6JYuxWaw3WKvmJxM3IND2=3NCJPpg80ATkxHAJxsAWxMVkxHAEtjYEtWDIkh0JkRwkxHAWSueWt=Y7N9QcOR6JYuxWShq=kpeFYAwkxHAEOFPEORQle9QcOsDESHY=mw3WKvmJlu3INDTkxHAJxsAWxMVkxHAEtjYEtWDISh2Lj9QcOR/WxwA=NhzWKwqXli1WxsTixHAWbRQiqU57N9QcOuPExuqWjhzWKwqXli1WxsTixHAWbJQiqU5Lj9QcOR/WxwA=NhzWKwqXli1WxsTixHA=S5UiqU57N9QcOuPExuqWjhzWKwqXli1WxsTixHAExJxiqU5Lj9QcOR/WxwA=NhzWKwqXli1WxsTixHA=YRQiqU57N9QcOuPExuqWjhzWKwqXli1WxsTixHAWxj1iqU5Lj9QcOR/WxwA=NhzWKwqXli1WxsTixHA=ts3IND2kxHAEOFPEORQle9QcOR6JYuxWaw3WKw6XOG3INDVkxHAWbsxXOvUle9QcOR6JYuxWaw3WKvUEbu3IND2kxHAEOFPEORQle9QcOR6JYuxWaw3WKw0EaFgka/zWKwqWSWAXtN8kxHAWbUm=OW/IBFQctuAEaFgkSezWKwDExFDWbH8kxHAWbUm=OW/IBFQcOwqWmFgka/zWKwqWSWAXtN8kxHAWbUm=OW/IBFQcOMDWqFgkSezWKwDExFDWbH8kxHAWbUm=OW/IBFQcOsxWqFgka/zWKwqWSWAXtN8kxHAWbUm=OW/IBFQctWxEaFgkSezWKwDExFDWbH8kxHAWbUm=OW/IBFQcOwAJmFgka/zWKwqWSWAXtN8kxHAWbUm=OW/IBFQctJ/WmFgkSezWKwDExFDWbH8kxHAWbUm=OW/IBFQctuPJqFgka/zWKwqWSWAXtN8kxHAWbUm=OW/IBFQcOvYEBFgkSezWKwDExFDWbH8kxHAWbUm=OW/IBFQctjYXaFgka/zWKwqWSWAXtN8kxHAWbUm=OW/IBFQcts/WaFgkSeY5l6b5tU48mvzWKweXljUWSwVkxHAWSM6=tRqIkh0JkRwkxHAXtMDWSv17N9QcOR6JYuxWShq=kpeFYAwkxHAEOFPEORQle9QcOvUEOsA=Bw3WKvv=BFgkavzWKweXljUWSwVkxHAWSM6=tRqISh2Lj9QcOR/WxwA=NhzWKwqXli1WxsTixHAElMAiqU57l=e8YEDol2CIj9QcOimWS10WqUn5YjqRj9QcOR0JbM/JbezWKwqXli1WxsnFYND5kiCRj9QcOuPExuqWjhzWKwqEYReWlRTixHAEtJ6iqU5Ij9QcOimWS10Wq1nza/zWKwqWSWAXtN8kxHAWbUm=OW/IBFQctsxWBFgkSezWKwDExFDWbH8kxHAWbUm=OW/IBFQcOW/WmFgka/zWKwqWSWAXtN8kxHAWbUm=OW/IBFQctWQEmFgkSeY5l6b5tU48mvzWKw6J0ReJS1gcP=vFmHzWKwDWtJeEbR2kxHAWbUm=OW/XPiU5KNq8mHzWKwDExFDWbH8kxHAEOHYESJqIBFQctJxWaFgkavzWKw6J0ReJS1gXPDVkxHAWbsxXOvUle9QcOR6JYuxWaw3WKvmEOM3IND2kxHAEOFPEORQle9QcOR6JYuxWaw3WKwDXOw3INDVkxHAWbsxXOvUle9QcOR6JYuxWaw3WKwDWxu3IND2kxHAEOFPEORQle9QcOR6JYuxWaw3WKweExG3INDVkxHAWbsxXOvUle9QcOR6JYuxWaw3WKwPEbw3IND2kxHAEOFPEORQle9QcOR6JYuxWaw3WKvbJS13INDVkxHAWbsxXOvUle9QcOR6JYuxWaw3WKwDXtW3IND2=3NCJPpg80ATkxHAWS=bExseLj9QcONmJlsAJqUn5YjqRj9QcOs6ExuxWSezWKwqXli1WxsnFYND5kiCRj9QcOuPExuqWjhzWKw/XSFDWxsTixHAJbuPiqU5Ij9QcOs0JxF/Ea/zWKweJYjvXtWgXPDVkxHAWbsxXOvUle9QcOR6JYuxWaw3WKwq=YM3IND2kxHAEOFPEORQle9QcOR6JYuxWaw3WKwPWS13INDVkxHAWbsxXOvUle9QcOR6JYuxWaw3WKw0=bW3IND2kxHAEOFPEORQle9QcOR6JYuxWaw3WKv1EYM3INDVkxHAWbsxXOvUle9QcOR6JYuxWaw3WKwPXSu3IND2kxHAEOFPEORQle9QcOR6JYuxWaw3WKwDJbJ3INDVkxHAWbsxXOvUle9QcOR6JYuxWaw3WKw0EOF3IND2kxHAEOFPEORQle9QcOR6JYuxWaw3WKwAJYW3INDVkxHAWbsxXOvUle9QcOR6JYuxWaw3WKweJbw3IND2kxHAEOFPEORQle9QcOR6JYuxWaw3WKvYWlR3INDVkxHAWbsxXOvUle9QcOR6JYuxWaw3WKv1=bu3IND2=3NCJPpg80ATkxHAEliY=OF/Lj9QcOs6XtJD=mUn5YjqRj9QcOpvWxRDXSezWKwqXli1WxsnFYND5kiCRj9QcOuPExuqWjhzWKwDJSWqEO1TixHAJb1QiqU5Ij9QcONm=YuPWa/zWKw/XSvYEtJgXPDVkxHAWbsxXOvUle9QcOR6JYuxWaw3WKwAWxR3IND2kxHAEOFPEORQle9QcOR6JYuxWaw3WKwDExF3INDVkxHAWbsxXOvUle9QcOR6JYuxWaw3WKwqWqFgkSezWKwDExFDWbH8kxHAWbUm=OW/IBFQctjUEaFgka/zWKwqWSWAXtN8kxHAWbUm=OW/IBFQcONbEmFgkSezWKwDExFDWbH8kxHAWbUm=OW/IBFQct=YJqFgka/zWKwqWSWAXtN8kxHAWbUm=OW/IBFQcOjb=BFgkSezWKwDExFDWbH8kxHAWbUm=OW/IBFQctu6JaFgka/zWKwqWSWAXtN8kxHAWbUm=OW/IBFQcOuP=aFgkSezWKwDExFDWbH8kxHAWbUm=OW/IBFQcO=vWaFgka/zWKwqWSWAXtN8kxHAWbUm=OW/IBFQcOu6JaFgkSezWKwDExFDWbH8kxHAWbUm=OW/IBFQcOFDXaFgka/zWKwqWSWAXtN8kxHAWbUm=OW/IBFQctWxXaFgkSezWKwDExFDWbH8kxHAWbUm=OW/IBFQcOvUWmFgka/zWKwqWSWAXtN8kxHAWbUm=OW/IBFQcOpbWqFgkSezWKwDExFDWbH8kxHAWbUm=OW/IBFQcONvEBFgka/zWKwqWSWAXtN8kxHAWbUm=OW/IBFQctMQJqFgkSezWKwDExFDWbH8kxHAWbUm=OW/IBFQctjU=mFgka/zWKwqWSWAXtN8kxHAWbUm=OW/IBFQcOwDEqFgkSezWKwDExFDWbH8kxHAWbUm=OW/IBFQctpYEaFgka/zWKwqWSWAXtN8kxHAWbUm=OW/IBFQctpbJaFgkSezWKwDExFDWbH8kxHAWbUm=OW/IBFQcOEUWqFgka/zWKwqWSWAXtN8kxHAWbUm=OW/IBFQcO=mWaFgkSezWKwDExFDWbH8kxHAWbUm=OW/IBFQcONm=BFgka/zWKwqWSWAXtN8kxHAWbUm=OW/IBFQctpYWqFgkSezWKwDExFDWbH8kxHAWbUm=OW/IBFQctW/EBFgka/zWKwqWSWAXtN8kxHAWbUm=OW/IBFQcOvvWmFgkSezWKwDExFDWbH8kxHAWbUm=OW/IBFQcOjmEBFgka/zWKwqWSWAXtN8kxHAWbUm=OW/IBFQcO5YWBFgkSezWKwDExFDWbH8kxHAWbUm=OW/IBFQcti1WaFgka/zWKwqWSWAXtN8kxHAWbUm=OW/IBFQcOsDXaFgkSeY5l6b5tU48mvzWKwxXOWPWSFVkxHAWlWQEls0Ikh0JkRwkxHAWbsDXORA7N9QcOR6JYuxWShq=kpeFYAwkxHAEOFPEORQle9QcOR/EOwqXBw3WKwP=Os3INDTkxHAWxwxExsPLj9QcOjbWONvEm1nza/zWKwqWSWAXtN8kxHAWbUm=OW/IBFQcOW0WmFgkSezWKwDExFDWbH8kxHAWbUm=OW/IBFQctibWqFgka/zWKwqWSWAXtN8kxHAWbUm=OW/IBFQcO1A=BFgkSezWKwDExFDWbH8kxHAWbUm=OW/IBFQcOuPiqU5Lj9QcOR/WxwA=NhzWKwqXli1WxsTixHAWbwqiqU57N9QcOuPExuqWjhzWKwqXli1WxsTixHAWbEYiqU5Lj9QcOR/WxwA=NhzWKwqXli1WxsTixHAWSJQiqU57l=e8YEDol2CIj9QcOR0WO=mXa/zWKw/JxuA=S1gcP=vFmHzWKwDJY=b=ts2kxHAWbUm=OW/XPiU5KNq8mHzWKwDExFDWbH8kxHAEtiYJ0pvIBFQctj1iqU5Ij9QcOR0WO=mXa/zWKw/JxuA=S1gXPDVkxHAWbsxXOvUle9QcOR6JYuxWaw3WKw6EbR3IND2kxHAEOFPEORQle9QcOR6JYuxWaw3WKw6=bs3INDVkxHAWbsxXOvUle9QcOR6JYuxWaw3WKvUWO13IND2kxHAEOFPEORQle9QcOR6JYuxWaw3WKvY=bG3INDVkxHAWbsxXOvUle9QcOR6JYuxWaw3WKwe=SM3IND2kxHAEOFPEORQle9QcOR6JYuxWaw3WKwD=OF3INDVkxHAWbsxXOvUle9QcOR6JYuxWaw3WKw0JYu3IND2=3NCJPpg80ATkxHAWbM0JlMqLj9QcOWq=SE1EBUn5YjqRj9QcOue=b1PJbezWKwqXli1WxsnFYND5kiCRj9QcOuPExuqWjhzWKwDElJ6E0RTixHAWx=1iqU5Ij9QcOReEYjUWm/zWKwxWYMx=OugXPDVkxHAWbsxXOvUle9QcOR6JYuxWaw3WKw6WmFgkSeY5l6b5tU48mvzWKwxXlpmEb1VkxHAESFqWxRDIkh0JkRwkxHAXOiUXlW67N9QcOR6JYuxWShq=kpeFYAwkxHAEOFPEORQle9QcOwq=SUbXaw3WKvmJlu3INDTkxHAWxU1JbJ6Lj9QcOMPWbWqEB1nza/zWKwqWSWAXtN8kxHAWbUm=OW/IBFQcOsPWBFgkSezWKwDExFDWbH8kxHAWbUm=OW/IBFQctNYiqU5Lj9QcOR/WxwA=NhzWKwqXli1WxsTixHAEYsqiqU57N9QcOuPExuqWjhzWKwqXli1WxsTixHAExMQiqU5Lj9QcOR/WxwA=NhzWKwqXli1WxsTixHAJlNbiqU57l=e8YEDol2CIj9QcOM0=b5bWq/zWKwqEYJ6=SRgcP=vFmHzWKwxWYpmEtR2kxHAWbUm=OW/XPiU5KNq8mHzWKwDExFDWbH8kxHAWxi1JbpmIBFQcO1/=aFgkavzWKweEYJPJxWVkxHAWb=YXlMqISh2Lj9QcOR/WxwA=NhzWKwqXli1WxsTixHAJx1PiqU57N9QcOuPExuqWjhzWKwqXli1WxsTixHAEbWxiqU5Lj9QcOR/WxwA=NhzWKwqXli1WxsTixHAWSpviqU57N9QcOuPExuqWjhzWKwqXli1WxsTixHAEb5biqU5Lj9QcOR/WxwA=NhzWKwqXli1WxsTixHAWS=biqU57l=e8YEDol2CIj9QcOMPJxF/Ea/zWKw/WSRxWYsgcP=vFmHzWKw/WOu/Eb12kxHAWbUm=OW/XPiU5KNq8mHzWKwDExFDWbH8kxHAWSGDWSJ6IBFQcO51WaFgkavzWKweE0WPWSMVkxHAWSsqWxivISh2Lj9QcOR/WxwA=NhzWKwqXli1WxsTixHAE0M3IND2kxHAEOFPEORQle9QcOR6JYuxWaw3WKv1XSG3INDVkxHAWbsxXOvUle9QcOR6JYuxWaw3WKwD=lW3IND2=3NCJPpg80ATkxHAWSEUES=mLj9QcOF0EbR6EB/zWKw/XSEvWOMgcP=vFmHzWKwqWSs/=YW2kxHAWbUm=OW/XPiU5KNq8mHzWKwDExFDWbH8kxHAWbs/Wl=bIBFQct=1=mFgkavzWKw/W0MeEYRVkxHAExJ0Wb1DLj9QcOs6W0sQEa1nza/zWKwqWSWAXtN8kxHAWbUm=OW/IBFQcO=mWqFgkSeY5l6b5tU48mvzWKwqWSuqJb1VkxHAWSsxJ0pYIkh0JkRwkxHAElRDEbw67N9QcOR6JYuxWShq=kpeFYAwkxHAEOFPEORQle9QcONmEOJAXaw3WKwqJxs3INDTkxHAWbsDWYR6Lj9QcOs/W0E1=m1nza/zWKwqWSWAXtN8kxHAWbUm=OW/IBFQctuq=BFgkSeY5l6b5tU48mvzWKwxXtNmEbWVkxHAEOMeWSuDIkh0JkRwkxHAWxRqWbsA7N9QcOR6JYuxWShq=kpeFYAwkxHAEOFPEORQle9QcOWqWbR/XBw3WKwxWxF3INDTkxHAWxvUJbJxLj9QcOueESsDEB1nza/zWKwqWSWAXtN8kxHAWbUm=OW/IBFQcOw0JmFgkSezWKwDExFDWbH8kxHAWbUm=OW/IBFQcOjUJaFgka/zWKwqWSWAXtN8kxHAWbUm=OW/IBFQctJ/EmFgkSezWKwDExFDWbH8kxHAWbUm=OW/IBFQcOsQiqU5Lj9QcOR/WxwA=NhzWKwqXli1WxsTixHAWSWDiqU57l=e8YEDol2CIj9QcOp1WxWx=m/zWKw/=Ssq=YMgcP=vFmHzWKvvJbJ/Jbu2kxHAWbUm=OW/XPiU5KNq8mHzWKwDExFDWbH8kxHAJlR0WlRDIBFQctsx=aFgkavzWKwD=OWxW0JVkxHAWlM/WY=UISh2Lj9QcOR/WxwA=NhzWKwqXli1WxsTixHAWSGQXaFgkSeY5l6b5tU48mvzWKweJSFQXSwVkxHAEOMxJb=vIkh0JkRwkxHAWSw/WbHY7N9QcOR6JYuxWShq=kpeFYAwkxHAEOFPEORQle9QcOsAWSRQ=mw3WKwAJYu3INDTkxHAElsPWO1ALj9QcOueW0R0Ja1nza/zWKwqWSWAXtN8kxHAWbUm=OW/IBFQcOJDXaFgkSezWKwDExFDWbH8kxHAWbUm=OW/IBFQcOReEmFgka/zWKwqWSWAXtN8kxHAWbUm=OW/IBFQcts/=aFgkSezWKwDExFDWbH8kxHAWbUm=OW/IBFQcOUbJaFgka/zWKwqWSWAXtN8kxHAWbUm=OW/IBFQcOFxEmFgkSezWKwDExFDWbH8kxHAWbUm=OW/IBFQcOUUEaFgka/zWKwqWSWAXtN8kxHAWbUm=OW/IBFQcOEmiqU57N9QcOuPExuqWjhzWKwqXli1WxsTixHA=tpbiqU5Lj9QcOR/WxwA=NhzWKwqXli1WxsTixHA=l=YiqU57N9QcOuPExuqWjhzWKwqXli1WxsTixHAWSvbiqU5Lj9QcOR/WxwA=NhzWKwqXli1WxsTixHAJ0J6iqU57N9QcOuPExuqWjhzWKwqXli1WxsTixHA=OHmiqU5Lj9QcOR/WxwA=NhzWKwqXli1WxsTixHAW0W/iqU57N9QcOuPExuqWjhzWKwqXli1WxsTixHAESJDiqU5Lj9QcOR/WxwA=NhzWKwqXli1WxsTixHAExW6iqU57N9QcOuPExuqWjhzWKwqXli1WxsTixHAWb5miqU5Lj9QcOR/WxwA=NhzWKwqXli1WxsTixHAXSvmiqU57l=e8YEDol2CIj9QcORAWxEYEq/zWKwDJYWDXlWVkxHAEtjYWOJ0Ikh0JkRwkxHAESWQXl=17N9QcOR6JYuxWShq=kpeFYAwkxHAEOFPEORQle9QcOMxWOUY=Bw3WKvmWxW3INDTkxHAWbwxW0JPLj9QcOpmJxu6Jq/zWKwDJlJQEbJgXPDVkxHAWbsxXOvUle9QcOR6JYuxWaw3WKw6JYu3IND2kxHAEOFPEORQle9QcOR6JYuxWaw3WKw6WYs3INDVkxHAWbsxXOvUle9QcOR6JYuxWaw3WKw6EOF3IND2=3NCJPpg80ATkxHAWSM6J0sQLj9QcOvUJlNvWmUn5YjqRj9QcOse=ORqESezWKwqXli1WxsnFYND5kiCRj9QcOuPExuqWjhzWKw/EluqWbMTixHAXORDiqU5Ij9QcOseXlEvWB/zWKwA=ljUJSRgXPDVkxHAWbsxXOvUle9QcOR6JYuxWaw3WKvUEx13IND2=3NCJPpg80ATkxHAESpbWSUULj9QctJe=Swx=mUn5YjqRj9QcOsQWOHmWxezWKwqXli1WxsnFYND5kiCRj9QcOuPExuqWjhzWKw/WOGQJbWTixHAJlu3INDTkxHAESpbWSUULj9QctJe=Swx=m1nza/zWKwqWSWAXtN8kxHAWbUm=OW/IBFQctuDEaFgkSeY5l6b5tU48mvzWKwx=lEY=OsVkxHAWSG0JSWPIkh0JkRwkxHA=YpbW0iv7N9QcOR6JYuxWShq=kpeFYAwkxHAEOFPEORQle9Qct=1JxEmJaw3WKwAWbu3INDTkxHAW0Nb=Yu/Lj9QcOsQEYsxEq1nza/zWKwqWSWAXtN8kxHAWbUm=OW/IBFQcOuDEBFgkSezWKwDExFDWbH8kxHAWbUm=OW/IBFQcOsAEaFgka/zWKwqWSWAXtN8kxHAWbUm=OW/IBFQcOuxWaFgkSeY5l6b5tU48mvzWKweJY=bESsVkxHAEtNbXSUYIkh0JkRwkxHAWb1xXOib7N9QcOR6JYuxWShq=kpeFYAwkxHAEOFPEORQle9QcOR6WxwqJqw3WKwAJYu3INDTkxHAEliYJxM/Lj9QcOpUJx16=m1nza/zWKwqWSWAXtN8kxHAWbUm=OW/IBFQcO5UEBFgkSezWKwDExFDWbH8kxHAWbUm=OW/IBFQctRxWBFgka/zWKwqWSWAXtN8kxHAWbUm=OW/IBFQcOEbEqFgkSezWKwDExFDWbH8kxHAWbUm=OW/IBFQcOjv=aFgkSh0JkRwkxHAXSWeEOJA7N9QcOR/WxwA=Shb806x5BHzWKw/Wli1XOu2le9QcOuPExuqWjhzWKwqXli1WxsTixHAJxiviqU5Lj9QcOuPExuqWjhzWKwqXli1WxsTixHAW0jYiqU5Lj9QcOuPExuqWjhzWKwqXli1WxsTixHAWbW/iqU5Lj9QcOuPExuqWjhzWKwqXli1WxsTixHAJbW/iqU5Lj9QcOuPExuqWjhzWKwqXli1WxsTixHAWbJAiqU5Lj9QcOuPExuqWjhzWKwqXli1WxsTixHAXOH1iqU5Lj9QcOuPExuqWjhzWKwqXli1WxsTixHAEtpmiqU5Lj9QcOuPExuqWjhzWKwqXli1WxsTixHAJbRAiqU5Lj9QcOuPExuqWjhzWKwqXli1WxsTixHAWYEviqU5Lj9QcOuPExuqWjhzWKwqXli1WxsTixHAESw3INDVkxHAEOFPEORQle9QcOR6JYuxWaw3WKwqWOw3INDVkxHAEOFPEORQle9QcOR6JYuxWaw3WKwAJxF3INDVkxHAEOFPEORQle9QcOR6JYuxWaw3WKwDXOJ3INDVkxHAEOFPEORQle9QcOR6JYuxWaw3WKvbElR3INDVkxHAEOFPEORQle9QcOR6JYuxWaw3WKwAEbu3INe5Lj9QcOs6EbuDEbe8kxHAEOFPEORQle9QcOR6JYuxWaw3WKw/Ebu3INe5X0/U5BHzWKw/J0W6=ts2kxHAEOFPEORQle9QcOR6JYuxWaw3WKvvWtu3INDn5YjqRj9QcOWxEbJ6ExenzShzWKwxWxJ0XS58kxHAWbUm=OW/IBFQcOi1EqFgIe9QcOR6JYuxWaw3WKwAJbs3IND2leDnJ02CFPuwkxHAEtivWxiU7N9QcOWxEbJ6ExhY5l6b5tU48mHzWKwAJYNbJSuTkxHAEOvb=bs0Ikh0JkRwkxHAESjYESiU7N9QcOR6JYuxWa/zWKweWYuQESR2cPDnkxHAESi1WOMqle9QcOM/=bMq=aw3WKwDXSM3IND2kxHAXSWeEOJAle9QcOM/=bMq=aw3WKvb=tR3INDn5YjqRj9QcOWA=OMDWSezWKweWYuQESRnolJTkxHAXSWeEOJAle9QcOM/=bMq=aw3WKwAJSF3INDTkxHAXSWeEOJAle9QcOM/=bMq=aw3WKweWx13INDVkxHAXSWeEOJAle9QcOM/=bMq=aw3WKweWx13INDgIkhb806x5BHzWKw/Xlu/=lR2kxHAEOvb=bs0le9QcOM/=bMq=aw3WKwxXOs3IahzWKweWlJeWYMTixHAEOu0iqU5IBFbiqhzWKwe=bp1JbsgXPiU5KNq8mHzWKw6WxMDEbv8kxHAESjYESiUIBFQctMAEBFgkavzWKw/Xlu/=lRV83NV8B1nzlNVF0Nn=3NCJPpg80AwkxHAJYEYJSG/IBUn5YjqRj9QcOE1=SjUJSezWKweWlJeWYMnkxHAW0p1=YsAle9QcOE1=SjUJaw3WKw6XSJ3IND2RNh5Lj9QctuD=tReEehzWKwx=tM/=lsTixHAJSu3IaV3FPW3kSDvRNh5Lj9QcOuDEOwx=UhzWKwx=tM/=lsTixHAWlJ6iqU5le9QcOE1=SjUJaw3WKw6XtJ3IND2kxHAWxv1ESu/le9QcOE1=SjUJaw3WKwDXSM3INDnzke2J02CFPuwkxHAEtsDEx5U7N9QcONvJYW/WSDZcP=vFmHzWKwDEbFxJxM2kxHAWbUm=OW/Lj9QcOR/=tuqEbenzShzWKwqWlp1Wb=8kxHAEOJPW0WeIBFQct=1JaFgkSezWKw6WxMDEbv8kxHAEOJPW0WeIBFQctWqWqFgka/zWKwqWlp1Wb=8kxHAEOJPW0WeIBFQcOJPXBFgkSeY5l6b5tU48mvzWKvbW0JP=b1VkxHAWSvmWSvvIkh0JkRwkxHAEOG6E0R/7N9QcOu0ExEbEShq=kpeFYAwkxHAXSWeEOJAle9QcOuQXS5mWaw3WKwxEOu3INDTkxHAJxEYE0J6Lj9QcOsAJbsAJa1nza/zWKwqWlp1Wb=8kxHAEOJPW0WeIBFQctjvJaFgkSeY5l6b5tU48mvzWKweXlRPWYsVkxHA=YEvWYJeIkh0JkRwkxHAElMeESMe7N9QcOu0ExEbEShq=kpeFYAwkxHAXSWeEOJAle9QcONUESMeEaw3WKvmElW3INDTkxHAESUmExivLj9Qct=bJSiYEa1nza/zWKwqWlp1Wb=8kxHAEOJPW0WeIBFQcOwDEBFgkSeY5l6b5tU48mvzWKwqJxEY=bwVkxHAW0Me=YRPIkh0JkRwkxHAWb5Y=lEY7N9QcOu0ExEbEShq=kpeFYAwkxHAXSWeEOJAle9QcORP=YNb=mw3WKv1=bs3INDTkxHAWYWx=YJALj9QcOEUEl=mEq1nza/zWKwqWlp1Wb=8kxHAEOJPW0WeIBFQcOwDJmFgkSeY5l6b5tU48mvzWKvmElsqJluVkxHAWxRx=OvvIkh0JkRwkxHAESwAWlEb7N9QcOu0ExEbEShq=kpeFYAwkxHAXSWeEOJAle9QcOMAXOjbJqw3WKwPEaFgkavzWKvmElsqJluVkxHAWxRx=OvvISh2Lj9QcOR/=tuqEUhzWKwDEbFxJxMTixHAJlR6iqU57l=e8YEDol2CIj9QcOp1WS5mEq/zWKvvWlRAXlsgcP=vFmHzWKwxJxJAWYR2kxHAEOJPW0WeXPiU5KNq8mHzWKw6WxMDEbv8kxHAW0W0XOimIBFQcOpY=aFgkavzWKwD=OsPJbFVkxHAJSjmXOUvISh2Lj9QcOR/=tuqEUhzWKwDEbFxJxMTixHA=lWQiqU57l=e8YEDol2CIj9QcOj1JSFxEB/zWKwqWtNYW0WgcP=vFmHzWKwqWbF0WOG2kxHAEOJPW0WeXPiU5KNq8mHzWKw6WxMDEbv8kxHAWbRPEbGQIBFQctpYWaFgkavzWKw/=tsPWxuVkxHAWbHU=bEbISh2Lj9QcOR/=tuqEUhzWKwDEbFxJxMTixHAXlJPiqU57l=e8YEDol2CIj9QcOEmWbiUWq/zWKwDXlEYWSRgcP=vFmHzWKwqXtMDXls2kxHAEOJPW0WeXPiU5KNq8mHzWKw6WxMDEbv8kxHAWbvUEOUvIBFQctjmEaFgkavzWKwxJbRq=SWVkxHAEOUb=bsqISh2Lj9QcOR/=tuqEUhzWKwDEbFxJxMTixHAXOEYiqU57l=e8YEDol2CIj9QcOMQWxjbWa/zWKw/WYWqJbGgcP=vFmHzWKwq=OivEbF2kxHAEOJPW0WeXPiU5KNq8mHzWKw6WxMDEbv8kxHAWYuqJSJPIBFQcOFeiqU5Ij9QcOMQWxjbWa/zWKw/WYWqJbGgXPDVkxHAWbj1=OR0le9QcOu0ExEbEaw3WKw/=bF3IND2=3NCJPpg80ATkxHAWlj1WxM0Lj9QcOEvXONbWqUn5YjqRj9QcOWDXSuA=SezWKwDEbFxJxMnFYND5kiCRj9QcO1xESu0XjhzWKwxEO1DXtMTixHA=YiviqU5Ij9QcOjv=OWeEm/zWKwxJSweJxWgXPDVkxHAWbj1=OR0le9QcOu0ExEbEaw3WKwxJbW3IND2=3NCJPpg80ATkxHAEOGqEYjYLj9QcOEYJbvYWqUn5YjqRj9QcOsQWO1AESezWKwDEbFxJxMnFYND5kiCRj9QcO1xESu0XjhzWKw/WOG6XOMTixHA=YRPiqU5Ij9QcOuQWb=v=m/zWKwx=YRA=bWgXPDVkxHAWbj1=OR0le9QcOu0ExEbEaw3WKwP=bM3IND2=3NCJPpg80ATkxHAEYW0Wxu0Lj9QcOMAWxJ/JmUn5YjqRj9QcOu6EOEmEbezWKwDEbFxJxMnFYND5kiCRj9QcO1xESu0XjhzWKwDXSuxJbJTixHAXSs6iqU5Ij9QcO=bEbWDEm/zWKweXOW0WlRgXPDVkxHAWbj1=OR0le9QcOu0ExEbEaw3WKwAEO13IND2=3NCJPpg80ATkxHAESJAXS51Lj9QcOseWlMxEqUn5YjqRj9QcOEUXtNvWxezWKwDEbFxJxMnFYND5kiCRj9QcO1xESu0XjhzWKwx=SvUJSWTixHAWxuDiqU5Ij9QcOM0XO1P=B/zWKw/ESjUWxFgXPDVkxHAWbj1=OR0le9QcOu0ExEbEaw3WKwx=ts3IND2=3NCJPpg80ATkxHAWSivE0s/Lj9QcOEvJYR0WqUn5YjqRj9QcOWxExNm=bezWKwDEbFxJxMnFYND5kiCRj9QcO1xESu0XjhzWKwxWxFeJYJTixHAExM3INDTkxHAWSivE0s/Lj9QcOEvJYR0Wq1nza/zWKwqWlp1Wb=8kxHAEOJPW0WeIBFQcOWDiqU57l=e8YEDol2CIj9QcOu/JSw6Ja/zWKw/WO10XOMgcP=vFmHzWKvUJbvYEbM2kxHAEOJPW0WeXPiU5KNq8mHzWKw6WxMDEbv8kxHA=lRA=bJeIBFQcOvvEqFgkavzWKwDWlsAXlsVkxHAWSG6EbweISh2Lj9QcOR/=tuqEUhzWKwDEbFxJxMTixHAEls3IND2kxHAXSWeEOJAle9QcOu0ExEbEaw3WKw6EmFgka/zWKwqWlp1Wb=8kxHAEOJPW0WeIBFQcOUYXBFgkSezWKw6WxMDEbv8kxHAEOJPW0WeIBFQctN1JqFgkSh0JkRwkxHAWluP=b=Y7N9QcOR/=tuqEbhg=mvzWKw6WxMDEbv8kxHAEOJPW0WeIBFQcOvvEqFgkavzWKw6WxMDEbv8kxHAEOJPW0WeIBFQcOJ3INDVkxHAXSWeEOJAle9QcOu0ExEbEaw3WKvbWSR3INDgIkhY5l6b5tU48mHzWKwD=bwAJbMTIkh0JkRwkxHAWxsQXSEv7N9QcOu0ExEbEShzWKwDXtJeExH8kxHAWxsQXSEvIBFQctMeJaFgkSezWKw6WxMDEbv8kxHAWxsQXSEvIBFQcO=1=aFgkSh2zlNVF0NnJ02CFPuwkxHAEOMD=SW/7l6U5qHE5kpv5tU4812mF0Nq5YNqIBwg7S6n5YjqRj9QcO1DExG6XOezWKwDEbFxJxMnolJTkxHAWluP=b=Yle9QcO1DExG6XBw3WKwxEBFgkavzWKw/=O5YEY=8kxHAXSuPWO1AIBFQcONviqU5Lj9QcOj1E0J0=UhzWKw6EOFQXSwTixHAXlJAiqU5IaUn=3NCJPpg80AwkxHAWbsAWlR0IBUn5YjqRj9QcOjU=bMeXSezWKw6EOFQXSwVkxHAWbwPEls07N9QcOj1E0J0=UhzWKw/=lJeES1TixHA=YpviqU5le9QcOjU=bMeXaw3WKwAWxM3INDTiPQ3Ia/zWKwDW0uq=Ou2WKwQXP5Tol/UIBsvleDgcPEPokpboBvzWKwqXOFeJS=8kxHAEOE1WYuDIqh5IkhbJkEUixG3XU9QcOj1E0J0=UhzWKw/=lJeES1TixHAEbFAiqU5Ij9QcOsxWS1PXB/zWKw/ES1eElugX0E483pg83NUX0EvF0M3WaF+olJTkxHAWluP=b=Yle9QcOjU=bMeXaw3WKvvJls3INDTkxHAWluP=b=Yle9QcOjU=bMeXaw3WKwAEOu3INDTkxHAEOE1W0pvle9QcOjU=bMeXaw3WKvYExG3INDVWKwqIaQQcOGgIN9QcONbEOj1=bezWKw/=O5YEY=8kxHAWlNYESM6IBFQcOwDJmFgkaw3WBFVkxHAEO1x=SW0IShb806Dol6e=ShbJkEUixR3X3=vFmHzWKwxJYibEORVkxHAWbG6=bu07SHAWOhb806Dol6e=ShbJkEUixW3X3iU5KNq8mHzWKw/=O5YEY=8kxHAWlNYESM6IBFQctjmXaFgkavzWKw/=O5YEY=8kxHAWlNYESM6IBFQctNbWBFgkavzWKwqWOUYEOJVWKvvIaQQcOGgX0EvF0M3EBF+=Y2qIK=vFmHzWKv1EtW/JSJ2WKwQXe9QcOj1E0J0=UhzWKw/=lJeES1TixHAXlJPiqU5Ij9QctuDJxjvEm/zWKwxE0sPWY=8kxHAWlNYESM6IBFQctJPWBFgka1nkxHA=OpbWls0IxDQcORgkxHAWbG6=bu0IxezWKw/=O5YEY=8kxHAWlNYESM6IBFQcOwx=mFgkavzWKw/=O5YEY=8kxHAWlNYESM6IBFQcOjYEqFgkavzWKwxJYibEOR2kxHAWluP=b=Yle9QcOjU=bMeXaw3WKwxJbW3INDTkxHAW0ivExGxle9QcOjU=bMeXaw3WKwP=YW3INDTkxHA=OpbWls0IaQQcORgLOHAXa1ykxHAWluP=b=Yle9QcOjU=bMeXaw3WKwP=bM3INDTkxHAW0imJxuqLOHAXa1+kxHAW0imJxuqLj9QcOj1E0J0=UhzWKw/=lJeES1TixHAXOu6iqU5Ij9QcOMQ=bHmXa/zWKw/JbRAJbj8kxHAWlNYESM6IBFQcO5YJqFgkavzWKw/=O5YEY=8kxHAWlNYESM6IBFQcOE1JaFgkavzWKv1EtW/JSJVWKw/Ia1gIShb806Dol6e=Sh2J3iUJlVnzke2=l/x=aHzWKw/=O5YEY=8kxHAXSuPWO1AIBFQcOwDXaFgkavzWKv1EOwxJSuVkxHAEljmJxs/ISh2ISh0JkRwkxHAWbJ/ESJ67kh2Xe9QcOR0WSM0XNhzWKwDEbFxJxMTixHAXOpUiqU57asvleDVkxHAWbJ/ESJ6le9QcOu0ExEbEaw3WKw/ESF3IND2Raj8ka/zWKwDESpUWxj8kxHAEOJPW0WeIBFQcOwxEBFgkavzWKweJlibWSsVkxHAWbJ/ESJ6ISh2zShY5l6b5tU48mHzWKw/WluxXO1TkxHAWbu6W0seLj9QcOWxJxM0WaUn5YjqRj9QcOiU=bpb=bezWKwqXli1WxsVkxHAEbE1=OWA7kh2Xe9QcOJx=tuxXjhzWKwq=lJDJ0JTixHA=lJPiqU57l=e8YEDol2CIj9QcOs6XSvbXB/zWKw/E0se=SRgcP=vFmHzWKwxXSuxEOu2kxHAWYNYEtEYXPiU5KNq8mHzWKwDExFDWbH8kxHAWx1DWxuDIBFQctuDWaFgkavzWKw/XS1AJxwVkxHAWS5vElMqISh2Lj9QcOJx=tuxXjhzWKwq=lJDJ0JTixHAES5miqU57l=e8YEDol2CIj9QcOuDESJPEa/zWKwxXOJxJlWgcP=vFmHzWKwq=b5vW0R2kxHAWYNYEtEYXPiU5KNq8mHzWKwDExFDWbH8kxHAWYJPJSEmIBFQcOMqXBFgkavzWKwDEOM0ExMVkxHAWxw0W0jbISh2Lj9QcOJx=tuxXjhzWKwq=lJDJ0JTixHAEOHmiqU57N9QcOuPExuqWjhzWKwq=lJDJ0JTixHAJbMqiqU5Lj9QcOJx=tuxXjhzWKwq=lJDJ0JTixHA=lu3IND2kxHAEOFPEORQle9QcOiU=bpb=mw3WKvm=OM3INDVkxHAEbE1=OWAle9QcOiU=bpb=mw3WKwPExw3IND2kxHAEOFPEORQle9QcOiU=bpb=mw3WKweWbs3INDVkxHAEbE1=OWAle9QcOiU=bpb=mw3WKwDJlR3IND2kxHAEOFPEORQle9QcOiU=bpb=mw3WKw/WOR3INDVkxHAEbE1=OWAle9QcOiU=bpb=mw3WKvUW0M3IND2=3NCJPpg80ATkxHAEt=Y=bsALj9QcOimJls/XBUn5YjqRj9QcORD=tNUWSezWKwq=lJDJ0JnFYND5kiCRj9QcOuPExuqWjhzWKwqEtpU=SsTixHAWx=miqU5Ij9QcOpY=YJ/XB/zWKwqJYjvWSwgXPDVkxHAEbE1=OWAle9QcOiU=bpb=mw3WKw6JlJ3IND2=3NCJPpg80ATkxHAEluQWOWqLj9QcOEbWlJQ=aUn5YjqRj9QcOE1E0NYWbezWKwq=lJDJ0JnFYND5kiCRj9QcOuPExuqWjhzWKwx=O5U=bRTixHAWYuxiqU5Ij9QcON1WOGxWm/zWKwxJxjYWtMgXPDVkxHAEbE1=OWAle9QcOiU=bpb=mw3WKwDESW3IND2kxHAEOFPEORQle9QcOiU=bpb=mw3WKvbXOG3INDVkxHAEbE1=OWAle9QcOiU=bpb=mw3WKwq=tR3IND2kxHAEOFPEORQle9QcOiU=bpb=mw3WKv1E0J3INDVkxHAEbE1=OWAle9QcOiU=bpb=mw3WKweJbu3IND2=3NCJPpg80ATkxHAESibJbwqLj9QcONvWOvvJmUn5YjqRj9QcOsPJS=1WSezWKwq=lJDJ0JnFYND5kiCRj9QcOuPExuqWjhzWKw/E0s0=OsTixHAJ0j1iqU5Ij9QcOMqJ0RAWm/zWKweJSGAJlRgXPDVkxHAEbE1=OWAle9QcOiU=bpb=mw3WKw0XOM3IND2kxHAEOFPEORQle9QcOiU=bpb=mw3WKwAWlM3INDVkxHAEbE1=OWAle9QcOiU=bpb=mw3WKvYEtR3IND2kxHAEOFPEORQle9QcOiU=bpb=mw3WKv1JYW3INDVkxHAEbE1=OWAle9QcOiU=bpb=mw3WKvmJbM3IND2kxHAEOFPEORQle9QcOiU=bpb=mw3WKwqE0J3INDVkxHAEbE1=OWAle9QcOiU=bpb=mw3WKwxXSR3IND2kxHAEOFPEORQle9QcOiU=bpb=mw3WKvb=lu3INDVkxHAEbE1=OWAle9QcOiU=bpb=mw3WKwDWSG3IND2kxHAEOFPEORQle9QcOiU=bpb=mw3WKvU=lM3INDVkxHAEbE1=OWAle9QcOiU=bpb=mw3WKwP=SJ3IND2kxHAEOFPEORQle9QcOiU=bpb=mw3WKweJlR3INDVkxHAEbE1=OWAle9QcOiU=bpb=mw3WKvY=bR3IND2=3NCJPpg80ATkxHAWbM/ESi1Lj9QcOsxXO=bEaUn5YjqRj9QcOibEbW6WxezWKwq=lJDJ0JnFYND5kiCRj9QcOuPExuqWjhzWKwqJxJxXSWTixHAWYuxiqU5Ij9QcOReWSMq=B/zWKw/Wxw0JxMgXPDVkxHAEbE1=OWAle9QcOiU=bpb=mw3WKwxWxW3IND2=3NCJPpg80ATkxHAWYMeXtR/Lj9QcOR0JSNYEBUn5YjqRj9QcOsDXOEvWOezWKwq=lJDJ0JnFYND5kiCRj9QcOuPExuqWjhzWKw/EOwxJSGTixHAJ0j1iqU5Ij9QcOiUESvmWa/zWKwqEYse=bugXPDVkxHAEbE1=OWAle9QcOiU=bpb=mw3WKvYWOF3IND2kxHAEOFPEORQle9QcOiU=bpb=mw3WKwDWxM3INDVkxHAEbE1=OWAle9QcOiU=bpb=mw3WKwxEYW3IND2kxHAEOFPEORQle9QcOiU=bpb=mw3WKvUWaFgka/zWKw0W0p1Wxv8kxHAWYNYEtEYIBFQctJDJqFgkSezWKwDExFDWbH8kxHAWYNYEtEYIBFQct=bJqFgka/zWKw0W0p1Wxv8kxHAWYNYEtEYIBFQcOJDWmFgkSezWKwDExFDWbH8kxHAWYNYEtEYIBFQcORxWqFgka/zWKw0W0p1Wxv8kxHAWYNYEtEYIBFQcOFPEmFgkSeY5l6b5tU48mvzWKw/WtivJSMVkxHAEljYXONmIkh0JkRwkxHAEOpbJxsx7N9QcOiU=bpb=bhq=kpeFYAwkxHAEOFPEORQle9QcOuDJ0W/Wqw3WKw6EO13INDTkxHAWSHmJlseLj9QcONv=bweJm1nza/zWKw0W0p1Wxv8kxHAWYNYEtEYIBFQctW/WaFgkSeY5l6b5tU48mvzWKw/XOMDWm/zWKw/Wtu0W0sgcP=vFmHzWKwxXORe=Su2kxHAWYNYEtEYXPiU5KNq8mHzWKwDExFDWbH8kxHAWxwqElMDIBFQcO=viqU5Ij9QcOsAESuqLj9QcOsQ=OJxJa1nza/zWKw0W0p1Wxv8kxHAWYNYEtEYIBFQctJeEaFgkSeY5l6b5tU48mvzWKwDEYs/=YJVkxHAJYp1JlJDIkh0JkRwkxHA=Os0=OFD7N9QcOiU=bpb=bhq=kpeFYAwkxHAEOFPEORQle9Qctu/EYuPEBw3WKw6Wxs3INDTkxHAEO=vWl=YLj9Qcti1=tjYEB1nza/zWKw0W0p1Wxv8kxHAWYNYEtEYIBFQctueWaFgkSezWKwDExFDWbH8kxHAWYNYEtEYIBFQct=UXaFgka/zWKw0W0p1Wxv8kxHAWYNYEtEYIBFQctu3IND2kxHAEOFPEORQle9QcOiU=bpb=mw3WKwPElM3INDVkxHAEbE1=OWAle9QcOiU=bpb=mw3WKvvWSJ3IND2kxHAEOFPEORQle9QcOiU=bpb=mw3WKvUJSF3INDVkxHAEbE1=OWAle9QcOiU=bpb=mw3WKvUXls3IND2=3NCJPpg80ATkxHAJxN1JS5vLj9QcOu6XSuQJaUn5YjqRj9QcONmWlMQWSezWKwq=lJDJ0JnFYND5kiCRj9QcOuPExuqWjhzWKweJbjUWOsTixHAXlsDiqU5Ij9QctWe=tsPJa/zWKwDXS1DWtsgXPDVkxHAEbE1=OWAle9QcOiU=bpb=mw3WKwAEaFgkSeY5l6b5tU48mvzWKwPESEY=bFVkxHAWYJ0ExFPLj9QcOEYXlM/EaUn5YjqRj9QcOj1=tsqXSezWKwq=lJDJ0JnFYND5kiCRj9QcOuPExuqWjhzWKw/=tpvWb1TixHAESEviqU5Ij9QcOFeW0=YEq/zWKwq=bJPExFVkxHAW0J6=SseISh2Lj9QcOJx=tuxXjhzWKwq=lJDJ0JTixHA=YW0iqU57l=e8YEDol2CIj9QcOu0ExN1=B/zWKwA=S1xE0sgcP=vFmHzWKvmElEUWxezWKwq=lJDJ0JnFYND5kiCRj9QcOuPExuqWjhzWKvmElEUWqw3WKvbJlu3INDTkxHAEOJPElp1Lj9QcOvUXSWPJa1nza/zWKw0W0p1Wxv8kxHAWYNYEtEYIBFQcOvY=BFgkSezWKwDExFDWbH8kxHAWYNYEtEYIBFQcORPXBFgka/zWKw0W0p1Wxv8kxHAWYNYEtEYIBFQctR0=mFgkSezWKwDExFDWbH8kxHAWYNYEtEYIBFQctpmJaFgka/zWKw0W0p1Wxv8kxHAWYNYEtEYIBFQctpvEqFgkSeY5l6b5tU48mvzWKwq=t=UWSRVkxHAElseJb5bIkh0JkRwkxHAWl=vJ0iv7N9QcOiU=bpb=bhq=kpeFYAwkxHAEOFPEORQle9QcOjYJlEmJaw3WKw6JSs3INDTkxHAWYpY=SsqLj9QcONvElRPJq1nza/zWKw0W0p1Wxv8kxHAWYNYEtEYIBFQctpUEmFgkSezWKwDExFDWbH8kxHAWYNYEtEYIBFQctNmEmFgka/zWKw0W0p1Wxv8kxHAWYNYEtEYIBFQcOWPEaFgkSezWKwDExFDWbH8kxHAWYNYEtEYIBFQcOpv=aFgka/zWKw0W0p1Wxv8kxHAWYNYEtEYIBFQcONmEmFgkSeY5l6b5tU48mvzWKwxXOMx=lsVkxHAWxJDJbwPIkh0JkRwkxHA=YWqWY=17N9QcOiU=bpb=bhq=kpeFYAwkxHAEOFPEORQle9Qct=bWbiY=Bw3WKw6JSs3INDTkxHAWxweW0NvLj9QcOW0EtRAEq1nza/zWKw0W0p1Wxv8kxHAWYNYEtEYIBFQctM0WaFgkSezWKwDExFDWbH8kxHAWYNYEtEYIBFQcOFP=mFgka/zWKw0W0p1Wxv8kxHAWYNYEtEYIBFQcOJ/EqFgkSezWKwDExFDWbH8kxHAWYNYEtEYIBFQcOu/WmFgka/zWKw0W0p1Wxv8kxHAWYNYEtEYIBFQcO=1EqFgkSezWKwDExFDWbH8kxHAWYNYEtEYIBFQcO=mJmFgka/zWKw0W0p1Wxv8kxHAWYNYEtEYIBFQcOwQWmFgkSezWKwDExFDWbH8kxHAWYNYEtEYIBFQcON1JmFgka/zWKw0W0p1Wxv8kxHAWYNYEtEYIBFQcOMDWaFgkSezWKwDExFDWbH8kxHAWYNYEtEYIBFQcts6WqFgka/zWKw0W0p1Wxv8kxHAWYNYEtEYIBFQctj1JmFgkSezWKwDExFDWbH8kxHAWYNYEtEYIBFQctR6=BFgka/zWKw0W0p1Wxv8kxHAWYNYEtEYIBFQctuQiqU57N9QcOuPExuqWjhzWKwq=lJDJ0JTixHAWYimiqU5Lj9QcOJx=tuxXjhzWKwq=lJDJ0JTixHAXOseiqU57l=e8YEDol2CIj9QcO1xWb=YWq/zWKweWYNv=OwgcP=vFmHzWKw/EONUEbs2kxHAWYNYEtEYXPiU5KNq8mHzWKwDExFDWbH8kxHAWSue=SJ/IBFQctNU=BFgkavzWKw6WxR0=bWVkxHAESiUJluAISh2Lj9QcOJx=tuxXjhzWKwq=lJDJ0JTixHAJbv1iqU57N9QcOuPExuqWjhzWKwq=lJDJ0JTixHAJSwqiqU5Lj9QcOJx=tuxXjhzWKwq=lJDJ0JTixHAEbRAiqU57N9QcOuPExuqWjhzWKwq=lJDJ0JTixHAW0iUiqU5Lj9QcOJx=tuxXjhzWKwq=lJDJ0JTixHAXSFDiqU57l=e8YEDol2CIj9QcOM/JxMAWq/zWKw/JYuq=bGgcP=vFmHzWKwxElW0XSu2kxHAWYNYEtEYXPiU5KNq8mHzWKwDExFDWbH8kxHAWxNbEb1DIBFQctJQEaFgkavzWKweWlWeXOWVkxHAWli1WYJQISh2Lj9QcOJx=tuxXjhzWKwq=lJDJ0JTixHAEl=1iqU57N9QcOuPExuqWjhzWKwq=lJDJ0JTixHAXSWDiqU5Lj9QcOJx=tuxXjhzWKwq=lJDJ0JTixHAWbpviqU57N9QcOuPExuqWjhzWKwq=lJDJ0JTixHAJSu/iqU5Lj9QcOJx=tuxXjhzWKwq=lJDJ0JTixHAJxsQiqU57l=e8YEDol2CIj9QctWD=tuPXa/zWKwqESjmWSGgcP=vFmHzWKweWlJDJYJ2kxHAWYNYEtEYXPiU5KNq8mHzWKwDExFDWbH8kxHAESjYEtiYIBFQctNU=BFgkavzWKvbEtp1Ex1VkxHAWbM/JbsQISh2Lj9QcOJx=tuxXjhzWKwq=lJDJ0JTixHAWlMAiqU57N9QcOuPExuqWjhzWKwq=lJDJ0JTixHA=l=UiqU5Lj9QcOJx=tuxXjhzWKwq=lJDJ0JTixHA=bsQiqU57N9QcOuPExuqWjhzWKwq=lJDJ0JTixHAJYEviqU5Lj9QcOJx=tuxXjhzWKwq=lJDJ0JTixHAEljviqU57l=e8YEDol2CIj9QcORDWbR6JmUn5YjqRj9QcOR/J0M/WbezWKwq=lJDJ0JnFYND5kiCRj9QcOuPExuqWjhzWKwqWlEUWSRTixHAWSi1iqU5Ij9QcORDWbR6Jm1nza/zWKw0W0p1Wxv8kxHAWYNYEtEYIBFQcOj1=aFgkSezWKwDExFDWbH8kxHAWYNYEtEYIBFQcOuAXBFgka/zWKw0W0p1Wxv8kxHAWYNYEtEYIBFQcOW0EmFgkSeY5l6b5tU48mvzWKwDEOpm=b1VkxHAWxRAJli1Ikh0JkRwkxHAW0pbWtW07N9QcOiU=bpb=bhq=kpeFYAwkxHAEOFPEORQle9QcOE1JxHbEmw3WKvYWOM3INDTkxHAEOuDJYJ6Lj9QcOWqXtjm=B1nza/zWKw0W0p1Wxv8kxHAWYNYEtEYIBFQctimEmFgkSezWKwDExFDWbH8kxHAWYNYEtEYIBFQcts6XBFgka/zWKw0W0p1Wxv8kxHAWYNYEtEYIBFQctW/=aFgkSezWKwDExFDWbH8kxHAWYNYEtEYIBFQcOF6iqU5Lj9QcOJx=tuxXjhzWKwq=lJDJ0JTixHAJbFPiqU57l=e8YEDol2CIj9QcONU=bJPEq/zWKw/=bF/EOFgcP=vFmHzWKweXtR6J0W2kxHAWYNYEtEYXPiU5KNq8mHzWKwDExFDWbH8kxHAESvmXlEbIBFQctueWqFgkavzWKwe=lJ0ExFVkxHAWlJPWSuPISh2Lj9QcOJx=tuxXjhzWKwq=lJDJ0JTixHAESJQiqU57l=e8YEDol2CIj9QcOuAEYWAWq/zWKweXlsP=SWgcP=vFmHzWKwD=tWPJbw2kxHAWYNYEtEYXPiU5KNq8mHzWKwDExFDWbH8kxHAEtpbE0RAIBFQcOUU=mFgkavzWKwDXO=bXOWVkxHAESUvE0MxISh2XP=vFmHzWKw/JS5bWbG2kxHAEbE1=OWAX0UYIj9QcOuPExuqWjhzWKwq=lJDJ0JTixHA=lN1iqU5Ij9QcOuPExuqWjhzWKwq=lJDJ0JTixHAWYJAiqU5Lj9QcOuPExuqWjhzWKwq=lJDJ0JTixHAWYJAiqU5IaUn=3NCJPpg80AwkxHAWlibEO1eIBUn5YjqRj9QcOEvXlReXOezWKwq=lJDJ0JVkxHAW0uqESEv7N9QcOWDWYi1WehzWKwxJSUmESwTixHAEOM6iqU5XPe2=l/x=khg=mwvkxHAEOFPEORQle9QcOiU=bpb=mw3WKw6JxR3INDTkxHAXtiUJ0sDLj9QcOWxJxM0Wa1gc0UYIj9QcOuPExuqWjhzWKwq=lJDJ0JTixHA=bGeiqU5Ij9QcOuPExuqWjhzWKwq=lJDJ0JTixHA=SuqiqU5Lj9QcOuPExuqWjhzWKwq=lJDJ0JTixHAJxEYiqU5IaUn=3NCJPpg80AwkxHA=SwPE0MeIBUn5YjqRj9QcORAES1eJbezWKwq=lJDJ0JnkxHAWlsPJxRQle9QcORAES1eJmw3WKvU=bF3INDTkxHAESRqXOFQLj9QcOR6W0ReXB1nzkeU8KEUc0UYItp4JPNh=l6Dle9QcOiU=bpb=mw3WKwAEOM3IahzWKwq=lJDJ0JTixHAJYjmiqU5Ij9QcOuPExuqWjhzWKwq=lJDJ0JTixHAJYueiqU5IaUnolJTkxHAEOFPEORQle9QcOiU=bpb=mw3WKw/Xls3INDTkxHAEOFPEORQle9QcOiU=bpb=mw3WKw/E0s3INDVkxHAEOFPEORQle9QcOiU=bpb=mw3WKweE0J3INDgIkhPol618P58kxHAWYNYEtEYIBFQctWAJaFgIq5YieD2RNh5X0/U5BHzWKwxWlWQJbF2=t2b5leU83p8kxHAWYNYEtEYIBFQcts/WBFgIe9QcOiU=bpb=mw3WKw0JYs3INDTkxHAEOFPEORQle9QcOiU=bpb=mw3WKvmEtW3INDgXe9QcOW/JxHmEeV3olu3kSezWKwe=bp1JbsVkxHAWxjbWtRPle9QcOiU=bpb=mw3WKvUEls3IND2kxHAEOFPEORQle9QcOiU=bpb=mw3WKwPEbJ3INDV=t2b5leU83p8kxHAWYNYEtEYIBFQcOwDEaFgIe9QcOiU=bpb=mw3WKvmJlR3INDTkxHAEOFPEORQle9QcOiU=bpb=mw3WKvm=OM3INDgle9QcOiU=bpb=mw3WKwAXBFgkavzWKwxWlWQJbFgX0/U5BHzWKwDE0=U=SM2=t2b5leU83p8kxHAWYNYEtEYIBFQcts/WBFgIe9QcOiU=bpb=mw3WKw0JYs3INDTkxHAEOFPEORQle9QcOiU=bpb=mw3WKvmEtW3INDgXe9QcOuP=YNUENhzWKwq=lJDJ0JTixHA=SNviqU57N9QcOuPExuqWjhzWKwq=lJDJ0JTixHA=SFeiqU5Ltp4JPNh=l6Dle9QcOiU=bpb=mw3WKwAEOM3IahzWKwq=lJDJ0JTixHAJYjmiqU5Ij9QcOuPExuqWjhzWKwq=lJDJ0JTixHAESR/iqU5INhzWKwq=lJDJ0JTixHAXOw3INDTkxHAEO5Y=lMeIShV=kuwkxHAEtMxJx=m7lp4JPNh=l6Dle9QcOiU=bpb=mw3WKvvWSG3IahzWKwq=lJDJ0JTixHAEYiviqU5Ij9QcOuPExuqWjhzWKwq=lJDJ0JTixHAJbpbiqU5IShzWKwD=SEbEYi8kxHAWYNYEtEYIBFQctMeJaFgkSezWKwDExFDWbH8kxHAWYNYEtEYIBFQcOMQ=mFgka/180Ee8lNC5jhzWKwq=lJDJ0JTixHAXOueiq1dkxHAWYNYEtEYIBFQctivJmFgkavzWKwDExFDWbH8kxHAWYNYEtEYIBFQcOsQWmFgkaU8kxHAWYNYEtEYIBFQcOwAiqU5Ij9QcOpUW0W0Jm1V=t2b5leU83p8kxHAWYNYEtEYIBFQcOwDEaFgIe9QcOiU=bpb=mw3WKvmJlR3INDTkxHAEOFPEORQle9QcOiU=bpb=mw3WKvm=OM3INDgle9QcOiU=bpb=mw3WKw/=b13INe8kxHAWYNYEtEYIBFQcOjUJqFgkSezWKwDExFDWbH8kxHAWYNYEtEYIBFQctR6=BFgka/180Ee8lNC5jhzWKwq=lJDJ0JTixHAXOueiq1dkxHAWYNYEtEYIBFQctivJmFgkavzWKwDExFDWbH8kxHAWYNYEtEYIBFQcOMqWaFgkaU8kxHAWYNYEtEYIBFQcOjYXaFgkNhzWKwq=lJDJ0JTixHAWlNbiqU57N9QcOuPExuqWjhzWKwq=lJDJ0JTixHAJbU1iqU5Ltp4JPNh=l6Dle9QcOiU=bpb=mw3WKwAEOM3IahzWKwq=lJDJ0JTixHAJYjmiqU5Ij9QcOuPExuqWjhzWKwq=lJDJ0JTixHAWSGqiqU5INhzWKwq=lJDJ0JTixHAWlJ6iqU5le9QcOiU=bpb=mw3WKw/=lW3IND2kxHAEOFPEORQle9QcOiU=bpb=mw3WKvmXlu3INDVkxHAEOFPEORQle9QcOiU=bpb=mw3WKw/=bu3INDTkxHAEOG6EbN1Ia/zWKwDExFDWbH8kxHAWYNYEtEYIBFQcOMxJaFgkavzWKvvXOGeWYRVkxHAWbu6W0seLj9QcOWxJxM0Wa1VkxHAWbu6W0sele9QcOiU=bpb=mw3WKwx=tM3IahzWKwq=lJDJ0JTixHAJlJ3INDTkxHAEOFPEORQle9QcOiU=bpb=mw3WKw0=bM3INDV=3NCJPpg80ATIkh0JkRwkxHAWYEU=tJ67N9QcOiU=bpb=bhg=mvzWKw/JS5bWbH8kxHAWYEU=tJ6IBFQcOMPJmFgkavzWKw/JS5bWbH8kxHAWYEU=tJ6IBFQcOuQJmFgka/zWKw/JS5bWbH8kxHAWYEU=tJ6IBFQcOuQJmFgka1gkxHAWlsPJxRQle9QcOib=lpYXaw3WKvU=bF3INDTkxHAWbimJSRqLjhzWKw/JS5bWbH8kxHAWYEU=tJ6IBFQctN1iqU5Lj9QcOjvE0WqWjhzWKwqJ0N1=b1TixHAExFAiqU5Lj9QcOjvE0WqWjhzWKwqJ0N1=b1TixHAEtjmiqU5ka1n=l/x=khY5l6b5tU48mHzWKweWx1PWSWTIkh0JkRwkxHAWS5bXSMA7N9QcOib=lpYXShb806x5BHzWKwP=tJPWYu2kxHAWYEmJxJ/le9QcOsPJx1eXBw3WKvUEtR3IaV3=a55IB1VkxHAWbEm=lJA7N9QcONUEO16ENhzWKw/E0W6ESwTixHAEbs3INDTkxHAWYR6Jx1q7S6zWKwqJbUbXSi8kxHAWS5bXSMAIBFQctMDJmFgIq5UieDTIa1VkxHAW0EvEluA7N9QcOj1WbiUXjhzWKw/E0W6ESwTixHAEbs3INDTkxHAWlJeEbJQ7S6zWKw/=bM0EbH8kxHAWS5bXSMAIBFQctMDJmFgIq5UieDTIa1nolJTkxHAW0EvEluAle9QcOsPJx1eXBw3WKvvJSJ3INDTkxHAWbReWtsP7S6zWKwP=tJPWYp8kxHAWS5bXSMAIBFQcOivWBFgkavzWKwqWbMQJSFgIaUq=kpeFYAvleDnFYND5kiCRj9QcORxJYNYXjhzWKw/E0W6ESwTixHAJls0iqU5Ij9QcOsQEbWP=ODZkxHAE0pYExi1le9QcOsPJx1eXBw3WKwqJSG3INDTkxHAWSG0Wx51Ia1nzke2LBj8ka1nzlNVF0Nn=3NCJPpg80AwkxHAWxMPEYM/IBUn5YjqRj9QcOjY=lJ6XSezWKwq=lJDJ0JnkxHAWlsPJxRQle9QcOjY=lJ6Xaw3WKvUW0M3INDTkxHAEli1Eb=ULj9QcOMxXSFD=B1nzke2=l/x=khg=mv180Ee8lNC5jhzWKwq=lJDJ0JTixHAXOueiq1dkxHAWYNYEtEYIBFQctivJmFgkavzWKwDExFDWbH8kxHAWYNYEtEYIBFQctuQJmFgka1gc0UYIj9QcOuPExuqWjhzWKwq=lJDJ0JTixHAWls0iqU5Ij9QcOuPExuqWjhzWKwq=lJDJ0JTixHA=bNYiqU5Lj9QcOuPExuqWjhzWKwq=lJDJ0JTixHA=Yj1iqU5IaUn=3NCJPpg80AwkxHAESwQXtWqIBUn5YjqRj9QcOWDEOGPWOezWKwq=lJDJ0JnkxHAWlsPJxRQle9QcOWDEOGPWBw3WKw6JlJ3INDTkxHAXO16EYNYLjhzWKw/JS5bWbH8kxHAWxuDWOFQIBFQcOueWqFgkNDgXPe2=l/x=khPol618P58kxHAWYNYEtEYIBFQctWAJaFgIq5YieD2RNh5X0/U5BHzWKwqEbJDEOJ2=t2b5leU83p8kxHAWYNYEtEYIBFQcts/WBFgIe9QcOiU=bpb=mw3WKw0JYs3INDTkxHAEOFPEORQle9QcOiU=bpb=mw3WKvmEtW3INDgXe9QcOR0EbuDEUV3olu3kSezWKwe=bp1JbsVkxHAWbJ0EOu0le9QcOiU=bpb=mw3WKw/=b13INe8kxHAWYNYEtEYIBFQcOjUJqFgkSezWKwDExFDWbH8kxHAWYNYEtEYIBFQcOUUEaFgka/zWKwqEbJDEO=8kxHAWYNYEtEYIBFQcOMDJaFgkSezWKwDExFDWbH8kxHAWYNYEtEYIBFQctp1JqFgka/zWKwqEbJDEO=8kxHAWYNYEtEYIBFQctMeJaFgkSezWKwDExFDWbH8kxHAWYNYEtEYIBFQcOsAJqFgka/180Ee8lNC5jhzWKwq=lJDJ0JTixHAXOueiq1dkxHAWYNYEtEYIBFQctivJmFgkavzWKwDExFDWbH8kxHAWYNYEtEYIBFQctuQJmFgkaU8kxHAWYNYEtEYIBFQcOwAiqU5Ij9QcOR0EbuDEm1n8tNDRj9QcOu/WOpUWxe180Ee8lNC5jhzWKwq=lJDJ0JTixHAJSsQiq1dkxHAWYNYEtEYIBFQcO=mJaFgkavzWKwDExFDWbH8kxHAWYNYEtEYIBFQctRDJqFgka1nkxHAEOsQEtMxle9QcOiU=bpb=mw3WKvUEls3IND2kxHAEOFPEORQle9QcOiU=bpb=mw3WKvUExM3INDV=t2b5leU83p8kxHAWYNYEtEYIBFQcOwDEaFgIe9QcOiU=bpb=mw3WKvmJlR3INDTkxHAEOFPEORQle9QcOiU=bpb=mw3WKweEbu3INDgle9QcOiU=bpb=mw3WKwAXBFgkavzWKwDWSGD=SWgX0/U5BHzWKwq=lseJbF2=t2b5leU83p8kxHAWYNYEtEYIBFQcts/WBFgIe9QcOiU=bpb=mw3WKw0JYs3INDTkxHAEOFPEORQle9QcOiU=bpb=mw3WKvmEtW3INDgXe9QcOiUJSNmEehzWKwq=lJDJ0JTixHA=SNviqU57N9QcOuPExuqWjhzWKwq=lJDJ0JTixHAESHYiqU5Ltp4JPNh=l6Dle9QcOiU=bpb=mw3WKwAEOM3IahzWKwq=lJDJ0JTixHAJYjmiqU5Ij9QcOuPExuqWjhzWKwq=lJDJ0JTixHAWb5miqU5INhzWKwq=lJDJ0JTixHAXOw3INDTkxHAWYNvElRPIa/180Ee8lNC5jhzWKwq=lJDJ0JTixHAXOueiq1dkxHAWYNYEtEYIBFQctivJmFgkavzWKwDExFDWbH8kxHAWYNYEtEYIBFQctuQJmFgkaU8kxHAWYNYEtEYIBFQcOjYXaFgkNhzWKwq=lJDJ0JTixHAWlNbiqU57N9QcOuPExuqWjhzWKwq=lJDJ0JTixHAJbU1iqU5Ltp4JPNh=l6Dle9QcOiU=bpb=mw3WKwAEOM3IahzWKwq=lJDJ0JTixHAJYjmiqU5Ij9QcOuPExuqWjhzWKwq=lJDJ0JTixHAESJDiqU5INhzWKwq=lJDJ0JTixHAWlJ6iqU5le9QcOiU=bpb=mw3WKw/=lW3IND2kxHAEOFPEORQle9QcOiU=bpb=mw3WKvmXlu3INDV=t2b5leU83p8kxHAWYNYEtEYIBFQcOwDEaFgIe9QcOiU=bpb=mw3WKvmJlR3INDTkxHAEOFPEORQle9QcOiU=bpb=mw3WKwqE0R3INDgle9QcOiU=bpb=mw3WKw/=b13INe8kxHAWYNYEtEYIBFQcOjUJqFgkSezWKwDExFDWbH8kxHAWYNYEtEYIBFQctR6=BFgka/zWKwDExFDWbH8kxHAWYNYEtEYIBFQcOjYEBFgkavzWKwDWO10ElugLj9QcOuPExuqWjhzWKwq=lJDJ0JTixHAESEviqU5Ij9QctsAWOMqJm/zWKwqEO1xJSMVkxHAWxEbESJ/Ia/zWKwqEO1xJSN8kxHAWYNYEtEYIBFQcOE1=aFgIe9QcOiU=bpb=mw3WKvv=mFgkavzWKwDExFDWbH8kxHAWYNYEtEYIBFQcO=YEaFgka/Y5l6b5tU48mwgcP=vFmHzWKwDEtsDWOu2kxHAWYNYEtEYX0UYIj9QcOjvE0WqWjhzWKwDEtsDWOuTixHAElRDiqU5Ij9QcOjvE0WqWjhzWKwDEtsDWOuTixHAEbweiqU5Lj9QcOjvE0WqWjhzWKwDEtsDWOuTixHAEbweiqU5IaUn=3NCJPpg80AwkxHAWSW6WYNvIBUn5YjqRj9QcOpYWb5vWOezWKwDEtsDWOunkxHAEOMPWSWDle9QcOpYWb5vWBw3WKw6XSJ3IND2RNh5Lj9QcOR/=lMxWehzWKwD=bRPJSGTixHAWlJ6iqU5le9QcOpYWb5vWBw3WKw6XtJ3IND2kxHAWlsPJxRQle9QcOpYWb5vWBw3WKwq=tR3INDnzkeU8KEURj9QcOjvE0WqWjhzWKwDEtsDWOuTixHAXljYiqU5Ij9QcORqJYsqWm/8kxHAWlsPJxRQle9QcOuDJSuQEBw3WKvU=BFgka/zWKw/JS5bWbH8kxHAEOpvEOGDIBFQcOFPXBFgka/zWKw/JS5bWbH8kxHAEOpvEOGDIBFQcOpvJmFgkNDgXPDVRNh5ISh2zlNVF0NnolJT=t2b5leU83p8kxHAWYNYEtEYIBFQcOwDEaFgIe9QcOiU=bpb=mw3WKvmJlR3INDTkxHAEOFPEORQle9QcOiU=bpb=mw3WKvb=lu3INDgIkhg=mvzWKwDExFDWbH8kxHAWYNYEtEYIBFQcOjvEmFgkavzWKwDExFDWbH8kxHAWYNYEtEYIBFQctu6EmFgka/zWKwDExFDWbH8kxHAWYNYEtEYIBFQctNY=BFgka1gc0=e8YEDol2CRj9QcOWA=tWx=awgcP=vFmHzWKwxE0WAJls2kxHAWYNYEtEYXPpTokE8kxHAWx5bXtjvIBFQcOueXaFgkSezWKwxWS1eJSRnzkeU8KEUcP5g8Yp45ehzWKwq=lJDJ0JTixHAJxvviq1di0J3kSDvleDn8tNDRj9QcOsxXSFeXOe180Ee8lNC5jhzWKwq=lJDJ0JTixHAJSsQiq1dkxHAWYNYEtEYIBFQcO=mJaFgkavzWKwDExFDWbH8kxHAWYNYEtEYIBFQctRDJqFgka1nkxHAWSW6ExMAlq5g=B557N9QcONYEtpmWa/zWKw/Wx1PESv8kxHAWYNYEtEYIBFQctMeJaFgkSezWKwDExFDWbH8kxHAWYNYEtEYIBFQcOUYWaFgka/180Ee8lNC5jhzWKwq=lJDJ0JTixHAXOueiq1dkxHAWYNYEtEYIBFQctivJmFgkavzWKwDExFDWbH8kxHAWYNYEtEYIBFQctEU=BFgkaU8kxHAWYNYEtEYIBFQcOwAiqU5Ij9QcOsxXSFeXB1n8tNDRj9QcOM/ExHUExe180Ee8lNC5jhzWKwq=lJDJ0JTixHAJSsQiq1dkxHAWYNYEtEYIBFQcO=mJaFgkavzWKwDExFDWbH8kxHAWYNYEtEYIBFQctRDJqFgka1nkxHAESsPWtMPle9QcOiU=bpb=mw3WKvUEls3IND2kxHAEOFPEORQle9QcOiU=bpb=mw3WKvY=bG3INDV=t2b5leU83p8kxHAWYNYEtEYIBFQcOwDEaFgIe9QcOiU=bpb=mw3WKvmJlR3INDTkxHAEOFPEORQle9QcOiU=bpb=mw3WKvU=lM3INDgle9QcOiU=bpb=mw3WKwAXBFgkavzWKweWSFQ=SFgX0/U5BHzWKwDEbj1XSJ2=t2b5leU83p8kxHAWYNYEtEYIBFQcts/WBFgIe9QcOiU=bpb=mw3WKw0JYs3INDTkxHAEOFPEORQle9QcOiU=bpb=mw3WKvmEtW3INDgXe9QcOu0Wlu6EUhzWKwq=lJDJ0JTixHA=SNviqU57N9QcOuPExuqWjhzWKwq=lJDJ0JTixHAEtuPiqU5Ltp4JPNh=l6Dle9QcOiU=bpb=mw3WKwAEOM3IahzWKwq=lJDJ0JTixHAJYjmiqU5Ij9QcOuPExuqWjhzWKwq=lJDJ0JTixHAEljmiqU5INhzWKwq=lJDJ0JTixHAXOw3INDTkxHAEOJ/=O10Ia/180Ee8lNC5jhzWKwq=lJDJ0JTixHAXOueiq1dkxHAWYNYEtEYIBFQctivJmFgkavzWKwDExFDWbH8kxHAWYNYEtEYIBFQctEU=BFgkaU8kxHAWYNYEtEYIBFQcOjYXaFgkNhzWKwq=lJDJ0JTixHAWlNbiqU57N9QcOuPExuqWjhzWKwq=lJDJ0JTixHAJbU1iqU5Ltp4JPNh=l6Dle9QcOiU=bpb=mw3WKwAEOM3IahzWKwq=lJDJ0JTixHAJYjmiqU5Ij9QcOuPExuqWjhzWKwq=lJDJ0JTixHA=lNUiqU5INhzWKwq=lJDJ0JTixHAWlJ6iqU5le9QcOiU=bpb=mw3WKw/=lW3IND2kxHAEOFPEORQle9QcOiU=bpb=mw3WKvmXlu3INDV=t2b5leU83p8kxHAWYNYEtEYIBFQcOwDEaFgIe9QcOiU=bpb=mw3WKvmJlR3INDTkxHAEOFPEORQle9QcOiU=bpb=mw3WKweJlR3INDgle9QcOiU=bpb=mw3WKw/=b13INe8kxHAWYNYEtEYIBFQcOjUJqFgkSezWKwDExFDWbH8kxHAWYNYEtEYIBFQctR6=BFgka/zWKwDExFDWbH8kxHAWYNYEtEYIBFQcOjYEBFgkavzWKwDWO10ElugLj9QcOuPExuqWjhzWKwq=lJDJ0JTixHA=bRPiqU5Ij9QctsAWOMqJm/zWKwqEO1xJSMVkxHAWxEbESJ/Ia/zWKwqEO1xJSN8kxHAWYNYEtEYIBFQcOE1=aFgIe9QcOiU=bpb=mw3WKvv=mFgkavzWKwDExFDWbH8kxHAWYNYEtEYIBFQcO=YEaFgka/Y5l6b5tU48mwgcP=vFmHzWKwxElsqJx12kxHAWYNYEtEYX0UYIj9QcOjvE0WqWjhzWKwxElsqJx1TixHAElRDiqU5Ij9QcOjvE0WqWjhzWKwxElsqJx1TixHA=bpmiqU5Lj9QcOjvE0WqWjhzWKwxElsqJx1TixHAJYReiqU5IaUzWKw/JS5bWbH8kxHAWxNvWYW6IBFQcOUv=mFgkavzWKwqWYivWbRVle9QcOjvE0WqWjhzWKwxElsqJx1TixHAWx1qiqU5Lj9QcOjvE0WqWjhzWKwxElsqJx1TixHAEOsQiqU5Lj9QcOjvE0WqWjhzWKwxElsqJx1TixHAE0M0iqU5ka1n=l/x=khY5l6b5tU48mHzWKwDElJqWSRTIkhzWKwDEbwDW0J2kxHAESsPW0R0lxHAWjDnzke2LBj8ka1nzkeU8KEUc0UYItp4JPNh=l6Dle9QcOiU=bpb=mw3WKwAEOM3IahzWKwq=lJDJ0JTixHAJYjmiqU5Ij9QcOuPExuqWjhzWKwq=lJDJ0JTixHA=Yu6iqU5Ik/9=t2b5leU83p8kxHAWYNYEtEYIBFQcOwDEaFgIe9QcOiU=bpb=mw3WKvmJlR3INDTkxHAEOFPEORQle9QcOiU=bpb=mw3WKvUJbJ3INDgIkhg=mvzWKwDExFDWbH8kxHAWYNYEtEYIBFQctjYWqFgkavzWKwDExFDWbH8kxHAWYNYEtEYIBFQcOwPWqFgka/zWKwDExFDWbH8kxHAWYNYEtEYIBFQcOwPWqFgka1gc0UYItp4JPNh=l6Dle9QcOiU=bpb=mw3WKwAEOM3IahzWKwq=lJDJ0JTixHAJYjmiqU5Ij9QcOuPExuqWjhzWKwq=lJDJ0JTixHA=YEbiqU5IaUnolJTkxHAEOFPEORQle9QcOiU=bpb=mw3WKvv=bW3INDTkxHAEOFPEORQle9QcOiU=bpb=mw3WKvm=ls3INDVkxHAEOFPEORQle9QcOiU=bpb=mw3WKvm=ls3INDgIkhPol618P58kxHAWYNYEtEYIBFQctWAJaFgIq5YieD2RNh5X0/U5BHzWKwe=SHUEYM2=t2b5leU83p8kxHAWYNYEtEYIBFQcts/WBFgIe9QcOiU=bpb=mw3WKw0JYs3INDTkxHAEOFPEORQle9QcOiU=bpb=mw3WKvmEtW3INDgXe9QcONUWtM0=NV3olu3kSezWKwe=bp1JbsVkxHAElMQ=S=Ule9QcOiU=bpb=mw3WKw/=b13INe8kxHAWYNYEtEYIBFQcOM/JaFgkSezWKwDExFDWbH8kxHAWYNYEtEYIBFQcOi1=BFgka/zWKwe=SHUEYN8kxHAWYNYEtEYIBFQcOjYXaFgkNhzWKwq=lJDJ0JTixHAEO10iqU57N9QcOuPExuqWjhzWKwq=lJDJ0JTixHAWbG3INDVkxHAElMQ=S=Ule9QcOiU=bpb=mw3WKvUEls3IND2kxHAEOFPEORQle9QcOiU=bpb=mw3WKwqW0R3INDV=t2b5leU83p8kxHAWYNYEtEYIBFQcOwDEaFgIe9QcOiU=bpb=mw3WKvmJlR3INDTkxHAEOFPEORQle9QcOiU=bpb=mw3WKvbXOG3INDgle9QcOiU=bpb=mw3WKwAXBFgkavzWKwe=SHUEYMgX0/U5BHzWKwD=SuDWxw2=t2b5leU83p8kxHAWYNYEtEYIBFQcts/WBFgIe9QcOiU=bpb=mw3WKw0JYs3INDTkxHAEOFPEORQle9QcOiU=bpb=mw3WKvmEtW3INDgXe9QcOpUEOuxXjhzWKwq=lJDJ0JTixHAWlJ6iqU5le9QcOiU=bpb=mw3WKweWls3IND2kxHAEOFPEORQle9QcOiU=bpb=mw3WKwq=tu3INDVkxHAEtMDEOWAle9QcOiU=bpb=mw3WKw/=b13INe8kxHAWYNYEtEYIBFQcOu6EmFgkSezWKwDExFDWbH8kxHAWYNYEtEYIBFQcORQiqU5Lj9QcOpUEOuxXjhzWKwq=lJDJ0JTixHA=SNviqU57N9QcOuPExuqWjhzWKwq=lJDJ0JTixHAWbvYiqU5Ltp4JPNh=l6Dle9QcOiU=bpb=mw3WKwAEOM3IahzWKwq=lJDJ0JTixHAJYjmiqU5Ij9QcOuPExuqWjhzWKwq=lJDJ0JTixHA=YEbiqU5INhzWKwq=lJDJ0JTixHAXOw3INDTkxHAEtMDEOWAIShV=kuwkxHAW0j1WSvY7lp4JPNh=l6Dle9QcOiU=bpb=mw3WKvvWSG3IahzWKwq=lJDJ0JTixHAEYiviqU5Ij9QcOuPExuqWjhzWKwq=lJDJ0JTixHAJbpbiqU5IShzWKwxJlu/Xt=8kxHAWYNYEtEYIBFQcOjYXaFgkNhzWKwq=lJDJ0JTixHAESjviqU57N9QcOuPExuqWjhzWKwq=lJDJ0JTixHAWYp1iqU5Lj9QcOEv=OsA=UhzWKwq=lJDJ0JTixHAWlJ6iqU5le9QcOiU=bpb=mw3WKwDXSJ3IND2kxHAEOFPEORQle9QcOiU=bpb=mw3WKwqWBFgka/zWKwxJlu/Xt=8kxHAWYNYEtEYIBFQctMeJaFgkSezWKwDExFDWbH8kxHAWYNYEtEYIBFQctuDJqFgka/180Ee8lNC5jhzWKwq=lJDJ0JTixHAXOueiq1dkxHAWYNYEtEYIBFQctivJmFgkavzWKwDExFDWbH8kxHAWYNYEtEYIBFQcORxWqFgkaU8kxHAWYNYEtEYIBFQcOwAiqU5Ij9QcOEv=OsA=m1V=t2b5leU83p8kxHAWYNYEtEYIBFQcOwDEaFgIe9QcOiU=bpb=mw3WKvmJlR3INDTkxHAEOFPEORQle9QcOiU=bpb=mw3WKvbXOG3INDgle9QcOiU=bpb=mw3WKw/=b13INe8kxHAWYNYEtEYIBFQcOjUJqFgkSezWKwDExFDWbH8kxHAWYNYEtEYIBFQctR6=BFgka/180Ee8lNC5jhzWKwq=lJDJ0JTixHAXOueiq1dkxHAWYNYEtEYIBFQctivJmFgkavzWKwDExFDWbH8kxHAWYNYEtEYIBFQct=bJqFgkaU8kxHAWYNYEtEYIBFQcOjYXaFgkNhzWKwq=lJDJ0JTixHAWlNbiqU57N9QcOuPExuqWjhzWKwq=lJDJ0JTixHAJbU1iqU5Ltp4JPNh=l6Dle9QcOiU=bpb=mw3WKwAEOM3IahzWKwq=lJDJ0JTixHAJYjmiqU5Ij9QcOuPExuqWjhzWKwq=lJDJ0JTixHAWbWxiqU5INhzWKwq=lJDJ0JTixHAWlJ6iqU5le9QcOiU=bpb=mw3WKw/=lW3IND2kxHAEOFPEORQle9QcOiU=bpb=mw3WKvmXlu3INDVkxHAEOFPEORQle9QcOiU=bpb=mw3WKwD=Su3INDTkxHAEOG6EbN1Ia/zWKwDExFDWbH8kxHAWYNYEtEYIBFQctJAEmFgkavzWKvvXOGeWYRVkxHAWbu6W0seLj9QcOWxJxM0Wa1VkxHAWbu6W0sele9QcOiU=bpb=mw3WKwx=tM3IahzWKwq=lJDJ0JTixHAJlJ3INDTkxHAEOFPEORQle9QcOiU=bpb=mw3WKw0=bM3INDV=3NCJPpg80ATIkh0JkRwkxHAW0pYJYpv7N9QcOiU=bpb=m/zWKwxXO1eWtu2cPDnkxHAWxw6ESH1le9QcOE1=Yi1Jaw3WKvvWxR3IND2=3NCJPpg80ATkxHAJ0s/J0uQLj9QcOMQWxwAEBUn5YjqRj9QcOWAEOJQ=SezWKwx=t=m=tsnFYND5kiCRj9QcOjvE0WqWjhzWKwxXOu0WtMTixHA=YJqiqU5Ij9QctEvWlE1WB/zWKweWOWAXOugXPDVkxHAWxw6ESH1le9QcOE1=Yi1Jaw3WKvvWOW3IND2kxHAWlsPJxRQle9QcOE1=Yi1Jaw3WKvU=BFgka/zWKwxXO1eWtp8kxHAW0pYJYpvIBFQcOJQWBFgkSezWKw/JS5bWbH8kxHAW0pYJYpvIBFQcOFPXBFgka/zWKwxXO1eWtp8kxHAW0pYJYpvIBFQcOM0EqFgkSezWKw/JS5bWbH8kxHAW0pYJYpvIBFQcOpvJmFgkSh0JkRwkxHAWl=1WtE17N9QcOWAXSMQ=Ohg=mvzWKw/JS5bWbH8kxHAW0pYJYpvIBFQcOWxWqFgkavzWKw/JS5bWbH8kxHAW0pYJYpvIBFQctJQEqFgka/zWKw/JS5bWbH8kxHAW0pYJYpvIBFQcOW0JqFgka1gkxHAWlsPJxRQle9QcOE1=Yi1Jaw3WKvY=bR3INDTkxHAWbimJSRqLjhzWKw/JS5bWbH8kxHAW0pYJYpvIBFQcOueWqFgka/zWKw/JS5bWbH8kxHAW0pYJYpvIBFQctJDJqFgka/zWKw/JS5bWbH8kxHAW0pYJYpvIBFQcOJDWmFgkNDgX0NVF0Nn=3NCJPpg80AwkxHAXOHbElj1IBUn5YjqRj9QcOEbEO=mJbezWKwx=t=m=tsnkxHAWl=1WtE1le9QcOEbEO=mJmw3WKvvWxR3INDTkxHAEOuDJxuqLjhzWKw/=YuQJ0p8kxHAW0WDEYimIBFQctsQWqFgka/zWKw/=YuQJ0p8kxHAW0WDEYimIBFQcOJQWBFgka/zWKw/=YuQJ0p8kxHAW0WDEYimIBFQcOM0EqFgkNDgXPe2zaQvleDgXPeU8KEUc0=e8YEDol2CRj9QcONm=lpvJmwgcP=vFmHzWKwqElpvWts2kxHAWYNYEtEYXe9QcOjvE0WqWjhzWKwqElpvWtsTixHAExF0iqU5Ij9QcOsPE0JAEq/zWKw/JS5bWbH8kxHAWbN1JSHvIBFQctW/WaFgkavzWKweWSueEOJV5tvgFehzWKwqElpvWtsTixHAEOM6iqU5IaU9zj9QcOjvE0WqWjhzWKwqElpvWtsTixHA=bMeiqU5IKpTokE8kxHAWbN1JSHvIBFQcOueXaFgkaQ3iq1yIj9QcOR6JYjv=UhzWKwqElpvWtsTixHAXS10iqU57aj8ka/zWKwDElsAXSp8kxHAWbN1JSHvIBFQctsDiq1diPExieD2Raj8ka/zWKvb=bJq=bv8kxHAWbN1JSHvIBFQcOjYXaFgkNhzWKwqElpvWtsTixHAXSvYiqU57N9QcOjvE0WqWjhzWKwqElpvWtsTixHAWYpmiqU5ISTTkxHAWbWAJbMQle9QcORe=tsQJaw3WKw6XSJ3IND2Raj8ka/zWKw/Ebw/E0p8kxHAWbN1JSHvIBFQctsDiq1diPExieD2RNh5Lj9QcOsAJSWAEehzWKwqElpvWtsTixHAWlJ6iqU5le9QcORe=tsQJaw3WKw6XtJ3IND2kxHAWlsPJxRQle9QcORe=tsQJaw3WKv1ESs3INDgXPe2zlNVF0NnolJT=t2b5leU83p8kxHAWYNYEtEYIBFQcOwDEaFgIe9QcOiU=bpb=mw3WKvmJlR3INDTkxHAEOFPEORQle9QcOiU=bpb=mw3WKvbXOG3INDgzK/180Ee8lNC5jhzWKwq=lJDJ0JTixHAXOueiq1dkxHAWYNYEtEYIBFQctivJmFgkavzWKwDExFDWbH8kxHAWYNYEtEYIBFQctNmEmFgka1gc0UYIj9QcOuPExuqWjhzWKwq=lJDJ0JTixHAWbMeiqU5Ij9QcOuPExuqWjhzWKwq=lJDJ0JTixHAEYsPiqU5Lj9QcOuPExuqWjhzWKwq=lJDJ0JTixHAEYsPiqU5IaUn=3NCJPpg80AwkxHAWxFDWlu6IBUn5YjqRj9QcOMeWSGqExezWKwq=lJDJ0JnkxHAESWq=Ypv7N9QcONvWbvb=jhzWKweESsQWbFTixHAXOueiq1dkxHAESM/WORPIBFQctivJmFgkavzWKw/JS5bWbH8kxHAESM/WORPIBFQctu3INDgle9QcOMeWSGqEqw3WKwAEOM3IahzWKweESsQWbFTixHA=SjUiqU5Ij9QcOjvE0WqWjhzWKweESsQWbFTixHAJSs0iqU5INVQcOH5XPe2=l/x=khPol618P58kxHAWYNYEtEYIBFQctWAJaFgIq5YieD2RNh5X0/U5BHzWKwxXORPEtJ2=t2b5leU83p8kxHAWYNYEtEYIBFQcts/WBFgIe9QcOiU=bpb=mw3WKw0JYs3INDTkxHAEOFPEORQle9QcOiU=bpb=mw3WKvmEtW3INDgXe9QcOWAWbFD=UV3olu3kSezWKwe=bp1JbsVkxHAWxwqExpYle9QcOiU=bpb=mw3WKvUEls3IND2kxHAEOFPEORQle9QcOiU=bpb=mw3WKw0EOw3INDTkxHAEOFPEORQle9QcOiU=bpb=mw3WKwx=OR3INDTkxHAEOFPEORQle9QcOiU=bpb=mw3WKwAJ0u3INDVkxHAEOFPEORQle9QcOiU=bpb=mw3WKwxXtM3INDgLj9QcOuPExuqWjhzWKwq=lJDJ0JTixHAWxs/iqU5IShg=mv180Ee8lNC5jhzWKwq=lJDJ0JTixHAXOueiq1dkxHAWYNYEtEYIBFQctivJmFgkavzWKwDExFDWbH8kxHAWYNYEtEYIBFQctWAWBFgka1gc0UYIj9QcOuPExuqWjhzWKwq=lJDJ0JTixHAJlJxiqU5Ij9QcOuPExuqWjhzWKwq=lJDJ0JTixHA=YNUiqU5Lj9QcOuPExuqWjhzWKwq=lJDJ0JTixHAWS10iqU5IaUn=3NCJPpg80AwkxHAJSG/=SFAIBUn5YjqRj9QcONmWxweWOezWKwq=lJDJ0JVkxHAW0uA=bJe7N9QcO16WYMq=jhzWKweJbWAESGTixHAJbs6iq1diPR3kavWFUjXpeg8kxHAElRxXOMQIBFQcOF/WaFgka1TINhzWKweJbWAESGTixHAJbs6iq1diPR3kavWFUjXpeg8kxHAElRxXOMQIBFQcOM6JaFgka1nFYND5kiCRN9QcOE1XtJ0ENhzWKweJbWAESGTixHAWlWqiqU5Ij9QcOpUEbuqXB1nzkeU8KEURtp4JPNh=l6Dle9QcOiU=bpb=mw3WKwAEOM3IahzWKwq=lJDJ0JTixHAJYjmiqU5Ij9QcOuPExuqWjhzWKwq=lJDJ0JTixHAJxwQiqU5INhzWKwq=lJDJ0JTixHAXOw3INDTkxHAWxwqExpYIa/180Ee8lNC5jhzWKwq=lJDJ0JTixHAXOueiq1dkxHAWYNYEtEYIBFQctivJmFgkavzWKwDExFDWbH8kxHAWYNYEtEYIBFQctWAWBFgkaU8kxHAWYNYEtEYIBFQcOjYXaFgkNhzWKwq=lJDJ0JTixHAWlNbiqU57N9QcOuPExuqWjhzWKwq=lJDJ0JTixHAJbU1iqU5Lj9QcORDXSEvENhzWKwq=lJDJ0JTixHAW0pUiq1dkxHAWYNYEtEYIBFQctjYiqU5Ij9QcOuPExuqWjhzWKwq=lJDJ0JTixHAEYJeiqU5Lt=e8YEDol2CIBUn5YjqRj9QcOu/XO1/=OezWKwq=lJDJ0JVkxHAJbFDXSjY7kh2Xe9QctRPEO1/=UhzWKwDWSw6WluTixHAJSF6iqU57l=e8YEDol2CIj9QcOiU=O5vXa/zWKweWb1QWSMgcP=vFmHzWKweE0=UXS12kxHAEOsAXSj1XPiU5KNq8mHzWKw/JS5bWbH8kxHAES5Y=S16IBFQctM6JaFgkavzWKwq=luPJS1VkxHAESR6WOseISh2Lj9QctRPEO1/=UhzWKwDWSw6WluTixHAJbuqiqU57l=e8YEDol2CIj9QcONb=OGQ=B/zWKwxWbseWOWVkxHAEOjUE0JxIkh0JkRwkxHAESJAEbRP7N9QcOu/XO1/=Ohq=kpeFYAwkxHAWlsPJxRQle9QcOM0XOJqEqw3WKwAEaFgkavzWKweJ0uQWtuVkxHAWxR/ESGxLj9QcOu/=S5YWq1nzSh0JkRwkxHAESMeJSHv7N9QctRPEO1/=bhg=mvzWKw/JS5bWbH8kxHAEOsAXSj1IBFQct=bEmFgkavzWKw/JS5bWbH8kxHAEOsAXSj1IBFQcOvY=BFgka/zWKw/JS5bWbH8kxHAEOsAXSj1IBFQctR0=mFgka1gkxHAWlsPJxRQle9QcOu/XO1/=Bw3WKvUXls3INDTkxHAWbimJSRqLjhzWKw/JS5bWbH8kxHAEOsAXSj1IBFQcOueWqFgkNDgX0NVF0Nn=3NCJPpg80AwkxHAWljmEtseIBUn5YjqRj9QcOiYES10WOezWKwDWSw6WlunJ02CFPuwkxHAWls6=YMP7N9QcOMA=YsAJehzWKwq=bM6EbGTixHAXtRDiq1dkxHAWYJeXSJQIBFQcOsQEmFgkk/9kxHAEtpv=ls6le9QcOiYES10WBw3WKvUJbM3IahzWKwq=bM6EbGTixHA=bvbiqU5le9QcOiYES10WBw3WKv1WtJ3INDnkxHAWls6=YMPle9QcOiYES10WBw3WKwPExR3INDTIa/zWKw/JSUY=S58kxHAWYJeXSJQIBFQctReEqFgkavzWKvmEbNYEbsgLj9QcOjvXl=UEehzWKwq=bM6EbGTixHAWlJ/iqU5IB1VkxHAESMeJSHvle9QcOiYES10WBw3WKvvEx13INDTkxHAWbUbE0J0Lj9QcOjvXl=UEq1VkxHAESMeJSHvle9QcOiYES10WBw3WKvmEOR3INDTkxHAElEUElpvLj9QcOsDJxMqWB/zWKw/JSUY=SFgXPe2zaQvleDgXPeU8KEUc0UYItp4JPNh=l6Dle9QcOiU=bpb=mw3WKwAEOM3IahzWKwq=lJDJ0JTixHAJYjmiqU5Ij9QcOuPExuqWjhzWKwq=lJDJ0JTixHA=lR0iqU5IaUnolJTkxHAEOFPEORQle9QcOiU=bpb=mw3WKwxXOF3INDTkxHAEOFPEORQle9QcOiU=bpb=mw3WKw/WSF3INDVkxHAEOFPEORQle9QcOiU=bpb=mw3WKw/WSF3INDgIkhY5l6b5tU48mHzWKwqXSuAXOwTIkh0JkRwkxHAWl=YXOEb7N9QcOiU=bpb=bhzWKwqWbwP=b=8kxHAWl=YXOEbIBFQcOE1=aFgIe9QcOjY=bwxJqw3WKvv=mFgkavzWKw6WxMDEbv8kxHAWl=YXOEbIBFQcOF6XBFgka/zWKwxEOsq=tWVRNh5ISh2zlNVF0Mw=t2b5leU83p8kxHAWYNYEtEYIBFQcOwDEaFgIe9QcOiU=bpb=mw3WKvmJlR3INDTkxHAEOFPEORQle9QcOiU=bpb=mw3WKvUJbJ3INDgle9QcOiU=bpb=mw3WKwAXBFgkavzWKwxXORPEtJgLtp4JPNh=l6Dle9QcOiU=bpb=mw3WKwAEOM3IahzWKwq=lJDJ0JTixHAJYjmiqU5Ij9QcOuPExuqWjhzWKwq=lJDJ0JTixHA=lR0iqU5INhzWKwq=lJDJ0JTixHAWlJ6iqU5le9QcOiU=bpb=mw3WKw/=lW3IND2kxHAEOFPEORQle9QcOiU=bpb=mw3WKvmXlu3INDVkxHAWbu6W0sele9QcOiU=bpb=mw3WKwx=tM3IahzWKwq=lJDJ0JTixHAJlJ3INDTkxHAEOFPEORQle9QcOiU=bpb=mw3WKw0=bM3INDV=3NCJPpg80ATIkh0JkRwkxHAEluQEOUb7N9QcOiU=bpb=m/zWKwqE0NbExM2cPDnkxHAWb5UJxFele9QcON1WOu6Jqw3WKwxJxw3IND2=3NCJPpg80ATkxHAEtuA=SNULj9QcOuQXORqEmUn5YjqRj9QctsDW0MxWSezWKwe=OGDXlWnFYND5kiCRj9QcO1xESu0XjhzWKvvEOEUWxsTixHA=tj1iqU5Ij9QcOp1XtMe=a/zWKwDWOwqWbJgXPDn5YjqRj9QcORq=tMqWxezWKwqE0NbExMnolJTkxHAXSWeEOJAle9QcON1WOu6Jqw3WKvUXOu3INDTkxHAXSWeEOJAle9QcON1WOu6Jqw3WKw6WOF3INDVkxHAXSWeEOJAle9QcON1WOu6Jqw3WKwPWOR3INDgIN9QcO1xESu0XjhzWKwe=OGDXlWTixHA=tj1iqU5Ij9QcORqJYsqWm/8kxHAXSWeEOJAle9QcON1WOu6Jqw3WKwPXts3INe5IShU8KEUc0=e8YEDol2CRj9QcOEYWSWPEmwgcP=vFmHzWKwxJb1PWYJ2kxHAEluQEOUbLj9QcO51WSpbExeDotUxle9QcOEmXSFq=mw3WKwDES13INe8kxHAW0R6ExiYIBFQctMqJmFgkaw4ksu4=qQ3iq1nkxHAWbi1=SRxle9QcOEmXSFq=mw3WKwxJxw3INDTkxHAWbivWbGDLKpTokE8kxHAW0R6ExiYIBFQcOueXaFgka1nzke2LBj8ka1nzkezWKwDExFDWbH8kxHAWYNYEtEYIBFQctEm=BFgkavzWKwDWO10ElugLj9QcOuPExuqWjhzWKwq=lJDJ0JTixHAJxiUiqU5Ij9QctsAWOMqJm/zWKwqEO1xJSMVkxHAWxEbESJ/ISh2zke2=l/x=khY5l6b5tU48mHzWKweEO5YWtsTIkh0JkRwkxHAEtNvEOMx7N9QcOiU=bpb=bhzWKw6WxMDEbv8kxHAEtNvEOMxIBFQctpv=BFgkavzWKwDXOWeEbwVle9QcO1xESu0XjhzWKwD=lsDESWTixHAJxGQiqU5Lj9QcO1xESu0XjhzWKwD=lsDESWTixHA=tpmiqU5Lj9QcO1xESu0XjhzWKwD=lsDESWTixHA=OimiqU5ka1nzke2=l/x=khg=mv180Ee8lNC5jhzWKwq=lJDJ0JTixHAXOueiq1dkxHAWYNYEtEYIBFQctivJmFgkavzWKwDExFDWbH8kxHAWYNYEtEYIBFQcOFP=mFgka1gc0UYIj9QcOuPExuqWjhzWKwq=lJDJ0JTixHAJlJxiqU5Ij9QcOuPExuqWjhzWKwq=lJDJ0JTixHAJYMAiqU5Lj9QcOuPExuqWjhzWKwq=lJDJ0JTixHAXSvbiqU5IaUn=3NCJPpg80AwkxHAWYM0Xl=vIBUn5YjqRj9QcOEU=tE1WSezWKwq=lJDJ0JnkxHAWYuqWON1le9QcOEU=tE1Waw3WKwAEOM3IahzWKwx=lpb=OsTixHAJYjmiqU5Ij9QcO1xESu0XjhzWKwx=lpb=OsTixHAExvviqU5INhzWKwx=lpb=OsTixHAXOw3INDTkxHAEOvbXSj1Ia/zWKwDJSGxW0j8kxHAW0N1J0u/IBFQcOwDEaFgIe9QcOEU=tE1Waw3WKvmJlR3INDTkxHAXSWeEOJAle9QcOEU=tE1Waw3WKwPXts3INDgle9QcOEU=tE1Waw3WKw/=b13INe8kxHAW0N1J0u/IBFQcOjUJqFgkSezWKw6WxMDEbv8kxHAW0N1J0u/IBFQctR0EaFgka/zWKw/WYJQ=SU8kxHAW0N1J0u/IBFQcOE1=aFgIe9QcOEU=tE1Waw3WKvv=mFgkavzWKw6WxMDEbv8kxHAW0N1J0u/IBFQctMAWBFgka/Y5l6b5tU48mwgcP=vFmHzWKw/XOFPJxR2kxHAW0N1J0u/Xe9QcOjvE0WqWjhzWKw/XOFPJxRTixHA=tsPiqU5Ij9QcORQWxweEm/8kxHAWlsPJxRQle9QcOsAEx5bWmw3WKv1=SJ3INe5ISh2LBj8ka1nzkeU8KEUcP5g8Yp45ehzWKwq=lJDJ0JTixHAJxvviq1di0J3kSDvleDn8tNDRj9QcORA=lu/XOe180Ee8lNC5jhzWKwq=lJDJ0JTixHAJSsQiq1dkxHAWYNYEtEYIBFQcO=mJaFgkavzWKwDExFDWbH8kxHAWYNYEtEYIBFQctRDJqFgka1nkxHAWbvU=OsAlq5g=B557N9QcOuPExuqWjhzWKwq=lJDJ0JTixHA=SvbiqU5Lj9QcORA=lu/XjhzWKwq=lJDJ0JTixHAWlJ6iqU5le9QcOiU=bpb=mw3WKwDJbW3IND2kxHAEOFPEORQle9QcOiU=bpb=mw3WKwqWOu3INDVkxHAWbvU=OsAle9QcOiU=bpb=mw3WKvUEls3IND2kxHAEOFPEORQle9QcOiU=bpb=mw3WKvmWts3INDV=t2b5leU83p8kxHAWYNYEtEYIBFQcOwDEaFgIe9QcOiU=bpb=mw3WKvmJlR3INDTkxHAEOFPEORQle9QcOiU=bpb=mw3WKwPE0J3INDgle9QcOiU=bpb=mw3WKwAXBFgkavzWKwqXtN1WSwgLj9QcOuPExuqWjhzWKwq=lJDJ0JTixHAJ0i1iqU5Ij9QcOuQXSJe=B1V=t2b5leU83p8kxHAWYNYEtEYIBFQcOwDEaFgIe9QcOiU=bpb=mw3WKvmJlR3INDTkxHAEOFPEORQle9QcOiU=bpb=mw3WKwPE0J3INDgle9QcOiU=bpb=mw3WKw/=b13INe8kxHAWYNYEtEYIBFQcOjUJqFgkSezWKwDExFDWbH8kxHAWYNYEtEYIBFQctR6=BFgka/zWKwDExFDWbH8kxHAWYNYEtEYIBFQctRQXBFgkavzWKvvXOGeWYRVkxHAWbu6W0seLj9QcOWxJxM0Wa1VkxHAWbu6W0sele9QcOiU=bpb=mw3WKwx=tM3IahzWKwq=lJDJ0JTixHAJlJ3INDTkxHAEOFPEORQle9QcOiU=bpb=mw3WKw0=bM3INDV=3NCJPpg80ATIkh0JkRwkxHAESpU=O167N9QcOiU=bpb=bhg=mvzWKw/JS5bWbH8kxHAESpU=O16IBFQct=bEmFgkavzWKw/JS5bWbH8kxHAESpU=O16IBFQcOWPEaFgka/zWKw/JS5bWbH8kxHAESpU=O16IBFQcOWPEaFgka1gc0=e8YEDol2CRj9QcOjmXSs0WawgcP=vFmHzWKwxJx=mExW2kxHAESpU=O16Xe9QcOjvE0WqWjhzWKwxJx=mExWTixHA=tsPiqU5Ij9QcOi1WSG0WB/zWKw/ES1P=tJgXPe2=l/x=aHzWKw/JS5bWbH8kxHAESpU=O16IBFQcONmEmFgkavzWKwqWYivWbRVle9QcOjvE0WqWjhzWKweEtN1XS1TixHA=SJ/iqU5ka1nzaQvleDgXPe2=l/x=khg=mvzWKwDExFDWbH8kxHAWYNYEtEYIBFQcOWAEqFgkavzWKwDExFDWbH8kxHAWYNYEtEYIBFQcORq=BFgka/zWKwDExFDWbH8kxHAWYNYEtEYIBFQcOWAXBFgka1gcP5g8Yp45ehzWKwq=lJDJ0JTixHAJxvviq1di0J3kSDvRNh5X0UYIBjzWKwDExFDWbH8kxHAWYNYEtEYIBFQcOUbWmFgkavzWKwAJYNbJSuV=t2b5leU83ugIkhg=mvzWKwDExFDWbH8kxHAWYNYEtEYIBFQcOMQEqFgkavzWKwDExFDWbH8kxHAWYNYEtEYIBFQcO=vEBFgka/zWKwDExFDWbH8kxHAWYNYEtEYIBFQcOM0=mFgka1gcP=vFmHzWKwx=bRP=Yu2kxHAEOFPEORQle9QcOiU=bpb=mw3WKvm=O13INDnJ02CFPuwkxHAESGeJxMD7lp4JPNh=l6Dle9QcOiU=bpb=mw3WKvvWSG3IahzWKwq=lJDJ0JTixHAEYiviqU5Ij9QcOuPExuqWjhzWKwq=lJDJ0JTixHA=ljYiqU5IShzWKweWONbESp8i0U1ieD2kxHAElJD=tR/Lj9QcOMQElWeEjhzWKwq=lJDJ0JTixHAWlJ6iqU5le9QcOiU=bpb=mw3WKw6E0u3IND2kxHAEOFPEORQle9QcOiU=bpb=mw3WKvUJb13INDVkxHAESGeJxMDle9QcOiU=bpb=mw3WKw/=b13INe8kxHAWYNYEtEYIBFQcOFeEBFgkSezWKwDExFDWbH8kxHAWYNYEtEYIBFQctMeJmFgka/zWKweWONbESp8kxHAWYNYEtEYIBFQcOjYXaFgkNhzWKwq=lJDJ0JTixHAEOF6iqU57N9QcOuPExuqWjhzWKwq=lJDJ0JTixHAJbU1iqU5Lj9QcOMQElWeEjhzWKwq=lJDJ0JTixHAWSu0iqU57l=e8YEDol2CIBUn5YjqRj9QcOMPExJqWbezWKwq=lJDJ0JnolJTkxHAXSWeEOJAle9QcOMPExJqWmw3WKwAJSF3INDTkxHAXSWeEOJAle9QcOMPExJqWmw3WKw6=SW3INDVkxHAXSWeEOJAle9QcOMPExJqWmw3WKw6=SW3INDgIkhb806x5BHzWKwq=YJ/JxR2kxHAESGeJxMDle9QcOMPExJqWmw3WKwAJbu3IahzWKweExF0WbRTixHAWSG0iqU5zK/zWKweWONbESp8kxHAESFPEbRqIBFQctNmEaFgIe9QcOMPExJqWmw3WKvYXtW3INe8kxHAESFPEbRqIBFQctuQ=mFgkShzWKwq=YJ/Jxi8kxHAESFPEbRqIBFQcOFPWmFgkawgLj9QcOiY=bjbWUhzWKweExF0WbRTixHAJbMPiqU5Ij9QcOEYWb5Y=B1VkxHAWY=YWlWqle9QcOMPExJqWmw3WKw/=bs3INDTIa/zWKw6WxMDEbv8kxHAESFPEbRqIBFQctJA=BFgkavzWKweWtR/=OMVkxHAWY=YWlWqIa/zWKw6WxMDEbv8kxHAESFPEbRqIBFQctuAXaFgkavzWKvvXOGeWYRVkxHAWbu6W0seLj9QcOiY=bjbWm1nzlNVF0Nn=3NCJPpg80AwkxHAEO=bWbw0IBUn5YjqRj9QcOMxEbi1WxezWKweExF0WbRVkxHAWbpb=bsx7N9QcOjvE0WqWjhzWKweWxJq=OWTixHAEbsPiqU5le9QcOMxEbi1Wqw3WKwAWxM3INDTiPQ3Ia/zWKweEOvbXlM2WKwQXP5Tol/UIBsvleDgcPEPokpboBvzWKwqEtEYWSE8kxHAESuAJxUUIqh5IkhbJkEUixG3XU9QcOsAXSWqJNhzWKweWxJq=OWTixHAWxJ3IND2Raj8kShb806Dol6e=ShbJkEUixs3XU9QcOp1JSFD=jhzWKweWxJq=OWTixHAEOM6iqU57N9QcOjvE0WqWjhzWKweWxJq=OWTixHAEYuPiqU5X0E483pg83NUX0EvF0M3WmF+kxHAEOEvXOJ/le9QcOMxEbi1Wqw3WKvUWls3IND2RNh5X0E483pg83NUX0EvF0M3WqF+kxHAW0=v=lJQle9QcOMxEbi1Wqw3WKvYJSG3IND2kxHAWlsPJxRQle9QcOMxEbi1Wqw3WKwAWOR3INDnJ02C5tUC5lMnJ0jx=aFDixgzWKw/=tJ0EOU8kxHAESW0WYuxIBFQcOjYXaFgkNhzWKweWxJq=OWTixHAXSvYiqU57N9QcOjvE0WqWjhzWKweWxJq=OWTixHA=OM/iqU5X0E483pg83NUXPemFYNvoxh2zke2X0/U5BHzWKv1=lRqJSu2kxHAWxEbESJ/le9QcOiU=bpb=mw3WKwAEOM3IahzWKwq=lJDJ0JTixHA=SjUiqU5Ij9QcOuPExuqWjhzWKwq=lJDJ0JTixHAJbpbiqU5INVQcOH5Xe9QctpUJbivEjhzWKwq=lJDJ0JTixHAWlJ6iqU5le9QcOiU=bpb=mw3WKw/=lW3IND2kxHAEOFPEORQle9QcOiU=bpb=mw3WKvmXlu3INDnJ02CFPuwkxHAWbim=bu67l6U5qHE5kpv5tU4812mF0Nq5YNqIj9QcOpUWlJA=ODZcP=vFmHzWKwq=t=bW0s2kxHAWYNYEtEYLj9QcO=UXSwxXSenzShzWKw0=S1AWxU8kxHAWYpYJxEvIBFQcOsQWOw3IND2=3NCJPpg80ATkxHAWxwD=bHULj9QcOsDExsPJaUn5YjqRj9QcOpY=tNbWbezWKwq=t=bW0snFYND5kiCRj9QcOjvE0WqWjhzWKwD=YpUJxRTixHAElR0iqU5Ij9QcOWAEtJQ=a/zWKw/EOF/E0sgXPDVkxHAEYM6XOW6le9QcOi1=YWxJaw3WKwPEts3IND2=3NCJPpg80ATkxHAEOMeEYRPIkh0JkRwkxHAWlM6JxUb7N9QcOi1=YWxJShq=kpeFYAwkxHAWlsPJxRQle9QcOjUXlW6Jqw3WKweJls3INDTkxHAEOMeEYRPISh2Lj9QcO=UXSwxXNhzWKwq=t=bW0sTixHAEOpYiqU57l=e8YEDol2CIj9QcOR0=OjUEBUn5YjqRj9QcOuDJSG/ESezWKwq=t=bW0snFYND5kiCRj9QcOjvE0WqWjhzWKwDEtsQWSMTixHAEljviqU5Ij9QcOR0=OjUEB1nza/zWKw0=S1AWxU8kxHAWYpYJxEvIBFQcOE1EBFgkSezWKw/JS5bWbH8kxHAWYpYJxEvIBFQcOj1=aFgkSh0JkRwkxHAWYE1=OsD7N9QcO=UXSwxXShg=mvzWKw/JS5bWbH8kxHAWYpYJxEvIBFQcOW0EmFgkavzWKw/JS5bWbH8kxHAWYpYJxEvIBFQctimEmFgka/zWKw/JS5bWbH8kxHAWYpYJxEvIBFQctW/=aFgka1gc0=e8YEDol2CRj9QcOWeEbp1=BwgcP=vFmHzWKwxEtjb=lM2kxHAWYpYJxEvXe9QcOimWSjYENhzWKwxEtjb=lMTixHAW0pUiq1dkxHAWxpvJ0NUIBFQctjYiqU5Ij9QcOib=tu/EjhzWKwxEtjb=lMTixHAW0uDiqU5LBwg7S6n5YjqRj9QcOMx=lpvWxezWKwxEtjb=lMnJ02CFPuwc0Uh8lN1oljD=MET=lEdXU9QcOMD=SR0=m/g8YUDp0/4JYjVS0ix=ki0=kR+kxHAWxMQ=bwDzSezWKwqJ0p1WSp8kxHAESEU=tsxIBFQcOsQWOw3INDTkxHAESu6WxwPLj9QcOpYESvYEB1nkxHAWYE1=OsDle9QcOMx=lpvWqw3WKwPEts3INDTkxHAESpUWb=YIa/zWKwqJ0p1WSp8kxHAESEU=tsxIBFQcOuD=mFgkavzWKwxESHYXOugXPDgXPe2=l/x=aHzWKwD=SjYXtp8kxHAWYpYJxEvIBFQcOJ0WBFgkavzWKwxJSjU=lu273h0JkRwkxHAWYNv=tWP7N9QcOi1=YWxJa/zWKwqWS5bWlW2cPDnkxHAWbsPJxjble9QcOiUJlpbEqw3WKvmEBFgkSezWKw/JS5bWbH8kxHAWYNv=tWPIBFQcOMDWaFgka/zWKwqWS5bWlE8kxHAWYNv=tWPIBFQcOw6EqFgkSezWKw/JS5bWbH8kxHAWYNv=tWPIBFQctj1JmFgka/zWKwqWS5bWlE8kxHAWYNv=tWPIBFQct=vXaFgkSeY5l6b5tU48mvzWKwDJYWDXtMVkxHAEtpvW0M0Ikh0JkRwkxHAWlJQWlR/7N9QcOiUJlpbExhq=kpeFYAwkxHAWlsPJxRQle9QcOjYWOjmWaw3WKvYJxJ3INDTkxHAEtibEOvULj9QcOp1JSEUEm1nza/zWKwqWS5bWlE8kxHAWYNv=tWPIBFQcOF/=BFgkSezWKw/JS5bWbH8kxHAWYNv=tWPIBFQctuQiqU5XP=vFmHzWKwDWlMAWtJ2kxHAWbsPJxjbX0UYIj9QcOjvE0WqWjhzWKwq=lj1JxFTixHAXOseiqU5Ij9QcOjvE0WqWjhzWKwq=lj1JxFTixHAJbv1iqU5Lj9QcOjvE0WqWjhzWKwq=lj1JxFTixHAEbRAiqU5IaUnolJTkxHAWlsPJxRQle9QcOiUJlpbEqw3WKw6Exu3INDTkxHAW0s/=lN1le9QcOiUJlpbEqw3WKwPWSw3IahzWKwq=lj1JxFTixHAXOHmiqU5Lj9QcOjvE0WqWjhzWKwq=lj1JxFTixHAEl=1iqU5IaUnolJTkxHAWlsPJxRQle9QcOiUJlpbEqw3WKwAWSM3INDTkxHAWlsPJxRQle9QcOiUJlpbEqw3WKwqEts3INDVkxHAWlsPJxRQle9QcOiUJlpbEqw3WKwqEts3INDgIkhY5l6b5tU48mHzWKwA=bu0EYWTIkh0JkRwkxHAEtWDESFD7N9QcOiUJlpbExhDotUxle9QcOpbEOMPEBw3WKwDES13IND2kxHA=tR6JxibXPe2=l/x=khb806x5BHzWKwqWtNUJlR250UC=t2Ple9QcOiUJlpbEqw3WKvYWbW3IahzWKwq=lj1JxFTixHAW0RPiqU5Ij9QctpUJbivEBU8kxHAWYNv=tWPIBFQcOjUJqFgkShg=mvzWKw/JS5bWbH8kxHAWYNv=tWPIBFQcOw/EaFgkavzWKwqWtNUJlRVkxHAWlsPJxRQle9QcOiUJlpbEqw3WKvv=tR3INDgIkhg=mvzWKw/JS5bWbH8kxHAWYNv=tWPIBFQctW/WBFgkavzWKw/JS5bWbH8kxHAWYNv=tWPIBFQcOjUXBFgka/zWKw/JS5bWbH8kxHAWYNv=tWPIBFQctJ/WBFgka1gkxHA=tNmWYsDle9QcOiUJlpbEqw3WKw/=b13INe8kxHAWYNv=tWPIBFQcOjUJqFgkSezWKw/JS5bWbH8kxHAWYNv=tWPIBFQctj1JmFgkShU8KEUc0=e8YEDol2CRj9QcOimEbpUWqwgcP=vFmHzWKwDEbu/EtJ2kxHAESs0Exw070=e8YEDol2CIBUn5YjqRj9QcORQXtWDEbevWj9QcOjYElJnolJTkxHAWb=YJ0jmIkh0JkRwkxHAWxEUJlu07N9QcOsQ=lR0JUhzWKwqWOvbEOJTixHA=bMQiqU5Ij9QcOs/ElMAJa/vFY5e8lNC5KWgXPiU5KNq8mHzWKwDJYMQEbw283NV8B/zWKwxW0Nv=OJnzkD+=3NCJPpg80ATIkh2XPiU5KNq8mHzWKweExG6EYW2RNh5Lj9QcOu0EOsD=bh2zke2zkeU8KEUc0=e8YEDol2CRj9QcOMD=Yu/EawgcP=vFmHzWKw/JxsqExR2kxHAWYNv=tWPLj9QcOpUEYjvESezWKwAXOFQXSU8kxHAWlW/WbFqIBFQcOwDEaFgIe9QcOjbWSRPWmw3WKvmJlR3INDTkxHAEOjUXOHYle9QcOjbWSRPWmw3WKvmEBFgka1nkxHAEtM0Jlsele9QcOjbWSRPWmw3WKw/=b13INe8kxHAWlW/WbFqIBFQcOjUJqFgkSezWKwDWlMAWt=8kxHAWlW/WbFqIBFQcOw6EqFgka/zWKwDWlMAWt=8kxHAWlW/WbFqIBFQct=vXaFgkavDckHU80JwkxHAEtM0Jlsele9QcOjbWSRPWmw3WKwDJlJ3IaV35B55Lj9QcOu/=SwQ=UhzWKw/JxsqExRTixHAExj1iqU5IS2zWKwD=S=vJSN8kxHAWlW/WbFqIBFQcOpv=mFgIq5DieD2iqF+kxHAEtM0Jlsele9QcOjbWSRPWmw3WKwqWlM3IND2iqFVkxHAEtM0Jlsele9QcOjbWSRPWmw3WKvUEls3IND2iqFnzke2ISh2ISh0JkRwkxHAWSM6Wxj17kh2Xe9QcOseXSW/=jhzWKwq=lJDJ0JTixHAXlNmiqU57asvleDVkxHAWSM6Wxj1le9QcOiU=bpb=mw3WKvY=OW3IahzWKwq=lJDJ0JTixHAXlpviqU57NhzWKwDExFDWbH8kxHAWYNYEtEYIBFQcO1xEBFgkNDVkxHAWbim=bu6le9QcOiU=bpb=mw3WKwAWxu3INDTkxHA=tNmWYsDLj9QcOseXSW/=B1n8tNDRj9QcOEbWOF0ESe180Ee8lNC5jhzWKwq=lJDJ0JTixHAJSsQiq1dkxHAWYNYEtEYIBFQcO=mJaFgkavzWKwDExFDWbH8kxHAWYNYEtEYIBFQctRDJqFgka1nkxHAW0WQExJele9QcOiU=bpb=mw3WKweEts3INe8kxHAWYNYEtEYIBFQctux=aFgkavzWKwDExFDWbH8kxHAWYNYEtEYIBFQctjYEBFgka1nJ02CFPuwkxHAESvYWxvb7N9QcOWxJxM0WNhzWKwq=lJDJ0JTixHAESpviqU5le9QcOuPExuqWjhzWKwq=lJDJ0JTixHAJSw6iqU5Ij9QcOWxJxM0WNhzWKwq=lJDJ0JTixHAESpviqU5le9QcOiU=bpb=mw3WKvYExG3INDVWKw/INDnolJTkxHAESvYWxvbIkhg=mvzWKwDExFDWbH8kxHAWYNYEtEYIBFQctW/EqFgkavzWKwDExFDWbH8kxHAWYNYEtEYIBFQcOiYWaFgka/zWKwDExFDWbH8kxHAWYNYEtEYIBFQctimJmFgka1gkxHAW0WQExJele9QcOiU=bpb=mw3WKweEts3INe8kxHAWYNYEtEYIBFQctux=aFgkavzWKweXtJxXtWgX0NVF0Nn=3NCJPpg80AwkxHAWSpmXSJxIBUn5YjqRj9QcOueW0R0ExezWKwq=lJDJ0JnkxHAW0M0EYuAle9QcOueW0R0Eqw3WKweEts3INe8kxHAEOMxJbJPIBFQctux=aFgkavzWKwqWxw/WSwgXPe2zN9QcOWxJxM0WNhzWKwq=lJDJ0JTixHAWY=Yiq1di0u3kavzWKwxJxGPEbMgLj9QcOEbWOF0ENhzWKwq=lJDJ0JTixHA=SNviqU57aF3Lj9QcOEbWOF0ENhzWKwq=lJDJ0JTixHAWY=Yiq1di0u3kavzWKweWONbESugLj9QcOuPExuqWjhzWKwq=lJDJ0JTixHA=SEviqU5Ij9QcOE1E0R/Em/zWKwqEO1xJSMVkxHA=tNmWYsDLj9QcOMQElWeEB/zWKwqWYiYEO1gXPeU8KEUc0=e8YEDol2CRj9QcOj1JxWDEmwgcP=vFmHzWKwxWSUYXOG2kxHAElMAJYWP70=e8YEDol2CIBUn5YjqRj9Qcts/EbFe=SevWj9QcOjYElJnolJTkxHA=S=1WSE1Ikh0JkRwkxHAESJ0WSE17N9QcOjUEOibJehzWKvvWSJPElMTixHA=bMQiqU5Ij9QcONvES5v=B/vFY5e8lNC5KWgXPiU5KNq8mHzWKwqJSiUExF283NV8B/zWKweEbJ/W0unzkD+=3NCJPpg80ATIkh2XPiU5KNq8mHzWKwxExiU=Sw2RNh5Lj9QcOW/XlJAWOh2zke2=l/x=khY5l6b5tU48mHzWKwqW0uQWluTIkh0JkRwkxHAEOuPEONv7N9QcOiU=bpb=bhq=kpeFYAwkxHAWlsPJxRQle9QcOuDExueJaw3WKvmExF3INDTkxHAWx5YJYj1LBF3Ik/9kxHAWlsPJxRQle9QcOuDExueJaw3WKweEbG3INDTkxHAWYNmWtM/le9QcOuDExueJaw3WKvYExG3INDVWKwxIS9vleD+Raj8kSh2zke2zke2zke2zl=e8YEDol2CRj9QcORqJYsqWmvzWKwx=SNbEtWgcP=vFmHzWKw/=tuD=OJ2kxHAWbUm=OW/Lj9QcOWPW0i1JxenzShzWKwxExEm=tE8kxHAWlp1Etu0IBFQcO5vJqFgkSezWKw6WxMDEbv8kxHAWlp1Etu0IBFQctMqWmFgka/zWKwxExEm=tE8kxHAWlp1Etu0IBFQcOu0WqFgkSezWKw6WxMDEbv8kxHAWlp1Etu0IBFQcORxJqFgka/zWKwxExEm=tE8kxHAWlp1Etu0IBFQcOFAJqFgkSeY5l6b5tU48mvzWKweJS1D=lMVkxHAWSpYXSw/Ikh0JkRwkxHAWbM/=O5U7N9QcOj1=Op1Ebhq=kpeFYAwkxHAXSWeEOJAle9QcOReWluP=aw3WKvYXtu3INDTkxHAEls6EtNULj9QcOsD=b1AWa1nza/zWKwxExEm=tE8kxHAWlp1Etu0IBFQctRQWqFgkSezWKw6WxMDEbv8kxHAWlp1Etu0IBFQcOFDJqFgka/zWKwxExEm=tE8kxHAWlp1Etu0IBFQctRDXBFgkSezWKw6WxMDEbv8kxHAWlp1Etu0IBFQctEY=aFgka/zWKwxExEm=tE8kxHAWlp1Etu0IBFQctjUEBFgkSezWKw6WxMDEbv8kxHAWlp1Etu0IBFQctpbEqFgka/zWKwxExEm=tE8kxHAWlp1Etu0IBFQcONv=aFgkSeY5l6b5tU48mvzWKw/JlsQJb1VkxHAESuA=OJ0Ikh0JkRwkxHAWxuPXOU17N9QcOj1=Op1Ebhq=kpeFYAwkxHAXSWeEOJAle9QcOWDExw6=Bw3WKvvJbM3INDTkxHAWljvWtR6Lj9QcOMDXtu0Em1nza/zWKwxExEm=tE8kxHAWlp1Etu0IBFQcOJqEaFgkSezWKw6WxMDEbv8kxHAWlp1Etu0IBFQcOFPJaFgka/zWKwxExEm=tE8kxHAWlp1Etu0IBFQctJxJqFgkSezWKw6WxMDEbv8kxHAWlp1Etu0IBFQcONYEmFgka/zWKwxExEm=tE8kxHAWlp1Etu0IBFQcO16JqFgkSezWKw6WxMDEbv8kxHAWlp1Etu0IBFQcOuDWqFgka/zWKwxExEm=tE8kxHAWlp1Etu0IBFQctRAiqU57l=e8YEDol2CIj9QcOMe=OueWq/zWKwqWxWDJSwgcP=vFmHzWKweWtEUJxw2kxHAWlp1Etu0XPiU5KNq8mHzWKw6WxMDEbv8kxHAESHb=lWAIBFQcOuAEaFgkavzWKweEluDESWVkxHAWbWxEtsAISh2Lj9QcOWPW0i1JehzWKw/=tuD=OJTixHAJlNUiqU57N9QcO1xESu0XjhzWKw/=tuD=OJTixHAJ0pmiqU5Lj9QcOWPW0i1JehzWKw/=tuD=OJTixHAWx=UiqU57N9QcO1xESu0XjhzWKw/=tuD=OJTixHAJxHbiqU5Lj9QcOWPW0i1JehzWKw/=tuD=OJTixHAWSRDiqU57N9QcO1xESu0XjhzWKw/=tuD=OJTixHAW0MDiqU5Lj9QcOWPW0i1JehzWKw/=tuD=OJTixHAXOiviqU57l=e8YEDol2CIj9QcOReJlueWB/zWKwDJS16=SMgcP=vFmHzWKwDE0=bXSM2kxHAWlp1Etu0XPiU5KNq8mHzWKw6WxMDEbv8kxHAEO5YJx1eIBFQcOvvEqFgkavzWKwqElj1ESGVkxHAEts6XlMeISh2Lj9QcOWPW0i1JehzWKw/=tuD=OJTixHAJYsxiqU57N9QcO1xESu0XjhzWKw/=tuD=OJTixHAJYJ0iqU5Lj9QcOWPW0i1JehzWKw/=tuD=OJTixHAXBFgkSezWKw6WxMDEbv8kxHAWlp1Etu0IBFQcOJ/WaFgka/zWKwxExEm=tE8kxHAWlp1Etu0IBFQcONbiqU57N9QcO1xESu0XjhzWKw/=tuD=OJTixHAWSReiqU5XP=vFmHzWKweJxpY=bF2kxHAWxFxJYpbX0UYIj9QcO1xESu0XjhzWKw/=tuD=OJTixHAXtsPiqU5Ij9QcO1xESu0XjhzWKw/=tuD=OJTixHAJlWPiqU5Lj9QcO1xESu0XjhzWKw/=tuD=OJTixHAWbFxiqU5IaUn=3NCJPpg80AwkxHAWbw0WlMqIBUn5YjqRj9QcOWA=lJ6XOezWKw/=tuD=OJVkxHAW0seWSGq7N9QcOjb=SsQXNhzWKwxXtNYXSwTixHAXOueiq1dkxHAWxvU=b1AIBFQctivJmFgkavzWKweJxpY=b58kxHAWxvU=b1AIBFQcO5vJqFgka1nkxHAW0seWSGqle9QcOWA=lJ6XBw3WKw/=b13INe8kxHAWxvU=b1AIBFQcO1A=mFgkSezWKweJxpY=b58kxHAWxvU=b1AIBFQcOu0WqFgkSh2zlNVF0MwkxHAW0MeJxpble9QcOj1=Op1Emw3WKw0EbG3INDT=3NCJPpg80ATkxHAJSw6=SReIkh0JkRwkxHAEOu/ESE17N9QcOj1=Op1Em/zWKwqWxuxXlR2cPDnkxHAWbWDWxUmle9QcOuDWSMx=Bw3WKwqESw3IND2=3NCJPpg80ATkxHAWx1x=lWQLj9QcOMPJxwqXBUn5YjqRj9QcOpUWYWq=OezWKwDEOseW0unFYND5kiCRj9QcONbEt=YEehzWKwD=SibWYuTixHAExvbiqU5Ij9QcOW6W0NbWB/zWKweE0WAWbwgXPDVkxHAWbWDWxUmle9QcOuDWSMx=Bw3WKweWtu3IND2kxHAElWD=YJPle9QcOuDWSMx=Bw3WKvmWOW3INDVkxHAWbWDWxUmle9QcOuDWSMx=Bw3WKw6WxM3IND2kxHAElWD=YJPle9QcOuDWSMx=Bw3WKvmEOw3INDVkxHAWbWDWxUmle9QcOuDWSMx=Bw3WKwx=SG3IND2kxHAElWD=YJPle9QcOuDWSMx=Bw3WKvv=Su3INDVkxHAWbWDWxUmle9QcOuDWSMx=Bw3WKwxXtW3IND2=3NCJPpg80ATkxHAWxuPW0uxLj9QcOEb=OEUXBUn5YjqRj9QcON1JlJQ=OezWKwDEOseW0unFYND5kiCRj9QcONbEt=YEehzWKwe=tjYWtuTixHAEljUiqU5Ij9QcOWDExE1Wq/zWKwxJ0ux=SwgXPDVkxHAWbWDWxUmle9QcOuDWSMx=Bw3WKwDJbw3IND2kxHAElWD=YJPle9QcOuDWSMx=Bw3WKw0WbM3INDVkxHAWbWDWxUmle9QcOuDWSMx=Bw3WKwqESR3IND2kxHAElWD=YJPle9QcOuDWSMx=Bw3WKvYW0W3INDVkxHAWbWDWxUmle9QcOuDWSMx=Bw3WKvm=b13IND2kxHAElWD=YJPle9QcOuDWSMx=Bw3WKwDEbW3INDVkxHAWbWDWxUmle9QcOuDWSMx=Bw3WKwDWaFgkSezWKweJxpY=b58kxHAEOu/ESE1IBFQcO16JqFgka/zWKwqWxuxXli8kxHAEOu/ESE1IBFQcORq=aFgkSeY5l6b5tU48mvzWKwqXtMAJSJVkxHAWbJqEO10Ikh0JkRwkxHAWls6=SMP7N9QcOuDWSMx=Ohq=kpeFYAwkxHAElWD=YJPle9QcOjvXlMeEqw3WKvmXBFgkavzWKwqXtMAJSJVkxHAWbJqEO10ISh2Lj9QcORxEOW6JUhzWKwDEOseW0uTixHAE0iUiqU57N9QcONbEt=YEehzWKwDEOseW0uTixHAJlNUiqU5Lj9QcORxEOW6JUhzWKwDEOseW0uTixHAEOEYiqU57N9QcONbEt=YEehzWKwDEOseW0uTixHAWx=UiqU5Lj9QcORxEOW6JUhzWKwDEOseW0uTixHAEbF6iqU57N9QcONbEt=YEehzWKwDEOseW0uTixHAWSRDiqU5XP=vFmHzWKwxWlNvE0J2kxHAWbWDWxUmX0UYIj9QcONbEt=YEehzWKwDEOseW0uTixHAXOiviqU5Ij9QcONbEt=YEehzWKwDEOseW0uTixHAJYsxiqU5Lj9QcONbEt=YEehzWKwDEOseW0uTixHAXBFgka1gc0=e8YEDol2CRj9QcOEbJlR6WqwgcP=vFmHzWKwDWxJ/WOJ2kxHAEOu/ESE1Lj9QctuxElJeXOezWKwxWlNvE0=8kxHAEOW0WSG0IBFQcOReXBFgkavzWKvbWxW6=YRVkxHAWbFQXlp1Ia/zWKwq=bi1XlW2kxHAWYJA=SJAle9QcOuxEbsQEmw3WKwAEOM3IahzWKwDWxJ/WOJTixHAJYjmiqU5Ij9QcOW/=lsP=UhzWKwDWxJ/WOJTixHAESH1iqU5IShV=kuwkxHAWSsDWYNm7N9QcOj1Wb1xEUhzWKwDWxJ/WOJTixHAXOueiq1dkxHAEOW0WSG0IBFQctivJmFgkavzWKwxWlNvE0=8kxHAEOW0WSG0IBFQcO1xEaFgka1n5YjqRj9QcOEmWSF0=SezWKweWxsP=lp8kxHAEOW0WSG0IBFQcOwDEaFgIe9QcOuxEbsQEmw3WKvmJlR3INDTkxHAWxjUJS5Yle9QcOuxEbsQEmw3WKwx=SG3INDgX0UYIj9QcOW/=lsP=UhzWKwDWxJ/WOJTixHAWxvbiqU5Ij9QctuxElJeXjhzWKwDWxJ/WOJTixHA=bFQiqU5Lj9QcORAEOwxWjhzWKwDWxJ/WOJTixHAWx5YiqU5IaUn5YjqRj9QctsxJSMDJbezWKwxWlNvE0=8kxHAEOW0WSG0IBFQcOpmXBFgkNhzWKwDWxJ/WOJTixHAXOWeiqU5IB59iq1VkxHAWxFPWtN17SHAWOhPotUV=awvRNh5Ikhx50UDJ0wTkxHAJSEvESpmle9QcOWPExHU=BVdkaUnJ0jx=aFQixgzWKw/WSuq=li8kxHAEOW0WSG0IBFQct=vWBFgkSezWKwxWlNvE0=8kxHAEOW0WSG0IBFQcOReWmFgkShb806Dol6e=ShbJkEUixs3XU9QctM/WSUbENhzWKwDWxJ/WOJTixHAWxJ3IND2Raj8kShb806Dol6e=ShbJkEUixR3XU9QcOpUXSMqENhzWKwDWxJ/WOJTixHA=SjviqU57aj8kShb806Dol6e=ShbJkEUixW3XU9QcOiYWYu6JehzWKwDWxJ/WOJTixHAWlJ6iqU5le9QcOuxEbsQEmw3WKw6XtJ3IND2kxHAWxjUJS5Yle9QcOuxEbsQEmw3WKvm=b13INDnJ02C5tUC5lMnJ0jx=aFDixgzWKwxJbsPEYN8kxHAEOW0WSG0IBFQcOueXaFgkSezWKwxWlNvE0=8kxHAEOW0WSG0IBFQcOu/iqU5X0E483pg83NUXPemFYNvoxh2zlNVF0NnolJTkxHAWxjUJS5Yle9QcOuxEbsQEmw3WKwqWYM3INDTkxHAWS16=OuDLj9QctuxElJeXB1gkxHAWYJq=OUble9QcOuxEbsQEmw3WKw/=b13INe8kxHAEOW0WSG0IBFQcO1A=mFgkSezWKwxWlNvE0=8kxHAEOW0WSG0IBFQcO5m=aFgka/zWKw/XtJPJ0E8kxHAEOW0WSG0IBFQcOW0iqU57aj8ka/zWKwDXOFeWOi8kxHAEOW0WSG0IBFQctM/JaFgkSDvRNh5Lj9QcOEmWSF0=NhzWKwDWxJ/WOJTixHAEOM6iqU57aF3X0NVF0Nn5YjqRj9QcOuxE0R0=bezWKwxWlNvE0=8kxHAEOW0WSG0IBFQcOux=mFgkNhzWKwDWxJ/WOJTixHAXOWeiqU5IB59iq1VkxHAESGQXtRP7SHAWOhPotUV=awvRNh5Ikhx50UDJ0wTkxHAEOWPJb=Yle9QcOMQWOvmEqVdkaUnJ0jx=aFQixgzWKw/=OsPJSp8kxHAEOW0WSG0IBFQctM/JaFgkSDvleDnJ02C5tUC5lMnJ0jx=aF/ixgzWKw/WSuq=li8kxHAEOW0WSG0IBFQct=vWBFgkSezWKwxWlNvE0=8kxHAEOW0WSG0IBFQcOReWmFgkShb806Dol6e=ShbJkEUixR3XU9QcOWAJxMPEjhzWKwDWxJ/WOJTixHAWxJ3IND2Raj8kShb806Dol6e=ShbJkEUixW3XU9QcOEmWSF0=NhzWKwDWxJ/WOJTixHAEOM6iqU57N9QcOW/=lsP=UhzWKwDWxJ/WOJTixHAEbF6iqU5X0E483pg83NUX0EvF0M3EBF+kxHAWYJq=OUble9QcOuxEbsQEmw3WKw/=b13INe8kxHAEOW0WSG0IBFQcO1A=mFgkSezWKwxWlNvE0=8kxHAEOW0WSG0IBFQctiYXaFgkShb806Dol6e=Sh2J3iUJlVnzke2zkeU8KEURtp4JPNh=l6Dle9QcOuDWSMx=Bw3WKwAEOM3IahzWKwDEOseW0uTixHAJYjmiqU5Ij9QctsAXlMqEaU8kxHAEOu/ESE1IBFQcOjYXaFgkNhzWKwDEOseW0uTixHAWlNbiqU57N9QcONbEt=YEehzWKwDEOseW0uTixHAElW3INDnza1V=t2b5leU83p8kxHAWlp1Etu0IBFQcOwDEaFgIe9QcOj1=Op1Emw3WKvmJlR3INDTkxHAElJD=tR/INhzWKw/=tuD=OJTixHAWlJ6iqU5le9QcOj1=Op1Emw3WKw/=lW3IND2kxHAXSWeEOJAle9QcOj1=Op1Emw3WKvmEbM3INDV=t2b5leU83p8kxHAWlp1Etu0IBFQcOwDEaFgIe9QcOj1=Op1Emw3WKvmJlR3INDTkxHAXSWeEOJAle9QcOj1=Op1Emw3WKvUWbR3INDgle9QcOj1=Op1Emw3WKw/=b13INe8kxHAWlp1Etu0IBFQcOjUJqFgkSezWKw6WxMDEbv8kxHAWlp1Etu0IBFQctR0EaFgka/180Ee8lNC5jhzWKw/=tuD=OJTixHAXOueiq1dkxHAWlp1Etu0IBFQctivJmFgkavzWKw6WxMDEbv8kxHAWlp1Etu0IBFQcOuQ=aFgkaU8kxHAWlp1Etu0IBFQcOjYXaFgkNhzWKw/=tuD=OJTixHAWlNbiqU57N9QcO1xESu0XjhzWKw/=tuD=OJTixHAJbJeiqU5Ltp4JPNh=l6Dle9QcOj1=Op1Emw3WKwAEOM3IahzWKw/=tuD=OJTixHAJYjmiqU5Ij9QcO1xESu0XjhzWKw/=tuD=OJTixHAExpbiqU5INhzWKw/=tuD=OJTixHAWlJ6iqU5le9QcOj1=Op1Emw3WKw/=lW3IND2kxHAXSWeEOJAle9QcOj1=Op1Emw3WKvmEbM3INDV=t2b5leU83p8kxHAWlp1Etu0IBFQcOwDEaFgIe9QcOj1=Op1Emw3WKvmJlR3INDTkxHAXSWeEOJAle9QcOj1=Op1Emw3WKvUWbR3INDgle9QcOj1=Op1Emw3WKwD=OR3INe8kxHAWlp1Etu0IBFQcOjYXaFgkNhzWKw/=tuD=OJTixHAWlNbiqU57N9QcO1xESu0XjhzWKw/=tuD=OJTixHAJbJeiqU5Ltp4JPNh=l6Dle9QcOj1=Op1Emw3WKwAEOM3IahzWKw/=tuD=OJTixHAJYjmiqU5Ij9QcO1xESu0XjhzWKw/=tuD=OJTixHAEOHUiqU5INhzWKw/=tuD=OJTixHAEtuqiqU5le9QcOj1=Op1Emw3WKw/=b13INe8kxHAWlp1Etu0IBFQcOjUJqFgkSezWKw6WxMDEbv8kxHAWlp1Etu0IBFQctR0EaFgka/180Ee8lNC5jhzWKw/=tuD=OJTixHAXOueiq1dkxHAWlp1Etu0IBFQctivJmFgkavzWKw6WxMDEbv8kxHAWlp1Etu0IBFQcOFDJqFgkaU8kxHAWlp1Etu0IBFQcOp1WmFgkNhzWKw/=tuD=OJTixHAWlJ6iqU5le9QcOj1=Op1Emw3WKw/=lW3IND2kxHAXSWeEOJAle9QcOj1=Op1Emw3WKvmEbM3INDV=t2b5leU83p8kxHAWlp1Etu0IBFQcOR6EBFgkSezWKw6WxMDEbv8kxHAWlp1Etu0IBFQcO5bWaFgka/Pol618P58kxHAWlp1Etu0IBFQcOvUJaFgIq5dieD2Raj8ka/DotUxle9QcOj1=Op1Emw3WKwAXSM3IahzWKw/=tuD=OJTixHAESUUiqU5Ij9QcO1xESu0XjhzWKw/=tuD=OJTixHA=SwQiqU5Lj9QcORqJYsqWmQvleDgXPeY5l6b5tU48mHzWKwDWO10EluTIkh0JkRwkxHAWxM0ESGe7N9QcOR6JYuxWa/zWKwe=S5b=bW2cPDnkxHAElMPJ0Jxle9QcOWeEbMQEaw3WKwDJYW3IND2kxHAXSWeEOJAle9QcOWeEbMQEaw3WKw0Wx13INDVkxHAElMPJ0Jxle9QcOWeEbMQEaw3WKvUWbM3IND2kxHAXSWeEOJAle9QcOWeEbMQEaw3WKwxXOG3INDVkxHAElMPJ0Jxle9QcOWeEbMQEaw3WKwqJbW3IND2=3NCJPpg80ATkxHAEts0WYEYLj9QcOsQElJDJqUn5YjqRj9QcOMxEx1x=OezWKwxESJeWOMnFYND5kiCRj9QcO1xESu0XjhzWKweWxF6W0uTixHAWbRAiqU5Ij9QcOpvEbib=m/zWKw/WONYEtWgXPDVkxHAElMPJ0Jxle9QcOWeEbMQEaw3WKw/Jb13IND2=3NCJPpg80ATkxHAEOMA=YR0Lj9QctW0ElRgcP=vFmHzWKwxWbw6JxG2kxHAWxM0ESGeXPiU5KNq8mHzWKw6WxMDEbv8kxHAWxRAXlWQIBFQcti1WBFgkavzWKwDESvYJbJVkxHAJxJeJm1nza/zWKwe=S5b=bE8kxHAWxM0ESGeIBFQcO10=aFgkSeY5l6b5tU48mvzWKwqEl=UWlMVkxHAWS1DXOw6Ikh0JkRwkxHAWY=1EORq7N9QcOWeEbMQEShq=kpeFYAwkxHAXSWeEOJAle9QcOiY=OuqWmw3WKwxWBFgkavzWKwqEl=UWlMVkxHAWS1DXOw6ISh2Lj9QcONUE0EYWehzWKwxESJeWOMTixHAESi1iqU57N9QcO1xESu0XjhzWKwxESJeWOMTixHA=bEmiqU5Lj9QcONUE0EYWehzWKwxESJeWOMTixHA=tE1iqU57N9QcO1xESu0XjhzWKwxESJeWOMTixHAE0MPiqU5Lj9QcONUE0EYWehzWKwxESJeWOMTixHAJ0MQiqU57N9QcO1xESu0XjhzWKwxESJeWOMTixHAJlWQiqU5Lj9QcONUE0EYWehzWKwxESJeWOMTixHAEOpmiqU57N9QcO1xESu0XjhzWKwxESJeWOMTixHAJbs3INDVkxHAElMPJ0Jxle9QcOWeEbMQEaw3WKvUXSs3IND2kxHAXSWeEOJAle9QcOWeEbMQEaw3WKvvWYu3INDVkxHAElMPJ0Jxle9QcOWeEbMQEaw3WKweEOM3IND2kxHAXSWeEOJAle9QcOWeEbMQEaw3WKvmEbF3INDVkxHAElMPJ0Jxle9QcOWeEbMQEaw3WKvb=tW3IND2kxHAXSWeEOJAle9QcOWeEbMQEaw3WKvviqU5Lj9QcONUE0EYWehzWKwxESJeWOMTixHAWx1QiqU57N9QcO1xESu0XjhzWKwxESJeWOMTixHAWSGQEBFgka/zWKwe=S5b=bE8kxHAWxM0ESGeIBFQcOvmWmFgkSezWKw6WxMDEbv8kxHAWxM0ESGeIBFQctJQ=BFgka/zWKwe=S5b=bE8kxHAWxM0ESGeIBFQctWPEBFgkSeY5l6b5tU48mvzWKvbEYM0WSWVkxHAXtM/=tEvIkh0JkRwkxHAESMqEb1x7N9QcOWeEbMQEShq=kpeFYAwkxHAXSWeEOJAle9QcOMeWbJ6Wqw3WKvm=OG3INDTkxHAJx=UEbsxLj9QcOvUWlpbJa1nza/zWKwe=S5b=bE8kxHAWxM0ESGeIBFQcOvmWqFgkSezWKw6WxMDEbv8kxHAWxM0ESGeIBFQcOsAXBFgka/zWKwe=S5b=bE8kxHAWxM0ESGeIBFQcOw6EmFgkSeY5l6b5tU48mvzWKwDWbWDWSMVkxHAWSvbJSGQIkh0JkRwkxHA=YJDEx1q7N9QcOWeEbMQEShq=kpeFYAwkxHAXSWeEOJAle9Qct=YEOF6Wmw3WKvUEbw3INDTkxHAEORxEOseLj9QcOsAJ0sQWB1nza/zWKwe=S5b=bE8kxHAWxM0ESGeIBFQcOMeWqFgkSezWKw6WxMDEbv8kxHAWxM0ESGeIBFQcOJQiqU5Lj9QcONUE0EYWehzWKwxESJeWOMTixHAXOJeiqU57N9QcO1xESu0XjhzWKwxESJeWOMTixHA=SWqiqU5Lj9QcONUE0EYWehzWKwxESJeWOMTixHA=S1AiqU57l=e8YEDol2CIj9QcOpmJxuqEB/zWKwxXSibEOugcP=vFmHzWKwxEOpUJxs2kxHAWxM0ESGeXPiU5KNq8mHzWKw6WxMDEbv8kxHAWxuD=lW/IBFQcOWQiqU5Ij9QcOpmJxuqEB/zWKwxXSibEOugXPDVkxHAElMPJ0Jxle9QcOWeEbMQEaw3WKvbXOF3IND2kxHAXSWeEOJAle9QcOWeEbMQEaw3WKwPXSw3INDVkxHAElMPJ0Jxle9QcOWeEbMQEaw3WKwAXSW3IND2=3NCJPpg80ATkxHAElWeXSFxLj9QcOR6E0J0JqUn5YjqRj9QcOW/=SMe=SezWKwxESJeWOMnFYND5kiCRj9QcO1xESu0XjhzWKwxWlMeElMTixHAWxG3INDTkxHAElWeXSFxLj9QcOR6E0J0Jq1nza/zWKwe=S5b=bE8kxHAWxM0ESGeIBFQcO=UWaFgkSeY5l6b5tU48mvzWKweEOFA=luVkxHAEtsxESG6Lj9QcORAJb1xEmUn5YjqRj9QcOjvXSWeJSezWKwxESJeWOMnFYND5kiCRj9QcO1xESu0XjhzWKw/JS1xElsTixHA=Ow6iqU5Ij9QcOMDExvU=B/zWKwDJSWeWO1VkxHAWbvmXSW0ISh2Lj9QcONUE0EYWehzWKwxESJeWOMTixHAJx=1iqU57N9QcO1xESu0XjhzWKwxESJeWOMTixHA=ORDiqU5Lj9QcONUE0EYWehzWKwxESJeWOMTixHAJYJqiqU57N9QcO1xESu0XjhzWKwxESJeWOMTixHAJbR/iqU5Lj9QcONUE0EYWehzWKwxESJeWOMTixHAJx1DiqU57l=e8YEDol2CIj9QcOWQJxR/=a/zWKwxJYs0WbWgcP=vFmHzWKw/Wlp1XtR2kxHAWxM0ESGeXPiU5KNq8mHzWKw6WxMDEbv8kxHAWSj1=OvmIBFQcOsDWqFgkavzWKwxWtWqWlMVkxHAW0ivEbRxISh2Lj9QcONUE0EYWehzWKwxESJeWOMTixHAXSRqiqU57N9QcO1xESu0XjhzWKwxESJeWOMTixHA=tEUiqU5Lj9QcONUE0EYWehzWKwxESJeWOMTixHA=lMxiqU57N9QcO1xESu0XjhzWKwxESJeWOMTixHAESFDiqU5Lj9QcONUE0EYWehzWKwxESJeWOMTixHAEYp1iqU57l=e8YEDol2CIj9QcORQXtMDXa/zWKwDJYJD=tsgcP=vFmHzWKw/ESG0E0u2kxHAWxM0ESGeXPiU5KNq8mHzWKw6WxMDEbv8kxHAWSMQEb51IBFQcOsDWqFgkavzWKwqWOvUEO1VkxHAEtiYEtpvISh2Lj9QcONUE0EYWehzWKwxESJeWOMTixHA=SwPiqU57l=e8YEDol2CIj9QctMqW0JqEq/zWKw/=t=U=bRgcP=vFmHzWKweE0N1WSM2kxHAWxM0ESGeXPiU5KNq8mHzWKw6WxMDEbv8kxHAES5U=OseIBFQctu/WBFgkavzWKvUWbEYWbFVkxHAWlpY=lJqISh2Lj9QcONUE0EYWehzWKwxESJeWOMTixHAJxi1iqU57l=e8YEDol2CIj9QcOu6Exu6Xa/zWKwDXlMDXOWgcP=vFmHzWKwDJYs/WbG2kxHAWxM0ESGeXPiU5KNq8mHzWKw6WxMDEbv8kxHAEtivWSRQIBFQctEUWaFgkavzWKwDXSFDXS1VkxHAEOUUEOwxISh2Lj9QcONUE0EYWehzWKwxESJeWOMTixHA=ljbiqU57l=e8YEDol2CIj9QcOuDJlR0Em/zWKvvEbR0=SMgcP=vFmHzWKwqXtjUEbW2kxHAWxM0ESGeXPiU5KNq8mHzWKw6WxMDEbv8kxHAWbvv=SJxIBFQcORAWaFgkavzWKwDEtjmEbJVkxHAJSJqEYMeISh2Lj9QcONUE0EYWehzWKwxESJeWOMTixHAJxvbiqU57l=e8YEDol2CIj9QcOM0WbMPEm/zWKweWxJ0JSJgcP=vFmHzWKweXO16JSu2kxHAWxM0ESGeXPiU5KNq8mHzWKw6WxMDEbv8kxHAESw6XlsDIBFQcOpYJqFgkavzWKweEbReExJVkxHAESW0EYs0ISh2XP=vFmHzWKwxEbG6=bR2kxHAElMPJ0JxLj9QcOWeJxFeWbe180Ee8lNC5jhzWKwxESJeWOMTixHAXOueiq1dkxHAWxM0ESGeIBFQctivJmFgkavzWKw6WxMDEbv8kxHAWxM0ESGeIBFQcOFDJqFgka1n=Y2qIK=vFmHzWKwqExwxWOswol68kxHAXSWeEOJAle9QcOWeEbMQEaw3WKwPXSw3INDVkxHAXSWeEOJAle9QcOWeEbMQEaw3WKvm=aFgka/zWKw6WxMDEbv8kxHAWxM0ESGeIBFQctW/iqU5Lj9QcO1xESu0XjhzWKwxESJeWOMTixHAEYuAiqU5kaUnolJTkxHAXSWeEOJAle9QcOWeEbMQEaw3WKvm=OG3INDTkxHAXSWeEOJAle9QcOWeEbMQEaw3WKvUJbR3INDVkxHAXSWeEOJAle9QcOWeEbMQEaw3WKvUJbR3INDgIkhY5l6b5tU48mHzWKwqW0uq=buTIkh0JkRwkxHAJYsxJ0im7N9QcOWeEbMQEShzWKwqXSuAWYj8kxHAJYsxJ0imIBFQctsPWmFgIq5q=a55Ij9QcOiv=bRAWq/zWKweElR0WO=8kxHAJYsxJ0imIBFQctpmEqFgka1nzkeU8KEURj9QcOWeJxFeWUhzWKwxESJeWOMTixHAW0pUiq1dkxHAWxM0ESGeIBFQctjYiqU5Ij9QcO1xESu0XjhzWKwxESJeWOMTixHAEx1AiqU5Lj9QcOMxWOiYEmQvleDgXPeY5l6b5tU48mHzWKweWxGq=bJTIkh0JkRwkxHAEbJQ=YuA7N9QcOWeEbMQEShg=mvzWKw6WxMDEbv8kxHAEbJQ=YuAIBFQcti1WBFgkavzWKw6WxMDEbv8kxHAEbJQ=YuAIBFQctEvWqFgka/zWKw6WxMDEbv8kxHAEbJQ=YuAIBFQctEvWqFgka1gc0=e8YEDol2CRj9QcOM/WxRx=mwgcP=vFmHzWKwe=bM6XlJ2kxHAEbJQ=YuAXe9QcOWxESWAWbezWKwDJS5UE0j8kxHAElJeXSUYIBFQcOse=mFgkavzWKvYEYNbExE8kxHAElJeXSUYIBFQcOwDEaFgIe9QcONYES16=mw3WKweExJ3IaV38lM3kavzWKwxEbG6=bi8kxHAElJeXSUYIBFQcOpmJqFgka1gLj9QcOsQEtN1JSezWKvbESM0WON8kxHAElJeXSUYIBFQcOwDEaFgIe9QcONYES16=mw3WKweExJ3IaV38lM3kavzWKwxEbG6=bi8kxHAElJeXSUYIBFQctMqEaFgkaU8WKwQkShg=mvzWKwxEbG6=bi8kxHAElJeXSUYIBFQcOimWqFgkavzWKwxWSueJx=8kxHAElJeXSUYIBFQcOpYEaFgIq5C5B55Lt6e8tQgIkh0JkRwkxHAEOUvXOwA7N9QcOiv=OseXjhzWKwe=bM6XlJTixHAXOueiq1dkxHAElJeXSUYIBFQcOMPEmFgIq5h=a55Ij9QcOW0WOUYWUhzWKwe=bM6XlJTixHA=SReiqU5INVQcOj5Xe9QcOu6JSwAXBJYkxHAWxJQXlJqle9QcONYES16=mw3WKw/Jb13INDTkxHAEOUvXOwAle9QcONYES16=mw3WKwD=bM3IaV383u3ka/C5l/VIS2zWKwxWSsAEbM2kxHAEOUvXOwAXU9QcOR0XO=bESezWKwDW0=UJYN8kxHAElJeXSUYIBFQcOwDEaFgIe9QcONYES16=mw3WKweExJ3IaV38lM3kavzWKwxEbG6=bi8kxHAElJeXSUYIBFQctMqEaFgkaU8WKwQkSh2zkeU8KEUcP=vFmHzWKwxXO5YWSG25tvgFehzWKw0EbHY=OwTixHAEOM6iqU5le9QcOJ0Wt=1XBw3WKvUWYR3INDTLehcktp5L0FViqFgle9QcOJ0Wt=1XBw3WKvU=bR3INDTWKwQLOHAWSRgXe9QcOWAE0J/WOezWKw6WxMDEbv8kxHAEbJQ=YuAIBFQcOjYiqU5Ij9QcOWAE0J/WBQ3iq1ykxHAWxwP=bsQle9QcOJ0Wt=1XBw3WKwqJlR3INDTLq6nWaQDza23INhzWKw0EbHY=OwTixHAXOwQiqU5IB5FcORQiq1+iqFV5tvgFehzWKw0EbHY=OwTixHAEOM6iqU57N9QcOWAE0J/WOh2zN9QcOWeJxFeWUhzWKwxESJeWOMTixHAJbJ3IND2=3NCJPpg80ATIkh0JkRwkxHAWSi1XS1e7N9QcOWeEbMQEShg=mvzWKwxEbG6=bi8kxHAWSi1XS1eIBFQctWPEBFgkavzWKwxEbG6=bi8kxHAWSi1XS1eIBFQcOvmWqFgka/zWKwxEbG6=bi8kxHAWSi1XS1eIBFQcOvmWqFgka1gc0=e8YEDol2CRj9QcOp1W0Rx=mwgcP=vFmHzWKwq=O1DWxu2kxHAWSi1XS1eXe9QcOW0WOUYWUhzWKwq=O1DWxuTixHAXS=UiqU5Ij9QcOp1WY=bWq/zWKwDJbJeEYJgXPe2=l/x=kh0JkRwkxHAWS=vESN17kpTokE8kxHAWSi1XS1eIBFQcOueXaFgkNhzWKw/WYu6XSMTixHA=SimiqU5IB2FpB23LBF3IShg=mvzWKwxEbG6=bi8kxHAWSi1XS1eIBFQcOw6EmFgkawQcOsQLj9QcOs0JSMe=jhzWKw/WYu6XSMTixHA=bFQiqU5IaUnolJTkxHAWxJQXlJqle9QcOsq=O16Eaw3WKwqJbW3INDTkxHAWxJQXlJqle9QcOsq=O16Eaw3WKweESW3INDVkxHAWxJQXlJqle9QcOsq=O16Eaw3WKwAEbM3INDgIkhY5l6b5tU48mHzWKwqEbUmEYMTIkh0JkRwkxHA=OwAESs/7N9QcOsq=O16Ea/zWKwxW0JeJSR2cPDnkxHAWxEYElsqle9QctuAXOM/Waw3WKv1EOR3IND2kxHAWxJQXlJqle9QctuAXOM/Waw3WKweWYu3INDVkxHAWxEYElsqle9QctuAXOM/Waw3WKwxXSM3IND2LeADLxh0JkRwkxHAWb1q=S107kh2Xe9QcOR6WYM6EUhzWKv1XOweWSsTixHA=OuqiqU57N9QcOW0WOUYWUhzWKv1XOweWSsTixHA=tE1iqU5Lj9QcOR6WYM6EUhzWKv1XOweWSsTixHAWx1eiqU57a2cENV/LSN5Lxh0JkRwkxHAWluQXSW67kh2Xe9QcOj1WO1xXNhzWKv1XOweWSsTixHA=OuqiqU57N9QcOW0WOUYWUhzWKv1XOweWSsTixHAJ0MQiqU5Lj9QcOj1WO1xXNhzWKv1XOweWSsTixHAWx1eiqU57a2cWeVDEeD4XP=vFmHzWKw/WSJPWSu2cPDnkxHAWSs0ExsDle9QctuAXOM/Waw3WKv1EOR3IND2kxHAWxJQXlJqle9QctuAXOM/Waw3WKwDEtR3INDVkxHAWSs0ExsDle9QctuAXOM/Waw3WKwxXSM3IND2LeA0lxGDEND4XP=vFmHzWKwxJxJPWS12cPDnkxHAW0W0Exs6le9QctuAXOM/Waw3WKv1EOR3IND2kxHAWxJQXlJqle9QctuAXOM/Waw3WKvUXSs3INDVkxHAW0W0Exs6le9QctuAXOM/Waw3WKwxXSM3IND2LeAxENVqLSv5Lxh0JkRwkxHAWSM0EtWq7kh2Xe9QcOseEbpbWUhzWKv1XOweWSsTixHA=OuqiqU57N9QcOW0WOUYWUhzWKv1XOweWSsTixHAESueiqU5Lj9QcOseEbpbWUhzWKv1XOweWSsTixHAWx1eiqU57a2cWeVQEbv5Lxh0JkRwkxHAESUYEYWe7kh2Xe9QcOM6=b=bENhzWKv1XOweWSsTixHA=OuqiqU57N9QcOW0WOUYWUhzWKv1XOweWSsTixHAJ0pbiqU5Lj9QcOM6=b=bENhzWKv1XOweWSsTixHAWx1eiqU57a2cIOMQWSv9ESGqWKQeWOWAzOJxWOp9EbFeXkQ0Ex=8WaDxka14XP=vFmHzWKwxJSMxJYR2cPDnkxHAW0seW0imle9QctuAXOM/Waw3WKv1EOR3IND2kxHAWxJQXlJqle9QctuAXOM/Waw3WKwxXSG3INDVkxHAW0seW0imle9QctuAXOM/Waw3WKwxXSM3IND2LeATEbi8WBD6kkV/EBQ/EPDgLxhb806x5BHzWKvYExJPWSG2le9QcOWx=bNvWm/zWKwqXSiUXSJVkxHAWluQXSW6Lj9QcOs/EbF/EB/zWKwxJxJPWS1VkxHAWSM0EtWqLj9QcOM6=b=bEa/zWKwxJSMxJYi5Lj9QcOEv=ON1WOezWKwDJbGQJbE8kxHA=OwAESs/IBFQctMqJmFgkaw4ksu4=qQ3iq1n=Y2qItE483EDRj9QcOsPJlEYEqH4=mHzWKvYExJPWSGgc0UYIj9QcOsPJlEYEehzWKv1XOweWSsTixHAWx1eiqU5le9QctuAXOM/Waw3WKw/JxR3INDTkxHAW0j1EluQIaUq=kpeFYAwkxHAWS5vJ0JPle9QctuAXOM/Waw3WKv1EOR3INDnzkiU5KNq8mHzWKwxEbG6=bi8kxHA=OwAESs/IBFQcOvmWmFgkSh2zlNVF0MwkxHAWxJQXlJqle9QcOsq=O16Eaw3WKvUXSw3INDTkxHAESGPJYMQLKpTokE8kxHAWSi1XS1eIBFQcOueXaFgka1nzke2XP=vFmHzWKwDJxWPJYW2=t2b5leU83p8kxHAWxM0ESGeIBFQcOwDEaFgIe9QcOWeEbMQEaw3WKvmJlR3INDTkxHAXSWeEOJAle9QcOWeEbMQEaw3WKvUWbR3INDgX0=4Fmv0JkRwkxHAWbFAWxG/RtUCle9QcO1xESu0XjhzWKwxESJeWOMTixHAEx1AiqU5Lj9QcO1xESu0XjhzWKwxESJeWOMTixHAJYM3INDVkxHAXSWeEOJAle9QcOWeEbMQEaw3WKvbWaFgka/zWKw6WxMDEbv8kxHAWxM0ESGeIBFQcO=1XBFgkNDgc0UYIj9QcO1xESu0XjhzWKwxESJeWOMTixHA=bwxiqU5Ij9QcO1xESu0XjhzWKwxESJeWOMTixHA=S1eiqU5Lj9QcO1xESu0XjhzWKwxESJeWOMTixHAEbsqiqU5IaUn=3NCJPpg80AwkxHAWSNbWbNbIBUn5YjqRj9QcOi1WSWPJxezWKwxESJeWOMnkxHAWlpmJlR6le9QcOi1WSWPJqw3WKwx=tM3IahzWKwq=OsxE0WTixHAJlJ3INDTkxHAWxJQXlJqle9QcOi1WSWPJqw3WKvbXOF3INDVkxHAWSim=lMALBj8ka1nzkeU8KEURj9QcOpbWx5mJehzWKwxESJeWOMTixHAW0pUiq1dkxHAWxM0ESGeIBFQctjYiqU5Ij9QcO1xESu0XjhzWKwxESJeWOMTixHAEx1AiqU5Lj9QcOEbXSEUEBQvleDgXPezWKwDJxWPJYE8kxHAWxM0ESGeIBFQctR0iqU57l=e8YEDol2CIBUn5YjqRj9QcOseEOHbESezWKwxESJeWOMnolJTkxHAWxJQXlJqle9QcOseEOHbEaw3WKvbExu3INDTkxHAWxJQXlJqle9QcOseEOHbEaw3WKvbEYu3INDVkxHAWxJQXlJqle9QcOseEOHbEaw3WKvbEYu3INDgIkhY5l6b5tU48mHzWKwxExEb=lRTIkh0JkRwkxHAWxU1WO1A7N9QcOseEOHbEa/zWKwDEOjbExG25tvgFehzWKwxXluQXSwTixHAEOM6iqU5le9QcOW6=OG6XBw3WKvUWYR3INDTLehcktp5L0FViqFgle9QcOW6=OG6XBw3WKvU=bR3INDTWKwQLOHAEB1n5tvgFehzWKwxXluQXSwTixHAEOM6iqU57N9QcOuDWlWPWOh2zlNVF0Nn5YjqRj9QcOuxEOwxWbeDotUxle9QcOseEOHbEaw3WKwDES13INe8kxHAWSMDWtWeIBFQctMqJmFgkaw4ksu4=qQ3iq1nolJTkxHAWxJQXlJqle9QcOseEOHbEaw3WKwAXSJ3INDTWKwxLj9QcOuxEOwxWUhzWKw/ESuQJxMTixHA=bFQiqU5IaUnolJTkxHAWxJQXlJqle9QcOseEOHbEaw3WKwqJbW3INDTkxHAWxJQXlJqle9QcOseEOHbEaw3WKvm=bR3INDVkxHAWxJQXlJqle9QcOseEOHbEaw3WKvm=bR3INDgIN9QcOW0WOUYWUhzWKw/ESuQJxMTixHAJx1DiqU5Ij9QcOibEtEUWq/zWKwDWxuAWxRgX0NVF0Nn=3NCJPpg80AwkxHAESi1XSFeIBUn5YjqRj9Qct=vJSJ0=bezWKw/ESuQJxMnJ02CFPuwkxHAWbw6Else7N9QcORxWOUYJehzWKvYJls0EYJTixHAXtRDiq1dkxHA=YjvEb=YIBFQcOsQEmFgkk/9kxHAW0RxJlsele9Qct=vJSJ0=mw3WKvUJbM3IahzWKvYJls0EYJTixHA=bvbiqU5le9Qct=vJSJ0=mw3WKv1WtJ3INDnkxHAWbw6Elsele9Qct=vJSJ0=mw3WKwPExR3INDTIa/zWKwqXO1eJSN8kxHA=YjvEb=YIBFQctReEqFgkavzWKwD=tNUEOJgLj9QcORAXSNvENhzWKvYJls0EYJTixHAWlJ/iqU5IB1VkxHAWxJQXlJqle9Qct=vJSJ0=mw3WKwAXSW3INDTkxHAJb5UWxMALj9QcORAXSNvEa1VkxHAWxJQXlJqle9Qct=vJSJ0=mw3WKw0=Ss3INDTkxHAESuPWxpmLj9QcOMDJYEbJm/zWKwqXO1eJSMgXPe2zke2X0=e8YEDol2CRj9QcOEbXSEUEBwgcP=vFmHzWKw/JYE1Els2kxHAWxM0ESGeX0UYIj9QcO1xESu0XjhzWKw/JYE1ElsTixHAWbRAiqU5Ij9QcO1xESu0XjhzWKw/JYE1ElsTixHAElJxiqU5Lj9QcO1xESu0XjhzWKw/JYE1ElsTixHAE0WxiqU5IaUn=3NCJPpg80AwkxHAEOEUJ0EYIBUn5YjqRj9QctpbXOs0WSezWKw/JYE1ElsnolJTkxHAEtsAEbJqIkiU5KNq8bhzWKwDESWqWbF2Raj8kShb806x5BHzWKweESWPExF2kxHAEO1eJlJ0le9QctpbXOs0Waw3WKwAEOM3IahzWKv1Jxw/EbsTixHAJYjmiqU5Ij9QcOW0WOUYWUhzWKv1Jxw/EbsTixHAXSRqiqU5Ia/zWKwxWbJAEYR2kxHAWlpmWbHble9QctpbXOs0Waw3WKwAEOM3IahzWKv1Jxw/EbsTixHAJYjmiqU5Ij9QcOW0WOUYWUhzWKv1Jxw/EbsTixHA=lMxiqU5IShg=mvzWKweESWPExFgkxHAWxJQXlJqle9QctpbXOs0Waw3WKw0=tu3INDTkxHAW0WqJSjYLj9QcOMeWxFPEq1VkxHAWxJQXlJqle9QctpbXOs0Waw3WKw0=tu3INDTkxHAWSRPJYMALj9QcOMeWxFPEq1n=l/x=khg=mvzWKwxWbJAEYRgkxHAWxJQXlJqle9QctpbXOs0Waw3WKvUXOF3INDTkxHAEluPJSGALj9QcOWqEbw0Jm1VkxHAWxJQXlJqle9QctpbXOs0Waw3WKvbWYu3INDTkxHAWYs0E0MQLj9QcOWqEbw0Jm1n=l/x=kh2zke2=l/x=kh0JkRwkxHAWxs0Etpm7kpTokE8kxHAWlib=ONvIBFQcOueXaFgkNhzWKw/JYE1ElsTixHA=SimiqU5IB28kU/1ka23LBF3INhzWKw/JYE1ElsTixHA=lJqiqU5IOHAWBQQcOugXPpTokE8kxHAWlib=ONvIBFQcOueXaFgkSezWKwxWSJD=tRnzkeg=mv180Ee8lNC5jhzWKwxESJeWOMTixHAXOueiq1dkxHAWxM0ESGeIBFQctivJmFgkavzWKw6WxMDEbv8kxHAWxM0ESGeIBFQcOuQ=aFgka1gcP=vFmHzWKwDEOuq=SG2=t2b5leU83p8kxHAWxM0ESGeIBFQcOwDEaFgIe9QcOWeEbMQEaw3WKvmJlR3INDTkxHAXSWeEOJAle9QcOWeEbMQEaw3WKwDWtM3INDgX0=4Fmv0JkRwkxHAWbFAWxG/RtUCle9QcO1xESu0XjhzWKwxESJeWOMTixHAEx1AiqU5Lj9QcO1xESu0XjhzWKwxESJeWOMTixHAJYM3INDVkxHAXSWeEOJAle9QcOWeEbMQEaw3WKvbWaFgka/zWKw6WxMDEbv8kxHAWxM0ESGeIBFQcO=1XBFgkNDgc0UYIj9QcO1xESu0XjhzWKwxESJeWOMTixHAXOG0iqU5Ij9QcO1xESu0XjhzWKwxESJeWOMTixHA=OsDiqU5Lj9QcO1xESu0XjhzWKwxESJeWOMTixHA=OsDiqU5IaUn=3NCJPpg80AwkxHAEOu0XSuqIBUn5YjqRj9QcONvXtJPXSezWKwxESJeWOMVkxHAWbj1=OM07kpTokE8kxHAElsA=bF6IBFQcOueXaFgkNhzWKweJSvYEx1TixHA=SimiqU5IB2FpB23LBF3IShzWKw6WxMDEbv8kxHAElsA=bF6IBFQctM/EBFgkavzWKwxXlEmJxFVkxHAWbj1=OM0ISh2zlNVF0MwkxHAEOuDWYMQle9QcOWeEbMQEaw3WKwx=tM3IahzWKwxESJeWOMTixHAJlJ3INDTkxHAXSWeEOJAle9QcOWeEbMQEaw3WKwPXSw3INDVkxHAWlMQ=tpYLBj8ka1nzl=e8YEDol2CRj9QcOjUWtp1=mwgcP=vFmHzWKwe=lNYEbu2kxHAWxM0ESGeX0UYIj9QcO1xESu0XjhzWKwe=lNYEbuTixHAWbRAiqU5Ij9QcO1xESu0XjhzWKwe=lNYEbuTixHA=YWPiqU5Lj9QcO1xESu0XjhzWKwe=lNYEbuTixHA=YWPiqU5IaUn5YjqRj9QcOpYXOWqWSeDotUxle9QcONU=lJ0EBw3WKwDES13INe8kxHAElNU=bJDIBFQctMqJmFgkaw4le6F=jD4=qQ3iqU8kxHAElNU=bJDIBFQctNYWmFgkawQcOGVWKwDIShzWKwD=bwxWbs2kxHAXSWeEOJAle9QcONU=lJ0EBw3WKw/=mFgkavzWKwD=bwxWbsViqFg7e9QcOpYXOWqWNhzWKwe=lNYEbuTixHAWYjmiqU5IB9CcxsVW3D4=qU8kxHAElNU=bJDIBFQcOwAWBFgkavzWKw6WxMDEbv8kxHAElNU=bJDIBFQctu0EBFgka1+iqFV5tvgFehzWKwe=lNYEbuTixHAEOM6iqU57N9QcOpYXOWqWSh2=l/x=khY5l6b5tU48mHzWKwD=tJPEtRTIkh0JkRwkxHAEOwPElW/7N9QcONU=lJ0EOhzWKv1JSvm=lN8kxHAEOwPElW/IBFQcOMDJaFgkNhzWKwDXOFeJxsTixHA=OEUiqU5Ij9QcOuDEbRDWq1nzke2kxHAEOuDWYMQle9QcOWeEbMQEaw3WKvmEmFgkSeY5l6b5tU48mwgcP=vFmHzWKweEl=vWlR2kxHAWxM0ESGeX0UYIj9QcO1xESu0XjhzWKweEl=vWlRTixHAJYuQiqU5Ij9QcO1xESu0XjhzWKweEl=vWlRTixHA=SvmiqU5Lj9QcO1xESu0XjhzWKweEl=vWlRTixHAJ0MDiqU5IaUnolJTkxHAXSWeEOJAle9QcOMe=Ys/Jmw3WKwPJSs3INDT5tvgFehzWKweEl=vWlRTixHAEOM6iqU5le9QcOMe=Ys/Jmw3WKvYExG3INDVWKw/IaJYkxHAXSWeEOJAle9QcOMe=Ys/Jmw3WKvYJYs3INDT5tvgFehzWKweEl=vWlRTixHAEOM6iqU5LOHAWa1gc0UYIj9QcO1xESu0XjhzWKweEl=vWlRTixHAJYuQiqU5Ij9QcO1xESu0XjhzWKweEl=vWlRTixHAWlu3INDVkxHAXSWeEOJAle9QcOMe=Ys/Jmw3WKw/=BFgka1gc0=e8YEDol2CRj9QcOjbEtRDJawgcP=vFmHzWKwx=ljmW0R2kxHAESNYJSjmX0UYIj9QcOW0WOUYWUhzWKwx=ljmW0RTixHA=ljbiqU5IKpTokE8kxHAW0NvJbEmIBFQcOueXaFgkNhzWKwx=ljmW0RTixHA=bFQiqU5LOHAWB1gcP=vFmHzWKw/JYpv=tJ25tvgFehzWKwx=ljmW0RTixHAEOM6iqU5le9QcOEUJlRxJmw3WKvUWYR3INDTLe/sL0FViqFgXe9QcOW0WOUYWUhzWKwx=ljmW0RTixHAJxvbiqU5Ij9QcOMQWSWe=B/DotUxle9QcOEUJlRxJmw3WKwDES13INDgXPe2zlNVF0Mw5tvgFehzWKweEl=vWlRTixHAEOM6iqU57N9QcO1xESu0XjhzWKweEl=vWlRTixHAExM3INDTixG3LKpTokE8kxHAESNYJSjmIBFQcOueXaFgka1nzkeU8KEUc0=e8YEDol2CRj9QcONUXtu6Jmwgce9QcORA=ORPWODvleDnzke2XPe2J02CFPuwkxHA=OuAW0sD7N9QcOsDElW6JxDZcP=vFmHzWKwxJ0sD=SR2kxHAWbUm=OW/Lj9QctMDWbF6JxenzShzWKvUEORPXlE8kxHAW0EvEtMqIBFQctiUJqFgkSeY5l6b5tU48mvzWKwxJbivJlMVkxHAWSs0Wb1DIkh0JkRwkxHAEO5bJxR07N9QcOEbJSpUWbhq=kpeFYAwkxHAEOFPEORQle9QcOuPJ0WqEmw3WKw6JxR3INDTkxHAW0RqJljULj9QcOs/EbR6EB1nza/zWKvUEORPXlE8kxHAW0EvEtMqIBFQctiYEBFgkSeY5l6b5tU48mvzWKvUE0iU=m/zWKv1JbEmJb1gcP=vFmHzWKw/WSu/WxG2kxHAW0EvEtMqXPiU5KNq8mHzWKwDExFDWbH8kxHAWSsDWSWQIBFQctsAXBFgkavzWKvUE0iU=m/zWKv1JbEmJb1gXPDVkxHA=SuqExUble9QcOEbJSpUWmw3WKwP=b13IND2=3NCJPpg80ATkxHAEOUbJb=YLj9QcOiYWlW0EqUn5YjqRj9QcOsAJbwDEOezWKwxJ0sD=SRnFYND5kiCRj9QcOuPExuqWjhzWKw/XtRAEOuTixHAXlWqiqU5Ij9QcOu6J0R0=m/zWKwq=bjbEbFgXPDVkxHA=SuqExUble9QcOEbJSpUWmw3WKvvJqFgkSezWKwDExFDWbH8kxHAW0EvEtMqIBFQctJxXaFgka/zWKvUEORPXlE8kxHAW0EvEtMqIBFQctEYEqFgkSeY5l6b5tU48mvzWKwDJb=U=tRVkxHAWYNbWti1Ikh0JkRwkxHAEt=mJlWx7N9QcOEbJSpUWbhq=kpeFYAwkxHAEOFPEORQle9QcOpYJYjbWqw3WKwDJ0W3INDTkxHAEtR0=lpmLj9QcOiUJxHm=B1nza/zWKvUEORPXlE8kxHAW0EvEtMqIBFQctueJaFgkSezWKwDExFDWbH8kxHAW0EvEtMqIBFQcti1EaFgka/zWKvUEORPXlE8kxHAW0EvEtMqIBFQcOsAWBFgkSezWKwDExFDWbH8kxHAW0EvEtMqIBFQcOMqWaFgka/zWKvUEORPXlE8kxHAW0EvEtMqIBFQctNmJqFgkSezWKwDExFDWbH8kxHAW0EvEtMqIBFQcOsQWmFgka/zWKvUEORPXlE8kxHAW0EvEtMqIBFQcOUUEBFgkSeY5l6b5tU48mvzWKweWbuAXluVkxHAEOE1EYMeIkh0JkRwkxHAWxue=OEU7N9QcOEbJSpUWbhq=kpeFYAwkxHAEOFPEORQle9QcOWDElux=aw3WKvbWSF3INDTkxHAESRDXOU1Lj9QcOux=O=UEa1nza/zWKvUEORPXlE8kxHAW0EvEtMqIBFQctEvEBFgkSezWKwDExFDWbH8kxHAW0EvEtMqIBFQctuQEqFgka/zWKvUEORPXlE8kxHAW0EvEtMqIBFQcOFAEmFgkSeY5l6b5tU48mvzWKweWlu0EYWVkxHAESFPJlReIkh0JkRwkxHAEtsAJYjY7N9QcOEbJSpUWbhq=kpeFYAwkxHAEOFPEORQle9QcOpvXtiv=mw3WKwDJ0W3INDTkxHAESj1Eb=bLj9QcOMPE0jmEa1nza/zWKvUEORPXlE8kxHAW0EvEtMqIBFQctWA=BFgkSeY5l6b5tU48mvzWKw/JxjbWx1VkxHAEOF6Elu6Lj9QcOEUJ0RPEmUn5YjqRj9QcOEvWSWDJxezWKwxJ0sD=SRnFYND5kiCRj9QcOuPExuqWjhzWKwxJSsxEtWTixHAEtR6iqU5Ij9QcOjbWlWxXa/zWKwDEx1e=O1VkxHAW0NbJbF0ISh2Lj9QctMDWbF6JehzWKwxJ0sD=SRTixHAEbN1iqU57l=e8YEDol2CIj9QcOiUXSJDWB/zWKw/EOWQWbRgcP=vFmHzWKwe=S=vEOR2kxHAW0EvEtMqXPiU5KNq8mHzWKwDExFDWbH8kxHAElM0JSuqIBFQcti1JaFgkavzWKwq=S10EOGVkxHAWSuxWORqISh2Lj9QctMDWbF6JehzWKwxJ0sD=SRTixHAESJqiqU57N9QcOuPExuqWjhzWKwxJ0sD=SRTixHAJbU1iqU5Lj9QctMDWbF6JehzWKwxJ0sD=SRTixHAJ0WQiqU57N9QcOuPExuqWjhzWKwxJ0sD=SRTixHA=YM6iqU5Lj9QctMDWbF6JehzWKwxJ0sD=SRTixHAEtWeiqU57N9QcOuPExuqWjhzWKwxJ0sD=SRTixHAJS1xiqU5Lj9QctMDWbF6JehzWKwxJ0sD=SRTixHAWxUYiqU57N9QcOuPExuqWjhzWKwxJ0sD=SRTixHAJxF/iqU5Lj9QctMDWbF6JehzWKwxJ0sD=SRTixHAJYMqiqU57N9QcOuPExuqWjhzWKwxJ0sD=SRTixHAWYimiqU5Lj9QctMDWbF6JehzWKwxJ0sD=SRTixHA=OM0iqU57N9QcOuPExuqWjhzWKwxJ0sD=SRTixHAJb=UiqU5XP=vFmHzWKw/EbUvExR2kxHA=SuqExUbX0UYIj9QcOuPExuqWjhzWKwxJ0sD=SRTixHAWSw3INDTkxHAEOFPEORQle9QcOEbJSpUWmw3WKweESR3INDVkxHAEOFPEORQle9QcOEbJSpUWmw3WKweESR3INDgIkhY5l6b5tU48mHzWKwDJ0JAJYuTIkh0JkRwkxHAWb1x=S5Y7N9QcOEbJSpUWm/zWKw/JxR/JxW2cPDnkxHAWlWqWlWxle9QcOR6W0MP=mw3WKvYEBFgkSeY5l6b5tU48mvzWKwq=SUmXlMVkxHAEORq=bMqIkh0JkRwkxHAESMxW0p17N9QcOR6W0MP=bhq=kpeFYAwkxHAWSJ6JSFqle9QcOMeWxE1=Bw3WKvm=lW3INDTkxHAWYM6JbUULj9QcOuqWYJeWm1nzSh0JkRwkxHAWlWD=YJ/7N9QcOjbWbjbWxhb806x5BHzWKwxWluQWlJ28YNPRj9QcOs6=OuQJawTISDZcP=vFmHzWKwxEb1DExJ2kxHAWb1x=S5YXe9QcOjbEt=YWNhzWKwxEb1DExJTixHA=bu3INDTkxHAEOsDWbFqLj9QcONmJx=vEB1nza1n5YjqRj9QcOjmWOw/XSenzShzWKw/JbGAWSU8kxHAWb1x=S5YIBFQcOwD=aFgkSDvRNh5Lj9QcOjmWOw/XNhzWKwqXSEUE0JTixHAWSMPiqU57asvleDVkxHAWxj1WOjYle9QcOR6W0MP=mw3WKwAWxu3INDTkxHAWSGqJxw/Lj9QcOjmWOw/Xa1nzkeU8KEUc0/U5BHzWKwPEluPExwVkxHAESvbJxJDXP=vFmHzWKweE0We=bJ2kxHAEOFPEORQle9QcOEbJSpUWmw3WKvm=O13INDnolJTkxHAEOFPEORQle9QcOEbJSpUWmw3WKvvJ0J3INDTkxHAWSueJxUblq5g=B55Lj9QcOuPExuqWjhzWKwxJ0sD=SRTixHAXOGxiqU5IaUnolJTkxHAEOFPEORQle9QcOEbJSpUWmw3WKvvJ0J3INDTkxHAEOFPEORQle9QcOEbJSpUWmw3WKwDElR3INDVkxHAEOFPEORQle9QcOEbJSpUWmw3WKwDElR3INDgIkhzWKwPEluPExw2ukiqJkU8kxHAW0EvEtMqIBFQcOse=mFgkavzWKw/EONbXlE8kxHAW0EvEtMqIBFQcOwDEaFgIe9QcOEbJSpUWmw3WKweExJ3IaV38lM3kavzWKwDExFDWbH8kxHAW0EvEtMqIBFQctjbJqFgka1gLj9QcOMAJ0W0EOe180Ee8lNC5jhzWKwxJ0sD=SRTixHAXOueiq1dkxHAW0EvEtMqIBFQcOMPEmFgIq5h=a55Ij9QcOuPExuqWjhzWKwxJ0sD=SRTixHA=Si1iqU5INVQcOH5X0UYIj9QcOuPExuqWjhzWKwxJ0sD=SRTixHAJSvYiqU5Ij9QcOMAJ0W0EjhzWKwxJ0sD=SRTixHAEtJeiq1di06DieDV83NV8B1gc0UYIj9QcOuPExuqWjhzWKwxJ0sD=SRTixHAWSF/iqU5Ij9QcOuPExuqWjhzWKwxJ0sD=SRTixHAXSuDiqU5Lj9QcOuPExuqWjhzWKwxJ0sD=SRTixHAWbRqiqU5IaUn5YjqRj9QcOW0=tuqEbe180Ee8lNC5jhzWKwxJ0sD=SRTixHAXOueiq1dkxHAW0EvEtMqIBFQcOMPEmFgIq5h=a55Ij9QcOuPExuqWjhzWKwxJ0sD=SRTixHA=Si1iqU5INVQcOj5X0UYIj9QcOW0=tuqEmJYkxHAEOFPEORQle9QcOEbJSpUWmw3WKw/Exs3INDTkxHAWx=1=OR0le9QcOEbJSpUWmw3WKwD=bM3IaV383u3ka/C5l/VIaUnolJTkxHAEOFPEORQle9QcOEbJSpUWmw3WKw/Exs3INDTkxHAEOFPEORQle9QcOEbJSpUWmw3WKw6WxW3INDVkxHAEOFPEORQle9QcOEbJSpUWmw3WKw6WxW3INDgIkhY5l6b5tU48mHzWKw/EYWe=tuTIkh0JkRwkxHAWlsA=lMe7N9QcOEbJSpUWm/zWKwqElRDE0R25tvgFehzWKw/JSvU=SMTixHAEOM6iqU5le9QcOjvXtNUEaw3WKvUWYR3INDTLe/sL0FViqFgXe9QcOs0XlsPWUhzWKw/JSvU=SMTixHAJYJDiqU5Ij9QcONm=lpv=NhzWKw/JSvU=SMTixHAWluDiqU5Lj9QcOReJbuPJUhzWKw/JSvU=SMTixHA=bFQiqU5IaJYkxHAWSJ6JSFqle9QcOjvXtNUEaw3WKwP=b13INDTkxHAEOG/W0JALj9QcOReJbuPJm1nzkeU8KEURj9QcOMAJ0W0EOezWKwxEYp1WbJnzlNVF0NnolJTkxHAEOFPEORQle9QcOEbJSpUWmw3WKwq=OG3INDTkxHAEOFPEORQle9QcOEbJSpUWmw3WKw0ElM3INDVkxHAEOFPEORQle9QcOEbJSpUWmw3WKw6W0M3INDgIN9QcOMAJ0W0EOe180Ee8lNC5jhzWKwxJ0sD=SRTixHAXOueiq1dkxHAW0EvEtMqIBFQcOMPEmFgIq5h=a55Ij9QcOuPExuqWjhzWKwxJ0sD=SRTixHA=Si1iqU5INVQcOH5X0NVF0Nn=3NCJPpg80AwkxHAXS1A=t=mIBUn5YjqRj9QcORPWbiUXSezWKwxJ0sD=SRnkxHAXSWeEOJAle9QcORPWbiUXaw3WKwxWxs3INDTkxHAEtN1WtpmLjhzWKw6WxMDEbv8kxHAWbFqWYM6IBFQcOWe=aFgka/zWKw6WxMDEbv8kxHAWbFqWYM6IBFQcOFQJaFgka/zWKw6WxMDEbv8kxHAWbFqWYM6IBFQctNmEqFgkNDgXPe2zkeU8KEUc0=e8YEDol2CRj9QctsqXSpbEmwgcP=vFmHzWKvYWbMqJ0M2kxHAW0EvEtMqLj9QcOUUXSs0JxenzShzWKw6=S1/EYE8kxHA=bReWYEUIBFQcOsPXBFgkSezWKw6WxMDEbv8kxHA=bReWYEUIBFQctpb=aFgka/zWKw6=S1/EYE8kxHA=bReWYEUIBFQctNm=aFgkSezWKw6WxMDEbv8kxHA=bReWYEUIBFQcOMPEBFgka/zWKw6=S1/EYE8kxHA=bReWYEUIBFQcOFeJaFgkSeY5l6b5tU48mvzWKwe=SuAWYMVkxHAWbWP=SUvIkh0JkRwkxHAWSuQXSF67N9QctJqESib=Shq=kpeFYAwkxHAXSWeEOJAle9QcOsDWO1PXaw3WKwxWxs3INDTkxHAElMDXOiULj9QcORxE0M6Ja1nzSh0JkRwkxHAWbpUEOJP7N9QcOUUXSs0Jxhb806x5BHzWKwx=YJ/XSM28YNPRj9QcOi1WxsQEqwTISDZcP=vFmHzWKwqWS=vWbF2kxHA=bReWYEUX0E483EDRj9QcOMqEYJDXOezWKwxWtMAWSU8kxHAWbs0JSRPIBFQcOwDEaFgIe9QcOR/EYsqEqw3WKvmJlR3INDTkxHAWbpUEOJPle9QcOR/EYsqEqw3WKw/Exw3INDgLj9QcOM6=SsxWbezWKwDESUv=Yi8kxHAWbs0JSRPIBFQcOwDEaFgIe9QcOR/EYsqEqw3WKvmJlR3INDTkxHAWbpUEOJPle9QcOR/EYsqEqw3WKvUJYM3INDgX0UYIj9QcOMqEYJDXBUzWKwqEtMDEb58kxHAWbs0JSRPIBFQcOFeJaFgkavzWKweJxGDJYuVkxHAESR0=buAIShU8KEURj9QcOM6=SsxWmJYkxHAWbpUEOJPle9QcOR/EYsqEqw3WKwPEls3INDTkxHAWxw6=bjbLj9QcOM6=SsxWm1nza1n5YjqRj9QcOu6XOFq=OenzShzWKwDXSwPWYp8kxHA=bReWYEUIBFQcOwD=aFgkSDvRNh5Lj9QcOu6XOFq=jhzWKvYWbMqJ0MTixHAWSMPiqU57asvleDVkxHAW0=YWS1ele9QctJqESib=aw3WKwAWxu3INDTkxHAEO1qXlivle9QctJqESib=aw3WKwDXtu3INDVkxHAEO1AExi1ISh2zke2=l/x=khY5l6b5tU48mHzWKw/E0JeE0sTIkh0JkRwkxHAWljvWOsA7N9QcOEbJSpUWm/zWKw0JxwAXtM25tvgFehzWKw/JlsQWSwTixHAEOM6iqU5le9QcOjvJSG/XBw3WKvUWYR3INDTLehcktp5L0FViqFgle9QcOjvJSG/XBw3WKvU=bR3INDTWKwQLOHAEB1nkxHAEYWAXOvU7N9QcO1xESu0XjhzWKw/JlsQWSwTixHAWbw/iqU5Ij9QcO=bXOwA=aQ3iq1ykxHAEYWAXOvUle9QcOjvJSG/XBw3WKwqJlR3INDTLq6nWaQqza23INhzWKw/JlsQWSwTixHAXOwQiqU5Ij9QcO1xESu0XjhzWKw/JlsQWSwTixHA=OJDiqU5IST3iq/DotUxle9QcOjvJSG/XBw3WKwDES13IND2kxHAEYWAXOvUXPe2zlNVF0NnolJTkxHAEOFPEORQle9QcOEbJSpUWmw3WKvmWxR3INDTkxHAEOFPEORQle9QcOEbJSpUWmw3WKvbEbR3INDVkxHAEOFPEORQle9QcOEbJSpUWmw3WKw/Xts3INDgIkhzWKwPEluPExw2ukiqJkU8kxHAW0EvEtMqIBFQcOse=mFgkavzWKw/EONbXlE8kxHAW0EvEtMqIBFQcOwDEaFgIe9QcOEbJSpUWmw3WKvUWlM3INDTiPNViqU8WKwQkNhzWKwxJ0sD=SRTixHAXOueiq1dkxHAW0EvEtMqIBFQctM/=aFgkaw38t13Ia1VkxHAESvbJxJD7lp4JPNh=l6Dle9QcOEbJSpUWmw3WKwAEOM3IahzWKwxJ0sD=SRTixHAJYjmiqU5Ij9QcOuPExuqWjhzWKwxJ0sD=SRTixHA=OjviqU5IShg=mvzWKweXtEbEbp8kxHAW0EvEtMqIBFQcOMDJaFgkNhzWKwxJ0sD=SRTixHAJliviqU5Ij9QcOuPExuqWjhzWKwxJ0sD=SRTixHAXlsQiqU5IaJY=t2b5leU83p8kxHAW0EvEtMqIBFQcOwDEaFgIe9QcOEbJSpUWmw3WKvmJlR3INDTkxHAEOFPEORQle9QcOEbJSpUWmw3WKwPElM3INDgIkhg=mvzWKwDExFDWbH8kxHAW0EvEtMqIBFQctRxWmFgkavzWKwDExFDWbH8kxHAW0EvEtMqIBFQctEbEqFgka/zWKwDExFDWbH8kxHAW0EvEtMqIBFQctWQEqFgka1gkxHAESvbJxJD7lp4JPNh=l6Dle9QcOEbJSpUWmw3WKwAEOM3IahzWKwxJ0sD=SRTixHAJYjmiqU5Ij9QcOuPExuqWjhzWKwxJ0sD=SRTixHAExNUiqU5INhzWKwxJ0sD=SRTixHAXOueiq1dkxHAW0EvEtMqIBFQctM/=aFgkavzWKwDExFDWbH8kxHAW0EvEtMqIBFQctNvEqFgkaU8WKwQkShU8KEUc0=e8YEDol2CRj9Qctpm=OsxJawgcP=vFmHzWKwxWxGAXOG2kxHAW0EvEtMqXe9QcOueXOsxJSezWKwDXtMxWSv8kxHAWxWQXOwQIBFQcts/WBFgIe9QcOWxWOwAWBw3WKw0JYs3INDTkxHAXSWeEOJAle9QcOWxWOwAWBw3WKw/WOHviqU5Ia/zWKw/W0WqExH8kxHAWxWQXOwQIBFQcOMDJaFgkNhzWKwxWxGAXOGTixHA=OEUiqU5Ij9QcO1xESu0XjhzWKwxWxGAXOGTixHA=bJxiqU5IShb806x5BHzWKw/XluxJxu2kxHAWYJDJxsele9QcOWxWOwAWBw3WKweEts3INe8kxHAXSWeEOJAle9QcOWxWOwAWBw3WKwe=aFgkavzWKw/=ONv=SU8kxHAWxWQXOwQIBFQcOMDJaFgkNhzWKwxWxGAXOGTixHA=bFQiqU5LOHAWaU5Xe9QcOs6=OEbEBJYkxHAWxHvJYN1le9QcOWxWOwAWBw3WKweEts3INe8kxHAWxWQXOwQIBFQctux=aFgkavzWKw/XluxJxugLj9QcOsqWSF0JUhzWKwxWxGAXOGTixHAWY=Yiq1di0u3kavzWKwD=OJ/W0MgXPe2zkeU8KEUc0=e8YEDol2CRj9QcOpYWl=UEBwgcP=vFmHzWKwqWYjbWYM2kxHAW0EvEtMqLj9QcOMq=tux=bezWKw/=lMx=Sv8kxHAWbivJxiUIBFQcOwDEaFgIe9QcORqJlWq=aw3WKvmJlR3INDTkxHAXSWeEOJAle9QcORqJlWq=aw3WKvUWbR3INDgXe9QcOMq=tux=UhzWKwqWYjbWYMTixHAWlJ6iqU5le9QcORqJlWq=aw3WKw6XtJ3IND2kxHAXSWeEOJAle9QcORqJlWq=aw3WKwqW0W3INDVkxHAES5mEtWPle9QcORqJlWq=aw3WKvbXlJ3IahzWKwqWYjbWYMTixHAXtpmiqU57aj8ka/zWKweExw/ES58kxHAWbivJxiUIBFQcOueXaFgkSezWKw6WxMDEbv8kxHAWbivJxiUIBFQcO1D=mFgkSh2zkezWKwDJYsxWYN8kxHAW0EvEtMqIBFQcOi1EqFgIe9QcOEbJSpUWmw3WKwAJbs3IND2kxHAExN1ExFAX0=4FmvV=kuwkxHAWYEUElM67SHAWOhzWKwDExFDWbH8kxHAW0EvEtMqIBFQcOUU=mFgkavzWKwqJ0Me=S1VkxHAEtivWxiUle9QcOEbJSpUWmw3WKwq=OF3IahzWKwxJ0sD=SRTixHAXtR/iqU5le9QcOEbJSpUWmw3WKvYExG3INDgXe9QcOib=SNUXaVdIkhg=mvzWKwDExFDWbH8kxHAW0EvEtMqIBFQcO1AJaFgkavzWKwDExFDWbH8kxHAW0EvEtMqIBFQcO5mJaFgka/zWKwDExFDWbH8kxHAW0EvEtMqIBFQcOjUEaFgka1gc0=e8YEDol2CRj9Qcts/JSGD=awgcP=vFmHzWKwxElpUXSG2kxHAW0EvEtMqXe9QcOuPJlMAESezWKw/WlNvJ0E8kxHAWxN1=S1QIBFQcOwDEaFgIe9QcOWe=tM6WBw3WKweExJ3IaV38lM3kavzWKw/EbUvExi8kxHAWxN1=S1QIBFQctjbiqU5INVQcOH5Lj9QcO5mXOWeWehzWKwxElpUXSGTixHAJSFqiq1diPiUieDTkxHAESsA=YuQLj9QcOu0=tEmWa1nzkeU8KEUc0/U5BHzWKw/J0EUESw2kxHAEtivWxiUle9QcOEbJSpUWmw3WKwq=OF3IahzWKwxJ0sD=SRTixHAXtR/iqU5le9QcOib=SNUXNDnolJTkxHAEOFPEORQle9QcOEbJSpUWmw3WKwe=OG3INDTkxHAWbsxESwALj9QcOs/JYuAEB/zWKw/XSJDEOJVkxHAWlEb=SMAle9QcOEbJSpUWmw3WKwDJlJ3IaV35B55IaUnolJTkxHAEOFPEORQle9QcOEbJSpUWmw3WKvmWxR3INDTkxHAEOFPEORQle9QcOEbJSpUWmw3WKwA=bW3INDVkxHAEOFPEORQle9QcOEbJSpUWmw3WKwA=bW3INDgIkhY5l6b5tU48mHzWKw/WxpbXS1TIkh0JkRwkxHAWxHm=Oux7N9QcOEbJSpUWbhzWKw6WxMDEbv8kxHAWxHm=OuxIBFQctM0XBFgkavzWKw/WlsqJYE8kxHAWxHm=OuxIBFQctJPWBFgkaQQcORg7PpTokE8kxHAWxHm=OuxIBFQcOueXaFgkSezWKwAXS1A=tu+5tvgFehzWKwxWti1EOWTixHAEOM6iqU57N9QcO1xESu0XjhzWKwxWti1EOWTixHAExM3INDTkxHAXSWeEOJAle9QcOWQJYuDWqw3WKvvWxJ3INDTkxHAWbvmJSWPle9QcOWQJYuDWqw3WKvmElR3INDTWKwQLOHAWm1VkxHAXSWeEOJAle9QcOWQJYuDWqw3WKv1Ebu3INDgLj9QcOjmXSGD=UhzWKwxWti1EOWTixHAJbNmiqU5IOHAWm1gXPe2=l/x=khb806x5BHzWKwAXSwPJbM2ukiqJkU8kxHAW0EvEtMqIBFQcOse=mFgkavzWKw/J0EUESv8kxHAW0EvEtMqIBFQcOwDEaFgIe9QcOEbJSpUWmw3WKvUWlM3INDTkxHAEOFPEORQle9QcOEbJSpUWmw3WKvUJlJ3INDgIa/zWKwxWlN1EbG2kxHAXO1AE0Rele9QcOEbJSpUWmw3WKvmExM3INDTkxHAES1DWxEU7SAvkxHAEOs/XOs/le9QcOEbJSpUWmw3WKwqJSG3INDTkxHAES1DWxEUlq5g=B55Ia1nolJTkxHAEOFPEORQle9QcOEbJSpUWmw3WKv1Wb13INDTkxHAWxjU=OJQle9QcOEbJSpUWmw3WKvYExG3INDVWKwQIaUnolJTkxHAEOFPEORQle9QcOEbJSpUWmw3WKweW0M3INDTkxHAEOFPEORQle9QcOEbJSpUWmw3WKvmWOF3INDVkxHAEOFPEORQle9QcOEbJSpUWmw3WKvUXO13INDgIkhY5l6b5tU48mHzWKweJSsQJxWTIkh0JkRwkxHA=OWqES=v7N9QcOEbJSpUWbhzWKwxWlNbXSi8kxHA=OWqES=vIBFQcOwDEaFgIe9QctuxWbM0Jaw3WKvUWlM3INDTiPG3INVQcOH5le9QctuxWbM0Jaw3WKwqWlM3IND2iqFnzkeU8KEURj9QcOjbJxU1JSezWKwDExFDWbH8kxHAW0EvEtMqIBFQctNv=mFgka/zWKwDExFDWbH8kxHAW0EvEtMqIBFQcOpmXaFgkavzWKw/WluxXO1VkxHAESvbJxJDLj9QcOjbJ0MeXB1nzlNVF0NnolJTkxHAEOFPEORQle9QcOEbJSpUWmw3WKweW0M3INDTkxHAEOFPEORQle9QcOEbJSpUWmw3WKvmWqFgka/zWKwDExFDWbH8kxHAW0EvEtMqIBFQcOsA=mFgka1gc0=e8YEDol2CRj9QcOiUWxjvXBwgcP=vFmHzWKw/JSJDJxW2kxHAW0EvEtMqXe9QctsxESsPJNhzWKw/JSJDJxWTixHAJxvviq1di0J3kSDvleDn8tNDRj9QcOue=Ysq=SezWKwxJxWPESE8kxHAWls0EtWxIBFQcts/WBFgIe9QcOjvEbpbWqw3WKw0JYs3INDTkxHAXSWeEOJAle9QcOjvEbpbWqw3WKw/WOHviqU5IShzWKwDEl=vWYN8i0U1ieD2kxHAEtpmEbJQLj9QcOue=Ysq=NhzWKw/JSJDJxWTixHA=SNviqU57N9QcO1xESu0XjhzWKw/JSJDJxWTixHAWSv1iqU5Lj9QcOpmWOsDWehzWKw/JSJDJxWTixHAXOueiq1dkxHAWls0EtWxIBFQctivJmFgkavzWKw6WxMDEbv8kxHAWls0EtWxIBFQctjbEBFgkaU8kxHAWls0EtWxIBFQcOwAiqU5Ij9QcOue=Ysq=a1n8tNDRj9QcOibJl=mJxezWKwxJbw0=tE8kxHAWls0EtWxIBFQcts/WBFgIe9QcOjvEbpbWqw3WKw0JYs3INDTkxHAXSWeEOJAle9QcOjvEbpbWqw3WKw/WOHviqU5IShzWKwqJ0jYJYE8kxHAWls0EtWxIBFQctMeJaFgkSezWKw6WxMDEbv8kxHAWls0EtWxIBFQcOp1XBFgka/zWKwxWOHYWOU8kxHAWls0EtWxIBFQcOwDEaFgIe9QcOjvEbpbWqw3WKvmJlR3INDTkxHAXSWeEOJAle9QcOjvEbpbWqw3WKv1ESG3INDgle9QcOjvEbpbWqw3WKwAXBFgkavzWKwqJ0jYJYWgX0/U5BHzWKwqEOW6=YJ2kxHAESuqJbJ/le9QcOjvEbpbWqw3WKvvWSG3IahzWKw/JSJDJxWTixHAEYiviqU5Ij9QcO1xESu0XjhzWKw/JSJDJxWTixHAWSGQJaFgka1nkxHAWbuxXl=Yle9QcOjvEbpbWqw3WKvUEls3IND2kxHAXSWeEOJAle9QcOjvEbpbWqw3WKvUWts3INDVkxHAEt=b=lMQle9QcOjvEbpbWqw3WKwAEOM3IahzWKw/JSJDJxWTixHAJYjmiqU5Ij9QcO1xESu0XjhzWKw/JSJDJxWTixHAWbsPiqU5INhzWKw/JSJDJxWTixHAXOw3INDTkxHAWbuxXl=YIa/zWKwe=buPJSH8kxHAWls0EtWxIBFQcOwDEaFgIe9QcOjvEbpbWqw3WKvmJlR3INDTkxHAXSWeEOJAle9QcOjvEbpbWqw3WKvvJxu3INDgle9QcOjvEbpbWqw3WKw/=b13INe8kxHAWls0EtWxIBFQcOjUJqFgkSezWKw6WxMDEbv8kxHAWls0EtWxIBFQctR0EaFgka/zWKwDEtjmWO58kxHAWls0EtWxIBFQcOwDEaFgIe9QcOjvEbpbWqw3WKvmJlR3INDTkxHAXSWeEOJAle9QcOjvEbpbWqw3WKv1ESG3INDgle9QcOjvEbpbWqw3WKw/=b13INe8kxHAWls0EtWxIBFQcOjUJqFgkSezWKw6WxMDEbv8kxHAWls0EtWxIBFQctR0EaFgka/zWKwxJlWqWtN8kxHAWls0EtWxIBFQcOwDEaFgIe9QcOjvEbpbWqw3WKvmJlR3INDTkxHAXSWeEOJAle9QcOjvEbpbWqw3WKwqWSF3INDgle9QcOjvEbpbWqw3WKw/=b13INe8kxHAWls0EtWxIBFQcOjUJqFgkSezWKw6WxMDEbv8kxHAWls0EtWxIBFQctR0EaFgka/zWKw6WxMDEbv8kxHAWls0EtWxIBFQcts/XBFgkavzWKwDEOReXSugLj9QcO1xESu0XjhzWKw/JSJDJxWTixHAJljUiqU5Ij9QcOuAXlW/=a/zWKwx=bWxJYRVkxHAW0JeJlR6Ia/zWKwqWtRQJY=8kxHAWls0EtWxIBFQcOE1=aFgIe9QcOjvEbpbWqw3WKvv=mFgkavzWKw6WxMDEbv8kxHAWls0EtWxIBFQctMAWBFgka/Y5l6b5tU48mwgcP=vFmHzWKwDXOuqWxs2kxHAWls0EtWxXe9QcOs0XlsPWUhzWKwDXOuqWxsTixHAJ0JPiqU5Ij9QcOivW0Nm=m/8kxHAWSJ6JSFqle9QcOuAEORxWaw3WKv1Els3INDVkxHAWSJ6JSFqle9QcOuAEORxWaw3WKw/XOG3INDVkxHAWSJ6JSFqle9QcOuAEORxWaw3WKvUJYW3INe5ISh2LBj8ka1nzkeU8KEUce9QcOjbJxU1JSezWKwDExFDWbH8kxHAW0EvEtMqIBFQctsD=aFgkShg=mwvkxHAEOFPEORQle9QcOEbJSpUWmw3WKwDWOw3INDTkxHAXtiUJ0sDLj9QcOjbJ0MeXB1gc0UYIj9QcOuPExuqWjhzWKwxJ0sD=SRTixHAXts3INDTkxHAEOFPEORQle9QcOEbJSpUWmw3WKwAXSG3INDVkxHAEOFPEORQle9QcOEbJSpUWmw3WKwAXSG3INDgIkhY5l6b5tU48mHzWKwxWYsPWYWTIkh0JkRwkxHAEluAWlRq7N9QcOEbJSpUWbhzWKw6WxMDEbv8kxHAEluAWlRqIBFQctJAWqFgkavzWKw/WS5vXOU8kxHAEYEUJYu/kaQ3WBFg7qvzWKweEbpUWSud7N9QcOW6WtNvEjhzWKwxXOvUExj5Lj9QcOs0JxsD=mVdISgzWKwx=O1/WtJd7N9QctRAWb1/XNhzWKw/JbjYEt=5XPe2=l/x=khb806x5BHzWKwDW0iYJSw2=t2b5leU83p8kxHAW0EvEtMqIBFQcts/WBFgIe9QcOEbJSpUWmw3WKw0JYs3INDTkxHAEOFPEORQle9QcOEbJSpUWmw3WKvUJlJ3INDgXe9QcOuxJY=vXjV3olu3kSezWKwe=bp1JbsVkxHAEOEm=YsAle9QcOEbJSpUWmw3WKw/=b13INe8kxHAW0EvEtMqIBFQcO1P=BFgkSezWKwDExFDWbH8kxHAW0EvEtMqIBFQctNmXaFgka/zWKwDW0iYJSv8kxHAW0EvEtMqIBFQcOjYXaFgkNhzWKwxJ0sD=SRTixHAExMDiqU57N9QcOuPExuqWjhzWKwxJ0sD=SRTixHA=SNmiqU5Lj9QcOuxJY=vXjhzWKwxJ0sD=SRTixHAWlJ6iqU5le9QcOEbJSpUWmw3WKwDEx13IND2kxHAEOFPEORQle9QcOEbJSpUWmw3WKvmXlu3INDVkxHAEOEm=YsAle9QcOEbJSpUWmw3WKw/EOJ3IND2=3NCJPpg80ATIkh0JkRwkxHAESsAXOu/7N9QcOEbJSpUWbhg=mvzWKw/EbUvExi8kxHAESsAXOu/IBFQcOUUEBFgkavzWKw/EbUvExi8kxHAESsAXOu/IBFQctEvEBFgka/zWKw/EbUvExi8kxHAESsAXOu/IBFQctEvEBFgka1gc0=e8YEDol2CRj9QcOivWYN1Eqwgce9Qcti1=OHmEqV2kxHAWbMq=bwPle9QcOiY=tR0JNDVkxHAWxFe=bwqIqVnzkeU8KEUc0E483EDRj9QcOWQJ0W0WSezWKwDW0iYJSv8kxHAESsAXOu/IBFQcOvmEBFgIe9QcOM/XOwDWaw3WKw/WOJ3INe9zj9QcOuxJY=vXjhzWKweWSwAEOsTixHA=lReiq1dkxHAESsAXOu/IBFQctJAJqFgkNhzWKweWSwAEOsTixHA=OHYiqU5Xe9QcOWQJ0W0WNhzWKweWSwAEOsTixHAExFqiqU5IB1VkxHAWxHbJxJ/le9QcOM/XOwDWaw3WKvmESF3INDTkxHAES5bElJ0Ia/zWKwxWtEbEbj8kxHAESsAXOu/IBFQcOjYWaFgkawgLj9QcOs0XlsPWUhzWKweWSwAEOsTixHAExw0iqU5Ij9QcOMQJbj1Ea/zWKwxWtEbEbsgLj9QcOs0XlsPWUhzWKweWSwAEOsTixHAJxv1iqU5Ij9QctsAWOMqJm/zWKweXtEbEbuVkxHAWxHbJxJ/ISh2zShV=kuwkxHAEOs6ExJQ7N9QcOjbJ0MeXjhzWKwxJ0sD=SRTixHAWxw/iq1dkxHAW0EvEtMqIBFQcOuDEmFgkavzWKwDExFDWbH8kxHAW0EvEtMqIBFQctseEmFgka1nolJTRN9QcOu/XSF0WBUnolJTkxHAEOFPEORQle9QcOEbJSpUWmw3WKv1JxW3INDTkxHAEOFPEORQle9QcOEbJSpUWmw3WKvUE0R3INDVkxHAEOFPEORQle9QcOEbJSpUWmw3WKw0=tJ3INDgIkhzWKwDWS1PEbG2=t2b5leU83p8kxHAW0EvEtMqIBFQcts/WBFgIe9QcOEbJSpUWmw3WKw0JYs3INDTkxHAEOFPEORQle9QcOEbJSpUWmw3WKvmEtW3INDgLj9QcOu/XSF0WjhzWKwxJ0sD=SRTixHAESpviqU5le9QcOEbJSpUWmw3WKv1W0M3INDTkxHAEOFPEORQle9QcOEbJSpUWmw3WKvv=bu3INDgX0E483EDRj9QcOE1XSGPXOezWKw/J0EUESv8kxHAW0EvEtMqIBFQcOMDJaFgkNhzWKwDExFDWbH8kxHAW0EvEtMqIBFQctsAXaFgkavzWKw/J0EUESv8kxHAW0EvEtMqIBFQcOMDJaFgkNhzWKwxJ0sD=SRTixHA=bFQiqU5LOHAWaU5X0UYIj9QcOE1XSGPXBUnolJTkxHAEOFPEORQle9QcOEbJSpUWmw3WKweWxu3INDTkxHAEOFPEORQle9QcOEbJSpUWmw3WKvUJbW3INDVkxHAEOFPEORQle9QcOEbJSpUWmw3WKvUJbW3INDgIN9QcOu/XSF0WjhzWKwxJ0sD=SRTixHAESpviqU5le9QcOEbJSpUWmw3WKv1W0M3INDTkxHAW0u6WOFAIShU8KEUc0=e8YEDol2CRj9QcOjmESGxEqwgcP=vFmHzWKwxWtRq=tJ2kxHAW0EvEtMqXe9QcOuxXls/JaV2kxHAXSWeEOJAle9QcOWQJbi1=mw3WKvm=bs3INDTkxHAXSWeEOJAle9QcOWQJbi1=mw3WKvm=bs3INDTkxHAXSWeEOJAle9QcOWQJbi1=mw3WKvm=bs3INDTkxHAXSWeEOJAle9QcOWQJbi1=mw3WKvU=OJ3INDTkxHAXSWeEOJAle9QcOWQJbi1=mw3WKvU=OJ3INDTkxHAESMDWlRelq5g=B55LBF2iq1VkxHAWYsA=Ouxle9QcOWQJbi1=mw3WKwDES13INDgLB59iq1VkxHAEOEYXS1QIaQ3imFgXPe2zN9QcOjbJ0MeXjhzWKwxJ0sD=SRTixHAWY=Yiq1di0u3kavzWKwDWS1PEbGgXPeU8KEUc0=e8YEDol2CRj9QcOpvWxjbJmwgcP=vFmHzWKwqEx1D=bM2kxHAW0EvEtMqXe9QcOWDJ0i1ENhzWKwqEx1D=bMTixHAXS10iqU57asvleDVkxHAWx1/ElJAle9QcORPXSpYEaw3WKvvEBFgIq5xFq557aj8ka/zWKw/JYimWxp8kxHAWbF6EtJeIBFQcOjYXaFgkNhzWKwqEx1D=bMTixHAXSvYiqU57N9QcO1xESu0XjhzWKwqEx1D=bMTixHAWbEbiqU5XPe2zlUYIj9QcOu/XSF0WjhzWKwxJ0sD=SRTixHAXOueiq1dkxHAW0EvEtMqIBFQctM/=aFgkaw3FBFglxHAWjDgc0UYIj9QcOuPExuqWjhzWKwxJ0sD=SRTixHAEOseiqU5Ij9QcOuPExuqWjhzWKwxJ0sD=SRTixHAWxMPiqU5Lj9QcOuPExuqWjhzWKwxJ0sD=SRTixHAWxF3INDgIkhY5l6b5tU48mHzWKweWSw0WxFTIkh0JkRwkxHAEOMe=bjb7N9QcOEbJSpUWbhb806x5BHzWKweWSEU=bF2kxHAEtReXls6le9QcOueElJ/Jqw3WKvYWbW3IahzWKwDESNYWlWTixHAW0RPiqU5Ij9QcOMx=lNvEmU8kxHAEOMe=bjbIBFQcOjUJqFgkShzWKw/EbUvExi8kxHAEOMe=bjbIBFQcOJe=BFgkavzWKweWSEU=bFVkxHAWSJ6JSFqle9QcOueElJ/Jqw3WKweEbR3INDgimJTkxHAESUmJSJDle9QcOueElJ/Jqw3WKw/=b13INe8kxHAEOMe=bjbIBFQcOjUJqFgkSezWKw/EbUvExi8kxHAEOMe=bjbIBFQcOM0WmFgka1nzkeU8KEURj9QcOu/XSF0WjhzWKwxJ0sD=SRTixHAXOueiq1dkxHAW0EvEtMqIBFQctM/=aFgkaw3FBFglxHAWje8kxHAW0EvEtMqIBFQcOR/=aFgkSD3ixh2kxHAEOs6ExJQle9QcOEbJSpUWmw3WKwq=YJ3IaV3=B55Ij9QcOuxJY=vXB1nzkeU8KEUcPe2zk=vFmHzWKw/ElpbJx12cPDnFYND5kiCRj9QcOse=tEbXNhzWKwxJ0sD=SRTixHA=OuqiqU57N9QcOjbJxU1Ja/zWKw/ElpbJxU8kxHAW0EvEtMqIBFQcOUmWBFgkSezWKwqJ0Me=S1VkxHAWSN1J0W6XPe2zkeg=mwvkxHAEOFPEORQle9QcOEbJSpUWmw3WKwDWOw3INDTkxHAXtiUJ0sDLj9QcOsDElW6Jq1gc0UYIj9QcOuPExuqWjhzWKwxJ0sD=SRTixHAJSG/iqU5Ij9QcOuPExuqWjhzWKwxJ0sD=SRTixHAWx16iqU5Lj9QcOuPExuqWjhzWKwxJ0sD=SRTixHAWlibiqU5IaUn=3NCJPpg80AwkxHAEtibJ0JDIBUn5YjqRj9QcOEUXSJ6ExezWKwxJ0sD=SRnkxHAXSWeEOJAle9QcOEUXSJ6Eqw3WKwq=Ss3INDTkxHAElNYES5YLjhzWKw6WxMDEbv8kxHAW0M6Eb1PIBFQcOFAJaFgkNDgXPe2=l/x=khb806x5BHzWKweEYJq=Os2=t2b5leU83p8kxHAW0EvEtMqIBFQcts/WBFgIe9QcOEbJSpUWmw3WKw0JYs3INDTkxHAEOFPEORQle9QcOEbJSpUWmw3WKvUJlJ3INDgXe9QcOM0=bi1WNV3olu3kSezWKwe=bp1JbsVkxHAES=YWYu/le9QcOEbJSpUWmw3WKw/=b13INe8kxHAW0EvEtMqIBFQcO1P=BFgkSezWKwDExFDWbH8kxHAW0EvEtMqIBFQctNmXaFgka/zWKweEYJq=Oj8kxHAW0EvEtMqIBFQcOjYXaFgkNhzWKwxJ0sD=SRTixHAJbvYiq1diP13kSDTkxHAEOFPEORQle9QcOEbJSpUWmw3WKwqWOR3INDVkxHAEOFPEORQle9QcOEbJSpUWmw3WKvbExs3INDVkxHAEOFPEORQle9QcOEbJSpUWmw3WKvvJxw3INDgLj9QcOM0=bi1WNhzWKwxJ0sD=SRTixHAWlJ6iqU5le9QcOEbJSpUWmw3WKwPElR3IND2ixs3Lj9QcOM0=bi1WNhzWKwxJ0sD=SRTixHAWlJ6iqU5le9QcOEbJSpUWmw3WKwPESu3IND2kxHAEOFPEORQle9QcOEbJSpUWmw3WKvUElR3INDVkxHAES=YWYu/le9QcOEbJSpUWmw3WKw/=b13INe8kxHAW0EvEtMqIBFQcOuPXaFgkSezWKwDExFDWbH8kxHAW0EvEtMqIBFQctR6=BFgka/zWKweEYJq=Oj8kxHAW0EvEtMqIBFQcOsDEmFgkSeY5l6b5tU48mwgcP=vFmHzWKwxJb1DJxw2kxHAW0EvEtMqX0UYIj9QcO1xESu0XjhzWKwxJb1DJxwTixHAXOG0iqU5Ij9QcO1xESu0XjhzWKwxJb1DJxwTixHAWxMDiqU5Lj9QcO1xESu0XjhzWKwxJb1DJxwTixHAJx=UiqU5IaUnJ02CFPuwkxHAWbEmESHY7N9QcOM0=bi1WNhzWKwxJb1DJxwTixHAXtRDiq1dkxHAW0R6EtWAIBFQcOsQEmFgkk/9kxHAES=YWYu/le9QcOEmXSpbXBw3WKvUJbM3IahzWKwxJb1DJxwTixHA=bvbiqU5le9QcOEmXSpbXBw3WKv1WtJ3INDnkxHAWbEmESHYle9QcOEmXSpbXBw3WKwPExR3INDTIa/zWKwqW0ReWt=8kxHAW0R6EtWAIBFQctReEqFgkavzWKweE0We=bJgLj9QcORxJbMQ=UhzWKwxJb1DJxwTixHAWlJ/iqU5IB1VkxHAXSWeEOJAle9QcOEmXSpbXBw3WKwq=Ss3INDTkxHAESHmWlueLj9QcORxJbMQ=m1VkxHAXSWeEOJAle9QcOEmXSpbXBw3WKwxEOw3INDTkxHAJSwQESimLj9QcOMAJ0W0EB/zWKwqW0ReWtJgXPeU8KEUc0=e8YEDol2CRj9QcOu6JxGqJmwgcP=vFmHzWKw/JSp1=tJ2kxHAW0R6EtWAXe9QcOWD=Ss0JNhzWKw/JSp1=tJTixHAWlJ6iqU5le9QcOjvEtp1=mw3WKw6XtJ3IND2kxHAWSJ6JSFqle9QcOjvEtp1=mw3WKvbJxG3INDnolJTkxHAWxWPExsPle9QcOjvEtp1=mw3WKwAEOM3IahzWKw/JSp1=tJTixHAJYjmiqU5Ij9QcOs0XlsPWUhzWKw/JSp1=tJTixHAEtWeiqU5IaUn5YjqRj9QcOiY=bvUJSezWKwDExwe=bH8kxHAWlsD=tpYIBFQcOwDEaFgIe9QcOjvEtp1=mw3WKvmJlR3INDTkxHAWSJ6JSFqle9QcOjvEtp1=mw3WKwDJxM3INDgXe9QcOiY=bvUJNhzWKw/JSp1=tJTixHAWlJ6iqU5le9QcOjvEtp1=mw3WKw/=lW3IND2kxHAWSJ6JSFqle9QcOjvEtp1=mw3WKwxXlJ3INDVkxHAWSJ6JSFqle9QcOjvEtp1=mw3WKw0Elu3INDT5KUQ=l2YRj9QcOiY=bvUJNhzWKw/JSp1=tJTixHAEtjYiq1diPu3ka/zWKw/EbUvExi8kxHAWlsD=tpYIBFQctiUWmFgka1ykxHAWY=YXtNvle9QcOjvEtp1=mw3WKvUEls3IND2kxHAWSJ6JSFqle9QcOjvEtp1=mw3WKv1ESJ3IND+kxHAWY=YXtNvle9QcOjvEtp1=mw3WKvUEls3IND2kxHAWSJ6JSFqle9QcOjvEtp1=mw3WKv1ESJ3INDnzke2zShV=kuwkxHAWxWq=SGA7N9QcOsDElW6JehzWKwxJ0sD=SRTixHAXOueiq1dkxHAW0EvEtMqIBFQctM/=aFgkaw35lQ3INVQcOH5X0UYIj9QcOuPExuqWjhzWKwxJ0sD=SRTixHAWSs3INDTkxHAWSueJxUblq5g=B55Lj9QcOuPExuqWjhzWKwxJ0sD=SRTixHAXOGxiqU5IaUnolJTkxHAEOFPEORQle9QcOEbJSpUWmw3WKweXOM3INDTkxHAEOFPEORQle9QcOEbJSpUWmw3WKvmWBFgka/zWKwDExFDWbH8kxHAW0EvEtMqIBFQctRQiqU5IaUzWKwxWxiUWOw2kxHAWSueJxUble9QcOEbJSpUWmw3WKwAEOM3IahzWKwxJ0sD=SRTixHAESF0iq1di0eUieDTkxHAEOFPEORQle9QcOEbJSpUWmw3WKvYWx13INDglxHAWjDVkxHAWSueJxUble9QcOEbJSpUWmw3WKvvExR3IaV3FYM3kavzWKweEYJq=OsVkxHAWxWq=SGAIShU8KEUc0=e8YEDol2CRj9QcOE1XlueWmwgcPiU5KNq8mj8kSh2zkeU8KEUc0UYIj9QcOuPExuqWjhzWKwxJ0sD=SRTixHAESweiqU5Ij9QcOuPExuqWjhzWKwxJ0sD=SRTixHAExRDiqU5Lj9QcOuPExuqWjhzWKwxJ0sD=SRTixHAExRDiqU5IaUzWKw/EONbXlE8kxHAW0EvEtMqIBFQctsPWmFgIq5q=a55Ij9QcOM0=bi1Wa/zWKw/EONbXlE8kxHAW0EvEtMqIBFQctpmEqFgka1n=l/x=khY5l6b5tU48mHzWKwDESWAWYMTIkh0JkRwkxHAWlM6=Sj17N9QcOEbJSpUWbhq=kpeFYAwkxHAEOFPEYpU7N9QcOimElu6JUhzWKw/=SUUWluTixHA=SimiqU5IB2FFq23LBF3Ia/zWKwxWtE1JbRnzke2kxHAWxWq=SGAle9QcOEbJSpUWmw3WKw/=b13INe8kxHAW0EvEtMqIBFQctRA=mFgIq56ieDTkxHAEOFPEORQle9QcOEbJSpUWmw3WKwqWOR3INDVkxHAEOFPEORQle9QcOEbJSpUWmw3WKvmXlu3INDVkxHAEOFPEORQle9QcOEbJSpUWmw3WKvvJxw3INDgLj9QcOuPExuqWjhzWKwxJ0sD=SRTixHAE0u0iqU5Ij9QcOE1E0R/Em/zWKweXtEbEbuVkxHAWxWq=SGALj9QcOM0=bi1Wa1nzke0JkRwkxHAWSuAEOu07kh2XPiU5KNq8mHzWKw/EOwDEO=8kxHAW0EvEtMqIBFQctuDWmFgkSezWKw/J0W6=tsVkxHAWSuAEOu0le9QcOEbJSpUWmw3WKw6JbG3IND283NV8B/zWKw/EOwDEOJnzkDn=3NCJPpg80AwkxHAJSwQESimIj9QcOpmW0s6Eq/zWKw6=YEUJS1gcP=vFmHzWKw/J0MeXtR2kxHAWbUm=OW/Lj9QcOsxW0s6XOenzShzWKw/WxEvXSv8kxHAWlEUESvmIBFQcORxWmFgkSeY5l6b5tU48mvzWKwDExw6=YsVkxHAWljY=bWAIkh0JkRwkxHAWlJ6WtRQ7N9QcOjb=SMAJbhq=kpeFYAwkxHAEOFPEORQle9QcOjYXSHmWBw3WKwx=OR3INDTkxHAEOFAXl=vLj9QcOjv=YJxXB1nzSh0JkRwkxHAJl=b=bezWKw/WxEvXSwnolJTkxHAEOFPEORQle9QcOjb=SMAJmw3WKvbJlJ3INDTkxHAEOFPEORQle9QcOjb=SMAJmw3WKw/XOs3INDVkxHAEOFPEORQle9QcOjb=SMAJmw3WKweEb13INDgIN9QcOpmW0s6EehzWKw/J0MeXtRTixHAW0pUiq1dkxHAWlEUESvmIBFQctjYiqU5Ij9QcOuPExuqWjhzWKw/J0MeXtRTixHAEYJeiqU5Lt=e8YEDol2CIBUn5YjqRj9QcOpbXSWAWxezWKw/J0MeXtRnolJTkxHAXSWeEOJAle9QcOpbXSWAWqw3WKwAWOJ3INDTkxHAXSWeEOJAle9QcOpbXSWAWqw3WKvvXtM3INDVkxHAXSWeEOJAle9QcOpbXSWAWqw3WKv1=bR3INDgIN9QcO1xESu0XjhzWKwDJx1xXOWTixHAWYM/iqU5Ij9QcOpYWOjbWB/zWKw6=YEUJS1gX0NVF0Nn=3NCJPpg80AwkxHAWbEUEOEYIBUnkxHAWSEmWSvY7l6U5qHzWKweJSuxJxuTISh2zkDVRNh5IShU8KEUc0=e8YEDol2CRj9QcOi1EtEYEBwgcP=vFmHzWKwqXtRPJbs2kxHAWlEUESvmXe9QcOEUEtiYEBV2kxHAJl=b=UhzWKwqXtRPJbsTixHAWbWqiqU5Ij9QctjYJ0=8kxHAWbvmE0R/IBFQcORxWmFgkavzWKvv=YEYle9QcORAJb5mWaw3WKwqWxR3INDTkxHAJYW/Exs0lq5g=B55LBF2iq1VkxHAESGq=SwAle9QcORAJb5mWaw3WKwDES13INDgLBFYiq1nzke2=3NCJPpg80AwkxHAW0uPJbs0Ij9QcOiY=SReJm/zWKv1J0s0WlsVkxHAEOReXSEYLj9QctimESR0XOee8YpU=YUC=lugcP=vFmHzWKwDXSHbWSM2kxHAWbUm=OW/X0UYIj9QcO1xESu0XjhzWKwDXSHbWSMTixHAJximiqU5Ij9QcO1xESu0XjhzWKwDXSHbWSMTixHAEx51iqU5Lj9QcO1xESu0XjhzWKwDXSHbWSMTixHAEx51iqU5IaUn=3NCJPpg80AwkxHAWbwxW0imIBUn5YjqRj9QctNmJbUU=bezWKwDXSHbWSMVkxHAWSGeEOG07N9QctuqEt=1EjhzWKvUJYR6=lJTixHAXOueiq1dkxHA=limXlNYIBFQctivJmFgkavzWKw6WxMDEbv8kxHA=limXlNYIBFQctM/WBFgka1nkxHAWSGeEOG0le9QctNmJbUU=mw3WKw/=b13INe8kxHA=limXlNYIBFQcOjUJqFgkSezWKw6WxMDEbv8kxHA=limXlNYIBFQcOsqEaFgka/zWKw6WxMDEbv8kxHA=limXlNYIBFQcOwQEmFgkavDckHU80JwkxHAWSGeEOG0le9QctNmJbUU=mw3WKwDJlJ3IaV35B55Lj9QcO1xESu0XjhzWKvUJYR6=lJTixHAXOv1iqU5IS2zWKw/WOMDWO=8kxHA=limXlNYIBFQctMeJaFgkSezWKw6WxMDEbv8kxHA=limXlNYIBFQcO=1=aFgkSgzWKw/WOMDWO=8kxHA=limXlNYIBFQctMeJaFgkSezWKw6WxMDEbv8kxHA=limXlNYIBFQcO=1=aFgkSh2zlNVF0MwkxHAWY=UWbNmle9QcOu6WtW/Eaw3WKwx=tM3IahzWKwDXSHbWSMTixHAJlJ3INDTkxHAXSWeEOJAle9QcOu6WtW/Eaw3WKvUXOG3INDV=3NCJPpg80ATIkh0JkRwkxHAWYMAWYR67N9QcOu6WtW/Ea/zWKw/EbW0XOM2cPDnkxHAWSJxEbwele9QcOiUXOimXaw3WKwDEbJ3IND2kxHAXSWeEOJAle9QcOiUXOimXaw3WKwPXSw3INDVkxHAWSJxEbwele9QcOiUXOimXaw3WKwA=lu3IND2=3NCJPpg80ATkxHAWxMDESWDLj9QcOWq=bJ0EmUn5YjqRj9QcOM0=lN1ESezWKwq=SwqJb1nFYND5kiCRj9QcO1xESu0XjhzWKweEYNU=OMTixHAWYM/iqU5Ij9QcOWeEOMxEB/zWKwxWYJ0EbJgXPDVkxHAWSJxEbwele9QcOiUXOimXaw3WKwAEls3IND2=3NCJPpg80ATkxHAWl=mWYR/Lj9QcOuAJSH1=m/zWKv1XSRPJlWgcP=vFmHzWKw/=YsQE0R2kxHAWYMAWYR6XPiU5KNq8mHzWKw6WxMDEbv8kxHAWl=vWO5mIBFQctWqWBFgkavzWKw/=YRqJbsVkxHAEOvvWtpYLj9Qctu6Wb5vJq1nzSh0JkRwkxHAEOM0XSux7N9QcOs0WxJAEShg=mvzWKw6WxMDEbv8kxHAWYMAWYR6IBFQctJAWqFgkavzWKw6WxMDEbv8kxHAWYMAWYR6IBFQcOs0=mFgka/zWKw6WxMDEbv8kxHAWYMAWYR6IBFQcts6EqFgka1gc0=e8YEDol2CRj9QcONU=bsqJmwgcP=vFmHzWKw/WtMeWYR2kxHAWYMAWYR6Xe9QcOEUE0JQ=jhzWKw/WtMeWYRTixHAW0pUiq1dkxHAWSHUESimIBFQctjYiqU5Ij9QcOueEb1DWehzWKw/WtMeWYRTixHAEOJ0iqU5Lj9QcOj1EOR6JaQvleDgXPe2=l/x=khg=mvzWKvmJbMqEbwgc0UYIj9QcO1xESu0XjhzWKwq=SwqJb1TixHAXOG0iqU5Ij9QcO1xESu0XjhzWKwq=SwqJb1TixHAEORQiqU5Lj9QcO1xESu0XjhzWKwq=SwqJb1TixHAEORQiqU5IaUn=3NCJPpg80AwkxHAEO1P=SMDIBUn5YjqRj9QcOEYJbRPJSezWKwq=SwqJb1nkxHAWSwDWOwPle9QcOEYJbRPJaw3WKwDJlJ3IaV35B557aF3XPe2=l/x=aHzWKvmJbMqEbv8kxHAWYMAWYR6IBFQctNmiqU5IB1nzN9QcOuqES1x=UhzWKwq=SwqJb1TixHAWlJ6iqU5le9QcOiUXOimXaw3WKw/=lW3IND2kxHAXSWeEOJAle9QcOiUXOimXaw3WKvmEbM3INDVkxHA=tEvEbjvle9QcOiUXOimXaw3WKw/=b13INe8kxHAWYMAWYR6IBFQcOjUJqFgkSezWKw6WxMDEbv8kxHAWYMAWYR6IBFQcOsqEaFgkShV=kuwkxHAWbs0=Ou/7lp4JPNh=l6Dle9QcOiUXOimXaw3WKvvWSG3IahzWKwq=SwqJb1TixHAEYiviqU5Ij9QcO1xESu0XjhzWKwq=SwqJb1TixHAWSGQJaFgka1nolJTRN9QctimESR0XBUnolJTkxHAXSWeEOJAle9QcOiUXOimXaw3WKwAWbw3INDTkxHAXSWeEOJAle9QcOiUXOimXaw3WKweWSJ3INDVkxHAXSWeEOJAle9QcOiUXOimXaw3WKweWSJ3INDgIkhY5l6b5tU48mHzWKwDJSJA=bFTIkh0JkRwkxHAWYs6XSRe7N9QcOiUXOimXShb806x5BHzWKwqWtMA=YM2kxHAEOUYWYpvle9QcOivXS1qEaw3WKwAJbu3IahzWKwqJS16WbMTixHAWSG0iqU5zK/zWKwD=tWD=Sv8kxHAWYs6XSReIBFQctNmEaFgIe9QcOivXS1qEaw3WKvYXtW3INe8kxHAWYs6XSReIBFQctuQ=mFgkShzWKwqWtMA=YN8kxHAWYs6XSReIBFQcOFPWmFgkawgLj9QcORQ=SvY=NhzWKwqJS16WbMTixHAJbMPiqU5Ij9QcONmExpmEq1VkxHAWbHUXt=Ule9QcOivXS1qEaw3WKw/=bs3INDTIa/zWKwDESJ6EOE8kxHAWYs6XSReIBFQcOvU=BFgkavzWKwDWb=YWtMVkxHAWbHUXt=UIa/zWKwDESJ6EOE8kxHAWYs6XSReIBFQcOweJaFgkavzWKw6JlWe=bFVkxHAWxJDJximLj9QcORQ=SvY=a1nzkeU8KEURj9QcOR/EYuDWNhzWKwq=SwqJb1TixHA=SNviqU57N9QcO1xESu0XjhzWKwq=SwqJb1TixHAJ0R/iqU5XPezWKv1J0s0Wlj8kxHAWYMAWYR6IBFQcO51EaFgkavzWKwqWS=1EOsgLtp4JPNh=l6Dle9QcOiUXOimXaw3WKwqXSu3IND2kxHAXSWeEOJAle9QcOiUXOimXaw3WKwPJxs3INDnzkDVRNh5ISh2=3NCJPpg80AwkxHAWYsAJlWxIBUn5YjqRj9QcON1WYJ6WOezWKwqXli1WxsVkxHAEtWxJSGe7kh2Xe9QcOpbW0sQENhzWKwe=OiYXSGTixHAEbp1iqU57l=e8YEDol2CIj9QcOReEtR0Ea/zWKw/EbEbEYRgcP=vFmHzWKwDJlRqXOW2kxHAEluq=b1QXPiU5KNq8mHzWKwDExFDWbH8kxHAEtjmWbwxIBFQcOuQXBFgkavzWKwqESpmEbMVkxHAWSJxJx=mISh2Lj9QcOpbW0sQENhzWKwe=OiYXSGTixHAJx13IND2kxHAEOFPEORQle9QcON1WYJ6WBw3WKwPE0J3INDVkxHAEtWxJSGele9QcON1WYJ6WBw3WKvvXlW3IND2=3NCJPpg80ATkxHAWbs0=bEmLj9QcOWQ=lEUEqUn5YjqRj9QcOuQXOibEOezWKwe=OiYXSGnFYND5kiCRj9QcOuPExuqWjhzWKwDWOwqJxuTixHAWYu0iqU5Ij9QcOR/EYJxJm/zWKwxWtNb=SFgXPDVkxHAEtWxJSGele9QcON1WYJ6WBw3WKw/WmFgkSezWKwDExFDWbH8kxHAEluq=b1QIBFQcO5bJmFgkSh0JkRwkxHAWxjYXtM/7N9QcOpbW0sQEShg=mvzWKwDExFDWbH8kxHAEluq=b1QIBFQctiYJmFgkavzWKwDExFDWbH8kxHAEluq=b1QIBFQctiYWqFgka/zWKwDExFDWbH8kxHAEluq=b1QIBFQctiYWqFgka1gcP=vFmHzWKwDEYu6JSMn5Ki6c0UYIj9QcOuPExuqWjhzWKwe=OiYXSGTixHAJY=miqU5Ij9QcOuPExuqWjhzWKwe=OiYXSGTixHAJbG6iqU5Lj9QcOuPExuqWjhzWKwe=OiYXSGTixHAJbG6iqU5IaUzWKwDEYu6JSM28YNPRsjb5tU0=Nv7JYgUJPuTkxHAEOFPEORQle9QcON1WYJ6WBw3WKwDJbJ3INDgX0NVF0Nn=3NCJPpg80AwkxHAWSNYXtM0IBUn5YjqRj9QctWDEliYJSezWKwe=OiYXSGnkxHAESNU=Swqle9QctWDEliYJaw3WKw6XSJ3IND2Raj8ka/zWKweWtsqXtp8kxHAJxueJY=vIBFQcOjYXaFgkNhzWKvbEONm=YsTixHAXSvYiqU57N9QcO1xESu0XjhzWKvbEONm=YsTixHAWbEbiqU5XPe2zlEv5tETIj9QcOE1JbHmWaUnolJTkxHAEOFPEORQle9QcON1WYJ6WBw3WKvm=YR3INDTkxHAEOFPEORQle9QcON1WYJ6WBw3WKvv=lu3INDVkxHAEOFPEORQle9QcON1WYJ6WBw3WKvbJbw3INDgIkhY5l6b5tU48mHzWKweWSsAEb1TIkh0JkRwkxHAW0seXljY7N9QcON1WYJ6WOhzWKwxJxUYJ0=8kxHAW0seXljYIBFQctWAJaFgIq5YieD2RNh5X0/U5BHzWKwDJYJ0WOG2kxHAWxWA=OHble9QcOEvESUv=mw3WKvvWSG3IahzWKwxJSM6JlJTixHAEYiviqU5Ij9QcO1xESu0XjhzWKwxJSM6JlJTixHAWSGQJaFgka1nkxHAEtiYEbGQlq5g=B557N9QcO1xESu0XjhzWKwxJSM6JlJTixHAWbWPiqU5Lj9QcOpm=bJQWjhzWKwxJSM6JlJTixHAWlJ6iqU5le9QcOEvESUv=mw3WKwDJbW3IND2kxHAXSWeEOJAle9QcOEvESUv=mw3WKweWOw3INDVkxHAEtiYEbGQle9QcOEvESUv=mw3WKvUEls3IND2kxHAXSWeEOJAle9QcOEvESUv=mw3WKw6Jbs3INDVkxHAWSJ/XtWQle9QcOEvESUv=mw3WKwAEOM3IahzWKwxJSM6JlJTixHAJYjmiqU5Ij9QcO1xESu0XjhzWKwxJSM6JlJTixHA=SEmiqU5INhzWKwxJSM6JlJTixHAXOw3INDTkxHAEtiYEbGQIa/zWKw6WxMDEbv8kxHAW0seXljYIBFQcOUmJaFgkavzWKwxESRAElRgLj9QcOuA=OG/ENhzWKwxJSM6JlJTixHAXOueiq1dkxHAW0seXljYIBFQctivJmFgkavzWKw6WxMDEbv8kxHAW0seXljYIBFQctMxJmFgkaU8kxHAW0seXljYIBFQcOjYXaFgkNhzWKwxJSM6JlJTixHAWlNbiqU57N9QcO1xESu0XjhzWKwxJSM6JlJTixHAJbJeiqU5Lj9QcO1xESu0XjhzWKwxJSM6JlJTixHAJxRQiqU5Ij9QcOWDWbwA=a/zWKw/EbsAXSMVkxHAWxReJSF/Ia/zWKweXljUWYi8kxHAW0seXljYIBFQcOE1=aFgIe9QcOEvESUv=mw3WKvv=mFgkavzWKw6WxMDEbv8kxHAW0seXljYIBFQctMAWBFgka/Y5l6b5tU48mwgcP=vFmHzWKwDXSpbEYJ2kxHAW0seXljYXe9QcOW/=bvUWNhzWKwDXSpbEYJTixHAEbp1iqU5Ij9QcO1PESJAEm/8kxHAWxjYXtM/le9QcOu6EtW0=mw3WKvbXaFgkNDgXPDVRNh5ISh2zlNVF0Mw5Ki6c0UYIj9QcOuPExuqWjhzWKwe=OiYXSGTixHAJY=miqU5Ij9QcOuPExuqWjhzWKwe=OiYXSGTixHAExs0iqU5Lj9QcOuPExuqWjhzWKwe=OiYXSGTixHAExs0iqU5IaUzWKwDEYu6JSM28YNPRsjb5tU0=Nv7JYgUJPuTkxHAEOFPEORQle9QcON1WYJ6WBw3WKvUESR3INDgX0NVF0Nn=3NCJPpg80AwkxHAWYuxE0NbIBUn5YjqRj9QcOM6E0=bJbezWKwe=OiYXSGnkxHAWxjYXtM/le9QcOM6E0=bJmw3WKw0Etu3INDTkxHAEOEbEbUYLj9QcOuAXSwxJm1VkxHAWxjYXtM/le9QcOM6E0=bJmw3WKw0Etu3INDTkxHAWSuDWtRQLj9QcOiUXtpUEa1nzke2J0jDJ0wTkxHAWY=mEYpYIkhg=mvzWKwDExFDWbH8kxHAEluq=b1QIBFQctiYJmFgkavzWKwDExFDWbH8kxHAEluq=b1QIBFQctNbJaFgka/zWKwDExFDWbH8kxHAEluq=b1QIBFQctNbJaFgka1gkxHAEO=1Xlse7aj8kShU8KEUc0=e8YEDol2CRj9QctRPXluDWBwgcP=vFmHzWKweESUmEbu2kxHAEluq=b1QX0UYIj9QcO1xESu0XjhzWKweESUmEbuTixHAWbw/iqU5Ij9QcO1xESu0XjhzWKweESUmEbuTixHAE0WeiqU5Ij9QcOFqXOjv=NhzWKweESUmEbuTixHA=bFQiqU5LOHAWm1VWKwQIaUzWKweXSMq=bW2kxHAXSWeEOJAle9QcOMeXlR0EBw3WKwP=lR3INDTixG3Lj9QcOMeJbuAXB1n5YjqRj9QcOEvXSU1=a/zWKweXlM0W0u2WKwQX0=4Fmv0JkRwkxHAWbMQESR/7SHAWOhzWKw6WxMDEbv8kxHAESM6JbJDIBFQctjmEaFgkavzWKwqESGeWbsVkxHAWSR0W0Mxle9QcOMeXlR0EBw3WKvYExG3INDgXe9QcOReWOMqWaV2WKwqIN9QcOM6=SJx=BV2kxHAXSWeEOJAle9QcOMeXlR0EBw3WKvmXSF3INDTkxHAXSWeEOJAle9QcOMeXlR0EBw3WKvYJYs3INDTkxHAW0s6XlpU7N9QcO1xESu0XjhzWKweESUmEbuTixHA=YJDiqU5Ij9QcOw/=OpY=NhzWKweESUmEbuTixHAE0=biqU5Ij9QcOReWOMqWa1VWKwqIaQQcO1g7e9QcO1xESu0XjhzWKweESUmEbuTixHAJ0JDiqU5Ij9QcOEvXSU1=aQQcO1gXU9QcOEvXSU1=a/zWKw6WxMDEbv8kxHAESM6JbJDIBFQcOEYJmFgkavzWKwqWb1DJSwVkxHAEOJAWx1Dle9QcOMeXlR0EBw3WKwP=YW3INDTkxHAXSWeEOJAle9QcOMeXlR0EBw3WKweWts3INDTkxHAWbMQESR/LOHAWa1gIa1nFYND5kiCRj9QcO1xESu0XjhzWKweESUmEbuTixHAEYu0iqU5Ij9QcO1xESu0XjhzWKweESUmEbuTixHAEbRPiqU5Ij9QcOM6=SJx=BQQctsgLOHAWB1nzke2zlUYIBjzWKwDEYu6JSMYiU9QcOuPExuqWjhzWKwe=OiYXSGTixHAWxWQiqU5IK5g8Yp45ehzWKwe=OiYXSGTixHAElpviq1dkxHAEluq=b1QIBFQctu/EqFgka/e8YpU=YUC=lugIkhg=mvzWKwDExFDWbH8kxHAEluq=b1QIBFQcO=bEaFgkavzWKwDExFDWbH8kxHAEluq=b1QIBFQcOJAXaFgka/zWKwDExFDWbH8kxHAEluq=b1QIBFQcOJAXaFgka1gc0=e8YEDol2CRj9QcOsqWbN1EawgcP=vFmHzWKwDWx1eJ0W2kxHAEluq=b1QXPpTokE8kxHAEOW6ElEbIBFQcOueXaFgkSezWKwxWlJA=Sj8kxHAEOW6ElEbIBFQcts6JqFgkavzWKwxWlJA=Sj8kxHAEOW6ElEbIBFQcts6JqFgkavzWKwqWOEYExi8kxHAEOW6ElEbIBFQctReJmFgkawQcOGVWKwqIa/zWKwxWlJA=Sj8kxHAEOW6ElEbIBFQcOsqiqU5Ia/zWKwDWxWPWSH8kxHAEOW6ElEbIBFQctReJmFgkawQcORgISh2zlNVF0MwkxHAEO=1Xlse7l6U5qHJSM/R5KpQMYN/5lNx5BwgXPeq=kpeFYAwkxHAEO=1XlseXPeU8KEUc0=e8YEDol2CRj9QcOMeExUmEqwgcP=vFmHzWKw/=OsDWS12kxHAEluq=b1QLj9Qct=UExu0ExezWKw6WxMDEbv8kxHAWlu/EOs6IBFQcO1QEmFgkNhzWKw/=OsDWS1TixHAXOWeiqU5IB59iq1VkxHAESMxE0=b7SHAWOhPotUV=awvRNh5Ikhx50UDJ0wTkxHA=YMPEOJPle9QcOMeWx5YJqVdkaUnJ0jx=aFQixg0JkRwkxHAWbF/Wxvb7kpTokE8kxHAWlu/EOs6IBFQcOueXaFgkNhzWKw/=OsDWS1TixHA=SimiqU5IB28kU/1ka23LBF3IShb806Dol6e=ShbJkEUixs3X3=vFmHzWKwqJ0WAJ0R2WKwQX0E483pg83NUX0EvF0M3WmF+5YjqRj9QcOuqJxJ6JxD3ixhb806Dol6e=ShbJkEUixW3XU9QcORPWSWAJxezWKwqExsxXtE8kxHAWlu/EOs6IBFQctNYWmFgkawQcOGVkxHAEbMqElW6IShb806Dol6e=ShbJkEUixu3X3=vFmHzWKw0ESReJx12kxHAWbGPJSR0le9QcOj1WSu/Xaw3WKvUWYR3INDTLe/sL0FViqFgle9QcOj1WSu/Xaw3WKvYExG3INDnJ02C5tUC5lMnJ0jx=aFeixgY8PRT5YjqRj9QcOMq=Ow0WbDQcOGnkxHAXSWeEOJAle9QcOj1WSu/Xaw3WKvvJbM3INDTkxHAESi1XOJqLj9QcOpb=SHYEjhzWKw/=OsDWS1TixHA=bFQiqU5IaJYkxHAXSWeEOJAle9QcOj1WSu/Xaw3WKvvJbM3INDTkxHAWYEbXtEmLj9QcORPWSWAJehzWKw/=OsDWS1TixHA=bFQiqU5IShzWKweWYuAEbRdIqUnkxHAXSWeEOJAle9QcOj1WSu/Xaw3WKw0E0s3INDTkxHAWSpb=t=1le9QcOMq=Ow0WUDVixG3IS9TkxHAEOibEbUbIxezWKwqExsxXtE8kxHAWYEbXtEmka/zWKwqJ0WAJ0RdIq1+kxHAEOibEbUbIxezWKw/=bUUWb=8kxHAESi1XOJqkSh2J02C5tUC5lMnJ0jx=aF0ixgDotUxle9QcOj1WSu/Xaw3WKwDES13IND2kxHAEOibEbUbX0E483pg83NUXPemFYNvoxh2zke2=3NCJPpg80AwkxHAESuQExNvIBUn5YjqRj9QcORQXtW0EbezWKwqXli1WxsVkxHAWS1qWYs07kh2Xe9QcOs6WbivEUhzWKwqWOvbEbJTixHA=bR3IND2=3NCJPpg80ATkxHAESwq=ONvLj9QcOEvJbRDJmUn5YjqRj9QcOWqWSHUEbezWKwqWOvbEbJnFYND5kiCRj9QcOuPExuqWjhzWKwxWbsQ=SJTixHAJSwAiqU5Ij9QcOMAWYueJa/zWKwxJlRqEtRgXPDVkxHAWS1qWYs0le9QcORQXtW0Emw3WKwqJbG3IND2=3NCJPpg80ATkxHA=Os6WbwQLj9QcOMqE0ivEaUn5YjqRj9QcOMAElimExezWKwqWOvbEbJnFYND5kiCRj9QcOuPExuqWjhzWKweXONmJbFTixHAXl=viqU5Ij9Qctu/XSRAWB/zWKweWb5mJSMgXPDVkxHAWS1qWYs0le9QcORQXtW0Emw3WKwxJYu3IND2=3NCJPpg80ATkxHAWlRP=YiYLj9QcONUWYEv=BUn5YjqRj9QcOu0ElW0WOezWKwqWOvbEbJnFYND5kiCRj9QcOuPExuqWjhzWKwDEbNbEbGTixHAJY=miqU5Ij9QcOjmE0=m=m/zWKwe=SibJlugXPDVkxHAWS1qWYs0le9QcORQXtW0Emw3WKwqEOu3IND2=3NCJPpg80ATkxHAES5vWxM0Lj9QcOu/Wb51XBUn5YjqRj9QcOR0WYpU=SezWKwqWOvbEbJnFYND5kiCRj9QcOuPExuqWjhzWKwqEbi1=lMTixHA=b1QiqU5Ij9QcOMPJSWeEm/zWKwDWSRP=OwgXPDVkxHAWS1qWYs0le9QcORQXtW0Emw3WKv1JxG3IND2=3NCJPpg80ATkxHAWxUYJx=1Lj9QcOWAXSj1EqUn5YjqRj9QcOsA=bGA=bezWKwqWOvbEbJnFYND5kiCRj9QcOuPExuqWjhzWKw/XtJQXtJTixHA=b1QiqU5Ij9QcOW6=YW0=B/zWKwxXO1/=OFgXPDVkxHAWS1qWYs0le9QcORQXtW0Emw3WKv1XOF3IND2=3NCJPpg80ATkxHAEluqJbjvLj9QcOuPJSRD=BUn5YjqRj9QcOEUJbsPWbezWKwqWOvbEbJnFYND5kiCRj9QcOuPExuqWjhzWKwx=lR/ExRTixHA=b1QiqU5Ij9QcON1WYR/Ja/zWKwDE0sqEtugXPDVkxHAWS1qWYs0le9QcORQXtW0Emw3WKvYEOw3IND2=3NCJPpg80ATkxHAElJeWOiYLj9QcOjmJ0iY=BUn5YjqRj9QctsqEbN1JSezWKwqWOvbEbJnFYND5kiCRj9QcOuPExuqWjhzWKvvWbJe=tsTixHAEOE1iqU5Ij9QcONYESGq=m/zWKw/JYEm=YugXPDVkxHAWS1qWYs0le9QcORQXtW0Emw3WKw6E0R3IND2=3NCJPpg80ATkxHAWxvmEbuqLj9QcOR6=lpUJmUn5YjqRj9QcOibWxGDJbezWKwqWOvbEbJnFYND5kiCRj9QcOuPExuqWjhzWKwqJxWQEtRTixHAE0M/iqU5Ij9QcOWAJbJDWm/zWKwqXlN1=lRgXPDVkxHAWS1qWYs0le9QcORQXtW0Emw3WKv1=aFgkSezWKwDExFDWbH8kxHAWbGAJxJ0IBFQctM6WqFgka/zWKw/XSRqJS=8kxHAWbGAJxJ0IBFQcOE1EmFgkSeY5l6b5tU48mvzWKweWOGD=YWVkxHAWbJPJY=vIkh0JkRwkxHAJxuAWSUY7N9QcORQXtW0Ebhq=kpeFYAwkxHAEOFPEORQle9QctWDXOs6=mw3WKvUJbu3INDTkxHAESGQEt=bLj9QcOR0E0iYJa1nza/zWKw/XSRqJS=8kxHAWbGAJxJ0IBFQcOUb=BFgkSezWKwDExFDWbH8kxHAWbGAJxJ0IBFQcOimXBFgkSh0JkRwkxHAWxWqJb1e7N9QcOs6WbivEbhg=mvzWKwDExFDWbH8kxHAWbGAJxJ0IBFQcOvm=mFgkavzWKwDExFDWbH8kxHAWbGAJxJ0IBFQcOjm=aFgka/zWKwDExFDWbH8kxHAWbGAJxJ0IBFQcOJQ=mFgka1gFYND5kiCRj9QcOuPExuqWjhzWKwqWOvbEbJTixHAEYsQiqU5It=U5tETLj9QcOuPExuqWjhzWKwqWOvbEbJTixHAEYReiqU5INhzWKwqWOvbEbJTixHAXS1AiqU5Ij9QcOuxExWA=ODZcP=vFmHzWKw/XS16Xlu2kxHAWbGAJxJ0Lj9QcOMP=YjYXSenzShzWKweE0=v=bU8kxHAWS16XSU1IBFQctEYJaFgkSeY5l6b5tU48mvzWKv1J0E1Jm/zWKwx=OvbESWgcP=vFmHzWKwxJlJAWOw2kxHAWS16XSU1XPiU5KNq8mHzWKw6WxMDEbv8kxHAW0jYXOGAIBFQctWDEaFgkavzWKv1J0E1Jm/zWKwx=OvbESWgXPDVkxHAES5YJlJ6le9QcOs6XS16=Bw3WKvUWbw3IND2kxHAXSWeEOJAle9QcOs6XS16=Bw3WKvbWOG3INDVkxHAES5YJlJ6le9QcOs6XS16=Bw3WKv1=tJ3IND2kxHAXSWeEOJAle9QcOs6XS16=Bw3WKv1=tR3INDVkxHAES5YJlJ6le9QcOs6XS16=Bw3WKvmWYu3IND2kxHAXSWeEOJAle9QcOs6XS16=Bw3WKv1WYR3INDVkxHAES5YJlJ6le9QcOs6XS16=Bw3WKwDXSw3IND2kxHAXSWeEOJAle9QcOs6XS16=Bw3WKw/WOHviqU5Lj9QcOMP=YjYXNhzWKw/XS16XluTixHAW0sPiqU57N9QcO1xESu0XjhzWKw/XS16XluTixHAJSseiqU5Lj9QcOMP=YjYXNhzWKw/XS16XluTixHAESM/iqU57N9QcO1xESu0XjhzWKw/XS16XluTixHAJxF0iqU5Lj9QcOMP=YjYXNhzWKw/XS16XluTixHAEx=miqU57N9QcO1xESu0XjhzWKw/XS16XluTixHAXlRPiqU5Lj9QcOMP=YjYXNhzWKw/XS16XluTixHAESJ3IND2kxHAXSWeEOJAle9QcOs6XS16=Bw3WKvY=lR3INDVkxHAES5YJlJ6le9QcOs6XS16=Bw3WKwxEbu3IND2kxHAXSWeEOJAle9QcOs6XS16=Bw3WKvvJS13INDVkxHAES5YJlJ6le9QcOs6XS16=Bw3WKvUWS13IND2kxHAXSWeEOJAle9QcOs6XS16=Bw3WKvmEbM3INDVkxHAES5YJlJ6le9QcOs6XS16=Bw3WKwAJbG3IND2=3NCJPpg80ATkxHAXSFQW0MQIkh0JkRwkxHAJ0uQJ0WD7N9QcOs6XS16=Ohq=kpeFYAwkxHAXSWeEOJAle9QctE1WtEbEBw3WKvmEOJ3INDTkxHAXSFQW0MQISh2Lj9QcOMP=YjYXNhzWKw/XS16XluTixHAEYJ/iqU57l=e8YEDol2CIj9QcOEmXOW/Wa/zWKwDW0=mWtMVkxHAEtpU=tjvIkh0JkRwkxHAJ0WqWOH17N9QcOs6XS16=Ohq=kpeFYAwkxHAXSWeEOJAle9QctEbWbGQ=Bw3WKvb=SR3INDTkxHAW0RAWxs/Lj9QcOux=YRQ=a/zWKwD=tN1JlsgXPDVkxHAES5YJlJ6le9QcOs6XS16=Bw3WKweESF3IND2kxHAXSWeEOJAle9QcOs6XS16=Bw3WKvUXOG3INDn5YjqRj9QcOpbJlu0XOezWKweE0=v=b1nolJTkxHAXSWeEOJAle9QcOs6XS16=Bw3WKvYWbM3INDTkxHAXSWeEOJAle9QcOs6XS16=Bw3WKwqWYJ3INDVkxHAXSWeEOJAle9QcOs6XS16=Bw3WKwqWYJ3INDgIkhg=mwvkxHAEOWPWxv1lq54oq55Ikhg=mvzWKw6WxMDEbv8kxHAWS16XSU1IBFQcO1eEmFgkavzWKw6WxMDEbv8kxHAWS16XSU1IBFQctsPEaFgka/zWKw6WxMDEbv8kxHAWS16XSU1IBFQctMeJqFgka1gc0=e8YEDol2CRj9QctpmJ0MxEBwgcP=vFmHzWKweJSRPWSF2kxHAWS16XSU1Xe9QcONbJS51=NhzWKweJSRPWSFTixHAJxvviq1di0J3kSDvleDn8tNDRj9QcONUES=YWOezWKw/=lueWSH8kxHAElsqExsPIBFQcts/WBFgIe9QcONvWbF/Eqw3WKw0JYs3INDTkxHAEtEv=OJAle9QcONvWbF/Eqw3WKwDXSw3INDgXe9QcONUES=YWjV3olu3kSezWKwxEbM/ElJVkxHAElMeEYJQle9QcONvWbF/Eqw3WKw/=b13INe8kxHAElsqExsPIBFQcOM/JaFgkSezWKwDJ0j1Ebv8kxHAElsqExsPIBFQcOEvEqFgka/zWKwe=SM0=bH8kxHAElsqExsPIBFQcOjYXaFgkNhzWKweJSRPWSFTixHAEO10iqU57N9QcOpbJlu0XjhzWKweJSRPWSFTixHAESM/iqU5Lj9QcONUES=YWjhzWKweJSRPWSFTixHA=SNviqU57N9QcOpbJlu0XjhzWKweJSRPWSFTixHAEx=miqU5Lj9QcO1DExEUWUhzWKweJSRPWSFTixHAXOueiq1dkxHAElsqExsPIBFQctivJmFgkavzWKwDJ0j1Ebv8kxHAElsqExsPIBFQctMqXBFgkaU8kxHAElsqExsPIBFQcOwAiqU5Ij9QcONUES=YWB1n8tNDRj9QcOMPW0NbEbezWKwDJxp1JbE8kxHAElsqExsPIBFQcts/WBFgIe9QcONvWbF/Eqw3WKw0JYs3INDTkxHAEtEv=OJAle9QcONvWbF/Eqw3WKwDXSw3INDgXe9QcOMPW0NbEUhzWKweJSRPWSFTixHAWlJ6iqU5le9QcONvWbF/Eqw3WKweWls3IND2kxHAEtEv=OJAle9QcONvWbF/Eqw3WKwxJSF3INDVkxHAESFx=lW0le9QcONvWbF/Eqw3WKw/=b13INe8kxHAElsqExsPIBFQcOu6EmFgkSezWKwDJ0j1Ebv8kxHAElsqExsPIBFQcOMeWaFgka/zWKweExEUJx=8kxHAElsqExsPIBFQctMeJaFgkSezWKwDJ0j1Ebv8kxHAElsqExsPIBFQcOM0iqU5Lj9QcORAE0J/WehzWKweJSRPWSFTixHAXOueiq1dkxHAElsqExsPIBFQctivJmFgkavzWKwDJ0j1Ebv8kxHAElsqExsPIBFQctp1=mFgkaU8kxHAElsqExsPIBFQcOwAiqU5Ij9QcOMPW0NbEm1n8tNDRj9QcOp1JlpY=bezWKwqJlR0Elp8kxHAElsqExsPIBFQcts/WBFgIe9QcONvWbF/Eqw3WKw0JYs3INDTkxHAEtEv=OJAle9QcONvWbF/Eqw3WKwDXSw3INDgXe9QcOp1JlpY=UhzWKweJSRPWSFTixHAWlJ6iqU5le9QcONvWbF/Eqw3WKweWls3IND2kxHAEtEv=OJAle9QcONvWbF/Eqw3WKwxJSF3INDVkxHAEtpv=t=Yle9QcONvWbF/Eqw3WKw/=b13INe8kxHAElsqExsPIBFQcOu6EmFgkSezWKwDJ0j1Ebv8kxHAElsqExsPIBFQcOMeWaFgka/zWKwD=tj1=Y=8kxHAElsqExsPIBFQctMeJaFgkSezWKwDJ0j1Ebv8kxHAElsqExsPIBFQcOW0EBFgka/zWKwqJlM0WYE8kxHAElsqExsPIBFQcOwDEaFgIe9QcONvWbF/Eqw3WKvmJlR3INDTkxHAEtEv=OJAle9QcONvWbF/Eqw3WKvmWYu3INDgle9QcONvWbF/Eqw3WKwAXBFgkavzWKwD=tj1=YJgLj9QcOR6J0Em=jhzWKweJSRPWSFTixHAXOueiq1dkxHAElsqExsPIBFQctivJmFgkavzWKwDJ0j1Ebv8kxHAElsqExsPIBFQctMqXBFgkaU8kxHAElsqExsPIBFQcOjYXaFgkNhzWKweJSRPWSFTixHAWlNbiqU57N9QcOpbJlu0XjhzWKweJSRPWSFTixHA=Ss6iqU5Lj9QcOs/=S16WehzWKweJSRPWSFTixHAXOueiq1dkxHAElsqExsPIBFQctivJmFgkavzWKwDJ0j1Ebv8kxHAElsqExsPIBFQctp1=mFgkaU8kxHAElsqExsPIBFQcOjYXaFgkNhzWKweJSRPWSFTixHAWlNbiqU57N9QcOpbJlu0XjhzWKweJSRPWSFTixHA=Ss6iqU5Lj9QcOsDJx=bWehzWKweJSRPWSFTixHAXOueiq1dkxHAElsqExsPIBFQctivJmFgkavzWKwDJ0j1Ebv8kxHAElsqExsPIBFQctRq=BFgkaU8kxHAElsqExsPIBFQcOjYXaFgkNhzWKweJSRPWSFTixHAWlNbiqU57N9QcOpbJlu0XjhzWKweJSRPWSFTixHA=Ss6iqU5Lj9QcOpbJlu0XjhzWKweJSRPWSFTixHAXtRQiqU5Ij9QcOEmJSweEa1VkxHAEtEv=OJAle9QcONvWbF/Eqw3WKw0=bs3INDTkxHAWYRqWSJ/Lj9QcOM0EYiYJm/zWKwxJlWQ=SwgLj9QcOEvXOR6WehzWKweJSRPWSFTixHAW0pUiq1dkxHAElsqExsPIBFQctjYiqU5Ij9QcOpbJlu0XjhzWKweJSRPWSFTixHAESMPiqU5Lt=e8YEDol2CIBUn5YjqRj9QcOvbW0NYWbezWKweJSRPWSFnkxHAEtEv=OJAle9QcOvbW0NYWmw3WKvb=Ys3INDTkxHAESwPJlimLjhzWKwDJ0j1Ebv8kxHAXtWx=lJqIBFQctMqXBFgka/zWKwDJ0j1Ebv8kxHAXtWx=lJqIBFQctp1=mFgka/zWKwDJ0j1Ebv8kxHAXtWx=lJqIBFQctRq=BFgkNDgXPDVRNh5ISh2zlNVF0MwFYND5kiCiqFnzkiU5KNq8mHzWKwDWxFxXtp8kxHAWS16XSU1IBFQcOuqiqU5IB1nzlNVF0Nn=3NCJPpg80AwkxHAWbw/=YR6IBUn5YjqRj9QcOR/JxwQESezWKw/XS16XluVkxHAWlimJb1e7kpTokE8kxHAWbjbXOGeIBFQcOueXaFgkNhzWKwqWlWAWOMTixHA=SimiqU5IB2FpB23LBF3IShzWKwxWximXSN8kxHAWbjbXOGeIBFQctJqiqU5IOHAWSGVkxHAWlimJb1ele9QcOR/JxwQEaw3WKvYExG3INDgim=zWKwxWximXSN8kxHAWbjbXOGeIBFQcOimWBFgkavzWKvU=SFA=OMV5tvgFehzWKwqWlWAWOMTixHAEOM6iqU5ISh2zkDgle9QcORQXtW0Emw3WKw6XSw3INDTkxHAW0M6JYWx7S6n5YjqRj9QcORxWYJ0EOezWKwqWOvbEbJnolJTkxHAWxWqJb1ele9QcORxWYJ0EBw3WKw6E0R3INDTkxHAWxWqJb1ele9QcORxWYJ0EBw3WKv1=aFgka/zWKwxWximXSN8kxHAWbWq=bJDIBFQctpUiqU5IaUnolJTRN9QcOEUXlibWeV3okG3kaUnolJTkxHAWxWqJb1ele9QcORxWYJ0EBw3WKwx=OJ3INDTkxHAWxWqJb1ele9QcORxWYJ0EBw3WKw6J0u3INDVkxHAWxWqJb1ele9QcORxWYJ0EBw3WKw6J0u3INDgIkhY5l6b5tU48mHzWKwqWtpUWxMTIkh0JkRwkxHAW0jmESWD7N9QcORxWYJ0EOhzWKwqESN1Xtp8kxHAW0jmESWDIBFQctNmiqU5IB1nzkeU8KEURKiU5KNq8mF3XPeq=kpeFYAwkxHAW0M6JYWxlq5gFB55XPeU8KEUc0=e8YEDol2CRj9QcOR/E0JAEqwgcP=vFmHzWKw/WSRPXSR2kxHAWbWq=bJDXe9QcOEbEOvmWaJYIj9QcOWxWYR6ENhzWKw/WSRPXSRTixHAW0i1iqU5Ij9QcOuqXORQEm/zWKweJxFDXSMg7e9QcOsDEbwqWmV2kxHAWxWqJb1ele9QcOs/WbF6Wmw3WKwqEOu3INDTkxHAWxWqJb1ele9QcOs/WbF6Wmw3WKv1JxG3INDTkxHAWxWqJb1ele9QcOs/WbF6Wmw3WKv1JxG3INDTkxHAWxWqJb1ele9QcOs/WbF6Wmw3WKv1JxG3INDTkxHAWxWqJb1ele9QcOs/WbF6Wmw3WKv1XOF3INDTkxHAWSM0JYjvlq5g=B55LBF2iq1VkxHAEOFPWljmle9QcOs/WbF6Wmw3WKwDES13INDgLB59iq1VkxHAEOEUWOiYIaQ3imFgXU9QcOpYEbHYXaV2kxHAWxWqJb1ele9QcOs/WbF6Wmw3WKv1XOF3INDTkxHAWxWqJb1ele9QcOs/WbF6Wmw3WKv1XOF3INDTkxHAWxWqJb1ele9QcOs/WbF6Wmw3WKvYEOw3INDTkxHAElEv=ONYlq5g=B55LBF2iq1VkxHAWxu/WSEvle9QcOs/WbF6Wmw3WKwDES13INDgLBFYiq1gXPe2zaU8kxHAWbGAJxJ0IBFQctjv=BFgkavzWKwDEtsDEOR273h0JkRwkxHAWSGD=SGQ7N9QcORQXtW0Ebhg=mvzWKw6WxMDEbv8kxHAWSGD=SGQIBFQcOsPJqFgkavzWKw6WxMDEbv8kxHAWSGD=SGQIBFQcOseWaFgka/zWKw6WxMDEbv8kxHAWSGD=SGQIBFQctMeWqFgka1gc0=e8YEDol2CRj9QcOiYJbvv=awgcP=vFmHzWKwqWOG6=tM2kxHAWSGD=SGQXPiU5KNq8mHzWKweWtjbJlR2kxHAEOseW0s0le9QcORQWOU1=aw3WKvUWYR3INDTLe/xL0FViqFgLj9QcOi1Jbu0WSh2zlNVF0MwFYND5kiCiqFnza1n=l/x=khY5l6b5tU48mHzWKwxWbReEOsTIkh0JkRwkxHAWls0WOJQ7N9QcORQXtW0EbhzWKwDW0ReXOH8kxHAWls0WOJQIBFQcOR/=aFgkSD3ixh2zkeY5l6b5tU48mHzWKwD=bG/JxGTkxHAWlWqJSMAIkh0JkRwkxHAWbE1=ONv7N9QcOR6JYuxWa/zWKweEbuQESF2cPDnkxHAESJDWOMPle9QcORx=tueJaw3WKvUWxs3IND2kxHAEOFPEORQle9QcORx=tueJaw3WKv1JSs3INDVkxHAESJDWOMPle9QcORx=tueJaw3WKwx=YW3IND2kxHAEOFPEORQle9QcORx=tueJaw3WKv1E0J3INDVkxHAESJDWOMPle9QcORx=tueJaw3WKvY=bs3IND2=3NCJPpg80ATkxHAWbuDWSGxLj9QcOMQ=tu6EmUn5YjqRj9QcOv1WS5v7N9QcORx=tueJShq=kpeFYAwkxHAEOFPEORQle9QcOv1WS5vIBFQcO=vWBFgkavzWKwqEOu/WOWVkxHAESH1=O10ISh2Lj9QcOM0EOGeEehzWKwqW0p1ElsTixHAXtM6iqU57N9QcOuPExuqWjhzWKwqW0p1ElsTixHAEx5YiqU5Lj9QcOM0EOGeEehzWKwqW0p1ElsTixHAJxHUiqU57l=e8YEDol2CIj9QcONbWbF0WB/zWKwe=l=bJ0JgcP=vFmHzWKw/E0p1JSs2kxHAWbE1=ONvXPiU5KNq8mHzWKwDExFDWbH8kxHAWS51=ts/IBFQcO=vWBFgkavzWKweJxRPEbGVkxHAElNYJ0EYISh2Lj9QcOM0EOGeEehzWKwqW0p1ElsTixHA=SGQiqU57l=e8YEDol2CIj9QcOs0=SFAEB/zWKwD=YEvWtugcP=vFmHzWKw/XSF0EbJ2kxHAWbE1=ONvXPiU5KNq8mHzWKwDExFDWbH8kxHAWS1PEbJ0IBFQcOvm=mFgkavzWKw/EYMPXOuVkxHAEt=bJSH1ISh2Lj9QcOM0EOGeEehzWKwqW0p1ElsTixHAXOM0iqU57N9QcOuPExuqWjhzWKwqW0p1ElsTixHAElNbiqU5Lj9QcOM0EOGeEehzWKwqW0p1ElsTixHAExF/iqU57N9QcOuPExuqWjhzWKwqW0p1ElsTixHAEO13INDVkxHAESJDWOMPle9QcORx=tueJaw3WKwAXSw3IND2=3NCJPpg80ATkxHAEOReWOMALj9QctWqWlJ6EBUn5YjqRj9QcORqEOGDWOezWKwqW0p1ElsnFYND5kiCRj9QcOuPExuqWjhzWKwqWbuQEOGTixHAEtRqiqU5Ij9QcOuqESGeXB/zWKvbWbjYXSugXPDVkxHAESJDWOMPle9QcORx=tueJaw3WKvb=ls3IND2kxHAEOFPEORQle9QcORx=tueJaw3WKwAWSu3INDVkxHAESJDWOMPle9QcORx=tueJaw3WKwPWO13IND2=3NCJPpg80ATkxHAESFeESWALj9QcOpbXSNv=BUn5YjqRj9QcOimE0NmESezWKwqW0p1ElsnFYND5kiCRj9QcOuPExuqWjhzWKwqJb5UJbMTixHAE0M/iqU5Ij9QcOMPESMxXB/zWKwDJx1eJlugXPDVkxHAESJDWOMPle9QcORx=tueJaw3WKvUE0s3IND2=3NCJPpg80ATkxHAEtsAXtiYLj9QctM0XOHb=BUn5YjqRj9QcOW6Jb1xJxezWKwqW0p1ElsnFYND5kiCRj9QcOuPExuqWjhzWKwxXlR6W0WTixHA=SpbiqU5Ij9QcOpvXOvm=m/zWKvUEbwQJ0ugXPDVkxHAESJDWOMPle9QcORx=tueJaw3WKwPEOG3IND2kxHAEOFPEORQle9QcORx=tueJaw3WKw0EqFgka/zWKweEbuQES58kxHAWbE1=ONvIBFQctpbXBFgkSeY5l6b5tU48mvzWKvbWbiUEYsVkxHAWbuQ=bsQIkh0JkRwkxHAW0EbEtJ2kxHAWbE1=ONvXPiU5KNq8mHzWKwDExFDWbH8kxHAW0EbEtJTixHAEOE1iqU5Ij9QctWqWYM0Ja/zWKwqEOHYWSGgXPDVkxHAESJDWOMPle9QcORx=tueJaw3WKw/ESu3IND2=3NCJPpg80ATkxHAWxsxWxFDLj9QcOMxWbF0EqUn5YjqRj9QcOWxEtjmWSezWKwqW0p1ElsnFYND5kiCRj9QcOuPExuqWjhzWKwxWxpvJbsTixHAJlpUiqU5Ij9QcOW/WxWPEB/zWKweWxRPEbFgXPDVkxHAESJDWOMPle9QcORx=tueJaw3WKwxXlM3IND2=3NCJPpg80ATkxHAW0uxXO1PLj9QcOs/Wb=UEBUn5YjqRj9QcOWx=OWqWbezWKwqW0p1ElsnFYND5kiCRj9QcOuPExuqWjhzWKwxW0uxWbRTixHA=OvviqU5Ij9QcOE1Wxw6Eq/zWKw/WSR0=SugXPDVkxHAESJDWOMPle9QcORx=tueJaw3WKwe=Ss3IND2=3NCJPpg80ATkxHAWxW/XSR0Lj9QcORxWxRQ=BUn5YjqRj9QcOWeWONmExezWKwqW0p1ElsnFYND5kiCRj9QcOuPExuqWjhzWKwxESGeJbFTixHA=OvviqU5Ij9QcOWxWS1qEm/zWKwqWxWqWtugXPDVkxHAESJDWOMPle9QcORx=tueJaw3WKweEx13IND2kxHAEOFPEORQle9QcORx=tueJaw3WKv1Wx13INDVkxHAESJDWOMPle9QcORx=tueJaw3WKvv=tW3IND2=3NCJPpg80ATkxHAWYR0WYjbLj9QcOjY=YMeJaUn5YjqRj9QcOj1JYRqWbezWKwqW0p1ElsnFYND5kiCRj9QcOuPExuqWjhzWKw/=timWbRTixHAEbvviqU5Ij9QcOimEbivJq/zWKw/=Y=UElsgXPDVkxHAESJDWOMPle9QcORx=tueJaw3WKw/=OW3IND2=3NCJPpg80ATkxHAWxu/WxsALj9QcOse=bjmWaUn5YjqRj9QcOpmWSUbWOezWKwqW0p1ElsnFYND5kiCRj9QcOuPExuqWjhzWKwDJbs6JxGTixHAEbvviqU5Ij9QcOWDWSW/XB/zWKw/ElJ/JbsgXPDVkxHAESJDWOMPle9QcORx=tueJaw3WKwPJxF3IND2=3NCJPpg80ATkxHAExseWbRDLj9QcOjYE0jvJaUn5YjqRj9QcOWxJxwqXSezWKwqW0p1ElsnFYND5kiCRj9QcOuPExuqWjhzWKwxW0WAWb1TixHAExJ6iqU5Ij9QcOF/ESRqEB/zWKw/=b5vJlsgXPDVkxHAESJDWOMPle9QcORx=tueJaw3WKvvJSW3IND2kxHAEOFPEORQle9QcORx=tueJaw3WKvvJ0R3INDVkxHAESJDWOMPle9QcORx=tueJaw3WKv1WtM3IND2kxHAEOFPEORQle9QcORx=tueJaw3WKvbWOR3INDVkxHAESJDWOMPle9QcORx=tueJaw3WKw0JxJ3IND2kxHAEOFPEORQle9QcORx=tueJaw3WKvmXls3INDVkxHAESJDWOMPle9QcORx=tueJaw3WKvvElW3IND2kxHAEOFPEORQle9QcORx=tueJaw3WKvY=S13INDVkxHAESJDWOMPle9QcORx=tueJaw3WKw6=bu3IND2kxHAEOFPEORQle9QcORx=tueJaw3WKwe=tR3INDVkxHAESJDWOMPle9QcORx=tueJaw3WKwqXSF3IND2kxHAEOFPEORQle9QcORx=tueJaw3WKw0Jls3INDVkxHAESJDWOMPle9QcORx=tueJaw3WKw0=tR3IND2kxHAEOFPEORQle9QcORx=tueJaw3WKv1Wls3INDVkxHAESJDWOMPle9QcORx=tueJaw3WKwPJS13IND2kxHAEOFPEORQle9QcORx=tueJaw3WKw6JSG3INDVkxHAESJDWOMPle9QcORx=tueJaw3WKwxEbM3IND2kxHAEOFPEORQle9QcORx=tueJaw3WKwPElM3INDVkxHAESJDWOMPle9QcORx=tueJaw3WKw6Ebs3IND2kxHAEOFPEORQle9QcORx=tueJaw3WKvUJSF3INDVkxHAESJDWOMPle9QcORx=tueJaw3WKvYXtR3IND2kxHAEOFPEORQle9QcORx=tueJaw3WKw0=bM3INDVkxHAESJDWOMPle9QcORx=tueJaw3WKw0WxR3IND2kxHAEOFPEORQle9QcORx=tueJaw3WKv1XSu3INDVkxHAESJDWOMPle9QcORx=tueJaw3WKwDJ0J3IND2kxHAEOFPEORQle9QcORx=tueJaw3WKvbXOR3INDVkxHAESJDWOMPle9QcORx=tueJaw3WKwD=bJ3IND2=3NCJPpg80ATkxHAW0sxWbJAIkh0JkRwkxHAEO10Jxp17N9QcORx=tueJShq=kpeFYAwkxHAEOFPEORQle9QcOu6EYWD=Bw3WKvmJSu3INDTkxHAW0sxWbJAISh2Lj9QcOM0EOGeEehzWKwqW0p1ElsTixHAEbw0iqU57N9QcOuPExuqWjhzWKwqW0p1ElsTixHAEOMAiqU5Lj9QcOM0EOGeEehzWKwqW0p1ElsTixHAJb10iqU57N9QcOuPExuqWjhzWKwqW0p1ElsTixHAEOUUiqU5Lj9QcOM0EOGeEehzWKwqW0p1ElsTixHA=O=biqU57N9QcOuPExuqWjhzWKwqW0p1ElsTixHAJluqiqU5Lj9QcOM0EOGeEehzWKwqW0p1ElsTixHAWxwxiqU57l=e8YEDol2CIj9QcOEbEbsqWa/zWKwDXSH1ElugcP=vFmHzWKwDEli1JSs2kxHAWbE1=ONvXPiU5KNq8mHzWKwDExFDWbH8kxHAEONm=ts/IBFQcOjbJmFgkavzWKwxJxJ/WbsVkxHAEO1Q=ON1ISh2Lj9QcOM0EOGeEehzWKwqW0p1ElsTixHAEliUiqU57l=e8YEDol2CIj9QcOUYExJPEB/zWKwDXOF6=bJgcP=vFmHzWKw0=OjYESs2kxHAWbE1=ONvXPiU5KNq8mHzWKwDExFDWbH8kxHAEYu/=bM/IBFQcOMAJaFgkavzWKw6=bF0ExuVkxHAEOwPXlJ0ISh2Lj9QcOM0EOGeEehzWKwqW0p1ElsTixHA=S10iqU57l=e8YEDol2CIj9QcOpUEx10WB/zWKvmJxs6WbGgcP=vFmHzWKwx=Oiv=bG2kxHAWbE1=ONvXPiU5KNq8mHzWKwDExFDWbH8kxHAW0uqJlJQIBFQctMDJqFgkavzWKwD=SF6EbGVkxHAJYW/XSRQISh2Lj9QcOM0EOGeEehzWKwqW0p1ElsTixHAJYW/iqU57N9QcOuPExuqWjhzWKwqW0p1ElsTixHAEbj1iqU5Lj9QcOM0EOGeEehzWKwqW0p1ElsTixHAEOEbiqU57N9QcOuPExuqWjhzWKwqW0p1ElsTixHAESUbiqU5Lj9QcOM0EOGeEehzWKwqW0p1ElsTixHAEOJeiqU57l=e8YEDol2CIj9QcOWPExM0=a/zWKweW0NvWlRgcP=vFmHzWKwxWYs6JSJ2kxHAWbE1=ONvXPiU5KNq8mHzWKwDExFDWbH8kxHAWxivXls0IBFQctMDJqFgkavzWKwxExFeEYMVkxHAESEUJSjmISh2Lj9QcOM0EOGeEehzWKwqW0p1ElsTixHAWbNYiqU57N9QcOuPExuqWjhzWKwqW0p1ElsTixHA=YJ0iqU5Lj9QcOM0EOGeEehzWKwqW0p1ElsTixHA=bpUiqU57N9QcOuPExuqWjhzWKwqW0p1ElsTixHAWbNviqU5Lj9QcOM0EOGeEehzWKwqW0p1ElsTixHAWSMqiqU57N9QcOuPExuqWjhzWKwqW0p1ElsTixHAJxJ0iqU5Lj9QcOM0EOGeEehzWKwqW0p1ElsTixHAWYsDiqU57N9QcOuPExuqWjhzWKwqW0p1ElsTixHAEYEUiqU5Lj9QcOM0EOGeEehzWKwqW0p1ElsTixHAESGxiqU57l=e8YEDol2CIj9QcOuq=YuDXB/zWKwxWSWQXOJgcP=vFmHzWKwxXOMq=bs2kxHAWbE1=ONvXPiU5KNq8mHzWKwDExFDWbH8kxHAWxweWYJ/IBFQcO5UWaFgkavzWKwDWY=1EOwVkxHAWxsxWOw0ISh2Lj9QcOM0EOGeEehzWKwqW0p1ElsTixHAJSiviqU57N9QcOuPExuqWjhzWKwqW0p1ElsTixHAWbu0iqU5Lj9QcOM0EOGeEehzWKwqW0p1ElsTixHAJSJ3IND2=3NCJPpg80ATkxHAElMeWOjmLj9QcONbEtMeEmUn5YjqRj9QcOM0J0R6=bezWKwqW0p1ElsnFYND5kiCRj9QcOuPExuqWjhzWKweEYEmXlJTixHAElWQiqU5Ij9QcONUESG/Jm/zWKweJxpUESJgXPDVkxHAESJDWOMPle9QcORx=tueJaw3WKv1WbW3IND2=3NCJPpg80ATkxHAWSuPExG/Lj9QcOu0EOG0JqUn5YjqRj9QcOueXSRAESezWKwqW0p1ElsnFYND5kiCRj9QcOuPExuqWjhzWKwDES1qXOMTixHA=OF6iqU5Ij9QcOsDExFQWa/zWKwDEbuQEYWgXPDVkxHAESJDWOMPle9QcORx=tueJaw3WKwAEmFgkSeY5l6b5tU48mvzWKvvJxJQEluVkxHAWYi1JYWQIkh0JkRwkxHAW0Wq=bRD7N9QcORx=tueJShq=kpeFYAwkxHAEOFPEORQle9QcOEbWYJqEBw3WKv1Ex13INDTkxHAJlW0WON1Lj9QcOim=tibWB1nza/zWKweEbuQES58kxHAWbE1=ONvIBFQcOR6=mFgkSeY5l6b5tU48mvzWKweEOUbWS1VkxHAWSGeWlseIkh0JkRwkxHAWYseWljY7N9QcORx=tueJShq=kpeFYAwkxHAEOFPEORQle9QcOivESjv=mw3WKvmW0u3INDTkxHAESu6Jxs6Lj9QcOsQESjvEa1nza/zWKweEbuQES58kxHAWbE1=ONvIBFQcO1eJmFgkSeY5l6b5tU48mvzWKwqXSGQ=bGVkxHAES=bEOjvIkh0JkRwkxHAWbR0Exiv7N9QcORx=tueJShq=kpeFYAwkxHAEOFPEORQle9QcORqEbFqJaw3WKvmW0u3INDTkxHAWb1QWtJQLj9QcOM0Jxu/Ja1nza/zWKweEbuQES58kxHAWbE1=ONvIBFQcOsQEaFgkSezWKwDExFDWbH8kxHAWbE1=ONvIBFQctR6XaFgka/zWKweEbuQES58kxHAWbE1=ONvIBFQctN1WBFgkSezWKwDExFDWbH8kxHAWbE1=ONvIBFQctMPEmFgka/zWKweEbuQES58kxHAWbE1=ONvIBFQcOWQXBFgkSezWKwDExFDWbH8kxHAWbE1=ONvIBFQcOU1EBFgka/zWKweEbuQES58kxHAWbE1=ONvIBFQcOJAJmFgkSezWKwDExFDWbH8kxHAWbE1=ONvIBFQcOw0JqFgka/zWKweEbuQES58kxHAWbE1=ONvIBFQcOWqEqFgkSezWKwDExFDWbH8kxHAWbE1=ONvIBFQcO=U=aFgkSh0JkRwkxHAESEmEYMe7N9QcOM0EOGeExhg=mvzWKwDExFDWbH8kxHAWbE1=ONvIBFQcOu0EBFgkavzWKwDExFDWbH8kxHAWbE1=ONvIBFQcOiUiqU5Lj9QcOuPExuqWjhzWKwqW0p1ElsTixHAWYM3INDgIkh0JkRwkxHAES=YJlu67N9QcOuPExuqWjhzWKwqW0p1ElsTixHAESw/iqU5Ij9QcOivXtjbWq1nkxHAES=YJlu6le9QcORx=tueJaw3WKwPExR3INDTkxHAEOFPEORQle9QcORx=tueJaw3WKvb=Ou3INDVkxHAEOFPEORQle9QcORx=tueJaw3WKwAWtW3INDVRaj8ka1VkxHAES=YJlu6le9QcORx=tueJaw3WKwAE0s3IahzWKwqW0p1ElsTixHAWYs3INDTkxHAEOFPEORQle9QcORx=tueJaw3WKvUWYW3INDVkxHAEOFPEORQle9QcORx=tueJaw3WKw0=YJ3INDgLj9QcOM0=Yj1XNhzWKwqW0p1ElsTixHAXO5viq1dkxHAWbE1=ONvIBFQcOiviqU5Ij9QcOuPExuqWjhzWKwqW0p1ElsTixHA=li1iqU5Lj9QcOuPExuqWjhzWKwqW0p1ElsTixHAXSGQiqU5ISh0JkRwkxHAEOGP=SsQ7lp4JPNh=l6Dle9QcORx=tueJaw3WKwxXOs3IahzWKwqW0p1ElsTixHAEOu0iqU5IjhzWKwDExFDWbH8kxHAWbE1=ONvIBFQctivWaFgkNDgLj9QcOEUESR6EOe180Ee8lNC5jhzWKwqW0p1ElsTixHAWxw/iq1dkxHAWbE1=ONvIBFQcOuDEmFgkav8kxHAEOFPEORQle9QcORx=tueJaw3WKvbExM3INe5Ia/zWKwqWSv1=OW2=t2b5leU83p8kxHAWbE1=ONvIBFQcOWAWaFgIe9QcORx=tueJaw3WKwDEOJ3INDTle9QcOuPExuqWjhzWKwqW0p1ElsTixHAEONYiqU5ka1VkxHAEtim=Y=v7lp4JPNh=l6Dle9QcORx=tueJaw3WKwxXOs3IahzWKwqW0p1ElsTixHAEOu0iqU5IjhzWKwDExFDWbH8kxHAWbE1=ONvIBFQctW/JqFgkNDgLj9QcOuDWx1PWSe180Ee8lNC5jhzWKwqW0p1ElsTixHAWxw/iq1dkxHAWbE1=ONvIBFQcOuDEmFgkav8kxHAEOFPEORQle9QcORx=tueJaw3WKvvWS13INe5Ia/zWKw/WlsAJbF2=t2b5leU83p8kxHAWbE1=ONvIBFQcOWAWaFgIe9QcORx=tueJaw3WKwDEOJ3INDTle9QcOuPExuqWjhzWKwqW0p1ElsTixHA=SR0iqU5ka1VkxHAESwP=Ss/7lp4JPNh=l6Dle9QcORx=tueJaw3WKwxXOs3IahzWKwqW0p1ElsTixHAEOu0iqU5IjhzWKwDExFDWbH8kxHAWbE1=ONvIBFQcOuqWmFgkNDgLj9QcOMQJl=bWOe180Ee8lNC5jhzWKwqW0p1ElsTixHAWxw/iq1dkxHAWbE1=ONvIBFQcOuDEmFgkav8kxHAEOFPEORQle9QcORx=tueJaw3WKvUEtM3INe5Ia/zWKwDXtNm=bR2=t2b5leU83p8kxHAWbE1=ONvIBFQcOWAWaFgIe9QcORx=tueJaw3WKwDEOJ3INDTle9QcOuPExuqWjhzWKwqW0p1ElsTixHAJlsQiqU5ka1VkxHAWSR/WtJx7lp4JPNh=l6Dle9QcORx=tueJaw3WKwxXOs3IahzWKwqW0p1ElsTixHAEOu0iqU5IjhzWKwDExFDWbH8kxHAWbE1=ONvIBFQcOFqWmFgkNDgLj9QcOu6=Y=bWbezWKw/JxivESv8kxHAWbE1=ONvIBFQcOWAWaFgIe9QcORx=tueJaw3WKvU=bw3INDTle9QcOuPExuqWjhzWKwqW0p1ElsTixHAJSW/iqU5Lj9QcOuPExuqWjhzWKwqW0p1ElsTixHAJxMeiqU5Lj9QcOuPExuqWjhzWKwqW0p1ElsTixHAJSNviqU5Lj9QcOuPExuqWjhzWKwqW0p1ElsTixHA=aFgka/zWKwDExFDWbH8kxHAWbE1=ONvIBFQcts/iqU5Lj9QcOuPExuqWjhzWKwqW0p1ElsTixHAJSJ/iqU5Lj9QcOuPExuqWjhzWKwqW0p1ElsTixHA=b=miqU5Lj9QcOuPExuqWjhzWKwqW0p1ElsTixHAWYWQiqU5Lj9QcOuPExuqWjhzWKwqW0p1ElsTixHAXlMqiqU5Lj9QcOuPExuqWjhzWKwqW0p1ElsTixHAEOuPiqU5Lj9QcOuPExuqWjhzWKwqW0p1ElsTixHAWSWQiqU5Lj9QcOuPExuqWjhzWKwqW0p1ElsTixHAXSJQiqU5Lj9QcOuPExuqWjhzWKwqW0p1ElsTixHA=lNmiqU5Lj9QcOuPExuqWjhzWKwqW0p1ElsTixHAESUYiqU5Lj9QcOuPExuqWjhzWKwqW0p1ElsTixHAWl=viqU5Lj9QcOuPExuqWjhzWKwqW0p1ElsTixHAE0=viqU5Lj9QcOuPExuqWjhzWKwqW0p1ElsTixHAXlJqiqU5Lj9QcOuPExuqWjhzWKwqW0p1ElsTixHAXSibiqU5Lj9QcOuPExuqWjhzWKwqW0p1ElsTixHA=tJAiqU5Lj9QcOuPExuqWjhzWKwqW0p1ElsTixHAWb1AiqU5Lj9QcOuPExuqWjhzWKwqW0p1ElsTixHA=tu0iqU5Lj9QcOuPExuqWjhzWKwqW0p1ElsTixHAESjUiqU5Lj9QcOuPExuqWjhzWKwqW0p1ElsTixHAElWqiqU5ka1VkxHAXO16WSU17N9QcOjbWYseXjhzWKwqW0p1ElsTixHAWxw/iq1dkxHAWbE1=ONvIBFQcOuDEmFgkav8kxHAEOFPEORQle9QcORx=tueJaw3WKw/JlJ3INDVkxHAEOFPEORQle9QcORx=tueJaw3WKw/ESW3INDVkxHAEOFPEORQle9QcORx=tueJaw3WKw/WtM3INDVkxHAEOFPEORQle9QcORx=tueJaw3WKvYXSw3INDVkxHAEOFPEORQle9QcORx=tueJaw3WKvm=tu3INDVkxHAEOFPEORQle9QcORx=tueJaw3WKvbESw3INDVkxHAEOFPEORQle9QcORx=tueJaw3WKv1JYR3INDVkxHAEOFPEORQle9QcORx=tueJaw3WKwDXSs3INDVkxHAEOFPEORQle9QcORx=tueJaw3WKweJb13INDVkxHAEOFPEORQle9QcORx=tueJaw3WKweJxs3INDVkxHAEOFPEORQle9QcORx=tueJaw3WKwP=S13INDVkxHAEOFPEORQle9QcORx=tueJaw3WKvU=lW3INDVkxHAEOFPEORQle9QcORx=tueJaw3WKvUEOJ3INDVkxHAEOFPEORQle9QcORx=tueJaw3WKvYJSF3INDVkxHAEOFPEORQle9QcORx=tueJaw3WKwxEls3INDVkxHAEOFPEORQle9QcORx=tueJaw3WKwAWtJ3INDVkxHAEOFPEORQle9QcORx=tueJaw3WKvbWxJ3INDVkxHAEOFPEORQle9QcORx=tueJaw3WKwAElR3INDVkxHAEOFPEORQle9QcORx=tueJaw3WKvbWtu3INDVkxHAEOFPEORQle9QcORx=tueJaw3WKw0JxF3INDVkxHAEOFPEORQle9QcORx=tueJaw3WKvbWxu3INDVkxHAEOFPEORQle9QcORx=tueJaw3WKw0XSR3INDVkxHAEOFPEORQle9QcORx=tueJaw3WKvU=Sw3INDVkxHAEOFPEORQle9QcORx=tueJaw3WKw6=ls3INDVkxHAEOFPEORQle9QcORx=tueJaw3WKwA=YW3INDVkxHAEOFPEORQle9QcORx=tueJaw3WKvUEbM3INDVkxHAEOFPEORQle9QcORx=tueJaw3WKw0Ebu3INDVkxHAEOFPEORQle9QcORx=tueJaw3WKwAEBFgka/zWKwDExFDWbH8kxHAWbE1=ONvIBFQcOwQiqU5ka1VkxHAW0uqJxwq7N9QcOjbWYseXjhzWKwqW0p1ElsTixHAWxw/iq1dkxHAWbE1=ONvIBFQcOuDEmFgkav8kxHAEOFPEORQle9QcORx=tueJaw3WKweWOJ3INDVkxHAEOFPEORQle9QcORx=tueJaw3WKv1XOR3INDVkxHAEOFPEORQle9QcORx=tueJaw3WKvvWSW3INDVkxHAEOFPEORQle9QcORx=tueJaw3WKwPWtW3INDVkxHAEOFPEORQle9QcORx=tueJaw3WKvb=S13INDVkxHAEOFPEORQle9QcORx=tueJaw3WKvbWtJ3INDVkxHAEOFPEORQle9QcORx=tueJaw3WKwDXSu3INDVkxHAEOFPEORQle9QcORx=tueJaw3WKvvWx13INDVkxHAEOFPEORQle9QcORx=tueJaw3WKvmJYM3INDVkxHAEOFPEORQle9QcORx=tueJaw3WKvbJlW3INDVkxHAEOFPEORQle9QcORx=tueJaw3WKvvJSw3INDVkxHAEOFPEORQle9QcORx=tueJaw3WKvvJYW3INDVkxHAEOFPEORQle9QcORx=tueJaw3WKwDXlu3INe5Ia/zWKwx=bUvWts2kxHAWlWqJSMAle9QcORx=tueJaw3WKwxXOs3IahzWKwqW0p1ElsTixHAEOu0iqU5IjhzWKwDExFDWbH8kxHAWbE1=ONvIBFQctpU=BFgka/zWKwDExFDWbH8kxHAWbE1=ONvIBFQct=vJmFgka/zWKwDExFDWbH8kxHAWbE1=ONvIBFQcOUbJqFgka/zWKwDExFDWbH8kxHAWbE1=ONvIBFQctRQJqFgka/zWKwDExFDWbH8kxHAWbE1=ONvIBFQcONbEqFgka/zWKwDExFDWbH8kxHAWbE1=ONvIBFQcOWPJaFgka/zWKwDExFDWbH8kxHAWbE1=ONvIBFQcOMe=aFgka/zWKwDExFDWbH8kxHAWbE1=ONvIBFQctJx=BFgka/zWKwDExFDWbH8kxHAWbE1=ONvIBFQctj1EmFgka/zWKwDExFDWbH8kxHAWbE1=ONvIBFQcOs/WBFgka/zWKwDExFDWbH8kxHAWbE1=ONvIBFQcOsxJqFgka/zWKwDExFDWbH8kxHAWbE1=ONvIBFQcOJxEqFgka/zWKwDExFDWbH8kxHAWbE1=ONvIBFQcO=b=mFgka/zWKwDExFDWbH8kxHAWbE1=ONvIBFQcOWqXBFgka/zWKwDExFDWbH8kxHAWbE1=ONvIBFQcOJ6JmFgka/zWKwDExFDWbH8kxHAWbE1=ONvIBFQcOvmEqFgka/zWKwDExFDWbH8kxHAWbE1=ONvIBFQcOw0WqFgka/zWKwDExFDWbH8kxHAWbE1=ONvIBFQctpmXBFgka/zWKwDExFDWbH8kxHAWbE1=ONvIBFQcOW0WqFgka/zWKwDExFDWbH8kxHAWbE1=ONvIBFQctMeWBFgka/zWKwDExFDWbH8kxHAWbE1=ONvIBFQcOWeXaFgka/zWKwDExFDWbH8kxHAWbE1=ONvIBFQcOwP=BFgka/zWKwDExFDWbH8kxHAWbE1=ONvIBFQcOEvWaFgkNDgX0UYItp4JPNh=l6Dle9QcORx=tueJaw3WKwAEOM3IahzWKwqW0p1ElsTixHAJYjmiqU5Ij9QcOuPExuqWjhzWKwqW0p1ElsTixHAWxj1iqU5IaUnolJTkxHAEOFPEORQle9QcORx=tueJaw3WKvUEtW3INDTkxHAEOFPEORQle9QcORx=tueJaw3WKw0ESG3INDVkxHAEOFPEORQle9QcORx=tueJaw3WKw0ESG3INDgIkhY5l6b5tU48mHzWKwxEbNYXOGTIkh0JkRwkxHAWS=Y=Y=b7N9QcORx=tueJa/zWKwP=SimJ0R2kxHAWSF0EtM/le9QcOs0=Y=YJqw3WKvYESG3INDTkxHAXSJxWbiULtjq=PNh=l6DFq1nFYND5kiCRj9QcOEm=timWxeC5l/VLj9QcO5UWYibJbh2zlNVF0MwkxHAEOGP=SsQle9QcORx=tueJaw3WKwDES13IND2=t2b5leU83p8kxHAWbE1=ONvIBFQcOwDEaFgIe9QcORx=tueJaw3WKvmJlR3INDTkxHAEOFPEORQle9QcORx=tueJaw3WKwxWlu3INDgle9QcORx=tueJaw3WKwDES13INDnzlUYIBjzWKw/WlsAJbFgc0UYIj9QcOuPExuqWjhzWKwqW0p1ElsTixHAElRQiqU5Ij9QcOuPExuqWjhzWKwqW0p1ElsTixHAEYMeiqU5Lj9QcOuPExuqWjhzWKwqW0p1ElsTixHAEYMeiqU5IaUzWKw/WlsAJbF2=t2b5leU83p8kxHAWbE1=ONvIBFQcOWAWaFgIe9QcORx=tueJaw3WKwDEOJ3INDTle9QcOuPExuqWjhzWKwqW0p1ElsTixHAElR/iqU5ka1n=l/x=khY5l6b5tU48mHzWKwDJYMPXOwTIkh0JkRwkxHAWSiUElue7N9QcORx=tueJa/zWKwq=bMD=O12kxHAW0pbWxvUle9QcOsq=SN1Eaw3WKwAEOM3IahzWKw/WYMe=OMTixHAJYjmiqU5Ij9QcOMxJb=UENhzWKw/WYMe=OMTixHA=SW/iqU5IShzWKwq=bMD=OU8kxHAWSiUElueIBFQcOjYXaFgkNhzWKw/WYMe=OMTixHAXSvYiqU57N9QcOMxJb=UENhzWKw/WYMe=OMTixHAW0=biqU5XPe2zlUYIBjzWKweWtjYJxGgc0UYIj9QcOuPExuqWjhzWKwqW0p1ElsTixHA=SpbiqU5Ij9QcOuPExuqWjhzWKwqW0p1ElsTixHA=SWAiqU5Lj9QcOuPExuqWjhzWKwqW0p1ElsTixHA=SWAiqU5IaUn=3NCJPpg80AwkxHAWb=vExsDIBUn5YjqRj9QcOW0WOJAJSezWKwqW0p1ElsnkxHAESEmEYMele9QcOW0WOJAJaw3WKvY=bs3INDTkxHAESJD=bueLjhzWKweW0R0=SN8kxHAWxJQEbvvIBFQcOvUXaFgkNDgXPe2=l/x=aHzWKweWtjYJxG2=t2b5leU83p8kxHAWbE1=ONvIBFQcOWAWaFgIe9QcORx=tueJaw3WKwDEOJ3INDTle9QcOuPExuqWjhzWKwqW0p1ElsTixHAEOMAiqU5ka1nzN9QcOuPExuqWjhzWKwqW0p1ElsTixHAESw/iqU5Ij9QcOMDWOFeJaU8kxHAWbE1=ONvIBFQcO16XBFgkavzWKweWbUbJ0M273h0JkRwkxHAW0=mWS5m7N9QcORx=tueJa/zWKwqWSW0WOF2cPDnkxHAWbsxEbGPle9QcOEYJbsPJmw3WKw/=OG3IND2=3NCJPpg80ATkxHAXSH1EOsQLj9QcOuAJxRqWaUn5YjqRj9QcOjv=S=mESezWKwx=YR/E0RnFYND5kiCRj9QcOMxJb=UENhzWKw/JlM0JbMTixHA=S5viqU5Ij9QcO1Q=Ou/WB/zWKwDXtWqWbsgXPDVkxHAWbsxEbGPle9QcOEYJbsPJmw3WKweJSR3IND2kxHAESEmEYMele9QcOEYJbsPJmw3WKw0=tR3INDVkxHAWbsxEbGPle9QcOEYJbsPJmw3WKwDEaFgkSezWKweW0R0=SN8kxHAW0=mWS5mIBFQcO5vXaFgka/zWKwqWSW0WO58kxHAW0=mWS5mIBFQctWeWaFgkSezWKweW0R0=SN8kxHAW0=mWS5mIBFQcOW0EaFgka/zWKwqWSW0WO58kxHAW0=mWS5mIBFQcORAWqFgkSezWKweW0R0=SN8kxHAW0=mWS5mIBFQcO10WaFgka/zWKwqWSW0WO58kxHAW0=mWS5mIBFQcOR/EBFgkSezWKweW0R0=SN8kxHAW0=mWS5mIBFQctJAJmFgka/zWKwqWSW0WO58kxHAW0=mWS5mIBFQcO5mWBFgkSezWKweW0R0=SN8kxHAW0=mWS5mIBFQcOJxWmFgka/zWKwqWSW0WO58kxHAW0=mWS5mIBFQctM6WBFgkSezWKweW0R0=SN8kxHAW0=mWS5mIBFQcOpb=mFgka/zWKwqWSW0WO58kxHAW0=mWS5mIBFQcONbJqFgkSeY5l6b5tU48mvzWKwxEbj1WSWgcP=vFmHzWKwDEb1qXOW2kxHAW0=mWS5mXPiU5KNq8mHzWKweW0R0=SN8kxHAEOJ6WbwxIBFQcOpYEmFgkavzWKwxEbj1WSWgXPDVkxHAWbsxEbGPle9QcOEYJbsPJmw3WKw6Wls3IND2kxHAESEmEYMele9QcOEYJbsPJmw3WKw0XOJ3INDn5YjqRj9QctpU=lueEbezWKwqWSW0WOFnolJTkxHAESEmEYMele9QcOEYJbsPJmw3WKwPWO13INDTkxHAESEmEYMele9QcOEYJbsPJmw3WKvmXSJ3INDVkxHAESEmEYMele9QcOEYJbsPJmw3WKv1EYW3INDgIkhY5l6b5tU48mHzWKwDWli1EbuTIkh0JkRwkxHAWxuAWxJ07N9QcOEYJbsPJbhb806x5BHzWKwxWOGeW0R2kxHAWYjmWtuAle9QcOWDXOW0Emw3WKwxXOs3IahzWKwxEOwxEbJTixHAEOu0iqU5IBFbiqhzWKwqElRDJSFgXPiU5KNq8mHzWKv1=lN1ES=8kxHAWxuAWxJ0IBFQcOj1WBFgkavzWKwxWOGeW0RV83NV8B1nzkeU8KEUcP=vFmHzWKwxWt=mEbF2le9QcOuQE0M/WB/zWKwx=SMqXSuVkxHAWbsA=tuxLj9QcOpmJY=YJa/zWKwDEOW6ExsVkxHAWSjvXtRPLj9QcOMAE0M/Wa/zWKweWtjYJxGVkxHAEOvUJYJqLj9QcOsqWSHYWeDVkxHAWbWeJSJD7aF3Xe9QcOWQ=YR0EehzWKwx=YR/E0RTixHAEbJQiqU5It=e8YEDol2CIj9QcORQE0MAJaUn5YjqRj9QcOMPWYs6WSezWKwx=YR/E0RVkxHAESRxEl=U7kh2Xe9QcOMqWxNY=NhzWKweExivXSsTixHAW0M0iqU57l=e8YEDol2CIj9QcOuP=lu6Eq/zWKweXSMxWbRgcP=vFmHzWKw/=lEm=YJ2kxHAESFqJS1/XPiU5KNq8mHzWKweW0R0=SN8kxHAWlNbJY=YIBFQct=YWaFgkavzWKwDE0N1XSFVkxHAES1eWxRqISh2Lj9QcOMqWxNY=NhzWKweExivXSsTixHAEYMAiqU57l=e8YEDol2CIj9QcOEbE0NUJm/zWKweWl=1JbJgcP=vFmHzWKw/EbGDJxw2kxHAESFqJS1/XPiU5KNq8mHzWKweW0R0=SN8kxHAWSJQEtWAIBFQctWQ=aFgkavzWKwxJx5U=lRVkxHAESjY=tR0ISh2XP=vFmHzWKwq=OEmEOM2kxHAESRxEl=UX0UYIj9QcOMxJb=UENhzWKweExivXSsTixHA=SGQiqU5Ij9QcOMxJb=UENhzWKweExivXSsTixHAXOM0iqU5Lj9QcOMxJb=UENhzWKweExivXSsTixHAExF/iqU5IaUnolJTkxHAWbGP=SvvIkhg=mvzWKweW0R0=SN8kxHAESFqJS1/IBFQcOw6XBFgkavzWKweW0R0=SN8kxHAESFqJS1/IBFQctEUJaFgka/zWKweW0R0=SN8kxHAESFqJS1/IBFQctEUJaFgka1gc0=e8YEDol2CRj9QcOU1JSWxWBwgcP=vFmHzWKweXSR/=bJ2kxHAESFqJS1/Xe9Qctsx=bWPEOezWKwqEljYXO58kxHAES1qWlJ0IBFQcOse=mFgkavzWKwPJSjbEbp8kxHAES1qWlJ0IBFQcOwDEaFgIe9QcOM6WbjYEmw3WKvUWlM3INDTiPNViqU8WKwQkNhzWKweXSR/=bJTixHAXOueiq1dkxHAES1qWlJ0IBFQctM/=aFgkaw38t13Ia1VkxHAWbHU=bsx7N9QcOM/WxsP=NhzWKweXSR/=bJTixHAXOueiq1dkxHAES1qWlJ0IBFQctivJmFgkavzWKv1=lN1ES=8kxHAES1qWlJ0IBFQcONvWmFgka1VkxHAWxGeWYsPle9QcOM6WbjYEmw3WKweEts3INe8kxHAES1qWlJ0IBFQctjmJaFgkavzWKv1=lN1ES=8kxHAES1qWlJ0IBFQcOueiqU5IaJYkxHAWb=Y=l=1le9QcOM6WbjYEmw3WKwAEOM3IahzWKweXSR/=bJTixHAJYjmiqU5Ij9QctpU=lueEUhzWKweXSR/=bJTixHAJxM/iqU5IaJYIj9QcOueWtWP=OezWKwqExjvJbp8kxHAES1qWlJ0IBFQcOwDEaFgIe9QcOM6WbjYEmw3WKvmJlR3INDTkxHA=tNU=OM0le9QcOM6WbjYEmw3WKvbESs3INDgle9QcOM6WbjYEmw3WKwAEOM3IahzWKweXSR/=bJTixHA=SjUiqU5Ij9QctpU=lueEUhzWKweXSR/=bJTixHAWbwxiqU5INVQcOH5ISh2zlNVF0NnolJTkxHAESEmEYMele9QcOMPWYs6Waw3WKwPWO13INDTkxHAWbGP=SvvLj9QcOsqWSHYWq1gc0UYIj9QcOMxJb=UENhzWKweExivXSsTixHA=S5viqU5Ij9QcOMxJb=UENhzWKweExivXSsTixHAExuQiqU5Lj9QcOMxJb=UENhzWKweExivXSsTixHAExuQiqU5IaUn=3NCJPpg80AwkxHAESM6EYsxIBUn5YjqRj9QcOWxExFPEbezWKweExivXSsnkxHAWYuxJbuele9QcOWxExFPEmw3WKwx=SJ3INDTkxHAW0MPJxGPLKpTokE8kxHAWxWPExF0IBFQcOueXaFgka1nzkeU8KEURj9QcORxEls0EBV2kxHAESEmEYMele9QcOMPWYs6Waw3WKv1Jxw3INDTkxHAESEmEYMele9QcOMPWYs6Waw3WKv1Jxw3INDTkxHAESEmEYMele9QcOMPWYs6Waw3WKw/ESu3INDTkxHAESEmEYMele9QcOMPWYs6Waw3WKwxXlM3INDTkxHAESEmEYMele9QcOMPWYs6Waw3WKwe=Ss3INDTkxHAWbGP=Svvlq5g=B55LBF2iq1VkxHAWbGP=Svvle9QcOMPWYs6Waw3WKwDES13INDgLB59iq1VkxHAESR6J0EUIaQ3imFgXPeU8KEUc0UYIj9QcOMxJb=UENhzWKweExivXSsTixHAExG6iqU5Ij9QcOMxJb=UENhzWKweExivXSsTixHAESF6iqU5Lj9QcOMxJb=UENhzWKweExivXSsTixHAESF6iqU5IaUzWKwqWxNvEbud7N9QcOMxJb=UENhzWKweExivXSsTixHAElM/iqU5Ij9QcOMxJb=UENhzWKweExivXSsTixHAJlpbiqU5Ij9QcOMxJb=UENhzWKweExivXSsTixHAWluxiqU5Ij9QcORQE0MAJNV3olu3kaQ37aFgLj9QcORQE0MAJNhzWKweExivXSsTixHAEOM6iqU5IaQ3imFgX0NVF0Nn=3NCJPpg80AwkxHAEOwP=SHvIBUn5YjqRj9QcOEvE0WQESezWKweExivXSsnkxHAWSFAJxH1le9QcOEvE0WQEaw3WKwx=tM3IahzWKwxJS5bWOMTixHAJlJ3INDTkxHA=tNU=OM0le9QcOEvE0WQEaw3WKwqWSu3INDV=3NCJPpg80ATIkh0JkRwkxHAWSvbJbJA7N9QcOEvE0WQEShzWKwq=OEmEON8kxHAWSvbJbJAIBFQcO=UXBFgkavzWKwxW0jUWB/zWKwD=tuAWORgXPDVRNh5ISh2zke2zkeU8KEUc0=e8YEDol2CRj9QcOMD=lpvJawgcP=vFmHzWKweXtuAWOJ2kxHAESFqJS1/Lj9QctuqJbu6=OenzShzWKv1WYRDXlp8kxHAESv1XOG0IBFQcOR0XaFgkSeMSNifuM/8kxHAESv1XOG0IBFQcO5mWBFgka/zWKv1WYRDXlp8kxHAESv1XOG0IBFQctRQEBFgkSeMSNifuM/8kxHAESv1XOG0IBFQctM6WBFgkSh0JkRwkxHAWxGq=SEv7N9QctuqJbu6=B/zWKvb=SMDWSG2=3NCJPpg80ATIkh0JkRwkxHAEOsPJluD7N9QcOMA=OwQEm/zWKw/=bpY=S12kxHAJ0MeEOsQle9QcOu/E0j1EBw3WKvmWS13IaV3Fm55Ij9QcOWQWYMxJNhzWKwDWS5v=OuTixHAWbJ6iqU5Iawgle9QcOu/E0j1EBw3WKvmWS13IaV3Fm55Ij9QcOWQWYMxJNhzWKwDWS5v=OuTixHAJbGDiqU5IShq=kpeFYAvkxHAWlJD=YM6le9QcOu/E0j1EBw3WKw/JxR3INDTkxHAWbjmXtJeISh2XPiU5KNq8mHMSNifuM/8kxHAESv1XOG0IBFQcONbJqFgkavzWKvb=SMDWSGgXPe2za1nolJTkxHAESEmEYMele9QcOEYJbsPJmw3WKwxXOW3INDTkxHAEOUY=YWqlxHAWje8kxHAW0=mWS5mIBFQcOueXaFgkaQ3iq1YiU9QcOMxJb=UENhzWKwx=YR/E0RTixHAEliUiqU5Ij9QcOu6=Y=bWUhzWKwx=YR/E0RTixHA=bFQiqU5LOHAWa1gc0UYIj9QcOMxJb=UENhzWKwx=YR/E0RTixHA=S10iqU5Ij9QcOMxJb=UENhzWKwx=YR/E0RTixHAJYW/iqU5Lj9QcOMxJb=UENhzWKwx=YR/E0RTixHAEOEbiqU5IaUzWKwDXl=YJxR2kxHAEOUY=YWqlxHAWNDn=l/x=khY5l6b5tU48mHzWKwDJbjvWS1TIkh0JkRwkxHAWlpmWbpv7N9QcOEYJbsPJbhzWKwDEONYWbG2lUEpcs5Lle9QcOj1JbRDJaw3WKwPJxF3INDTkxHAWx1e=SJeLjgSMkvKaehzWKw/=tRqEtsTixHAWluxiqU5IjgSMkvKaehzWKw/=tRqEtsTixHAWluxiqU5IjgSMkvKaehzWKw/=tRqEtsTixHAJlsxiqU5LjgSMkvKaehzWKw/=tRqEtsTixHA=OHUiqU5IaQ3ISV3Ia1TISh2zkeU8KEUc0UYIj9QcOMxJb=UENhzWKwx=YR/E0RTixHAEOJeiqU5Ij9QcOMxJb=UENhzWKwx=YR/E0RTixHAWbNYiqU5Lj9QcOMxJb=UENhzWKwx=YR/E0RTixHA=bpUiqU5IaUzWKwDXl=YJxR2kxHAEOUY=YWqlxHAWjDn=l/x=khY5l6b5tU48mHzWKw/XSWDEtRTIkh0JkRwkxHAWx5UElNY7N9QcOEYJbsPJm/zWKwD=YsPWbu2kxHAESEmEYMele9QcOWP=SNU=mw3WKw0JxJ3INe8kxHAWx5UElNYIBFQcOwxEaFgkaw3zBFgLj9QcONUWtJxJxDQcOGn50vg8tMTRaj8kaUnFP5g5tETIj9QcOpYJSFqEjhzWKwe=SHYW0WdIeDgc0EvF0M3WBF+kxHAWSUmJx5vle9QcOWP=SNU=mw3WKw/=b13INe8kxHAWx5UElNYIBFQcO1A=mFgkSezWKweW0R0=SN8kxHAWx5UElNYIBFQctseJqFgkShb806Dol6e=ShbJkEUixs3XU9QcOEYJbseWjhzWKwxE0Me=lJTixHA=YsQiqU57N9QcOMxJb=UENhzWKwxE0Me=lJTixHAXlJDiqU5X0E483pg83NUX0EvF0M3WmF+kxHAEOuQXOF0le9QcOWP=SNU=mw3WKwxEmFgkSDvRNh5X0E483pg83NUX0EvF0M3WqF+kxHAWbWAWxwqle9QcOWP=SNU=mw3WKwDES13IND2kxHAESEmEYMele9QcOWP=SNU=mw3WKwqXSF3INDnJ02C5tUC5lMnJ0jx=aFDixgzWKwq=tWQXSj8kxHAWx5UElNYIBFQctM/JaFgkSDvleDnJ02C5tUC5lMnzliq=ljdXPe2zkeg=mwvkxHAW0uqJxwqIkhg=mvzWKweW0R0=SN8kxHAW0=mWS5mIBFQcOu0EaFgkavzWKweW0R0=SN8kxHAW0=mWS5mIBFQcOseWmFgka/zWKweW0R0=SN8kxHAW0=mWS5mIBFQcOivEBFgka1g5YjqRj9QcOuq=tJ6WxD3ixhU8KEUc0=e8YEDol2CRj9QcORDW0JqXBwgcP=vFmHzWKwqJ0J/ESW2kxHAW0=mWS5mXe9QcOMPJbu0JxezWKwqXONYEx58kxHAWYEYWSMxIBFQcOWAWaFgIe9QcOib=bseWqw3WKwDEOJ3INDTle9QctpU=lueEUhzWKwqJ0J/ESWTixHAXSjviqU5ka1nzke2=l/x=khg=mvzWKweW0R0=SN8kxHAW0=mWS5mIBFQcOMQWqFgkavzWKweW0R0=SN8kxHAW0=mWS5mIBFQctsqJaFgka/zWKweW0R0=SN8kxHAW0=mWS5mIBFQctsqJaFgka1g5YjqRj9QcOuq=tJ6WxezWKwx=OibXOi8kxHAW0=mWS5mIBFQcOueXaFgkShU8KEUc0=e8YEDol2CRj9QcON1JlEv=BwgcP=vFmHzWKwqE0MeJlR2kxHAW0=mWS5mXe9QcO1eJxwQEUhzWKwqE0MeJlRTixHAWlJ6iqU5le9QcORP=SNvJmw3WKw6XtJ3IND2kxHAESEmEYMele9QcORP=SNvJmw3WKwx=YW3INDVkxHAWSJDJxJ6le9QcORP=SNvJmw3WKwxEmFgkSDvleDVkxHAEOFeE0uxle9QcORP=SNvJmw3WKvUWls3IND2Raj8ka/zWKwD=lWx=bN8kxHAWb5UEljmIBFQcOueXaFgkSD3ixh2zkezWKwqWxNvEbud7N9QcOMxJb=UENhzWKwx=YR/E0RTixHAWluxiqU5Ij9QcOMxJb=UENhzWKwx=YR/E0RTixHAJSJ3INDTkxHAESEmEYMele9QcOEYJbsPJmw3WKv1WbW3INDTkxHAESEmEYMele9QcOEYJbsPJmw3WKwAEmFgkavzWKweW0R0=SN8kxHAW0=mWS5mIBFQcOR6=mFgkavzWKweW0R0=SN8kxHAW0=mWS5mIBFQcO1eJmFgkavzWKweW0R0=SN8kxHAW0=mWS5mIBFQcO1eJmFgkavzWKweW0R0=SN8kxHAW0=mWS5mIBFQcOsQEaFgka/zWKwDXl=YJxi8kxHAW0=mWS5mIBFQcOueXaFgka1VkxHAESEmEYMele9QcOEYJbsPJmw3WKvU=OG3INDgLj9QcOw6XSs6=jhzWKwx=YR/E0RTixHAEOM6iqU5Ia/zWKweW0R0=SN8kxHAW0=mWS5mIBFQcOWQXBFgka1VkxHAEOi1=b1xIa/zWKweW0R0=SN8kxHAW0=mWS5mIBFQcOJAJmFgka1VkxHAW0J6JSHvle9QcOEYJbsPJmw3WKwDES13INDgLj9QcOM0=Yj1XNhzWKwx=YR/E0RTixHAEbv1iqU5Ij9QcORxEls0EB1V=t2b5leU83p8kxHAW0=mWS5mIBFQcOR6EBFgkSezWKweW0R0=SN8kxHAW0=mWS5mIBFQcOWqEqFgkSh2za1nzlNVF0Nn=3NCJPpg80AwkxHAWbWqEtMPIBUnolJTRN9QcOEvWljvEjV3okG3kaUq=kpeFYA3ixhq=kpeFYAwkxHAEOUbWbR6lq5gFB55XPe2zl=e8YEDol2CRj9QcOuqWS1xWavzWKvvWOG0JxwgcP=vFmHzWKwDXlsA=tu2kxHAWbUm=OW/X0UYIj9QcO1xESu0XjhzWKwDXlsA=tuTixHAWS5biqU5Ij9QcO1xESu0XjhzWKwDXlsA=tuTixHA=ljmiqU5Lj9QcO1xESu0XjhzWKwDXlsA=tuTixHAJbuQiqU5IaUn=3NCJPpg80AwkxHAWSMDJ0JPIBUnkxHAJYim=biU7N9QcO1QEYuxJSh2zlNVF0MwFYND5kiCRj9QctsQWO=bXOezWKvvWOG0Jxv8kxHAEOUvXtp1IBFQctMqJmFgkaw4kKW4=qQ3iq1VkxHAJSGQEYWAXPeY5l6b5tU48mHzWKwDESvUWSJTkxHAWSs0ExWxIkh0JkRwkxHAEO=vXSN17N9QcOR6JYuxWa/zWKwxXS5UJYW2cPDnkxHAWx1P=lible9QcOu0JS1e=Bw3WKvvE0J3IND2kxHAXSWeEOJAle9QcOu0JS1e=Bw3WKwPXSw3INDn5YjqRj9QcORqEtjvWSezWKwxXS5UJYWnolJTkxHAXSWeEOJAle9QcOu0JS1e=Bw3WKvbWYR3INDTkxHAXSWeEOJAle9QcOu0JS1e=Bw3WKwqJSR3INDVkxHAXSWeEOJAle9QcOu0JS1e=Bw3WKweWYJ3INDgIkhg=mvzWKw6WxMDEbv8kxHAEO=vXSN1IBFQctR/EaFgkavzWKw6WxMDEbv8kxHAEO=vXSN1IBFQcOJqEqFgkavzWKw/WSJPWxE8kxHAEO=vXSN1IBFQctJPWBFgkaQQcORgLOHAWB1gkxHAWSs0ExWx7N9QcO1xESu0XjhzWKwDEYs6EluTixHAESHviqU5IBFQiq/zWKw/WSJPWxWgXP=vFmHzWKweJbW0EYsVkxHAW0W0Jb5Y7SHAWOhY8PRT5YjqRj9QcOWDWxwQ=SDQcOGnkxHAXSWeEOJAle9QcOu0JS1e=Bw3WKvmiqU5Ij9QcOWDWxwQ=a/zWKw/WSJPWxE8kxHAEO=vXSN1IBFQctJPWBFgka1nkxHAWxuxXOHUIxDQcORgkxHAW0W0Jb5YIxezWKw6WxMDEbv8kxHAEO=vXSN1IBFQcOMAEmFgkavzWKw6WxMDEbv8kxHAEO=vXSN1IBFQct=mJaFgkavzWKweJbW0EYs2kxHAXSWeEOJAle9QcOu0JS1e=Bw3WKwPXBFgkavzWKw/WSJPWxE8kxHAEO=vXSN1IBFQcO5YJqFgkavzWKwxEOWAWtMgLOHAWm1VWKw6IS2zWKw6WxMDEbv8kxHAEO=vXSN1IBFQctEYEBFgkavzWKweJbW0EYsVWKw6ISgzWKweJbW0EYsVkxHAXSWeEOJAle9QcOu0JS1e=Bw3WKvm=YW3INDTS3NhJYNqLj9QcOs/EbFxWehzWKwDEYs6EluTixHAE0=biqU5Ij9QcO1xESu0XjhzWKwDEYs6EluTixHA=SUUiqU5Ij9QcOWDWxwQ=aQQcOsgIa1gXPiU5KNq8mHzWKw6WxMDEbv8kxHAEO=vXSN1IBFQcOWQ=aFgkavzWKw6WxMDEbv8kxHAEO=vXSN1IBFQctpY=BFgkavzWKwxJx=mE0JVWKvvIaQQcOGgXPeU8KEUc0=e8YEDol2CRj9QcON1JbHmJmwgcP=vFmHzWKweJYWxWts2kxHAEO=vXSN1Xe9QcOueESW/WUhzWKweJYWxWtsTixHAW0pUiq1dkxHAElibWxHvIBFQctjYiqU5Ij9QcORqEtjvWNhzWKweJYWxWtsTixHAJS5YiqU5Lj9QcOpbJbJ0JmQvleDgXPe2zl=e8YEDol2CRj9QcORQJYNUXavzWKwqWx5UWYugcP=vFmHzWKwx=tWDElR2kxHAWbUm=OW/Lj9QcOu0=tjbExenzShzWKwDEYpvJx58kxHAW0pbEONmIBFQctuxWaFgkSezWKw6WxMDEbv8kxHAW0pbEONmIBFQcOF6XBFgkSh0JkRwkxHAEluQ=bRq7N9QcOu0=tjbExhg=mvzWKw6WxMDEbv8kxHAW0pbEONmIBFQcOU1EaFgkavzWKw6WxMDEbv8kxHAW0pbEONmIBFQctWeEmFgka/zWKw6WxMDEbv8kxHAW0pbEONmIBFQcOjbEaFgka1gc0=e8YEDol2CRj9Qctue=tWQEBwgcP=vFmHzWKw/ExwPWYR2kxHAW0pbEONmXe9QcOsxWOG0JehzWKw/ExwPWYRTixHAW0pUiq1dkxHAWSFAEximIBFQctjYiqU5Ij9QcON1WtJqWUhzWKw/ExwPWYRTixHA=OW/iqU5Lj9QcOWeWSNY=mQvleDgXPe2=l/x=khg=mvzWKw6WxMDEbv8kxHAW0pbEONmIBFQctJxEaFgkavzWKwqWx5UWYuViqFgzK/zWKw6WxMDEbv8kxHAW0pbEONmIBFQctR3INDTkxHAWbWP=Si1le9QcOE1JxueJmw3WKvYExG3INDVWKwxIaUnolJTkxHAXSWeEOJAle9QcOE1JxueJmw3WKvvXOu3INDTkxHAXSWeEOJAle9QcOE1JxueJmw3WKvvESW3INDVkxHAXSWeEOJAle9QcOE1JxueJmw3WKvvESW3INDgIkiU5KNq8mj8kShU8KEUc0=e8YEDol2CRj9QcOuA=YMe=mwgce9QcOueEOJPExezWKwqW0NbWSGnzke2=l/x=khg=mvzWKw6WxMDEbv8kxHAW0pbEONmIBFQctM0EmFgkavzWKw6WxMDEbv8kxHAW0pbEONmIBFQcOR6XaFgka/zWKw6WxMDEbv8kxHAW0pbEONmIBFQcOR6XaFgka1gFYND5kiCRaj8kShU8KEUc0=e8YEDol2CRj9QcOF6EtJ0WBwgcPiU5KNq8msvleDnzke2zkeY5l6b5tU48mHzWKweWO5m=SGTkxHAWS1PWlRPIkh0JkRwkxHAJbJ0Exvm7N9QcOR6JYuxWa/zWKwAJYs6Wtu2cPDnkxHAXtivXSH1le9QctR0EbFAJmw3WKvv=tJ3IND2kxHAEOFPEORQle9QctR0EbFAJmw3WKw0JSW3INDVkxHAXtivXSH1le9QctR0EbFAJmw3WKvYXaFgkSeY5l6b5tU48mvzWKwDEYWx=O1VkxHAESWPEbMqIkh0JkRwkxHAEOi1=lN17N9QctR0EbFAJbhq=kpeFYAwkxHAEOFPEORQle9QcOuq=tNU=Bw3WKweJbG3INDTkxHAEO=bW0u6Lj9QcOMxExJeWm1nza/zWKwAJYs6Wtp8kxHAJbJ0ExvmIBFQcO5UWqFgkSezWKwDExFDWbH8kxHAJbJ0ExvmIBFQcO1xEBFgka/zWKwAJYs6Wtp8kxHAJbJ0ExvmIBFQcOJAXBFgkSeY5l6b5tU48mvzWKw/WtsAXSFVkxHAEOu/JSsQIkh0JkRwkxHAW0i1=bp17N9QctR0EbFAJbhq=kpeFYAwkxHAEOFPEORQle9QcOEm=tJD=Bw3WKvUEtW3INDTkxHAWSHvXO1PLj9QcOuDWls/WB1nza/zWKwAJYs6Wtp8kxHAJbJ0ExvmIBFQcOJAWmFgkSezWKwDExFDWbH8kxHAJbJ0ExvmIBFQctR6=BFgka/zWKwAJYs6Wtp8kxHAJbJ0ExvmIBFQcOibEBFgkSeY5l6b5tU48mvzWKwDJlue=YsVkxHAWxJxWlJDIkh0JkRwkxHAWYp1WbEU7N9QctR0EbFAJbhq=kpeFYAwkxHAEOFPEORQle9QcOi1=ORx=aw3WKvm=bw3INDTkxHAEtj1El=vLj9QcOW0WxjYEB1nza/zWKwAJYs6Wtp8kxHAJbJ0ExvmIBFQcOUbJmFgkSeY5l6b5tU48mvzWKwDXSM0JbGVkxHAWxuDWYsxIkh0JkRwkxHAWb5Y=tW/7N9QctR0EbFAJbhq=kpeFYAwkxHAEOFPEORQle9QcORP=YpbWaw3WKweXts3INDTkxHAEO1eEYRQLj9QcOWDEOivWq1nza/zWKwAJYs6Wtp8kxHAJbJ0ExvmIBFQcOFDEmFgkSeY5l6b5tU48mvzWKweJS10=bFVkxHAWx1eWYM6Ikh0JkRwkxHAWxMDJYim7N9QctR0EbFAJbhq=kpeFYAwkxHAEOFPEORQle9QcOWeEtimJmw3WKvmW0u3INDTkxHAEls6EYJPLj9QcOW6ESiUXa1nza/zWKwAJYs6Wtp8kxHAJbJ0ExvmIBFQcOUUiqU57N9QcOuPExuqWjhzWKvmEbJPXtRTixHA=O5YiqU5Lj9QcOvmJS1Q=jhzWKvmEbJPXtRTixHAWYiYiqU57l=e8YEDol2CIj9QcOR/WYM6Wq/zWKw/EbRD=bJgcP=vFmHzWKwD=tEUEO12kxHAJbJ0ExvmXPiU5KNq8mHzWKwDExFDWbH8kxHAEtpb=Su6IBFQcOw/JqFgkavzWKwqWSiUXSWVkxHAWSJqEtJ0ISh2Lj9QcOvmJS1Q=jhzWKvmEbJPXtRTixHAE0NUiqU57l=e8YEDol2CIj9QcORQ=tW6Wq/zWKw/=bFDXlMgcP=vFmHzWKwDJxReE0R2kxHAJbJ0ExvmXPiU5KNq8mHzWKwDExFDWbH8kxHAEtWqES5mIBFQcOEYEaFgkavzWKwqWtpbXSWVkxHAWlJPEOUUISh2Lj9QcOvmJS1Q=jhzWKvmEbJPXtRTixHA=b51iqU57l=e8YEDol2CIj9QcOM6JYWeJm/zWKw/Wxs6J0ugcP=vFmHzWKwq=bM6WSJ2kxHAJbJ0ExvmXPiU5KNq8mHzWKwDExFDWbH8kxHAWYJeXSs0IBFQcOEYEaFgkavzWKweXlibElRVkxHAWSW/XlE1ISh2Lj9QcOvmJS1Q=jhzWKvmEbJPXtRTixHAJlRAiqU57l=e8YEDol2CIj9QcONmJlibXa/zWKwDXtpY=tugcP=vFmHzWKwDJxu6J0M2kxHAJbJ0ExvmXPiU5KNq8mHzWKwDExFDWbH8kxHAEtWDXlEUIBFQctjYJmFgkavzWKweJYjmJx1VkxHAEOv1=Yp1ISh2XP=vFmHzWKwqJx=1JbW2kxHAXtivXSH1X0UYIj9QcOuPExuqWjhzWKvmEbJPXtRTixHA=SpbiqU5Ij9QcOuPExuqWjhzWKvmEbJPXtRTixHAWY=1iqU5Lj9QcOuPExuqWjhzWKvmEbJPXtRTixHAWY=1iqU5IaUn=3NCJPpg80AwkxHAEbjbElRDIBUn5YjqRj9QcO5UJbF0WSezWKvmEbJPXtRVkxHAESu6XtRQ7kpTokE8kxHAE0NmExJ/IBFQcOueXaFgkNhzWKwP=lRPEbsTixHA=SimiqU5IB28kU/1ka23LBF3INhzWKwP=lRPEbsTixHA=lJqiqU5IOHAWBQQcOugXPpTokE8kxHAE0NmExJ/IBFQcOueXaFgkSezWKweEO1AJbGnzkeU8KEUcP=vFmHzWKwPWxw6JSu2kxHAEOFPEORQle9QctR0EbFAJmw3WKvv=YR3INDTkxHAEOR/XSW/Lj9QcOs6ExjmEq1VkxHAEtibWxHY7lp4JPNh=l6Dle9QctR0EbFAJmw3WKwAEOM3IahzWKvmEbJPXtRTixHAJYjmiqU5Ij9QcOuPExuqWjhzWKvmEbJPXtRTixHAEbuQiqU5IShg=mvzWKwDExFDWbH8kxHAJbJ0ExvmIBFQcOR0=BFgkavzWKwDESvUWSJVkxHAExWAXlsDIaUnolJTkxHAEOFPEORQle9QctR0EbFAJmw3WKvmXOw3INDTkxHAEOFPEORQle9QctR0EbFAJmw3WKwAEtW3INDVkxHAEOFPEORQle9QctR0EbFAJmw3WKwAEtW3INDgIkhzWKwDJYWxWt=8kxHAJbJ0ExvmIBFQcOjYXaFgkNhzWKvmEbJPXtRTixHAXSvYiqU57N9QcOuPExuqWjhzWKvmEbJPXtRTixHA=O5YiqU5X0UYItp4JPNh=l6Dle9QctR0EbFAJmw3WKwAEOM3IahzWKvmEbJPXtRTixHAJYjmiqU5Ij9QcOuPExuqWjhzWKvmEbJPXtRTixHAJS1xiqU5IaUnolJTkxHAEOFPEORQle9QctR0EbFAJmw3WKvUEOw3INDTkxHAEOFPEORQle9QctR0EbFAJmw3WKvvWOw3INDVkxHAEOFPEORQle9QctR0EbFAJmw3WKweWxw3INDgIkh0JkRwkxHAWxRAWtpv7lp4JPNh=l6Dle9QctR0EbFAJmw3WKwAEOM3IahzWKvmEbJPXtRTixHAJYjmiqU5Ij9QcOuPExuqWjhzWKvmEbJPXtRTixHAJS1xiqU5IShzWKwxWbwQ=tj8kxHAJbJ0ExvmIBFQcOjYXaFgkNhzWKvmEbJPXtRTixHAWlNbiqU57N9QcOuPExuqWjhzWKvmEbJPXtRTixHAJbU1iqU5X0UYIj9QcOuPExuqWjhzWKvmEbJPXtRTixHA=SuAiqU5IKp6FtN4=mHzWKwxWbwQ=tj8kxHAJbJ0ExvmIBFQcOpv=mFgIq5DieDVkxHAEOFPEORQle9QctR0EbFAJmw3WKwqJYR3INDgIkhg=mvzWKwDExFDWbH8kxHAJbJ0ExvmIBFQctMDXBFgkavzWKwDExFDWbH8kxHAJbJ0ExvmIBFQcti1EqFgka/zWKwDExFDWbH8kxHAJbJ0ExvmIBFQctJ0EmFgka1gkxHAWxRAWtpvle9QctR0EbFAJmw3WKwDJlJ3IaV35B557aF3X0NVF0Nn=3NCJPpg80AwkxHAEOW6JbHmIBUn5YjqRj9QcONUEYjb=SezWKvmEbJPXtRnkxHAEOvUJlsAle9QcONUEYjb=aw3WKvUEls3IND2kxHAWYW0=tRxle9QcONUEYjb=aw3WKvv=tJ3INDnzke2=l/x=khg=mvzWKwDExFDWbH8kxHAJbJ0ExvmIBFQctp1=BFgkavzWKwDExFDWbH8kxHAJbJ0ExvmIBFQctE1XBFgka/zWKwDExFDWbH8kxHAJbJ0ExvmIBFQcOJeWqFgka1gkxHAWxRAWtpvle9QctR0EbFAJmw3WKwqWlM3IND2iqFn=l/x=khY5l6b5tU48mHzWKw/WYRAEbRTIkh0JkRwkxHA=bJQE0W2kxHAJbJ0ExvmXe9QctR6JYJqEehzWKvYEbGPJqw3WKw0EbG3INDTkxHAEOMQExJD7S6n5YjqRj9QcOjvXSEmWbezWKvYEbGPJxhg=mvzWKwqJx=1JbE8kxHAWls6W0RqIBFQctJ6iqU5Ij9QcOueWOF0EjhzWKw/JS1xJbRTixHAExsAiq1dkxHAWls6W0RqIBFQcOwQJmFgka/zWKwqJx=1JbE8kxHAWls6W0RqIBFQcO5UWqFgka1gc0E483EDRj9QcOWxXtWDWbezWKw/=tjv=bp8kxHAWls6W0RqIBFQctJqWqFgIe9QcOjvXSEmWmw3WKwxJbF3INDTkxHAWYjYEOF0INhzWKw/JS1xJbRTixHAWlNbiqU5Xe9QcOibEYpmWehzWKw/JS1xJbRTixHAEbwAiqU5Ij9QcOWxXtWDWm/zWKwqJx=1JbE8kxHAWls6W0RqIBFQcOJAWmFgka1YimvzWKw/EYuQ=l=8kxHAWls6W0RqIBFQcOjYXaFgkNhzWKw/JS1xJbRTixHAWlNbiqU57N9QcOibEYpmWehzWKw/JS1xJbRTixHAEbwqiqU5ISh2za1nzke2kxHAWxRAWtpvle9QctR0EbFAJmw3WKvUEls3IND2iqFnzlNVF0Nn=3NCJPpg80AwkxHA=YMq=S5bIBUn5YjqRj9QcOuQXOw/JSezWKvmEbJPXtRnkxHAWYW0=tRxle9QcOuQXOw/Jaw3WKwqJxu3INDT5tvgFehzWKwDWOwAWlsTixHAEOM6iqU5le9QcOuQXOw/Jaw3WKvYExG3INDVWKw/IaJYkxHAWYW0=tRxle9QcOuQXOw/Jaw3WKw6J0R3INDT5tvgFehzWKwDWOwAWlsTixHAEOM6iqU5LOHAWa1YimvDotUxle9QcOuQXOw/Jaw3WKwDES13IND2kxHAWYW0=tRxle9QcOuQXOw/Jaw3WKwPEOJ3INDTixG3LKpTokE8kxHAEOGAXOjvIBFQcOueXaFgka1gXPe2zkeU8KEUc0=e8YEDol2CRj9QcOsQJSR0=mwgcP=vFmHzWKweJS5mElJ2kxHAJbJ0ExvmLj9QcOjvW0s0ExezWKwqWxUvJSi8kxHAElsPJbNYIBFQctJeWBFgkavzWKwDWO5bEOWVJki35leU83pxIShq=kpeFYAwkxHAXOFQJ0i17l6e8tQVkxHAWlsxJSJPXPe2zlNVF0NnolJTkxHAEOFPEORQle9QctR0EbFAJmw3WKvmXOw3INDTkxHAEOFPEORQle9QctR0EbFAJmw3WKwP=tJ3INDVkxHAEOFPEORQle9QctR0EbFAJmw3WKvYJYJ3INDgIkhY5l6b5tU48mHzWKwDXOsA=SuTIkh0JkRwkxHAESJ6XOuQ7N9QctR0EbFAJbhzWKweE0uQWbv8kxHAESJ6XOuQIBFQcOjYXaFgkNhzWKweEb1AEOGTixHAXSvYiqU57N9QcOibEYpmWehzWKweEb1AEOGTixHAXlM3INDn5YjqRj9QcONmWlNmJSeDotUxle9QcOM0XSwDWBw3WKwDES13INe8kxHAESJ6XOuQIBFQctMqJmFgkaw4ksu4=qQ3iq1nolJTkxHAWYW0=tRxle9QcOM0XSwDWBw3WKwqJYJ3INDTkxHAWY=1Jb=Yle9QcOM0XSwDWBw3WKwxE0J3INDVkxHAElR/=livle9QcOM0XSwDWBw3WKvYExG3INDgIkhzWKwqJx=1JbE8kxHAESJ6XOuQIBFQcO5U=aFgkavzWKwDElWeWxsV5tvgFehzWKweEb1AEOGTixHAEOM6iqU5IShg=mvzWKwqJx=1JbE8kxHAESJ6XOuQIBFQctJP=BFgkavzWKweWxiUXSWVkxHAWYW0=tRxle9QcOM0XSwDWBw3WKvvJbw3INDTkxHAWS1qXtWxLKpTokE8kxHAESJ6XOuQIBFQcOueXaFgka1gIkh2zke2=l/x=khzWKwDJYWxWt=8kxHAJbJ0ExvmIBFQcOjYXaFgkNhzWKvmEbJPXtRTixHAXSvYiqU57N9QcOuPExuqWjhzWKvmEbJPXtRTixHA=YM6iqU5X0UYItp4JPNh=l6Dle9QctR0EbFAJmw3WKwAEOM3IahzWKvmEbJPXtRTixHAJYjmiqU5Ij9QcOuPExuqWjhzWKvmEbJPXtRTixHAJS1xiqU5IaUnolJTkxHAEOFPEORQle9QctR0EbFAJmw3WKw6W0s3INDTkxHAEOFPEORQle9QctR0EbFAJmw3WKwDEBFgka/zWKwDExFDWbH8kxHAJbJ0ExvmIBFQcOuDiqU5IaUn=3NCJPpg80AwkxHAEO1QXOpYIBUn5YjqRj9QcOjY=lEvWxezWKvmEbJPXtRnkxHAWYW0=tRxle9QcOjY=lEvWqw3WKvvJbw3INDTkxHAEOG6Eb10Lj9QcOuAEbJ6Ea1nzkeU8KEUcP=vFmHzWKwxJbF6=OG2=t2b5leU83p8kxHAJbJ0ExvmIBFQcOwDEaFgIe9QctR0EbFAJmw3WKvmJlR3INDTkxHAEOFPEORQle9QctR0EbFAJmw3WKvvXSW3INDgXe9QcOEmExU1WjhzWKvmEbJPXtRTixHAWlJ6iqU5le9QctR0EbFAJmw3WKw/=lW3IND2kxHAEOFPEORQle9QctR0EbFAJmw3WKvbExs3INDnolJTkxHAEOFPEORQle9QctR0EbFAJmw3WKw6W0s3INDT5KUQ=l2YRj9QcOEmExU1WjhzWKvmEbJPXtRTixHAEtjYiq1diPu3ka/zWKwDExFDWbH8kxHAJbJ0ExvmIBFQcOimJmFgka1gc0UYIj9QcOuPExuqWjhzWKvmEbJPXtRTixHAWxw6iqU5Ij9QcOuPExuqWjhzWKvmEbJPXtRTixHAXOWxiqU5Lj9QcOuPExuqWjhzWKvmEbJPXtRTixHAXOWxiqU5IaUn=3NCJPpg80AwkxHAEtJ/WOpUIBUn5YjqRj9QcOMDWO1QWOD3ixh2zlNVF0MwkxHAW0RPXluQle9QctR0EbFAJmw3WKvUEls3IND2kxHAEOFPEORQle9QctR0EbFAJmw3WKvmEYM3INDnzlNVF0NnolJTkxHAEOFPEORQle9QctR0EbFAJmw3WKw6WxJ3INDTkxHAEOFPEORQle9QctR0EbFAJmw3WKw6WtJ3INDVkxHAEOFPEORQle9QctR0EbFAJmw3WKwxWOM3INDgIkhY5l6b5tU48mHzWKvUJbH1J0RTIkh0JkRwkxHA=b=YJbjU7N9QctR0EbFAJbhg=mvzWKwDWSMPJS1gcP=vFmHzWKw6XtMQJbezWKw/JSRqJbp8kxHA=b=YJbjUIBFQctJeWBFgkavzWKwqXOueJluVJki35leU83pxIShq=kpeFYAwkxHAWbsx=OFx7l6e8tQVkxHAXSvUWtRnzke2=l/x=aHzWKwxJbF6=OH8kxHAJbJ0ExvmIBFQctMeJaFgkSezWKwDExFDWbH8kxHAJbJ0ExvmIBFQctR0=aFgkSh2zke2zke2=3NCJPpg80AwkxHAWYWDJ0MxIj9QcOsPJxvb=aUn5YjqRj9QcOEbWYs6=OezWKwqXli1WxsVkxHAJxM6WOjv7kh2Xe9QctWeXSG/JNhzWKwxJxivXluTixHA=YWQiqU57l=e8YEDol2CIj9QcOEvJxseWB/zWKvYJbUbWbsgcP=vFmHzWKw/Ex5mWxu2kxHAW0WqJSU1XPiU5KNq8mHzWKwDExFDWbH8kxHAWSFPJbWDIBFQcOR0=BFgkavzWKwxJlW/ESGVkxHA=YR6JxR/ISh2Lj9QctWeXSG/JNhzWKwxJxivXluTixHAWSwDiqU57l=e8YEDol2CIj9QcOi1XSWeEaUn5YjqRj9QcOuPWljmEOezWKwxJxivXlunFYND5kiCRj9QcOuPExuqWjhzWKwDExjvJbuTixHAESw/iqU5Ij9QcOi1XSWeEa1nza/zWKvbES1QWlj8kxHAW0WqJSU1IBFQcOFxWBFgkSezWKwDExFDWbH8kxHAW0WqJSU1IBFQctMeWmFgkSh0JkRwkxHAElEmXOM67N9QctWeXSG/JShg=mvzWKwDExFDWbH8kxHAW0WqJSU1IBFQcO1xEmFgkavzWKwDExFDWbH8kxHAW0WqJSU1IBFQct=v=aFgka/zWKwDExFDWbH8kxHAW0WqJSU1IBFQct=v=aFgka1gc0UYIj9QcOuPExuqWjhzWKwxJxivXluTixHAJxs6iqU5Ij9QcOsPJxvb=aQ3iqU9zj9QcOuPExuqWjhzWKwxJxivXluTixHA=tRDiqU5Ij9QcOsPJxvb=NhzWKwxJxivXluTixHA=bFQiqU5LOHAWq1gc0UYIj9QcOuPExuqWjhzWKwxJxivXluTixHAWxw6iqU5Ij9QcOuPExuqWjhzWKwxJxivXluTixHA=bHmiqU5Lj9QcOuPExuqWjhzWKwxJxivXluTixHA=bHmiqU5IaUn=3NCJPpg80AwkxHAWliYJSFQIBUn5YjqRj9QcOReWYRPEbezWKwxJxivXlunJ02CFPuwc0Uh8lN1oljD=MET=lEdXU9QcOjbEY=v=m/g8YUDp0/4JYjVS0ix=ki0=kR+kxHAW0M6ElMqzSezWKweJ0RAESU8kxHAWbMqJbF0IBFQct=bWBFgkavzWKw/ESwP=S1VkxHAWSGAWON1IShzWKweJ0RAESU8kxHAWbMqJbF0IBFQcOsAEBFgkavzWKw/Jx=YJlJgLj9QcONbJbweXNhzWKwqESimExJTixHAWSwDiqU5Ij9QcOEUXSNUWm1nzkeU8KEUcP=vFmHzWKweEO51ESG2=t2b5leU83p8kxHAW0WqJSU1IBFQcOwDEaFgIe9QcOEbWYs6=Bw3WKvmJlR3INDTkxHAEOFPEORQle9QcOEbWYs6=Bw3WKv1JSs3INDgXe9QcOMDE0ueWjhzWKwxJxivXluTixHAWlJ6iqU5le9QcOEbWYs6=Bw3WKw6XtJ3IND2kxHAEOFPEORQle9QcOEbWYs6=Bw3WKvY=S13INDnzkeU8KEUc0UYIj9QcOuPExuqWjhzWKwxJxivXluTixHAXSW0iqU5Ij9QcOuPExuqWjhzWKwxJxivXluTixHAE0sxiqU5Lj9QcOuPExuqWjhzWKwxJxivXluTixHAE0sxiqU5IaUn5YjqRj9QcOuDXlsPWbe180Ee8lNC5jhzWKwxJxivXluTixHAXOueiq1dkxHAW0WqJSU1IBFQctivJmFgkavzWKwDExFDWbH8kxHAW0WqJSU1IBFQctpvWaFgka1nkxHAEOu6JSFqle9QcOEbWYs6=Bw3WKw/=b13INe8kxHAW0WqJSU1IBFQcO1A=mFgkSezWKwDExFDWbH8kxHAW0WqJSU1IBFQctuP=mFgkSh2=l/x=khY5l6b5tU48mHzWKwDWSpYJbMTIkh0JkRwkxHAWbwqWOGA7N9QcOEbWYs6=OhzWKw6WxMDEbv8kxHAWbwqWOGAIBFQctiYJqFgkavzWKw/JxpmXSFVkxHAWYsxXOuDIa/zWKw6WxMDEbv8kxHAWbwqWOGAIBFQcOJe=mFgkavzWKwqESu6=lWVkxHAWYWqWOuqISh2zke2=l/x=khY5l6b5tU48mHzWKweWOsPXtWTIkh0JkRwkxHAWlj1EOF07N9QcOEbWYs6=OhDF3UnkxHAWYse=lRD7l6U5qHzWKwxW0uDWbWTkxHAElEmXOM6le9QcOjv=OuPEmw3WKwPWxG3INDgXPebJkpboBvzWKwq=YJe=lJgce9QcOibEYNUWSDvleDnzke2zl=e8YEDol2CRj9QcOMQJbj1EavzWKwxXSGPXOJgcP=vFmHzWKw0WYJ6=Os2kxHAWbUm=OW/Lj9QcOueElW6XOenzShzWKwDESNbXSv8kxHAEbiYXlu/IBFQcOWDJqFgkSeY5l6b5tU48mvzWKwqESM0EtuVkxHAWSuP=SsDIkh0JkRwkxHA=tMPWSNv7N9QcOJq=bU1WShq=kpeFYAwkxHAXSWeEOJAle9QctpUExseJaw3WKvUWxJ3INDTkxHAWbMeEbp1Lj9QcOsDE0M/EB1nza/zWKwDESNbXSv8kxHAEbiYXlu/IBFQctu0EaFgkSeY5l6b5tU48mvzWKwD=bJeJ0RVkxHAXO5vWYMgcP=vFmHzWKv1WOvmJSu2kxHAEbiYXlu/XPiU5KNq8mHzWKw6WxMDEbv8kxHA=OGAJYsDIBFQcOF/EaFgkavzWKwD=bJeJ0RVkxHAXO5vWYMgXPDVkxHAEOMeJx1Ale9QcOJq=bU1Waw3WKvv=ls3IND2=3NCJPpg80ATkxHA=SpbXls0Lj9QcOu/EOjm=BUn5YjqRj9QcOuxJxuPXSezWKw0WYJ6=OsnFYND5kiCRj9QcO1xESu0XjhzWKwDW0WDEx1TixHA=Ow0iqU5Ij9QctMDJxUvEm/zWKwDWSu/JYugXPDVkxHAEOMeJx1Ale9QcOJq=bU1Waw3WKwxW0s3IND2kxHAXSWeEOJAle9QcOJq=bU1Waw3WKwx=lu3INDVkxHAEOMeJx1Ale9QcOJq=bU1Waw3WKvvWSR3IND2kxHAXSWeEOJAle9QcOJq=bU1Waw3WKwxJYW3INDVkxHAEOMeJx1Ale9QcOJq=bU1Waw3WKweExW3IND2kxHAXSWeEOJAle9QcOJq=bU1Waw3WKwxXOG3INDVkxHAEOMeJx1Ale9QcOJq=bU1Waw3WKw0EYu3IND2=3NCJPpg80ATkxHAWSF/=SMDLj9QcOW/JS=mXaUn5YjqRj9QcOw0JS=bXOezWKw0WYJ6=OsnFYND5kiCRj9QcO1xESu0XjhzWKwAEYs0JxwTixHAJxReiqU5Ij9QcOsPWlMeEB/zWKwxWls0Jb1gXPDVkxHAEOMeJx1Ale9QcOJq=bU1Waw3WKwPEtJ3IND2=3NCJPpg80ATkxHAWSsQXlW0Lj9QcOR6EtpvEBUn5YjqRj9QcONUESvmWOezWKw0WYJ6=OsnFYND5kiCRj9QcO1xESu0XjhzWKwe=SMAJbGTixHA=YR3INDTkxHAWSsQXlW0Lj9QcOR6EtpvEB1nza/zWKwDESNbXSv8kxHAEbiYXlu/IBFQctimXaFgkSeY5l6b5tU48mvzWKwxEOMeXlMVkxHAWYjmXO1eIkh0JkRwkxHAEt=UEOw07N9QcOJq=bU1WShq=kpeFYAwkxHAXSWeEOJAle9QcOpY=SuAEmw3WKwA=tM3INDTkxHAWxueESUULj9QcOivJbw6Ea1nza/zWKwDESNbXSv8kxHAEbiYXlu/IBFQcOF3IND2kxHAXSWeEOJAle9QcOJq=bU1Waw3WKv1Ebu3INDVkxHAEOMeJx1Ale9QcOJq=bU1Waw3WKvvWxw3IND2=3NCJPpg80ATkxHA=bHYWYJPLj9QcOR/J0jm=mUn5YjqRj9QcOsDJxw0=SezWKw0WYJ6=OsnFYND5kiCRj9QcO1xESu0XjhzWKw/EtWAEYMTixHAESFPiqU5Ij9QctJQ=biYEq/zWKwqWlEvJYJgXPDVkxHAEOMeJx1Ale9QcOJq=bU1Waw3WKw/Wxs3IND2=3NCJPpg80ATkxHAWbH1WbMeLj9QcOjmWbRx=aUn5YjqRj9QcOEUJYuAWOezWKw0WYJ6=OsnFYND5kiCRj9QcO1xESu0XjhzWKwx=li1XOGTixHA=Ow0iqU5Ij9QcORQ=OReEa/zWKw/JbRqW0MgXPDVkxHAEOMeJx1Ale9QcOJq=bU1Waw3WKw/ESM3IND2kxHAXSWeEOJAle9QcOJq=bU1Waw3WKwDEbF3INDVkxHAEOMeJx1Ale9QcOJq=bU1Waw3WKwxWbJ3IND2kxHAXSWeEOJAle9QcOJq=bU1Waw3WKvmExw3INDVkxHAEOMeJx1Ale9QcOJq=bU1Waw3WKvmESM3IND2kxHAXSWeEOJAle9QcOJq=bU1Waw3WKwPEtW3INDVkxHAEOMeJx1Ale9QcOJq=bU1Waw3WKwxXSu3IND2kxHAXSWeEOJAle9QcOJq=bU1Waw3WKvb=YM3INDVkxHAEOMeJx1Ale9QcOJq=bU1Waw3WKwqJSM3IND2kxHAXSWeEOJAle9QcOJq=bU1Waw3WKv1JxF3INDVkxHAEOMeJx1Ale9QcOJq=bU1Waw3WKvUJYR3IND2=3NCJPpg80ATkxHAWSH1XS5mLj9QcOMP=OM/EmUn5YjqRj9QcOpvJSibWbezWKw0WYJ6=OsnFYND5kiCRj9QcO1xESu0XjhzWKwDJlsqJxRTixHAJxReiqU5Ij9QcOsQ=O1PJm/zWKweE0ueWSJgXPDVkxHAEOMeJx1Ale9QcOJq=bU1Waw3WKwAES13IND2kxHAXSWeEOJAle9QcOJq=bU1Waw3WKw6ExG3INDVkxHAEOMeJx1Ale9QcOJq=bU1Waw3WKvYEx13IND2kxHAXSWeEOJAle9QcOJq=bU1Waw3WKw6EBFgka/zWKwDESNbXSv8kxHAEbiYXlu/IBFQcONv=BFgkSezWKw6WxMDEbv8kxHAEbiYXlu/IBFQcOJx=mFgka/zWKwDESNbXSv8kxHAEbiYXlu/IBFQctuq=aFgkSezWKw6WxMDEbv8kxHAEbiYXlu/IBFQcOuDWqFgka/zWKwDESNbXSv8kxHAEbiYXlu/IBFQctW0JaFgkSezWKw6WxMDEbv8kxHAEbiYXlu/IBFQcONYEmFgka/zWKwDESNbXSv8kxHAEbiYXlu/IBFQctM/EmFgkSezWKw6WxMDEbv8kxHAEbiYXlu/IBFQcORxJqFgka/zWKwDESNbXSv8kxHAEbiYXlu/IBFQctEU=mFgkSeY5l6b5tU48mvzWKwxWliUXtsVkxHAEOjmWS10Ikh0JkRwkxHAWYsQEOse7N9QcOJq=bU1WShq=kpeFYAwkxHAXSWeEOJAle9QcOivWOu/Eaw3WKwPWtM3INDTkxHAWxjm=SvvLj9QcOu/Jbs6Em1nza/zWKwDESNbXSv8kxHAEbiYXlu/IBFQcO1qEqFgkSezWKw6WxMDEbv8kxHAEbiYXlu/IBFQctpYEmFgka/zWKwDESNbXSv8kxHAEbiYXlu/IBFQct=bXBFgkSezWKw6WxMDEbv8kxHAEbiYXlu/IBFQcOu/XBFgka/zWKwDESNbXSv8kxHAEbiYXlu/IBFQcOi1iqU57N9QcO1xESu0XjhzWKw0WYJ6=OsTixHAJ0pmiqU5Lj9QcOueElW6XjhzWKw0WYJ6=OsTixHAWbM6iqU57l=e8YEDol2CIj9QcORqWYRDWq/zWKwDJbHU=SFgcP=vFmHzWKwx=lRqEbW2kxHAEbiYXlu/XPiU5KNq8mHzWKw6WxMDEbv8kxHAW0NmWbJxIBFQctRxJqFgkavzWKwqWbimEOWVkxHAEtRQ=lMPISh2Lj9QcOueElW6XjhzWKw0WYJ6=OsTixHAEbM6iqU57N9QcO1xESu0XjhzWKw0WYJ6=OsTixHAExW3INDVkxHAEOMeJx1Ale9QcOJq=bU1Waw3WKvmEbJ3IND2kxHAXSWeEOJAle9QcOJq=bU1Waw3WKw/=aFgka/zWKwDESNbXSv8kxHAEbiYXlu/IBFQcO5Y=mFgkSezWKw6WxMDEbv8kxHAEbiYXlu/IBFQcOuxEqFgka/zWKwDESNbXSv8kxHAEbiYXlu/IBFQcOuxJmFgkSezWKw6WxMDEbv8kxHAEbiYXlu/IBFQcOEUEBFgka/zWKwDESNbXSv8kxHAEbiYXlu/IBFQcOiYEBFgkSezWKw6WxMDEbv8kxHAEbiYXlu/IBFQcORQJaFgka/zWKwDESNbXSv8kxHAEbiYXlu/IBFQcO1PWaFgkSeY5l6b5tU48mvzWKwqJ0RqEtMVkxHAElWDJxuALj9QcOpvEbFAEaUn5YjqRj9QcO10WlWqJbezWKw0WYJ6=OsnFYND5kiCRj9QcO1xESu0XjhzWKw6EbjbWYRTixHAXOMDiqU5Ij9QcOibJbRD=a/zWKweJxpbEOwVkxHAEts0ExweISh2Lj9QcOueElW6XjhzWKw0WYJ6=OsTixHAJbUmiqU57N9QcO1xESu0XjhzWKw0WYJ6=OsTixHAJlseiqU5Lj9QcOueElW6XjhzWKw0WYJ6=OsTixHAWxFAiqU57l=e8YEDol2CIj9QctNUJSW6WB/zWKw0J0WDEqUn5YjqRj9Qct=mJ0jvJxezWKw0WYJ6=OsnFYND5kiCRj9QcO1xESu0XjhzWKvYJYEvJlWTixHAXSWPiqU5Ij9QctNUJSW6WB/zWKw0J0WDEq1nza/zWKwDESNbXSv8kxHAEbiYXlu/IBFQcO5YJmFgkSeY5l6b5tU48mvzWKw/JYEY=SRVkxHAWYMDJYWPIkh0JkRwkxHAESwQ=SEb7N9QcOJq=bU1WShq=kpeFYAwkxHAXSWeEOJAle9QcOMAWtMxJqw3WKwxJxJ3INDTkxHAWlib=YMqLj9QcOiUEtibEq1nza/zWKwDESNbXSv8kxHAEbiYXlu/IBFQctNbXaFgkSezWKw6WxMDEbv8kxHAEbiYXlu/IBFQctMqWmFgka/zWKwDESNbXSv8kxHAEbiYXlu/IBFQcOp1XaFgkSeY5l6b5tU48mvzWKweXO1PJxWVkxHAWYM/JbNUIkh0JkRwkxHAEtWDW0Ev7N9QcOJq=bU1WShq=kpeFYAwkxHAXSWeEOJAle9QcOpbEOEbJaw3WKv1XOJ3INDTkxHAESw6E0WxLj9QcOiUWlRe=a1nza/zWKwDESNbXSv8kxHAEbiYXlu/IBFQcO5UEaFgkSezWKw6WxMDEbv8kxHAEbiYXlu/IBFQctEUXBFgka/zWKwDESNbXSv8kxHAEbiYXlu/IBFQcORQWaFgkSezWKw6WxMDEbv8kxHAEbiYXlu/IBFQcOuAiqU5Lj9QcOueElW6XjhzWKw0WYJ6=OsTixHAWb5UiqU57l=e8YEDol2CIj9QcOuAESJ6Wa/zWKwq=ts6EOugcP=vFmHzWKwD=SWAXOM2kxHAEbiYXlu/XPiU5KNq8mHzWKw6WxMDEbv8kxHAEtMxXOweIBFQcOpvEaFgkavzWKwDXOM0XSsVkxHAWYpvXSuDISh2Lj9QcOueElW6XjhzWKw0WYJ6=OsTixHAXtMPiqU57l=e8YEDol2CIj9QcOsA=bJAEm/zWKweJSwAJSWgcP=vFmHzWKw/XSG/WlM2kxHAEbiYXlu/XPiU5KNq8mHzWKw6WxMDEbv8kxHAWS1QWSjUIBFQctWDWBFgkavzWKw/XtJ0XOJVkxHAElsAXtsxISh2Lj9QcOueElW6XjhzWKw0WYJ6=OsTixHAWxGDiqU57l=e8YEDol2CIj9QcORqXSF0XB/zWKwe=OUvExRgcP=vFmHzWKwx=ORqWtJ2kxHAEbiYXlu/XPiU5KNq8mHzWKw6WxMDEbv8kxHAW0uqWbHYIBFQctRxJqFgkavzWKwqWb1PEbwVkxHAElu6JSFqISh2Lj9QcOueElW6XjhzWKw0WYJ6=OsTixHAJYpmiqU57N9QcO1xESu0XjhzWKw0WYJ6=OsTixHAXlM6iqU5Lj9QcOueElW6XjhzWKw0WYJ6=OsTixHA=bvYiqU57l=e8YEDol2CIj9QcORAJSjmEB/zWKweEOjbWbsgcP=vFmHzWKwD=O=1Etu2kxHAEbiYXlu/XPiU5KNq8mHzWKw6WxMDEbv8kxHAEtu0=Op1IBFQctRxJqFgkavzWKwqXts/JbuVkxHAESu/JxR/ISh2Lj9QcOueElW6XjhzWKw0WYJ6=OsTixHAWSuqiqU57N9QcO1xESu0XjhzWKw0WYJ6=OsTixHAJbJAiqU5Lj9QcOueElW6XjhzWKw0WYJ6=OsTixHAXSUYiqU57l=e8YEDol2CIj9QcOi1=YM0EB/zWKw/ESUYWOMgcP=vFmHzWKweWti1EbM2kxHAEbiYXlu/XPiU5KNq8mHzWKw6WxMDEbv8kxHAESHm=OJeIBFQctibEaFgkavzWKwq=t=UEbuVkxHAWSM6=bGeISh2Lj9QcOueElW6XjhzWKw0WYJ6=OsTixHA=bueiqU57N9QcO1xESu0XjhzWKw0WYJ6=OsTixHAWbRQiqU5Lj9QcOueElW6XjhzWKw0WYJ6=OsTixHAESF/iqU57N9QcO1xESu0XjhzWKw0WYJ6=OsTixHA=S5UiqU5Lj9QcOueElW6XjhzWKw0WYJ6=OsTixHAEbR3IND2kxHAXSWeEOJAle9QcOJq=bU1Waw3WKvYJbG3INDVkxHAEOMeJx1Ale9QcOJq=bU1Waw3WKwAJxw3IND2kxHAXSWeEOJAle9QcOJq=bU1Waw3WKv1JaFgka/zWKwDESNbXSv8kxHAEbiYXlu/IBFQcOWDEmFgkSezWKw6WxMDEbv8kxHAEbiYXlu/IBFQctM0EBFgka/zWKwDESNbXSv8kxHAEbiYXlu/IBFQctWD=BFgkSezWKw6WxMDEbv8kxHAEbiYXlu/IBFQctuAEaFgka/zWKwDESNbXSv8kxHAEbiYXlu/IBFQctuDJaFgkSezWKw6WxMDEbv8kxHAEbiYXlu/IBFQcOMDWqFgka/zWKwDESNbXSv8kxHAEbiYXlu/IBFQcOEmXBFgkSezWKw6WxMDEbv8kxHAEbiYXlu/IBFQctWxEaFgka/zWKwDESNbXSv8kxHAEbiYXlu/IBFQcO1qWqFgkSezWKw6WxMDEbv8kxHAEbiYXlu/IBFQctJ/WmFgka/zWKwDESNbXSv8kxHAEbiYXlu/IBFQctRPWBFgkSezWKw6WxMDEbv8kxHAEbiYXlu/IBFQcOvYEBFgka/zWKwDESNbXSv8kxHAEbiYXlu/IBFQcOFq=mFgkSeY5l6b5tU48mvzWKweEtuPWluVkxHAWSivEOsxIkh0JkRwkxHAWlEmJbim7N9QcOJq=bU1WShq=kpeFYAwkxHAXSWeEOJAle9QcOjbJYRqJmw3WKvvWSs3INDTkxHAESp1Exj1Lj9QcOsqJSu/Wq1nza/zWKwDESNbXSv8kxHAEbiYXlu/IBFQctE1WBFgkSeY5l6b5tU48mvzWKw/JbpvXSsgcP=vFmHzWKweE0M0JxF2kxHAEbiYXlu/XPiU5KNq8mHzWKw6WxMDEbv8kxHAES5UEYWPIBFQcONUXBFgkavzWKw/JbpvXSsgXPDVkxHAEOMeJx1Ale9QcOJq=bU1Waw3WKwxWqFgkSeY5l6b5tU48mvzWKweJbw0Wb1VkxHAWSvvEYWQIkh0JkRwkxHAWYJx=SvY7N9QcOJq=bU1WShq=kpeFYAwkxHAXSWeEOJAle9QcOiYW0MA=mw3WKvmJxM3INDTkxHAElRAEbR6Lj9QcOsAJS=bWB1nza/zWKwDESNbXSv8kxHAEbiYXlu/IBFQcOR6=aFgkSezWKw6WxMDEbv8kxHAEbiYXlu/IBFQctsxWBFgka/zWKwDESNbXSv8kxHAEbiYXlu/IBFQcO1AEmFgkSeY5l6b5tU48mvzWKwqWOueExMgcP=vFmHzWKwqJbG6=SG2kxHAEbiYXlu/XPiU5KNq8mHzWKw6WxMDEbv8kxHAWYRQXlMQIBFQctWQEmFgkavzWKwqWOueExMgXPDVkxHAEOMeJx1Ale9QcOJq=bU1Waw3WKvmESW3IND2kxHAXSWeEOJAle9QcOJq=bU1Waw3WKvmEOM3INDVkxHAEOMeJx1Ale9QcOJq=bU1Waw3WKvUWOF3IND2kxHAXSWeEOJAle9QcOJq=bU1Waw3WKvUWSG3INDVkxHAEOMeJx1Ale9QcOJq=bU1Waw3WKw6XOM3IND2kxHAXSWeEOJAle9QcOJq=bU1Waw3WKvmEbM3INDVkxHAEOMeJx1Ale9QcOJq=bU1Waw3WKvvEOG3IND2kxHAXSWeEOJAle9QcOJq=bU1Waw3WKwAXtu3INDVkxHAEOMeJx1Ale9QcOJq=bU1Waw3WKwPWbJ3IND2kxHAXSWeEOJAle9QcOJq=bU1Waw3WKwDWxu3INDVkxHAEOMeJx1Ale9QcOJq=bU1Waw3WKw0XlW3IND2kxHAXSWeEOJAle9QcOJq=bU1Waw3WKwPEbw3INDVkxHAEOMeJx1Ale9QcOJq=bU1Waw3WKwqExs3IND2=3NCJPpg80ATkxHAWbwPWSR0Lj9QcONUXlW/WqUn5YjqRj9QcOsxEbGeESezWKw0WYJ6=OsnFYND5kiCRj9QcO1xESu0XjhzWKw/WxJQESMTixHAEOvbiqU5Ij9QcORAExsqEm/zWKwe=SUbWSWgXPDVkxHAEOMeJx1Ale9QcOJq=bU1Waw3WKw/J0W3IND2=3NCJPpg80ATkxHAWYM0XtNmLj9QcOu/Wbwe=aUn5YjqRj9QcOMe=li1=OezWKw0WYJ6=OsnFYND5kiCRj9QcO1xESu0XjhzWKweElNm=tuTixHA=Ow0iqU5Ij9QcOiUEbvUJm/zWKwDWSRAElMgXPDVkxHAEOMeJx1Ale9QcOJq=bU1Waw3WKw0W0W3IND2kxHAXSWeEOJAle9QcOJq=bU1Waw3WKwq=YM3INDVkxHAEOMeJx1Ale9QcOJq=bU1Waw3WKv1=SW3IND2kxHAXSWeEOJAle9QcOJq=bU1Waw3WKw0=bW3INDVkxHAEOMeJx1Ale9QcOJq=bU1Waw3WKv1=lJ3IND2=3NCJPpg80ATkxHAW0EbWtMALj9QctjvJbGQWBUn5YjqRj9QctuD=bR6JbezWKw0WYJ6=OsnFYND5kiCRj9QcO1xESu0XjhzWKv1EtJqXlRTixHAJSs/iqU5Ij9QcOEbJxHUXB/zWKvvJlRQWOGgXPDVkxHAEOMeJx1Ale9QcOJq=bU1Waw3WKvmJSF3IND2kxHAXSWeEOJAle9QcOJq=bU1Waw3WKwPXSu3INDVkxHAEOMeJx1Ale9QcOJq=bU1Waw3WKwqWtJ3IND2=3NCJPpg80ATkxHAWxUb=bHbLj9QcOsqXSNbEmUn5YjqRj9QcOsDXO=vWOezWKw0WYJ6=OsnFYND5kiCRj9QcO1xESu0XjhzWKw/EOw0JSGTixHAJYWeiqU5Ij9QcOW6J0JQJq/zWKw/Wb1eJxJgXPDVkxHAEOMeJx1Ale9QcOJq=bU1Waw3WKvv=Ou3IND2kxHAXSWeEOJAle9QcOJq=bU1Waw3WKw0EOF3INDVkxHAEOMeJx1Ale9QcOJq=bU1Waw3WKv1=BFgkSezWKw6WxMDEbv8kxHAEbiYXlu/IBFQcONmXBFgka/zWKwDESNbXSv8kxHAEbiYXlu/IBFQctuQWmFgkSeY5l6b5tU48mvzWKw/JbwQEbuVkxHAW0WeJbs6Ikh0JkRwkxHAElpvW0W07N9QcOJq=bU1WShq=kpeFYAwkxHAXSWeEOJAle9QcON1JSEbEmw3WKv1=bu3INDTkxHAWlRAWOJDLj9QcOEbElR/Xa1nza/zWKwDESNbXSv8kxHAEbiYXlu/IBFQcOiU=aFgkSezWKw6WxMDEbv8kxHAEbiYXlu/IBFQcOwxWmFgka/zWKwDESNbXSv8kxHAEbiYXlu/IBFQcOsqJqFgkSezWKw6WxMDEbv8kxHAEbiYXlu/IBFQcORxiqU5Lj9QcOueElW6XjhzWKw0WYJ6=OsTixHAJb1qiqU57N9QcO1xESu0XjhzWKw0WYJ6=OsTixHAWSReiqU5Lj9QcOueElW6XjhzWKw0WYJ6=OsTixHA=SMDiqU57N9QcO1xESu0XjhzWKw0WYJ6=OsTixHAElW0iqU5Lj9QcOueElW6XjhzWKw0WYJ6=OsTixHAJSvviqU57N9QcO1xESu0XjhzWKw0WYJ6=OsTixHA=bEmiqU5Lj9QcOueElW6XjhzWKw0WYJ6=OsTixHAW0pYiqU57N9QcO1xESu0XjhzWKw0WYJ6=OsTixHAWlE1iqU5Lj9QcOueElW6XjhzWKw0WYJ6=OsTixHAW0pbiqU57N9QcO1xESu0XjhzWKw0WYJ6=OsTixHAE0MPiqU5Lj9QcOueElW6XjhzWKw0WYJ6=OsTixHAW0s0iqU57N9QcO1xESu0XjhzWKw0WYJ6=OsTixHAEO5UiqU5Lj9QcOueElW6XjhzWKw0WYJ6=OsTixHAXlpbiqU57N9QcO1xESu0XjhzWKw0WYJ6=OsTixHAJlWQiqU5Lj9QcOueElW6XjhzWKw0WYJ6=OsTixHAXOwxiqU57N9QcO1xESu0XjhzWKw0WYJ6=OsTixHAEOUviqU5Lj9QcOueElW6XjhzWKw0WYJ6=OsTixHAExW/iqU57N9QcO1xESu0XjhzWKw0WYJ6=OsTixHAJbs3INDVkxHAEOMeJx1Ale9QcOJq=bU1Waw3WKw6=Yu3IND2kxHAXSWeEOJAle9QcOJq=bU1Waw3WKvbWx13INDVkxHAEOMeJx1Ale9QcOJq=bU1Waw3WKwDJxG3IND2kxHAXSWeEOJAle9QcOJq=bU1Waw3WKvvWYu3INDVkxHAEOMeJx1Ale9QcOJq=bU1Waw3WKw0Ets3IND2kxHAXSWeEOJAle9QcOJq=bU1Waw3WKwDJxW3INDVkxHAEOMeJx1Ale9QcOJq=bU1Waw3WKw6=YW3IND2kxHAXSWeEOJAle9QcOJq=bU1Waw3WKvmEbF3INDVkxHAEOMeJx1Ale9QcOJq=bU1Waw3WKwAElJ3IND2kxHAXSWeEOJAle9QcOJq=bU1Waw3WKvUWtW3INDVkxHAEOMeJx1Ale9QcOJq=bU1Waw3WKwDExM3IND2kxHAXSWeEOJAle9QcOJq=bU1Waw3WKw/WOGDiqU5Lj9QcOueElW6XjhzWKw0WYJ6=OsTixHAJxEviqU57N9QcO1xESu0XjhzWKw0WYJ6=OsTixHAXOuPiqU5Lj9QcOueElW6XjhzWKw0WYJ6=OsTixHAEluqiqU57N9QcO1xESu0XjhzWKw0WYJ6=OsTixHAJaFgka/zWKwDESNbXSv8kxHAEbiYXlu/IBFQctR0JmFgkSezWKw6WxMDEbv8kxHAEbiYXlu/IBFQctpbJaFgka/zWKwDESNbXSv8kxHAEbiYXlu/IBFQctR6iqU57N9QcO1xESu0XjhzWKw0WYJ6=OsTixHAEYR/iqU5Lj9QcOueElW6XjhzWKw0WYJ6=OsTixHAEtuDiqU57N9QcO1xESu0XjhzWKw0WYJ6=OsTixHA=tJxiqU5Lj9QcOueElW6XjhzWKw0WYJ6=OsTixHAWS1/iqU57N9QcO1xESu0XjhzWKw0WYJ6=OsTixHA=SwQiqU5Lj9QcOueElW6XjhzWKw0WYJ6=OsTixHAWbEUiqU57N9QcO1xESu0XjhzWKw0WYJ6=OsTixHAWSGQJaFgka/zWKwDESNbXSv8kxHAEbiYXlu/IBFQctJeJmFgkSezWKw6WxMDEbv8kxHAEbiYXlu/IBFQctEmWaFgka/zWKwDESNbXSv8kxHAEbiYXlu/IBFQctNUEBFgkSezWKw6WxMDEbv8kxHAEbiYXlu/IBFQcO5bWaFgka/zWKwDESNbXSv8kxHAEbiYXlu/IBFQcOEYEmFgkSezWKw6WxMDEbv8kxHAEbiYXlu/IBFQcOvvWmFgka/zWKwDESNbXSv8kxHAEbiYXlu/IBFQctRqEqFgkSezWKw6WxMDEbv8kxHAEbiYXlu/IBFQcO5YWBFgka/zWKwDESNbXSv8kxHAEbiYXlu/IBFQcOE1XBFgkSeY5l6b5tU48mvzWKw/JxEY=YMVkxHAWSJ0JxUUIkh0JkRwkxHAWluxWbRD7N9QcOJq=bU1WShq=kpeFYAwkxHAXSWeEOJAle9QcOj1WxRqEBw3WKw/EO13INDTkxHAWlWx=Y=ULj9QcOs0EYW6=a1nza/zWKwDESNbXSv8kxHAEbiYXlu/IBFQcOw/=mFgkSezWKw6WxMDEbv8kxHAEbiYXlu/IBFQcOW0WmFgka/zWKwDESNbXSv8kxHAEbiYXlu/IBFQctW0=mFgkSezWKw6WxMDEbv8kxHAEbiYXlu/IBFQcO1A=BFgka/zWKwDESNbXSv8kxHAEbiYXlu/IBFQcOi1XaFgkSezWKw6WxMDEbv8kxHAEbiYXlu/IBFQcORAWmFgka/zWKwDESNbXSv8kxHAEbiYXlu/IBFQcOR/JqFgkSezWKw6WxMDEbv8kxHAEbiYXlu/IBFQctJQ=BFgka/zWKwDESNbXSv8kxHAEbiYXlu/IBFQctsPWqFgkSeY5l6b5tU48mvzWKwqWluD=bJVkxHAWYuAJ0=vIkh0JkRwkxHAWSU1EOMQ7N9QcOJq=bU1WShq=kpeFYAwkxHAXSWeEOJAle9QcOs6=OueWBw3WKw/EbG3INDTkxHAWbj1EtJ0Lj9QcOi1XtEYJa1nza/zWKwDESNbXSv8kxHAEbiYXlu/IBFQcOMP=aFgkSezWKw6WxMDEbv8kxHAEbiYXlu/IBFQcOWe=aFgka/zWKwDESNbXSv8kxHAEbiYXlu/IBFQctuA=aFgkSezWKw6WxMDEbv8kxHAEbiYXlu/IBFQcOFQJaFgka/zWKwDESNbXSv8kxHAEbiYXlu/IBFQcOwDJaFgkSezWKw6WxMDEbv8kxHAEbiYXlu/IBFQctNmEqFgka/zWKwDESNbXSv8kxHAEbiYXlu/IBFQcORAJmFgkSezWKw6WxMDEbv8kxHAEbiYXlu/IBFQcO10WmFgka/zWKwDESNbXSv8kxHAEbiYXlu/IBFQcOEmJaFgkSezWKw6WxMDEbv8kxHAEbiYXlu/IBFQctMQXaFgka/zWKwDESNbXSv8kxHAEbiYXlu/IBFQcOF6WBFgkSezWKw6WxMDEbv8kxHAEbiYXlu/IBFQcONUEaFgka/zWKwDESNbXSv8kxHAEbiYXlu/IBFQcOuQiqU57l=e8YEDol2CIj9QcOs6JYjmXaUn5YjqRj9QcO1AWOueXOezWKw0WYJ6=OsnFYND5kiCRj9QcO1xESu0XjhzWKw6XOGDESwTixHAJxG0iqU5Ij9QcOs6JYjmXa1nza/zWKwDESNbXSv8kxHAEbiYXlu/IBFQcOWDEaFgkSeY5l6b5tU48mvzWKw6E0JxE0JVkxHAWxpmWSGqIkh0JkRwkxHAWlJAJxG67N9QcOJq=bU1WShq=kpeFYAwkxHAXSWeEOJAle9QcOjYXtWQXaw3WKw0JYu3INDTkxHAXS5YWx5YLj9QcOWDJbsQWm1nza/zWKwDESNbXSv8kxHAEbiYXlu/IBFQcOFeEmFgkSeY5l6b5tU48mvzWKwqW0MqElRVkxHAWxG6WtNbIkh0JkRwkxHAXSMD=b12kxHAEbiYXlu/XPiU5KNq8mHzWKw6WxMDEbv8kxHAXSMD=b1TixHAXSR3INDTkxHAWbEUWbNmLj9QcOWQXSHUJq1nza/zWKwDESNbXSv8kxHAEbiYXlu/IBFQcOwqiqU57N9QcO1xESu0XjhzWKw0WYJ6=OsTixHAWSFQiqU5Lj9QcOueElW6XjhzWKw0WYJ6=OsTixHA=SHYiqU57N9QcO1xESu0XjhzWKw0WYJ6=OsTixHAEYsqiqU5Lj9QcOueElW6XjhzWKw0WYJ6=OsTixHA=tRqiqU57l=e8YEDol2CIj9QcOsAXS1QEm/zWKvYEtWQEYugcP=vFmHzWKwqWlW0Wtu2kxHAEbiYXlu/XPiU5KNq8mHzWKw6WxMDEbv8kxHAWbjbEbH1IBFQctjUJqFgkavzWKw/XO16WOJVkxHA=bpbWO=1ISh2Lj9QcOueElW6XjhzWKw0WYJ6=OsTixHAESJeiqU57N9QcO1xESu0XjhzWKw0WYJ6=OsTixHAJx1PiqU5Lj9QcOueElW6XjhzWKw0WYJ6=OsTixHAXSw3IND2kxHAXSWeEOJAle9QcOJq=bU1Waw3WKw/Ets3INDVkxHAEOMeJx1Ale9QcOJq=bU1Waw3WKvUExR3IND2=3NCJPpg80ATkxHAWSNUWtM/Lj9QcOsxJ0uPWBUn5YjqRj9QcOim=lEm=bezWKw0WYJ6=OsnFYND5kiCRj9QcO1xESu0XjhzWKwqJYNbJYJTixHAWS=biqU5Ij9QcOse=SHUWa/zWKw/W0E1ExGgXPDVkxHAEOMeJx1Ale9QcOJq=bU1Waw3WKwxEtR3IND2kxHAXSWeEOJAle9QcOJq=bU1Waw3WKwP=aFgka/zWKwDESNbXSv8kxHAEbiYXlu/IBFQctjbJaFgkSeY5l6b5tU48mvzWKwx=lWA=SJVkxHAWS1/XOR0Lj9QcOEbJbs0EBUn5YjqRj9QcOWQXSHvESezWKw0WYJ6=OsnFYND5kiCRj9QcO1xESu0XjhzWKwxWO1QJSMTixHAEtNbiqU5Ij9QcOEUJxvUEm/zWKw/XSsAWbJVkxHAW0EmWSJDISh2Lj9QcOueElW6XjhzWKw0WYJ6=OsTixHAESjYiqU57l=e8YEDol2CIj9QcOux=lW/Em/zWKwqE0seElJgcP=vFmHzWKw/JbNUEO12kxHAEbiYXlu/XPiU5KNq8mHzWKw6WxMDEbv8kxHAWlRe=Su6IBFQctpY=BFgkavzWKwDW0NbWSJVkxHAWb5vESNYISh2Lj9QcOueElW6XjhzWKw0WYJ6=OsTixHA=YM/iqU57l=e8YEDol2CIj9QcOpbJYE1Wa/zWKweJYEmEtsgcP=vFmHzWKwDXSEbEOs2kxHAEbiYXlu/XPiU5KNq8mHzWKw6WxMDEbv8kxHAEO1xJxu/IBFQcO=mWqFgkavzWKwDJ0ib=OsVkxHAElibJbpvISh2Lj9QcOueElW6XjhzWKw0WYJ6=OsTixHAJlWeiqU57l=e8YEDol2CIj9QcORqEO1x=a/zWKw/Exvm=YWgcP=vFmHzWKwqE0pvWb12kxHAEbiYXlu/XPiU5KNq8mHzWKw6WxMDEbv8kxHAWb51JSR6IBFQctuq=BFgkavzWKwqWbu6W0MVkxHAWSFAJY=bISh2Lj9QcOueElW6XjhzWKw0WYJ6=OsTixHAEtsDiqU57l=e8YEDol2CIj9QcOsQ=O5bWB/zWKw/Xt=bE0sgcP=vFmHzWKwx=ls0WOR2kxHAEbiYXlu/XPiU5KNq8mHzWKw6WxMDEbv8kxHAW0NvEbGqIBFQcOs0JqFgkavzWKw/WtuPJxGVkxHAWSvYJx5vISh2Lj9QcOueElW6XjhzWKw0WYJ6=OsTixHAElMxiqU57N9QcO1xESu0XjhzWKw0WYJ6=OsTixHAXO=miqU5Lj9QcOueElW6XjhzWKw0WYJ6=OsTixHAXtMQiqU57N9QcO1xESu0XjhzWKw0WYJ6=OsTixHA=bs0iqU5Lj9QcOueElW6XjhzWKw0WYJ6=OsTixHAEt=1iqU57l=e8YEDol2CIj9QcOjmWO5b=B/zWKwxWOJ0WxsgcP=vFmHzWKwDJlJeJSJ2kxHAEbiYXlu/XPiU5KNq8mHzWKw6WxMDEbv8kxHAEtjYEls0IBFQctuq=BFgkavzWKw/JbGPJ0uVkxHAWxG0EbW/ISh2Lj9QcOueElW6XjhzWKw0WYJ6=OsTixHAXOEmiqU57l=e8YEDol2CIj9QcOEvXtuQWq/zWKwxXSMAXlsgcP=vFmHzWKvYXSMeJxG2kxHAEbiYXlu/XPiU5KNq8mHzWKw6WxMDEbv8kxHA=b1eElWQIBFQcOsxEBFgkavzWKwxJSv1WOWVkxHAWx1eXOUvISh2Lj9QcOueElW6XjhzWKw0WYJ6=OsTixHAExRQiqU57l=e8YEDol2CIj9QctReEbRe=a/zWKwqXSEvEtugcP=vFmHzWKweElMxJYR2kxHAEbiYXlu/XPiU5KNq8mHzWKw6WxMDEbv8kxHAESNUW0imIBFQcOsQWO13INDTkxHAJbM0WbNULj9QcOR6W0sD=B1nza/zWKwDESNbXSv8kxHAEbiYXlu/IBFQctjUWBFgkSezWKw6WxMDEbv8kxHAEbiYXlu/IBFQcOJDXaFgka/zWKwDESNbXSv8kxHAEbiYXlu/IBFQcORqXaFgkSezWKw6WxMDEbv8kxHAEbiYXlu/IBFQcts/=aFgka/zWKwDESNbXSv8kxHAEbiYXlu/IBFQctR/EmFgkSeY5l6b5tU48mvzWKw/Jbp1XSJVkxHA=lRDWSs0Ikh0JkRwkxHAElJ/=lW/7N9QcOJq=bU1WShq=kpeFYAwkxHAXSWeEOJAle9QcONYWlNbWaw3WKw/EbG3INDTkxHAWlRD=O10Lj9QctNmEOs/Em1nza/zWKwDESNbXSv8kxHAEbiYXlu/IBFQcOsPWmFgkSezWKw6WxMDEbv8kxHAEbiYXlu/IBFQctjbEBFgka/zWKwDESNbXSv8kxHAEbiYXlu/IBFQcOjbXaFgkSezWKw6WxMDEbv8kxHAEbiYXlu/IBFQctueWBFgka/zWKwDESNbXSv8kxHAEbiYXlu/IBFQcOEv=aFgkSezWKw6WxMDEbv8kxHAEbiYXlu/IBFQcOR/EqFgka/zWKwDESNbXSv8kxHAEbiYXlu/IBFQcOEvWBFgkSezWKw6WxMDEbv8kxHAEbiYXlu/IBFQcOFxEmFgka/zWKwDESNbXSv8kxHAEbiYXlu/IBFQcO=YXBFgkSezWKw6WxMDEbv8kxHAEbiYXlu/IBFQcOEmiqU5Lj9QcOueElW6XjhzWKw0WYJ6=OsTixHAJbWDiqU57N9QcO1xESu0XjhzWKw0WYJ6=OsTixHA=l=YiqU5Lj9QcOueElW6XjhzWKw0WYJ6=OsTixHAElp1iqU57N9QcO1xESu0XjhzWKw0WYJ6=OsTixHAJ0J6iqU5Lj9QcOueElW6XjhzWKw0WYJ6=OsTixHA=YM3IND2kxHAXSWeEOJAle9QcOJq=bU1Waw3WKwD=Ow3INDVkxHAEOMeJx1Ale9QcOJq=bU1Waw3WKw0Wxs3IND2kxHAXSWeEOJAle9QcOJq=bU1Waw3WKwxJxs3INDVkxHAEOMeJx1Ale9QcOJq=bU1Waw3WKvmExs3IND2kxHAXSWeEOJAle9QcOJq=bU1Waw3WKvUWts3INDVkxHAEOMeJx1Ale9QcOJq=bU1Waw3WKwqEBFgkSezWKw6WxMDEbv8kxHAEbiYXlu/IBFQcOFxXaFgka/zWKwDESNbXSv8kxHAEbiYXlu/IBFQctuAJqFgkSeY5l6b5tU48mvzWKwxJYReLj9QcOiUWtWP=m/zWKw/=bJeEtJgcP=vFmHzWKweJS51JbJ2kxHAEbiYXlu/XPiU5KNq8mHzWKw6WxMDEbv8kxHAElsP=tR0IBFQcO1AJmFgkavzWKwxJYReLj9QcOiUWtWP=m/zWKw/=bJeEtJgXPDVkxHAEOMeJx1Ale9QcOJq=bU1Waw3WKw/XlR3IND2kxHAXSWeEOJAle9QcOJq=bU1Waw3WKw6JYu3INDVkxHAEOMeJx1Ale9QcOJq=bU1Waw3WKwqJ0M3IND2=3NCJPpg80ATkxHAW0pmWSwPLj9QcORPXOGqEaUn5YjqRj9QcOvUWOUYWxezWKw0WYJ6=OsnFYND5kiCRj9QcO1xESu0XjhzWKwA=SG6=bWTixHAXSuPiqU5Ij9QcOE1JbsAEq/zWKwqExwQWbMgXPDVkxHAEOMeJx1Ale9QcOJq=bU1Waw3WKvmXSu3IND2=3NCJPpg80ATkxHAWbuQEtimLj9QcOEYWtsDEmUn5YjqRj9QcORQEbRxJSezWKw0WYJ6=OsnFYND5kiCRj9QcO1xESu0XjhzWKwqWOJqW0sTixHAExw3INDTkxHAWbuQEtimLj9QcOEYWtsDEm1nza/zWKwDESNbXSv8kxHAEbiYXlu/IBFQct=mWaFgkSeY5l6b5tU48mvzWKwD=livWbGVkxHAWSuPJbNUIkh0JkRwkxHAES=YJlpb7N9QcOJq=bU1WShq=kpeFYAwkxHAXSWeEOJAle9QcOM0=Yj1Jqw3WKvUEx13INDTkxHAEtNmJSRQLj9QcOsDE0Re=a1nza/zWKwDESNbXSv8kxHAEbiYXlu/IBFQcOuQWBFgkSeY5l6b5tU48mvzWKwDXSpmEtMVkxHAEOEmW0uxIkh0JkRwkxHAXlW6=tRA7N9QcOJq=bU1WShq=kpeFYAwkxHAXSWeEOJAle9QcOUbXlpmXBw3WKv1EOM3INDTkxHAEO1DJbpULj9QcOuxJbE1Wq1nza/zWKwDESNbXSv8kxHAEbiYXlu/IBFQcOF/EBFgkSeY5l6b5tU48mvzWKwDJYs6WlsVkxHAWx1qXtEbIkh0JkRwkxHAEtN1XSuA7N9QcOJq=bU1WShq=kpeFYAwkxHAXSWeEOJAle9QcOpU=O1DXBw3WKvUEx13INDTkxHAEtivXSjvLj9QcOW6WbvbJq1nzSh0JkRwkxHAEtEY=SJ07N9QcOueElW6XOhV=kuwkxHAEYW6WSEY7N9QcOW6WOFAEUhzWKw0WYJ6=OsTixHAXOueiq1dkxHAEbiYXlu/IBFQctivJmFgkavzWKw6WxMDEbv8kxHAEbiYXlu/IBFQcOFDJqFgka1nkxHAEYW6WSEYle9QcOJq=bU1Waw3WKwDES13IND2iqFV50UC=t2Ple9QcOJq=bU1Waw3WKwxE0J3IND2WKw/WOhY5l6b5tU48mHzWKweXSM0ESGTkxHAEOM6=YsPIkh0JkRwkxHA=bMDWlWx7N9QcOJq=bU1WShg=mvzWKwDJ0=UEb=8kxHA=bMDWlWxIBFQctjUJaFgkavzWKwDJ0=UEb=8kxHA=bMDWlWxIBFQcOWxJaFgka/zWKwDJ0=UEb=8kxHA=bMDWlWxIBFQcts/WmFgka1gc0=e8YEDol2CRj9QctuDEljYWqwgcP=vFmHzWKweEbRDWSJ2kxHA=bMDWlWxXe9QcOpb=YM0EUhzWKweEbRDWSJTixHAWxpbiqU5Ij9QcOue=YW0WB/DotUxle9QcOM0Wbu/Emw3WKwDES13INDgX0UYIj9QcOpb=YM0EUhzWKweEbRDWSJTixHA=OJeiqU5Ij9QcOu0ElueEq/zWKwDJ0=UEb=8kxHAESJqEOs0IBFQctu0EaFgkavzWKw/ExE1=bFV5tvgFehzWKweEbRDWSJTixHAEOM6iqU5Ia1gcPe2zlNVF0MwFYND5kiCRj9QcOueXl=vExezWKwDESUYJS58kxHA=bMDWlWxIBFQctMqJmFgkaw4kKW4=qQ3iq1VkxHAEOM6=YsPXPeY5l6b5tU48mHzWKwqWYsDJSJTkxHAWlRDEOGqIkh0JkRwkxHAWYNvWSE17N9QcOJq=bU1WShg=mvzWKw6WxMDEbv8kxHAWYNvWSE1IBFQctM0EmFgkavzWKw6WxMDEbv8kxHAWYNvWSE1IBFQctWDWmFgka/zWKw6WxMDEbv8kxHAWYNvWSE1IBFQct=UWqFgka1gc0=e8YEDol2CRj9QcOibEYJ6EqwgcP=vFmHzWKwq=bWeEtu2kxHAWYNvWSE1Xe9Qctu0=OwDWSezWKwqWYWDJbH8kxHAWYJxESp1IBFQcOwDEaFgIe9QcOiYWxMD=Bw3WKweExJ3IaV38lM3kavzWKwDJ0=UEb=8kxHAWYJxESp1IBFQcOMPWqFgkaU8WKwQkSh2zlNVF0Nn5YjqRj9QcOjYWxjmJbezWKw6WxMDEbv8kxHAWYNvWSE1IBFQctJ0WBFgkNhzWKwq=ls/W0uTixHAXOWeiqU5IB59iq1VkxHAWbsqJb5U7SHAWOhPotUV=awvRNh5Ikhx50UDJ0wTkxHAWlJxWlimle9QcOR/WYRP=aVdkaUnJ0jx=aFQixg0JkRwkxHAW0u0=lJ6Lj9QcOWA=OW/=ODQcOGnJ02C5tUC5lMnJ0jx=aF/ixgq=kpeFYAwkxHAXSWeEOJAle9QcOiUJSsx=Bw3WKvbWbF3INDTkxHAXSWeEOJAle9QcOiUJSsx=Bw3WKv1=Yu3INDTkxHAWxv1Wxj1LOHAJa1VWKwQIShbJkEUixR3XU9QcO1xESu0XjhzWKwq=ls/W0uTixHAEbNYiqU5Ij9QcOM6ESJeWB/zWKw/JbuDWORgX0E483pg83NUX0EvF0M3WqF+=Y2qIK=vFmHzWKweXOUYXOM2WKwQXe9QcO1xESu0XjhzWKwq=ls/W0uTixHA=OuAiqU5Ij9QcOMAXlJAEa/zWKw/JbuDWOi8kxHAWYNvWSE1IBFQctJPWBFgka1nkxHAESw6=bweIxDQcORgkxHAWxv1Wxj1IxezWKw6WxMDEbv8kxHAWYNvWSE1IBFQcOpYiqU5Ij9QcO1xESu0XjhzWKwq=ls/W0uTixHAEOGqiqU5Ij9QcOE1EYNYXSezWKw6WxMDEbv8kxHAWYNvWSE1IBFQcOFAiqU5Ij9QcOjmEOuQWUhzWKwq=ls/W0uTixHAE0=biqU5Ij9QcOMAXlJAEa1VWKwqIaQQcO1g7e9QcO1xESu0XjhzWKwq=ls/W0uTixHAJ0JDiqU5Ij9QcOE1EYNYXaQQcO1gXU9QcOE1EYNYXa/zWKw6WxMDEbv8kxHAWYNvWSE1IBFQcOEb=BFgkavX5lem=kRVkxHAWlRDEOGqle9QcOiUJSsx=Bw3WKwP=YW3INDTkxHAXSWeEOJAle9QcOiUJSsx=Bw3WKw6JlM3INDTkxHAESw6=bweLOHAWa1gIa1nJ02C5tUC5lMnJ0jx=aFDixgg=mvzWKw6WxMDEbv8kxHAWYNvWSE1IBFQctsx=BFgkavzWKw6WxMDEbv8kxHAWYNvWSE1IBFQctpY=BFgkavzWKw/JbuDWOi8kxHAWYNvWSE1IBFQctJPWBFgkaQQcORgLOHAWB1gkxHAWlRDEOGq7N9QcO1xESu0XjhzWKwq=ls/W0uTixHAEYJPiqU5IBFQiq/zWKw/JbuDWORgX0E483pg83NUXPemFYNvoxh2zkeY5l6b5tU48mHzWKwqW0imWSWTkxHAWYNmWtuAIkh0JkRwkxHAWljYJYEY7N9QcOJq=bU1WShg=mvzWKwDJ0=UEb=8kxHAWljYJYEYIBFQcOsxWaFgkavzWKwDJ0=UEb=8kxHAWljYJYEYIBFQcOseEaFgka/zWKwDJ0=UEb=8kxHAWljYJYEYIBFQcOWqEmFgka1gc0=e8YEDol2CRj9QcOMx=SJDXawgcP=vFmHzWKw0XOsQ=lR2kxHAWljYJYEYX0UYIj9QcOpb=YM0EUhzWKw0XOsQ=lRTixHAEb=1iqU5Ij9QcOWD=ONv=UhzWKw0XOsQ=lRTixHA=bFQiqU5LOHAWm1g5tvgFehzWKw0XOsQ=lRTixHAEOM6iqU57N9QcOMeJbRA=OhU8KEURj9QcOpb=YM0EUhzWKw0XOsQ=lRTixHAExpYiqU5Ij9QcOjYWxM0EUhzWKw0XOsQ=lRTixHA=bFQiqU5LOHAEB1y5tvgFehzWKw0XOsQ=lRTixHAEOM6iqU57N9QcOpb=YM0EUhzWKw0XOsQ=lRTixHAJYR6iqU5Ij9QcOpb=YM0EUhzWKw0XOsQ=lRTixHAJYR6iqU5Ij9QcOWq=bUU=NhzWKw0XOsQ=lRTixHAJbNmiqU5IOHAWBQQcORgLj9QcOpb=YM0EUhzWKw0XOsQ=lRTixHAEqFgka1VkxHAEtJ6EOWAle9QcOJAWSHUJmw3WKvmElR3INDTWKwqIa1+5tvgFehzWKw0XOsQ=lRTixHAEOM6iqU57N9QcOpb=YM0EUhzWKw0XOsQ=lRTixHAJSWAiqU5Ij9QcOpb=YM0EUhzWKw0XOsQ=lRTixHAJSWAiqU5Ij9QcOu6=bjvWehzWKw0XOsQ=lRTixHAJbNmiqU5IOHAWBQQcORgLj9QcOpb=YM0EUhzWKw0XOsQ=lRTixHAEqFgka1VkxHAWbRAWYpYle9QcOJAWSHUJmw3WKvmElR3INDTWKwqLOHAEB1gXPe2=l/x=kh0JkRwkxHAESF/WbEY7N9QcOpb=YM0EUhzWKw/Jl=mJ0JTixHA=OJeiqU5Ij9QcOM6ESJeWB/zWKwq=lRQ=OwgLj9QcOpUJb=YWxezWKwxXSGPXO=8kxHAWljYJYEYIBFQcOwDEaFgIe9QcOjv=Yib=mw3WKvmJlR3INDTkxHAEtEY=SJ0le9QcOjv=Yib=mw3WKvmESM3INDgX0/U5BHzWKwq=bJ/JYJ2kxHAWx1QExw0le9QcOjv=Yib=mw3WKwAEOM3IahzWKw/Jl=mJ0JTixHAJYjmiqU5Ij9QcOpb=YM0EUhzWKw/Jl=mJ0JTixHAWx1DiqU5ISh0JkRwkxHAEtWAWxNU7N9QcOW6WOFAEUhzWKw/Jl=mJ0JTixHAXOueiq1dkxHAWljYJYEYIBFQctivJmFgkavzWKwDJ0=UEb=8kxHAWljYJYEYIBFQcOivEaFgka1nolJTkxHAEtEY=SJ0le9QcOjv=Yib=mw3WKvUJYR3INDTkxHAESF/WbEYle9QcOjv=Yib=mw3WKvYExG3INDV50UC=t2Ple9QcOjv=Yib=mw3WKwxE0J3INDgIkhg=mvzWKwDJ0=UEb=8kxHAWljYJYEYIBFQcOsxWaFgkavzWKwDJ0=UEb=8kxHAWljYJYEYIBFQcOweXaFgka/zWKwDJ0=UEb=8kxHAWljYJYEYIBFQctJPXaFgka1gc0=e8YEDol2CRj9QcOjY=tpb=mwgcPiU5KNq8mj8kSh2zlNVF0Nn5YjqRj9QcOiYJSWP=bezWKwDJ0=UEb=8kxHAWljYJYEYIBFQcONv=BFgkNhzWKw/Jl=mJ0JTixHAXOWeiqU5IB59iq1VkxHAEtW6=tN17SHAWOhPotUV=awvRNh5Ikhx50UDJ0wTkxHAWY=vWx5Yle9QcOpbXlpU=BVdkaUnJ0jx=aFQixgzWKwDJxwxElN8kxHAWljYJYEYIBFQcOueXaFgkSezWKwDJ0=UEb=8kxHAWljYJYEYIBFQctuq=aFgkShb806Dol6e=ShbJkEUixs3X35g8Yp45ehzWKw/Jl=mJ0JTixHAWxJ3IND2Raj8kShb806Dol6e=ShbJkEUixR3XU9QcOiYEbjm=UhzWKw/Jl=mJ0JTixHA=YsQiqU57N9QcOpb=YM0EUhzWKw/Jl=mJ0JTixHAJx=viqU5X0E483pg83NUX0EvF0M3WqF+50UC=t2Ple9QcOjv=Yib=mw3WKvUWls3IND2RNh5X0E483pg83NUX0EvF0M3EBF+kxHAEtNmEYJxle9QcOjv=Yib=mw3WKw/=b13INe8kxHAWljYJYEYIBFQcO1A=mFgkSezWKwDJ0=UEb=8kxHAWljYJYEYIBFQctM/EmFgkShb806Dol6e=Sh2J3iUJlVnzke2=l/x=khg=mvzWKwDJ0=UEb=8kxHAWljYJYEYIBFQctu0EaFgkavzWKwqWYsDJSJVkxHAESF/WbEYIaUnolJTkxHAEtEY=SJ0le9QcOjv=Yib=mw3WKvb=lJ3INDTkxHAEtEY=SJ0le9QcOjv=Yib=mw3WKw6WbF3INDVkxHAEtEY=SJ0le9QcOjv=Yib=mw3WKvYJxw3INDgIN9QcOpUJb=YWehzWKw/Jl=mJ0JTixHAWlJ6iqU5le9QcOjv=Yib=mw3WKw6XtJ3IND2kxHAEtEY=SJ0le9QcOjv=Yib=mw3WKwq=BFgka/Pol618P58kxHAWljYJYEYIBFQcOW0iqU57aj8ka/Pol618P58kxHAWljYJYEYIBFQctM/JaFgkSDvRNh5Lj9QcOpbXOWe=NhzWKw/Jl=mJ0JTixHAEOM6iqU57aF3X0NVF0Nn=3NCJPpg80AwkxHAES=UExFqIBUn5YjqRj9QcOR0JSibEOezWKw/Jl=mJ0JnFYND5kiCRj9QcOMeJbNb=jhzWKwqEYsqJxuTixHAEOM6iqU57aF3LBsvleDnzke2=l/x=khg=mvzWKwDJ0=UEb=8kxHAWljYJYEYIBFQcOReXaFgkavzWKwDJ0=UEb=8kxHAWljYJYEYIBFQcOJeXaFgka/zWKwDJ0=UEb=8kxHAWljYJYEYIBFQctR0EmFgka1gcP=vFmHzWKwxW0=vEYM2kxHAEtEY=SJ0le9QcOjv=Yib=mw3WKwP=YJ3INe8kxHAWljYJYEYIBFQcOwxEaFgkaw3zBFgLj9QcOjvWO1PExDQcOGn50vg8tMTRaj8kaUnFP5g5tETIj9QcOWx=Ys0=NhzWKw/JSG6ExFdIeDgc0EvF0M3WBF+kxHAEtNmEYJxle9QcOjv=Yib=mw3WKw/=b13INe8kxHAWljYJYEYIBFQcO1A=mFgkSezWKwDJ0=UEb=8kxHAWljYJYEYIBFQctM/EmFgkShb806Dol6e=ShbJkEUixs3XU9QcOpbXOWe=NhzWKw/Jl=mJ0JTixHAEOM6iqU57N9QcOpb=YM0EUhzWKw/Jl=mJ0JTixHAEOEmiqU5X0E483pg83NUX0EvF0M3WmF+50UC=t2Ple9QcOjv=Yib=mw3WKvUWls3IND2RNh5X0E483pg83NUX0EvF0M3WqF+kxHAWYJ0WliYle9QcOjv=Yib=mw3WKvYJSG3IND2kxHAEtEY=SJ0le9QcOjv=Yib=mw3WKvbEYs3INDnJ02C5tUC5lMnJ0jx=aFDixgPol618P58kxHAWljYJYEYIBFQcOW0iqU57asvleDnJ02C5tUC5lMnzliq=ljdXPe2=l/x=khY5l6b5tU48mHzWKwqWSGDJSuTIkhq=kpeFYA3ixh2zke2zkezWKw0Jx1/W0=8kxHAEbiYXlu/IBFQcOE1=aFgIe9QcOJq=bU1Waw3WKvv=mFgkavzWKw6WxMDEbv8kxHAEbiYXlu/IBFQcOF6XBFgka/zWKweJlRxJluVRNh5IShY5l6b5tU48mHzWKwDJlNY=bWTkxHAWluQXOUULj9QcOibE0MqWaUn5YjqRj9QcOuqXSRe=OezWKw0WYJ6=OsVkxHAWbGA=SH17kh2Xe9QcORQXtMQ=jhzWKwDWb1qEluTixHAWbUbiqU57l=e8YEDol2CIj9QcOWqEbUbEB/zWKwxJlM6WSugcP=vFmHzWKweEbvUE0M2kxHAEOR6WbN1XPiU5KNq8mHzWKwDJ0=UEb=8kxHAESJA=S5UIBFQcOWPXBFgkavzWKwxWbJ6JxuVkxHAW0jUXSsDISh2Lj9QcORQXtMQ=jhzWKwDWb1qEluTixHAXOMxiqU57l=e8YEDol2CIj9QcOWqJluQJa/zWKwxWxseXSFgcP=vFmHzWKwxJx1qWSF2kxHAEOR6WbN1XPiU5KNq8mHzWKwDJ0=UEb=8kxHAW0W6WbsPIBFQcO5YJmFgkavzWKwxWYj1WtsVkxHAWxW/ES1PISh2Lj9QcORQXtMQ=jhzWKwDWb1qEluTixHA=OwQiqU57N9QcOpb=YM0EUhzWKwDWb1qEluTixHA=lW6iqU5Lj9QcORQXtMQ=jhzWKwDWb1qEluTixHAJb5miqU57N9QcOpb=YM0EUhzWKwDWb1qEluTixHA=Ss0iqU5Lj9QcORQXtMQ=jhzWKwDWb1qEluTixHA=SuxiqU57N9QcOpb=YM0EUhzWKwDWb1qEluTixHAWYu3INDn5YjqRj9QcOueEbGPWbezWKwqWOvUWtunolJTkxHAEtEY=SJ0le9QcOuqXSRe=Bw3WKwD=O13INDTkxHAEtEY=SJ0le9QcOuqXSRe=Bw3WKwP=SM3INDVkxHAEtEY=SJ0le9QcOuqXSRe=Bw3WKwqWOs3INDgIkhY5l6b5tU48mHzWKwxJxN1EtRTIkh0JkRwkxHAEOR6EtMx7N9QcOuqXSRe=Ohg=mvzWKwDESJQExi8kxHAEOR6EtMxIBFQcOR6JqFgkavzWKwxWxNYJlMViqFgzK/zWKwDESJQExi8kxHAEOR6EtMxIBFQcOweWqFgkavzWKwDEYjYJxj8kxHAEOR6EtMxIBFQctJPWBFgkaQQcOWgIkh0JkRwkxHAW0JqESsq7N9QcORPJb=vXNhzWKwDWb1D=SWTixHAXOueiq1dkxHAEOR6EtMxIBFQctivJmFgkavzWKwDESJQExi8kxHAEOR6EtMxIBFQctuAWBFgka1nkxHAW0JqESsqle9QcOuqXSpUWqw3WKw/=b13INe8kxHAEOR6EtMxIBFQcO1A=mFgkSezWKwDESJQExi8kxHAEOR6EtMxIBFQctRPJmFgkSh2=l/x=kh0JkRwkxHAEORDXlWD7N9QcOW/JS5UENhzWKwDWb1D=SWTixHAXOueiq1dkxHAEOR6EtMxIBFQctivJmFgkavzWKwDESJQExi8kxHAEOR6EtMxIBFQctuAWBFgka1nkxHAEORDXlWDle9QcOuqXSpUWqw3WKw/=b13INe8kxHAEOR6EtMxIBFQcO1A=mFgkSezWKwDESJQExi8kxHAEOR6EtMxIBFQctMDWqFgkSh2zkeU8KEUcP=vFmHzWKweXOwD=YJ25tvgFehzWKwDWb1qEluTixHAEOM6iqU5le9QcOuqXSRe=Bw3WKvUWYR3INDTLehcktp5L0FViqFgLj9QcOs/E0sq=bezWKwqJx5UWbj8kxHAEOR6WbN1IBFQctMqJmFgkaw4ksu4=qQ3iqU8kxHAEOR6WbN1IBFQctJPWBFgkShzWKweXOwD=YJ2kxHAESwAEt=Yle9QcOuqXSRe=Bw3WKvU=bR3INDTWKwQLj9QcOs/E0sq=m1n5YjqRj9QctRx=OU1ESD3iq/zWKwxWbF6XSG2WKwQX0=4Fmv0JkRwkxHAW0i1EbsQ7SHAWOhzWKwDJ0=UEb=8kxHAEOR6WbN1IBFQcORP=aFgkavzWKwxJYu0WSGVkxHAWYWP=SR/le9QcOuqXSRe=Bw3WKvYExG3INDgim=zWKwDJ0=UEb=8kxHAEOR6WbN1IBFQcOvUEqFgkavzWKwxWbF6XSGVkxHAESwAEt=Yle9QcOuqXSRe=Bw3WKvYExG3INDgXe9QcOEm=OJ/WBVdIkhg=mvzWKwDJ0=UEb=8kxHAEOR6WbN1IBFQcOWQEBFgkavzWKwDJ0=UEb=8kxHAEOR6WbN1IBFQcti1JmFgka/zWKwDJ0=UEb=8kxHAEOR6WbN1IBFQcti1JmFgka1gc0=e8YEDol2CRj9QctsDJ0pvJqwgcP=vFmHzWKw/XOvbJlR2kxHAEOR6WbN1Xe9QcOim=luq=OezWKwDJ0=UEb=8kxHAWSwAJ0jmIBFQcOiYEBFgka/zWKwDJ0=UEb=8kxHAWSwAJ0jmIBFQcO1PWaFgkavzWKwqElRqWxGVkxHAWSuAJYEvLj9QcOWAWS1QXa1nzkeU8KEUc0UYIj9QcOpb=YM0EUhzWKwDWb1qEluTixHAEtu6iqU5Ij9QcOibE0MqWNhzWKwxJYu0WSH5LBFQiq1gc0UYIj9QcOpb=YM0EUhzWKwDWb1qEluTixHA=bvYiqU5Ij9QcOpb=YM0EUhzWKwDWb1qEluTixHAWSuqiqU5Lj9QcOpb=YM0EUhzWKwDWb1qEluTixHAWSuqiqU5IaUn=3NCJPpg80AwkxHAWS=1JxjUIBUn5YjqRj9QcOW0JYRxJbezWKwDWb1qElun5tvgFehzWKwxEYimW0RTixHAEOM6iqU57N9QcOpb=YM0EUhzWKwxEYimW0RTixHAJSWAiqU5Ij9QcOpb=YM0EUhzWKwxEYimW0RTixHAJSWAiqU5Ij9QcOW0WOW0=NhzWKwxEYimW0RTixHAJbNmiqU5IOHAWBQQcORgLj9QcOpb=YM0EUhzWKwxEYimW0RTixHAEqFgka1VkxHAXSR6E0pble9QcOW0JYRxJmw3WKvmElR3INDTWKwqLOHAEB1gXPe2=l/x=aHzWKvmW0u6=OMd7N9QcOMAXOpY=UhzWKwxWbF6XSH5Lj9QcOWqEx16WBVdXPeU8KEUc0UYIj9QcOpb=YM0EUhzWKwDWb1qEluTixHAXSUYiqU5Ij9QcOpb=YM0EUhzWKwDWb1qEluTixHA=bueiqU5Lj9QcOpb=YM0EUhzWKwDWb1qEluTixHAESF/iqU5IaUzWKvmW0u6=OMd7N9QcOibE0MqWNhzWKwxJYu0WSH5X0NVF0Nn=3NCJPpg80AwkxHAJbueESJPIBUn5YjqRj9Qctsq=lMD=SezWKwDWb1qElunkxHAXOF/Ex1/7N9QcONbESEmWjhzWKvvWYNUEtMTixHAWxw/iq1dkxHAJSiU=SpUIBFQcOuDEmFgkav8kxHAEtEY=SJ0le9Qctsq=lMD=aw3WKvmXlR3INe5ISh2zke2zkpTokE8kxHAEOR6WbN1IBFQcOueXaFgkSezWKvmW0u6=OMnzkeY5l6b5tU48mHzWKweJlRxJluTkxHAESUmEtjbIkh0JkRwkxHAEOR6WYux7N9QcOJq=bU1WShg=mvzWKwDJ0=UEb=8kxHAEOR6WYuxIBFQcO16=mFgkavzWKwDJ0=UEb=8kxHAEOR6WYuxIBFQcOvbXBFgka/zWKwDJ0=UEb=8kxHAEOR6WYuxIBFQcOvbXBFgka1gc0=e8YEDol2CRj9QcOu/XSGqEqwgcP=vFmHzWKwxJbFDXSF2kxHAEOR6WYuxXe9QctW/ESM0WUhzWKwxJbFDXSFTixHAEOM6iqU57N9QcOWDEOH1WehzWKwxJbFDXSFTixHAXOueiq1dkxHAW0RPEO1PIBFQctivJmFgkavzWKwDJ0=UEb=8kxHAW0RPEO1PIBFQcOJqiqU5INhzWKwxJbFDXSFTixHAEOM6iqU5XPe2=l/x=khzWKwDJ0=UEb=8kxHAEOR6WYuxIBFQcO1PWaFgkavzWKwq=tNY=SGVkxHAESUmEtjbLj9QcOpb=YM0EUhzWKwDWb1q=OWTixHA=OJeiqU5Ij9QcOWD=S1/=m/DotUxle9QcOuqXSi1Wqw3WKwDES13INDgISh0JkRwkxHAWS5U=bu0XPEPokpboBvPol618P58kxHAEOR6WYuxIBFQcOEY=BFgIq5b5B55IkhbJkEURj9QcOpb=YM0EUhzWKwDWb1q=OWTixHAWxu0iqU5XU9QcOsP=lJDEbezWKwDJ0=UEb=8kxHAEOR6WYuxIBFQctWD=BFgkShmFYNvoxhbJkEURj9QcOpb=YM0EUhzWKwDWb1q=OWTixHA=OpviqU5XU9QcOsP=lJDEbezWKwDJ0=UEb=8kxHAEOR6WYuxIBFQcOEmXBFgkShmFYNvoxhbJkEURj9QcOpb=YM0EUhzWKwDWb1q=OWTixHAXSRxiqU5XU9QcOsP=lJDEbezWKwDJ0=UEb=8kxHAEOR6WYuxIBFQctRPWBFgkShmFYNvoxh1=l=v5l/DXU9QcOsP=lJDEbezWKwDJ0=UEb=8kxHAEOR6WYuxIBFQctWD=BFgkSh2kxHAEtjU=YJxle9QcOuqXSi1Wqw3WKvvWtR3INDTkxHAEYW6WSEYLj9QcOM6JbpvJq/zWKw/E0NYEOJgXPe2kxHAEYW6WSEYle9QcOJq=bU1Waw3WKvmEmFgkSeY5l6b5tU48mwgcP=vFmHzWKw/WSU1XtR2kxHAEbiYXlu/Lj9QcOjmJSRPESenzShzWKw/JYsqExN8kxHAWSs6=OvmIBFQcO5vEaFgkSeY5l6b5tU48mvzWKw/W0Ev=YRVkxHAEOJ0=YMDIkh0JkRwkxHAEts6WlMq7N9QcOs/XluAJbhq=kpeFYAwkxHAEtEY=SJ0le9QcOpvXSjUWmw3WKwPWYJ3INDTkxHAWSEbJl=mLj9QcOu0EY=UEB1nza/zWKw/JYsqExN8kxHAWSs6=OvmIBFQcOF6WqFgkSeY5l6b5tU48mvzWKwqWYJA=OJgcP=vFmHzWKw/WYsDXOW2kxHAWSs6=OvmXPiU5KNq8mHzWKwDJ0=UEb=8kxHAWSivEOwxIBFQctE1WBFgkavzWKwqWYJA=OJgXPDVkxHAWlivWbFele9QcOs/XluAJmw3WKvUJbG3IND2=3NCJPpg80ATkxHAEOwQ=lJALj9QcOs0E0RAWaUn5YjqRj9QctRAWxw0EOezWKw/WSU1XtRnFYND5kiCRj9QcOpb=YM0EUhzWKvmXOWAEbuTixHAWxW3INDTkxHAEOwQ=lJALj9QcOs0E0RAWa1nza/zWKw/JYsqExN8kxHAWSs6=OvmIBFQcOu/JmFgkSezWKwDJ0=UEb=8kxHAWSs6=OvmIBFQcOR6=aFgka/zWKw/JYsqExN8kxHAWSs6=OvmIBFQcOFPXaFgkSeY5l6b5tU48mvzWKwDWbWeWbWgcP=vFmHzWKwqWSRDJSJ2kxHAWSs6=OvmXPiU5KNq8mHzWKwDJ0=UEb=8kxHAWbsqEts0IBFQctE1WBFgkavzWKwDWbWeWbWgXPDVkxHAWlivWbFele9QcOs/XluAJmw3WKvmJSG3IND2=3NCJPpg80ATkxHAWxMq=OwxIkh0JkRwkxHAW0=1JSGq7N9QcOs/XluAJbhq=kpeFYAwkxHAEtEY=SJ0le9QcOEY=tsQWmw3WKw6XOJ3INDTkxHAWxMq=OwxISh2Lj9QcOjmJSRPENhzWKw/WSU1XtRTixHAEbW0iqU57N9QcOpb=YM0EUhzWKw/WSU1XtRTixHAJbMxiqU5Lj9QcOjmJSRPENhzWKw/WSU1XtRTixHAXSMxiqU57N9QcOpb=YM0EUhzWKw/WSU1XtRTixHAWYu3INDVkxHAWlivWbFele9QcOs/XluAJmw3WKwPXOW3IND2kxHAEtEY=SJ0le9QcOs/XluAJmw3WKvUWOF3INDVkxHAWlivWbFele9QcOs/XluAJmw3WKw/JlR3IND2kxHAEtEY=SJ0le9QcOs/XluAJmw3WKw6XOM3INDVkxHAWlivWbFele9QcOs/XluAJmw3WKvmEYu3IND2kxHAEtEY=SJ0le9QcOs/XluAJmw3WKvvEOG3INDn5YjqRj9QcONbJlW6EbezWKw/JYsqExMnolJTkxHAEtEY=SJ0le9QcOs/XluAJmw3WKwxWqFgkavzWKwDJ0=UEb=8kxHAWSs6=OvmIBFQcOFqEmFgka/zWKwDJ0=UEb=8kxHAWSs6=OvmIBFQcOJ6JqFgka1gce9QcO=bXSsx=UhzWKw/WSU1XtRTixHAWlJ6iqU5le9QcOs/XluAJmw3WKw6XtJ3IND2kxHAEtEY=SJ0le9QcOs/XluAJmw3WKwq=BFgkSh0JkRwkxHAWSJPWSjm7kpTokE8kxHAWSs6=OvmIBFQcOueXaFgkNhzWKw/WSU1XtRTixHA=SimiqU5IB2FpB23LBF3IShg=mvzWKwDJ0=UEb=8kxHAWSs6=OvmIBFQcORPWaFgkavPol618P58kxHAWSs6=OvmIBFQcOWP=mFgka/zWKw/EbF/Wli8kxHAWSs6=OvmIBFQctJPWBFgka1gc0UYIj9QcOpb=YM0EUhzWKw/WSU1XtRTixHAWlEbiqU5Ij9QcOpb=YM0EUhzWKw/WSU1XtRTixHAEbEbiqU5Lj9QcOpb=YM0EUhzWKw/WSU1XtRTixHA=tMxiqU5IaUn=3NCJPpg80AwkxHAWYu0WORqIBUn5YjqRj9QcOs/WlJPEbezWKw/WSU1XtRVkxHAE0=1=bR67kh2Xe9QcO5Y=tJqXNhzWKw/WSjYExJTixHAWxEmiqU57l=e8YEDol2CIj9QcOMPJ0WDWa/zWKw/JSWD=SGgcP=vFmHzWKwxJYJeEbu2kxHAWSs/=bF0XPiU5KNq8mHzWKweJ0jbXS=8kxHAW0iYESJDIBFQcO5vEaFgkavzWKweE0EbEOsVkxHAWlsxEtMQISh2Lj9QcO5Y=tJqXNhzWKw/WSjYExJTixHA=Ow3IND2=3NCJPpg80ATkxHAWlM6=bGeIkh0JkRwkxHAEOjUESM07N9QcOs/WlJPEbhq=kpeFYAwkxHAElEvJx10le9QcOu/=SMeEmw3WKwPXSW3INDTkxHAWlM6=bGeISh2XP=vFmHzWKv1W0uxXOR2kxHAE0=1=bR6X0UYIj9QcONbJlW6EUhzWKw/WSjYExJTixHA=lRQiqU5Ij9QcOMx=lR0EjhzWKw/WSjYExJTixHAEYR0iqU5Lj9QcONbJlW6EUhzWKw/WSjYExJTixHAEOjmiqU5IaUnJ02CFPuwc0Uh8lN1oljD=MET=lEdXU9QctM0JlNU=a/g8YUDp0/4JYjVS0ix=ki0=kR+kxHAJS16=b1xzSezWKweJ0jbXS=8kxHAWSs/=bF0IBFQcO5vEaFgkavzWKwxWOEY=S1VkxHAW0Wq=lseIShzWKweJ0jbXS=8kxHAWSs/=bF0IBFQcOFPXaFgkavzWKvUEYjU=lMgLj9QcONbJlW6EUhzWKw/WSjYExJTixHAJYsQiqU5Ij9Qcts6XlJ6Wq1nzlNVF0MwkxHAWlM6E0R6le9QcOs/WlJPEmw3WKwx=tM3IahzWKw/WSjYExJTixHAJlJ3INDTkxHAElEvJx10le9QcOs/WlJPEmw3WKw0WxJ3INDVIB1273h0JkRwkxHAWbW/WlWA7N9QcOs/WlJPEbhb806x5BHnoleh=lpgJkpUu0vUJ0V+kxHAWljmXSwQLtUCokpK8t2mJl/7J3EUF3=UFbgzWKw6WxJ6Wb527N9Qctux=OWAWUhzWKwqWxs/JxwTixHAWxEmiqU5Ij9QcONvXSHvEB/zWKwxESFDElWgXe9Qctux=OWAWUhzWKwqWxs/JxwTixHA=Ow3INDTkxHAWljmXSwQIa/zWKv1W0uxXOi8kxHAWbW/WlWAIBFQctuAiqU5Ij9QcO1xEb1qEq1nza1nzkeU8KEUce9QcOpb=YM0EUhzWKw/WSU1XtRTixHAExiYiqU5Ij9QcORxJYR/Wq/DotUxle9QcOs/XluAJmw3WKwDES13INDgX0UYIj9QcOpb=YM0EUhzWKw/WSU1XtRTixHAExiYiqU5Ij9QcORqJSpvEm/zWKwDJ0=UEb=8kxHAWSs6=OvmIBFQctpU=mFgkavzWKweXSM0ESGV5tvgFehzWKw/WSU1XtRTixHAEOM6iqU5Ia1gcPe2zkeU8KEUc0=e8YEDol2CRj9QcOuDESJqEawgcP=vFmHzWKwqWS10Exu2kxHAWSs6=OvmXe9QcOjb=OU1JUhzWKwqWS10ExuTixHAWlJ6iqU5le9QcOR/XSJPEBw3WKw6XtJ3IND2kxHAElEvJx10le9QcOR/XSJPEBw3WKw6ESW3INDnolJTkxHAWbFx=YJqle9QcOR/XSJPEBw3WKwAEOM3IahzWKwqWS10ExuTixHAJYjmiqU5Ij9QcONbJlW6EUhzWKwqWS10ExuTixHAExwxiqU5IaUn5YjqRj9QcOMxJbUYExezWKwqJlWAEOv8kxHAWbs6EbFDIBFQcOwDEaFgIe9QcOR/XSJPEBw3WKvmJlR3INDTkxHAElEvJx10le9QcOR/XSJPEBw3WKwPXOW3INDgXe9QcOMxJbUYEehzWKwqWS10ExuTixHAWlJ6iqU5le9QcOR/XSJPEBw3WKw/=lW3IND2kxHAElEvJx10le9QcOR/XSJPEBw3WKw/JlR3INDVkxHAElEvJx10le9QcOR/XSJPEBw3WKvUJbG3INDT5KUQ=l2YRj9QcOMxJbUYEehzWKwqWS10ExuTixHAEtjYiq1diPu3ka/zWKweJ0jbXS=8kxHAWbs6EbFDIBFQctR0=BFgka1ykxHAESEmXlJPle9QcOR/XSJPEBw3WKwDJlJ3IaV35B557aF3XU9QcOMxJbUYEehzWKwqWS10ExuTixHAWbjUiqU57aF3Lj9QcOMxJbUYEehzWKwqWS10ExuTixHA=SNviqU57aF3XPe2zkDVkxHAEYW6WSEYle9QcOJq=bU1Waw3WKwx=bw3IND2=3NCJPpg80ATIkh0JkRwkxHAW0MDJYuD7N9QcOJq=bU1WShg=mvzWKwDJ0=UEb=8kxHAW0MDJYuDIBFQcORQ=mFgkavzWKwDJ0=UEb=8kxHAW0MDJYuDIBFQctj1EBFgka/zWKwDJ0=UEb=8kxHAW0MDJYuDIBFQctp1iqU5IaUnolJTkxHAEtEY=SJ0le9QcOEUEti1EBw3WKv1WOR3INDT5tvgFehzWKwx=Spm=OuTixHAEOM6iqU5le9QcOEUEti1EBw3WKvYExG3INDVWKwQIaUnolJTkxHAEtEY=SJ0le9QcOEUEti1EBw3WKw/J0W3INDTkxHAEtEY=SJ0le9QcOEUEti1EBw3WKwq=lM3INDVkxHAEtEY=SJ0le9QcOEUEti1EBw3WKw/WYW3INDgIkhY5l6b5tU48mHzWKweJYM/E0WTIkhq=kpeFYA3ixh2zlNVF0Nn5YjqRj9QcOMxEOMPWbeDotUxle9QcOEUEti1EBw3WKwDES13INe8kxHAW0MDJYuDIBFQctMqJmFgkaw4ksu4=qQ3iq1nkxHAEtEY=SJ0le9QcOEUEti1EBw3WKv1=lJ3INDTkxHAWbEmJbsxLKpTokE8kxHAW0MDJYuDIBFQcOueXaFgka1nzke2=l/x=khY5l6b5tU48mHzWKwqEbs/JSJTIkh0JkRwkxHAWYW0=YJx7N9QcOEUEti1EOhzWKweESNY=Ys28YNPRj9QcOp1=SF/EavzWKwDJ0=UEb=8kxHAWYW0=YJxIBFQctivEqFgka1nzke2X0=e8YEDol2CRj9QcOi1=l=UWBvzWKweWxMAElRVkxHAWSWPXSNbIkh0JkRwkxHAEOsPWOEb7N9QcOJq=bU1WShg=mvzWKwDJ0=UEb=8kxHAEOsPWOEbIBFQcOjbJqFgkavzWKwDJ0=UEb=8kxHAEOsPWOEbIBFQctMeEBFgka/zWKwDJ0=UEb=8kxHAEOsPWOEbIBFQctMeEBFgka1gc0/U5BHzWKwxWOpm=Os2kxHAWx1QExw0le9QcOu/ExGxJqw3WKwAEOM3IahzWKwDWSFQW0WTixHAJYjmiqU5Ij9QcOpb=YM0EUhzWKwDWSFQW0WTixHAWx1DiqU5IShx50UDJ0wTkxHAWSWPXSNbIkhbJkEURj9QcOpb=YM0EUhzWKwDWSFQW0WTixHAJSvviqU5X35g8Yp45ehzWKwDWSFQW0WTixHAW0=1iq1di0EDieD2kxHAEtEY=SJ0le9QcOu/ExGxJqw3WKwxEOJ3INDV50UC=t2Ple9QcOu/ExGxJqw3WKwxE0J3IND2WKw/WB/Pol618P58kxHAEOsPWOEbIBFQcOj1EBFgkSDQcOWVkxHAWxGDJYu/le9QcOu/ExGxJqw3WKvYJSG3IND2kxHAEtEY=SJ0le9QcOu/ExGxJqw3WKwx=tJ3INDnJ3iUJlVnJ0jx=aHzWKwDJ0=UEb=8kxHAEOsPWOEbIBFQcOE1JqFgkSgPol618P58kxHAEOsPWOEbIBFQcOEY=BFgIq5b5B557N9QcOpb=YM0EUhzWKwDWSFQW0WTixHAWxu0iqU5LK5g8Yp45ehzWKwDWSFQW0WTixHAWx5YiqU57SHAWSGV50UC=t2Ple9QcOu/ExGxJqw3WKw/=Ou3IND2WKwxLj9QcOWQEti1WNhzWKwDWSFQW0WTixHA=YsQiqU57N9QcOpb=YM0EUhzWKwDWSFQW0WTixHAW0s0iqU5X0iq=ljdX0EvF0MwkxHAEtEY=SJ0le9QcOu/ExGxJqw3WKw6=tW3IND+50UC=t2Ple9QcOu/ExGxJqw3WKwx=Yu3IaV3JPu3kSezWKwDJ0=UEb=8kxHAEOsPWOEbIBFQctuDJaFgka/Pol618P58kxHAEOsPWOEbIBFQcOWP=mFgkSDQctJV50UC=t2Ple9QcOu/ExGxJqw3WKw/=Ou3IND2WKwDLj9QcOWQEti1WNhzWKwDWSFQW0WTixHA=YsQiqU57N9QcOpb=YM0EUhzWKwDWSFQW0WTixHAXOwxiqU5X0iq=ljdX0EvF0MwkxHAEtEY=SJ0le9QcOu/ExGxJqw3WKwPWxs3IND+50UC=t2Ple9QcOu/ExGxJqw3WKwx=Yu3IaV3JPu3kSezWKwDJ0=UEb=8kxHAEOsPWOEbIBFQcOWDEmFgka/Pol618P58kxHAEOsPWOEbIBFQcOWP=mFgkSDQcOsQLK5g8Yp45ehzWKwDWSFQW0WTixHAWluDiqU57SHAWq/zWKwxWOpm=Oj8kxHAEOsPWOEbIBFQct=vWBFgkSezWKwDJ0=UEb=8kxHAEOsPWOEbIBFQcOUY=BFgkShmFYNvoxhbJkEURj9QcOpb=YM0EUhzWKwDWSFQW0WTixHAEtWQiqU5X35g8Yp45ehzWKwDWSFQW0WTixHAW0=1iq1di0EDieD2kxHAEtEY=SJ0le9QcOu/ExGxJqw3WKwxEOJ3INDV50UC=t2Ple9QcOu/ExGxJqw3WKwxE0J3IND2WKw/WB/Pol618P58kxHAEOsPWOEbIBFQcOj1EBFgkSDQcOWVkxHAWxGDJYu/le9QcOu/ExGxJqw3WKvYJSG3IND2kxHAEtEY=SJ0le9QcOu/ExGxJqw3WKw0Ets3INDnJ3iUJlVnJ0jx=aHzWKwDJ0=UEb=8kxHAEOsPWOEbIBFQcOUYJqFgkSgPol618P58kxHAEOsPWOEbIBFQcOEY=BFgIq5b5B557N9QcOpb=YM0EUhzWKwDWSFQW0WTixHAXSRxiqU5LK5g8Yp45ehzWKwDWSFQW0WTixHAWx5YiqU57SHA=a/Pol618P58kxHAEOsPWOEbIBFQcOj1EBFgkSDQcOWVkxHAWxGDJYu/le9QcOu/ExGxJqw3WKvYJSG3IND2kxHAEtEY=SJ0le9QcOu/ExGxJqw3WKwAElJ3INDnJ3iUJlVnJ0jx=aHzWKwDJ0=UEb=8kxHAEOsPWOEbIBFQcOuPEaFgkSgPol618P58kxHAEOsPWOEbIBFQcOEY=BFgIq5b5B557N9QcOpb=YM0EUhzWKwDWSFQW0WTixHAWxu0iqU5LK5g8Yp45ehzWKwDWSFQW0WTixHAWx5YiqU57SHAWSGV50UC=t2Ple9QcOu/ExGxJqw3WKw/=Ou3IND2WKwxLj9QcOWQEti1WNhzWKwDWSFQW0WTixHA=YsQiqU57N9QcOpb=YM0EUhzWKwDWSFQW0WTixHAJxEviqU5X0iq=ljdX0EvF0MwkxHAEtEY=SJ0le9QcOu/ExGxJqw3WKwe=OR3IND+50UC=t2Ple9QcOu/ExGxJqw3WKwx=Yu3IaV3JPu3kSezWKwDJ0=UEb=8kxHAEOsPWOEbIBFQcOWDEmFgka/Pol618P58kxHAEOsPWOEbIBFQcOWP=mFgkSDQcOsQLK5g8Yp45ehzWKwDWSFQW0WTixHAWluDiqU57SHAWq/zWKwxWOpm=Oj8kxHAEOsPWOEbIBFQct=vWBFgkSezWKwDJ0=UEb=8kxHAEOsPWOEbIBFQctR0JmFgkShmFYNvoxh1=l=v5l/DX35g8Yp45ehzWKwDWSFQW0WTixHAWx5YiqU57SHAWSGV50UC=t2Ple9QcOu/ExGxJqw3WKw/=Ou3IND2WKwxLj9QcOWQEti1WNhzWKwDWSFQW0WTixHA=YsQiqU57N9QcOpb=YM0EUhzWKwDWSFQW0WTixHAJb13INDnJ3iUJlVnzkeU8KEUc0=e8YEDol2CRj9QcOMQXOu/EBwgcP=vFmHzWKwD=OueEOu2kxHAEOsPWOEbXe9QcO=mW0W6EUhzWKwD=OueEOuTixHAXOueiq1dkxHAEtuDESuDIBFQctivJmFgkavzWKwxE0Mq=bMgle9QcOp1EOMDEBw3WKw/=b13INe8kxHAEtuDESuDIBFQcOjUJqFgkSezWKwDJ0=UEb=8kxHAEtuDESuDIBFQctR6WmFgkSh2zkeY5l6b5tU48mHzWKwxEtM6WlJTkxHAEOMPEbMPIkh0JkRwkxHAEOpU=S=b7N9QcOJq=bU1Wa/zWKwxJSFeJbR2cPDnkxHAW0sPElRqle9QcOuD=lM0Jqw3WKwDWbW3IND2kxHAEtEY=SJ0le9QcOuD=lM0Jqw3WKw6XOM3INDVkxHAW0sPElRqle9QcOuD=lM0Jqw3WKw/EYM3IND2kxHAEtEY=SJ0le9QcOuD=lM0Jqw3WKvmXSR3INDVkxHAW0sPElRqle9QcOuD=lM0Jqw3WKwDESs3IND2kxHAEtEY=SJ0le9QcOuD=lM0Jqw3WKwqW0M3INDVkxHAW0sPElRqle9QcOuD=lM0Jqw3WKvv=S13IND2kxHAEtEY=SJ0le9QcOuD=lM0Jqw3WKvYElR3INDVkxHAW0sPElRqle9QcOuD=lM0Jqw3WKvbJSw3IND2kxHAEtEY=SJ0le9QcOuD=lM0Jqw3WKvU=Su3INDn5YjqRj9QcORPExJQWSezWKwxJSFeJbRnolJTkxHAEtEY=SJ0le9QcOuD=lM0Jqw3WKwqWtJ3INDTkxHAEtEY=SJ0le9QcOuD=lM0Jqw3WKwx=bJ3INDVkxHAEtEY=SJ0le9QcOuD=lM0Jqw3WKvmWbF3INDgIkh0JkRwkxHAESuDXlNU7kh2Xe9QcOMDEOUU=NhzWKwDEtNUEYWTixHA=OuqiqU57N9QcOpb=YM0EUhzWKwDEtNUEYWTixHAJSvviqU5Lj9QcOMDEOUU=NhzWKwDEtNUEYWTixHAWx1eiqU57a2cEB9n5YjqRj9QcOWPWli1EOenzShzWKwxExjm=Op8kxHAEOpU=S=bIBFQctuDWmFgkSezWKwDJ0=UEb=8kxHAEOpU=S=bIBFQcOE1JqFgka/zWKwxExjm=Op8kxHAEOpU=S=bIBFQcOW6EaFgkSD4kbN8WaDeka9n5YjqRj9QcOMxWbM6JbenzShzWKweWxReXli8kxHAEOpU=S=bIBFQctuDWmFgkSezWKwDJ0=UEb=8kxHAEOpU=S=bIBFQcOU1JqFgka/zWKweWxReXli8kxHAEOpU=S=bIBFQcOW6EaFgkSD4kbE8EO55Lxh0JkRwkxHAEtsQWtu2cPDnkxHAEtsQWtp8kxHAEOpU=S=bIBFQctuDWmFgkSezWKwDJ0=UEb=8kxHAEOpU=S=bIBFQcOFxWaFgka/zWKwDJSGQ=jhzWKwDEtNUEYWTixHAWx1eiqU57a2cEUVQEON5Lxh0JkRwkxHAWbseJbM/7kh2Xe9QcOR/ElReWNhzWKwDEtNUEYWTixHA=OuqiqU57N9QcOpb=YM0EUhzWKwDEtNUEYWTixHAEtWQiqU5Lj9QcOR/ElReWNhzWKwDEtNUEYWTixHAWx1eiqU57a2cWxN8WmDAka9n5YjqRj9QcOs0=YjvWSenzShzWKw/EY=vJSj8kxHAEOpU=S=bIBFQctuDWmFgkSezWKwDJ0=UEb=8kxHAEOpU=S=bIBFQcOUYJqFgka/zWKw/EY=vJSj8kxHAEOpU=S=bIBFQcOW6EaFgkSD4kbE8WOJAka9n5YjqRj9QcOu0EOsxJbenzShzWKwDEbu/W0i8kxHAEOpU=S=bIBFQctuDWmFgkSezWKwDJ0=UEb=8kxHAEOpU=S=bIBFQcON1WmFgka/zWKwDEbu/W0i8kxHAEOpU=S=bIBFQcOW6EaFgkSD4kmweWOsAzOMQWbH9ESGxXKQ0WxGDzOJPESU9EbF0lxshWeDgLxh0JkRwkxHAWSFQXSR/7kh2Xe9QcOsPWO1qWNhzWKwDEtNUEYWTixHA=OuqiqU57N9QcOpb=YM0EUhzWKwDEtNUEYWTixHAEOFeiqU5Lj9QcOsPWO1qWNhzWKwDEtNUEYWTixHAWx1eiqU57a2cIOJqlxGhXNenWSuVWS52Ia9nJ02CFPuwkxHAXOWQWOsq7NhzWKweEOu6=lMVkxHAWxF/JYuDLj9QcOMxWbM6Jm/zWKwDJSGQ=B/zWKwqWSNmESsVkxHAWS=YJls/Lj9QcOu0EOsxJm/zWKw/ExG6Wbj5Lj9QcOMQESFPJbezWKwDESF0ES58kxHAEOpU=S=bIBFQctMqJmFgkaw4ksu4=qQ3iq1n=Y2qItE483EDRj9QcOuPWSux=BH4=mHzWKwAWxGQWSRgc0UYIj9QcOpb=YM0EUhzWKwDEtNUEYWTixHAW0uAiqU5Ij9QcOpb=YM0EUhzWKwDEtNUEYWTixHAXOjYiqU5Lj9QcOpb=YM0EUhzWKwDEtNUEYWTixHAXOjYiqU5IaUnolJTkxHAEOF/EOE1le9QcOuD=lM0Jqw3WKwxXSM3INe8kxHAEOpU=S=bIBFQcOjbWmFgkavzWKweWOMPE0RgIkhg=mvzWKwDJ0=UEb=8kxHAEOpU=S=bIBFQcORQ=mFgkavzWKwDJ0=UEb=8kxHAEOpU=S=bIBFQctW0=mFgka/zWKwDJ0=UEb=8kxHAEOpU=S=bIBFQcOi1XaFgka1gFYND5kiCRj9QcOuPWSux=jhzWKwDEtNUEYWTixHA=OuqiqU5X0NVF0Nn=3NCJPpg80AwkxHAEOR0J0WxIBUn5YjqRj9QcOW/Jliv=OezWKwDEtNUEYWnFYND5kiCRj9QcOjbXOu0XjhzWKwxWljmJluTixHAEOM6iqU57N9QcOpb=YM0EUhzWKwxWljmJluTixHAEtuDiqU5LBj8kSh2zke2=l/x=khY5l6b5tU48mHzWKwPXOFxEb1TIkh0JkRwkxHAXOFx=SMx7N9QcOuD=lM0JxhzWKwDEOGAWbE8kxHAXOFx=SMxIBFQcOE1=aFgIe9QcOwPW0MeWqw3WKvv=mFgkavzWKwDJ0=UEb=8kxHAXOFx=SMxIBFQcOs6WaFgka/Y5l6b5tU48mwgcP=vFmHzWKw/WxF6Elu2kxHAXOFx=SMxXe9QcOpmJYEUEqJYkxHAWbUmJYM/le9QcOsxEx1e=Bw3WKvUJmFgkawgXe9QcOjU=Sw6WUhzWKw/WxF6EluTixHAWlJ6iqU5le9QcOsxEx1e=Bw3WKw/=lW3IND2kxHAWbFPEbG/le9QcOsxEx1e=Bw3WKwDWbW3INDVkxHAWSHbEbFqle9QcOsxEx1e=Bw3WKw/=b13INe8kxHAWSWPXSN1IBFQcOjUJqFgkSezWKwqExF0WOj8kxHAWSWPXSN1IBFQcOs0=aFgkShV=kuwkxHAEtWQJYEU7N9QcORxESMxEUhzWKw/WxF6EluTixHAJSsQiq1dkxHAWSWPXSN1IBFQcO=mJaFgkavzWKwqExF0WOj8kxHAWSWPXSN1IBFQcOueWaFgka1nRN9QcOpYJbwxEqJYIj9QcOpbWtib=NhzWKw/WxF6EluTixHA=SNviqU57N9QcORPExJQWNhzWKw/WxF6EluTixHAJlM6iqU5Ia/zWKwxEb1A=lN8kxHAWSWPXSN1IBFQcO51EaFgkavzWKwDJxHmJ0MgLj9QcOsq=Sw6JNhzWKw/WxF6EluTixHAWb1DiqU57N9QcORPExJQWNhzWKw/WxF6EluTixHAJ0sAiqU5XPDVRNh5ISh2zkeq=kpeFYAwkxHAEtEY=SJ0le9QcOuD=lM0Jqw3WKwqWlW3INDnzlNVF0Nn=3NCJPpg80AwkxHAWxuQXtEvIBUn5YjqRj9QcOibWb1PJbezWKwDEtNUEYWnolJTRN9QcOuPJlJD=UV380V3kaUq=kpeFYA3ixhq=kpeFYAwkxHAW0uq=bF0le9QcOibWb1PJmw3WKwDWmFgkawgXPe2zl/U5BHzWKw/JSEvXtM2kxHAWx1QExw0le9QcOJq=bU1Waw3WKwAEOM3IahzWKw0WYJ6=OsTixHAJYjmiqU5Ij9QcO1xESu0XjhzWKw0WYJ6=OsTixHAEOHUiqU5IShzWKw/JSEvXtN8kxHAEbiYXlu/IBFQcOueXaFgkSD3ixhV=kuwkxHAEtRAEYj17N9QcOW6WOFAEUhzWKw0WYJ6=OsTixHAXOueiq1dkxHAEbiYXlu/IBFQctivJmFgkavzWKw6WxMDEbv8kxHAEbiYXlu/IBFQcOuDEBFgka1n=3NCJPpg80AwkxHA=SuDE0EvIj9QcOu0XSvY=mUn5YjqRj9QcOuxElJxJSezWKw0WYJ6=OsVkxHAJSjYJljU7kh2Xe9Qcts/=Yjv=NhzWKwDWxNYW0sTixHAJbpUiqU57N9QcOpb=YM0EUhzWKwDWxNYW0sTixHAEtuDiqU5XP=vFmHzWKw/Eb1eJxs2kxHAJSjYJljUX0UYIj9QcOpb=YM0EUhzWKwDWxNYW0sTixHAExM0iqU5Ij9QcOpb=YM0EUhzWKwDWxNYW0sTixHAXOR3INDVkxHAEtEY=SJ0le9QcOuxElJxJaw3WKvUWtJ3INDgIkhg=mvzWKwDJ0=UEb=8kxHAEOWe=bEvIBFQctpmWmFgkavzWKwDEb1A=YJViqFgIkhg=mvzWKwDJ0=UEb=8kxHAEOWe=bEvIBFQcOFeEmFgkavzWKwDJ0=UEb=8kxHAEOWe=bEvIBFQcOM0EaFgka/zWKwDJ0=UEb=8kxHAEOWe=bEvIBFQcO1AiqU5IaUq=kpeFYAwkxHAEtRAEYj1le9QcOuxElJxJaw3WKwDES13IND2iqFVRaj8kShU8KEUc0=e8YEDol2CRj9QcOuqEOjmWmwgcP=vFmHzWKwD=YRQJSJ2kxHAEOWe=bEvLj9QcOMxXOsPWbenzShzWKweWxw/Exi8kxHAEt=mWts0IBFQcOF6JaFgkSeY5l6b5tU48mvzWKw/Jxu/J0sVkxHAWbF0WOJAIkh0JkRwkxHAWl=YXOH17N9QcOpYJbHvEbhq=kpeFYAwkxHAEtEY=SJ0le9QcOjY=bwQ=Bw3WKvvExW3INDTkxHAWlWDWlEvLj9QcORPEbG0XB1nza/zWKweWxw/Exi8kxHAEt=mWts0IBFQcOFAJmFgkSezWKwDJ0=UEb=8kxHAEt=mWts0IBFQcOMP=aFgka/zWKweWxw/Exi8kxHAEt=mWts0IBFQctim=mFgkSezWKwDJ0=UEb=8kxHAEt=mWts0IBFQctuA=aFgka/zWKweWxw/Exi8kxHAEt=mWts0IBFQctpvWqFgkSezWKwDJ0=UEb=8kxHAEt=mWts0IBFQcOwDJaFgkSh0JkRwkxHAElsPWOu07N9QcOMxXOsPWbhzWKwxElJPXSi8kxHAEt=mWts0IBFQctWAJaFgIq5YieD2RNh5X0/U5BHzWKw/=lWAWtu2kxHAWx5b=SvYle9QcOpYJbHvEmw3WKvvWSG3IahzWKwD=YRQJSJTixHAEYiviqU5Ij9QcOpb=YM0EUhzWKwD=YRQJSJTixHAWbEUiqU5IShzWKw/=lWAWtp8i0U1ieD2kxHAWlRP=tuDLj9QcOjUJxwQ=jhzWKwD=YRQJSJTixHA=SNviqU57N9QcOpb=YM0EUhzWKwD=YRQJSJTixHAWbvmiqU5Lj9QcOWQJYWeEehzWKwD=YRQJSJTixHAXOueiq1dkxHAEt=mWts0IBFQctivJmFgkavzWKwDJ0=UEb=8kxHAEt=mWts0IBFQcOMP=aFgkaU8kxHAEt=mWts0IBFQcOwAiqU5Ij9QcOjUJxwQ=B1n8tNDRj9QcOjb=tM0=OezWKvm=OJ/JY=8kxHAEt=mWts0IBFQcts/WBFgIe9QcOpYJbHvEmw3WKw0JYs3INDTkxHAEtEY=SJ0le9QcOpYJbHvEmw3WKwqW0M3INDgXe9QcOjb=tM0=jhzWKwD=YRQJSJTixHA=SNviqU57N9QcOpb=YM0EUhzWKwD=YRQJSJTixHAW0iviqU5Lj9QcON1XSMDWUhzWKwD=YRQJSJTixHAXOueiq1dkxHAEt=mWts0IBFQctivJmFgkavzWKwDJ0=UEb=8kxHAEt=mWts0IBFQctuA=aFgkaU8kxHAEt=mWts0IBFQcOwAiqU5Ij9QcOjb=tM0=B1n8tNDRj9QcOM0=OvvEbezWKwDJxseWxE8kxHAEt=mWts0IBFQcts/WBFgIe9QcOpYJbHvEmw3WKw0JYs3INDTkxHAEtEY=SJ0le9QcOpYJbHvEmw3WKwqW0M3INDgXe9QcOM0=OvvEUhzWKwD=YRQJSJTixHA=SNviqU57N9QcOpb=YM0EUhzWKwD=YRQJSJTixHAEx1QiqU5Lj9QcOR/=bGDEUhzWKwD=YRQJSJTixHAXOueiq1dkxHAEt=mWts0IBFQctivJmFgkavzWKwDJ0=UEb=8kxHAEt=mWts0IBFQcOwDJaFgkaU8kxHAEt=mWts0IBFQcOwAiqU5Ij9QcOM0=OvvEm1VkxHAWlJqWts/le9QcOpYJbHvEmw3WKwAEOM3IahzWKwD=YRQJSJTixHAJYjmiqU5Ij9QcOpb=YM0EUhzWKwD=YRQJSJTixHAES5UiqU5INhzWKwD=YRQJSJTixHAWlJ6iqU5le9QcOpYJbHvEmw3WKw/=lW3IND2kxHAEtEY=SJ0le9QcOpYJbHvEmw3WKw6XOM3INDVkxHAES5vWlj1le9QcOpYJbHvEmw3WKwAEOM3IahzWKwD=YRQJSJTixHAJYjmiqU5Ij9QcOpb=YM0EUhzWKwD=YRQJSJTixHA=OvUiqU5INhzWKwD=YRQJSJTixHAWlJ6iqU5le9QcOpYJbHvEmw3WKw/=lW3IND2kxHAEtEY=SJ0le9QcOpYJbHvEmw3WKw6XOM3INDVkxHAEtRqXOj1le9QcOpYJbHvEmw3WKwAEOM3IahzWKwD=YRQJSJTixHAJYjmiqU5Ij9QcOpb=YM0EUhzWKwD=YRQJSJTixHAXOpviqU5INhzWKwD=YRQJSJTixHAWlJ6iqU5le9QcOpYJbHvEmw3WKw/=lW3IND2kxHAEtEY=SJ0le9QcOpYJbHvEmw3WKw6XOM3INDVkxHAEtEY=SJ0le9QcOpYJbHvEmw3WKwDWBFgkavzWKw/EtWqJYWgLj9QcOpb=YM0EUhzWKwD=YRQJSJTixHAXSF/iqU5Ij9QcOE1WtRqWm/zWKwDJxJ0WYsVkxHAWSJ/XlNUIa/zWKweXlJxJxH8kxHAEt=mWts0IBFQcOE1=aFgIe9QcOpYJbHvEmw3WKvv=mFgkavzWKwDJ0=UEb=8kxHAEt=mWts0IBFQcOs6WaFgka/Y5l6b5tU48mwgcP=vFmHzWKweJ0pYWbG2kxHAEt=mWts0Xe9QcONvExGDEUhzWKweJ0pYWbGTixHAExUviqU5Ij9QcOsqEOiY=a/8kxHAElsPWOu0le9QcONb=tJqWBw3WKwPXtR3INDVkxHAElsPWOu0le9QcONb=tJqWBw3WKvmJYJ3INDVkxHAElsPWOu0le9QcONb=tJqWBw3WKv1JSW3INe5ISh2LBj8ka1nzke2J02CFPuwkxHAWb1/ElW07a2cIOH8WaD6kkQ/lxGhWUDgkB9TlxGhXNenW3DgiB9VkxHA=tMeWxiv7N9QcOu0XSvY=UhzWKwDWxNYW0sTixHAWYjmiqU5Ij9QcOR6WSNbEm1nolJTRN9QctpUESWqJaUnolJTkxHAEtEY=SJ0le9QcOuxElJxJaw3WKvUExR3INDTkxHAEtEY=SJ0le9QcOuxElJxJaw3WKwxEtR3INDVkxHAEtEY=SJ0le9QcOuxElJxJaw3WKwxEtR3INDgIkiU5KNq8mHzWKwDJbw0Jlp8kxHAEOWe=bEvIBFQcOueXaFgkSezWKwDJ0=UEb=8kxHAEOWe=bEvIBFQcOp1EBFgkaQvleDn=l/x=khY5l6b5tU48mHzWKwAEbWA=b1TIkh0JkRwkxHAESHvWbs07N9QcOuxElJxJShDotUxle9QcOMQJSR/Emw3WKwDES13IND2kxHAEtEY=SJ0le9QcOMQJSR/Emw3WKvvWxw3INDTkxHAEtEY=SJ0le9QcOMQJSR/Emw3WKwxEOM3INDTixG3LKpTokE8kxHAESHvWbs0IBFQcOueXaFgka1VkxHAEtEY=SJ0le9QcOMQJSR/Emw3WKwPiqU5ISh2zkeb806x5BHzWKwqWOUYWOu2kxHAEtEY=SJ0le9QcOuxElJxJaw3WKw6Exs3INDTFtjqF0Ni83uVkxHA=tMeWxivlxHAWNDVWKvvIa/zWKwDJx5mJbJ2kxHAEtEY=SJ0le9QcOuxElJxJaw3WKvvJ0s3INDTFtjqF0Ni83uVkxHA=tMeWxivlxHAWUDVWKvvIa/zWKwxXSsPJxM28YNPRspv5tMTIa/zWKwxWxMeEOF2kxHAEtEY=SJ0le9QcOuxElJxJaw3WKweWlJ3INDTkxHAWx1/E0Wele9QcOuxElJxJaw3WKwPWlJ3IaV3Fm55IB1VWKw0EB1VkxHAXOEU=bu67N9QcOpb=YM0EUhzWKwDWxNYW0sTixHA=YM/iqU5Ij9QcOW6WS5bENhzWKwDWxNYW0sTixHA=lWxiqU5IB1VWKw/IShg=mvzWKwDJ0=UEb=8kxHAEOWe=bEvIBFQcOvUEqFgkavzWKwqWOUYWOuVWKw/Ik/9kxHAEtEY=SJ0le9QcOuxElJxJaw3WKvvJxM3INDTkxHAWbG6=bGDLOHAJq1gc0UYIj9QcOpb=YM0EUhzWKwDWxNYW0sTixHAEtsDiqU5Ij9QcOpb=YM0EUhzWKwDWxNYW0sTixHAElMxiqU5Lj9QcOpb=YM0EUhzWKwDWxNYW0sTixHAXtMQiqU5IaUn=3NCJPpg80AwkxHAElsDW0NvIBUn5YjqRj9QcOM/EtuqWbezWKwDWxNYW0sn5tvgFehzWKweWSp1WbRTixHAEOM6iqU57N9QcOpb=YM0EUhzWKweWSp1WbRTixHAWxueiqU5Ij9QcOpb=YM0EUhzWKweWSp1WbRTixHAWxueiqU5Ij9QcOWAWxFQJehzWKweWSp1WbRTixHAJbNmiqU5IOHAWBQQcORgLj9QcOpb=YM0EUhzWKweWSp1WbRTixHAEqFgka1VkxHAWb1eXlJxle9QcOM/EtuqWmw3WKvmElR3INDTWKwqIa1nzkeU8KEURKiU5KNq8mHzWKwDJbw0Jlp8kxHAEOWe=bEvIBFQcOueXaFgkSezWKwDJ0=UEb=8kxHAEOWe=bEvIBFQcOp1EBFgkaQvleDnzlUYIj9QcOpb=YM0EUhzWKwDWxNYW0sTixHAEt=1iqU5Ij9QcOpbE0imEm/zWKwxWxMeEOFgzK/zWKwDJ0=UEb=8kxHAEOWe=bEvIBFQcOpvEBFgkavzWKwDJx5mJbJVkxHAWxWeESuPIaJYkxHAEtEY=SJ0le9QcOuxElJxJaw3WKwAW0R3INDTkxHAWbG6=bGDLj9QcOwx=lJDXa1gc0UYIj9QcOpb=YM0EUhzWKwDWxNYW0sTixHAExRQiqU5Ij9QcOpb=YM0EUhzWKwDWxNYW0sTixHAJlMQiqU5Lj9QcOpb=YM0EUhzWKwDWxNYW0sTixHAJlMQiqU5IaUq=kpeFYAwkxHAEtRAEYj1le9QcOuxElJxJaw3WKwDES13IND2iqFVRaj8kShU8KEUc0=e8YEDol2CRj9QcONUEtEm=BwgcP=vFmHzWKwxWYuPJ0u2kxHAEOWe=bEvXPiU5KNq8mHzWKwxESRP=b58kxHAWxi1E0E1IBFQcOueXaFgkSD3iqQvRNh5XPe2zkiU5KNq8mHzWKwDJbw0Jlp8kxHAEOWe=bEvIBFQcOueXaFgkSezWKwDJ0=UEb=8kxHAEOWe=bEvIBFQcORqXaFgkaQvleDnzlNVF0Nn=3NCJPpg80AwkxHAESMQExFqIBUn5YjqRj9QcOpUJYseWSezWKwDWxNYW0snFYND5kiCRj9QcOuQWxMQEehzWKwD=livESsTixHAEOM6iqU57N9QcOs0XSNbWNhzWKwD=livESsTixHAJbpUiqU5LBj8kSh2zkeY8PRT5YjqRj9QcOR0ES10WaHg8UhzWKw6WxMDEbv8kxHAEbiYXlu/IBFQcOF6XBFgka/zWKw6WxMDEbv8kxHAEbiYXlu/IBFQctiUiqU5Lj9QcO1xESu0XjhzWKw0WYJ6=OsTixHAJxs3INDVkxHAXSWeEOJAle9QcOJq=bU1Waw3WKw0=Ow3INe5Ikhg=mvzWKw6WxMDEbv8kxHAEbiYXlu/IBFQcOuxWaFgkavzWKw6WxMDEbv8kxHAEbiYXlu/IBFQcO5UEBFgka/zWKw6WxMDEbv8kxHAEbiYXlu/IBFQcO5UEBFgka1gkxHAWlsxJSvUle9QcOJq=bU1Waw3WKwx=tM3IahzWKw0WYJ6=OsTixHAJlJ3INDTkxHAXSWeEOJAle9QcOJq=bU1Waw3WKwPXSw3INDVkxHAJ0RqWbjYLBj8ka1n=l/x=khY5l6b5tU48mHzWKwDJbEmWtWTIkh0JkRwkxHAESsPWYN17N9QcOJq=bU1WShDotUxle9QcOM/ExiU=Bw3WKwDES13IND2kxHAXSWeEOJAle9QcOM/ExiU=Bw3WKw0=bF3INDTixG3LKpTokE8kxHAESsPWYN1IBFQcOueXaFgka1nzke2=3NCJPpg80AwkxHAES1eEbMQIj9QcONmJbjUXaUn5YjqRj9QcOuAEO1Q=bezWKw0WYJ6=OsVkxHAWlWe=bNm7kh2Xe9QcOjbElJeJUhzWKwDXOu6WtJTixHAWYMQiqU57l=e8YEDol2CIj9QcOEvEtpUJm/zWKweJls/EbGgcP=vFmHzWKweXOFDWSR2kxHAEOwDXSHYXPiU5KNq8mHzWKwDJ0=UEb=8kxHAESwPEOsqIBFQctR/EmFgkavzWKwxJSp1=lRVkxHAEljvWSJQISh2Lj9QcOjbElJeJUhzWKwDXOu6WtJTixHAJbw0iqU57N9QcOpb=YM0EUhzWKwDXOu6WtJTixHAWSFqiqU5Lj9QcOjbElJeJUhzWKwDXOu6WtJTixHAEtWqiqU57N9QcOpb=YM0EUhzWKwDXOu6WtJTixHAWlW6iqU5Lj9QcOjbElJeJUhzWKwDXOu6WtJTixHAWYJeiqU57N9QcOpb=YM0EUhzWKwDXOu6WtJTixHAW0jUiqU5Lj9QcOjbElJeJUhzWKwDXOu6WtJTixHAE0R6iqU57N9QcOpb=YM0EUhzWKwDXOu6WtJTixHAWbEUiqU5Lj9QcOjbElJeJUhzWKwDXOu6WtJTixHAWxF/iqU57N9QcOpb=YM0EUhzWKwDXOu6WtJTixHAW0sQiqU5Lj9QcOjbElJeJUhzWKwDXOu6WtJTixHAWS1xiqU57N9QcOpb=YM0EUhzWKwDXOu6WtJTixHAEYJAiqU5Lj9QcOjbElJeJUhzWKwDXOu6WtJTixHAESRxiqU57N9QcOpb=YM0EUhzWKwDXOu6WtJTixHAJbWDiqU5Lj9QcOjbElJeJUhzWKwDXOu6WtJTixHAEO=biqU57N9QcOpb=YM0EUhzWKwDXOu6WtJTixHAElp1iqU5Lj9QcOjbElJeJUhzWKwDXOu6WtJTixHA=YRxiqU57N9QcOpb=YM0EUhzWKwDXOu6WtJTixHA=YM3INDVkxHAWlWe=bNmle9QcOuAEO1Q=mw3WKwAESR3IND2kxHAEtEY=SJ0le9QcOuAEO1Q=mw3WKw0Wxs3INDVkxHAWlWe=bNmle9QcOuAEO1Q=mw3WKweESu3IND2kxHAEtEY=SJ0le9QcOuAEO1Q=mw3WKvmExs3INDVkxHAWlWe=bNmle9QcOuAEO1Q=mw3WKwPW0J3IND2kxHAEtEY=SJ0le9QcOuAEO1Q=mw3WKwqEBFgka/zWKw/JxNYEli8kxHAEOwDXSHYIBFQctRqJaFgkSezWKwDJ0=UEb=8kxHAEOwDXSHYIBFQcO1AEaFgka/zWKw/JxNYEli8kxHAEOwDXSHYIBFQctR/=BFgkSeY5l6b5tU48mvzWKwx=O5UWtugcP=vFmHzWKwqJlsDXSR2kxHAEOwDXSHYXPiU5KNq8mHzWKwDJ0=UEb=8kxHAWYjvEO1qIBFQcOuQiqU5Ij9QcOE1E0MQ=B1nza/zWKw/JxNYEli8kxHAEOwDXSHYIBFQctR/WqFgkSeY5l6b5tU48mvzWKvvXlsDESGVkxHAXSiYWSivLj9QcOimEbpv=BUn5YjqRj9QcORQXOibWOezWKwDXOu6WtJnFYND5kiCRj9QcOpb=YM0EUhzWKwqWOwqJxGTixHA=OvbiqU5Ij9Qcts6JSueWB/zWKw6WYJ/WYsVkxHAWYR0Etj1ISh2Lj9QcOjbElJeJUhzWKwDXOu6WtJTixHAES1DiqU57N9QcOpb=YM0EUhzWKwDXOu6WtJTixHAWS1/iqU5XP=vFmHzWKwx=SHUE0R2kxHAWlWe=bNmX0UYIj9QcOpb=YM0EUhzWKwDXOu6WtJTixHAExRQiqU5Ij9QcOpb=YM0EUhzWKwDXOu6WtJTixHAWSUmiqU5Lj9QcOpb=YM0EUhzWKwDXOu6WtJTixHAWSUmiqU5IaUq=kpeFYAwkxHAElimWlM67N9QcONmJbjUXNhzWKwDXOu6WtJTixHA=SimiqU5IB2FFq23LBF3Ia/zWKweJYR/=S1n=l/x=khY5l6b5tU48mHzWKwqWl=YEYJTIkh0JkRwkxHAEOJ0WOJA7N9QcOuAEO1Q=bhzWKwDEYuPWb58kxHAEOJ0WOJAIBFQctWAJaFgIq5YieD2RNh5X0/U5BHzWKvvEOsDExw2kxHAWxRPJ0sAle9QcOu0EbG0XBw3WKvvWSG3IahzWKwDEbJQEbwTixHAEYiviqU5Ij9QcOEUWtMPJUhzWKwDEbJQEbwTixHAE0R6iqU5IShzWKvvEOsDExv8i0U1ieD2kxHAJYJxExjbLj9QctsDWSuPXjhzWKwDEbJQEbwTixHAWlJ6iqU5le9QcOu0EbG0XBw3WKw/=lW3IND2kxHAW0MQ=S5mle9QcOu0EbG0XBw3WKwxExs3INDVkxHAJSu/EOFAle9QcOu0EbG0XBw3WKweEts3IND2kxHAW0MQ=S5mle9QcOu0EbG0XBw3WKw/XSW3INDVkxHAJSu/EOFAle9QcOu0EbG0XBw3WKvUEls3IND2kxHAW0MQ=S5mle9QcOu0EbG0XBw3WKweWbW3INDVkxHAEtRQXSFDle9QcOu0EbG0XBw3WKwAEOM3IahzWKwDEbJQEbwTixHAJYjmiqU5Ij9QcOEUWtMPJUhzWKwDEbJQEbwTixHAEO=biqU5INhzWKwDEbJQEbwTixHAXOw3INDTkxHAJSu/EOFAIShV=kuwkxHAWlMe=YEY7N9QcOjmWORPJNhzWKwDEbJQEbwTixHAJSsQiq1dkxHAEOJ0WOJAIBFQcO=mJaFgkavzWKwx=SHUE0i8kxHAEOJ0WOJAIBFQcO5mXaFgka1nkxHAWlMe=YEYle9QcOu0EbG0XBw3WKvUEls3IND2kxHAW0MQ=S5mle9QcOu0EbG0XBw3WKvYJbW3INDVkxHAEOMDEtpYle9QcOu0EbG0XBw3WKwAEOM3IahzWKwDEbJQEbwTixHAJYjmiqU5Ij9QcOEUWtMPJUhzWKwDEbJQEbwTixHAXOMqiqU5INhzWKwDEbJQEbwTixHAXOw3INDTkxHAWlMe=YEYIShV=kuwkxHAWSJDWOwQ7N9QcOMe=SwxXNhzWKwDEbJQEbwTixHAJSsQiq1dkxHAEOJ0WOJAIBFQcO=mJaFgkavzWKwx=SHUE0i8kxHAEOJ0WOJAIBFQcO5mXaFgka1nkxHAWSJDWOwQle9QcOu0EbG0XBw3WKvUEls3IND2kxHAW0MQ=S5mle9QcOu0EbG0XBw3WKweESu3INDVkxHAExJPE0Evle9QcOu0EbG0XBw3WKwAEOM3IahzWKwDEbJQEbwTixHAJYjmiqU5Ij9QcOEUWtMPJUhzWKwDEbJQEbwTixHAExEYiqU5INhzWKwDEbJQEbwTixHAXOw3INDTkxHAWSJDWOwQIa/zWKwDEOJx=ti8kxHAEOJ0WOJAIBFQcOwDEaFgIe9QcOu0EbG0XBw3WKvmJlR3INDTkxHAW0MQ=S5mle9QcOu0EbG0XBw3WKwDEYW3INDgle9QcOu0EbG0XBw3WKw/=b13INe8kxHAEOJ0WOJAIBFQcOjUJqFgkSezWKwx=SHUE0i8kxHAEOJ0WOJAIBFQctRqJaFgka/zWKweXtjmWSH8kxHAEOJ0WOJAIBFQcOwDEaFgIe9QcOu0EbG0XBw3WKvmJlR3INDTkxHAW0MQ=S5mle9QcOu0EbG0XBw3WKwAESR3INDgle9QcOu0EbG0XBw3WKw/=b13INe8kxHAEOJ0WOJAIBFQcOjUJqFgkSezWKwx=SHUE0i8kxHAEOJ0WOJAIBFQctRqJaFgka/zWKweWlMPESj8kxHAEOJ0WOJAIBFQcOwDEaFgIe9QcOu0EbG0XBw3WKvmJlR3INDTkxHAW0MQ=S5mle9QcOu0EbG0XBw3WKwPW0J3INDgle9QcOu0EbG0XBw3WKw/=b13INe8kxHAEOJ0WOJAIBFQcOjUJqFgkSezWKwx=SHUE0i8kxHAEOJ0WOJAIBFQctRqJaFgka/zWKwx=SHUE0i8kxHAEOJ0WOJAIBFQctR/=BFgkavzWKweXOu6WOGgLj9QcOEUWtMPJUhzWKwDEbJQEbwTixHAJbsxiqU5Ij9QcOR/W0sq=m/zWKwx=YWQXSFVkxHAElueWbJQIa/zWKwqWYu/Wbj8kxHAEOJ0WOJAIBFQcOE1=aFgIe9QcOu0EbG0XBw3WKvv=mFgkavzWKwx=SHUE0i8kxHAEOJ0WOJAIBFQcOM6EBFgka/Y5l6b5tU48mwgcP=vFmHzWKwq=tJPJSG2kxHAEOJ0WOJAXe9QcOEUWtMPJUhzWKwq=tJPJSGTixHAWYMQiqU5Ij9QcOFAJYuQJm/8kxHAW0MQ=S5mle9QcOi1=b5vWBw3WKvmXOJ3INDVkxHAW0MQ=S5mle9QcOi1=b5vWBw3WKwDJxR3INDVkxHAW0MQ=S5mle9QcOi1=b5vWBw3WKwq=bM3INe5ISh2LBj8ka1nzke2=3NCJPpg80AwkxHAJ0RqWbjYIj9QcOs6=ljbEaUn5YjqRj9QcORDW0NU=bezWKw0WYJ6=OsVkxHAWxEvW0p17kh2Xe9QcOWxJSE1=jhzWKwqEOEU=lJTixHAEl=biqU57N9QcO1xESu0XjhzWKwqEOEU=lJTixHAEtJxiqU5Lj9QcOWxJSE1=jhzWKwqEOEU=lJTixHAWlj1iqU57l=e8YEDol2CIj9QcOjvElpUJq/zWKwDJYpbE0JgcP=vFmHzWKweExGPWYM2kxHAWbux=lNYXPiU5KNq8mHzWKw6WxMDEbv8kxHAESFQExiUIBFQct=bJaFgkavzWKw/JSN1=lWVkxHAEti1Jx5YISh2Lj9QcOWxJSE1=jhzWKwqEOEU=lJTixHAJluPiqU57N9QcO1xESu0XjhzWKwqEOEU=lJTixHAJxGQiqU5Lj9QcOWxJSE1=jhzWKwqEOEU=lJTixHAWlJqiqU57N9QcO1xESu0XjhzWKwqEOEU=lJTixHAJbJeiqU5Lj9QcOWxJSE1=jhzWKwqEOEU=lJTixHAExF3IND2kxHAXSWeEOJAle9QcORDW0NU=mw3WKvUXOG3INDVkxHAWxEvW0p1le9QcORDW0NU=mw3WKwq=SF3IND2kxHAXSWeEOJAle9QcORDW0NU=mw3WKwDXlJ3INDVkxHAWxEvW0p1le9QcORDW0NU=mw3WKvYJlJ3IND2kxHAXSWeEOJAle9QcORDW0NU=mw3WKwPJxs3INDVkxHAWxEvW0p1le9QcORDW0NU=mw3WKvU=lJ3IND2kxHAXSWeEOJAle9QcORDW0NU=mw3WKwDWtM3INDVkxHAWxEvW0p1le9QcORDW0NU=mw3WKv1ESw3IND2kxHAXSWeEOJAle9QcORDW0NU=mw3WKvUWbR3INDVkxHAWxEvW0p1le9QcORDW0NU=mw3WKw6WSw3IND2kxHAXSWeEOJAle9QcORDW0NU=mw3WKwPEtW3INDVkxHAWxEvW0p1le9QcORDW0NU=mw3WKwxEx13IND2kxHAXSWeEOJAle9QcORDW0NU=mw3WKw/WbM3INDn5YjqRj9QcOuP=lM6XSezWKwxW0sx=tunolJTkxHAXSWeEOJAle9QcORDW0NU=mw3WKwx=bW3INDTkxHAXSWeEOJAle9QcORDW0NU=mw3WKvmXOW3INDVkxHAXSWeEOJAle9QcORDW0NU=mw3WKvmXOW3INDgIkhY5l6b5tU48mHzWKwqEb=1JxuTIkh0JkRwkxHAESJqJbWP7N9QcORDW0NU=bhzWKw/Wls/J0u28YNPRj9QcOux=bEYJmvzWKwDE0NUXSU8kxHAESJqJbWPIBFQcONYJqFgka1nzkeU8KEUcP=vFmHzWKvmEtu/=SR25tvgFehzWKwqEOEU=lJTixHAEOM6iqU5le9QcORDW0NU=mw3WKvUWYR3INDTLehcktp5L0FViqFgX0UYIj9QcO1xESu0XjhzWKwqEOEU=lJTixHA=SJ0iqU5Ij9QcOs6=ljbENhzWKwqEOEU=lJTixHAW0NviqU5Lj9QcO1xESu0XjhzWKwqEOEU=lJTixHAJlRxiqU5Ik/9kxHAXSWeEOJAle9QcORDW0NU=mw3WKvYXOG3INDTkxHAWSUUJlWele9QcORDW0NU=mw3WKwx=ls3INDVkxHAXSWeEOJAle9QcORDW0NU=mw3WKw6EbJ3INDgIkhg=mvzWKw6WxMDEbv8kxHAWbux=lNYIBFQctEb=aFgkavzWKw6WxMDEbv8kxHAWbux=lNYIBFQctiYEaFgka/zWKw6WxMDEbv8kxHAWbux=lNYIBFQctjYEqFgka1gc0=e8YEDol2CRj9QcOWe=OHbXawgcP=vFmHzWKwqWxFqE0J2kxHAWbux=lNYLj9QcOuPWluPWbeDotUxle9QcORxExRP=mw3WKwDES13INe8kxHAWbWPWb5YIBFQctMqJmFgkaw4ksu4=qQ3iq1nkxHAEtEY=SJ0le9QcORxExRP=mw3WKwqJ0M3INDTWKwxLj9QcOuPWluPWUhzWKwqWxFqE0JTixHA=bFQiqU5IaJYkxHAEtEY=SJ0le9QcORxExRP=mw3WKvmWSJ3INDTkxHAEtWA=Oj1Lj9QcOuPWluPWm1nzkeU8KEUc0UYIj9QcO1xESu0XjhzWKwqEOEU=lJTixHA=bu6iqU5Ij9QctRD=OjUWUhzWKwqEOEU=lJTixHA=bFQiqU5LOHAWm1gc0UYIj9QcO1xESu0XjhzWKwqEOEU=lJTixHAJ0EUiqU5Ij9QcO1xESu0XjhzWKwqEOEU=lJTixHAXOMPiqU5Lj9QcO1xESu0XjhzWKwqEOEU=lJTixHAXOMPiqU5IaUDotUxle9QcORDW0NU=mw3WKwDES13IND2kxHAJbp1WlMqX0NVF0Nn=3NCJPpg80AwkxHAW0i1WtWqIBUnkxHAWbsqEOjvIxezWKwqWtuPJbE8kxHAWYJDJbUUkSh2zkeU8KEUc0UYIj9QcO1xESu0XjhzWKwqEOEU=lJTixHAJ0EUiqU5Ij9QcO1xESu0XjhzWKwqEOEU=lJTixHAEY=viqU5Lj9QcO1xESu0XjhzWKwqEOEU=lJTixHAWYE1iqU5IaUn=3NCJPpg80AwkxHAEb=bWxJqIBUn5YjqRj9QcOjbWYpUXOezWKwqEOEU=lJnkxHAEOJQ=lR6IxezWKwqJbjbJYE8kxHAW0JAJbUmle9QcOjbWYpUXBw3WKwA=bs3INDTkxHAEtEY=SJ0le9QcOjbWYpUXBw3WKvmXSu3INDTkxHAW0WeExWxle9QcOjbWYpUXBw3WKwPJbM3INDTIa/zWKwqWbGAEYj8kxHAWlWq=tMAIBFQctJPWBFgka1gkSh2zlNVF0Mw5tvgFehzWKwqEOEU=lJTixHAEOM6iqU57N9QcO1xESu0XjhzWKwqEOEU=lJTixHAEYJPiqU5Ij9QcO1xESu0XjhzWKwqEOEU=lJTixHAEYJPiqU5Ij9QctRD=OjUWUhzWKwqEOEU=lJTixHAJbNmiqU5IOHAWBQQcORgLj9QcO1xESu0XjhzWKwqEOEU=lJTixHA=OJDiqU5Ia/zWKvmEtu/=Si8kxHAWbux=lNYIBFQctReJmFgkawQcORgISh2zkeU8KEUc0UYIj9QcO1xESu0XjhzWKwqEOEU=lJTixHAW0JxiqU5Ij9QcO1xESu0XjhzWKwqEOEU=lJTixHAWbJPiqU5Lj9QcO1xESu0XjhzWKwqEOEU=lJTixHAWSNbiqU5IaUnolJTkxHAXSWeEOJAle9QcORDW0NU=mw3WKwDE0J3INDTkxHAJbp1WlMqle9QcORDW0NU=mw3WKvYExG3INDVWKwqIaUnolJTkxHAXSWeEOJAle9QcORDW0NU=mw3WKwDXOG3INDTkxHAXSWeEOJAle9QcORDW0NU=mw3WKwPEbu3INDVkxHAXSWeEOJAle9QcORDW0NU=mw3WKwPEbu3INDgIkhY5l6b5tU48mHzWKwxWbM/EORTIkh0JkRwkxHAWbMxE0We7N9QcORDW0NU=bhzWKwDElE1EOE8kxHAWbMxE0WeIBFQcOwDEaFgIe9QcOReWx5bEaw3WKvmJlR3INDTkxHAEO5U=S16le9QcOReWx5bEaw3WKvv=OF3INDgle9QcOReWx5bEaw3WKwAXBFgkavzWKwxEbv1EOFgLj9QcOMeW0sqEjhzWKwqESWPJxMTixHAXOueiq1dkxHAWbMxE0WeIBFQctivJmFgkavzWKwDE0NUXSU8kxHAWbMxE0WeIBFQctj1EqFgkaU8kxHAWbMxE0WeIBFQcOjYXaFgkNhzWKwqESWPJxMTixHAWlNbiqU57N9QcOuP=lM6XNhzWKwqESWPJxMTixHAWlJqiqU5Lj9QcOR/W0WxXjhzWKwqESWPJxMTixHAW0pUiq1dkxHAWbMxE0WeIBFQctjYiqU5Ij9QcOuP=lM6XNhzWKwqESWPJxMTixHAExF3INDV=3NCJPpg80ATIkh0JkRwkxHAJbiYJbF07N9QcOReWx5bEShzWKwDE0NUXSU8kxHAJbiYJbF0IBFQcOjv=BFgkavzWKwqXluAJxsVle9QcOuP=lM6XNhzWKvmWY=mExJTixHAJluPiqU5ka1nzaQvleDgXPe2=l/x=aHDotUxle9QcORDW0NU=mw3WKwDES13IND2kxHAJbp1WlMqXPeU8KEUc0UYIj9QcO1xESu0XjhzWKwqEOEU=lJTixHA=bu6iqU5Ij9QctRD=OjUWUhzWKwqEOEU=lJTixHA=bFQiqU5LOHAEB1gc0UYIj9QcO1xESu0XjhzWKwqEOEU=lJTixHA=Ow0iqU5Ij9QcO1xESu0XjhzWKwqEOEU=lJTixHAXl=UiqU5Lj9QcO1xESu0XjhzWKwqEOEU=lJTixHAWSGQEaFgka1gc0=e8YEDol2CRj9QcONvWOj1=awgcP=vFmHzWKwqWxEv=bM2kxHAWbux=lNYLj9QcOF/WtWDEbezWKwDE0NUXSU8kxHAWbWxJlJeIBFQcOiUEqFgkNhzWKwqWxEv=bMTixHAXOWeiqU5IB59iq1VkxHAWSwQEluQ7SHAWOhPotUV=awvRNh5Ikhx50UDJ0wTkxHAExsQJxu0le9QcOsAWON1WBVdkaUnJ0jx=aFQixgzWKwDJbF/Jxp8kxHAWbWxJlJeIBFQcOwDEaFgIe9QcORxW0jYEaw3WKvmJlR3INDTkxHAWxHYJb1PINhzWKwqWxEv=bMTixHAWlJ6iqU5le9QcORxW0jYEaw3WKw/=lW3IND2kxHAEO5U=S16le9QcORxW0jYEaw3WKw/=bR3INDnJ02C5tUC5lMnJ0jx=aF/ixgzWKwqWtNvJYE8kxHAWbWxJlJeIBFQcOR6EBFgkSezWKwDE0NUXSU8kxHAWbWxJlJeIBFQct=v=mFgkShb806Dol6e=ShbJkEUixR3XU9QcOMD=lj1XNhzWKwqWxEv=bMTixHAEbJQiqU5It=e8YEDol2CIj9QcON1ES=m=BUn5YjqRj9QcOjYJYMDEbezWKwqWxEv=bMnkxHAElNvJY=vle9QcOjYJYMDEmw3WKwAEOM3IahzWKw/=YiUEOJTixHAJYjmiqU5Ij9QcON1ES=m=BU8kxHAWl=m=Su0IBFQcOjYXaFgkNhzWKw/=YiUEOJTixHAWlNbiqU57N9QcOjUEYMeJehzWKw/=YiUEOJTixHAXSvUiqU5XPDgX0E483pg83NUX0EvF0M3WqF+kxHAElNbXOJ6le9QcORxW0jYEaw3WKwAEOM3IahzWKwqWxEv=bMTixHAJYjmiqU5Ij9QcOuP=lM6XNhzWKwqWxEv=bMTixHA=lNYiqU5INhzWKwqWxEv=bMTixHAEtuqiqU5le9QcORxW0jYEaw3WKw/=b13INe8kxHAWbWxJlJeIBFQcOjUJqFgkSezWKwDE0NUXSU8kxHAWbWxJlJeIBFQcOjYWmFgkShb806Dol6e=ShbJkEUixu3XU9QcOp1WOUvJehzWKwqWxEv=bMTixHAXOueiq1dkxHAWbWxJlJeIBFQctivJmFgkavzWKwDE0NUXSU8kxHAWbWxJlJeIBFQctNU=mFgkaU8kxHAWbWxJlJeIBFQcOjYXaFgkNhzWKwqWxEv=bMTixHAWlNbiqU57N9QcOuP=lM6XNhzWKwqWxEv=bMTixHAWlJqiqU5X0E483pg83NUX0EvF0M3EaF+kxHAEtEmESF0le9QcORxW0jYEaw3WKwAEOM3IahzWKwqWxEv=bMTixHAJYjmiqU5Ij9QcOuP=lM6XNhzWKwqWxEv=bMTixHA=OMAiqU5INhzWKwqWxEv=bMTixHAEtuqiqU5le9QcORxW0jYEaw3WKw/=b13INe8kxHAWbWxJlJeIBFQcOjUJqFgkSezWKwDE0NUXSU8kxHAWbWxJlJeIBFQcOjYWmFgkShb806Dol6e=ShbJkEUixJ3XU9QcOWAXOJ/JNhzWKwqWxEv=bMTixHAXOueiq1dkxHAWbWxJlJeIBFQctivJmFgkavzWKwDE0NUXSU8kxHAWbWxJlJeIBFQctueXBFgkaU8kxHAWbWxJlJeIBFQcOjYXaFgkNhzWKwqWxEv=bMTixHAWlNbiqU57N9QcOuP=lM6XNhzWKwqWxEv=bMTixHAWlJqiqU5X0E483pg83NUX0EvF0M3EqF+kxHAWSR/E0ible9QcORxW0jYEaw3WKwA=ls3IaV3oq557asvleDnJ02C5tUC5lMnJ0jx=aFAixgzWKwq=ONY=S=8kxHAWbWxJlJeIBFQcOwDEaFgIe9QcORxW0jYEaw3WKvmJlR3INDTkxHAEO5U=S16le9QcORxW0jYEaw3WKw6WSw3INDgle9QcORxW0jYEaw3WKw/=b13INe8kxHAWbWxJlJeIBFQcOjUJqFgkSezWKwDE0NUXSU8kxHAWbWxJlJeIBFQcOjYWmFgkShb806Dol6e=ShbJkEUix13X3pTokE8kxHAWbWxJlJeIBFQcOw6EaFgIe9QcORxW0jYEaw3WKweXlM3INDTkxHAEO5U=S16le9QcORxW0jYEaw3WKwPEqFgka/zWKw/WlRD=YRVRNh5IShb806Dol6e=ShbJkEUixsQixgzWKwqJx=bWYN8kxHAWbWxJlJeIBFQcOwDEaFgIe9QcORxW0jYEaw3WKvmJlR3INDTkxHAEO5U=S16le9QcORxW0jYEaw3WKw6WSw3INDgle9QcORxW0jYEaw3WKwD=OR3INe8kxHAWbWxJlJeIBFQcOjYXaFgkNhzWKwqWxEv=bMTixHAWlNbiqU57N9QcOuP=lM6XNhzWKwqWxEv=bMTixHAWlJqiqU5X0E483pg83NUX0EvF0M3WSs3X3=vFmHzWKwxWSJ/XOJ2cPDnkxHAWxs0WSw0le9QcORxW0jYEaw3WKw6XtM3IND2kxHAEO5U=S16le9QcORxW0jYEaw3WKwxEx13INDn5YjqRj9QcOjUEYMeJxezWKwxWSJ/XOJnJ02C5tUC5lMnzliq=ljdXPe2zlNVF0Mw5tvgFehzWKwqEOEU=lJTixHAEOM6iqU57N9QcO1xESu0XjhzWKwqEOEU=lJTixHAEYJPiqU5Ij9QcO1xESu0XjhzWKwqEOEU=lJTixHAXOGQiqU5Ij9QctRD=OjUWUhzWKwqEOEU=lJTixHAJbNmiqU5IOHAWBQQcORgLj9QcO1xESu0XjhzWKwqEOEU=lJTixHA=OJDiqU5Ia/zWKvmEtu/=Si8kxHAWbux=lNYIBFQctReJmFgkawQcORgISh2=l/x=khg=mvzWKw6WxMDEbv8kxHAWbux=lNYIBFQctuxEmFgkavzWKw6WxMDEbv8kxHAWbux=lNYIBFQctWxWqFgka/zWKw6WxMDEbv8kxHAWbux=lNYIBFQctWxWqFgka1gc0=e8YEDol2CRj9QcOivXtpYEBwgcP=vFmHzWKwxExivEbW2kxHAWbux=lNYXe9QcOpb=YM0EUhzWKwxExivEbWTixHAJbs0iqU5Ij9QcOvbExR6Wm/zWKwDJ0=UEb=8kxHAWxFqJSJxIBFQct=mWaFgkavzWKwDXlWDJluV5tvgFehzWKwxExivEbWTixHAEOM6iqU5Ia1yIj9QcOMQEO=b=jhzWKwxExivEbWTixHAXS10iqU57aj8ka/zWKw/WYi1Ex58kxHAWxFqJSJxIBFQcOjYXaFgkNhzWKwxExivEbWTixHAXSvYiqU57N9QcOpb=YM0EUhzWKwxExivEbWTixHAWYu3INDgXmvzWKwqExp1E0i8kxHAWxFqJSJxIBFQcO16EmFgkSDvRNh5Lj9QcOs0ExWQ=UhzWKwxExivEbWTixHAWlJ6iqU5le9QcOWPWYs0Wqw3WKw6XtJ3IND2kxHAEtEY=SJ0le9QcOWPWYs0Wqw3WKvUWSJ3INDgXPe2=l/x=aHDotUxle9QcORDW0NU=mw3WKwDES13IND2kxHAXSWeEOJAle9QcORDW0NU=mw3WKwDEmFgkavzWKw6WxMDEbv8kxHAWbux=lNYIBFQcOu0iqU5Ij9QctRD=OjUWUhzWKwqEOEU=lJTixHAJbNmiqU5IOHAWBQQcORgLj9QcO1xESu0XjhzWKwqEOEU=lJTixHA=OJDiqU5Ia/zWKvmEtu/=Si8kxHAWbux=lNYIBFQctReJmFgkawQcORVWKwDIa1nzke2=l/x=khY5l6b5tU48mHzWKweElEUXtsTIkh0JkRwkxHAWb1qXOR/7N9QcORDW0NU=bhzWKvU=OuAExMYiU9QcOMDJ0RQ=jhzWKwqXSRAWbsTixHA=lR3INDTIShzWKwqXlMx=bv8kxHAWb1qXOR/IBFQcOjYXaFgkNhzWKwqXSRAWbsTixHAWlNbiqU57N9QcOpb=YM0EUhzWKwqXSRAWbsTixHAXSweiqU5Lj9QctjYJxUbJUhzWKwqXSRAWbsTixHAWlJ6iqU5le9QcOR6WbwqWaw3WKw/=lW3IND2kxHAEtEY=SJ0le9QcOR6WbwqWaw3WKvmXSR3INDn8tNDRj9QcOW/=OFQ=OezWKwqEOEbW0E8kxHAWb1qXOR/IBFQcts/WBFgIe9QcOR6WbwqWaw3WKw0JYs3INDTkxHAEtEY=SJ0le9QcOR6WbwqWaw3WKwqW0M3INDgXqjzWKvvXSR0JSuYimvzWKwxWluPWtp8kxHAWb1qXOR/IBFQctMeJaFgkSezWKwDJ0=UEb=8kxHAWb1qXOR/IBFQctJeJmFgka1VkxHA=bsD=Ys0le9QcOR6WbwqWaw3WKwP=OM3INDTkxHAWxj1ExH1Ia/zWKwqExWxW0j8kxHAWb1qXOR/IBFQcOR6EBFgkSezWKwDJ0=UEb=8kxHAWb1qXOR/IBFQctNUEBFgkSh2zke2zN9QcOjvW0sA=NhzWKw0WYJ6=OsTixHAJbJ3IND2=3NCJPpg80ATkxHAJb5bEbEbIkh0JkRwkxHAWb1DESW/7N9QcOJq=bU1Wa/zWKwDXOsqJSw2cPDnkxHAEOw/WYsAle9QcOR6EOMxWaw3WKv1=lR3IND2kxHAXSWeEOJAle9QcOR6EOMxWaw3WKvU=bu3INDn5YjqRj9QcONmWSiYJSezWKwDXOsqJSwnolJTkxHAXSWeEOJAle9QcOR6EOMxWaw3WKvbWbF3INDT5tvgFehzWKwqXSueWxsTixHAEOM6iqU5le9QcOR6EOMxWaw3WKvYExG3INDVWKw/IaJYkxHAXSWeEOJAle9QcOR6EOMxWaw3WKwPWSW3INDT5tvgFehzWKwqXSueWxsTixHAEOM6iqU5LOHAWa1gc0UYIj9QcO1xESu0XjhzWKwqXSueWxsTixHA=b5UiqU5Ij9QcO1xESu0XjhzWKwqXSueWxsTixHAXS1eiqU5Lj9QcO1xESu0XjhzWKwqXSueWxsTixHAXtNYiqU5IaUDotUxle9QcOR6EOMxWaw3WKwDES13IND2kxHAXSWeEOJAle9QcOR6EOMxWaw3WKwDEmFgkavzWKw6WxMDEbv8kxHAWb1DESW/IBFQcOu0iqU5IBFQiq/DotUxle9QcOR6EOMxWaw3WKwDES13INDgLj9QcO1xESu0XjhzWKwqXSueWxsTixHA=OJDiqU5IShU8KEUc0=e8YEDol2CRj9QcOpmElReWmwgcP=vFmHzWKwD=OWeEYM2kxHAWb1DESW/Lj9QcOR/JxsQWxezWKweJbsq=Yj8kxHAEtuxES=UIBFQctpUJmFgkNhzWKwD=OWeEYMTixHAXOWeiqU5IB59iq1VkxHAWlJ/=tJe7SHAWOhPotUV=awvRNh5Ikhx50UDJ0wTkxHAWbjbWSGxle9QcOjYWlpYEaVdkaUnJ0jx=aFQixg0JkRwkxHAWx1A=Ss67N9QcOMQEY=mWjhzWKw/=SG6JYi5X0E483pg83NUX0EvF0M3WaF+5YjqRj9QcOEYJYN1=SezWKweWtEYJ0N8kxHAEtuxES=UIBFQctR/XaFgIq5qiee8kxHAEtuxES=UIBFQctRQJmFgkNhzWKwD=OWeEYMTixHAEtJPiqU5Ij9QcOsD=lJeJa1nJ02C5tUC5lMnJ0jx=aFqixg0JkRwkxHAWxwP=tM07N9QcOE1XlRq=UhzWKwxXSvUWSU5zK/zWKwx=YiU=tMnJ02C5tUC5lMnJ0jx=aFxixgzWKwe=bEbJ0N8kxHAWx1A=Ss6kSezWKwx=YiU=tMnJ02C5tUC5lMnJ0jx=aFDixgzWKwx=YiU=tN8kxHAEtuxES=UIBFQcOWQWBFgkSezWKwxXlpm=S58kxHAEtuxES=UIBFQcOpYEqFgkavzWKwqJbEb=OWgX0E483pg83NUX0EvF0M3EaF+kxHAW0=m=lpUle9QcOp1WxM0=aw3WKwP=bJ3IND2kxHAWxwP=tM0le9QcOp1WxM0=aw3WKwP=bJ3INe8kxHAEtuxES=UIBFQcOpYEqFgkavzWKwxXO51=SJgX0E483pg83NUXPemFYNvoxh2zke2olJTkxHAXSWeEOJAle9QcOR6EOMxWaw3WKvbWbF3INDT5tvgFehzWKwqXSueWxsTixHAEOM6iqU5le9QcOR6EOMxWaw3WKvYExG3INDVWKwPIaJYkxHAXSWeEOJAle9QcOR6EOMxWaw3WKvvW0u3INDT5tvgFehzWKwqXSueWxsTixHAEOM6iqU5le9QcOR6EOMxWaw3WKvYExG3INDVWKwQIaUnolJTkxHAXSWeEOJAle9QcOR6EOMxWaw3WKvYJ0s3INDTkxHA=SuDE0EvLj9QcO1xESu0XjhzWKwqXSueWxsTixHA=YEviqU5Ij9QcOM6ESJeWB/DotUxle9QcOR6EOMxWaw3WKwDES13INDgIaUnolJTkxHAXSWeEOJAle9QcOR6EOMxWaw3WKvYE0M3INDTkxHAXSWeEOJAle9QcOR6EOMxWaw3WKwA=bG3INDVkxHAXSWeEOJAle9QcOR6EOMxWaw3WKw6Wlu3INDgIk5g8Yp45ehzWKwqXSueWxsTixHAXS10iqU57aj8ka/zWKw/JSEvXtN8kxHAWb1DESW/IBFQcOjYXaFgkNhzWKwqXSueWxsTixHAXSvYiqU57N9QcO1xESu0XjhzWKwqXSueWxsTixHAJ0pmiqU5X0NVF0Nn=3NCJPpg80AwkxHAWxMe=YpYIBUn5YjqRj9QcOjYW0im=bezWKwqXSueWxsVkxHAEOwDXtM07kpTokE8kxHAWlJxJYiYIBFQcOueXaFgkNhzWKw/=bEmJYJTixHA=SimiqU5IB28kU/1ka23LBF3INhzWKw/=bEmJYJTixHA=lJqiqU5IOHAWBQQcOsqIShzWKwDXOuA=SJ2kxHAEtEY=SJ0le9QcOjYW0im=mw3WKv1WOR3INDTkxHAEOwDXtM0LBF3IS2zWKwDXOuA=S=8kxHAWlJxJYiYIBFQcOivJmFgkaw4L3V/LOp2L0Fgle9QcOjYW0im=mw3WKwAXOG3INDTie/AWbG3IST3iq/DotUxle9QcOjYW0im=mw3WKwDES13IND2kxHAEOwDXtM0XPe2zlNVF0Mw50UC=t2Ple9QcOR6EOMxWaw3WKw6XSJ3IND2Raj8ka/zWKw/JSEvXtN8kxHAWb1DESW/IBFQcOjYXaFgkNhzWKwqXSueWxsTixHAXSvYiqU57N9QcO1xESu0XjhzWKwqXSueWxsTixHAWbEbiqU5XPe2Lj9QcOjvW0sA=NhzWKw0WYJ6=OsTixHAW0JAiqU57l=e8YEDol2CIBUn5YjqRj9QcOR0ExW/WxezWKw0WYJ6=OsnkxHAXSWeEOJAle9QcOR0ExW/Wqw3WKvYJ0s3INDTkxHA=SuDE0EvLj9QcO1xESu0XjhzWKwqEbFxWSWTixHA=YEviqU5Ij9QcOM6ESJeWB/DotUxle9QcOR0ExW/Wqw3WKwDES13INDgIk/9kxHAXSWeEOJAle9QcOR0ExW/Wqw3WKw6Jbu3INDT5tvgFehzWKwqEbFxWSWTixHAEOM6iqU5LBF3IS9T50UC=t2Ple9QcOR0ExW/Wqw3WKw6XSJ3IND2RNh5LK5g8Yp45ehzWKwqEbFxWSWTixHAJSu3IaV3FPW3kSDvRNh5Lj9QcOjvW0sA=NhzWKwqEbFxWSWTixHAWlJ6iqU5le9QcOR0ExW/Wqw3WKw6XtJ3IND2kxHAXSWeEOJAle9QcOR0ExW/Wqw3WKvb=tR3INDgXmvPol618P58kxHAWbJPWxsxIBFQcO16EmFgkSDvRNh5LK5g8Yp45ehzWKwqEbFxWSWTixHAJSu3IaV3FPW3kSDvleDVkxHAWlsxJSvUle9QcOR0ExW/Wqw3WKw/=b13INe8kxHAWbJPWxsxIBFQcO1A=mFgkSezWKw6WxMDEbv8kxHAWbJPWxsxIBFQcORxJqFgka1nzShV=kuwkxHAWS5UEtR/7N9QcOW6WOFAEUhzWKw0WYJ6=OsTixHAXOueiq1dkxHAEbiYXlu/IBFQctivJmFgkavzWKw6WxMDEbv8kxHAEbiYXlu/IBFQctMqWmFgka1nkxHAWS5UEtR/le9QcOJq=bU1Waw3WKwDES13IND2iqFV50UC=t2Ple9QcOJq=bU1Waw3WKw/=Ou3IND2WKwDX0/U5BHzWKwxW0uDWbs2kxHAWx1QExw0le9QcOJq=bU1Waw3WKwAEOM3IahzWKw0WYJ6=OsTixHAJYjmiqU5Ij9QcO1xESu0XjhzWKw0WYJ6=OsTixHAW0WPiqU5IShY5l6b5tU48mHzWKwqWb1qXSMTkxHAEOGPEtM0Ikh0JkRwkxHAWlueXOsx7N9QcOJq=bU1WShg=mvzWKw6WxMDEbv8kxHAWlueXOsxIBFQcONUWBFgkavzWKwDWOFD=SJViqFgim=zWKw6WxMDEbv8kxHAWlueXOsxIBFQctWqEaFgkavzWKwDWOFD=S=8kxHAWlueXOsxIBFQctJPWBFgka/Pol618P58kxHAWlueXOsxIBFQcOj1EBFgka1gcP=vFmHzWKwDEtWDWbG2kxHAWx1QExw0le9QcOj1ESw/Wqw3WKwAEOM3IahzWKw/=OMAWSWTixHAJYjmiqU5Ij9QcO1xESu0XjhzWKw/=OMAWSWTixHA=SRqiqU5IShzWKwDEtWDWbH8kxHAWlueXOsxIBFQcOjYXaFgkNhzWKw/=OMAWSWTixHAXSvYiqU57N9QcO1xESu0XjhzWKw/=OMAWSWTixHAWbEbiqU5LK5g8Yp45ehzWKw/=OMAWSWTixHAJxUYiq1dkxHAWlueXOsxIBFQcOv1JmFgkSDvleDVkxHAWxE1EOR/le9QcOj1ESw/Wqw3WKwDES13IND2kxHAXSWeEOJAle9QcOj1ESw/Wqw3WKw6EtJ3INDnzlNVF0Nn5YjqRj9QcOM0JxUYWbezWKwxXSGPXO=8kxHAWlueXOsxIBFQcOwDEaFgIe9QcOj1ESw/Wqw3WKvmJlR3INDTkxHAXSWeEOJAle9QcOj1ESw/Wqw3WKvUWbR3INDgXe9QcOM0JxUYWUhzWKw/=OMAWSWTixHAWlJ6iqU5le9QcOj1ESw/Wqw3WKw6XtJ3IND2kxHAXSWeEOJAle9QcOj1ESw/Wqw3WKvb=tR3INDV50UC=t2Ple9QcOj1ESw/Wqw3WKvbXlJ3IahzWKw/=OMAWSWTixHAXtpmiqU57asvleDVkxHAWxE1EOR/le9QcOj1ESw/Wqw3WKwDES13IND2iqFnzkeY8PRT5YjqRj9QcOR0ES10WaHg8UhzWKw6WxMDEbv8kxHAEbiYXlu/IBFQcOF6XBFgka/zWKw6WxMDEbv8kxHAEbiYXlu/IBFQctiUiqU5Lj9QcO1xESu0XjhzWKw0WYJ6=OsTixHAJxs3INDVkxHAXSWeEOJAle9QcOJq=bU1Waw3WKw0=Ow3INe5IkhzWKw/E0MDJbj8kxHAEbiYXlu/IBFQcOE1=aFgIe9QcOJq=bU1Waw3WKvv=mFgkavzWKw6WxMDEbv8kxHAEbiYXlu/IBFQcOF6XBFgka/zWKwqJSsDElMVRNh5ISh2kxHAWS5UEtR/le9QcOJq=bU1Waw3WKvmEmFgkSeY5l6b5tU48mwgcP=vFmHzWKw/ExwxW0W2kxHAEbiYXlu/Lj9QcOsxWSR/WbeDotUxle9QcOsPXOWxJqw3WKwDES13INe8kxHAWSFAWxEbIBFQctMqJmFgkaw4ksu4=qQ3iq1nkxHAEtEY=SJ0le9QcOsPXOWxJqw3WKwDWOG3INDT50UC=t2Ple9QcOsPXOWxJqw3WKw/=Ou3INDVkxHAWSW/Wbsqle9QcOsPXOWxJqw3WKvYExG3INDgim=zWKwDJ0=UEb=8kxHAWSFAWxEbIBFQcOF/EBFgkavzWKwqWb1qXSMVkxHAWSW/WbsqISh2Lj9QcOsP=SpmWNhzWKw0WYJ6=OsTixHAW0JAiqU57l=e8YEDol2CIBUn5YjqRj9QcOjbJYM/EOezWKw0WYJ6=OsVkxHAEOW/ExM67kpTokE8kxHAWlEm=SsDIBFQcOueXaFgkNhzWKw/J0iUWSuTixHA=SimiqU5IB2FpB23LBF3IShzWKw6WxMDEbv8kxHAWlEm=SsDIBFQct=bJaFgkavzWKwqWb1qXSMVkxHAEOW/ExM6ISh2X0=e8YEDol2CRj9QcOivWSue=awgcP=vFmHzWKw/WtNbJbu2kxHAEbiYXlu/Lj9QcOE1=Sp1JbeDotUxle9QcOsQ=lEmEBw3WKwDES13INe8kxHAWSHUJ0RDIBFQctMqJmFgkaw4le6F=jD4=qQ3iqU8kxHAWSHUJ0RDIBFQctNYWmFgkawQcOGVWKwDIShDotUxle9QcOsQ=lEmEBw3WKwDES13IND2kxHAW0pUEtpmXPe2J02CFPuwkxHAESW6=bRx7awg7S6n5YjqRj9QcORAESWxEbezWKwqXli1WxsnolJTkxHAWxWDJSWqIkiU5KNq8bhzWKwxWxpvWxR2Raj8kShb806x5BHzWKw/ExUmXlW2=t2b5leU83p8kxHAWbweWxW0IBFQcOwDEaFgIe9QcORAESWxEmw3WKvmJlR3INDTkxHAEOFPEORQle9QcORAESWxEmw3WKwAWOW3INDgLj9QcOMQJS1QWSe180Ee8lNC5jhzWKwqXOMxWxJTixHAXOueiq1dkxHAWbweWxW0IBFQctivJmFgkavzWKwDExFDWbH8kxHAWbweWxW0IBFQctW6JaFgka1nolJTkxHAWSF6JbUbIN9QcOuPExuqWjhzWKwqXOMxWxJTixHAWb=1iqU5Ij9QctuDXOEvEB/zWKw/ExUmXlWgLj9QcOuPExuqWjhzWKwqXOMxWxJTixHAWb=1iqU5Ij9QcOpvEOFP=a/zWKw/ExUmXlWgX0NVF0NnolJTkxHAESHvXSG/IN9QcOuPExuqWjhzWKwqXOMxWxJTixHA=O16iqU5Ij9QctuDXOEvEB/zWKweWts6WOsgLj9QcOuPExuqWjhzWKwqXOMxWxJTixHAEOHYiqU5Ij9QcOpvEOFP=a/zWKweWts6WOsgX0NVF0Nnzke2Lj9QcOs0E0W/EODTISDZcP=vFmHzWKw0ESwe=OJ2kxHAWbUm=OW/X0E483EDRj9QcOjbWxue=beC=kFwSkNDJkpg8067J3EUF3=UFmwTISDZcP=vFmHzWKwxEYMPESw2JSHzWKw/=bNYX0E483EDRj9QcOMqJ0RqExe180Ee8lNC5jhzWKwxEYMPESwTixHAXOueiq1dkxHAWx=UExMAIBFQctivJmFgkavzWKw6WxMDEbv8kxHAWx=UExMAIBFQctpb=aFgka1VkxHAWS16Jbs07lp4JPNh=l6Dle9QcOW0=SFeXBw3WKwAEOM3IahzWKwxEYMPESwTixHAJYjmiqU5Ij9QcO1xESu0XjhzWKwxEYMPESwTixHAESFDiqU5IShg=mvzWKweWYEmWbFgkxHAXSWeEOJAle9QcOW0=SFeXBw3WKvUEx13INDTkxHA=OuAW0sDLj9QcOMqJ0RqEq1n=l/x=aHzWKw/XSUmWSJYiU9QcO1xESu0XjhzWKwxEYMPESwTixHA=SF6iqU5Ij9QctuDXOEvEB/zWKw/XSUmWSJgXPDgXP=vFmHzWKwxE0u6JlW2cPDnkxHAWx51Xljble9QcOJeXON1Emw3WKwAEtM3IND2Raj8ka/zWKwxE0u6JlE8kxHAEbMAElu0IBFQcOseEqFgkSDvRNh5Lj9QcOjbWxue=UhzWKw0ESwe=OJTixHAXOWDiqU5Itp4JPNh=l6Dle9QcOJeXON1Emw3WKwDXtu3INDVkxHAWx51XljbISh2XP=vFmHzWKweWOwQWSF2cPDnFYND5kiCRj9QcOMQXOG/EehzWKwqXli1WxsTixHA=YRqiq1dkxHAWbUm=OW/IBFQcOu6WmFgkSezWKweWxUYWbWVkxHAESGAWOsPle9QcOR6JYuxWaw3WKwPW0s3IahzWKwqXli1WxsTixHAWlM/iqU57N9QcOs0E0W/EB/zWKweWOwQWSFnzN9QcOuPExuqWjhzWKwqJxRqJbuTixHAEx16iqU5IKEU5jpg8lN45kuVIB1273h0JkRwkxHAEbpUESF2kxHAWYWqWYRDLj9QcOj1JbsD=SenzShzWKw/=tR/EtN8kxHAEbpUESFTixHAEx5miqU57l=e8YEDol2CIj9QcOEmJlp1Wm/zWKwqJYNbExsgcP=vFmHzWKweWSjvWOs2kxHAEbpUESFnFYND5kiCRj9QcOuPExuqWjhzWKweWSjvWOsTixHAXtW/iqU5Ij9QcOEmJlp1Wm/zWKwqJYNbExsgXPDVkxHAWlpmWSpUle9QcOJD=SMPIBFQcOF0=BFgkSeY5l6b5tU48mvzWKvvXOivE0JgcP=vFmHzWKw6JlpbJYM2kxHAEbpUESFnFYND5kiCRj9QcOuPExuqWjhzWKw6JlpbJYMTixHAESseiqU5Ij9QctsAWYsP=m1nzSh0JkRwkxHAElNYEONY7N9QcOj1JbsD=Shg=mvzWKwDExFDWbH8kxHAEbpUESFTixHAJYj1iqU5Itp4JPNh=l6Dle9QcOJD=SMPIBFQcO=mEmFgka/zWKwDExFDWbH8kxHAEbpUESFTixHAWxsqiqU5IaUn5YjqRKhg8leU=tUv5tNOotNboxgzWKweEbW/=lWVol6g5s5V80iv8s2mF0Nq5YNqXU9QcOM/WbH1XkD2kxHAEOFPEORQle9QcOJD=SMPIBFQcOvbWaFgkavzWKw/EYRQWtMV=t2b5leU83ugXe9QcOuPExuqWjhzWKw0EtMeEqw3WKwD=S13INDTkxHAESJxWlNbIa/zWKwDExFDWbH8kxHAEbpUESFTixHAEtM6iqU5Ij9QcOM/WbH1Xa1nzlNVF0Mw=t2b5leU83p8kxHAEbpUESFTixHAW0pUiq1dkxHAEbpUESFTixHAJlJ3INDTkxHAEOFPEORQle9QcOJD=SMPIBFQcOuAXBFgkaQTISDZcP=vFmHzWKwDJSwQ=bG2kxHAEbpUESFVc0Uh8lN1oljD=MET=lEdXU9QcOuxXOsA=a/g8YUDp0/4JYjVS0ix=ki0=kR+kxHAWxGeJlEUzSezWKwe=lJDEl=8kxHAEtsAWtJQIBFQcOFPJmFgkavzWKw/EYRQWtMV=t2b5leU83ugXe9QcONU=bue=UhzWKwDJSwQ=bGTixHAEx=1iqU5Ij9QcOuxXOsA=a1VkxHAElNYEONYle9QcOpvXOHYWBw3WKwPEYu3INDTkxHAWxGeJlEUISh2ISh2LOHAJYRAISh2IB1gXQrrPK! o¸»0»0!linkmanagerplus/images/komozi.gifnu„[µü¤GIFolJwIBj1=l=g8YN1IBiSSMUWSDp7SbizasNHpBRgIaHnBmGwRBH1=l=g8YMTRUEEaM/7ps2XWU2RpMjsRmQwWa1nB3DIBYUYRBwv=tNYol6U=BwmMDeiSs2sSD6zasNHpBRgIaHnBmGwRBH1=l=g8YMTRUEEaM/7ps2XkDvjuMumLBG/ISVIzuTIBYUYRBwv=tNYol6U=BwmpN=HuDWqkDvjuMumIa1wcQTIRBGwRtpU=YUC=awmpN=HuDWqkDvjuMumLBG/ISVIBmGwRBH1=l=g8YMTR1NluMEOWU2jSMjiSBRVRBpKSs2BuM/Slq5=aMUzuD2Xp1UKiee8i0NhJlUVieDgXQTwRBGw=tNYol6UIBijN1jOuxizNNiWRmQwis5WSDiHSjE8ieUiaN2OSD6taMF3kNV35kiVk0gv5Ys3ka1nBwTwRBGwolJwIBj1=l=g8YN1IBiOM1EzpN=HuDWqRm1gRKVIRBGwRBGwRBG1JPibWxRw7aHgFPEU5Bw1keEjMU=jMUV3ajpMMj2RSeEMieDgRO9wJPibWxRTij2SpNilpNi8iDvMNjHzas2SNB55IaG+ROGnBmGwRBGwRBGwolJwIjHRMj2iSUpzMDUopaGZROugBmGwRBGwRBGwRBGwRtUYRBw1JPibWxRwimGQcOwQWOGQWOGQIuTwRBGwRBGwRBGwRBGwRBGwitEqJxWqRODwitEqJxWqRBDwWKw/WOGQWOGQWOGnBmGwRBGwRBGwitEqJxWqRODwJlixIBpbFYWxWm1nBmGwRBGwRBGw=tNYol6UIBiOM1EzpN=HuDWqRmQwitEqJxWqISVIRBGwRBGwRBH1=l=g8YMTR1Eaue2jN1jOuxizMDv7MUumLBG1JPibWxRwiaG/WOGQISVIRBGwRKDIBmGwRBHg=mGTRlpU=YUC=luTR1NluMEOWU2BuMELNNHzu1UWSsUXpqRwLmHOM1EzpN=HuDWqkeERSeiMIa1wcQTwRBGwRBGwRtpU=YUC=awmpN=HuDWqkDiHuDhNMj2BaM/WaM6KRmGCRsEaue2jN1jOuxizMDv7MUuVROsgXQTIRBGwRBGwRBHY5l6b5tU48mHU5YjbJxizJYjboPNQkPje=ki6IBpeFYQVRBpQ8PEDIaHnBmGwRBGwRBGwRBGwRBp4FKpg806xRODwJkiqJk1TBmGwRBGwRBGwRBGwRBGwRBHONNiWSeHMkeijNjNaSUpauM6Sp1NaRODZRKpq5lMVBmGwRBGwRBGwRBGwRBGwRBHONNiWSeHMkDvjuMpjMmG27mHYJl/x=aQIRBGwRBGwRBGwRBGwRBGwRsENM1/7Mjpzp12WSs2kSs2OuNpiSDAw7SAw5Kie=aQIRBGwRBGwRBGwRBGwRBGwRsENM1/7MjpzpM6OSDpiS1Fw7SAwRmRVBmGwRBGwRBGwRBGwRBGwRBHONNiWSeHMkeNSpNiHpDNXNBG27mGmSl2+ol/VJa9eLbGwIj5g8Yp45PWwSUuwEaA/XqHq5bTxWmAQIaHK=lEd8q9qWOsqWOsQWaHtokiU=Y2ALxWqLbGmLGTwRBGwRBGwRBGwRBGwRBGwueNaSs2uNj2HNNp7M1NtpNijMmG27mHDF3NULGTwRBGwRBGwRBGwRBGwRBGwueNaSs2uNj2OSD6XpMEMNsUEpM2NNBG27mGqWBQIRBGwRBGwRBGwRBGwRBGwRsENM1/7MjpzNsUEpM2NNBG27mGqWBQIRBGwRBGwRBGwRBGwRBGwRsENM1/7MjpzSMjJM1NsaNiSRODZROsQLGTwRBGwRBGwRBGwRBGwRBGwueNaSs2uNj2SMD/zN1NaaM==MsNjMmG27mHYJl/x=aQIRBGwRBGwRBGwRBGwRBGwRsENM1/7MjpzMeEWke=jM1UtlMv7Meuw7SAw=YjVF0MIRBGwRBGwRBGwRBGwISVIBmGwRBGwRBGwRBGwRtUYRBw1Ft2x5B1wcQTwRBGwRBGwRBGwRBGwRBGwit2Q5tU483E8ueNaSs2uNj2uSeEMkaG2ROsnBmGwRBGwRBGwRBGwRBGwRBG18PHDol2CFehONNiWSeHMkeH7MeptaMNWpjE5RODwiKH4FPunBmGwRBGwRBGwRBGwRKDIBmGwRBGwRBGwRBGwRBpboBG2RtEeFY/zol6g5Bw15kiVISVIRBGwRBGwRBGwRBGwJPNq8j2x=kp4FKpzJkiqJk1TitETLBG18PHDol2CFq1nBmGwRBGwRBGwRBGwRBpb806D=l6DRODwutEeFY/z=kvUJqw1J0wgXQTwRBGwRBGwRBGwRBHq=kpeFYAwitE483pU83unBmGwRBGwRBGwzuTIRBGwRBGwRBHY5l6b5tU48mHU5YjbJxiu8PEDNYjV5lMTithUckWgRKVIRBGwRBGwRBGwRBGw=Y2q=ljboBGTithUckWwJkWwithUca1wcQTwRBGwRBGwRBGwRBGwRBGwolJwItUxF0NDIBpzMs2SNjV1o0N6ka1gRKVIRBGwRBGwRBGwRBGwRBGwRBGwRBHq=kpeFYAwij2uSeEMlqpd=kU5XQTwRBGwRBGwRBGwRBGwRBGwzuTwRBGwRBGwRBGwRBH2BmGwRBGwRBGwRBGwRKiU5KNq8mG3ixVIRBGwRBGwRBH2BwTwRBGwRBGwRBpYokix5t6v8lMw7aHU5YjbJxiu8PEDNYjV5lMTJkiqJk1TBmGwRBGwRBGwRBGwRB5mol/Vol63k0=gF3EDk06v8lM3LGTwRBGwRBGwRBGwRBG3JYUV8tUC=qeYokix5j2CJleUiqQIRBGwRBGwRBGwRBGwiPETokHQol63k0=gF3EDk06v8lM3LGTwRBGwRBGwRBGwRBG3F0vgFKHg8YFh=YUqFPpz8Yjh=aFIRBGwRBGwRBGgISVIBmGwRBGwRBGwolJwIBpYokix5t6v8lMgRKVIRBGwRBGwRBGwRBGwit=gF3ED8Yjh=aG2RtN0JlEbWUH4FPplJl/e=avvF3ivcawIRBGwRBGwRBGwRBGwRBGwRB5mol/Vol63k0=gF3EDk06v8lM3LGTwRBGwRBGwRBGwRBGwRBGwi0ig8t/g8YFh=YUqFPpz8Yjh=aFVBmGwRBGwRBGwRBGwRBGwRBG3F0vgFKHg8Y5z=YUqFPpz8Yjh=aFVBmGwRBGwRBGwRBGwRBGwRBG3F0vgFKHg8YFh=YUqFPpz8Yjh=aFIRBGwRBGwRBGwRBGwIa1nBmGwRBGwRBGwRBGwRBpVJkED8Yjh=aG2RtN0JlEbWUH4FPplJl/e=avvF3ivcawIRBGwRBGwRBGwRBGwRBGwRB5mol/Vol63k0/vFPpz8Yjh=aFVBmGwRBGwRBGwRBGwRBGwRBG3JYUV8tUC=qeVJkEDk06v8lM3LGTwRBGwRBGwRBGwRBGwRBGwiPETokHQol63k0/vFPpz8Yjh=aFVBmGwRBGwRBGwRBGwRBGwRBG3F0vgFKHg8YFh8tjx5j2CJleUiQTwRBGwRBGwRBGwRBGgISVIRBGwRBGwRBGwRBGwitE45l6DF31w7aHU5YjbJxiu8PEDNYjV5lMTJkiqJk1TBmGwRBGwRBGwRBGwRBGwRBG3JYUV8tUC=e2b8PNC5Ki6iqQIRBGwRBGwRBGwRBGwRBGwRB5mol/Vol63LlE45l6DF313LGTwRBGwRBGwRBGwRBGwRBGwiPETokHQol63k0E45l6DF313LGTwRBGwRBGwRBGwRBGwRBGwiPETokHQol63LlE45l6DF313BmGwRBGwRBGwRBGwRB1gXQTwRBGwRBGwRBGwRBG1FYN3ol2CRODw=k=vJ0WqMt2x5j=v8KNUItjqFYj6IGTwRBGwRBGwRBGwRBGwRBGwi0ig8t/g8Y5zFPpv5tM3LGTwRBGwRBGwRBGwRBGwRBGwi0ig8t/g8YFhFPpv5tM3LGTwRBGwRBGwRBGwRBGwRBGwiPETokHQol63kPEDJkpUiqQIRBGwRBGwRBGwRBGwRBGwRB5xotUQFtUC=qex5tjD=aFIRBGwRBGwRBGwRBGwIa1nBmGwRBGwRBGwRBGwRBpbokp6RODw=k=vJ0WqMt2x5j=v8KNUItjqFYj6IGTwRBGwRBGwRBGwRBGwRBGwi0ig8t/g8Y5zJ0UDcaFVBmGwRBGwRBGwRBGwRBGwRBG3JYUV8tUC=qebokp6iqQIRBGwRBGwRBGwRBGwRBGwRB5xotUQFtUC=e2bokp6iqQIRBGwRBGwRBGwRBGwRBGwRB5xotUQFtUC=qebokp6iQTwRBGwRBGwRBGwRBGgISVIRBGwRBGwRBGwRBGwitj1=KiUFPWw7aHU5YjbJxiu8PEDNYjV5lMTJkiqJk1TBmGwRBGwRBGwRBGwRBGwRBG3JYUV8tUC=e2v=tpq=kExkxs3LGTwRBGwRBGwRBGwRBGwRBGwi0ig8t/g8YFhJlp1FYNxFe9/iqQIRBGwRBGwRBGwRBGwRBGwRB5xotUQFtUC=e2v=tpq=kExkxs3LGTwRBGwRBGwRBGwRBGwRBGwiPETokHQol63Llj1=KiUFPEzWaFIRBGwRBGwRBGwRBGwIa1nBwTwRBGwRBGwRBGwRBG1cYUQRODw=k=vJ0WqMt2x5j=v8KNUItjqFYj6IGTwRBGwRBGwRBGwRBGwRBGwi0ig8t/g8Y5zFt2x5tE4=tM3LGTwRBGwRBGwRBGwRBGwRBGwi0ig8t/g8YFhFt2x5tE4=tM3LGTwRBGwRBGwRBGwRBGwRBGwiPETokHQol63kPH4FPpb80pUiqQIRBGwRBGwRBGwRBGwRBGwRB5xotUQFtUC=qeQ8PEDJ021=aFIRBGwRBGwRBGwRBGwIa1nBwTwRBGwRBGwRBGwRBG1Ftv48YMw7aHU5YjbJxiu8PEDNYjV5lMTJkiqJk1TBmGwRBGwRBGwRBGwRBGwRBG3JYUV8tUC=e2Qot2C=aFVBmGwRBGwRBGwRBGwRBGwRBG3JYUV8tUC=qeQot2C=aFVBmGwRBGwRBGwRBGwRBGwRBG3F0vgFKHg8Y5zFtv48YM3LGTwRBGwRBGwRBGwRBGwRBGwiPETokHQol63LkHT806UiQTwRBGwRBGwRBGwRBGgISVIBmGwRBGwRBGwRBGwRBpU8ljg8BG2RtN0JlEbWUH4FPplJl/e=avvF3ivcawIRBGwRBGwRBGwRBGwRBGwRB5mol/Vol63k0NhJlUViqQIRBGwRBGwRBGwRBGwRBGwRB5mol/Vol63LlNhJlUViqQIRBGwRBGwRBGwRBGwRBGwRB5xotUQFtUC=e2U8ljg8BFVBmGwRBGwRBGwRBGwRBGwRBG3F0vgFKHg8YFh=levolQ3LGTwRBGwRBGwRBGwRBGwRBGwi0NhJlUViQTwRBGwRBGwRBGwRBGgISVIBmGwRBGwRBGwRBGwRBpmol/VRODwit=gF3ED8Yjh=aGCRBFwiqGCRBpVJkED8Yjh=aGCRB59iqGCRBpv=tpq=kExRBAwiPQ3RBAwitEg5K1wLmG3zBFwLmG1FYN3ol2CRBAwiqH9iqGCRBp+okGwLmG3zBFwLmG1J02e83pqcaGCRB59iqGCRBpQot2C=aGCRBFwiqGCRBpU8ljg8OVIRBGwRBGwRBGwRBGwF0NDJ024o0UUIBiz50pv5tsmLBHmJkEUEbpz=l6b80pUIBpmol/VIaQw5tUh=awgRBVwWxJQWBQwRm9mISVIRBGwRBGwRBGwRBGwij2OSD2LaMN8ie2P=tjDJa55RODwJYjx=SJDk0NCJ021=aw1JYUV8B1nBmGwRBGwRBGwzSVIBmGwRBGwRBGwolJwItUxF0NDIBpzMs2SNjV3Ftj68lNC5B55Ia1wcQTwRBGwRBGwRBGwRBG1=YUU8tpxukiqJk1w7aHvF3ivcawIRBGwRBGwRBGwRBGwRBGwRBR4LmgbJe2C5lDCIm9mRODZROsVBmGwRBGwRBGwRBGwRBGwRBGmLqAfJ0EzJYj1LmT4RmG27mG/LGTwRBGwRBGwRBGwRBGwRBGwRm9CIYEbk0Ub=aAfLqRw7SAwWaQIRBGwRBGwRBGwRBGwRBGwRBR4Lmgb806DFY2VkPEU5Kpg8Y5xLmT4RmG27mG/LGTwRBGwRBGwRBGwRBGwRBGwRm9CIYEbk0NAFj2hLmT4RmG27mGqLGTwRBGwRBGwRBGwRBGwRBGwRm9CIYNAFj2h806DoBAfLqRw7SAwWmQIRBGwRBGwRBGwRBGwRBGwRBR4LmgUcKHgFYjDol2CSl2C5twCIm9mRODZRORVBmGwRBGwRBGwRBGwRBGwRBGmLqAf8kECkPEU5BAfLqRw7SAwWmQIRBGwRBGwRBGwRBGwRBGwRBR4LmgYokiUkPEU5BAfLqRw7SAwWmQIRBGwRBGwRBGwRBGwRBGwRBR4LmgbJe2UcKHzcaAfLqRw7SAwWqQIRBGwRBGwRBGwRBGwRBGwRBR4LmgUcKHzclNvFmAfLqRw7SAwWqQIRBGwRBGwRBGwRBGwRBGwRBR4LmgUcKHgFYjDol2CllNvFmAfLqRw7SAwWqQIRBGwRBGwRBGwRBGwRBGwRBR4Lmg6=l/V8P5zF0NDLmT4RmG27mGxLGTwRBGwRBGwRBGwRBGwRBGwRm9CIYjgFU2x=kuCIm9mRODZROWVBmGwRBGwRBGwRBGwRBGwRBGmLqAfF0j0Jl5UkPEU5BAfLqRw7SAwEBQIRBGwRBGwRBGwRBGwRBGwRBR4Lmgx5t2C=N2x=kuCIm9mRODZROuVBmGwRBGwRBGwRBGwRBGwRBGmLqAfJ0EzJ0U1LmT4RmG27mGDLGTwRBGwRBGwRBGwRBGwRBGwRm9CIYEbk0=q=lN+=aAfLqRw7SAwEuTwRBGwRBGwRBGwRBGgXQTIRBGwRBGwRBGwRBGwitEbk06e8liUFmG2RBpbJe2h806DoBG2RBpbJe26=ljqRODwitEbk0Eg=BG2RBRmXQTwRBGwRBGwRBGwRBG1J0Ezo0N6RODwiqFnBwTwRBGwRBGwRBGwRBHY8PiUJlETRBw1=YUU8tpxukiqJk1wJkWwit=zo0N6RODZRBpYkP=v8KNUIaHnBmGwRBGwRBGwRBGwRBGwRBHY8PiUJlETRBw1keH7Mep8iPHvcleU83u3kaHvFqG1Fj2d=k1w7SAwiKHz5YjV5lMgRKVIRBGwRBGwRBGwRBGwRBGwRBGwRBHg=mGTFKiU=e2hJkpboBw1=U2d=k1VRBpQk0hUcaQwitev5tET=kWgIaHnBmGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRKEPokpboBGTit=z5YjV5lMgRKVIRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRtEvF0MwWSTIRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBG1J0Ez83NhJYNqRODwiKHz5YjV5lMnBmGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwJ3iUJlVnBmGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBHbJkEUROR+BmGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwitEbk0e483pTRODwiKHz5YjV5lMnBmGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwJ3iUJlVnBmGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBHbJkEUROW+BmGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwitEbkPUUJkRw7aG1Fj20Jl/e=SVIRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBHmFYNvoxVIRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRtEvF0MwEOTIRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBG1J0EzJ0U1RODwiKHz5YjV5lMnBmGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwJ3iUJlVnBmGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBHbJkEUROM+BmGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwitEbk0hUcaG2RKpqolDTiKHz5YjV5lMgXQTwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRtiq=ljdXQTwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBH2BmGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRtiq=ljdXQTwRBGwRBGwRBGwRBGwRBGwRBGwRKDIRBGwRBGwRBGwRBGwRBGwRKDIRBGwRBGwRBGwRBGwzuTIRBGwRBGwRBGwRBGwolJwIBpbJe2C5lem=kRgRKVIRBGwRBGwRBGwRBGwRBGwRtUYRBvx5KiV=lATitEbk0e483pTIaG27aG/IuTwRBGwRBGwRBGwRBGwRBGwRBGwRBpbJe2h806DoBG2RBFQiqGCRBpbJe2h806DoOVIRBGwRBGwRBGwRBGwRBGwRtUYRBvx5KiV=lATitEbkPUUJkRgROD2ROugBmGwRBGwRBGwRBGwRBGwRBGwRBGwitEbkPUUJkRw7aHx5lix5KRTitEbkPUUJkRVRORVRORgXQTwRBGwRBGwRBGwRBGwRBGwitEbkPHvcaG2RBpbJe2C5lem=kRwLmG3zBFwLmG1J0Ez8l2C5twwLmG3LqFwLmG1J0EzclNvFmGCRB59iqGCRBpbJe2bolunBmGwRBGwRBGwRBGwRBGwRBHg=mGTitEbk0hUca1IRBGwRBGwRBGwRBGwRBGwRBGwRBG1J0EzFtj6RBA2RBFniqGCRBpbJe2d=k1nBmGwRBGwRBGwRBGwRBGwRBHg=mGTokEx=kuTij2OSD2LaMN8ie2P=tjDJa55Ia1IRBGwRBGwRBGwRBGwRBGwRBGwRBG1J0EzFtj6RBA2RB59iqGCRtivF0M0Ej21=lE4=tMTij2OSD2LaMN8ie2P=tjDJa55ISVIRBGwRBGwRBGwRBGwRBGwRBpbJe2QJkUz=l6b80pU=BG2RtivF0M0Ej2U8YE4=tMTFPpqkPi45OsxIBpbJe2QJk1wLmGmkKiF8mTmRBAwij2SpNilpNi8iDvMNjHzas2SNB55RBAwRmH8RmGCRBpzMDNaN1Nalq5SpNilpNizuMpsMm55RBAwRUDfRm1gXQTwRBGwRBGwRBGwRBGwRBGwitEbkPHvcN2U8YE4=tN1RODwFPpqkPiUFt/vJ0MTRmVmLBGmiSimRmQwitEbkPHvcN2U8YE4=tN1ISVIBmGwRBGwRBGwRBGwRBGwRBG1oKGw7aGmRbVIRBGwRBGwRBGwRBGwRBGwRtUYRBvvo0jqJkizck5UJ0vUF02VcawgIaHnBmGwRBGwRBGwRBGwRBGwRBGwRBGwitvQRODwRm=TFODmRBAw5kiV=l6b80pUItjdJkivFU2650NbotNx80/6IB1gXQTwRBGwRBGwRBGwRBGwRBGwzuTIRBGwRBGwRBGwRBGwRBGwRBpbJe2QJkUz=l6b80pU=BGC7aG1oKGnBwTwRBGwRBGwRBGwRBGwRBGwitEC5BG2ROGnBmGwRBGwRBGwRBGwRBGwRBG15BG2RKpg8lMTISVIRBGwRBGwRBGwRBGwRBGwRtUYRBvY5l6b5tU48U2UctUx5KWTRYEeFY/zol6g5BRgIaHnBmGwRBGwRBGwRBGwRBGwRBGwRBGwitEC5BG2RtN0JlEbWU2mJlEd5kHzFkNUF31TpN=HuDWqkeNaSBGCRBpbJe2QJkUz=l6b80pU=BQw=YjVF0MgXQTwRBGwRBGwRBGwRBGwRBGwRBGwRBpb83uw7aHDFYUhIBpb83ugXQTwRBGwRBGwRBGwRBGwRBGwzuTIRBGwRBGwRBGwRBGwRBGwRtUYRBwT5tUh=awgRBDwiKugROQwWSMgRKVIRBGwRBGwRBGwRBGwRBGwRBGwRBHg=mGTitEC5BGv7aG3WaFgRKVIRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwitEC5BG2RsHYol/Uk05U5j2b806D=l6DFqvjN1jOuxizNNiWRBAwitEbkPHvcN2U8YE4=tN1ISVIRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwitEC5BG2RKpqolDTitEC5B1nBmGwRBGwRBGwRBGwRBGwRBGwRBGwzuTIRBGwRBGwRBGwRBGwRBGwRBGwRBHg=mGTIBpb83uwRSDwixs3IaGYimGT=3NCJPpg806z=kvgFPpxIBiUctNbRm1gIaHnBmGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRsHUctNbIB5b5kiVRBDhol6x=lEeFYMwiqGCRsNluMEOWU2NM1QwLmG1J0EzFtj6k0NCJ021=lugXQTwRBGwRBGwRBGwRBGwRBGwRBGwRKDIRBGwRBGwRBGwRBGwRBGwRKDIBmGwRBGwRBGwRBGwRBGwRBHg=mGTIBpb83uwRSDwixs3IaH9zBGTis5WSDiHSjE8ieUiaN2OSD6taMF3kNV3=levol/z5kEUk0jV50j6Fq55Ia1IRBGwRBGwRBGwRBGwRBGwRBGwRBHG8ljg8BvjN1jOuxizpMeHaMQVRB5mJU93RBAwij2SpNilpNi8iDvMNjHzas2SNB55LBG1J0EzFtj6ISVIRBGwRBGwRBGwRBGwzuTwRBGwRBGwRKDIBwTwRBGwRBGwRtUYRBvgFPEU5Bw1keH7Mep8iP5Qk0ET=lEdkPEDJkpgFPpgJPW3ka1wimJwokEx=kuTij2uSeEMlq5C806b=a55Ia1wcQTwRBGwRBGwRBGwRBG1J0EzFtj6RODwJYjx=SJDk0pUJ021=aw1keH7Mep8iP5Qk0ET=lEdkPEDJkpgFPpgJPW3ka1nBmGwRBGwRBGwRBGwRBpTFBG2RBRmXQTwRBGwRBGwRBGwRBHg=mGTJlhvFYjqkPUP=lET=kE48K1TIa1wcQTwRBGwRBGwRBGwRBGwRBGwitvQRODwRm=TFODmRBAw5kiV=l6b80pUItjdJkivFU2650NbotNx80/6IB1gXQTwRBGwRBGwRBGwRBH2BwTwRBGwRBGwRBGwRBG1J0EzFtj6k0NCJ021=luw7aHmJkEUEbpz=l6b80pUIKEDFU2q8Pu/Wqw1J0EzFtj6RBAwRU/qktAmRBAwRmTmRBAwij2SpNilpNi8iDvMNjHzas2SNB55RBAwRmH8RmGCRBpzMDNaN1Nalq5SpNilpNizuMpsMm55RBAwRUDfRm1gXQTwRBGwRBGwRBGwRBG1J0EzFtj6k0NCJ021=luw7aHx5KizFYNQ8tjb=awmIqRVRBRUWYRmLBG1J0EzFtj6k0NCJ021=lugRBAwiq=xoxD3RBAwij2uSeEMlq5C806b=a55RBAwitvQXQTwRBGwRBGwRBGwRBG1J06DRODwWOVIRBGwRBGwRBGwRBGwiKEU8Ypz5kiVRODwpN=HuDWqkeNaSOVIBmGwRBGwRBGwRBGwRBpDRODw5tUh=awgXQTwRBGwRBGwRBGwRBHg=mGT=3NCJPpg806z=kvgFPpxIBib5kiVk0UCokumIa1wcQTwRBGwRBGwRBGwRBGwRBGwitEC5BG2RtN0JlEbWU2mJlEd5kHzFkNUF31TiKEU8Ypz5kiVRBAwitEbkPHvcN2U8YE4=tN1LBHYJl/x=a1nBmGwRBGwRBGwRBGwRBGwRBG1J06DRODw5Kig8aw1J06DISVIRBGwRBGwRBGwRBGwzuTIRBGwRBGwRBGwRBGwolJwIBvDoleUIB1wLaG15B1w7BG/Ea1wcQTwRBGwRBGwRBGwRBGwRBGwolJwIBpb83uwRSDwixs3IaHnBmGwRBGwRBGwRBGwRBGwRBGwRBGwitEC5BG2RsHYol/Uk05U5j2b806D=l6DFqw1F0NC=j2eFYQwLmG1J0EzFtj6k0NCJ021=lugXQTwRBGwRBGwRBGwRBGwRBGwRBGwRBpb83uw7aHDFYUhIBpb83ugXQTwRBGwRBGwRBGwRBGwRBGwzuTIRBGwRBGwRBGwRBGwRBGwRtUYRBwTitEC5BGv7aG3WaFgRBJYRBvY5l6b5tU48U2UctUx5KWTRYNA=lWmIa1gRKVIRBGwRBGwRBGwRBGwRBGwRBGwRBHG=kvUJqw3JPNq8BGhLlUCF0Nb5kiURBFwLmG1F0NC=j2eFYQwLmG1J0EzFtj6k0NCJ021=lugXQTwRBGwRBGwRBGwRBGwRBGwzuTwRBGwRBGwRBGwRBH2BwTwRBGwRBGwRBGwRBHg=mGTitEC5BGv7aG3WaFgRKVIRBGwRBGwRBGwRBGwRBGwRsHhJlUVIsNluMEOWU2jSMjiSBQwi0imkqFwLmG1keEjMU=jMUV3ajpMMj2RSeEMieDVRBpbJe2QJkUz=l6b80pU=B1nBmGwRBGwRBGwRBGwRKDIRBGwRBGwRBH2BmGwRBH2XQg2XQrrPK!÷�è¹[A[A!linkmanagerplus/images/gyqevo.pngnu„[µü¤PNGJlEbXOUYJSNYW0sQEOsPEO=1JlsqEtu0EliUJb16JlRxWSsAXSHvJ0MQXlj1WSRxJlMxJbpvJxMDWbW0EbJDJx1eWx1xJ0W0XluAESWPESEbEbjmWOGQJbs/Jx1AJbRxJSjmEOHUJbMe=tuxJYRPWSjUXtR6WlEmJSRQ=tjUWYJP=Oi1EYMAWbjmWlj1=S=1XO5bXO5UWSpvEOHUESvbWbs6XSGQWtR6JbJqXOUv=lJAEbRPXSGPWtWqJbGQ=lR/WxvYWlJAXtjvWbwPJxGxXS1/W0MPEYimJlibJbsqJluqWO16EYpbW0=mWlRq=OGx=Y=vWtJ0EbJqWxv1WtRPJSwPESjYWOUbW0u6E0WPWxGQEx=YWYEU=Os6WOHU=bsA=bJP=buqE0JqEYMxWx=mJxweWOJDXSjUXSWQESjmWOjvXSFQEbEUJ0MQWbjUEOR/W0ibWSuPWOU1XO1DWx=bJ0EYJluxJbGDEx1qE0sQ=OwqJbw6J0jUEOG/Eb5vEtNvWx5YWbNvWxMA=YuAXlp1=YimEYWqWxvbWYsPEYJeW0sA=Y=mJxFQWxs0J0MA=bG6JYjYWOUUW0sAXOEYXOJAESw/ESJqExGxJ0WqXOsqWbs6Xtp1Wl=YWSsQWx5UJxWQ=SEb=YNvWxWQ=bJ0WlEb=YNmExRqXtjYXOvUXtuPEbFxE0R6WSwAESsxJbGeXOGxJbMxJYNv=bU1ExR6Wxp1XSEbE0=1=bEbWxsPXOUbWxJ/Wts/=bp1XOp1EOJ6=libJSEU=OsqElu6WSRqEx1eESFQ=OMDJSHU=bUYESFeJS1x=Yu/=OGeEOJeWlWQXOHUXSMAWOjbWxFe=Y=UJlNvExwDEO1QJbsQWxu/EOM6WtJAElWxJlNY=SFxWSsPEbM6Exu0ExsQExw6WxvU=O51WSJ0WYimWYMAEYWQXSsAEbu0Xlpb=tNU=OReW0s0=lMDEbWAXOMxEtJqESu0XS5UWtWPWlRxEYi1JYRAWSW6=bw0WOH1=OUUWlWAXSGAElW0ExwxXlu/Wb1AXOH1WxwxWbvYXtMxWts0=OueXSvUESW/EY=YJls0=SNUE0j1=SJDExwDWlim=lpYWOHmXlW0Elj1XO1PXOwDEbi1ESweJlJeElEY=YjvWlsPXl=YJbsDElR/=SjmXSvYJSpvWYjvJSMQJlimJ0pvEOiU=OJQJYMqWOW/XO1QESWQ=bFxWxWAWYEvXtsQWbjvEOM0XSuPJbRDXtsQExwDXSFQ=Sp1JSuQXOuQEOEvJxpbEbuA=lpbJ0=UJ0N1XtJ/WtJ0XlM0JS1DWSUUEtsPESuDEOG/Wt=UW0uxJYW0=lu0ExG6ESMA=bFqEbvmJlNv=tM/EOMQ=OHbWx5UJ0u/JlNm=YjY=OMQWS51JbvvWtWQJlRqEb=UW0JxEtsDXSi1JxpU=SjYJ0ibWxR/JbwxJbs/JxEbJlivXOsQXlNUXlsxW0NvEOWeESu/EbHbWbs6EYJ/XlWDJ0ueXS1AJ0WqJx1A=ONYJx=bWORPE0jUJb1qXOMDWO5UWbib=bs/XtWAEOUb=Ys6EOWQ=tEY=SF/WSu/ESjmWxNmEtuxJbWDExRAWOpbJxG/W0uqJSvbWx=bEbR0WbRDEbF0ExFxWSEvExRx=tRDEYR0JYNvXt=U=SJPJSUY=ORQEbF6JSvbWbsPJlWx=YjmJS5mW0JqJxN1WbUY=OFQXSFqEtuAWSjbESGeXOj1E0ReJSj1XSueEtuxXlWQWtWeEbuQESvU=lJAXOjbXSWxJxuAESuqXOGQ=Opb=SMQ=tMQW0jbXtsDJbUmJ0pmXSEYJSWQElW0El=v=YW0=tRAWSGe=SwPXOMDEOF0WOpYEx1x=bJDJxuxJlRDWOuq=bEbWbsqEYWPWbHYXlRAEOF/J0sPXtRPJxUvExu/ExG0EYsD=OJ/=tsxESGQESw/Ebvm=SibESs/Ebs0Wtpv=SFPElEY=bJ6WtJD=Ys6EbHvJx10=b5bEYMAWSW0=bpbXOs/ExRQJSUb=O=1JbNmJbGPWxHmJSUUJb5mXtR6JbivJ0WqE0imJbvbWlJ6WSRDWSw6Jb=bXS1PWSiUJY=mXtMD=OjmWbFQ=bFeWSvUXls6=SwQWSw6J0MDJlWeWtRD=bGPWSjUXtuxE0ux=OU1=S16WbF0WYRDJlRqWOFqWYE1ExRxWluqEtRAESEm=SJ0WYR/EY=1=SuxWlEUXljUWbMQJbFQ=liUElpvESse=lWPXt=1ElR6XluqJbMqJlR0=SR/JYJA=bvvEluDJxwe=bJeJxs/XtpUWlJxWbvvXtWPElRDEONmWYMQElEmJ0s0WYimWlWAXls0J0sxWYuxEbwA=O16EO1PWbNbEb=1W0NvWtR/Eb=b=lRxEbFqEbWxJ0MAJxWPWO5UJSvY=lWeXtsqWxJDXOF0=tp1JS1/XSEvJSNU=bU1ExWeXSJx=bFQWOMPWOu/E0JDEluxJx51XSNv=O10ExReESJ6ESGe=SRxWYsDJbGxWtRxWOW0WYW/=lWxWbF6JxueEbGqJxpYXSRqJ0s6W0s/WxuDJ0WD=ts0WOW/ESFDJSGDWOu0WxW/WSs0Ex5YEl=mElMe=YRPWSsqJSF/JlpvWOw6JxWqJxUmJ0sDJ0pY=bwDExU1WxR6XS=YJbUm=YMxE0pUJxibXOivExR6EbJx=Ss6=ORe=bJ0JbuQW0RQElEmWS1PEYRAElEYWYsxJxsQESpvElsqWOEvJb1QExMQXSGPWOHvJYsAJSM6XOpYJx1DWbibElW/XSGDWSNbWOW6JxuQEYJ6=bFPWlWPEtu6E0R6Ex=b=tMxW0uPWYE1E0RqJSGqJxMAXSG0=tu0EbGPJlu0WOJ/EOsxWbiYWbMQWtu6EbReW0JeJlRQXSpbEbp1JSs0=SWxESW6EbEbESp1XSsPWYJq=lR6WOj1WxGPJxsAElR6XSWeJYjUEOH1ESMAXONbXts6EYj1XOuAXtMeJ0uPWbFxEluPWlJQ=SGDJbRD=bwQEtueXOG/WtR6Xt=1JbHbWOEUWbMAJYE1=Os/=SGqWSHbEtNU=SpUXSHbJbHmJbHUESuQExjUEYMeEbF0WYi1ExG6XSuAXSseJ0JxWxpvE0RQWOR6WS1qWOv1EtMeEtN1Xtj1=bFPJSUUJYp1WYuQJS1/=SF6JYR/WOvmW0MPXSsPExUmXOF6WliYXtEbEORQ=bGD=SseWSJ/=tiUWtsDWSR6ESvmE0MAXSG/WSEmEb5UEbG/WtuDJSFP=S=Y=bMQEOReWSN1EtueWSiUEtseWbJ/XOFDWxjUJxJ6XlpY=b10ExGDESNbEbNv=bR/WSvUWOuPWOUYWbEmJ0p1W0M0JSRDJSs/=bN1XSFQ=bj1Eb16EOsDW0u/XOJxXSWqEbU1Ex16JSuxE0j1Jx5vJbJqWbGxXSGAEtR6J0pY=tJqJbWAEOWqEYW6WYsqXliYXOJ6JSUYXS16EbN1EYJP=bWeEt=vWt=1EYR6JxFDXtJeESHvJlM6=OJPEtu0EbRDWSW/WSEbWxwDXSRPXlRDWt=b=tuqEbuQJSJD=Oue=tMDEOsqJbw0JbR0ES5mWxWQ=tW/WOGxWbJxWxuxWb5Y=SiUE0WAWxiYEtMDJSp1ExGqWbU1XluQEYNYJbw6E0jU=tN1JSF0Wb=bE0M6ElEYWSW0ExivXOwAEtjbXOpm=OjvJSsxXO51EYMPJbvbEOG/=b=Y=YuQJSFxWls0Jxsq=lNmExvv=tWQ=SRqEbimESW0XOJ/EOu/EbN1EtMDJSEm=OGA=tReWYuqWSNY=SHYJxGqWxwP=OW0JSi1=tEY=tivXSMAEbEU=ts/XSJA=Yue=Yi1=SGDEtjvXSMxEbE1=O1/=bGAXtR0XS51JlNUXli1WbjY=bM/ESw/XOuqWO1Q=ljvWbHbXtEUJ0sAXOW/JYR6XOw6ExHb=YNYEb1xJxpYXtR0JxU1ExMQWtiYESMPXSwDWtJ6EbimW0MPExvvWtJAEYuqJSNY=tEmXSMAJxUUWS=m=O=1WOsDExMAEY=vXOMqEtj1JbjvESueEtJDXO10JYjYJSw/JbjUXtEbXtuA=lNYJxpb=bwAWtEUJ0NUEO10=lWDWbF/XSw/WOsDWbEUXOUbWtJ0JSi1W0jYJYM0WlNbWSsD=SM/WlpUJxJDWbF0ExGe=YMDWYEbWSHmWYiYJYimJxRqJSwPXO1AXlMxJSwxXlR0ExJqWxNUWS5vJxU1XlMDJximXSi1Jb10=tR/JlMAJlsqJxsAE0s0EbHbJYE1WO=YJS10Jxw6WYR6Wtjb=SFQWbNmEbWDWx10=bpYWxiUWxjYXljYEti1ES5vWOw0XtJQ=bRqESEvWYRDWSpYJSMxJSvYXSjv=OvYXtR6=bW0JSwx=ORqXSW0=OsxWxsq=tR6WSR/EtWQExMe=SNbXtimXlNYXOFAWxsqWlsqEOimExMqXSsDWts/WOw6XOwQWSRPJ0=mWYp1J0iUWSw6=OJQEOJqJbJAJxRP=SvUWlW6EbweXOWP=YsAWx1xJSHUEtp1WxUU=Os0WbiYJxE1JlJDEYW/XtpvEluqJlW6=SweESWeEOv1=tW/ExuA=YRDJ0R0XOsPExHbJbRQEx=mJYpmWSMQXSGeW0ueWSU1XOpv=lpmJx51JxiY=bv1WbvUEOGAXluxJ0JqWO1QWl=v=OJPEtsPEYj1XSJqJlNv=YWxWxpbEOJeJbw0JYEmJYMDEbw0=SHYESWDES=1W0sqEbFeEbMQJbRPJSsxJbuQEb16=Ovv=SUUJ0R/=bG0XS5bWOwx=tW6JbHYExF0WlWDWxJ/JSue=bJeWS1DWlRDWx5bJb1PJ0RDWxWA=tNvJxuPW0pUJ0W6ExRe=bMQW0=YJSseWSJ/WSUmJbEb=l=UJx1xW0MAXOW6=ljv=SJqEOu/=SJP=tuxEb1Q=YRQE0W6ESRAEljUWYuPXOEYJxv1WbHbWbwQWxUUE0iUWbuQ=OpbXlj1ESEUJYRPEbEb=lpU=SimEYMDEOjv=YEUEbRPWxpYEtJqXORDWbFeWSGDEORPJYpUJlWPWxjYXO1AWtJe=OFqEOpY=tW/WSWqExsq=OsP=SU1=bFDWO1QWxFe=OwAEYJ/=bUbJb1xESvUXli1WYJ/W0=UWSM/WxRPESuPEtMxXOJDWOpmXtpvXOEY=b1QJS5v=bNv=OE1JxMA=YsPXSweJxGe=SGq=YMD=bpv=YRPXOGqEbN1WlWeXOF/EOvbJbHb=YEvESvYEYsD=lJ/EO1DWSseEt=1JxsQJ0NvWlW/ESJ0ESM0JSi1=Sjm=lMx=bWDElivJ0EYWON1W0R/=bR0WxHmE0M0=l=U=YJ6EljbJxvUJls6JYE1J0ReJbvv=OM0Jbu/WYuDJbFxXlWAXtJeWxpbJxuxEtNUWbEvJ0J/JYN1Wtj1JxiU=SsDJxWxEbw0EbuxWYimJ0pYEbHbEtNb=OWqXlNmWSwQWSUvWtN1ElsPJSuPXlR6EbReElR6=bGeXSseWbs6XtMqJSG/JbMq=bWxXOEmEYW6WOMxW0Nm=tu6WxsDJSHYJbGPE0sQ=bFqJbRDWOGA=SpmEYM/WSsQWbpv=OvU=YNmEbR6XSWAEOFQWtReEtNYJb16=bGxWlJxEYW/=YWD=bJ6XSuqJSpbJbjbWxvbWOvmWxRQWlNbJSWQXORx=SRxESw0WxGeXtMxWSUUWbpbWxHmXOpmWbMQJSNUJxRDExseEtpvJ0=mEYMqWlWxXO5YElR0XlNvJxueEOp1WORP=YsPWtW/WbuQES5bJYiYEbs6WtR6XSwPXS16WSvUWSGD=bRqElJQWYuqJxpUXtiUJYjYXSsqE0s0Jli1Jxs0EYNYExUUWbw/WOR/J0i1=bw/=O=UWbJxESJQ=tJAWxJ/Jxjb=tuxXOU1WO1Q=OpmE0s/JxNmJSs/ESNbEbv1Wbu0WlWqWxj1XOpvE0iYExuQW0iv=SF/=Os0=SJ/=OGA=tp1EtNvESHbJbjUWxM0EOiUXSu0W0u6EtjvJYsPEOEYWxWeEbJeExMAJbEUEbRqJYJ0Xls/=tEYWS16JbibWlN1JSwxW0JP=lsQEOHbJSsP=b1AW0Nb=SMA=tsDWO1/EOi1JbvbExMxJxUvJljUEb5bEbHb=YuAEx5YJbM0JbUUEOpY=tpmWlMQ=OHb=l=v=OMxJlMPWlMqJbsAEtpYE0sA=bM6Jxu6WSweEYJQJ0JDJYMPJlNYJlpUW0jmWxivWbUmWYW/=ORqXtuPEbJP=Yu0JSu6WSNbElueE0im=b=Y=OsqWxuQESWAJSUUXO5YE0WeW0NmXOsQXSJ6=bsAEtp1Els/EOueEx1eWx=vESMAEbpYEtu0EbHY=b5YWtu6WtEYJlRPXOsQ=b5YWOpmXOwxWbWPWtMQXOWe=luP=YWQEbRqXtuxWSRDWtW0WYivWSuAWS1QEbRAJbGQ=OFPXOUYEls6JSjm=S1Q=tW0Eb1QJSJDJSvmEbuxXOG0EbjYEbp1=lM/XSWPJbsDJbuDWSs6Eb1DWYWDJbimWlpYWOsQWlMxWbwAEbRPWSWDWlsx=tEbEbFDJ0j1EljvWOs6WxJ6ExpYWYjm=bpvESG6JYuPJxwxW0JAJbsAEtW6JxWqWxpb=SwPXSJx=Ose=SpYW0ux=O1QWb5bEOGeWbu/ExweWOw6WxWxJxiY=bNvWYE1=Yux=lRDEtiUEtNYE0RqJx5bWxuq=SF0WSwDEYs6ESJ/XORAXOj1WYJ/=tuPWYpYEOMDWOu/ESsAESHUW0u/JSweEYu6ESNUEtEUXOpm=ls0=bu/=OW/XtpU=OGPW0RqJSMq=tJxWYJ0XlJQJbEvXOvb=SW0JSw0WSWQW0EYWxpUEbNbWOM6XS=vExpvJbRAWx1DXtW0JbUYEYR0WONbEtE1=lJ0ExvmEOEU=tJPExGDElsAXOpUEYEvJlW6JluPJbMq=b1q=luP=OsqJ0sAWOweXSsx=OiYExUYWbEvXSHvESWq=bM6WYWeWSMQ=SHvWSNvWtMDESvYWSE1Xtp1XtMP=b1QWtJQXSuqXtuAWbE1WtuPWtM/=S1xWOwAWSMPXOJPJxW6WlR0ESvUWxpUWbiYWlJq=SJ0Wbp1Ebs0E0E1JbGD=bMeJSw/=YMQEYu/WOvmJYM/Eli1Eb1QJxwAWSvYW0M0JlMAWlNYWxsQEl=YJSGQXlsAES5vJSu6WbRDE0MDWYM6Xt=b=S=YJ0EbEtWPWYRDWYu6JluQElMxWb1qWSFeEx1/WSJDJS1/J0p1XlMP=YsDJbRA=bMqXlRqEtibXSFAXOJPEbuDXSUvWbGAWSwPXlu/=SJx=SsqWOiUExi1JS1DJb1QEO1xEOM/WO1xESiUXSFeEOJ6ExibEYuPWx1/=tJPEtMqWYRPJluDXSpmJlRx=OWxElJ6=YpbJl=YESw6WS=UXlibJxFeEti1=ls6ESWq=tEvJSw6WOFAXSG6ESsQWS1DJSMD=SW0ExvvExvmWbu6JlWQWbU1J0sDExG/Wb=UElW0=S5mWSiUXtJA=biU=bG6WSseJbu0ESWAJbR/XSwQ=ti1JbWPEYiv=SEYJSRAXSGQW0WqEORDWxJ0ElpUWlNY=SUmEbiY=OGA=tMxWOHUJb=mWYW6=bvUJbN1EOF0WbGxXSJxExFqWYiUWtM6Wb=YEbj1ExpY=tsqJlj1ESU1WbUUE0MQXSJAXtWQ=YRP=lR6XtJ0WYNvXSRPW0ueJxiYWbwPEbjYEbFDJbW0XtW0J0iYWOW/W0NUEb5UJxJx=SGeW0=UWlu6WtpvWSM6=OM/JlRQWS1AJS=m=YWPEtWeE0J0EbW/J0M0EbJq=SWxWbFQEO5Y=Sj1EOu0XS1QWSuxJlMxEbjmEOsQJYNvWtMxXlMQJbGeEOMeJbwAWxsDWS1QEYjbJluAJ0Nv=Ou6ElWAJYMAEYpm=lR0JlMP=OEY=O5YJSuq=Ss6XSuqWOHbEts6WlJqExu0XSJ6JbRxWOE1EOHmXlpbEtJP=bG/XSpb=bGPWlpmXSF0WxjvExN1EbWqWSUmXtpmWYu6Eliv=YuDWYuDEbuQXlJAEOW0Wxpv=lEbEOEmJSEbEbG6Xlu0EOiYJlj1JlRPWxpvWSu/JSwQXtu/=lseESJxWlRPXSGeJSsQXOsPWxFAEOiv=tNm=tEb=bNvJYJeESJqJSF0E0W/Ex1D=SN1Wb5UEb5mWbs6JbJ/Jl=UXOG/XljmWSw6XO=YXOsQEbsPXSwAXtM/EOJ6EbvUWSUmJSs0EO1/XSw/EOMxJxJQ=S5v=OsqW0JAJbWqWxN1ExN1E0i1JljbExWAWxHbExi1EOuxW0R6WtMq=bjUExGP=OpYJ0EUJSUYXSRQWximWSNmWtpU=OiYWSMxWYueEOw0WY=mESwxWYsPEb1P=Sp1Wb1AEtjbXSFxW0WDExNvJlMPExGeW0J6Xls0=SEmJxvUJxE1Wb5vEliUWYNmESU1EORQXluQWS1xElRqE0NUWSR6EO=v=S51=S5mXSWAEtpY=bGPEtW6Exw0JSuP=lWxXOwx=bs6ESFQXlWAElibJbsAEbj1J0uAWbW0=tRDEtJ0XO1/JbHbEY=mXlJA=OFeJlibWOJ/XlNmWO=bJbJPJxRAJbJ/=OUvXOR/WSvUXSJx=tj1EbGeXts/EOp1W0=UWYJAWb1xEOHbEx51XSw/JSvYJYR6=SJxWOjUJxG6WSWqJSM/=t=mJbvYXSRAWOJ/Wbp1WtMAESMDWtpvXS1qJSWDJxF/EO=bJbGDWxwqWOFxEYjbXlMDXtRQWSivEbRAJYu/J0J0WlpYJSvvWtjUJb=YWOvY=SUU=YuAJSWqJYJe=bR0WxuxJ0jvXtuP=ORDEbs6WluQESWAJYNYEYse=O=vWxJeWlsQXSGPWS5UWb=YJbvUWYRDXO5m=SW/XSi1JSEmWbj1XOsDEtR/ExpYWSFAWbHb=lJQEOUU=YuxWtJQWYNmXOwAWtRAEbuAWOUUXOG0ElW0ESR6WOEUEtuD=SjmJbRe=lWDWORA=OHbXlR/WxwxJbUvEx51WOFPWxsAJSiUEti1XOGeWxuq=bpmJYJqWYJP=tRDE0R/XONmXO=YWOWDEbvbJbwP=O16W0ReExFxESpUEbJAJSuP=bEbWxs0Eb=1Eb1/JSG/ESHUEOMP=OG0Wx1P=tim=lJAWt=Y=YJxEbNU=lRP=lMDEtReJSivJbG6Jx16=lWAJSGDJbpY=SsQExwAJx1PW0JeElM/JbGPESHbJ0pvXSvmESiYXOGDJxFqWOimEYibElMq=SR/ESRAWlpmWSHbJSuA=OFxWOJPWlRQJbwP=bJQWbFAJSMDWbW6JYu6EtMQWOMP=YjY=OWAEbFAWbimESRe=bGDJbwxXtMPElRA=lpUWbFA=l=bElpmXtJAExR0EYj1EOGeJ0imWYWPWYM6EO1qWSJAWtM0JbE1J0jm=lNb=lRDXOiv=bFQJxUmWYuDExuA=OWqExNmWtsqXOjYWb1eXtu0ESWQXO1/WONUXOFxWlpUEYR6XtMeXli1=YJ6WxHm=bs6W0j1Ebp1E0sA=bM6WxwA=bWAJxpbJlsqExUbESib=YNU=YimWxuQJlu/=tivXlE1EYiYEO5Y=OwDW0RqJlWAWlj1EOFxWlsxES16WbUmESG0E0Je=lWDWSGQWOM0WbNUWxvUJbF/ESEU=OMeJSGPWOEmXSFe=lWe=OUbElReEO1eEtRxJbp1EOMq=bRqXS16WOwAXO1qXtM/XSUUExRAWtsQWtNYJxEb=SsA=OF6XlR/XOM6Xts/Wbw0XSWPExRq=bpbWt=vJ0ueWts0=tu0Jl=YW0ueW0R6=buQESu/Eb1PEOJD=bvbEtWq=YibJYWP=OMPEORPJlu6EbMQExjbElsxJxW6XOuDXtNUExUYWbFeXS=vWOEvJl=UJlW0=bF/JS1PWbGPXtsAWxWxWx1PJYs0=lueEOFeExpvJxGQES5bWOWxXtj1EOiYEORe=lM6XSibJS1qWt=mEOw0=SReEYiUEOwqElJQWb=mXSJeEb1A=tu6WOWqEORAWOEUWOivElpUESimWx5mJxUUWbFD=OJeEbJ/WbNv=O1D=OMDJbiv=OU1ESWqWOFDXOuD=OEYWbvUEYs0=OJ/=Spm=OGQXlE1EYjb=OM/E0RQXtsQWbUbXtivExJxXORQWOsA=bN1JYRx=O5v=S=vXOF0EtRqEOFQ=lJqEbwxJYW/=bW6W0NvWbpv=lJ/W0NmWtM0JYj1EtMxWOEUXONmJxpm=Ojb=SwQ=OpmESsxWOjmWxNUXlMPWtMxWO5UEbvbJxMqEtib=Ow6XOsQWYpvESMDExJ/XlsDJ0ReWxFxEYjvJbW6XSuQJSNUE0MAE0JxWlR6WYsAJYJD=bRA=bG6=YW6XSp1ExJxElj1ExiUElu/EbuxEljvEtEbWYuq=SsQW0NY=SFDElMqEOEY=ON1=bFQXOibXtW/=tMe=SF6JxvvWS=mWlsAJYMQXOwDJ0seWls/WO=U=ONvWOJ0E0EvWxNmEYE1JxG6J0seE0NUJbMq=bU1JYpvXOu/Wx1QWxs0ExHYJSR/EYRD=tu0=SM/=lsqElEvWSRxWbJ/XSHvXSRxJ0MAWYpmXtRAEbs6ESMD=OibWYiY=OFeEOGQJYMxJ0MQ=SR0WO1AWb1qExR6JYWeXlu/EYR/WbweEtsAElWQJlpvXlNYJx=U=SFDWOwQEbiU=tuqE0uqXOFxJxJA=ORAWYj1EbJ/=OsQE0Je=YsAXti1ExGDWljYWS1xWS1AESUvEYiYJliYWbJ6=tM6WbG/JSJPWbu/WOJ6XSEYXljmEbJ/Ebsq=SHYWbNY=bEmXSG6=bJ/Xlu/ElNmEl=1Xts0XSHbJYRxWYivJbuqJ0Eb=SRQEbsxWxwe=YuQJYJqWYim=lM6EOUmEbG6XlsPWSGeWbHbWtibWOGA=OueXtu0XOHvJlsDEOMeEOseEbRA=buAXOMAJbWxJSvYJ0=bXOJ0JSWqExjmWbvbWbwqJbJPWSGP=SvmWOj1=bGAXlJx=tu6WSsqXSMQXOUUEtWDJliUEYJ/ESv1JbNv=SNYJSNm=tWP=bN1=S16=SGAXSN1JbJe=tNb=SvbEORAJ0WPXOJQWOv1ESw0EbwxXlEUXtjmXlR6WtuqWOj1WYMQWS5vEOMeXlEbJxNmJx1QEOM0=YMAWtuP=bJA=OJqXljmWOUUEtibJSvm=tJ0WbGeJYjbElNU=OuPEl=UEb=1=Y=mE0i1WOp1WO=vJx1/=YReEbimWbFDJlj1WSuxXSibESuAXOsQJxN1EYJ0WORPXOpbJSuPEYpmWxJPWYuPJS=UW0ibEOE1WYsqXlM0EtMxEYJ0=tJ/XS1PXSJ/WxF6ExWeJljvXOuAEONUJYR6J0sxXO1QXOR6Wls6EYjbEl=mWbWDEO1x=O=bJ0J/EtJPXSMeWbJ6JbJQJSsQWSiUE0=U=tRAXtu0JSHYEbRqWYuqElJDWSwP=OHbWSH1=ORQElivJbpvXS=UXts/WOUvWxHvWbG/=bEYExsQEOEUE0u/WSWQWSFPWSuAXSUYEbWD=Ys6ESs/XOFq=YRxXSRDExM/EtRq=SvUEYpb=lpvEluDE0iYJbuPEOFA=SW0EOWeESpmWSGDW0JAWOW0EOueWbueXO1/WSG0WxJeEYEvXSJAJbWAJxHmJxJqEtiUWYuPJ0M0=SpmJbJPJYMxXOvYWbR6XOJx=bi1JxWQWONvJ0Wx=bHUW0JQ=tJA=tpvXtNvExpv=SE1JYNm=OJ/=bj1=YuqWOw0EYsQWSRqXO51=tNU=Svm=lWP=lJq=tE1WYjUEbWeWx1Q=bGAWxwAWbMAWxs0=OR6Wb1q=lEbJYW6ExHb=SHYXSu6EYs6WtJxElW0WxG6JSWx=bN1ElpU=tuAWbFQJSMxEls/Jlue=SW6E0JP=bJ6EbJ0Xtsx=SR0JSjmJSJQ=OJeESiYJb1xE0JDJ0WQ=b1/JSRAWxpbXSwDEYM/E0u/XS1eJ0=Y=bjU=YWAWSWAJbEUXOUb=l=bJlWxXtuPEbw/ExFxWlWQXtM0=Osq=Ys0JbUUWSRqJbueXtE1EtRqJSsAWSHbXlsxWbNmExFD=tpYWxJ6=bsqEbUbESHmEYuqW0j1XORQESsq=lp1XSM0ElRQJl=vJSuDWx=vWSweXORqEbuDEYRPWSN1=bUmJlpUEYE1ExRAEliUExGeJ0JA=YuAJxNmJSW0EYp1E0Wx=lpY=bw6E0uxXtp1XSs6WSNvWxJDElsPElJPWbsAWtibWb5UXOEYESUUWS=bXtN1JSw0W0JqJx1eESRxXO1DXtR6=YJQEbEbESWDEOiUEbHU=SMqWSiv=OueJYibEO=1JSWPWSR6XtuQEYibXtWPXOuPWbwxXOpbWOJDExJ6JSu6XOsAJ0EmEYMQ=OvYJS1xEYRxJbs6WlW0ESFDJxjmE0s/=SMe=SvUEx=1=bi1=t=UEbuxXl=mJYWPJxGxEOGeWxwx=Ys/WtReES1q=bMeWS=Y=lNUXSW0=Ys0=SM6EYMDWxsxElRxWbsqXSWQE0WPJ0i1EOMAJlsq=Yp1XOuPWtiv=lEb=OR0ExuQWSHv=SuxEOFAExJ0Wb1xWYR6XtpmWSsqWluxWOuPXOJ/WSEYXtJeXSFxJb=YEOWPWx1eESibEbWPJxvbEY=1EOjbJ0MD=bG/WbGQWSUUWOvYESp1=SR/=OGPJYuDEOMqWtJeJYNUEYuDWtMAWOuqES5bXOUYEYibJ0u6=lMPJYJ/J0iUEluq=OwQXlMPXtMe=bGxEbuDJYRQ=bW/Jxpb=lueWS=1JSNm=bvmWSsxEOHUJx1D=bM/EbMDJbR6XljmWOGqJlseXSEmEbwx=Ssq=SMAXO1qWS16JYW/ES=1=SReWSWxWSW0ExMeExpmExF0XO5vWYjYEO1AJbR0WxFeXSRqEOvmWtsPEbwPWxpmJxMQXtNvJ0jY=ljmE0NmE0s6XSWq=lRPXlJ/WbW0XtR/ExMQJYJq=YivE0u0XlM6XOWPE0sxWlseWYuAJb=YWbW6JxEbXlEbWbJD=YJxJlMeExMQ=OiYJbGqWSMx=YJ6=OGPJbwDJbiv=tu/JYJQEtRDEtjvXO1P=YpmWxReExpYXOw/WbvU=S5YXtuP=tJ6=YWeEtpbEO5vWtW/=SNmEtRAWlsqWSJeWtp1JlpbXtMAXOwxXSUUXOuAWO1Q=bi1=OsQXOuQ=tN1WxWqJbw0WbsQWbUmElJPWYMD=bs/EYJx=SW0JS1DEb1/W0RPEOpYWxiYXOweWYEv=O5vXSGQ=SiU=lRPJSReWOs/=OR6ExuQEYNb=tR0XOGeEtM/Jl=bJbMDWbpYJSMAXOsqWxsP=bueE0EvXljmJSu6JbwPJxWqJSu6XOJ0=bR6El=1EORDW0p1ExU1WSWA=OHY=SEvJSReEbM6Wxu0XOF/EtMqWOUbXOG6JS5bWbUbEbWQEOG/ExWDJ0jv=YR0=lpY=lNbXSG0W0j1JxRAXOw0=SW/JSvYExwPEbiUXSuAJb5mEbsDWxivEbw0EtueEx=vWbMP=SGqEb5Y=OwDJ0WeJ0NmWSGDJlEmWxsqE0R/JbM6EbH1JYJPXS5v=lJ0Wbiv=lj1W0J6J0MPWx10EYuQWxvUExUUJYJqW0jvES5Y=bpYJxMeWYjUWSJeWOGDWOMeXS=vES51WtW0XtimWO=bJbHU=tJ/EYNbWxuDXSimXOEmW0J/Ebjb=OF6WxvUXOvmJSw/EOUv=OibEOUvJ0u0EYMDExG6E0Rq=lM/Wlim=OJq=OsAWb5bXlMq=YNYJ0JxJbE1XlE1WlJ/ESWPXtiYWbEbEtEvWORqJx16=OFDXSiUElJ0XlW0WxGDJYRA=lu/=bJxJYsxW0iUEONYJbwAJS1qJxWDXSReWbse=l=1=ONvJ0=U=Y=Y=Y=bEYNmJSFDXO5YWbjY=OiUWYR6ExweJx5mExHbExw0EbRe=b=v=bE1Jlp1=OWQEORPEtWQWOFeWOw6EO51EluxXS1xE0uAXtpv=S10JbMPXtu/XlpbEOJq=Ss0ElsA=OivWtpUElJxExGDJ0seJxFq=OG/=SJQXOMPWtJ6Ex16WOFPEYJeWS=bXtNv=SpbEbRDJ0MPE0WPWO5bESWqWbEbEbM0Jlu0JxFDWxjb=SuAWYjUESRPWxRe=Ss/EYjvXOw/=tWPJbHUEOuP=OpUWtivWlW/=SGqEORPWSi1JSH1W0EYJxRDJ0ue=O5YJbHUWYu/WOW/=SsqXSFqE0=mExHvJl=1WYM6JSW0=Oi1JlEvEb1/=bse=OGQEORDEtu6WxGqXOweWYRQXlpmEOF6XlNbJluPJ0NU=bGqJbMAXOEbWlW/EbvbWtiYJ0sxExMqElseJbNU=lJQEx1eWYMeElNUWSvU=Ysx=bMxJxweWSMe=Su/ES=1=SG/=SJqJxi1EOwAWOjvJxjUXlW6XlNY=SW6JSjYXSGAEtMxJlWqEbNYWxGAJbF6Et=vWlsxWOW6WlMxXl=bJx1xJxWqWtibWOJPJSwQExJ0XOJ0EOGxWxGAWbseXORD=lNbEbN1J0jv=YJDWYueExvbJb5mEONUJYpUXtjY=OuPWYWQExGq=SUvJlWxWOw0Ex5mESFqW0seJYWPESJQ=O=vJbivEO5m=bMeXOR/JxJ6XSp1J0Nm=ts/WlpbJ0iYWSGPWSuA=tWAJbp1JY=U=bEUJxN1ESNUWOJe=lj1XOR/J0E1XOjvXS5mWOHvJbs/JbE1WxiYJl=1WxWeJ0WQWYRe=tp1EYMPWSG6XS1Q=b5UJluD=SEvXOFPWOu/WSweEYEUJYW/XSMAExRDEx5vEOWxJSH1Wbse=YWxESHbJxsq=tJDXSNvJYEvWbu0EYueXtJeWlJAJxN1WbFPJS51=ONbJbs/JSWxWx=vWSHmWtsxW0j1XlpYXOG6JxFQ=S1xESUvWSNmXSN1JxJ0JbsxExHUWb=1=tuDJ0sPEOU1=Ssq=tpvEtWqWxWP=OsQW0J/WlR/XlseXtMAWYuDWtJ0XOWeJbjbXtJeWY=mWtivESw0WOu/Eb1x=bN1XluxJb=UJlW/WlWA=ls6WxWQ=OF6=lsDJSRPJYR0Eb1e=lEbW0R/XtjUW0=b=tN1=YuPJSsAWOsQ=lW6ESvvESibEtW/WO16Jx5b=Oue=SR0JbwQ=bG0WSW0XO51ExuxWYM/Xtue=YjYWlMAJxvmW0pmXSRxWOv1=YuQJx1DJb5UJSJP=bEbEYEUESGqExM/EOFAExsD=SEm=YuDXOpYWxGAWxpm=l=m=bFA=tjvExF0WYM6JbWqEbiYEbwPESNbXSRA=YM/EOFDXS=mWbG0EbMQWYWqWxR6=lsQE0uqWtu/ElpmESibExR/=OpbWSFxExuxExpbJYjbElpvXOib=O=YXOvvWSvmEbUYESpm=OEvWSF/Wl=YJbsq=YR0J0pvXOuAXSE1WSRqJYW6JxRPEbUvWYWDE0J6JS1xXOF/XSUUWxJ0ElM6JSWqEtMQ=YiUJYRDJxu0Jxs0=SuPWSFPXluqXSMPElimWbi1=Oi1XORqEYNUWxj1ExW0XSFAXSsqJSNUE0R6EO=b=SUmXO1QExM/XOueXOGQXls/XlW6XOMeXtim=YsxEbR/WO=YWO5vEOHY=bWeJSGPExWqEbpUESGDESuqXOFeJbWAXOuQJ0WQ=YMeJl=mWxNvWxjvWSF/ExHb=OG/W0RAWOsDE0sqEOJqWSpbEbN1E0NmWORAJlMxWtJ6XtMQ=b5mJSWP=bjYJYJPJSUbEtNbXSivEb1DXluqXtW/WON1WxNmWbjvWlR6XtJxWONYEO10EOivWtueXOwD=bJQJS=Y=OHbJbMQWYRQJlu/JSpb=tsDXOp1=Sj1XlM0WOHmExHYXlEb=tM/JSEvXSGPJlWPXOJDElWeWOjb=OJeXtRPJSHmJbw/ESwqWS1/J0Ev=OjmEx5YEOMDXtWDExs/JS1eWbN1EOEvXOjUWxMxWbF6ExuDWbGDJbRx=t=b=tEv=SWAESi1W0EvJbsQExu/=bWq=O1qJ0u6WO1xWSFAWOG0WSNUJl=YJYMeJlp1WOJ0WYuAWxGPEOsA=YWPWYWDEbUvWtuQXOsx=SW/EO1PWSWqJYp1E0J0WSpUWSNvWYWxJljU=tW/ExGDWbsxXlMQExj1=ONYWSJx=tRQXSwDJYM6XSjbJlRqJb1/WlpvWONYWxEYJSUYJbReJSiUWYiY=YueXtReWbM0XSUbJ0MD=Spb=OMQEOHbWSp1EtEY=OJ/=bUY=O16E0W0EOR0Wx5UEbsA=YMQESsxWtJPXlJq=O5UWtivE0MD=b1DJYsAE0EbESpb=ORQ=OwqEljYEYjY=bRQWbpbExJ/W0=vWxi1WOF0XSUU=tiUExMx=SU1EtNmEljYJ0uQJSpbWOjbEbJAJxs6Xls6=t=vJSHvXtuxEluP=SFQJSG0Wx=1JYJeWSMDJxjbEOuxWbR0WlJqE0JxWOGA=tRAJbNUWSFQJlu0JSUvWxF6WYNvWxEbE0=vWxv1Jb1/ESjbJYReWlW0ExM/EljYExpbWbR6JxFxJbibEbMD=tM/EbF0=ORQWxUUJxpvWSM0Wbu0EOMPXSF6=bNUESJQWO16J0JPXtNU=tj1J0pv=OJ6WOsAJYMxEOMA=lpU=YJ0XO=1=OMqJlR0=tNmJlp1XSGq=bMQJSWxWOH1ESuPXtWxExjmW0MxJbpvXtNmWS16Wbu0WSRQJSRD=OR/WxM6EOivJbweWYEUExN1XSp1EbpvWSsAXtpUWxM/WSJAExGe=OvYESNmE0jvWl=vJbFq=S5UWYibXOFAEOpmWYJeJx=b=bibJx5vESFeWxi1JxF/WlN1JxGeEOW0WtjYWOJ/E0JAWSJPEtp1EOvYWlsx=OivXlRPXOJDJlWeXtibESwD=tMAESiUXSHm=bWDJbueXOvYJbNYJxJ/XSvm=b=1ExWAJx5mJxw0EtMPWxUbJSsPEx5Y=bFAXOGqEx=mWtsAW0RAWx1eWSvmWx1DEbR/J0pYWYNv=lMxWxiv=bivEbEUESUmJlu/JbJ6WlN1XSWPEbGD=bRDE0uA=b=mWtNY=tRx=SJPWSJ6EOsqWbJ6Jbu6JbjmWti1WxF6EtR0ExueWbWAWOj1Wb1AJxR/E0sxWSMxWO51=bs6WOu0ExuxWbib=tp1JbWA=tEUWYEUWSvvWl=YWbvbJxjU=lj1WSjYJbue=S=bEl=UExRxJlu/E0RAJxu6WxsxEY=mJliUWtNmWbWQW0jYWtsAWtWDJYRPEOuDJlNm=lJAXSvbEtWPXOMAXO51EOMeW0WxJbW0XtW/EbGqXtWAEb5mEbWPElMQ=YsqWtJ6XOFDEljbEbw6ElMPExwxJSEUWSRAWOHmWtWx=OjU=bMxES=UJYsqJ0Nv=tW/=ORQJxW/ExRA=tRxElivJ0RxEYN1=lWqWlM6EYjUEOp1WlMAJbwDWONUWbpvWxs/XOR/JYu6W0u/JbM/WYM/=OGPWYNmESHYEbWDExMD=bwq=O16WlivJYp1XtuAEx1D=bEUWbpUWSv1WlWxWSRQJbGPJSJAXSJ6WSimXtimJSpv=Sue=YuDWlsDW0NmXlNbE0pYE0sqWSGP=YsDES1DXlMQXlN1JlEvWOuPWlMPWO1qXliUJSRA=YEmW0R0XSseJbJxExFDJxj1WSjmXSwAJxH1WbjYESwxWxMAE0u/XOG0E0MeXORPWOHYEbWeJ0ivWSs6WbF/Wx51XtR0XOWQJlWAE0RQXOw0ExR/ElE1=YWPEYiY=OvUXSUvEtpb=OMxXlWq=ts6=SGPWbWPXti1XS1AJ0iYEYM6=OwQWluQE0WQWOJQEb5UWOEY=bG0Ebv1JSM6WOMDWxpYXOiUJlMqWxJeJ0EbExRA=YjYXSuQElJqJYuDEb5UEOw/=tE1WlMx=OwQJYp1WSMe=tReESG0ExvYEYJ/=OwP=YE1=bpv=tW/XOReESEUW0=vWxM/Jlj1JSimWOH1XljUJlNm=lR0JbJDElMP=Yp1XSJPWbHYWSjUXls6WxM6XlR0EbsxWb1PEbpUElj1EtJQJxv1=b10=tsqWtM0EOJeE0MqWSpb=Sib=SW0JxjvW0=m=YWe=SjUJSweEbNmExvYElWxXtp1ElRxWbG/EtRDWbjUW0=mXtRPWtW0=YNvEbNmJSueWljmXlN1XOs/WSFxWbivJ0R6XlJQEx=v=SEmExu0=SRPEls/WtR0WYi1XlN1Wb=b=OWAE0R/Jbj1=SsxXtMx=O5mJbHbE0NU=Oj1WbvUEYE1XSF0ESWPXSUUXli1WxUmEOMP=SwxEYRQ=ls/ESUvWSvvEbs0ExW6WSJ/E0MDXSpvEOG/Wbv1=S10EtMeJxjUEbi1WO1xWtNmESF6WOF6WtsPExwA=OJAJSR6EbW0JSim=SWeWYJ/WOjbWOJA=lpbESuAWOJQESuDWxJ0WxjYXSMP=lsAXO5YW0W0JYs/JbjYEx10JSs/ESw0XtWqXO1DWOu6=YJ6W0WDEOEUWSimWbpmJx5YW0JPWYM6JS=1ElMxJbs6WlN1=YW6=SHv=tMPXOM/=l=vJYibWSuxWYibEbuxWOu6EOpbEtjmEx=v=lJQ=SE1WSEYWbwQEOj1JlsPEtsxES10XOU1W0pvXS10EtJ6EO16JbHYESuqE0MqE0s0XOW0WSF/J0s6JSW0E0sAESs0ES1DEOuQEbuQJbEY=OJx=tEbWxNb=SGx=YRP=YM6ESMxEt=1JlJeWSNbWSGeWlibWSsQ=bsA=Sue=bWQEtuq=YsPESiY=bwAWb=bWtsqE0s6XlNvXOUm=SMe=O1D=OFqWYseJx10JlMeWYMPXOM6Jx51EbE1E0NvJbjm=OpmWb5m=YJxW0sDWxG6EbEYWxJA=tpvEbFQESs6EOGqEOWAESjmEtjUWYMDExJ/WSsxWYJ0E0NUJ0MDWbjvWljb=SMqXlWPXORAJlsQ=bFxWYReElWq=YMD=SjbXOs6JxJ/ExwP=OMD=Y=bWxUbJbE1WtsQJ0=bW0=bJ0J0WbG/JxjbEOivWtib=YpmJxw0WtJeEOivEbu6J0JPEbwQWSv1=bUUEYj1XtsxEYReJbi1EOj1WliUWxw0ESWqEbMPXOG6E0WPEOEm=tsDJSJ6E0WxXOjvEbv1WxR0JS=UEOFeWSvYE0R0XSibEYuPEOJ/=SR/=O51WOFqJlu6=tsQWSjv=luxWSiUW0MDJxibJlJeXSRD=tsqWxReJSGAExNUJbE1ElE1WbpbWYuPJb1/W0Jq=YpvElue=tMDJlWPXlWD=l=YJ0=bJbjbJ0MxWlJ/WtWAEOHvXtWe=OJ6Jxjm=bwAWS5UES=YWYNUEti1XOj1Els6EONbEbMeE0RqJ0N1Ex=UEYRx=OReWYWPEx5Y=YM0XSHYXSUb=bRQEtN1XSsPEYMPXtW6=bWDJlpmWORQEOjvEYEUWOWQ=lEUWYsDJSue=YMQ=ONmXOiv=tpv=YsAEO16XSimXOHm=bwAWSF/XO1q=OHmWxJDWxv1WYjvWbR/Exi1Jxv1=SHvJ0M6W0MPEbUvExEbXOpvES5UWbsPJbpvJb5vExF6XSJ0EbUUE0Nb=bR/XlEUXlEmXOWPEYM0JY=YJSEY=tEY=SReWtMPWO=vEYWPWSivJS=1JYWD=bHY=lRQEOEUEOJeExpYESs/WS1D=tRQElEvEbFxEYMQWOWPXSG/=buAWluQWl=mEtWxJ0JxEb5YEbjbXlWQExW6Eb1/WSwqXlNbJbiY=SMAJSJqJbsAXlJQE0pU=ORPEOJ/JSMAWlu/=tJ0=lRDESuDJSw6EbvYJbp1EYW6WtRPXSsx=lsPWx1x=SuxJxWPWtRP=OUYESHbEtjvJYjmWx1AESjU=SH1WSjUExw6WOEvXORqW0WQWSG0EYuqElR6WSFxXSG0=YWqESsqWYWxJxWxEOibEbHYEbw0WbueJluDWtsA=SNmJbW0J0pvWSUb=SMPWtp1ExHYJb1PEtsAEOGDJx=YEOUm=l=bXSUbJxWA=bs/=tpYWY=1WOsxJSNYXSHbWxF0=tRQWbUvJYpmXOFxJbuq=tJPElEYEx=vWbM0WOiY=lsAESFqElMqExEYJYMeEluA=bGqEYs0=limEbJQ=OF/Wbs/Xtib=luAW0s0W0E1WSs/EluQJxsDEbHmXSw0WOibWONUXlsxW0JDWtj1WtReEYpmJSW/EluqWx1AXOimJxMAESJAEbG0EbRqWOJ6EYs0ESNmJbFAES1qJSJqJxp1JxGA=O5vWbN1EbF0=bpYWSMA=O=b=lp1WOW/J0JxEOMeEbWDExWDEbR/ExRPXOJQ=OEvXOMQ=bu6JSGqXOueEbvbJlEb=OiY=lMx=ljvJbu6ExWDW0EvXlRA=SWQESJQEbWqWbFQElWeEOEYWxjb=lNYEb=bWSjmWxH1WtWDElMPJbGeJYEYEYseWY=YEbRD=bWqXlW/WtN1Wlu0=SJxWOsxXlM0ExHvW0J6=YuqWS1xE0JeJxUbE0pb=YsqJSJeXlsQ=YWeJSw0XOweWSU1Jbw/=ts/=OFPXO=vE0M6JxJPExJ0WxJAExJ6=tuQWlR0WOHbExue=tReWxpbEOWAJ0pYXSsDEOFPXtEUXO1/JSNU=OJeWbGxExM6XSG/WOu6Wx=U=OvvEtWP=OiY=YRQXlueXOuPWOjU=SFxW0uxWbwxWbJQWxGeEOFPEx1AEYMx=OMAXSH1XOMqESF0ExW/=OwPWxF/=SN1EOG/=ORDXOGPWSiYWtiYEbp1EbMx=bsx=tpm=OUbJxiUWxuDWlRqJlEYEYibWxs/=tJqJSEY=bJAE0MAJxsqJS1AW0EUWtEvExsPXSivElsx=SRQ=bvYWbJPXSJ/JSW/WOMxXSsDXO1xEOR6XOv1EOuqJYMDWOjbJbG/EtWPJbGqWl=1Els0=YjY=YJQXl=vEtimW0ue=tNbJxjb=bs6XSHbXSwqXSMAElj1JbvUExFqEOjU=SpUXOUYWls0WO=1JxFxWbFx=bu0ESWDJS1A=SpmWtjvJxWDJYEbWxJDEb1AXS5mWxUbXtpbWxuAJx=Y=OWPJYWDExWqElM6EOjUWSM6WxU1JlWeJ0MQWbGQEOFeESG0JYReJSJPJ0u6WSEbESjvJY=mJxJAEbGqXlMe=S51Wxu6JbvUE0sD=bNbWOJe=SvYWb1eXOvvWxEbXOR6Wlu0Wxj1Jx51JbpvJ0RD=OH1W0NbJSNUWbF0ExWP=bFQEbWx=ONUExG6JbvmEOF0JYseJ0u/JSEmJSuAESMPESs6XORQWYW6Jxib=OpvWOR6J0MDE0sqExMeESGQ=OEm=YjUEbGAJx5mEtMQWbpmWlsDJb=mEbu/=bjmEtRPElj1JYMx=YMD=ljm=S1eW0JqWxuxJxNvXtivEtp1WxGPWlEvExJ0WSjbWbJxXOWAESUvWbs0JbUYExuPWSuQ=YjmJbRDJ0=1JbsxXO5mWYM/=tM/W0JPXtEvW0jY=SUYJx=1EtsP=luQEtRP=tpvEluAJbs0WS5YXtW6XlM/ElR/ExWeEbj1JbNmWxp1=ONmEYjmExGeESF6WbvUJxFqJSu0EbFPEY=bWOw6WxW/=bFeExFqEt=YEOJ0Eb1AExGDElRD=OEvE0=YE0NbWS1PWb5U=bFPEYsq=Ou/ExHmE0M0=tiv=b1eWlsPWOw6ExwDXSUYXSNb=OWQWOp1JS5UWx16WYMxJbvbXtMx=lJDWYNmEOsPWYW0JbvbWbNUWbwx=OueWxFPXOR0EtJ6WOWeJ0=bEbFD=buxES1QE0R6=YJP=SU1=bWQWxR6XSRDXSJ6ElJ6WYR6Jbs6=Ov1WOvbExGQWts/WS1Q=OHUESv1Wljv=lMxXSwqJb=mXSjmWl=U=bsDEOiUElRxWSFD=OF0J0JeJlNbESH1XSwPE0MDElNYWYMQEOFDXSj1=OW6XOHvW0WAJYM/ExEbESU1ElJQWYimES5bE0EmEOvmJSMeEOW/XSRQWOHvWS1DJlReXOMeJlsAXORPJxu6JSMQWtsqElNvXOu/WtR6JSMAEb5bEtEmXSsAXtR/WSiU=SF6XluA=tEvXOWDWSFeEbGeXlR6JYMe=SsQW0sQW0JxXOUb=Oi1Elim=OwPEtjUWSimWSjYXti1E0i1=SNmJSE1J0We=tR/=YMQEtpYWxR6JSFDES51Jlu0XtsqXO=bExJ0JbNUEbiU=buqWxUUExu/ExUYESWqE0N1EbG/ExiUEYjYExuA=tRPElMPJbGqEOMeEYR0ExuqWxRA=lJD=Ss6WY=YXSvUE0sDXOs/XOvvJYivWluD=SsD=luPExvUXtu6=YjvWlseEOFDJlWP=tu/JlRA=OM/WSFq=S1q=lMPESJA=SuDWbJeW0sxExUUJxHbEtMAJ0R6JSM6=ts0XOHbEOEUWxU1XtueWOsDEbWAElpUEx1PWtWQXOjbJSMqWtjmJbu0ExiUWxux=bs0=b=mEx=Y=OEYWYMPJlRq=tp1=YMP=tJQWOEUWtEvWlMP=lWDXOuxEOJDXSWx=lEmEOj1ESM/JxEUEb5vWOwQEt=Y=SiYW0NvWtJxEbuqJSM/WxJqWSwP=OMDElRq=ljvWlJxJbWqWO1qJbjb=lMPESuxWO1xXlsqEtjvXt=U=SU1=tMDJliYWlW/WSFDWbpbWSWxXOFxXOFqESiY=lJDWSEvXtWeW0pvESM/=YiUEtuAJSHUE0RAXSibEOsA=ljmWS1PJbueJlEY=YMxWxibESRxWSUUWYuxESJAE0J6WSFAElJ/Jbu0J0pYJlR/=S=UJb16WYR0JSimJSNb=SsQXlWqJb1qElRxJYRQXlW0EbReWxuDESuAWYpvEY=1J0jmEOHbWOpvExNUE0uAXli1EOH1=t=1=Y=YWtpb=b1AESJxWYjUEtjU=bjUXSG6Wxp1XSW6=OMqEYReXO1eXlW0=SimWx=1EtpUXtsQXlp1=Ow6EtNvWSFqEOGPE0EmExjUXtJxWb1xWO5mXOwQXtMx=YJqJbH1EO=1J0W/Wtu6=SReXtp1WYJeWSNb=tsA=YsPJY=1JSFAJluDWSuDWS1xWYuAWS=YWS1PWtsxE0WAJxJeEOFqWOR/JbNmXOw/JYiY=YsAElpUWbu6=Sj1EYR/WxM0W0J/ES1DJlu0XSNbEO5b=bNmElR6=bJ/EOw/WSUb=bWAEx16WbWxWO10JbFQEYpmESu0WtWqExWQWOu6=SHmJS1q=OjUWO=1=tR/Wx1PJYsxWOWP=bFeJSJ6EtRQ=b=1=tMD=tM6=OFqJlsAWlWxXOwqWO1qJ0R/=OjvWbFe=luPXS=m=YReWx1eXtj1JSJAEluqXtWAWSpb=lu/=bNYWSueJb=vXlMxJbH1ESG6WxNbWYu6JbpYJbUbJli1E0JDE0RxWSN1EYse=Oj1JSG/Jxs0EtNU=YMxEYR0WS1eE0NYXSuPESFeJYpbEbF/Wls6JbJxJbMeXSM0=S1PW0MA=ti1EYEYJl=1XOW0=OpY=SsAWxvvWYjUJlM/WbMeWxEYElseESR0ESM6EtRq=SuPXOM6EOsQXlueEtR6XSRDWbs/WSG6EORe=tM6JbM6=SiYWSj1W0s6EljbWlMDWt=m=SHb=lRA=bvYWOv1WxseWtEvWONmWtMQJSW0EluDElWPEbGDWl=vEtsDWOG6EOWqEljmXOHbJb1e=bEmEtWPElJDWbFqXlRDElN1EOwP=YseEb1qE0uQJbuPWxvYJ0Mx=bpm=ls/JljUWONmWSR6Xlp1Wb5mES16Jxs/JYueEYM0JbEYJb16=lW6ExjbJbWDEY=UExRAWYRQWxvYWOsqXOivJYpv=bv1Eb1qWxM/WOu0EYNUWSuPXSWAE0J/XlRqWO1xJ0iUXSuQEtWAWOHmJxEm=OMA=bGQJxWeXtpYW0RxESGeXlMPWtu0EOGeEt=mWtsxEb=bWSMAWS5m=tuQEORQE0sA=OJQXOJ/XOHmWOHmJYuQJSv1J0MAESM0=OJQExMPEYpU=tRAExF/WOGDExp1EbWeWljvJSpvJbjbWSMA=tM0Ex=vWb1AWSMe=YJxJlMqJYW/=bpUXtuPWxHU=b5bEluQWSi1EbjvJbwDJx5UExue=YsxJbUYE0sDWOs6=SsPWtNU=SibWSJqEOJAJbR/=bibJYJ6W0=1=lWeESJ0WxHbElEmJlsP=bibEbEY=tWq=b1qJx=vXtW6JSJ6Jx1qEtJxE0p1ESR0=tR/JYW6ES1q=buD=bNmWx1AJlMA=b=b=S1A=b=Y=Ys6JbweEt=U=YM0=SEm=bFPElM6JSEUWxwqJbF/JYs/WbR/E0=bWlEYJ0NUWOp1EtWeXSFPWOFxXOuqJYJx=OHbEbNUEYMAWSu6WxJqWOJD=SwAXOFP=Yp1JbWAWYuPWSEbEOF0ESM0WxM/XOu/Xtim=YWeWOGQJS=b=ljmWbEbXSFxJ0jbXO1QWl=bEOuDEOim=SivE0p1JxGAJlJPEbNb=bs/W0EbXOvbWSpmElRDE0N1WlsDJSvYXSu6=YJ0WxpmEb10WOFD=tuPJ0u/WS=YWYWPWbNvWbwPJbFxWxJA=SHUXSvbW0J/=SRxEbRQExwPJbwA=OsPEYWxXlW6EbW/WtivWxuQEOvUElue=OF/ESMeEtJ0EbjYXOjUJxF0=SjUElpv=buxExEYXlim=b16=bJDWYM/E0jbJS=bJxsA=biYESw/WSM/JbEYWSsx=YNmWxG6JliUWtjbXOHUWbwAJbjv=OJAExG/W0M/ExsxEbNvWSW6=lj1XtWQESJeEYiYEO1P=YMxWORP=OMPJSwqXtueEtWAXSuqXONv=O=m=lWA=tMPJxiUJSHbWbEYEORxExpU=OwQ=Yiv=b10WbGq=SGAWONvXSFQJb=bXONmWlJ0JlJ6WYpUXtMA=O=1WlRxESEUEOMA=O1A=OueESGeE0RP=bpUXOWA=bFxEYEv=SJQWxuqESN1Ex16=SHUWxFPJx=bXlsQEtjmW0W/XOj1XSMxWbwPXtJDJ0sqJSvY=OM6J0J0EbR/ExM6XtWqXSNmWxEU=OFAJYseJSuQWOGPJxFPESjmJlMPXONY=O5vEbWxEYs6JSJ0JSvvESsQ=lu0=bNmXlMQExMxXSwx=S1D=t=YJYMPWxRP=SJxEYs0JbpmWYuqWOFPES=bWbWxWSMxWbF6WSUbEluAWxGxElsq=YsDEOj1=lWeWSHmWO1AJlJAEY=bExM6XluA=tW0Wb=mJxHv=SFDEYW0Xts6EO5vESEYWOs0JYR0ExFqXlJDJSibWxjYES5YWOHUXtM0WxJQWOGqJbivEbwDJYWAJSJeXSpYExRqWO=mWxEmEx1qXOvYWb1PEtRqJ0pU=tWA=lWq=Osx=O=vWlMPXlJeWYM/JlWqExvm=Oi1=bseESF0=bG0WSiYWts6Jlu/JxGP=SMq=SEYESRPWbpv=tMQ=l=UExHmJYMxXtWAEOs/ES=Y=YjmESMQ=tib=lR6XSueWxRA=SJ/ExMqWtJAJbv1Ex51Jxu0JYEUExsQWbsqEbivJSReWYM6Ex=mXSvvWbJPExReElEbWx1e=tW0EbweWSsxWliYXOwPXtNvWYW0ElEmJxvbXtpUWYimWbE1JSs6ESG/XSwD=bF6XSG0XSMeWxReESuAJxFqXlM6JYNUJbj1Exwe=bs6ExibJSuAExE1WYWAEts0WxjmEtRQXSvbWxNvJbHmWOpbWSR6=lR6Ets6ElRAEbwxEbRQJl=bJ0uAJ0RAJ0=mESwD=lJDEOiUXOsqEOjbEYJe=tM/=SG0EOpvXOvbXSMQ=S=vEx=YEO5m=O5YWbuDXOJQJx=UWOueWtWQ=OpYXOse=SGAES=U=SsAWS=bXSw/JYsQXO51Wb1eJxMA=SuP=SuxElMAW0M6=O=m=Y=U=SM/=bwxEYJAEtWQXSpYEbN1XlsQJxGx=SGP=b1eEYR6EbsQ=ls6XtpmWt=v=YNY=SMQ=tpUJ0JQExRQJx=mEtNY=SFDJ0MAJliY=bwqEYMAEtiU=SGxXtRPJ0JxExw/XSNUW0JA=bJeElReWtj1XOuQJxsAXOUUWOHU=bsAJYibEtiUJxF/JxM0Wxvb=SR0WtuPJxMxE0MxXO=vESFeXOvv=lR6XSGeWSs6XtsD=OH1Ex16W0sx=YJ0=bFPJxGP=bvbES=YE0sxEYpbExW/JYNUJlu/JlJq=bRxElWeJYW0=Ysx=OGeEtW0XlJ6WOGQJxEUWxM/=YJA=bFxESwPEx5U=b1PEYJeWlW/WtiY=bG6ExEbXOs/WlsD=OvvXlJQExRPXtivWYWPEOMQJlRPWxUmJxsqJbEmWO1xXOw6=bMQ=OpmJ0N1Wt=UE0EUXSRDWOH1WluPXlW/XSsDExwPXlW6WOse=tJQEtib=YM0E0JqWx=vXSRxW0ibWlu/WxsqWbWPWx51=SRDWlJx=SpUEtMQEYuAXSwqXS=bEYs/=YMAWOwxEbsDJbp1EbR/=timEYue=OG/WOib=SvbESFxExHbXOReWOR/Wxwe=tE1ExvU=bJPEbGxJSEYXOR6JYE1XO=UXlpbElNbJ0pYEO10J0jYWls6EYEU=bJQJYjYJlu6WSsDWxRxJxpY=YsPXONvW0WDWxseEtsxXOjbWt=vE0JD=bNmWbH1Eb5Y=bGxWOueJbFeEOw/E0JAWb5bXtMxXOU1ESiUESwqJ0MPJSuDWO=1JbJAEOGxW0NYJSimESpUJb51JSsAEbW6EOuDJ0s/WOp1W0s/W0s/XSJPWtpbJYN1ESG0Eb1xEtNvJYuQWtNYWOGQXSvmXtJQ=tEvEO=b=bEvWbF0El=UWxw/Wbwq=S=mExR/WSj1EOGAEbGDWlR0JYj1WOH1WORD=lMAJbR6=OR6Jx5vJS=1=OvUJlsAWOMqJSJ/JxJe=OR/JljmEbWe=tRxWYjm=SJxE0JeJSw/XtjUE0seElNvEbs/JYRq=lseJbM6=bMQXSiYEtuP=OEYEOH1JliYEOFqWO1eW0sQ=OMDXSHU=SNm=lpU=bMqXOuAEYEYW0uxEOJ/XlMe=lMDWYNvJbu0J0iUWx1DJlEYWlMq=OM0JS1D=O=UWbF0XSG/WOwAEtjUWlW6WlNYJbGeESwqESu0WbGAWtEvEbRx=Y=vW0pvEbJQ=bRDE0NUW0WxJlJ6XSwA=OjvEY=mEO1qE0NvE0W/WxvUJ0pUJbW/WSHYJbR/JYibES5YXOW/WbGPXORxWtEUEbjb=tJ/=bMPEOwPJxNv=lR0E0J6WlsQ=SNb=bEmWlEUXluAEO=vEbGDWSRDEOu6WO1eEOJq=SJDEbFDJxNvJ0iYWlM0JbuQJSJeJxF/E0ivWb1QXtsQWSJAWb1eWOue=l=mJxGx=bEUESimEtJ6ElR6XSMQXOE1ESpvExG6ExJDEb=1Ex1/ElJ0WbFx=lJDEx5mEtj1=bHmWbweJSUbW0Jx=tWQWlNUEtW6ExpUJSFx=SR/EYMQ=SG0WlRq=SEvWbuDJlM/Wls/XtJQ=S1AEYMqWlpvXSN1WSW/=l=vWlpb=SHmJxHU=YEb=OUbEYJAXOwAWSWQWOEvJljUWOvmExEU=bEYWbjm=S5U=ts/Ebw/ExvmXlWQ=l=1ExEb=bFqJxJqXSu6WbMDWxF6EOR/ES1PW0=YJb=bXSGxWlMQJSGxJSRDEONU=SR/=SJxWlWe=SFQEbu6J0Nv=O=YWx=bEbuQXOsP=Ss/XlimEOuDWx5bWYMeJbv1=YMQXOsxEbuPEbF6XlJx=bvbEYReJSuqJxsPJbsQJbMe=SGx=SG/JlEvWbiUE0ueJbJeJbU1=YW0=bG6=tsqEbueJlseWSvbWbEbEYRPE0M6JSvYXSEmWx=m=OR6JbGqWSFPXSRAJbFxElWqWtEvEtJeWlW/=Ow/WOUmWlMQJbwA=YNUJbsP=O5bJbJx=SWqEOMqWOFPWxRQJYJx=OwQ=luA=Oim=OF0=OpY=bs6JYu/=SF6=tN1WSu0Et=YEbGqWSR0JSuPXl=m=tuQ=tWPESNU=SN1=SGxESFAWtjU=OjmWtJ/EbMPWtibEbi1XSw0JYpUXlpvWlW/EtMe=SjvElM0Jbpb=SWeXOEvXlM0WxsDXSu/WlueEbM0=b1DEbEvJlim=tu0EbpbJlNv=SJDEOjUW0sD=bW6EbHmE0MDWbRAWluxJxvv=SsDXOwAElJ6=tEY=YRAXSvYWbUUXtuAEOsAWb=v=tR/WxMPJl=1Xlu0JSH1=tEYJ0J/EbwDWS1DJYu6ESivJxsPEYN1XOR6JYs0=SivJYJPEOJ/=b1qJb16ExueEtMxWlWxXO51JxJ6WOvvXSGPE0pvW0sPXSJ/E0J6=SWP=l=mJxFDXSJDExu/XOJDEOseJbRAWYjUEYRDExwxWlpbWxwD=lpbWlpUJYEmEOvYJb1xESv1WbUY=tMeWxEUEOu0EYNbEbFDJbs/Jx=Y=bUvEOJ/XSEYXtMqWSpYXlRQEbpvJlW6W0W6=bvUWxRqJYR0WbvmW0sQEOJxXtJx=bJDJ0uAXtpbWluD=OJ6WSWQEOMD=Sp1Jx16JYs6WxwAExjYXOw0J0WPJYR6WbW/WYRA=OUY=YuxES1x=OweWxvbJxUUEYpY=YivJSuPWtuxEO=vES=UEOjUESw0XOWe=YpvWtpY=OsDEOEvWtNUXlReWb1PJxsAWxweJSFPXt=1=tibJYMq=SEvESiYEY=mXliv=tWqXtN1WOJAEbGQElWDXOMeWbJ/EYEYJbGQJ0JxWYibJSFQJxJ0E0Jq=lux=O1qWlu0=tsP=Svb=bMPWSN1=bGx=bsQXtiYW0Je=tiU=bRqWtM0W0WDJlEmJbMeJbG0Jx5vXts/XSs0JlW6ESvbWO5U=tJqWlpvJSwQWOpYJbuxWxMqWOEv=bEY=YW0WtsQJSsxWxs/JluAEbU1=SNv=lRQExFQ=S10WOw6ElJ/Et=bJlEYElW0XlJDExwqJbHUJbF0WSJ/JSGPWbW6JxUvWOJxWtRQXOF/Wx10XO=1WlMA=Yi1=OuAElRqJbWPXSjb=O=m=Ow6JYNm=liYExjvJxRqESNYJSU1WluPExM6=SEUEb5mXljvElJPJxv1Jx=UWxpvESJQE0WPW0jUXls/XtMDWb1PJYuDJbNU=bJDJxjvJxFe=lEmExpv=YRQWtEmJ0R/Xls/J0p1XSMqXlu6JbueExHYWOj1WSwAEbsQJxW0=SRQJxR0ES10XSjmJx5b=OGDJxJQEOvYWxuD=lMAXOueEOM0W0=1EYMQEOHYESwq=YJ6WbHUWxjUWONYElsDWSwqXOw/XOWqEtibJYRQXti1=S16WYjvE0u/WOGxEtpYWSsxXOpb=tR6=lJ6WS5U=OFeJlWD=OueE0=YWbM6=lJ6=OHm=tjbJbWQ=tJq=YibE0EvXSMxEOG6XtiUXSUYJb1eJSibJYJ6EYNb=YJqW0s0J0RD=Yi1JbMAWxEYEOJ/EYRxEx1qEtMQWOEvWxWQEt=UWxMPJbF6XlRP=Svv=YE1EbF/JljUEOvbXOJ6EbWPES1DEtWQ=OGe=OFqWSF6JSp1WxMqWOimESWqWSuP=bMxWOWeXS=m=Ouq=tEmXSJPEbpmEOUYExEbEO1xXOsqJlM0XOW6EY=UJSF/J0MAXtW0=YR/WS5mJSRxWbGDWO5m=OvYEts6XOuQWxRq=bGeEOjvEbJQJx=mWbs/WtiUWb=UJYsAESJQEbRx=SMxJSvYESGPWtu0=lpYEYu0Wbu6=Oi1JlMDWtEYJlWPJ0s0ElJAWSMAWtuxWYivXSu6=YJDESFDWluqEYp1EOsQWSRxWx10WxH1JbRQWbvbEtJ6Jli1W0E1JlivWSjYEtEvEtR0JxMqEbE1JYE1XOpUXOFeJlMDElsDWxiYJxpmE0NYExJDWx=1EtiUEONbElMDJSpvWYu/JSWxXlEYWOMxWlEYEYiU=YsAWljbWOGq=ljbXOvUExM6=YNUExGQWYM6EbuQJ0i1JxwqEbwAEbuQ=libXOHmWSHbWSEvWYJ0XO5m=SNv=OWDJxjUEbW/Wb1DWbHmEOwDXOuAJ0EYJbGeJxNUJbJ0EtR/=OJAEl=bJb1DJbJeWtJQExwDElRxW0E1WxsxWYpvEx1/E0jbXOsqWlRDWx51Eb5UJSs/JbpYExG/WxwDJYsAEOwD=SivJxWeEx5mWtpYESHbWtuAEbHmWYEYEbMQEbMQElueW0R0WxG0XSu6WtNYWYM/ExpbJlR/WlNm=SwDE0M/WOGDJxR6=YNY=OHbWS=YWbs/JbjbWbF/XOGqJSHUE0i1WYpvEbvbJSEmWbJAWONbXtNmWOpYJbRqWSsxEYjUWOFeEbu/XSWPXS=YExG/XSFeJYpU=Yse=b10Ex1D=bjvJYuxW0uPJxWQ=tM6WlW/=bUYJxueXlEUWbRqJSEmJbpbWO=UJYiUJYJ/E0uDEluqXSR/XSse=tivWOMDJYMPXOuD=OHvJbw6WYRQJSEv=lReJ0RQWO=1=OJDJSw0WxueWlNbEOseXtibJbMq=OGQW0JQXSue=Ow6WOsPXlsDWbwxJSM6W0WQEOwqXOWAWS16JSEYEbuAESWA=buxXSu6JbWqWbs0J0RAEtMQEYsqWOuQEtNvWYMAWOHmE0s0EOFAJ0=mWx10=YuDWlW6JYN1=SUYEOs6=lW0=SsqESF6XlsxWSGqWYJqJSjUJYNUWljvExGqWluP=lRqJxUmJbu0=lWPWxvYJxUbE0uxE0s6EOGAW0J0JSM0=YMeWbw0=YivWYMDXlpvWS10XOFeJbWP=livEbvbJSMQEtW0ExGPJlJ0WS=UJSv1E0JDExpbWYMQJYibJxib=OvYXlJ/XOJAWO5vJbJeWxv1EtMDWbHmWls/W0MQEbEYE0u0W0W/ElibE0JAXOEUJls0WbU1ExW/WlimEbWPWxp1JxRPXSHUEb5Y=OM6E0WDXluqJb1DWSJ6XOWDEbuPEYjbWt=bXS16=ON1WYjvESWeWtuqWSpbWl=m=OFA=luP=OJ0=YMeEx=UESNmESH1W0R6=OjYJxNvWbR/XluAXtJx=ONbXlWP=lpv=Sw/EtRxEx5bJbjvEtM/XOseWls6XSGeXtse=OFAXlseJlWeEOjYJbGAWOUmEOs0Wtu0EOsPJbJx=buPWbNmXOWQXOWqJxsDWOWA=bJ6XSM6=OWqWxU1WbHm=SGxWxGDEOsAWxJPESvmExF6ElseWbsPXSjYESRx=bJ6El=1=S=1XlRDJSjm=O=b=OMxJS5U=l=1JlEbElsDWS16=YW0WYs/=tueEOjUWOWPEbNbJbF6JxFDWxN1Ebu/EtJxXSM/WlsxJlWDW0Mx=SGQJbEv=bRA=bw0=YWxXtpmXS=YWx=YEYJq=O5mWlp1WbvmXSuDWYE1EtJ/EljvWSwAEOEYExvmWtuQJYWQEbGDEl=UXO5m=SG/ESjbJ0WPEbvUEbvY=bFQ=OGe=O=YWxsxWx5YEYW/JY=UEY=YESFq=tEUXSMPJxMqExWQEtimXSu6=Os/ExpbESW/JlWPXO10Jb=1XSw6JSMQEbFPJbR0=YMxEb5UElWAWORDJbUUEb=vEbEYJxweEbJAElR/JSU1XS5UJbW/Wtpb=YEvWlWPJbpmWbs6WYu6ExwqWximWxJPEOGeEOR/XlMAWYWeElpUWxjUWO=mJbjmE0ivEb5vJ0JDXOUvXSjvWxWeWtWD=SJQXSivWxJxEONmExUvWtWqJSEm=buDW0imXO=Y=S1/EOpUJSu6JSRAESJ/WSFxWOMD=OGqEx5YXSEU=lpUWOweXlMqExiUWbiv=b10WYsq=ls6ExJDWOEmEYpU=bpvW0W0XlN1JSRqJSjYJxM6JSux=b5bJbWPJbpYJxvY=YsAWYiU=Ovb=OuAXtMxWYNUJ0=1WYi1JYEvJSMPWYu6JSivXOs/XOUYEtJ/Wbu6JbW6J0p1JxWqWxuPWlR/W0RxEYseW0W6Jls6=tJxWSUm=bMeWlEmESvUWxvUXSWQJlRQEOp1WO5bEbsx=lMDXt=mJxM6W0=UWYueEYp1JbGAJxs6XlMqEOFDXSwD=b1QWSwQExjmJbNvWlJDXOwQWbRQXtuPJSWQElWeWOW/WbH1=Yu0EtEvWYW6Eb5mEYNv=SFQJxNYWbJQ=lJxJ0RxElsQE0JDEbUmEtNvWYsxWtJP=OJ/WbuAEbp1JlMeJYs0XOFDXlsDWSEbJSWP=tJP=lu0XtRAE0JeXSGA=bsPWb51WOEvEYs/WbRAXts6W0s6W0=vJbF/EYNvWSWqEOivESpbWYMPE0MeWtJAJSJxWbF/=tWqElseXlWeEY=bEbM/XOMPESFDJSW0EbWDWxwDExFP=YJDES10=lJDElJPEbRqWtuPXOp1J0MAESGQ=OjUJbwq=OGxWbN1J0iUWOsq=b=1JxWDEbwQ=OW0JSGQESjvWbF/WOJDJ0s6EOiYXlM/JbHU=lM6JSWeEtRxESWAEbRQJlNbJ0MeWx1Q=YjYWSibExWqWxpYExUbXS5vXONmXtEmE0pmESMQEY=mEOuPXSv1ElsqE0pvE0pbJYsQ=OG0EOHbWSWqWOEUXtuAEtNvJSwQ=SRD=l=UEYjmWb=bJbJ0XSF/WSw/=SWeJ0EvJxseExiUEYW0XSvbJxWDJxpmWSWD=OUm=OvbWbUvXOwP=SUb=YRQXORP=SGQWlJAXO1xElNYExuqJxNYEbu/=YuqWOHYW0WDWSN1WSp1XtM0=tW0JbFqWYR/JbMPElR6WYWxEYsQJ0WQXluPWlR6JSiUXOsQWYNvWxHmJxpUXSWAWt=1Wtim=tMDEb5vWxMxExRDEOJAXOEmWYWeJbu0Wlu6JxG6EYRAJxjmExFxElReXljv=lJeXOReXlMDWOjvJ0ReXlJD=li1WbHUXORPWYjv=OFAXSiv=O5UESRQJSWPWxuAWYJAWbue=YjmEljY=bW6Eb1xJYjbXljmESFAEtMQXtu0Wb=1WtNYXOuD=tuqWlpUEOux=S5YWSU1XSimWbR/JlMPJbuxWSGQXSMxWbWPEYiU=lEbExMxJY=UExMPJYR6WONvEtuxEOGAJYW/JbsDWOMPE0uqE0W6WOiYJSs6JbMxJxpm=Ou/XSRQWbvmJ0iUEYNUEtEYXSW0EbWxJSMeEbuxEtibWxUbWOEm=lN1EluqJSUvW0pbJxMeEtMD=tuD=SvbWSMxWxEY=SiY=bFDJ0jvW0MAESjmESG/ExMAWljU=tWP=luq=bJ0XOiY=OMxE0pvWO=YJYW6WtRAXtEUWS1qEOj1XtsQ=SRQEtsAEYWPW0sP=bu6W0NUJbF/JbJPEtJQE0sxXlsDWxU1Wx51JlpbW0WxWSUmESGPWYsPWSWA=SMPWx=vEtjvWxs/=tReEYsQWOGeWtuPWlJP=OH1JxJ/ExReXSvY=OjY=bvvJ0iUWbHUXS1Q=SUb=tpUWbjmXSwQWxuxXOJ/EOGq=bjUWOiYWOW6JxM0Wts0WYN1XOGPJb51ESNYJbEYWbjUWl=UJxuDWtMQExs0WbpYXSW6=SWPES1DJYjmXSu6XSJ0ExwxXOJqE0ivExFxWtE1WbR0ExJDWOGxXlEUESH1EOp1=lRxJxpvJ0uqW0sQJSjUJxGxEljUWtu0=ls/E0uDExUvWlWA=b5UJxFxWlseJbRD=OM6EO5mEY=vWYR/WOHUEOseESM6JYRPWSv1WYM0ExR0=YpYEtuDEOG0JxJ0ESu6=OMAExjU=YM/JxuDJbjmJlWAJlW/ExMPJ0jYWSuD=SGDW0sPWOpYJSR6=lJDWlsQWSpYWtNmJlMDXliUWYuPEYM6Eb16WbMeEbwQEbwxWt=1XtWPWSWqWbRQEbjbXSu6ESMe=SwA=SGQJSwx=YJP=b1/JYW6W0jUWb16Jl=bElJP=tM0Wtpb=bsPE0pbWON1=ls/=OFP=YiYXlR6WbG/ElRA=SwQWYpUE0ueWbEY=OwA=SJ/JxUUWOuDElW0WYEmJxpUXl=mWbwQJlj1Xls6=SJxWbMeWxWxWbEYJ0J/J0pvWYM/Jxw0JxJ0EbFeXOWPEbuDEOF0XtEmWxRQElNUXlRAXtjU=tWD=YNvWb=v=OGx=OUUJxuxXOEmJlReESjvWSjmWOHvEYJ/EOvbJlibEbRxJ0MQJ0Wq=bJ/ExiYWxweXOGAJbEYWxNbXlJ0Ebu6E0MAWxGAEb1PXlMDEYsx=bp1XS=vWbwxWSMxJb5m=OJAJxuDEYux=lWQEb1PWYRqEtiv=bp1WtuPWbsPJ0sxW0=b=SGPEbsAEORA=SMAJSReXtjbW0pUEOv1XSGeXlp1=SsAJ0pY=lRAWOpm=bpvEtJPJlsQEbJ0Jbwe=OMDJYjUWO5vJxs0ExwqJxw6XSuxJxUYEOsPWOM0WbGAEYJ/EOwD=OFQWSpmW0NUWS1xWxjUElM6XO5UWSH1=l=YWxJDWlsAXSJxWtR/EtWQWb1eJbHmESF0=buAExjUXSsxWYMA=bJ/ESUYWSF0=tjbJbJP=SuAElWAJYp1WSGxEYiY=lWA=O1AESMQJluPJ0jUE0=UESwAJSJeExpbEtEUWljbJlJ0=OuAEtEb=O1xJSjvJbJxWbMD=bNvXSNvW0uD=SpvWtpUW0sPJSJQW0imE0Wx=bw/EtWq=bWxXluxEYMxESJxWYuD=tWDXls/EOU1=OJ/EYWeWxv1=bHYEl=YWbsDWtJ6JSwPExEY=YuAWSwQWtp1WlRPWbpYEbp1=tiU=YMeEbEbWbJPJSNvWlpv=b1/=buP=b1AEbjmXlR/WbivWOGPESHU=YRP=Owe=SuxWxpUXlpvJ0pmEYJqESMDXlM6Wx=1EbMq=bEU=S1AW0J6WORDJxNYEbwx=O1PXlNmWSJ6JxvYWbUYEluDXOWeJYJ0WbwQ=OUmEtReEbMPEOW0EOiUJSMxJ0M0ExFDExEmXOG/=SsAESEbJbjbExEv=lMDJSs0XSim=b1eXtueXtivJxEUEb=vJbHmXOF/WtNmWxRA=bJAXSu/Wti1E0RD=tRAEtjY=YWq=biv=ljYWSwxWO1A=YJ6=bGQWO5vEOM0E0u0EbpbES1AElJDEx1QWxG6WtM6=SRAWO1PWtsQEtu6Wxwq=OwxExRQWbsQJSu6=lpUJx1qE0sxEOFqJSNYWt=1XSRAEO=mEOuQXSJe=OHYJxEmWbsxJ0=1WOsDWSiUWlMQWtJQWSMqWbu6E0ibWtWeWtWeE0RAESsqEbsAWSF6ElMP=bG0JxGeEtNb=SweJYMDJxRDElWAXS1qXSEUExW6=YEmEtjv=bWeJSWAWtJDJxW6XSWxEtEbEbReXls/El=bWtWQESsqExHYXl=mJxRPWYpYESWQXSueJSj1EbFQ=OF/E0u/=SJeXSW/WSFe=tWqWxiU=luxJSs0E0M/=b=UWYM0WtJDWxiUJb1xJxjvES16WbWP=OFAJSuAJY=bJxw/ESvUJb5mExpvJSpY=OMqEl=UJSRDWlW0EOHUWxW0XtRAJYuxJbMAWxUYJxNUJxNbJxMqWlueXSJPWbpmWtNYJxMAEYs/EtReWt=UWOvU=tW6WlRxEOU1WYM/JYEU=lseWOM6=tWDEbRDExsxE0WqWbHY=OuQWOG6WtpbJSM0EORQXSHv=lMQJbpvWbNYWSGP=OEUExHvWYRqJlWAWbG/Jx1P=tR/=SwDWxsPESwA=YWAJSG6ElWQXSsqElsxWxpUJx5vWOjY=lJ/WbEmJ0EbESpYJbUUJSWqJlsP=SEUE0E1EYWAWbRAWbwxWtim=SFPEONYWOFxEtiYXtJx=ORQWb1AWORqElpvEbJ6JbN1J0EYWxu0WOjYWbMxEbFDWSEY=tRA=SpbEOuAXSNUWt=YW0jUJS16Xlu6=OWeExWPWti1XOJDEbJqXtjmWbuQEbHmJx10WS5m=lsA=YRPJxJeWYMAJlR/Eb1qEtJAWlpbWOibJb5U=b=mJxWDWOGPWl=UJxUbWxJeJYR/XSwx=tMeWOF0WlEUJb16JxG/JxFAEOvUXON1XOjmEx5mJljvWYW/EOE1WxjUEx10J0MQWSF6JbsD=SweWOwDXtivWxGDXOsPWxvvEtMe=SJQWx1D=OvbElimEOFe=tWP=SWxESsAExW/WbHbElu/EYJxEluqWOFAJxwPEbGAXl=mJSWx=OFAExGPJxUUJlRP=tEbJlWxWlRPJYWAJxjYEbwAWOwAXlpUWbivWtsQWbN1Wb=1ExuQJSv1JYWe=OH1J0Re=bWeXtRQXOJ0WOu6J0ibWYJAXSG6ElWQXOG0WbM/EtMq=bEbWYuQES10JYu6EOJPWO10JxueESUU=SEmEbJDExR0Wb1PWxJ0WOwPWbjUWtWAWOM/=tEbXOs/Wx1A=O1xEO1AWSvm=bGA=tuqJSvbWOUmEYu/W0u6EbJDJbGx=OEUJbUYJximWOFDESGAJbsqElpb=tM/=tEb=SEmJ0WDEtsq=SWxJYuq=SNYXS5YEbWDWxJ0EOGQXS5mXlMPESGDXOH1JYjv=tuPWbs0EtWDWOs/JSJAWlM6XtJeExwPXSueEYiYJxGqEOpvXOGQWxuxEO1QWbRA=S16WlMxWtReWtE1WY=1=tuxEx=1=bRAWSu6XlR6JbUU=t=mXOHm=Ou/Wl=1ElJQJSwxES=bEluAWOJPWlsQWbRDEO1/JSi1WxEbJSiUWOvm=tseEOFeESNmEb1D=bWxEYpvJbGD=SEU=YsDJ0=vWSU1WbMPElM0=tsqESuP=b5Y=bE1WlJeEbwx=YivXtNUExRPW0sqEl=m=tRPJYR/J0W0=bW6=bpUJlN1WxpmWSM/WxuPEtMxEbReEbu6=SGQWYj1WbjYEx5vWx=vEliYXSUYWSNvWtMQJSseElEmExJ6E0W6=OReWOiY=YpUWtN1WSJDWbRP=OEYJlsPJSReWOpvWlMQJxGPJYEvXlRDWYN1EO5UExG/E0M/=Su/XtMqJbUbJbJ0EO51EO=bJ0MeEYuDJxvYWbu6Jbw/XlWQXOjbExW6ElJ/Xlse=bpUWSueE0imWl=bWtWq=tsPWbiUXSu0=Ow0XOG6EtibWOsPWO=YXtNUWSv1J0uQEbvYJlsQXO1AJYRP=YNYJYMDWYMxEYWAEtRDWSEUWxvYE0iYJ0EvW0M6WS1AEbGQE0RqXOR6EYimEbs6WSGQ=bE1Jx1qESW6JbReW0u6JbwPExMqJSsQJYJeESJqWSGxEluxWtMqWtJeWYRDWONvWxE1JxFQ=OE1ESpb=YuAXOvUEOuP=OHmE0EY=b=vW0EU=YM0J0sP=OjYEtu6Wlu6Ets/WtJQ=YjvWOUUXOM6XOMqWOFqWtN1=OHU=SuQJSReWlpYJbFDEbw6Jxw0=ljmJSvUXSu/JluxEbsD=YMeESvmWx1DJYuqElpY=Ssq=SMqESWPJSGPE0W/JlNYEYibEtuDJSF/Wtpm=bsDJ0pmESUbExsDESJ0WbweWtEbWbjUE0s/ElNUXOu6=ONvJ0iUJbwA=YsQWSNYExN1JbRqXlRqWxW0ESuxJbEU=YJ/ExsqWtu6EbFeEbuq=bjYXSMPXOsxW0iYXSpYWSu0=OuA=tWqXOHY=SJeJ0MDWS5UElWxEOR6WxsQW0=1W0uxEOMAXO5mJYNU=tEUWOiU=OHmXtJ0=ls6=tp1ESvmJbNv=lsqWx51WbRxEtuDWYRqXSF6JbUYWYu/E0EbESjvJSwPExwAJS=UWtjU=bsP=SvYXOJ/ExUm=ts6WS5U=S16=Swq=SHmWSs0W0=1JlivWtRD=S1D=SJ6=O=vEYuPJSM0J0p1J0jYXOR6JxW6EOGDEtseE0sA=OjmEYMxXOJqJbwxXtEbEbjUEOs0XOs6=b5mXOFqWlRP=YjvE0RAExFAEbG6EbGPWtW/JSwQJxJ0JSWx=ljUJlux=S5UElR6EbFxJlW6XSN1J0JDXOu6JluxEONmJ0J/XO51=YEUWljUEOGQJxMQJYimEbsDWYjYWOiUXljv=YpbWtsAXtRP=ON1EbJ/EOs6EtWxWtMQ=tpY=SMQEOu/J0WqJlWPXtEvWxWPXOwDEtReWtuDWYu/=b5UEbRqJYsPJS16WSJqEYJ6ExJxEYpbXOpUEb5YEYRe=SvmJxM6JbjbEYs6Wbpb=SM/WO5U=Yj1XOEvXS=bWOsq=bGDWtueWxGeWS1PJlRx=YW/W0uxES=bE0jvJS=vEO10Wx1qEbu6=SjY=bFeEbGQWtMxXOFq=lReJSw6Wb5bWlNUE0W6=SimWxR0=OFQWbW/JSHmJx1QWx5mWtWeE0s0WOEvXt=bJbUbWOFqJSpY=SJA=tJD=tim=bJAWYJDEx5v=tR6WxMAXOwDW0R6EYs6JS51ES5Y=tu6EYseJbpbXOJQXO51EtM0E0JA=tuxJl=YEYsqJ0WQWls0Etj1EOF0EbJ/WYRPWbJqExE1Eb5UEbMAES1eElpUWbM0El=mWxueXOJ0WOMx=YiYEOH1WxjUEOEU=bJP=YjUElueJbsQJxEYWY=1WSs6WbJDWt=1WbN1=YMDElp1EYpbJbRPJlEUWtJQJS5m=lWPES5YJSs/WlJ0WxpUEljUWbi1EtJDEO=mW0NbJSHUWSMPWxjmEOFDEYMAXOM0E0WAJYueEts0ESJDExseJbsD=lMPWl=1JlsDXS5UWt=YWOiUJYJ0Wlu0JbuQWtj1=Sw/JSWQJxGx=bvmJbuDEtsqESwxEYMqWSUvJ0Mq=S5YEtuAExM6El=vW0uQWlJAJSpbJlMqES=vEOwAJxGA=OjYJluA=SG/WbEvWbp1JbuPXOwAJSiUJbvb=Y=1ExWxXSJ0=b5YWbimWORAEbMe=YWQWSu6XSRDJl=U=bWQJbJ/=lMPJSpYW0WQJlsxJ0jvXO10Wb51WlJq=SGqJbJqWlRAWxRAExUmJSpbJ0WqEl=1Etu0EOG0=bNmWxHYEbpYExHbWbu0JbsAJxMqXOEbWOWPESRqXtJ/WtW0El=bJSG6=OWDXOpUEOG/WSs/JbjYJ0M6=YsxESW0ESuDXlM0XSim=SjmEbseJ0RDXlNUEbu0XSHUJxsAJbRDWYEbJbimXSFQEYR0EbvvXSH1WxpvJYWeElpb=bNvXSseEYEmEOHvXt=mXlRQJSwxWOWDWbHYESR0W0E1=tW0WxWAEbEUEtJDES5vEOGDEYMeWS=UJ0J6=YsPWlR6WOw/=luPWO=mJxuQ=YW6EYRAExHYXSFx=bvmWtJxXtjmWlJq=lEYExwQ=YsQXlMx=lReWtMPE0=bEOJD=b51JxRxExJqEONmWSR6WlMeJbGAExp1WOsP=b5vWlEYWlivEx5UEbWQEb5UXl=bJSuxXlMA=OGxJ0NUWxMxJxuDESJ0WSGeJbGPWOimXSibJ0EUJ0EvWOMAW0RxW0uqJbM6WbW0=Os0=lMqEx=U=bUmXSwqJxwxWS=YWb1Q=SueWtp1Ebu6XlReES=1E0M/=Sj1JYNv=SHvW0Mx=SM0Etpb=bw/=lsAEOp1WS10=OUmJbEm=bMDWxvYXSUUJxvmElWQXOGeE0JqESMqJbFeJSi1EOjYEtjvJbMe=YR6WbW6WOG0XtpUXSRQElpmEbGQEbGxXlseExwDESpbXtjm=OjbWtWeE0JDWxMQXlJqWtR/JYW/WYWPW0sQJSpbExiYWSiUXSim=SwqWSwqESs/WOR/ESGP=tjb=bG6W0RDXOH1WOR/=Yib=bueExibJbFAJSHvE0jvEO=mWbG/EluPWYpUW0u/WxWQEOMPXtRDJbuA=SiY=lW0Jls0WS5mWOwP=OW0WSR/JlsPWOjbWSFeES5UEYJ0EOMeEOGQEbsDJb5UJxG0XOibElM0W0J6XtW6JbWxJxNmEOWxWtW/=SseJb1qJlNUXlsQXlpmWbweXOFPJxNmEYJqXOiUEbFqJxEvE0RxXt=vJxGeEb5vJbF0XOM6E0sQWYjvJ0uqJxRA=O5vExHU=SRQ=bJxEx1/EbG0WtEUExMDEbwQElWeESRPWlJPXtu/WbUbJbH1W0u6XOWeE0se=SEUWbEmEtEmXOuqXSuxWbFAWOwAWO10XlJ0ESUUEtNY=OvbWbFqWSUv=Ow0ESpmWbG6JbuDWb=vWlNUJbM6XOGeWOpUWtRq=bR/JSuPJx1QExJQXtu/EluxExR0XOuQJSi1=tRDEOGeEYEvXSU1=bRPEOvmWbRqXlsq=Spm=ORAJSJD=SE1E0J0WSWDWxGA=OGDWxsPEOUmWO5mEYM/=YN1J0uPWbjm=SMDWSNm=Yp1XOUUJ0R0XS1PEtuxJSuD=lse=bue=O5mJYsPEbpvXOw0ESR/XSFxEbGeESw/Jx10E0RxE0WxElWPXS1/EOvmXlMPEOR6XSFe=Oj1EORAEOu/XtMeWSG6W0uPJxpb=Os0XSRxWSWx=bWD=SjbEOsq=OFeEY=mWtRAXOR0WSu/WSjbJ0R/EbMPWxuDEluxEY=UXOH1ESJD=S=UJYJDXljbEOMxWYsxW0sD=SWxXSG0EO5mJSWeXORxXlEmE0sxEb1DJxJxJbEYW0iYEbMAJ0WPESRx=bEmXt=bWOEm=YR6WSuPW0EvWYMD=bGPJSMQJxsQEYimWt=YWbwqJxWAWb51JlsPJSFQ=OEYE0u6Elsx=bWQXlNUJxGPEbpU=tuAXlMPJ0iYWSp1=bimJxJ/EbRQ=SibJxGPJ0W/WxWeESH1JYWDXOMe=lJDWSwx=SNYEYsQEb5bJ0p1E0RAWYMxXtsDXOweWlib=OWqElim=biUJlJPEYWQWbJ/W0sqXlivJxuqXlu/WbW6WlR6XlsQXlReESG6XOvUJSEU=tR/EbuqESJxExiUESR/XSWPEYpbWtWQ=bWDExRe=buQWtW0XtR0ElueEOMeExsA=tJQE0pY=ts6WxGQJSEUWl=1WSJPWSs0XOGQ=Os6WlW6XS5U=SNU=SE1ES=mJxseESpb=OFxJ0RxJSWxXlRqESGAWSWPWxGA=YpY=tW0WYMx=SjYWx51WY=vWbEv=t=UWSFQ=ORQJSNUWxi1XtMDEl=UEtNYXO=v=O51=lEmJbH1EtM6EYMxWSwDEb1/XSGAXOibXtEvEbsPWOMe=tMA=ljbWSuxEbMDXtNbJ0MqJYJ6=YReWtR/JbFQJYu0E0jY=lpvWOUYEYJqE0Jx=tMDXOHY=tWA=lRDExU1JbMQWSibXlNbE0sQ=SimEljmXtuDESibJSi1EYpv=bUYJxWA=SEYJxiYXO1QESEvWti1EOwe=SF6=lM/XOi1WSjUJS=vWb=1Jx5m=bs/WxR/=YW0WlJqE0sAJSsxWONvJbNUJbUvXOUUWxW/ESUbXOu0XtuPW0seWlWQWt=1JbJDJ0uD=O=vJlNvJbs6=tsqE0WPJ0uPXORDES1AEbHbWO=m=biUEbwD=YMeWx=mJlNb=lW6=OU1=SNYWxJ0ExHvW0R/JSR0JSRP=OseJluAXtjmXOWqESsD=SwDWOu6WOiv=bNvElMe=ljU=bJ6EOuP=Yi1EbRe=bWeJbv1=ORAElW6=OMPESU1=tiUJ0iYXtsDE0Wx=bWqWbp1JSR0WOEUWSpmESu0=SJ6EtWQ=OHmWbMe=lj1=SvmESJ0ExibXtMAW0RAEOiUExJQW0EYXSH1XSFPEl=mExMAElpmWOibEtuqWSFDE0NYXtMDJxuDJS51XOWqJ0sxXOUYExvUESJ0WxvbEbwPEbMPJluxWSjY=SMeWlW6EO=YXSHUWOWxXOGP=b5mEbJA=lE1=SMDWYE1XtiYWlueWxJ0WtEUXluAJbuDEOWAEtpmWlEvWYsPExj1J0W/=OMA=YMqXSNvWO1PE0NvXSW/W0sDJSNvWxjUES16JbJxXSEbWSiU=lWAXtWAJlsPXSE1ESNYExUmExJxWbwQ=O1qW0RAEOjvEOWeW0ReWYRq=OR/WxNYXSNUWxRP=OW0WOF6WlJqExMDExF0WbUvEOvmJYu0JbGqEOj1JSibEbsqXOR/Eb1xWbGAEbR0WxsqXSMqEl=1JlNYWlNmExH1W0MAXlR0ExjmWlJAEbiYWOivW0EvWSGxJx1xXljmJbuPW0pU=S1eWbpmW0J6WbR0=YMAJYEbJbN1=lJPJbHY=OjYWSF/Xliv=SFxW0MxXSvb=bRP=bMDXljb=bEbElJDEYsDJbH1WO5bW0JDJSRQWxu0Wb=mWYsQXtivEOiYJYu6EYJ/EYuqJbpUWbRxWxNmWli1=S1QEbwqWljUWOpUXtivEb16XOsDEOMQWSwqJbW/ExM0WbvvXtEU=bMxXSNYWOs0EON1EtJ6ElRxWSs/Wxsq=tRe=lE1Wt=bES1qWlRx=lJqW0ibJSpvJYWqW0JxW0jYXSEUWSwqJlMqWbpvXOGDXS=vEOJxJSFeWSG/JYs0WxR6ExweXtWPEtWxWOFPWxEYWOEv=tjbEt=v=lsD=tsPWlWPES5UJxEYXOse=tRPWt=bJSMPJlJDJxFxJlEbEOJeJYNv=lux=OMQWxsPWSF0E0WeES1QJb=vWb1DEbJAW0RQWbJ6WlRQWO5vXOMeXOMeWxJ/XtsxJYsqXtNvWxs/WSJQWlueXljYWOWxWOUvEYJ0EbvmExM/W0WPXOF6EbR/ExGxJSJ0WbseWbs0=bseE0RqElMqJ0=vJ0R0=YNbWbiUElR6WtseJ0s/EOEmXOj1XtjYXlpvExsPJlueXtRe=SpvExEUJxGDEx=UESFeWluxESFAWxjb=ONm=YR0XtRAWxF0=tNYEtRQ=O16EbGDExUm=SG6Wbux=OWAExu/WlJPW0=UWYuQEtRDXtsqJbw6=OF0=SpU=YjmJbWQXlueEbRxXSR/=b=1ESjvElWxJxW0WbseWlJ6WtsP=OH1JbHUJbUUXORqXOsAWx=1JlW0WxpYESivJbwq=SFQXONvJxHYWlNmJbWPJbjUJxEmJxpmExuQElJA=OJPJbwAWt=YJYux=lNmJxw6EOsQE0N1ExEY=S=UXOs6EYM6XljYJxN1=YMDXSRA=S1qWS=mXS1eJbW6=b1xWSE1=bMeWOHUWtiUExM0EOWxEts6JlWqJYRPJxvv=lp1Wxw/JbJeEbUvJYJQESw0ESFeXSNm=b=bEtRqExwx=tsQEtivWljbEOJeWtsq=bJ/ExMAXlMeES1qJ0sPEbsAWYJeWbUYJxMDJYivJ0RAExsxExue=bFxEOsPEtM0WOwD=SJxWONbJbGAEx1xESMAXOs/XlEUJS=Y=OwqExGxESNmEOReJ0sxJSMqWYjv=tu/EbibXOFDXSsx=lWqXSiUWbWD=OWxWbEvElseWbw/EOReWOMeWOReWOjUJxpUXSEbWOWD=bweEOimWlpb=bu0XO1q=YM6ExRQW0sqEtpbJYRAWYs6JbvYExUmJSvbJSRxJ0RxJlNvJbweJxN1XSWPWSjUExpY=OjmJxwDJx10=SJ6ExiU=OHmEYWeEbFQEtpmXOFDXOMe=Si1EYNb=SWDESR0WYJxJ0pbJxEv=Ov1JbvU=YimWbwP=Ys0Exs/XORq=OwAXlp1WxRAWbM/JlE1JSR/JbWQ=bpvWYjvXS=YJSEvWSuxWbivWOvYWtux=tRDExGAJY=1ESG0JxiUXS5UXS1AExRP=tsqXOWx=Svb=bj1JxjU=YJ0W0RxXlJPWxw0EOWAWS=YWlNY=OJAEbHYJbi1ElJ0ElMeXtWeEbUbXSJQJSJq=tsQE0iYWxUbJljmXtJDWSGDEbJ0=bG0Wtp1ESpbEO=vWtpUXSW0WYNvWYsPESRQJ0sxWlMQXS=UJYNvWbEbWbseXSE1ExGAJ0jvXOMPJx=m=OimWtEmJlJAWOG6J0W6XOEUEbEUWS1P=SjU=SjYJYpb=Yu6WxvY=buQXSMeExJPXOF0XtW/ESu6Wxu/XSF0JxM0JxEvWxuD=lMQ=tW6WlsPWx1Q=SFxJbWA=bwxXOjUWtsAWSjYJbJD=bMxWbvv=ORxEbu/WSuP=OuA=S=UJ0JQJxGQEtW0WOivJbJqE0u0JbjbXSMAWSNvJ0imWSNU=lReEOjb=bU1WYsPJSEvWbGqElWxWlR6=SR6W0WxESWDXSs0WtueWYi1ElNUWbMqW0jvElJPXts/WbEv=OWeJb1qWxEbJ0ivJbHb=tsD=bpv=bEmWls/WYsAXOu0WSFxJYRxWxUYJSw6=SiYExJ/XOvv=SJ/WONbE0jbWliYXS5bE0pvWYMxE0ueWtiYES=UWSJeJluDElJPXSRq=YsDEbNYWbW0ESW6WS=UJxs6XSivWOwA=bR/EbWq=tjv=bRAWYRe=YNvWxEv=tM/W0W0WOEY=YMDXtseWSRPJYpUWxFxJlEYWYN1ExEUJlMA=OuDExueXSUUJx=vW0uqW0WQJlpmWOM0EtNUXOpmElsPEOvmJ0J/Jx5bJbw/=OMx=lMQEbu/XlueJS1/JbUbXlu6EOJ6Xti1WtuAEtuxWxWDE0N1WbWxWbWxJlRxWS5mWSF/WSMeXOMeJbEYWbF/Exu6=YN1=Ou/EbsDESN1JS=vJSux=tuxESNm=Y=UExW0WOw/WSM/WS5UJbwAXSF6EOpvWb=v=lNYExsPWb1/WYpbWO1AWbweE0WqEOGeWlpYWbH1=OMQEbw6JxwDJSW0=tRqWS=YXSFq=lsQW0p1WxvvJxpvWYR0Wx5U=l=vESHUESFP=SiUESMeJx=b=S=UWbMPXSJQ=S51WOHmJbMAWlNb=bFx=tp1ESG/WOHbXO5YWOJDWxWq=YjmJSu6=bMxWxuQ=ORD=YJQXSRAXtuqESF0=YJ6JlpbEbEvW0NUJYNUWlsD=S=vXtEUEljUJxuqWtjYEO1xEOWAElsPXtJ0JS5vExs6E0JQWOuqJ0jm=SNUWbR6=bRQE0=1WSuqXSvUXORqEYJ/EO1DElMDWOGPESGxJ0=UJxv1=tp1E0u6=ONmWYRP=liYEbGPEYW0Jlu6WbNm=tuqJ0MeEtjYJbR6=OHY=bWeJ0NmJYEUJxFQESR/W0M6XSMeWxUbWOpvJxjm=bJeXOFDWSRqWl=vWOweE0uPJlJ6=tJqWSwQWSW6EbRDJ0sPWbs/XSp1WORqWtsDJxGeXSR0XtR6WxJeWlu6WO=U=Sib=SMx=tNvE0pUJ0pUWbw0WYRD=l=1=bvmJls6XtpvWtRx=OMxJxJAXOGDWb=vExNUWOuAWbu0=bUvW0=bWxuDWx5YJ0jmWSJ/Jxw0ESUmJ0WQJSRQWOF0WxFeWxibElWPJSiYWSu/=tW/ExpYESuq=SFDWO1AElpvE0s0WOFxJS5bWtu6E0uA=bwQESRAElRxXOWqEYsDExiYXOReJ0sDJ0J/=bjYWOwAXSUv=SHYJxGxJxW/WlR6WlpbXtibJbvUWtNUJY=YElpmWtN1JYuxWS5YEYNvEOGA=bFqWbv1ExRQJbj1EtJA=tjbJls6XOEUESMAJYi1J0JxJSwA=Oj1E0ivWSW0EO=1JSGq=tWqJSGqWbRQEb=UExUvWOFxWbMD=bWqEbN1JSsP=OEUJSRDW0sxXOGxWtsQWxuPW0J0XOW6JY=v=lW/WbNUWlW/XOEmJlRe=tjY=bi1WtE1EbwQEtMQEtWPJxJxJbsAJ0=UJYsq=OwD=SW6XlJeWbwPWSRQXOJ6WS1x=O1qE0J0XlWqWbRQEORDElivJ0imXlue=Ys/JxMxESjvWOWAWbJ6=S=mWY=mWtueEOwqJbF6E0uQEbG0WOGQWtW6=SwPWxJQJ0pb=OFQXlMxWtNUExsxExE1JbReJYEvXts6WtpvEximXOJA=SUmXtpbEtsAJxweJSEY=SjYJxR0EYiUJbHbE0=1JxF6Wbv1EOWQEtM/Wl=YElp1Jlu0JlW/JSUbJYEUWYJD=SJ/EOW6XOG0WxMAXOueJSuAXOMQEtJDJx=v=OuQ=lR/JSjY=SWxWtuPJSWPJ0J/E0EbWY=vXSEYW0WDWxvvWS16=bJD=bRqXlWqWOFeEtWqJb5YXtEv=S51WbJeWbiv=tMqXO1Q=YR6XlsQElMeXOpY=lMxWxNUXOu6JbG0XSJxEbue=tNU=SMAE0MAEtW/WxGPXOsP=bs/JYJ/JbsQEbJQXSGxWxNYJS5v=tNU=tJD=SNvJxNUE0s6WbM0ElMxWSuPJSEYXOpUW0sDEYu/WORPJSGPEOWA=lRD=SjvEOEmEl=1Wbu6XtJDWxFDJ0j1JxuDXSGAJYJ6JSpmEO1xESNv=lR/EOvbXtpbWbWxWOuPWbJxEYRDXOHYESEvJYuPJbJqE0jbJlWAESRA=bseESpYXOu0=OimJ0N1WORqXOsQJbFPXtWeJ0pYExMq=SuPJbN1EOMeXtJeXtRPJ0sDW0RqEbFqJlW0JlimWOvUExu/Wx1DElMe=tWxWYE1ExFD=bvYEOUmJSH1Ex=UWOjYWxM0JbHUJ0RDJSvYJlRPWYuPWbu/=tJeXSNbXlWe=Su/WxWAEtibWORDJ0se=SWqEtE1WxvvWlMDWOpUJSW/JYs/=bu/JYu6JbwxJxsPEbEYJSpYJxJP=SGDW0iUWxjbWSUYWtMDJSGQ=t=bWYpvESMAJS10ElNvWlNYWx5Y=OJPE0EbJbFQEbiUXOFqESWAWbvYJSWeEt=m=YJDEl=1WOs/JSWDEYWQ=tJ0Wl=mEbRqWxGQJxpmESw/XOiU=SUmWSE1WSwx=tR/WO10=buPEYsD=bUmEtR6=luxWOFDWOG0XlsQE0pbXtpYXS5bXOMe=OF/EtuqJxR0XO1AJSJPXlRDWxNm=YR/XORx=Yp1ExWeWSJ6=bJDXSRA=bjYXOR0JYWq=SF/=O1xJbMA=lpm=lsx=SimWOHmWxu/WxUb=li1=bWAXSpUEtsA=SF6XlpYEOEbWx16JbsxWxuQJ0pYWOHmWYNYJ0sxJlR0ElMP=bwDJSEbExG6XORqWtWqJb=1XSwxJYp1J0Me=YReXlMx=OReJS16EOGPEliUXSM/=bsqESwAJY=vExwAWSUUWOMPWlJxWONmJbUbESFAXSimEbRe=YuAWbueWSU1WSUbJxs6EOsxJbvY=b1PEtiYJxv1Wxu/EOwqWbRAEYpmEOJPElR0ExNbE0pbXS=1=S1eXOEYWS1xXSuDEOE1EYjbWYJP=bEmWOF/=lM0JbFQEbFqExWq=lNvWYNUEYjYXSRPXSGDXlRx=YN1JSMx=lRA=SWQEtpvJSU1JxvYWOJDJSw0WlpY=YR6=bwAXSW0Jb10Ebu/JlpUExMQXtMe=SvvWOJ0=YM0E0W/Wl=mEbseWSsQEYR0=SW0JbMAJSwAJxwAJS10WSvmWbM6WONbJxJDWONU=tuxESG6WSMPExMqWls0EtuP=OweWSWAExsPXtEbWljYE0i1E0WPEOs/WlJ/EOs/=bNv=tNmJbFQJSUYWxwx=YMDE0ivJSJQXSwP=buAJYs/XOs/XOHmXOueXt=vEOFPE0sqWOWe=ONbWxReXlivWSG/WSRAWOUvXSEv=lMDEOEbWlM6WOueWYpvWS1xW0R/Eb5bWxjmWluPXSGQEtReWOUv=OsDW0jvJYj1XOMQXOvbW0J0=OwxESj1Ex51ESi1JSWQXtjYXSFDXl=mEOjU=SWx=SsQ=OFeWlRPWlWxEOJQW0WPEOWxXlRDEYRA=b1xXOEvWSJ6=tpmJxWqJbHU=O1/EYJD=SMDWlWAWxuQWbWqXS10Wx5mJbEYESEv=bFAExGAXOR/XlpYJ0jmWlJ0WxMxXtpY=OFxJlNUJ0Je=SvmExW6Eb1qJS51JxEvXlim=bwP=S1AEONY=OJDE0pYWYWDJ0RQXOE1EtEmJ0=m=OR/E0MDEtJP=SUUWSWQE0EUWSRQXSEUJljvEl=bEbUUXS=mJbFqWbw6ESHvEYNb=tM0=b1AWtiYJ0MDJS10XOvmExGPWxF0ESNvEO5mWxGA=b=bJ0s/WYJAElEmJxU1ESMe=l=vWSsAXlMDEOiYXOjmXSM0E0sDJlRP=YueEbHUJlJ/WlMDWS1/=OGAW0s6WOuDWYuQWbN1JSuQWxpYWbiY=b1eElWAEbuDJSUmWlEmXOpmJbwxXtjYElivWYEmWtN1XOJ0EOGeJ0jU=SpbEb1/EtEbEOHUExivXtsDWbiY=lu6WxHvE0EYWtMxEYR/W0=mJSU1JxMx=O=bWlEYJYuA=buQJ0W6JYuDJSpYJxsAWxGxEbGP=YJAWb1qWli1EbjYWYE1JYJqEOs6=SGeEtpbEb1eJxN1JxJQEYsA=tuQJlEmXOuxJbwqEtR6=bJDEOweWtuqWOJAXSEbWlWPJxG0EtE1W0sxWlWAESR6ExweElMx=S=v=lMe=SM0=tjUWb5UWbE1=Y=v=S1DJYiUWS1/Jb5vElJ/XtWDWOMDXl=mJbuPEbvUJbu0ElJ/=SF6XS16WSsqWt=vWlsAJSF0Etj1WORPESWAElRD=YsQXOuDWtN1EOF/EOse=bs/JSJAJbw6WlRqExM6=OMAEbsPEtj1XOuqJlRQElNbXOMqXtE1WbjmExJAXtWxXtiUExsAEO=mXlivJxEvJb16WO1/WSi1XSJAElMxES5UEb=Y=SH1ExWqWtJAWxWxEx5mESwD=OGAEx5U=tuqWSMPEOEbWtjm=tNUXSp1JbRAEO5YWt=b=OReJYWQWlJ/=tJ/Wxp1WtJqEtJ/XtsA=Ou/Xlu6XSW6WYi1=lJ/=bsDXti1XOMA=bvmWbWx=bueJluQWxj1Jx=mExseW0Wq=SR0JYRQJlM0=b1eXtJxWSEmWxHvJSU1EOwxXtMxWbi1WxNbEOWPExuQWYsqJ0NY=SNYWtM6JxMqE0J0JS5UWSGPEOWQXORQExE1ExJ6EO5mEbjmWbw6J0s/WOJQESUYJ0J6W0NbWSWPElib=SM6Wbv1JSsxXSEUWYRAElj1ES1QXSwDWbGA=YWxEO1eJbF/=ts0=lRQWtNmW0Nm=b=Y=tseWOMPExsqJb=vEOGPXOFDXSu6=Yu6WOEUJYWA=bMeWORQESvUJlM6JxpYXlsAEbvmJx51JbRPWONbEbvbESN1WSUmElE1WbMQ=tJQESW0WYuQW0jmJSM/Ex1/JbwqWbFQJS5m=bMxWxUvWl=b=b5Y=lJQXSEmWx1A=tMeXSjbXlRxWOHv=OG6=Spb=YEmJlNbWbwDXlRxJbNYXti1EtsAJ0NYWSGqWxsq=luDWYMDWYpmESuQElRe=tpbXOHmXSRQJSwP=bjYEti1EYRqXts6XSWA=lsPJSMQEOweJ0Mq=bWeEbUbJ0WQJ0i1ESMDExGPEOjbWxFA=O=vWOvUWb5mXtEmJSRDExM0EtMqWSFeEtM/JlJAEbJ6EtMQWYNU=SFeWlWPJYuPJ0RPEb16ESU1JlJ6ESuP=bsPESMqJbMQWS=mEO=bWxEmWxR/=tJAWSFQXOsxXSGDExRPJbRDJ0NbExG6=YsPJYWAEOEb=O5U=OFQ=S1DW0ib=YiYJxRP=b5mJxHYJS5YE0MQ=bHmWtNmWYseEtjvJSMxXSUbEtsDWO=mWxwDW0JQW0MDJ0seJlJ6=O=1=t=U=bpbJbFq=Swx=tiv=O5U=tjb=bwPXtuQEO=1WlsDWxHYExJxElsx=lWAWtNYXlRDXSGAWYjbWYWeEO1DEx=bWSJAEOjbEOFPWxvbJ0s0=tNmWSjvEbGQWbjbJxpbJbweWbUYEOs0JS5mESjmEluA=lueEOsAJlRDW0s/=b10EtJ/WYsxJxRQEYWPXSw0EO=YWtMQXOuqJbiU=bEYXtM/=tR/ExG0EYNvExJxJbWQXSRAExuPXSJ0=lMQWbw0WOsQWtMx=SNvES=YXtpYXtuPJSivXOH1EYRAEOwxEbsDExwQ=ONvEOWxEO5YEtN1ESF/Wbj1=ts0E0E1E0M6=bibXOMPWbFxExWeWbR0JxGq=li1XtJAW0imJxNUWSpvWtNmEtEvWlNU=tJA=OEvJx=1EYjY=tJPEljUWbUmXOjbElM0WbEvWOsQJxHbElWPJbMDElueJb=mWluDJ0WeXlWeEx16=bGeExpY=bUU=OvU=b=b=l=YJS1PExwqWb1AWbG/Ebvv=b=UEOjUJSNUJbsAXtW0=OF6J0=mE0sDE0imJYR0=SW0Exw0EbUb=SG0XSwqWbRD=YWQE0R/WlNUJYiYJlR0EYJxJ0R0JSiYJ0WAXlpmXS1qJb1DWO5mEOs6=OJAJSJeE0uqWOMxJYR/WOivWOWPJx5mEOw0EOWqEOHvWSv1EbMP=bs/WluxElJ6XSueW0pUXljUWOJDXOFAXljYES5vXOw0EOpUWOMeEOsqWbUmXOR/WbsAElWe=tJxJxsAESsxXSvvJxH1XO1eXOsPEYivJljvWYu/WOwqExuA=b5vJY=vXOWeJYEvWtNvElWeESWxJbHU=OGqJ0sQ=bu6JxRAJSM/=OiY=YiYEO5UWxF/ElWeWOuPWbJPW0=b=SuPXlW6WYsxWb1QXOs0WSJ0Etu0Wxs/=b1xXOJ0XlJPXts0XtE1=lsxJSuAEbWeJbJqW0NmJxu0ElseWO=mJS1e=O5Y=YuDEY=Y=bvUESWq=bHbJY=bEYibXSJeWbNvEOwq=tpUJbJ6JxG0=SuQXSseWxJA=Y=UXtMQW0seXO1eEts0JbjYWYMDJSi1EORx=tiYWOuQWluPWYpU=bR0=Sw0JluqESsAWbuQXlseWxpYXtuQJSUmEt=YEOHvEtW0XSwxWYMAW0sP=lWQWOJq=tJxEbHYXSivEYR6JbR/=YMQ=bNbJbpbEljU=bwDXSFPWl=m=bwqWSWxESue=OR/Eb=vESuQWS=mWliYEOvbJb=U=SJPJx5mWYs6ESJ/EOw/E0ue=OMeXSGQEtWDJ0sxEbu/Exu/Jx5UWbMPESs/E0=1JxG0EbFDEbE1XtNm=YuPJxj1E0pUJ0JDXtsAWtR/=SEb=bweExJ6JSEY=OFAJYpmXOMxXORqWSse=lWqElibEOJ6=bJxEbNYXSvvWSvvXOwxJxsQJY=bXlRPEYEmWYueWO5U=SweJYJDExR0XSjUJYMPElWDW0N1EtuqJSJ/=lMqJ0sPESW/=Ypb=bNmEOGPWljv=tWeJxMQWxGeXOWqWOHUJxUm=OUmJYNvESwDJSJ0EO=bWSF6=SW/WtjmE0WQXSwPJ0u6=bGeWbUvEtJ6JbF6=OiYWbjmJ0seWxJDWSWqWxibWxjb=bibJbvYXtWqWYEm=S=YJSpmXSWq=OEb=YReWlueJbjUWtp1=YiUJljU=l=m=OH1WxR6JS5vEts0WxHmWtNvXOpUWlEUWYu/ElWxESwqWOWeWOp1J0WqJSvmEYu6WYjvJxW0WSjvJlE1WxEmEtW6ESwQESGAXOH1XOGQJYJAEYpY=bGq=OvUWSs/XljUJljv=OpUWxpmJxGx=lueWxJ6WbG0=bWAXOFqJSu/Ex16XtMDJ0MAXSHb=SjU=bjYEOux=b=m=bWQJxJ0EOFQEOwPEO1/JYimJlNbXSMx=SMQElj1W0jUJbFQEtJDXSUU=bM6XONvE0uQJb1xWO1QExGq=tjmJSR6=lRDEYJ0E0ib=S1PWbi1=SHvEO=Y=b1AJSsDWOJDXO1DWOwAElEYEx5UJbJ6EOFQWls/XSEm=lMxJbvYJYu0WOEmWtu/JbW/=bwPEtWeWOFAJljY=tNmJbi1J0M6EOwxWSwqWSib=lsQ=OjbXtWx=b=UW0iYWOJxWYNmEOJe=YNbEbMeEtR6WY=mEOGxEtRQJlsQEOv1WS16=Op1XtMPJx1eJxWAWbW6=OF6=OpYJbH1=l=Y=tNbJ0jU=ts0=YR0WSsPEOjUXSw0J0N1Ex=vEtsQWxueJxGAJbuPESp1WOwDXSWx=Yu6=luAJSJeElpbWSv1XtW0WxwP=YNb=ONmXlNvE0Me=YM/W0WqJSFAWS10=bJeWlWQXS=U=tM0JbR/ExMAWlu/XlMeJSimEYR/JSFxE0R0=tR6=tM0Wbp1Eb=mEOsAWbMPWbJqW0jmJYW/XSG6EbjUEbuqWbw6WlEmXOWQWSH1JlJDWOJPJbGeJxNYJYR/Wxu0JYN1ESsxJSwDEOp1WSEYXO=vEluAJYsQEbseXOFDEYjvWSUmWSN1JYNYWtWxWxFQElMeWbweWSGqESG6Wxv1WbJeWSF0=tJP=SJ/JbWeWYN1Jxpb=OM/XO=mXl=1Jb10JbuA=bvb=OM/=OseWSR/ElJPWtivE0NYElueXtjUXlj1JxR/WxHUJS1eEbpm=SjmE0ibJbEYWlW0J0sDJxuAExEbEtsxWti1Ex51JbFD=OibJxpUWOMeJSimEYRxEtpUEYp1=tiU=bj1=bJPJlpvExHmEbWAJbu0J0uxXtpmElsD=lim=tR0E0iYEbR/=bRPJ0jYXOUYWS=m=S=YJbUUEYMe=ts/=Y=bWxiU=bGeWO1eE0s0ElEvE0pb=YuqJS16JljUESwDXS=mWbjvWx5mEljUWlEbESWDXS5U=bvbEYReJxUUJYReEbG0Jb1qJb=m=t=YE0WQES1/=buxJx1eJx10=bsPXSNvWxj1JSpUJxF/=S1PWSiUJxpmElRQ=bFDESseJbMDEtNUWOvvEluPExH1ExUYEtp1WYuPEYMPWtRPJxp1JlivXtsxWYEmEYWQ=ti1WOpvESvbEtjbWx1eWSuDWxMD=Su6ElR6Exs/ESFe=lim=SjUJSweXSNbEtR/WlR6JbUmXlJx=S=bJ0seWxF0Wx=mExWqJxFqJ0uxXSFxWtEmJYMAWSj1=YWQEO5vJSRqXlu6JbuAXlWA=Spb=Ss0XOU1ESMxESjvXS1/=YjbEbuPXlsxJSFqE0JxWOweESR6=OWq=tJ/EbFxJSRDWl=vJ0sQ=b=b=S51JSs0WbUbWSNYES1AWxwxWx=U=ls0WYJAJbEvJbWx=bN1ESvv=tsAJSNUWYpUJb=bJSuxJYRDESjYEbu0EYjvWOMPEY=UEx=YWYRQEb16WxRAJb16=YJe=OF0EOs0=OiY=YRxXl=UXOUvWOjU=SsAJbvmWtWxE0MPWSJ0XSM0EOwDWlJ0=ORP=tW/WOs6Wb5b=YjbEbG0ESMeEYiYWOGPWbJP=b5mJlJQWxRAE0jbWbj1WxFAEYWQJxGPJxWPWxJAEYuQJSRqJxJQW0=bEl=vES=vWluAESFQ=tp1XS10EYNYJlJeWYjb=OvUEbj1WlpUJ0jb=bWxWxEvWbsxW0Em=Yu6=SH1WSHYEb1DEOpv=OwqJYR/=S51EYsqEx1QWSWPXOJ6JYMQWYu6JY=mEYWPJbGDEtu/XOvbW0W0EYEmWtNvEtWxWbRPJSNbWlsQE0NU=lJ0=Oi1WOpmEtJPWxF/E0EvWxRxEYWq=bwPJx16ExF/W0JDWOueWljm=tNmE0J6XOMDJbFAESEmXtM6XlpYXSEYWbpbJYsAEbNYXSWQWbibESsAEOE1XSWD=SG0XORqXSvbEt=mJx5vJ0NvEOUmEOEYJbW6XOFqW0uxWtJ/JSFeXOp1XO1PWlNYEx1/ExJPEYEYXOuq=tpvJYuPXOHYJYpmJbG/JlRA=OwDJlW6WtsD=lWDEOJ6EbRPWSs/W0RDWYuD=lN1WxH1JYjv=lN1ESwqXSpUWYEmJSNYXSUvWxN1ESEYWOJD=SvbW0uP=Opb=ONbJ0j1EtJxJlMAJx5bEtRQESivE0MeJSFAJx1q=OwDE0uA=bWD=YEmE0WPW0seESRqWSjUEl=UXSM0ESM0XOEUWSMxWbsAJbGQJSueEx1/JYjUWSi1Jb5vWx=vEbHYWb1QWOuDEOjbEYN1=S1eXtsQJYjm=bwPJYpb=OG6XtjvJYpbEbwxXSG/=tuQJSW6=Su/=bNUJSGeXOiUXSJPXSiUJbMA=YMAExWP=SvvEx=mJ0j1=lJQWtMP=SWeE0M/XOwqWSR0=tu/EYsAWliUE0j1JSUUExwqEOHUJxpbJSpmEtNvExF0=ts0=bsqJ0W0=tEYESJDEbwqEYimE0JeXSRAE0WxJ0sQE0uPJ0WQXlR/=lRQEOJA=tRQWOimXSWAJYsDEtJPWbjYXOivEbim=Osq=liYJYRAESHmWSvv=SFPXtsAXSWAE0s/Xtp1WYuQ=SWDWbwx=O1/JbJAElR/ExJqEYRxXONUJYuxEtjvEx=YJb5vJSs/WOwAESJPWtMDWbp1JY=vJbvmWSsqXlR6JbsQXtM6XtR/Etpm=YNUEtWDE0MDWtN1=YJeE0ReEYjUEOMPWSFqEYsqWSUvJxMe=OM/ElMqXOFDE0N1WbRqJYW6JbR/WOJe=lRQ=YJ6E0RDJxu6WtMe=OHvEbH1EOMPJYuQXOw6=l=vWSMQ=SR0Eb5UWlMQW0JqExNUJ0M/EliU=YuqW0NbJx=1=YueEtsAEx=m=Os6WYsx=OWAXtjv=bJxWO=mWOuAJxsD=ts0=lJPJbJAWSGD=OvbWS=Y=SJqExM0J0MPWbHm=tseExN1J0jvE0N1WS10WlJ6WbFqXSMxEtWPXt=bESJqEtuAExsQJxjbW0=YJbF6ESG/WSJAWt=mJ0jY=OsD=OHYJSjYEx5bXtpbJls0=bWAEbFQXtivW0JAJxUmEl=UExj1WOimJx1DWbRPJYW/EYRqEtM6=Y=v=OwxXlMP=SFAExw6=OJ/JlpmE0EmEbJq=S5YJYR/EbRPJbibWtW/WYuqWO5U=SJeEOGDJSNbJYM6WSNYWxsDJYNbWb51WSJPJbuqWbG6=S5vEOjmEOG6ExsQWSM0JxFQEOUUExWeJYW6=l=UXtJqJYMxWS5YEOFDXSGA=Sp1WtJ6J0RxJbsqWtsx=SwQJYWxWYs6=l=m=bEvEbs/=ORxXOuAJb=Y=lJ6ES1QEbEvJbReEYEUXOvvWYNUWtWPEbHYEOs/WlE1XtM6Wb=vWtibESGDJY=UJbEbJbivWxuxJ0WAJx1AEOGeWtNvEbibJYJ6WSN1=OiUWOHvJSFP=SJAXtM6=tsP=OsDWOwxJb5vESJ/=OUUElJ0=b5v=OEYJbGqEOu6XtJxXlueWbs0ESM/WSwAJlWeEOM0W0NmElWqJbsAXOJeWS=1WORAWO5mEYiUWY=1J0pv=OvYWSvbEbweWOuDESMP=bW6JlpvEliYJ0sqXS1eWYRqWSFeEYpU=tReEbWP=bvvEOEbEbw6EbHmESpYJlRPJSimEOG6=SJxWOU1EOuPWbF0JlpUWOE1WOGAEOi1XtsPWSibESFPJSs6JYEbXOuDW0pYESjmESGQXORAE0uPWOFeExFqJ0sxWxJqXOiU=OFQ=bHmWxR/WSs0=tMqWbJDEbR0EOi1ESM0WSj1ESWPWbUUJSGQ=SUUEbFQJ0ib=YEvWYu0ExFqJb1qElpUWOJDWluqWtjbW0sDE0uAJlEvJbwDJbwAEYRAXSjUXOGQ=bN1XOH1WxNmEbwDJY=b=tjvXlsq=S1QXOw6WS1qXOwQEbsPXOUYXtuAWtsqEbsQWluxWxW0=OF/=YuPEYEUEbFeJYs/XtJ6Wb1eWb1DJxGe=Svv=lM6ElMqJSvvWlMPWxEUWb1eXtjmWOs0Jx1PXlJP=bHYW0NUJxJ6JSW/EYMPWS1eWbWQWlR0=lpUJSwD=OFx=SFDWlpbEb1xESEvXtimWYM6WlMxES1Q=SNUXli1WxGeEY=1XOsPESvbXSvv=SJAJ0seWS1qW0jbE0imJYimEl=UJSjbEYjmWxw0WbWxJxw0XOiU=tRDExUm=YRe=YEbWts6J0JeWbMqJYjYJl=v=OR/=SM6JbsAWxjvE0s6EtJPWSGDWSueXSMqEOibESMPWSGQWOjUXSp1JxHb=l=UJx5UXtEYJ0=YXlNUXlR6XtjbWtNYJbs/J0MDJSG/WbHU=YWQ=ONbJSjvWSvbWxFA=tRDJYpYWYWDJYs6JSJQ=bRQWxNbWbJ0WOHYJbvU=OReXlMqESNY=bu/EOWAJ0JxE0=UE0WDWlJA=tJ0=bJQJxWDXti1J0M0WlWDWluqWS5b=OseWYN1JxMPWl=1=OJQW0Nb=tseEbiYXON1JxuQJbRP=lim=tJP=OpvJbpYXSwAWtpbXOiYXtNUEx1AElMx=OuQW0EmJbvvExF/EtiY=bsDExFP=YJAWS16EYEUXtEbEtimWbpbJSR/E0im=bRxEYMqExuxExFxWxsDWOs6XOR0WSW0EYuQEOWqElJqWOsAJSWxJS1QXORxJxNvEb16EtivWls/=SUYJ0MPWlpUWxNYWSF/WlNUES1QJYu6JlJP=tuDEx1eJY=YEORqESJeEbR0E0J/=S5bW0uqEbMqJ0iYXSJ/=S1PE0ib=O16EO5v=OwQWljYWO5UEtE1XS1P=SR0=bUYXlM6JbMxE0sPXlN1J0JA=tpbElJDJx=1Wbw6EYNmWS1PWOvvWx5U=biU=b10JbG/EOUYXS10=SRQWYuAESE1XlWxESM/EbuP=bjb=OMA=OjUEYE1WYu6=b1AWbEbExwqJSNv=tRDJ0=UExGe=OR/W0W/ESv1=lR0=bjb=bHmJxHb=S1eWOpvXtJ/Eb1P=O=vWxN1=b5bWO10=SMDE0=bJxvvEx=vWxR6JSHmWbN1JSNU=bMDXSW/WxJQExWPExWAXS1Q=YJxWxGQEO=v=O=U=b51Ex=bJxJ6=SWDW0uqWO1eXlRPWYRQ=YueWYpvJSwqWOp1Wxp1WYWA=Y=YES5vESWDESvbEbvUWxMAJluAEYRAJ0sQWlRqWlNvJSu/=SUUWlj1WtWPJbsAExFeWO10=SU1JbE1JSWDEOi1=S=v=YWqExMAWtMQEOuPE0RqJ0s6=SJQExW0XSjUEbpUJxG0JbW/EYJ0Wb=UXSs6JbNbEtuQESwQJYJPXlNYEl=1XSs0ES16Xt=vJYR6WxUvEY=1=YMxXtW/W0jmEYiUEbFxJSU1WO=vWxWQJbw0XtRx=t=vWSFqEb1AWOFqWxMDJSw0WYNmEbw6Jlu0=S=YJxFPWY=mExEmXSNYWOJeWt=vJxseJbpmXOjYJ0pUJx1xJxGAWSWAJSG6=b5YWOWqXOUmJS5UJljYE0MQ=YWDESpvWOuq=Spb=YEmEbGeXtJDWtWqXOFPEbuPES=v=O1q=b=vJlM0WOFe=SHbEtu0ElRPEOEY=lJqXS10XOsx=Ow0EljvWxFQXOF6ESpU=bEmXOUYExR6WbRDESuxWx=m=OibWOiUXlNvWli1=t=b=tMxJS=mJxuDESNUJS1DJbpUEtseJSi1=bWe=YRAJSivWbwPEtjvJSHYJSpUWbu/=SvYXOu6=lWAXOG/WxNUW0RqJxEb=tNb=YW0=bM0EtEmJlM0ExWPWbF/=SR/EtEYXORQWbNbJlE1Xl=mEYu0=Y=bWOsDJ0JeWYibWOFPE0EbJxFPEYWQ=OGqEORDWxuxExM6WON1=YJqEOjvWb1/JSFeXtW0WxsxE0W6XOMxWSEbJ0N1WbvmEOJ/Wbu6=buQXSM/JYEbExweWSJ0=SwxJlWQXOUU=lMqWtiUWxsxWxUUWYM6JxwQEbvUEbE1JSEmJlWeJSwD=OW0WlJDWONYEts0=l=v=b=YExG6WbGAEOvUWlpvWt=bJxs/ElWQJSWA=OR0WS=bW0u0WO10XOuQXlpv=OMPJ0p1Xtux=Yjm=bMPWxuqXOWe=tuD=OR6EtM0W0sAJljv=bEmXOUmE0MqE0J/XSMxJx5v=luP=SvbEtRQWxF/=bJ/JbG0Jli1=OHmW0imWSWPEbwQWxG0WlJ/EbUvWYNYJx1DXtNmEYRAJYpbJ0MD=l=UWxseJ0jmWb10XtuDJ0iU=bR0WxwxExMPESJ6EtWQXOFDJS1PWYsQElsxXORDE0JA=lWq=SJ0EOu6EtMQXOMP=S1eJbR/XtRQWSU1JSsDWbNvXtNmEOF0=bG0ExW/XtimW0u0Ex1xElNmJbRxWlW6=S=b=lW/WlM0WYjm=YuqJYu6=SiUJlRPElu0ExsqWSRD=OWeJbJ6=bEYWYMA=SwAJxuxXtjYESEbEbwxWxJ6Eb=bWlW/XS=1=Yp1=tiUJSF/ExibJbF6JxM6WSjbEOWqWbwDWbWeWtj1Wxw6=lWxEtJAWxG0EtRx=tuqJSvv=SivW0sD=lMeXSG6WxFeESwxES5bXSG/EbJ6Wbw6J0uqXS5bXOMP=tEUEbibWYMxWSwDJl=YWOWQ=bsAJSsqWtjmJ0uxWxEm=OFAE0JA=SRPWOMDEOMDJYuqEO=1=tRxWOjmWlMeEOMP=SMeEtivXS51XSWxExsQ=Ow/=tWe=YWq=l=vWt=UWbwAXlM/WtjUESU1ExRQJYEUE0WqWlJAJxHvWbJ6WbUmJSpvJbjmElWxWS5Y=tMxEb=mWS=1=Yj1JlWD=tRqEYEY=bjY=OjvJbHmJYjmXSw6=bsPWSMDEYsD=biYJbEvJb=v=YseXt=YESNY=lueWxF0WbwPJbvv=lW/=bs6XtuD=OGAExv1=O1e=tuPEOiUJYMA=bRqJlseEx=YWSGeEbpvElM/Wx5YEtJ0EONvE0W6J0s/JbHUJxvYWSNY=buPWx1DW0JxJbiYEOvU=O=UEOiYExweJY=UE0ueEt=vExvY=tsQEbvvEtWP=bsQXSu0WxvUWOimW0WPW0i1JSpbWSRxJbG/WlR0=OiY=tEb=OivWSsQXlNYXOUvWlJqW0MqJ0MAJlNbExs/WOUY=OHUExiYJbuxElR/XSNYXtNbEYjmEYE1WxU1WYuxElJA=tR6JS1qXSsqEO=UXOJ0=YWQ=SuPJbs/=OpvWbp1EOvmWx1QW0EmXOUmXliYWORPXlJqWxF/EYWeEOweEx1qXlpmEts0EOGxXSuDJb=YW0WPXOpYJx51=tWPWx=YJbjUWxM0=YibXOueExMeJ0J0=SpvXSRAEO=bE0sPElJqJSW6=SUUEbs/XtRx=OJ0=S5UXlueEOuxXlJPXSj1JS=vWO51XO1DJl=Y=SG6=bNvWOuPJYJ6WOsDWYMxEOvm=S5m=bjmJbuPXtuQEOWDJxs6=SJx=bibEbMD=tWxESpvWSGQ=tWeJlsQ=bJAEbsAXSG0WxHUE0seWbNbXlMxXOGQXOi1EtJqWYjUEtpYWYR0XOM6=YuxWb1QEYJe=OGq=OGQEbFxXSNvJxFqXOjvW0R0XOJxExpb=bUY=YsDJSGPESF6WSWAWljvE0sqWxGP=YpmXSRxXtNvESWAJbs6=SR/ExF6XtsxJSG/JYsQESi1=O=mWbHUEOw0Eb=v=b=UWbsqWxWPWlpb=bR/EOHb=lsP=YjbWOjUEbF0=tsAES1qWSHv=Sp1XOuAW0EYWtR/=luQWSvY=bMx=SMPEbwD=bsQ=OR0=bH1J0ueWls/E0sQJSMqJlWA=OFPEtuDWx1x=SJ/=lJqEYuAXtWP=OsQXSMA=Su6XSuQESF6WljYJ0j1XOs6Wtu/XOEYJl=bWx5UESM6=SRe=OMqExJeEYRQJxGxEOM0JYReE0Wq=tJ0=O51ESGDWtW6WOv1EOMPJbwqWbMxWbs6XtMeJb5UW0MxEOMeW0R6JxuqJY=bXSwDXO1PJS51XSu0ESseEbw6=SM6XlR6=lJA=ONmWbJAWxFPElp1XSHmWlM6EbGAXOM0JxUmJSW6=OEU=OJDXSw0=OW0JlueE0s0ESM0XOsqJSRq=OiYJ0uAWxu0XSUY=SRAXOEbWxNmWSW6XSsAWtW6JSpvXOHbWOwqJS=YJSFQWlim=bs6=SFeJlpYWlMqWbvYWSMAXtEm=O5mJxWDEOuq=b1eWOWAXSuAJSHb=O1qWOG6EbFPJ0sAJbR/JxUb=bHYJSj1EY=vWxF/WOuAWtMAWOUY=SWAWtibJYWDWS5mWlN1ExuqXOJAWxF6JSJPWb=UWSEbE0=1=bjm=Su6XSw6=lWPEOWqEbuQEYJDJSuDXO1/XOM0WYue=OJPWxM/JYWQ=bNY=SNmEOpvJlJxWxUmESNmWxvm=OsDWbsPE0M0JYMDW0RPEYJ0=Yp1=SMxXOFDEOseEx=1=bvbEORP=ls0=bFQEOwxWO=UWx5v=tR6=tpbEYRqXlWAJSF0=tMxWSNvXtMeWOGqJxUY=SsqEx1QJls6JbJqXSRPXlN1WbM0JxvmJSweJlMqJSGDWSMDXtJQWYuxE0s/XlMxXlW0XlWq=bw/JbGeJbF6XtuPJbUY=buDJYM/XOW/EbiUJYWPWbUvJYimJYR/=YNY=O5mESsDEx=1WlWQ=bvmEOwPEOEYJ0=1JbFAWSpmWbW6=YuPJSjvWOwQJYM6Jxu6JbUv=lM0WYJxJSueXS5bElJqJbsAWOimEbJq=OjY=tuQJ0uDJliYWSu/EOW0WtNUWxvbXOWxWYEYJbMqEOuQWtJe=SHUWtueEOueXlivEbHmWx5U=Su/JxWPJSimEtuPXSJq=YWAWSRxXlMPESReXORqJbRqEYRPWS10EO51WlEYJx=mWbJxXSE1ExJ/W0NUXSuDJx=mJYueWtjYW0jmW0E1ExwQEOwPJS1QEOpUEOE1WOvm=b10ESMqEbp1EYM/EtJxEbsDJ0MeJbN1WbsQ=Sux=luxXSUvWbFQExRQ=O10JxuAJxJe=OWPXlsAWO1e=YWqXSWAW0pYJxUb=O=UWxvmEY=YWtR/ElWAXlW6=bMe=ONmWbGAWORAE0uQ=bM0ExGDJb5bESi1XSFxEOwD=OUYWxUvWOuqEtMP=Ou/JlR6WOvvXOimEOHUJxvbJlJeWbJAExiU=OWe=lR/XS=YWxRAEOGQE0RAWOiYXOEmXtReJYibJbw/=YM0WOJ/EOjmWljbJlM6XtjvXOUbEb=1JbEYJSw/=SNvJlM6=lJQXSJQJYM/=OEmJ0=UJ0MAW0=bWxRPXSF6ExF6=Ov1WOGqJxp1WbwPE0=vJbEvEYEvWOJQJSMD=SMPXONbWbHmJSsAE0J6ElMAJYMP=OWQWxuQXtsqEb5vW0Jx=bFxWluxJxEmWtpYJxvUE0NmXlNvWxJe=SJ0=bWQJx1eWYW/WtNU=tEvXSFAJb10Wb1DXSF6WSRAWYWQXOUUW0uQJYsP=bwQ=YpmWO=UWbG0WSNUXOjv=OvU=YJ0XlW/ElJD=tNUElR/Jb51ExEm=O5UJSi1W0pm=O5UW0NvE0EbEOiYEOsQElEvEbHUWS1xXtEbElN1EYjv=lJeWxWeJxM6WbvUEt=vWtJxEtpbEYueXtJQ=luqWxR/WOFxEtibWbFPXSG/=lN1EOpbWYjY=tWAJ0uAXtuAWtM6=bUY=Sw6=SibWSFx=Y=vWl=UJx5mEbi1Wb5UWSFDXSFAWSFqJb=v=lM/Xl=v=Ou/XtseESpUJSpUWS5bExG/ESFPJ0pvWOF0JSjvWYpmWSJP=bH1XORAElMxWlMxJxMqEb1DEx1PXSvUExU1Wb=YWxJDW0NUJ0WAXSM0JYMq=lNUJSsDE0MAWbEbWljmXtRq=tW0Wlp1Jxu/WOWq=lEYJSseEYR6WYM/XSWP=lEUEYE1=bFDJ0NvEtiUWONv=OGqXS1/JYJeXlMAJYpUJbWqWtEbWtEbWOHv=OF6JxG/XO1QEYM6XS=vW0uPESJeJSEvWbsPE0JQ=OFA=O1/XOJDEOFeWSHbWSuxEtReJxGQJlEv=YWq=bM/=tWDWtjbESuqExMQ=tRqEbU1Jxu6WtRxJbsxXOwAWYpYW0u6=YMe=bWD=YWPWlMeE0JPJYpbE0pvJbHmEONbWb16=bFAWbwPXSsx=OUYJlpmEOsPW0RqEOi1J0J/=tWxE0NbWSG6Wtpv=Os6JbueWlNYWxpmXSNvWSGQE0pm=SJQ=ONbJxWPElsP=lR6JxJ0=bG6WYWqJ0jmWlWQ=OWx=OHUWSGDJlNYWlJPJSW0ExwAE0s0EOwxJY=1J0W6W0=UJ0seWSRxEbE1WOM6XlMP=OWqEYMqXOwx=YRqElMq=lR6WbEYXOJqXONv=lRQJbwx=OUbXtEb=buQExivESW0=bM0=bMPXOJ6WOMPJYuP=tRA=lJPJYpUE0uPElNmJxse=SEmXSwe=YpvEOs/W0pY=SwqExiUEOu0=SuqJbWQJlu/WbuDJlWqEOwx=SJ0W0EUEYuQXlWDJYM6=SR6=bR0=SUUJSH1JljmWOweJbweWlpbXSJ6WxRQXtR/JlJ0JbEvWbs6=b1QWbJeXSM/JYu0=OJQWbEYXSNb=SRPExE1JYNYJYWQJxJ/EbsAEx5U=YibJbjb=OUU=b1DEtuP=bi1XSwQ=bRQJluqWOJP=Sw6=OiYWYiUJ0ReElJ6WYM6XSR6JbvvWYsAWSJQJbiv=l=1=SuQXOw/Eb51=bMx=O=YJb5YEbWDEtjbWOvvEOu6JxsxWYuA=Ow6Jxw0EbHmWOjvJxNYJS5UXSu0EONUEtpbWbweEYseJYsq=SFqESWx=tEbXSsPJxGxWSNUWOs6JYpmJYi1XOjmJlpYEbHvJ0JPJxM6WSjUWSRA=ONYWtsxWOuqWtsD=YWQJS=b=tsDESvbExF0WSNmWOGAJSR6JxWAWSiUE0jvEx5UXOsxWtseWOReXtiYXOu/JSG/JSuDEtjvEOFqJSJAESi1ElRxWxi1XO=bEOEbExG6XtsxJ0M/=S10EbUmXSWeWb5YXtj1=YMPExiYExMA=OGqESUvJ0WAE0i1=OimXSWDW0iU=lM6XSsxWtMxWOu/EOGPJbWDJx10J0JDElWAW0ReExiYEOs0EtuAWSiUJbHbWlNYWbwAJx1PJSjYWOWAWxG0=Ou6XSNYElNvEbuxJxFxJxuQEOu0=t=YEx5YXlsQEO1eES=1XOwP=SWA=OFDEbFDWbpUXlMDJl=UJYJQWtMAJSWq=tMA=lRqE0u6XS1eXtMAESRxEtseJ0jvWxNvESW0JlWqXtueEx51Wt=vWlpUJxGPEtJ/ExsqJlReW0WPJSRxEbuQWSF0ElJ0ExW/XSNbWOueJbN1XOWQ=tivWSJDJYpUEt=bWORAWtR/JxwqJSNvEbwAWxuq=YMAXOMxEYsqEYuAE0imESu0EtsxEtRPJYEUWxGq=YpmEbNUWlWeESwDEbM6=SUUWYJ0XlNbWYpYWlpbJlJx=bUb=Sj1WOiUWlNmJbiUE0pbWOG0JlpYWbs6=Ow6=OJ6WYi1=SW6JxFeWbGPJSuDEtEbJS=YESE1ESu6=S5bWxw0Wbs/WOFAEOHbWb1q=bWP=Ou0Jb=mE0W6ExM0Wbs6EYWDJSJ0Ex10XSWPXOReExRxWbUmWxwDExGP=lu0W0ivJl=1ESGe=SF0WbsAJbwQ=tMqXOFe=b5UJYu6WlMDWt=mJxNmESMqW0EUJYimJYuDWO10WSu0Ex5YJSH1JxpmEbs6Xlp1JljYEbsPXSuD=ljvWSsQ=SEmXS1eEOUY=Yj1ESWP=bJqEYJ/=OJ0EbWeJ0N1ES=mXljUJ0JAWtsqJYRPElM6ExW0JSJxWYJ6JY=1WOHmEOu0WSRxWOvbJYjmWSMe=bHmExvm=lMqWbv1XlimJ0W/WOFAXSUYXOsAWxWA=bWA=YWPWOGQ=SjUWtM/WlRP=SMxWOs6WYueEOEUWSw0WORQEYMqEOWxESuPExj1JxG6JbRxExJxElEYEb5v=bFQJlN1=luAEOibXSHvXOu0=S=1=tjUJSMPJxFPExiY=bH1JlEYXlW0EYuAJ0pbEbJeWYMeXSG/WxsPEtJxESwDEYpUWSWqJSEYJbEm=OJ0XSW6W0p1E0NU=YsDESJqXSWe=YuAEYiYEOuAJbJ6=OsDEtjmWbMQWYJeEOJA=OsDEbH1JYu6XtRP=YJAJxEYEY=vWbiYE0J6=tsAW0WeXSu/JbW0XSsqXSw0JSw0WO1xEbFDJlJ6EljbEtMeXORAWlNvWtsPWSMeXS1P=OFqJbu6WxF6=tNmXliYESv1JxivJlEUJYW0WSW/ExReJxEUJlimEbRPEYR6XOw6=lJ0WO=YXOux=bWQEYpU=lueXOHbExRxE0MqJ0RqEls/ESFeWbGqESwA=lMAEYM0XSW6J0uPW0M0=bse=bWD=bibEbHUWOWPXONYXOuAWlEbWOiU=OpUJlR6=OJ6EOjm=tNbWb=vEtEvXORD=YJ/E0j1WtpUES=bExRPJYpvExpvElJDEtsPXlR0EYMeWY=vXSRxWtRP=bEv=ljbEb5YWxw6=SJ/Wb5UJY=mJbGP=t=1ESW6XtWxWOweWS1AWYRPWlpvWYuPXt=bWOimWlWQWYjUEOjb=Y=Y=ljUWSiY=SRqJ0J6WtNm=O5UWOsqEYNvXSR/WOWeE0iYXOjYXlRPESj1WYNvExs6ESWQWbiUWYpYXSwA=SE1EYpmEOwxXS5Y=Os/WS1DE0s/W0=mJS1AJlMQExR6WtNbESpmJYsxXSMA=OvY=bGDEbWDEtNvExNUJlNYXlEYJ0WxWSwQJxw/=SMDElEUEYM6XSGDWbWxJSMqJ0MDEYu/WtJeWO1qEYRDESWQEYE1EYMQJbJ6JbF/JYNmEbWQESRe=b=bESJ/ESN1=YJeXSM/=SF6W0jv=lJD=O5UJbR0EO5vEbi1JbHb=lW0JSG6WOFQJSsDJS10Jb=mWtMeJxi1WOvvJYRQWSwPWSRDExMA=SG6WSib=SFxESNvJlWPExJQXOWeEx16EOHYJxw0Wts0ES1xEYEvEtR6EYMAJ0NmXOu/JxvY=OsQWt=v=lW0ESNmEOuqEOFqW0JAWxF/=YRqWbsDWtpYWxwQJSMqJxWeJlM0JYpYEt=UWbivESF0EOMxWbsqElim=bHv=bpUXO=b=SsPJ0seW0pb=t=1ESsq=Oue=bsAXOJDElWAEbH1JSNYJxJ/EtJ0ExGxWtuxWtRPExR/E0sAJSsAWximWxvUWbs/=luDEluAWbsDWYJ/XO5mXOwAJSFQWtpbEOH1WxMeEbMD=tueEOvYWO5vWYJ0=YEbWbMP=lNbJSJAWbv1XSv1JbH1ElWPXS=mJbG6EOuAWOvvJS=UEbF/WOjYJSF0JbsqWbWD=SFPEOwe=Ys6WOimWOWeJxWeXOMPXSWQEOM6JxwAWlWPJSRAXSw/=YJAJlMqWOF6XljmXSR6JSwQW0J6JxG/E0jvJbwQXOuqWb5UXSsxXO=bXOimEtJDJ0pvW0iv=SMPWYRQExjbJ0NY=OjUWtueJl=1WlpUJljYWbUmXOF0XO5U=SRqJbEUWtiUEbNYEtjb=OjvXSjvEtMe=SFe=bib=SRPWbJqWbFAJ0pbWbpmWSjbWtNvXOWPXOMAJ0Ev=tJPWYRqXSF6EOpvJYW0XtWAXlseEOMeXOjUXOMqJxiUElRxElRA=Ovv=lpmEOvUJljU=O=UXSF0JxR/WxF6EONvJbMqXSivES5UWYWD=OpvWSNbExu0=SJDJbGPE0EbEx=bWS1xWYJPWbj1WOWqW0pYESReESpvXSUmEO51JbiY=YpvEbGeJSGAXO10XORAWSMDEY=mJSF/EYpYWO1PXSs0W0sxWOimWS16ExNUXS5vE0jbWliUWlR/=luDEbJ0XOw/EOGQESvYJ0u6WSv1=YNbExJq=lsqWxJ0ESsxWxjvElJD=YNvEOEY=Ss/WYEYJSimXOGDESM/E0EmEOEUEtJAWx5UJ0NbJSHvESRDWxvYJxuxJS1AXOHUEO=vXlWeE0E1EOsPEbwDJbFeXOGQWS5vXO=1JxM6EOu/ExMQJS1qEYM/JYivWtRAXOvvWxj1XtpbWb1QWOJ6WSMD=lW/EbwQE0uP=bp1WSFP=li1E0JDEOJPJbNvJYJeJbsAElMx=luQEtiYEOFAEbFAJx1PXSJ0E0WqJSJ0=SimJSpm=Osx=bRDWls6JbR0WYjb=SFPWlR/JSHmJbuxE0uDWSEYJSHbXt=v=lu/Wxux=bu/XOuPWtueWt=1ES=bJxG/JbRQ=O16=bGAWxiUJYW6WxR6JbwPWxNY=YRPW0=UWSMeJYJAExpmWb5UJbWx=bNbJbNbWxF0WtRxE0=bE0JAJS10EOjmEx=1JxFQE0MDXSGq=SNYW0imEbU1Xt=1WxweEb5mJxGA=SW6EYivJbGxWbR6=lsqESjYEbMAJYsxJ0jm=bEvWSvvElM0=bp1WSJ0=tEbJYEv=YMPXtibE0MQ=ORPJlJ/JSwqWOUUXlsA=OuQWxMQXlRDWSEYWSRq=tEvJS=vXlj1XSuPJbJeWxJ/=Ow/=SNbWbWPW0MDJ0=vXOJQESNbJlJAElEbEbHYEb5mXSGDXtRDJYE1=b5bWSsx=ts6WbseWYW/XOjm=t=YWSRQXtMeXliYWOR/=S1eJxMPWtsDWOE1WtJAJYuQEOJAXlu/JS5UExvYJ0M/J0N1XOHbWSw/EOE1WOWeJbFAElimXOWD=SvYXSuqWlW/WYW/J0uPESwA=SNvESW0Wbs6=SuDJlJQE0RQJ0N1JYsDWxNbESWeWSuDWOFPXtpvEOF6=Yi1EOvbE0iUWYJeWlJxExW/JxwQJSueEtMxEbpYWbHmWS=bXSjY=bWeXlJxXOu6W0=U=buD=t=bJSHm=bG6W0JeESib=S=mJxiUWbwxW0sA=OFqWxGqWtEv=O1/XtsqXlNYWOHb=bR/=tRe=SsQEOJPExFQ=OsQEYEv=bR0EYMxWlRDXOivEOs6XtibJYseEbFAWxiUJbvmEbu/WYRq=OMQWlJA=SwqWSWeJbMAWlsAEOJQ=tsq=SpbXlM0=OG0ESM6WtuDEYR6JbNmJx=YEtRqEbWqE0MPJlE1E0NmWSMDESsPESsx=S5b=YJPXSuxJ0jbWljY=lMeE0WQ=bM0WS10J0MqEYNUWbWAWlJeWbJA=O=Y=OFeEti1WbsqWxR6ES=UWOp1WtJPWSM6XSFQWtJ/EOUUJxw/=O5bJ0=YEOW6Wb1eWYivJb10WlsDWtJPJl=UExs/EOF/XOse=SMq=SG6XSR0WlWPJbNv=Ypv=Ss0EbEvWOW/Jxi1=SiUWSv1WOjUXtMq=SJeWSWAWS5vJxEUJbWAJYEmJYNmWOj1Etp1JSJAXlibJSN1=Ys6XO5UJlpUXOUUJbNUESW/JSRAJlEvJSGAW0uQXOFD=lEUWtuqXSp1JbF/JxGDXtRAEtsxE0J0ExJ/=OMxXtRPJbUYW0sqJxjmJSs6J0MQXOWQWtj1JbF/=SEm=YpUJxJPWYWqEb5UESWAXOweW0WxEOJA=bJ/=tRAWb5vEtu/XOs/WYMP=lM0WlJ6WbWxESuqJxsAWS=vXtW0XOw6=tW0JYJxXOWqWYNbJlWeJlpUXti1WSUUJluPJlW0ESEmWxFD=SF6WtW/ExFe=tEUWbMQXt=1EOpv=tsqJbs/=SwxWbib=YJ0WSGqExjYJbseXtJ6ExWAJxFAJbFAExGqES1A=OMPWOJqJliYJYMqJSGPXO1/XSWQEO5vWxu6WbjUEtu0WSWAEtJQ=lM6Wx=bEbRQWxFQEOjv=tu6=tEUWbGxJxu/EOGAWSu0JYueESGxEOF6WtJqXS=mJbMDEb1qJbUb=bsQE0JxWbWD=SM6XSpmEYsPWSJDXSMPXtuPWlW6=b=v=OF0W0MAJYR0JxW6EO5UWSW/ESpbWYNYWYimJ0RD=bJ6WOR/WYuAJ0R6XOJ0=tMqJlW/WYJeWOwxXSWqE0Wq=lu0EOGAWliUJbwqWS51JbEbEYibWxpvWO1eWlR6XONb=tu/XOJqElMAWxN1WxG0=tRQXlM/WOFPXlJ/WOjmWSuqJx1eWbR/WbpYWbFxJxWxEYJAXSibXSF0=S=1WSpbWxRQJbuQEORD=b5m=OwDWxNmWbUUEbGQJliUXOMqJ0M/ExGDWxpm=b5mElWDJS1QJSEbWluQEO5Y=bwQWOw6=bEUEtuQWOUYEOuxWtRPExMqJxM/JYpbEOG0EO1/XlJP=bNUXOpbJ0pYJljmJxjmJbW0WOs6WlMqJYRxEtMqXSF0EOwqES1/JSjU=S5bXOs0Wl=UWSWx=Su/WxWP=bJDWbFPJSMxWbFqWluA=ljvXtM/=OpbW0MeW0JeExu0=tjUWbReXOUbWxF0XSW/JxuPXO1/JlWqJbEbWxvbWOwPJS5v=tRPJxu/W0M6JbW6WtNYWYseElMqXti1EOimWtWqJbJxJlEbJ0NYWlEvJlRxJb51J0jYJSv1WY=1WtRD=S=1=bsAWbi1=tW/WxW0ESJQJlMQJlsxEb5UWbEUElRqE0WPJ0iUXtMqE0NbJYRPJxUbEbRqJlpvXluqWbjvWSRQJSwq=b1/JYpmExUvESweJlEYWSEvWSG/WxuxJxWe=ts/WYJ/EYjYWO=1XlW0Jb16JlibXSGPE0R6JYJ/JYsx=YRxWSF/EO16=SR/=bHUEbNvExsxEbu6ESHm=OibEYs6ElsAWSuQXOim=Su/ESjvJ0sQ=tEbJYjUExEbE0u6Wxpm=S=b=bvY=tjUEbFPWYjvJYjmXOG/WlsP=ONvWxHvXtjYXtsxExF0=ljUES51WYJPWtWDWSvUWtpmESjUJlWPWli1WYiYXlNUEONbXlE1E0M0JxUUWxj1XO=mEx16=ts0EYsxJlMPJbM6WYMxEOs6XSs/Wts6=tueWON1=SWQJ0uA=SW0XtRxWS1xEYu6WYuQWYJ0ES=UWSHYEONb=O5vWSFQJ0pYWSsA=YpYJbwqEOUUWxR0ExHbWljmExNbJxU1JYJP=YJqEOGxJ0uQWOF0=lRqXSv1WluQXl=b=OimWbuP=SuPXSvb=SFAJYJA=buDWO10EORDElJ0Wb1QXSRAWljb=SsAEYRQXSUmElsqJlReJxWq=Su/=bWeEYJQJSiUJbGPW0WeWlMx=lNYWYJeEbGx=O1x=OJQ=luAJxH1JxEbJ0pYEluQXS10=SUYJS5bWbsqEYMD=bEvXtE1ExsDJSFqExvvXtiYEORA=S1/E0pYJbWqEOsq=YMq=bM/=ljb=tJ/JYpYEx=vESU1EYjYWtRPExWQXSsDXONb=tsQEximWxjvEbsDEbi1WlJQJSj1=tRQ=tWqEYR6JbJeW0=bWOiYJlWqE0JPWOuq=tjvXSwDJSR0=Sw/=OGxElNUWbHYXlJ6XSMeEORPXO5YXOG0EbJ6JbRx=OMPWOEmW0jUExjUJbM/ESueJSJ6ElRPWbiYWlEUExR6ExW0Exw6Jx=mXOEvEtM0JSw6ElWqWOH1WxvmJxJPWl=1WxwxWbFQEtRxJlReJlMxXOFQWxJPWbuAEO1PExMxJSuxWxRQW0RDWOFDEbMxWSMqWxRAJSUU=lW/W0Ev=tN1Jx1/=lJ0XO5vWxNUWx1AWOivWtNYJxFqEbEmEYsxE0WqEYNU=ORQ=OUU=lsAWbWx=l=bW0jmEtMQWbRQ=bivJbimWxwDXO=mES1xEOG0XSJ/JxGe=ORqJxwDESsPEtseExUUESWA=Yj1XOHYEOGeExRDEOw/EbUv=luDXSwDESuDJb1AEtEmXtibWOR0XSWPWbW/ES=1XSR6=lNvWx=vJYsQJlR/=bvvEtMDXSi1J0Nm=bR6EbEmJljY=OW/=SjvJljvEOuxEYueESw0WxWPJ0uDEYpbXOv1=YpYEOsDWxwQWSUvWSMxXlEbJ0j1Wb5bWluQESse=lu6JYJxEYWQ=O51EbNYW0W0=O10W0R/XSE1E0Re=tWAJSF6E0pvWxGPJluq=bwQ=lR6EbNmJbMQXSWAWbjbJxiYXSWxXOGAXlsDEbW0ESE1XOFDEOMPWbH1WSMDWS1/Xts0WbM6WxMDXOs0ExFD=bJ6JlpmESJeE0JeJxWQWxuAEtivJxweEOsQWORDWbJQWlsPEts6=S5UXljYJbuQ=SF6WYRQWSF6J0RQExJxESJ0JxRDExMQXSiUWbvvJ0sP=YpbWOF6=lR0WO=mESuAJlR/WxRx=YMeJbGqJSUmWtMqJ0u6XOMeJlRx=tuAJYsAElj1WSWQWSu6=OMAJbjvJbNmEbRxXOH1WxWDWYs0Jl=mWYM/JxGQJ0=UWSE1JYRQ=bJA=bEYJbuQWlsDXlu/XSpmESwQE0=1=SwxJSU1WlJ6ExjUJYNmJbs/JxFA=Ow/=ls0=SJDJSGqW0RAWYJQ=S5Y=SWQXONmWS1DESNUEb=vES1DEbUmWS1/ElJAWOWP=tJD=bEmXSpm=YEvEOFeJlJ0E0pvWOE1=bGqEbUUESGAEbFAEbMQXOseXOuP=SwAJb=mXlEvJSMDEOGeXSGDWbMAEbW6XlueJSp1ElNYElMQWtRqEbR0JxM/JxJDEYpvEOwe=bM0EYu0Jx1PXlE1ExsqESweESuAJlsP=YueXt=YWOU1WS10XSFQWbWxEx=U=SiUJ0=mXls6WbRPW0sQEtR/WbM0JSFqESGPEtjmJljUJS5UWlWAJ0iYWYJ/XtRxEl=YESvbJxFDElR0=lp1JS1QWb16JS=1WSuQJSFxXOuDESMqJbjmJSF/=bsDExJxWO5UXtW0EOwe=tuP=ljv=tMxW0=bWxEvEOM0Xl=UWb1eWbHUJSG/Jx1qESF0XOp1XtRPWYjvJlsPE0R6JYRe=bF0EOMqXtR0XS5mWx16XOjUJxN1WlW6=OJxWb5vJ0RPWOw/=bHmWSF6Xt=bElWDXSvUWOweWxwQJYEUWOjm=bsPEYJqWbGA=SJ6Wtu/ElJqXOJ6WOUmWb1/EtEUE0=UJYuxElsDWx5U=tNvXSu/EOR/XOGD=Ou6=SWQJbUUWxuxWlJA=YMxWOw/WtsAXSuAEbEY=tMP=SNbWOw0=tuxWbFxW0EmWSu0=bWeES1PWtjvWxj1E0ueXO=UJb=vJYjb=Yu/JxvU=YsDEbG0El=UWb1AWOu6JxJAESGqEbpYEbMDJSjmElJDWlsqExF/=bU1XOivXlRDES5vJbpUExsqElRe=OHm=bjm=tjbW0MAESjb=bM0WtM6JbjmJ0W6=bw6XSMP=tJPWS=bXO1xWtsDWluDJYEvJxwPJbG0=bwPEYJxWSj1=SWD=ORxWtu6EOFeJ0s0WSu0JlWxESuPJYM/El=m=tW0WO=mWtJq=SpbJS1xXOWPWSu0ESR/EOs0WOR6WYsAXlseEOuxXSE1XlEmWtuxWbibWxiUWYuPWYW6=bu6ElNbE0RA=SiUWluxXOi1XtuqElu/EtJeEONUJ0R6XOJx=tJQ=ONmJSRAJlpYXlWqJ0jm=SwDWxMqJSEmWSJAXOseEYN1WbFxEbu0JS5bEOG0=t=YWSj1JSuPWlJQXSJ/EtWqXtJ6EO1AXtJxWbu/WSJ0XljbWxMQ=lEU=Yp1Wtj1WYMAEOMQEx5YEbpUElN1ESFD=lE1WOsDEtEv=buDJbs/=SvYJxwPEOuDJb1AEbNvEx10WYNYWSuAWxF6XSHUElWDWtseWSj1Els0ESWQXl=YXlpUJb5bEb1eEYNYElsDXlRAJxUYWb1Q=OGAWxuQExReEbMAJxJPEbW0J0JAE0imWtpmE0E1=Ypb=buqXS5vWYjUJl=bJb5vJSp1=O5Y=bu0XliYWtN1=lWeElu0=ls6ExFqWlu0WSNYXOFPWb1eXSw6WbHU=tEb=bJ0ElJeXtuA=OWQEYM/E0uqEOW6=OG0=bpvJb1PWOw6=OwAXtuQXtu6W0MxJx1/J0s6WS1e=lMeXSRAJYRQEbR0=SM0=bFA=SpUXlu0XOW0WOsQJbw6WOJ0JlJPEbj1ESw6WSEmJbR6WbUbWtueJxweXl=vJbw/ExFeESM6JbsPJYsPEO16JSjY=Sw0WSsxWSWDJxGQWSjbWbF0=bGeW0u6J0MQWbRPESR/WOEvEbRP=lMqExwQExM/W0WeWYjUExvvJl=YEORqWxpb=OUmJ0s0=SJ0=OFqXSp1EOH1XSsQJYMPESibWYWQJbuxWSMeJli1ElR0Xts0=YiYWO16=lueXSHbWOiY=YJ/=lu/WYpYJYuQExUUEtNbWS=vWxjYJSF0E0sqWlpUEOpmWSU1W0p1ElimWxF0J0jbW0sA=lWD=bUvEtReEYueEYjb=OMAWSGqXlWPXlsDWS16JxjYEYu6ExGQ=Ss6WYuqJ0JQ=tpvJlR6=SFeWOGAWOMPXOGPExGQWlE1XlseExGDExsDJbjYE0E1Xlu0XSG6EljUWOi1ESMDEtEmWOvbExjUWlJx=SGe=bHmW0ivXOGQESpUXSRxXtpvXO16XOU1JbMQ=lsDEYuxXSivWO1x=Y=1XOM0XOWPWbUbEOuPXSpmExvmWONYJxJxJ0R/WbJP=OsQ=SMqEOiUXtE1=tMQ=ORq=OMAEO1P=YJAJxJQJSGD=lseWSwx=bsxEtR/ESRAWx=v=bu/EbsQWbs6EbwqESRQE0W/JS16WSsPEYEvXtNmWbNU=YiUWxJAJSwqWtJ0Ets6=lsQ=bGqEOsqW0sqEb=1WxEbJlpbEYR6Ets/WSwxW0p1WbuQJS5b=SibE0jbWti1WlpbES10=bJPWbWAWbiUJxWxExp1XS5UWO1AXOJPXOjvWSJAEYM6XOimEOJQXlu6=tjvJYJ/JbRQ=SNmEluDJYWPEOMQESFAEbFeEbs6JxM0Ex=UXSvvXSUmWxR6=S=vJ0W0ESwQ=YJDJSjv=O10=Oj1EOsDWbsq=tJeWSw0Ex=YJxu6WtR/WSjY=SJ6Wx51JbG6=lJQESvUXSv1JSG6JbMe=SFeE0MDJbFQWbs6=bv1WOivJx=bESUbXOw/XSJx=OJqESjvJYu6Jx10WxWQESN1JbRPXSEm=bpYEbi1=tsQ=SwQJxF/EOpYJb1qWxjbWbu/JxF6WOuDEO1QESRD=OwAEYuqWYjm=OFDJSiYEtJe=YM6XORQ=lsPXS1xJ0NUW0WAXtMQ=bsDJlWPJYj1EYuDJxFDEOH1Jx1qEbHbJS1AJ0NbExG0JxU1WtMxJSR6EbRAXOjbExwqWlJ/JxJx=YuQESjYWxwQExH1XtEUXSM/=bR6WxsqJ0u0EOHbWxNvEtMxJbJ0W0JPWOuD=YWDJxGD=O51EtjvEONbWSF0WbGxE0pm=tJAWbUYJY=bWSMPElu/W0EvJ0s0=SpUESjvJbNbJbpbWtEYEtNYEYEmJYjUW0NvJxHv=Ovm=SRxEbv1JSUvXOwqJ0Je=lu/=bFAXSM6Wl=bXSRxJSvb=SHvJSvYE0s/Ebw/JY=1EtJ0JxMQ=OJ/JlJ0XlWDEtJ0XSJqJxjv=O1/JSWD=YpUWO5Y=SFq=bWqElR6=tEbXOwqEbG/E0JeEtEUESJxE0sqEOWAXluDWSWqESvYWxjmWYMAWxM6EtMxEOWQJlueWOJqExMQW0=UWOFx=YuxExMAWxGPEtibEliUW0pb=SwDJxN1=lNvWSjY=YjvExpUWOvmEbG/WbJP=S1D=Yj1=OwQElJAES1eES1xJ0JPE0JPEtJeJSUUWxReJSG0WbM/=bUbElWDEYs6JSwPJbw6EbH1=bFP=YRqEORQEtEUJxWx=l=UWlM0WYuDEbwqWbWD=tR6XtR6JlEvWts/XSw0=SvvEbJQEYReEYRqXOJ0=bGqWS5UWtM6JxuPJY=U=bwqJbsPW0JQWSU1EO1AWxUbJx=v=bJDWbuxJS=YElEbJxGx=SivEbJ0EYs6E0J0EYu6=Ojm=OHmEbpvWxGeXO10XSpv=OJxEOjUWSvv=Ss/XSiYWxs6=bwPJlW6=S1xEbM6XOvm=t=vJximWbNYWSMQXOW6XtJ/XOsAXtE1WbJQWli1=bvbJlpb=S1/EOMqXSRDEbFPEOHmJSjb=tMDJlpbJxGDJYs0JbvvESWqEOpmExuDJbJQXSEbJ0W6=bibW0uAXOuD=bUUJbu/=tRDJxW/XOJPJSsxESWeJYJeE0=mWbRAWlJQE0WAXOWAJb=1EbGeJxiUWlNU=OwDJbseXtue=SJqWbMPJlR6Jxu0XSwQE0MA=OF0E0WD=tJDJSNv=YRPWONbEOwDEOFAWSG/EbpUJ0RxXOG0WbHYE0EvWbUmWtuA=lNYWxwe=bwD=OMeWtpUEtiv=SMqJbFqXOWP=bU1WlJx=OibE0ivJ0ReJbH1=tjmJS5mXSUvEOM/JSpUEbseJSUbEYWqXSibESweJ0MPEOu0WOjmJxjUXOv1W0u/WtE1EOpmJlW/Jx5mE0RDEYseWYJ6JxiYWSHmExF/WSimJSpUEbw0XSFx=Sw6W0sQJxH1E0R0JSJQEYEmWOF0W0MPWbpvEOWDE0MAWxEvEtNvWtJPXSJqElWDWlJ6XSEbWbFPWSjU=SJx=Si1=SGxJxF0EOUbJxvUWSjbJlueWO5bW0NbJbJA=buqEtuD=luQJSJxElWDJxMQ=YRPJbimESJQEbNUJYiUEb5vJ0E1=ljmWOEUJbWqJSHYJb1/XO5vEbNmWSs0WlR6ESHm=ls0ElMxJYEUWlpYWOj1WSNYJlEvWxM/JbReEOUUEx5Y=SM/WSFDExWDEOjY=tJxJb5mJxGA=SJ6WlRxEYW0XlMqEOs/JbRP=bi1=Sw6JlivWOpmEbEYESim=SsAEOwqJxsP=SJeWbN1Wb5bEbjbWORPE0jb=buQEOu6EYEYJS=YWOvmExFxEOsxEbuDJbu0W0jm=biv=bGDW0MAXSsqJxsxJbWqWx=vExseWSvb=lR/ESvvXlW6WxG0XtR0EtjYJ0sqEbwQ=YMqJYM0=YpbJxG6=luQWOEmJSpY=luPEOHYJx1/EtuA=Os6JxivWYWAJSGeXOseWx5bXSueWOuqWORA=SRqWluPEOFPEbJ0J0s/=bsq=S1P=OReEOEUExGeJxW6WlMDEb1AWOGDJSJ/Ex1eXOjYWlWe=OivW0MQ=OJDWtsx=lWPESJxEbJe=tp1EOWQJ0R6JSFQJY=U=OM6XOF0ExJ/EYpYJxWPXtMAESFxWbJ/=tpYWxuDWO1qXlRDJlWA=YJq=SR0WbJ0E0NUEtJ/ESvmEtsqE0JqWb1xEYEYJxG/=luAEO=b=YRPESiYXSH1Jb=1EO1eXSFP=bRPJbWQW0Rx=tJDWOHvJxpUWbuQEO5bEluQXSNmE0JqJYR0JluAJxJeEYWq=OFqExE1WYRAJ0JqWbF6EOu0WlWAEljbEORPEOR/=OG6JYM6EORQWbGDXSuA=YR0E0=YElRQ=SvYJYWQWSwAXlN1JbW0JlM0EOJ/=OF/Jb10=OJqEx5mWtseWbp1XtueEbi1ElRxEOsPJbvb=YJqWOsDJbF6ESHUWbuAXOjmJxFD=bR6ESRQXOHbWxu0WON1W0imWxvmWYMxExMQJ0WPWY=mJYW6=tibEbMAWbpUWxM0W0ivWlRDXtNvEbsqWlpU=OvUWONvES5mE0s6J0NmWtibWbuxXOFeXluAWxW6E0M0=tRPEbpv=bFxJSEYXORPXliUJxJDWlNUJSEmJbRqWtJ6XtiYEbWqWlRqWxj1WYu6JbRD=S=vXlWx=S1qJbvUXS1eWt=mEYpbWxJ/XtWxWlp1XtRA=OjUW0p1Wts/EtjYWtsDEORDWOuxWtM6XSFD=OMeWluDExR0EO1PWlpvXlR0=bWAWlMQWlM0WONmEbWxJ0j1EbJDXSsAExsDJ0i1=bRQWlpYJYRxEOGDJxWqWtimXORqXO=bXlWQWt=1XS1/W0JAJxMQWtNY=SGPW0JP=OiYWS5vXO5vEYuQ=bwxJlWqESFeWbs0JSNvJYRPWlu6WYMeXlWA=tWPJSMQJSF6EOvb=bMq=Yu6EOWQ=bjvJSHbWtMA=b1QExwxExpvE0N1XOwQW0j1JbuQXSReEYuqWSwqXOE1XSUb=bWPWbUmWxWPElWqWYu/EOiYExMqWSsqWlMPJlpvJxFAEOwAWtEmW0WQW0RqXOjmExGxExuPEbHUXOibJ0WP=YjbEtsxW0i1WxEvXOFqXSRAWxvmES=UWSu/JlMA=S=YJx=UJYWQWS=UJbEmXS1AWOFxJSWQXS=bWOFQ=OFQWOFqJYsxWbM/WOwxJbGDJYpU=tpm=livEYEvWYEvJS=vEYEm=YWDXOw6XtpvW0jU=OF/EO5Y=YJPJx10=tpm=SMPXOWQEbw6=SJ6=tJQEOEmWYsPEOuxE0EvWbvm=bJPJ0Rx=lJ/XO1AJYpUEYW0JluxEOpbJbWPWxwDWOw/EOGxW0MeWSwAExs0ExvUEOG6WbN1=b5v=bUUEb51=bimWOjY=O1AWbGPXSUb=OMPESG6ElE1EbweWbsAXOMPJxs0XlNvWxFAWxwD=luQEYW6JYimW0JP=tibJSFQJl=mXOuxEx5mJl=UEluA=OWeJl=1ESFQEYWDWljbW0sxWSG0JS1eEO=UWYuxXOHbWSFxEYE1WxGP=SUYXtjbJSvmEtNvWlWAElNbEb=UWOM/XOFAWxRQEYp1EbUmElEvEOivJlM0JSHbXlj1W0uDWtRxWOJ6Ex=vWYMQWbWPEYs0=YuDJbG6XSG/WxsxWxR/WximWSvv=SR0=bUUWSGPEt=mWSu/Ex=UWtRAEbjmW0s/XlRPWbwPExGeEOuPXOsDWtMA=OUbJS=Y=YRP=bse=SjmWYMD=bFDEbR0=ljYE0uq=bHYJx=b=bH1WYjUXlibES=YW0p1XSRD=bMAWx5mEbwqXO=YJ0seJSN1XtpbXOUYJbNYExweWO1PXOMxWS=bWbM6WtJ0JxsPEOU1WON1WY=bWOivJlW/ExFA=O10XtN1EOReJSp1Ex1eJxUbWYRxJxEmWxGAElMDXts6XSReWY=bJbMQ=bUYJY=vElWDW0uA=SUbE0JeEORQW0i1WtR6EYRxXOHYWxWDEbjvESs/J0iv=OHvExWDEYi1WYEUXOM6ESiU=YWxWbGQEYj1ESEb=SMDESR6J0sQEORQXO1PEO1PEYJ/XOGQXluq=OUvESHmJS10Eb=m=Yi1ElEUWlJeE0R/JYs6=OJxWb1eWl=UWYMxJ0EYJYs/WYRPWtEYExWPXSvU=t=UWbFqWSpUWOuA=SpmEbR/JSGeJxw/WxUvEbRqJbpUWb=mWlEYJxR6Xli1WtMDEtJ0XOJP=OMQESjvJxWPEO1qE0=mEtjvXOWQ=bGQEx=bJSGPEOs6=SF6J0RAJSMDWO=b=SwPXSG0Ex1qXOFDElJAE0N1Jxv1XO51Jbi1E0imExsq=OUbExjUWxFeE0j1XOE1=tRe=O5UJx5UJbpmXSR6=l=mW0NUJlNbJSM/E0jYXOuQJbwPWtR/=SWqWb=UJbwPE0uP=SJAWxMPWtWAJYRPJxim=tuDWx1DJSReWxEmJbRq=b1AJxEv=SNv=bJQElsAWYpmWljbXlMeWOs6EYNUJSjYJb=vW0WD=bWeEORD=tNbEluAWOiUXt=bWSG6JbsDWtpYEbMeXtsDJxM/XS=mJxWeJYu0=lsAW0sxWbJ0WlJxWYibWbpUJ0iYExiUEx16XS51WOW6=OGAWYWPJx=mWYJQJxHmJYReJlR0=tReW0=YW0s/ESW0XS16=lj1JlpvWxWeWOG/ExJ0WSwDWxHUXSHY=OH1=bw0ExHUJYpm=SE1Els/Jl=mJbFP=SuQW0RQXOJ6=Ov1=tRDWSimEOw/ElJ6JbFAW0u0=OHbXtjvJ0=vWSMeWSvmWtMeExJxXlu/=YsAJSUm=lN1EtuQEYjmEbUUElWP=bvbEbGxWbibW0JDXORqJximJ0pvWOu6WOGDJYWP=YRD=tjvExG/WlueJS1AEOpUEYR6JbUmJbivEO5UExGD=tsPJYRDEOsxElJDJbHmEbFeXO1qWSuDEx=1JbMQJb5m=lJ/Jb1/XSRxJ0WDEbjYJSJP=tuAJlMQ=SwxElsDJYRDWbEUESWPXlsDWOH1WtseJbR/WSiUJ0uQEYJ6XtW6XONvJSUmXl=bEYMeWx=v=SRDESMD=YRPExWDES1DXSF6XtNbEbNm=Si1XtRQJxG/Ebp1=bRDJx=mWbUbJ0N1Wts0ExWDJbiUEbNUEOwQXOMeWbweE0sxXSv1EOMqJ0EY=bUbWtRQWOvbJbNbEbuqEO1QJb1xEYu6WOMPJSFA=S=bXt=UE0Wx=SMPJ0uPXOjYWb1QJSR/XOpv=bj1E0iYWYsPXOs6ExuAJxWPEOEYWxiv=ljmJbFq=YiYJbseXOibXtW/WSu0EOjUXO1AJS16Jx10W0u6JYsD=OuQ=YpUJx1eWbH1WbMqEbN1XluxEYE1=OJxEbMxWYWAWxF/JS1QEb5UEbWDWbF0=lNvWbpYJSwQ=Os/=SMQExivExMQElpUWxHbJSpmE0jYJxReWtjbJxFxJxiYE0J6EOuqWtWPJbwA=YJqWYjUEOE1Wx5UJYMD=YMxWSW0W0=v=l=1Ebw6WtjmElRQWSUU=bJDJbw/JbNY=tMe=tJqWlEUWtMeEYJQWOsxJYM/WbGQWSRxXO=v=YJqEO1Q=SiUWYjm=tR0WSwPEbsq=SivWb=b=YEbWl=UJSHbE0p1ExR0ExF6JlEYWOJPEORDJYJDEbUYWbRAXO=b=Ow/WOGQEO=UXSJeWOjUWYpmWxi1JYMAJ0u/JxWQWl=YEtEY=YsxXSw6JbW0XSWAEb5bWYu0WlMq=SM0WYueE0ue=b=vXSR6XSN1ESF0Etpm=S1/WOueW0WqXS1eWbRxESsxXSiY=OMDWxHvEYJ0WOJDEli1WximWx1eJbG6JYpYJSUv=Ss6EYNmWlRDJSwAEOMxE0s/Wx51Eb1PJ0pvWSM0=S=m=SR6WljUEx=vEOJD=liUEls6=lu0WxEUJSWQ=SWAJxvbWb51WlJ6WxM6JS1e=bj1XSwAJYu6Wb1AEtR6Wbj1JSJ/EtEU=lJxElNYXOu0=OFQWYsP=bM0=b=v=bFPESWqExsAJ0uxEb1/Xls6EYuqXOGqWOvmJb=UWSRQJ0sAJSUvWxim=liY=bpUXS5YEtE1EYRxWxUUJSw/JSGAWxvvJSuxJlR/=lWQJbE1WOR0WYJDEtjUEl=b=bu6=tJQWbGDESu/Eb=mEbUYJx1QWbu6WtJPEbNYJx1PJS1PJxsDJSpmWxGAESJ0Xtu0EluAWtRxXOseXtuA=OJAExF/WbU1WSpU=lEbExEmXO1DJlpUXOu6Eb=bJbsAE0RQXtRPJb=U=tuQXtR6E0uQJlMAESFP=lReXOFqWxH1XO5v=SpmEbHUWlpbJS1eXSRDXtibWxwQWOv1EYpYWtp1E0sQWS5bJ0WeWlsQWOG0Ex5vJSUUEts6=O5bJxuqXS1PW0j1XtJqJxGeEx=bW0RA=YpUEYueEbpmJlWPEYEvEOpm=Yj1Xt=UJxw/JbU1WYJPExWeExjv=tse=tEvExHUWx5mE0iYW0MDEYWQXlMQEbMqJxEvWbHUESsqWSvmXOEvJxw/=OJ6E0jYJSi1EO51XSu/ESNY=OGQ=bsq=OMeJSMxEYsPESFxWtEU=SvUExMe=OFD=O1e=SGQWxNb=OWPWYuQJS5mWbFQWlsqWYjYEb=mWxNYXlNmEtjv=SJPE0M6ESjbWx1eEYsDESGqXtseJSp1=YjUJ0MAJxGqWOjY=bGPJ0ivWtJeElRAJYEU=b10=S16XSwq=YNYEYJA=OUmWxEYW0pm=SsPExu0JYRDWbEb=YsAWYWAESJeWOWAXOsQJYJqJbsQXOiv=tjU=bGPWOwD=ONmJxiY=bWQXSsDJbpvEOWqWbFDWbM6=SpUEb=m=bHbWxGP=tWQEORAXOFPE0uq=OHmWSHv=ORPEts/Xl=bW0EY=bNb=tibWYib=livJliUWxibJbWDESFAEOMAWbM/Jbwe=YW0XS16EO1PJY=1=OJQE0seWxWD=buxJbReEbMPJSjYXSJ/EOsqESu0JYsQWOWP=Ovm=tJAJYRxJ0uAE0s0JYWPWOUYWtJeESR0XOUvJSvbWbJqXluxE0JqWOR6XSseEO5bExiv=Svv=Sw0WOHmWYNUJSpYEtRqWOvU=OJDES=b=SJ0W0ReWx=1JlJPWlR6J0sx=SJ/ElpmJluq=OuqE0NvExWQJYpmEtuD=lsDWxsx=lJPESUm=bFD=O1DEbReExs0WlMx=YuP=b=U=tJx=O1/ExjUJxWqWlM6WYMQWbWxWxJPWxv1EbWqJSMe=b5YWOJ/EbsAJYRxEbNbJb51WSJxXtsAWbRDW0sq=Yim=S1x=YRDJ0RDXOjvExU1JYN1WxF/ExWx=OJP=lNbJlMA=tMQWOFeWOGeWxJeWts0=bGAEOvYElu6JbwAWOUvWlRqXSvbW0RQ=bNvE0=1=SvbEbHUJx5Y=lRq=SF/=OMq=bF0XSUvWOp1EOGeExwe=bM6ElW/=OueJSEUWSNv=lWAExFAWxw0ESpbWOwA=bu/WlpUXSsqJxjbXO1xEbN1=tWAWxuPXSRx=bw6XtEUE0uxJxvYWxF0EOs6WbU1=bG6J0i1XtN1WO5YEbG6W0uD=bs0WYiU=lpbESEvJxsDEb=mEOs0JSNmXtW6XSUb=SiUJl=vEbJ/E0RDEYJqJljUWOHm=Sj1J0EmEOjYJSH1WbW/=OJqWbHU=ORPWSGeXOwDJbJAWOW6EONYWbsqXSweE0=vEO51ExibEtEYJbR/Wlpm=lsqJYpm=S5bW0sxJ0j1XtiYES5YJ0j1=ONv=OvvWljU=YNvWxW/Wti1=SGqJxvv=bF0ESNmWYuxWlsQEtuDWOv1JxRP=Su6XOMQEb5mWOR/EYMqXSM/WxiY=tu/JYWqXS1/=YRDEbwPWts/WbG6WSpUXOM0Ex=vWSim=OwQJx=bWbJAEb=mJSw6=Yu/EYWq=bjUExM0JbMeWxWQWxEUXSEUWlpbXOWD=OwxJSReWSuDWOs6=YM6EONb=S1x=tjmXOFAXSHUESRDEbWAWOJQExFeWYMPWbNUWSN1Wl=bXtWPJxsqE0p1EOwQ=bwDEbRAWSGD=OuPExiYWOWeXSFQWlJ6EbHUJxG/XOjvXSuxWb1P=lsqEOvvXOw/ElR6E0WQXSEUJ0uAElMqESGxJSUYWxsxWxHYJSJ6J0RxJx1/XOJqWSwxWSpY=lEmW0JAWb=1WSJ0Et=YJYW6Wbw6WbReESNb=tueJl=YEOjmEx1DXOjmW0jmJb=bXtibWlJAWSGA=OsDE0uDJSM6=SF/Xlu6=bw0W0MxJSR/=Ys/=Ou/=lEbWSJxXSUv=YMAXtpYWxMA=bs0XSsD=SMDXtsxWxFDJ0uqJ0RAWtWPEOw6J0MPWbsqESRQWbjvXS1DJxUYXlpvE0sPE0NmEOpUWb5mEximJSseXSMxEOJDW0uDXljU=Sv1=OGP=YRDJlJqXOWqJlW/WYiUWxpmJbFAESMqXtimWO5YJ0u6E0=UWxU1E0WDWOvbXO5bElR/ExEvJb1eESHYWtMQWOUb=Y=vExiYWxEbJl=U=YsD=ls6JbFAExUb=bHbEbw/XSu0ExuDJliUXtuQXSE1EbWQ=bJAJb=bEOF0EtR6J0RDW0MDExW0Exp1EbFqXtpmEOjbJS1qEbw/EluDJb=mWxE1WxJ6XOW6ESsAJbJ/WlWAESueWlWeWtMAXSF0XlNYE0pmXO1eWlsAXtpbXOw/EbvvXSGqWSG/XtuQExW6WSR/W0i1EbvUJS=bW0WqXOJQWluxEYEY=OHYElJAXSMAXtsAXtpYWb5v=buDEYu/XtJe=tEU=OJD=OHUJ0WP=tR0=SWPJS=vWYpYEOMxXOs6XSsqEtM/JluqJbMe=buDJxpbESGDElRPWOuQWxueElWPJYi1XlsqEOWPWOv1=OjYEbMeWxvmE0RPWOUbJxv1WOGAXtiUJbN1JbuPWOs/=OMeElseWxFqXljm=OM0XluAJxM0W0RAExU1EYJ6JbGQWlM/ExUbXSNUESReJluD=OEUXSFxXOJ/EO1xW0MPXOEmWxHmEYpYWYsxEtE1WSjbEli1Jbj1ESuP=OvUWxuDEtJ0EYjUESMP=ljYES1QESFQJSM/WS10EY=vJxuP=ljUXSW0JS5YWO1/JYpm=O51ESpbXSweW0W0WOUb=SJAE0WAWS5vJxs/EbEbEbMeEOvmWbMPJxR6WtuDJYEvWbuxWtReEO5UE0i1J0sQ=SseWOiYJxUm=bWeXOH1W0imWtN1XSH1WxRxXOpbE0JxXtseESsxXSJ6=bGQWx1PESF/WYMxWYuQE0JDXSvUXtR6XS1x=OJe=OF0EYpv=lsQ=OEUE0R/JY=YWYNbEx1eJ0RA=S=bJxR0JbWQEOJxJxpvE0R6ESvUWls6Wbw0EbHUWOWqXO5vEbRqJSWQXtEbWbNbWljvJSHUXSsPEtsx=OjbWYR0WOMeEONmJYsQJSWA=Yp1EYs0WSwQ=Ypb=OiUWb1/JxF/WbHUJbW6E0ReXO1PE0jUWO5mJYN1WxGDEljYXlNUWxFDJbUvJSwDJSMeWbMxW0uD=lJPWt=1EYRAElpbExJPEON1=S5vJ0JQWOJQJxGPWb1xJSJAEl=m=YMqESibEb10EbUmJlpvWxWxWO1xEYJQW0W0EtWAWSF/WlWPWYJ0Elux=YRqWSMeWSsQWlW0EtpmExHYJ0=UWbEUWOvv=b=1=bwQ=OsPJYuqWxW0JxjvJls/EYu0W0RPWlJeJ0s/W0RP=O1qEbRQJbW/EOpvWYsP=bGAEtNbEtNU=tjvWYJ/=bivXOMx=b1/JbWeEOEUXOG0=S1A=tJxEOEbElu6JSRxJbwAXS=m=YueWxFxXOJ0JbvbJYivXt=YE0jvWxwQ=YuDElJ0ESRqEYJPEbiUJbjYJlM/JSJxEYjY=SG/Jxw/ExM0Xts0JxNmEtuP=SG/WtpmWxu0WxuPJxvU=S1xWSHUWSMqJx1e=SWQWSGDWlMxJbwPXlNvWSjYJbEmEOMqJbNbWxU1WSpYJl=Y=tE1XSw0XtEb=lRAJS=YWSEm=tRAXlibESuA=OuxWxuQExwDJSsxXlEUEbUYJxMP=bE1WYuQWx1/=bJ6=Oi1JxU1JxFQWlMDJliYEb5mEYWDWtsqWSjbEbGx=tMPJbsAWt=bJ0s6WYW6=bsqWSMPJlWeEYMAWx5bW0jUXtMxWS5bXOJq=YNUJSFqESibJbWDWtpmEOMPExFxWSwQEOR6WtW/WxvvESuqEtjvXliv=O1Q=tjb=lMAESW6=YjU=OjvEOw/WxUbJxvmJYi1JbJ6XlMQWtsxWSJqElWxJS5mWSU1=YRQEbwDJlMeXOReWlRxWbw0Xl=1WOivXOJeJSGx=S5YXOJ/WOiYExN1XliU=tJAJSsq=Os6Jb1x=tsAES=bEtj1EOGA=SRAXlu0WO1xJxiUJSFeEb1DESHmElEUJYR0XOv1XOu0ExEUXtueEOs0XtMe=SMQXSGA=Yim=OWD=luxJSM/EOu6XtJD=lj1ElE1E0iUJSw6E0s0JbN1=SM6EOvmJSJe=lsQESUUW0WeW0ib=OMAJ0R/Xtu6WtiUWY=bXtpvEximXls/EbsDWbW/JbvmJYJPJYE1WbJPXOE1E0s0EYW/JlpYXO=vJ0uPWxNUJY=UJlpUWb1q=SEvEOFA=lsAExHvXOsAXS1eXliY=OF6WOwPEYWP=tRDExHUJbibWbwe=bvYXtjY=bF/WS1eWtpbE0Nv=OUYJbimJlMeJxUYWOWAJYJ6=lu/ESMDEb5v=tMPExsQXSpmJxEUJxJDWtsxEb1AEbwqXOivJb5vWtR0JbvvWOGeWSWAExR/Wx16JlWDW0sA=YRQJ0iv=Os/WYJAWSjYEOGPWSEYEYJe=SMq=buqJSUvWxWx=bJAEtpbJ0=vW0sD=bvbWbFqXOHmWbUvXtu0EtRDXtNUXtu/WxuQWSHbEOu0Wb1DEbNbWb1xWS51Wl=vWOj1WlEYWtEb=tR/JliYXOs6XOjYE0jmXS1QXO1/=O16WxweJ0EvXOWAW0pbWlsQJSGQJxF6=YMqWSueWSJDEt=YXOpYESimEOjbWlJDESuAXtpYXtMP=SHv=lNYWbRq=lNbEbJxWbuAWtp1XO1DESHUW0JqXS5YJSjUWxHUW0WPWt=m=O1/=SEv=bEYEtEmW0imJYWP=lsQJx=bEYpmJbwDEOpUXOpbXtMDEOwqWx=YXOMP=SHYXtWq=O1PJ0jYEb16WtRD=YJ0XSNbXO5UWYW0EtEU=b=bXOpU=Sw/ExFPXtWeXtJ6XlNbWb=b=b1QJY=m=Yu/Jl=bJ0NUXO10ESNU=lW6ExpvJxW6EbReEbwPWbG6W0EYWb5mWS1xJbuqEb5mEtWPEx=vJYEU=YEYXS1QEt=mEbUYJbwDEYuPJYJ0=tN1JljmW0=bWbWDE0MQJ0p1XOMP=Ou6=YJqXS5YWSuP=S=m=SwPWtN1El=YXOuqWOMQ=OR0WxEmWx1/J0EvElM/ElMq=lW0=YuD=YRAElNmWtu0JYWeWxHUEOR6ElNmEbJ6WxWQWYWeJ0RqWtRxEbMq=Ow/WYsAWbsA=OHUXSNbWSMx=Owq=bUUJlJAEluxW0Mx=bsqWbuDElsD=SsQXSwP=lWPXtWx=YiYXOGDWxEU=OueWbWeEOF6=bWA=OR0WOJ/J0WAW0RqJbNYXluQWSivEx51XSRPEtpUXS1DWbWPWSF/WbNbEl=b=SWqElE1EljUXSMqEbJD=OGQ=S10=bMqESsAXtuPEOE1ESu/=SM0Xl=vXlJeEYuxEOsqEYsA=bG6=bW0=lEvE0=1XOF0XSMPJYjb=tN1EOF0EtNYJlJQ=SueWYiU=Os6=tR6XOv1J0imWxjmXONbXtM0=OEY=SH1J0jbEbW/JbFq=SW0=tW6=tEYWSWAExse=Ov1Xt=1EbGxEbFeJSiYXSRQ=Ou/=tM0XSWQ=SWPJbUvE0pUWOjmEbUYJxHYWbue=tWQEljUESMQWbW/=tJxEtJAEYp1W0ibWOJxExRAWSEmWlj1Wb5Y=bJPExHvESUUJSi1W0sDJSRDXOR/Jb1xJ0M/=bH1JSsxEls0=b16WOUUEOj1XlMxXtpvWSWDWtjY=Yu6EtM6W0iv=tR/J0jmXtWqJxvUWtWqEYjUJSvbEO=U=SGDXlMA=OvvJljYWb=bEOJ0WYWDJxJeXSvUWbEvEYjUJlsPWYEYXSU1=bwDXtseWl=YWbwQ=OsD=tJ0JxRqJxH1EtpYWbGQExj1=YjbXlWeXOj1JY=YWSR6JS1PXtsqXluPJYjmWSue=YNmWlWPWSEUE0i1WbNv=SiUWlWxWxjU=OEUExE1WtJAEbHv=Siv=tsDXSuQJSG0JYW/EOM0JxsQ=YMAXSJe=YMxJbG6WOGx=SG/WOU1EYRQXSvmJ0W6XS=UXtEvElu6XSEYEtW0J0uQXlMP=OFPWOi1=tNmW0iUWbuPW0jbXOs0JbHmXls/EtuDWSFQWOJeESRxJxEbJSMxXtE1ElM0=bF0WlNbWSivWOJPEbUmEONU=tW6Ex1DJ0RAESsPJYsqWxWDEx1QElJQXlpm=SuAESwxExMqExUv=YuAJYsP=l=vE0RA=Ou/XlJQElM6JlW0EYR6XlsDE0WAXt=YWlRqWY=mEbFqWb=mWOW0JlimXlWxWOJqXOWeWbRP=Yu0=bJ0WtuAExGAWlj1WSE1EbuQ=S5vJxFPXS16ElseXtMPWbNv=bvYWbueJbuQJbuA=OwAJxuP=YsqEOwAWSNvWtjvWx5Y=SW6JSWPWOEUEls0XlWAXOwPJljUJbu6EbFDWxNvXO1QWSRDWYR0WSpb=Si1J0WeJb1qJ0iYXSFP=tR0EY=UESweWSW6EO5vXO1QWx10WYpm=SuxXOWqJlpUElue=bR0WxN1EtEmWbsxE0MDExGAEbNvJbEYE0uqWSvUXOGqJlR/JlW6W0uqWYsQEb5m=lu6WlW/JbiUWxuA=tiYEOuQWl=vWtRQEO51ExvvESHYExMeXOFxWb1eJxR/=O16JxFQEYNb=tWxE0s0=SueESJxWOF0ExEvWbGq=SpmWbJ0JYW6=bw6JSiYWYpvEOiYJxu/XSpbE0pUJxv1J0jUEt=v=YRxWSj1WOwe=lW/WbF/=YuDJxpUEOGe=tJ/WtReExFD=SR/=OR0WtR0WSN1JSW6Jl=U=YuqWSJDESueJSuQJx5vWbW6ESUbJxvvXtuxJxRQJ0jbW0M6XOReExMPEOuPWxNYJb5YEYsQ=SMA=tNYWxvvWxw/EOEUEOjmWtiYJlR0XSu6JxHvWbp1XtRDWtRxXSWxJYMQXSuD=YiUJYW/EOJAXS51JYpUJlW0WxuqXSW6XtNYJ0EYWbE1EtsQESRQWxNUWSueWxjU=bUvW0=UJ0=YEbEvJbj1Jxw6E0M/XlJeEt=1W0seJbHm=bjUWSpvEOUbXSGDXORQEYWQESG/J0JPXOMAEO5bXtNYXOJqEbFeXOJ/JYEmElJx=bR0WYux=tN1=YWe=bwDJx=UJYuPXSu6ElRQ=O5v=bimExU1JYjmXOWQ=OJAWOR0WYWqXtibEYWQWlpY=O5YEt=m=YJ6JlueWSRD=tjYJbEmXSHbWYu6WbHUExHUW0jmJx5b=tNmJ0W0EbueXt=U=Ss6XlW0EluPJ0NbJxRDEliUJYEb=S=m=lWPJlimXSsDJxWQ=OMq=YpUXtsAJY=vJSuPEYJPJYJ/XO=vXSJ0E0uqWlJ0WOFq=Y=vE0N1EOF6=O=bJSj1ExJx=bGDJxw0EYMDEbpbEtuPE0J6WYW0WSGDExGPXSs/XtRAESMA=ORqJlNmWxMqWbjUWOJD=bw6JSpUWlNYElM0Jx=1XOWxE0M0=SJAWxMxWtuAE0J0XOEb=bR0WYpbEtMxXSNvXlpY=YMQ=bw/ElMDJlp1Jb1AXSi1XSMqW0=1=lue=S5UJbseEbMqWYWAJbs6ESueEbv1WtW/W0ReEOMqJxwxWbRqExuq=bG6ESsQW0JQJbsD=SpUJb1x=lseEx=YWtRP=S1q=l=vJYMAJYsqW0uQWSvvEtN1=bpb=Ou0WtEbEbsqJSMqES1eWxRxXO10WYEb=YuQEbu/=bJe=SG6EbJx=SFPXSJAEOiY=YpYExR6WtpbJbM/WlJPXS1eE0EU=bseElsq=bwxJSwAJYjY=buDEtM0=bimESw0Wx=UXOpbJYRQ=OsD=tu0WOv1XS5mWxpv=SE1ElpYJxEUXS1QXSwDESWDESE1JbEb=OF0WbF0=bGxESMAJSsDJSH1ExReWbJq=Y=YWlsPEYRDWYp1ESu/XOFAJxJ0=SUmWtjbWbiUXSMP=lp1XOHmWbseWb5bXlNv=b1/=bwPW0JDJSwqESF0Wxjm=OEbExwAEbiYExEmWtMDEbuA=tMPW0W0=SFqJb5bExuA=Ys/JbF6ExsQESJ0=tN1=bHUESiUE0RDJSwPEbGPW0J/WYNbWx=UEbi1JYRq=ONYEYsQJxJ6=SJA=Sp1XOuDXSGqWx5mWSM0=OE1ExFAJSsDWtJD=Ou6JSsQWSJq=OsDJSjUESuP=SsAESGAWSJ/Ex1qJYsAExw0=tR0JxNUEbvUJ0Rq=SWDJ0=mESFP=OFeWSEbWxGDJxHbJSMAJbuxJbw/EbJPEbM/WtJQXlp1WOHmWOM6WSwPJbJq=bW/E0RQEtsAWS1DEx51=tjbWSJxEbFDEORQEYs0=YpmEOUbJxN1JlR0E0uqEtjb=SWAJ0iU=tuxXS=vJ0RAJxRA=OMQWtsP=YJqESsqJbWq=tuAXtJAEtJPElJAJ0uQEOiY=Y=vJxvU=OF/XOwDJ0iUXSJ6XOsxExG/Wb16Xls0WOUvWbRAXSimExsAXSimJS10JbEUJS=1ES10XSF6WYWDExvYWxsq=b5YJSM/=luDEYR0JYEUXlWeWliUWbMAE0uP=bEbXlN1Eb=U=YE1ExMx=luq=ON1JbwPWluD=SuDJxwqXtueXSG/EtRq=SvYJSseESiYWxjmWYWQWOu/JSvYEtNU=bvvJ0EbXOJxJlEmJ0Em=bGeJSGPEYuAXSuQEl=1=bw/WOUbEYM0XO1eXSJAEYiY=ORqElE1XtEbWb5YJSJAEYs0=libWOs6ES1qXlMqJYMPJSuqXO=v=tsx=OUbESM6W0RDJxFqWSF/ElWe=lseW0im=OUvXSFPElWDXtMAWlNmXOGxJSMQ=bGe=bivEOsDEtjbJxMQEOjmJxHvWtRAEb1qWO5UWxEbXlMeXlNmJl=v=tWe=lW6WOFDXSGAESsQWbGAJlJqXSMxWbF0W0J0EtMAEYRDExF6JbJ6WYuxEtRPEbsqWtuxXSGe=bs/EbGqWS1/XlMPEORA=OWxJSNbJSNvES=vWbMqJSwqW0WDEOHYExUYWtWqWl=1=Owx=SMPXt=vJxH1=b51=SibWtivXOGq=lsQ=OsDXSUmElsPJbJ/EYM/Wts6WbRDExHmJYRQEx=U=SJ0XlW/JbvYXl=vXlRxExsq=YJQ=YJ/JbHbESEm=SGDW0uQJSUmWSGqJSW0XtMPXlMxWYMAXSJD=Sw0WOWA=YpmExGPWx1eWbJAElMeXlNmXSF/WlRAWSRqXOMeJbRAEYu0EtseElE1XtsxJY=vWlWAJ0MqXtW6E0jYXtJe=YMPXOWQEYueWxwAESNUJxR6ExWAEbvmXtpmXSv1Jxu/XOJ6JxuAXOwqJ0RPJSu0=O1qWtRq=SJeEtEmJYu0JYjUJbs/EtsAJxJxEb1AXOMQXtjmXSGe=bU1XlJeW0seExs6Jbvv=OibWt=bWxpYEONYW0NYWOUvWtu0XSsqExiUXtueXSNU=t=Y=b=UXOEmXlsqWSuxJYsPEORA=lRxWlim=bE1=YsAWxFxXlR/ExE1JYRAESw/ESF/ExGPEOjb=Ovm=liUEOHbJbWDXlR/ESGPJSueWSFD=bEUEOjvESM0E0EUJS1eWYj1Exi1EbUYWl=m=tEUJlMQJS1eW0J0XOu6WOsAEYuQWxMDXtMeWx1DJS5vExWeEOjYJYWAElJQJxp1XOJQXO5bWSRqEbM/=OW0JYM0=OM/JSsPWOMQXlpmEtiU=S1DJYRD=SFeW0RqWOs/WOwD=SpvWSMPEOJ/JbUUWbRqEbMxWtM0J0s0=SpUWbJAEbib=OG0=OwAWbGQJSwAJ0uDXOsDEbim=Yu/=bpbW0JAWOHmWSiYJYs0WONbWbJ0Jbi1ESNYEO5YWbG0El=YWxW0JbEUXSWeWbjvJlEvJbwDJbHbJYpm=OpvWbMDJSGPXSFx=lJqWlJAEYMPXlWPES=Y=tJq=bsxWOweXSu/ElW/J0MeWx=vWlJDJbG6EOibWxsQWl=b=O5U=SHbEbvUWON1JxJAWtJx=tRQWbvYEtRDJb16=tpUXOWqExR/Jx1qXtjmExuDJxv1WlEUWYR0WSWxElRAWbF0=SGQWxHbEOuqESse=SuAEOwAE0JeWx5YXOGxWb=1JbWQJx10XO16EbUmJxwPJlMP=YEvE0JeJbvYEbMAXSu6JYNmWSim=tMx=SGeJS=bWOJeWlJ0EONbJxs/JSM0Elp1J0uxWtMDE0MxWS1QJbWxJxwxJSMxWbibEbWeESNYXOw/ESMeJbp1=Ys0=tM0XSNbJ0u6XSpmWYuxElN1E0WxEO5YJx1/EY=1Jb1q=OMPWSRDWSpU=OR/EbWqExuqW0u6EOWAWS1DWSReWtivXSFP=bJQWSuPEbpY=YNUWxUmXSEUWOG/=tjvWS1A=ORqW0MA=OEYXOMDE0sDE0N1WtEUExUUWlpmEtR0JbpvXSNbXONb=bUvW0i1JSN1=tMeEbvv=bHv=YM6ExFeJbRQES1DJ0sP=luQEtpbWb=bEtjb=YEmXO1Q=lsxEbUbWYWQEtReJSvbJYMeExMeJljUEYEmXO16=bUUEtu/Wb1DWb=vE0R/JxE1ESNYXOEvJSRAWxF6WbpYWYReEbW6W0JAWl=UWbjbEbEYElsPJxG/WbG6WtWAEtMPXlimESpYW0sDEtMAEx5YJbWqJSiv=OpUXSu/EOpvWYsQXOvvJbJQ=YNbW0Jq=bGxE0uAEbJ0XOvbElRAWtWqWbJAElReElEvJYsQEtW/WxG0EtseEOjUWbG0WS1eWbH1=YN1El=vJxwPESw6=bMeWORAWSu0WbG6J0EUE0jmJSu/WtNvEOFPEOF6XONUJbMAJbW/Ebjv=lJD=l=YWSRPEtjb=YW6XSG/WSG6ESvb=tp1XlsAJl=bJx10WOpmWbuPJlNvWSUYJx=UXSJq=bvb=bHYWl=Y=OHYJSJDWSMPXlM6WbMq=OsDWlpmEY=UWSvUJxp1=OvmWSEU=bEYWxWPWbv1EbWQWxu/ExpmEOu/W0uQ=libEYNUJlMq=tuqJSMqEliYJSJPJb1eEOjbWb1eWlWAJSi1ExE1=l=UWlMQJlJAE0MeJbUbXOJDElW/JxFQJbFDEtJAEbwqE0JQJbMPJYMeXSMDXOEvXOsxEOMQJSs/Jxpm=bGAXS16Wbw6EtWQ=tR6EO1PJxRAXOWQEOJQWtRqXON1WxvU=Yu6=OvvJxwx=OFP=S5YEYR0Ex=vWbUbJxWPExJeWSM/=bJ0JYimEbJD=OFeXlJe=bEmXSiYWS1PE0EmJlWDEOW6EYMDEYivWxM/WSW0EOWx=O=Y=OvvJluxXSRQ=SJQXtjUEOUmE0pbJbEmESFAWOsxXOW0Jxvv=tJe=YJxE0j1=OR/Ex=U=b=bXSEbExs/=tMDEYEmXtpUJ0WAExHmXtMAWxp1XSjY=YRA=Osx=tM0JbJ0=O51JSMPESMDEtWe=tRAJ0i1=bvmWYsAJljU=OvbExjvESG0ElNvWbwqJSWeJS16EOJPWOU1Eb16EYi1=SUYWb5YXOsqWbEbJSHbWt=YJ0MDWluxWbwQWtuqJ0NvWxWx=OuA=bHUXOUvESMqWOpmJSNvXSEbWOueElM6J0ReJlpYJxiU=bMx=SMPWlsQXSsA=tNvWxNYEOF/JlW0ES=vESWD=Ss0XtivWSRxJbNmWY=vWSsPEOM6=OWxXORDEYJ6=YRqEOHUJSweESW6=SvY=Oi1EOwDWSuq=tRQW0R6WSwPXOH1=O5UW0sA=bwqWbMDXlp1=lEmJ0=1EbR6WtR6XOHUJxjvEl=UXSjUXluAXOu0WtRD=bNUEOWq=Yu6JbueWSvbWxuxJbJPWb1e=lNYJliUJxuxEbMPWbimXlRQEbRe=lMAESvb=bpmXSHYXOvvXlpY=tpmXl=m=tiYWO=bXS5UExivEYjbXtRPJYNUJ0JqXlEbW0M0XOUmEOEUWxu6E0iUXls0WxjYJxpmJYNbWYJDXSJ6WY=vWSW6=b1x=b1DWOUmWlpYWxu0Wx10WYWAJbHvEx1/=YuA=bi1EbJD=bWxEbvYExJ/WtNbXlWAXOu0WbJeJlueXONvWlpb=YNYJYNvWSpmJbWDEYMxWlM/E0JqExN1WS1AJb1eXSJ0WYMq=bNmWlsDEtRe=b1P=tiUWOF/Jl=vWbjbJYs/ElEUWY=b=Sv1EOUbJbMe=YJ0JYjv=lWDEtRxWb1PWtiUWYsDJ0uqJljYWYJ0XSsQES16Xlpm=tsQJ0Jq=OUUXSW6WONYExRx=bFQWxpYElibWOMqXlJeJbi1WOWPJxJQ=lpmExibWYs6JSRqWS5bXS1/WtW6EYi1JSEmEbi1JxMQW0=YJYM0=Sjm=lEvWxsAWOimWOFDJb1QJYR6Ex1eESpYXSFQ=OEYWxM/W0pbESG6EOHbJbHvWx5bJ0EmXOsqEYu0WOu0WxR/ES5Y=lJD=SM6WOWQ=bRPWlRPJSs0=OvvESw0J0u6WOHmWlRA=tE1WluxJYJ0Jb10WxM6=SwqWYRQ=bsx=Opv=O16ESUm=tM/WOUmXSG0WOpvESsxWtuQ=tu/Etjb=buPJbMeXSs/=bFx=YWeJYu6W0EbXtWeXOjYExsQWbNvESEmEYJ/=Y=vXSGQW0W6JlsQEtpvJS1DWOu0=YJQWYM6EbUmESpm=S=UW0s6JxjvXSpm=Si1XOGAXt=vEYR/WxEvWSj1=SJ6ExWDWb1A=OwAEOGeES=vW0se=YWeE0s0WbRqWb=mWOF0E0RAXSUY=SibJxRPESEb=tsxWOM6XtEvXOHvWlibXO5U=SEvJl=bWOwxJYJDEONUWS1xEOj1W0J0Xlu6XSibEb1eExWQWSu6WO1A=OGqWbsx=bv1WtpbExW0WSuq=OpvEtW0WORPWtM6WO16WOJeJSJQEbu0ExFQXtu0J0WQ=buQ=lR/WOpU=lRQ=Os/WOWPElpvE0RAW0jmJYR/J0jYEbJqXtj1ExJ/ExHvWOpYEbHbXlsx=tWeW0NmWlpmJlWeXtsQE0pmWbJxEximWYM6WbJA=YMAJ0E1JYM6J0uPWOUbXOJ/JYseEOFDWli1XlsxWSHmXOWQW0M0JlsQWxWQJSM/=b1/Jb51=YW6=lJeJbjmExFqEbF/Xlim=YjYWx1qWxseEYMPEbuAW0s0=S5UWlW6JxJ/WluqJxvvXOsxWxp1XSHYWSR6=bEv=b1eXtMAJbHmJ0sQE0W0=OwP=OHmEtM6XONYWxE1WbWxXtsq=S1PWbsqEYpUJxJqExNbEbHbWbJDExRqWxvUEYMqXSN1WljbXtMqXluxWOWxJSFeWt=vXSFqEx1qWOUbWSseEbGx=tRxWtEvWbFDJ0EYJSRAJxi1W0ivEYMq=OsqJ0Re=bwxW0Mq=b10Ets/WOJD=bEvJbWPJSWxEOwQXOpv=SMxWSue=S5bJlRPJlJx=tNmJYuP=buQElNUXSRP=lRAElWqJxsxEtWx=YJ0ESvUJYu6Jx1xJYJDWOvYXtJ/Xls/WSuAEbsQElRDJSs0Wxw/WliU=tMqExJqXOivEOJDWbHvJSJ6=YM0WxjvEl=bJYEvWtu0WOJeExRxE0pYWxG/JSvmWlMD=bJeEbJQEYuqW0pUESGPEtJQWtpmEYJ6XSwA=OimJlpUWYWQ=tibXSGxJxW/WxM/XONYEOM/=lsQWxu6Jlu0WSEvWYNYExMqEb=YWbp1WbJQXtuPWS5UEOM0Ex10EtRDElMPEO5YWOjvE0J/ExuqEYEUJSN1WbuDXOG0=YjbEtJeWS5YXtpUWYEYJSMPESJAWOWqJxRxEbEb=YJ/=SGq=tEvWbGPWOsPEOFeE0RDXtM6JSMeXlJ0=SEYESHb=SRxWYsqWxNvJx5vEbjmXtsxWtsDE0sAEOFPWb1xEOMxJSp1EbWQXtWAJSibESsDExG/WbMeEbJe=O1A=OM0=bRAJYRD=bWxJSGxEb10JSMP=bGQEx1PXlJPWxsDWYi1JbFA=Sw6JYM6J0RxEbw/WbsAWOuAWtR0WbUUJbsAES16XluAW0u/WtWQXOwAWbFAEx1AWSGq=SGxXlN1=lRQ=OHmWOuPEtWP=ORxEbFeJ0=mESHmJ0J6ExJ6XSu0JSv1=SWD=bJAEO=mWlpY=S=mWlu0=SUUJxJDJ0=bWSjUXSE1ElJQ=SM0WOUYXtEUESwP=b5UWOsPWxWqJxEvEtReEYj1E0u6WtR0E0=mWOFeWbpbEx=YXlR0=ORDJljYE0ReXtJqXtivW0WeWbueWbseXSuQJSMxJb=vEYimJbW0JYWeXOUYEljY=bvUXSGQJSNbXO1/=lJ/EYNYExFqExH1ESv1EYMDWOsxJSu0WS1DJlsAJx=bElW6XOWeWYRDWOMQ=tWAEbuA=OH1=YR/WOJDW0u0W0JPWtjU=SpvJxG/ExjbWbsQ=lJAXlpm=OWQWx1D=lRQWOMA=OMxJxwQEtW/EOWxJ0JQWbw6XSNb=YWAWtpbWYRx=YWqEtMqWOu0J0=YEbsDXSwQW0s6JYJPESRxXlsDXOR/ExvYWljUEOF6EljbWSU1=lR0WbuQWtsqWSReESNYESNb=lJDWS5vJYRq=S5bWSEmW0uPEOpYJljbXlueJYs/Etib=bUUExs6E0se=lpmXlWQJY=YW0pvW0R0WO=mWSvmWbJxWxU1=YMAWSJxWxHvESRDJxwQEb1DJYWqXSGDESp1ESu6WxG6WxRQXOiYEOJxWSJxWYRQWYib=YMQWxjmJSjv=YjvW0j1E0J/=S51EtRAJ0uQWSFQWSWeEYMqXSF6W0jYWO=bXS5vWlMxXtJ6XtRA=OFq=lJxJx1eJ0seXSG6EOiUEli1JYWxExuqESwxWSweWxueEOpUE0=UJbWqXSUvWOpmEYs/E0uqEbGqJ0RQ=tjYJbUv=SMQJlpU=YEUWlpUWOu6=lj1XSs/JS1QExiUWxHvEY=UEb1DJ0MeJSHYExWAWOsxJYWAXSweE0WQ=YuxWYWqXtjb=SGqWxsqW0MxE0jYXtJDJSR0WOGxWxjY=OGDWO=bJbpUXONm=Su0=bGxJYpvWxWP=OEbWxNYWYJQXORAEbu0EOJDWxJx=bFe=SJeWOM0JbpYWYEmXSpYEbuqW0uqWlJQJ0JDJxJ0EbNbWbM0E0pYEx5UJS1xJlu0=bjYWOjbXlpvJSEbJbsxEYimExMqESvbXlMDJbF6=OGDWOpUWSsqWOvm=OsqJS1eJYRAJbJD=bJQWtWqJ0MqJ0MDWS=1JbFPXtseEb51EYjmEYE1XSi1=OG/EtiY=b1q=OUYJSvYJ0sP=OGx=YsQJb=vXOR0WOUUEbw0El=vXluD=SWeXOJxJlM6WxuAXORQXSsxWOEm=OHb=OEmJxpYJbWxJlsPESM0WbF0Exi1=O5UXtuxWxMQWxUbE0J/XSGQWbuDJxJPEbMxJluPJSsx=S1DE0NmEtNmWx1AWO=mWOGxWljmEx1PWSw6XS5b=tibWSi1JSiUWbJ6WbFAJls0JYs6XtRQE0sqXSEb=SpU=OpvJbibJYuP=YJqWYJqEbGQJSvvWx5YWbWPWxuq=bH1EO=v=OFe=S=bESMDW0MeJbUbWtu0W0sD=l=mJY=mXls/=YRDEb=UXO=1WtjUEb5UXtpmJ0MxEtp1JSG/Wb=UWOMqJl=bJbGDE0EbEbwAESMDEYReWOReJx1AWOsQEYEbExFqXSibJSMe=bG/WxGDJYJ0WORQ=tRxEOReEtRDE0JDExRqWxEb=lMAEl=U=Oi1XSu0=tibJxR/XOsQExwq=bGqWOWq=tRx=tMA=YWPJx=1WlpYWlNUJS1xXlEvWSNUElJxEOF/EOJ/ExR6ESRAW0WqWOseWbpYXlEUXtEvJbHvWONvE0=v=OGDWxFx=S51=l=vEbwQWxMAEb=UEbjYEOuqJbHbWYiYJxuA=Os0WbGq=lM6EO1QExMqESFQEtpvEOu/W0EmWOJ6=tJqXSu/W0EvEbHvWtNY=SwPWbGDEx5Y=SJ6Wbj1JxuqJ0W0=bEUEbiUWxpmXtW6XSEUWtJQWbNUWlN1WtRqWtRxWtuqESWeExNvEtj1=OUbJxjvWbwe=YJxEbNbW0s/J0WxExuP=SFeEtN1XOJQEO=UEYi1XS10Wbw0Ex5mESsA=YRqEOReWtivES1AJxFxESvvWYJ/=YM6ESivW0RxJbibW0p1=Y=UESuxJ0ueJSGeXtN1Jbw/XSEUEOJ/=SN1WbF/EO1/XtReWxFAEO51XOs6E0s6=Su/EbGDJbw6XOFPWbWq=YiYJlM/WluPJluPEO1AXtpvJbNv=OGPEtN1WOpbWtWDWtp1XOFPEYpvXOuQWSM6E0M6WOGQWlE1JYsPEOWQ=SRPJlibWOJqEbRxESFQWYueXOpYESjY=SiYEOEUWbwqEOHUEbJQEOsPESimXtEbJbRxWtEYW0ueESibW0RDJYsqEYReJYMxEYpm=SF6=SFqEtRDJSFxW0JAExuQWbNY=SN1JYu0WlsQWYiv=b=mESuxESJ0WSvbE0JPEbJAWbWAXSu6=lJxJSFDES1AJYWxJlM/Wxj1ESvbWx=UWOReWYWQJbJeWYNvJ0W6WYu/ExGeWOFeXls6Ebw0WSGPJ0uDJxi1EbsqWliYWtJDXO10Xlu0WYMQJbJPJlR6WxHvWOu0=YWxElEm=tp1EO1AEOsxWS=vXSFAWOw/EORqJxwDWtimXSU1=bUvEbGP=OG0ElNvWSR0JYW0XOw0WYJA=tjvWSMeWSF0Eb=vWO1AEOwxJSR6=lJQWOu6=tR/=bjbWtseEO1x=tNbWbjUWtpvXt=mEtMe=ON1EOJPWS=mXOM0Wl=m=biUEts0=ORPWlse=SRxWtRQ=lM6ExW0ESj1ExNvEOweWtsDJxJeWlu0WSMQ=Ow6WSimJbsQEbvbESwPWlpm=Sv1=YuqEtMD=tjbExEbEtuqEb=bXSW0JSsAWSUbJYR0Jx=YWSvYExJDJSvvJb1DEYs6XORPWYuQEOMAEbvYWS1QWYJxW0jmXOpmWYRx=OwAJlp1Xlu6WON1=S1D=lJPWSEUElWDJbv1J0EvJYMQEbw/XSReExJe=lseWSG/WOJqWOjmW0JAWlMPEtRqJSJDJbH1ESR0WSJAEOMDES=v=OMDJSWDEOv1WSib=tNm=lJAJSu/=libXO1DEOsAElRQWxjUEYW6JxMPExRqE0JeWYuqWtsAJ0M6=tu6WtJ/W0u0EYM/E0u0JYNvJxG0=ts/=YJPWYs0EOF/=Ys/WOWeJlEb=SJPXSR6=bvv=OuDJx1eJS1AJSuDEYWPJxJ/JYueEtR6=tRPJYR0Jx=mElimXSM6=ONvWOuPJYsQEli1=lMPWlJ6EOW/XlsQXOibJSU1WOFqEtu6ESF/ESpvESv1JxGeJSHvEY=v=bRAJlJ/XOuxExib=bUUXORqWxjm=SNv=tse=YJ6=SsxJSNb=b1PWxR6JS1xWOj1ESHvXSUvJ0Ev=O5YJSjUExR/JSp1Jx=1J0WqEbRAJYJP=b=1Ebv1JbN1XSvvJ0pYJbNU=OHv=O1AW0WAXlsqWxpvXSReEYsPJbW6ElueWxRAEtNUJl=bExHvESWPExHUJY=vJ0p1Wb=1EYRDES1/WY=b=YpUEY=mJbJ/WSF/XlpY=OJ6XlW6=OM6EOvUW0J/XtJQWtNmEYiYEYMQJSGDJljvWtJD=luPJ0s0WtseWxi1=bwQ=SR/XO5UWlRxWxjvJbUUXORQWOGAJxGqJxjmWSW6WOiUJSivE0ivJ0pYJ0M/ES=UXSwqXSW6=bJ/Etu0EtuPWlR6EtJPXtR6JSEYJxFxWtNUJYR/=lsxEOjbElWD=l=U=O1QXOHvXlWPXlWDJlu6JxUUEtWeESwe=tWqWYNbXOGxWYs6WxRe=bRAESu0ExHvJ0s0XSwD=tMeJYWPElEbEOJ/=Sw/Jb=mWSGPElu0JlpYEOJxWYJ/=ts0WOvUJxsPEx5vJlsQExGx=tJ/JSRqExpbWYMqWOG/WxuPESJA=S5bWYJPWtNYESFxEtJ/XtEYJS1PWlEm=bUbXOw6XOs/XtMqXOpU=bHUWlMxWtRAJ0WAJlMAEtpYJbuxJ0uAEtjYWOsqWSjbEbU1XOwDES1AXSiv=lMP=bJPWlR0=bEY=OFqWts6EbWPExU1=S=mElpYWORD=li1WtMQWts6W0uDJxEUEOU1=tWqExsPJlp1=YsPXtRQJ0MD=OGxWYpb=bj1=l=UWlWQWx1AWxjU=lW/EORqE0p1ElRD=YiYXtWeWOGDEYu0JY=UES1PJxGxWSwqEbvY=b=bXOjbWbpvWOJAExF6XSJQExuAXONY=S5vXOFAEbuqJYWq=YJP=tp1Ebw0XSHYE0sqExwQJbuDExj1=OUmEbJe=SFPWSsDXOJPXOWqESGD=lu/WOjUExNbWlu0WbRQ=tJxWYWx=tJDJYJqEYs/Ebw/WOvbJSi1JbwxWYWQExMPXSGqXOFA=YR/JSueWbRPEtibXO=v=b10JSjbW0WxWb=YXSNU=lEmXOjY=ONbWYpv=SRe=SEbXSJPXS5UJxuxJb10WbGxXS=U=YM0JS1PXO5vWxJqElW6Jx=mXlsDE0EYW0uP=b=YEYNmWSjYEOwQEYivXSF0Wx5YEYibWSGQ=S1eJbM0ElM6ESWx=bMPWO16=lJ/=SU1Wxs/=tW/JlsxEtpvJxMxEbUUEtEUEbWeESHm=lJ0Jls/WOJ/WlMD=SWDXSiUEtiYWSM6WbMQJlJxXtiUJx1eXSUvXluqJYR6JbJAElM/JSG0XSFxXOGPEbFeWb1AJ0uAJlW6ExJAEOHmE0N1WbUbJls0JbGQWSRPXtRDWYsPESJeEYE1WSRPJxsP=SRxWbEmXO=U=SJ/XtWP=tsqJlWQEtsDExpbXSuPXOEb=lu6WSuAE0ReJYsDWOpmJlEUWx5U=bR6WOs6XOHvWOvY=OJ6ElsAJbseWtux=YW0J0J/XOvUWONUWYWDEbNvWtRPWOsD=b5vWO5b=lj1XluxExuxEbjUEtNU=lJQJS1DJ0=UJxjmEOWqEOHbExF6XS=mWSsqWS10WSpmEO1e=SHmElJeJYWP=SFxJYM/=bGqEb=UXSuQ=bGPWOG0Wb5bXtJQWYNYWOwQJbJDJxGxWbwqExJ/Ex51XSR6WxG6XSU1W0jbExF/ESHmJYuD=OFDJ0pmEbjvXOMeExRQJluDJxJqW0R0EOweESivESHvWYpbWSJDJS1PWtjbWxEU=S5vEOFeElsPEbjvEOGDEluqWxj1JxGQXOJe=SpUJb5b=lJeJSR6WOsP=SjYW0WxJ0=bJ0WxJYR6=tR/EOEb=OwqESNb=YsPJSvY=YNbXOs0=bi1XliU=tiUWYRQWOJPWbRAJSUvElMQ=bwqWSvUJSG6J0jv=tivXl=vEOE1=SEY=lRDWbR6JlEYXSJA=SU1XlNUXO1DExuAExiYXlRDXOuxEb=vWxs0JYM0XSMQJYW/XSu0ESMxES5mWSjUXtiYW0pbEbs/J0iv=OJxJxHY=tM6W0EUES51=SRxWSu0WxNYESEUW0MqJS1eWOwDXSwQES=mWY=UWb5v=OHbJbNvExWAWO5b=YJx=OW/XSivJxseWtjUEOEvXOHbJxMqEO5YWbueJbNmExpbJb=mWxJ0XOF6WOHUWSwqXtReJlMxWtp1=S1A=tEYJl=1EYJAESGAXS5v=YuPWxNvEbj1Wt=b=b5v=bHY=tMqJ0=UJxGxEOM0JbuqXOuD=tJqEOJDWxJeJ0MP=liYXSR/WO=UEtNvWOU1=Ou6JxM/=lWPWbR0WlW6ExGe=bRDWxF6WbuQEYWeJxJPXS=m=Ss6XSJ0ESv1Jlu/=S=vEYMqXlimW0EU=bjY=bwAEbsQ=SvbWOwQJxN1WO16JY=U=tseJ0jUJbsqE0MPJSM6=bpmWbRxJSGDWOsQEx=UJbWxJ0MxXlimWxJeE0J6WSH1=SvUJ0sDWOu6WYJAXOWPJxJ6=b5b=lMAXtReJbu/JSWqElMx=Yp1ExpvESHm=Osx=OEUES=1JbM/=tj1=SsAWOwQJbEvES=YWYJqWOW0Ex=UESpv=tpUXSwxXOsDWlRPXO=mEYRxEOGAJlsxXOseXSM0WbRqWxH1Jbib=tEU=S5UJlimWbEvE0pU=SNYWYMQExpm=bUYJ0uQXlW/ESMAWlpUXOMxEbuAWYN1JbUUJSWQXti1XSH1=bRAJx1DEx1AWOG/WYp1XlMAWOGeEluxWSpbJ0s/=Yi1JliY=b1x=lWA=lRPJ0RP=libJbjbWxWPElR/=tEYWOw0Wb5vWORPExueJl=mWOpbEtueWtsPWO=UW0JqXluDExNUWSMP=tJQWSwqEtjUWO1xWYJ/=Ow/ESHYJS5vWtJ/EOGPXS1PWOweXSJeExuPWOp1EbFxXSEb=lNUWxNYWOs/EbpmWxGQJbE1XSsqW0pYWYibE0ibJb5bElJQElMDWxsD=SUYWbsQXSJQJ0sqEluQXOiYJlEbJbFeEOjUEbpvElMeXOwxWSWe=ts/JbJ/=bG6WSsAEbWDEbG/JxJQW0s/JSGDJlNUWOjmXSiU=lpUElJ/WxUYEtM6W0=vJYiYEb=bXOEYXlsqWSHYWb1Q=ORA=SRe=tsqJS1D=OueWYu6WYpUJxu/JbW/WxGPWxueJlR6WbR6EOFAXlsP=lMxESUmJYJeWxsAEtEvEbJqEtNbWSRxJYMx=SG6=YEUJ0WxJ0W0XOsDEtR/WluA=lsDXlW0El=UXSUv=OuAEYJDWl=1Exw0EYMxJ0=YWlEbWtM6XtsxWYEU=b1qWOpbWYMeE0=bWOjmJxGD=bNvWxFqWtsP=Sue=Ou0WxsDWO1q=Ssq=li1W0MxXOFPWtpbWYpYEx1AW0uDXOWqEYjUJSvUJl=1XSwqEtMPJljbESR6JSE1EYJ0WtiUEYJPWYuPXOMe=OEUEtR/ESsqWSJ0WSu/=SwDWx1PE0JP=bJxExvYEOw/WYEY=OReWOjb=lMDJYiU=SHYXlRqEYu/WtWPE0W/WxsQES=1Wl=UJxUb=YueEYW/EYJqXSMQEbjUJSJe=OWxWlEm=ONb=OM0=SweJS1PE0jv=O1/WSRDEx=bWbpbEOMeExsx=lM/=tj1ES5v=SuxEOvvExRQEbsA=OvbExjv=OsD=Op1XOUYJbGeJliUJlsD=OHY=YWDJxEbEbvYEYp1=liUExwq=t=bElJxWxs/ExUYXts/WO1D=Ys0=SG6JbwDWSFDJlWxE0WeWlR0=lEbJxj1=tivW0NUJSiUWtM/ESjb=bJeJljvExGPXSpYJbHv=OvYEOvmEbRxJx51=SR0=tWxJSG/EOjmWxNYElR6ExjbEONbXSweWSu6EOFPJbuxWxM6WtEUJYp1=Sw0JSwQJlp1WOvvXlsPJx1x=SGe=OsD=OEmEljYEbUbWOR6JY=YElMDJbJeE0ueJlMAWbRPWx5mE0uxJbEmEb5vWOU1E0JQElEmESFP=tWDEYN1=Sp1XlMeWti1WbRAEbJ6Jx1q=OFxJbJx=tjbWliUEOUm=SGD=tJD=bw6WtR0JbReWtRQWSMAElJqW0im=YJ/ElMqWtRqXOM0=OJe=lNUJx1/WbUmWxjU=O51WbueWtuQ=tsqXt=U=lEvEbJPEOuPJxWDEbpm=OH1WtJQEbEbXts/=bG0EbWeExwPXlpvWS5b=SvYESWqJxsD=OJxW0sPExpUXOpvXSjmWl=bExMeXlRQE0sPEt=bWOuQWbRAJ0WAWSRPWb=mJbjv=SJxJ0iYXSNUJ0uP=YuxExueEbE1E0sD=Oib=S10WSw6WYJDWlEb=OJqXSu/XSGxW0uAJxHvEOsxExuxEOWPElM6JlpbEbHUWOwAXtRqESvY=tjbXSM/ElM6WSMAWOpYEtsQWtNbEtNUWYjUJb5mJlR6EOHvXSu6ExGAWtRx=OEbEOHm=Opb=OHmJSJxWOGqWtW/Exvm=YueJxHUEx1PExwPE0jmWbi1E0NvElue=lJ0ESGxXtiYJ0RQ=lNYJYs6WximExFQJSMqWYR6ES10ElWxWS5YJlRqWtJ0ESv1Jbjm=bwP=YNUJbsxWt=mExwDXOFeWliYXlJDJxs0XOMeJxFP=SsqESF/J0jb=SW6Exs/EbMD=bvUJbuAExW0Eb1qWSGP=livXtp1XSFQW0RPWbRP=SpbEbjUEYReJbvbESUUJxs0Jl=bJ0Mx=YJ/=tMQJSW/EYJx=SFxXSHbEtpbXlJ6JbuQE0sPEOWPJ0WqJxJeWbG0WlJ6=Yse=YMDWxu0Xti1=SR0WOs0Jlj1WOW/WxHUJxJ0=SibWY=1JbJ6EYMPJx=U=tu6=tW6WbGqWxvY=SGD=tJAEOuxXOueJ0E1J0iYESEbXSHYXlEbEbMeEbsq=bNmJx1A=OJqJbFeWtJPJbjYEl=1EbHbES=1WOUbESE1EYMx=lEvElMq=ORQExv1WbMPExRPXSWA=lMeEx1xWbMPWbJQ=SM6=OFeEtMA=YNv=YNUExNbE0uqWbRqJxu6ExweElpY=liv=YMeJxw6ESRxJS5YWxNbXOp1=bNUXtjYXtNmXOReESpmWOJe=bFq=SWQW0seJ0EUJxM6El=bWtJPXOjvJ0MD=Op1WtRxXOiUJxvUESHmWSwqXS1QXSjYElR6EOwqJxsqJbMAWxuqESRPXtEbWxMQExEbW0=mEtJ0=b=YWbGDEbG6=Os0XOF/EtJqExH1ExJAWOW/JSjYJSMx=YJ/WbvbWbFQExGQEtW0=biY=lMPXSwQExFQXOGeEtsPEbEvWxwxESsqJSWqXOJQXSwPXSUvJ0MDJSR0=OsqWx1/WOEUWx1xE0MDEY=mJSW6ESFxEbNvEO1/ESM0Wxw6WtMeWYJ0Wbp1EbFqXtEYWtRq=l=1ESEbEbjUWluxJbjvXOW6Ex=Y=OMxEOR0=Yu6JYWQJYRD=biYJYp1WOM/JS5YWbFP=SUYXOuAJYu0EtMPXSseWxwx=tEmWxGPWS16ExMeEb1QWbpU=bJAEOiUWluD=bsxWbEvWls/Wbi1ExsxJSW0EbWAWYRQEbuxEtJDWOpYESp1XSEb=Spv=lJeXOvvESGe=tNmExJAExRDEOE1JYj1WOsAJbw6EbW6ESueEbsQJx=mEbNY=OUUWlMD=OHmESMP=SNYJxUYWlNm=b=mW0sDXSw6XOMQE0=YEOuqWtu6ESFPWbp1=OwPWYuDJb10=bFQWbEYWxs/EOwxWONvWbR0=OJ0=lsDWYjvE0JxJS1e=SMAJbEv=OsqXOJDWONbEOJQJxM0WY=vWxsPXSWAEO1D=OHbEbw0=tsQXts0JxvmExv1=bJ/ElWqEbsDEtW0ElNvEYW6E0sQ=lW/WtuD=Sv1ES5mWtJq=bsqWOwAExRAEOGQW0pU=l=YWSEb=SiYW0uxEOWDE0Nv=SueWSJe=bMAJljYJbF6EORe=OpmJ0=bWlp1Ex=bESFA=bNYXtsA=bw6XOu/XSRA=YuPWtuDJxHUESR0JS1xWb51ExRQJxpvWxjUWbvvJbNUXO1AXluxWOE1EtjmWtJ0ExWQWOJe=bvUXtNmEOUmJbjbWOsDJ0uqExJQ=SRPJSwDWYJ/=bux=bJq=bEUEbW/ESWeWbGDWxjvWlMAXliUESFQWbRDEOuQExJqWtJeWbseExwqWSJQEbGAESG6ExGqW0uxJlWDEtsxJbFeWtWQEbE1=OsPJbUbJbFqWbGxJlRQWtWeXtReXORxXSM6JxGQEtMQE0MxWOFDJlibXOWxWx5YXlue=tRPEbJeW0MAJSGe=OJAJSiU=SvYJSGqWbJeJbHY=lsAWbReXSsxEbHmEOJAWSiv=luP=SwAWb=bESEU=OJDWOWxJYJ6WOWeW0ueWtjm=ts6J0=vWSibWOwPWbMPEYjbJSMDXSN1WSvbXSvYEls6JljUESHYEb1qXlEUJSsA=ts0=OweJYJPXlMAW0W/WluA=YJDWSGDJbJQJxFDJbivESsDEOpUEl=bWtW0JbW6JbGxXlJAXtEbWOGPEOj1EOF/XlRQWbFQWt=bWSJxWOHvXSwPJ0N1EbMqEb1P=bFe=YRxWSGxWlMPWYjYEOUbExwPJ0j1EtsQJxG/WOs/XO5mE0jUEOi1Jxw/WxJPWxR/WYWAWls6WbMDWxpYWSGeESHmJbJ0XOMeEYsx=lW/JYJeES1x=SGDWSsAEbi1XSHUJY=vJlWPE0MQJbFD=bM6WSRQ=bNmEbG/WOMqElsAWOM6Wxuq=tMDWtjmEtuxJlJ0Ex=m=YRAEbRAXSJAJYM0XOueXO5vEbibWxF6JxuDEl=YJx=UJbWQElWPXlR6JYMe=bRDWbNUWYW/EtRx=SNYESE1WbF/WxFDXSHvEOHbEOFPElMxXlWA=OWA=O5UWlsqWbF/XOUmWbvYEx=v=livWOUUW0s0Jb16J0J/JSwq=SWx=YEmXOpUWxu/JbMPXtuqESjbXtsQW0J/JxM/EbibWSpYWYpU=lNbWtpmJlNUJxR6EOwx=ONmExjYE0u/WOGAWliUXlJPWt=UJxu0WOUU=tR0WtNYExs6XSH1WtuDXSuAEYs6XSJeJxGe=b1AWOs0=Sjm=YJ/Jx1eWSEYXSp1XSJPEbFeEO1xWx1qJxFPEx1xESWD=bwQWtsxEts6=lpYElWeWxHvJYMQJxM6ExHbJxi1Ex=UWbvUWSuDEY=1=b10XOMD=lRAWYWDEOwAESHUEOp1JxEvJbvYExw0Exiv=bseJ0WAXSvvJbRqJYu6WOWQE0M6WxG0WSs/JSMAJbEYWbuxWO5UXOHYJxpYExJxWxRPWYsA=tJ0WxJ/W0ueWSWA=SEU=S1DXtuxXSF6EtsQESR0J0M/ESwxXt=bJYWDJ0WQW0RxWxuqJxMDXOu0Jls/JYMAWtEbJSw0WOUvJxwx=bwAJbHY=OMPEtseE0sQEbMAWl=UJYiU=OEUWbpbWbFeWOM6JSJ/ExWqEO5YXtsqESMPEOFP=b1eE0EmEOj1W0j1WOpbWSUU=tWqWS=1J0RqWOw0WSN1=S=v=b=vXOM/Ebw0WbibWbJeXOFA=SJxJbWAWtjUWYWxES1PEtJPWSEvESsDExUvEtNYESWqJxuD=Ou0=Y=UWbHb=bwxWxRDWxR/EbHYWluDWxFDWYJ/ExRxEYs/=SHU=SHY=SGeEOJeWSpvE0W/EbiYJSw0=OuDESHUXS=Y=SivWOFqWbvUJxUbWbWAEO=mE0RPWSsP=SRAE0RqJYs6JSM6WYue=Yse=ORP=OwPJ0JxJlu6EtWx=OpUExJeEti1JSF0XlWxJbuAEY=1=S5m=YMPXlMxJSWqWbFPWbRq=OuQWbRqWx10EluAWOj1JxR/WOJPW0j1EbNmEOs6JbFe=OWAWORAJYuxWlEUEbsxXluQEb1eJSsx=OJ6WbF/=tiU=SjvXlRxJbwQ=YEUXlpbWxwP=tM0JSMDES10XSFD=ONbE0Me=bu/WtpmExW6JSW0EOiYEbEvXS5bXOG6W0uD=Sv1E0seWbwQJxW6WYNvJxuq=SE1WSuQJxJqExivWYJ0Exs6El=b=SF6XSM0WbRqEtNU=bWeXSHvEbGe=ONmWlEUElNUExu0XOUY=SsqJljvJSj1WlMqJlWqXORPEY=mWOsDWO5vEOW0WbuQEtsDESue=bF0Xtse=SpvJlsPEtW/J0iYXlReJ0RQEtu/=OMAXOFQ=O1DWxj1=ORPXluQW0jYESwQW0u6EOwQEbGqJYRxExUUEbGQWbiYJbNUJ0seXtJq=S5b=YM/JSw6XOWQEOpvEluxXOU1ES1eXSJeEOJ/JxsAE0u0WlRQEtNUXSFqWbs0Xli1WlEYElJeESW/ESvbW0Jx=luP=buPEYjvJbseEx51ESs6ESF0Jx10XSJ0ExJeWlW/ExNY=bJeWxuqExM/ElJe=SMPJbuPEbwAEbUm=SpbWS1QWbu6ExMAJYiv=YWQJSGD=tW0J0WqESu0EYj1JSs0=lM0WtMQWtWDJlsxWlW6E0imXtM0=OjvE0uQ=OR/=SJDWOvUWS=YXOR6WxiU=OFAWbG6JxweJYWx=SF6Els/WSJ/XlsP=YsP=tseEYue=bibJYRQJS5mJbEvJSM/Els/WbwDWlsqEOwQESpmESG/WtpUXlWAE0=vWl=UEOs0Wt=vESsqXOwD=OUUEYEYWxGqEluAEbivEbRD=OweE0MAXS=1EYW6WSG0XOJPElueEb=mWSFQWlsxJ0sDESEvJxN1XSWPWxW/JxEYE0NYXSUYJ0imWxR/ExUYEbvb=tEY=YWPXSNUWYWA=YpUEbwqWbEvWSFe=buQW0pYWSHbWxGA=bvmJSi1WOGx=bEUXlsDJ0M0XSJxEbG6JSwxWOpU=OHYJx=v=tsAXOM0J0JDWYM/EbvmJlMPJb5vESs/=lWQ=YNbXSjUJYjmXOwQXOueJSweEOHb=OibJSMDXSEbEYiUXtMQJbW0WxEbJS=1=YMQ=tWqWxuxWtpY=YjbJS=vEbimXSEYJlN1EbFAExFQJ0p1WYsDExFPESUm=ls6WSW/W0pbEtibWtEUEYu0=lNU=SGQWb1D=bM/XOp1ExvbEOMQJSEvJlsqJb51JlN1=OJDEximExGeWSFx=OFAExReEOu6ExRA=SU1WSwA=bi1WYRqJS1DXSJAJlJA=Siv=YjYXSHYWtjbXlsqWbuQElu/WSF6EYRAJxsQ=SGPW0M0XSGPXOMeXtjYJbJQWlueWSF6=SvYXtNvXlR0XlpY=SRq=OiUWbF6JSp1W0NYE0Nm=lNb=YpmElRAWxGDWY=1EOHY=YiYJSiUJSWeJ0EmElsP=SGeJSUYWxRQ=SjbXtR6ES1xWxuqXOFPWOG/JS5vJYpYXS=m=bsPWO1q=OsAJ0M/Wls0JlpU=OW6WlWeXljmEbuAE0WP=OMQXtseWSj1=S1/Wxvm=bpbEluqWxRxWlp1WbM0EYsDJSMq=OG6XOseWx=YWbEUJbR0WOE1Wts6JSuAXlW0Wb=YWOsxEx1AXlEvWSvmXSMDJSJeXtuqElRq=SGeJYEUESMDExjm=lpYExu6XSHb=S5bWl=YWli1WYJ0=S5bXSiYJx1DExJxW0E1ExWAEOiUE0W/EluQW0u/Jx=mWYsqJxRD=Yj1Wx1/XOpYWbR6=OMeJlu0EYseEb=mJxpY=OiYExuqJYsAWSWq=SW6WSuQJSWqEOMq=O=1ESUmJYiUJYpUJxuPJSu/Wxw0Jbi1JYJAEYWAExsA=YEUJb=bXSiUXtjYJxFAWtJ/WSsPJbHbXO=1Exux=bwPWbHbEtRAElu/WbjYXSsA=buxEbF6ESF/JbGeEYJPJbG/XtuDWYRAJS=vXSuQWYRq=bRQ=SwDJS=YJSWxWOMQEYEb=OFxXtEb=bRPXS=UJlpUExvvWbRqEbjbJbUYWlNm=YEvEbGQEOF6WYsAJlJ/EYW0ESsAEYEU=bjvESsxEONYWxvbExEmWbseEt=b=OvUEb1x=ORAExwAJY=1ExFAJlpmES5UESs/=lR/ElJ0=bF0EYpmJYJDWS1eWOibJxRPWbWqJxWDESMxWOvb=SUYElWeE0R6XtJ/ExGeEYjvXOGQ=tWAXOF0EtRqWSG6Wxj1ExjbEbu/WOvUXtRq=SjvJ0EYWlWPJ0WA=b1PE0u6=bU1=bJ6XOHYWYjbJSUvESsPWOGxESFqXOGAEOMQWl=UE0W/=SMqXORPEYM0WxRAWSUYWbH1ES5YExwx=tMD=tiYES1x=lWPXSE1WlRPXtMeJli1=bvv=YJQJYRQE0=vJxMeElEvESueWluqEYRQWxJxE0NUWbNvJYs6=YsqWSEYXOEY=SRqWSGPXOjbEtMqWbFxEbJ0WYM/Exu0JYiYWxF6EtpYJxG6=YEmWbRx=tuQE0NvJbwDEOJ6EYu/=lJDXS1DW0MAEbW0WxJq=SR/Jb5YElWx=ONYWSwAJSMqWSu6XOM/ExHYEbsxEbWD=SjvXluAJSJ0JSjm=lW6Elj1WYibJb5mEtuQEYE1Etux=YR/JYJDXOHU=bFq=bUmEONU=OGA=OuDW0WeJlu/=lEbElEm=tReXtR/WSi1ElR0=YJ0=luqJljbJb1Q=SJxWSiUW0seEx16J0EUWxF6JxNU=bvUWYNbE0uqXOMDXtEvJYimEOHb=lRPWxUYXlNbJS5U=OMDEbFqWbu6=OFDElsDJx1DWlJx=bjbEOUmW0JxESM6JbjUWOMQEOWqWbvYJSvmXO1PWYjv=YJqXSuqWxNvJSMD=SJDXOjbWluxExivE0NmJb5vEYE1=SWxElJqJYJ6EYivEOsQJY=YEbHYXS=vXS=bJxWQ=S1qJbEY=SE1=bJDWxGPWOwe=SWPWtuA=YiUWts0W0J/EYMQ=OMQExHU=Sv1WS1AXtR6=SpmWlR0WlW/W0NbEYJDXOF0WtWe=lM/Exs/WlMAJxFQJ0=bElWD=lN1WYuQEO1e=S=UJSwQWtsDEbJ/Xts/=ONYJYR6JYM6EYR/WtR/EOJQEbJeWbNUWlR/JYu0EtJD=tJ0W0RqWO5bWOR0Jlu0EbpY=SUvESMAWtEmXtseXS1x=YJ6ESJxJxWeJbpmXO1x=YM/XOReJxueWOHY=OsPXtWe=SpY=YjYEtJeWOG6WOEvE0M0WbW0=SuPExEUJxFPWYpbWYibXOMxEtueWxEvEYp1WxuxWbHYWbsPWSFqEl=YXS=1XOWqEO=vXOjmXSimWtMeEYNYJbpb=OGPWls6ExJDEY=1=Y=1J0=mJbMeWYJ6EbRQESw/Els/XSF/JbG6=SivXOM/W0jU=luAJbsDJbJPXOsPJb1QWb1A=YjvExJqE0sPJ0s0WOF/=bpUWOH1WOvbJYs0=SwD=O1DExM0J0jvWlib=ONvEbF/JSWDWbueEx=vESR0=tu/=O=YXO5YW0EmJlWPWlJeXtuP=YRAJ0M6WOj1JbRPWSM/JlRQEOFQWli1WxGx=SNvXSJ/Wt=UXSp1XlMQW0jbJbwqE0=mEtsD=bs6WSFxWSW6=YJ/XOvmJbN1=Yu6EbFA=lWD=lsq=S1/EYRq=OEbJSMQEluDExM/XOJqJS1A=lR/XtM/WYJP=tE1=bNbJlM6WSWP=YimJb1eExMAJS5mEOJQEO10EOsqEYpYW0MAJxEUWbFeWtivWlJxXSJ6=O=vEYMqXSs6=OJPJSivWSJQExGQ=Ow0Ebvb=bFQJlpYJ0M/EOuPWtjUWSweJ0jbWbuDEOjbXSF/ExWeE0=YJYMD=l=bESEvEbU1EtsQXSpbESN1Jbu6Wlsq=bGPWxuqXOwxEOJ/WbWQEtWDWlEYJb1DWOwx=SweWSGe=OsPJS16WSGxWlNYJ0MDWliUWlR6ExjYXSWeJ0pU=bFDXSsx=bWPJSsx=YW6EtjUJx1QXSEv=Oj1XlEv=lR0=SJQEOGqWtiUJlp1ES=vWYuDEYibW0jbEtpUXOGA=Su/JbJ/WYMPXSsAWx5b=YRA=O1/Wbu0=YuAESW0JSR0WtMe=lEYXOF/JbpbJSEYEx1/JxJ0WlMeJ0EU=lEmElEvJlpm=bMA=bRD=Sjv=bJ/EbuPW0RDJxGeEOuxEbiYWSJAESGQJlsPWb16Wxs6XSu/=bi1XS1/ElsA=bsP=lE1Xl=bXSRPJls0EbWeEOUm=SjYEbsxESpvJbMeXSiUJxJeW0sQExMAXOGAXls/XOReXOE1WbMQWljvWOu/XOwP=YJqEx1x=t=mEtR0EluPWxRQJlEm=luqXSJ6WtRPXlRPJb5vEOwe=YRDJbuAE0RD=SGQJbHm=lsAJlW/EO1PJYWAJSF6ESseJSMDEbMxEOpb=SJeW0J6=bpbEl=1EOiYXOR/EYjUWts/=OR6E0WeElJqJYWxE0WAWx5mXSJQXtRPEO=UJYNvWxjmXSFDESHv=ts6=tsQ=tMQWSWDJSFeEbMeJxF/JlsP=bRDEb=UExG0EbsDExNYEbR6Exu6=YpbXOHY=tWQ=YJx=OG6JxibWS1AJxUvJlMeJSRDJxEm=lJ0=bJ0WtjUWxJ6XOEmES1qXSjb=YuxEbjUJ0imEbs/WOuA=OM/=OJqXOseExseWtEvEbvmES=1=tJeWxE1XOpbXSR0J0=Y=OF/ExM/=lMAJlsPXlsAW0EbExp1WOuqXOGq=S=UE0uxWbJQ=tjvJxJQ=OJqWSsDJbsq=bpmJbRAXOivWORA=tM6JbMQWx=bWbJ6E0uQEYuQWbjmXOFA=SpmExHUJxivEYWDExRPE0MDXluPWxvmEl=mWlWD=SR6ExW/EtMeWOwQEbRDWxwP=SN1XSUmJbj1ESibJbGxWYjUWbNmWts/W0EUXlpU=l=mJbj1JlRQ=S=b=O10EtueXlu6JbFAWlM/WYNbXORPESpvXlsAEOG0=lu/=bMPWtM0XOJ6JYivESWAWS5vJljbExwQJSiYJ0sqESEm=bRDJSFq=SNvWbwPEbJe=lJ6W0WqJlM0XtMD=OE1JYiv=bGQWOJDE0JPExMAExEb=OM/WORx=tWxJbHUWtJDWSR0=bRxExs6XOJxWORq=S=1WbRxJ0ibWYux=lWxW0u6XS=mWOGDEtjvEbuDJ0=bJbM/=SEY=lRA=YMPJbuDXluPWS=Y=lReXlWAJxRPW0ReW0WxWOjmEbNmWlsAWluq=bpYESUv=OG0ExRPE0iUEbN1=tMeEtjYExJA=OjYExuAWxM6ExRqExRqXt=vW0MAJbi1WbjY=SN1WYuAEYW6Wtu0XtWQJxux=YNbXliUWtWDEtpmJSRP=YM6WxiYESwq=YJ0JSM6JYJeXORxEYM6JxjbWSJeXOM/XOHUJbW/ExF0WtMe=YjvXOJPJbWDJlM6ElM6Jl=U=YW/XluqESiU=SHbXlRDExU1WbuqW0u0J0u6=limJxWqWtiY=tReEYWQEOMDEONbWSHbJbjUJYRQEOwAWxibWlJ6=Su0JxRA=b1QXSvUEOJ0XtsPJbs/JbNvEtuAWxH1JSJqXlJeJSpmEOR/E0jYJbR/J0NvWlNUWxuQEOMPWxueWbH1WS1DJYJqWlu6WbwD=tpUWSv1=O=UE0u/JlNYWYEbXtWPWOpmJYpYJSue=YJxESG0EYjUWSR/=tEUJxw/WSHmWOwPWxuD=OWDW0ReESiYE0JDWlMxW0Wx=YJxJSsDWtjvElRPEtJxJSM0Wbw0JbsDEbsxJ0=YW0M0=OjUJxUYXlim=bvbWOsqEtu0JxibWtEvXOJ6EOFPExNYJSwqEbRDXSw0WlMqWO=UJ0MqEbjbESJQ=SR0JSs6EYsq=OFxWx5bWSiv=lpbEtibWxsDWlivWlNmExWeWS=bEYM0=bFPXSW/ExvmXlEb=bNmXtWQWxJ0Xtu0WSGD=tJDXSvbESM0JSH1JSjvWx1eWxJ0ExG0J0EvJbsQWlWAWtWqESsDE0p1Exw6JSJAWO10ESNmEOM/=OUb=bW6JSRD=OvbWOW0XOH1ESR/JYRPJlRPExsq=OR6=YseExM/WtjvJSRAWOs0XSsqJx=YXSMq=SuQEYsQElpb=YsxElsPEtJqEOMD=OFAWSjYWOMqJbUvES1eESsqEOG0W0sPJbw0=Yu/XOsPW0WD=YEvW0MDWbJQWbuQElj1EOu/J0WxESFQJbvv=YJDJYsAJxNU=YRAXOJAEY=UWlpUXSG6=YW0=lW/J0EUEb=m=bFD=YW0=tWDEbseJSF0JlNbXlsQWxsqEtjUEbjb=OJPWS=vEtRPJlWxElu0WtMQJxEbEYjbW0MAXSpUXSF6=Ou6Xl=YEYs0ESF0WOWD=bJPJSJxJlpbJSU1=YJAWxJ0ElRQWbs6ExFDJb=bJ0MDJ0NUJbMxJxu6JSHbE0j1WSF6=OpU=tJ0W0jYEbWeWbUYWSwxEYuDJbJQEOUYExpYJlMqExuQExNY=O5UWbNmWxvvXSHUJYE1WbW6=tR0EbvUXS5vEYWAWOJ6W0s0Jb=1Xtu6EOFeXljmJbWQ=tJDWYM0=bU1WOwQXOjUWbM6XOG6EYWqXOuxWtJ6ESNUEtim=OWqJb5Y=SwAJbjYESR0=OwAWbuQEx5m=bWQXljbJYuQExHb=bR0WbNYJ0sAESJxXt=vEOwQEYsQE0RAJ0s/WSGe=YsDWSRPE0sPEYEvEOFeJbGDJxWPWbWAXSRAJlse=Ovb=bGQJSMPWtMqXOW/JxpbEbue=buQESJe=lu/Wxp1EOuxWSF6WtJqEbRQEtRqEYMAXSMeXSF6XlJPXSMxJb10ExRAJxJ0E0EbESp1WS=1=OUmW0jY=OGxWSWqWSM0EYWDJSMAWxEbWSs6JSMAJYibEbM6XORqEtEU=tibESFQJlj1WYN1JxWAWOFeEx=Y=tReEbN1WlsQ=lRQEluDWYi1EtR/=SG0WljvExu6Jx=bWOs/Eb=mXOHbJSpbWtMDWOEvWYjYJ0E1WSiY=OvbEYWeEOWQWYJeWOpYEluQWxWxXSEb=lJx=lj1JYRPEtiYJluPJbs/E0EmE0sQJS=YJbjb=YjUEbvU=bs0WSpvWbGxW0=UJb5YXtNU=SReESFQJSJ6WSi1ESpUEl=UWtWqWYim=YiYJbGQElRDJ0JxESjbWSEUWS5Y=tu/WYEmXlpYEO1AWxs0Jbs0WOGeXlNm=SvmWOR/ESFeJxpYXOEb=bMAJSs0JS5Y=lib=bJqWSU1W0W0WYRe=b=b=OEYJb=vXOUbEO1eEx1AEb=mEbw6WbMQJlivExW6ESMPJxJ0WY=bWlRx=Sux=bjbWSW6EOpUESHYExvvWlsDJlW/JbWAElNUEbW6ElWQ=bWQXSNmXSw6WOuDWbUmEOUYEYEvXOFqEO1xJS=mE0MQEtMeWlpvEtJqXO=YJSMAESweJSH1ElE1XOv1E0=m=SsqJbvbWYWDWxwqEtpmExGPJlpY=tRqEYNmXtNUJbWDWYsPWSN1WlueXOH1ElMqJl=YWlW0Ets/=Y=1JbMqXlMqEOJDJlJ0WbG/WSUbXlsxXSuDWlJPJlM0JSG0JS16JYW0XtWqXSEvJxFAJbw0Jxue=OJ6=SEUEOMxJSi1EYs0WOW/XlN1JbR0JlJP=OwxJb1q=tsAWtRQXSuPWtEv=bJeWtpmE0R0JbUvJxw/=OHYExiYExEUXSpU=bWxEOJAXOwAWOsAExWPWlMeJSGDXOsP=bHYExEv=Sj1Wlux=biYJxGPJxUYXO51JSH1WtRqWYibXlWqWSH1=bw0WxF/WxMQWbWeXOjb=YR0JYNYESHvXSFxEbs0EbJ0EOiUE0N1ElRqXOM/=OvbJbFDEYR6J0pUJSUbJY=U=OEbWSs0=luqWxpYXOH1WSNvEbJ6=Ypm=Os0Wx10XOuDJSGqWx5bXOHmJxUb=O=b=buqJS16=lRxWOWqJ0uD=bsD=tjm=Ysx=YuQ=tMxEYu0JbGeExNUXtu0XtNvXlsqJS51WbwQ=YMAExvbJbsqXtR0XO5vJbw6=bsQJYWD=lsqW0EUESs0=S1D=SReESEm=SJPJSG6WbMxESJDWbsAESFeEYNUEbHbESM/Wxw0=limXSNY=lNYEO1/XSsAXO=v=lJeJbp1XluxXSWQ=lEY=Ow0=tWP=YsqJ0uQWxpbXSN1EY=mEtM6=bpYWSG0ES51WbEU=ORPWSNvE0MDExJq=bMDWbjvESw0ExuAJY=mXSwQJxMQJxueWOw6ESNUWbFPEbF/ES1qExwQEOuPEbWAWtjbWlWe=Y=vElJ/Jxux=YW6=SRqJSibJb10WtJqJbp1W0sQWO5v=SF/ExEU=YW/Ebs/=YRq=S=vXO1qWbsDXtEmWS51EYRAWlRDXSEY=ts/WOvm=OsD=OJx=OFPJbwPJY=1XS1P=O10E0uDEOuqWbu0JxFPElJDEOibWOMqWtueWlRDEbJx=SJ/JYE1EbM6WtW0WxWAEbWx=SW/=YuAWtibElM/WOivEb=bEbNYXS=vExuPEOsxE0Em=tuqWOs/J0ux=lJP=OH1ESMq=O1e=li1Jbj1WYuxWSRA=SWDEO1qXOw0WOF0EbWQESu0=tWQEbEmExUmJS5YEtW/Ets6=YEYWbivXONYElEUEORq=OsDJYRQWOGPES1/JxiYXSHUJbJDWbRPW0RQEliUJ0RQEO16XS5v=YM/=Y=vWbGDW0=Y=tu6=SRDXSGeXO1qWSpUJxGq=SUbJSwx=ti1WxRAEbFqWbG0XO1xJSueJSiU=lMAJ0RQJSiUWbs6WbFQ=bpvWbMPEOJq=O1DWbFDEYJqEY=v=bvvEtRDEbJAXSRAXO=mWOu0ElNmElE1=YWAJbsDESMAJxHUESEmEtW0Xl=UWbJ/WbsxWOwxJljmEbNvExFQ=SWqWYpmWSF/ESReJxJQ=SRQWSJQWbJDWxR0WxFeEYMx=YsAExMeW0MDE0pY=SFQEbNUExjmXlu/WOux=bNm=lNmXSuPWxMxWxH1WlMeWxFxWOJ/=b1QEOsQElJ6XtR6WxiY=OJQJbWPWxu/XSuP=SjYW0=YESEY=bWqExJxWSvmE0RDEbW6WSs/WbF0XSuPWbMDXOJxJxRA=OueJbEbESGAExvmWx=vXlpUESvbXlivE0ivWYRAExNY=ORQEtNbEOG/XOimJSw6JbwPEYsAWbUmEOW0ESR0WbWA=ORDJSUmWbFQWxHmWxNmXSjbEtJx=SWe=tWPWYuQW0uDEbJ0ESEYWlJP=SuxESN1WlueEbwQJl=UElibEYMPESUbWS51ESWqJlibJSwPWbs/XtJQXOFAEYMDWxu0XSNYW0W/ESu6=lWQJbRqEx5vESW0ESwAWb1DWOWeJxHUJYW0=OvU=b=vWSFAEOWqElM/XljbJbFxJYM6Ets/E0sQElEYWOHmWbWPJlMPExFeWSpUJSWQW0sAJSWeEt=mXlEmXtEYJxG0JxWPJ0Jq=tpU=OHU=S1qWOs6EbuxJYs6XOU1WtRQEYpYJS16JxMxJbsxXOv1=b=UEYimJSNbJYsxElEYJlRqEOFeXOjb=YsqJbjvJYjYWxUmXO51E0=vJYjvWbUYEb=mEYpYXOWqESwq=ts/JbW6JliUJxuQWOGQWOuxEYMQ=SwPJ0J0EbF0=YMPXSJ6WlR0JYWAWSR0J0JDEOW0=Su/JYEYE0RqJ0J/WSNUXluAEOueWxMQWbRDWSNYJSpmWtWAWOH1Wx1xWSJP=lW6WOuAXts6Wls0=lWAESJ/JSRxE0M0XSN1ESFxW0Jx=tpUJYMDXOu/=Sj1XOG6=S=UWbJQE0EUWOGQJbJQE0MAJxw0=OEUEl=mWOJ6XtivE0imJSi1JSE1JSJQWSW0WSFeJbsQW0MP=lMqEb5U=bFxWbFDEYRAJS1DJYs/E0=YJbvmJbGDWYuxWYNUJx5bWlMxXtRPJxpmEORxXSiU=SpbWSFPXlJxE0s0J0EmWtWxWlWDWOHvWxHU=YWeWOuDWb1AEON1ElJ0WbpYW0RDES1AJSwxWb16=Ow0ElsQEbwPWlEbWbsQJbWxWSUmWOGP=b=vJb1AXOsQ=luDXONbEluxXlMqWtp1XSp1J0RqJSjv=bUU=bJ0E0MqJSjvWxRAJlJDWOFQWS5UExwP=Oi1Xl=UWtjmE0Rq=SEb=bJ6=OU1=bJQExiYWbNvJbJq=bFPJ0pmEb51=OMDEbivWbs/WYR0EluPESW0=OMx=tNmWxWxEYimEOs/JSGDJ0u6ElM0=SsxXOJQEYJxES51Wb=UJxpmJ0sDWOReWluqW0M0Else=lJ/=bUbWt=UJlpv=OwxXlEmXlWxJSF6=ORxXSFq=OW/XOUvXSUbExRAJ0s/XS1/WlW6XtJqXls/Wls/Exwx=YMD=OHbE0EUElMqEtJ/EYEUElpbJbWQWxG6EOj1=YjY=bRPJbseXlJQ=OweJlJPE0s/Ets0=bW0EO1eE0WAJx5Y=SsDEtuqExJ6JxJAJxu0ExGPJ0RqXOwDE0ueEYW6EYJAWbpbXOFP=bR6E0seJSUYJ0R6E0jbWSF/EbHmXOp1Wx16Wx=UW0MxESJP=YMeWbJ0=SUYWlEYW0N1EOH1JxMx=SivEb5vEtjm=OwA=YpYWOjUJb=bEbwDEOGqJbF6JYJ6XOFQXSuD=YsA=SEYEYsD=OsqXlJqWlRxJYNYXOR0EbGAEYJx=tW/JbWxES=mXlWeJbw6Wb=mES1PEb1QJxG0WS1AWb5Y=lsxJlivEtsAXtWq=tJPESM6JbwDJSw0=tu0EOJDE0WeEbJAEOvmE0MPWY=1=OvmE0=mXSWQWSGAXOGe=SUmW0EbEOsDW0NmJxMxExR/XlimElWQ=SwDEx5mWbWQWl=1ExweXlJQEOGQXljYJbUUWOMQExNmJSM0XONUXtpYE0RqJSwQJSpYXOMA=YjmWts6XOJPExRQEbs/EbMx=buQ=OpvJlMxWljb=OFxXSUv=SuDWbEUE0jvJbRAEtMqEls/WxRPW0=1=YJQEOwQ=O=UEx=bEx1AJbjmXSEUWtNvXSM/Wx=m=luPXOw/=OGDJlivXtu0=lWPWxJAJxvbXtp1XS1q=ljvES5bWxs6=OGxXtWAXlNvWO1AWSW0EYEUWOjY=bUUJlsQEtNYWO5YXtjm=SRxEbwxXSFQJbsPJb1qEbGPEb=bXtRD=tJeJbi1JbFDE0MxWxGAWO10=Y=UJYR0WbGPJYsPExpU=bG0W0iU=tRq=OW0JxuxXO5mJbF6=YRxEtjb=SHbJYJ0=bvUJbFP=Sue=lEUJSG/EOsQJlimXtuQJSimWYJAJSw0JbGQ=OGAWxvYJxsA=SReElsA=tibEOJ6ExJ0EOi1WOHYJxG0JSNb=luqXlM0WxJ/XSFxESpbWOHbXOu6XlsPJYWQWSW0=OEY=SW6WbJxWSwAExUm=bWQExReEYWAWbpmJbuxXlMPJS1/JS5mJSF0XlWqWOR0ExN1XOpbJYWAJbjvESJA=bGQEbJqEtj1JxjmWSiY=SG0Xt=vXSJP=SiU=YW6WSueEbHUXSim=OJQXOjvWSF6Jx16JSvbWYJAES51EbNbXSJ0Xlp1Jls/JbG6JY=UJ0NYEYRPESNvJYj1WYuAESUUE0MDXOsxWbjb=b5UW0J/Jx5vElRPElR6Jx16=YseWliv=bUb=ORqWOiY=SR0=OG6WSpvWx=UWxiUXSRDWYNbW0jmEO5bWlEbES=1WxUmXSiUWOMQJYpvWOuqXlJPJbjmJ0pUJSu6JxMx=O5U=YJeWt=b=tjvWS=UJlWQWbNYEb1qXSueJYs6EtpYJb5b=bM/XtNbEtM6=lsQWlj1=bFDXSimJb=vWbF6=SRPEbWPEYWPExMqWO=UEYuAJYuxWYJ0Wb5Y=OjUEtW6WlimJ0JxEtWeWxM0=tibEOuxElM0Xt=mJbi1EYWDXlEUJbRAWS1/JSGPJb5vJYReJbJDWSpUWbimXOW0XSw0=bwDJx1PEbs6WOjbEbWQEOWe=ls6W0JA=O1q=lJ/=YsA=YJ0=bi1EbG/=bFe=bw0=bsQ=SiUJbMDE0sP=bMAWSsxWS1PEbsDWYW0XOjUWO=vXOJqWYjmWbsxXtibXlsAJxs0=SRDJSRQEbWA=tpUE0RAWbF/Jx=bWxsAWbJAXlpUXSG0=YivJbGPJ0seWOjm=bFDWSH1WO=bWbUYWSJ6JYJ6XljU=SwqE0NYXOMDEYibE0WPJSG0=YiYESHY=lpbWYpUE0MQEtsxJljYE0J0JxM0=lW0JbJDWOHmEtWD=OjbWlNbJbs/ESjUWYiv=SuAXlR/XSuAWx1xXOEbWYJ0=YpUEbJ0=YN1WYp1W0pYXlp1EO=UE0jvWxp1=lWPWtMqJxUm=bsPWxWPXOUbE0jUJ0uDJ0p1ExMPESG/WOjUWSF0JlM0JSRx=Ss6XtMDJYsx=b=mEbu0ESGeEluqWx5mWSJAXO=m=OvYXtJPElJ6Ex5YWOuD=SwQEYN1=tu/W0u/WSMAXOFDWYR0=lJ6JbNYXtsqW0pmWbM/Eb=vWxvv=t=vEYu6WxF0=Si1JYEbE0uAWb=YWxG0E0J6=tsP=bWxE0NbWxJ0=OHYWtsD=tu0Ex5UExjvWSi1=O=bWxRP=buAElJ0WSJA=OJqESueEYsAXSJ0=bRxElux=bW/E0NY=YMP=bvUWSJP=luxEt=UXOHvWSJDJbs0WlRQExWDXlsQEYW0=tuA=tib=SibWb5mXljbJSJAXSRqEYjvWxU1WbvUWOvv=tuxWS1AJlMDJbNYWlM/XOUbXlNmElEb=SHmWSu6JbM6JSHYXlpmJYiYJb5bW0jmXli1WlR0=lJQE0pbW0uQ=lWqExJ/JSGPE0=1WbUbJSjmWxJq=bWPJYWDESJQWlW0EOWPJYWAWbG0=OR0=bu/=tWxJxwqWbj1EY=vJlWPWxpU=bwqEbNvWxuPJSw0=YJ6=lu/JbJ/ESweWSiUJ0WeXOE1XSGeEOjb=SWPEbuA=SjvEOueXlWPJSi1WOUbJYjY=bG0Jxs6WOpvWls6WOH1JYJqXtsxJSN1WlMAWYs/XlR0JlivJSuqXO=mXlpvJYNbWORAJbWeJSwQJxs0ESu6WxGDXlWe=S1A=bsQJYs0EOMA=YMAWSHYXOsxEOFqXOU1WONmEOEv=lRe=YNYWlu6WOuq=OM/=SwPXSivJxWAW0M/EO51ExuQEbvbW0RAWYs6EbR0=b1qW0uAWxH1JSWDEOv1WluPXSpUE0MQXSGQJxpv=Os/WY=bJbW0JlMPEYNmJximWlsqElR0EYpbJ0ux=OuAWtNv=lsQWxRQWbMe=lsQWbib=bvmWtim=SRe=OFxEOpvElJqEOUvJlseEO=YEtJAXt=Y=bRAJ0M6XOjbXlMPWOjY=Op1WOJQEt=1Jlu0Eb51WbM6WORx=tNmWlMDXtMPEbRAJbW/=YEm=Sw0JbwAXtuPWYueWxwqWONUJSJ6WxJDJSF/=OwPWO10=t=Y=bpUW0JqEYM6WbR0XSHY=Y=mJbMDXSRxEYWx=bFe=SuDWbGQE0W6ES1xEOHbElEm=YNbWYWD=lM0WOv1=OibJSJeJxHUWxW/ExseWtu/=bRQWYEvWtJ/E0WPExj1WxivWSF6EOJA=b1P=SFeXlpvXSiUESs6WxMAJbMeXSpYWxWeJbsDEtMD=bN1W0NmJxWx=SuAJ0MPWOEbW0i1Ex1qJlueJ0p1=O=vXSuxXS=bWSUbWYpm=SiUWx1eXOJeEOUvJSRqWOjvWxG6=SFQEximJSHmWYRxWYueEbuDJYWD=OHUESMqEYEYXtWAEOJ/=OU1JbW0EtuDWx5mEbw/WSFxEbF/WSwxWlRqJxWDWYM0JxivXSNb=O=m=SGPEOW/ES10WxpmEx1/EOH1XlJQXOWeEOjmEOvmWSiY=lRqWbFxEtMQXlib=SNbXOEbESG/WxwAEbRD=S5UESJDExwqJSJPJSUmESuqWbMxWxJxWtj1JluAWtNmES5Y=Ou6JSGQWtu6WSG0=tu6JxFA=bF6=bv1WtsAWlJxXSJQWOpbWOJ0W0NbES1eJSEYWYueXtjU=SMqXSEv=tiYWbvbXO51XOpY=tWxJlJ/WtJQWlMAWxMDJxuqE0Eb=biU=OwPExpU=buDJYMq=YsAJSNbEtpbEO1eJSNvWxpm=OMxESiv=bsDWOEUJSj1EONvJlJ6WOp1WSUYJlJ0=OMxWS1QWtEU=bv1XSW6Jbu6JlM6WtReJbRPWS1xW0uQEbEbWlEv=YjYEOuDEbJPWb5UWlpb=buA=tJ6JxpYXOsx=tp1WYsQW0MqEOFQJYWqXSEvJ0JDE0sqXlE1EbFAJS1qXSs/Ebw0EtW6JljU=luQJbw0=bH1=SG0WtJQElE1XOMPWSsPWSuAXS10WxMQJbivXSpY=SRxJxjYWOWDWOMqEbivEbWxXOGD=tR/XOFq=OJx=O5vJ0s6ElMxWSuAXORx=Ys0Wt=1JluQJxNUJxN1JYJe=SueJbwqJ0N1WbFqWbGeEbiUEONmJbEmJx5vXlJeXO51=SM0ElJAESweXlRDJxFqEbJPXlMPElW0E0EbEb=1EtMDXlMQEO1DWSFP=bs/WYR6XOw6JSJx=tR6WSEv=tNYEbMqWSjm=lMQXOibElux=tjmXOHvWb=UXSUYWOFxJSHb=OG6ESNY=S1xXSHm=lRe=YR0=OueJxs0WOGxWxHUWOu6WbWQ=ORPWSHmE0uQElp1=SwAJS5m=SW/WxN1Eb16=lNUJ0M/XO1P=tJ0EYpYWxH1WOj1JxuPEx1AXOu0ExW/=li1XtRQEtsD=Os6JbN1=O5vXSFDEbvvXSHvJlR6=tJqWb51=lJx=SNUXSGeWliv=O16ESsqJ0EvXONYWxMAWxFDWls6=YpvEbReEOJ6=S1QExvvEOF/WSH1=tMAEb1/JlWD=bWA=SuDE0NYWYuDWSJQXSwPWSM0WYEUESjYJ0pvW0jbEtuPEOivEOGD=OwQXSHm=SsPXSNY=tsQJSJqXlMqJxueJxMQJSGAWORPWOHb=tWDXOu0XOimExWD=OWqJYEvWtEvEbWPWxR/Exiv=bHvWb1Q=bp1WtJA=b1QJbHbW0pYElJAESMAJS1eESpbJxsAJxjbXlu/WYpYJYEv=OJ0XSEYWSUmEtsxWxEvExFeWbNYEliv=buP=tuQElse=ORxWOuAWbvY=t=bWOpmJYRD=ls0W0s0Xtu6JS=m=ts6XOMPJbUb=ONbXtp1JbjmXSsqXONv=YEmW0JqESWeXOwqXtEmXtseJbJAEtseJbWA=OFQWbjvESM6ESsxWts6JSW/ElW6XOweESsqW0M6=Ow6JbwAWO5U=SUvWl=vXtN1ElNUWtWAJbUYXSs0ElMqWOEmEtEvEtMD=Ss/=YM0XSUbJbJ6XSRDE0R/EOWD=b1DJlp1=YjU=lEUWOv1EOEmXSwAJSGQWlMxWlRQXOG6WxR6JYJeWSs/WO1AWOUmEb1eXOGAJxsq=S5UJSvvJx1AJYimJYN1Jxw0ESF0J0R6EYEmXSWxEtJ6WbU1=SuPEtJxEOwAJxRPWbsDWbNb=SW/ESW6EOFeWOMAJluQ=OimWbGqEtjUJbM6=lMAJbN1WSJ6ExWPWxiv=tjbXSsQJxsDWxvU=YuAXOUvXSsAJlJ0ESMA=lj1Jx=1=SM/=t=1WSM6=bFPExG6ExuDEOwDEOv1EOwDJbUm=YWeWtNbEbuxW0uPEbueWtRDEljbJ0WAEY=mJb5bWbRqWbEUJx5vWOEbWlMx=YiYWOvb=OJ6WtuDEOpm=tReJSR0=bi1=tseJ0R6EYR6ExMxEOMA=bjvWSEYJluAXtJ/ExUvJlWA=SWP=liYJx=b=SJqEb5vEx1AWbsDXSRD=OpUJxwAExpvJbGqEYibEbReWOpmEtRDW0J/EOMeXlR6XSwx=bUbJxRDXlJDExuQ=bJ0ElR/Xtj1JYMAExHbEbF/WSRqWOw/ExRx=SR/ExGPESM0Xl=U=OEUWSUvJYNv=OvvWSFeWYWqWS1Q=b10WOseWbWQEOEv=OJDEOFQ=OEmJbE1JlMQWbuAEbwAJ0MxExwqExw6=SUvJxFPW0uqEOF6JbEbJSvUXlJAESJAElRq=YNYXSRqWbw6E0sDExuA=lMPJbw/J0J0XOFxXOsxEYuxJ0se=lEv=S1PE0MeJxseWbGQ=OWe=t=1JSiYE0iUJSJAWtNU=tp1=bs0EtuP=lWD=bGA=O=b=YiUJY=mElMxW0ivWOR0W0uPJxMPElu0=SuxJbHvEYNU=bpmJ0pUXOWDXls/EONvWSJ/EbF6EliU=S=mJbReXtu0XSpm=OUUJlux=S=vXSGAEbGxJ0R6ESJAWxNbJSibJSJ0JYN1=bEbJxR/WSwA=OMeXlEUEYuP=buqE0s6JxR/WSpmEOu6JlMDWbiYWYM0XOUv=tuD=YWQElu6EljvEtuxXlpbXOF0E0R0E0R6JbvUJl=bJ0NvJSJ/XO=mWSvvE0EY=tWeJSpYXtJx=OJPJb=U=tRqJx5b=b1PXS=vXOJPJbjUWxW/JlJxXOHbExs/XOw/E0=mWOu0EO51EORQWbjYXOR6Jl=m=tuDXSJxJYMQESivEYu0WxR/Eb1xJbu6WYJD=S1D=tWxWSGxJbjUWtp1JbMxXOFxXSJP=buAWSwPWOs6EbG0XS5YE0u6Exw6WOEUXts6=SJD=YEbJ0jvJSFQXOp1=YRq=bHUExJqEbNYW0MAWOW/=lRxJ0MQWxibJlRQWSM6JYuPEtWeEYiv=SW/EljUWtuqESivWluqExj1WtWeWSwPXSwDW0NbWtWA=bwQJSu0JxpmESWAEbE1JlRAXSuQWOuqWSsDJxjv=bwxWxwPEx5YESsAXtjvElR0EYp1Exue=bsQ=tJQEOjYJbse=SHbESw/JS10WxwAEbwAEYWD=YNm=tJ0EYMPJxGPJYs6EtivEYu/Xlj1WSW/WluqJlRqESMDESRP=b1eJb5mJlWqXOUv=SuxEljbJxFAES5UJbEU=tRAJSMDWb1PJ0MA=Si1W0jmElWxEOFqWYWQJYNUJYseJbNbJYu/Eb5bXOMA=tRxJlueJxF/JbWxXS1DXlu6JSWQExMDESs/=SF/WbweWtibXSweESvvE0RAXlNY=ls6ElpUWOHYXSFPJbG0JSvm=SG0EbFQJbwDWOsPE0MDW0JQJb5mWSwe=OMqWxu0EbG/WbNmJSUUJSRQJbHYJlW6XSUYExEY=YuQWxFQ=tsqJYJ0WOJe=tMxWSHv=bvY=OWeEYivJxJDW0E1=bUUWSW/=Y=YJxMDW0J/=bw/EtjbJxwA=liYXluDXOjYJxGqExU1JlpbJbvv=SuP=bEUJlivJYpYEYMq=ts6=bMq=YRAExsAWOwDWOHU=biUWxWPExGxWOw6ESRDXtsPWSuDESNUJSMPEOUv=tM6=bjm=Sw6WbMDWYWeWtEbXO=UE0p1ES10WbM6XOWqWSW6Elu/WluQWtRPXlJPJbs/J0WQElue=OHvJ0=1EYWDJlRxJxvb=Ys/WSvYEtN1WSueEbsQEtR/EOFDWO=bExRDWbu0=OR0WOjb=SRAWbR0ExjbJ0E1JxUYJl=mJ0sxXORPWbFDWONvJSsxEO5bJbF0ElueJxpYElW0WSNvE0WqWbpb=ORQESuAEYu0WOuAWYpUEYs0WSvYElRQJYWDExUYWxNU=bj1=lu6WbJPEtJQXtJQJxWPE0ivXSw6Xt=1=tWx=bJQJbEYWOW/WlMeJSsPWYJDWOweWxJq=ONbWOjmEbpmXOiYJ0MD=bUUESRPWS51JxF6WOEbJbR0EbU1WxG/Wtue=t=UE0NvXtJD=OGDXtWxWO5bEOGQExRqWSvUWSsPJSRPESM6JbiYE0=mEbUvWbsxXtN1XSse=lj1E0M6J0s/XlJQ=OGeXONmXtivJliYXS=mESR6WtJAE0imXlJxJYJPWOG/EOimWtJ0XSWQExMQJxEmJxJAWYJPEtR/WtiUWxuAJYibW0JD=bJqJxJPJbu0=tuxJxJ/Eb5mEYWD=t=1EOjbXlpbEbs/EbuA=OjbJxw6WtimWxFAXSueWO10EbG0WYu/JlMxXtWQEtJDJ0WqXSFqJljvWxHYWOJeWbJxXSRP=SjbWxuP=lW0EO=UWYsQ=Op1Exsq=tpvWSN1ExFxJ0WeXSUUXtjbJSEYXtRDJSwe=lpYJbvYJluAWOuqJxwQJS=1WYReJxG0J0NYEtpv=bwPXlu/=luxWO=mJx1DJbu/EYWAESNb=bR0XSF6EtibWONmJSE1JSwQEOGeESMAEYWP=bUmEY=mJSMQ=OsDWxu/EbEv=SFDXSRPXlEvEtJeEtsQ=b=v=S=mWbJ0W0jUJxJq=SEYXS=bWSw0ESjb=OUvJluqWtsxWxWqJbJ0XOjvJlu6EY=bWYW0ExpUXS5UEtsDJx1eESJxEYNvWO5mWOpUEYiYXOJDXSFxExv1XORPXls/XlJAWSGe=bpmJxUvJ0iYWlimE0NUESpm=OG/Jx1eJSG/WO=UJx=bEx=bElReXl=UEx=UEbjYEbW6Jxux=ts/XluxJbGDJlu6EbimJSvvWxEUWYJ0ExRe=bpUXOF/WtReXlMDJ0sAJxueElpYJSRPEti1WSRQXtuDXOEvEbF6J0jUJSim=SvUEbMeEtRPJSN1Exj1Jxu6JbFeJYMD=bGAWSMAWSwqXOR6Wb1eJSEUE0sPXl=1XOWxWYsDWOGD=SueXl=UWxMPE0u/=lJ/WbWe=SNbWYJxW0N1WlNv=OWPXls/EOs6ES=U=SwxWYNUEOs0W0uq=bwDJSUvEYMAEtueJS=bWSGDJlMeWYJ/=tRqXlJAWSFD=SEmJlpvJSGeWSHYEYim=OU1JbMAEOW0JYNb=ts0E0Wx=YEvWbR6XOM0WxGQ=bF/Jb=mXOU1=bs/=tsqWO1DWYu0JYW0ExF0=bGDEtjmWOw/JxJQ=tMqEYWAWxpUXOHU=YiUWxGQW0sPJYpvWS1eJ0p1WbRPXSRPWOsQXOiYExjvWlR6=Y=U=YMqES5YEO1DJSRqWSuqE0ivE0sPJSwxWtsxWSj1=bR6WbFqWxUm=OJDEYs/W0Em=SvYWbuQ=bjbJxWqXSiY=tJDEb=vEbpvEOW0WSR6Etib=YJqWSRPEOGeWOuDJxiUJ0=UXOjbWSG/=Sj1=lW6XO5YWlEvESwP=SRPESwA=limEtEb=bHUJYu0=OEvES5YWxEvWbEvJlW/JlsQXl=mWSHmWtjYWYu0WSHmXlMDElR/EbjYEYJqJxJ/EO=YWOJPWlMxEl=1EOsPWtuQWOJDE0WqXSs/EYueWlWAXlR6XSivJlp1=lpbJSEYEtjb=SFx=b16Wtu/=OGxEOpYEtNUJSH1ESwxWOsPEONYWOWQJljUEOFeJbu6ElJPJxN1=tW/=SNmWbF0=bEmXSUmWxMeW0iYJbNmWSueEOjUJxs/ElMQXO5bXSGxWxJx=OjbWbRP=O1QJbR0=Ssq=YJxXSJeElu6Wl=1=YNbWbuDESsAEbibEOG6WSsPEbJPEbG0XlMDXtNv=S1DJbWxWlpU=ORP=t=YJS1PJljmWlMAJxv1W0uPEtJPESMAJYJ0ExF/EbEbWtpmXluQXSi1EluqEOiUEOsqESu/JbuqEtpvElpU=tWeEOF6XSs/Ebim=tRxESMDXtNvEOJAXlsD=O1DXSMeJS1xWtMxJlWqESWD=Ow0W0MQXtsAEOiUWY=bXtpYExUYWSJQESs/WOUvWOvYEtibElJ/EOuDWlN1=YR6XOiv=YjvXlEbXS1/J0pvElRQ=YiUJSEvXO1qWxHUE0uxWOwQJSiYJSWAWSRAWlRAE0M6Wx10=OW/Xl=1JYsqJxuDESGxWYNmExN1WxsQJbJeJb=bWYJxWxF6=Y=m=lMqJ0WAEl=1EOuxJ0E1JxuqESRxJxjbEbwQW0pvJbMx=lu0WOJAJSs6Xls6JlueXSpYXSiYESsDESMxWYivEbR/=OMeEOMA=SsDElpbXtRDJlsP=Y=1W0ueEbJQXlWeJ0pbEbjm=Op1EY=bWS=1EbWQJSRqE0Mq=OjmJluxWls6EYJ6ESsqES=bWSR/J0NYXOM/EOHbEbGQJbpUWSGDEbsDJxR0Eb=vWxUb=tEUXOMQWxu0=bW6Wlu0EbJQJYEUJbHvXOM6WO5bEO1DEbpU=OFQE0imXti1JSHYWOMQWOJxWOJ6=Sw/WtuqXS=mXtNYWlM6JbF/ElMQWbRDJxp1EtRQ=YWAJx1AEOH1EbJxESW0EbGPWbGDXO1QJ0jUXO=vEYuDWS1PWb5YWSH1ExJ6WlJPWb=vWSimWljmExRDWbw6=OWeExuAXOM6XtWqW0EvWY=vJbNYWxEUXtMP=Sv1XS=1JbwA=b5UESpm=ljYWbWDWSMPJxG0WS51Jb10=bsAEb51WxWxW0NvWSUYESFxWOUYEOFQXSvUESwDEYMeJxEb=OFQXSpmJxHYXlNbJx1A=ORDXOUmWYue=tRP=bRqJbpUJbwDWxM/JxjUJSNb=bUmXOs/ExpUWOReElR0J0s/=lseXSM6=OR0ExueEb10JYR/WbR0WxuAEOpUE0pmEOJ0EtEUWbWe=YWQElu6Eb1PWYReWSRDWOEUXOHUJxivElWxWOUvJx=vExiYJY=bEYM/WOpvJ0MeXls6=tE1ESwQExW0JxMQWbJeWtWPESGDWtiYEbwqWSwqWSWeXO=mWxH1=bWPElEmWSuPXOM0EOWQWSFQJx1AXSJPWb5UEls6WxjvW0iYJSW0JYWe=luQJlJqJbG6WOUYJSGeWbvvWOFQWYEbXSpb=tE1W0ib=YNUWtW0WbE1=bvmWSW/WtWDJlWAWO51JSHmXO1xWxsqWbRQXOsqW0ib=OJq=OsqJSG0JYWAXOEbEbRxJ0iYEbGQXtuqW0W0XOFAJSw/=tJQ=SMQWOs6ExEm=OJeJxM/JSWAEOwqESRQ=bJ6WYuqJ0RDJbF0WbUv=bpmJxMxJSGxWOG/WSG/ESFDE0uAWOUvEbsxWb1AWSi1ESibEOw0JxsPJ0R/Wb10ExFxEtW0Wti1Ex=vXONY=YpbJbRe=SGQEOFx=tu/EbR6=OjY=bJPEtiU=OibExW0WOUUWxiv=SW/WOim=YW0JlR0EYu6JS1qWYseWOWxE0N1ExjmJbUYEbW0WSEYWtseJlib=SEvEYi1XSEvWx=vEbNbESibJxs6=bpmXtE1JSRQXlMeWbpUWOGDJYJQJYJeEbsAJlJQWSseJxJeWbjUEYJxW0s6WSW/WOvYEYR/=SFQJYRPWxFDXlJPWb16XSUU=OH1=bRPWtWe=bsAE0MqESsAEtiUXtu0=OvvW0NUWONmJSEmEbwxWxHbESWxJS5b=tW0WOwPWb1Q=bvbXSw/WYRPWb5UXO=vWSEv=OGQWxH1ExR6Ex=UWb51=SpvExW/W0ueExRQWOjm=SMPWbw0JbJPEYRqWbJ6XOpmEb10ESjmEb1AEtuDXSG0JxwQ=lM/ESuqEOJxJx1/=b1/XSMqWOW/JxWD=OJQWbs/WtuAEbFxXO=1JbwAWSvbJSiUWlR/W0RDWtsQ=SHUJYpU=lsAJSWqWbFqJbW6WxE1ESue=OjmE0=Y=OMDWxFxWOuPJxpYEO=b=lNbE0RPWxu6EOJPXOpYESF/EYM6JSReXtW0Xlsx=YuxE0RqE0u0EbJ/WO1PWxW6ExjbWx1PEtjvEOseJSHYXSjb=S51WOFq=bivJxpvXlpUWSMDWOWe=YRPExF0WSRAEOw/WO1eWSGeEbFeEtpYEYRqJSE1WYWA=tEmES51=lsAWbM/WbNbWOG/E0u6WbFq=O5YJYs6XSUbJSRPJSw0=bs/JxGD=Sw6Wb1DWbMDEljYJxGqXtM/WlEUWOW/EbEYJxE1=bMxJSUvXOuq=OweEtN1ExJ/EtJeWYMqJxJ6WxH1WbHbESFAWlj1WOHUWx1/EYseXtNbWlWqJSseWbW0=tW6=bpbE0pmJxF0JSuxEYiv=Ss0JSvvWxFAW0pYJS1x=S=b=SWPXSF/Wb1AEbsqWS1xExjmESUU=luAJxHbJYMeXOMqEYE1J0=1=bvvJli1XOWqXOivJlJxW0R/EtE1JSwQEluQJxuxExuAE0RD=tJ/JSwxJYRDJxvbWO5UWOUmWOueJ0R0=bUbESNbJS1QWlsqWbHvJbj1XOW0ES5YEOJ0Exim=YNvWb1/=tMQJSjYElJ/XtW0W0jmWS=vEbGeE0NYW0W6JbpvE0W/=bJDEtu6EOwx=bWxElMqWxFQ=OJqXt=mWl=1Exs/Elim=Y=bExMAExWe=l=U=OwPWOR0WYJDWtRxWSpbJSNm=SR/=tEv=SEvEO5YWx=bXlRD=SweEbuq=tMP=YpbESUbWY=YExG/=tiY=SJQ=buqJbFQWxJeJxseWxiUExW/WOsP=bWDWON1XSpmWb51WtiYJbEmJxWDEls6Ebp1Jb=bEx5UW0jYXOJeWOEvXl=b=SHvJx10WxuP=SGQWOv1WbWAWOWqWSJ0JxHU=YR/EtRq=YEU=SuqWSuxWSEvXlsQEbuQJxHbWxsxEOGQWbM0EOMPJSuAExR/EYWqE0MPESvUWxRxWOwAESibJljvESueXSEbEbvbEtEvExpUWxNvESF6WbuQWbRDJSH1EtEUESiUJbU1Jbw0WxJDEbpYESFDXSWAEOsxElJDExR0=lpbWbu/EbH1EYux=tu0W0MQ=bWqJxwDEbiUElWQJYMxWbw6ESvYWtMxWtJ6=S=bESWxESR6EYsQJxseW0WPW0Me=YjU=SMq=b5YXSFxE0jm=bweXSW0ESpY=bE1JbwQEtuA=O1AWljmEtMxEb10Jli1XOuPXSiUWSMQJx1qJxEmWOsDEOsDWOJAJbMxJlW6Wbu6=S5v=Sj1JxvvXOjUXlpYEtEYWOM6Jx1QESJ6JlNvEOWQE0jm=tuA=ONb=lNmWbiU=ljbXOsx=ONYW0MQJS1QEOEvWbWDEtimXSJPXOGDXOMPXOwe=lR0ElM0ESJAWSjvWSWeJxR6Xtp1WxvmXOG0JbMxEtpUJSMxWlRQWxMAXtEYWbjY=YJPEOHYE0R6EYEmESJAWSMQEYs6=libW0u0WxJPEtjmW0Re=SFqJYueJSFDXOUmExHUWOjm=OUmEOjU=Y=UWtW/ESwP=SWQEtMeWxMDJxF/WYJAW0WQEYs/WONv=OEmElivWSJxWtN1=bRDXSRxESjm=OiY=OJ6EtWQXSU1=Owe=Yp1XS1PW0W6WYs/Ex1xWxMAXSJAWluqJlsQEYE1Exjb=tseElu6XSEmWtJ0=lJDWOJ/JSWAW0ib=OpYWxuPWO1QJbFeJx1/=bivW0JP=YpbXl=v=bu6XlpvXSuDJbJQ=lJAJSGPJlimWbuDExwAJSWxEbweWO1qEtMA=SEbJ0sxXSu/WxsAEbGe=OHUJ0RQ=lEvEOFxXlu0WSwxEbp1=YMeWbWQEYjvJxF/Wx5YJlJ6XtEY=liY=OsDWYjUEOMDJbu0WxpYEOWDExwPXt=UWOvYXSR/=YpvWxw6WxMx=SWAE0jbESM/=bw0XlMeXSW0WSuqWOGxJlW/JluxXS5UESEvWxv1ExReWlsqWxjYWbM0Xlp1XlWqWxJQJYiYESibWtuAWSuA=lNYEbM0WbFAElWDEtRx=S1/JS1e=tuA=SFQWOEvJlRq=SHv=bsDJlMPJxNYExu/=ORe=O=UEbwAWYjvXSMeWbuxE0jYXtRQWOibXlWPESWAESu0XON1EbGPJSj1Jx=1=Sw0ESJDJYNmWONmWbMxEO5m=lsPEbJ6W0s6EYiUWtWPWY=vXSUvJlM0JY=mE0NbEx=b=OGxJ0EYElEvJlJAXSWQEbJ6=YJAEluxEx5vEbE1EtEbJbiYXlMPWY=UESsPWtNvJSv1EORxWxW0=SF6EtWQ=lWeJbGPW0jUEb1DXSWDWxvm=YJq=SNYJSF/WSWAXtJeWbGqE0J0JbF6JxJxWximEYNvEljUJlj1EtN1EOGD=lEmWxwqWY=YJ0MxJ0u/XtEbJYMe=bG/Wx1DESH1WOJPEYJDJSvmWSFPWY=mWlim=SR/XSJ0EO5YEYjYEORP=YM6WOsAWxMeWtNmW0RAWbwQ=Sp1JluAEOFQJ0=1ElJAJSsxXSGqJSHbJbMAEbuPXSwq=YuQ=bW6=Os6WOR0EOjmWbRQ=OH1WbGxW0JeWOJeWOGP=tWDWbjYWtNUESGxEbuxXljbJYpvJl=UJYW6WbpvWS=bJbvm=bNmXOG0E0ivESM/=YMQEtuPW0Em=bEYJx=YWSimJYEvWSwPEOpUWYu0XtMqEx5mJbw6EOEvWSiUW0WAEO1qWbG6EOHmWSW0=bFxWtsqJxuDEYWxXSWPJbs0Ex5v=S5YESR/=OpUExuDESW0EtuDJSG6JSpvWbW6JluAJlMeEtEYWbUUJbWx=tM/WOMe=OGD=b5bJlMxJ0NUWtW6JSNvXSwA=l=bWtNUWbW6EbNUWxibJxHvE0iUJSimWYjmE0s0Jx16WOGeEtEbWOvUEOJ/XOFeJliYJxWPWxEvXtEv=lNUJxNYEbJDExR0J0W0=ORAWYpvXSjv=lRAXSUvJSp1WYpUEluPEx1AJxJeEb1PE0sP=YRx=OWQWSGPXtEUEOuPEOiUExjvXSJPEOW/=tM0=tjmWxiUJ0j1=bH1EljUWbuAWbpbXOGeXtivEYNYWOuDWYsqEbM/JlWPEbjmExu6XSGDWxvYExFDXlW0W0WQExHmW0s6=SvbJxU1E0uQJxp1WSRAXlMqWtR0XtEvJYjYWtWD=timWxweXtiYW0EbWxUmEb5bXlEU=O5Y=ts6ESjbWOM/J0W/WO5bXtpmJxpUJ0R6EYNYJYi1JSNmEbWPXSEYJbwAESF6=Ou6W0NmWxvbJS1qE0sDWS5UJlMQESWqEljvW0E1EbvU=YuAJbGq=lW6EbR6W0J/WSUmEbF/=YsQJYW0J0EbEtW0Wxv1ESuD=SsPEYsqJ0p1XluAJYpUWbG6JlWPXOFDJYsQWOjm=SEvEb1qWYR/JYJDEx1P=bpvWlWAWb5v=SNvJlM0EbMqExwQEYE1Xtu6XOHvJYWAJbFqJb1AWSWx=SGqExWA=YEvWb5vEljUEOwDJx=bJxEbElWQESRPJlEYXOMq=SWqW0RqEYRx=buQWYM0JSGqEbvvEOE1EbW/E0=UW0NmWxUbExw/JxW/WxR0XSjUWYEYJxMAJbwQEORA=ON1ESReJYpUWOjvE0NYWOFe=SpYWYs0E0pYXtuxWtM6WSi1XtjvEx5YXtuDJbHYElMqE0NYElMQXOF6JSHYWtsx=bFqESueWYs0Ebjb=Y=vJlR/Xls/EtpUJlR0XOibJxMA=lMQWbwAXtW6XlMeEYpYExR6=O5UXtuDJls0WYs/XO5U=OpUEOJ/=SivXOsAE0pbES1qWOJ/ExFxXSGqWYiUWYWxJxpmWSueJSNmXSs/WOimEts/JxN1EYRxEb1x=S=vEOv1JSjb=tNUEbJDWxW/WYWDJlsAJxGAJSGqWSGDWbi1=YWeE0pUWYu6=OFPXSu6XSuPXlMPWYM/ExpYWtWeWYRQJbHmJSsAWxvUWOivEbw/=ts6JxjbJ0seWORDXOw6WYMAESwQE0ivES1qWYR/JYpvWb1P=SMQXOGDXS1AEOwxJli1XS1QXl=bJxjUEbJPE0MQEOuDWxEvXOwqXSjvEOwD=SH1=buD=tiYEOwAEx=1EOHU=lWAWtpvWSu6J0p1WluqJbF/WluqE0uAWximXSWDEO1PJYJxEtuqJbFeEOUmWYs6WxMxWOwq=OMeJSWPXtjYXtsxExjb=OFAWSFAEtEY=ls/=bGeES1x=luDJlibWxFAW0RxWlE1JSjbExR6=bM/Wb5YJb5bWxivJSFQWOR0JbFPJS1qW0i1JSiUWbuxJYuDJlWqExR6XOseJlReEtiv=bvbJYjvXtueEOMA=l=bWtpm=ljvXl=1J0jvWxFeWOsAWt=Y=OsAEbHbJlue=bNbJxj1=ts/WxJD=lM/WtsPXORDWtWDEtM6W0EUJbJxEbRDWOUvW0imW0pvESJ/XOWQJxsAESEb=tsQ=OWAWb=vJS5UExp1XOJeXlWPWYEmWYs0WxFAEO51WOwe=YM6Ex1PXlsqWSUbWts6Jxi1WOpbElR6=tuAWOR/J0JPEOM6WSJ6E0sQElMA=S1/JS1xElW/WxG/ESpUWtu6XOimJSFDWxMDW0uQWOMeXlW6XO=Y=OFDEl=vXOJ0JSR/=bM6J0se=SNvWOEbEOuDXOHY=SW/=bjUEbGqXSW6JYu6=SGQWbW/WbjU=S5m=lpmWluQE0s/W0MDJxWP=OM6WOp1WlR0EbiUJbivJxF6=bpYJSWDJlM/WlNbXOpbXlWeXSJ6=S1xEbsQXOE1ESsQWYjYWOE1EbuxW0W6JxHmWSNvJbMQWxF/XSWDWO=YXt=Y=SWPJbGAEbRQJ0JeESseXlMD=SsPXOw6WYRPJSW0WSRqWlNmWb5vXONmEON1EOGPEOjmJlM/XSNbW0u6=OW0XSEYE0sPExGPW0ueWOiY=lpbWxFeWYp1=Ypv=tW0JbJQ=S10JY=YE0Em=SwqWxF6=Ou0XOEUExRDWOsqEO1/WSsAExNbEOM/WOHmWOF6ElEUESHmEYMPWx1eJlMDEY=v=bpbWOW/WOWA=Ou0=SJDJSjmWb=mW0M6JxseJxsDEYiUW0sPWlRxWtJ6JlNm=OWqExRe=tj1Xl=bWYuAEbF6=Ss/WxGQWO5mESjU=SMQXSsPJxw0XOw/Ex=bEOJD=b1AExUYJbF/ESGPJSsQWYWAXOWxEYimXtpv=YMPJS=YJlWD=tMxWSimExW0WtjvJ0uAXtEvEYRPW0jm=bsAEONUWbNUW0NYWx1Q=SRDES10Jlim=lRP=OuA=tN1EbEmJ0pUEYJPXSw0JSjvE0JAESNmJxNYJbUYWlRQXlsqEtu/JbWDES5YJlE1XlMeWxGDJ0R/WlMQExsQJxuPJYpUXlEUXtWQE0u6=SvUWlMQ=OHmWb1qWts0WtWQE0p1=bsxWYWQWbMAWSuQJb=1XSRDJbMqWlu0Jx5mExGA=tRxESNv=O5YJbGQWbRq=luQJb1A=OpYXlJPEbseXlMqExjvEYEbWS=1WtWA=Y=vJSUUJlpvWYs/ESJ0XlN1=O=bEYMQWxw/ESpb=YEbEb1/=OHYEONv=SjUE0seWSiU=ls0JxWQJxpvJbu/=tsQWxW0J0N1ExsqJSuDJSWQEYMeWYJQJSFQWxW6ElimJSUYXOj1=YMq=bR0ESW6WO=bWOj1Ets0=OJDEOMeEtW0EtRQExjv=OWDWlj1JxW/JSvmXtW/EOvbEYsAXOsDEtpYE0WPJxGP=lWAXtMAWbH1=SwQESM0ESGPXOGA=O=YWbjm=SWQWtJeExEYWOMPWxM6EYibEbuPXS10Eb1AESGPJxH1J0RxJSJPWSGD=OwxEOUYWbpm=OWD=lW6=tuPJlRx=buAW0J6JSGPWSuQWxJeJSivWOFe=S10W0sxWxw0W0RxEtpYWSW/XtRA=OGAJbW0Eluq=bu/WYi1JxsPWSMeXts/EO51ESE1XSJP=t=1XSweJSi1JxJD=SUbXlNbJ0uqEYs6EOvbEljUJxiYWxW0=SGAJxWe=lMAWSu0WlJ6JxjvXSs/XOMxEYJDEx=YWS=U=OWPJxwA=tW6XOpUJbGPJbuQW0=UXSibE0RPElJQWxJqW0imWOiYJ0RqES5Y=tWqWbReJlpU=SwP=OE1Wtiv=lNYJbJPE0WQWxF/XSwPW0EU=ts0=O5bWxFqWOu/EOpUJlNbWONUJxWe=Ypm=YReJbE1ExvYExjYJS5UESseEbsDEOseJbJAWlWe=tJAXOvvJS=b=tEbJYJP=YMAJYJDJxNmEO1A=OvbWxHU=YMD=bW0Wl=UWtR/Eb=UXO51JxueEb16Ex5bWtNvExwDXlWAJlNvEO10ES1/XlNmXtWDJYMxWSEb=lpbWOJ6WSw0=b=UJx1xEORAJxi1=lpUEYuQWOGxJYW0WtpYEtRQEO51JxuQ=tsqXOjvEbuAXtsA=SEUElWPWtNvWxMDJ0sA=OweESMPJSG/ExG6JSU1JbFAJSJ/=O=1WOwQEbMx=Ow/Wxs6Wl=vXO=U=luDXOwxWbsDEYj1XtR/WOw6JbMqXSNmEOpmExJPJl=bWxiU=tMPExMxJxRAWxUmWONYEtiv=OuQ=buQEbEU=OHUWOjbXOHvJSj1=b1/WlibWOG0XSGDJYjYEtEYJYWqXlJPJbJ/XOw0=bjYJbNYExJQWYj1WSu0W0MQJluDElivEYE1JSue=YiYJlRD=OGQExG/=lW0Jbs0=bEU=bwxWxGQWYs6EO10=YMAJl=vJbUbJxR0ExUmXOM/JbjvJbUmE0JqWlsQWSw0=ts0=b1xJx16=tMeWSUm=SvbW0R6EO1QWl=1ESGeJxw/XS=bWS=1WbMqWbWDJb1DExGDWtRAEbpUWtueXOs6=YjmWxsqEx1DExF0WbWeWY=1XtEYXlW0WtjvEb5YEYuAEbjmXlsQ=tpUJbFqWSsP=tj1JbNmEO=Y=l=vWbRDEOR6WxRxWxHmEOWxJxuPEbvm=SwPXOJPEOFA=lJ/XSEU=SsQWlEUESJAESw/WbG0E0RAE0sP=OiUXlEmWOHUWlsPXl=YWluPEt=1XlJqExuAJxwP=Yue=YR0=b5vWSjYJxGQW0EUXt=mJbWQ=bHvEYRPXtpmWbw6EYWD=tJ6EOJA=tivJ0WqJlu/JbNmWtJQ=SMD=OwDWlR6EYuQJxu6WS=YJlu6XOWQWlRPXOFxJxUmJ0NYXSWPJSueEx=mExG6E0JDJxG0XtpbJSuxXSjbWtpmWxH1WSR0=Sp1EluAExwqJxHbEbjbWxsqW0uxWliYJYJQXtjYXOFxWbux=SwxJYs6XSG0XSR/ElRqESWqE0MxExvUEORxEbJ/EYjUJ0uQEtM/JbjmWYNYJx1DJYRqJbUmExs0JbivWSu0WxWDW0NmJYNYXOuDWYEm=SNv=bHbWSR0=lueEYMqElM0E0pm=tMA=bFPJx1AEbMxJxMQ=tpvW0uDXSJxXOW0Wx=1WS1AJYJqWORq=YuQXlJqEtu0XtWeESimJlEbElsAJx1eESuQ=OvvWtJQWlJqXSvYEORDWbRxEbEbWxp1Ebw6=bWQ=Swx=lMQJx5UXSWQEbHbWOweEtuDWbwAJbvbJYNYEtMe=SivXOvvJxHvEOWQWSJ6EtsPJx16WO51WY=YJYJ0WbsDEbNv=b10EbF6JxJPWOvYWxu6XSj1XtNUJxWPWxM0WxG6EOiUEt=mEb51=YW0EYj1JYuPJbseXSEvESpvWSEvElJq=OUYEOWAESseXOEYJbHmWO1DEbs/E0pUExw/EOJxXOpvW0EbWYNYXOGQEbimElJ6E0pbWt=UJxJP=YJeWx1QWxF0=b=UWtW/=SFPWYJxJ0uPW0EmJSwDXlNYJYJeWOFxJbweXOpYE0N1JYJP=YW0WtWxWxJe=YJqExv1=ONmXSu0WtWQJbuAWYE1W0uPJb1D=OUmXtsP=OH1WlJeEYE1XSUvWtEYWtpbWSF/XOvvWtJDJlsPXSGD=Oj1EOG6XlNUWS1QEONbExFe=bEUXtibWbEUEOsPWlNbJYsq=tR0WOiUWxwQ=bRPXSJ/EYuDWSWqWYs0E0uDWxRQWOu6JxMDWbNbEbJAJbv1EYReElRxWOFQE0EUEO16=b5b=OJq=lRQ=O16Wbs0Jbim=SReEY=vWON1ExWQESw/WS=v=OMA=OEmXlue=Yu0WSimXSG/ESuAXtiYXtuAEONY=OFPWtu0WOseWOW/=ls/EbNYES=YXSu0ElRPWSUUEYWqWSEYExWQWYRqElMQEbGQESM0=O1e=OiYJ0JDXtjbE0sAJb=vWlpbWOUmEOE1JSs0JSjUWximESNbXSH1ESWxESJQJ0uAJYWQXSweEOueJSvmJSGxESvbXSRQJbEUESjYW0R6WSuAWSRD=lRqWSu6=SvbW0MQWtiYW0J0WYs0XlR6XlpYE0JAEbJDXlJxWbwDJliYXlM/WOwxWxMx=SWqJ0ibJSu6XOUYES1PEO16Ex=YWlWqXOpbJxp1WtjbJbJeEOFPJxFDXOi1EtEmWOUUWtNUEbEbXlNYEOwxJSsAEO=UWlJPEb5YWbsxJlM/EOUYESwPWYpYE0JxWtJAEbWqEl=bWtJQWYJ/JxW/WSH1Xts/JlNmEYMQES16E0iv=bu6=OEmWb1qWbHmEbNbJSjmW0jbWtJ6=lsxXSGqWbJe=luxExweWbj1=Ou/=bMDWOu6ESvvWbwP=bRPWbpvWYJqXlue=Su0EYJqElM0=tEvEbiUEbw0JlJ0JSF/WSjUJSHbWOJ6Jb1DES1qXSRqWSG/JlRPEOMqWOGAESGeESvY=buD=t=bXSiU=S51EtNvJSivXtjvWOG0Eb=1=l=1WxWqEYEbElR6ESsQJxpU=OpU=S1/EtNYWSNmWbWDWOF/WSWxJb1QExjm=bibWlWxESWqJbiYXSEvESi1XtJeJbJ/WlpbXOpU=ljUWxGeWYuAJlR/ESFDXOw/ElM6XlsD=bW6WSG0E0uPJbMDWbseXSMD=lsD=lEv=YRQJSM6WbwQWxU1WYjUWYW6JS=mExWDWxiYXOweWbG6J0MD=YJ/Wxs/EbsxWOEYJS=UEO5bWxFAExHvWO1DXSjmW0pmWliv=YuAEtR0=bNmXSs/JlR0EbMqExuQ=l=v=YJ0EOWDEtJqElE1WlNbJxWeEOEmWb5vEYs/XluDJxMD=SJ0JY=Y=YE1WbjUEbjvW0WQEOHYJSwQEtR6E0sPJbvUEYEUWtsxXSs0=lRQ=lRx=O1qWOuxXSw6WO1xWlR/=bNvWlsqJ0J6E0jU=YRxWlR6WSF/E0NbJluPWtuPXSwQWO51W0p1=b16=YMeJxUvWbsA=OW/=tJPElpvXOvm=bJeEOs6XSHYXlW6JYNY=lJ0W0sQ=bwqEbuqES=U=Swq=lWPJlEYJbFQXlueEbG0=Os/EOWDElpvExuDWxW0EbRxWlp1ESNYExvbWxMAXlWqEbJPWS1QWluq=OEbEYW6E0J/JxwQEtiYElRxJxJAWSEU=tEv=YJA=YiUJSMP=Sv1JSU1JYWqWbjbXOuDEx=vWtpvXO=U=limEbJqJxFPWSM0Etj1W0MeWSM/JbG/Jx16WSFx=lseEOGPEb51ElsAElsDWxMq=lJ/ExUmJSjm=YW0=lu/EtNUW0uxJ0pUEts/JluxJ0WPEYs0Jx5m=tNmWYibES5mXSM/=ONYJSuq=OwQElWDJSRqJYJ0W0ReJbpbEb5bJ0MQEYW0WY=YEbs/Eb51=bJAWxRAXSsqXORqElsxExEvWOueW0EvJxJ/JSFeW0JeEbNbW0WqEYuxW0sQJxwAXOj1EbsPJS=1=bJ/JlseEbMeEORAJbRQWx51=bMAWtsQEtiYWlWQW0=UXSG/XOJPJxpY=S=mJx=v=ORx=OFqXlE1JYsQWOsPJSsqJSNvXlW6ExjmJxUmElimExp1=bFAE0WqWlJ/XSRAJ0uqJSuxWtsQEOJx=tJAWYpbXOw6EOw6WYuA=Ow6ExNvW0WPEOWDJxibJxiUWbFQWbMDJYN1WxJD=OEvElseEbG/XOR6JSweWY=1EYu0ESNvEbu0=bG0=SueWbu/=S1D=tEbElJxElMqEb5bWOivE0=UXOs6=l=vEO5vJlE1JxJqWS1DWxj1EY=1Jx51EOWPJYJe=b=mExUm=YWAWbNmWxM0Wtu0XOEY=bseWljmWx5bJ0J0ESR0EOjmEx1qEluxEb1xWOwxEbH1XOweJYsDJlW6E0p1XOueJbw/WS=bJxuqExRQJbHYWtuQEOM6=bJPJ0sqXts/JbUmExuDJxJQES=vJ0jbXOGx=OWqEbjYWOM0JYW0JYu/JxGxJ0uqXliYJxUv=Svm=OWeJYse=YJ0EtRqWSwPJb=YJxjb=OjvExWQXtjvWliUEtJAEOiYWO51XSFQ=OEvJ0Rx=b1/ESG/=S1QXSF/WOibWxE1WbjY=bwP=S=1XS16Exw6XSwQEOs0=YibEbGeXOivJbJQJlJxW0=mJxjUElEvExi1EbNmJl=YEOv1JSsxEYEYJ0=bE0R6XOvbEtEYJxF/=SFAEYR/Jbv1XSvY=SR/XOWA=Ov1=SuQEYM0JxWPExG0JlWqE0sQJxJeJlu0JYW6=Su/=SvbWxMeW0WxEbJ/JbMDJxG6E0ReXOu0Wb1DWb5mWtiU=OwQW0MeElRP=OGeXSH1E0E1JxsAWO=mJxJeEtpUJx5bJbp1=SJ0Wx=bWbM6=YReXS5bEljYXSJ0JbuQEO5v=YEm=bi1XtJ/JYuQJxF6WxpYJxNYJSG6ESF0EOUUWls/=bUUXSW/JxH1XS1xWtRe=bFPXtMxWOUYXS=1ExJeWSsDWO1QXtEbXO1DWlEUEYMq=SNmJbG0=Oi1Ebi1WxReWSuA=bEmWxjb=bGxJSsQWbseEOG6XOsQJxMPJSFAESMAWSFDJljbWYRDE0jbElN1=ljbJSFDXlsDW0MeJSEUJSMPXO=bXSWPWOM0JbNYWb5bElpvWtW0WliYWSi1=OjbWO1x=YReWOwe=OiUXlRAExGAEYMe=OWQEtM/XORqEOJAJbWQESWqEOjbJlimEbJD=SiYJb1eW0M0=SJ6=SUY=tE1WONmWtjmEtiYXONvJSMxXl=UJbvUXtEbES=mXO=mEbsxXO5UEY=UExs6JlR/E0M6EORxE0jUWxGDWtMqJlpb=t=mES1P=YsQ=bG6XSHbEOWqXSpbJSGPJxEYWYRe=bueXOWx=bJ/XOjvWOGqExsQJxJAEb=v=S1eXtjv=S1eWO1QJxuxEOWxElRqWxuDJSJx=biY=SMDEbF0WxFAWO1eE0WAEx1DWOvvE0J6EbFAJYseExMQJSHYJxiU=OWeWOw/EbHvWtpmXOM/=O10=tu/WOpY=SR6EbMeXlu/Eb=U=tEYW0R6Jbiv=YWAJbi1EOMeXOu/=tWq=OiUEbHm=liYJlpvES1AWSN1=OMQJlWqXtsDXSpmEtpvXOMD=tWqJbseXlRqWtsQ=tM6J0E1ESJxWbwQEYEbEbpU=bu/EOJ/W0uQ=lRD=bw6JYNbJxM/=SW/WSseE0jb=Ss6WSw6JxJAJxM/JxF6EOu0=bMDJb=b=SGx=YuAEOimEOibEtJ0EbMPW0MAXt=m=SF/JlsDEtJQWxMqJSu0ES=1=bJ/=O=Y=bEUEOG/=O=1=bRxWxFeE0MxWxJPJlRAWxM6WbpbEOM0EYRPXSpmXOMQJlJxEOE1XO16XOjYEbM0WbE1E0sP=SjbWS=UExUYElpvWOGqEbJxJluP=ts/JbUmEtuq=O1x=tuxES5Y=lu6WOFeESEUJbjmExHYJxUb=bsQXSw6WONYW0u/JSEm=bWQWxivXOib=tW6XS=UJxWqEOWxW0R/Jb1eEtpUWSsAWlpvWx10=OuD=Y=bWbwAESs/WOE1JbpvJbR0=YpbXOj1XtW/WtsxJxsPXOWAEtRDElEvWY=vJb1DWbJAXlJAJSsxXtRDExR0EO1/ExNYWbM6WS51JxW/=bjYWOJeWbHY=tj1ElE1E0J6J0sxXOjvXOJAWO5mXtp1=bsxE0uAJbGPW0JAWbjvXSvmWORP=Yjm=lRQWYs0WbwA=tu0ESiYWSuAWORDExib=SRDJxpUJlp1Ex=Y=YMP=OUbWtsD=OJ0WxjU=OGeJx=UEbUYJb1eEO=YWbvbWxWQWOjY=Ow0WSuxXS5mEOEvEtReEl=vJl=YJSF0EY=UJYsqJYEUWlEvW0NbWlWqJbWAXOHYJ0jbXONb=YpvJb1PJ0=YJlN1=Yu6WxjvJ0MA=SJ6WOGDEtWPWYEbWYJD=luAJSGQESpbXtWQ=SsAJxwDElpvEYs0=lpbWOMe=YsQWSFAWbFeWb1eEO5YEbFPXSUYJxuqElEvXlpmEljYEYueXlj1=bRA=bw/ESR6EYueWbW6=bjmWOE1Jx=YEbGDJSvUJ0sq=O=vEtNbE0=mEtJxEtWQEtR/WbG6JS1eWSvbJxj1WO=1WSHbJ0i1=bsDEO5Y=lRPW0ibXS5vEtNbExsx=Yu0JbGqJbF6=lJPEYNvWb5YJbUb=SNbW0R/EbNmJbN1ElWD=buPW0ibJ0Wx=SRqXOueJbu6=YWPExEmJ0iv=SWe=SUbJYNm=bRDWxwAXtNv=YpmESEv=lNUWlEYElsQXSueJ0jUJSGe=tRqJYR0EYEUJlRx=lMxExweWx16JSM6WS5mWYJeWxvvXluq=tRe=OWx=OuxXluP=bHvWbv1ExG0WbJ/=SwQ=OJPEOGeWt=YJSHUWbUUJYMPExH1WtNvWYR0EOJPESibExFAESMQ=O=Y=bFqWSFAE0JPExpbJx1PW0R0JYRQ=tibJYuqWlNvElsqJSwDXSRAWOHYExFPW0sQESGQXSEYE0=mWtueXSuQEl=1EtRPW0WP=bFA=limWSWDEtEY=lJDJxp1=bNvWl=m=Y=bWYW6JYsQ=bMDEOFQWxEm=Os0WlsxJYJ0=YsxJxMPJxWxJx10XS5YJxRxEx=vJ0JA=bEUXtJPEYJQJSW6W0uQJSE1=SFAXO1eExUvEOW6=lNYExEbWtJPWbGq=SsxWx1/XSEvEbM/ElMPExsP=Ou0EOGDWtM/=bGDWOsPEljmJxFA=lu6WbW/WSW0JxNUXlM/WxGeJxwPExNUXluxWt=b=YEUWOsxWSU1=tE1=tpYWSH1EOsQE0ue=bN1=lu6ESWeJ0s0E0RPXOMAXSW/E0seXSJ6JxG6JbHmWbUmJ0W0JSMqJSiUXOvYEtjvWOHvWONUJbWxE0=U=tJ0XtMeWYRA=YNm=YuxXSRxElMPXSMQXtivWOWeWSuqEtpbEYJPXSJPXtRPWxH1ExMQEO1/JSMxE0pUWYseWSR0JbFPWOJ6Et=m=bNbJYRPESwDESGq=b=Y=S1/JxibJxseJlMqXtEUJliUXOWxWbEmEYp1JS5mWb5mEYN1WSMAEbs6WtJeEtR/EOseJlseExJPJYM6WOJ/WONmWSR6WlseWOwAEOJAXlEmWxpUJYWxESpm=bR6=OEYWYsAES16ElNvWSw0JbRPEt=b=Y=1ExRxJxwqJ0Eb=SRAJbsxJljUJSJxJ0Rq=SUm=bNUWxG0WYsq=OpvEYp1XSJAJxM6JYivJlNbESW0W0M0XlWDEl=b=bsxEOW6EbRqJb1eWbRQ=lRqXluDJYW6=tEbE0uAExUvEOw6ExUYEbJxExMAXt=UJbi1JSuAWxsqW0uq=lR6JSp1ESjmWbReWOFxJbG6=Swe=O1qJS5YXOFDXOvYWOE1Els6XSiYElMQESvbExEmESuQJb=mXSGQW0E1E0Nv=OiYE0WPJYsA=bUYEbJPE0pvEOGDXORDJSRDXOpmExFAJlJAWtN1EOJQJ0sPJS10ESjYJlMqXlR6Xtu/WSpbJluQJSsxEbj1=tuAEOEU=ONmJSWQXSwAWSueJYjY=bG0JYjmJS5bJS16=li1Eb=bJbF/EbueJ0WA=SuqJxvUWxMPES1AJbMxJYN1WbEUWx5mW0EmJS1qWS1xWlEb=S=bWxG6JxNYJlWQEtM/ExMAWYWxJYWP=bR0JSFeJS5Y=bGDWxsq=b5m=SueE0NmJ0JxXtW/EOp1W0=mXSGqWbNYJlEmXSwQWlsPJYWP=OW6=tiUXl=bJS1xElNbEbUUEOM/Els6JYs6WSpmEYpUWlN1WSRAWtjUEO10WlsQEbwqWxEvXS51ExG0WbGeEORQEYWQXluPESF0Wxuq=tRAExvUEOUU=SuDJx5UWtsAWlu0Eb=v=tRxWbw6EOj1WYW/E0MAEts0Wb=vWSiYWtM/JSjbEb=YWSFAJYJe=SwPJ0jvJSseJYWPWOW0WlJxWOvm=b51WOw6WxEUXORx=YjY=SpUJb=1XlRQJbFPEliYJSR0XlWxWOvUXO=1WYEvJSwPWx=vWxUUXlsxJ0M/Jb=YXliYExivJ0R6EYR/=tpv=bueWSGD=YsAWlWQ=SW0=bG0=OJ6WSNvWxjm=OMqJx=1ESEUJxNvW0NvEb5UWxMDXSHU=SJe=OvUWb=YXlpb=Yj1XSs6WSU1ESvbWtu0ElR0Ex=Y=YjvEYMA=tJPJYMDXSsPEtp1XOG6WSw0JxvbE0JqXtJ0Wb1xWximExwDXSFPEx=bJbRqWlsA=bW6=OM/EOWqESWQEbFeW0W6JxN1JxFQWYJeJSwe=lNYJSR/WORDJbs/ESH1WOHbWxRDEbUUEO1QExJ0JxGAEOEUE0ivE0s/=YiUESGDJxN1=YM6Wx5bWO=mWSMqWtW/JYM0EbUbWxpYWOseWxsQ=bMeXOReW0J0ElWeEO5mEtWe=ljUJbuQESpbWYs0ESMeWSvmXSRAES1xW0E1WbuQ=bR0ElW/XtM/WtRqJSJ0WtJ0WSRe=SGx=SsDExFA=Os6Else=lpUXSweJxwx=OiUElsAWSpvESwPEOp1=YM/=OMPWOWxEYsQ=bR0JbiY=OWxJSJ6J0EYWtu6=b10XluD=bWQJbNmESHUEtWxEtR0EYuDWSueJSMeXOMQJxueJxsqW0pYJYW6ESJPWl=Y=OwAEO1xJSEvWxJ6ESvYWtWqWxJeEbJxJxW0Jl=vWtEUWSHb=ONbWxUvWx5bEbWDW0J/=YpYEYsAXOsA=O1eEYsqExvUWSMPW0=m=SW/=tu0W0sqEtNbEOwqXOMq=bweWlpm=bpvWbu0XlW6WSN1WOWQ=bpUWS16J0M/EOHvXtMxExvUJbw0=Ou0WtWeEOF6=tRQWxG/WbHbWluPXORAExF/WSwqWSNbXlJ/=Sw/JSFxEtuDWYj1JbimESGPWxvmXlu0ExJQWOGQWOE1XSuAEOuQJYjvWOM0WYuDWS1q=SN1JxGqEON1JSivEYsqEtWxExW6XOuQEYsA=SF0J0EvE0W6=SJAXSwDXlib=bsPJbpU=bM6JlsPEOp1XOWxXSuPXSWqJb1xElM/EYuxJYR/Jxwq=YWqJluqWbsAXtR/EbRDJ0MqWYEYWbFQ=tNmEbGAEbv1XtMPJbEbXSWQEtpbWO1x=tJ/=SW6Xlu6=S=UWSMxJ0RxE0u6XlNmWb5bWYsD=bGqJxj1JYEYWbw/Jl=mJb1DEbWQElJ0ESW/ExWqXOJ0XtW0=lMPWS1xXOpvWSpvWxsDExRqWtNv=YWx=Ojb=OMQWYWDJlM6WSG0JxGxXOGxWYu/El=UESFx=OvUJYJ6E0NYJbGxJb10XO5UXlu/=Yu0=OUYElM0EO=1W0NvEOU1EOwqEYjvJxE1JbF6ESHmWbHmJlNm=OE1W0Nm=bu0=YNvJYWQWO5bElJxWlM6=Ou/XO5v=OEmEbGPWYRP=lJDJSR6WS5UJ0uxEOUvEbM6=OJqExEYWxH1XO16WOp1JSMqE0=1WbWQ=O=YEb=bWOEYWb51XOJ/=S1QXOs/Wl=bEOG0EtRqJSUY=lEvExGQJlpbJxWP=SN1JlM/JSu0WxwQExNmXSG6ESJqW0=1J0jY=luA=bF/EbEYE0Wx=SEvJl=Y=bRDWOivWtpbESWeXluxESu6WS10=OiYJSM6JxNvW0EbJ0u6XlibWOUvESsxW0seEYMDEbMDWx5UWtWA=Oi1E0uD=YMeWOwQESHmXORxJls/WtWeW0MDJxU1EYNmESM6WSW0Jx=UJbMPXSRxJxs0EYNmXlEvWOW/ExNb=luDElJAJYN1=lpm=OvUElpmWYseWSjbEOUUEbsxXOH1JYWeEOM0WOw0EtuPWtNmExjYWSiUWSuPW0EmE0E1=lWqExGxEb1PE0sDXOFeXOUvEYivJSMxJSM6ESG/=OG/=SWQJ0RAEOu/Etu6JSpb=YWP=tJQEO5bXtEbWSvUWSM6EYJAExHY=tuAWlsPESWqXliYEbJe=buAJxJPEYib=OUUJYsxWOuPJSG/EOGQJYMD=O1x=YibExGP=SpY=lJxXtiU=bJQESHYXOuxXSEbWYW/JYM6Wb=bEYWxXtiY=lWDJSweJbJAXOj1WSsQXOFQWbHUWOwPEtWQXtM6XOR0WxR/Ex=vWxFe=lpbW0imExGq=bWPESvUXS1DWlR6XtM/JxuPWxGQEtN1W0jUXSuD=OR6=S51WOJDJxWQESJqEbv1WSHbWSWDWlMxWYNU=O=mE0MqEbMxEYuAEOF/XlWxWbGxJlMQWSF0Eb=mJbpbEbMPExUmEY=bEYJ0=OuPXl=UEYuq=OJPJlJQES1qXSu/XS16EtsqEYJPEtEvJbNm=SjvXtjbJSWAJbG6WSW/XSMPElWx=b1QXli1Jx1QXSU1EYsAJSRDEOjvEYpYEtR/JbWAEbuqJSsPJljY=tWxXSFeWl=Y=tJQWO5U=YpmESJqJxwx=YEm=O1xXlW0WlsxJxuAEbw0XSwxElR/=tW/JYu0WbwDJxF0WOsPWYM6XSu0W0M6EbWqExGP=tMxJYjmEOJAJSpYWtjU=bNmES=UXOGQ=YJ0EOMDWOuD=OM0=S1PEbG0=lMeWx1DEOs0E0J/JxwQESU1JYsqXSpvJxpmWSMDJlMeExJAJxF6W0JxEYsAJxUbXtj1=lue=tJAEtWDWS=bXOsAESwPJSs/ElJeJbR6EbEm=tsxXSF0EYRPExuAWYNvXtibJbwxWS=UJb1Q=SvvExM6Wxi1WxiUXOFPJxvUXSwPXOuAJlJQWOEYEOE1WbGxXOux=SMx=bs0WSjU=OGxWtR/ElWAESw0JbWD=SsDJ0NvWxvYWtseXOEvWOJxESu0JbRPE0Me=YsQ=tpvXSwDJ0WqESR0WtReEYiUWSWeJ0iUJxUYWSUYJxp1WOj1WS16=bWq=tueXtpm=bWDJbw/XlibWYWDJbR0WYsQXSsPExu6EbwAEbNUXSHUExMx=bu0JbFA=lEY=tuPEOFD=SGDExJ0=tNvJYW0Et=1WSjUJSNbXSiYEOWqXSwqWSGAWxNm=bRPWS1AEOMx=YsDWYWAWSJqWOEvE0MxXOUvXOseXSM/JluqWlW0ESEbJbG/Xl=YXORPWljv=SFeWY=v=tNbWSHm=SimJSJxWlNmJxJq=bjUWxReXSNUESGAE0MPEljbESG6EtsDEx5vW0Nb=tWDJxwxXlpvJ0u6WYuQWO1qWOvmExMxXS1/=Yj1WxJQWlRAWOFq=li1=OEmWSjYEbwxJxWeEOFAJYMeWS16XtsA=OwQWtR/XtjU=OF6Jxv1ExHYEx5YXO1xEYMQ=lRqWSR6JxMQJSu6Jx5vJ0=UEOHmJljmXONbE0pY=YW6WtRPXSuqEOMqESG6JSw0ExpYEtEv=OUYWbjb=lu/EbUm=Y=1J0jYEb5bJxH1WSpvWbNUJxWeE0=vWxwqExivEb16EbWQ=OHmXOw6WSEvJbNUESJe=S1/=OU1=tM0=SMDJb5YESEYJYseJliUEbMD=OwqJbs/J0MxXlsqEY=1EbR0=YpbJYiYWSReEbR6W0p1WSweW0=b=bseExNvJx=UJbpv=lpUEbNbWl=mWSjmW0EbEYRDExu/EtNU=bRA=bNYXSJ6XOJAXSs/ExFxE0W0WOsPXORDXOueWSseXtjb=SNb=tM0=tWPWb5U=SpbXSM6E0sxJxMxJ0=vJxNmXSRqWYsxWlRqWtsqWt=U=OEY=SRDJxGeWbMPJxjYWYs6=tRQWxpbESEYXtWDEbW6=OMq=Ovm=YsAWbJ/=SFQJb1PW0ibES1DJlM6Wlu0JSseJbsqWSue=tJ/=SE1WYseJxM0ESFD=OjmJbW/WbpUEbHYXO1xXS1xEYWDWbMAElMqXSGAWYs6EO1q=tJQXSjm=bwqEYu0JSseJbGPESvm=livWOEv=OMxXOsP=bs6ESMD=bGD=YWPEOU1XSFAJbvUEbpm=YWqXtEbEbN1=SM6ESGQESvvEbvYJxv1EO5UXO=UJxRAJx=v=Yu0=SHvW0JAXSGD=bu/EYivEOEvE0s6XlivEbuDXtuqEts6Eb=YXlEbEYjvEYuq=OGQXljYWOGDJxw6WOJ6E0WxEtWxWbuxWON1J0seXSHU=tJ0Wb16XOsqESNYJxHUEbGQ=tJAEx1e=bwxJxHmWOs0=SEvWxjYJxMQESEbEbsQJSWP=Sw6EljYWYRDESHvWxUb=tMqEbu0ES=mEls6Wt=bWbGDXlWeEtNbXSjYExWDWljYXls6WlEUWxjb=SJqWYJ0Wl=YWxMPXtsQWbj1ExWDWOsxWlMDWxGeWbRe=Ow/WYRQJbWxEOpmXOWQJbJ/WSM6EOJxW0pvXSu/ES5vEbMDExRDJxMqJS=vWOJeJlMPWxHU=SMqJSRQEOGPEOimWSUbWSGAJ0M6EOMPJ0EUXlNvJxGeE0WAJxvbJxMPJxHY=bHYWbivExMAESJAWlMeJxMeJ0WeE0u6ESwAJY=1E0NvElueJlM0XOs0EOGQExR6JSweWS5UEb16Jx=UWbivJYsxWSRPEYuQXSivEbpm=SUmJ0R0=SvYW0WDXljUJbEUWSwAWbuqES5mWYEU=lueWO5YWYEvJ0EY=bUbXO=UWbW6ESGeJxGxEOJ0EbW0JlseESuPJxWAJYuA=lJ0ExJ0ESNUExGPElR0WSu0WSR0=tsxXlR/JbGD=OM6WbiYESvYEYjv=YReJbuxJbF6J0ivJlEYExuQEYNvEbGQJljv=SReESjY=b=YESUUExvv=bimWSJQJbJA=YJeEbi1ExuPEOGQEbpv=Yu0Wt=UXtJAWOw0WYJxEYJ/WOUbJb=YJY=bWSuDEYNbJlW0=lRPWS1eEOw/WO5YJ0M6E0WxXtuDXOpb=b=bJx1xEYNmJ0MeE0NbESReXlR/=tR6WxFDXOivEbEb=luxJbs0XlEYWlu/JxM/ExiUJ0W0WOM/XSE1XOHYXSFPJ0pYXSWxWSJ/=OG6WxEv=OJ0EYJqESFPJlpb=YJ0XtW6Xlim=Ojb=OwDWOWA=ORDXlW/XtNb=OjmWONv=O10=YRAXO5UJxpbJYMDJbRQJSvUElNUXlR0WbR0E0p1Wb=1WtuqElNYEluPEbR/WOWQW0RPJSUbExUvEluD=OvbXSJ6J0=1JbUU=tW/JSiUEOvvEO10WxMeWOuq=OHYXSMQXlu6JxJAWSMe=lWAWS=1JxFDEbpUXOvUJYpYWS=YW0seWOsxJYWDElRAWSW6XOFxWb=bXS1/ESRAJb5Y=bHYJSG6ESjYJYRQ=b1xE0JxWxRDWSMDExRA=bjUEYWxWluQWbRAWbsDE0EbXtuDWSWqJSpvJxWDW0MDESW6JYpmWx1/EbGe=tR/JxNvWxp1EYWeJxi1JYJDEOJ0WSR/ElReExNmJbpmExUYWx1AXlibESM0WxEvJYMPEb=m=Yi1E0NYE0W6JxJDXljb=ts0E0seJYWeXSuQJxseJx5bJbM/WxMeXtJPEYEU=Ssx=YjYEbGeWxibWYWAWxWPEYsqJxib=YM6EYWA=ts6JbG/JSjYWSU1ESGPJSwq=SHmWSM0Wx=bExM6ESi1=bM0=OuxW0pmEOiYWO1qExsA=b=YWbvbJxGe=OUbWbFxWSNvEbwQXS5YXSF/Wtj1Wx5vWbJDWxReXS1/=Ow0J0MQ=tJDJSpY=bNUXtWPJSM6XtRq=buAExRe=Sw6XOG6JSp1JbuPJ0ReES1AEOivE0RAElWDWlR0WluqWxwAWOJAXtuQEbFDXSGq=ls/EbMq=OUmEbEUJxwPWbs6=SNv=OJxWS=bXSwAEOJ6=bH1=b16XtRQWxG0Wts/WtEvWlW6=lsq=YJ6XOvbWSs/XOs0=YW0JSU1WS1D=SW/EOiYWbR0WxWxJbsQESiv=bseXSEUJbuAJ0WeEtpYXtjYWYW/WtM6JSNmWbsD=tEvJYjU=lWQWtMPEbJAW0EmWSGxElRDJbJPXlj1XlReEYu0Wbsx=YWqWbUYJxJPXO5mJlJ6WbGAXSvbE0ReEbJQ=tEmWSFDElMxEYWP=YN1=bjvWOMQ=ONmJljUWlW6EY=mEOWAWb5UEbM6=bFe=SsxEbEYESpY=bM/WSF0XlWeEO16EbG6ExFxExM/WxJQESv1=tueW0u/WSNYWOpm=b10Ex5UJS=mWtWQWxG0XOM6JlibEY=vJ0u0XtjUXtWP=bMxWlMxWONUJbEv=OG0JxMDEYRx=OMDExwD=b=b=lMeWlNY=OGPEbMqXlRAXOF6Wtj1=bJPEtM/=YiUJSNb=Ojb=SRPWOJ0ESsq=O=UJSFDXO5YJSiYJb=1WSWeXtMAW0M0JbWx=lJQ=YWxXlJQWOweWbuAEbsPWORxWSG6Jx1eXSFA=SFeWxu0JxjmJSvvESHvXSv1=lJPJlMQEOvvJYReExEv=tMq=bFDJxW0WO=UWSs0W0M0XSsAXSu0EOGeWxGQJ0uAEOiU=ORP=Sse=lj1WO=UExuDJbwDWOFQ=SvvXO1/WYuQWOvvElj1EOMqXtu6=lMqWlJqXtR6EOFPJ0WAWbwDWlRQESF/W0W/ESuAXOsQElMA=tJPJx1AEbvbJbJQXSUbJSG6=O5UEYW0Ebu0EO5U=SuDXlsPWxvbWx=v=S1DEbW0WbwQ=OwPEbGq=t=mXOEmJlW0=lJAXOG6=luP=SE1JSF0=tRQEONYEOMAExWDWOvbEbJPJ0E1WOsAW0JAWxjbJlJA=OGeJSGA=SGx=OUmWSG6=Svb=OEUEOivESjYJbvUJbFAElNmEO1eWljvWbJAXSF/JbWDJSUUWlM0XtuDEbMPE0M6WOsA=SsxWlp1Xlu0WYR/WSR0=YjvWlseXSvbXOwA=SJQJl=YXSG6WxHUExM/=Su0=SUYJ0jYJxM6WYReWlEUJbR0=bJqEtpYEOFQWSs0WbjYW0JDWlsPWlEv=SUY=lWeJYR0XlR/JxHYEb10JxMAJYNv=tMPJbNUJxueWSpbWxuxWbEmEti1Xt=1ESvvJS1D=Y=vJx5UESvbXSF6E0W6JYM0Jbjb=bs/J0MPJYWQJbpYWliUEOFqJxpmEOMD=SEU=SpU=tpUWO51XtN1ESEUJ0NvESJqEYjbXSM0=bjvJYuQ=bMPJbivEOJ/JYpvXSuP=bR0JSF/WYWxJbW/WOWxElWAExF0Exwq=b1DWlEvXlE1EO1qXlJQE0Jq=YRq=O=1XOj1=bwxEb=mEYMDJbM0Jxw/XlWAJbJ0=lu0WtEYEOEv=YEbJxpmXtEY=SM0EOGDJbsAW0EmXtsAJbJ0WbHY=bwqXtu0WtNvESux=lWA=SjmWtjvJSj1=lRD=tuAWYReEbE1W0ueExR0=Sw0WlivEtueEtEbWxuPJbF0E0M/Wbs/Jx5vEtNYExGDElJxXlEYW0sAESR6=b1/Etu6WbFqWOEm=tj1XSNvEtMxWYWxEb=1EYEvExM/WYJA=bJPJYRDE0MQ=tJxESRx=Su/WxJeJb1PJlR/=bWeXS5Y=SvvJSHYEYpUJSMDWxuPEO16=b1/J0jUJYN1JbFPEYW6=lu0EtMPEluA=OsqW0MPWb=bWbsAWbJQW0RqWxWQXSNbWSNUWtM6WOvmJSG0WOJ6WOJ/=bW/JYs0JYJ/=OuqWONYWONmEbJDXtRQWYMQESibJxUbESFeWOuAXtM0=YjbXluPESUmJ0Rq=lu6WYM/Xlsq=SuQXSEmEbEYWtNbWxjvXSjbEls/WOwPEtuQElpYWSJ/=OReXtpUJxU1ExRQXS=1EOwxESRq=tEUXOFQXSFqWbpUWOJ6EtRA=lpY=bueJxHbWO1qXtseJbpbEtM6=OwD=SRAExivXluxJSGeWOWPWljbE0MPXSw6WtuP=bsPXlRQEOGxWtReXSp1JxNmW0sQEts0ExuQJYMxXOvm=lpvJbivXSWA=lE1JbwD=SpUXSNmEOvYEYJPXtsPWbjbJSpmXlR6EbW/=lNYWxw6JlNbJSUmEYR6Wxwx=OJqEYW/WYuDWSsD=OGq=ls6JSHYEON1JxHvJxGeXOEmJYJq=li1JbNvExUbEYMqE0uQWtN1EON1EbNm=YEbESFxWOG6JSNbWSUYJbRDEYE1XOUvWSiYJbMDW0WQ=bwQWxs/=bM/XlRDJSJeWbWP=OWAJYMqWb1AJbwD=OJeWlMqW0M6XSJDJb=vJx1x=OGxESjUJbWxWxGQEbsPJ0JQESHY=OEYWxpmXls0JbuQ=OuqXOJx=tsDEO=vJxMQ=SjU=SMeWx5YEbsqJ0N1JbuPEl=bWtJD=S5mEbvm=YE1WYR0WlN1WlN1W0seExWD=bM/WlR0WOseEbsDWO=mEYRQJSM0ElJD=SuqE0RAE0uqXtWAXSu6XtMq=lsDJS1PWOR6WxGqExJAWbJ0EYRQW0R0JYMPWlM0=OM6WxwqEl=bEb1q=SGP=YRqJYRD=bM6JlEmWb5vEb5vJbRDJxsA=OEvJlNU=b16ExHmXSGDEOj1WS=UXOEYJYW0WSw/Els/JS1AEOwqElNU=tJ/EO1DJbpUEYimWS=vWxuqWxHY=tuD=SF0ExpUExJqXSMqWSF0JliUWSRe=SG/JSjY=luPEOWP=l=mEtivXOE1EO5UJSGAExEYEYWeWt=bJxJAEOwxXOGxWt=mXSGD=SiYWx1A=lE1ESsD=bGDElWPWlJAJbNY=SjUESMAEOsAXS1QJS1eJxJDJSUv=Ov1J0uAJli1E0=1Jxp1JYMx=SHmEOMAWYNvExpbXORQW0MqWxH1=OseWlu/WbGPWOHvJSwQExFAESEvJYRQEYMeWtibXtWQ=SpbXOsDW0jYJbR0=luxXSs0EbiYJSiYExj1=SvU=lR6WYWAWYReWOU1WbR0ESpY=tu0=tiv=b1QJYR/J0sxJY=1=Ou6WSwDWO1AElRqXS5mJ0M6=l=YJS1PESUUESwxWOwqWtJD=O5mJlNbJ0ReXS=1J0=vEbF/JxMDXtibEbpm=tWxExUvXS=vExJeXSGxEx5U=bMDExFDJbvvWxWAExsxJbRDEb5vEOEvWSs6WlM0JSWqXOjbWlMQWxW/=YuQEtJ/WbUm=bwQ=lNYEbMQJbEv=bHm=OGDWb=Y=YEvXONmXlWPWSu0EbF6WY=1JlRAEYNUESR/JY=mEbUvJxiUXOGQ=SuDXOuQXtiUEtNvEb5U=tpvWx=UWlu6=tueE0=v=bReJSEmJYuDJb10=b1xWSHYXlNUW0RPEtJ/ExpYWb5YWYsD=bM/Jb5bWSM/WlWAWSvv=OivJb1xXSpbE0WD=lWxExNU=SUm=OJxESEU=O=mElRqJ0s6WbpU=tj1Jb1QXOibEtJqWSwPEYpYXOWqWxHvJluPJbpvXOUm=tWDE0ivElpb=OW6WxweW0s0JbweEbiYWx=bWxUYWO=UESp1W0pU=tRQExwD=YRxES1PWtpYEYsxEb5mJYsAWlRPESGQESR6=bFxEbRAJSF0=YRPJxvbEb16JlW6XtuxExNmJSwe=b1AXSWPWluPXlueJSuqWtj1WtW/XSJqXOwP=lE1ExpYEOG0JxNYESwDEYivJSvY=lj1XOFAWxMxEx1AEOEUWxFPJxH1XOvm=SJPXljv=S=vWlsxXtN1Xt=bWtj1EbsxEtR/EbReEtivWSiU=SFQWlE1Jls/JYu6EY=mES1AEbF0W0jbXOFPEljbWOH1=bW/WOwAJbjYESj1Jbw6ExHUJYiYEtEYWOM/EOMxEbEvEbWQEtim=bsxJbvm=lEvJlRDWbweWbJe=ls6=YsQJbuDXSWAE0NYXO5v=OJeWOpm=bGQWOMPExUYEOFD=OU1Xls6W0=bXlu6XO1xWYJD=bseJbGxWbsDWYM6XOvvEYM/=lNmEOwxXOweJbUbEO=UJYMQW0WxJbjU=OFDXljmEbj1JxwPXlMxE0u6XOiUEtsQWxJAXOjmEOHvJxwqExs6=SG0ElMeJxwAEOjUEYseWlpbE0WAEbEm=bHmWbMxExpvWxM0JSMDEbRxEbj1WSux=lWeJxuQExEmExR6XORDJbNY=OseElu0WbJQJSpbESNYEbMQXSvvWS=YESM6ExpbESEvWS1xEtRq=ls0Wbw/EYW/JSF0WluQWlJPWOUYWls6XlsA=OuxWYW0WOJqJ0WQ=tW0=lRPWx=bEt=1WSWAWbHbXtJ6ElMPJ0=1=liYJlpU=Su6JYp1=tuDWbGeXlWDXSGq=bWPJ0WDXOG/XSv1=buDWOJD=tRDWlWxJSweJbNbEbu/JxM/EtRP=lW/WSp1=OJ0ESj1=bEmWbuqEbwqJxUmEOH1JlseXlsA=Sw0=bw0WxU1WOMPEORx=tRQXSuAJSJAExFPWx1DJSjvXOW0J0J/ESEvWxjmXSvv=lEmE0R/XOjYJYWDWlNvEtEYElM/WtWqEbW0EOHvWYuqJbG/=OWQJbFx=SW6Wx5mXSHbWbJAEOuPJ0MQExJPXO1q=SR0XlMqEbsA=O=YWOvYEYJ/Wt=UEbv1WSwAWxGqWlJPXtpvJS1Q=OWQJYWDWxMAJSFAESsPWOuDJxWDEYJ/JxEbESJqJx10ESWPWOFeWxwqXSGQJ0i1WbWPWbUbJbw0Wx51XOpmJYiUEbRqJlEUWOUvJxJ0J0WqWx=1EYEmXOUUE0=bEluDEO1AWbNvWORe=OGeJbJ6Jb5bXtRPWtivWYW0=YRDWb1/EtMQ=Sjb=bFqXSG0EYR0Xl=Y=SE1JbEbEljvWOuPJS51EbpYEO=UWOJD=t=bEOEmEts/XOFx=bGAEYJQWtuPWOG6EOwqJYs6WlJqEtWQXlsDWxW6ElEmJb1/JxuDExGD=OpY=tjmJbuqEtJAElNbElu/Jx1QEbM/JxWAXts/E0iUWYNbXSMDES5UElJPWlpvEbu6Wb5bWYEvJYR0=SsQWbW6JYjY=bjmJxWAXSvUXt=v=SNvWbvbWxN1EbFqEb=v=SJQJxMAXlMqJSRA=bGDWxp1=OGe=tEvWOpvWxvbWbEUXOGeWOWP=tReE0sxW0uQXlsPESM6ESs/=bwPJSsQJx1/EOw0WYMAElEU=Y=U=OiUJSReElN1WSUUJ0JAXtuAWbJA=O=mJSM0JSEbEx5bWSEmWOweXSR0EOw6=OwxJxwqXS1eESsxJxMAWxNvWxJD=bJ0ExsAESibWlEYEbjUEtW0=t=1ESR0WOueJSRqWSGqXSW/=YRAEYMQJ0Mq=OUmWOJQESW/=SJDXtNvJS1/EtpvXtuDWSJA=OUUExFDWYJxESGqWO1P=lM/ExsqEYsD=SUmJ0uDXlM6JxNb=lEbXSGqExGP=SuqJ0EvWtR6JYNmXO1AWSv1WO16JYR0Jbj1ExGqWYJPJx5bWxsxXtM0ExNb=S=v=b=bXtR6XtEvWlMQJSJqJSp1ESR6Ex1QExv1WOM6ExMqEx=YWYpvWtNmJ0J6Jbp1WlWxEtEb=lM6WxGDJlM0EtRDWbEm=Y=1JbGxJbjmWxp1WxWq=bFQEtMeXS1QW0RqWYsPWSEYXORQWO1P=OFqWl=vWOuAESHbESJDWb5YJxNvESJqJ0seWOjm=bFQXSGDWSu0ESJxWtjUW0RDJ0RxJxwqEOEvXtjb=O5Y=tWQJlW0WbEYWOJDEO=vEYMP=YsxXluqEO5bJbvbJSvYW0MqJxU1ES=mW0ibJlRxWOvv=Yuq=bu6EbRAWOseWtjb=SJxJx1/EtpU=t=1WxEb=tEUW0JxJYMxEluA=tM6Jlu0WSF6=Ss/WbEYExjb=tW0EYuqWOpmEO1x=tseWljUXtR0El=vJxGqJS=bWbwqW0NYJluqEtJqWSRAXSR/=lRDW0uqJ0Mx=b1QJlimExFQWSMD=bwP=SFeXSFeJb1xESMqESJ/XOWqEljvWSJ6Ebjb=tNbWlWeWxNvJSvvJlJqE0EvEOsDJSGe=bNUXS=Y=lW6EbFqJSRqWYM/EOpvWtWxESjYWOi1JxpYWbFDWORAWYM0WxvvExwPEOMq=Ou/=Os0=tjYEO=vESs6JbFqXtj1J0NYW0p1WtseJ0uA=OFx=lpmJlJ0EbGP=SM0XlEUEOsDJbwq=OHbXtu6JSwDXluD=l=vJSUUWb1qJYu/XtsDEl=UE0u0WbM0WbMxWOvbJbu6EYMA=SRAWbsxJxMQJb5UWO5bXORxJSMxJYRPJxNYWYJqWbs6=bpmJSFPJYRDJbRqXl=mWSRq=Oj1WYJQE0=mXS5vJSs/=O5UE0E1EO16ElseXSFAXtpY=bjm=OUb=lRDJbJAWYRP=tReXSs0XOUU=YimJlpYESR0=OGq=b1PWOueWOWxWYW6=SRqXSGqWSJAWlWD=YR0EtWDEl=v=tu0ESF6JSW0=lReEb1QJbJP=OJ0WO51JSFA=OHUESM/WxpbXSwxJ0iYExR0JxsxWOM0XSHmWliUWlsqJbWqJxsqE0pUWtRP=bMeEls/WbuDEls/Ex1eWbNU=OJDJbJxWbjvExWq=YR6XluxWOM0JSiU=bR/WYuQJbFqW0sqEOsP=b1PJS1xWx=bESMqXSU1=Ss6WOsqWOwxWbM0W0EbESjYW0N1=OvmWSM0JS=UJ0J/JxGqJlR6JxuD=bJ0=b1Q=SwP=OF/=ONYE0ReXSHb=SuDEYiYXO10XtjYESM6=Ow6=YsAEtpmJbu6EYJxWO1/WxjU=OJQWSwQWYiYJSNUExR/XSimWtR0WxuAXOHmWOi1=SsD=SRe=b10EOpYEbivEtuAJSibWOFqJbW/JbimXO1PExWAWOwD=tMq=SWqEOvbJ0sDEbvYEtuqEbMeJbR0Jb1QEbJPWSE1EYRAEOvY=SFPWSG/J0EvWxRDJbJAWSjYWOFD=lJQESHvElsAXSEYW0i1WbF6=ORxWb1P=bHU=OpUXlMxJbN1=tWx=bwxExJeWS1eES=UJbuxWbUYWbvYXljYEbWQJ0uPEt=bXS10ElMqWOjbJb=mJxpYXOMeElEbEYNmExU1=YMx=tR6XOFP=tM0=Yux=ON1WOuPESi1E0uQWSNbWYEv=bRxXSuqWS=YESW0J0uPJbWD=SR/EbiYESsPWb1DEOW0XSG6WSpbWbue=bF0JxMAJxGqE0RAJxjvJxu6Ebib=ONvWlMAWSWqJ0s0J0EbWlRqJ0s0=OJxEOJQ=Sw/XSp1JlsAJxsxXS5UXtjmXOpY=S=1JSw/=bUYXtiY=OjbExGAJxWDExuPElJQExWPJx=Y=tu0EbE1WOsx=bsPJSvvEYu/=lNYJSpUXSMx=tuDEbG/Wbp1=OM6=bivJ0EmJbN1WYiY=tM/EYJPJYJqESMxESG/WOimE0seJlsAJbJqWbvvEOMqJbuDXtJQE0=vXSGxJSuPExwxJYMPJSEU=S5vWS1/WSGAJS5YJ0pmEx=YEOi1JxFxWxvmESJ6=ljmJxUUXSEbWORQJ0R6ESW0WbjmWx5UEbJQJSuQXSJxWbMQEbGAWSE1JbwxEtMqJSpY=biUWSpU=tJxJluPElE1XtR6JxNY=OWqXtiv=OJPXljmWOsxEbsAESwAExFe=O1DJ0Wq=lJAJSFxJYWD=bNYEbHYWb5YXtiYJxwDXSwPEtMAJxvbXOJeEYJQJxEUXlRDEtjvJ0JxWOR0EbGAJ0seES5Y=OWA=YJ/ESU1EtEvESM6WOu/XSWAJxGeJbRDJSFxJljvE0NmE0u/XOJeW0W/XSEYJSW0=SGPJSR/XSwxEOReWxR0WtuAXO5bWlu/WbFA=biYWONYWOMP=YReJ0jmEbwPEtRe=OwDJSN1Wls0ESEmWOsDXlWeWbEvWxivExjUJSuxWbsqEtu/JSEb=ON1W0ue=Yj1=SM6JSWQE0RP=SWPXtuDEbH1XSj1JYjUJljvXONvEYJQWlRxJb10=t=bElEYWtsQJ0uqElRAXlimXO5UXOw/JYiYWYNmXSs/WbJ/EtReXtEv=b5UJ0WD=tWeWOWQJb=bEbRAWbU1Xtu/WSM6Wls0=YRe=lMPEORxElEU=OuqWYW6EOFDWlWqXSRAJSsPJbFAWb1qW0pmWOiYWlNUJxwDElMQE0RPEbiU=tpY=OvmW0NYWxEm=tJ0XlMeW0EmWYibJxUUJ0sqW0JeXOMqElj1WxWAJxJ/=SMQ=OueEOim=lMQ=t=mJlEYJbFeXluPJYJ/Ex1A=ls0WljbJSRx=Yu/Wx5YJlWQWxs0ExJ0W0iYW0WPEtEUJSFDEYReJxuqW0=Y=bWx=Yu6EYpvExFAJbwxEYu0WOFqE0u0EOse=tsqEYR6ElNbJxMqWlE1=bGqJSHbJb=vJY=vJSG6JxuQE0J6EYRDWtR0EtuQWYuD=bFxExwDJbjUXO16Wxw0WxpUXlNbJ0i1EYW6JxJq=bsP=Yi1W0M/XSsD=bNmJx1eExjbEbEvXljU=YRPXtu6WSpvW0uqExHYExwA=lpYWSv1WxFPWlWDJbuxWbRDWSseWxM/WYW0XOM/XO5vWYM6=tEmEO=1=O=YJSWAWlsA=YibWbMqJSs0WtW0Xlu6WOivXOGqWlsq=YuPElu/J0pUXlu/=bJPJYMqXlimJb1/E0WqWlNbW0uxJS=bW0seXlRAXS1AEYW0=lN1EbU1WS10Wx5mJ0pvESwx=b5YEtM0JSW/WbMeJYJx=Sv1Wl=1=lR6XOueXO5mEbWxW0s/=OF/JYJ6=OMPJbWQWbReJxWAWl=UWlWeWxsQXSJqJSUYWSRDXOGAEOF0Ebsx=Os0JSGQ=OW6XSR6W0WeWlR0XS5m=Sp1JSuQ=SMeWSN1WlRDExi1=OJxEbw/EluxWOGDXSM0=lsAWb1DEO1qWbW0W0E1WYsxEbjb=liYWxjmW0pv=bRQWSw0Wb5vXtpY=lsPWliUWbEmJbv1WOEbESMQWb5U=YMQJYsDESF/JY=UElpb=SsDJSFxEtW0EYsD=SR0=bGqExM0JYi1ESJ6=luQE0M6EYEUXlp1=Sv1WS=bExN1XSGDWSFDWSsxElJ6WS5bXljmEYsA=bpU=bGQWtsQWxRx=YEmEtR6JbGeEYjUElRxW0RxWSWAJxF6XSuxEOEUWtWQJxpvJ0Re=tM0XlWxXSRP=OR6WSvvWxJ6JluqJlsAJb=mXOsqWxEbE0RAJSHUJx51ESFeEYE1WxuDExNmJS1QJbUvWxuqWOsPWYJDJlRqJ0RDJbWe=YJ6=tNYExJ/XlNbJxW0J0EvEbueElEmESF0JSMPWOW6XSuAXS10XlJ6EOjmXtjbWtW0EYu6WtR/WbR/WbwPWxibExjvEtRq=S1Q=ljUEOJ/WlueElNbEbFeJ0=mWxjmWx=UJbH1EOwPXS5YXtRxJSv1XSG0EbuqJSiYWbHU=luQW0JQWtWAWxM6WSuD=YseWSWAWxJxWbp1JbRPXOWqWORPW0W6XtRqXOu/=b5UElp1WSUUExJ0EtEb=lJ/WYuAESM6WtE1EOJeEtR/WOs0WxFq=YjmWSM0EbvmEYJ0EYWAWYu/J0M0WxGDEbFeJYs0W0pYEYiU=YR0EbuAWO1qWxFDEOJQW0W6WOuQWlMQWtpUEbW6W0jYEO1PXtMAJljbWOvb=tEbJbsQ=Ov1=OEbWOsPEOJ6XSW6=bw0WS=1=luxEtivJlReJS16W0ueEbE1WO10J0MeE0pmJ0jUJxvmWtR6=bivWSH1=bMxXO1/EOiYJlJDXOUbEbNvEOFeWbHmWlsAJ0s/Ex=YWlsQJbWxJbRDWSpUWOJ/EbpmElRqExJ0EONvJbsDWbHv=SpYESJ6WlEY=SHmESN1ElW6EbG6W0WeES1P=bjUEYJ0XOFQESG0E0jmXt=mXtsQWbRAE0J6=YiUEbJqE0RDWYWDXO5Y=bim=O1xEbsPEtWD=bG0=SWPExueWONvJbJq=OG/JxMDJlW6Jxs/EOuA=OFqEYjbXOMeWtsQJlNY=SHb=tM/XSG0ElsAJ0WP=OMPEtJeWbNmESsQEbRqJYjUWOG6WlseJ0ueE0W0WOpbJxwP=OsPJxiYEtu0JlEYW0uxXlu0JlR0=l=1EtpYJlsDJSWDJ0NvW0M0WOuDXOWQXSwAEtMxEtRAES1PXSwQ=SRAW0W0WbWAXSvv=bJPWSF6Ebu/ES1xXl=1JSM0JbRPJxJ0JlMqWOFPWlJ6=SwxExu0Jx1AWtEU=tNYEYsxJxR/=YivEb=UEOHvE0WPJS5UWSpmWb=YJSsqJbw/ElR6J0ReWlMq=OGeWbRxESJ6WxFqEluqXlNb=YuQ=SuP=lEUJbpY=bs0EO=UEtJDWxsPEYJ0XtiYJ0MD=b16WtW6XSiU=SFxXOG/XlJDWxibJxJ0=OF/ExEYJSwqJbRe=OMPEYs/E0jmE0R/EYW0JxvU=tRAXls/EYJ0W0sAJ0iYEYMPEbEYESNm=bwQElMqWxNmEbFeJxMQXOEUW0uqJYMDJS=UExw6JYjUExR6Ebs6XtWPWOuQJbHvXSNUElpY=SEvJSR/W0seEbM6W0MqXORAWYM/WbWA=OWxExF/JxvbJSuqEORQJSGDWSR0JxFPJSG0XO5bEOUvWbJxJb1PEtRe=YWPWONm=OGxElN1WOF0EOGDE0RPXSFqWO=1JY=YJYEUWlWPEtseXtWPWxUmExvbXS=Y=YjYJb=1WbJ0WSUvWSvYJ0iY=OGPEYWQWSEvJbGPXtR6EYRPW0MAXOvmEYuAExN1EYEvEtMeWxG0Ex1/ExHvJSiv=lR/WS1xJxpvWSGeW0N1EYivXOGxJxvvWOM/Xtu0Jx5mElJxElivXlJQJbHbXlpU=O1D=biYWSJDJSJ0WtWqJbsPE0pmEOJQJbF/XlivEOEb=YWD=S=mJSv1W0MD=Ys/=bjUW0im=O5mJSw6WxGQ=bMQEOjUJSJx=tux=liv=OM/=Sp1Jluq=OwDEO=vJSUvJSEmElR6=lpv=tj1XSFQJxjv=lWQXOFqEtNmExweJlE1WbuPXlEU=bMq=tW6=l=bWSRPWSGA=tjm=YWAEYWe=Ypb=YEUXtsqJbFxXtp1=OuxXOs6Et=vElu6JlpbWbWPJYuPExGQEbwqWxWPXtE1WOEm=YjUESw6WtjYXtsDJxWxWtuqExR/Jb=m=YM/WYMD=bReWbMeJluPWSJDWSu/XSE1WOJeJxJAJ0uPWOHvW0NmWxR/JlWPXlW0E0jmWxRx=SpvJ0pm=ts0=OGx=SsQWYRAWSRPWYuqWtRA=lR6=YWP=O=UXOU1WxEUWOJ0EOJQWSwx=bRqXONYJ0RAXSMDJbRD=bW0=tue=l=YXtsAJ0ibJl=v=Y=vESJ0JYWAXSs6JxEvWlj1W0J6=YiYESw0JYuxXtJ0JY=vXS5vJSGxESUvWOJe=Os/XOWQEOu0EOJ0=l=1ExNUXlNUWOw0XOMDEbNYXOvbWluPWYMAE0p1WlsPJbWPJSGPJlNmEYN1JxueE0MQWbpm=S5vWlNYJxF0JxvvJxMQJSRxXSu/JxM0=biv=YuD=YiYEOJPE0EbWOp1WbNm=YuAWSEbJYseEb=v=lu0EbW/XlEbEO5bXlW0ExFAEtWxWtsxESw0=lE1WOJ/WSwDXOvU=OU1ExMDJlRAES5mExWPWSUYElM6WOUYXt=YXOj1WYR0ESvmW0EmWSEUEOF6EY=UWtuDWx5mWYiUJ0uq=OMQXt=bWSuD=OHYEx16EO1AJlWxEb5mExNUXt=1WYJAEYJDESWeJYJeESvvJb=bWSjUXljYWtpYWS10E0NmWbJDXSReWbWqWb=m=bu0J0sqXOsQWYux=ON1ExWq=YM/WSsqEts6=b1/EbGP=tR/E0JeWOiUJls6E0=1WO1QXSuxExRQ=b1DWbv1WYuDWlW0=SsA=SMxWli1JYNvJSwDXtjmExpv=bj1JSEmWlMeEbpYExNvXtNU=bW/=bp1WSRQEb1DJlseWOpYXtpbEbRQWOueES5YWbR0=YJPWYEbXO=v=bNbXSUUJSUmWxvY=bG6XSGDXSu6WOGeWS1/XlsPJ0jbEbMQJb1/WlsxXlsQJxW0Jx1D=tj1EYpv=SW0EtsPWts0JSEv=bRPWxwqExpU=Y=UEbuxW0imE0=YEOWDXlEmExWAWxHmWO5mJSsA=lMPEOM0=buQWO1PWbw0EYpmXlJDExJxJYEb=tjU=lMAXSsqEbNbWxGAEOJx=OWPJxJP=SJ6XOH1=SibWxp1=Op1=SimXtMPJx=YW0JeJx1/WSWxXS5bWOseJxJP=OH1EbFAXl=YJYs0E0jv=tMQXOG0WOGeES1/ElsQWbwQWts/=luqJluPWxvbWxNvESFAJxRe=SR/Jx=YWSweWbiv=SWqW0WeJSjUESu/=Swq=ORqE0imWSNUWb1DWOReJbW/JxJDXORQEl=YJbEYEYR/=tMDXSjvWOGPExUbWbJeWYJeEbiUExG6WONU=lJ6XtJqESHmElJq=b1/Wxi1E0MqESwe=b5UJSimJxM6Eb1eE0uqWYWq=bNU=YiYXO5b=Yj1WSsPWbMQJbR0EbR/EbsxJSwAWSW0EYJx=bRqEYWeJ0pvXOGqXSFDExMDXtuqWSsQEOw/ESGP=bFAJ0JxWOJxWx=YWlMQElJAXlsDXOMqXliUJbGA=Yi1XSNUWOuxJbJ0WSvbWSuQJbs6=bReEbsqXtEmEbJP=bibWbGPWlNU=Ojv=OJPWbibXSRDWlW0WYW/=O10WtRQEYReWSRAJbvYWYWDEx5bJx=UEOGDW0pbWtJAJ0MAJbJeWtEvEx1eXlRQXSHv=Y=1=tM0=OEvE0N1JSHbWxFDJbuDESpUXSw6WxvUWlM6W0jYESM/Wx5bWSR/WbFxJbJ/=tuQWbiYWOsxEOweXlEUES1xWYEm=SGqWY=1E0pm=tEbXSsDJbJPEbEmExsA=O1QWO16EbFAWtRx=Opv=SUbJxR6=OJxExWxES10=Ovb=Ou6W0MDJxJeWtE1JlJAJYWqWxG/JbMDXSuQWYE1WSJ0XSJQ=Y=mEtivJYNb=luAWYM/EtJ/JSMAWluqJbpYXONmWSueWOW6=l=YXSFAXSGPJ0MQE0i1WSG0XOHvExW6JYJQ=bUbESHYJxRPWS=UEtEYWxvbJxG0=YEYEYibWOpb=bsAExWxWb1P=ORqEYs0JlJqESvm=tJ/=bvYESuPEYJeWlpYJSW6WbwPWxsAWOHmWbHUWxEUESJqJSWDJYJQElNUXOpbXSsqJlJ0=b=1W0WQJYuxEx5vW0J6=lW0=YWqWbW6J0Nm=bsDWYseWY=1WxM0WximJSJqExHm=SGDXt=vXlJqXSR/EYWq=Os0WbUvJb1QExGDEOEmWYs/WSM/WtW/WOvvJYJe=OiUJx=vJSMq=O5mESUYESwPJxFqJSv1JxW6WxivEOsQXSMQJbE1WlRPWts/WSWPWlu0=Yu/ElN1JYEbEbMDElM6JYNb=OMeExGDES5YXtuDJxR/=bR/Jb=v=lsxWS5UWtse=S1PWS51=OUvJxMqWx51ESuxJSHbEYNbElNYJlpUXS1DXlu0EOsAJbs/EOEv=bUbExNmWxM6=SiUXtueWYuDW0=Y=Yu6EbMAWx=bElEv=bUmJYs0ElWqExwA=bWeEOvmExM0W0N1=tpUE0sPXli1XO5bElWxWbW/W0WeEOJeJbG/=bR6Ebi1WxsDWSUm=lJ/JSN1EYW6Xl=YElJQ=OJqWYsQESHYWlEY=YWeWt=YEbw0ESsxWO1PJlpYWOvUXS10=bs/=OJDWxEb=OwQ=SWeEYuDXSJx=tibEx=YWxJ6WtEYWlsDEYJ0WlNv=lim=tRDE0=b=SFPExseExJxJlse=OMQ=lu/=Ss6XSseWSR/Jb1e=ORA=OWxWlJxJliYExRxWlRQWlW6=b=1=bG6WtJAWbFQJlsqES5mWxGeE0EUExFxJS=bEOHmEb1eXSJQJbivXSsAJxJeES1DXO5v=bsPJbWDJxwPEOG6XOu/=tMAEOGDXSsDXts0E0RxEbRQ=lpvWOJ/ESF6JSGeJxUvWtMAExsPEY=1XOs/=bwD=Y=mWOMxESEvJxUUWbvvJxGDEbWPWSvmXOR/EONUWSJqEOFDJlu6EbEY=bibXSF6WbU1WYiUWtNbXSueEtM0JxGDJxpb=lWPJbG/JbvmWSHvJbUbWSuD=tJx=ONUXSMPJxiYEbHUExM0WOpvWlu6JxN1JbHvJxs0EbFqEtueWO51ElEUWt=UES1xEORqXOuQ=YW6=SvY=tMDXSu/Wb=m=bGQJxM6WbJPEbjbExuQJYibWb51=lJDEYsDJSG0E0MPWYpbJlpvJlJ6EONYXOF6WOGAWS=b=lsPWtJQXOGA=O5mWluAWYWPJbM6W0NbEOWqXSsAW0uAJxweEtjU=bHvXOJDWSUUEOWxJlJQ=YR/Elp1ESFqEbiUJbseElJQWtR0=bu0WbpmJb5bWb=b=bwDEOjbWOweXS10JxFPWSi1Ebs/EYJx=YW0JliYESMqJYuP=SR6=YJxWtsq=bHYJSE1XtM6Wx5vWSi1JYpbElpYWlsP=ORQJ0WeXOMDWxUYExReXSR6=Ys/Wx5vEtpvWbs/=SJ0=YMP=bNb=tR0E0WPXl=mJSNU=Si1Wbp1WlJPJlJe=Y=vWSj1=b5YEOMeEtReEtuA=t=vESJx=ti1EYs0WOM0XtibEbW/=SjYJSvUXSMqWS=YEOM0XSvUEYJeXOiYE0W6WO5UEbvvEOGx=luAJYWA=lu0=SuPJlsDESu/W0EU=OwAWtMqEli1WS1AJxRAWx1/ESUYJYsP=bJ6=OJQXlReWbjmWlE1Elu/=SMAWOw6XtWAJ0NYXS5bEx1/XO16XSNm=YWe=lWQEO1xWSpUWxJQW0MxWxG/EtM/EbWA=OF6Wb=b=OvvEx1PESuPJbim=S=vElEmJlsqEbFAWbHvXtRqXSvbXtM/XtueW0JxESRPJYWAEbMeWxHmWtM0=OjmElWQEtR/WbJeJb=v=tu/=bFDWSwqWYuAJbW/ElJeWxpUWxwPEx1QE0jvXtM0=tRQElseJli1XlRDEbjYJYMD=tWQJS1P=lj1ESEmEtuDW0WeJb1xExRPXOw/JbWxJxG/JljvE0M/JSsqEYEUES51Exu6XlNmJbsPESW/=YJPJxwPWYWQXOuQExpmE0Jx=bMAWSRx=tNmWtpUEtRq=tMQ=bMQJSGe=O5bXSJ/JYiYJSJeEYueXO1xXlsxJxJDWtMD=YJqElseWtuAEOFeXSsDEx1D=tMQ=lueEbsDJxWxWtsQ=bimJ0pv=O1xW0RA=SE1=YEmEOivWSuqEx=bJbWxEbG0=YuQXSuQXO10JlM6EbMPJlse=b=mWO5mWx5UXlMPEbue=lEYW0imXOHUXlJDESsqXSjYExuqWOG/WOvvEbsQXSW6JSFPWOUbEONUJbuAXOUbXl=m=tMQWSGQJYM/JxR/Jb16=bRx=OvYWSwqEbRxXOMqXSux=Ovv=SNvEluPXOW6EOjvWOW6WS5mEO1DWO16JYWDWYj1=YNvJxu/WtRAWYJxJS1eEYJ0=Sw/ExvbJljYEb=vJ0ux=YR6EtNUJlWDEO=UJ0pbEtMDJSiUEYEmJbseEYNY=lseJxuA=tpYWbRxJxG0WS5v=SwQJbF6WSEYEtuD=bW/ESF/XOJAEtRe=ls6ESMDJYMeJb=1Jxu0EYWQWxJx=bueJYRQ=YWqWbwAJlJQWYpUWbJAJxs/EOReWSvb=SWqWtiU=OibJxGPEYjY=OWA=OjvEbWeJYRAJxJ6=bR6WSMe=S=1=Ow6=lR6=tiYEbGqExsAW0uq=OJ/JY=1=luAWxEbWOJDWlN1W0p1J0R/JxUv=YW/Ex1qEO1eEOF/EljbWtWxE0jmElNvESNUWxWxJxNbW0M0EORP=tJDElu6EOJ/ExvbJSvUXSJDWbuAWYJD=lRD=Su/=tEbWtuq=OR6XSNvJYjU=lJQWOFDXSsAWbJxEOUYWtNbESM6JSJP=bvvJxsqESwe=YMq=bU1EbpvWtibEbseXOE1Wts/J0MP=bwqWtuQJlWxJYM0Jxi1WbM6WSEmXSRAJ0JD=tNvESNY=lW6W0=1Etu6W0MPEbjmJbG/XO16=tpY=YJ6=OGQXO1AXSW0JYs/Ets0WtJ0ExwDEYiUWljmWYJPEbw/WlMeJxM6XlE1EYWq=tpbExFeESMQXOW6WlJAESRe=bWDXSMP=SpUXtimEbMQ=Sib=bFeEYW0EbW/=SM/JYp1WYW0JxwqWbw/XS1xWbs6=bNUJxj1XS1DWbM/E0Em=YJx=biYJSj1J0ueXlRPWOJ6XSMA=lNYXSRqJxp1=SRQEbFqXSJqJbjbJSpU=ljbXluxJS16W0WxJxWPWtMP=YsDWb5UWbF6Jl=U=YJqJ0RA=lNYJbwQWtuAJYWQWlJPExEmWls/EbuAEOGPEbuQWxv1WSjU=YWPWti1=bJ6WluxWOv1XSRPW0pmESFqWlE1XOWDXSw/WSpmWtuP=OsQJxWQWxsqExRqWbwxWximXOsAElsA=YR6=ljb=OuQ=bwDEOp1WY=1Wb=UEliUJ0iUEYuxWSWeJS10JY=YXSwDJYJAJlMxJSWPWOwPJlimWtWeEYjmJxwqJ0ueXOMDW0JA=lRDXOGPWOseJbvYJSJQEYu6XOMPEtuDXSG6JxUbWtpmJlRDWYu0XSFqWb1/WtJ0=luPEOJQElWxESGDXlsAWb16EljmWSs/J0ivXtWx=SFqEt=YJ0W/ExGDXS10J0JQJbpbJS=YJ0WeW0pvExW/JxJxWYimEli1WSFeExpU=SGeWOFPJbvvESvUWOu/JlWxWlRQEbpYExu0Jbs/XSw/EOs0=YR/XlJQ=SWDWxG0Exjv=O1/JYRAES1eXORxWxWqWxRAESuQE0NUJSE1WSHYEtuqE0jYWxRDEtR0XtRQ=SEbEOEUWbsxEYWeEOuD=SJxWO=YEY=vWxWqE0uAEOsD=OGQWx1PXOEv=OGxW0ueWS51ExwAEtuxWtNmXSJqWl=UE0WA=OivE0WQEbFDExwAExHmJlJ6XtM0WxWeWbi1WbvvJxpUExHUEOsPExjYW0J0WxM0XOjbXOJQWOGAWOH1XtjbElRxJlj1J0Je=bGeWxE1XSFxExGAEbUvJb10JxuxW0MPW0u0Ebu/=OMeEOJAW0RqWbFeWxFqEY=vE0MqEx5vWxJeJlM/WxuAWYpYJSpvXOG/=bFxEx1qXt=YWSsA=tEm=SsqJSs0XSNbJlW6EluqXSHvElJq=l=bW0W6WtivEbsQJ0u0EOMPWYseWbU1Jbs6EbNYJ0NU=ONYJSRQXluPElpUEbR6W0pbJSMD=bM6JbMPES1/=SRAXtux=lMDEbRQJ0pU=OGAEOEYWxWeWbw/WOJqWbwxJYJAXt=1=ljbEtEmExueXSj1Wx5YW0J6ESEUWxUYXSNm=SFqWOGPExsAExFqJSEYJlp1XOue=OJD=OM6ExNYJS=UJYimEOim=SMxElNbXORe=tEU=Yu6=OR/=OUm=SsPWbU1WxuDXSHvXSvmXlu6WYJP=YJqXOUbWlueWbFA=SGx=O5vJbG6Eb1AWOs6JbFeESJ/EbuQE0NU=SJ/JYJAEbEUEOWAJYjYWOuQWxseJYu/WxUUWxNUJxRe=bF0ElEvWYueXSsq=bWPW0J/EOWqWSsxESWq=Sux=S1eESjm=SpYJlJ/=buAJ0RP=YWeJbpvXtEv=b=Y=ljbXtsxEbs/Exw6JSj1=l=b=YuD=bWxJ0W0EluD=SM0=lNbJ0WQEliv=Yi1EbFD=bJqExGPE0EvEtsDWSivEx=1WbJxElsq=ts0WSGQEOMxWbJD=bJq=bHbWlMDJxjmEtMPWxseJlueJlJ6=lJeEbsxEbwxWlpUWYWxXO1eEbvbEbuQEbRqWbpvEbJPWOHvJSu0EO5bWtRDEtRqWluxEx1/ElMqXSs6=SF/WS5YJSEvWlM0=tueEbiYESp1WOEmExG6Jb1P=Y=1=bGDWO1AWSUvJlsxJbv1WbJqXOHYXOMPWxpv=lJqXOMQWSG0JbEb=tMeWS=b=SNv=SMDXlMxJSwxXOFxJx=vE0RqWOW6EluqWOjmJYRxJbR0W0JAWtWq=ljvWxs6JxNv=YuqJ0WQJxwDJYNUWSuPJ0=1EbUvJbW6J0jbXSJAE0jmWYW/Ets0WtR/JxF6W0RPElJqXOWeWYibJY=1JSUUXti1ElWqEOF/WOJ6XSJDElJPEtJPWlu0WtNYWSJDJbWA=tuAXONbEbEYJSw/=OFqJbJ6JSuqXls6=bwQExwPWbJPEOM/XSRQXS10WOWD=bJQWbUmWSRDEbU1WtRAWS1PJY=vJYsPEb1PEb5mEluDEYRQExGxWSJqJb1D=SMqJSWPESW6=SjbJbReWORqEbM/=OjbXtNbJls6XlEUWtsDEtpmXtJDJlseXOwqXtJDJSwAJYMxJliYJbUbWtuqJYWq=lM6JSpUJS=YEYNm=Sw0XOvYJYRDW0MDJxEvWSi1WlivJYsPJbG6=l=bEOFeExJPWbsqJSsDESwQWlNYJxJqJY=v=OivExGeWOiU=lWPJSuQWt=UJljbEtuAJYNvWOF6XSG0=l=1XOH1EYjYW0sxJS=vJxpmEbuqXSu/JxRAEYsqXSE1=lE1EbGxXlNvExHmJ0R/=Oi1ExGxES1AJxRPXOpvEbjbWOHUEbJ/XtJeJSGe=YJ0EbFxJxRQJ0jbWOJAEYMxWxNY=ljYW0W/ElNvXls0WbG0=Yux=YReJYuD=OivESwD=OJxE0EUJxJQWxpmEOGA=ti1=OuxJYpYXtueJl=vEb10WlW/WlW6=OFPEbR0Wb5mEljvEx1qEOHUElNUJSsD=YjbXlRqESpUEtpb=b1xWSw0XliUWOvbEtMQEbWxJYEY=lu0JxWqESHvESpUWxGPEYJPJYuqXSRP=O=1WS5UWSHvWS5YEtMDJb5Y=ORP=lR0=SiUJ0J/=tMqJbiUWbsDJxwqESw0=S1AEbs6XSU1Ex1DWbvbExRxW0M6Ex=bWOJ6=bFxJxUvXOW0ESJAWOFqE0J0=li1WOJP=bueEYu6EbuQWxvvJ0R6XtMeWxibESwxEbRPJYRQEtEYJxR0ExGqWx5bJbpm=OjY=bwPWOG6JbGxElj1=lM0=Ys6WSJQJx=vXO51WxMqXSRDWSweEY=1XtNm=b1x=tJ0XOR/=OEbJbG0WxJ0XSW6XtiUElJeEbimWtimJbiU=tMqJxFxWbiUWYReJSM0WlE1WlJ/=S1D=SpYJYMe=Ysq=SuP=ts/=bH1=YN1=b5UExWAXl=YXSwxEYp1WxWxElE1=YibJ0R6EbM0ExMAJxFPXlsPXOJ6EYR6WxG/Jxv1JYN1=OEbEOWDE0=mJxsDElJqEOuPW0N1XOJxJbW0WONUJxWeXOFxWbFeWliUE0M0WOGeExu/EYiUESRA=lJDE0u/WlEmWtjY=b=YEluPXSNvJx=v=Si1=OGDXlJxESuPW0W0E0=vEYWDWbiYWOpm=lMe=Ou/=Y=bW0E1Wx=vWb5vEOsQ=OvYExJe=YWPESRDWtMqEbNU=Ysq=SUUJSGxESHUWYWAWxu6ExweW0jUEl=bJxu0XSE1Eli1=luxWS1eJxM0WliU=tue=S5UXSRxJxGe=lEYJSuqJSJ6EOUv=tu0ExvbESpvExUmJxw/WxFDWOFPESWqEtu/EYJxEOjUE0MA=SJeWbsAEbMDE0=bEluqJ0iYJbuQESJ6=bGAEY=1XOJq=lJxWlpbJxUbWtivW0JqWxvbXSNvEOWeJbRDWbEvW0WQ=libExux=lRPJSpvE0E1=lsDEOJe=lWAJbjbWlRxXOivEOw0Eb1PE0RA=YuqXORQEbw/=bRPJlp1Wl=UJYsPXl=bXSR0=tJxWSHYWSFqWSF/Xti1=bjvXSW/WlpmWSiUJlMA=lu0Jbi1ExWPJSjU=OGeESHmEtsx=SF0ESs/=SHb=OwDJbJAXS5UExRx=tNUWxE1Wts/=SwqEb=mExR0=Ys/WljmJSweJxG/J0WeWSGqXSJxWYW0JxRAExUvJxFQXtWDEbWqXOivJSvU=S=UWSimJ0=YWxW0=bW/=b5bJSJxWbj1W0ReWxFe=SseJbF/XSiY=l=UJYuD=Yp1JbueESuxWxjbWOW/=O5mJYRQEbWQ=Si1WlNbESwAW0=UWlpvWxNYXO1e=buD=bGQEOv1J0MDJx1/JSsx=tuA=SEbJxsxElRPXSGP=SsQEluDJ0sAWbUY=OGq=ts/WYR6XOWeESw/W0M/Ebs6JSFxE0NvWSvYEOJAWSWe=lsQWlMxJbuPJ0uAExE1XSjb=bEYXtsqEO5Y=SJ0E0MQXSJ6WbjYJbReWlEmXOw/WtRqWxFAJ0NYWYEm=bw0XtWPExweEYWDWOjYEYR0Xtu/=bvvW0=mJSF6=OUUEtJeJbWeEbMe=SHUESJx=SMqExJAEOR/JSJe=O=mXl=vJ0MqJYNvJSEmWYs0=bNbWxMeWbs/EbHmEYi1EbUUWYJDXtRqESF/XSsx=OR0=OJQExGQW0iUW0u0WOwPEtuxJxR/EOMPWbpUEORDWSNYXls6EbsAXljvJxGeWlWe=OM6=bwxExMxXOGPEbGqJlJeEOpYXlMxExwD=OvYEOGeW0s0JbWxE0uDJYj1WONYXOH1JSsqEbMD=SvvEOJ/JSEUJYWqJ0uPXSG6WlN1JYR6ElJ/WlseESwAXOJ6ES5YWbu/XtWPXlJ0XSM0=SMQ=Yu0E0JPJSF/WlW6=YjUEbReEtjbWOG/XlR6=SGQWbu/W0pvEbsDXORPEbwQEORP=SivWbR6EbHvE0J6JxHYJYsPXOMDEOwQXliUExNm=tW/=YWqW0uQXlW0=S1DE0iUWOwQJxpmWYRQXlRD=bEmWSMAWxGxE0sDWOwAXlW0=lJeWYiYElJAEb5YESwA=bFDESW0=bJeXSuDExRqW0JQWb=UJbwQWbUU=SUY=tueWbuq=bMxW0JDJxNbWSFAJxG6Wl=UExs0ES10EluPEbw/Wb1/WSF0XSH1EYNv=luxW0Eb=Os6W0M6WluQJluxEb5m=bjvXtW0JxpUEbWA=lsQEYiY=OW6=SHmWt=bJbH1JS5vJxGe=YsDE0imExRPJbG/JxHm=SjUESW0JbpmEbW0WlR0W0EbWbWQEtuPEYEm=YEbWxR/=OH1JYWeExsqWxw/XSsq=lJ/XSRAWbw6=bU1ESNv=bwQEOR0JxR/WYJ/WxpYEbw/=ORD=bM/ElNbESGxWbu0EOw0Wls0XOHmWSs6=SGx=SwPWxEYExJ/=S=Y=SseXOM0WOJPWSEUExFP=SW/XSR0JxjYXSvYEOWqJYWe=bibXS1AEx1QWOEYESsqJSvmJlMD=tEvEbiYXOJDWYW/JxjbEO=UJbEbJx=vESjbJ0JDEYu/=OFPEbu0ElseJbMeJSvmExv1=SN1Jbjm=bH1Wx1AJSwxESvUWSMPXOF6=tuDWSWQJSiYWlMxXSu/XSWDJSsPEbi1EYjm=bs/JYMDEbFeEts6WS=YWOF/WxHbJbWq=YRAXOGDJYN1WS1xXluxEbs6EYR0EYMPJbN1JbpbElJ6JxuPEOHUWOjUEbMxWOvUJxW0=bJ0=bGDXSFqJYJ/EtJAWx1AJYJ6E0WqXlWxJYR6Etp1XOGQXOwqWtEvXtMeESGxEbs0ExHvXOw6ExWPJxw0=OJqJxuDExWPXOsPJxEUJxwqESjvJbGDWYWP=OF0Wli1=SRxESWDJ0M6WSWqWOWDEtMDWYu/XSWQJlE1EOGeESwA=bu6XOMQ=bFe=bWPWlJQJxuxJlpvJ0=UWxHUE0sxExRDElu0=tMPElEUJxWAJYjvXOGx=bweESG6JbjbEOWq=Sw/WS16J0JqWb1/=tW/XtjUEbjmJlEbESwxXtJ0JlR6=lRQWbseXtM0ExuqEbimWOJQXOFqJxuAJxJDWtWA=Y=U=YM0=lRqEbEvJxFeJSpYE0pbE0s/Wx=vEO5v=bM6EOR0XOMAWOvv=OM6EYpmJxNbJbGqW0MeEbRQXOEUWOF/=O51JYpY=tR0XOG0WbUbJYNvEO=mWYs0=SMQEOEYEb1QWYJ0=Oj1ElpUJ0NU=OEUEtuqElueXtNb=tJDWlsD=bsDWt=1XSsPXOHmESv1ESw/JSjvJbR6XOJ6XOi1=bUUJS1eJYRqEOwxJ0RQWOJQJxF6XO1qESNmXluAWlM/=ORAXlJqEljmWSiUWtueWlNY=YR6=t=Y=t=vEO10Jb5U=OHYESN1EOEbJx10EbRqWOwAWx5mWSjvJxpm=bMQWOWAE0JeExjUWbv1=tJ0ES=mWl=YXlReEOMeEOW6XOGQXlEYJSEvE0jbExRqJlM/=tReJ0seWlJqJSGeWxFPWbs/W0JAWO1A=bjmJbjm=SF/WbJ/Elp1XlMPXtjbXS=bElN1XOMQW0ReESE1=OUbJlRAWSimXlN1EbUUE0seXS5bJlJ/XOJ/=YW6J0M0WSU1WYM/WlpmE0W0EOHvEluPEt=1ElRe=Yi1EOWQJSEmESNYXtWAJSM0JYuxJSEUJxJ/J0=bExpvWSueJSEm=tJQESvbXOiYXlW/JSR6XOpU=bvbExJ6J0RAE0iYJYMPWOw0ESNmESW/JY=mESW/EtjvJY=mE0NbJlJP=SuxW0WAEbu0=Yp1=ORD=lW0JxJxWSMAExUmJxF0XO5UEYuxJS1QEtWxWbvY=OWDESuqWls/JxWeJYM6JSWeJxW0WxMxEOW0EOWDWOvmJ0J6=bsAJSpbJ0u/EbFDWtReXOF0WYibExHvWlu0JbWAWliY=OuQXSG0WxNmWYRAEbs6ExMQWSJ/W0RDEbR6=ljb=SRe=tWx=O5vWYsAExweEOuqXl=UJxjb=OHYWOFxXOi1Xli1W0W0EOJD=buDXtMxEtRxEbUYEb5YWtM6J0Rq=bJPJSM/Jx1/WSuqElJ0Xt=vJYEbEYNb=OiUJxJxEOFeWbwPJxUbEbEbWtNbExs0W0=bJxG0XtsQEOj1=S5Y=bF0WSMeWYuDWbpYXOpmEtEUE0R6JSjmWxpbWbs6XOGAJxWx=bWeEbRQJ0N1EtM0JbsA=YMQExNmJxM0=SG6XS51JSs/XlEm=OFAXSFqE0WxWOFxJYW/WlJQXSGQEb=UWxFDXSiv=bHmEx=UWbuAJbGe=b1DElWxWbNUJ0RPWO16EYNbW0iUXSiUEtRP=t=mESR/EOsPWxpU=lsxXliUXlWDJlWeJYpv=SJqEbvmJS1QWSiYEOEbWOMPWlpvW0s6ESNbXSM/XSJx=tMqEtjvESNYWYpYJlJ/WO=1EOW0=ti1JSs6EbpUJlp1XOimEbRxESMPJbjvJbpYJYEmExNUEONbXSwxWxGA=tR0XSs0=Op1=OR/XSsQJYuQWOsPXOMxJSF/EO16EtsPXtJ6EY=vEbM0=lpmJYj1WSHmEbJ0WSMD=S1QXlWQ=b=1=ONUEbW6Etj1ESF/=lRQJliYEb=mWYs/=OF/WSuDXSMDEb1AEbEmExwAXlsxXSv1=ONm=YsqJ0WDJYuPEO1xJbi1JlEUJlMQJlM6Eb5vXO=U=Y=vW0uQWSF/=OHYEO1/WtJPWlJPEYEbJb=vEbG0W0EmXOp1=b5UXSFAJ0EY=bwQExuAESvU=SiUXOuxXlM/WbW0EYR6EOJD=lsAWlR6JSHv=OGqESpUExpbJYR0WxEUJxUUWbGe=lNbJSueJx5b=bFPWljmWYEb=b1DWOpYWtWAXOw0WSGqJxuxWOsDEOpYW0jbWSEmEYMPWbuQWbjUJYse=bM6XSMeEOW0WOF0ExivExJ0=tMq=bwAWtM/XtjmExW6=S1eE0NmXON1EOvvWS1e=SM/EOwD=bpUJSR6=SJ0WYRQ=ORPXlEYJbUmEbu6=YRDJ0N1WSpmESGxWSjmJxs6WOHY=SsxJSUbJYjbJYNYXlWqWSF6Wx5bWlJ/EbWxWSN1EORD=SMPEOGeE0u/WbwDE0RxXtMPWSHbWtNY=bEvEYiYXtuxJS5YWbsDW0ibESR6E0se=YjUJbMQW0NbXSFDEYJQXtMxEYWqWbvmWbibElNY=bW/JxJPW0JeWbM/=YJ6WS5UXOw6ESMQEOj1JxG/WtMQXtRDJbEUWSweJS5U=bUY=SRAWSvUXtWQ=bwqEtNm=tRqEOvmXtRP=SFQ=bNmWSG0W0R0Etjb=ORPEOUmWSGDWxwQWbvvEbu0XSibEbvYWtuDXSFqExsQWSR6Jb1eJY=v=YW/WtMQWSvUW0ReWbjU=SMeE0EbXtW0JxjYXtJe=Ys/J0pmXOpUXtRPXlW6=Su6XOWqXls6Wb1/Etj1Xtu6=OwDXl=UJYM/WS=1WSUY=YseEYMxESuPWbHvEb1A=YM/WlWPXSR/E0Mq=lM6=YMQ=bF0=bWDWxRD=bvvXSw6JxMx=SNUEOGeEOw0W0JQE0=YWxFeEtJD=tW0JSWQESGDWbEYES1QEx1/JxwDWYJ0J0R6J0JQEb51Jxsx=tuP=tM6WbM6Jb5vEO=1XONYWbuDExjU=OpYElNm=SGD=OJ6XOuQXlimWSpYWONmWxG/JlpUEOi1JSwqWORxJS5UXO5vJxWAJYNbWSpUWOWAJ0N1JS=bWYp1Jls6EY=UXlR/WxsPJSE1XSF/E0ibJYWQJS5bE0M/JbpvJSsQWbR6JbuxJxGDWljm=ORAE0uP=OwDJlWQXS=YESHvEYR/ElEYWls/WxvbWxEYWxEYWbE1XOvmWYJAEts0EYWqEb1/Wtjv=bFeJbJqWxWPE0uDESpY=SM6WtsPWO10WO=bXOjYJSJQWSsDXOMq=SpmWOvbW0JQEYWqJ0i1ExHmJxuA=lp1=OHmJlimEOsDWSiUJxpvEbNmES=YWbvbJb1AJbGQ=SjmEYEm=bvUEbWeEOMeXOF6WO=vJSimElNUWxFDWSjbWOWAXtuAWOsqES10Jluq=SGPEOFQXSvvEbu6ExNYXOF/E0pm=lMxExUUWbwxEOUmJxRQEOvbJ0WPJxsqJYsDWbJAWbw0EOJD=YMq=bpb=tsQXO1eWOE1XlR6Ex1/Ex=mJSseWx5YW0NYJSvUJYR/EtWx=tW/ExJ0=OwPEOse=OsQEbuxXOwe=bGDEOUmWb=m=bRAWxpYJ0pmWxJ0WSJxWbMQWbReWxWAWOs6XOsx=YN1JYJ6WxsAESG0WSNYWb1eWbsxJbwxXtN1WSW0EYJeWS=bXSsAJbsP=lWeXtuA=SM/=SFAWbsD=biYJxjv=b10EbWDWtj1XSuAWSWD=YE1XSHUESNbWSNv=lEmWOsxXtJDEOJAJSp1ExNUJbRxWljvJx1qEbueEbHv=SpbJYimJbjvXluD=O=bWYEv=tNbWlM0=SsPXtJDEbsD=tJx=SJ/ESFDESFQEbEYEx1QESR0=tEUJlpvW0s/EYWQEtW/EbR0=bFqWbse=Sp1WOGDWYJPJxwD=OuxJbNbXSUYJSpvWtuAJYW0Et=UWOJeEORP=lpbEtNUWbE1=bs0ExEvWxUbJSs6EtRqEOJ6WbW0XOUYJSjUEYu0EtWQEbMPWxGeWbFq=SseWOu/XOw6XSNUJxWPWbNv=OGQWbJPXSNm=YpYJlWDESwD=OimXtWqEYMeXlEYElW0Xtu/=OJQEtjUXtMAEx1/JxN1W0pbEYu0Et=YJSG6WSivEOReXOueJxF/XtueJYu/=YJAXSJe=bw/WO=1WS51XSMxWxMqWbMx=bseJxi1EbuqXSMqEYseWxReXlpbElE1=lM/EtMA=OU1ExjbWOG6JSsqJS=mXOpYEbWPWSi1ESFA=tWxXOGqJxH1Eb5vJSwAWSNmEtpvWbN1XlWQWxRPJYNbEbMD=l=b=OJD=bweWSuQJSHbWSpv=bNbJljbXO51XOJDEbuAJlMqEbsPESvmW0R/ExUYXSR0EONvEbpYWO=m=SjvEY=1=SNm=bWxE0j1WlsqEOpYXljY=YRPJlW/=OJDWxFQJSvUXtNbWO5vES5Y=SiUXO1qEb1/XtjmJSGDWSEYEtuQJYRDJSJ6XlW/E0jUXS5bExMA=SGq=YRqWSw0EOsx=SFQ=SM0JlWDXOs0Et=m=Opv=YpmEYWD=Yi1WbJ0JYM/WOJqEbFqJbGD=SF/XluDXO1QJx5vXSvUXSMqWx51Wbwq=OiUJxs0WOimXO=U=OUvExJA=OGQ=SuAWYuAWOiYJbpbWlEYWSu6Xl=1JbWeEORPEOs6EORxEbNYW0ueJSJqXOjvWSRQ=lJ0JbHU=SMDXOG/WbGAElRxXO=bJSR6WYM0EYpYW0sDJYp1XOGDEO=1WbEb=YW6=lW6J0E1=tEYXS5v=YWPEbW0=tMeJYim=lpUEOJ0EbMD=b1AE0j1EOweESJqWlRx=YjvJSsxXS=mWtNbXSpY=YR6WY=1JxvvWbuPESW0WbFDWlJDEbG6ElMx=YMq=SMPWxEYWbUmWbNYW0seJSu0=timWtR/JbivXSjm=YMQJlR/JbvmJSM/=SuDESMPXtRQXSj1WxwqWxWPElNvWOM/WxsqWSJ/WYE1=OU1JlimJbG/=SNUXlibElWD=l=YJYW/E0p1XOM0=SHUESi1EYpmWSWeWxJAJ0u0XSsDWSMqXSJQJbsq=OFDXSvvXlNUWSJ6WbEbEOJq=OuAWlpmESHv=bue=bWDEbJx=lpbXlRqJxUY=lWQJbjmJlRPWbimWSNYXSsqJlRDWtu/EbEbWxJDE0pmEO=bWSFxXO=mJSUYJlu6Wlsq=bNYElR0Xtpv=YJ0WlW/=YsA=tu6JSN1W0JqJxseWtJDEtu/JlR0EYuxJYWeWbpUJYRq=Sim=tWDEYWQXONm=bWeJYiUEbuqWls6XOMQJxRQWO51=Osx=Oiv=YRqJYs0WYuxEl=1Wlib=O1AWS51=ti1WSJ6=SvUWx5bW0R/ExEUEx51JlsxJ0uPEOGD=OJ/=OHbJbHUJx1qEOW0WO1qEOsP=SsPJbpUJ0ivE0pbXSjbWb1/XOWPJS5vWx1DWOuPXtJeWxGxXtWDEYEU=tE1WxwAWYRDJYimWbwPW0EvWYM0=YR6XO1QJbpmWOH1=OFe=YsQES1x=lEvXl=vEl=YJSNvWb=UWbuD=Y=1WlM0WYu6=O1eJxMq=lEmJYMAXOReWYs/Wb5m=bJ/WOu/ESsPJbEvXSR/JSiYESG/XS=mE0=U=S1/XlRDXO10JSW6=tJA=Yjb=lpYElpv=Yu6JxHvWbMeJbjU=lM0EOM6JxwQXSs6WxF6WOs/=b5bJSuPExEmES=vWtMeXORAJYpYXSNUJxFAW0=Y=luD=SG/=luQ=OUvXSs/JS=YWO5bJxpUXOR/JbW/ESFAE0MeJxNY=SG0=OM/WluqXtJDWb=vExW0XtivWSUvWxNvXOv1XSsDE0N1XtJ6J0EbWtRqJxpv=bGQXSFQXlMeJ0E1WORPExs0WYMx=SwQ=OiUWtWxXSG6WOW0=OUb=OwAXSM/WbjbJ0MeWxWx=SJDXOpYWlW0JSRAJ0MP=SMeJbw0WYpmJxJAWl=YWO1x=b=UWljYWtWDWlMDE0sq=YJqWx10XOMQEYiUXlNmXSJQWx51=O1eESEv=bweE0sA=SEvJYRDJxWA=Ss0Eti1WOM6XOHUJlivEOFeJb1/=tuqEtWeEbH1WSvvJxR6XtEmWbJQExsPW0pUJxR0WbuPJ0i1=bUbJlimXS=UEOWP=O5bEtuq=OvUWOGPJSN1Jx5vESJDWlRQExU1WOM/=tWqXOwQ=YsAWbGe=tJQ=SWP=ljvExuxE0s0Xls6Ebs0XS5b=SReJYW6EO10ESRDE0Nm=bRq=Ys0EbF0E0JeESuqEOJ/Eb16WSGeWOUmElNvJbwqJSwe=ljvEOJPJSNmXtMQXSsAWSsxW0RqJb1DXOMPEOuDXls/=l=UJbMA=tpmJxUUWSM0EO5vJbJQESW/=SMeWSGeXl=m=bUvJxvUWlR/EtRxWlN1Elp1WlsAWYRPJlEb=OwQ=SRxESjYWbGQWOHYWbibXluAWxWqJbWAXSG0E0imESvUXtReWxGPExW/JYNUEYRxJSGqJS1QXlWPEbHUJS1AE0RAEOvYEbRx=OEm=Ss0=tW/JSpYWb1eEOpUWlRQJYR0=YWPJxWeES1AWt=bEb51WSwD=b=UElsQJlE1JYiv=SGAESUmXtJ0WYWAJSMDEtNUEOJqESw6J0im=OG0JlR/=tMx=tEYEtJeJSWP=lMeJbvmJxM0WOpvExJ/WxG0J0=UXluxJ0WPXOWxE0MQEOsQEOJDJSvUESw6WtW0XSsqXtsxWb51JlReJYjUEOWqWYpY=b1A=tJeEb=mEYM6=YWeXtEbXlu/=ljvJY=U=lWAJxE1WOu0WSG6JlM/EbFe=SpmEbRx=YRPEOJ6JYsqWtEUXOJQ=bGeWxHYWb1x=SM0WbWDW0s0WtJxJYJ/XtjvXtMx=bG6WtWDEONvJSivXO1qJYR6ExwPWSpb=lEYXSJ6ExsDE0u/EOE1EOHmWOu0=tNmWxReXSsQJlNvXOH1EbwQWlNYWb1/=tuAW0ivEluxXlpY=tEbWOjU=OW6JlibEtW0ExjvWxEU=OsPEx5YESEUESEvJliUJYJqEOjm=ts6XSvbXlsDWSvY=OEbXSWAJYpmWbNmEYMqE0Me=SJeJxMA=SwqXS5YWO1QWOHYEtE1JbweJSuD=YuQJ0uq=lEUJbuQWYiYWtu/WONmElNvJxu0=lE1JljbWSNmJxu/=SEmElM6JS=mEtNvWOF6Wl=vJ0WeEYJx=YJ0=YRAExJA=liYWS5bEx1/XON1ESWqEb5mEb5mJlMQWbEUEbMxWbjbXOH1EbRDESi1Exp1Wb=mJ0JeJxw/WYj1JSsAJxjbXlNUWxM6E0uPJlM/=SGD=lsAJS1A=OJ6=liUJxwAJS10WxsxJSGDXSNvWON1J0p1ElJ0EOuqWbu0=YsA=O5YEluA=OMAWOsqEOpYJx=YXSuPExjmJYs/EbUYWbw/=SWQ=Ow/JYNUJljYEYN1XS=1XSU1JxFQ=SsQEO1PJx1qExsq=bWPEbH1=OibEl=UJxGA=SsxEbMQEOJxE0jm=SJPExuPEtRDXOG/J0uq=OUU=SsAJbvbWxEbJb1PJl=mJSRxJb=U=Ss0Wxs6XOWqESu0XS1qJbGA=YuAXOHbWOs6JlJ/ElimExw0=OWQ=S1PWtsDWSHUWxHvEOuPEtJPWYsDWbGQJSsPEbvbESNY=YuA=SuPWbjbWORe=SRQWbJeEO1DWSG6WlseWSMqW0JDJlpYEYMqE0u0WbJDWx1AWOj1JSReJ0sDEYs0ExUYEtN1=tjYWbweXOsPJlW6WlRAJxueJlJPWb=1=bHvWb10ESFD=lM6=O=mEYEb=l=1JSUvExJAXO1QJSs0WOJQWSH1XlW0JbRQWlNmE0EYWOJxXtR/XOR0=b5mXlNmEOMeJSFDJlEbWtseEOiUExw0Jb51XOW6=bpvXOsA=bw0Eli1E0Nb=YJ0ExpUXS51XS1qWt=YJYN1ElimWO1eJlJAJx1xWx1PJx10ElpvEbReJbj1=lMD=Yj1ESwAWOvvJxHUEb1qEx=m=tuqJ0RxEbuDWxWxWO=1JbwAEb5vXO16=SJAJxsDW0s/W0E1JSWDEYWAEbwq=lEmEOjbWOR0XSR0JSw0WOsAJ0J0EOWxWlpUJbjbWSEYWSwqEYNUEbJ0=SpvXOGPWtMqExu/XlW0WOwx=Sp1WxReJbs6WxJx=OwDWtpvElM/=OGDXSs0=bwxXlJQExj1ElM6J0MD=lRxWb1QEON1XSpUEYjbElNmWbivXlMAJYJP=timWlR/WYivEtivWxR0W0W/WbWA=bHUJSNmWbGx=SFeJlMPWOwQXSHUWYMAWSwP=SW0WtMxES=vEbHYWxiUESJx=YuqWlse=O=YWxue=tE1=tEYXOH1ExWDW0JPJSM/=tJQWO5UJxwPEYJ0EY=vEbu6=bwPWSuQWlNvEOsPXts6JSseEO5YJxW0JSwAWt=1EOMeWxp1J0MPJxvUW0ibESEYJx=YWtW6E0MeEbuPWluDW0j1EtjmExi1EtpUJbRQEYjYWOuxEY=1ElsQWxj1EOuDJ0imJYEYWx1qW0j1WtWxE0MDEtsx=SvmE0JqXOvmJSM0=YimWSHv=ts/JxuDJbE1XlNvWbuDJSW0EOWq=bv1W0sPEtpbWtWqEYWPEbw6WOFQJls6JxR0WlWDW0JP=bsPW0NbElW/ESwDEb10ESueESEb=Ow6=SuxEb1xWx5vWbE1XtE1WONbEO=1WYMxJlJDJxNbEbi1ExWeJbseExJ/XOpbWOMPEb1q=Ov1EbEmE0E1XOwqJlMPJ0R6JbGQXSWxJbEbWtW0XtNbJl=UEOFeXljYEbsx=S5bWYEbESvvWOEUXOHUWOpmWlM6Eb1eJYueWYJeJbHbES10XSjvWtM/XOMAWlsqXSi1=SvYWOs6WlsDWtueExU1JSRPWxWxWxuDWSGDXSwPJbJQ=Ss6EOG6JbpYJSHbWxuPWti1ESweWbM6XtMxJYM/WbWDEOibJb1P=bvbJYNbJxW0WxW/JxvYXS16WxFPEYEUEtpvExEbWbU1Wlj1WlW0JxJeJbM0W0JqE0sPWbHv=YpUJS1qJYi1=SGQJSsQWbUU=SUY=SJQ=lp1EOivWlNvJYNmJxF0J0=YXOs0WbW/EYJAExp1WSGx=tJPWxsAW0M/=tJ/ESNbXlR0EOJq=tpY=bvmWxsAWl=YXOHYWtRAES5UJbweES1eXSwPJ0Jq=bv1JSFeXOF/ExGQ=tEYWSw0EYseEx=1JxW0E0NvXlJ6W0sA=SuxWbW/XSMqEOHmEbF6WlpvWbNYW0M0=SEUWbM0JbuDEtueE0RxJb=YExUUXtRxWOG/EOpmWxFAWxJ6JbUUESjv=bjv=OG/WS=1WYsQWlEYWYWx=YRDEbs0WbHm=YuqWOMxWbW6EOR/JYWeESEYWYN1WlsxJbNvXSNUWYu/WYW6JSNmJ0=mJlsDJbE1XlWQ=bwAWt=1ElMPXSMDExHbXtJ/JxHYJSN1ESJeEYRx=SWDEbM/JxW0ESRe=SHmXSFDJSsP=SuPWYNvWSRAEO5YWxWA=YNv=SvbWbM/J0JAJxJxJbEY=bNvXtNbExEbXtuqEt=mXlRxEYJDWSW/EYEmXlNU=SJ/WSJxXtpm=YEvJS1x=bpYWlpYEbGQWO1x=OiYEOw6ESi1W0ueWS5vWts/ExUUWbjYEbUvJbsPXtMQJlWAJbHUWbMA=YJqJb1DWxU1JxMAExW/=bFAElN1EtjmXOJ6WxRAWxsQ=OwQ=S5bESGQXtJxJbJ0J0pvWtW6ES51Wbw6Xlj1JxUUJSEUWYs/EOuAJbu6EbvYEti1=tJ/ElJAJbFP=OGxWSuP=tJQJS=UElsq=bRxWOEUWSGQ=S1AJbMAXtivJbGAWxiYJxu0WSpb=lR0XOFqXlJqEx1qESwPESH1W0=1JYM/WOiUESWeESweJYJ6Jlu/Wx1QE0WPElMDEOUYXtMAWYJQEbE1=O=Y=b5YEOM/=YsPE0Wx=lNm=lJPEtR6=YMPEO5mWOimEOReWb1AJxwPWtJqJSJ6XOGPJYMAExJeXtpvWO5b=lMeXON1XlJ/EOHUXSMDEbvbXSiUXtRx=O16XlsD=OweEOpmWxR6WtsP=YpvW0RxExvU=t=v=OwxJbF0JY=YXSRqExRxJx=mXt=vEtWeWbsAJxNmJl=vWSsAEYWxWbF0XO=UJxG6WSv1Ex1xJxWqJYM6ExHU=buqEb=Y=b1AESR6XSF0XluAJlWAJS5UWbpUWtWqWSuPXOF0XtNvWxwe=OG0EOEUJxFDWSu/JYMqEl=bESMQESs0XSN1=bueXtimWtJQEtR0JxHUWYE1EOu/=tJeEOJD=SJ6JSHvJbpYExFQ=bueWO=mJbpvWOR6EOM0ESWQEYNb=tuDXOHm=bGQJ0JQJ0=U=t=1Ex=UWSRA=OMq=OMAJYRPXtu6JxG0=lu6Ets6XO1P=ORQESw/WlpmXOHUJ0uDE0j1ESjmXlWeWluDJxEv=lWeWONUJlu0XljYExRDESNY=tMqE0s0JxUvWts0ExR0WlEY=bG0EtR6XSwQJl=YWSRQJbGeJl=YWSi1EtMx=SibEbueJYsxEYJQESuP=bGeEtJ/=bMAJSMxXli1EluAEYJxJbGxWts6Xtj1W0NvWtuA=bimJls0Jxu6XtsxWxpUWOM/XOJPWSsx=OFAWYWAJ0i1=bsAXl=v=OM6=bUmJYjY=OsDJlW6=SRqJbvUXOseEbNmWSN1W0MeJbWAWxMqJYE1J0u0ElJ6E0pmJxMxJxw6JxGDWSJAWOwAXOs0XljvExU1JlpUXlWDEYp1=OG6ExRqWxw0J0RQE0=1XSUbE0=v=YRq=SFq=Ou0E0MQXtNYWOsxEtu/=YR/EOuxEYEbExEbXluQWSF6Wlp1WSsqEONb=tEbWxwAXlW6E0Wx=Ysq=li1W0W/WOjUJxpY=livWbEm=SJPExuD=ON1XSwQWSMqEbvvWORQJYi1WlpvEYE1=lWqXtuD=OHUWbNYJSseEOEYWYWAJbWqWls/WO51JSJP=O1xEYNYEOsDJ0pUElux=OvYJbsDWluqWSM6WSG/EY=UJSRxXOuqExEmWxFQ=SG6=lRQXOs/WSJ0=lR/JbpUJlRDWljY=O10WSEm=bHbJxRQ=b1DEtRxEbGP=SFe=SJ/=YRqWYuqWORAXSH1W0imWYMeWbR0EtMD=tN1XSNUExp1JxUbEbJqEOs/=YR6=SsqW0WxWbWeXSEUEbse=OUbWlJQJSwqExHbEYN1XOjUWbJxJ0=m=SFP=t=UXOwxW0NUWbGAXlRQWbj1WbpvXtuPJxGDXlRqWYNmJYpbJbuxWS1PES1A=YMAExNb=tN1EO=UJSMeWxGDEbFAEYsAEO1xJSwQWbs/=OGQESHmJxJ6JxF6JbW0=b5YWxivWx10JxpYWONv=YWxXS5vElsPXOsD=OJQ=lsAJbvUEOivExFA=lJq=OsPEORP=bGQWOw0JxsA=YuqJSMqJxNbEOM0JxEmWl=YJSuPEtW0WSFPWlMDWluPJYivEOEbEOF6JYWeXtjUJbFPE0seWOW/WOJqJx=UJSsPJlsx=SM0JxRDJ0=1XSMqW0MxESjvEbMAXtu/XOMxElR0Xt=1WOsAJxNvXOuxW0sAWSF0WYMqESReWxibElWDWbs0WYWeWbvbEb1/=lNYEOWxEls/XOJ6XOs/JYE1ESiUEOGq=bw0JxHUXOJeWxGxXO5YJlN1=SWqXlEU=S1eJYJAWxG0XtJDWbpbWxG0=YuP=OWe=timW0uPXO=1=b1PWxEYJYW/WxvYW0uDXSpUXOHbJSvmWYWPJbu6EYJ0WlJ0Eb=Y=OMQ=SiYJSEUESFqE0uAEOvb=OM/E0NUWSWqWlNYJbivWluxWtWQJxuPWSMxWtu6EOJe=lWPJlJDJSseXOReXSs6XOvU=OWq=O1QJbGx=YiYWb=UEYpmXSEvXOw6EO1eWOjv=biYJxW0Exwq=SJDJxJ0XOFQJSE1JbH1WOMAJlsqEb=UWSue=Ys/WbuDEbHb=SJ/J0R0WbUYWx=YExwD=SJQJYpmWlNbW0s/EOGAXOWe=SuP=bMqXtuqWSsQJbwA=SWqEtEbXSiY=bjYEOWeEb1/W0EY=OGD=bJAES=UWxG0Xlu6=SNb=Ovv=OsDJSFeJxFDES1QWtNYEl=vJSMDWts/JlEUEOpmWlE1XOFA=SvvJbF6ElMPEtjmWxFeJ0JeEYiY=SvYW0=vW0uQWtuDExJPJbF6=YN1=YjU=lR/ExEmJYM6EOJ0ExpvEtRQExWP=OsAExuqJYMPJliY=bu0WtW0=tEmExFxWxHbXSMqEb=mEYJAEbRP=tJ6ExHb=SpvWOimWYRxWYR/EOJQ=YuxEYWxWbueWYpmWSWe=SR6WSF0EbwAWxGDWtsxJxJ6Jl=UXOs0=bvvExM/WtivXSJAXOJqWbGQXtsxJ0E1EOUvWSRD=tu6WxGq=lMP=bHU=YJ0=OUYEOUvEON1WluDWSpvWbpbExJ/=OHUEOWPExFxWbRDEOF0JxwxEbRqEtJxE0R/JbpU=SweESwq=b5Y=YMAWxp1XOuDWbUY=YRA=YEY=YuQ=OM0JS51EtWq=luAXlEvJSF6JYJDJ0pmWxWAJbs6=bR0ESRDWO5UJxjv=bivEbEUXSsDXSHYElJeESJ/=Ys6XORD=bpmJYJPJYueJbFQXOR0EbwDWxEvWbvYJxHbEb51Etj1WxRAJx1/JSJP=lWqJS=UWx1DWO1e=tueJx=1=OweWSvmEbReWYW0XtWPWSjUJbNvESUbJSpbEOGe=bsQXOwA=lsQ=lsx=bwqJSG0J0J0=lu0=OpvEbR6WxRA=SF6EOjUJxW6E0s0Jx1Q=lMA=tEmWtJ0Wb5mXOJQJ0sPW0W0XtJAWSRQEYRe=ts/WbEYXl=1WOu/WYsAESH1=lW0EbweJSFQ=YNUWtR/XljbJlM/ESs/E0R0EOw6=YJ/XlsAE0MeJYWeElNmE0NUE0seE0ibJYu0=SRDWSuDElWxEYsx=lRxWtiUWYE1=bRD=O1DESRAWbsD=SHb=tW/W0NmWlp1W0sPJbjvXOux=OHUWtjUJbsxJxvYESsAJxvbElMxW0uAEtW6ExGqXtMAESiUXSG/WO5U=tJeJYueExNbXSFqEtMPESUU=Os/JSWPEtR0WtMQEb5UW0sPXOUbExsAEYsx=YuQJlMD=SRDESRPJSUv=b=mEbsDXSRAXO=UWOHmWOU1WlRxESEYJ0ivElMxJxse=OFxWOR/J0sxWSJxESw/E0u6WlRqJSwPWYMeJbwQEbj1=Y=mEl=1=tuDXSw/WOjUWbFPExux=S1qEb1x=lib=SFQWbw/WORQESM6=Ov1XSwDEb16E0JxJbvbJY=YXSjY=SueJxWD=t=m=SNvE0JxEYNU=bvmXOueWS5mWSp1WOsDWtWxJ0p1EbJ0Xlu0ESWAJbuxWb5YXlN1WOsQJSvYEbM6=bMqESp1XO=YEliYWYEY=bG/ElEUJlMeWbJQEbRAXS10JbsAWtRAEx1eEbWeWSuQESGeWxsDWx10E0JAExJ6EbUYEOJAXSJ0W0JPESwPWlsDXtMAJSR0WSMPJSw/JYuAXtWAExGQWOsQXtW/=bHUXtWQJ0E1EbseXlJD=lpY=lW6Jxi1XlWqJbUm=bNYJbRPEtNm=Sw6ElMx=OGqEbGQ=lRxExwAWxpmES5YEYjUEOsDJSFAXOMe=SjU=SUYWbjv=OWx=lWQJlMPWSs0XS=YWxRDExMP=OMxWO5Y=tEUE0M/JbvUWxu6Wxp1XtMQWliUXS5vEbM6JbW6=biU=OG6ESsQXSHmJ0sDXOWPWx5mElWeWljYWxJe=SvbWYW6WYNvJSGqEOMDEYi1XlEvXOpbWYRQ=YNbJ0sA=bU1XtJ0ES5UWts/JxpUJlJ0EYs0ExvvWYR0WtMAXS5v=OReWYuQJbuAEb16Exs/JbsPJlpmXOMQWlWPJ0RPJlWqXS5b=tuDJbM0=bWDJSF/Xtsx=t=bXSwAEbUbWS=bJ0i1XSuqJxsDXSWDWtMPESG6Wbs0XtjUXOseJx5mJlJ0XlRqXSMDWSFPEtR0EYRPXlib=SH1JluqESvbElJ6=OvY=Ojb=SW/XO10EYibWORx=SwD=OuAWSJ0JbGPWliY=bvvElW/WxG6JbGPElu6Jls0JlJ/E0MAEOuQJSj1=tJDESRQXSW6WxjbE0WqJYsAXlW/WSvUE0WDEYReWbsPWbEbJbivJlpYWSW6=bsxXtpmXtuQWOFQEYNY=YueWOpb=OwqWO5mWbuAWONv=b5vEONvWOuqEtRx=Os/JbFeW0WD=SvbWlReEOs6WlW0JbWqWONYJY=1WOsQ=buqW0i1WSpYWx51W0imJbJ6J0jYXlNvWOE1W0jm=Ss/Ex1xWbN1WbFQWOpv=bNvXSG0EOjU=OFA=YsA=O1AJYuxWSjYW0s6XSMeEYJQ=bGxEOibWbimJxWPWbRxXlWDWxUb=OFDWtp1EOGQJbU1EOpmElR0XSH1=ONY=O=YEOMPJlNbElR/XtEY=OsPWO=bJxuxJb1eEOsqWlJeJSMQEtMPWO=YESFAEbvmWxpYWxsAWSG/=YpbJSMQEljmWlim=liYWb5v=Suq=O=1Wx=vXluQWlJx=tRPJSR0JYsqXOU1Xt=mWxRqXtse=b1PES=m=lReJlJ0WbiU=tR/E0u6J0Jq=lWPE0=bE0MD=Y=vJxpbE0uq=tEbJ0sqWOWeWSNmXS5UJbUUWO1qJbUbJ0=YXO=bESGQJYMxEYJxXOuqWYJP=tWqWx5UWOWx=OEv=OM/=lpvXSFQJls0JxMqJxsQWOFDWbRxJSR6J0sQJ0JAESRQ=tueWYJqXSM6XO51=SRDWtR0Wb51EtuqEYj1=bJeESEmEO1AXONb=SMQXOGDWlWPJlE1Jl=UJbJQXSFA=ONYEYWPWljvEYu/W0iYExFQExFeWtR/XtsqESR0JbFAJ0p1=YMq=YMxXSE1EOvvJxH1=SHYW0EYWbReJbs6WOjYWbJQJ0pmJSWAXSGPWtW/WSM0JlE1Xt=vWlivWS1QW0NvEOMD=tRe=bR/=tM6EO1qXtsPWYs6WxGq=tuqESuAWbWD=b5Y=Yu0=YRDJbpY=lNY=lNbJSNUJlW0W0pmESFxXlJqW0EbXS5mEOwqXSWxESs/=Swq=YimWbMxWxvUJxHbJbGP=lW6XSGxWtMQ=bRxJSpvEx1/=OWxWxFPJSJPWxWAWSRAEbGPJYpmWYuDJbE1EOR0JluQXtEUW0JxElRx=OUmXORPJxWq=YpU=SpbWSJ/=tJP=SMDWx10XtpU=b=1XOEvXO1PWxJ0JbEY=YN1JxFAWtJQEtMqEl=Y=SpU=lsPXONYJb5m=OJDJSj1W0MD=OGQEx5vE0M/=tW0JSvU=bjvXSvUJ0uxEOWqExj1EtEmElpmJxNv=luxXS16JxG6XSWqExRqJxG6EON1WxG6Ex51EYNYEbMAESWxWb51W0sqXtW/=ONU=bjbJxReJ0pbEOvbWOUYJSHmJlu/ExFAXOReESF0WbR6EbH1ESp1EbimESibXSuPWbjYXtWxWxFqJlNUWlpUEOiYJSwx=luQ=tEbEOuQXSuD=OjmJlJ6XOJ6=YsxWlimW0sqJYueWxNbJ0JxWbJAJYNbXOweEbGP=OsxWbJAEbG0W0Me=YW0=YWQWSjUJSGeJbNYJxRPXSJqEOHUJxuDWxMPElNYJbFA=O5bExRDJYsQXOHUXO1/Elue=bEvWbNmEYuqXSFAJbp1EOvb=YEvJxM6JxsQW0WqEx1D=bF/EtJxJxEvEYNbE0JQE0=UWOGAWtMeXtsPJbEmWYEbWx=1=tJQJx10=bJ0EOMx=tJxWxR0EtJQJl=UW0E1WS5UJSRD=S1AWbF0=SNvWx5UXSs6=OJxJxNvJSibJxv1XOJQE0JQXlNY=tiYWbG0XOjYWbUU=YJ6Jb5vWxMDJSWx=lW0JbMqWljUXtibEbG6JlM6WtsAXlJA=OiYJxpU=b5bWOU1JlNmJbv1WtJPExwPXSpb=ONYEtMeJ0ux=O1AWSseXO=1EbF0=YM/WlM/=SWQJ0i1XtJQXtNbEtjmJ0Nv=bWD=tEYWbR0EYjvWbFQEO=bESJq=Su/WxEvW0JxE0ibWSHbE0WDWSu/=O1AWYRxW0MQJSJ0WO1xJSuPWtEbWbWD=ONvEtRx=bR0ExRQWtN1XOvm=OHYEOM0WbimWORQJSwqEYsA=bJPEOJQ=l=1WxNb=OG6WOvmWYNbEOse=ls/EOweElJxExseJS5UEluDJSF/=SjmW0Jq=OwqESuA=SR0EOR0=bNUJSuq=t=v=tNYEbuqJlM0WbHvW0JqJSUvESJPXlu0W0RDEx1PEbw/WxjUWbGQESsQXtimJbsAXSR0JbwAJxRDJSp1E0=1JxiYJxGD=bsDWSi1EtW0ExMDWti1WbwDWYNY=YN1XOHb=bsDJbNmXSMqESsPESRAWlsP=OvmJYseJb=mWOGAElpvWYJA=Sj1WtJDEYJQJb5m=OivWOM/EOuxJlEUElp1XOHvExMQJxRDE0=mWOJA=SWQWt=U=bW/JbRPXlsPJlWeEbseEts/JbsDJxNYWOGD=bivXOJAE0JeESM/=SNYXOWQXtWQXlu6=O16WOEm=OvvJlRD=SivJ0JeXSpUElRPWOHYWb51=SF6EtRQ=OuQJlWAWljY=ONUWSw6JSuqXS1A=tNbJ0JAJxwQJ0=b=S16EYjmXS=mJYWDJ0JQ=SMeWSJDElNbESjbWYuDWOMqWbGq=OwxW0R/=tJPWSs6WYpv=b5vEOHYESNUJbFqJSW0EO=mWlM6Wts/EtW0=bFxJYNvXORPXlseWbJ6WxN1JxWqXOJx=bUmWls0WY=UEOHv=t=YXSM0WxG/=OjvEb=YWSF6EYs6Ex=Y=lE1JSG/EluQWOjbJbFqWOuQJxu6JbwxXlWxWb5YXSWxWl=YESHU=SWeESs/=bRqXlRQWO=vJSNvEx1x=YJQWYJPE0j1Wxw6=bR0=OFPWb=m=OsA=bGeXlNmWbs/XSwDEbR0=tsqWSRPElsq=SRPXtsD=OF6JbUmJSRQ=b10WtpbXSMPEbueES=m=bibWxF6JxwxWOwAXOJDWONUJ0JDWxJ/JYM6JSGQES1qJSsqWOwx=SJxWxpYXO5UJS5UEYEbEtpvXOjYWlR0Wljb=SUY=S1P=Oi1WSGDXlue=OEY=tJqJlsxWlJ6XSFe=SvUESWQEOu0WxiUES1e=OE1WbjUWlJAXlJPWSwqJSM/=ljmXlNbEYJ6Wx=1XSwPWtJ0=SuqWl=vXS=vEbivXS10=OMP=bjmEt=mJ0JqXOGD=SjbJbiYJlMAXtJ/W0uqEtJAExHbJSwPWxReEbWAXOsQEYMPXOueWOJQEx1PJ0E1=bUYWSw/=bEbE0NmJSuQWxWQWSJPJYJAE0EbWS1A=lsPJSG6E0WQWbuQEOMPExFxWSJQEbJx=SJ6=YNYJYMAEtivEYsQJYEmJbGeJ0iUJSR6EbUUWtMeWlNbJlsQEOW0ElEUXOjvEtuPJlRQW0ReWlMQWOMQE0sDWOpmJYR0ExsQExHv=bwe=b1PEbu0=lEbWbibExiYJYjUEYMxEtRQWbR6=SM/JxGxWtWqXOM6J0jYXSGqJSw0=OuP=b1/ESGqXt=vEtuPEbFQJYRQ=bEYJS5mJbGPESu/=tpUESGAJbFDWtjm=ONYExGP=lJ6=YpYWOJxJ0JxXtRQJS=UJSR6JlpbWSFq=OjvJYjU=YR0EluQEbs6XSG/=S=mJlJA=OuAJbJ/EOW6XtEYWxJ/ExMqXts/EOGDWSGx=lMeEbwD=YN1ExRQ=bRQEb1P=lse=OsqESwP=YJ/EOuxE0MQWOuqXOW6EOEUXlRP=SweXOEUWlR0XljvEtM6WxEbWSW0ElW6JlpYXlW0WxRxXSRAJxG/J0sPElu6Xts6Wt=bEbNY=b5bEtueElsQ=lsqES5YJxi1=OEY=ONmXOR6EtJxWSNvWbJeWli1JbWqEOim=b1DXO=YXljvWOs6EO1eW0u6WbsAWSuQElM/WbwDJbG6JxR0WbsDXO=1E0NYWSGxExFQESNmESsqXS51EYu0ExM/JbpbWSEm=lRxWOwDWtjvWSGAESGqWxsQ=S16JbWxJYu/Exi1EOwqWljvESv1XSGeEljU=tWeWSiv=YW0WljvWSweXOw6=bv1Wx1/JxpbXSJAE0WxWY=YESN1EOWeWxi1ESwD=SWe=SGq=bW6ExjUJYpbEtRPW0u/XSG6JlM0WYMD=bNU=bRqJb1DEOweEYM6XSvvWYiUXOweEYJxJlMxWOH1EO=YJ0=mJbUYXtMxJ0sAWSuxWxRQXlMPWtEvEtiUXO5m=bEUWbMxWSRx=ljYJlW6XlMxWlpU=OpYExRxE0u0=tj1=tMq=OGq=S=vEOHb=OEv=lJDEOw0ElJDJlMD=SWq=OwAWxs6WbMAExEvEOWP=tEb=SWAXts0W0JxEtu/WSvbElEbWtpmXSsxWSwqXOibXOsAEbEbWtuqESEvXSjmJx5YWYWQWS1QWSRAJlM0XliY=tJ0JxwDE0W6EYR/ESvbWxM/WSWDXtEbWtpbJxN1XSReWlM6WxEmXtjbWlsqWOW0EOG/EljbWxuAESwAEtpYJSuqWbRPEOWQWxR0EYpYJx10=YWe=lsPEOGeJ0JQ=tuxJSwPWSM0WbjUXOWqJbvm=SsPWxRAXSF0EOHUXSJxEtuxEYEYWOsPJbU1EYs0JbF/EtJeWOW6=tNYE0uDExR6W0jUJbsxJ0W0EYW/=tWAWYpYEYR0XSGPEbRxWSNYW0RD=SF/=YuA=YWeJbu/=OpUWtsxJS1DJlimE0JeEbjUWOFQJbJqESsQXlM0ESjb=S1/XtMDXSuqESReJlJ6WlWqEYNvWOuQXOFDEYuQWxjmXOUvEbw6XljmXOGq=YRDElsPWbJA=YNU=SR6Ebs/EbpvExGQ=SM/J0NU=bJPXSNUXS=mElRqXt=mXSWAESuQJxMqJbvvElN1EtjmXSRA=OMeXSWeJSGxJlWqJlWAWlW6JSFe=S=vEtRxXlR6=SueXluPJYEvESW0XONv=lRA=tWQE0sDXORAE0MxExRqJbRxJSuxEb=UJYNUWYs/E0MPElJeEbJx=lJDXOs6ElMD=lsAWxuP=b=bJYs/ExHUESNmWx1DE0WDWxWQElRqXSNmWt=U=bwQJxvYEbMqExjYWYimWbHmExRPWtjb=lsQ=lJPJSR0JlJeEOu6EYs0XOHUW0sqWO=mW0EvJxv1JSHvJlMAWb1eWlMx=O5bEYjUW0jbJl=vExwPE0j1JbFA=YEUXtuDWSJ0ExNYEbjYJxGPXtW/JbibEtRPEYMAXONbWxwqEOjbWbsq=OUbWtNvElE1=OvbEl=v=luPW0=vJSs6WYu/=lNUJbEmExEmEOwxEOi1J0i1WbuqEtuDWxUYXOiYEOFqXlsQXOFeEYi1JxH1=bsqESGqJbMD=tRQWlMDXSw/WOGxWbuDEluP=YJeE0W0=bEvElRqExG6JlJ6JSvYJb10JbpvJb16WbiYXtEbJ0WqWSUYJ0JQWlj1=lWD=YWDWlE1JSuQWxwAElN1XSuxE0=1JSRxWSMqWb5b=tuAXtNmWlEY=SMqXSMP=tM/ESRDExJQJxWQJ0u/JYNbEYR6XSF6XSRAExsQXtWe=OHvJYjU=tu/EOEUXS1xWtuPJxGQJbGeES5bElseXSM6XS1eWSUmJSM6JSWDE0RPWbW6=YJAWSJPExuDESMAExWP=Yp1WSGPJ0R/ES5vJbFDXSUvWSvYWbG0XtMQEOEmWYReJYJ0Jxib=tM/=O16JxJPEbHUWOW0=lRq=ts6ExWQEx1/ExHbXSJDWYR0=tNvJbs/JYRAWtjUExWeW0RDESpU=Yj1E0MAJbjmEYJeEYE1WOuxEb1xXOivXSjvWOM0=tRAJ0W0WSF0JxwPElMPEbjmJSU1=SReXON1JxvmWS16JxReJbUYJYJDWxwxEbGQEx5mEOMeWls0WYJPElRAExwqJxiUEY=1XS5bXS=m=lJxWlWPWSjYJbJeEtRPJ0MPESJPJxJDEbMAJx5vExJ6=tE1XlWQJbibESwqWbEbE0M/ESJ0=YpbXOwQXSUYEbMQEOFQXtp1=ls0XSEv=SUUJxJQWOM/JYWPWSEvJljmWYWQWOF/EORDExGDJbFP=ONbEOsxEbRA=YEYWOMA=OwAWYW/XtNbW0EU=OR/=lMx=SFAWSuAXtsQJ0pUW0NUElJxEOvmWlEUEbFQEYJDWSRQESGDW0JQESGeEYR/EYM/EtjbJbRQ=SvmXS5YWts0ES=1=YJPWS=mWbJxE0=YJls0W0sQEOjvXtM0ESN1JbuqJSHvESMqExFPE0JD=YNUWxs0Wb5mXSUvWljbWlsxWOjv=b=YEx5bJxJPJ0seWSMxJSMQ=lsAExUmJSG/Et=vWOF0EbE1ESJA=YJQElRQJSGPW0Nb=lN1WOsQJxwqEOF/EtpY=buA=tWxJbw0=OMAWOw6=SjUESRx=bRxEbHU=SRDJSMP=S=vJSpYESUUWlimEYNb=t=vElseJSJ6WtsAEx=1XtEUWxWeJbGQWOW/WxW0WOwPWxEbWOH1W0JqJSimJYRDES1DWOG/XOp1WOwP=YMxExEbXSiYEYM/EbJ6WbM/JxJQEx1qE0u6XSuDWlMeJl=mEbWqXlReE0s0ElW6JbHYWbJQWlJqEtsqEO5UXO=UJxsPJSMP=OuxES1AWbNYExJQJxibXtueEbw6WljYW0NmWlRDW0WxXSsDWxvbWYEmExu0E0pUJlRqES=v=li1Jx=v=SFqWSNmEOW0JSp1XtuDJ0JQE0u0J0JPES5U=SHYXOHbESvm=SG/XlJ0XO1QExJAJSjmXlRQ=S1D=ORQJbsqExG/JYimXlpUExNbXlE1Wlp1XOW0=tJ0WlsQ=OuqJxM/J0MeElJqWbv1=ljYJlsAJSFP=tMe=YJxEOpb=Su0JSibJYJ0=OsqEbFPXOJQWS1AExJPXls0WYi1WbuAESsDXtWqEximWxjbWSJDWlj1J0JPEtjbJSp1WOjvJ0pbJSFPJ0ivE0uPJbsxEOJPESjYEbUYEYp1WxvbWxpm=ONmWYpU=OJPWYWDJYMQEYWDExHmEtp1Xls0=tuxWtiU=bRQ=bw/JbseXO16=SJAWxGxEYEmXtM0W0sDWOv1E0NUESRxXtRxWSjvXOuPWxR6ESWQWt=UJSHYXOM0XSRe=S=vES=bWtMPES=YWbw/JbiUEOsPWxGxJSR6=YpmEtpvWxJ/WOJ0JSjUJlW/E0se=bF0WbNvEYJx=Ss6ESweWbWDExj1JbueWtsx=bs/=SGxEbueJbGQWxGD=SWx=lNvEO1PW0=UWxsxWOpUEYJPJSvYJ0sDEbM6=SjmWb=m=bHU=lsP=O10JbGeXtWe=lR6XO1QJx1/Jxu0JS1/Jx1DESse=tsQJS1AXSRqWOR/XOF6WbGeXSvbXSJPJxHmESux=SW/WOR6ESRA=SsxEbFxXls6ESiUWx1xXONmEOsqEbReWSWeXSu/JYMAESJx=YRDElu/WYi1XO1qE0WqWb10=YEvEl=YJ0EUWSGQXlJxWxjvW0NbEYEvExu/Jlpb=b16ESFAW0sAJls6ESF0JS5vWbNUExuPEYJxXSM6JxW6=SE1Exv1Ex5bJSuA=bG6=tNU=lW/WYM/W0p1ESsq=S51XOH1XlimWYWQJ0MqWtuDWx=UE0EvJxRQEOGAEbWqJlMAXO10EtpYJlJDWbG6=t=YXOMQ=YpbXOvYESJDESFqXOW6=S=1EOvmWYW6WSNbWxReESibEYJQWbwxExpvWSwQJ0seXSGeEOUYXl=bWYimESHbJxWQWORxESFQWOi1EOp1Jb5vJls6=tW/ESp1ExUYEYMqJSGxWxJeJSUUW0JqESFAExW0WtJAWY=vWYjbWSFQEOM/EOWQWx1AWxU1Wb=vWO1eXlibWOGeWOEYWt=mEtEvJYsqExvb=tsA=bF0JxiUEbEvJSs6ElJqESw0Ebi1J0WQJlW0EONmXS=mJx1qWSsqWYuAEbReXO=1JSR/JS1eExseWx10=OFDEtuA=bJDJbNY=OwDEYJ0JbW0WtjvJS=v=OWDEbRxJ0JAJxuqXOWQXtuAWSGDEtp1Xlu0EbiYWYEUJlJ6XSGxWx1AJYEvXtR/WxRP=tR6WbHmJlJ/JSJxWbu0WbRxJxRPXOUUJxNbW0RxWxi1=bsQE0JD=buD=bHU=SG6=SFQ=buQXSJe=OG/JlRAE0J6JYJDEYJxXlu/WxM0El=mJ0pmJbMPXSJPWxM6Els6XOM0ESjb=bHmWOEmEYWeJxs/WbweWlEbXOUmWYWDJY=mEO10JxWDJlR0=OGxJYp1WtN1Xl=1JYWeWYWAExUmJYux=SFQEbvmEl=UElJxWtMxWbiY=bRDJxF0JSuAWbsQExEmJ0R0XS10JS1/WxpmWxGxJlsxJSWAWbNUE0ReEbsAJb=YWSwPXO16WtpY=luxXluDWO1q=Ss6JxuDJSvm=tjUWx=bEOwDWOi1EtNv=bu6WSJ0WYivWlMqW0j1XtibWS1DJbReJSFPESH1XlNb=Y=m=O=1WSJxWSWxWSUUWbMeESj1=liYJx=Y=bF0JbG/=YsPWtux=bivXtJQJ0jmJ0JDWOjm=lsxXSseWlMx=lJe=SR/EOUU=SGAWS51=YimJYuxXOGQXtpUEbF/XtMDE0WqWYuAXtMDWlJQWxw0=lNvEYEbE0JxWtWQJYueXlWDES16JS1DEOMeWYMD=SG/=lMeXSMDW0R6EOWxJxjbWtR6EbM/Wtj1=Owq=tR0WtW0JxsqEbvYJYue=bWAWxwQ=SMAEORq=ORx=liv=YpYE0M0Elp1WtJqJxw6JlJx=SUv=YsAJSHvESsA=SHbExivJSs0=bG/XtibESu/XOseESMAWOvbJ0MPWOvYWSNbXtRPEbsDXlJ0=Sp1WbsQ=lsPWSs6XSG6JbNmJbMQJxGDWSw0Exs/XSGQXS5YJbvbEbUb=SM6XlW6W0WDJYWD=tWQExiYWSUbJxsDESG6XSibExwP=Ss0=bFAWbW/Wbw0WtivESGeEljY=SsqXSGPJYs/JbsDW0W6XlRe=YRD=lJA=OWq=OsxJSFQJYMDEO1eWxMxXOMPWlJDWSJ6ES=1WbRqEtE1Wx1x=lWDXlE1J0N1J0N1=YMQXlWQElsQ=tJeExsQXtJeWYRDJSuAJlJeWOGqEtuDWSGP=bpmJbEm=ti1JYJD=OE1=SWP=SuQWSNm=YjY=Yj1=tpmXOw0JYp1J0p1WxW6EYimExsx=Sux=Oim=OFQJxp1WxuqEO1D=OR6=ljYXO1PEOw0WbFPWls/WO1DXOEm=bW6=bF0EbsPJb5bWtRAWtNUWtRQ=OibJbFQExMxWSG0WtJAE0RPJ0EUWbJA=OW6WYJqWbG6JSMeEOJPXlMxJS5mJbFD=SR/=YMeWYsqEbweXSUU=lux=bGAJYMPWx5bJbHmXOW0WS1qJSu/XOF/EOWPWbwQJ0E1Wxp1WxW6WlpbWtNUWxFeW0EYExWxEtibW0RDJbvYXtjbXS1/XtW/JbG/ES1eWYE1XOue=SM6ESF/WSFAElsQElWPEbRxJlWAJxwxJYJ0EYuPEluQJYR6EbNmW0NUXOHY=S5bXSN1WYiYEtRDJbvUJSR0=lEbWxR/WxHYWtMAEbuQW0uQXOU1WtRx=lsxJYMDW0s6EOwQ=YJDXtsxJ0RQWls0EOMAWbEUWtWqEtjY=bsqWxRAJbM0Xt=vEOEmXlpmWSJAWYuPWYWDE0WPXlu0JxuxWbGAWb10WbsDEOu6JSp1EbNUWtimJbRxESFDJSRP=tMeWxRx=OWDE0NUWtsqJSGxXSWAEtuDExR0WSvY=YJ/WljY=O1PXSM6JlE1=bReE0R0WOMqJbM6Ets0JbWQXSj1EYRAJxpvESJ0El=1=bNmWxGAXOwqEO1QWxseXSNYJxHmJSsDWSJQElpYExjU=bG0JbuAJbp1Xli1JYsQJYWDWxWPXtN1XtsDW0J6ExUvWbJ/WxWxExMeXOUU=tMQWxN1XSUbWSM0JbHU=SGP=SG0Eb1qEt=m=SjmJbFP=tpU=tim=OwQ=OMPXOseWtW6JSRx=OM6Wb5UWSwqExWD=Ov1ESEbE0J6E0uA=Ow/Wxu0JYMqJbHUW0pYExJ/XtJq=OwxJSHvWO1eWbvmWxRPJbjUXSW/XOMxElRq=SGAEYNYEbFPJYim=OEmXtJDWOWPWOu6J0=mEOW0=tJ6=OG/JxG/Elsq=Yiv=lseESM/WOG0Xls/JxG0EbJP=Yj1WSNv=YjUEOFPWSM/XlRD=OpYEYEmJxFPJ0RxWbsPJx=bJb1eJb=vWbRxWtJ6EOW/=lEmEbM/XO51WxW/=tM6WOiYWx=bEbjmWSJxJYM0=S1/JbjmEOGDJbwDJbNvWtJ/WlEmJb1PXlW0E0pbESFQWOJ0WYNbWbw/XSWqXt=1XSRPEti1EbNbE0Mx=Ow/=S=1WYMPWljUJxUY=SF0JYs/ElueExFPWSwQ=YJeJxpUEYM/=YM6ESEYWSG6WxUY=tMxWO1xWbR0JluQ=Os0WSGeWbu0=bwPXSpmElpUWxRPJSWAExsD=Ou/=timEb1QWbWA=YiYWtuQESG0Wls/J0E1JbM6ES1PJSG0WxuxJlueWtpUXSHbJS16Jbs0XSGPWbwDE0iUEtJ6=buq=tsQESRD=tM6JlW6JlR6JYMQJ0sDJYN1E0WQES5bXluPXSu6XtpbXSi1=O5YEYiUWSG0JbJ/XOsq=tsAJSNm=tWx=bEUXt=Y=YuAESGPE0RQWtpvXtEUWYNm=Os/=bMQ=SNbExpmJbpUElpvWlReJ0u0ESs0W0Je=tjb=bG6Jxu0JSMP=SJ6J0s/WbRPESNbXOHUEOJ6Jbv1XOMQ=b5YXO=YJlsxESs/ExN1WSjYWbHbEYJPXlsx=OMQWYJAExEvJ0iYJbGP=tuPESsQWlR/WlpY=lRQ=YMeE0WPXOF6W0ibW0J0EtEbESG0=b=mEbMDWOEvW0MqWYEUXtRAXluQEOJ/JSMAJbRe=tN1WSR6WxFxWb5vWtR/=bvU=YW6JYNUWYM0JYs/JxG0WOUb=lsDESJ0EtMQWSFDExNv=bsAElJPWl=UEOvUEYuA=SsAJbjmXOu6EYMq=tib=tNbWOsP=t=1XOWx=t=UExiUWbE1E0RDJYMQESHbWYJ0=bjY=YpYJ0EYXlMx=lsxJ0sD=YM6EOEbWtMA=OM6=SRQE0sxE0MAJ0jmWSJeExiY=YM/WxjmXtJAElRqXOF6J0WDWYEvJxJDExGQW0ueJbMDWb1A=OGDE0sAEOJAWSvvXSpUWx1xWbs6EOFqXSMPJYWx=lNmJxJ0W0WqJbFD=lpmElRPXlNbWlNUXSsAJ0W6XSR6JbHbWxRA=YM6XSRQ=bWxWSs6EbibXS=UE0M/EliYESMP=bRP=bMq=YMDJxjbWxGDWx1xWSuqJxvvXlReWbu/WYJeElMQEYsD=b1eEOwD=S=bWOGAJxJQES1q=tjmEbMeWbNYWlu/XOR0EbvvEONYWb1e=YJ/=OivEbuA=lJAJxEY=OFQWY=mWliYWxvvESsxXSseWtMPWbUmEOFAJSHbElNmWbWQ=tuA=OFAESR6ES=YEb5vWO1xJlEUXOuxWOMxWSEbE0JPEtp1JlMDJYW/WxiYWSvUE0NbWlWxXOuxEbimJYW6WSR0EbRQESWxWYMqJSEmWSwAWluPXSG0EYsPWxFQ=YJQESpY=tJAWSG0XSFeES=1EOHYWxGD=SwqXSp1WxMDJSuqJlEm=OvbXO16XSM6=b1qESMxXljbWOMPEOG0=bi1WOuq=tJqEOR/=bG/Wtj1WONUJ0MxWxwAWb=1XSNbWYimXOEvJlsQW0u0EtRDWbseWOGqWOJ/XSFA=bR6=SjbEtuDWtuDW0W6JxvUJ0JqE0Re=bRAEYJQElu6ExMAWxpvExvvEtu/WSRqJ0u0WlpY=bFDWSG/WtJxEb5UElueElNYE0M/ExG/E0sDESUmJxFq=Si1WYRPE0sQWOM6=bW0XluDEYEbXS5UXSMQJSRxJbF/=ts6JSs/XS5vWSweWSsAE0Wx=bibWYsAJSsqW0J6XON1EbMDJ0imJlEYWxw0WxGqJxFPWSUv=YRQWb16=O1xJYuDXONYWxFQ=tjY=lJ0XluDExJDEYJQ=YRqJSMqWbRPWSi1WtsDE0R/=tuDXS1qXtjb=tMAJ0JxXOFeWOMe=S1eEYWeW0RxJxR6Wbuq=SGAJbjbJxJ6=bw/JSvmXS1D=ORQE0W0WSUYXlimExsQEOFxXSRD=tNvWYR6JSs/=bvY=YibExGeJxjUJSw0XtuAExMPJSjbEljYEbG0ExW6W0W0Ebwx=YMDWOjvXtpbJ0JxJbEm=tMQ=tiYWSNmWO1qXOJDJxH1EOs6WYEbWYM6E0uPJSHm=lM6EOW/EOWq=OUvEOJQW0uP=OJ0Wbs0=tMeEOMQJxvbJluPJSw6JSFqWtuxJbsDEbR6ExwAWOwQWOwPXOMqEOW0ESMPJ0M6Wbjb=Yib=SNvJYE1E0M6XOF6XSFDEtRQWSs6WxJeWS10XOwP=lNvW0M/=SweEbpUElpUXluxXlMqEO=mJlNvWxjvEO1DJbR6JbvmJbJ/Jx5vEOUb=tReWxFP=bNmXOiUJSuPEYEbEx1xW0=m=OMPJSR0XtivEY=mJxuPJ0sxWtJAEOj1=OFQXOM6JSHmW0seEYRPExFe=OGxJlRx=bR/WtsPXtu/WO5UWxMPWtWxXtiUEOsDWlWeJxWD=lE1WlMDWl=vJYRqWSW/ExWxEbMxXSG6Jliv=YiUW0JQ=SjUExs0ExM0=OFqJYWxXO=bJ0RP=tu0WOj1=OWP=SFPXORQ=tWxWbMQJSWAXOpUWSiY=YEvWbWqWxvYXOGQXtNmExuD=Ov1EOFDJ0sA=O1xXOGqXSwPESGeXtuqJb=vXORQESRqWYEUJxF6EOUYWO1eWxMxJbw6E0uqWSF0XtW0WO5mESibEORDXSRqJbMQWYM0=lu6JxMA=lpb=S1PJbpbJSE1XlM6E0RqXlJQ=lNUJbFDWxMq=Ysx=OEmEbR/JxvYJ0MqJ0uxEOFPEt=YWbRQ=ls/JbRAWOu0EtseWlReWtRqEtW6Jx16WS=mE0pb=SEU=YJ/=OuAXtRPEOF/JSw0XOivEYpmWSw0Wl=1EYEYJYR/WSW/JSimJSHbEYRD=Yu6JljYXSH1=lEmJxNm=Ov1ExFqJSJDJSjYXOMx=tRqEtN1=OG6WOEbWOFAESseWtpvXOMAWORPE0imJx=bEOpm=YWPJSp1JbEvJlJxJls/XtJAE0JxWS5v=OWxWx5YXtJ0WS1/JSjvE0=vEtuQJ0RQJ0W6XO=mXls6JxHY=SJeXtj1JxJPWbjbExMqWx1D=OUYEbib=YM/=YMeXSJ6Etp1J0u6JxpYJlpv=b=U=YNUE0MP=lEYWxj1XSJ0XOJPWlJ0=tMA=bMAXSJAXS5UExw0=S1eWSwAJSsQXl=bXSuDXtj1ESHYWxJe=tJeEYWDJb=mWxjmEbR0=SG6=lWqWtJPJSMA=ORAEYsAWtMPWbw/XSuPWxNbXS=YEbRAEbu0XOGPJSGeEOGx=Y=1WxEUWtRPJxMqEYuqXSsPWSU1WxuQWSw0=Sib=bNU=lRxJYuqWx1PWxRP=b=U=lM0ESjvEYE1WOE1WxMQJxF0E0RPJSuPXOFQ=SwP=tpmJlE1EbRPExJ0WxGQ=SHvWORqWlJ6EbW0ElsPWbpvEx1QJx1PWYW0WbEvESue=tjvEOMQWtJ0WOMqJb=vXl=1ExGPElJQWYR6Et=mJSUbExFxXlMDJYMPEbJxJxNUJbR0W0=1=bJAWSEbEbF/W0M0WSwD=OR6ExF6J0uP=bR/EbG/EYJ6ElNv=ljYWbwx=S1DWlM0EbFeXSwxJ0WPWb1/WtJ6WbMAJxsQ=OuQJxNvESU1=bs/JS1AWO5bWtJ/EbGxWYiYExGqWbWPEx10=lp1WtpmXluD=ls/J0se=bU1WbvbJbF/=O=UExuqExiUJ0u0W0EY=lWx=OEY=bs0=OvUWSFD=SueWOUUWxU1=tM0=YMqXO5mJbsDWbsxExM0Jbwq=Opv=bHbWtEYWxGDJbu6=OWAXlim=tue=SUmXtMeXli1ExG6WYsAWlj1XOUmJl=bExwDESM6=OJqJSjYW0j1ElJ0EYJqESjUWxJ0WSjv=SUb=SReEOReEbGDXS5b=SvUWxu6XO5mJYEbWYseExs0W0=bWlR6=tp1=b1DXlpvXtRQ=lpbJ0uDESNYEljYJbFQ=YNmWbG6WbUUJxsAJbw6EtNvJ0jvWbuDJb1xWxR6W0jUXtsDXOGAXSJ0JxM/XtiYXluQWbRx=bEv=lWeElEbXluPXlu0WbuDJbueWbuAJ0WA=tu/XOGqWYsPESwQWYM6=tR/=SRAJYNUJ0=1=YMeXOvUJlpbEO=mWxR0EbwQEt=YJYWxJ0u6W0MeWSEUXOGAWljUEtp1JYRe=Opb=bF6EOMPJSEUXSGeESs/WlW/WbjUWS10EY=1JxG0E0jm=Ovb=tu6XONU=biUESuqXlMeEYNU=bEY=SuqEtJQWtNbW0s6W0R6=bEYEOWeWOsqJbF0JbwqESsA=OM0Jx5YXlivXSuQJ0RPExMDWYu6EtEm=tjUJxvmJSG0=tRqElRPW0i1JSsP=SWxXtsQWbsq=tJ0Jx5v=SEvWOF6=O1qWSib=bM0E0=mEOuqJ0JqJxJDE0jvWSjbW0MeWOR6=tJD=bEvEO=1EOUYEO5vEbwDWbRqJSFxWSMDWlNbWS=UJSFD=SNv=bM0=OU1=livWYRqJYpm=bp1XSuPExFQESu0EtMQJYMDWSjUExMqWxR/EtJQ=lMqESEv=OiUES16WbFDEOW0=SM6Eb1xW0NmJbWDXluPWYEmESJqEtM6WxHvXOivJxNUW0R6WYWxXlN1Etp1WbRQXSsAEbJQXlseExibJS=1EYRqJxs0XSGAExMqESR6=Os0=O=mWtNvJbE1=YRxJbUUJxEU=YW0WbMqExHb=bUm=SpmJYRDJbJxXO51WOuAJxwqE0EmWSwDWb5bEb=YXSiYWYsAWx1P=Svv=S1D=SJQJbvvW0iUE0J/=YRPWbW/J0J0WbGQWSHm=OuPXOuxJxM6E0pb=S1xJxiYWSWQ=lWQJl=vJbj1Jlp1EbibJYp1JYN1=tNU=t=b=SuDWbuxJxJ/EOGPXOFQ=YEmESU1=OJ/Ex1xWxGQXOE1Ex=bJxwQ=t=YW0WP=OW6E0WeJ0uA=Yj1WlNYWSHY=O51XSGqJSuqJbF/WbM0WOjYXlpUJYsqWxJAXOR0EOjbWYi1WSibEx1qW0M0ExRQXSsDXOF0JSjvE0N1EOsxWYMqWbuDJSueE0R/ESWPESuAWluxEbWxWtimW0u/=YRD=O1D=tpYJbEvXlimWlWPJ0JPJxJ0XOiv=O1DWtEmWYR6=OwDWSuQWbs0WYsA=lJ/=bu6EbsAJbM0=bs0XlWPWSueWxUbEbsPElR0ESM/=bJAJli1JbuQWt=bJxWQEOJ0WSsQJbvbXONvJSwx=S1DEx1qJbHU=tuxXOWeJ0jUWbwAWtMqWtWeESEUJ0R0XOHUJ0pvEluDWljUJbM0EbEUWSvvEts0Jb51EluqWO1DJY=mE0sPWtseWbw0ExEbXOR6Wbu0XOsAEb=bXOu6XSMDWOsQXlJ6Exu6XSw0EYWAW0uxJSM0=lJ/W0j1WSWAWSGP=ts0Wtu6=OvYXOu0JxGxWtpYWxMAJSjbWOsqJSEUWxj1WSNb=Su6XOFDWbpYEt=bWOFqEbsx=bNvWxH1ExivWlR/Jlu6EtMPWtibJbWDJljYEtp1JSs/J0MQWxvUW0J0JxEUXOsxWOMxJljmJSJ6ExJe=tEm=YseXSGx=YMe=lpYXSJQWbs/=tuDWxi1J0E1WOUvJSNYWbNbXlpYE0uPXlWPWtRDEYRQWSM0WSRDJ0sA=lWeXSMDESw6WtRDJxiUWbRxXtp1=Ss/E0WqJSGPESiUXlNYJYM6ESs6JYWA=OWAXS5UXSMDElR6EbNUW0EbWxFeXSFD=tsPWbpbESuPXOGqJSiU=tim=OFDXSNvESW6=tp1JYj1XlsQJ0=Y=bNb=OuxEts0=bw0XSFqJbMPW0Jq=bGPEbGD=O=YXSMPEtJxEbjUEb5U=bu0J0pbWxF0EYpmJb=U=YMxWbNbEYR6XOR6Ex1eEb51=bWPJYpvEximJxuqJljYXSFDXSHvWlpUXts6=SW0JlWDWbM6=SsxEYN1Jbp1WbuA=bpUW0iUExGxJbF0EYsDWSHYWONvJxu6WOJD=O1DExMAESReJxWQ=bHmJ0s0JlRDExN1E0J/WSNYElseJSFQ=lsA=bMAWxu6WbEYEbpY=OGxW0s/WbFQJxwx=bF6WYRxWS16EY=mWOu/JlR/Wb1qJ0s6XtWPWbpvXOMe=bw/WxGAJS51EtM/WxwxXOWxXSGeXtWPXOUvWSH1WtuQXSjbEt=1EbJ/WYNYElR0JlJP=Sse=lEbWtRPXORx=OUmEOUv=b=1WxRqXSuxESvU=OwxE0sQWOMQE0ibWYu6EtuAExsDXO5m=YpUE0jm=YpbXO1eWYJqXSwx=OU1WbR6=OHvJb1QWbM6=SEYWbMDJlEmJY=bXlibWSUY=YWPJbu/WtMAW0=UXONUJSw0=OGqXS1/WOpYE0seWlM0=S1qJbw0XlpbXlMe=SGeXSs6E0sxEYjUWxJ6EOu6WOuQEtM6WS=UJ0RxWxpUJS=bWx1AEtRQEYsP=SsPEtWD=lpv=SMAWbRP=SUbJSjvElMq=OEYWtpUEtReESMeWYMeJxWQWbUvXSRe=SRx=ONvWl=vJbW0WYsDWxWAJYRqXSpYWlJ/JbjvE0=1JbMQExuqWb1/XS1/WbM0JS=b=lJPJYW/WYivJSvb=bNYEbHmWtEYESHYXtuqEOpm=lJ6=SNbWOwDJbimEliYJYNUJbpmWtuxJxJqE0NmWSM0ExwqEOweWO1DXtu/=lpvEluQJ0NYElWAXtuDJSHUJSsD=OimEbR6=bJQEOwxXSFPJbGqWxM0EtE1=Ov1=O=YEtsDXlWQWtJ6WxuqESiUEtimEYM0E0jUWbpm=SNmXOUbJxw0EO1qWSRDE0uPWlEbWxu6E0W0XOuqJxMQWSF6J0WeWSjYWbMqXlM/=lWQJbs/WxMDXSGD=lEYWtpYEOE1ESsAWxW/WSR6ESi1=OJDXts/Jxw6ESs6ESvvWbNYEOsqJY=vJbWq=bpvWOue=OJq=b=mXtjvEOpvJSs0WSs0WxR/EximXSwQWbJe=S10E0MDExH1EO=v=tEm=Yu0ESG6XSwqJbsDESM0XSG/ESvYXtj1=luDEOM/WOF/WxUvWS1xESp1XSMPXO1/JxweJbMeEOuPXl=UEO5bExR/EbJQWYuA=YN1EtNvXSW0JYWQWluqXliU=YueXSpU=OwDW0u6=bUbWb=1E0WDJbJPWOWD=bsPJbGq=SMqJYj1=b5bES16=bjbWtW0EYJQEtivElNYJb5bESj1WSF0=YpvJlu6XSRDEYRxJlpUWORAWl=m=Su0WSuqWxiY=buxWOs/=tNv=SHvJYjYEYsPJSUbEbFAWx1DJxMAE0E1E0uDWSWqJxGPXSJqESj1Wl=vJSvUWOJ0Jb5v=SsPWSGQWOW/WbsQEOMeJxiYESpYEliUXORAWSMQWlRPXSwPXOMQ=Sw6E0RAWlsQWbjmJxwD=YuqElu0J0=mExNmWO16ESRxJbJP=bUmJxNYE0sxJbHbXSHmJSs6XtiUESHm=bjvWbimWSRxXSuAXtMDJbFPWYJP=SRQ=SWeJlpUE0WqJbjbJSsxExFqExNUXSWDWYRq=YsDWbG/EbW0=bsP=bWx=S=YJSF6EOFPWSJQEtjYWbimXOpvXtWDJS=bExM/JlsDXOUb=YiUEOwq=bUm=SH1JSRx=SjYXSuPWbGxJlJQEbGPWlWPWxHUJbiU=S1Q=Oi1Wb1xJYJ6EtWeWlpUJxNbEYNvXSuqJxFQ=l=vXtJDEbEUJbuAExEbWtE1=OFq=b10WlNvJxMqJSw/=O16EONbW0s0Exjv=OFAWSWQWxMe=tjvWlEvWxEUEOp1EOUmJYMqJbN1ElsxXSHbJb51WlpUWSFxXOsqXtpUWtue=OJ0XlRDJSvvEbRx=O5m=S5vW0jYEljvJbMeEx5vExE1XO=bWYWQXSu6XOsDJSG6WYWxXOE1Ebi1JSuP=tEmE0MDEYibJ0MxJlEvESwAW0MeExJPJxuPEtMeEYJ6XSMq=bFeJSuDWxJQ=bUv=O1x=OGeE0jvE0JAWSHmJSvYWYWxESiUElpmXOjvJxJAJxMqWOFAWSvYEtMQXSWeWOwAElW0ESsD=tW6EtJqXluPJYs/EOWAWxWe=bMeJlpb=OMAJxwA=lRxWOpYJYi1WO1/WYWeJxib=YuqEli1ExuQWbR0JxMeJbJ0ElR0JSEmWYRqJbW/Elu6XtpUXlNYEbFQXOWAWS5vJ0MQW0J0WbHbESUmWOwQWxM6WYs0Jx=U=YMeEtEbWYRqJxw6XOwAWx1AJSWDEbMPEYRqXOJAXlJPJbMq=SJ6EbMAEYsxEbG6EYJDWbpbJSFPEtReJSJPE0uPWSvbXOib=Os/=tRqE0sq=O5YJSJ/JlJqWOEmJbuP=YWA=SEvWOs0=bw0JbG/EtsP=S1QE0iUEYjmXSEmWYpYJ0JAJSJ0Jb=1EtWqXlMPXtu/=SF0JSMAJSUY=t=U=bJ0XOHbWbwQJbimEYMqEbR0XSG6WOEv=lMDJbRqWSUbWtJ/Jb=UEOwQEluAWY=YEbM0JSu0EYp1ESFqWOvUESue=SFQWO5mEOF6WlueXtM0WtNYWOJeESNYJbNbEx1/EOW6JxuAEOW/=bNvJ0R0EYJqXSReXlEmXOMqESsqW0=YEYjYJbu0=SG0=bsP=S=YWYs0=lNYEbRAW0RxXOivJS5bEl=YXtNbWtEYEYu6XOsxElJAEtJxJS51Eb=1JbGqJSFDWtJAESF0XSNYJSWQWxwqXSs0Jlib=SEbJYs/E0JxXtsAESjYJYpUWSuqEbUUEO5bESs6Elj1JbReEONU=Ou/Jbjb=Su0XSjvJbFxJYibWSpv=lsqXSJQWxJDJxpvJx5Y=lJxEO16W0JPElJeXSMxEb=UXOWDWbMQJSR0XtW0Ets6XORQ=YJxW0MPESEbJ0s/EYRxXSFDXOHmWSjY=bwA=SWqE0uDWS5bWlW0JxG/ESE1EOu6JSuDEYRQ=tWAJbGeEOWPJbU1=SJ6EOJeWOFxE0RxWxUv=YRQWSJ/W0sPJbM/XtE1JYsAXOWq=OUvEYR/Jxp1JlW6=O1q=SGQ=OueWYu0XOpYJxvbJbwAWtueW0Me=bjYWSw6EtJP=bpmElpbEYNvESRAWOvU=YsxEbWA=YMA=tsDEbUUXlW0WtMqEtRAJSMDXOUmJY=mJxM0EOpYEONUJbjm=tWDESuxEONUXSwAJbJAWl=1JxseWS1/XlMqWb=vExF6JS=mESRAXOUbWOw6WOG0Xtim=bRQWbUUElueWbRAJ0J6=OjbExsAWSNvXlRPE0ReJlJQWxUmJxGqJliUXtM/Jb10JxGP=YJeJSMD=Ss/=OsP=bReXlNbWljvXOwPXOEYXlpvXO16=OpbJSRPJS1qEtMqEOwe=bE1=ts0=ORxWtEYEOvY=Yu/W0E1=tWAEtMAXtWAW0Nb=lsQ=SR/JxWeEbuDWxEbEbJ/WYEvEYivExJxWOJ0WOi1EbWQESNYJYpbJbuqExiUW0pv=bMQEtM0ESG0W0Mq=tMqJSE1ExUmWSMAXtWxXS1eWbW/EtjvXOMPJxGxEOMqElWxXOsAEb1/ElR/=SsQXtsQ=SsPESNb=bW6ElRxESM/XSJe=Ou0=SEvWYNY=tMeJbMq=SsQJbj1=bGDESU1XtWQJ0sQ=luq=OwAXO1AEORPWSJ0Elu/=bM0JYpYWSFP=tRP=tEvEOjmWlMQXt=UJlMqESF/XlMqExMAXSsP=YWeExvbJlMPJxGe=tJDESHmWxHUExFx=O1/EOu0ESsDWOGxXSUUE0RQWxJ/J0uDEbHmE0JeWxMPW0J6=bUUWbW/ESJeJS1PWSEYWtWPWSwAWS51XlR6Jlim=bu0WOFDXSjmXO1qWbw6=tMAWx=1W0NmXOuQWlWQEtsxESuA=bEvWSUYXtiYWOw0Wbs/ESFxWbRqJYR0JYN1Wt=vEb1AJxsQWONbWSpUXOuQJYR/=bR6=Ow6W0EYElRAJSw/XOGDXSuAESGqJxsDW0ueXOsAWOvbWbJ6WYJQXSJqWxjUEbuAJbF6Etsq=luQWOFeEtW6ESR0E0s6JYWq=YEUEbuAWONmJSjvJYu/=OR0WxuA=tNbWSWPESHYWSMQWSueWlpYXORAWYNvExiv=ljbEbwQXtR/E0JeWxGQWtuA=bJqJYJ0Wxj1Wbw6J0J/J0R0EOw/WxuPWbWD=YjmExMqESRDXt=vWORAJSU1=YJeJbUmESRQJYs0EbHmXS5bEtR/=OpY=SiYJbMAJSivESE1XlsAWSjvEbRQJSM0XOsQJSi1Wb=1XSFQ=S=UWSpvXS5UJxR0J0RqWSNvJxN1EO1P=SUYExH1EbsxWSwDWxJ0=b10WtEYWYMQJbFPXOEYESuDXOw0Wtsx=ONmXlR6JlJ/ExweExWeExuAEbFDESM6WtMqXlJ/J0=1EO=mWOHb=lsD=SEb=lJAJYJAWOFAJlWQ=YJQJSMDESiv=S=1JbMPJYJ0EY=m=tuDJb1QJbw6=luDWOEmEbM0=SFxWYR0=SMPWlJP=bueWOF0JSRe=OjbXSUvEbG/E0NmWSwxES=YWSuPEluDWS=YEtu6=SW0=bFQJYp1EOpm=OuPWO=1WYJ0WbGA=OR6=YuxXSMPWbwxEOuP=Ss/XOvUWtR0JYW0XlJA=OHmWtux=OEbEYj1Jbw6J0MPWxM0JxsDEtMqXOGAWxiUESJeESN1EbRqWSGeW0i1JxRq=bWeXSM0XOUvXSHb=SuxJbuAJYW/J0JPJSi1XlNmWSM0WOF0ElsPEOj1=S=YXSG0EOFxElJ0=SMeEt=1=OMP=b1DWxHbEtNmJ0WxWSGAJSvbJSF/Wx10EOjUESRe=tJQ=bpvEbuPEYs0EtNmJxHYXtEv=OHbEx=1EbvbWtuqWb5mExsPWSi1ESR/Xtse=SRDJ0JPJxvvWSimElsAEYRq=bF/JYjb=Ow/EYW6XSU1JbsA=tsQXOMP=lRPJSRDElM/=tJQWONU=bjb=OJAJb=bJlWAXOFx=ls/=tR0=OvmEbGxWSWAJbvUWlM6WOjYXSW6=Yi1=SseWSiUWtMxXSu/XtRqXlJDXtJD=lMeWYiYExiYWO5YEYJxJbRDJxUU=bJQJSw/Wlu0=bGqXSGx=YuD=OJ0Eb1AXOjbWlEbXSRPXt=bEluPWSvmEx5bEbsxESpU=Si1JxGPWSReJx=1JbMDE0s0J0WPXSJQ=OG/Ebs0WxJPJS1PE0Nv=O1eElM6ElEbESH1XSEY=bvY=OUbJSFQJSNYWlsQXlNbE0RqE0W/J0jvJbiv=bsqWOHUEORAJS1QWxiYExjm=Yi1W0WAJSR6XSiUWYivEbRxWb5vJSw/E0MqXOW6ESs/JSHYXSWPWSMQEONUEbvvEOi1E0jvE0MxW0MxJb1PJxG0ESMeXliYElN1JxR0XO10WbRe=OGeEb=bWx1xEOux=limESvvEYM/EOJAXO51=OW0WxGPExR0JluD=SwAWSvYJSJP=YiUXOwPWlWqEO1PWbN1ESFeXtWDWljmWbvbXOWxJSp1XSEU=O=vEbWAJSJqWOwDJ0EbWxRqEYMeElJ6XlRx=Sv1Xt=bWYuqWtWDWxwQEtM0=bH1EO51Wx1PXlRAWOFeESEm=lJxEYibJSs6WYs6WbRxEbFq=OiUEtiYEbw6XS5mXSJAJ0u0=OJAEbuDW0WPWlWeXSJx=SJPWlWAExRPESj1=bjb=tR0=YWxXtNvWx1/WbvvWS1DJlWeWbjv=tEmWxu0WlMA=tjYExReESibJbF6E0EmXOGxWbRqWlRPXSjUJYEUESsPJYpmWbM0=YNm=tN1=SuQW0pUJYjmESWAJbGx=bFq=SU1XOW0=tMAWbuQXl=bWbvvJbpmJxp1=tRAXS=YWtiv=lsPESM/=SFeWts0XOMAJSsx=bHYXtse=bwA=Ojv=OiYJSJeWOMxWYJqXlEU=Y=1=bEm=bsD=tsPXl=1WxuDXOjUXOw/=YM6ESGQWlEvW0i1XSMxWtNvWtJeESMPXl=1WbGqExRqXtpUEbEbWOR6WxJDXSE1WbRqJYJeWxGPExJ/=SuPExMDWbuD=b1AWOvm=ljmElu0=tN1WxRQJSR0WYJAWxWeEl=Y=SRQWxuQJlJA=OuAWbGxE0iYWSFP=YNUExv1EORAXSimEONbJlp1XOFqXSpb=bi1WSR/XtpmWtimJ0pmXSiv=OpmEbvU=lueEbReEl=1Jx=vWSRAWOsDESsP=SW/Wl=UEbRqWYiUEbHvWSu6ESu/Jx=m=luDJSu0=tsDElW0=t=1JSGPXSF6WOJqXOM0WluQJxWDExWAWSjm=Ys0=SWqWxWDES5UWb5m=bweJxNbWbwQXljYJb1A=bseJSw0WtN1=SRD=ljmJSMqWSJQWtpbWtR6JxEbJ0WqWxGQJbpbWt=b=bFAXS5YJbibWSF0Wlu6ExGeEbWq=livEbEUESMq=bjmWbGD=b=m=tu6XS1qESEUES10ESsAExHUEbE1=ljUEtjYWbweJxseWl=vXSpbEb16XOF0=S1QJSJAJ0WD=YJ/JbNYE0WDW0MxWO=bWlR/Ex1PExJxWbR0E0JAXlJQ=SNUWSpUWxJAXtjUExW0=bUbWbUYESse=OEbESNm=b1P=timWtNUE0MqXSsP=lR6XOGPJlWeWYsQXlEmWSEbWSHYW0sq=bFxWSJDEtWPWtE1JbWDEOW0WSG6Wt=bEbjvWOGQExMAESu0=YpYExHY=lueWO10WOuPWbUvWbHmWSuDXlNbElJAESNbWbHmWOW0EtR6WxuQJ0RqJxuxExM0WSNvESJQEOGQWlsPEOE1=bNY=livJSJDWtN1E0ivEOMe=SwxXOpbJYMPJSjUEOReJbuqXS5mWYs/XS5UWOJ0Exj1=lNbEtEmJluxJlWDEbE1Xlu6WlRqXSH1Ebi1WYpm=lRAWxpmWlsQWb1QEb1QEOMDXtuQXlEb=OFe=SJPWt=UXSuq=SU1=YuAEOuqWtJ0ExHY=ls0=tMq=YWQXSJDJlW/XOF6WSFqExJ/ESvUXOvUXSsPES=1ElWQ=OwxExJAWOUm=OGAXtM0WtM6=lR6ESEUWYWeWbUUJb1xWYuxWlR/=bjY=tuDWx5UJxFxW0pmWSW0WlMDXtM/JSNYXlEYEOwQWO1AJSUvEb1x=SF/=SMqJYJQ=tsAJ0RPJb5vExG6WSR6EOu6WSJ0WSHYWlNUWSWPJbsxWOG/WSM6XljvEYuAWYpmEOWAWYsQEOwxJYsQEYu/J0jUWtWPWlMAXSiY=SMq=tu0=OjUESNYEtWDWlEbW0jmEbsqWl=YW0JPXlRxXtN1=YW/WSGQWlWQWbsQ=ONUESG/WlJDESM0=bu0WOFxEb5YESG0W0u0WlpYXSRQWbvYJYib=lR6JlpU=YseEOHmJbGQESF/=bUYJbN1EbsP=SMeWtJQEYNbJYu0W0MAJlRqJl=UElJxJlMPEli1JSvvJl=m=OWA=SWQXSjmWYu6WOsxXSjUXlJQ=bNY=b5UJSsqEOU1ES5vWtuAWlW6WluxWxibElNYXtNYWbEYJl=vES=Y=YE1XOJ6EbH1=SNvEYsQXtjmJYWDWSjvJYWAJbMqExGPWSw6Jb51Wljm=Sw0WOUU=ORA=lRAW0N1WSJDWx1xWxHvExjvWb1DXlMeEtjYExwxJSuDEximWYJ/=Ss/XtJqESRAJ0MqESUvEbu0Ex1/WtMxXlJ0JSJeJlM6=YivEO=v=SGeWlivJxu/XOweWSuxWxwxESGqXO51WSvv=ti1E0J6EOu/=tNmE0RQ=bUYESN1WOJ/EOEmXlR6E0ivWbHvWbJQWbM/EbsDWOimXOG6XO=1XSMq=OH1WbUY=bN1EtJ0WbJ0XO1/=YjYJlibJS51=luAJb1xJSMeXORQJlueWlRAJYu/ES=YWSMAWSjvWbFQ=bjvXO=vElu0=OjmJSsxWxiY=SpU=SJ/=SsDXlR/=SWeJlpY=SwAE0E1WlJeXO1PWOjbWO1x=Sp1EbHmJb5UWxpb=OWAExuQJYNvXSF/W0jv=lsDWbU1WOvmJbWxESNbWbFxJYMAESsxExjYEbF6XSsqExwAXluD=SwPESp1EYN1WYJxEYs0ElMDElM6XSF0EOFQWOR0EbGDWxF0XOFQEOG0WbUUW0M0ElRx=SJeJYM0JbEmJxwDElibJxwxWSJQW0NmXSu6=OReWOEbWx=UEYEbJ0jUE0J0XSsqWtNbJxibJxwP=lp1ES5mEYJQESRPEljv=SHbWYJxJxseWY=vJbUvWSpUJYEYExRQ=YuAXSj1WlEbJlMQEbsDESu6Wlpv=YsDXOsQ=bM0ExpmEbRqExFxExWqXOjbJxRD=tReJSR0W0u0EbWPJlu0XSWDESw/WOpmEYJPW0E1WxHYXl=mWOEmJYNYWY=bJlEbJbW/Ex16ESJe=YjmJYMqXlW6=tu6ExwD=b=mEORQE0M0=ls0Wx5vXOuDEbpmEtWDJSGD=YJqE0JQWx10XOvvExwDXlMxJYuqXSG6ESFxExW/EbGQWtRqEO5mWSH1EY=UWxGeExGAE0R/XtjbXluDWl=YEORDWO5vWlR6XO=1JYMe=tEYESMAWSuDEOibJ0ReWxjvExEUJl=UEb1/Wx1/Wb5v=bu0=t=1EO1qEOu6WSMAEYuQWOvmJxiYWxvm=tjmWlWPWx1/WxEvWSRQXtuDExJ6XSjvXlNbESJPEOUbJlMPJY=1=YJ6EbR/XOu0JYJPEOsDJxsD=SsDWO=vWbj1ElW0=OwQWY=YWtj1=SWDXlN1ESN1XtJQXtWxJSN1EbFPWtWQJbsA=buP=SuAWlpvWbuQWS1D=b5UXlW0JlMxWlJ6=SWxWbMPWbMeWSHbWxjvEONmJ0RqXtE1XlJP=tuDJSM/XtMQ=YM/WbU1ElRAJ0iUXSjY=lJ/JlJP=YsAWOJQ=Ou/EtibEtR/E0iYWxFDExu0=OjbEls0WtR6EbHU=OwPE0NUJbuAWx=YWlNUW0Jx=tuxEYM6EtMPEOu6E0u/ESjvJYiYW0=bEOsPJx=bJS1eJ0MPJ0E1=tEv=bNvWOH1WtNY=OWeJSRqWSG6WOMqJbMqEbWx=bWxEtueJxJQ=tNv=bu/E0J0WYJ/E0M/XOMqW0Mq=YRPWtMAWOuAJSw0EYW6Xl=mWS=v=O1eJbvYEYue=bsD=tu6WYMDWbMQEYReWOJQXOuq=YsA=bu6Xtu0WSWPElJD=ljbJbGe=OWq=bN1EO=1Ebw/JSUmJ0R6=b1AXOW6=bFxXORqXSwDEbsP=OUYWYEYExs0W0W/ESFe=bvUWbMe=bHY=tu/JSvUWbH1WbJAWbHU=SNYXlEvXlM/=O1/Jb=U=OMx=SueXti1Wxi1Jb1DXOReJ0sPJSjbXS1PEYJAWxwPJYRD=tj1WtimWSv1=YNU=bFA=SpUEbwDJbN1W0pYJS=1=YsDExR0WOFeWbjv=OiUEtWxXOsA=SMAW0sQJ0JQJYEU=Y=YE0RAEtNvEts6WljmJSJDExuxJxRQJYW0WSHUJluDXlpYWlM0WOvvWb5bJYJ/E0Wx=OUmESGPWxRx=bRqJ0uDJb5bEbNUXtu6JSFP=ONYXtRx=bwAJSu0EOUbEbsxWSJ0JYWP=bFeJ0M6WtjYJYJPWOR0=OWPWx1Q=OM/JxseXSw6XSvYE0WAXSsxJYs6Ebsx=YWQ=bRqXtivEYsqElJPElimXOM/WSMeExvvWxw0WbpYEbR/=SRQXlJqE0=vJx=1=SFeJlEvWxpYXOWPElN1JY=vEYWA=bMDEb5YJl=mXOHYWbux=tJPWOF6WO=YEtpbE0ReWSF6WO=m=YWAWYJeJlJxXOG6=SWQWOEm=OWxXtEYEx=YWxvU=lMQWtWeEbFe=bwAWtR6W0J0EbReEONv=SvmESHvESUbWxNbEYi1Eb5UElRDExsPExJPEYiUJbH1ES=1JbWA=bF6WlsxJbsPWlWDWSs0JYuPES1xESw6=lEU=O1eE0E1WbWx=luPES5bJbRA=SW6EtimXtJA=lJeElMDXtW0WYMQWxRDE0MAEtWDWtuQ=YpY=OEvEtsDEtMD=bHmJlJ0WOUU=Y=bElpYESG/WSNbExiUWtse=SpmJ0RPJxNUXt=1=bF/ElJQXlR6EtN1XORPExsAJSG6WYNmExJPWOsAJb10XlMPJ0s0JbFPXSF/XSFA=OW0EbweXlNv=Ow0WbUY=t=bJbue=bu6WOU1EO5YJS5bE0j1=SjmXlMQEOFQ=O1/JxGPWOuq=bjm=livWOs/WSs6JbRDXliU=SFxJ0jUWlEYXtNbJSGeEb10WxJAW0pvJxu/XlJxJbJqJSpvXSWeJ0ReXSGQXOvYWxwAEOJPJb5YEbFP=S1DWbMAXtjvJS=vWYR0=OG/J0Rq=SwxEbw/WOWQJbseJlMDJbse=ORxEYJxXOGQE0p1J0uA=SU1=tMq=bEbWbj1JYRxJS5m=tW/XOWAWxweElueJSGAEYW0ExF0JbpvWlNUWSimElpUEYpvWOwq=tRqWxW/EOw/ElpYJSpbWSReEbs6JSwD=bW/Exs6ExiYEtEbXts/=tNm=bibWSpYExM6ExuP=SwqJx5bExUbJ0jv=OsqW0R0WlEYJbRDWOs0JxFxJbF6EtsAJSRx=YM/XSibXOsx=OM6JbFeJ0=1WtiYExUUJxFqESG/WlJ0WYJeXlW6EbueWbpvWb1qXlWqXtRA=SpvWbRqESM/ElMeXOiU=S1qWlReEOGDEbEUESGqXtjUEbRAWtsqEtRAEl=mWbWDXS=1JSGPJYjY=b1qXORxJS1Q=tsDJbM6WS1q=SsDEOwAWYNYExw6ExueEbj1=b=1WYsPExNmJb5Y=YR6XtibWO=mExwDJbGDJbGAWYuD=l=mXSG0WSwA=SuQEtsD=bEUJbM0=bsQESNbWxRP=SwPWOWP=ORD=YMQJxsAJSj1EYNmElp1JSuqXO5Y=YNmWO=b=S1eWtNUWx5UWS1qESJ0XSRA=bJ6E0EbXls6ESF/JbjYJl=vEOGA=tuA=t=vWSEvWlu6=lMeWluxXOMPXSNYEtEUEbF/=lEYEbuqJSwe=SFqESGDXO1xWYW6ExWP=tEmEtNb=tWAWOv1WtpvJ0NUESJ0XOR0WSMA=OMeElj1XSFDExuqEbpvEbJ6WSM6WtJPJbJ/XS1DXOFQ=lEbEbi1ElM6=bjvWtR6W0NvWbs/=lj1Wbi1EOHv=lEY=SEUWlW/Jxu/=OsAWSRAEbG0XOs0EbNmXSGqWYWPEls/EbJPEYuQWONmJ0MQ=SRPEtueWS1AWlu/EOvYESUbWbEbXtNvEOUUES=vJlsxXOH1WljYXtMeExWqElRD=YRxEYNUJbHUWlimJlNb=lpbJSsxEtJxJxHmXtJAESwDE0jm=SRPElpvE0pUWb=U=tEvE0WQ=YJ6ElJ0WlJ/=SF6WlNvEbjY=SGe=lMqXtsA=bueJ0MeE0ReWxM0ESsqWOpUEtuDEYjbJYEm=YpYEOUYEluPXlJQJxWqXOwA=SFxESUYWb5UWtiv=OUUWOp1EbimJ0N1WxGe=b10JbN1JxHYWOEUXORA=lJDEbu6=SJe=tEv=lp1JlsQESNbXO5YEYJQElRPXlsq=tueW0uAXS=1EbHvJbv1EOsqExMx=YpvWOsPJSw6J0RDEtRq=bJxXOHUWOjvWbEUXORAWOu0=bWxEx1QJSG6=b16E0=UEOi1JYjYWtjvEOw6EYNmW0WqE0=YESUv=Yjv=YJAEO=YEO1eExuDJSUmElR/WximExuQJxWQ=SUUXl=YWbj1ExW6EYjUEbMPESMD=ljU=SEUEOsxWOUb=tW6Jbw0ExsA=lR0=SFeJbMAESpm=bsPJbv1J0sAES5YEOsP=O1q=tEvEtuPJlJDEbJ0JluqXOHYJxsDEbwq=O1PJS1eXOF6EtMDJ0sqWxib=lJ0E0RDJlpU=buQEl=1=lpb=bUmWSp1ESwQWbNYElJDWbjbWSuxE0MDXtEbW0MQEljvESw0=bMAEO5mESjUXONv=tNvWxGAWbE1JxJPJxG0WSM6=O10WOW0=bMAEOHmWx1Q=Yu6ESs/XSuqXSG0=Ow6EY=U=SRAEYpUXlJe=OFQJx1qWSHY=SibWORQJYu0XlpvJ0=mWbWP=OpmWxivE0ueEYR0XSRPWbiUWYEUEO10=OJQ=t=mXtRqESGAE0R6JSwxJ0EY=bR/JS1AEOu6WbweXtWD=YEbXljbElNb=ORxEbGQWSEU=tjvEbJDXtimEYNU=tWDExRxWtJQWY=mJbF/=YJqExi1WYpUWlpUW0JxExGxEYEUEO5vJlJAXOvYJlRQ=bHb=S=vWS5bXOFAWbGAESEYXtEvJS=UXOGxJSweXSFqWSw/=SNbWbu/=SEbESNmWbJA=OvYWSw/Wx1eJSuxXOJ6JSuDWSuDWtibJbRPWbsxJSG/JYWAXONvWOJ0ElMxElMQESJQW0RDExsD=t=mXlM6XOUmXlueJYEvJlJ/JSueExEbXSR6WbFAWOUmXSEmWbM/EOUmXlNv=SpY=O5bJli1=YueWOUUWbw/J0RDEOJDEOWqWx5YJYM6WlMqXSuA=ts/=Ypb=S=bEbRQ=tMx=YNUEl=1EbuDXlRqESHYXtJqJ0uxES1xWlsxW0=mJxWq=bR0WxM6ESGP=OwDJSGDWtMAEY=Y=OJxXOMeJlRqWxG0JxF0=YibXOJeESsx=OFQXO=mJlWQXOjvW0pvESjbWxweWS=YWOJ0W0NvEOsQ=b=UWONYXORQ=bWxEO5vE0MQXSjvXSWPXSRPESwxXOibJxibJlJ0ESvUWxNmWYJDWtM/ElRxWOGPWSuxJxWDJSRxEYsxJ0EmEO1A=SRqXtRQW0RPWtN1JYMPXSJ0WxpYXSwxWts6WSW0EOs0=bWDXS=bEbR/E0pbEYsPWbG0WOuDWx=mWSMDEbReJxReWx10Wbwe=OR/WlsDEx5YE0MDJYJPXSib=O1xWOp1XSGDElJDXOFQEOFxJYWe=S1P=OF/J0W6JYpYWSU1JxEb=SHv=tu/ESi1JlsxESMxJxiUExFAEON1J0N1XO5bJb=Y=Yj1EtpY=SuQEYR0WlMxExwPWOE1JxuPWtRPJSH1E0NU=SN1Wbs0XtR/=bpYEYsAXtp1Jx=YWOMDExvvE0R0WlRDEYW/WxsxWtJ/=bWeWSw0XlpvXO5v=SuAJYpvWx=1JY=YExMQEbuPJSNYJxi1EOWAEOR/ExMxEYMA=OHb=SuxWbuA=YMA=SJDEbNvEt=UEbNYWtMxXtJ6EO=YWSGxESJx=lNvJ0uxWxw/WxJqWxUbWlRQ=OEvEORxEbGeXO=bJSu0E0sPWx5bWljbJxHU=lW6JxNUExEvJbRqEbjmWOWx=lpv=SFD=bWeXSU1EO=vXtJ6WOweJxwxWxs/WSsAElux=bWeXSw0E0s0WO1e=lNbJluQWYMxEtWAJbGeJSHvEx1Q=bseJb1AExN1EYRe=Ou0ExEYWOR0JbWAWY=bJSuP=luQ=Ou/EbNbEtMqJYWeXONmW0jmJbuAJlE1=bu6EtJxJxJ/=luAJbJDXtJ/WYpUEbFAXtseXtNvWO5YJSjUJbuDWSs6XO1PXl=1JYsAExUUJbwPWlNUJSuP=lJA=luPWtj1EbRQWbWDWSu/EO1qWO=m=OGxWbpYWOEbEtuDJYiYEOM/J0s6=OpmJYuqWYMx=bMAEYW0ElR/Ex5b=SFAEOMxWSG0JYiUWbRqJYsQ=libEY=1J0JA=bF0WS=1Xlu0Wts/EbF/=YMxWYi1EbHUExFDWxwPWbs0JxG/WxjY=t=UEOvvJSHbW0sPExGQESNmWxjYWlpYWOJ6=Opm=Yj1XSsDWxRqWlNYES1QXSv1EYWAWbvbWtM6=YJ6WlMPJbuDWSRDXSuPEYueXSFAJlRqJxpUEbHmEO5bEtMAEbw6ElsA=bGQEbMAEOsD=SsxEYsqJYMAJlWeEYEYJSMA=bp1XtJ0WOMDW0pvExi1=ls0Wx1AW0sqWx16JxWDWYRq=SG/EOu6WlJ/Jl=mE0RqEx1xEtNbWxNmXSRP=Ou6Wb51JxG0=O10JbHbJS10=bu/=lRQ=lEUEO=vJxRQ=Y=mW0WDEbGxXS1AJxR0EbUUEtMD=OJxEbwqJ0uDE0M/JlRxElMxXlM/=bMPXlEYWb16WS=mWYjbJSuqJY=vExwQJSRx=tNbXlEvJluDWO5vWxpbEYsx=S=YE0s6WSwAXlN1E0seWS1qE0WqE0RD=lWQESNmExs/Wx1PJYpvWb5U=YuQEx1qJbJ6Xt=bWOwAJYu6WSw/XlW0WtRxEORAJxMQWSHvW0MqJxW/=YivJYJDJx1eXOM0W0pUES1Q=SwqJxNvJxivXSJ6WORPESF6WtJeJSsQESuQEbuQXSvUEOU1WxFxXSM/J0sPWYJ0EtRxWOwA=bR0ExvUXSG0JYRxExNUEtE1WOpYW0uPXSJQEYMDE0jYJlRQWO1xES1xES=vWO1QWbj1EO=b=t=U=bsqJbFqJls0=SJqWxW/=Oiv=OwPJlJAWSG/ExW6XOJ0WxpmElsDXOpbWtW6WO=v=b=m=S1DEOGPEOwAEbJPEONYJxueXSibEb1x=SJAWOFxXtpYEbG6=tjmEbJDWxvYJxpUJlp1XOuQXS5UJ0WQEbjmWO5b=OjYJxMD=O16WYEbJSF0EtpvWtNbJxGeW0Eb=bj1JYjbWSuqWYuq=SRAJ0R6=YivWbG/JSG/=OweXlJ6=OJAXO1/JbWPExHbXSW6=SMqJlW/ESJeWSimXtN1Jx1QWb1DJliUW0ueWxs0JS1D=Ou/Jbs/XlsPJlNUWbF/WYjU=SRAWxWeWtNbJxpbJx1/WO=vWSHYWSuxJluAJb=v=bpvEbGeXS=vEx=bJYWDJxJQWORxEtRxEOE1=OMAWb5v=luD=bGAJSvYElNUXSpv=SiUXO5U=bFDWxMAWxGDXSEYEOMPXSG6WxibXOEmE0=1WbivXSibJYJ0JSR0ExNmWxJPJlpU=b=vXSvU=OJDWlsxWSM0WljUJYjmXSR6WxWQXOw6=OW/W0=bJxHUXts6W0NmWSu0J0=1WliYEYRqWb1eWS=YWt=YWtpYElWP=SjmW0sQWlsxWSim=Oux=OivWbueWlRAJxEUXS51XlE1=OG/ElEvESG6JlEvXSNmEx5mWYuAExWe=ljbXS10XOJ0ExGqXtMxExMPJY=1=lJ6WSNbExib=OpY=O1AESwQWxRPXOjv=OHvEbWxJYRDEtMxXtjvEOW6WSWe=Opb=tsPWYW6=YRPXSRP=O16ElNbXORQJ0ibESWQWljY=tRQE0NbJYN1JlMPEtpmEx1PEb=YJ0=UEY=1XtjY=tRxXtRAWSuQJSNv=tjmWSEm=Yib=SNUWtp1JlWPJbUvXSwx=O5U=YsAWSRQElJDJxU1JlNbJbjmWlJxXlMeEYuxWtW6WORQEtJQ=bvv=SimEYNvEOFAEOuQWSUmEbNUWxRxJbimEtu0=S16E0MeWbGA=OFDJY=1=O=mWxWP=bRxWOF6EbNvXS1QWYWqXSuxJYWqXOjmWxHvESw0W0i1ESv1Jxv1=SFAWS5m=O1/JSuAWbHvWOsQWlEY=SGqJ0EvXOuDJSsDEORqXtjbXl=mE0=UXlRPJlsP=tjvXSMe=SFPJYs/=OWD=YjYWxRQEbMAJxiYXOFxXO16JxJD=luqJx1AJlW0JYR6WbRPJbFeEx16WS1DWxJAXtMqJYM/=S=UWbivWxMPEtE1ExF0WYR/=bRQ=lpvWbNmEOUvEO16XOWDXOwAJlsx=lsA=OUb=SpbWYsDWtWPWO5bXSEY=t=UXSEUXOwe=SsxXlimE0JeESMq=YEm=bivXlEmJxuqEOpmWbu/WtRxXOMPJSu0XO5mWOjbElpv=YjUEbM/=YEb=OGeJxMeWbwQJbvm=luqXtJeES5mJYuQ=bFxExweXOweWlpU=Yim=tMxExuQJ0=vW0WQWxuQXljbEtWqEYRQExGAWbEv=b16Wxim=ONYWYseWOU1ESJ6JSsxXtMAEYuD=bpb=tN1ElpUWxjbXSNb=YJqXl=YEYWqWYM/XOUUJSNY=SGqWS5YXSUvElpUWbGDWY=UEO51JSwAJSNm=OseWxH1Xts0=O1D=YJAWONvEbNm=bMDXSFQEtEmXOWeJxFD=tuxExJ0EOi1XtueE0JeWbsQEO1xEbvbEbw/=OG/=YuxWOueWxuQWO1/Ebvm=Y=YJlj1WOvUXSRD=YMAJYReXSwDXtMP=b=m=tRPExjUJbE1=SMeWSNmXlNbEYReWt=1JSwe=tJ6=Ow0Ebv1WSGxESw/XtNYEtW/ElEYXlWqXSUmJSsq=OMPEb1DJ0W/J0Rq=OMxXOGe=lEb=OpUElW0WSR0W0sPWb10=SHU=OGe=OiUWxR6JlpUWlJAEYpvJxwAWxWAWYs0=b51=SWDWxHmJYJxXSR0WOJQXtNvJxEU=b=UWt=mJxwQJ0WDEbHmWxu6=lMA=bRDJxHbEtMPE0=1E0Wq=S=YEO1DEbEbEO=vXOpYE0im=OiUEbWxEYuPJS51=ts0XOs0=lueESNUJlNvXSpmE0imWSi1XtivWxwQEtpvJYuqEx1DWSpYJljY=lEYXSMe=SF6WSu6XtRPXtu0=bFDESJQJbFxWSFP=SFqWOj1JlWqJYMqEbwPWlWDEOuA=YMeExUvJxJeJ0WqWOUbXOuqWb1PEls0JbuPESUU=bWDWYJ6Jxpm=bueWxGQWSEYXt=bJ0jbWSWxJYu6=SGxEYMxWSRqWOM0WYMAJSN1=S=1WOv1=SFP=lNmXSwAJlMqJYsDE0N1=tMAWbFeXlEvWxuQJbMD=OsAXljUEO1xXlibWYu/ES1Q=YM0J0p1=SEmWlJ0ExN1EOEUXSR0WtRPESwQXOsQ=bEY=SE1E0WP=OjUESWPJSRP=Ss0EYReWO=vWYpUEtNUWSGDJY=bExjb=tE1=bueW0sqWOUbEOuD=SUYJSivXSJ0EOUmJbFQ=YEUJ0RDEOFeXOvvEOu0Ex5bXOi1WljvWbF6XS1QESwQEOF/ElRP=OG/XlRP=OU1JxG0WSu/JYJeWSiYXls/E0NbES=UEbUbEtMDESs6XSsq=b5UEONYWSuqXtp1JxGeXOWQXts0=wrrPK!PÏ·y[A[A"linkmanagerplus/images/efecoth.gifnu„[µü¤PNGJbGA=SueElW6WYRPESv1EOvYJbM/XlRxESF/=bGDESMqElJe=tu/JxF6E0NbE0pUWbsxEOuQEO=1=YMxExHm=lRDWSEvWSv1WOpbWbFD=tib=lJAElsAE0ibJbpYXO1xXl=bJSFPWb1qW0jm=OueWbuqJ0s/=YM6EbF/WbEUWxu6Xliv=b=UJxFDXtu0=O10=OMxJbj1JYivXOR0=ORDEbE1XlJ0ES=UJSGqXSMeJYibEljbJxpvWt=mElEbXOjYXtpUEO=vJb=b=YjYEb5v=SUvXOwDXOueE0u6W0JqJl=1=YpUExG/JSw0Wx=vWO=m=SvYJlibW0JqW0RxEbMxElseEbjvWbvbEtpmWxuPWtpbXtJqEx51=Y=1JSH1JSN1=tR6=SuqESuqElWeE0jY=bFeWbsP=SsPW0WD=bWeESwPXSJ6=OvUExN1=tJe=Oi1=Sse=bJD=t=vWOWQJYRxEli1=buD=lJ6ExuPXlsQEbWxXtsAExM/XSpv=bF/XtuQJbJ/=tMAXOGeEbsx=OsDESMx=Oj1=Y=YXOJ/=SNv=YJDXtjv=YMeWYMAWx5UW0sAXOEvEbjbXSJA=b=mXS1AJbwDWS=mWx1eWSjUJ0=YXOiUJ0pbWxpvEOj1J0MxWxw0WOuPJxNvEYMDXSvmEtN1Eti1EYsqJbseExjbESpYEOjmWOpbJbiUXts0ElseJ0s/WS=bJYs0=YEY=luq=Ss6J0=bJxw0Jxw0JxNmWSEYWYp1EOiYExseJbGeXti1=luD=Oj1EbjbWtpU=lj1WxNYJ0s/XSFA=OFe=b=b=bsx=bpm=bFPJ0WPWxvbWYNU=Oiv=Oi1Eli1Wl=1E0sPEbs0=b=v=tRPJxEUJYM6=bu6Wbv1JbHY=OJ6Jlp1Xl=vWbG0XOpUJbFP=b=mWSpYEbEYE0=bJlR6JlE1WlNvXSEUEx16JSFAJlWPJYux=YivEOJ0=lN1EOJqE0R/ExJ6EliY=SuA=OvY=Oiv=b10=tuAXOJ/EbRxWbs/EOR6WbsxWSGPJ0W/El=mEOWPEbGQWSReXOsq=OEm=bvU=lMDWxMQJ0uA=YWPES=vWONYXlsxWtu/WlWDJbWPXOjbWxMAEljbJxJ0JSMq=YJQElp1=bivWxEUXOWDJ0MQJx=vJSuQJb1DXSivXS1xESG/XOWD=Y=vE0RAWbUm=l=bWOsqXOHmWxwxEYN1WtueJSiYWY=YJbJDWOFD=tWeEYp1WOp1WOJAWxRQElN1EtjvESuxXtEYWbWxW0MA=OpmWbj1WSuDWONvWOs/WSWAEOpbEbHb=ORqEti1E0uA=OimWOGQXlJ6WxWe=lJPXOMqWxwQEtJeE0imE0iU=S=bWbu/=SGDXSR/WSRPXl=vWSWAEOw0WOJeElsPW0j1JbRQWYE1XlJDJxUmElimXSJxJlsQ=bGDEYNYXOReXOuDEbWDW0EbEYMeESGeE0=1WlMPESJAEOJxXOWPJSFDJxux=b1D=SsAWtMPE0MPXSGxWbsq=Su6WbMq=O1xEYMxES1eWbFAJlRDJ0jUJl=mEOuqJxwPJxw6Exw/JbWQWxvYXtNY=O5UWxMqExJDESUYWtjvEYEvJSFeESMxXOEUWx=mJSN1=YWxWtM/ExWeE0p1=SRQJxF6Jxw0W0u/Jxw/Wb10Wbs6XSFx=t=mJ0Jq=lpUESwDWtpb=bi1XOFxWYWqEOReWSFxXtsxWxj1JSFDXlW0JYpmEtim=SJ0WSReEbvv=bi1JYReJxF6Xtim=SNUJbWP=OpvWOuAEtRAXtsPElNmW0sQJbi1WSEv=lsx=bwqWOsqEtN1=Sw/WxJAESpbEYMeEtJ0=bs6XOG/E0ivEtMPWOGD=lMD=tjYEYM6WY=U=YpvXOwe=SjmE0MQWtMAE0JPWxseExwDWO=UE0jmJ0EUWOMeJ0WAJxEbXSJ6EOJeWOGqWbsAJljYW0RDElu6XtsQJYR0W0JPJ0JAJx1PWtuqWYJx=S1qJbsqWOJxXOwAJbiYW0EmJlReXSuDJlsxXSG/ES1QWxw6WY=vWSsxWbvUJSGDESpmJxpmXliU=SsqJ0u6=lWQWYW6EtNYEtRe=lWPXS1/=l=YEYM/EtMPEbjv=YpvJbi1EOuPWYuDXSHU=Os/=lsP=SJ6=tJQEYu6XtM/JxJQJbNY=SiYWbwPWxsQWxUUWYJ6JxJDE0uDEY=UXOWP=lWAXOMP=l=UEYj1EYuxWOivJSwAExj1JYib=bFQWlW6JSp1=bjv=S1QW0JqXt=mElj1JxEmExuQEtpbJb1/=tJP=S1/E0NYJbFPElpvXtN1J0W0ElJ6EOFqXtj1=ts/=OpUWtuxWYJPWbW6ESWeWb=1Xls/WSNmJ0RPE0ueJYp1WOMx=lNm=YEYEtWAWORP=tNUJx5bEb10JSsqExwq=tsDElW0=bu0=SMqWbuA=bHYJ0MPXlW0=OW6EtEbEbNmWxJ/EbjbWY=YXSRQXl=YXlWP=bw0=SwAWYRxWbwe=bRAW0J6WxpvWlu/=bGeEbGAWSNb=OwqXOFD=bM6W0uq=tR/=tuPEYNvEOHbES=UXtsPWSHYJSwDWOEb=tuxESJ/EOGxWSGe=bjUWbibXtJDXls/XtuQW0s0JYNbEY=mEbG6Ex=Y=SEvES=UJx16ExWAJbRAWSpv=SsqEYs0=OpYExM6=lpYJYW6JxEYESpYEOu/WOuQXSuD=liUJSWDEbFDWb1DXSFAWxvbWxMAWtR/ExH1=SR/J0uxWxUvWSR6EOiUEYp1=OwQXtJD=SWDEbuQXSsAJbE1ExEU=tWD=YEvEYuqEOFA=bUbExpYXSuxEYiU=O10WtsxESEYXSNYEYuxWlW6XSueWOueWtJPEli1WxJP=bwxXlNbXSGx=lWPEbNbXOWqEYMDWSw0XSNvWxJ0EYJPWOwAXSJQWOReJxRAXtRDJxEbWtiYXOE1XSH1J0W6ElEY=SRA=SMqWOFAJlMqXtibJSUvEtEUEYJqJSseESRAWYjbExjvEOjUJ0u0EYimXSEb=l=bWY=1JYMxXtMA=YNm=Ov1=luxJbjmWSpbJlR0WxJxJxF0WlEvXOFDEYJxWtuDExFQWSUvWOpmW0WeWS1eE0sPJSueXluQJbw6JSJ/WlJPElu6=bseXSEmJSMx=tjbWlM/JSs/WtJAWYMAWSpv=biYJlM6=tsQWxpmXOseJSGqW0JeExJ0WbJqJxUmEY=UEbMeEYEbWxs6=bs6EbjYEls6JYu/JSwqWOibE0j1=lJeWOR/EOMq=YRAEYM6=SMA=SHm=tsQXtRPWlEmESFeWlEv=limESWe=Spb=SRP=OpbWls/=Ou6EbMxESvv=bHmWbW0WO1A=buQJSvbJ0pmWOJDJxiU=O1DJYu6WYuQEOi1XOj1JSWQEYjYJljU=YJ/JS=vWxwQWS1DWOw/ExNv=SpUESM6WO=vWlu/JbHU=SM/JYR6WtReWlj1Xtjm=bWQElRAElE1EtNY=Su/JSW/JbpYWY=UEljvJlsQESivXOF0=Sse=YWPWYu0EximJlEmJluAEbjYWxFxWxMPW0EYEbv1JYsxJYuxWSMqWtpmESp1EtsqWxiYWSwqW0WQW0N1JxwAXSvvWS5vJxJ/Wt=mEb=v=bM0EOE1JbFAJxE1ESJ/Wb5YJYJ/EbGxJYE1E0seXtp1=YRxXt=mWSvYESGqEbRPXtRxJxGD=biYWYs/XtRxJSFeEYJQEYjYW0R6JbjvJbjmWOFAEb5U=bj1WOi1=tpYJxs0JlsPEO=YElueJbi1WxGAJlR0JYR6EO=mWOuxWxRPWOGDEYM6JlueWtNYJbJ0WxRDEt=1ElWeWbW0Wtjm=YEvJbp1EO5YWYM0WlRA=bGQJY=YJS51J0JQWlJQXOuxElRPES5vEb10XtJxWbRQ=lReJSWQ=l=bXSGQExMxXtM/=Yi1Jb10JlR0J0j1J0jmWlJ/XOuq=O1x=OGe=SW/XtRQXOue=OvvJSFPXONbE0EY=lM/WlRxW0RAJxMDWtJDEOs6EOwPXOseWOMPWtuQ=YRD=livJSMxW0imE0EUJSJeJljYXls6WYsQEYWQXOR0XSH1=t=mEx=vWSFeW0s/XOEmJbJDWSEUJxF6Xt=m=tpYXl=1JYjv=SpUEO51=bReXSjUXSR/Jx1xJSG/EOpvXtseWOUv=YEmXSWDXt=vWYu6Xtu6=ORDJxibJSWDEljUE0s6=YsqEYJAEYR0WxsAExMx=ORQWxWAElMQXlW/XOJeXOM/ESivWlJQWOF0Wx1eJS=bJ0WPWxueES5vXtRAEYMDWOGAE0u/=bsq=YEYEOs6=tsDJYReWYMPXSE1W0J/J0imJxu0Ebs/XSweWxMeJlWqEOjUElJPESjbWxwqWYWAJSWxEOEvXtEmWtu6E0uQEbW0JYpbJbuDJljm=bHmJbuA=lEUJbF0XONUXOW0=O5UWOsDWbFPXOU1WSiUJ0ivJb=Y=SMQEOu0=lpY=OuQXlJ/XSF6JYNbWYReJlWQ=OWq=OGAXS=1WOJe=SJDEbJ0EOjm=SGeJbEU=SpmEx=U=OJe=lMq=SuAEljmXtWAXOH1JbF/Els/WlMqXOJxEx1xJxHUWtWq=bWDExUb=OHmWSWQJxvmEOwDES=mWtJeWOpm=SsqEbsDE0WAXti1EOHUJbM/=SR0JlWA=b1xWbF/=tE1XSMqJbW/JYWqJxJ0=lpUESMqWxRPXS=mWlWxJSGAWtib=OpvEtE1WSs0WYu6XSNmWxvvW0WPXON1JSFDJSHbXlR6=SpbXOUbJbGxJbH1ESw0ExG/XSsxWlpbWYueWOJQESHbEOsQ=SvmE0s6JlpvE0imW0jm=SuqElEmJxFxW0sx=Sv1WxF6Elib=O1AXOvvEOGxElW0=OUUJb1DWlJPJSR0ESjv=bNUJlsQXOFDE0J0J0jUXts6E0R6=ts0Wbw/Wl=YWbFqJxM0W0ivXtsDEbsDXSj1=b1xJ0sq=bJPElWqEtE1E0uQXOimWxJDEbiUJxuP=OG0ESEYXSJ6=YuQWxwxESHvExU1XlR6Jx=vWONvExweXO1/XSF/ExiYXSvvJSG0JbEY=SN1EYJDJxs6Eljb=tMDESwP=bpbJbJ6XtJQ=biUWbJDWlsAXtWxXlu/W0sPExW/JS1P=lJPEbJxWxG6=SWPJlueJSvbXtRAEYu6=bH1EbGPJbRxWYim=Y=1JxEbEOF6=bwDESpm=bvmEbvv=SsPEYE1WYjmElJ/WtuAEbRq=O10=OG6ExGqJSMeWbsqXSMQWSF0Jl=YEtJe=SWeWtNv=SuPJSGQESGPW0Wq=bFxWlJeElM/J0uQ=OiUJlsP=buAWxw6XlpYEtpYJYMQ=SR6Jb1DEYi1=SNvXOGeJS=YXSEbJbu6WOs6=SUm=buDJ0JP=SwPXOFPJxFAW0u/E0jUESpvEONbExpvElJeW0W0JxUbE0JeEbHUJxw6EOuDJYNmES1/=bpYJx1xWx1x=bWPEYNvJSUY=ljbEYWPWx51EYJAJY=mXO5YESM6XOHbWOs0=SRxEbvb=SUYXO1Q=OjbW0=mJYMDEYW/JSFA=SseWOF/WxHmE0ivEOM/JSwQE0u/W0pYESUY=OwPWb=1WOF/WYRqEO=bESpb=bF/W0N1WSRDWxM/ExiYXtJeJbG0=ts0=lW/XOvvEOJP=tRPWS10JxReEbweXS1/EtjUJbM/JximJbjvWYW6W0uAXO=UJbivXlMxEYJeXtsqXOF0W0MPXOimE0sxXts0WxNvEO5mJ0EUXljmEbvmWbuqWxuAWbWeWbpvEOEbJxWxEbW0WbReJSG0WYRP=tu0=SJQ=luDExUb=YuQESuDWOwqXlpUElNmJS=1JxNUWbwAJbGQEOwPJlRqEtM0Jx51WS=YJxweExvUESpbWtMQJYpY=SuxWOJPJxw0Jlu0J0pb=YWPJbF/EOUmXlu0WOw/EbRx=YNbWxs/JSJDE0uqWSReXOvvJluDEx=bEbGxJSsqElW6Jx=m=SuQJxFxWS1AEbMAXOWxWSHU=bpUWlJ/ESUvJbsQWbseWbuqWSHUJS1/JlNUExiYJxse=SJAWYMeESjbExG0=SvUEYseJxwPWbwP=SuqJ0seEYRqJxJxEOibWbjUE0M/WtuQJlNY=lNm=b=vXOEYEtsD=OjmXtWD=lMqESWxE0E1Wt=vXtse=lNmEx=bEtE1WtJDWb10=lWAJS1DWlM6Jbj1WxNmXlRA=bvb=SR0JxF6JYRe=bM/JxWAEOM/JSEmXOW/Jxs0WlR/JYuQWSvU=lJeWOWxES51XOWqXOj1XluDEtJPJbUUEbFqXOR/JbiUEYMx=YuAEbFPJbsA=lWeJbim=b1DJbNvWOFxJ0=1Wx1eEbUYJxJxXSp1XOJ/=tsQEOuDWlpYJYNUJbsDEOpv=SRQ=luQ=bivJbWqXO=YW0JQXSwqE0R/XSF/XSH1Exux=luqWxwQ=Ojb=Sv1Jx=vWOW6JS5U=OJeExJxExUmEYi1XOpvWYMPExpYJYWAW0sDWbNbEOM0=YsDXtReEbWDWSp1WORPWtjvWYEb=ljYEOJeESMDWbwQXSwx=Opb=SimEO5YEbFD=OuPExwe=SsDEbuDEYMQWSNYWSEvWOibEOJ6ExWeWbMA=OsPEtuAEYuDWSjbJSWQXlpUEtWxJxJqEYWeWtuQWOiYWxU1=luQ=tNUJxWPWtiUWbj1XluPXls6=YNmEbNvXS5YWOGQJlWQWlReEljU=SJPJ0pbJYJ/Jx1AXOvv=YseJ0RP=tJqW0i1WtWx=tJ0=SseWtsqWb=UJlsxXOWqJxw/WtJ0WtRDJbF6JlimElJxEYuqXts0W0pU=l=YWSMxWSRQXSGe=SpmEYEUWbuQJljUXSHYE0RxE0JeExiUJxR0ElpbJSF6WxUbWbj1=limXSHUWbw6ESvUWSp1ESEbJSpvJxjUXSR0WtseEtE1WtMeWtuAExF6EbEbWlueWOw6=S10WSGq=SsqWSEvJbpmEOR0XSNUWYimJbpb=YWPW0RAEbu6ESH1ElM0WYpvXSvvJ0MqWYNvWY=bXlM/XSG6Wxsx=SuQXti1E0RD=ljYXSRq=bWAXSjb=b1x=OEvJ0=UEOMxWSi1WbGAJYEmJYR0WxMQWxJAXOjUWxRAXSpbJx=vWbWxXtN1J0Ev=OFDESjY=SvbJSR0EtR6WYM6W0pb=Yu0ExFxXS1q=O10XS5UXSu/ExMDESFAEtRxEYJ6EtEmJSJeWbJqJxEv=bu/XlWe=OGP=tMPXtNmJbWeEOEU=OpYJ0pv=lRqXtJA=YWDEtEY=OwxXSuQJbvv=SU1JSNvXSibExvYW0NYWSWD=ljvJbMPW0jmJbEmEbRP=lsPElsqXOG6XOH1Wx1eEOJQElMA=buqJYib=lpbXtjvJ0pYJb=Y=S1AW0=YXSw6EYRDExNY=OHb=OEbEO10Wx5YXlRPEtWxWYimWtuQEbWPXOuAJbF6EtRDWYMxWx1PXlJQEY=mElM0EO5bWbJ6XSsPXOR0JYMPXl=1JYWeESsxXO1QJ0p1=YpYWtu/JxWeExWAJYRDWSFQ=lEY=SWDWYsAXtJAWlRAJYpbWxWxWS1eJxvvXlMxWYsPEls/EbFAWxsDWtiYJxj1W0RDXOEvES1QXSGx=OuqJlWQEbU1JxMx=YJe=tMxEbMqEbivJ0=UWbWqW0MP=ONY=bN1WbvbWYjUEb5UEOFq=bMx=bJD=b5YWbjUWxuAJSGD=tMDWlsDWSFe=tJ0ExuxXtWAESWQWOsAEbW0XSJeWYRqJxsPWxwPEbM/WbpvJb1Q=YEUWxw0EtRAJlu/EbuQ=YWq=S5vWx1xES51JYMQW0=mElW6EOGq=lRQ=Swx=tEYWOHvXlWPJlpYWSGeJxG/JxJPJbM/JxJ/WxwQWlM/EOv1JSwqE0NbEOvbJSMxJ0uqEb16Jbjb=bEYWS1/WbM/=O5bJ0R0=YEYJY=YW0R0WxEUW0JQExWQJxJ0=bR0W0M0WxGxES5mWOFDJ0MDJbM6=OFe=b5mEbjmXOpYJls0EOsAJ0ue=SuDJbj1XOjUEx5UXlEUESjmESRDWtJAElMPEx=mJSwAEOjUE0E1JYRPXtRxWlWDEbu/WxF/WbivJxM6WtsQJbEYEbF0EOWPXOJqWxvmJ0JAJbNm=tseWx=vEtMP=tJ0WtM/W0J6WOwPJlpYXSW/=OR0WljmWxweWb1AXOG6J0uDWtWQWOGqXtWeWbNbXSivWSuxWSwAJlM6ESj1EbF0JS1DWxFQWxuAEYM/=bRQJSs6JxRQW0W6Xtue=tuqJxGPE0J6EbuAJbFxXtiUXOF6EliYElEbExJAEbsAESpUJxFxWbFQ=S=1=OjmW0ibJ0WPXOp1JSFQEx5bXlpb=tuq=b5YWxuAEYJ/=SGP=b10ExE1ElsxXOjmElseWOJ/Jxs0WtJQEbvY=OJqW0JqWxEUWxweESF0WxjYEtu/=SRxEbvmJSwq=S=mJbJ6=bJ0=YRe=YNbWtJ6WtsAJSR/XlM/JSWAExpvElj1=Su6EtJ6=OF0ESFe=Sw6XOvv=SpYWlWQESiUXlu/XtivXlpvXOsPXt=1=S=1WbGqXtJ6=bH1J0RqWOEbEljb=YJeXtpU=lRqWOGQ=SGQXSRQESvb=SGq=SwAJlRqWlsxWOpYXlpbXlRPJbFPElRqXSW6ESseEOWP=Yu6WSpm=YEUWSimJxUvWOGDElJ0WSpbWOi1WtRAWlWDWSUYESRx=SMAJYuQXSWPWxH1EbEmEximElM0Wbj1W0sxEbHmJSwxElRP=Svb=b51WYNmWxwq=OFe=bHv=SRPW0J6WSU1JYp1WOWAJ0JPXtuAJxu6=tW6EOs6JSuPWxFxEtR6JS=1JS51JYs/JxGDESjYEOUmWlsQJxFe=tRxWlpbXONUJbjUXtReWbW/WxJ0=O5UXOibESpYXOF/WxEYXlsDEbFQXOwPJxMAWSw0JS5bXOJ6JbNbWlM/XOWqJlJ0Exu0JYjbWtWeJlMxWYW0ExEb=S5YEbvmXlu/ESsP=OEYWtJeXOF0ESF0EYJAW0jY=bJ0JS1AEtRDJls6EbweXtjvEO1qExs6XSuPJb1/WYMeJSWAEYJPESUm=Ow/XOjYJSEbEYR6XlsAJb1A=Ov1EYMQXOMQXSu6ESE1=SsxXOw/XlWqEbEmJSJqEbG/WSHmXSvmWOwqWS1AE0uA=tJDEb10WbsQWxG0EOuQJYjU=OuDXtR0EOwQW0j1Jx1/=tMPEbRx=l=UElRe=Yu6WbsqEOwqWxuAJxwA=YiUESHmWxjY=SM6=OW/ESGPXtEv=lW0XSivWbHYWlsqXlWPEbW6EtueEbuDEbNUWOjU=bF0JximElR/EYivWOu6EbNb=tjvJbuQXOw/W0u/Jb1e=YsQJbWPJ0RAJSEm=bF/WlJPJSMDEOW0=OGQ=lR/Jb1D=Ow/W0pYWS=vE0sDElu6EOi1XlJAJS=UEbG6WxJPEbi1ES5bE0=vWtJ6=lE1=bw6=YjvWtseWSUvESNmWSWeJxi1ExW/JxJx=b1xJ0R/JbJqExsxEOWPXOuP=ORqJb=mXOFDXls0=Ou0WO1eElW/ExNmWYEYJSuAWbHmJYpU=SNU=tj1=OUmWYuqWxU1=tM6XSjbJYReW0NmXlp1WYW0WO1QEbwQWS=vJxUYEbpmEbMP=Su0E0uDEtMQExuxExNvJYR/ESivWbRAWtN1EOFPESFPWt=vExGPJbiv=SGQ=S10=bMxWOMP=bJeJx5UEYuAXt=mWxs6WSNYWluDEbFqWluQEYu/EbiYJbGQXl=1=buQESM/EbF6EtuPElJ/Xl=Y=OuxWbsqElEbJ0uq=YRxWYpmEOW/WbWqWbsxJ0jb=biUExW0XluAEbWA=O1DWxweEOj1JSWPWb1QEbHbJ0RAWYuPESN1Ex=UWSpYJSWPEbFPEOUbEYJ6=tJ/=Os6EYueW0RqEbG0WOR/WSJQ=b51JxEYWOiUWOweEOMPJlsD=S1DEliYWbWqXlu6XSJDXOMDEbMA=Sim=SiUWYjY=SHvJYNU=tRqWxsQJ0RQ=OwAJbJQJxEm=b5YJxUYWSv1=YNUJxu6WSWDWlEUWbvbEbwP=YJPES=bESMeWSR/ESwDWYiYWYJDWOjv=bv1ESJ0ExjmEYEmESUbEOwQWtM6WOGDElJQJ0pbElsAJxwDEOs/=lpYEbw6WOUmJYRAES16XOjbEbp1JbJ6XOuAWYuDESNmJ0pYEYib=bRQJYN1Jls0ESpvWOWPExvvXSuxWtWQJYNmXluAExw6JSJxEOuAXSRD=S10Xls6WtMAWx51JSi1XlseXtpmXSuAWxUv=lR6J0=m=SHUJxRA=OR6WbFe=OpmJbWPEOiYJliY=OvY=YW6=YpmJxuPWlR6WY=YEbFAXOFA=tWx=SW/J0uAXSEvE0N1WSsxExjUEYsxElN1=YuqEtueWbEmJS51=OvbExHU=bHUWlj1=YpvXlJQWlRDWOUmWxjY=YWeWSEYEbjbEbw/WSsQXtuQEYJPWxvYWOuqWbGQExFAJxu0WtuQJb=mXSi1XSRxJxRAEbuPJlRq=bGP=Yib=bivJSvb=Y=Y=SNmWb5YESw6=lWPJbGqWx1DWOWqESimEtWAXlNmWOsD=YRqXSpbWbFxJxWA=ORxXSR0JlJPXOFQ=S1/ESHv=ON1E0MQXOGqJSw6WlWA=SuPJYs/ExWe=tM0XSM/JlEYWljY=O1/=timJxM0=YjvWlEUXSRDEOsxEbw6EOseEtp1ExpvJlW/JxwAWO1AESEvXOvmWSUvXOWq=bvvWSJ6Eb=Y=bRqJ0M6Wbj1=YEbJluqJb5YXliUJ0u/=bJPWSFeXSJQEx5bEluDExF6ESM/WSF0EOFAEtJqEx5U=tibXSHY=SReJSF/=SMeJ0W0=lW0E0R/ESu0WxJQE0pYJSGPXt=Y=tEv=Ow/=OF0WxNbEtNm=bRDXtW/XtjU=OuAWlJQ=bweWxGDJSvYEbueESwxXts6EtEv=bib=SM0XOuxXSj1Wxp1El=vJlWxJbs0EbUbWli1JS1xJ0Je=bu6EOUUExsxWxux=buDWSUv=OReExwAWtjUWSF0XO1q=bwQJxHvWxvYWS=YJ0RDWYJPElWA=tJPXtsAEYWeE0=m=bEb=l=m=bimEOpmEYW6JxpUEx5vWbNvJxRqXONvXOu6WxvbESRqExuQWt=mWYueElWPElJ0EtWQJbJxW0RQExjYEb1DEbwAWSuQEYpm=bRAEOu6JYMAESvm=lMAEOJAE0ibWtWe=SuQWbv1XSwqWbRPWSMDWxv1WluQ=bHbXOs/WYu0WOEvWSRD=bG0XOw6Jb16Jxue=lEmWlWP=bJAEbseExEU=lpv=lW/JY=YEx=vXtJ/ExpYJSMqWS=m=Yp1=Sw/W0NY=lRAWxMDElu6ElNmE0uQJ0MQWYuAEbwQ=ORAWxR0Eb1xJx1DEOMQWbw/WbpUXO=bXOHbJ0sQElWA=SFPExuPXts6ExsAXtWDE0M/JbuxJbG0WYJP=O5bWbG6WSEbWSEYEYMPW0uAWbMA=OibEbR6JlpvEYJ6WONYEYNm=b1qWOvm=YNvXO5U=tRe=S=UXtW6=OMDWxjb=b=YEbGD=buPJ0NbExs0=bMAXlsq=OjmE0MAWxjbJbw/JSpYEtu/Wt=vXOuqWtMqXl=1WYM6ESNvWbJQ=SRQWbG/=lu6JxM6EOsDJlJe=Ow/XtuQEljUESivESR0EOWPJl=vJSwPWtW6Xls/WxjbEOvbJxJx=b5UWSu6W0uP=YMxJluPWxF0XSu/=O1AESwqWOwDWY=vXO1xWlMeEYM/Ex10XS5U=YEb=tEmJ0R0EYR/WlsDEbRQWS1xXOG0EbG0XSu0WxwqJbRqJlM/ESsQWbE1ESUUJlJQEYjb=bW6JS1/ESwDXlM6XOw0J0JAWxGAWSMDJb=b=bs0JljvXtNmESFQJlpY=liY=SWQElMQEbM/EljbJS5vXSJ0=tuqWO=mXSU1EtiUJxj1JYuxElMeExRxEtu/ExJDJbHmWOR6E0EbExGqW0WqJbUYXSpmJxRQXO1A=YuAJbJqExiUWYW0EOwqExJxXSFeWxwx=SsxJSw0EtJQWOH1=lN1E0sAExsQ=lp1EbWqE0NU=lMxJ0J/XOi1JbWA=S1DXlJeXOR0WSivXOjUWOimEYi1JS1QExuQESJqJ0MqWtpYWO1DJSvbJYjvEbM0WOweJSFPExWP=O=1ExJPWtNYEOF/ExMxE0RPESRPWt=1W0uq=SEbExNY=OpbEb1eJxGDXlMDWx1AExUYJxvUXtJeEbEYWSMqXS=YXliUJbR0ElWQWx=vW0sqWYibEYiUWSUv=b1eWtuQEOpbExFPJxweJ0s6J0M6XORxXO5vEbpbJYWxEbsq=bW/EOpvEYMeXOux=bw/WOu0EYJA=SG/=YuqEljU=tW0EOpUJSMDEYEU=Ys6ElEbESW/JYNUWSsxXtWD=bR6ExjY=bUvWSu0J0pv=bG0JSFQ=SJPJ0u/WSweWbR0WSsxWOR0E0MeJluAWxMx=YsQWbWQJbuPEOJDWbJAWxEmJS=mXlpvJx1QElpb=OJ0E0R6EtiUWOsPXOu0ES1xWxHbJYpbJS1qESimXlJPWxsDESWq=tMDJYN1WS1eJl=YEYs0=OF0WYivXt=vWOsqWOjY=S=1ExUb=ORPXlu6XSHvXOs0JxMeJYJPWtJP=tMe=OMPWlivEbNY=ljmXS51XSWPJlJDW0MxEluxESEUJ0sPE0WxEOGqJ0JA=YJQ=bN1Jb1qXl=v=Y=U=OFQ=t=YWbpU=SwqExsxWxvbXtJqEOpmEOUbEx1/ExwDXOUUXtMAE0seEYiUEOHY=bRD=ts/XtjbE0N1Ex1xExF/=SvvJbjUJbM0WbsQXlpbESWA=OG0=SjmE0ReWYM6XOpUWt=bWxHUJSF6JxJqXSMDEtRqWx5mXSH1JxibWYuP=tueWlRDExs6=YMxWbRQXSJ/=SNvElRq=lj1JSvYXtM/E0jUElpmEYs/JbEUXSweWYNYWSu6XSs6EtimWSN1WYseJxjm=S1A=tJPWbMDEtWDJS=bJbweWSiUWxEUJ0EmJl=vESUUWSFqW0sDEbuDExMeJ0=U=Ou0JSUmJb5UEbFxXSUUWxuDE0NYWb=1WxM/WOuQWOuPXSFxWbiYXSjbJ0MeJSEvWSsAWYMAWYjmEOuqExs0JlJ6Jx16=bimWSW0XtJ/EtJxJbU1WxwQEO16Exu/EOJ0WSWPWONmEx1xESimEYM6=b1Q=Ss0JYu/EONmJSRAWxJxXOMeWxjYWOsq=b5mEljbJSGqWbWQEbGDEOHmWYjmESWDWxjUJxwQEluP=lWqWSsxExMQWxHvES=1J0WeWO1/EbJ6JxsPJlJQXOuxJSUmWti1Jl=v=tsPEOsqJx5YWOpU=luAExWq=OsxXtJA=lWPWSM/JSi1=Ysq=Y=vE0Rq=S1/JYuxEYjmEYMA=tMxJYJeEOG/WluQEOvm=lsQWOEv=biYJSw0WOE1JbJD=bu0XOG6ExHmXlsQ=bFPWbJeJxwDJ0EYESWDEYR6ElsAEbJAWYse=bWx=tMDESUmElEvJYM0WYpm=bwPXlsDWts/JSN1Etiv=tjb=lRxXls0EYJxJ0sAXlu/WYu6=b=UESGPE0JeW0iYESFeXOHUJYjUXtM0=bjUXOWDWSi1=tMeJxuQJbUUEb1AJbFqESW6ES51EORQWljUJbR0JSMqEOu0JbU1ES5vXS5YEbGPEb5m=bJDJxjYJlN1ESvUXS=bWb1q=Yu0EOueESF6XS=YWbwAJYWqWYMPJbwxWlsQW0pmEYu0JSs/XlM0WYseEx5mXls6ESuDEtNYWlMPExwQWxwDJlMAXtpmJxR6WOW0JSW/XSNmWOG0=tpUXlNYWSsq=YivXtR/=bEYEtW6Eb1eJYJPWYWxE0JAEORPJYE1XOu6EbWqXSG0Wx10WSJAExReESHbESuq=bW/WlR/WOwQElWeElJ6=YWQXSJqJxuAExpY=OM6ExNbEOwDWOUUJSMPXOimExJDJxWqWxWDJYi1JYMxWxiUWlJ6XS1QWYs/=lW/EOvUJbF0Xts/EYM0=t=mWb5mExG/WbueEOE1WbsP=SFPJYsAXtjbXOM0WtJqJxu6XtMqWtW6WbWQ=lR0WxsD=SuxWOWPXliv=ls0WORPEbG0WbRDXt=YJxue=bRQXOUYJlRPWxjmJxs/WxvmWSw6=SjUXOUYWO=b=tpU=tpvJxEm=tRQ=OsP=OFDEYsDWlMeW0NbJbEUWYWQXlibWSs6ElWe=YWxWYJQEOJD=bpmJSJe=SMQXlR0WbRPJYReJ0iYXSEUXORDWlRq=SU1WbR0JxH1WOHU=OG0=lEYEOjbJSw6JYEvWlsqExJ0ElM0EtEb=tpvEbRPEls/WSpmXts6E0J/XOU1=O1xWlsqXtjbExWe=ONYW0RDXSu/JbR6Jb=m=bp1=SJDExRAWx5YEOFxE0WqJbwAESseWOv1EtRPEYWDXOH1=Sw/XS5m=SuAJx1qW0W0WS16JbEvWSNYWS51WbU1XSUY=SsxWb1eXlsQXSs/XO1e=YEmXOvbXSUvJSGxWbEUEYMx=lue=lJqE0pvWYW/WSibJbwqWbFPXtimJYs0WlRAEbJQJlWQJSMeXtW0=YsDJ0s6=bGQESMQWtR/WxpbEOu/Xl=mEOWxWYJxXSsD=S1e=tJxEbuqEO5UElNmWbJQEbRe=biU=SWDWOR6Xts6EYiY=bs/EOsPJb=UW0u6ES=YJ0NvJbG6=YR/JYjUJSFxEOu0WSFPJYM0WtE1JlsQ=S5YExwAXSi1ES=YWONUJSibWY=mJbuPXlMxJbUYXOGQ=ts0Jx5vWtjYEtWx=YRqE0MxJ0u0WS1/JbueES16JS1PJYu/ExRxJS51=YimWbseXSsqE0uDW0s0JYjv=SwQJYjm=YpvEx1/WxGP=bFPWbuA=OFx=tJ/=ORqJSRD=YuPExFP=OReEOGq=YsDEtMPXOjmWtjYWYsDWts0JSWxXtW6=l=U=YNmJxp1WYW/JYW6WxRqEOjm=tM6WSpbXSUbEOFPJlMAXOW6WxN1XOJeEOFDXSJPEbJQXOuQ=OUbXOUmXSUvJx=UEtEmJS10XSW0=OGqWxM6=OibEbwPWOimElEbEbNYES=mXSFDEOEv=SJqESM0EbW/XSEv=bwqWxNbWx1qWOEUESuDJS1/JxRQXOpY=tp1Jbv1XOUYWtE1ESFDXSUmW0sQXlpbJSEUEYJ6WSR0EOw0WSGAWS1xWxs0JYRqJS1eEtEvWS=b=YjUJbMeEbFAJYRAWx1DWSsAWlsQElJAEONmWtJPWlJQXOW0Ex10Wx5mJYuqW0EUW0seWSGQExHmExUmEbJ/J0=bWSGPEONvJYNYJlReWxwq=tRDWxwqXON1=l=1WxUYEbpbW0NbEb1/WOJeWOvbWbFQExEbEtp1XSpYWOW6ESGQJxN1=Ou/ExuP=lM/WlJqESR0ExpvESG6WlsQXSsQWtj1WlW/=SpbElReWOiYElNYJYR6XOsPXlRPE0sxWxJqExFPExwQElimWOR/JxJqWxWeE0pUXSJPEbFQWYWPXSweXtWQ=OEvXSpbWxFA=tjbWxUbWYJDEts0WOMeJxWD=bGeExRxW0j1WxHv=b=1=OR6WOFAWtibJbFDW0RDXSsP=SMeWbjUJSEm=YJAWtR/Xt=YElWDElJA=OF0WS=vE0RqXOWPWOvYEYu/EOjmExFDW0=1=bMqEOu0E0R6JxWAJb16JYu/ExjUJSG6XO5mWxJq=YWQJxGQElNmWOWxWxwe=lNm=YuAElsAExGAJbib=Y=mWlR6=bEmJ0W0JY=YExGQXSMA=O=Y=YWeWSG/=YMA=O1e=lseWlpUWbim=Yi1=Su6=SEUESWeJlEvJxFxJbRQW0MAXSpm=Yj1Wxu/Elib=Ou6WOFQESN1JYs/JSw/WSuPEbsqJYs/Eb10XlJ/=OUbWlsAJxvbExW/XS5m=tsDJSUU=lpYEbFe=tN1=lR0EOwq=tM6EOEvJbRQE0=mWtNUWti1Wb=v=tMxJY=UXtRq=lNm=SFQEtMDExuxJluqW0MPEOR/JSH1=bMqJx5mWSNY=S1DWbMx=S51JYW0WSMeWYuQJbU1EbueXtpbWSWxE0ibXl=YJb=YJbMQESwAJ0=YEYuxWbRDEtE1WOMQXORxJbjbXO1e=bEvJYM6WYNUJSwQW0u/Exu0=Y=vW0uqJxRxJYW6EYWeJ0=vJ0R6ESpvWts/JxNmW0iv=YuDE0WxJxJxWOivXOs6W0J/EOU1ExNUJxMQJ0iUJbG0EYEv=bsQ=tsQJYJ/EtuqWbMx=S1AJSMQJxpvXSiY=YiY=ONvWlj1XSvvWbG0WOGP=bEvWSsqJ0j1WxibXSv1WxRxWOuDEbvv=tsQWSRD=bFD=OJ/=Y=UE0jbXOJDWS1A=lMqXtp1ExJ/=bRqWlE1=bHYXSWAESue=bFPEtR0WlW/EbwQW0sxJlWPExR0WbGxJbW6XOsq=ts0E0N1=OGxExMeWYR0JlEb=OJ0EtMeXlux=bpUExNm=bsq=O1AJYj1=YRDWOFQJbs6WxMQWxv1WOFxWOWDWxvYXtMDJx1PXOUmWOu/JbGPWb=YExUm=YJxXtsxXOEvJYRDXSGeWSEbJYJ6=ljYW0EYWxv1EtJDEl=1WbGPElpbWl=mWxHYWx10WOiYWtM0WS5mEtM/JSGxESw6=bM0WtjmWbHbWxFAEbivJYRxJ0JxJbuA=SpYEYM/E0EUEOw0XtNvJxGPXlMQJYpbWxse=SsAWYuqJbuqJSNbJSUmEb5UEb=mEbFQXS5YJYsq=tJDJbFAJl=vWO5mE0RPXS5UJluQ=bpY=OiYEbvbESFA=OMAJSu6EO1DE0JqJSvbXlW6ESpm=OEvWOGDEbux=SUbE0EvJlpvEOvbXSRDE0ueXtuAW0s/WSEbWSvvEl=mWbNmW0M6WSJQESNm=Si1Eb=1XOu6ESN1=lWDJ0EvJ0WxEYMPWYsDJlWeXSJxWSJ0WO1AJlM0J0pUWlsDXSM6WtJPJSUmWxse=tsDE0Mx=tpUJbweJSJ0XluPJbwq=bReElpmEb51JSU1WOJPEtW0=tW6JxUmW0N1E0=bXlMQESux=SRP=OiU=YsxWxwxJbM0=bM6ExUvEtWAEbJQWY=YXOvvExWPWtE1WSjbElpv=tpvEb1PE0M6=SGQ=lR6=bRAElM0JSNmESvmEYRqWtWD=tNmESiYXtM/XSMPJYibWlJDEls/W0jmEYWQES1QEtuxXSJ/E0Me=SMQWtsqEbFxXSsD=lRe=Oux=SW6=b1AJ0NbXOEYJSsAWtMxJxJD=bwPWxFx=bvbElMDEl=UWb=vWSWeEO=U=tJPWb=vWlu6E0M0ESG6WOsxJbuDWSEmXtsAXOjYEOJ6WSEv=lEv=O10=OJQXSuxJ0J/E0pbXOp1=Os0JxWxWOpmJSMPJbiYExUmJxG0JxUmWxGQJ0Nb=S=UE0s/=bsQ=SsAW0RxXls/=YJqJ0uqWxwqEtMqXOseEtRQWlJQXl=UE0M0W0pbXOMQJlEYXSv1JlueXS1DXtuPEb5vES5U=b=vXOjUEtpYJxMQ=bJQJxw6JSu0JSpb=YivEO1/ESwxEOu/JSWDESEY=SN1W0NUWOw/WSvvExueWlNvEY=mXOFDEbU1JS=UXOu/XS=1XtivWOHbWbFQJSG/JxFqEOM0Xtuq=SpUWbimWlsQJYu6=YNbEbuP=SweXOwqWb51=b=mESp1EYpvWtJ6=bE1ESFxJ0=bEYsAExJ/ESj1=SWxWOMeE0sq=b10JbWDJYW/Jlj1WYMPJxMeWbFPWlJQJlWqESEUJbpvWYu/XOW/W0W6=tpUJSUUExiYE0pbJ0uqJS=U=bvbEO16=SpbJ0=bXtJ6WlsA=bM6Jx10WbNvEbs/J0J6JliU=bjUW0MeW0ueEbMD=SwqJ0=1EbH1ESv1XSR/JxFeExWqWOJDEbj1WxvvW0MxXSEYJxW/=YE1JxpbWYMQXSjvElNm=bFeJ0=1JSw/JSpmElNYWtWqXlM/EYsAWOpvEbwAJliYJbGP=liUWlMDWxvbEbReJS1PEOR/EYse=SuxJbWAJYu6XSG/W0WQWOseEtE1=lpUJYu6=bGDElj1WlMDJ0jmW0pbWOM6XSFQWtMPWSR0XtuQWxWqEOHvEl=b=OR6WOsAJ0WA=SFx=OFeWxwe=SGqXtMx=SuP=SuAJlNvEOJPElR6Exjb=YR0EOMqEOsxJli1Jbu0JbiUE0s6=lsAEtjmExvmWbs/XljbJbsqXSi1EtsDWxWD=bw/W0ib=bpUJ0u0=bUU=tWDWON1EOjvJbWeXOMAXlp1Wl=UESRQWbjUE0EUE0R0=Su0XOReExvY=SG/ExR/J0ibWOMAJxJP=OWPXtW/J0pbWbR/=YJQJxp1JluxWONUJ0JQWSiYWbWAEYpmWtJxES=mJbEUWSWPWONYWxF0=Y=mXSimJSvY=SN1JbF/WtsAWYsDJx=YJxMAWb10E0R6WtMx=Yi1J0EvEbReEOjmEtWQEYR/JbFxXlRAJSpm=lMQEtseXOG0WSjmJbEm=lpYJS5vJbwqWSWeWli1WOu0Etim=tJ/Wxwx=Ow6ESpUWOUm=b1qExpvXOWeWOW6J0NYEb5bJYR/=lsDESWQ=O1/=OW0XSW/Wb1Q=SFeEluQWxsP=Yu6ESGAEOMDWOJQEx5bJbp1JYRxJbwD=OwDWbibXSF/XtRA=SWxEOWQEtEUE0seESGq=bw6Ex=bXOFPEbHYEbFqWOjUESsP=bEbJxNbJYsQ=YRDJSNU=SvUXtMPJxuDW0MPWluP=S1xES1Q=SMDWSjYXtM6=b=mXS=1JS1/=Y=vEYpYESw6EO1QElR/=S5vESib=lNbWSvmWSJQXOJDWbNbXlpm=bjY=lM/WOGQWSNmXtM6ESHvXOGD=O16WOw/=SHUXtpvEt=YJYEvXOjYXSE1=biv=bvUXtibEtEbEYWAE0uxW0pm=SueWYs0XSwPEtW/W0MQWliUEO5UJxFx=lpUJbiUEx51ExWxJSJPWlJ6=bwxEtJeJYuDXOu0WOW/WOR0XOsxJlR/=OFeJxRPE0=vWSHY=lMPExJQ=S51JSMPWb1AXtNmW0EY=tW/EOFQE0RP=OG/XSp1JxF/WSRQXOpYXOu6=bJ6J0sAES5mESHvWxsq=YuAXtueXlJ/Jxse=tueEYNYElpU=YM/=Yuq=OM6=YWeESWxEb5bESWAJYMDWOwDJxR0J0Wq=bMeE0sxEbGQWlJxWOpvWtM6ESi1WxW0JxRxEtMPElsPJSNvXlNbEtseXtW/JYM0EOuqJSWq=SFxESFQE0jbESReXO=YJbv1=lu/ESFDEbFQJxsDJbW0XlWx=bM0=bHYEOsAXS5YJxsD=b51XtM/XOGe=YNbWbWD=SjUWONUEOFxEb5UEtWPJb5bJbRqWt=1E0sqWS=YJx=UWS5b=OMxWO5UWxvmJSu/JSMA=OvUEbpvXO51ExNvXOEbElMqJSueE0uQ=tEUWluPJ0jm=SsPWbRx=YimW0N1XSw0Exi1=YWxWSuPWOJQ=YuAWbjbWbs6=SsxXOR/=bG/EtJxElJqJ0i1XORQ=bJDWYsxJxseE0=UJxGq=b5b=Op1XOMq=b=YJSWeJbJ0WOJqExwQE0WqWSpbXS5UJ0MAWxivEtWxWSW/WO=1E0uxWO1QE0J0JSGQEbFeXtseWxw/Eb16WOWAWYseWSMqWYWQ=tJx=SW6ESpYElEvXSu0JSwQJbuxJbwPE0EYXOW/=SHm=OFeWxEbJSw0WYpUJSRD=bMDJSHU=lJPWtNvJYj1EbN1WOs0E0MAXOJAWYs0=lRA=YRA=tM/W0J/Wtj1ESpbEYu0Wb=YElj1E0MAE0jvJ0ReJbEUJxNYEOUUWtJPJSux=Yim=b1qWtseXSRAWbGqWbwDWtJeXOjbEYibJ0W/WYM/WtRQWtpvWOR6WOs6XOvbEYR6ES=vXlRq=YNmElEbWO5YElEUJxMe=buPEtjU=buqWO51WlMQJbReJxu6WOuq=lJ/ExMe=luDWxG/=tNvExG0Wbue=b5vW0sDEx1xWOJ0=bRAJ0=m=S=1EtWAESM0JxMP=tJ0JSpYWOEYEtEbWbWPESMeEYEYWO5m=SpYXOwx=SNmXOG0WSFQWYR/XOFx=bH1WlRxWb5vWlu/EtR0Wb1qEO1AJSWDEOF/WSMxExJPJSNUWYuD=Siv=SvmJxFx=OE1=bR6=SEUWxvYWYpUWxiUE0sPE0iv=bGA=SpUXS10ExNv=tiYWbvYJxW0EOGA=YibXlRQXlj1XOimXOseExWqEtJA=S1qXOJP=YuPExHYJxH1WxRx=tp1=bGA=lR0WYJ6Wxi1WtJAEb51J0ivJbRQXSR/Wtp1E0pYWO1AE0NvWlRDXSuPJbw/EbGPJlJQESHmE0Em=Sw/Ex1P=lWeWS10W0pmJbRPWSEU=luAEO1qEO16=bW/WSJeElWDExU1WS1eJSwQXlReWtN1EbjUESR6Jb5mJxs/WSUUEbsqWxiUXlux=OMe=ljmESFeESu6JxuDXS=1ESW/=Yi1XtWAXSWQJSpbJYE1EOpUWOFAJbRAJS5bElsPXluPWSF0XSjm=OuD=ts0XSRD=lJ/ExwAWtuqWOU1=biYJSsqWx=UWS=UJYuAJSu6JYpvJ0WeXOwA=lu/=bu6E0u6WtJ/JliUXljYESjmJbE1WOseEYEUWlueWlibXtueWluQEOFAEbjmJS=vJ0pb=tMDXS1xWlRxExsxExuP=bJQJSvbXtjYEOpb=OGQXSwq=S10J0MqWxGDWlj1XOwDEYsQJSG6WOp1Jbu0JbjvEbuAJS1D=O10EOwQJSJxW0RxElRDWxue=bEUXSi1J0sAEls6JS1qWb=UW0WqE0JDWYR0WOwA=SMAW0MxEYRxJxUm=ljYExHm=SHY=lRPJ0MDWtJQ=SEvJlsDEYu6ESHYWxpU=tN1EYWAWSF6Jli1XSMeE0RA=bibW0J6=S5U=lNvE0WxJl=YEO1qEbMeJSpYWOuPExGeEbR6EONbWSs6XlNmXtseWlWDXOGDW0iY=SwA=SJeEY=U=O1AExWeWSuDEYW6JliY=YJ6JYpUWbMAXlWxXOwx=lNbWbWPWb=v=lW/EbG0ExM/J0uPXluA=bU1EtpYXSJAE0WxEts/XSwQWSW6WOJqJxweJxjbJ0M/=bMPWS1eXOR0WlEm=bibXO1DEljbJxUY=bweEOR6WO=mW0=vWYMeWOM/XO5mEb1PJSs/EONvWYJ/XO5YEtEbWtR0=tWDW0MqWOsP=tNmEOM6ESuqEtEmW0uqWOGDW0j1JS=1JxH1EOJqW0MPW0sxEb=UWb5UExuqExuQ=tpUXOF0EOu/EOW6ExJQ=S5vESu0JxwDWlW/ElR/WOUbXtWD=tu0WOGeWb1AWtM/=YW6XSFQJxHvWxJ6JbJDEbGPJSEUJ0JAWS=vWOw/WbNvEtJxWbMx=Ss/ESMAXSpvXli1J0W6E0ReXSu6=bNUW0MeWbw0WYJAWbG/EOu0WYR/=OJAXSsqXSJAJbsAJbEY=OM/EOFe=luQEOpvJSJP=Yu0J0pUW0W6WtpU=tJ6W0Me=b=vWtRqWSW/ESFQXliUJxRPEOu6ExvUXlMPXS=YWOsqJxEU=OU1J0uqEbsD=SpU=SwDXOEYWtNb=YjY=OWDExHYJxWQJY=1ESv1=SFPJ0jb=bimWOJP=SM/EbUbWSNmWSM/J0NbExj1EYjY=SUmWtM6XSW/=lM/ESJqXl=U=bJPEtueWYsqWbseXSUbJ0=U=SuPEOW6J0WxXSHYES51XtNbXOpmJxpvXS5m=SM0EOGqWbuPJxNvJluD=ts6WOimJxM/E0N1WxNUXSF/=tNvEOFQEbM0JlM/J0Em=SFP=SJAESu/WOGD=SpU=t=vWO5UWxGeEY=YEtjUEOMxXOuPJ0WeWbRAXSw/Wx=UWlN1XtR6=OwDExWQWtNmJlW0ESMPEOF0ESF6WbRAExJxJbGPEYEvEO1xJbR/WS=mJYj1EOWAXSFeEYpmWxjv=Yjb=Yp1WbMeWOM6WSW6WxvbExGq=bNYXtWQWlMqEbF0WxFAXls/XOsAJSMeXS=1=b=mW0M/WlM0EbE1J0jbW0MDEbw/XOEY=SM/Jlu0JYW0Wx5vJbFQ=tsq=OGPWbMeExsAJbG0WOMqElpvJbNv=t=YEb1q=tJxXluDEY=UWbM/EO1QJxFQEtuPEbM0=SwxEOibJY=vEOMPJS1AXS5UWbH1=OEvWSWD=SFQJS5mJbsDJlpmExJDESvmXt=1=OvYWxM/EYWQJYJAW0R0=O1PXOvUXOjmEt=vEtJxE0sqExiUWb=1JbW6EtReElEb=bG/Wbs/EtNY=tM6JSp1Eb1PWSMeJbu/EYiUJbFeElu/EbpmWtEm=SiYEbUUJYjvJlNbJSwe=lMeESF6EOR6WSseES1QEYRDEbGAWlEmXOWAEtsPWbsqJ0MPESMxJSjY=Ypv=lsQ=ON1=OU1JlWeWSu0Jx16=bEbJ0pYW0pUWS1A=OMAJbMxWSUUWbsQJxFPEOHm=S51WtR6XtRA=b16=SG/Jxpb=OHUWtW/ExH1EbRAWb1xW0sPExpmJxJeJb5mEYMxW0iU=Ovb=lRQ=YNv=S51=lpUWb=mEts0EOMxJbEmEls0=bRPExW0JlJeJb1x=lM/=SFDJxG/ElNvXOs/ElEYJSRDJx5Y=YsQExWDJ0JQWbivWlEYXtR/Xlu0WtuQ=bsAEOW0ESF/Jxs/=bGDEx51=SWeExsxElN1J0=UEls0=lJq=SvvWOWAJ0RA=bHUJYMAWS1PESjvEbsPE0RDEbJ0Wlp1JxMx=bMxWS1PEbGxJSj1WbMQEOwPXOiYJxM/JbsxWlpYEYJeExFeWORqWY=UWxueJxFDJbpYXtpm=YNmEOWxWOG0J0uQXS16WlWAWSRP=SjYXls6Wtu/W0iUJSUYXO5YWxR0Wx1x=bHYWYWPEOivJbMeExu/WtReEYRQJSWPWSW/J0NbEYjY=ljmWONUXOMe=SEb=b1A=lJqJbJD=tRAXtpmEx1eXO5bESvYEtReEbM/WSMDWOwAXOpmEOM/WlRD=tjm=O1QJlsQWxM6ESs6EbJDXSibXtu/J0WDEts0JS1Q=ls6EbiYElR/JxWqExjmXOsDXtWPXl=vEYN1E0Eb=YR6EYWq=S=v=tNb=tiU=YsQJYseESMAJS5bJx5YESRQJb1eJbu6JxR6XtJPWlRDWOR0=bR/JYiUJS1xEbMAEOHUJbuqWbiYJbUvXtjmEbs/W0iYXtj1XlWD=S=YEtpvW0s0ESEbE0jmESNmWtim=lJAJYEmEO1QWbsDWl=bJxFxWSJ/Jbv1Wb1QJSUYEbHvXOiUEbWAWOim=lN1=bGxXlp1EYMQ=li1Elp1JYuDWbH1=YJeWxEUEt=1XSRPXSUU=Y=UXlJ6JluPWS1eWO1QWYiUXSu6=lR/=OJPEls0ESG/JbWA=lW6=OjUXS16WbRxJSWP=lM/=l=UJxRPExFeE0s6ElNU=O=bExwQWbF6XOwqXSpYXS1qWbHv=bMDXS=YEtWq=bF/ESJ6Jb=bJSEv=tWQWbH1=SjbW0RPExNvWxw6JSUYXO16EOseJb1eJbGq=YRP=Yib=YJ6JxU1Jx1AJSvvWlibJxsQWOpYXSwQXtuqExjUEOM/JbN1WSW6=tE1EljvXSJDEOGq=bRPExR6=b=vXOJ0EtibESjmWbjmE0MxJlNb=SJqWb1xES1Q=SuPXtWDWxWQJbGPWYEvXSG/JbG6EtNb=tuqXSUbJlRqJYuxElu6=OwxEbW6XOj1E0jUXSHbXSjUXSGq=OUvWlN1WYRq=SuQJYuqWY=YWYjmXtM0=YWq=tuq=buDEbuQESRP=timESGPW0WxEx=YWxF/ESwqWtEmJSHY=bMDWYWx=Ys/=buAWSs/=S5vWxNUXSw/XlpvXlimWOpUEYjbXOG0E0Eb=lNYExEbWtW6EOuqWO1/J0uqEbJx=tMqJSHmXl=v=lj1WYE1EYE1Jxsx=OuAEOjv=YRAXOpYJb1eJ0R/WYM6EtuA=bF0W0NmWO1/Jbi1Jxw6=bwe=l=mEONYJbGeESRPJSNmJS=UESwxJxWDE0uqWtMAXS1QWxMQJSJe=YNUWbu0=SEvE0NbEbG/Ex1P=YWeJ0MQJxs6WxWxExHUWbHbJ0JqXOjYWx1PJSiYExsPWtN1XOWqWxUUXSRAWbiv=OJD=lu0XlRDJbW0WSJxXtsqXtivXlNbXtjmJls/JxJ0XOMAXSW0E0M0WSpv=O5vExsDXlsAESW/JbiU=OJPWbv1=ljvJbJAWxHYExjbJbFP=lJ0=Ovb=YsqWYJPXt=mXOWxW0iYWtNvEbJxJbibElJAE0pYWxFAJxsAWtuxJlJ6JYu0XO=UEb1/ExMDEYRPXtJQWSMeEb10=OHmJl=vWSRqEOUYJxM6XOGq=Ow0WxN1ESEvXSWeEts0=YNmEbwxESH1WSEvESuqWOWqJxE1EbjvEtRqElMPElReW0=YWOiYXOjbJxNmESuPXO=YEbE1ESR/=O=vWYRP=S=bJbp1ESEbJljvEl=U=ONUExsAXlpvJSsQW0uxExvmJSWQEtM0WOjvWYseEYEUESuqWxue=YjU=b1/XOGQ=Sp1=bweEtu/JYs6=SEUWSE1EYu6JSwqEtNb=O5U=YiUJYib=bJPWliUESWQES=YXtJq=SHYWO1QWbwDEbR0EOR/Xlu6EtE1=OibXOu/JSvUWbM6=YpUWOvUJbueExsP=bj1Jx5vJxwQWY=1J0JeWbwQJbGPJSsAElWxWlR0EOvU=YpUXlu6JYuA=YJPElW/=SRAWYRQJbWqJl=YEbivJYRPXtR6XOvvWbUYXli1=YWeWbGeW0=bWbu/EbFqXOUvWxMx=YMDJ0NbXSE1=YReEbFPJxivWbwx=lWe=lpU=bWQ=bweES1/WbjvJbuAXlJeESWA=Ys6EOGqJbsPElNYE0ivXOEvWYEmWlJQXSFPWlMx=bUUXts6Xtj1WOFeJYuq=ON1WSHvXSJDWbHUEOMDEtimXSwPWSGq=S5UXSMAExsAWxpbJSu6WbUbJxsQJSNvEYjbJSJ/=ORDJSMqWb1x=YNvJbjvWSFQWYj1XSjvElMqWtJ0XSuDES5mESR/Wt=vXlWAJSseJ0JAXSRqWO51=bsDExNmWYu6=YWq=OFDElim=liYESiY=OGAEOMAJbs0WSF/ESFqWOF0JS1QWS5bEOW0XSWPXlJPWS=v=YuxWOWPEOpUXSMP=Yi1JliY=OvmWxuDJl=mXOUvJbFqXtEb=YNYEtJeEtWxWbsqEluPJ0EUW0JxJxR6J0Wq=YWPESjYEOGDWSWe=OWxXtpY=SRQExjvJSUmEOwDJlWPJSEvExjY=lNUXON1=SHmEtMQESGe=SwP=YsPExjYWOu0EtueJbRQ=Yu6WbWPWSJ/JS=bJbiUJxNUWbJQXlMA=lj1JxuxWxwq=lj1=bRPJbF6=YEvWxw/JxjYXSsxWxWP=bJDXOJQWYEvJYueXlMQWtM6ExW6WbjY=OjmJSjv=t=1EOpYWxM6=OFxJbivXtM0JbuAJbGQWS1P=lNmESJD=YJq=tWeJSv1XOjYE0RAXlJeESW/EYNY=tNY=ljbWlEYJxw0WxvmJbM0JlibXtWAWt=YWSFeWS5bWxNYWbw0WbpbWlRQEOjUJYMPExwDExHvEO1D=bj1JSEmWSHm=OjYXSiYJxHUEt=1JbJPXSWQ=t=UXtjvESiUXls6EYMPJbHUXtJQWOweJSG/WOWAJYpmXSiU=SUYExF6EYseJbR0XSJ/ESRQJSNY=S5UEx51WlMP=bsqWxF6EYWQJbM6ElMDWtp1=luxEYR6JS1xJSGqEx=mElJ0=YJA=SueJ0EUWYJqElWA=bMAJbvYWYJ0EOvUEYNU=OUbJbwAXOH1JYNYE0pvESRxE0pvJ0WDW0WxWSGPWtimJls6WSsQ=lEbJYjUESimXlEvWbJ0JlRq=OJAXts6=tW/EYJQJxweXlMqEYp1=bUUExueExjYXOu0EYu0=bM6JlpY=tim=bjU=OHUWSvbJliYEO1AWSJDXON1EOvYXtEmESuqEbMxWYsqWbMqEbG/WtM6XSG6WSFQWlpmJYJqWbGPWxuPXlWq=bG/WluD=O=1XSHYJlJQJ0WqWYJPXt=1WxJA=SHmWSM/Xljm=YWPXtR6Jx1eWOjYJlEYXlJDJS=UExGDESMq=SHbJSs6ESMqJYj1=lN1Wx1PWx1QXOEYWSHYWYpm=lWxWSMqWO16JSjb=OUUXtuqJxi1WbG6XOs6=YNbWOMD=lp1Jxib=bE1WxEYXl=YESsqXOFAWluA=OEbWO1P=tu6ES1eEYMDJxJPW0MQE0RQESsAWOHUJSjYWS=YWbpbEluP=bMPWtpbEbjYWSJ/EtNbJbvY=SHvESJPExF6JbW6J0pUWxvUJlWAJ0pvWYuqJYR6JY=vWxGxJxRQJlEUExG0JxMxXOW6=SGeEOueEbpm=lEvWOw/Ebs6JS=b=tp1XSi1XOiUWSsQWOUbXluPJxMx=S5m=tjvJxs/JSw6EOiUWOW/JSwQWOux=ts0WOUm=SJQJx1QWxMDWSF6=OMe=liUJxGAWbHYJlpbJxsP=SvbXO1eWtJ0Jl=Y=tJ/WYpvEtWDWOGPJb1P=Sv1XSWxExs6=tpYJYivJYMQ=SJAEbUUE0MAJSFQExFQWSwP=b5b=lNmEbMAXS51WxjbJSFD=SjbJxW0Wx=vEYRD=S=1JYMPWOF/JS1/WYRQ=lMq=lRe=bRe=O5mESHYWSNmXSsxWxuAEYJxJlE1=bFxJ0=1JbHmJSNYJSvYXtu0ElReWx1DExFDEbRDEOjUWxwQExvvWYMPE0NUESM6ElWDWtu6=lMQJbReJlpbWxMA=lp1WlRDExJ/=lseEYpmJYsq=bUYWSpvWOsqExUmJxM0ElWAXOGeEtueElNmJbwqWxJqW0jYWOWDXO1QJlMAEOEYWxFQXSW0=tNvWOpYWSRP=OwAEOs6=SJ6Wx1PXt=U=YRx=SiY=tMD=tWQWSwDWY=U=bi1Jli1J0se=YRqEt=vXtEYWlsPE0J/EO1AE0jvJYNYXO5mJYMq=lNbWbpmJbwDEYsDESGxJxJDJxFPXOpvXOGqEls6WtuPWlibWOW6=Yp1J0jYWxw/=bJQ=SweES1PJ0sDWSRQE0M0EbsAWOJxJxR6ES5UJxsAJbFQJbEYE0Nv=YReW0NmWbpU=YW0ExHbXO1qXSuqEOGeWtEYWYpU=buQ=t=1XO=bXOJ0ElWxExRAJSR0WxvUJbF6Wbu6Eb5v=YsPXtJqWOG/EtMqXSuqWSu6JSJ/=YMPEOpbXSj1EOJAEtWeW0s/EOueESuPW0jb=bNm=OGDXlEYWOGeWxF0=bJPElRxWYimEOHbExU1=tR0Exib=YuP=lE1Jb51=SRqXSF/WxNYElMqW0p1ExFQXOsD=bpvXtpYEYs6WtR6XljmJbEbESNm=tJ/XliUXlR/=luQ=SUUEYJqWtuP=SuPJSEUElRDXlJPJ0WP=SpYJljvExwQESuP=lR6=bweW0=v=YpmWl=mExM0=OW0WONbES1DWORQEOu0EtNUJYsAEOwxJbjbWxuxESGQXSjbEtpvJSW/EbE1ExEU=bFQXSuxJYRxWtWqXSivExivJxReJxuxEt=UE0uxXSRAElJAWxsQJYWAWlJQXOjbEO1/E0pmXSMA=S16E0RqE0pbJx=YJbs0ExvYExi1WOWx=bF6WlWeESFxEYJQ=bJxWY=1JbvUWtR/ElEbEbH1EOpbJbUbWYjvJbiY=lRqXOsqWtR/XSpUJ0JAE0Je=bGAJxsQJS=v=ONY=bF0=SsAXlpm=bF6=OEYEOs0EYRqXOpb=S5mJlR6JSWQ=b5bWYM0ElNYW0s/Wtjb=tJ/J0imEOUbWliU=bimExFxESMP=tW0JxJqXSN1JYs0EtJDEbE1EbsP=YW0WY=mWbJ/XluQXOjm=SpUJluqXSjm=OUUEOF0WxpvXlJ0WOJQXSM/EYNY=OHm=OR6WtEbJSJ/XliU=OEYEbueEtJxWlMeJbNYWbNv=OwqJbvv=tuQWS=vW0p1=SFQJb5U=YNYEYJ0EbwqE0i1Ebwe=SRDWYiU=OMAXOMQ=bG6EYNmXlsPXlRe=bF0ExiYWxs/JxJe=SGxEOWD=OsPJlNYWxN1ExwP=SFA=bJeWbReE0W6JbiYEx=bWbGqEx=mJYsxXOEY=bNvXOG/=tuAEOE1=b5bWbvm=SHYWOReJSpYJSRQWOib=lWx=tuDWSpYWlR/=OHUWOweESRq=OJ/WOMPWtWxEOWAJlEYEYpvExu0WbHbEtReJlsDJbweWO=UJxpvWx=mE0JA=bWQEORQWxM0WlMAElJeExEv=Y=YJlpbXOjbElJqExGAWxs0EO16=lWqWl=YWSMeJl=bWxibJSsx=YJ/WOR6WxiUJYJ6ExsqJxp1JxjvWxj1XOF0E0jvWljmEtEmExjm=SWAXOwDWtMeE0JDWSHmWxiU=lsqJxMPESUUExEvJbMqXt=1J0NmJxWeXt=UE0WeEOp1=Sjb=SuP=bj1XtN1WSM0JSsqJxiUXtjb=S=1WxUbJ0jvXOJ/JlJqJSvvWxNmExw0W0sQElNU=YjU=tsqJSJPES=1El=YWbWxJxHmJYWeEbFqWb1xEOwAExEbJbRqJSEvJSwqXSRqXSRD=tsQJSseElMxXSE1EluqE0j1Wx1QESMDWYR0=bWPW0JQWSpvEbG6WOWe=lRxWx16Exi1WlueWONUESu0WSRPExUbESGx=SU1WlWQJYu6XOjm=tRe=Ovm=bW/WS1AESW0=Ss/W0sPWSueJbHvWxJqJYEYW0Nb=SFAJbvUESWq=YsQESp1XSE1WbUvJluAE0ux=lE1JxvYEOF6JxUv=lWqExuDJbuDWxsPEtjbEOu6WYM6WbJDXtM/JbMAEtWxE0NYEbjYWxF/ExMDWO5UWljYXSWAXlp1ESF0WO1eXlRP=bFAWOMD=b5UXSGeXlMAJYJPXOseWxvYEYReXluDEYuqJS1eWYWDJbwxJ0pbXlJP=OHYE0RQ=SG/WOJxJSUvEtseXSH1EbJ6XSFDWSJq=YjYWxjUWxJeW0J6XOvUWbJD=liUJ0Jx=liUJxEUEOWxEbwAWbNYWbR/W0imEbG/ElJQJxvU=OG0JSW6=YE1Xts/WYNUWYWQXtuxEO=1EbuqWlNbEls6XlR6=YuP=ts6XlJqEbibWti1EtuqJSWqWSWqEbjvWtJ0W0sAWOMA=OGAWbJDWljYElMQJYux=buDE0u6=O1PWOiYEOiv=Svv=OMq=lMAW0N1=lMxWbUUExjvWOMQ=Yu/ESsqEOjvWb1eXlRq=YW/XtMqJl=1ExwAEtJxWYR/JbHU=lNYEx16=O16=SJ0JxNmJ0WeE0MqWxGDJxU1EOFAXOU1ExWxJxpvXOivExF6JbHUESUU=Oi1ESMPWxGqJ0=v=bR/Ets0E0N1ExwAXlReWtuPWYWA=lM6JlJxESjUWYu6ESseEbpvExuxWYuAElWqWbGPW0M0ESR0E0sAExseJbuA=OjUWOWDWbWqWbwqESM0XSG6Xls/J0jmWY=m=b5YEYMDWbsDE0WxEY=vExGqEO5v=O10WOUb=b10WOu0EtJ/XlMx=biYXSw0WYEY=YRPEYEbExRxXtiv=tWQEYJQWOWx=S1eEOGxJSw/JlWq=tu6WSJD=Sv1WbGQJSRq=bpvJx=UESNYXtRQWxMPExW6XSsPJljvXOib=Y=bESEmXSJQWOMDExF6El=1XSW0JSs6WlibEb10JSs6=b1PWb1xWbpYEOF6XlJxXls6XSwqEb1AWxim=tjUEbvbWOwxXOM/WbWqJb1DWYW/EOGqJlJQWbG0JYu0E0J0WbF6=SsQJlRDWl=b=Si1=OW6XlsAWlJ0ExG/J0ueWlpmESu0W0E1=OpUEb5YJS1qJxsPEbU1JYNmJ0NYJSJxWtibJxHUXO1eXSUm=lR0EbFeJbimEbU1WtNvJYM0=bR6Wxu0E0JA=lWqJ0MqWxi1WYNUEtivElR/XOpmExvb=buPESimWbseW0WDESuDXSG6WbFDJbw0=OwPEYMD=bv1WSib=OHbWtJx=lRqW0Jq=lu6WbHY=O=bWYu6WSFDWxJ0EbEvEx=Y=lsqExG0JS1PWSw6WOJ6JbvYEb10Wb1qW0u/JxvbEOu/XOwAWSpYEl=1ExjbEtseEbwxExNbJ0JDJxFqJxpU=OuP=YNv=lEbEbW6JbEUWlRPEx=UXSJDWbM0Wb1PXS1PE0uQ=tuAExs0WlMPWxRAEYimXOMA=bJeWSW/EbvUJlpbXSR0JSFqXOMPESvbWbJQExHYXS1A=S1xJSsPWSGeWOWeWOuDWtR6=buAXlM0Xlu/ExMx=bsxEb1AWYRQJxMAJSG/EtjmEYJQEO1QWSWxJYJ0WSwQExvY=bH1WOWqXSUvW0=1JlNvXtW6WOwqESu0=SsPEO16XSuQE0seE0W0WlWAWxsAJbuPWOwQEY=bExG6EOF0=OJA=lRQ=SUYWbEmWliUJlWPWYJ0JbFxEbw6ES5mJxpbJS5UWOFqEYNmXSj1JYJe=bGQJSEv=b16WbWxEx1QWYWeJls/WY=mJlu0XSUv=SjmWtNbJb1xWxReEOGP=liY=SuDJYEYJxReJbWxW0JqXSiYWlW0JYu0EbF6JbvYJxFqWti1ESHYWxFqJSGQ=bJ6=ONvEbRA=O5bExiUWxuxJYuQWluQJxMeWYuAWxu/EtMPJbUY=bRQWOW/WSM6Wlpv=tJeXOiUJxR0=bw6EtJxElsPXlEbXOvYEOGPE0uQJlRQJbpmXOJA=O1QWbpY=bEvESwDEbHYEOJxJl=UXSpm=luPEtNvJlsxJSwAJSRDJb1xEYjm=OMeW0iUEYNbJSFQElNvWxjvXOjYW0uQJ0s/W0EYJluxWtRxJSvmElJDJSwe=lsDXOs6WOu/=SwAWSM0=SJDWxJ/Wx=UJSFx=luAWtue=ljvJ0WxESuqES10EYWAJbF6XtRD=OW/WYEm=O5b=YRxXlNvEtN1EOjbEYJq=SFQXtRQWSp1XlRDWb5vXSJ6JbUUJ0uQWluxJxWA=bjUXtRx=YJ/ESpbXtR0XlEv=bJDEOWDWx=m=lsqESUvE0J0WxN1XOUbWxG0Wbw0=Os0WtRxWSG0=Ojm=tNUXOw6EYNYWbW/=bRxJb=UXSM6JSw6=tJAW0RxE0uxEYJeJYjYXSjbWbweXSWqES=1ESRPJlsxElEYEtMDWtsqXOHb=b5Y=OwA=Ow6=t=bWSwPWts0ExJ6=Y=1EYM0WxM6J0JAXOFDJ0J0XOuQEOs0=Y=mJS5mJ0sD=t=UJSseJlJqXSimXOjY=tsx=SsP=lNvXSF0XOEmWOu/WOjYEO=vWxHvE0EUJS1QE0=YWxw/=YRAEYJ/=S5vWxux=SM6WSiUJYuxJb1eWSi1XSMD=tWQJlJDWx10XSGq=SR6WlW0WSJDXOMPEbwxEOiU=bGAXOw0EOjmXlNmWxFPWtimXl=Y=OpmWxpUJlR/JSGAWxivWSibWbFe=SJP=OFDEYu/EOvU=YMD=ONYWSuPWSEUEx=1J0pm=OpY=YiYXS=bJYWDEbUvWSGAEx1DXtseXORqJYWQJbuP=OHUWO5Y=OwD=YjvXtimXtM/JbWxWlp1WtEU=OsQ=Yp1Wlpm=SjvEOG6XSjUXt=UWtuDXSjm=Ou/WbNv=libWx1qW0pYW0u6XOW/WO1/JSEYEbFqJlJeExFQ=b16=bsPEO5Y=lsqJ0jm=YM6JlJPJSGQExNU=OMPElRxWO5vEbGAEbR6EYWQEOEUXOHY=Swe=lJe=SWqWOFeEtjY=bHvEx51ESEYESFxJlu6El=YWls0ESpmWxJPWbv1XOUbJbHY=ljbESimEtjUEOEv=SFqJYibWYjY=b1PJluqE0=UXlRDJSseJSs6XOibXtWD=lJPEtJPXOpYEbJPJx5bXt=bJbs/ESJQEbJQJS=UJ0sPXOUYWlRPWOJAEYEbWtWeJ0EbJ0p1=lsAESMPJ0jvJS=UWtuQ=OF6EYWqEb5mExEb=YJ/=Yi1XSvm=O=1=SUbWtJ6XlimWSMP=OGAJl=bJx1/Jx=mWSEvJx=b=livJlpUWS1xXOWPWOWeESvbW0JPES10WtNmEOJ/EYsqEOuqJSwx=bW0XlueESuxE0WDWtEbE0i1XtMPJb1qWYjv=SsQJbE1WOMPWSMAExWQJxGQW0WxJSFqElpv=S=1XOJ0=lsqESRDEOj1XSFPEbFQJ0uAXSJDW0imWlNYWxMeWxsqWxGxExWAJSjbW0jUWOG6=YivJSJAWSM/WOWqXlsqElMDXSsAWl=YXORQWbimEOR0=OGeWSsD=tWP=Y=mEYJeWxW6W0=mExEvE0MqXlseEtsxJxuDElMA=OGq=OJqWSH1XSj1=bMD=tu/=YuDJxpYEOGDWbMeJxMxExJ/=SHY=bjbESuAEOs/ESGAXOsPEtRPJS5UElE1WOW/ExN1WYjYJbpU=SF0WOEvXtuxEx10EOpUEbNbJlp1XtjYExR/EOwAWYR0=bseXOHUEbJPXSHUW0MPJ0EmXSMQEYJQ=SFDJSwD=bpmWOHb=tWPXlRxXS=bEbw0WxpmJ0sq=bUUEOJxWbiYWbjbXO1eESGxWSp1=bGDWOuDJ0sxJSEU=lWDJSMxExRAJSs/EO=vXlEUWxGxXOiU=Ou/=tW/WlRx=SjbESwPEY=bWbwD=bUYJ0WxWbNbXlueXtuQWYW6J0sxElM/=lRDExNb=OGxElJeWORqE0sPWORxXSUvXO1xWbpmWlEv=SFDWbibW0seEOR0WSFeWbUbJbFx=ONYExibJYuxESjYEbsx=OMAWtW0Wx5U=bM0XOib=OFPWbuQ=tWPXOwDJ0u0JxwP=OWe=bRQEtEbE0sxXSu6JxjUE0uxJSGQ=b5bXSNm=SHY=OsqW0WA=Sw6XlReWOM/Ets/E0E1=OHUExiUJluqESp1WlJ0XlJDEbEmXt=bXtEYESGAJYRx=S=U=bp1Jb=bWSi1JxHmExuxW0jUW0NYEOReEbF0WSJDXtsQXSwQ=SG0=lpY=tp1=lRDWSHYW0sQWlu6WSF/WSGxE0M/Wb1qWOEb=O1e=S51=SEY=bEmESs0EYi1=Y=mWxWxWbFx=tRDJxGxEbsQWOvY=tWq=ts0XlueJYR/J0iYWtEbJlN1WbUUE0uQElJqJSpUWxiYJ0uQJS1xWbUUWxGD=lEmEtpmEbFQ=ts6=OR/W0WeW0u6EOivWbJ0WYivJ0MDWxFq=O1DWYsQES=UEbwD=b1/XOjbWbibWtRAWxG6Jx5bJxEbExR6EOW0=l=vExjUJYNUEtRDElWQJSGqJbjYJbR/=OG0W0R0WOw/JlWA=bivJSE1XOGPWbs/EtWPJbsDJYib=lNvEt=1EbuAEORxXS51=b=1XO5vWbUUJYJxWYu/JbR6EYWeWSF/WSJA=SE1JYWx=bWxEOUbEbw/Exj1Ex1QExw0JYEUWbWqWS10JSp1Wx5YXOG6EYRQWtEbWbEmEYivXlE1EOsPXOpvE0Me=O=1WtiYEtuP=SUvJl=vJSEUEbFD=lsPJSw/WSFPJxMAEOw0WbHYWxEYJlRDEYsAWtJqEOiYJxu0=liUXOUUXONm=tp1XlNYW0J0WbRAEtRx=bFqJluxEbG6ES1xExueWlseEtM6XljY=O1/EYN1E0u6JxuAWSsPE0s/=OFDXOUY=bGDW0W/Wx5mE0JPJxNmWxRQ=buqEbGP=b=bW0Mq=OMQJxEUJSs6WORxJ0seXlN1JYJ0XSReJ0MqEbuxEO5v=bHmESH1J0M/JxMQXl=YXOwPWlJDWOwPEti1JxW6Jbw6WOw6WOseEOM/=YEmES10ESwqEb51WYu/E0W6Jx1DEbuPJ0pvWbi1JluxJbFAEORQW0N1JSNUExN1ExGe=OM/E0iY=liYXl=m=SEUES1xXOEYWYEmWYpmXSuq=ljmElpmESGqEbM0=Sjm=YW0=OMe=OseWSs6EYimEOFeEliU=SRQW0W0JxsqEO10EtR6XOM/WOEUWbGxXSvYWt=bWts6ESwQWSRPWxRDWtu6WS=b=buAWlR0=lJ0=OvmESF6JlJPEts0EYjUWSFxWORxXtRDEtsQWOp1WtEvJxvmExEmWtu6=SMQXljbESE1JbwQJ0WDXlWeWONYElJPJbM0=SibXSjbWOEUXSMqXOWA=bUv=SvmJSsqESpbEt=bXtR/WYWQ=bWeEYN1Ex1eWOvmEOGQWbMQEYWPExGAWbJQEYNU=O1D=Ysq=t=mXtpUElRP=SvmWO=bJb1eJbJDJxjmJ0NmEYNmEYNYXOJP=SEU=bjYJbRxWYR0WYsDWOuqWO5vW0MAWti1Xt=vEOMxXO=YExsQJ0MxEtjYJYpY=bH1ExFxXlWQ=tE1JxNvES1/J0pUJxRAXOueEximE0p1XO10JbiUXORq=livWb=mJSG6EbwDESUYJ0i1ExuDWSR6=OUmXtsAXSFeWS=YWlNvWOsA=YE1WSW6EORDWS=b=bNYEbJ/JbW6=bHvWxUYW0RQ=SUmWYMDEbwx=tJeWbHbESiUJbuD=SGPE0sP=lJqJxEmEbR/JxG0XlJ/JxGA=bwPJbGe=tNYJ0W6WYNmJxs/ES1D=lW6JxpYXSHvJx5mJ0u/=bMxJlpYXtWQWSwq=ls/J0JqXt=vWbHbWl=1XSF6EbHbWxRqW0EmXtWQES16JxsD=OMxJSGe=ORPES1xJ0WAXSG6Xls0XO=UXlJPEtWxEx5YXOsQExGDElRP=YJDW0W6WbuA=lpbEbM/EbHbWbw0EbwPJYJAJ0sQ=luDWtRQE0EYJYjvJbEUEOueJbJqEOGD=tReElNYWtMD=tuQExwq=OvUWOMeXSGDESU1XOFqWbMeEbiYEx=v=O1qE0Mx=buQXt=UEbj1=Sim=YMPEx51EliU=SR0XSRPWOueEONmWOj1XOj1WOWQEOibXS1QWxJDESGqXtM6WSiYEx5vElJ0EOiYXSs0ElRQWSEYWYEm=SiYJS51Jx5b=ON1WOGPWbv1=YW/EOuAXls/=lRPXSpvJSG0JlsQXlJDEYJqWxUvJYW0XtuQ=tuQWxRDEbs/W0pYESJAJSW6ElM/=buDJlMQ=lRqXSR6WSwQJxWqEbu0WbM/EYNYJbEYXlMQ=SWQXSFqEYs6XORx=S1eE0MDEb=1JSG/WtJPW0WQXSFDE0s0JSR/WxuPExFQWYsAWOu/JxJq=SFPEOU1=SjY=SF/ES1AExvUWY=UWONUWxNbE0ibXOwxExE1Ebu0WSjm=SUUXO1AXOux=Ys0JbWAEYNYJSGQEYMqEYs0JbEYEtRPWOpbJbweXtN1=OR6WYJ/WSFPJxvUXSw/XSvvEx5b=OG6JxWAWxH1XOJqW0uA=Ow/XOM6=l=b=lJDWOReXtiUWxUmXOM6EtJ6XSG0WONUWSFxWO1/EtNYJxu0ExHmEOUYJ0WQJbR0JYWxEYW/E0J0W0MxExFxESw6EYsAWOGDESw0=lsQEbE1=SGxWb16EYu0ES5bES=YEtReWS16XSG0=Spv=b5bEtue=SGxJSFxEluxESGeXtNmJb1DJY=mWSMPXSw0=SW0=SGPWtsQJS16XSW0WxweXSWxEYiUEb1xW0NY=tWQXlueJSR6Jx51=bMQJx1DXlW0EOMPJx1qWOpvWxMxJYsAElM0WxGqXOWQEb=1=lJAE0i1E0ux=tjUExEYJbvvWOj1JbRPW0NmWbFqEYRPEYWeExE1=ljmJ0M6WSNbJxMxWYjv=bGqElRPWxMPWOjb=Opb=tEYWYsD=tN1XOFxWOM/JlJ6WSuQJSEYWOs/ESu0JlW6WORqExMeESNYJSpY=t=bES1eXOMq=bJ0WO1AEOFQ=OsPWbimXSu0EYNYXOEvWximWtuqEliYElJ6Jbv1Jxu6E0jUWS5v=SWP=tNvJS=YWSMeJxR/WYM0E0NbWbF/WxW6EbF/WSpvJlJxJbUmEOFQW0iY=YJ/JS1DWlEmJSuqW0WqEOuQJxjYElJxEYRAWlM0JxuxXSEYJb=UJb=bXtNUE0jU=OM0ExG6Eb16Exp1ESpUJSW6EO1eWSWQWbG0WSW0JxGeXS=YWxjmWYiYXSwPXliYJxGQESs0WtJQJYJxXOHmJSw6WOuQJY=UWxuxWYWq=S=bEYNbEYimESjbWO5vJ0iUXlJDWOiYESWPJxG0ESGqWOsQXtW0ExMQ=OsQWtNmWORPEOivWbw0XtNvJbs0=bJqWtEbJbpbJbiUWlseJbF6ElW6=bJxW0NvXOWx=O51WlNvWbM6=O1AWSGqEbwxWbu6JSR/ExwqWOpbW0Nm=OvvJxHbJlJPElWqXlMxEljYW0ib=bs/ExjbWS16=SGqEx5YWxWPXtRxElM6XlJPEbEmW0JxXOW0WtsQ=tsP=lpv=buxJSGPWONvXtJ/EtWq=O1AEbwQWlMAWO1QJ0sxE0ReJSHb=l=1=tJqExFPEOw0JxEYJYpmWOs6WxsDWOEb=SRQEYj1W0J0WxvmJ0sDWOW6E0MAWYJ/XtiU=tse=OsqWtseJ0pmES5mEO5mXOJ/Exv1XOvUW0ueWlEUJSJ0WYJPElNmWbGqEtRPXS1xWSvmWtsQEOR6=bF/WtWeXOHUJYWeEtJDWtMeEtW0WbFx=YimXtpYJlWQWSuQXSG0WOFAXOimEtj1JY=U=lMQEbHYJ0J6ESFeWOuxXOueXSNUEYMDWOu/JSwQWYpv=S1xXSw6WluqXON1Wbs0=OUv=SJeWSvYExNUWOFDE0uQWSW/WO5b=SMeEOFPEOJ6JxRqWb1qXtp1WbNvJYjUWSwQ=OEvJ0uxEbHUWxsDWYuqE0u0EOv1=YEbWYuAWlR6ExwxES1PEbJDE0RDWYJPWlRqEOueES5bEOvvJ0M0=bM/WbJDWb1/Wbi1W0pUE0ueWl=YEYsQWbEbJSw6=SpvWljYJluQElse=Oiv=tj1EbG0EOGPEOJqXSGPEbReW0Je=SFA=O51JxiYXOHb=tW0EOivXlNmJSNb=t=b=tWQ=bNUWxF0WlR0EOM6=l=UEOwxJbimJxjm=bFQEYNmWOH1Ex10JbE1WtWeWxF/Exs0WSH1Xtu6WSjUXlW/=SjmElJx=lNYElimEbpUJlMxJluPWOjvEOvm=tW0ESWQXSEU=YR6WtRDWtsqEtJAEbM6ExG0JbW/EYNYWSiYEbuPWxJeESw6=ljUXO1/=SRP=bvYEOFPElsxJSivJxJx=Ovm=OJ6Ex51ExJDWOuAXSR/JYjbWlWq=OM/JbueJl=vWYW0=OsDJ0RDJlJxWxNUW0sxWtJ6WxF6=S=mExE1EbpmJ0uQJYp1J0i1WSRD=b5mWxMxEO1q=bu/XtuAW0J0WSjbEbEUExMqEbwAJbWAWOUUXtWPXSGAEbGqWOHU=bGP=bGqEtuPEYMxXOGDEOMxWSvUExseEYJqWb51JSMeESjYWbW/=bUUJbUUESwQJSHm=luP=YEY=ljmWOp1JljmJ0jbJxMeWSMDW0=mJSHbWSueJl=vXSpbEbFe=S1xElN1JbMDESWDESs6ElRQEx=bExvYWO16ElRx=bwPXOEYJ0u6XOpUJ0R0WYJqEbNUWlsAJ0s0EtjvWbiYExvUE0M6WOMQ=lu/Wl=vWSJxWl=bWbEvExpmWtimWSJDXtW6=SimEtR0E0iUJlJ0ExMxWb=bXOGqEbiUExEUWO1q=buq=bRPWlMxEt=v=bMxJbM0WOM6E0=bWSG6=YMxJSW0EYEbEY=bEYjmWOjYWbMxEb5v=YuxExpv=O=vJx1qWxU1Ex=YESu6=YMeExi1WtJ6WYs6JSWxXSvU=YpvWOMqE0M6XlJQEbuqESweExu6=OiYJxEYXO1DXOJPW0s6JS1eXO16JbGeJlj1WSNbEOEUJli1JlM/Et=vWY=YJbimXO1P=bw0XlsQEb51JxJx=YpY=SsPJYEb=bu/WO1eWYM0ESGQJxux=Sjm=OjU=buxJbM6XSjUESRPWb=YWxuAXtpm=b=bWYJ0WYW6E0=bEOimW0=bJlJ/=tR/XONb=O1DXts/WYNY=lp1=tRxEb=bJbH1JlRD=SweEOHb=OMxW0MPEtsxJx1xJYu6Xl=UWtJAEOG/XOW0Jxw0=OGxEYN1JbUYElN1WYMPEbvYW0W6Jxu6=bMxJbGqJxwQ=ti1ESsxWY=m=SpbJluQJ0pm=bG/=bpUWbWeWSMeEOi1WlsQWbGxJ0M/WtMDWY=vXOvYW0RDXtMAWbGx=YjmESRAW0pvWb5YJx5UJb1qElu/=lMxEbj1=SJ6XOGDWxuqElsxWlEvWbEYEb1/XSuQXOs/XSJxEOu/=tWD=SF0WSFDE0jvJSUUWSuxWOWPWxR/EluQJljYExpYWbiv=O=bExMqEtsxEOJ0EluPWbFQEtsDWtuxWxpvEtseExJqWSG6JbvbJSG0ESRqElsAEtEv=bFx=OweWtWeE0uD=tWqJbGPJbpYJbUmJbJqXlJ/WSFP=SGeExpYJYRAXOFPE0=1JbsDWSEbWSJAJbJPEYpYEljUJlseJSFeWlRQWb=YXtu0ESHbWbUv=bs/WOU1EYsq=bHUEx10=OpmXlJeWt=bJb1xJxw/WYR/=bwqJb5bWYE1WOFDWbNvElMQJbJA=bJQ=Y=bWbWAJSwDW0MqWOE1Wb=UWxMqXts6WSFxWxWqEOUUXSHb=Yp1=SuxJbEm=YN1=Y=vXORQ=SRAJxwDE0s6Jlsq=bvbWlsqJlJPJlsDEbEvWbpbWxEmEts6El=UJb1qWYMPJxs0J0jUWOMQWYN1=OFP=livESGD=SEbJbux=bimWOw/JbF6=bRqE0JPWOj1JlMx=YWDJS=bWYueXtpYWSux=SjUJSuAWlMxJSjvJSMDWO5UXOUvWxjYExRAJliv=SJ/Eb5YWbG6WOUm=b5mWOv1JxuA=bjUEb=1XtRqWtpY=lJqXSNvWSjb=buAWOWDExv1WSuqEtpvEtseJbiYJYpmExW/EbpYEbs6EORxEbueExwPXliY=tMqEYR0ESMDJYjYJ0MQWxW/JbFPWbJPJYRxJS=1XSWAXlseJlu6JlM0Jxw6EtWeWbJDXOueXSsxWSW0=bJqWxFQJbjvXOFqXSwQEOWeJbwAWbwDXtu0JSsx=S5b=SuDW0MeEtsPJxR/JSMQ=bs6EtRqXSF6=t=vWbUvWOweJxH1WS=mXlsQ=YRqJbjm=Ow/XOUvXO=b=bpUWtu6JSv1JSueWtWAXlpbXtpbEtsPEb1eJS1xEYjYW0MxXSGe=tWPEtJDESEUWtEYWx16JxUv=YMxW0ibJSF6ESivWOwxESGqWlim=bsPJSsP=OF6=bRDEOEYXSWD=Su6WluPXSFe=bH1JlM6Xts/JSRqEOMD=SJQ=lMQJ0sDXSGAJb1DJYRP=Y=1ESpb=Su/J0uPWORAXt=U=SuPXtR/=Ss6Jxp1JxG6WtjYEOwxWSw6J0R0WOjUE0W/EOwAWbsQXlJAJl=mESvmJlNbJlR6W0J6WS1qEtNm=YJxXSw/J0JQ=YjbEbN1W0M0JlJPJ0RQWOJxXtWQ=SF6WtRQJSjYJxG6=YjUJ0s0=lNvESwAWOwxESvmJYpmWtN1Wb5YJYueXSuQWSF/=SNvJSRxWlibWbu/ESuxJSwDWxEvWt=1ExHv=lW6=tJQXOwPWSJ/XtW0WONb=tjY=bFQ=OW0=S1AJSwxW0imWlWx=OGQJY=bWbpvJ0EYWb=m=OM/Exw6=SFQJYpUEOuPXtEmWOHUJYWeJbv1ExUbEbiYJ0JqJYuAWOJQElNbJx1DEOwAElN1=SN1ES5bWxFAEYRAEbF0JYs0=ONbWx1QJlNUWbUvJxibJb1e=tE1WxMq=OEYWYsAE0ReJbuqWOMe=S5YESpUJbs0WtMe=luA=SFAWbs6=tR0XSjbESJq=SivXl=YESEvWOEbWbpv=bsAESibJSvYW0R/Jx=U=bR/WOFeWbFxXls/=bFPEOUbWx5mEbueW0uAWSGDEximEtJDJxw0JlsQXlM/EbGPJx=Y=SvmESF6XSsDExjbXOJAESG6JSF/Xt=vJSRQEbH1Exp1=OuDE0Nm=bjmXOi1JbNvJljm=tEvJYJeElRe=O1AESuDJSNmXlj1WxMeWYpv=Ow6WOGeEx1qJYMQ=O1AJSW0EOHmWYRPXS5vWOvU=OwQEbGx=YsQExsAESuAWtR0Elpm=lWxJ0pvEbJ0WYs6=bFqEtR/WbW0Etj1XOWPEOvbJxjUJlW/EbJ0WYRQXONYW0i1JS1Q=lRP=Ou/EbEU=SG/=Yp1ExJ/J0uPWtReJxN1W0JxJ0Rq=YpUElsQWY=1Wxw6WxG6WOUvXOU1WS5b=Ou6EYM6EtMeJS1PXSu/WxWPEtMqJbGeEOMQW0NUWYNv=OuAJSuA=YNUWbi1XtsxEOpmJxWq=S1QJx1DJxFqEbG6=OGqXlEvXO=1ElpUElN1=SRxWlJeWYRAExW6=tWxESu0Jx1DEtJxWbux=SuxJSpb=ts/Jbu6WxFQEtjbEOW6WxJAWbMq=SReWxEY=OR0ElMxWOWeJxHYExJqWbJxWOU1EYMPJbibWYiUJ0pUJbjvWbJDW0NUXO5vWlNUE0sQXOWP=tW/WOwAJl=mESW6XtEUEb10XlNYJxMxJ0M/=SjUEbw0WxEUXO5bExMQ=OFxEOsD=lpmESs0=YivE0W/Exu6Xt=1WSFQJSF6ESHmWYM/JxjvE0jU=OueJYi1=S51WxMqW0=mESGPESHYWxFAElWx=O1DXS1eJbvmEbRqJ0sDJbpYJbE1XO1/WYpvJliUWbRQWSu6EljbJSM0JSWeW0ivWO=mEYEYE0s/JxE1=YseJSEbJlEmJxiYEls0=SG0=bJQWS1QXlRqXOs6JSuDESG/WlMQEbseJbU1JSGQJbG/EOR6=S1DEYJDE0ReEbJeWtsqWSU1XtWxJbMeWSuPW0sxWlu6WlWeJ0i1=SsPJxR0WtW6Ex=1J0RDWSw/=YNvEOUvWOJQEOsPElEvWxsD=OW6=YNvJbvvExFx=YWAWOGAWO=vWbFqWxMQWSJ6JlJQEtpmJYEbJYWe=ONv=Os/J0ueJxu0WtsDJ0=mXSGDEbjbEOs/Jl=mEbp1JSGDJxGQWbNYJliUJx51=S1qEls0J0RP=ORqWYJxWxNmEY=mEYRQ=tMQJS1qESseWOvvEOs/EOvYWbRDJb51EbuPXtN1JSMAXlMxXOsQJSimJxw/JxjmWxFeWlRDWOwQESEbXlJqJxWqXSvb=YimJYEmESN1ExWeWORAXSu/Jb1AWtMDJlsx=tiYJSNmJ0imEls/JYRD=OJP=luPESUvW0=mWxMQJS5bXlJ/JlJqESUU=SM/=SuP=YuAWb1PWYReWS10W0u0XO=vWlJD=OvvWxJPWtu/WOseW0uD=lsqJxjmExjYJbFQ=bHmWOHYExNmWxUYWYjUEOGAXSivWxH1Wlux=bJ6JSuA=SJAWbpbE0Nv=Ow0ElWeEbWPJbsDE0M/=lEYJYWDEYRA=S5vEtEYWY=YElMPWlNvJbFxExFqWlJ6EOuQ=tMDE0J6EbMPEtEb=SsqWYuqJYWAWOs6ESMq=limESMAWliUExWAWOEvExMqXO=bEO5vXSjYJS1AJSGeXSvbEOE1JlMDWtNvXOuAJ0WD=OGPJxjbWtM0WOUvJYNv=lsQXtpb=SpY=bu6WtseJxJAEtNYJ0NbWYp1ElpYWYR0EbjbJli1JYiUElMPEOWeEbuP=buAJxj1J0sQ=tRD=bNUWS10WxNY=Yj1ElRQXSiYES51=bJ6ESj1XlJxJ0MAEx=UXSHUJSiUEtRDJbUUWOv1JxRDWtWeExw0WtJPEtsP=YE1XSWxWtpm=OiYXSNmXOwqXOim=SRPJlsxESEb=tuQWO5YEtMqWtpUE0JA=YJQ=OWe=SF0ESGPWb5bWbJAJS1qWlsx=YpbWOwQXSU1ESWAJbFPESpUE0sDEtiY=buP=OsQWtWQEORAJ0jbJxUYXO5v=tjmXOj1Jb5vWONmJlu/=SUbEOWe=tJxWYuxWlN1ESWPEYs6E0JQ=bGPWxw0JSJeWtJ6ESF6WSH1ElsDJluP=l=1JlR0=bvbXOu6E0=b=bWqExj1EYuDXSW/=YMeWbR/XtEUWtWAEbJDJbEvXOvYJb=Y=O5UES=YXlJD=YMq=luAWl=mWORQWxjv=OF0Wb=1Wl=Y=YJP=OMAW0EYWbpmJls0ExsDJb1AXSJPEbw/XS5vWtpY=bFxEORqXtWq=YWqJYuDWbR0Wb1AXlM/=bGQWlWeJbNYXS1DJbGxExNbEORxExGq=OGPWSiYJbuDWOjUJbUb=tRQE0sAWtMPXt=bESGPJxNmWtuQXlJ0=OJAXOMeJlu6WYiv=OMxJl=U=YpY=SE1JxjvJ0RAEY=mJxRQE0RD=bpvJYuQJlMq=lWq=OFQXtJqESwx=tivJx1xWlR0EOFA=YEU=li1Wb5UEtpvWt=bEOpbJlReEbv1EbM/JxsqXlseJ0W6JYs6XlMqWOiYWSweJxM6ExjbWbsP=lsAJSvvJS=vEOFxWYuD=tR6JxuxEOpbJbGeJS5mW0pvEx10=SwDESiUXtMD=YWqWtsPExG0=OR/=bGxEtJPWSpYExMQWSwPWlsqEbvU=S5bWx1AE0RQEbwDXOvYWS5UE0MqEbu0ElW6=OGPWSuq=ljvWlMPJxuPXl=v=OEvXOGDJ0W/XtM6J0iYWxEbJSMqWOv1E0uQ=YJeEljYJbUbESuxES1P=lu/=OM6JSU1WO5vJxMxJxweWY=v=YJAJYR/XlNYEbuPJb1qE0NYWlRA=tpmJbj1=OG6XSGxJ0N1WbF6ElsAXtJQExRDXOjvEO51WlRQ=OM/JSi1JxjmEbRDW0pYESNbJbi1JSRqEYpvEtsPXO1DJSimESMAElWqE0M6Exsx=SGP=t=U=tsxXSwDEb=m=Opv=bUmJxjvWS1/WO1eW0JqXlRP=SwxJSWQWti1WxUYEOGQ=OMQXSiv=OuxJbFPExN1W0imWSpvXlM0ES1QJSUmJbMqWS=m=bFxJSu6J0EvJYp1XSF6WOuQXlNvWSjvJYsAJlJA=SGeWSMQJbRDXtuAEl=bEtRDWtRQESpmEx5U=tR0XOjmWxUYWbJQExjmW0W/=OF6WSW0JbMAWYjbWYWA=bH1=S1qXOFPWYuxXSUbXts6WYNmJb1DEtM6JYpv=YJe=bFAXtJ6=OWAWSjYWlueWluqExF6JYW0WOJeJxGeWSEvWSM6XOsx=SwxWtMDWxGxJSi1E0JqJliYESuDWYJD=OwxJxFqXlWAWbFQWb1q=bpb=bUYESseJb51WxUbJSHYJYEbWS1AJxW/XOu0=YJPExWeExw/=buAWlj1Exj1JxNbExG6E0jm=luqXSs/EYpb=lNbXlJ0JYs6XSiUJYjUWxG0WSwqEbEb=b1PESUUEb5UWOR6XOsxEOWxJbuQESwPEbJxE0RPWOuPExWxEOEv=O=vJxN1WYM6XSimWYWe=bw/=Ou/Xli1=O=1EORA=lEUJSMD=l=mWOEvEbFQ=SMAWtM6=tJq=bUYE0JeJS5YESib=bUYXlMeW0sD=tRQXSw6JxueWOjUJxUb=SNYXlJ6=ls/EbivEbWqEOwe=tEbWxv1JbH1XlRP=tWxEONY=bNYWOvbEli1=bpYWxEUXOGqJxpmWluqWYMq=OF0ESJeWOR0=OE1WtuQEOJxJbJxJSWqWlJ/=YWqEbE1W0MDESsxJ0We=OHYJ0pYWSpmEYRAEbi1WSHbJxsD=YjYEOUbJSvb=ljvWxvYEOuDWOWDEOJAEts/Els6XSwDJ0j1W0W6ESGPE0RxESvm=SR6XlsDW0RQWxvbXlMeWtR/Ebv1=buqWO5mJSuQExJxEtM/=tR0EbuAWSF/EbGe=tM6=OR6=bW6=S51Xti1WbRQES5U=bvmWluqEtJxXSw0EORDWOuAW0=bExvbW0s/EtJx=SpmWYWx=SUUExG0ExJPJYW6Wx5vES1eWYWDESFAWOJ/EbvbEbMx=OjvESw/=YuQWSwxJbsDJbsxW0NmXSNYEbUU=b1DEONvJ0WqE0RqJSHUEOGxWb1DWSvUW0NYJ0MP=bEmJ0sxJxU1WOFqWti1XSG6WbibEtjb=lEUWOiYJSuPXSMQJSRqJYWPW0M0JbuQ=SsAJlpv=OHb=ljYXtJAJlNYWbw0EOFDXlRAE0RAWxJqWSWDJxJ6WOimJx1xWxF6=Ss/W0s0J0=UElWAXOH1ExseJS1/WYWq=tRPWYR0XtuDWOwA=O5vXtMAEb5YXOibWxUbEtEmW0WxXSU1WYuQEOGAWSRAWOWe=SJP=l=YEtuAWtpmJbpbES16WOJ/=Su0XSG6=OpmExWAWbEYJSNmWxp1WxFeEYRxEbReWOweJbpYEb5U=tu/W0R6W0pbJluQESEb=OGeJYp1=YE1Wx1QXS1PW0JDWbuDWbWPXlM/WOWQJSFeJY=m=lWxExMQWlJ6ElNUEbWDXOGxJxibE0J/WlsAWxJeWSu6XSFAJxjvESNY=OF6WSFDJ0JQEbJDEt=UW0iUWSwQWxp1ExEUJSwqWSH1XlJAWlu0Xl=b=OHU=bWxElMqEY=m=SNbXlReXts6WbHbW0=UEx5UEOGqEOibESEUWYE1Xls6JbJD=ORqEOsQ=bJAExWAJSw0=SGQEOJ6ESJAEbwAJSF6=bMQJSu0=SH1WxJxXSJQJSFe=OGPWOJD=lWxWSWeExFxEOjvExHvJSueJbwqXl=YEONbEOi1=Su/EYEY=lRq=OF/XOR0=OGPWlu/=bUYExw0JxvvXtimWxu6JlsPJxGxWxFDEbJe=S5b=tJ0E0MA=tsPESR/ESW0EOGqESMP=SvbXSjU=lJ0ExjvJYR0WbivEYMeExUUWYM/WbHbJSUUJlibXSwDExW0WOvbESFxEbueWbpbJlEb=bGAE0EbWluA=SUvJ0u6=tEYJlMDWxNmWYNbExEYWYu0EOW6ESRDJbHvWSJ6XlJxW0JPJbiv=tsQWbuP=YsAExG/EtuQESEbExGPJYu6XlMQWb10JlMAWYR6=bGD=SsqWlEv=bEUJx=mJlEmESHbJ0pYWOuxXOwDJbF6WbNUExWQExM0JSWAEYJ6WO1qWx5m=ONb=O=bJSvYXtEU=bU1ExUbEO5v=bN1=b51WlMDJbGqEOimXS1x=OUYWYJA=SFe=lpUJbM/EximJ0sDWtM6WxWDWbpYESGD=bwPWtR0Ebs/=bRq=tN1EYjvEtpvWlj1=Su6JbW6XO1DElJ/ElM6WtEmEbF6EbM0=SFDXSvvJbRQJYNmExWeWSJPWxJxXSFA=SGPWO1xWxFqEts0=S=bWSEbXlpY=Yj1XSF/WSj1XlMPXlRPXS=UXSpbWORq=tj1EbEbE0u6Wbw0W0MAWtjmWbFAXt=1WxEmESuqESM0EYM6EtuDJ0pUWOsq=SGAXSwqEtRPJxs0XSH1XlMDElsqJlJeEb1xWbG0E0seElueWOvvJYMeJlWDWYj1ESwqEbJqJ0M6W0N1EljmWOG/WYEbJSM6WSRxXOJ/Ex=UXlR6=SvmJlReESM0XSRqJYWAXOw6WbMQ=SMqWOJAJSwqWO=Y=S=v=lEY=bGqXORQWxRQ=tu/EOivW0uDJbF/XOsqXS1PEbuPJYR/J0WeJSM0WtWx=bRAJYivXlsP=OEYElWeJYE1EbW/WSs6XOG6XSsDJbMqEOG6=bRD=SWDXlWqXtWQW0J0=OWqExw0=b5vEluDEb51J0JDXOJ/WxF0WbJ0WSG/=bsPWbJQ=tW6WbGxJxu/JYWPWOiUE0EbElJP=SR/JSsQEbUU=tEv=OEUE0u/JSFe=SjUE0pm=lsPWSvmWtWqXlsAWtuq=lEYJluQ=ls0XlN1=SvmEbs/JbFPXONYXlNUWxFeWYMAXSMAElibJb5UXOHYJlJqXSRQE0sP=ORPXtMxE0Wx=S=bWSHvXSW6E0iYJYEm=bHUEtR/WbwAWOFAJxw/WbF/WYibElEUEOG6W0EUXt=bWxR6JYR/E0JAXtibEYJqWO=b=SGqW0jmJ0WDJb10=Ou/=tW/JbReWtWeESsAJxwQW0jmWONbJbNmXOFPJ0RxExMeExs6WbiUXliUE0=UJ0sAE0uxJ0Re=b1qWtMD=YsQEY=YJbJDXtsDJb1AWbuqEbJxEOHYWtivW0RAXOWeWxRqEYJAJSNbXSJq=SibWls0Wlj1ESjvJbJ6XOuAJbGeWOJPWxE1JbsxE0M6=tJqElsq=liYEYJAXls6EtJPXlMeWxM0=ts0JYNbWbF/XlJ0Jb1QXSJe=bu/=OsxJSu/EbMe=Os/EtWeEYE1EbpmEt=vE0M0ESu6EtRPEYseXSHvEtWPWxR6WbvbEO1qEbFxXSHb=SRAEOs/=Ow0=lpmXlMeJ0pUEbWQWYJxWxsAWluqESGAXO5YWtRD=SwAEljb=YibWYWeJbJAES1/WbJxWbWPWlRAJbRqXlJxJbHmJxs/=Sue=SGPJ0sqWlib=tpvWYM6EOjUWSjYEYWeXSp1XSF/W0u0JxHUJYiUJYs0WOJP=Ojv=SvYElWPXOjvJb1xESv1=tWAES5YJbjUExsqJlReXtsDJ0s0EbRxESJeE0RQWOpmJl=UEO1QJYibEYJDXljmXOuPWbuDXOu/=tJe=bGPJbpYJ0MAXlNUWbjbWOR0WO5Y=lM0WYWeExpbEOR0WtR/=lW0=tEbWOs/WtWP=SuQWOuDJbwQXSH1XtMA=tuQWbWP=bRx=OweXOWAJb1DXOEmXOseWxsAJSUb=ljm=S5mWliUJlj1=bFP=OGeJYseESJ/=SFDJSFDJxFQExibEbR6ExRxWtNbWYJQWYR0JSu6=bRPEbUU=tjUEbu/ElWAXlEUE0NYWxiU=Yue=buQJbsxES=Y=lpbWOsQ=Y=bXO=bWb1QE0Rq=S1QW0Rx=OwP=Sp1ExjYWYM6XlNUXlM0ESUmWSGDWxM0WSGqEOsxEb=1=OUUExu0XSRqXSWAJSMA=tjYEb=bE0M/WSR/ExiY=livExi1JYR0=bGDEtM6WYib=lu0=tpmExG6JbGq=tEvW0JDWOWx=SHUElNUEYu/ESuxEb1DJ0jUXOGPWbp1JYMxWOpm=YMDEtWAWxJ0=SGeWbs0El=1JYiYESpmXONvXSuDXSRAJbse=OEvWljYXtWQWlJA=SEvEOUb=bNvJ0RAWxNmJxvUEbpbEYsQXlW0JYu6=bReJxu6XtEUJYuxWYEUXSjYEtMAXORxWOEvEtRxWxwqJ0EUWOW6XlW6WOueJbu6EbweJSuPJlM6WxWeJ0RQWSvvEx=YEbjvEbRxE0s/=Ow0=lpm=tp1EONYJYuQElR0ElivJxGPWOE1J0ReWbRPXl=m=Ys6WSWPExEYW0W0Ex1eWSwAEbU1WSM6=tJDXtuPXOMPWYReEbWAEOW6W0J6JlseJbwqESj1EbJqXOuq=SNvEtueWSWDWxEUEtuDExHUWOsDJYpUEbRD=bMeElRAWSJD=YibWtNYXOpmXlse=SvvEt=YESWP=bwD=OUmEYsQEb5YXOMxWxH1JSuxXliYExwxXOvYJxU1Eb1q=YWQXSHvEYJ6WOiY=luDWYj1XO1DWtWPWbJxESpU=Owe=b=mWb5vWt=1JxMqESMxWSvvJ0uqEYW/ElW6JYimExiY=YEU=tseJxFeExE1WlRPWOFQ=OGAEOJxWtRDJbUmWbG0EYNUXO=UWSpbWOMeE0WAWORQ=bEUW0iU=bWe=tJPE0R/WtibEtEvWt=bXSNYWlibWOF6=SuqEbim=bFD=YMQXOwP=tuqWSJ6=OWQWtMq=lJA=YMPESEbEbJAEOJe=Sw0JbRDWSsQEtsDE0sx=YseWxw6JYJ/=lNv=bF0WtE1=OsAWbuDWxJ6XSNmExJDWYJqJx1D=OEmWSj1EYNUXOUU=SMQWSuAEbsQJSueXtMAJ0j1XOEm=bwDXSsPWtW6Exw0WxJA=YsxWx1P=bJxJ0jYJlRQXOjv=SwAXtEb=SseWxEUXSE1WtMeJYMP=YJxWOHv=bF0EtRAEbjvE0MDWlpUXlR/XSRQExsxJSM0JlM6ExUbJxFAE0EmJx10JYjvW0s0E0sxElJ6WYiUJlWeWxs0XSEUWlJqXSJ6JbWDWbsAXlRDJbHUElR6XOG0E0iYW0=UWSNbWOs/EO=mEb=UESJqWliUEOsAJSuxWljb=ONm=YuxXtJqEO=vJbJQ=bF0WYs/WYu6Wtjv=SGxElpb=YMPJbFD=tRxXOpY=OR6ESuxJSN1EOHYJSMAExHv=ONvEYE1WOpUExu/EOvUESHbWOR0XOsAJbF0WbM6XSE1=lsQWYimE0sPWOFDWtuD=tWqE0RDWtWQEYim=tRP=YW6ExN1ExFe=ORQEO5YXOsxXSG0EOiYExGqEtsxESpv=OG0=bUb=SsQJSJDXSG0ESW0EYu6JS51EtMqWYJ/Jbjb=OJ6JYWeXluqWOJ0WxiUXtR/WSwAWxEbWx1A=lMA=Ypv=tsDJ0WxJbJ/WtRD=SR/=S5Y=buAXSG6JlMx=bsQES=1EbFxE0We=SF/=OjYXOs/=l=1=ts6WbF6WSsAWOvvEbsxXSReElpvWS=UEbwPWbpvJbu0XSwPWOGqXlE1=bvmWSuP=lW6WONYJbGe=SweJx5vXlpbWtR6JSWQW0=Y=lEvEYWAJ0JxEx5mXSRDWxR0JxGAESM0JYpY=b1x=biYXtuq=tuAXlWeWSH1XOu0=tNU=tsxEYpYEOW0XSj1Etj1E0EmJY=vESMPJluPWxRDWlWA=SsxJ0Rq=bUmJYR0ExGeWbi1WlseEOs6EbRxWbMDJSMPESwPEOM6=tjU=O=mWbF0ElJQEbpbXOR/ElW6WxGeEYE1Jlp1Wx=UWYEU=Ypm=tMP=O1DEbue=SRQXljYWYpvXlseJ0sQEbJD=bU1JlRx=tRAWYiUXlsA=SEYXSFAJxwDWSpvExueWOw6J0sAWYs0WbHUExpbEO5YWSwPEY=v=tJ/=tjm=SsAExR6EYEU=bGe=YpUExWDWbi1JbsQWO=mEbW/Etp1XliY=bEvXtMqWxWDEbNv=tjYEYjm=YMqES16WxEbWYimEbs0Xts6WOsPJbR/WOGD=bMxW0sPJYivEOGxJS16EtuPWbiUESweE0MQ=buxWxNY=SsDJbp1WtJ/JlpYEbMQJx1qES5v=SjvWbJqJbHY=tsA=O1DWbNYWtibEYjmWSueXOHmJYJ6WOJDElWD=bHUEbRAJxiY=SNUJ0ibXlRx=OvvXSibWlM0Wxpm=SpUJYWQEOw6W0EbWO5vJlMAExEvJbwq=SG6W0=vJ0sAElEUJSpmESiUJS5v=OwqESNvWbFqJYEYESR0WlWQXSWPXSR/XlsAWx5v=S1P=SGQ=lR0JSWAW0NY=OWD=OWQJbJxWYWAEO1DWSReEbwDWtR6JbwD=bUvWO5YJbuQEYibJSRxJbFeJxJQ=bMDWbwDE0JeEtW/ExG0Wx=UXSEUJSF/WYNm=SuqWSEYJlu/Exu0XONv=O1xEOiUEluAExNUJbUbJS5YEOEmWO5YWxpYWOE1=buDEtuxW0J0EtMx=SR/WSR0WtNmJYE1EOi1JbFxWSibEbvUWOR0EYRxESJQJ0NUJYivWtpb=tJeJlWxEb10JxHYWSw0Ets0JSEvJluAEtMAES=1WOwDXSF/WtRxE0p1EbMAES5vEb1/JxN1=Yue=liYXOJ/=OpUXtR/=Oib=SwqWS5mWtM0WlMeJxH1EY=YWSw/=SGDEx1qEOGx=YN1WtuDWt=1JSRQWxUUJYjmWxvYJYNm=lMPWxMAESwxW0u0Eti1ESFeESM0=ljYEYRq=bwqW0JQJbFxEOvUExFQ=bNYWSUYElJxXSuDWOuqWSEYWSsqEbUUJxUYJ0uxJljvESM6=tR6XOF0=tW0JxMqXtNmEbJqWSuD=lRDESJxJbFAJYJAW0pmESUYXSFq=OpUJS=1JxJ0ESFAJxj1=SHmElRAWluAJlWeWOFxExiYXtpbJl=mXSwQJSpmWlpv=tWQWSHb=YNUEx5v=SMPJSW6ESWDWxMqWYJA=SRDJbM6ESRDEOu0ESs/EbGPXSFxXljbESUvElM/JSNvWb1DWO10XS=vXSiYJbjU=SvYJbRQJbJ0EOw0EljUExEbJb5mEbJAXOR/=OJDWYiUJ0iv=bW6ExUUWS=1EYR6JbsQEYNb=OGeEtu/=OwDXOM/JxpU=OEmWOibJYMqJ0W0JlR0XSJqWb5YWbF6ExuP=bvvXOF6XOR6=Si1EYReXOFxXOHmWOHYXORe=lp1WxGqJxsPES=YWlsx=SwP=bW6E0M0WtjYESuQESuxJbWeEluDEOM6JxsqWtjbWxsPJYMAEx=mEYEUJxwxEONmXlJDWbs0XOMq=YjbWlibWYEvWO=bXOs0ESFeJSWx=SMPES1QJbw0ESNmXljUJ0R0WbWxXSw6=Sp1ExsQWO=UJlW0XOwxWxHUJlsAES51=tNv=bp1WxR0JSFqXtJx=OMPJljbWtM6WlimXOF0EtsQ=bGPE0=Y=OwPWbwAE0M0Jbu0=SvbEbH1JSu/WbE1XORD=S1Q=SG/=lsP=OsxWxu6XO5bEbwDEtsqWSReXtR/WS5bJlWeJYNv=OE1J0J/=OimJb1DEOJD=t=YWlseJYJ6Wlu/WlJqJxEYXSjYWSsxEOHvWS5bWbReWSJ0Wbs0E0M6XSGQJxWAJYWe=buDJx5m=ls/XOimJ0RQ=tsQEtpYWbRAES10EtRxWYsqJxs6WbJQWbpb=bR6EOFxJxMD=tpmWSWxXSuDWbF/JlMD=OW/=bs/=bWAWtJQJxseXSUbJlR/WbiYEx5UJljmJYu/=YJA=O5vJYuQWYiUWbs/EliU=ts/WlWqElsPJbEmWxW/=ON1=bi1JYNbWbRQWtMDJlNvJ0NvEtpmWxueJ0=mJSM0WbU1WOGqWluq=SUb=SRQ=lMqWlM6EtM0JS=UXOJ/JSUUJbFDJxv1=SpUWbEbJx1xXO=vJS1QExFAExwPWOGD=tjYXSHvXtEUWOEUExR6XOFx=Yib=Oi1ESW0XOG/WSWxWSj1XtMxJlMQ=OGeJSpbEOFPEbvmJxv1XOWPWxjmJYNU=tW6=tWDWxMAXO16XOp1Jxib=YjvExH1E0ibElsq=lpUXl=vWOG/=timWbJqWbE1=bibJSGPXljvESiUWSs6EYRAJSwx=bsqWl=1XlpYJxMQElRAJS1AWlRqWSReWSGxJbsQ=lpYEOR/XlEbWO51WbMxWtimESpmJbFDWbFxWxMD=lWQWOEmWb5YEOHUEbFqJYpU=b5m=lMAJSW0=bibXtuDExsPJYJDWtsPJbiYXt=1WbHvJlu6=SpmXtjvXO5mWYMD=SpbJlsxXOj1XSwqWS1xWS5bJS=UWSvmWYR6WxRDXtpb=OM/WxWDJSsDXtsDEO51W0ivWtW/WljmWtJe=buqJ0sxEtNUXS51Wbj1=OwPWSMAWbwqJbMPWtWQXtNY=bwDXOw0E0NvESFA=OsAJbs/JbUUWxMDWSjU=YRPWYsAJxNvJSvvWSux=SGP=Sw6WOR0Jbj1=OpUJ0sqEYpmWtWx=bUbXSGQXS5vE0=v=YpYWbWqWSUmJxvbElJAXOwPWOHUWSNv=OHYJSF0JYpvESHvESW0=timExiYJSNvESv1Wt=vWbpmJSEYWO1x=b16=tiUJxHY=OUYWbvvEOibExHbWbReWSuD=ls/JbRxJb5UWS5m=lJeXSFPJb1Q=tMD=OU1=Oi1JSM0J0WQJb=bJbRA=YRQJSuqEO5bJlM/WxwxXOuxJbMPJ0jYEOW0XOvbXlM0=ts/WOMqJYMPJxWA=SMAE0uxXOMeXOJDJSWPWxsPJbNmWx=UWtReXSuqWORPXSs6XOsDWSvbJxHUXSG/EbGDJYRA=bWA=SseJximWYuPWxueEb=mExvYES1QJSw6EtMA=O1eJS1PE0WxWlR0EluP=SMQWbU1=bjYEYW0XSuq=OMPESNmJ0uAWS5YWxw/WOvbXOibElJ6=Yjb=SwPWbwPEtjbXSR0JSseWtM6WYEbJxsqJSFDES=mEOG0Jb=YESsDWSM6WljvWSR0Ex1AJ0R/EOJq=bR/WYJx=b1QWOG6ESRQExUU=SW0Wbw0JYWeWbJQWSNY=bFQWYR/EOUUW0uDEb16XSW6EtJAW0W6WSjvJxsDEYJx=SRPXlpvXSJqWSweEYWPESRxWSs/=OGDXl=U=lEv=YRAEtuxJbFQJYjUXSUYEOwAXS=1Ebvm=bMxE0imJxWP=O=1EbFDXOGeJxvUXlJ6EYJ0WbUYXSivJlW/=OUbExRx=YMAWbv1JbGPJb10WORA=YRqEOW6WbEYE0WDESiUJY=UJlsAEOpY=tR6EOGDE0sqEliY=YR6=YR0=bMeEYJ6=OR6EYMDWOG/JbMeWSU1ElNUWlpYXts6JxFeW0WDWY=1Eti1WxJ6EbRPWOF6WxR0XS=UWYMxWO=YJ0pmXtjYEtsqXSJxE0sq=tsQWSivEYJ0EtJx=YJQXOG0WxR6JlRxXOM6JSUYJbR6Eb1eXSuAJljYXS1AJY=m=libElj1WtJDEbN1=bwQXtW6=SMq=tJAEbJAJbs6ElJD=tjbEYsQ=lJDXtuDXSFxXSMQ=Oj1XSHUJxw/JbJ6EOGQWbJeJbGPE0s0EbJe=tuDJbjUWOUmW0=UXOs6=lNvXOsQJlRDJxFqEx=YJYseXSw0XlRq=O1QJbvYWSweWbJDEx=vJxwDExRe=bGQ=OuqWOvYJbwDJxFPJxWDEb10JSw6=O1xWxN1WxWPWlpm=SWq=S5Y=lRe=bueWOWeXOMeWOjYEO5YW0seJSUm=OHY=ORPWbw/XOF/ESuxXSs6Jxu/=YNYEO1qXtNvWYiUXlRPWbEmEOGPW0=m=O5UJlRqElsA=YjbW0EbWtMPEtW0ESsPJSR6WxwDEOpYWOivWYWPExJ6Wb51W0=m=Yp1=bGDWOHY=bUbXSWQJ0ReEtM/WOF0E0seEO=vXO=bJxFPW0WDEOuqXSFeWYJPWxUYWSW6=bE1=SW0XOHbJxJAWxpm=b5vWxReEOFDESMPEtNYJ0=vWOpmWlN1JSsD=bFPElJPXlNY=YRAXSMxWlJAE0JD=YseJS10WxWqEbG6WxJqEON1Etjv=S=YWOvvESFAWxwxWlWDXSuP=lE1EtW/JbJ6WOiUWS5mWb5YJbFxJSWPEYsxJb5bWYjbEOWQW0sqEOG6JxF0W0jbXOv1WOwqXO5UJxG/Wxw6ExF/XtjmEtJ6=YRPWls/=OEY=OW0EtWQWSu0WOM/EbH1WluAJxMeESwDWlRq=ORP=limJS5YElM/WSsqE0EvEONUXOwAJ0NvJ0J/ESGeWSMeWxpYWtiYWSUUEtWAXt=mWtRxJlRQ=tjU=OwqWx5YJlNUEljYJxWx=tNvXtsAWl=YW0uDWYMeESReEtivXlueElEb=YEmEbuxWOGx=tuQElNmWSjbExuPWbw/J0JqEOJxW0jmXlM6WSR/EbJQESFP=Su0WtWe=bJ/EbUmWSH1ExE1J0sQJxMxElMQESJ/=YuPXSMDWOFAExF0JbJeEbG0ExGAEbsPWOjUXSueExsQWxJqES=mWbpYWxpUEYM/Jb51=bM0Jxw6WYNm=SWqW0MQExFqXlM/=ORqWYM0EtjvWtWxWSUY=tMqXO5YEbs0XOJ6Jb1eXOuqJlRPWSpYXSRDEbF/W0W0ElR6EOW/XOMqXluP=SNUJxs6EbE1=OsAWS5mJxGPWbwxWOweXlRQWxsQ=bRAJbueXOJPJxwqJ0MAWS1PEtJq=lsPWxUmXO5UWtsqJlNvW0sq=bM6WxG6=O5UWOJ0XSRqWtNbWYuQElMQEOivEYW/Wlp1EbR/WtMxWbEY=lRPW0u6JYNm=SRPWYRDExj1XORqWSJAJSNmWbGeJbF/=OMeEbG6WxJDXtueEOWQEOimEO=1=Ow0WYsDWSMDExEvESjb=SsDJSJPJlW0WbGQJSGeWSMxXS=mWbNvExH1=tR/JSRQJbWqWlM/Wtu0WSMP=bFqEx5mXtNmWxM6=bsQWOs0ExsPWSHm=OWxJljYWbi1EbF/XtMxE0JqE0EUWSpUJYWqESjvEtRDWtWAJxNUEbuDJxFPWbG6J0NY=lsPExMDJYW/EbG0XtWPWSG0EY=UWbwq=SFe=YE1JxRxXlR6=OJqExibESWeJSH1ExW/=bHvJxvU=ts6XtjmWxJq=bMxWlsQESWP=OuxXSReJSiYE0WQJb1xJSsAJbsqWlNmXtJDWYEYXlMqWYimXOseEY=m=tMQJbJQWbF/Wbj1E0MDJlWPWS=mXtsAWSNYJbvbJSUUElsqJSseJlR/ExN1WbNvE0u/=lJq=tWe=S=YESvb=YRQJxp1XOj1Wb5UESRxWbJQJxJeExM6=OG0XSsPE0W6JSibWS=1EbsQEtseJbGxJlReWxuxXOH1JbFQESvbWOuAEOMqJlj1Xt=YJlj1=OjbWSG6JbW0XOF/WxR6EYsqJbW/XtWPXSFPWtW0ElEvEY=vWYJx=Ys6EONYWOi1WxWeXSGAEt=vExRDXtNYW0JqXOw6EtuDEYuDES1/EtEm=liUWxwQEYs0=tuDExUvEOsQEOW6EOW6JxWQ=tJ0EYpm=bG/J0jbJx1qEbJQExMeXtsQ=YR/XOpmJb1q=tsqXtuQWtJ6=OvYExs/JxUY=lJxJxib=SR6WbGQXlj1J0p1ES1eJlNYXSivESibEOibJlsAWtjbWOJxXOvYEO1AXlJPExsAXljUESu0=Yu0WSG0EOUbJx5mESH1XlsQJ0Rq=luDE0sx=Ys/EtWDWlNU=SwPEluxEbMQ=lWxES=bXSWq=bWQEbpb=OEb=ORDJlMQW0u6=OWQJlEbExN1XOHUEYp1WSWDExpm=bjvJlp1JxJQ=ls0WORAWlMA=lR/=tJ/JlNUElJq=SMe=tM6WxMPElMPWlRDEbFPJSUvWtjm=bUYWbJ0Ex5v=OM/W0WP=tsqWO5bJSpUEYW/=tWqXtsPWtRQEx5U=SGxW0sxJlJqWS1DEtuDEONmJYpYJx5mWSMPJbGqESUY=Oi1=bwDESRAJlpv=tNvXtsxJ0s/WYNvWSReW0sD=YW6XSsD=tEUXOW6JSNmESNYEbiU=buPJxuqWSRPWbjvJxi1XSF0WliUWORQESMxXS1QWlWAXSjY=YsA=OMDWt=1JS5bExUbESs6WYNU=tsqJ0MP=lJDEYRPWSJxWx5YW0WqEOHmXtRxW0=mWbibExW0EbWx=SMQJYiYElp1J0j1JbRAXOEvXtM6JYRAJSW6JSuAEbJ0=lMA=Svb=SwqWtsxWYWP=SpY=SM/EOp1WtRAJS1/JSWeExFQESJPEOM/WOFP=tW/W0EYEbiYEbEm=bJA=SGeEOpY=bpYWxUbEOwDWSMxWONbJbG6E0p1WlsxE0JPWlNYEbvv=S=YESWDWxsq=tJeWxu/WtuAJlNUElsPJlibWlsqWxUY=SJ6XSJAEbFPEl=YEYJQ=YJQ=OMPJSue=bGAWlR0XO5Y=SRPExivXOuQEYJ0XSR/WxJQWbUYESJ/Jbse=bw0JbMPJxsqEO1AEbMAEls/EOpmJbj1XOJ0WOuDEbsP=O1eE0M/=lRDXSMxWbu6JSHvElMe=bp1=lpvXlWAW0EbEO=mWOGQWb1QWtR6J0WxESMAJYEv=lNUW0RxWSFxWbjvJbFxXlMA=libXSpYWbRDJxGeXtRAESRDJ0EvJYJDJS1eWtjmXtuQEOMeEOwAWYJxEtNvES1AWOEUESNmJbMq=tJPJlMP=tM0=luQWtuqWlRqWxJ6Jb1DEbWAExjbXSweJxGPWYpYWxM6EbsQ=lEUWx=1Elj1WluQWSGqWYJe=tRqESG0EOsD=bwAEx1/EOMD=OpYWSFQ=bGx=SFAEx10ES1DExwxElJ0ExNvESFAJbFeJlR/WbG0EOsxJYJxWtM0JxW6JbWxESHmWYJ0Jb=YJbu/JxMq=bHUXlibES1eJSJQEt=YWbsxXSwDEYimJljmXlux=bF0EOReJlE1WxUmJYJDWSJ/JbFAJYjmExEvWtjmWYJ/=lEUWtuxEtM0EbUbWSNYJxWDEbJAEtJPE0JxJSvUJbNYEbE1WOEYXl=mEtu0EOJxXlWQESJQESRQJbReXSW0W0MeXluD=OvmXSJeJbwPJ0pv=lMQWxvUWxMAESF6WOpb=lRD=YNUJSsxWOJe=t=1Jb=mExUY=OvbEYseXOE1WxM6=bWPWx1x=bFeW0MDWbjbEtW/ESNbEtMQJxJ/WOG/ExH1JxWDWS=UWtRPWbJ/WO1x=l=YWSiUWO=m=SJeJxsxXSRAXtMqJx5vXSRPE0ue=OEvXOjYESNvEYu/=SGAEbsQXO1AExWPWOWQWtNvESvYES1QJxR/WS1PXlMqJ0=bElE1XOR6ElMAEbv1ExM6WYRDXS=bJYpYJ0sQEbvm=lR6EtWD=SJ6=OHb=O1/WSF6Wbs6=Sv1ESsqEOsPWlib=l=UWxFQ=luxWOwDWb=UWbNb=bEmWxGQWbR6WxjmEtueWxw/WOuQEbwx=SsDEOpUJSGDWbs/W0uAXtjmE0ue=O1QEbwQJYR6=YNmWYuDJbJ/EYsPJS5v=lp1WOWeJSJeElMQJS51ExEbXOsDEluxXSUUJ0RP=SF/=bwDWxjUWSs/EtpYWb1/EYpYESNYXlJQXOpYXtN1JYR/=SRA=bjbWbp1=lWQJlWqJSHYWlsqWOHUJYReJlWPE0sDWts6WSWeWOsPE0=1JS5bJS5mES1/JxGxJlRPE0MxWtE1EYM6=tpvWlNb=YE1WxHmXSG/WYJAWSMA=OseJSpbExGPJSsQJbF0ExG6WtRPElJ/WO1QWbMeWxpUExNbESjU=l=YWlseElW/WbGAXSuqExEYExvUWbueJxHmElR0XOMQJlp1JlNmJSRQJSHvWbwqWOwDEOsDElpY=SiYJx=1=OJ/WSE1ExG/ESu0WYEUWlRD=YNUXtWQWYJP=ls6=OivW0NUWYs6Ex1q=OFq=tMQEtW/JxwAEtWqJb5bEbRxEbMqWtReWtJx=li1WlMxXlue=ls0W0NUExw0JbM0Et=bJ0RQESHvEYR0XOJ/ESFQ=S1xXtWDEOuPJ0uPJlWD=bH1JYMQEbR/JxFA=SJAEluqXtuPExGA=SJqJbJQE0Eb=YEY=bNUXlRQ=SHvWYMqWlRxJbFDEOR/J0sAW0M0WlseWbwxXOMe=SpvExp1WORPXOWPWS1x=bUb=YEmJb1P=SNbWxWQXlJeWSHYESW0Jx5bXlEbEtseJYu6WOvUElpmJxuPJbu6XS1PJbJP=SRQWxs0Wl=mWOjmEYNb=tu0WbNvEts6JYpvXt=1E0WQJSueJbWQJS5UJYJxXts/=OEUJ0pmXSW/Wb5mXlpbWOseEOwqJxpbEbvvJxU1W0Ev=SEbWbMq=SFA=YRQExFPEtR/=lR0=tpYJxJDXSF6JSi1JSFP=lseWOF0XOUmWSvvWbiUWxMA=lsPXOF6Wb=U=ls/ESueEOvYEbjbXOGxWxJ6WxvUExjYESGPJ0MxXlp1ES=YExpvJlReXlE1=SMeExR0ExMD=tWxEbuqJxRqJx5UWxwA=bsDEOv1JxF/XORQJbGqWlEvEOF0ElJPElW/XOjYWORqWxJ6EOwAJlpUWlRPExEb=OMqExwqJS1P=OE1WbM0Jxj1XSjbEOMxEtM/=Yj1JSJx=O=mWOF0=SJ0=Su6JSMe=bu6=Oux=O5mXlNmWbF/JlJ/WlpYEbsx=tjUEOjYEOs0=lMQESE1JbF0JxEU=SG/JxUUJSNmEYMDExH1ESGqXlpvESHv=Yi1=Si1EYW6JYs0JbHUJb1eWlNv=YJ6E0uqJxjbESimJxv1JSs/EOHY=lJQ=SN1=SEU=OReJxpU=lsQXOMqWbjYEORqXSuq=lpYJSHY=bGPWxEYJljbWlsQWYWAJxW/Wt=mJbuq=O5vWtNYJ0s/=lWDJxEUJSvbXOs/=SHbESwxWSGxWYNU=bWQW0JxJYJxWlJA=lJPJbM/Jx1xEbGeWOEbEbG6=tNv=S1qESjvXtjYWYMAWSMQ=lEmEONvXSwQJbJQJSivJxWAWOUm=tNmEbu6ESN1WYiUExEb=bR/EbvmEximWlWDJlj1Wx1QWtiUWbsxEbvbXSE1JYJeElEYElib=bwQWbpm=ORQWYNUJYueJxF6=bwxJS51XtjYXOuDWSWAWS1qJYMAXOvYWtEY=SuDJxs6XtMqE0Rq=bimXO1DWbNmEOwDW0N1JxMq=tW/EOpYJSsD=tNbE0=b=bN1Xlj1XlR6WYs6WtJPESJe=YuqXtux=Yj1WS=UJx=bXlsAWYMP=SM0=OuqJlM0ExNYEOjYXliYWxuD=SMDWtM/J0WQEbU1Wbj1EbRD=tsx=YuqWO10JbvbXSMeEtE1=Su0WbF6ExjbExMeEYuxEYEU=b=bExRDExMxElJPJSRxWSH1WOWQ=OMeXS5bEtNbWSF6=tu6JSF6Exw6Jx1xEbwQJYuPJlsQ=OuQXlNbJlJ/EOjvWSimEbJe=bwAE0Me=SUbWOsQJSNY=YWxJlWA=tWAWOMDE0NUJxw6Jls/ElMPEtW6=ORQE0R0=YimJbp1WYRxEOW0JSvvJ0W6JSReJbwA=Sux=SE1WtJAXtiUEOWQESHYWliUXSMQWxseJxuq=O=1E0s/EYEUElWDEYsxXtE1=ORxEbG/=OsQWlJAExM0J0seWl=YJbuxXtRQElJQExpUES1QXSwPWxUmXls6J0=b=bW6Eb=YEbwqJbNUJbvUEbJ0WxvY=lEmXlpmJ0MAXOsDJx5YESwPJbs/XSEUEOH1JxuqWSNYES5vXOFqXOW6=O1PWYsq=bWxEO=bWbpbWOJ/WSF6JS5vWbueElW/XOUbEYEbEtJxEbWxJbj1XOUY=b1PWxFqWxv1WxG6EtJPWtEv=bsx=SuqJbjmJx10XlJDJYReWxFqWbGqWOM6WbM6JlJx=ljv=SGeEOEmJlWAXSu0=Oj1El=vWOvvWOv1WOMe=S10WbwQJxWQEORDWtW6=lNYEYWq=OEYJxRx=lJxExu/ExR6XSGeXOuAWbR6WYWxEbN1=bRqEt=m=bGA=OHUE0NUElp1WtEYJbjvXSN1JlseXts0JYp1EOuqESMQWOF/Jxs/EljYXlsAWOs/=bMeEbW0JbFPElibEYuAWb1AWlEUEbwDJljUWYi1EOib=S5vJbvYJSHvXS5UJSHU=buQJ0WAE0JQESFeJSwQJbsQWSiU=S1PElpv=tWQ=bs0=tN1=lJDWOWeJ0Mx=tNYWbGeJSEmWxF0=lJeExWeEtR/E0JxEbW/XO5UWbvU=buQXSux=bsxEbwQEOWAXtJQ=OJDEYWqJYJeWb1eXtMe=OUYEOi1EYR/JxN1=OMeWl=bW0jU=tsQEbH1WxR6WlJAESG0WSGqEbReEOseXOsAW0RAESHv=b=UWYMQJS=YJ0jYJYuqEtMqWO5mWY=bExwQElJ/WlJ0ElMQWtJxJSWeXSjUJxibWxGAEOpvEOMxExpmWbFeESJQEOv1WOMPWYibE0R6=SiY=OUbWbG6XSJxJYMDJSJx=tpbWYRx=OM6Wxvm=YW/W0MPEYNU=SsDJSsDExGxExvUXSJAJYjbEbvmJYMQExw0Eb1PW0sQEb5UElWQJSRxESW6EtM0JSWP=OFeXlEUJbvYWtiUEl=UEOG6=tMxXSuPJxuD=lu0WSF0=OG0WY=UWYiUExFxElWqJSJ/=buPExjYWSp1WlMxW0p1JbGqJY=bJbReJYs6WO10=tsQ=bvvXSHU=tM6JYRQ=YpbEbF/=OGeElsDXOpvXtNYWlM0XSJq=OWxEx5m=SJP=ORAEOFPXtEvXOivEYNmJYM6JSsP=SM/XtiUXSwPJSW/WOwQ=b1/JbNmWSUv=SFAE0s0W0uD=OuqEbNm=OWqXSjb=OvUESpYJYRqWts0Xt=bJxHmW0M/Xtu6WxHbWSGqEbM6EOwAWYRxJbMqWlsPWOM/WSFDE0jYXOJQWlpUEYJPXSF6El=1JbEm=tJPJYRqESE1ExjbXlJQESwQ=OsQXtpvEbHb=luDWO1AW0WDWlWPXSHbWbwPWbW/W0RqWtWe=lsAJbJxEtuQ=SFQJSM0EYjbWxweJSuPWYRQJbuDEtp1JSpbWtJ0J0seXlW/EY=UWYR0=luxJbUvWS=1XSFP=Opv=YjU=b=vESF/JSwQ=SHYXOU1JSvbXOMq=tRA=SJAES5bWOWxW0WeW0sqJlsDWSMqEbux=SimWlE1=bWeJ0Rq=bNvXOvU=S5YJlMxJbGxXlsQWlpYWSuxExvbJYu/EbW0XO1AExvYWxseEOJ/Wxs/=ls6EYjvESsD=lueJbMPWxGeWOUUEOjvEtWq=bRQJbRqXtW0=OpYEYRPJ0WQXts6JxEUEbseXl=bWOpbXSMQ=OJxXS1AJ0ReWSMDJxvmEtM/ExGPEbweWlp1W0JqWtEvWxNYWOw/=SHvExp1JYRx=YJQEOw/WbJqW0EY=SjvWlu/XljU=Yj1J0jU=SR6WxFPJxs/WOj1WOsqElEvElN1J0NUJS=bWOwAWSRDW0EvW0pUExjY=SG0ElpYJbG0XS5mEb5mWxMqEOw6XOMDWSMPWxsPExJPXtpb=SsDXtRDElsqWlMAE0NbJS=vExUY=tjmJbuxESMxXS5bW0ReEbFxJSRqElWQExJQE0J6ExJAE0JQWSHYEOG6ESw0XlsQ=SFDWO1QEbRPXtuQWOR6Ex=1EYRQWx5v=lJxESvYXtN1Jbs/XOMeWOFeESMq=lN1WSFxJSMQJYW6JbvbXSpYWbWPXSGA=Ow0=b5mWSNUJS=UEYs0WbH1EOJAEYuQJ0NmE0jvJbRqWSGqEOwA=ti1XlivEtiUXONYXOiYE0ibExuDExu6WYWAJ0ivXSMqExux=b16JSue=Ow/J0R6ESEv=bHmXtsq=bHmWSHvEYp1ES=bXtMqXtWQWtM/E0W6WORq=lRxWxUYJbFqWOwqExWqWSWxEtjvW0WeEOJ/WxF6WxH1WO=mXOvUXSEvJlEbWtWQW0s6=S1eEbu0JSMAExJQWOEUJ0EUXtuQE0RQXtJ/XtMx=YuxWSMeWbEv=tJeXlW0=lM/=tRP=YRPEbMe=tj1WtuxWSvUE0sAWb=1ESReXtM6ESN1=SHbWSJqXtseEbjb=SWeXORQWx1AWtibElW/Wxjv=Sux=bWQWOMq=lRQJlEU=Yjv=luPWbWP=tNbWOM0XlsQWbJAWYW/ExG0J0jbWSJxWbGP=lM/ESs6EbJ0XSWqElpbESs/WbMQ=SGxWYsQWb5YEbW0=tseXOMxJYJPESWAWbMx=Yi1EYJxESRxEtR6WYsDEbGxJxv1XlR0=OW0=bFeJYuAEYi1WbpUJxGxWluAE0i1WYsPJbsqEbEbElibJSF6WtsAWO=1JY=U=lu0WYWq=SuPJxpU=lJqEbW6WbWxESMQWtj1=tM0W0u/W0i1=bweJYEb=SpU=SUYJlWA=SF6WOMPJbG6Elu0W0jvXSwq=luDESpbWlEbEl=1=YRA=bim=tivESiU=YR/=YNYExHYEY=bXSFP=O1qXSRe=YJxJbseWY=m=OJ6=bweJSRQWlWAWSsxJbimXOsxJxuQ=bWQWxMQJYJAElseJYjvWtJPJ0WP=lRAJx16EYiUWxHYJb=UExw/WlpYXlN1ExR0Wl=m=YRQExNUJb5UExpUEluQExF6WSF0EOu/WxF0=OWPXlMe=YJeExJxEOpvJ0EY=SHbWtNmEtEYWbwQ=YR0EOWxExUm=YMP=OHUWlWPWxw6Jb16JbWP=bUvWluQWtpYJxWqWbGDXl=vESN1=SEYWbWAXSN1Wts0JbHbJxNY=lJ0WOJ0EbHYElJ0=Sv1=Yp1WlWqXlJD=SvvEOu6WxwQWYEvJbiYWxWeEOJqEOw/JxuqEbF6=bpYJ0jYJ0MA=OwAWxRQESM6=bEbWYpv=tjbJxu/JSpmJ0N1XOu6=O1qEYNbJ0NvXl=YWOweWO5Y=OpbJxFQWYRx=bW0EYWx=lsPW0N1JxM0WxNbWS1/E0Nm=OUYEtWQEOWeExu/JSvb=bUUWO1PJx1QJSMxE0=bWbGxWYEvExjU=OF0EbMxXSFDE0J6XSJeXt=YJYNY=S51=SGAJbuAEOvbESsDJYpb=SGQXSp1WOpbXlWxEliUEYsDJxMqJli1XOUYWbpmEYjbJxJDWONYWYMPXljmEOW0Wxv1=ts6=tM0WxsAW0RqWlJ0JSu0JlJP=bR/W0N1ESimJS1eJSRxJb=UXSuxJbRDWSuDWYsQJYsPJS5bXtpUXOW/WOG/XOWDWYWQW0=1XO=1WYRxXlsqExUbEYWPWlRD=Ss0Ets6JS1xEO1qJ0=vJbJeXSMxWxM6W0ux=tM6WtMQES51JSseElR0JbuqEbNYJYM/=YR6ElM6WbMQE0M/WlEYEYJPJxNmXtimJbFqEOMeXtpYWxiYXtWxWtu0EYpvEbuQEl=mWOEmXlJQWx1/E0EUXSNUW0JDJbsPExwPEtMx=b=UExuPWSMPEO=vJlWxWtE1JSu/EOwAJxFAWOUvEYu/=OR6ExjYJYEUJljmWxNbEbRAE0RD=SHbXlj1EtNv=lW/WlMe=ORDWb16Xlj1XSJPWbGx=YE1XlMAXOsA=tWeElpUJbiU=ls0EOJqWOEbJ0WDW0EmExG0ESUmEOivWxvYXlRDEYJeWbMD=YRAElJAJYM/WSMxJlEvEOU1EtEbExGxJlM0WlJ/XSpmXOFQJSReWxHbEORPWSjvJYim=Su6=Ow0ESpYXlj1JbJAEbvYEbFAJbNmWbWxWYsAXtjYEljUEYM/=lN1XSWP=ljbXtMQESWQW0RD=Sj1JxUv=OwqWYNbXSUbXOReEbpYWSGqExv1JbsPESJqEbpvXluDWbMxWxJe=bMeWxRe=S=Y=bjmXSpv=O1eJSGe=SvvXS5UJbGqElRAESsD=ORqXOHYWS10=S51=buqWYiYWYjYWO5b=YivJxJDJbFPExw/Wxu0=OHmWbEbJbRxXtjvJ0pUEOHv=SJ/EliUWxvYWlpY=biUWSHm=b=1=YWeWxM6XtMAJxjYJ0jbWlJeWYjmWbwx=bHbXO1QEtN1Jlu/JxweWxpv=Ys/Xlib=tM0XtWeEtWqJbF/=S51EOF0Ets6EYpYXSiYJ0JD=tNbEbEbWbj1ExJ0XS1/Jx1PWlsDJlJPJbuqJxWDJlJeEbJ/JbM/JbNUEOW6WbuAWb=UWbsDElM6WOGQWOG0ES=1XSGDWSvvEx1AElu/JbRAWxH1=bWDEb5bJSFPElsxWxGAExuAJ0NbJx10=SN1EbpmEOw6XSGPWYjY=bMqXOJ/W0W0ESu6=buA=lR0=Y=1XluA=ONUWbj1=lRQEO=mWtuPWSvvXlMeWSJxJSHYWb1AEYuQWYNv=YMxEbNYWO16=Ypb=YJ6ESW6XSuxJ0uD=tJPWbuPJlWeW0p1JbuAES1/XO5YWSu0WtjvEOJP=luDWtEYWbRAJxR/=lJq=OW0EYu0XOw6W0RxJ0=bWlpm=SwAESEvJSG0JbEUWxUm=OwxJb5Y=lWqEl=UEbJPEOHUJSj1Ebu6=bEvWbM6XOF6WxMAEYpUJxWx=lWeWtsP=SFPWORxJbsx=YsQEbFxWbR/JlWeXtEU=bivWORDWbRqEbR6WxiY=SG/JlEYWbj1ElpUWOsAJbWP=lM6Wb1QEYjm=YsDEtW6J0=1XSJPWSpv=YRQExJD=l=v=SWPWSM6XlJQJxwqWS=U=Y=YESMDWS=YESpbJbvmElR0=OwxE0i1W0pYWOJPJl=b=ljmESF6EYJeWxW0XORe=bsAE0uxWxsAESFAEtuPES1DEbFDWx=vWlR/EO5YEbRqJbMPJYR0WtuAESWQXS10=OGPJ0u6EOJQWS1QWxWeEOpmWxM0JbHm=ls6ElJQJbGDExWPXlWeWbR6=bWe=SHYXOimExpYEtMPJSimJSRxWOGxExw/=YWPESv1JxW6EbJeEbU1ESueWYpYExvYExjvXtjm=YsqWSNUEbuAXlRQXSF6=OJAEti1=tWeXSFDXSEYJx10WSwqJlRQXtW6JYu/W0JAExMAJx1xExMQE0uQJ0sQ=OM0ExMeEtiU=lWA=OM0WYRDXOFQ=bv1XOF6JxNUWbGAEtRqESuPXSHmJxpYEbGPJbW/ExJqExu/=luPEx5mJbGA=YueEYM/WtjvESs0WSpYWb10E0sPXS5YWbjm=tEvWxim=SpmJSpvXSj1ESw/XOEY=bsDJSs0EO=UEb1QJbjYJbjb=SjYJSRx=OM/EOR0=Osx=tW/JbiYEbu6JY=1XO5YEY=mEOG0=OFe=SM0JYNYEtJ0=bRPWbsQWtRPESsxXlMxESNU=tsQWxvv=Op1=SNUXtpYEtW/XS=YXlE1WOwPEtRxESUv=SGqEtJe=tue=Yu0Jb10=lR0WbGqEbM6=SU1=buAWlJPWxMQJbuQJbJeEOuAEt=Y=ORDWbUmXSGPXSJxJxjYWlJxJbjv=bHbWbWDJxuxWSWDESWeWxFDESpvXlJ0XOp1=O5UWbMQWtRDJbUmJlNmXO5UJxJ0ExsAEbF6EYsx=SWDJ0RxWYjUJSMxWbi1XSHbJbuQE0WPESsqESsAJSpYESW0W0ibJxEYXlivWOWDWSN1EtpvWlJxJbsQJSMA=OFe=SUbJSWDWOs/WtNmExjmWxw0Jbv1EYEUJlJxWO5YJSjvWluqEtEbJb1qEYWeEOWPES1q=OuQWbJDES=1Wlj1=OF0=YRqXSFqWxUmJlueJbv1=OFxJSw6ESW0ExM6J0u0XOi1JS1AWlR/=YiUEYNbXtsx=SGDExJDWOW6WxNY=SwPWOUYJbMPJSR0JbFDEY=mJSFPWxHvEOWxJlueJbMPJbJeWYiU=S5Y=tuqXSNbJ0W0=SU1JSpmWOJe=lu6E0E1=tNb=tM6EYsx=O5bWbHU=bpYWSsx=YuqWlR0EYuPWlRq=bWqWxMDWYpvJxpYJlpbWxiYJSGQEbMqWbEUWOF6=Yiv=tNv=bvmWYMPExjUEbi1=lJxWYRx=OuxWSsPWbJ0XSG0XSW0ElW/XSR6=OsxWYM/JYpUWYjbEtsDEtN1EtJD=S1/ExW/Wlu6=YJDJSvYE0EmEbGqWbEbXlNvWlN1=bweEYimXtjUWxF/JbjvWtj1Jlu6J0JDJx=UWxvbJxW0=ONYWOsDWSWDWtJqWx51ElMeXtWD=tJe=b=bEbwPXSH1XOpmWSMD=OJeEOEUWS=UWtW6Wl=mEbUb=SGqJ0s6Ex1qWxuDWSJD=tMQ=OsPE0MeWlEmXtue=lReJ0JQEOFDJx5m=SR0W0NbXtu/ExUmES1qXSpvWbiUEYNUJYWPJbs6E0N1XtJ/XSJeWxvvWSwAWbivEbGqEtJPEYj1W0MeJlJ/=b=v=bM6XSpbWSvm=OF0W0jbJxGDEYEb=l=1WbwPWbwx=SpmWli1EY=YJbMPWlMPESw6JxGe=ONmESUYJxJ0E0u/JSuDEYWeJlpUJxvYWYuxWxwPJluAESJAESw6ESR/Wx5UWtueESjY=Ss0WlpUXSjYJYJeJYsAJYMeEORqJxGQ=tsQJSGQ=SJ0Wl=U=Y=mElRPWOJQWYJqEOweXlseWxseJbvUWxpYXOvmWSsq=liUE0J6WSR6JbweWSwAEOUYJSpUElJA=li1WSJQEb5mJxjvXOGQ=YE1XOw6EtibEbNm=OJDWOF0WxwD=SRxEYJ6WSFxElRQE0JqXOUmXOH1EbHbE0R6XlWPExF0WSMPWxuqXlRQ=YjvWSueEtuPExjU=Ou/=YJq=bHmEONmWORDE0=1WxGQW0sP=bGD=OEvE0jmXlMe=Su6XORAExEbJSNmElivXOuQXSWxEORq=bu/WlpvJYE1ESwxJx10EbG/EYpb=bEvJb1DXSNvXOJPEO1PWOwPWlR0El=vWtp1WS16=b10XSuPJYEYWtEU=bF6XSuPJbN1JSJQWOHYEYR0ElRDWSWDJlEb=SWx=bvmWOHUEOvvJxR0WON1=OiYEts/JYuDES5UWlsDJxJeXSReWxFxWlRPWxFxESu6WOJ6XOWP=bNUXtR6WOHU=tMDWSM/EOv1XtM6WOHvEtM0=O1DEORPWb51JxW0EbWQJxGDJSEYWOsxES51WxFQWOFxXtMDWtMPWb=Y=SsAJxG/ESEUESUmJxuQWxvmEYR0WOsq=SjmJ0MQWbvbXON1XOH1WlN1=bWqJbw0XSs6ESRe=OsxWl=YWSGQJbMxJbWx=lsQ=YuDW0N1Wx=1Jx=vXSueJSJ/WtW6JYEYJxweJYNUWlWDXlNbEOuDWtu0Xt=1WbGqJxweElM0=SuqEOJAEbpmJSue=SJP=tMDJYEYExW6JlRQES=mEbpYElJ0=bw6ElW0JSMeEbJPWtE1WxvmJbF6Jx16=bMQW0MAJ0iUWxM/J0E1E0WA=bMq=OG/E0WxXluQEbv1=lMe=SFAWb5UJSuqESJP=SuqXSu/WlNbXOu0Jx51WSM6=ORQ=OsAJxvUXOwQWljvWlimWbFD=tEvEtsxWbN1=ORPElJqJSJx=S16EO=m=SUYWtibWxivJbG6JbH1XOsPWxMP=OuP=ts0=bR0=lMxEO5vJxMPEtseXOvbJxUvW0MAJb1eJSuqEb1/=YJxJ0jYW0sqJSRDXONUXtNmEbHY=biv=b51=O5UEtWPJYWDE0=U=OG/E0iv=OUUElivJSWP=bJqXSs/ESEmEb1AWSw6WOWxExWAWxuQWbwqJbWP=Yue=bwA=bFAWSMeEb1QWl=U=ORqEtsxEO5vW0WPJ0uq=bGP=bvmExWxJbMeWYJ6Wxw0XOibJbwDXSGeEt=mWYM6JbF0W0=b=lRe=Y=UJx5YWSpbEOGx=bM0XOwe=bwQJSJ0WxpmXS16EO51ExJ0=lR0ElW6EOuAXlsP=bpm=bpUEOpmWS=YExHv=bR6XSHbWlEYWlNYExsxWljv=tJeXtWDWbR/WbFD=SMPWSs6EYWqEtN1ESFPXSFDJlpvXlJ/WbRQJlRqE0JDEb1DXOWDW0J0=bReW0j1EOuPJlMq=bMq=buA=OWAJ0EYJxU1JbjUJxW6E0sD=bJP=lNbXSWxWSwqEYEY=buPEbEbJSRDWbRDJSu0WlMPJlsq=SiUESwD=OWA=ts/=SR/ElWxWYs6JljY=OUmWx=bXSUbJx5m=bEbXtjvXtjbExH1XOJ/WlMqEbj1Exv1WtR0WYEUJY=1WbHb=S5mElNvWlp1ESW6ElRDE0MAXS5Y=YEUEbHmEbJx=SGx=OJeXSwAXlJQEbMA=bp1EOWDJxiYEtJDXOjvXtJ/W0W6WtJDWSJPXtpbJ0pmWSWDXOGqEOFQEbiv=SWDESEbElJ0=YJxWSvYWxsP=b1DJlibWtjbW0JQW0NYEYs0ExuDEYj1=tivWSuxElMAJbMQW0jYJb=1Jls6ESiY=Yu0XOFQWSN1WlWPXSvmJbMDExs0JxWPE0s6XSJ/=luAE0M6Eb1PJ0i1Jlib=bJ6WSWDXOjYWxE1XtMQW0sDJbG0JYNbEtM/XtE1XO16WbF/ExGP=luPJxuP=bsqJbFqEO1eJljUESR/WbM/JxUv=lN1JSWxJYMeXOvbWSvvJbivWlM6JS=1=tNY=bG6XlJ/XSWAWOR6ESEb=lM0EOsDWYWqWSJxXSs6=SM6W0JxXSNUWbN1Xt=bWOGxEb1xEtN1ESvbXORxE0N1EbvUJl=bE0J0EYEY=lMeWtjmXOMA=bRDXtpmJbG6=SW/EOsPWtWQXOW/XlJ0Ex16ESw/W0RxW0uP=OGDEOJQJxUUJS5vJxJ0JlM/=liY=bMxWSpUEYMqXtjvWtM6JSs6XtNbWxHvEYJ0XOHUXlNmEbE1XOR0ESFeJb1e=bUvWYuxJSwPWti1WYRPWYEv=l=1XSW6WSsDEYiYJ0RAJSiYElMxEOWxEbMPXSReWxGx=bs6=tMxWx=m=tM0JxvvExseESGPJbEvXOHm=SJQEbiUJxs/JlRe=bpUJYpYWlNmEbR6EbvYWxR/WSJxWxMe=S=UXON1Ebpb=limJl=m=tWDJ0s0W0seW0NbJSw0JSFq=YMDXOuPEYEbEbueW0jbWYRPEO=1ElRxWOvmXtWxEtj1=O1PWYMqWtEbWtuDXOW0JxRxWO1/XSvUEOHv=lu/J0EYJSvYExRe=O1e=OMqWSwx=luPXSuQ=OuQ=tWQJlibJlueWls0ExW0WlEYWxFPWS=YXS=UExw0ElN1ESFPEbR6=SEUE0MqJx5Y=YMxXtRA=YReJSRqWO5UWxUbJSMD=lM/XOF6J0iUWtuPWYibE0MPXSjvEOux=O5bWOuxJbUUWxNYExF6=tJP=S1/W0JQEb1/WS5mWO5vJlW6WYEvEOH1EbRA=b5bEbNUXtibWSs6ESMQEOGAJbHbXO=vJl=1=SFx=YEbWbWDEOvvWSWeWt=1JbJQEbHmWtiUEOU1=bpvWYWxEYE1W0RP=SvmJlsAJSEvJb1DJbpmWxvUEYu0XSGP=lMeJbFDEtuqJSwqExFDEOi1J0RAEYuQXtu/JxNUE0EvXt=1EtWAJYW/JYJQW0uDEtRD=OpUXSReWxMDWYMPWx5m=bHUWbu6=b5vJYs0EOEUJ0jmESsPExJ6WbpbES1QEOvbJ0M6WtMx=SJ6JbWxJxF0WbFDWbHUJSse=tNY=tueJxsxJ0JQJYiYXO5YWlRe=lsq=SHUJxFxJlpv=bNUXlMqWt=bEYEYEbWDWYimXSJP=OvUEt=YExUUJlsAXSjvJYjYJYiY=b1qJSu6Jb1QWxuQJSRAEOsxWOivWYsDEx16WYWQXSHvWOsDXSF0ESNb=YMqElpUWOjYESsPWSMD=tsxWSNUWY=bJlsq=b=bWYEmJbw6WbwDJx=YJSiUW0pUWOWP=tJq=b1D=Oj1WbNvESsQ=tM/JbJQXtRA=b5mESW0=OsxXSGeESu0JlsP=lpmXtR6=OseWl=bJSj1WbJ6ElNmXSFDXONmW0RPJSimWbvm=OF0=tiYJxw0=lMA=OU1JlWqJxu0ES16WbHYWxG6JxUvXtM/XSJeEb1qWOivEljUXlMe=li1=OMqE0u/WlMDWxEvJY=1JYRxWxWqJxHmWYjU=SvYXOG0EbMPJ0jmXlMPWtsDJSJDWYWA=tsq=bi1=bJ6WbJ/J0MDWOueWlseXSjYJxv1XOFQWtsP=tRP=b=YJSibJ0=U=bR0Jx1DElpYJxMP=lJQ=SvYWb1/JlivWbEvElM0JbF/ExjY=lJA=SM/XtM6JSwAXSiYWOw6WxGQEbNU=SuP=OMAJxs0EYpY=lJxXSu/J0iUWlJxJ0NUEbjm=ts/ESM6JYuDJb1eXls/XSj1JlM0J0R/WSu/=lMqXSimElpUWYWxE0sAJx51XlWAWOjmWtRDWYEmElW/XOu/JSuxWx5UXtJAEtWQWt=v=Yib=bJP=SM6ESJeWSGqWSs6=bFAWxReWOGAXSJqEbRDEbR6EYEYWYpv=lRq=bWP=YuqJbu6=OHmExE1WS1xXSR6Jb51=YJDJSs/=lRDXOR0XO1PWx1x=O=YElNYXtMPESRPJxw6EYMPESjUJbWP=SsqWSp1Wb10XtMqExsDJbM6ExW0WOUU=bwxEbv1WSs/EliYJYJQEOReJ0R6XtMqXO5mJxibWb51WlJ/XtW6=bGqJlM/=lMqXtJxXOpYWxRxJlWxWb5m=tW/JbRDEbNYWYuAExweEYseXtWqExibESFxEliU=S5m=bw6XSuPXSJDXOs6WSjmESR6=YRxXSW/=Ys6WSsPWxibJYJAWxGQWYu/=bj1=OReE0J0WtEYXtEb=tEYEOGDJlM0W0uPESUbW0=YJYM6ESpU=OjbJxuxESHmEOEYE0Wx=lE1WOpYES5mWxNUJSHY=bw/Expv=Ou/XOMxEYjb=YNUXSiYEOEbWYRxJ0=mW0JxEYJAJbMAWxNU=ORQXli1XSHv=b10=bibESHYJYuAElpm=lR/JxWxXO5U=Yi1JSRAEOvm=Ys/=SJqXlEmESNbXSpvExR/WtJ6WYMDEOGQWSNmWOwqWYiUEtjYEtpUW0uxXOUmJSjmXOEm=tJQXOHmWxJAJbFAXSpbEOEmWS=UESUmW0WQWSM6J0W0JSGAWlNY=O1xWSweJYJeExvvXS51Etp1WSi1W0sqEOG/E0MPXSEvExWeXlWAW0ReEORP=Ss0=YuQXOWx=Yp1JxNbEORxEtRPWOGPJYsDJYEvJlsPEOE1WOwD=lW6JbvmWluPWOivJx5v=tR/JSHUXliUWO=1XOpmXlWAJx5mEOHmEYsxWtiUXSse=bsAW0ivWSF6W0JeJxv1Jxs6=bJPJxMPJxMeXO1xESMxWxUvESwqJb10=tivEbHmJxEUESEmEOU1ESuqWO=1EYpmWlRAWx1DWtu6=YjU=lMeEOwA=OW0XSGPJYJeWOM/WSW0XlWq=S5YEbNmXlM/XtNbEOu0W0JqJ0j1=bRxEOG0XOW/WSJQWOG/EOj1WO=YJYuAExwxWOueESWPExjmWb=vXOMPXl=v=OWDJ0R0Xtu0WbJ/JSpvJlp1XOEmWO51=bRQWxNmWbGPJbEvWlRQE0sQJxJA=SuQXtR0XS=YJS1/ExsAWlEYWOHb=tR6JSJqXOJPJSsDXO=U=YMQJYuQXSHvXSpbESvYJSuxXO=vEOG/=YJ6WYpm=OEvES1QWt=UJl=vJ0N1EYNYXSWeWljbElsAJ0s/=YsxWxMDXO5YWbsQXSNbE0sDWSNvEb1Q=timJS5vWtR6Jls0XOFeWbJxJlR6XS1xExJPWxEUJSWeJlRqEYNUXlR6WYJ/ExMxWxWPEbv1ElNYESMqXS1AJxsPXOUm=b=1WlpvXtuqEYJQ=bG6WSMq=lMQEYi1=bFAEONUE0jbE0iUJxW6XOu6=SwqEtuxWtuAWxFQJxiYWYibE0u6XtjmJlJqE0j1JlJDJlW/=OG6XOJxJl=U=OHYJ0ibEOw/WYN1=YM6EOF6Wt=v=Ys/JlpUJYW/JSpv=buxJ0NbJxsxEbWe=Yu0Xl=YJ0EmEbWDWSHmWluDWbiU=S1PEtReWt=UJYs0WOW6E0s6JlWD=bsQWOHUJ0J0XlJeEbMxESRQWbs/=YuQWxUbEYR6E0EbWOMD=lJ6WSs6JSFxEOF0WljmWlWDExH1WlWAESU1=bsAExs/Wxiv=OWDWYMxWlE1=bG/ESEUWbJeWbvb=Sib=SpYEx1DE0jm=lW6XO1/=tR/Jx51JxJPWlueWlsqE0s6JSw6=SueJSUmWSMeEOGQXS1eW0R6ExMqJSWPEljvWSH1=t=Y=YJxEbvmJSuqWOUUXSw6=OHYJlMDWOsP=bUvJlMqWbMPEb5U=YWAElMPXS1PESR0Jxs0WSHbEbjmXlM0ExWQJ0WAJSj1JS1P=OvmWxM6EORxES=YJl=U=bMAExUYE0jY=SJPWORAXOF6=bpm=lRAXOvm=tMxEYWQJ0iUElN1WlMqWOEY=tEY=tMAE0J6=OH1=Yi1WYRe=lM6EbUUXOFAWx51WlR0JSHYWbRqJxs/=OMPE0uAWtiv=OR/=YiYWxGq=tEU=tEUWOvbXtJ/=bRA=lJDWtiYJxJAEOiYEOMPWtWxWOJeXSMeEY=UXSUUJ0jUJbFDWOMxWSiYJxWe=l=bJ0uPXONYEYJD=buqEO1AE0ivJbvUE0sQJbE1WxEmJbjU=SwPWxsqJSF0WtuDESNUJbwDWxJAJY=m=b5UWbW6WOJ6EOwDWtWxXtNbWOu0Ex1DJlsQXtsqW0WeWx1xXSNbE0Wx=bw0WbHmXSp1WxwPJxsAWYMAEONbJbGPEbUYEbi1EOpvXSGeWSi1JbRPWSs/=SGAWSim=bEU=SFDJbR6=ORDESWAElW/XtJ6ElJ/ExGxESW0WYR0Etsx=OsDW0jUJ0pmXtJQXljYJb=1JxGeWOHvJxHYESwxXtjv=OHmJxJDJYE1Xts/EY=bXljvWbEUXtM0WxM/WSRxEYu0=OuqWSHUEYsAJxp1E0=vJbGQJ0Jx=SR/=SvUEOEUWbMPXSUUXSw/ElWAXSM6=YJeEbJeWlJqXtRQEbM6=OGQWOG/=SWxEOJPWSjmE0NbXOuA=OvbXt=vWOEvJxu/Jl=UJx5U=bWqXtjYJxJPESj1=tiYWO=b=tMDEOM0EOEbJSj1WO5Y=bN1JbEUJxvUJYu0JbsPXO10ESWxJSpmJbGx=OwPEbUmW0NYXSJ6Eb=bWYsqXSp1WYMeXOv1J0j1Wbw/XlRDJbEbXtMxWxGDEbwQXOJeEONm=lNmJbW/JbWeESG6WSw0Eb1AXlNvXtMQEYuPWbR0WORQWlpbE0=vElR6Jb5bJxEYJbG6=Sw/JbsqWOJ0ESuAXtRQESGDW0p1EOuAWxF0WbsPJSWx=SNU=SWxEbWeJbW/WSFDJSJDEtRqJxRDW0MxJS5b=OiUXOEUWOsqEx10EO1Q=OwAJ0Jq=OEbWYNYXOEmESj1WS1QXtseE0WqW0E1JSuQ=Ow0WlEUJlR0EbGxWONvJluQWlEbXlsA=lMqXO1QWlR6WxwPESW/Jlpv=SRDWbvmJlpYXt=1EY=vEOJ6WSiU=lJAWbJQJbiYJSEb=bRAWxFPESiY=YuPJ0MDWOwxWtRxJxFQESsqEb10WSRAWlJ/WxUYEbUvXOM0W0RqWOMAES1eExF/WYuP=OGeJS1xWlNYWtJ0WxG0WOpb=bHYXlR0=lReXtW/XOU1XSFxXSjb=t=mJS1eJxwqJSGQW0R6JbWqJbGPJxE1WOpmEYsqEO1D=bsx=SJPXOU1EbvUElMeXtJ0EOEUXSMeExs6EY=1XlM/ESGqEY=Y=Ojb=b51EYMDXSUYE0s/EtMxEbMeExwQ=OMQJbWeESvvJ0seWYNU=YRQJxwx=Su0JYjU=bNmXOimJ0W/EOW0EOMD=YpU=bue=OJ/EtsQ=YMeElJQXSFDWOjbESMQXSjYJb=b=OHmXOj1ESiYEbsqWYjYESimExJ0WxWQWOwxJxwPXSN1WYRQJlReWSUmEbRDESMq=SNU=SjvJxFqXlNbWljbEtivEbGeElivWYEU=lRP=bM6XlseESuAWYE1JxWxWxUUExU1=OvU=bJxXOJ6WYMxJbwq=tsAXlJAE0RAJYivJxGe=YMQJ0Mq=tN1=bMxE0s0XSpbElJ/=lWAXSjUESGD=Sw/=ONYExMxXliUEYsPWtJxExvm=tJPEbuDEOF6ExFqWtueExU1=bwDXlEb=tMQExJeJYuDEls0WYimWlJA=lEm=bRD=SM6WtJAJb16J0EbXOjbESJ6JbJPXOvmJxWeElpUExwPXtivJlNb=Su6ExFQEx10XlEY=ljvE0u/=Oiv=tpmWtsQWS1xJSWPE0MPJxNUEbRDEYpbWbuQESG0WOu6ESwPWOuQEYJ6EONYJ0pbJlu6Wx1qXOwPEOibWSGqJbNY=li1WtuPJxFPExpYEbuxExU1WbGQXSMeEYEmE0jUWtsD=SG/XONbJS=bJYNmXS1/JYJDWSEU=bW6EYuPXO1/=S5YXlMAEx5v=tuQ=Sw6XtNvWYuxJYsxWlE1WSF/JS1/WY=bXSRAJYRAJbHvEbwq=tuxE0EvWbJeXtJ6ESueJ0N1XSNbElJA=bNvWSWqJbUbE0u6WxR0EYMD=SW/WO=1WOsDJbj1ESFDWbHbEYN1J0iYElEv=ljbExG6JYMeXOib=tM0ESMeWtN1WYW6XlJeXSuDWbM/WbFPJYEU=tNvJSJ0W0ivWOw6XSwAW0MQE0MqWOUUJ0jYXtJDJYEUWxwxJbim=bsqJ0=YWYiYWxEmWtEbXtJPJYu6WxuDJbvmJlEvJbUmElpmWOR6WOvUW0se=tNvEli1ESw/WtW6XOF6EYsq=SMQWlJ/JxM/EOGAJYWD=bimW0MeJlsxWxwq=lR/ElsDXSwPJbR6WS=YJx=UWOMxJls/JYRqWbse=SUmExuPXlJ6=YRQWxjvW0WQ=bwqEO=bE0iUEtRQESuPEtuDEb10XSGQWOUYExjYJbWAJbMeJYi1=b1eWbue=SM6=SuDJbs6XOweEx1PEbuDXlsxEtEvEtiUWb1QXOW/JYW0WSMDWlM0XOMqW0ueWxuD=Sj1WSFqJxsxESGAXtpYEximJxNYWx5b=SpbXlNY=YWPEYpvWYpmEbMDWxMA=bpY=lpUXOR0WbFPJ0R6JSuAWxJ/XlR/JSHmJSF0EOjmEtWDJYEUXSibWts6Jlse=biY=lRDWxW0JbWQXlRP=l=1JYM/XluDEbu6=lJPJ0JQEYWD=OjmJbRQEOweJYs/W0=bJlEUJSG6=S=UXtJAJSMDJlJQEYN1JxR0WbjUWbwPESNUES=v=Yim=Ys6=t=UWbJ/JlibEORqWxHY=YWPWtj1WYMeJSWqXOwqW0sxEYR/WxG6ESJ/=SsqWtEb=Spv=tiY=YseWY=UEtRA=Ys/ExE1XSseWYWqEYWxWOHYEtM0WO=UJxw6WSw0El=1JSMxWlRQWtuPJSE1ExEv=O5vWlMQEb=vWOEUEOU1JYMDExM6XOsDEb=YWOGDXtM0ESRQJSW6Wb1/XtsqJbjYWl=1EOMAWxRQJYRPElJ/ExsDJSHvXSRQXSN1XSJxJY=bWOue=SuDJYEbWO=UXO5mEY=m=tuAW0ReEtWQWtsxXls/JbRDXOsDJSG6E0u0=lpUXtpvW0RqJYM0EOW0ESux=ORD=b=bJbsDESw/XSw6XSvUExuD=SMDWbMq=YN1JSWAE0uq=S1eJlEb=tEYWYuDWtsA=bFQE0Eb=bRqJbNvEtiUEO51JYuqWtiUESFeWlNvWxwAEbF/ESuqWSuDESimWbivW0WPWOUmW0J0EYRxWOJq=bEbWOHUXS1QJSjv=YJQJbwAXOjbWSUv=SpbXlu0Xtp1WO51EOuqJbimJxuA=lWPEbpUWSs0W0N1ExU1E0jb=bjbJS=YXSseJbEmElMqW0uxJbGeW0pUJSRAJxFAEtMeESvmXSUb=SsPJbR0JYEbEONUXlR/WOJ/Elsx=OGP=bGDEtivJxMeW0j1W0sAWxEYWO1eXtMqXOFx=bjmExu0JxM6JlpYJluxWSu0WtM/EbvmEO=b=SRxWtR6=SweWtsAWxEbXtWAWtJAEtWA=OE1EOwqW0J6=t=bJ0jUJbW6=bv1W0EbXlM/WSG6ElsA=YNUWSwAWOvv=bRqEtsPJbwqElM6WOwQWS=Y=bs6ESR0=bpbXOMPEluqXSEvJxuq=bGq=SWPXlNvWxGqXljmJ0pUXOuDEbsQ=bMPEbNUXS1eWSpvExp1JxRA=YReJbwxES5YJYMAXOMP=lNmJlM0W0=bWOvUWbF6WtEmEtsxWtEmWYsDEtR/JlRPJ0uDJYpYWbwx=O1PJbs6EOF0WOUvXOG6JYpbJxuqXO5YWtjYEb1QWbMeJlsDJlRQ=bjYE0imEOFP=tjmEl=vEliU=bimEYRAWlM/=SW/=bivWSUmWORPWOHUW0NmEYE1JSw6WS5bXSu/=SWPWtsxWYuAJS16E0uQWOJ6XSJqJ0iY=bWPWx5YWYiUWxNUExEYXl=1WbwxXtNUXSF/WOimExGPEx5bXORqJ0NbJY=bW0J6Jli1JbHm=YNbWtM/=SwP=buxExiY=b1PXt=bWx1DEbiUW0JxExFAXlJ6EbFQ=bpYWxpUESNYJYiYJ0s0=bsA=Ow6=OMP=OwQ=SG/=bjmEO=UEYReJxWeEOM6EYiv=bG0WO1AWSG6=S=bEljvEYJeXlRDW0W6JxjYWbUvExMPWbGxE0=mEbR0JSsDWSEmW0W0JxUbXOJQEtiUEbWAWSG/=SRDW0WQXliY=OvUWx1PExvUXOMDE0pUWOuPEbGqWxUY=bMeJSjUJSsP=Sw6JSsQJYR6JYim=SWqEOvmES1xExGAExJ0E0pU=bu0WOFeEb5m=SWqXlWPJluDXOFAWxNvEtMPEbJQJlu/=S1Q=SpYWOMAEbG/E0ibWSs/ESpYESHmWOv1JSvmXtRDXtWPWbWP=bEv=bF6JbwQEOMAXS1qJYuQWlJqXOwqJbJ0EOF0WbEvW0MPW0ivExuP=SNmJbuAWlMeWSjvWlWA=OW6WSJ/XSRxXtj1ElJqJSGqJYjv=tE1JbwP=tpv=tMD=S1q=lse=lMqES1P=ljvE0i1EbuDWtpbExsx=Ys0=tWDEb1eWx5v=YM0JbwAWbJxWxwe=OU1XOFqWbjbJluQEbuAEO=1WbRDWxRQEtjvXlpU=O1PEbWqE0RxE0ueJlRQElsPWOEUJ0imExuxWbR/JSMq=O5UExUbJxWQWSReWOWAXOGAJbHYXOvmWtWQXSFDXS=1XSM6XSW/W0ReXtNbWOMPWb1AEtJQJx=YJSpbE0EUWtpYWtRQ=bwAExEmEbWe=YMPJS=YWS51=lpY=tsDWSGQXlpUXO51WO1e=lJ/ESwP=tu/E0=YE0J6WSFQEYiUWxMeXSvUEbuQW0jmJlMQEl=1JbjbXtsQ=SJxXtWe=Sjm=OWPElJQ=bs6JxvmJxReE0jvXOJAEx=bES1DElu6EtMPExwxXlJ6ElJq=bHbWxEvJSNYJluAJls0J0ivE0R/EYMPJYjYWbGxWbFxWOpU=SG6EbNmXtR6EbpbXtRAWSFQJb=YExvY=lpYEljmE0MQESWxJbs6=lse=tW/=tu0XSwxWlp1W0jYElMPJxJP=O5bWxW/EbMxJ0ReWxw0=b=mW0JqEYNYJbFqXO1DESj1WSWq=bjmElueJSu6=OU1JlRqWOJxWOF/=Sv1WOWAJYEvWx1/XljY=tueXOUmEx1eJb5bEbJ0E0pb=YW/=lJxXls0WOW0XOs/WOR6XtMPXtiU=SHbWlsqXOv1EtEYElN1WlR/W0R/ExHYESWq=S1DJbj1=OvU=Suq=S=1=bsqJSW0=ONb=S5m=bRDWtux=SJPWOibEOJ/JbHbEbFPWSpvEx5Y=YivWx1eJYWQWxs/EYpY=lRqXlsDWOs0=YuQXOJPEO=UXljUEbG6XON1WOsQEOvmWSWeJYu0=YWQW0J/=ts6JSu0WtEYES1/=YMDEOjU=SimJlN1Wlu0WlM0JYs/WlRx=b51=SJxWbsDES1P=tpmWxJAWONY=SHbEOHmEtNv=SMe=YJP=SseE0jUXSNUESs0WS51WOseJ0N1EbiY=YiYExvmJxM6=bFeXtuxW0pbWSMqWbJ/=timXtWQ=tib=lReJbJqWOG/WSUUWSFPEtR6EtNbWYimWS1/XtJxXSGQJbwDWlJAXtNmWtEYWYWqJYJAWOE1=YEmExRDESG0Jlj1WYjUExJq=YpbES1xJxwAExpvW0RqJxUYXOiYEYJxWxMe=O5vXOw6XOM/EtjbJSsqXSWe=tRAWbUYWtsQWO51WYW6WbR/XSJ6Wx=bWxMe=ORx=lWAWOiYWbu0EYM/=bMDJS5mWYJPJxF6E0M/WONYWbs0EtJDWxUvJlJqJ0W/=SNbXORDJYsD=O=Y=OEm=lMDJlJ6Jl=1WYibJlRQJSvv=tWDJxN1JlRxEYJq=tp1JYRq=Siv=OFPEYR0Xl=mEbMAWtN1Wb5vWbRQ=SG/WYjUXtiYWYWDJYR6JbH1=YWAJYueJlWeWlJA=SJxJxjYWOR/JxRqXSjbXOUmWb5b=SFqWtEUJS5UJxwD=OGD=SuQEOGQWxWAXOHYWOu/WtWeW0R/Ebuq=bJe=ls6Jb=YWxse=bw0EOUmJSjYJSGq=SUmJYu6JSG0EOs/WSivJlR/Wxv1WOwD=YJQWbF6JxivEtpUJbEmWx1x=ORqWtMQXO16EbueWSJPJ0pbES=mESvUWlJeE0WeJYpUJb=m=tuQWljbE0WQESimJlM6ESR/E0Jx=SJQJlJ/=SuPEtu0ESW6ESRqJSE1ElNUEbwxXOjvESR/=OGqWtE1WbEvWtJAWYEUJbs/Wts/WbpmEOEvXtibEOvUXSsDEO=vXSsQ=lNb=bEbEbFPJSRqJxUmJxRqJbvvWlsAJbsDJbRq=bwq=bvm=SpmJbHvXts/=SHmWlRAES1eWl=m=Ou/=buDJ0s6W0u/XtWe=Yu0JbE1JlM6EY=mEOJqWSsPElu0XSivWbWeJxF/EtWqJxsA=bvvJxpUEOi1Jbw/XtW0XSuQWbjmExjY=OJAW0pbE0RAEOseWbvUEOMe=SwPExEUEb10Eb5v=bMA=SibJYMAExF6=ljbJluDXS51XlimWS=b=OMPJxwq=bEYWbu/ESwQ=SN1E0WxEYWPJlMAESWAEOwP=tNUW0N1XSFDEOMQEOvYExw/Jb5bElRAJxGx=tEYElpmEb51ElseXSWqXSUvXSGAXtuQJxJ0WxuPWtiUEbFQWbWeEtuDElMqXlE1Exjb=lWeJS5YXljYXl=mJ0sDXOJA=OUUEtivJxF6JbMeElW0JSpmWxGeXSw6WSwP=tJ0Eb=b=YjvESM0EtiY=OWqWbEYWbWAJSMx=lRPE0NUXts/Wtu/JxJ/JliYJbGqWlueXOjbJluAEli1WSUmEOF/EtpvExJx=bFAEYuq=tsA=lJA=YE1XtJeJbwQEOJP=OEmJbEUWbFeWluAJxsxEtNUJYRAJSwDEx=m=SsQ=bs0=O=YWOUb=lsxEtpmWtj1Wxu0Etp1WxWDW0jmWxHbWb1P=OWDXlseWl=1EOMxWxiY=bj1WSwPWYsP=SsAJlWQJb1QEbuQJ0jU=SNvWYMPXOs6WOseJbsPWbJeJSpUWOR0=b10=YjmJbp1XtjYES5mJSHU=tuxWlN1XlReW0seXtivEYWQWY=YJbRAXOHYJSF6WbGe=O=YWOux=OJ0=bJAXOFQExF6=lNUExEvXS=vEtRQESv1W0seXOWqElJQEOs6JlRAESUmWxFPJS1qEOwDXtJDWx1/EbNvXSE1Eb16XSF/WSvUWOJAWbJqJb5b=YsQEbsDEOivWxJ/XSsQXljYExH1=Ow0EOM/=SjYJYJxJlM0WxNYEbReXS=YXS5v=SJqWY=U=ON1ElWeXtu/=b1AWbseEbW6XONUJYiYWOvbWSw0=SFQE0M0=bJ/=S5U=YibElu/W0J/EbG0Etj1Jb=1EluDExGx=YR6XSH1XOwDESW/E0RqXtu0=OFD=S5Y=O5UEbEmJbGPEbFxJSF0EOJq=OM6=bMAWYNUXtimE0M6EbimW0MAWSR6EbuPJbM/XlsxWOwP=bwQEliYESEUJYsDEYJP=O=1ExFxExEbXOwQXS10JxwP=SjmExWQWONbEtWP=bEmXtJeJb16=bWeJlMQJbpmJYjvXSNvEYRAWtEv=tueXSRPWSW/W0sqJ0jmWxF6ExWAJb1QJSW0ExsQEOFPElJ6=OpvJxM6XOvUEO1DWYJPWxRQJbRPEOGAEbFPXSW/ExwAWOpU=YNYW0NUW0jUWYpUES5UWYueEbRAEOu6=OGxXOW/XSMPESvmWlEYWSRQ=lMDJx5bW0WQ=OsA=SRPXtReJSWPEtsDExG/XtpUWOwQEOE1JYJq=bw/EbFPWYMDWYM/ElM6XtsxE0=bJxMx=bpUWbFPWOJqXtM/=SMPJbRP=lWqElMQWbuq=ONvWO5mWS1xEtJ0WbWQXOHbWSWxESHm=Oi1=bM6WxjY=Os6WtpbJSG0JxJxJbsQJSi1ESJQEtMqWYJP=bFAEx5YWlRx=OMD=bwAXSGeXSJ/WYNYJY=vJSuxW0J/ESFQW0jYWSF6JYp1WSRPXlimElsxXOR0JxjUWxEmWlse=O5v=SwDXSu6Exi1WSj1=OGP=OFqXOuqWxJq=O1QEYRxXtuQ=lJDJYiY=bse=SvvEb=UW0ibEOiYESMeWSu6WYR0WbR6EbF0EYj1J0sqEtN1EYJAWO1A=OsPWOu/ExFAWbGqJbRxXtRqJYpb=lWAExJQXS1A=lM0JxvbWSWqESWqXtEmE0M6JYib=OFeElE1=O1DWYEUXtpbEO1/XtMAEbF6EOFPWtu6W0MqEOFA=buqXSu6XtpvWb1xEOs6EO1eWxsxWSR6JxFxWbw0J0imJlpmExRAW0ivJS1AWxpYWOHmW0imWtp1=ti1WbR6JYu0EYsxJSuxWxsD=OjbXtW/=Ys6=tN1XtJxXSNU=O1q=tEbEbsD=SwA=SJ/WOvU=O5Y=bGDXOWPWbu0JYNmWYNvJxR0WYN1XSpbWSpvWS5bJ0MAJlueEYE1XOEUJbJQXtu6ESpbXl=UEli1E0s6WSvvXtpvElW0WSWxWt=UWbM/WS1DWO=UEbWqJbsq=tp1EbHUW0R6Ex1DW0NmXlJQ=OpbXS=YJxJxESGQJbsQXSsqJ0uQ=Os0WlE1XOUUXOFAJbuDElJ/XlR/WYpvEOReEbvYJxWQJxsQ=bNbEljU=SN1Wbib=lRqWbUUJSvmXtWQEbseElNYExNUJSGAWS5mExJAElsPEtWeEbuqExUmWYsPWbJDJlEmWY=YEtibXtWx=YRqWxJ6JbGx=bJ/EOpmXOueXOwqESM0WbU1Wb=mJlWx=lsQ=S5bJlR0=O1xEtR0EYM0WxjYJYEv=b16ExF6EtNUJYNbJSR0=SW0EYi1EOWQ=bJxWbRDE0=UWSF0E0=1XlR6WYW0=OGe=lJP=Sp1JlWDEtjYEOj1EbH1XOWe=YMqElN1ExMQWSJQEOu/XSWx=bNUXtWxXtWeXSvU=lEbEYi1WbRe=bFQWSjvWtRAJbsqEYsx=lMAWSRPEtuQWlReEYMxWl=mXSu0=OUmW0M0WSu6E0Mq=lW/WSiYWOFPJSMAWYjbWtEYWSpYWbJqWS=mJ0NbExwPWOF/Ebu/WOEUJx1/=bpvWSsxEOEYWtEv=SNv=YjvWYu6=ONbExs6=S=YJ0RqEbpmJxMP=b1AJljUElWe=OUbWxJ6J0u6=lpm=t=YWSu/=tMqWS1PW0i1JbuQXOsP=lNm=SNv=OsDWtRQWORDEOsPEOjvXtuAEx1/ESvvJlibXO5v=Ypb=tMPXORQE0Me=Ou/=O5UWxi1=SuqEYuxEbGA=tJDWtMPJl=mEOMeWYMQExEv=lJqXlNvJSjm=bE1=SJD=OvUWti1EbUbW0jvESRqXl=m=SR0EYpbJluD=SsAJliYExUUWbR/=tJ0W0Nb=bweJ0iUWtJ6XtsxESNmWYJQXSuxWOMAW0RqEOsAW0MeWSu/=bw/WxN1XOsxWxvYXtp1=lW6ExEYEY=YEOuDJxuDEOsDElJeWOsPWbwxJSimWSJQEb1/XOM/=OWq=tWx=SJQ=lRxW0pbEYuQEYJ/=lMQEYsAWtsDJb5YWOJAJxuP=YiYXtWAEbsQWO5mJl=UWxvmESNUEOEbWx1PE0EbEO1QEOUUEtpbEtuxJlsxXlpYExjUEbR/WtuDWljUW0E1XSFDEOFe=buq=liYESuqElu/Jbu6WS1q=lJPXOsPWYsxWtsqJ0WqEOwPESs6WSR/=YiUEO1/EO1PXORD=Sjm=O=Y=OR/EOpYESJAWxRxExseE0JqExFDESueJlMAWOiYW0ueEb1e=Oj1WtjUEtJ/WxGQWbjmWONb=YEYXtseEOJ/XOUY=ORDJ0sqWSGeExEvE0j1EONmEbUmJY=UXSUmEYWDWl=YXOjYWOF6Xtp1WSuQJlJ/=SpY=OwAJlu/WbGPJbHvWtux=SM/XOsDEOvUXtR0XOvbWl=1XS1AWxGPExUmJbHYWtJD=OM/Wb=vE0JQEYJ0=OwAJb=U=tJqWOHbJbMqESUbW0sQJbvbWtuqWtp1Elj1=Sw6=libWxU1JSGDXOEv=bwAW0MAWlWA=bFAXORAEYjbEl=bExFPXtueE0uAESsqXtMDXORAEl=mWtJ/E0RxJxvvWSHvJbsq=O=vWlM6=OF6=lM0Wxs6WS1QWxjmJ0MDJYjbWOjbJ0=mExMP=tReESHU=lJ6JxJxXS5Y=Yu6WY=bJlpUWSM0ESiv=SFAJSFA=bFQWYuAWbReJx1QWtMq=tRqW0Je=SHm=bN1E0W0=SsPEti1Jx16EOj1JxJ0WSFP=bJAWb1xWOs6=b51XtsPXOsPWlWqWxEYXONvEO5YXSEmEOj1WlibEOsAES1D=bJAE0=1ElsAWx1/WYEbJb16WbueXOGq=OGq=bRAJxibXSN1=bF/EOFD=YjvElMDWOw/=SWxESFQElJA=bFeEYMDXSFAJxW/EluQWlueJSwxWxMD=YpbJS=YWYivWSG0=bMqWtJ0XOGDWxJDE0uP=OiYEbwAEliUExGDEbu/=b1AJxwqWSWxEYjbEbJPJ0u6=bs0=YJqWOvUEbjUWlux=YNbJ0RQWOMx=SG0=OFqJ0pvWxMDXOJAJbGeESjvXlWDEbvbEbMx=OJq=tR6=SRAW0seESE1=bvv=Yu0=SFeEYu0Eb1/XSR/JbJeJxJQW0NvJSRAEximJSibESv1EtM/JSRA=ORx=SEY=OpYJSJ/EOW/EbWQWxReJbHmJbFqEbNmWSpUJYJ/WOJ0EORxWbs6=luDEbu6ESFxXlMeW0NUXSUYJbG0Jxu/WxM6JluDWbJeJYEUJYR/WYuPE0WAWbWDJSux=OpbJlWDXlR/EOpmXOHmJxEbJbJeJYiYJxU1=tRQXSs6JlsqE0s/WSvYJYpvXO=YJx=UElW6WlWxWOGDWbWDWONYESG/Jbv1WtsAXS51EOMP=tivWOWQJYWxJljUJxUb=lNUXSJ6WlNbJlEUJbuP=OGeES1DEOGqXOH1EYimEbGeJlJPWSM/=SRxEONUWtsPJSs0ESu0Elu6JbFPWluqJxWeWbivJ0WDWx=1EbimExWP=ONYJYN1E0sQEb5bXtseWxEbJlE1J0R6WSsA=YR/XOue=SNU=tM0W0M6WbUmW0NbEO=mESj1WtEmXSMPXONbJSUmESW/Jb=1WbsPJbW/WbsxEtJP=bJxJSpvJxG/EbUUExW6WSM/WbM6WxHYJbN1ElWDXOJQJYWA=tWAEbGQ=b=1WxvUEYEv=SRQWtWDESvUJlW0=OMxJbW0XlJAExGQ=lNYJYMqEx51JSNbW0jb=OwQEbJPJbsx=OHbWbseXtNvWtj1WbFqWx=1ExEYEliYXO=YEOwxXSF6EYp1Jbu/Xl=mJxse=tR0WxU1WbEUJSG0JbimJbMqXtMPWYNmXOEY=OuqElNvExFeJlJ/WO=vWYNbWYs0WbN1WbUUWbGAWxHbExNYXSpY=tR/JlW6=lJ6=bEmEtse=tJ6WSMPESjbWSjb=S5YJ0RP=b1xESGAJ0uP=SRDWbEvJYR0Wbs/ExvvE0jbXSJqJxjvWYWPW0JAExJqEbHb=OHYEbMeJYJxExs6EOEY=OsQJSG0JSUYESimWxN1EbM/W0ivWSM0ESJ/WSu0XSi1WxJ0WOpvE0u0JSsDExuqExsqJSHbESRPXls/WbimXtJ0XlsPWY=UWlsqXOuqWOwQWSi1JlNmWtJD=OHUJ0WDWOueElpbXtuxWbweJbUm=ONvJ0NUWO=YJxJQXOFqESNUJ0WQEts/=bwQ=tp1EbUmW0JQWb1D=YE1WbUbEliY=YMqWt=YJS1PElWe=O=Y=OHvJYpUWbHmEximE0W/WbsPEbjmWbsqJxRA=bRDWtimJYivXS1xJbGQWS1PWSFQJlNvJSjvWtue=SMAEtuq=SUmWSNUESjYEts/EO=bXluxElEbJxE1JSR/JbpbJ0uxWxwAWlueJlM/=bpbXSsxWSEm=b1x=l=UWOpYXlM/XtpY=SJ6=S1/WOWD=t=UEYs6JbjmWtu0E0jmExWD=Oux=Os6=lsPEtsq=SF/EYR0WbUmWORQJ0W6J0NY=tMeExsQWtuxElM6=bMD=ORQ=bF6Eb10JbGDW0jb=bU1WOw6ElseJlJqES1AJbseWSjv=YJ0=S1xESF6XORQWlWxJ0WD=OvYEOs0=OivWSF0=O=YEOwQJ0seJxUUJYReESM/J0MA=Sux=b51WlJA=lRqWYMP=lM6XSW6JlJ6XlWeJSsP=YMQESUUJbR0JSMAEbJPWt=YWtJx=YJPXlpYXOMDEYsPWbU1E0=YJYMPEx=b=t=1Ex5U=SNYXtjUJx=bEYs/WxW6JSv1XSseWOwQJbpYJb=mExwDJbRe=O=YXSJq=SMDXOuDJbw/JSwPXOUvWOM6ESWxWxpmEb1q=Ss0Jxu/WSHYXONYWOJDWlRxJxGQEb1xWOFeEY=vWONbJlJ6Jxw/WS5UWx5YESsxWtNbElivESEvJxJ0WlMx=SUbJ0M/EbHbWxu0EtN1Eb1DWxjUESHmXSM6ESEmJYRP=tW0XOG/JxRPWSM6WS1e=O1qXOw0EbweExMA=OWxXlRAWxWqWO1qEOjbE0Jq=tNmEOiUXtJ/E0iYWbv1XlE1=tpYWxHmJ0RqESJeJx=mJbMQXO16=tim=OM6ES1/=YsqWbiYXORqXtW/=S1AJlibXls0EO1q=bs0J0JAExHbExR/J0uQExJPJS5m=SsA=tibJYWxEtuQXlW0EtpbXlN1ESWq=OsQESFQJSW0XSivEOEbWOjYESUYXSi1WtibJlj1Wtp1JSRPXS5mXOsqXSse=lpbESuDJbuPXOWqJbuPJbUYEbGeWSuPEtR6EtWxJYJPXOH1WlRe=OEbJb=1WON1EbMeWxGxESFx=bw/XtuQWbs6ExRqJlEbWOvUW0RDEtNUWbsxJSwAESWx=Sjb=YjvEYWq=bUUEOibWOwP=lsDXluPWORPJlpbES1P=tsQE0JqW0jvJbFAWbM0JxiUWbUUJbR6Wxs6WSWqEtR0JlWPWOw/WO1QEYMAJbUm=lJqJ0sDEtR/JYjY=bpUEOu0WxUY=SR0=OWAJSJ6JY=vWOGq=ONUXlW6=S1DEOiv=YNUWximExvUWbwPXtNUJlsPJljbJxvUWlRqXSvYWxuQJbibEbH1=tMqESF0Ex1xJxMDXOMQWOHvJYJe=lMPWOiUWO10ExuD=bGAEliUXlE1JSEUWlsxJls6Jb16ESuDJlMQXSuxEb=vExJ/WtsPWlWD=YMQWtuQ=Su6ElMe=buD=YJDEYjUXluxExuDWbGDJbRxWljvWSN1XSN1Xt=YXlibJ0imEO1AES5YWbM/JYMqEO1DJSHmJlWAEYWqWYuPExuD=bUmJlimW0sAEbsQWtMQJSEUEtJeEYReJxUb=bvUXOimEOu0XlJxESMeEbW0JSwPJSJDWSiYJYMQJlNbWbwe=bEbEbGDXSjvJS5YWxs6=Si1XSRAEx=1WOuqW0RQEx=vWYpU=S5bES1eE0sDWbu6JbuPWbF0=YM6XtiY=bRPJYJDWbEUExUbElJDW0imWYEUJbNmJbsDWSGDESGD=OGPWxGxWYuPJS1AWYW0WOMPWS1/EOUYWSR6WtM0JxRxJbJ6W0NmXtu0WtNY=YMDWSF0=SF0JS=b=bJP=ORA=Spv=livWxMQElW6XlsqWbFQE0s/Wtu0JYs0=Sw0WS16JSHUWbG0ExRQWOv1EtM0ExM/=Ss/ExJAXOs6JYN1WtRD=SJ/WbMx=lR6XOj1=b=mWlpYWxjYXSR0WbwPWtJPEbpb=bJ0J0R0EbR6=lRP=tR/W0JQWxEvEtu0E0pvE0pbWbU1JxFAWbJeWSjUWbsPWSEUJls6XS1AWY=mWS1eExsqJxFQJlMxElpvE0WqJlsAWYseXSGxJ0uPWSUYES5bJSs6Elj1WxuqWSjv=tWxWSpmJY=bXSvmXSwDJxuxWxH1WbNUJSw6JxUUElM6XSGxWbEvEORq=O10XOuxJlWxWOpb=SjvEO5vEl=1XlsqEYRPXtJ/J0RAWbUvWS16XS1DEOUbEOFqEOMQ=bNmEbWQJxGqWbUbJxNYWSuPJS1DE0sAEb1xWtNmEl=bEbWPWtEUWSF/JbW6XtWAW0WxWtE1JbEvEtW/EOiYJbNmJliY=OFQJYuQEluQW0ibJ0WAXtWDESMxXljbJxueJls/=S1AEx=YJYMDESNYXOJxJxNUEO=mJxU1EOJP=luDJbJq=bUYXOueWOJPEbH1E0ReXS=mJYWQXOGeES=1EtjvWbRq=lEv=lJPXS=UWtRDE0RDXSimWYMAWls/WOiYEtJQXt=1EbMQJbibEY=vWtJ6=OuqESFeWxUmWbimXSW/EbsQESFAJYs6EbGDJ0M6XOUm=SuQWOpUESEvJb=YXtsxWSwQXSsDWSU1JxWQWxJPEOH1ExR/XOsQWYu0XOJPWxW6XSF/WSuDXl=bW0RDJ0W0XSHmEbUUWO=bWO=vWbw0JxRqWOFxExR0ElN1WOiU=S1DExM/J0MqEYuPJlWx=SjUEOG0EtsxExG0EYiYEYM6EYRqJSsAJSW/=SWxXSsDJxwqEbJAEYuQEbWe=bJ6=buAWlW/XlR6EtJ/JxiY=O=bWOW0WYi1JYj1=bFPWOHmWSJAJbs0JxF6E0=UWxJDXSEYXtsQXSFxXtuDXSWPXOj1EtiYExUvWtp1ExJ6Exwx=OFqESim=b10XONvWO5vWYu/EYjmESE1EbJ/Jx1QE0RP=Y=YElu0WSW/JlRDWS=bWO1D=buA=Oi1WYNYJSjmJY=vWls6E0s0JSG0XS=mEYMqE0E1E0iYE0iY=tReEOu0ESHYXSMeWbR6WtE1Exw0=livWxsxEOvvXO=Y=bs/JSjmJYJAExs0=SjmWbUm=bM/WSwDXluAEOj1JxiU=SHvExGe=tseWlNY=O5UEYW/ExWQXSw0=tiY=tWeXOG/=Ys/JluxJxuPWYWA=YNYE0JxXlimEtJQEOWPWxFQJx=UEb=mWOuQExGx=O=b=SRPW0RPWbjmJSj1=bi1WYs6Wls0WxsPWxsqWS1DJxMqWSsDJlW0JxG/XSvbEliUXONbXSjv=SueEYJQ=bN1WxuAXS1P=tRq=YpmEbvmXlRxEOWAXts0EYWPWxpmEbpvWO=UXS1/JlMeJxjUWxN1El=mJSimJbJ6WxMA=S1qWSNb=luDEbWDW0ux=tuD=bjvXlJ/Wbu6JbM0EOwxXSsq=OsqWbjmExib=ORQ=tp1JbWqJYWxJ0s/=YWPESRPJ0JAJ0R6XlsAJSWQESJDEbM6WxEYJYMeWxuAWYJDJYRq=OHvWO5vXOUYEtJqWxMq=tjbWSNYExwxWlMqXtuA=ON1WOj1=Ss6XSivWb=UJlW6J0MPJ0jUE0R/Wx=vExsPWSF0WxReWbwQ=OJDWYMPEOHbJx=mJb5UXlivW0Wx=tjUWYM0WbWxEYivWxRQ=SG0JS1xWbivXOw0WljvJYMqEbJPXlE1=YJQEYsQXtNbXtR0JlWQJ0W0=lMqJbWeEljmWYs/WbibWxFA=bsAW0u6JlRxWOweEOUYWYEmEOJ/=OwQ=l=1Ex10EtsxJlWeXtjYJxs0Ebi1EbwxWbpmWtpbXOWQEtRqElWDXOJAXOsqJ0uxJ0pvJS=vJSw/J0W0WbwxWxGeXO1/XOMe=ON1WtEUWO16=tWQ=ts/=OG0ESHm=tp1Exw0WlN1=OWqEOJ0JxRDW0MeJ0Mx=SGxW0J0WOR/EbFDXOWxElMxW0uP=bHm=OwxJbibEbRQWxE1EtiUWbs0=O1xXSJAE0RAWlWqESHbW0ivE0WqJxUUXtsxWxJxWxMDXSHvJbHUEbW6=SvbESG/=SjYESjYXSN1Jbw/EO=bJxWxWx1eJlJxWYWDEOEYEbUUJYsQXS1eEbFPJbsQJ0EbESN1WbFPWSwD=OFDWSEYXOvYEt=1WbuAExMPWSR6JxFQExi1Wtj1XSRqE0pvWlE1XSGQWb1qWtsQ=OjYElibElWxJbseWlW0WbsqEY=UEYp1EbWDXSG6Wbjv=SGDWbWxXOUU=t=1JSvbJYsqEbM/ESivWOM/XlNbExW/=OjmEYJAW0=YEOMq=Y=mW0M0XSJ6=O=vJYJD=b1eJ0sqJxiv=ts/WlRxWbR0EYJAJbwDWbW/WtNUWbpvJx1xW0Em=OjvJSG/E0ibWSHvEOux=tNYEbjvJx5YEtEUJbNYWSMqXSW6WSJxJxRQWbvU=luAEtuAJxFPEY=bJS=vExGPJbjYXOjmEOweXSNvJbMeE0ibJYivElsQW0R0Wx=UWx=U=OW0WYWAWluxExjbJlEUWSjY=b5vEOuPEOuAW0ReW0J/=bR6=bpbWxwPEOsPJSGDEOj1=YuAEbUbXSpvWSWxXSsAJxH1=Yue=bsDWOsAJ0uQWYRA=bs/XSu0W0R/WYs0WxvvJbR6Ebw/ExMQ=bReJbNmWbN1=OR/Jx1qEb=b=bNUWOM0XtjvWOJQ=b=vEtR/ESWxJS1e=tsQJxjm=b1/JxHmESvUWxUY=OEmEbux=OWqW0=b=OMQWxuPEtW6Wtu/XtR6WYNb=OM6EOFDWxWQ=SuQ=YsAXtuPXSJ/XtRDJ0EmEYEYJxuAEbs0WSEY=tueElW/=OJx=OjYEbFQ=SivEtW/EtueWOuQXSNv=OR/XSjUEOj1=YjYJljUEYpm=OwAEYMAJbJAJbjmJ0WxJ0sQWtuAWYRQEYN1=ls/EbWx=OsQ=OuPWlRDWSNbWONYJSEYXtJPJYJ6ESRPWSHUElpbXts0=buqWxGqWOMAWbEYEYibWxJ0WOuPEOu6XO1eJlNUJS=vJxJqEtjYEYMqESMDESseESEvExNmEb=YEluAXOpv=bGA=buDElueEx51=YuP=bib=Ow0WSu0=bFQWbWeEOHv=SWx=YNvWSUU=OwQElMqE0EUWYJAJSjbESFqXOWeWx5UJ0J0=SUYEbvUWbu6EOpmXS1qWbivWbNmEtiUJbWqJbHYJYRQWOFqExjvWSW0=YN1W0MxWtMQJSueExp1WtWPEtJ/EbpU=ts6J0M0=OwPXSM/JbMe=YW6Wb=mXSjm=bivXOUm=bpvEtWAJxFAJxMQ=b=1Exsq=OWAE0uPXS1xXS=UElJqJbu/JSpYXtu0XlN1ElRAWxEvWYRqEbHmXt=YJlp1XluAJx5YWtNUWOweWtNm=Ss/=tJeEYEUEOJQWx1QJbJ/JbuqJbsqEO1QWbsQ=O=1Jljm=bFAJSjUXSw6=Yj1XtW6WSHvEYsD=SRPWbNvJxJD=lpU=bJ6EOFPElWQExuD=YMQ=b=vJbvYESsQEYsQXOimExwqJxGxJbG6W0M/WYJPXtRxWluxEORDExw/=OFAWlM0EtEY=YRqWtNUEORPEOFqWS16XOuxJbJeWtpv=YjY=lNvWxG/JlWQXSu0=tuQEtEY=OF6E0RQWlWPEYjvEYJQWSwAXlR6XORPWb1QWOvYESivXSG0EbNY=bNYE0EYXSJqExRPJYJ0=OsDXtpmWYs0ESuP=lsq=bNUJbNbW0J6ESHb=OjvXOWPXSJxEYJ6JS5bJxseJbH1XOs0=OGPEYj1JbHUJSG/XO5U=buqJbpv=tWAJSWP=SpUESvbWSGDExF/W0J/EbiUJYpmXtWAXtN1ExGPE0MQ=OHvWbwD=buQXSHUWbNUExG0=lRQEbNvWS=v=SGPJ0=mWx1QElj1=OueEONYEbUbJxpUJYsDXOUYJxsxXOu6WOJAJ0=Y=YWQEOW6XtivJbUmJlsAWxEbWOvUExNYJS1DWt=1=bM/ExseJxsDESwDExv1EYpUXO1x=SJQEts/XSw/WxN1ExWeWbpmE0Jx=bw6Ex=m=SH1=OHUEYJ/XOJ/ExFAWluDEbjU=SE1XtMQXSvUWSs/XlNmElu/=O5mEYsxWSReElivXSi1JS1AEtsAEtuqEOEmJ0MPEOMxWOU1EtuAESueXSM0W0jY=bvvJ0jUExwe=OuxExvbESH1JbEUWb5YESuPWx1QXtWPWxJxWtjbE0RQW0=YEt=YXlj1WSRDWSuPEYW/WbWPJSUYWlEbJS1xXSweEO5mJSE1XOFDJSsQXO=mEOMP=OR0Wbv1Eb1xJS1xWS=YJSGeWSH1=l=bESNYE0pvJbG0XluAEbux=li1WOMQWS=vJbMQ=bRQWOuDExs6=SwAExEvEluQ=tpU=YM0=SWqWlj1XSsPEOuqExHUWbMxWxReXlsqXtsQXlsQEON1XONYXtuPJx16Jlim=YR/ES1AWtMAJbwx=SRxJYuQ=bpUJYs0WlimWxGeJlMPW0EvJxw0EOH1Eb1xXSj1WYNYWbNvEbE1WbR6=tpmEONvXlR0=SR/EOFDEbFDWbWAJS1QEbsq=OMP=tuAJ0M/WYJx=SNmExGP=OUYElJ/XOE1EOWA=tMAExWAJluAJbGeEbvUElMx=Swq=bGQJSW0JbMP=luAXOJ0WluDEx5UWxJQWSFD=Op1EYJQJbWAEOFAJYE1JSjvW0s/Eb5vWSFDE0W/WluAJxv1EbFAEbpU=SpUWbWqElR6EOF/=OWqEbGP=bwqJxUbEtJ/Jb=mXts/JxsP=lRxEtW0=S1/ExW6JxwA=SvmExJQJ0s0E0R0EbFPXSjbWYjvWS1q=OGqES1DJlMeWSFqEOu6ElsqWtMPXOsxExU1JxWPJSHUWYj1ESWeWbF/Wxim=OuQXSwAXljYJ0uqJSFD=OGAEOvYWxHmXOseEbRAWbwQESJPE0WeXluQ=bRxXOM0Jb1DW0J6=tWAXts0XSHmE0ReWliUWl=U=OE1Exu0WOpbEOpY=bEm=bNbXtNvW0pYJSWxWlRPEOwAEYRA=bG6=bvUESpv=bsqElM/JxuqWbG6JSs/ExuAJSvbWYpUEbw/J0MDXtR/E0iU=OG/JlNbJYs/JxvvJbFeJxMA=Swe=Ssq=SG/EOux=SM6=YM0JlsD=bR/E0sxWSp1JSw0XtWqXtsPXSsx=Sj1XOjYJbEm=YsAWli1ElN1EO=bJxu/XOEUXlMDXSpUXS1eWSW6WbUbElNvJlM0WlseXlJD=lW6WtR0WYR6EbG0EtpbWxu/Xts0=b=mJbv1XOuxWSW/Jlj1JxEmExNUXlNUWOMDES51WxpbE0iY=O1/=OGqES1eWbu6WxpYWtsxEO5YJxJeJSj1WOpvWYWQ=lRxWOWqWYM6EYu/XtW0Wti1ES=vWx1/WluQ=OJDJb1D=luqWbGQJxs6=YR/WxH1XSj1=OGqXOGP=OjUJSR0XOuQJlpvJYN1JlseExuP=tRxXOwQEbivXSJ6JxvvJbj1WOp1E0uPWbJ/=OF/WlM6EONbEljbJYi1Eti1WYiUEOiY=bjbW0u/=YpY=SRQWlMQWSMQJ0RPWOEYEb1eJlWqWbw/ExEvXSuDWbuQWtEmWYpvEbp1EYJqJlJQEtW0XSUb=bRQJxpUXlivEbMQXtjYWtu0EO51J0sqWtN1JbRDElJ0JSW/=Sw6=SEvXS51WlJq=OMQEO5vJ0JQWbFDWYuqWxEmWlueWbFDXOWPWxGDElEbJSRDWOWxWbRq=YseWS1PESHmJbwqXS=UExJeEYJDWb=1ESu0EbWQWSNbWOuPJbWAWO1PWxibJSU1EYWxJb16ExWqW0WDWxWxWtRQEli1ESR0WOW0JliY=SJeJb10EbF/WSHmJS=mJxWDExRe=SpUJb=vJxvUXtu/J0p1EYNU=tEmE0JDESFqW0ueElR6=lpvXtuqJSNbJSRAXSJxXlNUXlWAXtseXOvvXlRq=lpvWtMQJYR/JbJP=OJQWxHm=tiYJYMq=tsQ=tMQJxF0WYMx=SW6E0EbJ0N1XluxEbpUWbvUXSWA=OMPJlueEtEvWlibESGQWSF0XSNmJb=UJYNb=bRe=OHU=SHmWlR/JxE1JlNmWSiUWbGqXls0EtJA=O1qESWx=OMAWYiv=lEbXlN1=bWDE0jmJSjm=S1/=tE1JxFDW0EmE0imE0MAWxs0ElEmWYReWxvb=SGeEx=YJx5UXOwQ=YEmXOjmJxWxWY=UWx5bJbR6JlWxWSJAXlsqJxJDJxsAEYNbJxMAEbwPWb1DWtJDEbMqJlMAExs6=OF/EOsDXSMQJ0NvEO1xWOGDXtuDXSwqXSWeXlM0EtueEl=UJxpvWOM0W0uP=OWq=lNYExuAJSu6Jx1AESsQ=tJP=tsQXSFqWS5bWxMQJxJqXSw/=li1Xlsq=lueWbNvWtEUEOFqWOMAExWq=tue=bNYWSRP=SuDJxM/EbR6=lWQEtReW0R6Eb=UXlRQJbvm=tWx=SJDWbjbJbv1XSu0=tEmJxsA=SF0Ex5Y=ls6WxuxJSNYXtsQJSpvXlpYXOsxWOR/Jlu0=O1AWbu6=ljmW0RPXORQWlM6ESvmWtJqEtMeE0s/XSsxWls6ESiYWYpUXSibJSF6XOpvXO5bJxse=OJ/WxjvEtM/Wx1xJxMAW0uPJSpUXliYJ0Me=YiYWlMQ=bjYJbWQXO=bJxRD=SHbWx=U=S=bExs/=bwxJSvbEYN1=SNvExFQWx1QWbwDJYJ0JxG0=YRD=SsAWbMP=YivWtimE0JxXS5vXSR6XO5bJbUYEtsQ=YE1WS1QWbM/E0WqJlJ6JYjbEx5m=ON1Jlj1Eb1PXSwA=SGqJbRQJ0J6=SRPE0iv=OGxXlsQJbiYElJxExs0JSibElEY=bpUEtjUWYWAJ0MAE0MAJSimWSMDEYjmJY=b=lRAJlW/WtJPWOvmJ0=UW0ueEliYJSJPEOF/XSi1=b1PWO1QEYjmJYNbW0uQWbMQ=OsPE0WPXO5YJYuqJlWD=OjvJlEUWxseWSGPEbU1Eb16XORqWOFPW0uxE0R/Jlu6WSNvXtu6=OMA=bwQWSuAEOGDW0u0ESiYEbF6E0We=bUv=tJPXOJqJxvYEOpbEx1QES5bExvmEljvEO1qXtM6E0ivXl=vXlR/ESEbElpmEbEYWb1q=O1/Wb1eExwDWbJQ=b5YJlW0WbueW0MDJYR0=SsAWbNmEOsP=li1=tMP=lpUWO1Q=OMAWOpvJbseXOuAE0EmXSR0EbwP=SM/=Sv1JY=U=t=UJxRe=SsqEOW0Wx5bEtReWbEYJbpUJSJDWSiU=SG6XlRxWlReJ0=1XtNbJbJAJbJPXtu/ElseWxG6WxFDExG/ExM0EtRAJ0RDJ0RqWl=YWtEYWO1x=bW/XSw/WbMQEts0WYueEluD=OjYEONv=YWQXSwPJbEb=b1/ElRQ=S5YJ0WDWYMPESsPExMqWbs6XSFQJYMQJxUv=Sp1W0ivWt=v=bs/=YiY=tu0EbF6Jx1e=Ou0WOUbESWQ=lR/EOwDJbueWxwxJxwqJx1QJYseWbHvEOvb=tW6JbMA=YRAESp1XOwxJSMxWOJP=tWAJ0Wq=lM/EOEUEOpUESsAEOFx=YuQ=lsDWtMxExvvXOuxWSW/=bWxW0ux=SseEb1eWxwD=YMQEbGQEbReJlEbXtjvJbivXSR0=OGDXOEvW0uP=OMQ=SMxWbG0WSMq=bM6=YReWtMeXS=bWbJeXtE1JYEvWYpUWxF6JSFPXSi1=bMxEluDJxUvExHUWbwQ=tW6ESp1ESvvJlJQEtNbJYJ6EtibEONmExRQExvvJluPJS1QWtEYElJ0XSpvJbjYWOJD=Os0=bFqEYNbWSGPWSsDXSRQJxHv=OH1Jlue=SMeXSFqESWQESNvExNbXls0XtMQExJq=tpvXtuqWOvUJSJQExUUEtJPESM0=OWDWSsxJSuQ=OH1=bimEOvbJxR0ExMqJb5b=OW6WOR0WxwqJx51EbjmWORD=OpvXts/=lW0=OF/XSJqXSs6XSGD=lJeE0jU=SNbJSJDJSv1=tJQExEbXtRDEbJ6ExWDWbjbESGx=ONbEbp1Wlpb=Y=UExNmWYpYW0RPWYJqWOHYWxR6XOM6WYuqJxFx=SweWOw6JYj1EOMe=Ss6=OivXOv1=bJPXSG0ExvU=tRqExRPJSJAWb51=tpvEbs6ElsxWYRPEbU1E0ueJlE1E0=bWbRDEOwqEx=YXOu0EO5YJSuxJlMPWtEmXOUb=ls/JlEvXOwAXSMqWtNb=ts/JbUvJYs0XtRPEOwPJ0uPWbuQ=SwD=bWeES5mEO5bXOWqEtibExueJbUYWlE1ESUmWbv1=tibEbWxXOuqEb=1JlMPWOJQXOw/XtuqEtJQEO5bWO=Y=YNb=Y=1Jb1PW0Mx=timJSJPXSwP=lWq=YEbExGPWbw0XSFDW0RPWSRDXtu6=YW6JYR/JSHmJSRx=OHm=bWAWlpb=bJDWSNvJSGPXSjYWYNm=bueJxuPJYEmEOG/=tMP=SNYXOux=li1WSMqJYsq=bR0J0JeXOWAWS1QJSMAXlpYJx10=SEbWlMQXtJx=lMqEtuAJbRDWSRe=tRxWtivExUmWbUUWYWeXOweXlRPJ0JqWtNmWti1EbFAXtM0=bJxW0WeWOJA=bsQWO1qESEUWYR6JYM0=bw6EbW0XS1q=bM/WYW6JSMeWtRxEYu0JxjYElWqEx=UE0E1EbUUWS5YJSw0WtRDJx5YJb5vExpmWxGqWSWD=OMQE0imEO=vWOWQWSEmJS5b=Yj1ESW6ESR/J0sQ=b1qE0NUWS1eESs/Elu6ES1e=tivESjm=SsqEYRD=bWDXSHYEtM/WlMxJb=vJbJQXtEYXlM6XOsPWxJPJbWxESp1WOwQEls6WxHbWxGDJSjvESM/=lWPExjUEORAXtiUWS=UJSjUExu/XSw/Jxw0XtRAEYRAJYpmESuP=SwQWSHbWO1D=tJ0Eb10XO1AE0WeXOWDXOsPXO=UEtpYEOWq=lpYXS1eJSiUEOMDElReJ0WqXliv=Su/ExHUE0M0Wtjm=bweEYuxJbW/EOvbJbWx=bsDWYWqEx1e=YR/Ebw0WSRAJSFDWOvv=YM6ExW0EbU1ESMPEtEvJx=U=OEv=lpU=ls0WbseESH1JSM6WlJe=SMqWx1e=bUbJ0JPEljUWOHmWb=1WSRPXtpvXtR0JSsA=Ss/EYWQEbW0JlNmJxUY=tEbJxEm=OwPEYJQEYJeEbvUWls0ES1eW0E1JYsPXlEY=OHmExG0JSEUJ0sAJ0sAWS1PWt=mEOF6WOwP=tu/=SGQEx1eJ0JqEbW6=OvbXl=YJYJ0XSJQJ0NbWxWQESMeESGq=bM6Eb1/JxuDE0Jq=SHbExFDJxs6=SEUElWAExs6WbMDW0M0=SN1EONYJ0=YXlRQXSwDWSWqWS=mXS10XO5UXOweWOU1J0sqJYi1ESRQEbM0JYs6XSw0XS1xJYimWOJDWtNU=lM6=Su6JlJeEOvb=bW/E0iYEY=1=YsAWxUvElsQ=YRxWSMP=SibWtsDJxvUWbEYJYs6ElsqJY=YWbjU=bGAESGPXt=UWlNvJbJ0XONmWbNbJYW0=SG6WYiYWbJe=tpUJSM/EYpb=bNvEYM/EOM6JlRqW0W/Wx=bEOUvXO5UXSiUJSNUEb1eWtseXSimJSWqWYRAXSMAJ0JAElpm=bivXOjYEtimJbEb=SFAWtJqJYJDEb5YWtRqWtR0=OUU=bwxJ0J6=OjUEbNbESJq=YEmEtu6XOW/=b1eWlu/=tNbW0JqJxGeWtEv=SwxWSjbEbG0Wbv1Jxu0W0uD=SMAEYs6E0=bExRq=YpbESwAWOGQJSJ/EOWxJljb=O1/E0W0Jx1q=YibJYEUXSN1ESwAWSWxE0pYWxw0J0MqESJ0JlpvXSFqEtiv=ljbWlsQ=Si1WSW6EO1e=lj1WS=mJxF0XO10W0=bESFAESR/WbFA=Ys6JYs6=S1/XOFA=S51EbJx=SJA=YJDXSs/WSu0=OJ6E0seWtpYEtNmWbjv=lueEbG0Wxu6JYsD=bjvXtp1JS=b=ls6XOJQE0MQ=b5bEOuqXSH1Wb=mWxG0EOiYJbG6JbUbXlM6=SiYJ0sq=SRxExEUWO=mWSwxE0RDWOWq=SW6=bGDWbw6E0ueEYivJlEYEti1=SRPExi1ExM0EbWQXSG0XSiYEtpvXtW/XtuDEORQE0EmXOjvJx1qWt=m=Ou/=Su/EOJq=O1DJSMQWOu0E0=bXljvElW0EOpbJSJA=Yj1Jlp1=YMQ=tWDJlWqXlM/WlRe=OEbJSvvESHU=OwAXO5bJlN1JxR/=OsPJx5mXSGD=bRD=OuP=O5vJxR0XSF/=bJAESGQEx1qEY=1ESpUEYM6=OHbJxivW0iUJ0WDES1DJSRDWbRQJxJA=SsxESu6ES1PJSHvJbR/=b=1XSGxExHmXlReWYNv=bw0ExEbElEvJxwPEOM6=YWxXlNvXOuqWb1PJ0MqWtJ/JxFPWOUmWxuPJlMDElpYWORPE0RxEOMAXlNvWbsqE0W6WxUvXO1eEY=vJbNbWSW/EOReWSFeWbHYWts6JxGqJbimWbJxEYsP=YW/JlWeEtJx=tM/EbFDEx=vJlNvEt=b=bi1=tJP=Yj1WbMeWSNmWSW0JYJAWtNbW0i1WYJqJbMAEO5bWYRqJSNY=O5v=ljYWSuPExMAEOWqWOUmWlN1XOw/ExUUWSGDWxJAJlNUWxueWxUv=tuA=lsxWSRx=YWeJluAWbsqEtJ6W0j1J0EbWOW6ESJPXSjYJYjmEbu0=S1/EYMQ=tMP=SRQJ0uxWOv1WbEUESwq=Si1=YiY=Oj1EtNUWOsAJbWQWtN1=bHYXtRPESs/XOJ6XOR0EtEmWSEYJbJ0JbGA=OWQ=bpUJSUvWO=mJb=b=SE1WSFQEYjbWlWAEOGP=OibWx1DW0RQWxWAXtu/ExMqES=mWxu/Exp1XOGAWSJxWSHv=tMPEbw0=bw/=b1xJbweESRAXS5UWOMPW0NUEbHYJx=bEYsDJlpYESw6EljU=bMPWtNbJxM/JxsPExGxWYRx=bvbWYNmEOEvJbWeEbEYWx1QJbUYE0sPJxwQEO=mWSRxXSJxJSim=bE1XOG/WlimWSHvE0M6JS16=OjY=SsxJbvmXlR0Jx=mJSFDJYs0WSNmJSJqXtjmJSRq=OUvWSjY=OGQE0MxWS16JxNU=YiUW0=mJ0u6=bUvWxpUE0pmEYM6WbR0EOpmEbs0XOuqE0MqEYJeJYEUJSGPElRx=tj1JSM0W0Mq=bpmJSRAXOEU=Ysq=tj1J0=vXOHYExMAESj1=bGq=bFQ=bMPEbFQWxpUEljmXtJDEx1eJbM0WOGeEbEvJ0jvElW6Jbs6WbMx=OpbWtiUEOsqWbR/EtsDEOv1EximXtW6XtWQWOimExsDXOueJSNbEbwqXS1DXO1eJ0Me=lJ0JxJ0Wl=mJbvbEl=vWxuDE0uxJlEmExuDESEUEbEUJSvUJxsxWls0JlM/E0Rx=bvvJSFeJYpUXOEUEOMqXlWDXlib=SpbExUm=SUmXtWxEOMeJS=UWO5vJluQ=OGxJ0RAJSWQWbJQWOWxWlMDJxFeWtWxE0ReXtJ/WYNv=tpvJ0W0Ex1eWxjUJlimXlEYEtM/JxMA=OGPJxu/JSGeXtR/Xli1=lRAEtJ6=bM0WOpYXtEYXOweJb1QE0=1EtRPWSWeE0iYE0sqEbHm=O=m=OUYJSw0Ebuq=SWeXO1xExFqJb5UXtM6XSHYExRAJ0JeJS1QEORx=lNYXOM/JSW0=lJPJYuAExwqJYEbWlRq=bJ6XSUm=SJ/WtsQ=bi1JxueWlJ6WlsPXO51JlRqWbUYJYM0WOuDWS=mExsA=lNmXSNbEbRQWlJQEl=v=SwD=bU1Ex=bXOvb=tN1WbGeXSsx=tsqES=bESEmXSJxWOH1WOuqJxvmWbwDJbwAE0u6W0uQJxU1Wx5vEOFQE0ibWbNm=bN1Wts0=YJ6=YRxJlN1XOGxXSwxESN1EtRP=lWDXSj1W0iYXlWPEbMxJS1q=bGD=ORAEbJPElu6W0=1XSuAWxwq=bv1JYs/=S=mElseEluQ=bM/WYW/WSvbJYu0=bJ/=lJe=YMeEt=bJYMQWSUUWO5UJxuPJS1eWO1/WbRqXO1eEOH1XtNUJx1e=YJeJYsDWSUmWOEvES5vWxjmJlibXSiU=Su/ExMPE0R6XS10XOM0JlEUExWPXSjYW0ReWbFe=ti1JlR0JxJQXSNbEYMDEOuD=OW6WlM0XluQEtseXtivEbGDW0WAWSFPXSGPEtuQJSRxXOGxElJ0=YjvEOHUWbWeElWDE0ReWxHY=S1/WtMQXOuDJbR0XlNUWxFPJlJ6XtMe=bJxJSWx=SvvXlJxWSFQ=SRQWYJA=bwPEtRqXlWxESvYW0RqJxpUJxEYWbseW0p1JYJxESRQ=tRQ=bG6JlMq=SR0Wt=b=bJDWbwPWSWPJxs0=SWDJxReXSGxWx=v=SibXSuqEO5vEbjYJx5UEb51W0RqEx=mEbiUJxUvJlpYJ0uqJbJQXOJDJSFeJxF6WluPXOs6WOG6XOUb=OsqEbiY=bim=S5YXSvY=lJ/EtEmEOEvEYRPXSEbJxjbJxFDE0JqXOFxE0uQ=YpYE0WDWb16=OReEOs0JbR0=SM6EYpvXSWQ=lpYEbUYWOWDWOpUXORAWxu6ExwQWljUEbJe=YiYElJxEbs6EYjvJlpmWb=mXS5v=YMAJlu0JS1qESWA=SuAEOuQWljb=lWDWYueWSFqEOEUEONU=SMxWlp1E0jU=OUUJ0JqWxHbWOp1JxseElRPXtsxJSW/EOMeWl=UEbwQWSvU=bRDJ0J/Xt=vWbwqWtNvESRQ=Sw0WYWDEtMQEOWDWYMeJSEYEbJDJ0M6=OEY=OM0WOpYWYs6JlivWbw6WlWPESpvXSG0Ebs0ESs0XO=UXtJqXSHvWxvYJYseJYEm=OHmJxMAEbMA=SJ6WYMQWlE1WbivWtsDJSjmXS1/WSGxWbpmJxiUWxNbEbiYWOMe=lMeWOF/JxNvWt=bE0NbJSRQXONUWSW0E0=vWx5YWORPExw/Els/ElRPWxJPW0Nv=ljvXOuAJb1QXSWAElWAElNbEbpUWbG6ExJAJ0JDWx5vWbF6EtW6Jb5bWOWQJSvb=tuxXO1q=SvvWbvU=bUbJxweWxNbJb=vXSGAJxFeJS5m=SsDXO1DJxJ0=OwAElR0=lpmEOGAJxRPJ0R0JlJx=tMqEOueE0pv=Ou/EljvWOUb=tjm=bivWb1/=Yp1EOFD=ORAJlpvEOWq=bEbWYivJbRxExG0EOM/EORAESs/ExuQWYMA=YWqXlR6WOpUWOuqXSEYJbGPEtueEYpmXtpvES5vEx1PXtMDWOJqJxsDWOWDJYJP=bibJljYExGA=YWx=bNYJYi1ExuDWSGqES1xWSGDEYu0JxpYWbpmJbwDJ0R/JxRAXSMQJSiYJbGxEtsQEOHm=bsqXlEmEYM0EbJxWOJ/XlEY=OpYXSjm=tJ6=OJAESGQ=lMAJ0uqXtEbEt=1WbRQWO=mXSsxXONUEYimJSHb=OM6WSRPWSwAXSMxEbueExHUJ0sq=SGxXOv1=YuDEOsqWxNv=tJPJ0uQ=SMeJxsQ=YRDEljUWtuqWOMDEYpvE0N1WYpvExUYWliUJlMPXtR/Jx=Y=OMQExpbWYJA=OMeW0RqWSuxJbFxJbM0=YpbEYjmWxwx=OjmWljvWYseESEvXt=UESN1EYN1Jxi1EOwDW0Mx=tjYXO1DJbv1Etu0=bsqElNvW0iY=O5vJSMeJSRQJSNYJxuQXlRqWYJxWOsQEtM6JxFQW0sD=b51EbGQWtJDWS16Xlse=bHv=SJD=ljbJSF0ExNmW0=UWSu0XSRDJxw/WOHbES5UJx5mXOJQ=YWeJbWA=lMx=lu0ExUmJ0uqESuQ=SRDJxJ/EbGQ=tpYJl=1XlRDWSu6EOGAElM/JlJe=S5Y=lpmWtMeEljUJ0=1=buQJbw/EYWeElsqXSM0WOimJxi1=Ss/XtJxEOHvEOWDWOivEYimEORQE0jbJSF/=bJ6JlRAExiv=YWPWOvmElpvJ0s0EOiYJlMqJYJeJ0J0WbpUEtRAWbGPESu0EbH1EbsxWYpvWxWAWbR/JSsxWtuD=bpYJSR6E0NbJSHYESFPEbwAElW/JSWPJlR0WYMQ=bMAJlsPXOwQWOwxWx=1JlJAEx5m=tjmWtJDW0=m=OFeXSueElsQXOMqWtu6JbueJbpUE0iUXOu6=Sw/J0jbWxMxEOFxE0RxESRxWOWeWbGeExReWlWeXO1eEO5mEOJ/Eb1P=ts/J0pYXtsDJxMxWSG/JSFxJlu0EOpYJSiv=SivEOG0=SHYJS5Y=SiU=bReWSu6Wxs0Xtj1JlN1Wls0=OibJlNmJSJ/EbFD=SGA=SHYESu0JbUY=OJeEOHvElsqEtEbESue=YMeXtJQJlueWSpvJ0JPWtRPWtEb=lu0WxJD=tMQWOs6ESweWOGQJbJeESFAJxpbEOMAJlM0EbjbW0M0EOib=SseE0J6ElM/=O10=bGqExF0Exs/JSNbEOHUW0seWb5vJbRPWSEvEx1PJbv1Eb1/ESiYWS=1WlEvWSE1=S1DXOu6EbFeWS=b=OGPEYsqEbJqJxG/JxRAWlibJYs/WSweWtN1W0MQE0MxEOueEO=U=OMQJ0Nb=OEvEtNvWbsxXlR6Wbwx=tMxEOMPXlibW0jb=bGAXl=bJx1q=tWA=S1eEb10=Svm=SGDWSibWOiY=tpUW0JeEtjmXOuPJbuQXt=1Wb=vJxEb=tpUXSF0JlEvElRe=Ow/WbR0ESu6=bGDWt=mW0=v=biUWljUWSw6EbJ6EYsQElimEb5YExReWSG6EluPJ0JDESM/WxiUXSu/WSpmElReWlJqEYNbWxFPWx16EOR/EbRPWYpmEtsqWOWAJx=YXOuDWxJ0WxF/EbF0XlJPExRqJS=UElimJxjYWlJAXl=mE0Wx=bsQXlJqElNYWtjmWSJx=bv1=lueEYR6ExUmWOHbEYR6ESUUWtMxJS=mEOJx=bH1ElMAWxW0W0uQEYJQWONb=tMxJYJ6EYj1ESEmXOJAWtWAWYJPXt=vWb=Y=tJ6ElRDXOJqJlsD=OG6WYJq=YRDXOivWSuxWb1q=tM6WxWeEYuAJxs6EOWeXO=mJYJPWb=1XlJDWlsq=OJ/=bJPESWeJSiUXlEv=lNvJxv1=OJ/E0We=OwxEYEY=bimWOsQESGq=ORAEYJeWS1PXSjUWxR0XlMPEx1AEYs/EOF6ExwqJ0MxJxN1=SsDXl=U=lsPW0WxXOF6WlpbWbEmXlMPWtNUExMAWbRxWbpYWYWAWxRAJbMP=SwDJYs0J0MeXOUm=SMAEtRqExR0WxW0EtR0=SGAEYjU=bNvXSuqEYJ0=lJDWO5bXOUU=SHbJb5UExWeJluxXO1qJbW/ES1AEtM6=bs6JxFQJb1PElE1J0R0ESGQJSRAJlWDExwAJbG0WbMAWS1q=tN1EbimXSpm=ts0JxGqEOsAWONbWb51EOR6E0NbJSJAXSG/ESimXOFx=tjbExiYXlsP=Y=mJbRxEYpUJbFxJx16=lRe=ORAExj1XlsAJlMQ=SjYJbMeWxF6W0uQE0jm=SpbJbuD=SUbJYJAWlp1WxEUWS1eJYMqEO5bWOu/XOF/WbFx=OibXtR/JxJ0WbH1JSw0EtuD=YiYEbvvXtR/Wb=1ES1/WOvmW0sQ=YRPEOH1XlRDEOW0WSJeJSM/XS=mXO1AEYJPXtR6Jlpm=lNb=YimEbR0Wb=YXtiYExJxE0sDExN1XtjbWOw/ExuxWbRe=bu/W0NYWlWA=liUJlMDWtsP=SuP=SFeJ0pUJbsDW0WQWlWQEtJPXSMPWx1DXO1QEOj1WxMQWY=bWYNYJlMAEOvYES=mE0u6WluDXSjYXtibEOHvEbWq=lM0ExGxJxNbJxJeEbvvEbWAE0uQWbvbWbHv=Swx=SHm=YJeXSi1=b=UWxR/XONbEtN1=tuQJb5UXO1eElJxJb=bWYiv=t=UJx1eXSWqJSJqEtj1WbJqWts0ExEvJSJA=OimESvUXtJ0WOUvJxMDWbwDEtsAWOFPElu/J0JxXOFxEbE1WxueJ0pvWxNb=luD=O10JlivWOR6WxibJlJ0EtRP=Su0Ets0=SvUEbJ6Eb5vWtpvJYuqJxUUJ0RDWbvUWbjmEOjbWORAWSMxXl=UXlpUJlpv=bwx=OuAEtW0EOEYWtJPWYuDJSJ6=tu0=bF0Et=YJ0WQJ0NbXlJP=O5vJbiUXOUvJbJPExFqJxRQ=tpvXOjYWx=vXlMqEOGe=SvvWb1qWxFP=bGqESjvXSNbXOR6=libJxFAWxJ0JlMAWtJxJxG/=t=U=YJxWSMeEb=UWl=1WSsDXlMDExNvXSFqJxEmXOE1XtuDEtux=ON1XOs/XOse=bJQ=S5m=buAWbuDESF/JxNUWOEYEOWeXSuPXOuDExJDESJeEYp1E0EbWYpbJlsQExu6WbMAWOwDXlM/XO5mJbsxWxJ/WOWQWS5YWSJ6XOGDJ0N1=tMDXlW6JSE1WlNb=SM0=OimWl=mJ0JQE0jU=tpmW0M0Xtp1=bMDWORQWxwe=O51=ON1JbsQ=tjvElJDEO10=SR0=luP=luDEbR6EbUbJS=Y=O51XtJ6JxJPWx=v=OUbEt=YJlWPWYEUXS10XSJQ=YRPWSMeJSibXON1WtWAWlsDEximJS=mXOGe=SEmExv1JYJ/E0ibWOWeWxM0JxMAJYJxESUbExRAE0=1Wt=UESRAJxseWlR0XlMqWYRPXtWe=YsPEOpmWSw/=lMDXtsqWtu0=YMA=bRQE0JxJx=vXS=bWb1P=SF0EluAJYs0XtRxJxW0XSEmXtsqESG/=OvYEtR/=SMeJSRPXtuPWONYE0=1JSpYJbsQXlsQEbjYJlJ6ExFQWxuAWtJAEx5UWSGDXOpUW0pbEYNYEbW/JYJPESpYEOM/ESUUW0JAJSiUXSFeJbuDEOEY=OsDExJ6JSJDEb1xEbWDEbvUEx=YJSHvEYNUJbsDJlu6JSRqWxjbWxjUJYWxEtp1JSsQWb1qESG6=SRPWxwAWSGqEtuAWSwDExpUWSUvEbHvJ0NU=bWAJSR/J0MqWt=vJb1qEOFDEOFAWO=mWSjvXO5mJxjbWYW/WSs6=OJqWbJq=lpbJxvbWlNmWbEvWtNvWS16EbHvWxi1=tsAJxJ0WxJQJSsq=lNU=YN1=tWPWbwxWSvYElR0WbMD=bivWlsxEOj1EbuDWlW6WS1AEbJxJxs6XlR/Eb5m=tR/=YjU=OEmJxu/WYivJbWDXS10=Ys0EOEbJbvmWtW6J0u6WOMA=OWqEbjmW0RAWxvbJb5UW0iYXSwDWljUESHvJbvmXt=mXSWDESReJxsQJSj1EYR/ExpbJbJQW0jUEtNvEYR/WSp1=tuqEYEvJ0JP=b1PEbsPESF0WbH1XO=U=SseExuD=bWQ=Yse=luDXSsq=YpU=YjvJlp1=b5YWOibJxGDExsAExJ/W0uQJxwD=bWeWO5mWts/XSjbXl=1WSN1ExM6ESs/XlReEYpm=ls0JbwqESG0JxReEYsQ=SWqElNb=tuQWlJ0=lW6JbRDWlM/WxNmJ0JQWSu6EONYW0uq=lsDWtjbJbvUWOw0WlMPJYJDWbGqJYJAXSW/=S16XO1AJl=UWxN1=ljmXSUbJSRAWSJAJSivE0EYEYimWls/EtsQWSG0Xlj1=OwqESvYW0uAElJAJxv1=S=v=bseJbGqWlMq=Su0=lEU=Yue=OG6WlEYE0s6JxW/ESFeXlM0Etj1EOWDEbFQW0sxESvmJ0iUXluQEbueWbu6ElWxJYJe=SvUEbJ6WtEmWSUYJlM6Xtj1WSiY=OJPXSN1Jx=U=Ou6E0EUW0JPEbU1XSW6=lWDW0JPJlJeXO1QWS=UJY=vWORQWSpv=tNvWOsQ=tRAWxWeExG0=lWPE0s6ES1e=OEvE0imXS5mEOj1WxE1WYRA=SsqWtseWtu0=bR/ExNbWYWDWxWA=tJ0EbiUXtEmWxU1JYMAEb1P=tJQXSNYExseWOjbWt=mEx1DElJ6JSMAJ0sAWx=UExRAESvUW0JeXljm=Y=mWSHvEts/WbsP=SEYESi1ElJD=OibWYsxXSNbJYj1JxN1Xt=bXtW/=b5bWlMPXSs/=OHb=YW/E0j1=bs6XSjU=OwDXOF0Exvm=lMqXSueE0RPEbJPXSR6ExivWOM6Wx1xWbG6=bWQWbNvEb1DEbHv=lpUJlJqJSpUE0EUXtsxExHvJlNYESMeESRx=SMPElibEO=bXlibXtRA=tsP=SG0E0RxWx=vJlJAWbpvJ0sx=OWq=SEm=bReWtivJYJ0WSWeEOR/ESivWxRPXS1QWS1qXSM6WbpU=bGPWbWP=OJPXS5v=OFq=Ou6=bpvE0NmXtM6Wlpm=b=YWxReW0jm=OG6WxH1=bGA=OJxWlRAJYj1WYEUWlWPXSJ0=YWqExjb=OFP=ORD=SM0XlRP=bR0WxJqWSG/XSW0=lW/WYjmEbuqJbjvW0sPXlJQXtpYWtW6JYMQWOR6EYRA=O=UWxNvWOEU=ORDWluDEOF/XS1D=bR0=Ss0=tiUWb1QJxuPExjmEtWQJSp1XOuPWxu0Exjv=bG0EYJ6W0MeJYRqWbGQXORDXlsQExvmWtNmEOMDExH1WbsxJ0NU=Y=YWYuQEtpb=OsxEtJeXOUYJY=m=bWAWSN1Jx1A=Sim=b1e=bEmE0M/=tsDExwe=tNUJYuDJbJAWx5U=bwAXtR6J0s/ESUvXOGP=tM0Ebs6=SsPXlJ0ElJPExJ6=lMPEYjUWtM/WOM0EOR/WSJDEOG/WbjYJ0uDXON1E0Rx=bMeXtWe=tjmJSEbW0JQEOpm=SR/JlW0WYR/XSW6XO=vW0uqXtsAJSFQWbuA=biYXlW0Wx5bEbuP=tsQXOWeEOJ6J0NbEbJ0Wx1/JSv1J0jYW0NYJlu/EtEvXlR0W0Je=SHbXtJ6W0W/WSJ6=Ov1J0Nb=OFeExjm=YivXOMqJSRxJbiYJlRA=SG6XSw6=YJqXO1QXlReEOGqJYpb=tuqJbU1JbGqXSpv=bueWbMq=bHUW0MDJSJQWbw0WxsQEbF/ElRDElNvESH1=bJQXti1EOUmWxJ6JlMAXSWDJxHYWtWQW0M0=OwDExHbXOjbElJxJbWxEtMDExj1=bpmWbGQWb=1JxsAEO=vEtp1Exw/EOJAExHm=lsQWbu6EljbWORqEOEvWS51WxF/ESW/E0WqESUbWS5mWbMD=S1/JSE1WtEUExGDWtRDWx=bXOjmWbuxXSHYWlJ6WYEUE0sPJxWeJbGQEYMxWSpb=OUvJx=vEOUUWSw0WO1/=SwDEYR6WxFAWxuQ=Yj1EOuDElu0=bjbEYEUW0JxEYu6JbJP=ljYXOH1XO10XtEY=OW0XtjmWS16EYsAWbvvWS1PESHbJYMxEx5U=Y=mJSw6EOHvJbUUE0s/JYJqWbvm=Yp1JbFPWbUUWO5YJbRQXOFDJ0ibXlM/XOsx=SJxJxseJlWqES1xWtRxWO1/JSJDEbiYJSGQWbJP=bUv=YW6EYimESNmEtEbEYuAXtpvJ0M0JxGeXSN1WSMDW0pvWOsQWbRDEOWq=YMxWSM6ElN1WtRDEbjmXtpmExp1EbW0=bsPXS1DWlWqJlsAXSJeWSRA=tueJbNYEOUvXSM0ExRAWOpY=tM/ESjUXOUvJ0i1ElsQ=OiUWl=bW0iUXOw6=SGQJbNmXtMqJlR6=tWQWOjbEO=YJSWDJxNbJluDXOwP=OJ/WOjm=OJ6EtWPXSsP=lpU=Su/WbjU=SMPJlseWtM6E0R/=tJxE0RqElW0EOJ0ESM6=SibEOpv=tMPWb1AEl=mEOEUElu0EtNb=bH1EOJ0Jbwq=bsDXSsqXOjbEbpbWSNbXSUmWOGDXti1=SFAJxNYXSJ/=tu/El=YExsPXtReWbNYXlM/XtjbWOWeWxMPXS=YWx1/ESGPEOF0WlW/WYWP=OEUJ0JxEOMeESs6=YpUJYJ6WbMAWSHmWljvXOReJYu/WSN1XSJ/JYjm=bjvE0Mx=O1q=SF6XtMq=SuPWts0XOiYWts/WSJDWOMxEYpmJSGqJxW/EYse=S1e=SGDJbMeXOu6EtRqJYsq=OFDJYRe=t=1ESse=YNUEbjmEbvvJlseWSp1XlsQWYpb=Sp1ExW0EbJqEx=v=YJ6=YsDJbJ0JxW0WS=UESsP=YMxWb=1ES10JxEvJxN1WYjYXtW/ESMAXlMPWOMAXtR6WS=mWxi1=YsQXOEvWxvbWOsQJlW0ElMxExvm=ORq=tp1WSu/XOpvE0JAJ0RDWOpbJb5U=ONmElEbWS=UWxFxJYJ/WY=mEO=U=lWQ=b16EbGqJx5UEbsPJlMq=ljUEtibJbU1EbJPJ0im=SJAXtEUXtpYJbRx=lpbWxuAEt=vJlNYEbM/=bJq=YNb=lEv=SuA=Ys/ElR6JbReExMxJxjYWOUUWOuAJYRxXSNmXtWqWlJDWYJ0JxM6ESMeWxFPWbjU=bMxEbJPJ0sAEtNmJ0W/JbR0JSH1WS16WxFeWxwxJSwPWORPESweJSw6JYpYWb16Jxu6Elib=bwAWx=vEOwPXls6ExsxW0M0WYR0EOv1Etj1=b=UWS1/WYNbXSJ6W0jUWOpmJYWeJSvYEOR6J0uQXtM6XOHmXSHbEYJxElEbWx1AJlNmEl=1JYjUWlRqExsqWYJDXtJDWxu/Jls0=bHYJxvbWbEv=tNY=lJAJSNmES16=SWAJxW6W0JqESGD=SpYJb=mWYJAESw6=SsPEOvYXl=UEbwxXOEv=YivWxsPExpUEbW6JbWeES10JxRDJbM6XSJq=YJqESFDW0ueWOR6=OHvXlWQExUUJSE1=OsQWximXO16EYs6W0E1XtpvXSEbWOsP=SsDJ0JqJSWQWbFxJbFQJSJxWbpv=OW6XSH1Wx5bW0pYXSHbXOJQWxWDWlsqJ0JDJYi1ExFDJbF0JbGeExvvWxR6EO=YW0jvWYN1WOuxWSRxWYJqExw0XSuPJb1DXS5UEYNvExJDEOFQEYNmJY=m=OWAJxsDWxp1J0sDWOHvEYueElW/JbvbJbFDJYNvJ0Je=SWP=t=mWSHm=SRqEOW6=SiUESGq=bF/WSux=YMeEbEUExjmWSNYW0jb=OJDJbMQ=SsxJlsQ=SMeWxim=bjUJYsA=SEYWOsPXORP=OFqE0J6WbvYJxWx=bpbJYR0XOwAEYsxESJeJbMPE0Wq=bGxWxwqJlWQJxueW0sqWOFDWbGeJx1QJbsDJbueWSpmEYMAEYuPWbu0ExEUWOsqEYpUJlEUWts/EluAJYibWOG6WxjY=l=1WYM/WSiY=SMAWOpvW0RPJbHvWtEvW0sPJxjv=tRq=O51JYEvXOjmEbE1EYsxJbRx=lNbElp1EYEYWbW0Jx5bEx1DWluQWSFPElp1XSuDExGQEOJPExWPXtWAXls6WS=YEtRe=bWxJl=vWSJ0ESvU=Ys/WSpUExRqWOs/WS5UW0MA=YEv=t=vWOHmW0RP=YpUWOM0=SM/WOHvJlMeJSwe=SJP=O=v=YRAWb1qJxvbXlN1ESiYJSG/EtJAESFeE0M6JxM/XOR0ElR/JbN1=buPWOJPXOJDW0=vJYNmWbibJ0MQXO51JSWQ=YRe=SM0ESM/JbF/=lsQESWQJYse=b=vWlMDWxs0XSEYESUvWtjvJS1eW0s6WSJPE0JA=bueWlM6JbMeXOw0JSGD=YWAEbFxJSi1=bJ6JYpUXlimJSMqJlpYXlJAWxJeJlu/=SJxEbGQJbvU=tsxXlEmESMPXOMAJYMAEbMq=SWeJ0=v=bW/=SM6WSwAJSsxWSJ0WSp1XOEUJY=1EbsQJbw6XS1QWbsPXO10=bvYJbJeJxjUWls/ESNUESuDWtRe=tMPXONbWtjmExU1ESGxElpbWbFA=bWxWbReWYNmEO5YJS10JSs0EOWxJYjvWlseESHYWOE1JSWx=OMqJSEUXSGxESuPXSimJxJqWOGxESJDWOGxXOuqXOvv=O10EOMPJlJAE0W/JSJQJlpYJljUExNbWtRDW0WQJlReJSR/Jb=1XORqEbuxEbM/EOFDEx=bJSRQEY=YJYu0EOF/=OHUJYNUEbWDJximXtj1XSWDJlp1JlWxWxRAXOFPWb=1WYi1Xls0=lRD=Y=1JS1DXlsP=Oj1=S1eEYWxJYMQWl=vXlsAESWA=OWAJx5YEtueXSvb=O1AWYjUXSpv=OvbXOu/Jb1QJlu0=bsP=lMA=OJ/EbUYJ0=bEOuQXSjYWSNY=SFeJSW/WbFAWti1Ets6XlReJSJ/=bwqWb5bW0p1JSHY=bNv=OJQWYWAJbWeJbW/EYueJSRQW0NbJ0jUXSv1ESv1J0EYJSR6EtsqJb10WOM0EOW/=lM/=tM/XO16XS5b=tsQE0sxJYj1XlibElNm=YibJb1/JYEU=ORPWlWDXSpvExsxE0JxWxvYExpb=tsPEYEv=bM6XtsPJYJ0ExGPWxG/JxseEtMxExWqXSsPESj1=ljYJbwq=YE1=Yp1Wb1QES1xEtjvJYRA=SpYWbGq=YiYEtpbJlW6EO5mEbMAEORPEbs0=l=YXSNYXluPESR0WtJ6J0pYJxF/JxGxXOvUJbuAEtimESJDW0We=SJQWSJ/WYueJxiUXOs/J0uxXtWQEYReWlJ6EYs0WtW/ExsxWtR/WtRPJxN1JY=UXSNmES5YW0WAWYMxXOU1E0NvWxpUJ0MA=OsPWbuQXlsPXtRPEOHYWbEb=bUY=O5bESEvXOGxE0NvWYjvWSUm=SR/JbWeEtN1JSEvWON1XSw/J0jvWYJ0WlW6EbW0WliUJSw0W0imExFDWO1qWSsP=t=bEbGeXOpvElWxJljvEb5bEYEbEOG6JSM/JSv1XSM6WOR/=ljm=SMqExWxJSivJb1xEOjY=buqEOjUE0Ev=SseJ0jbWOWqJbUmEO=vWS1A=bj1XOF/WbpUE0s/J0u6XOj1JlR0JbWQ=lj1XSEY=OwQJ0MQXSG6EOweJxF0EOjvJbF/JSwqE0sxESvYWxMxWSpbEOMQJS16WYi1JSsPESJx=bJ/JxRAEbMDWS1QWb1/WOivW0JqEOWxEOUUJbuqEtW6=Osx=bMeXSFQEYjYESpbWYWDEtJeESFxESUUESJQ=tpvJYWxWxJ0XSUvWOEmJSv1XOU1=YWD=tM/XtjvEtsPXSUbJ0jvXtWAEbFAXO=v=OsDWbuxWSM/XSGDWxUmWO=bJ0uqEOHYWS=m=bFPWSM6XlR6Jbw0WOHmEYJxWxR0WxwAJ0jmEtReES5YWxJe=bs0=lJDJYJxWbivESwQJbUUJxGe=OJxWSWeWOWx=buQEOFxES1AXtuQ=SGAJSH1JxwPWtNmXtsxXtpbJ0RPEOuQES1Q=OWDJxvYEOF/ESNb=OGDExJQESFeXtiY=OwQWlJeXSGDJSjvXlu6JlJDWSiYExH1WSRP=lim=bRx=tReWxvmW0MeWt=YXSRqWSuxJlJeESv1JbGDXlsD=bGD=OuqXOu6=S=v=OJD=Sv1=OWxXluqWb1qEOWeEtMDESWeXSGQXtMQEOMxXlj1=SGxExWPWOGqJSNmWSsQWO=UEONvE0s/=SU1WYEbJljv=OHb=OJ/JlsA=tjY=tEbElN1Et=mWxUUE0R/JSGxJSw6JxJxJ0u6ESHbJxivEYJ6=tRqEbpmXSvYXtEv=OwDXOvUXOR0XOMxXSwxWSibExEbESRq=Os0Jl=mWtM0JlNU=tWDW0MxXl=bExGxXlRDElE1=YpvXOwAEOs0XS5UJ0NUWtMDExibWlWPXOEvESF/=OW6EOueWx5vXtWD=ls0EYueW0=mWY=U=bMAEbFxWbj1JxwqEtW0=OwQ=OWxEOsDJSuq=OM/EtMAJYR/XSRPEYWA=Ys0JlRe=SR6Ebp1EbFe=YpUXOG0XtjYWtReXtMx=OWP=SM0=bUU=SG6XO1QJxW0ElWDWtRAJSUYEOv1JSw/=tMAEbMAW0RqJlWeXOwQE0NYEtsQ=OiUExs0J0=b=bweJlj1WlsPEbGeWOjUJ0W0WSuxJS5YJSwPJxjUJYRAWt=bWxWQWS5YEO1/WxGAJ0i1=YMe=SJxW0sDXOUmEtMDXOuQExiv=lJ0XtsQWlRe=lRqExG/WOHYJSjmJYMQJSwxXSFDXOG/=lu0XSMP=O=mXluxJx=b=lNmJ0EvJxs/WOuPEbG6=bFx=lNUWOsAWliYESW6=tiYExUUWSH1JSUbWbsqEOWPWO=mEOiUJS5vWbJ/JlpUESsxJYEUEOM0JSRP=tu6JbuAWb5UE0MDJbU1WxvvXlpmWxMeWSG6=Yu6=SR/W0uxWxpYESimExEvWOWxJlpmJSGQW0MQW0NbWb5mEOMQ=bMDElWeJlJ6JSNvXtseWO=YXlsDWSiY=YJqEbjb=OEUJb5bEbJqESMAJYR6XtjvJSJPEtW0JS5bEbsAJ0MeJbvUXtR6EbvvJ0R0E0uPJ0NUWbFDJxGPESG6=SvUEbjUEOJPWOJQ=OEb=tiv=SJeExM/XOWeJbNUWOWDWtJQEbF0J0j1JSw/=OF0XS5YJSHU=Sw0ESUYE0ivEbweW0JQXOseExEbXSvUJxuxWYJe=SU1Elj1XO10=Y=mJbMxEYJeESwPEtJD=SweWtMqJxNbJbpbEbuxWSJxWlR6=Sw/Wls0=SEU=SwAEbWqJx1PEtWAExj1Ex=YWxw/=OEbWSw0Eb5vXSw6EOG0JSGe=tN1Exw6=O=m=Ys/JxF6JlEmJlJAWSEbJ0WQExiYXOM6E0JqJbG/=bHbWximWts6XSsA=YNvJSu6JbWAWOuPEbM6WSGQEbUvW0jUEb5YElRAWl=YXSGQ=ORxExMeEOpvJxEU=S=1=bpm=YiYElNvWYRDJxM0W0W/EbRAWOF0JSMeWlWPWtMAWOHbEx1eWOFeES=YEb=1JSEUEtMPWSRqWbJxJSv1JxHbWOW6=YW/Ex1/=ORAWYRqWYsPExM0XtWQXS10ESHmWlNUJljvJSMQE0jb=l=1EOW/JlM0J0=mExi1Jx5YJxu/JxwAJxwDW0j1WtsAJYRqESivW0ibES5YJlEbWOEbWb10=YW0WlW/JlW0=S10WYJqWbGPWb5vXOJAJbwDESEv=bF/WOW6XO1eE0uDJYJ/=O10EORDJSHmJbFP=OFxESWAWtNbJljvElEYXSM/Et=1JxU1EYuA=lWqEORe=lsxEY=bJbs/XSWQJ0EbExGqW0Nb=O5vEYu0Jb=U=tsqWbN1WbF/WO1eXSiYWxJqEtW0ExM/E0RAW0MDXOGDJbRxESUYESUUXlJ/EO1QXOMxWYseWSsDWOGqWOpmWxJeXlimWxjYWYNYElWxJYWAEO5vWOpbE0sQWbReXSs6EbJ/JbG/XtsxWSjvXtWPW0W/=OseXlMDJSRe=tRDJSsQEx=mWOuqXSWP=S1x=lpYWxWAJbG0WbE1WYp1=YEmXSNmWOR0EYpmXlWPElu/ExG0J0NbEYNmJbuQ=S1eWSR0EYuD=bU1EbjYXSF6JbUmXOUvJbRP=bH1=lRAWbF6WYW6EYReJY=bExUmJ0WPEY=bWb=U=lpY=YuqXlRDXtuQWY=UEYuP=OpU=lsPWSG0WOJ0EbMqE0MeESHbEbs6WbsQJxJQWbvvEbi1EYsD=bEYEOWQJS=UXSWQXtEvWlM/XSJPXSEmJb1QWxR/XOGD=bFAEYRQWximWOU1=SivXOWqJbUYEtimXO1P=ts6WlR6JSW/WlMD=SuAXSG6ESw6JxEvExuxExR0EOWxJlsPJxjUWbvYWOiUJSMD=OJDEbHb=Y=b=YW0JxiYWYEUJxGe=YJqWx1qXOW/Wb1xEO5UJxMDWbG6JSs/=SibXSv1WxUmXtiv=lRx=OsPXSRDWb1D=bjYEbMDESFAJYuA=bF/=lR/WlWe=tjYJSRPWSUvWSMDXlJQJ0WxJbW/W0sQ=bF/XlW/EO5m=tRxXtWeWYjbEtuQEbwQXSseJlRAElEv=YuqWS=vJ0RDWxsA=lEY=lsPJbMeXSWDWOWQWxFAJxWPJSMDEbF/ESu6Exsq=YJqWSJ6W0j1JbWqXOuDE0Rx=tMAExp1EOR0WlM6JYuqWbuQEYNv=SwxWtpbJbivEOMq=SF0Jlp1JbMDExvmWbMAExReWb1PEtW0EbjUW0jvE0jbWOiU=OWQXON1ExsQE0JP=Os6J0imEtR/Wb5U=lWAE0ibJluDEbWqEtWPXlRDWxv1JxFDEbvvWtWxWS1xXSMxWYpYEtpYWOpm=lJ/WlN1=tjmEbjvWxM0=lJPXOpvJS1DEOEbEOFeJSRDEt=Y=Op1JlRD=lWDWORxWbW0WSMPJYR0WYEU=SuDJSMPJSRQExH1W0s0W0MQWOJAJbW6Et=1ExuAWbpvEYJAWbuxJlJq=SN1WO=U=bM/XSRxE0sqJxWAEbWe=SRqXtp1=lpUE0JQJx5mWSvYW0sxWx1A=SUvEO1xJSEU=SsDWtM6Jx5vJbseXlEUEbWxEOFqES1QJxw/WO51Xl=vWtEYJ0M0J0uAWSseXOs/ElivXtuPJSHbWOF6ExH1XOJxWbNbJbRQEOuAW0NUExjbWS=mWbJPE0u0WbJeEtu6W0JxESEU=l=bEbw/ESMq=Yu0=lNUJY=YEOwPEbMAExRxJbR0EO=vEOu0Et=mEbjUWluxWt=UJbRx=bUvEOR0=tRxEbWq=tuQJYJAJYJA=tsD=Ose=S16WtRAEt=UWS1AEtueE0RQ=SFQElJxEYjY=S1x=tJq=bM/WtWqW0JxEOM/EbsQWbUmJSG6=bFA=b5mJSWP=YW/WYuqEYNbJbsAWx=1WlsDWOMA=bwxEYJAE0R6Jb10WbR0XSGPEbW6=tu0Xlu0=SwP=bHmWxHUXlsAJbG6EximWYW0=Sj1=SGP=SJAJ0NbJbMxEYWQESUbWxHbEYjbESs0ESUmESRxWYuQ=bjvWxHYEO1/=tMqEOimESvvWtiY=OGPES5mWOG0JbUUWlJ0ElW/=SRqWbWxWSvm=SJxXtsQW0JAXtsAEtMqESN1ESw6Jlux=S5vXtJPJxwx=buAJSNbXtuDWxF6=OHUElsPWxE1JbEvJYpbEbWAEOMxEtiUJYuA=SpmWxs/WOJxJSEvEOWA=SFeJbiUEti1WlsDJSJ6WYJqXOuqExpYJxWQXO1AEtJ6WOHbXOiUJxE1JS5m=OvvWS51ExRDEO1QJSR6WYp1ExGQEtp1J0Nv=ljvWSFqWOFPWtWQWYEvEO5mXSuq=bpUWYjbExNmW0ivExvY=tMD=bpYXOFeJYsDWONU=SwqXSNbEOHmWxMAWlRx=lJ6WO1qWlJ6JSM0XOHmJlJ/EO=1XOuAXlNUJbGQXlMeWYu/XSU1XtEUJYsQWbUYJbGxJx=vESGeEYRqJYRx=SMQ=OJAJbWAEbWqEOMqWxUUEOH1XOjUElJ6WOwPE0uAXO10XtuAExGQEYjUExFA=YseWSvYJSW/WYj1WlM0E0W0EbHb=SR/XtpmESu6XOuQElMA=OWxEbu0=tW6XlEY=OFxWYW6=tiUJxiUJb1QWlWxWxMQWSMeWSsDJSNUJSi1WSEvWtJDWYEbESWAXlWD=bWPWxGQXOJPWxF/JbF/W0RAJx10XlpY=OWQ=lMAWSFeExivWbwe=bsq=OFxJ0J6EbRQExu0XSHYEYM6XSw6ExG0ExRD=lE1=tJ6Eti1XlMqWxFDWSHU=SGPEtRe=tW6WxuDWSHmWxG0=tEbXlWQEbwqXtRQJbEmJ0=bWOsA=SHm=SibXtjmWbHvEOM6XSNUJxJQE0WPJ0uxEY=UWtJeXts6WluqWSJD=l=vJbM6Els/=OuDElRq=t=vEljYXljmESF6=tRDWlJq=SsxEb51ESNU=YjvE0Wx=SG0JSF0=S5mWS5vJ0j1=lNUWxGPXtRqWSsqWxuQXSF0W0NmJYEYJlR0JlMAJSRDEbWPJ0NY=tWAEx1PEtJeEbGxEO=mJ0JPWlivJ0jUEluxJYJDEbsDJlEmEtuqWbue=SGAXSJQJSF6Eb1AJxEmJlR6WYjmXtNUWSNmWYiY=OvYESWq=bJDXtJqEO1AW0W/XSNvEl=bEYJ0EYW/WS10EOuAXORQEOU1JbpbXSRQEYu/EtMqWOG/EYR0XSjU=b51WYMqJluqElE1WYjYWxJ/=tsDEO1eE0Mq=YuQ=bMqExWqWxMqEOsPXSJ/EOw6=tu/EOvUWSRDJlsx=YWAEOHU=Op1ExuxWlsPEOwAJbs0EOEUESwqJbjmESJq=SsQ=bFQ=lRxJx=vESu0WOMQEbFDElJxEOFeWOwqW0uxElEv=OueWx=bEbsDXSvmWxjYWOW0Ets6XS5UEljmES=YWtj1=Swq=S10JSseWOM6WSEm=Yp1=O5YES1qXSWeEtNmJb10WYWPXtuxJlJDJlNUWb=1EO=vW0W/JlRDWSWAElJD=OHmEYpUEtsQWYuxWSWP=bwDES1PXSWQWbu0ExMqEO1eWS16Ex1AWYuAWYpbWtsDWxuxXl=vWO5v=bweESv1JSEmEYJ/XO=mJYR6EluQXO5UJlWq=ONb=tj1JlJAEY=mWOJAE0E1WbUvJSGx=b1AJSMxWOFAXSHbJls/=SpvEtuxJSiUWbEYJbw/EtE1=OsqWbjmXtpm=l=mXtMeJbEYXOuDWSUUWOG/Jli1WxJeJSjU=lWAESWqWSN1XO1DJ0jbEx5bJSRAEb5YJSFDESuDW0E1XSM6=lEmW0seJxueEOvmXOwxESUmExHU=bJDWbUbEbu0=bWQJbFeJxGDElEmWYWP=SUb=YsAEbjmElseJlMQJxu0EbsxWYsxJYRDElNmXOGPWtJQWlEbXlRxWYs0JSWPE0JxE0Me=bMP=lEbWOvbJbGQEYR0WtMD=OJeWYuDESM6E0sAWbwPEtMAWx10JYiUWYN1=SWDEbWPEbMeWS1AElp1WtpvJYMqWSMxWOwDWl=vJ0MAWxFDXlWDEOF0=b5vWlJDJxFq=YRD=YWqJxW0XSiUE0RxWbweJ0W/XOG6WOJq=OjbJS=bWlE1WSHvWOsq=OJ/=tM6JYu/=YpUJY=mJSH1WxJxWbuqWtiUXOReWO=vWOW/=lJqJbMP=OG/JbEYEbR/J0MqWxwDEYs6XtjvWYRD=Ss6Jx5m=bJxWOseEbEvWxJQJxRqE0M6XtJqWOEvWSR6Xt=1WxJ0ESEYJxseJYMxWSEmWxuPEYEUJSEYEYMPE0R/XOWDElRPXSwDEtMqXS5v=OW0JluQWOEY=S5UJlJ/XOs0W0pYEOs/WxFD=tuPJ0RDJxEbWbWDXO=bWYRxXlJ0ExMD=bJP=bGx=bG6JbWqEOG/WYp1ElMD=OwxXS5bWbuqJ0ux=SRxJSs0WOpbJYRQWbH1XtsqXOjbJxw0JxW0ES51XSR6JSHmExjvXtMxEOR6XSJPElRD=SW/ExM0JlsDE0uAJSu0=OEvEb1xEYNYESFDWljv=OReWSJDWbFAEbUmJlsxWbuQWlWAWY=mJbR0WlMP=Yux=bNY=bim=tjvJbWxWlMP=SimWOpYE0NbWxG0=YJqJSJqXS1DExM/JSw0=tRD=SM0XS5Y=Sv1WbG0WOR/Exw/=OwP=SuAEYj1WO10=YEUJlM6=SEYWxpmEO51WOwQ=bpYJbJ0JbsxXtMPE0=YJlpYWO5vWbNU=bu/XlsqWbUYXOGx=YWqESEYJxF6EtEb=SRPW0RQEbvvJbNmXOuPWSuQES1/WSp1EbEUWbwDJbwAWxNU=t=Y=YpUXtJxW0s/Jx=1JxRqXS1QJlMPEYR6XtpY=OpbJxUv=OsDWxGPWbiUESM/XSMQExJQJbE1WSGqJliUJ0EbWtMx=O=mEbRDJSMx=b5bWSjvJ0E1EbMQWOFeEOHvWOpbJbNbJx=YW0sPXSFPXS=bEbw/JSWq=tRDXSGeEYJ/WSsPJxRDXtJ6Xt=vElE1JxwAWbGxJSG/XtivESivEOwQXOW0JxUUJlRxEbs/ESMQ=bG6=bHbEbM6XSM6WSWQJ0RDEbReESUUEOG/=lseXlMDWYjbXSGDJbwqXls6Et=vEljmWtW0Eb=b=buAES1AEOM0XtuAWSueXOseXSuqEOH1WbsDXlue=Sw6ESJeWOM0WxJ/ElWP=tjUESRPEt=UWOp1WlReJYMqE0WeXtjYEti1XOM6J0s/JSu/XtMDXlp1ExFDE0WQXOuxXluPXSW6W0=1WYW0WOMAWts6JxF/WOEv=bweJYjYWxUmJSJ0Wbs6JxsxJxvYJYMeXtJQJljmWbNUWbJ0=OvYXOJPJYJAWljYXtRxWxuD=Y=vWbMPXtEU=ON1WlJ/WO=Y=tibElM6=SsDWOR6WYJAE0u/XSGxJxiU=SJAEY=1=bEYXOw/XSNvW0WqEOjmWtuDESN1EOiYXSNv=OFQJlMxElN1JxEmJlpmEluQWOHUJb5bEYW0=b1DWtueXOFxXSuPWOvbEbpYJxG6XOEb=OEmJSuDEtjUEluxWxWQ=tNmWb1/XtWxWOF/ES=1WbUb=bpv=tMAElJeWxJe=YMDJx10JSJ/EbuDWS=Y=bEb=lueJSJeExseWxwDXtsPWSuDEOvUXSRPEYN1WxW/JSHmXt=1=Yi1JlR/Jb=1ESweWSMqXtseE0u6WOHYE0MQESuq=O5mJlJqJxEbW0RDWOUv=tNbWtu0=t=b=tuDESsxWxsqEtMqXlu0Jxwq=b=m=SW6ESRqElpbEtu/=buAXlWPJSsAJbvmEti1EbHYEYuqEbJqXOMxXOpUEbRQJ0NmWb16JSMxEOGxXOibWYRxXOG/EbR/ElMAJSsxWSN1XSse=SEvXOUvWORqEb1xW0EbWxEmWSGQ=SvbWOWQEOsqXSvYJYJ6J0sx=lMq=OpUWb16EOWPWOHmJY=v=OHYXtJ6Exj1XO51WbuQJ0pmJxWAXSN1WtM0=tMDWOJPE0W/ElpmJxMDXSMPJSuPXSN1=OvYWSp1J0=vWxu0JS1D=SRD=OuxWbsA=bFQXSEbExw6Jbse=bjmWlWqJ0pUWbpUXSvvJx5bEtsAESH1EOs/W0W/Jx5Y=l=YWlM0WYuqW0uDJbMx=tRxWxEmJ0sqEOi1JxHmXOs6WOWqXOsQ=YM6JYRPWbsDWYEv=tJQXORAJS1DE0J0=SiYJbH1WlW0WS=mJlJqExGP=YEU=lEmWYi1WOu/WbF/JljYXliUJ0uqESw0EbW/JbsxWOW0WYiYESjvWbWAXtMPJbwPWbsq=YJAWxsQ=SHU=lMQ=tWAJxuAXtiYWYu/JY=UWbvbXO1D=OMx=buQ=b=U=OF/XSvY=OUUWxNv=lJ/Wxw0ElseJSjUWY=b=OJQJ0pYJbWx=OU1WtWQ=tMQEOWx=OUbXSMeWSuAExH1WORDWOweE0sPXOGeESJxXOJ0XtibWY=bExv1JYibWOWDXlu0ElEUJb10=OR/XtMqXSHUEtpmWxNYEb=b=lpYEbJ0Eb1/=luQ=b=bW0N1WxWeW0JeXSw0XSW6=lReWOH1ExuPESW/XSjU=S5bJlsAWxN1ElseEx1eJx=1=bvvJx51ES1AXONvWtW6WxNUWSFeEOE1WSG0=lM0EbR6EOpmE0EbWbuAWljmXOpb=b=bESwqESvvEb1AWlRQJxuQWOvvJbW0EbEbElsQ=lWQWbpmWbvmXtWQXlsDWSR/=YpU=lNmWbJq=tMA=S1AXO1AJlJ/JbJqWSNY=O=vEYp1JYpbXSG/Ex1qWxMeExMxJbjYElEv=bJqExM/=OMAWbjmEb16WtJqXSJ6J0JAXO=UEti1=bwxJlEvWtj1EbJxJYMqXOG6WxiYJ0s0WtMPEbwAESUv=O10ESsDEbimJS1AWSpmWS5m=lWeJbWqESJ/=lWPWSibXlReWxsPJxE1=tu6JbUmEtpY=OR/JxR0EYjUXOvUJSG/WtMeJlWxWbJ/WxjbXS1qWSM/WYRqXSM6WSEYJbRDEb5vWYE1Jx1qESJ6E0s0=SUb=YRqExEUXSR0J0sqWYs/XS51EYpmE0jv=YpY=SHUWSW0XSUYWOJqWlRxW0pYXOvv=bpmES10=lRDW0pYWl=mEb16WlW0=OiU=Oj1WtW6Wbw0ESj1Wbu/JlNvW0uAJx5mEtRAESU1EbGxJYM6WOM0XSuP=SM/Xl=YWxpbW0sQWlRP=lu0=bF0ElJ/EOu6JbvUWx=v=SWQE0imWSuQWls6XOsPJ0JD=SvmWYWe=YEUElu0JSH1=OFeJxpbWSNmJxMDXSM0XSF6WtW/Wtj1WbW0WtJx=OwQ=OR6EbN1EbsDJlpUExUbWYMDWSJqJbMxJYJeJlMeWSJPWSFDJbw/ElWqExwAEbWP=SRQEYjU=OWQExGx=S=UEOuAJlJxWlJPEOR/JYWQElMAEtWPWS=bWlEbXOReESW/XSibXlpmWSu/WbJeE0WxWli1Ebw6E0M6Exs6=tpUEbpmWOWQEO5YEtW0ExM6JbEvEtsPEOpUJbu6WSRQEbpUEbFQW0jb=Ss/JxsqWtEmE0u6=OpY=OvY=Ss6Wb1/XlueWxRPEbUYWxR0=YJeEOi1=ts0JSu6EtpmESNU=OWx=bvmElR/JxwqJSMAXtp1W0WeWbJA=bMQXluxEOGxW0WxExWq=bs0=bG/WlM6ESRqEY=bElsxWYiYWO1QWbW0ExFeXti1=SJ0Wb=vJbjv=SRQWxvm=YJeJSRqWtpbXSu6=Ou6EbM6WYNvJYRxEbimJS=1ESvvE0NUEbweJx1Q=OJ/J0EUEOjmEOFAWYRxWOuqJbMeW0R/JbMqJxWqWxs/ES5vWbRP=YWqJx=1JbE1EO1PE0ueJYNYWYJDJbibJbvbWYs/WxW6=OsAXOM0EtMe=YEvEOs6ES51WlN1WSi1EOWQExW/XS1DJSUY=SuAJSHbWSN1XOUbWbimWS=YE0s6XSiUEbE1WSHbWbJ6ElJAEOHU=SFPXS5vJ0EmESEUEbw6=OFeEYJeJlW6WlR/WbpmE0ibESHUXliYJxsDEtMqES5bJbJ/ESFqXS10WOJAWx5UJ0RDJS10=bpvExGAJbvmW0uxExpvJSWAJbRDESFPJYW6Exsq=YM6XOF/=bRxEOw6Jbwq=O16WxuqJ0WAWO1AWSEvWO=UWbM0XlR/=OWDWOvUWx1QEtM0J0iUJSGqJY=YJSuqXlseEbu6XSFxWtMQWtjUJlNvEYuq=YsA=luDEYRDESHvWYN1ESueEYsxEliUWbM/EYJq=YWeJb1A=OuPWONmXORQE0=1=tMqXtWeJSuQXSw0EbuQ=lJAE0ueEOs6JYEUExsxJYMx=OwPEY=UWbH1JxF0XlEbEYRA=S=UWOpvEbwPE0R0J0MAEtjUESFPEYiYES5YJxim=bw/=ONbW0=vXS5vXSuqEtjYEbsQ=YJPXO5m=Ss0WOR/=lJ0XOj1=OpUEtMP=Ow6=SWA=lWQXOUYWYEbJlM6JxsDWYuqExpUEOpmWxH1WtRAExu0EOwxJxWxEtEmExG6XSvvWxjmJ0uQEbwx=O5YXO=YJ0NvWSpb=YE1=b5UWtR0WtRAJxWQJxGQExJeESpYXSGxWO1P=Yi1EtsPEtM/EtNm=tsPXlRqJbR6WxuQ=b16WSJq=Yu6=Ov1JYWxJ0EbWOWxESJ/E0uAW0WPJYE1ExMP=tuAXSM/JSEYE0uPXtJ0EOGe=OpbWxwAEbwD=SjYXlNYXSGAE0uqEtJqWxvUWlReESUb=bG0=OG0=lWQXOuqW0uD=SJ/E0u/J0jYJbUm=O1xJYpm=tN1J0RqXlJ0WtpUWx=UEbGeJYRQXlWeW0MDESsqWSvbW0jvEbjUEtMqXS51J0ibJ0MeEx1xJluQWtNvEOE1=tpY=tNmWYsqWxRAWljbWSJ6JxWe=b1eWxiv=YMqXS1eXSs/JSiUJY=1JxsAEbR6=SuqWtjYJbsxJlpUE0uPJbJqWtR0WOvUJ0sPEbRDJ0J6JYsA=SUb=OR6=bu/=OJeESuq=tueWlWQE0Re=bGeXO=bWtu/EOM0EOEUJlu6=SMQWS10=tMDEtibXSiY=YRA=tseJlRAEtJ0XlpmXtseEbp1Etu0WO1eEx=YJxEbEtWAESEvWSJA=bWx=YJPEYMAXSRx=tsPESHvJbMq=Ow/WOGqXlsqWYpvEYNvElMx=SjbW0JDWxim=SWqWSHvESJPEOFQWbjU=tNbXSibWSu6WOJqESGqXtM0WYMe=OW6WbJQ=tpY=SWAExwxJSsPW0s6WtW/WSMD=OM0=SWD=bpUJYMxJbGeEbHmESGQ=lu0=OW0=bw0EtsD=OJxWtM/EbwxEOpbJSG6=lW/XlpvWbMxEtWeEO1DE0u6W0RqElR0XSseWYu/Ebu0JxJPJx10ESi1=bEUWbFA=SR/XtRD=lW/E0JAW0s/JxW0WbNv=tjUJbWeWSWD=SUYJ0pmWxW/XtJq=bFPWSjb=SwAXlWD=YibWOMQWts6=buDESJDWb=1WxFe=bU1Exv1JYpUWO10=S5YElpUJluAWOvmJSs0=OGeWSim=SsDJls6EbJDJbM/EYJPWxM6=YM6=t=Y=bRAEx=UJb=bWOW0ElM0ExW/XliYXSjYESGA=lJAXSG6=t=1WxjmJSJ6WbueExsAJxUU=YpmXOpYJliYEYJxJSHYJ0pY=tMq=OjmElpYJxGDJbi1WxWAWbJQJbNmJbFqESj1WlJ0WxR6WlM0WOu0=YEYExuQ=bwAESRQ=YWqWOs0EtJQWSN1JbjmWx=1EbW/E0sP=O5bWxGQ=SJA=OUUWOG6EOw/W0WAJYJxXSHvWOG6WOMxExpUW0s/EO5UE0sD=ORAEYRDWOp1JxWq=Y=YWbR6XSGxJ0RxJSpmExRDWxHbWSUmEYMqWbFeXSWDEOF6JSv1JxFQ=b1DJx10Xt=mWSH1XSMPXOWDJxJQWSv1JSFQEb1/=SNUJ0=bJSjvEOsxJS=mWYWxWbUvJx=1J0NmJSs0Jb1qJYRAWxjYXOFPWOJAExsP=bWQExHvXlWqE0NUEbF6WOM/=OsxJb5bWYsAWbw/EbuxXOW/ESFqJYM6=bGQEYNbEb1PXS1xWlJ6WbJA=S5bE0s6=lNvJb=YES=b=bRQJYNYWb51JbpYXSwQXOjvWSJ0ESEvWOF/EtWPExu0XOMxXOF6=lMDXSjvWbRxWlsAWS51WYJDE0=UJbJxW0uqWYWeElpb=bFx=ljY=YEUWbs6W0u6JbGeXlWxEOUv=OJP=YR/JxMDEl=YWOGqEbibEbs6Xlsq=OGA=bW/WbF/JbJA=livXOJQExsqEOM6WOH1=tueJxF0XtjU=luxESFe=bEUXtpbWbNvWOjbJ0sDXljvWSuxEYpYXOvU=bsqJSiv=ON1El=1=tsAJSwAEOw/=b1x=YJPExR0JbuDWOEbE0s6JxNbXtEbWxs/=lWPJSpvJlR/XtsDWlimWOim=bRxESF6WO5mWlMeEOFA=ts0XOp1W0MPWxuAExM6EOUvEYNmXOueJSUvJlsDJ0NvWtMeWOJxJxvvJxE1WbM6EO1QJlWQWYWeJSJxEOFqEbv1XO=1=lpvJSG0ESJ0=Y=bXOv1XtJDWljm=bWeEbW6WOJ6WOjYJYE1WSw0JxR/=bM0XOWeWSFQWSGA=OueEbueExMQWbj1WYR0W0J6=OwqEO1eJlsQXSR6XSJQEORxJlu/WYpUXS1AXSJq=lWxXSs6=Os6Wx=v=lu/E0pmXlReWlRP=lRxWb=m=YsAJlEv=b1eJbRQ=SueJxU1=bHmJlpY=S=YXlRQ=Ou0XO16=OHvWtRqWlWqEbwQWb51=OsAWlJAXSGxExsAWbwqEOM/WOMDWbGeEOwPWxGqExweW0JAWtj1ExJ6Xt=vJ0pbJSEvEONUJYs6EYpY=tJ0ESv1WYJAE0WQ=SweXS1xEbW6Eb=UXSNvWliU=bFqJbNvWbNvESG6ExW0JlM6El=YXORAWYjYW0uA=tJAExuPJxWeWtpv=lRPEljUEbHbWb=vJYuq=lJQ=tWQWSFPXtEYJSse=biUJlJDExJq=ORxWtsDWbEvWSWP=bJQESNU=bvYXSMPW0J6=SJeExsPXONvXONbXSW6JSuPXlJA=b16JxN1WxJA=bpY=tu/EYMxJSseW0RP=bUUXtR/WOFxWtEv=OGDEtMqEtMeXtJAWxW6EbvUWlW0=tW6JxFx=YRQXSFDJxF6Ebs/WlWPJ0MQJx16=bNv=bWqEOwAJSW6Jlp1=OFeXO5vWx5mJSEUJbuxWlj1XlMxESFAJxpv=OEYWOjbWxFPWxFeWljUW0jmJ0ueJ0JQEb51Ex1xElJ0WSW0XOpU=OsAWYJqWljUWSweWtMqExUv=bJe=bjv=tWD=YiYJSsA=OpUElsQXOwqElM6E0jbWt=UWSWQWOGeXtWDXOM/JbHvXSNm=bsQWbFqWOHmEtM/WbEYJx1qEOJPESs6JbRPEYJqWOp1XlEUEOpvWtJPE0W6Jxw6XSJP=SNbEbuPESu/JYWDWxE1WbpmJ0=bJSWPWxFq=tMD=bvbJbJDE0u/Wb5Y=Os6WOF0WO1DJSu/EOEUJ0jvESRAES1x=Os6JbWx=YsxWOWDJxWPJ0sA=b5YEOM0JlW6Jx=bESEvEYE1JbWeJYu6W0iYElJqEbJ6JY=b=bJPElM/WOJQElsD=OW6=b5YJ0uDExNYJSEb=lE1XOw0WbibXOpYEts0XSWAJlRP=SGxEOG0JlWeJYRAEtRqXt=bXOp1JSvmJYiUWSpvWx1qExWxW0seWSvYJ0sxEbvYWSR0J0pvESUmEOWxJxMPWSWPEbMxJSpvWxsQJbJQXSH1EO1/ExvbXlJPEbMP=bEUXl=1W0RQJY=1ESWeW0W6WxRAWtsqJ0MA=lJeE0jbJljUWOU1WlR0=luqWOw/WtJqJxG/XORQ=SHUESwxEtseElJPWxGeXOMx=SWqJbsD=Sjm=OwQWtjYWlW6XtRQW0imWbG/JbHYJSJ/E0uq=SM6JxweWxiUJ0EbWxJPJbUbWlu6Wtjv=SRAEbRD=lEmWSR0Jx=UEOMeWbG0WSMxWOjvXlNbJxvb=b=mEbFeWtEmEtiY=bFQ=bJDXSU1XlEU=ONb=luPJYibWO16Exu6WSR/=lRDEtJQ=Ov1JS5b=YRqEOJPXOs6Jb5bW0=1=libWYJDXlu6EtjYESWQW0u6W0W/=YJ0XSimW0MP=OUmWluqXSRDXl=vWtJeWlim=lM6EYi1ESMeW0WxXOs0JSJPJx1/JS5bXSuPESUUJY=bExJ6EbsqW0pmJbuxEb1eW0NUJxuAWbsDW0MQWOHYElEYXtRqWxHYESJAExW6JlNvWYJDXtsDWbM6EOUvEbJxWtp1JSWPWlJeXlpY=Yu0W0JPEOJAWlJQ=bM/Eti1EOJD=tRPJbRq=YuqJYWDEtJDES5U=SsDEbibWOu6WSMPJ0pYXSvmJb1PXO16WtNbESibJS1q=bvmWOu6W0s/=ORqJlR0EYpUXlMe=OF6XSsqJlNmEO51=SuAWtj1JYWDXS=1Eb16JlivWx1QXSGeEbM/WOvvES1q=tseWbi1=OGxXlsPW0=vWxwQ=S1xWSWPEb5bJYjYXtJq=tM0WxW0XlEYW0u0EONUWxp1JYseWlJxJS1QElpU=ORAWSUbESs0Wb1DEtEY=SG/=YNm=lEm=tM/ESjU=OjbWSG0WOJ/WYJAWOWx=OJqJlJ6WbE1XtuQExJDWlsxWSpmXSGD=SJ0ExwAEYRP=OHbWluPEbG/WbRAEbFPWOJ6=bFQJ0M0ES=1JxH1XSibXSJeJSMP=ti1JSR0JxGAWYjUEb=YJbHbWYJ0ExpvWlW6XtN1WxvYWxHvJ0JxWYJqJYJ0EYRx=Ss0JxpYESvmJxwDExibEtivXONUJb=UWOFq=YuDJSjYXOEbWYWAJxFQXtE1ESMPWtiYWOR0E0JD=timEO16WSHUWORAJbUUXlRAXOsQJ0jv=tMx=li1JxE1=bvbXluqJ0s/EOFeE0EvJxvYWS1QWYjY=lRDJxu6WS1xW0WqEtp1JlMQ=b1QEOR/WbjYExFxWlW6ESN1XtuxE0WqWOuAWSJAWOFAJSNUWbMQJbM6WtMPWY=YJYEUXOJ6W0p1EOUbWOseEbGAEOJqEYEYW0M/WxuAWxvv=Yj1EYJ6XOHUWSRPXSUmJb1qW0uDJSHvWbw/WxJxWtjmWxMPEbFPJSw6=ORP=SW/XtJD=YJDXSueE0ibJxF/E0J/WOM/ExiYJSwe=bGxXtR/EtRQWOFAElpmWx1/J0JDWO1QESFD=lueJYs0Wx1AWx1e=bjUJYE1WbMxW0=1JSN1WS=YESwqEOUbExUYWxv1ElEYJSRQEOUmJxMxESGAElimWlW0J0jU=b=bJYpUWO5vXSpm=l=vEx1eWSpmXONU=OFeWtsx=YNbXSG6JSEYXOj1=SivXlRQEtWe=SsAJb=bWSFD=tRPXtpmWts/JxsAEbUYEbUYWSMDES1AExMQ=OFPXOReEO1Q=tWe=OR6JbiUJbJ/E0R/EtRqWtuxEbG6W0EY=O5UXOH1XSMqWbRQWtRPWx1QWOFAE0sqEYJP=SF6=ljbE0uD=ORQ=OwQ=OwqJSweJbG6WYJPJbFxXS=bWOGeXSR6JxGDXONY=OM6JYpvWYM/WlR0JlJeW0RxEtpv=tu6JbHm=Yu6XtsqEbvmWSiYWYRqXtJxEbF/EOux=Sjv=bw/=tM/WYRAXlE1JxueWOMPWbimXlsxWbNmElEU=SEU=O=b=YjmJbueWOGeWtJP=ls/WxNvXlJxW0M6WYiYWOM6Eb1QXSu0EOivXtJ/JxJPJbjYESG/XSjvWOUY=Su/JbNY=SWQJbJe=bWq=bvmJbFxWS1AJS1/=bGxJSuQWOJQ=ts6JbUvEtJxWbE1WxFxEOibWOpbEbFq=tR/W0JqEtWeWSpv=tpUJbFDXlRqWbUUJS1e=bUmW0Mx=YRPEbweJlu/Xlu0XSpU=lR6XSW0=l=vJSMD=bUUEtEmWSW0WSueJYJ/EbF/=SUvWti1WxNmJ0MeE0MeWxRQEbu6XOWqJxwAEOUbEx1PXSM/=bFxWSFAElu/WSpm=lj1JbW0=SjUWOWP=SJD=S1q=YuDEOMPWxHUExseJSNYXtRPJxNYJbJqXSW0ExsqWbuPE0R6Exs6=YEvJb10JSu6=O5UJb5UWSFAJbwe=SuQESMDEYWPJY=mJxHYJSuDWSR6JYjYEbEbEtW/ExuPXO1AWx5bXtJqJlRe=Y=vE0pbXOu/Wb5vESiUEljb=YMeESw6ESJPJYM6JYsqExHUWSHYEtMqJYiU=YuP=lMq=lux=Su0XSwA=l=1ESv1W0=mWOFPXSpYWSpYWxUUJbseJxw/W0pUJSpvE0M0WtEYWOWeWON1Wxj1EtimESNb=S5mE0WqEYW6JbWDWtRDJYsqE0jvWSGqEOs0XlJ6Wtpv=SJAExNmXtJD=SjvEtW0Et=1XOs/WOJ6ElNvXt=YExw/XOiU=ONUESv1JbJeWOwPEbuQJlp1WlW6JbHUXOwDEOM6JbjmJbsDW0pbXONU=SsDESF/EbsqJxweE0s6XSMAJx5YWtj1=bEmWbibWOjUWtRx=tuqWxRAJxRAEOsqWYRxJluP=bpvEYJeWxHbJlivWOuqWSWA=S5YWxUvEljYJlE1ElNYWbRPE0MAEtiYW0sxEYs0Jls6XtsQElj1ESMqExM0EtWqWSpvWtuDJS1xWl=bXONYEOH1WxWqJYux=Swe=bGPW0uqESJ/XS1/JxJqElJDWbMqE0pbXOFq=tRA=Yu/EbM/=tM/=tsA=YuDJluDJYR/WxvmWxJQEtMeWxjYXOFeElpYEYuQXljUEOGD=YR6Wb=1JSNvWO1AEOs6Xl=YWls0EOMAElivEtE1EYs/=bRQEtj1=bR/=Si1WbuA=Ow6J0W6ElN1=SvvEOw6WSUbEbjbJYjUWSjvW0M/XSGeWt=U=t=bXtRPEtsAWSiU=lM0J0WPJbHUEtRPESwQW0WA=O5bEOF/=lu0WxG/JxFP=Ojv=SjYESUm=tMQJbJPWxWDJxjU=bNUEbJxJYM0WOw0W0jbWSGqEYpbW0J6WONmWlW0JbsxJ0ux=biUJS=1ExUYXSU1EOJPXOR0WtWAJb5bESj1=tivWSjbXOibXlEUXSs/Wx=UXSweWO1QWxNmJ0JqExUUWbjYWSimJlMxXSs6=tR6EYjmXO1eWxWD=tEYESE1=b=U=ORPExvU=Spm=bs/XlsD=bsDJxF/EOJ/WbNbEljmXSsPJSjY=YJ6JbUbJ0ibEtMeWxw/J0WPExHv=bFx=lWqWYN1EYR0XSEbExFxEbGP=Os/Wlu0=bH1ExsPJxWPWOvYJYu0J0ueXO1AExs0=SJe=SHYExRAWYjm=OFPJxpYEbEmJlWAExWPWOW6WtuqXlN1JS1DWb5bEOuQEO1QXSW0JYMQEYu/Jlu0=biYXlWAWbR0WYEYXtNUJxMeExu/XtWeE0E1EtN1=OvmEljvJSM0EYjbES51=bJD=bHYXluqWOiUWSM/JS1qXSW0Xti1JxpUJSM6XtW0EORDXlW/WbjUJb1QEOGPWYsDJbH1Wl=YWlu0EbEv=Spm=OsqElEbJb5vJYMqJxE1XOwDEl=UEO5bEbUvJYuq=bGP=S=v=bvYJbW6ESG/JljUWbR6WOF/XOE1WlpmExw/Eb5mEbs6WtWP=tM6WlM6JSRqEYuxWOGPJYpbWxFQWxJ0WtWPJljb=YWAEYueWOiUWOsQEOU1=tNvXtiUJxiY=SEmJbRDWYuQJSuq=OW6WOsQJS5mJlpUWb1/WlRPXlse=OR/EYMxWOu/EYR/JxHvJb5YWlJqXlJDXSUbWOMxWYu/Wts0WO1P=YpYExjmESMe=SGeESs6EOJQWOj1JYEbWSGA=bvbJYMqW0p1WbHUEOJe=b1eJSsQExNvWbMPWlu6XlJq=Ojb=t=b=YRQ=OiYWO16WOJeWxJDWxsDXSGPElibEYMeEbRqElRxXOWqEbv1WSRq=bGAXlNvJxF/=OiYJlNUWSJe=bW/J0sDJbs6=bGD=biUWYu6XtNYEOuxExRq=YRAXOE1Wxu/=YiUEtjYExwD=l=mJbi1WYpYJYMxJYjUJYMx=SWP=SvbWSvvExs0XOG0WSMeWbu6EOvvEOwAJlJ/XlueJ0MQWxH1=OMPWORPEbG/EYs/XSJQXSN1EbpYW0JeJlJ6=SF6WxuPWO1QEO5vW0MxESJeWOR6EOFDXt=UWSFDEYs/JxGqExsDEYuQJSG6WSjYXOGDWSFqWbRe=YJQXSEvElRqXSuqWSsPJbEv=b1xJbsAJlsxXlpbExWAWlJ/JYWeJxF0XliY=Spm=bJ0JluDWOGAWSFQWbGAE0uDXOjUJlRQ=liUWS=b=buQ=SvUE0ReWxFAElM6JYseJSUv=SseWYjUXlJQ=SJPJlM6ExG0WOUvWxUU=tRDWSpvJxF/WxGeXtWDESivEYJeESWAEluQEluqXt=1=OUYWxRAESNYXO5vEYWeXS=bXtJPEOGQJb5UE0MPJxjvEYWqEYM0WtMDJbFeWtJAWbUmXS1q=bpvJxw/ESUvESJPExG0Wb1QWS=UElMDJSFDW0MQWOMAJlR6Eb1qESFQ=YMPXO5mElimJYjbWtNbWbseES1xWb=vWSFAJ0JQE0iUWYM/EOW/=lJxWSGeXOMAXSvUEt=Y=SMQ=bFqWxH1EOHYES1D=OJqXlRPWSsAJxEY=tMe=bRAXS=YWSEvJbuD=Ss6=lueESW/WYJDJSWA=Yu/Jx=YEORA=S16EYWQWYJqJlMPJSjYWtRqEtivWbHmJbG6JYMq=SjmEOGPWlMx=OEmXOwAJbM6WlMPWSWPJ0NUJbu/JxRQ=bNv=bjmElu/=b=m=OW/WbivWtseW0WQ=YR/=tWxWYjUWbj1WxMe=lpmEbvUWO=vEbFeXOGeJ0jYWSsPWO5bEYjYEljYEYEYJbJxEtE1Wbs0JSpbWS1qWlsD=tib=SR6JSuQXtuA=Os/WbR/WtsDW0MeWS=UWYMAWb5bXO5bElJA=O1eWxFeJ0W0EO5UJYWxXlWAJ0ibWl=YEO1xXtiYJx1eJluqXtseWtWe=b1AWbvbExFxXSu6EtsD=t=mJ0WQWSw/=luxXOHUJbM6=bGDXO1qWbW/Wx1/=bjYXlEYJxvY=tJDW0jbESMQEYjmESNYWSiYXlu/=SW6WON1J0J0=YEvJYNUJSWPJ0jYWbWq=SMxExUvJbjYJb=UESseXSuPWSMqXtuD=OvbWSHbJYEYExwe=SJ/ESW/WxwxExW0EYu6EbsAJbRPWOFQWtEbEtMAJxFPWx=bEbEU=S=YXtu0Jx=b=SJ0E0sQXlp1WbMQWbW/=OW6WYRAJxJe=YpvWSWxE0J6JbjYWSJ6ElE1WbsQWtRPJx1DW0EY=SUmExvmEbUbESMeWxpbE0uDJbGDWSJDXSHmXtp1JYp1ES=bEtEvWlsqXlMQEOsQWlu0EOHvE0RqEOsqWbibW0JeEOwPESMe=SWeWbF6EtJ/EOUUJSHYWbuDWSGAEOivXOsxJbuxJliYWSiUWx=1JljmWtuQExiUEYu6XtJAES1/EtRQW0uPWxsP=OGA=SG0JxH1WS1eJSiU=SJAWlibXOWP=bNbXSM/WSRDWxMeJYJqWlR/JlNbWbvbJxUvWYR6E0u/JSW0JYRDEYivXSRPJxu0XSMxXO=bJlWP=bWqWOiYEtpm=ONvWbF0WbpmW0JQXtjmEtivEtM/JxEbESFD=tsAWOueXOUYXOuxEtuAXO51ExHUExM/WONvEluQEOE1WbW0JYWAJx1q=SseESJPXlR0WSuQJ0MQJ0Me=tjUWSHUXOG0=t=UXSRxW0R/JSwAJ0NYEbwDJ0Je=OG6WYpm=SRPJlEUWYpYWYMqJSF/Wb=UJxsxJYM0=bM6EOsD=tJ/XOH1EYse=Os6EOpU=S=m=bUYEOH1=SRqWljvWY=bElRqE0jvXlj1=Ys/XtM0JbG/E0N1XSG/WSMAJxEb=bN1EljYExsDW0RQ=lM/=lR/WOJeESjY=OGQExWA=tWeExGPWtimElEYWtM6=lRxESReWSWP=tsqWlRDWYEvElRA=bpbXO16XOivES5mESFPE0pUJbsA=OibWxWQWbJeXOUU=SM/JS5mEONmJYi1Wts6JxvbXSpvXOW6WxueWSp1JxE1WSUv=b5bWOsqEYNU=OuPE0jmElpYXtsAWOFQEbFxJ0u6ExW6=b=bWbJDWYpvE0W0WSpYEOMD=OEb=tRDElWDJSwAJSMxWxN1XSW6JSMxJxHYJx1AJ0RxJxE1WSueEljbEtpbWbwPEOEm=SpmElsQElEbEYRQ=Oim=OGQWtpvWxR6=tW6WtEYWYsAWSEbJb=bXO1x=OGQWOWDWbW6JlNUJbRxEx1/W0R0ExJxXOvmXlEYJlNU=b1q=SsD=tMDXtJxEO1eEt=mWtJ0=OG6Eb=bWYW0=YM6WlE1Wx1qWtj1WlRQ=Ouq=ls0WlRqXSJ6EluqWbp1W0seWOi1EtjvWYi1ESueWOvmXOJAXOG0EORQJSEUEtWqEYRDEtMqEbGQJSwe=tjUWbvb=OHvEtsxWxjm=SJ6JSwPWYWeWOuQJYiYJSuAWS1DWbRAWYs6ExM/JbEmWbpU=lJ0WOWP=S5m=OMDEYRx=OWqWS1DEYuQ=ONbWYEUEORqEb1eExuQWORP=b1PJbue=SR/WOGPESimXSF/=bu/=tE1Etj1J0jUWxWqE0MqWbWDWxR0J0pmWtuDESiYEOpvJxibJYs/JSGP=S5YW0p1XSHvJSwqXSJqWls0=bUmE0u6XOwqXOWQ=ljY=SFAJlu0=OUv=Ov1Wx5YJlimW0iUEtJQ=Sjb=OJqJbu/WtNvEtjYE0imXSGQWb51WbG0EtRDXlNvWbWxEbEmWSvvXOweJxF0EOGxXOJe=tNU=SseJSHYWbRAJxjYJSMx=YR0WxN1ExuxWSNYEtEvXSsQEbJAES=UWOHvWtJQWlpvElJqXtsDEbwDWOMe=bGeES=vWOHmWlRx=Ou/=S1PEOw6Jx51WbUmJxRAWOJAExWeXtMqXSse=Yse=b=Y=SFQ=b10EO5Y=lEUWtjbJS1Q=ORQEYNvJSwx=S5YEtsPWtjUJxWqWS5UWxpYXlRAXOM/J0pvXOj1XlNU=SsqWxwQE0sAJli1WtN1=Op1EtNbWxjm=lWAWbimW0J/W0RDJSGeJ0uQ=lMQW0=bE0RxExw0=OpbEOpvExs0=OUmXOsDJSR6ElMeWOReW0uqJxFDJbjYJlMPEYRxXlWD=YNmWSuqEOJ/=lR0=SMeXSRD=Y=YJSUY=ORAWlM6E0pv=ls0EOWx=ls0JSNU=tE1=SF6=SRQ=YMeEOpU=YuxXOpmWlJQJ0NYWxJeWSMxXOHUJS5YWYJeWSpvXOGx=YWqEbRAWYMqJSJ/EtsAJSFeWlsqXlJqW0WA=bux=SR6W0=YJYivWYNbJlWq=lNb=Yu0WOJqWYJeWOEYW0NUXlpb=SWeXSpmEYW/JSsQE0R6XSMAW0JeEO=bEYp1WSJe=Ss6E0MQWxpbJb5YJxUvE0WQ=Os/JSF6JbJA=lM/J0RP=tJqXtMx=bRQEbRqXSRQXSGD=SjYWb1QESG0ElEbXO1/EliYEOw/WS10WlJAXlNm=S1DE0WAWSNUJbFqWOv1JYJQExwqEOWDJS=UXSi1Wb5b=O=vEtuPEOvUWxGQ=bFP=tW0XlNYWYNm=YpYXSGAXSM/JYN1EYNUWbHbWYuPJSGP=tu0XlJxEx=bE0MxE0pbXOF0EYNUXOuAWluqJxvUJSHUWbs/EOjmWYJ0JSE1ExF0XOF0EbvmWSj1JxjbXOHY=OJAWtNmXSw6EYR0=SimExNU=YW0=YWeJSwqWOw0WtWDWlJ0JxEvWlWxJ0iUJxsQJYpbEO1eJlE1E0WxEl=mJSMQXSNYWbMqEOH1=SUvWbsqJYMq=lu6JxjvWtRPJb=Y=OReEOW0=OEUEbwxEb5bJbJQ=S5YWY=U=ORxEOWPXSsQJlRA=Owx=Y=bEbF/Ex51JxEm=OFQEx10W0WD=YRQWYReWts0=YJ6XtMQJSuqWSNYJS=mWOGxJbuQJbsxEYEbEbuAEOJDExs/WYjb=tEvEYMPEOUbWSpYWlEmExHYWSwAEOM6EYNUE0p1WS1PWSjUWSWAXO1eWYimJbueWSvbEYMAJSMeJbRA=Oj1XlReEOiUXlRA=tuxW0s6EbEvWSwQXlMxWOHbXtJ0=SWxWlRPXtJDWbHY=tRe=bpmJ0sDJSEm=YMD=tMq=bE1EtW/Jb1x=tNmXSwQE0=mWxweExEmESU1J0RQWOs/=livWxUmJbEmWSs0XSw/WtMAExweWOwQXSimJSwQXS51JbHm=OjbWOw0XtuqXO=bEbGD=bUbXO=bJxpYEYWQJlRx=bUvJSj1WOFeJSGxWbw0=OuxWlsAEbsQ=Ow0=OpUWbH1XSFqJSMx=tR0EYsDEbG0E0Nv=SJDJ0sPWYsPJSEUJbuPWOwQJSw/WxpvJSU1WtJ/WbwAJlpmWSp1ElNbXOiUWtWA=lRqWlMxWb1AXONmEbs/XtJq=lNUEtRD=SUUJbWq=bEb=O1/=lJ/JSGQWSvvJb5YXSM0J0uqJxM0XO1PWO=1=SM6WOvbJbMeWluAEYW/JbR0W0W/JlNvESib=SpmWtp1W0iYJxRxESUYJxReXSRAWluPWlNUEtMDEbpvJxReEtW0JSsx=ljvEYsD=bw/WbH1WtsAJbWPJYMQEOuqJS5bJ0=mEx=Y=lsqXSHUXSUY=SGeWb=YElWQExG6EbNvXlpvJxuQWORqEtN1JlNv=SU1ESJDWtsQJxuxEbpbEOMeXOMAXOH1J0NmExJqXOw/ESuAEbim=Sv1WOjvWxiU=limXlWAW0jmJ0Eb=O5m=OWDWORAE0W/EtMAXlW0=tuP=bMeWOUm=lMAWtjYWSNmE0J/ExJD=Ys6EtR/EtWDElW/XtWAWYu0J0sqExjYEb5UJSvUJ0sxWx1AXO1D=tuqExGPJxpYExjU=bMQE0N1=b5v=Sw/WbF/Eb1Q=bNbEbp1J0=1JSNYXSWx=lM/XSHUEtR6=SpbESRQXORAEO1AXSWPESGAEOivExRDJYMqExGQWOU1ExRqXOpbEOWxWb5vE0MPWtjY=S1xWb1A=biYXOjm=tNYEb5bWbRqWbWPJxWQJSHvJlu0=YjvXlW/=SF/Wb=vESi1ESuQWbFAJx1DJS1eWxNU=OsQJxsP=Ojb=SpYJ0s/ExpU=S=Y=OM0=YpvJb1eESsPExWeEOJx=SEvWlib=biUJb5vW0Nm=bGQJxwx=bE1=Y=YJYpvJYMDJxwDW0EmElR/EOGAW0uAJbvUJSvbJxHmJYRq=lJ/=YuA=YR/XOGxEO1xXONbJSpm=SuDJYNbEOEmWximElNm=SsAEtpvJbsP=bvm=tsPXOjvEbJqEOWe=bGqWbWPES5UE0W/E0EU=bwQJSvY=bEYExU1=lNvEbRA=tjYXOu6ElEYJYsPEOW/ExwDE0EbJxEUJSW6JYJeJSwD=lseXts6JlMxWlM/Jxsq=tWxEOjbXlMAWOJPJSFxJlEYESJ6EYJxWOWeJYpmWxvm=tuP=OuxJx=bEtJ0Ebim=YReXOWQ=lWD=tueEtu6EO51=SUYWSF0=YWq=SsxJxUb=O1PWlWeWl=1XlpUXtJqJ0iYEOEU=S=v=tM6ESwQ=tpv=O=b=tiY=OwDJYEY=YMA=OjmEximE0sPWONbXONUXSGe=Ys/JSJ6=b51WxMeJbNYW0se=tW0JYpb=SFPEt=1EbM0EOwQ=ls/=l=1=YuQEOU1=YM6JSu6=OHmWOpYWb1AESRQ=tueWYpYExvv=Y=bES16ExJeWxW0JbMDEtJDWxsQJbF0XSueW0RxJYs6=ONbEO5UWOs6JlWx=bMq=Ys6Jxi1Ex5mESWAWS10XlpbESJ6=bM0WOM6=YjvXOGPJxUmWtJeJluq=bMxXlu6EYRqXtJ/WbJAJSW0JbuQWSJPXOG0JxWxW0u0WtJ0WOG0ESwqJximJbW0Wb=UWSN1WOReWbHvWbFqWYjvXtuAEts6WxvbWSGPJ0ReW0jmExHb=bjYJb=bEliUWx=b=SuxJbFAEYpmWO=mEO1PXSRq=tR6J0=mXtW/EtJeEtRxEYpYEOHbJb10Wli1WbNUEbUvJSEbJbEYWYWDXlNvJYR6EYM/ESib=YNUJ0M/=YWA=YpmJxu0ESJP=OJPEYMqJxWeWSRQXtR6J0M6=bF0E0=1JxwQJx1eJbibE0WD=bJPXSvvEORDXluDWOHv=bGDWbvbWlWPExuAWOJ0Wlu0=OR0XtWPE0N1W0=1WbjvES=bWx1eEbG0EO1qJ0EmXtMAJYR6WYNYW0uqESWDXlWPEx51JbivJYR0=tEvJlNUJbs6XlJ/EbH1WtJQWxWPWlWPJSEbWOuqXtR6EtMQExJx=tseW0iYJxvvWxiYXSWq=bpUWYMqJYueJ0ibESpbWYM6=bJ6WOR/JSGx=O51JbN1Ex=1JxEYXSw0WS1/ExNUXS1D=SRQXOFDEbNUWYEbWtpvJbMDEOR/WtuDW0N1EYRQWSWDWSW6JbMPJ0RQJbv1ES1DESMeWOwx=SpUXSpm=YEUJxHmJbFD=SJP=ORP=lR0EOFAWtWPEtWe=bWxJbjm=l=YWxU1XS1DWSu/XOsQWx=mJS1qXluxEYR/Wb1xXSHmWSivWSWQ=bEUExsAXOuDW0MQ=OFQEb5vEY=vXOv1XtJDEbEmElj1=bFAExM6EYM0WSJQESUU=lW/W0W0EY=bESpUJbJx=SpY=Y=vWxw0=YMeWbM6=SMxW0JAJlRqJSUbE0ReJ0jvEO=U=bsxEOuQEOEYExJxJxsQ=OHmJxivESGAJbMAEbpY=SwDElNYEYuQWYuqESGDXSRqXOs/JYJPEY=1=tJeE0sDJb16XSFqXOvbESGxEOMeXOseWOW/=OiUEb10WlRQWbuQWbJ6EOF0Jls6=tuxXtM6ExFx=bR0XSwQES=mWONbEOs6EOFDEbNv=Yu6JbwxJYs6WxseJxuqExMqW0WQWbHb=bEUEOsQXlJA=ti1ESNYWSJQXOFAESJ/JxWeEl=UJls0JbseXtW6XO1xWxsD=SuxJYReJSEbESFQJlu6=OsxJlu/JbFeJS5UE0EmESGPWSw0JYM6Wb1qWOi1W0J0JxFxWlWqJxMxWS5YXSHmEOweJxF0EORQXOibExHbExwqWYJqXOMPJS=YEONYExRqJlRxESGDWYjUWSuDWxJq=SWQJ0MDJbweWbF6JYsQEOG/WbWPE0s6ESibEx16WSMAESJD=OjYW0WxE0M0=tMQEtiYESvb=bR/Xtu/WSs0WYuAXtNY=bpYJxseEb1q=SR6XSW/JSR/WluxJYuQWSjbJYiYEOF/WSpvEx5UESEmWSj1=bR/ExHb=tJPJx1Q=bweXOwP=YJ0WO=UEYpYWYNUWbHYXtM6XOueJ0uqEx5U=lMD=SM/ESsAEOpvXl=b=O=mJbRqWSN1ElE1XOiYJY=vXSJQ=bJxJbJDJSwxESuQWONm=bH1ESUmWOGDEbueEtJPWbN1=S5mWbiUXSH1XSNbWbMeWSMQXSJ6EOvbJSMPWtueXl=mXlu6=tMAJxM6EY=1EtjYEO5bXlMqJbR0Wxs0=Ys6WOJAWb10Wbiv=YJA=OMQ=SGA=bRDWl=UEOpUJSFDXtpUJYNvWbWe=ljYXtReJSpUJSu/=SwxWl=UE0RDE0MQJlibWYjYJYj1WSNmWxjv=YiYWbEbJS16XSibWlibExUYEYsQJbwAWSjUJx1PJS=mESHmJx16ExsAWl=mESHmJbFxJlsDWli1XtRqWOW6EbG6JlRqXOGAWONY=YJ/WSGDXS1eWb5YJxW/ExvbJbvY=OwDXlu/JSu6WlJeJbEvJSM0WOGP=bHUESGqWls/EtJxWSWeEYReJSsA=bM6EOJQ=SsPESiUJS=UExRAWxJe=tNU=b51JxNUEbNv=YJxJlj1WOJxXOuAESu6JSNmXtpUWSM/EtsAWSWP=OHbW0MxJxMQ=YW6ES1AEONmJ0JAEOuP=S=vE0iv=OpU=SvmElJPJYJ6=SRDJSp1JSFeXOw0EOGPWljUJlseWx1/JbReEbGQ=YRqWxReWbU1JxEbWx=Y=bG6=YRPJbMA=Su6W0ReJxu/=buQJ0Jx=SM6EOwDWYJ/XlRqWbRP=YWq=SMqEO10EOJAWSw/WS10WS=U=bj1JlWeXlRDWSpvJbW/EOFeEluqEbHbJlRD=bMAEYibEOHm=OGqXSFqWO5UEORe=tMD=bGPWlu0ESvmWxjUJlimJbpvESWqWSjmWYWDXtsAWxwQ=SReJlM/XSuAXtpbWSJDJSNbXOwPXtJeJbGQJbw6EYuPWSsPXljUEb1PJSvYJY=vEOwAJYJPE0u6=O51JSwAJ0uPJxJDEOw6EtjUWYRAW0WQWYsDXOWDJ0WPWlM0XtR6XlNbJxJQJbMq=bMeWbEU=SseJlpvWxWPElsPJlj1XOR/EOWDJxMA=YibWxJA=lW6JS=bXlpvJxGeEOF6ElWP=SwQJSUUXlEbJSu0=bEY=tMxWSwDWluDXS1AE0R/EYJeXSpmWxJAEbsDJbsDXtsxJlWAWlRe=bEbJYReWbUv=ls0=OseXOFxWxwqJxweE0JDXtuPJ0J0EYsDJYuqEtM6JbwqJliUWYJeXORP=OMq=YM0EbMPEtuP=tNYXSsQESRxExRPXSM0XSMA=SHvWSEYXlEvESU1=OU1XSJQJx5v=SpYWbWPWYpbWlWqWSpbEtuQEYj1Wbi1WbweJb=UEbNvWti1ElWQWx5vJxs6=OMeWYjU=SivJ0pvEOwP=b=1=tp1WbvYEO=1=YjUW0uDESJ0WbuqJxJAEtJ/EtJxXlWDWbF0=b16EtWQWb5bEOu0J0=YJ0MPWbjUJSuDXSHU=bvY=OvUEORxWSEbJbUUJ0MA=bvY=OFeJYE1WtJeJbjYWSWA=tWDEtivWOib=ORPEONvJ0R6ESsAJ0pvESWqWbR0J0J0WlWx=SJDXOvU=bGQWOFx=bNb=tivEOUbWbpYEb1/JbG6=YsqJx=vXOuxEbF/EYjvJ0RAJYWxXt=U=YMqEtp1WOwA=Y=1=lMQWYReJSGDW0MA=lJAE0E1E0R6Ex=1ESjb=bMqJY=YJb5YW0uqW0uPWYWPEtJ0=SuAWOjU=SJ0XSNmESH1XOJqElWq=tpYJb5mES=bJSUvJ0W0=Y=vXl=bEtRqWxJeESwQESuqJlWDEOGAEOUmWtNvEbNUXtj1JxMxExR/WbjmElReEYNb=SwP=OJqXO1PEO16EOu0WbuA=bR0=SpYWxWq=Su0JSHb=Ss6=bpbJSRPJxG/=OibWSu0WbHbElMDWxWxXSsDWbsDXOWqWxiUWSHvElEmJYNYXSJQJb1A=tEmJlM0ES=UXtEbWSwxEbsxJ0Mq=bpbWtEU=bGAWSRx=b1DWSFPJliUJxp1WlNmJSG0=YMQWO1xWOiU=tsQWxMP=tReWxWxJxvv=YEmJbNmWlWDJSw6=SUUWbMAExFQEluPWOuqJxGAJlJPWSweESsq=YR/XSjmWO1qEYux=SimWls/WYu0WbWxWxGxJbU1JSHm=SMeWOjbWSHvJlp1Jb1D=t=UEbJDXSEmJbpYEtNm=OUUWSHvXlJPWbEbJxNUWtRe=SsDWOwx=lE1EtM/EOvvEYuQEOJQJYs6XtJ0JYRDXSJ0ExG/WbwqXtMxW0pvWlJx=OFxEbwqJlMDWOJq=lJDEbs0=YJ/JlM6EY=v=OMQ=lRqEbuDXSM/J0MeWtRe=SvvJbEbExpb=SjUWSvYExpUXtpbJlRe=YEm=YjvWx5bXtMeXOp1XlNYXSUmES5mJlR0XSFDW0uxWYRA=SR0WOWPJbFQJxiYWxu0EbR/ESUbJxUb=SibExRPXluQXSR6WY=YXSJxE0JxE0pYEOsxWSp1XSF6Jb5bElibJYRxElNbJSs6JSJxExs6XOMq=SRDWOWQEbseJlsxWxNYXlNYW0sA=SEvXO1xEYR/=YiY=li1=SvUXtuPW0p1ESvUXSjm=bNUWbuxWxFeESM0ExvmESF/XONUW0RQ=ORAEtRQJljv=Ow6XliUWOWxWOGeWxNbESW/WSs/EtR6=OHbXOW0EYpbW0s6XlRDEO1/ExEU=tM/=OMxJbWA=tpYWxWDESNbWtM0JbFxE0NbElRxWxMPW0u0WO51EYjUXS=m=bwP=YpU=OJQ=SivEOHbElueWlu/Wls0JxW0W0=Y=bjmWS5UWbGPEb=UES10=Ssq=SvbXtM/EOw/Wbp1JxR6EO51WOvvWSR6JbNYJbjUEOuQJbjvJbRP=b5bEOF6Exw/Wxw0EY=YExsAW0uP=SFx=SW0ExpYWtiYXOHUWSMAJbMQJxWPWYuAEbGe=tuqEtjbEbjUJS5YESuDJlMqWSF0EbGQJbNUEOJ/WlNmW0iUEbUY=YWxES=UElJeJbRqJxuDE0W6ES1eEO10W0pvJlWQE0=UWS=mJSGx=YuDJbJQEOWqXOimWOUU=YJxWYsAW0jm=YuQEtpUWO1qWbJ0XOF0WlMPEx=1=lM0ESG0Wbpb=tMAJSs/WOu6=SNmJxw0JSsqE0ibWS5bESEv=tuxWYJeJYEUESw/JxE1Jx5mJbvUExvb=tRD=lM0Wx10=YJAEtimWO1AWYReESGeEOMD=SuQExpv=bWqExW/ESNbEtu0EtjmWOUvWtNUJbjv=lMxWtpU=tEmJxwqXlE1XSW6EbE1ExsxJxu0Wxu/Xl=YEtseEYiYWOpbWxEUWtWQEYJ6JlN1WYNmXSFAJbGP=tu6XSseElueEbJAWSWDWtsPJbwAJSJQ=YimEbRPExMPWb1PJbivWbvbWt=1=SGQE0ue=ONbEljm=bMxEtsqWYM0WxGqWS5UXOJx=S1qWb=U=SwqXlsDEOvYXtRe=OjYXOW0Xt=U=tu0WO16Wlu/=YJeJ0WQJlue=tsAJSF6=bjYWbNv=bpYXlRDWxJQESjYWxUmXlsQEYJQJbM6JSReXO1QXlpUEbHUWbHvWxG6EtEYWxGqEYpYJlp1WOuP=YibJYEmWYsDXSWeW0WAWYEUWtpYWYWQ=lMDExFP=O=UWtiYWlR6ESwD=bu6WSGqExMAJxWxXO1e=OuDWtRD=ORP=OjUWbibESFDWYibExM6=bu0=Os6=OF/=bR6Jb=bElsAWbW6JSRQEtMDWbvm=bw/WOMQXO=bEYWD=SwDXlWxEOs/W0EvWOuqJY=1ElReJxjYEbMA=OMAWSvvXtR/=tu/ESRDESsA=OW0ESUbXtJe=SwDEluqExjYESMPES1D=tueWlWDJ0sqWxWA=limWYRAWO5m=bJ/ElivEOw/EOM6Wt=bJbsPXOpv=SsDWS1/J0RDWxEbEl=vJSu0WbEm=YW0Jxs/JxR0Xtsx=b1DJ0R/=SsPWSwqEb=1ElJAWtsPWtR0WlsqWOEYJxF0EbMQ=SsqXSw6=OFPElsA=OMeJ0WAEbEvWxpmXSW/WlM/ESpbWxNbXl=1WlJqXSj1=SsxJxFq=lMxWbGAWtNmWOGDWSNm=tim=S=bWbi1Xli1WtNYJYW0XOMA=tJ0EOuxXtM/XSGqWYjY=O1PWOJA=S1DWtEUJYuQWSJeWSHvJlsPJlM6=YseJbR0=tRAEtRDJYMPEl=vE0iYJxsDWOi1JYJ0WOJPEbUm=OsxWO16JxMPJxW/J0RxWOwQWxjbEYNv=O1/WbivJ0pY=l=1XS51Wbpb=Ow/EYivES5UWbEbW0sP=SMQJx1qWSEU=buxEb=mJx=bEx1QWb=m=O1xESuxWYE1ESUmXOU1XOvv=lu6Jl=bExGqJ0E1JSM/JbpbEYMDXOimEljmEtp1=lWPWbW6=lEbWbMeElRAWS=UWbse=SWQJb=bEtp1XlJAJbJxJYN1WbpUWOFeWYEUWtReJbFAXS5bWOuqExFQWlsxJx5UJbW0WxM/WbsDEtWqESueJlE1W0M/WxMA=lseE0Mx=SU1WYjY=Ss/XtMqWSMqEO=mXlReEx5vJ0sA=SuAEx=mWxWQWbwqWbuxWbEUEOMAJbMxJluP=S1xWxu/WbF6ExFeXOUmElsxWOsQ=ORq=bJq=bF/XtJ/XtJDWbWD=SHbXSRQXSUYXSjbEOU1JSJDESM0W0sAJ0jYWls6JxJ0WOJ6Wb=UXlRxJlMeWbsD=bFQ=tJP=luQXOEbExW0=bjbEOuqWSwAJxMPXSpvWxpmWlMqWbwDXtJAXtsD=lpbJbJ6Ebs0WOMD=SReWbFQE0=vWlMPJSsq=SHUEY=vJxM/WtEYEYu6Wlu6XOse=bsDJbMQWljv=luD=bs6JSweWORQ=tpUJbEm=tjvXOMxWOJxJS1P=bUUESG0JSwQJSw/XO1q=Ss0JSjYXOMeJxG0JxEvJx1A=OFPXtEm=SWPEtWq=lM/EO1PXlWDWOUvExW/ESWqEtpb=Sw0=SE1=b1xXlRqEOvbW0pbW0uAJxMxWYEb=YibWxN1XSjYExpvJS=1ESjvJl=m=buA=SNmJxRQW0R6ESHm=S=U=OwQEt=m=lsxWluDWx16J0ReEbimWxsAWt=m=SivJlWeWx=m=OMe=timWYi1=O=bJ0J6ExEbXljbWti1=bMeJ0pbJbj1WtpY=b=YWSHUWtMeJS1/WOFP=tRxEbiUXSGeWOWAWOpYEbuAW0uqW0J/J0M6WbiUEYu6XO5m=tNUW0M/ESv1WbJAJbGQWxwPEO5mWlW0=S1DXlJ6=SibE0EY=OuAJlWDExFPJbJ6JYp1EbWQ=OjYEbp1ExwQ=SWPESWA=tEUWbEUWbjYW0pbXORQJb1A=bEU=b1xWOw/Xt=v=lJ/W0s6JYuQEYJQJ0JQXlW6Wb1e=SJq=YsqXtWQ=ONUW0s6J0Nb=YsqXtReJSJ0ESHYJxGDWbFDWYRPJS=UEOG/JxHvElNYXSp1EbJxEbJAEYp1EtM6=SH1JS1eXl=bJbFAJSM/ElsAE0pmElpmEbueJxvYW0R0WbjUXtM6ESsQESJqWOFPXONUWSpvWbNm=lR6WxWxEx=U=SsxWxJA=lNmJ0MDEls0=b1QESMQExpUJxFqJ0W/XOMqWOuPWOW6=tJ0JljYJSMQEtsQ=OGqJbJ6ES5mJ0E1JYsP=O1QJbp1E0EbEtRAEYuqJSEUWls/WbM6=Osx=bJxJSWDWtMQJbuQWbJ/=lNb=OHvEbw0WSHm=lEvXOwxEbUYWOMeXSGDEx5vJxM6=OiYXlJPWOF/=ONmESUb=lJAEONmWxJPJbMq=YEbElReJ0=YElsPWSRq=SEbExEbWONmXOM/WSJ6EY=UWlEYJS=1WOJeWSsxWOuQJYW0WOJxXONv=SE1WYpUWSHU=lj1=b5bWtiv=OGe=SMDEbRDJlJeW0JeWx=vExMx=SHbWtJQ=bvvEtpmEOMDEOJPEYN1WbsqJbwDWtiYWOGD=ljUE0pmEtMqWxweJ0JxWSsqJb=YEOM6EOJ/XOvvEls0=YRQExNvEOMQ=SNYXOW0Wxse=YMP=Os0XtEmEOGAWbM/=YpmEOuxXOJDJYW6WlNUXtRPWOJPXtEU=ljY=lNY=lRP=Opm=SsPXtibXSMeESHY=OsqJlu/EbHUESGPWY=bWSpvEYRDEtR/ElMQWtpUElWqXSF/=SsAESu/=Sux=tMPEOR/JbNvJxFqWSR6E0WxWtMAXSGQXOUYXlRxXOs/WbpYJYJA=S=YExWAJlWeEtEbEbvYEl=UJYpYESvbWbF/EYWD=lsDES5vJlJ0XOU1E0Re=tjY=timE0Eb=SHmJxiv=SMDJ0s/E0sxWSMeWbUmWbwqEtJqExJ/=b51=OF/WO=1=SEm=OuP=SwQWORD=YRQXtMqJxR6=O10EOj1XS1AXljmWtjvJx1qExFqEOu/Wb=mEtW/ExJPWxW/WximXSMeJb=1JSMeWOFAEbR6E0iU=OUYExwDWxEmJxM6XtjUElW6=O5UEt=Y=l=mXORA=OGPJS1QESpb=bFxWORxWSuqEbsqWb1AXSUv=YEvJlRxWbsxJxWxJxueEYuQ=bsqWl=YESW6Xt=v=S1xWbwq=SUUWOsAEOW6ESiv=YRxExwPJbReXOMAXlR0=Y=b=l=1=OF/EOjb=bjUEljbWbJ/EYMQWb1/WxjYW0JAESEmEOsD=O=YJx5b=Ou0WSimXOsP=YEmJSFeESMAJbuDEt=U=tivWxFAXSJDWSu0ES10=YMPXS=m=OWx=bGxXOvUEbE1=tJ0Wbs0=O1xJbRQWbWq=Y=UWljYEYM6WO1QExwQXlWx=limXSweWtsxWSu/XlimWOWDJxFDXSR6EtEUJSJ/ExWPWOw/XOG6WliYXtRPJ0sQ=YsD=S5vJSFeWlRQWbG/WxFeWtWAWtNmWtWPJSGD=bNU=OHmWxGx=bp1JS1QWluD=bsPJxHUJxWQJxFPESJ/EbvYJbFxWOjvExFeJxuq=Owx=SWeEtj1EYuPESG/=bF/E0uD=bFDWOWPJSFeXSFqEOjvExWDWSEUEx1/Wxpv=YWQXtNbESW6W0sDWtWQWxEbEbJ0=tjUWSGeEO=bJbMDXtsqESEbJlu0XO51E0WAEtJ0ESG/=OJeESMDJbJPJlWQWYE1JYWqWSJAExvUXOU1EORQWbGDExp1EtjvJYEUWO1QWx5vJ0MAWtWAXtJAExF6XORPES51=ONUWtWDXSimXS=bElpv=SFeExJD=tJ/JxJ/EYu6WOMxWxu/ESwQWxweWO5YJ0jvEOM6JxpU=b5YJ0jb=S51ElM6=Sp1=t=b=lWQWbsxJlJ6Eb1/WxRA=OHvExpbXOivESWqXOwQEb5YXSsxW0Nv=OW/=bvvJbJDJbiUJSW6EOsAWxu/=bFxJ0RqWtJq=OG6W0pbJYEYXlE1JSJ0EYueWOjv=tReJxsq=lsQW0RxWSuqE0WQ=b1xExwQXONYESFDESv1XtEYWx1Q=tR/XS1AJbsPEYsDWxRPXtpmXOuPElp1WYN1WbwqWOFAJxF6Jxp1JS1/XlEvJ0uqWbUb=bWxEOpUJxWx=YpbWxGeEYRq=O5mWlMQJYWqWOweEbEUJYu0EOGDEliUJSJ0JxG6Wt=YElMe=buxEYpbESwq=bFeJxFqJxHU=OM6EtsDEOibJSNbJliYJbFeEYj1WYM/EOUU=tWQEljvXlRx=tNb=bF/EtR6J0jUJxF/XOJPE0i1WxvYElpYWSMP=ORxES16=SR/WlNvXOjYWxU1J0imJbv1=bJA=OEvWlpvXluDJl=vXONYJbFDXSG6=YJDWYJPWlEYWOJ6XtuxJ0R/WluPXtimJxEYJx1DJbpUXlRQXO16WOGP=YM6=SGeXl=U=YMAWY=b=bMQESNv=lJQWlj1=tMe=Oj1=YNUEx=bJlWPXS10EbHYWS1e=tpU=l=bWtMA=tRQWbseEbJPXO16JYJAWOWxXSRPJSRPEYR6W0J/ExGQJlEbWOJAJxFPJSwqXtuxEOGQXlu/EYRQWORQJxH1WOvUWOwQWOueEtsAEbMAJxJDXlNbJxF/=OGDJxUmESJAEtW6JbNm=YuPESUvWOj1JlWQJYuD=OWeWtR0ESuAWSFAWb5mJxWqJl=U=OJxJbw0XlJPE0uxJSR/JlE1=lJ/XtEv=b=1=YpYWxRPWlRAEbUYXOEmJY=YES5vExF6Jlim=SivWbHbEOW6EbEvJbMxWbReWSW6EOR6=SGAXSHvJxF0EYNUJxRPExjbJ0MqWtMQWtpmXOWqEbsAEOjYW0NUWtNYW0=Y=ls/XSseE0J/EO=vExivWlR0=OFAJYs0WOuDEYM/EYEmEl=bExpvESvYXSGQEbEb=SUv=b1PE0u6WSMPJ0JeXlJ/JxFqEOWPXlibEO5vExGeXO10E0W6XOMPEbHbJlW0=SjmElpmJ0WeEORAEbUvExwAWOE1EYMDWSM6J0EmEb5m=YE1EbWeJSHbW0RQWluQEOJD=OFeJ0MeWOsQEYMQEbWQWxGxJlu/XSM0WSjYEOw0XliYWYNv=SsqEbiY=Ss6JxR6EYMP=tMAWYue=OMQWbpYJbGqXluPWl=vXORqWSjYXSJ6JSJ0JlE1WtuQElW6JlNU=YWxJSi1=OsxWSvm=bG6XtRD=tseJYuQWYW0WxEYWbiUWbi1=b=mWtuqWbU1EYjYWbwqXOE1WOWeWYRPEbW0Wx5U=b=m=tsPWbW6EtJD=OGA=YEY=OUYXS51E0WqEOReWxvYEbMQ=YRAWxwx=l=YXtjU=SNUJS=YJSFqWOFDJlueJlu0=tEmXOEvWYMDXOW0WYuQJSWAXSWAWSpbJxwP=tRQXlNm=bvUEOF6Jlu0=S10WxvvXOW6=OWA=SsqWSwP=SvYEYRQJSWe=lNYExvYXlMPXO5UE0JqXSs0EYibWSJQ=SwDJxw6=OJ0JbJQJxjYJSJAEOsqEtjYExvb=OEvWSi1Wb5vW0pbJbJP=Y=YExF6=tJxXOWDJ0JAEOGP=SjYWtRe=bJQEYs/WOUYES1AXSpmWxU1EtE1Eb=mWxJ/JSvbJx1e=buxESWeWlRD=lM/ESJAJxNbE0WDWSGx=OW0Wxw/EOimXlMQEb1DWSRDJ0EUJSu/EORqXOseWb=UE0N1ExNUWYivEOvbEYivXOUvJ0NYJbG6Jb1QJYW/Wtim=tsQEOGeWluDWSiYWlR0EtEbXORAJSWQW0jUXOR6EOjvJbvbEluq=tWAWSHYExJxESG/WlRqJbRPXO5bWlsQJ0ReEOuPXtMxEOp1WSwAEbNYWYjvWSGeESuQElMQWOGQJYWPWOEUXlpYXtu/E0sPJS=YESHYWO16ESpm=tjm=b51JYibE0J6XSW0Jxu6=SMxEOR/WOjYJbUb=bFqWb=UEOF/Jbv1=tjmJS5UEOvmXSj1WtWPJbjYESHmWOH1Wl=1JbiYWxJ6=lNmEbuAWtuDXSjbElJ/WxvY=tu6JYseEOJe=bwqESwPWOJeJ0NYWtJe=ONY=bjYXlJx=t=vXO1xEYMA=OJxWtsxElWPWbEYJlNmXt=vJxNvJx5vElimWSR/XtsxWbMAWx=bJSJeJ0iUWxM/XluPJS=1EOvYJbiYJS=YEbGeWt=mWbjYJYMqWbM6=O16=OJDXts6WbWQ=Su6Jx5YXlWxXlu/XSpUES=vXOs6WtMDJY=bWbsDWxsAWtp1WSUUJliYExpb=SHUEYMqJxwAE0Nb=bR6E0WeWSR/=lpmExEmWxHmWxib=buPJ0Rq=OsQJxu0XSuA=lWxEbM0=OWQJ0MQEtWQEOMAESpb=OGAEtu6E0ivWbFD=lR6JSE1JSJQJlJ6Wxv1JxJQXSw0=tuQEtWDJbJeJYM/XlEbWbpv=YJ0=bueWx1/=Yi1=YJ/ElJDWtJx=SuqEtNYJSRxWtsDXSFAEYNY=lNbESGx=SGqESNYWYEvXts0WSReExJe=OJ/JS=UXSFQExJeEYpYEbMe=YpvEYuDESFqWSj1=bFQWOFxEbU1=Ow0=bMPJlMxJbRD=bi1=SMQWOJxE0Wq=bHvEximWtEUXOuD=l=mJS5bEO1A=YRxXSMeElp1=tsxXONUXl=UXORAWSsAES1qWb51=lM/=bFeEtNbWtj1WbRQXSiYEOFQJlEU=YJPXSimW0i1=tRPJSNYWYW0JxReWbs/EbueWxwDJxEYExRP=OUYXO1DJlMQExEYWOFAWxj1=t=UJxGeEYuQ=O=vJlRA=bRe=bRAWSMAWxM0JSs/=YjYEtivE0JPJlW/E0jUWOGDJlpvJxFAXOsxJbHb=OWq=tMQWxUmJbuDJSRxWSi1XO1DJ0=YJljv=bRqJxGDEtsAXtW0=Ow6=O1xJSUYXSjbJbsDXSsP=Yjv=ljvXtWQE0JD=YJDJxGDJ0sqJls0ESGeJYW0=lMxWSFqXtWeEtMeJlMxESpbXSWDWSjYEOwx=OwDWOEUEl=b=Os0WbibWSu6WbMAE0pYEOj1EORqExweJYMeJbu0WYJqExGeExuxEljmJbUYWY=b=b=mXSMPWO1xXSG0ES1xEbHvExUbESjY=OUm=tuPEts6Eb16ExM6J0p1EbRxJbweWxWq=buxXtRxExWqWOpY=YjYEOvmWtWDWOJxWlEvExibEYM6=bWAJlMxWYJDWxJPWbMAWlM6XSs6J0M6Ebv1=Sp1=buPW0jvWSHmWlW/=tRxJYJxEtRPJlRqXO1x=YM0XSReElsQXONY=SUvEORq=OMqEbNmJSMqWSFQWS5v=O51=O1qXO=YWS1AJxJ/XSNUWOp1=Svv=Yp1EtE1EO10ElJ6WYpbEbjbWxsqWxwQWtJAWSReEtJQEl=YW0RDEYNYWxU1=Yp1XljY=lW0=YWDWSWAXtR6ExjUJSJAEbHvWYMPW0JQJSjmXOw0JSEUE0RAJluPES=vJYMDXtpm=luD=OG/EtEbJx1QEYjU=bs6XO10J0W/XS1qJbNmJYJ0ESWe=SRP=OGAESU1=OJeEljY=bu6JYWqWONU=bRDW0pmEYNvXOFA=bRA=tM/WbMDWOMQEx16WOuQWOpbJxw/WS1AE0s0=OsQJ0R6JxJD=YJe=O1q=bpUXSi1=bsDExJA=OwAJYW/=bJAEOJxEtimJY=v=YMPJxsDEx=YXSM0JYseE0=v=O5UXO1P=OWe=bF/JSReE0RA=tNbJSw/W0jvE0RPEtiUJ0R/ESpUEOJ/WluP=SRQWOH1XO1PXlsQJ0jmJxFPElReXlu0WxE1WOH1=SJxXlJ0Ebjv=SGe=O=UEO10ESiYWYJ6WxJe=Ou6=Osq=OMD=lNYJbu6WY=b=Yi1EYEYExN1XtsPWbwDJ0jvXOJ0JYEbJl=1XO16=lN1=tNYJxi1WbjmWlWPXOUmWYsDXlR/ESRQEOpmJSGDWSsqWOF0W0sA=OWAJxs/WYJQ=SEm=YuPXtu/WOG6ExRDWOuqWOs0EbR/XSvb=SuAJ0EmE0NbESNm=tRxXOR6=lJxExRxEYJeJSUYExuQEOHUWSJeWSJAXtpY=YpUXO5UESJDJxpb=SFQWOGAJYReWbNU=OE1=bGxWlJPWbH1XljmWOw/J0EUW0pUWOFeJ0MDXOwxWbweWxUvJx16J0=1WbMqWlu/EOWx=bMQEbMD=tiUWbJx=SJeJSRQESjmJlsx=bG6=bHmWSWAWbFAXtsxWSFPXtMAEl=bESNUJ0pbES=YESsAJbEUJb=mEbG0WSJPEOGPElMDXO5bEOEUJli1=bGqWO16XSW6XOs0XtjUWlNY=tWqJSHUWbuDXSu6=OGQJxNbE0R/=t=1ESvUW0JDXlivJxM6ESwAJbimXOFAWSFxEtJ0ElRPWx1PJSNm=tivWOEYEb=YWtMQXlRAXts6ExRA=bRqESvmEx5mJbu0=lRD=YpUWYEUWbGx=tj1EYW0JS10JSGPJYJ0ESv1WYWQWxueWYJxWSw0ESMPW0sDWbRQ=YRP=OuqESpUJlEm=SR6EYs6=Y=1WxvYXS5m=Ys0Jlu0=O5UEYEY=SHmJxu0WYM/=YsDJbwxXlWPWbpvWtWx=S5YExGAW0uA=bNvEYWPEOwqWxvvWYj1WYEvEtM6=bNYJxv1=bFq=OG/ESse=Sw0=S=Y=tpU=b5bXtiY=b5UWOMe=bRQW0jUXSUUWbR6=tW/=Ow/ElsPEbwQXSu/WO5bW0R6=tsA=bs/=OGDJxR0EOp1XSsQWxWDXlMDESG6Jbp1WbRQElWPJSG0Wb5bExH1E0WPE0=Y=bG6WxUm=bsq=bux=tp1JliY=bE1Wl=mXORPXluA=lWDESivExsqEbJAEOJ0EOJqXS10WSv1Xli1=bNmESvUWYJqWbNmWOsD=bsqEtuA=YiYXlu6EbWqWxWPWOsqJYWA=SRqJbW6Jxs/J0M0=S10E0W0WOwxWOsDXliUWbueWb=YWSNmEbRQEtEvJxseExu0EtibJSvmESpvWlMPXSR/=YRQWOJ0EtjbWbNmJSU1JSFQXtRPXSFPExNvJSpbWbJ6JxwqXSEbWxseE0jv=lMxWtjUXljbWSimXSjm=Oi1WxRAEOGxWxJxWbJAEtpU=SiU=bJAE0s/EtRx=SRQWSFAXtjmExpmXtuAWY=b=YNYEOpvElM6EOuxWlRQJSEvW0WQXtibJSsxWlR/W0JeXlp1WOwqEbJQElsP=bpUElEY=bw0JlJ0=Ow6=OFAJbu0=O=v=bW6ESweWbwxWOjm=OF6EO5mJYuQWbF6Jlp1Else=luQESjY=YuxEYj1WlM/XtJq=bMPJxMA=bpYE0uQJb1AJxiv=lNbEYib=bFeJSWQESwAWtNbXtRQESG/=lWeWxFDElMqJbWPXl=vXl=mWbFqJ0WDXOpU=YNYEbF/=Suq=bsQ=YjmElR6J0=mWS=Y=lJx=OWDWSJDExim=lib=ls/EYuPESuPJ0M6JlWP=bRQJYWqWO1qJluQEbivEbGAJluqEYR6Jbs0WY=UXS=bJbWQWxM6=OH1WxW6=tR0WSHvWxjbEOM6EtM6EYMPJbuQXtRQJbib=YuAESWeJS1PEtMDEtEUJlWeXtjYJ0jYWxNYXSGqWSRDWxW0=OimXS16WbW/W0R/=YJe=YsQ=YMPEtE1JlJQW0jbJbJx=SJPWlEvXOU1XONmJlivXSGqJlRxWS=YE0RqXSW6JxFQ=luDElivJS5YWbpv=luDXOJqJSwAXtWAElpY=YWPE0pmJxRxWbuxJl=vXlRxWONvWb5UXlMeEb=YXOs0=OUYWxs0EONUJxEUJxwx=SMxJxFQWtRA=b=bEx=bWtpmE0JD=OM0WlWQJbwPElsQJbM/=O5UXS=Y=OuQW0ux=lM6WxF0JlNvXONY=YsDXSEUEYN1JYMAWlpmEbR/=OWeWbJQWbvb=bEbEYjmEYjbWxv1ElRe=OsqJb1/JSGPXtp1WS10EOpYJSJDXSpmJlMe=tWDXOR6WbEUE0EYJliYEYW/XlWxXSEYEYsqXOuDESEmJYseWlNUWSjY=lR0WYpvJbvmJSw6E0JPXSvmEOimWxFD=lWAJ0R/=lj1ElEm=O16WlJxEOsxEYN1=YRx=lR6ElJAJbGQ=bUUEYs/=bj1JSi1EOvmEljbEYEbESWxXlWxWtibXtsAEOG0EtueWYEYJbJP=bJe=SjvWSweEOFQ=OEU=YiUJS=mESjU=lsxXtJQWx5Y=lRPEOJ/EOF0EYueWOiUES1A=bEbXORxXl=mJbWP=lReW0jUEOseESNbESH1JlueWOWx=SUmWtNYEOR6XSMP=O1q=tRqWtjU=OseJ0jb=Ss0XS=YWxs/JSv1EOHb=tRPWbw0JSH1Jb=bWOi1=lM0XSGDEYEbEOjmXtue=OM0=S5mEbG0=liYJbWqWYEYJxNYJbJAWbRQWYsxWSsAESwqWb1DWtJDWbFQEOu/XtM6=YW6=YR0ESM/ElR6XSW/=SJA=livXOWxXl=1WlMQ=lRAWbNbEOj1WbwDESUYJSGeWlueEOJe=timExG6XSim=bwAWxEUWtNv=Ow/ESJ/J0J6JxMDWS=UJxseEbRqEbEbEtEvWx1D=YuPEbs/XOJq=b16EOMx=b=vJxwqEYueXSseXORqXtJQ=bWPExJQEOJP=tuqJYiYXlN1=bG0Jxuq=lsAWOHmEbvmWts/=bWe=YjmWSvb=YMxJl=mXOpUXtM0EYR6=bRDWbpUW0uAWbNYJbUYEYseWSJqEl=vE0M6WYiUWtivEbJqJxEm=bu/EYs6JS1eWOFe=SuQESMQEtW0=YE1J0JqXtM0EbjmWOWeExMDElNvJbueWSJP=bUmXtWQEbF0JlRDE0RqXSWxW0ivJb5mJ0WxJlMeElW0JSjY=tWPXO16EOu0WbGP=OHUJSWxWxJqExEv=tu0JSGPWxGQ=lMQWxsAJYi1JYue=Ou6ElWeXOuQWbHU=O16EOGxWSRAJlu6Wb1xJSG0EYRQJxN1=lR0WORDEx5Y=YsA=lpbJYJ/JbWxWtWq=l=UXlseJSW0XlRDJxWDJlEU=bJ6=bGDWx=bJxwe=tNb=YWeWlimWxu0XSuD=t=vEtRQEb1xWxuxEYNbJS1QWYM/=bwDWSuqEx=YXtMA=YuqJbi1=S5YWluPJluDJSF6WOG/ESFDEYibJxuDW0=YE0jv=bW/XtRqXORPXSMP=tuPWxFQ=YRPEtMQ=OJDWSvY=b=vExsDJxvUElNbWbFPXSGxJxF0=bHmJxN1JlRDEYuqJxjmJY=b=bpmXSw0W0M6=lpvExpYWxR6JlueWOMDWYJAJY=mJx1xElWAESMQWO51WO1e=bW/WxFAWxJAEb=1XSsqExu/E0WQWlNYEt=YExE1WtRqEluxJxNUXS1x=OpvJxuQElsQ=bMAWbw6=OJxWOu6JxuP=SN1=lpYJSW6W0u0WO=YEb=mEYWP=S5bJS=mEO5mEbR0XOibEbsA=bwx=tivWbwD=tJPEtuA=OsxEbw/EtEYWYWeXON1=tiUExM6ESu/EOW0JSMQ=tWAWbGQ=OR0EbUm=b1xXSM/EOpYEbR6WtJAJxMxWbGxWxNUJx1D=bWDJY=m=OWeElJ6XSsAXOsqESvmJSRx=bF0EYNmXt=vWSu/EbM0XOEm=libWSuPJbReW0imEtRAEO=mE0iUJxNYXtuD=b=1XSNvJb5YEORxJS1PWlJxEYj1WOJDEx=bESwqExNYWx1qXSE1ExWQJYWQXtjU=bUv=Os0=bR/ESJqWxj1Jbjb=O=Y=tpbEYjYXlEmWOW6Eb=YEOWPEO1DWtMq=tWe=SHU=tJ0Ex1/ExweXSM6WxMQWx5bW0RxJx5UWOHvXSJ/E0M0WSJqJljYWtRPEOuxEtR/EYpbWYWQ=tEv=lRQWOJxWxF/XSJQJYR0XlWxWxF/WOwPE0sDXSpvEbHmElWQWbGP=SU1JbW0WbRPWSvv=YivWSNUW0EvXSRPWlpUXSR0ElRQ=SWA=tiUWt=UWSs6J0M0ExuDWOpmEOwPWbFeWb=bXtM0WYpvJxEv=tWeWlNb=OFDXOEvXO=bXSjUWbue=YJDWYJPJSU1=bN1=bR0EbsQWtNYXOR0JS1QWb5vJxUUXSHUEOu0JxRx=bvYEbRqJbH1WxFDWxUYJxs6WSu6EOMD=bux=Op1JSsPWxJeJbvUWxFqWlu0=SHYJSJeEbwPWxF/WSuQWb=mESu6ExjmE0WP=lNmWxuD=bjYWtpbJSsAWxJqWSGP=l=bWOsxJbvY=bUvWYjYWxu6XSw6Wxvm=b10JSEmWxMqWYMA=lEbW0ivXSEYEtJ0JSJxXlu6J0=v=YR0JYMQJlW/=bsA=OJqWOuPJSwDJxW0WS16JSW/=luPXSW/Jbw6=bNUJxWAEOu6EOF0=SW6EO1PExWeWOueElJDJSNYJYiUWbFe=YpYEbH1WSNmXlN1EYRqEOpYEbpU=bvUESi1WS=bElE1WtJQ=tMeXlWDWOu/ExEmXSpvJlEmEbW0EO1xXSuxWSUbXSEbXSsDWO16ESHY=lu6XOJqESi1JSsDWS=mEYsqWSRAXSFx=SJQ=lNmXSM/JSRqJx=bXSR0=tuqEbjYEOuPJlJ/JSFxWSjYWOjYW0pm=lRAJx=vJ0u6=tJAEOUbE0NUXOW/WluDESimWbFq=bEUWS1q=OW/ES5YXOpm=SRqW0WxEbuQESpU=SMP=SpmWb=1WbueXtsPWx1/EbNvEtMeEtRQ=tJ0=SHv=OH1Exv1=bFxWxp1J0uDJxuPExW6=SUYExJ/JSpYEtJPEtRDWtsDJbUbEOEUEO5UJl=vEbsPJYjv=SRQWtR0WlEmXSH1JYjvWtW/=Ss0ElRA=tWeJxW6WSpUXSvUWtj1=lMxXO1DEOUmWOEmJxJeWxW0WYJqWO10XtR/=SFeWxv1=YR/Ets/JxRqWYR0WSR0ESjbExGxWSFxEljbXOEUJbU1El=YXOEYEOpb=tMP=S51EOsxWOH1Wbu0XOGxEtWPE0j1JYpvJxRxWxsQExNbEORqJlpv=SW6Wx=UXtu/EtReXlWeWxv1ElMeEbMPXtuD=bWx=Yj1ESGAExUY=YJDW0MxEOibWtJqWlEvWOJAE0R/=lWQEtR/JxvYE0ivWOWqEOuQEOwqWYM/=OJAJSw0WtMPJbG/WtJPExjUEtEUExuQJ0u6WOWQJxMPEYuAWbWx=tJ6J0RQWYNmWS1DESUYElW0=bF6=bseJx=m=SWPWlM6Jxu0JlM/EtNUXOs0WYMxXOuqJ0JQJS1qEbEYJbFxJbG0ESRPXtWeJxF0JxsQWb1/XOFQEts/Jx1eWSsQEYsq=O1QWOMDESWqWxG6ElW6Xl=b=OueWOG0WbuQESwx=bEb=tJxWxWPEbFqJSWQElpUJYJxJYM0EYuxWl=UWOuQWSH1=bRQJYNbJSuDEbuD=bFP=bJPJYuAWb1QWSJDJbvbES10WbFxJYjvEbNb=bNvJbM0JbuPWO1eJlEUJbJAWS1q=tuAESs0JxJxJlM/XSM0EYj1WSw/J0EvXSNmJSFxWbjUXSMeWYW6WbpbWbGPEtJxXOFPXSU1=tRPXlE1JlMqElWAWOsD=YMeXOvUJlWDEb1qEOueXOGeWOEb=ORAWbMqEOuPW0R/JbE1ESGPE0jUW0sPESsA=tpvXOW/WSFPWb=1WxFPWOuxJxRDJ0W6XlEYW0MA=lJ0=SM/EtW/=YjbEOuq=tJ0=bGe=bNUE0JAWtjUJbGeWSR6JxEmJlj1=OFAXluP=OEUJSvYW0EvEbi1E0JqJSR/JbW0W0=mWx1PWbM6EOUmW0W/JbFQXtsDJSw/JbEYESR6W0WQ=YjbJluQESi1WxUm=Sw/WxJAEb1DElMDWSwxESUYJxjUJYjYESu0ESvUE0=bWxu6EOu/=YW0=ONYJxFA=b1QJxiYESGeJSjUWOGqJS=UExWDEx1e=tu6XSUmWSJ6WOF0=tJQExiUEOwxJSUUXOFA=YW/JbJ/J0MeEbwQWOU1WOEmJxJq=bFAWlMQ=SJqJlJDWbG/JSGAE0J/=Yi1WOFPJxJ0=S16W0uD=lW/JSJ6JYMqJbjv=luqJxFq=ls/Ex=mWYuqWbMDWYJeJSuxWS1AXSu6W0EbXOwAESs0WSEbWxJAXS1qWYEbJbEmEbiUJS1q=bpmEbWqElWq=tsxWtMqJYJAEYW0ESEmWtj1W0sPXS=m=S1xXlM/ESWD=bNm=ts/=SEU=SUbJxpUWbGDXSw/ExWAElRqWlEvWtRAWO=1WSHbExw0Exs/WYJqXOHvWxim=YNmEO1QJxJqEOu6=YJqExs0ExGPJ0WeESsPESUvWxNYJl=YXSpYJYWPXSG0=S16JS5UESsqWOEYEYRqXtMAWSw6XtEvElMe=OW6Jls/JbsxXl=1WOFPEO51ExjYWSvUJlJxEYWeXSs0=SEvJxFeWbUYWtWQJ0JAJSJ6ESiU=liYJYN1Eb51J0sQXluQ=bEmE0RDXtN1ESi1WlJD=YNUJb=U=OsxWxwP=OHUJlWx=SpbEOFDW0s6Jx1eEbs/WximJSMQEYEbE0sPXONUExivWSu6WSvvEtW6JSG0WbUYJxHmW0JAXtiYXlueE0=mWximExue=b16WSG/EYjU=buD=SWqWbM0Wtpv=OimEO1/=lEvJbWxXOvvWxiUJxpvEbNYWbHvXO1q=bjvXlpYW0M0ESWPW0RxEO1/Ebsx=SGAEO=1EOvYEbu/EYsAWxsDWxR0JSRQ=SR6XlMqJbNmE0MPJSv1JS51EOR/WOMD=SwAE0WDJ0pbWx16JxJAWbJ/=libElJeJlJxEtseJ0jUEbWxWbFPXlMeExuq=OHv=bJxJ0M/E0sqEOvv=OvbEOHmWO51WxRDWlu6Ebsx=lJ6JlseWxGQ=tWQJx5Y=lMqEluxJ0WeJbJe=ts6EtEUJxjUJSwPWYW/XSi1XOG6ESWQWbRDXtWPExRDJYMD=S=YWSNYXSFeXSJAWl=YXlMDJ0pbWluq=tEvEtN1XSwQ=bRDESi1XSRPWSMxJbUY=SNvXl=v=OU1XlRAWlWAWxJqESFQWxJxJxHv=tEbJbRAE0N1XlE1JYjvEYu0WOR/EOwD=YsxW0seJbNvEtR0JxW0WYNYExHmEbRAJlMQEOW/ESRx=Oi1=YuQElWQEOwDEbMeWxNUXSs6E0EY=bJxJxuAEOivWOwDEYR/WxHbWS1e=SwQWbM0XlueJxHvEbMA=OvvWYRqWbGxXtsDJSJqEOUUEbGeWl=UJlEmWx1/WbJ0WlEm=ONUJSwPJ0RPEYWQJ0RqEbuqXSsA=OFQEtNvEx16EbJPEOHYXOJeXlMP=OpUWSEbWYMPXlseWSMAEbuD=SMAWYEvElW/Ebu0ElJqXSHY=bpYXOF6ElJ/WO1eXSueESWAExWAXtJxExuPWOFPXOJ6WYibXlJAJbuxXtW/EtWAEt=Y=lM6=SFDEbGq=SWPXS1A=YJ/JbG0WSRD=Y=1EtJ0JYsAJlWAXOuQ=lM6Jl=bXt=1=OJ6XluPWOMP=S1Q=Yi1J0EmEOG/JbFeJbJ6WlMQWOvvWYu0EOFPEbG/ExM6EbjmJbJxWtu/ExWq=lMx=OJ6=OUYXO=m=tWPEYueXtJ/EOueEtRQWYpbJxjbWOFDEx=bWOu/XtWA=YNUWtsq=YMPJxWQXOGQJlWDWbuxW0=1WOs6=S5vEb=UW0ivElW/W0i1WOHU=Yu6JxFqWtMeExRxJYRPES16=b5mWlNYJxUvJlJPEtR6=tEvWluQEti1Eb=1JSjmWYMAEluAEYpYWYJDJYWDWSMeESHmWb1PWxuxWbiUWYRx=tR0=SW0WxvYWOH1JS1xEbEvWxGQEYEbXSGD=liYJb5vESsxWOp1=YEvJSMPESUU=SM0JxJqWbNYWbHmJl=mEluQESsDExvYEbWqESu0=Ow/ExMx=buQWOUbXOsDEOsqJSwP=Su6=SpUXOvYEtuxJYW0JxGx=tW0WtjY=Oib=SEmJlNbWxsDE0J6XSi1=SR6XtWDJYRxXlWQJbG6EtpYWYRDEOM6WbwQJ0iYWYNY=YW6ExjUW0ib=b5bJxE1ElMQEbRe=tJ/WYpU=SRxEYpYE0WqExvYXtRq=SiUWYjmElJ6E0EYE0jYWYR0EljmWSHbEO16WOJQWt=1WOw0=YRA=SJA=ti1ElReWYNUEYpmJbjY=YJ0Wxi1JbMDEbjm=bWQXSG6WSG6WSNYEtMQJlMPEbpvWSjvWxWQ=b1AEOFQEORqJS=bEOG/=b10ESsx=SGeJx1xEbUYJxsAWxEU=b5bWx=vWSimW0uQWximWSibJbHvJSW/XtJ0EtRP=bRq=tR0WtRxXliUJSGqWbpbXOweExWeESN1WlRQESMAESW/XtMQEOvvJluDJb1DE0MPWbNYWOMPWOjYXOMPJ0RqEtuxWYu0JxpvJxu0Jx=YJlRAEYimXS5UE0jUE0J/Xls/=SMeEtuQ=OiY=bRAWYMA=tR0WxjbXtJ0WYRQWOM6Jb16JbvbESWPJYs6Jxw6WxueXOM0=SibWSGDJx1QWOG0=tEvESpUWORDJSs6XOWPJbEm=bMQEbNv=OpUE0uq=SwPExM6EYMqW0MQJlWQJlR6WxpYEOJQJS1Q=YNmWY=m=l=1=bwPXtJqEbNUXO16=O1qJS1xEOR6EbJ0=tsAJbs0Exs0WtWxWtJ0=liY=bRxExGqWtsAESGqJSF/Wb1qESRQEOsxW0NmWxW/XtMqESRxESw6=Sw6JYuq=tib=SJ0EtM/=lRAWSUUJlM6JbMQXt=b=YJqESWq=bRPWYEbWxFQXtJ0ElRAXSGxWtEbEbHUXOvmEbivWbjmXOseWbMeEbu0WxW/EYibXtEU=tEv=SpvXSHb=S5vEtW6JxHmWYNbWO16WORDWOEbXOw0EOpmExp1J0s/EYpYWYWAEO=UJSR/W0=YEbjYElW/W0R/JYs0JSwQJYJP=OFPEtWxJbpvXluqWb1eE0JP=OJA=YuDXON1=Ys0WS=mJYs/JSwqJxs6J0=1=lJQWYRD=SJ6W0RAJSsqWxwPEx=YWbpYXtEmES=UESUmJbweXOjmJSpmJxMDXOimJbRe=tseEYsAJxFxJ0N1XSMqJlWPXOMQ=Su/=lu6=ORxJYJxESWAJYNbEb51=OHvEOG0JxGxWtpUWt=1=bGPJxG/WbEvEOJ6JYWDWxHU=OF6WxEYWxGDXlJQ=SFPWOuAXtEbEljvEtEYXSFDEOUUWxEYWljvXSueEOMxElRDJYjmJbGe=OEmEti1XlMQJYRq=b=vWOF6XOMqE0RPElsQJxJqEOUUJSNYJbJ6ES1PWONmXOvmExW/=bNUJbsD=lRxWYMeEbGDWbM6JbvYJbM0WSWxWxF6J0=1EYEbWtNYWbR0WxGqW0s0WljU=lM6ExNvWSwx=OWxEOvvE0MAXOG0JbUb=OWP=bU1EbweWS51XSJP=YNYWlNvWSHUExuqJbFAXOUvE0jbJSjb=ljmWbUvWOw0EtRxExMqXlMPElEUJxi1EO=vWluQ=SRD=bJAWbEvXls/EO5bEbWAJSsAJ0u6Jb5vEO5v=ljmElR/Xlp1J0R/EYpbEYNUWOvU=YuAWOMAWlu0XOGAWbsQ=OEYWYWxXSGAEOibXSs6=Ssx=bJA=SpmW0RA=lJ6JxEv=SWAXlu0=tW0XOJQXSNUWbwqWbuq=YRe=ORAElJDXOiYXO5YES1QXlMeElsqXOjv=Y=UWYMqJSE1WSGAJb51EtJ6WtRxWtNmWOEbJSwDJx1/EYp1Jx1/J0=1XOp1WOFqWbU1W0WPExG0JbGQ=Svv=Sw6Wb5vJlW6WbseWlJ6=tMPExjb=tJ/=YR0JxUUESW/XlJqEOwQExHY=SWDWS1qEbWQ=OuqEYW6EYJPExW/=lsPWS5UE0EY=S10WbjvJSiUJ0R/=bHbEONbJS1qW0s0WYseESRx=bNUXSR/JSG/=OMeWxNvEb1AElj1Ebu0=YJ6Jx51=SJ6XSRA=OJQXSMQElEmJYsQ=SNY=lJqJlR/=SUYXSs0ElRxXOR/EbM0WYEbJYNmWSUUE0=Y=OsQJxWPEORP=b10WxJP=SMAEb=1EtJ0EOJ/Jx=mW0uD=SGPWSJQ=S5YWOJPXSHvWbpm=Sj1JS1QWYMeJbRDJYu6Ex16XlM/JSUYWluPWSG6=OwqWSpbXOWqJxj1JSWP=bRq=tM0ExEmJxw6Exj1W0W/Xlu/WlE1Eb1DJSW6J0=vXlR0ElsP=OFDWxFAES1q=Su/JSu0JYReEOM6JlJ0=O1eWbMPWOibXOivEbwA=bHbJSMeXSW/XSw0=YEvEOiYXt=UXliYXSs/WS1QWSUUEbwD=tibJx=vWxWq=SUmWOMeEbHb=tuD=OseWbwQES=1=t=1WlRDWSvYXlW6=lNbWtueXOueEbGAWxvmWSMeXtj1JY=vWxGDWljmElEb=Y=b=Sjm=OFeJxRqEx1qWOweJbM/EbNUXtimWluAXSJAWxWe=OWDEtWQWOF0EbNUEOGDWYWQ=SGPWtJDXlWx=SFQJlWAJbseJlR/WxuqJSU1=bivWbw6JbJ/=S=YWOG0WYReWSM/WYu6El=YXliU=bFDEbReXtMAE0J/WSvmWO=bJbWeXlMeJ0=vXtN1WbRPEYJPWbHYEYjmJbUYJbw/=SpmJbRxWY=YJbG6WOJqEbJ/=OwqWxMAJYsPWYpvEbHUEx51JSUUXOHYXtMeJbFq=OjvExH1JbM/ESsDExRQJxvbWbM6XtN1JSJqJxvYWxMAEYEYXlJP=tpbEYW6=Y=YEbW6=ORxESib=YjvWO1qJl=mJlu6WbsA=b5bEbF0EONYJbimJx16=tWA=YMP=Ow6EOFQWb1/ExW/EtuqJSE1J0EvE0=vWOu6JSMDXtWAJSpYXOR6EYpmJxiYJxpmW0N1JlRAXSpUWxJAXS5UJlJ6WxHmWxFDEYsD=bwQESvYXSiY=bJAWSHUXtJ6=SsQEYsxJxR0=bWPXlj1WO=vEtRxWSMQXSuQJ0jvWSHUXtivW0ue=SJDEtJeEbU1=SpmJSW6ESM6WY=vXtN1EYuQXOsQJYuP=OpvEtJA=OFDEbsqWYR6XOvmESsxExw6=SJe=YRPWbsP=lJDXSvm=YEm=YibExF0J0pmWSv1XSReWtJAWls/=bwA=SueXtsxWYNU=b1/=SuPJlN1EtWxXSi1Jxw6Wbs6=lJP=SHvEYpYEbEYEbFQ=OGeWORQWxWeJbHUJluqXOs6XOwAEOuxJSseExEvWljm=lR0WOMqWSuP=lE1WSwP=SMq=Su6JYiUJ0=mJbM0EOMPExJ/WbwA=SwPXtJ/Wxvb=YWeJSwQ=SHmJSuAEtjbWSM6=OFPJxG0WljU=SUYJS1Q=SNbEO5mJbvv=lR/ESGqJxGD=lMAJbN1Ex=1WOwDJSsqEYM/E0s6ExweJSUb=OUYXtJAEbF6ES5vEljUJxUm=tR/EOwQJxHv=bRPElp1=tibEONvWljv=SWDEY=bEbGqWOW/WOw/=OM6=SHYWOw6XOWAWSwxJb=v=OGx=bR/EbEbWOwe=SJ/ExJ0EO5vWOJ0WxUm=S=b=bJqWYiYWtJqEb1qEbWQWOsPJSMA=SUvWt=Y=Yim=OueXtRQESF6J0MPWYjY=liUJ0MxES5mESvmES5Y=S=Y=lMP=OWqEOGeEOs/JS1PWlsqJY=UWbW0=ORqEOueW0WDESF0=YWA=Ov1WYsQ=bEY=lM6WlR/JSJQWxRxExM0Exv1XlJDESNv=SWxJxUvJYj1J0WD=YiYXOFAWbWqJYW0WlivESW/JSJQEYM0Ex5bWYNYJlpmEOW0Ex5mWYJP=OR/WlWqJxGeWxM6XSp1Wb5vWxWe=tuDXOMe=ts/Wb=vWxJ6=lsqWlJ6WYsAWS1P=ti1JbHYE0R/WSRPEOu0=SHvJbWQEbj1Wls0=Sw6=lsA=OJA=lJ/XtEU=bG0=bJx=lW6JlsQEx51EbWqXtRxW0i1=lEYWbiUWSvYJ0jb=SvvEbRDWYNYWtpvESJ0Xtu0WOGPWS16JxMAEx5YElM6=SM0XSReJ0sqJSU1JlEv=SNmExRqWlj1=bW/WxWD=bw0JxN1EYMPJxs6JSUUWxsxWOHb=l=1WYiUWlJ/WYseWbweJxMxWOjUEO1QXSFq=lW6JxwqWxGxExjbXSs6JxFQXljvExpYEYMAWxFeE0WDXtMD=Yp1=Ou0WtR0W0pvJYM0WO1AW0J0ExJxESvvW0i1JS1DEtiYW0RqWxs/=SwQWtJ6=OW6WSuPXtEvWYi1WlpvWbjmXSuqE0J6Jx=UEYsx=bj1EOEUWxMAJ0s0EOF6EbG6WbsAWlMQWSjm=O=vJSU1=OJQExEUJYivE0uAEbM/Wxu6EYs6WO=vWYj1Ex1eXtiUEOH1ESNYWlEm=tibXliUXtuDXtp1XOpbXOu6=bH1JbsA=YuxWt=vEtWD=SNbXOuQ=OR/WOjY=YNmXlueXOJeES5YWxGqXS5b=Su0=tRD=OFxJSN1JlRx=O=bESNUJlpYWxUvJxiv=SFeESWeWxGAXSRq=OWAESjvEYu/XtMDEYMQ=bjY=b5UJbjY=YMAJbvmXSs0JSF/=S5YEbse=OpbJlWAEliUESu0=SsQ=OJ0ESim=SFqEtpvEORQEbvvWbW0XSR0WtMqJx=1EbW/WbEYElJeWxF6ElRDElNbES=U=bwA=b1eWxRA=Su6JSweEbFeWOwPWliUEx1AExE1ESpUJYEUJbHY=Ssx=YJAWbU1EtiYJxNm=tueWxpYWYJDJbU1=tM0WOjbJlR0=SNmWl=UExNbXOReWS51Wtj1=bEvJbFeWbpmWSHUJxW6EYJ0WxJqW0JD=SU1=bHv=YNbXSRe=b1QXOuPXSwAJx1AEORe=SReXOi1XtNYWYEmWxGxEtM/WOsqW0uQXSMeJYjUESiY=YjYWSpvWbvUXOs/WtWA=YRPEbM6ExpUEYjmE0j1JxJeXOWPJSwxEOWAWxRDXlM0XtWDXOWAWtE1WlibXlpUJbuPJ0=YXOHvEtjb=YJ0EORPE0JxXOJxWtWPXOEbJY=UJYue=SJxWb=mXOpvE0uP=SFeJlE1ExHv=OWeJ0MqWO=1=tWQEbvbJb1qXSE1Elpv=OW0EYseJSsQJSu6=SM0ExFQEls0W0NmEOsP=bWQExFeWljvXtW0JbU1J0u/WO10XO1xWO10WtjmJSJq=tu0W0jY=luDWxEbExuqJYibEbwxJbWDEx1xJxW/EYs/WSwDJxR0JbWQEYN1ExH1Wbw0=OEv=Ov1=OUb=OWDJluPE0W0Jli1XSFPJlim=YRPXSwx=Yib=Ypm=SWPExpv=bHbWOw0JSjbXSJ/JbJq=bR/XtMPWxiUExRqEO10ExMe=tRPESuxJbEvJx1qJ0JD=bJ/Xt=1ESpvXtMxEO51J0WQ=tjbWOFQ=tMeWSpUJliYJlsQEbJP=OpUESjU=SFe=tueJ0=vEY=Y=OpvXtNvXSwQJb=UWtMDWbpYElNUWbR/=bi1EYR0ESiv=luAWbpYEbWDXl=mEbs0XSFxXOUbEljbXSR0Wt=1W0JAExRQExs/Wlu0XSMxJlJqJbG/WlE1ESwAWOUbWxFAWYu0=OM6XSF0EYjb=ORqJSM6ESHm=Y=b=SMDJbG0=SuQ=OFqXS51=tp1XOsDWxue=lM6EbNUWtWD=lMDXSsDEONbJYuDXlR/WxFeEbNbWl=YJYWqJbw/XSMxES=vJbuDExMAWOsAWSvUESGxXts6WxUvEtpUWOvb=bWQ=ljUXlJ6ESuPESR6XtMQ=OFxJYNbWOpmXOwqWSG6WxF/JYu6WbW0JbFPJYueXtEbWtp1WtRx=tpmXtNbXlJAJxsq=OHYXti1Xlu/=OpY=b1AJSsQESjU=bweWlsq=OMDEbux=tR6W0ReXOW6JxsPWtiYWxWeWb=U=lWqXO5YWSGP=lNU=bivWbHv=lEbEbwAXSFQWbs/WSv1XOH1EbvYJ0WAExvY=Yu/WtuxXtueEOseJ0N1WtWPJSivXSwA=YR6=OWeE0J/=bM/=S1xEbMPElpbEORPJSWeJS=YWOJAXS51WYpmEbRAJYWQJlM0XtjYWY=UWl=bESs/J0MDESH1=OpmExUbWbUbWO1/WbMA=OGQ=OsqWS=UXSFqE0RqExuAEbpmWxs6WtNbWSWP=lWxWOHmExH1XSjYEtWxWYNU=YWe=tpbWYjm=O10JxpUJbFAWtWDXOF/ExpY=lJeXt=1WxJAJlMQ=OjY=SseJSs/XtR0ExMqEt=bWO5bJlEvExsxWbs6J0W0JbG/JbW0=OpvJbUm=S51E0RqXSJ/XSGeXOp1ESHbXlWq=YMeJxvbJSFqEO1Q=OMA=SpYWxwPWtJ/=OsAExGeESR/=tsAEOJAWOUm=lW6ESGDWxGeWxE1ESvvWxUvJSFDJSR0EOwqE0Nm=bR6Jx1PWluqWxM6WbNYXSJqJxWDEOM0ElMD=lseXli1=b=1XtMA=YJqWOGPWlsq=SF6=YuDXSWQElRxWbu/EbMeESFqW0WxJl=bEOjvWOwAXSE1WY=UWYuD=YMeXOUmEYJPXOEYExwqWSWA=lsxJSv1EbsqExsQWbWQW0Mx=SUYXSp1ESNbExFAElueJbEUWbu/WxFAExMD=tRqWYEYESWDJbRqWSJ0W0iUJ0jbW0p1EYNUJxF0W0p1EluAJSp1Jls6J0seXtWeXl=YJYJeWOMeE0WPJYJeEtRxWSNv=tsA=SReXSsDJYJ/WOJeJYWxESp1=OsQJ0jUES5bWxRqJbs6WYJDEx=vWSsPJxEmJSUm=tpbWxGQWbNYXOEU=lRDJYpb=lRQEY=YJbvU=buQWxpU=lsxEbEmEbG/EOw/EbGDElR/JbW0JYReE0W/XOs/JxHm=bW/ExsAWlW6Jx1/Et=mE0NvJ0s0Jbs0XOJPJSNbES1DXON1=YRqXOF/JSwAJ0pYXlsDJ0uDE0W0JbFDEOMAJ0NbWb5YWYN1WxWeEYiY=O=Y=tWxEO=YW0jvJbEUXtJqJYu6WbvY=OJAXOJe=bWDJlN1WlpYXOJqXtWPExjYWOJeXOUmE0pbElp1=YJqEYpvXOjUElR/WtsQExuA=bMQExHUJ0=1WSGQEO1PWOU1EtJDWSue=tu6=liv=bHv=OuA=SuQJ0RAEbGAXOM0=SF6XSF/JbHUJYWPJlEUE0=v=OuAJS=mJYMeEtib=SjUExj1=bGqEOiUXO51JYiYEO1AXOUbXlEUJSM/Wx1QEtimESN1JbFPE0u6JxiYEOGQJSjmJYEm=SuDWSWAEOF/XSsxE0EvJYJQW0i1EbRqJbuxXtu0=livEb1/WSEb=tNvXOJPWOWPJSw0=YNYEY=vJxJ6XOEbXSiYWS1QJxJ/WbNbJbWDWYse=lW6WONvEtRAXSMeWO10Xlj1JlWD=bG6WSjvJximEbW6=lu0=SuDWOv1=SN1XS1eEbjYEx1xWOUbJlu0ElEm=SR0WO=vEbpmJxsA=bE1ExiUJYimXOJPExu6XOWPEOpYXOvvJluxJxwxWliYJxuxW0=vEYuxWOwxEbuqEO=v=SHUWlReExs/W0se=b5Y=bimW0WQExuAESJ0=Ow/WlpvXOM0JbHYJ0sDWt=1EYWeWSUYWx5bJbG0=SMqJxHbEbwDW0JPJbEYJ0JxWYu/W0MAESReEtsPJxu6=SF/ElsqEOM0XtJQ=Yi1=OuqWS1QExRPJlJP=Op1ExJe=SHU=YReElRq=SRQ=bj1WxEbXtuDXluAJYiUXSNYWtuqWxv1JbG6ExU1XOvvWx5b=YJqEtWQJSH1WS=mWO=b=tM/EliYXl=bW0WeElMAJ0MQ=YM6Wtj1WOMeJlW0XSR6EO1eWbu/XOJDEOu/=bWeWYM6E0=vWbwAJSuAExvbXSMAXSNbJ0RAJxNUXlWPJ0JAWS1/WOJDWtsDWSGxXtueEO=bJ0W/XlNbExEbEtN1XlWeJxwDEOWeXlMx=bUUJYWAXOMQWtRQXSu/=bM/Wtu/=S1eWtJ0EbM6J0JAJbpUElRq=tuqEOjYWbGAWtRqWOJqJxj1EOG/XSW/WlW/WtW/J0JeExp1EtW6WbRPXtue=bivExs/JSuAWY=1JxvUWOEbJbiUJxuqWOse=ONUEbv1EliUJSFAWSu6XlWDJYuD=S5v=lsAESpvEOw6JlWeWSReWSuqJSJ0Ex16WYWeXOjYJlsPWxF/ESs6EYiU=tJ0XOsxEbM6Elu/WbuDESHmWO5bEtEvEbJDESWeWO5vWS5U=bu/JYjmW0J0XSHmEbUUWtJAEtiYWSjUW0=bW0=vWlWxXSuQJYReJSGAElNvJYpbXOM6=OMAXtpv=b1/WOMQWxWqESWAWlsqExw0WOR/WbWDWxWqEbFAJxR6=SW0ES1PEYNmEtRqWYNmEOJxEOJ/WYsD=OFxJYu/=SUUEOjvEtRQXtiYES1eWO5m=SJ/ElW6ESsAJxsqWli1XtRQXSW6JSGAE0J0WSWDEljUWlWxExRD=OueWlu6Wx1DWtNbEO1DJbibJlibEOR6XOMAESMAEbR6JxEYWOUmXtjYJbHvJlE1JSEvXONUJxEY=OHmExMDJbHYXlJ6WSUYESReWbsxWl=mEx5vJYsPWxW6Ebs6WOiYWx5YEbGPWOjUJSGAJljUXlJD=ORQEbWPWtpmEximWtuq=YEY=YiUWbj1EtWQJSGDWtjvJbW6EbUYESU1WbM6=YuqEOib=SUvWtp1WtEmXS=UElM6XtEYEYM0Wlib=ljbEtpvWx1eESHvXSReW0p1JxsxExMqXlJ6WtjYExWPJb=bWSGDExHb=SUUJxGAWbUbXlpbExsDJxs/JbRP=YWAJSuAJYJD=lpY=S5mWlJQESE1WbEb=ORxWx=UEbse=SH1J0iU=tuxXti1Ex1xWbRxJx5b=YibJYR/WbibEtiUWxsx=YW/JYEmEbJDEtJ/Jxwe=OM/WSw0=bWPJx16JxJ6WORA=lEmXlR0WSJDEbp1WOwx=lR6XtNmXSweJxGQ=Ouq=OFxWxHYJbvbEbWQ=SNbESsDEOFQESjYWbE1=tjU=O1eXtNvWSuPWSJxJSu/WYib=tWD=lReXOu6WbGDEl=vWOMPWSMPJS1PJxG6E0uxWlJAJls/JbFxWYM6ExuQJbFAWYi1J0NY=lpvJSvYWtsDXtJqXOuQJlMDXOsPWSu6XSimJlMqESsAXSuqWbw/Jb5m=YNbJbW6=bUm=bW0EOsQ=OGeJYseXSvbW0Mq=O=1E0WDXlsDJ0sP=OsxJbRPWxue=Su6=lJQJbjmWxU1Jxu6WOHmES=bE0i1EtMeWS5vXSweESJP=ljYWbW0WbvYEOj1=SivEOEbJlW6XSwe=lJ0WYsqJbEbJ0ivEb1DJ0iYWSG0=bF6JlWDEtsQExvmJlR/=YRDWORDESs6=bU1JYpYJ0j1=tN1=tM6XOWx=S=YWSwAWts0ExWeXSF/=ti1W0WPXS10ESGeEYNYWOF0XtRQJ0JPXO1AEYM/JYMeExFD=SMqWx=UWSGeW0uxWSFAWtWxXSp1ElMDJls0W0R/J0s/WSWxJSuPEtWqWlsx=bR0Wlu6=tR/JbG6=S=bXlR0WOs/JbMPExpU=bGeWYu0JxsqJYsAWbW6=lNU=OuDJbwQEx10=bM/WbWA=bF/WxG6ElRqESGqWlWqEtW0W0J6=ls0ESNbJxE1JSWAW0R0WlR6WxjUWlJeWOMQJSMq=S51JbU1=SE1XtivWO1PEYWQ=OwQ=tR6XtNvJlpU=bJxJxG/=tJqW0iUWOjYJ0JQXOs/EO5vJ0M6JxR/J0M6XSNYWOp1ElNUWbEmWxuDExsPE0jUEYNUWYEUJljYWlW/Xtue=S=bJxEbWOR/EOHbESW0JbF/Xl=bXlM0JlRAEbMDWtMeJbMAEbGPJYWAJbH1WtMDESFx=OUYE0JQWSJQ=bJe=bUvWtse=SwxWbJ6Wtu6EYMqXtuPJSu6EbM0Ebw/=YsQE0R/=SGDJSs/WOvUWbWQExuA=tJ/EOF0=tE1EOsD=SR6EtMPWtuPEOvvEtWeJYM6WtMAElRAXOW6EtiUWxR6=SueWSJDESwPJxJ6EOvYWbF0XOsAJbUvW0J/XS=UWlWx=Ys/EOEbJbUvWx10WOvYXlNbWOseXlRA=OwPWbjvJS1eJlWQJ0imJbvm=S=bJSEmJSJAWbNmEYiYEbG6JlEvWSiU=bv1WbJ/XSW6JSFq=SRq=tiUWtJDWSNYJlMAWxG0=ONbEljbXO10WOW0WSiUWOUUXlu/EbRAW0MeWYNvEb=bJ0R/EOpbJYWPExi1W0JDJSReW0MPWbwDEtjvW0u6XSN1=bFPExwxXOWqWSEbXOuAWtR0XtibEb5UEOW/ElNvXSuPXOUvEt=bElEvJx=UJlJPXlW6WS5bJSNb=tJx=lJ/WlEbJl=YJSRDWOR/ElEY=bvb=YRxJ0jYElWe=Ou6XOWQWS1xXlsAWY=UXlsPWYj1EtNb=OuPWxuxJbFPWb=bJSwPW0MqJYu6=liYEOpvJxGPEYJ6WOU1EOvYExwDJSs/JxJ/WYE1EOjYE0=mEtMQ=lu/JlWqW0j1W0jm=SJxWxM/JlpvJbEmJxUUJYJ/XOMqW0sQWbJP=OsDJlMxElEYWO1e=Yu6XOueEx1qW0jYJSJeExv1=bGQWSiv=YMqWOFQE0WeExs6J0MxWxpv=SJQEbuQEbRe=Os6WSU1Jbs6XSW0JluqEY=bJlueWbu6XORQESH1WOEmWbj1WOFe=YReXSWeJxweWS5mExWDExvvWb5bWtJAWORAWOpYWSw6EbW/ESMDJYjY=lNm=SR0ES1/ExR/=Y=b=tW6EbR0=luDEx1AEOjm=YRxWYsAEYRxEbueJYivEtRAWSv1ElpmEbUvJ0NYExW/EOsQ=ljb=bMq=lJ/WYp1WOFA=tEbEYWPXlpvJxUYE0=UWYsDWbRe=SJ0=OvUJSsPWY=YWSjUXO5b=bUbWSUvExJA=OwPExMeXSHmWORP=SuP=S=YE0ibJSNmESF6=SvvWYWqEb51JbwQ=SG6E0MPJxu0ElEUJbwQ=bw0JbpYJYi1XlR0=bF/XOw0=b5YExiU=bHUXluD=Sw/EORxJYMDE0MqE0uxXOv1ESs6XOGAWbFeWbMQEtu0WO1/JYJ/WORPJ0=mWbs0XON1WOuxJlEYWYM0WSG/ESHUESsqXlR6Exw/XlMxWlW/XSFeWxW/EYu6EbJqWOseJSF0JYNYJxF0=ONmElEUXt=UJlWxEbwQExwxEbWqJYNm=S1e=YpUJYj1EYjvEOHYE0EYJSJeEt=YE0EUJx5m=lW6WbRxWOMAElEUWSu6=YJ0Wxs0XlJ0WxwPE0M/XSuAXSN1Wx1qWYu6XSRA=bv1Jb5UXSJe=Ys/WOEUEbHbJlRqW0u0=tjYEON1JbJ/EOEvESsPXSMDWYuDJSGDE0jm=Os0WtEbEbWDXSNYEOjbWbU1Wb1DES1QE0M0=Yue=S=b=bjm=SpYEbvYJxWeE0WQW0JD=li1EYW0WYW/WlivJbRqXSM6=tEvEbiv=O1Q=YJQJSsqXSWAE0JqXSJqExF0WxUvJxJx=lM6Etu0WYRDXS=Y=bWAXtJ6=OR6ESW/ElWD=YivEb5vWSJDWbR0EbvYJbwq=tEUJxR/XlMqEtpYWSM6XSWDJxHm=O1x=YMDJlJqWb1PWlp1J0NmJbwPJxi1WSs6XSMeJxvUJbU1W0MeWxp1=bvbWSGPEYRqEOM6Exw6=OWPWbMAWbJ6=lNY=tEU=lR0ExibXSFqEtsxXlpbJ0WQWtuQ=SW0EtsxJl=1Etj1EbvYEbwDXOvYEb=vExsAXSNUEb=bJb=YWOseXOjvEbNbWONvWbUU=SGAWYW0WYpbWSseWOJ6WOFQWOWDEbUmEtiUEtibJS1QJ0JD=lJ6=tpbJxFP=liv=Os/XS5mEbs6=bvYWYJ/Wx5vJxsq=SJeWOR/XlW6=tJQWlR/=OvmEYMD=bJeEbM0XSuA=SvbWtuDWYpbWS16WbFqXOG/WSE1WOGDEYR0=bEbJbs0XO=m=bR/=YNYXlpvWSFDEt=bElueESH1XtsAW0uAXSJQE0M/ExJ6J0W/XtM/=tpUXlJ6EYEYJls0XOs6XtMxXSWxWOUvJlW/WOvYWOueExFD=OwP=SFQJxWqWxJeJxueWSGeEYivXO1eWtNbWSjvEl=YJbsPWSHbWxFq=Yux=bW6JlMQWOWPWSiYWlM0=tNUJlim=lE1WtM6WOiUW0sQJlpY=YimJbpmWYReExjYJlueXljmJb=b=libEYsxEOHU=O1xWSpm=OGA=bF0=Si1WOwq=OiUEbRA=l=YXSWQXljY=tiYJ0uP=Ys0ES1PWSjYXtjUExueElJQXOW/ESJDEYMPWSR6J0=YWOMPWSW6=bWeJx5m=YNbEtEYW0RxJSHUJx=bEYJD=tR0=OuAJbNUW0MeJbw6E0WAE0MDXSu/=S1QEluqWbRxEOuAJlJ6XSwqJxuqXljYWS1qEtuDExwDWxEUEtJeJxNUWtim=YReEbuqWlimWYJ6ElRxWbWPE0pmWx1q=YJeXSRQWYE1=lJ0EOWeXO10JxGAESwQJbRA=timEtsAXlWeXO5m=O1q=tu0WYu0=YsDES=YXtRq=SuAE0sQ=SF6ElJxJ0EYJli1EOWxJ0ib=SHYWbG6EOwqWOUUWYMAXSWxWbibJbvv=tRPJbGDXSGeE0uAXOs/=Ow/WYjUJY=UXtivWxGxWOu6JbUbJbWQEbvY=lJxXOE1EOuQ=Y=vESFeJxseEx5mXljY=luPExsPWbFqESWqWlMP=ONvWtsQJbWD=b1AWSMq=b1AEbMQEOjb=OJqWOi1J0RxJbvU=S=b=OUmE0ib=bp1WSu6JYJxJbs0ES=b=lJPXSNU=tJ6JxJ0=tuD=S1QWSUmXSF0EOvm=OvUWbJDWSsxXSwxJlWxEYR6JlRe=bvUWti1Wx51=ONmJb1DJbpmWtWDEYJqWx5vJSi1XOpb=S1qExRxWt=YJxMqEx1QWbWDJlpm=tsPEO=UEYMxW0jvWSsqJSNvXSuP=bJPXSJeXli1=OJAWxuqWYsDW0uQEOGxE0RQXSvbWtRQJSpb=OGPWOJeEbuAEtR0JbjvXOGAEYWAEbw0=lpvESWDEb1qWxH1XOM6XSJDEOW/WORxEYsx=bF6WSF0ESR0XOGxWbF/EtE1=SMq=O16JYiUWbReESpYWtuqEbMQJ0W6XOFDEbGqXOjbEtR6=YpUWtMqEbjUJx=YElNYEtMq=l=1Eb1P=Opv=YsQ=O1AJS=1=SF0EbFDEbp1EtWPXtNvXSGxESM6Eb1e=bH1=OWDEbHv=SWDJluQESi1ExJ6Wb1xWt=YJbNUEtuDXOWx=OWAJS16WtM0WlJPJ0u6Wbux=bMQWSpb=bGD=lWA=SWxWb=1=timExwDESRP=YM/=liv=OR/EbpvJ0MP=tRD=bJ/ESNUWOG/XSMDJbHvWlJx=ONYWxpvXOuAWbpvWlpmWbU1XljbWSiYESw6JSpvESWe=Ss0XtRqJ0jvW0jmJlWPXOGqJYJAEYpYWls0XS1/=bH1WlNmEtseWOWD=bivEOu6=lRx=SU1XOu0WSibXOp1ElM6Xl=YE0W6JSJxXOj1JxH1WO1xEOu/EOGxJxGeWb51Ex1qElWx=SRAJb16WSEmE0MP=b5v=SWe=bivJSM0=SG0=SEUJ0iv=YRxJYjUES=Y=b1QEOwP=YsPWSuAW0W0JxW0Xtim=b51ExwQJbuxEOJ/=SUU=bNYXSj1Eb16WbEYElWqWxWxElR/=lRDESHbESGPXOMDWOJe=b1DEb=vJYJQWSUmJ0sxWOE1XlRPEtWxEb=mWOuAWOGQXSFxEbpY=OM6EORqJ0j1J0jvExGxXtpmJxpm=OEY=YpmJSGQJbs6JYJ0EximXli1WbFeE0=vXl=mJSuPWxWDWbGeXtRQWlEmEbibEYu0JxR0JYR6EYs6JxNvXOuPEbNm=OG0WxuQ=SuA=Ss0ElM6JSsAJSFxJbFx=SEvE0E1WbuAXSM0EtuqWSG6JluDJSFqExUb=bR6XOw6JbRe=YM6=S51WlEvJlJ0W0M6JYNvEYJqXlMDESH1WbwxJSsPWSsqWYu6Exu6=SJeElpbExJeEbMxJbsDJxuqXSRDJbsDJxpYXSsxWOGQ=lMeJYJQXOEYWtuDEbFPXOJ0JluQWt=1XSM0=SMx=Ou/=SEvXOuxWS=m=OU1ExFQWlM6=Os0XOvbXS5mElMDXlM/JYWAEtsQWtWeJlWA=SJ6Jb1e=bw/EbUm=bMD=S1AXSHb=YEmWS5UXtW/Ex5mXSWx=SWq=YEUE0MQExiYJYjbEbWeWbUYWtNbJSsP=SEUWbJQWtW0=SEvXO1QJxJPXS5UXSwAXOHUE0R6JxGDXOjYXSjvJ0ueE0u0=YiUEljmXlEYWSMe=YN1WYpvESMAWSRDWSHmJS1xXO10EOW0XlRqJlj1WSpmWbu6EluPWlEvExw/WYivJbUYXSEvWxJ0ES1AJxW6EtseJlNU=OGQWt=UEOWeJbH1=b=mWSWQEtWQWORPJSu6XSU1=OEvWlEU=OFQWxR0=bw0XSimJSWQXSuDEb=YXliU=SsxJxWPWxsD=SseE0sDWYj1WbsqW0j1XSGQ=YM6JxWe=YjvESsxJYW0EOuxEOp1WxJ/JYu0=O1DXSiUESJ/EYRDJx1PJbsQXSNUWYib=OF6WYueEx=mJYEvWS1PEY=1XlW/WSuA=SFPJYsxJYpmW0J/EbGQXtsPEbjbXtRPJx1AJx5bEtRQJYuQJli1JxwDEtWqElWe=bGDEls0=bJ0EOJPJSG6WbsPW0WeWSRqJlE1XOJAJlRDWlJPXSR/EbHbJxFAXSuxWxGqXlJ6WOvmExR/XSsxWbpUXtJeJbJ6JbsDEbjUWYivE0jbWxjUWSivXts0EOEmE0sqW0u/JlpUXO1/WluD=OWxXSFPWOHb=SH1EOMAWxwPJljbEbGDJS51JYRq=YJ0WtueESwD=SM6WtRDWtpYJxWeEbMP=OWAEtpm=tuxElWeEYs6Wbu0WYM0JxuAWxu0J0W0=OG/EbW6=Ou/Eb1DWOseWxF0WSR0XOvm=Ovb=OuQ=OG0WO1Q=OFxEbFqWb1eWlJq=S=vWYW0JbvmESpmWOUvJbuA=lJ/ExiYXO=1WxpvWOJPE0EYWYsAXlpYW0EbJbM6=SweJYN1=bF0EtNvJbjbWtiYXOpmWx=YJYs0EOvv=OG/EbFQJYjU=OWxWb16WSwAW0JQXtRQWxNYWxpYXlsQEliUXlWQJSUUJlW/WSM0XO1DE0J0WSwQ=bNvJbEYJYWxXtE1JbUbESRA=l=mJbimE0EUWxJ0JlMxWSim=tu0WxRDWONYEOW0Jbs0WSUm=tNUXOpvWbFqJbMAJYjYXtM/=b1QWOwxWlNb=bM0WOR6=ORAWxN1=bjU=bUmEtM/WbGqWSM6ExEU=OH1XlR6XtuPW0M6J0EmEO1AW0pYXOWDXOGQJSJDJxseXSw/WOj1EtWPElu/=tR0WlsxJYEUESEvJSJqWO1PXSwQWSw0JSNUJb1P=tNvJlibEOiYWOHYE0sAXORP=lRqWlRQEYuqWYpYXOG0EOuQJSJQXtp1WlMAXOMqEbEUWxv1=lJPEOFAWOEbES1/ExJ6=SpUEbFPEbJAESvvWlEbWO1QXOU1XOs/JSwDEOsQJx1QEOwPJxF6Ex1qJbibWS1e=YJ/JxWqESR6JxRDEtiU=O1QWY=vWx=mJS=bJ0MqJbMxEbvbJxp1=bFeXOUUJx=bJbw0Jb1qXlJ6WbNvWlWQ=OiUWSw6Wljv=t=UXSibEYWD=b1/WSNY=SMD=ONUJbiUEluxJx10E0iUEO5bXOFQJbwAXtRPWYibJb5U=bW/E0NmEbwqWtMe=bvUWxRx=tMDWSJQ=SMeElWQJYR/WYE1ES5mJSpv=S5UESW0WbHUEx=vWxw0XlJP=bMe=SNUWlEvXORAJSjmEYWAEYR0=tseWxE1ExUmExE1WSW0Jl=b=b1D=tNm=l=1Wlu0EY=1JYibWxw/=bJ0WO=bXtRDEx1PXSseExMDWO5UEYJxWOFPWOwxEtW/ESWeWlueJxpUJxUmXOJQEbG/Jxs/=bMqExs/WS1PJ0M6Wl=bEbFDEb=UJS1e=tJDWxReXSW0WO=UW0ivWlR0EY=1WO5UXSwPJxEmJxNU=SF6E0sx=ORQW0WA=bW0=OMeWxE1JxjmXOJPWbwxWOWx=t=mEOvYWS5bExGq=tWDXtuxE0jmWlMe=SpYWts0JxsxXtR0JxF/=bRAWxRA=SUYWSweJYMq=SwPXlJQWlMPW0M/JSu/XSM/EO5bJb10=Suq=tsAJxF/Ebv1E0WQJS=vJli1WlM/XS=1ES10EbRPJx1qWbFPXOimXO=mExvYXO1/=SW6WbGDEYu/WSF6XOUUXtJ0ExNYJYjbJxuDJbRDEtRAXlM0Wbs/WSM0=OEvE0Mx=ljbWxsqEbWA=SseWSMQJSwQJlNUJSsA=bRxXSHYEtjvEbEbJxMQXO5YJb10=tiUJximJbF/XlWA=SwQWxUmWS=bJSpbEYJQJ0=mJb1qEYReWSpmJbwQ=OuQEOueWS16WSUm=bJ0WbMeE0R6Wx51XSMP=lsD=bEUWSJDJ0uPWSH1EYivJxiUExFA=Ou6WlueElN1E0iUWlRq=O5vXOEvESJ/Wl=vXSGe=bEmEOHYExGAJSEY=bRx=tj1JlM6Jbwq=b1qWS1DJxwQ=Yu0E0ivWS=bWbUbElueJSs/ExWxXSpYXt=mJ0WP=bNb=OuPJl=UJSu6WlE1EbUYWlJeWOs6EOpb=YpmJS=vWxR/JxRqWxJ6J0WDWtsAJYJx=Os/Ebs6ExwQ=bW6=tMQXSsQElpbElu0JYRxWYimWSuAJbRPJxR6XOs/JxWPXOFqEtNU=SsPEbib=buDW0NvWOUY=bEUXSMPWYEbWYEUJYRx=lNYWO5mESib=SWQEYpYWls/Exue=SNb=Y=bEbMxXtRQWb5vEbJDWOseWbwAJbwqJbuA=S=1XtR0EtNvWts6Wx51WSim=O1D=SvvJ0i1Jxp1WYJPEOWPJSj1WxW0E0ibWx=vWxEvWlu/XSU1EtsDXSsPWOMeWljYXOv1=SF0JYMA=lMqEbW/XOGAWSG/EOivXO=U=tjmJ0JqEx16Jbu/WOUbElWA=luDXOwP=SJeW0uPEbvm=bMeJSw/XO1PWtNbWOjU=OWA=t=1XSiUWSMqWOHUEbGQESpmWOw0ES=1JbpY=SFDWliUWSuQ=b=YExF0WbUvEbNbElRDExF0=OHbXt=UEYJeJ0sQ=OJ/Jx1qXSs0WSGDJ0N1WOs/ExJDWbsAJxR0JSW6EtMqXSUU=bi1Ex1DEliY=SsDEO1QEOEvEOUY=OFAEOJAWxGQJbUYJYMPJ0uDEtsQWSHvXORq=Ou6WOsDJxUvXlRqWO5Y=O1PWSGP=lEUWxivExM6JSWQE0WDJlE1JxGA=lJDXOR/=Sv1WlsA=SFeW0uDEYNU=bjUEO51WxR/=OuqJ0iU=YJPXlM0EYMQWSNmXtMPWOJ0XtjUEbU1XtsD=tib=bEmElu6EYJ/=bMQEbEUExJ6JbFA=bM6=SNbExJAJbUYJ0MP=bwqEb1AJxRqJbF6E0JPEtM0=lJA=liUXSNv=lR/JxFDEbNbJYMeWYsDJYE1JbUb=bWeWOW0EOpvJlMeEb1PJbu/XSjmXtWqWtibJ0J/=SjbXOEm=O1DJbMPXOvbJbjYXOUmWSW/EYJQW0Mq=SNmEbM6=SjUJlu/XOsxESFPXtMPESwA=Yse=lMq=tWPElNb=S5v=OibW0RPExs/Wxp1WOib=SimEbWeW0R6XSwx=l=YEb5UWxwPE0uPWbs/=biYES5YJSWxWbWPWxW6JlJPESHm=YJqWlRqEx=mJYNUEYMeWbueEbpUWOvmJb1e=lMAW0RxXSu/WxRxJlEUESJe=Ys6WYJx=YEY=SFQWSJ/Jlu6XOjm=tRqWtJ0J0jbExNbWSs/WlMDWYuPEx1QEYNvEOH1JSvU=bvmElNmExU1EbsAEOUmEb5YE0WPJYRDJYMqXS=mXS1QES10=Sw/JxRA=OGAWxsD=bFPWO5vEO5b=YR6Els6JSFPWxF0=tueJSRxJS=1XSJAWtR0ElivJYR0WlEbJbJDWSibExR6WbEbWOW/WOHvWxRxE0i1=SsqXlpmESvmW0jm=bJqElibJxp1EYu6WOseJbueWxU1WONvES=mJxFeWbEYESEY=OGP=SG/Wtu/=OE1=buQ=Y=vWOsAEYMeEYJ/XOM0EOM/WtjUE0s6JS16=bJPWluQWbjUW0MeWOs6=luDJ0WAW0=YESWAJbw0WbUU=b10ElJ/ExGDJbG6Jbs6XtNUElWDEOR/XSs/EYuxJ0jmESGPWYu0XO=mJxwAXtW0W0=U=lWQWOvvExM/XSu0Jx1/Jxv1WYN1JSjbWOjb=lMqWOMQE0jYWbs/ESsDWOM/WlMP=ljmWbJeJb5m=OHYJ0uAWOw0ESWxWbW6E0RQ=tuqWbFqE0JxXOWxJls0JYpYES=vXOvUJSMDWlj1WONm=SGqJYRDJxFA=OwPEOjYExW6XONmWOM/WSGAXtueJYWeWSjvEbUvExFAEluPWYsx=bFqJbEvEtMAXljbEOu/EOFeWxwxEbueWSRPEYRqJ0sqWtpvWbReJSw/WtWAEYR/=ljU=tJ/WtMAE0WqESw0E0JeWO1PESsQWtWe=OMQXOJAXOs/EbMPJYMDXt=m=Yi1WtRAJxH1Xls/=Sp1JxUvEbF0Wx1/XSF6XO=vJlsq=Y=mElueXSJ/=lNvEOjvEbsPJS5UExEvEY=UEtpYJlpYEbRxJS1xWYEvJbE1=OWAWtRx=Y=YEtuPJYWqEOimWbWeJ0R6WSHY=SGQW0ibJxW0EOJQWbFDEYW0XSsDXOJ6=ljUJYJeJ0M0E0iUEbpYWtNYWxsAWlWxXSuqJxUYXO=bE0ivEOjU=tsxWtRPXSR/JbRPXSRQJljmWSwDEYNv=SjYJSFQWb51WYpbJYEmJYivWYjvWx1qXtsA=OR6=O=m=lMQWOwqWtMqWls6XtWDWxF0ExwxJx1eWtp1ExUUXtimWxwPEtWPWbueJYs6Jb1x=tNvW0JQExUmExFAEb5UXts0XSweXOMeJYWAExUbXtJ0EtRDJSWeJlW6JxFq=SwPWtNbWSW6ESMeJbwD=S16WxpUJSvUW0jbWS1DEOjbESJD=Y=m=bsx=SE1EOWDWOv1JYuQEOF6EORqElR/WOJDJxj1=OJqXO=m=tRx=bv1JSvb=bF/Ebjv=S=mJluqJ0uDExHvEYNbEliU=OGDWOu6JYJxWx=bJxR6E0WxEOG0W0R/EtsA=S5Y=SibXtE1XSiYWSMxEtueXS1qJ0im=bFAEYsQElJqXOFAXOv1=Os0Wbjv=OFDEtW6WOGDWYWPEOjb=SuqW0RDESNU=b=UWSEUXO1AWt=mXOJPWb1QElNUEluPJbiYW0Em=OUv=bRq=bWP=tjvWbJPWlNvXOReWbGeEOWx=bRD=lM/JYWqWbUYEOGxWSUbWxFPJ0NbWxMPElRxEOJqWOW6WbF6JxMxEb1eWbu6JSWAXtuQ=SR0Wts/WOpYW0MDJYsPJ0Nm=SW6WbMeWS1AWSNvExM6WOu/JlE1JbR/WYRqJSweWlpYWYJDEbvmESJQEYs6=SEUWSWPJxpYJSuPXtsQXlsqEO5YJYpU=SJQWxwqEYj1=bMAWS=1WSp1=Yim=luAEbsP=buqXtW/EbuQEOue=tWq=tiYJbM/XOweJYJqJxwqXSJDEbsQ=bpYWtjmE0E1EbHbXSpmWxEmJ0MDWS10Wxu0JljvEYRQJ0J0=lRDEluxXlMPXS5mEO1AEbG/WOsxWxUvJSjbESGeXSFxE0WQJbJDWO1x=Suq=O51Jx16WSF6WlsDJ0RQEx5Y=YMqXSF0WSvbJ0W/=SpUExu6WbMxElJQJ0pvJSGxJ0Rx=bMxXtjUXSvv=Spm=S=bWxM0=S5YWls0WtE1WYsqEO=b=SpbWSu6WbHb=SG6XlsqWYs6=tWQJxpbXliYJlR0=SJQWxRqWYW/WtJQJxsQWxpvWYpvESJxXtJPExGx=lsQ=tWQWtR0WtWxWOiY=SMqEtp1XOFeExUvWOsQJbEmEO1eJ0uQJSRQWxW/XtRQWxG/Xljb=bFDElJAXOjUEOMDXSMDEOvbJSReJSMQWxU1ESM/WlN1ElEmJx=bWbwDWb10WbNYWb=1JSMPXtueE0We=S1e=OHvW0WxWtsDE0uD=bReEOwQWSFe=lNbJxMA=bFDWSi1=lJDElE1E0MQWbs6EOpU=tEbXluQEtRxWOwDJximWxGQWlRAWYjvEluAEbwPEOHbE0NUXSwxJ0se=tJ0XOWAXOjY=tWPE0pmExRq=bJ/W0JeE0pv=bJ/EtWPWbWxXSsQExRQWxiv=SvbE0JPWbEvEO=YXO1D=biUWtEvJS1DEx5YJlWqEYpmWbJ/XSUUEbpmJbWeWl=YJxweESMPElu/Jbw/ExuDESjvEbvbJbu0XtR/JSsQ=Sw/WxN1XtpUEtjmWlpmXSG6Etp1W0JPWtimEYE1XOUY=OMx=bs6Et=vXS1QWSR0WYuA=lJ0WlsDXSFq=Ojm=lMqEYuP=lNY=OHbEY=UES=vEb10=YueEOG0Ex5v=SNYXOHmEbjY=Yu6XlpvXO5YE0uDJS=YElR/J0imJlEmJS1PEOvYJSsP=SpbWbN1=SpmEbJeJl=1ESRAJYiYXSG/=ljvJlu6WSs/XOMAJ0NUWYNbJbGxWbWQEYMPWOGeJbvbW0R0WOUU=OWe=Su6XOuxWbG/=SRAJYR0=YReEORQ=tu6WbiYEONbWSFqXS1qXS51XtJ/ExsqWbUUJbwqWtWeEOM0JYJ6JSRxWbGQEYRPEYJ0EximJS1eJSjmESG0WtNUEYJx=liUWtMAEtMA=buAESEmJSWxWlJ0EOEvEOHUExRqE0MAXSFeJbW6WOEbEtJxEYM6=lW0WSH1WxJeJSRxWbUUW0MD=tEvJSuQEOux=bG6WtJQEbHUEtsPWS1QJ0E1W0NmEOw6JlMqJlpUWYRqEOHUWlMe=bweJbJA=YsDE0sqXlNUJYJxJ0NbEOjbJxWQJYjbWlM/ExMQXOJ0ElimXSWqWxEbW0uAXljYEO5mXlu6=Ow6WSEm=SiUEYuA=SNY=SFAJlsDWxF0WSjvW0pUElReXSF/=b1Q=bu/JbJ0JSGDXlp1XOJAWOwD=bs0WxjYESG6Jxu6EONm=SimWSuqJ0W6EYMDEtjmWOuPJSJQWls6EOw/WSsxWOFAWtRQWxNv=OR6=YibESJD=SRP=tMPWS=vXS1qWlj1EOWqJxJAWSFe=bsQJYJ/=lReEbvvJ0MeEOiYJl=bWtEbEx10JxuqJbsPWx=mJSR6XOpUE0JAXOjvWbu0=YsQJx=bEYWxJx=vEtRxWxN1=OGQElseJSpUJSG0JYMqWYivXtM0JS=vEO1A=YW0JlNYE0pv=bWQEOpmJxs/WxuxJxJ/JSUYWS5m=bRQWtEYJYMAExvU=Ou6XOR6JSs/EbJ0EOWPESUbWOWxEbEYEtuQ=bWAXOR/JYRxJxp1EtReJSsq=O5m=Yp1E0R6WxFx=bJ0=SHUXtu/Wt=vXtuQXtj1=SNUEYJeWOpUXtJAEljmWlNb=OUUWSwAWSEv=SiYJbHb=SsAWbvvEYJ6E0J/=biY=bweJ0NYJxjvWlEvXS=bJSwqWbNYExsQJxsQ=OsPXtWPWSsPWxiYWOuQ=bMDWSvbJxNYJb1Q=bjUJbuPEYW0XtWDEx5bWxiYWbW/=OEYWOJ6=O10=SWDJ0j1EbsxWlNYJx=mE0RQJbsx=bu0ExJ/Jl=bXlN1WOF0=SsAXOsAJbJPElWeXOGP=OwDE0u0E0jbWtE1=bsxJSuQXSMeExvbESwxXtj1Jx1xJSpm=ljbEbiUWSNYJSs6Wl=mWSFeWSpYJlu0EOsxWOH1WYNYEbMA=ORQ=lMeJlsAWljYJYi1WtEbElibWxweEluxEOFDEYim=YR6Xts6XSW6Jb1/E0s6=ts0E0uqExuxElWDXOJ/ES5vESs/=tW0E0N1JxEvXlWQESE1EOMPJ0J/WOpUW0WxElWeWSHvWxMQ=O=bWlReWYR/JxFPEtsD=SWq=OJqWOHUExuqElRqWSsQEYjvXOpYJ0Em=tEUEOJ/=tib=tEvJ0=UXSF/Wlu/J0iYJbj1XtuxXtiv=bjY=bUvEOM0JbjmEOjYWYRxEbW/=OMDWSJ/=tJAJSvbExF0JxNb=SuD=bWDESGqEtWAEl=1EOFPEOpbXSGqJxMQWO5vEON1=OUmJSwQJ0J/WlRAXl=bJYpUJSGqWlWqE0s0=OMxEbNvWO5UESwqXtEbJxR0Wl=1=OwqE0Mq=SWq=YR0XOsqWOJeEOEmJbHYEOG/Jx5YWYJ6ESJ/=SuAXtMqXOWAXlMqElibExEmEbJQWbGD=SReXOWDEbGPEtpmJxMAEYJPE0Wq=b=1EbpUExivExuAJYRx=OWeEbueJbi1=liY=bWAWYse=bW0E0MP=bu/XSu/WtjbWO1P=SweEbsq=tW/WSNYXtj1XtRQEOFPXSUYWlMx=O1/WSsP=OuQJYjbXlRQWSsD=ORAEOEmExMxEtjb=lNbEOM/JxH1=OW/XOuQJYN1ESwq=tWxXOJPEOuQ=bJ/JxJPExFxJS1DExUmXl=Y=S=Y=bRqWSpbJxwQXlJ0WxvYJ0imWS=vWYM6Wb=vWxJQEtR/WbE1El=1WtsDWO16Wb5vXtW0JbHY=ljbXSjmW0WAJb1AEOuxXtR/Exu/=YWQWYW0EYp1=bRxXlM0EO1QWxNYJx5UJSEbJbi1=b1QXSMAJxNvEtRQ=Ss/WlW6WSpYEOv1EYu6EtRDEYNvWbWDJbW6=YuAEOsqESFxJlsA=YM6ElWxXSw6ElJeEx5YE0RqEl=bEOEb=l=bXSJ/Jljm=OUvJbpYXSsQElMqE0JDJxNm=S=UWlMP=YRAExWeWSJPWxue=lpU=OG/EbsAWlMeJlRAXtR/=OG0=Su6ESuPWOpYXOJe=SuQ=b=vExvvWYWqXtJ0JxWQ=luqXOG/=YsxESJQ=S1qJSvmWlWAWYJPWO1xE0RDJxF6E0sDEbjUWSimEO1xWOwDJls/XtJQXSG6WlR/=OWeEliUXOHv=YEY=YWD=luAEximXOib=OuPJSReWtu6Jlu6WOvUWxMQ=SGx=bu6WSHYJbHvWOMAESFxEYWAJxwPESvmXSuq=bueEbiv=lu6JY=vJSsxJ0NmJ0R6J0MeEYJ/XOEbEY=bWbw/WbseWtM6WtEbWYMxEbuDXts/ESs6ESjYJSGPExEbWSUYXOJeXOwAJbse=tNvXt=U=tjYEbGAJ0p1EtJ0Ebw/E0sqWY=vJbweEbJ6Jbi1XS51=OFq=tR0EbNbXOpbW0MP=ts0EbEbJbwDWlj1XS1AXONY=YRQXOJxWOueES1qWtWDWxvmWxMeESivWtMqXlMAWSFe=YjvEtReEOw6W0sPJbMqE0R0ExsxEYJ/=YJ6=lMP=lNY=SNbWOwA=OH1=lueJxuDWS1/JxMPWSReJYM0WbGxXl=UWbj1W0pbJxM/W0p1XOJDElJDXS1QEtMxJ0sDJxWQWlEmXSpmJbR0EOUvJ0MAWtj1EYs/E0uQ=YWq=lpYJbwx=SGD=SHYXSUYJYjb=lJDXO=1=bMP=bFD=ljbWSRq=OpY=bs6ESpUEOWQWbvbWOvb=O5YJ0=YWS10XSWAJ0RPWbHbWxibJ0J/=bu0E0WqWbMqJ0R6WSsAJlpYEbHb=tJQJYsDEOJ0XSMe=OMx=bMPJbMDXtNmWtpmJx5UW0uQWxvvEb=YElW0EO=vJbF0EbJxXlEYJ0ibXOJ6XSUYEOv1ESwP=SuxJxRqWtJ6XluDWxwAXOwPXO5vJbJQEx1/EbsxXO5YWSJQEOw6Ets/Xtu/=OFQ=YJxEO1xExu0XOG0WbibJxRDJSseEOG0WxRPWbsDJSUbJSFeXSMxWS1Q=tpUJx5mEO1xXljvWx1eJxFP=ljbESF6Wx1/JSp1Ex=bWSJAXOWqJ0WPWSJeEbWAJYJ0EOueWtjUJlsQEYu0EORAWxv1ExMx=bE1Wb10W0jvExMxWYR0=SR6W0W/EY=mWOjmEOWeJYJ0=b10WxH1WSGA=SM6WtsAWOw0WbF/ExW0Jb5b=SWxWYp1=bGPEt=YWbNUXlpbExibXtim=SM/XOG/=S1eE0MeXtWPJbEYWts0JSw6=YMxESFQJSjv=tj1JYM0WOuQ=tjbWx=1WOs6XlpYWSWDJYivESEUXSJeESFqJYsPXtWDJliv=OJeEOJ6WYibXlRP=tJAWxMxExFqESUvWljvEYMe=tW6WOwqJ0s/E0JeW0sQJxJqExvUExMx=OFxES=vEYuxXl=UJbuPWO10EORQEYs0=lJ0JbUmWxEbJb1A=OW/ExEYWOsP=tEvJ0sxEYpbJbU1JbM/WbRAWtsqExWAWYimWt=vXSE1EbEb=YsDJbGqXSs/W0uAE0jmE0ivXlWAXOpvJlRDEtuqWtMQ=YWAJ0W6=bGA=OsPXSuqWSG0ESwqWxJ/WSv1JbivW0i1JYWeXSMeXOjmESsAJYN1EO5Y=SM/Ebs0JSRQEbJeEbG6EOjmWtuQ=YiUWlMDWtWxEYJAJ0RAXluP=SFPJxMAJSiYJlJ6=SNY=bNY=bimWtJQWtM/Wxw/JxJDJxW/EbEmWYJDWbs0Ebu6=Os6JYJqWxR/WSpvJYjbJSW/XONmEtpUWYRQJYuD=OEY=S1DEbMqEbHbJ0EbEOW6Jb=UWOW0XOj1ExWPJbwAWtMAWtj1=b1/WONYJSWA=OR6Eb5mXSFqJSvmXlMQWOWP=OGqEOp1ESHU=OGDJSw0W0J0XlEYW0sAEOu6EbvmESsDEOwqXOJxElWDXlEmWSW0=YJx=l=vEYRxXOp1Xl=1JbNvEOGDJxpmEbwQEximXOpvWOWAXOvYEbsq=SueXOG6XtJqWS5YWS51Wx1QJbWPWbvbJbNmE0MeWYEbW0pm=SvmWtsAEOjbWbib=t=1ExpUJY=1WOW6Wbpb=OWDJ0pUE0i1WSJPEbR6WbJQWOWAES5UExNUExWxXlRDJSF/JlWAExMqEbuqWlsQEYJQWxHvJYMqXOFQ=lsqWxRPExu/EbUb=OuD=YpvJSpvJYJ/Wb=bXSWDElWeXSW0Xts0Jx1xWxW/JbvbXlEbJYj1JbimWlEb=OR0WbRe=tM0J0J6JYu0WSMDESGe=Ys/WtRQXSNUE0ibEOJQXlWP=OG6Jx1QWOjv=tiv=tjbWbU1=OWqXOsxJbHv=bMqJS51XOuAWSwx=liYWtNUXOv1XOwAW0seExUYWlWq=OuPXOw6=SHY=bEvJSJAJYJA=Osq=Si1WSUvJbHYJxjmEbG0EOWDWYjmEbJeExFqE0NmWxJ/JxGxEls/ElEmEOueJx1qEYpb=ON1WSHbXSuQ=Yj1XOHmWxs6WbReJYMAWtsDEbR0WxFQWSWeXOGxWO1QXlMxJxsDWOJ6=SFDWOMxXlRAWbjbJx=mJYM/EOvmXtpYEO=UWtjvXOWqESp1=lJQWxMPWOUUXSGPEtsDWSNvWbHYWbFqWxJ6JlMPE0E1JlEvWtseEOFxJb5U=OwDWlJq=Sj1J0NvJ0MDXOJ6JYJD=lWQWtJDXOM0EbwAEOpvJxuDEtu/=b51ESFD=YsDEOH1J0RqJxJ0=YpYESRDXO=YJYseEOwAJYuxJljUJSJDJxivXOv1=SpY=bs6=SR0ElNmW0W0EljYES1QEtM/JxW/JbwqWtpbXSU1ExJe=tRDWSMqJxMqWxMx=SFPWO1e=OGx=OWAEYi1Jl=UEtJQWbu0WxR/J0sxEtR0WOReWSueJSNmElRqESEUJlJAXSHYWxW/ESuP=biU=Su/=b5mEbGqJxGqXlMqExR6=lJA=SpUEtsDW0ibEbW0Ex5mWSW6JYsQEOF0=ORQWxRqExueJYWDJxHmEbw/WbuPWOWqJbFAEYjbXtJ6J0=YEYs/EbMAJ0=1WbR0XOwQXOU1EtNvJSpvWx1DExWP=bGeJlMDJb=b=SRA=li1EYRPWlEvESJxJSWeEOpm=tWPXtMPXSuPWbuD=YW0=tiUW0MQExEYXlW/ExGqESGPWOwqJbU1J0Em=ts0=YNUXOvUExsPWSGeEb5UXlWQWbMDESFPJb1QJxvYEYiU=tWxWbEYExvbElibWONvWYM0WbwQEOsDJbF6XtjbElj1E0M0ESWxXSUmJb=m=tp1EOJxJSHYXSG/W0=YEOFP=lJQ=S5vW0ue=SJQEb1A=SjvJbNmJSJeXtJeW0p1JbR/EOR0=YuqJxGeEluAEYjv=O1/JYuDWbHYW0EmW0J0JxuDExNUXtRDEOJ6WluPJxuA=tjmWtivWYJ/=lM6WbHY=tR/XlsxWlW6JliUJxJ/WxRD=tWeXt=YJYuQ=YsAWYEbJx=1=bNb=tsQWliUXOM6JYJAJb5vE0J6JbGDJbR6Et=YE0sxElNbWYpYExFeWx5bW0jvXSHv=O=YJS5U=tMxJSEUJxFAXOMDExWeEbsPEbj1WtuQJxR/W0jUWYu6WtW0WSNmEYiUWbJDESM6ElM6XtR6Ex=YJ0W/JlpmESibEtM0XtRQEliUJYWPJxR6ElRA=lMA=bJeW0NUJb5bWSGQ=luAEOw/XOW6Jx5vXl=YEtEvEbNU=YiY=bwAJSuDWbw0Xt=YJbMDJ0NmJlJ6EtjmEYJQElJ0XlJq=SFeEbJAExW6=l=mWYW0JbNbWOEbEtNYWOj1WtWq=buAXtJPJSWq=OJeWYiUJbJPJxHmJx1PE0NYWbNmW0Nm=S5m=tWAJYpYW0JPJbW6ElJD=lE1W0uPEtuqJ0EbWOs/JYueESF6=ts/=SpUEYRPEx=U=tEU=lN1JSJ6XlJAWOvvE0Me=S1QXSi1JxiYJSU1E0=1XOUvEtMqE0MQWlseEtR6=YpUJlpUElEUExNbEtjbWbiUWtiv=l=U=bMQE0W0Xtu/=bRDJSsQEbEv=bpYWxNmJbuxXtW0EOR6=tMeJluxXOpYWtM0XONbWYWPJxH1Wbp1Wlu6WOGxE0=UWtJx=bNUWbHm=OGqXOu6=lR/ES5UEORP=ON1XtsDXtEbExNUElW6=Os6=tWqJx1QWlsDWYRAJlu/J0MeExJqExJQWOJAWls0EOUb=Os/XtEvESUb=lR6ESM/JSW0ExwPXOWDEYW0ExRqWxMQJYiUEtW0=S51JSG0WSEm=OGx=SM/=OsPWxJQWOR/=SwPE0uxXOi1WYp1JbHUJ0MPXtRDJYM0JYsD=Yu0WSvmJ0M/=SMP=OsQ=lpYWSFqEOp1WY=vJSRP=lNY=SMDWORq=bJ/WxvbWbRAJlsxWS1D=SiUWSw0E0WA=SEUXls0WYEYElNvEtNmJYpUEtEbWSwDJSuP=SuD=bGQ=OJPEYib=OwAElsQWtRA=Ow6J0Rq=OM/XSvvXlN1=SG/WS5UW0s/Jxv1EtsPJxM/WbG6EYNYEORqElJDJ0jmW0RqXONm=bFqE0s6=bFqE0WQWl=m=OFq=S=YESjmJxwxJlWxElRPWbwe=bRe=lMQXlpUJxvU=Svb=SR6=bjYEY=mJSimExMqWbM6=YNYWls0WOp1XSweXS16WYjY=SwQWO1eJSWeWxwxXlWAW0u6WSF/WbJeJYE1WSMD=tM6WtW0WbG/Ex5YXSEYWxGPWOJPEbWA=b=m=lsqJlWx=bJ6WlJeJxwA=SGA=OHvWtJ6XOvmWbwx=bibEbW/XlEbWOG/ESweWxGQJYu0E0M0=bs0JbR0=OwQJls6ExsP=tu6WSGqWbWPXluQXlJAWb5UXtEYEYi1ElW0Xt=mEYNbEljY=lW6EtMQE0=Y=bsDJxR/JSR6J0WxJlue=OpbWbuP=S1eEbJQExM/W0sxJxEYJb=bEYRA=YJPJYj1Etj1=tu0WbMeXtW6Jl=1=tJ6Ex5Y=O5b=bJ/=S1PW0p1JxNbJ0MD=OW/E0Mq=tJeJ0JDJS5v=S1xJxFe=bGDJxNbJbJ0EOJqES5bWtsQWtE1WSUm=OimEYpYElivWSuA=OEvE0ReWOwQ=Ov1=S5UESG6EOUUEts6W0NbJSHvEx=v=OvmWxw0=YWxEtWAEbpUJxUY=Sw6WSNUE0pm=OvbJbWqWljvWSHvXSu/Jlu0XlW6WxU1XtuxWlpv=lRAXlu/=tsDJSJAEOJ0Exs/WSi1JbMD=OseW0sQWOJAWtWAWtJPElibJxu/EOpbE0j1JYMQWS51WlRQElpmExM0=Yj1=tM6=SWxEY=bEbG/EbFQWtpYWbGPWbNYEb=bJ0NYExuPEx=bJ0MP=l=vWSN1WOWqWOM/EOFeW0i1J0=YJSG0J0WP=tueXlRA=tRDElR0=SjbJbR0JlpY=lJxJ0pvWbvUElWeWOMe=limEtsqXOUUWYs/JbpYEO1AW0s6JxG6EluPJbwQWtWxWlMx=tivWlpbElN1=SibEtRxXSwDESMqWlJ6=OvmWxR0JbF/=YEmEtWqXOuPJ0WxEtMP=SiUESNYJSRPJ0ReES1qWSjUWYR6=OGPWbUvEtWAWbJqEY=bJbNbEORPJS5UWSEbW0sxJxj1EbGeExNUWOu0XSvUESGeExMA=buP=OWe=bFAW0s/XlEvEbFDJx5vES10Xti1JxF/WONmJlpYXSR6XOJPWSG0J0NmWOGx=YivWtivJYRQESsqJSGPExw6EbEbEOpmWSHbXlib=lWqExF0Wx5bWOi1JSwDW0seE0EbXtJPEljUJSHvElWPEOJqWxReJbEv=bMPWb=bJSGqWlsQJbs0XOEYJbiUWt=1ExWPJSMQWlWeJSHmJxE1ExpmEOG6WtN1WYjm=OuDWSG6XOEmWt=YJS1AWxWAEb=vEtNYJSuP=S1xEY=bXlJxJ0=UXljYWtiY=SJeXlJx=SJeXtEmJbiYJxGDWbMe=OU1JlWq=YJqEbMeXtJqJYW0EYs6WtsxJxHU=Ss/=b=vJxUmW0J/EOWD=bj1Xtu6ESNvXO=v=SMQ=lEvJSR/WYjUXOWQWOGQWSNvJYWeWOp1EOi1JSWe=bW0=tR6EOJQEluPWx51ExweJxRD=OuPEtJq=lNbEx1DExNm=YW0WONvEtpvExR6E0uQ=tuPJ0iYEO1xJ0ReWxU1ESF0WORq=SpYExJ0ElpbWtiYJlM0WOibWl=1JlMPEbUYE0Eb=luP=bG6E0WeJx1/WxWxJbv1WljYESWeWS1xElWDEbw/JYE1=ONU=OFAWxsQElpYXljbXlRDExHYJx1qE0M6ESwQ=lReEtu6EYEbWlW0XlJ6WbR/Jb1D=SwAEOWxJYj1=lW6WlEUXSJqESNYWSwPXSwxWOWDXSRqE0MQ=Ou6XSHUWlJ0Ebs6=SJ0=bM/J0RA=OW/XlMqWSFPJ0u6ElEmEbuQJbGeXtu/WxpbW0WQ=YW/E0JP=b1xJ0RqEOGDWSi1=S5YWOweW0s0JbwPWYJqEbM6ExwDESJPJYpmWx1/JxEbEtpUJbvbWlWP=OF6WSMAWbibJ0NmWtMqJ0RqEYReWxG/=bG0W0=YExu/WbsxJlNv=tRqWSMP=SsqWtE1WxvYWO5bEbEbEbRe=YiYEtuAJbuAExseWlJPWlW0=t=bWYWPESiUE0MxJYRDWxGAXOGxExJQ=tjv=b1PEOux=tsQ=SvYW0NUWlRQWbGAEb5mWxEYJbGPWYMQ=bEvEO1DWS5v=Ow6=lWeEYpUEtMeJxRxW0M0JxEUJl=U=bpU=OEb=tiYEOG6WxM6XSM/ESNU=bFxESEUWSJAEx=bJxMDXSueESs6JSj1JbR0=tivEOsxWxvv=YM6XtEvJlR/=SMAJx5bXtR/XOu/JlRDJY=Y=SFPWxR0=b=YJxs0Wx1QExWeJbJqWbs0ExRxJbUYJxJxEOHvJxUvWtue=SG/ExwPExU1JbGxJSMxESuxEbWQ=YWe=SH1JxpYEYNYEluQWxEbWSEmExW0ExNU=YW/JxpbWSimW0JQWxJPWOEUXtpUESwA=S1QWxseJxFAWOJDEbRxWbjUJS10WSvmEYuxEbHbWtivWx5v=tNm=lM6EtuxWlj1JS16=YJDJbNmJSsxE0NU=S1AWO1AJSHY=OJQJYi1Wxs0EtRDWYjY=bsQExuDXlMeJxFeJS=1JSF6JbHbXlW6ExvYESFqEbRDJbUvJY=1Wlu0=SGDExJqWximWYiUExs/J0sxWtMeXSvvEOuAJSJeWl=mWbpvJbW6W0j1EO5m=SUYJxw6XSUvJx51EtReESWQ=S10EbFeExG/=O=UE0MQ=tM0ExsqEls0WbF6XOUU=Owe=S5mElsDEbNbEx5bWbR6E0R0J0WDXO5mJxMPExWAJxHvJbuDE0ReESFxW0sDJbGqXSs6ESM6XSpYWxFq=SNv=tR0XSNbEOW0XSpYXORPWlJA=OpbEOH1JS=vElu6EbEvJSpYElR/=ON1XOs6Xti1XOWqXSG0WSG0XSEYJSFQWOFq=S5UEO5bEOw/ESsPXO1xEx5mXtWQEtN1ExvmJSsDXOjUJlJ0JbibESs6WtEbEbRPExWqWSW/XtWqJlM6EOvYWO1AJxFq=bweEOFqJ0ibEls0XSwqWbRxElsD=Ys6WOwD=bJDJbibXSW/W0J/=bRQWl=1=tueEliUEbE1JbHYJlWqJlNmJl=bEljUExGx=tEmJSsqEYE1XS1/EbHmJlMQEbMAWOwQE0RxWSE1EYu/JYWDJYJDJbv1WYjb=lEUWSHUEtsPJlRqExpbXSM0ES=UJbFPEb1PWO10XOMP=SHmExE1ES=UW0W/Wtjb=SWDElsqWxu/E0EvExJ/JSHUExRAW0uQJbMqJSEbXSHYJSF/=b1AWtMqJ0s/WbFPXOFP=Oj1W0E1ExJxEbGxXSGD=tWQJxWPESG0=YjYJbHYXtRx=tReWbF0ElJx=Ys/=OMeXtJqElpmWxWAJbW0EYRPJ0jvXOpmEYNmEx=vJxwQExUmXlsqJbN1E0W/XtWA=YsDXtsQEtuxJ0uxXljUEbW/=bHvWxsDEtu0=SE1=lW0J0EvWSpb=lMqJ0=bEYjY=YMeJ0Re=lseXOJ6JxReJluqExGqXO51ExFx=SWQJSpYWtMDW0s6WxpmWbFQ=SR0=S5mElNYWOEYJ0sDWxpvE0ivXSRDWls6WbJqEtR6JljbXSiYXSJPE0R6JSHmXlj1ESMqJbR/JSFPESRxWY=mWOJDWxwP=bu6XO=m=lNbWxiUExNUXSjm=bG0ESs0=Yp1=YJ6WO1xEb5mJbweWOG6XSR6WtRQJb5b=YibJlWPEbF6E0Nb=SimEOWPWSvbEOw/=bwDE0pvXSWQ=O1/WlMeEbFAJlJQElpmWO1qWb5bEbGe=Ow6=YueEx1DESvYEYuDWxsQWYRPWYW0J0WPWOsx=bvmJ0NbESw/JYRqW0M0E0JPEbH1JbH1=buQ=YjUWbuq=YEU=tRDW0sP=bR0=Sue=OsxJxUv=tMDWOuQ=b16WlW0WbFeEOHY=luDElJQEl=UElR/EbW6=bUbJlEvWtiv=bs6JSJ6WYEmXSGAJ0pmExJDWtjUXOMP=bi1=OM/XOMe=bUUExGeE0N1JxWDW0sP=OpmXlJeXS1xWSjUXSF0WbR6ESJDWtEY=bWe=YuDESsQ=YsQ=O=YWxs/Ex1eJl=m=tNvEbs0XSv1JbRQESMPWlj1JlMx=tp1WxFxEbu6WxWDJSJxXSUUXOH1W0RQEO=vESjY=SsPWxux=SGqE0NvXSMe=bNbExsAExHbWOMeW0pUEOvUJ0s/WS16XlRA=bRP=SjUJYimWtNvXO=v=SJxEbs0XO5mWOs6=bGDXOGQ=SHbESGQJxGeWbJDEYimWxs6W0uDJlWqWb=1JbJDEOGPEOwxWbimExvvWSJq=Y=mJSvbExMxExu0JlJqXO=U=tMeWb5mWO1xWSNv=OHmJlJxJxNUJYReJYM/=YuQWOGAWSsQ=tMAWOpYWxs6JSuqWl=1ESsqXtWPJ0iUEbR0JxGeXSNUJxNv=bsAJSs6E0uAWOH1WOJD=Ss6EYEvWtueWxsDEOG6JY=1Xl=v=lJ6JbRQESMA=Ou6XtsP=OwPEYNY=bw0EONbJSuqJSU1=lJDWOjmElsDJxi1WlWQWYpbJbR/El=1JxWeWtJDJxRxWYiUXOGQE0RqJSw6JSGDE0s/=ljUXOjm=SGDJS=1XOib=lu6=SGxElpmJbFPJluDWYJQEtJ/WSueElWqW0M6ESNYWbuxWli1=bWq=bwqWljbJY=bWSi1XSuDESMPEOwPJlsD=lMeJSu/WOFxWljvJ0sDEb10XlueElR0XS=vJYJxW0Wq=bJPWtNYXlE1EtM/W0J/XS5vWONvJYWPJYueJYu/XSJ6EtJD=lNvXt=UESw6=O5UJlR6=bNbJbuQXOi1XS1/=SpvJxGQEx51WSpvW0JqEbMqEOpv=OivXtNYJSsDJlMeWxJeXSwDEbsDWts0WYuDWbGx=buQXOsDXtseEt=UElu/ElsQ=b1QEluxW0i1EOvUEtNbW0u0Jx1A=lRe=ONYXSuAXtRxJS5vEYuq=bJ/WSFD=lMAJYjUWOjmESM6JlpbWbUbEYJxWSUbEb1QXO=UXSsQWx=v=l=vWYu/WSN1JxUm=YsQExHUWSW0WOEmWOseWOj1=ti1WlW6=Y=bEbG6WOFqEOwPXSNb=SFA=O16XlMDWSuPJbEbWSM0JbWDWOvUEbMqWtu6WtJ/JbuqJlW/WSwx=SRPJljmEx5YWYRQE0MqExu0Wtu6=tjU=bGAJ0u/EO=1=bFxE0RxEbNvEOs6WSGAJbM6JYJDWxNYWtM/ESHY=bGQEljbXOsqXOUU=SWDJYWDJYJ0WbMA=OsxXlWxExRDESw/W0JAWSNmXli1=S1QWliYJSsD=S=UJ0EYJ0imXSJQWtWe=tReWYJAWxw0WxiU=SUvWxWAWtsxElWPWt=bWS5vExM6=bF0=YM0WlRxExvUEOw6J0JDXlEYEYjvWSG0WtNbExs6JS1qElp1ExGPXSux=bG0JSs/WxNvJlpbExjvJl=UJSG6ExW0=ljmXlEbJS5UWtNUXONmWYWP=lMqXt=UES5mJS1PJSibEbF0=lMDWSMqJlimEO=bWxuA=Ysq=SJeWbMAEb16XOH1JxibJS1PWlN1W0WeJSim=OG6ExFDJYMDXSJQXS1PEO=vEOJD=SWDESsQ=Owe=SWqXt=vESsqE0R/EOwqEbsxJbi1J0u6JlMqEOw/=OpYJxWqWOuPEbF/JlNU=OjmJxU1WbJ0XlW0XSF0ExJx=bG0WOpYWbWqWxNvWYsPJx51WxFqXSUYJSJAWYRPXlReXlseWbUbW0NUWOv1=bWAWbRqWSNbE0J/J0R6WOw0WO=UEbWAJlMPWlMQJYu0Wx=v=bwD=SuqESwP=tJPESs0JxFQElMAEOs0JbNvE0W0EtMQESJAWb1qWtM0ESJAJYs/=SRAJxueE0EU=ljUJSv1JSJ/=bs0EbJD=tNYXONYWSjYEtM6EOFPXSj1WlWQWls/WxG6ESpU=bsQWYpmExWeEl=vXtjvWxFQWxvbEOMQXOJeXSUmJ0i1=SMx=O1DJlW6XSJ/=bpvXS5bXOGeExueJlibJ0WAEt=U=OMxEts0EYi1WSNUWOwq=OuPXSN1JxuDXlEbXlMA=YuQXlMqEYsq=tueWSWPJSwqEOweJxpYElMD=OGD=bsQ=YjbXS5UEO1/EtEYESEUWOpvJSFqJ0EUJSNYWluAWlMx=S=1=tMeJxu0=OWqWljUXOFAJSFxEtWPXli1XOG0EYjvWSEvWtJPWbHbEOueWbiUXlN1XSi1Wbu6JSsqWliYE0iYEtJAWbM6ExNYEOw0EtsPWOw6WbReXOw0Wxs/E0MxJbj1=SpbXluPEb1AWtseWtMAXlJPE0JeWbR0=lWDESRqXl=1ESiYEbMqExUmXO1QE0JAWOJqWtWD=tJqJYR/W0WqWxWPWS=vWt=UW0MPEOjbESW/JlEm=OM6ExRPW0WqE0W0XtpYJlWD=t=mWYJAXS1/J0=mXtN1WSwqEbEbJ0uD=YpmJxRA=OF0XOsPJbE1EYu/WbJ0=OsQXt=bJbGPJbw/=O=vEtJAXO1eWbJDWtM6EO16=OJ/ExJeJbFPWxwe=SN1WSJeWxGqEbEmEYu0=SWDJl=1WljUJbEm=SJDXt=1JxR0=bUb=Sw6=SvU=YJ0EOGAEOGeWbFeJxwPXtMDExu0XS=UWSjvJb1qWONbXOs/WOwx=SMPEx5YEbpbJ0JqWbs6WYu6Wb16EYjm=bs0EtiUElJ6WbjYXOHm=b=Y=bN1ESEYElMQXON1WtMeXlimWbpmWYReJ0EUJbReWbWPXSFDWxR/Wx=mWSsAJS1eXtNvEbF0XOUYXOMPESvvESWQESWqE0sQWSiUWx=vEbNv=OHYJbMAESFqESv1=bHvWYE1=bsDW0RQWOMqXOp1JSwQEORDEOJxJSJ0WbRe=OHbXSJDEbM/WOpUWlRxXOHb=bG0JbUmESG/XlWqJbHYEY=YWxjYWbG6WOUvExW/XORPXSF/Jbvb=YuPESib=OR0ES16XlWeWbG6XlWQEOv1J0RAXSW/J0R6WlsDE0=1=Ovb=O10JbJPJlpvE0uPES5mWluP=tRPJlsqWOvmJxvYEx1QWSWQW0uxWOMP=YEUExGeJbuPEYpb=OG/JlMQWbFQWSwPEb=1EOu/=SEvJbibExWeE0sDJ0uPJlRxWSMP=ts6JbE1WO5vXSE1E0iUWtpbWlW0=bUbXSRxXOwQJbu/=tReXSNY=YseEtuAEbjUESNmWbwPXSpmJbEUJxF6WSHvEbJeXSu0EOUmWx1e=tsQJ0M0=SFD=OGxJxEUWS1xXOs6=OW0WYJPWYu6=O=v=Y=U=bFeE0EmJlMQW0W0Exi1Jbs6=Ss0WbiUEOjmXO=1WYi1Jbj1J0=Y=lRAWSuA=lW/W0J/JlJPExFqXORQWOFxE0s6JSF/E0s/WluDWOEYWx1q=SMe=lWPWbM0ElEmWxNUWlp1EYWxWbM0JbHb=YJ0WYR0WlJeEtJDJYsQEbN1WOw6WSJ0W0uPXSwqEtuPESJPEtWqElM/XSJDWSFqXtj1J0seXOwQXSv1EtJ0XOsqW0s0WY=U=OpvXtibEbvb=b1QWOGeJbRQJ0EmW0p1XtEbEOuDXlibJlpbEbEY=S5UEtM/=OFAEbMPWOEv=OsQEbuAXtMxJSW0EbsxElM6=OEmWSJAWl=UWtu/XSR/JbJxEtNbW0i1=OGeWO1QWlJ0XtNY=SW0EbWQJbvY=OHm=YMAWSRAXOseWlpU=OMAWbG0=SEbJbwQ=lpbWY=vEbFAJSJ6JSJ0WxpvEbG0JSuxXtu0WSFD=SuPWOWeXlWe=SEvXSpvEtJA=lu/WtRP=bsq=OHbWx5mEbM0WbG0=SR/ESM/XOG6=OEUXOw/W0RQWls/JxpUJ0WPXOM/EYsP=ORx=Yuq=OWPJSJqWSW6=bvU=bEmEYuPJxNvEbH1JSv1JlNvWxU1WOu/=OUvWSsx=lpUElMDXt=1Wlsx=OG0JlWqElRxJb5YEtEYExMAXSRQJxpbWbWqWSuQXS=vWbU1XS5m=lMQEbimJbiYJxE1ES5U=ljYWx1D=OH1EYWD=ljY=lseXOwAElpUXOJAWtu0Ebw0E0WxWYRqWSw0=tNUExF/XOuDWlRQJbEY=tj1EOR0WxM0EYRAJSF6WbRqEOW/WYMPXOp1XSibWOu/WSv1JSsqJSu/EO5YXtW6JlEUJYMPWxHvEb1/XtE1=bH1EOWxWx=U=SUYXSJ/W0pvEbM0WSuqXOJ0JbvvJx=m=bUYJbiUWx5YEtjmXOvm=buDWx1PXS1xEOMPExMPWxw0EOsqJbJeEbMAEljYWxsDEYRe=YMA=bMeWbs/WxuPWxUb=bNY=YuP=bRe=bvmEx1PESU1Xtu/WS1qJYibEx1/XlsPXSwQWOWA=O1PJYEmESNmJxuQ=ONmE0jUJY=mEbwA=SwqWOpvJxGAWbReES=mW0WPJYjvESGA=SWx=YM0WbF6Jx5UJSR6EOsDWbuPWljYJxsA=OJAEbRxWSG0XtEYEOEvESpvJ0RAJbJDEOGQEtpv=SNYJxiYXlJQ=bue=Sw6=ls/JxRxWxGAXlueW0JeWlim=YNmWtu0WYRAJ0uQElJPWbs0WlibWbG0JxUmXS10WtJ6=b1DEOFDWSM6XSUbWbp1WSMxExJxJxW0WtMxEO1PEOweJ0RQJbsPXSFqXSw6=O1/WOUUEYu0EbRqJxs6XOsqXOGeW0s0WlE1XOMDWlJxWS5bJl=vEOWAW0MeJlM6EbF/=bNmWSGAEYimEluQJb=YESJqXS1x=YsPJ0=YEbGQEx5vEbpmWORAJbRx=lsQJxseWlJ6JYJxE0sPWxvmJSs0EtNYWxuPJYEvXlsq=tJq=SwP=SMeWOueWYE1JxpvWOGAESR/JbJeXlsAWbNbE0J/EOEvEOGxWxjYWOJ/EbJ/E0N1WOFqWxHYWtWDXtMPJxivWOweWb1eXSi1ESJQXlReES=YEYWqEtuA=luxJxs/ExFAEYjb=SiUWxwQJxHv=SvUEYW6JYRxWbFQJbi1ESpm=SJ6ExMPJYMxXlsq=bHUW0jbJY=vExsAExuAJS1qJluPEtsQJbimJYMeWxNU=lRP=tW0ExiY=bjbJ0JqXSR/JlM6JbW0JlW/=bEYWxUUJYRAXOuPWOuDEljUWlWeJSpvEY=bJ0JeEbNU=tJqJYuqEtibJlWD=bpYESJ6=t=1XOUb=liUJS=bWbiUEOwPEOFxEbMDWlRAESNbXtEUJlR6WY=mXOu/ExEv=YNY=ljvE0JxXSpvExH1J0ue=bJxW0=1XtMQXOHbWSR6Elsx=SiYJxJeWYu0EOWq=YMQEb5bW0uqESHYXOWe=SHbXSJeJSweE0NmE0sQJYNmJ0W0=bib=lNUJSi1WlpUXSJ6JxivWOsx=OR/XS51XSsQJSUmXtJD=ljY=bjYWbW/=bwQEtMqJYRAJYJDJ0RPESvUExwq=lJQJYp1EbjUJS1qEbJ/EYNb=bU1W0J/=Oux=tR6=luQJbUUXO=vExwq=OJeJbs/JSWqJxN1ExjvEOF0XlNUWYuQE0J/WxReWl=mJx16XtRAEYpbEYs6=bM/EbEmWlu/XSs0WbMPJbwAWYRAWbF/EY=bWtRDWxF0=Ss6XOMxJSweEYWeWYjYWl=bExivEx=vWOJAJSHvESFeJSvbExsxExwPWSHY=lpYWSMDWtJA=biUWbE1=bRAXOF/=b1QW0jUJYpUEbsAXOEUElRQWx1QJb=1=bJ0Wx1QWxsQEYjvJxuAXOFe=t=1WlsqEl=vE0sDWSjYXOG6EYi1EbuQ=tJDWSFPESivEYi1=YpYExNmEYpvJSReWtu0=bsPEYRPWbUU=tEv=buQXtRqJbNv=YueWtpbEOuQWbwPESsQWtW6=SFDXSJQE0s0=OWAElJqJl=1Xlue=lRqESRxXSJ0=bJDWSs6EtuxEtM/WlJPJxNUWYMqJbUbESHYWS5YEbi1J0sqXtW0WSWqWOUvEOUUESwxWSWQJx16J0uD=SGPJlE1ESM/JSR0EOuD=SHUXS=bExw6ESj1XSEbExjvJbWxWbiYJYR0EbHmXlJ6JSpmWbJ6XOu6WbNb=bUUEbHbXl=v=bG6JYsAJx5YWxvYWORQ=t=YJYpmJxG0=ONv=bHU=ONv=YNUXOH1XSFPWOjUEtiY=SFeWb=bElu0WYjvWlu0WlNmWbWA=bRQWlsAJSMPEORqJSGDJ0WPJbueWOu0J0JxJb1D=bRqJbs0WxGxWtivESW/J0WA=S1qXlJ6XORxWtJDWxWPW0Rx=YEvXSMQ=OG6XONU=OGq=OWx=l=v=tMQ=YMPExim=Sj1EbM0Jli1XS1DXSpm=t=mXSRQWts/WOvUEbu0ESW6WxueXSw/XOJ6ExNvJY=vEOwQJbjUJbs/WSjYJbp1Xtu0=SHUW0EvWb=UWOwAWtMeE0Mx=SvUWOJPEtMAJxpmJ0W0Wl=vJljY=SUYW0WqWSUbXOMeJ0u0WONvWxMxESpvWbMqXSF0Jx5mEOMqXlib=b=YElu/EYMDJbFAEtE1=SFx=bNU=lWxESu0EOFDWSN1WSW/=lMDWYReWxRe=YM/=O16ES1AES1eEYimJS5YXOsPWtpU=OGeE0NmWOuPEYueEOU1=SM6Ex5Y=bjYXORA=lJPXt=1JbFD=OvYJbsDEORAJSE1=SwxEx1DEbMQEOMeJluq=tux=Oj1=lRPWb1xEOse=b5YEbEY=lN1WxjvE0jbJ0JDXOJeElpvWlpUWxWQ=O5YEtJqJYueXOHb=SuQExpbEOpU=SsPXlRq=YNYXSvbWx16ExEm=lWxExue=ORQW0JPESMqESEvWOp1JlRxEx=YWO51WxuQJb1qJYsxJbW6=tM/=Ou0J0Eb=bpmWSu6WOHbXOjvJSGq=SiUWxRPES5UJ0E1XSRxWbsAJYNYEYRP=bGQE0uqExR6XlWAWlE1JxHUEOjUJbMP=lW6WbMDEbF/Et=1XOwAJYJPEtpmJxEbJSwQWbEUEl=mJSGDExp1Jbpm=O=mXSjmEOM/WxvUWx1/W0i1WbHYJlM6EYjYJbMAJbse=ORAElsqXls6JSG6WxW/Xt=1W0ReWliUJ0MeESwQW0MPXlNmJ0RqXSW6E0u0Elu/Wt=YWYEYJxib=bG6JxGPXls6WOMQXlEU=lsAW0WD=lsQJ0=UESNv=bsxEtWDWSu6JlEb=SFxJYJDEbvbJlueWSE1WxFDJx1eWtp1Xl=UWlMDXlE1Jx5mXtsAEOuAXljv=tuAWtjbEbE1W0j1WbEmEYRPJbM6W0RP=SGQXtivEtjb=t=UJljYE0jU=ljbW0=UEbJ6WSwe=YjbWxJQJlEvElsPESW6EOGPEYRQExiUJS=YJSu0ESw/Wb10WSE1EYu0WS10JSGQESWD=bWeEYuAEtE1=SNvXSGx=bU1WbWPESibESwe=timWljYJSvbEOs/WbwQEOHvJxNY=lWxJbjm=lW/EYjUXO1qJSF6E0pbWOHYWtR/=SJQ=YJQJYNmEtMeWS5UXtWqJ0s/=bUm=YNmWbWDXOwx=O1AXOJxWYWxXS5bElEvJbuQWx1QJYJDXOGeXOvbElEmElueEOJDEYReXtWP=S=YWYW6ESUYJSH1EtsQ=t=vEb=bW0JqESWAXtseEOsQESGQWbF0EYRxWxuPWxHUEYJq=YiY=bjv=OF/WSv1=YJPJx5YE0NmXSivWS5vW0iUWb1xJ0jbWlR6XSNb=OM/JxMq=OpbJx=bEtjYJS5YXSR6WSRx=S5vJ0ux=lsPEbMDWSHvWORxJbGPWS=v=bReXOJ6=bjmWlMeEOHm=S1AW0Mx=bs/=Ow0W0WA=OJxXOvYE0s0ES5vWbNmWluDElNbWxMxEbJAXSUU=SF/EbRAXONvE0p1JxHbJb16=OsDXljbXtRAWSuqWbpvWxiYWlNY=bsP=YNvWxu0EbMQWYR6JxwQWxibXOpvXSweJSRQXS5mWbHUW0u6WSwD=OMAWxsQESuDWSjYW0JqXSsxWbjYWONmJSNbWtiYXOWxESsAJxJeWSG0XSUmJSw6WxwP=OiYJ0ux=OGeWlJxWxseJb1e=OwPESMAESsPEOsAE0M/WYjYEYW6W0J0EYRe=tWxEOvYExEmXtEYWSWq=l=vJlWx=OvmEYWqXSMqESHvWOF6J0uxE0jUE0JxWSGqWORA=S=mJb=1=lWAJxuxXO16WxJPWSUvXlsxXSU1=SW0ESG6XSF/=SJ6JxjYWSFqJbibESjbWSUvJYuQ=ORAElRPWSsAWlMeExF6EtpUXlpYWtsQ=SJA=Spv=bpvXON1EtivEbjvEbW0XOsxESFqEbpY=YRDXOv1EtWQWlN1XlW/=SNbWbJP=Svb=l=mXlW0JSHYXluqJbs0XtM6JlNvWOvmXO5vXSWAESsAXli1EtuDE0MAWS=U=bM6WYuAXSRe=YjYJljmJS=U=ORP=tsQJ0JQWbv1WOFqJbvU=SwDXSw/WxJDEOs0Wb1PWOue=SjYXSWDWbuPXSvYWSM/WOJQEtuPWOF/WS1AEYjvEbw6EtJe=tWDXljUWSMeWlsPJS51WxJ0=lWxWbj1EbM/WlpvExu/ExpvWxseESRQ=OHY=YEYEOs/XOFPJb10XOFxWtiU=tRDEOG0Wxue=OwPJYseEbRPJSWeXORPWSpbXOU1=SuPXORqEtEvESFAEl=Y=OFDEON1WSpUWYRQEtR0XO5YJxWxExwP=tNUXtsAEO=mEtMeXOHv=OFPW0J0=OpvWSuP=tu6Eb1xWlJx=bw0JbG0WbWDE0W/JluQExwAWtEvW0=mElpUES5vJYNUWOGP=tJ/WSuQJbvY=Spv=OEYWOuAJlu/EORqEbjYWYRQWYE1=OR/XtEYExUUJSMPJxG/W0NU=OM0ExWAEOsAWSpYWbwPJSweJbwDXOJqWxv1=tRP=tuqJSwxExEm=lMeESGAWSWe=SR0XOReESjmJSMqEOuqXSFQJxwxXlsAJxMx=bN1Wls6JbR/EOR0Wt=m=Os6WbG/=ON1W0s0JljYWbpU=bweJlMPEb10JbpUJxEmEtMx=tivESUbElJeWSibXSu/JSFPWS5mJxpm=bR6Exs/=OFPEbGQWx5UWl=1EYuxJ0RDESs/=SFx=Y=vW0NbWxsxWxRQWOwxWljb=S=1EbRxXtpYJYM/XOFeXluqXORqWOpbE0M/JbsQXSJQ=SNvXSU1ExJ6XOsA=ORAES1/=OR/WbjmWxvUEtMeWOpU=tMA=bMe=lN1JlJ0=tWxJYW0Jx1qWSEUEOi1Jx1DESGxXSvYEx=bE0EmWbjmEtRq=lWPEtjU=bWQWls6=YMPEOw/XtuxWtR0=t=bXOE1=bEYEY=vEYpmWlimJxHvJYi1JbseWOsAWx16Ex=m=tsQJlR0XSUv=Os0WluAJbHbEbueESEb=b1AWtM6WYNbExUmJ0W6=SGAWYR0WtsQESG6XSM0WxFAJljbJxJ6EbR/Xtuq=SEbJbuAWSJqWOiUJxF6Wbi1EtRqEOuxESWqEb=UE0jUEYjbWtsx=OivEOGqWxs6XSj1Wb=YJxM/ESvmJlNvEluDJx=UW0J6E0sD=tJAEb1A=YEmExHbWSuQWbjY=luQJ0sQJbwQElJeElsQW0=YJbw6J0J6EbJqWbwxWO10Jbuq=OWAEYuPESFQEOFQJ0RPWSJ/XSjUJxjYExjUWYuPEOMqXlsqJl=YJb=vWSMAWxJqESwqJSGxWbN1=SUbJ0s6W0WDEO1q=Sv1=YEvElRqWbHUJ0=bJxJ/Xt=mXtpUJSw/E0NvWSEYEbJ0EbuDExwqESFeEbG0JSj1=YJxWOFQWb=vEO5bWOFDEOEUEOjbJbJqJSMeXS51Jx1qESpb=OUYWOuqJSjUESuAWx1qW0R0WlWxJ0NYEYW6JbR/JSFxJbUY=bjUElMPESHmJSGxE0iYWbw0=YN1EtMQElWDEbGDWlJxXtu6WtNvJ0RqWtpmWSw0XOWPEOpvEb51=lpb=OiUES=UWbW0EYWeJbHvJxu/Wx=1JxM6XONUXSJ/WxFD=tjY=YJ0Wx1xEYW6WOiUJbpvWOwxWlueW0jUJ0pYExN1ESJ0WxNv=Ou0JYJqWSEUXOwDXSM0Jxs/=O1DJYW6WSHvXti1W0RQ=bMQWlj1ExuA=SUUJlue=bw6EbJ/JxweJ0RQ=Ou/EbH1WOFQ=Ss0=lRQXtsQEO=bElW0JbNYWxuDW0=vJxMQESMPExvb=lJ/WtWeE0seWO5v=OGPESu/WtEmW0MDESvmE0jYEl=mXlR/=O1eEt=1ExWqElpmWSMxElu6Ebv1XSWqXOjbJbNv=S5v=SF6=YJ6WtWQESj1WxG6WlJeWtRPEYimJYMxXtMPEOWDESivEbNvJY=1EO1AJbMQXt=bElNYEOEUEx1xWSs6WSH1=SJDJxs6WlRqJYWDWb5vJbJ0WSWq=SUmXSJeXtuDJ0WqWYWD=SGAEtueESiYXlpvJS51WSRDEYMe=Ss6WbMeEbi1WYWeXS=vJbNbXtNvJ0sAJljUXtWPWOWQ=bG/ExRQExEbEliYWlsPE0pU=b=U=SsxXOjmE0NmWbJ/WbReWOGeWls/WYu/XSJ6JS1q=YWDXO5vJS16WbRqWOEYJSuQXOGDJxMeWtJeJlWPElsxJSwPJSHvWOHbXOGq=bJ6EbUmWtsqEYEUJSJ/EtRq=tj1JSWP=YW0WYuQEYEvWSU1ElR6Jl=vWxW6EOs6=S1qEYuP=bJPWbuAJSuP=lsPJbu6EOFeJ0WAJYJ6J0pbWSsAEYu/ExuQWlEvEtJeExwxEbvYEO=mJluxXOuPESs6JS=v=YW6Wtu6JlRxXSMDJ0ivXOwPWbU1JbRxWOWQWOu6=bp1WOsAWli1W0pYWYW0XOpmWbHU=lNb=tpv=tsAJYjYXtNvWYN1Wxs/ESpUEtj1ExsQXSseEYRxExivElR/=OjbWYivWYpY=OsA=S=mWO=mEOjvEOEU=SjYJxWPEbFqJSJAJSJD=SMeJxpbWOE1JSs0XlNv=tMxWSH1EO=YWOFeJbMQJSw6JbRq=OF0EbUbJYuDWOu6XtMDExweXtMA=lR6XtpbJS5b=YJPWxjYJbwqWbi1JxRQWxUmJxR/WOj1WOimJxNUJxGq=tuxXlsDWSsP=bjbXSNmJlu6E0M/EO=bXtuqW0ue=bseESEU=SMAWx1qExN1XOuPJlEYExueWlNUESR/=bs/XOsPJYWe=biUJYuAWYRqJlWP=b5m=bFPJ0W/XOw/WxNmElWe=ORqJbMA=YEUEb=vXlpUEbHmXOW6WtRPW0s/EOE1JYiY=bjYWOHmE0iUJS5YXS1/WOuPEb1q=OpU=YN1JYse=SWDXSseJ0WPWljvXOJDEtR0=SHUXtW/EbHUEYNvW0s0JS5v=OsqWlJAXtj1J0MqWSEYWSimEOwD=lW0ESNm=tuDElsP=SNY=Os0=OGqElR0=lEYEbEmEOWQWbj1WlsDWOHY=Y=U=YJeXl=YXt=UWOHUEYMqEOFQWxuxExMeWxW0XSp1XOweXtNmWSEvWOReElMDElJ/JSMAXSEvE0pm=YRPJxw/ExpUXOWe=YW6WxR6JxwAXOvUJxE1JbweJxFQXljU=OwQJbRAJYu6EbFAJlJxEOjbJSse=bN1WtpUWtu6Elj1JSMAXOJqJYjv=SjvXSjmESsDJxiY=OjbWSwQWOGQXlR6EOWq=OUv=SpUJlJQXSu0=SJPWOWPEOuQWbGAW0iUWtJAXlR/WOw6EOi1ExiUEtR0ESJqJxJAJYNmXO=U=bw0WxEYEOuxJxEY=lW/Jxs6WYpYWOGAWbWDXOR0ElEU=SEvEYJqJluDJSs/JxjmXtRPXtRqEO1PWx5mExWqJxU1=lWx=YJDE0iUXts0XSu/Jxsq=SHbWt=1=SwxEtJPXSFA=b=YESFQEbM0EYuD=YuPJxUUWSJxWbw6=OpbESNbWOsqJxE1WS5vExGxEOG/JSGAE0ivEtuAXSpUExseJx5YXSsDJS1eWbsA=SN1WYiUWxRAWtsqEls0EYNUWxF0EtJeWtJxWbw0Jbs/Wlu0Jx=vJYRq=SReXSsPEOG/JYWA=bGQWY=vWORPWSJP=lNb=tEvXSueWls/XOMeElJxESw0JbF6=b=YWSG0JxvYXlWAWYNmXO5UJSFQElsQWS1qJSsDWYW/ESEY=bvmExRqJxRDEbwQEO1/JSuA=SG6XSjb=Sw0=SJ0=YW6=S=1ESHvJxF/ESNvWlux=Ss0=bwxEOFPWbNUWbiU=ORQWbWAJx10JSHb=YJ0JxGQEOFDJYNv=lW/WbGAWOuAXOFeWlsAXtJ6XOsP=OMqEbUUXl=bJSWQJx=UWOjb=SWPJSEvXlR6WbwxWlM/EYsqWSsPJSsqEY=v=bvUWOvmESFxJ0jYJb5bJxNY=lMqJYuQExUvWbFqWxsqWSN1=Ow/WlJqWbw/WluxXSu/WxRDEYRPEYRq=Yu/ExH1J0sDWbHYJxGQEYR0EONYJSu6JSimJxsDEOUYElEmWxWxWluDEYuPEb10=Su0WbH1=SJQE0jvXlRxEtp1WOuQE0ueJSW6WbwxEb=bWOUvW0WPWYib=lMQJxHYWts6ExHmJbUvXOJPXtN1WOuxXtEmWSuPXtpvJ0s0=Sse=t=1JSpUElRqJbiU=tEUWbwxJxMPJ0ueW0u0WbW0WOW/WbFxES1PElR0JxRDJbWQWSuQJYRQWbuPEYWqJlsqElsPEONYESuQW0jU=bJDXO5UEOUmEOHU=O=Y=YJ0WxwQEtuAWS1Q=YM0=ls0EOiUJbNbJ0pmWtWeEYJxWbsQES1PEOuDXOM6=bibJ0=vWO1QWtuQWtjUWtRxEtsDEluqEx=v=bMPWSu0J0J/WxueJxU1Ex1DWtiUWbw0XSimWOvYElueEYM/Wx10JSpmEbvYW0pUWbJqXSFAJbW0=S=UJbUb=bRQEtu/Wtu6EOi1XlpU=Oi1=bFQ=bR6Wbpv=tM0XSJPWOs6JbFAWbEYElMPJlJAW0EUJ0WPWlsA=bim=b1QW0uPElMAEbimJ0iUXSpYEts/=bwx=YMAEluDXlJxJlMAJxM6Jx=1JYRPXSvv=bJqXSs6Els6WxNb=YsDEYNmExwqESv1JSMeJ0NYEtNYWbHUExsQ=OG/WSN1ESsPJbGDW0MxXlM0Wtuq=Sw0EtWxEtseWYsqEO1x=tRQWSpbJb1xEbsxJSF/Ex=UEtR6=SimElWQ=bwQJ0R/JxsPWbFQESE1JSUU=OimWlJ6Xt=vWbHYWlJPXtimWxMQEY=UWxR0EOW/EtWQEbvUWO1PESUbWbsqXOuPExMP=OMDWxG/JSMDWOHbXluxWbpmWtsDEluPJYNU=OEUJbFeXSNUEbvbJbJ/Ex5vEls6WSRqXOs/WOjv=lJ6XlpvWOvm=bWxXlJAEO1Q=lWD=tMeJljv=YWDESJDJb1DExN1XSR6ESiUWxJqWSu6E0MP=Ou6EbpYJYs/JxWDExseEORDExj1EOMqWYsqEbRQExEbEOF6EYs/EbU1WtW/ESi1=SMqWts/XtEvJ0=1WOWAWOJPJbvYElJAXSUUExvYWxpmXtWxJSWPJYEvXOMPJSEUWxHbXtJ6WtW0=YRDEls6WtsqWbJQEYR6Wlse=b5UE0JeWxWeWlW0WtNv=SvUEOFPWYJq=YsDJ0NvWxMeJlibE0MeEOsDXO1PWxM0WliYWSu6WOw0XlRPWOE1E0JPESRQEYNbEONmJY=1JbWD=lim=lMx=tu0=OWQEOGQXlM/Jx5bXtJAJxR/EYu/WS5m=Yu0ElpmWbJAWlseXtu6ESu/WYjm=lu6ExGeXSjmES5U=ORDXS5YWYiUWSMQ=tpbWSvvExsPJSjbJSWQWOwP=YN1XtjmXSWxWO=YEtuq=OuxEtW0W0=YXlRPJ0JDWtE1XOWqJYsAEbMqJYjY=SGxWxNm=SUbEO1AEb5bWtp1XSJxJYjYEbuQXlE1WtpmJYp1WxNmWtjUWx5bJx16EOvYWtEU=SGAJxHYXO16XtRPJYp1Jbvm=OWeW0i1Eb=m=b5YXO=m=lWeWOu0ElWA=SsDWlsQJb=UXSR/XtuD=bNmWxHbWOvmWlW0Wx5UWOiv=OjYW0JxJlMAEbJx=lsqWOsxWOJqWx=1Exj1=YpUJ0EbEbEYExHUJbMQ=lJQEYu/=lJP=bvYEtEYJbU1ExJe=bv1EO=vJ0JDExGDEYj1J0EmEljYESRQJbRq=OHmWYJDW0=mWSuDWbivXtpYJxjvWxWqJbp1XOJQW0EbXOEUXOw/=bJeES5bXSJDEb1xEl=vWS1eWONUXl=UXSRA=b=bEbJeWlRQXlW0EOw/=buqEOw6J0ibEb16JSJ/=t=1=SGDWbGxWbNvEO=vEts0=lRqXSH1ESMqW0=U=YRAWtRA=YEUJSuQ=bGxJlsPEljbE0u6=b5mExRP=bWQWOwPJxH1Etu6JxWDJSvmJx1D=bvv=bNYWSsQXSFeXluqWt=YElMeWtMq=OseESFDXSU1E0J6=OwxJYWQ=t=Y=S1qWtEUESRq=SFAJbNb=lj1WbvYXSWDEtWDJbEUEYi1Jb=bWbG0E0uqEx1qEYJxJSp1=O5UWbvvJbJPESFqXSRQWYuDES5bWbMQXO=UEtWxWbw6=Os0Eb1A=SGDJSuAW0EbXSpbEbMPJbW6=SJeXSR/=bFAEOM0JbsQJSG0ExRDJxF0=b1/WSFAXSuDW0NvWxEYE0WDJxR/WSvUXSvvEO5bJx1/EONbJYWQWO1DEbs6WSuQExuAWb1xEtWAESWqXlWD=lRAW0MeW0se=OEm=tpUEOE1WxvmEbWQ=bG0J0RQE0J0XSReESFe=tsq=Sj1Exu0EbN1JxpbEOEbXSvY=SiYXORx=ts0=Ss/JYpvXlRD=t=vXSwPEY=1XOiUXlsAJbs0WbwqEtWx=tM6J0NYWtJ6JlJAWlNmESJq=bu0WSwP=tJ/WOwDWx5vWxNmJSGAExFPWxUmJbsDJSEmXOWDWSimExUvWxJe=OG0ESHU=livWYjYWt=m=tivEbjbWSHvXSReW0J0=bJDEOEbWtuPJb1qESJ6EOibEYMAJxE1JlpU=OM6ESiYEbuPWYsqEYRDJbR0ES5b=bR0EtRe=YWPWSUYExu6EbE1Exuq=YsPWbW6JxWAEOJqJSibXOWAXlNmJYMq=SiYEtRAElMQESRe=OMxWb=vWx1AJxsDJ0R/WSWQElNmWSJ/=tpUExMQElRD=bsPWx5bXluq=SGQ=lNUEOpvWts6XONbWSReExi1=bu/WOj1ExEU=OEbXSRA=ONYJxp1Wt=UJSUmWOM/Exw6XOvvJxHbEOvYJxsqEYux=OReXtsPWl=YWtRP=SHv=bu0WSuQWt=U=bv1WxJ6WSu6XtJeJxMPWSFqJlR0ElWDJYMDExW0Wx=UXlu0E0MAEtuxJYsAXOW0Wx51WxMAWYM6XlR0Exs/WOweWtM0E0MqXOMeWtJQESF0JbuPJYRQJYJxEOM0Wt=U=bJPJlJq=bNmJSjYWx5vJ0RPEbGAWbF/WtNUXSwPJbWAXSGAEbH1Et=YXtuQEOJeJS5vWOu6WSGPJYsQESFxWlueEbi1ElR/ElWQXOvYJxG/W0MQJxNm=bF/Jlp1WlEU=ljYJS51EbGDEOR6EOvb=OsqXl=b=lJx=tJPWSpvWbJPJb10=YsQ=tuQElRDEbFeWtMP=bUmWb5UJSuDWOjUEY=bXSim=SiY=bMQElW0WS1DEOM6WYibEOJD=bGAWYWAWxEmJxGA=tivXl=YWOHbESFxJlJeXS=b=Y=UJbJqJ0MQ=YpbWtuAXlEYWYMPWx=Y=bw/El=bXluDXSUmXSMPEOiv=YsAESJ0XSNbEbvYWxWeWxiv=OHYEYWqE0sQWYN1EOjb=S1DJx1P=YJDEYseWSuDXOuxEbJQ=bHYJSv1=SMxWOivWSNUXtu6WOpvElueJxpbXSMPXt=bWb5UWx1PJYMDEliYJSRxWxReXlpmJbWA=lR/XljUXOGQEY=U=bvYEbMQWtJ6WYReWtWDJSs6XOuP=YJ6=tuqWxWq=O=UWxJAXO1e=lRDWxJeXSwPW0p1WOJeWxi1=t=U=bGPWxJ/WtuQ=bF0WbpUJxsDXSJ6ElE1XSpYExN1JSJqJS5mWOJPEbN1JSN1=OivWbUbEtR0=tMQESwQJY=b=Ov1ESJA=bGxE0uPEx1PEb1eWYRDXSJQW0JxJbv1WYiUJSFeJYNvWYR6WYJPJbux=lu6J0MqExFqJSvbExjmJ0WPXSG6EOsDWtRQ=OuxJYEbWSMQ=OJA=SjYElRe=YMDExiUJSU1W0sPExsQWSF/WxW/Xtux=OJD=SRPWxMqW0jUEtpvXSReW0NmWSEb=YNvXOsAWxGqWbpmESjbWxMeJSUmWOJqJSEvEbNm=OUYWOsPESMeESuqJ0WeWO5vElRAES5vWb1qJ0M/JSG0EtWDEYuPWO=YE0WQWO5vXSWxEtNbJls0WxwQJx51WbRAWOWeXOu/XlRPJSimW0J0WONvEl=vJbwAJximJxWDXSRe=tuA=lRAESwq=bGq=buQWSFPEOUbXtpb=Y=1WS1q=OimEOJq=SEUWOs0Wljm=SW6WSjUXSRQWOWeES5vWxWAWlRqWluAWxwx=bFPJxweWtuqEbseXOjbWtsDExuxEONmWOR6=luAJb=U=bvUW0sDESFQW0RDXOUvESFq=Ou/Jls0Wb=1=bjbJbEYEOw/ExF0W0WAEO5v=YEvXOFxEtu/JSJQ=bWe=tjvJls/Ex1AWS=YEYN1=ljYEOGeWtR6JYjmJlu0ExMP=bJqXlsx=buPW0M/WlJQ=lu6ElueJbw0EtR/XlJAXORAWO5UEbw6EOpYJ0jm=OvUElRAE0i1WbR6Jb51ES1DWlRqJS1eJYJD=OFxEtj1WtWeEO=1WxpU=bivJ0u0WYi1EtJq=YuAWxJ0JSGx=tW/WOReJ0pvJxue=SiYEtuPWluqXtimEYMPWxwAEtWqEYsPJxG6JbMP=bu6WxUvWbuxJbNv=bGxWtN1EONY=b1DXljYWb1PWS1AEOM0EO5v=YM/ExM6WSHmESJ/EbwA=SvUXSMqEtsPExsPJSuDES=YWYWeExR0EbMDWlEU=OseWOHUJxHbWxv1JYp1ExvUJb1e=bU1=SRP=Os/EYi1EbE1JlW6=S5UXOJAJlRDWxNmESWx=bEYJli1=YJDJlRQ=ljbJYsQEbwDElimWxwAEbUbXSvvXl=1XOFDWOjb=bu/WxJDJS1/WbFQ=bUYEYu/ExF0ExUUXORDEtjvWbFPE0i1=tJPEbFqWYs0EbEbXSG/WtsDWxEv=bHv=bpmWxpmJbpYElM/=SjmJ0uxW0J/JlMPES1AE0RDWOjY=OivEOueWtJDXlimXts0EOu/WtW/Eb1QXSEYXSNmWO=v=YjUJlR/=bFxJljvJSMxWbWPEOM/=OHbWbw/J0JPXSjmXlj1XlM0JYjUWb5vXOM6WOGPJbpYEbwQJYjU=ljb=bFeJ0WxE0ivExuPJYRe=bGPJYuPWtMPEljb=tsqWO5b=OFPWYjv=OHv=bwP=bF6JlJDEYWe=YM6XtsAXtW/WOGeXOvYWSvbWSiUWSjYESjU=luqE0We=tM6Wbw6ExRq=OuQJbvmWlWPJ0NbWYiUESJQWbM/WlMqWOHbEYR6EbRAEYMe=lReXOJ6EbwqXlJAWYRAXSFeEYM/=Ss0WSM6El=b=O1DElivWSs/XSwP=tuAEtEbJbweXt=1E0JD=bsQWlEvJxvb=tJ6ESu0XSEYJYpYWSi1=tJ6W0uPWxFqXlMeJSw6Eb1PXlueWSuxXtpU=bJ/JYpmWOR/EbHYXtsDWbjbESNUExRP=SwPWxuP=S1DWOJeJSEvJ0u6WlivWSibJ0pYJSJxEtsDWbFxEONbESwQEOF/=S51WSseWbMeWtNvJY=v=bG/JYuqWbMPXlR6JSu0WOpUWlivWON1JYMQ=bHmExJPEbMQWtJ0=YimWbG/E0W/EbseW0EYXO=bWt=1ExGQWSuqXOvvES1PWOHbEtM6W0sPJx1qWSvvJx16WbjbWb=mW0ux=OEUEO5vEbRDJSRqJbNbE0uPEx=Y=bJDWYJxEOuDWt=1JxJ6WSs6ESWPE0W/Wl=mEbW0WYJ0W0iUWONbWSjb=O=YWOib=OMQJ0=U=Y=1WSRQWYJ6XSuqEbux=Y=bJlMD=OMQEtJ/EO1e=tReWxEUEYRe=bjmJbW/WtWxXO1PXtRxWxFeESF/WluqWSJ0WSWDWSMeEYJeJl=mJxW0=bNUElNmJbFDESHm=YWqWxvY=bJeEOFQEOpvJxUU=O10=tW0Wx5vExFqWlEUEtuDEtRPES5m=SM/=ljbJlMDJ0RPWlM6JbsQE0im=SMxW0j1EO5bEtMA=bMP=SR/JYu/XlR/WOuAXSpvEb1eWO1xJSJxJbHb=YRD=SWeWYjYWOHU=Su/ES=Y=YsA=bG6=bsA=YpmJbw/XONY=ORA=lE1ExR6ElWeXOpYJxWqXSU1JbEm=ORqXOsPWxW/XSWPWxpmJbibWxR6XSwQWSWDXlRAWSFQ=OF/W0NbEtsQWOiUWOw0Xts6XS1PJSJe=Yi1=YuqWbR0JxWqJxUUJSJeWSJeXSEYWSiUEtMPWSjUE0EUESsxJYEUWYRAJlMAJxFDWtR0Wtu/JbRPJYRDESJ6JYJxElib=bGxXO1PEOFeEOuxXtEY=ONv=OvmJ0JPEOp1=tWQEYMQXORqE0JxWxGAESjmXOFAW0p1WSwPExJA=SF/EYjmES=1EOwPEbGDESFxWSsq=S1x=Yi1WxMeWSsDJx1xESFeWOjmJxMq=bF0WOG0WOuxWlJeWSwxXOwqWYJ/JxwDEOvmWxM/WSs6EO=vJYW0JbWDEbwDWxWDEbJqEbG6=YJxESHbEOGPEtuqESRqJb1e=bv1=l=mJxjbXOw0WOHvE0WeWOW0E0sQJxRq=S1PWxvvWtRDWOu6JYWqWSpb=bMxJlMqWtsPWtpUWOux=S=bJ0jbW0MPEOuA=OM/WxpvWOu0XOH1Jbi1JluD=b1eWOF6EYuPJlpvXlR0=tNmWbHYJSEvW0jUJSWqXSNvWbjm=S1/XSF6XSsPEbpbXSweEOu6WxNmJYN1WtseJYsqWOimWbEvXS16XtMA=b51=tW/EluDJ0pY=SF/Xt=UWlpvJSMeJ0M0E0JA=Yp1WOw/=SGPJx10JSJDExw0Exu/E0W0Etj1=b5vWtp1J0sxES5mWljv=OW6JliY=OR0JYsPE0WqXlM/JxuQWtseXSG6E0JDEtu6W0JAEtM0WtuDWO1P=bGQEbwxE0s6JSwQJxpYEY=vJSiYWYu/=Oj1ExvbESEmJSRQWxwAWSHUWxHbJbJxEbsPESuqXSjm=tNUWlNmXOEU=YuPExuqWlu6=lWeXtimXSFQ=SWAXlsDWb1DXlWeWxu/WSiYWOG6WOR0WSF/ElWQWS=U=O16=OReWlJ0=OpUJ0uqEOpm=tMAWbjU=SNvExjbJb1P=SJxXOjvEbu/JlsAESWP=SEvXt=mWxuD=tReEO=YJSs0=YJ0EY=bWYJ6JSUYEYNYJxpm=bJPWbWAWbjmXO5YElWxExMxEOMqXOGeXSsDWb5m=t=vEOvUWbs6ExwxWtjbXSFqESRDWORqElu0WSG/WxGAXtJ/JxHvExw/WYp1EtseExM/EYjvWOUYJYR/XOvYWlsDWtpbWO16JSivEbF6WOJQESivWOvvWxR6XSG0JlW0WSvm=O=vXO1DXtMPJlsAESw/J0pbWxseE0ueESRqEOvmEYW0XOMPW0uQE0NvXtu/JxEY=YWPJ0uPEbGDXl=U=tpmJlWQJ0EUElNYWb51=l=1WYsDWSF/XSHUEtJAEtMxJ0EYEbFQ=OJ0WYiYXtsD=ORDJSUbJSNmWxjY=SWDEtMQWON1WYuxXOueWtM/=YEY=bu6JYu0Wbs0JluPWbMeWOjbWlJ/XSWQXSs/WbjbXO1PE0JqWO1PJlJ/WbJeWx1DEOWx=OWeWYiUJSwP=YR/EOWPExReWtsxEbvUElu0Wx=UJS10XtpUJbFAXSw6W0p1XtJ6EbwAWS10WtEbJxFeXOwDJSEvWl=1WxU1Jb1xXOMx=OEb=SFD=ts0=SuQXOsP=YW6JxJ0WlEm=tueEOJA=bGP=S10EbR0WOJQWtpvXtivWY=mWxF6WtJxWbsAXSEvWOGeWtJ/JxvmEY=1JbRQ=tW/JYRe=SG6=tR0W0Rq=Yu0WxFP=SJqEYu/EYpb=tMx=tEvW0uQEOGAESsQWOsAWbuPEYMD=SMqW0pmWbEmEOFxEliYJbibJ0ReXt=m=Sp1WOweXt=bW0M6WlM0=buQ=SH1JbWqJSpmE0Re=lEUXtJAEOGAWSUbWbMPXSuxESGPJ0jv=bWeJxw/WSMx=bvYElsxXOHY=OJxJxR/EYue=tJ0Jxu6XtsDW0NYEYsDWOWDWb1eJbMPWlMxE0pv=Op1J0jmJSuAJYWqJSvvJYux=S=mWxR0JxUUJSHmWbs/XlJeWS5YEOi1JS1AES=vExRDE0iUW0pY=bUbESpUEOR6WxJ/=lpY=YRQ=OjbWbiv=lMxXtWPJxJQ=ONmEbHvEtuqJlWAW0J/=bJ6WSNb=OpvWOUb=OimEbsA=b1DJ0NmESEvWtWD=OFAEYMPXlimJljvJxF/XOF/WtpU=S5UXlJAWOu0=Sw/WOM0JxF/JbGQWSs6=bwA=SGeE0u6WOFxXOwD=bUvWxHUXSRDW0N1JbNbXOwqWSEbWOWxJlibJSFAJYs/W0E1XlRx=Sp1=YWAEYJ/WxJQJ0WD=bNb=bib=bHUEbUmW0M6WxR0=t=U=OvmJYsAXliYJ0pU=lEbEbFDJbHvWSJ6ExWqES1AWtjvE0iUXSivJ0=UJ0jbEY=vJ0MQJ0EmWO51XSGeWSGxJbWeWSuQJ0RA=OHU=tReE0WeEbueJ0uAWOMQXls0EYpbJlWA=YM0=SGeJbRA=tJ6JYJ0WYWP=bJ0Wxvb=Ss/EbF6WOJAEtR6ElEmJxFQWbEbJSv1JYsQW0M6XlimXliYEt=1WO1/JYRQJxJeWOpmJ0JqEOFQJYpYW0uAEYp1XlM6WSiYWluP=tJxXOW0WtW0WOs6WlsqWbJ0WbGPWOWe=tWeWOW6Wls/=SFeElJQXtuQ=liYWS10EbsAWxEvWx=UWxsxJYimXSJ6Xtjb=YR6=lNvWSJqJ0N1E0=vEOHmW0WPJxG/=luPXOu6XSu0XtWAWxwQXSMqXSMDXtjUXS16WYM/JSweEbw/=lNU=Ss6=bFxW0=UWbJ/=SRqEx5bWYimWO1AJYu6E0uDJ0=1W0MDEYEmWlpbJbRxWxF6=lEbWSsqEbi1WlMQXOJ/WxJqESHYJlRQW0EvWOuAWtMQJbJA=SRPXlReWbu6WSJ/ElNU=SJAEbU1WOw6=SE1XtW6ESvm=Ss/JSR/=OG6Wxs6=OHmWSRDXO51EYEvE0s0EbNYEOs6XS=v=lMe=YEvJbsQJYivWOs6JbwDXONYJbFeJbG6WOv1=O1QWbsAElJDEYjvJSw/=lEvJ0MQJx5U=YJ6WtjvXOWeWlRxXtueWbvm=YRQWS1AXOpvWYseEOFeJlJx=S=m=OW6WxvbWlpmW0J/EtJAJ0pUJSF6=b1DElMxElimWlNv=lNvWSWQE0p1Wb=1WS1eEbJD=bEbW0MDXtRQJbFeXtR6WSJ6=tj1JxuDWbJqXt=UEOGPElJeJbFAExEmEbRQ=O=1EbvYWtsDWSiY=Ow6=S=UXtpbXSwA=OEbWS5YE0R6=OUbJbvvWxHUE0s6EbGe=bsQJxN1Wx5mJlWQ=Ou/Eb5vWONbWOpYEO5UEtuxESu/JS1q=ONYEbHYElu/XlNbEOjYJxiYWb=vXS1AWxuDWbuP=tjUElsPExWxExGxE0MxESv1WSpmEtJ6JxUbJbsxE0uqEOWxJbu/WtEUJxW/EORP=tN1=bv1JS1qE0Je=SvbXtEYEONbWSs6ElJ0WxG6=tuQXtWQ=luxJls/WS=YWSGeW0JQXOvmJlNYWxpbWtu6W0WxE0p1E0Jx=timJS16E0JeWY=mJS1Q=ls/JbUvWt=1WO1q=bWAWORDEbv1XtEbJxReESse=SJe=SEmEYibExWeJb5bXOJx=bH1XlJxEOM6WlNvE0MQElRe=YuD=OGD=lJ6JSw0ESpbXlNvWS=mJYu0=YR0=buDXSMqEYE1=SsPWt=1WOvvEbs6E0NUJ0pvJxGQWlMAWYjbWSG6WYsAWlu0XOW/XS5bEtJ0JSFxJ0j1EYue=tEv=lJ0JbR/WxEYW0MAWOueExsxJYMDEtNbJxG0EbMx=SR/XlRqEtW/=biY=YJA=SMq=YR6EluDEOWq=l=U=S=v=b5vEY=Y=tjvJbvm=lsxESp1XluPXSuDWbMAWtWAElWe=SwAEOF/JxJPWlMeJxW0Etu6EbFAJxGDE0WqWSR/E0JPJxMx=OGx=OWe=lueWYWe=Spm=OGQWYMAJYMPWbReJSMqXls/W0sqXSFeXlW6E0u/WSHvJYpYEO1QExHbWxHmXONvXOjmWbpb=Yu6JxFPEbpmJbU1EbWDXSM6ExRxEbG6EOj1ExWx=tJQEluDJbJDXS1DEbRAElRPWSUUWOvv=luA=Swx=OibExvmWxsPExvUESRe=lWD=ORqE0ivJxEYWxEmJYM/JxjYEYEb=bsxJYJQJYJA=bJqExvYWb1DWbsD=tWPXOwQWOpmWSRxEx1PJlRDExWQ=OF6XtjbXtWqJbsDEbJPWOweWSUvWtW/JSjY=OWDXSUbJbMq=OJxXtsDJxGqWYNv=SRQEbGe=b1/Wbj1JbWAWOpmXSuDE0u6J0EvJlNmXlEbEtJq=Ow0JYReWtsxWbMAXtEvElWQJS5bEljvXOF6=O1AEbGAXOimJls/W0iUXOiYEtWeJxFPXSim=t=1W0NUESJP=bsq=bpv=bEUXlRDJS=UEbvvJxF6JxGDW0WeJbR/WlMDJxG/ElEvWtsQ=bGP=SNU=SJ/JbEmEtjvJbMq=tsAJYWeJYM/JSu6JxsD=b1e=S=1Jbv1JS1DWbJ/=Yj1E0N1WOi1WtNYE0WAJYMeW0p1=tWDJbw0W0R6=OFxE0MqXtJDEl=UXS5vE0ue=lMeElJeXOWAXluPWtWx=YW/E0MxXSGQWluPXtNmEli1XSpvEbJ6WtNYESFAXOMAWYMq=bu/E0NYWxu6WbJq=SJA=bNvWxHmESWeJ0=UWOR6ExRP=b5m=bF/ESRxXOsDWOFxJbGeXtp1JxseEYW0E0RqWbvmXOUvWlsQElMP=lNUESG0=OiUWSv1=Opv=ljUEYW0WOs/EYu6ESWQExMAWOjbWONvEtJxExEmWSsx=OsQJ0Eb=YsDXSJqEbwPWO1/JlimEljYJluqW0NYWtuxWS1QEOM0WYibXSv1JYEYEY=mE0MDEOpv=SGqEx10E0EYWbE1WljbXljUEx1AWORxExM/=SGxEYJ0EtJxJlseJxW0ES=1WO10=Sw0Xl=1=bEv=tR0ElJxWSNbExsDEORQElN1JSGxEYpv=ti1EOwDWlu0W0R0WSF0EYpvEtMDJbpUWOFP=SwDExEYEbU1EbwxE0imW0RD=SRqESuqExjm=bHbWbNYWtJeXtRPWbUvXSMAJlM/Wbvb=tpmWSs6=lEmElJeXtsqJxw/XOJA=YR6=bUbEOM0WbiUXSsP=YRPWYM/ElJPEbEYWxEbJ0N1WxUvEb=vEbMPWONvWljUWxJ0WOGP=YM/=S5bWlsqJYNYXO1xE0Nb=bF/JxUvEx1AJSiYEbiYWYRPWONY=lW6J0WQW0jUJSwPEbp1EluqXSUmXSvYJbwAExHYXSGDJSRPWbsx=Sv1EOFDJbpmWOsPEb51=SuqWOEbWOsAExEbJYpY=bFAJ0MeESEb=Ss/EO5UWxiUJbRxWtiUWtEvESUvEbFAWxJqWSu6WOUm=bNmJl=YJbM0JxweWt=mEtJAWSFeJbjYExG6JSGAWtM/=S=Y=OimXOWQWSEY=S=1EOJ6=SJqEYsPEOWx=YR6JxJqEtueXtWeWbJxElEYWO5b=Ssq=b1PElsQEOJ0E0uPWx=YEb1A=S51WOimJSEUJYRqExJDJbUbESJP=lNYW0M/=tu0WSF6=l=1WlNUJY=bWxJ0=lJQJSjUWSvUWb1eJbuAEbHvESN1WbsPXtEbJSHUWtjv=bibJS1x=SF0W0MxW0s/WSGeWYseJlMQWxF/Wx16=YjmXtWQWlMqXSG6XOWq=bNmESueXl=YWbN1ExG/E0Nv=OuQEOMqJbw/E0EbWYuDWtMqWORxJxvmJYNYWOweJSG0=tEUWYimXlJDWSGD=bJq=Ss/=lRAEYMPWlEbJbJeEbRxESW6=bRAXSuAEYMPESMQW0J/=YR6WxNU=YimWlMeEtMqXlu0W0W/WbjYEYR/=OGPWOJQWtEY=Ss6Wx=vElJqWxMDE0R0EbNYWbMxWSFPWx=mJSMD=OEU=Y=mEORQJx1QJS1DJxseWbsDWOJxEbw/EbNYXSRA=YM0Wxw6XSM/E0i1WSFDJluxESpUWOG/EOMxJSGDW0Mq=SGxESM0WbGPWbJQJYp1=bueESs6WSjvWxFeWO=UJYJxEYRQExvv=Ovb=OvUWbMAE0JDEbwQEx1eXOJ0=O5vEbWPWbuDElMqJ0EmEtNbJlW6=bF/=O1PJbFx=tRD=t=b=tpmWbMqWlRPJSvbJbpUWON1EbvU=ls/XOwA=YpYJb=b=SGPEx=v=lse=O1eWx5vWS5UExw/E0R/XSN1JbJx=Yi1=Su0WSHUEtEUJbE1Ex=vWSs0J0ib=bWxWS1QEYNbJ0=UJbjv=OWqJ0JqEtJ6ExR/JYRxEti1W0WDXOM/E0R6EbRDW0J6Jbse=SH1EY=vJ0jvXlR0WlMqWOUbESE1=OJq=S5vEOH1=YWAWxsxESWeExU1WORQJS=YJlRqEOw6EYNm=SG/WOJ6JSWQJl=UE0JQ=tM0ESM0Wbw/WbwxWlJPXORe=bN1WbMAWtJQWxFeWlRxEOE1JSuD=ONUESsQJ0J/WlReJY=YWxE1Wb1/XlWeJl=UJbwD=YE1=YibJ0ReWlRP=OJ6XOib=OuAEbuQEOsDWY=UExsxXtWPJliv=S5vWtRq=O1PEtNY=bG0WlJ6JxGAXSpU=bU1JYJqXtWDWO5mWxMP=OM/WOJ/WlWDXOjYJSE1JSpvWOGqJSMDEOsA=OEUXOF6ESvUXO51JbFPJbvbWxRxWOFQW0=Y=Yj1JxM6=SFxEbib=YEUEbpUEt=1J0uqExwPEbseWtE1WbE1ESNvEbu0EbimJlNm=SNbWbwQEYNYEORA=SUUJ0sPWxpvJxiYWxjv=YNbWtNvWSFPJbGQXtWQ=bMAWS1qXtMPWbE1ESJA=lsqWS51ElJP=YMxWxw/WSiYXOHbWbG0Xtj1WYEUEbW0EYR/JbGeXS1PJSMP=bE1JxMQEOF6WSM0=OG6WON1WSM0JliYEYim=bj1EONbJbu0JxsAJSsxW0JxEbW0=YuD=ONYEl=UJSRxEYpUJxu6W0WAXlMxJbNmElpmWbs0=bs/Wt=1Jli1EbuQWS51WtiYWbMDWtMQEYpUWOJP=YNYWO=Y=YJ0=lWPWtNvWOv1=YNmWY=mEtuxJbRQExRDWbM/Xlu/JYsx=YEmJxW/EtimJximXlpvWbp1XlRQJls/W0JeEO1/JSE1=YiUEYjY=SjUEOUY=lsDEtj1JbWQWluxWSR6Wbv1Wx=v=SpmE0ueJbJxWbs6XOFxWtM/ExJ0WlMDJxsAJbRQXSU1ESu6Et=Y=t=UJlib=OW6WxWx=tR0WOW6JSR/ESRPJluqJbG6ExUbWlMeEti1EtpYElMqWtJqWlu/JbHvJxjbWYJQJ0Nv=tsxXSG6WlNmWSEYXSibJ0W0ESGe=livWSsDXts6WxEUEYuPJxEmJ0=1=tivWOj1JSFQWSs/EONbJlM0JYjvJx1DWtWQ=bN1=S1eEbEYE0i1Wb1QXlW0=YEbWSuqWYibWbEmJ0=mWSJ6Jbw0=OpvJYsQESRQEO1eXOHY=bjUJxWAE0ueJlMxWtM0XSW6WbJQJ0uQESsQXtE1=lWxXSFQXSN1WtRPXtNv=OJAWSJqWlM/=lWDWOivXSj1WlW6XSGA=b5YESJe=tMQEYpvWtpYWtW6Xt=vElJ/J0ReXtibWS5mExJeESNYExHbEbWxXSs/XtW/ESM/JYJDExEYElWDWOs6ESJAWYJ/=lJqESuqWlJ0Xtp1=SWDJYWD=lR6Jx1A=li1=lsQXlpY=lRxXSRqWOJ6=SGQJYJPW0EmEx10Eb=UXSM/Ebpb=lu/W0jbJ0=UEYs0WbWeWONv=tRAEb5mElEUE0iYJ0uA=l=Y=bvUExpbWOF0JSuAEOwAXS=vXSWeWbG6=YueJSjYJ0sq=bG0WSsqXOvvExHU=bU1JxF/Elpm=SivEximXOM6EORqWYM/EliYJlp1WYEm=SivJbRPXSNUXSweEOJDJSpY=OwPE0uxWbWQExs/WYNbXOjvW0jvEOJ0ExsA=OJqJlsPJlW6WxivW0=1EO=bEOJ/XSwqESuqEbsQXOMPW0NbWbHmJYJ/XOFe=bsqWxRqW0WqXtRDWtjbJS51WlRAExNU=bi1=tpvXSwQEOJAWxHmEb1eWbMAJlpUWb1xE0sDESMDJx5YES1/JbGe=OR6=S51EtivJ0u0Wx=bXSGPES1AEOuPJSJ6XSMxJxsD=S1PW0sQ=YNmEO10JbpUXSvbWbsQESH1WSvbE0ueJbp1ExNYWSvvEOU1=OF/=tjUWSG/EYibXOwxWbGPWO5YXSJAJSwDXS1/XlJAEOpUJSWeWOjb=Op1JbWeXOvUJYR/XSuDJYuDW0imJSsDEb=U=lJQXSN1=tMeJbFDWY=bWbHYEOG0=SNYEtWeWxRAExW0EbG/XlNUE0R6E0JD=SUmXSvvWOWeJxpUJbRA=OF6J0uDEtRDWOJPWlRP=tsqJSMDJSG/JbF/Wx1QXtu0WSjb=YJ0=tM/XtjbWSUmJSRPWOp1XS10WYMx=S1eE0WPEOu6WtMQEOGPJbjYJS5UJS16WSsDJSjvEOseJxRxEYpv=bUYWSG0ExuQWx10Wl=YJx1/=O5vXOEYXlJeEOMQ=OUUWSwDWOH1ES1DXlpvWSsqXtJAW0uA=lEUWS5UXSF0JYu0WYseElJqJYEb=OwxWS10WOReExJQWlRx=bMqES5UEbvvWxR6=OWPXSw6ExwqJYjYWYReEYMe=tRqWxue=SEYE0Je=SF0WOvUJ0uDE0im=SsAWxsDEOvbWSFDJ0u/=OEmJ0EvEOj1WbEmXS1qWS1xESRQE0uAWOi1WO=U=SW0ExUUJlW/=lu/WOJxWbuxWbvYEOvmWOu/JbGA=SJxWYRAEOWQ=bwAJ0WxWSs/=SUU=lJP=OvvXlpUXtu/Wt=1JbW6Wx5vJbWe=SR/EbHvWS10JYJDExu0=tM/WtJ0JxFx=OGeXOG0EOwPWYNYXti1WlWQXtsQ=bEvWtW/WxuQEtNbWYM6EOWPJ0NbEYMxJSNUJxJ/E0pUJbpY=Ou6ElJxJ0WxWx5YJ0u0JlMxEbsP=tiY=tpY=YM6W0s0EOJxXlpbXSWeWxRqEO=vJSjY=OiUJxGAEYsQXls/=OEY=OpbWtRDEbReWbFQJSReWOMPJ0WD=tJDXSRqESHbJbM6E0jbExw0E0Mx=OwPEYMQ=tWxWlsDEx10EYNYJbUmJ0Rx=OUY=SNmJx5YJSj1WljvWYibJljUWxuA=OJAXOUYWSs0EtMq=SE1Jlj1JlsQXSMQJbJQE0W6=SFeESJA=OE1JSMeJxR0XS1DWOEUWxGDW0MA=OuDXSU1EbweWbjb=bv1=OWAWxJx=bibWb5bEOuPWx=mJSWqEYu6EbvmWSvmWYsAJSJPWOFeExE1JxsxXOpb=SRDExwDXl=vEYpm=SNmJxWeJxRe=SMQWtpU=tEvEORDXtWAEtjUJxUY=SG/WxWPWYpY=bHYWxsAXSMxXO5bWx=UXlJeEORDJSRxXSUY=ljbWbJqWSG/XOFq=OFqJSsqJxReWb1AWS10JSNvEYNmXlj1=bR0=O1P=YWQ=bwx=t=bWOu/EtpbJYuDJ0MPJxRqExJA=SjYXS5vEtEmWSEUJ0uQ=liY=bsA=b5UWSRqEYs6JljmWYM6WxibXljUXtjvWYN1XSEbWbWD=bH1JbJDJSGAW0ibWY=UEOs6XtRe=O1xEOMPXOFDXOF6EOFx=Yi1JSEU=OsxElMAWxv1Wtu6WS1q=SwQEbR0EYpYWx1D=YimWYpmJ0R6WtJxJSvYJ0pYWlWQ=bwqJbweEY=1ESvYJYN1XtibWlJ/WxFxW0s6ExMP=OvmWxpmJl=mXOsAE0NmW0RqWxNbE0uQEbWqJSvmElMqElsQWS10Xlp1EbEmE0=U=tRxESwe=YJeElNm=bseJxjUWxR0EOvYXO16=SJAEY=1EtMQWbW0WO5bJSJAW0sAJbRAWO5mJbRDJbGPWbUYJSRPWbN1WOM6EYpvWbjvJxuQES1PWxivEbMeE0W6=SUbXtEUE0RqJSUYE0JDJxJqJb=vJ0W/Wx1x=YRqWSs6Xt=vEOuQWYNvXOFqXSWeWOFeJYi1JbNYJSM/=ORxWtE1XOMQJxR0J0jmJYpvExuxXOsq=SsDWbNvWYJxXluPJxs/WtRQWSw0JSuxJlN1WSU1=b10XO=mWti1JSJPEOwP=Yi1XSibXlW6=tWPJYiU=OMDJxF6JYJQ=Su/ES1P=lNv=Si1E0RqXlRqEbUvJxNvWYi1=bNYWbuDWxW/=YMqWOGx=lsPXSu0=Y=1WbwAXSJ6JYNmWlR6JSs/WxMQJSiUWSvY=lRx=OEbJxFe=SWeXtpv=ljvXlEvXljUXONb=bGQExjvJSsQXOjvJlp1=SFDJ0NmES1PJbivXlMQJbwAEtsxWOuPXSF6EbNbWSjUW0JeWY=m=SFxW0jmJb5mEt=mWxGQJ0R0JSF6EtMxEOGQEbMqJxHbWb1eJlpvEbJQElMx=bW/EbHmExJA=OiUWxweESF/EluqJxEbXOw/WORqW0u/=SJQJxwqJli1Wls6WlRqXtWqEtRq=ts0=YsDESHmWxJeEtNmExWQJbu/Wti1W0u/JSJ0W0=m=Ys0Exw/=Op1EOw/Elim=Ss6EOF0=S5UJxJA=OjvXOuPWSwxJxFq=tRxXSsqJYs/WONbJxjY=bNYJbs6WOFDJYMP=b5UJlpUESWQEYRPWOReEtiU=OMPWSJD=lWqEOR0WSivWOM6Jbp1XOUUEtjYESjb=OsqW0MqJYuqWYiv=lRe=bwAWxsPE0MeXOs6Wxue=ONYEO5mExG6Els0WxW/JYuAJSMeW0uQEbivEbuDESWDElN1=ORDXOsPExR0EOvbJYiUXOJDW0JQWxNb=tMPJSwDExNUXljvWlMx=Sw6WluD=bF0=YjbWYNYWtRD=liYWYJxWxE1=S10WSHmWbUmElEYEOMP=ORDJ0M6JSwQEONUJxReJ0NYWb=UW0u6XtjYESMQ=tJQESHU=buPXtJ0JlimXlMP=YEm=bF/WOGqWtpmXO5bExuQ=S=mJlMx=YJ6WOUYExRqJSJqJSi1WbFAElWPEOHmWSEvWbwq=bvUXti1WbiUWOEbXORxEOReJbM6Jx=vJYsDJbuqEbJqW0uPJYWQ=YWPWYEmEbsxEtsPXSpmXOsqEY=vW0s/J0RxEOFQW0=UWxwPEYWDJ0imWbpUWOHY=bRPWOWPWOEbWx1QXOibJx=1=tivXOFQW0uPWSjbJ0uA=OiYJlNbWYjvWtpbJbsxExse=wrrPK!ؽÍä+v+v"linkmanagerplus/images/sekogic.pngnu„[µü¤PNGiKHPRODwFYN38Pg4k0jqclpecKU/XQT1J02V8PRw7aGmR0pYEaRnBmp1=l=v5l/Dk0jb5tU48mG2RB5Y8aFnBmp1=l=v5l/Dk0ETJkix=kuw7aG3N0UC=t2PFqD/WbM/ixVIBYUYRBwv=leQ5K1Tij2SpNilpNi8iDvMNjHzNNEjMU2HpDNXNB55Ia1wcQTwRBGwiKNx=kiH=0NC5KWw7aHvF3ivcawmp024=0/URmQwRUEV5kiQRmQwR1eSS1i45BRVRBigJN2vFYETok=UFmRVRBi=Jl61=kwmLBGmMYjhJY/UFmRgXQTwRBGwolJwIsHQFYN3k0ev5tETIBF4iqGCRtUhFt/4=tMTiPQ3LBG15kEUF1j3=l6DFq1wLmG3L013LBG1keEjMU=jMUV3ajpMMj2NMDNakDjKpM6MieDgIaHnBmGwRBGwRBGwotNv=tNqIB5RNjpuLxsCWBGDWOuwSY2DRs=45l61iq1nBmGwRBGwRBGw=kvg5OVIRBGwRKDIzuTIolJwIBjU8kHDcaw1keEjMU=jMUV3ajpMMj2apM=jM1NaieDgRBJYRBjU8kHDcaw1keEjMU=jMUV3MDNaN1NakD6HSMM3ka1gRKVIRBGwRtUYRBwvFPpqFt2xIBpzMDNaN1Nalq5RNjpukeijp1NapNR3kaQwij2SpNilpNi8ieEjMU=jMU2XuMejieDgIaHnBmGwRBGwRBGwotNv=tNqIB5RNjpuLxsCWBGDWOuwSY2DRs=45l61iq1nBmGwRBGwRBGw=kvg5OVIRBGwRKDIzuTIolJwIt=e8YEDol2Ck0NAokEDFqw3ol6gkPEU5BFgIaHnBmGwRBHGol6gkPEU5Bw3=kiq8Piz8t23iqQwSUNWSB1nBmGwRBHGol6gkPEU5Bw38t23k0NqFY2qFqFVROGgXQTwRBGwutUCoN2x=kuTi0evcj2UctNb5kpg806z5tUh=aFVROGgXQg2BYUYRBvY5l6b5tU48U2UctUx5KWTiPEU5j2DoleUk0/g8lUDiq1gBmGwRBHGF0NDkPpg8lNz8tUhokuTWB1nBYUYRBv0=kixol2Ck0E48kHvFYMTFtvQ5YNqF0U48mwgLBG3EaADLbG3LBG37BFgIuTwRBGwuKEU5j2hJl5gJe2/5l2D=kEzF3NC5tUh=awQISVIBYUYRBvY5l6b5tU48U2UctUx5KWTi05U5j2hJl5gJe2/5l2D=kEz=PHbiq1gBmGwRBHg=mGT=0NDk0ev=0UbkPje8PpUFe23FtWTIa1wcQTIRBGwRBGwRBHY5l6b5tU48mHkMD2x5KigFKEVJkET=kWTitjqFYj6IaHnBmGwRBGwRBGwRBGwRKiU5KNq8mHgFe2vF3ivcaw1JkiqJk1gRO9wJkiqJkUz8ljQIB5kMD2x5KigFKEVJkET=kW3LBG1JkiqJk1gROTwFPpqokHx8tjxotNxIBpvF3ivca1nBmGwRBGwRBGwzuTIRBGwRBGwRBG1keH7Meuw7aHkMD2x5KigFKEVJkET=kWTij2uSeEMISVIRBGwRBGwRBG1kDE7SDhipaG2Rj5SSPEDFYUQF0/vF0vUFqw1kDE7SDhipa1nBmGwRBH2BwgY5l6b5tU48mHPF02W805g8mwgRKVIRBGwRtpg=awm7t=4FYDwJ0/vFPW2i0umRBAwJ0jh5kHekPpTclpU5Yjb8qGCRBR3RteU5tv4=OeQ8PED7b/g83He5BHDckHU7kHvFPEP8Pi1Rt6v8lM2FKFZ7tUCFKNDRKp6FtM2FPNm8lUDRK=v8KNU7aFZ7mFZ7B2Y8Pih7mRgXQg2BwgY5l6b5tU48mHkMD2x=kpb802dolMTitVVRBp0IaHnBmGwRBG1kDE7SDhipNV1oeDw7aG15bVIRBGwRKEU5tE480hg=aw1oqQwiKJgXQg2Bwgg=mGTRlNhFKp6IBpQ5q1gRKVIRBGwRBpb802dRODwFPNmFPpqIte1Eaw1keEjMU=jMUV3ajpMMj2RSeEMieDgLBGQLBGxISVIRBGwRtUYRBvgFPEU5Bw1keH7Mep8iPHPieDgRBJYRBvh=OMTij2uSeEMlq5Q5q55IaG27aG1FKFgIaHnBmGwRBGwRBGwNeE7F0NDJ024o0UUIBpb802dLBG1keH7Mep8iPHPieDgXQTwRBGwzuTwRBGwolJwIBjgFPEU5Bw1kDE7SDhipNV1J024oeDgRK/9RBvh=OMTij2OSD2LaMN8itE480h5IaGv7aG1FKFgIuTwRBGwRBGwRK5x8D/4=0UCIB1nBwTwRBGwitE480VqRODwFPNmFPpqIte1Eaw1keEjMU=jMUV3ajpMMj2RSeEMieDwLmG3=aFgLBGQLBGDISVIRBGwRtUYRBvgFPEU5Bw1kDE7SDhipNV1J024oxi5Ia1wcQTwRBGwRBGwRBpeFY/zJ024oqG2RtivF0M0Ej21=lE4=tMTFPpqFYN0IBpzuD27aDUjlqpb802dWUDgISVIRBGwRBGwRBG1=tjDJaG2RBF3XQTIRBGwRBGwRBHg=mGT=3NCJPpg806z=kvgFPpxIBib5kiVk0UCokumIa1wcQTwRBGwRBGwRBGwRBG18PHDFqG2RtjqFYj6IGTwRBGwRBGwRBGwRBGwRBGwueNaSs2uNj2apNpNM16MM1jXMD=jMmG27mHDF3NULGTwRBGwRBGwRBGwRBGwRBGwueNaSs2uNj2RpMjspNRw7SAw=YjVF0MVBmGwRBGwRBGwRBGwRBGwRBHONNiWSeHMkD=7Ss/7ND/7uDjMaM2XRODZRKpq5lMVBmGwRBGwRBGwRBGwRBGwRBHONNiWSeHMkDNXuD2saM6KRODZRBRmLGTwRBGwRBGwRBGwRBGwRBGwueNaSs2uNj2HNNp7M1NtpNijMmG27mHDF3NULGTwRBGwRBGwRBGwRBGwRBGwueNaSs2uNj2OSD6XpMEMNsUEpM2NNBG27mG/EmQIRBGwRBGwRBGwRBGwRBGwRsENM1/7MjpzNsUEpM2NNBG27mG/EmQIRBGwRBGwRBGwRBGwRBGwRsENM1/7MjpzSMjJM1NsaNiSRODZROsQLGTwRBGwRBGwRBGwRBGwRBGwueNaSs2uNj2SMD/zN1NaaM==MsNjMmG27mHYJl/x=aQIRBGwRBGwRBGwRBGwRBGwRsENM1/7MjpzMeEWke=jM1UtlMv7Meuw7SAw=YjVF0MIRBGwRBGwRBGwRBGwISVIBmGwRBGwRBGwRBGwRBpboBG2RtEeFY/zol6g5Bw15kiVk0E480VgXQTwRBGwRBGwRBGwRBHb5kiVkPEU5t2Q5j2vF3ivcaw1J0wVRBp4FKpxISVIRBGwRBGwRBGwRBGwitpv5tsw7aHGJPNq8j2UctNbIBpboB1nBmGwRBGwRBGwzuTIRBGwRBGwRBHg=mGTRap1JkpvIaHnBmGwRBGwRBGwRBGwRBp1JkpvRODwut=g8tNz=0NDk0E483pU83pxIBpeFY/zJ024oq1nBmGwRBGwRBGwzuTIRBGwRBGwRBHg=mGTitpv5tsgRKVIRBGwRBGwRBGwRBGwutN0JlQTitpv5tsgXQTwRBGwRBGwRBGwRBHUctUDXQTwRBGwRBGwRKDIRBGwRKDIzuTIolJwIKEDF3p48t2P=kRTFPNmFPpqIjHRMj27MqQwWBQwWq1gROD2RBiPolAmIuTwRBGwit2xRODwiP5g8mFnBYNVF0MIRBGwRBp4FqG2RB5Cokw3XQTIolJwIt=e8YEDol2Ck0NAokEDFqw3ol6gk05U5BFgIaHnBmGwRBG1F0jY=N2h80pURODwutUCoN23=kuTiPEv=YNz8l21=aFgXQTwRBGwitpgF0jm8tNz=3NCJPpg806xRODwutUCoN23=kuTi0pgF0jm8tNz=3NCJPpg806xiq1nB3DIolJwIBs1F0jY=N2h80pURBJYRt=e8YEDol2Ck0NAokEDFqw3=kiq8PizFYNQ8PiDol63iq1gBmGwRBHUF3i4FU2q=kH4F3pg8YFTWB1nBwgg=mGT=3NCJPpg806z=kvgFPpxIB53=kpb50u3Ia1IRBGwRBpT80eUk0EP=BG2RsH3=kpb50uTISVI=l/x=uTwRBGwitv48lNzJP51RODwutpgFY6v8lMTke2taM/jke9gXQTIolJwItUxF0NDIBpzMs2SNjV3Jq55IaGYimG1keH7Mep8i0W3kaGv7aGmRm1IRBGwRBpzMs2SNjV3Jq55RODwFPpqkPi45OsxIBpzMs2SNjV3Jq55ISVIBYUYRBvgFPEU5Bw1keH7Mep8i0W3ka1gRKVIRBGwRtUYRBvY5l6b5tU48U2UctUx5KWTi0ET=tUqiq1gBmGwRBGwRBGwutET=tUqIBpzMs2SNjV3Jq55ISVIzuTIolJwIt=e8YEDol2Ck0NAokEDFqw3=0NDJP51iq1gRKVIRBGwRBpb50uw7aHG=0NDJP51IB1nB3Dw=l/x=lUYRBvgFPEU5Bw1keH7Mep8i0W3ka1wimJwij2uSeEMlq5bieDwRSDwRmRgBmGwRBG1JP51RODwij2uSeEMlq5bieDnBYNVF0MIRBGwRBpb50uw7aG1ot2h=N2b50unBwgg=mGTit2xROD2RB5PolA3IaHnBmGwRBG1ot2h=N2b50uw7aHx5KizFYNQ8tjb=awmkjQmLBGmLqRVRBpT80eUk0EP=B1nBmGwRBG1JP51RODwFPpqkPiUFt/vJ0MTRU/FRmQwRm9mLBG1JP51ISVIzugg=mGTitEP=jhx5KiV=lATitEP=B1wLaG/kaGv7aG3LqFgBmGwRBG1JP51RBA2RBF4ixVIBYUYRBw18PWw7SDwiP5g8mFgBmGwRBG1Jl/xRODwJkiqJk1TBmGwRBGwRBGwR1/gFPuwptUq=lED8Pi6RmG27mGm=tUqRmQIRBGwRBGwRBGmpYUC=BHg8YpUcB6QoKGwolAwJPNqFYNC5BH1okRmRODZRBi1okRwLPWwLPFwL0Rwol61=kwCFtvQRmQIRBGwRBGwRBGmpYUC=BGfJ02C=YU3Im6QoKGwolAwJPNqFYNC5BH1okRmRODZRBi1okRwLPWwLPFwL0RwIYE48Y=g=qTCFtvQRmQIRBGwRBGwRBGmM0v45qHvJPpg5YMwJ02C8YNb5tU483WmRODZRBiC=kpx5tjDRBev8mRVBmGwRBGwRBGwRUET8PFwF3NC8YUC=qHx=ki0olEUFqRw7SAwRY6U5BHx5tjq5BRVBmGwRBGwRBGwRUNx=kRwJlEb8PNC5KWmRODZRBiC=kuw5kEUFmRVBmGwRBGwRBGwRUET8PFwJ02hFKND=kixRmG27mGm8YNDRK=g=kFmLGTwRBGwRBGwRBiHMUGwNtjm8tMmRODZRBivF3GwLlsmLGTwRBGwRBGwRBiiMBHO806Yol5eFYjDol2CRmG27mGmokHb806YolFwL0jV8BRIRBGwRB1nBYNVF0MIRBGwRBpv8KWw7aHvF3ivcawIRBGwRBGwRBGmF0v45qH4FtNC=luwFt2q5KWmRODZRBiC=kpx5tjDRBev8mH9Rt5q=kGwLl1w8tUx5tNCRmQIRBGwRBGwRBGmFKi4J0NxFqHx5tjD5kWmRODZRBiQFqHv5kwmLGTwRBGwRBGwRBiWokEDRtpgFmRw7SAwRY/xRBeVotsmLGTwRBGwRBGwRBiVokEDRt=g8tMwJkpDFYUm5kpUFqH48mHvRs/g83NARKEUJ02C=BHUcKpU8YpU=BHYol/URKE6FPpU8aRw7SAwRY/xJkpDFmGh5YsmLGTwRBGwRBGwRBitol61RmG27mGmRmQIRBGwRBGwRBGm=YUC=BHv8tQwFPNg=BHYol/UFqRw7SAwRY=g8YuwLqGh5KUQ=aHYRBeQ=kihRBDQEOGQWBGh8KWmLGTwRBGwRBGwRBiYol61RKEeoluw=YUV=kWwolAwJPNqFYNC5BH1okRmRODZRBiYol61RBAwLkp6FtMw=mGhFtNq8aGhWOuQWOGwLl/xRmQIRBGwRBGwRBGm=YUC=BHv8tQwF05g=BHYol/UFqRw7SAwRY=g8YuwLqGh5KUQ=aHYRBeQ=kihRBDQWbGQWBGh8KWmLGTwRBGwRBGwRBiYol61RKE3oluw=YUV=kWwolAwJPNqFYNC5BH1okRmRODZRBiYol61RBAwLkp6FtMw=mGhFtNq8aGhWORQWOGwLl/xRmQIRBGwRBGwRBGm=YUC=BHb806YolFCol6bL3HTFBHYol/UFqRw7SAwRY=g8YuwLqGh5KUQ=aHYRBeCJleURtE48Y=g=q6g8YWCFtvQRmQIRBGwRBGwRBGm=YUC=BHb806YolFfRt=g8tNxRmG27mGm=YUC=BG4RBeDckHURtJwLl6v8lMwkBib806YolFfkBRmLGTwRBGwRBGwRBiYol61RtE48Y=g=qTw=YUV=kWwolAwJPNqFYNC5BH1okRmRODZRBiYol61RBAwLkp6FtMw=mGh8Yjh=aHFRYE48Y=g=qgFRmRVBmGwRBGwRBGwRY=g8YuwJl/VRK5qokpvJY/URt=48tpUF3WwJl61Rt=g8tNxRmG27mGm=YUC=BG4RBeQ=kihRBDqRBeVFqRVBmGwRBGwRBGwRY=g8YuwJl/VRK5qokpvJY/URt=48tpUF3WwJl61Rt=g8tNxRtUCRtEeF3iU83uw=tUqRmG27mGm=YUC=BGCRBeQ=kihRBDqRBeVFqRVBmGwRBGwRBGwRY=g8YuwJl/VRKEUF3=gJ0MCFK51Rt=g8tNxRmG27mGm=YUC=BG4RBeDckHURtJwLl6v8lMwF0Nq5YUb=a6Q50umLGTwRBGwRBGwRBiYol61RKEUF3=gJ0MCFK51Rt=g8tNxRtUCRtEeF3iU83uw=tUqRmG27mGm=YUC=BGCRBeDckHURtJwLl6v8lMwF0Nq5YUb=a6Q50umLGTwRBGwRBGwRBiYol61RtjV8BGCoKpQJkEx50uw=YUV=kWmRODZRBiYol61RB9wLkp6FtMw=mGh8Yjh=aGCoKpQJkEx50umLGTwRBGwRBGwRBiYol61RB6T5KHvFPEP=BHYol/UFqHg8mHb5kiq=l6DRtpgFmRw7SAwRY=g8YuwLmGh5KUQ=aHYRBeCJleURB6T5KHvFPEP=BRVBmGwRBGwRBGwRY=g8YuwJl/VRB6mJkETk0vgFPp4F31w=YUV=kWmRODZRBiYol61RB9wLkp6FtMw=mGh8Yjh=aGCJYjxoj2TokED8Pi6RmQIRBGwRBGwRBGm=YUC=BGCJYjxoj2TokED8Pi6Rt=g8tNxRtUCRtEeF3iU83uw=tUqRmG27mGm=YUC=BGCRBeDckHURtJwLl6v8lMwLYivF0vzotUx5t2qcaRVBmGwRBGwRBGwRY=g8YuwJl/VRB6Y=kpbotevol/qJqHYol/UFqRw7SAwRY=g8YuwLqGh5KUQ=aHYRBeCJleURB6Y=kpbotevol/qJqRVBmGwRBGwRBGwRY=g8YuwLY=U5tET8ljg8KibRt=g8tNxRtUCRtEeF3iU83uw=tUqRmG27mGm=YUC=BGCRBeDckHURtJwLl6v8lMwLY=U5tET8ljg8KibRmQIRBGwRBGwRBGmSt2bJkpURmG27mGmRmQIRBGwRBGwRBGm8t2bJkpURtvD5KH1LYE48YJw=YUV=kWmRODZRBiV80Ev5tMwoKpDFtuCJ02C=mRVBmGwRBGwRBGwRY/4J0jD=aH0ot2x5KWCJ02C=mHYol/UFqRw7SAwRY/4J0jD=aH0ot2x5KWCJ02C=mRVBmGwRBGwRBGwRY/4J0jD=aHQFY2Y5KH1LYE48YJw=YUV=kWmRODZRBiV80Ev5tMwFKi4=3pQ=B6b806YRmQIRBGwRBGwRBGm8t2bJkpURKHxcliCJq6b806YRt=g8tNxRmG27mGm8t2bJkpURKHxcliCJq6b806YRmQIRBGwRBGwRBGm8t2bJkpURte6LYE48YJw=YUV=kWmRODZRBiV80Ev5tMw8k1CJ02C=mRVBmGwRBGwRBGwRY/4J0jD=aHv=teg8m6QoKGw=YUV=kWmRODZRBiV80Ev5tMwJlpholACFtvQRmQIRBGwRBGwRBGm8t2bJkpURtEY=q6QoKGw=YUV=kWmRODZRBiV80Ev5tMwJ0=3L3HTFBRVBmGwRBGwRBGwRY/4J0jD=aHb806YL3HTFBHYol/UFqRw7SAwRY/4J0jD=aHb806YL3HTFBRVBmGwRBGwRBGwRY/4J0jD=aHb806YolFC=tjDRt=g8tNxRmG27mGm8t2bJkpURtE48Y=g=q61JkumLGTwRBGwRBGwRBiV80Ev5tMwJ02C=YU3L3HTFBHYol/UFqRw7SAwRY/4J0jD=aHb806YolFCFtvQRmQIRBGwRBGwRBGm8t2bJkpURtE48Y=g=q6g8YWw=YUV=kWmRODZRBiV80Ev5tMwJ02C=YU3LYUCJqRVBmGwRBGwRBGwRY/4J0jD=aHb806YolFCol6bL3HTFBRw7SAwRY/4J0jD=aHb806YolFCol6bL3HTFBRVBmGwRBGwRBGwRY/4J0jD=aHb806YolFC=tNYJkNV5B6QoKGw=YUV=kWmRODZRBiV80Ev5tMwJ02C=YU3LYpU=Yje8KuCFtvQRmQIRBGwRBGwRBGm8t2bJkpURtE48Y=g=qTw=YUV=kWwRmG27mGm8t2bJkpURtE48Y=g=qRVBmGwRBGwRBGwRY/4J0jD=aGCJ02C=mHYol/UFqRw7SAwRY/4J0jD=aG3LYE48YJ3RmQIRBGwRBGwRBGm8t2bJkpURB6Q50uw=YUV=kWmRODZRBiV80Ev5tMwiq6Q50u3RmQIRBGwRBGwRBGm8t2bJkpURB6xFlQw=YUV=kWmRODZRBiV80Ev5tMwiq6xFlQ3RmQIRBGwRBGwRBGm8t2bJkpURB6T5KHvFPEP=BHYol/UFqRw7SAwRY/4J0jD=aG3LYvDFtjxFP51iqRVBmGwRBGwRBGwRY/4J0jD=aGCJYjxoj2TokED8Pi6Rt=g8tNxRmG27mGm8t2bJkpURBFCJYjxoj2TokED8Pi6iqRVBmGwRBGwRBGwRY/4J0jD=aGC8kUxFl/zotUx5t2qcaHYol/UFqRw7SAwRY/4J0jD=aG3LYe6FPjVk0vgFPp4F313RmQIRBGwRBGwRBGm8t2bJkpURB6Y=kpbotevol/qJqHYol/UFqRw7SAwRY/4J0jD=aG3LY=U5tET8ljg8KibiqRVBmGwRBGwRBGwRY/4J0jD=aHmJlEd5kGw=YUV=kWmRODZRBiV80Ev5tMwJYjboPNQRmQIRBGwRBGwRBGm8t2bJkpURtpe8kGw=YUV=kWmRODZRBiV80Ev5tMw=KNhFBRVBmGwRBGwRBGwRY/4J0jD=aHQFYU0Rt=g8tNxRmG27mGm8t2bJkpURKHqokJmBmGwRBGgXQTI=3NCJPpg80Aw5PE4atNv=tNqIB1wcQTwRBGwolJwItNhFKp6IBpzMs2SNjV3J0w3ka1gBmGwRBGwRBGwij2uSeEMlq5boB55RODwis5WSDiHSjE8i0pU=Yje8KpzJ0vvF3EU5B55XQTwRBGw=0/4JYjVRBpb80/4FbVIRBGwRtNbot9wRb/T5teV7b/T=lj17b/h=kpvRtvD5KGh=kjeokJ2iDE483pU83uhNKUQ=aFwJ02C5tNC5OD35tNA5B2T5teVXqHbotjqF0ND7aRwLmG1keH7Mep8i0ETieDwLmGmixA95tUD8tMZRmGCRBpzMDNaN1Nalq5RNjpukDv7Meu3kaGCRBRwLaHkMD2JRsNXuxQ45tUD8tMZBb/x5KUV=SAIJY21ckhmJlEd=Pi45l61LlE48t2qXmWDEOunJ02V8PR+R0M/=SjUWSh2BYi4=K1V5tuV5tvnRt=483u+ROUQ5BHW5lEg=tsVNYNq=tjCJShhJki3olA+WOh0=kiDolEv8Bev8tU38bgD8PGnJ02V8PR+R0M/=SjUWSVwzugDJliV=a6g8Y=4cqHb80/4FbTb=Y=YX0ivJ0h3FY2e8YuhJ02V8PR+RxRqWbVwzugxFtjCLtw/LtjnRtE48t2qXmG1J02V8PRwRlUhFt2q5tjC5OVwzugxFtjCcqHY806DLk5Uol5T5OTwJY2V=tNqXqH2BYw/cqHm8Pi1=kRh8tNY5OTeFKwwF02VoluwitE48t2qXPHv=tpg8YF+ROiQcBGeFKwn=Y2C5OTwWSpQ5BHl=ki1Jl6vX0ivJ0h3FY2e8YuhJ02V8PR+RxRqWbhhJki3olA+WKHAXqH2BYpg5m6b806D=l6DcqHQJlp1ol63XmGeFKwn8ljq=0UCLl/U=3u+EkHAX0ivJ0h3FY2e8YuhJ02V8PR+RxWxWxVwzugvcqHD=kvDLlpUJ02qJkpg80A+8Y2C=SVwzugvXYv45YNqcqHD=kvDLlpUJ02qJkpg80A+5l61=kiVol6UXqH2Bm6h8OjnRti4FYpUFbT/FKwwF02VoluwRxuDEOhQJlp1ol63XbNQcOhhJki3olA+WOh45YNq=Y/45xTwJkND8xVwzuTCJYU3JkiUJkVw50U15tw+WSGQiShT=lU3oKu+WxGQFKwnRKDIol6Q5kuV5tNA5tjq=lsVF0NV=lEDcqHhJki3olA+WOhb80/4FbTb=Y=YX0ivJ0h3FY2e8YuhJ02V8PR+RxMeEShm8Pi1=kR+WkHARKE48tU1RBpb80/4FbVw=Y2C5OTwXkHDRse48Y2xFtjb=aQ3u02eFYUUFmHX=kF3XqH2BY=4FYenRtevFY5g8bTQFKwnRKDIRPp480/xNtiVcqHD=kvDLljVol5CXYEU83pUFbVwzuTC5t248KEi83HnRK5g=KpTXmGxWOHQcBH2Bm6hJlUCRKpTcPpUcKuhJl/g=0A+8tNY5OhmJlEd=Pi45l61LlE48t2qXmWe=SNUElMnzuTC8ljg8mHDFbgT8P=UF3hmJlEd=Pi45l61LlE48t2qXmWe=SNUElN2Bm6VWkhmJlEd=Pi45l61LlE48t2qXmWDEOp2Bm6VW3hmJlEd=Pi45l61LlE48t2qXmWxWxE2B3Hq=khY806DLl=v8lUVcSgO8PNqolNqLse48Y2xFtjb=Sh2BbQ4FPp68tMZBb/xJPigFKuZBmGwRBH0JkRwJe9w7aG3RmGCRtvD8l/xFtNboljVJ0vvF3WTFPpqkPi45OsxIBpKSs2BuM/Slq5b50u3ka1gRBAwRmFnBmGwRBH0JkRwJN9w7aG3RmGCRtvD8l/xFtNboljVJ0vvF3WTij2uSeEMlq5vieDgRBAwRmFIRBGwRK=vFmHboj9w7aG3RmGCRtvD8l/xFtNboljVJ0vvF3WTij2uSeEMlq5boB55IaGCRBR3XQTwRBGw5YjqRKHzRODwiqRwLmGTIKEDF3H4Fqw1keH7Mep8iPG3kaQwRU/CRm1wRSD2Rt=v8KEUIaGyRBF3ROTwoKph8KEQ=lEgJl/botjqFqw1keH7Mep8iPG3kaQwpM6MkejNSepjMq1gRBAwRmFnBmGwRBH0JkRwcj9w7aG3RmGCRBwTFPpqFt2xIBpzMs2SNjV3cB55LBGmktAmIaGv7SDw=YjVF0MgRO9wiqFwXmHT5teVFPHUJ0Uv8tETJkixIBpzMs2SNjV3cB55LBHjSUpzMNN7NsNSIa1wLmGmixVIRBGwRK=vFmHxkqG2RBFmRBAwIBvx5KiQ8PWTij2uSeEMlq5xieDVRBiF8mRgRBs27aHYJl/x=a1w7qG3iqG+RtvD8l/xFtNboljVJ0vvF3WTij2uSeEMlq5xieDVRsNXNj2pNM2MpNWgIaGCRBR3XQTwRBGw5YjqRtuw7aH180Ee8lNC5OVIBl=e8YEDol2CRKEU5BvvLtWVFB/ALKWVJ0wgRKVIBuUg=mvvRSeC5l/VIluC8lJCJa60Jl/e=SevX0NVF0Mw=B6h=m6vL3=v8KNU7ljzXQTiBlUYItWv7l6e8tQg=B6h=m6bL3=v8KNU7lWn=l/x=aH1LYeYLYWC5YjV5lM2Je9nBw1iolJTFBs283NV8BU1LYeYL3GC5YjV5lM2FOhU8KEURtuC8lJCFB60Jl/e=SeQkxVIBuUg=mvARSeC5l/VIluC8lJCcB60Jl/e=SeAX0NVF0Mw=B6h=m6AL3=v8KNU7kvzXQTiBlUYIKWv7l6e8tQg=B6h=m6xL3=v8KNU7kWn=l/x=aH1LYeYL3WC5YjV5lM2Fe9nBw1iolJTJ0wv7l6e8tQg=B6h=m6boB60Jl/e=SeboOhU8KEURtuC8lJCJ0wC5YjV5lM2J0vzXQTizuTi=3NCJPpg80Aw=qvvLtWVFB/ALKWVJ0wgRKVIBuUx=kuTJa/bLKGVcB/xLtETISVIBuU1LYeYL3EeJYeg5BwgXQTizuTi=3NCJPpg80Aw5kp4Javx5KRgRKVIBuUq=kpeFYAw50UC=t2PLYiD80sT5l6UF0EvFtMT=l6b80pUNNiiu02hFt2C=l6DIKEDFm1gISVIBkDIBl=e8YEDol2CRtjD8PMTFPpqIaHnBw1iFYND5kiCRtpUJ021=NNaaME48kH48YNC5BvUF0EvFtMT50UC=t2PLYjD80RTFPpqIa1gXQTizuTi=3NCJPpg80AwFY2DWSWTFPpqIaHnBw1wRK=vFmHg83He5BGwRBGw7aG3uMiOpsNtpDvia1hWSM67MjjaMepNNU5JlNgvJYE1=l=3otUfo0/h8Y2QFkix5KN05Pv6cmFnBw1wRK=vFmH45kpQ5kuwRBGw7aG3S12uMNiSNjNlNev=l1jBuDpjp15RaMgLSseC8PH/F3ED5k=PcKU+Jlib=tNY=0vgoYhV8aFnBw1wRK=vFmHg8YpUcBGwRBGw7aHARODZRtUCFKNDLYUC=tNAS0JTcB1nBw1wRK=vFmHDFYjCF0/v5tMw7aHARODZRtUC=tNAIKwgROAwLSsw7qH45kpQ5kp8ol61=kwTcBU5ROTwcOVIBaGwFYND5kiCRKEDFm6xFt/g5Bw3iq1C8ljQIKpqJl6x8tjD=a1CoY2g8mw3iq1nBwU2BbQ4F0EqokHD7wT9otNv=OA9JY21cSA9=tU0RKEDcl/U7a5Q8PEg5tU48bgvJ3E48KND=ShPolpDoOT/WOGUX0ivJ0h3FY2e8YuhJ02V8PR+RxuDEOhD8PG+WOhV=l=DXbGnixAI7t=4FYDw8lNDot217kH4FPuw8Yjh=Seh=mHx5KUV=SD3=tUxFt/vcSgC806UXqFZBb/g83He5BHDckHU7lvg=tpU8mHCJleU7lsZBb/g83He5BHDckHU7lvg=tpU8mHCJleU7lWZBb/g83He5BHDckHU7lvg=tpU8mHCJleU7kGZBb/g83He5BHDckHU7lvg=tpU8mHCJleU7kwZBb/g83He5BHDckHU7lvg=tpU8mHCJleU7kWZBb/g83He5BHDckHU7lvg=tpU8mHCJleU7lET7wT9L0=4FYDZRbVIRBGwRtUYRBvY5l6b5tU48U2UctUx5KWTi0pgF0hYFYNUFPHvJ0M3Ia1IRBGwRBGwRBG1=3iU=NEQJlEURODwutpgF0hYFYNUFPHvJ0MTis5WSDiHSjE8i0EP=B55ISVIRBGwRtUYRBvY5l6b5tU48U2UctUx5KWTi0pgF0hz5t2DJl/zFPHvJ0M3Ia1IRBGwRBGwRBG15t2DJl/SFtjb=aG2RsH1okEdkPp45tjVkPEQJlEUIBpKSs2BuM/Slq5b50u3ka1nBmGwRBG15t2DJl/SFtjb=aG2RBpD8Ppv8jEQJlEURO9wiKp45tjVMPHvJ0MwXmG/XQTwRBGwolJwIt=e8YEDol2Ck0NAokEDFqw3FtvQkPNCJleUiq1gRKVIRBGwRBGwRBG1FtvQNl6v8lMw7aHGFtvQkPNCJleUIB1nBmGwRBGwRBGwiKiU8tNvF0Mw7aHGFtvQkPNCJleUIB5qiq1nBmGwRBGwRBGwithUFY6U8BG2RsHQoKHz5l6v8lMTiPW3ISVIRBGwRKDIRBGwRBpUcKHVol6dRODwi0vD5KHxXm945P5PLYNAFt/4okuh=tRCJ02hLPEUJkiboB9yJlEDol2C7kEUJkiboB=3LkiUJ0jQ5tETJaeq=kEQ806x=SDYFSD3XQTwRBGwolJwIKEDF3H4Fqw3StUC5kw3LBG1o0Nq8YNVIaGv7SDw=YjVF0MgBmGwRBGwRBGwitNAFt/g8YVwLbDw5kiV=l6b80pUIB5Wol6ecBHL=kiC=lQwiqGCRKEeJ3EDFmw1FYNV=ljx=aQwWBQwEm1gXQTwRBGw=l/x=uTwRBGwRBGwRBpUcKHVol6dRBA2RKNq8tNCJ021=aw1o0Nq8YNVRBAwiqG3RBAwFPNmFPpqIBpq=l/UJkEULBGQLBGxIa1nBmGwRBHg=mGTRl=e8YEDol2Ck0NAokEDFqw3Ft2xokvz=0ND=l5g=BFgIaHnBmGwRBGwRBGwolJwIt=e8YEDol2Ck0NAokEDFqw3=0NDk0EeF3iU83pz5kEUFmFgIuTwRBGwRBGwRBGwRBG15kEUFmG2RsH3=kpzJPNqFYNC5j2eF0NqIB1nBmGwRBGwRBGwolJwIt=e8YEDol2Ck0NAokEDFqw3=0ND8kUeolu3Ia1IRBGwRBGwRBGwRBGwiKNg=BG2RsH3=kphckNg=BwgXQTwRBGwRBGwRtUYRBvY5l6b5tU48U2UctUx5KWTi05U5te6=0U1iq1gBmGwRBGwRBGwRBGwRBp3oluw7aHG=0ND8kU3oluTISVIRBGwRBGwRBG1=Pi45kGw7aGm7qRnBmGwRBH2RtNVF0MwcQTwRBGwRBGwRBpeoluw7aHGFt2xokvz=0NDFK5eoluTuKH4F0UAk05U5tNeoluTIa1nBmGwRBGwRBGwit5g=BG2RsHQ8PEgcj23=kp3FY5g=BvGFt2xokvz=0ND=l5g=BwgISVIRBGwRBGwRBG15kEUFmG2RBpeolp8i06v8lM3kSVIRBGwRBGwRBG15lU1RODwiKNg=jV35lU1ieDnBmGwRBGwRBGwit5q8PNQRODwit5g=jV38Yjh=a55XQTwRBGwRBGwRBp3oluw7aG1=0U1lq53olu3kSVIRBGwRKDIBmGwRBHg=mGT=3NCJPpg806z=kvgFPpxIB5hJU21=kpUJPpz=l6b80pg8YF3IaGYimHY5l6b5tU48U2UctUx5KWTi0Ub8060iq1gBmGwRBGwRBGwolJwIsHhJU21=kpUJPpz=l6b80pg8YFTiKNx=kRVRB5kol618P5xLSsqESs3Ia1wcQTwRBGwRBGwRBGwRBG15kEUFmG2RsHgJ02C5mw3N0UC=t2PFqD/WbM/iqQwieNMpmDAiqQwiKNx=kRgXQTwRBGwRBGwRKDIBmGwRBG1JP51k0/g8YhxRODwiqFnBmGwRBG1FtjDoBG2RtNAFt/4=tMTRm9mLBG1pD/7u1jWMeV3JP51ieDgXQTwRBGwitAw7aHb8PNC5Bw1FtjDoB1nBmGwRBHY8PRwIBpgRODwWOVwit1w7BG18mGhROsnRBpgIqVgRKVIRBGwRBGwRBG1JP51k0/g8YhxRBA2RBR9JaHTFYNY7aFbiqH48YEVolEd7a53IjQm=YeFRm/FRmRnBmGwRBGwRBGw=Y2qRBw1omG2ROGnRBpfROQ2RBpgXqG1omVdIuTwRBGwRBGwRBGwRBG1JP51k0/g8YhxRBA2RKEDFU2q8Pu/Wqw1FtjDojV1oUDgRBAwiq93XQTwRBGwRBGwRBpb50pz8tUCoPWwLbDwRUQmLjQmkBRVkBiFRm137mRwLmG1FtjDojV1oNDwLmGmLxQ4JSAmXQTwRBGwzuTIRBGwRBpbotjqF0NDFqG2RtjqFYj6IB5NNsJhXBFVRB5kol618P5xLSsqESs3LBG3aD2iXBeaiqQwiDh7aSwhNaFVRB5bFOw0EmFgXQTwRBGwit2Q5j2botjqF0NDFqG2RBF3XQTwRBGw=Y2q=ljboBGTitETJkix=kpxRtjxRBpg5tNhIuTwRBGwRBGwRBp4FKpzJ0vvF3EU5KWwLbDwix/4FKpg80Aw5YjV5lM2RmFwLmG1okpU8aGCRBFmRBFwLmGTij2uSeEMlq5boB55ROD2RBpg5tNhRO9wiPEU8tNb5tN1iqG+RBF3IaGCRBFZiqGCRBpg5tNhRBAwixQ48PHDol2C7mFnBwTwRBGwitDw7aHvF3ivcaw3M0NbLmHi8Y=4iqG27mG3F013LBG3pYUV=kW3RODZRB5Y8aFVRB5O806x80/UiqG27mG3J0M3LBG3MPjViqG27mG3MPjViqQwieHTFBFw7SAwieHTFBFVRB5S5Kig8YFw5t248KW3RODZRB5x5BFVRB5BF3ND=l=4FYEUiqG27mG3JYJ3LBG3SYND502qoqFw7SAwiD6U5K54FYV3ISVIRBGwRtUYRBwv=leQ5K1Tis5WSDiHSjE8iPHPieDgIuTwRBGwRBGwRBphlq5W80545ku3kaG2RB5W80545ku3XQTwRBGwite8ieEU8tJwFYNh8P=UieDw7aG3M0NV=UiU8l20=aFnBmGwRBG18lNC5aG2RBF3XQTwRBGw=Y2q=ljboBGTitDwJkWwitVw7SAwiKJgBmGwRBGwRBGwiteU83MwLbDwix/DoBHPolpDoODmiqGCRBvg83ugRBw/WOGwLqHb8PNC5Bw18a1gRBAwiqMm7UVw7tswoKiU=bDmRqRw806b8tUboxDm=qvFiqFwLmG15mGCRB5Fiq/C5l/VLjQ3kBFVkB5Fiq/FieQ3IaRZiqGCRBpdRBAwixQ4JSAwkSQ45twZixVIBmGwRBG1=Kig5YNxRODwRmRnBmGwRBHg=mGTis5WSDiHSjE8i02xieDw7SDwiP5g8mFgRKVIRBGwRBGwRBHY8PiUJlETRBvqJl63=aw3JqFVRB5+iq1wJkWwitpqok=UIuTwRBGwRBGwRBGwRBHg=mGTokEz=tUqIBp1FYU0=aGCRBF+kjQ3Ia1IRBGwRBGwRBGwRBGwRBGwRBp1FYU0=kWwLbDwix/vRtvq=lJ2RmWmRt2CJ0/gJ0V2RYFTkB5Y8NQ3LjQ3iqGCRBp1FYU0=aGCRBF+LeQ3IaRZlqG3RBAwitpqok=URBAwiqH57B2v7mG3XQTwRBGwzuTwRBGw=lET8qG37KpvJY/URtEVJkEx7lUC=Y9wJ0NV8KHv=tpg8YF2WqHb=l/VFPHvJ0UC=xDQRK5g=KpT7SsQWBMZ7Kpq7b/D=BHPolpDoOD/7b/xFtjC7UNCJleUXb/mFb6NF0NqXb/mFb6uoKG+7tiq71v1=OT9J3RZuP51XmFwLmGTis5WSDiHSjE8i02xieDw7SDwiP5g8mFw7qG37tiq71pqok=UFxT3ROTwiqFgRBAwixQ4FPHv8bA9LPp17mFIRBGwRBAwix/D=OA98Y2mFbA3RBAwIBpQoKHN8Yjh=aGyRKEeJ3EDFmw1FtvQNl6v8lMVROGVROsqWB1wXmG3Sm2Hiq1wLmG3RO/vRtvq=lJ2RmFwLmG1=kvQ8tUCoqGCRBFmRKpvFY5U5OezJY/v8YVZl0NAFt/4okuh=tRCJ02hkSQ4JSA9L064J3RZ7tiq7mFwLmG15lU1RBAwiqGTRBFwLmG15kEUFmGCRBFwIaG9FPHv8b6KFY2eFOT9LPEQJlAZRBFwLmG1=0U1RBAwiqGTRBFwLmG1=Pi45kGwLmG3RB19J3RZiqGCRsHQoKH0=kixol2CIB1wLmG3RO/xFtjC7UEv=YMw8l21=ST9LPEQJlAZRBFwLmGTis5WSDiHSjE8iPEv=YNz8l21=a55RO9wix/Y806DRtE48t2q7kiU=O67SbQ4=Y2C5OA3ROTwix/Y806DRtE48t2q7l5q=lNC7b/m712tpbQ4JbA9L0=483uZiq1IRBGwRBAwiqG9JaHTFYNY7aWw806b8tUboxDm=qvFieHTFjQ3Lt6e8tQVkB5Fiq/Fi0UC=Y2Fiq1m7UVwFtvQol6Y8qH57B2v7mG9FPHv8b6sJkpU5tUh=ST9LPEQJlAZRBFwLmH1JkpUIB5=LlDh=BHRXY1+FqFgRBAwix/mFbA3RBAwIBpD8Ppv8jEQJlEURO9w5PE4NYUU5eEgcYMTiKp45tjVMPHvJ0MgROTwiqFgRBAwiqG9FPHv8b6tFYNUXbQ4FPHv8bAwiqGCRBw1=3iU=NEQJlEURO9w5PE4NYUU5eEgcYMTit=q=lNSFtjb=a1wXmG3iq1wLmG3RBw3RBAwIBw1=3iU=NEQJlEURBJYRBpD8Ppv8jEQJlEUIaGyRBvg83ugRBw1=3iU=NEQJlEURB9wiKp45tjVMPHvJ0MwImG/WOGgROTwixG3IaGCRBFUIS/mFbA3RBAwitEP=j2Vol6dFqGCRBFwiqGCRK5x8eHUFYexu02V8PRTis5WSDiHSjE8i0EP=B55IaGCRBFw7tswoKiU=bDbRt2CJ0/gJ0V2RYFTkB5Y8NQ3LjQ3iqGCRKEDFU2q8Pu/Wqw1pD/7u1jWMeV3ot2h=N2b50u3ka1wLmG3kBFVkB5Fiq/FieQ3LjQ3kBFgRb68Rtv48lMwkSQ4JSA9J3RZiqGCRBp1FYU0=kWwLmG37B2D=OA3BmGwRBGCRBF95tuw50U15tw2WaHv8tU38beqol5T5OA98Y2mFbA9F0NV=lEDRt2CJ0vv8Y5U7ai3It6e8tQV83NV8BQ3RBAwIBjU8kHDcaw1keH7Mep8iPG3ka1w7qG3kBF3RBAwFPpqkPi45OsxIBpzMs2SNjV3FB55IaGCRB5FiqFwXmG383NV8BFgRBAwiq/C5l/VLt6e8tQV5tvgFq60Jl/e=a1m7b/4FKp3FY2eFBHVJliU8ODmMtj3=aHbotjqF0NDRbA3RBAwit2Q5j2botjqF0NDFqGCRBF9L02Q5t5q8PNQ7bQ4F0NV=lED7b/mFbA9FPHv8b6S=ki0=kRwaNG+7B2xFtjC7b/mFbA3RBAwij2SpNilpNi8RUEjMU=jMU2HpspaRUDwLmG37tiq7b/xFtjC71EVolNC5BHiMOT9LPEQJlAZ7tiq7mFwLmG1keEjMU=jMUV3M1NESepjkDjspjR3kaGCRBF9L064J3RZ7B2D=OA9LPpq7bQ45tjm8tMZiQTwRBGwLmG37KpvJY/URKEDcl/U7aim8Pi1=kRh5t2QXbiQcBHx80/g=BGbWxWxXqRwJ0NV8KHv=tpg8YF2WqHb=l/VFPHvJ0UC=xDQRK5g=KpT7SsQWBMZ7Kpq7mFwLmG18lNC5aGCRBF9LPpq7bQ45tjm8tMZ7tpg5mHx5KUV=SDm8ljq=0UCXbMm7mFnB3DIBY=e8YEDol2CRK5x8D=48PpUFmwgRKVIRBGwRBpgFe2PFYUDJliV=aG2RtUxkP5qokpvJY/UIBpKSs2BuM/Slq5b50u3ka1w7qGmRO/Y806DRtE48t2q7a53FYNU8mFZIj5qokpUJliV=a19L0=483uZRmG+RBRw7t=483uwJ02V8PR2FYN17mvX8Puw5Pig5tjm8tMg7B2Y806D7mRnBmGwRBHUJ0v4RBRI7B21okJZBb/DJliV=aHb8tjxFxeg8Y=4RtU17kp480/xNtiVRtEU8t/QJlp1ol637SWwJ0NV8KEQJlEg8YF2WBHPolpDoOD/WOGURBHx5KUV=SD3JY2q=tNqLkp4FOTqFKwwF02VoluwRxWxWxhm8Pi1=kRhJY2D5t2hXbiQcBHx80/g=BGbWxWxXqFZBw195KRZBw1i7Kp17b/Y8PihRt2CFPNm8lUD7a53It6e8tQVFY2DWSWT5tvgFq6bL3=v8KNUIa/FRUQmIShq=kpeFYAw=YjVF0MnixA9FPHv8b6OotjC=0Mw=tUqXbQ4FPHv8bA9J3RZ7tUCFKNDRtEVJkEx7a5D802VFDUCFBFw5KUQ=SeD=kvDRt6v8lM2JqH0Jl/e=SD3RmGCRtvD8l/xFtNboljVJ0vvF3WTis5WSDiHSjE8i0EP=B55IaGCRBR37b/g83He5BHDckHU7kEeJYeg5BH0Jl/e=SD37bA37bQ4=Y2q8SA9LPp17wTiBS/D=OA9=Y2q8aH483EeJYeg5OeFRYFTi0=Diq/C5l/VLKi45OsxIKpTokWC=m60Jl/e=a1gXPiU5KNq8mHYJl/x=ShFRbA9FPHv8b6a=lj1Rt=g8tM+7B2xFtjC7b/mFbA9ol6Q5kuwJ0/vFPW2iPp480/xal6QiqHDckHU7kpUcKuw8Yjh=SeY7b/g83He5BHDckHU7kEeJYeg5BH0Jl/e=SD37bA37bQ4=Y2q8SA9LPp17wTi7B2DFbA95KRZBw1i7Kp17b/Y8PihRt2CFPNm8lUD7NQm=qw3=YD3Lt6e8tQVi0ed=tUqiq/q8Pu/WqvDotUxLYuC5YjV5lMgIShq=kpeFYAw=YjVF0MnkBRZ7KEQJlAZSljd=aH1okR+7B2xFtjC7mpgFe2PFYUDJliV=S/mFbA9ol6Q5kuwJ0/vFPW2iPp480/xal6QiqHDckHU7kpUcKuw8Yjh=Se17b/g83He5BHDckHU7kEeJYeg5BH0Jl/e=SD37bA37bQ4=Y2q8SA9LPp17wTiBS/D=OA9=Y2q8aH483EeJYeg5OeFRYFTi0=Diq/C5l/VLKi45OsxIKpTokWC=m60Jl/e=a1Vi0ed=YUV=aFgXPiU5KNq8mHYJl/x=ShFRbA9FPHv8b6EJlhURt=g8tM+7B2xFtjC7mpgFe2PFYUDJliV=S/mFbA9ol6Q5kuwJ0/vFPW2iPp480/xal6QiqHDckHU7kpUcKuw8Yjh=SeY7b/g83He5BHDckHU7kEeJYeg5BH0Jl/e=SD37bA37bQ4=Y2q8SA9LPp17wTi7B2DFbA95KRZBw1i7Kp17b/Y8PihRt2CFPNm8lUD7NQm=qw3J0M3Lt6e8tQV5tvgFq6bL3=v8KNUIShq=kpeFYAw=YjVF0MnkBRZ7KEQJlAZpkvUJPND=ST9LPEQJlAZ7tiq7b/g83He5BHb8tjxFxD35t248KEi83G3RKp6FtM25tNA5BHCJleU7lWw5YjV5lM2iqFZ7tUCFKNDRKp6FtM2FPNm8lUDRK=v8KNU7aFZ7mFZ7B2Y8Pih7bQ45tuZBw1i7Kp17b/Y8PihRteU5tv4=OD3Ft2x5BFwpM6ONjUupSD38kNV5tUQJkiDL0=4FYDh=tjDJaFZBw1i7tUCFKNDRKp6FtM2otU1=tNCRt6v8lM2JaH0Jl/e=SD3=YD37wTiBS/g83He5BHDckHU7lvg=tpU8mHCJleU7lWw5YjV5lM2iqRwLmHx5KizFY2DWSWTis5WSDiHSjE8i0EP=B55IaGCRBR37wTiBS/g83He5BHDckHU7lvg=tpU8mHCJleU7kGw5YjV5lM2iPNQ8t2v=s=g8tM37wTiBS/g83He5BHDckHU7lvg=tpU8mHCJleU7lETRK=v8KNU7aFmRBAwItUxF0NDIBpzMs2SNjV3J0w3ka1w7qG1keH7Mep8i0ETieDwXmG3iq1wLmGmixAIBu19FPHv8b6NFt/4Jluw=YUV=ST9LPEQJlAZitUxkP5qokpvJY/U7tiq7b/g83He5BHb8tjxFxD35t248KEi83G3RKp6FtM2=YUV=aHCJleU7lJZ7tUCFKNDRKp6FtM2FPNm8lUDRK=v8KNU7aFZ7mFZ7B2Y8Pih7b/mFmGw7bQ45tuZBw19LPpq7bQ45tjm8tMZ7B21okJZ7B2m80p67bQ4oKph8OAmXQg2Bwgg=mGTRl=e8YEDol2Ck0NAokEDFqwmFt2xokvz=0NDFK5eolumIaGYimGTFPpqFt2xIBpKSs2BuM/Slq51okEvJY/Uk0=e8YEDol2CFq55LBG3Ft2xokvz=0NDFK5eolu3IaG27SDw=YjVF0MgIaHnBwTwRBGw=3NCJPpg80AwFt2xokvz=0NDFK5eoluTiKGgRKVIRBGwRBGwRBHq=kpeFYAw=YjVF0MnBmGwRBH2Bwg2BYUYRBwv=3NCJPpg806z=kvgFPpxIBiQ8PEgcj23=kp3FY5g=BRgRBJYRBvx5KiQ8PWTis5WSDiHSjE8i0pgF0jm8tNz=3NCJPpg806xieDVRB5Q8PEgcj23=kp3FY5g=BFgROD27aHYJl/x=a1gRKVIBmGwRBHY5l6b5tU48mHQ8PEgcj23=kp3FY5g=Bw1FB1wcQTwRBGwRBGwRKiU5KNq8mHYJl/x=SVIRBGwRKDIB3DIBY=e8YEDol2CRK5x8DNAIBpg8m1wcQTwRBGwit2e5BG2RBF3XQTwRBGwolJwIt=e8YEDol2Ck0NAokEDFqw3=kvUJqFgIaHnBmGwRBGwRBGwutNA=lWTitUCLBG18PNDISVIRBGwRBGwRBG18PNDRODwutg4olATRU/CRmQwit2e5B1nBmGwRBH2RtNVF0Ng=mGT=3NCJPpg806z=kvgFPpxIB5QJkEx5tvq5aFgIaHnBmGwRBGwRBGw80izFPpvF3uTISVIRBGwRBGwRBHGFtjxFPpTF3MTitUCISVIRBGwRBGwRBG18PNDRODw80iz=0NDk0EV=ljCIB1nBmGwRBH2RtNVF0Ng=mGT=3NCJPpg806z=kvgFPpxIB5xckED=lD3Ia1wcQTwRBGwRBGwRt2mkPEDJkiDIB1nBmGwRBGwRBGwuKE6FPpU8aw1olAgXQTwRBGwRBGwRBp45kuw7aH4JU23=kpzJ0/UJlATISVIRBGwRKDw=l/x=lUYRBvY5l6b5tU48U2UctUx5KWTiPET=l/Vk0NA=lW3Ia1wcQTwRBGwRBGwRBp45kuw7aHxotNV8j2UctNbIBpg8m1nBmGwRBH2RtNVF0Ng=mGTokEzFYNx8PNqJ0MTitJw7aHGFt2Q=lATitUCLBGmFmRgIa1wcQTwRBGwRBGwRBp45kuw7aGmRbVIRBGwRBGwRBHPotUV=aGTRMHY=l2YIBpYIa1IRBGwRBGwRBGwRBGwit2e5BGC7aHY=0NDFqw1=mQwWSGqEB1nBmGwRBGwRBGwFtEV8PEUIBpYISVIRBGwRKDIRBGwRKiU5KNq8mG18PNDXQg2BwgY5l6b5tU48mHPF02lolNPM0U+=aw1Fq1wcQTwRBGwolJwItUxk0UC5Bw1Fq1gBmGwRBGwRBGwiKWw7aHxFKig83pYIBRU5aRVRBpxISVIBmGwRBHg=mGTiKWw7bDwWSGPWxFDWSwqEB1IRBGwRBGwRBHq=kpeFYAwFPHqol6D=mw3iSsCWYJ3LBG1FqG4ROsQExWPEOsAWbugRBAwiqHKumFnBmGwRBHU8KEUolJwIBpxROA2ROsQEOweExJgBmGwRBGwRBGwFYND5kiCRKEQFYUC5tJTiqM/LbiYiqQwiKWwLqG/WOuAESF0IaGCRBFwSMR3XQTwRBGw=l/x=lUYRBw1FqGZ7aG/WORDIuTwRBGwRBGwRKiU5KNq8mHxFKig83pYIBFUWaAq=mFVRBpxRB9wWSGqEB1wLmG3RshBixVIRBGwRtNVF0MIRBGwRBGwRBHq=kpeFYAwiKWwLmG3RsR3XQg2BwgY5l6b5tU48mHPF02u=kihFqw1FB1wcQTwRBGwolJwIBw1FBGYROHAuxGQWB1w7SDwWKvOWOGQIuTwRBGwRBGwRBpgRODwiPW3XQTwRBGw=l/x=lUYRBwTiKGwimGQcssQWOGgROD2ROHAuSGQWB1IRBGwRBGwRBG1oaG2RB5VixVIRBGwRtNVF0Ng=mGTIBpQRBJwWKwAWOGQIaG27aGQcOwQWOGgBmGwRBGwRBGwit1w7aG3LaFnBmGwRBHU8KEUolJwIBw1FBGYROHAEbGQWB1w7SDwWKw0WOGQIuTwRBGwRBGwRBpgRODwi0R3XQTwRBGw=l/x=lUYRBwTiKGwimGQcOuQWOGgROD2ROHAEOGQWB1IRBGwRBGwRBG1oaG2RB51ixVIRBGwRtNVF0Ng=mGTIBpQRBJwWKwqWOGQIaG27aGQcORQWOGgBmGwRBGwRBGwit1w7aG3JqFnBmGwRBHU8KEUolJwIBw1FBGYROHAWSGQWB1w7SDwWKw/WOGQIuTwRBGwRBGwRBpgRODwiPG3XQTwRBGw=l/x=uTwRBGwRBGwRBpgRODwiPM3XQTwRBGwit1wLbDwIBw1FBGYROHAWOsQWB1w7qG3FmFwXmG3LaFgXQTwRBGwit1wLbDwIBw1FBGYROHAWOGAWB1w7qG35qFwXmG3LaFgXQTwRBGwit1wLbDwIBw1FBGYROHAWOGDWB1w7qGTIBpQRBJwWKwQXOGQIaGyRB5xiqG+RB5AiqGgROTwIBw1FBGYROHAWOwQWB1w7qG3MqFwXmG3LaFgISVIRBGwRBpgRBA2RBwTiKGwimGQcOGQWbGgRO9wiPR3ROTwiqD3ISVIRBGwRBpgRBA2RBwTiKGwimGQcOGQWSGgRO9wiPF3ROTwiqD3ISVIRBGwRBpgRBA2RBwTiKGwimGQcOGQWOwgRO9wIBw1FBGYROHAWOuQWB1w7qG3FqFwXmG3cBFwIaG+RBwTiKGwimGQcOGDWOGgRO9wieW3ROTwiqD3Ia1nBmGwRBG1oaGC7aGTIBpQRBJwWKwQWOGDIaGyRB5qiqG+RBFhiq1nBmGwRBG1oaGC7aGTIBpQRBJwWKwQWOGqIaGyRB5PiqG+RBFhiq1nBmGwRBG1oaGC7aGTIBpQRBJwWKwQWOG/IaGyRBwTiKGwimGQcOGqWOGgRO9wiPu3ROTwiPw3RB1wXmGTIBpQRBJwWKwQWbGQIaGyRB5MiqG+RBFhiq1gXQTwRBGwFYND5kiCRBpgXQg2BwgY5l6b5tU48mHPF02u=kihFDE48t2qIBpYIaHnBmGwRBHg=mGTRMHgFe2q=lj1JliV=aw1=m1gBmGwRBGwRBGwFYND5kiCRBF9=Y2C5BHb80/4FbDbp1JQWOGQ7mFwLmHPF02u=kihFqvG=YUV=kHUFYexIBpYIa1wLmG37B2Y806D7mFnBmGwRBHU8KEUolJwIBjGokEz5Pig5tjm8tMTitJgIuTwRBGwRBGwRKiU5KNq8mG37t=483uwJ02V8PR250vg5tMZiqGCRK5x8eHUFYexIsHYol/UFtNq8kWTitJgIaGCRBF9L0=483uZixVIRBGwRtNVF0MIRBGwRBGwRBHq=kpeFYAwix/Y806DRtE48t2q7aWqEl=YWOGZiqGCRK5x8eHUFYexIsHYol/UFtNq8kWTitJgIaGCRBF9L0=483uZixVIzuTI=3NCJPpg80Aw5PE4M0Ev8YpgFmw1=tUqIaHnBmGwRBHg=mGT=3NCJPpg806z=kvgFPpxIBixJ0jC=tUqRm1gRKVIRBGwRBGwRBHq=kpeFYAwF0Ev8YpgFmw1=tUqISVIRBGwRKDw=l/x=aHnBmGwRBGwRBGwitpTRODw8PHU8YpgFmw1=tUqISVIRBGwRBGwRBHPotUV=aGT=YjVF0MwRSD2RBw1=YUV=l6v8lMw7aHq=lj1=tUqIBp1oB1gIuTwRBGwRBGwRBGwRBG1=YUV=kE8kaG2RBpYol/U8Yjh=SVIRBGwRBGwRBHq=kpeFYAwit=g8tNxXQTwRBGwzug2BwgY5l6b5tU48mHPF02kotUboBw1FB1wcQTwRBGwiKHv5tww7aHPF02jcBw350vgJ0wwiqGCRBpQISVIRBGwRtUYRBwv=leQ5K1TiKHv5twgIuTwRBGwRBGwRKiU5KNq8mG1FtjDoOVIRBGwRKiU5KNq8mHYJl/x=SVIzuTI=3NCJPpg80AwJlEDol2CF01TIaHnBmGwRBHPF02R=lj1=kRTISVIRBGwRtNbot9wix/TWS6S=ki0=kRwF0Nb5kig5K1wol6Y8PihJkpg80A9L0w/7b/1okJwJ0/vFPW2J02C5tNC5OA3XQTIRBGwRt=e8YEDol2CRK5x8eEUJeHvFYjhIBpCLBG15m1wcQTwRBGwRBGwRBp0RODw5Kig8aw15m1nBmGwRBGwRBGwolJwIBp0IaHnBmGwRBGwRBGwRBGwRtUYRBvG8liz=tND=lEDk0NCJ021ol63IBp0LBG3N0UC=t2PFqD/WbM/iq1gRKVIRBGwRBGwRBGwRBGwRBGwRBp0RODwutUb8060IB5kol618P5xLSsqESs3LBG3NNptLSw3LBG15m1nBmGwRBGwRBGwRBGwRKDIRBGwRBGwRBGwRBGw=lET8qG37KEQJlAZiqGCRBpCRBAwixTw7B2xFtjC7mFnBmGwRBGwRBGwRBGwRtUYRBvx5KiQ8PWTiKJVRBiF8mRgROD27aHYJl/x=a1IRBGwRBGwRBGwRBGwRBGwRtNbot9wiKJwLmG37tiq7mFnBmGwRBGwRBGwRBGwRtNVF0MIRBGwRBGwRBGwRBGwRBGwRtNbot9wix/QFYMwJ0/vFPW28lQ/7mFwLmG15mGCRBF9LPHq=SA3XQTwRBGwRBGwRKDIRBGwRKDIBmGwRBHPF02S=lEuJkiv8aw3M0Nq5YNqRKE4=3pPJkiUiqQwut5U5tNC5mw3MDNaN1NakeE7pUpkuNijiq1gXQTwRBGwolJwIt=e8YEDol2Ck0NAokEDFqw3JkHvJ0vUk05U5j2h80pe8tNxiq1gBmGwRBGwRBGw5PE4M0NbMtjqJlDTiD/4JlpU=BHHFtjbotMw8l215l/UFqFVRtUhFt/4=tMTiqQwiqQwJkHvJ0vUk05U5j2h80pe8tNxIB1gISVIRBGwRK5x8eEUJeHvFYjhIB5sokEvJY/U=BHuajGwp3NCJPpg806xiqQwis5WSDiHSjE8i0pgF0jm8tNz=3NCJPpg806xieDw7qG1pD/7u1jWMeV3=tUxJliV=N2Y5l6b5tU483W3kaG+RB5C806Uiq1nBmGwRBHPF02S=lEuJkiv8aw3SPHU8mHmJkEURtpgFmFVRsHg8YUz=0NDIB54FtNCk0ivF0N1okR3Ia1nBmGwRBHPF02S=lEuJkiv8aw3M0jY=aHh80pURtNA=lWw=tUqiqQwutUCoN23=kuTiPEv=YNz8l21=N2UctNbk0pgFmFgISVIRBGwRK5x8eEUJeHvFYjhIB5SJl=URte4=tMwol6b8KN1=aH1okR3LBHGol6gk05U5Bw3F0jY=N2h80pUk0UCJ0/e=tNz=tUqiq1gXQTwRBGw5PE4M0NbMtjqJlDTi0ENM1QwFPNQFt2q5BFVRt=e8YEDol2Ck0NAokEDFqw3JPNq8j20=kixol2Ciq1w7qG3=l6vJY/U=BFwXmG38Y93ISVIRBGwRBpD=leQRODwJkiqJk1TISVIRBGwRtUYRBvY5l6b5tU48U2UctUx5KWTi0e6FPjVk05U5j2b8tUU83pzol6Y8qFgIuTwRBGwRBGwRBpD=leQleDw7aGmSkUSFlQwIBRwLmHhckE/8j23=kpzJ0/g=l6Dk0UC=Y9TIaGCRBRgRbVIRBGwRtUYRBvY5l6b5tU48U2UctUx5KWTi0exFPjVk0E48Y6UJPu3Ia1IRBGwRBGwRBG15tNhFjh5RODwR1eSMejWRbVIRBGwRtUYRBvY5l6b5tU48U2UctUx5KWTiPH3k0E48Y6UJPu3Ia1IRBGwRBGwRBG15tNhFjh5RODwRUH4FPp3FYNSMMQmXQTwRBGwolJwIt=e8YEDol2Ck0NAokEDFqw380Egk0E48Y6UJPu3Ia1IRBGwRBGwRBG15tNhFjh5RODwR12qJlEV=aRnBmGwRBHPF02S=lEuJkiv8aw3MPNQFt2q5tN1Rtpv5tjmJkEUFqFVRtUhFt/4=tMTiqQwiqQwiKpU8kGgISVIRBGwRtNbot9wix/mFbA3XQTIRBGwRtUYRBw1pD/7u1jWMeV38PW3kaG27aG38YUAiq1wcQTwRBGwRBGwRK5x8eEUJeHvFYjhIB5a=lj1JliV=aG4=kpbLPHvFPEP=BFVRsHgFe2q=lj1JliV=aw3L0NDJq2QJkEx50u3IaGyRBi6=kWw7tswoKiU=bD3RqFw806b8tUboxD3=qvFRY=DkBRVRjQmLPi3FB2FRmQwkBib8Y=Yo3jFRm137Uh0olNPkSQ4JSAmROTwi064iq1nBmGwRBGwRBGw5PE4M0NbMtjqJlDTieiUJlpvJY/URB2U5tW4F0vv=t2PiqQwutUxkPiUJlpvJY/UIBF4=kpbLPETJlp45qFgRO9wR3UUFqG9JaHTFYNY7aFbiqH48YEVolEd7a53IjQm=3pFRmQwkBR4FY5QLeQmLBHFRY=e83jmoUQmIaFZlP=g=k557B2v7mRwXmG38Y93ISVIRBGwRBGwRBHPF02S=lEuJkiv8aw3SeWw5YNqF0U48mFVRsHYol/Uk05U5j2b806D=l6DFqw3LPHq80W45YNqF0U48mFgISVIRBGwRBGwRBHPF02S=lEuJkiv8aw3ptUx5KRw8Yjh=aFVRsHYol/Uk05U5j2b806D=l6DFqw3L0NDJq2gFPEe=a6C=ku3Ia1nBmGwRBGwRBGwolJwIBs1pD/7u1jWMeV3F0jY=N2h80pUieDgRKVIRBGwRBGwRBGwRBGwiKNx=kiY5lQw7aHvF3ivcaw3=0EbiqQwi0/bJqFVRB5bJqFVRB5V=BFVRB5hJlhUiqQwiPHTFBFVRB5Q=kiViqQwiPH65tv48mFVRB5q5li6iqQwiPpvFmFVRB53cYUQiqQwi0i+okG3LBG3J3ggFOR3LBG38YW3LBG38t2bJkpUiqQwiPEeolpQ=kiViq1nBmGwRBGwRBGwRBGwRBp1Jl63=kRw7aHvF3ivcaw3o0j0iqQwi064=OWqiqQwi0i1J02q=lu3LBG35k=xJ0jCiqQwiPEv5mFVRB51F35UJYu3LBG3J0/v8lu3LBG3FYhT5l6D=kR3LBG3J0vdFY245thg5BFVRB5gFKpvJY/UFqFVRB5gFt=PiqQwiPpqokHPokiUiqQwiPETolNV=tEbiqQwiPH4F3px=l6DF313LBG3F064F3u3LBG38PEx=lW3LBG38tU1F0j18aFVRB5DJPHV80p3iqQwiPEAolu3LBG38t23J0vUJ0V3LBG38t2350jDJ0w3LBG3FPUx8ljxoqFVRB5+8lixJ0jQiqQwiPEv50eg8tQ3LBG3502q8kEbJlA3LBG38YUCoYs3ISVIRBGwRBGwRBGwRBGwitp4506V80j1=kixRODwJkiqJk1TiP53=ku3LBG3=YNDJ0w3LBG38KUCcBFVRB5Vol6dFqFVRB5b5kiViqQwi05U5BFVRB5V5PGh8lUqFY2qiq1nBmGwRBGwRBGwRBGwRtNbot9wix/mFbA3XQTwRBGwRBGwRBGwRBG15tNhFBG2RtjqFYj6IB1nBmGwRBGwRBGwRBGwRt=4FYNvJ0wwIBpeF0Nq=3NVRtjxRBpg5tNhIuTwRBGwRBGwRBGwRBGwRBGwolJwIK5x8e5TolETIBpg5tNhIa1IRBGwRBGwRBGwRBGwRBGwRBGwRBG15tNhFjh5RODwitUD=lDnBmGwRBGwRBGwRBGwRK5x8eEUJeHvFYjhIB5NF0Nq=3NViqQwoleQ8t21=aw3LBG3LBG15tNhFB1gXQTwRBGwRBGwRBGwRBG15tNhFBG2RtjqFYj6IB1nBmGwRBGwRBGwRBGwRt=4FYNvJ0wwIBp1Jl63=kRwJkWwitUD=lDgBmGwRBGwRBGwRBGwRBGwRBHg=mGT5PE4N0vgJ0wTitUD=lDgIuTwRBGwRBGwRBGwRBGwRBGwRBGwRBpD=leQleDw7aG1okpU8SVIRBGwRBGwRBGwRBGw5PE4M0NbMtjqJlDTiDpv8Y5UFmFVRtUhFt/4=tMTiqQwiqQwiKpU8kGgISVIRBGwRBGwRBGwRBGwiKpU8kGw7aHvF3ivcawgXQTwRBGwRBGwRBGwRBHY8PiUJlETRBw1=t2P8Y/4JlpUF3WwJkWwitUD=lDgBmGwRBGwRBGwRBGwRBGwRBHg=mGT5PE4N0vgJ0wTitUD=lDgIuTwRBGwRBGwRBGwRBGwRBGwRBGwRBpD=leQleDw7aG1okpU8SVIRBGwRBGwRBGwRBGw5PE4M0NbMtjqJlDTiDp4506V80j1=kixiqQwoleQ8t21=aw3LBG3LBG15tNhFB1gXQTwRBGwRBGwRBGwRBHUJ0v4RBF9J3R47mFnBmGwRBGwRBGwRBGwRK5x8eEUJeHvFYjhIB5RpsuwFPHvJ0M3LBHPF02jcBw3=tJwLlw3Ia1nBmGwRBGwRBGwRBGwRK5x8eEUJeHvFYjhIB5R8PEDFqFVRsHYol/Uk05U5j2b806D=l6DFqw3L0NDJq2T8PEDFqFgISVIRBGwRBGwRBGwRBGw=lET8qG37tiqLxA9FPHv8b6Q8PEgcj23=kpQ5PNg=BGTRUiUJlumRB2U5tW4FtjxFP51ISQ4FPHv8bA95tjm8tMZ7t=4FYDw806x5lihoku2kB53It6e8tQV83NV8BQmEaRV5tvgFq6QJkiv8SsC5YjV5lMV5tvgFq6QJkiv8SRC5YjV5lMgXPiU5KNq8mHYJl/x=ShFixA95KRZ7Kp171=q80D9LPp17b/D=OA9ol6Q5kuw5KUQ=SeD=kvDRt6v8lM2FtjqJlD/RK=v8KNU7SGZ7B2D=OA9LPpq7b/DFbA95tuZNt99LPp17b/D=OA9ol6Q5kuw5KUQ=SeD=kvDRt6v8lM2FtjqJlDqRK=v8KNU7SsQWOGZ7B2D=OA9LPpq7bQ45tjm8tMZ7tUCFKNDRKp6FtM2FPNm8lUDRK=v8KNU7aRZ7mRZ7B2Y8Pih7mFnBmGwRBGwRBGwRBGwRtUYRBvgFPEU5Bw1keH7Mep8iPw3kaQwij2uSeEMlq5xieDgRBJYRtUxk06e8lNqolWTij2uSeEMlq5AieDgRBJYRtUxk06e8lNqolWTij2uSeEMlq5xieDgIaHnBmGwRBGwRBGwRBGwRBGwRBG15tNhFBG2RBRmXQTwRBGwRBGwRBGwRBGwRBGw=Y2qRBwnRBpzMs2SNjV3cB55ROQ2RBpzMs2SNjV3Fq55XqG1keH7Mep8iPw3kaGdIq1wcQTwRBGwRBGwRBGwRBGwRBGwRBGwRBpeoluw7aHGFt2xokvz=0NDFK5eoluTij2uSeEMlq5AieDgXQTwRBGwRBGwRBGwRBGwRBGwRBGwRtUYRBw15lU1IuTwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBG15tNhFBGC7aHf80UCIBF+iqQwiKNg=B1wLmGmktAmXQTwRBGwRBGwRBGwRBGwRBGwzuTwRBGwRBGwRBGwRBGwRBGw=lET8qG37tiqLxA3XQTwRBGwRBGwRBGwRBGwRBGw5PE4M0NbMtjqJlDTieNx=kixiqQwiKpU8kGgXQTwRBGwRBGwRBGwRBH2BmGwRBGwRBGwzuTwRBGwzaHU8KEURKVIRBGwRBGwRBHPF02S=lEuJkiv8aw3SeWwNYNqF0U48mFVRK5x8DNAIB50=kR3Ia1nBmGwRBGwRBGw5PE4M0NbMtjqJlDTiDjbJ02e83uwM0ND5tUC=PW3LBHPF02jcBw38YNDRtjbJ02e83pxiq1gXQTwRBGwRBGwRK5x8eEUJeHvFYjhIB5NF0NqRsjbJ02e83pxiqQw5PE4pkwTi06U5BHeF0Nqiq1gXQTwRBGwzuTwRBGw=lET8qG37B21okJZixVIRBGwRK5x8D=48PpUFmwgXQg2BwgY5l6b5tU48mHvJPpg806uoKGTIaHnBmGwRBHPF02R=lj1=kRTISVIRBGwRtUYRBvgFPEU5Bw1keH7Mep8iPw3ka1wimJwIBpzMs2SNjV3cB55ROD2RB5g8Y=4iq1gRKVIRBGwRBGwRBHUJ0v4RBF9oOsZMsvuRtUC=Y99L0w/7b/1okJwJ0/vFPW2J02C5tNC5OA9FPp68tMZL3Gwc0E48t2qXmWQWOGnzSQ4FPp68tMZixVIRBGwRBGwRBH4JU2x5tjq5BwgXQTwRBGwRBGwRKHTFtUC=Y9TISVIRBGwRBGwRBG15teQRODw80iz=0NDk0EV=ljCIB1nBmGwRBGwRBGwiKphFBG2RKHq=l5zFYNQ8tjb=avvF3ivcawIRBGwRBGwRBGwRBGwiqsTJY21ck/vXU/PIP/m80p6LBHD=BQw5twVRtw/LBHTWm1wcqAfzajhF0UNiqQIRBGwRBGwRBGwRBGwiqjD=BQw5twwcqwCImU2RlexoNM3LGTwRBGwRBGwRBGwRBG3RS/g8l58kb65IxAv8kEgNaFVBmGwRBGwRBGwRBGwRBGwRBGgLBHvF3ivcawIRBGwRBGwRBGwRBGwiqFVBmGwRBGwRBGwRBGwRBFC=aQwL3JVRB6TLBGCoBHDoBHniOj2iqQIRBGwRBGwRBGwRBGwiqFIRBGwRBGwRBGwRBGwRBGwRB1VRBpD8kGgXQTwRBGwRBGwRtNbot9wFPpqkPiUFt/vJ0MTix/TWaFVRBF9oOR3LBG15teQIaGCRBF9L0pg5bA9J3RZixVIRBGwRKDIRBGwRtNbot9wix/TWS6jctNb5kpg80AwMsvuLlE4=tM9L0w/7b/1okJwJ0/vFPW2J02C5tNC5OA9=Y2q8aHCJleU7kHYRteU5tv4=OeQ8PEDRt2CFPNm8lUD7ai3IjQ3MtvQkBFV83NV8B/e5t2vIKpTokWCJ021=a60Jl/e=a1VkB5Fiq1nFYND5kiCRt=v8KEUXqRZ7KpUcKpvFYNvRt6v8lM2J021=aHb8tjxFxemol5vFYNvRtU17NHTFsE4=tMZiqGCRBwv=leQ5K1Tij2uSeEMlq5QieDgRO9woKph8KEQ=lEgJl/botjqFqvmJkEUEbpz=tNb80pUIBpzMs2SNjV3FB55Ia1wXmG3iq1wLmG37B2D=kvDJkiUJSA9ol6Q5kuw5KUQ=Sex5lihokuw5YjV5lM2pk=v8BHx5KUV=SDm8ljq=0UCLkp4FOTeFKwm7mFnBmGwRBHUJ0v4RBF9L0=4FYDZ7KHq=aHg=OeuoKH75kpQ5kuwFPp68tM2RmFwLmGT=leQ5K1Tij2uSeEMlq5QieDgRO9wi0pgFPHVJk1+8Y2C=SV3ROTwiqFgRBAwi0evFY5g8meD8PG+EkHAXqRwJ0/vFPW28lQ/7mFnBmGwRBHg=mGTRlNhFKp6IBpzMs2SNjV3FB55Ia1wcQTwRBGwRBGwRt2mkPEDJkiDIB1nBmGwRBGwRBGw=k=v8BvmJkEUEbpz=tNb80pUIBpzMs2SNjV3FB55Ia1nBmGwRBGwRBGw=lET8qHT5teVFPHUJ0Uv8tETJkixIt2mk05U5j2b8tNv8mwgISVIRBGwRKDIRBGwRtNbot9wixQ4FKiU7bQ4=tU07mFnBmGwRBHPF02t802D=kRTISVIzuTI=3NCJPpg80AwJlEDol2C=YDTIaHnBmGwRBHg=mGTRlNhFKp6IBpzuD27aDUjlq5YieDgIuTwRBGwRBGwRBpzuD27aDUjlq5YieDw7aHG5l6x=kigJl/gcYMTij2OSD2LaMN8i0J3ka1nBwTwRBGwolJwIBjU8kHDcaw1keH7Mep8iPG3ka1gRKVIRBGwRBGwRBG15tUh=aG2RsHYol/U8kpg8lMTij2uSeEMlq5bieDgXQTwRBGwRBGwRKEPokpboBGTij2uSeEMlq5QieDgRKVIRBGwRBGwRBGwRBGwJ0jx=aG35kHV80j1pYUV=aF+BmGwRBGwRBGwRBGwRBGwRBHg=mGTRMHh8P=UkPNQ8t2v=tN1k0=g8tMTij2taM/jMeV3=m55lq5D8kHz8Yjh=a55LBG1kD=iSsNSlq5Yiee8i06v8lM3ka1gBmGwRBGwRBGwRBGwRBGwRBGwRBGw=lET8qGmu0jCiPuw5kHV80j1Rt=g8tMvRbVIRBGwRBGwRBGwRBGwRBGwRtNVF0Ng=mGTiKpg8lMgBmGwRBGwRBGwRBGwRBGwRBGwRBGw5t2eJ0wTij2taM/jMeV3=m55lq5CJleUieDVRBpDoleULBG15tUh=a1nBmGwRBGwRBGwRBGwRBGwRBHmFYNvoxVIRBGwRBGwRBGwRBGwJ0jx=aG38lh1okR3XwTwRBGwRBGwRBGwRBGwRBGwolJwIBjG8lh1okRTFPpqkPi45OsxIBpzMs2SNjV3cB55Ia1gBmGwRBGwRBGwRBGwRBGwRBGwRBGw=lET8qGmu0jCiPuwJPiUJkpURt6U5qH1okRmXQTwRBGwRBGwRBGwRBGwRBGw=l/x=lUYRBw15tUh=a1IRBGwRBGwRBGwRBGwRBGwRBGwRBHD8PNboBvx5KizFY2DWSWTij2uSeEMlq5AieDgLBG15tUh=aQwiKpg8lMgXQTwRBGwRBGwRBGwRBGwRBGwJ3iUJlVnBmGwRBGwRBGwRBGwRtEvF0Mwi0pU8tND=aF+BwTwRBGwRBGwRBGwRBGwRBGw=3NCJPpg80Aw=tNV=kpUptUqIBpQJkpTIaHnBmGwRBGwRBGwRBGwRBGwRBGwRBGwiKHv5tww7aGTFPNmFPpqIBpQJkpTLBGhWa1w7SDwiq93IaGyRBpQJkpTROTwiKHv5twwLmG3LqFnBmGwRBGwRBGwRBGwRBGwRBGwRBGwitpTRODw8PHU8YpgFmw1FtjDoB1nBmGwRBGwRBGwRBGwRBGwRBGwRBGw50vg8tMwIBw1okpU8aG2RKiUJlp1okRTitpTIaGgRBs27aHYJl/x=a1wcQTwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBG1okpU8aG2RBpQJkpTRBAwitUD=lDnBmGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRtUYRBwTJYjx=l6v8lMTitUD=lDgROD2RBRCLmRgRK/9RBvmJkEU8Yjh=aw1okpU8a1w7SDwRmAmIa1IRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRtE483pg83NUXQTwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBG15KUQ=aG2Rt=g8tNDckHUIBpg5tNhISVIRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwolJwIBpDckHUROD2RBi1okRmIuTwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBGw=tNV=kpUptUqIBpg5tNhISVIRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBGw=l/x=uTwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwuKNC8tUCoqw1okpU8a1nBmGwRBGwRBGwRBGwRBGwRBGwRBGwzuTwRBGwRBGwRBGwRBGwRBGwRBGwRtEV8PEU=tUqIBp1oB1nBmGwRBGwRBGwRBGwRBGwRBGwRBGwuKih=tUqIBpQJkpTISVIRBGwRBGwRBGwRBGwRBGwRKDIBmGwRBGwRBGwRBGwRBGwRBHg=mGTokEzJkiqJk1Tij2uSeEMlq5YieDgIuTwRBGwRBGwRBGwRBGwRBGwRBGwRt=4FYNvJ0wwIBpzMs2SNjV3=m55RtjxRBpYIaHnBmGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRtUYRBw1=mG27aG3LmA3IuTwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwJ02C5tUC5lMnBmGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBpYRODwFPpqkPi45OsxIKNq8tpUJ021=aw1=m1gXQTwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBHUJ0v4RBpYXQTwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBHg=mGTokEz=tUqIBpYIa1IRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRtpU8tND=MpgFmw1=m1nBmGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRtNVF0MIRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRsHe8Y/g8YVTitJgXQTwRBGwRBGwRBGwRBGwRBGwRBGwRKDIRBGwRBGwRBGwRBGwRBGwRtiq=ljdXQTwRBGwRBGwRKDIRBGwRBGwRBHg=mGTiKpg8lMgBmGwRBGwRBGwRBGwRKp45lETIBpzMs2SNjV3Jq55LBG15tUh=aQwiKpg8lMgXQTwRBGwzuTwRBGw5PE4atNv=tNqIB1nBmGwRBHUJ0v4RBF9oOsZpYUV=aHhJl6v=0Nq7B2TWSA9=tU0RtEVJkEx7lE483pU83uZ7KEbFYUQ5O6QkxeAkxexkxDmRbV9LPEbFYUQ5OA3XQTwRBGwitpgF1E483pU83uw7aHPF02SJ0jC=tUqItUxF0NDIBpzMs2SNjV3Jq55IaGyRBpzMs2SNjV3Jq55ROTwis5WSDiHSjE8i0EP=B55ISVIRBGwRtUYRBw1=tUqu02C5tNC5BG27SDw=YjVF0MgRKVIRBGwRBGwRBHUJ0v4RB5OJl6FiPuw8PHU8mHDotUxRt=48tpUFms3XQTwRBGwRBGwRK5x8D=48PpUFmwgXQTwRBGwRBGwRKiU5KNq8bVIRBGwRKDIRBGwRt5V80iv8BG1F02q5OVIRBGwRBpx8PiDRODwJkiqJk1Ti06v8lM3LBG/ISVIRBGwRtUYRBwv=leQ5K1Tij2uSeEMlq5QieDgIaHnBmGwRBGwRBGwolJwIKHq=l5z8ljDJ0wTiqjxkqv8uae+kaVgkqvF=KV/za1viqQwij2uSeEMlq5QieDVRBphJkpboB1gBmGwRBGwRBGwRBGwRBpx8PiDRODwJkiqJk1Titev5tETlxj5LBGTol6DIaG18ljDJ0v8WUDgXQTwRBGwzuTwRBGw=lET8qGm7KEbFYUQ5OAIBl=e8YEDol2CRKEvIB1wcQTiBl=4Fmvg7SGnoS/1LY=g8tNxLYNV=leU83pxLY/U8Y5DoOhgIqVgBw1iBlUYItuC=YUV=kWC=l/U8lNC5KE8oNDC5KUQ=aG27aG3J0vUJ0hm8Pw3IuTiBu1i=B6Yol/UFq6U8tNh=l6DFehgka6botNbo0N1RODw=B6Yol/UFq6U8tNh=l6DFeVQka6botNbo0N1XQTizuT9LPEbFYUQ5OAI7KpvJY/URK5g=KpT7aF/WOGUiqHb8tjxFxD38ljg8mFwJ0NV8KEQJlEg8YF2ixG3RtEU8t/QJlp1ol637aFqixAI7t=4FYDw8Yjh=SeYol/UFqHh=kpT80u2Ft2x5OA95KRZ7KpTRK5g=KpT7aF/WPHAixA9ol6Q5kuw5KUQ=SebotNbo0i4cBH48YEVolEd7a5xJawgiqHb8tjxFxebothmcOA9LPpT7b/DoOA9JaHTFYNY7aFbiqH48YEVolEd7a53IjQm=YeFRm/C5l/VLjQmFe2CJleUkqRwLmGTiKE4F3p8WNDw7qGQROTwWa1wLmGmkBRgix6XJleU7B2v7bQ45twZ7KpT7b/vRtvq=lJ2iqW3Rt2CJ0/gJ0V2i0FTkBiY8NQmLt6e8tQVkBixkPEgcYNzRmGCRBw1F02q5jV/kaGyROGwXmG/IaGCRBiFRm137UEgcYM9L0sZ7B2DoOA95twZ7tswoKiU=bD3RqFw806b8tUboxD3=qvFRY=hkBRV83NV8B/FR3Ez8l21ol=6kqRwLmGTiKE4F3p8WNDw7qGQROTwWa1wLmGmkBRgix6E80pg=319L0sZ7B2DoOA95twZSP5C=kR4pPi45kG9LPpT7b/DoOA9JaHTFYNY7aFbiqH48YEVolEd7a53IjQm=YeFRm/C5l/VLjQmFe2Q=kihFe9mRBAwIBpx8PiDlxj5RO9wWBG+ROsgRBAwRUQmIaFZMtNq8lUxF0U483W9L0sZ7B2DoOA95twZulEDol2CFxQ45twZ7B2DFbAmXQTwRBGwitpgF3Ww7aG1=YUV=kWw7aHvF3ivcawgXQTwRBGwitAw7aHb8PNC5Bw1=tUqu02C5tNC5B1nBmGwRBHY8PRwIBpgRODwWOVwit1w7BG18bVwit1dIq1wcQTwRBGwRBGwRtUYRBvY5l6b5tU48U2UctUx5KWTiPH4F0UAk05U5KHP5lU1iq1gRKVIRBGwRBGwRBGwRBGwit2PRODwuKH4F0UAk05U5KHP5lU1IsHYol/U8P5C=kRTitpgF1E483pU83p8itU5Ia1nBmGwRBGwRBGwRBGwRBp3FmG2RsHQ8PEgcj23=kp3FY5g=BvG=YUV=l5q8PNQIBp1okiO806D=l6Dlqpgka1gXQTwRBGwRBGwRKDIRBGwRBGwRBG15teQRODwJkiqJk1Ti06v8lM3RODZRBp1okiO806D=l6DlqpgkaQIRBGwRBGwRBGwRBGwiPHv5tw3RODZRBpKSs2BuM/Slq5b50u3kaGCRBp1okiO806D=l6DlqpgkaQIRBGwRBGwRBGwRBGwi0e4=tUYcaFw7SAw=tjD=aw3laehLluwaOggX3W3LBHG=YUV=leDoleUIBpKSs2BuM/Slq5b50u3kaGCRBp1okiO806D=l6Dlqpgka1gLGTwRBGwRBGwRBGwRBG3FtNq8kW3RODZRK5x8eHUFYexu02V8PRTis5WSDiHSjE8i0EP=B55RBAwitpgF1E483pU83p8itU5IaQIRBGwRBGwRBGwRBGwiPEgcYM3RODZRsHYol/UF0U+=aw1pD/7u1jWMeV3JP51ieDwLmG1=tUqu02C5tNC5jV1oNDgLGTwRBGwRBGwRBGwRBG38P5C=kR3RODZRBp45eV38Yjh=a55RO9wit2Plq5CJleUieDwXmHG=YUV=l2P8YNqIBp1okiO806D=l6Dlqpgka1VBmGwRBGwRBGwRBGwRB53FY2eFBFw7SAwit5qlq5CJleUieDw7qG1=Pi8i06v8lM3kaG+RsHYol/U=Pi45kGTitpgF1E483pU83p8itU5IuTwRBGwRBGwRB1nBmGwRBGwRBGwolJwIsHgFe2Yol/UIBpKSs2BuM/Slq5b50u3kaGCRBp1okiO806D=l6Dlqpgka1gBmGwRBGwRBGwRBGwRBpYol/UFeh5RODwJkiqJkUz8lNq=0MTiKphFBQwJkiqJk1TiPp6FtM3RODZRB5Yol/Uiq1gXQTwRBGwRBGwRtNVF0Ng=mGTutUxk0/g8YVTis5WSDiHSjE8i0EP=B55RBAwitpgF1E483pU83p8itU5Ia1IRBGwRBGwRBGwRBGwitpgF3E8kaG2RtjqFYj6k0eUFY5UIBpD8kGVRtjqFYj6IB5DckHUiqG27mG38tUCoqFVRB5Vol6diqG27mHq=lj18tUCoqw15teQlq5QJkpTieDgIa1nBmGwRBGwRBGw=l/x=lUYRBvGokEz=tUqIBpKSs2BuM/Slq5b50u3kaGCRBp1okiO806D=l6Dlqpgka1gBmGwRBGwRBGwRBGwRBp1okixleDw7aHvF3ivcN2h=ki3=aw15teQLBHvF3ivcaw35KUQ=aFw7SAwi0pgFmFgISVIRBGwRKDIRBGwRBpKSs2BuM/Slq5x8PiDieDw7aG1F02q5OVIBmGwRBHY5l6b5tU48mHPF02O8kGTitsVRBpmIaHnBmGwRBGwRBGwolJwIBpKSs2BuM/Slq5x8PiDiee8WjDwRSDwiPEgcYM3IuTwRBGwRBGwRBGwRBHq=kpeFYAwFPpqJ0eQIKEDF3p48t2P=kRTitj8is5WSDiHSjE8iPE4F3u3kNVQkNDgLBHx5KiD80/450NqIBpmlqpKSs2BuM/Slq5x8PiDiee8Wje5Ia1wImGTis5WSDiHSjE8iPE4F3u3kNV/kaGyROswXmGhWa1nBmGwRBGwRBGw=l/x=uTwRBGwRBGwRBGwRBHq=kpeFYAwIBw1JNV3F0U+=a55ROQwiti8iPEgcYM3ka1w7qGhWaG+ROsgRBTwIBpKSs2BuM/Slq5x8PiDiee8WNDw7qG/ROTwLSsgXQTwRBGwzuTIRBGwRKNx8PiDIBpYol/UFqQwR35x8DEhFBRgXQTwRBGw5kE4F3uTitpgF3WVRBiPF02O8kGmISVIRBGwRBpYol/UFqG2RtjqFYj6k0eUFY5UIBp1okixLBG1=YUV=kWgXQTwRBGwitQw7aGQXQTwRBGw=Y2q=ljboBGTit=g8tNxRtjxRBpYIaHnBmGwRBGwRBGwit=CJleURODwFPpqkPi45OsxIKNq8tNCJ021=aw1=UV38Yjh=a55Ia1nBmGwRBGwRBGw=lET8qG37KpqiqGCRBw18BGyRBFwJ0/vFPW28Os3ROTwiqFgRBAwixA95tuZ7tUCFKNDRKp6FtM2J0vUJ0hm8Pww8Yjh=SDm=Uh5RmH0Jl/e=SDmiqGCRBpY8Yjh=aGCRBFmRtEVJkEx7lETo0iA7bQ45tuZ7Kp17b/vRtvq=lJ2RqH48YEVolEd7aR3RBAwIBw1=UV35KUQ=a55ROD2RB5Yol/Uiq1w7qG3=qvFi0=DkBFV83NV8B/FiqFwLmG1=Y6v8lMwLmG3kBFVRjQ35YUU5eQ3IaRZiqGCRtvD8l/xFtNboljVJ0vvF3WTit=8i06v8lM3ka1wXmG3=qvFi0=hkBFVkBF3RBAwFPpqkPi45OsxIBpYlq5QJkpTieDgRBAwieQ3ISVmRBFwLmGT=leQ5K1Tit=8i0/g8YV3ka1w7qG3iqG+RBiDokpV=SD3cqpYlq5Vol6diee2iqRgRBAwixA9Jb68RBFwLmHT5teVFPHUJ0Uv8tETJkixIBpYlq5CJleUieDgRBAwiqH57B2m7mFgRBAwixQ4JSA9LPp17b/D=OA3RBAwIBw1=UV35KUQ=a55ROD2RB5Yol/Uiq1w7qHPF02lolNPM0U+=aw1=UV3F0U+=a55IaG+RBpYlq5DckHUieDgRBAwixQ45tuZ7Kp17mFwLmG1=UV38l21ol=6ieDwLmG37B2D=OA95tuZiqGCRBpYlq54506UFm55RBAwiq93RBAwit=8i05q8PNQieDwLmG37B2D=OA95tuZ7tswoKiU=bDbRt2CJ0/gJ0V2RYFTkB5Y5jQ3Lt6e8tQVkBF3RBAwit=CJleURBAwieQ3LjQ3J0vh80pFiq1m7mFwLmG1=UV3FtNq8kW3kuTwRBGwRBGwRBAwixQ45tuZ7Kp17b/vRtvq=lJ2RmWmRt2CJ0/gJ0V2RYFTkB5Y5jQ3Lt6e8tQVkBF3RBAwit=CJleURBAwieQ3LBHFiPiU8Yjh=NQ3IaRZMbQ4JSAw7tswoKiU=bDmRqRw806b8tUboxDm=qvFi0=DkBFV83NV8B/FiqFwLmG1=Y6v8lMwLmG3kBFVRjQ35t2eJ0vFiq1m7Uu9L0sZiqGCRBwTit=8iPp6FtM3kaG27aG3=YUV=aFgRO9wiqG9JaHTFYNY7aRbRmH48YEVolEd7ai3IjQ3=3pFiq/C5l/VLjQ3iqGCRBpY8Yjh=aGCRB5FiqQwkB5U=tUDkBFgRb6j7B2v7mG9JaHTFYNY7aRbRmH48YEVolEd7ai3IjQ3=3pFiq/C5l/VLjQ3iqGCRBpY8Yjh=aGCRB5FiqQwkB518P5C8t2v=jQ3IaRZpOQ4JSA3ROTwiqFgRBAwixQ45tuZ7B2DFbA3XQTwRBGwRBGwRBpVRODwitQw7qGQROTwWSVIRBGwRKDIRBGwRtNbot9wRb/DFbA95tuwJ02VFPHv8bDP7wTi7tUCFKNDRKp6FtM2otU1=tNCRt6v8lM2JaH0Jl/e=SD3=YD37wTi7tUCFKNDRKp6FtM2otU1=tNCRt6v8lM2JqH0Jl/e=SD3RmGCRtvD8l/xFtNboljVJ0vvF3WTFPpqkPi45OsxIBpKSs2BuM/Slq5b50u3ka1gRBAwRmFZBw19ol6Q5kuw5KUQ=SeTolp1=lAw8Yjh=SeboBH0Jl/e=SD3RmGCRBvgFPEU5Bw1keH7Mep8i0ETieDgRO9wij2uSeEMlq5boB55ROTwiqFgRBAwRmFZBw19F0NV=lEDRt6v8lM2iPG37b/4FKpg80Aw5YjV5lM2i0pU8tND=aFZptNV=kpU7B24FKpg80AZRbVIRBGwRtNbot9wRbQ4F0NV=lED7m=CJ3EQXqRnBmGwRBHUJ0v4RBR9ol6Q5kuw5KUQ=SD3FPNm8lUDiqH0Jl/e=SD37bA37bQ45tuZ7B2DFbA9L0=4FYDZ7B2DJliV=SA9L0pg5bAmXQTwRBGw5PE4pY245tNqIB1nB3DIBY=e8YEDol2CRtjb5tU483EDIB1wcQTwRBGwolJwIBjY5l6b5tU48U2UctUx5KWTi0vUcOimolA3Ia1wcQTIRBGwRBGwRBHY5l6b5tU48mHT=kwqJYUCIBpQIaHnBmGwRBGwRBGwRBGwRKiU5KNq8mH1=lEmolATotNA=tNbIBpQIa1nBmGwRBGwRBGwzuTIRBGwRKDIRBGwRtUYRBwv=3NCJPpg806z=kvgFPpxIB5mol6T=kw3Ia1wcQTIRBGwRBGwRBHY5l6b5tU48mHmol6T=kwTiKGgRKVIRBGwRBGwRBGwRBGwFYND5kiCRtpUJ0vUcBvmol61=lWTiKGgISVIRBGwRBGwRBH2BwTwRBGwzuTwRBGwolJwIBjY5l6b5tU48U2UctUx5KWTi0vUcOivF0EgoaFgIaHnBwTwRBGwRBGwRt=e8YEDol2CRtvUcOivF0Egoaw1FB1wcQTwRBGwRBGwRBGwRBG1FmG2RBF3XQTwRBGwRBGwRBGwRBHY8PRwIBpgRODwWOVwit1w7BHx5KiW=lATiKGgXqG1oaGd7aGqIaHnBmGwRBGwRBGwRBGwRBGwRBG1FmGC7aHboKRTotNA=tNbIBpQlqpgkaGCRBpQlqpgRBVwWNDgISVIRBGwRBGwRBGwRBGwzkiU5KNq8mG1FbVIRBGwRBGwRBH2BwTwRBGwzuTwRBGwolJwIBjY5l6b5tU48U2UctUx5KWTi0jxJ0UgWYvUcBFgIaHnBwTwRBGwRBGwRt=e8YEDol2CRtjxJ0UgWYvUcBw1FB1wcQTwRBGwRBGwRBGwRBG1FmG2RBF3XQTwRBGwRBGwRBGwRBHY8PRwIBpgRODwWOVwit1w7BHx5KiV=lATiKGgXqGdIqpgIuTwRBGwRBGwRBGwRBGwRBGwiKRwLbDwFPHqol6D=mw3iSGqlBFVRt2q=Bw1FjV1oNDgIShq=kpeFYAwFPpq5t2eFKHUFmw1Fm1nBmGwRBGwRBGwzuTIRBGwRKDIRBGwRtUYRBwv=3NCJPpg806z=kvgFPpxIB5Y5l/VkPNq8tNCJ021=aFgIaHnBwTwRBGwRBGwRt=e8YEDol2CRt=e8t/z5kiV=l6b80pUIBpQIaHnBmGwRBGwRBGwRBGwRBpqRODwiqFnBmGwRBGwRBGwRBGwRt=4FmGTit1w7aGQXqG1oaG9RKEDFY/U8mw1FB1nRBVdit1gBmGwRBGwRBGwRBGwRBGwRBG1FmGC7aG3iaFwLmH1=lET=kwT8Pi1IBpQlqpgka1gXPiU5KNq8mHx5KiD8PNQFtNqIBpqISVIRBGwRBGwRBH2BwTwRBGwzuTwRBGwiKEDFYUC=ep480/xRODwJkiqJk1TBmGwRBGwRBGwiDivF0M0EBHU8YE4=tM3RODZRB5mJkEUEbpz=l6b80pUiqQIRBGwRBGwRBG3uYjx=SJDRtpUJ021=aFw7SAwi0ivF0M0Ej21=lE4=tM3LGTwRBGwRBGwRB5S5KRwMY2DWSW3RODZRB5x5KizFY2DWSW3LGTwRBGwRBGwRB5NFYQw=l6b80pUiqG27mG35kiV=l6b80pUiqQIRBGwRBGwRBG3NkiVRtpUJ021=aFw7SAwiPNq8tpUJ021=aFVBmGwRBGwRBGwiD=e8tQw5kiV=l6b80pUiqG27mG3=3NV8j2eFY/U8YE4=tM3LGTwRBGwRBGwRB5h=OMwotjxoBFw7SAwi0e1EaFVBmGwRBGwRBGwiPETJSswotjxoBFw7SAwiPETJSs3LGTwRBGwRBGwRB5bF3UQ5BFw7SAwi0EqckHDiqQIRBGwRBGwRBG3ueiOWxR3RODZRB5bFYWxWmFVBmGwRBGwRBGwiDjSuDUiRKp4RsvjlBFw7SAwi0jxJ0UgWYvUcBFVBmGwRBGwRBGwiDvjlBHD8qHHMDEiaaFw7SAwi0vUcOivF0EgoaFVBmGwRBGwRBGwiDvjlBHD8qHspMW3RODZRB5T=kv1=lW3LGTwRBGwRBGwRB5RpNww5t9wu1UXiqG27mG3otNAWYig8mFVBmGwRBGwRBGwiDpjuqHD8qHRpNw3RODZRB51=lET=kw3LGTwRBGwRBGwRB5spMWw5t9wu1UXiqG27mG3=tNbJYUCiqQIRBGwRBGwRBG3u1UXRKp4RsvjlBFw7SAwi0ig8YvUcBFVBmGwRBGwRBGwiDiiSmHD8qHspMW3RODZRB5mol61=lW3LGTwRBGwRBGwRB5S5Kig8YFw5t9w8t2P=kRwJ0jx=aFw7SAwiPEDF3p48t2P=kR3LGTwRBGwRBGwRB5S5Kig8YFw5t9w5kHQ=kRwJ0jx=aFw7SAwiPEDF3p45kHQ=kR3LGTwRBGwRBGwRB5R5teVFPHUJ0Uv8tETJkixiqG27mG3oKph8KEQ=lEgJl/botjqFqFVBmGwRBGwRBGwieEDFYUC=qHV=l635tw3RODZRB5x5KiV=lA3LGTwRBGwISVIRBGwRK5x8DvUJlpUFmwgXQTwRBGw=lET8qG37tw/7UEDFYUC=qHb8060=kixol2CFxQ4oOsZ7tpg5mHb8tjxFxeb806D=l6D7mFnBmGwRBHUJ0v4RBR9=Y2q8aHCJleU7a5D802VFD=4FYD3Rt2CMPNm8lUD7a53It6e8tQV83NV8B/DotUxL3EU8tNb5jp480QC5YjV5lMV5tvgFq6g83He5B60Jl/e=a1nFYND5kiCRt=v8KEUXqFZ7KEU8tNb5BHCJleU7a5x=l/UJPpM802VixAmXQTwRBGw=Y2q=ljboBGTiKEDFYUC=ep480/xRtjxRBpdRODZRBp0IuTwRBGwRBGwRtNbot9wRb/4FKpg80Aw5YjV5lM2iqRwLmHT5teVFPHUJ0Uv8tETJkixIBp0IaGCRBR37mRwLmG1oqGCRBR9L02Q5tU48bAmXQTwRBGw=lET8qGm7B2x=l/UJPuZ7tUCFKNDRKp6FtM2iPEeJYeg5BFw5YjV5lM2ixAZiq9Z7tiq7b/D=kvDJkiUJaHCJleU7a5g83He5BFwFPp68tM2i0evFY5g8meD8PG+EkHAiqHb8tjxFxemol5vFYNv7mRwLmGT=leQ5K1Tij2uSeEMlq5QieDgRO9wiqFwXmHT5teVFPHUJ0Uv8tETJkixIBpzMs2SNjV3cB55Ia1wLmGm7B2D=kvDJkiUJSA9L0=4FYDZ7KHq=aHb8tjxFxD38lQ/iqHx5KUV=SD3RmGCRBvU8kHDcaw1keH7Mep8iPG3ka1w7qG3=tUxFt/vcSgC806UXqFwXmG3iq1wLmGm8ljq=0UCLkp4FOTeFKw3RtU17a5x5Ki75kpQ5ku37mRnBmGwRBHg=mGTRlNhFKp6IBpzMs2SNjV3FB55Ia1wcQTwRBGwRBGwRtUYRBvg8U2vF3ivcaw1keH7Mep8iPG3kaQwiKEDFYUC=ep480/xIa1IRBGwRBGwRBGwRBGw=lET8qHT5teVFPHUJ0Uv8tETJkixIBpzMs2SNjV3FB55IBpzMs2SNjV3cB55Ia1nBmGwRBH2BmGwRBHUJ0v4RbQ4FKiU7bQ4=tU07b/mFbA9oOsZM0NvFYETRt=g8tNxXbQ4oOsZ7tpg5mHb8tjxFxeb806D=l6D7wTiBS/Y8PihRt2CFPNm8lUD7NQm=qvC5l/VLKi45OsxIKpTokWCJP51L3=v8KNUIa/C5l/VLKpTokWC5tNA5B60Jl/e=a/DotUxLY=g8tNCJleUL3=v8KNUIShq=kpeFYAw=YjVF0MnkBRZ7KpvJY/URtEU8t/QJlp1ol637aF/iqHb=l/VFPHvJ0UC=xD3WBFw50U15tw2ixMQiaFZBw1iBS/DFbA95tuw50U15tw2ixsUix6M=kvDXbQ45tuZ7Kp17b/g83He5BHDckHU7a5D=kvDiqHCJleU7a5D=kvDiqHx5KUV=SD350U15tw+WSGQiaFZ7B2D=OA9LPpq7wTiBu195KRZ7Kp17UHv5tw+7B2D=OA95tuZ7tUCFKNDRKp6FtM2iPpUcKu3Rt6v8lM2i0EP=BFw5YjV5lM2iqRwLmHT5teVFPHUJ0Uv8tETJkixIBpKSs2BuM/Slq5b50u3ka1wLmGmiqHx5KUV=SD350U15tw+WSGQiaFZ7B2D=OA9LPpq7wTiBu195KRZ7Kp1716v8lM+7B2D=OA95tuZ7tUCFKNDRKp6FtM2iPpUcKu3Rt6v8lM2i0=g8tNCJleUiqH0Jl/e=SD3ImFwFPp68tM2iP5g=KpTXbsQWBM37bQ45tuZ7B2DFbAIBu1i7Kpq7b/D=OA9LPp17b/D=OA9ol6Q5kuw5KUQ=SD3FPNm8lUDiqH0Jl/e=SD37bA37bQ45tuZ7B2DFbAIBu1i7B2DJliV=SA9L0=4FYDZRbVIBmGwRBHY5l6b5tU48mHPF02a=lEeF3Eg5YNK8t2mIBpQJkpTIaHnBmGwRBGwRBGwolJwIKEeJ3EDFmw1FtjDoBQwLSsgRBs2RBF4iq1IRBGwRBGwRBGwRBGwiKHv5twwLbDwiq93XQTwRBGwRBGwRBpQJkpTFqG2RsHvF3ivcN2e8YU/5lMTutjqFYj6k0eUFY5UIsH38t2mIBpQJkpTRBAwij2uSeEMlq5xieDgLBHG=0/4Jmw1FtjDoBGCRBFfiqQwpD/7uU27S1/=psUaIa1gXQTwRBGwRBGwRtUYRBvgFe2vF3ivcaw1FtjDoKWgRBJYRsHb8PNC5Bw1FtjDoKWgIaHnBmGwRBGwRBGwRBGwRt=4FYNvJ0wwIBpQJkpTFqHvFqG1okpU8a1wcQTwRBGwRBGwRBGwRBGwRBGwolJwIsHgFe21okRTitUD=lDgIaHnBmGwRBGwRBGwRBGwRBGwRBGwRBGwolJwIBpQJkpTRBs2RBpg5tNhIuTwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBHPF02a=lEeF3Eg5YNK8t2mIBpg5tNhISVIRBGwRBGwRBGwRBGwRBGwRKDw=l/x=aHnBmGwRBGwRBGwRBGwRBGwRBGwRBGwolJwItNhFKp6IBpzMs2SNjV3cB55IaH9zBHGFPpqFt2xIt=g8tNz=0NDk0E483pU83pxIBpg5tNhIaQwij2uSeEMlq5AieDgRBs27aHYJl/x=a1IRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBGw=lET8qGm7tswoKiU=bD3RqFw806b8tUboxD3=qvFRY=DkBRV83NV8B/FRmRwLmHeFY/U8YE4=tMTFPpqkPi45OsxIBpg5tNhIa1wLmGmkBRVRjQm5YUU5eQmLjQmkBRgixAmRBAwoKph8KEQ=lEgJl/botjqFqw1okpU8a1wLmGm7B2v7b/mFbAmXQTwRBGwRBGwRBGwRBGwRBGwzuTwRBGwRBGwRBGwRBH2BmGwRBGwRBGwzuTwRBGwzuTIRBGwRtUYRBw1keH7Mep8iPW3ka1IRBGwRBGwRBHPF02a=lEeF3Eg5YNK8t2mIBpzMs2SNjV3Jq55ISVIRBGwRtNbot9wRbQ4=tU07mRnBmGwRBHPF02t802D=kRTISVIzuTI=3NCJPpg80AwJlEDol2C=3uTIaHnBmGwRBHg=mGTokEx=kuTij2uSeEMlq5QieDgIuTwRBGwRBGwRBpzMs2SNjV3FB55RODwFPpqkPi45OsxIKNq8tpUJ021=aw1keH7Mep8iPG3ka1gXQTwRBGwolJwItUxF0NDIBpzMs2SNjV3cB55Ia1wcQTwRBGwRBGwRKEPokpboBGTij2uSeEMlq5AieDgRKVIRBGwRBGwRBGwRBGwJ0jx=aG3=t2P8Y/4Jlu3XwTwRBGwRBGwRBGwRBGwRBGwolJwIsHgFe2Yol/UIBpzMs2SNjV3FB55IaGYimHGokEzFYNv=tjm8tMTij2uSeEMlq5QieDgIaHnBmGwRBGwRBGwRBGwRBGwRBGwRBGw80izFPpvF3uTRY2mk05+otjC=t/UFmRVROuQXSJgXQTwRBGwRBGwRBGwRBGwRBGwRBGwRtvUJlpUFmwmu02C5tNC5BesokEQ8PEg5tU48bTwJkpDJlET8lNC5OVw=YUV=l6v8lM2RmGCRtivF0NCJleUIBpzMs2SNjV3FB55Ia1nBmGwRBGwRBGwRBGwRBGwRBGwRBGwolJwIt=e8YEDol2Ck0NAokEDFqwm8lUh=N2b806D=l6DkPp6FtMmIa1wcQTwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBG15KUQ=aG2RsHholeUk0E483pU83pz5KUQ=aw1keH7Mep8iPG3ka1nBmGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRtvUJlpUFmwmu02C5tNC5BeMckHUXmGmRBAwiKp6FtMgXQTwRBGwRBGwRBGwRBGwRBGwRBGwRKDw=l/x=uTwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBHT=lj1=kRTR1E483pU83uhNKUQ=STwJkHQ8tUbJkpg80A480ED=kuhFPpq=ljhRm1nBmGwRBGwRBGwRBGwRBGwRBGwRBGwit=QRODwut=4FtNCIBpzMs2SNjV3FB55LBGmFmRgXQTwRBGwRBGwRBGwRBGwRBGwRBGwRtUYRBw1=3GgRKVIRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBGw50vg8tMwIBjG=YN4=mw1=3GgIuTwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBGw=lET8qHG=Y5U5KWTit=QLBG/WORDISVIRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBGw=YEV8PEUIBpYFB1nBmGwRBGwRBGwRBGwRBGwRBGwRBGwzuTwRBGwRBGwRBGwRBGwRBGwzaHUctUDXQTwRBGwRBGwRBGwRBGwRBGwJ3iUJlVnBmGwRBGwRBGwRBGwRtEvF0Mwi0ed=YUV=aF+BmGwRBGwRBGwRBGwRBGwRBHg=mGTRl=g8tNz=kvgFPpxIBpzMs2SNjV3FB55Ia1wcQTwRBGwRBGwRBGwRBGwRBGwRBGwRBpDoleUptUqRODwut=g8tNh5tUh=aw1keH7Mep8i0W3ka1nBmGwRBGwRBGwRBGwRBGwRBGwRBGwit=QRODwut=4FtNCIBpzMs2SNjV3FB55LBG35qFgXQTwRBGwRBGwRBGwRBGwRBGwRBGwRtUYRBw1=3GgRKVIRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwij2uSeEMlq5AieDw7aGm=lpg5BRnBmGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRt=b8t2x=aw1=3GgXQTIRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwolJwIBpDoleUptUqIaHnBmGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBHD8PNboBw1keH7Mep8i0W3kaQwiKpg8lNsokRVRBpDoleUptUqISVIRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRKp45lETIBpzMs2SNjV3FB55LBG15tUh=MpgFmQwiKpg8lNsokRgXQTwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBH2BmGwRBGwRBGwRBGwRBGwRBGwRBGwzuTwRBGwRBGwRBGwRBGwRBGwzuTwRBGwRBGwRBGwRBGwRBGwJ3iUJlVnBmGwRBGwRBGwzuTwRBGwzuTIRBGwRK5x8DvUJlpUFmwgXQTwRBGw=lET8qG37tw/71=g8tMw5t248KW9L0w/7b/1okJwJ0/vFPW2J02C5tNC5OA3XQTwRBGwolJwIBjYol/Uk0NAokEDFqw1keH7Mep8iPG3ka1gRKVIRBGwRBGwRBHUJ0v4RB5tol/URt645BHUctUx5KW3XQTwRBGwRBGwRK5x8D=48PpUFmwgXQTwRBGwRBGwRKiU5KNq8bVIRBGwRKDIRBGwRBpeoluw7aHGFt2xokvz=0NDFK5eoluTut=g8tN4506UFmw1keH7Mep8iPG3ka1gXQTwRBGwolJwIBs15lU1IaHnBmGwRBGwRBGwiKNg=jV38Yjh=a55RODwut=g8tN4506UFmw1keH7Mep8iPG3ka1nBmGwRBGwRBGwit5g=jV38Yjh=a55RODwut=g8tN3FY2eFBw1keH7Mep8iPG3ka1nBmGwRBH2RtNVF0MIRBGwRBGwRBG1=0U1RODwuKH4F0UAk05U5t5q=0U1IsHYol/U=Pi45kGTij2uSeEMlq5QieDgISVIRBGwRtNbot9wix/xFtjC716v8lM+7B2xFtjC7mG3RBAwoKph8KEQ=lEgJl/botjqFqvGJYjx=l6v8lMTij2uSeEMlq5QieDgIaGCRBFw7KEQJlAZM0U+=ST9LPEQJlAZRBFwLmGTokEz=YUV=aw1keH7Mep8iPG3ka1w7qHPF02lolNPM0U+=avYol/UF0U+=aw1keH7Mep8iPG3ka1gROTwiqD3IaGCRBFw7KEQJlAZMtNq8lUxF0U48bT9LPEQJlAZRBFwLmHPF02u=kihFDE48t2qIBpzMs2SNjV3FB55IaGCRBFw7KEQJlAZSP5C=kR4pPi45kG+7B2xFtjC7mG3RBAwiKNg=jV38Yjh=a55RBAwiq93RBAwit5g=jV38Yjh=a55RBAwix/mFbA3XQTwRBGw=lET8qG37KEQJlAZu0vv8Y5URKpg8lM+7B2xFtjC7mG3RBAw=tjD=aw3laehLluwaOggX3W3LBHYol/UJPpg8lMTij2uSeEMlq5QieDgIaGCRBFw7KEQJlAZulEb=kExRKpg8lM+7B2xFtjC7mG3RBAw=tjD=aw3laehLluwaOggX3W3LBHYol/UJkpg8lMTij2uSeEMlq5QieDgIaGCRBFw7KEQJlAZSl21ol=6RKpg8lM+7B2xFtjC7mG3RBAw=tjD=aw3laehLluwaOggX3W3LBHYol/U8kpg8lMTij2uSeEMlq5QieDgIaGCRBF9J3RZ7tiq7mFnBmGwRBHg=mGT=leQ5K1Tij2uSeEMlq5AieDgIuTwRBGwRBGwRBpzMs2SNjV3cB55RODwiP=g=kF3XQTwRBGwolJwItUxk0=g8tMTij2uSeEMlq5QieDgIuTwRBGwRBGwRBphRODwJkiqJk1Tie=g=kF3LBG3atU3ot/g=0vDiqQwiDp4506V80j1iqQwiDvUctpe8kG3LBG3plpg5BFVRB5Oote4=BFVRB5a=l6v8lM3LBG3Nt2eJ0w3ISVIRBGwRtNVF0MIRBGwRBGwRBG18aG2RtjqFYj6IB5Oote4=BFVRB5a=l6v8lM3LBG3Nt2eJ0w3ISVIRBGwRt=4FYNvJ0wwIBphRtjxRBp0IuTwRBGwRBGwRtNbot9wix/vRtvq=lJ2RqH48YEVolEd7ai3It6e8tQV83NV8B/FiqFwLmHeFY/U8YE4=tMTFPpqkPi45OsxIBpzMs2SNjV3FB55Ia1wLmG3kBFVkBF3RBAwFPpq5t2V8P5UFmw15m1wLmG3kBFgRbA3RBAwIBvx5KiD80/450NqIBp0IaG27aG1keH7Mep8iPw3ka1w7qG37tRZlqG3RBAwiKJwLmG3RjD9L0RZiqG+RBp0IaGCRBF9L0sZRBFnBmGwRBHUJ0v4RBF9J3RZ7tiq7mFnBmGwRBHx50UDJ0wwIBpzMs2SNjV3cB55IaHnBmGwRBGwRBGwJ0jx=aG35YUU5qF+BmGwRBGwRBGwRBGwRtNbot9wix/QFYMwJ0/vFPW28lQ/7mFnBmGwRBGwRBGwRBGwRBpYFBG2RsHY8PHU8mw1keH7Mep8iPG3kaQwiPR3ISVIRBGwRBGwRBGwRBGwolJwIBpYFB1wcQTwRBGwRBGwRBGwRBGwRBGw50vg8tMwIBjG=YN4=mw1=3GgIuTwRBGwRBGwRBGwRBGwRBGwRBGwRtNbot9woKph8KEQ=lEgJl/botjqFqvG=Y5U5KWTit=QLBG/WORDIa1nBmGwRBGwRBGwRBGwRBGwRBHG=YEV8PEUIBpYFB1nBmGwRBGwRBGwRBGwRKDIRBGwRBGwRBGwRBGw=lET8qG37B2QFYMZixVIRBGwRBGwRBGwRBGwJ3iUJlVnBmGwRBGwRBGwJ0jx=aG3otU3ot/g=0vDixTIRBGwRBGwRBGwRBGwolJwIsHgFe2q=lj1JliV=aw1keH7Mep8iPG3ka1gRKVIRBGwRBGwRBGwRBGwRBGwRtNbot9wix/1okJwJ0/vFPW28lQ/RKEDcl/U7aimJlEd=Pi45l61LlE48t2qXmGb=SjUWlM/X0E48t2qXYiVJlEdXqRZixVIRBGwRBGwRBGwRBGwRBGwRBpb80pURODwutvg=0vVol5T5j2Yol/UIBpzMs2SNjV3FB55LBHDF3NUISVIRBGwRBGwRBGwRBGwRBGwRtNbot9wFPpqkPiUFt/vJ0MTJkiqJk1Tix/xFtjCRBFVRBF9LPEQJlAZiq1VRtjqFYj6IBF9=Y2C5BG3LBG37B2Y806D7mFgLBG1J021=a1wLmG37B21okJZixVIRBGwRBGwRBGwRBGwzuTwRBGwRBGwRBGwRBHmFYNvoxVIRBGwRBGwRBHbJkEURB5bote4=BF+BmGwRBGwRBGwRBGwRtUYRBwv=leQ5K1Tij2uSeEMlq5xieDgIaHnBmGwRBGwRBGwRBGwRBGwRBG1FtNq8kWw7aGQXQTwRBGwRBGwRBGwRBGwRBGw=Y2qRBw1oaG2RKEDFY/U8mw1keH7Mep8iPW3ka1wLaG/XqG1oaGZ7aGQXqGhLapgIuTwRBGwRBGwRBGwRBGwRBGwRBGwRBpQ=kihFqGd7aGTol6DIaG1keH7Mep8iPW3kNV1oNDwImHQ8PFTXBQwIKEDFY/U8mw1keH7Mep8iPW3ka1wLaG1oaGhROsgISVIRBGwRBGwRBGwRBGwRBGwRtUYRBwvutET8l21IBpzMs2SNjV3FB55LBG1FtNq8kWgIuTwRBGwRBGwRBGwRBGwRBGwRBGwRtNbot9wiDEv8UQ35BHx=kuwFtNq8lUxF0U483Wv7tiq7b/xJPigFKuZ=t2b5leU83uC8lJCFq60Jl/e=SDmRbV9LPEbFYUQ5OA3XQTwRBGwRBGwRBGwRBH2BmGwRBGwRBGwRBGwRtEV=ljqFPpv5tEvJ0vUIB1nBmGwRBGwRBGwRBGwRtNbot9wix/xJPigFKuZFe92RmRn7B2xJPigFKuZ7t=4FYDw806x5lihoku2RYFT83NV8B/C5l/VLjQ3iqGCRKNq8tNCJ021=aw1keH7Mep8iPG3ka1wLmG3kBFV83NV8B/DotUxLYET8l21L3=v8KNUIShq=kpeFYAw=YjVF0MnRbA9ol6Q5kuw5KUQ=SeD=kvDRt6v8lM2J0vh80uw5YjV5lM2RmFwLmHx5lix5KRTFPHqol6D=mw3il93LBHYol/UFtNq8kWTij2uSeEMlq5QieDgIaQwLSugRBAwiqRZ7tUCFKNDRKp6FtM2FPNm8lUDRK=v8KNU7aRZ7mRZ7B2Y8Pih7mFnBmGwRBGwRBGwRBGwRtiq=ljdXQTwRBGwRBGwRtEvF0Mwi0N1oku3XwTwRBGwRBGwRBGwRBHg=mGTRlUxkP5qokpvJY/UIBpzMs2SNjV3FB55Ia1wcQTwRBGwRBGwRBGwRBGwRBGw=lET8qG3pYUV=aHgF06FiPuw5Pig5tNvJY/UixVIRBGwRBGwRBGwRBGwRBGwRtiq=ljdXQTwRBGwRBGwRBGwRBH2BmGwRBGwRBGwRBGwRtUYRBwv=leQ5K1Tij2uSeEMlq5xieDgIaHnBmGwRBGwRBGwRBGwRBGwRBG15tUh=aG2RsHYol/U8kpg8lMTij2uSeEMlq5QieDgXQTwRBGwRBGwRBGwRBGwRBGwij2uSeEMlq5xieDw7aHx5lix5KRTij2uSeEMlq5xieDVROsgXQTwRBGwRBGwRBGwRBGwRBGwij2uSeEMlq5xieDw7aHmJkEUEbpz=tNb80pUIBpzMs2SNjV3Fq55ISVIRBGwRBGwRBGwRBGwRBGwRBpYFBG2RsHY8PHU8mw1keH7Mep8iPG3kaQwR3FmISVIRBGwRBGwRBGwRBGwRBGwRtUYRBw1=3GgRKVIRBGwRBGwRBGwRBGwRBGwRBGwRBHG=35qokpUIBpYFBQwij2uSeEMlq5xieDgXQTwRBGwRBGwRBGwRBGwRBGwRBGwRsHYJ0/4F0MTit=QISVIRBGwRBGwRBGwRBGwRBGwRBGwRBHUJ0v4RB5SJk=U=Bs9J3RZ7KEbFYUQ5O6xkxDmRbV9LPEbFYUQ5OA3XQTwRBGwRBGwRBGwRBGwRBGwzuTwRBGwRBGwRBGwRBH2BmGwRBGwRBGwRBGwRtNbot9wix/Y8PihRt2CFPNm8lUD7ai3It6e8tQV83NV8B/FiqFwLmHeFY/U8YE4=tMTFPpqkPi45OsxIBpzMs2SNjV3FB55Ia1wLmG3kBFV83NV8B/FixjFiqhe5t2vIKpTokWC5tNA5B60Jl/e=a1gXPiU5KNq8mHYJl/x=SVm7b/D=kvDJkiUJaHCJleU7kpUcKuwJ0/vFPW2JYU3JkiUJSA3XQTwRBGwRBGwRBGwRBG1=3Gw7aHG=Y2Q=lATij2uSeEMlq5QieDVRB5qiq1nBmGwRBGwRBGwRBGwRtUYRBw1=3GgRKVIRBGwRBGwRBGwRBGwRBGwRK5Tol/URBwvut=U80JTit=QIa1IRBGwRBGwRBGwRBGwRBGwRBGwRBHUJ0v4RtvD8l/xFtNboljVJ0vvF3WTut=3=kpxIBpYFBQwWSGqEB1gXQTwRBGwRBGwRBGwRBGwRBGwut=b8t2x=aw1=3GgXQTwRBGwRBGwRBGwRBH2BmGwRBGwRBGwRBGwRtNbot9wixQ45tNA5tjq=lsZ7tUCFKNDRKp6FtM2FPNm8lUDRK=v8KNU7aiSJk=URbA9L0=4FYDZixVIRBGwRBGwRBGwRBGwolJwIBpDoleUIuTwRBGwRBGwRBGwRBGwRBGw5t2eJ0wTij2uSeEMlq5QieDVRBpDoleULBG15tUh=a1nBmGwRBGwRBGwRBGwRtiq=ljdXQTwRBGwRBGwRtEvF0Mwi0vUctpe8kG3XwTwRBGwRBGwRBGwRBG1JqG2RsHYol/Uk05U5j2b806D=l6DFqw1keH7Mep8iPG3ka1nBmGwRBGwRBGwRBGwRBpCRODwWOVIRBGwRBGwRBGwRBGwitww7aHvF3ivcaw3WOGQWOGQWOG9J3RZiqQwiqFVRBF3ISVIRBGwRBGwRBGwRBGwit/U8mG2RKEDFY/U8mw1Jq1nBmGwRBGwRBGwRBGwRt=4FmGTit1w7aGQXqG1oaG9RBpV=lAnRBVdit1gRKVIRBGwRBGwRBGwRBGwRBGwRBpTlxj5RBA2RKEQFYUC5tJTiqMQWUw3LBH4FYuTitE8itU5Ia1wLmG3RBFnBmGwRBGwRBGwRBGwRBGwRBHx50UDJ0wwIt2q=Bw1JeV1oNDgIaHnBmGwRBGwRBGwRBGwRBGwRBGwRBGwJ0jx=aGQXmG1ojVqkaGC7aG3RBFnBmGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRtiq=ljdXQTwRBGwRBGwRBGwRBGwRBGwRBGwRtEvF0MwXSTwitv8WUDwLbDwiqG3XQTwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBHmFYNvoxVIRBGwRBGwRBGwRBGwRBGwRBGwRBHbJkEUROsQXmG1ojVqkaGC7aG3RBFnBmGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRtiq=ljdXQTwRBGwRBGwRBGwRBGwRBGwRBGwRtEvF0MwWSW+RBpTlxi5RBA2RBFwixVIRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwJ3iUJlVnBmGwRBGwRBGwRBGwRBGwRBGwRBGw=tNYJkNV5OTwitv8WUDwLbDwitE8itU5XQTwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBHmFYNvoxVIRBGwRBGwRBGwRBGwRBGwRKDIRBGwRBGwRBGwRBGwRBGwRBpCIqVnBmGwRBGwRBGwRBGwRBGwRBHg=mGTitAw7SDwWxRgRKVIRBGwRBGwRBGwRBGwRBGwRBGwRBG18mG2ROGnBmGwRBGwRBGwRBGwRBGwRBGwRBGwolJwIBpgRBVwWaG9RBpV=lAgRKVIRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwitv8WjDwLbDwFPHqol6D=mw3iSGAlBFVRBpgRBVwWa1wLmG37tiq7mFnBmGwRBGwRBGwRBGwRBGwRBGwRBGwzuTwRBGwRBGwRBGwRBGwRBGwRBGwRBpTlxj5RBA2RBF9J3RZixVIRBGwRBGwRBGwRBGwRBGwRBGwRBG1ojVqkaGC7aGmktAmXQTwRBGwRBGwRBGwRBGwRBGwzuTwRBGwRBGwRBGwRBH2BmGwRBGwRBGwRBGwRtNbot9wix/DJliV=aHb=l/VFPHvJ0UC=xD/RtEU8t/QJlp1ol637SMwJY5b80/4FbDbWbRqWbRq7b/DFbA95tuwJY5b80/4FbDbWxWxWxWx7b/xFtjCRKEDcl/U7aiY806DLk5Uol5T5OTw8Y2q8ljVXqRZ7KHq=SA3RBAwitv8WjDwLmG37B2QFYMZ7B2xFtjC7bQ45tuZ7Kp1Rti3J02V8PR2RxRAWbwqXOA9FKiU7mFwLmG1ojV/kaGCRBF9LPHq=SA9LPp17b/D=BHm=0E48t2q7aWxWxWxWxWZ7KHq=SA3RBAwoKph8KEQ=lEgJl/botjqFqw1ojVqka1wLmG37B2QFYMZ7B2D=OA9LPpq7bQ45tjm8tMZixVIRBGwRBGwRBGwRBGwJ3iUJlVnBmGwRBGwRBGwJ0jx=aG3FYNCJleUixTIRBGwRBGwRBGwRBGwiKpg8lNsokRw7aHG=YUV=leDoleUIBpzMs2SNjV3Jq55ISVIRBGwRBGwRBGwRBGwolJwIBjU8kHDcaw1keH7Mep8iPW3ka1gRKVIRBGwRBGwRBGwRBGwRBGwRtUYRBwvuKiU8Yjh=aw1keH7Mep8iPG3kaQwij2uSeEMlq5xieDgIuTwRBGwRBGwRBGwRBGwRBGwRBGwRtNbot9wiDEv8UQ35BHq=l6v8lMv7tiq7mFnBmGwRBGwRBGwRBGwRBGwRBHU8KEURKVIRBGwRBGwRBGwRBGwRBGwRBGwRBHg=mGTiKpg8lNsokRgBmGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRKp45lETIBpzMs2SNjV3Jq55LBG15tUh=MpgFmQwiKpg8lNsokRgXQTwRBGwRBGwRBGwRBGwRBGwRBGwRtpg=aw37KEbFYUQ5O63It6e8tQV83NV8BQmiqGCRKNq8tNCJ021=aw1keH7Mep8iPW3ka1wLmG3Rm/C5l/VLBRmISQ4F0EqokHD7mFgXQTwRBGwRBGwRBGwRBGwRBGwzuTwRBGwRBGwRBGwRBH2BmGwRBGwRBGwRBGwRtNbot9wix/Y8PihRt2CFPNm8lUD7ai3It6e8tQV83NV8B/FiqFwLmHeFY/U8YE4=tMTij2uSeEMlq5QieDgRBAwieQ3Lt6e8tQV5tvgFq6CJleUL3=v8KNUIShq=kpeFYAw=YjVF0MnRbA9ol6Q5kuw5KUQ=SeD=kvDRt6v8lM28Yjh=aH0Jl/e=SDmiqGCRtvD8l/xFtNboljVJ0vvF3WTij2uSeEMlq5QieDgRBAwiqRZ7tUCFKNDRKp6FtM2FPNm8lUDRK=v8KNU7aRZ7mRZ7B2Y8Pih7mFnBmGwRBGwRBGwRBGwRtiq=ljdXQTwRBGwRBGwRtEvF0MwiPp45lETixTIRBGwRBGwRBGwRBGwolJwIBjU8kHDcaw1keH7Mep8iPW3ka1gRKVIRBGwRBGwRBGwRBGwRBGwRBpDoleURODwFPpq5t2DoleUIBpzMs2SNjV3Fq55ISVIRBGwRBGwRBGwRBGwRBGwRtUYRBw15tUh=a1wcQTwRBGwRBGwRBGwRBGwRBGwRBGwRtUYRBwv5t2eJ0wTij2uSeEMlq5QieDVRBpDoleULBG15tUh=a1gBmGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRtNbot9wiD=volQvixVIRBGwRBGwRBGwRBGwRBGwRBGwRBHU8KEUBmGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRtNbot9wiep45lET=luvixVIRBGwRBGwRBGwRBGwRBGwRKDw=l/x=uTwRBGwRBGwRBGwRBGwRBGwRBGwRtNbot9wiDiv=BHDoleURt=4FYev5Bs3XQTwRBGwRBGwRBGwRBH2BmGwRBGwRBGwRBGwRtEV=ljqFPpv5tEvJ0vUIB1nBmGwRBGwRBGwRBGwRtNbot9wix/xJPigFKuZFe92RmRn7B2xJPigFKuZ7t=4FYDw806x5lihoku2RYFT83NV8B/C5l/VLjQ3iqGCRKNq8tNCJ021=avx5KizFY2DWSWTij2uSeEMlq5QieDgIaGCRB5Fiq/C5l/VLKpTokWC5t2eJ0wC5YjV5lMgXPiU5KNq8mHYJl/x=SVm7b/g83He5BHDckHU7kpUcKuw8Yjh=SeD8PNboBH0Jl/e=SDmiqGCRtpv5tMTRU1h8ae1Rsw+oSgxRmQwut=g8tNh5tUh=aw1keH7Mep8iPG3ka1gRBAwiqRZ7tUCFKNDRKp6FtM2FPNm8lUDRK=v8KNU7aRZ7mRZ7B2Y8Pih7mFnBmGwRBGwRBGwRBGwRtiq=ljdXQTwRBGwzuTwRBGw=lET8qG37B21okJZixVIRBGwRK5x8D=48PpUFmwgXQg2BwgY5l6b5tU48mHvJPpg806b=awgRKVIRBGwRtUYRBwv=leQ5K1Tij2uSeEMlq5QieDgIuTwRBGwRBGwRBpzMs2SNjV3FB55RODwJYjx=SJDk0pUJ021=aw1keH7Mep8iPG3ka1nBmGwRBHg=mGTRlNhFKp6IBpzMs2SNjV3FB55IaGYimGv=leQ5K1Tij2uSeEMlq5AieDgIaHnBmGwRBGwRBGwNeE7F0NDJ024o0UUIB5x5t93LBHDF3NUISVIRBGwRBGwRBG1keH7Mep8iPG3kaGC7aG3RORZibs3XQTwRBGwzaHU8KEUolJwIBjU8kHDcaw1keH7Mep8iPG3ka1gBmGwRBGwRBGwNeE7F0NDJ024o0UUIB5x5t93LBGQISVIBmGwRBHPF02R=lj1=kRTISVIRBGwRtNbot9wRb/xJPigFKuZBYUYIK5g8Yp45q6j5YNC5B1w50UC=t2PLYEvFKpeFYNj5YNC5KWTpk=U83uCaDN=ps2kSm1nB3=vFmHb8lpxRODw8YNPRsjqFYj6IBF3ISVI5YjqRtEeFmG2ROGnBY=e8YEDol2CRthQItMgRKVIBk=vFmHCRODwIK5g8Yp45q6j5YNC5B1w7qHUL35TolETROTw=a6d=kUO80pUXQTiolJT8mG27aGxXB1wcQTiBlEeFmDhXQTiBlUYItEeFbA2WB1IBu1i=t2b5leU83uCJ0JCJ0e1L3=v8KNURODwJ0e1Fehb5ki5XQTiBlNVF0MIBu1iJPNqIqVnBwU2RtNVF0MwolJT8mG27aGDWB1wcQTiBlEeFmVdXQTiBlUYItEeFmG9RtEh=KWC8tNC=PpTIuTiBuU180Ee8lNC5B6b=m6b8luC5YjV5lMw7aHb8lpxl0EeFUDnBw1i=l/x=uTiBuUb5kRhLSVIBkDIzugY5l6b5tU48mHv=tuTJ0e1IaHnBwUb8lpxL3H4FBwgXQTiJ0e1Fq6Q5kETItEh=B1nBwUb8lpxL3HeF0wTiqFgXQTiJPNqRODwJ0e1Fq6V=l635twhWSVIzuT9LPEbFYUQ5OAmXQTwRBGw=lET8qG37tw/71E483E48tM9L0w/7b/1okJwJ0/vFPW2J02C5tNC5OA9=Y2q8aHCJleU7lEYRt2CFPNm8lUD7aig=mv1LYEYLYEh=B60Jl/e=SD2kB5b8tNvFUQ3Ikh1LYEYLY2e5KHe5B60Jl/e=SeFieQ3X0uCJ0JCJ0e1L3=v8KNU7NQ3kBFnFYND5kiCRt=v8KEUXPev=tuT5tvgFq6b8luC5YjV5lMgX0FT83NV8B/C5l/VLKND80sT5tvgFq6b8luC5YjV5lMgLKpTokWCF0v45e2UF3i4F3WCJ0vUJ0hU=O9/XUQ3kBFgXPiU5KNq8mHYJl/x=SVm7b/x=l/UJPuw8Yjh=Sev8tUvFxA3XQTwRBGw=Y2q=ljboBGTis5WSDiHSjE8i0jVFq55RtjxRBpCRODZRBp0IaHnBmGwRBGwRBGwolJwIBp0ROD2RBF3IaHnBmGwRBGwRBGwRBGwRtNbot9wix/4FKp3FY2eFBHVJliU8ODmLaFwLmHT5teVFPHUJ0Uv8tETJkixIBpCIaGCRBFhRbA9L02Q5t5q8PNQ7mFnBmGwRBGwRBGwRBGwRtE483pg83NUXQTwRBGwRBGwRKDIRBGwRBGwRBHUJ0v4RBF98PHDol2CRK=v8KNU7aR3RBAwoKph8KEQ=lEgJl/botjqFqw15m1wLmG3RbA3RBAwitAwLmG37B24FKpg80AZixVIRBGwRKDIBmGwRBHUJ0v4RBF9LPEU8tNb5OA9ol6Q5kuw5KUQ=Sem5kpD80Aw806b8tUboxDmJlp1ItuCJ0JCJl/gJkWC5YjV5lMgX0FT83NV8B/C5l/VLKND80sT=B6b=m6v8tUvFq60Jl/e=a1V=B6b=m6xot2Pk0NqFY2qFq6botNbo0N17xs+kB5Fiq1nRmH0Jl/e=SDm7bAm7m=CJ3EQXx/C80iq7b/g83He5BHDckHU7lET=lEdJY2ARt6v8lM2F0v45e2UF3i4F3Ww5YjV5lM2WaG3RBAwIBjU8kHDcaw1keH7Mep8iPw3ka1wzKQwij2OSD2LaMN8iPED8q55RO9wi0ET=lEd=lu3ROTwiqFgRBAwixAwFYN1okiUJPuwFPp1=kiqRKp4RKED=t2e5BGTWbAYWa19L064J3RZ7tiqLxA95tNA5tjq=lswJ0/vFPW2JYU3JkiUJaHCJleU7l2e5KHe5BHx5KUV=SDmJY2q=tNqLli45Kp48STQX0evFY5g8bTQXqRwFYNv=t2C8K1ZixVIRBGwRtUYRBwv=leQ5K1Tij2uSeEMlq5QieDgIaHnBmGwRBGwRBGw=lET8qHT5teVFPHUJ0Uv8tETJkixIBR1RBRwLmG1keH7Mep8iPG3kaGCRBiF8mRwLmHPF02jcBw1keH7Mep8iPG3ka1gXQTwRBGwzuTwRBGw=lET8qG37B2D=kvDJkiUJSA95tjm8tMwFPp68tM2RYi4FYpUFbT/FKwwF02VoluwR0pYEShmJlEd=Pi45l61LlE48t2qXmWeESMnJY2q=tNqLkp4FOTQFKwnRmHb=l/VFtj1=tUC=xDQRtEU8t/xFtjbol637SGw50U15tw2RbsQWBMm7b/DFbA95tuw50U15tw2RbsURbA17B2D=OA95tuZ7tUCFKNDRKp6FtM25tNA5BHCJleU7lEh=BHx5KUV=SDmJY2q=tNqXbHQcOhPolpDoOT/WOGUXqRw806d=kU18P5C7aidFBvU5YNC5B1nRbA9LPp17bQ45KRZ7B2DJliV=SA3XQTwRBGw=lET8qG37B2Y8Pih7bQ4=tU07b/xJPigFKuZ=B6b=m6b8luC=Y2b5kWTISV9LPEbFYUQ5OA3XQTwRBGw5PE4pY245tNqIB1nB3DIBY=e8YEDol2CRtjb5tU481/4=02e5BwgRKVIRBGwRKEU5tE480hg=aw1pD/7u1jWMeV3J024oq55LBG3iqQw5tUh=awgRBDwWxJQWB1nBmGwRBH1olMTi0i6=as3ISVIzuTI=3NCJPpg80AwJlEDol2CM0NV=UiU8l20=awgRKVIBmGwRBHg=mGTij2uSeEMlq5QieDw7SDwiPUUFqFgBmGwRBGwRBGwolJwIsHe8Y/g8YVTFKiU=e2q=kHVJlEUIBFvkBvF=BhFIN/xLmTviqQwiqFVRj2zp1UWpN2zIa1gBmGwRBGwRBGwRBGwRtpg=aw3M0vU8tQwotjxRtiU=lAwFYNh8P=U=BFgXQTwRBGwRBGwRtNVF0MIRBGwRBGwRBGwRBGw=lET8qG35l6Vol6dRtNqFY2qRaFnBmGwRBHg=mGTij2uSeEMlq5QieDwRSDwiPUUFqFgBmGwRBGwRBGw5PE4atNv=tNqIB1nBmGwRBHUJ0v4RBF9oOsZMPNgJ0U1=SQ4oOsZ7tpg5mHb8tjxFxeb806D=l6D7UiUJl/VcaHPJl6DRKp4RKiU8l20=aHDotMwF0vU8tQy7tiq7b/vRtvq=lJ2RqH48YEVolEd7ai3It6e8tQV83NV8B/FiPUUFeQ3IaRZllNx7B2v7bQ4=tU07mFnBmGwRBHPF02t802D=kRTISVIzuTI=3NCJPpg80AwJlEDol2CJYJTIaHnBmGwRBHPF02R=lj1=kRTISVIRBGwRtUYRBvgFPEU5Bw1keH7Mep8iPHq8Pp4ieDgIaHnBmGwRBGwRBGw=lET8qG37tw/7UiUFPNV5KW9L0w/7b/1okJwJ0/vFPW2J02C5tNC5OA9FPHv8b6MckHUXbQ4FPHv8bAwiqGCRtvD8l/xFtNboljVJ0vvF3WTij2uSeEMlq5QFY2D8q55IaGCRBFw7KEQJlAZM0Nq5YNqXbQ4FPHv8bAwiqGCRtvD8l/xFtNboljVJ0vvF3WTij2uSeEMlq5x=ki0=kR3ka1wLmG37tiq7mFnBmGwRBGwRBGwolJwIBpzMs2SNjV3FKi45t93kaG27aG3=3pQiq1wcQTIRBGwRBGwRBGwRBGw=3NCJPpg80Aw5PE4u3ie5tNt8Pib=aw1okGVRBpQ8PiDLBG18t23olAVRBpQJkExIaHnBmGwRBGwRBGwRBGwRBGwRBG1=3Gw7aHG=3pQk0E48Y6UJPuTitUQLBG1Ft2q5BGyRBpQ8PiDROTwWbsgXQTwRBGwRBGwRBGwRBGwRBGwolJwIBs1=3GgBmGwRBGwRBGwRBGwRBGwRBGwRBGwFYND5kiCRt=v8KEUXQTwRBGwRBGwRBGwRBGwRBGwiKiUFqG2RsHY5KHz8t23olATit=QLBG18t23olAVRBpQJkExISVIRBGwRBGwRBGwRBGwRBGwRsHY5KHzJ0/4F0MTit=QISVIRBGwRBGwRBGwRBGwRBGwRKiU5KNq8mG1FYNxXQTwRBGwRBGwRBGwRBH2BwTwRBGwRBGwRKDw=l/x=lUYRBw1keH7Mep8iPHq8Pp4ieDw7SDwi0e6FPjViq1wcQTIRBGwRBGwRBGwRBGw=3NCJPpg80Aw5PE4u3ie5tNt8Pib=aw1okGVRBpQ8PiDLBG18t23olAVRBpQJkExIaHnBmGwRBGwRBGwRBGwRBGwRBG1FYNxRODwute6FPjVk0E48Y6UJPuTitUQRBAwixT3RBAwIBpQ8PiDRO9wiKH4F3uwXmGxWxG0IaQwit/4=0UCLBG1FtjxFq1nBmGwRBGwRBGwRBGwRBGwRBHG8kUxFl/zJ0/4F0MTiKiUFq1nBmGwRBGwRBGwRBGwRBGwRBHq=kpeFYAwiKiUFxVIRBGwRBGwRBGwRBGwzuTIRBGwRBGwRBH2RtNVF0Ng=mGTij2uSeEMlq5QFY2D8q55ROD2RB5Q=PE/8BFgRKVIBmGwRBGwRBGwRBGwRt=e8YEDol2CRK5x8Diq5kpUpY2qJ0MTitUQLBG1Ft2q5BQwit/4=0UCLBG1FtjxFq1wcQTwRBGwRBGwRBGwRBGwRBGwiKEDFmG2RBiT8PED7aFmRBAwitUQRBAwRmFwFt2q5OD3RmGCRBpQ8PiDRBAwRmFw5kEUFbD3RmGCRBpV805g8mGCRBR3RKHvFPEP8Pi17aFmRBAwiKHvFPWwLmGmiqH1JY6v8lM2Ft2x5t5q=kWmXQTwRBGwRBGwRBGwRBGwRBGwiKiUFqG2RsHQ=e2b806C=lEDIBpx5KRgXQTwRBGwRBGwRBGwRBGwRBGwuKH3k0EV8PEUIBpq=kWgXQTwRBGwRBGwRBGwRBGwRBGwFYND5kiCRBpq=kWnBmGwRBGwRBGwRBGwRKDIBmGwRBGwRBGwzuTwRBGwRBGwRBpx5lEb=kExRODwWOVIRBGwRBGwRBG1JkpD=leQ5KWw7aGQXQTwRBGwRBGwRBpx=ki0=kRw7aHUcKHV80pUIBR+RmQwij2uSeEMlq5x=ki0=kR3ka1nBmGwRBGwRBGwolJwIBpzMs2SNjV35KUQ=a55ROD2ROsgRKVIRBGwRBGwRBGwRBGwiKpU8kGw7aHG=YUV=aw3L0NDJq2QJkEx50u3ISVIRBGwRBGwRBGwRBGwolJwItUxk0jqFYj6IBpD=leQIa1IRBGwRBGwRBGwRBGwRBGwRt=4FYNvJ0wwIBpD=leQRtjxRBpVol6UIaHnBmGwRBGwRBGwRBGwRBGwRBGwRBGwit/g8YMw7aHUcKHV80pUIBR+RmQwit/g8YMgXQTwRBGwRBGwRBGwRBGwRBGwRBGwRBVditjD5tNhFKpxXQTwRBGwRBGwRBGwRBGwRBGwRBGwRtUYRBvPF02BF3ND=M=4FYEUIBpx=ki0=ki8WjDVRBpx=ki0=ki8WNDVRBpVol6UlxH5LBG18tUC=NVQka1gRKVIRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwiKEeJ0EUFPWdIxVIRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBGw=lET8qG37tRZiqGCRtvD8l/xFtNboljVJ0vvF3WTit/g8YN8WjDgRBAwixQ4JbA+iqGCRtvD8l/xFtNboljVJ0vvF3WTit/g8YN8WjDgRBAwix/mFbA3XQTwRBGwRBGwRBGwRBGwRBGwRBGwRKDIRBGwRBGwRBGwRBGwRBGwRBGwRBHg=mGTij2uSeEMlq5q=k=UF3EUieDgRKVIRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwiKphFBG2RBRmXQTwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBHY8PRwIBpgRODwFPpq8tNCIBpVol6UlxH5IaGhROsnRBpgROA2ROGnRBDhit1gBmGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBG15teQRBA2RBpVol6UlxH5lqpgkSVIRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwIqV1JkpD=leQ5KWnBmGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRtUYRBvPF02BF3ND=M=4FYEUIBpx=ki0=ki8WjDVRBpx=ki0=ki8WNDVRBpVol6UlxH5LBG15teQIa1wcQTwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwiKEeJ0EUFPWdIxVIRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRtNbot9wix/m7mFwLmHT5teVFPHUJ0Uv8tETJkixIBpVol6UlxH5IaGCRBF9L0RZXmFwLmHT5teVFPHUJ0Uv8tETJkixIBpD8kGgXQTwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBH2BmGwRBGwRBGwRBGwRBGwRBGwRBGwzuTwRBGwRBGwRBGwRBGwRBGwzuTwRBGwRBGwRKDw=l/x=lUYRBw1keH7Mep8iPp6FtM3kaG27aGqIaHnBmGwRBGwRBGwRBGwRBpD=leQRODwut=g8tMTij2uSeEMlq51olEDieDgXQTwRBGwRBGwRBGwRBHg=mGTokEzJkiqJk1TiKpU8kGgIuTwRBGwRBGwRBGwRBGwRBGw=Y2q=ljboBGTiKpU8kGwJkWwit/g8YMgRKVIRBGwRBGwRBGwRBGwRBGwRBGwRBG18tUC=aG2RKpqolDTit/g8YMgXQTwRBGwRBGwRBGwRBGwRBGwRBGwRBVditjD5tNhFKpxXQTwRBGwRBGwRBGwRBGwRBGwRBGwRtUYRBvPF02BF3ND=M=4FYEUIBpx=ki0=ki8WjDVRBpx=ki0=ki8WNDVRBpzMs2SNjV38t23olA3kaQwit/g8YMgIaHnBmGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBpx5lEb=kExIqVnBmGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRtNbot9wix/m7mFwLmHT5teVFPHUJ0Uv8tETJkixIBpzMs2SNjV38t23olA3ka1wLmG37B2m7bT3RBAwoKph8KEQ=lEgJl/botjqFqw18tUC=a1wLmG37tiq7mFnBmGwRBGwRBGwRBGwRBGwRBGwRBGwzuTwRBGwRBGwRBGwRBGwRBGwzuTwRBGwRBGwRKDIRBGwRBGwRBHUJ0v4RBR9FPHv8b6H5KpU8kHDFxT9LPEQJlAZRBpv5KpU8kHDFqG9FPHv8b6S5lEb=kExXbQ4FPHv8bAwiKEeJ0EUFPW9L0pg5bA9J3RZRbVIRBGwRKDIRBGwRtNbot9wix/TWS6BF3ND=l=4FYEU7B2TWSA9=tU0RtEVJkEx7lE483pU83uZ7KpvJY/U7b/Y8PihRteU5tv4=OeQ8PED7b/DFbA95tuZ7KEQJlAZNKUQ=SQ4FPHv8bA9LPp17mFIRBGwRBAwix/D=OA9F0NV=lEDRt6v8lM2FKi45t9Z7t2Q5tU48mH0Jl/e=SeY5KGZpUpu7B24FKpg80AZ7t2Q5tU48mH0Jl/e=SehckE/8O6EcNE/8OQ48PHDol2C7b/4FKpg80Aw5YjV5lM2Ft5xFlQZMt2x5t5q=NE/8OQ48PHDol2C7bQ4F0NV=lED7bQ45tuZ7B2DFbA95KRZ7Kp17mFIRBGwRBAwix/g83He5BHDckHU7lvg=tpU8mHCJleU7lWw5YjV5lM2RmFwLmHT5teVFPHUJ0Uv8tETJkixIKEDFU2q8Pu/Wqw1pD/7u1jWMeV3JP51ieDgIaGCRBFm7mFIRBGwRBAwix/g83He5BHDckHU7lvg=tpU8mHCJleU7lsw5YjV5lM2RmFwLmHT5teVFPHUJ0Uv8tETJkixIBpzMs2SNjV3Ja55IaGCRBFm7mFIRBGwRBAwix/g83He5BHDckHU7lvg=tpU8mHCJleU7lETRK=v8KNU7aR3RBAwoKph8KEQ=lEgJl/botjqFqw1keH7Mep8i0ETieDgRBAwiqRZiQTwRBGwLmG37KEQJlAZM0Nq5YNqX3H4F3u9LPEQJlAZ7B2D=OA3BmGwRBGCRBF95tuZ7tUCFKNDRKp6FtM25tNA5BHCJleU7kEUF3=UFmH0Jl/e=SDmWSRPLbGCWBA/RbA9LPp17bQ45KRZiQTwRBGwLmG37Kpq7b/D=OA9FPHv8b6BF3ND=aHDckHU7B2xFtjC7bQ45tuZiQTwRBGwLmG37Kp17b/VJliU8OA9ol6Q5kuw5KUQ=SeqJlpg8qHCJleU7kp6FtMw5YjV5lM2RbsmRtET=lEd=luZRB2U5tW4FtjxFP517B2VJliU8OA9LPp17bQ45KRZiQTwRBGwLmG37Kpq7b/D=OA9LPp17b/D=OA98tjm=lQwFPp68tM2R3Hv=tpg8YFh8tNY5OT/EkHARbA9ol6Q5kuw5KUQ=SebotNbo0i4cBHCJleU7kiU5YNqF0Mw5YjV5lM2WaHbotNbo0N17mHq=k=UF3EURBvV805g8mGh7mHCol548B19L0/vJYNV7bQ45tuZ7B2DFbA3BmGwRBGCRBF95KRZ7Kp17bQ45tuZ7Kp17b/VJliU8OA9ol6Q5kuw5KUQ=SeqJlpg8qHCJleU7kp6FtMw5YjV5lM2RbRm7mHsolEDol2CJki67B2VJliU8OA9LPp17bQ45KRZiQTwRBGwLmG37Kpq7b/D=OA9LPp17b/D=OA95tjm8tMwFPp68tM2R3Hv=tpg8YFh8tNY5OT/EkHARbA95KRZ7Kp17b/xFtjC71/4=0UC7B2xFtjC7bQ45tuZiQTwRBGwLmG37Kp17b/g83He5BHDckHU7kpUcKuw8Yjh=SeV805g8mH0Jl/e=SDmFY245BRZ7B2D=OA9LPpq7mFIRBGwRBAwix/DFbA95tuZ7KEQJlAZptUb5tU48YjqcSQ4FPHv8bA9LPp17mFIRBGwRBAwix/D=OA9ol6Q5kuw5KUQ=SeD=kvDRt6v8lM2=tUb5BH0Jl/e=SDmiqGCRtvD8l/xFtNboljVJ0vvF3WTFPpqkPi45OsxIBpKSs2BuM/Slq5b50u3ka1gRBAwiPHvFPEP=B61olWm7bQ45tuZ7B2DFbA9LPpvJY/U7mFIRBGwRBAwixQ45tuZ7B2DFbA95KRZ7Kp17bQ45tuZ7Kp17b/g83He5BHDckHU7kEeJYeg5BH0Jl/e=SDm7bAm7bQ45tuZ7B2DFbA9L0=4FYDZ7B2DJliV=SA3XQTwRBGw=lET8qG37B21okJZ7tiq7mFnBmGwRBHPF02t802D=kRTISVIzuTI=3NCJPpg80AwJlEDol2CMPjVIB1wcQTIRBGwRtEVJkExRspmu0/vFPWwcQTIRBGwRBGwRBH0JkRwiKp6FtMnBmGwRBGwRBGw5YjqRBpVol6dXQTwRBGwRBGwRK=vFmG1FYNxXQTIRBGwRBGwRBHY5l6b5tU48mHsJ1EVJkExIBpDckHUIaHnBmGwRBGwRBGwRBGwRBpDotUxLS6DckHURODwiKp6FtMnBmGwRBGwRBGwzuTIRBGwRBGwRBHY5l6b5tU48mHb806C=lEDIBpT8PEDLBG15kEUFmQwiKHvFPWVRBp1JY6v8lMgRKVIRBGwRBGwRBGwRBGwFP5g5tETRBw15tvgFqDZ5KUQ=a1wcQTwRBGwRBGwRBGwRBGwRBGwJ0jx=aG38kUxFlQ3XwTwRBGwRBGwRBGwRBGwRBGwRBGwRtUYRBw15tvgFqDZ8tUCoqG2RsHhckE/8j2b806C=lEDIBpT8PEDLBG15kEUFmQwiKHvFPWVRKpq5lMgIuTwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBHq=kpeFYAw5Kie=SVIRBGwRBGwRBGwRBGwRBGwRBGwRBHmFYNvoxVIRBGwRBGwRBGwRBGwRBGwRtEvF0MwiPH3FPjVixTIRBGwRBGwRBGwRBGwRBGwRBGwRBG1ot2x5BG2RtNAFt/4=tMTixT3LBG1ot2x5B1nBmGwRBGwRBGwRBGwRBGwRBGwRBGwolJwIBs1ot2x5jV/ka1IRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwitv4FPp8WNDw7aGeEOWqXQTwRBGwRBGwRBGwRBGwRBGwRBGwRtUYRBw15tvgFqDZ8tUCoqG2RsHQ=e2b806C=lEDIBiT8PED7kV1ot2x5jVQkkDwFt2q5Oenitv4FPp8WNe2RKNx=kR2iKNx=kRwFtjxFP54FYu2iKHvFPWw=tiCJleU7ap1JY6v8lMmIa1IRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwFYND5kiCRKpq5lMnBmGwRBGwRBGwRBGwRBGwRBGwRBGwJ3iUJlVnBmGwRBGwRBGwRBGwRKDIRBGwRBGwRBGwRBGwFYND5kiCRt=v8KEUXQTwRBGwRBGwRKDIBmGwRBGwRBGw=3NCJPpg80AwF0NV=lED=tRTitpmIaHnBmGwRBGwRBGwRBGwRKEPokpboBGTiKpTokWh73p6FtMgRKVIRBGwRBGwRBGwRBGwRBGwRtEvF0Mwi0e6FPjVixTIRBGwRBGwRBGwRBGwRBGwRBGwRBHg=mGTute6FPjVkPEU8tNb5j21Jmw1=tRgIuTwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBHq=kpeFYAw5Kie=SVIRBGwRBGwRBGwRBGwRBGwRBGwRBHmFYNvoxVIRBGwRBGwRBGwRBGwzuTwRBGwRBGwRBGwRBHq=kpeFYAw=YjVF0MnBmGwRBGwRBGwzuTIRBGwRBGwRBHY5l6b5tU48mH/5lNqcaw1FPpqIaHnBmGwRBGwRBGwRBGwRKEPokpboBGTiKpTokWh73p6FtMgRKVIRBGwRBGwRBGwRBGwRBGwRtEvF0Mwi0e6FPjVixTIRBGwRBGwRBGwRBGwRBGwRBGwRBHq=kpeFYAwiKpTokWh73iUFqG2RsHhckE/8j2/5lNqcaw1FPpqISVIRBGwRBGwRBGwRBGwRBGwRBGwRBHmFYNvoxVIRBGwRBGwRBGwRBGwRBGwRtEvF0MwiPH3FPjVixTIRBGwRBGwRBGwRBGwRBGwRBGwRBHq=kpeFYAwiKpTokWh73iUFqG2RsHQ=e2/5lNqcaw15tvgFqDZ8tUCoqQwiKEDFm1nBmGwRBGwRBGwRBGwRBGwRBGwRBGwJ3iUJlVnBmGwRBGwRBGwRBGwRKDIRBGwRBGwRBGwRBGwFYND5kiCRt=v8KEUXQTwRBGwRBGwRKDIBmGwRBGwRBGw=3NCJPpg80Aw=YNDJ0wTIaHnBmGwRBGwRBGwRBGwRBpq=kWw7aHY5l6bk06e8N2vFY5xIB1w7qHY5l6bk05U5j2vFYFTWB1wXmG15tvgFqDZFYNxXQTwRBGwRBGwRBGwRBHx50UDJ0wwIBpDotUxLS6DckHUIaHnBmGwRBGwRBGwRBGwRBGwRBHbJkEURB5hckE/8BF+BmGwRBGwRBGwRBGwRBGwRBGwRBGwFYND5kiCRsHhckE/8j2Y=kpboj2vFPE4Jqw1FYNxISVIRBGwRBGwRBGwRBGwRBGwRBGwRBHmFYNvoxVIRBGwRBGwRBGwRBGwRBGwRtEvF0MwiPH3FPjVixTIRBGwRBGwRBGwRBGwRBGwRBGwRBHq=kpeFYAwuKH3k0=U5tETk0jxF02bIBpq=kWgXQTwRBGwRBGwRBGwRBGwRBGwRBGwRtiq=ljdXQTwRBGwRBGwRBGwRBH2BmGwRBGwRBGwRBGwRKiU5KNq8mHYJl/x=SVIRBGwRBGwRBH2BwTwRBGwRBGwRt=e8YEDol2CRt/gFPpsJ3WTIaHnBmGwRBGwRBGwRBGwRKEPokpboBGTiKpTokWh73p6FtMgRKVIRBGwRBGwRBGwRBGwRBGwRtEvF0Mwi0e6FPjVixTIRBGwRBGwRBGwRBGwRBGwRBGwRBHq=kpeFYAwiKpTokWh73je=ki6IBiSas2kRtpv5tjmJkEUFqRgXQTwRBGwRBGwRBGwRBGwRBGwRBGwRtiq=ljdXQTwRBGwRBGwRBGwRBGwRBGwJ0jx=aG3Ft5xFlQ3XwTwRBGwRBGwRBGwRBGwRBGwRBGwRKiU5KNq8mG15tvgFqDZFYNxRODwiKpTokWh73je=ki6IBiSpM/jueuw=tjD8Yjh=aHtM12ERKH3k0pv5tjmJkEURj5RpNijRtpv5tUx5tNhFt/v5tMv7a5DiqRgXQTwRBGwRBGwRBGwRBGwRBGwRBGwRtiq=ljdXQTwRBGwRBGwRBGwRBH2BmGwRBGwRBGwRBGwRKiU5KNq8mHYJl/x=SVIRBGwRBGwRBH2BwTwRBGwRBGwRt=e8YEDol2CRt/gFPpMJliV=kWTIaHnBmGwRBGwRBGwRBGwRKEPokpboBGTiKpTokWh73p6FtMgRKVIRBGwRBGwRBGwRBGwRBGwRtEvF0Mwi0e6FPjVixTIRBGwRBGwRBGwRBGwRBGwRBGwRBHq=kpeFYAwiKpTokWh73iUFqG2RBpDotUxLS6/5lNqcaw3MDv7NqHMuMiWpNW3ISVIRBGwRBGwRBGwRBGwRBGwRBGwRBHmFYNvoxVIRBGwRBGwRBGwRBGwRBGwRtEvF0MwiPH3FPjVixTIRBGwRBGwRBGwRBGwRBGwRBGwRBHq=kpeFYAwiKpTokWh73iUFqG2RBpDotUxLS6/5lNqcawmF0NV=lEDRKpvJY/Uk06v8lMw=3i48aHg8Y=4FYev5tU48U2xJ0vU8lsC5tjm8tNxRK5T=kiURKpvJY/UkPEbotNhJaGv7aG3ol6Y8PihJkpg806zF0ET=leviqHHS1uw5tjm8tNzF0ET=levRBs2RB5Q=e2bJkpv8t23iqRgXQTwRBGwRBGwRBGwRBGwRBGwRBGwRtiq=ljdXQTwRBGwRBGwRBGwRBH2BmGwRBGwRBGwRBGwRKiU5KNq8mHYJl/x=SVIRBGwRBGwRBH2BwTwRBGwRBGwRt=e8YEDol2CRtNqFY2qIB1wcQTwRBGwRBGwRBGwRBHx50UDJ0wwIBpDotUxLS6DckHUIaHnBmGwRBGwRBGwRBGwRBGwRBHbJkEURB5hckE/8BF+BmGwRBGwRBGwRBGwRBGwRBGwRBGwFYND5kiCRsHhckE/8j2UF3i4FmwgXQTwRBGwRBGwRBGwRBGwRBGwRBGwRtiq=ljdXQTwRBGwRBGwRBGwRBGwRBGwJ0jx=aG3Ft5xFlQ3XwTwRBGwRBGwRBGwRBGwRBGwRBGwRKiU5KNq8mHGFt5z8tjx5j2UF3i4FmwgXQTwRBGwRBGwRBGwRBGwRBGwRBGwRtiq=ljdXQTwRBGwRBGwRBGwRBH2BmGwRBGwRBGwRBGwRKiU5KNq8mHYJl/x=SVIRBGwRBGwRBH2BwTwRBGwRBGwRt=e8YEDol2CRKEU5sETJkix=kuTiKEDFm1wcQTwRBGwRBGwRBGwRBHx50UDJ0wwIBpDotUxLS6DckHUIaHnBmGwRBGwRBGwRBGwRBGwRBHbJkEURB5hckE/8BF+BmGwRBGwRBGwRBGwRBGwRBGwRBGwolJwIt=e8YEDol2Ck0NAokEDFqw38kUxFl/zF0NDk0ETJkix=ku3Ia1IRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwFYND5kiCRsHhckE/8j2x=kpzJ0vvF3EU5Bw1FPpqLBG15tvgFqDZ8tUCoq1nBmGwRBGwRBGwRBGwRBGwRBGwRBGw=l/x=uTwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBG15tvgFqDZFkNUF31TieEjNBHOasjaMDNMRBFwLmG1FPpqISVIRBGwRBGwRBGwRBGwRBGwRBGwRBHmFYNvoxVIRBGwRBGwRBGwRBGwRBGwRtEvF0MwiPH3FPjVixTIRBGwRBGwRBGwRBGwRBGwRBGwRBHq=kpeFYAwuKH3kPEU5j2b8tUU83pz=l6b80pg8YFTiKpTokWh7Y/g8YVVRBpx5KRgXQTwRBGwRBGwRBGwRBGwRBGwRBGwRtiq=ljdXQTwRBGwRBGwRBGwRBH2BmGwRBGwRBGwRBGwRKiU5KNq8mHYJl/x=SVIRBGwRBGwRBH2BwTwRBGwRBGwRt=e8YEDol2CRt/4Jlptol/UIBpx5KRgRKVIRBGwRBGwRBGwRBGwFP5g5tETRBw15tvgFqDZ5KUQ=a1wcQTwRBGwRBGwRBGwRBGwRBGwJ0jx=aG38kUxFlQ3XwTwRBGwRBGwRBGwRBGwRBGwRBGwRKiU5KNq8mG15tvgFqDZ=YNDJ0wTiKpTokWh73je=ki6IBiSpM/jueuwSs2Hpj2taM/jIBFmRBAwJlp1F0/vF0vUFqw1FPpqIaGCRBR3IaHvFqHYol/URm1gXQTwRBGwRBGwRBGwRBGwRBGwRBGwRtiq=ljdXQTwRBGwRBGwRBGwRBGwRBGwJ0jx=aG3Ft5xFlQ3XwTwRBGwRBGwRBGwRBGwRBGwRBGwRBpDotUxLS6/5lNqcawmueijuNpjRjpHu1/jRK5x8xRT=YUV=aHD=kvDIShOSeH=RK5x8xRwpUi7SaG3RmGCRtj1=KEVJkET=kWTiKEDFm1wLmGmixhx=l/UJPuw=YUV=aHYFY2hRK5x8xRnRm1nBmGwRBGwRBGwRBGwRBGwRBGwRBGwiKRw7aHvF3ivcawgXQTwRBGwRBGwRBGwRBGwRBGwRBGwRK5Tol/URBw1oaG2RBpDotUxLS6Y=kpboBwgIuTwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBG1FUh5RODwitU8i0=g8tM3kSVIRBGwRBGwRBGwRBGwRBGwRBGwRBG15tvgFqDZFkNUF31Ti0pq8PGw5tjm8tMw5PE4WmFgXQTwRBGwRBGwRBGwRBGwRBGwRBGwRKiU5KNq8mHvF3ivcaw3=YUV=aFw7SAwoleQ8t21=awmktAmLBG1Fm1gXQTwRBGwRBGwRBGwRBGwRBGwRBGwRtiq=ljdXQTwRBGwRBGwRBGwRBH2BmGwRBGwRBGwRBGwRKiU5KNq8mHYJl/x=SVIRBGwRBGwRBH2BwTwRBGwRBGwRt=e8YEDol2CRtpe8kGTiKpvJY/ULBG1=3Gw7aHYJl/x=a1wcQTwRBGwRBGwRBGwRBHx50UDJ0wwIBpDotUxLS6DckHUIaHnBmGwRBGwRBGwRBGwRBGwRBHbJkEURB5hckE/8BF+BmGwRBGwRBGwRBGwRBGwRBGwRBGwiKiUFqG2RBpDotUxLS6/5lNqcaw3MDv7NqHOM1NHNsMwNsjBSsMwJBFwLmG15tjm8tMwLmG3JBFgXQTwRBGwRBGwRBGwRBGwRBGwRBGwRBpbFYNv5tMw7aHhckE/8j2Y=kpboj2vF3ivcaw1FYNxISVIRBGwRBGwRBGwRBGwRBGwRBGwRBG1FPjVRODwitEq=ljD=NV/kaGCRBRnktAmXQTwRBGwRBGwRBGwRBGwRBGwRBGwRtUYRBw1=3GgBmGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRt=PFYUD=aw1=3GVRBpxFlQgXQTwRBGwRBGwRBGwRBGwRBGwRBGwRtNVF0MIRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBGw=lET8qw1FPjVISVIRBGwRBGwRBGwRBGwRBGwRBGwRBG15tvgFqDZFkNUF31TieEjSsNONBGfRs=aSDDwJBFwLmG15tjm8tMwLmG3JBFgXQTwRBGwRBGwRBGwRBGwRBGwRBGwRBpgRODwWOVIRBGwRBGwRBGwRBGwRBGwRBGwRBG1otNv=BG2RKpq5lMnBmGwRBGwRBGwRBGwRBGwRBGwRBGw50vg8tMwIBpg5tNhRODwiKpTokWh7Y=U5tETIB1gRKVIRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwiKE/8BG2RBF3XQTwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBHg=mGTit1wiaG/WOGQROD2ROGgRKVIRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBpT=lj1RODw5Kie=SVIRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBpxFlQw7aGmXe/CktAmXQTwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBH2BwTwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBG1J02V5leCFqG2RtjqFYj6IB1nBmGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRt=4FYNvJ0wwIBpg5tNhRtjxRBpdRODZRBp0IaHnBmGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBHg=mGTiKJw7SD2Rt6e8tQgBmGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwitUD=le8ith5RODwR16NSsQmXQTwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBGw=l/x=lUYRBvgFe2g83uTiKJgIuTwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBpg5tNhlqpdkaG2RBp0XQTwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBGw=l/x=uTwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBpg5tNhlqpdkaG2RBR3RmGCRsHhckE/8j2q=ljVk0NxJ0jQ=N2x5Kig8YFTiKJgRBAwRmFmXQTwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwitE48KNh83E8kaG2RBiwRmGCRBpdRBAwRYGmXQTwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBH2BmGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRtUYRBw1otNv=B1wcQTwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwiKE/8BGC7aG3aM6SpNiMRsUXNs9wJBFwLmG15tjm8tMwLmG3JBGTiqGCRtUhFt/4=tMTRmQwRmQwitE48KNh83WgRBAwRm1wN1jWNMNSRj/CkKuTRmGCRtUhFt/4=tMTRmQwRmQwitUD=lDgRBAwiq13XQTwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwitvUJluw7aHYJl/x=SVIRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwzaHU8KEUBmGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBG1FPjVRBA2RBiF8U/DLBwmRBAwoleQ8t21=awmLBGmLBG1okpU8a1wLmG3IaFnBmGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRtUYRBw1=3GgBmGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBHY5Pig5tMTit=QLBG1FPjVISVIRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBGw=l/x=uTwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBGw=lET8qw1FPjVISVIRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwit1dIxVIRBGwRBGwRBGwRBGwRBGwRBGwRBH2BmGwRBGwRBGwRBGwRBGwRBGwRBGwolJwIBs1otNv=B1IRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwolJwIBpYFB1IRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRt=PFYUD=aw1=3GVRBRnkt6F8mRgXQTwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBHU8KEUBmGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBHUJ0v4IBRnkt6F8mRgXQTwRBGwRBGwRBGwRBGwRBGwRBGwRtiq=ljdXQTwRBGwRBGwRBGwRBGwRBGwJ0jx=aG3Ft5xFlQ3XwTwRBGwRBGwRBGwRBGwRBGwRBGwRBpDotUxLS6/5lNqcaw3MDNWpMEMRBTwpUi7SaG3RBAwiKpvJY/UISVIRBGwRBGwRBGwRBGwRBGwRBGwRBHPotUV=aGTitUD=lDw7aG15tvgFqDZ=YNDJ0wTIa1wcQTwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBG1J02V5leCFqG2RtjqFYj6IB1nBmGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRt=4FYNvJ0wwIBpg5tNhRtjxRBpdRODZRBp0IaHnBmGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBG1okpU8NV1oeDw7aGmiqRwLmHv=tpx8tjxotNxIBp0IaGCRBR3RbVIRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBpb80/e8l6xleDw7aG1oxVIRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwzuTwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBG1FPjVRODwiDUXMDNaNBHiSUp7RBFwLmG15tjm8tMwLmG3RBw3RBAwoleQ8t21=awmLBGmLBG1J02V5leCFq1wLmG3IaHluM/NpNWwIBFwLmHg8kHV80pUIBRVRBRVRBpg5tNhIaGCRBFgXqFwLmGmktAmXQTwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBHg=mGTit=QIuTwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBGw=35qokpUIBpYFBQwiKE/8B1nBmGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRtNVF0MIRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRtNbot9TiKE/8B1nBmGwRBGwRBGwRBGwRBGwRBGwRBGwzuTwRBGwRBGwRBGwRBGwRBGwRBGwRtiq=ljdXQTwRBGwRBGwRBGwRBH2BmGwRBGwRBGwRBGwRKiU5KNq8mHYJl/x=SVIRBGwRBGwRBH2BwTwRBGwzuTIRBGwROVIRBGwRBp1JmG2Rt6U5qHsJ1EVJkExIBpzMs2SNjV35KUQ=a55ISVIRBGwRtUYRBwTij2uSeEMlq5AieDw7SDwi0p4506V80j1iq1wimJwIBpzMs2SNjV3FB55RBs2RB5x=l/UJPu3Ia1wcQTwRBGwRBGwRBp1JmDZJ02C8YNb5Bw1keH7Mep8iPE/8j2T8PEDieDVRBpzMs2SNjV3FPjVk0/4=0UCieDVRBpzMs2SNjV3FPjVkPHvFPW3kaQwij2uSeEMlq5xFl/zJYjx=a55ISVIRBGwRBGwRBG1=tRh73EU8tNb5tpmIBpzMs2SNjV3FPjVk0ivF0M3ka1nBmGwRBGwRBGwFP5g5tETRBw1keH7Mep8i0ETieDgRKVIRBGwRBGwRBGwRBGwJ0jx=aGmN0UC=t2PFqD/WbM/RbTwitpmLS6x=kpOotjqF0NDIB5bFOsqESs3ISVIRBGwRBGwRBGwRBGwRBGwRtiq=ljdXQTwRBGwRBGwRBGwRBHbJkEURBiNNsJhXBR+RBp1JmDZF0NDu0vvF3EU5Bw35kpYXBFgXQTwRBGwRBGwRBGwRBGwRBGwJ3iUJlVnBmGwRBGwRBGwRBGwRtEvF0MwR1h7aSwhMmR+RBp1JmDZF0NDu0vvF3EU5Bw3o02gXKR3ISVIRBGwRBGwRBGwRBGwRBGwRtiq=ljdXQTwRBGwRBGwRBGwRBHbJkEURBiLSD1ALNMmXmG1=tRh73EU5sETJkix=kuTi0h4oSveiq1nBmGwRBGwRBGwRBGwRBGwRBHmFYNvoxVIRBGwRBGwRBGwRBGwJ0jx=aGmJPGAEbJmXmG1=tRh73EU5sETJkix=kuTi0EQXOJ0iq1nBmGwRBGwRBGwRBGwRBGwRBHmFYNvoxVIRBGwRBGwRBH2BmGwRBGwRBGwolJwItNhFKp6IBpzMs2SNjV3=YUV=a55Ia1wcQTwRBGwRBGwRBGwRBH4JU2x5tjq5Bwm80iz=PgTJl618tNqRmQwEOG6Em1nBmGwRBGwRBGwRBGwRtvUJlpUFmwmu02C5tNC5BesokEQ8PEg5tU48bTwJkpDJlET8lNC5OVw=YUV=l6v8lM2=KNhFB6xFlQmISVIRBGwRBGwRBGwRBGwotNv=tNqIBiO806D=l6DLNp6FtM+RKpUcKu4Ft/volAmISVIRBGwRBGwRBGwRBGw=Y2q=ljboBGTij2uSeEMlq5DJYQ3kaHvFqG15m1IRBGwRBGwRBGwRBGwRBGwRBp1JmDZ=KNhFBw15m1nBmGwRBGwRBGwRBGwRtNAokunBmGwRBGwRBGwzaHU8KEUolJwIBpYFBG2RsHY8PHU8mw1keH7Mep8i0=g8tM3kaQwiPF3Ia1wcQTwRBGwRBGwRBGwRBHY8PiUJlETRBw1keH7Mep8iPpm8B55RtjxRBp0IuTwRBGwRBGwRBGwRBGwRBGwitpmLS615leQIBp0LBG1=3GgXQTwRBGwRBGwRBGwRBHYJ0/4F0MTit=QISVIRBGwRBGwRBGwRBGw5l6x=kuTij2uSeEMlq5AieDgXQTwRBGwRBGwRKDw=l/x=uTwRBGwRBGwRBGwRBH1olMTix/xJPigFKuZJl/UF3uTR1NqFY2qRaHOJl6FiPuw8PHU8mHYol/URm1n50UC=t2PLYvgFPp4F31CJYjboqwhWa19LPEbFYUQ5OA3ISVIRBGwRKDIRBGwRK5x8DvUJlpUFmwgXQTwRBGw=lET8qGmBb/TWS6SFlQwJ3i45PEUFbQ4oOsZ7tpg5mHb8tjxFxeb806D=l6D7wT9=Y2q8aHCJleU7a5x=mFw8lNDot217a5Q8PEDiqH483EeJYeg5OD3=3WT5tvgFq1nixA95tjm8tMwJ0NV8KHv=tpg8YF2ixR3RtEU8t/xFtjbol637aFQixA95KRZBb/D=O6MckHU7B2D=OA95tuZat2x5OQ45tuZ7Kp171/4=0UC7B2D=OA95tuZMtjxFP54FYu9LPp17b/D=O6sJkpvJYjx=SQ45tuZ7Kp17bQ45tuZ7B2DFbA95KRZBb/g83He5BHDckHU7lvg=tpU8mHCJleU7lsw5YjV5lM2MPjV7b/g83He5BHDckHU7lvg=tpU8mHCJleU7kGw5YjV5lM2iPje=ki6ixA9ol6Q5kuw5KUQ=SeTolp1=lAw8Yjh=SeARK=v8KNU7aF37b/g83He5BHDckHU7lvg=tpU8mHCJleU7lWw5YjV5lM2iqRwLmHT5teVFPHUJ0Uv8tETJkixIKEDFU2q8Pu/Wqw1pD/7u1jWMeV3JP51ieDgIaGCRBR37b/g83He5BHDckHU7lvg=tpU8mHCJleU7lETRK=v8KNU7aFmRBAwItUxF0NDIBpzMs2SNjV3J0w3ka1w7qG1keH7Mep8i0ETieDwXmG3iq1wLmGmixAI7Kp17b/x=l/UJPuw8Yjh=SD35KUQ=aFZ7t2Q5tU48mH0Jl/e=SD38kUxFlQ3RBRnBmGwRBHg=mGTij2uSeEMlq5DckHUieDw7SDwi0e6FPjViq1IRBGwRBGwRBHUJ0v4RB5x=l/UJPpU=BFnBmGwRBHUJ0v4RBRZSkUSFlQ9L02Q5tU48bA98PHDol2CRK=v8KNU7a5Q=PE/8BFwRbVIRBGwRtUYRBw1keH7Mep8iPp6FtM3kaG27aG3Ft5xFlQ3IuTwRBGwRBGwRtNbot9wiPEU8tNb5tN1ixVIRBGwRtNbot9wRb6u8PED=PiUMPjV7B24FKpg80AZ7B2x=l/UJPuZ7B2D=OAI7Kp17b/g83He5BHDckHU7kpUcKuw8Yjh=SexFl/zot2x5BH0Jl/e=SeFRmRwLmGT=leQ5K1Tij2uSeEMlq5xFl/zot2x5B55IaGyRB5V80Ev8tv4FPu3ROTwoKph8KEQ=lEgJl/botjqFqw1keH7Mep8iPE/8j2T8PEDieDgIaGCRBiFRbA9LPp17wT95tuZ7tUCFKNDRKp6FtM25tNA5BHCJleU7kE/8j2V805g8mH0Jl/e=SeFRmRwLmGT=leQ5K1Tij2uSeEMlq5xFl/z8t23olA3ka1w7qG3FY245BFwXmHT5teVFPHUJ0Uv8tETJkixIBpzMs2SNjV3FPjVk0/4=0UCieDgIaGCRBiFRbA9LPp17wT95tuZ7tUCFKNDRKp6FtM25tNA5BHCJleU7kE/8j2QJkExRK=v8KNU7NQmRmGCRBvU8kHDcaw1keH7Mep8iPE/8j2QJkExieDgRO9wiqFwXmHT5teVFPHUJ0Uv8tETJkixIBpzMs2SNjV3FPjVkPHvFPW3ka1gRBAwRUQm7bQ45tuZ7Kp17mRnBmGwRBG15teQRODwRb/g83He5BHDckHU7kpUcKuw8Yjh=SexFl/zJYjx=aH0Jl/e=SD3ixAmXQTwRBGwolJwItUxF0NDIBpzMs2SNjV3FPjVk0v4FPu3ka1gRKVIRBGwRBGwRBHg=mGTitpmLS6b806C=lEDIBpzMs2SNjV3FPjVk0v4FPu3kaQwij2uSeEMlq5xFl/z8t23olA3kaQwij2uSeEMlq5xFl/zFtjxFq55LBG1keH7Mep8iPE/8j2mJkEUieDgIaHnBmGwRBGwRBGwRBGwRKEPokpboBGTij2uSeEMlq5boB55IaHnBmGwRBGwRBGwRBGwRBGwRBHbJkEURBikol618P5xLSsqESsmXmG1=tRh73EU5sETJkix=kuTi0EQWSReWaFgXQTwRBGwRBGwRBGwRBGwRBGwRBGwRtiq=ljdXQTwRBGwRBGwRBGwRBGwRBGwJ0jx=aGmNNptLSwmXmG1=tRh73EU5sETJkix=kuTiPND=bw3ISVIRBGwRBGwRBGwRBGwRBGwRBGwRBHmFYNvoxVIRBGwRBGwRBGwRBGwRBGwRtEvF0MwR1h7aSwhMmR+RBp1JmDZF0NDu0vvF3EU5Bw3o02gXKR3ISVIRBGwRBGwRBGwRBGwRBGwRBGwRBHmFYNvoxVIRBGwRBGwRBGwRBGwRBGwRtEvF0MwR1h7aSwhNaR+RBp1JmDZF0NDu0vvF3EU5Bw3o02gXKM3ISVIRBGwRBGwRBGwRBGwRBGwRBGwRBHmFYNvoxVIRBGwRBGwRBGwRBGwRBGwRtEvF0MwRYEQXOJ0RbTwitpmLS6x=kpOotjqF0NDIB5bFOw0EmFgXQTwRBGwRBGwRBGwRBGwRBGwRBGwRtiq=ljdXQTwRBGwRBGwRBGwRBH2BmGwRBGwRBGwRBGwRBp1JmDZ8tUx5spmFqwgXQTwRBGwRBGwRBGwRBHUJ0v4RBR9F0NV=lEDRt6v8lM2FPjVk0ivF0MZ7t2Q5tU48mH0Jl/e=SD3ixA9L02Q5tU48bAmXQTwRBGwRBGwRBGwRBHPotUV=aGTitUD=lDw7aG1=tRh7Y=U5tETIB1gRKVIRBGwRBGwRBGwRBGwRBGwRt/gFPuTithUcaQwiK=v8KNUIaG2RtNvJ0wTitUD=lDgXQTwRBGwRBGwRBGwRBGwRBGw=lET8qG37t2Q5tU48mH0Jl/e=SDmiqGCRBp0Jl/e=aGCRBFmRBFwLmGTiK=v8KNUROD2RBpzMs2SNjV3FPjVk0ivF0M3kaGyRB5x=l/UJPpU=BFwXmG3iq1wLmG37mFwLmG15YjV5lMwLmG37B24FKpg80AZixVIRBGwRBGwRBGwRBGwzuTwRBGwRBGwRBGwRBHUJ0v4RBF9LPEU8tNb5OA3XQTwRBGwRBGwRKDw=l/x=uTwRBGwRBGwRBGwRBHUJ0v4RBpD8kGnBmGwRBH2RtNVF0MIRBGwRBGwRBHUJ0v4RBpD8kGnBmGwRBHUJ0v4RBR9LPp17wTiBu1i7Kp17b/g83He5BHDckHU7kEeJYeg5BH0Jl/e=SD37bA3Rt2CJ0/gJ0V2i0=xItuCF0JgXqFZ7B2D=OAIRBGwRBGwRBGwRBGwRBGwRO/D=OA9ol6Q5kuw5KUQ=SebotNbo0i4cBHCJleU7kE/8j2b8PNC5BH0Jl/e=SD380A3RmGCRBvU8kHDcaw1keH7Mep8iPE/8j2b8PNC5B55IaGyRBF3ROTwiqHbotNbo0N1iq1wLmGm7mHb8PNC5BHDotMw83NhJYNqRt2YRKi45PW9LPp17wTiBu19LPpq7wTiBSQ45tjm8tMZBw1i7KEbFYUQ5OAIRBGwRBGwRBGwRBGwFe21JbD3RmGCRsHv=tpx8tjxotNxIBpzMs2SNjV3FPjVk0ivF0M3ka1wLmGmixVIRBGwRBGwRBGwRBGw=3NCJPpg80Aw=3WT=m1wcQTwRBGwRBGwRBGwRBGwRBGwolJT=m6xFl/zJYjx=a60Jl/e=as2Fe21Jm1wcqHYLY2CFPNm8lUDRODw=3NCJPpg80ATIaHnzSVIRBGwRBGwRBGwRBGwRBGwRBGwRBHg=mvYL3GgRtJCFB60Jl/e=SD3ixVIRBGwRBGwRBGwRBGwRBGwRBGwRBHg=mvYL3wgRtJCcB60Jl/e=SD3ixVIRBGwRBGwRBGwRBGwRBGwRBGwRBHg=mvYL3WgRtJCFq60Jl/e=SD3ixVIRBGwRBGwRBGwRBGwRBGwRKDIRBGwRBGwRBGwRBGwzuTiBuUY5l6b5tU48mHx5BvDLtQgRKVIBu1iBluCF0JCFB60Jl/e=aG2RB5x=l/UJPu3XQTiBu1i=B6x=m6AL3=v8KNURODw5OVIRBGwRBGwRBGwRBGwRBGwRtUYItQwimJw=B6x=m6xIaH1L3EYL3WC5YjV5lMw7aHVXQTiBu1i=B6x=m6x5lihokuTISVIBu1izuTiBuUY5l6b5tU48mHgFqwgRKVIBu1iBl=4Fmvg7SGnoS/1L3EYLYNV=leU83pxlq5DJY/8ka55LY/U8Y5DoOVdI01gBw1iBu1i=B6x=m6U8tNh=l6DFeV35tiVleD3kNhgka6botNbo0N1RODwRluCF0JC=l/U8lNC5KE8iPpm8jh5iee8oNDCJ0vUJ0hU=OVIBu1izuTiBSQ4F0EqokHD7mRnBmGwRBHg=mGTokEx=kuTitpmIaGYimG1=tRh7Y/g8YVgRKVIRBGwRBGwRBHUJ0v4RBR9J3R47b/DJliV=aHPolpDoOD/WOGURtEU8t/QJlp1ol637SRwJ0NV8KEQJlEg8YF2WOAmXQTwRBGwRBGwRtUYRBwv=leQ5K1Tij2uSeEMlq5xFl/zJYjx=a55Ia1wcQTwRBGwRBGwRBGwRBG1=tRh73EU8tNb5tpmIBpzMs2SNjV3FPjVk0ivF0M3ka1nBmGwRBGwRBGwRBGwRtNbot9wRb/DFbA95tuw50U15tw2WaHx5KUV=SD3JY2q=tNqLkp4FOTqFKwwF02VoluwRxJ0EbV37b/xFtjC7UpvJY/UFxT9LPEQJlAZ7tiq7b/mFbAmXQTwRBGwRBGwRBGwRBG15tiVFe2q=kWw7aG1=tRh7Y/gFPpMJliV=kWTISVIRBGwRBGwRBGwRBGw50vg8tMwIBpg5tNhRODwitpmLS6Y=kpboBw15tiVFe2q=kWgIaHnBmGwRBGwRBGwRBGwRBGwRBHVokEDIBpd=k1VRBp0Jl/e=a1w7aHUJlETIBpg5tNhISVIRBGwRBGwRBGwRBGwRBGwRtUYRBwv=leQ5K1Tij2uSeEMlq5xFl/zJ02e83u3ka1gBmGwRBGwRBGwRBGwRBGwRBGwRBGwitAw7aG1=tRh7Y=U5tETIBp1JmDZFkNUF31TieEjSsNONBHOSeNXNBwfIaHvFqHCRs=aSDDwiqGCRBp0Jl/e=aGCRBF3Ia1nBmGwRBGwRBGwRBGwRBGwRBG15YjV5lMw7aHT5teVFPHUJ0Uv8tETJkixIBp0Jl/e=a1nBmGwRBGwRBGwRBGwRBGwRBHUJ0v4RBR98Y2mFbA9ol6Q5kuw5KUQ=SD3J0vUJ0hm8Pw3Rt6v8lM2iPpm8jh5iqH0Jl/e=SD3RmGCRBp0Jl/e=aGCRBR37m=CJ3EQXx/vRtvq=lJ2RqH48YEVolEd7NQmFPuTiqRwLmG15YjV5lMwLmGmiqQ/INQm7mRwLmG15YjV5lMwLmGm7B2v7mRwLmGT=leQ5K1Tij2uSeEMlq5xFl/zJ02e83u3ka1w7qG3iY6mFPGniqG+RBRw7KEhJl/V7mvnit68i0A3kkDg7B2x8ljV8OAmIaGCRBR9L064J3RZ7tiq7mRnBmGwRBGwRBGwRBGwRKDIRBGwRBGwRBGwRBGw=lET8qGm7tUCFKNDRKp6FtM2i0ET=lEdJY2AiqH48YEVolEd7a5gFqwgXqFZRO/g83He5BHDckHU7lie5Kp48mH0Jl/e=SD3pKNhFBFw806b8tUboxD3=t2b5leU83uCF0JCcB60Jl/e=SeFRYp4506V80j1kBRn=t2b5leU83uCF0JCFPNm8lUDIB1nixA9J3RZpYUV=aHQJkpTXb/g83He5BHDckHU7kpUcKuw8Yjh=SeYol/URK=v8KNU7a515leQL3E/8BFZ7B2D=OA95tuwFPp68tM2i0i4FYpUFmeD8PG+W3HARKE48tU1RBW0EbJnixAmXQTwRBGwRBGwRBGwRBHg=mGTij2uSeEMlq5QieDw7SDwiPEU8tNb5BFgRKVIRBGwRBGwRBGwRBGwRBGwRBpzMs2SNjV3FB55RODwiPje=ki6ixVIRBGwRBGwRBGwRBGwRBGwRBpzMs2SNjV3Fq55RODwij2uSeEMlq5xieDw7qG1keH7Mep8iPW3kaG+ROsnBmGwRBGwRBGwRBGwRBGwRBG1=tRh73je=ki6IB5SpM/jueuwuD2NSUuTIm1wJkWw8mHtM12ERBFwLmG1keH7Mep8iPw3ka1nBmGwRBGwRBGwRBGwRBGwRBG183NhRODwitpmLS6Y=kpboBwgXQTwRBGwRBGwRBGwRBGwRBGwiKHv=0NxRODwJ0Ng8Bw183Nhlq5CieDwLqGxWB1nBmGwRBGwRBGwRBGwRBGwRBHUJ0v4RBR9F0EqokHD7YuCF0JC806x5lihoku2=3NCJPpg80ATIkhx5BvFRmRwLmG1keH7Mep8iPw3kaGCRBiFRmQw=B6x=m6xL3=v8KNUIkD9LPEbFYUQ5OA9FPHv8bAmRBAwij2uSeEMlq5AieDwLmGm7B2xFtjC7mGTcqpC5le8i0A3kkDwFYNb8Pi1Fq1wMtj3=aGbRO/g83He5BHDckHU7kpUcKuw8Yjh=SD3FqFw5YjV5lM2RmGCRBwTol6DIaG1keH7Mep8iPW3ka1wLmGm7mRnBmGwRBGwRBGwRBGwRBGwRBHUJ0v4RBRw80JwiKHv=0NxRbVIRBGwRBGwRBGwRBGwRBGwRtUYRBw1keH7Mep8iPW3kaGZROsgBmGwRBGwRBGwRBGwRBGwRBGwRBGw=lET8qGmRO/vRtvq=lJ2RqH48YEVolEd7a5x5BvFRmRwLmG1keH7Mep8iPw3kaGCRBFmLBG3RBAwIBpzMs2SNjV3Fq55RBDwWa1wLmGmIaFZiY/DXqHuFYN07B2v7mRnBmGwRBGwRBGwRBGwRBGwRBHg=mGTij2uSeEMlq5xieDw7BG1Ftj3=kWgBmGwRBGwRBGwRBGwRBGwRBGwRBGw=lET8qGmRO/vRtvq=lJ2RqH48YEVolEd7a5x5BvFRmRwLmG1keH7Mep8iPw3kaGCRBFmLBG3RBAwIBpzMs2SNjV3Fq55RBVwWa1wLmGmIaFZSYNA5BGY=Pun7B2v7mRnBmGwRBGwRBGwRBGwRBGwRBG1keH7Mep8iPW3kaGhLSVIRBGwRBGwRBGwRBGwRBGwRtUYRBw1keH7Mep8iPp6FtM3kaG27aG3Ft5xFlQ3IuTwRBGwRBGwRBGwRBGwRBGwRBGwRBpzMs2SNjV3cB55RODwieEjSsNONBGfRs=aSDDwiqGCRBpzMs2SNjV3cB55RBAwiqHWaMeiNBGxWBH7p1=SpNuwiqGCRBw1keH7Mep8iPW3kaGfROWQISVIRBGwRBGwRBGwRBGwRBGwRtNVF0MIRBGwRBGwRBGwRBGwRBGwRBGwRBG1keH7Mep8iPw3kaG2RB5SpM/jueuwImHtM12ERtG3RBAwij2uSeEMlq5AieDwLmG3JBHWaMeiNBG3RBAwIBpzMs2SNjV3Fq55RBTwWxGgRBAwiqQxWBFnBmGwRBGwRBGwRBGwRBGwRBHUJ0v4RBR9J3RZ7tiq7mRnBmGwRBGwRBGwRBGwRKDIRBGwRBGwRBGwRBGwolJwIBw1keH7Mep8iPG3kaG27aG3FkNUF313IaGYimGv=leQ5K1Tij2uSeEMlq5AieDgIaHnBmGwRBGwRBGwRBGwRBGwRBG1=tRh73je=ki6IBpzMs2SNjV3cB55ISVIRBGwRBGwRBGwRBGwRBGwRtUYRBw1=tRh73iUFqGv7SDw=YjVF0MgRKVIRBGwRBGwRBGwRBGwRBGwRBGwRBG15tUD8tMw7aHYJl/x=SVIRBGwRBGwRBGwRBGwRBGwRBGwRBHUJ0v4RBF95tjm8tMw50U15tw2WSGQiaHb=l/VFPHvJ0UC=xD/RtEU8t/QJlp1ol637SRwJ0/vFPW28ljg8mHx5KUV=SDmJYjbo05q8PNC=Beb80/4FbTbWb1qXSR6RbA3XQTwRBGwRBGwRBGwRBGwRBGwRBGwRBpVol6URODwWSVIRBGwRBGwRBGwRBGwRBGwRBGwRBHPotUV=aGTitUD=lDw7aG1=tRh7Y=U5tETIB1gRKVIRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwolJwIBs15tUD8tMgRKVIRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRtNbot9wix/DFbA3XQTwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBGw=Y2q=ljboBGTitUD=lDwJkWwithUcaG27mG15YjV5lMgBmGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBGw=lET8qG37KpT7mFwLmG1o0N6RBAwixQ45twZixVIRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRKiUF0NDIBpg5tNhISVIRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBpDokpV=aG2RKpq5lMnBmGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBHUJ0v4RBF9LPpq7b/DFbA3XQTwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwit/g8YMw7aGqXQTwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBH2BmGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRtNbot9wix/DFmHb8tjxFxDm8BFwLmG18tUC=aGCRBFm7mFnBmGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBpVol6URODwit/g8YMw7SDwWaGyRORwXmG/XQTwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBHY8PiUJlETRBw1okpU8aHvFqG1o0N6RODZRBp0Jl/e=a1wcQTwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwolJwIBp0Jl/e=aG27aHC5l/VIuTwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRtNbot9wix/D=OA9oS6C5l/V7B2g7bQ45tuZixVIRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRtNVF0MIRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBHUJ0v4RBF95tuZiqGCRt6VWYiqItvD8l/xFtNboljVJ0vvF3WTiK=v8KNUIa1wLmG37B2D=OA3XQTwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRBH2BmGwRBGwRBGwRBGwRBGwRBGwRBGwRBGwRtNbot9wixQ45KRZixVIRBGwRBGwRBGwRBGwRBGwRBGwRBH2BmGwRBGwRBGwRBGwRBGwRBGwRBGw=lET8qG37B2DJliV=SA3XQTwRBGwRBGwRBGwRBGwRBGwzaHU8KEURKVIRBGwRBGwRBGwRBGwRBGwRBGwRBHUJ0v4RBF9=tU07b/m71NqFY2qXbQ4JbAwiqGCRtvD8l/xFtNboljVJ0vvF3WTitpmLS6UF3i4FmwgIaGCRBF9L0pg5bA3XQTwRBGwRBGwRBGwRBGwRBGwzuTwRBGwRBGwRBGwRBH2BmGwRBGwRBGwRBGwRtNbot9wRb/mFbA9L0=4FYDZ7t=4FYDw806x5lihoku2i0uCF0JCFB60Jl/e=SeFR3je=ki6kBRn=B6x=m6AL3=v8KNU7kpTokWCFkNUF31C5YjV5lMn=t2b5leU83uCF0JCFPNm8lUDIB1nFYND5kiCRt=v8KEUXqFZ7KpUcKpvFYNvRt6v8lM2iPje=ki6iqHx5KUV=SD350U15tw+WSGQiShT=lU3oKu+WSGQFKw37mRnBmGwRBGwRBGwRBGwRtUYRBwv=leQ5K1Tij2uSeEMlq5AieDgRBJYRBw1keH7Mep8iPG3kaGv7aG38t2v=t=g8tM3Ia1IRBGwRBGwRBGwRBGwRBGwRtNbot9woKph8KEQ=lEgJl/botjqFqw1keH7Mep8iPw3ka1nBmGwRBGwRBGwRBGwRtNbot9wRbQ45tNA5tjq=lsZ7tiqLxA9ol6Q5kuw5KUQ=Sex5lihokuw5YjV5lM2iDNA=lEe5tM37mRnBmGwRBGwRBGwRBGwRtNbot9wRbQ45tuZ7B2DFbAmXQTwRBGwRBGwRKDIRBGwRBGwRBHUJ0v4RBR9LPpvJY/U7bQ4=Y2q8SA9J3R47mRnBmGwRBGwRBGwolJwIBpzMs2SNjV35KUQ=a55ROD2RB5hckE/8BFgRKVIRBGwRBGwRBGwRBGwitpmLS6/5lNqcawmMDNWpMEMROswpUi7SaHhckE/8B6eF0NqRj5RpNijRtE48YEv5Bvw5kEUFYGVRB5GiqQwJtv4FPpwIaG2RjNSpNRTIaHHS1uwJs=g8tNzFKig5YGw7aG3caFmISVIRBGwRBGwRBGwRBGwolJwIBp1JmDZ=YNDJ0wTIa1IRBGwRBGwRBGwRBGwRBGwRtNbot9wRb/Y8PihRt2CFPNm8lUD7a51L3EYL3GC5YjV5lM2kBiV80j1=YUV=NQmX0p4JPNh=l6DL3EYL3wC5YjV5lM25tvgFq6YL3=v8KNUX0p4JPNh=l6DL3EYL3EeJYeg5BwgXPiU5KNq8mHYJl/x=SV37b/xFtjC71/4Jluw=YUV=SQ4FPHv8bAw7tUCFKNDRBHb8tjxFxD35t248KEi83G3RKp6FtM25tNA5BHCJleU7lJZ7tUCFKNDRKp6FtM2FPNm8lUDRK=v8KNU7aFZ7mFZ7B2Y8Pih7mRnBmGwRBGwRBGwzuTwRBGwRBGwRtUYRBw1keH7Mep8iPG3kaG27aG38t2v=t=g8tM3IaHnBmGwRBGwRBGwRBGwRBpYol/URODwitpmLS6V80j1pYUV=aw1keH7Mep8iPw3ka1nBmGwRBGwRBGwRBGwRtNbot9wix/mFm9Z7KHq=aHb8tjxFxeh8OsZiqGCRtvD8l/xFtNboljVJ0vvF3WTit=g8tN8i0=g8tM3ka1wLmG37B2QFYMZixVIRBGwRBGwRBH2BmGwRBH2RtNVF0MwcQTwRBGwRBGwRtNbot9woKph8KEQ=lEgJl/botjqFqw1=tRh7YNqFY2qIB1gXQTwRBGwzuTwRBGw=lET8qG37B21okJZixVIRBGwRK5x8D=48PpUFmwgXQg2BwgY5l6b5tU48mHvJPpg806X=kpP8PidIB1wcQTwRBGw5PE4atNv=tNqIB1nBmGwRBG1JYjboe2b806C=lEDkPGw7aGmakUj5YpJS3UWW1gQJY165egJa3EsMkG/JxiN=eMqXlgvWUJQSPFQaDgK8tvopei6Mj5V5NgJMY==lji0JYU3oejla1vl8KEPljEd=0=R505op0/VaDEIpYECa3=boY23a1EtJ0igakH75xHLa1vBojgKM3Uuls60lSiDojgKM3UJWY/eaDEauUNd=j5kc1=1SsEHo0jkpYhoasUQaMvAXsUKM3HoM05gMUvIclRxaS=iuejTlsFDoMhMFD6OoNiPJ0D6Wti+Wl6oljiPJ0D6WtRqabNm8M=DlUE38YpKS35IclVPpjjQcYRqS3ioljj4NSG6pjWQNUNWuDipMYQ6aUpdNUNWuDiMNOHXSjw/SUNNoe=BNjEP=DgRu3UmWei0aeEBXt=OuYhvNeN4alhlclEhXkU7oMjdaN=A5MUgox5sMkHfJbRe5NgkSbHLp16uMSHDpU=O505IasiTl15acMhSubvYuDidJN5N8DUdN3Ub8SU6S0UHoDUlcKNiolVPpjjQ5YEKN3NLp16NM1NVSD/OulUuoNgMNOHXSjilMlULNKEXu0D65egkEt2NWNijNOjlNM/OulUuoNgMNOHXSjilMlULNKEXu0D65egkEt2NWNijMU=IMD/OulUuoNgMNOHXSjilMlULNKEXu06XElWxMY/mM05CSOiIFtigXkgvuDjDJNEbFs2PWsh=W3v0JxiN8eM/M1NSNSpQSPFQae1qcK=bWUN4NSjapNu/NUNLNKEXu0eXF0RxSY/Lp16NM1NlMeNgoxFmXQTwRBGwitig8YpzFt2q5j2QRODwR1U6pk=1ls66SOiIFtigXk5olsgxpjj4oeMQos=MpkF6al16oljkEK=bWY53Sj5doM2PWshvNeU3aDNBuUNd=j5ipK53SNEd=0N6uY/Up0QQaDpjFs26ubUsMkG/JxiN=eMqXlgvWUJQSPFQa0WqXlgvWUJQaD=EFDgVu15JWt/7MU=pFDgVSUHpWKpYNSjaMeiNp16Wp0pV=svBclRxM3==8Y/elNF/8shO=OH=WDjCaeEd=0=R505op0/VaMEIpjUkESHipD66lU5tWjgSu3gmW16qlUvaJ0igaS5sMkH+lUvacYRqS3imWDRQaD=EFeMQXMeJWM6uMSHDpU=OcjpMWSUSMU=lNjiNp1Nap1UxSNEdEDppFtUvNxNdaD=EF0WqXlgvW1=dl1vI=YjkEt2IpM=SMbjoJ1etWKESNSNBM1NaMewQp12kM0hQaMvAXsUKM3HoMDjgMSit5lpOu3=bpe=eaMvB5YECMYEmoM1PpjjQF0jJSbHoNxp4NkUPc1hSubvYuDidJN5N=DUdSYvm8Uj3J15VcYpKN3Niasi0J06aJ0igaS5sMkGxJM5VFegS=PvLMDRPpjj4aUUkSYgolsRQaDNXMjpdEKENclVPpjj4aYjkll2iM05dJD5VoeHkl3=b8kEQaeEBEDpp8DgONeiQlUEHoNsqp3Nm8S1QaM5o5YEhF0Uip0/haME3ojgKNYevNxNVl1EHo0EK8thLNKEXu05daYRxuY/moMiMN1NaaUpg50UuuegsNOGeSDUfFD6O=0hIJbEB8tiguUplpNiuNU=pFDUfEtepWOU7NtUiEDpp8DgONxUPlUFD=eM/M1NaN1gSSsEiIDgdSUHMoxpgSPFQaDEp8t/Upe=faMEaNjEjN1eMuDRA=1EBo0jkNl5basgQJY6p=esQXM2MoMjgMSit5lpOuY/Upe=f=jva8sUOMUpSpN=ENs=A5MUfFD6O=0hIlSiA5YWqNl5pWOU7NtgxS1E3oDgoltvQ=sEH5D2PWshOlOHXu0AQ7aRnBmGwRBHUJ0v4RBR9oOsZSYND502qoqHD802VFxQ4oOsZ7tpg5mHb8tjxFxeb806D=l6D7wTi7t=4FYDw8Yjh=SD38Y=QiqH48UEeJYeg5OeFRYFT83NV8B/C5l/VLB5mFKG3LKpTokWCFt2q5B60Jl/e=a1nFYND5kiCRt=v8KEUXeQm7wTi7KEQJlAZuYUC=BHQ8PiDRKp4RB2molA4F0wwlPHUFY/57B2xFtjC7b/mFm9ZBwUu8PiDXmG9ol6Q5kuw5KUQ=SD35tNA5BFw8Yjh=SD3Ft2q5BFw5YjV5lM2ixW/WxWPixAw7tUCFKNDRKp6FtM2FPNm8lUDRK=v8KNU7aFZ7mFZBw19L0=4FYDZBw19=Y2q8aHCJleU7a5C=3G3Rt2CMPNm8lUD7NQm=qvC5l/VLt6e8tQVix/Y8PihRteU5tv4=OeQ8PED7b/g83He5BHDckHU7kHvFPEP8Pi1Rt6v8lM2FKFZ7tUCFKNDRKp6FtM2FPNm8lUDRK=v8KNU7aFZ7mFZ7B2Y8Pih7YibFBFV5tvgFq6x=ki0=kRC5YjV5lMV5tvgFq6Q8PiDL3=v8KNUIShq=kpeFYAw=YjVF0MnkBRZBw19FPHv8b6BJlEdLlE48Y6UJPuwRjhQ=kiVkSQ4FPHv8bA9J3R47wTiM0Nq5YNqXmG9ol6Q5kuw5KUQ=SD35tNA5BFw8Yjh=SD3F0Nq5YNqiqH0Jl/e=SD3RmGCRBpzMDNaN1Nalq5apMe7NsNzuMpsMm55RBAwRmFZRjH4F3u+RO/g83He5BHDckHU7a5D=kvDiqHCJleU7a5Q8PiDiqH0Jl/e=SD3WxsxWxF37mG9ol6Q5kuw5KUQ=Sex5lihokuw5YjV5lM2ixAZixAIBSQ4=Y2q8SA9J3RZRbVIRBGwRtUYRBvgFPEU5Bw1keH7Mep8iPG3ka1gRKVIBmGwRBGwRBGw=3NCJPpg80AwJ0JTitJVRBpDIaHnBmGwRBGwRBGwRBGwRBpPRODwut=4FtNCIBpYLBGm5qRgRt2qRsGw=3NCJPpg806z=kvgFPpxIB5Yol/UkPHe5j2b806D=l6DFqFgXQTwRBGwRBGwRBGwRBHg=mGTiKFgRKVIRBGwRBGwRBGwRBGwRBGwRsHY5Pig5tMTiKFVRsHmJkEUEbpz=tNb80pUIBpDIa1nBmGwRBGwRBGwRBGwRBGwRBHG=YEV8PEUIBpPISVIRBGwRBGwRBGwRBGwzuTwRBGwRBGwRKDIBmGwRBGwRBGwolJwIBpzMs2SNjV3FB55ROD2RB5mFKG3IaHnBmGwRBGwRBGwRBGwRtEYIBR45teQL0iQL3HVRmQwitig8YpzFt2q5j2QISVIRBGwRBGwRBGwRBGwit2e5BG2RK5x8DNAIBiQ=kiVRB2D8kG4J3GCFtQwRmGCRBpzMs2SNjV3cB55RBAwRmG/7m21=kJ483NV8BGq7mJ/RBJmISVIRBGwRBGwRBGwRBGwF0/U=kGTWa1nBmGwRBGwRBGwRBGwRtNbot9wRb/QFYMwJ0/vFPW28lQ/7mp45kpF8mRwLmHPF02jcBwmFKWwJkNARKQw=PiUFBHmFB6Q8BRgRBAwRbQ4FKiU7mRnBmGwRBGwRBGwRBGwRKNC8tUCoqwmLPphFB2mFB6Q8BRgXQTwRBGwRBGwRKDIRBGwRBGwRBHg=mGTij2uSeEMlq5QieDw7SDwi0ibFBFgRKVIRBGwRBGwRBGwRBGwJ0JTRm2D8kG4JYWCFtQmLBG1JYjboe2b806C=lEDkPGgXQTwRBGwRBGwRBGwRBG18PNDRODw5PE4pkwTR3HUFYQwLPphFB2mJq6Q8BGmRBAwij2uSeEMlq5AieDwLmGmRBRwLmG1keH7Mep8iPW3kaGCRBRwWSA4=tN0L06e8tQwWbAYWaGYRm1nBmGwRBGwRBGwRBGwRKEV=lNQIOsgXQTwRBGwRBGwRBGwRBHUJ0v4RBR9FKiURtEVJkEx7leVWSA18PNDktAmRBAw5PE4pkwTR3HxRtjecBH9Rt5q=kGwJYWCFtQmIaGCRBR9LPHq=SAmXQTwRBGwRBGwRBGwRBHe8Y/g8YVTRm2D8kG4JYWCFtQmISVIRBGwRBGwRBH2BmGwRBH2BmGwRBHUJ0v4RBF9L0pg5bA3XQTwRBGw5PE4pY245tNqIB1nB3DIBY=e8YEDol2CRtjb5tU48UiOIB1wcQTwRBGwolJwIBs1keH7Mep8iPG3ka1wcQTwRBGwRBGwRBpvRODwJkiqJk1TBmGwRBGwRBGwRBGwRBie8Yjh=aRw7SAwFtvQkPNCJleUIB1VBmGwRBGwRBGwRBGwRBiQoKHz5YNqF0U48mRw7SAwFtvQ5YNqF0U48mwgLGTwRBGwRBGwRBGwRBGm5PE4kP=UF3Eg80AmRODZRj=jMUEiSDAVBmGwRBGwRBGwRBGwRBixJl=U8l21=aRw7SAwutUCoN23=kuTiPEv=YNz8l21=aFgBmGwRBGwRBGwISVIRBGwRBGwRBHUJ0v4RKEUFYUv8tU+=aw1Ja1nBmGwRBH2RtNVF0MwcQTwRBGwRBGwRtN0JlQTij2uSeEMlq5QieDgXQTwRBGwzug2Bwgg=mGT=leQ5K1Tij2uSeEMlq5vieDgIuTwRBGwolJwItUxF0NDIBp1=l=v5l/Dk0jb5tU48m1wimJw=3NCJPpg806z=kvgFPpxIB5vJPpg80A3RBAwitpU=Yje8KpzJlEDol2CIa1IRBGwRBGwRBG1keH7Mep8i0s3kaG2RBp1=l=v5l/Dk0jb5tU48bVIRBGwRtNVF0MIRBGwRBGwRBG1keH7Mep8i0s3kaG2RB5xoaFnBYUYRBwv=leQ5K1Tij2uSeEMlq5vieDgRBJYRt=e8YEDol2Ck0NAokEDFqw3JlEDol2CiqGCRBpzMs2SNjV3Ja55Ia1IRBGwRtEv8t/z5kEUFU2Y5l6bIB5vJPpg80A3RBAwij2uSeEMlq5vieDgXQgUctUDXQrrPK!9_%Ç[A[A!linkmanagerplus/images/qewocy.pngnu„[µü¤PNGWSNb=luPJlWAESjbJ0EYWO1AWSw/W0pUJbGeW0JP=S=UEbEUXSHU=Oi1XSsQEOsPXOEvWSGxJbM/=SvvWS1AE0sQWSRP=OHvEYiUJSseWbweW0jbXSG0WlRq=SjvEx1AWYWPElJxJb=UWxpmXljYEbjYWOpvEbJqXSRP=SU1WxuA=OimXSNUW0W6JSivJSuPJlRAWxwAWOG6XSJPWximExFAJxHvWxGxJ0MxJlRxExp1XlpvWYRqJSpm=tJAEO1PJSib=lR/ExjUJSs0WtEU=YN1JbwxJ0MqWOUb=lRxXSH1WSJQWlpYWOHbXOWPWxWqJxFqE0EbXOR6=SGDWOu0XOsDW0RDJxi1EORqWYW/Ets/W0WDElM0=lJ/EONbE0ReWO=YXSwqWOHb=Yp1WxFxJxRDXSweJYW0JxM0=Ovv=tsqJY=UJ0i1WxF/W0sqWOvYWY=Y=t=vWtjYWOReJxF/JYRQEOMDJxHbWOFQ=Op1=luAESsQJbH1=SMPXSWQEYpmW0JxJbGPXtRxJSsDWbGxExRAXSGQXSEbW0NmExG6XtR/E0JeW0W/WxUvWbjvXSibEOsqWxJAWlse=lWDJxM6=SuQXtJeJSv1XlpmJbGPJxGqJYiUJY=vJ0WQE0MqE0EbEOEUJxpUESJ/EOF6EtsQExM/WlReJlN1XSGD=bJQJbGDJbMxJSR0XlMQW0sAEYs/XOFP=bHYWxjmW0N1Jx1D=OF6Jb10WtpYEtJ6=buQXOpvXts0=OGeXljvJlsAEbsxJYW0JYJ0XOHbXOFDJS1QJxGPWxJ0ElRPXSs6EYNvExG/Wxw0JxFxJS5vEOpbWSvb=tM/XSMQExGeWbimXlW0WtEvJlu/WbFxW0uPWYMAESMD=O=bWtEb=tNvXOse=bMPWYpmWYW6=OH1=ORqWOpvXSRqJxGPEOUUWtWeWtWDWbJ/WSWeWlMQJxvm=YivXtuQWlEmJxGAW0JQWY=UE0M6WOu6J0imExW6JxWA=OJQEY=YExWDXO1qEbu6WbEbJSGDWSjvWOF/Exw0EOs0=SEvESw/JSH1=OW0=OuQEb1e=bseWYW0ExJqXtJDEOMDJ0sqJ0MxXSWPWYRPEY=bXtR6E0p1J0MP=SFAJ0EvXSGDJSEvJxFeEx=1JYsDESu6=OjYWOFDJbuDEYsD=OUUEbH1JxGqXlMAWtWe=bGeWtNmEOpYEtJ/WOueJSRxWxU1W0MQJSGQEOE1WxvYElEbJxwxJbEmWYWqJbMe=ORQWtj1JbF6=bvYWtR/=tjvWxJ6ESHbEl=bE0=1ESp1WYi1EbN1WYJQXSG0JSGPWOwq=bM6Jx1eW0=m=bwqEt=vEORqEYWeWYjvJ0uDW0WxWxJ0WxWe=tW0Wxu6WxJ6J0M6XSMeESW0=OEUEYj1J0seWOGxJSRAXOWQXtjUWbMQE0i1WbpmWOsD=OwDJxU1JSGxJSHm=SuPESR6EYWxXSUm=bu6JY=1ES=bXtj1WYR/JxWDWSHmE0Mx=SsDXtjbJlNb=b1PEOEbWxuQESRqJSNvWxFeW0jvEYiUJ0ibWbuA=bpUEbpvEOMDEYjUJlEUExR/ESJP=liUJbp1=lRDEOp1XlReW0jmWlNmJlu/Et=v=b10XtJx=buAWSvbEbvm=tpYJx1x=SiYW0pmWSNbE0pmXljbJxHbWO5mWYRPWl=bWluPWtj1=bEmWYsPElsqWxw0WS1DXOGqJ0Mx=lMeE0sDXSGQ=lueEYWq=bRxESHmXOvbW0=UWSFAJbw0Jljb=OwxJSu0WO10=bJq=OsAXOv1=bG6WxsqJS5vW0WQE0WD=Su/JxuPW0=YW0MeXOMQ=O1eWxGQWlEmJx=1Wx=YWSivExiU=tuDXljmWbibW0J6JSsQESs0=lpv=bMeJxW6EbF/WtuPJSFAEx1eJ0R6EtWqEb5mESjvESFAW0JeJY=mJlMxEx1AXtR0JlJAWlRQEb1P=YiYElWqEtRxElJx=YseJSEbEYux=bjYXlJAEbG/WtWA=t=U=O1/W0p1=YiUJSpmEOFQXOuxJbuP=SM6WOw6=SGq=SWeXSJDJYM6=bsAWS1D=lR6=YjUJx1PEYuPXlR/JlNmXSF/ElWP=SJ/Jxj1WOJ6JxRQXSu0Wb5UWSR6EOR6=bGPWSJD=SH1Xl=mXSEYESi1W0MPWOJ/XOsAJb=mWxFAElNbWO1qEOwP=tWPJbjbJxv1Wt=bXtEmESGPEOjm=tjUJSsAWxvmJbG6XSux=bRDXtRPExsxWtNm=lM0WxEUEbJqWO5UEOv1ESwe=bEYJxvvJSReE0RAWYjvWx10=lR0=SvmWx5mWbRxJbFqXSRDElWQEO1qW0NvESw/=YjU=SpUJxpvJbpmWS=U=b1qWS1DJS=UWSRxJ0p1=tNYWlWQ=bw0Eb=bWOMeElM6JYMeES5bXSNbWO5bJYReXSvbXtEmWlMDXSWeExHmEYWPEtMAXOHvWYs/ExiYXtu0JYWDElNmXSp1XOWxWxFAExMe=S1qJxG6XlEbEY=bJ0p1WSsQXSJDXS5YJSJAExiYJbEvEOWQWbF/E0JDJYsPEOwDWbFPE0iv=Ov1JYRPJ0se=bM0JSEYWSsAWxJeXSUYXOGx=biYWOF/WONmExMqJxRQXSGeEbpbXlJ6WtR6E0WqEOue=bu6=SFAES=mEOvYXSJ6WOs/Xljm=lReWbEvWlWxWORe=bweXlEUEYs/WORqXliYXlMPJb1PXlN1ES=vXOsAXlRe=OuqJSW6WSFDWOjmWx=1WtM/=YjYXSM6=tM0XSjb=OsD=Yp1ESjbJlj1=ljYWbsAWxHbWSFQ=bUY=SEUJxE1JxMqESwqXlsDWliUESJAJlW6=lu/WbsPXSWD=lNvWORQEOs/XSpUWY=mEl=v=lNmJ0uqWOF0WS5mWxJ/XSu0JbE1=Oj1EON1JYMAXOHbEOuDJxGP=bMx=lM/=S1xJli1JbMqWbWxElM0JxFeXSueJ0M/Xlu0Expm=O=1JbwxJxueJljbJbN1WtjvWYN1WYue=bJ6XSRxJlMA=YsAJx16WOu6WOJeWYJQWSsAJSibW0RQ=luP=OsqXOGDElj1WYJDExuAEOWqWluPEljU=YMqJS1QWSvvXOMxESwx=S1QWtjmXO16WSG6ESJDW0MP=OF/=Sj1=Ow/WtR6=YRqJlivWSHmXOwe=Su/EON1WSM/XtMPJliY=SuDJlR0XtJAXt=UWYWQJxWQExWDEb1qJlR0JYuQ=Ssx=tjYEOvbXS1QJSFqElR/WSpv=YJ0ESGA=ORQXOG0JbFAEONYXOweEx=vJlRqEluPE0RPJYEmWx1/=bGeXSM0J0u/Wb16XOwxWl=vJxNbWO5bXSuP=OvmXSHUEtWP=lRx=bGeWtu/WOGeEOsDWSFPXS5v=SHm=YM/=SMqJ0imJbWeEOiY=YMxElWeXOvU=SWq=OR6XluPJlEUXtNYEOuDWOUYWbWP=OweW0uPExFQWxUbWYWxXSN1W0M/WbJqXSEb=Y=mW0j1WbMAJbEb=bMxXSHmEOR0ESMqXlEbE0uq=b51WxW0=bRDXO1QWOWDE0u0WbjvWOG/XtNYWOu/=bFeEO5vWtW/=tNbXtNvEYJqJ0MAW0RPW0u6EY=mExWQEbEvWOvvJxGDWtuQW0jU=O5YWxwA=lEmXOMAEYsQ=YsD=S=v=OEYWSEmE0N1JSEmJ0NYJxwqJYWAW0ibExuxWbG6XtW0Xt=b=SW0WOwPXSMP=SJQEbJ6=tsqJluPWOsxJ0NUJbUvWSvYEb=YXSWQXSvYXSvbXOF/=YRqJSRDEljbWxvbWSN1JbuPWxJxXtsxWb1qXlR/EYW/WxsAExRDE0Em=tW/JbW/WxGxXlpbEOMDJ0RPXOsQJx1AElMQE0iYExj1XORxJYs/ESj1EbHYEx5Y=SsqWlJ6WbNbESU1WbRAWluqWYWDXSw0EbHvJxsQWbMQWbJDWSwq=bsPEbwQJSGPWYj1ESw6JlWAEx=UWSFQWbNUXS=YElR0WO5UEx=b=tMAEYR6ESFxE0uA=lpUJSJ/=ONU=lM0JbjvJbNmWtWxES1Q=SuQXSp1WYEvWljYW0pvElM0WtRqEbMQWbu6EYE1Jbib=lux=bHbJSHv=ORxJlWAWluDJlReWYi1Jx1QWtMeJbjUWx=bEtMqEbGxW0=bWxwqJY=mEb5Y=bWP=YReEOEU=tMe=ORxExJDWONmES1xWxUYEOsPEOJ6EOwQWlpvWSG/=S=1JYMe=tjvJbjbWbvvEYpb=bRx=bp1WOWxXl=vXSWDExMx=bMQXSiUJbReJSuDElWxES51XSW0Wb10W0WxXtRqJb1xXOMA=SEvESjYWbJ0=SwxJSR0WxvbJxJDJxMe=SseWxue=lR/WOE1EOwQXSNvEYs/XSRA=lMPXlEvJxF0WtJPWtW0WOuq=bse=li1WxMP=SM/WSjmXOHm=tu0=tJqJxs6WOvmJbMQWSWDXSMAESuD=tNYJSFAEbEUWbMxEOuDJbseWOuA=YNmElJ/JYuQWS=bWSsx=SG0=bGx=bGPWbjYJbjb=YR/EbFQ=buxWS1QWSp1WYMQ=bG/=SMeJxu0WxHYWliUWxwDEO5YWSMAXONYJYsDXtW/Wl=mWxJDWlux=Owq=bi1XOFeXlR/WOs0EOuxEtpvESv1WxMDWYRP=OpbWSEbJYRqXOGeXlMx=lWqES51=OwAJYMPWlpmEb=UES51ExpUWxWAExiU=OMxEx=vJxJDXlR0=buAWO10=SG6WlR/JYWeWbR6XtsD=O10=SsDWS=v=Sib=SwDXlM/J0jbJxu/WxGqWtWQWbFAExpbElM6Xt=bEO1AXtuAWxGqElJ6E0=m=lWPJx1AEYu6WYM6WxuP=OFQWSFA=lMeXOUvWl=vXOFxJbEvExU1WxM0W0WP=tux=OjvJSRe=SUY=YiU=S5UJbweWOwqJbMAJS5mWbW/ESEmWSibWS=YExWPJxRx=SiYExWqEbF/WSM/WOjYExGQJxR/=bGxJbwqWbwAWb5UWbu/J0MqEbjmWbseWxNbESNmWYE1WSwQXlMPEOWQJbRqWbJAXlp1ESR6XtNb=O1PWbs0JbNUXSsA=SFeEOv1JxjUJbWxE0pvJx16XOpYEtEUXtNvExFAJ0R0=bRQJS1/=bsqWOueWSwAWx5bWxNU=S5v=S1eWO5b=S5bXljvWYs/=SpbE0W0JxRxWxGeE0EYJbMAEOs/=b1PWSMPXtu/WlMQWOv1Xti1JSsqJSMAWOMqJxse=YsPWb1eElWD=Os0=tMA=ts0W0s6=lRPEORPJxReXOsQJxR6EbwQJbjYWx1QExWAW0j1W0sxJbWDWOpYXORAXtRDXlEY=O5Y=lJqWSvU=SiY=OvmJbF/WbHm=lpmJSpmXts0WSsx=YJQ=lsDElpbEYEvWSMqEbGeWtNvE0R6=Yu6JS1/ESR/EYR0EtEUXt=UXS5YWbw0JbseJbjmJSv1JxiUEbJPWSsDXtMqJlueExw/E0MeEYWxXlWeEljmJSMP=O1q=bsDWbwxJbpUWO51J0jm=lEYExuxESUvWx5U=bGDXtR/JbjvXtsQWxUmWYRDEljbWxWQESsqWO1A=bM6WlRDWxFAJls0JxFQJlueWSuPWOG6EbWDWbUmJ0WqXtJDWS5v=bReJ0JAJxM6=OJPWlJDE0jUESEYWlMQWORxWxM0WYjU=buQWbNY=YsxXSvv=SU1JbMDWx=vJ0WqWSi1EbWAJlNUWSjUEljb=OMD=YM0WYRqEOwxWbpvJljvWYWqWxu6WbweXOW0WbFeWS5UESsAE0RAESGxWYjYWbUm=YEUEtMPExFPJSwe=OFeWOv1WbFAWO10ES=vWxjm=bGAWbM6JbsDESMqW0WA=OFAW0u/=OiUJbJe=bWeEbpUJbwPXSvUJbv1WOHmE0pYXSMq=bFAWO=YWO=UWbGqEbF/=tJ6W0NUEtR0EtMqXtpUJSweExj1JSiYElsP=Si1E0sP=Ss6ElJ0XSU1JSNvXSs/WSFQJl=vWxFxE0R6J0JAXlRPWxue=YMQXtM6E0sqXSWDE0i1EbHvExsq=Oj1=bivXOwx=OR6=SjU=tiUWb10Xl=U=YsPWb5UWxs0JlRxXlM/JYuPE0ueJSJ/JSUUEOHbEYM/EbGP=tJeESMQ=lMeWYJQXtMeJSM/XOWxWx1qWlsxJbRxE0NY=bM0WOiYEONbJbMAEbuxJbFPXOsxXS=v=OMDWOwQJ0uQJls0Eb=UWxMAXlJPEYueEbMA=tsP=S=v=tsDJxUU=bEY=OjvEOH1JxH1=lWxWxpv=b5YJxjUESNUW0sPJxR0Xtu0EbNYWtjmWx10WSpbJlu6XSpYEOW/WOUUJbFPEY=vJxGQESwqEO1eJSReXlReJ0Jx=SUm=liUJ0uxWSE1JSvYJbvYExibJbE1WYEvEtEbElWxWxHmWSuDWls0XOwxW0jY=bFxJxF6JlsD=Ss/ES1AJ0sqJxGeXSM0=OHmJSseXlpUWxJeWxjvEbweWOUmEYi1JSuDExHvWOivWbM/JSu0EOw0=lu6JbweElJDXSEbEtRqJbG6EtEvJlW/JSRQWlsPW0M0ExM/WYM0J0uPJxN1EOimWlW0XlWPJ0W/Jlu6=Si1JbvbWx1eXSEmWbi1E0MQWlWPWOG0Ets0ESJA=l=bEOJDElJxWOsx=OUvXS=UWlWPWSWQXSiYWlJ6WlJP=l=m=SHvJxs0JYsDEtuAESM0Ex1QXOiUEbGPXOHv=tR6=lse=Y=bW0WxWbR/ES1PXSRPWYWAJlWeEO1DJlueJSEbXSsxXSR/EOJ6JlM0E0pv=SG0Jb5YJluxWOiUEYjYESwA=O1eEt=mWO=YWbWPJxEYJ0sDJ0E1Ebu/E0ueXOF/WbU1=S1q=SsxWSwxEtpvJSM6=buDW0EvXls6ExFP=SuAESEYElimEl=m=l=U=SRqJbuqExN1Xts/XSJ0=bEbJSG0Xtu/WxE1El=UWY=mE0iUEbpmJSHvJSiv=YJxWb1DXSUmWSiYWO=1=bMA=ORD=bW/Xtuq=tEmJbMAEYueWbNmEtWxJSRQJYjUWtp1=b51=bMqJbFDEOJ/Xl=1W0sx=Yuq=liY=SwQ=bF/WtjYWSWQJxUUJxNbWxFxWORAXtMqXSJDJ0s0XlM0WliYJ0RPWYs6W0JDEtpbJ0R6W0u6JSsDW0=mJYu/Eb51EYuq=ls0WOsDExF/WbJQXtN1=YsAEOW0ESMeJxpUWYsQJxWAWx1eWORQJSHbJxwAXO=vWts0JYNvWb1xWt=bXOGP=ORDEtpUEbWxEbGxElu6=tWP=YuDEYpUElR/WtJD=bwAWbM6=OFDWxJQ=OuDXls6Exs/EtWPWtEbXSi1E0=YWSiU=SuxJljYExuAWbFe=bJ0WOwqESEYWxw/XlM/=tNYXSw0Wx1eXONUJYMQEOuPXOw/=SWxExpvEtWDWli1W0iYWONvJSJq=buxJYsDXOMA=lpm=bs0=tsQWOUUExwAJxvv=OvmJYpmXSWqJxW6EYWeEO=mJYsqJxuA=OW6XtJDXlWPWYpm=bjvWlpmESHbWtu0EO5bXtW0=SMqE0=mJYsAJYWx=SRQE0u6ESM0EbsQE0se=SJxW0pbJSHmExWqExFQWSHUWYjv=YuAElJA=OGA=ts6=ORx=S=YJlJQWb5YXORPWOuPWSvmEtMPWbFq=Ss0=Y=UEOwQWOMQJbsPWlueWSUbJx1xXOu0WOWDWxUmJlu0E0jYElp1JYRDEYNYXtJqJS=bE0pmJbJQWluAWlRQExsxW0JDEljb=tE1XSpbWb1AWti1WlRQWYRPXO5Y=tWDXSHmJbi1WSEvESWP=SJxEO5bJYJAJYj1=lu6WSs6ESMQExM/WOMq=lu0XOJeE0ibWOEbEl=mJ0M6WOWD=OG0XtNbWOHvEbWx=tW/WSsPWOJeEO1eJli1ES1/J0ux=SNm=luqWxWQXOW6JbRPWljb=YWDXO5b=SwQWSWqXSs6XtW/WtR0XOF/WYNv=SsPEbuQXtpvJYRqXSpbWSF0EOEYWOwQJbJQExHbJSU1=Os6W0WxWSwx=bw6E0R6=b16WxWeEbwA=O16WxRq=lNU=OjvEORqJxHmWSGAJ0JQEb10XlpUXOJ0E0uA=bsDWO1xJxjmES1PEOuDEOG6WYpYXOvbJbWA=SueExHUElRQJx5YESEbW0RA=tM0Ets0Wl=1Ex5bWOWeWO1/Wx10=SR/WtpvJbivEbWxJb1AW0s0WxHbESv1=tEvJS=Y=buD=bWPJbEvWO1DWO1A=liYJxuqESiYJb1x=SWAE0WxJbNv=lEvWxFqEbseWYWD=lWDE0WxEYjvXtjmXSwQJbux=lRxWxvYJxiYESi1ElN1XOs0WtJxXtJe=O5mJbMPEbwqXOW/EORDE0MDEYR/JxJ6JS1D=YR6=tM0WOw0WliUXORQJx1/WxReExFx=YR6ElNYWOs6ExWeJxu6ExR6WOWQ=b51WOwDWb5b=YsPJb5U=O1QXlEU=liUEbRQEOwxWbGPXSweJ0W0WxJqElWDW0R6EORQ=SJeJxJDJx5bWSRD=tEbESw/JbJxWtseE0ReJbwAExJ/WSW6ExJDWYuAEbu/EbM/XS=mESvmEYMx=Su0EbjmXSHUEOJAJbReWOvYJ0jUEOR0WORDElMqEtNUXSHm=OpmEb1QWOwDEtRq=bwQWtJP=lM6WSsqXlR0=bJ6JbsQWOwQEb51EYueJSWDXOEYEx1e=tW0EOibXSuQExM/ESpYESs6XSw6WtpbJSj1WYsDJSu0ExjUWORD=YRDJYiYWxpb=tsqEOGAEtNvXSN1EtW6XlsPJxF/EluAWxw0EYjv=tW6WYNv=bMAEOJD=lWe=SRDWbG/E0MPExvvWbRqEO1e=tjmEOGPJbRe=O1A=YEYJbRDWOuQWxEbWtpbWYJe=bMqEt=m=OFPJ0MQWSw0XS5b=OJQJSuAWSRQWbw0J0=1=l=1JljYWxG6ES5YElEvJYsAJ0JqEY=YWtiv=tW6=bweXOi1JxU1J0JxEbWPWbWAXlJQJSFQExvYJYJQWxG0=bR0WYjYEbRxEOwD=bs0JSUYXlNvJ0jUXlEv=OibJlRPJxiUXOGxXORQE0NU=OibWbM6ESJPJlj1=SwPXlJxJbuAJb1DJlNmEx16W0NvWtE1WbEYJ0p1=Ys6Wl=1XOseEls6JYj1=Sw/Wb=1EbweWYWP=SRAExWAWxGq=lMx=YMq=S5YXlRAExuq=SMA=lW0XOs0WlWeExuP=bJAWtWqXtJ0JlWeJxjmExFPW0=bWxM0WOMe=OGDE0sQJS1qXOM6ESWA=OMeXSsPJYpvXSMAEYu6EOMQXSG0WxF/WSvvJbFAE0R0EOFxWYWAEb1AW0pb=OJeXOFxEbRqJ0M/JYuDEYimWOs6EOR6Jx16JSGAE0M6E0MxJS1/=SWPXSuAElpbWxuDJSvbWtJA=O=UE0=vWx1xXtNb=SuxXOuDXS=1WOHmEtRQJbJ/=Os6WxJeESjmWxRPJ0WP=lEm=Ss0WSUbE0JP=tRQJbw0Wtj1EYMeXlpbJYs6J0EbXtWPW0WAWxwQExRAElWqE0MxJSwqE0NvXOwxExMq=bUYWbsqXtEvEtWqJSwPExvUJbRDXtp1=bRxWbu/ElE1EYN1JlEmJlReEOMxESF/WSs6WtReJxueWSWPJ0M0WYJDEbW0Ebw/WSRe=SGA=ls6JbM6WbRQ=Yu6=SwPXlimWOuD=YJPEtMDWOWQWO=UWlEvWSFeES1PEYMeEOWAWtpbJYsPJljb=bu6Ebu6WOG6XS5YElR/E0i1=bsAES5vJ0u6E0sQWYM0JSv1WOjmXSJDJxGAEOwPWtjmJ0p1=Oim=lEvElWPW0u6Jl=UWl=1XSE1J0MDEtu/ExGAWYEYWOH1=SHvJljbEOF6EORxWts0J0sqE0WA=OwAJxGAWSNYElW0WxiYWSivESG6J0sQWxGxXlWqWOM6ESFDElMq=SMxWxsDXSMDEljUElMQJbUmESUUJbJ/EOR0JbJe=SuxElMqJbRq=OwQWSR/WbFDExEYJbvvJSM0JbpmJYRx=SW6XSGAWtu/WSRqWlpUEtJDElRq=lsDJSJe=OvmJlW6=bReXtWAJSJPEYR0=lMqE0RDWb=bWtEvJSWAWOweWbEY=t=bEtEYJxsDExi1XOMDWxvUWYNvXOiYW0JQWSRPESMeJSuxWbUYWbu/Xlpb=luDJx=YJ0W/=SFAXOvU=bjYExvU=ljYW0W6EOj1WtRDEtRqXSFq=tpmJxvb=buP=YJPXtuqWtRPEO1/=Swq=SJAXtsqE0RQEOjvE0Mq=YM6WbFQJ0MPJSs/EOEUESu/WtMP=bR6WbwAElNmWYNYEYiYEbv1=OR/=OWPJbp1W0MPWSueESR6=bHbWOWAJlW6JYuPWbNbJbFPJbJe=Osx=lJ6ESjvJbF/WlsQEOG/WYR6EOM6=OJQJ0=Y=SJ0WOFx=SMAWSWAEOG/JSs6Et=mWSsDJxW0J0N1WYJxEYR6WYEv=S1PWSEUJS16WxGA=O=UESWDWYsxXl=bJbGDWbwAJxWQEOGDWtWq=bEUJSGeEbUUWYpUE0ivEbibEbu/ExE1=SMAXlWx=bHb=bpUJxu0E0JxWOGA=SM6XlW6WS1eEbMxEls6JbEb=OwPESibXts/JbuqW0sQExjU=b=vWxvbXS51WOH1XOwqEtiU=lM6WSvm=SpvES=YWb1xJxiUEtEY=SUbXtRxWSJQEOWqWxFeEbMqESUb=bRA=bwDJxEUXlM/WSJxW0MeEOi1W0E1E0j1Ebu0JbRPWYpUEbFq=t=Y=lNmExJAJYu6Xti1EtRAXluPXOW0WOFAWS1A=YEmJxs/=OGQXlMeJxwQExsPWYux=bjvEO=vES1x=OFxJbUmWYJQXOwDJbF0EtsAEbiYJS1QEtWxJbWDXO1DWSvvWbsPEtjmXtW0XOw6WYWeJbU1JYpm=SiUE0MeWls/JSJ/=OsPJSib=ls6ExwPEtjUWOj1EYjbW0iYESF0=bRPESi1WSsAXluPXOU1XOjmXSJ/XlR/JS=1WOweJxu/XOGDEbv1Wx5YExWe=bJA=bvb=lseElu6J0MeEO=bJxGxXOwAEtWDJbjYESG6WYJ/Ebjb=tsDXtW/JlimJbM0XSJ0XOWDEOvbWSW/Jx5vJxvvXSE1EbsAE0pUEb1/WYMxWtW0XlNm=bN1=biYJYuQEYs/=bj1Xt=bWSu6Jbw0WOuDW0NYJbwQEO=Y=Y=1WSs/EYM6=Yi1JxUmXOG6XtMDEbRAWtMeWSseJ0jY=YRx=biYExHUJlJeJ0jY=lNv=lJ/WSu/EtJPWbW6EbEU=SHmEbF6ESGP=Ow6XluQWxFq=SjmEb5YW0NbElRqE0NmWOJDJxue=Su6EbpUJxNmEbjvJlW6XOFDExN1JSpvWbw6EbuDESW0=tueEls/=ON1XSNvWSJA=tMD=tu6JSsqJxjvJYMD=tiYXOUvE0EvJ0uDEOiUWO=bW0RQWYpvWO51ExR0JbjbEtNmJS10JSjbJxJAWO=1=bWP=lJ0W0WQXlse=tW/WSFq=SJ/=Oi1JxMDEYs6W0s/XSuAE0ReWSwQWOw0Wxwx=t=1JSw0ESEv=YW/WY=vExFA=bF0XOJeWbWAEOH1El=vEYjbElWxElNmJx1q=lsAXONYElu0Wb16ESpYEYJxJ0W0EbuqWSGPJxFAE0s0=lWDJSNv=tWPJSW/XOFqJYM6XtsqJlR6WlJqESp1=SJPExMD=YjYJbUUXSM/Jb=bEYMAWYEmXlRxWO=b=YE1Jlp1=S5U=bsA=SHmJxivJSU1EbsQWlibEbw0=SFqJx5mJbR0WSFD=bE1Etu6EYW6EbimWtivXOWQESiUJbsqWbu/XOpUWtWqWxGP=tEUXS=bWxR/WOjbWtR/=bsDJ0Me=OiYWbwQExpvJYu/ElMPEtWqWSU1=tsA=OFQJbiYJxRxEtuQ=bJDWOsx=tR0JbWqWSGxXl=1=lu/WOjU=tsAXSWQJxpYJlJ0WtN1=O1xJSw/WO=UXS1eEbj1EbW6WORxWSFxEOu0Jl=bXliUJSsPEYM/EOWAJbGQXSU1=OpvEORQXSUmWOJ6WxsDWlpYWlu6XtW/EbpUE0M/XOjmElpUWbvv=Sse=bRxWbiv=YuqEls6=b=1=bJ/JY=YEO5YExRPWbweJxiUJYiY=SHb=ljvEb5mW0Eb=lMeJSMDWSGeWS=mWSwAEYu0EYMeEb=b=Ys/WSuxWb1/Eb5UXOU1JSjYExF0JSHUWxRxW0u0=bHmXSuqXOG6=SsDWOs/=OMqE0s0WYRAEbMxESFxExW6EO1Q=YJ6=SJPJxEbESsq=Sp1EYsPJYRxWOs6XtNm=YMQ=YWxWYu/=SEY=bu6ESpvESuQW0ivExvmWYJ0E0uDE0NvESHYEO=b=lEbXOJQJlEY=OWPWOWP=Y=UWtJ6JbpYEOuPWOUbWOGPXlM6XS51EOMQEbEYWOu0WSuDWtuxJbwAE0s/=tNvEx1DWxH1JYJ6E0=YElWeWOw0ESjmW0sqWOsxESG6ES16Exs0WYWPXOjYJlNYWb1qW0jbWlsPWSWDJSwP=OjvJbEmXOMPWlEUXOimXSF6WbFQEbpYXOs6EYpYXtMA=SN1XlMeJ0s6JYEUEbNm=OJAESv1WOuPWO1xWlN1JbGDWxEvJS5YWxMe=bEbEx=YESsqJxRQJSu0=OuxWlJ0WbGAEbpUJb=bWxR/ElJPWbsqEtp1EtRq=bGAWxEb=bFPXlJPXSpbJxGxWxJDJxRQXtRqJY=UW0RxXluDXOJDElJ0=lJ/XSNbXluDEYE1ElsQESF6W0sDEOMx=YsDEOGAEbs0Wxu0=ljYJb5YJlR0XONY=S5bEbJ/Jx1AEO1xJ0s/=OiUE0JD=Ys/JxuxJSs0=YEv=OWq=SibElRAJSMeXtj1JS1PJbMPXO1PWxEYWluQXSFQ=OpY=SseWlJ0JSGQESi1WxivJx1PE0uAEtMA=bUUExW6JSFDEOvv=SjmESHmWOu/JSFx=SWQ=SFPXtWQWS=vEbWxWbWQ=ts/=SvmXlu6WSN1EYjU=YReJ0Wq=OMDW0W0EYjUWbF6WY=Y=tWD=bs/=YReWO5bWYiYWYjUEOw6J0M/JbiUJSRAWxHmEx1e=lReWSRxXlWA=b10WO1eEbvU=tu/WOGP=bF6Jb5UW0EvWb=UEbuxEORPExjU=Y=1=bUb=OwPWYEUJx=Y=tReWxUvXOM6=OvYJbpb=YpmJxNUXSGQ=OWAW0sPWtimXO1eES=YJbEUJ0RA=Op1WORQEtJA=S1xWSvUWSM0=ORDJxvUWlM6WYW0WxJxXSsqWOJD=tjYWtJeWxRPEYWQ=bRqXlJ/WYRxJxGD=tMx=S1x=lNUXtiUExFeWbR6XOJDJlM6JSWxJ0seXlM6WSNmWb5vE0M0XS1qJx=mJ0JDJb=mXlEm=SRqJlim=OG6E0imXS=YJYW0=SWxExEU=S5UEORqEYsQEb=bExFP=OG6JxR6EbFAWOwDJbMPWOuxJxReXtJAJYsAWSNUWSNbJ0MeWOw0=YRqE0sQJxFA=SGPEbjv=tW/E0imXORxJxMqXtibEtJ0Jb5Y=SjmWbu/XlMAWYMQEtE1=ljYEYs6EY=mExsDEx1AEY=m=SHYXO5vJ0s0JbsA=bRxXSjYXlNmW0uqJSNYEbvY=SFQ=YR/JlMQ=bJ/=O1AESuxES5vJYiUWYM/WS=bXSUbJ0Nv=b5vEls6Wl=YESGD=SRAEtMx=SwQEYMAWbJ6=OpvJlu/XtJ6ExM6JlWxJxNvWSuPWbsAWYuPJxJ6WxMQElpUWx5YEbFQWOWQWxJ0EOJDWY=m=ONmWSiUJ0se=SjmWxpYESuAEOuqXtWDW0uDEOEbWtW/=l=UXORPES16WSM/WYR0WOj1WbwP=Y=bJbN1WSJ6EluQJ0R/EtE1ESWqEYs6Jbw0EbuPWxM0WSGq=timWOpvExw0EtuQWtu/=OJ/ElEmW0Rx=YjUWOJe=luq=bpYJb=vWtsDJ0Mx=OF6JSNUESJAWxivEOpb=Su/=SGAEbUbXO=1JbwxJS5mW0WPWYReWbjmXOu/JbvYWtNvElsP=b=bWlu/W0RP=S1/WlM0=bUvEbNYESimEY=mXtMq=S1q=tWxJxGeJYs/W0WxJlM/XSMeXOiYWtRe=OJxW0jvEOR0WbEUWO1PEbsPJlWAESM6=YM6J0WxWYMD=tM/E0MP=ORDWbMq=OFAES=Y=YjmWORAJxv1Wx1P=b1Q=lE1WSJAEYMQJbsQWOsAJbuq=lJxWOEYEbMP=SMx=OsxExjbExseEbw/JSueJYEY=tsPESWq=lEvJb=1EOF/EbimWtMxE0WQXSMPXtW0Eb1xWljbWbMAW0WDWSWxWYuxJxvmJbjUESjmJlJ/Jlj1=bsA=b5b=lW6=bFeWOim=lEvWSE1EbF/J0imJlRDEbMAJbRD=Sw6JlEvJ0WxEOGqJbN1Wx1x=bwPXSvb=tMe=SMA=bwP=OsQWOwq=SJ6=bseWtN1EYJ6JbseXtW6WlueXOseE0j1WYWq=lJeEYp1XtuPJSF/JS=m=tsQEtNYESN1EOJ6Wbu0WxEUESMeW0JAXlRqXS=vWx1AESw6=tNmJbRxWOuQWSse=OJxEYuQW0sPEOJ/ESHv=SNbElpvExpYWx=bWtuAXtMPWxRqEluqJxjUJxuQJxMPE0NvESuxESNbXtjUJYNY=O1qJYib=Y=bES5vEYjUJ0J0ESimJS1AJbwQESFPWximEO=Y=lsq=SwxWxseEl=bXtjb=SivXOFxXtjb=luxW0uAJbJDE0EmXORPEYWeEbsP=YivJ0uDXlEYE0uAWSWAElMQ=tivWSpUWlWQEbGAESwD=OuPWYJPES1eWxWeWOiv=bGqE0iUJ0MeWxvmJbNYEtN1WxN1J0uAXtN1=Ow/WO5Y=OMAEb=1WxWQWbiYXSFDWYJAXORPWlEU=O1eXSpm=SFPJYJqJbG6Xts6=OpY=bMQWSweJb=mJSpmXlW6XSp1WbM0JbW0Jluq=lsPWOG/JSJ6Wb10ExvUJlNv=lpYEYp1EtjUWSEvWSGPES5YWOweE0pYWbR/ESWeJx=mEOvvJbsqWO16JYRAJxs6XORP=tuxJxW6E0sxWbM6=bHvEtMDESGqJ0pUEbF6=OWQ=Os/ElsxWb5bW0R6Et=m=tWxEYEYJlpbWO=bJ0J6ExHb=bpb=lsA=lsPEtE1JbsDXOH1Wtse=OFPJSFDJl=bEb=bJbMe=lsAXlJDJlE1WYJ/ExMqElEv=S=mXS1/WSEv=bJq=SUUXOWqWtReJSseJbEUWbFqXSJQ=Oi1=bEUJbEUJxvvW0JxESUvWSGAWlNvWtEv=YivESp1XliYEtMAEOWeXlW6Ebs6EORAExRA=lJPEbR0E0WPWlimESGPEbGAXlRq=lJPXOvYJb1eEO1DWSWQ=SjYWxvvEYMeESW0=O1qJbwDExEUWORDXSGeW0sqWx5mESMDElM6W0i1Jb10=SJAJbFP=SueEtM/WlMq=lWqWxW0Wb1qEtJqW0u6WYRPExjYWY=1=OjUEOs/=bs/EbWxES=vWt=YJlWeXS=YWxEUWlWeJl=vXO1AWYE1JYN1JSWQEOuA=luQ=bUY=YJq=bsxXtEvWlseJlW0ExMAEbWxESR0Xt=vJ0J/XSW/ElR/EOJAJ0RQWtiU=OFxWYsqEbjv=Sv1WxM6WtW6ExReElW6WbvvWbNvESR6JlMPEOF0XSEUXOpUWS=vEbsPXSux=tuQ=bR/JbF/W0J6E0M6JSGeESpvEOjvWtNvEb1PEb5mWOuQWtJ/WxHm=OJPEYsP=OEYWSuPWORAJYibJSWeEbN1=SvmXlpb=bHvEOueE0pbXSjb=OR/XOWAWYWQXtWAWYjvXtuxEbHYJl=1=OGqESjYExWAJ0W/Eb1xE0R6W0ReWbGAWSW/E0WQ=liU=YMeWSvbWOw/J0J/EOM0JxUmExNYWYEbWbu0EOGAXOFP=Y=YXS1q=bG0=bMDWYjmJSMeWt=Y=SGxEbUY=SMQWOJx=SJPWtEvJbJDJS=vESjYExvbEtNUWSwxXORqJxpU=lRxWSsAJSFqEb1A=bWAEOJx=OpvXOFQJxNYWSwqJSwDXOvYEbNbExs/ES=1Jlu0XSi1XOJQ=SweXlEvE0=v=YEv=SR/=lue=YJDExRPWxiUJxW0JSMAEbpm=OpUWOGDJSJ0WlMeXlEYJS1PWSRx=lsx=bFPESJ0XtM0XS1DJbwQESRxEOWxXtjbXlRP=bwqElNmWxMx=lsxWx1AJlR6Jb1qExi1WbN1ExFe=SFPXS=YWbN1WtjUWxF6EOs6=O1PWtj1WtW0WSu0JYsx=YJ0EOsAXlsDXSjUJSG0=bNYXS5UESJQWbWD=b5mWxRqWxW/WSsQJYu6XtEb=OFPXtNbJYimWYJDEls/WbF6XlJQJSWqW0seXtRxEb5UWSJeJbEvWbsxJYpUEbM6WxW6WtJD=tsqWbuDXtWAEYMxXSsqEbw/XSFQ=SFD=ONbJxEvWYp1Jb=UE0E1WxjYEtsq=bJD=O=mElMx=tJ6ExEm=SJ/JYj1WSMeWxWDEbsQXOWD=YsqE0ueElNm=bEUWbs0WtpbXlJDWSvU=SHvXtibWtNYJx=U=S1/WYRDWYj1XSRe=tJxJYRPXOF/WSF0EO=b=luQEx1AWxwPJS5b=b=v=t=vJ0p1=SF0J0WQWbW0=YuDWtM6WbiYXOs0EtpbExJ6XOueXlu0Xts/=O5YJlNm=SvYEbM6=Ys6XlibElM0XO5vEONmXlJqJbpUEOJ6XSFqWSjmXOsDJYWeEtiU=O1PWSFPWtimJYM/WOWA=Ovv=tJ/J0sQXS1/EtsxJbF/ElRxJbFDWbs0WxvYWt=vWxjUWSU1=bu0JxH1Jb=bExMxJSEUJYRQESu0XOR/EOvUEl=mESs/EOMQ=SpmXSGPWlJ/=tW/=O5U=OE1JxM6=S=U=bE1Wbw0EOWqWOF0EbpUE0sQEbs0WYs0XSj1ESjvEb5bEOFD=bJx=lM6XSNvWlJD=lWxJlsQEbMxESWe=O=UEbJQESWqJxR/WlJ0=O=UESR/WSF6JYJ/JluA=OG0EbjUJSW/WtMPJbF6JSJ/JSRxXlRP=tJx=OJ/WbsqJSE1WxFQXSMeEtjvJ0i1JYEvXOGPXSjmEOibXtuDEOwPXtR6JxFPEOGDWSGQJlN1=b1eE0JQEOseWSjvXOw/ElMPWbM/XOJQWOv1EbWqWbRxWxF0WbUYWORAWxJAWxpU=bwDJbGP=Sp1WSG6=ls/XOiUE0j1EYjvEbuxXO1AWOwqJbwP=YJqEtRQXO51JxuqESj1=OEvWYuqESMxXSseWlEbE0ReXSMAJxMDEOjU=lR0XSHYWOWPEbF/W0JA=Oiv=OGD=OMAElMA=YEmJbJDJb1q=t=m=bvbXOF6XOpbXtsqWxGPESR0EbjvWxN1XSW/WOsDJx1qJSUU=tEmWOGxXSsDESWDJxs0JSpmWxMQXlsqEORDWYW/XO=UWx1AWbUUJSuPWYjUExWDXOFAWSseWYE1E0NbJYuqWtR6=bs0=tMqJYMxEb5mEbpbWlNvWxGqWti1WYpmJluAJYWA=b=Y=tNv=YsD=bs0WlJqJ0WQ=S=1EYNbXlu6XOUUXSwAWxWx=OGPXOMQXSpYJSuD=bNYXtM0XSEb=S5v=OiUElRAJx5U=ljvEbimXlM0=YW6JSHYWSpm=ON1=Sw6XOHvExpU=bvm=ljvE0NbXSN1XOFqXtMQES16WtjUWYR0JxGQWxjmXSUUXtNmXSR/=bMQElW/XSHUEtMeWtuPWlN1Wb10WlRPWxjvJSRPElpmEO5b=bpvWYR/XtNmElp1EOH1ExwDEOEU=Y=mW0RA=bpUXO16JSu/JlpbWxJ0XtNbWbHY=bjUW0W/XluqW0WeEbFqEbj1JxUbExFQW0=b=tWPXSRPWlR0Wb1/Exw/=O=vWbiYWbFeJ0pbJxwxJYs0XlJPJxJeESjmWtRQEbwAEOwqWxseEOiU=bFqJSs6Elp1=YuAElRPJSvYXSJ0WlE1=SHmJxJ6WOwQWlMPWbsQExsPEY=UWYp1WOs/JxUvXSsxEx1xJbNUXSwxJbpbWbuAJluAElp1WO=1WxJAJYsQElsqJljvJxj1WtMDEYu0WSW/WtWeXO5vXluPWxWe=tMeWxuQ=SUv=YuDXtRQWYjYXlRQWls0WSEUEtiYE0M6XlJ6=SJe=OFqWOM/=tsAEtJqEOpUXlsPEYuPEO=YJb1AXSJ6ESUU=OuqEtJ/=bMxXSjUESF/EtsQ=bpvJbFPW0JxWlNmWOUYJxJAWtEbW0NmEYj1Jx1PJ0pvWxWQWxUbXOJxWxRA=SR0JxsDXOE1ExuP=liUEYuDJYM0ESv1XSJ6=bsPXOsQEt=Y=OJeJYE1WYM/WYjUEbRxWxv1WOG6EOs0WS1PEOGA=bR6EOw6EbRQE0NvWtp1=lMDXOuAEb1eElMDWxj1WxW0XOjY=bGeJbUmEOHUWSRDESw0XOWQWbF0W0ueJ0pYJYRQ=SFPJlRQ=lpb=YWDXOi1XSsAJSWQW0R0WOjbJSNbEYJ6=OGxWOEUXSRQWS1Q=tpUWlseE0u6=bUUWlsPWtJxESHvXtsAJxRAXSvvJYRQXSF0WYsxEOpbESMqJS=YJbpb=l=UXSNv=b=1XSW6=SGQ=lseXOG6=OseXlNbJSHYWtp1EbRQJx1AEbJqESivWlu0JximEb=UXOEv=tMDESu/Wtu6EbMq=tu/WYsqW0MDXtJAXSu6=tR0XOEvESG6=SW6JYNv=lu/=OwQJbMqWb1QEOU1=lEYEbsAWSRxJlN1EYW6WlJxWtRxEYW/WOJPJSGq=OJxJb1/W0=bEOuq=YpUEljY=buDE0RD=tWqJYEbEtpYXlNUEOR0JSpYWxRq=ON1XSj1XOWeWxN1=bWP=YJ6JYJeJSF/WSRPEOH1EYMxEYWqXtsDEYuxXlNUXSJ/J0EvWbMDWbU1WtWqW0s/W0seJSMDXlJPWS1QJSRAEOMAXSGxEYuDWOuqXOM6WSFxWSNYES=1JxFxWxFPWYM6Wbu/EYpmJSUYXlsqEb1DEOGe=OvUWYWqWxRAJSRA=O5m=SvbXtEbEbG/Jb1AEOMeJbuDWljYElWxEtiYWSFeXSRPJliUJ0JAXO=YWxW/WOvYXSJxEbsDWSM0=tibW0u0JYsAXli1ElimESJ0JbwQJS=bXSNbJlsqEbuDEOM0=YuA=tsqWYuAElRqWlR6WluD=bsPJl=Y=SR6Jx1D=ts/ElR6=bHvWOwq=OEUEbHUEOivE0pUJ0W6XONbXO1eWb5UEbsqEORDXO5bJYi1WOEU=SM0=bJ/JbsAWtsPXt=1JluDWtpUJYWeJ0WD=bMQWOM6W0s6JYMAE0sxWxHUWbMxExuqE0imEb5U=tEUXSwDJSvv=YJQJbFPW0=1JlRQW0EbXO1/WYuQ=OsD=lWDWbsxEx5b=YMPWbF/XSFeJbHU=bG/WSJ0WlW0ExGDExWAEOGQ=tMxWxFeJx5mXSRQ=Su/EbweJSR/ElRAJ0Wq=YRx=bF/Jbw0JYi1Jx=YElJeXtJeWYEbWxWe=ts0EtN1=bWqWSG6XSH1Wbib=SsP=lW0EtM/JSRqJb1DWxu0WluxWSuA=YueEOM0XtN1WxG/XlMP=ts0JxpbJSWAWtueXS1qEbU1=SW/=tpvJ0JQEYReElNmJl=YW0seJYEvEOpYE0R6WSwe=tMqJSu6=b5YEbjY=ONbWxFAJlsxES5bXS1e=bR/JSMxW0uPJ0sqES16W0M0=SvUXS=Y=tu/ESwxE0sDEOJ/EOUmWxNY=SiY=YJeE0WqWbiYWxMeE0RqExMeWbMDXlR6WtJxJxNbElpb=lEY=bimXtuqEbvm=tuAJ0seWSRxWSMDEYpvXlNmXtWx=SNv=tuQEOJAWbNvWYu/=bMx=luP=OGxExFqJxF0XOs/WtuP=bF/Jxu6ExvUXSWqWSJ/XSwDWxueWbEmWb1xEtJ6WlJPEYJAESW0XOGDEOuAJ0iYWOJD=tRD=bvY=bsqElNYWYs/=tuqExGqE0WQEtjYWtJqJS1DWxsq=t=1EOHvWSu/EYsQJYu/W0im=OFDExuD=SF6WlWxXSMPWYsDJxUYEO5YWbweXli1W0RDJYMQ=tiU=bW6=lMQWYJ0=S=1WlN1Jxu6=lJ0=OWxESjUJlN1=luxEtpbWtivJYW0W0jYEt=UW0jvXlMQ=SuAExvvJSGe=bjbWSJ0=lM/EbiY=SJqJSNb=bw0=bw/WxR0EtRDWb1PWSGeESuQ=YJ6XtReWxv1EOjU=bWDElRxEbs/WbwAWlEmW0MeEluDEON1XlJ6E0MAElRAJlMeEb1/WSuAWb1eJYJxWSs/WOWqXONvJbF0XOR/EOsQEbNU=tjmEbGQExvvWO=bEOvbEYWxEbNv=SWxEOjUWxuPJSuPWbJ/XtW/JSjbWSMqWOUvEOGq=bibJxjYJSEv=SH1EYuP=tN1Jxu/ExE1JxMeWOjbJS1QJ0=UEtWDWSMeWSpbEOs/=bGPElp1XljU=YJeWbEYJ0WDJbpmJxG/EtEmWb=U=bUU=tMPElJDJxw0EYRqJbRDJSux=ORe=lW/=tjbElEvWO1xWYJQ=YWx=SUbEtJ6WbsAEtWqEYs/E0W/WljY=YWPWtEbXOJe=OMx=bR/W0R/XOJPJxJAExRQXtN1XOWAWYM/ExMAJxMDWls6XlNvWb1QJbj1WlReEtRA=tMAXlpUWbM6XSWQEYNmEts0JYjbEYs0Jxs6WYWqJxsDElRQWSsq=SG/E0NUJ0RPWxsQ=lJ/WtjUJYMPExH1Wti1=tW6W0JAXOG0WSHbESG6JbvmJlW/XOjbXSsQEtpYESpv=SRP=Ow0=SMxEOwqJxMDWtMPXtM6WSUvEO5U=luQEx5YWxivWtWxJS=vW0WP=Op1WtWDJx1eEOUUWbw/WlWQJl=vJ0EUWOFqExuqWOibWxHv=Sp1ESwPWOuqWximXOR6WSvUJx5mWOsDEOWQWluPWSvUWO1DJSWeEYpvEOG0EO=1XluAJSUvJbueWYMQJ0s6ElNUXO1eWxuqWSu0Jx10JbMPExsqExjYJSJ/WOpbWtNbJSiY=Opm=O10WOpUXlMqWSN1XOFPElpmEOM/ESiv=tMq=tMAJx5bWtJPXOFeESHYWSRPWluD=OG6XSRQESim=Ss6=lpmJbwAWxGDEbRxEYNmES1QEOueElu/=SjmWlMqEbNvElEUXSu0=SHbExNbE0JDWxRPWxRQ=tW6=b16EOW6EOs0=ONU=bpv=YW6=lp1Eb5UWximWSUY=bMeWlpbWS1AJluxXONUWOimExReWYM6=lMAE0pmXlR6WSsPWbR/Jxj1J0WeEb1qJSWP=ORqJbimEbjYJxwqJbsDWYiUE0uAWx=vWSFQEYMAE0EY=YM/=bEmXSvmJbwqWY=m=bG/JxseElJD=Ss0WSHY=bUYEbJDWbsP=lNUXSsq=SR6J0WAXtN1WbsxWbR6EbEYEYNmWx1qEbpmWxWeJ0RqEO1PJYseXO5U=YMPWlNYXtRAEtuDXSRQJxv1XtRxEtim=tj1=Sp1ElWQ=tMDWlRxEtjvWOHYW0u6JS1/WSWx=tpbJ0uxW0u0EbWqEO=bEYN1XtM6EbGeEb1xEOwPEYs/WbsD=lWAEYE1=YJeJljvWb5bXSWD=OF/Wx5UXORxExuqJx1QJbw0Wts/JxFD=SibXSRQWOW/WbiY=lpmXtMeEbGqWSUbExEbEO=mXlR/=YWQJ0RDEt=1EbWQWSGPWS51WYJDJx16XSJqEbNvWxNmWlj1Elib=lMqWtiYEbWAEYRDWxvv=SHv=S51=O1/WYuQJSu0E0MeJSseWtM/=ONU=OJq=tNmWxHbJS1PWxpvWb=1EbJQWOwxJYu6JYMD=lMPXSw0EbNY=OjUEYM0XSNUEOGeEY=UEbMqXtEbEOj1=tWqJ0jbJbF6=Oi1WYu0XO10=Oue=Yi1JSN1Jx=1XOFA=lW6WxNYWljmEYu/W0M0XtNvXSN1=SHY=tjvWb5bES=bWbF/Jl=bJxMQElNUWO=bWYpbElJQXS=mJbM6WSWA=tJQ=Ovv=O5bXOs6W0sD=OGxJYpbESH1EOHUJYRxExuq=Os6WYReExjYJlEvJYJ/Xtu6WtuxEYsA=OwPExGeJSG6XORDXSjbElEm=O5UJS1e=Ys0JbNUJlJ6Wx5YEO=UEbi1WOpm=YN1ESMeElRqXOMeEtWPXSFxESvUEYWDEtNvJb=vWxFAWx51WxuQXSJPWbJPWO1qJSw0WOpmXlsQXtjm=SFPEYs6Ebw6WSW/JlRD=OWAXlM/ES=b=SHmW0W/WSsAESG6XSvmJSpbJxGeES1AJls6Jxs0=YsqWbW/EORPJbvvWts0EtR/J0i1Jlu0=SFDWOGPWlj1ESFD=tM6WYuqW0i1=lWeXtsxEOuAJYJqJxuq=OpUXSMq=S=U=tRPES1/EtseJxpvJYMqWOUUEtjbWbUbElimExpUWOuP=b1eWOv1JYJD=YJQESEY=SHmEbJQEOJeWYEYEtue=OjUE0pmJYMAWtRQWbHbEtjUEbGe=YsAXtEbExM6WYM0JSMQ=SuQ=bUUE0u6=Ss0=bsDXSweElJqWbWAWYEm=bUmWxFDWlseJ0W0EOivEYJe=YR0JbsA=buAEYReXOHUXtjvW0sx=S1x=tNb=tMPWxFxJb=mEYu0Jls6ESH1XOG0Ex=bWxEvJYiUJbWPJlibWS5vESEbESsD=YWQ=timJlR0=YMxJYWqEb=YXtM6XlNY=lRQJlRQXOWxEbivExEbJx=mESUYJxpmE0RDJSEY=SvmESw6EbweE0uqEOsPWlMD=OUmXOuAJlR/EbimWSj1JbuQ=tM/EOpUEbR0=YEY=SMxEtimXSMPWORDXSHUEOw6EbNvJYWxE0iYEbW6ExsPWOR6JxWQ=OUYWbWqEYRxWxJ/W0W/Wtib=OuxXOj1J0pbElR0EYJ0EtJ0=bGAEt=YJYuxJbwqJYWPWlEvWYi1WYReEtN1WYEv=S1QWx5m=Op1JxEYXOuQWxuxE0EbJxseJbRPXtNmXOGxWOuDEY=bEO1QJbW0JSJ/=bG6JxuDEYu/EOMxJYp1Xl=Y=b1QJbwq=SRxW0NvExMDE0EmWOMxWtMA=OJqEOM0WlNmWx1/Jx1PXOHYJxs/=SJqJbwD=tuDJ0NvWxMx=bweESRPXSv1XtEYExW0WOG0WSReWlEbXOs6=lW/EOs/=OuAEYWAXOj1EbjbXSJPWbJ/WbwDWxJxEOiUWbMQXtNbXOGxJlJeElRqEORxXlRPEOMAEY=1=SRAXOWAJYiYWYR/WSJAWYjb=SFPJxuAXOuxWYEUWxj1J0M6=SMqJxEvXORqJ0EvEOGPXlWA=bUv=bsQEYu0XOjUEYM6E0WxWxWDWYsq=SwQXlW6Eli1Wb5bJbvvESEYWl=1E0M6JbUUWxE1WbJPWSMQExJqXtJP=bsPEtW0J0N1Jbu6=Ou6=tJAWONY=lWQWxwPJ0JAExEvXOpmEYJP=SWqEYjvJxMDWxUbWtJQJxueExWeEYRDWtJ0WbUbEljYExW6WYMeEOWQ=S5vElEUEbu6EluDESwQJ0jmESsxXtW6XS5vXOHvWx1/=tJ6=luAJluPESRqJbw0JSJAJYuD=YpY=SJPWYW6Xl=YWtMxWbMxJxuQElMx=bwAJlR6E0WqJbGPWYp1Wti1Wbw6XlimXOvm=tueExjYJ0MAEtRQJ0uq=lEbXOEv=bR0EOFxXO5vE0=bWSwPWtse=lueEYRDWOGDWx5vJ0jmExjvJYWDJ0MeEYWA=tEUXONvXlpvEOueWxHYJ0M/J0M0Etjb=SWQWOJ/WxNUW0N1=Sse=YJ6EtJqWtMqExJ/Xtj1=lNvWxM0=SGP=O=UWYW6=bJQWbNYXSWqJSs6=lu0=OpYJSi1W0pYXOpUW0N1EOMQE0u/E0W/JYsAEtuQWbJ6=OJeWSW6WxJxWS=YEbw6ExuqEbWPWtMxJSJe=O1DWSR6WxpbWbEYJSMQWxFQWOs6JYEmWxGxJxFeXS1e=OG6XS=vJSJe=bjvXS51J0sxJ0sQWSsQ=OMQWlEvWOW0JxF/XSuD=SJQESsxWbwxEbHmJxsQEOi1XOMQWS1qE0uxEtu/JbFPJYu0=YuDEbWPJl=v=bW0WYRDWYJxJ0MA=SpU=luqJbHvEtuqEOR6ESuPW0=m=lWAESpYElJqJxRPEOF6WYNmWxRQXOGeXSFPWbsPE0RQ=bvvWS5UXSFQJlivJlMqXlW0=SW0EtJ/XONvESUY=lu0Jb1e=tMD=b=UWliUEtNUWOi1EbjbJS1xJbRPEbs6=bJxWtjvJSJA=SsQWOH1JYseWtEmEbuQ=SseWxW0ExJQEbEUW0s0=OGDEx5U=lEbWxMDJYpb=lWxWxWA=tNUEtNbJ0u0JxjU=bRPE0=vExR6WlMq=YWDESs0ESMAXOWqEOJ6XtM0Wt=1WYs6JxGAWbvmXlpU=SJeWxNmESUUJ0=Y=SF0JbHYXSEmW0pY=OWPJS1/WOuAEOWAJSWQWO1/Jxpv=bReExiYXtRDWbw0EtWPXOU1JxJ0E0MQWlM/JlJ6EOwq=YjvWSWAJbWPEbibExuDJ0u0WOWeEbUbXSUvWSuAXOFQWbuPElWDJxp1XOsxElMeWOWPXlimJSw/WOib=YRq=OU1EtpvJbFeWOsD=SJq=lWDW0JQWSGq=Oj1=lJxWSsQEbwA=tW/WS5bEbUvJYjY=YWxXSGqJxsA=bivWxsQJSj1=Ss6WlMqEbJP=tNvJxJq=lJ6WO5v=tW0EOw/WY=UWxF/WY=1WxwQWxGq=Si1WONUWlMQ=bJxE0W6Wb1PEx1/JYJAWbjbJxHUXlM6E0Ev=bHbWb=Y=ls0EYJDEONvEb16WbJxEx=UXtpbJxMPWbFPJbpYWYsQEljbE0u6=SivEbimE0RQ=S1QJxFQWOJ6=SF/JYuxWxu/ExMqEYMAW0JAJx1PXS5YJb10=bvvEOvbJ0M0JSsqEO=UEx5mW0uP=OM0WOR/=tNYXtjYJb=YJlRQElsQ=bjbWbuAEOF6W0JeWtjv=YiUESGQWbNb=tJ0WbUUJbsxEOGqJlMAEbvYWYsqWbJ/WxsxWt=vJbJeEOsQWbR0Jbu0XOM0EORQExuqXOJ6XOs6WOMx=lJ6ESsQExWPXlRA=SJ6Ebw6WOiUJlEUEYMeXSGqEbFxEbUb=SjYExJDElNUJbJeEbMqJxRAJ0pYEb5UXOR/XSw6WSFqEbEUEli1=tJ0EO=m=bEvWYNYJY=mJxsPWS=mWxF6=tNYW0M0XSjvWORQExuxEtJ/=tMDWO=vJbW0EOMxJS=UW0E1WtEYXS1DJSUvWOWxExsDElRxXtMxExMe=tE1=ORAXtsPESRPWlJ/W0JPXljUEOu6=O5YJSN1JxwPWSEYExFDWx51JYjmXlNbWYWqEOGQXtuQWlim=OueWOsAW0jm=SwQES=bXtE1WbwPJxjbJSMQ=YJP=YRxWOHYExwDJlRe=lWxWbJq=ljb=tsPEb=UEYJDWOGxESHvEO1QJbsPEO5mWSNvJ0EUXOJqXtMx=O=UEbReJSMQESRDE0Ev=YMPXtE1JYR0EOw0XlM6XOvUJx=bEOwqEt=UWbUYJYW/Jxs0=bEUWtse=bFeWxuxE0imJYNUXOGPEOJ/Wbjm=bivEON1XORxWbp1Xtj1XlRqEbJ0=tiUXtMx=SGxW0imE0RPWx1qXSJx=tWAEOivEY=bWSsxExFDXljUWbJe=SvY=YMDEOFqJbF/=OHvW0sQWtRQXOHm=ls/ElM/Jb=b=tuP=Owx=YEvXtMPExHmWSR6Elu/ESFx=bJ0ESsA=OMDWl=1WxivXtWAWOGeJxEbEbM/WbF0EbMDWt=bWxF0JbGDJ0jbWYM0=OJqWYR/WOF0Xtim=bW6JS1DWS=b=SuxJxJAJSW6JSG0WYJe=ljUWYEvJxuxJSRQXSNmWbu0W0pUES=UWO5vWbv1=tWDJ0NmJSF/EtjUXOJ/WbWPEYRAWOGeXSpvJSsqWYsPEbjmEbsq=tEUWOFQJSpUExjmJbuDW0jvJSvY=tMeWOWQ=OHUXSJAW0jYEOsAWtsxXS1eJ0j1JxNYJSw6XOUbJbGQXtjvExMDXS1DJ0uD=b1AEb16Xti1WYRPXlE1EbF/WO5mESsxXlNbExJ0EluQEb1AJSFQWxWeEbJDJb=vExuDExE1WbJQ=OMQESpb=SHmEO=mWtJqWtRDWbuQE0=U=OuDEYWe=YMeE0=Y=SFe=bs6WtM6WlNvEtRQJSvYExuDEx5vWxjmExW6WOpmESw0=OEmJlW/ESuxJSiYESFeW0JDW0s6=ONbWYu/JxN1XtueJbJeJYNY=b51Wbj1WOReEbpUEtpv=bG6WbU1JxUbEOwQJSuqWS1eXtW/ESMeEOsAWb1Q=tpmE0ReEtu0El=bJb16XtR6ESHbJ0jb=SUbJlJAWxNbJlM6JSGxXOWQXOpUElR6Ebjb=O10WbHY=b5vEb1xJSFqWYjU=Y=vXtu/WSWAW0NUEbE1JlpvJSR6JxJD=OFqXljvWOimWYpYWYR6=bEmWlW/Jb1QWOjv=YRDJbuP=tueWbGD=YJAWtsPExMeWlJAWtjmEYimXSiY=tJA=O10=SG/WOjv=lNU=OEUJbJQ=OsxXSv1WYJQJYseXSs6JxU1ESGxXSF/ESweElRx=bFeXSwPJxjm=bjvWO1AESW0Xtj1JSJxJSJQE0pUJ0RQWOU1WxuqExWxWbGD=luAWYiU=SsxW0J6Wls/EtRA=SM/=tuAJbF/EbEv=SvUEluqWt=vXOWAWYjYXOs0=YJ6WbRPJSFA=SU1WO=v=ljUXtjYEO5mJ0WPWOw/ESp1=lJ6J0EUESiYWSseExvbWYM6WORQJYu/ESjY=lEvElNmXl=mEtu6JYR/XtR6WlimJbu/EOp1J0pmJb16EYR6=Y=bXSReJbJDESWAJxpvES1QJ0J6=tue=YEbWbpvXSNmWlMeESM6ExEmJx=YWxWeJlJxXOsxW0s/E0W6=Yj1J0MDEO1eEbH1XSRq=SR/XSimWbjvESRe=SUbXtRP=Ou6Jxpm=lJDXOEbJx5vJYW/=SweWOEmJbvbWbueExs/=l=bEOWxWOUYWSWxJSWq=tJQJYM6=ORDXSibXSMe=ls0WSiv=SjUEbj1=O10JYRP=bwx=SU1=YWPElJQ=tsPJxG/EbHYEOW6EOFAWxsA=OJAXOR6WOFA=YNmWxF0=YWD=SEUElEY=YWAE0jmExjv=bNYE0NmEluAJximWtJx=OMqW0WDJSRDWYsQ=SFDWl=UXOR0=ORA=limEbH1EtJ6JYJ0J0Wq=lEvEOuqJYiYES=bJSFqXOGQ=SM0Wlu/E0jYXSi1WS5bJ0s0WOEUExH1Jbwe=bMPWSi1EbGAXO5mJbF0ESHU=SjUES=m=tJQXOGqXtE1WOMQ=tsxESpmWSEYJlNbWYJDEOMQXSivW0jb=t=1XSsPESGAJls0Wb=UESMPJSvUWxRDWS5v=ONYJ0M0XSpUWYs6WYN1WSH1=OFeExN1WbueXSWDEOWDJSs/XOM0WOWDXSFx=bE1WOF6JSWA=OJxES=1WSM/ExF/JxvmWSsxJSw/Ex5bWlsAXO5Y=tjUJluqWO=Y=ljv=SJAEtMqWlNvJSF0ESsPE0WeWx=bJlN1JS10EtsQWOGxWSuxExGxJbuDXtRAW0iYExv1JYuAW0pUWlu/JbJQWbG/=YimJxG/XSMPXtReXS1eJbpbW0jUWtiYWSMQXOEmW0NUWtNY=S51JlueWYRq=SNb=Yi1EbRDXSs/=Yjb=li1EbJ6WtNvWSGeWOUYW0uPJb=1EbMeW0MAJxsDJSHUEOHUWxNm=SWxE0WAJbjvEx5mESvY=bvmEts0Ex=UXOs6ExR0EOUYExMqEOGqWtueWYEUWSsQElibWxWqWlRxJljbExNb=tNUXSMD=YWAWSWq=OjmXSU1W0u/El=1=O1AXSR6E0JeXt=UEOJAW0EbEtJ6JxW0=OWQE0=vXt=b=OFDXOw/=YjYXOFQEYivEOsQXtuPWSwA=YuA=lsxExM0ExFeJxjbXOwAESuA=YRxXSF0ESweEYueWO1x=OM/WtMqW0i1EbMA=Spm=OuPXljb=tEYEljUExvbEbFAJlNUWOWQ=S1qEOHbXljU=tJ/E0EUXSWDWYsAWbpYWSJqXSv1WONmEORDEb5vEOsD=tJx=SvYExs/EbsxXOwqWYJAWOs/EtReEx1q=YuAElWDWtNbJ0NmEx1qWS5v=t=mJlJQXlNbElJDESJ/EbpbEx=mJYiYJYsQWSUbWbpvWxibEbsPJSR0WYuP=tpb=SsAWbw0=bRqJSMD=bGxWSJ/JxpvEtM0=OHUJYMAWtsqEtRqElRP=lpbWSpmEb5YW0WPJxFxEbs/EbwxJlMA=S10JSUvWtsDWxJ/=Ss0EYM0=bM0ExEUEtu/JxJqWl=vWxsxJSuqWSW0J0uAESJeXlJq=tJQ=bMqWOEY=SEb=bpbWbUvEbsAWbu0WtivEYjmJSi1WSMPJlWeWt=UWtsq=b5YXtJ6=lu6EtM6EbjY=SpvWlW6WSUvWbpYEtseEO=m=SJ/JYNbJluqXSp1=bFxESMD=Sp1=SW0=bJDJYMQEljUWSEmJ0R/XtJ6EYEYESseElsQW0MPEOGeWbGQWxWDJSG6W0Rx=OvYWxs0W0=Y=OJ/=tMDXtsPWxj1W0ueWlR0=lEYJS5UJSMq=SG/WtsqJSJ6JSUY=lM6WSGx=SWx=tpUWSWAEYJD=YR0=O1qJbwDExRqESsPJbM6WxUvWxJxE0M0EtW0WxiY=SF6WlWDJbGeExNYWYMPElpY=YMQEbpmJbj1E0pbWOG/ESG0WYJPXSWx=OuAJxUYJbi1=tJ/JSJxWbweElRqWxGQWtpb=ts0EbF0XSJ/=lMeW0MDEOFxEts0Wt=bJbRqEOwDESiYXSpbJxsPWbNvWOWDWONv=SGQWYs0WbR0E0MAJSFqXSpb=lJPE0jbWOWx=bWe=OU1ESsQXlse=bwqESMxWOWxExpYWSiUEtuqWxRQW0=bWOJ/=tiYWOMDWSMA=lW0J0iv=SM0EYJeWlWPExRAXOpmWYMqWbpvWSUvWb1e=SEvJSU1JYsDJbJQEOJxWO1/=OG0XSNm=YjbJSjYWxEbWxvmExv1=Ou0JxNYEYJx=ORDXtp1Et=UWxj1EYsD=b1xJxsP=Sw6ESiU=SW/XSWDWSGxWtp1E0Re=tRAXSRPEb5bJxFxWlJ0JliUJx5mEbsQXOivWtuQ=bj1XtpYEtR0JluQWOM0JlMAJYMxJYs6XtNm=OWAWtWQWYR6XSJeWSwxEOuPXtjUE0EUWbwPJxG0E0uQJb=YJxF6ElMDEbwQJxivEximEx1xESseWbMq=Sw6WSWx=OGDWOjvXOJ0=tuDWYWeExuqWxR/ExM0XSWQE0sxJSNUWbWx=YseWSibWSUUXlNbW0RQWSE1JbGQ=Ss0JxuQJbNUEx5UEliUElJqXtjYExNbJYsP=YsqXO5YWbGQEOvbWxs6WbJeWbRP=ls0JxU1Wxvm=ORA=SjYJ0uA=ljvXOuDEbH1E0N1=Ss0ExsQXti1WYJxJlpbESsD=lp1WtW0JbFeJSMQJSvU=bvbWSM6WYjUEx5mWbwAJ0MQWYuQE0u/WxGQEOF6JY=vWxGAWtMxJ0imElsq=Os0JlNY=YMDEbGAJlueJbFxEOwq=OR0JYsq=lu0EO5vXO1QJSwDEY=UEtMAJxRxWlNmEOsxWb1QEOFx=luDJ0RPWSsxEOFq=YivEbRqWbMeESJQWbvmES51WYuQ=tpvWxWqWbsQJ0s/Wbw/Etj1JSWDEbEm=YM/JbMq=O5YJbNmXORDJSWDJYMeJSW/EbJPWSG0JSGDXtu6WYjU=lWAE0WqJSWqEbH1JlM0WxuPExw6WYWeJY=v=b1DWlsDES1/WlW/WOWxESMDWbWxEYR6ExwD=tRDWbFD=YJxEO1eXlEbEOU1JlpY=tM0ExGPJxF6=bE1EOM0WxJQJ0RDEOUmE0WPXOjmWlsqE0j1WO=YEOGxJxwQJbR6JximWO10XOsxWSWPEOuqXtWQ=YJqJxFqJSH1=bUYJYRDEOJ0Wb5m=ljb=ljb=tMDEbEvEbjU=OuxEls/ElRPEbseXlpbJSsPJbEb=SWQ=YMeJbu/WxRqW0seJxJQJx=YJ0j1=OpUJYs0WSFPXOwAEOF0EYNvJ0EvEY=bESG6WxJx=bv1J0NvJSR0ESW6JxwxJ0jvJ0RD=SF/WxUbJlp1JbR/WxJqJbUvEOsxJSsQEOEYEbMeWYimEbpmWbGQ=SMP=bR6ES5bW0j1WxNUWSWQ=YjUJbsAXOFPJSivJx1PJlpYJSv1WlRxElJ6WxE1Jli1EOHbEYJAElNmJxuD=Yjb=lNv=b1DW0NYESFxXSUUXSwDJSseXOJ6JSim=bpbJ0RqEbReEbu0W0Wq=OWqXlWDWbpUWx51XOM/WS1eXlRq=lu/WOGPExvbJ0pmWbWDWSW0=limXSF6=ONUWbHYWtNYExpvJbseWbFx=Si1ElWPW0E1WYReJbMxEOibJS=1=bwxEYJDJxF0=bjY=OFAJbwP=lu6J0M6Wl=mJbWQJb5bWSpvWSuxWxs0Wx5U=lJD=l=vEbpU=ON1ElJDEOM/=OEY=tE1JxweWSwqJYJxWOF/Ex=mEls/XtMq=YEbW0MA=tJQWSs6ES=bWYu6=SR/=Ys6ESF/WS5UElW6Eb=1WtueXlWqWOwQ=SRD=lM6J0M0EbNvXOG6WO5mWxp1J0pUXOEbJSux=lJ0WOueWOwAJbRxEYWeWluPWOGQ=bUmWtW6ExG/EbRAEbRqE0jYJbF/E0J6=YiUJx1qWbG6=SRAJxvvWlue=YMDJSReJYJ6=bsQ=bs0=lEvEtN1J0sx=lWeWO=1JSwx=YsxWORAWbFDXtMDJYNmWluqEls/ESjY=bwxXl=bJxs6WxRxWOJe=SWqEOReJbjUEYJPJS16EluDXtibJbWeJlMeEOsQWljUWS=vXlM6Ex=1JlJx=YJDWSvbEbGDEOGxEbvbEYMPEOW6EbNvExNYJxsP=YW6Wx1DElE1XSW/XO=YXOu0XOwDE0uxWOWPW0WPJb1eXSsAJbW0JSNYEbWDWOMQ=bFqWSNmEOUm=YJqWSse=S5YWxGqWls6WbFPWYNv=SjbJ0RAWb1QWSM0Wl=mWSM/WbM/XOuDJYEbWYsPWSRx=luDWOW/ESJ/JSFAXOuAJxR6J0=UWlWeXOW6JbR/=lNbJYueWxUmJYNbJbw6=bW/EbsAEYuQEtRAJSRxEYRx=Oi1=YNYXtJxXOFAWOuQJ0seWYjb=S=mXtMeEOs0WxEm=Os6XOsAJb=1Ets6E0MeWxJPXOMQEOWDJ0ueJSu0XtReWlMDExpYXO1PXO1QJ0jbExGDWYR6XSsxJxMPWb5mJYivWOR0JxFeJSE1XS1D=OuPXSuPEtu6Els6J0R0WtuxEbMAEtWQJY=vJSEUXtiv=bse=lux=livWOGD=OFAXtuqWbM6=S5U=Ss0Wbsq=tMA=bMAWtsAESFPXSRxXSF0JYsD=Y=UXOsQWlM6EYEU=bF/EOHUWxM6EbwxJlsQWx=bEbMeJbMxJbMQJSweJSFPE0EUWOEvEbFDXSWeJbjUWluq=b1D=limExM0EOuQ=bRAExRAXSW0XlE1WO=mWtRqWxEbExHYXtNUEOM6ElMqESG0WbM0WOFAESF6EbUbEb=1ESNb=bEbWSWD=OMe=OsAWlJAJbvbJlRQ=SG0=OEY=O5UExwAWO=Y=OUYXtRQXSWPWbGQ=YuDJ0sDJSFP=OE1WS=mWtsQXlR6E0u0E0WDWYWDWSUmJxjbXtEvEbG0WYjvEYEmEtWQW0sqXORDWtuDJ0NvXSNYJxRPJxNbEt=1ExM/XtRxEtj1WSUYWSHvW0=bWxpvJYNUEtpU=tWeWYJPXtivExW6JxjYES1/ESG6W0pmWljvJSibEYu/WYWeJbw/EbFAXtM/XO10EbJDWY=mJYsqE0M6EYuqJ0RD=OWxWbw0=lRDESiY=tpm=OimXtRDW0JAE0WPJSFA=YNU=lW6ExvmXOvUJb=UEYNvJxUU=lJxWSF/WtjYEx=YEtReESN1E0jUEtNbWOwA=tsqWSUm=YRxWOR0J0MDEYMDWYiUEOsDJSNbW0EYWS5bESJeWlNmWbMx=SM/=bJqWbUvEbE1ElM/EluqWOw0EbF/Wbw/WSHbWls6=OpUEtj1=tiU=lReE0WAE0=bXS5mE0pb=O=bXtWA=SGQ=YMeExse=SJxWYjYEOv1XSJeJYueW0MA=bNUXSRDWtjmXluP=YEv=tMQWS51XSwA=Os6E0MQE0JxESjb=YE1WS1DElpY=ONYJlN1Ex5mJlNbWS=vES5Y=YiYWSWPESsPESpbEYJqEtEYJx1qWYRQJxMeWbvvEOs/ExFAJxR/WONYExsxEO1DJ0RxEOMeEOGAXO1qWOu6XOJqXtsDJljYXtMAWbJAJxUbJS16EYibJ0MxWlW6JSF6WbwAEYM0EOpUElpYJbM6JSuDJxWQJSv1JYjmElivWts0EOGAWSGeWtRQEYJqWOMq=YEvElWQJlNUWOJA=bHvWYNUESHU=SFAWbwQ=OvbWx=b=SuQWSu0Jx51WOEvXOGeJxweXOvUJYRxESs/WbsQ=bWDEOUm=S1AWOs6EtNm=Yp1=YsD=b=YJ0ueEbHmWYs6XliYXOiU=OUmJSGPEbWPE0M0XlReWxFeWtivEx5mJSGeJSWQ=YMP=bWAWbHv=SJ6JSGQXtMPEYEmWtiYXSG0=OMqJxMD=Sv1ESpmESp1EYR0=tJq=OEmWbwDJSU1XSjvXlWP=SMQ=tpUWOUYXSM0ElivWbHbJ0uDJYsA=lueJYJPXtRPWOueJb=U=OivWSF0XS5UWSGDWtW0WSM/WbEbWbsD=Oi1JSFQXO1A=lJAEtpUESpmJbjmJxse=lMxJbp1Ex51Xlp1=OWQJYMDW0p1XOvYEOUvJSibWS=m=Sw/ESW/WxvmWYNUWlM/ESReJx10WxNvXO1x=O10XOw6=lMD=bw6XOs/EOUbXSu/Eb51WOF/WS1x=OuqJbRPWbuDJ0NYWOH1Elib=YRDJls/EljUExGqJSJqXO1xJSNYEYuqWlR0ESUvJ0sxEbJeWxwqWOJAJbvU=SR0WOFQExJDEYJAXOEYJ0=1E0sAElu6ExiYESvmJSWQXSF6=OFx=lpbEbJQWYJQXSivXlJ0ESFqE0sQEOs/=SsxWSW0XSiUEOJ0Jx51=SjmJbEbXtWQES51WSR6JxsQEOF/Jx1eJbFxEY=mESM6=lsxJYu0Wb=YESi1=SimJS1x=YuPE0=UXOR/WYuQ=OR0=Ow0Ex1QE0uD=b1Q=bF6JSFQWt=bEts6EOJxJx16WxF6WtpmJxvvJlJAWSpbExNv=OR0JSwqExs6=YpbXSuxWSFPWS1QEYiv=libEtpUXtRq=bJDXSF6=YN1W0WPWb10EtR6=bp1WtMAJS5vWxG/WOu6WbFQJxwQWtNb=tMQ=OG0JlpU=YivXtNYJbJxJSF/JlM0WO1PWOW6JYMeXS1PWYjbWOW6=SEb=O1eJbUmWYjbEO5vWbseJl=1WOEYJbjvWlMDExJDWbuQ=O=YJbF0=O5UJSpbEtuDJbs0EOJA=SvmJxUbWSWxEONv=Sue=OFAXOwAExjm=SuqE0RD=tR6EtpUWOEbWbJxW0EYJSsPJxs0WSNYXOEmESw0Jxw0Wx5mWSJP=tJPWOWAWSEYEbu6W0R6JS5bEbEvWOUbEO=bEtW/=bj1XSsqXO=mEYu0ExsA=tiUJlNvJxwP=Ys6EtN1WSNvJl=1JSpmElJDXSMAXSR0=tWxES=U=Sw0WYMD=b10WYpYJYs/EYEvXOvmWSFD=tMqW0JQWbuPWlJ6WximXtN1=bvUWSj1JlMDEb5bXSi1=bimElJ0W0M0=Sp1=bFDJxuxJbHU=YpvXO=1EOw/=bs0JxGxJSHYW0NvWlRQEYR6Xts0ESWD=bJxWbH1=bMAWx1QWxFD=SMqEtR6Jb5UXOGe=SJAJxp1EORAJS10ESEYWbMA=bMDESpbJ0M6WbEmWtWDXtJxW0JP=tWAJSwQWbsD=tsqJSGAXlE1=bG0WYNmXSiYJYJ/ExG6Jbpb=biU=lR0WtsPExRPE0uDWS51ExibJSuDJbw/EbUbWx=bW0iUW0jvWYEUElJeJlu/EtRD=OMqWlNUJxHY=SUbJxpbEYEbWb1xJxFqJbsA=tEmES=m=OUYWtNbJbpvXSW/XOFDWtj1WSpm=YpbJxRqWOv1=O5UWYJQEb5UElJPExGDWYWQXlEUExsxXlJQ=bjvEYsPWbRqXtJ0WSNvEbFeWbGxWxRDJlsxWOw0Wxs/EbwPXOwAWORPESp1=bNbE0RQ=SNbWOuqWxvbJbsDESivXOMQWxJ/=YWAXOse=SHbJbJAWSH1ExwA=bUUW0JA=OFDEOpbEOJqXlp1EYueESwDW0JPJSjUJliYEOimE0NYXSs6=OJPWOEm=bvmJS5YJYWQJxM/JbFqJ0=UWxj1ESH1EtJqElpmXlJxEYNYXOWPXSueWli1=YuqJYWq=YM6WbUbEbvUWbMQEYiYXS5YJYJx=tNYEYsQWxM/=bNUWxsQWlJPWbFxWSjmEOpmWOFPXOF0Xts6EbNUW0RAWlu/ElWAEbwDWlseJlpYJ0s0JSw6EYR0=Yu0JlRDJlR/J0MAJSvb=YMeWbwQXOivJSwD=ONUEYMxElEmElE1JYpb=b=YEOG0JYu6JxNbWlNbXtu/EbFq=biYXtEUJlJ/=O1xJSsPEYue=Si1=Ov1WOpb=SwQElJAJlW6JYjb=t=mJbRAXtiUE0j1=bi1WOpbJxUmJlNbJbJ0JxRPE0W6WbG0=OiYWlMxExj1EbUbXlRAWYJeW0uqXOJ6WYJeXl=1=tE1WSim=tJP=SUY=SpvWOFe=tReEYEbJYReJbN1=YW0EtNmJSNYWbvmJSJQXlRA=bJ0XOE1ExWPXO16XOFQ=O=mJbuxE0NvJxJAJ0NmJYjbEOJxW0EbWSGDWbMPEbjUESp1=OuA=OueJS=bEtuPJ0i1WlpU=tW6XSwQ=lMqXSRq=YueJSNmWSwQEbJ6ESMDW0sPJYEv=bRA=OuAJbF6XSWe=SuAWOu/=SWqXOJxWb=bEO=b=b1AWlpmExNbEO5UXtR/=tp1Xtpb=SueWbwDJ0EYWOpbJbWx=lRxWOJqW0N1XlW/XtsqJYJ6JYM/WYjU=OjmXO=YXOEUEbWPWS5UWbFq=lRAEOFD=OwDW0ivEbFQWO10XSUbWtsPWbu0JYseWtuA=bRPWOG0EbMxJYW6JSNm=bHUExj1=bGD=bM0XtpvEbsAJY=YXSs0JxibXOs0ESuP=OivWYMQWlMDWxuP=SUm=SsAJYRqWlMQJS1DEOMAEtpUJbR/WONY=lsPElEbWOwq=SGeJb1/EOp1JSuAXSWe=b1xJ0MeExUbWbsAJSFQE0E1XOM0JbM0ESGA=OuPESjvJb1DE0=YWtWDWluAElJPJbFPExJ/XONmJSR/WSEYXtM0JbF0WO=UJxGxEYiY=Owq=OMDEx5vExs6WOwq=OWAJbReWY=m=OM6=SjUWOwAEOJxWbHYExivEOvmJlReW0pbWONU=OiUJxjmXt=bWSJ/ExMDXl=1XlpYExRqJ0RPJbNUEluQE0E1EYJQXOs0=YN1JbWxESHvJb1QWSs0EOFqEtJ0XOw6XtiUJ0J0=OEUWl=vEbWA=SUYJbRDE0J0WxMQWS1qW0sDJSuxEO16JlMeJYMDXtpmESWA=OHbJbU1EO1/J0s/ExwQExsP=SwAWxWx=OFx=Yj1EtM6EOWAWONvEtRqXSvbJSjYXOwe=SJqEtWqEbMQJbvvJbNvWlWx=OsA=ORDJb1DJbEmWxRQ=SNm=ljvXtiY=OG6Xt=vXlMPWxM0WxR0WlsqXS16Et=YWOseElMDJluqEOG0ExGPElMDWx5YW0seWSUUWS=UWxJDJSFD=SGQWx1/JSHvWOGxEtW0EbW6=tuPWOEvElNbJxjYW0jvWbFAJb1xW0EUXlWeWO=mWlRD=SwqXlM6WlivJSNbEOsAXtuqWtW/WOJ0Xl=1Wbib=YWPWSJqWOHvJSsq=luqWSFAJSR6WSH1WxHYElMqEtiUWSJqWbGqExFPJYiYW0uAJxwAEb=vJxibW0E1ExM0XO1PElR0EbFPEbs0Ets0XtuQ=b51=bUUWxi1WS10=buxXtsxXSjbJxHYJxUvWOFqExH1WxJAElj1ElMQXSFPJxpUJ0M6=bUmWxsqEtEmES1DExvUJxGqEOJD=SsDEbp1Wlu0EbG0WxseE0=YWORAEtjv=YsqWORD=Yu/Wt=YJxReJbwDESFDJ0RA=b1AWOsDWtWqXlWQJbUbWtMxExJxXtJPEOM6XSvUXSWeWxW6=bweExFx=Ojv=YJPWbJ6WxFe=S5mWxFDEb1eEtuDESuAWbpm=Y=mESFA=tuxESuPJx1QXSvYWOMPEbpvJ0pbXOs0XtueEbuPWOJPWtJxJSJ/JS1AJSFAJlRAEtsP=O51EbHvWxW6EONmESuA=ONmEx=vWlsQWluQJx=UJ0EYWlNvESpmWlNYWbRPJSs6=tu0ExwxJSRxE0MqE0uP=bFDXSUUESHUWlNbWYEbXS=1XSJ0JxwDExsAEbwxWbEbE0R/Wts6JYsPElu0Exw6WtM0Wxux=bFPJlpUElivJSN1=OJ/Jlu6WljYEb5mW0JDXOjvWxRA=lRqW0jmXtR0WbvUESFDEOweWSRPJlsQExWDJxRqJxR/EbpUXljmExpUW0Mx=bW/ExUbXOwQEYW0=OF/ExWxE0NYESHUEYJ6ElMeWbEYWlJ0XSEYXSHvE0uAW0WQEtEvW0RAWbsPWbu/E0JQXOEm=SUUWbGQEY=YWOivEYEvWbNmEbsDEOWxXOv1=ONb=OMP=S1xWlMD=OjmE0MDXORQ=lsAJSwQESEv=Sv1EOpvJ0M/=ORq=bsxJSwDJYRPJbEb=bR6JSw6XOw0ESivXtMAJ0=YEbjUXSWqJbu0XtjY=ls6XlMxWbs0XSM6JYuAWS10J0pmEtR/Wx1eJlivWYsqWSEmWxGDEtRPEl=m=OGP=OsAE0MA=SWA=OEvWlEvJbU1Wbu6ExJx=ONUWxFQEO10J0jUW0se=OuDWx1eESp1WxsAEtRA=YJxWORDWx1/WlMAEl=U=l=YXtJQ=luAXtMDE0imWOsPWYs/E0ueE0s6J0JQEtW/JxM/=SU1JbjbW0MeJbMPWlM6Jx=bESNbXtuxWxJPJSFeXOUvExivXtuqWxHYXtW6J0MD=tpYExJxJ0EY=OuxEOH1WSNmWb5vElMDWxMQ=SJDExE1WtEU=OWxWSGP=bN1=bEvJSWDXOs6WOMQEbHUXOp1Jx1Q=YRAJbJ6JYMPWSsxW0Nm=b5vWYsqEOR/=bjvEbNbJbG6ExvmXlWPXtjbWbjvEOEUEbReXOR0EORPEOJxEbR6XSGx=lMPXtW6Jxw0WSR6E0sqJlW6XlNUWlM/JbjmXt=mXOEY=lJ6JlsQ=S=YExu/WtMqJYRDEtJ/=OGxE0sqJSvYJYW0=OHbEbUYWSs0ESwDWbN1=SibW0pYJSWeWSs/Xtu/WSMPWxW/ElEUXtNU=SJ/JSWAEb=vJSGQJxuPEYJe=YEmExib=bp1XOGe=bR6=OW/JxWqEOw/=YuQWbF0XluPWxG/JlM0=l=mESwQExpbE0JPWbvUWOJPEtiUJlu/=YJPE0p1XSuAJYJP=lj1XSpYXlimWxJQJb=mWYEUJbJA=OJDJbJAXlR/=SuA=tsDWOwPJSEUXtu/XtW6JYsD=Sw0=bu6XSpbJ0MQWSJP=OR0XOu0ExuDWxM/EtjmW0jYW0R/JYJ0JYMPJ0JqJbjm=buAXts6EluDEbivWYRPWbsD=lWxXtJxXl=mE0=UExRxEbjvEOHYEYivJYiUJlp1ExsPXSHm=bHm=bFPEtRQJxsxESWDJYs6XO=UXO=bWxMAWtu0J0ivEOMqWOUbWxNU=OE1XSMDWbR6JlRP=SW/J0RQXOpYWOvvEOFq=SJqWx1PWtWAJxGAExweEbibJbHb=SpbXtsxExGxJbRP=O=mWxWDWls0EbMxWtJx=YuxJb5UJ0jvE0WQEOH1=bvvEYWAXSFqEbWDEORqES5UXSuQJlRPESJDWOvmExUUJxj1Xtu0WS5m=YJQJYueEtW6JYivJ0u6=ORQ=OGDWYWDXlRDJSMDXtjYWtuxJYEYEbjUElR6WxFPJ0pvXOFqEOwAEx1/=bMqEOG6JYu/JbRxEbNvEYJ/=bW/EOvUWxjvWSRDJ0M/=YjY=biYWSNUWlivEtM6WSJP=OReWbu0ExMQ=SFPWtNmE0ReE0Je=libElsQEtu/EYRxExv1ExpmWxR0JxFD=bp1J0EmXtNmExGQWxjm=SEv=lE1EtiYEx1DJbUb=bU1=OpY=S1DExUYESpbESsQWSpvXtueJSw/EOpvWSuD=Opv=lWqJluQ=bM/J0NvJbW0Ex1/=O1AEYuQWOuDWtWeXlM0ExGxEY=bWSEbJ0RQWtsPJ0W0=buPWSvv=tu0XlMq=tRP=S5bWx1AJbvvExGqWx10=tpbEYMqJSNvElJAEYuQWOseW0N1WtRqW0EUWS=YJY=m=SUmEtWeWSWqExp1ESWA=tux=S5vXSRxESG0XOse=SpYWOWQ=SsqWSweJYsxWSseJS5v=YuqEbwQEOMAWtjY=ONvEx1QWbvmJSF0JSsq=bRqXOwD=YJDEtJQ=SRqJbpmWtWqW0E1WbF0ElWxJSE1ESFPXSseES1q=bJPWxs/=YjbWYMAJ0ReWbHvEbH1WY=UWbvmWSNUWYEmEbRDJYWqJxWQEx5mJ0uDXOJAEYJDExs6EbRxJ0R0XOUYXtp1ESUbWOpUEO=mJSWDJlW0JxseWOpbXOF6XOMe=b=bESpY=tJq=tuqExWPE0MDJ0pm=lEmEYpUJS1xW0MeJSF/ESG/WbseW0WeXOjm=SjU=O5vW0MAJxWQEOFPEYuD=YuPJxJ6ESpYWYWx=lReWbw0=Su0XOJ0XOMPJb1AWxpY=S=YXlMQWxpYJ0s0Els/=tE1E0M6EOuAXtJQEbibWSM/JSW/EYi1XOpYESJQJxM0JbNYXSFQWYM6E0EbXSJPEx1PEx=UXlMDJSwe=S=1ESw/J0Wq=YRq=Svv=OWe=YNYWOwA=tJQ=OwD=SsQ=YpUXOWAExG/EtNb=OUmXOwQJxWP=bNUExGP=bJeJSM/=Ou6=lu/EOM/EtpUJYEb=lue=bWqWOseEbuD=SwDJlJDJlRAWluQWxueJYMxWOR/XluPJbvUE0RPWxsqXlEmWb1DEOu/WxFA=bu0EOG/EtJDEOW0=OJPXOG0XO5bJSMPWbWQ=tJe=YW0Exw6EbNv=lW6W0NmWOJP=YMQ=YM6JS=mE0jvW0WeWlEvWx5YEOuAWlseXljYJlp1XtRxESRqJSjmJ0uPWSsqWSWqXOsxXlMP=bWeWOJ6Exp1EbReEt=vWSG/ElJ/Exs/ExF6JYRxEO=UExuxJlW0Wb1e=tMPXOpmJSReJS10JlRAWOwPW0RxWxJ6W0MeJbJq=OHbE0EmJxwDXSF0WSGeEY=1EOiv=OMqWY=UJxEvWSuAWSWqE0WPExNmWliY=ljvJYR6WYNbJ0RDXtRxJ0=1EOuqJbi1XSWAWSvbEtuDExwD=S=1Jb5bWlJPJxR6XlR0J0J6=SW0E0R6WOWPJSsQ=YuDEbMDWYR/XSUUWxMPJ0Eb=SwPEx1/WSGqWYimJ0uPWOEbE0M0WYNmJbsDWOsPExvbEOjbXSpUEbvUJSMxWOjbEOiUJSFAWOivJYW0EO1PJxMq=bR6WOUUJbuQJSuP=OEbJSEmWbuxWxMxEbpUW0pU=SsPXSsPJb16JxNUExG6ExwAEO1eWxvUW0WQEYseJYR6J0Jq=OMeJlMPJYMqXlEvEbpYE0u/WYJ/WOHY=SW6W0W/JSFxWbMPJlJAWSU1=OF/=lp1ExwQWSE1El=UEOH1WxM0XSi1JSvv=OEUJYNmXSRqEYRDEO5mJSG0=tW6JSFxXO5b=SNUWSjvExHvJxR/=l=bWtRe=YibW0ivExHYWbG6Jb=UEbu6J0uA=tEmWYpUWbJ0J0Rq=OWDWbF6EO1PJbWAWYWQXtR/WSWqEYsD=OFxWO5mEbGeWlpbXOsDJ0MeXSWxWtWP=bJPEOw/JlR/=YMPXOJAXtWq=S1AJSRQWbW0WS5UEbu0Jxu6EOvUExUUJlueXlpbXSN1JxNm=Yp1W0W/EtWqXSGDEbux=YJDWOuPWS=1=lp1Jbu/WSWeE0EbESpvES=U=S5bJSJ6=bU1XS16XS1AWOJQ=b1A=SRqExpb=YjYESG0WbWPJx16WtEmEbM/ESGeJSWPWxWxEbM/XSFeJlj1=SwqJYW/J0u0J0sDXtiYXO5YEYsPW0EvJxu/=lMPExGeWSMPEbU1=tNUWxHYJlWAWYuDJYMq=Y=bXlu6XO5bJlReJbWPJSsqEbFxJYM/Et=vESGxWORAExHY=OGqXSJDWt=vWbJ6WxGPEbF6JYsQEOvm=OvmXtRxWbpvWlpUJ0sqWlJPXSueXOFAWbweExUbElW0WbwQWb16W0Ev=SseEbJ6JSuQEb1qWOuPJbMqEbGxW0R6XOW6=Ov1WxvU=ts/JSjYWtNmJxGDJxFAWb10=Siv=bsQWSMP=OU1XlE1EYim=bWqEYRPJbjUEYRxJYWDExW6EYW6=b1qEYW0WxvvWtR0EbWPJYR6ExEmWtMPJSJA=bpYEbMqExiY=bNv=bR0=tJeXOEYWYuDEYu/WtWPEOp1WSp1XOwx=SUbEO1DJSpUJSGQWOj1=Opm=SF0WY=1JYWq=OHU=tNbXls/XSiYE0WPEbRPEbUU=tsxEYRPWtRx=OsAEtux=lE1ESs/Elu/WxiUEYEUElpbJlpbXSpYElibExs0WYMQESFP=l=mWYsQW0J/Xlu0WOuAElWxWlWAW0u0EOsDEbs6=bJPJlJAWS=1XOWQEOGAEOwPXlp1=bu6EOGe=OjYWxH1WYWQElMqWbUUXluPXSJ0=bpYXOpvEYR/JxRPEYj1Wt=bXtsDWbJ6ESRDJlWxWtNv=SRqXOFx=YMPExHYWOsxJ0jbEtjmEbRqEOM0XOJ/E0EUE0W6JYJxE0W0ExRPWSUb=bM0WbpUES=mJSEYXtu6EtN1WOM0JSuDXl=vWSUYXOpbWOR/JbJQEOF/=bRxWbpbXOW6XlMeXSs0=YN1E0EvWbF0WONmW0WDWSN1EbRxWbEb=t=Y=SuqESpvJSGA=OvvWlRPEbE1=YpbWlNUWS16XOWQJxM6WxpmWOWQ=OFq=O5vWSGeEOue=O1eEtjvESF6=ljbEOGqWYWxEO1AXOUYWOGPWOJqJ0iUWS5vJbuPElNU=bwPExNv=OR6=YseJb=UXtibEx=UExUUWlJqJYsAElimWSEUJSWQEOuxJxw0WO1x=bvbJxH1ESi1Wx51=SWqJxGqW0sxJSivXOuQWSEYWSR0XljYJSM6WOF6=SHmEluxExW0=bpU=bF/EYMAWxwDXSjvXtseJ0W6XS10W0W/=lE1Wt=v=bvUXORDJbiYJxGAW0=UWYRPWYR/XOv1WlRQ=YJAWxs0WYNUXSsPEYJ6=OWPJSvbExpUJYEbJ0=1=lE1WbG6EOJPWxMDWSi1WxWP=SGA=SjUJ0s0XOHbWxUbJ0RqJSw0=ORDJbWDWSF/Xlu/WbRPES=UWtibEtj1=S1eEOMAJlR0EOG/WYibXlW6=S=1WO=vWbJxXOW6=bF0ElJqXOJQ=S5Y=OJDESHYEtNv=bR0JxiUJSs0=SJPXSM6WxGeWSFDJxj1WOMqJYseJYjYE0uQXtJxWbEbXtp1WtRA=SFPEt=bJSvbEtW0EtW0EbueJSHUWlsqElJPWbjU=O1/=SFAEluPJxsA=luQJbwqJb1AWSF/=YMeXlu/=bUv=tuAXS51EbsqEtuAJbw0=lpmJxFP=bwPJbEbJYReXOMxWxNmWYRQJYWx=bJP=Os0XSs6EbNUXSMQEOJeXSUbWS1PJYuAEt=vWYsDJYRP=OpYEbu/XOFQJ0sq=lu/Expv=bJ6=OFxXOJ6WluPWOMAJYEbWO5vXtReXtj1EbH1XSW6WlMPWSwPESRxXSEvJbH1=YEmJ0WeJxuQ=O1qJYsQ=OuxESj1XtRQE0M/EbvvEtMPXO5UEt=v=tiUEbFPEOu0El=vJ0R/XOu6EORq=SvvWO=YWOJQ=OEbElJ0=lj1XOR0Wtu/WOWPWOW/=O=mE0WPEbUmWtR0JxuxXtRPExN1ExW/XSFDESGqJYpvXtJq=bM/JS5mE0WqJSuP=Yu6WYjYJxNYElWx=Sv1WbEvWljbXls/XtMPEOwPXlJPWS5mExu0ExseXS1PW0u/JSueE0jb=tMA=tsx=SF/E0RqWxUmWOwPWONUWSs6WxwqESu0ESuQExibESvY=lu/E0M6XOJAWO=UWluqJ0=mJxUvEOEvESFeEOsxE0imEY=UESiUEOJ0JYM/XSvvXOW0XSRxW0uPWYsD=Sw6=SRQJSHmWOu0WSF0JbR6W0WQ=lJqWtJ6XOwAWOu6WYsD=t=1XOuxWOiUXSM/Jxu/J0RP=YMeXSJA=lJxE0ivEYsDElsPJ0uQEbW/Jb5bWxWxJx5vJlRAXONmWSWQWYsA=O10XSpUJxpbWOUUWt=m=bvYWYReJbUmJbG/JlEUEl=YEbUUEtuDElEm=tseWYMe=b10JSGAWYsPJbF/EbMqWOF6=SFA=YEvEx=vJSM/ESF0EbueExR0ESJe=lJAJbuAExRQEYMeWlpvWSMqJlJQJxseWSNY=O1xJlEbXOu6Wl=1JSFQWSu/W0i1JSFeXSsxEYjYXSjUJxsP=YNYXOW0EOEYWlRD=SGxW0pbJSFAElE1ESHYEtRqXSGxWxuxEYjbEluq=SwQEtsqExvvXtpv=SJPEYM6=SW/Jxiv=tueXtWqExUbJYJAWt=YW0imWS5UEb=bWSsqJlJq=lJxXO1xWxjmWS=mWY=bJbu6WOE1WYp1=b5bEtM6=OwAXlMQWbu6=lJ6WbJxWtseWO=1WOuQ=livWtjvJ0s0WSMAEbG0EbjbEbJ/ExRP=bHmWOM0=lJ/XSs0JxHbXSWeEbuA=OMq=bpYXOHvWSse=OJ0Xtu6=SHvExGDW0NmEOM/=t=UXS5bEt=mXOUYXtjUXtWxEl=UWSpbEORQWSJ0XOWAEOu6EYsDXlJQJYJ0JSvb=tJq=tMqJSJPJ0u/WS1/XtMAXOjYWOFeE0W/WOp1E0EbWbJAE0J6WxNmJlMxJSpUW0pmJYiv=lJ0W0pUEljvEtpUE0iUE0MQ=OW6Ex=UWxFP=bM0EtJQXO51E0MDElN1W0J0WOseWlu0XOpUXO1DWOw6=SEmWtNb=tWAESJAWSs/WOMqJSG6WbuPW0j1XSFqESGQ=bs/E0sxXOWeXSGq=Ou6WbFqJbMDJx51XOJ/WS1eXOiYWbseJYivESUbJbNYWxNYJbsDEbEYXSFPJSJxJbWxEx10=lWxWbu6JSuDJ0=U=bueWb=vJSpmJYJeXS=vJSJPJbWQXlM6EOux=ON1JxJ/WbUYEbNbWxu6ExRqJlRQJx1AEbJeXtJ/=bM/WbGAWO=bWbwAEY=UJSMxWxjY=YJe=SHvWtWQJbNmXls6EYJ6=tR6=bEYW0j1WbUm=lWDWtM/ESEm=lWD=SGPEOM6EYs0=YJAExUv=YMxWONY=lE1=O1/WSHUWxGxESJ6Wx1xJlM6XSpYXlRQJx1QWOu/=bFQXO1/EYEv=YM6WYJDXSH1=lNUJSHYXS=UElR/EtWPXljb=lM/EtWD=t=UJSUbEYNmJxJx=YJxE0M0=Su6JxueJbpYElNvEYueE0W0XSH1JxGe=bEU=YRxWOWeJx5vWxWA=bR/Eb=YXlWPW0uPEOMAJYWAXSRP=S1PJYuQ=lJQWbHbW0Nb=OMeESGeXS1QJlJxExsQEx1AE0NbEYp1EOp1XS1qWYM/Etu0WSjUElimE0sqJYEU=tjmJYJDJlimJls0ESM0JlJeEtpb=tu6WxNYEx1AWtjb=lMAWbGeWORxJYseXtR0WS1/J0s0ESvvXO16JxvmXOsxWY=1WbHvJ0Rx=bWP=SJAJlWDEONYJxMqJx51=lJeXSH1JlpvJlE1Ex51ExRDW0N1E0WeElimEbpUEOu/EOUvWtR6WOEvExjmWximEOUmWY=bWSiUEbJQ=YibEO1/=OMA=SW/XSR/Wtu0WxHvESJxWbW0WxFP=bHmJSw/=O=1ESv1WSuAW0u/EbWQ=SR/=YW/J0MxXOJPXS5mEx5bXSMPWxsDJS10JlM0=bsq=ts6WOMAJxUUWxMAExMqESM6JbRqXluq=SpvEbvUWb1eJ0E1ES1AW0WPXtjmWlM/XtjUJbEYJSuAXOWPElEv=OwqXSvmWtWeESJeE0u0=bEb=bUYJ0jYWb51=OF0XSsxESuqExweWxMDEO51EYsx=tjY=SGDWOiU=YuqWYjYEtM6EOwe=OMxEYNvE0pvElJe=OUYXlJDEOHvExw6E0uPJxGPJSHUJSUvE0RxWbRQ=S1qW0u0=S1qJxwxEt=bJxJQE0Mq=YWQE0=bW0W/=Y=mEOGeWbM/XO=UEORQXlM0XSWe=bHvEbM6=bivWlW/Xlj1XlpmXSib=OEbXtMxWYWx=lW6JYJq=bv1JxG/JSim=YJeWx1AXSEvWb1/WbvmWbF/EOW/=YEYWOFeEYMx=OFP=Su/EYu0WtpYESwQ=ljUExF/=bvmJbFD=lJPXSRxEbGQWxsqJxw/=Ov1J0WPEx10JYiYJxvvEOMe=tMxJb1/EtEvJxEbEYM0=bUb=lJ0=tRqJxMeXtu0ExG0WtsPJxweExJ/XSvb=O=b=tWeJxiYE0WxEOsPWYWq=b=vEbNbE0EmWlJDExHYESGeExivWbMQWSFxJSs6Wtiv=S1xW0NmExjmEbpY=t=UWS1QXSRe=bwAJSM6WOHvEO1P=tuQ=SFx=YjmEbu0EtR0JlJPJS1/=bRAW0MxExJqWxJDEbvmESUmJx1eXts/ESEUWtu/WlMeXS=bWOGAXSM6EluqJSWAWOpYW0EmEYMDEtWQ=OvmJbU1J0J6XtR0WOu/EOwQESR0=S=bJx51JSWQEl=1XSH1ExNbXOvUEtimJxpmEbW0WS5Y=Svb=O5U=lEvWYW0JxsD=tEb=OEUExMxJlpUXOG6ExNYEbMPWbu/WSWAExw/EbM0=bwxJluA=bsx=tM6=lMqWO1/WlEbWtR/EOweESE1EbFD=OU1=l=vJS5YXlp1EOWQWSJxJbHm=lRQEY=YEOWQWYReXOHmESRDWxF/EOjmXOwA=tsDEOvbJlNbJSJQExGeEYM6XlsAXtN1EYpv=Su/ESi1=SEUJlsq=lEbE0J/EximJYJxESWxWbwAWlp1WS1qJxMP=bpmW0sPJ0uqWt=vWl=v=OF0XtJeWlpv=OiYJbjmEts0=lEmWOR6XlpU=tsQE0EUWlsD=Ow0=YsPEtMQXO5mWbpmJSR6=bN1WtuqJxjUEOseWbRQXtMeJxpvEY=v=bReJ0u6XOUmJb=YEYs/=Ys0JbNmElRxElMQEx5vW0uqElEmESpUJls0JYs/XlWAExUUWSwqWb1DEtM/WxWD=bMDJ0s/Wbp1XSuPWx5mWSj1JljYXSHmWOp1EO5bElimWOWqWOEb=SWxJxM/JYRPEbNvJYjUEOW6Jb5YWYNmJYpUWtNYXSJDEO5UEbWD=YsP=tjmJxWQ=bs0=OM0=b1qWOFDEOGPWxvvEYjv=bwxJ0NUJlp1ElimEbJDWtJ0JbUYXSvbEtuAExFx=SMAEl=mW0jvWO=vJYRxWYReESRPJYWxJlMxESHmJxJ0WS=YW0iUWOjb=bNmWbu6WO1eEts/=OU1WSGPXSHYJxvYESp1EOsDW0EmXSGxW0Mx=Ypb=tM/Jxsq=Yuq=bJeJxRqWl=UWbR6WxiYJxvUE0jmWbsDXSRP=SRAWlMAXtWQWOG0JYsx=tJeWxJ/=b=vJSN1=YsQXtR6Xt=Y=YMxWOwQJSUbJSJ6Wb=YJYMDWlpvESGqE0M6WSpvJSMD=SuPEOFDXOsDESReWtjvJxM6J0Wq=tR/=OpmEOEbEbWeXlu6XOvvXOpmWbFAJS1QWOu0EYWQ=Ou6JxFPEOGqESF0ESi1=bFqWORxXSw/JbvbES5YWSWAWtjUJ0M0JSseWOuq=YRqXS1qWYJ0WOi1JbwDWtMPWlMQJb=YXtjbEbWAW0=1Wbw6Wxp1Xlp1XtuPXlMxWb5bExJ/XOHmXS10Wbu/E0WPXSNbJbWD=YuxW0Mq=Yu0E0RPJ0M0ESGDEx10JSMPWOF/Jx1qXOFPJ0u6WSR0WxRAWbw0=tM0=bEv=OW0Jxw/JluD=SRx=YJ/JlEmWb16Xtu6JlMDXS5bJSwPWlR6WYJx=tjbXSuqEluxWb1DWx1PWYRAWSF6JbpYXSjvJlu/EbiUWbG/EO1xXlNvWxJ0JS1D=lMxEbjvXtEmWx10=SwAXlsxXOJ6WximWYEmJx=Y=buPJYRxWSW/EOs6=SJ0Jx1/EYueWx1QEO1QJxM/JYpYJb10ExjYXSs/JSUUWSEmXSw0ElMxWYpmEtj1JxNvXtJeWSvvJSUvWSNmJluDXS=Y=bGxWSu0=tRqXtEb=SJxJYuxXOj1Exu/WbR0EOG/WxiYJxwAEbu6WxR0Ets/WxJ0XSWxXtJPJlivEtuDEl=YWxwxWb=UWbUvWS=bJbNUWORD=lReWbW0XSvmXSJ/WSvbXtu6EtR6ElRQ=lNYWbEvEbpYJbuxE0WQJ0i1WtNUEOsPWx=1EYJQJx51WxWPWYRPJYueWxpUXONmWxNY=Yjb=SwqWbs/E0EbWSvvWOjbJSWQExMAElRAXluAJSJPWY=b=OsxEbuxJxu6ESsDW0ibE0u0Eb=1EYJPWY=vJSMxJxs6WYibJSUUWx10=O1PES=bWOFPWOibWbEv=tM0=tWDEb16XOvUESiYJls0=S1xEt=bJbFDESN1ExWeEbHb=YEvJSu6JbU1W0JQWtRAEtE1XlJ0EbsxJxGQXtN1=YJe=OHb=ljUEt=YWx10XSUYEORPXS16=YsAXOiY=tW6E0uPEtW/WSUbJYJA=bMA=lJDXtsxWlR6Wt=UElNvJxwPXls/ESwDW0iUWts/WxRDEOjmWxGqJbJqWlNvWbNbWlJAWOHb=bEUExR/ESjbWOJ/Xlu0ElRe=SwqExH1JlEYES10XOjbE0iYJ0Ev=SuxWORQJSEUJxNvEtJ6Xlp1Wb5vWxEv=OUUEYuAWOjUJS=1ExFAE0seExuDEbvmWxWQEtRDJlj1JlJAJYi1WbJeXON1XS=mEOvUEOGDExFPEbjb=b1A=SJ/=bRPEOWAWb5vEOjmWYiUElM0JSGAW0RqEbu0Jb16EluAJxNUXO1AXSiYWbs6JxuAWSGqJYibWYWQXtMAEO1PWbWqJb=bWtWxExRDJ0sQExiv=tWq=bWPXl=v=S1AWli1=b5YJ0E1XtpvExwQ=tEv=SR/WSMxEONbEtpvESsqE0JP=lRD=OW6XSRqWxsAWxG/EbEmEbjbXOGD=SEYE0JPWOMqXls/=lEb=YpUWxs6WxsqW0RDXtEUWOFxWSReXSsqXOivWOGqEOpY=SiUEY=bWx16J0RAWSE1EYW6ESNmESM/=tW0WxEbW0W/XlMAWOR0ElpvWSW/EbpmElj1WxGeE0MQExW0=OEv=S1PEYu6EOUvXS1eES1AEbNb=O=mESGDExF0WbWq=tsPWxGPEYueE0RDXlsAWSRqESJPJ0W0XSu6E0u0=bj1EOHUJSE1WxwqJYi1EO1D=SJDJSuxWxMAWSsPWbj1WSUbEOjvJ0s/=bu0W0EYWSuPESFPJYEUEYNbWOuDJSjm=SuQXlW0Wb1xJliUESi1Jbim=SjYJb1PWbpmXlWQJSwqJ0=1ESR0ExpmW0seEOjUXlNvEYMq=liv=O5YEtMA=liUWx5Y=bj1WSHvXOHYW0MPWbWQEYJqEtWq=SweE0WAWbNYXSGPE0iUJbEU=SFeWtMDEbsQWOUbJYjvXtRDElNUJbs6=OuAXlWDWxwPWxuDW0WDEOWDWY=YXSseJbvm=SvYESpUWOvbEbF6J0pmExvbJlRxWxJxJb1QEljUWxUUXOibJYMPWSJ6JxpmJxGxWSGQ=buQ=SHbWbN1JbJxJxsxJSw/WYMAJ0NmJluDJSuxWbFDWOiU=OFeEbse=tJPXOsQWbsQESFxW0MqXOJxWYueWx1DJxvbElJAJYsqJSGD=t=1=SpbWxW6Jx1PE0ivXlM6EtpU=YN1XSGDEt=m=tJPJ0R0EtiUW0sPElRQ=SR/WSG6XO=UJxHvXSu0=OF/EYWD=bUbE0E1JYuA=bi1EYjv=bHmJbMeWOMxESFQEOivJlj1EO5Y=S5bElM0JbU1E0MQESNYJbNUWSvbEYWPWSs/ExGQXOEb=YJAEtW6Eb=UJSFqWbEvEtjUEluAWOu0=SEvElibXSR0J0jbWxs/=tW0JxM/WxJ0WlJqEYJAJSJQEOJ0WOwxWSWAJ0R/ESFAWOJAJxiY=bi1WSJAElNvE0W/Wx1Q=OMA=SRqWbweJbjm=YReJlRxEYMxWbWQJbRQWlim=bueWlMAXOvmXO=Y=tJx=YNvJSMq=Yu6=SJPJb=YWYibJxJ6JxRD=SueESJqJbjvWO1AWtRAJxRA=tuq=bwxJSHvWl=UWOHbJbpY=OWAWOMPWxGq=SsAElRx=bv1XOwAJ0Nb=SM/=O=YJbivJxW/WlR/ExNUJxuA=tW/ElMDE0MAWxsA=SvvWYRA=YRqEbFe=SRPWYMqWSMD=tp1WOJQ=Yi1=OReESu6XSibJxN1WxM6JS5m=luDW0Re=tM0ExseWYJqJljb=SivWb5bEtJxJSN1WxJqEbWQJ0Mx=lW0JlMq=OGQExRDJSMPWtsDEYWqWSR6=tEbEts6=SM/JxwQW0ReXtpvJximXOivWlReEY=YJSJqEbwPXS51WS=YWb=vJxG6=tJ0JlRDXtuQJ0RAJbMeWbRxEOWxJbM6XS5vEtJPJYMeWSMD=livWbFAEbUm=SW/Jbj1EOR6EO=YXSuDE0uDWSpvJxNmXtMPEOsqWbWAEOwQEtpUEtEbEO1eWtWA=Su0WSNvWliUWt=YXlRPXSNv=lMQXSjUWtM0JS5UJSseXtJxEtRP=SvbExNUXOvY=SueWSEUW0R/=YRxWxw6W0J/=YsqExNbWO1qWSH1JSG6WOuAWS10=SEvJbGAEOFQXlueEbFDEbv1XSMP=tE1WSUb=Os0E0NbExueE0W/WOFAWlJ/EtRx=bueWSMeJxRDJYJPXOG6=bUbWONUXOJx=SUUJ0Eb=OG0Expb=OsxJSwDJbMxJxJDWx1DXtMQ=t=bWtuAJ0s0=ls6WtJ/=OHUXSM6JSHYEOG6WxueWbwqWSw6XOG/WbWPXlWPWbWQJxuAXtRPXSMqEbRD=OWeJx5bESHUWx1QEtJ/Wts6=SJAE0JxW0uPWOG0Jl=YWOEvWOiU=tsQEbG6WSv1JxFDXO=YXSFqWluDEYEb=OGPWOUU=OFeXSJ6=OM0Ebs6EtWQWOReWxjUWtu6=YpbJ0M6=bRDXSG6XS1QXtu0ES1DJ0uQWO1e=buq=b5vJSNmElEUWYWPXS5mJlsQEbH1WbHU=YJqWlMxJ0u/E0R0XtjbXSseWts0WxR0JbNvJbvbES1AJbJq=SRQE0RxJ0R/ElM6EbjvWl=1JYR/=O10=YMPJSFP=S=m=luxEluPEtRq=OEYJSW0ExJ6J0RAXOp1ExNUJb10EOw/=lpUXtJ0E0RPWOu0JSsPWbU1Ets0XSHUESpbWlsqJYimWYEvJbEY=bWQEb=1JbuQJliYEbWPJb1QEtEUESs0WYp1E0Em=tiY=bMD=OUYJljUEON1=OGQ=Yu0=lEUExW/WxWQ=tuxEYRAEO1AESseXOw0ExWDXS=1WSG6WxUmWbNmXtj1XORQWtM/WOib=lR0ElRQJbRDWSEYWljbWxvvJSF0ExjbW0J/XOMeWSGAJ0WQJYsQJxueEx5Y=Sj1JYM/Ets6JbvmJSu/Exu/W0i1EOi1JbGQWtsqJbHYWbp1WbEvXtuAJYuDExuPXSHUWxv1EbHbWxiY=OivESGxEO=v=YjUExN1=tNmXlu6JSu/E0s0Wxj1ElE1WYR6XtjbWSRxE0WDEbHmXS=Y=lRqXSwAJSsDXtjbWS5vExpUWbFAXOvbWtuAXts6XlR/WSvmJYjUElMP=SWAJbsQJlRqWOj1Jbu6JxNUE0pbWlp1JxsQXSsPWONbJbjv=bwqJliUJ0sPWYimWOvv=OsqWxGqWOsA=buxEO1qJbHUXlWAJbs/XSjU=bRPEljUW0JPESjm=SjvXSivWOu0WbwxW0WP=bv1E0WqW0J6=SWQ=b=YWbR6Wbv1WlJe=SsAXli1EbR6XSH1E0pUWbJPEOM/=SNvEYsqJSsPJxJPEYJ0JbJ/XOW6=SW/XSRQWbJ/Jx=YXliY=OR6=tpvE0JAJxu/ES1x=YJQESFxJ0MPESR/JSuQWtMQ=tNYEbEbWlWx=bpU=SRxJSNmW0seXOU1EtRqElRqEOFPWSU1=YMeXOM0EYEbWbHbWOWDXSF0WxJP=lM6=bGPESM0XlJ/EYuAWOuQES1DW0se=bwAWlR0W0M6WYWq=SFq=OMDWx1qWxWD=SpYEbUvJlMxES5YWlseWxiYElNvEbNvWtueXtJ0EYMDEO=bExsqWOEvJS5mW0WeWOE1EbJ0WORqJ0W6=OweJx1AJbN1Xljv=t=mEbpUJYu/JliY=O1/JbReExMq=bF/W0RDESuqEtWPEOGx=timEYWD=OM6ExReESiYEY=1=S1AJ0uxJYEYWY=YESRQEluPJS16Xl=YXOWPWlM/=O1eWYNYXlR6EbimEtMDJYRAWbvb=SMPEbReJYuPWS1DXOpvWbUb=OE1EOFqEOpmEtpb=OueW0s/WlpUEbwAJbEYXSUUWbivEbF/E0s6EtpU=OWqEl=vWb=vWts0JlMqE0iYElJxEbvmJlJeWlsxEYjb=bpUXljm=ls0JYuxXtEvJYp1WxUYWY=bEb=bWSGAJlM0WxUvJlivXOueXSGAJbMQWtJ0W0JxElM0WSi1XONvWx10EOwe=OvbJSMPW0imWxRAJSJAJSRqExG/=bReXOjvXOMQEbNmWlu6ExW6EbRAE0WxWxWQ=OUU=SGQ=YM6WSw0JxE1JYuD=l=mExvYWbRQJYNbE0Nm=SJ6XSuD=O1qW0uPJx10XlJQWOFQWxJ0JSRx=SpbXSJPWbpbJbHbJxsxWOs0Jbi1W0EUWOs0XlMPWOMeJluA=Y=mEOGAEbjbJxJe=l=b=bsQJbWD=tJ0ESMAE0JeXtp1ESR/JxF/WlEbWYjYWSN1WxF6=Ow/WxMPJYRAXSHUJlimWYNbXt=vWt=1=bWDElu/XORQJ0JAXt=U=O=1XSU1XS1DWlu/Xtue=SJAXOuDJluDEOHvJbFxWx5UWbJDXliYJSGQESuQ=SUY=tsPElueESNbEbpYWtNvJbpUW0Em=OWDJbsPEbwDJx1DWxWqWbWqJ0R0ExJ0XlMqEYuPJSRx=bueWSFq=OMDXSFP=bsxWSjv=tJ/JSJ6WbueWb16JlMPWbs/Wtsx=SsAJbpbEbW6=SUm=b5mXtsA=OwQWbFA=bG6=SiU=Svm=SueEx5YWbs/XtMDJbEY=SuP=S1/EbHYJ0uDWxpbExR/=lEmWYuDXluP=YNvXOueJbGeJbiYESsQEbwqElM/WYRxWtJxWO=YJSjU=b5vEOwqXtRxWxJ0=SGxXOU1JYJPJbs/Xl=1WYJq=Su/EO5UEYJeXlJxWlMQWx5vESvv=bHvEYNYExU1ES1/=S=1Wbu/=YEmExEmWYRAEOMqElJAEOGAWOFPWYs0=Op1EbR/=tpYWxEmXOuQ=OuAW0MAJlWe=Sv1=tseEOMxWYN1WSMQ=b=vXON1WOvm=luAEtW6ElsDWxMQW0EbESNYWbW/EbvvES=v=SjYWbvmJx1xWtu/ExGqWOUm=lJeXts/EOR6J0J/J0Ev=lEmWxWAJxvmWYW/WbRxWbHUXSFPWSEvJxuPWxNv=bM0WbWAJxMeEOWQWxMeEts0Eljv=OE1JbJqJx51EYpm=tEvESue=lW0E0Nv=S1DJbF0XORQExJ0=Yu/WbvmXORP=lJxWtuPESuQWSiYJSwPWbGAJSvYJlJeJbW/=YW0WxR6WbJ6=tMAEbjY=OJQWON1J0MeW0pYEYjb=OpYE0jUEti1WOJQ=Su6EbW/JSJ0XSUUXlEmEYpvExGxWtMqJSw6WlpUWluq=bwPWxw6JSW0EbNvW0ib=SueESi1JxwAJSRAEtJqEt=1Wxwq=YEbXliYWxsxWYsx=O10Ebw6Wlu0=SUUExJ6ElEU=bwDEbRQEbjUEOu6E0JPWbFQEOMD=Ou0Elu0WlJq=YsDWOHUWOGDEYW/Wx1PXtJqWOEbXSUvJxvvJSsDESMAESFe=bGPWbGQ=SJD=bJxJSw0=tEm=tN1JbjbXSseXSFqEtJDJ0pbJS5UWbjYWSFxJbJAW0iYESJQ=SMqW0M6XtuQExsAWOUvJYWqWl=YEbpUE0j1WO5YJbM0J0RQWt=b=YRA=S1AEx1/ESUmJbuAWYiU=YNmXSJeEOwAEOWxXSHUExj1WSU1=lj1W0p1WSjvXS=UWxGqJSMDXOs/WbRDWOs0WxFQEtJ6ESFDXliv=OiY=bEUJSE1=YpbJYse=bW6WYRPWxUmXSueXSFAXls0Xts/WOUYXSHm=OFqEbMeWSEmJ0u0EbFDESNvEbiUEbHvWxwAJ0JA=b=bJlMeWOMAXOi1WxwD=S1AJxjvXOU1ElivJSGD=YsQWO5vJbUv=OjUEljUEbMDJSpUWxpvJxJDJSsD=tMAWxM/XOFDExG0=ONY=li1JSuqJlJ/=b=YXtMeJxHvWYsDEOuQ=SWDJxReWO5bEtW0JlW6W0uq=bGQ=tMQXSMxElib=bM/JbjvJY=mXl=mJSueEbN1JxGPWYpUWSFQElMeESWAEOJ6JSuxJls0EbUYWbUUWbjmXtW6WxUUES5YWSwQWS5UESvYXSsxJbFQEOwAEtJPElNbEtWQEYWPExweWOvmWbjvExW6J0MQEbMQ=bsPEOM0XO1xWxWeEl=vWx10Wxs6JSFDW0=UXOs6Ex1QWOM/E0sQ=OEvE0MAExWDE0ivEx=U=tNmJSjmJSRx=lsDEOpb=YpUJxUYJxNYESUYESR0=timJSG6Wxw/WSJAWbJ0ElJ0ESJ0ES=vEx1xWb1PWON1=SUbJYR/Wxv1WSJQWbpYXORxEYMeXls6Et=1=b1/WxivEl=vJxMQEYM6Wt=mWtRqESsAEYJxWOjY=bFPWYuDEOwqElpm=ORQ=OReWxG0E0u/XSF0JlMxElMAEOJ/EY=1EtWPWSEbEbNvWt=UJlj1JxW6JYMPEbEYElMAXOw0Ex5UWSF6JYWQWOw0WSRQXOvmE0=UWbJqEtRqEtJ/=YueEOwqE0N1WlsAExRQ=lNmXtivElW6=SwqJlRDWOsDW0Rq=bsPWti1=bW0WSF/EbF0=tMeEbpb=bW6XtEYEOWAXSR0JSUvXlpb=YNmE0NbEYiYWtNUE0iU=YJqJSM/ESu6JbM0JbMeExweExGDEbMQE0s6=tp1ExEmExUmE0sqEY=UEOG6WlEUJbvUE0JQ=OivJxW0ESj1JbWeJSWDEOivJb=YElueE0jYE0J6EYsqJYEU=SM/WbWqJ0RAJSMQ=Si1WtsqWOUbJlimXOwxExwx=YRQJSvYExWPXOU1J0u6EOJ0JYuqElJ6E0EY=lNv=YWx=OjbWOWqESwe=SGDJS1xWlMxXSRDJljvWlj1=OpYXt=bJxu0JbuxE0W0XOuQ=SNY=bvvWx5bJSR6JlM6=lRe=O=UExJQXlueExR6WOM6=b=1JxRAXOG6JSueXlsAJSJDJYEm=bsAXlR/XtsQEO=1=OH1=YEmJ0JQJSu0EOuq=OF6=lWAEbuxESjmEbJ0WOWq=lW6WxM0JS1DJbNUWb=bJSj1ESRAWSW0=SJ0=lJ/=ORQW0RAXtM/JYpv=bpYXO1AXSWAXtj1EYse=ls6J0MA=bUbEYiUESM0WtsqWSvUWSvm=YWeWOFA=OW0JSHvXSJQESGP=ls/WSGx=lEvExuDESRxXtiUWbu/ES5UXORAJSGxJSs6ES=mJlRDWOuQE0Nv=OvY=Ss0WOR0=OwAWxw6WSjYEbwQXtN1=bNUWOJeExFQJbwAEOjUW0iUXSGQExHYEtNmExJ0WOF6E0R0W0W0=SWq=SWDEbReW0RAJ0p1ESUbE0WAWxH1Elp1ExM0XlJeWSuPWlWDXOivWtj1WbM6XlJDJ0Wx=SEUWYN1ExJqWls0XtiU=bp1XSibXSjv=O5U=OibWbUmElpbXSvbWSuAWOR/EbE1JbReJlNmE0=1=ljvWb1D=t=1Eb=1JxWDWtu/XO=mWtJeJb10WxJPWbu/EOjUWxi1Wlu/WS=YESw0W0WxWYRxWSpb=OF6ESUmWxjmEYueESFA=ljbWli1EOUvExHmWO1PXtM0Ex5vEbNUWSvvWSu6ES1DJSEUJxUUWxHUWO51WSW0XSweWxF0EbivJSG/ExJeJbRQJYEmW0RQWlW6JYpYWx5UWtW/JSi1=buDEOu/XOw6JYE1WbpvWSJP=ONb=SNYWO=bXSNbXSW/WOsDElW0WO1/Exi1XtMDEYpYWbu0EYsxJlMAWbp1=bGQ=OMq=SJ/Ex5vXSsDEl=YWSJeXSH1XS10WOWAWbWxEbJDEOseXtsxXlibWbReXSu6Etjb=SvYXtMeESEmJYsPJxuqWtsQJxNUWSRQJYNUESpbEts6JbMAWbsQEOs0XtEbWSN1JSibExGPEb=UXOU1Jxs0XOsQJYuPXORPXO10J0EvW0NvEbHmJlW0EOsqXOu0XOUbXlRxESwxWxvvWtuxEYs6WxF/=luQEOFDJbpU=lu/WlW6JbUvEOM/WlE1WxjvEbjbE0u0J0WxEORxJYWAElNb=bU1=tsA=lj1ESjYXtMe=lRAESJ/ExW6JSNbWbEYXtEU=b5UE0=YJ0u6WYuQWlibExwqW0J/=bM0=buQWSRQWSUmJS5UWSwqW0WP=SE1JxWQ=OJQWYWA=Ow6ESweWYjU=bibWtWQEOUYElJAXts0=YRqJxwxXSM6ESRe=OUvWlRDXts/Etp1ES5bEbRqESMxWONv=lsQXOMAEORAJxRAEx1D=bjm=bpYEtuDXSvUWli1=bwPWSUvXt=YWtueEtRQWxi1J0sAXtjmESGDWxwQWxNvEtN1ESEmWbRAXlsqW0j1JSu6ESwqEbGAEbvU=lEUJSpbWbRqExuqJSibJlReWb=UWYjUWbJQJlWQ=SpU=OWq=bu6=tJeJxse=bWDWtR6XOpv=tp1WOJQXtRe=Sp1EtMDXOw/=SMqJbReWb5YWluAJYNmWYRDES1P=Ow0JxMqEbGeWOvYEtNmJxFAESsPExG0=SuxWYiUXOWQ=S1AXlWqEbNv=SMQESJ/JYsq=OF/XSFD=luAWbwqESsDJlWAXS1eESReJ0Jq=bi1=S10WOFDJSvUElWP=OpbWSN1XtW6XOpUJYs0J0JAExWAWlMQWbpvWb1DEOWQElJ6=bwAXlJPElpmE0u6EYWDW0=1EOiU=b1qEOWDE0N1WOJxWbW0WSWxE0MeESUbEO=bESiYWtMAJxW/WORx=lM0JSFQExHm=bJPElRAEOF/WtW0WlJ6JYNvWYWPWbsQWSwAWtRPWOMQE0uPEbG0Jbu/XSReWOHmWtWqXtMeXtJxXtMQXOUmJb5UWbwxXORxWOwAESvbEtWPEtR/W0sPWlM6=bWDWb16Wt=bJ0=UExuDJYJeXSpv=lNmES5UEOWq=YRQJxMDE0WxXS=UJxM0Jx5bJxG/Jbp1=Sj1=lNvEbHv=YsP=YE1WOp1E0EmWSiUXSFQWS=UEtMQWtjvElWqWO1AXOv1XOEv=tpUXSR/JSR6=tWDWYMQEYEU=SwQWO10WOuqXlJ6=bJ0WxFD=tiY=Ow0ESMDE0M/WxJPWYpmJYi1Wb=1WbR0Jxi1XlsA=OwAWbJ0=tWDXOJ6=S5UXtW/Ebj1JlNUWluqWbEmWOJxWSWQE0M0Elp1ESReEbwPEbGAWtWP=tNmWbF0=OMxJbFPWljUExpvE0M6=tjbEbJxJxN1=tJqXl=UESR6ES=mJ0j1JS=YWbsQXS1xEOsDJSwDE0MAES=m=lpU=OwQE0NmW0WA=SW6Xtu/=biUWOuAWtuAElRq=SpvXtRQWxw6WONUJlu0JbNYWbGAExFeWxF/W0RxWbJ/Wxw/WSuAWbGeWlueXt=b=bvbWtWQ=tsqWxJeXSGDEtR0XSGQEOs/WOu0EYuxEYsxJbibEtNm=YsAEtEvEY=1=lJAEbsq=SuQJSj1WxRx=b5mJb10=Ow6WbWDWbJ0Jx1QWbJxWls/=O1/XSuqEYEb=YMqWxw/WtJ0WxMqWbwqWSuQXSG6WYNmWOF/WxJ/ESwAJbUvXti1JlseJx1eWtE1=YuD=bFxEOpU=lR6JYs/JxNvJYWe=bvmEYp1WSWqE0RDJSMqXljbXSs/XlWe=OpvXSGxExHvJxWAExN1WxwDExsqEbuPXlJQXSvYJSRQJbwqJl=vWORPXl=vW0uDWYu/=tMxXSEbWYjYExG/Elpv=SjUExseWxGDEONvWxReEOw6WlJAW0sQJYs/WYs0JSJDEbJx=SM/JxUYWSHUWb1P=lRQ=OMeWtuqJx1eESHY=buPEti1EYE1WbFeJ0N1EbuDElWq=SR6EOUY=SuDWbjYJSE1Wb5bEbF6=ORDWlJQJ0iYXSu6WS5b=tMq=SpUEOF6EbEbEtjb=Ow/JbFPElJ0WbWq=tu0EbjYEtuQ=bs/JbGAXOw/=bseJx1qES1xESR6Wx16=SR0Wbu0XSReEYJA=SR/WOJ0WxFQJYNbJYpUXlJqJSFxWYjUElWD=OF0JSuQJbwPXOw0=O5YExsq=SjUEYuQW0uDEbwqESiUWYJQEx1QESEU=tjU=Os/WSwQXtpvWlEm=SHUES1qEYueXSHvWxReEtjUJSuPE0jmElWAXOJDWOH1=Osq=SuQJ0MDWb1QExRq=SvvJxsA=buAElNU=liYEOMD=YjvWbivJ0M/=bN1WxRA=lpbWxE1JSvvWxWeJSsxJxJ6WORqXlpYXSjmEOEYESJP=YRxXlp1JbEYXt=mEx=bExEY=Op1ExHmXOHYES5m=tNvJSs/JlMxXSHm=OG6=b5YJ0WPWtJQEbMP=bF0JS51WbGPXlWqExGPJbFPEtM0EOu6JSweXO1PWSu/=SFDXS1e=bU1WxFqWYuDJ0s6WbUvES1AEtJ/ElWP=SGQ=O=YExE1JbpUEYEmESiYWtNmJYuAEOHv=luPWtjUJ0sPEOj1J0pUEOMQJxUmElJQWtseJYR/W0WxEOWQ=tuQEximExsqXSFQ=OE1=tRxWSGqWYMeEYWqExJx=O1QExuAW0i1=lWA=lR/EtMqJlEbElR/JbsAWOEvXSMAE0sxJSs6=tj1=O1AJ0sAEliYJSiY=OR0JSu/=SFqWx1QJxGq=O1QJlWeElM6=SUbEbM0JSjm=SUmJlWeEts/ExiUWbu6EtsP=S1eXt=mE0jvXOE1XOMDXtRPXtJqWxue=OJDElWDJlWe=YW0E0seWSHYXtWPJlM6WxJPJbu/EbFP=YjbWxFDXO51J0jYWtMAXS5UXOEmXt=YJSGqJbiUXtpUXt=Y=OUvWti1WliUWOu/Wt=1JSJQXSj1XSjUEtimXtNvESuQESj1ESN1=lMeWS=b=OuPEOsx=YW6=SUv=S5UEbMxElWAEtim=SRAWYNYXlsPXtW/ExFxJSpmJxwxWOimE0RxJlEbExwDESjUJbRAWxwqWbwxEOJPXOMQ=OF6WYWAXOsQXSv1EtimXSU1ExF/=bJP=SF0WbNmWY=mWxjvWbGAEYRPEYu6ESuDWS=U=bv1JbWPWliYEtE1WOMxXO5YJlE1WYu6JlE1=OvmEOUvXOu6XOEvWxRDJYi1XO=YWSw6Wbpb=SW/XSvb=OJqWtpYJb1q=OG/Wx1AWlEmJxs0JxJAXOH1WOU1=bJxWS1/EYNUExR/WOWQ=b=vWtRPWYi1Jl=vEOj1JYJ0JlJ/=OW6=SsqE0sxWYiY=SweEtjUJYpYXSUbESMDEOGqElN1EO1eJxFqJbEbWS10=OWDESRA=OsDJbHYE0MAEbweEYueEx51JxNUExjUWbs0XOG/Jxw0EOvmXtuQWbEvEOueE0MxJ0sx=Oj1=OHY=bEmWxR0EbwqEbFDEYE1ElNvWlMqXSMQ=liYEx1AWxvb=YsAXlJDJSwq=SRDWO1DEbJqXOWQWb1DJxwxEYRQEOFAJbibXlRDW0i1E0jUEb10W0sxESNY=bw6XOs0JlJq=tWPEbG6Elib=Ov1XO=mWOM/WlpUE0WAXOFQEb51=lMPEYNmJbJDWOUbES5vEl=vJbMe=bwQEYJeXtWQ=YimJSWqE0ib=SJ0ElNYJxwe=OJ/=Y=UWOMqWx5mJSJDWSNvEtEvJ0u6WbRqEb1eJYJeEbFD=YsxEls/=tuPWSRQXlR/EbpmExUmJYs6=OiU=bUvXtWeWYibE0NY=lpvWO=YJbwPJlMxXOE1XSGAElEY=SFxWYsDE0WxEOsDEYNbEOiYEtJ/JSibWlsDXtMqXlRDJSF0WYW6ElJeWlu/WlMAEtNYJli1Exu/WOEbWORD=OMx=bFQElNU=YjmWxNmWlp1=ORAWtJ/XSRA=tiUEORe=YN1WtEvEYMPExG0JxJeWOM6EOuQXOFqJY=vElu6EON1WxEUJSpUESJA=S1/JSwDXSF6J0WxW0pYWbs6=bR/WxW/E0ux=YEvWOiYJS10=bRQESE1J0NUElW/EtseEYMAXOMqJ0EvXSM/=YJPEOW0WbNUXOGq=O=UXtNv=lp1=SFDJSJPWOFqJlpYJbu0JSMqJbF0=YJPJSsxWYjbWSpYWSibXlWxXl=1E0NUWSNUWSR0WtW0ExHvWSJxJSNUWYWe=YRqJ0ueESsqE0iYWlRqXSwqExMqWlJqWOGxXSW6WYN1Eb1PXO5vWSsxJYseESFAEtimW0pbEtuQEtiU=SN1EOiU=bWDWSU1Eb5mES=UEtjmEbGQEbpm=SpbWSFDJbR/EYibWl=UWS=bEbW0EbpbXO=1=YWPEbjYXt=Y=lM/JSJQWSwDEYWDW0JDEOHbEbNUJbE1ElEYWbM/WxRAXO=UEbu6ES=bJbjUWtpmESJ/JSFD=YE1Wxwe=bWQ=O1qXSW/=Os0XSJD=OM/XSvbJb1e=OWeWOReE0u0=SJPWYsPJSFP=YMPXlM0W0JxJSGQXOG6EtEvWb=mEOUYW0uPExsDEOM0JSFqXtiUJSimXlW/JYux=b5m=tRPESueEOReEtMQWxUUJY=1WSWqESFA=bGeWYpYESRxWlWqWO1PWYMAXOWDExEY=lsqWO10Wbvb=bHUWYjmWOwPWbR/XO1q=tMPWbuPJbGx=YpvWb=UEbs6=SsxEtueEOUb=lpv=OJ6JbsPXSuDEOsqWxFA=Si1WlJDEOs/EtW/WOW0=bN1EY=UXSwPJxjUXlWAJx=bXOGq=bR0XSiUJ0pb=lRDWtRQJxEmEOH1=OseJSU1XOG0JlRqExpYWxiUESMAEOGAWxNYJx1/XSiU=YsQExJD=SRqXOs6ExjmEbM6EYsDEtEvElsqEbsxWOHvXtRDElJe=SHbExMPEliv=YpbWYW0=tJqEOWPWbHmJbJeEOE1JxHY=OsxEtRAEYM0W0=bESjUESiUWOwxJbGqWbwAExGx=Y=vEtpv=bsq=bs6WbR/Wxu0JxEYEOM0Xlj1WONbEO=1=OFDWbMx=O1D=SJ6JS=UE0RQXlu/WO5mJxJAWljYW0NU=bJeXlJxXtpmEYsAJSGeEYu/Wl=1=tpUXtNvWxwPESp1=OjmXOiUES1PWtMeWxvUEOJqJxMeEluxE0J/=OJP=lJxEb1QEtjY=OEb=bs6=bu0XSRDXO=m=S1e=YWqWbWQEbWAWbG0ExFxJlWQEYEU=tuDXtMAXl=1WtW0ESHUJSNYJSE1JbWPXOWPWxM6XtsQESpbXO=mE0u0JlEU=lu6=YRqElEYXtpYWxpUWxuAWSFDWtpbJYJQExwQJYW6WOF0E0=b=lMq=SMxWtJ6ExNb=tEUJ0u/JbHvESHbXS1/=lu/JbvUEbUYEbHY=SwD=OW0EOMeW0WxWtNvJbwDXlsAXtpvWOGQWxF0WSpvWb=bJxibWtueWtMQJb5YEluqXO5v=Sw6Ex5Y=bweES=mXlsPJYMD=Ys0XSUbESiYJbWqJbFqXSMqEljY=ORP=lp1JlE1WS5mWSueEluAWtRQXliUWls0JbMqJ0j1JlN1W0WAJ0WqEbjU=SUvExpmJbu/WtW0WtJqWlJ/=tuDEOR/XlW6EljvWlRQJ0ibWbRx=tEvXO5bJSj1XOi1=YEYXOjmElpvWljvJxWAWtu6EYseXOuxWbUbJxM6Xts6=OMQXSMQWYW/Elim=Y=bJbEUE0i1WtpUEluQWtjbESE1EtRxElReWlWq=Os6JY=1ExUbWOR6=tEm=OGQWbNmWOsPWOvbEbMxJSJeJxseXOWP=bjUEbMx=lpbWtRAJYue=bUYWYuD=OFQXlNUJYi1=lWAWxGAElMq=OwQXOjbExFAXlMqW0s/EO5b=OW/Jxpm=SUYJxGDWOFQJlNbXlNmWOw/WxMPXSRxE0MAEbHYExjU=Y=1JbHYJbH1Wl=vWtjvEOwDEYEmWbJ6ExibEO1/EbEvJSGAJlNYWt=YEYjvExM/JxvmWbsxEx5v=YJxXtjYWOi1=SwQWSpbExs/Elpm=S=vWbH1=YRx=bEYJYux=l=YXlueExu6XtWqESWAWSjvWS=mWxRPEbJeXlR6=ORDJSiUWxibESiU=SuqWtR6JYJqWO1eXSGqJS1q=bFQJbsPEOw6JYNmJ0Rq=SwQExF/Ebs0ESUb=b16WYW0=SRQ=YiYJ0jUJxFQ=YsxESwQEbJqJxuAJls6Jx1qXOFxES5UWYivWls6=bFQJbR/JbFxJSJDEtNbExJPJxMPExwxEYMqXlMeJlW6EOWP=OwAJYp1XOWDWlWAWOs/JYjYWOEvEOvvW0JPWOHbWxFeXSJDWtjmWbGDJbW/JlsAJSG/=t=YJlW0EbHmXtseWtsQWSNUXSRAJbWQElpmJljU=OwxXSRe=ORQWtRqWYWxWx1DXOUbJxRQExjmJxFDJbGeWxHUESFQExJx=Yp1WSW0ESM/XlMAExGAEYivW0uAExG6EYsDEbJeE0s6ElEvWb=Y=bMe=t=bWxHmWxWDEYi1JSGQWYMeJxGeJbuqXOwqESNbJbvvJlR/WtuxJS5UXtR6=bMx=tJP=bw6=SRx=O5UESvUElRD=lu6=O=vWlNU=SUmXlEYExjUWbR6Wb5bJbNbXOp1Exp1XOGxEO1QJxGPJxjvJlsQ=OjmJxHY=OpmE0pYXO=mJlEmWb5YE0RPEOs6ESvUEbJqWbjU=O=1WSM0=buPEx5YWOJx=O5U=YNUES1P=SMA=OR/=lE1XlRPEbFxExJq=tMPE0seWSEm=YEYJYN1EOsxEOF/Jx1QEYjUEOuQ=SWqESw/XtEmWSw6WOJ6ElNbEO=mESG6EOu/JlWeWb=bJYR6WS5UWS=UXOJDEO51W0WDXtJqEbw0XlR/E0MPEY=UJbw6E0sPXSU1WbFAXO=b=luPEbwP=OGQ=SM/=bGxWbEYExGDWbsDXtjYXOGxEximWSsQEOGxWtEYXOFDWYMx=lMAWx1qWlJ/=l=YES16=Ou6Jxw/=bW/=bs/=OEb=tMqWOu/Exw6=lEmES16JYsPEOHmXS5YEYsqEb16JSpmWbsQE0seXtj1WbFA=SjvWSEUWxuPEljUE0J0=SGQE0MAXtRDESEUE0=YJ0R6ESFeEOMQWOsPXtWPJ0ibWSW/JlMe=OimXlsqExGAEbpU=lj1=OWAXSGxESiUXSu6JbjmWxuD=SsQXSpm=Yi1ESU1=bM6JlsxXOv1WS5U=O1PWxpm=OR0JxGP=OWDXtNvJSw/=lpUEtsxElNmWxsQEtNvE0MQE0EUEtEv=bFqESuPEb5UJlseWx5UJlReEOFDJYs6ExwAXORx=SRxXlMeXONmW0MQWbpY=YW0WSwxWxJ/E0J6XS1/WSJDXlWAWSpY=OGeESH1EOvYJYMQEximWtN1EtMPJSRQJYuq=OR0WOsAWtWAEl=bEtjY=YiU=O5bJYj1WbvvEl=1WbR/W0RxJbw6ElWxEx51XSsQWxRQExiYJSNm=S=vEYJ/JlRqWSWDWtWPXSN1Elp1=SGqEl=1JS1Q=tEmJSjYJSvU=tsxXSsAWSwQJSj1ESJP=SHvExHUJSM6JbJxJbwAWlsQEluDEbEv=bWxExw6XtRxEYMqXtEmESsxESJQEOJPJ0RqEbG/=OvmEbUUXONv=SuxEbwDJxWA=OvbXOJQXO1e=OGxEtjYXOWDWtWqEbR/JlRAXtsD=OFxJ0s0=Ss0E0jbJSjYWOwP=tJ/Jbs/WYM/=bWPWYsAJlMPEOJ/WSJ0EOv1EtivWORe=SweExG/WbWDWSwPEtpmWOWQElpmXSu0=OsDJ0R6Ex=YEbU1=lMAEO5U=bwqJ0uDWOu/XluQJbGDEbw/JbuPEtu0WxG/ElRPEOwxXlJxXS51XSMA=bwPWlMQWOWqJbEUExHv=lJ/WxFAE0EbWOw6EON1JbwAWON1=bF0=l=mJl=bJSvbEOJAWSUm=YpYEbweXlJeWYRD=tRP=YMA=SvvJlWQJbWDWbHYJSvb=SweEtRqEOHmWbvUJ0jvXlMxEOJeEtuAEljmW0uxXOJPXSEvE0s/=OuQEtW/EbseEYRA=SWP=SFDESuPXO1qE0W0JY=1W0JeExR/WxNvWSJ/=SF6JlWA=YNYJYi1WxFQWxpUElJAE0M6XSGeEb10XS1qElR6JSs0E0RxJbw/JSUmEtWeXlsDJxR6=OMxWYseEO=bWxM/WSpvJbJeJSNYXOMD=bsqWb1/E0JQJ0RqWYs6XORDEtuxXOGAJSJQJxR6WSGxJYNYEOFe=SsDJbGD=SNUElR/=OG6JbJeWYReWSu/WSs0=SRQWxEUEOG/EYR0JbNmWbpbEYWA=SRe=SR6JxNYXSG0EtM6W0N1Eb=UEY=YEYiUJxUvElsQ=ONv=bpbJlib=lRPXSMxWxiU=OG0XOFeXtu0EOjUEYpvWluq=tibExiUWOWqWlE1EOEYWYpbWOwPJbFe=ORAJlW0WSs0JSFqXS=UEtJ6JYM0WYW0JbF6WxGxEl=Y=lEUWSJq=t=1Ex1xEbw0WOv1=YjmWlJeJbj1WSu/=bUv=Yp1Wxu0Xlu6EYEb=YWPW0NUWbJeWOivJb1x=lMe=bwAEtuQWSjvWbRxExW0WtMQXOs0=SF/WlNmExvUJbuDJYR0Jb1/EYWAXS5YJSMAWbM0WOGeJbwe=luDE0W6WO=1=lux=O5YWO=mXO=b=OJQXSpvJbsQWlib=OF/XSpbESMDXtNY=OuAWSw/W0sDWbwqXtuDEbpmWYMqESpmExwDWYMD=tR0WOibEYue=bwAWtsAWbibW0=bJxpUWOsQEbGAJY=YEluQWbFeJ0MAJ0W0=SRDXtWAJls/WOwA=SuPWOFQEYu6=SuP=tW6=ORQExJxJls/EljvJYpUEO=bEbue=S16J0jvJYJA=SsqExwA=SvbExF/WOjY=tsDWSWQ=bM0ESs6XOEmJSNvWbsAJS1xJlRxWYMDEYJeJSjmE0NmWtjUWtRqExFeJSRDE0iYE0uQWxJDW0s/=OMAXSvmXlMqE0JxXtux=lMAJxs0E0u0EluQJSJPWxUY=tWQXSUmJbuqWOJPXO5mWtEbJSwQWbwQXtReWxs6EtsAWlseWOHU=OvvXOWQWbUUJSjYEYp1WOu0EOWAWbHY=ORxWOsDXtRPJxW6XOEvEYjYJY=Y=bwQXSivW0u6XSi1WSwxXSR6=O=UJSHvEb5vJ0RPExvbW0sDJSJQJ0sq=tWAJxivWlWPWOGAWlu/ExEmExMxWYu/WxUYEOpYEbJxJSux=S=1WbpYJSuA=OvUJxs/JSJQWSEYWt=bWYReESwAWb=U=SwQWtNYJSUb=lpbXONbJS1PXSFQJ0J/JlsPWYEUXOuPEOuDJYNUXlNmJlibWYW0Wl=UWbW0WOUvEtJ6EbiYWSseWSNbJSGPEbu/XtpYJSs0WlEUE0MQWlWDXS5UJSR/ExHm=SWAWlsqWbp1W0J0WbvU=tNbXSG6ExEYJx=1EOW/WbRx=YuQWxNvWtpbEYW/XlN1WtsAXSF6EbG/WbwQ=YjYEbMxEl=YWSjmEOw6XlRxXtRAEYJ0JbwA=b5bWOuPXSW0=buDE0JqWORPWb5mJSWqExjbWx5vElRq=bW6EO=U=bsDWOsQXlMqXOG0EbpbEbsQJxF6Et=1JxM6=YWDJlR/=SMqJxFPJlRPWOpUJYsPWbuDWSivEOueWYiUJ0NmEbEm=bFQ=tibJYMqExEUEYs6WbN1WOJqWlW/WbM0=bJQJSF/WxvmXtseXtEYJxs0JlJqEt=mEYs6XS1qWSwPEtW0WtR/EOUbEOiY=Yjm=Sw0Wb1D=SGPWOHY=b5mWtp1J0u/EO1PJbimXSw/WxEm=bseWxuqESs0ESu/WSMAXSseXORP=S51ExEYJbwq=Ou/WYsDWYjUJbHUXSReEYJqJxJA=ljm=bwq=Y=bEb5bEbGQEOsqXSwqWljbJSjvWx=vEOJeWOuPEb5vXOMq=SseJS5bEbJ0EbRq=lWe=YuQXtpU=OueWYNYXtWPWxR0WxsQJ0WxWlMDExEm=S1PWxR/WbGqWSjbEbJPEYj1WxM6EtsPJxWeWluxWOvv=OjYWSvvWSJe=OpvXSwxWbu6XlReWS1e=SMqJxvvJxiU=bsQ=tuqWbsxWOFDJYEYWYMDEtuPWlRQElRqXOEYJ0JeESUbXOMPWbjvEbNYWbU1XOimW0MDEbsx=OiUXSMeXSib=YN1ExJ6EY=YEbjbWtW/ExM0JbMqXtivXlMQEY=vWO5vEbs/XOs/XtEYWb1qWO=b=YE1EbFPWbMxXS=UXS=mJYWPJbiUE0J0Jx=1WtWDWSFAWSRDXl=mW0MAXlsqJbRqJbj1=O1QEbibWbFeWSj1Wlu6JbNb=tJe=Su/WSuA=YWeXOFAWxW0ExF0=tpmWxuDWtu6W0seEOJQEbHU=SHUWOGQESw6XtimJSse=lE1Ex51WSs6XOWx=Y=vJ0J/WOJPWOGDWxuxJbibJlE1WOWQJS=UWSFAEbJqWxu6EYp1=lM/ESse=SFDJxNYESwDWOi1JSiYJx1/WbH1JljvXSMqESF6XO1e=bHmExNvESGxJYJqXORDE0M6WlsDE0RQWORqW0EYEbRQXtj1=lJ/WxFq=YsDWOReXOUmE0W6WYsAExFQESM/=tMP=OJAEluPXlJD=tNYJlsqEbU1Jlux=YNbXOiUElib=bNv=OFeEtEY=b5mWOF0ESseJb1xJ0sq=OuPElJDWxs6WbuqJS10EbuDWb5UJ0R0=S10=SJQ=YsQW0uAJSEYJxi1W0uD=Ou6JlJeEts/WOuAESJAXOuPWtReEbMqESNYEtJqEYsqEti1XOMxWxGDEbF0WtMeJbNYWlu/=lWPWO1xWbw/WbwDJ0uDJxW0=OiUJbGQ=OWDXtjY=SN1JxGxJSGQJlMeEOpUWluDElJP=bF/J0Jx=OF6JlEm=lsQExEvJSiU=SG6WlpbEtJ0WSMxEONvWxRQESu6EO1QJSiUES16W0jUJSGAWONmXOJPJbpUJSWeXSR/EbvbWSuPEtpbEbjY=S=mWYJeXOEb=O1D=lRqWOjb=bwAJbFqESGxJlEYWx10WSuDWOR0XSGAWYMqESseEOwAESibEbsxWb5bWxs/EOEbEO5vJxGqESF/JlE1=Ss0ESHbWxF6WSMAWOFAJbGeJbuDEYuPJ0EbWOwQ=lpYJxuQXSuDJlpvXSs0EYi1XSFDWORxJbvmJbReExMDJS10WSFxJlR/XSM/JSs6ExwA=O=YWSpbXSiUXOwDE0MPWliYE0uDJlsDE0p1=OwPJbUU=bv1WtJqWtJ/EljUW0sQEYuAEtJ/ESWAJliYXljbXOW0XS16WbjvWOWPXluxEtjUEtuAESjmE0Wx=liUWbu6WxsPWOHvJlu/=lRAWOjUWSHY=lJe=b1QXOMQJSpbJxRD=libXluQXOWe=lJAWts6JSw/WYRxWxRDEOuAWSR0=bw6XSuqExMPJYu0WlRxXSJDEbuA=bue=tMAWORA=SFQWSNUWYsP=Ow6JlRPXOiUEOJDWYJQ=l=bWbueWSGPElR0XSjUESFDElWq=SpUESvbE0JeXOW0=luxJbpU=lNvEbMx=luPWtEvEOjmExGQElsxEbNUXSw/JYWqXS=vWlJ0Ex5vWbGAJbwPEOW6JxW0=S1xEx5vEb=YWYNv=YueExGPESiU=SRxEOiYEtuPJ0JDEtpmJ0=Y=timExpUXOv1EbNbJSR0EtEbW0s/JbM6WO5Y=l=bXtR/J0Wq=bU1WOUUWORqESvm=SUbXtibElWDXSM/W0j1ExEv=OR6WtibJYu0=YNbEbRAXlJeEON1WSivWbFxJxR6Wxvm=SNUWtsQEbF0JxRqE0MeEOsAE0seWxJPJxF/EOvUXtNbWlM6WtWQXOJQJSM0EbiYWb16WSvvEYRqWtRqWYMQJbivXSF6ElsAWSWPElJAWxGAWSR/=SsQExuqXONUJSUvJSGqEt=b=bJD=SiYESjvWOMPESwqXSM0WtuxXtW0XOUUJl=vJ0uAEO1P=tM/EbFq=YWQExpYJSJxJxpbXlM0Wbs0XtimESEU=SMeJxw6WxM6=OUUW0=UW0u0WSv1JxpbElEvXlM6XO16ESJ/W0W6EluPWYJQWlsqJbi1EYW6JbsAESi1JSuqJ0uxEY=mWYibJx5UJxuDElR6JSi1WOsQ=tWeE0pYWSvUWSi1WxvYEONmXlMxWtRxXOjYEtuDESM6E0seEtJ0=SRPXlsAWSw6=timWt=mWlRQ=tEmElsQJSReJS1eExMeESseXSFDEOwqElMP=tu6JYuAXSJQWYJxWSwDWOFeEOR6=ONmWYjmJljmWxRQEOEUXOseWl=Y=bHvWSMeJb1PXt=UEtjY=bEv=tpbJli1WlRqWYim=lJ0=OM6EbRxJSvYWOMxXORxJSFeW0Ev=SwDExjUJSF0JlNvJx1PW0u/XOsQXtuAJx5bWbv1WS=m=Ss/=lNYW0M6Jl=YXOMQE0sxEbpUEOvYXtJDWlJeXSJqJ0ueWYpbWSw6ElW0J0seJxuDJlNm=OsDJlEUJSFPEOGDWOueEbJPJlR/=tWAWlNmXtNY=bW/WxGeXSu/WSWQ=Yu0EOjYXlpYWxNmJSp1Wx=YEYJ/WxwDESNmWxpU=bsDWbvmJ0W6ExR/=bF6ExM/WOEYE0M6WSvvEbj1J0ibWbRQWOpbExW0=SJ/XOsQExMPW0NmEbG6WtMD=tMDWSJ6=bR0=Oue=bWPJ0pbExRQXS5UXON1JbJPEYsA=OFAJSFxXS=UWOR/JbHU=SsqE0J/E0sQ=YMQEtpmW0EY=lNYXlW6=tJPJxu/XSuP=YM0WbW0ExJ/JlR6=tNUXtMPEb=1JlJ0ESUbWx=mWtpbESwqWSw0=SH1=SvmJxE1WYMQ=SuDWSsxJYp1W0ivXSEUWOpYJxwAJbuQEluDWxvUWtEv=bpmEl=bEbGAWSuA=bEYWS=1XlMDWbuP=SpYE0i1Xtim=S=bWtpUJbMPWlimXSjYXOFQXS16WbM/JbF6WxEYESE1ExRq=SHvWxJeXOGeESJ/WSu0ExsP=t=1WxWqJ0E1XlJ/ExM0WxGqWS=v=SW/WxM0ESvmJ0JD=bRAEYRPWtWqEOW6JlWQJb51=OFxWSWDWb1/XSjU=bRDWts0=Oj1=luxE0=1XOWeWSp1ESFDXluPWbu6=Yiv=SWx=tM/EtR6Wl=UWximWORAWlJqJSw6WOE1=SR/WbN1ElEb=Ou6Jxpv=SJD=SvUJxiv=tR/WlivJlNmEOuqEOEbJbuDWx5bESHUWx5UEO1/EO1AElp1WOiUWSUY=tEvWxwPXSE1Wb10ExM/WSF6JbuAW0EbXOJ/ESFqJ0s/ExpmJY=b=YiYExMxExW/JSFDJYJ0WS10ESNbEOw/ESjUExMPXOs/EtWDXtE1EbvvW0pUJ0u6=bMeEOUmJbU1EbsAXOjmWOReElR/=bvUWSRQEtjvJYM0EOM0EbJ/ESw6Ex=m=O16Jlu6J0sPEtN1XSvUWSuqJbu6=lJQJx16Ebu6=bFxW0NvXSuAESUYElRDJlWA=SRqXOMxEbReJxH1J0u/EtsDXSuAWOGq=Oi1W0=UWtJQ=YJqJluQEYpY=SRPEtJxXSUU=tRxEYNvJ0RAJxHbXlM/WbNUWbj1=YWqJS51EYjmJxRx=OvmWS1eXlM6ESw6Wxw6=bGQ=bF6Ebs6XSiYWxGxWOHmWxsAXlReXO1e=OJPEbuAEOweJxsAJbuxWOu/XSWxExs0WlseE0s0XlRPXSFPESNY=YM0Xt=b=bjv=YNv=YNUWb=bW0MDJxvbWSuqEOJ0EbW/WYEbElu6Jxj1Exw/JSFA=SMPEYM0ExGPWtJ6WOE1EYsqWSRPWtMA=Sp1=tuAWt=YXl=bWYW0W0NvJ0uD=SpmExR6JbiU=SpmEYjbEtEY=tuDEO5vWO=1=bFxWYNvJxvbWSMeWYuQWYjbESGxWtiY=buDE0u6=Y=b=SRA=tsA=YM/JYWDJbuAE0pbExwPWYjUJYR/JSwQJ0R6EtMxWOWeWbGeXtibWOvUWtiY=bweW0MxXSw6Jb=UJxFeWxvm=bU1EYN1=OJQ=ORAEljmWYJDEOs6EOHm=SJxJ0WQ=luQWOjmEYM0Wt=YJl=m=bweJbwxJxG/ESH1EYsqEx1/XtuDXtJP=SiY=bFx=lu6WSue=lRx=lJeWO10WlsDXSRD=tjYESGDElj1ElEUWbpUJS=m=SH1WbFqEbp1WbEY=YM6XSsQWO=mJbWQ=tJx=Ov1WSpUJYJ6WOEvWljm=bwQEYjY=SNb=tM6=Ou0XSFQXSUU=bFDWl=1WbJ6WbW6EljmWS5U=OuPJYRQ=SuAWSNvWlNbESRQWSuxWbRxWxRe=tjUJbwqWSMPWOMqJSNmEbvmJbW6Xl=bXtpbXOuDXlWeEYux=bNU=bNbWS1PXSMx=OM/WOGxWOWqJbvUWtM6WOuDEl=bExsQW0JPJSJAEOFP=luQWYjvElEmE0pbWSN1WYEvJYjY=OJQ=S1AESsqWljm=YsqEbwAJxMq=bJPJxuPJb1/=OEmWO=1=SM/WxHb=biY=tR/ESs/=lNbESEU=YWQWOEvEtpm=b=mESs/XSHUXSGAElueExMDWSwxESWAExM/EOFeExGqEbvv=YMeXOM6=ONY=OFQ=lMPJbUUWSWA=Su6WS1/WOi1EOFQ=bF6EOs0J0Nb=lRPXlEvESF/WSGqWxJDJSNb=tNvESN1JxMP=Su/ESue=lsAXtEbWxFQExHvEtuQ=O16W0W6WtNvEYi1JxRqEOv1=ONYJxReXtJ0ESFAXO1A=tib=lReE0RDWOEUWOGAESRxJbF0XtWPESM0Ebi1XtJ/EOJ0JxG6=SEvJxRxXtWDWtuDW0E1WlNYJY=bJbWqWb1eESjU=SFxWOJPXlpY=SjvXSM6=tMx=tM6XtsDE0jY=bH1=ts6ExpmEtJ0XSMAEYRPWSGAEbR0WlWqWOW6WtpvElR/=lRqWxjYJYMxWxj1=SUvXSMxWtNUE0RxWSR0=SueJbRxEYJ0JYpbEYW0EtMPEOpmJb5vJ0Mx=YsqJxEYJlimJSRDXSM/Ex5bEbUvWYEvWxNb=bJxWxRQE0RA=lEYJlEbWOi1JY=1Exv1XOs0Ebjb=tpYESsDJbsAEtuDEOpbEbuAXOW6W0NvW0R0ESRxEt=UXOHYWxJ/=lim=YRqJ0MqXO1PElp1JbFQJbFP=YjbEYpm=bu/ExWqWYuA=S1PXOjmWbEYE0J/XlEb=Yjm=OueXOFDJSGAXSG0WlEbJlJAESiYWxwA=OJ/EOR0=tivWlWxEOvYWlRxJbR0JSs/=ONbXORDEtWAWbseWbFAW0J/J0MxEbR/=bJPEbR0=tJeEY=vXOFeWO10E0JqJluqJSpmWb5vE0iv=tJAJlR6EOFx=OG6WONmXlMPEbuQ=OuPJbuqWtR0=YN1WbFQXtjYEYjvXtpmEOW6XtR/EtReJ0EvExR0Wljv=bR/E0MA=OvU=SMxJlJeXSJe=bMPJ0E1WOGeEYW0WY=mW0ivXlibXOseWSEbEOuDWONYXOvvXlWPXOH1E0sDJ0EYWx5Y=lNUJSJAWtpbXOivJSNYWx5mEtMe=bN1WSFPJYs6W0MAEx10ElR6ExNv=Sv1Wx16XOuPWSsqWOUU=OWPWx5bWxR0EbR6WSsDEls0WbMQWbsPWO5YJx51Eb=b=tWD=SMDXl=1JYJPWts6=OFqWtjYJ0N1=bsPJl=mEO=YJYs0=YpmE0R0=SN1=SEvWx=mEtWAESGAWx=m=bMQJSFeEOuDE0uPWOF6WxM0=lu0WbW0XtWAWbpYE0J6ExWeWYReWls0ElJqWOR6WSiYWtu/WYuD=t=UElp1=O5YEYEUWORq=tR/Jb16ExwxExMAXOHbWSuAJxUmWbRxEbse=OseXO51=tsDWlMqJSw0JbsxE0JA=Oi1J0ReWbjYEOFPWO5YJSR/WOUmWOsxXtuAXONUWxWAWO=UWYse=Su/JxwqWtMDWtNbWS51XtjvWxHmWxRxXSFeExGqE0uPEtMDE0s0ESWQJYEYW0WPWxMDWxWxXS10JbsQ=OGQWxG/EbUYJbv1E0EbEO1DEOMAESi1E0MP=lRQXtJe=SjmWxwAJSuqXlEvWS1QEtpU=Yu0WORDEb1/ESNYWxGDWlsqWtEvWOMPWOFDExG/EYi1EYWQ=bG6WtNvEtJxWSGxJYE1EOMqEYEUXts/ExGeWlpbWOJxJxsDXtp1JbHYEOi1EOw0=tNbJYpYEbHvElpbJljmESwxESsAXtW6JbRQExW0WSU1Exv1WOGQWOwDEb=1EYEmEYu0XlsAWYu6Jb5UES1Q=SMQWtJDWOGPJxi1=tNmEONYXO=vJSRP=bvmEtpY=OEvXOi1J0W/J0seE0sQElJDEYJqEOR6XSj1Xlu0=bs6=ljU=ORPEYJA=SvUJlWqWxR/WYJPESUbEYjbXls6ES1P=OUbEOG/Xlp1Xtj1=bjUJbHvEbWPWtW/XOJq=SJDEYJPWOWDEbGDWxvb=b=1WbFe=OGeExw0XlEmJlsAXlpYWlsDWxEUESseJb1DWxHYJ0R0=S=bXSMxE0EvXlW/=tpmJYMA=OwPWlEvEO1eEbwAWOsqExi1EYjv=bHmJlEvJbseJxMqW0E1WOu/WYEmXljvJSjbWOu6J0M/EbJ/XSMxWluPESF0EbpmESM6JbuD=SWQJxRP=OR6=lWA=Su0XSwxWtRA=YJDJ0MqE0RDJ0MAXtRAXOMAXljUE0RPJSR6=bG6J0JAWbRxESWxEOGqJ0RPElJQEtsPWlu0JSG0=bJD=bJQJ0sDExM/XONbWb5b=bMeXlR0EYuxEOMPJlWQXOjmXlR6=SF/XOGqEb1/Eb5YWxUm=l=YWxNUJlM/EtuxESsqJYi1XOivWORA=tpYXtiY=SEvWtRxXOvmWbs0Eb1qExGPXSG0EbEUWlW0Ebvm=tWxWSJxWtR/XtM0WlEmJbHY=OM/J0pbWb1AExseWlMeWlReW0WqXSFPEOJ6WOvmXSHU=bM6=YJxWlWAXOEvXSs0=SWQESHbEOvUWYWAWYReWbpUEOHvJ0R/JbvbJxGeXlRP=SjmESuDWliYWlp1WOR/EOFeJ0RAExHmEx1xEYJDEOGPWSjY=ORAEYsPWSsqJ0J0EY=mXOGPJbuDEb=bXtpbExG0JYuAJxGQElN1WSMDJxvUJSWxESJAXS10Jb1PEYuDEYW6XSRDEtMqJ0sDExwAJbNUWtjbJSNvE0sA=bEYJ0J/XlibWtNvEOw6JbW0XSGPExWeWSWQWYM/=Ys6EbEU=OGQWxJ/W0uqWtsqEbW0=SwqWxNYE0sPWbiYEbM/EOsqJ0M0EtJ0XOW/=YjUJxvUJ0WeW0NvJSpb=YReXSwAExseWSGqW0Me=ljbEOMA=bF6Wlim=SwQXOw6WSGPWxG/=YM6ESRP=tsPJbR0JbHvW0=1WYp1ElJ/Elu/XtJq=OvvESFeESuPXSJ0XS1PExRDXlib=Ys/WYpmESEYElWeJSp1ESjvW0J0W0=1=YJ6XONm=Sp1=ljmJSRPWOjYE0MQXO=mWxp1JSWDXl=m=l=mWYNUWbpbWxGQElJ0E0EbWtR/JxGQEYimJxuxEOGxWtJA=SE1=YuD=OHmJ0s/JxRAExj1=bsqXSwAXlu6WxG/J0NbWtMqXljbExw6WS16EbJeXSweXSEbEtueXOwP=YsA=ORQ=bMQ=OJ0WYMDElMxExjbWtWPWOMDW0s0XOMe=OReJ0EvEONYJbEUEtuAEbMQJxu6=lJAEYR/EOFxXS5vWtJPWlpvJYEYWSGP=Yjv=SWD=lNvXSu0WYimJluqEljYEbUYEb1/WSFPWlMqXtWeExEU=SUbXSMeXSJ0Jbs/XSR0JSJD=YMqJSvYEbs/=buq=tJ/J0WPElM/JYMqWtWQJxpmXSH1WxN1ExJAW0=bJbWDWxJDExUv=SGD=bJqWlivXOE1WbsqWOiYEtRQWSvmJ0pYJxRPElR6EOW0=YRxWSRAWxseE0MAXtM/XOv1WORDEYp1ESEUWlWQJxReXOJP=SG6JlpYEOGDWSJ/=YMQXts/ElMAESNmElpvEOpmJbF6WYuD=ljmEOwxWxM/Eb=vE0MxXSvU=bNYWxHYXljbJYE1ExGD=lpmWOuAJbueXlW/=SuD=OFQJbF0WOuDJbHYEOEUExHvXtRe=SRqWOFDEbW/JbpUXOGeEbwQESFeEbseESJxJlJDJ0MxExFAEO=1XOjYWxHYE0j1=lE1EOseWYNU=libWlu0ESFAE0uD=YWeXSu0EtRA=YJ6Elib=Ou0E0pUWYN1EluPXOuAXlsqXOJ0=OReJSivXlR6XSUbExuDJSu0ExiUWYJ6EtsPE0MxXlsQJSs6WOM0ESG/=YJxExMqEtsx=OGeXO51=OsqWbNv=tsDWYjvWluqJxN1=tJ0JbF6XOWA=SvY=tRQEtJAXSWxESsDJYNv=OW/JYE1Jx=bWbHvXSjmXOMAWtNYWO=YJSGPXOiUXlsA=bWAWluQ=tEb=Svv=bM6WSjYEbFAWtW/ESFeEYuqXOFqJlJxWSuDJlMeJYsDXlsDWOibWbFAXSM0JSEbEOwAXlu/Xlsq=tR0WbvvWSs/JbWPJxWxWSjv=SJQXSj1Jx1xJ0Re=t=bWxGq=bF/=tjmWxEm=OpbWS5mExFxJbw0WYWe=YsP=SJ/WOj1Jx5bEt=UExpm=bJ0ElsxXtsxXSWQWbuQEtJx=bWq=buD=Sw0WYNUXOsP=SH1J0RqJbEbESp1=lu0XOMxWSw/=OuD=OEvEYs/WSuqXt=YWlJeEOivJ0MQ=Yu/=OsP=tsQJYNmJxWA=OjvJx5YW0MeXSU1EbGeESG0WYM6=lMx=Oim=YNbWOwQ=YMeEOim=bJeXSsqEb=YXSMPWlNvXSWAWSwDEOseExvv=OF/E0RqWSvUJxM0ESRPJYuAXtJ6Wxj1Jb=1XlEvWxJxWbvmWOvmEt=UWtW/Wls/ElJDEx1/=tRxEbiYJYiUXlsxXSFeESF/JYW6ExvmWbivWtR6XSJPJ0JPJbUmXlJ6WYsQEOu/J0pUJlWqEx1AEx=mEtW0Xtpm=b=UWYsPEYEY=tuxExu/ESW6WOseWbsAXlJeWYR/ElMxXO=UJSuDXtWeXOHUESRDXtRPEOGAEbwPJxFqWl=1WbNbW0EUEljYXlN1JlW6XSGAWbjvEbMDEO1xEb5mWbHvJl=mWlJPElWxXO5UEbH1EbMQE0R6Wts6WO16JxMeJbGQJxJ0JSuq=bUmW0M0=SWA=O=mJxWq=SGDJxjvXOse=lpmEljv=l=1WbFeESwPXlJ0JlWQJSFxXOpb=SwAEtuxW0u6WbsA=bWeESsq=bG0=SuDJbWPWtsDXlW0WSuQE0uDEtjYJSMQWlEbJS=YESEb=Sv1WxiUWtM6WSj1JbRqES1xXO=bXtWQJlpU=tRQWtJ/JSimEbu/EljYJSG6XOJDESw6JxG0ElJe=ORQXluq=lW6WtEU=ljUJbU1ExivJlWDWxGeWbF/WlMqESwx=Oib=SsqWtNvEb1qEbEmJbGqWSEbJYs/WS5v=OEYEtJeWONmXO=vJbU1=l=UESGAXO5Y=lWPXOWx=Ow0JlsxW0J/JbJ0WOw6XlJD=bMAWxjvWbR/ExFxESUbWbuAJSvvEOvm=YNv=bN1=bN1WYJeEOuD=SN1JbMe=tjm=SwxXSHb=SpbJbuxEbG0=ONvXts0E0ueJx16ExWQEbweWSHvWS=bJS=UESwqWxHYXOj1EYRAWYNYESiYXti1EbWAXSNvJSJAWSux=SjUJxWxESJ0JSEUEOJ6ESsAXSJ0EYsDWtJ/EYsqWbuPWSs0XSMA=tjYExUUWtJAEtRP=ORqW0imWluxXSF0JxW/EYjvW0iY=OU1=tibWbM/=ts6E0W/EYMeWOuxExuxJlsQE0jmWluQ=bs/JxRPEOEbJYR6W0MQ=ONbJSR0=ts6=Ov1JxvYEbjmWYuxE0=1XlNUE0seExNY=SEmWxpbE0M6EYEbESNvEbjbJxFPES1q=YpUXtuqWx1Q=lWqJbRx=t=vWYimXSFQWtWDWS51=tjbWtW6ESjbEbFAXlibJbGAEOR6WYMQWY=bESMqXSF/J0uDWxvYJxu6W0M0JbR6=tJeEbMQJb1/=tMQWxu0XOvUElpmWtNYJb=bESJ/E0s0JYWqE0uqEtWxJxGPW0JPJxuPEYM/WSWQJbGPJljv=tjvWls6JYW6=bsDXlW/XSWPJbwPExWqXls0EYR0XSs0XSJQEYpY=SuPXS=v=OuQJxwA=SFAJ0jmXSHYWbvm=Oue=S1AWYu6JxHYWYjmJSuq=bFQJSRqJb1qEtM/=SW/EONv=YR6EbHmEb16WYpm=b5m=lE1JYpU=bRAXOFxJYpmXSpbJbUbJxJ0XlRQ=tjv=SFq=Ovm=lNvEtpvESFQEbJxWS5vExReESE1JlpmXts0XlRD=timJbNvEbwAJx1A=livWbJeW0M0XOWQXSJqXlR6ESibWlsQJSj1XOu/EYR0ElM/XtW6XOMAWxNb=OsQJbweWbWDEYE1WORAWOwe=S5m=t=1WOJ0ExueEbWAEOuQWxJQXOFPW0sDJbJx=bR6=bjvEtN1WSjb=OJA=YEY=SjvWSu6JSseXSJqWOU1WluDWxJe=b1qElWA=tEmEYNmXtW/WtNb=lsDEbvUEYEb=lMqWbimXlJAEbUb=OMeElueXlNUWx=YWlReXSM0XSue=Ow0=S51XSReWlMqESseJlNYXts6Wb10WOW/=S1DXOJ6JSWDWYsQEtsA=bRDXlMPJbF/ExWAJY=Y=b=YXORPEbR/JxwAElRP=YJPWSF6=SjUXtp1=tWQEbvbEbu0=tMAWb=U=Ow0=bvbEt=vEluQXOwx=SjUWlE1=OMeWlW6W0WxJYsQWSHmE0pvEbHYWx1A=b=vElJPW0J0XOWP=Opv=O=bXlWPWSEmJYu/JSM0Xt=bJSMAJb1DJ0WD=Ss/WS1D=YJQXlW0JYpU=tM0J0JPXSM0EbWxExvb=tsPJSivESUYWOFqXSwAXSWAW0u/JbsAJYJAWYEmEtWeJluPJbJQ=YMxXlsDEtWDEOv1WO10Ex=bWORPWbUUESsQE0imXlMDXSE1=YRxWls0Xtp1JYueExsqJljUWYsQJ0iUEOw0JSi1=OHUEbRQXSw6Ex51W0W0=tN1EYimE0u/XtNYWOWPWYNYXlpvWbu0EbM0W0iYWYsqEbG0JYsAXOWAJSpUJSwe=SNUEYW6W0MD=tWqEOJ6=OvUXSJxESM6JSWeWlR6XlsA=lJxEtEU=OwAESEb=b5YE0JDESvYJbW/EbRe=bimExWe=OuDWOHvJS1/JYu6W0uDXtEmXSMqXSsQWOvYXSMPE0WQE0=1JSGAWSN1WbM/XO5mJxwxWxF0W0pUElp1XlWDJ0W/Ebs6EbWqJxEYWlu6JlNmE0jmWY=1ExEmXlJ/WxuxJbRAW0Jx=O=vExG6EbweWxMDXS5b=Y=vElMQESu0ExWeXSF6XSpmJYpvWlJDJ0sAJS1DXlEvWxFeWxGPWb1DWlJD=lWDXSimJluq=bW0ESvUWliY=lR0W0MxEYibXSGPEO5UWOMe=OpYWbHUEOwPJSJPESu6J0EYJbp1JbG0=OwPWtibJb=bWSsDJbMQEbpYWS=1JS=vXSJqWlivEYWPElW6EOimJS=vWbwxWxMAJ0WxExJ0ElMQEtu0W0uDExHY=S1A=bMQWxjUWbEm=bMxEx1A=buAE0sQESWPEl=YJ0iYJSEYWSjmJbHUXSEUXOsx=SM6ExEU=buq=tpUXtsPESFq=lWx=SimWSFeXOJeWORAXOEbWtsx=b=1XSWqXOGqEOGA=YsAWYWxWYsQ=SWA=SwPEbJPWxEY=tRxWYR0EbJ6WbN1JbG0XOs6=Y=1WYu6W0pmWtW0J0NY=YibJbGDEb=Y=tRD=O5YEOU1Wb=UEYNYWSpY=bJ0JbvUWO5v=b1e=SMPWtM/WtJAEtJx=SsQ=SEYWlEYWYW/EOimWxvUXtj1=tjmJlR6=bEUXOM6=SR6=tR6JY=YWxvYElWqESE1W0jbJbUb=tWxWSRQ=YJ6XOimXSG0JYE1=lRDWO1qEb=U=OFAEljUE0MA=Svb=tWD=O=vWtuAXSw6XSMQEtuQW0WDJSjYExwDESux=tWqJ0=YJSFx=tJ0EbU1WOMAExGDWlWQJ0jvEYEbXOFqWYRe=ORx=tuqWxuqEYJDXSjmESGQWSvbXtNUESseJbFP=ONb=tWPESGeWYjvJlJPEtNbJSFxXl=v=bs0XlWQXSMeEbM6=OJ0ExR6ElpbJbG6=OWqWxHbJbM0E0WP=luA=OsqEO=vJbRAXSpUXtJ0=tuqXSHY=bNUW0s/JY=UJxHUEbJ6=OJ0EbuxWlReWOGP=tW0XlM0E0NvWxjYJ0EYEx5bWOvmWxu0EbRe=OW/=YEbJS1eESim=lEmEYM6XtR/XOpUWO5m=O=UE0M6Wxsq=O1/WbJA=tj1=bMeEbwAWbWDEbN1WxJeWbW6EO1AXtJ0JSReXSsq=bEYWbJ0Xlu0WOjYEx16WxJQEOpUXOpmXOJeWbHmEOMD=bW6=O1q=SRD=SJP=tuQXSJ/JbMeWxWx=YWP=tEvESvmJSGDWS1qEb5mJ0p1JYu0JbwqJx1AJSFP=OHUESR/Elu/W0iYJb10XOpYW0RPWxFeEOwx=lsPXSJqE0=1=YEbE0ibEO1/Ex=b=tsxJxs6ExuPWbJeJbsQWOuxEluxXlEYJSR/ElJPJbGPJSNmWYWQJSN1JSs6XtjbWSwe=OMDEYiUWSG0=OF6EYEmWYMeJlWQWYiU=bG6WYRQ=libWljvEtWDEbGDWYE1JlseWSGPWSJP=tMDXtRPESR6JlNU=bMe=SweWSp1EORq=YM6=SWPW0Wx=b10JSFeWOw/JlJ0XlsxXlWPJ0ueWls0EbuqEbFDEYu6=tu6J0M0WSwA=OMeJbFeWSE1WlsPWSs/EYueWbMQ=ljUESHmEtuDElJDW0WAExueEY=1JxMPExwA=tjUWSF6JbF6ESsAEbvU=S1A=YsD=lMDJbG6XSNUWxsDJSW/WbUY=YWqWOjUJSW/ExFA=O51ElWeWxUUWYJ0WlMQXSG/Wx5UEbWD=YWQXtuAEbG0XSE1J0JeElj1XOR0WOu6Wbux=bEmE0Rq=OGqJSNmWSJxWO16WbJDExE1JYW0ExNU=OFxEb1eWxuxEb=mWOuxWSFxWls6WSR/=bF/WYs0=tpvEOseWbw6XSNbE0RqXO=1JxEYEYR6=lMqEtiUExjmJSwAXO1P=Ou/JSUUWlib=bFPJYsQWx=UXSj1JxpmWYuDWOsDEORDEYRAJYE1=bvY=biYEOwxXlWQWbMAWOHUWtRPJbR6XS5YJluqEOuqXtM0EOi1ElW0EYRPJSNUXtW0ESMxJYsPJSuqEbM/WxuQ=YuPJbMq=OJe=Ys6XlpvWSivEbjY=YsxWOuqWSFqWlpvWOwqEOGAWt=YJYWD=tiY=SGAWSsQ=YR/JxiYJxReJbimEYuqEYMe=YWAExMAXlR6Xt=mEbGq=ONmEtWeEliYXt=vWtu6E0ueJxuqWbF6WbNb=Y=Y=tMxJbj1EtMQJSWqEbMAJSRqJ0jYJbR/EbvYWSs/ExF6WYu0WOG6JYRq=bR6=O1/=OwDWtivW0ibWY=YEYJ6EYEbJxRDWOMDEYMAEOJDJbGqES5vEOM/Wlu0XO1PJlJPXONU=SMAXl=1=lMP=lMQJYsqEYRxEYsQWb5UXSw0=YEYESNv=lseExEY=SR/WtW6WxM6J0sPWSw6=lNU=lEUW0=b=bUUJS1qJ0s/WlNm=SUvEYs0ESMeXO1qXSivE0sDEbUYWYu/WbJqWbHmEOHUJSwQ=tj1JxN1=SReWYpmWSEvEOHb=lu/JbseWbuQW0ibJb1PES1eEOGDJbW0XORQ=bpYElWDJlu6ElEmW0imJb=v=lsxJ0jYWtjvE0s0=YMq=S=mXlNvESsxXSJqWxpmEtWxEbW0WbNUXOsxJbwq=ljvWxs0JxW6=YEm=lR6XtuDEx1qEbJx=ONbJYEY=SpbJx=bW0s0WxGD=tW6EOJ0XlibJSRDES5b=YJ6=lWq=lWQJbEmWtWQEbEmExMQEljbEO5YXOJD=OF6Wt=bES=v=bJ/ESFQEYjbXOsAEOuAJbMPJlibJlJ6Jxw/JYJq=bE1ES=UJxs/=Ow6JbR/JxwxWOvvJ0=mJYJQXSRDEbpvWxGxEYE1EbMPJYWxW0Em=OsAXSW6Els/ElR/WxpYWtEv=bMQWlpbJxEUEximW0uqJYueEYMP=lEvEOibXSMeJYuD=ljvEtivE0Nb=OJ6XOG/EOWqEO=1=O1/WSJxJSJP=tJ0WSHb=bw6WbsA=tJq=lsQJ0iUWxux=Ov1EYW0XOR0=lW6Ets0WOM/WSHYWOHYWljb=lM/EO=mEYRAJ0im=bGqWxivJxG/JljYWSWPEtM0EOM/Eb5vEYEYWlEvExFxEYuPExwq=Yp1Jbw/=tpYJSNmWbpYEtJ6=SuPEbu/WOWPXSFAEYsQWtueXOs/=tEbJb16E0NYWtJPWOwxEONUWOEUEOR/EO1QXSuQWb1/XlJqExR0EbG0EbWe=bHbW0jvWOMQ=lW/=lJDJlE1JS5bJSMAE0JDEYivWxEvElW0XtuDWYuxWlJqEts/EYueXSsQJlWDWYse=lJeWY=vJbuDWOUmXtN1Eb51WSiYW0J6WYWxWSJQW0jYXOM/WxMDJxs0=Ypb=bG0=ljbE0Eb=bibXtiUJSwPJbF0WbNUEOJ/WbueJxGD=lR/ESWPJSNmWx5v=t=YEt=UWlWD=t=vEYW6WxWP=OiUXSEm=OjYJYRDJxReWYM6=Ysq=tjvWxMQJ0J6=YJxWOMQEtJP=bMQ=buPJbw6=lseW0=vJx=1=tjmXtuQW0EmWbGqJYsx=lJPEtseJlJqWSuqEOGxEOH1XSpmJ0RxXOJq=OwxEtJ0=livEYNmJxR6WO1DWSGPJxN1XtMQEbR6=OUbJl=bWSse=tRD=bG6WxsxEbuqW0J/=bR6Wbu6WORPExHUEYJeXO1qJSEUWxwDEYMAJbFAWx5m=buDXSJQEOWQXSGQJbJPWxj1WY=YWxFP=YEY=OuQWSRAXtWeWOHbXtNvJ0iYXOvbEOvUJbN1WYNY=SMPExiYJbu/=bH1=ts0WbivWYNbExRqESFqXOsqXSWeXSW6XSJqWON1WxMqEtWqXSp1=OHYWlJ/EbFDWlpmExMD=OGPXOMAWOs0ES5vEbs0EbFP=tMxWx5vWxuxJbHUExueJbJDJbwQW0=1XluqJxWPXSjUJSpY=Ys0J0WP=tNmESs/=OuPExFxEx1xJximXSGeJSGPWtimEOWQEOGP=Yjv=bHbJ0NUJSM/E0j1ExuD=Yj1XOHbWbs/=bRxExEYWxw0ExHYWSw6XOvUJxUU=bpmEljYElM6=b1Q=S51=SWAJSp1Wxj1XOJQJYsqESU1JSFqWxHUWYp1=SF6=SiYJlRPXlNvExsA=bF6=ls/=bEU=SNbJYJDEYWDJlM0WbUbJSGDJxGDJbU1JxuD=SJ/J0seWOs/XSR/EOuxESW0EtWAW0M/=YJQ=bG/JSGPWYRA=tibEOvUXSRPJbu6WYWPJ0jbWSNYWS16=SR6E0JPWYRAWbWAESueEtMPJSJqJljYJxHYESj1EbiYEt=mJlWqJ0MqJxFq=tuqEbvmES=1WOMeJSWx=b5mWlueXlj1WSWP=tp1Wbjm=lMQE0W0JbwAESweEx5bXOvvESHmWSJeXSsDEYiv=Ou0=tM6=SJ6EYMxWxW/WOjUJbu/ESReWSs/WxwxEOivW0MeWtsQ=bUmWt=bEtEbElR/=OMDES1AEYp1EbMDEYsD=Ss6J0EbExibEOWP=bwQXOHUJYp1W0NYJYsqJbMq=tJx=OG/EOw6XSF6W0EbWO51=SjmW0JDJxM/WxGPEYJ0EONbWOW0XlJQWb=1JluDWSF/WxsDJS1q=OGDXOs6=YibWbWqJlsQXOJ0JxiYWxG6ESUUE0EvW0M/EbNUJSRPWbNU=tsq=OEv=YNv=S=bJxjYEOEUW0uxWSJxElJDJSsqWtRDWYsAWSs6WOW/Eb=Y=OJxEtivWbwDWS5v=Ou/Ex1QWYWQExuQJSFx=Svv=SuA=bEbE0jbWtuxJl=vWS=vWSvmJbpUWOWAJxuxXOp1WOU1ElMAJ0M/EORA=OsxJxRqXSwxESF6WOEvXtRAWYuqWSFQW0JAXlRqESW0=bMeJbRAEOJPEYu/=SNYW0u0ElW0ESGD=SNUW0N1=bGAXtNvEtW6=SuQESR0XOF6ElWqXtRP=SwQESuqE0JPWOGQEbGPJSRPJlMDWtM0EOimESF/JYj1J0Wq=bjvWO1xExvUXS5bWSW0JSU1ElimXOwPE0=UWYs0=tM6WOW/W0i1WlJxJSE1Jb1/XtJ6XOGPW0p1=SWxJSMQWtMPJb5bWlJ/WO1DEtRAEOW/XtiYEYJx=SNU=Sj1JxsAJSw6Et=1JYRQESvUWxFqWls0Wb10=lMPJxuD=SJQEbR6EORDEOwD=OMDXOM6XSW/EOwDWSJDWx1/EOMqE0=1XOiY=Os/EbGDWOMxWSFA=SsQEOwPJ0pmWtsQWSU1ESwPWlJ6ExG0=tuq=YM/ESvbXtseWxjvWbwQJxFDWSEbExFQ=buxWOFe=tEUJSJq=li1=YWPWS=YXSpUJbs0WOUYXOUbXOjvWtsQW0=UJ0M/=bMqEbF0Elsx=lMQJ0seEtJqEYRQ=SsAW0W0WxMPE0uDWxHYWlJqWbjb=YsPElJAJx1xW0M6WlM0=SGAXS16ES1AWSu6J0ibESFPXlEbEOWAXts6WSF0WSMAXtsxXO5bWOsAEYRP=OJxWONmESWxJxJAWOJQXtjmE0RDJ0sx=SivXO1/EtJQEYR6EYsqJxw0JbJqJl=vWbMAJbMAJYMPWbwDWSNYWOibWbu6=Si1=YWxExUbWOR/Xtpv=lRqWOvv=Ss0WSp1WO5UXlM0Jx1/ESuPE0MD=lEUElMP=tMqWYRAJlM6J0EbJ0pbXtN1W0MPWtRQJS=UEts/WOEUW0MD=SWPJxjYEluAWbG6=lW0WtWAJSW0=Y=YExMQ=b10WtJPWYjbWYpbJxw/XluAXSEv=OR6WSsAEbj1E0EmJSReWbHUJYMeWSGD=O1A=YibEOJQJxGxEOjbElMqEOpYXt=YWSWDExEmESivXO5YEbWPXSG6WYsqWtMQJbMA=bEm=SseEOuQW0u0Wx5bESvYXlJ6WtMqWbHYExRPW0RPExsQJSRQWO5UJliYWbw6XtJPWOFxWbi1EYR0JlimEtJ0ExJqXOFP=O=UXlM6Jx=UESJeWSJDWOvv=lM/EbR6WSGAWYWPESsqJluAW0JQWtM0XtWDESwe=S1xW0RAEtJQWl=YEYp1=OJD=bEvWYR0WbFQExMPES1/WOsx=OJq=bjYW0pbXlsqXSpY=SJe=Ys6WluqXSpv=tJA=bjvEO=bWYMqEt=UE0s/=YRP=tibWxvYWYWxWxE1EYRAEOsA=OUY=OEYEOw/XORqJbFA=O1qXOw/ExW/XSJeXOUm=YMQJYM/XSwQWOs6ExEYWSpbEtpbJYpU=bW/XSGAExJQElRxExFqJxjvEluQEtJ0=YWeJSFAEYib=SM/ESFqJbW6EtRD=tuAWO=Y=Su/WSvmJbJxJ0Re=bu6WOUvWYWPJSW0JYuQJxjm=SWPWYNvESFxWYNvWOUmWbJDW0=bWxF0EOFDExJ/=bF/JSG/WYNv=YM/=lNUXlJPJYjUEx1PEYsA=SjUWx5UEb5YWYMxEOsq=OF6W0sqXOJPJSWqW0JPJ0jYJSJxWSEm=b1qXOiUXtuqW0uxW0WQJ0ibWSEUXOG6=SN1JxMqESNUElsDJbjbWb5vWYNbJYimWSEvWSivXlW/ExEmEbRqEbFAExGeWljUEOUb=SJDEONvExwx=bwQWbNbEbsPEYReWtWQ=b5UJSN1WxR/WYR/JlNmXO1qES1DWSFPJ0Eb=lR6XO1QESv1JSE1WOsPWYNvXOMqExNmWx5bWYibWSv1XSvv=YpmJxE1WxwP=YsqElsxWOU1E0=U=YimWlNY=OM6EtWD=bRxJb=YEtsQ=bJ/=lp1Jx1QJYuAWxuxWbHb=YivWbw/W0pUWtuxWOHb=SRq=bF6WxGDJSRe=O=mWxRqWlJeJlEbExvv=Ow6JSJ/EbGxWSMeWbsQ=bUmWOJq=SM6JYW6=b1qJYN1WOs0ESjm=SWA=OHvJSR6=lseWx5YWSFAEYNvESuPEtM0Wti1WOuQXSMeE0RA=OGAEbwAESs0JSW0XlEUWlu6JxJAESJqExWAXOpvWlJ6XlEmJbuDEtNvXSvUXlJ/W0WxWtM0XORQWSsAElM/JbMx=bvUWbUvJxF6ESGeEYJAXSG6EOsxWO5U=bFDEtR/WO=YWbJ0EOs0Jb1eESReWOjvWxUmW0E1JbJe=OsDWxiYW0JqExUvESUYWSvUWxMeWORxJlpvXSRPWtEbXlRxXSG0WtJ/JxsPJS=mXlJ0WYjYXSJPEOJDEYuQXt=mJbWQWlu/WOUmWtjb=OGqWO1QXlimElRDXlW/=Ow/EbsDW0p1EY=mWxJxEbseW0JAXOuDXSjUEY=vExwAJYW/JlseES10WlivE0EmWbNmWlJq=OuDJlpvWbFPWtM6XtN1JYM6J0ib=tuDXtux=tseW0uqWOFD=Ow0=SNvESpbE0u/JSGQEb5Y=YMQXSR6W0=v=bGDESMDEYs6=SFAEOs6ElM/ExNUEYEUESJ/Jls/WxRPJxwDES=UJSs6JbEU=lu0EONbWxFqWxG/JbUmEls6WtpmExWAEONm=bjmWbHU=Sv1=SUYWlWqWxjUElWqWSRxEYMPEOJQXSUvWYMQEOE1ExweJYuD=bMqESNUJxRA=Ys/WOsxW0jmWtW/WSp1=OsQWYi1JlR/WOUU=bsPXtiYWlEYW0MxXSRAXOWxJbM/=OG0JYMeJSUbEbsQXSWD=YibJSUbJxGQJSMQ=O1/XOJ0WlJDWOMQW0N1XOimESwP=OMe=bw/=OGAWOR/EbMPXSw0WYsD=SueEtRDElJA=lueEO5mXlJAEYivWY=YWlsPEOvUXtRxW0W6EbF0=ls/=bsxJxsqJlN1JYJPW0ibWtRDEOiYWlEb=O=bJlW6ExWPXlMqJYJeWxG6XOW0XSseWSwA=Yuq=bw6EbNvWOEUWtseWlsqES=m=SFD=SEbW0s6JbRe=ORAWOFeXlNmWbi1WSWDJYEvWbi1=tJ/J0J/WSWDJSM/E0EmXSU1WbWxJbW0E0uPEO=YW0JAJxMe=b=YXOjmWO5UJS=vWlM6WOvUW0EY=lWqJbEv=Sw/JS=YJS10J0uDE0RQEYN1J0MxEbEYXSJx=Y=UExJPJbjv=bs0JbibWSivWO1/WbvYXtJxExNvJxjmWOp1XOMAXOWA=OGAW0pvWximEYiU=SNbJY=bJSFx=bpU=lM6ElpmJYuP=Ys0WxJ0JxUm=OR6EbWA=O1eE0pYJ0s0WOJ6JSuA=SG6JSs0Wb10ESuxWSWAXtN1=buDEOpUExJ6WS10ExGA=lWQWSUbXSwAWtM6=luAWS1DEbRxJSG6JlJAEY=1WOpmXSMeJ0JP=OEYJSiv=tMDWOWeESGPEOs0XluPEOpYXSMQXtNmXSpUWbM/ExHbE0W/JYWP=bu0JbsAEYs0Wbv1E0MQXOFeESMAWtuPJbpUXOs/Exj1WbiU=tiUElJq=tEb=b=mWYuQ=OweJxiYWliUWxivExpmWSFAXSMDEOwDWlWPEOHm=bFxWtMPJSv1=bpYWtMeEOH1WtsQ=OivExG/EtJDXSJD=libXO=YESw0=S1x=b1qESuAXSwq=O=mWxsQWtMAJSW0WSs6=lJ/WxW6XOW6=bGQ=SUmJbjbWSR6XlNv=SvmJxE1ESFPEb10=ts0ElMDWbw6Jb1/JS1AESEmJxMxXtimWlp1ESFqE0ib=YN1WxUbJluDJbUUXSwQExGqXlj1J0s6ESNmWOjbWlWDWxsqXSwxJbJAEY=UXO1Q=lu6=tWxW0ivW0R0Jb=vWY=bWx1e=OEY=YEbElJDWOwPWYRAXSJAWSRDJYMQWSuQXS1/E0uQWlWD=tjYWSG6=S5YJSwxEOJDXSU1E0MQ=tj1ESsQ=SuPWYpbE0JqEYWD=lueJY=Y=bW0JlRDWOi1JxjYEtWeJlNUWtWA=ljUEbuA=bM/ESWQ=bUUJYW6J0u6=OGAJYiUXSH1WtM6XSF0Jb1DWxHUWx1xWtuA=OGxEORqJxGDWS10XOF0EYWqXtJeExUbWS=mWSWeWYjmWSFAWYuAJSH1JSF6WO=v=S51EOibWlsxWbG6WbuAWY=UWSHUXSv1EOEYWSRQESw0WSu6WOUmXOs0WbuAEljUWYMQXOFq=lsQWO1QXSvbWYi1=OuQEx=UElpU=bv1WxUmE0MAJbwAWOReWb=vExuDExuxEbJ/JbE1WOHbXlJDJ0J6JbUvEls6JbivJbvUWxRP=bRqWb=1WlWDWO1xWbRx=SUYWbvYWSF0ESE1EYWe=YJ0W0jmJxuPJbwDWYJx=SUY=YNUJbNmXlpvJYW/Xls6XtMP=Svv=SMP=lJxWxM6=bWxWSUmWlM/JbjmXS5Y=bNbJSuAWOGeWbM0E0RDWtu/WSuqWlW0WbJAJxMxE0pvEOpv=tjmEx16ESHvEYuPJ0JPXtEm=SR0JxWAJSNUJ0M/WOpvWS1qWlRqWSR/EtWxXOG6WlNYWO5b=t=YWlu6EYsDWOR/JljbExUvWtNvJlJ0WbGq=bMqJxsQExR/XlJP=YWeJxwxWOvU=lu0JxWDEbwQXSpbJbE1=Ojb=OHmW0Mq=Ow0WtW6WtjbJSiYXOJ6JlpbEYuxWtRx=OFQWtReEljYXOMAXSimE0pUWbFxWbW/JlpUEbHUJYM/J0pbESJeJxJ/=tsAWONmEYMxJbUmEOR6XOpYEOU1WSpU=bwQEYEUWx1eJljvXSEY=bFeEbuqEOibWSWqJS1PXl=YWYsPWSu6JxiUJYiYWlWeXtiUWSJQJSEbXSF/JxJQWSuxWbuxE0NbJ0RqJSWPWlWAJ0MAXSimWtNUWts0=bW6WO1QWls/XORqWYpYWxM0EbweWOJPXOsP=bFQJbFqESGqESN1=SUUWO1AE0MeJ0p1JxWA=OF6Et=mXSEb=YMeWSMxXSEUWOjUWOE1Wx1xWYWD=SEUEYJ0WljbJxpvJxFxEYjY=SRP=tjvXt=v=b10JS1/=tpbEx1DWOu6=lWe=OGqW0jbES5UWONvEbM0EOjb=OFqEYJqWtN1EluP=b1A=O1/WYjbExsQXORqXSp1=Sjv=lRqEYJPEOwDWOUbXO1xWb5UWx=v=YEvJx=mW0JqExJxWxGQWx1AEOJPESM6EYu0ExGA=OMeJ0JDEbWDJbpbWOpUWb1PWOHvEbJ6WxsPWtMQExim=SwP=SWDJxJQJSM/ESGAESjbESuDWbRqWtiv=t=vEliYXSvm=SG6Eb10=SwQWSWeWYNvEOMqJbWQWbpU=lu0WYjU=O=YW0W6JlJQESwA=SMQJbJ/EtMAEYpvESNYWbHUWONvWO5b=Ou0JbR0Wtp1Wt=mJb5vJluqJbGAExEm=OHY=SNUExFqW0WqJY=UWbWeEbRx=SGeEtWD=lueWxs/=bMqJbueWtj1Wtpv=bGD=OJxE0=bJS1x=bJQWSvmJ0p1=tWx=lM6=bW/JbsqExMDWOw/Eb1x=bwAExuqWbM6EYsAXtJeJbJ6WO1QWOuxWl=1Jlue=t=mE0MqJxF6Xt=UExRPWYReXtuQ=OWDWOvvJbWeWSp1JS1/EYWq=bvmWYW/EYiUW0EY=lN1WliYEbRQExF0ESu0JSp1WlEbWlNYWbvUJSUUJx1AXOsPJ0MDExRe=tEYWOpmEO5YE0RQ=SEY=SwP=tMQWxHYJ0Wq=bG6XORAEOs0ElimExvUWOE1WxUbWYE1XOFeEOUbEbNvWS5UW0RAWbFxJxFeXOs/=OFAXSj1Wtu6W0sqWbs/EtNmESGQJSvmXS=U=Sw/WOsxESwPEtRxEYR0=tR6XSWDJlWDJbW6WbWqExHvEY=1XtW/=SUYJS1/=OiUEOR0EtJQEORqJYW0WbEUWYM/EtuDJ0ivEbse=lR0WS5vEYimW0N1WxFDExEUEx5bXlWDJxjvJbu6=bvbEbNU=SuQXOu/XSHmWO1qJbw0Wti1WSv1JxRqWlReExNYExJQ=l=mElWPXSMPEYuPXtRPExFDWbF/XSu/ESNY=O5bEONU=OJ/=OWqW0JxExNYWOpmJYjUXSJeJS=mESJ0JSs6XtEbEYEvWbuQXSJAWOwPEbEU=SE1=S1qEYRxWtW6ESuqESs0J0u6ExpY=YN1E0uPXSNb=YR0WSU1WtEUWtRP=b=YEtp1WxNUJSF0EYWDWbFQXOF6=b1eJSGAJ0M0=SibWlu6WS5YWYuQE0JQWSF0XlJPJbMP=bRP=ORQWxu0Jlu0=SW/=O5b=tjbJxs0JxNvJYJAWbj1=OueWb5mWbMDWbjmWtNYJlp1=YM0JlsQWS16=OweXlR6JlJQ=tEYJSpmEbWqWxRDXljYWOWxWxib=SuqW0iY=YMQWtJeWOEU=lseESwqXtNvEbWAEbEm=bj1JbJPWtNYXSJ0JSGDJYseEOG0EluDJS=mWOvvXO51EYRe=Ou0JSUbWOEvEbJPWOJ/WlWA=bsDW0MP=bMeWxp1E0J6=YuA=luxXti1JlM6ElM/=YNvWbEvWlNmXSEvJS1e=Yu0ExFe=bMQJSueWxWqWxj1=OF0=bwx=Ou6W0JPWxGPJbsxWlpYEYR/XOG6EYJ6=O1QExjb=OJq=OFPJSWP=Si1XtRPJSw6JluxESWqXOueXl=mXtWqWOMeElpUJbjYExJDWxJ/=biYE0WAJxu0JlsQ=Os0Wbw/Exu/WSpv=lEbXO=bJlNvJlJx=tivE0EmXOseXSHUWSUUWxM6Jb=UE0iUWxpbEx1AEOMDWSpUWbUvXtR0EOGPWYJ0W0JxExsxEOGq=tuPJxF0WbWAJb=1XSjYEYsQWOFQEbW/WxUv=SR/Ex1AXluPJlRA=tu/EtiYWOsx=Ss6=YuAWtW/EbNYEYpmWSpvEOse=SjvXtWD=YEvW0sx=tpYESp1ESNbWSivJYJ0WOibXORAWls6=bGQ=bGxExF6WOw0WbMxWx5bWO=Y=tM/XOEmXOjmExMqEONmEbw0J0jvWxRQXS=Y=t=1Eb5YXS=bWxpbWYJ6EbwAJxGeWSGe=bR0=OMxWlN1JSwAWbUbXlueEO1qXOjbExi1=OimXSMxEbiYW0im=SWxXOWqXtuxJbwP=Sj1WlsQ=OFQWxw6EOw/Xl=U=tpvJb=UExi1XOEm=bUm=SJeEOH1WbEmJbRQEtWxXtEm=bFqW0JxXtN1JxMPXSweEtseWbEvJb1/JYjUWYJqXtuxWbN1WYJDXOJQWtJ6ESJ6ESHmEts0Wxj1JbvmESsDWSHYEbGQEbuDXS1x=SUbJxFQ=tMDWOjYWSW/=SW6JYM6E0ueJYR0ExJ0WS1Q=lsxXtEY=buAJbw0WOwDJSNYESJAWYNbJSE1WSEUXSs6W0=1JxEbEO1eXOjbJ0iUWSw0=lpU=SMDWOjbWOGPExse=tWqWxJeJYJ0EOuDEOMDWYsxWSpbWtNUEYsPExsqEbsqEOHvWYMx=tJxEYRPEtE1=Yiv=SjUWYMQEbjU=SivEbw0WYjb=bHmXOWD=lsQJxwPJxUmWl=UXl=vESFqWxRe=O1eWtiYJbR0EbF0=tJxElMDWYsQ=OG6ExFq=tWAXSGxWbEYW0M0EY=UEYW6XSG6Wbjb=luD=bj1=Sw0JYpmWxwQEYMA=S5YJSWAXSwDWbuDJxWqEb=m=tsPXlMQWSR/XSNYEOwDEti1WYsPJbWeXSRPJlRxXOv1W0WeJbFAJxuQESFD=bMeWSRPXtEUWYsPXtMPEbu/WOE1=Ouq=bFeJbFe=SFD=tuq=bpUJbwDEO=YJSsxEtMxJlpbXSsP=YRqWbEbEOjvW0NvEOuAWOweJlpmW0pv=SUbWlMQJ0R6=OW/=Y=b=SJxWlWeJlMx=YpbW0ibJbuAJSj1Xl=YEYEb=lp1JxuqEYWPJ0jUWYJDESsDJYuA=OvmXO1PESHYJbUmWljb=OWAXtuPEONUXO5m=Spv=Os0Jbu6=YJ0=SM6EbjvXlM0JYs0=OGQW0uAXtNYESGDXO5UXlMP=lWqWSFDXOvbJbHYJ0WeESMx=bjmWbWqWSFAJxs/JYRAWbvU=OJxXS1QWS1/=bR6ElibJSuD=SjmXOWqJlJPW0u/EbsPWOGQ=bu/WtJ/ESw0WOsxE0MqWOMe=lJPJYj1EtJ/J0NYEtWAJbs0E0jYJS=mXSMDEOsxXtW0XtJeWSE1XOvY=SJPEbNY=b=m=SwxEY=vEYM0Wx=YExRPElR0=bRxXOvvXl=vJxU1EYWq=ONbWYu0W0sPXlJeWbRqWbM6JxMDWtsxEYMPJxi1EOU1JYJQWtsqXtMQ=bpb=tp1WxUYElMAWbMAESNbJlsDJ0WDEbNY=OJ6WSWPElR6WOMPWxNbEOMx=OJPJlNvJYs6=lNYElpbE0=bEtuPXt=YJSp1JS=UWbJDJYMDWtj1JSGDJYseEbEYWtpUW0MxJYsxJlsD=OR0WxwAWYj1EYJQWY=bE0pUES1xWbjmW0ibJYs/WxUbXOseESs/EOF6=bW6JSU1=tsDESWDEOEvWxW6WSFxWxFQE0i1=bwQXOHUExsQ=SGQWONvJlM/=OG0JxsAWtuAEbjbExJxEtiYEts0JbG0ESMqJx1x=tu6XlJ0WOG6EOUUExFD=tM/XOjvXONU=SsxJx1xWxuxXSjY=bG6XSJeESG/=YiY=OFQEb5vEON1EbHmJxF6EYJ0JxJxWbH1W0NUEtEb=bEYJxwDEbRAEO5vXO1x=SM6ExjbJbMxEbH1Ebu6WOM6JbG0EbNvExsPJbM0ES1PESwD=Sw0JbFDJ0jvWbwAWl=YXSF/EOuQ=lu/EOEU=OWx=Ss6WtEvJSuDWx1xEOpbElJeXOFQESNvXtE1=ts/JSGx=O=mEts0WtMqWtpvWYR0=b5UJYE1=YpvJbseJxseESUUElNmJ0JqWSWPESEUWbsQEYJ0XOwP=tiUE0sDJ0NmEluAESMx=tMQWtueESwqWSweXtRAWYJ/JbuD=bv1Wbj1ESF0EOuDWOR/WljvESJDWYN1Wx=1E0j1W0=v=SiYJlNb=SMAJ0s6WlEmWYNYEtJqES=m=tRxWS=b=ORAWYMAWSHvXSpmWtE1XOuP=S1PXSFeWxibJxJqEtueExEUJSu0EOEU=bFDESiYWOsq=O51JxH1=YMqXSHUEljY=YJxJb1x=lNUWOJQXONmWOF0XSUv=SRqXOWQEYuAWlJ0ESuA=OUmEbU1ExWeJbpYEbsxWSJeW0MPXtuxXSiYW0R6JxW/JbimJbNU=Ov1=lMAEYW/ESW0JYRDESsQES1AJxHbWlsxWb1/WbjUEOEvJbF6Els0E0M/WONbWbR/XlJAWbF6EYJQExH1WlWqXtM6XtWP=ON1XlWPJSUmEORe=bWP=SJxJlRqJSu0=OEYWYux=bUUXlivJlW0EOseElpvWSweEO=b=SpUWxjYJxvbWSW6Xt=UJYu0Xl=bJSsqXSUvElWAXOFeWlJQ=Oiv=OuxE0sPWxHmWxM0JYJxWxMqEtWqJYJPWSWDJSwxJSRxJlEb=tJD=YNYXlNbJS1x=SNUJSE1=lpUW0J0EOim=lJqJxw/XSMq=YRxWYpmJlEU=SuDW0iU=bMD=O5UXOHY=SRAXSpbEOjvExUbExuxEYuxWbEb=bMQXlWDJ0WxEYuqEbi1WbjvJ0seEOJ6WtMqEOH1Jxw/ESiUESUYEb=UE0jbEYibElJDXlpmJYsP=b5bWlWe=bv1ElueWYM/=bF/=bweW0M0=bNbWSWDEbHvJ0MQXtMqEbMxXls/EbH1=bpU=lWDESse=SimJSFeJSuqJ0se=SGD=Ow0EbGQWbHv=Yj1WxuD=bG6JYj1EbNY=bv1=lM/WtWD=O=v=OFqJls6EbiUJxG6Xtp1=OJe=lJx=SFP=O=1Wx1PES1xXSMx=ts/E0RxESvvElMxWbWe=OFeESpvWOM6WONb=tJ/=lJq=l=YWYE1WxHm=SJ/JlWD=Oim=SimXSFAE0pbWS1eESiYJlM0Xtu0=bUUXSw/E0J6ExEYWtWqWb1/Wlp1WSs/=b1PES51WxpbWSFeXSJxWlpbJb=vE0W0WSH1WxJ6Etpb=tNvJYpU=Y=vWxRAJxvYJxJQWbMxWlJxJbs0WbsQ=SN1J0NbESR6WY=1ESWDW0=vWxjY=tpUJbHY=bMAJ0sDESsxJSsQ=O10=lN1=tRPWSsPE0EYJx5vExHb=b=vEYR6WtpUJxHUXSpvESN1ESpUJSu/=SjUJSpYExGqEx5mWxGPJbNYJYsxJY=vEtJQEluq=bUvExs0WONbXSGDJYue=SMA=tJP=bMPJSEUExRQExEmESGqJbHbJSwqJSGqEOReXtWAWOHbWtW/=SF0JbWqJY=vWON1XOH1Wbw0WlsQJSuQWxsDWSW0=YJQXlJ0XSMP=l=1Wx5UWOMD=tM6XOwAXls0WlNYJxFD=bFQWts/J0NUWSv1JSiv=Ys/ESWxXONUW0RQEbWD=SpvEOpvWSsq=tJ/Wx=YJxGqWxEU=OUvJxGxWxGAW0EYJbNbWtJ/XtWDEOW/XOWQJbwPXSEYJSUbJlW0WOMeEbpmEOG/JS5Y=OHYWYjvESvYJYEbWlW/JYjmWbJ/WbuQEO1/EbJD=bR6=Sw0=bJ6ESMAWS5U=luq=O=mXls6WORPJSUYWlpbJ0WxExGPWbjUXSNYJ0ReXSWqJSs6=SpmExwPJbR/EOsxXlJ0JxvbWOEYJSGQESG6W0jmWtsPJbMx=OGqExu/XtMQ=YRD=OiU=lWeElpUJxUbEO5vJ0u/Wx5bJYjmWbjm=YpbWYWAWO5U=OW/=SR0WbJeEOEvExHYJxw6ESpYXOpm=lMAJbWPXlWxXtJ0EOw/JYWPJSsQEtpb=b5bEtMxJxM0Wbj1XOMAWOJqJbWDJxJDJ0E1=YpvEbGqEbWQJbpUJYMA=YMqXlWA=OMxXS=UXt=bEtjYJluDXSHvWlEvW0ReJl=b=libESHbEOW6XOJ0WlN1WxvvJxJ0J0pUW0W6=S=Y=bEmXt=vJxvv=bWAJYJQ=bwxEYuQ=buqXlW0E0u/WbJxWSMeE0s6WSsQXlRQ=OsqWbu6Wx1eXOJqWYM6XluPEYWe=bvYJbwP=SRDJ0sqEYJeEONUESsqXtM/XSFxJlWDESuPWSNm=tEUJxwPWOweEOFxWSUvXSMxWb1P=YMx=SR/W0W/WYu/EYR6XOHbEbJA=SEv=ON1ESjmE0pYEliY=SvYExj1XtWDXtsDWx=bXS=vESNm=lu6EtuQXOw/JxF/ESFx=Y=m=SGeWlEbWOuqWS5YJbHmEO=1J0Wq=tu0EbHbWlNvWx=m=YsDESR/JSuqEtsAW0iUWOpmXlMP=OGx=Y=1ElsAEtMAJbimW0uDWxJQXOwP=SWeE0uD=lu/EbNb=SG0Xts/=OF0EtMDE0s/ESjvJSwqXSR0XtNbWxpU=YJ0=YWDWOweJSMxXOsDXt=1JluPXtMeJbj1Wbw6EtMDXOJA=SWeJlsDWxGqJbRA=SHU=Su/JYJPJliYExMPEO=bJbJ/ElMeWYNmJSuqJx5v=YsAWYJqE0NYExW6XO51EOj1=OUmXSuxWlWQJlNmXls6WxEU=SuqWbJQXtsqE0Em=bG0EYEmEbNm=OMQWSwqEYJxJx1eJSFQ=Y=YXSjY=SFDW0EYWSjv=lRe=bNUXOsQElM0JSMx=lu/EYWQJxwQXOJ/Eb1qE0seWtpbWxM/WxNv=S51JSUm=Ou6=OReJbvvWOG6=bFx=bu0=SuA=bjm=OM6JxvYXluDXS5YWOR6XlRAXOF6XSNmEb10WOWqEYu6Jb5YXtWe=bM/WxsA=Ovb=lR0JlsAXS1eEYMQJb1DE0jYXO1QExsAWlMQWlMeWlRQJS5vWSwQWO51JxRqJbWPEx5YW0j1EOwxExWqWSpbEOHvJS=vEYJDJxR0WSHbEbwxWb5mESW/WSuP=b5YXls6ExJ6Wx=m=lNbWx1DXSU1JYWQJS=YWxuDJxF/ES1/EbHv=lNvWO=mW0WDESUvJ0JPXOJ0W0MQJ0EYXOFAEOjv=SJe=OsQEOjm=YsqJSWPXSFqXOJDWxW6=b1PWOMA=SJ0=li1WbNmWlRAJbpmWSw/WxRQXtJ/ElNm=biY=tjbXSM6JxR/WlRD=bNvXOWeESjUJ0EYXlW0JSseJx=b=b1D=O1DExUbEx5b=bMA=OuAWbiYWbF0ExReJSjvJYWxWlEYWlR/=ORDWx=1WOpUJbUbXtJ6J0s6WYEvWtseWxJxXOwAWYRDJbWPEO1QXlW/EbRe=Ov1J0ueESJ6WO1xESGA=YM/ES1/W0RPESsxWSsAEtEbEbvbJlWeWbGAEtj1EYibWtpbWSJ/ESRD=SMDWYsPWSGqESWQ=SWDJYNmWOUb=O1eESueWlNUXlNvJb1/XSMD=bs6WOGAWORAXtE1XSHUElu0XOib=OwD=YWAEYEYWxEbWtWDWOvYJxWPWOwPXOjvW0J6WxWeJSR0XOE1=tjYEx5m=bU1=bR/JbRq=t=mEbRAWbj1WY=vEONvWxW0WYMPJSGeExuQ=lWP=bHYXO=b=SGeEOMDEx=mW0M0WlNUJlsqWS51EO16Xluq=OpmWtuQJYN1=bGAJSMx=tJ6WtiY=S1x=SueWxsAEtWeE0NmXOFAJSu6XO=UXSJqXOJ6WlEvJluPEl=1JlEmJluQWOMqW0J6=tWx=bWAXtu0JlJqJYN1=bE1WlueE0pYExjbEb1xJ0WAESWQWbimExsQWxFQ=ljvEtu/Wx5mWS=UEbWQJS=bXOJDElE1EbG/El=YJbp1WbuqWbMQ=O5UJYMx=OibExNv=Os/ElR/J0W0EYWAWtJPEOF0=SwqJbsDWSMPWOpmJYpmXlJ0XS1e=SGQXtMAWx=m=YEbJbEUWbs/ExHUElReXOR/W0jmExEUJbFxXtp1Eb=mJlp1EtW/=YJeEO5bJxibXl=1ES5YWOGqWxJqWxjbWOW0WYsQWxwPW0M/WbFPWOW/JS16WSUUXOw6JSwq=tpYWO1D=tWDElMDEOpbWbsAWxiYElJQEb5b=Sw6XOG0EYR/ESseExFAESJAEOH1JSGQEYpbE0J/WtWeWlMqWlu6=bsQ=OWxJbFq=bjbEbvmEbFqWxj1WluDEbi1XSuP=YjbWt=UWx5UXOHvJYWPJ0WAWtjm=tJ/Ebpb=OGAJYiUWOw/=SHb=SJ6JbpmJxJAXS1qElJeWl=1XtpvESwxExHbExG6ExiYXOw/J0jbEOuAXtNm=bGA=S=YWxFxW0s6WbMxWbNvWYJxJxuDJxG/ESHYElWAJxvvJSuQElpvWb=YJ0pUJliUJSHvJbMeJlWDXSw6JYM0EbJqWOsAWlsAXtsP=OvUWYRqJbHbExJAEYjvWlRxWSiUXS5YJSFqWtJxEluQ=ONUJb51XOG/=OiYEtW6XSWPExi1WOvmEYuPWYRqJSWqE0uDE0=vWSF/JbUU=lWAEb5b=SsqJ0jbWbuxWSRqXt=UWxvbExvmEbwQJbwxW0uAXOGqWbWeJb1PXSjmXlWDW0RqEbs0=SR6EbGAJbGPElJxEOEmWOFA=bUvJbFqXS5vEOGxEYN1JSjmWSNU=bFAEOvvE0NYJxivWSuxXOW/E0sDJxUvWOJDEOwQEYuQWbWxWbF0XSiYJS5UWxGAJbUYXlEmJxwPEbRq=lN1JxvUJSu0XtEbJYM0WtWD=SFDJSG0WlueESJDWbRQXlpmXOGQJbuQWY=bESsxXtuPJxW/WONbEOvvEYR/ESMeEYuxJbuA=OHmJxi1=tue=Y=mJbsQJSG/JxFx=tJQW0MeJ0WAJbue=bwxEOGDEbFDE0s/WY=YExH1WOR0XOsAWSGDXtjvWSRPW0pv=bJD=YpY=YNbJbNbWbMDWOJxXlJxEtMD=bWPWxU1XOu/J0jvXtuDWSWxJ0=mEOWQWtj1=SWxJlivXS1DESW6EYEYESMAJSiYXlJQXORq=SEb=bwAWlpvW0Rx=lM0Wb51WOJQJxwP=YReJb=bEOjUJYsxJlsQ=SMxJbjYWORx=lWAESF/E0i1Jls6EbUYJx5YE0R6EtR/W0j1J0jb=tjUEORP=SJA=O1xJlW6EOFPEx=U=bJxEOMeEbWPEOFP=bj1EbRQWYJ/=SUvEOsPJbu/W0JqExpUXt=YE0ReW0JD=bRqXOwxWOw/XS=YWOsAJSUm=tMDXlRDWYMqEtu6WOvvESEbXSuQ=tj1XS1PWYR0XtM/=liYWSMPEbMAElW/EOHm=SRqJSGxWxuPJxHUJbNUEtEvXSuxWbGxEtu/=bFeXSRe=lJDJxRqJluQJxEmE0pvJxFDJbH1ESF/=tuxWxEYEbFAJbwxWlMQE0Mq=SH1=SNY=S=UEbimEbNbWljbWbvmJbu6=OsAEOH1JbG0J0jUXOvv=bpYJbNUXOjU=tuAJxjbXOFeEYjmExMPWlWQXO16JbwDEbJ/=OMAXti1=O1qWbuQEx=1W0u6=biUJ0jbWYiv=bUUJli1Xl=YXlR/XO=vJluDJSjmJYsD=buQ=tRPJxHv=lJ6=bpYXts6JbMQ=SN1WOwD=bH1WONbJbF0=SWq=YN1Etpb=bEmEYMx=SH1E0uDWYsxXtuD=YNYEOJqXSEY=bW0W0ibWYsQ=bvbXOG6=S5m=bUbW0WDWxim=bvUWtWqEtsxEtJqExs0ES1eXOEYXlE1=tjb=tMeXOwqXSiUJxwDEYRe=SuDESw0XSJQWbG/XtW0WSRPWbWQJS16EOsQ=tWA=liUXlEUE0jY=SHU=bwQExu/=bEUJb1P=SFDWOpb=bw/JSW0XS=vESEbW0MeEx5bEts0=SF6WOu6WSvvWti1=OFQExjU=lNb=limEOuQJ0Nb=lu/WSHmE0WQWlimE0R0=OEUJbEU=b1qWxFQExR/WORQESueWSivEO5bJbuQEli1ExGP=OF0XlReExG/JbvvXOWQEOwxXlpm=OFA=tpbEtjUExNb=bu/=SJQ=tJeEOMPJYM0Ebs6=Ow6WlEYWx1PWtJ/JSsDWSWxXSRD=buQEtWeW0MA=lsAXSEUJ0M/JxWAJSUvWbp1WOJAXtuqEbFx=lu/WSR/EYjUWSjb=bJ6WSF6WOM6=lRAXljmJlRAXO1eXlu6JlEUXSv1=OJ6W0ueJSRPElMqJYuD=Ss6WO=bJx1/XOwQWbu/WYsqEYuqXlE1XOvvXS5YEO1eEYJxEYReESwxJYNbXSNYJxi1WYW0JlNYWbRP=tMAWbEbXOFeWSwPEOEUXlj1JSMPJ0pmWxw0=S1D=SivJbwqW0pvEbv1JSNb=bMqXOJDXSs6ElWD=lu/=bEb=bR/WbEmE0Ev=SRQWtM6=OHUEbMPXSsDESivEbW0JxjUESwDWOM0W0WxWYR0=bvU=SMDWbsQWSu0XOvb=bimWbEvW0J6EOv1WSsxExFDJSuQWOwQWbMQXS51WOJ0Els6JbsDE0JQJ0Wx=bpm=lRDWSWQEtJQESWeESJQWSpbXOJDJYE1JlpYWORDXOU1XSJe=buQJxwQ=SNYWYRP=bjYWS=YExM/ExvUEtNUEbUvESj1WOW6WOGxWxJ/ESG/WOi1WluP=Op1JYRqE0RAJxweEbNvESEmWSJ6Jb1eEOMeWxN1Jx5bXtpYEOjYWbJ6ElJAEO1QWYNUW0pbWbpUWbueWlM/ESsDWxMAEYRAXtsxEx1qWSi1Xls6WYivJbN1ExN1=OFA=SGAWbHmWbwDE0WPEYRPEOGe=bUvWSibJSRDWb5bEbueESwxWls6=bUYJlEYWbjmEbMDWxsDJYjYXOw0XOM6XSFDWSuQ=OwQ=YpvEljUJxGP=YRAEOG/ExjmWS1/EYR/El=vEOimWbu/JbpmXSUmEbMAJYR6=SWQ=SFxE0sAJxW/WOEUEY=UEl=U=b5v=YEYWS1AXSvvWxj1WOp1WSRQWOsQ=OU1WSw0JbHUXtEYES10E0pYW0jY=SWQESGP=OjvXtuxJbRPEbNU=ORAXSMeWl=UWYibXSiYWlEmExNmWYj1ElRP=bGxJbFqXSivE0W6=O1/Elp1E0Nv=O5UElWA=SJ/Ex16ExWqXS1qWxW0EbuxEOH1=OFqE0EUExueESR/=tJeXOpvJ0RA=bGxExM/J0NUWORqWbJqWtR/WYMPWOF0EOHbWS=1=YM0=bG/WtsAEOwDWxNY=tuA=YWxXOp1WSMA=Spm=YM0ElWD=l=bXlMx=liv=SRqXlEbJx5b=OuDJxGqJxvUXSJq=bReJxRe=YNUJSJ/ElJ/XtWDXtsxWbJe=tEbWbMeJSJ0Jxu6=bHbEluQWYsQJYsQ=Ow6=bjU=tiYWS=mJls0Xti1EbWPElsq=bjY=bvbXljUJ0RqJSJqJSGD=lsqJbGeExibWtpv=S1AXtWA=YR/Ex=1=li1XljvJS=YJS5UJx1qEbw6EtRAXSG0EbW/JbEmWOjmJlMAExRD=OWQWSweWOwDJ0J/Ebpb=lJQ=b1xESMDW0W6J0i1=Y=mXSp1ES1eWxJAWtJqEtpUEONvESw/WbMAEOH1WOsxEliUJlWPWbJPXSRqExGeJ0MPW0NmExHUWtMeExWD=OEbElRAE0sA=tsPWbJ6=SFeJlivJSM/XlsxJYWxXtMAExFPE0EUEbwD=lJqWOJ6EbjUWbw0JxGxExJQ=Yiv=bJ/JS5mE0WqWlMeWx1eXts6W0Re=lu0EOMeJSMQWbRqXOvYWxpbXtjbE0JqWOu/WxU1JSwAWxRqWOHYWbFxW0WAEbRQEYJeEOFQ=l=UJb10EOvbWtEU=bJAWbweXOM/WtJqE0RDE0WeWxR/Exv1EOsxXOwAWljbEOwAEYR0=t=UExFx=OWqWxEvEbEmW0N1WYu0JlMq=OUvJSR6ESw6ESMQ=Yu6J0NvWluDWxEvElEUE0sQ=tj1EbN1WlEYWbwxJSpvWxjUE0JxWOFqEbuQWYWQXSjUJSuDWYpv=YW6WbGxJbGDJlim=tJDXtu/EbNYExiUXOWDJlWDEbuQWxJPXOJDESWAEYJx=SNvXOWxEts0XSE1W0jm=lRPWbG/EbWqWYimEtimJ0jvWbueWbJxXOEvWxFqEt=UJSweWtivXtse=YWPJbpYEtRxJxReWSFA=lJ/JbWQWOEv=Sj1ESUYJS1e=YJPJxFQEOsx=tEbEbFPWbGPJSReJxsPWbHYESHYW0jYJSWQ=YjbW0uPESGPWbivWl=m=Ow/EO1qExvUXSwD=OwQWxNvEYMQ=lsxWSFDJxJQWbHbXSuPJYRQEOG/JbGAESJ6ESwe=OJqWxWDWb=bEOu6XOMxExEmJbj1JlMqElW0ExiYEYsQEYuPESUv=lsxWls6XOsPE0u6JSW/EON1JSJeJbwxXlu6XtpmWOJ0Jbi1WSUY=bs0WtMeJbMeWxRDXOv1XOMqWbuQXO1PWSGqWORxJlW6=lsqWOG6=ONv=bHm=bWqWOGxJYsDJSJQ=Swe=lWPXtJ/JlsqEtsqWliUESRQ=bFxJbW/EO5YEtiUJxuQ=OW0Wb5bXlJDEbiU=SHvExFPJYRqJxE1=SFQXS=bWSuAEx=YJSvYEtsPJS1DJYRxElNbJSw6WOvm=bR/=YMxJ0E1JxW0JxR6WYseJbNv=O1x=O5bEOGA=SMqXSEmW0RPWYpUEO5vExGDJSM6JSw/EYR/WYpmWO1xJbGeEOEYXtsxWlRxXORxWbMDESpb=SWAWSEbESRQXlWeEtNmXSseWbvY=SNvEOW/XlNmJSvmEbwAWSu6W0u/=OimWOReWtE1XSJ/WtsQJxNvWORQEtW/XSNvWYW/JxGQESFx=tRAEYu0ES5UWSjYJxW0=bMDXlNYES5UESMqEb1qWtsqJ0=1=bw/WbJqJSjY=bFPJljbEbse=Yu0WtiUEbU1XONb=l=m=YJeXS1/=luP=Ys0XlNv=luPE0JDW0uAWbGDJSFx=YM/Ebs0XOWAXlWP=bFDXSNvEYN1=Yiv=OHbWOR0W0MPJlRqJluD=bR6El=1EtMeJxEvXOE1ES1xXtiUWSsqJSuPXSNYXlWQXSFxXlivJSNmWOuDESG/=OHm=tE1EbWPWxsxEtMeWxMAJYJAW0EUWOMAElu/ElJDXlj1JSF/EbRD=buAJYMxESjvJbW6EtpmWlWQXt=Y=SwPJb1P=OJPW0sAEbGAXlWAESsxWSu0WSu0EYseE0WqXtWPXOimWtiv=SHmWbu0ExRq=ls/XOJ0EbJAJYM/JSvbWORqJbEY=lsxJljm=SHbWONmEl=1JxGqXSu0WSNbJYJ/E0jmJxNmJlpbWYWx=ls0ExuPExR/=tpvJxRAWl=bXSWD=tEU=SU1=biYXSHUWtMQESWQJYR6JbsAEts/WSNUExUmWSR6ESwP=ljY=YE1EtNY=S=UEO=YWtJxWYJxEYW6ExGQ=bGA=ljb=Ow0JYE1XSMqWSGe=SvU=tsqWbUmWbRAJxjvJY=UWYE1XlM0JxRAJYEm=OsqXOMQ=OwqE0M6EtsDJx5mWtj1EOpbWtRxEO1/JxRP=ON1WOvm=Ss6JlivJ0NYWSEbJluPJbUYEY=1EONvWxpmWlpmXlMQJxi1WSRAJ0pmExwQJxGQWxWeExFeXtMDEb1DESiUWxiUXOFQWbpUJbUmJbFqWlWQESw0JSGeWbG6WYWAWS5bWbFeJbRqESNb=SJ/=bHmExJ/WORQES=vJl=UJYiY=lJ0=SHUExW/EOHbJSG/WxJ0WxweEbUYXOW/XOFxJSjY=bHUWYJA=tjb=lMeWlMx=YRqJ0WAWtivEljUEY=1E0WxWb=vWbWxWls6J0uPWOUYE0JeXtWxWSFqEximEx16XluDJ0WAEOpbEbNUESj1E0s/WlivXOFAE0EvJbWeW0JqWtW0XSpYWbjvJYMqEOp1JYEbWbs/XSEUXSvbE0uQWluqEO1eESwxEOM/JlpvESpmXORAXlEmWbvYJxpUXSHvW0EmW0pUEljvEYsqWORqExNv=SU1Jb1AEOsDJbibEtMxJxv1=ON1JSvbJb1eXOvvExU1J0iUWOs0JYNv=lNYXlN1WS5b=lNUWbib=bNYJxueJlWQXOv1WSJ0ExMe=tW6JYMDEbM/ExHYWbwPWlsAJSvmEtuA=bW0WlWQXOMQ=SE1=ORAExjmJb5m=tJ6=lp1XSi1=bRD=l=v=YJAXSWPWO5bWtMQXO10JlsxEYM/JSNb=OWq=lj1JSue=Y=vXSHmJ0Nm=tRP=bNmJSEUEb5bEl=b=lJ6=OWxXOFQESUYXSM/=t=vWxuxXl=1EOwxJYJDXluAJb1eEls/=lsxWlMq=bpmJbNYESsPWtuqESNvESMPESsQEOwqXOMPXOJ0Xls0=bvbWOU1=tMQ=SRP=lM0WlW0JYMeJbpYJxUYJxsqXSwAEtR0ESwD=bM0WSGPJS1PWxEYJSuPJxRqE0JeJYibWlEv=S16Jl=vWSUbESWAWxUUElM0WSJPWYiUW0iv=SReWSG6E0NYWtuqWS5m=SW/EbWx=SUmJxEb=YMxEYW/WtsQXlMD=tiUJxUYEbW6=Spb=SFP=tNm=bpvWYjUW0p1JbMPEOvUJbU1=O=b=tJ6WYWQWxNvXOM/JYsqJbuxWtsPJYi1JSJQXOG6EO=bWlJeWOGPElWQE0RA=SsQ=SsAExFxJxWeXOF/=lEUWbRxWOvbXtu6WSJ0XtWA=liUJSvvEOsPWS51WOUmEbvbJ0J0Exs0JS5bEtWxJSpYEYRxExRDWbF6JSjUJlpm=SwD=YRx=bJAXluA=tJQW0pvJbWPWOsqES=vXtjbWts0WSU1ElsDXtRDJxJx=bW0=lM/ESwAJlu/JbwDEOUY=YiUExw/WlMqXOGDWSFxXtJAJYp1EtJAESG/WSHbXSuAJ0uQ=Ow0XO1xWbUUJbpYExvv=bH1JxHmE0EUXSp1=ON1XORDEb5UE0J/=bw0JSRAEYR6WxuxXSJeESNmWOFQWx1xWbuq=lEmWSJ0Jb1qEb5vWlp1JluDEOJxWxuD=ti1Exvm=l=vJlJq=SpYJSu6WOR/J0M0WxNvWS5mWbJ0XtimXlpYWlivWl=mWxwA=OW0ElRqJbNb=tsAEO1eWt=vXOGDJxN1WSM0J0M/WxsQJl=UJb1xJxsDWOuPWxpmWlWPWSu/J0sAXt=UEtE1JSwxJb=bJxuD=bw6W0WeEls/=lJQEtWPJY=UXtJD=OGeJxRq=bUb=SwQWbMDWbGAJbNbXtW0ESHbWt=UXOWPWbWeJSU1=bFP=tJ6ExR/XlWDElu6JbM/XtjYJSWq=OsAJxNv=OsPEYM0ExUvJYib=l=mXlueXtjbEbFA=YsAXtEYXtJAExRQ=OMeExiUJbuP=SUmWSMPWxMQEtjvESHmWxNmWl=1WxjvWSHYWO1xWYJ0W0s/JbWPWxiY=bJ6WOuAJlpbWb=YEYpUXlibExWD=Sw/JS5mJbMxES=bWO=UWtuQEOHvJ0M0WtR6EbvU=tJPExJQXli1WbiYWtE1EtJeEYJxWbi1=bMeXSJAJximWb1DWSWQ=luQWYiYXSu0XlRxXOw/XtWAESEm=bJ/XOvUEYEmJSJq=bWqWYJeJSwe=lRPWOvYWSReEbs/WbEYWSJxJlR0XOR/WOwqXtJAXlR0Wls/WYWAJb5bXSF0JbpYWlibXOpbJxjUWOFPWlRq=bwPWS1qEluDWlR/E0=bWO1PWbW6WSGDWOWqXlsAWO5mExu6XOJQJSjvJ0uQ=SReESu/WluQExJQJ0Em=ls0JlR0WOU1XtueWxWeEbJqJSEv=bsQWxRPEYEUJbG6EYuAJSF6JxvYXtNmExR0J0Mq=lu0JbWPWOFx=SM/XSWPExF0WYivWlMeWOJ/WYuqESiUJSJQE0s6=YuPWxibJxW0ElEmEYsqWOjUJxUbWxuD=SJAWOHmWxHv=b1DEtuDJlR0J0pU=lsPWSvbWtWDXOWeXlpbXSFDJSReJlJqWtMAESJ0=luPExwDJbM0J0EUWYWe=ORAWlpmJSWeXS=v=SRAWxG0El=UWYRPJSuPW0E1EtJPWS5YWYJPXSiUJ0jvWOUUXSNY=Yp1WbseXOW/=SMeWxWPXS=1E0i1WO5U=Ysx=ORAESib=ORx=tp1WlM/ExF/EtRxWbw6ElMDEbFxESN1EbsPJSMPJS=YWtWPXOR0ExuxJYJq=lRDWlsDWbvmWYpY=YsAEYjYEbjbWOvUWxuAXlibWtEmWONUJ0uxXORDWOpYEOjYWx16EbvYJSJ/JYuQEO=YXtWDWbMAJYs/EtEmJSFxEb=1WYpvJbNvJYJPJxFAJxEm=tR6=SH1XtivExG6=bWq=bGAXO5Y=SMeWbU1WxMqWSJxJY=UXluDJSiv=Ys0J0=UJSsQExwAWYNb=SM6EOJ/EbFqWbuq=Oi1ExpUWSMQEbR6=SF/WxEbEtsDXtJDXlRAEtuAWxUU=bs0=lsDWYReJbEm=lsA=S1qESiv=OUvW0=vJlM6Xljv=t=YJxHbEbM0ESGAXO=1WbJ/WtJ0XtE1JluQWYjmXlJP=bim=tpUEYjUES1e=bJDWORPWYiUXOJxWS1x=bGAEYiYXSU1JxjY=OHvWSMeXlu6Xt=m=tpbWbNYWtNmWSEbJb1A=OW/XSRQ=OF0EOHbWSwDXti1WlMxJSU1EYR0=bRqWOu6JSE1XtiUXlsqEOs0J0JP=SH1=ljbEO1AWSGQJSvUXtM6WtRxEOsQJYWQ=tsQ=bR/=OvmEYReWO=mJbM/EYEm=YEvJlRxXl=1JSG/JxHYJYsQXOMDElpU=OM0=SRDJSFAEbsPWOGeWtMeWS=m=YjYJxJDJ0j1WbiYXSpmEO5YXSRPWbUY=SweWOuPJYjb=SpvJlMQ=tM0WtjbXOEYXOEbXOuxJYsD=SFPWSHmWb1qWS5m=luDESNvW0uxXtNUJSFPWbw/J0pYWYuxWlM6XSRDXt=YWSWxEOGx=bjmJb1qEYiUWbHmWlRxWbGA=bMeWtEmXlRAXOwx=Os0=OFqESWAJxG/WxEbExsqJljvJxMeJxM/W0JqEx=vEYWeWOsxXO51JSG6EOivWbpUWOjYExHbElNmElRQESjUXOsqJSimEbUbJbibWO5YXSsxJbsPJlWPEljYXSuxJ0pbEOJDEl=vWYRAXlM6XtsDElsqJSH1JlWAEbpvEOG/EYWA=ljvJY=vJSNvEbM6Eb5bWbM6JYuQWbG/=bEY=YpbJSFDExuAWxvbWbJ/=YiUW0WxEO5YEYEb=tR6EbHm=bpbJlN1WYseWb1QWSwxWbGAESvYJ0uAWSEbW0pmJlR0EOHb=tsxExM6WxEUEbGPJxMPWb51E0WAJbJx=tWqWtWDWxE1XOseW0jvJbs6=SF0EORAEYpbXtpmJ0RP=lJ0XluqExU1Eti1ExJxJYW6ES=U=SEUWtWDESMQWSHmEO1AESFDJYRqJbuqXtW/ES5b=SpvJxsAEx5YXOi1ESwDWbNY=bJ/WYW6WtE1WOWQWlsPEYMxWS=mWxj1Wb=mE0s6=ORD=SsDJbGPEtR0JxM6XSvmWxG6=OUY=O5vJYW6EluDW0MxE0jUJS1DJbMq=bMDWS1e=YiYEbRPEOjYWxwDJxReXluQJbR0WSuPEOMQXOFeJbJ/JYJe=SWQEtNmWtJeWx51=tNbJbF6XtNUExivJxiYEbuAJxpm=SJAJbJxW0pmExWQEx5YJljvJ0WAEtu0JbR0=OFDJxWPJlpUEONY=tRPXtpYEYpmWO5vEYRxWxR6JSGA=O1/EOvUWY=YXlseXlJPWtEUJlMeXtsqE0uAJYNmXOM0WOHYWxN1WSUbJ0WPWY=mEbWD=Os0Ex=1EYue=YsQWlJ/ESMQ=b=YExGPXtEYW0sxExR/Jx16Etp1XtMq=SpmJbN1Wlpm=tEYXtMPJSw0WxReEbpmW0sQJlsP=bM/=bMDESW/XtjYWtM6XlNmJSF6W0MqWbweJSR/WlJ6WxiYWluAJYMQJSGAEYWQESG/ESGDXSJQ=bMPExWeW0=YExR6XlMAEYMPWlEmEx=1ElM/EOGqXOR0ElWAEbFqWtu/ESJDESJ/=luQEOiYWOF0EluD=YsxWb1PJxM6J0JAEO1AXSM/JSweJSU1XlpvWtM0XOFA=bWP=buQXOJqWxweJSsDJxJQElR6JSs/W0WP=bwqW0M/EliUW0JDXtjYESWQWbRQ=ts6=YMPEljvJbFqES=m=OEUWlu/XtuAEOs/WOwqXSJ0E0W0ESGAWxw0WlivEx5bXtEmXtRqJ0EY=OJ0EtuxEtsP=OM0XtEUXlWDXt=1WbuqElWQWSJDWxWQJYibXS5bXSvvXO1eJbM6XlJDEbW0EYjvXlM0=SRQEOM6JSHbEtJA=SReWOMPWS1P=YMqJ0EUWlRAWbW0=bWqJxWPJS10ExuQ=lWqWx=1EYjU=SUbEOJ/WtiU=Yse=bHb=tE1=OjUWO1DE0MqE0j1EtW0Wl=vXtueWlseESF/Jb=1ElMQWbRDEYpYXlE1W0RQ=Os6=YJAJYjY=lEmXtJAEb=YJbHYWbvUJYR0=YueExJA=YpmWbFAJlMx=ls/WOs0XSM0WO5mJSFAElEYWxR6WOEUJb=YJSFD=bjm=bJPWb1AWYseJxMA=SJDJYJ/XOWxWlu0Wtu6ExueJbGxEOWAWtWeJxGqWbs0WbHmExp1XS5UJxpm=YM6WSv1EbMDWlsPJSG0WtW6EtMDWxHvWYu0XSFAEOMqJYRx=tsQEx=mWS51ExGDJbibJS=UExue=SpUJljm=SJqESwPEtuxESMqEtMq=tEv=OuqJSJAJSH1Et=1JSs0Jbu0WYuP=SM/E0RAJ0JxWb=bWSR6EORAEYWQEONYWxuQE0EvEYN1JxRAEOs/ESsqWSReEb1DW0imJxEUWtNb=lJeXSUmExFA=S1/EluQWYJPWOwQXtJ/EbwQJ0jYJYs0WbWqEbjYExN1EbR0WSUY=SF0EYsQWxsPWSRxEYEvXSuAWbJqWOUv=lpUJSsqEbNmWlJ0WOMxWb1QJxu6=lReJbFD=Ss6JxRQXtJqExsAXOuqXOMDEbEvJbFeExFxJxM0WxwPExj1WbGxXOu0EtRDJSEmXOR0XluqWO1QEx1PWOuxXtNvJS1QJYJ/XOW6WxReJ0p1J0pbWxHmJxJxWOuAEbUYXl=m=OEY=OJ6=bMA=lWqExsPJxwDWOG0ESFD=OjYEOGP=YWeEOiYESWAJYibES1/XO1AWYu/EOux=b5mXtpmXOsP=YJQJxU1=lW6XOGQ=OvvXluD=bWq=SwDXtMPW0s/ESNvXlue=YRQWbwD=b5UWSRAWlR6=SuPEOW0Wl=1JYEY=tsDXlseJlsQXOv1JxUb=YpvEO1xElsQ=tNvWx1/WbMPJSs/WO16XlMA=lMA=O5UXSF6WO=b=bR0ESFxWxWxW0ivWOJx=SGeEbiYEYiYXOuqWO10ElRqJSwDWxEmJYuP=YMPWxRx=lRAXSvYWtu/JbF0JluqXlR6EYueWYs6WOjYWSWDWOwq=SRD=luQEO1AExvYJb16W0=UWOjb=Yp1=ONYEbvYExRQJlj1WYpmESwDWSGeWSwQESHmES5bEOMD=tMDWOGDJ0EU=Sp1WOibWtR0XOFqJbuP=SsqElJqWb=bXts/=tsP=SNUJlEUEY=YWl=mXSi1WtJqJSRxEbH1Ebp1=bWAJbMDXliYWlMxWlJ/WSpvEbpYXSHYWxw0XOHmJxUY=OvbWlJeJYNbWOse=ljmEbM6J0sQEYpb=bMDJlM/XOM6=b10JSueWbN1ExpY=SW0=tWx=Os0JSR6JbsPW0M0WtueJSWeWSpvW0Re=bWeXlpbEbN1WtR/ElMPWtim=bse=libJSwe=YEYXONbEtjv=tpm=bWAESJ/WSRqEOJ6XO5bJlJ6Xlu0EOvb=YN1XlRPWOHU=SHvE0Ev=O51=lWeJ0EvWSJ/JxJqESEYWSjmJ0s0=bwDWt=UEx1D=YEvExJAWYJ6=tsDXSWqWlWQXSW0=YNUElJqWb5YEYj1EluqJxu6=tuD=OW/XlEm=bwDW0Nb=lMP=bw/Eb51J0se=Swe=SF0EYRPWbJPWbHbE0sQ=Yj1WONUWtsx=O1QWOi1WbvYE0=bESM6WbR6JSFxJluDWb1qWSNbXOpmWYRP=lJ6=OEYEtMqJbFQWSEYJYW0XljvWOiYEtp1XOMDWbuPJxsxWtEUEtsQEYsAWbNYWliYEYseExpbWtsxJS=UESWDJxW0J0WQ=tM/JYJeWlEmXlsAEbGDWbsP=Y=bEbsAWtM6EbUUJbvYWx=vWlR0EOHb=OGA=lWqESvbXSHUXtp1XORAWSwDW0W/=OUbJxu/Wtp1JbU1ExvYXSFxW0N1ExWQXSwx=tjU=b5YXlN1Wxj1JS51WYJ6XOR/=YM/Jxs/EbjvElJ0Wxux=YW6=SFxWYRqW0JP=bGDJ0Re=bNYE0pUW0JqEx1QExMAWbMxEbNmWbimEtsDJlWQEtsA=O5vWOMQJSWP=lJ/=tpYEYRPExjvElNvJSib=tpmElM/JYu/=Ou/WSW6Wbs6Eb=UWx1PXSWPXONYExRDWxJQ=bMDJ0JQJlJeEOHYWbJxJlWqWxvmEbW0J0WqElRPWb1/JSM/JSwAJxw/WbjUW0MQXSjbES=UJYRqEY=vXSFq=lJ0WYjvXtsQElpbWSGxEx5UEYux=bHU=luxESHbWxRQXOJPEbUUJxuDJYJQXlpbJYW0WtJeESJ6JlM0WtpYJ0RqWtsqXlRDJxGQ=SNmJbMAJS1PJSNb=bjv=biYXtJ/Wbvb=OFxEYjYXOGeExHb=OuDW0M6J0sPJxJQWxp1Jxj1XOWPWSpUJxibXSpYWSi1ESF0XSNU=Ssx=Op1XSRDExRQWYseXliv=Sw6=tJ/WtuP=SRx=Ojm=lsD=bvmXOs0W0sAWtivJYRqJSG0J0WDJxsqXljUEx1xWYu6E0iYJSs6Jb5YJx10E0s/XtJxEbNvWYR/JSHUEYJeE0MAWbu0JxUb=tW0Xtu6Jxj1JSN1WSJqWOGAWtu/XlJ0ExM6XlsqWxJPJS=YWx5v=ts6EOJxXlNUWxEvWYsq=tW/=b=vWtjUJxwAEl=bE0NvES5UEYs0Jx1/WbjYWlpbXOWA=SRQWbG/WxRAWb1xEts6=bpY=bNvWtsAWxFQ=SW6Xtpb=tW/=ls0WbWxEOw6JYW0Eb=UWlsAEx1QWbpYWS=U=lMPE0uD=bF/WSN1WbpYWOFxJxu0=O16=Ou/=lNYWSNUJSvUXlJAXtMAWbsAJlpUESM0=Si1E0M6XSpUJxHmJxRxXOMqE0RQWO5bJ0pUWOGeEY=bEYuPXSUY=bWQ=SuxXlEYJ0u/=OG0WSMAEx5Y=bNv=Ou0ExE1=OG/=tJQJSW0ExWeWxR6XtpY=tR/XlRqESvvXlu/EO1/ElEvEOGP=tjUEbp1EOUmE0iYJlJA=O51W0pUWx1xWx=UWSpbJxUv=SwQEbMe=SHUEbR6JxwxWbF/WlE1WlsAWOw6EOv1JSu0JbimWlNm=SibWOGqWSwDJbGxXSsD=Ow/JbEUXlp1=YM0JlsAXOweEOMA=SRDJbHbElpv=SGx=SU1ESuP=b51EtWPXOF6W0=bJb5b=tRxEtjY=bJQWYR6WO16Jb5UExs0J0=mXSjU=tNmWlRqJYsPJS1xWOW/JlNm=tMPEbRAWOp1JSJDWSEUXS=1=SimXSJ/=lMeJ0=b=SsAXtW0EtimExweEbjm=OHYEbRDXOE1=SpmEbFeXOw/E0MDEYWQWlibWSJ/=ljbEO1/XSMPWtNvXO5mJSEU=SNYEb1QW0EmW0R/JlR/XljUEb=UEtNYElseEtW/EOF/EOHb=S=1J0j1EY=1XOG6WS1xWSsPEOpYWSsQWbEYWxJ6WOU1JSJ/=YMxJxwPElj1EORQ=bRPEbJ0Xl=mEtNb=bFeEORxE0M6WlWqElpb=bHbXOWPEbH1=bU1J0JqJ0uqEOseJ0W/WYWQW0i1ExweWxvU=tJPJYNY=YuQJbWPWSE1=l=UJSF0XO=YJb5YWOvYESuPExUUExEbWlpmEO5vWOpvWt=YWOWQXSHmWSFeXlsPEOMAXlM/JxRxWlJPWOGxXOvmJYux=bNvWbU1=SHU=OMD=YNYW0R/EOsDWxNUEY=bXSW6WtNvEOvbWtNmWtE1WxuPWxReXSF/XtWAXSwAWb1qEOWe=SMDW0ivWxsDJY=YJS1xWSwqE0NbE0RPJ0=mJY=vJlJq=OwAXSUmXSjmEbw0XSw6Wx5YWxRqWtR/WYj1WOMeWOseXOMxJSGDJSuqXtRxXSR/E0sAXOwD=bNbWSGqJxJx=tWAJ0p1=tWDXSMPJlW/XSu6WbG6ElpmEbEmWSW/W0NUWSGQWb1/XlW/ESF0=tjYXlsPE0W6ExjYXOUYElEmXOMe=S=1WtWDEOjbXtWQExWQExUvWxM0=ti1=OvYJlWe=YM6XOwDXOHmJlWDW0RDExMAWbweEYWPElRqWxivXtMqWY=1XtiYESs/ExFxXSJeElWx=SRQWYuxEx1/ElMAEbsQExNvXSjUEbJDWYEUJbGxEbuQWtNYJSHvW0NUXtMPE0MxE0=mW0JPXSwqEt=mWSvUXSJQXlNYXSuPJ0sqWb1AJlsQJSG6Ets0JSuxXOvb=tRPESu6XOsPWSF6J0Jx=OpYJSjYWSEmXOuqEljmEtJD=bue=OseExWe=bu/EtRPWbWAEtWDWS5bExEUXSUUJSWeXS1PExwqEbuP=Yu/ESwq=YuQE0uPESFAJlWA=bJqWSpvJxHvWbN1Xts/EtJ/JxE1XOR6XOsAExGQEOJqWl=1WtWxEO5U=OsQWtjbXSG0XOu6JSw0XSwA=YE1JSF0Wxp1WxWPW0EbEO1/Exu0=YJ6XtJqWYEvWSwQXtRDWOs/EbvY=Y=mJbG6Jl=UJlJ/JYsDWxsAWOj1WbUvJYpbXSpY=lReEOW6=tivWbMqJ0Nb=Sj1JSH1WSjmWlsAXSvbESHUJxu0JbwqWOHbES1QE0M0JxMPXtsQ=lW0Etjb=OuxWbHUEYjY=bMxExpYEtEbXtRq=Sw6WOwqXOEbXSMe=t=b=SJ6EYJDWb=YEbuQE0R/ESueEYpY=lsQW0sQWS=vXls6WORqXSuq=b10JbE1EO5mEts0WS=vJSjv=OUm=bvUWYu0=lN1=YEmEOG/=bs/WxwxXOM/JlJ/WYJDWOw6JbN1JbNbWSEY=SU1JlpYJbWxJlJPJY=1J0sxWOwAJSwDEtJQE0JPXSMAJxjUXlivWYM6WlNUJbUvExMQE0WeJYRAEtN1JbseJxRQWtjbJbWe=bRQEYJPXSG/=OwDJYu6WtsAE0WAESivWSW/ESpbWSiYEYu/J0WDWOJQExUbE0uqXSMx=YimESs/=lMAXOR/WOuPWSUvW0pbJxM6EljvESs6=YM0=OJDXlR6=SW6JSs0XtR0=SGqJSuQJls/WxR/=l=mW0JqWxMxESimWbs/WORPEOwqWYuAJSW0Jl=UJ0WxWbu/XtuQXOJqWximEYEbXtRQJS1AWYJP=Y=UXS10E0NY=biUExFeWluDW0W/WYuDEbG0EORAWtN1J0NvJS5mJ0=mWb=b=bFxWtJx=ORqWSRAJYpvEYpbElpmXOFqJ0uQ=O5mESNUWSM/WOUYXOFeWSsQJb1qWOvYWSwxXSFQJS1PWbNbWSN1JbNYWxNb=Ov1JbuDXlE1WS1/ExJDXSEYESWAEOsQExMQExjUElJ6Wb51JbE1JxNUJYJ0=SWxEOpvWbNYWb5mWYu0E0E1XOjmEOJeXS16Wbj1WbGAWxHUElsxWYp1JSpbEx5mJxiYEOsPWtRqXOu/WOuA=ljUWxjmExEUWYWPWSMxXSJ/EORxEtReW0RqWxJ/=OJ/=OW0XS5v=l=1J0ib=luQ=SJe=SHY=tMAWbH1=tNUWOW6XOR0J0jvE0W6WbEmXO16=YRQElWQE0NvWYWxWtuAJYsxE0pYWbWxJYWeXOFeJYpYWlWQWOuxWxMxWbNUWt=YXtWAJYuAW0sD=tu/=S=mJb5vJxuD=YWDExjYJbM/WYW/Wbi1=tpvJlu0=ls/WxR/WORQWls/JY=mJlu6WxpUE0ibJY=mJb=UXtsq=b=U=bUmXtWqElM0E0R6JxNvJSuDWxM0J0MqE0WQExuPWOW0=SNmXSN1E0jUJY=YEYNUWb=vJluQXtpYJYRDXOwPJS5YJ0pvExMqJlJ/EbE1XOUU=SvUXSFD=YjbESueExM6=SvvJbUY=SuAWOweXS1eWl=m=tuqEbJP=tMQXSMxWOwqElR0=lJPJSuxEYWDXtJ/WbHbEYW6Wb5mEljUJSReEtuq=OUvWlReXlM/E0EUWYRD=bUYWbNY=tMqJxs/WxvU=SReJSiYE0J0WOHbESW0JbuqEOFeJ0iYJxG6JSH1ESvYW0sD=tNUWOMPJlW0EbvYXlpm=bu6Eb1Q=SJ/WlibEbMDESp1EYuqEOWxXSiYJbN1EYWDJb5bEYMeJl=mWbwQJSUbXSuxJ0uPEYpUWxUv=OuAXOMq=SMq=tsDXlEm=OW0WtJQ=Ose=OMq=OFPEbJD=SsQW0u6=lJQ=OuPESFDJbWeWxM6Xlj1=YReESFPW0ibEbRAExNmWbFPWbuA=Owe=SRAEOGxEOiUESp1XljYWlseXS5UEOWqJSWQ=l=mWtE1EbU1WbF0WOWqXSGD=OwPESNmWbwP=YuQWSF0ExpvXSFQ=OMQE0JeWSw/EYjmXSG0=t=UESW0=Y=1EYMQWbR/Jx16JxuAJlpm=SW0XS51WbvvWOF6=SEmW0jU=Ojm=SwqEOw6WxW6WYW6JbNmJSE1=SJq=O1xJ0W/=OEUWSibWxs/=tu6=Oib=OiYEOGDEYEbElj1Eliv=bu0WtWA=bpYEOueEtJA=SEbXSN1XORAEOReWYjvWbRxJbuQWtWQWYEU=tux=YWeWbUv=tsQXlJPXSFeJxuxEYuQWxp1XSib=bFDJSuDWYEmXOsP=S=vJ0u6WlEm=tN1JbH1JlJxWbJP=SEbXlWAWxuDEbv1EbJe=bJxJSjm=ljUWlNvWSUYXOJPJSJ/XOuxJYWqJbWQWY=UJYibWOj1=OMxWxj1XSMP=tJeJbEbJbGxXSF/XS5bJxFeWxpbWYRqWbW0WbseJbjvXSu/ExFPXOwq=tuDJYjbWOwx=SseWl=UXOMqJxW6=l=vJxMDXljbExpUJYNbJYs0JlJ6=Yu/XSwQXts/Xtu/=SFqWxH1WOGAW0pvWSNbEbJxXOpvXlpbJxuA=lJ6XORPWOFAXOMA=SM/Ebj1EbEYWtimXOGxJYNvWlRxXSJAEOGDWSsxJ0seWtNmE0ibEbM6XOUv=Su0EtuQEtu/WtuqWlsq=O=bXO=YW0WeXSU1XlEmEbGA=S1qJSsQJbpmWYsPWSR0WtEmWbMeWbEvWYpbWSu0=YNvEYuPWOWe=SF6WtRQWbWAJbpbXliUWlueWS51Wliv=bJPExEmESiUWbE1=bHbESw0EORx=buxXSJqWxvYXSNUJbHYES5mWYRP=SEmJSGD=lEm=YJx=S1PJxMq=YW6J0JPJlRqExpbEx51JlpU=O=mXSUmWO1e=OvbElWQXSGxES5v=b5bW0Nb=OF0WOEvJbWQElE1ExWeWb=vEbRQJSuxWb51WOibESvU=bJqW0uq=OvYWtJ6ExMxEb=bEls6=bivExJAWbpmJSUYExWeWYs0J0E1JYEUEbW0W0R/JYNY=ls6EtsxJbFeWb5YWYj1XOJqJSRq=b1eESJx=Ypv=l=1WSsA=SGxJxW0E0W6EbHY=YsxXSUb=tEvXS5vWxRA=bivESimJljYWbR/WOuAJbjUWOu6XSM/XlMQWb1eJlJeXtN1WxpUWY=Y=O1AEtjUXOs/ExF/ElRxExsxXOweJlR/JSEYWxGqXONbWYNbXlWxWbpmWxJeWlsxXOR0JxEv=biYXtEUE0s/ExsxEbjm=buPJljmEOM/WSGeJ0JPXls/ESGAXluPEbu/WbNU=Yu6J0NbEbsAJYWDWtW0XOJQWOHmWO1D=YpbJlE1WxWPXOGA=OJQWbWeXtW0JYjv=ONYWlJPXSMQWtj1WbpvESNUEbEYWSHU=OFD=tRq=lEYWtNmWYimXOR/Xt=UJ0RQ=SRxEtWe=bueXSuQExUbEx1QWlR6JSWDXlMP=b1xWOMQEY=mJ0WA=OiYXOMeWYivE0JQE0R6JlWxE0R0W0N1ES1Q=Ov1=SsDWbWqWtWx=YW/ESwxJbMe=l=mW0RQEOJqJSvvXSUbWSpb=YsqEOG0JbJD=tsD=bw6WljY=bpmJx=mXOHvE0jUJ0pmJSjvJSUmXSvbEOuPEYWPEl=1Wx=1=bwQ=OuqWbGAJSuDJxM0EtJQJSEU=OpmWbw0E0sPJY=1EtRx=OF6WlM6Xls/ExvUESJDEOGqXOMxXOwPXOHYXSWD=YiYXS1DEYJAJYJQ=S5mXliv=tJ0EtRQEOjUXSUmJbvbEbM0=b1xJxGqESMeJS=YWxGeXtMPJYu6Elpv=S1AElim=YuxJYiUElj1Wx1QXSu/=OvUWOsxES=vWSMxJbU1ESWD=SNmXSJxWYR/J0R6XlW6ElRDWxE1WxsqXljUWxRAJxMPESMeElNUJYReWxs/JljUXSHU=O5vXOMqJSN1JxHm=lsqXO5mEOMQJxs/E0NvWS=bESJ/JS=YWxReEb=vXlJ0=YWAJbvUWxweJYpYXlJQWYM/XlueExWPJSUYWlJA=bRDXOvYJbwQ=bsQXSR6XtuAJxJqWxUbWSpvEYRPExMPWbJ6=tNvES1/=SU1WxF/Eb1A=lR6XOJ/WOM6Xt=U=lNY=SJPEYp1XOu6WljmElNYJSWAE0jmEOMDJSFQXtsD=SMAXtjUEbMAXtJ6JbHvJ0jUEYRD=OiYExUU=bHY=t=YWSjbEbibWb5UXS1/JbJDJYsQWbJ0WSUv=OMAExWA=OWD=YsPEb1eJlpbWlRAWOUUEbuD=bU1WbFe=SWD=tJ6JYWAWSGQXtuAWSMQEx16JYjYXSuDWx5mWOsQJ0pbExuD=SNUEtjY=bRAWSNbE0ibWlsQXtRxJb=mWOWxWtW6JYW0ESN1Xtu6WSpUEO1xJSNbWYRAExGQ=YWQXSUYXSFA=OF6WSu6JSG0WSJ0=tuAWxNYJbJ/JSs/JxWqJx5mJSEUExG/J0uqJxs6Wtu/XOWxEYEbXtMDJYN1E0WDE0sxWSsx=lR0WOj1JxsxWxiUJximEOFxElRDE0JqEOFPXlpvXSwxJSNYESsqWbu6=YsqE0WQ=OMAJxJDJxFAEximXSvvW0WA=YRQXSjbJbueXOR6=S10JxjvJ0MPWbsqXOuDW0=bXtMxXS51JlM6JSGDJSwPWOGPWxFQWljYEYE1WORx=lR6ExRDWlEmExseJ0Wx=b1xWxWPWbs0J0i1JbGAEOJ/Ex1qWxjUJYJAExRA=OjvWSwDWOG6J0=bXOweXSHYJSs6EbuQWOJeJS5mXtN1ElpU=tseExFP=SUbW0WDXOueWljYESjbEORPJYEmJSuAW0RDJlpUESvU=buPWONUE0Ev=YiUEximJSWQWtMQXlsqJbsA=OJ/XORQ=YMxWYWqESGeJxW6JxGDJb51=tjbJxGAXlN1XlseElpm=bjmW0sD=tsPWYWqJx1qJ0JQXOux=buDW0WQWOwqESu6ESpbXSvv=Ys/W0uP=bu6ExGxXOUbEOGQ=YMPEbiU=OMxEtJQESsDWSRAWSFDWSseEO=v=S1DEOUY=buDEYJDWx5m=tsP=tEvWtu0=lse=bUYJSuDWbsAXSNYXSsAXOGxWtE1ExMAE0J/Wlu/ExFAJxHYXli1=SJqXtRQXtu6JSGeJS5mW0sQXlM/JbNbESR6=YpYJbNY=Spm=Y=vWx=1J0EmEbM/WxMe=ts0WbwP=lMxJSE1XO1A=tjYJbFxEl=mXtJxJSW/EO=vElJAJlp1WOpUWYs6ExR/XOGxXSsQE0J0=Oi1Ebjb=YimEbUmESsPWOw0JSU1Ebwq=YJPJSHUJYMDESU1JxM6JYM6WYpUEb1AWxuPXOuPJxuQ=OG/J0u0=b51EtMQEYuQ=bWxXOR0Ebs/JxvbJ0NvJ0RAExvUJSMDJYjb=OHUW0sqJl=UJ0WPWYuQ=SGDXOsPJxNbEbwDJSHmJYM0=b5v=YMe=bEbEbGD=SN1=S=1EYjvXSJQEl=mESv1WO=vXOWAJbG/E0J/JlW/EYsqJxjUWYMAElMD=ORDEOEbXOF6=SwqWYR0J0WxXtNUEb=YE0M6WSJqWbUbWtNvWSueJxweXSvUJYM/WSJAExF/JbFeJS1AElJPWxu0EtWAJYuqESv1EluqWSGqWxWQJYueXSJ0EbFq=tuAJ0=U=tWPJSMQXOFDWSGA=tjYEbj1=bHY=YjmEbJxXSG0=tEvE0imEbRQWxM0W0We=bEYJSibJSpbWSRxEOEbW0p1WOuqWOuPJbjY=OMA=OvbXOpUJb1qWxEY=SsxEbuPWS16WS1AWbMQJbUvWSseWOWeE0R6Xlu6XOR6WSj1J0R0JYEUXtuDXt=bEbs0E0M/Wxu/ESJ0JlEbXSU1XS5bEbU1XONUEYEUEbpbEOuxWYuQ=OuxWxNYXtW6=OuAWlsx=bMPXOjvJbFP=lMPJ0MxWOUYWtRDExFDJxJAJ0NmJYseXOuP=ORDWbvbJYi1WxMPJSivEbpvWxibE0JPWOpmE0=vJ0sPWx=1=tux=Oi1=S1QESsAExwDWbjvJlMqXSNYJbG0JxseWxW6WOHUJbHbWSNbExjU=SvYWS51W0JPEOu6Jlu/=O1Q=bHmW0Em=YseEOGeWS=1WtEmWxFqWSsQJbEY=SFDXSFQExseWbR/JbG0JSW0JSJq=SjmWbHYWbW6EYuDJSGDEbUbXSN1Jbu/Ex5YXtEbXOpvJSUYWOiU=SsPJxFAWOE1=OGD=SRx=lu/EbW/XSRqE0iYWSFQXtsQJ0WPWx1qEx5YEb1P=OHY=lEUWlJqExu6EYs/=SiYExseEtuxXtNvXtpb=OwxElWqExW6XSi1Xlu/JlNbEx51=bWQ=OU1ESRQ=Yue=OH1XSM/EtibWbJeWYNmEbG/WONmXtMPXts0=SjmWxEvEt=1=SEYWxUmExRq=YiYESse=YW0XlReExsA=lu0=OjUWONvWlpvJxjmXSv1Ebw6ESG0=Op1JxFQJS=UWtJq=OU1ExJ/Jb=bW0J0=Ovm=OsDE0sqWbEvJbu0WlWeEtjvW0JxWtR/JxEvEbuDJlW0EOJx=tE1ElRPWYuQJS10JbwDWbuQWbJPEOJeEYWDWbJe=SpmWx1DElRqEOGxJxG0WbibJYNvWYEbEbRQWtsPESJA=b51ElNU=SsDXlR/XO10EYsx=lMP=b=UEOJPEOE1EbMxJxMPWS1xEOimExjvWtueJxNU=S=Y=OGeWORQ=OjvXSEmExJQElNmWb5b=OueEtWDWOpbJYpvExu0Et=vEtu/JxJDExjYWYsDJlWAE0JqEb16XlNmXSiU=bJAWYW/EOGeXSMAEOJqWts/=S1PWYJQEtu6JxF6JYR0ElMDXlNmWY=vJbFAWlWP=SjbJ0EUXt=mWxUv=SwQJbE1WxjvWYuqXljmEbimJlu/WtuQ=SseXlWPWbE1EtM/E0WDJSjb=YR6WYNUEx1PEtsQEbv1JxNmWSRD=O=bEtuPJ0NvElpYWbNYWbj1=SWPJljYW0R0Jbw/XtR6JxRe=b1xESR/JlseESF0=OpbWbpUXSwqW0JQExHUWOwx=SG/WxH1JSpUWSMAWlMqW0MA=YW0XlWAJxGQWxMD=bJqXtWxWb=bJSJPWlWAEYWAWY=UEOH1XOGDESWDXlRA=OsAWbweJxHbESu/WS=vEtMAWlWqEOvY=liYEOE1Wl=1JbW0=t=vWlJxWbGQW0=bEtEY=b5b=tWAWtJ0EbEvJx5YJxweJxGPJxM/Elpv=OFxES=1W0JPWlJqW0sxWSR6WtjUXls0WlM0XtN1XtWAWbpY=YR/=ls/WtibJSUb=OW6EbJPJxweW0NUWS5YJls6JbuqJxwqW0uq=OM6WYWqXls/WOu6ESReWlW0W0ivESsQWbRxJbJxWbueEbMe=tuD=bUbESuqEOR/J0JxEtJDWOJQJYJQ=tueWxGA=O1x=SGeWtW/XSMeWxWQE0M0JYp1WxpvWlWeWSRxXtiUWtuP=bFqWSimW0JxWYsP=OWPWxWeWtsD=YuQExGxEtue=bRAJYjY=YEbEb1QJ0JPE0sqJb1QE0R6WYEUXOW/Exi1JSJDJYu6=SRDWYp1Wl=bEO=bXO=mWxweWxjvWOFqEORPE0uqJY=mJYsQWb16WlNmEYJ0JSwDJ0Em=Ow0E0M/JYpbWlMD=tpUWbNbW0JDJYivJxNYWb1qEYjUJlMAJxJ6JSj1=tJq=lWD=O10XOWxW0N1ESwQJbFqExE1W0MQE0JqElu/JSN1ExsxWlpYWYseXOp1WlueJSw/Eb1qJxFAEONvWS1e=SMDWluPJxw/WbJPXlEv=ljUXOGD=tNvXtJeEO16EY=UWxseExWeEO5U=YuAWbwQXSjb=SH1ESNb=Spb=SU1EOF/=buxWYJQJYsQXlMe=lN1Etuq=bGx=tReE0W6WbM6WbWeEOuQWS1xWlM0=bpvJbEU=OEYEYMQWbimEbHUJxEYW0RxWl=UJYsx=OWAEO1/=bpmXlJeWYM0=tE1E0s/ES=m=lEb=tpU=tJAJb51ESGeW0EmEbJPWbpUWSGDXljUXSF0Ebv1Ex1/EYMPWYjbJlJQJbF6J0=bEYs/JSEUEO1xWxW0=OJxEYuqESjmWOpU=OWP=OR/=b=bXSwPExM/EOW6JbsQXSu0EO51WbWQXtW6JbUv=YiU=bvvESu/JbGQJ0Nm=SEvXSRQXtW6WxvYXSJx=YRqESReE0MxJxNb=S5YWOivJlRAEOJ0=SRxXSMPWSGPWtJqWY=YE0M6JS=bXljYWt=1ESue=SUUJxR0WlRQWbUb=YRQ=tW/WbHvEbGAXlp1ElpbJ0NvESjYJ0sQWtjYXl=bESibE0RP=l=UJbuxJxuq=SsPJSj1WS1DXOHUESjUExu/=YEbWbFPJljvXSUb=SH1EOFQE0pUWtN1=YMe=ONYXOuqWS5mJSuAEYWeExUYWYJx=YWPWljmElWP=YJ0EOR6=SNb=SMqEOMeXSF0Wbp1EbjvW0jUJ0=1E0M6=Ojv=tiv=lsDWxGeEtsxXOpYWbwAWOUbWxjY=O1qWxMAJSWQWbJ/JxMe=SJeJxwQ=lpmWOuqWxG0=YR0JSMQEOJPJ0ReEYiYES=mWbUmEYWQEtNbXOE1JbRPEOGQJbsQXS5vWb1Q=S1/XSjUXtMqJb5YJljvXlRDEbF/XtMqJxwPJljbWOuqJxjYWxNvWxUmJlpYWS=1WxJPWOEbXOwqE0uPJxRxWOMQJ0JQWxsDJbEUEOWxEYiYWORAWbiUEYu6ElJeJlJe=S1eWO=YJx51WlEv=bwxESJ0WxvvElpmExvYElEUJYsqEbu0=SGqWOWQ=bsqJ0p1XlWPESNbWYse=SU1=SGAWYseJbp1W0MxJSR0ESv1WbWQWSWQXljYJbuxWbUm=bUbXO=v=SuPJYRPWSuP=O5U=YW/JbvYJYsAJYJDXO5bJ0WqXlj1W0=1=Oim=bUm=b5mWSRxWYNYJ0MDJb1/=tjvWliU=OUvESEUElEvWlNmWOivWY=Y=Yu/EYNm=OGP=OuPJb1eXtM0=Y=bJxj1WSv1JbFxElWQExuPElu0JSGQEx=bWtuDJlEvJlu6WSE1JSpvJSM0=tRqW0MA=l=vExEvEOW/WtEmJbJ6E0WDWbW6ESM0Jb1AJbF0JlJ/WSs6=bHYJYsQJS16JYJ0=Sw/E0=UJxHmExivWbUmJxWxWYp1ES1AJ0M6Jb1eWYs6XOwqESueXlJeExNYJb=bJxEYJSu0ExGAWYpvEbWe=SuqWYJDWtjbWlRAESsAEtuqXlNYXOG0WYWq=Si1EOJ/=SUbExJPJxU1WljmE0u0ESWe=OGP=SsAXSM6ExGeWOjY=S1/WbEUXOWPEbNmESUbJSpYWOG0Ebpv=tjmJlEYJ0seXSU1XSEmWOuPEOpbExim=Sv1JYpbJxuDWtNmEOsxJSw/=SFPESJqXSWxE0WQEtsqXOjmEtW6ESMQJlWPJSw/JSuxEtRQJxUvJxRqWOMxJxMqEOW6E0NUJlJAJbuQ=lJP=bsqJSpYEYRPEOJqEbFeESsQJlM0=OvvWYNUWYsAWxwqWOuQWlsP=YRqWYJ6Wx16WlEbEbseXOw6J0NvWxRAWx=YWtR6XtJ6=t=U=Y=vElRA=biYJb5UJxEbEbweWORqExNUJlpU=bWxJxwAWtEbE0s/Xtj1EbGqJSpmJ0=Y=b5mWOW/W0s6ExFQWbwq=SM/Jb1e=OJPE0JP=SjUEbu6ESG/J0Em=b1qWSW6WO1qWlJ0JbjU=bu6W0W6=Ou6XlNvWYRQEtJDE0EmXlRPEbRe=YpmWlueWS=v=bW6W0MD=lMxJlJeEOseJSJeXlRqJbE1JYMxJSuPESw0=Ow/=bwDW0=1JlEbWxMeW0pUXOMD=SRDEYMxW0R6WOW0ESw/XOH1XOUmWxiY=bj1Ex5vWYivWxw/XlJxES=mWOW0Jlu6Jb1/=tM/ElM6XtWQJxvvEb1xJSRAEb=UWOGPWxwxE0j1WORxXSGqESMqJ0ReJ0JQJ0Nb=bsDWSJ/JxW0WbFeJSs0WSu6WSweEl=vWxjbXtsPWSjvESHb=bjUJS1Q=bUYJxGPESFqESMPJxUvXSiUJlN1WbJqXlRe=lWPXOJeJx=m=O=mJbHvJxpvJYRDXSjYEOseWO5YEYimExpU=OMQEl=mXOMAJlW/=bNmWxJ0Wljb=l=vJbE1J0uxJ0sQExMxWYR0WSFAE0jbXlimXSu0Xli1=Y=UExFPJSwPXtNbWSR6E0WxWxJ/JxjYJSsPWSJ6JximWtReJ0uxXOMqEYNvWOsxXSGPWbU1=SUbWOMqExM6EOvmESJ6EO1P=SNUWYuAE0MxEljYJSGqWOjmEOwAXlRQ=O=YEbG0Ets/EtWqEtN1EtMQXOjbElMqEluQXtsAESW6ESG6Jb10WYjbXtpmJ0=bXO5mEbHbESH1WlMeWS1DJbMD=S1q=SuAJbv1=bUUWbueEbMPWbWxWYMqJSFP=Yu0JbF/WYJDXtivEYimWYReWxRx=OWAJbGQESvYXOEYWtNv=bJQ=Ss6=tMq=tMeE0pmXtRA=OvmJxW/WO5U=Owq=buqJb=1WSGAJxj1W0WxJl=mW0ueXSEvEOR0JSMDESWP=Ojm=Sw0EtjbEbRqEt=vJlNmEYWPXOueExwAJ0EmJS1DWb=Y=lRxXSH1XOw/XSEbW0=v=YMAWbJA=YJxJls6EbFqJbEUJSG6JYRDWYRQ=bRq=l=UWOEU=O1PWbR0Eb=bXO5v=bWqWlW/EbsQJx1qXO1PJbE1J0EvWSE1W0NYJ0Nv=O1QXlsAWSGDEOsAJx1xXlWxW0RxEOj1=ORDXOuPWbNUElp1JljbXl=mEbWAEbu0ExM/JbR0EOJ/=OseWbNmWbJeExFqWtR/W0J6EtsAWxEY=bMe=t=mEOibWb=UJSFqElMDJlNvEtR0WbuqEbMxXtRP=YJq=bNb=SG6Wbs0ESsqExjUWSM6JbJ0XSN1WSR0EOJ6ElJ6EYMxXSWAExiYXlWqJ0Je=YRP=tse=S=vEtR6Ets6Wb1/=bHmJbW0WluxXSWeEYibWlpUESMA=SEmWlNmJxMAJYjbEtM6=YWAXSNbWYMqJlJAJls6EOFA=bv1WOuAEbUm=SJ/XSw6EOvvEOs/=YpvXOGQJSs6XOEvWtJ0Eb1/XS5bJYJ6XSEvXOu/ESMxEOMQJlMeXti1WSibJSH1EONYEtRxJb1eJSsPWSuD=OReESpmXtR6J0uAWlpb=bF/XSs0XlReEluQWlpYWOuPESR0=bibE0ueElReWOiUJxwQEls0WtJQWxGeXlJ0JbsA=timWSjUEOsPWlMqJSEbXOGAElu/=SsQJSWq=bi1=OGxWtJ/J0=bWbHvXSRq=biU=SM6=b1QJYjUXlRxWSFQXl=1=YEmXtNm=bi1El=UJYs0=bJe=tWDWbseJSueJxuAXSJAXSpvWSs/=Ys6JbHYWO5bXOuxXt=vW0EU=SRPEtuAJxFP=bMD=SwxJYWQWSs0WYimWYN1=b5UEbNYEb5bESGAEbGeWOGxWYWxWtJAEOGPJb=1ESWQEt=bWYuqXlu6=Yux=OvmWS1QExG0WtpbWOuxESW0XSRQJxM/ESM0WxNmWtM/=bMqJSFqEtNmWxwQESWD=bsAWSWQWYpU=luAEYE1=bHvJYpbWSFQWOFQWbi1=O=v=bGeEb1eXtW/=OM/WSEUEOG0=SsDWSM0EbG0XlpbXSGxWbFqEb5vXtW/EtWP=OjvEbJq=Ow0=t=bW0JqJlimJYp1=l=bJbw6W0jb=S=YXSFP=OHYJYuqEOGqW0WAWbGeEOWeJbJ6=ljm=tuPEOpY=buQJbM/WSR/EbEbWS=vWbW6WxN1XOWx=YjbJSivJxRAEbJ6WOim=SMAEYuPJbwqWbW0=ts0EYWDXSs0=OM0JYjv=bp1Wb1Q=SF6El=bWOMeXlpU=SGx=OwPWOsQESGDExWqWSG0=YNYE0jUXtE1=Su0=b=UJbs/=bE1EbWxXlsDWxGAJ0W/=O5UESReJ0sx=bvYWSwQExFQJS1eESFxJlRx=YMx=OimJlEYXtN1JxEmJ0sQJ0MxEOW6JbWDEtW/ESimXSG/ElMQ=bwxEljYJSJq=S1qXOWqJSvv=bu/ExReWS5mJxFxWlWQWO1/=b16XSJqWSW0ESReWbJ0Wx=YWSuxEO51JSMe=Y=bJ0Jx=SsA=bN1EtMxExNvJSwPEbRAE0sA=bJQWlp1XOH1W0sD=ORqXSiU=Yj1EtuxXSu/JxFQExH1ElR6EOF0=tpUEYuA=OU1WOGqWYM/=luxWOwQJ0J6=bJ0EbwQWxG0WS51W0JAXSwqXORxXlimEbw6EYRAWxGQExEbXS1Q=SUU=bib=OsQEYsAXOvvWSRDJ0pUElJAEO5UWYuPXluxEbjv=ONU=OjvExuAWxGQExFqXOHY=OM6XlRDJSvvJxNbEYE1Ex=U=SpbESu0WYRxWSu6JSsqXlMAXSM/=OMAWSGq=SuDXlEUXOGxWSwe=tRQEbv1Wbs/=YJ/EbFqESWxJ0JDWbEYJYu6=S5mXOwxWxpYJbuAJYuxJxs0ElJAWSR0XtjbElpU=OFQWtWxWtRx=YWDEtjU=S=bESw0=O51ExR6XS1e=SwDJ0uqJxpb=SEmEbuDE0EvJbjUXOuDEb1QJxibExuxXSWD=OF6JSpUJbGqWlW/XSwqEOwAJxJDWSuAE0RDXtsqWSR0JxpU=lNmJls0WxR0=Sv1WSibWYJxJ0JeWO=vJxGDXOH1WYs6JSHbWOFPExU1Xt=UXtJP=SF0=SH1JYM0WxjmWt=1EOjUEOv1W0sPEYRDE0sx=OU1=O5UWbuP=YuPJSFqJYpbEONYXOwxJ0=UWOjUWxR0EYJeXOweWbs0W0imEls6EY=YXtWqJbWAJlRQXOFqWOjbEOuPWtRDWb5mE0u6EtRxJ0NmWOJq=bE1=bseE0uDXOJPXtMqElNbJxpYXli1WSiv=lM0WxiYEOs0XtE1=SuDExJPWYE1WYiUJxwqE0uAElJ0JbFxElJq=bF6JbMeWSEYElNmEluPEtMQJSwDESiYWO5vWSpvWS1xEx5UWtMPW0Jq=tivWYNbEtRQJlRqExFAWOFAXOHvXSuQWbwDXlEvEO10Wl=1EYuxJxJPEbW6EbuAJSF0Eb=vJSjYESGDWtivXO10=YEUJb5b=tRDJ0u6EbRAExwDE0iU=S=UJbwqJxjYXSNmWSM0JYs/EbGQWtivJ0sxESNvE0uQEbs/XOMeExFQXO1DWlsPWYsDJx1PEbjUExj1EYWAJYNmXOM/=Spv=bGAWxsP=ljbExGAJluA=tMxWxF6WbMPEtR6JS1PJbimExu/=S1e=bUYJS1D=YRqWbwxXSimJlMQ=Op1EYseWlJAJSuAXSjYJ0s6EYJ6=OW6Wxj1=SRAWYRQ=OJqElu0EO51=OpmXlsQ=SwDJYMAEbj1JluP=bJDJSpmJbNUXSJD=Y=vXSsPJxw0XlW6ES16=bHvEOEm=YNbE0seJbR0JlsA=bJDJxRAWOu/JSMQExsDWlJeW0R/WxM/Wts/JSGDWOG6XtJeWbs6ESuAEOFD=tJAWSEYW0seESGe=S=U=tJ6=lsQE0uxElW6Etiv=OuAE0MeEOw6Wb1qJx5mE0RDJ0ib=OEY=luxEtRQ=OR0=O1Q=YMQXljm=SWPXOMQEOJPExuQEtN1EY=vWYNbXS1qJYR6W0NUWSFAW0NY=Y=mWbG/EO5mWOF/E0iUEbsQJYjU=SuPXOJPWtu0ExJDJbRqExUm=OHY=lMPJS51JYEm=SpvW0iUJbMQElMxEb1AEYNmXOWQWtJ/ExjY=lWDEOHbEYjmESR0JYjm=tuxW0NvW0RqESW6EYNUJ0u0JYJDJbiU=bi1=ORDWlRDEb1AWS1xExib=ORAEYEbW0WqWYpbWbUUW0ib=tsAWxE1WS1DEti1=lEbW0imWOJeEbEmExW/Xtp1XlJ6XSEmEbE1XOF/WOGQXSRQElJQJbJ6ExM/WlWxWljvJxEUJxF6Jl=mEb1D=Ow/JSjvJlWxWYj1JxUbEYR0EYseXOWQXOvYESMq=SMAEx=b=SEYJSvv=ls0JSiU=Ou/J0W6WtEvJ0J0Xt=1JlRDEtEYJxw/Jx1qW0WxJx1AWSsPEbimJbjmJbH1=OG6WtJQJ0W6WxW/JxFQWSWDEO=vWxuxJSNY=SEYXSpvJSMPJSWQWSMDXOG6JYN1EbFe=SW/WSRPEluQXO=vWlMAEbRPWl=vXOibEYueJ0WeW0E1W0R0=bFDES1AXSG0=bjUJ0RD=Yu0JYuqEtN1XSWAWxReXOsAXlNUEtsAWxUv=OpYEl=vJbWxEYNmJx=YJls6EOi1JSimEYJ/JYuQJ0Wx=bEv=OpU=bWAJxNvWtj1ElpmWxMqJSp1JxJDWSNvWOW/WxG/WbuqEYWeXSNvJxMDE0WAWSwDWbiUEOFxEOs/XSUm=Y=vJSGqEtJqWb1xEOWDWSEmXls0WOpbE0ivElNUWSw6XtReJlMPEt=YXSNvXtJPESG6Wbu/WSRA=OjYJ0NYXluxXSJ6EtjUW0R6EOwxJxw/XtJ0=tR/=tueES5mWOpb=ts6Xljb=OsAEOGAJSUb=ONmWtJx=tJQ=lR/=tEvJSHvWbFqJbHb=YN1EOM0WbM0ExwQWSUbJSRDJlN1JSMDJ0NU=bvvWtJP=OHYESR6WxHYWxFeEx1/=b10WYuPJbpmESuxWxUvW0EYJxvYJSWxXt=mEbUv=tRDEONbEtRQ=lW/XOibW0sPElRq=bJAJYMx=buPEl=YWSWqWxEv=bWPESs0XOEmWSWPJbs6Jb1QWbMAWbR6Jx1/ESs6ExFxXlsqJbvUESuPEbJ/XOvU=timJSU1ESuxWbF0=bEb=SFQXSvbWtiYW0M0=bvUJbs0WlNmElsDEbUYEYuqE0WPEliY=YsQJbUvXO5YEljmWOsPWtJ/Expm=lNvEOWAEl=1WbHm=YWAWSHYXlW6WSMe=OuQExWe=luAEYJAESiUElN1=SpYWbUYE0Re=O1qWYEbWSp1J0RxWb1AXSjvEtW/Wxs/WOMQJ0=vEYWQ=tE1=lNm=OUmESwQXSFDWO10WYJDElivJSF0WbFDExwQEOiU=Ys6Jx1PWlNm=bJeJlW/JbsPESJDXOFxJSUbEb=b=Op1WlJqWbFDWOsAWxMDEO5UJx=mWOseWOMxEOR0EOGxWYjbXSJPWY=v=SseWYJDJxM6=YjbEORq=SF6EYjbXtWeEbFe=lRPElpYEbuDEOsPWxu6XtN1EtWxW0W/JSUmXlJ/WlReJS1DXlpYWYuAWxivExGDESjYEOG0Jx=v=O10WtuQW0MQJlNbJ0s0XOw/WbHvJYWqXSimJSHUJ0RD=SsxXOi1EbpmWxUb=bjUXOGxExs0JlNmJbueWO1/E0s6WtJ6=SUbJbim=YWD=Ssq=OFe=lW0=SseEbGqWxsqWxN1XOGeXtsqJxu6WxM/ESRxWxMAEbWq=bjvWYsx=bueWbuDXlim=buxWbWAWxMqESsqWOJ6ExRqE0N1=bE1XOJPEOjbWOuqESw0EOUUJ0ivWSWDEb1AEYuDESs6Wlp1WYRx=YWDJSw/=bRqWYiUE0s/EYi1EYu0WYRD=tReEOueEtJAJS5bJSGDESwAJlE1ESUYWxEv=bGPExE1Jl=mXONv=SG6JxGAXtWPWtpmExu0=lEbWxJeEOWQESvY=S=m=SM/XSwAJ0Jx=bFxJ0WA=bGxWOi1=tsxWlsQW0JQXtueExwxXlEYJ0JqWO51JxJAJ0WDE0jbXSNvJx5vWO=1EbuA=YReJSimESjvWOpv=SEb=SG/Jx1PEbwA=OF0XOG0WtN1=bG/=YWPElRDJYjY=YueWYjb=SWQJbG6=OHYXtEb=OM/JbUUEYuPWtuxEON1JbsDW0sqEbFqXlMAEtWeWYu6WSUYE0MPXlWDJYpvWbimExFA=bM0=lpv=S51WtuqEt=vJxHmJx51ElWxXtJ/WlW/EOuA=bwx=lR0=SwP=OF6E0u/WSiYWOEUWbJDJS=UE0uAXSHmJlJeExRD=lpmWxuAWbMQWOF/EbivXtibWlpm=YJ6Wbs0XSUvJlWeJS1/Wtu6=bu0Jx=vJbR6WtMeE0p1JbMqJxv1JYpYExjYWOvmWSvmEYWqXtNvXSG6W0uQE0N1JYNY=tiUEYEU=Sp1WSR6JbRP=OF/ESvbXOwQ=bFPWSFxWSwDE0EU=bNbW0sDExR/=buqEbpv=bwPEOU1=b1eEbFqXSJDJ0RA=SJP=OuAW0MDWlR0JYNY=bW0XOGP=SjvWbv1WS5YExv1=lRQJY=YJ0EvExpbJ0NYWSibEtRP=tRq=SWeXSEmWtpvJxG0EtMQ=lsxEbs/JSJx=OR/Jx1AEbJDXSimWSpYElibEOR6WlMqXlWQE0RQWSsx=tM6WOGeXlpYXOG/ESweXtsqExR0Xtp1XlMe=tNbExJeEOiUJ0WAEbGqJ0JQJYNY=Yux=Ow0WOHYWSHUXSReJlsDE0N1ExWDWlJ0EOu/=OFA=YM/ESHvJbjUEbGPEONYWSvmW0WAWxNmJYJxWb1e=YuqXSGQWOMeExwx=bR/ExGPJxFPWbG/WxHYXOJQEtN1EljUXt=UEtpmWxFeEtR0JSu6ESNvWxjvEbwPEb=UEtWPXSJeXtWDEO1PWbHmXOuAWO1P=tEmEYJQXOsAEYJqExF0WOw0EOvbJxse=tu6ESJqWbj1JbFQEOjmWOUmXSRDJSG/EbUYWxwqEtsQESM/XOJAWbF/=OJxElsP=OsD=ONYEbpUWSEvWbRe=bWxWbUUWxu0WONUEtR0WxiYWlsqXSj1JSE1JbjbES1xXtR0JxReESJ6ExivJbRxWlWQXlNmEtu0EY=UJYMPJbM/Ex1xWtuPXSWeWbvmEluPWxjYXS5YEljv=OHbXOJ0ESHY=tJAWO10Jbw6JluxJS5U=tRQWOvm=lMDEYiUEYNUJbsAEY=YXtivXSR/WbUmEbU1Xti1JxHYJxsPJliYEOFqJYW/WYpYW0pbXOGQEOJeE0p1EYR/ElMxElR/XlMqEbWxEYJeExJQWSGxWSJ/Ex1eEbFPXOsA=bu/ElEbExvUESHU=bjUElRAJYimWSRQ=SwqXSJAEbF6JxWQElMAWlWD=lMAXO=vXlJAXl=mWlMP=lJ6XO1qWbsDW0WDWtse=OsqESjYWxw0XlMDJbHUXS=U=SjUEO=vE0=YESvmESseE0MxWbvYWli1=YWx=buDWOFAWxRPWb1/=tpYEOv1ESw0JYMPXOiY=YseWS=mWtRQWxpYWlu/EYJPJxF6WYN1JxW0JSHYXtNbXOwxExEbEbpUWluxXtsD=tEvJxEbJSJqESGDXtJ0=lW0JSibEOJAElWQJb10ExWx=bN1EYWeE0NYJlR0JlW6WOW/WtN1WxpUWlWP=Sj1XOGqXO5UJY=UEbs/JSG6WOFq=tJ/=lJQJSMxE0pmEb1xJ0MxWtEvEOJDWOR/=liUElM/Wl=1=bsAXtRDJxWQ=SGQEO1P=OG/WSFeWOvvXlWPXOR/XlpvWtMeJYs0XljmESwAXO1PJbFAWxF/EYR/=OM0ESFeJx=1XtivESJ/=lEmWxj1=O=UEYJ0=SMDEO1q=bNYWY=b=OvUXOvUJlibJlNUWSEbEO1qElEb=tMqWOpvJbGeESG6WOwqExvUWOu/WxGDEYMQWYu6Ex1e=bR0=SMDEb=b=bE1EOMqJbpYWYjmWYMAEtu6EtjvEbseJbs6JxJ6EOF/W0uDXO5YJli1W0EmEYWxWYRAE0=v=Sv1ExpYEOueEbsAWOG/=lsqEYEY=YiYJSu6ES1PWSJxExJ/JSivE0sqE0M0JxNmEb1qE0RAEOjU=S10WtW/=YW/ESHm=bUbEOwqXlM0ExHbWbuA=OG6XOGPJSJD=OGqEtsA=SJxWtJ/=lseWSwAE0JA=YJQ=OWAExNYJ0s0JbuAWb1QJYuA=tRPJbRq=bEY=lNYJb5YEOM6=SF6XtWA=Ss0W0M/XlW6JlMxJlR/=SEm=OG0E0MqW0M0Jls0=ljvWOE1WbivXOHvEYMx=b5v=ONvW0ibEbGxWSJxEOJx=YR0JSMxEYRAXSR/WSv1JSuDEYWqES1PJ0EvJS=bXOMxE0u/Xtu/JbN1XtNUJSvYJSsAWbHbWSFqJbjUJbJAJSj1WtEvXOUU=lJPWOGq=lNYEbpYE0sPWSwDWlJDJbHY=bJQWSU1WYibJbwxWlueElWP=OwqJSMqJbw/=lRD=YRxExpvXtRPJlivWSvmXS5UJ0pm=bM/Else=SvYW0jYJSuqEOweESi1J0=bXOE1ESpmXt=UWlNYXtJQJbMPJlseXlsxXtpYJx=YJ0u6XSUU=tWPJxwqEOUmXOp1WYE1=bwP=Os/ESu6ESpb=l=mXlivXtMQWxWPE0W/JYM6EO1eElsq=SM/EbjY=Sv1WlE1JYWPExWQ=lsq=Y=mE0uPWS=YWOj1JbivJS=vEY=UWtuxWxF/E0N1XS5YWxw0XlJ/JbWQ=OEYWOvmWtNv=ljYXlEYJlWxJbRA=YEUWYE1ExFDXOG/JSUUJSEYXtNmEtJ/EOJ/WxN1ESM6EbHYEOivEtMA=OW0=YJqEYRAXlE1W0JQWbNYExEUWOjvExMQWSWAJbMqXS=mEbMqWts/XSu0=YjUE0jbW0ux=SRPXtRPXOM0=S=UJl=1=lMxWY=mWSUvWlMQExGQ=lpmWSGqJbw/=YuAJYuPJ0pYEYMPEbsQ=bW6WtJ0Wx1eES51=bNUXtReEOHmWSuDES1PEtjbESRqJSJDWSW/J0uAXO1QJbWDEx1eWOW/WxNb=OEvJSMPJ0W/EOFQ=SRQXOUY=bjvXlpm=OG0WtuQJSN1=bux=Op1WO5YWtJeEYNvXOFDXSFqXtimWbvbJxHYEtW0ElRD=SuAEbu6WxWDEY=UJbJA=SsDJx1/XlsqWxGeWSHb=SUbEY=vJYWxWtW0WxseJbG6=SiUWtMAJSpv=tWDJSpmXSW/WOEb=SuPWYueE0N1EOu/EtRAXSwqWlWDXt=YJxibExFeXlpmWOjUWxJDXljUWOGqWtseWbwA=OpbEOJq=ORQWtR0E0pmJSiYXSpYWbsPExRqWOwDWOu/XO10WlW6W0jUExMqXOp1ESUmWYReWb=vXtuPXtjbJSW6EYjYXlEvWbMx=SwQExs0=bE1W0sQJxH1EtRAJbF/W0J6XONmJxReJbR0JbRxJS1QJS=1=OG0WO51JxHmEYpbEtimJlEv=bM6JSHmWYRPWxGPXOw6ExuxJ0jmWtjUEbs/JSGPEOvb=SMA=SwPJYpYExR6WO16Jxs0E0=YWxJ/JxRqJxs6EOJqW0JQJbFPElRDXlW/=bFD=YN1=bvbWOFqEbG/EbUbWYJ6ESNYJSNU=Ou6EbMe=tJeJxHbExWx=OUbEOsAXORQJSJPJ0imWtiYEOJxWtRAJxFqESJDWts6EtJAExFAJximXOE1WOEb=YM0EbNYJS51XSMxE0=1=bjUEbpvWOM6XSHU=S=bWxE1WOpUWbUbExs6WtpmW0EmJSE1=SuA=luDWl=bExsDESw0JSGAWSHmWxuqEYRAEOsDXSiUXSwA=Ysx=OHY=SMqESiYESs6JljU=b10XOv1XlMx=Y=YWbEbE0J0XluQE0uqESFxExRAWli1JSpU=SW6W0JDWlWPExMxW0W6JbF6JxWPXtJ0EYW0=bs/EluQExMPEljbExUbJ0JQWSNv=SG6JxjbXSv1JSUvJbj1=SjbEtMeWS51Wbi1WtJqWlW6J0uPExvYExwx=lueEtpmWSv1JS=U=bw6ExE1E0s6WOu6Ebim=OFxWx1eEbpUE0R6ESuPExjYWOwQ=OJ/EOse=bUY=bG/J0JAWOM6JbRAEOJAWtJPWbwxJSjb=SGQXO1/WtsPWlJeW0JQESpvXSp1JSsQJbRPESu/EbseEtJDESwxEYWxWbs/EbM0Wx1xWxGPEbuAJ0=1Elu6ESs0=lj1JYWx=bF6=OEmJYs/=bFQJljUXl=vElM/EYp1XtiYXOsDWOvUWt=UJbUbWtWeEO1/ExW0=SseElMDW0Nm=tNUWtJ6XlWxJxNYWlNvWYEbEtEb=bpYExGxXlR6ElMqExM0JSwqEb=1ESwQ=lWqJbp1JSsDXlEmEYibESF/WYiYJxHU=YMPExJAEYse=YJ/JSvmESW/WxM0XlJ/=S16WOEvWYNv=b5YXOUbWbuPESMeJ0=m=YWPJSueEOweWbsQEYNYE0j1ExFxXlMQWxWxWOEYEOG/=t=UEbM0=S=1ESJqJlWqEx=1ESseJlsDE0uqXtMQWtuP=bGxJSMQ=SJAXOEmEluQ=bFeWONUXOwAEYEbJ0pUESjYWxGxEOHYWb16JSFAXSwPJYWxWbjUJS1D=Ss6Jxs0WxNmJYsxWxFAElWe=bwAEYE1JSHU=SEbEOFAWlRP=tJ0JbJPJbuAE0iU=Sse=OsqWtJQESuD=tJPXOMqWbFxJbUm=Sw6JYMQWxpUWbw0EOjUXOW6JYW0WxuA=OHUWYEbJSGqW0R6WYJ/WSivJxpmJSuAWSw6=b=UWOsAWx=YJSsPW0RqEbNmES5mXOWqXluq=bHvJY=vJSJqXtMDWxuqXSG/=Su6Jbw/=SWPJ0MAJSHm=lu6XlNb=OJqJb1/JYJqJbu/JbiUJxG/=bHYEOj1=tpbWtJ/Jxjm=SsQ=YJ6EYs6WOJ6XOwQEl=UElMP=tJeEOG/=b1QEYNYWSpb=YuQWbvbEYR0ExHv=YE1EORDWbM/W0MqJxMAWlM/WbwDEORqExWqJYJxWOwDEbMDWbuDJSUUWxMqEOU1EOp1WYpbJbRAEOF/JYMq=bsxEb1eEYu0XO1PWxRqJx1/JxM/WbwqXlWQ=OueWOG0=tsQJb1qEbG6=SHm=SsQESsqJ0E1JlRP=bUYJ0EYJYJ/=bFeJbwAJ0JPXS=1Wbw/Wb1qJbF0=tM0XtM/EON1JxwAWYuA=b=vJbivJbiY=YiYWOj1ESNmWOuxWYJ0ES5v=OjvXtuAWYs/WYEvWls/=t=Y=YsPEYp1WYuP=b=UWOuAXSEvWS1QExvm=SwP=OEUWSsAElWe=lR0WxG0Elpm=tpvEbNUXOGDElR6=SJA=SR6WOvYEb5bEb1DXOp1WSMe=bw6JbG0=SuDWb1q=YuPJSWQWOUbJbs/ElJPWYJ6=Ow0JSsQ=tMDJbHYEYMP=YW6XSHYEl=1=S=mJ0EvXS1QWlMQXSWQExvv=Sj1WbuQESNbESWeJbJ6WO51JxibWSMxXSjYJbsPE0EYJYJ/XtpvXS1A=luPEbs0XtNYWbRxESUUWSsqEls6=tJPXS1qE0uAWbM6EbNmWSEb=YsQWbH1ExuPXtWxWlNYJSMQXSMqEbwPJSFqJSNvJl=mJxsDEb5vWlWDXtJ6W0jUJYRPWOu6JSs6ESGxJSUvXSW/XlRQXOWxWSFQ=S=YWYWPExjUW0ue=b1AWSjvJSwPJbM6XtM6=OvbEbU1Wxu0=b10ElNYWYRQWSNUWOUU=SM6WbWe=bMAWOEvElMDJSRxJxjvXOsAJSseJxG6JYJ6ElEYEYNU=lMQWOMx=YsqXS=b=bjbJxs/=SMAEONUWYWQJ0E1ExH1E0R0ESHvWbGDWbwQJxGDWSEmJbuq=SR0W0W/ElNUXSpUWx51JY=UJ0sQ=SJxEbw0Wb5YEx=mEYJ/XluPEYMqExw6ESJPJlRxWOHYXS1Q=YJDJbE1WxJxEORx=tWAWxW6JYWeWS1e=YEbEl=vEbRDJxFQ=SW/=buPJxJAJxHbJSGeJYRP=tjbWxJ/XS10=lEvEb5mEYs0Wb16JxsDE0Je=b10WbjvXtpm=OWxESjmWOpb=bF6EYuxJYu6JYEbJYuQJ0uxXOwxWxU1WbJD=bFDXtJDESH1=SjUXlibWS1eJSW/Wxjv=OjmXOHbJbFAEYRA=O10WSjvEbuPEx5UW0WeJxuQWtW/Exu0WOJxJlMeXlimESw0WtsAXtW6W0JDJxJPEx10WlueJY=UEx1PE0=1=OuPJSRDWSibEbwDEls/=YJD=bEvJSEb=YjbXSJeXSUbXSwqJlEbXtJ/XS1DXljU=SF6WtpU=bFDJ0Nm=SpYWxR0=tMqW0sDWtJAJYuxEYpvEx1eWbjvESsP=Ou0XOJQEOjUEOiU=SjmWlWD=SNbEtWQW0RDWYNmES1/=lWxWYW6WO1QW0uqEbR6ElpvJYM/JxjvWOjbXtue=luxWSJeEYpbEbMe=OpbXlRPXlWxExiU=OpYJYuDXSu6EOEYWYi1=S1QEtsA=OibJ0R6W0ReXSUUXSWe=lJx=lEmJSW0JlJAE0NbJSwAXOM0ExMQEt=bWtMeWYEvEtuxWOJqEYM0EtM6XtRDWSJ/=O=YWYMqWlEYJ0R0EbvvEtjvWx=vWONU=SM6WSUYWtMPEtJDESNU=tRDJbJDEbRPXOReExJD=SWAJlN1EY=m=YuAXSFxWlW6JbM6XtpU=tRAEOJQWbi1JSFAJlR/JxNv=b16Jbj1ESF/=OwQEO=UEtRQEYMA=lWQJSJDWYM0EtpbJxwqW0MqESpmJSGAE0W6XOWe=tMqJxMP=OiYJSE1WYuA=bG0WOHvJlM/WOG0JbG6=SuqWYJQWYWeJxsAJSUvEYpYXOHYWlueExsq=tWD=bFeEYRQ=bR0JSueWxJqWOiUW0pm=OFDEOjm=SFeJ0We=O5UEO=vWtibJxsQElEYWl=YXOuAWxsqEljYWSpYWxivXON1Wb=U=buQEliUXSGQWOR6WOH1XSvYWxsQJ0MD=ls/JbwAJYJAJxF/Elj1WbR6ESwxEls6WSimWlEvJbuQW0M/WSj1EYNvXlpUWxWPXOuDWbjv=bjY=YuDW0N1JxFxEbMe=YuQWSG0XSEU=Oj1WtuxJSsQXORDEYMxEYu/Jx=UJbMPWxMx=OWDJYJ/Jl=v=S=1W0ivWS1AWximJ0RDEYi1JbFD=OJ0EOimXSGeWbi1JSN1ExJxJSim=S1PJSUbEONvEtp1XtMDJxwxWb=m=YpU=OwxEbRPJYM6=tRDXO1q=SNvJx5UJbRAWtJeESGDExM0=SRQWb1xEtibEbjmExJ/WOpUEYNvJbHvJSu/ExGQWxJQEYJeESw/WOEbW0J6ExFxJSsA=bWQXlpmJ0EvXSUUElpYW0RqWOpmWSWxXSJ0=tJA=b1QXS1QEts/XtibJlpmWSuqXOwQEb51Ex=bJlNmWSueWlRq=lJxWxNY=bp1WOWAEY=bWOEbJljbJxW6WOsQXlRDExR/WxReJbWAJSJ0JlReJbMeW0jYWlsDExMxEYMPExWQXlJDEtW/EOjvXlRDExRP=YJ/=YEmWlM6WSWQWxpvES=bWSwQW0pmWYsA=tJe=S=b=YjvE0iUXlsPWSRQWlR0=tux=Y=vJlJeJbJxXOMDWxR/Wt=vWtsQEYMDXOsDE0jUWOj1=YEmESUvExGeJxFAJbF6XOMD=tse=SNYEOEUEbuP=SwAESuAXlWx=lJeWbEUXSuPEOUbJb5vXlpvWtuDJbs/EtuxJS1qWOGeXl=YWtRPJY=1JxJ/ESwQXSUY=OEUJSHYESFxWO1DJYRqJbHmJYMQWS1A=Yu6EtEvXSibExpm=SUYXSjm=YJPWOJqWxW0Wbp1Ebiv=SFqEl=YJlEYEYibESvmXOJD=OJqJSsPWbWqWOG6W0jmWSJ/ESJD=tM/JlRAExMeEtW6Etj1=bR6EOJDE0RAJbGeESEYExHb=ljYWtjmWYi1XOW/ESHb=bWe=tuDWO5m=ONvXOJ/EON1ExsQWxu/Wx=1WOEvESWPEOM0=bHbEOw/E0sqEbUYJSvb=SwAJxRqWO5bJSRAE0WxWxR0Wl=YWxU1JlR0=bWQ=bHYESJ/Elsq=bpUWluP=YNYE0R0JYiUEtNYXOuAEtEUWOwxWYuqW0MqExMxJbwx=SJPWtJAJbM/JljUWtjmWlNmJS=m=lWAWlRqEbM6Wb10WxE1XSjvJxJPESE1EtuxJSUmJb51XlsxXOjmJSM6EbFqEbM6XSvYJlW6JlibXSHYExHbWOG/JbM6Et=mJSHYEOi1ESFQWSW0=YseEtEvWSMq=O51EOJeWxJ0=SJ6=SWAWxJ0WSUUElWxWlRqE0u0=YJQXtWQ=tRAE0NbJ0W/WO1eJx16JxM6XtuDW0uAES1AXSMP=SE1J0WAE0uQ=bWAXti1EbG/JSNv=bM0WtEv=tR0XOHYWtsDEOHbJYjbWS10=SMxEO5YJSsDWx5UWYpUXONvJYEm=YJ6WYj1JbRQE0M0XtW0XS10XSuD=bUb=bJ/=bJ6=bNYJb1PWtuxJbFDWx=b=SGxJlpYJSuqJbM6WOjUWbR/XOu/JSHUEYseWORP=lWQEOjvWYMqXSp1WYW0EbjvJSwAEOjY=Yj1ES=bW0=vEYR0JYpbXtW/XOsA=O5mXSuPWxFe=bsDJ0EbExueJbEUWSRPJbsxJlMAJSGq=OJPESvYJxue=tWDESJeJbHbWtJ0XSwPWbuDEO5vEYjUWbHvJS1Q=bwxWbEUXtRAEYJQJbu6XSWQXlEm=tsQ=OHUEtEbExvU=YEmWxMPWxUv=OivWxFQXOwDEb=vXtJDJ0i1WxW6W0E1WljU=tRxJxv1EYuxJxFDW0s/WbR/WS1AJb1A=SJQJbUvExu/WOiUWb=bJlpU=YW/WYJ0ElsQEbR0WSjU=SE1JbFDWb=YJl=1WSR0J0seEYpYJb5UXSW0J0jmJ0J/=OG0EliYW0NYJ0uxWlMxXOvYJYNYEls/XOvbWO1e=lp1J0J/WSRQ=ljvWxw0=bNbJlRDJxNb=S1eWlJxWOw/Xlu6EOHUWS1/WS5YESGDXtWeWOseEbReWS1/XtibWtNmW0iU=b=UWSGAWONUXli1W0ibJSvbESGQ=S5b=Ys6WtuQJ0JAESM0Jl=YEbWQJbRDXtsq=YibWSGA=tR/WSw6=bM6EbMxExjY=lpUWtNmXSGQWSGPJS5vJxj1ExsAJYRQJSWe=OJDJSHY=Sw/=lR0E0NvWbW6WSs/Wx1QWbMqJ0MqXOGPXlpb=YimWlEbXlW0=tj1WtRqWSRAJ0RPW0RxEt=bWONbJxpYESMeJlEU=SvmEb1QEx51WSuqJYJxEb5bJ0EmExFAJx1Q=tEmWb5UESwAW0uPWbM6EY=1=SFAESuqJx=bXljvXO=mJ0MeEbjbWxUbXOwAExUYJxM/=SF/JSWqWtsQExF0JbjmJSGQ=O10XS1AWbs6WbiUEbRxJ0sqJSJ0WxGQWxvUJxjbJb1AXOs6EbF6W0pb=YEYEbvYEY=mW0JQ=lEbJ0uAXOFqE0ibXS1xEOR/WYjY=bJ6W0Mx=OJ/E0W6=tsqEbJqESuqEbsqEtMxWxWqElsxWYJqWxuAXSUYWxU1ExsA=OuDEximEO=1ExHbExUUJSvUW0MqEx1QESsAESGPXOH1JxR0WlMqJSw/ExJq=OGqWxsDXOuxXSNYEYpYJbs/ESEb=lRA=SE1=SNbJSRxExGxWxwP=SNbWtWxWbWQEYRP=tsPXlj1WSs/=Yp1=YJ6JYimESjv=YJQExsxW0pUEY=vWYEvEOWPEbFqXSJ6JxvmXlM0XOuxElJ/JSM6W0iUExG0Wts6EOMqXO1eEbEUWYEvJxJqEO5UWYs0Ex=Y=lsDXtM0J0JQJbFQWlJDW0p1JxM0Jbj1EOuqEOEYExFxWxJAWOUm=SsqJxuqJYJQJxGeXSJ/JS1PJxv1XljYWxRPWlNU=S5vEOs6JbpmW0sD=SHYWSE1EY=Y=SH1ExNU=OsxWxseExF/WlNmJljbWOU1WbuQExRDExwx=bN1EOvvEOGDEbM/EYp1=Y=YJxjUWxu0EYJq=OMqXluAJYpb=SRQWtMDWS5Y=SivExs0WbJeEbs6WxGeWSimXOF0JYR6JbFDWOpmXtEvWbjvElWAEYJPEOvbJxw/=tWDJ0pmESvYXS=UXSJ/=lpvEOwQEtJPEbUYJYEvXtJPXOivWbG/WO16=bR/XluDESM0JYs6=b5vWbJDEtpUXORxJxs0=YNvJlJA=bN1ExG/=SJ/=bp1Els0XlM0EYJDJxNvEYsx=Sp1Wxu0WlE1ExMxEtWeXSUUJb5UJYsDEtiYElEvJbsPJxwQEONY=luAWxuQJb5YWSj1WYuqWximJb1PWbGDEbN1=tNYW0R0WljvExMPEYs0=OFDWls0XOGqXlux=l=1JSUYXOwAXlMe=bsPJlpY=lM/JYjvEYs6WxGPJbGxExRe=b=1EYp1ElE1JxFe=SGDJb1Q=S5Y=Sjv=OjmWYReJbFQ=ls0XtRxJxFeJbu/XOjmElNvJbW/W0iUWxM/=tM/=b5bEOR/=OpbJbFPJls6XSweESpvWbHv=buD=tJ6JxiUJYRqWOuQ=SFqESG/WSFAESpUWbNYWxs0=OuAWbHU=ts6EYpYXtJ/=bJ0=OiYWbF0Ex=YEOJeXlEb=Ow6EOimWxpvXOHYWtWAWtJ/=lJAJSWAWlimEbjY=tWAExEmWSs6JxEbElWqWbvmXOsPEtEbJb10ElR/XO5UWlJqEb1AJxH1WOsPXOjvWSJqWOM6JbimEbHUW0jbXSw0Wxsx=YRP=Y=UWxRq=lJQ=OUbWYsPExwDEOE1JYEvESu/JbsDJ0W0WSF/XOWAXOv1WljYW0RxWSuP=SHmXORPWSRxJb1xWxUUExM6Wx1/EYM/ESGxE0i1J0JqJ0W0ESG0El=m=S5bJb=bWYibW0ReEbvbW0uPJbGQWSWPWlWqJbMQWxMPJxvYWS=mWSMqES1qWYJAWlRqWOF6WOWPEtpv=bRP=OJ6ESUbEYEUEtEmXS1Q=YMxWxFxWSpmE0=bW0Rx=tp1JlR6Et=vWlWAXtivJxu0XtjYXOsQWSRAWSNmWbM/=O1e=timESsqWYs6WSim=OsqWxiUEbwAXOw/ElueEtJ6JS1PJ0p1EOjYWx1eEOFPJb=vJbJxJSu0EYjvJxw0Ex1eEYMeElsxEb51EbGxXO1A=tpvWtsPEYNvEbw/WxivWbse=tW6WOiv=O1xESUbJ0sqXtNUWx5mWSvmJbHmXtEUJxw0XtJA=lJAExEUW0RD=SJ6JSHbEbNmJxjbWbweJ0J6=SjUJSsP=SimWluQWb1D=YRqES=YWYiv=bFQWtReWxweExwAWxibWSHmJbiYWYE1ElpbJbweESuqXO1/=OWxJ0uAEORDE0s6EYjbExw0EbweWYuQEt=Y=SFPJbwDXtNUWlsAE0JPJSHYWbG/ElMPWONUESMD=OJeEbN1WOFAXSpvJSNbExHmJxvU=SR6WOvvJSHbJYMPJbJD=tJ0EbHY=YJ0=OuAEOivJlJQ=t=1XtRDEYNvWxMA=tRP=lJe=lWDXSwqEl=U=tE1=SNbJbHYEx1DWlRAEOR/ExHUEOMD=bjmWbFQE0uxESjmElWDWOvUXlu0Wx1qWlW0=OFxJxw/EOvv=li1XSG6EOs0ExHmWxsxWxEvXOvv=OGPWYMqXOR6WtsQEbG6ExweJ0WAEOUvEtM/JYi1EOHm=lWPExR/Jb5mESF/WxF/WSFDESpbJ0JD=bMeWtMeWbs0XlReXOEU=Ss0ES5YEx5m=tue=YE1WxvY=SU1WOp1=bMq=OMD=OHY=tE1WSuDE0NmJSjbESsPXtpbJbHvXlN1XOvbE0sQ=OM0Jbp1WxsQWbuAJSM0WxW6=OvvW0NYESs6XlRDWO5UJb=mXtJQ=Ou6ESG0JSJ6Xt=YJl=m=SW6=SueWYR0XOi1WYW/Jb1A=Ow/=b1qXSwPJlsq=Ou6XS1QXSv1W0sDWls0WYjbJ0EYEtMPJljvXSFQWOU1WOwDExJAW0JxXSUv=tuPXt=vESRDJbvvWtReXlEYJxuxWxRQJl=mElJqWY=1WONYJb1qJYivJSGeWYRQJbw6XtWxXO=1Jl=1El=vWSwQJ0i1Ex5Y=lMe=bu6ESueXO=YJx5UWxvU=lMDEbW0EtjvXlu6EtJxJxw6=SsAXSpmJSjbJlEYJbv1ExNYWSMQEbM/ESFe=OuDWt=Y=YJPEOj1=tJ6XlW/EtR/ESJqExsPWxwDWbG/JS51Ex=YJxW/JxHbJ0J6J0EvW0WPWOJeWbNvEYib=OM6=bjYJ0=YWbRDJlRPXOw0EtimEOvUWbM6WxWPXOWP=bwPWxiYXtjUWYiU=luAJ0imEOuQWx5bEx=vWxFAWxMPWlMAEYEmEtJQJbG0Exw6=YjYWti1=SweWbMQJYEmW0pYXtR6XSv1EtM6=bGAWOW/ESF/Xt=vEO=m=SwqJSH1=Yjm=b=b=S=vJbGxExRQ=YM6ExRe=bsA=ls/E0s6EYReJbwq=SF/=SW0Ebv1=bjUES5bXOvY=SsAExW/=bjY=b=UXSRx=SMAWSG/=bWxEOJq=bWAEtseWOwqWxWAXSi1WOj1=YsxWx1DWxvUWximESsxExEmW0R0=S1AEOJ0EO5bJbE1EYi1EbpUJbjvXOMeWxGDESHmE0imXOs/E0j1WOW6WYM0JS16XOMPJ0iY=bF/XSWeWS5UEx1e=tWQWSNvEOUvWOHmW0sQJxGPWOM0W0uAXOM6ExFxWOwPXONmES=U=t=UJSJQJbJQ=SH1Jl=1=bRqJbsD=livJb1AJYW/Elu0WSW0Jxv1EYpYElM/ElEbWx1QWOGDXlMDXS5bEOjYEYsAEOJ/ElJQWOHYJSG0JSMeWbEvJSNbJlib=YWeEOUm=SFAXlRAJSibXSG/WOJ6JYJA=OwAE0EmXlivWtjbEYNYJSW/=Oj1ExRAEOJeWluQ=OFeWxFDJ0MqJ0We=libEtRqESWAJxW6Elu6=tJAXSReJSMqWORxXtjU=lJAJbw/WSW0JxGDWYs0XSFPJb1qEYR0=SimESvmElJP=l=1W0Ev=bUbWx10XtjYE0JPWtueJxueEOGQ=S1eE0J0Exj1ExwPE0s/=bsAESNmJxMDWtMqExNYW0Nm=tjm=Yj1=t=mES1xJ0RqWOMP=bUmEYM0JYsqJlJQ=luAEYRqEOM6ESMQE0i1WSMxEOM0ESWQ=OWqWYMPXSUb=OuxJY=bXOp1E0MQWbRQXts6WluA=YJQXluqW0ueEbJ6Jb1/Eb=1JxEmWxwqJYuAWSWxEtRqJxR0WSsxXlNvEYuxEtsqXS5vWx1QE0u/JbjYElMeJlJ0EOReEOu0WliUWxpmEb5UWtRxESimEts6ExG6Jls6=lJ/ElWAEbueWbGqWOFqWYu0XtW0XOsxWY=m=bw6=bweJx5YXSuxES5mWYimE0JDWYu0JYuPJS=bXORxWOGAESJ/XOMPW0RPJbHv=bu6EOwDXtW6WY=v=OpvEOwDWYs0ES5U=OJ0=OFA=livWSM/JxN1=lJ6Jbux=OEYEx5b=OUvXOJAElRAEOvYWxEYJxiUWSR6WOR6=Sjb=ORPWtj1WxFQE0N1ElMqWOi1WSpbJ0Mq=YRD=lsPXlpYWlpmW0uA=bRqWxM0W0NmJS5mXSJqE0jvEbGeEtWAE0EvExMeXSWxWOR/WtMxExGeW0sP=bEmWYs0=bFqJxGq=Oj1=tsP=OuqWYimWx1/ExR6ESUmExvvWSuAJYuPWx5YEl=b=SGPEl=UXl=UWOJ0ExwA=OG0XSi1WbJx=buQEljbE0uA=SEUXO1xJ0jUJSJ6JxR/WSG/W0MA=SJeJS1eXt=vEbpbWSUbXlJxJSsD=SWqWljU=bRPWbNvEOG0WSs6=Yu6WYWD=tsA=lM/JbFP=tWPXS1AJxjmEOvYWls6JSWAXSv1WtWDJlJx=b=UXSi1JlE1=Y=vJSU1EOJeXSE1W0EUJbsDWS1P=Y=1JxG0=tWP=S5mXSE1EbjbE0ibXOWqWbpmW0uQWtJ6Wx=1JxMq=Yu/ES5UWxM6ExuDElEvWSR0EOR6EOFqJ0MeWSw6WbNUESNv=S5vWOpY=YsqEbi1Wb1PWYimWxH1XOH1ExFPExRQJSwDEbM6WSwAEO1qEtEU=OJDWOv1EtMQ=bGDEtp1XOM/=bJQExuDWbF/W0WD=YMxJ0s6=bFx=OsAWtW6EtJxWb5Y=b5mEbw/EOEYEYjbExWDJY=Y=lW0=ljmJ0E1=tReXljmJSH1=YM/EtJQJxHmWlJDEOMQ=YJq=bRPJbMDEtWP=YWPJxw/J0EmW0W/Wbim=bMeWOUUWOF0JlimXOWA=OG/Etj1=tMqXOWeXOpYJSEv=bGQJ0RxWSJxWb=mW0JDWbiYExjbWxEUJSwPESFxEb=UXSE1=S1A=S16WbpmXSGxJYibWSW6WxJQXSHYWSu6E0pU=buPWbvY=O1/EYJq=tJ6=SMx=SiYElMqJxRD=SiYXOW0WOpYWSN1XS1xWlivJ0MeXS1AE0=m=O1PXSMqESjmXOiYJxW6E0jvXtEUWOpUWtW6WYMDJ0sPE0ux=lNmJbG0XOR/=bsqWSRPXOHYJYpbWxvYESJQWYMx=bNv=SWAWtpvWxF/=t=mEtJeEOGPWS1DXSJAWYuAJxUv=YJQWSR0XtsxJS51=bwx=lu/JbW/XSs0JlWQWOG/XSsQJYRA=S=YJxEbJlMqXSHbJlMD=bEbXluqXtu6XOFxExvUEtR0ElW0W0s/Wbvm=lWx=tJ0JxGqJb1AExNU=SvbWx1QWtsQWxFAXSWQJx5YWx51=YuxXOEbElsDJbN1J0=Y=ti1=bMQEtpm=SJqESJ6WSu/XO=YEO1PJS51J0uPEbuPWbRxXlWqES5vXOW/JSsD=bG0XOwAEx5vJlE1XOF6EYRAJxvvEOw6JbJ6=ONv=lJ6WbG0=SwDElW6EOFDEYseXSM0J0EUWx1e=lpmJYuqWSGQXtRQElNY=bueJbM0JxFq=OF0XtMeWljYWSFAWbw/WlJ0XSM/Jx5m=YMqESW/WljmExvvEbHY=lRQWxFeEtj1JlRAXOF6JxFAJSsqWYsAXSWQWtsPJSEbESNUJlNUWOsx=tNYWSEYEOjYEbFeE0R0WbsxJlsPWbRPEbMAWtM0XtMQEbN1JljYJSNYWx1q=l=YXOG/WOu6XSw0ExG0Xls0JlWqESM6=OuQ=lR/El=v=liYElReWS1qE0J6XtMxWOWxXOjUW0WAJYM/EbJe=Ys0WS51WbWQExjbJYJqEtjmEx=vWO1/XOGxWYibJbuPElMeJYW6JSG/Wl=UEbFqEYjbElu6ExWe=bRAJbwQWxMxElj1JlR6=YRxEtJAXli1=YpUEb=YJ0RqXls0=SFxJSi1XSuAJYueElsxXSsDWxGDXlRxWluqWYNm=SW6=bsxWxG/=SReWS5mWSRDXtuPElWQJYp1=tJAEtEYExwQ=b5b=YpvEONU=luxEYsQEOWeWSH1XluAXlNbJbWqExv1EOEm=tWDXts/Jb=1=YE1WbGqE0=UEOs6WSGqJbMP=tNmJl=vEtu6WYRP=bMxE0pvJbpUWYu0EY=Y=tWeWOJQJYu/XOMA=YRDEtMP=ts/=S5Y=tjv=YuD=SHbXlReE0W0=bNmWOwDWb10XOEvJbFQJYuQ=SweESGeWS1PJYMAWYR0JxG/ExwqJYEYESMD=bwAEYpYJSjUJxuQJlMqJlu0=OuPJYJQJxJxEO5b=lNb=SGDXlEYEONYElu/WOGqWtsqWYuPWxWDJlsDES1QESseJbJe=lsAWbwPEYsQ=SuxExR/JSM/=tWe=OjUExReESw/=b1eXSGDXS5vWbsxWSjvXOGe=YNYJbGq=bRQJbu0WYNUXlW0=YMxEtsDWOuxEY=mEOHYJYjmWYJQXOW6WS5YW0iYWYi1WtEm=bUvWxvYE0pUEO1/XORe=OEUWtR0EYWeJxUmJYp1EYJ/=S5vEOGPJYsD=t=vExMeJlJ/=Y=mXSJqJYs0JlJPJlMPJbMAWlMQJYWDESM6EOF0XON1=SsQJS51J0JqExFeExGqJSF6WONUW0uDEOjvWSj1=bueExF0=Op1JxjbWlRPWSG0WOweEx=vXlWQJlp1Wbsq=YuxWb1PWxRQJbiUWONUEls0ESWP=YR/Wt=YEOuP=bWxWlEYWxM/ESJeEx5YWSF/EtN1=l=YXSGAJxF0JxjmElMqWtMxEbpvJlJ/=biU=tWxXOp1E0iUJxMPJxW/EOvvWSsq=OJeWOJeWb=1JYWDXlR6ExHUJSReWS1DXlRe=tuqE0EvWSH1WOJDWlM6EOpvWSRAJbpmWOUb=S5mEtJqExJqJ0ivXOJ6WYueWS=bEYRA=OEUJSsA=O1P=tiYW0uxEtseXSF0=YNbXSGeJbHUJxw0WS=mJY=vEbuq=SM/WS5U=SF6ExJeJb=1WlWqEYJ/XlpbWSjU=SWxWxGQEbG/=YRqESE1JlEYJS51=bUU=SMAJSJeJ0WPEORQWOs6=bJ/WbNYEbEUXS1DXtuxESv1=lJAXtRA=O5UXOJxEOJPWSvUESu6WlMxJYNvWOj1JbWqEx5Y=tRPXtWeW0i1JxFDEYMxWYMq=SGAEO=UJSwD=SiUWlpUElMeWYuDWO1eJbseJbw0WSF6JYJQESiUJxux=lMQWYWxJYR6=tJDEO1qWtJQExWqWSuQ=OuPWx=UJxNYWlJQWxiY=bMqXlj1ESuQWS5mExRPESJxWO=UWOuD=SuqWbEYEliU=S5vXS=1=bJAWl=mXOwAWlMAE0NYJbEUJ0MqJSUbXSiUJxFe=OUvJxF6WxG6E0j1Wb51Xlim=tR0XO10XOw6EOF6JxR/WOs/=SpYWO1/E0JeJx1DWtRPXOGeWxHvEY=1WYEvXljvEYuxEYJqJlW/Xtj1J0NbXSvY=S1PJbNbWYRDWOGDEbpUEOUm=t=b=O1DJS1PJS1Q=OuAWbw6=S1/XSs6=lJ/Jbu/WljY=lEUESG0WSwe=SWeJYu6JxuPXOGA=bw/W0s6WOJQ=tjUWS5m=lu6=S51=tEUWbMqElR0EbWeEYivWxF0JxNYE0=1WbFP=ljmWliYEYMq=lMQJxHmWYNvJYJqXO5YW0j1XtRP=OJqWtsqXl=1Etu6WxJDElR/JYM0Eb16ESG/XtMAXOJQXS1DXSGDEtsqXSsQJSWqJ0J0E0pvEbWPJYJPWbjUEtJqXtN1EYp1XOHbElJAJ0M6=SsDJSweEYiY=OW6XOR6ESuAJxRx=b16XOUvEOJe=bRe=OsDWOi1EYReXSw6WSWDElNb=bpvXtJ/EbsQWOuP=bFeJxjU=S1D=YMAXO5bE0J/JxpvW0WQXl=YJxs0EOvvJxJ/WbwPXls0XOF6EtWqJxNmEb1x=OH1=Sw/WOwAWOG0EOFxXOFqWbHYEbFxEOGqWtuPXOHU=b5YEtuDElu6WSW0W0=UWOJ/JxjUEtMeEbJ6EOGxWYW/ExWxEli1EY=Y=YR6WSpb=bwD=OwAEbWeJlE1=tMPEljmXS=mJ0pvXSNYXOJx=b5UWYMq=tJx=OuxWx16WYWxEbRQWxpvWYjbWbMQXOivExJqWlu6ESwPJYi1J0WxEYEU=SEbJSR0E0Mq=OMqEbRP=YuxJSW6Jlue=YNbJbjbE0JQEOvbJSu/=bpm=Ou0WOEvXli1=YWPWSw0=bseWxwPJxG6=Yj1=bFeWbG0W0RPWbWDJ0Wx=SUmXSpmJSiU=SNbJ0ivJYMx=tN1WOHbWli1XSR0ExEUWO1AJ0=bJSJQW0M/WbR0JbRPEb=1JYJq=bUYESHvWx1QEbuAWYW/JxRQWOwe=lpvEO=vJ0j1=YMq=bJeJ0iYJYM6WOwqXtiYWtJ6JxuP=tMDJ0R/=SMP=O1PXSF6W0pm=OpvE0pbJSJqExseXO1qEbF0WbRPEOjUWts/ExvbJSsDJxsq=tMQ=ljUXlWPWlMAJxNbXSRPW0=Y=YJPE0imXOHUJbRxJ0sqExuAWxpv=OFQWbsxEbUUJYi1=S=1EtRDEb10EljUEximWSNYExwQEtJeJS1/ESu0WY=1WtM/WxseXl=vJbp1Xlsx=lJDXOpvXOwQWlsAEximWYWP=lM/JbW/=SJPEYuP=OwqWb5vEb1DXSJ6WbUUWlRDE0WxXSvbEYivJb=1=OuqXtEYEtJeWxs/Eb=1JbvvElRQJSi1E0RxEOEv=tRPW0=YWbs/WtE1=YEY=lpUWljbXt=vXtNvXO16EYsqEYpvWO=mEO5mJSMqJlp1Exi1=SuDWx1/=tR/JlibWxWPXSpYXSNUESWDJSEmEb5mJbwqXSwqWSjbXSJ/EOu0JlsPWxGe=SGDJSGxEbR6XlMDWYJ6XlW/EYNU=tM0Wb1eWbv1JbGqE0uq=limEOsPJSw0=S5bWYsqJSMAWtu0Jxvm=O=1EYEUWtEbJxim=O10JxNU=OimWbuQ=bpUJb5mEO1DWbjYJxvvEb1PJ0jbW0sPXlNv=luxWbjv=buDXlMP=Y=UWls/WxEYWl=YXOE1EtM/E0MPJls0=SvvWOsxJS5UWSW6=SuxE0EYE0WPExsD=bJQXSEmWbE1Jlu6EbWPEbvYJYJ0WxJ0JSueWO1eW0JDWxu0WOEUExEU=bibJb5m=bM0=tWPExNb=lpUW0WeJ0uAEOUUXOJ/JxReWYpmXtJ0EOuxWlWQWONbJbw/Ebp1XSwAWSwAEbwPWYW/WOs6J0MAJlp1=lu0XlimESG6=bpvJlsA=Ys6=bEvJ0sD=SsQWbjbXSwDWO=vElpYJxJA=SpYE0ib=SwqJlimEbR/WbJqWbU1Wbw0JYMDJSUmWO5mExs6JxWxWS16XSW0EOvUExsPJbRPWxWqJ0R6ElEb=tJ0Jlu6WSJDJlNUEOM0XSE1EtW/XlWP=bMxEOi1JSG0WbvYXONvESvUXSFPEOJ6=YRqJSs0WbjmWb5Y=lRxJl=vEOUYExwAEbw6JbjUWxUmXtJ0WORPE0RQWxFAWbGDEtpYEOi1=luQ=Sp1EtW0=OivEOHvESuDEbRPWtR0W0W/JxF6WlJxWOUYJSHmXSs0WOFDXl=UEYjUEbivJx16EOFQEYR0Wt=1Wx=v=SHUJYWPJSjU=tMP=b=vWxuDWS=UEbEU=bUvJbFQJb=bEOuAEtpvXlWqEOWqJliYWSG0=lM0XSEbWOFPWS5UEbiYExueWtRAJYWeWlM0=bJQJ0E1WY=b=buA=SJ6Wx1xEYW0Wbsx=tsA=biYJbpY=OUmJx=UJ0N1XSUUJbJ6WOJQXlMPJS1AWb10ESW/Xtu/ESW0Xl=bW0jv=lW/=SGP=tJAJ0pmElJeWOjb=bj1XSWqESMeJSFDJbMqJlNmXOWQWxU1EbsxESpUJlMA=tJDWtEbJSE1Exw/XSMQEOsQE0ReWSRAEYM6Wxp1=limWx1A=b1/=l=vESuq=SwqWSHmJ0jmJlWPXSRDXOiv=Ow0Eti1ESJ6EtW6Wx5U=lE1=tpvWtpb=YMDXlWqJbHU=bFPElpYWxu/EbJDXORqXSueWORPJYW0WxFD=SWD=lsQEYsD=b=mEbNUEbu/XlNvJbWeWSUvJb1QWlNvXlWP=S5bEtEUXOJQElW6EbMeXOE1=YWP=tNYJb10Jls0EbwDWx=UXlE1=OjUWtjUXSUvESu0JbuqWxsxE0W6XOuxEbiUEbJPWxNb=OUmJ0JeXOWxXSU1=SueWOJPWYMAWYRqJxJxWYimXluxEO=b=OsQJbsqESpbWxWA=bivJbF6ESvvXOW6WlueWOuqESuQJSFA=SWe=ORxJYRxESwqEtNYJSGqEb1DES=UE0jv=SWPWxp1=lRQJ0EUW0u/JxN1WbHUXOUmWYJPEORAXlsPXtRxWxUYEbFqXljYEbMA=SvbWlR6=SjmJYReWbiUWbsQXtWqE0sDWSGeWO10JlW6E0RQEOJ0W0E1=ts/WbweXlJPWYjvJx1xJ0uA=SGxExu6J0sP=bE1=YsxXSEmWbvmElRqJxjYEYpUWbNUJSF6EORxWxJ0XO5bExiUJS1QWbuq=tRxEOuAEbu/WlJ0ESNYW0jbJxuQ=bHYWOs6XtMDJSEmXtsQXS1q=YsDXSRqJxGxXtNbXlpvESWQE0MAXlj1XluqEx51WOG0JlM0XOGe=Sw0=bJeW0RDXS=b=bjY=Y=1=Ow6=tpv=S1DExvYESE1XSJeXlMx=Ysx=SRxJbW/XtWxExpbWlJDWSwxWYNYWtjbEbWAWOGDWlRDEOMe=bWDXOFAWSJqXlNUWS1xJxU1ESiUJSG0ESWeWSueEl=mJbWDEO1eEtNUES=mXOEUXljUWlJ/WxW/EOR0WtsQWtEvEOsQExUbXtNYJbFPWYueWS16=bNmE0i1JYs/WOG/=tWAExjvXOJqJSWeESJ/WlW0EtJQESsPWtWA=b=Y=SsPElimExRQ=Sp1XtW0WS=mEOsP=YpYWxRQJlNbJYJ/J0RQJSjmExvUEYjmWSWDESsDWxpv=bFQESGQXSWDWlsqEOJPXtRP=OvvElWQWbvm=bEUExFxW0ReJ0sP=OGD=lpbEbRxJ0RqWSWQJxseJbMAEOEmEOuAWxJxWxGDEtEUWSFP=OMqWtN1El=v=b10E0pY=luxJbuqJSvv=b=1JYNbWxG0=YJ/JYWqEtEUJl=mJYjvEtRPXO=UEbs0=tjb=lseJSpbEOweJYEY=ORPExG6=YE1JxwQWb10ElW/Xt=mEbjUXONmEb5bXtWqJ0p1E0WPXlJQWtpm=bUmWbG/=OJPExHvJb1AWYivWONvW0sD=Su/E0pbElE1=b1DJYJQESw6=YuQJlibJlRDWxjU=buQ=bpUEO5U=lJPEOu6=OGDWSR6XSwqEtRqWlEUWx=vJ0WqWl=bWx1Q=Yp1WbM6E0J/JbEYWxF0WlEm=S5vWb5mJlWxWxHvJxwP=YWq=bsQEbRAElMAWOJxEx=1ExR/EbWq=bvmEbJA=YWP=tEYExE1W0JAXt=bXlu/=OsP=b5mESMqJlMPExJ/ESiYESE1WtMPEx1AESFe=lpb=YivEOF0=OpmWbWDESjvElW0=lWPESF0WOM6WYRQJYWAJxuPWxsPWOM6W0ReEbHbElu/=S5bWbu0=liUWOF/WlM0=YJAExHY=bweWxM6XSM6=SG/W0jUEbW6Eb1xEbGx=tjUWlEYWYW/WOEU=bimXlWeE0JqWOFeEl=1WYuQ=tM0WxJeJS1xWtN1JSuQEbUbWb1PJ0s6=O=vJ0uxWlpmEbM0XOJA=Y=bJSu6=O5vJxvbJ0uxJYuPExRAJb1QJ0R6Jxj1WbGQ=YjbWxGP=bGPJbu6XOF6WOJqEbR/XSuqJbRQXSW6XlEYExEbWYM6WO=1EbimXONmElsqXSM/XtuAJluDExj1JYux=Ys6EOF0JxWe=bHYXtuqXOJP=bsA=SsPE0W/=OwxJYim=SF0XO=U=OFQWbu0=SwPXSF/=buxW0M6EOWxEtiUWYJ0WYJx=S1P=tW/Jb=vJl=bWtuPWbG/Jx1eXOpb=bivEbsq=bRxElpmWSjU=tux=OMe=b=YExvvWxu/=tuPEOMDJxi1ElR/WxJ/=SwDWYMPEbF0WSs0XSEb=OJPW0MPXSF6=SJ0XlWQXSuAW0s0ESJAJSimXlsQESwQXSGxJYWeXSuQE0uxW0=Y=bJqEO1/JYWeWxuQEOjYWxHvXSuqWSwA=tNvJbuxWYRDXOM6XSwDEOpvW0M0J0M/Wt=bWSRPWlpm=OEbXOWeJS1xW0NUJSs6WxFe=bi1JSMAWxw0JSi1=Ys6Jx1q=tMqWYuDJxEm=OuqJxsAEbUmXOwqESR6JYs/Xtpb=tj1JSHUJSE1WxwAElsqJYsxJbv1Ex5UJbvb=OHmXO1DWS5mJ0RQJ0ux=lRq=OUbWSwQJ0ibWtJPW0uDE0=1XtW6Ex=bEORPWSGAWxU1EbG0JxUU=buPXOs0JS5UXSRQ=lpv=OW6=SNYJxJ0JxF0Wt=vESwDEx=vJY=UWOGP=OR0ExG/=bM0XlR0WSseE0u0XlEmEOR/JSFD=SjvWx=UEb=mEb5YXlW/WxHvXSHvJxwQWtu0ExJAESvvWxGqEtpm=OHm=bUvWYjYJlu/WOW6XSMQWb1QXS5bEbuD=YWqExUm=O=1=OuAWbseEbJPW0uPWbNYE0RqXtpmJSJxWbwxWtMqJbjvElEbXOpbWOuPXO1qEbvUJYJxWl=vWlsPJ0RDJSGqJxFPWSweEYEY=YEU=lWQJYsDWYMPJYWQXOWeWO16=l=1W0u0Jb10=ls0WSW/=Si1W0iY=Su0Ebu0WY=UXSFxESuA=SvYJbHvES5YEO1PE0W/=OvUWYsqJx1PWOWQEYRQEON1EbUv=bpYXOvUJlJPWSu0ElJQWxHUE0uQWbs6=YuxJlR0WxwPWbF0=OWAESUYJYWq=OJxXlpUEbE1Etu6Wts6Jxs6JxMxWxEY=OvYWYsqW0Nm=YMP=OseWxNmXOMeWSF/XSW0WliUJbuPExEbElMqXSUb=SReWtsqJ0WxExReXljvJYJQEtNmXOJxE0sPXtsQE0JPJxJQ=OWQ=SRqWO51=YuAE0=bXtR0JxMqEt=1EY=1XlRDJ0J/=SUbJx1A=bHvEORDXSUYWYJxJbFDJxMPE0=UJYWPESw0Wx5mWtu/ExJqJxseWSUv=YMDJlEvWxivEOGxEbR/XtNYWxp1=tjm=SN1=Svv=bwQWOUUEOF0EOMxJx5mXS=1XlsqJbvbXtJA=OW/EYRqESGeExG0WO5vElWqEtpUE0ivXSUU=timJ0Nb=lp1Jb1PWOWeWtW6JYNv=YsqWbM0ExMPEbuAEORQXlJAEOimWxNYXSpbJSj1=YibWb=mJY=v=tjUW0p1EYibXSwqE0uP=bHv=YRxWb1DWlW0Wliv=bUYJx5bWlsx=SsxJxEUWOG6JSv1ExRqWlJ6JbW6W0jUW0MeJxUb=OGeWtjYJlsDWlReJYJ0JxuPExvYJ0pbJbs0Wl=v=bj1XOHb=bs6=OG/Wx5bW0sxESwDW0jbJljUXSJPWYMDE0W/WS51=OWPJbU1XOW6=OW0EtEbE0Jq=OF6=tN1E0NU=YJDXO1QXSWAWtNvExjmJSwqEb=bWxvbEx=m=t=1ExMAESEYExFDJluqXSiUWSuDWYNvJ0u6WSWAEximEt=vEOMPJ0J6JxwxEOsxWtp1=lW6Eb5YWSs6WtuPEbw/WSJ6EbjY=YMDXlMPW0Wx=bimJYu6=bimXSFAXSRD=S5YEYsAExs/EYM/JSFAJSuQWb5UWb5YESW0ElsAJYM/WONmWbvmExM/JSR0=OFQ=bHmEYuxJbNmJlWeWO5Y=OM/JSw0=bs0=SpmJbvbWtRPWbRD=tJQJxGxW0N1ESG/=lN1WYRPWxHmExH1=S5bExRqEtM/WYNU=tMD=tJD=SwDJxpvJS1xES1xXOHvJY=b=OJ0EOG/Jbi1Xts0EOuQ=Ow/ElRPExJAEls/WbF/WbM0Jx5mEYReJYivJl=bXOwxEbuqEYEYXOimWbNmEtEbWx10E0W6WOiYEbEvE0p1ElJxXSN1ExwqE0=YXtpvWSHmWxReElW6WS1QEb16WlJ6WONYWxM0=buqXlRQESJPESRPEbE1Jx51EbFq=lWeWOiU=lpYJ0E1Wb1QEbGeXO1x=YWeJxvvEbweESHYEb1eJSs6E0N1JxvUWOM6JxF6ExRQ=OHYJSGq=OiU=OFAW0uqJYu/ElJ/JxWQ=tiv=tNbEbNYE0s6=OwAW0WQEYs6Jb1qES=UEYMQWl=m=Y=UEOs/Wxu0Xl=m=tRDElJxXOFPXSG6XlueJ0sqXOFq=lMxEt=1JbNvJ0s0WbMeXSGPWSjv=tJ0=tpvJS1x=tu6=YJDXtsQESvbJYpvWYs6=lR/=bvYJbUbJbW0XOueEOE1Jb=UWSWxJxsPWlRPEbFP=tsAWY=bJSGQ=lM6JxwxWb1qWbHmEbMqJ0EmEl=bExEUWOp1JlJ/XSFxXOM0WOHUXSGDEbRqJSR0JxGxJ0W6=OEUWxUv=YjvWxuDESivJSwP=O1QXSjm=lEUJ0EUWOWqXOGxXti1Jb1DXtMe=bUbESW0J0WAExNUXOw6=SiUWls6EOWxWxMeJbJ/WlM/ESE1EtsPXOJQJYMe=OuqW0uPWSpUEYjbESsPWONmWSUvEYp1WSFq=bJq=tWDWtW/=tuDEOjbXlMq=bJxXOJ6Xtj1EOJ/EYueEbpm=bsAWYWAWYRqWbMxJxF/Jx1qWO1eJbHUESGPJbwDWSpUJ0WP=lWqJ0MxXlNYEbJ0WxvU=lp1=buAWls0XS5bEYW/=b1/=YRAJbW6=bRDExNY=O1QJxwQExHbJYReXtM6JlEYWO=UWxM/=SNvWSGq=bUUJYJeWO1xWtuQEt=bWbGAJbGDEYNUW0ReExFx=SwqElJQWxHbWxEb=SivJSjYExsD=YjUJSR6=SjY=bJxXlp1EOW0WOFQJSwDWlpbWb1QEOJQWSG/ExM0WYM6ESuq=S=bWlpYXO=UJSsQXtJ0=tJP=bvmWOFqXSuqJbvbXlJx=O=U=bGA=bs/WOGPJxNY=tuDWOM0EOW6=O=mEbRAWSW6=SpY=bJA=SWeW0JPXSuAJxGqESvYESHmXtR/WxJD=bJ/WSGqJbJ6WYRQ=YNbEY=mWOuqWO5YEYJDExw0XOw6JxUvES5mESNvXSwqEYJ6WONvWb5mWxNY=tu/WOMA=luxESpY=SN1=YMQ=OWeWOF/EbuQ=lMQ=t=vWOFeJx5vXOsPESjY=bR/=SF/Jbs6Wx1QJxReJSpUESvb=YuQEtR6JYiUESHmEbGeWSRAJx16Wts0E0NbWtibWlJQWOFPExJP=bUvWxjmElNYJb1PWxuxWt=UXtsxWbNUXtJAEOJ0XSFAEx1DExvvExMx=SpU=tMQ=bvUJbv1XONUEbvvE0uD=tEvJxMAJxG6XSGq=SJxXSGPWlMP=lEY=bwQEOM/ESF6XONYJbR/E0sqEts6JxpU=OR6JlMP=OMQJlsqEYseWlM6JbReW0EmEbsqEYJ6XtMQXSjmWOWPJ0MAEtMAWSuD=bjUEx1DWlMqJ0EmJSG/=bGDW0RqEOWAXOR6WO=mJlRPWbGAEOvvJYi1W0pYWbU1XSjbEYsDWlJ/JbMxEYj1EYWqE0EU=b5bExF6=OseWbib=O51JbWPWtR6=tsqJSiUW0pvExEUEbHYWSF/WSjU=SJ0WOFPJxwDE0MAXOweEluqExM0XSw6WbpY=bWxXlJ/JlibE0s6ExFxEOJQXO=1J0=mEtWxXOHU=YWDWtuqXSW/WSRDXS16JximESGQWSpY=YJ0=O=YWO=1JYJ0=SFxJSR/JxjvJSMxWlJ0WS5mJ0sAJxRAJxwxWbH1JxNv=bvmW0R6XtWPE0JqE0jmE0u0=lM/Ex1eEtuP=S51WbR0W0uAEOJxESs0EbivJ0jvWS1eJSR0WSimWYRDWYsqEOEUEb=UWS5UXSMPWOMP=OEU=OwAJbuDWbUUWSweWOsPJSUYJxpU=bW/=lNYEOHUEbWD=YsDJSsqJ0seW0uqElWAXtj1WbFDWSw0JbpYJbJ0=Sw0EYi1WY=1JbWe=ljv=bFA=luPJxUYWxFAWOJxJSvmWxuQ=tRqWx=1XlE1J0pm=OvvWlNvESs0XSFeWtsPJbs0EbF0EtJe=OFDWSMAExG/XSuDJ0uAWYNvJxJDJxuPEbReWO1/XSseXtM0=SpUJljYJ0pUExFqXOiU=Ss/=SN1XtueXO16ExF/ElJ6WOM6=bReXtu/JbFAWtpvWOW/Wx1qWtiUESR/WOEvJSuDWYRQJSi1J0Ev=bFDJSWqESJQXSH1WxFxWYW0=SUYXlW/ESFxWxHbJlWeXSsDXOUYJSuQExJAEOMqWSM/XtWAXSueJlNbJx=YWOEvWSwDEY=UWOW6WtjbJYNbEtJ0WxReWtjbXS=mEbNv=ts6JYW/WOjUJls0W0u/XSUvWtueWbRxEYNUXSWeWORDXlib=bWxJxFqExGPExFDXSGxEYsQJluQ=bG6JbWAJl=UWtJxJ0NYJbpbESEbW0s0=YNYXSWAJYNYJx1D=SFAJxs/JluqWSHvEONYEbweJYR0ESJ6EtW/EbW0WlJ6XSNbJbivXtWPElRD=bjvJ0jbEOvYJSjYE0JDXOu/JlpUXts/XSMxWx=bEtjvJSWP=OGQXSRQ=bs0=YuQWliv=bw0WlsQEtMxJli1E0NvEOw0EYNbEtu/E0J/=YMA=Os/EbU1=SW0ExFDJSvmJSHYWOs/XlWPE0pUEtMAWYJA=ls/Jlpm=YJP=lJP=lE1El=bE0uqEOM6ElsDXSUU=YMD=SiUEYNm=tNm=bF6EbHUWxFe=OHY=tR6E0sPJlRQ=tj1=tRDWO=mJSRQ=YsPESib=S1eWOEY=lJDXO1PElsQWlpYJlR/=OEUEO16E0se=ORDEY=vWljvJxFQJbwqJ0EbEOpv=bMeXljbWOjbWbwqXSGqWYpvWOueJxwxWSjmXOHvWSGPElpvJxiU=SGeJxpvElNbEO5bExR6=lMPWx5UWtEmWbiYE0MqWxWDExjUJlsAWSUv=bu0JYW/EYJAJSseWlsDXtsxWYuQElsx=O=bElJeJSwDJSMQWO10Wb1QWbJe=bJ0EYWPXO1xWOJ/JxGAWOM6JSG6J0RD=t=vWb1eJ0JQEbG0=lpYXOw/XSvYEYsQJb=YEb5vXOvYJYE1=tJ6XtWAEOjYEOJeE0pYXlW/XSHbWSFD=SwQWxv1=YsAJx1PWYiUEYR6=Ssx=OHYESuxJxEU=OvYJlW0WbM0=Si1EOMDWbF0JlM0ESseESNbWSUmJYRxEYNvExwAJxG6JbJQWbueXSjmXlNbEls0JlRxJSjbXSMQElRA=OHv=bibWxu6JbJQ=OEUJlEbJlu/WlMeW0NU=tsqExpYExEY=SG0=SpUWORqWbRDEx5vJSM0WxwAEYMqEYE1WO1AWORAWxweEOs0JbimXSUbJb=v=lNUWYW0WYWA=S=UEYW/WlEvJSEYWbJQJ0NYXtWqWxpUJYWPWYsqWSEmWOMxJSpmJbEvJYWq=lu/ESuQJSFxJbuqESU1WSpmJbGAJSsxWxRe=tim=YjUExF0JYWQJYMDWSUYJxNUXOEbXSJ6ElEYWOsPEbEYEYsD=tMPJ0RQWbUUEO1/WbW/Xlue=SwPWxF0XOu6EOMeJbR6E0ivWS5YESHmJbGDExs6=lsQEtsD=OuPXSM0JlJQEb=U=OHv=S1Q=bGAEOu0E0=UWli1=bRQJYMD=lWA=SHbXOjvXSwPESpUWlMDJxG/EO=b=tpU=bMD=S51E0seEb5YEOwQWOuPEbjv=OjYXtW0Elp1JxJxWYMeExWDJbMAJbs0=OwxXtWeJxW/WbMQ=bw/JbpUJxRPJxUv=Op1WxibWx=bWOsDJbGxJYMeWlEUW0RDXOMPExwqXOseWbJQEbim=bFeXSFxWOG6WOsP=bWPWtuQESvmXSGqWSR/WtMqEO=1EYNbESuqJSivJ0pmXOWDJYjbEOs/ESMqJY=1WxGQJSU1XOw0XlMqWOG6XOGDJSU1XtsxEOJ0WONb=bE1EYuQEbRPEtWDWxRAW0s0=OUb=bHm=OW6XS5YJlMPW0RqW0NbWSGQJ0MPXtRqWYRxWtJ0=Sue=OM6WtWAXtjbEYNmWOJA=bvvW0pvJbM6WtibES1xJlJAExRDJxu/EOF/EtWPEOHv=Yp1=lj1E0R/WbWQJxseJxRQWb16WSsxJ0=Y=OEYWlibWxGDEOjYEOw6XSjv=Ow/=OvbWx5UExWDEOW6WbH1JxMA=SM/XtpY=SGqXliYWtsP=YMAXSvY=bWq=tuqEYW/JSwDWbF/WluxXOEU=tRDWSRx=SJeWYWeWls0EbRe=Sw/WYj1W0JqEbGeJSwP=YMDEOp1XOsPE0EmEbNbJ0We=ti1JxFx=O=mEbFQ=tsDEtiYWb5UJbM/XOJqEbNmEbs/=lsPWOpYWxFeWSG6Eb1eE0RQWls0W0E1J0JDWO1PJYsPJ0W/J0NmEYMeXtMDEtiYEb5YWOw0WOsqWlJP=OMxXlsAJSRPJbN1Wxp1=SjU=S=1ExWqEtM/ElsqJ0jv=YNYEbiUExsPJxsDESs/EOs0=SFA=SJPWxFqWSE1=O51EYMQ=S1AXlMxXOM/WOFq=OjvEbs6ESj1JxJAExFPXOWeWtpvE0W6XOvYExNb=ORQESsAXlR/JYJxESF/JYjY=SM/XlimEYJqElp1XtM0=bGxEbueJxRQEbWQ=tJ0WS5UJxwAJ0jbWSiYWlJeXlu/J0jbXOseJSM/ESNvXOJQJYs0WbGQEx5v=OEmElJqXO=mWtMxESFAWxWPW0RDExGxExu/ElNv=OwDWbWPXOR6Wx10Exse=tJDJS1eWSuxXOj1=lux=O5UExJ0Wx1PE0jmEbpvWtRPWOu6WlRDEtu0=bjmJxFPEYJDJl=YE0M/XS5YEtpbEYWDW0NUWx5vJS10JljmWOw6XOU1JluQJlibXOGAEbM/JYs/JSRPWbE1WOUbJbs6WS5bE0uP=b1D=bGP=YMAXSuqEYEmXOFxEO1Q=tJ0J0WeXSvYEbUbExWxWbivWbUYWOjm=OWPWSpv=Y=bWOEYJSEvXOMDElsAExRqEbu/JYJ0ElM/WSHb=OueXlu/EtW/JSwQ=bJ/XONUWS5mWOwQWSsP=bUv=OF/ExF/=SGD=tEmXSWQExEUWlpbWYjU=b5UWxvmWYJe=ljm=YW6JxWeESJqWSvvJYMQJYJQW0EbEtibWt=YEORPEbMx=SMxWliUJSG0=Oi1JbNvW0NvWSH1=SGQJxi1JxJxJl=bJS10Eb10XtNYWbRDJYEYEORq=lMe=S1qWtR0J0M0=lpmExwAJSGeEbR0Exp1XSFq=YsPWxGe=bR0ESW0WbJPJYEUWb1PElJ6JxFA=S5YE0=bWxsQEOu/EbNbW0RD=bGe=SNbExMAJbuAJxNbXOJ/JxwQ=YjUJbFD=S1qWOJ0JlJ/=SReJ0s6W0uDJxFqEtuPJbWAJ0=YXSJ/=SRAJluqEOJqWbiYE0ibWbHmWl=vWlJPWxwAJYMDJYpU=ljvWSw0=Y=UWOJqJSHbEOsq=lNvWYM/J0M6E0WDXS1eXORxWYuxXlRPEbN1=lu6WlsQJxRQWSpYEbFPWx5UEYivWluAJbiUJ0RDJ0WAWtWAElsAElRD=Sjv=SFDEOsPElWxEYW6JlRPElMAWO=bE0p1WbuPElNmJxRAEYW/J0EmJxp1XSpb=SseXSjvJ0J0WYR0WSNm=Y=b=tRqEOR/JxuDEbH1=tuQJSFxWl=mJ0j1XOs/ESEvEbMeE0RAJlMqEbUYXSuQW0u0ESGDWOFQWSJDExRxEO5UJxweExMq=OW/=lseWxJeXSMAWbJxJxGPWt=mJYMPE0ibWOwxEb=vWSsPEOwPEON1JxuQEtMP=bu6ESu/Xlu6WbFPWxj1WbsAWtRQESMDWSRPElWQExJ/=OFAJSWx=bjmJS5bEts/JbNvJYu6J0MeXOGPWxJqE0u0EbFQEbRQWxuAXOwD=OE1Jx51WOi1=SRQXlN1WxJPEbwxWOjUE0W/XliYWbMPEYMxWx=UWOWAXluDJbwDEx5U=bEYXOwAEbUYEbU1EOsx=bEm=lJ/EYsA=SJ0=t=UEluPEOGqXSH1JluDES5Y=OsQWbR0JYW6WSw0=bwAJSRP=SF0ESw/WxRA=SMQE0sQ=YRAESEbJSG6EOweWtuAXtRqWbUYEYNbWxM6W0WqExi1=ORPWSNv=lRDW0EUWSw0JbivExsxEbJPJxUb=OJPWxHvJYsxJlpmWbWqWlRq=OjUWxJPXtMq=YuxJxpU=Sp1JSsxEtuqJbEvWYM6ExMxJxEmWYE1EtpmXtsxEbpb=Ovb=bF0Wxpm=b1xWxpYE0s/WSWDESM/JbjYEtJ6WSpvWYWe=SGqWONU=lM0WSRPJliUWtWPEYW/XOWDXSEUEbsx=b1QESGP=OGDEOs6=OJxWbM6=OJP=SsAXtjvEtjmJYJeJY=UWxvv=O1qElib=buDXOGA=b1qXlN1WxuAWOF/Wx1PWSjYWYueJxuqEONmExR6=YJQEYWP=OE1Wx5YJYjUWtRDES10=bpbE0EmWtJ/Jxse=YRx=OsD=SJ/JSFqJliv=b5bXSGx=SsAWb51JYWqJlM0EtRDJlNb=buQEx16EliYJ0jvJbFA=lsPEbs0JSW/Eb10WbUmJbiv=Opv=OuqXOjbXSMQJYs/Wt=b=S=UESpUWxUbJSs/E0NUJxFqWxUm=OWQXlsxWYueXtRxEYReEtu6ExiYWOE1JS5bESF0W0JqJSFA=S5bWlpmElpmESu6EO51E0=mElibExFqEtRQWxwQXluDWbEUESuqJSim=bU1=Op1=Sp1XOJDJ0RAXSGPWOpYElu/JxpUJYuAXOsDWSNmWSUmWxGq=t=bWYsPJb16ESGe=bsQJl=UEx1qJSpUWl=v=OFAEbpUWSwD=tpYWtNUJxpvWSGq=b5UWbsPExs6EYReWtR/=bueJxR0=SGeExG0EbFxJbvUEbw/JYMPEYM0JSu0JSjmWxNY=SUbEOuP=lW0=bim=Yi1=tu/EbRqWlsQXO=UExpm=bRPJYiY=bEUXtRQEtM6EOGeWxpvXl=YExsAWOpYJbJ6=OvUWYsPExsDWls6WxuP=bJ6WxUv=YMxWS=bW0u/ESNbXOw0ExWQJSJqEYWq=bpbWOW6JxvYJxUYWbMAWOG6ExuDWSjYXlW6EtEYXSM0=Oj1ESMqExJeESue=tR6XlNbXO1xESJP=t=U=tjm=bJPWSMqXlW0ESM0WlRQJxj1Jxu0WSsA=tRQJlJPJSN1W0MP=tseXOpm=SM6=lpUES1DJbu6=buxXOvUJx1qJ0Je=OFqEYEmWx=mJxF0ElRPWljUWxUYJxjbWtMeEbivEO=Y=YRAJSv1WxW0WxJDWYRqW0J0EbsDEO5mWbvYEbi1JbMDWOW0EYWeEOUUJSEbWS1xXSWAXS5bEOEU=OHY=tsPEx1PEtEmXSGx=YMeXOjvJlR6E0J6EOFeXSwQ=bW6ElMDExuxWlMe=ONUXOu6EO1qWbFDW0N1JbR0XOGPE0EYJlj1JbivWbEvWt=mXtNvWYEUJbRqJbR6XOHvJxjmWx1xWxMxWx=vJbM/JYiYJbpvJxFxJSi1Xt=bXS1AJlJ0WlWxJlJAWtR0ExEY=Y=mE0seEORxWxWDEbjYJx1xEtW6WxWAJSjmXS1AWxGPEOJ6XSibJxw/Eb1P=SMqEO10WxsPJxWPWOW0=OMx=OjUWYMeES1DWYRxWxpbWOpUXSR6WtNYWxvUJlJDJYu/WxHbW0ReXO5mEYNYEbsP=lueXO=vJxM6WbFAWSUbXtJ0EO1DEbRqEO1P=OUUJbweEYuA=bsAWSvYJbUmWlJA=O5U=bFqEOuDEYJ/ESpmJbG0=OG0WljUExvvJxMxWxwQ=Ou/WlRD=t=UWO1xW0Jx=lJ0ExwxXOGPWOvYEOJqJSWDEtJqEORD=bW0JbsxE0sQJ0pYJbMP=bMxE0WqExNU=bjb=OjYJYu6E0=bJlR6EbGqElEYEtuqWlseJxsqWSM/JYi1JS10=SFPESu/WYEbEtWe=tu0Eb5vJSwQ=bFQ=tMe=YibE0J6WY=U=tseXtEbEt=mExvvWtuQ=bRPJSF6ExsAEtNUJbNb=OEbJbGPESuxJbRxElpUJbw/Ex51JlN1Wtu6XSHUJSsxWtRA=bvvEbEUExJQEO=UJxMAJSFqXOUUWOpvXtMQXtJQJx5YEbiYWtpbJSFxElEbJx=YJYJ0EluQWxFDElR/ExHvWOU1XS1qWl=mExGq=ls6WbRQ=tibEOsq=SvbWxjU=lWDXtJ0JlR6=bWAJ0W6Jb=vEbM/EbMQ=OuAXO1eEtR/=SFAWljvJx1PEbRxJbF6WOFQJSiUEbimWxU1WYRDW0p1EOibEbpYExFe=SsPJlW6WxseES=mWbRAXOGA=YuQJSN1WbuDWYMAEYpbEljYJli1EtJqXOWxJbv1=SMeEbFQ=OpYWOMAXSs6EluqXlNbWbwqWtpUWbGPWb5mWSWPWSWeEt=UXONvJxsq=tpb=lpvEbN1=bMPXtN1JYM6XSEYEtW/XSG6Ebv1Xtjb=YWP=OGx=tJq=SFeESMP=tEvJbN1ESMDEYuDJSFe=SUv=lRQWSjmEY=1W0EbEtsAXli1=SFQ=ORDElRe=S1/=S=1Ex10WbimXO5UJb=bJlMDEOvYEOJQWOF/WlEU=t=vJlivESEbWS10WluDWxEUWb=Y=lpm=SHmJYRDJbMAXOFDWx1QWx5vESJDExvbElp1E0WxWxG0XSF/JSGxXONbExG6EYueEx=bEOGPWtRAXSF/=S1DJSueXlRxXt=1WOMDJxFqJ0J/XOHvJ0R0=OuQWxR0XSuPWb1D=b5bJlW6WbpUW0MPJSGxXOvbWOWPJlJeEOMq=bj1WSsAExs6EtWQ=S5UEYuQXOReXlu/=lWeExjUWxW6EYMQ=SMQXSNU=buxWluDJYjYES1eJYWDXSw/WSw/=O=1W0=UXSGQEYuxXSG6Exs6EOJqJbsPESibJYWqXOEUWxWxXOjU=SNmWtW/JluQXO5UXlJqExRDEtiUEbJeWbMPJx5v=YRqXSEmXOG/=YRDWlNv=Ys6WlseEliUJ0W/WOUY=SHbWx1/EYEbEb1xWxwe=ls/JbvUXO1Q=SwDEtuDW0J0=tMqElibJY=1JSMxW0=m=O=mWSNUESUvXOW/XOR/WS=mExv1XOJ6J0imJxEUJlMDJ0u/=bivEYjYXlWxXOW/XlWPE0WPWYWAWxvbWbUbJS=vEtJ/=YMQXO16WtJ6ExWA=buDExRAEYp1Xt=UXtpU=YiUJYRP=lNYExGPJbw0JlWQExJDXSwQW0MeJS5bJbRxE0M/WSJQWSj1W0u0ESiv=tJ6WbJPWlEYXOw0ElsAWYWP=tWAEtsQ=SGPEb=1WYimJbHvWtJ/WlM/=bEUWO5vJlNvJlMQ=OJeW0=YJbUmWbib=buDJ0J6EYsAXlJ0WlpUWOsPJS16=YJQWb51W0pbEYJDJSW/EbHvXSF0XS1qWOU1Ex=mWS5UXSjv=bWPJxRPEOF6XlR6WYuAXluD=bwD=YuxWbM6JlM6=YWD=lReJSM/WSM6Wtu6WSEUEtJ6=bEmJbHmXSUmXOUv=OFeWlJeJbw6ElW/EtJxXOF6=SJ/JSvYXtJPWtJxJS=1Wx=YElEYXtse=SvU=tMPWSRAWtR/=SMq=OuAWbRQEb=YEYu6JbvvEYpY=bpYWbjmE0ReJS51EbMxJbuAJlW6EbwQJS1/WSuP=tJ/ESuqExF0Xtu/JxwA=OGD=t=YWSJDWOEb=lMqExRPJbR0WYJ/WbwQEYjUWbMqJSuDEbJeExG6WbF/WOsQEtuq=OwqESWDXlJDXlMqWS=YJxFxJbWDWSJqW0uxExF6=OGA=lWAES=bJbGQ=bFxJYEUW0WAJbwDJbWAWOwDJYR6JYjv=bWqEtJAWOW/E0RPJxJ0WxJQXS=bWlReJluqEbNmJbi1ElEvJlRQWxim=OEm=S5UXOUv=O1QW0MxXlsAXOWQWYRDXtMQWbJ/W0MqEOsQJSWDWbFA=YMeWxiUJlM0WxpmEOJeWxwQJbwqXOF6EOsq=YjU=OFAJl=1Wb5U=lN1W0MeESRPEtMDESG/=tM0ExJA=ljU=S5YE0JAJlJDWSG6EOG0=OWeJYEUWlR6EtWQElNbEYRDEbw0=bG0WYs6EOMPEOMPJxG/=bw6EtRPE0=bWYWxE0J6WtEmWbuxExGP=S1/WSWeWYW0W0EvXOwqJYJPEbNvE0sPWYW0WYM6WlJPXS5U=bGPXtJ6=OUU=OHbWbjYXlEv=tJP=ls6WOWq=O=1=SUmJbjUXSuqXlMQJlWqEb=1=YRxESMDJSJeWxNUJ0JAJljYXSWe=tue=tuQEbWqXORqJSRAXO=U=tpUEtReWtuPXlWxEbseESRQE0uPJbu6W0Mx=tjvJ0sAJ0W/=SvYJxGP=YWAJSMPEbF0JYiUEOu/Jx=1=OF0=tEYJSuQEYMeJ0JeXSRxXOsPXSW/Jxjv=SMeWbEvE0ReJbuPExNUESMxEtsxJS1/WSJPWOueWt=1ExUbWb=mWOFeWxRP=YsQWbEYJ0EvJ0sAEtM/JbsP=Su6EOpYEl=YJxF6WSpbWxvb=SGAJxE1ElJDWlJA=OwqEt=mEbUvWOFPJYjbWxiU=ljvWOsxWO=bES=U=bWP=bJAEb1DJSsQEbF0Xtp1ExRQJSs6XlR/XSFPJbw0WSG0EtNbWtNmXSu/XOJ6=lM0Wx5bEbJD=SsDEYWx=Y=m=bjYJYpbJSsxXOuP=O=vESGDWSFxExjm=lueEOEUJlpvJlJqXtibWlNbESu/WxFxEbEmWluqESFDWS1e=YMQWlNmJlsAEO=v=YEb=bjYEbG/XtpUJSw/WOuPXOuA=bJeWxs0XSG6WbF0Xls0=OpbEt=mEO5m=Os0=tWD=OJQWYJ6E0j1XSWAJSiv=lR6Wb1/WYs6=lNmJSFP=tRAWSvYXSF0=ls0J0=1W0RA=lR/E0RPE0Jq=SUvWORqWbWeEtNYESpUESJAE0pvJxUYWx1PXliUEtM0ESRAJbJP=SF0XlsPEOi1WxFx=ORDWxGQ=YjbJ0s6WOwPESW0=tWPJSGQXSNvWOs0E0=UWx1DJxwDWlMqWbi1=tJ0Xl=UXOHmE0imWbpmJlNUXOJqEORA=bs0XOuAJlWAXOHb=tuDE0JAEOsxESEY=bs6=YWeWSEY=buQXSNU=OHYWYjmJS=m=bpbEONY=b5UJSR6Jbs6JSsA=tEmWbsA=lJeESM/EOuP=Ow/W0jYEYNYJbU1JSJAWYWxE0EUExjUJbW6XONUJ0E1XSu6EOjvEbGAWxjmXOHvXOuq=Ow0=bJ0W0J0=bu0W0JqWSJPJbHvElNmEOGDJYNUW0WxJbG/WbWxWbuAJSM/WxFPWtpbXSN1JbJPE0M6XlM6=bN1Xtue=Si1E0sDJ0Je=OuAWY=mES1xXSWDEOs/WSMx=bu/WOwPEbjYXSjvXSiUWtJ0J0WqEO=YXOueE0WAXli1EtM6XSF/EOJD=Oj1Wts0=OG6JSw0EtsqJbp1=OJ0WlsxE0N1Xl=U=lRAEtp1WS5v=OMqEl=bXtWDWb=YEORQWxF0J0JQ=bw6WSpUJSRAESEbJbW/=OFeJYJ6EONUJSNUExpY=bsxWbRQXSR0W0=bJ0JQW0j1E0sxWbWDJx5U=Sux=t=YJ0WQWYW/Ebu0=tivJxWPWlJQJYuqWljm=YJDExueWYsAExG0WbuP=SWQXOJQJlEYWlE1Wl=bXOReWtJDWSp1XtEv=OFqElseJSu0WtNvEYMeXts0XOuqEbi1J0EmJbNbJSN1=bRQJxsPWlp1EtWqEls6WbM6=biYWYNb=OEYJbs6=lEmEOUvWxwQESW0=OuA=tpv=YibJSvvW0uD=SFDJbRAEOWAJYsAWxEY=liUWSUYJ0WPWSMQExU1JYR6JbRqElR0ESMeE0MPXOu/ESsAWx=mXOMQWY=1WtsPJ0sQWxMAWl=YElRDEbUU=lM0EYsA=SHbWS1xJbsqWb5YJxwxWxpvW0WPWSwDWbpbE0=1=SRDExi1E0RDE0pUExWDJlpbWbRPWO5YEtuDEYM0EbMPJ0sQJSuq=SFQJx16WtsxJlReWbseXOR/J0=mWx1qWS5bEONbJxG/XOWx=SW0J0u6W0RxEYjmXtMP=SvY=YsQExseEYMP=luDJl=vJbRQWOG0JSwQXSu/ElpbJxU1=OFP=lNmJSF6XlMP=Y=YWSibEbw6Wb=mWxuQJxsQEYWQJlRDExWPWxE1EtimXO5YXOUUJlRqWYRx=bMPElE1WbEvWbHbXtRqWli1JSEb=SUmWYu/JbJQJYRxWxw/WxG/XtpvEOHmJxRQ=lEmEOpb=YNvEbNvJxGAJxuxWtEbJb51Ebv1XSG0WlMAEY=1JYimE0EvWb5mWOivXOF0=YNbEO=1WYsqXt=b=Op1JxMPEOp1Wbw6XO1eWORPEx1QWOjbWxFe=SN1EOWxExJ0XO5UJbFAJxpvEO51=bj1ESM/EbEUJbvmExsPJSGe=OsxXSj1E0J6JYJxEtEYJlR0ExE1Jx=YWSJ6=O1Q=OuqXSvb=SHYJxj1=OUYJYEU=S=mEtM/JxMDEtjUWOJqESJ/WtWqWbNUWSi1XOG/Wx51JSEUEbMqJYuQEY=1JlNU=O5YJYjvWlWqEOEbJYse=bEYEbHYWxpYWbvUEx=YXSue=YMAXtRA=bW0=bHbEl=vEbu/XlM/WY=mEbvbWxUmESMQWbpv=tRAJSR/=bjU=YJqWbGeEbWAJ0uAXtuAJ0ue=bFq=O16XOMQWO1eEbUmWb=YESG0WSF/WOG/W0NvJbRqWSw0XOGPEO5vXOj1E0sQE0seE0NmXS=bExwAXSMAWts0WOsDJYR0ElsQWSWqXtR/J0WDJb1xWSpUE0MxEtuxWSw/ESjbElsDWOiYEO10WO1xJSp1=tW6Ex1AWYuQE0R0ElM/=lsD=OvbW0MPJxuQWSFxJSwAWtN1J0u6XOW0JSUmWSGAJbFxEx1QExsPJYu0=bEvWOEmXlpvJbMQXSJQE0JAWSjvJbMxEtMeESiU=bUbWlRDEOUY=OivE0NvXlJ/Jbu/ExuPWxw6W0WDJSFqES16JbMAEYJPJYM/Ex5vWxjmE0uxEbEUXOu0=lR6Wx51E0EmWOJxW0WeXSueWxjUWYu0=YjbXlseJYimW0jvEts/WOvUXtJ6Eb5YJYWDEbWQE0M/WlRDXSMPElJQWl=1=tRAWOW0WYEmWOReXOEUWSpmXS1PWO5YW0Nb=Su/JSuAJ0ibExW0EtNvWSG0ESGQ=lEv=tjmXlJqW0NmE0Jx=SibEO=vWSR0WOJPXS16WONYWO1PWOi1ESpUXOGxW0ReWSvmWSibEbpbExFQWSWxWYJq=bGQJ0u6ExjU=OFeJlRxXSR0WlMxJxjUWliv=bRe=Os6XOw/=bJAXOsP=tiYWSs0XOUbEOJ0WS1DExF0WSM6WxHYJb1x=lEYXOuQJSNYW0NUWOEmXOWD=tpUWxHUJS1qWli1=tJQExMA=YJQ=bsPJlueWORQEORqESW6=SwxJYM6ExJeE0sDEbWDJSimEtWDEbwD=bUUXtuPESWAExRQWxsAJbWQJSvbWxJ/=O1xWSwqEb10=YRqESiUJSJDWbWeEORxES1DWOFA=l=mWxG/Jb=UEYJDWtuQWOFQ=buAEtNbE0sxJ0seEbs0XlNUJbwQEb=mEOvmEOsqJlJ0E0J0WOw0JxRAWbG/WlRAWxs6=OjvWOJA=SEbWSMQESR0ExRqWlRx=b1xXlJeEYRD=OjvWOM0WOvmWOW6Jl=Y=SM0WxGDEYJ/EtJDElR/El=bEtpYJlM6EOFqJSJ/=lW0=tJDES1eWS5mWSE1JbvbWOvvWxwDESWA=tJ6=OW/WlMeWtM/JxR/Wl=vJ0WQ=bu6=lWD=YWPXlWA=lpmExNm=lJ/WlsqEtJ6WtMD=tRAXlRDWbMxXtJe=Oux=bM/W0N1=YjvWlMDJbw6=b1eEtuQEOGPEb=vXSWAWOsDEbJA=lEY=b5mEbpY=SwqJSwPESwQEOWAJSE1EOjm=bNYXOsQXOuP=YJ6XOs6WxUm=SpmXlNv=tsxWtR6XOE1EOWDXSH1ExJqJYMQWYuQEtM6EbEb=YW/WO5bEb16ESu6WOpY=Y=U=buDWxUbEOse=lWQXSpYWbjb=YuA=SJ6XlpvEbFx=tM0EbNYWSGDEb5Y=S5UXO5UWOFxJYJxXSHvJxv1EOuPXljbEljY=S5bEtJ/=O10WSM6EbiYXOF6=YseWSF6WYuqEYJQ=Yu/XtJD=Sim=YjbXSFxJ0pbJxFqXSW6WSEUExReWbW0WSjUE0N1XSF/JxFxEbFx=lR6=O5vWSE1WOuqElsqJS5mESEbXOMPESEbExGP=OF6WSRx=luAWYEm=SwDWxNv=OR/EYW6EbWxJSW6E0u0XSp1WluPJbNbWlNvWOUmWOEU=bv1JlRP=bGPWSW6=bMP=YMqWljYXtueEl=mXlR6EbimWSFPXlNv=Ss0ExR0ESGxWbi1J0MAJlMPJ0jv=Y=U=YWeESG0W0ibWSwDXORqE0pvEOweWxweJlue=SsAElu6Jb5UExsQ=SibWYiU=lRQWbwDWxM/Eb1eJx5Y=SWDXOMQXOJxJx=U=OW0WxvbWlEUJlseEbHbWYRxWbUmXSHUEbUvJYseEtueWlJ/=timWOEmExv1WSwDEOGxW0=vXOs0WtJqEtuDWxWe=lWeXS5m=bjmJSGqWYE1EbGxWbF6ExvUEts0=li1WbRAWxRAEtjvEYux=bGPWx51WxNYEYjYXOjvJliv=OJ6EbpmWxMPElMA=bWeJSpUESHUJYEY=SuAWYJ6EOFA=bR6JbGAXtue=OpmWb5bJbUYJxMAJbJ0WbuQESU1=bR6JljUWSvvExjmE0seWlEUJx1qExGQXOM0=buqJx=vJSwDEOWxEYjb=YsAWbMq=O10Wb1eJbuxWbR0XSWDEOjv=Su0JS1qW0RAJlW0WxEbXOWPWxR6=OWDJYivESN1=Y=vEbNmWb5YXOvYWSHUEYW0WYjmWSsxWSFQWlpYJbGPJSvUElW0Jx1x=tE1JS1qWxWAXOGqXtRDJSUmJbs6EOMA=bRxXOGqXlWeWYj1XlEUXO5mXtW6JYu/JYJqEb5m=lWQ=bFAEOMPWb1xJbF/EbRxEOuQW0imE0JeJbimWOsxWbN1ESW0J0imJluQ=ORqEOR/ExFDWSMeJxM0JSUb=tsD=tEUWxW0J0NUESN1JbibWxRPJS1Q=Oux=tueEb=mExuxWtEUEbw6JlseEbG/J0MQ=OpUWOGeWSJD=biYWxpmXSw0EbRx=tu/=bJe=YWQ=OsQWxu6=b1/XOR/Ebj1=SvYJbNvEYNUE0NY=YpYWbuxJbG0WtW6WxMDXOW/Wbs0=Yi1ExpmXOUm=OjmJS1DXOMPJSM6=O=YWYE1Eb=1E0JQJxuAJ0EvES5bJSW/E0se=OWqXOsD=O51JlMxESEm=tp1XtpvXOGQXO16=lpmE0JQXOM0=tivWbUmWlp1ESG0EbJAWls6EtMx=SWeWbue=tRQ=O1PXOFQXtRAW0WxWYRe=lEUE0E1XSFqJx=mJ0RPWOUYXOF/JSsDWSHv=Y=vJx10JYuxExRAJlJPEb1PWSWqWS=UJSUbEt=UXtJeExU1WbWAWS10=SGeWSs0EOW0Jxv1WbjvEtMxXtWQ=tj1ESEU=tM6WSpUJ0MxXSRQWOv1XSFDWbuAW0WqJlsD=t=U=bEmWOJx=YpvExweJ0pUEtiUExw6EbEYExueWOimJbJDWlibXSjmWYRxEOHU=O1/WY=b=SsPWb=b=tsDW0MeJSGqEYuA=SEvJbweWOJqWtM0Jx=1=bGx=lseXS10=tWeW0R6WSNb=SGDWtW6XORD=SsDElpUJb=mEYpUESGQEtsx=tjbWt=YEb=vWxEmW0EvJbwAEliv=lueJSNUEO51WO1QWlJeXSivWxuq=YWqEOsD=OuQWxH1=bwqJSwQWSN1ESUbESsxJY=Y=Yu0JSHYWYR/XOJ/JSsAWOF0E0WeEtEUWbJ/JxJQ=YWPWlpUWbMqJYMQXSM/Jx1AEOvUXOEUWSJqWO5mWtJeJbRDXtM/ESw6W0i1JSJ6=YRxESEYJlsQJYWPXSwxWSimE0We=bW0WbF6WOuDWSNYWt=bJxFx=S51XSJqESR0WSseXS5v=SwQJS1/WxGqWtRx=SjbJlpUEOp1Exw6ElN1=OimXOG6WxFDE0jv=bGP=OuP=OivXSUU=YuDXSJxWbUUXlivJl=bW0NmWtimJ0J/=lEY=SpmXljbXS=YEY=UWO=bWOMAWbpUElMQXSWx=b1PEOUm=SimJSMx=SJ6XlsxESW0WbsxJxH1=bM0WSMqE0W6=Su0WONYJSNY=SjY=lpvXSimEOsQ=Ss6Wbpm=SWqWSNYJSGx=YWe=tMeWY=bWxMDElRQE0pvWlRPExFqEbUvWluA=OF6WbwPEbE1EYNbJlMeEbweJlNYXS1Q=OHYXOUv=O5YWtJ0WliUXOuDWx5vWxEUJSNYEOGAEbjb=bu/XSwPESwqWOEUEO1xEli1XOM6ESMqWbFxJSFQJS1xJYJDJxNvE0NbJ0W0=bG6WYR0WSp1JlNYWOGeJlueJSs6JS1xEYp1XOWxJx1eEOEYXSN1Xt=mEb5vXSGAElReEls/E0uA=bWAEONUWYsAWOp1ElWDJxwQXljbEOJDEOpUWxj1WYsQWSvvWlib=lRQE0EUEYibWOvmES1/WbM6EYR0=Ss6J0pYJxuDWbG/XlpvXtE1=lu0XS=vWlNvJxF0=SW/Exvv=SGAEYRDJluQEb1qESJqJxwP=b1DXlE1WlpmJbWDWbvmElu/=SiUE0j1E0WQEOpYWxGQJxpvElRPJYR0WlsqEbpmWtu6WSivWSuqEljbJluqJ0JDJS5vWSGP=bGxEYsD=bw0XlJqJbuP=bjmESiUWbuxWSjm=lMx=S1D=lNvEtux=OHU=bvUEbU1EbE1ESwPJSsAXOsxWxF0WxwqWb1/WbUbJSR6WtJQXOw6EbF/=SM/JxFxWbNbElEUJYJAEYJeJb1qESimE0=m=S1PWYWqWxvUJxFDWYJP=bWAJxRAWYuQJSMQWxF6WYMAWtWDXOFeJ0ueW0Mq=YJxXSWqWOpYElseESweWbpmEOR6EYEUXtR/WxWDJYMDXlEmXSsAEliv=SFQEYs6EOJAEYp1WxGDWtNUXt=b=SJ/JSJ6JYRQWbGQXt=1EY=vJxRPWxRDEO=YJSM6WxHmWlNbE0u/Jx51WOiUExHY=tW6XlE1E0iUJb=U=OEvElsqWlJxEbse=YiYWOw0ESGAEtNUESU1W0MQXtE1W0uPWYN1Jbs6EbjvWli1E0NbJbGP=ONv=lMAW0MAWS1D=SM/WSRDJS16WxMeE0pvJxuQ=SvmXOvYJx5mXOHvExW0Jb1/XSseEOu6EtMxEtRAEOueWtRDElsxWO5v=O1xWYuxWx1/XtjYXtWqESW0Ebs/Jb1qJbRDJxFeJYNYXO1qWbw6=S1Q=O1x=tjmWbRPWOWxWSRqEluxWxUUEOuAJxGq=O=1JSWQWxGeESWD=bsQXOHY=O5mW0RQExHYWOMAJSJqEbMqJxJqWOwAEONmJYNvElMPWbw/XOiUWtJqXSW0JS=UWbj1Wxpm=tR6XtuxWtJ/=bpYJbGqWtJ6XO5bE0NmExs/=SUY=OEb=YM6XS5mE0MPEYuP=bU1W0WPJ0ueWbsAEO1P=OuPEYsDWxu6WYEvWOJqXOu/=bG0WS1DWS1eWbGQWxU1WtJxJxGeEbF6JlibXtJeWbUbElimE0J/EtsxWls0EtE1WOuP=bMPXlEUElRP=YMxWOvUEYR0JbGP=bUbJbibJS1xExwqESpvWSvb=O5v=SJ0=SjvXlpm=SwAExUvWOUm=S5m=b1/E0pUEOvbJ0sqW0=mEO5vEbJAWbpbWbJqWxGQ=tE1EbMAWxu0Elu/WbUb=YiUJbw0WluqEOJAXSR0WYi1=SWP=bs/WSEU=SMqESNYWlseJSpYXSWAEOHv=bpvESuQ=OUYWluAEO=U=Yj1Jx1DEOEvXSsQ=lsDElJDXORq=buQWbWDWS=Y=tR0J0JDXtRqExwPWb1xE0=1XlW0=tWPWSseESUbJYRQWbG0=YM/WSJDElNUEO5bJb1PWOHbJxv1ElJQJxvbExN1EbFeJxUY=lRPEtMD=ts0=SimXOwDJbjvExsqExJeExEYWxueWxF/WSN1XOsD=tWDWS=1=lJ/XSG0=SG0XlEUJ0seElJD=YWQXSseExF6ESpbWxvUW0EbW0uPWbMPWxFAEOsxJYpUJxjbJxw0WOjbXtNU=bvmElR6JxH1Wtu0JSFPWbF/Xtj1ElJ0WlW0WxuA=Os0WOJPEtW/Xt=YEYJeJlpmEOEmWYsqJl=vJlibWYRPW0MQ=OJA=OMeEON1W0JDXtjmXOs0ESG6EximEYNYXlJq=YR6WtsP=OHUWSR0ES=UWt=b=OpUJSNmJb5Y=bR6=OG/=SvbJSMPXtJP=SwPEbsA=t=vJSMDXt=UE0W6Jxw/E0MPXtJqJSGxWYjmJ0M/JY=YWOpbXSpmEbFQXtseWONmWxpmXtJQWO=v=luDEYRD=YR6WlpvJlEY=tuDJSWeXlWDWbsQ=YJqWxFDJ0=mWt=YEbwPEtW6JbGAJxUbWlJ0J0J0XSWQES51=SMDJbRxWlimJlsA=SsPWxWQJSs6J0JqWtiUWtJeWlW0ESRqWbMeWSHm=tJPWSM/=OW0E0sDWbjUEYsqWY=bEljm=ORQXlNvWSG/=OJ6WOUYWS1eESwe=OU1ElRqJ0RqXlJeESJ6WlW6ExFqXSFP=b16Wx=vJSU1ESJPJSuQJ0jUJYRe=S10WYR0XONU=SMDJluqWxseExMPJbjmEtsPWYMDEOHUXl=bJSGAXSpbESUbEbHvXSjmEx1D=lMQWYR0WYRQExMPEbGPJbueJxRxW0EYEbJqES=1WtMQWlM0W0MDES5bEbpvXtWAEtjYWYEbJlRQXSG/ESvmWbWqWSFPE0NmXtRPJlNUEbvYEbwDEYivWtMe=tjv=O1PWS5YWxR6=SvYWlJQEYRqXSw6ElWDXlWeXOibXOFqESW/XOJDW0MDWbwq=ls/WxjmXS=vESw6E0u6Eb5YXOjUJbJ/=tJ/XlpmJxvYJxsPXSjbWOU1EOGPJ0M6J0EYJYW6WtM0=SRPWSjvJbpvJSWxWb=YWSGDJbjbJ0s0WS5b=Ovv=bjvJYJeWOvUESwqWl=1Wlu/EYWxXtMDEOFqWlibWYpvEtE1XtWqJbuqWbWqWbEUESWDWbivJYueJbF/Jl=vWOM/Xtpm=ONb=bHY=OFDE0uAEli1XSJD=tRAWbj1XlJ0Et=Y=SMQJSHYWYjvWYMDXtiY=tjvXSWAXtpbWSRq=tEUJxw/El=U=bw/W0=bW0EbEOvmXSJ0JxuqXOMeWxEv=bM/=SRqJx5mJ0Mq=SHvJbJ6JSGDE0uxEtJ/WO=bEbwAE0uQJ0jbXOjmXSRQXSM0XO1PElWeJSHbXS5YWSUUJxuqEx1DXS=mW0MxWYW0=b=bExw/Ex5mWbw0WtJQ=OGPWSseWtNvJxFQJxWPWS5vEbWqWOwPWS1PJSJA=Oj1WtJP=SG/XluQWb=Y=lWxESu6WbMAEljUJSFeJS1P=bs6Jxj1WbsqElR0=SGeWbwqXSs0WSwxESF6XO=mWlpYEOMxESsx=OJxXSW0JxM0Jbj1WYibJlMqEtuDJYpY=tWPESE1=SFDJbseJ0iv=bR0=tW/JxJQESGqWOuqJSFAXOimJxu0W0JQEO1PWOp1EOM0=OJAJbJDJxNmJSMAW0pUWOFeEbivXtj1=OW6WbsDEOE1WYjUWOH1J0=YWtN1WSE1JbEUXONmWls/JSHYJ0R/=Sw6E0sxXOse=OEYEYRDWbWxExHbXtpYXOj1WbjbJSU1=O10WbsQEtWxES1xW0u/=bU1JSjvWYs6JYsqXSR/WbNvESw6JlpUWOiUWbjYJbUbJ0pmESs/WSWPWlWxXtMQEOF6WOUm=tiY=OsDXOv1JSWD=luD=OHYWSsAXlM0WSuAXtRQJxM/XON1EYJD=bw0Elu6ElseJSGA=tW0JSwQJxUv=bMeJSG/J0sxE0j1=bMAWS=U=lM0JxsQWOWQXli1WOsPEY=vExH1WxMDWxuDExEm=S5YWbwqWbpU=YJPEYWqW0Je=SRAXlW/WlseXSpmXSE1J0RQEb5v=SseEYpYJb1QEbWqJlseESpmEYMe=bWDEYEv=YW0=S1QEbFQWYReW0pmWYEUWOwqW0ue=lWqWxWAJxsx=YuxXOGPXtMqWYpbWYjb=ONU=Su6WxRDEbseJlE1JxE1ESv1WxG6JbHm=OM/=lMP=SF/JYs6XlW/W0iUJYNY=ls6EbN1EljUWtW/=SuAXSW6XOGqWlR0J0RxJY=1ESG/WbwqXOpm=tjYJlReW0s/XOpU=bFAESW6EOHm=YEUJSw/WlMQWbuqW0s/WbuP=OFP=O1qWSHbJlN1=OjvJbMPJYJ0J0sqXOMA=ORQEbpYJlsPESpvEYsxEbs0ExMe=Y=mJ0JqWONYESNU=tM6=ONUJlJPXOF/EO5YEOMxEtRQ=SMe=lp1=O=vWOEb=tsqE0ReEbWPExNY=tWDESRxWYjU=SpmEOiYWxG6ExRq=Ys/=lJDEbFxEtRxWxEmE0JqExHYWtJ0JSUYWxv1Xtj1JxUmExsPWxMxWlWx=bseEtJxESvUXSseWbR6JxFqWSRPJSsPXOR/Jbu0WbsxJSR6EO10JYWQJxUmWlEbESG0EOwQElsA=OM/WlM/XtNmEYEmXSM6WlJQJbMqJSjUJ0R6E0EYXOv1XOjmXtiUXOjbJ0sDESF6=YuAEOF/JxvY=lsPJxRAWO5mWlpUJluqXOsQXOEYXOR0EbUbWOj1WYM/J0ueXlMP=S51JSweWYNbWb16=S5mJYp1Jb1qWYpbExsAWSG0ESG/EOWP=Ss/ElNv=SEUWxuxWOwqXOw/=SHm=tRQWSHYWx5bEtp1JYNU=OEUWbEUXlsxWYj1WY=v=tJ0JxJAW0JDWximExse=OG0WYM0=Yu6JxGAJx5mEtWA=SF6XtjYJYEmJx=1JSF6WlWPWbMeXtN1EOw0ExN1EOMPExGQESsAJxNb=ORxWluDWxiUWOR/JYMe=bsqEtJ0XSw/EbG/XSwxJxWAJ0W6XS1qXSuPJbwPWSRA=OEUWbFxESuQJSj1=SUYJxHv=SimW0iUJbW0EbNm=tu6WYpbJSJQ=b1qWSsxJYWPJ0R/JSE1=limJxuAJbEbWYjvXtue=YjU=OwPWbG6WOJ/Jx=U=OiUWSG/XONvXOs0=bRPWb=1WOR6=SiUWlpYEbWDJlivEOW/WlNbJ0Wq=lW0=SuQXl=vJlu/EtuAJ0MeEls6EOjmXOibE0MxJYMAEbJqXts6Wts6=luqWbvb=OHvXSFeJYjUWSsqWbNbEtiYWxJAElpmWOH1E0RxJxu6=SRDJ0J6JSR0W0jmEtE1Jx=mJ0jvESN1XSweJlJ0XSwe=S5YWxEY=lEbXlimXtWPXSR0ExFxEbGQJSHbXtsQWlu6=O51WluAESGPEb5bJbJP=S=1WORx=bUUXtiUXSs0XOvmXO1DJS16Jx5YJxjYJSGPEbR0WSpbXSWQEOR6XSW6WYs0XONbXluA=O1xWtM6XOjvESsqJYi1=ORxXlRA=OGxXSv1=tJeWS1Q=lWP=OwD=lJ0JYW/EbR/ElpUJbvUXtp1ExwqElW0WlpYJxNvWxuDJ0NvEOHYJSuD=biYJSRAXOJqEbF0JYJeEYWe=bue=ts6EtM/Jx1eJ0MAXSjmW0WAJx1xEl=UES1qWx5UE0sDWbW6WlJDWYMQEtJq=OMAJxiYEbF6JlJx=ljbJYRDEtiYJljUJ0sqWbHYE0RAWtJqXtR0=SR/Jbu0XOWDXlEUXONbXlMQWSG6E0Nm=SG/WbNvXlW6WxW0WYMDJxF/EY=1E0pvJlN1=OFQE0JeWSwxXtReEtRe=tMDWOEmJYsD=OweESEYWOR0ES51EbE1=bF0XOJ6JSG0WS5YWxEm=SF/J0sQJSwPJb1QWSweEb5bExuxESp1=tsQ=SGPXOGPXliY=YJ0Jxue=S51XOwPWx1q=OvmXSseXSwQ=Sjb=YuDXlJAEbw/ExUUJbRA=SMAXSRQESMDElu/JlsQJ0We=YReXSi1WYs0=lu/WxuqWxJ/XOMQWbW6WxsAJlRqWtj1XtMD=ts0JSGeEYu6=tE1WtN1=YM0Elp1JliU=bMPJSRPWtue=OpYXlJq=bGeESG6W0sPWOuQXlR0Ex1/WxJQWxM/EYR/XOF0Wb=YWbGAJxibJ0W6EbGDWx1xExpUJlR0XON1JlE1JYpvJbUYEtpUWOHUXSwP=tWQXts0WbvmE0seEtuQWtpUWtW0=bEvWxEYES10ExGPJYW6JYsQWbFx=b1DExuQJbWQEOuP=tsQ=OiUW0JxWOWxE0p1=bJ/JxJ0=O1QEOwqEtMAEbjmW0JxWljY=l=vXSN1=SWP=SuAW0EvEt=vESJQJb1A=SM0EOuP=YMAXORAJSuPEbFAElMqWSivJlWA=bR0JSF0XSEbJxGAES5vExjYESG0JxNU=t=YXtjbEYpU=bHmEOW6ESJQEbiUWlseE0JAJS10ExNvWSJeXtu6JSw/WxMAWON1JxWqEbFQWbsQXlEvWOvvEbGxJlEYJluPExFPEb1eEx=bE0M0ESEb=bJD=tReESFPW0ib=OJxWtReWOwqE0u/=SsDWluDJbw0WxFx=OW/=buAJxwAJlMPEYivEOw6E0JeWSHUXlsxXls0ESGAW0JxWlpYWS=YWxWAEYuAXS5YJSG0XSu6ExiUESuQWbReJ0=bJ0u6JxuDWSHUESU1=OUUJYNmJSWx=OuQEbGPESibWO=vWYjmXOFP=OjUWxUYWSwAXtR0JlEYEtpvE0sPExFxJSp1JbRqEOwA=S1q=bs0ESvUEbEYEbJ6WSR6WYsAXlR6=bGx=lN1Jb=YWOMqWx5vES=U=YM6=bF/EOGeWSUvWbWA=lM0XlpYWO1qEx5vESi1JbR/WSvYWlpYEbsxWOR0Eb=mElWAWSvbWxG0=OjYESuDXOHYWxWPJ0MxESEYExMeEORAJYNbEtseJlJA=lNY=bFPESUbJx1P=tJxW0RQEbNb=OM6Jb=YJbJ6=OWeJb1/J0sx=OsqJbRAJSux=bu0=SMqWOpm=OwAJbHvJ0=1XSsAJljbWtjU=bR/JS=bW0WxXlRPWYsxEbGPWOMqES=vWxwQJSReWbWAJ0sP=SsAE0=YJxGPWtpUWlRxWOWxXtuq=YsQWtJq=tW6JSuQEls0=ORe=tu0JbMQW0jvExs0XlWAElimWOJ0ElMxEtJQEYs6WbE1JbwqE0=1ESW6JbG/JbsxWO1q=bu6Etj1WORDWO1QWSJQESRDWbGPWSUUEOF0XSueEbJqElj1WlsAJSsPJYWAJlR0JSpmJ0Me=bvUWSwQEts/EOuDWbw0EtReXtMxJ0pvJbGDWSJDJbGeJ0uP=YWQ=lJPWSu0WO16XSjvWSvm=bF6WSGQWxGQEYpYJlseXSseXSib=tW/WS16WSNUXOGqESM0WOGQWYsPJSN1=Yu/EbpmElsqXSJAEbM0EYEUEbHmWYWxWlRxJxWQ=YuqElMAJxWQJ0RDXOw/EYW0ExWDW0pvExRAWSuq=OFe=OpbXS51WxF0EOiYWbEU=bGQ=tjbWbEYXtRxElJDXSJDWSRx=bFP=lWDJbvbEYRPJxGPEbivWtJ6Wbj1=bGDXOjYXtJ0E0EbWtuqJ0jm=tWPElsxWbEvWONvJxJxJxFxXts6=YJDWxpYXSMQEYWxXS5UEx16JbNYXluQWtJD=lEm=lpmE0iUWSMx=bGQEOEYWSvmExsD=O1eEbu6ExFQEO=v=bJPEYpUXljYJY=Y=SJe=SMeWlMeEOjY=tW6WOjY=Ss/Jx=1JYiYJluqWSEUWxFxXS=vWOu0WtsxEORxWbGAEYibWOiY=tNYJl=YWYs6EYEbW0sD=YJ/Xt=YWYpv=OEY=SFxEtu0WSpYW0MDWlivEbFeWSFAEOUmESw/=SvmWxRA=SWPJx1e=tJ0=bRAWbWx=tibEOUvWtRe=tW0WxjUExsAWOG6XSpYJbGAJbpbWSH1JYWeEt=vXl=UEtEvJSw/JluQ=YuD=YW6JYsQWbJPJbM0WlWqEOEUWOpb=tJeEYRxEb51=tjvXSG0XlsqWb1xWbs6ExwAWYNbWlu/WxGDXtW/EbNYWl=mXOp1EOW6WliYJbNUEts/Eb1DXSNbJSw0JxJeEtEYXOHYJb1PWxv1JbFPXO=Y=lib=tsPE0M0=YWeExvbE0RqWbvvXOM6EbM/ESwxExWD=lM0ESj1WxF0=SRDJx1PExEvJSvvExG0=OvvWSi1=SG6XORxXlj1Xtu/W0RqJSJqWYRqWlEUJYseWYRQ=SjmESG6=SReXSWxWYsQXlpmJxMxXluq=OsxWO5bESGeJYuqWSw0WSGxElRDEtj1=SMxXtjU=Ss/EtsPJxJeXt=YElJQWbs/=SimJ0uQXSEYXS5m=SMqW0J6JSjUXtjY=lRAWtWAWtMeWSsPWxJD=OGqEOU1=OGxWxWx=lpUExG/WtiYJbG/WxsxJxHvWbUvWbimXSse=bR/ExuP=buQEYJ/WOW/=O=YESEUExuA=YNU=b=vEYMxXOFe=SGqEYW0WSNvJxFQ=bGQXORDWOwQWbWAXlpmESW6Wlsq=SjY=b16WYsAE0NYJYuxXlMqJxHmJ0=b=ts6EOGD=tWDE0NU=OH1ExUmJSNYJbEb=tuA=lu0E0pmWOW0JxWAWOM0Exu6XOFDWbEbJxvUExHbWOJxW0uQW0=U=SUYJSR/WlRe=b10E0EUEbMqEO1QJxEm=OGPEOvYXSiYJSRD=S1PXSRPEtJxWtR0=tNb=bFAExs0XOJxJlWA=SJ6EO1PWYM6ExwAEYMAWb=bE0NYE0jY=YuqXOMxEYsQ=tsDESUmJSUmJbue=lRQXOFQWSUmJlR/WSpvXOF6XSWqJbsQWSU1WSW0WlWP=OFAWbu6=t=YJlM/WtR/XlJxJluxEOHUJlMAExGxWbM/WYsPJlJxWxWPWS1qWxEvWxMe=bH1WxvmJbG0WtueEYRxJxueXSU1ElRQJlsxXtueXtimXl=U=libEtWA=OuxEYJDEbpmJxR6Jx=vXSp1=S=1ExFPXlM6JSWAJbF6WxvmJYivExJxW0RAExjbJYR6JlN1E0uqElux=O=vEb5mESuPJS5YJlNbJSjYJSUvXtRDJxF6=SjmWOw6JSpvEYRPEx1eXlMxWlMDEYpm=bweEOEmWlMxWYWq=SHb=OvbJx5UWtuPW0NUJlpUEYN1J0uPExG/Ebi1EbpvWSH1WlsAJSweWOReWSMAEOH1=YsP=tpmWx10EOR6JbwA=lEb=lW6=bRPWlW6Eb5v=tEbJb5UESi1XSW6=lW/ExHUJ0uxE0sxWlMA=tuA=Sj1=bsxESuAWtEvExs6XS=mJbJeWbp1J0JeJSGQWxEvWYJQXtjm=bW/ElibEt=vElMPW0ivXtsDWOuAWljvXOsqW0iUWxH1JbseXONbXORxWOWeESivJb1xJYpY=SG/=YEv=lW6=Y=v=bG/XlRxW0MDJbMDWxMeWOUYESjY=bHb=YMAXtWAJbFxXtuqWSRA=SwP=Ovb=bW/WSRAWYJqJSv1XOwD=tuAE0M0WS1DWOR6WSs0=b=YWS1QWtNvE0WqJSU1XOGe=OUbES5YElp1EOwq=tjYWbGPJSMA=OMQEOjUWSGAEbimXtJeEYpUXSGDJxu0EbM6JbM/JbvU=YJxEbMQ=OFqESH1ESRAXliUE0s/Wx=UJYuD=lsPJSNUJbReXOjYESs/=bwq=OJAEx10=lWPWlEUWORqWSEY=Ou6WSMQExJq=OR0XtWeWxjmJbib=lN1=SvYESivESvb=bJxWxNUEbGQJSN1W0R6WbGq=SuQESiUEYWeXlp1JYEYEOF0JbGxES5YExWAXSuQES1DJSHYJxHvEtpYESJeWYEmJYMPEtJAJSM6WlRAXOj1WxU1Xt=bESpmJliYXlM6EbwAWbwe=tNmWximWxR/=lWqWbu0J0EUExW/XOMAXlW0=tWQJYNmEtMP=Su/XOseElE1Wxw0JxGAWbsqWOJx=YNYE0jUWtJD=Ss/=SUYEO1qElMqXlsQEOuAXlJPXlNY=bJeEtJAEYJP=tuD=lpbWSiUXORxWSUUJlseXlu6E0J/XS1P=YJQEO5UElRxW0ivJ0J/Exjm=tN1W0sD=ORQEtWAElR/WYRqJxpbWbMe=OJ0=ts0XORx=OWxWx=mWxuqExs6J0EmEYMAWYu6EbF/XSRe=OR0=Sv1Jb5vJlM/ESM/WOGAWOH1WO=UJSwAEtWq=lEvExGe=bsPWljmEbMQ=OivWbiUW0sDEtWAWOw6=t=1W0NvEOMAWbiUWOMQJYEm=SsAJ0WPEYuAEx5bWbiYESJ/XOJ/=Si1Exi1WtRAJbJeWxUUWSM/W0MqJlp1EbuqXOEbWtE1E0jYEbuQ=lj1WbNbE0jm=bpmElpvJlsDXl=mESWeXS1xJbwx=YRAXtNbXtW/=Sux=SjmWS51EtJxWS=1=lJqWS1x=OWxE0E1=ON1WtNm=YJeXS1xEbjm=bFQ=tWDWSJ6WSWeXORqE0ueJbvmEYpUXOUbXSR0ExUY=buDE0MqXSu0W0pvEYRDWluP=YsxWOsPWOUUJYJ0EtR/E0pvWbNYEtpmWxJQEb10=bEUXtNvEx5U=OFQWSs/=bNv=b1AJlpUEOsQ=tjvW0EbWti1WbGeW0JPWSJ/=OWQW0WqEORPJbvUXSHmXSWDJbjYWlim=buqEx1D=lu6XlsxWSR6EO1QWOF6Ex5YES=YXtueWYNYEOwAWS16WSjvJxE1XlMx=bvmJSiUESjUJYjmJx5vJbNYWbR0WxG6EtsAXOHbEbHUJxU1EOweJxueJbj1E0uA=bGq=lJxEYsPWbUU=lpmEbuDEtJeJlRDWSJxJSEUJYWxJSW/Jb1AEbWxXSF0=lJQElWxEtWDJbWQ=YuQEYEY=bjvWSJQJxRAWxUvExpYXOUvWSsPWS1xEOM/=SW/ElMAEtEmXls/WbJ6=bWqE0W6Jbuq=bJAJSNvJxW0Xlpv=OHUEtsAESHUEbw/EtsAESwAXljmJ0jU=bi1JlueJSN1E0NvWS1DXtM0=S=bW0Eb=OF0=O=UWlimESueWbv1Eti1=tu6ExHU=SE1ExReWOM/=Ss6=SweEOFDJ0EUWbF0=OGq=ljYW0iYEOwqXSpYJSFx=lRQEtjYEx1DXOu0JbRe=bHY=tM6EtJ/XS5UESJqXl=bEtReEYpbEbJ6JSFeWSRqE0MPWYRQJSibWx5vXOj1JbJeXSWxJ0RDXSsqWSuqXljmWb=YXtMPEO1DJYMQ=SWAJbH1ElsQEliY=YjvXtR6JYWPJxM0=SFxEO1P=S1PXtNvXOHmJxwDXSjvWOWD=bR6=bwPJSHb=OuDXOG6ESGPWSsQWxiUEOF0WSGxJlR6=lMQXOjvJSvvExuqExFAWxuA=SHmEYiUJbRq=tMPXlWAJlJeJlRA=bUvXlW0JxG0Xlue=tpmWxNmJSsPESRAEtJ6Eb1AEx5Y=O5m=SWD=YpUE0MeJbHbWx=YJbRxElJDW0sQXSpm=lNbEti1XOpbExFq=bsxW0WAWSv1XSs6XSvv=SjYWO1DWls6=lJPEtimWbw0=YRPWSEUWb1QEbEbWxuAESp1WlNbJxM0Wx=YEYpbXOpm=OweExUbXOwQWtuPJb1D=SWQJxwPWOjbEtp1JSsQEb1DXlJQWORA=tJQElsQXSvmJl=1JxuDXOpYXSUbXOibWxMQWSR0=S=1Et=1Jlu0=bsPWSEUWxN1JSGDESH1Xti1WtEUXSG0Wxib=ORQ=YReJxMxExGD=lpbESGPJbvUEx5YEOM0=bsDJYJPJSs0XlsxJbv1Wx1xXl=YESibEbwqJYjvWSUYEONU=bvvJYi1EtW/EOGPJbJ6=bMQJS5YEYpvXOR0ExsxXSN1J0s0WtWA=YimElJDJSvb=Ow0E0imJl=UXOG0ExWDE0ivWlibEORDWOEmWxR6XSM/J0=UW0JeWYp1XS=1WlEbExwxWSMQJlu/WO10=YsqJxHYXOjmEbJeWluxEtiYWYMPXS1AWS51=SJPXlRx=S=mJ0ue=SwAEbMxWSHbEOFPJ0WQJbJQJYjY=bFxJxEm=OJQ=OHvE0sDJSGAJSRx=SpmJYuQJb1AJbEU=ORx=SsqJ0=vESjmJS1qWtNUJSW0EYEYXlW/XS16J0=UXOvmE0Em=OuDJ0sAWOMqW0sAWlJ0WbNmJSueEtuqEbH1WbvvWbNvXtW0WtMPJbw0=ONYESGx=SR6XlJeXOjvWOpvJlj1WSuAXOG6WbGAWSEmEOi1=Ys0=SHvXSw6EtRPEx1DWOpUWtjbESpYWluqJbMx=bG/ESGqW0J/JYJ/Wtpv=bRq=S5m=SWeESRxJbpvE0sD=YJ0=bEYXtReXS5mExUmWYWD=SEbXOsDEbRqJb1q=ljYEti1Wbjv=OuqJYWeEYR/ElW/E0JxWlW6W0MP=lpY=bsDXSMPJxEYWtMqWxHmXSHYWOEYJxG6EYE1WbF6JSuxEb5mESjvWxNYJ0W0WSWDWbReWOW0=ljUJlWAXSU1EtEvExUY=bEbEOuAJlN1=tNYXSs/EOG6=lR0XlRqJxw/WbMxXSweWxJAWbGxJxFqXOjmESRPJSpvExWeJx5m=O1eEYuQElM/JxsPEYEmXOWeEbNUWt=vESH1WSvbEYR6W0EmXl=bXOuDW0iYWOuDESwxWtjvEbGQExjvE0M/XOi1=tNbEYM6J0N1WlpbJb1PExWAW0MqXORDXSpv=O=b=tMqJSG/XSu0E0MeEbG6=S1eXlJeJlNvJlpmJYuPWb5v=OHmEbNbWYMxWtiUWxG0WbpUXljmJSGQWxJD=OF6J0uPJ0sx=tuDXSwAJbGq=YM6Jlu6WO=bEbj1=b5vWluAExWQJ0RA=bEYWbUb=OJeWlMQEbJA=SMxES1DExWQ=OGe=lJ/=lEbJ0jv=lim=OUYJxsP=bM0J0sxJYM6=bFPJxWeWb51=luPJxFPJxWQWtjv=YpYW0u/=SsPJ0uQ=bwqWOs/Wbiv=SpUEYpbEbvmEYRPEOUUXtsqWOEvESNvExw0WY=mXlWq=bMxJxiUWSsAEYjvXORqXOMD=bFe=SMDWSGDE0jUJ0MqJx=vJ0=1ExRQ=bMxE0EmESuqExGDEbEUXOw6=bM0=S1DJYMPEb=mWxReEtEmWY=vEY=bEYuD=bWxEYMQESFxJxs0Expv=S5U=tJx=OMqXSjU=SWPXOweJlu0JYp1=lJqE0R6Wbu/=SuqJlpbEORx=Os6=lJ0WS=vJxEYWSseElJDEti1XS1DWSU1JYMxJxsqXljbXSHmXOMQ=OW0ExvUEb5vElEbJb5UWSE1WlibWxWPESWqXOG0=SJ0Eb1AESFxWS10E0jmWxWAXOwqJ0iUXSGeWYjUEx1eWtJxWORDWYNbWOH1Eb5v=SHUE0u6=l=b=tM/=Yj1JSMxWbsQWSFeWOvvWtsAXtWPWSvbExwD=l=mJSueExH1J0=m=lEmWS1AWOJxEb5YEYEmJ0s0WYJeJbHYJbwe=bJDEYM6Wb=1=SJxEbH1Wxjm=bHmEYsxXluA=b51JYJ6=OWeESJ6=lMAXSF/WtW0WbEmWbG6ExNbEOiUJYjUWbNbEbMQJ0MQXtWAXtpYJlsx=bMQ=S1x=t=vWSGe=OuDWO=1=YpUEY=YXSu0EbMPEOMAWls/Xl=YWSNbEbvUEl=YJSWeEYsQWbRQXtNYJYMA=tWx=b16=OR/ESRqJSsAJxFQ=OvYJ0uAESWQW0u0J0R6JYR6WO1e=ls6JbR/Jls0WbRA=lu0JSimJYW6E0J0=OiYJSFAXlseWOGA=bF0XSMQ=OG6JY=UJluxXtueE0WAElsD=SwxEtpmWb1AXSGxWxiUWYJAEtsqJxReJxi1=SW0JbMPXSivEOH1WO=vExUbW0uA=tMqJx=1ESR/J0ueE0Re=t=vEOU1=OEbEbJ0=SW0=OJ6JYR/JbM6WbwQXSG6ExsPEYs6ElNbEbvYJlMDWb5YWxG6=tseWSpbXSwxEbEUE0EbXSJ/WbpbESHbXtReXSsD=tWqEts/WxMqJlsAWS5mWbMDWSGPJ0=U=OGA=Os6=bFqJ0Em=lN1EOuQEbFqWSF6=SueJSWq=S5UWxJ0ESFAEtjbWxWQWSuqXSsPWbvvExNU=tp1J0sqXOWDWO1P=lRqWli1XljbE0iUXtMeJS1AXOH1=SvmWt=UWxJeXOHUXSvvWxJDJSs6=tM/J0RPE0sQWxNUWOv1WOpY=YpYJlJe=tW0XOivJ0=bJSwAJxjbEtueJbFeJYi1XtuQWO1xJSG0WbWQJY=Y=bHmXOMxES5UXlMDESE1WSu6WYuqXSM6ElRqWxpv=SM/XOjYEtiv=OJxWxwQWOw0=SHm=bJ/=OiY=YiYWbiUESGAEtW0Jb=YWlRAWbF/=b5mJ0j1W0sq=bEmWxs6ESFQExsPJlRqJlR0EYjvJxNmWOFeJxF/WluDJYReW0EbESpY=tWqEx5vJYJ0WlJAXOjmXOFeW0ivJlpbE0JqWbv1WSs0XOvvWOwe=lNbW0EUEbGeJbFPWSuxWb=U=lpUEbNb=lNUEYuqWlWqWxUUJb51ExsQJYj1JxpUJb5mEYEmEOibJx5b=S5mEbFeESMQEbuAElJQWbuPJbsAW0sxXOjU=SH1EO5mEONm=bUvJbNm=lWxWxuQ=lWQXtsqJSJDJbuxE0s0JxFAXOFeW0Nm=SF/JSp1=luQWtuAXlu0Exi1=SE1=YueJYW0Ex=b=OuDWON1WxNmJljUW0seXSEbXtsqJYiUWxFq=YjmJb5m=lRAEtjU=tpbJb=YWbwQWbs/W0=vXlNvJbivWS5mJSW/WYs0EOjmWtEvWlueJlW6ExMx=SUUWxuqWts/WYMeJbw0WY=YJYJAE0NU=Y=b=libExM6JYR6=Sv1JSj1WYJeXtEbXOWeJlRDWOJ6WlsQJ0JPJliUWtJ0WYWPWtseWtR0XlsxWtRxWOF/WlWqEbs/ESivXSEmWYuPXOwx=O5UWx1DXOUb=OMQJYN1W0J/XtNUJ0uQWOsPElJ6=lsQJxu6WSJPWO5UWOFQXSpUXS=1J0uqWxFqEtWDWOJQJb1AWtNUXtN1=lpvWtWeJ0ux=OvY=Ojb=YivJYR0WxUbWO5vXOi1J0EmXSiUExF6JxHUEOivEOs0JSs/=bwqEO=Y=ljU=lJQXtJ/=Ys6EOMQWxMQESMDEOsAEb=bJSu6Exw0WOJQXtEv=YsPESR/J0Je=SEYE0=vE0jvWtMx=OMQWSwqJbJQ=buqXlpmXSRqJ0ivEYM/WYs6WbEmJY=v=bsQ=Ou/JxGxEtEU=YuPEYjUXtM6=Ow0=SwxE0We=SJA=Y=1XSRe=SJ/=lue=YRQEx1q=SibWtsP=OwQEOj1XtRQW0WQWtEYXOpYJYRDEx5bWbM6EYiYWtivWlEmEOFqJlRqEbjmJSGD=Sv1=YWxEYJeEO5mXOsqWtWPE0jUEOFDJlu0=bj1XlWqWOuxESM/JS1D=OpUXOWPEYJqJS16Wx5UJYW0WYpUEx5b=S1/EYJAW0sAEt=bJxR6=bWeJxweJYJDWYp1ExG/ES=v=O1QWS5bEYiYJYWA=YsDWOUvWbimEY=1XtjYWSwxWxs/XtR6EtseJ0Nm=SM0JYWqXSw0XOFqXtM/EOvmWOpUJ0JxJ0pUWtpvWbsP=OW6XSR6JYsQWxMD=SMPWOM/JxJ6Wti1JYp1=Ys0XOGPWbHvEbMAXOu/J0jUXlEbWtsqXOUvEbiUEOpmJYRP=YW0WlJA=O5bWbuDJSUmEbFqWtsPEYs0E0sPWxEmExNvWOwA=Swx=lW0J0sqExwxWb10Wx1e=lEYXlu6WbpvXSpYEORxEYuAEbEYJlJDJluqExF0ExFP=SwD=lJQWxWDWtjmJS=vWxJxEtJ/=OMx=ORD=OH1WSFeWOjUJYsAXSMDJxpbJY=UWbs0JljUES=mJbibXlsqElpmWb=YE0jUEtim=OjUEOJQWxsPEOvbEbwxES1DWSGPJ0MeJxUvWYRQ=bEYJxFxESGAJbw/=l=UW0iYEx=vEti1=bGA=OM/WtpU=l=1WSFDEtse=YpvXlueJxFqEbGDElu6=SEm=OwqWb=bWbwDJbse=b=bEOUmESseE0uQESvUJlMeWlM0XO1QJxMAExRq=SjmWSWDEtjvJbivJSG/ExFQEOwPExReWlMxJx10=SFe=SvmEtJeESWeJSGQJYE1EOUUExibWOR/=OHvWOJPJYpvJb1eWYNb=ljbWOJqEYimEbWe=YEU=YR/XlRqEO=YEOHvXSpUWYWeElWDWb1eJbj1EOsA=SR0J0uq=YJP=bvvXOJ0W0s/XtuqJb=b=YNY=OGxJlNm=YsxWYWDWOibEtJeXliUW0uAJSUUXOs6Jx1D=SMq=luDEYJeWxF6EtjbWYib=biYWlMDJbuPXlN1=lMqEb1QXOF6WxUvWOwPXSF6EbWeWSW/EbRDWbR6WYN1JxUmWSR/JYNmEYE1=OwQJbsxJxHYXSjmW0=Y=bW6J0ue=YseEOW6EOp1WbNmW0jbEts/=tu6XlJQJ0RDXSwPWxsAXS1A=tM0ES=1XOMPJ0sqEbGAEYEbWbJPWON1JxJAJbHbJxsQEO=mESM/WxN1JbUbExuQ=lW6=buAXOsx=Ss/=OuQESMAWSw/WOEmJ0u0WYjYJYEm=tuqJxwQEOFQEbjmEb=mXOUv=YNbESHmW0=UW0i1EO5vWSJ/ExNvESHbEOs0JxsqJlM6XtpbXSMeESp1JbjbWOWAW0JQ=OW0ExFxJbpYWYsDJbvbWtu0W0ueESEUXlReE0NUWlRxWxWP=ONbWYuPESpbJbWDXO=v=tW6WSWqJY=YJxvmWORqWYNUE0sqElivJSNmESFqJbGDEYEY=SRQ=YRA=tuAXSUvWluxW0pbWxMPEx51WxRPE0JQWOF0=tR0=OUUXSRQJbvYXOpbXOsqEbvm=YibWxJ6WSjYE0jY=bu0XlN1EYJ/WYWeWtiUExUbJSvvEb5vJSMxJSRQElMD=OGeJYjvE0WeElJA=b=U=SFxWSpb=OFeW0uDESMAJb=1WORQ=S=1ESwAESsqWSJQJbFxW0WQEbuxJbs/WOsPWxMA=OJQWYJDJlNUWOWPWxs0XSuqWtWA=lseJbseXOjYJbsAES=mElseEb=m=Y=YJb=UJYJAWO1QXOvYJYpmEOu0E0W0ExJ/=YJ6EYRxWxvvXOJAWxsAJ0iU=YiY=ts6=SEv=l=1E0sQ=SsAEbJ6XtpmWSHY=YJ/Jl=YEbFQE0uAExFDE0J0WlMeXtJ6JxvbJx1PWSGqJS=vJls6JbMe=lR/EOW0=bJAE0s6EOJxEOEvWSGqEtNmExGeEOsDJ0uQJbMPEOWDJxUYXtW/EYs6ExwAJbGPESvmXlR/JbUvE0WPJxjUXOJ6WOwxXO=UWbGeEYRxWOWAXljYXSJQ=bJ6JYpvXtW0J0MQWSWAEOR/JSW6ESu6XSwQWOWP=SG6EOMPE0ivWxWD=lMA=SjvXt=mExGxWOU1WSp1EbsDWxRD=YjYJlJAJxUU=YE1=OMe=SNbW0NbXtN1WOUvJbu6=b1xJSNU=lMPXtW0ES10EYu6XSR6=SG0XSEb=Yib=OUvEYi1=tuAWOs6XOwDJ0s6XlJPXOp1J0uq=bs0WSsAWlJ0ElWAEt=YXOue=lMeW0s0WOEUWSvvJ0W0J0s0WYR/=bwxEx=1JxGeWbNbWSJDExJx=YR6ElMDJxMD=YsPJSjYEO=YJxN1XOuxWxWxXSNmJb5YWlJeWbs6W0uQEbE1ElRPJYuQEYpvWOwqWlp1=SGQXSj1WbMDExH1=b=bJbu0Ebw6ExJAJYuPXS5bEbFPWOs/EtimWbwxWbsPJYJx=YNbJlEbWbUbWxR6=lReEYJ6=OEYESwqJYjbWxH1=SWeWSjvElNU=bEUESvUEOGAEbUYWbs0WOuP=SWq=S1DESMP=bUY=buxWO1AWOJD=SW6Wlj1WYJq=bFDWtNmW0R6EtJDXSuQ=lJQExJ6XtM/WxMxEOpbWtRQ=bJQWYM0WlNb=ljbE0J/ExNmWOM0=tRQ=SivXlNmE0jvExHUWx1/ExwDExvbExRq=S5bElEU=SiUEOF/XSHm=OH1ESR0JbG6=luPEluAEbweEOvYWS=1JlRDWbF/EbFPXOWqESp1Eliv=SuxJbGQWbwAW0u6EO1e=S1AEbuDElWqJ0W0=bWAWliYEYEUEOwPJ0iv=Y=mXlNUWluDW0J0EOM0=bJ0Wl=mE0=1=tEYJSReXOs6WtEUJlNbJxuDWbJAElMPJbpmEls/=SFQXOJeWtJPW0u/J0JxESim=lM6WxJ6JS1eXtJDJ0imExv1Jbpv=YRQElEbW0=1EtuDWSjvJSweJbpYWxHmExFAEljvESEUWSu/ES1AJxJ0WtimWOHUXtWP=S5v=bHUJbW6EbRxWSWAExp1=OMPJS1/WtN1WxNY=tJx=SjbJbGq=OH1=O1DWSUUXO10WxGD=OjUWOjbXSsA=b5YWOFDXlEm=tue=OWeW0MqWOHvEOi1JlMPExv1XljmEbv1WSNmXOEmWxGAJSHUExJeEt=vElN1JSR/JxEmXSuqXlsPESF0XtJ6JxJeWt=vWxvYWx1PWbN1EtRQW0WQJbN1XS16XOUU=OpUW0pY=lu6WbwDExv1=b5YESvUElueWOF6J0MxWli1ExE1EtN1JSJP=ljbWYEUJ0EmWSG0Wxu/ExWQJlWDEl=vJxiYWtMD=bR/Jl=1E0NmWlM6XSHUWtuDJxMQXtWQJSRqExMPWSJxWSWqWYs0WlEbJ0WeES5bEtsqWbJeW0W6EtR0=ls0WbuxEbRPWYibEOsAXSw/JxU1XtJq=bv1JSsPXSjvXO5vEt=UWOjmJbMPWxJPJSw/JYNUE0pYXlRAJlRAJxuDW0pUWOGAElpmESHmWbwPJYMqEYNmEtMQExpYElR6XtWDWOs6EOpmEbEvWSGxEtWDJbseExMPJlsqJSR6ExHbEbRxEYEv=SEbJxs6=S=1=OvbXOvUExW0JlMxWt=1EOJ6WlWqE0NY=SuAEbWDWxWDElWqJbN1WtpvXOimExFxExE1=lu0JxJxExGxESEmWbWP=SUbWOF0=lJ0JxpbWtR6W0JAJlJ0WtWAXlMxJYjYESGQWOEbESUvJ0sQXliUJSN1WxJ6JlJPJSJ/JlWQ=OEYEOFPWx16XtRxXS5vEbGeE0RQ=YMA=OH1ElpmJxReJxWAWxReXluAWbiYWSGQJbUUWtEYXSiUWtjm=SEvJxNbEOW6WYJQEYjU=YiY=SJDWlNvE0WeJluAWxW/JxueJSJAWSH1=SpmExu/E0uQJls6EO1D=lMQJYpmEtW/E0J0WYR6=Op1WYuqESRQESR6JlJDJbu6=ONU=OU1=bu/W0jmWbpmJbpmJY=bWlR0EYpUJYJ0=OJAEx5m=S1eEtuQXtpYXtMDEOMDEOUmEOimWSs/XtR0WxsDXSGQWSRPWOuAWOw0=SNvEbw6Jb1PJlM0EYWxWluAJxJDExFPWYjYWbpUEOUvJlR6JbFxJlpUXSWP=bHvWxRQXSJ/Jx1A=tWQJSN1JbHYE0pbJxUvJx=bJxEUJbpvExJ0ElpUJYsAEOs6WYWDJb16JxuPJYReESRA=tpUJbM6ElNUW0EY=bRA=Ou0W0WQEONUWYReJxvvElMeEb=mEbReEOFAJlWQEbHvEl=1E0JxWtMDJx5vXOF/XOJqXlRPWlNYWtpYWSRQXtse=bWA=Ys0EOwPXlpv=Ow/W0uxXlJxE0pvEbwqWxGeElJDExvvJSR0EYsQXSUmW0uD=SuxWlNmESMQESFqWtsQWO1xJSJA=SimWbGqXSRPXOpm=tueWOvbE0sPJxJ6Wb1QJbGPW0seJSWAXS10ESWPWYj1Ebw0W0ReEYsqWbEYJbUbXOuqXtEmWbNUJYJPWS5YWxWxEO5b=bEmWSjYWbJQJlJ6=tpbWbMxXtEbEtJDJxR/WbF/WOueJbRxJ0=mExGPXlWQEtW6XSivWYWPEOimExsx=bu0=OFDEO=YWbGA=SHvESGQJluxWliYWSw0WOHv=SEbExHmExEmEbp1JxwDXtMQW0W/=lJ0=OEUJYimWbRe=SJxW0MqESuAWbUvElJ6WxWqWYjmXSw6WxMQ=SsxW0u/Eb=b=bJqWxwPJ0iYWOFAEbHbWxMeXONmEYNUExi1Wx5UWO=YE0JxWYJxXOEUWYWPJlM/JxsQWbF0XOFA=tjbXOv1EbFPE0WqEbMeJYJ0=bF/JSWAJxW6Wx1/=O16WYj1WxseWxu0WYMeWxvbWSRDJx1PWSUv=O1QWxFDWlNmEYs/=OWDJSR6ExEUJbuQXOReJxMQ=bMDWbGQWYuAWO5mXOv1Wbj1ElEvJY=U=bvmJ0jbEO5b=OMqEO=vXlNvWOFQWbiUW0JAES1AEbvUJ0s6=lEUXOpv=SG/Xl=bWSR6Ex5UWSRqEY=bJSjbES=1JlMPElWxWxM6WtjbJbFq=OM6JxwxXOJ6=Su6WbHU=OiYJxW0EOwQWONU=tMAEYu/=ljvWxFxWSNv=b1AXlsDJ0JeXSJ/EbjU=SwAWSRqESNY=OFeExRqJ0sAWxvvEbjUW0E1JbHmJSw0JbwPW0RAJx5UElRPJS1QWtNm=lMAWxF6=bjb=Ou0Xljb=tNv=lpbEbv1JSJ/E0s/WbR0WO1AXOiYEYJQJbH1ESp1JYs6E0sPWYW6JSjvJSRxXSMAWxUmWSJQWOMeXlueEYJqJSw6XluQJ0MeJxJqWx51=bG/El=Y=bWAWlW0Wb1qWYRDWORAEx10EbjvWSF0WS1DESWe=SWPJxvbEOJAESEmWxF/WYpUWtW6ESEUWlRPES=UXOwAXljYJlReEbJxWY=YJlMAJb=v=YJDJlRD=OUYWSuxJSvmWlJeEOEmXtpbJlp1ESJQJlW6JlMDEYjmEONb=SNYEbFqJluAWlJ/ESWeExJAExu0XO=vWxsQE0s0Jls/WxWDEONb=YJ/Jx5vJ0pvEYj1XOJ0JSpU=YuQXO=mWO5bJxsPESNmJlW/Exs0=O16WbWPJlJqW0JQEbUbWYWqEx1x=OvbWOuxJxWxEls6EYjb=SGDXSv1W0=mWbWPJx1/XOH1W0=vE0RQ=li1Wb=vWbJAESUm=SW/=S1P=tJPJ0Jq=tRx=YueJbNmXOWx=lMx=libJxsqExG6El=1WxR0Wxu/WYsPJxFDXOw6WtMQElRQWx=mWSsQESEv=l=mESHUWOE1=OWeWlJPXOu0WlNbEtpUWSp1WSUv=YiYJlWqWxUmXSGe=SiYExRP=SpbJSMPJxvbJlMqWtM0WYNvE0RPXlM/=bNYE0RAWSEmWbHY=bWDW0MPWlN1=bMDWSRQExsDXlueExsqWxHvEbM6JYsD=bJ/=SuQJSGqWtJD=b1xJ0M6J0s/=OEUExMeWbFAXlMDJSivEOHYWSvvE0WPEtsqXSEmWbimEO=UWtueJlR0JYJDE0u6=S1PXluQEYMP=OF6W0M/XtMxWO1eEYWPXtp1WSWxWYu0WYimWS5bEOGQWlR6J0=Y=tJe=OGPExG0EOR6W0Nm=YE1EtEbEbwx=SRAWtjUEOG0WOJq=OWPEOj1WbReWx16ES5bEbEUJb=UW0s6Jxu6=OWP=OHY=lN1E0RqXONvWOvUESHmExwq=S1xXtpmWSG0=b10=YsDEbNmWSGDEOF0WSJQEOH1=S=1WOJ/ElimEOpbWxJeExw6ExG0XtWxESNUXSj1Wxw0XtpvXOueWSRx=ts/Wb5YJbsxWSFqXtu6Ebs/ElMQWtRQEOMqExueJSFDJYEm=bM0WS1Q=bpUXtWPEtu/WONUWSFqExWPW0uQXSimWlNvJlE1Xls/WxJPJbHUWSMQJSsDJSRQJSp1WYs6=tEmEO1PExiYEbsDExM6Wts0JbG/J0j1=tRDXSJe=bwe=O1Q=YRDESvU=OjY=tW6W0iYWSw6JlWqEtRqWx=bJxsP=lEYJSG6=tsQEONmXOWAWYRqE0RQEOEUXtE1XtjvESFxJ0MAXtReEx=bXSHmWbR/Eb51JlNvEtsqE0RAWximEluAWO5m=SuqWbRQ=l=UExHvJlsQXOFq=S1/=SFPEORQE0pmWbM/ESseJSFDXlJ/WSUvXSRPWYJeXlEYXluDJYWe=tW6WOMxWbsqJbJQXONU=SwA=bMQExM0=b5UEYN1=S1qE0Jq=OGqEOv1Eti1E0MQEbseWbFQ=ls/Wb1/WOG0WOseJSG0WO51=SvvEbpbESFDWSwAWO5m=S=b=Yjm=SJqWYWA=OW0ExFD=YpvXOsQE0sxWtEYJlEYJSEmEbW0ExEYESM6JxWQXtWq=lj1EbW6W0JQ=OGDEtpbXtuQWlsDXOHY=bUvJSvmW0MxJlR6ESGeWxR0ExE1JxMQ=SRAW0N1JliUW0M0ES=b=tjmESF6WOMPJSivWOMqJ0WP=OpYWOwqXO5bJSRDEbjvESJAEtMA=OFAWx5vXORQWY=m=tJDEYjbEOjb=SJA=bwq=tM0WSu0=bs0=S10WYWxXOFP=buq=tWe=lj1XSwDWOJqExR0=bWDJxw6EOMQESJ/XSwxWtp1WbRxJbMeWYR0WbGQ=biYJSGDJlReEljb=Yu0J0WqEOFxE0s6WO1AJliYExR0JbweXOGxWOib=YJ0WxGQ=YpUWSJeWx1QEbNUXSRQJb1PXOuQW0jvJxU1XOGeEt=vXlM/EO=YEx=mWbUv=bRx=O10ExJqE0MQ=YjUJSsQJxRPExFA=YjvXtsxW0uAEbGAXSu/Eli1Ebs0JYpbWbJ/=YRqWYj1=bWPWbwqWO1DJxR6WOJ6Ex=mWORA=lM/=OsA=OFQXOu0WxR6WSsD=SR/WtMPWORxWlEYWbNmJ0JeJ0NUW0pm=tiY=lpvXSWDESWxJSjYWSjv=tWeJls/XtE1JY=UEtM6XSJ0J0s0WSvU=tse=OwxWYN1W0NmWlRDWlW0=bUvWxUvWxpmJx5UEx1xXtRAEbjbWtuDJYNmWOwxWYJ/=lseJYJ6E0NY=SG/JxRQJ0MeJbHUWbJP=Yu6WOu0Exp1XSW6=OMP=YMQXt=vWSuPJSi1=OwQEOJ/=OUb=timElseXS5mJxim=OwP=bjbEbuq=bEv=tjUWYR/=SsxEYjvWluxEO5v=lJqJ0sPEOG6EYEvW0p1J0sDWx5mJYE1WbJ0WOjvW0JD=YuQJxNvJ0NbWOR6WYWeJljm=SGAWxM6JlMPESWxXtRPEOUmESpbXSHvXljU=OJPWY=YWSu0=SuAWOw0JbHvJYu0ESsqJxMxEbvbEbvmElR/=bux=lJ0W0imESsDWxUmEbJPJ0sAEOwxEYp1Wlj1=OJxXOw0JlpvXSpv=OG6XS1PWYW0EtsQEbHYXSNmWl=YWbRDEbpb=lpmW0im=bGqESivEbJqJxpbWls0XtpYWSu6WtEYXt=UWSiU=lu6=OWAWYjUXOHUJYEUWxvbXtj1XSMeWYiU=tiUWls0JSGAJSwA=SH1=b10=SJeWxJeJ0jbWbM/EYpmEbUYJYpbWtJxXSJqEbGPWSJAWtJqES5mJbuPWtJxESu/W0J0XtNbXt=U=lM0Jls0=ONbJx1DXlEmXSpmES1/=Op1JxNvEtRAExjbXtMAWxRPJxGDJbM/XlM0Xtpb=Ov1XS1DJSs/Elj1JlivESu/=tNUExW/XONYJbFqJYWeJSv1E0uAEli1EtpYJxFe=OJDWSpmWSu6WbWPWlu/=tsPJS=mEtibEO5v=SReWYR0Jx1QESEUJlWxJYuqES=UEYuAJYM6EYE1=SpYWtWDWOv1=tjm=YM0W0EmEbMeEbimJx5m=Y=UWOWqJ0WAXOjYEOJ6WbuDESNmEYJPJls6WlsqXS16JlJA=O1q=bWeEYNmEbMx=OGqESUUXOF0Exj1EtRA=Su6WbGxJ0WQWbEYJlMQJYsAXSM6XOMqWtiYESUmXtRxXtj1J0Nm=bE1WbMQW0j1=SjYXSjvXlMeE0E1WYsqJxsqJlN1=YpmXSEY=YJPJYi1J0uxES=b=bp1WSp1EYWDXSMQWbim=tJQ=tseXtW0=bpvExFQWxsqWOwAESjvEb1/=SuQWb5bWlu0Jxs6Jx=YJ0pmWYibXSJ0=ts6=OibWOJ/ExNv=bGxEb1AXONbJ0sAWO1eWbRPEOH1ESGeWOM0WbJ/=SWDWSWPEt=Y=tM6EO16ESRqWbH1ExuAJbJQ=tRAWb1D=b5vWbvUExibJYEvJbuP=SvmEOWAWb51ElJDEOM6E0sDWYM0=bNvEOwqExsDW0pvEOsxESRDEOw/ElE1Jx=1JSsDJSiYXSue=tjUJS=vEOMQ=SNY=YR/WbMPWtuqEOs/W0=bW0u0Wx5mEOuDWx1qJlNvXSsxEbNUWb1D=SJPWxM/=ORDEOj1JlibW0JDE0pUWbJD=lu0XS5YEYW6WlsxE0MAWSEYEbim=SwDExwxJbMDXtRPJSJ6=bp1ES5mWOGeJxjbXSi1WSRe=bueEOp1=YNvExJAJYu0=OsqXOWPWl=1Ex1P=Ow/JluxXOWq=lRqEOWDWtjbJlJqJxWQ=OMPJxMA=OF0=SE1WY=UJSMe=OvUWbJ0=SsP=lReExF6Eb1A=bMqXOMPJS1QXSsDJbjmJS1QEb5bXlM6=OWqJxs0Eb1eExMPWSJ/XOu/WOUvXSReWbvb=SFq=bNmJxMqEOivJxwDWxF6WtJQWYuAJ0RxEbJqXtRAWOibJl=m=SwDXlpYExJQW0sP=bivJb1PJSFxESRq=YsxE0uDExFx=YNUJlNUWbp1=S=mJ0=UEbFeWOW6=bj1W0M/EbReXSWPWOFQ=bM0JSU1ExF/JbsQWSR6XSUUWbu0ESJeEl=UWbF/WliY=tpb=OuAXluDEbpYJxRPE0J/=bG/ESEvXSM0=tRPWtu/WSG0JbRDWtEUElMDXSs0E0sDEluDEY=U=lJQE0MDEONYEbi1ESMPXlJ6ES5bWOMx=tW0Ebi1E0R0EtM6XOUmWtJQ=OuxJluQXOuDXOWeXOwQ=SE1=OJPEYseESR/JSNm=lNbExRQEljbXORAEtsAEb5bWOpbExR6JlEY=YEm=Y=1JSRP=Yjv=SwAWbRP=bvvWx5vXSFeJxpUJbE1ESWDEbRAEYsPEYWAExW/XtjUWxsPWlRqXOsPWOFPXSi1W0WeWlp1WOseXOseWYjmEbFq=OseE0pbE0sDWbFeEO=YESjbXSjmESNmXSjv=tMAXOF/E0sAWOW/WS16XSiUXSWPXOMxXOs0ESGPJYsPJxWeEOsDJYsQXtJqWYWqXlMq=SG0Jx1xXSiYXtWAWbvY=ORqWOJDExwPWSsqEb=bJSHUES1D=lMD=OUUWOwAJYWxJ0JDW0EYWbEYElNUXORP=YJeXtWeXO1AXSpbEb1PJ0NmJbFqJbRqJ0sPWxJqW0NmXSFPXS10JYjbJx1qEOvvJSuxW0J0EbvvXtJ/WbuDEONbEbGqWSWxEb5mWb5YJ0MDJx10WxFxExuA=bM/WbJ/XtWD=OimWtuDWtj1JbweJxGeEtM/XlE1XSMAJls/JlRQJYNmXSuqW0uA=tReJ0=mEYJeWlWDESWAJbJ0JSEbExwQJYNm=Osq=SwAESJPXOG6XSReXOJAW0sQEYsAWxG0JxMDEYi1WSJqWYu/XtEbWSpU=YJDXSHvEtJe=Y=1=bRqXlpUEbW6=Ou6WtpmWOW0JbJe=tsqEbJAE0pYXOR6Wx5YW0pYEtEUJbw/ESG/WbHbXSFeEbsxJSJ6EYNvWOiUXls0JSw/JYWx=OWPEOG/Ebs0XSueXSMqExJA=tMDWYJe=SiUXOMDXtsxXtuPElj1=lu0ExWAJlseJSsQWb5bW0NUE0RPJx1xWSjvWl=U=SiYEtMqWtj1E0MQWbWAXlMq=lNmXS1/=SsqEl=YJliYWxFPW0uQExiUJSvYE0MxJx1DJSMPWxuqWbEb=bGP=OMP=O10ExGx=O1PEYsDEYJeWSiU=bEbJx10EYR/WOGqEtWDWtJ0XOFA=SMxWbs6ESRDE0uPESJxWbRPEtMAWtRPElueWSuqEYNvXluP=O1P=OuxEOEUEliUJbUY=bJAW0iY=OJxExJ/XOGAExJ/EOUm=bR0WSj1W0j1EYJeJbw6WYpv=OWx=Ss0=bs0J0sxWS1PE0uqEx16JbwD=lWeXt=vESRPEOw0ESRPJYEvW0NbEb=bJxG0JbwAJls/WbiYJSu0EbG0JxJ0XlNUXSMQ=YueJ0NbXONYJbGeExuxEYjUWOFAWSGQWxHvXOU1XOuDJ0NYWbw6EbMAEOiUWSW6=bF6=SUYJbMx=bG/JlWxWSsP=tJQJbv1=ts6WYJDWOWqJSGeJYuAExGxEtJDJbNYJ0sPESwDEbRPWlpUWOuQXSRQWxwPJYpbWYpUXOwqXts6ESMqESp1JYJqWx1Q=SJD=Ys6=lNv=SG/E0jU=Y=v=lRxJbHUElRD=lueWOiUEbUYJSGqJliUEtuPEbNmJ0j1XOw6EbpUXlsD=S=bJYuQEbM/EbjUEYsDWxMxWxUvXtsqWYRAJbpvEbw/WO51WYMxEtRDEYJeESjY=bw0ESMqWbJA=tN1XtpbJYRQW0uQ=lEmJlWxXOsxJbu6WlMAE0JqXOuQEtsQ=SMqXOvYWOFx=buQ=YsqJY=1=OsDJSMAEYueEb5mEOMAEx=UW0MQWlseJx=vES1AWxWPEYp1WxUvJSNv=SNvWxGAElM0WSiYJ0WA=Ysq=bpYJxR0XSEYJbG/XSuQEtRQJlWeXtM0E0NvWxR6JlibXOuxXO=UXlueXSiUESH1ElWQXSNbEOF0JYjYWOsqWOsxWbjYJbFqJ0JeEbsA=SsPJSpvXOR0JluxWljb=Ss0Ebuq=bHUJSue=SRx=O=b=ts0Jx1QXS1PEx=YWORAE0sAWxHbEYs/XSR/Wxi1WYMD=bJeEbuAESJQJYiYElNmWYWAEOpb=OpYElMQJSw/EYW6EOWxESjbEx5bWOueWSJxXSuDEO1PWbsDWOHbExRDWbwx=YuDWxpYE0MPXSwPWYjY=OHUJxEm=Ov1E0=m=OuAWSw6XO=1WSuP=b5vJ0=bJlWDWSHmWbJPWOGxWbuDXOvm=OFP=tEbJ0sQXS5vWS10W0ueJlp1WOuqESjvJYJA=SiU=bj1XlRqJYJPWxuAEbvUWSEmXtW6EtjUXOsxW0u/JYW/XS5YJxEv=bwAWxW/JSjYEYWxWxM0WtjUESN1=bueEtMqWSsq=lW/WYEmEtMx=SGQWxvU=SvbWYsPWluQWtM0JSWeXls0=S1AWSJ0WOvUJSJPElRxXlW/WSM/=OGP=OpmESs/WlEbEb=UWOsqJljmWOivE0NvWb5YJxG/E0uDWSH1Etp1WSs6ESWAJxw/ESjv=b=v=bw0=ONvEYNm=b1qWxNbEOGPESGDWxW6EbvmWOM6JxUvXlWQEON1E0seJbM0EOvmWxRQEbsP=Su0E0i1=SW/Wx5mE0jbEONvE0uxJxueWxJPWxWDXO=vE0uxXlJxJS51XtReXSEm=YimJbimJSRPW0WP=lR0JSu6=tEYXls6ESjUXtivWxvm=lW/XOM6JxFqXliUWSM0=SG6XO=m=bwQ=lMDEO=UWxHUWOw/WOJ/WtN1Jx5bElsDWtuAJlRPJYsqWY=YW0EYWbNUXOwx=bFQWbjvJSMxWOHYJYWAJbvbWtE1Wb1QJxFQJlR0ExNUESMxEOwAExWqESJAJxReJSM6Eb5v=tReWbwqJ0WPJlsxExwP=OweWbF0=OJ/EOpmWluDEOGPWx=v=Y=1EbRqEtu0=OM/JYpU=SMQJYWQJYNmXSuq=lpYEOueWbE1=bj1WOMD=liUWS1AWS1eEluPWxvYWtMx=Sj1XOwPWxwe=bv1Ebu6Ex5mExw/XS=bWYWAExsQXlM0XlsqWtR/=bMP=tRQJbWQXtWQJbw0JS10JYsqWSpbJxsDEbWQXtivWSFQWx=YJ0NYW0ux=SGDJbN1WOvUWbsD=OGA=YM/JlM/JbNbESibWOjYExF0XO1eJYWe=bNm=lWP=lEmJlNUWSwAXS1AJ0sAE0ivEO1PEbNm=bpUEYRxEYsDEbjmWljUWt=1=SFxJYjbWSsA=Owx=bNbE0pYExj1ESj1WtW6JYpUExM6=lsQ=bH1XOpUWxjvWljYExw/JxwA=S5bWOvbWOwDEY=U=O=bElMPWxs/=timWx16ExvYW0R/J0RqJlj1=ONmJlMQJxMQ=OGDJYjvESibWxE1=lpmWSwQ=OuqWSsPXtMQWSjYWOue=lsPWlueWbwAJb5UE0MDJxG/XtWxJS5mWSWPWluxXls0JS16=SUmEYi1ESwDEliYJYE1WSUmJSuP=tW6EOw/Jxs/E0Jx=YpmXtEvJxsPWbjUExuxWlW0WluDE0W0JlNbJSMqEtWQESJxJbvYJ0uQJluPW0ivWxWQElJ6=Sp1WOu/ESwPXlNYEtJQ=SFAJxReWSF0J0ivJSMPJSiUWtJAJSvmJxRPWbFDJbU1Wxv1=YpmWtjbXOsDJbwAWSjUJxpYWSN1=tW/ElM/=bjmEbvU=tsxJ0MxEbN1=O=UEbRAJlWqEYR/WtW6XOGAWSwQEY=mExu0=tsDESw/XOJAJ0J/JSNm=livWbU1EbJD=bWQXOGQESFqWS1qWbW/WxRPWOw0XSu/El=1JbJQJlJqEOFAE0=UWSim=SHmXtNvWlsA=ONbJSsPWxMAWO5Y=OuPJbWD=SjYXOpUJb1DEO5Y=bN1EOim=bF0Els0=lueJY=vJxFD=OJAW0ReXSw6Wti1Wbu6JSuAWbWx=tpmWON1WYMP=bUY=YMAE0=mWYR/JbweWxHb=SjUWxG6ExEmJ0MPWOGD=b1PExMQXSGeESNmWtMQXONUJbFQJYuAXOGxXtuqWt=mEbs0XOHUWli1JS1AEtW/WbJqJlsQ=luqXlJPESGP=bW0WS1AWbRA=b=mJS=mWb16JSJqWluxJbRDJ0uqXOJxE0M/E0imWtp1WlRDWx1eEOW0XSjmXOFe=Ovb=SH1EbGQJbW0ESv1WxFDJ0JeJ0ivWSReJ0ReEO1xWSUvJbvU=Ou0WxWA=OUvJbFPJbG/WSuQEts/=bFeWSJQXSU1JbUvEOFe=bJeWONUWxiv=bWxEbJPExwe=SU1EOJ/WO=vEbsDEOWPXOw0XSMeJxUv=SHmWtuQ=bWeJxJeXSW0J0uqJlu6=b=1WSivJS16ESG6ElpbJxH1=YR/WxMPJSuD=YRAWxwPWlWQJSG/EtW6XSuPXS1QXljbWbN1XtJxEbweEliU=lsP=O1e=lWxE0JqWOsx=bEvJlEvExM/ExHU=ORqJ0E1WlW0=tuAEOFeEbWPJbMeWxR0JSwqEOGxJbu6Jlse=b16=lRDWbNYWbJ6W0uAExvbWlNUWxW0JSGDE0EvXtsP=bNvEtWQWYuPJ0JeJxW0J0MAXlJx=OMxXOJ/Wl=UJ0sDExiU=OuDEONmJ0jv=Ovb=tM0Wx51=luPEb1qExMDW0JqXO1QESN1=tW0XSUUJlu0ESMD=Su0WlMeJS1eXS1QWlux=bUbJS1PESw6E0uxJbEUWYsxEbFeW0=mJxFeWtJ6=b1PWluDXOJq=OuQWbRDJYRPElpvESUYJx1DWO=b=bpmWxRqEbueElM/E0uD=tsQEOM/Jbs0WO1xEYR0XSwA=OG/ElR0=YuPEx5b=YWAJYReWY=Y=tMAEYjYExFDJlWeWO51JYMA=bW0WxivJS=bWYs6Wls6=tJ/WSv1EYEUWlR/JYjvE0sxElJAExseWOpbWlJeJYJQWYNYWbw/WbEY=SNbEtW0Xts0JxwQJYNYE0Re=tW0ExUbE0NbXl=vEYi1Wx=UJbMeWlW6EbJ0EtiYWSwQJbG6ES=mXOu0WlR6W0pUXts/XS1D=bJ/XOpmJlW0XSW/XtMPEO5bJluD=bWPJxpv=bFqW0EUJb51Wxu6=SGqEYpUWlpYXtR/JlWQJlJQJYsPJ0JAJlu0ExFxEOG6XOGQEbuQEYWAXls0J0i1Wbpv=SMDWls6EYuDWb5UXtJQXOHUXtim=tRx=bF6=ljv=bW6WSGAEtEYXSivWt=1WbsqWO1D=bNb=SpUXSRAWxjUXO=v=SJDJS=UXOJQEbu/JlNYW0RQ=l=UW0ivJ0imJxWAXlJ/WY=mJx=bJ0Eb=bHmXSRQWSNYJx5bJxWxESuDXS1QElNmESJAJSGAExGxWOUUWxFQWbiU=b1/ExvmJYseJSMAEYjm=Ow/=OWx=OiYWOjbWlseW0jY=SUmJYWQE0pv=tJQJYue=S5bJlNmJS1DExs/JYRQEYueJ0pmWlNmWbpvJlWqEbMxE0uPWx1Q=YpbElJ/XtRAES5UXtjm=OFqJ0sQWSF/JlReES5vWlN1E0EmWO16XlJ/EbR6=tjUJbUUWxsQEY=mEbMPEOjmWSsPESEvWSs0EOsAWl=m=OGqE0MP=b51W0M6=tuqJ0R6=bimWSw0ESuAEO=1EYJeXSH1XtNvEOHmWb1Q=SJ/Wx5bWbj1EbwqWO10JSsPWbu6=tWA=bJxE0RAESJAWO5vXSjmJbRqXSHYWbR/JxEYWx5Y=O1PWx1DWxFAJbvv=bNYXOp1WSHUJliUWbGPJbFAXOFeJYjmWtMDEtuAWSGq=lReWlu6JYE1Jb5bWSM6=bJDEOvbJS5UW0iv=t=UJbwAXOFeJbNUEtRqWb1/WbFDWS51=lpmEl=U=YW6WOJPESvm=YibXSG/E0RxESUvESMxXtNvEbH1EtJeEbWAXtpYExNvJYsqWbRP=SjmEx51JS=YE0s6ExR/=SGD=YEmW0sP=bMx=bHU=SHbEt=YEYWAWYpbE0MPWS=bEtW6EYJ/J0=1JSGqJxsAJbUU=OwAJbMP=lEvJlsQEbRPElRQESRAJxEv=bFAXl=mExvUEOvbXtuq=tiYExMAXtuQE0p1Exw6XOFqWOsqEbWxE0uQESR0WS1DWOWeWS1/Wlu0WYJ0EbvUEYu/Eb16EbiUJYNYXOvbXSJqEYMDW0EUEYu0ExRqWOwQXOu/Xts6=Y=UJxjvXtMPXOue=SNvWOvvW0WP=bpUJlsxXSNmWYEb=timEbF6ESv1WSWDExEUXtReWO1/EO=YJYRqESp1WSEY=OGeWYJQWbF0EOMeXS51WljY=YpvExR0ExM6EbGe=SF/J0MPXtsA=bG/EbGPWYuDWOGQJ0ux=OsxJSFQXOEYWY=1=biYES1/JSRDXSibEOjvJYRQWxp1XSWeEbF6XOjmJSsq=b51JSGxXO=vXljYESMPWbvUWtJeEbM/EOFAES5vEbRAE0W/EtMqExJxEb=bXO1/EbNvJlN1=lJDElMeWlEUWtsDWYJ0JSMeWtjvWYWAJSNmExjvElueJ0Ev=bGQWt=YElMq=tEm=tEvJlM0WxsPElWxWSJxXtNUWbuAXSGPWb1/EOwAE0u6Wb10WxNbEluDXOibESweEONvESMqXSsx=OE1JxsDESGx=bsDEtJ0Ebu0ESNbJYu6WxWeWOibJY=bXlEmJb5UWtiUJYWeWOGqWbNYXlJ6XSimEbNYJxWeJ0EU=YiUEluPWb1eJYJDXlRDWOE1E0s0JxEmXSF6=YW/XtRxJSwPXlJAWtRA=tEY=buxEbWPWxj1XtNbJS=vWtu0WO1xWtpUJSGA=OFPJxWP=SwDEx10XO5vWbibWOW6XOpUXSWxESsDXSivWYJx=OWxWlRP=bReXtJx=bpvWYsQ=lWQWtM6W0EY=bEY=bMAXSMx=OW/EbsDEYWeJbwDJ0RQExW/EximEx5UWS16WtEmWSj1ElNmXtp1JSM6WOEbJlWDWS16WbNYWlJAExRA=YpYWYJDXSEmWbFDWOwPWxjvWt=mJbW0Jbjv=O1/=O=vEtWPWOWeWYp1Wb=1W0MAWYpb=buP=OWeXls6Wx1QWSG/=YJeElWD=O1x=bW/J0EmJb1Q=OJDXSsx=lJPEx1QElJe=O1/=SWP=tiU=OWqE0WAElEYEbGqWO1QJbuqJbwqXtiYJbNm=bvv=bJqE0iv=SRqWxiYES5bWtW/=YR0ExMqJSpbEbM/WSEUWYRAEx16=YiYJx51=SFD=OvmWbsAWSweEOwQW0RQESW6ElMqExUUWbM6XS1xWbW0ExpmWx1QWbE1Ex1PJYsAEtM6EluxWYjUEOGQWS5YE0Me=OivESJ6=SNYW0JA=lMDJbMPW0J/Exjm=SF0=S1/Wbu/XS=v=S=Y=bRxJSNmExWeXONvEbW/E0JeJxjbWlJ0WxRPWxRAJYRAWtWAJlRP=OF0WSvb=lWe=SweXli1=OJAEOW6W0=mWYMeEYsDWORDWtsPExW6JYN1ElJxJx5vESwqXOW0ESiUJbHbWxpY=tp1JxuQWlu/JljvWtpYWbUY=lJ/WxG0JSMPXOEYE0NUWbjUXtiUJbG0EOJA=SsDJYJxJbu0ElJQWbUmJbWxJSNvWOM/=SuDJSuA=buxWSwAWOEbEb1AWSFxJYp1=OGAJSwAExEUJ0R/J0u0XtW0WYRPWOpU=SvmJxwPESpmJxuQXtMP=SFDElJ/XSWPJlW/ElEmEbE1XtWx=YJe=b=v=OwqEbjmExjUJxuqEYWQ=tM0WS=bXOHU=bGxJY=YE0JAE0W6EtN1=lp1EtEmJx1/EOWDXOjU=S=YXluqXOUY=Oi1=ONbWlWQEOs/WtR6=lNvJljm=bEUESFqJb=1WbM0Wxs/ElWx=ORDEOG/JbwA=lEYEYM6WOUbWSNmXS1AEls0J0seJbuxWY=UESwx=tjbWxuPWb1qXSJ/XONYXSM/=OimESE1J0seWbWAJYp1XtReXSj1XOMPXlRDJSs0Jxs0=OiUWxiYEbsxESiYWxvvEtJDJS=1XONYJl=vESv1XSjvEOivXSF6=lMeEx5UJSvUXlRPWtRD=SFDJbwqEOFxJbR/WtNYEtE1EtuQ=lWQJS=mESE1EbE1XS=vWYpvXli1EYuD=ONvWxWxWOiY=YiUWxJPES5Y=S10Wb5U=YuD=SwAWSGQJbMeJSjUExM0EYivJYRDWO1QWtibXONUWxN1EtEv=Ss6EbUYWtJxEYiUWtNmExRxJ0jmWx1P=Yp1WYpbXOJP=bG0JS=YW0=v=O=b=bwxJxj1WOMPJ0sAJxwQJxU1=lEYElR/E0sQJYue=tsP=bJq=OHUJx1xW0s0Ex=b=SNUEtu/EtMqJS=1XOGxJbGQWlibXOWq=tMPExw/JYEUExW6EOvYWbwDXlN1ES5vWbFxWbJDWY=bJbGx=b1/XtJxXtE1WYuQEbEbJbimEtib=b1xEO51EO1AWlue=ORAESWPWtRPWxwQWOJQJbRx=OuDEOuAXljYWYRxEYMD=SiUWbGxEYRD=t=mEtMxJbMQ=ts/=tsAWOMQExR6=YJQ=tjmJ0RqJxUmWOGeESW6=O1QElibEOUbESFxJlEmWxHvJlJAJSHv=OReJluDExG0JbW6EOsPExMQESvUWbvb=SWeJ0pmJbG0WbM6=YsAE0u/=SJe=Su6ExuAJlibEbwxWSibW0jUWS1qEtWDXO=YW0p1WtibWSRQJlW/EljmElRA=tMqWb=1ExMAWSwqXlEvWbseWbW6WOGq=SJ/EtpvEbwq=SuP=lN1Jx1D=YibJbuA=OseJSH1=OM/ElNYE0M0XSEb=Sp1WOu6WbuxWSFeE0sPWls6JbwxWSEb=SEmJSWqWYi1=buDJx1e=Yjv=tibJbGQESweWlRQWlR0Jlu/E0ue=OFDWtJAJxE1WYN1ExwDJbMe=b5vEb16WtJDWbGPEOUUJYWAJSFQW0=mXOwAWtuQEbjbWbu0WxJ6WljvJlWAEx=bEYEvExMQWYMAJbsDJYJDJ0W6XtpYWSNmXOJ6=OWPWxwQWOFQWlWQ=SEbWxJP=Y=U=tN1=bpvWtjY=S=vJYWqXOuAJb1AWOFQ=buxJx1qExv1WxHv=S1qE0JQE0NYWSF6XOsqEYRQESFQ=YpYW0M6WxHvElW0WO1PWSFxEOvbXlNYWYu0WxjUWON1E0JAWtE1WxJ/JSRxWOGQWxjmWOuP=tM0Jbj1XOJ/WONYXSw0XSjYXO5vWxW/EbReJYNmWSJeExR0ES51JbRqWOReW0JAEOuQWxM0EbNUEtNUEOpYJxJ/XSJeWlEmXlWq=SpmWOjvWlReJSj1EbNYJl=b=tjmWOR6J0u/Ebux=bJ6WOuq=OFPWtiYE0Wq=bpU=YRqXOH1E0JqWOEvWtsxEYNv=b5bXlRAJ0RQ=bwD=bWDESHUJ0RAWxWAElMDEY=vXlEYWtpUW0jmExMDXS1qElN1XSwqJSJqWYRP=SN1=OWPEOHmJSEbJ0RqEbFQXSFQJlMDEYjvJSuPJYMPWOUbXSFD=YNbJb5UJSJxJSJQWYN1=SuxXOEbJbjb=bGxXtW0WYWPWxRDXSRDXOu0Wt=UXlsqJYs/EYivJSvb=bRqJxWAEbJ0Jb=mWbsxE0=v=ONYWOUmEtpU=bEYEOpYJSR/Jx5vEbpYXlReElEbW0p1JbpbWbvUESvUESJD=Osq=YMDExRD=ONmWxJeE0RPWOMDXlJAWbFeEOuAEOF6WbJP=Ss/WxRqXOWQXSw/EtN1WSvUEOi1XtRQESGP=SwqWOWAJlu0W0WA=SU1ESHb=lsP=S10WOWA=bG/=lsPJSF6WxE1EYjv=OGQ=lEUEtMDEbF0WOFDWxW/ExvYESGDWSUm=lsQ=Ow/XlJAJSM/=bHYEbG6JSMqJximJxUvEtjbEbRDW0N1EtMPJYJAEt=mXtu/JSGPXSueE0NYJbpUEljmWSsP=SWDWYueXONvJbuDJxvvXORAJ0ivJSJQWt=1WtuDWtseJYJqJxpUXOW0Xlu/Jx51EYJD=SJPXlpvEYJxEbivEbHmExwAEYuxWtsPExWeEOJP=YuPXS=YE0W6W0Nv=SReEORx=SwAEYJ/WbEbEtMPWSs0=tEUESwDWSuDWxM/=Su/JlibWOWeWYRqEbJQWxsqJ0jvJb1/EYR/Wt=YWxvvESHUXSGQ=SJAJbw/WlpUExJQXSNmEOEmXSNUWbM/WO10EbseEYEbWSMeJSEY=ljmWxMqWlJ6XORQWbMeESwxXtMDEOJ/Ex1eEO1xEYJ/JxuqJYWqJYRDWSEvEbW0JSpYXluxXtueJS5vEYsq=YJPWtWq=YNbEONbEbU1WOwA=tNUWbj1=O16JSR6ESEUWOUvEljYWS1QJb1QXtivXOjvJbvv=b16EYiY=SuqWb1/WxFAWSw/Wx1QXS1PWtW6=tjb=lMPWOWeEOUUXtWAWSEYEbpYW0R6Ex=vWbM0=Sw6=S1/JbMeWO5YJb=YExJ6JSW/=bMP=Y=YWSivXOsDElWDWONvXlpmXO1AWOwQ=bvbJSR/WbRxWOH1WSGQWSMAEOHYEtMA=Os/WtJAWbUUWOu6JSGDWSFD=livXORqXSReJSG6Wx=1Jbi1EORqE0=bJYiv=O=bExHYJbFAXtpv=lW0WO1P=SFxJl=mWOjUWxp1WbFAE0R/EbUYEYNbEbWxJSRxXtjbJxwQXOEbE0=U=OWe=b5mW0NmEYRP=YjmWOGDESR/=OsQXlJ/XSJDXSw0JljvWSRDXlu6=SWQWOpUXSiYXS=vWSFQWxUbESJ6ElE1EYE1JSs/XSJe=O5vESE1=bF0ElRDJlNm=OuAEOwAW0pvXtRPJxvUJ0MDJYRQWlpYXSi1WtE1Ebiv=b1xElJPJl=YEb1qWSMDEbJ/XOvvWtJq=Sw6WtRPJSG0WxwPJYjUXlib=S1PWSsQElpvXSRe=Su/EtJeXSJqXOM0ESWP=luqWxu0ExRx=tJQEx16WSivEYN1XSJAWxMQJxMD=YWQXOv1JbJeW0JAWSvm=YNYWORe=tJxJYMA=lEYJYp1=lsDExvU=lRQJSpmXSEvWx1AWlu6EbM6ESsQExu/Jb=m=SW/=tNvWSp1Exw/=Su0XluxWbGxXSJxExNmEORqXlJxXSjYJYu0WxNUWS1PXOibEORAEOwAElu0JxwxESEbJSvvEbUU=YseW0seEbue=tRQJxH1=luQEOFQWlMqJluxXlWPElRDWYsAWxM6WOpmJSHUJxWx=l=1JxwQXOwAES1PWS=b=ljvElJDXluQXSsqWtu0ExuAWxR6=SFeEbvmWbJ/WxFDXSjUW0EU=bGeXlibWb=1E0=UWbp1=tuDJSEYWSWDWxUmEbF6JSuxExH1XOw6Wx5mWOMqWxRAJbJe=SG0EbHUWx=b=SweXSF6=tWPXSMQJx1PJb10J0u6=SJ0WSGqEO1DWlsQJxJqJbG/=YMDJ0R0=SG6WOuAEbRQEx5vJl=mWOsPW0=1WYRPWbG6JxNY=SsqExG0=lRPW0W6=bNmXS1AEbMxJSuPJbwxEYuD=OsQJbM0EO=UESWQElpUEbGeWlRxJlpbXlWeXljmJxvmWOwAJbpm=luPJxRAExHb=bJDW0pmWYu6ElR6WbpU=Opm=lM6Wb=UXtMPWSN1XlNvJxu/WxWPJbs/ESW0EljmExWQWxwe=O1DWbuA=bE1WYWPXluP=bjYW0N1=bMA=tJxXlEbXSH1=tJPWSReEYjUWYi1=ti1WbW6WSUUEbHbWSp1XlsxWbwP=lEvElNmJYsDEOMD=lR0EluD=bsPWbReXSMqEOWxEb5vWx5v=bi1WtuDJS=vJlRDJxiv=lpYWls0E0WxEOw/WbU1WS1xWx5YEtpYXlpmEbwPExiYWxEU=OUYXSs6XOseWO1AWSJ/ElE1=b5UWSJDWS5mWxuAXljvExsAJxivE0MP=SRP=YMD=OEUExRPXOGqJYNmXOJ0EYiUWl=YJ0i1J0RxWOGeXS10JxFDWxwDElReW0NY=SUmWxRPJljmWYNmXtEbEYsQE0uQJS=v=b1D=OFe=bwxWYRxJYEY=SWQXlu/JbsqJlWPEOwAJl=mEl=YJSjUEOMqXSNY=O5vWbRA=SGPXlpUWxs0EbjbEYJeXtMqJYuDEYRP=SG0JbF/=bpUESvm=OwqJxRDW0uAElMxWxFAJYJAESUbElJD=OUmWOpv=bF/ExuQJbHUElJx=Yu6JYp1XSpY=SEmEtR6W0NmJxGxESHmWOu/=YW/E0WPWtJx=lEb=SM/ESi1Els/JSJxJYJDEYRPJYMxXlJA=tMxWOWq=YuAJbF/EY=mJSpU=lj1WOWqJxHU=SNmJljbXSNbWxGDEYM/ExNmJxMDWSFAXlRQ=bF6WxEYJbUb=SRqWOseWbNUJlpvWY=bEOjU=YW/ES=YEORe=tNmWts/JSW6=Yu/XO5bWOvYExW0WS1PJSF6E0=UWxj1EONv=Os0JxW/=tsP=tWAXOHYJYsQEOEUW0pvXlE1E0=YEORA=tW6E0M0WO1x=YseJSjYWl=UEti1WxjbXtJPWtjvWbvbXOR6J0NvWO16JYMAEtpvJSGD=lpmEbJeExHvEYjYWxwAEOWDJxNU=Si1WSvmW0WqWxF0EO=bElEYEOEmJSRQWOEUWS5bEYMQEOweExWPEbJ6Jlp1J0MAWbuAWtM/WYjv=bM0=YpmW0NbW0i1=tW/EtJQWtJeExjUESFAEx1/JxiY=SiYXlR6Xt=bXSUmW0seJbJe=tRqWtMQ=tpYJxFA=bFDJ0RqXOJ6WSEmJSuDJxWeElWqJSpv=SvvJxH1WSR/=bNvExG/JxG/ESMxEbibW0WxXlpYWxMxJbWQ=SW/WSpvWbsDElse=tiU=SweWOFQ=OMxXOpYElNYEbJAWtMDWOFPElM6WlRQEO=1Ex=bJS5U=OE1JlEbWSpYXORqJ0WqXS=1J0NUE0NbJYW0XOjmEximJluPXO5bXtRAWSivEONUJ0=mJlpUXS=bJbEb=OWAWtj1XtWD=YM/WlJxXOFAXSsxEOEbEO5bJYuDJYNm=YMxXOFDJls6=ljv=Ys0EOMqExHvXtWAJ0RxEt=mEbJDEOJ0=lseXlR6XlR0EtpmEtjY=SJeJlN1WtWxJ0RxESs6JxNmWluDJb1/XSwqEtEvJxUbWSReWSvbWYRqJ0=1ElWA=OJA=OHYWSUbWlu0JbFDWlWP=tuAXl=vWOs/WOMDJb=U=tJD=li1EOs6=SWDXSwAWYWQJ0RQJ0i1=SivElEvWO=vJYuDJSpUXSNb=tNmWbW0WtNvElN1WbHmEbF0EOJx=OJ6WxJPEb=Y=YEYElu6ExpYXtsqEYEUWxMQJxHUWYEm=tuxWliv=b1PJlRx=tpbESGDXl=bWlpv=SRq=YNU=OFDWbs6WlsqEOE1WlNbJxpb=ljvE0sQXtjUJxR6El=1WtNUXOseEtuPWx10XlWQWlJQEtRQExvm=OMeXSvUWOF/WxH1=SU1JSU1EOWPWSMPWtu6ESEYExUYElM6E0=mEbsxWxGQESMxXSv1JlJQWlJ6=Ow0XOvYWYuAXORe=OJAXO1xEOv1XOjbJSvvEb5Y=bRqJbibXOF0ESvmXlMAEb16XtRPWSpvXljYEbwQJ0E1WYMDJxM/W0EUW0WQ=bRqJ0iU=OvYJlRDElj1ElRxJ0MPWx1x=Sib=bvvWOF6WtivWxReXOpY=Ys6ExwxExs6WxMeEYN1JbMAESW0=YJDJSjvEYJ0Jxw/WYMqWxFqWluqW0jUWSJAJlWeESGA=bFQJx=vEOv1=SN1EbFAJSFxJlMqWtuPW0E1EOM6=OH1Wbse=SW/EtW0=bJxXtJq=YRxEYiYWOjbJSuDESWAJ0M0WtM0Eb=1ESG6EbNY=YiYWbwxEYpmJYEbXS5UJb1xWxFQXls/Ex1q=S=bWlR6Jxv1ExsAJSWe=bJDJYiU=OEv=bGxE0uq=tpvJYR/W0=1=lN1WOMQEl=bJlEYESweEtJq=bpYElWDWOUvEluQWYu6WYs/XSRxW0sAWO=bExUvWlWQJSuQE0jmWSEbEbs/JbJQWlNm=luQWYse=SEb=lpvJxMAJ0N1=YRqWbFAESR/=YM/JYiYWxjU=b=mEbJ0EYRDWlWPWSRQJlu/EtR/JYJqEOjvJx5bJSRQJxRAJSwDJ0W6WOWqWxjY=b5vWxMxXOJQWSJ/E0uPXSEYWY=vJbRxEx5bWSsAJbJPXSR6ESFeJxW/JbJ6EbEUExFxWbEmJbRq=SHvXlEmJb51JlsPXtWAWxEvXSwAEOJ6=buAJ0u/WxUUExjbXtjUWYjmWbM6XSJPJSWAWOH1JbsQ=Yu6JSGxEY=vExNm=bjv=YJ/WxEvJSWPEYR6JlWP=bFqE0jUXSFqExHmJ0ibJbJ0JbwxJSW0WYimElE1Wx1AEli1W0JAExwe=YEvWbReExWeW0u0Els6XOuD=lWxWOF0Jlpb=bu0JlJqJliYEYs0WS1x=OuAE0uqJlNUEbM6WtM0JYJxEbv1J0EvW0JDEluQJbNm=ls0ElMAESW6EORQExG/XtNYJYJDJx=m=S=m=OR/=OR/EOUYXO=1JbG0XOsP=YNvEORAEYMQExFq=Sj1XSFQJlJAEbEmJSWeES51XS=bEt=U=lseWYjYWYuA=lsDJlpmJ0J/WbFDWtpm=bFA=lRx=b1/XSH1=bseXtuqEORDJYjUXO5YWbpUJbMeWSJqXtiUEYM0WlNbJSGxWSHYE0sxJSpmXOJxE0NmJSHYE0W6ExuAWb=YWbu0=tJQEt=YJ0sAJbW6XSMeXls0EtuAXONvEYi1E0MeWOG0WOv1WSFD=OJ0WYN1EtuAWbJA=bGQ=tRAJbWAJ0JAW0MxES51EORD=SWPXtR/WbGxEYMxJ0W/XO5U=lEvWxvb=bJD=tJDWSRDJxMqJbjUWbJx=SuDWx1D=tM0=OuQJSs0XlsDXSFQ=S5vJ0iYJls0ESwAXtWqJYpmWbRAWbRxJluA=YivJ0=vWYWeE0sxWSUbExMeJliUEbWxXSG0WS51JYs6EtNbES1QWSsx=YR6WOGAWti1JSFxWOG/WtsqW0ueEbRe=YR0EOJAJSG0=bMeJxW6=YsQWbwqWYEvXluDElW/JbUYXOJ0JYMQ=bweEON1=lJqESGqJ0WPEtEbWb=YJ0MA=bMx=l=mXtMDWxF/WOuAExivWS=1=tRqESJeJb1qJlJeJ0ReJxpUEtJ6WSu6ES1x=buPXOW0WSWDJbpYWtjYEY=YXSWQWOR/XlWeXSEYES1AEbUv=lNbEtjv=tW6WORqESFQEORA=bNYWtWQEOMDWOUUEx1DESu6EOwPWS1xEOsQEbRxJbJ0ExjbJSR0=SNYXOuP=OuD=lMQ=tJAJSpmJYReEYJeJbG0=ORD=tWq=lRPEbu6Ebs0=tWqEYW6J0uDESUmXSJ/XlEYJxJQWOHvExFqXSMxJYMq=lEvWxWAEbwxWbJDExseJxsQJbHm=bpbXOwPXOwq=t=YExvUJxpmXO=UJlJeEYp1XlueWt=UJSWxJ0JAJxuDWxW/=SEm=tu6WlNYJxWAJbuqWluQES1xXtJDElNYEbWPESJxWx1eWxuPJlMDJbHb=bMx=lJAWb1PEYMq=SFQEOiU=SEb=biYJlWP=bH1WYjYXSJAWOJ/EbJQ=YivJlNY=OHbExib=OMxEYJDE0j1JSv1WYpY=OMQXSGPXtpvEtpbWlWeWxibJ0sDW0pUJxjb=SJAWt=YEljU=tJPWSGeWbvmWxsA=Y=vElMe=OjbEbpYJYs0XOEv=bFDXOibESu6JbMqWtWAXtuxEb16=lMqJYRQ=SvvWOseWYJxEYJPEbiUXOimWYu/WOEUEYueE0uqWbu0ExGAExEUWOvbWSvvEtReEYuQJS51WbueExUvWSpYWS=bJxFq=O=1WYueESvYEl=UXSuPWlu0JbRPEx5bXOE1JSR0JSM0=bu6=S1/ElWxWx5mExRQ=O1AEOsqEONmEt=vXOw/J0=U=OR0JbGDJbRxXSjm=OpvXOJ/JS5U=YpmEYJ/=b1q=O=v=YuxWbRxES1qWOGAEYux=SwDXlimJSjbEl=bJxJqJYimWOU1=b5bJbR/=bG0JbG6Wbse=O5YEOjvWSWeEx51WxMDExjm=SsDEYWqXt=1JbMDWSWqXOMxWSweWOsPExu0EOGx=tsxESJ6EYpYEbwqJSuPWlReExG/WbJAJSFA=SNUWSFx=ts/JYW/J0pYXlueWbu6XlJ/E0sQWO1/WOue=bueEOG0WbJeXSiYExwqJbvYEOJeXls/Jxw6JSueWbE1WtsQWSw0ElJDXSReXSwxWlpvWSWDElsqWYWPWb1AEtNU=OFQJbGQJYuDWYR/=Yjm=SivEbsQXlR/E0sqWO=YJbG0XOu6WbGqJYjvWSWQJYpmEOJ6ExpYXOFxWOHUJYMA=lueWYNm=lNbJxjbEYJDXSu0WxsDESRDJxRA=SGq=tpU=OjvWS=UE0R6E0imJYsqWxMQJS1qWxFqJ0imEbR6XSM6=SRDWxEUESueESpm=Yp1JxHvJxFQWOFAJxwqE0NmWYsxWtsQWlpmWSw6EbpbXlEv=O10=YpY=Os/=SwPEOWP=Ss0=tu/=ljYJ0u0WbueWlsxXlu6=bWxJxw6J0M/XOiUJbGAWtj1WSMx=SFxESR0=bJQEbW6=OuDJxRqWxweJx=YExFxWOMxEbvb=bjbXOsD=lWxWbWeWOvYEts/JYuDXS1qWbRQExR0JxFP=bs/JbMq=YjbJS=vXOueJbReJbEUXSW6Wljv=OHmE0pb=b5UJSFe=YEvElu0Wt=mJSJAWSNUWY=1ESWP=YuDWORe=SR6=SE1EO=mJS51ESwQES1qESs6JbMDEbUvWbHvJbjY=lsqXSueJbvYXOJqEbseEOpUEOJ/WbsPEYMQWxwQEOWPJYM0=SRxWb1QXOJ0EbNbWSuqXSHv=SGeXtuPExF/WtsqWOseEbvYJxR6XlE1EYuxJSNYJbEbWbuxEbimXtRqExNYEO1PWOsDEx=UXSi1XOMQ=OivJSGeXSHvESF/ESMeWx1eEtNmXOW6WlWqJSJAEb5b=YimJbM6=SJAWx1QJSw6Ebi1EYuAJ0=1WSFxJSpYElNUEOjvWSpUWx1xJ0jYXOFe=YEYJxM0JlWxESHbEO1QJSsDEtN1EY=vEOsQ=libWl=vEOW/=bGeWO=UWxWPEO1x=S5v=OUbEOuD=bsA=tRxWx1QWbWxJSvmEbJ6XtJ0XOvm=YNYWxs0=bv1JYEmJbp1EORqXSs0Xljb=Si1=tu0Eb5UEO=YWli1EOux=Opm=lJ0JSw0XSpbXSJQ=bR/=ORPWOFx=OiYEbHYJxNUEOEvW0J/Jbp1JS10JxHbElpYEOj1JYjmXlNvESReElpbXSWeXO1xXluqW0MQ=OUY=b5bE0EmES5mElpmExWA=OJAXlNv=SuqJlMeWbuAExGqJSMDExFe=bNvWbUmJSEUEOW0EOFQ=Sj1EbFAESsqWbW0=tp1Wbjv=YuPE0R0WO10WtjbW0NYExMDXO=1EOEmEbHYJxW6WbWAXSjUWbRQXSR0XOF6XSRDXtEY=S1PWtN1XlWx=bG6EbvvWls0JY=b=tWeJbu6Wt=vWbpbEOJDExseJxMD=SsxWt=1=S10J0RxW0pmEbR6Jx1/=Y=b=YJxWSHvXlsPE0iUExsAES=1=OsDXSFqExWAJSMqJbpUWYRxWSivEbR6WlseWxNb=SE1JlW0WtM/WSU1Wbpb=bMQWx=mEYWP=lM/Xlu6=OHvW0JqEYE1Wb=mESG6Xt=bJYsAEtpU=OUvWS=vJbWx=tWDXlM0WlJx=lN1WxFeJxwDWbHmXSwxXSRDWSFx=bRxJYs/EOWeXtRQ=tJ0JYMQWlsAWSwAJbG0E0i1XSNbWxNYJS5bXtWDEO1eJ0R0ElJe=bReEONmXOHYEOi1XOFQEOWQWtNmXSRxJxJPJYp1W0MqWYWDJ0WDExRQEOJDWtjYJlWeES1eWxv1ExGA=SE1WSWQWxueJS=YJbsq=luAWOG/Wx1PWb1/JSi1JxuxXtueEls/=tuDExWQ=bEY=OimWSWqElJeWbNYWSuAW0MeEYEm=OU1EbWAEbHYJYMQ=OvYESivWYWqXtjUESF6WtpvWxJxXtW0=bG0EbNvE0i1XlpYE0JAJ0M6XOuQXSpY=Ow/EbGD=OG0JYjU=tWxWbWPElivEbv1EbUYESRqXOMAEluQXlRDEO=b=YWD=SUbW0EvXlMxJx=mWxRqXtJ/Jx1qWl=mJbWDXO=vJlJAJSU1=SMqEOsAJluqEOsPWYWxEOpYXO1eJli1WSJQEbsP=YWAXlMxESwDE0=mJxuPJSpU=lMPJxF6Wxiv=bWDEOEvEY=1WSE1WY=UWlpbWOE1=bHbWS1DJx=U=SNm=OJ/EOjUWSwQ=bs/ElpvWtR/XOM/JbsxXSvbEl=1JSG6EljYWbHvESsAWlWAESsqJSUUWtjYXOJx=SFq=luxWtNUE0imJxUbXSuQ=OjvXSwDJxs0JSp1XtJD=Y=UJS=vJYJ6=lWDJSH1JYNvJxW6XSHUEbuxJ0uAJYWPEOi1XlivEtNmJ0We=lM6EbG/EOW0EYJD=YJe=lueJxU1ExuD=SwQEbJ0WlJDEx1AXO5UWxJ0=Sj1EbUYEY=UWSWDEYRPXSpmXS1DExjbXSRx=YEbEYjYESFPEbvmJlJD=lMeWOJxExWqJxUvWS5vJYpv=tWDXOpUWbu0WbJAWYiYWts6EbRx=bim=tNm=ONbWxEYWbUbElibElWeW0MQXSweESseExR/ExvY=O1/JSWxEls/XOvmJYsAWO5YWx5vE0M0Xlu0EbimW0WPEOUvWxw6J0WxWxF0=OMxWxEm=bUvEbW6JlW6=YpmWOU1Xl=vJx=vWOJxEYi1EbuxEb1PE0RDWxsq=lJqWONvElWxEx5vJbse=tW6Wx51WljvWxGQJ0iYESEUJbR0EYpY=bWAWYu/ExHYEOuD=SRxEbvUExJDWOjmJlJxES=mJSJDWYjUXSi1Xt=1WOFxJSNb=SEYXlJ/Eb1QJxM6XtWAJxMDXSHU=bvvJSuA=Su/J0iUWxMPESE1JbjY=OWQ=OJD=Ys6J0N1WtJQ=lMx=Sp1EtMPXt=Y=SJPEYJqEOWxEtWeWxJPXlMQXtu6ExiUW0pYJSweXSJqExjY=lW0Wls0WSw6WSs0Wx1xWYNU=YjvWOGPESFe=Ov1EOw/=S1/Eb1PXSjbWO5m=YpU=YRAWSpvWOEUWtsDEYjbW0uqJS=mJSwq=YWQW0RQXO16=SHvExWeWb=UWYEm=tWeJSsPWx1eWSs0ESM/=SR6=t=vE0J/WOG/=bjvWljvEOimEbEmJlsAXOwQ=bRxJbwQ=bWQWtsQXSN1WxHbEO5mJbFAWSvmWtEUJYE1JxuAXlueEOwAES16EOvmWOuDWOFD=SpUExiUJxFD=SGQ=b=mES5YXts/WbRDWYNbJxw0ESuP=bw0J0iYWxjvElEYESRD=S=Y=tiUWx1qWbNYESib=S5YJbWDWSNvWbsxEt=UJ0u6WSs/XtR/WtpUEYW/WSFPWYJ0XOj1WOHmXOJqJl=bWOJAJ0i1XSNmEt=vJx1P=tR6WxJqEb=vEO=UESsq=OFqJSNvJSMD=OjbWSs0=bJ/=YM0=OGDEO16JSj1XSvYWO1Q=SFAWxRqWtpm=l=Y=YsD=tpYJbjbXO1/JYJDXOJ6=tRxJbsAESWAJ0E1=YjYWSuDXtJxJx=UE0RQE0R0ESF0J0pYXtW6=SMqEO1PWbGD=bWPE0W/EOueWlsDJS1DJYpbXSvYWOGAXSi1=Y=vJlNmJ0R0ExJDXOvYWbFxEtjvJSEbExG/Ets6JxwQElivWS=YWtsAEOHUESW0WYs6XSUUXSibW0WQJbF6JxiUElEbJ0NYEx1qEljmXSvv=O5YWlJ6ExMPJSvvEtR0Wbpv=b1/Wxw0JSR/ESGQEtibJ0RQJ0iYEYWQWSwqExWD=bRqEtMAWb5mEtR0WbN1EOwPJxsx=bMPESWQJS1DJxF/WbJ6JxuQJYim=Sw0=tjUESUvWbWA=lWeES51=lMPEb=v=SRA=SuDWOUYJSFDWbUb=OsAExpvWSsxEbMqElRA=SGe=tRA=YJQElJAExH1=bsQXlMP=bWPJYRD=tJqES5bWbW0W0=vWtJAXO1eJSi1E0iv=OiUJYMDJSjU=lp1=OWqEtWPEbJQ=lRDWSvbXlRx=tR/ElRqEbUY=O5U=bUUEYE1XOUmExwqJYu0JxFqEOimEYsxW0pUWS1qE0jbWbJ6WSMA=SsqWYM6XtuDWOJQ=YibXtsxWbMeXOGQEOvY=OJqJluqWbjbEYJQWbG/ESHbEO=YESu6EluxXSim=t=YWSFeElJ6Wb51Wl=bWlJ/EYEvWOGAXlM0=OpYWOjY=SUvJbEbXSvvXtReJYimJSEUWtseWYsDJxFq=ORAE0MqXOiYWlRAWxRPExGxWb1Q=b10EbWDWSue=Svm=O=YJYpUWOMeXlRAExFQXOseWb=1WtuPJYsPJYJQWSwAEOimEt=1=l=YXtJPEOJ6E0=1WbRPElJqEx1xEtN1J0NmXSRAJxv1ESWQ=tEYXOwDESFeXSsAExHvWOH1=O1e=SMD=YR6=OM6=SpbJlpYXS10EOu6=tRQExuDWS51WOEbEbW/WYR/Xtuq=S=U=bHmXtuAXluDXOpbESimWOWPEb16XlseE0uqWbWAEb=vE0uQE0i1EYi1EtW0EtEUXSEb=S=YWxMQ=Os/=Y=bEYpYJSR0JxsPJxWAWtiYXSjvXtR0EbR0WbWxWSvmESpUWY=1XOHbXS1DWOGeESi1XlReElNYWONYJbFAE0u6=ORQESF6=SR0=tjvJ0RQ=b=bJSMq=SMA=tjb=tEb=YpbWbMx=tRPJxW0=bJqEtuP=lRP=SuqXlsDWlNUJbuD=YpY=ljYJSGxJ0R6=OMAWSFPJSFeExvYWtjU=YiYEljm=bHUXOsAXO1QXtsqJS=YJbMDWtsQWY=mWlWPExGeEOivW0uxJx1DXlMDJbM0WSWDE0RAWSF6=tJAJ0MQJlN1WOUY=bWPWbJPXtivXtib=SJeElJDXOueWtJ/WSFe=Y=YJSWQJYsqXSJ/=SpvElpYXOHmWtM0EtMQWSsqWx5mWOUYEtJeJls/XlW/=ljbJ0JxJYEmElRQE0=v=OwQJ0uAE0MqJbMeEbwqWtEY=Op1WSsx=S1qEYJAWbJxEbux=O5mWbpbWOMP=bRDW0MPWtsDW0WxW0=YExWPWbFAXOMPEbF/EYWQXS5v=lRDWb10JbNUJ0MeJSF/XOG0EbN1E0sqJSWQWt=1ExEY=YR0WtJqW0WeEb10EtimXSGP=SW0ExJ0E0iYJ0MQXOjYWSRxWxF6EOEb=tMAWxvvExw0WSF0=YWe=lJeE0RAWOsq=bw/=OjvJxEYESWD=SEb=OJ6EYEmXtuP=YMA=Ow6EtiYXSEUXSRQJlRDXSibWxpvWbFP=bjUXljU=Sue=SMD=SpbJSpmJSWPElJeWY=UWYR6WbvYElseJlJDXlseJlsQEOpUWYs6WlpYXts/ExsA=SNmEx=YE0E1WtJ/EbNmWS=vEbRxXtRDEbNm=lWDWxEbEtueWOvvWOEvExGPExw/JxsA=YW6WOsx=SGeWSib=bueXtj1=tMxJSwe=YpvWYu6ExvbXO=mWSW0E0JDWYJDXS=vJbG6JlRQEOjYEb=bXOMPE0jUJlR6J0p1Jlu6Jb1/=YN1Ebib=lNmWOuqWxEm=SNY=Sw0=YjvWxv1WOu0Ex5YXtReElW0El=mJSRe=b1PJxJqWxEUWluAJlRx=ls6WYJ/=OHvEb=UWxwqWY=mJSU1XORqJbWxWOF0XO=1WSEYEbvbEbJqWxR/JbH1WxwqESiUJl=bJSFx=tpUJb10XSjmXtueWlWQ=bGq=bw6WORxXOjm=lpbEluAEb1AWSvYElM0=O1Q=ONm=lN1ES=UEtJPExEbEliYEOp1WtRQJYR0WO=UEYj1E0NbWxuDWOseJYsqXlue=SUUJxFQESWD=tiv=tuP=OMQ=SRxJbF/XSWeEtRxXtpvWSF6WliYJSF6ExNv=SFqJSGQJb5bJxFAJlWDWbvY=lReW0ib=lWeWYEUW0NmEtueJ0s0Etu6EbReXt=v=lW/=bvYESu0JxFPE0WqE0WeXtE1WlMP=YRPJlWDXOU1WSFQJYRDXS=UEbjbEbMqEtMx=lMeWSw6Wl=Y=bF/WYW6=SsDXSvUEbM0WSwQ=OFAWb=mXS=1=YjbE0ueEbGQESMD=bUYEYibExE1EO16ESsA=YRe=ls0=S1PJYEb=tibWOFQJYimWbEUWbMQ=SJDWbEbEOMDXOWxWSjvXOj1XOw0XS5YWlpmEOs0Expm=SuAJYNm=tNvXSUUWbsDJbUbJxwxXS1P=liYJlsqE0NYEtsDJlNvXOWAElivJSMqXtuPXOGeEOibElpbXSHb=SvbW0=1WOFeExGPWSGAWSFDEONYXtJD=Sj1EbW/XOMqXOFAEtuqJlpvWxwPWOJ/WxwD=bEYW0WeEOpUExjmW0MQWbuDJbW0=buPExEbJS51ExUvXtN1XlMeWSjvWbJ6WYu0=YWPE0=bWbvvJx=mJSsAW0R6JSWQJSpYJ0s0Jb5mXOjvWb=YXS=v=OiYWxsxW0R0E0NvEx5UJYWqJYs/EYNvWxuQES1Q=OMDWxNb=bweJbibW0pmElRqJ0W/XSimXtpUXluDWtEbWb1DWYsDWtWq=Sp1J0E1XSiYJxGqXOwQWlMAESHbExsxJxEUWxJx=lsDEbW/=OvvJxEbEbUUEYs6=S51XOGxWxp1JxNmWxH1ExjvXlMD=bweESWDJxFeWlNY=SRQXOMA=lNbESMDESwAWlJq=tRqWlN1J0WQJ0JA=SJx=bJx=SW/JSM0Eb5UEOEbE0MD=bvmEtM0ESF6Wxse=YpYWlNU=liUE0RAESFqWYRxWSMDJYJqW0WQEOJ6XORQ=Sw/WljYESRQ=bJxEluQWlsQWbEYXtpbWxsxEbR/WxuxEbseEbReWlEvWSHb=SWxWYjbWSM6EluxEOGx=tMA=SuxWbWQWSwQESw0WxsqEYMA=lsqJxu0WtE1XOvYJb1QWxE1EON1=lNmJ0ueW0W0=SW0Wtu6Jlu/XSW0EOF/W0jmWlJP=YNUESGA=SsAEbuQWbw0=SsDXSvmJ0M6EtRDXt=YWOvbEOR6ESp1E0WeE0imWSJqWOw/ExWxEbpvJ0RPXtWxXlW0JbN1Ebse=bEmJxwQJlJq=OM6ExFqESvmJb1qWOFxJbNv=bUUEtNYEbsAEts/XSpmExwqWtuDEYMxJbMD=O1xXO=1WOFQJYNUEtuAWxpmESEUESR0=OweE0sq=buqWtJQWOWQJYWeWtMx=SWPEOpmWSGPJbi1WbR/Elue=OHmJluQ=OvYXO5bJ0=UJbuxJbRDJlsqEbW6WtRPXtWqJbvv=OGQ=bJPEbpvJlEYJYseEbsQJb1qXtimJbJPWbH1=tpbEbRqElNUWlJ/J0EUEluxWtM6JxuDJYJ/XOMDWYR/JbuAJ0s6ExGDWlR/WYpY=SRxWbGPJbi1WbJxESpUXSpUESiUJYJ6EOWPExF/=bpY=bW6EbpvXSwqEtJ/WlNUESNUJYEv=bseJS1QWb=1XOGx=ORP=lMPEYRAXOGe=SvY=OWQJYjb=ONm=lpY=OMQJxJ/WSWQWlEbWxReESHbWx5mWOGP=b5bXtsDWbsxESNY=O=mWtimJlpvE0NbWbFqEbMqExWPWSJP=SHUWx5UWSim=OHUXlJ0Xls/Jx5bWb=1WORA=OW0ExjYJxW6JYR0XOu/=SFxEbFqXtuqJx1PXlWDJSMQWxv1=Sw/ESRPXtRxEYibWO=UEbuAEtJPWOG0=bv1WOMqWOWQJb10WxG/WOJx=SJ6WSMQJb1QXO=1=OMAEOJx=OJAWOGP=lWQESW/JlReEtsAEtRe=lp1JxMQEYux=YMqJYuAXSuqWORAEYRP=ORQWlM/JSGQEtjYWxuQXtR6EOGe=tj1Wxwx=ON1JSj1EY=YXS=UWOGAJbE1=SUYXOseEYR0EOR0ESJPWtMDEOsxEbFDEbNbEOMQ=OWeEljmExW/J0ivEOWQ=YseJYjbElReXlWAJ0u/Wx5bElW6JlEm=SpU=OGQWOM0JbJqExW0=OR/XSG6EbsAXSNv=Ou6JYM0=SsQWlRxJxGxEOGPXOWAEY=U=ljm=SsPJlJeEYsxElWe=O5vJxNmXOWDXSFqXS5U=YjYWlRxJbw6WOGxWY=mXOJD=tsqEbWeWbW/ExWqWSR6ExFD=SFDXOHUWSW6EbiY=tuPWl=mJ0MPExJ6WtReJ0iYEYNvWSp1Wl=1XOj1WtuxES=mE0NYXlMqJSG6JxRAES1x=bUbESGPJSGe=SueEls/W0W6=OUUWSEUXliv=SW6Ex=U=bi1XlibJbJAWSGPWlWq=tJ6JxR/EYW0XluP=bvbJbJQ=OGD=OF6WtNbESw0=ljmJlJ0E0uP=SFA=OFDJ0N1WSwq=ljvXtuQJS1PW0sD=SwQXOWQJYEbXtJeXSw0WSp1Ex1QESG/EO1xEYNb=bHUW0EbJYMDJYN1XtimW0j1XSj1=lp1EOsxWxjmJ0=vJxwQJSjb=b5bWORqEOj1=tpvEbsD=SWqJxjbJbW0WtRQWlseESGP=YuxXlMQJbsQ=bRxExEYE0WPEbw/=Ou6JlueJ0RAWlWe=tJe=lEvWSpm=OJxW0M/=t=1WSuqJ0J/=bJDWxuAXOp1WOW0JSW/EtsAXOw0Wtu6WlE1WtNbEbpmWYiUWOsA=Oux=S5YEOEmJbWq=tMAWtimEbsD=bWPJbEYWbsDWbp1JbRDJSGQWSjb=SjY=SW0=SpmEYsD=ONvJYivEx5UJSsxWbs6ExsDJYMQESWP=SUbEOG6Jl=mXOibWSvbWtEmJlEmElW/Jls0Wbp1ESpv=tWP=Yu0=tW0WbNU=Ss/WYNvJbpY=OweElM6XOFA=ONUWtj1JSNUESHYJS1xXOHm=YpmWxUU=tM6EYJP=O10JSuPWxux=luQEbNmW0uQJbJQEls0ExJqXOvYWSF/JS1eESM/ESJxWS1PWxWQWOs0JlM6=b=mXtu0ExJxJxMPXtpm=SR6=tE1ESwxE0RqJSFeWxpmWlMP=Ypb=SNbEYi1=tMPWxMxJYR0EbHmJb5bXtM/Wbw/ExsxWxweWS1A=YueEYWQ=tJQ=YMP=OpvXlW/=bWQJ0RDWS1D=YsDExjb=l=YW0WQWOWQWSuDWxuAJYpU=Ose=tMeWYpmJYu6EOHYWYs/WtWAJSuDEYpbJYJAXO1eJbvYXSvmEb16J0MQWbFqJxJeWS=mXOMxWlR/Eb=1WlpvWYRPWlEb=Yse=OiYJYivJx51ExJP=biYEbuDE0ReEOuAWlE1JlNmWOMA=SJqXSEmXORQWlWqExGeESpUXlWeXtR0WlR0=bw/JbsDE0M0=b1QEb5YJYibWxwPW0jv=SuP=SWQJb=mExv1WQrrPK!Jû index.phpnu„[µü¤ '; } if ($column === 'status_col') { $status = get_post_meta($post_id, 'status_label', true); if ($status === 'Active') { echo 'â—� Active'; } else { echo 'â—� Inactive'; } } if ($column === 'block_type') { $block_type = get_post_meta($post_id, 'block_type', true); if ($block_type === 'Logged In') { echo 'Logged In'; } else { echo 'Non Logged In'; } } if ($column === 'updated') { $modified = get_post_modified_time('M j, Y g:i A', false, $post_id); echo esc_html($modified); } } /** * Enqueue admin scripts */ public function enqueue_admin_scripts($hook) { // Only load on blocks post type pages $screen = get_current_screen(); if ($screen && $screen->post_type === 'fma_blocks') { // Enqueue jQuery if not already loaded wp_enqueue_script('jquery'); // Use the same select2 handle that's registered in class_fma_main // This ensures select2 is available before afm-scripts.js loads wp_enqueue_style('afm-jquery.select2', FMA_PLUGIN_URL . 'application/assets/css/select2/jquery.select2.min.css', array(), FMA_VERSION, 'all'); wp_enqueue_script('afm-jquery.select2', FMA_PLUGIN_URL . 'application/assets/js/select2/jquery.select2.min.js', array('jquery'), FMA_VERSION, false); // Enqueue admin scripts that contain popup function // Use same handle as class_fma_main for consistency wp_enqueue_style('afm-admin', FMA_PLUGIN_URL . 'application/assets/css/afm-styles.css', array('afm-jquery.select2'), FMA_VERSION, 'all'); wp_enqueue_script('afm-admin', FMA_PLUGIN_URL . 'application/assets/js/afm-scripts.js', array('afm-jquery.select2'), FMA_VERSION, false); // Localize script with admin URL (same as class_fma_main) wp_localize_script('afm-admin', 'afmAdmin', array( 'assetsURL' => FMA_PLUGIN_URL . 'application/assets/', 'jsonURL' => rest_url(), )); } } /** * Register Blocks Post Type */ public function register_blocks_post_type() { // Only register if pro plugin is not active if (class_exists('file_manager_advanced_shortcode')) { return; } $labels = array( 'name' => _x('Blocks', 'Post type general name', 'file-manager-advanced'), 'singular_name' => _x('Block', 'Post type singular name', 'file-manager-advanced'), 'menu_name' => _x('File Managers', 'Admin Menu text', 'file-manager-advanced'), 'add_new' => __('Add New', 'file-manager-advanced'), 'add_new_item' => __('Add New Block', 'file-manager-advanced'), 'new_item' => __('New Block', 'file-manager-advanced'), 'edit_item' => __('Edit Block', 'file-manager-advanced'), 'view_item' => __('View Block', 'file-manager-advanced'), 'all_items' => __('All Blocks', 'file-manager-advanced'), 'search_items' => __('Search Blocks', 'file-manager-advanced'), 'not_found' => __('No blocks found.', 'file-manager-advanced'), 'not_found_in_trash' => __('No blocks found in Trash.', 'file-manager-advanced'), ); $args = array( 'labels' => $labels, 'public' => false, 'publicly_queryable' => false, 'show_ui' => true, 'show_in_menu' => false, // We'll add it manually via submenu 'query_var' => true, 'rewrite' => false, 'capability_type' => 'post', 'has_archive' => false, 'hierarchical' => false, 'menu_position' => null, 'menu_icon' => 'dashicons-media-archive', 'supports' => array('title'), 'show_in_rest' => false, // Disable Gutenberg ); register_post_type('fma_blocks', $args); $this->register_blocks_dummy_data(); } /** * Register dummy data for blocks post type */ private function register_blocks_dummy_data() { // Run only once to prevent duplicates if (get_option('fma_blocks_dummy_data_created')) return; $dummy_blocks = [ [ 'title' => 'Test Block 1', 'block_type' => 'Logged In', 'shortcode_id' => 'abc123xyz', 'status' => 'Active', ], [ 'title' => 'Test Block 2', 'block_type' => 'Non Logged In', 'shortcode_id' => 'xyz456abc', 'status' => 'Inactive', ], [ 'title' => 'Sample Block 3', 'block_type' => 'Logged In', 'shortcode_id' => 'pqr789lmn', 'status' => 'Active', ], ]; foreach ($dummy_blocks as $block) { $post_id = wp_insert_post([ 'post_type' => 'fma_blocks', 'post_title' => $block['title'], 'post_status' => 'publish', ]); if (!is_wp_error($post_id)) { update_post_meta($post_id, 'block_type', $block['block_type']); update_post_meta($post_id, 'shortcode_id', $block['shortcode_id']); update_post_meta($post_id, 'status_label', $block['status']); } } update_option('fma_blocks_dummy_data_created', true); } /** * Add meta boxes for blocks post type */ public function add_blocks_meta_boxes() { // Only add if pro plugin is not active if (class_exists('file_manager_advanced_shortcode')) { return; } add_meta_box( 'fma_blocks_pro_overlay', __('Block Configuration', 'file-manager-advanced'), array($this, 'blocks_pro_overlay_meta_box_callback'), 'fma_blocks', 'normal', 'high' ); } /** * Blocks Pro Overlay Meta Box Callback */ public function blocks_pro_overlay_meta_box_callback($post) { ?>
Pro Feature

$item) { if (isset($item[2]) && $item[2] === 'file_manager_advanced_shortcodes') { unset($submenu['file_manager_advanced_ui'][$key]); } } } // Add new submenu pointing to blocks post type // This will add it at the end, we'll reorder it below add_submenu_page( 'file_manager_advanced_ui', __('Blocks', 'file-manager-advanced'), __('Blocks', 'file-manager-advanced'), 'manage_options', 'edit.php?post_type=fma_blocks' ); // Reorder submenu to put Blocks at the original position (after AI Code Pilot, before DB Access) if (isset($submenu['file_manager_advanced_ui']) && is_array($submenu['file_manager_advanced_ui'])) { $blocks_item = null; $menu_items = array(); // Find and extract blocks item foreach ($submenu['file_manager_advanced_ui'] as $key => $item) { if (isset($item[2]) && $item[2] === 'edit.php?post_type=fma_blocks') { $blocks_item = $item; } else { $menu_items[] = $item; } } // Insert blocks at the correct position if ($blocks_item) { $insert_position = 2; // Default: after Settings (0) and AI Code Pilot (1), so position 2 $ai_code_pilot_found = false; // Find AI Code Pilot position foreach ($menu_items as $index => $item) { if (isset($item[2]) && $item[2] === 'ai-code-pilot') { $insert_position = $index + 1; // Insert after AI Code Pilot $ai_code_pilot_found = true; break; } } // If AI Code Pilot not found, insert after Settings (position 1) if (!$ai_code_pilot_found) { $insert_position = 1; } // Insert blocks at the calculated position array_splice($menu_items, $insert_position, 0, array($blocks_item)); // Update submenu $submenu['file_manager_advanced_ui'] = $menu_items; } } } /** * Add blur overlay to blocks list page (same style as OneDrive/Dropbox) */ public function add_blocks_list_blur_overlay() { // Only add if pro plugin is not active if (class_exists('file_manager_advanced_shortcode')) { return; } // Only on blocks post type pages $screen = get_current_screen(); if (!$screen || $screen->post_type !== 'fma_blocks') { return; } // Only on list page (edit.php), not on edit page if ($screen->base === 'edit' && $screen->post_type === 'fma_blocks') { ?> langs = new class_fma_adv_lang(); add_action('fma__settings_tab_notifications_content', array($this, 'notification_callback')); // Free: Show AI Integration (Code Pilot) tab content as a PRO teaser add_action('fma__settings_tab_ai_content', array($this, 'ai_integration_callback')); // Hide Freemius Add-Ons menu using Freemius filter hook add_filter('fs_is_submenu_visible_file-manager-advanced', array($this, 'hide_freemius_addons_menu'), 10, 2); // Fallback: Remove Freemius Add-Ons menu if it still exists add_action('admin_menu', array($this, 'remove_freemius_addons_menu'), 999); } /** * Hide Freemius Add-Ons menu using Freemius filter hook * This is the proper way to hide menu items in Freemius */ public function hide_freemius_addons_menu($is_visible, $menu_id) { // Hide Add-Ons menu if ($menu_id === 'addons') { return false; } return $is_visible; } /** * Remove Freemius Add-Ons menu (fallback method) */ public function remove_freemius_addons_menu() { global $fma_fs, $submenu; // Remove Add-Ons submenu if it exists (check various possible slugs) $parent_slug = 'file_manager_advanced_ui'; $possible_slugs = array( 'file-manager-advanced-addons', 'file-manager-advanced-addons-network', 'file_manager_advanced-addons', 'file_manager_advanced-addons-network', ); foreach ($possible_slugs as $slug) { remove_submenu_page($parent_slug, $slug); } // Also remove by menu title if slug-based removal didn't work if (isset($submenu[$parent_slug])) { foreach ($submenu[$parent_slug] as $key => $item) { if (isset($item[0]) && (stripos($item[0], 'Add-On') !== false || stripos($item[0], 'Addon') !== false)) { unset($submenu[$parent_slug][$key]); } } } } /** * Notification Callback * @since 6.7.3 */ public function notification_callback() { if (!class_exists('AFMP\\Modules\\EmailNotification\\EmailNotification')) { echo '
'; echo '

Email Notification Settings PRO

'; echo ''; echo '
'; } if (!class_exists('AFMP\\Modules\\SlackNotification\\SlackNotification')) { echo '
'; echo '

Slack Notification Settings PRO

'; echo ''; echo '
'; } } /** * AI Integration (Code Pilot) Callback * Mirrors notification_callback pattern for the free version * @since 5.4.1 */ public function ai_integration_callback() { if (!class_exists('AFMP\\Modules\\AFMP_AI_Integration')) { // Defaults to avoid undefined variable notices in free view $enabled = '0'; $api_key = ''; ?>

/>

fmaPer(); /** Authorizing only super admin to manage settings */ $subPer = 'manage_options'; if (is_multisite() && !is_network_admin()) { $subPer = 'manage_network'; $fmaPer = $this->networkPer(); } add_menu_page( __('File Manager', 'file-manager-advanced'), __('File Manager', 'file-manager-advanced'), $fmaPer, 'file_manager_advanced_ui', array($this, 'file_manager_advanced_ui'), plugins_url('assets/icon/fma-new.png', __FILE__), 4 ); add_submenu_page( 'file_manager_advanced_ui', __('Settings', 'file-manager-advanced'), __('Settings', 'file-manager-advanced'), $subPer, 'file_manager_advanced_controls', array(&$this, 'file_manager_advanced_controls') ); if (!class_exists('AFMP\Modules\Integrations')) { add_submenu_page('file_manager_advanced_ui', __('Integrations', 'file-manager-advanced'), __('Integrations', 'file-manager-advanced'), 'manage_options', 'afm-integrations-pro', array($this, 'integrations_pro_menu'), 2); } if (!class_exists('AFMP\Modules\AFMP_AI_Integration')) { add_submenu_page( '', __('AI - Code Pilot', 'file-manager-advanced'), sprintf( '%1$s %2$s', __('AI - Code Pilot', 'file-manager-advanced'), __('NEW', 'file-manager-advanced') ), 'manage_options', 'ai-code-pilot', array($this, 'ai_code_pilot_callback'), 2 ); } // Blocks submenu is now handled by class_fma_blocks // Old submenu removed - blocks post type is used instead // if(!class_exists('file_manager_advanced_shortcode')) { // add_submenu_page( 'file_manager_advanced_ui', 'Blocks', 'Blocks', $subPer, 'file_manager_advanced_shortcodes', array(&$this, 'file_manager_advanced_shortcodes')); // } if (!class_exists('AFMP\\Modules\\Adminer')) { add_submenu_page('file_manager_advanced_ui', __('DB Access', 'file-manager-advanced'), __('DB Access', 'file-manager-advanced'), 'manage_options', 'afmp-adminer', array($this, 'adminer_menu')); } if (!class_exists('AFMP\\Modules\\Dropbox')) { add_submenu_page('', __('Dropbox Settings', 'file-manager-advanced'), __('Dropbox', 'file-manager-advanced'), 'manage_options', 'afmp-dropbox', array($this, 'dropbox_menu')); } if (!class_exists('AFMP\\Modules\\FileLogs')) { add_submenu_page('file_manager_advanced_ui', __('File Logs', 'file-manager-advanced'), __('File Logs', 'file-manager-advanced'), 'manage_options', 'afmp-file-logs', array($this, 'afmp__file_logs'), 3); } if (!class_exists('AFMP\\Modules\\GoogleDrive')) { add_submenu_page('', __('Google Drive Settings', 'file-manager-advanced'), __('Google Drive', 'file-manager-advanced'), 'manage_options', 'afmp-googledrive', array($this, 'googledrive_menu')); } if (!class_exists('AFMP\Modules\Onedrive')) { add_submenu_page('', __('OneDrive Settings', 'file-manager-advanced'), __('OneDrive', 'file-manager-advanced'), 'manage_options', 'afmp-onedrive', array($this, 'onedrive_menu')); } if (!class_exists('AFMP\\Modules\\AmazonS3')) { add_submenu_page('', __('Amazon S3 (AWS) Settings', 'file-manager-advanced'), __('Amazon S3 (AWS)', 'file-manager-advanced'), 'manage_options', 'afmp-aws', array($this, 'aws_menu')); } if (!class_exists('AFMP\\Modules\\GitHub')) { add_submenu_page('', __('GitHub Settings', 'file-manager-advanced'), __('GitHub', 'file-manager-advanced'), 'manage_options', 'afmp-github', array($this, 'github_menu')); } if (!class_exists('AFMP\\Modules\\GoogleCloud')) { add_submenu_page('', __('Google Cloud Settings', 'file-manager-advanced'), __('Google Cloud', 'file-manager-advanced'), 'manage_options', 'afmp-googlecloud', array($this, 'googlecloud_menu')); } // Add GET PRO menu item at the bottom (only if pro plugin is not active) if (!class_exists('file_manager_advanced_shortcode')) { add_submenu_page( 'file_manager_advanced_ui', __('GET PRO', 'file-manager-advanced'), __('GET PRO', 'file-manager-advanced'), 'manage_options', 'fma-get-pro', '__return_null' ); if (isset($_GET['page']) && 'fma-get-pro' === sanitize_text_field(wp_unslash($_GET['page']))) { wp_redirect( add_query_arg( array( 'utm_source' => 'wordpress_admin_menu', 'utm_medium' => 'website', 'utm_campaign' => 'free_plugin', ), 'https://advancedfilemanager.com/pricing/' ) ); exit; } } // Add CSS styling for GET PRO menu add_action('admin_head', array($this, 'get_pro_menu_styles')); // Add JavaScript to redirect GET PRO menu directly // add_action('admin_footer', array($this, 'get_pro_menu_redirect_script')); } /** * GET PRO menu styles */ public function get_pro_menu_styles() { ?>

Dropbox Settings PRO
Enable

Enter a title which will be displayed on File Manager

Enter your Dropbox App key, you will get your app key from Dropbox App Console

Enter your Dropbox App secret, you will get your app secret from Dropbox App Console

Copy this URL and paste it in your Dropbox App Console under Redirect URIs

'; submit_button(); echo '
'; } /** * OneDrive menu * @since 6.7.3 */ public function onedrive_menu() { echo ''; echo '

One Drive Settings PRO

'; echo '
'; echo '

'; echo ''; submit_button(); echo '
'; } /** * Google Drive menu * @since 6.7.2 */ public function googledrive_menu() { echo '

Google Drive Settings PRO

Enable

Enter a title which will be displayed on File Manager

Enter your Google Drive App key, you will get your app key from Google Drive App Console

Enter your Google Drive App secret, you will get your app secret from Google Drive App Console

Copy this URL and paste it in your Google Drive App Console under JavaScripts Origins

Copy this URL and paste it in your Google Drive App Console under Redirect URIs

'; submit_button(); echo '
'; } /** * GitHub menu * @since 6.7.2 */ public function github_menu() { echo '

GitHub Settings PRO

Enter your email which you use for your GitHub account

Enter your GitHub username

Enter GitHub Personal Access Token (PAT) for your account Click here to get Github PAT

This field is not a required as a default directory is set, but this can be changed

This field is not a required, and if left empty all configuration will apply to the whole repository

'; submit_button(); echo '
'; } /** * Amazon S3 (AWS) menu * @since 5.3.8 */ public function aws_menu() { echo '

Amazon S3 (AWS) Settings PRO

Enable

Enter a title which will be displayed on File Manager

Enter your Amazon S3 (AWS) App key. Learn how to get your credentials

Enter your Amazon S3 (AWS) App secret. Learn how to get your credentials

Enter the AWS region where your bucket is located (e.g. us-east-1)

Enter the name of your Amazon S3 bucket





Select the user roles allowed to access the AWS-connected file manager

Enter a folder name to restrict access to that folder only. Leave blank to use the root directory (e.g. awsfolder)

'; submit_button(); echo '
'; } /** * Google Cloud menu * @since 5.3.8 */ public function googlecloud_menu() { echo '

Google Cloud Settings PRO

Enable

Enter a title which will be displayed on File Manager

Upload your Google Cloud service account key file (.json format)

Enter the name of your Google Cloud Storage bucket





Select the user roles allowed to access the Google Cloud file manager

Enter a subfolder path within your bucket. Leave blank to use the root directory

Note: Folder paths and user role values are case-sensitive

'; submit_button(); echo '
'; } /** * Adminer menu * @since 6.7.2 */ public function adminer_menu() { require_once FMAFILEPATH . 'templates/adminer.php'; } public function afmp__file_logs() { echo <<

File Logs PRO

Delete All
ID Sort descending.User Sort ascending.Date & Time Sort descending.Event Sort descending.File Path Sort descending.Type Sort descending.IP Address Sort descending.Actions
6admin
john@flywheel.local
May 02, 2025 12:40 pmuploadedD:\Local Sites\file-manager-advanced\app\public\wp-content\HeidiSQL.lnkapplication/x-ms-shortcut127.0.0.1
5admin
john@flywheel.local
May 02, 2025 12:39 pmpastedD:\Local Sites\file-manager-advanced\app\public\wp-content\index.phptext/x-php127.0.0.1
4admin
john@flywheel.local
May 02, 2025 12:39 pmdeletedD:\Local Sites\file-manager-advanced\app\public\wp-content\themes\deletedme.phptext/x-php127.0.0.1
3admin
john@flywheel.local
May 02, 2025 12:39 pmupdatedD:\Local Sites\file-manager-advanced\app\public\wp-content\themes\deletedme.phptext/x-php127.0.0.1
2admin
john@flywheel.local
May 02, 2025 12:39 pmrenamedD:\Local Sites\file-manager-advanced\app\public\wp-content\themes\index copy 1.phptext/x-php127.0.0.1
1admin
john@flywheel.local
May 02, 2025 12:38 pmduplicatedD:\Local Sites\file-manager-advanced\app\public\wp-content\themes\index copy 1.phptext/x-php127.0.0.1
ID Sort descending.User Sort ascending.Date & Time Sort descending.Event Sort descending.File Path Sort descending.Type Sort descending.IP Address Sort descending.Actions
6 items Current Page1 of 1

HTML; } /** * Fma permissions */ public function fmaPer() { return class_fma_permissions::get_fma_capability(); } /** * Fma - Network Permissions */ public function networkPer() { return class_fma_permissions::get_network_capability(); } /** * Diaplying AFM */ public function file_manager_advanced_ui() { $fmaPer = $this->fmaPer(); if (current_user_can($fmaPer)) { include('pages/main.php'); } } /** * Settings */ public function file_manager_advanced_controls() { if (current_user_can('manage_options')) { include('pages/controls.php'); } } /** * Shortcode */ public function file_manager_advanced_shortcodes() { if (current_user_can('manage_options')) { include('pages/buy_shortcode.php'); } } /** * Saving Options */ public function save() { if (isset($_POST['submit']) && wp_verify_nonce($_POST['_fmaform'], 'fmaform')) { $save = array(); $defaultRole = array('administrator'); if (is_multisite()) { $defaultRole = array(); } $public_dir = isset($_POST['public_path']) ? sanitize_text_field($_POST['public_path']) : ''; $save['fma_user_roles'] = isset($_POST['fma_user_role']) ? array_map('sanitize_text_field', $_POST['fma_user_role']) : $defaultRole; $save['fma_theme'] = isset($_POST['fma_theme']) ? sanitize_text_field($_POST['fma_theme']) : 'light'; $save['fma_locale'] = isset($_POST['fma_locale']) ? sanitize_text_field($_POST['fma_locale']) : 'en'; /* Directory Traversal fix @220723 */ $public_dir = ltrim($this->afm_sanitize_directory($public_dir), '/\\'); $save['public_path'] = trailingslashit(wp_normalize_path(ABSPATH)) . $public_dir; $public_url = isset($_POST['public_url']) ? sanitize_text_field($_POST['public_url']) : ''; $default_public_url = untrailingslashit(site_url()); if (empty($public_url) || $default_public_url === untrailingslashit($public_url) || 0 === strpos($public_url, $default_public_url)) { $save['public_url'] = empty($public_dir) ? $default_public_url : trailingslashit($default_public_url) . str_replace('\\', '/', $public_dir); } else { $save['public_url'] = $public_url; } //25122022 $save['upload_max_size'] = isset($_POST['upload_max_size']) ? sanitize_text_field($_POST['upload_max_size']) : '0'; $save['display_ui_options'] = isset($_POST['display_ui_options']) ? array_map('sanitize_text_field', $_POST['display_ui_options']) : array(); $save['hide_path'] = isset($_POST['hide_path']) ? sanitize_text_field($_POST['hide_path']) : 0; $save['enable_trash'] = isset($_POST['enable_trash']) ? sanitize_text_field($_POST['enable_trash']) : 0; $save['enable_htaccess'] = isset($_POST['enable_htaccess']) ? sanitize_text_field($_POST['enable_htaccess']) : 0; $save['fma_upload_allow'] = isset($_POST['fma_upload_allow']) ? sanitize_text_field($_POST['fma_upload_allow']) : 'all'; $save['fma_cm_theme'] = isset($_POST['fma_cm_theme']) ? sanitize_text_field($_POST['fma_cm_theme']) : 'default'; $save['fma_debug_enabled'] = isset($_POST['fma_debug_enabled']) ? sanitize_text_field($_POST['fma_debug_enabled']) : 0; $save['fma_delete_data_on_uninstall'] = isset($_POST['fma_delete_data_on_uninstall']) ? sanitize_text_field($_POST['fma_delete_data_on_uninstall']) : 0; update_option('fmaoptions', $save); $this->f('?page=file_manager_advanced_controls&status=1'); } } /** * Sanitize directory path */ public function afm_sanitize_directory($path = '') { if (!empty($path)) { $path = str_replace('..', '', htmlentities(trim($path))); } return $path; } /** * Getting Options */ public function get() { return get_option('fmaoptions'); } /** * Diplay Notices */ public function notice($type, $message) { if (isset($type) && !empty($type)) { $class = ($type == '1') ? 'updated' : 'error'; return '

' . $message . '

'; } } /** * Redirection */ public function f($u) { $url = esc_url_raw($u); wp_register_script('fma-redirect-script', ''); wp_enqueue_script('fma-redirect-script'); wp_add_inline_script( 'fma-redirect-script', ' window.location.href="' . $url . '" ;' ); } public static function shortcodeUpdateNotice() { if (class_exists('file_manager_advanced_shortcode')): if (defined('fmas_ver')) { if (fmas_ver < '2.4.1') { return '

Advanced File manager shortcode addon update: You are using version ' . fmas_ver . ' we recommend you to update to latest version. If you did not receive update please download from my account page.

'; } } else { return '

Advanced File manager shortcode addon update: You are using old version, we recommend you to update to latest version. If you did not receive update please download from my account page.

'; } endif; } /** * Get User Roles */ public function wpUserRoles() { global $wp_roles; return $wp_roles->roles; } /** * Integrations Pro Menu */ public function integrations_pro_menu() { wp_enqueue_script('fma-admin-scripts'); $pro_images_url = plugins_url('assets/images/', __FILE__); ?>

PRO

array( 'name' => 'OneDrive', 'desc' => 'Connect and manage your Microsoft OneDrive files directly from the Advanced File Manager.', 'icon' => 'onedrive.svg' ), 'googledrive' => array( 'name' => 'Google Drive', 'desc' => 'Sync and manage your Google Drive files and folders seamlessly with your WordPress setup.', 'icon' => 'googledrive.svg' ), 'amazons3' => array( 'name' => 'Amazon S3', 'desc' => 'Securely connect and manage your AWS S3 buckets for flexible and scalable cloud storage.', 'icon' => 'amazons3.svg' ), 'googlecloud' => array( 'name' => 'Google Cloud Storage', 'desc' => 'Access and organize your Google Cloud Storage buckets right from your WordPress dashboard.', 'icon' => 'googlecloud.svg' ), 'github' => array( 'name' => 'GitHub', 'desc' => 'Connect your GitHub repositories to browse and manage your project files directly.', 'icon' => 'github.svg' ), 'dropbox' => array( 'name' => 'Dropbox', 'desc' => 'Easily integrate and manage your Dropbox cloud storage files within the file manager.', 'icon' => 'dropbox.svg' ), 'pcloud' => array( 'name' => 'pCloud', 'desc' => 'Connect and manage your pCloud files directly from the Advanced File Manager.', 'icon' => 'pcloud.svg' ), 'cloudflarer2' => array( 'name' => 'Cloudflare R2', 'desc' => 'Connect and manage your Cloudflare R2 buckets/files directly from the Advanced File Manager.', 'icon' => 'cloudflarer2.svg' ), 'digitalocean' => array( 'name' => 'DigitalOcean Spaces', 'desc' => 'Connect and manage your DigitalOcean Spaces buckets/files directly from the Advanced File Manager.', 'icon' => 'digitalocean.svg', 'coming_soon' => true ) ); foreach ($integrations as $item): ?>
<?php echo $item['name']; ?>

Coming Soon

'1', 'driver' => 'Trash', 'path' => FMAFILEPATH.'application/library/files/.trash/', 'tmbURL' => site_url() . '/application/library/files/.trash/.tmb/', 'winHashFix' => DIRECTORY_SEPARATOR !== '/', // to make hash same to Linux one on windows too 'uploadDeny' => array(''), // Recomend the same settings as the original volume that uses the trash 'uploadAllow' => array('all'),// Same as above 'uploadOrder' => array('deny', 'allow'), // Same as above 'accessControl' => 'access', // Same as above 'attributes' => array( array( 'pattern' => '/.tmb/', 'read' => false, 'write' => false, 'hidden' => true, 'locked' => false, ), array( 'pattern' => '/.quarantine/', 'read' => false, 'write' => false, 'hidden' => true, 'locked' => false, ), array( 'pattern' => '/.gitkeep/', 'read' => false, 'write' => false, 'hidden' => true, 'locked' => false, ) ), ); $trash_f = 't1_Lw'; } else { $trash = array(); $trash_f = ''; } $hide_htaccess = array( 'pattern' => '/.htaccess/', 'read' => false, 'write' => false, 'hidden' => true, 'locked' => false, ); if ( isset( $settings['enable_htaccess'] ) && ! empty( $settings['enable_htaccess'] ) && $settings['enable_htaccess'] == '1' ) { $hide_htaccess = array( 'pattern' => '/.htaccess/', 'read' => true, 'write' => false, 'hidden' => false, 'locked' => false, ); } // getting allowed upload $allowUpload = array( 'all' ); if ( isset( $settings['fma_upload_allow'] ) && ! empty( $settings['fma_upload_allow'] ) ) { $allowUpload = explode( ',',$settings['fma_upload_allow'] ); } // restricting max upload size $max_upload_size = isset( $settings['upload_max_size'] ) ? $settings['upload_max_size'] : '0'; $opts = array( 'roots' => array( // Items volume array( 'driver' => 'fma_local_filesystem', // custom driver with content search support 'path' => $path, // path to files (REQUIRED) 'URL' => $url, // URL to files (REQUIRED) 'trashHash' => $trash_f, // elFinder's hash of trash folder 'winHashFix' => DIRECTORY_SEPARATOR !== '/', // to make hash same to Linux one on windows too 'uploadDeny' => $is_admin ? array('all') : class_fma_permissions::get_restricted_upload_deny_mimes(), 'uploadAllow' => $allowUpload,// Mimetype `image` and `text/plain` allowed to upload 'uploadOrder' => $is_admin ? array('deny','allow') : array('allow', 'deny'), 'disabled' => array('help','preference'), 'accessControl' => 'access', 'acceptedName' => $is_admin ? '' : 'afm_plugin_file_validName', 'uploadMaxSize' => $max_upload_size, 'searchTimeout' => 300, 'attributes' => array( array( 'pattern' => '/.tmb/', 'read' => false, 'write' => false, 'hidden' => true, 'locked' => false, ), array( 'pattern' => '/.quarantine/', 'read' => false, 'write' => false, 'hidden' => true, 'locked' => false, ), array( 'pattern' => '/.gitkeep/', 'read' => false, 'write' => false, 'hidden' => true, 'locked' => false, ), $hide_htaccess ), ), // Trash volume $trash, ), ); if ( ! $is_admin ) { $opts['roots'][0]['attributes'] = array_merge( $opts['roots'][0]['attributes'], class_fma_permissions::get_restricted_file_attributes() ); // Same filename policy on every read/write path (not only get/put). $opts['bind']['put.pre'] = array( $this, 'on_put_command' ); $opts['bind']['get.pre'] = array( $this, 'on_get_command' ); $opts['bind']['file.pre'] = array( $this, 'on_file_command' ); $opts['bind']['zipdl.pre'] = array( $this, 'on_zipdl_command' ); $opts['bind']['archive.pre'] = array( $this, 'on_archive_command' ); $opts['bind']['rm.pre'] = array( $this, 'on_rm_command' ); $opts['bind']['rename.pre'] = array( $this, 'on_rename_command' ); } // SVG sanitiser + post-write policy for every command that can create/change files // (AFM-885 WPScan: extract bypassed upload/put-only binds; rename/content sniff follow-up). $opts['bind']['upload'] = array( $this, 'on_files_written_event' ); $opts['bind']['extract'] = array( $this, 'on_files_written_event' ); $opts['bind']['duplicate'] = array( $this, 'on_files_written_event' ); $opts['bind']['paste'] = array( $this, 'on_files_written_event' ); $opts['bind']['put'] = array( $this, 'on_put_event' ); $opts['bind']['rename'] = array( $this, 'on_rename_event' ); $opts['bind']['search.pre'] = array( $this, 'on_search_command' ); $opts = apply_filters( 'fma__opts_override', $opts ); // So cloud drivers building onetime/temp URLs hit the WP ajax connector. if ( ! defined( 'ELFINDER_CONNECTOR_URL' ) ) { define( 'ELFINDER_CONNECTOR_URL', add_query_arg( array( 'action' => 'fma_load_fma_ui', '_fmakey' => wp_create_nonce( 'fmaskey' ), ), admin_url( 'admin-ajax.php' ) ) ); } // run elFinder $fma_connector = fma_create_elfinder_connector(new elFinder($opts)); try { $fma_connector->run(); die; } catch ( Exception $e ) { } } /** * Block restricted overwrite operations for non-administrator users. */ public function on_put_command( $cmd, &$args, $elfinder, $volume ) { if ( empty( $args['target'] ) || ! $volume ) { return; } $file = $volume->file( $args['target'] ); if ( ! $file || empty( $file['name'] ) ) { return; } if ( ! class_fma_permissions::is_restricted_write_filename_allowed( $file['name'] ) ) { return array( 'preventexec' => true, 'results' => array( 'error' => array( elFinder::ERROR_UPLOAD_FILE_MIME ), ), ); } } /** * Block restricted editor read operations (get cmd for code editor). */ public function on_get_command( $cmd, &$args, $elfinder, $volume ) { if ( empty( $args['target'] ) || ! $volume ) { return; } $file = $volume->file( $args['target'] ); if ( ! $file || empty( $file['name'] ) ) { return; } if ( ! class_fma_permissions::is_restricted_write_filename_allowed( $file['name'] ) ) { return array( 'preventexec' => true, 'results' => array( 'error' => array( elFinder::ERROR_ACCESS_DENIED ), ), ); } } /** * Block restricted single file download operations (file cmd). * Allows downloading PHP files for authorized non-admin roles (AFM-989). */ public function on_file_command( $cmd, &$args, $elfinder, $volume ) { if ( empty( $args['target'] ) || ! $volume ) { return; } $file = $volume->file( $args['target'] ); if ( ! $file || empty( $file['name'] ) ) { return; } if ( ! class_fma_permissions::is_restricted_download_filename_allowed( $file['name'] ) ) { return array( 'preventexec' => true, 'results' => array( 'error' => array( elFinder::ERROR_ACCESS_DENIED ), ), ); } } /** * Block zip download of restricted filenames. * Allows downloading PHP files in zip archives for authorized non-admin roles (AFM-989). */ public function on_zipdl_command( $cmd, &$args, $elfinder, $volume ) { if ( empty( $args['targets'] ) || ! is_array( $args['targets'] ) || ! $volume ) { return; } foreach ( $args['targets'] as $target ) { $file = $volume->file( $target ); if ( ! $file || empty( $file['name'] ) ) { continue; } if ( ! empty( $file['mime'] ) && 'directory' === $file['mime'] ) { // Directory zipdl is handled by archive.pre / volume locks. continue; } if ( ! class_fma_permissions::is_restricted_download_filename_allowed( $file['name'] ) ) { return array( 'preventexec' => true, 'results' => array( 'error' => array( elFinder::ERROR_ACCESS_DENIED ), ), ); } } } /** * Refuse archiving targets that are locked/hidden or have restricted names. */ public function on_archive_command( $cmd, &$args, $elfinder, $volume ) { if ( empty( $args['targets'] ) || ! is_array( $args['targets'] ) || ! $volume ) { return; } foreach ( $args['targets'] as $target ) { $file = $volume->file( $target ); if ( ! $file ) { continue; } if ( ! empty( $file['locked'] ) || ! empty( $file['hidden'] ) ) { return array( 'preventexec' => true, 'results' => array( 'error' => array( elFinder::ERROR_PERM_DENIED ), ), ); } if ( ! empty( $file['name'] ) && ! class_fma_permissions::is_restricted_write_filename_allowed( $file['name'] ) ) { return array( 'preventexec' => true, 'results' => array( 'error' => array( elFinder::ERROR_PERM_DENIED ), ), ); } // Directories: block if any locked/hidden descendant exists (incl. .php). if ( ! empty( $file['mime'] ) && 'directory' === $file['mime'] && method_exists( $volume, 'closest' ) ) { $locked = $volume->closest( $target, 'locked', true ); if ( $locked ) { return array( 'preventexec' => true, 'results' => array( 'error' => array( elFinder::ERROR_PERM_DENIED ), ), ); } } } } /** * Refuse recursive directory delete when locked/hidden children exist. */ public function on_rm_command( $cmd, &$args, $elfinder, $volume ) { if ( empty( $args['targets'] ) || ! is_array( $args['targets'] ) || ! $volume ) { return; } foreach ( $args['targets'] as $target ) { $file = $volume->file( $target ); if ( ! $file ) { continue; } if ( ! empty( $file['locked'] ) ) { return array( 'preventexec' => true, 'results' => array( 'error' => array( elFinder::ERROR_LOCKED, $file['name'] ), ), ); } if ( ! empty( $file['mime'] ) && 'directory' === $file['mime'] && method_exists( $volume, 'closest' ) ) { $locked = $volume->closest( $target, 'locked', true ); if ( $locked ) { return array( 'preventexec' => true, 'results' => array( 'error' => array( elFinder::ERROR_PERM_DENIED ), ), ); } } } } /** * Block renaming to a restricted filename for non-administrators. */ public function on_rename_command( $cmd, &$args, $elfinder, $volume ) { if ( empty( $args['name'] ) ) { return; } if ( ! class_fma_permissions::is_restricted_write_filename_allowed( $args['name'] ) ) { return array( 'preventexec' => true, 'results' => array( 'error' => array( elFinder::ERROR_UPLOAD_FILE_MIME ), ), ); } } /** * Sanitize SVG after put (mkfile+put path skips upload sanitiser). * Content-based: SVG payload in a non-.svg name is still sanitised so a * later rename to .svg cannot revive script tags (AFM-885 residual). */ public function on_put_event( $cmd, &$result, $args, $elfinder, $volume = null ) { if ( 'put' !== $cmd || empty( $args['target'] ) || ! $volume ) { return; } $file = $volume->file( $args['target'] ); if ( ! $file || empty( $file['name'] ) ) { return; } $content_hint = isset( $args['content'] ) ? $args['content'] : null; if ( $this->should_sanitize_as_svg( $file, $volume, $content_hint ) ) { $this->sanitize_svg_file_content( $file, $volume ); } } /** * After rename: sanitise if the new name is .svg or contents look like SVG. * Closes: put malicious SVG into .txt → rename to .svg. */ public function on_rename_event( $cmd, &$result, $args, $elfinder, $volume = null ) { if ( 'rename' !== $cmd || ! $volume ) { return; } $candidates = array(); if ( ! empty( $result['added'] ) && is_array( $result['added'] ) ) { $candidates = array_merge( $candidates, $result['added'] ); } if ( ! empty( $result['changed'] ) && is_array( $result['changed'] ) ) { $candidates = array_merge( $candidates, $result['changed'] ); } foreach ( $candidates as $file ) { if ( empty( $file['hash'] ) || empty( $file['name'] ) ) { continue; } if ( ! empty( $file['mime'] ) && 'directory' === $file['mime'] ) { continue; } if ( $this->should_sanitize_as_svg( $file, $volume ) ) { $this->sanitize_svg_file_content( $file, $volume ); } } } /** * Post-write handler for upload / extract / duplicate / paste (AFM-885). * * elFinder passes ($cmd, &$result, $args, $elfinder, $dstVolume). * Apply SVG sanitiser to every newly created file (including nested extract), * and for non-admins remove entries that fail the filename policy. */ public function on_files_written_event( $cmd, &$result, $args, $elfinder, $volume = null ) { if ( empty( $result['added'] ) || ! is_array( $result['added'] ) || ! $volume ) { return; } $is_admin = class_fma_permissions::has_unrestricted_filesystem_access(); $written = $this->collect_written_file_stats( $result['added'], $volume ); foreach ( $written as $file ) { if ( empty( $file['name'] ) || empty( $file['hash'] ) ) { continue; } if ( ! $is_admin && ! class_fma_permissions::is_restricted_write_filename_allowed( $file['name'] ) ) { $this->remove_volume_file( $file, $volume ); continue; } if ( $this->should_sanitize_as_svg( $file, $volume ) ) { $this->sanitize_svg_file_content( $file, $volume ); } } // Drop removed restricted files from the client-facing "added" list. if ( ! $is_admin ) { $result['added'] = array_values( array_filter( $result['added'], function ( $file ) { if ( empty( $file['name'] ) ) { return true; } if ( ! empty( $file['mime'] ) && 'directory' === $file['mime'] ) { return true; } return class_fma_permissions::is_restricted_write_filename_allowed( $file['name'] ); } ) ); } } /** * BC alias — older references may still call on_upload_event. */ public function on_upload_event( $cmd, &$result, $args, $elfinder, $volume = null ) { return $this->on_files_written_event( $cmd, $result, $args, $elfinder, $volume ); } /** * Whether a file stat represents an SVG by name/MIME. * * @param array $file elFinder file stat. * @return bool */ private function is_svg_file_stat( $file ) { $lower = isset( $file['name'] ) ? strtolower( $file['name'] ) : ''; $mime = isset( $file['mime'] ) ? (string) $file['mime'] : ''; return (bool) preg_match( '/\.svgz?$/', $lower ) || ( false !== strpos( $mime, 'svg' ) ); } /** * Decide if SVG sanitiser should run (name/MIME or content sniff). * * @param array $file elFinder file stat. * @param object $volume Volume driver. * @param string|null $content_hint Optional in-memory content (e.g. put body). * @return bool */ private function should_sanitize_as_svg( $file, $volume, $content_hint = null ) { if ( $this->is_svg_file_stat( $file ) ) { return true; } if ( null !== $content_hint ) { return $this->file_content_looks_like_svg( $content_hint ); } $content = $this->read_volume_file_content( $file, $volume ); return $this->file_content_looks_like_svg( $content ); } /** * Content-based SVG detection from parsed XML (AFM-974 / WPScan). * * Root elements in the SVG namespace are detected regardless of prefix; * when XML cannot be parsed but still looks SVG-like, fail closed. * * @param string $content File contents. * @return bool */ private function file_content_looks_like_svg( $content ) { if ( ! is_string( $content ) || '' === $content ) { return false; } // Only sniff text-ish payloads; skip obvious binaries. if ( false !== strpos( substr( $content, 0, 512 ), "\0" ) ) { return false; } $content = ltrim( $content, "\xEF\xBB\xBF \t\n\r\0\x0B" ); if ( '' === $content ) { return false; } if ( $this->parsed_content_has_svg_root( $content ) ) { return true; } return $this->unparsed_content_may_be_svg( $content ); } /** * Detect SVG root via DOM (namespace-aware, full document). * * @param string $content XML/SVG file contents. * @return bool */ private function parsed_content_has_svg_root( $content ) { if ( ! class_exists( 'DOMDocument' ) ) { return false; } $previous = libxml_use_internal_errors( true ); $dom = new DOMDocument(); $loaded = $dom->loadXML( $content, LIBXML_NONET | LIBXML_COMPACT ); libxml_clear_errors(); libxml_use_internal_errors( $previous ); if ( ! $loaded ) { return false; } $root = $dom->documentElement; if ( ! $root instanceof DOMElement ) { return false; } return $this->dom_element_is_svg( $root ); } /** * Whether a DOM element is an SVG document root. * * @param DOMElement $element Document root element. * @return bool */ private function dom_element_is_svg( DOMElement $element ) { if ( 'svg' !== strtolower( $element->localName ) ) { return false; } $namespace = $element->namespaceURI; return ( null === $namespace || '' === $namespace || 'http://www.w3.org/2000/svg' === $namespace ); } /** * Fail-closed fallback when XML parsing fails but payload may still be SVG. * * @param string $content File contents. * @return bool */ private function unparsed_content_may_be_svg( $content ) { if ( '<' !== $content[0] && 0 !== strpos( $content, 'getPath( $file['hash'] ); if ( ! $path || ! is_file( $path ) || ! is_readable( $path ) ) { return ''; } $size = filesize( $path ); if ( false === $size || $size < 1 ) { return ''; } if ( $size <= $max_bytes ) { $content = file_get_contents( $path ); return is_string( $content ) ? $content : ''; } $fh = fopen( $path, 'rb' ); if ( ! $fh ) { return ''; } $content = fread( $fh, $max_bytes ); fclose( $fh ); return is_string( $content ) ? $content : ''; } /** * Flatten added stats so nested extract contents are included. * * @param array $added elFinder added stats. * @param object $volume Volume driver. * @return array */ private function collect_written_file_stats( $added, $volume ) { $files = array(); foreach ( $added as $file ) { if ( empty( $file['hash'] ) ) { continue; } if ( ! empty( $file['mime'] ) && 'directory' === $file['mime'] ) { $files = array_merge( $files, $this->collect_files_under_hash( $file['hash'], $volume ) ); continue; } $files[] = $file; } return $files; } /** * Recursively list file stats under a directory hash. * * @param string $hash Directory hash. * @param object $volume Volume driver. * @return array */ private function collect_files_under_hash( $hash, $volume ) { $files = array(); if ( ! method_exists( $volume, 'scandir' ) ) { return $files; } $items = $volume->scandir( $hash ); if ( ! is_array( $items ) ) { return $files; } foreach ( $items as $item ) { if ( empty( $item['hash'] ) ) { continue; } if ( ! empty( $item['mime'] ) && 'directory' === $item['mime'] ) { $files = array_merge( $files, $this->collect_files_under_hash( $item['hash'], $volume ) ); continue; } $files[] = $item; } return $files; } /** * Delete a volume file from disk (and best-effort via volume API). * * @param array $file File stat. * @param object $volume Volume driver. * @return void */ private function remove_volume_file( $file, $volume ) { if ( empty( $file['hash'] ) ) { return; } if ( method_exists( $volume, 'rm' ) ) { try { $volume->rm( $file['hash'] ); return; } catch ( Exception $e ) { // Fall through to unlink. } } if ( method_exists( $volume, 'getPath' ) ) { $path = $volume->getPath( $file['hash'] ); if ( $path && is_file( $path ) ) { @unlink( $path ); } } } private function sanitize_svg_file_content( $uploaded_file, $volume ) { require_once FMAFILEPATH . 'application/svg-sanitizer/includes/autoload.php'; if ( empty( $uploaded_file['hash'] ) || ! method_exists( $volume, 'getPath' ) ) { return; } $file_path = $volume->getPath( $uploaded_file['hash'] ); if ( ! $file_path || ! file_exists( $file_path ) ) { return; } $file_content = file_get_contents( $file_path ); $svg_sanitizer = new enshrined\svgSanitize\Sanitizer(); $sanitized = $svg_sanitizer->sanitize( $file_content ); // Sanitiser returns false on hard failure — never leave the original XSS payload. if ( false === $sanitized || null === $sanitized ) { $sanitized = ''; } file_put_contents( $file_path, $sanitized ); } /** * Intercept search command to handle content search tag parameter * This hook is called before the search command executes * We decode the tag from q parameter which contains special marker */ public function on_search_command( $cmd, &$args, $elfinder, $volume ) { if ( $cmd === 'search' ) { $type = !empty( $args['type'] ) ? $args['type'] : ''; $q = !empty( $args['q'] ) ? trim( $args['q'] ) : ''; // Content search: type is SearchTag and/or q contains our marker if ( $type === 'SearchTag' || strpos( $q, '__CONTENT_SEARCH__:' ) === 0 ) { $tag = ''; if ( strpos( $q, '__CONTENT_SEARCH__:' ) === 0 ) { $tag = substr( $q, strlen( '__CONTENT_SEARCH__:' ) ); } elseif ( $type === 'SearchTag' && $q !== '' ) { $tag = $q; // default elFinder sends type=SearchTag and q=term (no marker) } if ( $tag !== '' ) { elFinderVolumefma_local_filesystem::setContentSearchTag( $tag ); $args['q'] = ''; } else { elFinderVolumefma_local_filesystem::setContentSearchTag( '' ); } } else { elFinderVolumefma_local_filesystem::setContentSearchTag( '' ); } } } } /** * Hook to fix invalid and malicious files */ function afm_plugin_file_validName( $name ) { if ( ! empty( $name ) ) { // Check for dangerous characters (but allow spaces) // Block characters that could be used for path traversal or command injection if( preg_match( '/[<>:"|?*\x00-\x1F]/', $name ) ) { return false; } // Block files starting with dot (except for special cases handled elsewhere) if( strpos($name, '.') === 0 && $name !== '.' && $name !== '..' ) { return false; } $lower_name = strtolower( $name ); // Block dangerous file extensions if( strpos($lower_name, '.php') !== false || strpos($lower_name, '.phtml') !== false || strpos($lower_name, '.ini') !== false || strpos($lower_name, '.htaccess') !== false || strpos($lower_name, '.config') !== false || strpos($lower_name, '.css') !== false || strpos($lower_name, '.js') !== false || preg_match( '/\.(html?|xhtml|shtml)$/', $lower_name ) ) { return false; } // Filename is valid (allows spaces) return true; } return false; } function access($attr, $path, $data, $volume, $isDir, $relpath) { $basename = basename($path); //skipping htaccess if($basename == '.htaccess') { return null; } else { return $basename[0] === '.' // if file/folder begins with '.' (dot) && strlen($relpath) !== 1 // but with out volume root ? !($attr == 'read' || $attr == 'write') // set read+write to false, other (locked+hidden) set to true : null; // else elFinder decide it itself } }PK!« ]cPfile-manager-advanced/application/svg-sanitizer/src/ElementReference/Subject.phpnu„[µü¤element = $element; $this->useNestingLimit = $useNestingLimit; } /** * @return \DOMElement */ public function getElement() { return $this->element; } /** * @return string */ public function getElementId() { return $this->element->getAttribute('id'); } /** * @param array $subjects Previously processed subjects * @param int $level The current level of nesting. * @return bool * @throws \enshrined\svgSanitize\Exceptions\NestingException */ public function hasInfiniteLoop(array $subjects = [], $level = 1) { if ($level > $this->useNestingLimit) { throw new \enshrined\svgSanitize\Exceptions\NestingException('Nesting level too high, aborting', 1570713498, null, $this->getElement()); } if (in_array($this, $subjects, true)) { return true; } $subjects[] = $this; foreach ($this->useCollection as $usage) { if ($usage->getSubject()->hasInfiniteLoop($subjects, $level + 1)) { return true; } } return false; } /** * @param Subject $subject */ public function addUse(Subject $subject) { if ($subject === $this) { throw new \LogicException('Cannot add self usage', 1570713416); } $identifier = $subject->getElementId(); if (isset($this->useCollection[$identifier])) { $this->useCollection[$identifier]->increment(); return; } $this->useCollection[$identifier] = new Usage($subject); } /** * @param Subject $subject */ public function addUsedIn(Subject $subject) { if ($subject === $this) { throw new \LogicException('Cannot add self as usage', 1570713417); } $identifier = $subject->getElementId(); if (isset($this->usedInCollection[$identifier])) { $this->usedInCollection[$identifier]->increment(); return; } $this->usedInCollection[$identifier] = new Usage($subject); } /** * @param bool $accumulated * @return int */ public function countUse($accumulated = false) { $count = 0; foreach ($this->useCollection as $use) { $useCount = $use->getSubject()->countUse(); $count += $use->getCount() * ($accumulated ? 1 + $useCount : max(1, $useCount)); } return $count; } /** * @return int */ public function countUsedIn() { $count = 0; foreach ($this->usedInCollection as $usedIn) { $count += $usedIn->getCount() * max(1, $usedIn->getSubject()->countUsedIn()); } return $count; } /** * Clear the internal arrays (to free up memory as they can get big) * and return all the child usages DOMElement's * * @return array */ public function clearInternalAndGetAffectedElements() { $elements = array_map(function(Usage $usage) { return $usage->getSubject()->getElement(); }, $this->useCollection); $this->usedInCollection = []; $this->useCollection = []; return $elements; } }PK!ÿU-]ññNfile-manager-advanced/application/svg-sanitizer/src/ElementReference/Usage.phpnu„[µü¤subject = $subject; $this->count = (int)$count; } /** * @param int $by */ public function increment($by = 1) { $this->count += (int)$by; } /** * @return Subject */ public function getSubject() { return $this->subject; } /** * @return int */ public function getCount() { return $this->count; } }PK!Îo¨6Qfile-manager-advanced/application/svg-sanitizer/src/ElementReference/Resolver.phpnu„[µü¤xPath = $xPath; $this->useNestingLimit = $useNestingLimit; } public function collect() { $this->collectIdentifiedElements(); $this->processReferences(); $this->determineInvalidSubjects(); } /** * Resolves one subject by element. * * @param \DOMElement $element * @param bool $considerChildren Whether to search in Subject's children as well * @return Subject|null */ public function findByElement(\DOMElement $element, $considerChildren = false) { foreach ($this->subjects as $subject) { if ( $element === $subject->getElement() || $considerChildren && Helper::isElementContainedIn($element, $subject->getElement()) ) { return $subject; } } return null; } /** * Resolves subjects (plural!) by element id - in theory malformed * DOM might have same ids assigned to different elements and leaving * it to client/browser implementation which element to actually use. * * @param string $elementId * @return Subject[] */ public function findByElementId($elementId) { return array_filter( $this->subjects, function (Subject $subject) use ($elementId) { return $elementId === $subject->getElementId(); } ); } /** * Collects elements having `id` attribute (those that can be referenced). */ protected function collectIdentifiedElements() { /** @var \DOMNodeList|\DOMElement[] $elements */ $elements = $this->xPath->query('//*[@id]'); foreach ($elements as $element) { $this->subjects[$element->getAttribute('id')] = new Subject($element, $this->useNestingLimit); } } /** * Processes references from and to elements having `id` attribute concerning * their occurrence in `` statements. */ protected function processReferences() { $useNodeName = $this->xPath->createNodeName('use'); foreach ($this->subjects as $subject) { $useElements = $this->xPath->query( $useNodeName . '[@href or @xlink:href]', $subject->getElement() ); /** @var \DOMElement $useElement */ foreach ($useElements as $useElement) { $useId = Helper::extractIdReferenceFromHref( Helper::getElementHref($useElement) ); if ($useId === null || !isset($this->subjects[$useId])) { continue; } $subject->addUse($this->subjects[$useId]); $this->subjects[$useId]->addUsedIn($subject); } } } /** * Determines and tags infinite loops. */ protected function determineInvalidSubjects() { foreach ($this->subjects as $subject) { if (in_array($subject->getElement(), $this->elementsToRemove)) { continue; } $useId = Helper::extractIdReferenceFromHref( Helper::getElementHref($subject->getElement()) ); try { if ($useId === $subject->getElementId()) { $this->markSubjectAsInvalid($subject); } elseif ($subject->hasInfiniteLoop()) { $this->markSubjectAsInvalid($subject); } } catch (NestingException $e) { $this->elementsToRemove[] = $e->getElement(); $this->markSubjectAsInvalid($subject); } } } /** * Get all the elements that caused a nesting exception. * * @return array */ public function getElementsToRemove() { return $this->elementsToRemove; } /** * The Subject is invalid for some reason, therefore we should * remove it and all it's child usages. * * @param Subject $subject */ protected function markSubjectAsInvalid(Subject $subject) { $this->elementsToRemove = array_merge( $this->elementsToRemove, $subject->clearInternalAndGetAffectedElements() ); } }PK!‡©)§ETETAfile-manager-advanced/application/svg-sanitizer/src/Sanitizer.phpnu„[µü¤allowedAttrs = array_map('strtolower', AllowedAttributes::getAttributes()); $this->allowedTags = array_map('strtolower', AllowedTags::getTags()); } /** * Set up the DOMDocument */ protected function resetInternal() { $this->xmlDocument = new \DOMDocument(); $this->xmlDocument->preserveWhiteSpace = false; $this->xmlDocument->strictErrorChecking = false; $this->xmlDocument->formatOutput = !$this->minifyXML; } /** * Set XML options to use when saving XML * See: DOMDocument::saveXML * * @param int $xmlOptions */ public function setXMLOptions($xmlOptions) { $this->xmlOptions = $xmlOptions; } /** * Get XML options to use when saving XML * See: DOMDocument::saveXML * * @return int */ public function getXMLOptions() { return $this->xmlOptions; } /** * Get the array of allowed tags * * @return array */ public function getAllowedTags() { return $this->allowedTags; } /** * Set custom allowed tags * * @param TagInterface $allowedTags */ public function setAllowedTags(TagInterface $allowedTags) { $this->allowedTags = array_map('strtolower', $allowedTags::getTags()); } /** * Get the array of allowed attributes * * @return array */ public function getAllowedAttrs() { return $this->allowedAttrs; } /** * Set custom allowed attributes * * @param AttributeInterface $allowedAttrs */ public function setAllowedAttrs(AttributeInterface $allowedAttrs) { $this->allowedAttrs = array_map('strtolower', $allowedAttrs::getAttributes()); } /** * Should we remove references to remote files? * * @param bool $removeRemoteRefs */ public function removeRemoteReferences($removeRemoteRefs = false) { $this->removeRemoteReferences = $removeRemoteRefs; } /** * Get XML issues. * * @return array */ public function getXmlIssues() { return $this->xmlIssues; } /** * Can we allow huge files? * * @return bool */ public function getAllowHugeFiles() { return $this->allowHugeFiles; } /** * Set whether we can allow huge files. * * @param bool $allowHugeFiles */ public function setAllowHugeFiles( $allowHugeFiles ) { $this->allowHugeFiles = $allowHugeFiles; } /** * Sanitize the passed string * * @param string $dirty * @return string|false */ public function sanitize($dirty) { // Don't run on an empty string if (empty($dirty)) { return ''; } do { /* * recursively remove php tags because they can be hidden inside tags * i.e. hp echo . ' danger! ';?> */ $dirty = preg_replace('/<\?(=|php)(.+?)\?>/i', '', $dirty); } while (preg_match('/<\?(=|php)(.+?)\?>/i', $dirty) != 0); $this->resetInternal(); $this->setUpBefore(); $loaded = $this->xmlDocument->loadXML($dirty, $this->getAllowHugeFiles() ? LIBXML_PARSEHUGE : 0); // If we couldn't parse the XML then we go no further. Reset and return false if (!$loaded) { $this->xmlIssues = self::getXmlErrors(); $this->resetAfter(); return false; } // Pre-process all identified elements $xPath = new XPath($this->xmlDocument); $this->elementReferenceResolver = new Resolver($xPath, $this->useNestingLimit); $this->elementReferenceResolver->collect(); $elementsToRemove = $this->elementReferenceResolver->getElementsToRemove(); // Start the cleaning process $this->startClean($this->xmlDocument->childNodes, $elementsToRemove); // Save cleaned XML to a variable if ($this->removeXMLTag) { $clean = $this->xmlDocument->saveXML($this->xmlDocument->documentElement, $this->xmlOptions); } else { $clean = $this->xmlDocument->saveXML($this->xmlDocument, $this->xmlOptions); } $this->resetAfter(); // Remove any extra whitespaces when minifying if ($this->minifyXML) { $clean = preg_replace('/\s+/', ' ', $clean); } // Return result return $clean; } /** * Set up libXML before we start */ protected function setUpBefore() { // This function has been deprecated in PHP 8.0 because in libxml 2.9.0, external entity loading is // disabled by default, so this function is no longer needed to protect against XXE attacks. if (\LIBXML_VERSION < 20900) { // Turn off the entity loader $this->xmlLoaderValue = libxml_disable_entity_loader(true); } // Suppress the errors because we don't really have to worry about formation before cleansing. // See reset in resetAfter(). $this->xmlErrorHandlerPreviousValue = libxml_use_internal_errors(true); // Reset array of altered XML $this->xmlIssues = array(); } /** * Reset the class after use */ protected function resetAfter() { // This function has been deprecated in PHP 8.0 because in libxml 2.9.0, external entity loading is // disabled by default, so this function is no longer needed to protect against XXE attacks. if (\LIBXML_VERSION < 20900) { // Reset the entity loader libxml_disable_entity_loader($this->xmlLoaderValue); } libxml_clear_errors(); libxml_use_internal_errors($this->xmlErrorHandlerPreviousValue); } /** * Start the cleaning with tags, then we move onto attributes and hrefs later * * @param \DOMNodeList $elements * @param array $elementsToRemove */ protected function startClean(\DOMNodeList $elements, array $elementsToRemove) { // loop through all elements // we do this backwards so we don't skip anything if we delete a node // see comments at: http://php.net/manual/en/class.domnamednodemap.php for ($i = $elements->length - 1; $i >= 0; $i--) { /** @var \DOMElement $currentElement */ $currentElement = $elements->item($i); /** * If the element has exceeded the nesting limit, we should remove it. * * As it's only elements that cause us issues with nesting DOS attacks * we should check what the element is before removing it. For now we'll only * remove elements. */ if (in_array($currentElement, $elementsToRemove) && 'use' === $currentElement->nodeName) { $currentElement->parentNode->removeChild($currentElement); $this->xmlIssues[] = array( 'message' => 'Invalid \'' . $currentElement->tagName . '\'', 'line' => $currentElement->getLineNo(), ); continue; } if ($currentElement instanceof \DOMElement) { // If the tag isn't in the whitelist, remove it and continue with next iteration if (!in_array(strtolower($currentElement->tagName), $this->allowedTags)) { $currentElement->parentNode->removeChild($currentElement); $this->xmlIssues[] = array( 'message' => 'Suspicious tag \'' . $currentElement->tagName . '\'', 'line' => $currentElement->getLineNo(), ); continue; } $this->cleanHrefs( $currentElement ); $this->cleanXlinkHrefs( $currentElement ); $this->cleanAttributesOnWhitelist($currentElement); if (strtolower($currentElement->tagName) === 'use') { if ($this->isUseTagDirty($currentElement) || $this->isUseTagExceedingThreshold($currentElement) ) { $currentElement->parentNode->removeChild($currentElement); $this->xmlIssues[] = array( 'message' => 'Suspicious \'' . $currentElement->tagName . '\'', 'line' => $currentElement->getLineNo(), ); continue; } } // Strip out font elements that will break out of foreign content. if (strtolower($currentElement->tagName) === 'font') { $breaksOutOfForeignContent = false; for ($x = $currentElement->attributes->length - 1; $x >= 0; $x--) { // get attribute name $attrName = $currentElement->attributes->item( $x )->nodeName; if (in_array(strtolower($attrName), ['face', 'color', 'size'])) { $breaksOutOfForeignContent = true; } } if ($breaksOutOfForeignContent) { $currentElement->parentNode->removeChild($currentElement); $this->xmlIssues[] = array( 'message' => 'Suspicious tag \'' . $currentElement->tagName . '\'', 'line' => $currentElement->getLineNo(), ); continue; } } } $this->cleanUnsafeNodes($currentElement); if ($currentElement->hasChildNodes()) { $this->startClean($currentElement->childNodes, $elementsToRemove); } } } /** * Only allow attributes that are on the whitelist * * @param \DOMElement $element */ protected function cleanAttributesOnWhitelist(\DOMElement $element) { for ($x = $element->attributes->length - 1; $x >= 0; $x--) { // get attribute name $attrName = $element->attributes->item($x)->nodeName; // Remove attribute if not in whitelist if (!in_array(strtolower($attrName), $this->allowedAttrs) && !$this->isAriaAttribute(strtolower($attrName)) && !$this->isDataAttribute(strtolower($attrName))) { $element->removeAttribute($attrName); $this->xmlIssues[] = array( 'message' => 'Suspicious attribute \'' . $attrName . '\'', 'line' => $element->getLineNo(), ); } /** * This is used for when a namespace isn't imported properly. * Such as xlink:href when the xlink namespace isn't imported. * We have to do this as the link is still ran in this case. */ if (false !== strpos($attrName, 'href')) { $href = $element->getAttribute($attrName); if (false === $this->isHrefSafeValue($href)) { $element->removeAttribute($attrName); $this->xmlIssues[] = array( 'message' => 'Suspicious attribute \'href\'', 'line' => $element->getLineNo(), ); } } // Do we want to strip remote references? if($this->removeRemoteReferences) { // Remove attribute if it has a remote reference if (isset($element->attributes->item($x)->value) && $this->hasRemoteReference($element->attributes->item($x)->value)) { $element->removeAttribute($attrName); $this->xmlIssues[] = array( 'message' => 'Suspicious attribute \'' . $attrName . '\'', 'line' => $element->getLineNo(), ); } } } } /** * Clean the xlink:hrefs of script and data embeds * * @param \DOMElement $element */ protected function cleanXlinkHrefs(\DOMElement $element) { $xlinks = $element->getAttributeNS('http://www.w3.org/1999/xlink', 'href'); if (false === $this->isHrefSafeValue($xlinks)) { $element->removeAttributeNS( 'http://www.w3.org/1999/xlink', 'href' ); $this->xmlIssues[] = array( 'message' => 'Suspicious attribute \'href\'', 'line' => $element->getLineNo(), ); } } /** * Clean the hrefs of script and data embeds * * @param \DOMElement $element */ protected function cleanHrefs(\DOMElement $element) { $href = $element->getAttribute('href'); if (false === $this->isHrefSafeValue($href)) { $element->removeAttribute('href'); $this->xmlIssues[] = array( 'message' => 'Suspicious attribute \'href\'', 'line' => $element->getLineNo(), ); } } /** * Only allow whitelisted starts to be within the href. * * This will stop scripts etc from being passed through, with or without attempting to hide bypasses. * This stops the need for us to use a complicated script regex. * * @param $value * @return bool */ protected function isHrefSafeValue($value) { // Allow empty values if (empty($value)) { return true; } // Allow fragment identifiers. if ('#' === substr($value, 0, 1)) { return true; } // Allow relative URIs. if ('/' === substr($value, 0, 1)) { return true; } // Allow HTTPS domains. if ('https://' === substr($value, 0, 8)) { return true; } // Allow HTTP domains. if ('http://' === substr($value, 0, 7)) { return true; } // Allow known data URIs. if (in_array(substr($value, 0, 14), array( 'data:image/png', // PNG 'data:image/gif', // GIF 'data:image/jpg', // JPG 'data:image/jpe', // JPEG 'data:image/pjp', // PJPEG ))) { return true; } // Allow known short data URIs. if (in_array(substr($value, 0, 12), array( 'data:img/png', // PNG 'data:img/gif', // GIF 'data:img/jpg', // JPG 'data:img/jpe', // JPEG 'data:img/pjp', // PJPEG ))) { return true; } return false; } /** * Removes non-printable ASCII characters from string & trims it * * @param string $value * @return bool */ protected function removeNonPrintableCharacters($value) { return trim(preg_replace('/[^ -~]/xu','',$value)); } /** * Does this attribute value have a remote reference? * * @param $value * @return bool */ protected function hasRemoteReference($value) { $value = $this->removeNonPrintableCharacters($value); $wrapped_in_url = preg_match('~^url\(\s*[\'"]\s*(.*)\s*[\'"]\s*\)$~xi', $value, $match); if (!$wrapped_in_url){ return false; } $value = trim($match[1], '\'"'); return preg_match('~^((https?|ftp|file):)?//~xi', $value); } /** * Should we minify the output? * * @param bool $shouldMinify */ public function minify($shouldMinify = false) { $this->minifyXML = (bool) $shouldMinify; } /** * Should we remove the XML tag in the header? * * @param bool $removeXMLTag */ public function removeXMLTag($removeXMLTag = false) { $this->removeXMLTag = (bool) $removeXMLTag; } /** * Whether `` elements shall be * removed in case expansion would exceed this threshold. * * @param int $useThreshold */ public function useThreshold($useThreshold = 1000) { $this->useThreshold = (int)$useThreshold; } /** * Check to see if an attribute is an aria attribute or not * * @param $attributeName * * @return bool */ protected function isAriaAttribute($attributeName) { return strpos($attributeName, 'aria-') === 0; } /** * Check to see if an attribute is an data attribute or not * * @param $attributeName * * @return bool */ protected function isDataAttribute($attributeName) { return strpos($attributeName, 'data-') === 0; } /** * Make sure our use tag is only referencing internal resources * * @param \DOMElement $element * @return bool */ protected function isUseTagDirty(\DOMElement $element) { $href = Helper::getElementHref($element); return $href && strpos($href, '#') !== 0; } /** * Determines whether `` is expanded * recursively in order to create DoS scenarios. The amount of a actually * used element needs to be below `$this->useThreshold`. * * @param \DOMElement $element * @return bool */ protected function isUseTagExceedingThreshold(\DOMElement $element) { if ($this->useThreshold <= 0) { return false; } $useId = Helper::extractIdReferenceFromHref( Helper::getElementHref($element) ); if ($useId === null) { return false; } foreach ($this->elementReferenceResolver->findByElementId($useId) as $subject) { if ($subject->countUse() >= $this->useThreshold) { return true; } } return false; } /** * Set the nesting limit for tags. * * @param $limit */ public function setUseNestingLimit($limit) { $this->useNestingLimit = (int) $limit; } /** * Remove nodes that are either invalid or malformed. * * @param \DOMNode $currentElement The current element. */ protected function cleanUnsafeNodes(\DOMNode $currentElement) { // Replace CDATA node with encoded text node if ($currentElement instanceof \DOMCdataSection) { $textNode = $currentElement->ownerDocument->createTextNode($currentElement->nodeValue); $currentElement->parentNode->replaceChild($textNode, $currentElement); // If the element doesn't have a tagname, remove it and continue with next iteration } elseif (!$currentElement instanceof \DOMElement && !$currentElement instanceof \DOMText) { $currentElement->parentNode->removeChild($currentElement); $this->xmlIssues[] = array( 'message' => 'Suspicious node \'' . $currentElement->nodeName . '\'', 'line' => $currentElement->getLineNo(), ); return; } if ( $currentElement->childNodes && $currentElement->childNodes->length > 0 ) { for ($j = $currentElement->childNodes->length - 1; $j >= 0; $j--) { /** @var \DOMElement $childElement */ $childElement = $currentElement->childNodes->item($j); $this->cleanUnsafeNodes($childElement); } } } /** * Retrieve array of errors * @return array */ private static function getXmlErrors() { $errors = []; foreach (libxml_get_errors() as $error) { $errors[] = [ 'message' => trim($error->message), 'line' => $error->line, ]; } return $errors; } } PK!$ÔPT‰ ‰ Cfile-manager-advanced/application/svg-sanitizer/src/svg-scanner.phpnu„[µü¤#!/usr/bin/env php array( 'errors' => 0, ), 'files' => array( ), ); /* * Catch files to scan from $argv. */ $files_to_scan = $argv; unset( $files_to_scan[0] ); $files_to_scan = array_values( $files_to_scan ); /* * Catch no file specified. */ if ( empty( $files_to_scan ) ) { $results['totals']['errors']++; $results['messages'] = array( array( 'No files to scan specified' ), ); sysexit( $results, 1 ); } /* * Initialize the SVG scanner. * * Make sure to allow custom attributes, * and to remove remote references. */ $sanitizer = new enshrined\svgSanitize\Sanitizer(); $sanitizer->removeRemoteReferences( true ); /* * Scan each file specified to be scanned. */ foreach( $files_to_scan as $file_name ) { /* * Read SVG file. */ $svg_file = @file_get_contents( $file_name ); /* * If not found, report that and continue. */ if ( false === $svg_file ) { $results['totals']['errors']++; $results['files'][ $file_name ][] = array( 'errors' => 1, 'messages' => array( array( 'message' => 'File specified could not be read (' . $file_name . ')', 'line' => null, ), ), ); continue; } /* * Sanitize file and get issues found. */ $sanitize_status = $sanitizer->sanitize( $svg_file ); $xml_issues = $sanitizer->getXmlIssues(); /* * If we find no issues, simply note that. */ if ( empty( $xml_issues ) && ( false !== $sanitize_status ) ) { $results['files'][ $file_name ] = array( 'errors' => 0, 'messages' => array() ); } /* * Could not sanitize the file. */ else if ( ( '' === $sanitize_status ) || ( false === $sanitize_status ) ) { $results['totals']['errors']++; $results['files'][ $file_name ] = array( 'errors' => 1, 'messages' => array( array( 'message' => 'Unable to sanitize file \'' . $file_name . '\'' , 'line' => null, ) ), ); } /* * If we find issues, note it and update statistics. */ else { $results['totals']['errors'] += count( $xml_issues ); $results['files'][ $file_name ] = array( 'errors' => count( $xml_issues ), 'messages' => $xml_issues, ); } unset( $svg_file ); unset( $xml_issues ); unset( $sanitize_status ); } /* * Exit with a status * that reflects what issues * we found. */ sysexit( $results, ( $results['totals']['errors'] === 0 ? 0 : 1 ) ); PK!°›|Sfile-manager-advanced/application/svg-sanitizer/src/Exceptions/NestingException.phpnu„[µü¤element = $element; parent::__construct($message, $code, $previous); } /** * Get the element that caused the exception. * * @return \DOMElement */ public function getElement() { return $this->element; } } PK!k”7ÍRR>file-manager-advanced/application/svg-sanitizer/src/Helper.phpnu„[µü¤hasAttribute('href')) { return $element->getAttribute('href'); } if ($element->hasAttributeNS('http://www.w3.org/1999/xlink', 'href')) { return $element->getAttributeNS('http://www.w3.org/1999/xlink', 'href'); } return null; } /** * @param string $href * @return string|null */ public static function extractIdReferenceFromHref($href) { if (!is_string($href) || strpos($href, '#') !== 0) { return null; } return substr($href, 1); } /** * @param \DOMElement $needle * @param \DOMElement $haystack * @return bool */ public static function isElementContainedIn(\DOMElement $needle, \DOMElement $haystack) { if ($needle === $haystack) { return true; } foreach ($haystack->childNodes as $childNode) { if (!$childNode instanceof \DOMElement) { continue; } if (self::isElementContainedIn($needle, $childNode)) { return true; } } return false; } } PK!®$’Ofile-manager-advanced/application/svg-sanitizer/src/data/AttributeInterface.phpnu„[µü¤handleDefaultNamespace(); } /** * @param string $nodeName * @return string */ public function createNodeName($nodeName) { if (empty($this->defaultNamespaceURI)) { return $nodeName; } return self::DEFAULT_NAMESPACE_PREFIX . ':' . $nodeName; } protected function handleDefaultNamespace() { $rootElements = $this->getRootElements(); if (count($rootElements) !== 1) { throw new \LogicException( sprintf('Got %d svg elements, expected exactly one', count($rootElements)), 1570870568 ); } $this->defaultNamespaceURI = (string)$rootElements[0]->namespaceURI; if ($this->defaultNamespaceURI !== '') { $this->registerNamespace(self::DEFAULT_NAMESPACE_PREFIX, $this->defaultNamespaceURI); } } /** * @return \DOMElement[] */ protected function getRootElements() { $rootElements = []; $elements = $this->document->getElementsByTagName('svg'); /** @var \DOMElement $element */ foreach ($elements as $element) { if ($element->parentNode !== $this->document) { continue; } $rootElements[] = $element; } return $rootElements; } } PK!C5<ƒIfile-manager-advanced/application/svg-sanitizer/src/data/TagInterface.phpnu„[µü¤ 3.0.0-alpha.1` ## [2.0.0] - 23.06.2018 Changes to public API: - `PreReleaseSuffix::construct()`: optional parameter `$number` removed - `PreReleaseSuffix::isGreaterThan()`: introduced - `Version::hasPreReleaseSuffix()`: introduced ### Added - [#11](https://github.com/phar-io/version/issues/11): Added support for pre-release version suffixes. Supported values are: - `dev` - `beta` (also abbreviated form `b`) - `rc` - `alpha` (also abbreviated form `a`) - `patch` (also abbreviated form `p`) All values can be followed by a number, e.g. `beta3`. When comparing versions, the pre-release suffix is taken into account. Example: `1.5.0 > 1.5.0-beta1 > 1.5.0-alpha3 > 1.5.0-alpha2 > 1.5.0-dev11` ### Changed - reorganized the source directories ### Fixed - [#10](https://github.com/phar-io/version/issues/10): Version numbers containing a numeric suffix as seen in Debian packages are now supported. [3.1.0]: https://github.com/phar-io/version/compare/3.0.4...3.1.0 [3.0.4]: https://github.com/phar-io/version/compare/3.0.3...3.0.4 [3.0.3]: https://github.com/phar-io/version/compare/3.0.2...3.0.3 [3.0.2]: https://github.com/phar-io/version/compare/3.0.1...3.0.2 [3.0.1]: https://github.com/phar-io/version/compare/3.0.0...3.0.1 [3.0.0]: https://github.com/phar-io/version/compare/2.0.1...3.0.0 [2.0.1]: https://github.com/phar-io/version/compare/2.0.0...2.0.1 [2.0.0]: https://github.com/phar-io/version/compare/1.0.1...2.0.0 PK!¡ºw¡¡Vfile-manager-advanced/application/svg-sanitizer/includes/phar-io/version/composer.jsonnu„[µü¤{ "name": "phar-io/version", "description": "Library for handling version information and constraints", "license": "BSD-3-Clause", "authors": [ { "name": "Arne Blankerts", "email": "arne@blankerts.de", "role": "Developer" }, { "name": "Sebastian Heuer", "email": "sebastian@phpeople.de", "role": "Developer" }, { "name": "Sebastian Bergmann", "email": "sebastian@phpunit.de", "role": "Developer" } ], "support": { "issues": "https://github.com/phar-io/version/issues" }, "require": { "php": "^7.2 || ^8.0" }, "autoload": { "classmap": [ "src/" ] } } PK!ºâúHÏÏ^file-manager-advanced/application/svg-sanitizer/includes/phar-io/version/src/BuildMetaData.phpnu„[µü¤, Sebastian Heuer , Sebastian Bergmann * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace PharIo\Version; class BuildMetaData { /** @var string */ private $value; public function __construct(string $value) { $this->value = $value; } public function asString(): string { return $this->value; } public function equals(BuildMetaData $other): bool { return $this->asString() === $other->asString(); } } PK!frë¶++Xfile-manager-advanced/application/svg-sanitizer/includes/phar-io/version/src/Version.phpnu„[µü¤, Sebastian Heuer , Sebastian Bergmann * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace PharIo\Version; class Version { /** @var string */ private $originalVersionString; /** @var VersionNumber */ private $major; /** @var VersionNumber */ private $minor; /** @var VersionNumber */ private $patch; /** @var null|PreReleaseSuffix */ private $preReleaseSuffix; /** @var null|BuildMetaData */ private $buildMetadata; public function __construct(string $versionString) { $this->ensureVersionStringIsValid($versionString); $this->originalVersionString = $versionString; } /** * @throws NoPreReleaseSuffixException */ public function getPreReleaseSuffix(): PreReleaseSuffix { if ($this->preReleaseSuffix === null) { throw new NoPreReleaseSuffixException('No pre-release suffix set'); } return $this->preReleaseSuffix; } public function getOriginalString(): string { return $this->originalVersionString; } public function getVersionString(): string { $str = \sprintf( '%d.%d.%d', $this->getMajor()->getValue() ?? 0, $this->getMinor()->getValue() ?? 0, $this->getPatch()->getValue() ?? 0 ); if (!$this->hasPreReleaseSuffix()) { return $str; } return $str . '-' . $this->getPreReleaseSuffix()->asString(); } public function hasPreReleaseSuffix(): bool { return $this->preReleaseSuffix !== null; } public function equals(Version $other): bool { if ($this->getVersionString() !== $other->getVersionString()) { return false; } if ($this->hasBuildMetaData() !== $other->hasBuildMetaData()) { return false; } if ($this->hasBuildMetaData() && $other->hasBuildMetaData() && !$this->getBuildMetaData()->equals($other->getBuildMetaData())) { return false; } return true; } public function isGreaterThan(Version $version): bool { if ($version->getMajor()->getValue() > $this->getMajor()->getValue()) { return false; } if ($version->getMajor()->getValue() < $this->getMajor()->getValue()) { return true; } if ($version->getMinor()->getValue() > $this->getMinor()->getValue()) { return false; } if ($version->getMinor()->getValue() < $this->getMinor()->getValue()) { return true; } if ($version->getPatch()->getValue() > $this->getPatch()->getValue()) { return false; } if ($version->getPatch()->getValue() < $this->getPatch()->getValue()) { return true; } if (!$version->hasPreReleaseSuffix() && !$this->hasPreReleaseSuffix()) { return false; } if ($version->hasPreReleaseSuffix() && !$this->hasPreReleaseSuffix()) { return true; } if (!$version->hasPreReleaseSuffix() && $this->hasPreReleaseSuffix()) { return false; } return $this->getPreReleaseSuffix()->isGreaterThan($version->getPreReleaseSuffix()); } public function getMajor(): VersionNumber { return $this->major; } public function getMinor(): VersionNumber { return $this->minor; } public function getPatch(): VersionNumber { return $this->patch; } /** * @psalm-assert-if-true BuildMetaData $this->buildMetadata * @psalm-assert-if-true BuildMetaData $this->getBuildMetaData() */ public function hasBuildMetaData(): bool { return $this->buildMetadata !== null; } /** * @throws NoBuildMetaDataException */ public function getBuildMetaData(): BuildMetaData { if (!$this->hasBuildMetaData()) { throw new NoBuildMetaDataException('No build metadata set'); } return $this->buildMetadata; } /** * @param string[] $matches * * @throws InvalidPreReleaseSuffixException */ private function parseVersion(array $matches): void { $this->major = new VersionNumber((int)$matches['Major']); $this->minor = new VersionNumber((int)$matches['Minor']); $this->patch = isset($matches['Patch']) ? new VersionNumber((int)$matches['Patch']) : new VersionNumber(0); if (isset($matches['PreReleaseSuffix']) && $matches['PreReleaseSuffix'] !== '') { $this->preReleaseSuffix = new PreReleaseSuffix($matches['PreReleaseSuffix']); } if (isset($matches['BuildMetadata'])) { $this->buildMetadata = new BuildMetaData($matches['BuildMetadata']); } } /** * @param string $version * * @throws InvalidVersionException */ private function ensureVersionStringIsValid($version): void { $regex = '/^v? (?P0|[1-9]\d*) \\. (?P0|[1-9]\d*) (\\. (?P0|[1-9]\d*) )? (?: - (?(?:(dev|beta|b|rc|alpha|a|patch|p|pl)\.?\d*)) )? (?: \\+ (?P[0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-@]+)*) )? $/xi'; if (\preg_match($regex, $version, $matches) !== 1) { throw new InvalidVersionException( \sprintf("Version string '%s' does not follow SemVer semantics", $version) ); } $this->parseVersion($matches); } } PK!P>13& & gfile-manager-advanced/application/svg-sanitizer/includes/phar-io/version/src/VersionConstraintValue.phpnu„[µü¤versionString = $versionString; $this->parseVersion($versionString); } public function getLabel(): string { return $this->label; } public function getBuildMetaData(): string { return $this->buildMetaData; } public function getVersionString(): string { return $this->versionString; } public function getMajor(): VersionNumber { return $this->major; } public function getMinor(): VersionNumber { return $this->minor; } public function getPatch(): VersionNumber { return $this->patch; } private function parseVersion(string $versionString): void { $this->extractBuildMetaData($versionString); $this->extractLabel($versionString); $this->stripPotentialVPrefix($versionString); $versionSegments = \explode('.', $versionString); $this->major = new VersionNumber(\is_numeric($versionSegments[0]) ? (int)$versionSegments[0] : null); $minorValue = isset($versionSegments[1]) && \is_numeric($versionSegments[1]) ? (int)$versionSegments[1] : null; $patchValue = isset($versionSegments[2]) && \is_numeric($versionSegments[2]) ? (int)$versionSegments[2] : null; $this->minor = new VersionNumber($minorValue); $this->patch = new VersionNumber($patchValue); } private function extractBuildMetaData(string &$versionString): void { if (\preg_match('/\+(.*)/', $versionString, $matches) === 1) { $this->buildMetaData = $matches[1]; $versionString = \str_replace($matches[0], '', $versionString); } } private function extractLabel(string &$versionString): void { if (\preg_match('/-(.*)/', $versionString, $matches) === 1) { $this->label = $matches[1]; $versionString = \str_replace($matches[0], '', $versionString); } } private function stripPotentialVPrefix(string &$versionString): void { if ($versionString[0] !== 'v') { return; } $versionString = \substr($versionString, 1); } } PK!.œo ^^afile-manager-advanced/application/svg-sanitizer/includes/phar-io/version/src/PreReleaseSuffix.phpnu„[µü¤ 0, 'a' => 1, 'alpha' => 1, 'b' => 2, 'beta' => 2, 'rc' => 3, 'p' => 4, 'pl' => 4, 'patch' => 4, ]; /** @var string */ private $value; /** @var int */ private $valueScore; /** @var int */ private $number = 0; /** @var string */ private $full; /** * @throws InvalidPreReleaseSuffixException */ public function __construct(string $value) { $this->parseValue($value); } public function asString(): string { return $this->full; } public function getValue(): string { return $this->value; } public function getNumber(): ?int { return $this->number; } public function isGreaterThan(PreReleaseSuffix $suffix): bool { if ($this->valueScore > $suffix->valueScore) { return true; } if ($this->valueScore < $suffix->valueScore) { return false; } return $this->getNumber() > $suffix->getNumber(); } private function mapValueToScore(string $value): int { $value = \strtolower($value); return self::valueScoreMap[$value]; } private function parseValue(string $value): void { $regex = '/-?((dev|beta|b|rc|alpha|a|patch|p|pl)\.?(\d*)).*$/i'; if (\preg_match($regex, $value, $matches) !== 1) { throw new InvalidPreReleaseSuffixException(\sprintf('Invalid label %s', $value)); } $this->full = $matches[1]; $this->value = $matches[2]; if ($matches[3] !== '') { $this->number = (int)$matches[3]; } $this->valueScore = $this->mapValueToScore($matches[2]); } } PK!LÌK¼¼ƒfile-manager-advanced/application/svg-sanitizer/includes/phar-io/version/src/constraints/SpecificMajorAndMinorVersionConstraint.phpnu„[µü¤, Sebastian Heuer , Sebastian Bergmann * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace PharIo\Version; class SpecificMajorAndMinorVersionConstraint extends AbstractVersionConstraint { /** @var int */ private $major; /** @var int */ private $minor; public function __construct(string $originalValue, int $major, int $minor) { parent::__construct($originalValue); $this->major = $major; $this->minor = $minor; } public function complies(Version $version): bool { if ($version->getMajor()->getValue() !== $this->major) { return false; } return $version->getMinor()->getValue() === $this->minor; } } PK!ÈÉ^¼„„‚file-manager-advanced/application/svg-sanitizer/includes/phar-io/version/src/constraints/GreaterThanOrEqualToVersionConstraint.phpnu„[µü¤, Sebastian Heuer , Sebastian Bergmann * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace PharIo\Version; class GreaterThanOrEqualToVersionConstraint extends AbstractVersionConstraint { /** @var Version */ private $minimalVersion; public function __construct(string $originalValue, Version $minimalVersion) { parent::__construct($originalValue); $this->minimalVersion = $minimalVersion; } public function complies(Version $version): bool { return $version->getVersionString() === $this->minimalVersion->getVersionString() || $version->isGreaterThan($this->minimalVersion); } } PK!ø¦õWíínfile-manager-advanced/application/svg-sanitizer/includes/phar-io/version/src/constraints/VersionConstraint.phpnu„[µü¤, Sebastian Heuer , Sebastian Bergmann * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace PharIo\Version; interface VersionConstraint { public function complies(Version $version): bool; public function asString(): string; } PK!oSMy¯¯vfile-manager-advanced/application/svg-sanitizer/includes/phar-io/version/src/constraints/AbstractVersionConstraint.phpnu„[µü¤, Sebastian Heuer , Sebastian Bergmann * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace PharIo\Version; abstract class AbstractVersionConstraint implements VersionConstraint { /** @var string */ private $originalValue; public function __construct(string $originalValue) { $this->originalValue = $originalValue; } public function asString(): string { return $this->originalValue; } } PK!/j-Ò××vfile-manager-advanced/application/svg-sanitizer/includes/phar-io/version/src/constraints/AndVersionConstraintGroup.phpnu„[µü¤, Sebastian Heuer , Sebastian Bergmann * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace PharIo\Version; class AndVersionConstraintGroup extends AbstractVersionConstraint { /** @var VersionConstraint[] */ private $constraints = []; /** * @param VersionConstraint[] $constraints */ public function __construct(string $originalValue, array $constraints) { parent::__construct($originalValue); $this->constraints = $constraints; } public function complies(Version $version): bool { foreach ($this->constraints as $constraint) { if (!$constraint->complies($version)) { return false; } } return true; } } PK!Ê[ @@qfile-manager-advanced/application/svg-sanitizer/includes/phar-io/version/src/constraints/AnyVersionConstraint.phpnu„[µü¤, Sebastian Heuer , Sebastian Bergmann * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace PharIo\Version; class AnyVersionConstraint implements VersionConstraint { public function complies(Version $version): bool { return true; } public function asString(): string { return '*'; } } PK!:B ŒÈÈsfile-manager-advanced/application/svg-sanitizer/includes/phar-io/version/src/constraints/ExactVersionConstraint.phpnu„[µü¤, Sebastian Heuer , Sebastian Bergmann * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace PharIo\Version; class ExactVersionConstraint extends AbstractVersionConstraint { public function complies(Version $version): bool { $other = $version->getVersionString(); if ($version->hasBuildMetaData()) { $other .= '+' . $version->getBuildMetaData()->asString(); } return $this->asString() === $other; } } PK! ýúú{file-manager-advanced/application/svg-sanitizer/includes/phar-io/version/src/constraints/SpecificMajorVersionConstraint.phpnu„[µü¤, Sebastian Heuer , Sebastian Bergmann * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace PharIo\Version; class SpecificMajorVersionConstraint extends AbstractVersionConstraint { /** @var int */ private $major; public function __construct(string $originalValue, int $major) { parent::__construct($originalValue); $this->major = $major; } public function complies(Version $version): bool { return $version->getMajor()->getValue() === $this->major; } } PK!¿‘רÿÿufile-manager-advanced/application/svg-sanitizer/includes/phar-io/version/src/constraints/OrVersionConstraintGroup.phpnu„[µü¤, Sebastian Heuer , Sebastian Bergmann * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace PharIo\Version; class OrVersionConstraintGroup extends AbstractVersionConstraint { /** @var VersionConstraint[] */ private $constraints = []; /** * @param string $originalValue * @param VersionConstraint[] $constraints */ public function __construct($originalValue, array $constraints) { parent::__construct($originalValue); $this->constraints = $constraints; } public function complies(Version $version): bool { foreach ($this->constraints as $constraint) { if ($constraint->complies($version)) { return true; } } return false; } } PK!XbpÔŠŠwfile-manager-advanced/application/svg-sanitizer/includes/phar-io/version/src/exceptions/NoPreReleaseSuffixException.phpnu„[µü¤, Sebastian Heuer , Sebastian Bergmann * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace PharIo\Version; use Throwable; interface Exception extends Throwable { } PK!|—Ê••sfile-manager-advanced/application/svg-sanitizer/includes/phar-io/version/src/exceptions/InvalidVersionException.phpnu„[µü¤, Sebastian Heuer , Sebastian Bergmann * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace PharIo\Version; final class UnsupportedVersionConstraintException extends \RuntimeException implements Exception { } PK!¹»þü��|file-manager-advanced/application/svg-sanitizer/includes/phar-io/version/src/exceptions/InvalidPreReleaseSuffixException.phpnu„[µü¤, Sebastian Heuer , Sebastian Bergmann * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace PharIo\Version; class VersionConstraintParser { /** * @throws UnsupportedVersionConstraintException */ public function parse(string $value): VersionConstraint { if (\strpos($value, '|') !== false) { return $this->handleOrGroup($value); } if (!\preg_match('/^[\^~*]?v?[\d.*]+(?:-.*)?$/i', $value)) { throw new UnsupportedVersionConstraintException( \sprintf('Version constraint %s is not supported.', $value) ); } switch ($value[0]) { case '~': return $this->handleTildeOperator($value); case '^': return $this->handleCaretOperator($value); } $constraint = new VersionConstraintValue($value); if ($constraint->getMajor()->isAny()) { return new AnyVersionConstraint(); } if ($constraint->getMinor()->isAny()) { return new SpecificMajorVersionConstraint( $constraint->getVersionString(), $constraint->getMajor()->getValue() ?? 0 ); } if ($constraint->getPatch()->isAny()) { return new SpecificMajorAndMinorVersionConstraint( $constraint->getVersionString(), $constraint->getMajor()->getValue() ?? 0, $constraint->getMinor()->getValue() ?? 0 ); } return new ExactVersionConstraint($constraint->getVersionString()); } private function handleOrGroup(string $value): OrVersionConstraintGroup { $constraints = []; foreach (\preg_split('{\s*\|\|?\s*}', \trim($value)) as $groupSegment) { $constraints[] = $this->parse(\trim($groupSegment)); } return new OrVersionConstraintGroup($value, $constraints); } private function handleTildeOperator(string $value): AndVersionConstraintGroup { $constraintValue = new VersionConstraintValue(\substr($value, 1)); if ($constraintValue->getPatch()->isAny()) { return $this->handleCaretOperator($value); } $constraints = [ new GreaterThanOrEqualToVersionConstraint( $value, new Version(\substr($value, 1)) ), new SpecificMajorAndMinorVersionConstraint( $value, $constraintValue->getMajor()->getValue() ?? 0, $constraintValue->getMinor()->getValue() ?? 0 ) ]; return new AndVersionConstraintGroup($value, $constraints); } private function handleCaretOperator(string $value): AndVersionConstraintGroup { $constraintValue = new VersionConstraintValue(\substr($value, 1)); $constraints = [ new GreaterThanOrEqualToVersionConstraint($value, new Version(\substr($value, 1))) ]; if ($constraintValue->getMajor()->getValue() === 0) { $constraints[] = new SpecificMajorAndMinorVersionConstraint( $value, $constraintValue->getMajor()->getValue() ?? 0, $constraintValue->getMinor()->getValue() ?? 0 ); } else { $constraints[] = new SpecificMajorVersionConstraint( $value, $constraintValue->getMajor()->getValue() ?? 0 ); } return new AndVersionConstraintGroup( $value, $constraints ); } } PK!J}Ór¡¡^file-manager-advanced/application/svg-sanitizer/includes/phar-io/version/src/VersionNumber.phpnu„[µü¤, Sebastian Heuer , Sebastian Bergmann * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace PharIo\Version; class VersionNumber { /** @var ?int */ private $value; public function __construct(?int $value) { $this->value = $value; } public function isAny(): bool { return $this->value === null; } public function getValue(): ?int { return $this->value; } } PK!Úñ¼9 9 Rfile-manager-advanced/application/svg-sanitizer/includes/phar-io/version/README.mdnu„[µü¤# Version Library for handling version information and constraints [![Build Status](https://travis-ci.org/phar-io/version.svg?branch=master)](https://travis-ci.org/phar-io/version) ## Installation You can add this library as a local, per-project dependency to your project using [Composer](https://getcomposer.org/): composer require phar-io/version If you only need this library during development, for instance to run your project's test suite, then you should add it as a development-time dependency: composer require --dev phar-io/version ## Version constraints A Version constraint describes a range of versions or a discrete version number. The format of version numbers follows the schema of [semantic versioning](http://semver.org): `..`. A constraint might contain an operator that describes the range. Beside the typical mathematical operators like `<=`, `>=`, there are two special operators: *Caret operator*: `^1.0` can be written as `>=1.0.0 <2.0.0` and read as »every Version within major version `1`«. *Tilde operator*: `~1.0.0` can be written as `>=1.0.0 <1.1.0` and read as »every version within minor version `1.1`. The behavior of tilde operator depends on whether a patch level version is provided or not. If no patch level is provided, tilde operator behaves like the caret operator: `~1.0` is identical to `^1.0`. ## Usage examples Parsing version constraints and check discrete versions for compliance: ```php use PharIo\Version\Version; use PharIo\Version\VersionConstraintParser; $parser = new VersionConstraintParser(); $caret_constraint = $parser->parse( '^7.0' ); $caret_constraint->complies( new Version( '7.0.17' ) ); // true $caret_constraint->complies( new Version( '7.1.0' ) ); // true $caret_constraint->complies( new Version( '6.4.34' ) ); // false $tilde_constraint = $parser->parse( '~1.1.0' ); $tilde_constraint->complies( new Version( '1.1.4' ) ); // true $tilde_constraint->complies( new Version( '1.2.0' ) ); // false ``` As of version 2.0.0, pre-release labels are supported and taken into account when comparing versions: ```php $leftVersion = new PharIo\Version\Version('3.0.0-alpha.1'); $rightVersion = new PharIo\Version\Version('3.0.0-alpha.2'); $leftVersion->isGreaterThan($rightVersion); // false $rightVersion->isGreaterThan($leftVersion); // true ``` PK!Òª &&Pfile-manager-advanced/application/svg-sanitizer/includes/phar-io/version/LICENSEnu„[µü¤Copyright (c) 2016-2017 Arne Blankerts , Sebastian Heuer and contributors All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. * Neither the name of the copyright holder nor the names of contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT * NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. PK!úX�yééVfile-manager-advanced/application/svg-sanitizer/includes/phar-io/manifest/CHANGELOG.mdnu„[µü¤# Changelog All notable changes to phar-io/manifest are documented in this file using the [Keep a CHANGELOG](http://keepachangelog.com/) principles. ## [2.0.4] - 03-03-2024 ### Changed - Make `EMail` an optional attribute for author - Stick with PHP 7.2 compatibilty - Do not use implict nullable type (thanks @sebastianbergmann), this should make things work on PHP 8.4 ## [2.0.3] - 20.07.2021 - Fixed PHP 7.2 / PHP 7.3 incompatibility introduced in previous release ## [2.0.2] - 20.07.2021 - Fixed PHP 8.1 deprecation notice ## [2.0.1] - 27.06.2020 This release now supports the use of PHP 7.2+ and ^8.0 ## [2.0.0] - 10.05.2020 This release now requires PHP 7.2+ ### Changed - Upgraded to phar-io/version 3.0 - Version strings `v1.2.3` will now be converted to valid semantic version strings `1.2.3` - Abreviated strings like `1.0` will get expaneded to `1.0.0` ### Unreleased [Unreleased]: https://github.com/phar-io/manifest/compare/2.1.0...HEAD [2.1.0]: https://github.com/phar-io/manifest/compare/2.0.3...2.1.0 [2.0.3]: https://github.com/phar-io/manifest/compare/2.0.2...2.0.3 [2.0.2]: https://github.com/phar-io/manifest/compare/2.0.1...2.0.2 [2.0.1]: https://github.com/phar-io/manifest/compare/2.0.0...2.0.1 [2.0.0]: https://github.com/phar-io/manifest/compare/1.0.1...2.0.0 [1.0.3]: https://github.com/phar-io/manifest/compare/1.0.2...1.0.3 [1.0.2]: https://github.com/phar-io/manifest/compare/1.0.1...1.0.2 [1.0.1]: https://github.com/phar-io/manifest/compare/1.0.0...1.0.1 PK!0ô½��Wfile-manager-advanced/application/svg-sanitizer/includes/phar-io/manifest/composer.jsonnu„[µü¤{ "name": "phar-io/manifest", "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)", "license": "BSD-3-Clause", "authors": [ { "name": "Arne Blankerts", "email": "arne@blankerts.de", "role": "Developer" }, { "name": "Sebastian Heuer", "email": "sebastian@phpeople.de", "role": "Developer" }, { "name": "Sebastian Bergmann", "email": "sebastian@phpunit.de", "role": "Developer" } ], "support": { "issues": "https://github.com/phar-io/manifest/issues" }, "require": { "php": "^7.2 || ^8.0", "ext-dom": "*", "ext-phar": "*", "ext-libxml": "*", "ext-xmlwriter": "*", "phar-io/version": "^3.0.1" }, "autoload": { "classmap": [ "src/" ] }, "extra": { "branch-alias": { "dev-master": "2.0.x-dev" } } } PK!‚q³»€€hfile-manager-advanced/application/svg-sanitizer/includes/phar-io/manifest/src/ManifestDocumentMapper.phpnu„[µü¤, Sebastian Heuer , Sebastian Bergmann and contributors * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. * */ namespace PharIo\Manifest; use PharIo\Version\Exception as VersionException; use PharIo\Version\Version; use PharIo\Version\VersionConstraintParser; use Throwable; use function sprintf; class ManifestDocumentMapper { public function map(ManifestDocument $document): Manifest { try { $contains = $document->getContainsElement(); $type = $this->mapType($contains); $copyright = $this->mapCopyright($document->getCopyrightElement()); $requirements = $this->mapRequirements($document->getRequiresElement()); $bundledComponents = $this->mapBundledComponents($document); return new Manifest( new ApplicationName($contains->getName()), new Version($contains->getVersion()), $type, $copyright, $requirements, $bundledComponents ); } catch (Throwable $e) { throw new ManifestDocumentMapperException($e->getMessage(), (int)$e->getCode(), $e); } } private function mapType(ContainsElement $contains): Type { switch ($contains->getType()) { case 'application': return Type::application(); case 'library': return Type::library(); case 'extension': return $this->mapExtension($contains->getExtensionElement()); } throw new ManifestDocumentMapperException( sprintf('Unsupported type %s', $contains->getType()) ); } private function mapCopyright(CopyrightElement $copyright): CopyrightInformation { $authors = new AuthorCollection(); foreach ($copyright->getAuthorElements() as $authorElement) { $authors->add( new Author( $authorElement->getName(), $authorElement->hasEMail() ? new Email($authorElement->getEmail()) : null ) ); } $licenseElement = $copyright->getLicenseElement(); $license = new License( $licenseElement->getType(), new Url($licenseElement->getUrl()) ); return new CopyrightInformation( $authors, $license ); } private function mapRequirements(RequiresElement $requires): RequirementCollection { $collection = new RequirementCollection(); $phpElement = $requires->getPHPElement(); $parser = new VersionConstraintParser; try { $versionConstraint = $parser->parse($phpElement->getVersion()); } catch (VersionException $e) { throw new ManifestDocumentMapperException( sprintf('Unsupported version constraint - %s', $e->getMessage()), (int)$e->getCode(), $e ); } $collection->add( new PhpVersionRequirement( $versionConstraint ) ); if (!$phpElement->hasExtElements()) { return $collection; } foreach ($phpElement->getExtElements() as $extElement) { $collection->add( new PhpExtensionRequirement($extElement->getName()) ); } return $collection; } private function mapBundledComponents(ManifestDocument $document): BundledComponentCollection { $collection = new BundledComponentCollection(); if (!$document->hasBundlesElement()) { return $collection; } foreach ($document->getBundlesElement()->getComponentElements() as $componentElement) { $collection->add( new BundledComponent( $componentElement->getName(), new Version( $componentElement->getVersion() ) ) ); } return $collection; } private function mapExtension(ExtensionElement $extension): Extension { try { $versionConstraint = (new VersionConstraintParser)->parse($extension->getCompatible()); return Type::extension( new ApplicationName($extension->getFor()), $versionConstraint ); } catch (VersionException $e) { throw new ManifestDocumentMapperException( sprintf('Unsupported version constraint - %s', $e->getMessage()), (int)$e->getCode(), $e ); } } } PK!¥œœhfile-manager-advanced/application/svg-sanitizer/includes/phar-io/manifest/src/values/ApplicationName.phpnu„[µü¤, Sebastian Heuer , Sebastian Bergmann and contributors * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. * */ namespace PharIo\Manifest; use function preg_match; use function sprintf; class ApplicationName { /** @var string */ private $name; public function __construct(string $name) { $this->ensureValidFormat($name); $this->name = $name; } public function asString(): string { return $this->name; } public function isEqual(ApplicationName $name): bool { return $this->name === $name->name; } private function ensureValidFormat(string $name): void { if (!preg_match('#\w/\w#', $name)) { throw new InvalidApplicationNameException( sprintf('Format of name "%s" is not valid - expected: vendor/packagename', $name), InvalidApplicationNameException::InvalidFormat ); } } } PK!‚S|à��^file-manager-advanced/application/svg-sanitizer/includes/phar-io/manifest/src/values/Email.phpnu„[µü¤, Sebastian Heuer , Sebastian Bergmann and contributors * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. * */ namespace PharIo\Manifest; use const FILTER_VALIDATE_EMAIL; use function filter_var; class Email { /** @var string */ private $email; public function __construct(string $email) { $this->ensureEmailIsValid($email); $this->email = $email; } public function asString(): string { return $this->email; } private function ensureEmailIsValid(string $url): void { if (filter_var($url, FILTER_VALIDATE_EMAIL) === false) { throw new InvalidEmailException; } } } PK!ü ÁÁvfile-manager-advanced/application/svg-sanitizer/includes/phar-io/manifest/src/values/RequirementCollectionIterator.phpnu„[µü¤, Sebastian Heuer , Sebastian Bergmann and contributors * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. * */ namespace PharIo\Manifest; use Iterator; use function count; /** @template-implements Iterator */ class RequirementCollectionIterator implements Iterator { /** @var Requirement[] */ private $requirements; /** @var int */ private $position = 0; public function __construct(RequirementCollection $requirements) { $this->requirements = $requirements->getRequirements(); } public function rewind(): void { $this->position = 0; } public function valid(): bool { return $this->position < count($this->requirements); } public function key(): int { return $this->position; } public function current(): Requirement { return $this->requirements[$this->position]; } public function next(): void { $this->position++; } } PK!×çÙðð`file-manager-advanced/application/svg-sanitizer/includes/phar-io/manifest/src/values/Library.phpnu„[µü¤, Sebastian Heuer , Sebastian Bergmann and contributors * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. * */ namespace PharIo\Manifest; class Library extends Type { public function isLibrary(): bool { return true; } } PK!Á"ë&$$nfile-manager-advanced/application/svg-sanitizer/includes/phar-io/manifest/src/values/PhpVersionRequirement.phpnu„[µü¤, Sebastian Heuer , Sebastian Bergmann and contributors * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. * */ namespace PharIo\Manifest; use PharIo\Version\VersionConstraint; class PhpVersionRequirement implements Requirement { /** @var VersionConstraint */ private $versionConstraint; public function __construct(VersionConstraint $versionConstraint) { $this->versionConstraint = $versionConstraint; } public function getVersionConstraint(): VersionConstraint { return $this->versionConstraint; } } PK!1šq¤¨¨dfile-manager-advanced/application/svg-sanitizer/includes/phar-io/manifest/src/values/Requirement.phpnu„[µü¤, Sebastian Heuer , Sebastian Bergmann and contributors * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. * */ namespace PharIo\Manifest; interface Requirement { } PK!Û(¹ìªªpfile-manager-advanced/application/svg-sanitizer/includes/phar-io/manifest/src/values/PhpExtensionRequirement.phpnu„[µü¤, Sebastian Heuer , Sebastian Bergmann and contributors * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. * */ namespace PharIo\Manifest; class PhpExtensionRequirement implements Requirement { /** @var string */ private $extension; public function __construct(string $extension) { $this->extension = $extension; } public function asString(): string { return $this->extension; } } PK!Z7'––bfile-manager-advanced/application/svg-sanitizer/includes/phar-io/manifest/src/values/Extension.phpnu„[µü¤, Sebastian Heuer , Sebastian Bergmann and contributors * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. * */ namespace PharIo\Manifest; use PharIo\Version\Version; use PharIo\Version\VersionConstraint; class Extension extends Type { /** @var ApplicationName */ private $application; /** @var VersionConstraint */ private $versionConstraint; public function __construct(ApplicationName $application, VersionConstraint $versionConstraint) { $this->application = $application; $this->versionConstraint = $versionConstraint; } public function getApplicationName(): ApplicationName { return $this->application; } public function getVersionConstraint(): VersionConstraint { return $this->versionConstraint; } public function isExtension(): bool { return true; } public function isExtensionFor(ApplicationName $name): bool { return $this->application->isEqual($name); } public function isCompatibleWith(ApplicationName $name, Version $version): bool { return $this->isExtensionFor($name) && $this->versionConstraint->complies($version); } } PK!#lÍ£««\file-manager-advanced/application/svg-sanitizer/includes/phar-io/manifest/src/values/Url.phpnu„[µü¤, Sebastian Heuer , Sebastian Bergmann and contributors * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. * */ namespace PharIo\Manifest; use const FILTER_VALIDATE_URL; use function filter_var; class Url { /** @var string */ private $url; public function __construct(string $url) { $this->ensureUrlIsValid($url); $this->url = $url; } public function asString(): string { return $this->url; } /** * @throws InvalidUrlException */ private function ensureUrlIsValid(string $url): void { if (filter_var($url, FILTER_VALIDATE_URL) === false) { throw new InvalidUrlException; } } } PK!fæÒ=øødfile-manager-advanced/application/svg-sanitizer/includes/phar-io/manifest/src/values/Application.phpnu„[µü¤, Sebastian Heuer , Sebastian Bergmann and contributors * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. * */ namespace PharIo\Manifest; class Application extends Type { public function isApplication(): bool { return true; } } PK!Çé–$¢¢sfile-manager-advanced/application/svg-sanitizer/includes/phar-io/manifest/src/values/BundledComponentCollection.phpnu„[µü¤, Sebastian Heuer , Sebastian Bergmann and contributors * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. * */ namespace PharIo\Manifest; use Countable; use IteratorAggregate; use function count; /** @template-implements IteratorAggregate */ class BundledComponentCollection implements Countable, IteratorAggregate { /** @var BundledComponent[] */ private $bundledComponents = []; public function add(BundledComponent $bundledComponent): void { $this->bundledComponents[] = $bundledComponent; } /** * @return BundledComponent[] */ public function getBundledComponents(): array { return $this->bundledComponents; } public function count(): int { return count($this->bundledComponents); } public function getIterator(): BundledComponentCollectionIterator { return new BundledComponentCollectionIterator($this); } } PK!X?ñ\\nfile-manager-advanced/application/svg-sanitizer/includes/phar-io/manifest/src/values/RequirementCollection.phpnu„[µü¤, Sebastian Heuer , Sebastian Bergmann and contributors * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. * */ namespace PharIo\Manifest; use Countable; use IteratorAggregate; use function count; /** @template-implements IteratorAggregate */ class RequirementCollection implements Countable, IteratorAggregate { /** @var Requirement[] */ private $requirements = []; public function add(Requirement $requirement): void { $this->requirements[] = $requirement; } /** * @return Requirement[] */ public function getRequirements(): array { return $this->requirements; } public function count(): int { return count($this->requirements); } public function getIterator(): RequirementCollectionIterator { return new RequirementCollectionIterator($this); } } PK!ãÂÂifile-manager-advanced/application/svg-sanitizer/includes/phar-io/manifest/src/values/AuthorCollection.phpnu„[µü¤, Sebastian Heuer , Sebastian Bergmann and contributors * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. * */ namespace PharIo\Manifest; use Countable; use IteratorAggregate; use function count; /** @template-implements IteratorAggregate */ class AuthorCollection implements Countable, IteratorAggregate { /** @var Author[] */ private $authors = []; public function add(Author $author): void { $this->authors[] = $author; } /** * @return Author[] */ public function getAuthors(): array { return $this->authors; } public function count(): int { return count($this->authors); } public function getIterator(): AuthorCollectionIterator { return new AuthorCollectionIterator($this); } } PK!÷ág- - afile-manager-advanced/application/svg-sanitizer/includes/phar-io/manifest/src/values/Manifest.phpnu„[µü¤, Sebastian Heuer , Sebastian Bergmann and contributors * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. * */ namespace PharIo\Manifest; use PharIo\Version\Version; class Manifest { /** @var ApplicationName */ private $name; /** @var Version */ private $version; /** @var Type */ private $type; /** @var CopyrightInformation */ private $copyrightInformation; /** @var RequirementCollection */ private $requirements; /** @var BundledComponentCollection */ private $bundledComponents; public function __construct(ApplicationName $name, Version $version, Type $type, CopyrightInformation $copyrightInformation, RequirementCollection $requirements, BundledComponentCollection $bundledComponents) { $this->name = $name; $this->version = $version; $this->type = $type; $this->copyrightInformation = $copyrightInformation; $this->requirements = $requirements; $this->bundledComponents = $bundledComponents; } public function getName(): ApplicationName { return $this->name; } public function getVersion(): Version { return $this->version; } public function getType(): Type { return $this->type; } public function getCopyrightInformation(): CopyrightInformation { return $this->copyrightInformation; } public function getRequirements(): RequirementCollection { return $this->requirements; } public function getBundledComponents(): BundledComponentCollection { return $this->bundledComponents; } public function isApplication(): bool { return $this->type->isApplication(); } public function isLibrary(): bool { return $this->type->isLibrary(); } public function isExtension(): bool { return $this->type->isExtension(); } public function isExtensionFor(ApplicationName $application, ?Version $version = null): bool { if (!$this->isExtension()) { return false; } /** @var Extension $type */ $type = $this->type; if ($version !== null) { return $type->isCompatibleWith($application, $version); } return $type->isExtensionFor($application); } } PK!Ý�^üü`file-manager-advanced/application/svg-sanitizer/includes/phar-io/manifest/src/values/License.phpnu„[µü¤, Sebastian Heuer , Sebastian Bergmann and contributors * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. * */ namespace PharIo\Manifest; class License { /** @var string */ private $name; /** @var Url */ private $url; public function __construct(string $name, Url $url) { $this->name = $name; $this->url = $url; } public function getName(): string { return $this->name; } public function getUrl(): Url { return $this->url; } } PK!µZ HHifile-manager-advanced/application/svg-sanitizer/includes/phar-io/manifest/src/values/BundledComponent.phpnu„[µü¤, Sebastian Heuer , Sebastian Bergmann and contributors * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. * */ namespace PharIo\Manifest; use PharIo\Version\Version; class BundledComponent { /** @var string */ private $name; /** @var Version */ private $version; public function __construct(string $name, Version $version) { $this->name = $name; $this->version = $version; } public function getName(): string { return $this->name; } public function getVersion(): Version { return $this->version; } } PK!:"æ¼ýý{file-manager-advanced/application/svg-sanitizer/includes/phar-io/manifest/src/values/BundledComponentCollectionIterator.phpnu„[µü¤, Sebastian Heuer , Sebastian Bergmann and contributors * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. * */ namespace PharIo\Manifest; use Iterator; use function count; /** @template-implements Iterator */ class BundledComponentCollectionIterator implements Iterator { /** @var BundledComponent[] */ private $bundledComponents; /** @var int */ private $position = 0; public function __construct(BundledComponentCollection $bundledComponents) { $this->bundledComponents = $bundledComponents->getBundledComponents(); } public function rewind(): void { $this->position = 0; } public function valid(): bool { return $this->position < count($this->bundledComponents); } public function key(): int { return $this->position; } public function current(): BundledComponent { return $this->bundledComponents[$this->position]; } public function next(): void { $this->position++; } } PK!õ, Sebastian Heuer , Sebastian Bergmann and contributors * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. * */ namespace PharIo\Manifest; use function sprintf; class Author { /** @var string */ private $name; /** @var null|Email */ private $email; public function __construct(string $name, ?Email $email = null) { $this->name = $name; $this->email = $email; } public function asString(): string { if (!$this->hasEmail()) { return $this->name; } return sprintf( '%s <%s>', $this->name, $this->email->asString() ); } public function getName(): string { return $this->name; } /** * @psalm-assert-if-true Email $this->email */ public function hasEmail(): bool { return $this->email !== null; } public function getEmail(): Email { if (!$this->hasEmail()) { throw new NoEmailAddressException(); } return $this->email; } } PK!<”2££]file-manager-advanced/application/svg-sanitizer/includes/phar-io/manifest/src/values/Type.phpnu„[µü¤, Sebastian Heuer , Sebastian Bergmann and contributors * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. * */ namespace PharIo\Manifest; use PharIo\Version\VersionConstraint; abstract class Type { public static function application(): Application { return new Application; } public static function library(): Library { return new Library; } public static function extension(ApplicationName $application, VersionConstraint $versionConstraint): Extension { return new Extension($application, $versionConstraint); } /** @psalm-assert-if-true Application $this */ public function isApplication(): bool { return false; } /** @psalm-assert-if-true Library $this */ public function isLibrary(): bool { return false; } /** @psalm-assert-if-true Extension $this */ public function isExtension(): bool { return false; } } PK!“û\\mfile-manager-advanced/application/svg-sanitizer/includes/phar-io/manifest/src/values/CopyrightInformation.phpnu„[µü¤, Sebastian Heuer , Sebastian Bergmann and contributors * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. * */ namespace PharIo\Manifest; class CopyrightInformation { /** @var AuthorCollection */ private $authors; /** @var License */ private $license; public function __construct(AuthorCollection $authors, License $license) { $this->authors = $authors; $this->license = $license; } public function getAuthors(): AuthorCollection { return $this->authors; } public function getLicense(): License { return $this->license; } } PK!]î=Œ……qfile-manager-advanced/application/svg-sanitizer/includes/phar-io/manifest/src/values/AuthorCollectionIterator.phpnu„[µü¤, Sebastian Heuer , Sebastian Bergmann and contributors * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. * */ namespace PharIo\Manifest; use Iterator; use function count; /** @template-implements Iterator */ class AuthorCollectionIterator implements Iterator { /** @var Author[] */ private $authors; /** @var int */ private $position = 0; public function __construct(AuthorCollection $authors) { $this->authors = $authors->getAuthors(); } public function rewind(): void { $this->position = 0; } public function valid(): bool { return $this->position < count($this->authors); } public function key(): int { return $this->position; } public function current(): Author { return $this->authors[$this->position]; } public function next(): void { $this->position++; } } PK!‚q‘Ì  `file-manager-advanced/application/svg-sanitizer/includes/phar-io/manifest/src/ManifestLoader.phpnu„[µü¤, Sebastian Heuer , Sebastian Bergmann and contributors * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. * */ namespace PharIo\Manifest; use function sprintf; class ManifestLoader { public static function fromFile(string $filename): Manifest { try { return (new ManifestDocumentMapper())->map( ManifestDocument::fromFile($filename) ); } catch (Exception $e) { throw new ManifestLoaderException( sprintf('Loading %s failed.', $filename), (int)$e->getCode(), $e ); } } public static function fromPhar(string $filename): Manifest { return self::fromFile('phar://' . $filename . '/manifest.xml'); } public static function fromString(string $manifest): Manifest { try { return (new ManifestDocumentMapper())->map( ManifestDocument::fromString($manifest) ); } catch (Exception $e) { throw new ManifestLoaderException( 'Processing string failed', (int)$e->getCode(), $e ); } } } PK!ÙY�pfile-manager-advanced/application/svg-sanitizer/includes/phar-io/manifest/src/exceptions/InvalidUrlException.phpnu„[µü¤, Sebastian Heuer , Sebastian Bergmann and contributors * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. * */ namespace PharIo\Manifest; use InvalidArgumentException; class InvalidUrlException extends InvalidArgumentException implements Exception { } PK!·Ërfile-manager-advanced/application/svg-sanitizer/includes/phar-io/manifest/src/exceptions/InvalidEmailException.phpnu„[µü¤, Sebastian Heuer , Sebastian Bergmann and contributors * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. * */ namespace PharIo\Manifest; use InvalidArgumentException; class InvalidEmailException extends InvalidArgumentException implements Exception { } PK!`'€iýý|file-manager-advanced/application/svg-sanitizer/includes/phar-io/manifest/src/exceptions/ManifestDocumentMapperException.phpnu„[µü¤, Sebastian Heuer , Sebastian Bergmann and contributors * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. * */ namespace PharIo\Manifest; use RuntimeException; class ManifestDocumentMapperException extends RuntimeException implements Exception { } PK!MüV†11|file-manager-advanced/application/svg-sanitizer/includes/phar-io/manifest/src/exceptions/InvalidApplicationNameException.phpnu„[µü¤, Sebastian Heuer , Sebastian Bergmann and contributors * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. * */ namespace PharIo\Manifest; use InvalidArgumentException; class InvalidApplicationNameException extends InvalidArgumentException implements Exception { public const InvalidFormat = 2; } PK!_Ujwfile-manager-advanced/application/svg-sanitizer/includes/phar-io/manifest/src/exceptions/ElementCollectionException.phpnu„[µü¤, Sebastian Heuer , Sebastian Bergmann and contributors * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. * */ namespace PharIo\Manifest; use InvalidArgumentException; class ElementCollectionException extends InvalidArgumentException implements Exception { } PK!#mßööufile-manager-advanced/application/svg-sanitizer/includes/phar-io/manifest/src/exceptions/ManifestElementException.phpnu„[µü¤, Sebastian Heuer , Sebastian Bergmann and contributors * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. * */ namespace PharIo\Manifest; use RuntimeException; class ManifestElementException extends RuntimeException implements Exception { } PK!œq:tfile-manager-advanced/application/svg-sanitizer/includes/phar-io/manifest/src/exceptions/NoEmailAddressException.phpnu„[µü¤, Sebastian Heuer , Sebastian Bergmann and contributors * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. * */ namespace PharIo\Manifest; use InvalidArgumentException; class NoEmailAddressException extends InvalidArgumentException implements Exception { } PK!Ž›PŒÈÈffile-manager-advanced/application/svg-sanitizer/includes/phar-io/manifest/src/exceptions/Exception.phpnu„[µü¤, Sebastian Heuer , Sebastian Bergmann and contributors * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. * */ namespace PharIo\Manifest; use Throwable; interface Exception extends Throwable { } PK!˜„Õ£ûû}file-manager-advanced/application/svg-sanitizer/includes/phar-io/manifest/src/exceptions/ManifestDocumentLoadingException.phpnu„[µü¤, Sebastian Heuer , Sebastian Bergmann and contributors * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. * */ namespace PharIo\Manifest; use LibXMLError; use function sprintf; class ManifestDocumentLoadingException extends \Exception implements Exception { /** @var LibXMLError[] */ private $libxmlErrors; /** * ManifestDocumentLoadingException constructor. * * @param LibXMLError[] $libxmlErrors */ public function __construct(array $libxmlErrors) { $this->libxmlErrors = $libxmlErrors; $first = $this->libxmlErrors[0]; parent::__construct( sprintf( '%s (Line: %d / Column: %d / File: %s)', $first->message, $first->line, $first->column, $first->file ), $first->code ); } /** * @return LibXMLError[] */ public function getLibxmlErrors(): array { return $this->libxmlErrors; } } PK!à‡ o÷÷vfile-manager-advanced/application/svg-sanitizer/includes/phar-io/manifest/src/exceptions/ManifestDocumentException.phpnu„[µü¤, Sebastian Heuer , Sebastian Bergmann and contributors * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. * */ namespace PharIo\Manifest; use RuntimeException; class ManifestDocumentException extends RuntimeException implements Exception { } PK!Ò4oôØØtfile-manager-advanced/application/svg-sanitizer/includes/phar-io/manifest/src/exceptions/ManifestLoaderException.phpnu„[µü¤, Sebastian Heuer , Sebastian Bergmann and contributors * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. * */ namespace PharIo\Manifest; class ManifestLoaderException extends \Exception implements Exception { } PK!÷Û‚¯‡‡dfile-manager-advanced/application/svg-sanitizer/includes/phar-io/manifest/src/ManifestSerializer.phpnu„[µü¤, Sebastian Heuer , Sebastian Bergmann and contributors * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. * */ namespace PharIo\Manifest; use PharIo\Version\AnyVersionConstraint; use PharIo\Version\Version; use PharIo\Version\VersionConstraint; use XMLWriter; use function count; use function file_put_contents; use function str_repeat; /** @psalm-suppress MissingConstructor */ class ManifestSerializer { /** @var XMLWriter */ private $xmlWriter; public function serializeToFile(Manifest $manifest, string $filename): void { file_put_contents( $filename, $this->serializeToString($manifest) ); } public function serializeToString(Manifest $manifest): string { $this->startDocument(); $this->addContains($manifest->getName(), $manifest->getVersion(), $manifest->getType()); $this->addCopyright($manifest->getCopyrightInformation()); $this->addRequirements($manifest->getRequirements()); $this->addBundles($manifest->getBundledComponents()); return $this->finishDocument(); } private function startDocument(): void { $xmlWriter = new XMLWriter(); $xmlWriter->openMemory(); $xmlWriter->setIndent(true); $xmlWriter->setIndentString(str_repeat(' ', 4)); $xmlWriter->startDocument('1.0', 'UTF-8'); $xmlWriter->startElement('phar'); $xmlWriter->writeAttribute('xmlns', 'https://phar.io/xml/manifest/1.0'); $this->xmlWriter = $xmlWriter; } private function finishDocument(): string { $this->xmlWriter->endElement(); $this->xmlWriter->endDocument(); return $this->xmlWriter->outputMemory(); } private function addContains(ApplicationName $name, Version $version, Type $type): void { $this->xmlWriter->startElement('contains'); $this->xmlWriter->writeAttribute('name', $name->asString()); $this->xmlWriter->writeAttribute('version', $version->getVersionString()); switch (true) { case $type->isApplication(): { $this->xmlWriter->writeAttribute('type', 'application'); break; } case $type->isLibrary(): { $this->xmlWriter->writeAttribute('type', 'library'); break; } case $type->isExtension(): { $this->xmlWriter->writeAttribute('type', 'extension'); /* @var $type Extension */ $this->addExtension( $type->getApplicationName(), $type->getVersionConstraint() ); break; } default: { $this->xmlWriter->writeAttribute('type', 'custom'); } } $this->xmlWriter->endElement(); } private function addCopyright(CopyrightInformation $copyrightInformation): void { $this->xmlWriter->startElement('copyright'); foreach ($copyrightInformation->getAuthors() as $author) { $this->xmlWriter->startElement('author'); $this->xmlWriter->writeAttribute('name', $author->getName()); $this->xmlWriter->writeAttribute('email', $author->getEmail()->asString()); $this->xmlWriter->endElement(); } $license = $copyrightInformation->getLicense(); $this->xmlWriter->startElement('license'); $this->xmlWriter->writeAttribute('type', $license->getName()); $this->xmlWriter->writeAttribute('url', $license->getUrl()->asString()); $this->xmlWriter->endElement(); $this->xmlWriter->endElement(); } private function addRequirements(RequirementCollection $requirementCollection): void { $phpRequirement = new AnyVersionConstraint(); $extensions = []; foreach ($requirementCollection as $requirement) { if ($requirement instanceof PhpVersionRequirement) { $phpRequirement = $requirement->getVersionConstraint(); continue; } if ($requirement instanceof PhpExtensionRequirement) { $extensions[] = $requirement->asString(); } } $this->xmlWriter->startElement('requires'); $this->xmlWriter->startElement('php'); $this->xmlWriter->writeAttribute('version', $phpRequirement->asString()); foreach ($extensions as $extension) { $this->xmlWriter->startElement('ext'); $this->xmlWriter->writeAttribute('name', $extension); $this->xmlWriter->endElement(); } $this->xmlWriter->endElement(); $this->xmlWriter->endElement(); } private function addBundles(BundledComponentCollection $bundledComponentCollection): void { if (count($bundledComponentCollection) === 0) { return; } $this->xmlWriter->startElement('bundles'); foreach ($bundledComponentCollection as $bundledComponent) { $this->xmlWriter->startElement('component'); $this->xmlWriter->writeAttribute('name', $bundledComponent->getName()); $this->xmlWriter->writeAttribute('version', $bundledComponent->getVersion()->getVersionString()); $this->xmlWriter->endElement(); } $this->xmlWriter->endElement(); } private function addExtension(ApplicationName $applicationName, VersionConstraint $versionConstraint): void { $this->xmlWriter->startElement('extension'); $this->xmlWriter->writeAttribute('for', $applicationName->asString()); $this->xmlWriter->writeAttribute('compatible', $versionConstraint->asString()); $this->xmlWriter->endElement(); } } PK!aÇÉΉ‰efile-manager-advanced/application/svg-sanitizer/includes/phar-io/manifest/src/xml/ContainsElement.phpnu„[µü¤, Sebastian Heuer , Sebastian Bergmann and contributors * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. * */ namespace PharIo\Manifest; class ContainsElement extends ManifestElement { public function getName(): string { return $this->getAttributeValue('name'); } public function getVersion(): string { return $this->getAttributeValue('version'); } public function getType(): string { return $this->getAttributeValue('type'); } public function getExtensionElement(): ExtensionElement { return new ExtensionElement( $this->getChildByName('extension') ); } } PK!‘‰}zzdfile-manager-advanced/application/svg-sanitizer/includes/phar-io/manifest/src/xml/BundlesElement.phpnu„[µü¤, Sebastian Heuer , Sebastian Bergmann and contributors * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. * */ namespace PharIo\Manifest; class BundlesElement extends ManifestElement { public function getComponentElements(): ComponentElementCollection { return new ComponentElementCollection( $this->getChildrenByName('component') ); } } PK!(æ7äSSmfile-manager-advanced/application/svg-sanitizer/includes/phar-io/manifest/src/xml/AuthorElementCollection.phpnu„[µü¤, Sebastian Heuer , Sebastian Bergmann and contributors * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. * */ namespace PharIo\Manifest; class AuthorElementCollection extends ElementCollection { public function current(): AuthorElement { return new AuthorElement( $this->getCurrentElement() ); } } PK!Ït)T  ffile-manager-advanced/application/svg-sanitizer/includes/phar-io/manifest/src/xml/CopyrightElement.phpnu„[µü¤, Sebastian Heuer , Sebastian Bergmann and contributors * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. * */ namespace PharIo\Manifest; class CopyrightElement extends ManifestElement { public function getAuthorElements(): AuthorElementCollection { return new AuthorElementCollection( $this->getChildrenByName('author') ); } public function getLicenseElement(): LicenseElement { return new LicenseElement( $this->getChildByName('license') ); } } PK!ªpûnnefile-manager-advanced/application/svg-sanitizer/includes/phar-io/manifest/src/xml/ManifestElement.phpnu„[µü¤, Sebastian Heuer , Sebastian Bergmann and contributors * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. * */ namespace PharIo\Manifest; use DOMElement; use DOMNodeList; use function sprintf; class ManifestElement { public const XMLNS = 'https://phar.io/xml/manifest/1.0'; /** @var DOMElement */ private $element; public function __construct(DOMElement $element) { $this->element = $element; } protected function getAttributeValue(string $name): string { if (!$this->element->hasAttribute($name)) { throw new ManifestElementException( sprintf( 'Attribute %s not set on element %s', $name, $this->element->localName ) ); } return $this->element->getAttribute($name); } protected function hasAttribute(string $name): bool { return $this->element->hasAttribute($name); } protected function getChildByName(string $elementName): DOMElement { $element = $this->element->getElementsByTagNameNS(self::XMLNS, $elementName)->item(0); if (!$element instanceof DOMElement) { throw new ManifestElementException( sprintf('Element %s missing', $elementName) ); } return $element; } protected function getChildrenByName(string $elementName): DOMNodeList { $elementList = $this->element->getElementsByTagNameNS(self::XMLNS, $elementName); if ($elementList->length === 0) { throw new ManifestElementException( sprintf('Element(s) %s missing', $elementName) ); } return $elementList; } protected function hasChild(string $elementName): bool { return $this->element->getElementsByTagNameNS(self::XMLNS, $elementName)->length !== 0; } } PK!¬ïJJjfile-manager-advanced/application/svg-sanitizer/includes/phar-io/manifest/src/xml/ExtElementCollection.phpnu„[µü¤, Sebastian Heuer , Sebastian Bergmann and contributors * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. * */ namespace PharIo\Manifest; class ExtElementCollection extends ElementCollection { public function current(): ExtElement { return new ExtElement( $this->getCurrentElement() ); } } PK!Áüãë`file-manager-advanced/application/svg-sanitizer/includes/phar-io/manifest/src/xml/ExtElement.phpnu„[µü¤, Sebastian Heuer , Sebastian Bergmann and contributors * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. * */ namespace PharIo\Manifest; class ExtElement extends ManifestElement { public function getName(): string { return $this->getAttributeValue('name'); } } PK!©wO`file-manager-advanced/application/svg-sanitizer/includes/phar-io/manifest/src/xml/PhpElement.phpnu„[µü¤, Sebastian Heuer , Sebastian Bergmann and contributors * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. * */ namespace PharIo\Manifest; class PhpElement extends ManifestElement { public function getVersion(): string { return $this->getAttributeValue('version'); } public function hasExtElements(): bool { return $this->hasChild('ext'); } public function getExtElements(): ExtElementCollection { return new ExtElementCollection( $this->getChildrenByName('ext') ); } } PK!ç ²LËËgfile-manager-advanced/application/svg-sanitizer/includes/phar-io/manifest/src/xml/ElementCollection.phpnu„[µü¤, Sebastian Heuer , Sebastian Bergmann and contributors * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. * */ namespace PharIo\Manifest; use DOMElement; use DOMNodeList; use Iterator; use ReturnTypeWillChange; use function count; use function get_class; use function sprintf; /** @template-implements Iterator */ abstract class ElementCollection implements Iterator { /** @var DOMElement[] */ private $nodes = []; /** @var int */ private $position; public function __construct(DOMNodeList $nodeList) { $this->position = 0; $this->importNodes($nodeList); } #[ReturnTypeWillChange] abstract public function current(); public function next(): void { $this->position++; } public function key(): int { return $this->position; } public function valid(): bool { return $this->position < count($this->nodes); } public function rewind(): void { $this->position = 0; } protected function getCurrentElement(): DOMElement { return $this->nodes[$this->position]; } private function importNodes(DOMNodeList $nodeList): void { foreach ($nodeList as $node) { if (!$node instanceof DOMElement) { throw new ElementCollectionException( sprintf('\DOMElement expected, got \%s', get_class($node)) ); } $this->nodes[] = $node; } } } PK!6ž \\pfile-manager-advanced/application/svg-sanitizer/includes/phar-io/manifest/src/xml/ComponentElementCollection.phpnu„[µü¤, Sebastian Heuer , Sebastian Bergmann and contributors * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. * */ namespace PharIo\Manifest; class ComponentElementCollection extends ElementCollection { public function current(): ComponentElement { return new ComponentElement( $this->getCurrentElement() ); } } PK!�¹Ü—KKefile-manager-advanced/application/svg-sanitizer/includes/phar-io/manifest/src/xml/RequiresElement.phpnu„[µü¤, Sebastian Heuer , Sebastian Bergmann and contributors * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. * */ namespace PharIo\Manifest; class RequiresElement extends ManifestElement { public function getPHPElement(): PhpElement { return new PhpElement( $this->getChildByName('php') ); } } PK!9ÑS ffile-manager-advanced/application/svg-sanitizer/includes/phar-io/manifest/src/xml/ManifestDocument.phpnu„[µü¤, Sebastian Heuer , Sebastian Bergmann and contributors * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. * */ namespace PharIo\Manifest; use DOMDocument; use DOMElement; use Throwable; use function count; use function file_get_contents; use function is_file; use function libxml_clear_errors; use function libxml_get_errors; use function libxml_use_internal_errors; use function sprintf; class ManifestDocument { public const XMLNS = 'https://phar.io/xml/manifest/1.0'; /** @var DOMDocument */ private $dom; public static function fromFile(string $filename): ManifestDocument { if (!is_file($filename)) { throw new ManifestDocumentException( sprintf('File "%s" not found', $filename) ); } return self::fromString( file_get_contents($filename) ); } public static function fromString(string $xmlString): ManifestDocument { $prev = libxml_use_internal_errors(true); libxml_clear_errors(); try { $dom = new DOMDocument(); $dom->loadXML($xmlString); $errors = libxml_get_errors(); libxml_use_internal_errors($prev); } catch (Throwable $t) { throw new ManifestDocumentException($t->getMessage(), 0, $t); } if (count($errors) !== 0) { throw new ManifestDocumentLoadingException($errors); } return new self($dom); } private function __construct(DOMDocument $dom) { $this->ensureCorrectDocumentType($dom); $this->dom = $dom; } public function getContainsElement(): ContainsElement { return new ContainsElement( $this->fetchElementByName('contains') ); } public function getCopyrightElement(): CopyrightElement { return new CopyrightElement( $this->fetchElementByName('copyright') ); } public function getRequiresElement(): RequiresElement { return new RequiresElement( $this->fetchElementByName('requires') ); } public function hasBundlesElement(): bool { return $this->dom->getElementsByTagNameNS(self::XMLNS, 'bundles')->length === 1; } public function getBundlesElement(): BundlesElement { return new BundlesElement( $this->fetchElementByName('bundles') ); } private function ensureCorrectDocumentType(DOMDocument $dom): void { $root = $dom->documentElement; if ($root->localName !== 'phar' || $root->namespaceURI !== self::XMLNS) { throw new ManifestDocumentException('Not a phar.io manifest document'); } } private function fetchElementByName(string $elementName): DOMElement { $element = $this->dom->getElementsByTagNameNS(self::XMLNS, $elementName)->item(0); if (!$element instanceof DOMElement) { throw new ManifestDocumentException( sprintf('Element %s missing', $elementName) ); } return $element; } } PK!¸þÞ2ÚÚcfile-manager-advanced/application/svg-sanitizer/includes/phar-io/manifest/src/xml/AuthorElement.phpnu„[µü¤, Sebastian Heuer , Sebastian Bergmann and contributors * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. * */ namespace PharIo\Manifest; class AuthorElement extends ManifestElement { public function getName(): string { return $this->getAttributeValue('name'); } public function getEmail(): string { return $this->getAttributeValue('email'); } public function hasEMail(): bool { return $this->hasAttribute('email'); } } PK!ôzõjŠŠffile-manager-advanced/application/svg-sanitizer/includes/phar-io/manifest/src/xml/ExtensionElement.phpnu„[µü¤, Sebastian Heuer , Sebastian Bergmann and contributors * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. * */ namespace PharIo\Manifest; class ExtensionElement extends ManifestElement { public function getFor(): string { return $this->getAttributeValue('for'); } public function getCompatible(): string { return $this->getAttributeValue('compatible'); } } PK!$Sg††ffile-manager-advanced/application/svg-sanitizer/includes/phar-io/manifest/src/xml/ComponentElement.phpnu„[µü¤, Sebastian Heuer , Sebastian Bergmann and contributors * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. * */ namespace PharIo\Manifest; class ComponentElement extends ManifestElement { public function getName(): string { return $this->getAttributeValue('name'); } public function getVersion(): string { return $this->getAttributeValue('version'); } } PK!t²TX||dfile-manager-advanced/application/svg-sanitizer/includes/phar-io/manifest/src/xml/LicenseElement.phpnu„[µü¤, Sebastian Heuer , Sebastian Bergmann and contributors * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. * */ namespace PharIo\Manifest; class LicenseElement extends ManifestElement { public function getType(): string { return $this->getAttributeValue('type'); } public function getUrl(): string { return $this->getAttributeValue('url'); } } PK! £Ð{file-manager-advanced/application/svg-sanitizer/includes/phar-io/manifest/tools/php-cs-fixer.d/PhpdocSingleLineVarFixer.phpnu„[µü¤isTokenKindFound(T_DOC_COMMENT); } public function isRisky(): bool { return false; } public function fix(\SplFileInfo $file, Tokens $tokens): void { foreach($tokens as $index => $token) { if (!$token->isGivenKind(T_DOC_COMMENT)) { continue; } if (\stripos($token->getContent(), '@var') === false) { continue; } if (preg_match('#^/\*\*[\s\*]+(@var[^\r\n]+)[\s\*]*\*\/$#u', $token->getContent(), $matches) !== 1) { continue; } $newContent = '/** ' . \rtrim($matches[1]) . ' */'; if ($newContent === $token->getContent()) { continue; } $tokens[$index] = new Token([T_DOC_COMMENT, $newContent]); } } public function getPriority(): int { return 0; } public function getName(): string { return 'PharIo/phpdoc_single_line_var_fixer'; } public function supports(\SplFileInfo $file): bool { return true; } } PK!ÚˆU•77ifile-manager-advanced/application/svg-sanitizer/includes/phar-io/manifest/tools/php-cs-fixer.d/header.txtnu„[µü¤This file is part of PharIo\Manifest. Copyright (c) Arne Blankerts , Sebastian Heuer , Sebastian Bergmann and contributors For the full copyright and license information, please view the LICENSE file that was distributed with this source code. PK!ù¿•Sfile-manager-advanced/application/svg-sanitizer/includes/phar-io/manifest/README.mdnu„[µü¤# Manifest Component for reading [phar.io](https://phar.io/) manifest information from a [PHP Archive (PHAR)](http://php.net/phar). ## Installation You can add this library as a local, per-project dependency to your project using [Composer](https://getcomposer.org/): composer require phar-io/manifest If you only need this library during development, for instance to run your project's test suite, then you should add it as a development-time dependency: composer require --dev phar-io/manifest ## Usage Examples ### Read from `manifest.xml` ```php use PharIo\Manifest\ManifestLoader; use PharIo\Manifest\ManifestSerializer; $manifest = ManifestLoader::fromFile('manifest.xml'); var_dump($manifest); echo (new ManifestSerializer)->serializeToString($manifest); ```
Output ```shell object(PharIo\Manifest\Manifest)#14 (6) { ["name":"PharIo\Manifest\Manifest":private]=> object(PharIo\Manifest\ApplicationName)#10 (1) { ["name":"PharIo\Manifest\ApplicationName":private]=> string(12) "some/library" } ["version":"PharIo\Manifest\Manifest":private]=> object(PharIo\Version\Version)#12 (5) { ["originalVersionString":"PharIo\Version\Version":private]=> string(5) "1.0.0" ["major":"PharIo\Version\Version":private]=> object(PharIo\Version\VersionNumber)#13 (1) { ["value":"PharIo\Version\VersionNumber":private]=> int(1) } ["minor":"PharIo\Version\Version":private]=> object(PharIo\Version\VersionNumber)#23 (1) { ["value":"PharIo\Version\VersionNumber":private]=> int(0) } ["patch":"PharIo\Version\Version":private]=> object(PharIo\Version\VersionNumber)#22 (1) { ["value":"PharIo\Version\VersionNumber":private]=> int(0) } ["preReleaseSuffix":"PharIo\Version\Version":private]=> NULL } ["type":"PharIo\Manifest\Manifest":private]=> object(PharIo\Manifest\Library)#6 (0) { } ["copyrightInformation":"PharIo\Manifest\Manifest":private]=> object(PharIo\Manifest\CopyrightInformation)#19 (2) { ["authors":"PharIo\Manifest\CopyrightInformation":private]=> object(PharIo\Manifest\AuthorCollection)#9 (1) { ["authors":"PharIo\Manifest\AuthorCollection":private]=> array(1) { [0]=> object(PharIo\Manifest\Author)#15 (2) { ["name":"PharIo\Manifest\Author":private]=> string(13) "Reiner Zufall" ["email":"PharIo\Manifest\Author":private]=> object(PharIo\Manifest\Email)#16 (1) { ["email":"PharIo\Manifest\Email":private]=> string(16) "reiner@zufall.de" } } } } ["license":"PharIo\Manifest\CopyrightInformation":private]=> object(PharIo\Manifest\License)#11 (2) { ["name":"PharIo\Manifest\License":private]=> string(12) "BSD-3-Clause" ["url":"PharIo\Manifest\License":private]=> object(PharIo\Manifest\Url)#18 (1) { ["url":"PharIo\Manifest\Url":private]=> string(26) "https://domain.tld/LICENSE" } } } ["requirements":"PharIo\Manifest\Manifest":private]=> object(PharIo\Manifest\RequirementCollection)#17 (1) { ["requirements":"PharIo\Manifest\RequirementCollection":private]=> array(1) { [0]=> object(PharIo\Manifest\PhpVersionRequirement)#20 (1) { ["versionConstraint":"PharIo\Manifest\PhpVersionRequirement":private]=> object(PharIo\Version\SpecificMajorAndMinorVersionConstraint)#24 (3) { ["originalValue":"PharIo\Version\AbstractVersionConstraint":private]=> string(3) "7.0" ["major":"PharIo\Version\SpecificMajorAndMinorVersionConstraint":private]=> int(7) ["minor":"PharIo\Version\SpecificMajorAndMinorVersionConstraint":private]=> int(0) } } } } ["bundledComponents":"PharIo\Manifest\Manifest":private]=> object(PharIo\Manifest\BundledComponentCollection)#8 (1) { ["bundledComponents":"PharIo\Manifest\BundledComponentCollection":private]=> array(0) { } } } ```
### Create via API ```php $bundled = new \PharIo\Manifest\BundledComponentCollection(); $bundled->add( new \PharIo\Manifest\BundledComponent('vendor/packageA', new \PharIo\Version\Version('1.2.3-dev') ) ); $manifest = new PharIo\Manifest\Manifest( new \PharIo\Manifest\ApplicationName('vendor/package'), new \PharIo\Version\Version('1.0.0'), new \PharIo\Manifest\Library(), new \PharIo\Manifest\CopyrightInformation( new \PharIo\Manifest\AuthorCollection(), new \PharIo\Manifest\License( 'BSD-3-Clause', new \PharIo\Manifest\Url('https://spdx.org/licenses/BSD-3-Clause.html') ) ), new \PharIo\Manifest\RequirementCollection(), $bundled ); echo (new ManifestSerializer)->serializeToString($manifest); ```
Output ```xml ```
PK!º\Ñ||Vfile-manager-advanced/application/svg-sanitizer/includes/phar-io/manifest/manifest.xsdnu„[µü¤ PK!÷þp``Qfile-manager-advanced/application/svg-sanitizer/includes/phar-io/manifest/LICENSEnu„[µü¤Phar.io - Manifest Copyright (c) 2016-2019 Arne Blankerts , Sebastian Heuer , Sebastian Bergmann , and contributors All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. * Neither the name of Arne Blankerts nor the names of contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT * NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. PK!_cOSôôbfile-manager-advanced/application/svg-sanitizer/includes/phar-io/manifest/.github/workflows/ci.ymlnu„[µü¤name: "CI" on: push: branches: - "master" pull_request: null jobs: qa: name: "QA" runs-on: "ubuntu-latest" steps: - name: "Checkout" uses: "actions/checkout@v3.5.2" - name: "Set up PHP" uses: "shivammathur/setup-php@2.25.1" with: coverage: "none" php-version: "8.0" tools: "phive" - name: "Install dependencies with composer" run: "composer install --no-interaction --optimize-autoloader --prefer-dist" - name: "Install dependencies with phive" env: GITHUB_AUTH_TOKEN: ${{ secrets.GITHUB_TOKEN }} run: "ant install-tools" - name: "Run php-cs-fixer" run: "ant php-cs-fixer" - name: "Run psalm" run: "ant psalm" tests: name: "Tests" runs-on: "ubuntu-latest" strategy: fail-fast: false matrix: php-versions: - "7.2" - "7.3" - "7.4" - "8.0" - "8.1" - "8.2" steps: - name: "Checkout" uses: "actions/checkout@v3.5.2" - name: "Set up PHP" uses: "shivammathur/setup-php@2.25.1" env: COMPOSER_TOKEN: "${{ secrets.GITHUB_TOKEN }}" with: coverage: "pcov" extensions: "${{ env.extensions }}" ini-values: "display_errors=On, error_reporting=-1, memory_limit=2G" php-version: "${{ matrix.php-versions }}" tools: "phive" - name: "Install dependencies with composer" run: "composer install --no-interaction --optimize-autoloader --prefer-dist" - name: "Install dependencies with phive" env: GITHUB_AUTH_TOKEN: ${{ secrets.GITHUB_TOKEN }} run: "ant install-tools" - name: "Run PHPUnit" run: "tools/phpunit --coverage-clover build/logs/clover.xml" - name: "Send code coverage report to codecov.io" uses: "codecov/codecov-action@v3.1.4" with: files: "build/logs/clover.xml" PK!ÁÃîÂAA]file-manager-advanced/application/svg-sanitizer/includes/phar-io/manifest/.github/FUNDING.ymlnu„[µü¤# These are supported funding model platforms github: [theseer] PK!Ê.1ÿ ÿ Wfile-manager-advanced/application/svg-sanitizer/includes/phar-io/manifest/composer.locknu„[µü¤{ "_readme": [ "This file locks the dependencies of your project to a known state", "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], "content-hash": "279b3c4fe44357abd924fdcc0cfa5664", "packages": [ { "name": "phar-io/version", "version": "3.2.1", "source": { "type": "git", "url": "https://github.com/phar-io/version.git", "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/phar-io/version/zipball/4f7fd7836c6f332bb2933569e566a0d6c4cbed74", "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74", "shasum": "" }, "require": { "php": "^7.2 || ^8.0" }, "type": "library", "autoload": { "classmap": [ "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "BSD-3-Clause" ], "authors": [ { "name": "Arne Blankerts", "email": "arne@blankerts.de", "role": "Developer" }, { "name": "Sebastian Heuer", "email": "sebastian@phpeople.de", "role": "Developer" }, { "name": "Sebastian Bergmann", "email": "sebastian@phpunit.de", "role": "Developer" } ], "description": "Library for handling version information and constraints", "support": { "issues": "https://github.com/phar-io/version/issues", "source": "https://github.com/phar-io/version/tree/3.2.1" }, "time": "2022-02-21T01:04:05+00:00" } ], "packages-dev": [], "aliases": [], "minimum-stability": "stable", "stability-flags": [], "prefer-stable": false, "prefer-lowest": false, "platform": { "php": "^7.2 || ^8.0", "ext-dom": "*", "ext-phar": "*", "ext-libxml": "*", "ext-xmlwriter": "*" }, "platform-dev": [], "plugin-api-version": "2.3.0" } PK!û’ùnq/q/`file-manager-advanced/application/svg-sanitizer/includes/phar-io/manifest/.php-cs-fixer.dist.phpnu„[µü¤registerCustomFixers([ new \PharIo\CSFixer\PhpdocSingleLineVarFixer() ]) ->setRiskyAllowed(true) ->setRules( [ 'PharIo/phpdoc_single_line_var_fixer' => true, 'align_multiline_comment' => true, 'array_indentation' => true, 'array_syntax' => ['syntax' => 'short'], 'binary_operator_spaces' => [ 'operators' => [ '=' => 'align', '=>' => 'align', ], ], 'blank_line_after_namespace' => true, 'blank_line_after_opening_tag' => false, 'blank_line_before_statement' => [ 'statements' => [ 'break', 'continue', 'declare', 'do', 'for', 'foreach', 'if', 'include', 'include_once', 'require', 'require_once', 'return', 'switch', 'throw', 'try', 'while', 'yield', ], ], 'braces' => [ 'allow_single_line_closure' => false, 'position_after_anonymous_constructs' => 'same', 'position_after_control_structures' => 'same', 'position_after_functions_and_oop_constructs' => 'same' ], 'cast_spaces' => ['space' => 'none'], // This fixer removes the blank line at class start, no way to disable that, so we disable the fixer :( //'class_attributes_separation' => ['elements' => ['const', 'method', 'property']], 'combine_consecutive_issets' => true, 'combine_consecutive_unsets' => true, 'compact_nullable_typehint' => true, 'concat_space' => ['spacing' => 'one'], 'date_time_immutable' => true, 'declare_equal_normalize' => ['space' => 'single'], 'declare_strict_types' => true, 'dir_constant' => true, 'elseif' => true, 'encoding' => true, 'full_opening_tag' => true, 'fully_qualified_strict_types' => true, 'function_declaration' => [ 'closure_function_spacing' => 'one' ], 'global_namespace_import' => [ 'import_classes' => true, 'import_constants' => true, 'import_functions' => true, ], 'header_comment' => ['header' => $header, 'separate' => 'none'], 'indentation_type' => true, 'is_null' => true, 'line_ending' => true, 'list_syntax' => ['syntax' => 'short'], 'logical_operators' => true, 'lowercase_cast' => true, 'constant_case' => ['case' => 'lower'], 'lowercase_keywords' => true, 'lowercase_static_reference' => true, 'magic_constant_casing' => true, 'method_argument_space' => ['on_multiline' => 'ensure_fully_multiline'], 'modernize_types_casting' => true, 'multiline_comment_opening_closing' => true, 'multiline_whitespace_before_semicolons' => true, 'new_with_braces' => false, 'no_alias_functions' => true, 'no_alternative_syntax' => true, 'no_blank_lines_after_class_opening' => false, 'no_blank_lines_after_phpdoc' => true, 'no_blank_lines_before_namespace' => true, 'no_closing_tag' => true, 'no_empty_comment' => true, 'no_empty_phpdoc' => true, 'no_empty_statement' => true, 'no_extra_blank_lines' => true, 'no_homoglyph_names' => true, 'no_leading_import_slash' => true, 'no_leading_namespace_whitespace' => true, 'no_mixed_echo_print' => ['use' => 'print'], 'no_multiline_whitespace_around_double_arrow' => true, 'no_null_property_initialization' => true, 'no_php4_constructor' => true, 'no_short_bool_cast' => true, 'echo_tag_syntax' => ['format' => 'long'], 'no_singleline_whitespace_before_semicolons' => true, 'no_spaces_after_function_name' => true, 'no_spaces_inside_parenthesis' => true, 'no_superfluous_elseif' => true, 'no_superfluous_phpdoc_tags' => true, 'no_trailing_comma_in_list_call' => true, 'no_trailing_comma_in_singleline_array' => true, 'no_trailing_whitespace' => true, 'no_trailing_whitespace_in_comment' => true, 'no_unneeded_control_parentheses' => false, 'no_unneeded_curly_braces' => false, 'no_unneeded_final_method' => true, 'no_unreachable_default_argument_value' => true, 'no_unset_on_property' => true, 'no_unused_imports' => true, 'no_useless_else' => true, 'no_useless_return' => true, 'no_whitespace_before_comma_in_array' => true, 'no_whitespace_in_blank_line' => true, 'non_printable_character' => true, 'normalize_index_brace' => true, 'object_operator_without_whitespace' => true, 'ordered_class_elements' => [ 'order' => [ 'use_trait', 'constant_public', 'constant_protected', 'constant_private', 'property_public_static', 'property_protected_static', 'property_private_static', 'property_public', 'property_protected', 'property_private', 'method_public_static', 'construct', 'destruct', 'magic', 'phpunit', 'method_public', 'method_protected', 'method_private', 'method_protected_static', 'method_private_static', ], ], 'ordered_imports' => [ 'imports_order' => [ PhpCsFixer\Fixer\Import\OrderedImportsFixer::IMPORT_TYPE_CLASS, PhpCsFixer\Fixer\Import\OrderedImportsFixer::IMPORT_TYPE_CONST, PhpCsFixer\Fixer\Import\OrderedImportsFixer::IMPORT_TYPE_FUNCTION, ] ], 'phpdoc_add_missing_param_annotation' => true, 'phpdoc_align' => true, 'phpdoc_annotation_without_dot' => true, 'phpdoc_indent' => true, 'phpdoc_no_access' => true, 'phpdoc_no_empty_return' => true, 'phpdoc_no_package' => true, 'phpdoc_order' => true, 'phpdoc_return_self_reference' => true, 'phpdoc_scalar' => true, 'phpdoc_separation' => true, 'phpdoc_single_line_var_spacing' => true, 'phpdoc_to_comment' => true, 'phpdoc_trim' => true, 'phpdoc_trim_consecutive_blank_line_separation' => true, 'phpdoc_types' => ['groups' => ['simple', 'meta']], 'phpdoc_types_order' => true, 'phpdoc_to_return_type' => true, 'phpdoc_var_without_name' => true, 'pow_to_exponentiation' => true, 'protected_to_private' => true, 'return_assignment' => true, 'return_type_declaration' => ['space_before' => 'none'], 'self_accessor' => false, 'semicolon_after_instruction' => true, 'set_type_to_cast' => true, 'short_scalar_cast' => true, 'simplified_null_return' => true, 'single_blank_line_at_eof' => true, 'single_import_per_statement' => true, 'single_line_after_imports' => true, 'single_quote' => true, 'standardize_not_equals' => true, 'ternary_to_null_coalescing' => true, 'trailing_comma_in_multiline' => false, 'trim_array_spaces' => true, 'unary_operator_spaces' => true, 'visibility_required' => [ 'elements' => [ 'const', 'method', 'property', ], ], 'void_return' => true, 'whitespace_after_comma_in_array' => true, 'yoda_style' => false ] ) ->setFinder( PhpCsFixer\Finder::create() ->files() ->in(__DIR__ . '/build') ->in(__DIR__ . '/src') ->in(__DIR__ . '/tests') ->notName('autoload.php') ); PK!¢/\??Wfile-manager-advanced/application/svg-sanitizer/includes/theseer/tokenizer/CHANGELOG.mdnu„[µü¤# Changelog All notable changes to Tokenizer are documented in this file using the [Keep a CHANGELOG](http://keepachangelog.com/) principles. ## [1.2.3] - 2024-03-03 ### Changed * Do not use implicitly nullable parameters ## [1.2.2] - 2023-11-20 ### Fixed * [#18](https://github.com/theseer/tokenizer/issues/18): Tokenizer fails on protobuf metadata files ## [1.2.1] - 2021-07-28 ### Fixed * [#13](https://github.com/theseer/tokenizer/issues/13): Fatal error when tokenizing files that contain only a single empty line ## [1.2.0] - 2020-07-13 This release is now PHP 8.0 compliant. ### Fixed * Whitespace handling in general (only noticable in the intermediate `TokenCollection`) is now consitent ### Changed * Updated `Tokenizer` to deal with changed whitespace handling in PHP 8.0 The XMLSerializer was unaffected. ## [1.1.3] - 2019-06-14 ### Changed * Ensure XMLSerializer can deal with empty token collections ### Fixed * [#2](https://github.com/theseer/tokenizer/issues/2): Fatal error in infection / phpunit ## [1.1.2] - 2019-04-04 ### Changed * Reverted PHPUnit 8 test update to stay PHP 7.0 compliant ## [1.1.1] - 2019-04-03 ### Fixed * [#1](https://github.com/theseer/tokenizer/issues/1): Empty file causes invalid array read ### Changed * Tests should now be PHPUnit 8 compliant ## [1.1.0] - 2017-04-07 ### Added * Allow use of custom namespace for XML serialization ## [1.0.0] - 2017-04-05 Initial Release [1.2.3]: https://github.com/theseer/tokenizer/compare/1.2.2...1.2.3 [1.2.2]: https://github.com/theseer/tokenizer/compare/1.2.1...1.2.2 [1.2.1]: https://github.com/theseer/tokenizer/compare/1.2.0...1.2.1 [1.2.0]: https://github.com/theseer/tokenizer/compare/1.1.3...1.2.0 [1.1.3]: https://github.com/theseer/tokenizer/compare/1.1.2...1.1.3 [1.1.2]: https://github.com/theseer/tokenizer/compare/1.1.1...1.1.2 [1.1.1]: https://github.com/theseer/tokenizer/compare/1.1.0...1.1.1 [1.1.0]: https://github.com/theseer/tokenizer/compare/1.0.0...1.1.0 [1.0.0]: https://github.com/theseer/tokenizer/compare/b2493e57de80c1b7414219b28503fa5c6b4d0a98...1.0.0 PK!Íx‹R22Xfile-manager-advanced/application/svg-sanitizer/includes/theseer/tokenizer/composer.jsonnu„[µü¤{ "name": "theseer/tokenizer", "description": "A small library for converting tokenized PHP source code into XML and potentially other formats", "license": "BSD-3-Clause", "authors": [ { "name": "Arne Blankerts", "email": "arne@blankerts.de", "role": "Developer" } ], "support": { "issues": "https://github.com/theseer/tokenizer/issues" }, "require": { "php": "^7.2 || ^8.0", "ext-xmlwriter": "*", "ext-dom": "*", "ext-tokenizer": "*" }, "autoload": { "classmap": [ "src/" ] } } PK!§ºuçttkfile-manager-advanced/application/svg-sanitizer/includes/theseer/tokenizer/src/TokenCollectionException.phpnu„[µü¤ensureValidUri($value); $this->value = $value; } public function asString(): string { return $this->value; } private function ensureValidUri($value): void { if (\strpos($value, ':') === false) { throw new NamespaceUriException( \sprintf("Namespace URI '%s' must contain at least one colon", $value) ); } } } PK!‡]ÌRïï`file-manager-advanced/application/svg-sanitizer/includes/theseer/tokenizer/src/XMLSerializer.phpnu„[µü¤xmlns = $xmlns; } public function toDom(TokenCollection $tokens): DOMDocument { $dom = new DOMDocument(); $dom->preserveWhiteSpace = false; $dom->loadXML($this->toXML($tokens)); return $dom; } public function toXML(TokenCollection $tokens): string { $this->writer = new \XMLWriter(); $this->writer->openMemory(); $this->writer->setIndent(true); $this->writer->startDocument(); $this->writer->startElement('source'); $this->writer->writeAttribute('xmlns', $this->xmlns->asString()); if (\count($tokens) > 0) { $this->writer->startElement('line'); $this->writer->writeAttribute('no', '1'); $this->previousToken = $tokens[0]; foreach ($tokens as $token) { $this->addToken($token); } } $this->writer->endElement(); $this->writer->endElement(); $this->writer->endDocument(); return $this->writer->outputMemory(); } private function addToken(Token $token): void { if ($this->previousToken->getLine() < $token->getLine()) { $this->writer->endElement(); $this->writer->startElement('line'); $this->writer->writeAttribute('no', (string)$token->getLine()); $this->previousToken = $token; } if ($token->getValue() !== '') { $this->writer->startElement('token'); $this->writer->writeAttribute('name', $token->getName()); $this->writer->writeRaw(\htmlspecialchars($token->getValue(), \ENT_NOQUOTES | \ENT_DISALLOWED | \ENT_XML1)); $this->writer->endElement(); } } } PK!¿¿•ff\file-manager-advanced/application/svg-sanitizer/includes/theseer/tokenizer/src/Exception.phpnu„[µü¤j„„Xfile-manager-advanced/application/svg-sanitizer/includes/theseer/tokenizer/src/Token.phpnu„[µü¤line = $line; $this->name = $name; $this->value = $value; } public function getLine(): int { return $this->line; } public function getName(): string { return $this->name; } public function getValue(): string { return $this->value; } } PK!Ó±Œí¾¾bfile-manager-advanced/application/svg-sanitizer/includes/theseer/tokenizer/src/TokenCollection.phpnu„[µü¤tokens[] = $token; } public function current(): Token { return \current($this->tokens); } public function key(): int { return \key($this->tokens); } public function next(): void { \next($this->tokens); $this->pos++; } public function valid(): bool { return $this->count() > $this->pos; } public function rewind(): void { \reset($this->tokens); $this->pos = 0; } public function count(): int { return \count($this->tokens); } public function offsetExists($offset): bool { return isset($this->tokens[$offset]); } /** * @throws TokenCollectionException */ public function offsetGet($offset): Token { if (!$this->offsetExists($offset)) { throw new TokenCollectionException( \sprintf('No Token at offest %s', $offset) ); } return $this->tokens[$offset]; } /** * @param Token $value * * @throws TokenCollectionException */ public function offsetSet($offset, $value): void { if (!\is_int($offset)) { $type = \gettype($offset); throw new TokenCollectionException( \sprintf( 'Offset must be of type integer, %s given', $type === 'object' ? \get_class($value) : $type ) ); } if (!$value instanceof Token) { $type = \gettype($value); throw new TokenCollectionException( \sprintf( 'Value must be of type %s, %s given', Token::class, $type === 'object' ? \get_class($value) : $type ) ); } $this->tokens[$offset] = $value; } public function offsetUnset($offset): void { unset($this->tokens[$offset]); } } PK!îåÏný ý \file-manager-advanced/application/svg-sanitizer/includes/theseer/tokenizer/src/Tokenizer.phpnu„[µü¤ 'T_OPEN_BRACKET', ')' => 'T_CLOSE_BRACKET', '[' => 'T_OPEN_SQUARE', ']' => 'T_CLOSE_SQUARE', '{' => 'T_OPEN_CURLY', '}' => 'T_CLOSE_CURLY', ';' => 'T_SEMICOLON', '.' => 'T_DOT', ',' => 'T_COMMA', '=' => 'T_EQUAL', '<' => 'T_LT', '>' => 'T_GT', '+' => 'T_PLUS', '-' => 'T_MINUS', '*' => 'T_MULT', '/' => 'T_DIV', '?' => 'T_QUESTION_MARK', '!' => 'T_EXCLAMATION_MARK', ':' => 'T_COLON', '"' => 'T_DOUBLE_QUOTES', '@' => 'T_AT', '&' => 'T_AMPERSAND', '%' => 'T_PERCENT', '|' => 'T_PIPE', '$' => 'T_DOLLAR', '^' => 'T_CARET', '~' => 'T_TILDE', '`' => 'T_BACKTICK' ]; public function parse(string $source): TokenCollection { $result = new TokenCollection(); if ($source === '') { return $result; } $tokens = \token_get_all($source); $lastToken = new Token( $tokens[0][2], 'Placeholder', '' ); foreach ($tokens as $pos => $tok) { if (\is_string($tok)) { $token = new Token( $lastToken->getLine(), $this->map[$tok], $tok ); $result->addToken($token); $lastToken = $token; continue; } $line = $tok[2]; $values = \preg_split('/\R+/Uu', $tok[1]); if (!$values) { $result->addToken( new Token( $line, \token_name($tok[0]), '{binary data}' ) ); continue; } foreach ($values as $v) { $token = new Token( $line, \token_name($tok[0]), $v ); $lastToken = $token; $line++; if ($v === '') { continue; } $result->addToken($token); } } return $this->fillBlanks($result, $lastToken->getLine()); } private function fillBlanks(TokenCollection $tokens, int $maxLine): TokenCollection { $prev = new Token( 0, 'Placeholder', '' ); $final = new TokenCollection(); foreach ($tokens as $token) { $gap = $token->getLine() - $prev->getLine(); while ($gap > 1) { $linebreak = new Token( $prev->getLine() + 1, 'T_WHITESPACE', '' ); $final->addToken($linebreak); $prev = $linebreak; $gap--; } $final->addToken($token); $prev = $token; } $gap = $maxLine - $prev->getLine(); while ($gap > 0) { $linebreak = new Token( $prev->getLine() + 1, 'T_WHITESPACE', '' ); $final->addToken($linebreak); $prev = $linebreak; $gap--; } return $final; } } PK!íRý;««Tfile-manager-advanced/application/svg-sanitizer/includes/theseer/tokenizer/README.mdnu„[µü¤# Tokenizer A small library for converting tokenized PHP source code into XML. [![Test](https://github.com/theseer/tokenizer/actions/workflows/ci.yml/badge.svg)](https://github.com/theseer/tokenizer/actions/workflows/ci.yml) ## Installation You can add this library as a local, per-project dependency to your project using [Composer](https://getcomposer.org/): composer require theseer/tokenizer If you only need this library during development, for instance to run your project's test suite, then you should add it as a development-time dependency: composer require --dev theseer/tokenizer ## Usage examples ```php $tokenizer = new TheSeer\Tokenizer\Tokenizer(); $tokens = $tokenizer->parse(file_get_contents(__DIR__ . '/src/XMLSerializer.php')); $serializer = new TheSeer\Tokenizer\XMLSerializer(); $xml = $serializer->toXML($tokens); echo $xml; ``` The generated XML structure looks something like this: ```xml <?php declare ( strict_types = 1 ) ; ``` PK!ïR (üüRfile-manager-advanced/application/svg-sanitizer/includes/theseer/tokenizer/LICENSEnu„[µü¤Tokenizer Copyright (c) 2017 Arne Blankerts and contributors All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. * Neither the name of Arne Blankerts nor the names of contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT * NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. PK!£êþ��Xfile-manager-advanced/application/svg-sanitizer/includes/theseer/tokenizer/composer.locknu„[µü¤{ "_readme": [ "This file locks the dependencies of your project to a known state", "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], "content-hash": "b010f1b3d9d47d431ee1cb54ac1de755", "packages": [], "packages-dev": [], "aliases": [], "minimum-stability": "stable", "stability-flags": [], "prefer-stable": false, "prefer-lowest": false, "platform": { "php": "^7.2 || ^8.0", "ext-xmlwriter": "*", "ext-dom": "*", "ext-tokenizer": "*" }, "platform-dev": [] } PK!)00¿øÙøÙPfile-manager-advanced/application/svg-sanitizer/includes/composer/installed.jsonnu„[µü¤{ "packages": [ { "name": "doctrine/instantiator", "version": "1.5.0", "version_normalized": "1.5.0.0", "source": { "type": "git", "url": "https://github.com/doctrine/instantiator.git", "reference": "0a0fa9780f5d4e507415a065172d26a98d02047b" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/doctrine/instantiator/zipball/0a0fa9780f5d4e507415a065172d26a98d02047b", "reference": "0a0fa9780f5d4e507415a065172d26a98d02047b", "shasum": "" }, "require": { "php": "^7.1 || ^8.0" }, "require-dev": { "doctrine/coding-standard": "^9 || ^11", "ext-pdo": "*", "ext-phar": "*", "phpbench/phpbench": "^0.16 || ^1", "phpstan/phpstan": "^1.4", "phpstan/phpstan-phpunit": "^1", "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", "vimeo/psalm": "^4.30 || ^5.4" }, "time": "2022-12-30T00:15:36+00:00", "type": "library", "installation-source": "dist", "autoload": { "psr-4": { "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/" } }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], "authors": [ { "name": "Marco Pivetta", "email": "ocramius@gmail.com", "homepage": "https://ocramius.github.io/" } ], "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", "homepage": "https://www.doctrine-project.org/projects/instantiator.html", "keywords": [ "constructor", "instantiate" ], "support": { "issues": "https://github.com/doctrine/instantiator/issues", "source": "https://github.com/doctrine/instantiator/tree/1.5.0" }, "funding": [ { "url": "https://www.doctrine-project.org/sponsorship.html", "type": "custom" }, { "url": "https://www.patreon.com/phpdoctrine", "type": "patreon" }, { "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finstantiator", "type": "tidelift" } ], "install-path": "../doctrine/instantiator" }, { "name": "myclabs/deep-copy", "version": "1.12.1", "version_normalized": "1.12.1.0", "source": { "type": "git", "url": "https://github.com/myclabs/DeepCopy.git", "reference": "123267b2c49fbf30d78a7b2d333f6be754b94845" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/123267b2c49fbf30d78a7b2d333f6be754b94845", "reference": "123267b2c49fbf30d78a7b2d333f6be754b94845", "shasum": "" }, "require": { "php": "^7.1 || ^8.0" }, "conflict": { "doctrine/collections": "<1.6.8", "doctrine/common": "<2.13.3 || >=3 <3.2.2" }, "require-dev": { "doctrine/collections": "^1.6.8", "doctrine/common": "^2.13.3 || ^3.2.2", "phpspec/prophecy": "^1.10", "phpunit/phpunit": "^7.5.20 || ^8.5.23 || ^9.5.13" }, "time": "2024-11-08T17:47:46+00:00", "type": "library", "installation-source": "dist", "autoload": { "files": [ "src/DeepCopy/deep_copy.php" ], "psr-4": { "DeepCopy\\": "src/DeepCopy/" } }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], "description": "Create deep copies (clones) of your objects", "keywords": [ "clone", "copy", "duplicate", "object", "object graph" ], "support": { "issues": "https://github.com/myclabs/DeepCopy/issues", "source": "https://github.com/myclabs/DeepCopy/tree/1.12.1" }, "funding": [ { "url": "https://tidelift.com/funding/github/packagist/myclabs/deep-copy", "type": "tidelift" } ], "install-path": "../myclabs/deep-copy" }, { "name": "phar-io/manifest", "version": "2.0.4", "version_normalized": "2.0.4.0", "source": { "type": "git", "url": "https://github.com/phar-io/manifest.git", "reference": "54750ef60c58e43759730615a392c31c80e23176" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/phar-io/manifest/zipball/54750ef60c58e43759730615a392c31c80e23176", "reference": "54750ef60c58e43759730615a392c31c80e23176", "shasum": "" }, "require": { "ext-dom": "*", "ext-libxml": "*", "ext-phar": "*", "ext-xmlwriter": "*", "phar-io/version": "^3.0.1", "php": "^7.2 || ^8.0" }, "time": "2024-03-03T12:33:53+00:00", "type": "library", "extra": { "branch-alias": { "dev-master": "2.0.x-dev" } }, "installation-source": "dist", "autoload": { "classmap": [ "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "BSD-3-Clause" ], "authors": [ { "name": "Arne Blankerts", "email": "arne@blankerts.de", "role": "Developer" }, { "name": "Sebastian Heuer", "email": "sebastian@phpeople.de", "role": "Developer" }, { "name": "Sebastian Bergmann", "email": "sebastian@phpunit.de", "role": "Developer" } ], "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)", "support": { "issues": "https://github.com/phar-io/manifest/issues", "source": "https://github.com/phar-io/manifest/tree/2.0.4" }, "funding": [ { "url": "https://github.com/theseer", "type": "github" } ], "install-path": "../phar-io/manifest" }, { "name": "phar-io/version", "version": "3.2.1", "version_normalized": "3.2.1.0", "source": { "type": "git", "url": "https://github.com/phar-io/version.git", "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/phar-io/version/zipball/4f7fd7836c6f332bb2933569e566a0d6c4cbed74", "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74", "shasum": "" }, "require": { "php": "^7.2 || ^8.0" }, "time": "2022-02-21T01:04:05+00:00", "type": "library", "installation-source": "dist", "autoload": { "classmap": [ "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "BSD-3-Clause" ], "authors": [ { "name": "Arne Blankerts", "email": "arne@blankerts.de", "role": "Developer" }, { "name": "Sebastian Heuer", "email": "sebastian@phpeople.de", "role": "Developer" }, { "name": "Sebastian Bergmann", "email": "sebastian@phpunit.de", "role": "Developer" } ], "description": "Library for handling version information and constraints", "support": { "issues": "https://github.com/phar-io/version/issues", "source": "https://github.com/phar-io/version/tree/3.2.1" }, "install-path": "../phar-io/version" }, { "name": "phpunit/php-code-coverage", "version": "7.0.17", "version_normalized": "7.0.17.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-code-coverage.git", "reference": "40a4ed114a4aea5afd6df8d0f0c9cd3033097f66" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/40a4ed114a4aea5afd6df8d0f0c9cd3033097f66", "reference": "40a4ed114a4aea5afd6df8d0f0c9cd3033097f66", "shasum": "" }, "require": { "ext-dom": "*", "ext-xmlwriter": "*", "php": ">=7.2", "phpunit/php-file-iterator": "^2.0.2", "phpunit/php-text-template": "^1.2.1", "phpunit/php-token-stream": "^3.1.3 || ^4.0", "sebastian/code-unit-reverse-lookup": "^1.0.1", "sebastian/environment": "^4.2.2", "sebastian/version": "^2.0.1", "theseer/tokenizer": "^1.1.3" }, "require-dev": { "phpunit/phpunit": "^8.2.2" }, "suggest": { "ext-xdebug": "^2.7.2" }, "time": "2024-03-02T06:09:37+00:00", "type": "library", "extra": { "branch-alias": { "dev-master": "7.0-dev" } }, "installation-source": "dist", "autoload": { "classmap": [ "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "BSD-3-Clause" ], "authors": [ { "name": "Sebastian Bergmann", "email": "sebastian@phpunit.de", "role": "lead" } ], "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.", "homepage": "https://github.com/sebastianbergmann/php-code-coverage", "keywords": [ "coverage", "testing", "xunit" ], "support": { "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/7.0.17" }, "funding": [ { "url": "https://github.com/sebastianbergmann", "type": "github" } ], "install-path": "../phpunit/php-code-coverage" }, { "name": "phpunit/php-file-iterator", "version": "2.0.6", "version_normalized": "2.0.6.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-file-iterator.git", "reference": "69deeb8664f611f156a924154985fbd4911eb36b" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/69deeb8664f611f156a924154985fbd4911eb36b", "reference": "69deeb8664f611f156a924154985fbd4911eb36b", "shasum": "" }, "require": { "php": ">=7.1" }, "require-dev": { "phpunit/phpunit": "^8.5" }, "time": "2024-03-01T13:39:50+00:00", "type": "library", "extra": { "branch-alias": { "dev-master": "2.0.x-dev" } }, "installation-source": "dist", "autoload": { "classmap": [ "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "BSD-3-Clause" ], "authors": [ { "name": "Sebastian Bergmann", "email": "sebastian@phpunit.de", "role": "lead" } ], "description": "FilterIterator implementation that filters files based on a list of suffixes.", "homepage": "https://github.com/sebastianbergmann/php-file-iterator/", "keywords": [ "filesystem", "iterator" ], "support": { "issues": "https://github.com/sebastianbergmann/php-file-iterator/issues", "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/2.0.6" }, "funding": [ { "url": "https://github.com/sebastianbergmann", "type": "github" } ], "install-path": "../phpunit/php-file-iterator" }, { "name": "phpunit/php-text-template", "version": "1.2.1", "version_normalized": "1.2.1.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-text-template.git", "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/31f8b717e51d9a2afca6c9f046f5d69fc27c8686", "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686", "shasum": "" }, "require": { "php": ">=5.3.3" }, "time": "2015-06-21T13:50:34+00:00", "type": "library", "installation-source": "dist", "autoload": { "classmap": [ "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "BSD-3-Clause" ], "authors": [ { "name": "Sebastian Bergmann", "email": "sebastian@phpunit.de", "role": "lead" } ], "description": "Simple template engine.", "homepage": "https://github.com/sebastianbergmann/php-text-template/", "keywords": [ "template" ], "support": { "issues": "https://github.com/sebastianbergmann/php-text-template/issues", "source": "https://github.com/sebastianbergmann/php-text-template/tree/1.2.1" }, "install-path": "../phpunit/php-text-template" }, { "name": "phpunit/php-timer", "version": "2.1.4", "version_normalized": "2.1.4.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-timer.git", "reference": "a691211e94ff39a34811abd521c31bd5b305b0bb" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/a691211e94ff39a34811abd521c31bd5b305b0bb", "reference": "a691211e94ff39a34811abd521c31bd5b305b0bb", "shasum": "" }, "require": { "php": ">=7.1" }, "require-dev": { "phpunit/phpunit": "^8.5" }, "time": "2024-03-01T13:42:41+00:00", "type": "library", "extra": { "branch-alias": { "dev-master": "2.1-dev" } }, "installation-source": "dist", "autoload": { "classmap": [ "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "BSD-3-Clause" ], "authors": [ { "name": "Sebastian Bergmann", "email": "sebastian@phpunit.de", "role": "lead" } ], "description": "Utility class for timing", "homepage": "https://github.com/sebastianbergmann/php-timer/", "keywords": [ "timer" ], "support": { "issues": "https://github.com/sebastianbergmann/php-timer/issues", "source": "https://github.com/sebastianbergmann/php-timer/tree/2.1.4" }, "funding": [ { "url": "https://github.com/sebastianbergmann", "type": "github" } ], "install-path": "../phpunit/php-timer" }, { "name": "phpunit/php-token-stream", "version": "4.0.4", "version_normalized": "4.0.4.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-token-stream.git", "reference": "a853a0e183b9db7eed023d7933a858fa1c8d25a3" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/a853a0e183b9db7eed023d7933a858fa1c8d25a3", "reference": "a853a0e183b9db7eed023d7933a858fa1c8d25a3", "shasum": "" }, "require": { "ext-tokenizer": "*", "php": "^7.3 || ^8.0" }, "require-dev": { "phpunit/phpunit": "^9.0" }, "time": "2020-08-04T08:28:15+00:00", "type": "library", "extra": { "branch-alias": { "dev-master": "4.0-dev" } }, "installation-source": "dist", "autoload": { "classmap": [ "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "BSD-3-Clause" ], "authors": [ { "name": "Sebastian Bergmann", "email": "sebastian@phpunit.de" } ], "description": "Wrapper around PHP's tokenizer extension.", "homepage": "https://github.com/sebastianbergmann/php-token-stream/", "keywords": [ "tokenizer" ], "support": { "issues": "https://github.com/sebastianbergmann/php-token-stream/issues", "source": "https://github.com/sebastianbergmann/php-token-stream/tree/master" }, "funding": [ { "url": "https://github.com/sebastianbergmann", "type": "github" } ], "abandoned": true, "install-path": "../phpunit/php-token-stream" }, { "name": "phpunit/phpunit", "version": "8.5.41", "version_normalized": "8.5.41.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", "reference": "d843cb5bcf0bf9ae3484016444fe0c5b6ec7e4fa" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/d843cb5bcf0bf9ae3484016444fe0c5b6ec7e4fa", "reference": "d843cb5bcf0bf9ae3484016444fe0c5b6ec7e4fa", "shasum": "" }, "require": { "doctrine/instantiator": "^1.5.0", "ext-dom": "*", "ext-json": "*", "ext-libxml": "*", "ext-mbstring": "*", "ext-xml": "*", "ext-xmlwriter": "*", "myclabs/deep-copy": "^1.12.1", "phar-io/manifest": "^2.0.4", "phar-io/version": "^3.2.1", "php": ">=7.2", "phpunit/php-code-coverage": "^7.0.17", "phpunit/php-file-iterator": "^2.0.6", "phpunit/php-text-template": "^1.2.1", "phpunit/php-timer": "^2.1.4", "sebastian/comparator": "^3.0.5", "sebastian/diff": "^3.0.6", "sebastian/environment": "^4.2.5", "sebastian/exporter": "^3.1.6", "sebastian/global-state": "^3.0.5", "sebastian/object-enumerator": "^3.0.5", "sebastian/resource-operations": "^2.0.3", "sebastian/type": "^1.1.5", "sebastian/version": "^2.0.1" }, "suggest": { "ext-soap": "To be able to generate mocks based on WSDL files", "ext-xdebug": "PHP extension that provides line coverage as well as branch and path coverage", "phpunit/php-invoker": "To allow enforcing time limits" }, "time": "2024-12-05T13:44:26+00:00", "bin": [ "phpunit" ], "type": "library", "extra": { "branch-alias": { "dev-master": "8.5-dev" } }, "installation-source": "dist", "autoload": { "classmap": [ "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "BSD-3-Clause" ], "authors": [ { "name": "Sebastian Bergmann", "email": "sebastian@phpunit.de", "role": "lead" } ], "description": "The PHP Unit Testing framework.", "homepage": "https://phpunit.de/", "keywords": [ "phpunit", "testing", "xunit" ], "support": { "issues": "https://github.com/sebastianbergmann/phpunit/issues", "security": "https://github.com/sebastianbergmann/phpunit/security/policy", "source": "https://github.com/sebastianbergmann/phpunit/tree/8.5.41" }, "funding": [ { "url": "https://phpunit.de/sponsors.html", "type": "custom" }, { "url": "https://github.com/sebastianbergmann", "type": "github" }, { "url": "https://tidelift.com/funding/github/packagist/phpunit/phpunit", "type": "tidelift" } ], "install-path": "../phpunit/phpunit" }, { "name": "sebastian/code-unit-reverse-lookup", "version": "1.0.3", "version_normalized": "1.0.3.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", "reference": "92a1a52e86d34cde6caa54f1b5ffa9fda18e5d54" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/92a1a52e86d34cde6caa54f1b5ffa9fda18e5d54", "reference": "92a1a52e86d34cde6caa54f1b5ffa9fda18e5d54", "shasum": "" }, "require": { "php": ">=5.6" }, "require-dev": { "phpunit/phpunit": "^8.5" }, "time": "2024-03-01T13:45:45+00:00", "type": "library", "extra": { "branch-alias": { "dev-master": "1.0.x-dev" } }, "installation-source": "dist", "autoload": { "classmap": [ "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "BSD-3-Clause" ], "authors": [ { "name": "Sebastian Bergmann", "email": "sebastian@phpunit.de" } ], "description": "Looks up which function or method a line of code belongs to", "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/", "support": { "issues": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/issues", "source": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/tree/1.0.3" }, "funding": [ { "url": "https://github.com/sebastianbergmann", "type": "github" } ], "install-path": "../sebastian/code-unit-reverse-lookup" }, { "name": "sebastian/comparator", "version": "3.0.5", "version_normalized": "3.0.5.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/comparator.git", "reference": "1dc7ceb4a24aede938c7af2a9ed1de09609ca770" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/1dc7ceb4a24aede938c7af2a9ed1de09609ca770", "reference": "1dc7ceb4a24aede938c7af2a9ed1de09609ca770", "shasum": "" }, "require": { "php": ">=7.1", "sebastian/diff": "^3.0", "sebastian/exporter": "^3.1" }, "require-dev": { "phpunit/phpunit": "^8.5" }, "time": "2022-09-14T12:31:48+00:00", "type": "library", "extra": { "branch-alias": { "dev-master": "3.0-dev" } }, "installation-source": "dist", "autoload": { "classmap": [ "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "BSD-3-Clause" ], "authors": [ { "name": "Sebastian Bergmann", "email": "sebastian@phpunit.de" }, { "name": "Jeff Welch", "email": "whatthejeff@gmail.com" }, { "name": "Volker Dusch", "email": "github@wallbash.com" }, { "name": "Bernhard Schussek", "email": "bschussek@2bepublished.at" } ], "description": "Provides the functionality to compare PHP values for equality", "homepage": "https://github.com/sebastianbergmann/comparator", "keywords": [ "comparator", "compare", "equality" ], "support": { "issues": "https://github.com/sebastianbergmann/comparator/issues", "source": "https://github.com/sebastianbergmann/comparator/tree/3.0.5" }, "funding": [ { "url": "https://github.com/sebastianbergmann", "type": "github" } ], "install-path": "../sebastian/comparator" }, { "name": "sebastian/diff", "version": "3.0.6", "version_normalized": "3.0.6.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/diff.git", "reference": "98ff311ca519c3aa73ccd3de053bdb377171d7b6" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/98ff311ca519c3aa73ccd3de053bdb377171d7b6", "reference": "98ff311ca519c3aa73ccd3de053bdb377171d7b6", "shasum": "" }, "require": { "php": ">=7.1" }, "require-dev": { "phpunit/phpunit": "^7.5 || ^8.0", "symfony/process": "^2 || ^3.3 || ^4" }, "time": "2024-03-02T06:16:36+00:00", "type": "library", "extra": { "branch-alias": { "dev-master": "3.0-dev" } }, "installation-source": "dist", "autoload": { "classmap": [ "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "BSD-3-Clause" ], "authors": [ { "name": "Sebastian Bergmann", "email": "sebastian@phpunit.de" }, { "name": "Kore Nordmann", "email": "mail@kore-nordmann.de" } ], "description": "Diff implementation", "homepage": "https://github.com/sebastianbergmann/diff", "keywords": [ "diff", "udiff", "unidiff", "unified diff" ], "support": { "issues": "https://github.com/sebastianbergmann/diff/issues", "source": "https://github.com/sebastianbergmann/diff/tree/3.0.6" }, "funding": [ { "url": "https://github.com/sebastianbergmann", "type": "github" } ], "install-path": "../sebastian/diff" }, { "name": "sebastian/environment", "version": "4.2.5", "version_normalized": "4.2.5.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/environment.git", "reference": "56932f6049a0482853056ffd617c91ffcc754205" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/56932f6049a0482853056ffd617c91ffcc754205", "reference": "56932f6049a0482853056ffd617c91ffcc754205", "shasum": "" }, "require": { "php": ">=7.1" }, "require-dev": { "phpunit/phpunit": "^7.5" }, "suggest": { "ext-posix": "*" }, "time": "2024-03-01T13:49:59+00:00", "type": "library", "extra": { "branch-alias": { "dev-master": "4.2-dev" } }, "installation-source": "dist", "autoload": { "classmap": [ "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "BSD-3-Clause" ], "authors": [ { "name": "Sebastian Bergmann", "email": "sebastian@phpunit.de" } ], "description": "Provides functionality to handle HHVM/PHP environments", "homepage": "http://www.github.com/sebastianbergmann/environment", "keywords": [ "Xdebug", "environment", "hhvm" ], "support": { "issues": "https://github.com/sebastianbergmann/environment/issues", "source": "https://github.com/sebastianbergmann/environment/tree/4.2.5" }, "funding": [ { "url": "https://github.com/sebastianbergmann", "type": "github" } ], "install-path": "../sebastian/environment" }, { "name": "sebastian/exporter", "version": "3.1.6", "version_normalized": "3.1.6.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/exporter.git", "reference": "1939bc8fd1d39adcfa88c5b35335910869214c56" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/1939bc8fd1d39adcfa88c5b35335910869214c56", "reference": "1939bc8fd1d39adcfa88c5b35335910869214c56", "shasum": "" }, "require": { "php": ">=7.2", "sebastian/recursion-context": "^3.0" }, "require-dev": { "ext-mbstring": "*", "phpunit/phpunit": "^8.5" }, "time": "2024-03-02T06:21:38+00:00", "type": "library", "extra": { "branch-alias": { "dev-master": "3.1.x-dev" } }, "installation-source": "dist", "autoload": { "classmap": [ "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "BSD-3-Clause" ], "authors": [ { "name": "Sebastian Bergmann", "email": "sebastian@phpunit.de" }, { "name": "Jeff Welch", "email": "whatthejeff@gmail.com" }, { "name": "Volker Dusch", "email": "github@wallbash.com" }, { "name": "Adam Harvey", "email": "aharvey@php.net" }, { "name": "Bernhard Schussek", "email": "bschussek@gmail.com" } ], "description": "Provides the functionality to export PHP variables for visualization", "homepage": "http://www.github.com/sebastianbergmann/exporter", "keywords": [ "export", "exporter" ], "support": { "issues": "https://github.com/sebastianbergmann/exporter/issues", "source": "https://github.com/sebastianbergmann/exporter/tree/3.1.6" }, "funding": [ { "url": "https://github.com/sebastianbergmann", "type": "github" } ], "install-path": "../sebastian/exporter" }, { "name": "sebastian/global-state", "version": "3.0.5", "version_normalized": "3.0.5.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/global-state.git", "reference": "91c7c47047a971f02de57ed6f040087ef110c5d9" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/91c7c47047a971f02de57ed6f040087ef110c5d9", "reference": "91c7c47047a971f02de57ed6f040087ef110c5d9", "shasum": "" }, "require": { "php": ">=7.2", "sebastian/object-reflector": "^1.1.1", "sebastian/recursion-context": "^3.0" }, "require-dev": { "ext-dom": "*", "phpunit/phpunit": "^8.0" }, "suggest": { "ext-uopz": "*" }, "time": "2024-03-02T06:13:16+00:00", "type": "library", "extra": { "branch-alias": { "dev-master": "3.0-dev" } }, "installation-source": "dist", "autoload": { "classmap": [ "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "BSD-3-Clause" ], "authors": [ { "name": "Sebastian Bergmann", "email": "sebastian@phpunit.de" } ], "description": "Snapshotting of global state", "homepage": "http://www.github.com/sebastianbergmann/global-state", "keywords": [ "global state" ], "support": { "issues": "https://github.com/sebastianbergmann/global-state/issues", "source": "https://github.com/sebastianbergmann/global-state/tree/3.0.5" }, "funding": [ { "url": "https://github.com/sebastianbergmann", "type": "github" } ], "install-path": "../sebastian/global-state" }, { "name": "sebastian/object-enumerator", "version": "3.0.5", "version_normalized": "3.0.5.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/object-enumerator.git", "reference": "ac5b293dba925751b808e02923399fb44ff0d541" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/ac5b293dba925751b808e02923399fb44ff0d541", "reference": "ac5b293dba925751b808e02923399fb44ff0d541", "shasum": "" }, "require": { "php": ">=7.0", "sebastian/object-reflector": "^1.1.1", "sebastian/recursion-context": "^3.0" }, "require-dev": { "phpunit/phpunit": "^6.0" }, "time": "2024-03-01T13:54:02+00:00", "type": "library", "extra": { "branch-alias": { "dev-master": "3.0.x-dev" } }, "installation-source": "dist", "autoload": { "classmap": [ "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "BSD-3-Clause" ], "authors": [ { "name": "Sebastian Bergmann", "email": "sebastian@phpunit.de" } ], "description": "Traverses array structures and object graphs to enumerate all referenced objects", "homepage": "https://github.com/sebastianbergmann/object-enumerator/", "support": { "issues": "https://github.com/sebastianbergmann/object-enumerator/issues", "source": "https://github.com/sebastianbergmann/object-enumerator/tree/3.0.5" }, "funding": [ { "url": "https://github.com/sebastianbergmann", "type": "github" } ], "install-path": "../sebastian/object-enumerator" }, { "name": "sebastian/object-reflector", "version": "1.1.3", "version_normalized": "1.1.3.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/object-reflector.git", "reference": "1d439c229e61f244ff1f211e5c99737f90c67def" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/1d439c229e61f244ff1f211e5c99737f90c67def", "reference": "1d439c229e61f244ff1f211e5c99737f90c67def", "shasum": "" }, "require": { "php": ">=7.0" }, "require-dev": { "phpunit/phpunit": "^6.0" }, "time": "2024-03-01T13:56:04+00:00", "type": "library", "extra": { "branch-alias": { "dev-master": "1.1-dev" } }, "installation-source": "dist", "autoload": { "classmap": [ "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "BSD-3-Clause" ], "authors": [ { "name": "Sebastian Bergmann", "email": "sebastian@phpunit.de" } ], "description": "Allows reflection of object attributes, including inherited and non-public ones", "homepage": "https://github.com/sebastianbergmann/object-reflector/", "support": { "issues": "https://github.com/sebastianbergmann/object-reflector/issues", "source": "https://github.com/sebastianbergmann/object-reflector/tree/1.1.3" }, "funding": [ { "url": "https://github.com/sebastianbergmann", "type": "github" } ], "install-path": "../sebastian/object-reflector" }, { "name": "sebastian/recursion-context", "version": "3.0.2", "version_normalized": "3.0.2.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/recursion-context.git", "reference": "9bfd3c6f1f08c026f542032dfb42813544f7d64c" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/9bfd3c6f1f08c026f542032dfb42813544f7d64c", "reference": "9bfd3c6f1f08c026f542032dfb42813544f7d64c", "shasum": "" }, "require": { "php": ">=7.0" }, "require-dev": { "phpunit/phpunit": "^6.0" }, "time": "2024-03-01T14:07:30+00:00", "type": "library", "extra": { "branch-alias": { "dev-master": "3.0.x-dev" } }, "installation-source": "dist", "autoload": { "classmap": [ "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "BSD-3-Clause" ], "authors": [ { "name": "Sebastian Bergmann", "email": "sebastian@phpunit.de" }, { "name": "Jeff Welch", "email": "whatthejeff@gmail.com" }, { "name": "Adam Harvey", "email": "aharvey@php.net" } ], "description": "Provides functionality to recursively process PHP variables", "homepage": "http://www.github.com/sebastianbergmann/recursion-context", "support": { "issues": "https://github.com/sebastianbergmann/recursion-context/issues", "source": "https://github.com/sebastianbergmann/recursion-context/tree/3.0.2" }, "funding": [ { "url": "https://github.com/sebastianbergmann", "type": "github" } ], "install-path": "../sebastian/recursion-context" }, { "name": "sebastian/resource-operations", "version": "2.0.3", "version_normalized": "2.0.3.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/resource-operations.git", "reference": "72a7f7674d053d548003b16ff5a106e7e0e06eee" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/72a7f7674d053d548003b16ff5a106e7e0e06eee", "reference": "72a7f7674d053d548003b16ff5a106e7e0e06eee", "shasum": "" }, "require": { "php": ">=7.1" }, "time": "2024-03-01T13:59:09+00:00", "type": "library", "extra": { "branch-alias": { "dev-master": "2.0-dev" } }, "installation-source": "dist", "autoload": { "classmap": [ "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "BSD-3-Clause" ], "authors": [ { "name": "Sebastian Bergmann", "email": "sebastian@phpunit.de" } ], "description": "Provides a list of PHP built-in functions that operate on resources", "homepage": "https://www.github.com/sebastianbergmann/resource-operations", "support": { "source": "https://github.com/sebastianbergmann/resource-operations/tree/2.0.3" }, "funding": [ { "url": "https://github.com/sebastianbergmann", "type": "github" } ], "install-path": "../sebastian/resource-operations" }, { "name": "sebastian/type", "version": "1.1.5", "version_normalized": "1.1.5.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/type.git", "reference": "18f071c3a29892b037d35e6b20ddf3ea39b42874" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/18f071c3a29892b037d35e6b20ddf3ea39b42874", "reference": "18f071c3a29892b037d35e6b20ddf3ea39b42874", "shasum": "" }, "require": { "php": ">=7.2" }, "require-dev": { "phpunit/phpunit": "^8.2" }, "time": "2024-03-01T14:04:07+00:00", "type": "library", "extra": { "branch-alias": { "dev-master": "1.1-dev" } }, "installation-source": "dist", "autoload": { "classmap": [ "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "BSD-3-Clause" ], "authors": [ { "name": "Sebastian Bergmann", "email": "sebastian@phpunit.de", "role": "lead" } ], "description": "Collection of value objects that represent the types of the PHP type system", "homepage": "https://github.com/sebastianbergmann/type", "support": { "issues": "https://github.com/sebastianbergmann/type/issues", "source": "https://github.com/sebastianbergmann/type/tree/1.1.5" }, "funding": [ { "url": "https://github.com/sebastianbergmann", "type": "github" } ], "install-path": "../sebastian/type" }, { "name": "sebastian/version", "version": "2.0.1", "version_normalized": "2.0.1.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/version.git", "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/99732be0ddb3361e16ad77b68ba41efc8e979019", "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019", "shasum": "" }, "require": { "php": ">=5.6" }, "time": "2016-10-03T07:35:21+00:00", "type": "library", "extra": { "branch-alias": { "dev-master": "2.0.x-dev" } }, "installation-source": "dist", "autoload": { "classmap": [ "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "BSD-3-Clause" ], "authors": [ { "name": "Sebastian Bergmann", "email": "sebastian@phpunit.de", "role": "lead" } ], "description": "Library that helps with managing the version number of Git-hosted PHP projects", "homepage": "https://github.com/sebastianbergmann/version", "support": { "issues": "https://github.com/sebastianbergmann/version/issues", "source": "https://github.com/sebastianbergmann/version/tree/master" }, "install-path": "../sebastian/version" }, { "name": "theseer/tokenizer", "version": "1.2.3", "version_normalized": "1.2.3.0", "source": { "type": "git", "url": "https://github.com/theseer/tokenizer.git", "reference": "737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/theseer/tokenizer/zipball/737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2", "reference": "737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2", "shasum": "" }, "require": { "ext-dom": "*", "ext-tokenizer": "*", "ext-xmlwriter": "*", "php": "^7.2 || ^8.0" }, "time": "2024-03-03T12:36:25+00:00", "type": "library", "installation-source": "dist", "autoload": { "classmap": [ "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "BSD-3-Clause" ], "authors": [ { "name": "Arne Blankerts", "email": "arne@blankerts.de", "role": "Developer" } ], "description": "A small library for converting tokenized PHP source code into XML and potentially other formats", "support": { "issues": "https://github.com/theseer/tokenizer/issues", "source": "https://github.com/theseer/tokenizer/tree/1.2.3" }, "funding": [ { "url": "https://github.com/theseer", "type": "github" } ], "install-path": "../theseer/tokenizer" } ], "dev": true, "dev-package-names": [ "doctrine/instantiator", "myclabs/deep-copy", "phar-io/manifest", "phar-io/version", "phpunit/php-code-coverage", "phpunit/php-file-iterator", "phpunit/php-text-template", "phpunit/php-timer", "phpunit/php-token-stream", "phpunit/phpunit", "sebastian/code-unit-reverse-lookup", "sebastian/comparator", "sebastian/diff", "sebastian/environment", "sebastian/exporter", "sebastian/global-state", "sebastian/object-enumerator", "sebastian/object-reflector", "sebastian/recursion-context", "sebastian/resource-operations", "sebastian/type", "sebastian/version", "theseer/tokenizer" ] } PK!{zøˆˆSfile-manager-advanced/application/svg-sanitizer/includes/composer/autoload_real.phpnu„[µü¤register(true); $filesToLoad = \Composer\Autoload\ComposerStaticInita2bac752f468c259657df1752fa20eaf::$files; $requireFile = \Closure::bind(static function ($fileIdentifier, $file) { if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) { $GLOBALS['__composer_autoload_files'][$fileIdentifier] = true; require $file; } }, null, null); foreach ($filesToLoad as $fileIdentifier => $file) { $requireFile($fileIdentifier, $file); } return $loader; } } PK! IÜgáýáýWfile-manager-advanced/application/svg-sanitizer/includes/composer/autoload_classmap.phpnu„[µü¤ $vendorDir . '/composer/InstalledVersions.php', 'PHPUnit\\Exception' => $vendorDir . '/phpunit/phpunit/src/Exception.php', 'PHPUnit\\Framework\\Assert' => $vendorDir . '/phpunit/phpunit/src/Framework/Assert.php', 'PHPUnit\\Framework\\AssertionFailedError' => $vendorDir . '/phpunit/phpunit/src/Framework/Exception/AssertionFailedError.php', 'PHPUnit\\Framework\\CodeCoverageException' => $vendorDir . '/phpunit/phpunit/src/Framework/Exception/CodeCoverageException.php', 'PHPUnit\\Framework\\Constraint\\ArrayHasKey' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/ArrayHasKey.php', 'PHPUnit\\Framework\\Constraint\\ArraySubset' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/ArraySubset.php', 'PHPUnit\\Framework\\Constraint\\Attribute' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/Attribute.php', 'PHPUnit\\Framework\\Constraint\\Callback' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/Callback.php', 'PHPUnit\\Framework\\Constraint\\ClassHasAttribute' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/ClassHasAttribute.php', 'PHPUnit\\Framework\\Constraint\\ClassHasStaticAttribute' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/ClassHasStaticAttribute.php', 'PHPUnit\\Framework\\Constraint\\Composite' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/Composite.php', 'PHPUnit\\Framework\\Constraint\\Constraint' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/Constraint.php', 'PHPUnit\\Framework\\Constraint\\Count' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/Count.php', 'PHPUnit\\Framework\\Constraint\\DirectoryExists' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/DirectoryExists.php', 'PHPUnit\\Framework\\Constraint\\Exception' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/Exception.php', 'PHPUnit\\Framework\\Constraint\\ExceptionCode' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/ExceptionCode.php', 'PHPUnit\\Framework\\Constraint\\ExceptionMessage' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/ExceptionMessage.php', 'PHPUnit\\Framework\\Constraint\\ExceptionMessageRegularExpression' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/ExceptionMessageRegularExpression.php', 'PHPUnit\\Framework\\Constraint\\FileExists' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/FileExists.php', 'PHPUnit\\Framework\\Constraint\\GreaterThan' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/GreaterThan.php', 'PHPUnit\\Framework\\Constraint\\IsAnything' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/IsAnything.php', 'PHPUnit\\Framework\\Constraint\\IsEmpty' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/IsEmpty.php', 'PHPUnit\\Framework\\Constraint\\IsEqual' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/IsEqual.php', 'PHPUnit\\Framework\\Constraint\\IsFalse' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/IsFalse.php', 'PHPUnit\\Framework\\Constraint\\IsFinite' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/IsFinite.php', 'PHPUnit\\Framework\\Constraint\\IsIdentical' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/IsIdentical.php', 'PHPUnit\\Framework\\Constraint\\IsInfinite' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/IsInfinite.php', 'PHPUnit\\Framework\\Constraint\\IsInstanceOf' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/IsInstanceOf.php', 'PHPUnit\\Framework\\Constraint\\IsJson' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/IsJson.php', 'PHPUnit\\Framework\\Constraint\\IsNan' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/IsNan.php', 'PHPUnit\\Framework\\Constraint\\IsNull' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/IsNull.php', 'PHPUnit\\Framework\\Constraint\\IsReadable' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/IsReadable.php', 'PHPUnit\\Framework\\Constraint\\IsTrue' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/IsTrue.php', 'PHPUnit\\Framework\\Constraint\\IsType' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/IsType.php', 'PHPUnit\\Framework\\Constraint\\IsWritable' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/IsWritable.php', 'PHPUnit\\Framework\\Constraint\\JsonMatches' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/JsonMatches.php', 'PHPUnit\\Framework\\Constraint\\JsonMatchesErrorMessageProvider' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/JsonMatchesErrorMessageProvider.php', 'PHPUnit\\Framework\\Constraint\\LessThan' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/LessThan.php', 'PHPUnit\\Framework\\Constraint\\LogicalAnd' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/LogicalAnd.php', 'PHPUnit\\Framework\\Constraint\\LogicalNot' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/LogicalNot.php', 'PHPUnit\\Framework\\Constraint\\LogicalOr' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/LogicalOr.php', 'PHPUnit\\Framework\\Constraint\\LogicalXor' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/LogicalXor.php', 'PHPUnit\\Framework\\Constraint\\ObjectHasAttribute' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/ObjectHasAttribute.php', 'PHPUnit\\Framework\\Constraint\\RegularExpression' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/RegularExpression.php', 'PHPUnit\\Framework\\Constraint\\SameSize' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/SameSize.php', 'PHPUnit\\Framework\\Constraint\\StringContains' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/StringContains.php', 'PHPUnit\\Framework\\Constraint\\StringEndsWith' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/StringEndsWith.php', 'PHPUnit\\Framework\\Constraint\\StringMatchesFormatDescription' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/StringMatchesFormatDescription.php', 'PHPUnit\\Framework\\Constraint\\StringStartsWith' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/StringStartsWith.php', 'PHPUnit\\Framework\\Constraint\\TraversableContains' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/TraversableContains.php', 'PHPUnit\\Framework\\Constraint\\TraversableContainsEqual' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/TraversableContainsEqual.php', 'PHPUnit\\Framework\\Constraint\\TraversableContainsIdentical' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/TraversableContainsIdentical.php', 'PHPUnit\\Framework\\Constraint\\TraversableContainsOnly' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/TraversableContainsOnly.php', 'PHPUnit\\Framework\\CoveredCodeNotExecutedException' => $vendorDir . '/phpunit/phpunit/src/Framework/Exception/CoveredCodeNotExecutedException.php', 'PHPUnit\\Framework\\DataProviderTestSuite' => $vendorDir . '/phpunit/phpunit/src/Framework/DataProviderTestSuite.php', 'PHPUnit\\Framework\\Error\\Deprecated' => $vendorDir . '/phpunit/phpunit/src/Framework/Error/Deprecated.php', 'PHPUnit\\Framework\\Error\\Error' => $vendorDir . '/phpunit/phpunit/src/Framework/Error/Error.php', 'PHPUnit\\Framework\\Error\\Notice' => $vendorDir . '/phpunit/phpunit/src/Framework/Error/Notice.php', 'PHPUnit\\Framework\\Error\\Warning' => $vendorDir . '/phpunit/phpunit/src/Framework/Error/Warning.php', 'PHPUnit\\Framework\\Exception' => $vendorDir . '/phpunit/phpunit/src/Framework/Exception/Exception.php', 'PHPUnit\\Framework\\ExceptionWrapper' => $vendorDir . '/phpunit/phpunit/src/Framework/ExceptionWrapper.php', 'PHPUnit\\Framework\\ExpectationFailedException' => $vendorDir . '/phpunit/phpunit/src/Framework/Exception/ExpectationFailedException.php', 'PHPUnit\\Framework\\IncompleteTest' => $vendorDir . '/phpunit/phpunit/src/Framework/IncompleteTest.php', 'PHPUnit\\Framework\\IncompleteTestCase' => $vendorDir . '/phpunit/phpunit/src/Framework/IncompleteTestCase.php', 'PHPUnit\\Framework\\IncompleteTestError' => $vendorDir . '/phpunit/phpunit/src/Framework/Exception/IncompleteTestError.php', 'PHPUnit\\Framework\\InvalidArgumentException' => $vendorDir . '/phpunit/phpunit/src/Framework/Exception/InvalidArgumentException.php', 'PHPUnit\\Framework\\InvalidCoversTargetException' => $vendorDir . '/phpunit/phpunit/src/Framework/Exception/InvalidCoversTargetException.php', 'PHPUnit\\Framework\\InvalidDataProviderException' => $vendorDir . '/phpunit/phpunit/src/Framework/Exception/InvalidDataProviderException.php', 'PHPUnit\\Framework\\InvalidParameterGroupException' => $vendorDir . '/phpunit/phpunit/src/Framework/InvalidParameterGroupException.php', 'PHPUnit\\Framework\\MissingCoversAnnotationException' => $vendorDir . '/phpunit/phpunit/src/Framework/Exception/MissingCoversAnnotationException.php', 'PHPUnit\\Framework\\MockObject\\Api' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Api/Api.php', 'PHPUnit\\Framework\\MockObject\\BadMethodCallException' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Exception/BadMethodCallException.php', 'PHPUnit\\Framework\\MockObject\\Builder\\Identity' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Builder/Identity.php', 'PHPUnit\\Framework\\MockObject\\Builder\\InvocationMocker' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Builder/InvocationMocker.php', 'PHPUnit\\Framework\\MockObject\\Builder\\InvocationStubber' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Builder/InvocationStubber.php', 'PHPUnit\\Framework\\MockObject\\Builder\\Match_' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Builder/Match_.php', 'PHPUnit\\Framework\\MockObject\\Builder\\MethodNameMatch' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Builder/MethodNameMatch.php', 'PHPUnit\\Framework\\MockObject\\Builder\\ParametersMatch' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Builder/ParametersMatch.php', 'PHPUnit\\Framework\\MockObject\\Builder\\Stub' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Builder/Stub.php', 'PHPUnit\\Framework\\MockObject\\ConfigurableMethod' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/ConfigurableMethod.php', 'PHPUnit\\Framework\\MockObject\\ConfigurableMethodsAlreadyInitializedException' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Exception/ConfigurableMethodsAlreadyInitializedException.php', 'PHPUnit\\Framework\\MockObject\\Exception' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Exception/Exception.php', 'PHPUnit\\Framework\\MockObject\\Generator' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Generator.php', 'PHPUnit\\Framework\\MockObject\\IncompatibleReturnValueException' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Exception/IncompatibleReturnValueException.php', 'PHPUnit\\Framework\\MockObject\\Invocation' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Invocation.php', 'PHPUnit\\Framework\\MockObject\\InvocationHandler' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/InvocationHandler.php', 'PHPUnit\\Framework\\MockObject\\Matcher' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Matcher.php', 'PHPUnit\\Framework\\MockObject\\Method' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Api/Method.php', 'PHPUnit\\Framework\\MockObject\\MethodNameConstraint' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/MethodNameConstraint.php', 'PHPUnit\\Framework\\MockObject\\MockBuilder' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/MockBuilder.php', 'PHPUnit\\Framework\\MockObject\\MockClass' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/MockClass.php', 'PHPUnit\\Framework\\MockObject\\MockMethod' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/MockMethod.php', 'PHPUnit\\Framework\\MockObject\\MockMethodSet' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/MockMethodSet.php', 'PHPUnit\\Framework\\MockObject\\MockObject' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/MockObject.php', 'PHPUnit\\Framework\\MockObject\\MockTrait' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/MockTrait.php', 'PHPUnit\\Framework\\MockObject\\MockType' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/MockType.php', 'PHPUnit\\Framework\\MockObject\\Rule\\AnyInvokedCount' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Rule/AnyInvokedCount.php', 'PHPUnit\\Framework\\MockObject\\Rule\\AnyParameters' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Rule/AnyParameters.php', 'PHPUnit\\Framework\\MockObject\\Rule\\ConsecutiveParameters' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Rule/ConsecutiveParameters.php', 'PHPUnit\\Framework\\MockObject\\Rule\\InvocationOrder' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Rule/InvocationOrder.php', 'PHPUnit\\Framework\\MockObject\\Rule\\InvokedAtIndex' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Rule/InvokedAtIndex.php', 'PHPUnit\\Framework\\MockObject\\Rule\\InvokedAtLeastCount' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Rule/InvokedAtLeastCount.php', 'PHPUnit\\Framework\\MockObject\\Rule\\InvokedAtLeastOnce' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Rule/InvokedAtLeastOnce.php', 'PHPUnit\\Framework\\MockObject\\Rule\\InvokedAtMostCount' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Rule/InvokedAtMostCount.php', 'PHPUnit\\Framework\\MockObject\\Rule\\InvokedCount' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Rule/InvokedCount.php', 'PHPUnit\\Framework\\MockObject\\Rule\\MethodName' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Rule/MethodName.php', 'PHPUnit\\Framework\\MockObject\\Rule\\Parameters' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Rule/Parameters.php', 'PHPUnit\\Framework\\MockObject\\Rule\\ParametersRule' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Rule/ParametersRule.php', 'PHPUnit\\Framework\\MockObject\\RuntimeException' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Exception/RuntimeException.php', 'PHPUnit\\Framework\\MockObject\\Stub' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Stub.php', 'PHPUnit\\Framework\\MockObject\\Stub\\ConsecutiveCalls' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Stub/ConsecutiveCalls.php', 'PHPUnit\\Framework\\MockObject\\Stub\\Exception' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Stub/Exception.php', 'PHPUnit\\Framework\\MockObject\\Stub\\ReturnArgument' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Stub/ReturnArgument.php', 'PHPUnit\\Framework\\MockObject\\Stub\\ReturnCallback' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Stub/ReturnCallback.php', 'PHPUnit\\Framework\\MockObject\\Stub\\ReturnReference' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Stub/ReturnReference.php', 'PHPUnit\\Framework\\MockObject\\Stub\\ReturnSelf' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Stub/ReturnSelf.php', 'PHPUnit\\Framework\\MockObject\\Stub\\ReturnStub' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Stub/ReturnStub.php', 'PHPUnit\\Framework\\MockObject\\Stub\\ReturnValueMap' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Stub/ReturnValueMap.php', 'PHPUnit\\Framework\\MockObject\\Stub\\Stub' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Stub/Stub.php', 'PHPUnit\\Framework\\MockObject\\Verifiable' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Verifiable.php', 'PHPUnit\\Framework\\NoChildTestSuiteException' => $vendorDir . '/phpunit/phpunit/src/Framework/Exception/NoChildTestSuiteException.php', 'PHPUnit\\Framework\\OutputError' => $vendorDir . '/phpunit/phpunit/src/Framework/Exception/OutputError.php', 'PHPUnit\\Framework\\PHPTAssertionFailedError' => $vendorDir . '/phpunit/phpunit/src/Framework/Exception/PHPTAssertionFailedError.php', 'PHPUnit\\Framework\\RiskyTestError' => $vendorDir . '/phpunit/phpunit/src/Framework/Exception/RiskyTestError.php', 'PHPUnit\\Framework\\SelfDescribing' => $vendorDir . '/phpunit/phpunit/src/Framework/SelfDescribing.php', 'PHPUnit\\Framework\\SkippedTest' => $vendorDir . '/phpunit/phpunit/src/Framework/SkippedTest.php', 'PHPUnit\\Framework\\SkippedTestCase' => $vendorDir . '/phpunit/phpunit/src/Framework/SkippedTestCase.php', 'PHPUnit\\Framework\\SkippedTestError' => $vendorDir . '/phpunit/phpunit/src/Framework/Exception/SkippedTestError.php', 'PHPUnit\\Framework\\SkippedTestSuiteError' => $vendorDir . '/phpunit/phpunit/src/Framework/Exception/SkippedTestSuiteError.php', 'PHPUnit\\Framework\\SyntheticError' => $vendorDir . '/phpunit/phpunit/src/Framework/Exception/SyntheticError.php', 'PHPUnit\\Framework\\SyntheticSkippedError' => $vendorDir . '/phpunit/phpunit/src/Framework/Exception/SyntheticSkippedError.php', 'PHPUnit\\Framework\\Test' => $vendorDir . '/phpunit/phpunit/src/Framework/Test.php', 'PHPUnit\\Framework\\TestBuilder' => $vendorDir . '/phpunit/phpunit/src/Framework/TestBuilder.php', 'PHPUnit\\Framework\\TestCase' => $vendorDir . '/phpunit/phpunit/src/Framework/TestCase.php', 'PHPUnit\\Framework\\TestFailure' => $vendorDir . '/phpunit/phpunit/src/Framework/TestFailure.php', 'PHPUnit\\Framework\\TestListener' => $vendorDir . '/phpunit/phpunit/src/Framework/TestListener.php', 'PHPUnit\\Framework\\TestListenerDefaultImplementation' => $vendorDir . '/phpunit/phpunit/src/Framework/TestListenerDefaultImplementation.php', 'PHPUnit\\Framework\\TestResult' => $vendorDir . '/phpunit/phpunit/src/Framework/TestResult.php', 'PHPUnit\\Framework\\TestSuite' => $vendorDir . '/phpunit/phpunit/src/Framework/TestSuite.php', 'PHPUnit\\Framework\\TestSuiteIterator' => $vendorDir . '/phpunit/phpunit/src/Framework/TestSuiteIterator.php', 'PHPUnit\\Framework\\UnintentionallyCoveredCodeError' => $vendorDir . '/phpunit/phpunit/src/Framework/Exception/UnintentionallyCoveredCodeError.php', 'PHPUnit\\Framework\\Warning' => $vendorDir . '/phpunit/phpunit/src/Framework/Exception/Warning.php', 'PHPUnit\\Framework\\WarningTestCase' => $vendorDir . '/phpunit/phpunit/src/Framework/WarningTestCase.php', 'PHPUnit\\Runner\\AfterIncompleteTestHook' => $vendorDir . '/phpunit/phpunit/src/Runner/Hook/AfterIncompleteTestHook.php', 'PHPUnit\\Runner\\AfterLastTestHook' => $vendorDir . '/phpunit/phpunit/src/Runner/Hook/AfterLastTestHook.php', 'PHPUnit\\Runner\\AfterRiskyTestHook' => $vendorDir . '/phpunit/phpunit/src/Runner/Hook/AfterRiskyTestHook.php', 'PHPUnit\\Runner\\AfterSkippedTestHook' => $vendorDir . '/phpunit/phpunit/src/Runner/Hook/AfterSkippedTestHook.php', 'PHPUnit\\Runner\\AfterSuccessfulTestHook' => $vendorDir . '/phpunit/phpunit/src/Runner/Hook/AfterSuccessfulTestHook.php', 'PHPUnit\\Runner\\AfterTestErrorHook' => $vendorDir . '/phpunit/phpunit/src/Runner/Hook/AfterTestErrorHook.php', 'PHPUnit\\Runner\\AfterTestFailureHook' => $vendorDir . '/phpunit/phpunit/src/Runner/Hook/AfterTestFailureHook.php', 'PHPUnit\\Runner\\AfterTestHook' => $vendorDir . '/phpunit/phpunit/src/Runner/Hook/AfterTestHook.php', 'PHPUnit\\Runner\\AfterTestWarningHook' => $vendorDir . '/phpunit/phpunit/src/Runner/Hook/AfterTestWarningHook.php', 'PHPUnit\\Runner\\BaseTestRunner' => $vendorDir . '/phpunit/phpunit/src/Runner/BaseTestRunner.php', 'PHPUnit\\Runner\\BeforeFirstTestHook' => $vendorDir . '/phpunit/phpunit/src/Runner/Hook/BeforeFirstTestHook.php', 'PHPUnit\\Runner\\BeforeTestHook' => $vendorDir . '/phpunit/phpunit/src/Runner/Hook/BeforeTestHook.php', 'PHPUnit\\Runner\\DefaultTestResultCache' => $vendorDir . '/phpunit/phpunit/src/Runner/DefaultTestResultCache.php', 'PHPUnit\\Runner\\Exception' => $vendorDir . '/phpunit/phpunit/src/Runner/Exception.php', 'PHPUnit\\Runner\\Filter\\ExcludeGroupFilterIterator' => $vendorDir . '/phpunit/phpunit/src/Runner/Filter/ExcludeGroupFilterIterator.php', 'PHPUnit\\Runner\\Filter\\Factory' => $vendorDir . '/phpunit/phpunit/src/Runner/Filter/Factory.php', 'PHPUnit\\Runner\\Filter\\GroupFilterIterator' => $vendorDir . '/phpunit/phpunit/src/Runner/Filter/GroupFilterIterator.php', 'PHPUnit\\Runner\\Filter\\IncludeGroupFilterIterator' => $vendorDir . '/phpunit/phpunit/src/Runner/Filter/IncludeGroupFilterIterator.php', 'PHPUnit\\Runner\\Filter\\NameFilterIterator' => $vendorDir . '/phpunit/phpunit/src/Runner/Filter/NameFilterIterator.php', 'PHPUnit\\Runner\\Hook' => $vendorDir . '/phpunit/phpunit/src/Runner/Hook/Hook.php', 'PHPUnit\\Runner\\NullTestResultCache' => $vendorDir . '/phpunit/phpunit/src/Runner/NullTestResultCache.php', 'PHPUnit\\Runner\\PhptTestCase' => $vendorDir . '/phpunit/phpunit/src/Runner/PhptTestCase.php', 'PHPUnit\\Runner\\ResultCacheExtension' => $vendorDir . '/phpunit/phpunit/src/Runner/ResultCacheExtension.php', 'PHPUnit\\Runner\\StandardTestSuiteLoader' => $vendorDir . '/phpunit/phpunit/src/Runner/StandardTestSuiteLoader.php', 'PHPUnit\\Runner\\TestHook' => $vendorDir . '/phpunit/phpunit/src/Runner/Hook/TestHook.php', 'PHPUnit\\Runner\\TestListenerAdapter' => $vendorDir . '/phpunit/phpunit/src/Runner/Hook/TestListenerAdapter.php', 'PHPUnit\\Runner\\TestResultCache' => $vendorDir . '/phpunit/phpunit/src/Runner/TestResultCache.php', 'PHPUnit\\Runner\\TestSuiteLoader' => $vendorDir . '/phpunit/phpunit/src/Runner/TestSuiteLoader.php', 'PHPUnit\\Runner\\TestSuiteSorter' => $vendorDir . '/phpunit/phpunit/src/Runner/TestSuiteSorter.php', 'PHPUnit\\Runner\\Version' => $vendorDir . '/phpunit/phpunit/src/Runner/Version.php', 'PHPUnit\\TextUI\\Command' => $vendorDir . '/phpunit/phpunit/src/TextUI/Command.php', 'PHPUnit\\TextUI\\Exception' => $vendorDir . '/phpunit/phpunit/src/TextUI/Exception.php', 'PHPUnit\\TextUI\\Help' => $vendorDir . '/phpunit/phpunit/src/TextUI/Help.php', 'PHPUnit\\TextUI\\ResultPrinter' => $vendorDir . '/phpunit/phpunit/src/TextUI/ResultPrinter.php', 'PHPUnit\\TextUI\\TestRunner' => $vendorDir . '/phpunit/phpunit/src/TextUI/TestRunner.php', 'PHPUnit\\Util\\Annotation\\DocBlock' => $vendorDir . '/phpunit/phpunit/src/Util/Annotation/DocBlock.php', 'PHPUnit\\Util\\Annotation\\Registry' => $vendorDir . '/phpunit/phpunit/src/Util/Annotation/Registry.php', 'PHPUnit\\Util\\Blacklist' => $vendorDir . '/phpunit/phpunit/src/Util/Blacklist.php', 'PHPUnit\\Util\\Color' => $vendorDir . '/phpunit/phpunit/src/Util/Color.php', 'PHPUnit\\Util\\Configuration' => $vendorDir . '/phpunit/phpunit/src/Util/Configuration.php', 'PHPUnit\\Util\\ConfigurationGenerator' => $vendorDir . '/phpunit/phpunit/src/Util/ConfigurationGenerator.php', 'PHPUnit\\Util\\ErrorHandler' => $vendorDir . '/phpunit/phpunit/src/Util/ErrorHandler.php', 'PHPUnit\\Util\\Exception' => $vendorDir . '/phpunit/phpunit/src/Util/Exception.php', 'PHPUnit\\Util\\FileLoader' => $vendorDir . '/phpunit/phpunit/src/Util/FileLoader.php', 'PHPUnit\\Util\\Filesystem' => $vendorDir . '/phpunit/phpunit/src/Util/Filesystem.php', 'PHPUnit\\Util\\Filter' => $vendorDir . '/phpunit/phpunit/src/Util/Filter.php', 'PHPUnit\\Util\\Getopt' => $vendorDir . '/phpunit/phpunit/src/Util/Getopt.php', 'PHPUnit\\Util\\GlobalState' => $vendorDir . '/phpunit/phpunit/src/Util/GlobalState.php', 'PHPUnit\\Util\\InvalidDataSetException' => $vendorDir . '/phpunit/phpunit/src/Util/InvalidDataSetException.php', 'PHPUnit\\Util\\Json' => $vendorDir . '/phpunit/phpunit/src/Util/Json.php', 'PHPUnit\\Util\\Log\\JUnit' => $vendorDir . '/phpunit/phpunit/src/Util/Log/JUnit.php', 'PHPUnit\\Util\\Log\\TeamCity' => $vendorDir . '/phpunit/phpunit/src/Util/Log/TeamCity.php', 'PHPUnit\\Util\\PHP\\AbstractPhpProcess' => $vendorDir . '/phpunit/phpunit/src/Util/PHP/AbstractPhpProcess.php', 'PHPUnit\\Util\\PHP\\DefaultPhpProcess' => $vendorDir . '/phpunit/phpunit/src/Util/PHP/DefaultPhpProcess.php', 'PHPUnit\\Util\\PHP\\WindowsPhpProcess' => $vendorDir . '/phpunit/phpunit/src/Util/PHP/WindowsPhpProcess.php', 'PHPUnit\\Util\\Printer' => $vendorDir . '/phpunit/phpunit/src/Util/Printer.php', 'PHPUnit\\Util\\Reflection' => $vendorDir . '/phpunit/phpunit/src/Util/Reflection.php', 'PHPUnit\\Util\\RegularExpression' => $vendorDir . '/phpunit/phpunit/src/Util/RegularExpression.php', 'PHPUnit\\Util\\Test' => $vendorDir . '/phpunit/phpunit/src/Util/Test.php', 'PHPUnit\\Util\\TestDox\\CliTestDoxPrinter' => $vendorDir . '/phpunit/phpunit/src/Util/TestDox/CliTestDoxPrinter.php', 'PHPUnit\\Util\\TestDox\\HtmlResultPrinter' => $vendorDir . '/phpunit/phpunit/src/Util/TestDox/HtmlResultPrinter.php', 'PHPUnit\\Util\\TestDox\\NamePrettifier' => $vendorDir . '/phpunit/phpunit/src/Util/TestDox/NamePrettifier.php', 'PHPUnit\\Util\\TestDox\\ResultPrinter' => $vendorDir . '/phpunit/phpunit/src/Util/TestDox/ResultPrinter.php', 'PHPUnit\\Util\\TestDox\\TestDoxPrinter' => $vendorDir . '/phpunit/phpunit/src/Util/TestDox/TestDoxPrinter.php', 'PHPUnit\\Util\\TestDox\\TextResultPrinter' => $vendorDir . '/phpunit/phpunit/src/Util/TestDox/TextResultPrinter.php', 'PHPUnit\\Util\\TestDox\\XmlResultPrinter' => $vendorDir . '/phpunit/phpunit/src/Util/TestDox/XmlResultPrinter.php', 'PHPUnit\\Util\\TextTestListRenderer' => $vendorDir . '/phpunit/phpunit/src/Util/TextTestListRenderer.php', 'PHPUnit\\Util\\Type' => $vendorDir . '/phpunit/phpunit/src/Util/Type.php', 'PHPUnit\\Util\\VersionComparisonOperator' => $vendorDir . '/phpunit/phpunit/src/Util/VersionComparisonOperator.php', 'PHPUnit\\Util\\XdebugFilterScriptGenerator' => $vendorDir . '/phpunit/phpunit/src/Util/XdebugFilterScriptGenerator.php', 'PHPUnit\\Util\\Xml' => $vendorDir . '/phpunit/phpunit/src/Util/Xml.php', 'PHPUnit\\Util\\XmlTestListRenderer' => $vendorDir . '/phpunit/phpunit/src/Util/XmlTestListRenderer.php', 'PHP_Token' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', 'PHP_TokenWithScope' => $vendorDir . '/phpunit/php-token-stream/src/TokenWithScope.php', 'PHP_TokenWithScopeAndVisibility' => $vendorDir . '/phpunit/php-token-stream/src/TokenWithScopeAndVisibility.php', 'PHP_Token_ABSTRACT' => $vendorDir . '/phpunit/php-token-stream/src/Abstract.php', 'PHP_Token_AMPERSAND' => $vendorDir . '/phpunit/php-token-stream/src/Ampersand.php', 'PHP_Token_AND_EQUAL' => $vendorDir . '/phpunit/php-token-stream/src/AndEqual.php', 'PHP_Token_ARRAY' => $vendorDir . '/phpunit/php-token-stream/src/Array.php', 'PHP_Token_ARRAY_CAST' => $vendorDir . '/phpunit/php-token-stream/src/ArrayCast.php', 'PHP_Token_AS' => $vendorDir . '/phpunit/php-token-stream/src/As.php', 'PHP_Token_AT' => $vendorDir . '/phpunit/php-token-stream/src/At.php', 'PHP_Token_BACKTICK' => $vendorDir . '/phpunit/php-token-stream/src/Backtick.php', 'PHP_Token_BAD_CHARACTER' => $vendorDir . '/phpunit/php-token-stream/src/BadCharacter.php', 'PHP_Token_BOOLEAN_AND' => $vendorDir . '/phpunit/php-token-stream/src/BooleanAnd.php', 'PHP_Token_BOOLEAN_OR' => $vendorDir . '/phpunit/php-token-stream/src/BooleanOr.php', 'PHP_Token_BOOL_CAST' => $vendorDir . '/phpunit/php-token-stream/src/BoolCast.php', 'PHP_Token_BREAK' => $vendorDir . '/phpunit/php-token-stream/src/break.php', 'PHP_Token_CALLABLE' => $vendorDir . '/phpunit/php-token-stream/src/Callable.php', 'PHP_Token_CARET' => $vendorDir . '/phpunit/php-token-stream/src/Caret.php', 'PHP_Token_CASE' => $vendorDir . '/phpunit/php-token-stream/src/Case.php', 'PHP_Token_CATCH' => $vendorDir . '/phpunit/php-token-stream/src/Catch.php', 'PHP_Token_CHARACTER' => $vendorDir . '/phpunit/php-token-stream/src/Character.php', 'PHP_Token_CLASS' => $vendorDir . '/phpunit/php-token-stream/src/Class.php', 'PHP_Token_CLASS_C' => $vendorDir . '/phpunit/php-token-stream/src/ClassC.php', 'PHP_Token_CLASS_NAME_CONSTANT' => $vendorDir . '/phpunit/php-token-stream/src/ClassNameConstant.php', 'PHP_Token_CLONE' => $vendorDir . '/phpunit/php-token-stream/src/Clone.php', 'PHP_Token_CLOSE_BRACKET' => $vendorDir . '/phpunit/php-token-stream/src/CloseBracket.php', 'PHP_Token_CLOSE_CURLY' => $vendorDir . '/phpunit/php-token-stream/src/CloseCurly.php', 'PHP_Token_CLOSE_SQUARE' => $vendorDir . '/phpunit/php-token-stream/src/CloseSquare.php', 'PHP_Token_CLOSE_TAG' => $vendorDir . '/phpunit/php-token-stream/src/CloseTag.php', 'PHP_Token_COALESCE' => $vendorDir . '/phpunit/php-token-stream/src/Coalesce.php', 'PHP_Token_COALESCE_EQUAL' => $vendorDir . '/phpunit/php-token-stream/src/CoalesceEqual.php', 'PHP_Token_COLON' => $vendorDir . '/phpunit/php-token-stream/src/Colon.php', 'PHP_Token_COMMA' => $vendorDir . '/phpunit/php-token-stream/src/Comma.php', 'PHP_Token_COMMENT' => $vendorDir . '/phpunit/php-token-stream/src/Comment.php', 'PHP_Token_CONCAT_EQUAL' => $vendorDir . '/phpunit/php-token-stream/src/ConcatEqual.php', 'PHP_Token_CONST' => $vendorDir . '/phpunit/php-token-stream/src/Const.php', 'PHP_Token_CONSTANT_ENCAPSED_STRING' => $vendorDir . '/phpunit/php-token-stream/src/ConstantEncapsedString.php', 'PHP_Token_CONTINUE' => $vendorDir . '/phpunit/php-token-stream/src/Continue.php', 'PHP_Token_CURLY_OPEN' => $vendorDir . '/phpunit/php-token-stream/src/CurlyOpen.php', 'PHP_Token_DEC' => $vendorDir . '/phpunit/php-token-stream/src/Dec.php', 'PHP_Token_DECLARE' => $vendorDir . '/phpunit/php-token-stream/src/Declare.php', 'PHP_Token_DEFAULT' => $vendorDir . '/phpunit/php-token-stream/src/Default.php', 'PHP_Token_DIR' => $vendorDir . '/phpunit/php-token-stream/src/Dir.php', 'PHP_Token_DIV' => $vendorDir . '/phpunit/php-token-stream/src/Div.php', 'PHP_Token_DIV_EQUAL' => $vendorDir . '/phpunit/php-token-stream/src/DivEqual.php', 'PHP_Token_DNUMBER' => $vendorDir . '/phpunit/php-token-stream/src/DNumber.php', 'PHP_Token_DO' => $vendorDir . '/phpunit/php-token-stream/src/Do.php', 'PHP_Token_DOC_COMMENT' => $vendorDir . '/phpunit/php-token-stream/src/DocComment.php', 'PHP_Token_DOLLAR' => $vendorDir . '/phpunit/php-token-stream/src/Dollar.php', 'PHP_Token_DOLLAR_OPEN_CURLY_BRACES' => $vendorDir . '/phpunit/php-token-stream/src/DollarOpenCurlyBraces.php', 'PHP_Token_DOT' => $vendorDir . '/phpunit/php-token-stream/src/Dot.php', 'PHP_Token_DOUBLE_ARROW' => $vendorDir . '/phpunit/php-token-stream/src/DoubleArrow.php', 'PHP_Token_DOUBLE_CAST' => $vendorDir . '/phpunit/php-token-stream/src/DoubleCast.php', 'PHP_Token_DOUBLE_COLON' => $vendorDir . '/phpunit/php-token-stream/src/DoubleColon.php', 'PHP_Token_DOUBLE_QUOTES' => $vendorDir . '/phpunit/php-token-stream/src/DoubleQuotes.php', 'PHP_Token_ECHO' => $vendorDir . '/phpunit/php-token-stream/src/Echo.php', 'PHP_Token_ELLIPSIS' => $vendorDir . '/phpunit/php-token-stream/src/Ellipsis.php', 'PHP_Token_ELSE' => $vendorDir . '/phpunit/php-token-stream/src/Else.php', 'PHP_Token_ELSEIF' => $vendorDir . '/phpunit/php-token-stream/src/Elseif.php', 'PHP_Token_EMPTY' => $vendorDir . '/phpunit/php-token-stream/src/Empty.php', 'PHP_Token_ENCAPSED_AND_WHITESPACE' => $vendorDir . '/phpunit/php-token-stream/src/EncapsedAndWhitespace.php', 'PHP_Token_ENDDECLARE' => $vendorDir . '/phpunit/php-token-stream/src/Enddeclare.php', 'PHP_Token_ENDFOR' => $vendorDir . '/phpunit/php-token-stream/src/Endfor.php', 'PHP_Token_ENDFOREACH' => $vendorDir . '/phpunit/php-token-stream/src/Endforeach.php', 'PHP_Token_ENDIF' => $vendorDir . '/phpunit/php-token-stream/src/Endif.php', 'PHP_Token_ENDSWITCH' => $vendorDir . '/phpunit/php-token-stream/src/Endswitch.php', 'PHP_Token_ENDWHILE' => $vendorDir . '/phpunit/php-token-stream/src/Endwhile.php', 'PHP_Token_END_HEREDOC' => $vendorDir . '/phpunit/php-token-stream/src/EndHeredoc.php', 'PHP_Token_EQUAL' => $vendorDir . '/phpunit/php-token-stream/src/Equal.php', 'PHP_Token_EVAL' => $vendorDir . '/phpunit/php-token-stream/src/Eval.php', 'PHP_Token_EXCLAMATION_MARK' => $vendorDir . '/phpunit/php-token-stream/src/ExclamationMark.php', 'PHP_Token_EXIT' => $vendorDir . '/phpunit/php-token-stream/src/Exit.php', 'PHP_Token_EXTENDS' => $vendorDir . '/phpunit/php-token-stream/src/Extends.php', 'PHP_Token_FILE' => $vendorDir . '/phpunit/php-token-stream/src/File.php', 'PHP_Token_FINAL' => $vendorDir . '/phpunit/php-token-stream/src/Final.php', 'PHP_Token_FINALLY' => $vendorDir . '/phpunit/php-token-stream/src/Finally.php', 'PHP_Token_FN' => $vendorDir . '/phpunit/php-token-stream/src/Fn.php', 'PHP_Token_FOR' => $vendorDir . '/phpunit/php-token-stream/src/For.php', 'PHP_Token_FOREACH' => $vendorDir . '/phpunit/php-token-stream/src/Foreach.php', 'PHP_Token_FUNCTION' => $vendorDir . '/phpunit/php-token-stream/src/Function.php', 'PHP_Token_FUNC_C' => $vendorDir . '/phpunit/php-token-stream/src/FuncC.php', 'PHP_Token_GLOBAL' => $vendorDir . '/phpunit/php-token-stream/src/Global.php', 'PHP_Token_GOTO' => $vendorDir . '/phpunit/php-token-stream/src/Goto.php', 'PHP_Token_GT' => $vendorDir . '/phpunit/php-token-stream/src/Gt.php', 'PHP_Token_HALT_COMPILER' => $vendorDir . '/phpunit/php-token-stream/src/HaltCompiler.php', 'PHP_Token_IF' => $vendorDir . '/phpunit/php-token-stream/src/If.php', 'PHP_Token_IMPLEMENTS' => $vendorDir . '/phpunit/php-token-stream/src/Implements.php', 'PHP_Token_INC' => $vendorDir . '/phpunit/php-token-stream/src/Inc.php', 'PHP_Token_INCLUDE' => $vendorDir . '/phpunit/php-token-stream/src/Include.php', 'PHP_Token_INCLUDE_ONCE' => $vendorDir . '/phpunit/php-token-stream/src/IncludeOnce.php', 'PHP_Token_INLINE_HTML' => $vendorDir . '/phpunit/php-token-stream/src/InlineHtml.php', 'PHP_Token_INSTANCEOF' => $vendorDir . '/phpunit/php-token-stream/src/Instanceof.php', 'PHP_Token_INSTEADOF' => $vendorDir . '/phpunit/php-token-stream/src/Insteadof.php', 'PHP_Token_INTERFACE' => $vendorDir . '/phpunit/php-token-stream/src/Interface.php', 'PHP_Token_INT_CAST' => $vendorDir . '/phpunit/php-token-stream/src/IntCast.php', 'PHP_Token_ISSET' => $vendorDir . '/phpunit/php-token-stream/src/Isset.php', 'PHP_Token_IS_EQUAL' => $vendorDir . '/phpunit/php-token-stream/src/IsEqual.php', 'PHP_Token_IS_GREATER_OR_EQUAL' => $vendorDir . '/phpunit/php-token-stream/src/IsGreaterOrEqual.php', 'PHP_Token_IS_IDENTICAL' => $vendorDir . '/phpunit/php-token-stream/src/IsIdentical.php', 'PHP_Token_IS_NOT_EQUAL' => $vendorDir . '/phpunit/php-token-stream/src/IsNotEqual.php', 'PHP_Token_IS_NOT_IDENTICAL' => $vendorDir . '/phpunit/php-token-stream/src/IsNotIdentical.php', 'PHP_Token_IS_SMALLER_OR_EQUAL' => $vendorDir . '/phpunit/php-token-stream/src/IsSmallerOrEqual.php', 'PHP_Token_Includes' => $vendorDir . '/phpunit/php-token-stream/src/Includes.php', 'PHP_Token_LINE' => $vendorDir . '/phpunit/php-token-stream/src/Line.php', 'PHP_Token_LIST' => $vendorDir . '/phpunit/php-token-stream/src/List.php', 'PHP_Token_LNUMBER' => $vendorDir . '/phpunit/php-token-stream/src/Lnumber.php', 'PHP_Token_LOGICAL_AND' => $vendorDir . '/phpunit/php-token-stream/src/LogicalAnd.php', 'PHP_Token_LOGICAL_OR' => $vendorDir . '/phpunit/php-token-stream/src/LogicalOr.php', 'PHP_Token_LOGICAL_XOR' => $vendorDir . '/phpunit/php-token-stream/src/LogicalXor.php', 'PHP_Token_LT' => $vendorDir . '/phpunit/php-token-stream/src/Lt.php', 'PHP_Token_METHOD_C' => $vendorDir . '/phpunit/php-token-stream/src/MethodC.php', 'PHP_Token_MINUS' => $vendorDir . '/phpunit/php-token-stream/src/Minus.php', 'PHP_Token_MINUS_EQUAL' => $vendorDir . '/phpunit/php-token-stream/src/MinusEqual.php', 'PHP_Token_MOD_EQUAL' => $vendorDir . '/phpunit/php-token-stream/src/ModEqual.php', 'PHP_Token_MULT' => $vendorDir . '/phpunit/php-token-stream/src/Mult.php', 'PHP_Token_MUL_EQUAL' => $vendorDir . '/phpunit/php-token-stream/src/MulEqual.php', 'PHP_Token_NAMESPACE' => $vendorDir . '/phpunit/php-token-stream/src/Namespace.php', 'PHP_Token_NAME_FULLY_QUALIFIED' => $vendorDir . '/phpunit/php-token-stream/src/NameFullyQualified.php', 'PHP_Token_NAME_QUALIFIED' => $vendorDir . '/phpunit/php-token-stream/src/NameQualified.php', 'PHP_Token_NAME_RELATIVE' => $vendorDir . '/phpunit/php-token-stream/src/NameRelative.php', 'PHP_Token_NEW' => $vendorDir . '/phpunit/php-token-stream/src/New.php', 'PHP_Token_NS_C' => $vendorDir . '/phpunit/php-token-stream/src/NsC.php', 'PHP_Token_NS_SEPARATOR' => $vendorDir . '/phpunit/php-token-stream/src/NsSeparator.php', 'PHP_Token_NUM_STRING' => $vendorDir . '/phpunit/php-token-stream/src/NumString.php', 'PHP_Token_OBJECT_CAST' => $vendorDir . '/phpunit/php-token-stream/src/ObjectCast.php', 'PHP_Token_OBJECT_OPERATOR' => $vendorDir . '/phpunit/php-token-stream/src/ObjectOperator.php', 'PHP_Token_OPEN_BRACKET' => $vendorDir . '/phpunit/php-token-stream/src/OpenBracket.php', 'PHP_Token_OPEN_CURLY' => $vendorDir . '/phpunit/php-token-stream/src/OpenCurly.php', 'PHP_Token_OPEN_SQUARE' => $vendorDir . '/phpunit/php-token-stream/src/OpenSquare.php', 'PHP_Token_OPEN_TAG' => $vendorDir . '/phpunit/php-token-stream/src/OpenTag.php', 'PHP_Token_OPEN_TAG_WITH_ECHO' => $vendorDir . '/phpunit/php-token-stream/src/OpenTagWithEcho.php', 'PHP_Token_OR_EQUAL' => $vendorDir . '/phpunit/php-token-stream/src/OrEqual.php', 'PHP_Token_PAAMAYIM_NEKUDOTAYIM' => $vendorDir . '/phpunit/php-token-stream/src/PaamayimNekudotayim.php', 'PHP_Token_PERCENT' => $vendorDir . '/phpunit/php-token-stream/src/Percent.php', 'PHP_Token_PIPE' => $vendorDir . '/phpunit/php-token-stream/src/Pipe.php', 'PHP_Token_PLUS' => $vendorDir . '/phpunit/php-token-stream/src/Plus.php', 'PHP_Token_PLUS_EQUAL' => $vendorDir . '/phpunit/php-token-stream/src/PlusEqual.php', 'PHP_Token_POW' => $vendorDir . '/phpunit/php-token-stream/src/Pow.php', 'PHP_Token_POW_EQUAL' => $vendorDir . '/phpunit/php-token-stream/src/PowEqual.php', 'PHP_Token_PRINT' => $vendorDir . '/phpunit/php-token-stream/src/Print.php', 'PHP_Token_PRIVATE' => $vendorDir . '/phpunit/php-token-stream/src/Private.php', 'PHP_Token_PROTECTED' => $vendorDir . '/phpunit/php-token-stream/src/Protected.php', 'PHP_Token_PUBLIC' => $vendorDir . '/phpunit/php-token-stream/src/Public.php', 'PHP_Token_QUESTION_MARK' => $vendorDir . '/phpunit/php-token-stream/src/QuestionMark.php', 'PHP_Token_REQUIRE' => $vendorDir . '/phpunit/php-token-stream/src/Require.php', 'PHP_Token_REQUIRE_ONCE' => $vendorDir . '/phpunit/php-token-stream/src/RequireOnce.php', 'PHP_Token_RETURN' => $vendorDir . '/phpunit/php-token-stream/src/Return.php', 'PHP_Token_SEMICOLON' => $vendorDir . '/phpunit/php-token-stream/src/Semicolon.php', 'PHP_Token_SL' => $vendorDir . '/phpunit/php-token-stream/src/Sl.php', 'PHP_Token_SL_EQUAL' => $vendorDir . '/phpunit/php-token-stream/src/SlEqual.php', 'PHP_Token_SPACESHIP' => $vendorDir . '/phpunit/php-token-stream/src/Spaceship.php', 'PHP_Token_SR' => $vendorDir . '/phpunit/php-token-stream/src/Sr.php', 'PHP_Token_SR_EQUAL' => $vendorDir . '/phpunit/php-token-stream/src/SrEqual.php', 'PHP_Token_START_HEREDOC' => $vendorDir . '/phpunit/php-token-stream/src/StartHeredoc.php', 'PHP_Token_STATIC' => $vendorDir . '/phpunit/php-token-stream/src/Static.php', 'PHP_Token_STRING' => $vendorDir . '/phpunit/php-token-stream/src/String.php', 'PHP_Token_STRING_CAST' => $vendorDir . '/phpunit/php-token-stream/src/StringCast.php', 'PHP_Token_STRING_VARNAME' => $vendorDir . '/phpunit/php-token-stream/src/StringVarname.php', 'PHP_Token_SWITCH' => $vendorDir . '/phpunit/php-token-stream/src/Switch.php', 'PHP_Token_Stream' => $vendorDir . '/phpunit/php-token-stream/src/Stream.php', 'PHP_Token_Stream_CachingFactory' => $vendorDir . '/phpunit/php-token-stream/src/CachingFactory.php', 'PHP_Token_THROW' => $vendorDir . '/phpunit/php-token-stream/src/Throw.php', 'PHP_Token_TILDE' => $vendorDir . '/phpunit/php-token-stream/src/Tilde.php', 'PHP_Token_TRAIT' => $vendorDir . '/phpunit/php-token-stream/src/Trait.php', 'PHP_Token_TRAIT_C' => $vendorDir . '/phpunit/php-token-stream/src/TraitC.php', 'PHP_Token_TRY' => $vendorDir . '/phpunit/php-token-stream/src/Try.php', 'PHP_Token_UNSET' => $vendorDir . '/phpunit/php-token-stream/src/Unset.php', 'PHP_Token_UNSET_CAST' => $vendorDir . '/phpunit/php-token-stream/src/UnsetCast.php', 'PHP_Token_USE' => $vendorDir . '/phpunit/php-token-stream/src/Use.php', 'PHP_Token_USE_FUNCTION' => $vendorDir . '/phpunit/php-token-stream/src/UseFunction.php', 'PHP_Token_Util' => $vendorDir . '/phpunit/php-token-stream/src/Util.php', 'PHP_Token_VAR' => $vendorDir . '/phpunit/php-token-stream/src/Var.php', 'PHP_Token_VARIABLE' => $vendorDir . '/phpunit/php-token-stream/src/Variable.php', 'PHP_Token_WHILE' => $vendorDir . '/phpunit/php-token-stream/src/While.php', 'PHP_Token_WHITESPACE' => $vendorDir . '/phpunit/php-token-stream/src/Whitespace.php', 'PHP_Token_XOR_EQUAL' => $vendorDir . '/phpunit/php-token-stream/src/XorEqual.php', 'PHP_Token_YIELD' => $vendorDir . '/phpunit/php-token-stream/src/Yield.php', 'PHP_Token_YIELD_FROM' => $vendorDir . '/phpunit/php-token-stream/src/YieldFrom.php', 'PharIo\\Manifest\\Application' => $vendorDir . '/phar-io/manifest/src/values/Application.php', 'PharIo\\Manifest\\ApplicationName' => $vendorDir . '/phar-io/manifest/src/values/ApplicationName.php', 'PharIo\\Manifest\\Author' => $vendorDir . '/phar-io/manifest/src/values/Author.php', 'PharIo\\Manifest\\AuthorCollection' => $vendorDir . '/phar-io/manifest/src/values/AuthorCollection.php', 'PharIo\\Manifest\\AuthorCollectionIterator' => $vendorDir . '/phar-io/manifest/src/values/AuthorCollectionIterator.php', 'PharIo\\Manifest\\AuthorElement' => $vendorDir . '/phar-io/manifest/src/xml/AuthorElement.php', 'PharIo\\Manifest\\AuthorElementCollection' => $vendorDir . '/phar-io/manifest/src/xml/AuthorElementCollection.php', 'PharIo\\Manifest\\BundledComponent' => $vendorDir . '/phar-io/manifest/src/values/BundledComponent.php', 'PharIo\\Manifest\\BundledComponentCollection' => $vendorDir . '/phar-io/manifest/src/values/BundledComponentCollection.php', 'PharIo\\Manifest\\BundledComponentCollectionIterator' => $vendorDir . '/phar-io/manifest/src/values/BundledComponentCollectionIterator.php', 'PharIo\\Manifest\\BundlesElement' => $vendorDir . '/phar-io/manifest/src/xml/BundlesElement.php', 'PharIo\\Manifest\\ComponentElement' => $vendorDir . '/phar-io/manifest/src/xml/ComponentElement.php', 'PharIo\\Manifest\\ComponentElementCollection' => $vendorDir . '/phar-io/manifest/src/xml/ComponentElementCollection.php', 'PharIo\\Manifest\\ContainsElement' => $vendorDir . '/phar-io/manifest/src/xml/ContainsElement.php', 'PharIo\\Manifest\\CopyrightElement' => $vendorDir . '/phar-io/manifest/src/xml/CopyrightElement.php', 'PharIo\\Manifest\\CopyrightInformation' => $vendorDir . '/phar-io/manifest/src/values/CopyrightInformation.php', 'PharIo\\Manifest\\ElementCollection' => $vendorDir . '/phar-io/manifest/src/xml/ElementCollection.php', 'PharIo\\Manifest\\ElementCollectionException' => $vendorDir . '/phar-io/manifest/src/exceptions/ElementCollectionException.php', 'PharIo\\Manifest\\Email' => $vendorDir . '/phar-io/manifest/src/values/Email.php', 'PharIo\\Manifest\\Exception' => $vendorDir . '/phar-io/manifest/src/exceptions/Exception.php', 'PharIo\\Manifest\\ExtElement' => $vendorDir . '/phar-io/manifest/src/xml/ExtElement.php', 'PharIo\\Manifest\\ExtElementCollection' => $vendorDir . '/phar-io/manifest/src/xml/ExtElementCollection.php', 'PharIo\\Manifest\\Extension' => $vendorDir . '/phar-io/manifest/src/values/Extension.php', 'PharIo\\Manifest\\ExtensionElement' => $vendorDir . '/phar-io/manifest/src/xml/ExtensionElement.php', 'PharIo\\Manifest\\InvalidApplicationNameException' => $vendorDir . '/phar-io/manifest/src/exceptions/InvalidApplicationNameException.php', 'PharIo\\Manifest\\InvalidEmailException' => $vendorDir . '/phar-io/manifest/src/exceptions/InvalidEmailException.php', 'PharIo\\Manifest\\InvalidUrlException' => $vendorDir . '/phar-io/manifest/src/exceptions/InvalidUrlException.php', 'PharIo\\Manifest\\Library' => $vendorDir . '/phar-io/manifest/src/values/Library.php', 'PharIo\\Manifest\\License' => $vendorDir . '/phar-io/manifest/src/values/License.php', 'PharIo\\Manifest\\LicenseElement' => $vendorDir . '/phar-io/manifest/src/xml/LicenseElement.php', 'PharIo\\Manifest\\Manifest' => $vendorDir . '/phar-io/manifest/src/values/Manifest.php', 'PharIo\\Manifest\\ManifestDocument' => $vendorDir . '/phar-io/manifest/src/xml/ManifestDocument.php', 'PharIo\\Manifest\\ManifestDocumentException' => $vendorDir . '/phar-io/manifest/src/exceptions/ManifestDocumentException.php', 'PharIo\\Manifest\\ManifestDocumentLoadingException' => $vendorDir . '/phar-io/manifest/src/exceptions/ManifestDocumentLoadingException.php', 'PharIo\\Manifest\\ManifestDocumentMapper' => $vendorDir . '/phar-io/manifest/src/ManifestDocumentMapper.php', 'PharIo\\Manifest\\ManifestDocumentMapperException' => $vendorDir . '/phar-io/manifest/src/exceptions/ManifestDocumentMapperException.php', 'PharIo\\Manifest\\ManifestElement' => $vendorDir . '/phar-io/manifest/src/xml/ManifestElement.php', 'PharIo\\Manifest\\ManifestElementException' => $vendorDir . '/phar-io/manifest/src/exceptions/ManifestElementException.php', 'PharIo\\Manifest\\ManifestLoader' => $vendorDir . '/phar-io/manifest/src/ManifestLoader.php', 'PharIo\\Manifest\\ManifestLoaderException' => $vendorDir . '/phar-io/manifest/src/exceptions/ManifestLoaderException.php', 'PharIo\\Manifest\\ManifestSerializer' => $vendorDir . '/phar-io/manifest/src/ManifestSerializer.php', 'PharIo\\Manifest\\NoEmailAddressException' => $vendorDir . '/phar-io/manifest/src/exceptions/NoEmailAddressException.php', 'PharIo\\Manifest\\PhpElement' => $vendorDir . '/phar-io/manifest/src/xml/PhpElement.php', 'PharIo\\Manifest\\PhpExtensionRequirement' => $vendorDir . '/phar-io/manifest/src/values/PhpExtensionRequirement.php', 'PharIo\\Manifest\\PhpVersionRequirement' => $vendorDir . '/phar-io/manifest/src/values/PhpVersionRequirement.php', 'PharIo\\Manifest\\Requirement' => $vendorDir . '/phar-io/manifest/src/values/Requirement.php', 'PharIo\\Manifest\\RequirementCollection' => $vendorDir . '/phar-io/manifest/src/values/RequirementCollection.php', 'PharIo\\Manifest\\RequirementCollectionIterator' => $vendorDir . '/phar-io/manifest/src/values/RequirementCollectionIterator.php', 'PharIo\\Manifest\\RequiresElement' => $vendorDir . '/phar-io/manifest/src/xml/RequiresElement.php', 'PharIo\\Manifest\\Type' => $vendorDir . '/phar-io/manifest/src/values/Type.php', 'PharIo\\Manifest\\Url' => $vendorDir . '/phar-io/manifest/src/values/Url.php', 'PharIo\\Version\\AbstractVersionConstraint' => $vendorDir . '/phar-io/version/src/constraints/AbstractVersionConstraint.php', 'PharIo\\Version\\AndVersionConstraintGroup' => $vendorDir . '/phar-io/version/src/constraints/AndVersionConstraintGroup.php', 'PharIo\\Version\\AnyVersionConstraint' => $vendorDir . '/phar-io/version/src/constraints/AnyVersionConstraint.php', 'PharIo\\Version\\BuildMetaData' => $vendorDir . '/phar-io/version/src/BuildMetaData.php', 'PharIo\\Version\\ExactVersionConstraint' => $vendorDir . '/phar-io/version/src/constraints/ExactVersionConstraint.php', 'PharIo\\Version\\Exception' => $vendorDir . '/phar-io/version/src/exceptions/Exception.php', 'PharIo\\Version\\GreaterThanOrEqualToVersionConstraint' => $vendorDir . '/phar-io/version/src/constraints/GreaterThanOrEqualToVersionConstraint.php', 'PharIo\\Version\\InvalidPreReleaseSuffixException' => $vendorDir . '/phar-io/version/src/exceptions/InvalidPreReleaseSuffixException.php', 'PharIo\\Version\\InvalidVersionException' => $vendorDir . '/phar-io/version/src/exceptions/InvalidVersionException.php', 'PharIo\\Version\\NoBuildMetaDataException' => $vendorDir . '/phar-io/version/src/exceptions/NoBuildMetaDataException.php', 'PharIo\\Version\\NoPreReleaseSuffixException' => $vendorDir . '/phar-io/version/src/exceptions/NoPreReleaseSuffixException.php', 'PharIo\\Version\\OrVersionConstraintGroup' => $vendorDir . '/phar-io/version/src/constraints/OrVersionConstraintGroup.php', 'PharIo\\Version\\PreReleaseSuffix' => $vendorDir . '/phar-io/version/src/PreReleaseSuffix.php', 'PharIo\\Version\\SpecificMajorAndMinorVersionConstraint' => $vendorDir . '/phar-io/version/src/constraints/SpecificMajorAndMinorVersionConstraint.php', 'PharIo\\Version\\SpecificMajorVersionConstraint' => $vendorDir . '/phar-io/version/src/constraints/SpecificMajorVersionConstraint.php', 'PharIo\\Version\\UnsupportedVersionConstraintException' => $vendorDir . '/phar-io/version/src/exceptions/UnsupportedVersionConstraintException.php', 'PharIo\\Version\\Version' => $vendorDir . '/phar-io/version/src/Version.php', 'PharIo\\Version\\VersionConstraint' => $vendorDir . '/phar-io/version/src/constraints/VersionConstraint.php', 'PharIo\\Version\\VersionConstraintParser' => $vendorDir . '/phar-io/version/src/VersionConstraintParser.php', 'PharIo\\Version\\VersionConstraintValue' => $vendorDir . '/phar-io/version/src/VersionConstraintValue.php', 'PharIo\\Version\\VersionNumber' => $vendorDir . '/phar-io/version/src/VersionNumber.php', 'SebastianBergmann\\CodeCoverage\\CodeCoverage' => $vendorDir . '/phpunit/php-code-coverage/src/CodeCoverage.php', 'SebastianBergmann\\CodeCoverage\\CoveredCodeNotExecutedException' => $vendorDir . '/phpunit/php-code-coverage/src/Exception/CoveredCodeNotExecutedException.php', 'SebastianBergmann\\CodeCoverage\\Driver\\Driver' => $vendorDir . '/phpunit/php-code-coverage/src/Driver/Driver.php', 'SebastianBergmann\\CodeCoverage\\Driver\\PCOV' => $vendorDir . '/phpunit/php-code-coverage/src/Driver/PCOV.php', 'SebastianBergmann\\CodeCoverage\\Driver\\PHPDBG' => $vendorDir . '/phpunit/php-code-coverage/src/Driver/PHPDBG.php', 'SebastianBergmann\\CodeCoverage\\Driver\\Xdebug' => $vendorDir . '/phpunit/php-code-coverage/src/Driver/Xdebug.php', 'SebastianBergmann\\CodeCoverage\\Exception' => $vendorDir . '/phpunit/php-code-coverage/src/Exception/Exception.php', 'SebastianBergmann\\CodeCoverage\\Filter' => $vendorDir . '/phpunit/php-code-coverage/src/Filter.php', 'SebastianBergmann\\CodeCoverage\\InvalidArgumentException' => $vendorDir . '/phpunit/php-code-coverage/src/Exception/InvalidArgumentException.php', 'SebastianBergmann\\CodeCoverage\\MissingCoversAnnotationException' => $vendorDir . '/phpunit/php-code-coverage/src/Exception/MissingCoversAnnotationException.php', 'SebastianBergmann\\CodeCoverage\\Node\\AbstractNode' => $vendorDir . '/phpunit/php-code-coverage/src/Node/AbstractNode.php', 'SebastianBergmann\\CodeCoverage\\Node\\Builder' => $vendorDir . '/phpunit/php-code-coverage/src/Node/Builder.php', 'SebastianBergmann\\CodeCoverage\\Node\\Directory' => $vendorDir . '/phpunit/php-code-coverage/src/Node/Directory.php', 'SebastianBergmann\\CodeCoverage\\Node\\File' => $vendorDir . '/phpunit/php-code-coverage/src/Node/File.php', 'SebastianBergmann\\CodeCoverage\\Node\\Iterator' => $vendorDir . '/phpunit/php-code-coverage/src/Node/Iterator.php', 'SebastianBergmann\\CodeCoverage\\Report\\Clover' => $vendorDir . '/phpunit/php-code-coverage/src/Report/Clover.php', 'SebastianBergmann\\CodeCoverage\\Report\\Crap4j' => $vendorDir . '/phpunit/php-code-coverage/src/Report/Crap4j.php', 'SebastianBergmann\\CodeCoverage\\Report\\Html\\Dashboard' => $vendorDir . '/phpunit/php-code-coverage/src/Report/Html/Renderer/Dashboard.php', 'SebastianBergmann\\CodeCoverage\\Report\\Html\\Directory' => $vendorDir . '/phpunit/php-code-coverage/src/Report/Html/Renderer/Directory.php', 'SebastianBergmann\\CodeCoverage\\Report\\Html\\Facade' => $vendorDir . '/phpunit/php-code-coverage/src/Report/Html/Facade.php', 'SebastianBergmann\\CodeCoverage\\Report\\Html\\File' => $vendorDir . '/phpunit/php-code-coverage/src/Report/Html/Renderer/File.php', 'SebastianBergmann\\CodeCoverage\\Report\\Html\\Renderer' => $vendorDir . '/phpunit/php-code-coverage/src/Report/Html/Renderer.php', 'SebastianBergmann\\CodeCoverage\\Report\\PHP' => $vendorDir . '/phpunit/php-code-coverage/src/Report/PHP.php', 'SebastianBergmann\\CodeCoverage\\Report\\Text' => $vendorDir . '/phpunit/php-code-coverage/src/Report/Text.php', 'SebastianBergmann\\CodeCoverage\\Report\\Xml\\BuildInformation' => $vendorDir . '/phpunit/php-code-coverage/src/Report/Xml/BuildInformation.php', 'SebastianBergmann\\CodeCoverage\\Report\\Xml\\Coverage' => $vendorDir . '/phpunit/php-code-coverage/src/Report/Xml/Coverage.php', 'SebastianBergmann\\CodeCoverage\\Report\\Xml\\Directory' => $vendorDir . '/phpunit/php-code-coverage/src/Report/Xml/Directory.php', 'SebastianBergmann\\CodeCoverage\\Report\\Xml\\Facade' => $vendorDir . '/phpunit/php-code-coverage/src/Report/Xml/Facade.php', 'SebastianBergmann\\CodeCoverage\\Report\\Xml\\File' => $vendorDir . '/phpunit/php-code-coverage/src/Report/Xml/File.php', 'SebastianBergmann\\CodeCoverage\\Report\\Xml\\Method' => $vendorDir . '/phpunit/php-code-coverage/src/Report/Xml/Method.php', 'SebastianBergmann\\CodeCoverage\\Report\\Xml\\Node' => $vendorDir . '/phpunit/php-code-coverage/src/Report/Xml/Node.php', 'SebastianBergmann\\CodeCoverage\\Report\\Xml\\Project' => $vendorDir . '/phpunit/php-code-coverage/src/Report/Xml/Project.php', 'SebastianBergmann\\CodeCoverage\\Report\\Xml\\Report' => $vendorDir . '/phpunit/php-code-coverage/src/Report/Xml/Report.php', 'SebastianBergmann\\CodeCoverage\\Report\\Xml\\Source' => $vendorDir . '/phpunit/php-code-coverage/src/Report/Xml/Source.php', 'SebastianBergmann\\CodeCoverage\\Report\\Xml\\Tests' => $vendorDir . '/phpunit/php-code-coverage/src/Report/Xml/Tests.php', 'SebastianBergmann\\CodeCoverage\\Report\\Xml\\Totals' => $vendorDir . '/phpunit/php-code-coverage/src/Report/Xml/Totals.php', 'SebastianBergmann\\CodeCoverage\\Report\\Xml\\Unit' => $vendorDir . '/phpunit/php-code-coverage/src/Report/Xml/Unit.php', 'SebastianBergmann\\CodeCoverage\\RuntimeException' => $vendorDir . '/phpunit/php-code-coverage/src/Exception/RuntimeException.php', 'SebastianBergmann\\CodeCoverage\\UnintentionallyCoveredCodeException' => $vendorDir . '/phpunit/php-code-coverage/src/Exception/UnintentionallyCoveredCodeException.php', 'SebastianBergmann\\CodeCoverage\\Util' => $vendorDir . '/phpunit/php-code-coverage/src/Util.php', 'SebastianBergmann\\CodeCoverage\\Version' => $vendorDir . '/phpunit/php-code-coverage/src/Version.php', 'SebastianBergmann\\CodeUnitReverseLookup\\Wizard' => $vendorDir . '/sebastian/code-unit-reverse-lookup/src/Wizard.php', 'SebastianBergmann\\Comparator\\ArrayComparator' => $vendorDir . '/sebastian/comparator/src/ArrayComparator.php', 'SebastianBergmann\\Comparator\\Comparator' => $vendorDir . '/sebastian/comparator/src/Comparator.php', 'SebastianBergmann\\Comparator\\ComparisonFailure' => $vendorDir . '/sebastian/comparator/src/ComparisonFailure.php', 'SebastianBergmann\\Comparator\\DOMNodeComparator' => $vendorDir . '/sebastian/comparator/src/DOMNodeComparator.php', 'SebastianBergmann\\Comparator\\DateTimeComparator' => $vendorDir . '/sebastian/comparator/src/DateTimeComparator.php', 'SebastianBergmann\\Comparator\\DoubleComparator' => $vendorDir . '/sebastian/comparator/src/DoubleComparator.php', 'SebastianBergmann\\Comparator\\ExceptionComparator' => $vendorDir . '/sebastian/comparator/src/ExceptionComparator.php', 'SebastianBergmann\\Comparator\\Factory' => $vendorDir . '/sebastian/comparator/src/Factory.php', 'SebastianBergmann\\Comparator\\MockObjectComparator' => $vendorDir . '/sebastian/comparator/src/MockObjectComparator.php', 'SebastianBergmann\\Comparator\\NumericComparator' => $vendorDir . '/sebastian/comparator/src/NumericComparator.php', 'SebastianBergmann\\Comparator\\ObjectComparator' => $vendorDir . '/sebastian/comparator/src/ObjectComparator.php', 'SebastianBergmann\\Comparator\\ResourceComparator' => $vendorDir . '/sebastian/comparator/src/ResourceComparator.php', 'SebastianBergmann\\Comparator\\ScalarComparator' => $vendorDir . '/sebastian/comparator/src/ScalarComparator.php', 'SebastianBergmann\\Comparator\\SplObjectStorageComparator' => $vendorDir . '/sebastian/comparator/src/SplObjectStorageComparator.php', 'SebastianBergmann\\Comparator\\TypeComparator' => $vendorDir . '/sebastian/comparator/src/TypeComparator.php', 'SebastianBergmann\\Diff\\Chunk' => $vendorDir . '/sebastian/diff/src/Chunk.php', 'SebastianBergmann\\Diff\\ConfigurationException' => $vendorDir . '/sebastian/diff/src/Exception/ConfigurationException.php', 'SebastianBergmann\\Diff\\Diff' => $vendorDir . '/sebastian/diff/src/Diff.php', 'SebastianBergmann\\Diff\\Differ' => $vendorDir . '/sebastian/diff/src/Differ.php', 'SebastianBergmann\\Diff\\Exception' => $vendorDir . '/sebastian/diff/src/Exception/Exception.php', 'SebastianBergmann\\Diff\\InvalidArgumentException' => $vendorDir . '/sebastian/diff/src/Exception/InvalidArgumentException.php', 'SebastianBergmann\\Diff\\Line' => $vendorDir . '/sebastian/diff/src/Line.php', 'SebastianBergmann\\Diff\\LongestCommonSubsequenceCalculator' => $vendorDir . '/sebastian/diff/src/LongestCommonSubsequenceCalculator.php', 'SebastianBergmann\\Diff\\MemoryEfficientLongestCommonSubsequenceCalculator' => $vendorDir . '/sebastian/diff/src/MemoryEfficientLongestCommonSubsequenceCalculator.php', 'SebastianBergmann\\Diff\\Output\\AbstractChunkOutputBuilder' => $vendorDir . '/sebastian/diff/src/Output/AbstractChunkOutputBuilder.php', 'SebastianBergmann\\Diff\\Output\\DiffOnlyOutputBuilder' => $vendorDir . '/sebastian/diff/src/Output/DiffOnlyOutputBuilder.php', 'SebastianBergmann\\Diff\\Output\\DiffOutputBuilderInterface' => $vendorDir . '/sebastian/diff/src/Output/DiffOutputBuilderInterface.php', 'SebastianBergmann\\Diff\\Output\\StrictUnifiedDiffOutputBuilder' => $vendorDir . '/sebastian/diff/src/Output/StrictUnifiedDiffOutputBuilder.php', 'SebastianBergmann\\Diff\\Output\\UnifiedDiffOutputBuilder' => $vendorDir . '/sebastian/diff/src/Output/UnifiedDiffOutputBuilder.php', 'SebastianBergmann\\Diff\\Parser' => $vendorDir . '/sebastian/diff/src/Parser.php', 'SebastianBergmann\\Diff\\TimeEfficientLongestCommonSubsequenceCalculator' => $vendorDir . '/sebastian/diff/src/TimeEfficientLongestCommonSubsequenceCalculator.php', 'SebastianBergmann\\Environment\\Console' => $vendorDir . '/sebastian/environment/src/Console.php', 'SebastianBergmann\\Environment\\OperatingSystem' => $vendorDir . '/sebastian/environment/src/OperatingSystem.php', 'SebastianBergmann\\Environment\\Runtime' => $vendorDir . '/sebastian/environment/src/Runtime.php', 'SebastianBergmann\\Exporter\\Exporter' => $vendorDir . '/sebastian/exporter/src/Exporter.php', 'SebastianBergmann\\FileIterator\\Facade' => $vendorDir . '/phpunit/php-file-iterator/src/Facade.php', 'SebastianBergmann\\FileIterator\\Factory' => $vendorDir . '/phpunit/php-file-iterator/src/Factory.php', 'SebastianBergmann\\FileIterator\\Iterator' => $vendorDir . '/phpunit/php-file-iterator/src/Iterator.php', 'SebastianBergmann\\GlobalState\\Blacklist' => $vendorDir . '/sebastian/global-state/src/Blacklist.php', 'SebastianBergmann\\GlobalState\\CodeExporter' => $vendorDir . '/sebastian/global-state/src/CodeExporter.php', 'SebastianBergmann\\GlobalState\\Exception' => $vendorDir . '/sebastian/global-state/src/exceptions/Exception.php', 'SebastianBergmann\\GlobalState\\Restorer' => $vendorDir . '/sebastian/global-state/src/Restorer.php', 'SebastianBergmann\\GlobalState\\RuntimeException' => $vendorDir . '/sebastian/global-state/src/exceptions/RuntimeException.php', 'SebastianBergmann\\GlobalState\\Snapshot' => $vendorDir . '/sebastian/global-state/src/Snapshot.php', 'SebastianBergmann\\ObjectEnumerator\\Enumerator' => $vendorDir . '/sebastian/object-enumerator/src/Enumerator.php', 'SebastianBergmann\\ObjectEnumerator\\Exception' => $vendorDir . '/sebastian/object-enumerator/src/Exception.php', 'SebastianBergmann\\ObjectEnumerator\\InvalidArgumentException' => $vendorDir . '/sebastian/object-enumerator/src/InvalidArgumentException.php', 'SebastianBergmann\\ObjectReflector\\Exception' => $vendorDir . '/sebastian/object-reflector/src/Exception.php', 'SebastianBergmann\\ObjectReflector\\InvalidArgumentException' => $vendorDir . '/sebastian/object-reflector/src/InvalidArgumentException.php', 'SebastianBergmann\\ObjectReflector\\ObjectReflector' => $vendorDir . '/sebastian/object-reflector/src/ObjectReflector.php', 'SebastianBergmann\\RecursionContext\\Context' => $vendorDir . '/sebastian/recursion-context/src/Context.php', 'SebastianBergmann\\RecursionContext\\Exception' => $vendorDir . '/sebastian/recursion-context/src/Exception.php', 'SebastianBergmann\\RecursionContext\\InvalidArgumentException' => $vendorDir . '/sebastian/recursion-context/src/InvalidArgumentException.php', 'SebastianBergmann\\ResourceOperations\\ResourceOperations' => $vendorDir . '/sebastian/resource-operations/src/ResourceOperations.php', 'SebastianBergmann\\Timer\\Exception' => $vendorDir . '/phpunit/php-timer/src/Exception.php', 'SebastianBergmann\\Timer\\RuntimeException' => $vendorDir . '/phpunit/php-timer/src/RuntimeException.php', 'SebastianBergmann\\Timer\\Timer' => $vendorDir . '/phpunit/php-timer/src/Timer.php', 'SebastianBergmann\\Type\\CallableType' => $vendorDir . '/sebastian/type/src/CallableType.php', 'SebastianBergmann\\Type\\Exception' => $vendorDir . '/sebastian/type/src/exception/Exception.php', 'SebastianBergmann\\Type\\GenericObjectType' => $vendorDir . '/sebastian/type/src/GenericObjectType.php', 'SebastianBergmann\\Type\\IterableType' => $vendorDir . '/sebastian/type/src/IterableType.php', 'SebastianBergmann\\Type\\NullType' => $vendorDir . '/sebastian/type/src/NullType.php', 'SebastianBergmann\\Type\\ObjectType' => $vendorDir . '/sebastian/type/src/ObjectType.php', 'SebastianBergmann\\Type\\RuntimeException' => $vendorDir . '/sebastian/type/src/exception/RuntimeException.php', 'SebastianBergmann\\Type\\SimpleType' => $vendorDir . '/sebastian/type/src/SimpleType.php', 'SebastianBergmann\\Type\\Type' => $vendorDir . '/sebastian/type/src/Type.php', 'SebastianBergmann\\Type\\TypeName' => $vendorDir . '/sebastian/type/src/TypeName.php', 'SebastianBergmann\\Type\\UnknownType' => $vendorDir . '/sebastian/type/src/UnknownType.php', 'SebastianBergmann\\Type\\VoidType' => $vendorDir . '/sebastian/type/src/VoidType.php', 'SebastianBergmann\\Version' => $vendorDir . '/sebastian/version/src/Version.php', 'Text_Template' => $vendorDir . '/phpunit/php-text-template/src/Template.php', 'TheSeer\\Tokenizer\\Exception' => $vendorDir . '/theseer/tokenizer/src/Exception.php', 'TheSeer\\Tokenizer\\NamespaceUri' => $vendorDir . '/theseer/tokenizer/src/NamespaceUri.php', 'TheSeer\\Tokenizer\\NamespaceUriException' => $vendorDir . '/theseer/tokenizer/src/NamespaceUriException.php', 'TheSeer\\Tokenizer\\Token' => $vendorDir . '/theseer/tokenizer/src/Token.php', 'TheSeer\\Tokenizer\\TokenCollection' => $vendorDir . '/theseer/tokenizer/src/TokenCollection.php', 'TheSeer\\Tokenizer\\TokenCollectionException' => $vendorDir . '/theseer/tokenizer/src/TokenCollectionException.php', 'TheSeer\\Tokenizer\\Tokenizer' => $vendorDir . '/theseer/tokenizer/src/Tokenizer.php', 'TheSeer\\Tokenizer\\XMLSerializer' => $vendorDir . '/theseer/tokenizer/src/XMLSerializer.php', ); PK!Ú©›¼îîTfile-manager-advanced/application/svg-sanitizer/includes/composer/autoload_files.phpnu„[µü¤ $vendorDir . '/myclabs/deep-copy/src/DeepCopy/deep_copy.php', ); PK!2@uú?ú?Qfile-manager-advanced/application/svg-sanitizer/includes/composer/ClassLoader.phpnu„[µü¤ * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Autoload; /** * ClassLoader implements a PSR-0, PSR-4 and classmap class loader. * * $loader = new \Composer\Autoload\ClassLoader(); * * // register classes with namespaces * $loader->add('Symfony\Component', __DIR__.'/component'); * $loader->add('Symfony', __DIR__.'/framework'); * * // activate the autoloader * $loader->register(); * * // to enable searching the include path (eg. for PEAR packages) * $loader->setUseIncludePath(true); * * In this example, if you try to use a class in the Symfony\Component * namespace or one of its children (Symfony\Component\Console for instance), * the autoloader will first look for the class under the component/ * directory, and it will then fallback to the framework/ directory if not * found before giving up. * * This class is loosely based on the Symfony UniversalClassLoader. * * @author Fabien Potencier * @author Jordi Boggiano * @see https://www.php-fig.org/psr/psr-0/ * @see https://www.php-fig.org/psr/psr-4/ */ class ClassLoader { /** @var \Closure(string):void */ private static $includeFile; /** @var string|null */ private $vendorDir; // PSR-4 /** * @var array> */ private $prefixLengthsPsr4 = array(); /** * @var array> */ private $prefixDirsPsr4 = array(); /** * @var list */ private $fallbackDirsPsr4 = array(); // PSR-0 /** * List of PSR-0 prefixes * * Structured as array('F (first letter)' => array('Foo\Bar (full prefix)' => array('path', 'path2'))) * * @var array>> */ private $prefixesPsr0 = array(); /** * @var list */ private $fallbackDirsPsr0 = array(); /** @var bool */ private $useIncludePath = false; /** * @var array */ private $classMap = array(); /** @var bool */ private $classMapAuthoritative = false; /** * @var array */ private $missingClasses = array(); /** @var string|null */ private $apcuPrefix; /** * @var array */ private static $registeredLoaders = array(); /** * @param string|null $vendorDir */ public function __construct($vendorDir = null) { $this->vendorDir = $vendorDir; self::initializeIncludeClosure(); } /** * @return array> */ public function getPrefixes() { if (!empty($this->prefixesPsr0)) { return call_user_func_array('array_merge', array_values($this->prefixesPsr0)); } return array(); } /** * @return array> */ public function getPrefixesPsr4() { return $this->prefixDirsPsr4; } /** * @return list */ public function getFallbackDirs() { return $this->fallbackDirsPsr0; } /** * @return list */ public function getFallbackDirsPsr4() { return $this->fallbackDirsPsr4; } /** * @return array Array of classname => path */ public function getClassMap() { return $this->classMap; } /** * @param array $classMap Class to filename map * * @return void */ public function addClassMap(array $classMap) { if ($this->classMap) { $this->classMap = array_merge($this->classMap, $classMap); } else { $this->classMap = $classMap; } } /** * Registers a set of PSR-0 directories for a given prefix, either * appending or prepending to the ones previously set for this prefix. * * @param string $prefix The prefix * @param list|string $paths The PSR-0 root directories * @param bool $prepend Whether to prepend the directories * * @return void */ public function add($prefix, $paths, $prepend = false) { $paths = (array) $paths; if (!$prefix) { if ($prepend) { $this->fallbackDirsPsr0 = array_merge( $paths, $this->fallbackDirsPsr0 ); } else { $this->fallbackDirsPsr0 = array_merge( $this->fallbackDirsPsr0, $paths ); } return; } $first = $prefix[0]; if (!isset($this->prefixesPsr0[$first][$prefix])) { $this->prefixesPsr0[$first][$prefix] = $paths; return; } if ($prepend) { $this->prefixesPsr0[$first][$prefix] = array_merge( $paths, $this->prefixesPsr0[$first][$prefix] ); } else { $this->prefixesPsr0[$first][$prefix] = array_merge( $this->prefixesPsr0[$first][$prefix], $paths ); } } /** * Registers a set of PSR-4 directories for a given namespace, either * appending or prepending to the ones previously set for this namespace. * * @param string $prefix The prefix/namespace, with trailing '\\' * @param list|string $paths The PSR-4 base directories * @param bool $prepend Whether to prepend the directories * * @throws \InvalidArgumentException * * @return void */ public function addPsr4($prefix, $paths, $prepend = false) { $paths = (array) $paths; if (!$prefix) { // Register directories for the root namespace. if ($prepend) { $this->fallbackDirsPsr4 = array_merge( $paths, $this->fallbackDirsPsr4 ); } else { $this->fallbackDirsPsr4 = array_merge( $this->fallbackDirsPsr4, $paths ); } } elseif (!isset($this->prefixDirsPsr4[$prefix])) { // Register directories for a new namespace. $length = strlen($prefix); if ('\\' !== $prefix[$length - 1]) { throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator."); } $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length; $this->prefixDirsPsr4[$prefix] = $paths; } elseif ($prepend) { // Prepend directories for an already registered namespace. $this->prefixDirsPsr4[$prefix] = array_merge( $paths, $this->prefixDirsPsr4[$prefix] ); } else { // Append directories for an already registered namespace. $this->prefixDirsPsr4[$prefix] = array_merge( $this->prefixDirsPsr4[$prefix], $paths ); } } /** * Registers a set of PSR-0 directories for a given prefix, * replacing any others previously set for this prefix. * * @param string $prefix The prefix * @param list|string $paths The PSR-0 base directories * * @return void */ public function set($prefix, $paths) { if (!$prefix) { $this->fallbackDirsPsr0 = (array) $paths; } else { $this->prefixesPsr0[$prefix[0]][$prefix] = (array) $paths; } } /** * Registers a set of PSR-4 directories for a given namespace, * replacing any others previously set for this namespace. * * @param string $prefix The prefix/namespace, with trailing '\\' * @param list|string $paths The PSR-4 base directories * * @throws \InvalidArgumentException * * @return void */ public function setPsr4($prefix, $paths) { if (!$prefix) { $this->fallbackDirsPsr4 = (array) $paths; } else { $length = strlen($prefix); if ('\\' !== $prefix[$length - 1]) { throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator."); } $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length; $this->prefixDirsPsr4[$prefix] = (array) $paths; } } /** * Turns on searching the include path for class files. * * @param bool $useIncludePath * * @return void */ public function setUseIncludePath($useIncludePath) { $this->useIncludePath = $useIncludePath; } /** * Can be used to check if the autoloader uses the include path to check * for classes. * * @return bool */ public function getUseIncludePath() { return $this->useIncludePath; } /** * Turns off searching the prefix and fallback directories for classes * that have not been registered with the class map. * * @param bool $classMapAuthoritative * * @return void */ public function setClassMapAuthoritative($classMapAuthoritative) { $this->classMapAuthoritative = $classMapAuthoritative; } /** * Should class lookup fail if not found in the current class map? * * @return bool */ public function isClassMapAuthoritative() { return $this->classMapAuthoritative; } /** * APCu prefix to use to cache found/not-found classes, if the extension is enabled. * * @param string|null $apcuPrefix * * @return void */ public function setApcuPrefix($apcuPrefix) { $this->apcuPrefix = function_exists('apcu_fetch') && filter_var(ini_get('apc.enabled'), FILTER_VALIDATE_BOOLEAN) ? $apcuPrefix : null; } /** * The APCu prefix in use, or null if APCu caching is not enabled. * * @return string|null */ public function getApcuPrefix() { return $this->apcuPrefix; } /** * Registers this instance as an autoloader. * * @param bool $prepend Whether to prepend the autoloader or not * * @return void */ public function register($prepend = false) { spl_autoload_register(array($this, 'loadClass'), true, $prepend); if (null === $this->vendorDir) { return; } if ($prepend) { self::$registeredLoaders = array($this->vendorDir => $this) + self::$registeredLoaders; } else { unset(self::$registeredLoaders[$this->vendorDir]); self::$registeredLoaders[$this->vendorDir] = $this; } } /** * Unregisters this instance as an autoloader. * * @return void */ public function unregister() { spl_autoload_unregister(array($this, 'loadClass')); if (null !== $this->vendorDir) { unset(self::$registeredLoaders[$this->vendorDir]); } } /** * Loads the given class or interface. * * @param string $class The name of the class * @return true|null True if loaded, null otherwise */ public function loadClass($class) { if ($file = $this->findFile($class)) { $includeFile = self::$includeFile; $includeFile($file); return true; } return null; } /** * Finds the path to the file where the class is defined. * * @param string $class The name of the class * * @return string|false The path if found, false otherwise */ public function findFile($class) { // class map lookup if (isset($this->classMap[$class])) { return $this->classMap[$class]; } if ($this->classMapAuthoritative || isset($this->missingClasses[$class])) { return false; } if (null !== $this->apcuPrefix) { $file = apcu_fetch($this->apcuPrefix.$class, $hit); if ($hit) { return $file; } } $file = $this->findFileWithExtension($class, '.php'); // Search for Hack files if we are running on HHVM if (false === $file && defined('HHVM_VERSION')) { $file = $this->findFileWithExtension($class, '.hh'); } if (null !== $this->apcuPrefix) { apcu_add($this->apcuPrefix.$class, $file); } if (false === $file) { // Remember that this class does not exist. $this->missingClasses[$class] = true; } return $file; } /** * Returns the currently registered loaders keyed by their corresponding vendor directories. * * @return array */ public static function getRegisteredLoaders() { return self::$registeredLoaders; } /** * @param string $class * @param string $ext * @return string|false */ private function findFileWithExtension($class, $ext) { // PSR-4 lookup $logicalPathPsr4 = strtr($class, '\\', DIRECTORY_SEPARATOR) . $ext; $first = $class[0]; if (isset($this->prefixLengthsPsr4[$first])) { $subPath = $class; while (false !== $lastPos = strrpos($subPath, '\\')) { $subPath = substr($subPath, 0, $lastPos); $search = $subPath . '\\'; if (isset($this->prefixDirsPsr4[$search])) { $pathEnd = DIRECTORY_SEPARATOR . substr($logicalPathPsr4, $lastPos + 1); foreach ($this->prefixDirsPsr4[$search] as $dir) { if (file_exists($file = $dir . $pathEnd)) { return $file; } } } } } // PSR-4 fallback dirs foreach ($this->fallbackDirsPsr4 as $dir) { if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr4)) { return $file; } } // PSR-0 lookup if (false !== $pos = strrpos($class, '\\')) { // namespaced class name $logicalPathPsr0 = substr($logicalPathPsr4, 0, $pos + 1) . strtr(substr($logicalPathPsr4, $pos + 1), '_', DIRECTORY_SEPARATOR); } else { // PEAR-like class name $logicalPathPsr0 = strtr($class, '_', DIRECTORY_SEPARATOR) . $ext; } if (isset($this->prefixesPsr0[$first])) { foreach ($this->prefixesPsr0[$first] as $prefix => $dirs) { if (0 === strpos($class, $prefix)) { foreach ($dirs as $dir) { if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) { return $file; } } } } } // PSR-0 fallback dirs foreach ($this->fallbackDirsPsr0 as $dir) { if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) { return $file; } } // PSR-0 include paths. if ($this->useIncludePath && $file = stream_resolve_include_path($logicalPathPsr0)) { return $file; } return false; } /** * @return void */ private static function initializeIncludeClosure() { if (self::$includeFile !== null) { return; } /** * Scope isolated include. * * Prevents access to $this/self from included files. * * @param string $file * @return void */ self::$includeFile = \Closure::bind(static function($file) { include $file; }, null, null); } } PK!rb±ªªUfile-manager-advanced/application/svg-sanitizer/includes/composer/autoload_static.phpnu„[µü¤ __DIR__ . '/..' . '/myclabs/deep-copy/src/DeepCopy/deep_copy.php', ); public static $prefixLengthsPsr4 = array ( 'e' => array ( 'enshrined\\svgSanitize\\Tests\\' => 28, 'enshrined\\svgSanitize\\' => 22, ), 'D' => array ( 'Doctrine\\Instantiator\\' => 22, 'DeepCopy\\' => 9, ), ); public static $prefixDirsPsr4 = array ( 'enshrined\\svgSanitize\\Tests\\' => array ( 0 => __DIR__ . '/../..' . '/tests', ), 'enshrined\\svgSanitize\\' => array ( 0 => __DIR__ . '/../..' . '/src', ), 'Doctrine\\Instantiator\\' => array ( 0 => __DIR__ . '/..' . '/doctrine/instantiator/src/Doctrine/Instantiator', ), 'DeepCopy\\' => array ( 0 => __DIR__ . '/..' . '/myclabs/deep-copy/src/DeepCopy', ), ); public static $classMap = array ( 'Composer\\InstalledVersions' => __DIR__ . '/..' . '/composer/InstalledVersions.php', 'PHPUnit\\Exception' => __DIR__ . '/..' . '/phpunit/phpunit/src/Exception.php', 'PHPUnit\\Framework\\Assert' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Assert.php', 'PHPUnit\\Framework\\AssertionFailedError' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Exception/AssertionFailedError.php', 'PHPUnit\\Framework\\CodeCoverageException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Exception/CodeCoverageException.php', 'PHPUnit\\Framework\\Constraint\\ArrayHasKey' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/ArrayHasKey.php', 'PHPUnit\\Framework\\Constraint\\ArraySubset' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/ArraySubset.php', 'PHPUnit\\Framework\\Constraint\\Attribute' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/Attribute.php', 'PHPUnit\\Framework\\Constraint\\Callback' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/Callback.php', 'PHPUnit\\Framework\\Constraint\\ClassHasAttribute' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/ClassHasAttribute.php', 'PHPUnit\\Framework\\Constraint\\ClassHasStaticAttribute' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/ClassHasStaticAttribute.php', 'PHPUnit\\Framework\\Constraint\\Composite' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/Composite.php', 'PHPUnit\\Framework\\Constraint\\Constraint' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/Constraint.php', 'PHPUnit\\Framework\\Constraint\\Count' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/Count.php', 'PHPUnit\\Framework\\Constraint\\DirectoryExists' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/DirectoryExists.php', 'PHPUnit\\Framework\\Constraint\\Exception' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/Exception.php', 'PHPUnit\\Framework\\Constraint\\ExceptionCode' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/ExceptionCode.php', 'PHPUnit\\Framework\\Constraint\\ExceptionMessage' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/ExceptionMessage.php', 'PHPUnit\\Framework\\Constraint\\ExceptionMessageRegularExpression' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/ExceptionMessageRegularExpression.php', 'PHPUnit\\Framework\\Constraint\\FileExists' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/FileExists.php', 'PHPUnit\\Framework\\Constraint\\GreaterThan' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/GreaterThan.php', 'PHPUnit\\Framework\\Constraint\\IsAnything' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/IsAnything.php', 'PHPUnit\\Framework\\Constraint\\IsEmpty' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/IsEmpty.php', 'PHPUnit\\Framework\\Constraint\\IsEqual' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/IsEqual.php', 'PHPUnit\\Framework\\Constraint\\IsFalse' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/IsFalse.php', 'PHPUnit\\Framework\\Constraint\\IsFinite' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/IsFinite.php', 'PHPUnit\\Framework\\Constraint\\IsIdentical' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/IsIdentical.php', 'PHPUnit\\Framework\\Constraint\\IsInfinite' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/IsInfinite.php', 'PHPUnit\\Framework\\Constraint\\IsInstanceOf' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/IsInstanceOf.php', 'PHPUnit\\Framework\\Constraint\\IsJson' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/IsJson.php', 'PHPUnit\\Framework\\Constraint\\IsNan' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/IsNan.php', 'PHPUnit\\Framework\\Constraint\\IsNull' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/IsNull.php', 'PHPUnit\\Framework\\Constraint\\IsReadable' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/IsReadable.php', 'PHPUnit\\Framework\\Constraint\\IsTrue' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/IsTrue.php', 'PHPUnit\\Framework\\Constraint\\IsType' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/IsType.php', 'PHPUnit\\Framework\\Constraint\\IsWritable' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/IsWritable.php', 'PHPUnit\\Framework\\Constraint\\JsonMatches' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/JsonMatches.php', 'PHPUnit\\Framework\\Constraint\\JsonMatchesErrorMessageProvider' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/JsonMatchesErrorMessageProvider.php', 'PHPUnit\\Framework\\Constraint\\LessThan' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/LessThan.php', 'PHPUnit\\Framework\\Constraint\\LogicalAnd' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/LogicalAnd.php', 'PHPUnit\\Framework\\Constraint\\LogicalNot' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/LogicalNot.php', 'PHPUnit\\Framework\\Constraint\\LogicalOr' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/LogicalOr.php', 'PHPUnit\\Framework\\Constraint\\LogicalXor' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/LogicalXor.php', 'PHPUnit\\Framework\\Constraint\\ObjectHasAttribute' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/ObjectHasAttribute.php', 'PHPUnit\\Framework\\Constraint\\RegularExpression' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/RegularExpression.php', 'PHPUnit\\Framework\\Constraint\\SameSize' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/SameSize.php', 'PHPUnit\\Framework\\Constraint\\StringContains' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/StringContains.php', 'PHPUnit\\Framework\\Constraint\\StringEndsWith' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/StringEndsWith.php', 'PHPUnit\\Framework\\Constraint\\StringMatchesFormatDescription' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/StringMatchesFormatDescription.php', 'PHPUnit\\Framework\\Constraint\\StringStartsWith' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/StringStartsWith.php', 'PHPUnit\\Framework\\Constraint\\TraversableContains' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/TraversableContains.php', 'PHPUnit\\Framework\\Constraint\\TraversableContainsEqual' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/TraversableContainsEqual.php', 'PHPUnit\\Framework\\Constraint\\TraversableContainsIdentical' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/TraversableContainsIdentical.php', 'PHPUnit\\Framework\\Constraint\\TraversableContainsOnly' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/TraversableContainsOnly.php', 'PHPUnit\\Framework\\CoveredCodeNotExecutedException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Exception/CoveredCodeNotExecutedException.php', 'PHPUnit\\Framework\\DataProviderTestSuite' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/DataProviderTestSuite.php', 'PHPUnit\\Framework\\Error\\Deprecated' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Error/Deprecated.php', 'PHPUnit\\Framework\\Error\\Error' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Error/Error.php', 'PHPUnit\\Framework\\Error\\Notice' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Error/Notice.php', 'PHPUnit\\Framework\\Error\\Warning' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Error/Warning.php', 'PHPUnit\\Framework\\Exception' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Exception/Exception.php', 'PHPUnit\\Framework\\ExceptionWrapper' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/ExceptionWrapper.php', 'PHPUnit\\Framework\\ExpectationFailedException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Exception/ExpectationFailedException.php', 'PHPUnit\\Framework\\IncompleteTest' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/IncompleteTest.php', 'PHPUnit\\Framework\\IncompleteTestCase' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/IncompleteTestCase.php', 'PHPUnit\\Framework\\IncompleteTestError' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Exception/IncompleteTestError.php', 'PHPUnit\\Framework\\InvalidArgumentException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Exception/InvalidArgumentException.php', 'PHPUnit\\Framework\\InvalidCoversTargetException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Exception/InvalidCoversTargetException.php', 'PHPUnit\\Framework\\InvalidDataProviderException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Exception/InvalidDataProviderException.php', 'PHPUnit\\Framework\\InvalidParameterGroupException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/InvalidParameterGroupException.php', 'PHPUnit\\Framework\\MissingCoversAnnotationException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Exception/MissingCoversAnnotationException.php', 'PHPUnit\\Framework\\MockObject\\Api' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Api/Api.php', 'PHPUnit\\Framework\\MockObject\\BadMethodCallException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Exception/BadMethodCallException.php', 'PHPUnit\\Framework\\MockObject\\Builder\\Identity' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Builder/Identity.php', 'PHPUnit\\Framework\\MockObject\\Builder\\InvocationMocker' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Builder/InvocationMocker.php', 'PHPUnit\\Framework\\MockObject\\Builder\\InvocationStubber' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Builder/InvocationStubber.php', 'PHPUnit\\Framework\\MockObject\\Builder\\Match_' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Builder/Match_.php', 'PHPUnit\\Framework\\MockObject\\Builder\\MethodNameMatch' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Builder/MethodNameMatch.php', 'PHPUnit\\Framework\\MockObject\\Builder\\ParametersMatch' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Builder/ParametersMatch.php', 'PHPUnit\\Framework\\MockObject\\Builder\\Stub' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Builder/Stub.php', 'PHPUnit\\Framework\\MockObject\\ConfigurableMethod' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/ConfigurableMethod.php', 'PHPUnit\\Framework\\MockObject\\ConfigurableMethodsAlreadyInitializedException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Exception/ConfigurableMethodsAlreadyInitializedException.php', 'PHPUnit\\Framework\\MockObject\\Exception' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Exception/Exception.php', 'PHPUnit\\Framework\\MockObject\\Generator' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Generator.php', 'PHPUnit\\Framework\\MockObject\\IncompatibleReturnValueException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Exception/IncompatibleReturnValueException.php', 'PHPUnit\\Framework\\MockObject\\Invocation' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Invocation.php', 'PHPUnit\\Framework\\MockObject\\InvocationHandler' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/InvocationHandler.php', 'PHPUnit\\Framework\\MockObject\\Matcher' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Matcher.php', 'PHPUnit\\Framework\\MockObject\\Method' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Api/Method.php', 'PHPUnit\\Framework\\MockObject\\MethodNameConstraint' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/MethodNameConstraint.php', 'PHPUnit\\Framework\\MockObject\\MockBuilder' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/MockBuilder.php', 'PHPUnit\\Framework\\MockObject\\MockClass' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/MockClass.php', 'PHPUnit\\Framework\\MockObject\\MockMethod' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/MockMethod.php', 'PHPUnit\\Framework\\MockObject\\MockMethodSet' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/MockMethodSet.php', 'PHPUnit\\Framework\\MockObject\\MockObject' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/MockObject.php', 'PHPUnit\\Framework\\MockObject\\MockTrait' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/MockTrait.php', 'PHPUnit\\Framework\\MockObject\\MockType' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/MockType.php', 'PHPUnit\\Framework\\MockObject\\Rule\\AnyInvokedCount' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Rule/AnyInvokedCount.php', 'PHPUnit\\Framework\\MockObject\\Rule\\AnyParameters' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Rule/AnyParameters.php', 'PHPUnit\\Framework\\MockObject\\Rule\\ConsecutiveParameters' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Rule/ConsecutiveParameters.php', 'PHPUnit\\Framework\\MockObject\\Rule\\InvocationOrder' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Rule/InvocationOrder.php', 'PHPUnit\\Framework\\MockObject\\Rule\\InvokedAtIndex' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Rule/InvokedAtIndex.php', 'PHPUnit\\Framework\\MockObject\\Rule\\InvokedAtLeastCount' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Rule/InvokedAtLeastCount.php', 'PHPUnit\\Framework\\MockObject\\Rule\\InvokedAtLeastOnce' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Rule/InvokedAtLeastOnce.php', 'PHPUnit\\Framework\\MockObject\\Rule\\InvokedAtMostCount' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Rule/InvokedAtMostCount.php', 'PHPUnit\\Framework\\MockObject\\Rule\\InvokedCount' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Rule/InvokedCount.php', 'PHPUnit\\Framework\\MockObject\\Rule\\MethodName' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Rule/MethodName.php', 'PHPUnit\\Framework\\MockObject\\Rule\\Parameters' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Rule/Parameters.php', 'PHPUnit\\Framework\\MockObject\\Rule\\ParametersRule' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Rule/ParametersRule.php', 'PHPUnit\\Framework\\MockObject\\RuntimeException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Exception/RuntimeException.php', 'PHPUnit\\Framework\\MockObject\\Stub' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Stub.php', 'PHPUnit\\Framework\\MockObject\\Stub\\ConsecutiveCalls' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Stub/ConsecutiveCalls.php', 'PHPUnit\\Framework\\MockObject\\Stub\\Exception' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Stub/Exception.php', 'PHPUnit\\Framework\\MockObject\\Stub\\ReturnArgument' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Stub/ReturnArgument.php', 'PHPUnit\\Framework\\MockObject\\Stub\\ReturnCallback' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Stub/ReturnCallback.php', 'PHPUnit\\Framework\\MockObject\\Stub\\ReturnReference' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Stub/ReturnReference.php', 'PHPUnit\\Framework\\MockObject\\Stub\\ReturnSelf' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Stub/ReturnSelf.php', 'PHPUnit\\Framework\\MockObject\\Stub\\ReturnStub' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Stub/ReturnStub.php', 'PHPUnit\\Framework\\MockObject\\Stub\\ReturnValueMap' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Stub/ReturnValueMap.php', 'PHPUnit\\Framework\\MockObject\\Stub\\Stub' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Stub/Stub.php', 'PHPUnit\\Framework\\MockObject\\Verifiable' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Verifiable.php', 'PHPUnit\\Framework\\NoChildTestSuiteException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Exception/NoChildTestSuiteException.php', 'PHPUnit\\Framework\\OutputError' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Exception/OutputError.php', 'PHPUnit\\Framework\\PHPTAssertionFailedError' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Exception/PHPTAssertionFailedError.php', 'PHPUnit\\Framework\\RiskyTestError' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Exception/RiskyTestError.php', 'PHPUnit\\Framework\\SelfDescribing' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/SelfDescribing.php', 'PHPUnit\\Framework\\SkippedTest' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/SkippedTest.php', 'PHPUnit\\Framework\\SkippedTestCase' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/SkippedTestCase.php', 'PHPUnit\\Framework\\SkippedTestError' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Exception/SkippedTestError.php', 'PHPUnit\\Framework\\SkippedTestSuiteError' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Exception/SkippedTestSuiteError.php', 'PHPUnit\\Framework\\SyntheticError' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Exception/SyntheticError.php', 'PHPUnit\\Framework\\SyntheticSkippedError' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Exception/SyntheticSkippedError.php', 'PHPUnit\\Framework\\Test' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Test.php', 'PHPUnit\\Framework\\TestBuilder' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/TestBuilder.php', 'PHPUnit\\Framework\\TestCase' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/TestCase.php', 'PHPUnit\\Framework\\TestFailure' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/TestFailure.php', 'PHPUnit\\Framework\\TestListener' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/TestListener.php', 'PHPUnit\\Framework\\TestListenerDefaultImplementation' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/TestListenerDefaultImplementation.php', 'PHPUnit\\Framework\\TestResult' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/TestResult.php', 'PHPUnit\\Framework\\TestSuite' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/TestSuite.php', 'PHPUnit\\Framework\\TestSuiteIterator' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/TestSuiteIterator.php', 'PHPUnit\\Framework\\UnintentionallyCoveredCodeError' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Exception/UnintentionallyCoveredCodeError.php', 'PHPUnit\\Framework\\Warning' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Exception/Warning.php', 'PHPUnit\\Framework\\WarningTestCase' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/WarningTestCase.php', 'PHPUnit\\Runner\\AfterIncompleteTestHook' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/Hook/AfterIncompleteTestHook.php', 'PHPUnit\\Runner\\AfterLastTestHook' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/Hook/AfterLastTestHook.php', 'PHPUnit\\Runner\\AfterRiskyTestHook' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/Hook/AfterRiskyTestHook.php', 'PHPUnit\\Runner\\AfterSkippedTestHook' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/Hook/AfterSkippedTestHook.php', 'PHPUnit\\Runner\\AfterSuccessfulTestHook' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/Hook/AfterSuccessfulTestHook.php', 'PHPUnit\\Runner\\AfterTestErrorHook' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/Hook/AfterTestErrorHook.php', 'PHPUnit\\Runner\\AfterTestFailureHook' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/Hook/AfterTestFailureHook.php', 'PHPUnit\\Runner\\AfterTestHook' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/Hook/AfterTestHook.php', 'PHPUnit\\Runner\\AfterTestWarningHook' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/Hook/AfterTestWarningHook.php', 'PHPUnit\\Runner\\BaseTestRunner' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/BaseTestRunner.php', 'PHPUnit\\Runner\\BeforeFirstTestHook' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/Hook/BeforeFirstTestHook.php', 'PHPUnit\\Runner\\BeforeTestHook' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/Hook/BeforeTestHook.php', 'PHPUnit\\Runner\\DefaultTestResultCache' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/DefaultTestResultCache.php', 'PHPUnit\\Runner\\Exception' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/Exception.php', 'PHPUnit\\Runner\\Filter\\ExcludeGroupFilterIterator' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/Filter/ExcludeGroupFilterIterator.php', 'PHPUnit\\Runner\\Filter\\Factory' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/Filter/Factory.php', 'PHPUnit\\Runner\\Filter\\GroupFilterIterator' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/Filter/GroupFilterIterator.php', 'PHPUnit\\Runner\\Filter\\IncludeGroupFilterIterator' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/Filter/IncludeGroupFilterIterator.php', 'PHPUnit\\Runner\\Filter\\NameFilterIterator' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/Filter/NameFilterIterator.php', 'PHPUnit\\Runner\\Hook' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/Hook/Hook.php', 'PHPUnit\\Runner\\NullTestResultCache' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/NullTestResultCache.php', 'PHPUnit\\Runner\\PhptTestCase' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/PhptTestCase.php', 'PHPUnit\\Runner\\ResultCacheExtension' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/ResultCacheExtension.php', 'PHPUnit\\Runner\\StandardTestSuiteLoader' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/StandardTestSuiteLoader.php', 'PHPUnit\\Runner\\TestHook' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/Hook/TestHook.php', 'PHPUnit\\Runner\\TestListenerAdapter' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/Hook/TestListenerAdapter.php', 'PHPUnit\\Runner\\TestResultCache' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/TestResultCache.php', 'PHPUnit\\Runner\\TestSuiteLoader' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/TestSuiteLoader.php', 'PHPUnit\\Runner\\TestSuiteSorter' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/TestSuiteSorter.php', 'PHPUnit\\Runner\\Version' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/Version.php', 'PHPUnit\\TextUI\\Command' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/Command.php', 'PHPUnit\\TextUI\\Exception' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/Exception.php', 'PHPUnit\\TextUI\\Help' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/Help.php', 'PHPUnit\\TextUI\\ResultPrinter' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/ResultPrinter.php', 'PHPUnit\\TextUI\\TestRunner' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/TestRunner.php', 'PHPUnit\\Util\\Annotation\\DocBlock' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/Annotation/DocBlock.php', 'PHPUnit\\Util\\Annotation\\Registry' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/Annotation/Registry.php', 'PHPUnit\\Util\\Blacklist' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/Blacklist.php', 'PHPUnit\\Util\\Color' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/Color.php', 'PHPUnit\\Util\\Configuration' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/Configuration.php', 'PHPUnit\\Util\\ConfigurationGenerator' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/ConfigurationGenerator.php', 'PHPUnit\\Util\\ErrorHandler' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/ErrorHandler.php', 'PHPUnit\\Util\\Exception' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/Exception.php', 'PHPUnit\\Util\\FileLoader' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/FileLoader.php', 'PHPUnit\\Util\\Filesystem' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/Filesystem.php', 'PHPUnit\\Util\\Filter' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/Filter.php', 'PHPUnit\\Util\\Getopt' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/Getopt.php', 'PHPUnit\\Util\\GlobalState' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/GlobalState.php', 'PHPUnit\\Util\\InvalidDataSetException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/InvalidDataSetException.php', 'PHPUnit\\Util\\Json' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/Json.php', 'PHPUnit\\Util\\Log\\JUnit' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/Log/JUnit.php', 'PHPUnit\\Util\\Log\\TeamCity' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/Log/TeamCity.php', 'PHPUnit\\Util\\PHP\\AbstractPhpProcess' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/PHP/AbstractPhpProcess.php', 'PHPUnit\\Util\\PHP\\DefaultPhpProcess' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/PHP/DefaultPhpProcess.php', 'PHPUnit\\Util\\PHP\\WindowsPhpProcess' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/PHP/WindowsPhpProcess.php', 'PHPUnit\\Util\\Printer' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/Printer.php', 'PHPUnit\\Util\\Reflection' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/Reflection.php', 'PHPUnit\\Util\\RegularExpression' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/RegularExpression.php', 'PHPUnit\\Util\\Test' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/Test.php', 'PHPUnit\\Util\\TestDox\\CliTestDoxPrinter' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/TestDox/CliTestDoxPrinter.php', 'PHPUnit\\Util\\TestDox\\HtmlResultPrinter' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/TestDox/HtmlResultPrinter.php', 'PHPUnit\\Util\\TestDox\\NamePrettifier' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/TestDox/NamePrettifier.php', 'PHPUnit\\Util\\TestDox\\ResultPrinter' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/TestDox/ResultPrinter.php', 'PHPUnit\\Util\\TestDox\\TestDoxPrinter' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/TestDox/TestDoxPrinter.php', 'PHPUnit\\Util\\TestDox\\TextResultPrinter' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/TestDox/TextResultPrinter.php', 'PHPUnit\\Util\\TestDox\\XmlResultPrinter' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/TestDox/XmlResultPrinter.php', 'PHPUnit\\Util\\TextTestListRenderer' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/TextTestListRenderer.php', 'PHPUnit\\Util\\Type' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/Type.php', 'PHPUnit\\Util\\VersionComparisonOperator' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/VersionComparisonOperator.php', 'PHPUnit\\Util\\XdebugFilterScriptGenerator' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/XdebugFilterScriptGenerator.php', 'PHPUnit\\Util\\Xml' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/Xml.php', 'PHPUnit\\Util\\XmlTestListRenderer' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/XmlTestListRenderer.php', 'PHP_Token' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', 'PHP_TokenWithScope' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/TokenWithScope.php', 'PHP_TokenWithScopeAndVisibility' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/TokenWithScopeAndVisibility.php', 'PHP_Token_ABSTRACT' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Abstract.php', 'PHP_Token_AMPERSAND' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Ampersand.php', 'PHP_Token_AND_EQUAL' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/AndEqual.php', 'PHP_Token_ARRAY' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Array.php', 'PHP_Token_ARRAY_CAST' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/ArrayCast.php', 'PHP_Token_AS' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/As.php', 'PHP_Token_AT' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/At.php', 'PHP_Token_BACKTICK' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Backtick.php', 'PHP_Token_BAD_CHARACTER' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/BadCharacter.php', 'PHP_Token_BOOLEAN_AND' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/BooleanAnd.php', 'PHP_Token_BOOLEAN_OR' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/BooleanOr.php', 'PHP_Token_BOOL_CAST' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/BoolCast.php', 'PHP_Token_BREAK' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/break.php', 'PHP_Token_CALLABLE' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Callable.php', 'PHP_Token_CARET' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Caret.php', 'PHP_Token_CASE' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Case.php', 'PHP_Token_CATCH' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Catch.php', 'PHP_Token_CHARACTER' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Character.php', 'PHP_Token_CLASS' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Class.php', 'PHP_Token_CLASS_C' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/ClassC.php', 'PHP_Token_CLASS_NAME_CONSTANT' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/ClassNameConstant.php', 'PHP_Token_CLONE' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Clone.php', 'PHP_Token_CLOSE_BRACKET' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/CloseBracket.php', 'PHP_Token_CLOSE_CURLY' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/CloseCurly.php', 'PHP_Token_CLOSE_SQUARE' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/CloseSquare.php', 'PHP_Token_CLOSE_TAG' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/CloseTag.php', 'PHP_Token_COALESCE' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Coalesce.php', 'PHP_Token_COALESCE_EQUAL' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/CoalesceEqual.php', 'PHP_Token_COLON' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Colon.php', 'PHP_Token_COMMA' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Comma.php', 'PHP_Token_COMMENT' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Comment.php', 'PHP_Token_CONCAT_EQUAL' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/ConcatEqual.php', 'PHP_Token_CONST' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Const.php', 'PHP_Token_CONSTANT_ENCAPSED_STRING' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/ConstantEncapsedString.php', 'PHP_Token_CONTINUE' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Continue.php', 'PHP_Token_CURLY_OPEN' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/CurlyOpen.php', 'PHP_Token_DEC' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Dec.php', 'PHP_Token_DECLARE' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Declare.php', 'PHP_Token_DEFAULT' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Default.php', 'PHP_Token_DIR' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Dir.php', 'PHP_Token_DIV' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Div.php', 'PHP_Token_DIV_EQUAL' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/DivEqual.php', 'PHP_Token_DNUMBER' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/DNumber.php', 'PHP_Token_DO' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Do.php', 'PHP_Token_DOC_COMMENT' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/DocComment.php', 'PHP_Token_DOLLAR' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Dollar.php', 'PHP_Token_DOLLAR_OPEN_CURLY_BRACES' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/DollarOpenCurlyBraces.php', 'PHP_Token_DOT' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Dot.php', 'PHP_Token_DOUBLE_ARROW' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/DoubleArrow.php', 'PHP_Token_DOUBLE_CAST' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/DoubleCast.php', 'PHP_Token_DOUBLE_COLON' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/DoubleColon.php', 'PHP_Token_DOUBLE_QUOTES' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/DoubleQuotes.php', 'PHP_Token_ECHO' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Echo.php', 'PHP_Token_ELLIPSIS' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Ellipsis.php', 'PHP_Token_ELSE' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Else.php', 'PHP_Token_ELSEIF' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Elseif.php', 'PHP_Token_EMPTY' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Empty.php', 'PHP_Token_ENCAPSED_AND_WHITESPACE' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/EncapsedAndWhitespace.php', 'PHP_Token_ENDDECLARE' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Enddeclare.php', 'PHP_Token_ENDFOR' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Endfor.php', 'PHP_Token_ENDFOREACH' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Endforeach.php', 'PHP_Token_ENDIF' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Endif.php', 'PHP_Token_ENDSWITCH' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Endswitch.php', 'PHP_Token_ENDWHILE' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Endwhile.php', 'PHP_Token_END_HEREDOC' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/EndHeredoc.php', 'PHP_Token_EQUAL' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Equal.php', 'PHP_Token_EVAL' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Eval.php', 'PHP_Token_EXCLAMATION_MARK' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/ExclamationMark.php', 'PHP_Token_EXIT' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Exit.php', 'PHP_Token_EXTENDS' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Extends.php', 'PHP_Token_FILE' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/File.php', 'PHP_Token_FINAL' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Final.php', 'PHP_Token_FINALLY' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Finally.php', 'PHP_Token_FN' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Fn.php', 'PHP_Token_FOR' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/For.php', 'PHP_Token_FOREACH' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Foreach.php', 'PHP_Token_FUNCTION' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Function.php', 'PHP_Token_FUNC_C' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/FuncC.php', 'PHP_Token_GLOBAL' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Global.php', 'PHP_Token_GOTO' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Goto.php', 'PHP_Token_GT' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Gt.php', 'PHP_Token_HALT_COMPILER' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/HaltCompiler.php', 'PHP_Token_IF' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/If.php', 'PHP_Token_IMPLEMENTS' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Implements.php', 'PHP_Token_INC' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Inc.php', 'PHP_Token_INCLUDE' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Include.php', 'PHP_Token_INCLUDE_ONCE' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/IncludeOnce.php', 'PHP_Token_INLINE_HTML' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/InlineHtml.php', 'PHP_Token_INSTANCEOF' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Instanceof.php', 'PHP_Token_INSTEADOF' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Insteadof.php', 'PHP_Token_INTERFACE' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Interface.php', 'PHP_Token_INT_CAST' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/IntCast.php', 'PHP_Token_ISSET' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Isset.php', 'PHP_Token_IS_EQUAL' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/IsEqual.php', 'PHP_Token_IS_GREATER_OR_EQUAL' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/IsGreaterOrEqual.php', 'PHP_Token_IS_IDENTICAL' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/IsIdentical.php', 'PHP_Token_IS_NOT_EQUAL' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/IsNotEqual.php', 'PHP_Token_IS_NOT_IDENTICAL' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/IsNotIdentical.php', 'PHP_Token_IS_SMALLER_OR_EQUAL' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/IsSmallerOrEqual.php', 'PHP_Token_Includes' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Includes.php', 'PHP_Token_LINE' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Line.php', 'PHP_Token_LIST' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/List.php', 'PHP_Token_LNUMBER' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Lnumber.php', 'PHP_Token_LOGICAL_AND' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/LogicalAnd.php', 'PHP_Token_LOGICAL_OR' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/LogicalOr.php', 'PHP_Token_LOGICAL_XOR' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/LogicalXor.php', 'PHP_Token_LT' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Lt.php', 'PHP_Token_METHOD_C' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/MethodC.php', 'PHP_Token_MINUS' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Minus.php', 'PHP_Token_MINUS_EQUAL' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/MinusEqual.php', 'PHP_Token_MOD_EQUAL' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/ModEqual.php', 'PHP_Token_MULT' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Mult.php', 'PHP_Token_MUL_EQUAL' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/MulEqual.php', 'PHP_Token_NAMESPACE' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Namespace.php', 'PHP_Token_NAME_FULLY_QUALIFIED' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/NameFullyQualified.php', 'PHP_Token_NAME_QUALIFIED' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/NameQualified.php', 'PHP_Token_NAME_RELATIVE' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/NameRelative.php', 'PHP_Token_NEW' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/New.php', 'PHP_Token_NS_C' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/NsC.php', 'PHP_Token_NS_SEPARATOR' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/NsSeparator.php', 'PHP_Token_NUM_STRING' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/NumString.php', 'PHP_Token_OBJECT_CAST' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/ObjectCast.php', 'PHP_Token_OBJECT_OPERATOR' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/ObjectOperator.php', 'PHP_Token_OPEN_BRACKET' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/OpenBracket.php', 'PHP_Token_OPEN_CURLY' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/OpenCurly.php', 'PHP_Token_OPEN_SQUARE' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/OpenSquare.php', 'PHP_Token_OPEN_TAG' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/OpenTag.php', 'PHP_Token_OPEN_TAG_WITH_ECHO' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/OpenTagWithEcho.php', 'PHP_Token_OR_EQUAL' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/OrEqual.php', 'PHP_Token_PAAMAYIM_NEKUDOTAYIM' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/PaamayimNekudotayim.php', 'PHP_Token_PERCENT' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Percent.php', 'PHP_Token_PIPE' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Pipe.php', 'PHP_Token_PLUS' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Plus.php', 'PHP_Token_PLUS_EQUAL' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/PlusEqual.php', 'PHP_Token_POW' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Pow.php', 'PHP_Token_POW_EQUAL' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/PowEqual.php', 'PHP_Token_PRINT' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Print.php', 'PHP_Token_PRIVATE' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Private.php', 'PHP_Token_PROTECTED' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Protected.php', 'PHP_Token_PUBLIC' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Public.php', 'PHP_Token_QUESTION_MARK' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/QuestionMark.php', 'PHP_Token_REQUIRE' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Require.php', 'PHP_Token_REQUIRE_ONCE' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/RequireOnce.php', 'PHP_Token_RETURN' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Return.php', 'PHP_Token_SEMICOLON' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Semicolon.php', 'PHP_Token_SL' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Sl.php', 'PHP_Token_SL_EQUAL' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/SlEqual.php', 'PHP_Token_SPACESHIP' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Spaceship.php', 'PHP_Token_SR' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Sr.php', 'PHP_Token_SR_EQUAL' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/SrEqual.php', 'PHP_Token_START_HEREDOC' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/StartHeredoc.php', 'PHP_Token_STATIC' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Static.php', 'PHP_Token_STRING' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/String.php', 'PHP_Token_STRING_CAST' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/StringCast.php', 'PHP_Token_STRING_VARNAME' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/StringVarname.php', 'PHP_Token_SWITCH' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Switch.php', 'PHP_Token_Stream' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Stream.php', 'PHP_Token_Stream_CachingFactory' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/CachingFactory.php', 'PHP_Token_THROW' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Throw.php', 'PHP_Token_TILDE' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Tilde.php', 'PHP_Token_TRAIT' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Trait.php', 'PHP_Token_TRAIT_C' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/TraitC.php', 'PHP_Token_TRY' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Try.php', 'PHP_Token_UNSET' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Unset.php', 'PHP_Token_UNSET_CAST' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/UnsetCast.php', 'PHP_Token_USE' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Use.php', 'PHP_Token_USE_FUNCTION' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/UseFunction.php', 'PHP_Token_Util' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Util.php', 'PHP_Token_VAR' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Var.php', 'PHP_Token_VARIABLE' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Variable.php', 'PHP_Token_WHILE' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/While.php', 'PHP_Token_WHITESPACE' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Whitespace.php', 'PHP_Token_XOR_EQUAL' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/XorEqual.php', 'PHP_Token_YIELD' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Yield.php', 'PHP_Token_YIELD_FROM' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/YieldFrom.php', 'PharIo\\Manifest\\Application' => __DIR__ . '/..' . '/phar-io/manifest/src/values/Application.php', 'PharIo\\Manifest\\ApplicationName' => __DIR__ . '/..' . '/phar-io/manifest/src/values/ApplicationName.php', 'PharIo\\Manifest\\Author' => __DIR__ . '/..' . '/phar-io/manifest/src/values/Author.php', 'PharIo\\Manifest\\AuthorCollection' => __DIR__ . '/..' . '/phar-io/manifest/src/values/AuthorCollection.php', 'PharIo\\Manifest\\AuthorCollectionIterator' => __DIR__ . '/..' . '/phar-io/manifest/src/values/AuthorCollectionIterator.php', 'PharIo\\Manifest\\AuthorElement' => __DIR__ . '/..' . '/phar-io/manifest/src/xml/AuthorElement.php', 'PharIo\\Manifest\\AuthorElementCollection' => __DIR__ . '/..' . '/phar-io/manifest/src/xml/AuthorElementCollection.php', 'PharIo\\Manifest\\BundledComponent' => __DIR__ . '/..' . '/phar-io/manifest/src/values/BundledComponent.php', 'PharIo\\Manifest\\BundledComponentCollection' => __DIR__ . '/..' . '/phar-io/manifest/src/values/BundledComponentCollection.php', 'PharIo\\Manifest\\BundledComponentCollectionIterator' => __DIR__ . '/..' . '/phar-io/manifest/src/values/BundledComponentCollectionIterator.php', 'PharIo\\Manifest\\BundlesElement' => __DIR__ . '/..' . '/phar-io/manifest/src/xml/BundlesElement.php', 'PharIo\\Manifest\\ComponentElement' => __DIR__ . '/..' . '/phar-io/manifest/src/xml/ComponentElement.php', 'PharIo\\Manifest\\ComponentElementCollection' => __DIR__ . '/..' . '/phar-io/manifest/src/xml/ComponentElementCollection.php', 'PharIo\\Manifest\\ContainsElement' => __DIR__ . '/..' . '/phar-io/manifest/src/xml/ContainsElement.php', 'PharIo\\Manifest\\CopyrightElement' => __DIR__ . '/..' . '/phar-io/manifest/src/xml/CopyrightElement.php', 'PharIo\\Manifest\\CopyrightInformation' => __DIR__ . '/..' . '/phar-io/manifest/src/values/CopyrightInformation.php', 'PharIo\\Manifest\\ElementCollection' => __DIR__ . '/..' . '/phar-io/manifest/src/xml/ElementCollection.php', 'PharIo\\Manifest\\ElementCollectionException' => __DIR__ . '/..' . '/phar-io/manifest/src/exceptions/ElementCollectionException.php', 'PharIo\\Manifest\\Email' => __DIR__ . '/..' . '/phar-io/manifest/src/values/Email.php', 'PharIo\\Manifest\\Exception' => __DIR__ . '/..' . '/phar-io/manifest/src/exceptions/Exception.php', 'PharIo\\Manifest\\ExtElement' => __DIR__ . '/..' . '/phar-io/manifest/src/xml/ExtElement.php', 'PharIo\\Manifest\\ExtElementCollection' => __DIR__ . '/..' . '/phar-io/manifest/src/xml/ExtElementCollection.php', 'PharIo\\Manifest\\Extension' => __DIR__ . '/..' . '/phar-io/manifest/src/values/Extension.php', 'PharIo\\Manifest\\ExtensionElement' => __DIR__ . '/..' . '/phar-io/manifest/src/xml/ExtensionElement.php', 'PharIo\\Manifest\\InvalidApplicationNameException' => __DIR__ . '/..' . '/phar-io/manifest/src/exceptions/InvalidApplicationNameException.php', 'PharIo\\Manifest\\InvalidEmailException' => __DIR__ . '/..' . '/phar-io/manifest/src/exceptions/InvalidEmailException.php', 'PharIo\\Manifest\\InvalidUrlException' => __DIR__ . '/..' . '/phar-io/manifest/src/exceptions/InvalidUrlException.php', 'PharIo\\Manifest\\Library' => __DIR__ . '/..' . '/phar-io/manifest/src/values/Library.php', 'PharIo\\Manifest\\License' => __DIR__ . '/..' . '/phar-io/manifest/src/values/License.php', 'PharIo\\Manifest\\LicenseElement' => __DIR__ . '/..' . '/phar-io/manifest/src/xml/LicenseElement.php', 'PharIo\\Manifest\\Manifest' => __DIR__ . '/..' . '/phar-io/manifest/src/values/Manifest.php', 'PharIo\\Manifest\\ManifestDocument' => __DIR__ . '/..' . '/phar-io/manifest/src/xml/ManifestDocument.php', 'PharIo\\Manifest\\ManifestDocumentException' => __DIR__ . '/..' . '/phar-io/manifest/src/exceptions/ManifestDocumentException.php', 'PharIo\\Manifest\\ManifestDocumentLoadingException' => __DIR__ . '/..' . '/phar-io/manifest/src/exceptions/ManifestDocumentLoadingException.php', 'PharIo\\Manifest\\ManifestDocumentMapper' => __DIR__ . '/..' . '/phar-io/manifest/src/ManifestDocumentMapper.php', 'PharIo\\Manifest\\ManifestDocumentMapperException' => __DIR__ . '/..' . '/phar-io/manifest/src/exceptions/ManifestDocumentMapperException.php', 'PharIo\\Manifest\\ManifestElement' => __DIR__ . '/..' . '/phar-io/manifest/src/xml/ManifestElement.php', 'PharIo\\Manifest\\ManifestElementException' => __DIR__ . '/..' . '/phar-io/manifest/src/exceptions/ManifestElementException.php', 'PharIo\\Manifest\\ManifestLoader' => __DIR__ . '/..' . '/phar-io/manifest/src/ManifestLoader.php', 'PharIo\\Manifest\\ManifestLoaderException' => __DIR__ . '/..' . '/phar-io/manifest/src/exceptions/ManifestLoaderException.php', 'PharIo\\Manifest\\ManifestSerializer' => __DIR__ . '/..' . '/phar-io/manifest/src/ManifestSerializer.php', 'PharIo\\Manifest\\NoEmailAddressException' => __DIR__ . '/..' . '/phar-io/manifest/src/exceptions/NoEmailAddressException.php', 'PharIo\\Manifest\\PhpElement' => __DIR__ . '/..' . '/phar-io/manifest/src/xml/PhpElement.php', 'PharIo\\Manifest\\PhpExtensionRequirement' => __DIR__ . '/..' . '/phar-io/manifest/src/values/PhpExtensionRequirement.php', 'PharIo\\Manifest\\PhpVersionRequirement' => __DIR__ . '/..' . '/phar-io/manifest/src/values/PhpVersionRequirement.php', 'PharIo\\Manifest\\Requirement' => __DIR__ . '/..' . '/phar-io/manifest/src/values/Requirement.php', 'PharIo\\Manifest\\RequirementCollection' => __DIR__ . '/..' . '/phar-io/manifest/src/values/RequirementCollection.php', 'PharIo\\Manifest\\RequirementCollectionIterator' => __DIR__ . '/..' . '/phar-io/manifest/src/values/RequirementCollectionIterator.php', 'PharIo\\Manifest\\RequiresElement' => __DIR__ . '/..' . '/phar-io/manifest/src/xml/RequiresElement.php', 'PharIo\\Manifest\\Type' => __DIR__ . '/..' . '/phar-io/manifest/src/values/Type.php', 'PharIo\\Manifest\\Url' => __DIR__ . '/..' . '/phar-io/manifest/src/values/Url.php', 'PharIo\\Version\\AbstractVersionConstraint' => __DIR__ . '/..' . '/phar-io/version/src/constraints/AbstractVersionConstraint.php', 'PharIo\\Version\\AndVersionConstraintGroup' => __DIR__ . '/..' . '/phar-io/version/src/constraints/AndVersionConstraintGroup.php', 'PharIo\\Version\\AnyVersionConstraint' => __DIR__ . '/..' . '/phar-io/version/src/constraints/AnyVersionConstraint.php', 'PharIo\\Version\\BuildMetaData' => __DIR__ . '/..' . '/phar-io/version/src/BuildMetaData.php', 'PharIo\\Version\\ExactVersionConstraint' => __DIR__ . '/..' . '/phar-io/version/src/constraints/ExactVersionConstraint.php', 'PharIo\\Version\\Exception' => __DIR__ . '/..' . '/phar-io/version/src/exceptions/Exception.php', 'PharIo\\Version\\GreaterThanOrEqualToVersionConstraint' => __DIR__ . '/..' . '/phar-io/version/src/constraints/GreaterThanOrEqualToVersionConstraint.php', 'PharIo\\Version\\InvalidPreReleaseSuffixException' => __DIR__ . '/..' . '/phar-io/version/src/exceptions/InvalidPreReleaseSuffixException.php', 'PharIo\\Version\\InvalidVersionException' => __DIR__ . '/..' . '/phar-io/version/src/exceptions/InvalidVersionException.php', 'PharIo\\Version\\NoBuildMetaDataException' => __DIR__ . '/..' . '/phar-io/version/src/exceptions/NoBuildMetaDataException.php', 'PharIo\\Version\\NoPreReleaseSuffixException' => __DIR__ . '/..' . '/phar-io/version/src/exceptions/NoPreReleaseSuffixException.php', 'PharIo\\Version\\OrVersionConstraintGroup' => __DIR__ . '/..' . '/phar-io/version/src/constraints/OrVersionConstraintGroup.php', 'PharIo\\Version\\PreReleaseSuffix' => __DIR__ . '/..' . '/phar-io/version/src/PreReleaseSuffix.php', 'PharIo\\Version\\SpecificMajorAndMinorVersionConstraint' => __DIR__ . '/..' . '/phar-io/version/src/constraints/SpecificMajorAndMinorVersionConstraint.php', 'PharIo\\Version\\SpecificMajorVersionConstraint' => __DIR__ . '/..' . '/phar-io/version/src/constraints/SpecificMajorVersionConstraint.php', 'PharIo\\Version\\UnsupportedVersionConstraintException' => __DIR__ . '/..' . '/phar-io/version/src/exceptions/UnsupportedVersionConstraintException.php', 'PharIo\\Version\\Version' => __DIR__ . '/..' . '/phar-io/version/src/Version.php', 'PharIo\\Version\\VersionConstraint' => __DIR__ . '/..' . '/phar-io/version/src/constraints/VersionConstraint.php', 'PharIo\\Version\\VersionConstraintParser' => __DIR__ . '/..' . '/phar-io/version/src/VersionConstraintParser.php', 'PharIo\\Version\\VersionConstraintValue' => __DIR__ . '/..' . '/phar-io/version/src/VersionConstraintValue.php', 'PharIo\\Version\\VersionNumber' => __DIR__ . '/..' . '/phar-io/version/src/VersionNumber.php', 'SebastianBergmann\\CodeCoverage\\CodeCoverage' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/CodeCoverage.php', 'SebastianBergmann\\CodeCoverage\\CoveredCodeNotExecutedException' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Exception/CoveredCodeNotExecutedException.php', 'SebastianBergmann\\CodeCoverage\\Driver\\Driver' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Driver/Driver.php', 'SebastianBergmann\\CodeCoverage\\Driver\\PCOV' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Driver/PCOV.php', 'SebastianBergmann\\CodeCoverage\\Driver\\PHPDBG' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Driver/PHPDBG.php', 'SebastianBergmann\\CodeCoverage\\Driver\\Xdebug' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Driver/Xdebug.php', 'SebastianBergmann\\CodeCoverage\\Exception' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Exception/Exception.php', 'SebastianBergmann\\CodeCoverage\\Filter' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Filter.php', 'SebastianBergmann\\CodeCoverage\\InvalidArgumentException' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Exception/InvalidArgumentException.php', 'SebastianBergmann\\CodeCoverage\\MissingCoversAnnotationException' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Exception/MissingCoversAnnotationException.php', 'SebastianBergmann\\CodeCoverage\\Node\\AbstractNode' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Node/AbstractNode.php', 'SebastianBergmann\\CodeCoverage\\Node\\Builder' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Node/Builder.php', 'SebastianBergmann\\CodeCoverage\\Node\\Directory' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Node/Directory.php', 'SebastianBergmann\\CodeCoverage\\Node\\File' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Node/File.php', 'SebastianBergmann\\CodeCoverage\\Node\\Iterator' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Node/Iterator.php', 'SebastianBergmann\\CodeCoverage\\Report\\Clover' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Report/Clover.php', 'SebastianBergmann\\CodeCoverage\\Report\\Crap4j' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Report/Crap4j.php', 'SebastianBergmann\\CodeCoverage\\Report\\Html\\Dashboard' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Report/Html/Renderer/Dashboard.php', 'SebastianBergmann\\CodeCoverage\\Report\\Html\\Directory' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Report/Html/Renderer/Directory.php', 'SebastianBergmann\\CodeCoverage\\Report\\Html\\Facade' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Report/Html/Facade.php', 'SebastianBergmann\\CodeCoverage\\Report\\Html\\File' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Report/Html/Renderer/File.php', 'SebastianBergmann\\CodeCoverage\\Report\\Html\\Renderer' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Report/Html/Renderer.php', 'SebastianBergmann\\CodeCoverage\\Report\\PHP' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Report/PHP.php', 'SebastianBergmann\\CodeCoverage\\Report\\Text' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Report/Text.php', 'SebastianBergmann\\CodeCoverage\\Report\\Xml\\BuildInformation' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Report/Xml/BuildInformation.php', 'SebastianBergmann\\CodeCoverage\\Report\\Xml\\Coverage' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Report/Xml/Coverage.php', 'SebastianBergmann\\CodeCoverage\\Report\\Xml\\Directory' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Report/Xml/Directory.php', 'SebastianBergmann\\CodeCoverage\\Report\\Xml\\Facade' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Report/Xml/Facade.php', 'SebastianBergmann\\CodeCoverage\\Report\\Xml\\File' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Report/Xml/File.php', 'SebastianBergmann\\CodeCoverage\\Report\\Xml\\Method' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Report/Xml/Method.php', 'SebastianBergmann\\CodeCoverage\\Report\\Xml\\Node' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Report/Xml/Node.php', 'SebastianBergmann\\CodeCoverage\\Report\\Xml\\Project' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Report/Xml/Project.php', 'SebastianBergmann\\CodeCoverage\\Report\\Xml\\Report' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Report/Xml/Report.php', 'SebastianBergmann\\CodeCoverage\\Report\\Xml\\Source' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Report/Xml/Source.php', 'SebastianBergmann\\CodeCoverage\\Report\\Xml\\Tests' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Report/Xml/Tests.php', 'SebastianBergmann\\CodeCoverage\\Report\\Xml\\Totals' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Report/Xml/Totals.php', 'SebastianBergmann\\CodeCoverage\\Report\\Xml\\Unit' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Report/Xml/Unit.php', 'SebastianBergmann\\CodeCoverage\\RuntimeException' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Exception/RuntimeException.php', 'SebastianBergmann\\CodeCoverage\\UnintentionallyCoveredCodeException' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Exception/UnintentionallyCoveredCodeException.php', 'SebastianBergmann\\CodeCoverage\\Util' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Util.php', 'SebastianBergmann\\CodeCoverage\\Version' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Version.php', 'SebastianBergmann\\CodeUnitReverseLookup\\Wizard' => __DIR__ . '/..' . '/sebastian/code-unit-reverse-lookup/src/Wizard.php', 'SebastianBergmann\\Comparator\\ArrayComparator' => __DIR__ . '/..' . '/sebastian/comparator/src/ArrayComparator.php', 'SebastianBergmann\\Comparator\\Comparator' => __DIR__ . '/..' . '/sebastian/comparator/src/Comparator.php', 'SebastianBergmann\\Comparator\\ComparisonFailure' => __DIR__ . '/..' . '/sebastian/comparator/src/ComparisonFailure.php', 'SebastianBergmann\\Comparator\\DOMNodeComparator' => __DIR__ . '/..' . '/sebastian/comparator/src/DOMNodeComparator.php', 'SebastianBergmann\\Comparator\\DateTimeComparator' => __DIR__ . '/..' . '/sebastian/comparator/src/DateTimeComparator.php', 'SebastianBergmann\\Comparator\\DoubleComparator' => __DIR__ . '/..' . '/sebastian/comparator/src/DoubleComparator.php', 'SebastianBergmann\\Comparator\\ExceptionComparator' => __DIR__ . '/..' . '/sebastian/comparator/src/ExceptionComparator.php', 'SebastianBergmann\\Comparator\\Factory' => __DIR__ . '/..' . '/sebastian/comparator/src/Factory.php', 'SebastianBergmann\\Comparator\\MockObjectComparator' => __DIR__ . '/..' . '/sebastian/comparator/src/MockObjectComparator.php', 'SebastianBergmann\\Comparator\\NumericComparator' => __DIR__ . '/..' . '/sebastian/comparator/src/NumericComparator.php', 'SebastianBergmann\\Comparator\\ObjectComparator' => __DIR__ . '/..' . '/sebastian/comparator/src/ObjectComparator.php', 'SebastianBergmann\\Comparator\\ResourceComparator' => __DIR__ . '/..' . '/sebastian/comparator/src/ResourceComparator.php', 'SebastianBergmann\\Comparator\\ScalarComparator' => __DIR__ . '/..' . '/sebastian/comparator/src/ScalarComparator.php', 'SebastianBergmann\\Comparator\\SplObjectStorageComparator' => __DIR__ . '/..' . '/sebastian/comparator/src/SplObjectStorageComparator.php', 'SebastianBergmann\\Comparator\\TypeComparator' => __DIR__ . '/..' . '/sebastian/comparator/src/TypeComparator.php', 'SebastianBergmann\\Diff\\Chunk' => __DIR__ . '/..' . '/sebastian/diff/src/Chunk.php', 'SebastianBergmann\\Diff\\ConfigurationException' => __DIR__ . '/..' . '/sebastian/diff/src/Exception/ConfigurationException.php', 'SebastianBergmann\\Diff\\Diff' => __DIR__ . '/..' . '/sebastian/diff/src/Diff.php', 'SebastianBergmann\\Diff\\Differ' => __DIR__ . '/..' . '/sebastian/diff/src/Differ.php', 'SebastianBergmann\\Diff\\Exception' => __DIR__ . '/..' . '/sebastian/diff/src/Exception/Exception.php', 'SebastianBergmann\\Diff\\InvalidArgumentException' => __DIR__ . '/..' . '/sebastian/diff/src/Exception/InvalidArgumentException.php', 'SebastianBergmann\\Diff\\Line' => __DIR__ . '/..' . '/sebastian/diff/src/Line.php', 'SebastianBergmann\\Diff\\LongestCommonSubsequenceCalculator' => __DIR__ . '/..' . '/sebastian/diff/src/LongestCommonSubsequenceCalculator.php', 'SebastianBergmann\\Diff\\MemoryEfficientLongestCommonSubsequenceCalculator' => __DIR__ . '/..' . '/sebastian/diff/src/MemoryEfficientLongestCommonSubsequenceCalculator.php', 'SebastianBergmann\\Diff\\Output\\AbstractChunkOutputBuilder' => __DIR__ . '/..' . '/sebastian/diff/src/Output/AbstractChunkOutputBuilder.php', 'SebastianBergmann\\Diff\\Output\\DiffOnlyOutputBuilder' => __DIR__ . '/..' . '/sebastian/diff/src/Output/DiffOnlyOutputBuilder.php', 'SebastianBergmann\\Diff\\Output\\DiffOutputBuilderInterface' => __DIR__ . '/..' . '/sebastian/diff/src/Output/DiffOutputBuilderInterface.php', 'SebastianBergmann\\Diff\\Output\\StrictUnifiedDiffOutputBuilder' => __DIR__ . '/..' . '/sebastian/diff/src/Output/StrictUnifiedDiffOutputBuilder.php', 'SebastianBergmann\\Diff\\Output\\UnifiedDiffOutputBuilder' => __DIR__ . '/..' . '/sebastian/diff/src/Output/UnifiedDiffOutputBuilder.php', 'SebastianBergmann\\Diff\\Parser' => __DIR__ . '/..' . '/sebastian/diff/src/Parser.php', 'SebastianBergmann\\Diff\\TimeEfficientLongestCommonSubsequenceCalculator' => __DIR__ . '/..' . '/sebastian/diff/src/TimeEfficientLongestCommonSubsequenceCalculator.php', 'SebastianBergmann\\Environment\\Console' => __DIR__ . '/..' . '/sebastian/environment/src/Console.php', 'SebastianBergmann\\Environment\\OperatingSystem' => __DIR__ . '/..' . '/sebastian/environment/src/OperatingSystem.php', 'SebastianBergmann\\Environment\\Runtime' => __DIR__ . '/..' . '/sebastian/environment/src/Runtime.php', 'SebastianBergmann\\Exporter\\Exporter' => __DIR__ . '/..' . '/sebastian/exporter/src/Exporter.php', 'SebastianBergmann\\FileIterator\\Facade' => __DIR__ . '/..' . '/phpunit/php-file-iterator/src/Facade.php', 'SebastianBergmann\\FileIterator\\Factory' => __DIR__ . '/..' . '/phpunit/php-file-iterator/src/Factory.php', 'SebastianBergmann\\FileIterator\\Iterator' => __DIR__ . '/..' . '/phpunit/php-file-iterator/src/Iterator.php', 'SebastianBergmann\\GlobalState\\Blacklist' => __DIR__ . '/..' . '/sebastian/global-state/src/Blacklist.php', 'SebastianBergmann\\GlobalState\\CodeExporter' => __DIR__ . '/..' . '/sebastian/global-state/src/CodeExporter.php', 'SebastianBergmann\\GlobalState\\Exception' => __DIR__ . '/..' . '/sebastian/global-state/src/exceptions/Exception.php', 'SebastianBergmann\\GlobalState\\Restorer' => __DIR__ . '/..' . '/sebastian/global-state/src/Restorer.php', 'SebastianBergmann\\GlobalState\\RuntimeException' => __DIR__ . '/..' . '/sebastian/global-state/src/exceptions/RuntimeException.php', 'SebastianBergmann\\GlobalState\\Snapshot' => __DIR__ . '/..' . '/sebastian/global-state/src/Snapshot.php', 'SebastianBergmann\\ObjectEnumerator\\Enumerator' => __DIR__ . '/..' . '/sebastian/object-enumerator/src/Enumerator.php', 'SebastianBergmann\\ObjectEnumerator\\Exception' => __DIR__ . '/..' . '/sebastian/object-enumerator/src/Exception.php', 'SebastianBergmann\\ObjectEnumerator\\InvalidArgumentException' => __DIR__ . '/..' . '/sebastian/object-enumerator/src/InvalidArgumentException.php', 'SebastianBergmann\\ObjectReflector\\Exception' => __DIR__ . '/..' . '/sebastian/object-reflector/src/Exception.php', 'SebastianBergmann\\ObjectReflector\\InvalidArgumentException' => __DIR__ . '/..' . '/sebastian/object-reflector/src/InvalidArgumentException.php', 'SebastianBergmann\\ObjectReflector\\ObjectReflector' => __DIR__ . '/..' . '/sebastian/object-reflector/src/ObjectReflector.php', 'SebastianBergmann\\RecursionContext\\Context' => __DIR__ . '/..' . '/sebastian/recursion-context/src/Context.php', 'SebastianBergmann\\RecursionContext\\Exception' => __DIR__ . '/..' . '/sebastian/recursion-context/src/Exception.php', 'SebastianBergmann\\RecursionContext\\InvalidArgumentException' => __DIR__ . '/..' . '/sebastian/recursion-context/src/InvalidArgumentException.php', 'SebastianBergmann\\ResourceOperations\\ResourceOperations' => __DIR__ . '/..' . '/sebastian/resource-operations/src/ResourceOperations.php', 'SebastianBergmann\\Timer\\Exception' => __DIR__ . '/..' . '/phpunit/php-timer/src/Exception.php', 'SebastianBergmann\\Timer\\RuntimeException' => __DIR__ . '/..' . '/phpunit/php-timer/src/RuntimeException.php', 'SebastianBergmann\\Timer\\Timer' => __DIR__ . '/..' . '/phpunit/php-timer/src/Timer.php', 'SebastianBergmann\\Type\\CallableType' => __DIR__ . '/..' . '/sebastian/type/src/CallableType.php', 'SebastianBergmann\\Type\\Exception' => __DIR__ . '/..' . '/sebastian/type/src/exception/Exception.php', 'SebastianBergmann\\Type\\GenericObjectType' => __DIR__ . '/..' . '/sebastian/type/src/GenericObjectType.php', 'SebastianBergmann\\Type\\IterableType' => __DIR__ . '/..' . '/sebastian/type/src/IterableType.php', 'SebastianBergmann\\Type\\NullType' => __DIR__ . '/..' . '/sebastian/type/src/NullType.php', 'SebastianBergmann\\Type\\ObjectType' => __DIR__ . '/..' . '/sebastian/type/src/ObjectType.php', 'SebastianBergmann\\Type\\RuntimeException' => __DIR__ . '/..' . '/sebastian/type/src/exception/RuntimeException.php', 'SebastianBergmann\\Type\\SimpleType' => __DIR__ . '/..' . '/sebastian/type/src/SimpleType.php', 'SebastianBergmann\\Type\\Type' => __DIR__ . '/..' . '/sebastian/type/src/Type.php', 'SebastianBergmann\\Type\\TypeName' => __DIR__ . '/..' . '/sebastian/type/src/TypeName.php', 'SebastianBergmann\\Type\\UnknownType' => __DIR__ . '/..' . '/sebastian/type/src/UnknownType.php', 'SebastianBergmann\\Type\\VoidType' => __DIR__ . '/..' . '/sebastian/type/src/VoidType.php', 'SebastianBergmann\\Version' => __DIR__ . '/..' . '/sebastian/version/src/Version.php', 'Text_Template' => __DIR__ . '/..' . '/phpunit/php-text-template/src/Template.php', 'TheSeer\\Tokenizer\\Exception' => __DIR__ . '/..' . '/theseer/tokenizer/src/Exception.php', 'TheSeer\\Tokenizer\\NamespaceUri' => __DIR__ . '/..' . '/theseer/tokenizer/src/NamespaceUri.php', 'TheSeer\\Tokenizer\\NamespaceUriException' => __DIR__ . '/..' . '/theseer/tokenizer/src/NamespaceUriException.php', 'TheSeer\\Tokenizer\\Token' => __DIR__ . '/..' . '/theseer/tokenizer/src/Token.php', 'TheSeer\\Tokenizer\\TokenCollection' => __DIR__ . '/..' . '/theseer/tokenizer/src/TokenCollection.php', 'TheSeer\\Tokenizer\\TokenCollectionException' => __DIR__ . '/..' . '/theseer/tokenizer/src/TokenCollectionException.php', 'TheSeer\\Tokenizer\\Tokenizer' => __DIR__ . '/..' . '/theseer/tokenizer/src/Tokenizer.php', 'TheSeer\\Tokenizer\\XMLSerializer' => __DIR__ . '/..' . '/theseer/tokenizer/src/XMLSerializer.php', ); public static function getInitializer(ClassLoader $loader) { return \Closure::bind(function () use ($loader) { $loader->prefixLengthsPsr4 = ComposerStaticInita2bac752f468c259657df1752fa20eaf::$prefixLengthsPsr4; $loader->prefixDirsPsr4 = ComposerStaticInita2bac752f468c259657df1752fa20eaf::$prefixDirsPsr4; $loader->classMap = ComposerStaticInita2bac752f468c259657df1752fa20eaf::$classMap; }, null, ClassLoader::class); } } PK!U؈ÿ^?^?Wfile-manager-advanced/application/svg-sanitizer/includes/composer/InstalledVersions.phpnu„[µü¤ * Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer; use Composer\Autoload\ClassLoader; use Composer\Semver\VersionParser; /** * This class is copied in every Composer installed project and available to all * * See also https://getcomposer.org/doc/07-runtime.md#installed-versions * * To require its presence, you can require `composer-runtime-api ^2.0` * * @final */ class InstalledVersions { /** * @var mixed[]|null * @psalm-var array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array}|array{}|null */ private static $installed; /** * @var bool|null */ private static $canGetVendors; /** * @var array[] * @psalm-var array}> */ private static $installedByVendor = array(); /** * Returns a list of all package names which are present, either by being installed, replaced or provided * * @return string[] * @psalm-return list */ public static function getInstalledPackages() { $packages = array(); foreach (self::getInstalled() as $installed) { $packages[] = array_keys($installed['versions']); } if (1 === \count($packages)) { return $packages[0]; } return array_keys(array_flip(\call_user_func_array('array_merge', $packages))); } /** * Returns a list of all package names with a specific type e.g. 'library' * * @param string $type * @return string[] * @psalm-return list */ public static function getInstalledPackagesByType($type) { $packagesByType = array(); foreach (self::getInstalled() as $installed) { foreach ($installed['versions'] as $name => $package) { if (isset($package['type']) && $package['type'] === $type) { $packagesByType[] = $name; } } } return $packagesByType; } /** * Checks whether the given package is installed * * This also returns true if the package name is provided or replaced by another package * * @param string $packageName * @param bool $includeDevRequirements * @return bool */ public static function isInstalled($packageName, $includeDevRequirements = true) { foreach (self::getInstalled() as $installed) { if (isset($installed['versions'][$packageName])) { return $includeDevRequirements || !isset($installed['versions'][$packageName]['dev_requirement']) || $installed['versions'][$packageName]['dev_requirement'] === false; } } return false; } /** * Checks whether the given package satisfies a version constraint * * e.g. If you want to know whether version 2.3+ of package foo/bar is installed, you would call: * * Composer\InstalledVersions::satisfies(new VersionParser, 'foo/bar', '^2.3') * * @param VersionParser $parser Install composer/semver to have access to this class and functionality * @param string $packageName * @param string|null $constraint A version constraint to check for, if you pass one you have to make sure composer/semver is required by your package * @return bool */ public static function satisfies(VersionParser $parser, $packageName, $constraint) { $constraint = $parser->parseConstraints((string) $constraint); $provided = $parser->parseConstraints(self::getVersionRanges($packageName)); return $provided->matches($constraint); } /** * Returns a version constraint representing all the range(s) which are installed for a given package * * It is easier to use this via isInstalled() with the $constraint argument if you need to check * whether a given version of a package is installed, and not just whether it exists * * @param string $packageName * @return string Version constraint usable with composer/semver */ public static function getVersionRanges($packageName) { foreach (self::getInstalled() as $installed) { if (!isset($installed['versions'][$packageName])) { continue; } $ranges = array(); if (isset($installed['versions'][$packageName]['pretty_version'])) { $ranges[] = $installed['versions'][$packageName]['pretty_version']; } if (array_key_exists('aliases', $installed['versions'][$packageName])) { $ranges = array_merge($ranges, $installed['versions'][$packageName]['aliases']); } if (array_key_exists('replaced', $installed['versions'][$packageName])) { $ranges = array_merge($ranges, $installed['versions'][$packageName]['replaced']); } if (array_key_exists('provided', $installed['versions'][$packageName])) { $ranges = array_merge($ranges, $installed['versions'][$packageName]['provided']); } return implode(' || ', $ranges); } throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed'); } /** * @param string $packageName * @return string|null If the package is being replaced or provided but is not really installed, null will be returned as version, use satisfies or getVersionRanges if you need to know if a given version is present */ public static function getVersion($packageName) { foreach (self::getInstalled() as $installed) { if (!isset($installed['versions'][$packageName])) { continue; } if (!isset($installed['versions'][$packageName]['version'])) { return null; } return $installed['versions'][$packageName]['version']; } throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed'); } /** * @param string $packageName * @return string|null If the package is being replaced or provided but is not really installed, null will be returned as version, use satisfies or getVersionRanges if you need to know if a given version is present */ public static function getPrettyVersion($packageName) { foreach (self::getInstalled() as $installed) { if (!isset($installed['versions'][$packageName])) { continue; } if (!isset($installed['versions'][$packageName]['pretty_version'])) { return null; } return $installed['versions'][$packageName]['pretty_version']; } throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed'); } /** * @param string $packageName * @return string|null If the package is being replaced or provided but is not really installed, null will be returned as reference */ public static function getReference($packageName) { foreach (self::getInstalled() as $installed) { if (!isset($installed['versions'][$packageName])) { continue; } if (!isset($installed['versions'][$packageName]['reference'])) { return null; } return $installed['versions'][$packageName]['reference']; } throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed'); } /** * @param string $packageName * @return string|null If the package is being replaced or provided but is not really installed, null will be returned as install path. Packages of type metapackages also have a null install path. */ public static function getInstallPath($packageName) { foreach (self::getInstalled() as $installed) { if (!isset($installed['versions'][$packageName])) { continue; } return isset($installed['versions'][$packageName]['install_path']) ? $installed['versions'][$packageName]['install_path'] : null; } throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed'); } /** * @return array * @psalm-return array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool} */ public static function getRootPackage() { $installed = self::getInstalled(); return $installed[0]['root']; } /** * Returns the raw installed.php data for custom implementations * * @deprecated Use getAllRawData() instead which returns all datasets for all autoloaders present in the process. getRawData only returns the first dataset loaded, which may not be what you expect. * @return array[] * @psalm-return array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array} */ public static function getRawData() { @trigger_error('getRawData only returns the first dataset loaded, which may not be what you expect. Use getAllRawData() instead which returns all datasets for all autoloaders present in the process.', E_USER_DEPRECATED); if (null === self::$installed) { // only require the installed.php file if this file is loaded from its dumped location, // and not from its source location in the composer/composer package, see https://github.com/composer/composer/issues/9937 if (substr(__DIR__, -8, 1) !== 'C') { self::$installed = include __DIR__ . '/installed.php'; } else { self::$installed = array(); } } return self::$installed; } /** * Returns the raw data of all installed.php which are currently loaded for custom implementations * * @return array[] * @psalm-return list}> */ public static function getAllRawData() { return self::getInstalled(); } /** * Lets you reload the static array from another file * * This is only useful for complex integrations in which a project needs to use * this class but then also needs to execute another project's autoloader in process, * and wants to ensure both projects have access to their version of installed.php. * * A typical case would be PHPUnit, where it would need to make sure it reads all * the data it needs from this class, then call reload() with * `require $CWD/vendor/composer/installed.php` (or similar) as input to make sure * the project in which it runs can then also use this class safely, without * interference between PHPUnit's dependencies and the project's dependencies. * * @param array[] $data A vendor/composer/installed.php data set * @return void * * @psalm-param array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array} $data */ public static function reload($data) { self::$installed = $data; self::$installedByVendor = array(); } /** * @return array[] * @psalm-return list}> */ private static function getInstalled() { if (null === self::$canGetVendors) { self::$canGetVendors = method_exists('Composer\Autoload\ClassLoader', 'getRegisteredLoaders'); } $installed = array(); $copiedLocalDir = false; if (self::$canGetVendors) { foreach (ClassLoader::getRegisteredLoaders() as $vendorDir => $loader) { if (isset(self::$installedByVendor[$vendorDir])) { $installed[] = self::$installedByVendor[$vendorDir]; } elseif (is_file($vendorDir.'/composer/installed.php')) { /** @var array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array} $required */ $required = require $vendorDir.'/composer/installed.php'; self::$installedByVendor[$vendorDir] = $required; $installed[] = $required; if (strtr($vendorDir.'/composer', '\\', '/') === strtr(__DIR__, '\\', '/')) { self::$installed = $required; $copiedLocalDir = true; } } } } if (null === self::$installed) { // only require the installed.php file if this file is loaded from its dumped location, // and not from its source location in the composer/composer package, see https://github.com/composer/composer/issues/9937 if (substr(__DIR__, -8, 1) !== 'C') { /** @var array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array} $required */ $required = require __DIR__ . '/installed.php'; self::$installed = $required; } else { self::$installed = array(); } } if (self::$installed !== array() && !$copiedLocalDir) { $installed[] = self::$installed; } return $installed; } } PK! Õ..Ifile-manager-advanced/application/svg-sanitizer/includes/composer/LICENSEnu„[µü¤ Copyright (c) Nils Adermann, Jordi Boggiano Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. PK!Š/t‹‹Yfile-manager-advanced/application/svg-sanitizer/includes/composer/autoload_namespaces.phpnu„[µü¤ array($baseDir . '/tests'), 'enshrined\\svgSanitize\\' => array($baseDir . '/src'), 'Doctrine\\Instantiator\\' => array($vendorDir . '/doctrine/instantiator/src/Doctrine/Instantiator'), 'DeepCopy\\' => array($vendorDir . '/myclabs/deep-copy/src/DeepCopy'), ); PK!.EË–$–$Ofile-manager-advanced/application/svg-sanitizer/includes/composer/installed.phpnu„[µü¤ array( 'name' => 'enshrined/svg-sanitize', 'pretty_version' => '1.0.0+no-version-set', 'version' => '1.0.0.0', 'reference' => null, 'type' => 'library', 'install_path' => __DIR__ . '/../../', 'aliases' => array(), 'dev' => true, ), 'versions' => array( 'doctrine/instantiator' => array( 'pretty_version' => '1.5.0', 'version' => '1.5.0.0', 'reference' => '0a0fa9780f5d4e507415a065172d26a98d02047b', 'type' => 'library', 'install_path' => __DIR__ . '/../doctrine/instantiator', 'aliases' => array(), 'dev_requirement' => true, ), 'enshrined/svg-sanitize' => array( 'pretty_version' => '1.0.0+no-version-set', 'version' => '1.0.0.0', 'reference' => null, 'type' => 'library', 'install_path' => __DIR__ . '/../../', 'aliases' => array(), 'dev_requirement' => false, ), 'myclabs/deep-copy' => array( 'pretty_version' => '1.12.1', 'version' => '1.12.1.0', 'reference' => '123267b2c49fbf30d78a7b2d333f6be754b94845', 'type' => 'library', 'install_path' => __DIR__ . '/../myclabs/deep-copy', 'aliases' => array(), 'dev_requirement' => true, ), 'phar-io/manifest' => array( 'pretty_version' => '2.0.4', 'version' => '2.0.4.0', 'reference' => '54750ef60c58e43759730615a392c31c80e23176', 'type' => 'library', 'install_path' => __DIR__ . '/../phar-io/manifest', 'aliases' => array(), 'dev_requirement' => true, ), 'phar-io/version' => array( 'pretty_version' => '3.2.1', 'version' => '3.2.1.0', 'reference' => '4f7fd7836c6f332bb2933569e566a0d6c4cbed74', 'type' => 'library', 'install_path' => __DIR__ . '/../phar-io/version', 'aliases' => array(), 'dev_requirement' => true, ), 'phpunit/php-code-coverage' => array( 'pretty_version' => '7.0.17', 'version' => '7.0.17.0', 'reference' => '40a4ed114a4aea5afd6df8d0f0c9cd3033097f66', 'type' => 'library', 'install_path' => __DIR__ . '/../phpunit/php-code-coverage', 'aliases' => array(), 'dev_requirement' => true, ), 'phpunit/php-file-iterator' => array( 'pretty_version' => '2.0.6', 'version' => '2.0.6.0', 'reference' => '69deeb8664f611f156a924154985fbd4911eb36b', 'type' => 'library', 'install_path' => __DIR__ . '/../phpunit/php-file-iterator', 'aliases' => array(), 'dev_requirement' => true, ), 'phpunit/php-text-template' => array( 'pretty_version' => '1.2.1', 'version' => '1.2.1.0', 'reference' => '31f8b717e51d9a2afca6c9f046f5d69fc27c8686', 'type' => 'library', 'install_path' => __DIR__ . '/../phpunit/php-text-template', 'aliases' => array(), 'dev_requirement' => true, ), 'phpunit/php-timer' => array( 'pretty_version' => '2.1.4', 'version' => '2.1.4.0', 'reference' => 'a691211e94ff39a34811abd521c31bd5b305b0bb', 'type' => 'library', 'install_path' => __DIR__ . '/../phpunit/php-timer', 'aliases' => array(), 'dev_requirement' => true, ), 'phpunit/php-token-stream' => array( 'pretty_version' => '4.0.4', 'version' => '4.0.4.0', 'reference' => 'a853a0e183b9db7eed023d7933a858fa1c8d25a3', 'type' => 'library', 'install_path' => __DIR__ . '/../phpunit/php-token-stream', 'aliases' => array(), 'dev_requirement' => true, ), 'phpunit/phpunit' => array( 'pretty_version' => '8.5.41', 'version' => '8.5.41.0', 'reference' => 'd843cb5bcf0bf9ae3484016444fe0c5b6ec7e4fa', 'type' => 'library', 'install_path' => __DIR__ . '/../phpunit/phpunit', 'aliases' => array(), 'dev_requirement' => true, ), 'sebastian/code-unit-reverse-lookup' => array( 'pretty_version' => '1.0.3', 'version' => '1.0.3.0', 'reference' => '92a1a52e86d34cde6caa54f1b5ffa9fda18e5d54', 'type' => 'library', 'install_path' => __DIR__ . '/../sebastian/code-unit-reverse-lookup', 'aliases' => array(), 'dev_requirement' => true, ), 'sebastian/comparator' => array( 'pretty_version' => '3.0.5', 'version' => '3.0.5.0', 'reference' => '1dc7ceb4a24aede938c7af2a9ed1de09609ca770', 'type' => 'library', 'install_path' => __DIR__ . '/../sebastian/comparator', 'aliases' => array(), 'dev_requirement' => true, ), 'sebastian/diff' => array( 'pretty_version' => '3.0.6', 'version' => '3.0.6.0', 'reference' => '98ff311ca519c3aa73ccd3de053bdb377171d7b6', 'type' => 'library', 'install_path' => __DIR__ . '/../sebastian/diff', 'aliases' => array(), 'dev_requirement' => true, ), 'sebastian/environment' => array( 'pretty_version' => '4.2.5', 'version' => '4.2.5.0', 'reference' => '56932f6049a0482853056ffd617c91ffcc754205', 'type' => 'library', 'install_path' => __DIR__ . '/../sebastian/environment', 'aliases' => array(), 'dev_requirement' => true, ), 'sebastian/exporter' => array( 'pretty_version' => '3.1.6', 'version' => '3.1.6.0', 'reference' => '1939bc8fd1d39adcfa88c5b35335910869214c56', 'type' => 'library', 'install_path' => __DIR__ . '/../sebastian/exporter', 'aliases' => array(), 'dev_requirement' => true, ), 'sebastian/global-state' => array( 'pretty_version' => '3.0.5', 'version' => '3.0.5.0', 'reference' => '91c7c47047a971f02de57ed6f040087ef110c5d9', 'type' => 'library', 'install_path' => __DIR__ . '/../sebastian/global-state', 'aliases' => array(), 'dev_requirement' => true, ), 'sebastian/object-enumerator' => array( 'pretty_version' => '3.0.5', 'version' => '3.0.5.0', 'reference' => 'ac5b293dba925751b808e02923399fb44ff0d541', 'type' => 'library', 'install_path' => __DIR__ . '/../sebastian/object-enumerator', 'aliases' => array(), 'dev_requirement' => true, ), 'sebastian/object-reflector' => array( 'pretty_version' => '1.1.3', 'version' => '1.1.3.0', 'reference' => '1d439c229e61f244ff1f211e5c99737f90c67def', 'type' => 'library', 'install_path' => __DIR__ . '/../sebastian/object-reflector', 'aliases' => array(), 'dev_requirement' => true, ), 'sebastian/recursion-context' => array( 'pretty_version' => '3.0.2', 'version' => '3.0.2.0', 'reference' => '9bfd3c6f1f08c026f542032dfb42813544f7d64c', 'type' => 'library', 'install_path' => __DIR__ . '/../sebastian/recursion-context', 'aliases' => array(), 'dev_requirement' => true, ), 'sebastian/resource-operations' => array( 'pretty_version' => '2.0.3', 'version' => '2.0.3.0', 'reference' => '72a7f7674d053d548003b16ff5a106e7e0e06eee', 'type' => 'library', 'install_path' => __DIR__ . '/../sebastian/resource-operations', 'aliases' => array(), 'dev_requirement' => true, ), 'sebastian/type' => array( 'pretty_version' => '1.1.5', 'version' => '1.1.5.0', 'reference' => '18f071c3a29892b037d35e6b20ddf3ea39b42874', 'type' => 'library', 'install_path' => __DIR__ . '/../sebastian/type', 'aliases' => array(), 'dev_requirement' => true, ), 'sebastian/version' => array( 'pretty_version' => '2.0.1', 'version' => '2.0.1.0', 'reference' => '99732be0ddb3361e16ad77b68ba41efc8e979019', 'type' => 'library', 'install_path' => __DIR__ . '/../sebastian/version', 'aliases' => array(), 'dev_requirement' => true, ), 'theseer/tokenizer' => array( 'pretty_version' => '1.2.3', 'version' => '1.2.3.0', 'reference' => '737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2', 'type' => 'library', 'install_path' => __DIR__ . '/../theseer/tokenizer', 'aliases' => array(), 'dev_requirement' => true, ), ), ); PK!õŠ}=��Tfile-manager-advanced/application/svg-sanitizer/includes/composer/platform_check.phpnu„[µü¤= 70100)) { $issues[] = 'Your Composer dependencies require a PHP version ">= 7.1.0". You are running ' . PHP_VERSION . '.'; } if ($issues) { if (!headers_sent()) { header('HTTP/1.1 500 Internal Server Error'); } if (!ini_get('display_errors')) { if (PHP_SAPI === 'cli' || PHP_SAPI === 'phpdbg') { fwrite(STDERR, 'Composer detected issues in your platform:' . PHP_EOL.PHP_EOL . implode(PHP_EOL, $issues) . PHP_EOL.PHP_EOL); } elseif (!headers_sent()) { echo 'Composer detected issues in your platform:' . PHP_EOL.PHP_EOL . str_replace('You are running '.PHP_VERSION.'.', '', implode(PHP_EOL, $issues)) . PHP_EOL.PHP_EOL; } } trigger_error( 'Composer detected issues in your platform: ' . implode(' ', $issues), E_USER_ERROR ); } PK!¨]s¡��Hfile-manager-advanced/application/svg-sanitizer/includes/bin/phpunit.batnu„[µü¤@ECHO OFF setlocal DISABLEDELAYEDEXPANSION SET BIN_TARGET=%~dp0/phpunit SET COMPOSER_RUNTIME_BIN_DIR=%~dp0 php "%BIN_TARGET%" %* PK!ÀŸŒiiDfile-manager-advanced/application/svg-sanitizer/includes/bin/phpunitnu„[µü¤#!/usr/bin/env php realpath = realpath($opened_path) ?: $opened_path; $opened_path = 'phpvfscomposer://'.$this->realpath; $this->handle = fopen($this->realpath, $mode); $this->position = 0; return (bool) $this->handle; } public function stream_read($count) { $data = fread($this->handle, $count); if ($this->position === 0) { $data = preg_replace('{^#!.*\r?\n}', '', $data); } $data = str_replace('__DIR__', var_export(dirname($this->realpath), true), $data); $data = str_replace('__FILE__', var_export($this->realpath, true), $data); $this->position += strlen($data); return $data; } public function stream_cast($castAs) { return $this->handle; } public function stream_close() { fclose($this->handle); } public function stream_lock($operation) { return $operation ? flock($this->handle, $operation) : true; } public function stream_seek($offset, $whence) { if (0 === fseek($this->handle, $offset, $whence)) { $this->position = ftell($this->handle); return true; } return false; } public function stream_tell() { return $this->position; } public function stream_eof() { return feof($this->handle); } public function stream_stat() { return array(); } public function stream_set_option($option, $arg1, $arg2) { return true; } public function url_stat($path, $flags) { $path = substr($path, 17); if (file_exists($path)) { return stat($path); } return false; } } } if ( (function_exists('stream_get_wrappers') && in_array('phpvfscomposer', stream_get_wrappers(), true)) || (function_exists('stream_wrapper_register') && stream_wrapper_register('phpvfscomposer', 'Composer\BinProxyWrapper')) ) { return include("phpvfscomposer://" . __DIR__ . '/..'.'/phpunit/phpunit/phpunit'); } } return include __DIR__ . '/..'.'/phpunit/phpunit/phpunit'; PK! 9@{þþXfile-manager-advanced/application/svg-sanitizer/includes/myclabs/deep-copy/composer.jsonnu„[µü¤{ "name": "myclabs/deep-copy", "description": "Create deep copies (clones) of your objects", "license": "MIT", "type": "library", "keywords": [ "clone", "copy", "duplicate", "object", "object graph" ], "require": { "php": "^7.1 || ^8.0" }, "require-dev": { "doctrine/collections": "^1.6.8", "doctrine/common": "^2.13.3 || ^3.2.2", "phpspec/prophecy": "^1.10", "phpunit/phpunit": "^7.5.20 || ^8.5.23 || ^9.5.13" }, "conflict": { "doctrine/collections": "<1.6.8", "doctrine/common": "<2.13.3 || >=3 <3.2.2" }, "autoload": { "psr-4": { "DeepCopy\\": "src/DeepCopy/" }, "files": [ "src/DeepCopy/deep_copy.php" ] }, "autoload-dev": { "psr-4": { "DeepCopyTest\\": "tests/DeepCopyTest/", "DeepCopy\\": "fixtures/" } }, "config": { "sort-packages": true } } PK!šÑZÙßßxfile-manager-advanced/application/svg-sanitizer/includes/myclabs/deep-copy/src/DeepCopy/TypeFilter/ShallowCopyFilter.phpnu„[µü¤copier = $copier; } /** * {@inheritdoc} */ public function apply($element) { $newElement = clone $element; $copy = $this->createCopyClosure(); return $copy($newElement); } private function createCopyClosure() { $copier = $this->copier; $copy = function (SplDoublyLinkedList $list) use ($copier) { // Replace each element in the list with a deep copy of itself for ($i = 1; $i <= $list->count(); $i++) { $copy = $copier->recursiveCopy($list->shift()); $list->push($copy); } return $list; }; return Closure::bind($copy, null, DeepCopy::class); } } PK!0Ò)ÐÐ|file-manager-advanced/application/svg-sanitizer/includes/myclabs/deep-copy/src/DeepCopy/TypeFilter/Spl/ArrayObjectFilter.phpnu„[µü¤copier = $copier; } /** * {@inheritdoc} */ public function apply($arrayObject) { $clone = clone $arrayObject; foreach ($arrayObject->getArrayCopy() as $k => $v) { $clone->offsetSet($k, $this->copier->copy($v)); } return $clone; } } PK!†³Ì°°~file-manager-advanced/application/svg-sanitizer/includes/myclabs/deep-copy/src/DeepCopy/TypeFilter/Spl/SplDoublyLinkedList.phpnu„[µü¤callback = $callable; } /** * {@inheritdoc} */ public function apply($element) { return call_user_func($this->callback, $element); } } PK!å0PaJJ|file-manager-advanced/application/svg-sanitizer/includes/myclabs/deep-copy/src/DeepCopy/TypeFilter/Date/DatePeriodFilter.phpnu„[µü¤= 80200 && $element->include_end_date) { $options |= DatePeriod::INCLUDE_END_DATE; } if (!$element->include_start_date) { $options |= DatePeriod::EXCLUDE_START_DATE; } if ($element->getEndDate()) { return new DatePeriod($element->getStartDate(), $element->getDateInterval(), $element->getEndDate(), $options); } if (PHP_VERSION_ID >= 70217) { $recurrences = $element->getRecurrences(); } else { $recurrences = $element->recurrences - $element->include_start_date; } return new DatePeriod($element->getStartDate(), $element->getDateInterval(), $recurrences, $options); } } PK!GFòÐ~file-manager-advanced/application/svg-sanitizer/includes/myclabs/deep-copy/src/DeepCopy/TypeFilter/Date/DateIntervalFilter.phpnu„[µü¤ $propertyValue) { $copy->{$propertyName} = $propertyValue; } return $copy; } } PK!«S"K!!dfile-manager-advanced/application/svg-sanitizer/includes/myclabs/deep-copy/src/DeepCopy/DeepCopy.phpnu„[µü¤ Filter, 'matcher' => Matcher] pairs. */ private $filters = []; /** * Type Filters to apply. * * @var array Array of ['filter' => Filter, 'matcher' => Matcher] pairs. */ private $typeFilters = []; /** * @var bool */ private $skipUncloneable = false; /** * @var bool */ private $useCloneMethod; /** * @param bool $useCloneMethod If set to true, when an object implements the __clone() function, it will be used * instead of the regular deep cloning. */ public function __construct($useCloneMethod = false) { $this->useCloneMethod = $useCloneMethod; $this->addTypeFilter(new ArrayObjectFilter($this), new TypeMatcher(ArrayObject::class)); $this->addTypeFilter(new DateIntervalFilter(), new TypeMatcher(DateInterval::class)); $this->addTypeFilter(new DatePeriodFilter(), new TypeMatcher(DatePeriod::class)); $this->addTypeFilter(new SplDoublyLinkedListFilter($this), new TypeMatcher(SplDoublyLinkedList::class)); } /** * If enabled, will not throw an exception when coming across an uncloneable property. * * @param $skipUncloneable * * @return $this */ public function skipUncloneable($skipUncloneable = true) { $this->skipUncloneable = $skipUncloneable; return $this; } /** * Deep copies the given object. * * @param mixed $object * * @return mixed */ public function copy($object) { $this->hashMap = []; return $this->recursiveCopy($object); } public function addFilter(Filter $filter, Matcher $matcher) { $this->filters[] = [ 'matcher' => $matcher, 'filter' => $filter, ]; } public function prependFilter(Filter $filter, Matcher $matcher) { array_unshift($this->filters, [ 'matcher' => $matcher, 'filter' => $filter, ]); } public function addTypeFilter(TypeFilter $filter, TypeMatcher $matcher) { $this->typeFilters[] = [ 'matcher' => $matcher, 'filter' => $filter, ]; } private function recursiveCopy($var) { // Matches Type Filter if ($filter = $this->getFirstMatchedTypeFilter($this->typeFilters, $var)) { return $filter->apply($var); } // Resource if (is_resource($var)) { return $var; } // Array if (is_array($var)) { return $this->copyArray($var); } // Scalar if (! is_object($var)) { return $var; } // Enum if (PHP_VERSION_ID >= 80100 && enum_exists(get_class($var))) { return $var; } // Object return $this->copyObject($var); } /** * Copy an array * @param array $array * @return array */ private function copyArray(array $array) { foreach ($array as $key => $value) { $array[$key] = $this->recursiveCopy($value); } return $array; } /** * Copies an object. * * @param object $object * * @throws CloneException * * @return object */ private function copyObject($object) { $objectHash = spl_object_hash($object); if (isset($this->hashMap[$objectHash])) { return $this->hashMap[$objectHash]; } $reflectedObject = new ReflectionObject($object); $isCloneable = $reflectedObject->isCloneable(); if (false === $isCloneable) { if ($this->skipUncloneable) { $this->hashMap[$objectHash] = $object; return $object; } throw new CloneException( sprintf( 'The class "%s" is not cloneable.', $reflectedObject->getName() ) ); } $newObject = clone $object; $this->hashMap[$objectHash] = $newObject; if ($this->useCloneMethod && $reflectedObject->hasMethod('__clone')) { return $newObject; } if ($newObject instanceof DateTimeInterface || $newObject instanceof DateTimeZone) { return $newObject; } foreach (ReflectionHelper::getProperties($reflectedObject) as $property) { $this->copyObjectProperty($newObject, $property); } return $newObject; } private function copyObjectProperty($object, ReflectionProperty $property) { // Ignore static properties if ($property->isStatic()) { return; } // Ignore readonly properties if (method_exists($property, 'isReadOnly') && $property->isReadOnly()) { return; } // Apply the filters foreach ($this->filters as $item) { /** @var Matcher $matcher */ $matcher = $item['matcher']; /** @var Filter $filter */ $filter = $item['filter']; if ($matcher->matches($object, $property->getName())) { $filter->apply( $object, $property->getName(), function ($object) { return $this->recursiveCopy($object); } ); if ($filter instanceof ChainableFilter) { continue; } // If a filter matches, we stop processing this property return; } } $property->setAccessible(true); // Ignore uninitialized properties (for PHP >7.4) if (method_exists($property, 'isInitialized') && !$property->isInitialized($object)) { return; } $propertyValue = $property->getValue($object); // Copy the property $property->setValue($object, $this->recursiveCopy($propertyValue)); } /** * Returns first filter that matches variable, `null` if no such filter found. * * @param array $filterRecords Associative array with 2 members: 'filter' with value of type {@see TypeFilter} and * 'matcher' with value of type {@see TypeMatcher} * @param mixed $var * * @return TypeFilter|null */ private function getFirstMatchedTypeFilter(array $filterRecords, $var) { $matched = $this->first( $filterRecords, function (array $record) use ($var) { /* @var TypeMatcher $matcher */ $matcher = $record['matcher']; return $matcher->matches($var); } ); return isset($matched) ? $matched['filter'] : null; } /** * Returns first element that matches predicate, `null` if no such element found. * * @param array $elements Array of ['filter' => Filter, 'matcher' => Matcher] pairs. * @param callable $predicate Predicate arguments are: element. * * @return array|null Associative array with 2 members: 'filter' with value of type {@see TypeFilter} and 'matcher' * with value of type {@see TypeMatcher} or `null`. */ private function first(array $elements, callable $predicate) { foreach ($elements as $element) { if (call_user_func($predicate, $element)) { return $element; } } return null; } } PK!L¥¯ttfile-manager-advanced/application/svg-sanitizer/includes/myclabs/deep-copy/src/DeepCopy/Exception/CloneException.phpnu„[µü¤getProperties() does not return private properties from ancestor classes. * * @author muratyaman@gmail.com * @see http://php.net/manual/en/reflectionclass.getproperties.php * * @param ReflectionClass $ref * * @return ReflectionProperty[] */ public static function getProperties(ReflectionClass $ref) { $props = $ref->getProperties(); $propsArr = array(); foreach ($props as $prop) { $propertyName = $prop->getName(); $propsArr[$propertyName] = $prop; } if ($parentClass = $ref->getParentClass()) { $parentPropsArr = self::getProperties($parentClass); foreach ($propsArr as $key => $property) { $parentPropsArr[$key] = $property; } return $parentPropsArr; } return $propsArr; } /** * Retrieves property by name from object and all its ancestors. * * @param object|string $object * @param string $name * * @throws PropertyException * @throws ReflectionException * * @return ReflectionProperty */ public static function getProperty($object, $name) { $reflection = is_object($object) ? new ReflectionObject($object) : new ReflectionClass($object); if ($reflection->hasProperty($name)) { return $reflection->getProperty($name); } if ($parentClass = $reflection->getParentClass()) { return self::getProperty($parentClass->getName(), $name); } throw new PropertyException( sprintf( 'The class "%s" doesn\'t have a property with the given name: "%s".', is_object($object) ? get_class($object) : $object, $name ) ); } } PK!6Sö“\\ifile-manager-advanced/application/svg-sanitizer/includes/myclabs/deep-copy/src/DeepCopy/Filter/Filter.phpnu„[µü¤ÁÁrfile-manager-advanced/application/svg-sanitizer/includes/myclabs/deep-copy/src/DeepCopy/Filter/ChainableFilter.phpnu„[µü¤filter = $filter; } public function apply($object, $property, $objectCopier) { $this->filter->apply($object, $property, $objectCopier); } } PK!�:D„file-manager-advanced/application/svg-sanitizer/includes/myclabs/deep-copy/src/DeepCopy/Filter/Doctrine/DoctrineCollectionFilter.phpnu„[µü¤setAccessible(true); $oldCollection = $reflectionProperty->getValue($object); $newCollection = $oldCollection->map( function ($item) use ($objectCopier) { return $objectCopier($item); } ); $reflectionProperty->setValue($object, $newCollection); } } PK!¤ï7ßÁÁ‰file-manager-advanced/application/svg-sanitizer/includes/myclabs/deep-copy/src/DeepCopy/Filter/Doctrine/DoctrineEmptyCollectionFilter.phpnu„[µü¤setAccessible(true); $reflectionProperty->setValue($object, new ArrayCollection()); } } PK!ùí““file-manager-advanced/application/svg-sanitizer/includes/myclabs/deep-copy/src/DeepCopy/Filter/Doctrine/DoctrineProxyFilter.phpnu„[µü¤__load(); } } PK!a…˲��pfile-manager-advanced/application/svg-sanitizer/includes/myclabs/deep-copy/src/DeepCopy/Filter/ReplaceFilter.phpnu„[µü¤callback = $callable; } /** * Replaces the object property by the result of the callback called with the object property. * * {@inheritdoc} */ public function apply($object, $property, $objectCopier) { $reflectionProperty = ReflectionHelper::getProperty($object, $property); $reflectionProperty->setAccessible(true); $value = call_user_func($this->callback, $reflectionProperty->getValue($object)); $reflectionProperty->setValue($object, $value); } } PK!]´®]ââpfile-manager-advanced/application/svg-sanitizer/includes/myclabs/deep-copy/src/DeepCopy/Filter/SetNullFilter.phpnu„[µü¤setAccessible(true); $reflectionProperty->setValue($object, null); } } PK!Åõümfile-manager-advanced/application/svg-sanitizer/includes/myclabs/deep-copy/src/DeepCopy/Filter/KeepFilter.phpnu„[µü¤type = $type; } /** * @param mixed $element * * @return boolean */ public function matches($element) { return is_object($element) ? is_a($element, $this->type) : gettype($element) === $this->type; } } PK!"e¯ŒŒefile-manager-advanced/application/svg-sanitizer/includes/myclabs/deep-copy/src/DeepCopy/deep_copy.phpnu„[µü¤copy($value); } } PK!YŸóxøøwfile-manager-advanced/application/svg-sanitizer/includes/myclabs/deep-copy/src/DeepCopy/Matcher/PropertyNameMatcher.phpnu„[µü¤property = $property; } /** * Matches a property by its name. * * {@inheritdoc} */ public function matches($object, $property) { return $property == $this->property; } } PK!qƒeÕÕkfile-manager-advanced/application/svg-sanitizer/includes/myclabs/deep-copy/src/DeepCopy/Matcher/Matcher.phpnu„[µü¤class = $class; $this->property = $property; } /** * Matches a specific property of a specific class. * * {@inheritdoc} */ public function matches($object, $property) { return ($object instanceof $this->class) && $property == $this->property; } } PK!L¬bçhh�file-manager-advanced/application/svg-sanitizer/includes/myclabs/deep-copy/src/DeepCopy/Matcher/Doctrine/DoctrineProxyMatcher.phpnu„[µü¤propertyType = $propertyType; } /** * {@inheritdoc} */ public function matches($object, $property) { try { $reflectionProperty = ReflectionHelper::getProperty($object, $property); } catch (ReflectionException $exception) { return false; } $reflectionProperty->setAccessible(true); // Uninitialized properties (for PHP >7.4) if (method_exists($reflectionProperty, 'isInitialized') && !$reflectionProperty->isInitialized($object)) { // null instanceof $this->propertyType return false; } return $reflectionProperty->getValue($object) instanceof $this->propertyType; } } PK!ª|ãç**Tfile-manager-advanced/application/svg-sanitizer/includes/myclabs/deep-copy/README.mdnu„[µü¤# DeepCopy DeepCopy helps you create deep copies (clones) of your objects. It is designed to handle cycles in the association graph. [![Total Downloads](https://poser.pugx.org/myclabs/deep-copy/downloads.svg)](https://packagist.org/packages/myclabs/deep-copy) [![Integrate](https://github.com/myclabs/DeepCopy/actions/workflows/ci.yaml/badge.svg?branch=1.x)](https://github.com/myclabs/DeepCopy/actions/workflows/ci.yaml) ## Table of Contents 1. [How](#how) 1. [Why](#why) 1. [Using simply `clone`](#using-simply-clone) 1. [Overriding `__clone()`](#overriding-__clone) 1. [With `DeepCopy`](#with-deepcopy) 1. [How it works](#how-it-works) 1. [Going further](#going-further) 1. [Matchers](#matchers) 1. [Property name](#property-name) 1. [Specific property](#specific-property) 1. [Type](#type) 1. [Filters](#filters) 1. [`SetNullFilter`](#setnullfilter-filter) 1. [`KeepFilter`](#keepfilter-filter) 1. [`DoctrineCollectionFilter`](#doctrinecollectionfilter-filter) 1. [`DoctrineEmptyCollectionFilter`](#doctrineemptycollectionfilter-filter) 1. [`DoctrineProxyFilter`](#doctrineproxyfilter-filter) 1. [`ReplaceFilter`](#replacefilter-type-filter) 1. [`ShallowCopyFilter`](#shallowcopyfilter-type-filter) 1. [Edge cases](#edge-cases) 1. [Contributing](#contributing) 1. [Tests](#tests) ## How? Install with Composer: ``` composer require myclabs/deep-copy ``` Use it: ```php use DeepCopy\DeepCopy; $copier = new DeepCopy(); $myCopy = $copier->copy($myObject); ``` ## Why? - How do you create copies of your objects? ```php $myCopy = clone $myObject; ``` - How do you create **deep** copies of your objects (i.e. copying also all the objects referenced in the properties)? You use [`__clone()`](http://www.php.net/manual/en/language.oop5.cloning.php#object.clone) and implement the behavior yourself. - But how do you handle **cycles** in the association graph? Now you're in for a big mess :( ![association graph](doc/graph.png) ### Using simply `clone` ![Using clone](doc/clone.png) ### Overriding `__clone()` ![Overriding __clone](doc/deep-clone.png) ### With `DeepCopy` ![With DeepCopy](doc/deep-copy.png) ## How it works DeepCopy recursively traverses all the object's properties and clones them. To avoid cloning the same object twice it keeps a hash map of all instances and thus preserves the object graph. To use it: ```php use function DeepCopy\deep_copy; $copy = deep_copy($var); ``` Alternatively, you can create your own `DeepCopy` instance to configure it differently for example: ```php use DeepCopy\DeepCopy; $copier = new DeepCopy(true); $copy = $copier->copy($var); ``` You may want to roll your own deep copy function: ```php namespace Acme; use DeepCopy\DeepCopy; function deep_copy($var) { static $copier = null; if (null === $copier) { $copier = new DeepCopy(true); } return $copier->copy($var); } ``` ## Going further You can add filters to customize the copy process. The method to add a filter is `DeepCopy\DeepCopy::addFilter($filter, $matcher)`, with `$filter` implementing `DeepCopy\Filter\Filter` and `$matcher` implementing `DeepCopy\Matcher\Matcher`. We provide some generic filters and matchers. ### Matchers - `DeepCopy\Matcher` applies on a object attribute. - `DeepCopy\TypeMatcher` applies on any element found in graph, including array elements. #### Property name The `PropertyNameMatcher` will match a property by its name: ```php use DeepCopy\Matcher\PropertyNameMatcher; // Will apply a filter to any property of any objects named "id" $matcher = new PropertyNameMatcher('id'); ``` #### Specific property The `PropertyMatcher` will match a specific property of a specific class: ```php use DeepCopy\Matcher\PropertyMatcher; // Will apply a filter to the property "id" of any objects of the class "MyClass" $matcher = new PropertyMatcher('MyClass', 'id'); ``` #### Type The `TypeMatcher` will match any element by its type (instance of a class or any value that could be parameter of [gettype()](http://php.net/manual/en/function.gettype.php) function): ```php use DeepCopy\TypeMatcher\TypeMatcher; // Will apply a filter to any object that is an instance of Doctrine\Common\Collections\Collection $matcher = new TypeMatcher('Doctrine\Common\Collections\Collection'); ``` ### Filters - `DeepCopy\Filter` applies a transformation to the object attribute matched by `DeepCopy\Matcher` - `DeepCopy\TypeFilter` applies a transformation to any element matched by `DeepCopy\TypeMatcher` By design, matching a filter will stop the chain of filters (i.e. the next ones will not be applied). Using the ([`ChainableFilter`](#chainablefilter-filter)) won't stop the chain of filters. #### `SetNullFilter` (filter) Let's say for example that you are copying a database record (or a Doctrine entity), so you want the copy not to have any ID: ```php use DeepCopy\DeepCopy; use DeepCopy\Filter\SetNullFilter; use DeepCopy\Matcher\PropertyNameMatcher; $object = MyClass::load(123); echo $object->id; // 123 $copier = new DeepCopy(); $copier->addFilter(new SetNullFilter(), new PropertyNameMatcher('id')); $copy = $copier->copy($object); echo $copy->id; // null ``` #### `KeepFilter` (filter) If you want a property to remain untouched (for example, an association to an object): ```php use DeepCopy\DeepCopy; use DeepCopy\Filter\KeepFilter; use DeepCopy\Matcher\PropertyMatcher; $copier = new DeepCopy(); $copier->addFilter(new KeepFilter(), new PropertyMatcher('MyClass', 'category')); $copy = $copier->copy($object); // $copy->category has not been touched ``` #### `ChainableFilter` (filter) If you use cloning on proxy classes, you might want to apply two filters for: 1. loading the data 2. applying a transformation You can use the `ChainableFilter` as a decorator of the proxy loader filter, which won't stop the chain of filters (i.e. the next ones may be applied). ```php use DeepCopy\DeepCopy; use DeepCopy\Filter\ChainableFilter; use DeepCopy\Filter\Doctrine\DoctrineProxyFilter; use DeepCopy\Filter\SetNullFilter; use DeepCopy\Matcher\Doctrine\DoctrineProxyMatcher; use DeepCopy\Matcher\PropertyNameMatcher; $copier = new DeepCopy(); $copier->addFilter(new ChainableFilter(new DoctrineProxyFilter()), new DoctrineProxyMatcher()); $copier->addFilter(new SetNullFilter(), new PropertyNameMatcher('id')); $copy = $copier->copy($object); echo $copy->id; // null ``` #### `DoctrineCollectionFilter` (filter) If you use Doctrine and want to copy an entity, you will need to use the `DoctrineCollectionFilter`: ```php use DeepCopy\DeepCopy; use DeepCopy\Filter\Doctrine\DoctrineCollectionFilter; use DeepCopy\Matcher\PropertyTypeMatcher; $copier = new DeepCopy(); $copier->addFilter(new DoctrineCollectionFilter(), new PropertyTypeMatcher('Doctrine\Common\Collections\Collection')); $copy = $copier->copy($object); ``` #### `DoctrineEmptyCollectionFilter` (filter) If you use Doctrine and want to copy an entity who contains a `Collection` that you want to be reset, you can use the `DoctrineEmptyCollectionFilter` ```php use DeepCopy\DeepCopy; use DeepCopy\Filter\Doctrine\DoctrineEmptyCollectionFilter; use DeepCopy\Matcher\PropertyMatcher; $copier = new DeepCopy(); $copier->addFilter(new DoctrineEmptyCollectionFilter(), new PropertyMatcher('MyClass', 'myProperty')); $copy = $copier->copy($object); // $copy->myProperty will return an empty collection ``` #### `DoctrineProxyFilter` (filter) If you use Doctrine and use cloning on lazy loaded entities, you might encounter errors mentioning missing fields on a Doctrine proxy class (...\\\_\_CG\_\_\Proxy). You can use the `DoctrineProxyFilter` to load the actual entity behind the Doctrine proxy class. **Make sure, though, to put this as one of your very first filters in the filter chain so that the entity is loaded before other filters are applied!** We recommend to decorate the `DoctrineProxyFilter` with the `ChainableFilter` to allow applying other filters to the cloned lazy loaded entities. ```php use DeepCopy\DeepCopy; use DeepCopy\Filter\Doctrine\DoctrineProxyFilter; use DeepCopy\Matcher\Doctrine\DoctrineProxyMatcher; $copier = new DeepCopy(); $copier->addFilter(new ChainableFilter(new DoctrineProxyFilter()), new DoctrineProxyMatcher()); $copy = $copier->copy($object); // $copy should now contain a clone of all entities, including those that were not yet fully loaded. ``` #### `ReplaceFilter` (type filter) 1. If you want to replace the value of a property: ```php use DeepCopy\DeepCopy; use DeepCopy\Filter\ReplaceFilter; use DeepCopy\Matcher\PropertyMatcher; $copier = new DeepCopy(); $callback = function ($currentValue) { return $currentValue . ' (copy)' }; $copier->addFilter(new ReplaceFilter($callback), new PropertyMatcher('MyClass', 'title')); $copy = $copier->copy($object); // $copy->title will contain the data returned by the callback, e.g. 'The title (copy)' ``` 2. If you want to replace whole element: ```php use DeepCopy\DeepCopy; use DeepCopy\TypeFilter\ReplaceFilter; use DeepCopy\TypeMatcher\TypeMatcher; $copier = new DeepCopy(); $callback = function (MyClass $myClass) { return get_class($myClass); }; $copier->addTypeFilter(new ReplaceFilter($callback), new TypeMatcher('MyClass')); $copy = $copier->copy([new MyClass, 'some string', new MyClass]); // $copy will contain ['MyClass', 'some string', 'MyClass'] ``` The `$callback` parameter of the `ReplaceFilter` constructor accepts any PHP callable. #### `ShallowCopyFilter` (type filter) Stop *DeepCopy* from recursively copying element, using standard `clone` instead: ```php use DeepCopy\DeepCopy; use DeepCopy\TypeFilter\ShallowCopyFilter; use DeepCopy\TypeMatcher\TypeMatcher; use Mockery as m; $this->deepCopy = new DeepCopy(); $this->deepCopy->addTypeFilter( new ShallowCopyFilter, new TypeMatcher(m\MockInterface::class) ); $myServiceWithMocks = new MyService(m::mock(MyDependency1::class), m::mock(MyDependency2::class)); // All mocks will be just cloned, not deep copied ``` ## Edge cases The following structures cannot be deep-copied with PHP Reflection. As a result they are shallow cloned and filters are not applied. There is two ways for you to handle them: - Implement your own `__clone()` method - Use a filter with a type matcher ## Contributing DeepCopy is distributed under the MIT license. ### Tests Running the tests is simple: ```php vendor/bin/phpunit ``` ### Support Get professional support via [the Tidelift Subscription](https://tidelift.com/subscription/pkg/packagist-myclabs-deep-copy?utm_source=packagist-myclabs-deep-copy&utm_medium=referral&utm_campaign=readme). PK!Ê­Ë„55Rfile-manager-advanced/application/svg-sanitizer/includes/myclabs/deep-copy/LICENSEnu„[µü¤The MIT License (MIT) Copyright (c) 2013 My C-Sense Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. PK!í®™v&&bfile-manager-advanced/application/svg-sanitizer/includes/doctrine/instantiator/docs/en/sidebar.rstnu„[µü¤.. toctree:: :depth: 3 index PK!HXƒßß`file-manager-advanced/application/svg-sanitizer/includes/doctrine/instantiator/docs/en/index.rstnu„[µü¤Introduction ============ This library provides a way of avoiding usage of constructors when instantiating PHP classes. Installation ============ The suggested installation method is via `composer`_: .. code-block:: console $ composer require doctrine/instantiator Usage ===== The instantiator is able to create new instances of any class without using the constructor or any API of the class itself: .. code-block:: php instantiate(User::class); Contributing ============ - Follow the `Doctrine Coding Standard`_ - The project will follow strict `object calisthenics`_ - Any contribution must provide tests for additional introduced conditions - Any un-confirmed issue needs a failing test case before being accepted - Pull requests must be sent from a new hotfix/feature branch, not from ``master``. Testing ======= The PHPUnit version to be used is the one installed as a dev- dependency via composer: .. code-block:: console $ ./vendor/bin/phpunit Accepted coverage for new contributions is 80%. Any contribution not satisfying this requirement won’t be merged. Credits ======= This library was migrated from `ocramius/instantiator`_, which has been donated to the doctrine organization, and which is now deprecated in favour of this package. .. _composer: https://getcomposer.org/ .. _CONTRIBUTING.md: CONTRIBUTING.md .. _ocramius/instantiator: https://github.com/Ocramius/Instantiator .. _Doctrine Coding Standard: https://github.com/doctrine/coding-standard .. _object calisthenics: http://www.slideshare.net/guilhermeblanco/object-calisthenics-applied-to-php PK!Éô�wÑÑXfile-manager-advanced/application/svg-sanitizer/includes/doctrine/instantiator/psalm.xmlnu„[µü¤ PK!Ïó�\file-manager-advanced/application/svg-sanitizer/includes/doctrine/instantiator/composer.jsonnu„[µü¤{ "name": "doctrine/instantiator", "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", "type": "library", "license": "MIT", "homepage": "https://www.doctrine-project.org/projects/instantiator.html", "keywords": [ "instantiate", "constructor" ], "authors": [ { "name": "Marco Pivetta", "email": "ocramius@gmail.com", "homepage": "https://ocramius.github.io/" } ], "require": { "php": "^7.1 || ^8.0" }, "require-dev": { "ext-phar": "*", "ext-pdo": "*", "doctrine/coding-standard": "^9 || ^11", "phpbench/phpbench": "^0.16 || ^1", "phpstan/phpstan": "^1.4", "phpstan/phpstan-phpunit": "^1", "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", "vimeo/psalm": "^4.30 || ^5.4" }, "autoload": { "psr-4": { "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/" } }, "autoload-dev": { "psr-0": { "DoctrineTest\\InstantiatorPerformance\\": "tests", "DoctrineTest\\InstantiatorTest\\": "tests", "DoctrineTest\\InstantiatorTestAsset\\": "tests" } }, "config": { "allow-plugins": { "dealerdirect/phpcodesniffer-composer-installer": true } } } PK!ÅÇ.Uýý‚file-manager-advanced/application/svg-sanitizer/includes/doctrine/instantiator/src/Doctrine/Instantiator/InstantiatorInterface.phpnu„[µü¤ $className * * @return object * @phpstan-return T * * @throws ExceptionInterface * * @template T of object */ public function instantiate($className); } PK!ãfšÀÀ‰file-manager-advanced/application/svg-sanitizer/includes/doctrine/instantiator/src/Doctrine/Instantiator/Exception/ExceptionInterface.phpnu„[µü¤ $reflectionClass * * @template T of object */ public static function fromSerializationTriggeredException( ReflectionClass $reflectionClass, Exception $exception ): self { return new self( sprintf( 'An exception was raised while trying to instantiate an instance of "%s" via un-serialization', $reflectionClass->getName() ), 0, $exception ); } /** * @phpstan-param ReflectionClass $reflectionClass * * @template T of object */ public static function fromUncleanUnSerialization( ReflectionClass $reflectionClass, string $errorString, int $errorCode, string $errorFile, int $errorLine ): self { return new self( sprintf( 'Could not produce an instance of "%s" via un-serialization, since an error was triggered ' . 'in file "%s" at line "%d"', $reflectionClass->getName(), $errorFile, $errorLine ), 0, new Exception($errorString, $errorCode) ); } } PK!$û8ôØØ�file-manager-advanced/application/svg-sanitizer/includes/doctrine/instantiator/src/Doctrine/Instantiator/Exception/InvalidArgumentException.phpnu„[µü¤ $reflectionClass * * @template T of object */ public static function fromAbstractClass(ReflectionClass $reflectionClass): self { return new self(sprintf( 'The provided class "%s" is abstract, and cannot be instantiated', $reflectionClass->getName() )); } public static function fromEnum(string $className): self { return new self(sprintf( 'The provided class "%s" is an enum, and cannot be instantiated', $className )); } } PK!yaÝ’’yfile-manager-advanced/application/svg-sanitizer/includes/doctrine/instantiator/src/Doctrine/Instantiator/Instantiator.phpnu„[µü¤ $className * * @return object * @phpstan-return T * * @throws ExceptionInterface * * @template T of object */ public function instantiate($className) { if (isset(self::$cachedCloneables[$className])) { /** @phpstan-var T */ $cachedCloneable = self::$cachedCloneables[$className]; return clone $cachedCloneable; } if (isset(self::$cachedInstantiators[$className])) { $factory = self::$cachedInstantiators[$className]; return $factory(); } return $this->buildAndCacheFromFactory($className); } /** * Builds the requested object and caches it in static properties for performance * * @phpstan-param class-string $className * * @return object * @phpstan-return T * * @template T of object */ private function buildAndCacheFromFactory(string $className) { $factory = self::$cachedInstantiators[$className] = $this->buildFactory($className); $instance = $factory(); if ($this->isSafeToClone(new ReflectionClass($instance))) { self::$cachedCloneables[$className] = clone $instance; } return $instance; } /** * Builds a callable capable of instantiating the given $className without * invoking its constructor. * * @phpstan-param class-string $className * * @phpstan-return callable(): T * * @throws InvalidArgumentException * @throws UnexpectedValueException * @throws ReflectionException * * @template T of object */ private function buildFactory(string $className): callable { $reflectionClass = $this->getReflectionClass($className); if ($this->isInstantiableViaReflection($reflectionClass)) { return [$reflectionClass, 'newInstanceWithoutConstructor']; } $serializedString = sprintf( '%s:%d:"%s":0:{}', is_subclass_of($className, Serializable::class) ? self::SERIALIZATION_FORMAT_USE_UNSERIALIZER : self::SERIALIZATION_FORMAT_AVOID_UNSERIALIZER, strlen($className), $className ); $this->checkIfUnSerializationIsSupported($reflectionClass, $serializedString); return static function () use ($serializedString) { return unserialize($serializedString); }; } /** * @phpstan-param class-string $className * * @phpstan-return ReflectionClass * * @throws InvalidArgumentException * @throws ReflectionException * * @template T of object */ private function getReflectionClass(string $className): ReflectionClass { if (! class_exists($className)) { throw InvalidArgumentException::fromNonExistingClass($className); } if (PHP_VERSION_ID >= 80100 && enum_exists($className, false)) { throw InvalidArgumentException::fromEnum($className); } $reflection = new ReflectionClass($className); if ($reflection->isAbstract()) { throw InvalidArgumentException::fromAbstractClass($reflection); } return $reflection; } /** * @phpstan-param ReflectionClass $reflectionClass * * @throws UnexpectedValueException * * @template T of object */ private function checkIfUnSerializationIsSupported(ReflectionClass $reflectionClass, string $serializedString): void { set_error_handler(static function (int $code, string $message, string $file, int $line) use ($reflectionClass, &$error): bool { $error = UnexpectedValueException::fromUncleanUnSerialization( $reflectionClass, $message, $code, $file, $line ); return true; }); try { $this->attemptInstantiationViaUnSerialization($reflectionClass, $serializedString); } finally { restore_error_handler(); } if ($error) { throw $error; } } /** * @phpstan-param ReflectionClass $reflectionClass * * @throws UnexpectedValueException * * @template T of object */ private function attemptInstantiationViaUnSerialization(ReflectionClass $reflectionClass, string $serializedString): void { try { unserialize($serializedString); } catch (Exception $exception) { throw UnexpectedValueException::fromSerializationTriggeredException($reflectionClass, $exception); } } /** * @phpstan-param ReflectionClass $reflectionClass * * @template T of object */ private function isInstantiableViaReflection(ReflectionClass $reflectionClass): bool { return ! ($this->hasInternalAncestors($reflectionClass) && $reflectionClass->isFinal()); } /** * Verifies whether the given class is to be considered internal * * @phpstan-param ReflectionClass $reflectionClass * * @template T of object */ private function hasInternalAncestors(ReflectionClass $reflectionClass): bool { do { if ($reflectionClass->isInternal()) { return true; } $reflectionClass = $reflectionClass->getParentClass(); } while ($reflectionClass); return false; } /** * Checks if a class is cloneable * * Classes implementing `__clone` cannot be safely cloned, as that may cause side-effects. * * @phpstan-param ReflectionClass $reflectionClass * * @template T of object */ private function isSafeToClone(ReflectionClass $reflectionClass): bool { return $reflectionClass->isCloneable() && ! $reflectionClass->hasMethod('__clone') && ! $reflectionClass->isSubclassOf(ArrayIterator::class); } } PK!‡4@++Xfile-manager-advanced/application/svg-sanitizer/includes/doctrine/instantiator/README.mdnu„[µü¤# Instantiator This library provides a way of avoiding usage of constructors when instantiating PHP classes. [![Build Status](https://travis-ci.org/doctrine/instantiator.svg?branch=master)](https://travis-ci.org/doctrine/instantiator) [![Code Coverage](https://codecov.io/gh/doctrine/instantiator/branch/master/graph/badge.svg)](https://codecov.io/gh/doctrine/instantiator/branch/master) [![Dependency Status](https://www.versioneye.com/package/php--doctrine--instantiator/badge.svg)](https://www.versioneye.com/package/php--doctrine--instantiator) [![Latest Stable Version](https://poser.pugx.org/doctrine/instantiator/v/stable.png)](https://packagist.org/packages/doctrine/instantiator) [![Latest Unstable Version](https://poser.pugx.org/doctrine/instantiator/v/unstable.png)](https://packagist.org/packages/doctrine/instantiator) ## Installation The suggested installation method is via [composer](https://getcomposer.org/): ```sh composer require doctrine/instantiator ``` ## Usage The instantiator is able to create new instances of any class without using the constructor or any API of the class itself: ```php $instantiator = new \Doctrine\Instantiator\Instantiator(); $instance = $instantiator->instantiate(\My\ClassName\Here::class); ``` ## Contributing Please read the [CONTRIBUTING.md](CONTRIBUTING.md) contents if you wish to help out! ## Credits This library was migrated from [ocramius/instantiator](https://github.com/Ocramius/Instantiator), which has been donated to the doctrine organization, and which is now deprecated in favour of this package. PK! Í‚å$$Vfile-manager-advanced/application/svg-sanitizer/includes/doctrine/instantiator/LICENSEnu„[µü¤Copyright (c) 2014 Doctrine Project Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. PK!êﻦ^file-manager-advanced/application/svg-sanitizer/includes/doctrine/instantiator/CONTRIBUTING.mdnu„[µü¤# Contributing * Follow the [Doctrine Coding Standard](https://github.com/doctrine/coding-standard) * The project will follow strict [object calisthenics](http://www.slideshare.net/guilhermeblanco/object-calisthenics-applied-to-php) * Any contribution must provide tests for additional introduced conditions * Any un-confirmed issue needs a failing test case before being accepted * Pull requests must be sent from a new hotfix/feature branch, not from `master`. ## Installation To install the project and run the tests, you need to clone it first: ```sh $ git clone git://github.com/doctrine/instantiator.git ``` You will then need to run a composer installation: ```sh $ cd Instantiator $ curl -s https://getcomposer.org/installer | php $ php composer.phar update ``` ## Testing The PHPUnit version to be used is the one installed as a dev- dependency via composer: ```sh $ ./vendor/bin/phpunit ``` Accepted coverage for new contributions is 80%. Any contribution not satisfying this requirement won't be merged. PK!xxdefile-manager-advanced/application/svg-sanitizer/includes/doctrine/instantiator/.doctrine-project.jsonnu„[µü¤{ "active": true, "name": "Instantiator", "slug": "instantiator", "docsSlug": "doctrine-instantiator", "codePath": "/src", "versions": [ { "name": "1.5", "branchName": "1.5.x", "slug": "latest", "upcoming": true }, { "name": "1.4", "branchName": "1.4.x", "slug": "1.4", "aliases": [ "current", "stable" ], "maintained": true, "current": true }, { "name": "1.3", "branchName": "1.3.x", "slug": "1.3", "maintained": false }, { "name": "1.2", "branchName": "1.2.x", "slug": "1.2" }, { "name": "1.1", "branchName": "1.1.x", "slug": "1.1" }, { "name": "1.0", "branchName": "1.0.x", "slug": "1.0" } ] } PK!ö­ Efile-manager-advanced/application/svg-sanitizer/includes/autoload.phpnu„[µü¤=7.1" }, "require-dev": { "phpunit/phpunit": "^8.5" }, "autoload": { "classmap": [ "src/" ] }, "extra": { "branch-alias": { "dev-master": "2.0.x-dev" } } } PK!$*Ÿ�… … _file-manager-advanced/application/svg-sanitizer/includes/phpunit/php-file-iterator/ChangeLog.mdnu„[µü¤# Change Log All notable changes to this project will be documented in this file. This project adheres to [Semantic Versioning](http://semver.org/). ## [2.0.6] - 2024-03-01 * No code changes, only updated `.gitattributes` to not export non-essential files. ## [2.0.5] - 2021-12-02 ### Changed * [#73](https://github.com/sebastianbergmann/php-file-iterator/pull/73): Micro performance improvements on parsing paths ### Fixed * [#74](https://github.com/sebastianbergmann/php-file-iterator/pull/74): Document return type of `SebastianBergmann\FileIterator\Iterator::accept()` so that Symfony's `DebugClassLoader` does not trigger a deprecation warning ## [2.0.4] - 2021-07-19 ### Changed * Added `ReturnTypeWillChange` attribute to `SebastianBergmann\FileIterator\Iterator::accept()` because the return type of `\FilterIterator::accept()` will change in PHP 8.1 ## [2.0.3] - 2020-11-30 ### Changed * Changed PHP version constraint in `composer.json` from `^7.1` to `>=7.1` ## [2.0.2] - 2018-09-13 ### Fixed * [#48](https://github.com/sebastianbergmann/php-file-iterator/issues/48): Excluding an array that contains false ends up excluding the current working directory ## [2.0.1] - 2018-06-11 ### Fixed * [#46](https://github.com/sebastianbergmann/php-file-iterator/issues/46): Regression with hidden parent directory ## [2.0.0] - 2018-05-28 ### Fixed * [#30](https://github.com/sebastianbergmann/php-file-iterator/issues/30): Exclude is not considered if it is a parent of the base path ### Changed * This component now uses namespaces ### Removed * This component is no longer supported on PHP 5.3, PHP 5.4, PHP 5.5, PHP 5.6, and PHP 7.0 ## [1.4.5] - 2017-11-27 ### Fixed * [#37](https://github.com/sebastianbergmann/php-file-iterator/issues/37): Regression caused by fix for [#30](https://github.com/sebastianbergmann/php-file-iterator/issues/30) ## [1.4.4] - 2017-11-27 ### Fixed * [#30](https://github.com/sebastianbergmann/php-file-iterator/issues/30): Exclude is not considered if it is a parent of the base path ## [1.4.3] - 2017-11-25 ### Fixed * [#34](https://github.com/sebastianbergmann/php-file-iterator/issues/34): Factory should use canonical directory names ## [1.4.2] - 2016-11-26 No changes ## [1.4.1] - 2015-07-26 No changes ## 1.4.0 - 2015-04-02 ### Added * [Added support for wildcards (glob) in exclude](https://github.com/sebastianbergmann/php-file-iterator/pull/23) [2.0.6]: https://github.com/sebastianbergmann/php-file-iterator/compare/2.0.5...2.0.6 [2.0.5]: https://github.com/sebastianbergmann/php-file-iterator/compare/2.0.4...2.0.5 [2.0.4]: https://github.com/sebastianbergmann/php-file-iterator/compare/2.0.3...2.0.4 [2.0.3]: https://github.com/sebastianbergmann/php-file-iterator/compare/2.0.2...2.0.3 [2.0.2]: https://github.com/sebastianbergmann/php-file-iterator/compare/2.0.1...2.0.2 [2.0.1]: https://github.com/sebastianbergmann/php-file-iterator/compare/2.0.0...2.0.1 [2.0.0]: https://github.com/sebastianbergmann/php-file-iterator/compare/1.4...2.0.0 [1.4.5]: https://github.com/sebastianbergmann/php-file-iterator/compare/1.4.4...1.4.5 [1.4.4]: https://github.com/sebastianbergmann/php-file-iterator/compare/1.4.3...1.4.4 [1.4.3]: https://github.com/sebastianbergmann/php-file-iterator/compare/1.4.2...1.4.3 [1.4.2]: https://github.com/sebastianbergmann/php-file-iterator/compare/1.4.1...1.4.2 [1.4.1]: https://github.com/sebastianbergmann/php-file-iterator/compare/1.4.0...1.4.1 PK!k*¯Ìø ø afile-manager-advanced/application/svg-sanitizer/includes/phpunit/php-file-iterator/src/Facade.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace SebastianBergmann\FileIterator; class Facade { /** * @param array|string $paths * @param array|string $suffixes * @param array|string $prefixes * @param array $exclude * @param bool $commonPath * * @return array */ public function getFilesAsArray($paths, $suffixes = '', $prefixes = '', array $exclude = [], bool $commonPath = false): array { if (\is_string($paths)) { $paths = [$paths]; } $factory = new Factory; $iterator = $factory->getFileIterator($paths, $suffixes, $prefixes, $exclude); $files = []; foreach ($iterator as $file) { $file = $file->getRealPath(); if ($file) { $files[] = $file; } } foreach ($paths as $path) { if (\is_file($path)) { $files[] = \realpath($path); } } $files = \array_unique($files); \sort($files); if ($commonPath) { return [ 'commonPath' => $this->getCommonPath($files), 'files' => $files ]; } return $files; } protected function getCommonPath(array $files): string { $count = \count($files); if ($count === 0) { return ''; } if ($count === 1) { return \dirname($files[0]) . DIRECTORY_SEPARATOR; } $_files = []; foreach ($files as $file) { $_files[] = $_fileParts = \explode(DIRECTORY_SEPARATOR, $file); if (empty($_fileParts[0])) { $_fileParts[0] = DIRECTORY_SEPARATOR; } } $common = ''; $done = false; $j = 0; $count--; while (!$done) { for ($i = 0; $i < $count; $i++) { if ($_files[$i][$j] != $_files[$i + 1][$j]) { $done = true; break; } } if (!$done) { $common .= $_files[0][$j]; if ($j > 0) { $common .= DIRECTORY_SEPARATOR; } } $j++; } return DIRECTORY_SEPARATOR . $common; } } PK!lODR R cfile-manager-advanced/application/svg-sanitizer/includes/phpunit/php-file-iterator/src/Iterator.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace SebastianBergmann\FileIterator; class Iterator extends \FilterIterator { const PREFIX = 0; const SUFFIX = 1; /** * @var string */ private $basePath; /** * @var array */ private $suffixes = []; /** * @var array */ private $prefixes = []; /** * @var array */ private $exclude = []; /** * @param string $basePath * @param \Iterator $iterator * @param array $suffixes * @param array $prefixes * @param array $exclude */ public function __construct(string $basePath, \Iterator $iterator, array $suffixes = [], array $prefixes = [], array $exclude = []) { $this->basePath = \realpath($basePath); $this->prefixes = $prefixes; $this->suffixes = $suffixes; $this->exclude = \array_filter(\array_map('realpath', $exclude)); parent::__construct($iterator); } /** * @return bool */ #[\ReturnTypeWillChange] public function accept() { $current = $this->getInnerIterator()->current(); $filename = $current->getFilename(); $realPath = $current->getRealPath(); return $this->acceptPath($realPath) && $this->acceptPrefix($filename) && $this->acceptSuffix($filename); } private function acceptPath(string $path): bool { // Filter files in hidden directories by checking path that is relative to the base path. if (\preg_match('=/\.[^/]*/=', \str_replace($this->basePath, '', $path))) { return false; } foreach ($this->exclude as $exclude) { if (\strpos($path, $exclude) === 0) { return false; } } return true; } private function acceptPrefix(string $filename): bool { return $this->acceptSubString($filename, $this->prefixes, self::PREFIX); } private function acceptSuffix(string $filename): bool { return $this->acceptSubString($filename, $this->suffixes, self::SUFFIX); } private function acceptSubString(string $filename, array $subStrings, int $type): bool { if (empty($subStrings)) { return true; } $matched = false; foreach ($subStrings as $string) { if (($type === self::PREFIX && \strpos($filename, $string) === 0) || ($type === self::SUFFIX && \substr($filename, -1 * \strlen($string)) === $string)) { $matched = true; break; } } return $matched; } } PK!üÊcëëbfile-manager-advanced/application/svg-sanitizer/includes/phpunit/php-file-iterator/src/Factory.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace SebastianBergmann\FileIterator; class Factory { /** * @param array|string $paths * @param array|string $suffixes * @param array|string $prefixes * @param array $exclude * * @return \AppendIterator */ public function getFileIterator($paths, $suffixes = '', $prefixes = '', array $exclude = []): \AppendIterator { if (\is_string($paths)) { $paths = [$paths]; } $paths = $this->getPathsAfterResolvingWildcards($paths); $exclude = $this->getPathsAfterResolvingWildcards($exclude); if (\is_string($prefixes)) { if ($prefixes !== '') { $prefixes = [$prefixes]; } else { $prefixes = []; } } if (\is_string($suffixes)) { if ($suffixes !== '') { $suffixes = [$suffixes]; } else { $suffixes = []; } } $iterator = new \AppendIterator; foreach ($paths as $path) { if (\is_dir($path)) { $iterator->append( new Iterator( $path, new \RecursiveIteratorIterator( new \RecursiveDirectoryIterator($path, \RecursiveDirectoryIterator::FOLLOW_SYMLINKS | \RecursiveDirectoryIterator::SKIP_DOTS) ), $suffixes, $prefixes, $exclude ) ); } } return $iterator; } protected function getPathsAfterResolvingWildcards(array $paths): array { $_paths = [[]]; foreach ($paths as $path) { if ($locals = \glob($path, GLOB_ONLYDIR)) { $_paths[] = \array_map('\realpath', $locals); } else { $_paths[] = [\realpath($path)]; } } return \array_filter(\array_merge(...$_paths)); } } PK!"õä“;;\file-manager-advanced/application/svg-sanitizer/includes/phpunit/php-file-iterator/README.mdnu„[µü¤[![Build Status](https://travis-ci.org/sebastianbergmann/php-file-iterator.svg?branch=master)](https://travis-ci.org/sebastianbergmann/php-file-iterator) # php-file-iterator ## Installation You can add this library as a local, per-project dependency to your project using [Composer](https://getcomposer.org/): composer require phpunit/php-file-iterator If you only need this library during development, for instance to run your project's test suite, then you should add it as a development-time dependency: composer require --dev phpunit/php-file-iterator PK!JßU(Zfile-manager-advanced/application/svg-sanitizer/includes/phpunit/php-file-iterator/LICENSEnu„[µü¤php-file-iterator Copyright (c) 2009-2018, Sebastian Bergmann . All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. * Neither the name of Sebastian Bergmann nor the names of his contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. PK!ìý›n‚‚Xfile-manager-advanced/application/svg-sanitizer/includes/phpunit/php-timer/composer.jsonnu„[µü¤{ "name": "phpunit/php-timer", "description": "Utility class for timing", "type": "library", "keywords": [ "timer" ], "homepage": "https://github.com/sebastianbergmann/php-timer/", "license": "BSD-3-Clause", "authors": [ { "name": "Sebastian Bergmann", "email": "sebastian@phpunit.de", "role": "lead" } ], "support": { "issues": "https://github.com/sebastianbergmann/php-timer/issues" }, "prefer-stable": true, "require": { "php": ">=7.1" }, "require-dev": { "phpunit/phpunit": "^8.5" }, "config": { "optimize-autoloader": true, "sort-packages": true }, "autoload": { "classmap": [ "src/" ] }, "extra": { "branch-alias": { "dev-master": "2.1-dev" } } } PK!ÙjrNNWfile-manager-advanced/application/svg-sanitizer/includes/phpunit/php-timer/ChangeLog.mdnu„[µü¤# ChangeLog All notable changes are documented in this file using the [Keep a CHANGELOG](http://keepachangelog.com/) principles. ## [2.1.4] - 2024-03-01 * No code changes, only updated `.gitattributes` to not export non-essential files. ## [2.1.3] - 2020-11-30 ### Changed * Changed PHP version constraint in `composer.json` from `^7.1` to `>=7.1` ## [2.1.2] - 2019-06-07 ### Fixed * Fixed [#21](https://github.com/sebastianbergmann/php-timer/pull/3352): Formatting of memory consumption does not work on 32bit systems ## [2.1.1] - 2019-02-20 ### Changed * Improved formatting of memory consumption for `resourceUsage()` ## [2.1.0] - 2019-02-20 ### Changed * Improved formatting of memory consumption for `resourceUsage()` ## [2.0.0] - 2018-02-01 ### Changed * This component now uses namespaces ### Removed * This component is no longer supported on PHP 5.3, PHP 5.4, PHP 5.5, PHP 5.6, and PHP 7.0 [2.1.4]: https://github.com/sebastianbergmann/diff/compare/2.1.3...2.1.4 [2.1.3]: https://github.com/sebastianbergmann/diff/compare/2.1.2...2.1.3 [2.1.2]: https://github.com/sebastianbergmann/diff/compare/2.1.1...2.1.2 [2.1.1]: https://github.com/sebastianbergmann/diff/compare/2.1.0...2.1.1 [2.1.0]: https://github.com/sebastianbergmann/diff/compare/2.0.0...2.1.0 [2.0.0]: https://github.com/sebastianbergmann/diff/compare/1.0.9...2.0.0 PK!:´·(¿ ¿ Xfile-manager-advanced/application/svg-sanitizer/includes/phpunit/php-timer/src/Timer.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace SebastianBergmann\Timer; final class Timer { /** * @var int[] */ private static $sizes = [ 'GB' => 1073741824, 'MB' => 1048576, 'KB' => 1024, ]; /** * @var int[] */ private static $times = [ 'hour' => 3600000, 'minute' => 60000, 'second' => 1000, ]; /** * @var float[] */ private static $startTimes = []; public static function start(): void { self::$startTimes[] = \microtime(true); } public static function stop(): float { return \microtime(true) - \array_pop(self::$startTimes); } public static function bytesToString(float $bytes): string { foreach (self::$sizes as $unit => $value) { if ($bytes >= $value) { return \sprintf('%.2f %s', $bytes >= 1024 ? $bytes / $value : $bytes, $unit); } } return $bytes . ' byte' . ((int) $bytes !== 1 ? 's' : ''); } public static function secondsToTimeString(float $time): string { $ms = \round($time * 1000); foreach (self::$times as $unit => $value) { if ($ms >= $value) { $time = \floor($ms / $value * 100.0) / 100.0; return $time . ' ' . ($time == 1 ? $unit : $unit . 's'); } } return $ms . ' ms'; } /** * @throws RuntimeException */ public static function timeSinceStartOfRequest(): string { if (isset($_SERVER['REQUEST_TIME_FLOAT'])) { $startOfRequest = $_SERVER['REQUEST_TIME_FLOAT']; } elseif (isset($_SERVER['REQUEST_TIME'])) { $startOfRequest = $_SERVER['REQUEST_TIME']; } else { throw new RuntimeException('Cannot determine time at which the request started'); } return self::secondsToTimeString(\microtime(true) - $startOfRequest); } /** * @throws RuntimeException */ public static function resourceUsage(): string { return \sprintf( 'Time: %s, Memory: %s', self::timeSinceStartOfRequest(), self::bytesToString(\memory_get_peak_usage(true)) ); } } PK!›%ïå{{cfile-manager-advanced/application/svg-sanitizer/includes/phpunit/php-timer/src/RuntimeException.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace SebastianBergmann\Timer; final class RuntimeException extends \RuntimeException implements Exception { } PK!/u“CC\file-manager-advanced/application/svg-sanitizer/includes/phpunit/php-timer/src/Exception.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace SebastianBergmann\Timer; interface Exception { } PK! v->>Tfile-manager-advanced/application/svg-sanitizer/includes/phpunit/php-timer/README.mdnu„[µü¤[![Build Status](https://travis-ci.org/sebastianbergmann/php-timer.svg?branch=master)](https://travis-ci.org/sebastianbergmann/php-timer) # phpunit/php-timer Utility class for timing things, factored out of PHPUnit into a stand-alone component. ## Installation You can add this library as a local, per-project dependency to your project using [Composer](https://getcomposer.org/): composer require phpunit/php-timer If you only need this library during development, for instance to run your project's test suite, then you should add it as a development-time dependency: composer require --dev phpunit/php-timer ## Usage ### Basic Timing ```php use SebastianBergmann\Timer\Timer; Timer::start(); // ... $time = Timer::stop(); var_dump($time); print Timer::secondsToTimeString($time); ``` The code above yields the output below: double(1.0967254638672E-5) 0 ms ### Resource Consumption Since PHP Startup ```php use SebastianBergmann\Timer\Timer; print Timer::resourceUsage(); ``` The code above yields the output below: Time: 0 ms, Memory: 0.50MB PK!]UtŽRfile-manager-advanced/application/svg-sanitizer/includes/phpunit/php-timer/LICENSEnu„[µü¤phpunit/php-timer Copyright (c) 2010-2019, Sebastian Bergmann . All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. * Neither the name of Sebastian Bergmann nor the names of his contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. PK!rsXafile-manager-advanced/application/svg-sanitizer/includes/phpunit/php-text-template/.gitattributesnu„[µü¤*.php diff=php PK!&à{Ö��`file-manager-advanced/application/svg-sanitizer/includes/phpunit/php-text-template/composer.jsonnu„[µü¤{ "name": "phpunit/php-text-template", "description": "Simple template engine.", "type": "library", "keywords": [ "template" ], "homepage": "https://github.com/sebastianbergmann/php-text-template/", "license": "BSD-3-Clause", "authors": [ { "name": "Sebastian Bergmann", "email": "sebastian@phpunit.de", "role": "lead" } ], "support": { "issues": "https://github.com/sebastianbergmann/php-text-template/issues" }, "require": { "php": ">=5.3.3" }, "autoload": { "classmap": [ "src/" ] } } PK!¯w4¯” ” cfile-manager-advanced/application/svg-sanitizer/includes/phpunit/php-text-template/src/Template.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ /** * A simple template engine. * * @since Class available since Release 1.0.0 */ class Text_Template { /** * @var string */ protected $template = ''; /** * @var string */ protected $openDelimiter = '{'; /** * @var string */ protected $closeDelimiter = '}'; /** * @var array */ protected $values = array(); /** * Constructor. * * @param string $file * @throws InvalidArgumentException */ public function __construct($file = '', $openDelimiter = '{', $closeDelimiter = '}') { $this->setFile($file); $this->openDelimiter = $openDelimiter; $this->closeDelimiter = $closeDelimiter; } /** * Sets the template file. * * @param string $file * @throws InvalidArgumentException */ public function setFile($file) { $distFile = $file . '.dist'; if (file_exists($file)) { $this->template = file_get_contents($file); } else if (file_exists($distFile)) { $this->template = file_get_contents($distFile); } else { throw new InvalidArgumentException( 'Template file could not be loaded.' ); } } /** * Sets one or more template variables. * * @param array $values * @param bool $merge */ public function setVar(array $values, $merge = TRUE) { if (!$merge || empty($this->values)) { $this->values = $values; } else { $this->values = array_merge($this->values, $values); } } /** * Renders the template and returns the result. * * @return string */ public function render() { $keys = array(); foreach ($this->values as $key => $value) { $keys[] = $this->openDelimiter . $key . $this->closeDelimiter; } return str_replace($keys, $this->values, $this->template); } /** * Renders the template and writes the result to a file. * * @param string $target */ public function renderTo($target) { $fp = @fopen($target, 'wt'); if ($fp) { fwrite($fp, $this->render()); fclose($fp); } else { $error = error_get_last(); throw new RuntimeException( sprintf( 'Could not write to %s: %s', $target, substr( $error['message'], strpos($error['message'], ':') + 2 ) ) ); } } } PK![‘öœœ\file-manager-advanced/application/svg-sanitizer/includes/phpunit/php-text-template/README.mdnu„[µü¤# Text_Template ## Installation ## Installation To add this package as a local, per-project dependency to your project, simply add a dependency on `phpunit/php-text-template` to your project's `composer.json` file. Here is a minimal example of a `composer.json` file that just defines a dependency on Text_Template: { "require": { "phpunit/php-text-template": "~1.2" } } PK!å£-..]file-manager-advanced/application/svg-sanitizer/includes/phpunit/php-text-template/.gitignorenu„[µü¤/composer.lock /composer.phar /.idea /vendor PK!Sñ:ü  Zfile-manager-advanced/application/svg-sanitizer/includes/phpunit/php-text-template/LICENSEnu„[µü¤Text_Template Copyright (c) 2009-2015, Sebastian Bergmann . All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. * Neither the name of Sebastian Bergmann nor the names of his contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. PK!o@÷±ùùTfile-manager-advanced/application/svg-sanitizer/includes/phpunit/phpunit/SECURITY.mdnu„[µü¤# Security Policy If you believe you have found a security vulnerability in PHPUnit, please report it to us through coordinated disclosure. **Please do not report security vulnerabilities through public GitHub issues, discussions, or pull requests.** Instead, please email `sebastian@phpunit.de`. Please include as much of the information listed below as you can to help us better understand and resolve the issue: * The type of issue * Full paths of source file(s) related to the manifestation of the issue * The location of the affected source code (tag/branch/commit or direct URL) * Any special configuration required to reproduce the issue * Step-by-step instructions to reproduce the issue * Proof-of-concept or exploit code (if possible) * Impact of the issue, including how an attacker might exploit the issue This information will help us triage your report more quickly. ## Web Context PHPUnit is a framework for writing as well as a command-line tool for running tests. Writing and running tests is a development-time activity. There is no reason why PHPUnit should be installed on a webserver and/or in a production environment. **If you upload PHPUnit to a webserver then your deployment process is broken. On a more general note, if your `vendor` directory is publicly accessible on your webserver then your deployment process is also broken.** Please note that if you upload PHPUnit to a webserver "bad things" may happen. [You have been warned.](https://thephp.cc/articles/phpunit-a-security-risk?ref=phpunit) PHPUnit is developed with a focus on development environments and the command-line. No specific testing or hardening with regard to using PHPUnit in an HTTP or web context or with untrusted input data is performed. PHPUnit might also contain functionality that intentionally exposes internal application data for debugging purposes. If PHPUnit is used in a web application, the application developer is responsible for filtering inputs or escaping outputs as necessary and for verifying that the used functionality is safe for use within the intended context. Vulnerabilities specific to the use outside a development context will be fixed as applicable, provided that the fix does not have an averse effect on the primary use case for development purposes. PK!IQøx @ @Yfile-manager-advanced/application/svg-sanitizer/includes/phpunit/phpunit/ChangeLog-8.5.mdnu„[µü¤# Changes in PHPUnit 8.5 All notable changes of the PHPUnit 8.5 release series are documented in this file using the [Keep a CHANGELOG](https://keepachangelog.com/) principles. ## [8.5.41] - 2024-12-05 ### Fixed * [#6071](https://github.com/sebastianbergmann/phpunit/issues/6071): PHP Archives (PHARs) of PHPUnit 8.5 and PHPUnit 9.6 bundle outdated versions of Prophecy ## [8.5.40] - 2024-09-19 ### Changed * [#5956](https://github.com/sebastianbergmann/phpunit/issues/5956): Deprecation of the `E_STRICT` constant in PHP 8.4 * Removed `.phpstorm.meta.php` file as methods such as `TestCase::createStub()` use generics / template types for their return types and PhpStorm, for example, uses that information ## [8.5.39] - 2024-07-10 ### Changed * Updated dependencies (so that users that install using Composer's `--prefer-lowest` CLI option also get recent versions) ## [8.5.38] - 2024-04-05 ### Changed * The namespaces of dependencies are now prefixed with `PHPUnitPHAR` instead of just `PHPUnit` for the PHAR distribution of PHPUnit ## [8.5.37] - 2024-03-06 ### Changed * Improve output of `--check-version` CLI option * Improve description of `--check-version` CLI option * Show help for `--manifest`, `--sbom`, and `--composer-lock` when the PHAR is used * Make PHAR build reproducible (the only remaining differences were in the timestamps for the files in the PHAR) ## [8.5.36] - 2023-12-01 ### Fixed * [#5596](https://github.com/sebastianbergmann/phpunit/issues/5596): `PHPUnit\Framework\TestCase` has `@internal` annotation in PHAR ## [8.5.35] - 2023-12-01 ### Added * [#5577](https://github.com/sebastianbergmann/phpunit/issues/5577): `--composer-lock` CLI option for PHAR binary that displays the `composer.lock` used to build the PHAR ## [8.5.34] - 2023-09-19 ### Changed * The child processes used for process isolation now use temporary files to communicate their result to the parent process ## [8.5.33] - 2023-02-27 ### Fixed * [#5186](https://github.com/sebastianbergmann/phpunit/issues/5186): SBOM does not validate ## [8.5.32] - 2023-01-26 ### Fixed * [#5120](https://github.com/sebastianbergmann/phpunit/issues/5120): Test Runner incorrectly treats `--testsuite` and `--list-tests` as not combinable options ## [8.5.31] - 2022-10-28 ### Fixed * [#5076](https://github.com/sebastianbergmann/phpunit/issues/5076): Test Runner does not warn about conflicting options ## [8.5.30] - 2022-09-25 ### Changed * The configuration generator now asks for a cache directory ### Fixed * [#4913](https://github.com/sebastianbergmann/phpunit/issues/4913): Failed `assert()` should show a backtrace * [#4966](https://github.com/sebastianbergmann/phpunit/issues/4966): `TestCase::assertSame()` (and related exact comparisons) must compare `float` exactly ## [8.5.29] - 2022-08-22 ### Changed * [#5033](https://github.com/sebastianbergmann/phpunit/issues/5033): Do not depend on phpspec/prophecy ## [8.5.28] - 2022-07-29 ### Fixed * [#5015](https://github.com/sebastianbergmann/phpunit/pull/5015): Ukraine banner unreadable on black background * [#5016](https://github.com/sebastianbergmann/phpunit/issues/5016): PHPUnit 8.5.27 does not work on PHP 7.2.0-7.2.18 and PHP 7.3.0-7.3.5 ## [8.5.27] - 2022-06-19 ### Fixed * [#4950](https://github.com/sebastianbergmann/phpunit/issues/4950): False error on `atMost()` invocation rule without call * [#4962](https://github.com/sebastianbergmann/phpunit/issues/4962): Ukraine banner unreadable on white background ## [8.5.26] - 2022-04-01 ### Fixed * [#4938](https://github.com/sebastianbergmann/phpunit/issues/4938): Test Double code generator does not handle `void` return type declaration on `__clone()` methods ## [8.5.25] - 2022-03-16 ### Fixed * [#4934](https://github.com/sebastianbergmann/phpunit/issues/4934): Code Coverage does not work with PHPUnit 8.5.24 PHAR on PHP 7 ## [8.5.24] - 2022-03-05 - #StandWithUkraine ### Changed * [#4874](https://github.com/sebastianbergmann/phpunit/pull/4874): `PHP_FLOAT_EPSILON` is now used instead of hardcoded `0.0000000001` in `PHPUnit\Framework\Constraint\IsIdentical` ### Fixed * When the HTML code coverage report's configured low upper bound is larger than the high lower bound then the default values are used instead ## [8.5.23] - 2022-01-21 ### Fixed * [#4799](https://github.com/sebastianbergmann/phpunit/pull/4799): Memory leaks in `PHPUnit\Framework\TestSuite` class * [#4857](https://github.com/sebastianbergmann/phpunit/pull/4857): Result of `debug_backtrace()` is not used correctly ## [8.5.22] - 2021-12-25 ### Changed * [#4812](https://github.com/sebastianbergmann/phpunit/issues/4812): Do not enforce time limits when a debugging session through DBGp is active * [#4835](https://github.com/sebastianbergmann/phpunit/issues/4835): Support for `$GLOBALS['_composer_autoload_path']` introduced in Composer 2.2 ### Fixed * [#4840](https://github.com/sebastianbergmann/phpunit/pull/4840): TestDox prettifying for class names does not correctly handle diacritics * [#4846](https://github.com/sebastianbergmann/phpunit/pull/4846): Composer proxy script is not ignored ## [8.5.21] - 2021-09-25 ### Changed * PHPUnit no longer converts PHP deprecations to exceptions by default (configure `convertDeprecationsToExceptions="true"` to enable this) * The PHPUnit XML configuration file generator now configures `convertDeprecationsToExceptions="true"` ### Fixed * [#4772](https://github.com/sebastianbergmann/phpunit/pull/4772): TestDox HTML report not displayed correctly when browser has custom colour settings ## [8.5.20] - 2021-08-31 ### Fixed * [#4751](https://github.com/sebastianbergmann/phpunit/issues/4751): Configuration validation fails when using brackets in glob pattern ## [8.5.19] - 2021-07-31 ### Fixed * [#4740](https://github.com/sebastianbergmann/phpunit/issues/4740): `phpunit.phar` does not work with PHP 8.1 ## [8.5.18] - 2021-07-19 ### Fixed * [#4720](https://github.com/sebastianbergmann/phpunit/issues/4720): PHPUnit does not verify its own PHP extension requirements ## [8.5.17] - 2021-06-23 ### Changed * PHPUnit now errors out on startup when `PHP_VERSION` contains a value that is not compatible with `version_compare()`, for instance `X.Y.Z-(to be removed in future macOS)` ## [8.5.16] - 2021-06-05 ### Changed * The test result cache (the storage for which is implemented in `PHPUnit\Runner\DefaultTestResultCache`) no longer uses PHP's `serialize()` and `unserialize()` functions for persistence. It now uses a versioned JSON format instead that is independent of PHP implementation details (see [#3581](https://github.com/sebastianbergmann/phpunit/issues/3581) and [#4662](https://github.com/sebastianbergmann/phpunit/pull/4662) for examples why this is a problem). When PHPUnit tries to load the test result cache from a file that does not exist, or from a file that does not contain data in JSON format, or from a file that contains data in a JSON format version other than the one used by the currently running PHPUnit version, then this is considered to be a "cache miss". An empty `DefaultTestResultCache` object is created in this case. This should also prevent PHPUnit from crashing when trying to load a test result cache file created by a different version of PHPUnit (see [#4580](https://github.com/sebastianbergmann/phpunit/issues/4580) for example). ### Fixed * [#4663](https://github.com/sebastianbergmann/phpunit/issues/4663): `TestCase::expectError()` works on PHP 7.3, but not on PHP >= 7.4 * [#4678](https://github.com/sebastianbergmann/phpunit/pull/4678): Stubbed methods with `iterable` return types should return empty array by default * [#4692](https://github.com/sebastianbergmann/phpunit/issues/4692): Annotations in single-line doc-comments are not handled correctly * [#4694](https://github.com/sebastianbergmann/phpunit/issues/4694): `TestCase::getMockFromWsdl()` does not work with PHP 8.1-dev ## [8.5.15] - 2021-03-17 ### Fixed * [#4591](https://github.com/sebastianbergmann/phpunit/issues/4591): TeamCity logger logs warnings as test failures ## [8.5.14] - 2021-01-17 ### Fixed * [#4535](https://github.com/sebastianbergmann/phpunit/issues/4535): `getMockFromWsdl()` does not handle methods that do not have parameters correctly * [#4572](https://github.com/sebastianbergmann/phpunit/issues/4572): Schema validation does not work with `%xx` sequences in path to `phpunit.xsd` * [#4575](https://github.com/sebastianbergmann/phpunit/issues/4575): PHPUnit 8.5 incompatibility with PHP 8.1 ## [8.5.13] - 2020-12-01 ### Fixed * Running tests in isolated processes did not work with PHP 8 on Windows ## [8.5.12] - 2020-11-30 ### Changed * Changed PHP version constraint in `composer.json` from `^7.2` to `>=7.2` to allow the installation of PHPUnit 8.5 on PHP 8. Please note that the code coverage functionality is not available for PHPUnit 8.5 on PHP 8. ### Fixed * [#4529](https://github.com/sebastianbergmann/phpunit/issues/4529): Debug mode of Xdebug 2 is not disabled for PHPT tests ## [8.5.11] - 2020-11-27 ### Changed * Bumped required version of `phpunit/php-code-coverage` ## [8.5.10] - 2020-11-27 ### Added * Support for Xdebug 3 ### Fixed * [#4516](https://github.com/sebastianbergmann/phpunit/issues/4516): `phpunit/phpunit-selenium` does not work with PHPUnit 8.5.9 ## [8.5.9] - 2020-11-10 ### Fixed * [#3965](https://github.com/sebastianbergmann/phpunit/issues/3965): Process Isolation throws exceptions when PHPDBG is used * [#4470](https://github.com/sebastianbergmann/phpunit/pull/4470): Infinite recursion when `--static-backup --strict-global-state` is used ## [8.5.8] - 2020-06-22 ### Fixed * [#4312](https://github.com/sebastianbergmann/phpunit/issues/4312): Fix for [#4299](https://github.com/sebastianbergmann/phpunit/issues/4299) breaks backward compatibility ## [8.5.7] - 2020-06-21 ### Fixed * [#4299](https://github.com/sebastianbergmann/phpunit/issues/4299): "No tests executed" does not always result in exit code `1` * [#4306](https://github.com/sebastianbergmann/phpunit/issues/4306): Exceptions during code coverage driver initialization are not handled correctly ## [8.5.6] - 2020-06-15 ### Fixed * [#4211](https://github.com/sebastianbergmann/phpunit/issues/4211): `phpdbg_*()` functions are scoped to `PHPUnit\phpdbg_*()` ## [8.5.5] - 2020-05-22 ### Fixed * [#4033](https://github.com/sebastianbergmann/phpunit/issues/4033): Unexpected behaviour when `$GLOBALS` is deleted ## [8.5.4] - 2020-04-23 ### Changed * Changed how `PHPUnit\TextUI\Command` passes warnings to `PHPUnit\TextUI\TestRunner` ## [8.5.3] - 2020-03-31 ### Fixed * [#4017](https://github.com/sebastianbergmann/phpunit/issues/4017): Do not suggest refactoring to something that is also deprecated * [#4133](https://github.com/sebastianbergmann/phpunit/issues/4133): `expectExceptionMessageRegExp()` has been removed in PHPUnit 9 without a deprecation warning being given in PHPUnit 8 * [#4139](https://github.com/sebastianbergmann/phpunit/issues/4139): Cannot double interfaces that declare a constructor with PHP 8 * [#4144](https://github.com/sebastianbergmann/phpunit/issues/4144): Empty objects are converted to empty arrays in JSON comparison failure diff ## [8.5.2] - 2020-01-08 ### Removed * `eval-stdin.php` has been removed, it was not used anymore since PHPUnit 7.2.7 ## [8.5.1] - 2019-12-25 ### Changed * `eval-stdin.php` can now only be executed with `cli` and `phpdbg` ### Fixed * [#3983](https://github.com/sebastianbergmann/phpunit/issues/3983): Deprecation warning given too eagerly ## [8.5.0] - 2019-12-06 ### Added * [#3911](https://github.com/sebastianbergmann/phpunit/issues/3911): Support combined use of `addMethods()` and `onlyMethods()` * [#3949](https://github.com/sebastianbergmann/phpunit/issues/3949): Introduce specialized assertions `assertFileEqualsCanonicalizing()`, `assertFileEqualsIgnoringCase()`, `assertStringEqualsFileCanonicalizing()`, `assertStringEqualsFileIgnoringCase()`, `assertFileNotEqualsCanonicalizing()`, `assertFileNotEqualsIgnoringCase()`, `assertStringNotEqualsFileCanonicalizing()`, and `assertStringNotEqualsFileIgnoringCase()` as alternative to using `assertFileEquals()` etc. with optional parameters ### Changed * [#3860](https://github.com/sebastianbergmann/phpunit/pull/3860): Deprecate invoking PHPUnit commandline test runner with just a class name * [#3950](https://github.com/sebastianbergmann/phpunit/issues/3950): Deprecate optional parameters of `assertFileEquals()` etc. * [#3955](https://github.com/sebastianbergmann/phpunit/issues/3955): Deprecate support for doubling multiple interfaces ### Fixed * [#3953](https://github.com/sebastianbergmann/phpunit/issues/3953): Code Coverage for test executed in isolation does not work when the PHAR is used * [#3967](https://github.com/sebastianbergmann/phpunit/issues/3967): Cannot double interface that extends interface that extends `\Throwable` * [#3968](https://github.com/sebastianbergmann/phpunit/pull/3968): Test class run in a separate PHP process are passing when `exit` called inside [8.5.41]: https://github.com/sebastianbergmann/phpunit/compare/8.5.40...8.5.41 [8.5.40]: https://github.com/sebastianbergmann/phpunit/compare/8.5.39...8.5.40 [8.5.39]: https://github.com/sebastianbergmann/phpunit/compare/8.5.38...8.5.39 [8.5.38]: https://github.com/sebastianbergmann/phpunit/compare/8.5.37...8.5.38 [8.5.37]: https://github.com/sebastianbergmann/phpunit/compare/8.5.36...8.5.37 [8.5.36]: https://github.com/sebastianbergmann/phpunit/compare/8.5.35...8.5.36 [8.5.35]: https://github.com/sebastianbergmann/phpunit/compare/8.5.34...8.5.35 [8.5.34]: https://github.com/sebastianbergmann/phpunit/compare/8.5.33...8.5.34 [8.5.33]: https://github.com/sebastianbergmann/phpunit/compare/8.5.32...8.5.33 [8.5.32]: https://github.com/sebastianbergmann/phpunit/compare/8.5.31...8.5.32 [8.5.31]: https://github.com/sebastianbergmann/phpunit/compare/8.5.30...8.5.31 [8.5.30]: https://github.com/sebastianbergmann/phpunit/compare/8.5.29...8.5.30 [8.5.29]: https://github.com/sebastianbergmann/phpunit/compare/8.5.28...8.5.29 [8.5.28]: https://github.com/sebastianbergmann/phpunit/compare/8.5.27...8.5.28 [8.5.27]: https://github.com/sebastianbergmann/phpunit/compare/8.5.26...8.5.27 [8.5.26]: https://github.com/sebastianbergmann/phpunit/compare/8.5.25...8.5.26 [8.5.25]: https://github.com/sebastianbergmann/phpunit/compare/8.5.24...8.5.25 [8.5.24]: https://github.com/sebastianbergmann/phpunit/compare/8.5.23...8.5.24 [8.5.23]: https://github.com/sebastianbergmann/phpunit/compare/8.5.22...8.5.23 [8.5.22]: https://github.com/sebastianbergmann/phpunit/compare/8.5.21...8.5.22 [8.5.21]: https://github.com/sebastianbergmann/phpunit/compare/8.5.20...8.5.21 [8.5.20]: https://github.com/sebastianbergmann/phpunit/compare/8.5.19...8.5.20 [8.5.19]: https://github.com/sebastianbergmann/phpunit/compare/8.5.18...8.5.19 [8.5.18]: https://github.com/sebastianbergmann/phpunit/compare/8.5.17...8.5.18 [8.5.17]: https://github.com/sebastianbergmann/phpunit/compare/8.5.16...8.5.17 [8.5.16]: https://github.com/sebastianbergmann/phpunit/compare/8.5.15...8.5.16 [8.5.15]: https://github.com/sebastianbergmann/phpunit/compare/8.5.14...8.5.15 [8.5.14]: https://github.com/sebastianbergmann/phpunit/compare/8.5.13...8.5.14 [8.5.13]: https://github.com/sebastianbergmann/phpunit/compare/8.5.12...8.5.13 [8.5.12]: https://github.com/sebastianbergmann/phpunit/compare/8.5.11...8.5.12 [8.5.11]: https://github.com/sebastianbergmann/phpunit/compare/8.5.10...8.5.11 [8.5.10]: https://github.com/sebastianbergmann/phpunit/compare/8.5.9...8.5.10 [8.5.9]: https://github.com/sebastianbergmann/phpunit/compare/8.5.8...8.5.9 [8.5.8]: https://github.com/sebastianbergmann/phpunit/compare/8.5.7...8.5.8 [8.5.7]: https://github.com/sebastianbergmann/phpunit/compare/8.5.6...8.5.7 [8.5.6]: https://github.com/sebastianbergmann/phpunit/compare/8.5.5...8.5.6 [8.5.5]: https://github.com/sebastianbergmann/phpunit/compare/8.5.4...8.5.5 [8.5.4]: https://github.com/sebastianbergmann/phpunit/compare/8.5.3...8.5.4 [8.5.3]: https://github.com/sebastianbergmann/phpunit/compare/8.5.2...8.5.3 [8.5.2]: https://github.com/sebastianbergmann/phpunit/compare/8.5.1...8.5.2 [8.5.1]: https://github.com/sebastianbergmann/phpunit/compare/8.5.0...8.5.1 [8.5.0]: https://github.com/sebastianbergmann/phpunit/compare/8.4.3...8.5.0 PK!ûndÄ Ä Vfile-manager-advanced/application/svg-sanitizer/includes/phpunit/phpunit/composer.jsonnu„[µü¤{ "name": "phpunit/phpunit", "description": "The PHP Unit Testing framework.", "type": "library", "keywords": [ "phpunit", "xunit", "testing" ], "homepage": "https://phpunit.de/", "license": "BSD-3-Clause", "authors": [ { "name": "Sebastian Bergmann", "email": "sebastian@phpunit.de", "role": "lead" } ], "support": { "issues": "https://github.com/sebastianbergmann/phpunit/issues", "security": "https://github.com/sebastianbergmann/phpunit/security/policy" }, "prefer-stable": true, "require": { "php": ">=7.2", "ext-dom": "*", "ext-json": "*", "ext-libxml": "*", "ext-mbstring": "*", "ext-xml": "*", "ext-xmlwriter": "*", "doctrine/instantiator": "^1.5.0", "myclabs/deep-copy": "^1.12.1", "phar-io/manifest": "^2.0.4", "phar-io/version": "^3.2.1", "phpunit/php-code-coverage": "^7.0.17", "phpunit/php-file-iterator": "^2.0.6", "phpunit/php-text-template": "^1.2.1", "phpunit/php-timer": "^2.1.4", "sebastian/comparator": "^3.0.5", "sebastian/diff": "^3.0.6", "sebastian/environment": "^4.2.5", "sebastian/exporter": "^3.1.6", "sebastian/global-state": "^3.0.5", "sebastian/object-enumerator": "^3.0.5", "sebastian/resource-operations": "^2.0.3", "sebastian/type": "^1.1.5", "sebastian/version": "^2.0.1" }, "config": { "platform": { "php": "7.2.0" }, "optimize-autoloader": true, "sort-packages": true }, "suggest": { "phpunit/php-invoker": "To allow enforcing time limits", "ext-soap": "To be able to generate mocks based on WSDL files", "ext-xdebug": "PHP extension that provides line coverage as well as branch and path coverage" }, "bin": [ "phpunit" ], "autoload": { "classmap": [ "src/" ] }, "autoload-dev": { "classmap": [ "tests/" ], "files": [ "src/Framework/Assert/Functions.php", "tests/_files/CoverageNamespacedFunctionTest.php", "tests/_files/CoveredFunction.php", "tests/_files/NamespaceCoveredFunction.php" ] }, "extra": { "branch-alias": { "dev-master": "8.5-dev" } } } PK!„å'”<<efile-manager-advanced/application/svg-sanitizer/includes/phpunit/phpunit/src/TextUI/ResultPrinter.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace PHPUnit\TextUI; use const PHP_EOL; use function array_map; use function array_reverse; use function count; use function floor; use function implode; use function in_array; use function is_int; use function max; use function preg_split; use function sprintf; use function str_pad; use function str_repeat; use function strlen; use function trim; use function vsprintf; use PHPUnit\Framework\AssertionFailedError; use PHPUnit\Framework\Exception; use PHPUnit\Framework\InvalidArgumentException; use PHPUnit\Framework\Test; use PHPUnit\Framework\TestCase; use PHPUnit\Framework\TestFailure; use PHPUnit\Framework\TestListener; use PHPUnit\Framework\TestResult; use PHPUnit\Framework\TestSuite; use PHPUnit\Framework\Warning; use PHPUnit\Runner\PhptTestCase; use PHPUnit\Util\Color; use PHPUnit\Util\Printer; use SebastianBergmann\Environment\Console; use SebastianBergmann\Timer\RuntimeException; use SebastianBergmann\Timer\Timer; use Throwable; /** * @internal This class is not covered by the backward compatibility promise for PHPUnit */ class ResultPrinter extends Printer implements TestListener { public const EVENT_TEST_START = 0; public const EVENT_TEST_END = 1; public const EVENT_TESTSUITE_START = 2; public const EVENT_TESTSUITE_END = 3; public const COLOR_NEVER = 'never'; public const COLOR_AUTO = 'auto'; public const COLOR_ALWAYS = 'always'; public const COLOR_DEFAULT = self::COLOR_NEVER; private const AVAILABLE_COLORS = [self::COLOR_NEVER, self::COLOR_AUTO, self::COLOR_ALWAYS]; /** * @var int */ protected $column = 0; /** * @var int */ protected $maxColumn; /** * @var bool */ protected $lastTestFailed = false; /** * @var int */ protected $numAssertions = 0; /** * @var int */ protected $numTests = -1; /** * @var int */ protected $numTestsRun = 0; /** * @var int */ protected $numTestsWidth; /** * @var bool */ protected $colors = false; /** * @var bool */ protected $debug = false; /** * @var bool */ protected $verbose = false; /** * @var int */ private $numberOfColumns; /** * @var bool */ private $reverse; /** * @var bool */ private $defectListPrinted = false; /** * Constructor. * * @param null|resource|string $out * @param int|string $numberOfColumns * * @throws Exception */ public function __construct($out = null, bool $verbose = false, string $colors = self::COLOR_DEFAULT, bool $debug = false, $numberOfColumns = 80, bool $reverse = false) { parent::__construct($out); if (!in_array($colors, self::AVAILABLE_COLORS, true)) { throw InvalidArgumentException::create( 3, vsprintf('value from "%s", "%s" or "%s"', self::AVAILABLE_COLORS) ); } if (!is_int($numberOfColumns) && $numberOfColumns !== 'max') { throw InvalidArgumentException::create(5, 'integer or "max"'); } $console = new Console; $maxNumberOfColumns = $console->getNumberOfColumns(); if ($numberOfColumns === 'max' || ($numberOfColumns !== 80 && $numberOfColumns > $maxNumberOfColumns)) { $numberOfColumns = $maxNumberOfColumns; } $this->numberOfColumns = $numberOfColumns; $this->verbose = $verbose; $this->debug = $debug; $this->reverse = $reverse; if ($colors === self::COLOR_AUTO && $console->hasColorSupport()) { $this->colors = true; } else { $this->colors = (self::COLOR_ALWAYS === $colors); } } /** * @throws RuntimeException */ public function printResult(TestResult $result): void { $this->printHeader($result); $this->printErrors($result); $this->printWarnings($result); $this->printFailures($result); $this->printRisky($result); if ($this->verbose) { $this->printIncompletes($result); $this->printSkipped($result); } $this->printFooter($result); } /** * An error occurred. */ public function addError(Test $test, Throwable $t, float $time): void { $this->writeProgressWithColor('fg-red, bold', 'E'); $this->lastTestFailed = true; } /** * A failure occurred. */ public function addFailure(Test $test, AssertionFailedError $e, float $time): void { $this->writeProgressWithColor('bg-red, fg-white', 'F'); $this->lastTestFailed = true; } /** * A warning occurred. */ public function addWarning(Test $test, Warning $e, float $time): void { $this->writeProgressWithColor('fg-yellow, bold', 'W'); $this->lastTestFailed = true; } /** * Incomplete test. */ public function addIncompleteTest(Test $test, Throwable $t, float $time): void { $this->writeProgressWithColor('fg-yellow, bold', 'I'); $this->lastTestFailed = true; } /** * Risky test. */ public function addRiskyTest(Test $test, Throwable $t, float $time): void { $this->writeProgressWithColor('fg-yellow, bold', 'R'); $this->lastTestFailed = true; } /** * Skipped test. */ public function addSkippedTest(Test $test, Throwable $t, float $time): void { $this->writeProgressWithColor('fg-cyan, bold', 'S'); $this->lastTestFailed = true; } /** * A testsuite started. */ public function startTestSuite(TestSuite $suite): void { if ($this->numTests == -1) { $this->numTests = count($suite); $this->numTestsWidth = strlen((string) $this->numTests); $this->maxColumn = $this->numberOfColumns - strlen(' / (XXX%)') - (2 * $this->numTestsWidth); } } /** * A testsuite ended. */ public function endTestSuite(TestSuite $suite): void { } /** * A test started. */ public function startTest(Test $test): void { if ($this->debug) { $this->write( sprintf( "Test '%s' started\n", \PHPUnit\Util\Test::describeAsString($test) ) ); } } /** * A test ended. */ public function endTest(Test $test, float $time): void { if ($this->debug) { $this->write( sprintf( "Test '%s' ended\n", \PHPUnit\Util\Test::describeAsString($test) ) ); } if (!$this->lastTestFailed) { $this->writeProgress('.'); } if ($test instanceof TestCase) { $this->numAssertions += $test->getNumAssertions(); } elseif ($test instanceof PhptTestCase) { $this->numAssertions++; } $this->lastTestFailed = false; if ($test instanceof TestCase && !$test->hasExpectationOnOutput()) { $this->write($test->getActualOutput()); } } protected function printDefects(array $defects, string $type): void { $count = count($defects); if ($count == 0) { return; } if ($this->defectListPrinted) { $this->write("\n--\n\n"); } $this->write( sprintf( "There %s %d %s%s:\n", ($count == 1) ? 'was' : 'were', $count, $type, ($count == 1) ? '' : 's' ) ); $i = 1; if ($this->reverse) { $defects = array_reverse($defects); } foreach ($defects as $defect) { $this->printDefect($defect, $i++); } $this->defectListPrinted = true; } protected function printDefect(TestFailure $defect, int $count): void { $this->printDefectHeader($defect, $count); $this->printDefectTrace($defect); } protected function printDefectHeader(TestFailure $defect, int $count): void { $this->write( sprintf( "\n%d) %s\n", $count, $defect->getTestName() ) ); } protected function printDefectTrace(TestFailure $defect): void { $e = $defect->thrownException(); $this->write((string) $e); while ($e = $e->getPrevious()) { $this->write("\nCaused by\n" . trim((string) $e) . "\n"); } } protected function printErrors(TestResult $result): void { $this->printDefects($result->errors(), 'error'); } protected function printFailures(TestResult $result): void { $this->printDefects($result->failures(), 'failure'); } protected function printWarnings(TestResult $result): void { $this->printDefects($result->warnings(), 'warning'); } protected function printIncompletes(TestResult $result): void { $this->printDefects($result->notImplemented(), 'incomplete test'); } protected function printRisky(TestResult $result): void { $this->printDefects($result->risky(), 'risky test'); } protected function printSkipped(TestResult $result): void { $this->printDefects($result->skipped(), 'skipped test'); } /** * @throws RuntimeException */ protected function printHeader(TestResult $result): void { if (count($result) > 0) { $this->write(PHP_EOL . PHP_EOL . Timer::resourceUsage() . PHP_EOL . PHP_EOL); } } protected function printFooter(TestResult $result): void { if (count($result) === 0) { $this->writeWithColor( 'fg-black, bg-yellow', 'No tests executed!' ); return; } if ($result->wasSuccessfulAndNoTestIsRiskyOrSkippedOrIncomplete()) { $this->writeWithColor( 'fg-black, bg-green', sprintf( 'OK (%d test%s, %d assertion%s)', count($result), (count($result) == 1) ? '' : 's', $this->numAssertions, ($this->numAssertions == 1) ? '' : 's' ) ); return; } $color = 'fg-black, bg-yellow'; if ($result->wasSuccessful()) { if ($this->verbose || !$result->allHarmless()) { $this->write("\n"); } $this->writeWithColor( $color, 'OK, but incomplete, skipped, or risky tests!' ); } else { $this->write("\n"); if ($result->errorCount()) { $color = 'fg-white, bg-red'; $this->writeWithColor( $color, 'ERRORS!' ); } elseif ($result->failureCount()) { $color = 'fg-white, bg-red'; $this->writeWithColor( $color, 'FAILURES!' ); } elseif ($result->warningCount()) { $color = 'fg-black, bg-yellow'; $this->writeWithColor( $color, 'WARNINGS!' ); } } $this->writeCountString(count($result), 'Tests', $color, true); $this->writeCountString($this->numAssertions, 'Assertions', $color, true); $this->writeCountString($result->errorCount(), 'Errors', $color); $this->writeCountString($result->failureCount(), 'Failures', $color); $this->writeCountString($result->warningCount(), 'Warnings', $color); $this->writeCountString($result->skippedCount(), 'Skipped', $color); $this->writeCountString($result->notImplementedCount(), 'Incomplete', $color); $this->writeCountString($result->riskyCount(), 'Risky', $color); $this->writeWithColor($color, '.'); } protected function writeProgress(string $progress): void { if ($this->debug) { return; } $this->write($progress); $this->column++; $this->numTestsRun++; if ($this->column == $this->maxColumn || $this->numTestsRun == $this->numTests) { if ($this->numTestsRun == $this->numTests) { $this->write(str_repeat(' ', $this->maxColumn - $this->column)); } $this->write( sprintf( ' %' . $this->numTestsWidth . 'd / %' . $this->numTestsWidth . 'd (%3s%%)', $this->numTestsRun, $this->numTests, floor(($this->numTestsRun / $this->numTests) * 100) ) ); if ($this->column == $this->maxColumn) { $this->writeNewLine(); } } } protected function writeNewLine(): void { $this->column = 0; $this->write("\n"); } /** * Formats a buffer with a specified ANSI color sequence if colors are * enabled. */ protected function colorizeTextBox(string $color, string $buffer): string { if (!$this->colors) { return $buffer; } $lines = preg_split('/\r\n|\r|\n/', $buffer); $padding = max(array_map('\strlen', $lines)); $styledLines = []; foreach ($lines as $line) { $styledLines[] = Color::colorize($color, str_pad($line, $padding)); } return implode(PHP_EOL, $styledLines); } /** * Writes a buffer out with a color sequence if colors are enabled. */ protected function writeWithColor(string $color, string $buffer, bool $lf = true): void { $this->write($this->colorizeTextBox($color, $buffer)); if ($lf) { $this->write(PHP_EOL); } } /** * Writes progress with a color sequence if colors are enabled. */ protected function writeProgressWithColor(string $color, string $buffer): void { $buffer = $this->colorizeTextBox($color, $buffer); $this->writeProgress($buffer); } private function writeCountString(int $count, string $name, string $color, bool $always = false): void { static $first = true; if ($always || $count > 0) { $this->writeWithColor( $color, sprintf( '%s%s: %d', !$first ? ', ' : '', $name, $count ), false ); $first = false; } } } PK!äÛŽH±H±_file-manager-advanced/application/svg-sanitizer/includes/phpunit/phpunit/src/TextUI/Command.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace PHPUnit\TextUI; use const PATH_SEPARATOR; use const PHP_EOL; use const STDIN; use function array_keys; use function assert; use function class_exists; use function explode; use function extension_loaded; use function fgets; use function file_exists; use function file_get_contents; use function file_put_contents; use function getcwd; use function ini_get; use function ini_set; use function is_callable; use function is_dir; use function is_file; use function is_numeric; use function is_string; use function printf; use function realpath; use function sort; use function sprintf; use function str_replace; use function stream_resolve_include_path; use function strrpos; use function substr; use function trim; use function version_compare; use PharIo\Manifest\ApplicationName; use PharIo\Manifest\Exception as ManifestException; use PharIo\Manifest\ManifestLoader; use PharIo\Version\Version as PharIoVersion; use PHPUnit\Framework\Exception; use PHPUnit\Framework\Test; use PHPUnit\Framework\TestListener; use PHPUnit\Framework\TestSuite; use PHPUnit\Runner\StandardTestSuiteLoader; use PHPUnit\Runner\TestSuiteLoader; use PHPUnit\Runner\TestSuiteSorter; use PHPUnit\Runner\Version; use PHPUnit\Util\Configuration; use PHPUnit\Util\ConfigurationGenerator; use PHPUnit\Util\FileLoader; use PHPUnit\Util\Filesystem; use PHPUnit\Util\Getopt; use PHPUnit\Util\Log\TeamCity; use PHPUnit\Util\Printer; use PHPUnit\Util\TestDox\CliTestDoxPrinter; use PHPUnit\Util\TextTestListRenderer; use PHPUnit\Util\XmlTestListRenderer; use ReflectionClass; use ReflectionException; use SebastianBergmann\FileIterator\Facade as FileIteratorFacade; use SebastianBergmann\RecursionContext\InvalidArgumentException; use Throwable; /** * A TestRunner for the Command Line Interface (CLI) * PHP SAPI Module. */ class Command { /** * @var array */ protected $arguments = [ 'listGroups' => false, 'listSuites' => false, 'listTests' => false, 'listTestsXml' => false, 'loader' => null, 'useDefaultConfiguration' => true, 'loadedExtensions' => [], 'notLoadedExtensions' => [], ]; /** * @var array */ protected $options = []; /** * @var array */ protected $longOptions = [ 'atleast-version=' => null, 'prepend=' => null, 'bootstrap=' => null, 'cache-result' => null, 'do-not-cache-result' => null, 'cache-result-file=' => null, 'check-version' => null, 'colors==' => null, 'columns=' => null, 'configuration=' => null, 'coverage-clover=' => null, 'coverage-crap4j=' => null, 'coverage-html=' => null, 'coverage-php=' => null, 'coverage-text==' => null, 'coverage-xml=' => null, 'debug' => null, 'disallow-test-output' => null, 'disallow-resource-usage' => null, 'disallow-todo-tests' => null, 'default-time-limit=' => null, 'enforce-time-limit' => null, 'exclude-group=' => null, 'filter=' => null, 'generate-configuration' => null, 'globals-backup' => null, 'group=' => null, 'help' => null, 'resolve-dependencies' => null, 'ignore-dependencies' => null, 'include-path=' => null, 'list-groups' => null, 'list-suites' => null, 'list-tests' => null, 'list-tests-xml=' => null, 'loader=' => null, 'log-junit=' => null, 'log-teamcity=' => null, 'no-configuration' => null, 'no-coverage' => null, 'no-logging' => null, 'no-interaction' => null, 'no-extensions' => null, 'order-by=' => null, 'printer=' => null, 'process-isolation' => null, 'repeat=' => null, 'dont-report-useless-tests' => null, 'random-order' => null, 'random-order-seed=' => null, 'reverse-order' => null, 'reverse-list' => null, 'static-backup' => null, 'stderr' => null, 'stop-on-defect' => null, 'stop-on-error' => null, 'stop-on-failure' => null, 'stop-on-warning' => null, 'stop-on-incomplete' => null, 'stop-on-risky' => null, 'stop-on-skipped' => null, 'fail-on-warning' => null, 'fail-on-risky' => null, 'strict-coverage' => null, 'disable-coverage-ignore' => null, 'strict-global-state' => null, 'teamcity' => null, 'testdox' => null, 'testdox-group=' => null, 'testdox-exclude-group=' => null, 'testdox-html=' => null, 'testdox-text=' => null, 'testdox-xml=' => null, 'test-suffix=' => null, 'testsuite=' => null, 'verbose' => null, 'version' => null, 'whitelist=' => null, 'dump-xdebug-filter=' => null, ]; /** * @var @psalm-var list */ private $warnings = []; /** * @var bool */ private $versionStringPrinted = false; /** * @throws Exception */ public static function main(bool $exit = true): int { return (new static)->run($_SERVER['argv'], $exit); } /** * @throws Exception */ public function run(array $argv, bool $exit = true): int { $this->handleArguments($argv); $runner = $this->createRunner(); if ($this->arguments['test'] instanceof Test) { $suite = $this->arguments['test']; } else { $suite = $runner->getTest( $this->arguments['test'], $this->arguments['testFile'], $this->arguments['testSuffixes'] ); } if ($this->arguments['listGroups']) { return $this->handleListGroups($suite, $exit); } if ($this->arguments['listSuites']) { return $this->handleListSuites($exit); } if ($this->arguments['listTests']) { return $this->handleListTests($suite, $exit); } if ($this->arguments['listTestsXml']) { return $this->handleListTestsXml($suite, $this->arguments['listTestsXml'], $exit); } unset($this->arguments['test'], $this->arguments['testFile']); try { $result = $runner->doRun($suite, $this->arguments, $this->warnings, $exit); } catch (Exception $e) { print $e->getMessage() . PHP_EOL; } $return = TestRunner::FAILURE_EXIT; if (isset($result) && $result->wasSuccessful()) { $return = TestRunner::SUCCESS_EXIT; } elseif (!isset($result) || $result->errorCount() > 0) { $return = TestRunner::EXCEPTION_EXIT; } if ($exit) { exit($return); } return $return; } /** * Create a TestRunner, override in subclasses. */ protected function createRunner(): TestRunner { return new TestRunner($this->arguments['loader']); } /** * Handles the command-line arguments. * * A child class of PHPUnit\TextUI\Command can hook into the argument * parsing by adding the switch(es) to the $longOptions array and point to a * callback method that handles the switch(es) in the child class like this * * * longOptions['my-switch'] = 'myHandler'; * // my-secondswitch will accept a value - note the equals sign * $this->longOptions['my-secondswitch='] = 'myOtherHandler'; * } * * // --my-switch -> myHandler() * protected function myHandler() * { * } * * // --my-secondswitch foo -> myOtherHandler('foo') * protected function myOtherHandler ($value) * { * } * * // You will also need this - the static keyword in the * // PHPUnit\TextUI\Command will mean that it'll be * // PHPUnit\TextUI\Command that gets instantiated, * // not MyCommand * public static function main($exit = true) * { * $command = new static; * * return $command->run($_SERVER['argv'], $exit); * } * * } * * * @throws Exception */ protected function handleArguments(array $argv): void { try { $this->options = Getopt::parse( $argv, 'd:c:hv', array_keys($this->longOptions) ); } catch (Exception $t) { $this->exitWithErrorMessage($t->getMessage()); } foreach ($this->options[0] as $option) { switch ($option[0]) { case '--colors': $this->arguments['colors'] = $option[1] ?: ResultPrinter::COLOR_AUTO; break; case '--bootstrap': $this->arguments['bootstrap'] = $option[1]; break; case '--cache-result': $this->arguments['cacheResult'] = true; break; case '--do-not-cache-result': $this->arguments['cacheResult'] = false; break; case '--cache-result-file': $this->arguments['cacheResultFile'] = $option[1]; break; case '--columns': if (is_numeric($option[1])) { $this->arguments['columns'] = (int) $option[1]; } elseif ($option[1] === 'max') { $this->arguments['columns'] = 'max'; } break; case 'c': case '--configuration': $this->arguments['configuration'] = $option[1]; break; case '--coverage-clover': $this->arguments['coverageClover'] = $option[1]; break; case '--coverage-crap4j': $this->arguments['coverageCrap4J'] = $option[1]; break; case '--coverage-html': $this->arguments['coverageHtml'] = $option[1]; break; case '--coverage-php': $this->arguments['coveragePHP'] = $option[1]; break; case '--coverage-text': if ($option[1] === null) { $option[1] = 'php://stdout'; } $this->arguments['coverageText'] = $option[1]; $this->arguments['coverageTextShowUncoveredFiles'] = false; $this->arguments['coverageTextShowOnlySummary'] = false; break; case '--coverage-xml': $this->arguments['coverageXml'] = $option[1]; break; case 'd': $ini = explode('=', $option[1]); if (isset($ini[0])) { if (isset($ini[1])) { ini_set($ini[0], $ini[1]); } else { ini_set($ini[0], '1'); } } break; case '--debug': $this->arguments['debug'] = true; break; case 'h': case '--help': $this->showHelp(); exit(TestRunner::SUCCESS_EXIT); break; case '--filter': $this->arguments['filter'] = $option[1]; break; case '--testsuite': $this->arguments['testsuite'] = $option[1]; break; case '--generate-configuration': $this->printVersionString(); print 'Generating phpunit.xml in ' . getcwd() . PHP_EOL . PHP_EOL; print 'Bootstrap script (relative to path shown above; default: vendor/autoload.php): '; $bootstrapScript = trim(fgets(STDIN)); print 'Tests directory (relative to path shown above; default: tests): '; $testsDirectory = trim(fgets(STDIN)); print 'Source directory (relative to path shown above; default: src): '; $src = trim(fgets(STDIN)); print 'Cache directory (relative to path shown above; default: .phpunit.cache): '; $cacheDirectory = trim(fgets(STDIN)); if ($bootstrapScript === '') { $bootstrapScript = 'vendor/autoload.php'; } if ($testsDirectory === '') { $testsDirectory = 'tests'; } if ($src === '') { $src = 'src'; } if ($cacheDirectory === '') { $cacheDirectory = '.phpunit.cache'; } $generator = new ConfigurationGenerator; file_put_contents( 'phpunit.xml', $generator->generateDefaultConfiguration( Version::series(), $bootstrapScript, $testsDirectory, $src, $cacheDirectory ) ); print PHP_EOL . 'Generated phpunit.xml in ' . getcwd() . PHP_EOL; print 'Make sure to exclude the ' . $cacheDirectory . ' directory from version control.' . PHP_EOL; exit(TestRunner::SUCCESS_EXIT); break; case '--group': $this->arguments['groups'] = explode(',', $option[1]); break; case '--exclude-group': $this->arguments['excludeGroups'] = explode( ',', $option[1] ); break; case '--test-suffix': $this->arguments['testSuffixes'] = explode( ',', $option[1] ); break; case '--include-path': $includePath = $option[1]; break; case '--list-groups': $this->arguments['listGroups'] = true; break; case '--list-suites': $this->arguments['listSuites'] = true; break; case '--list-tests': $this->arguments['listTests'] = true; break; case '--list-tests-xml': $this->arguments['listTestsXml'] = $option[1]; break; case '--printer': $this->arguments['printer'] = $option[1]; break; case '--loader': $this->arguments['loader'] = $option[1]; break; case '--log-junit': $this->arguments['junitLogfile'] = $option[1]; break; case '--log-teamcity': $this->arguments['teamcityLogfile'] = $option[1]; break; case '--order-by': $this->handleOrderByOption($option[1]); break; case '--process-isolation': $this->arguments['processIsolation'] = true; break; case '--repeat': $this->arguments['repeat'] = (int) $option[1]; break; case '--stderr': $this->arguments['stderr'] = true; break; case '--stop-on-defect': $this->arguments['stopOnDefect'] = true; break; case '--stop-on-error': $this->arguments['stopOnError'] = true; break; case '--stop-on-failure': $this->arguments['stopOnFailure'] = true; break; case '--stop-on-warning': $this->arguments['stopOnWarning'] = true; break; case '--stop-on-incomplete': $this->arguments['stopOnIncomplete'] = true; break; case '--stop-on-risky': $this->arguments['stopOnRisky'] = true; break; case '--stop-on-skipped': $this->arguments['stopOnSkipped'] = true; break; case '--fail-on-warning': $this->arguments['failOnWarning'] = true; break; case '--fail-on-risky': $this->arguments['failOnRisky'] = true; break; case '--teamcity': $this->arguments['printer'] = TeamCity::class; break; case '--testdox': $this->arguments['printer'] = CliTestDoxPrinter::class; break; case '--testdox-group': $this->arguments['testdoxGroups'] = explode( ',', $option[1] ); break; case '--testdox-exclude-group': $this->arguments['testdoxExcludeGroups'] = explode( ',', $option[1] ); break; case '--testdox-html': $this->arguments['testdoxHTMLFile'] = $option[1]; break; case '--testdox-text': $this->arguments['testdoxTextFile'] = $option[1]; break; case '--testdox-xml': $this->arguments['testdoxXMLFile'] = $option[1]; break; case '--no-configuration': $this->arguments['useDefaultConfiguration'] = false; break; case '--no-extensions': $this->arguments['noExtensions'] = true; break; case '--no-coverage': $this->arguments['noCoverage'] = true; break; case '--no-logging': $this->arguments['noLogging'] = true; break; case '--no-interaction': $this->arguments['noInteraction'] = true; break; case '--globals-backup': $this->arguments['backupGlobals'] = true; break; case '--static-backup': $this->arguments['backupStaticAttributes'] = true; break; case 'v': case '--verbose': $this->arguments['verbose'] = true; break; case '--atleast-version': if (version_compare(Version::id(), $option[1], '>=')) { exit(TestRunner::SUCCESS_EXIT); } exit(TestRunner::FAILURE_EXIT); break; case '--version': $this->printVersionString(); exit(TestRunner::SUCCESS_EXIT); break; case '--dont-report-useless-tests': $this->arguments['reportUselessTests'] = false; break; case '--strict-coverage': $this->arguments['strictCoverage'] = true; break; case '--disable-coverage-ignore': $this->arguments['disableCodeCoverageIgnore'] = true; break; case '--strict-global-state': $this->arguments['beStrictAboutChangesToGlobalState'] = true; break; case '--disallow-test-output': $this->arguments['disallowTestOutput'] = true; break; case '--disallow-resource-usage': $this->arguments['beStrictAboutResourceUsageDuringSmallTests'] = true; break; case '--default-time-limit': $this->arguments['defaultTimeLimit'] = (int) $option[1]; break; case '--enforce-time-limit': $this->arguments['enforceTimeLimit'] = true; break; case '--disallow-todo-tests': $this->arguments['disallowTodoAnnotatedTests'] = true; break; case '--reverse-list': $this->arguments['reverseList'] = true; break; case '--check-version': $this->handleVersionCheck(); break; case '--whitelist': $this->arguments['whitelist'] = $option[1]; break; case '--random-order': $this->handleOrderByOption('random'); break; case '--random-order-seed': $this->arguments['randomOrderSeed'] = (int) $option[1]; break; case '--resolve-dependencies': $this->handleOrderByOption('depends'); break; case '--ignore-dependencies': $this->handleOrderByOption('no-depends'); break; case '--reverse-order': $this->handleOrderByOption('reverse'); break; case '--dump-xdebug-filter': $this->arguments['xdebugFilterFile'] = $option[1]; break; default: $optionName = str_replace('--', '', $option[0]); $handler = null; if (isset($this->longOptions[$optionName])) { $handler = $this->longOptions[$optionName]; } elseif (isset($this->longOptions[$optionName . '='])) { $handler = $this->longOptions[$optionName . '=']; } if (isset($handler) && is_callable([$this, $handler])) { $this->{$handler}($option[1]); } } } $this->handleCustomTestSuite(); if (!isset($this->arguments['testSuffixes'])) { $this->arguments['testSuffixes'] = ['Test.php', '.phpt']; } if (isset($this->options[1][0]) && substr($this->options[1][0], -5, 5) !== '.phpt' && substr($this->options[1][0], -4, 4) !== '.php' && substr($this->options[1][0], -1, 1) !== '/' && !is_dir($this->options[1][0])) { $this->warnings[] = 'Invocation with class name is deprecated'; } if (!isset($this->arguments['test'])) { if (isset($this->options[1][0])) { $this->arguments['test'] = $this->options[1][0]; } if (isset($this->options[1][1])) { $testFile = realpath($this->options[1][1]); if ($testFile === false) { $this->exitWithErrorMessage( sprintf( 'Cannot open file "%s".', $this->options[1][1] ) ); } $this->arguments['testFile'] = $testFile; } else { $this->arguments['testFile'] = ''; } if (isset($this->arguments['test']) && is_file($this->arguments['test']) && strrpos($this->arguments['test'], '.') !== false && substr($this->arguments['test'], -5, 5) !== '.phpt') { $this->arguments['testFile'] = realpath($this->arguments['test']); $this->arguments['test'] = substr($this->arguments['test'], 0, strrpos($this->arguments['test'], '.')); } if (isset($this->arguments['test']) && is_string($this->arguments['test']) && substr($this->arguments['test'], -5, 5) === '.phpt') { $suite = new TestSuite; $suite->addTestFile($this->arguments['test']); $this->arguments['test'] = $suite; } } if (isset($includePath)) { ini_set( 'include_path', $includePath . PATH_SEPARATOR . ini_get('include_path') ); } if ($this->arguments['loader'] !== null) { $this->arguments['loader'] = $this->handleLoader($this->arguments['loader']); } if (isset($this->arguments['configuration']) && is_dir($this->arguments['configuration'])) { $configurationFile = $this->arguments['configuration'] . '/phpunit.xml'; if (file_exists($configurationFile)) { $this->arguments['configuration'] = realpath( $configurationFile ); } elseif (file_exists($configurationFile . '.dist')) { $this->arguments['configuration'] = realpath( $configurationFile . '.dist' ); } } elseif (!isset($this->arguments['configuration']) && $this->arguments['useDefaultConfiguration']) { if (file_exists('phpunit.xml')) { $this->arguments['configuration'] = realpath('phpunit.xml'); } elseif (file_exists('phpunit.xml.dist')) { $this->arguments['configuration'] = realpath( 'phpunit.xml.dist' ); } } if (isset($this->arguments['configuration'])) { try { $configuration = Configuration::getInstance( $this->arguments['configuration'] ); } catch (Throwable $t) { print $t->getMessage() . PHP_EOL; exit(TestRunner::FAILURE_EXIT); } $phpunitConfiguration = $configuration->getPHPUnitConfiguration(); $configuration->handlePHPConfiguration(); /* * Issue #1216 */ if (isset($this->arguments['bootstrap'])) { $this->handleBootstrap($this->arguments['bootstrap']); } elseif (isset($phpunitConfiguration['bootstrap'])) { $this->handleBootstrap($phpunitConfiguration['bootstrap']); } /* * Issue #657 */ if (isset($phpunitConfiguration['stderr']) && !isset($this->arguments['stderr'])) { $this->arguments['stderr'] = $phpunitConfiguration['stderr']; } if (isset($phpunitConfiguration['extensionsDirectory']) && !isset($this->arguments['noExtensions']) && extension_loaded('phar')) { $this->handleExtensions($phpunitConfiguration['extensionsDirectory']); } if (isset($phpunitConfiguration['columns']) && !isset($this->arguments['columns'])) { $this->arguments['columns'] = $phpunitConfiguration['columns']; } if (!isset($this->arguments['printer']) && isset($phpunitConfiguration['printerClass'])) { $file = $phpunitConfiguration['printerFile'] ?? ''; $this->arguments['printer'] = $this->handlePrinter( $phpunitConfiguration['printerClass'], $file ); } if (isset($phpunitConfiguration['testSuiteLoaderClass'])) { $file = $phpunitConfiguration['testSuiteLoaderFile'] ?? ''; $this->arguments['loader'] = $this->handleLoader( $phpunitConfiguration['testSuiteLoaderClass'], $file ); } if (!isset($this->arguments['testsuite']) && isset($phpunitConfiguration['defaultTestSuite'])) { $this->arguments['testsuite'] = $phpunitConfiguration['defaultTestSuite']; } if (!isset($this->arguments['test'])) { $testSuite = $configuration->getTestSuiteConfiguration($this->arguments['testsuite'] ?? ''); if ($testSuite !== null) { $this->arguments['test'] = $testSuite; } } } elseif (isset($this->arguments['bootstrap'])) { $this->handleBootstrap($this->arguments['bootstrap']); } if (isset($this->arguments['printer']) && is_string($this->arguments['printer'])) { $this->arguments['printer'] = $this->handlePrinter($this->arguments['printer']); } if (!isset($this->arguments['test'])) { $this->showHelp(); exit(TestRunner::EXCEPTION_EXIT); } } /** * Handles the loading of the PHPUnit\Runner\TestSuiteLoader implementation. */ protected function handleLoader(string $loaderClass, string $loaderFile = ''): ?TestSuiteLoader { if (!class_exists($loaderClass, false)) { if ($loaderFile == '') { $loaderFile = Filesystem::classNameToFilename( $loaderClass ); } $loaderFile = stream_resolve_include_path($loaderFile); if ($loaderFile) { require $loaderFile; } } if (class_exists($loaderClass, false)) { try { $class = new ReflectionClass($loaderClass); // @codeCoverageIgnoreStart } catch (ReflectionException $e) { throw new Exception( $e->getMessage(), $e->getCode(), $e ); } // @codeCoverageIgnoreEnd if ($class->implementsInterface(TestSuiteLoader::class) && $class->isInstantiable()) { $object = $class->newInstance(); assert($object instanceof TestSuiteLoader); return $object; } } if ($loaderClass == StandardTestSuiteLoader::class) { return null; } $this->exitWithErrorMessage( sprintf( 'Could not use "%s" as loader.', $loaderClass ) ); return null; } /** * Handles the loading of the PHPUnit\Util\Printer implementation. * * @return null|Printer|string */ protected function handlePrinter(string $printerClass, string $printerFile = '') { if (!class_exists($printerClass, false)) { if ($printerFile == '') { $printerFile = Filesystem::classNameToFilename( $printerClass ); } $printerFile = stream_resolve_include_path($printerFile); if ($printerFile) { require $printerFile; } } if (!class_exists($printerClass)) { $this->exitWithErrorMessage( sprintf( 'Could not use "%s" as printer: class does not exist', $printerClass ) ); } try { $class = new ReflectionClass($printerClass); // @codeCoverageIgnoreStart } catch (ReflectionException $e) { throw new Exception( $e->getMessage(), $e->getCode(), $e ); // @codeCoverageIgnoreEnd } if (!$class->implementsInterface(TestListener::class)) { $this->exitWithErrorMessage( sprintf( 'Could not use "%s" as printer: class does not implement %s', $printerClass, TestListener::class ) ); } if (!$class->isSubclassOf(Printer::class)) { $this->exitWithErrorMessage( sprintf( 'Could not use "%s" as printer: class does not extend %s', $printerClass, Printer::class ) ); } if (!$class->isInstantiable()) { $this->exitWithErrorMessage( sprintf( 'Could not use "%s" as printer: class cannot be instantiated', $printerClass ) ); } if ($class->isSubclassOf(ResultPrinter::class)) { return $printerClass; } $outputStream = isset($this->arguments['stderr']) ? 'php://stderr' : null; return $class->newInstance($outputStream); } /** * Loads a bootstrap file. */ protected function handleBootstrap(string $filename): void { try { FileLoader::checkAndLoad($filename); } catch (Exception $e) { $this->exitWithErrorMessage($e->getMessage()); } } protected function handleVersionCheck(): void { $this->printVersionString(); $latestVersion = file_get_contents('https://phar.phpunit.de/latest-version-of/phpunit'); $latestCompatibleVersion = file_get_contents('https://phar.phpunit.de/latest-version-of/phpunit-' . explode('.', Version::series())[0]); $notLatest = version_compare($latestVersion, Version::id(), '>'); $notLatestCompatible = version_compare($latestCompatibleVersion, Version::id(), '>'); if ($notLatest || $notLatestCompatible) { print 'You are not using the latest version of PHPUnit.' . PHP_EOL; } else { print 'You are using the latest version of PHPUnit.' . PHP_EOL; } if ($notLatestCompatible) { printf( 'The latest version compatible with PHPUnit %s is PHPUnit %s.' . PHP_EOL, Version::id(), $latestCompatibleVersion ); } if ($notLatest) { printf( 'The latest version is PHPUnit %s.' . PHP_EOL, $latestVersion ); } exit(TestRunner::SUCCESS_EXIT); } /** * Show the help message. */ protected function showHelp(): void { $this->printVersionString(); (new Help)->writeToConsole(); } /** * Custom callback for test suite discovery. */ protected function handleCustomTestSuite(): void { } private function printVersionString(): void { if ($this->versionStringPrinted) { return; } print Version::getVersionString() . PHP_EOL . PHP_EOL; $this->versionStringPrinted = true; } private function exitWithErrorMessage(string $message): void { $this->printVersionString(); print $message . PHP_EOL; exit(TestRunner::FAILURE_EXIT); } private function handleExtensions(string $directory): void { foreach ((new FileIteratorFacade)->getFilesAsArray($directory, '.phar') as $file) { if (!file_exists('phar://' . $file . '/manifest.xml')) { $this->arguments['notLoadedExtensions'][] = $file . ' is not an extension for PHPUnit'; continue; } try { $applicationName = new ApplicationName('phpunit/phpunit'); $version = new PharIoVersion(Version::series()); $manifest = ManifestLoader::fromFile('phar://' . $file . '/manifest.xml'); if (!$manifest->isExtensionFor($applicationName)) { $this->arguments['notLoadedExtensions'][] = $file . ' is not an extension for PHPUnit'; continue; } if (!$manifest->isExtensionFor($applicationName, $version)) { $this->arguments['notLoadedExtensions'][] = $file . ' is not compatible with this version of PHPUnit'; continue; } } catch (ManifestException $e) { $this->arguments['notLoadedExtensions'][] = $file . ': ' . $e->getMessage(); continue; } require $file; $this->arguments['loadedExtensions'][] = $manifest->getName()->asString() . ' ' . $manifest->getVersion()->getVersionString(); } } private function handleListGroups(TestSuite $suite, bool $exit): int { $this->printVersionString(); $this->warnAboutConflictingOptions( 'listGroups', [ 'filter', 'groups', 'excludeGroups', 'testsuite', ] ); print 'Available test group(s):' . PHP_EOL; $groups = $suite->getGroups(); sort($groups); foreach ($groups as $group) { printf( ' - %s' . PHP_EOL, $group ); } if ($exit) { exit(TestRunner::SUCCESS_EXIT); } return TestRunner::SUCCESS_EXIT; } /** * @throws Exception */ private function handleListSuites(bool $exit): int { $this->printVersionString(); $this->warnAboutConflictingOptions( 'listSuites', [ 'filter', 'groups', 'excludeGroups', 'testsuite', ] ); print 'Available test suite(s):' . PHP_EOL; $configuration = Configuration::getInstance( $this->arguments['configuration'] ); foreach ($configuration->getTestSuiteNames() as $suiteName) { printf( ' - %s' . PHP_EOL, $suiteName ); } if ($exit) { exit(TestRunner::SUCCESS_EXIT); } return TestRunner::SUCCESS_EXIT; } /** * @throws InvalidArgumentException */ private function handleListTests(TestSuite $suite, bool $exit): int { $this->printVersionString(); $this->warnAboutConflictingOptions( 'listTests', [ 'filter', 'groups', 'excludeGroups', ] ); $renderer = new TextTestListRenderer; print $renderer->render($suite); if ($exit) { exit(TestRunner::SUCCESS_EXIT); } return TestRunner::SUCCESS_EXIT; } /** * @throws InvalidArgumentException */ private function handleListTestsXml(TestSuite $suite, string $target, bool $exit): int { $this->printVersionString(); $this->warnAboutConflictingOptions( 'listTestsXml', [ 'filter', 'groups', 'excludeGroups', ] ); $renderer = new XmlTestListRenderer; file_put_contents($target, $renderer->render($suite)); printf( 'Wrote list of tests that would have been run to %s' . PHP_EOL, $target ); if ($exit) { exit(TestRunner::SUCCESS_EXIT); } return TestRunner::SUCCESS_EXIT; } private function handleOrderByOption(string $value): void { foreach (explode(',', $value) as $order) { switch ($order) { case 'default': $this->arguments['executionOrder'] = TestSuiteSorter::ORDER_DEFAULT; $this->arguments['executionOrderDefects'] = TestSuiteSorter::ORDER_DEFAULT; $this->arguments['resolveDependencies'] = true; break; case 'defects': $this->arguments['executionOrderDefects'] = TestSuiteSorter::ORDER_DEFECTS_FIRST; break; case 'depends': $this->arguments['resolveDependencies'] = true; break; case 'duration': $this->arguments['executionOrder'] = TestSuiteSorter::ORDER_DURATION; break; case 'no-depends': $this->arguments['resolveDependencies'] = false; break; case 'random': $this->arguments['executionOrder'] = TestSuiteSorter::ORDER_RANDOMIZED; break; case 'reverse': $this->arguments['executionOrder'] = TestSuiteSorter::ORDER_REVERSED; break; case 'size': $this->arguments['executionOrder'] = TestSuiteSorter::ORDER_SIZE; break; default: $this->exitWithErrorMessage("unrecognized --order-by option: {$order}"); } } } /** * @psalm-param "listGroups"|"listSuites"|"listTests"|"listTestsXml"|"filter"|"groups"|"excludeGroups"|"testsuite" $key * @psalm-param list<"listGroups"|"listSuites"|"listTests"|"listTestsXml"|"filter"|"groups"|"excludeGroups"|"testsuite"> $keys */ private function warnAboutConflictingOptions(string $key, array $keys): void { $warningPrinted = false; foreach ($keys as $_key) { if (!empty($this->arguments[$_key])) { printf( 'The %s and %s options cannot be combined, %s is ignored' . PHP_EOL, $this->mapKeyToOptionForWarning($_key), $this->mapKeyToOptionForWarning($key), $this->mapKeyToOptionForWarning($_key) ); $warningPrinted = true; } } if ($warningPrinted) { print PHP_EOL; } } /** * @psalm-param "listGroups"|"listSuites"|"listTests"|"listTestsXml"|"filter"|"groups"|"excludeGroups"|"testsuite" $key */ private function mapKeyToOptionForWarning(string $key): string { switch ($key) { case 'listGroups': return '--list-groups'; case 'listSuites': return '--list-suites'; case 'listTests': return '--list-tests'; case 'listTestsXml': return '--list-tests-xml'; case 'filter': return '--filter'; case 'groups': return '--group'; case 'excludeGroups': return '--exclude-group'; case 'testsuite': return '--testsuite'; } } } PK!… +Jááafile-manager-advanced/application/svg-sanitizer/includes/phpunit/phpunit/src/TextUI/Exception.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace PHPUnit\TextUI; use RuntimeException; /** * @internal This class is not covered by the backward compatibility promise for PHPUnit */ final class Exception extends RuntimeException implements \PHPUnit\Exception { } PK!ºe €ê5ê5\file-manager-advanced/application/svg-sanitizer/includes/phpunit/phpunit/src/TextUI/Help.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace PHPUnit\TextUI; use const PHP_EOL; use function count; use function defined; use function explode; use function max; use function preg_replace_callback; use function str_pad; use function str_repeat; use function strlen; use function wordwrap; use PHPUnit\Util\Color; use SebastianBergmann\Environment\Console; /** * @internal This class is not covered by the backward compatibility promise for PHPUnit */ final class Help { private const LEFT_MARGIN = ' '; /** * @var int Number of columns required to write the longest option name to the console */ private $maxArgLength = 0; /** * @var int Number of columns left for the description field after padding and option */ private $maxDescLength; /** * @var bool Use color highlights for sections, options and parameters */ private $hasColor = false; public function __construct(?int $width = null, ?bool $withColor = null) { if ($width === null) { $width = (new Console)->getNumberOfColumns(); } if ($withColor === null) { $this->hasColor = (new Console)->hasColorSupport(); } else { $this->hasColor = $withColor; } foreach ($this->elements() as $options) { foreach ($options as $option) { if (isset($option['arg'])) { $this->maxArgLength = max($this->maxArgLength, isset($option['arg']) ? strlen($option['arg']) : 0); } } } $this->maxDescLength = $width - $this->maxArgLength - 4; } /** * Write the help file to the CLI, adapting width and colors to the console. */ public function writeToConsole(): void { if ($this->hasColor) { $this->writeWithColor(); } else { $this->writePlaintext(); } } private function writePlaintext(): void { foreach ($this->elements() as $section => $options) { print "{$section}:" . PHP_EOL; if ($section !== 'Usage') { print PHP_EOL; } foreach ($options as $option) { if (isset($option['spacer'])) { print PHP_EOL; } if (isset($option['text'])) { print self::LEFT_MARGIN . $option['text'] . PHP_EOL; } if (isset($option['arg'])) { $arg = str_pad($option['arg'], $this->maxArgLength); print self::LEFT_MARGIN . $arg . ' ' . $option['desc'] . PHP_EOL; } } print PHP_EOL; } } private function writeWithColor(): void { foreach ($this->elements() as $section => $options) { print Color::colorize('fg-yellow', "{$section}:") . PHP_EOL; foreach ($options as $option) { if (isset($option['spacer'])) { print PHP_EOL; } if (isset($option['text'])) { print self::LEFT_MARGIN . $option['text'] . PHP_EOL; } if (isset($option['arg'])) { $arg = Color::colorize('fg-green', str_pad($option['arg'], $this->maxArgLength)); $arg = preg_replace_callback( '/(<[^>]+>)/', static function ($matches) { return Color::colorize('fg-cyan', $matches[0]); }, $arg ); $desc = explode(PHP_EOL, wordwrap($option['desc'], $this->maxDescLength, PHP_EOL)); print self::LEFT_MARGIN . $arg . ' ' . $desc[0] . PHP_EOL; for ($i = 1; $i < count($desc); $i++) { print str_repeat(' ', $this->maxArgLength + 3) . $desc[$i] . PHP_EOL; } } } print PHP_EOL; } } /** * @psalm-return array> */ private function elements(): array { $elements = [ 'Usage' => [ ['text' => 'phpunit [options] UnitTest [UnitTest.php]'], ['text' => 'phpunit [options] '], ], 'Code Coverage Options' => [ ['arg' => '--coverage-clover ', 'desc' => 'Generate code coverage report in Clover XML format'], ['arg' => '--coverage-crap4j ', 'desc' => 'Generate code coverage report in Crap4J XML format'], ['arg' => '--coverage-html ', 'desc' => 'Generate code coverage report in HTML format'], ['arg' => '--coverage-php ', 'desc' => 'Export PHP_CodeCoverage object to file'], ['arg' => '--coverage-text=', 'desc' => 'Generate code coverage report in text format [default: standard output]'], ['arg' => '--coverage-xml ', 'desc' => 'Generate code coverage report in PHPUnit XML format'], ['arg' => '--whitelist ', 'desc' => 'Whitelist for code coverage analysis'], ['arg' => '--disable-coverage-ignore', 'desc' => 'Disable annotations for ignoring code coverage'], ['arg' => '--no-coverage', 'desc' => 'Ignore code coverage configuration'], ['arg' => '--dump-xdebug-filter ', 'desc' => 'Generate script to set Xdebug code coverage filter'], ], 'Logging Options' => [ ['arg' => '--log-junit ', 'desc' => 'Log test execution in JUnit XML format to file'], ['arg' => '--log-teamcity ', 'desc' => 'Log test execution in TeamCity format to file'], ['arg' => '--testdox-html ', 'desc' => 'Write agile documentation in HTML format to file'], ['arg' => '--testdox-text ', 'desc' => 'Write agile documentation in Text format to file'], ['arg' => '--testdox-xml ', 'desc' => 'Write agile documentation in XML format to file'], ['arg' => '--reverse-list', 'desc' => 'Print defects in reverse order'], ['arg' => '--no-logging', 'desc' => 'Ignore logging configuration'], ], 'Test Selection Options' => [ ['arg' => '--filter ', 'desc' => 'Filter which tests to run'], ['arg' => '--testsuite ', 'desc' => 'Filter which testsuite to run'], ['arg' => '--group ', 'desc' => 'Only runs tests from the specified group(s)'], ['arg' => '--exclude-group ', 'desc' => 'Exclude tests from the specified group(s)'], ['arg' => '--list-groups', 'desc' => 'List available test groups'], ['arg' => '--list-suites', 'desc' => 'List available test suites'], ['arg' => '--list-tests', 'desc' => 'List available tests'], ['arg' => '--list-tests-xml ', 'desc' => 'List available tests in XML format'], ['arg' => '--test-suffix ', 'desc' => 'Only search for test in files with specified suffix(es). Default: Test.php,.phpt'], ], 'Test Execution Options' => [ ['arg' => '--dont-report-useless-tests', 'desc' => 'Do not report tests that do not test anything'], ['arg' => '--strict-coverage', 'desc' => 'Be strict about @covers annotation usage'], ['arg' => '--strict-global-state', 'desc' => 'Be strict about changes to global state'], ['arg' => '--disallow-test-output', 'desc' => 'Be strict about output during tests'], ['arg' => '--disallow-resource-usage', 'desc' => 'Be strict about resource usage during small tests'], ['arg' => '--enforce-time-limit', 'desc' => 'Enforce time limit based on test size'], ['arg' => '--default-time-limit=', 'desc' => 'Timeout in seconds for tests without @small, @medium or @large'], ['arg' => '--disallow-todo-tests', 'desc' => 'Disallow @todo-annotated tests'], ['spacer' => ''], ['arg' => '--process-isolation', 'desc' => 'Run each test in a separate PHP process'], ['arg' => '--globals-backup', 'desc' => 'Backup and restore $GLOBALS for each test'], ['arg' => '--static-backup', 'desc' => 'Backup and restore static attributes for each test'], ['spacer' => ''], ['arg' => '--colors=', 'desc' => 'Use colors in output ("never", "auto" or "always")'], ['arg' => '--columns ', 'desc' => 'Number of columns to use for progress output'], ['arg' => '--columns max', 'desc' => 'Use maximum number of columns for progress output'], ['arg' => '--stderr', 'desc' => 'Write to STDERR instead of STDOUT'], ['arg' => '--stop-on-defect', 'desc' => 'Stop execution upon first not-passed test'], ['arg' => '--stop-on-error', 'desc' => 'Stop execution upon first error'], ['arg' => '--stop-on-failure', 'desc' => 'Stop execution upon first error or failure'], ['arg' => '--stop-on-warning', 'desc' => 'Stop execution upon first warning'], ['arg' => '--stop-on-risky', 'desc' => 'Stop execution upon first risky test'], ['arg' => '--stop-on-skipped', 'desc' => 'Stop execution upon first skipped test'], ['arg' => '--stop-on-incomplete', 'desc' => 'Stop execution upon first incomplete test'], ['arg' => '--fail-on-warning', 'desc' => 'Treat tests with warnings as failures'], ['arg' => '--fail-on-risky', 'desc' => 'Treat risky tests as failures'], ['arg' => '-v|--verbose', 'desc' => 'Output more verbose information'], ['arg' => '--debug', 'desc' => 'Display debugging information'], ['spacer' => ''], ['arg' => '--loader ', 'desc' => 'TestSuiteLoader implementation to use'], ['arg' => '--repeat ', 'desc' => 'Runs the test(s) repeatedly'], ['arg' => '--teamcity', 'desc' => 'Report test execution progress in TeamCity format'], ['arg' => '--testdox', 'desc' => 'Report test execution progress in TestDox format'], ['arg' => '--testdox-group', 'desc' => 'Only include tests from the specified group(s)'], ['arg' => '--testdox-exclude-group', 'desc' => 'Exclude tests from the specified group(s)'], ['arg' => '--no-interaction', 'desc' => 'Disable TestDox progress animation'], ['arg' => '--printer ', 'desc' => 'TestListener implementation to use'], ['spacer' => ''], ['arg' => '--order-by=', 'desc' => 'Run tests in order: default|defects|duration|no-depends|random|reverse|size'], ['arg' => '--random-order-seed=', 'desc' => 'Use a specific random seed for random order'], ['arg' => '--cache-result', 'desc' => 'Write test results to cache file'], ['arg' => '--do-not-cache-result', 'desc' => 'Do not write test results to cache file'], ], 'Configuration Options' => [ ['arg' => '--prepend ', 'desc' => 'A PHP script that is included as early as possible'], ['arg' => '--bootstrap ', 'desc' => 'A PHP script that is included before the tests run'], ['arg' => '-c|--configuration ', 'desc' => 'Read configuration from XML file'], ['arg' => '--no-configuration', 'desc' => 'Ignore default configuration file (phpunit.xml)'], ['arg' => '--no-extensions', 'desc' => 'Do not load PHPUnit extensions'], ['arg' => '--include-path ', 'desc' => 'Prepend PHP\'s include_path with given path(s)'], ['arg' => '-d ', 'desc' => 'Sets a php.ini value'], ['arg' => '--generate-configuration', 'desc' => 'Generate configuration file with suggested settings'], ['arg' => '--cache-result-file=', 'desc' => 'Specify result cache path and filename'], ], ]; if (defined('__PHPUNIT_PHAR__')) { $elements['PHAR Options'] = [ ['arg' => '--manifest', 'desc' => 'Print Software Bill of Materials (SBOM) in plain-text format'], ['arg' => '--sbom', 'desc' => 'Print Software Bill of Materials (SBOM) in CycloneDX XML format'], ['arg' => '--composer-lock', 'desc' => 'Print composer.lock file used to build the PHAR'], ]; } $elements['Miscellaneous Options'] = [ ['arg' => '-h|--help', 'desc' => 'Prints this usage information'], ['arg' => '--version', 'desc' => 'Prints the version and exits'], ['arg' => '--atleast-version ', 'desc' => 'Checks that version is greater than min and exits'], ['arg' => '--check-version', 'desc' => 'Checks whether PHPUnit is the latest version and exits'], ]; return $elements; } } PK!½ÄùgÜgÜbfile-manager-advanced/application/svg-sanitizer/includes/phpunit/phpunit/src/TextUI/TestRunner.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace PHPUnit\TextUI; use const PHP_EOL; use const PHP_MAJOR_VERSION; use const PHP_SAPI; use function array_diff; use function assert; use function class_exists; use function count; use function dirname; use function extension_loaded; use function file_put_contents; use function htmlspecialchars; use function ini_get; use function is_int; use function is_string; use function is_subclass_of; use function mt_srand; use function range; use function realpath; use function sprintf; use function strpos; use function time; use PHPUnit\Framework\Exception; use PHPUnit\Framework\Test; use PHPUnit\Framework\TestCase; use PHPUnit\Framework\TestListener; use PHPUnit\Framework\TestResult; use PHPUnit\Framework\TestSuite; use PHPUnit\Runner\AfterLastTestHook; use PHPUnit\Runner\BaseTestRunner; use PHPUnit\Runner\BeforeFirstTestHook; use PHPUnit\Runner\DefaultTestResultCache; use PHPUnit\Runner\Filter\ExcludeGroupFilterIterator; use PHPUnit\Runner\Filter\Factory; use PHPUnit\Runner\Filter\IncludeGroupFilterIterator; use PHPUnit\Runner\Filter\NameFilterIterator; use PHPUnit\Runner\Hook; use PHPUnit\Runner\NullTestResultCache; use PHPUnit\Runner\ResultCacheExtension; use PHPUnit\Runner\StandardTestSuiteLoader; use PHPUnit\Runner\TestHook; use PHPUnit\Runner\TestListenerAdapter; use PHPUnit\Runner\TestSuiteLoader; use PHPUnit\Runner\TestSuiteSorter; use PHPUnit\Runner\Version; use PHPUnit\Util\Configuration; use PHPUnit\Util\Filesystem; use PHPUnit\Util\Log\JUnit; use PHPUnit\Util\Log\TeamCity; use PHPUnit\Util\Printer; use PHPUnit\Util\TestDox\CliTestDoxPrinter; use PHPUnit\Util\TestDox\HtmlResultPrinter; use PHPUnit\Util\TestDox\TextResultPrinter; use PHPUnit\Util\TestDox\XmlResultPrinter; use PHPUnit\Util\XdebugFilterScriptGenerator; use ReflectionClass; use ReflectionException; use SebastianBergmann\CodeCoverage\CodeCoverage; use SebastianBergmann\CodeCoverage\Exception as CodeCoverageException; use SebastianBergmann\CodeCoverage\Filter as CodeCoverageFilter; use SebastianBergmann\CodeCoverage\Report\Clover as CloverReport; use SebastianBergmann\CodeCoverage\Report\Crap4j as Crap4jReport; use SebastianBergmann\CodeCoverage\Report\Html\Facade as HtmlReport; use SebastianBergmann\CodeCoverage\Report\PHP as PhpReport; use SebastianBergmann\CodeCoverage\Report\Text as TextReport; use SebastianBergmann\CodeCoverage\Report\Xml\Facade as XmlReport; use SebastianBergmann\Comparator\Comparator; use SebastianBergmann\Environment\Runtime; use SebastianBergmann\Invoker\Invoker; use SebastianBergmann\Timer\Timer; /** * @internal This class is not covered by the backward compatibility promise for PHPUnit */ final class TestRunner extends BaseTestRunner { public const SUCCESS_EXIT = 0; public const FAILURE_EXIT = 1; public const EXCEPTION_EXIT = 2; /** * @var CodeCoverageFilter */ private $codeCoverageFilter; /** * @var TestSuiteLoader */ private $loader; /** * @psalm-var Printer&TestListener */ private $printer; /** * @var Runtime */ private $runtime; /** * @var bool */ private $messagePrinted = false; /** * @var Hook[] */ private $extensions = []; public function __construct(?TestSuiteLoader $loader = null, ?CodeCoverageFilter $filter = null) { if ($filter === null) { $filter = new CodeCoverageFilter; } $this->codeCoverageFilter = $filter; $this->loader = $loader; $this->runtime = new Runtime; } /** * @throws \PHPUnit\Runner\Exception * @throws Exception */ public function doRun(Test $suite, array $arguments = [], array $warnings = [], bool $exit = true): TestResult { if (isset($arguments['configuration'])) { $GLOBALS['__PHPUNIT_CONFIGURATION_FILE'] = $arguments['configuration']; } $this->handleConfiguration($arguments); if (is_int($arguments['columns']) && $arguments['columns'] < 16) { $arguments['columns'] = 16; $tooFewColumnsRequested = true; } if (isset($arguments['bootstrap'])) { $GLOBALS['__PHPUNIT_BOOTSTRAP'] = $arguments['bootstrap']; } if ($suite instanceof TestCase || $suite instanceof TestSuite) { if ($arguments['backupGlobals'] === true) { $suite->setBackupGlobals(true); } if ($arguments['backupStaticAttributes'] === true) { $suite->setBackupStaticAttributes(true); } if ($arguments['beStrictAboutChangesToGlobalState'] === true) { $suite->setBeStrictAboutChangesToGlobalState(true); } } if ($arguments['executionOrder'] === TestSuiteSorter::ORDER_RANDOMIZED) { mt_srand($arguments['randomOrderSeed']); } if ($arguments['cacheResult']) { if (!isset($arguments['cacheResultFile'])) { if (isset($arguments['configuration']) && $arguments['configuration'] instanceof Configuration) { $cacheLocation = $arguments['configuration']->getFilename(); } else { $cacheLocation = $_SERVER['PHP_SELF']; } $arguments['cacheResultFile'] = null; $cacheResultFile = realpath($cacheLocation); if ($cacheResultFile !== false) { $arguments['cacheResultFile'] = dirname($cacheResultFile); } } $cache = new DefaultTestResultCache($arguments['cacheResultFile']); $this->addExtension(new ResultCacheExtension($cache)); } if ($arguments['executionOrder'] !== TestSuiteSorter::ORDER_DEFAULT || $arguments['executionOrderDefects'] !== TestSuiteSorter::ORDER_DEFAULT || $arguments['resolveDependencies']) { $cache = $cache ?? new NullTestResultCache; $cache->load(); $sorter = new TestSuiteSorter($cache); $sorter->reorderTestsInSuite($suite, $arguments['executionOrder'], $arguments['resolveDependencies'], $arguments['executionOrderDefects']); $originalExecutionOrder = $sorter->getOriginalExecutionOrder(); unset($sorter); } if (is_int($arguments['repeat']) && $arguments['repeat'] > 0) { $_suite = new TestSuite; /* @noinspection PhpUnusedLocalVariableInspection */ foreach (range(1, $arguments['repeat']) as $step) { $_suite->addTest($suite); } $suite = $_suite; unset($_suite); } $result = $this->createTestResult(); $listener = new TestListenerAdapter; $listenerNeeded = false; foreach ($this->extensions as $extension) { if ($extension instanceof TestHook) { $listener->add($extension); $listenerNeeded = true; } } if ($listenerNeeded) { $result->addListener($listener); } unset($listener, $listenerNeeded); if ($arguments['convertDeprecationsToExceptions']) { $result->convertDeprecationsToExceptions(true); } if (!$arguments['convertErrorsToExceptions']) { $result->convertErrorsToExceptions(false); } if (!$arguments['convertNoticesToExceptions']) { $result->convertNoticesToExceptions(false); } if (!$arguments['convertWarningsToExceptions']) { $result->convertWarningsToExceptions(false); } if ($arguments['stopOnError']) { $result->stopOnError(true); } if ($arguments['stopOnFailure']) { $result->stopOnFailure(true); } if ($arguments['stopOnWarning']) { $result->stopOnWarning(true); } if ($arguments['stopOnIncomplete']) { $result->stopOnIncomplete(true); } if ($arguments['stopOnRisky']) { $result->stopOnRisky(true); } if ($arguments['stopOnSkipped']) { $result->stopOnSkipped(true); } if ($arguments['stopOnDefect']) { $result->stopOnDefect(true); } if ($arguments['registerMockObjectsFromTestArgumentsRecursively']) { $result->setRegisterMockObjectsFromTestArgumentsRecursively(true); } if ($this->printer === null) { if (isset($arguments['printer'])) { if ($arguments['printer'] instanceof Printer && $arguments['printer'] instanceof TestListener) { $this->printer = $arguments['printer']; } elseif (is_string($arguments['printer']) && class_exists($arguments['printer'], false)) { try { new ReflectionClass($arguments['printer']); // @codeCoverageIgnoreStart } catch (ReflectionException $e) { throw new Exception( $e->getMessage(), $e->getCode(), $e ); } // @codeCoverageIgnoreEnd if (is_subclass_of($arguments['printer'], ResultPrinter::class)) { $this->printer = $this->createPrinter($arguments['printer'], $arguments); } } } else { $this->printer = $this->createPrinter(ResultPrinter::class, $arguments); } } if (isset($originalExecutionOrder) && $this->printer instanceof CliTestDoxPrinter) { assert($this->printer instanceof CliTestDoxPrinter); $this->printer->setOriginalExecutionOrder($originalExecutionOrder); $this->printer->setShowProgressAnimation(!$arguments['noInteraction']); } $this->write(Version::getVersionString() . "\n"); if ($arguments['verbose']) { $this->writeMessage('Runtime', $this->runtime->getNameWithVersionAndCodeCoverageDriver()); if (isset($arguments['configuration'])) { $this->writeMessage( 'Configuration', $arguments['configuration']->getFilename() ); } foreach ($arguments['loadedExtensions'] as $extension) { $this->writeMessage( 'Extension', $extension ); } foreach ($arguments['notLoadedExtensions'] as $extension) { $this->writeMessage( 'Extension', $extension ); } } foreach ($warnings as $warning) { $this->writeMessage('Warning', $warning); } if ($arguments['executionOrder'] === TestSuiteSorter::ORDER_RANDOMIZED) { $this->writeMessage( 'Random seed', (string) $arguments['randomOrderSeed'] ); } if (isset($tooFewColumnsRequested)) { $this->writeMessage('Error', 'Less than 16 columns requested, number of columns set to 16'); } if ($this->runtime->discardsComments()) { $this->writeMessage('Warning', 'opcache.save_comments=0 set; annotations will not work'); } if (isset($arguments['configuration']) && $arguments['configuration']->hasValidationErrors()) { $this->write( "\n Warning - The configuration file did not pass validation!\n The following problems have been detected:\n" ); foreach ($arguments['configuration']->getValidationErrors() as $line => $errors) { $this->write(sprintf("\n Line %d:\n", $line)); foreach ($errors as $msg) { $this->write(sprintf(" - %s\n", $msg)); } } $this->write("\n Test results may not be as expected.\n\n"); } if (isset($arguments['conflictBetweenPrinterClassAndTestdox'])) { $this->writeMessage('Warning', 'Directives printerClass and testdox are mutually exclusive'); } foreach ($arguments['listeners'] as $listener) { $result->addListener($listener); } $result->addListener($this->printer); $codeCoverageReports = 0; if (!isset($arguments['noLogging'])) { if (isset($arguments['testdoxHTMLFile'])) { $result->addListener( new HtmlResultPrinter( $arguments['testdoxHTMLFile'], $arguments['testdoxGroups'], $arguments['testdoxExcludeGroups'] ) ); } if (isset($arguments['testdoxTextFile'])) { $result->addListener( new TextResultPrinter( $arguments['testdoxTextFile'], $arguments['testdoxGroups'], $arguments['testdoxExcludeGroups'] ) ); } if (isset($arguments['testdoxXMLFile'])) { $result->addListener( new XmlResultPrinter( $arguments['testdoxXMLFile'] ) ); } if (isset($arguments['teamcityLogfile'])) { $result->addListener( new TeamCity($arguments['teamcityLogfile']) ); } if (isset($arguments['junitLogfile'])) { $result->addListener( new JUnit( $arguments['junitLogfile'], $arguments['reportUselessTests'] ) ); } if (isset($arguments['coverageClover'])) { $codeCoverageReports++; } if (isset($arguments['coverageCrap4J'])) { $codeCoverageReports++; } if (isset($arguments['coverageHtml'])) { $codeCoverageReports++; } if (isset($arguments['coveragePHP'])) { $codeCoverageReports++; } if (isset($arguments['coverageText'])) { $codeCoverageReports++; } if (isset($arguments['coverageXml'])) { $codeCoverageReports++; } } if (isset($arguments['noCoverage'])) { $codeCoverageReports = 0; } if ($codeCoverageReports > 0 && PHP_MAJOR_VERSION < 8 && !$this->runtime->canCollectCodeCoverage()) { $this->writeMessage('Error', 'No code coverage driver is available'); $codeCoverageReports = 0; } if ($codeCoverageReports > 0 || isset($arguments['xdebugFilterFile'])) { $whitelistFromConfigurationFile = false; $whitelistFromOption = false; if (isset($arguments['whitelist'])) { $this->codeCoverageFilter->addDirectoryToWhitelist($arguments['whitelist']); $whitelistFromOption = true; } if (isset($arguments['configuration'])) { $filterConfiguration = $arguments['configuration']->getFilterConfiguration(); if (!empty($filterConfiguration['whitelist'])) { $whitelistFromConfigurationFile = true; } if (!empty($filterConfiguration['whitelist'])) { foreach ($filterConfiguration['whitelist']['include']['directory'] as $dir) { $this->codeCoverageFilter->addDirectoryToWhitelist( $dir['path'], $dir['suffix'], $dir['prefix'] ); } foreach ($filterConfiguration['whitelist']['include']['file'] as $file) { $this->codeCoverageFilter->addFileToWhitelist($file); } foreach ($filterConfiguration['whitelist']['exclude']['directory'] as $dir) { $this->codeCoverageFilter->removeDirectoryFromWhitelist( $dir['path'], $dir['suffix'], $dir['prefix'] ); } foreach ($filterConfiguration['whitelist']['exclude']['file'] as $file) { $this->codeCoverageFilter->removeFileFromWhitelist($file); } } } } if ($codeCoverageReports > 0) { if (PHP_MAJOR_VERSION >= 8) { $this->writeMessage('Error', 'This version of PHPUnit does not support code coverage on PHP 8'); $codeCoverageReports = 0; } else { try { $codeCoverage = new CodeCoverage( null, $this->codeCoverageFilter ); $codeCoverage->setUnintentionallyCoveredSubclassesWhitelist( [Comparator::class] ); $codeCoverage->setCheckForUnintentionallyCoveredCode( $arguments['strictCoverage'] ); $codeCoverage->setCheckForMissingCoversAnnotation( $arguments['strictCoverage'] ); if (isset($arguments['forceCoversAnnotation'])) { $codeCoverage->setForceCoversAnnotation( $arguments['forceCoversAnnotation'] ); } if (isset($arguments['ignoreDeprecatedCodeUnitsFromCodeCoverage'])) { $codeCoverage->setIgnoreDeprecatedCode( $arguments['ignoreDeprecatedCodeUnitsFromCodeCoverage'] ); } if (isset($arguments['disableCodeCoverageIgnore'])) { $codeCoverage->setDisableIgnoredLines(true); } if (!empty($filterConfiguration['whitelist'])) { $codeCoverage->setAddUncoveredFilesFromWhitelist( $filterConfiguration['whitelist']['addUncoveredFilesFromWhitelist'] ); $codeCoverage->setProcessUncoveredFilesFromWhitelist( $filterConfiguration['whitelist']['processUncoveredFilesFromWhitelist'] ); } if (!$this->codeCoverageFilter->hasWhitelist()) { if (!$whitelistFromConfigurationFile && !$whitelistFromOption) { $this->writeMessage('Error', 'No whitelist is configured, no code coverage will be generated.'); } else { $this->writeMessage('Error', 'Incorrect whitelist config, no code coverage will be generated.'); } $codeCoverageReports = 0; unset($codeCoverage); } } catch (CodeCoverageException $e) { $this->writeMessage('Error', $e->getMessage()); $codeCoverageReports = 0; } } } if (isset($arguments['xdebugFilterFile'], $filterConfiguration)) { $this->write("\n"); $script = (new XdebugFilterScriptGenerator)->generate($filterConfiguration['whitelist']); if ($arguments['xdebugFilterFile'] !== 'php://stdout' && $arguments['xdebugFilterFile'] !== 'php://stderr' && !Filesystem::createDirectory(dirname($arguments['xdebugFilterFile']))) { $this->write(sprintf('Cannot write Xdebug filter script to %s ' . PHP_EOL, $arguments['xdebugFilterFile'])); exit(self::EXCEPTION_EXIT); } file_put_contents($arguments['xdebugFilterFile'], $script); $this->write(sprintf('Wrote Xdebug filter script to %s ' . PHP_EOL, $arguments['xdebugFilterFile'])); exit(self::SUCCESS_EXIT); } $this->write("\n"); if (isset($codeCoverage)) { $result->setCodeCoverage($codeCoverage); if ($codeCoverageReports > 1 && isset($arguments['cacheTokens'])) { $codeCoverage->setCacheTokens($arguments['cacheTokens']); } } $result->beStrictAboutTestsThatDoNotTestAnything($arguments['reportUselessTests']); $result->beStrictAboutOutputDuringTests($arguments['disallowTestOutput']); $result->beStrictAboutTodoAnnotatedTests($arguments['disallowTodoAnnotatedTests']); $result->beStrictAboutResourceUsageDuringSmallTests($arguments['beStrictAboutResourceUsageDuringSmallTests']); if ($arguments['enforceTimeLimit'] === true) { if (!class_exists(Invoker::class)) { $this->writeMessage('Error', 'Package phpunit/php-invoker is required for enforcing time limits'); } if (!extension_loaded('pcntl') || strpos(ini_get('disable_functions'), 'pcntl') !== false) { $this->writeMessage('Error', 'PHP extension pcntl is required for enforcing time limits'); } } $result->enforceTimeLimit($arguments['enforceTimeLimit']); $result->setDefaultTimeLimit($arguments['defaultTimeLimit']); $result->setTimeoutForSmallTests($arguments['timeoutForSmallTests']); $result->setTimeoutForMediumTests($arguments['timeoutForMediumTests']); $result->setTimeoutForLargeTests($arguments['timeoutForLargeTests']); if ($suite instanceof TestSuite) { $this->processSuiteFilters($suite, $arguments); $suite->setRunTestInSeparateProcess($arguments['processIsolation']); } foreach ($this->extensions as $extension) { if ($extension instanceof BeforeFirstTestHook) { $extension->executeBeforeFirstTest(); } } $suite->run($result); foreach ($this->extensions as $extension) { if ($extension instanceof AfterLastTestHook) { $extension->executeAfterLastTest(); } } $result->flushListeners(); if ($this->printer instanceof ResultPrinter) { $this->printer->printResult($result); } if (isset($codeCoverage)) { if (isset($arguments['coverageClover'])) { $this->codeCoverageGenerationStart('Clover XML'); try { $writer = new CloverReport; $writer->process($codeCoverage, $arguments['coverageClover']); $this->codeCoverageGenerationSucceeded(); unset($writer); } catch (CodeCoverageException $e) { $this->codeCoverageGenerationFailed($e); } } if (isset($arguments['coverageCrap4J'])) { $this->codeCoverageGenerationStart('Crap4J XML'); try { $writer = new Crap4jReport($arguments['crap4jThreshold']); $writer->process($codeCoverage, $arguments['coverageCrap4J']); $this->codeCoverageGenerationSucceeded(); unset($writer); } catch (CodeCoverageException $e) { $this->codeCoverageGenerationFailed($e); } } if (isset($arguments['coverageHtml'])) { $this->codeCoverageGenerationStart('HTML'); try { $writer = new HtmlReport( $arguments['reportLowUpperBound'], $arguments['reportHighLowerBound'], sprintf( ' and PHPUnit %s', Version::id() ) ); $writer->process($codeCoverage, $arguments['coverageHtml']); $this->codeCoverageGenerationSucceeded(); unset($writer); } catch (CodeCoverageException $e) { $this->codeCoverageGenerationFailed($e); } } if (isset($arguments['coveragePHP'])) { $this->codeCoverageGenerationStart('PHP'); try { $writer = new PhpReport; $writer->process($codeCoverage, $arguments['coveragePHP']); $this->codeCoverageGenerationSucceeded(); unset($writer); } catch (CodeCoverageException $e) { $this->codeCoverageGenerationFailed($e); } } if (isset($arguments['coverageText'])) { if ($arguments['coverageText'] === 'php://stdout') { $outputStream = $this->printer; $colors = $arguments['colors'] && $arguments['colors'] !== ResultPrinter::COLOR_NEVER; } else { $outputStream = new Printer($arguments['coverageText']); $colors = false; } $processor = new TextReport( $arguments['reportLowUpperBound'], $arguments['reportHighLowerBound'], $arguments['coverageTextShowUncoveredFiles'], $arguments['coverageTextShowOnlySummary'] ); $outputStream->write( $processor->process($codeCoverage, $colors) ); } if (isset($arguments['coverageXml'])) { $this->codeCoverageGenerationStart('PHPUnit XML'); try { $writer = new XmlReport(Version::id()); $writer->process($codeCoverage, $arguments['coverageXml']); $this->codeCoverageGenerationSucceeded(); unset($writer); } catch (CodeCoverageException $e) { $this->codeCoverageGenerationFailed($e); } } } if ($exit) { if ($result->wasSuccessfulIgnoringWarnings()) { if ($arguments['failOnRisky'] && !$result->allHarmless()) { exit(self::FAILURE_EXIT); } if ($arguments['failOnWarning'] && $result->warningCount() > 0) { exit(self::FAILURE_EXIT); } exit(self::SUCCESS_EXIT); } if ($result->errorCount() > 0) { exit(self::EXCEPTION_EXIT); } if ($result->failureCount() > 0) { exit(self::FAILURE_EXIT); } } return $result; } public function setPrinter(ResultPrinter $resultPrinter): void { $this->printer = $resultPrinter; } /** * Returns the loader to be used. */ public function getLoader(): TestSuiteLoader { if ($this->loader === null) { $this->loader = new StandardTestSuiteLoader; } return $this->loader; } public function addExtension(Hook $extension): void { $this->extensions[] = $extension; } /** * Override to define how to handle a failed loading of * a test suite. */ protected function runFailed(string $message): void { $this->write($message . PHP_EOL); exit(self::FAILURE_EXIT); } private function createTestResult(): TestResult { return new TestResult; } private function write(string $buffer): void { if (PHP_SAPI !== 'cli' && PHP_SAPI !== 'phpdbg') { $buffer = htmlspecialchars($buffer); } if ($this->printer !== null) { $this->printer->write($buffer); } else { print $buffer; } } /** * @throws Exception */ private function handleConfiguration(array &$arguments): void { if (isset($arguments['configuration']) && !$arguments['configuration'] instanceof Configuration) { $arguments['configuration'] = Configuration::getInstance( $arguments['configuration'] ); } $arguments['debug'] = $arguments['debug'] ?? false; $arguments['filter'] = $arguments['filter'] ?? false; $arguments['listeners'] = $arguments['listeners'] ?? []; if (isset($arguments['configuration'])) { $arguments['configuration']->handlePHPConfiguration(); $phpunitConfiguration = $arguments['configuration']->getPHPUnitConfiguration(); if (isset($phpunitConfiguration['backupGlobals']) && !isset($arguments['backupGlobals'])) { $arguments['backupGlobals'] = $phpunitConfiguration['backupGlobals']; } if (isset($phpunitConfiguration['backupStaticAttributes']) && !isset($arguments['backupStaticAttributes'])) { $arguments['backupStaticAttributes'] = $phpunitConfiguration['backupStaticAttributes']; } if (isset($phpunitConfiguration['beStrictAboutChangesToGlobalState']) && !isset($arguments['beStrictAboutChangesToGlobalState'])) { $arguments['beStrictAboutChangesToGlobalState'] = $phpunitConfiguration['beStrictAboutChangesToGlobalState']; } if (isset($phpunitConfiguration['bootstrap']) && !isset($arguments['bootstrap'])) { $arguments['bootstrap'] = $phpunitConfiguration['bootstrap']; } if (isset($phpunitConfiguration['cacheResult']) && !isset($arguments['cacheResult'])) { $arguments['cacheResult'] = $phpunitConfiguration['cacheResult']; } if (isset($phpunitConfiguration['cacheResultFile']) && !isset($arguments['cacheResultFile'])) { $arguments['cacheResultFile'] = $phpunitConfiguration['cacheResultFile']; } if (isset($phpunitConfiguration['cacheTokens']) && !isset($arguments['cacheTokens'])) { $arguments['cacheTokens'] = $phpunitConfiguration['cacheTokens']; } if (isset($phpunitConfiguration['cacheTokens']) && !isset($arguments['cacheTokens'])) { $arguments['cacheTokens'] = $phpunitConfiguration['cacheTokens']; } if (isset($phpunitConfiguration['colors']) && !isset($arguments['colors'])) { $arguments['colors'] = $phpunitConfiguration['colors']; } if (isset($phpunitConfiguration['convertDeprecationsToExceptions']) && !isset($arguments['convertDeprecationsToExceptions'])) { $arguments['convertDeprecationsToExceptions'] = $phpunitConfiguration['convertDeprecationsToExceptions']; } if (isset($phpunitConfiguration['convertErrorsToExceptions']) && !isset($arguments['convertErrorsToExceptions'])) { $arguments['convertErrorsToExceptions'] = $phpunitConfiguration['convertErrorsToExceptions']; } if (isset($phpunitConfiguration['convertNoticesToExceptions']) && !isset($arguments['convertNoticesToExceptions'])) { $arguments['convertNoticesToExceptions'] = $phpunitConfiguration['convertNoticesToExceptions']; } if (isset($phpunitConfiguration['convertWarningsToExceptions']) && !isset($arguments['convertWarningsToExceptions'])) { $arguments['convertWarningsToExceptions'] = $phpunitConfiguration['convertWarningsToExceptions']; } if (isset($phpunitConfiguration['processIsolation']) && !isset($arguments['processIsolation'])) { $arguments['processIsolation'] = $phpunitConfiguration['processIsolation']; } if (isset($phpunitConfiguration['stopOnDefect']) && !isset($arguments['stopOnDefect'])) { $arguments['stopOnDefect'] = $phpunitConfiguration['stopOnDefect']; } if (isset($phpunitConfiguration['stopOnError']) && !isset($arguments['stopOnError'])) { $arguments['stopOnError'] = $phpunitConfiguration['stopOnError']; } if (isset($phpunitConfiguration['stopOnFailure']) && !isset($arguments['stopOnFailure'])) { $arguments['stopOnFailure'] = $phpunitConfiguration['stopOnFailure']; } if (isset($phpunitConfiguration['stopOnWarning']) && !isset($arguments['stopOnWarning'])) { $arguments['stopOnWarning'] = $phpunitConfiguration['stopOnWarning']; } if (isset($phpunitConfiguration['stopOnIncomplete']) && !isset($arguments['stopOnIncomplete'])) { $arguments['stopOnIncomplete'] = $phpunitConfiguration['stopOnIncomplete']; } if (isset($phpunitConfiguration['stopOnRisky']) && !isset($arguments['stopOnRisky'])) { $arguments['stopOnRisky'] = $phpunitConfiguration['stopOnRisky']; } if (isset($phpunitConfiguration['stopOnSkipped']) && !isset($arguments['stopOnSkipped'])) { $arguments['stopOnSkipped'] = $phpunitConfiguration['stopOnSkipped']; } if (isset($phpunitConfiguration['failOnWarning']) && !isset($arguments['failOnWarning'])) { $arguments['failOnWarning'] = $phpunitConfiguration['failOnWarning']; } if (isset($phpunitConfiguration['failOnRisky']) && !isset($arguments['failOnRisky'])) { $arguments['failOnRisky'] = $phpunitConfiguration['failOnRisky']; } if (isset($phpunitConfiguration['timeoutForSmallTests']) && !isset($arguments['timeoutForSmallTests'])) { $arguments['timeoutForSmallTests'] = $phpunitConfiguration['timeoutForSmallTests']; } if (isset($phpunitConfiguration['timeoutForMediumTests']) && !isset($arguments['timeoutForMediumTests'])) { $arguments['timeoutForMediumTests'] = $phpunitConfiguration['timeoutForMediumTests']; } if (isset($phpunitConfiguration['timeoutForLargeTests']) && !isset($arguments['timeoutForLargeTests'])) { $arguments['timeoutForLargeTests'] = $phpunitConfiguration['timeoutForLargeTests']; } if (isset($phpunitConfiguration['reportUselessTests']) && !isset($arguments['reportUselessTests'])) { $arguments['reportUselessTests'] = $phpunitConfiguration['reportUselessTests']; } if (isset($phpunitConfiguration['strictCoverage']) && !isset($arguments['strictCoverage'])) { $arguments['strictCoverage'] = $phpunitConfiguration['strictCoverage']; } if (isset($phpunitConfiguration['ignoreDeprecatedCodeUnitsFromCodeCoverage']) && !isset($arguments['ignoreDeprecatedCodeUnitsFromCodeCoverage'])) { $arguments['ignoreDeprecatedCodeUnitsFromCodeCoverage'] = $phpunitConfiguration['ignoreDeprecatedCodeUnitsFromCodeCoverage']; } if (isset($phpunitConfiguration['disallowTestOutput']) && !isset($arguments['disallowTestOutput'])) { $arguments['disallowTestOutput'] = $phpunitConfiguration['disallowTestOutput']; } if (isset($phpunitConfiguration['defaultTimeLimit']) && !isset($arguments['defaultTimeLimit'])) { $arguments['defaultTimeLimit'] = $phpunitConfiguration['defaultTimeLimit']; } if (isset($phpunitConfiguration['enforceTimeLimit']) && !isset($arguments['enforceTimeLimit'])) { $arguments['enforceTimeLimit'] = $phpunitConfiguration['enforceTimeLimit']; } if (isset($phpunitConfiguration['disallowTodoAnnotatedTests']) && !isset($arguments['disallowTodoAnnotatedTests'])) { $arguments['disallowTodoAnnotatedTests'] = $phpunitConfiguration['disallowTodoAnnotatedTests']; } if (isset($phpunitConfiguration['beStrictAboutResourceUsageDuringSmallTests']) && !isset($arguments['beStrictAboutResourceUsageDuringSmallTests'])) { $arguments['beStrictAboutResourceUsageDuringSmallTests'] = $phpunitConfiguration['beStrictAboutResourceUsageDuringSmallTests']; } if (isset($phpunitConfiguration['verbose']) && !isset($arguments['verbose'])) { $arguments['verbose'] = $phpunitConfiguration['verbose']; } if (isset($phpunitConfiguration['reverseDefectList']) && !isset($arguments['reverseList'])) { $arguments['reverseList'] = $phpunitConfiguration['reverseDefectList']; } if (isset($phpunitConfiguration['forceCoversAnnotation']) && !isset($arguments['forceCoversAnnotation'])) { $arguments['forceCoversAnnotation'] = $phpunitConfiguration['forceCoversAnnotation']; } if (isset($phpunitConfiguration['disableCodeCoverageIgnore']) && !isset($arguments['disableCodeCoverageIgnore'])) { $arguments['disableCodeCoverageIgnore'] = $phpunitConfiguration['disableCodeCoverageIgnore']; } if (isset($phpunitConfiguration['registerMockObjectsFromTestArgumentsRecursively']) && !isset($arguments['registerMockObjectsFromTestArgumentsRecursively'])) { $arguments['registerMockObjectsFromTestArgumentsRecursively'] = $phpunitConfiguration['registerMockObjectsFromTestArgumentsRecursively']; } if (isset($phpunitConfiguration['executionOrder']) && !isset($arguments['executionOrder'])) { $arguments['executionOrder'] = $phpunitConfiguration['executionOrder']; } if (isset($phpunitConfiguration['executionOrderDefects']) && !isset($arguments['executionOrderDefects'])) { $arguments['executionOrderDefects'] = $phpunitConfiguration['executionOrderDefects']; } if (isset($phpunitConfiguration['resolveDependencies']) && !isset($arguments['resolveDependencies'])) { $arguments['resolveDependencies'] = $phpunitConfiguration['resolveDependencies']; } if (isset($phpunitConfiguration['noInteraction']) && !isset($arguments['noInteraction'])) { $arguments['noInteraction'] = $phpunitConfiguration['noInteraction']; } if (isset($phpunitConfiguration['conflictBetweenPrinterClassAndTestdox'])) { $arguments['conflictBetweenPrinterClassAndTestdox'] = true; } $groupCliArgs = []; if (!empty($arguments['groups'])) { $groupCliArgs = $arguments['groups']; } $groupConfiguration = $arguments['configuration']->getGroupConfiguration(); if (!empty($groupConfiguration['include']) && !isset($arguments['groups'])) { $arguments['groups'] = $groupConfiguration['include']; } if (!empty($groupConfiguration['exclude']) && !isset($arguments['excludeGroups'])) { $arguments['excludeGroups'] = array_diff($groupConfiguration['exclude'], $groupCliArgs); } foreach ($arguments['configuration']->getExtensionConfiguration() as $extension) { if ($extension['file'] !== '' && !class_exists($extension['class'], false)) { require_once $extension['file']; } if (!class_exists($extension['class'])) { throw new Exception( sprintf( 'Class "%s" does not exist', $extension['class'] ) ); } try { $extensionClass = new ReflectionClass($extension['class']); // @codeCoverageIgnoreStart } catch (ReflectionException $e) { throw new Exception( $e->getMessage(), $e->getCode(), $e ); } // @codeCoverageIgnoreEnd if (!$extensionClass->implementsInterface(Hook::class)) { throw new Exception( sprintf( 'Class "%s" does not implement a PHPUnit\Runner\Hook interface', $extension['class'] ) ); } if (count($extension['arguments']) === 0) { $extensionObject = $extensionClass->newInstance(); } else { $extensionObject = $extensionClass->newInstanceArgs( $extension['arguments'] ); } assert($extensionObject instanceof Hook); $this->addExtension($extensionObject); } foreach ($arguments['configuration']->getListenerConfiguration() as $listener) { if ($listener['file'] !== '' && !class_exists($listener['class'], false)) { require_once $listener['file']; } if (!class_exists($listener['class'])) { throw new Exception( sprintf( 'Class "%s" does not exist', $listener['class'] ) ); } try { $listenerClass = new ReflectionClass($listener['class']); // @codeCoverageIgnoreStart } catch (ReflectionException $e) { throw new Exception( $e->getMessage(), $e->getCode(), $e ); } // @codeCoverageIgnoreEnd if (!$listenerClass->implementsInterface(TestListener::class)) { throw new Exception( sprintf( 'Class "%s" does not implement the PHPUnit\Framework\TestListener interface', $listener['class'] ) ); } if (count($listener['arguments']) === 0) { $listener = new $listener['class']; } else { $listener = $listenerClass->newInstanceArgs( $listener['arguments'] ); } $arguments['listeners'][] = $listener; } $loggingConfiguration = $arguments['configuration']->getLoggingConfiguration(); if (isset($loggingConfiguration['coverage-clover']) && !isset($arguments['coverageClover'])) { $arguments['coverageClover'] = $loggingConfiguration['coverage-clover']; } if (isset($loggingConfiguration['coverage-crap4j']) && !isset($arguments['coverageCrap4J'])) { $arguments['coverageCrap4J'] = $loggingConfiguration['coverage-crap4j']; if (isset($loggingConfiguration['crap4jThreshold']) && !isset($arguments['crap4jThreshold'])) { $arguments['crap4jThreshold'] = $loggingConfiguration['crap4jThreshold']; } } if (isset($loggingConfiguration['coverage-html']) && !isset($arguments['coverageHtml'])) { if (isset($loggingConfiguration['lowUpperBound']) && !isset($arguments['reportLowUpperBound'])) { $arguments['reportLowUpperBound'] = $loggingConfiguration['lowUpperBound']; } if (isset($loggingConfiguration['highLowerBound']) && !isset($arguments['reportHighLowerBound'])) { $arguments['reportHighLowerBound'] = $loggingConfiguration['highLowerBound']; } $arguments['coverageHtml'] = $loggingConfiguration['coverage-html']; } if (isset($loggingConfiguration['coverage-php']) && !isset($arguments['coveragePHP'])) { $arguments['coveragePHP'] = $loggingConfiguration['coverage-php']; } if (isset($loggingConfiguration['coverage-text']) && !isset($arguments['coverageText'])) { $arguments['coverageText'] = $loggingConfiguration['coverage-text']; $arguments['coverageTextShowUncoveredFiles'] = $loggingConfiguration['coverageTextShowUncoveredFiles'] ?? false; $arguments['coverageTextShowOnlySummary'] = $loggingConfiguration['coverageTextShowOnlySummary'] ?? false; } if (isset($loggingConfiguration['coverage-xml']) && !isset($arguments['coverageXml'])) { $arguments['coverageXml'] = $loggingConfiguration['coverage-xml']; } if (isset($loggingConfiguration['plain'])) { $arguments['listeners'][] = new ResultPrinter( $loggingConfiguration['plain'], true ); } if (isset($loggingConfiguration['teamcity']) && !isset($arguments['teamcityLogfile'])) { $arguments['teamcityLogfile'] = $loggingConfiguration['teamcity']; } if (isset($loggingConfiguration['junit']) && !isset($arguments['junitLogfile'])) { $arguments['junitLogfile'] = $loggingConfiguration['junit']; } if (isset($loggingConfiguration['testdox-html']) && !isset($arguments['testdoxHTMLFile'])) { $arguments['testdoxHTMLFile'] = $loggingConfiguration['testdox-html']; } if (isset($loggingConfiguration['testdox-text']) && !isset($arguments['testdoxTextFile'])) { $arguments['testdoxTextFile'] = $loggingConfiguration['testdox-text']; } if (isset($loggingConfiguration['testdox-xml']) && !isset($arguments['testdoxXMLFile'])) { $arguments['testdoxXMLFile'] = $loggingConfiguration['testdox-xml']; } $testdoxGroupConfiguration = $arguments['configuration']->getTestdoxGroupConfiguration(); if (isset($testdoxGroupConfiguration['include']) && !isset($arguments['testdoxGroups'])) { $arguments['testdoxGroups'] = $testdoxGroupConfiguration['include']; } if (isset($testdoxGroupConfiguration['exclude']) && !isset($arguments['testdoxExcludeGroups'])) { $arguments['testdoxExcludeGroups'] = $testdoxGroupConfiguration['exclude']; } } $arguments['addUncoveredFilesFromWhitelist'] = $arguments['addUncoveredFilesFromWhitelist'] ?? true; $arguments['backupGlobals'] = $arguments['backupGlobals'] ?? null; $arguments['backupStaticAttributes'] = $arguments['backupStaticAttributes'] ?? null; $arguments['beStrictAboutChangesToGlobalState'] = $arguments['beStrictAboutChangesToGlobalState'] ?? null; $arguments['beStrictAboutResourceUsageDuringSmallTests'] = $arguments['beStrictAboutResourceUsageDuringSmallTests'] ?? false; $arguments['cacheResult'] = $arguments['cacheResult'] ?? true; $arguments['cacheTokens'] = $arguments['cacheTokens'] ?? false; $arguments['colors'] = $arguments['colors'] ?? ResultPrinter::COLOR_DEFAULT; $arguments['columns'] = $arguments['columns'] ?? 80; $arguments['convertDeprecationsToExceptions'] = $arguments['convertDeprecationsToExceptions'] ?? false; $arguments['convertErrorsToExceptions'] = $arguments['convertErrorsToExceptions'] ?? true; $arguments['convertNoticesToExceptions'] = $arguments['convertNoticesToExceptions'] ?? true; $arguments['convertWarningsToExceptions'] = $arguments['convertWarningsToExceptions'] ?? true; $arguments['crap4jThreshold'] = $arguments['crap4jThreshold'] ?? 30; $arguments['disallowTestOutput'] = $arguments['disallowTestOutput'] ?? false; $arguments['disallowTodoAnnotatedTests'] = $arguments['disallowTodoAnnotatedTests'] ?? false; $arguments['defaultTimeLimit'] = $arguments['defaultTimeLimit'] ?? 0; $arguments['enforceTimeLimit'] = $arguments['enforceTimeLimit'] ?? false; $arguments['excludeGroups'] = $arguments['excludeGroups'] ?? []; $arguments['executionOrder'] = $arguments['executionOrder'] ?? TestSuiteSorter::ORDER_DEFAULT; $arguments['executionOrderDefects'] = $arguments['executionOrderDefects'] ?? TestSuiteSorter::ORDER_DEFAULT; $arguments['failOnRisky'] = $arguments['failOnRisky'] ?? false; $arguments['failOnWarning'] = $arguments['failOnWarning'] ?? false; $arguments['groups'] = $arguments['groups'] ?? []; $arguments['noInteraction'] = $arguments['noInteraction'] ?? false; $arguments['processIsolation'] = $arguments['processIsolation'] ?? false; $arguments['processUncoveredFilesFromWhitelist'] = $arguments['processUncoveredFilesFromWhitelist'] ?? false; $arguments['randomOrderSeed'] = $arguments['randomOrderSeed'] ?? time(); $arguments['registerMockObjectsFromTestArgumentsRecursively'] = $arguments['registerMockObjectsFromTestArgumentsRecursively'] ?? false; $arguments['repeat'] = $arguments['repeat'] ?? false; $arguments['reportHighLowerBound'] = $arguments['reportHighLowerBound'] ?? 90; $arguments['reportLowUpperBound'] = $arguments['reportLowUpperBound'] ?? 50; $arguments['reportUselessTests'] = $arguments['reportUselessTests'] ?? true; $arguments['reverseList'] = $arguments['reverseList'] ?? false; $arguments['resolveDependencies'] = $arguments['resolveDependencies'] ?? true; $arguments['stopOnError'] = $arguments['stopOnError'] ?? false; $arguments['stopOnFailure'] = $arguments['stopOnFailure'] ?? false; $arguments['stopOnIncomplete'] = $arguments['stopOnIncomplete'] ?? false; $arguments['stopOnRisky'] = $arguments['stopOnRisky'] ?? false; $arguments['stopOnSkipped'] = $arguments['stopOnSkipped'] ?? false; $arguments['stopOnWarning'] = $arguments['stopOnWarning'] ?? false; $arguments['stopOnDefect'] = $arguments['stopOnDefect'] ?? false; $arguments['strictCoverage'] = $arguments['strictCoverage'] ?? false; $arguments['testdoxExcludeGroups'] = $arguments['testdoxExcludeGroups'] ?? []; $arguments['testdoxGroups'] = $arguments['testdoxGroups'] ?? []; $arguments['timeoutForLargeTests'] = $arguments['timeoutForLargeTests'] ?? 60; $arguments['timeoutForMediumTests'] = $arguments['timeoutForMediumTests'] ?? 10; $arguments['timeoutForSmallTests'] = $arguments['timeoutForSmallTests'] ?? 1; $arguments['verbose'] = $arguments['verbose'] ?? false; if ($arguments['reportLowUpperBound'] > $arguments['reportHighLowerBound']) { $arguments['reportLowUpperBound'] = 50; $arguments['reportHighLowerBound'] = 90; } } private function processSuiteFilters(TestSuite $suite, array $arguments): void { if (!$arguments['filter'] && empty($arguments['groups']) && empty($arguments['excludeGroups'])) { return; } $filterFactory = new Factory; if (!empty($arguments['excludeGroups'])) { $filterFactory->addFilter( new ReflectionClass(ExcludeGroupFilterIterator::class), $arguments['excludeGroups'] ); } if (!empty($arguments['groups'])) { $filterFactory->addFilter( new ReflectionClass(IncludeGroupFilterIterator::class), $arguments['groups'] ); } if ($arguments['filter']) { $filterFactory->addFilter( new ReflectionClass(NameFilterIterator::class), $arguments['filter'] ); } $suite->injectFilter($filterFactory); } private function writeMessage(string $type, string $message): void { if (!$this->messagePrinted) { $this->write("\n"); } $this->write( sprintf( "%-15s%s\n", $type . ':', $message ) ); $this->messagePrinted = true; } /** * @template T as Printer * * @param class-string $class * * @return T */ private function createPrinter(string $class, array $arguments): Printer { return new $class( (isset($arguments['stderr']) && $arguments['stderr'] === true) ? 'php://stderr' : null, $arguments['verbose'], $arguments['colors'], $arguments['debug'], $arguments['columns'], $arguments['reverseList'] ); } private function codeCoverageGenerationStart(string $format): void { $this->write( sprintf( "\nGenerating code coverage report in %s format ... ", $format ) ); Timer::start(); } private function codeCoverageGenerationSucceeded(): void { $this->write( sprintf( "done [%s]\n", Timer::secondsToTimeString(Timer::stop()) ) ); } private function codeCoverageGenerationFailed(\Exception $e): void { $this->write( sprintf( "failed [%s]\n%s\n", Timer::secondsToTimeString(Timer::stop()), $e->getMessage() ) ); } } PK!<’õ™ŠŠffile-manager-advanced/application/svg-sanitizer/includes/phpunit/phpunit/src/Runner/BaseTestRunner.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace PHPUnit\Runner; use function is_dir; use function is_file; use PHPUnit\Framework\Exception; use PHPUnit\Framework\Test; use PHPUnit\Framework\TestSuite; use ReflectionClass; use ReflectionException; use SebastianBergmann\FileIterator\Facade as FileIteratorFacade; /** * @internal This class is not covered by the backward compatibility promise for PHPUnit */ abstract class BaseTestRunner { /** * @var int */ public const STATUS_UNKNOWN = -1; /** * @var int */ public const STATUS_PASSED = 0; /** * @var int */ public const STATUS_SKIPPED = 1; /** * @var int */ public const STATUS_INCOMPLETE = 2; /** * @var int */ public const STATUS_FAILURE = 3; /** * @var int */ public const STATUS_ERROR = 4; /** * @var int */ public const STATUS_RISKY = 5; /** * @var int */ public const STATUS_WARNING = 6; /** * @var string */ public const SUITE_METHODNAME = 'suite'; /** * Returns the loader to be used. */ public function getLoader(): TestSuiteLoader { return new StandardTestSuiteLoader; } /** * Returns the Test corresponding to the given suite. * This is a template method, subclasses override * the runFailed() and clearStatus() methods. * * @param string|string[] $suffixes * * @throws Exception */ public function getTest(string $suiteClassName, string $suiteClassFile = '', $suffixes = ''): ?Test { if (empty($suiteClassFile) && is_dir($suiteClassName) && !is_file($suiteClassName . '.php')) { /** @var string[] $files */ $files = (new FileIteratorFacade)->getFilesAsArray( $suiteClassName, $suffixes ); $suite = new TestSuite($suiteClassName); $suite->addTestFiles($files); return $suite; } try { $testClass = $this->loadSuiteClass( $suiteClassName, $suiteClassFile ); } catch (Exception $e) { $this->runFailed($e->getMessage()); return null; } try { $suiteMethod = $testClass->getMethod(self::SUITE_METHODNAME); if (!$suiteMethod->isStatic()) { $this->runFailed( 'suite() method must be static.' ); return null; } $test = $suiteMethod->invoke(null, $testClass->getName()); } catch (ReflectionException $e) { try { $test = new TestSuite($testClass); } catch (Exception $e) { $test = new TestSuite; $test->setName($suiteClassName); } } $this->clearStatus(); return $test; } /** * Returns the loaded ReflectionClass for a suite name. */ protected function loadSuiteClass(string $suiteClassName, string $suiteClassFile = ''): ReflectionClass { return $this->getLoader()->load($suiteClassName, $suiteClassFile); } /** * Clears the status message. */ protected function clearStatus(): void { } /** * Override to define how to handle a failed loading of * a test suite. */ abstract protected function runFailed(string $message): void; } PK!ÇY)ÉÒÒgfile-manager-advanced/application/svg-sanitizer/includes/phpunit/phpunit/src/Runner/TestResultCache.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace PHPUnit\Runner; /** * @internal This class is not covered by the backward compatibility promise for PHPUnit */ interface TestResultCache { public function setState(string $testName, int $state): void; public function getState(string $testName): int; public function setTime(string $testName, float $time): void; public function getTime(string $testName): float; public function load(): void; public function persist(): void; } PK!*Eúíínfile-manager-advanced/application/svg-sanitizer/includes/phpunit/phpunit/src/Runner/DefaultTestResultCache.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace PHPUnit\Runner; use const DIRECTORY_SEPARATOR; use const LOCK_EX; use function assert; use function dirname; use function file_get_contents; use function file_put_contents; use function in_array; use function is_array; use function is_dir; use function is_file; use function json_decode; use function json_encode; use function sprintf; use PHPUnit\Util\Filesystem; /** * @internal This class is not covered by the backward compatibility promise for PHPUnit */ final class DefaultTestResultCache implements TestResultCache { /** * @var int */ private const VERSION = 1; /** * @psalm-var list */ private const ALLOWED_TEST_STATUSES = [ BaseTestRunner::STATUS_SKIPPED, BaseTestRunner::STATUS_INCOMPLETE, BaseTestRunner::STATUS_FAILURE, BaseTestRunner::STATUS_ERROR, BaseTestRunner::STATUS_RISKY, BaseTestRunner::STATUS_WARNING, ]; /** * @var string */ private const DEFAULT_RESULT_CACHE_FILENAME = '.phpunit.result.cache'; /** * @var string */ private $cacheFilename; /** * @psalm-var array */ private $defects = []; /** * @psalm-var array */ private $times = []; public function __construct(?string $filepath = null) { if ($filepath !== null && is_dir($filepath)) { $filepath .= DIRECTORY_SEPARATOR . self::DEFAULT_RESULT_CACHE_FILENAME; } $this->cacheFilename = $filepath ?? $_ENV['PHPUNIT_RESULT_CACHE'] ?? self::DEFAULT_RESULT_CACHE_FILENAME; } public function setState(string $testName, int $state): void { if (!in_array($state, self::ALLOWED_TEST_STATUSES, true)) { return; } $this->defects[$testName] = $state; } public function getState(string $testName): int { return $this->defects[$testName] ?? BaseTestRunner::STATUS_UNKNOWN; } public function setTime(string $testName, float $time): void { $this->times[$testName] = $time; } public function getTime(string $testName): float { return $this->times[$testName] ?? 0.0; } public function load(): void { if (!is_file($this->cacheFilename)) { return; } $data = json_decode( file_get_contents($this->cacheFilename), true ); if ($data === null) { return; } if (!isset($data['version'])) { return; } if ($data['version'] !== self::VERSION) { return; } assert(isset($data['defects']) && is_array($data['defects'])); assert(isset($data['times']) && is_array($data['times'])); $this->defects = $data['defects']; $this->times = $data['times']; } /** * @throws Exception */ public function persist(): void { if (!Filesystem::createDirectory(dirname($this->cacheFilename))) { throw new Exception( sprintf( 'Cannot create directory "%s" for result cache file', $this->cacheFilename ) ); } file_put_contents( $this->cacheFilename, json_encode( [ 'version' => self::VERSION, 'defects' => $this->defects, 'times' => $this->times, ] ), LOCK_EX ); } } PK!,æ ÂDD_file-manager-advanced/application/svg-sanitizer/includes/phpunit/phpunit/src/Runner/Version.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace PHPUnit\Runner; use function array_slice; use function dirname; use function explode; use function implode; use function strpos; use SebastianBergmann\Version as VersionId; final class Version { /** * @var string */ private static $pharVersion = ''; /** * @var string */ private static $version = ''; /** * Returns the current version of PHPUnit. */ public static function id(): string { if (self::$pharVersion !== '') { return self::$pharVersion; } if (self::$version === '') { self::$version = (new VersionId('8.5.41', dirname(__DIR__, 2)))->getVersion(); } return self::$version; } public static function series(): string { if (strpos(self::id(), '-')) { $version = explode('-', self::id())[0]; } else { $version = self::id(); } return implode('.', array_slice(explode('.', $version), 0, 2)); } public static function getVersionString(): string { return 'PHPUnit ' . self::id() . ' by Sebastian Bergmann and contributors.'; } public static function getReleaseChannel(): string { if (strpos(self::$pharVersion, '-') !== false) { return '-snapshot'; } return ''; } } PK!+…$Ë88gfile-manager-advanced/application/svg-sanitizer/includes/phpunit/phpunit/src/Runner/TestSuiteLoader.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace PHPUnit\Runner; use ReflectionClass; /** * An interface to define how a test suite should be loaded. */ interface TestSuiteLoader { public function load(string $suiteClassName, string $suiteClassFile = ''): ReflectionClass; public function reload(ReflectionClass $aClass): ReflectionClass; } PK!uÛÀofile-manager-advanced/application/svg-sanitizer/includes/phpunit/phpunit/src/Runner/StandardTestSuiteLoader.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace PHPUnit\Runner; use function array_diff; use function array_values; use function class_exists; use function get_declared_classes; use function realpath; use function sprintf; use function str_replace; use function strlen; use function substr; use PHPUnit\Framework\TestCase; use PHPUnit\Util\FileLoader; use PHPUnit\Util\Filesystem; use ReflectionClass; use ReflectionException; /** * @internal This class is not covered by the backward compatibility promise for PHPUnit */ final class StandardTestSuiteLoader implements TestSuiteLoader { /** * @throws \PHPUnit\Framework\Exception * @throws Exception */ public function load(string $suiteClassName, string $suiteClassFile = ''): ReflectionClass { $suiteClassName = str_replace('.php', '', $suiteClassName); $filename = null; if (empty($suiteClassFile)) { $suiteClassFile = Filesystem::classNameToFilename( $suiteClassName ); } if (!class_exists($suiteClassName, false)) { $loadedClasses = get_declared_classes(); $filename = FileLoader::checkAndLoad($suiteClassFile); $loadedClasses = array_values( array_diff(get_declared_classes(), $loadedClasses) ); } if (!empty($loadedClasses) && !class_exists($suiteClassName, false)) { $offset = 0 - strlen($suiteClassName); foreach ($loadedClasses as $loadedClass) { try { $class = new ReflectionClass($loadedClass); // @codeCoverageIgnoreStart } catch (ReflectionException $e) { throw new Exception( $e->getMessage(), $e->getCode(), $e ); } // @codeCoverageIgnoreEnd if (substr($loadedClass, $offset) === $suiteClassName && $class->getFileName() == $filename) { $suiteClassName = $loadedClass; break; } } } if (!empty($loadedClasses) && !class_exists($suiteClassName, false)) { $testCaseClass = TestCase::class; foreach ($loadedClasses as $loadedClass) { try { $class = new ReflectionClass($loadedClass); // @codeCoverageIgnoreStart } catch (ReflectionException $e) { throw new Exception( $e->getMessage(), $e->getCode(), $e ); } // @codeCoverageIgnoreEnd $classFile = $class->getFileName(); if ($class->isSubclassOf($testCaseClass) && !$class->isAbstract()) { $suiteClassName = $loadedClass; $testCaseClass = $loadedClass; if ($classFile == realpath($suiteClassFile)) { break; } } if ($class->hasMethod('suite')) { try { $method = $class->getMethod('suite'); // @codeCoverageIgnoreStart } catch (ReflectionException $e) { throw new Exception( $e->getMessage(), $e->getCode(), $e ); } // @codeCoverageIgnoreEnd if (!$method->isAbstract() && $method->isPublic() && $method->isStatic()) { $suiteClassName = $loadedClass; if ($classFile == realpath($suiteClassFile)) { break; } } } } } if (class_exists($suiteClassName, false)) { try { $class = new ReflectionClass($suiteClassName); // @codeCoverageIgnoreStart } catch (ReflectionException $e) { throw new Exception( $e->getMessage(), $e->getCode(), $e ); } // @codeCoverageIgnoreEnd if ($class->getFileName() == realpath($suiteClassFile)) { return $class; } } throw new Exception( sprintf( "Class '%s' could not be found in '%s'.", $suiteClassName, $suiteClassFile ) ); } public function reload(ReflectionClass $aClass): ReflectionClass { return $aClass; } } PK!Ô?zïPPqfile-manager-advanced/application/svg-sanitizer/includes/phpunit/phpunit/src/Runner/Filter/NameFilterIterator.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace PHPUnit\Runner\Filter; use function end; use function implode; use function preg_match; use function sprintf; use function str_replace; use Exception; use PHPUnit\Framework\TestSuite; use PHPUnit\Framework\WarningTestCase; use PHPUnit\Util\RegularExpression; use PHPUnit\Util\Test; use RecursiveFilterIterator; use RecursiveIterator; use SebastianBergmann\RecursionContext\InvalidArgumentException; /** * @internal This class is not covered by the backward compatibility promise for PHPUnit */ final class NameFilterIterator extends RecursiveFilterIterator { /** * @var string */ private $filter; /** * @var int */ private $filterMin; /** * @var int */ private $filterMax; /** * @throws Exception */ public function __construct(RecursiveIterator $iterator, string $filter) { parent::__construct($iterator); $this->setFilter($filter); } /** * @throws InvalidArgumentException */ public function accept(): bool { $test = $this->getInnerIterator()->current(); if ($test instanceof TestSuite) { return true; } $tmp = Test::describe($test); if ($test instanceof WarningTestCase) { $name = $test->getMessage(); } elseif ($tmp[0] !== '') { $name = implode('::', $tmp); } else { $name = $tmp[1]; } $accepted = @preg_match($this->filter, $name, $matches); if ($accepted && isset($this->filterMax)) { $set = end($matches); $accepted = $set >= $this->filterMin && $set <= $this->filterMax; } return (bool) $accepted; } /** * @throws Exception */ private function setFilter(string $filter): void { if (RegularExpression::safeMatch($filter, '') === false) { // Handles: // * testAssertEqualsSucceeds#4 // * testAssertEqualsSucceeds#4-8 if (preg_match('/^(.*?)#(\d+)(?:-(\d+))?$/', $filter, $matches)) { if (isset($matches[3]) && $matches[2] < $matches[3]) { $filter = sprintf( '%s.*with data set #(\d+)$', $matches[1] ); $this->filterMin = (int) $matches[2]; $this->filterMax = (int) $matches[3]; } else { $filter = sprintf( '%s.*with data set #%s$', $matches[1], $matches[2] ); } } // Handles: // * testDetermineJsonError@JSON_ERROR_NONE // * testDetermineJsonError@JSON.* elseif (preg_match('/^(.*?)@(.+)$/', $filter, $matches)) { $filter = sprintf( '%s.*with data set "%s"$', $matches[1], $matches[2] ); } // Escape delimiters in regular expression. Do NOT use preg_quote, // to keep magic characters. $filter = sprintf( '/%s/i', str_replace( '/', '\\/', $filter ) ); } $this->filter = $filter; } } PK!¶L"øXXyfile-manager-advanced/application/svg-sanitizer/includes/phpunit/phpunit/src/Runner/Filter/IncludeGroupFilterIterator.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace PHPUnit\Runner\Filter; use function in_array; /** * @internal This class is not covered by the backward compatibility promise for PHPUnit */ final class IncludeGroupFilterIterator extends GroupFilterIterator { protected function doAccept(string $hash): bool { return in_array($hash, $this->groupTests, true); } } PK!Õ‚DÃYYyfile-manager-advanced/application/svg-sanitizer/includes/phpunit/phpunit/src/Runner/Filter/ExcludeGroupFilterIterator.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace PHPUnit\Runner\Filter; use function in_array; /** * @internal This class is not covered by the backward compatibility promise for PHPUnit */ final class ExcludeGroupFilterIterator extends GroupFilterIterator { protected function doAccept(string $hash): bool { return !in_array($hash, $this->groupTests, true); } } PK! ïèéérfile-manager-advanced/application/svg-sanitizer/includes/phpunit/phpunit/src/Runner/Filter/GroupFilterIterator.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace PHPUnit\Runner\Filter; use function array_map; use function array_merge; use function in_array; use function spl_object_hash; use PHPUnit\Framework\TestSuite; use RecursiveFilterIterator; use RecursiveIterator; /** * @internal This class is not covered by the backward compatibility promise for PHPUnit */ abstract class GroupFilterIterator extends RecursiveFilterIterator { /** * @var string[] */ protected $groupTests = []; public function __construct(RecursiveIterator $iterator, array $groups, TestSuite $suite) { parent::__construct($iterator); foreach ($suite->getGroupDetails() as $group => $tests) { if (in_array((string) $group, $groups, true)) { $testHashes = array_map( 'spl_object_hash', $tests ); $this->groupTests = array_merge($this->groupTests, $testHashes); } } } public function accept(): bool { $test = $this->getInnerIterator()->current(); if ($test instanceof TestSuite) { return true; } return $this->doAccept(spl_object_hash($test)); } abstract protected function doAccept(string $hash); } PK!j9¤z‚‚ffile-manager-advanced/application/svg-sanitizer/includes/phpunit/phpunit/src/Runner/Filter/Factory.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace PHPUnit\Runner\Filter; use function sprintf; use FilterIterator; use InvalidArgumentException; use Iterator; use PHPUnit\Framework\TestSuite; use RecursiveFilterIterator; use ReflectionClass; /** * @internal This class is not covered by the backward compatibility promise for PHPUnit */ final class Factory { /** * @var array */ private $filters = []; /** * @throws InvalidArgumentException */ public function addFilter(ReflectionClass $filter, $args): void { if (!$filter->isSubclassOf(RecursiveFilterIterator::class)) { throw new InvalidArgumentException( sprintf( 'Class "%s" does not extend RecursiveFilterIterator', $filter->name ) ); } $this->filters[] = [$filter, $args]; } public function factory(Iterator $iterator, TestSuite $suite): FilterIterator { foreach ($this->filters as $filter) { [$class, $args] = $filter; $iterator = $class->newInstance($iterator, $args, $suite); } return $iterator; } } PK!»'VWYWYdfile-manager-advanced/application/svg-sanitizer/includes/phpunit/phpunit/src/Runner/PhptTestCase.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace PHPUnit\Runner; use const DEBUG_BACKTRACE_IGNORE_ARGS; use const DIRECTORY_SEPARATOR; use function array_merge; use function basename; use function debug_backtrace; use function defined; use function dirname; use function explode; use function extension_loaded; use function file; use function file_exists; use function file_get_contents; use function file_put_contents; use function is_array; use function is_file; use function is_readable; use function is_string; use function ltrim; use function phpversion; use function preg_match; use function preg_replace; use function preg_split; use function realpath; use function rtrim; use function sprintf; use function str_replace; use function strncasecmp; use function strpos; use function substr; use function trim; use function unlink; use function unserialize; use function var_export; use function version_compare; use PHPUnit\Framework\Assert; use PHPUnit\Framework\AssertionFailedError; use PHPUnit\Framework\ExpectationFailedException; use PHPUnit\Framework\IncompleteTestError; use PHPUnit\Framework\PHPTAssertionFailedError; use PHPUnit\Framework\SelfDescribing; use PHPUnit\Framework\SkippedTestError; use PHPUnit\Framework\SyntheticSkippedError; use PHPUnit\Framework\Test; use PHPUnit\Framework\TestResult; use PHPUnit\Util\PHP\AbstractPhpProcess; use SebastianBergmann\CodeCoverage\CoveredCodeNotExecutedException; use SebastianBergmann\CodeCoverage\InvalidArgumentException; use SebastianBergmann\CodeCoverage\MissingCoversAnnotationException; use SebastianBergmann\CodeCoverage\RuntimeException; use SebastianBergmann\CodeCoverage\UnintentionallyCoveredCodeException; use SebastianBergmann\Timer\Timer; use Text_Template; use Throwable; /** * @internal This class is not covered by the backward compatibility promise for PHPUnit */ final class PhptTestCase implements SelfDescribing, Test { /** * @var string */ private $filename; /** * @var AbstractPhpProcess */ private $phpUtil; /** * @var string */ private $output = ''; /** * Constructs a test case with the given filename. * * @throws Exception */ public function __construct(string $filename, ?AbstractPhpProcess $phpUtil = null) { if (!is_file($filename)) { throw new Exception( sprintf( 'File "%s" does not exist.', $filename ) ); } $this->filename = $filename; $this->phpUtil = $phpUtil ?: AbstractPhpProcess::factory(); } /** * Counts the number of test cases executed by run(TestResult result). */ public function count(): int { return 1; } /** * Runs a test and collects its result in a TestResult instance. * * @throws \SebastianBergmann\RecursionContext\InvalidArgumentException * @throws CoveredCodeNotExecutedException * @throws Exception * @throws InvalidArgumentException * @throws MissingCoversAnnotationException * @throws RuntimeException * @throws UnintentionallyCoveredCodeException */ public function run(?TestResult $result = null): TestResult { if ($result === null) { $result = new TestResult; } try { $sections = $this->parse(); } catch (Exception $e) { $result->startTest($this); $result->addFailure($this, new SkippedTestError($e->getMessage()), 0); $result->endTest($this, 0); return $result; } $code = $this->render($sections['FILE']); $xfail = false; $settings = $this->parseIniSection($this->settings($result->getCollectCodeCoverageInformation())); $result->startTest($this); if (isset($sections['INI'])) { $settings = $this->parseIniSection($sections['INI'], $settings); } if (isset($sections['ENV'])) { $env = $this->parseEnvSection($sections['ENV']); $this->phpUtil->setEnv($env); } $this->phpUtil->setUseStderrRedirection(true); if ($result->enforcesTimeLimit()) { $this->phpUtil->setTimeout($result->getTimeoutForLargeTests()); } $skip = $this->runSkip($sections, $result, $settings); if ($skip) { return $result; } if (isset($sections['XFAIL'])) { $xfail = trim($sections['XFAIL']); } if (isset($sections['STDIN'])) { $this->phpUtil->setStdin($sections['STDIN']); } if (isset($sections['ARGS'])) { $this->phpUtil->setArgs($sections['ARGS']); } if ($result->getCollectCodeCoverageInformation()) { $this->renderForCoverage($code); } Timer::start(); $jobResult = $this->phpUtil->runJob($code, $this->stringifyIni($settings)); $time = Timer::stop(); $this->output = $jobResult['stdout'] ?? ''; if ($result->getCollectCodeCoverageInformation() && ($coverage = $this->cleanupForCoverage())) { $result->getCodeCoverage()->append($coverage, $this, true, [], [], true); } try { $this->assertPhptExpectation($sections, $this->output); } catch (AssertionFailedError $e) { $failure = $e; if ($xfail !== false) { $failure = new IncompleteTestError($xfail, 0, $e); } elseif ($e instanceof ExpectationFailedException) { $comparisonFailure = $e->getComparisonFailure(); if ($comparisonFailure) { $diff = $comparisonFailure->getDiff(); } else { $diff = $e->getMessage(); } $hint = $this->getLocationHintFromDiff($diff, $sections); $trace = array_merge($hint, debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS)); $failure = new PHPTAssertionFailedError( $e->getMessage(), 0, $trace[0]['file'], $trace[0]['line'], $trace, $comparisonFailure ? $diff : '' ); } $result->addFailure($this, $failure, $time); } catch (Throwable $t) { $result->addError($this, $t, $time); } if ($xfail !== false && $result->allCompletelyImplemented()) { $result->addFailure($this, new IncompleteTestError('XFAIL section but test passes'), $time); } $this->runClean($sections, $result->getCollectCodeCoverageInformation()); $result->endTest($this, $time); return $result; } /** * Returns the name of the test case. */ public function getName(): string { return $this->toString(); } /** * Returns a string representation of the test case. */ public function toString(): string { return $this->filename; } public function usesDataProvider(): bool { return false; } public function getNumAssertions(): int { return 1; } public function getActualOutput(): string { return $this->output; } public function hasOutput(): bool { return !empty($this->output); } /** * Parse --INI-- section key value pairs and return as array. * * @param array|string */ private function parseIniSection($content, $ini = []): array { if (is_string($content)) { $content = explode("\n", trim($content)); } foreach ($content as $setting) { if (strpos($setting, '=') === false) { continue; } $setting = explode('=', $setting, 2); $name = trim($setting[0]); $value = trim($setting[1]); if ($name === 'extension' || $name === 'zend_extension') { if (!isset($ini[$name])) { $ini[$name] = []; } $ini[$name][] = $value; continue; } $ini[$name] = $value; } return $ini; } private function parseEnvSection(string $content): array { $env = []; foreach (explode("\n", trim($content)) as $e) { $e = explode('=', trim($e), 2); if ($e[0] !== '' && isset($e[1])) { $env[$e[0]] = $e[1]; } } return $env; } /** * @throws \SebastianBergmann\RecursionContext\InvalidArgumentException * @throws Exception * @throws ExpectationFailedException */ private function assertPhptExpectation(array $sections, string $output): void { $assertions = [ 'EXPECT' => 'assertEquals', 'EXPECTF' => 'assertStringMatchesFormat', 'EXPECTREGEX' => 'assertRegExp', ]; $actual = preg_replace('/\r\n/', "\n", trim($output)); foreach ($assertions as $sectionName => $sectionAssertion) { if (isset($sections[$sectionName])) { $sectionContent = preg_replace('/\r\n/', "\n", trim($sections[$sectionName])); $expected = $sectionName === 'EXPECTREGEX' ? "/{$sectionContent}/" : $sectionContent; if ($expected === null) { throw new Exception('No PHPT expectation found'); } Assert::$sectionAssertion($expected, $actual); return; } } throw new Exception('No PHPT assertion found'); } /** * @throws \SebastianBergmann\RecursionContext\InvalidArgumentException */ private function runSkip(array &$sections, TestResult $result, array $settings): bool { if (!isset($sections['SKIPIF'])) { return false; } $skipif = $this->render($sections['SKIPIF']); $jobResult = $this->phpUtil->runJob($skipif, $this->stringifyIni($settings)); if (!strncasecmp('skip', ltrim($jobResult['stdout']), 4)) { $message = ''; if (preg_match('/^\s*skip\s*(.+)\s*/i', $jobResult['stdout'], $skipMatch)) { $message = substr($skipMatch[1], 2); } $hint = $this->getLocationHint($message, $sections, 'SKIPIF'); $trace = array_merge($hint, debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS)); $result->addFailure( $this, new SyntheticSkippedError($message, 0, $trace[0]['file'], $trace[0]['line'], $trace), 0 ); $result->endTest($this, 0); return true; } return false; } private function runClean(array &$sections, bool $collectCoverage): void { $this->phpUtil->setStdin(''); $this->phpUtil->setArgs(''); if (isset($sections['CLEAN'])) { $cleanCode = $this->render($sections['CLEAN']); $this->phpUtil->runJob($cleanCode, $this->settings($collectCoverage)); } } /** * @throws Exception */ private function parse(): array { $sections = []; $section = ''; $unsupportedSections = [ 'CGI', 'COOKIE', 'DEFLATE_POST', 'EXPECTHEADERS', 'EXTENSIONS', 'GET', 'GZIP_POST', 'HEADERS', 'PHPDBG', 'POST', 'POST_RAW', 'PUT', 'REDIRECTTEST', 'REQUEST', ]; $lineNr = 0; foreach (file($this->filename) as $line) { $lineNr++; if (preg_match('/^--([_A-Z]+)--/', $line, $result)) { $section = $result[1]; $sections[$section] = ''; $sections[$section . '_offset'] = $lineNr; continue; } if (empty($section)) { throw new Exception('Invalid PHPT file: empty section header'); } $sections[$section] .= $line; } if (isset($sections['FILEEOF'])) { $sections['FILE'] = rtrim($sections['FILEEOF'], "\r\n"); unset($sections['FILEEOF']); } $this->parseExternal($sections); if (!$this->validate($sections)) { throw new Exception('Invalid PHPT file'); } foreach ($unsupportedSections as $section) { if (isset($sections[$section])) { throw new Exception( "PHPUnit does not support PHPT {$section} sections" ); } } return $sections; } /** * @throws Exception */ private function parseExternal(array &$sections): void { $allowSections = [ 'FILE', 'EXPECT', 'EXPECTF', 'EXPECTREGEX', ]; $testDirectory = dirname($this->filename) . DIRECTORY_SEPARATOR; foreach ($allowSections as $section) { if (isset($sections[$section . '_EXTERNAL'])) { $externalFilename = trim($sections[$section . '_EXTERNAL']); if (!is_file($testDirectory . $externalFilename) || !is_readable($testDirectory . $externalFilename)) { throw new Exception( sprintf( 'Could not load --%s-- %s for PHPT file', $section . '_EXTERNAL', $testDirectory . $externalFilename ) ); } $sections[$section] = file_get_contents($testDirectory . $externalFilename); } } } private function validate(array &$sections): bool { $requiredSections = [ 'FILE', [ 'EXPECT', 'EXPECTF', 'EXPECTREGEX', ], ]; foreach ($requiredSections as $section) { if (is_array($section)) { $foundSection = false; foreach ($section as $anySection) { if (isset($sections[$anySection])) { $foundSection = true; break; } } if (!$foundSection) { return false; } continue; } if (!isset($sections[$section])) { return false; } } return true; } private function render(string $code): string { return str_replace( [ '__DIR__', '__FILE__', ], [ "'" . dirname($this->filename) . "'", "'" . $this->filename . "'", ], $code ); } private function getCoverageFiles(): array { $baseDir = dirname(realpath($this->filename)) . DIRECTORY_SEPARATOR; $basename = basename($this->filename, 'phpt'); return [ 'coverage' => $baseDir . $basename . 'coverage', 'job' => $baseDir . $basename . 'php', ]; } private function renderForCoverage(string &$job): void { $files = $this->getCoverageFiles(); $template = new Text_Template( __DIR__ . '/../Util/PHP/Template/PhptTestCase.tpl' ); $composerAutoload = '\'\''; if (defined('PHPUNIT_COMPOSER_INSTALL')) { $composerAutoload = var_export(PHPUNIT_COMPOSER_INSTALL, true); } $phar = '\'\''; if (defined('__PHPUNIT_PHAR__')) { $phar = var_export(__PHPUNIT_PHAR__, true); } $globals = ''; if (!empty($GLOBALS['__PHPUNIT_BOOTSTRAP'])) { $globals = '$GLOBALS[\'__PHPUNIT_BOOTSTRAP\'] = ' . var_export( $GLOBALS['__PHPUNIT_BOOTSTRAP'], true ) . ";\n"; } $template->setVar( [ 'composerAutoload' => $composerAutoload, 'phar' => $phar, 'globals' => $globals, 'job' => $files['job'], 'coverageFile' => $files['coverage'], ] ); file_put_contents($files['job'], $job); $job = $template->render(); } private function cleanupForCoverage(): array { $coverage = []; $files = $this->getCoverageFiles(); if (file_exists($files['coverage'])) { $buffer = @file_get_contents($files['coverage']); if ($buffer !== false) { $coverage = @unserialize($buffer); if ($coverage === false) { $coverage = []; } } } foreach ($files as $file) { @unlink($file); } return $coverage; } private function stringifyIni(array $ini): array { $settings = []; foreach ($ini as $key => $value) { if (is_array($value)) { foreach ($value as $val) { $settings[] = $key . '=' . $val; } continue; } $settings[] = $key . '=' . $value; } return $settings; } private function getLocationHintFromDiff(string $message, array $sections): array { $needle = ''; $previousLine = ''; $block = 'message'; foreach (preg_split('/\r\n|\r|\n/', $message) as $line) { $line = trim($line); if ($block === 'message' && $line === '--- Expected') { $block = 'expected'; } if ($block === 'expected' && $line === '@@ @@') { $block = 'diff'; } if ($block === 'diff') { if (strpos($line, '+') === 0) { $needle = $this->getCleanDiffLine($previousLine); break; } if (strpos($line, '-') === 0) { $needle = $this->getCleanDiffLine($line); break; } } if (!empty($line)) { $previousLine = $line; } } return $this->getLocationHint($needle, $sections); } private function getCleanDiffLine(string $line): string { if (preg_match('/^[\-+]([\'\"]?)(.*)\1$/', $line, $matches)) { $line = $matches[2]; } return $line; } private function getLocationHint(string $needle, array $sections, ?string $sectionName = null): array { $needle = trim($needle); if (empty($needle)) { return [[ 'file' => realpath($this->filename), 'line' => 1, ]]; } if ($sectionName) { $search = [$sectionName]; } else { $search = [ // 'FILE', 'EXPECT', 'EXPECTF', 'EXPECTREGEX', ]; } foreach ($search as $section) { if (!isset($sections[$section])) { continue; } if (isset($sections[$section . '_EXTERNAL'])) { $externalFile = trim($sections[$section . '_EXTERNAL']); return [ [ 'file' => realpath(dirname($this->filename) . DIRECTORY_SEPARATOR . $externalFile), 'line' => 1, ], [ 'file' => realpath($this->filename), 'line' => ($sections[$section . '_EXTERNAL_offset'] ?? 0) + 1, ], ]; } $sectionOffset = $sections[$section . '_offset'] ?? 0; $offset = $sectionOffset + 1; foreach (preg_split('/\r\n|\r|\n/', $sections[$section]) as $line) { if (strpos($line, $needle) !== false) { return [[ 'file' => realpath($this->filename), 'line' => $offset, ]]; } $offset++; } } if ($sectionName) { // String not found in specified section, show user the start of the named section return [[ 'file' => realpath($this->filename), 'line' => $sectionOffset, ]]; } // No section specified, show user start of code return [[ 'file' => realpath($this->filename), 'line' => 1, ]]; } /** * @psalm-return list */ private function settings(bool $collectCoverage): array { $settings = [ 'allow_url_fopen=1', 'auto_append_file=', 'auto_prepend_file=', 'disable_functions=', 'display_errors=1', 'docref_ext=.html', 'docref_root=', 'error_append_string=', 'error_prepend_string=', 'error_reporting=-1', 'html_errors=0', 'log_errors=0', 'open_basedir=', 'output_buffering=Off', 'output_handler=', 'report_memleaks=0', 'report_zend_debug=0', ]; if (extension_loaded('pcov')) { if ($collectCoverage) { $settings[] = 'pcov.enabled=1'; } else { $settings[] = 'pcov.enabled=0'; } } if (extension_loaded('xdebug')) { if (version_compare(phpversion('xdebug'), '3', '>=')) { if ($collectCoverage) { $settings[] = 'xdebug.mode=coverage'; } else { $settings[] = 'xdebug.mode=off'; } } else { $settings[] = 'xdebug.default_enable=0'; if ($collectCoverage) { $settings[] = 'xdebug.coverage_enable=1'; } } } return $settings; } } PK!k…˜ááafile-manager-advanced/application/svg-sanitizer/includes/phpunit/phpunit/src/Runner/Exception.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace PHPUnit\Runner; use RuntimeException; /** * @internal This class is not covered by the backward compatibility promise for PHPUnit */ final class Exception extends RuntimeException implements \PHPUnit\Exception { } PK!r‘vvkfile-manager-advanced/application/svg-sanitizer/includes/phpunit/phpunit/src/Runner/NullTestResultCache.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace PHPUnit\Runner; /** * @internal This class is not covered by the backward compatibility promise for PHPUnit */ final class NullTestResultCache implements TestResultCache { public function setState(string $testName, int $state): void { } public function getState(string $testName): int { return BaseTestRunner::STATUS_UNKNOWN; } public function setTime(string $testName, float $time): void { } public function getTime(string $testName): float { return 0; } public function load(): void { } public function persist(): void { } } PK!·³Ê¥3¥3gfile-manager-advanced/application/svg-sanitizer/includes/phpunit/phpunit/src/Runner/TestSuiteSorter.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace PHPUnit\Runner; use function array_intersect; use function array_map; use function array_merge; use function array_reduce; use function array_reverse; use function array_splice; use function count; use function get_class; use function in_array; use function max; use function shuffle; use function strpos; use function substr; use function usort; use PHPUnit\Framework\DataProviderTestSuite; use PHPUnit\Framework\Test; use PHPUnit\Framework\TestCase; use PHPUnit\Framework\TestSuite; use PHPUnit\Util\Test as TestUtil; use SebastianBergmann\RecursionContext\InvalidArgumentException; /** * @internal This class is not covered by the backward compatibility promise for PHPUnit */ final class TestSuiteSorter { /** * @var int */ public const ORDER_DEFAULT = 0; /** * @var int */ public const ORDER_RANDOMIZED = 1; /** * @var int */ public const ORDER_REVERSED = 2; /** * @var int */ public const ORDER_DEFECTS_FIRST = 3; /** * @var int */ public const ORDER_DURATION = 4; /** * Order tests by @size annotation 'small', 'medium', 'large'. * * @var int */ public const ORDER_SIZE = 5; /** * List of sorting weights for all test result codes. A higher number gives higher priority. */ private const DEFECT_SORT_WEIGHT = [ BaseTestRunner::STATUS_ERROR => 6, BaseTestRunner::STATUS_FAILURE => 5, BaseTestRunner::STATUS_WARNING => 4, BaseTestRunner::STATUS_INCOMPLETE => 3, BaseTestRunner::STATUS_RISKY => 2, BaseTestRunner::STATUS_SKIPPED => 1, BaseTestRunner::STATUS_UNKNOWN => 0, ]; private const SIZE_SORT_WEIGHT = [ TestUtil::SMALL => 1, TestUtil::MEDIUM => 2, TestUtil::LARGE => 3, TestUtil::UNKNOWN => 4, ]; /** * @var array Associative array of (string => DEFECT_SORT_WEIGHT) elements */ private $defectSortOrder = []; /** * @var TestResultCache */ private $cache; /** * @var string[] A list of normalized names of tests before reordering */ private $originalExecutionOrder = []; /** * @var string[] A list of normalized names of tests affected by reordering */ private $executionOrder = []; /** * @throws InvalidArgumentException */ public static function getTestSorterUID(Test $test): string { if ($test instanceof PhptTestCase) { return $test->getName(); } if ($test instanceof TestCase) { $testName = $test->getName(true); if (strpos($testName, '::') === false) { $testName = get_class($test) . '::' . $testName; } return $testName; } return $test->getName(); } public function __construct(?TestResultCache $cache = null) { $this->cache = $cache ?? new NullTestResultCache; } /** * @throws Exception * @throws InvalidArgumentException */ public function reorderTestsInSuite(Test $suite, int $order, bool $resolveDependencies, int $orderDefects, bool $isRootTestSuite = true): void { $allowedOrders = [ self::ORDER_DEFAULT, self::ORDER_REVERSED, self::ORDER_RANDOMIZED, self::ORDER_DURATION, self::ORDER_SIZE, ]; if (!in_array($order, $allowedOrders, true)) { throw new Exception( '$order must be one of TestSuiteSorter::ORDER_[DEFAULT|REVERSED|RANDOMIZED|DURATION|SIZE]' ); } $allowedOrderDefects = [ self::ORDER_DEFAULT, self::ORDER_DEFECTS_FIRST, ]; if (!in_array($orderDefects, $allowedOrderDefects, true)) { throw new Exception( '$orderDefects must be one of TestSuiteSorter::ORDER_DEFAULT, TestSuiteSorter::ORDER_DEFECTS_FIRST' ); } if ($isRootTestSuite) { $this->originalExecutionOrder = $this->calculateTestExecutionOrder($suite); } if ($suite instanceof TestSuite) { foreach ($suite as $_suite) { $this->reorderTestsInSuite($_suite, $order, $resolveDependencies, $orderDefects, false); } if ($orderDefects === self::ORDER_DEFECTS_FIRST) { $this->addSuiteToDefectSortOrder($suite); } $this->sort($suite, $order, $resolveDependencies, $orderDefects); } if ($isRootTestSuite) { $this->executionOrder = $this->calculateTestExecutionOrder($suite); } } public function getOriginalExecutionOrder(): array { return $this->originalExecutionOrder; } public function getExecutionOrder(): array { return $this->executionOrder; } private function sort(TestSuite $suite, int $order, bool $resolveDependencies, int $orderDefects): void { if (empty($suite->tests())) { return; } if ($order === self::ORDER_REVERSED) { $suite->setTests($this->reverse($suite->tests())); } elseif ($order === self::ORDER_RANDOMIZED) { $suite->setTests($this->randomize($suite->tests())); } elseif ($order === self::ORDER_DURATION && $this->cache !== null) { $suite->setTests($this->sortByDuration($suite->tests())); } elseif ($order === self::ORDER_SIZE) { $suite->setTests($this->sortBySize($suite->tests())); } if ($orderDefects === self::ORDER_DEFECTS_FIRST && $this->cache !== null) { $suite->setTests($this->sortDefectsFirst($suite->tests())); } if ($resolveDependencies && !($suite instanceof DataProviderTestSuite) && $this->suiteOnlyContainsTests($suite)) { /** @var TestCase[] $tests */ $tests = $suite->tests(); $suite->setTests($this->resolveDependencies($tests)); } } /** * @throws InvalidArgumentException */ private function addSuiteToDefectSortOrder(TestSuite $suite): void { $max = 0; foreach ($suite->tests() as $test) { $testname = self::getTestSorterUID($test); if (!isset($this->defectSortOrder[$testname])) { $this->defectSortOrder[$testname] = self::DEFECT_SORT_WEIGHT[$this->cache->getState($testname)]; $max = max($max, $this->defectSortOrder[$testname]); } } $this->defectSortOrder[$suite->getName()] = $max; } private function suiteOnlyContainsTests(TestSuite $suite): bool { return array_reduce( $suite->tests(), static function ($carry, $test) { return $carry && ($test instanceof TestCase || $test instanceof DataProviderTestSuite); }, true ); } private function reverse(array $tests): array { return array_reverse($tests); } private function randomize(array $tests): array { shuffle($tests); return $tests; } private function sortDefectsFirst(array $tests): array { usort( $tests, /** * @throws InvalidArgumentException */ function ($left, $right) { return $this->cmpDefectPriorityAndTime($left, $right); } ); return $tests; } private function sortByDuration(array $tests): array { usort( $tests, /** * @throws InvalidArgumentException */ function ($left, $right) { return $this->cmpDuration($left, $right); } ); return $tests; } private function sortBySize(array $tests): array { usort( $tests, /** * @throws InvalidArgumentException */ function ($left, $right) { return $this->cmpSize($left, $right); } ); return $tests; } /** * Comparator callback function to sort tests for "reach failure as fast as possible": * 1. sort tests by defect weight defined in self::DEFECT_SORT_WEIGHT * 2. when tests are equally defective, sort the fastest to the front * 3. do not reorder successful tests. * * @throws InvalidArgumentException */ private function cmpDefectPriorityAndTime(Test $a, Test $b): int { $priorityA = $this->defectSortOrder[self::getTestSorterUID($a)] ?? 0; $priorityB = $this->defectSortOrder[self::getTestSorterUID($b)] ?? 0; if ($priorityB <=> $priorityA) { // Sort defect weight descending return $priorityB <=> $priorityA; } if ($priorityA || $priorityB) { return $this->cmpDuration($a, $b); } // do not change execution order return 0; } /** * Compares test duration for sorting tests by duration ascending. * * @throws InvalidArgumentException */ private function cmpDuration(Test $a, Test $b): int { return $this->cache->getTime(self::getTestSorterUID($a)) <=> $this->cache->getTime(self::getTestSorterUID($b)); } /** * Compares test size for sorting tests small->medium->large->unknown. */ private function cmpSize(Test $a, Test $b): int { $sizeA = ($a instanceof TestCase || $a instanceof DataProviderTestSuite) ? $a->getSize() : TestUtil::UNKNOWN; $sizeB = ($b instanceof TestCase || $b instanceof DataProviderTestSuite) ? $b->getSize() : TestUtil::UNKNOWN; return self::SIZE_SORT_WEIGHT[$sizeA] <=> self::SIZE_SORT_WEIGHT[$sizeB]; } /** * Reorder Tests within a TestCase in such a way as to resolve as many dependencies as possible. * The algorithm will leave the tests in original running order when it can. * For more details see the documentation for test dependencies. * * Short description of algorithm: * 1. Pick the next Test from remaining tests to be checked for dependencies. * 2. If the test has no dependencies: mark done, start again from the top * 3. If the test has dependencies but none left to do: mark done, start again from the top * 4. When we reach the end add any leftover tests to the end. These will be marked 'skipped' during execution. * * @param array $tests * * @return array */ private function resolveDependencies(array $tests): array { $newTestOrder = []; $i = 0; do { $todoNames = array_map( /** * @throws InvalidArgumentException */ static function ($test) { return self::getTestSorterUID($test); }, $tests ); if (!$tests[$i]->hasDependencies() || empty(array_intersect($this->getNormalizedDependencyNames($tests[$i]), $todoNames))) { $newTestOrder = array_merge($newTestOrder, array_splice($tests, $i, 1)); $i = 0; } else { $i++; } } while (!empty($tests) && ($i < count($tests))); return array_merge($newTestOrder, $tests); } /** * @param DataProviderTestSuite|TestCase $test * * @return array A list of full test names as "TestSuiteClassName::testMethodName" */ private function getNormalizedDependencyNames($test): array { if ($test instanceof DataProviderTestSuite) { $testClass = substr($test->getName(), 0, strpos($test->getName(), '::')); } else { $testClass = get_class($test); } return array_map( static function ($name) use ($testClass) { return strpos($name, '::') === false ? $testClass . '::' . $name : $name; }, $test->getDependencies() ); } /** * @throws InvalidArgumentException */ private function calculateTestExecutionOrder(Test $suite): array { $tests = []; if ($suite instanceof TestSuite) { foreach ($suite->tests() as $test) { if (!($test instanceof TestSuite)) { $tests[] = self::getTestSorterUID($test); } else { $tests = array_merge($tests, $this->calculateTestExecutionOrder($test)); } } } return $tests; } } PK!¢èž ttnfile-manager-advanced/application/svg-sanitizer/includes/phpunit/phpunit/src/Runner/Hook/AfterLastTestHook.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace PHPUnit\Runner; /** * This interface, as well as the associated mechanism for extending PHPUnit, * will be removed in PHPUnit 10. There is no alternative available in this * version of PHPUnit. * * @see https://github.com/sebastianbergmann/phpunit/issues/4676 */ interface AfterLastTestHook extends Hook { public function executeAfterLastTest(): void; } PK!·X%’®®tfile-manager-advanced/application/svg-sanitizer/includes/phpunit/phpunit/src/Runner/Hook/AfterIncompleteTestHook.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace PHPUnit\Runner; /** * This interface, as well as the associated mechanism for extending PHPUnit, * will be removed in PHPUnit 10. There is no alternative available in this * version of PHPUnit. * * @see https://github.com/sebastianbergmann/phpunit/issues/4676 */ interface AfterIncompleteTestHook extends TestHook { public function executeAfterIncompleteTest(string $test, string $message, float $time): void; } PK!|�"8¤¤ofile-manager-advanced/application/svg-sanitizer/includes/phpunit/phpunit/src/Runner/Hook/AfterRiskyTestHook.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace PHPUnit\Runner; /** * This interface, as well as the associated mechanism for extending PHPUnit, * will be removed in PHPUnit 10. There is no alternative available in this * version of PHPUnit. * * @see https://github.com/sebastianbergmann/phpunit/issues/4676 */ interface AfterRiskyTestHook extends TestHook { public function executeAfterRiskyTest(string $test, string $message, float $time): void; } PK!õ•S~~kfile-manager-advanced/application/svg-sanitizer/includes/phpunit/phpunit/src/Runner/Hook/BeforeTestHook.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace PHPUnit\Runner; /** * This interface, as well as the associated mechanism for extending PHPUnit, * will be removed in PHPUnit 10. There is no alternative available in this * version of PHPUnit. * * @see https://github.com/sebastianbergmann/phpunit/issues/4676 */ interface BeforeTestHook extends TestHook { public function executeBeforeTest(string $test): void; } PK!¥Mwxxpfile-manager-advanced/application/svg-sanitizer/includes/phpunit/phpunit/src/Runner/Hook/BeforeFirstTestHook.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace PHPUnit\Runner; /** * This interface, as well as the associated mechanism for extending PHPUnit, * will be removed in PHPUnit 10. There is no alternative available in this * version of PHPUnit. * * @see https://github.com/sebastianbergmann/phpunit/issues/4676 */ interface BeforeFirstTestHook extends Hook { public function executeBeforeFirstTest(): void; } PK!vW¨w¨¨qfile-manager-advanced/application/svg-sanitizer/includes/phpunit/phpunit/src/Runner/Hook/AfterSkippedTestHook.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace PHPUnit\Runner; /** * This interface, as well as the associated mechanism for extending PHPUnit, * will be removed in PHPUnit 10. There is no alternative available in this * version of PHPUnit. * * @see https://github.com/sebastianbergmann/phpunit/issues/4676 */ interface AfterSkippedTestHook extends TestHook { public function executeAfterSkippedTest(string $test, string $message, float $time): void; } PK!§žÑ먨qfile-manager-advanced/application/svg-sanitizer/includes/phpunit/phpunit/src/Runner/Hook/AfterTestFailureHook.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace PHPUnit\Runner; /** * This interface, as well as the associated mechanism for extending PHPUnit, * will be removed in PHPUnit 10. There is no alternative available in this * version of PHPUnit. * * @see https://github.com/sebastianbergmann/phpunit/issues/4676 */ interface AfterTestFailureHook extends TestHook { public function executeAfterTestFailure(string $test, string $message, float $time): void; } PK!Zœ²¤¤ofile-manager-advanced/application/svg-sanitizer/includes/phpunit/phpunit/src/Runner/Hook/AfterTestErrorHook.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace PHPUnit\Runner; /** * This interface, as well as the associated mechanism for extending PHPUnit, * will be removed in PHPUnit 10. There is no alternative available in this * version of PHPUnit. * * @see https://github.com/sebastianbergmann/phpunit/issues/4676 */ interface AfterTestErrorHook extends TestHook { public function executeAfterTestError(string $test, string $message, float $time): void; } PK!X¶dý¨¨qfile-manager-advanced/application/svg-sanitizer/includes/phpunit/phpunit/src/Runner/Hook/AfterTestWarningHook.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace PHPUnit\Runner; /** * This interface, as well as the associated mechanism for extending PHPUnit, * will be removed in PHPUnit 10. There is no alternative available in this * version of PHPUnit. * * @see https://github.com/sebastianbergmann/phpunit/issues/4676 */ interface AfterTestWarningHook extends TestHook { public function executeAfterTestWarning(string $test, string $message, float $time): void; } PK!½ÅF((pfile-manager-advanced/application/svg-sanitizer/includes/phpunit/phpunit/src/Runner/Hook/TestListenerAdapter.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace PHPUnit\Runner; use PHPUnit\Framework\AssertionFailedError; use PHPUnit\Framework\Test; use PHPUnit\Framework\TestListener; use PHPUnit\Framework\TestSuite; use PHPUnit\Framework\Warning; use PHPUnit\Util\Test as TestUtil; use Throwable; /** * @internal This class is not covered by the backward compatibility promise for PHPUnit */ final class TestListenerAdapter implements TestListener { /** * @var TestHook[] */ private $hooks = []; /** * @var bool */ private $lastTestWasNotSuccessful; public function add(TestHook $hook): void { $this->hooks[] = $hook; } public function startTest(Test $test): void { foreach ($this->hooks as $hook) { if ($hook instanceof BeforeTestHook) { $hook->executeBeforeTest(TestUtil::describeAsString($test)); } } $this->lastTestWasNotSuccessful = false; } public function addError(Test $test, Throwable $t, float $time): void { foreach ($this->hooks as $hook) { if ($hook instanceof AfterTestErrorHook) { $hook->executeAfterTestError(TestUtil::describeAsString($test), $t->getMessage(), $time); } } $this->lastTestWasNotSuccessful = true; } public function addWarning(Test $test, Warning $e, float $time): void { foreach ($this->hooks as $hook) { if ($hook instanceof AfterTestWarningHook) { $hook->executeAfterTestWarning(TestUtil::describeAsString($test), $e->getMessage(), $time); } } $this->lastTestWasNotSuccessful = true; } public function addFailure(Test $test, AssertionFailedError $e, float $time): void { foreach ($this->hooks as $hook) { if ($hook instanceof AfterTestFailureHook) { $hook->executeAfterTestFailure(TestUtil::describeAsString($test), $e->getMessage(), $time); } } $this->lastTestWasNotSuccessful = true; } public function addIncompleteTest(Test $test, Throwable $t, float $time): void { foreach ($this->hooks as $hook) { if ($hook instanceof AfterIncompleteTestHook) { $hook->executeAfterIncompleteTest(TestUtil::describeAsString($test), $t->getMessage(), $time); } } $this->lastTestWasNotSuccessful = true; } public function addRiskyTest(Test $test, Throwable $t, float $time): void { foreach ($this->hooks as $hook) { if ($hook instanceof AfterRiskyTestHook) { $hook->executeAfterRiskyTest(TestUtil::describeAsString($test), $t->getMessage(), $time); } } $this->lastTestWasNotSuccessful = true; } public function addSkippedTest(Test $test, Throwable $t, float $time): void { foreach ($this->hooks as $hook) { if ($hook instanceof AfterSkippedTestHook) { $hook->executeAfterSkippedTest(TestUtil::describeAsString($test), $t->getMessage(), $time); } } $this->lastTestWasNotSuccessful = true; } public function endTest(Test $test, float $time): void { if (!$this->lastTestWasNotSuccessful) { foreach ($this->hooks as $hook) { if ($hook instanceof AfterSuccessfulTestHook) { $hook->executeAfterSuccessfulTest(TestUtil::describeAsString($test), $time); } } } foreach ($this->hooks as $hook) { if ($hook instanceof AfterTestHook) { $hook->executeAfterTest(TestUtil::describeAsString($test), $time); } } } public function startTestSuite(TestSuite $suite): void { } public function endTestSuite(TestSuite $suite): void { } } PK!9‘}99efile-manager-advanced/application/svg-sanitizer/includes/phpunit/phpunit/src/Runner/Hook/TestHook.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace PHPUnit\Runner; /** * This interface, as well as the associated mechanism for extending PHPUnit, * will be removed in PHPUnit 10. There is no alternative available in this * version of PHPUnit. * * @see https://github.com/sebastianbergmann/phpunit/issues/4676 */ interface TestHook extends Hook { } PK!N³é��tfile-manager-advanced/application/svg-sanitizer/includes/phpunit/phpunit/src/Runner/Hook/AfterSuccessfulTestHook.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace PHPUnit\Runner; /** * This interface, as well as the associated mechanism for extending PHPUnit, * will be removed in PHPUnit 10. There is no alternative available in this * version of PHPUnit. * * @see https://github.com/sebastianbergmann/phpunit/issues/4676 */ interface AfterSuccessfulTestHook extends TestHook { public function executeAfterSuccessfulTest(string $test, float $time): void; } PK!2è!Ú((afile-manager-advanced/application/svg-sanitizer/includes/phpunit/phpunit/src/Runner/Hook/Hook.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace PHPUnit\Runner; /** * This interface, as well as the associated mechanism for extending PHPUnit, * will be removed in PHPUnit 10. There is no alternative available in this * version of PHPUnit. * * @see https://github.com/sebastianbergmann/phpunit/issues/4676 */ interface Hook { } PK!Ø}(ÕRRjfile-manager-advanced/application/svg-sanitizer/includes/phpunit/phpunit/src/Runner/Hook/AfterTestHook.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace PHPUnit\Runner; /** * This interface, as well as the associated mechanism for extending PHPUnit, * will be removed in PHPUnit 10. There is no alternative available in this * version of PHPUnit. * * @see https://github.com/sebastianbergmann/phpunit/issues/4676 */ interface AfterTestHook extends TestHook { /** * This hook will fire after any test, regardless of the result. * * For more fine grained control, have a look at the other hooks * that extend PHPUnit\Runner\Hook. */ public function executeAfterTest(string $test, float $time): void; } PK!—œ´WP P lfile-manager-advanced/application/svg-sanitizer/includes/phpunit/phpunit/src/Runner/ResultCacheExtension.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace PHPUnit\Runner; use function preg_match; use function round; /** * @internal This class is not covered by the backward compatibility promise for PHPUnit */ final class ResultCacheExtension implements AfterIncompleteTestHook, AfterLastTestHook, AfterRiskyTestHook, AfterSkippedTestHook, AfterSuccessfulTestHook, AfterTestErrorHook, AfterTestFailureHook, AfterTestWarningHook { /** * @var TestResultCache */ private $cache; public function __construct(TestResultCache $cache) { $this->cache = $cache; } public function flush(): void { $this->cache->persist(); } public function executeAfterSuccessfulTest(string $test, float $time): void { $testName = $this->getTestName($test); $this->cache->setTime($testName, round($time, 3)); } public function executeAfterIncompleteTest(string $test, string $message, float $time): void { $testName = $this->getTestName($test); $this->cache->setTime($testName, round($time, 3)); $this->cache->setState($testName, BaseTestRunner::STATUS_INCOMPLETE); } public function executeAfterRiskyTest(string $test, string $message, float $time): void { $testName = $this->getTestName($test); $this->cache->setTime($testName, round($time, 3)); $this->cache->setState($testName, BaseTestRunner::STATUS_RISKY); } public function executeAfterSkippedTest(string $test, string $message, float $time): void { $testName = $this->getTestName($test); $this->cache->setTime($testName, round($time, 3)); $this->cache->setState($testName, BaseTestRunner::STATUS_SKIPPED); } public function executeAfterTestError(string $test, string $message, float $time): void { $testName = $this->getTestName($test); $this->cache->setTime($testName, round($time, 3)); $this->cache->setState($testName, BaseTestRunner::STATUS_ERROR); } public function executeAfterTestFailure(string $test, string $message, float $time): void { $testName = $this->getTestName($test); $this->cache->setTime($testName, round($time, 3)); $this->cache->setState($testName, BaseTestRunner::STATUS_FAILURE); } public function executeAfterTestWarning(string $test, string $message, float $time): void { $testName = $this->getTestName($test); $this->cache->setTime($testName, round($time, 3)); $this->cache->setState($testName, BaseTestRunner::STATUS_WARNING); } public function executeAfterLastTest(): void { $this->flush(); } /** * @param string $test A long description format of the current test * * @return string The test name without TestSuiteClassName:: and @dataprovider details */ private function getTestName(string $test): string { $matches = []; if (preg_match('/^(?\S+::\S+)(?:(? with data set (?:#\d+|"[^"]+"))\s\()?/', $test, $matches)) { $test = $matches['name'] . ($matches['dataname'] ?? ''); } return $test; } } PK!JI‘ûûmfile-manager-advanced/application/svg-sanitizer/includes/phpunit/phpunit/src/Util/InvalidDataSetException.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace PHPUnit\Util; use PHPUnit\Exception; use RuntimeException; /** * @internal This class is not covered by the backward compatibility promise for PHPUnit */ final class InvalidDataSetException extends RuntimeException implements Exception { } PK!tqHHÏÏ[file-manager-advanced/application/svg-sanitizer/includes/phpunit/phpunit/src/Util/Color.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace PHPUnit\Util; use const DIRECTORY_SEPARATOR; use function array_keys; use function array_map; use function array_values; use function count; use function explode; use function implode; use function min; use function preg_replace; use function preg_replace_callback; use function sprintf; use function strtr; use function trim; /** * @internal This class is not covered by the backward compatibility promise for PHPUnit */ final class Color { /** * @var array */ private const WHITESPACE_MAP = [ ' ' => '·', "\t" => '⇥', ]; /** * @var array */ private const WHITESPACE_EOL_MAP = [ ' ' => '·', "\t" => '⇥', "\n" => '↵', "\r" => '⟵', ]; /** * @var array */ private static $ansiCodes = [ 'reset' => '0', 'bold' => '1', 'dim' => '2', 'dim-reset' => '22', 'underlined' => '4', 'fg-default' => '39', 'fg-black' => '30', 'fg-red' => '31', 'fg-green' => '32', 'fg-yellow' => '33', 'fg-blue' => '34', 'fg-magenta' => '35', 'fg-cyan' => '36', 'fg-white' => '37', 'bg-default' => '49', 'bg-black' => '40', 'bg-red' => '41', 'bg-green' => '42', 'bg-yellow' => '43', 'bg-blue' => '44', 'bg-magenta' => '45', 'bg-cyan' => '46', 'bg-white' => '47', ]; public static function colorize(string $color, string $buffer): string { if (trim($buffer) === '') { return $buffer; } $codes = array_map('\trim', explode(',', $color)); $styles = []; foreach ($codes as $code) { if (isset(self::$ansiCodes[$code])) { $styles[] = self::$ansiCodes[$code] ?? ''; } } if (empty($styles)) { return $buffer; } return self::optimizeColor(sprintf("\x1b[%sm", implode(';', $styles)) . $buffer . "\x1b[0m"); } public static function colorizePath(string $path, ?string $prevPath = null, bool $colorizeFilename = false): string { if ($prevPath === null) { $prevPath = ''; } $path = explode(DIRECTORY_SEPARATOR, $path); $prevPath = explode(DIRECTORY_SEPARATOR, $prevPath); for ($i = 0; $i < min(count($path), count($prevPath)); $i++) { if ($path[$i] == $prevPath[$i]) { $path[$i] = self::dim($path[$i]); } } if ($colorizeFilename) { $last = count($path) - 1; $path[$last] = preg_replace_callback( '/([\-_\.]+|phpt$)/', static function ($matches) { return self::dim($matches[0]); }, $path[$last] ); } return self::optimizeColor(implode(self::dim(DIRECTORY_SEPARATOR), $path)); } public static function dim(string $buffer): string { if (trim($buffer) === '') { return $buffer; } return "\e[2m{$buffer}\e[22m"; } public static function visualizeWhitespace(string $buffer, bool $visualizeEOL = false): string { $replaceMap = $visualizeEOL ? self::WHITESPACE_EOL_MAP : self::WHITESPACE_MAP; return preg_replace_callback('/\s+/', static function ($matches) use ($replaceMap) { return self::dim(strtr($matches[0], $replaceMap)); }, $buffer); } private static function optimizeColor(string $buffer): string { $patterns = [ "/\e\\[22m\e\\[2m/" => '', "/\e\\[([^m]*)m\e\\[([1-9][0-9;]*)m/" => "\e[$1;$2m", "/(\e\\[[^m]*m)+(\e\\[0m)/" => '$2', ]; return preg_replace(array_keys($patterns), array_values($patterns), $buffer); } } PK![†±C@ @ \file-manager-advanced/application/svg-sanitizer/includes/phpunit/phpunit/src/Util/Filter.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace PHPUnit\Util; use function array_unshift; use function defined; use function in_array; use function is_file; use function realpath; use function sprintf; use function strpos; use PHPUnit\Framework\Exception; use PHPUnit\Framework\SyntheticError; use Throwable; /** * @internal This class is not covered by the backward compatibility promise for PHPUnit */ final class Filter { /** * @throws Exception */ public static function getFilteredStacktrace(Throwable $t): string { $filteredStacktrace = ''; if ($t instanceof SyntheticError) { $eTrace = $t->getSyntheticTrace(); $eFile = $t->getSyntheticFile(); $eLine = $t->getSyntheticLine(); } elseif ($t instanceof Exception) { $eTrace = $t->getSerializableTrace(); $eFile = $t->getFile(); $eLine = $t->getLine(); } else { if ($t->getPrevious()) { $t = $t->getPrevious(); } $eTrace = $t->getTrace(); $eFile = $t->getFile(); $eLine = $t->getLine(); } if (!self::frameExists($eTrace, $eFile, $eLine)) { array_unshift( $eTrace, ['file' => $eFile, 'line' => $eLine] ); } $prefix = defined('__PHPUNIT_PHAR_ROOT__') ? __PHPUNIT_PHAR_ROOT__ : false; $blacklist = new Blacklist; foreach ($eTrace as $frame) { if (self::shouldPrintFrame($frame, $prefix, $blacklist)) { $filteredStacktrace .= sprintf( "%s:%s\n", $frame['file'], $frame['line'] ?? '?' ); } } return $filteredStacktrace; } private static function shouldPrintFrame($frame, $prefix, Blacklist $blacklist): bool { if (!isset($frame['file'])) { return false; } $file = $frame['file']; $fileIsNotPrefixed = $prefix === false || strpos($file, $prefix) !== 0; // @see https://github.com/sebastianbergmann/phpunit/issues/4033 if (isset($GLOBALS['_SERVER']['SCRIPT_NAME'])) { $script = realpath($GLOBALS['_SERVER']['SCRIPT_NAME']); } else { $script = ''; } return is_file($file) && self::fileIsBlacklisted($file, $blacklist) && $fileIsNotPrefixed && $file !== $script; } private static function fileIsBlacklisted($file, Blacklist $blacklist): bool { return (empty($GLOBALS['__PHPUNIT_ISOLATION_BLACKLIST']) || !in_array($file, $GLOBALS['__PHPUNIT_ISOLATION_BLACKLIST'], true)) && !$blacklist->isBlacklisted($file); } private static function frameExists(array $trace, string $file, int $line): bool { foreach ($trace as $frame) { if (isset($frame['file'], $frame['line']) && $frame['file'] === $file && $frame['line'] === $line) { return true; } } return false; } } PK!ïX‰ã ã `file-manager-advanced/application/svg-sanitizer/includes/phpunit/phpunit/src/Util/FileLoader.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace PHPUnit\Util; use const DIRECTORY_SEPARATOR; use function array_diff; use function array_keys; use function fopen; use function get_defined_vars; use function sprintf; use function stream_resolve_include_path; use PHPUnit\Framework\Exception; /** * @internal This class is not covered by the backward compatibility promise for PHPUnit */ final class FileLoader { /** * Checks if a PHP sourcecode file is readable. The sourcecode file is loaded through the load() method. * * As a fallback, PHP looks in the directory of the file executing the stream_resolve_include_path function. * We do not want to load the Test.php file here, so skip it if it found that. * PHP prioritizes the include_path setting, so if the current directory is in there, it will first look in the * current working directory. * * @throws Exception */ public static function checkAndLoad(string $filename): string { $includePathFilename = stream_resolve_include_path($filename); if (!$includePathFilename) { throw new Exception( sprintf('Cannot open file "%s".' . "\n", $filename) ); } $localFile = __DIR__ . DIRECTORY_SEPARATOR . $filename; if ($includePathFilename === $localFile || !self::isReadable($includePathFilename)) { throw new Exception( sprintf('Cannot open file "%s".' . "\n", $filename) ); } self::load($includePathFilename); return $includePathFilename; } /** * Loads a PHP sourcefile. */ public static function load(string $filename): void { $oldVariableNames = array_keys(get_defined_vars()); include_once $filename; $newVariables = get_defined_vars(); foreach (array_diff(array_keys($newVariables), $oldVariableNames) as $variableName) { if ($variableName !== 'oldVariableNames') { $GLOBALS[$variableName] = $newVariables[$variableName]; } } } /** * @see https://github.com/sebastianbergmann/phpunit/pull/2751 */ private static function isReadable(string $filename): bool { return @fopen($filename, 'r') !== false; } } PK!áÛÁ¨''`file-manager-advanced/application/svg-sanitizer/includes/phpunit/phpunit/src/Util/Filesystem.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace PHPUnit\Util; use const DIRECTORY_SEPARATOR; use function is_dir; use function mkdir; use function str_replace; /** * @internal This class is not covered by the backward compatibility promise for PHPUnit */ final class Filesystem { /** * Maps class names to source file names: * - PEAR CS: Foo_Bar_Baz -> Foo/Bar/Baz.php * - Namespace: Foo\Bar\Baz -> Foo/Bar/Baz.php. */ public static function classNameToFilename(string $className): string { return str_replace( ['_', '\\'], DIRECTORY_SEPARATOR, $className ) . '.php'; } public static function createDirectory(string $directory): bool { return !(!is_dir($directory) && !@mkdir($directory, 0777, true) && !is_dir($directory)); } } PK!(q77lfile-manager-advanced/application/svg-sanitizer/includes/phpunit/phpunit/src/Util/ConfigurationGenerator.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace PHPUnit\Util; use function str_replace; /** * @internal This class is not covered by the backward compatibility promise for PHPUnit */ final class ConfigurationGenerator { /** * @var string */ private const TEMPLATE = <<<'EOT' {tests_directory} {src_directory} EOT; public function generateDefaultConfiguration(string $phpunitVersion, string $bootstrapScript, string $testsDirectory, string $srcDirectory, string $cacheDirectory): string { return str_replace( [ '{phpunit_version}', '{bootstrap_script}', '{tests_directory}', '{src_directory}', '{cache_directory}', ], [ $phpunitVersion, $bootstrapScript, $testsDirectory, $srcDirectory, $cacheDirectory, ], self::TEMPLATE ); } } PK!Iê)+PPifile-manager-advanced/application/svg-sanitizer/includes/phpunit/phpunit/src/Util/Annotation/DocBlock.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace PHPUnit\Util\Annotation; use const JSON_ERROR_NONE; use const PREG_OFFSET_CAPTURE; use function array_filter; use function array_key_exists; use function array_map; use function array_merge; use function array_pop; use function array_slice; use function array_values; use function constant; use function count; use function defined; use function explode; use function file; use function implode; use function is_array; use function is_int; use function is_numeric; use function is_string; use function json_decode; use function json_last_error; use function json_last_error_msg; use function preg_match; use function preg_match_all; use function preg_replace; use function preg_split; use function realpath; use function rtrim; use function sprintf; use function str_replace; use function strlen; use function strpos; use function strtolower; use function substr; use function substr_count; use function trim; use PharIo\Version\VersionConstraintParser; use PHPUnit\Framework\InvalidDataProviderException; use PHPUnit\Framework\SkippedTestError; use PHPUnit\Framework\Warning; use PHPUnit\Util\Exception; use PHPUnit\Util\InvalidDataSetException; use ReflectionClass; use ReflectionException; use ReflectionFunctionAbstract; use ReflectionMethod; use Reflector; use Traversable; /** * This is an abstraction around a PHPUnit-specific docBlock, * allowing us to ask meaningful questions about a specific * reflection symbol. * * @internal This class is not covered by the backward compatibility promise for PHPUnit */ final class DocBlock { /** * @todo This constant should be private (it's public because of TestTest::testGetProvidedDataRegEx) */ public const REGEX_DATA_PROVIDER = '/@dataProvider\s+([a-zA-Z0-9._:-\\\\x7f-\xff]+)/'; private const REGEX_REQUIRES_VERSION = '/@requires\s+(?PPHP(?:Unit)?)\s+(?P[<>=!]{0,2})\s*(?P[\d\.-]+(dev|(RC|alpha|beta)[\d\.])?)[ \t]*\r?$/m'; private const REGEX_REQUIRES_VERSION_CONSTRAINT = '/@requires\s+(?PPHP(?:Unit)?)\s+(?P[\d\t \-.|~^]+)[ \t]*\r?$/m'; private const REGEX_REQUIRES_OS = '/@requires\s+(?POS(?:FAMILY)?)\s+(?P.+?)[ \t]*\r?$/m'; private const REGEX_REQUIRES_SETTING = '/@requires\s+(?Psetting)\s+(?P([^ ]+?))\s*(?P[\w\.-]+[\w\.]?)?[ \t]*\r?$/m'; private const REGEX_REQUIRES = '/@requires\s+(?Pfunction|extension)\s+(?P([^\s<>=!]+))\s*(?P[<>=!]{0,2})\s*(?P[\d\.-]+[\d\.]?)?[ \t]*\r?$/m'; private const REGEX_TEST_WITH = '/@testWith\s+/'; private const REGEX_EXPECTED_EXCEPTION = '(@expectedException\s+([:.\w\\\\x7f-\xff]+)(?:[\t ]+(\S*))?(?:[\t ]+(\S*))?\s*$)m'; /** @var string */ private $docComment; /** @var bool */ private $isMethod; /** @var array> pre-parsed annotations indexed by name and occurrence index */ private $symbolAnnotations; /** * @var null|array * * @psalm-var null|(array{ * __OFFSET: array&array{__FILE: string}, * setting?: array, * extension_versions?: array * }&array< * string, * string|array{version: string, operator: string}|array{constraint: string}|array * >) */ private $parsedRequirements; /** @var int */ private $startLine; /** @var int */ private $endLine; /** @var string */ private $fileName; /** @var string */ private $name; /** * @var string * * @psalm-var class-string */ private $className; public static function ofClass(ReflectionClass $class): self { $className = $class->getName(); return new self( (string) $class->getDocComment(), false, self::extractAnnotationsFromReflector($class), $class->getStartLine(), $class->getEndLine(), $class->getFileName(), $className, $className ); } /** * @psalm-param class-string $classNameInHierarchy */ public static function ofMethod(ReflectionMethod $method, string $classNameInHierarchy): self { return new self( (string) $method->getDocComment(), true, self::extractAnnotationsFromReflector($method), $method->getStartLine(), $method->getEndLine(), $method->getFileName(), $method->getName(), $classNameInHierarchy ); } /** * Note: we do not preserve an instance of the reflection object, since it cannot be safely (de-)serialized. * * @param array> $symbolAnnotations * * @psalm-param class-string $className */ private function __construct(string $docComment, bool $isMethod, array $symbolAnnotations, int $startLine, int $endLine, string $fileName, string $name, string $className) { $this->docComment = $docComment; $this->isMethod = $isMethod; $this->symbolAnnotations = $symbolAnnotations; $this->startLine = $startLine; $this->endLine = $endLine; $this->fileName = $fileName; $this->name = $name; $this->className = $className; } /** * @psalm-return array{ * __OFFSET: array&array{__FILE: string}, * setting?: array, * extension_versions?: array * }&array< * string, * string|array{version: string, operator: string}|array{constraint: string}|array * > * * @throws Warning if the requirements version constraint is not well-formed */ public function requirements(): array { if ($this->parsedRequirements !== null) { return $this->parsedRequirements; } $offset = $this->startLine; $requires = []; $recordedSettings = []; $extensionVersions = []; $recordedOffsets = [ '__FILE' => realpath($this->fileName), ]; // Trim docblock markers, split it into lines and rewind offset to start of docblock $lines = preg_replace(['#^/\*{2}#', '#\*/$#'], '', preg_split('/\r\n|\r|\n/', $this->docComment)); $offset -= count($lines); foreach ($lines as $line) { if (preg_match(self::REGEX_REQUIRES_OS, $line, $matches)) { $requires[$matches['name']] = $matches['value']; $recordedOffsets[$matches['name']] = $offset; } if (preg_match(self::REGEX_REQUIRES_VERSION, $line, $matches)) { $requires[$matches['name']] = [ 'version' => $matches['version'], 'operator' => $matches['operator'], ]; $recordedOffsets[$matches['name']] = $offset; } if (preg_match(self::REGEX_REQUIRES_VERSION_CONSTRAINT, $line, $matches)) { if (!empty($requires[$matches['name']])) { $offset++; continue; } try { $versionConstraintParser = new VersionConstraintParser; $requires[$matches['name'] . '_constraint'] = [ 'constraint' => $versionConstraintParser->parse(trim($matches['constraint'])), ]; $recordedOffsets[$matches['name'] . '_constraint'] = $offset; } catch (\PharIo\Version\Exception $e) { /* @TODO this catch is currently not valid, see https://github.com/phar-io/version/issues/16 */ throw new Warning($e->getMessage(), $e->getCode(), $e); } } if (preg_match(self::REGEX_REQUIRES_SETTING, $line, $matches)) { $recordedSettings[$matches['setting']] = $matches['value']; $recordedOffsets['__SETTING_' . $matches['setting']] = $offset; } if (preg_match(self::REGEX_REQUIRES, $line, $matches)) { $name = $matches['name'] . 's'; if (!isset($requires[$name])) { $requires[$name] = []; } $requires[$name][] = $matches['value']; $recordedOffsets[$matches['name'] . '_' . $matches['value']] = $offset; if ($name === 'extensions' && !empty($matches['version'])) { $extensionVersions[$matches['value']] = [ 'version' => $matches['version'], 'operator' => $matches['operator'], ]; } } $offset++; } return $this->parsedRequirements = array_merge( $requires, ['__OFFSET' => $recordedOffsets], array_filter([ 'setting' => $recordedSettings, 'extension_versions' => $extensionVersions, ]) ); } /** * @return array|bool * * @psalm-return false|array{ * class: class-string, * code: int|string|null, * message: string, * message_regex: string * } */ public function expectedException() { $docComment = (string) substr($this->docComment, 3, -2); if (1 !== preg_match(self::REGEX_EXPECTED_EXCEPTION, $docComment, $matches)) { return false; } /** @psalm-var class-string $class */ $class = $matches[1]; $annotations = $this->symbolAnnotations(); $code = null; $message = ''; $messageRegExp = ''; if (isset($matches[2])) { $message = trim($matches[2]); } elseif (isset($annotations['expectedExceptionMessage'])) { $message = $this->parseAnnotationContent($annotations['expectedExceptionMessage'][0]); } if (isset($annotations['expectedExceptionMessageRegExp'])) { $messageRegExp = $this->parseAnnotationContent($annotations['expectedExceptionMessageRegExp'][0]); } if (isset($matches[3])) { $code = $matches[3]; } elseif (isset($annotations['expectedExceptionCode'])) { $code = $this->parseAnnotationContent($annotations['expectedExceptionCode'][0]); } if (is_numeric($code)) { $code = (int) $code; } elseif (is_string($code) && defined($code)) { $code = (int) constant($code); } return [ 'class' => $class, 'code' => $code, 'message' => $message, 'message_regex' => $messageRegExp, ]; } /** * Returns the provided data for a method. * * @throws Exception */ public function getProvidedData(): ?array { /** @noinspection SuspiciousBinaryOperationInspection */ $data = $this->getDataFromDataProviderAnnotation($this->docComment) ?? $this->getDataFromTestWithAnnotation($this->docComment); if ($data === null) { return null; } if ($data === []) { throw new SkippedTestError; } foreach ($data as $key => $value) { if (!is_array($value)) { throw new InvalidDataSetException( sprintf( 'Data set %s is invalid.', is_int($key) ? '#' . $key : '"' . $key . '"' ) ); } } return $data; } /** * @psalm-return array */ public function getInlineAnnotations(): array { $code = file($this->fileName); $lineNumber = $this->startLine; $startLine = $this->startLine - 1; $endLine = $this->endLine - 1; $codeLines = array_slice($code, $startLine, $endLine - $startLine + 1); $annotations = []; foreach ($codeLines as $line) { if (preg_match('#/\*\*?\s*@(?P[A-Za-z_-]+)(?:[ \t]+(?P.*?))?[ \t]*\r?\*/$#m', $line, $matches)) { $annotations[strtolower($matches['name'])] = [ 'line' => $lineNumber, 'value' => $matches['value'], ]; } $lineNumber++; } return $annotations; } public function symbolAnnotations(): array { return $this->symbolAnnotations; } public function isHookToBeExecutedBeforeClass(): bool { return $this->isMethod && false !== strpos($this->docComment, '@beforeClass'); } public function isHookToBeExecutedAfterClass(): bool { return $this->isMethod && false !== strpos($this->docComment, '@afterClass'); } public function isToBeExecutedBeforeTest(): bool { return 1 === preg_match('/@before\b/', $this->docComment); } public function isToBeExecutedAfterTest(): bool { return 1 === preg_match('/@after\b/', $this->docComment); } /** * Parse annotation content to use constant/class constant values. * * Constants are specified using a starting '@'. For example: @ClassName::CONST_NAME * * If the constant is not found the string is used as is to ensure maximum BC. */ private function parseAnnotationContent(string $message): string { if (defined($message) && (strpos($message, '::') !== false && substr_count($message, '::') + 1 === 2)) { return constant($message); } return $message; } private function getDataFromDataProviderAnnotation(string $docComment): ?array { $methodName = null; $className = $this->className; if ($this->isMethod) { $methodName = $this->name; } if (!preg_match_all(self::REGEX_DATA_PROVIDER, $docComment, $matches)) { return null; } $result = []; foreach ($matches[1] as $match) { $dataProviderMethodNameNamespace = explode('\\', $match); $leaf = explode('::', array_pop($dataProviderMethodNameNamespace)); $dataProviderMethodName = array_pop($leaf); if (empty($dataProviderMethodNameNamespace)) { $dataProviderMethodNameNamespace = ''; } else { $dataProviderMethodNameNamespace = implode('\\', $dataProviderMethodNameNamespace) . '\\'; } if (empty($leaf)) { $dataProviderClassName = $className; } else { /** @psalm-var class-string $dataProviderClassName */ $dataProviderClassName = $dataProviderMethodNameNamespace . array_pop($leaf); } try { $dataProviderClass = new ReflectionClass($dataProviderClassName); $dataProviderMethod = $dataProviderClass->getMethod( $dataProviderMethodName ); // @codeCoverageIgnoreStart } catch (ReflectionException $e) { throw new Exception( $e->getMessage(), $e->getCode(), $e ); // @codeCoverageIgnoreEnd } if ($dataProviderMethod->isStatic()) { $object = null; } else { $object = $dataProviderClass->newInstance(); } if ($dataProviderMethod->getNumberOfParameters() === 0) { $data = $dataProviderMethod->invoke($object); } else { $data = $dataProviderMethod->invoke($object, $methodName); } if ($data instanceof Traversable) { $origData = $data; $data = []; foreach ($origData as $key => $value) { if (is_int($key)) { $data[] = $value; } elseif (array_key_exists($key, $data)) { throw new InvalidDataProviderException( sprintf( 'The key "%s" has already been defined in the data provider "%s".', $key, $match ) ); } else { $data[$key] = $value; } } } if (is_array($data)) { $result = array_merge($result, $data); } } return $result; } /** * @throws Exception */ private function getDataFromTestWithAnnotation(string $docComment): ?array { $docComment = $this->cleanUpMultiLineAnnotation($docComment); if (!preg_match(self::REGEX_TEST_WITH, $docComment, $matches, PREG_OFFSET_CAPTURE)) { return null; } $offset = strlen($matches[0][0]) + $matches[0][1]; $annotationContent = substr($docComment, $offset); $data = []; foreach (explode("\n", $annotationContent) as $candidateRow) { $candidateRow = trim($candidateRow); if ($candidateRow[0] !== '[') { break; } $dataSet = json_decode($candidateRow, true); if (json_last_error() !== JSON_ERROR_NONE) { throw new Exception( 'The data set for the @testWith annotation cannot be parsed: ' . json_last_error_msg() ); } $data[] = $dataSet; } if (!$data) { throw new Exception('The data set for the @testWith annotation cannot be parsed.'); } return $data; } private function cleanUpMultiLineAnnotation(string $docComment): string { // removing initial ' * ' for docComment $docComment = str_replace("\r\n", "\n", $docComment); $docComment = preg_replace('/\n\s*\*\s?/', "\n", $docComment); $docComment = (string) substr($docComment, 0, -1); return rtrim($docComment, "\n"); } /** @return array> */ private static function parseDocBlock(string $docBlock): array { // Strip away the docblock header and footer to ease parsing of one line annotations $docBlock = (string) substr($docBlock, 3, -2); $annotations = []; if (preg_match_all('/@(?P[A-Za-z_-]+)(?:[ \t]+(?P.*?))?[ \t]*\r?$/m', $docBlock, $matches)) { $numMatches = count($matches[0]); for ($i = 0; $i < $numMatches; $i++) { $annotations[$matches['name'][$i]][] = (string) $matches['value'][$i]; } } return $annotations; } /** @param ReflectionClass|ReflectionFunctionAbstract $reflector */ private static function extractAnnotationsFromReflector(Reflector $reflector): array { $annotations = []; if ($reflector instanceof ReflectionClass) { $annotations = array_merge( $annotations, ...array_map( static function (ReflectionClass $trait): array { return self::parseDocBlock((string) $trait->getDocComment()); }, array_values($reflector->getTraits()) ) ); } return array_merge( $annotations, self::parseDocBlock((string) $reflector->getDocComment()) ); } } PK!Tùsh h ifile-manager-advanced/application/svg-sanitizer/includes/phpunit/phpunit/src/Util/Annotation/Registry.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace PHPUnit\Util\Annotation; use function array_key_exists; use PHPUnit\Util\Exception; use ReflectionClass; use ReflectionException; use ReflectionMethod; /** * Reflection information, and therefore DocBlock information, is static within * a single PHP process. It is therefore okay to use a Singleton registry here. * * @internal This class is not covered by the backward compatibility promise for PHPUnit */ final class Registry { /** @var null|self */ private static $instance; /** @var array indexed by class name */ private $classDocBlocks = []; /** @var array> indexed by class name and method name */ private $methodDocBlocks = []; public static function getInstance(): self { return self::$instance ?? self::$instance = new self; } private function __construct() { } /** * @throws Exception * * @psalm-param class-string $class */ public function forClassName(string $class): DocBlock { if (array_key_exists($class, $this->classDocBlocks)) { return $this->classDocBlocks[$class]; } try { $reflection = new ReflectionClass($class); // @codeCoverageIgnoreStart } catch (ReflectionException $e) { throw new Exception( $e->getMessage(), $e->getCode(), $e ); } // @codeCoverageIgnoreEnd return $this->classDocBlocks[$class] = DocBlock::ofClass($reflection); } /** * @throws Exception * * @psalm-param class-string $classInHierarchy */ public function forMethod(string $classInHierarchy, string $method): DocBlock { if (isset($this->methodDocBlocks[$classInHierarchy][$method])) { return $this->methodDocBlocks[$classInHierarchy][$method]; } try { $reflection = new ReflectionMethod($classInHierarchy, $method); // @codeCoverageIgnoreStart } catch (ReflectionException $e) { throw new Exception( $e->getMessage(), $e->getCode(), $e ); } // @codeCoverageIgnoreEnd return $this->methodDocBlocks[$classInHierarchy][$method] = DocBlock::ofMethod($reflection, $classInHierarchy); } } PK!MêàB  _file-manager-advanced/application/svg-sanitizer/includes/phpunit/phpunit/src/Util/Blacklist.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace PHPUnit\Util; use const DIRECTORY_SEPARATOR; use function class_exists; use function defined; use function dirname; use function strpos; use function sys_get_temp_dir; use Composer\Autoload\ClassLoader; use DeepCopy\DeepCopy; use Doctrine\Instantiator\Instantiator; use PharIo\Manifest\Manifest; use PharIo\Version\Version as PharIoVersion; use PHP_Token; use PHPUnit\Framework\TestCase; use ReflectionClass; use ReflectionException; use SebastianBergmann\CodeCoverage\CodeCoverage; use SebastianBergmann\CodeUnitReverseLookup\Wizard; use SebastianBergmann\Comparator\Comparator; use SebastianBergmann\Diff\Diff; use SebastianBergmann\Environment\Runtime; use SebastianBergmann\Exporter\Exporter; use SebastianBergmann\FileIterator\Facade as FileIteratorFacade; use SebastianBergmann\GlobalState\Snapshot; use SebastianBergmann\Invoker\Invoker; use SebastianBergmann\ObjectEnumerator\Enumerator; use SebastianBergmann\ObjectReflector\ObjectReflector; use SebastianBergmann\RecursionContext\Context; use SebastianBergmann\ResourceOperations\ResourceOperations; use SebastianBergmann\Timer\Timer; use SebastianBergmann\Type\TypeName; use SebastianBergmann\Version; use Text_Template; use TheSeer\Tokenizer\Tokenizer; /** * @internal This class is not covered by the backward compatibility promise for PHPUnit */ final class Blacklist { /** * @var array */ public static $blacklistedClassNames = [ // composer ClassLoader::class => 1, // doctrine/instantiator Instantiator::class => 1, // myclabs/deepcopy DeepCopy::class => 1, // phar-io/manifest Manifest::class => 1, // phar-io/version PharIoVersion::class => 1, // phpdocumentor/type-resolver Type::class => 1, // phpunit/phpunit TestCase::class => 2, // phpunit/php-code-coverage CodeCoverage::class => 1, // phpunit/php-file-iterator FileIteratorFacade::class => 1, // phpunit/php-invoker Invoker::class => 1, // phpunit/php-text-template Text_Template::class => 1, // phpunit/php-timer Timer::class => 1, // phpunit/php-token-stream PHP_Token::class => 1, // sebastian/code-unit-reverse-lookup Wizard::class => 1, // sebastian/comparator Comparator::class => 1, // sebastian/diff Diff::class => 1, // sebastian/environment Runtime::class => 1, // sebastian/exporter Exporter::class => 1, // sebastian/global-state Snapshot::class => 1, // sebastian/object-enumerator Enumerator::class => 1, // sebastian/object-reflector ObjectReflector::class => 1, // sebastian/recursion-context Context::class => 1, // sebastian/resource-operations ResourceOperations::class => 1, // sebastian/type TypeName::class => 1, // sebastian/version Version::class => 1, // theseer/tokenizer Tokenizer::class => 1, ]; /** * @var string[] */ private static $directories; /** * @throws Exception * * @return string[] */ public function getBlacklistedDirectories(): array { $this->initialize(); return self::$directories; } /** * @throws Exception */ public function isBlacklisted(string $file): bool { if (defined('PHPUNIT_TESTSUITE')) { return false; } $this->initialize(); foreach (self::$directories as $directory) { if (strpos($file, $directory) === 0) { return true; } } return false; } /** * @throws Exception */ private function initialize(): void { if (self::$directories === null) { self::$directories = []; foreach (self::$blacklistedClassNames as $className => $parent) { if (!class_exists($className)) { continue; } try { $directory = (new ReflectionClass($className))->getFileName(); // @codeCoverageIgnoreStart } catch (ReflectionException $e) { throw new Exception( $e->getMessage(), $e->getCode(), $e ); } // @codeCoverageIgnoreEnd for ($i = 0; $i < $parent; $i++) { $directory = dirname($directory); } self::$directories[] = $directory; } // Hide process isolation workaround on Windows. if (DIRECTORY_SEPARATOR === '\\') { // tempnam() prefix is limited to first 3 chars. // @see https://php.net/manual/en/function.tempnam.php self::$directories[] = sys_get_temp_dir() . '\\PHP'; } } } } PK!V‰Î$ $ ofile-manager-advanced/application/svg-sanitizer/includes/phpunit/phpunit/src/Util/TestDox/HtmlResultPrinter.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace PHPUnit\Util\TestDox; use function sprintf; /** * @internal This class is not covered by the backward compatibility promise for PHPUnit */ final class HtmlResultPrinter extends ResultPrinter { /** * @var string */ private const PAGE_HEADER = <<<'EOT' Test Documentation EOT; /** * @var string */ private const CLASS_HEADER = <<<'EOT'

%s

    EOT; /** * @var string */ private const CLASS_FOOTER = <<<'EOT'
EOT; /** * @var string */ private const PAGE_FOOTER = <<<'EOT' EOT; /** * Handler for 'start run' event. */ protected function startRun(): void { $this->write(self::PAGE_HEADER); } /** * Handler for 'start class' event. */ protected function startClass(string $name): void { $this->write( sprintf( self::CLASS_HEADER, $name, $this->currentTestClassPrettified ) ); } /** * Handler for 'on test' event. */ protected function onTest($name, bool $success = true): void { $this->write( sprintf( "
  • %s %s
  • \n", $success ? '#555753' : '#ef2929', $success ? '✓' : 'â�Œ', $name ) ); } /** * Handler for 'end class' event. */ protected function endClass(string $name): void { $this->write(self::CLASS_FOOTER); } /** * Handler for 'end run' event. */ protected function endRun(): void { $this->write(self::PAGE_FOOTER); } } PK!zi>»$$ofile-manager-advanced/application/svg-sanitizer/includes/phpunit/phpunit/src/Util/TestDox/TextResultPrinter.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace PHPUnit\Util\TestDox; /** * @internal This class is not covered by the backward compatibility promise for PHPUnit */ final class TextResultPrinter extends ResultPrinter { /** * Handler for 'start class' event. */ protected function startClass(string $name): void { $this->write($this->currentTestClassPrettified . "\n"); } /** * Handler for 'on test' event. */ protected function onTest($name, bool $success = true): void { if ($success) { $this->write(' [x] '); } else { $this->write(' [ ] '); } $this->write($name . "\n"); } /** * Handler for 'end class' event. */ protected function endClass(string $name): void { $this->write("\n"); } } PK!”¥gÙkfile-manager-advanced/application/svg-sanitizer/includes/phpunit/phpunit/src/Util/TestDox/ResultPrinter.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace PHPUnit\Util\TestDox; use function get_class; use function in_array; use PHPUnit\Framework\AssertionFailedError; use PHPUnit\Framework\Exception; use PHPUnit\Framework\Test; use PHPUnit\Framework\TestCase; use PHPUnit\Framework\TestListener; use PHPUnit\Framework\TestSuite; use PHPUnit\Framework\Warning; use PHPUnit\Framework\WarningTestCase; use PHPUnit\Runner\BaseTestRunner; use PHPUnit\Util\Printer; use SebastianBergmann\RecursionContext\InvalidArgumentException; use Throwable; /** * @internal This class is not covered by the backward compatibility promise for PHPUnit */ abstract class ResultPrinter extends Printer implements TestListener { /** * @var NamePrettifier */ protected $prettifier; /** * @var string */ protected $testClass = ''; /** * @var int */ protected $testStatus; /** * @var array */ protected $tests = []; /** * @var int */ protected $successful = 0; /** * @var int */ protected $warned = 0; /** * @var int */ protected $failed = 0; /** * @var int */ protected $risky = 0; /** * @var int */ protected $skipped = 0; /** * @var int */ protected $incomplete = 0; /** * @var null|string */ protected $currentTestClassPrettified; /** * @var null|string */ protected $currentTestMethodPrettified; /** * @var array */ private $groups; /** * @var array */ private $excludeGroups; /** * @param resource $out * * @throws Exception */ public function __construct($out = null, array $groups = [], array $excludeGroups = []) { parent::__construct($out); $this->groups = $groups; $this->excludeGroups = $excludeGroups; $this->prettifier = new NamePrettifier; $this->startRun(); } /** * Flush buffer and close output. */ public function flush(): void { $this->doEndClass(); $this->endRun(); parent::flush(); } /** * An error occurred. */ public function addError(Test $test, Throwable $t, float $time): void { if (!$this->isOfInterest($test)) { return; } $this->testStatus = BaseTestRunner::STATUS_ERROR; $this->failed++; } /** * A warning occurred. */ public function addWarning(Test $test, Warning $e, float $time): void { if (!$this->isOfInterest($test)) { return; } $this->testStatus = BaseTestRunner::STATUS_WARNING; $this->warned++; } /** * A failure occurred. */ public function addFailure(Test $test, AssertionFailedError $e, float $time): void { if (!$this->isOfInterest($test)) { return; } $this->testStatus = BaseTestRunner::STATUS_FAILURE; $this->failed++; } /** * Incomplete test. */ public function addIncompleteTest(Test $test, Throwable $t, float $time): void { if (!$this->isOfInterest($test)) { return; } $this->testStatus = BaseTestRunner::STATUS_INCOMPLETE; $this->incomplete++; } /** * Risky test. */ public function addRiskyTest(Test $test, Throwable $t, float $time): void { if (!$this->isOfInterest($test)) { return; } $this->testStatus = BaseTestRunner::STATUS_RISKY; $this->risky++; } /** * Skipped test. */ public function addSkippedTest(Test $test, Throwable $t, float $time): void { if (!$this->isOfInterest($test)) { return; } $this->testStatus = BaseTestRunner::STATUS_SKIPPED; $this->skipped++; } /** * A testsuite started. */ public function startTestSuite(TestSuite $suite): void { } /** * A testsuite ended. */ public function endTestSuite(TestSuite $suite): void { } /** * A test started. * * @throws InvalidArgumentException */ public function startTest(Test $test): void { if (!$this->isOfInterest($test)) { return; } $class = get_class($test); if ($this->testClass !== $class) { if ($this->testClass !== '') { $this->doEndClass(); } $this->currentTestClassPrettified = $this->prettifier->prettifyTestClass($class); $this->testClass = $class; $this->tests = []; $this->startClass($class); } if ($test instanceof TestCase) { $this->currentTestMethodPrettified = $this->prettifier->prettifyTestCase($test); } $this->testStatus = BaseTestRunner::STATUS_PASSED; } /** * A test ended. */ public function endTest(Test $test, float $time): void { if (!$this->isOfInterest($test)) { return; } $this->tests[] = [$this->currentTestMethodPrettified, $this->testStatus]; $this->currentTestClassPrettified = null; $this->currentTestMethodPrettified = null; } protected function doEndClass(): void { foreach ($this->tests as $test) { $this->onTest($test[0], $test[1] === BaseTestRunner::STATUS_PASSED); } $this->endClass($this->testClass); } /** * Handler for 'start run' event. */ protected function startRun(): void { } /** * Handler for 'start class' event. */ protected function startClass(string $name): void { } /** * Handler for 'on test' event. */ protected function onTest($name, bool $success = true): void { } /** * Handler for 'end class' event. */ protected function endClass(string $name): void { } /** * Handler for 'end run' event. */ protected function endRun(): void { } private function isOfInterest(Test $test): bool { if (!$test instanceof TestCase) { return false; } if ($test instanceof WarningTestCase) { return false; } if (!empty($this->groups)) { foreach ($test->getGroups() as $group) { if (in_array($group, $this->groups, true)) { return true; } } return false; } if (!empty($this->excludeGroups)) { foreach ($test->getGroups() as $group) { if (in_array($group, $this->excludeGroups, true)) { return false; } } return true; } return true; } } PK!‡X5/©©nfile-manager-advanced/application/svg-sanitizer/includes/phpunit/phpunit/src/Util/TestDox/XmlResultPrinter.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace PHPUnit\Util\TestDox; use function array_filter; use function get_class; use function implode; use DOMDocument; use DOMElement; use PHPUnit\Framework\AssertionFailedError; use PHPUnit\Framework\Exception; use PHPUnit\Framework\Test; use PHPUnit\Framework\TestCase; use PHPUnit\Framework\TestListener; use PHPUnit\Framework\TestSuite; use PHPUnit\Framework\Warning; use PHPUnit\Util\Printer; use ReflectionClass; use ReflectionException; use SebastianBergmann\RecursionContext\InvalidArgumentException; use Throwable; /** * @internal This class is not covered by the backward compatibility promise for PHPUnit */ final class XmlResultPrinter extends Printer implements TestListener { /** * @var DOMDocument */ private $document; /** * @var DOMElement */ private $root; /** * @var NamePrettifier */ private $prettifier; /** * @var null|Throwable */ private $exception; /** * @param resource|string $out * * @throws Exception */ public function __construct($out = null) { $this->document = new DOMDocument('1.0', 'UTF-8'); $this->document->formatOutput = true; $this->root = $this->document->createElement('tests'); $this->document->appendChild($this->root); $this->prettifier = new NamePrettifier; parent::__construct($out); } /** * Flush buffer and close output. */ public function flush(): void { $this->write($this->document->saveXML()); parent::flush(); } /** * An error occurred. */ public function addError(Test $test, Throwable $t, float $time): void { $this->exception = $t; } /** * A warning occurred. */ public function addWarning(Test $test, Warning $e, float $time): void { } /** * A failure occurred. */ public function addFailure(Test $test, AssertionFailedError $e, float $time): void { $this->exception = $e; } /** * Incomplete test. */ public function addIncompleteTest(Test $test, Throwable $t, float $time): void { } /** * Risky test. */ public function addRiskyTest(Test $test, Throwable $t, float $time): void { } /** * Skipped test. */ public function addSkippedTest(Test $test, Throwable $t, float $time): void { } /** * A test suite started. */ public function startTestSuite(TestSuite $suite): void { } /** * A test suite ended. */ public function endTestSuite(TestSuite $suite): void { } /** * A test started. */ public function startTest(Test $test): void { $this->exception = null; } /** * A test ended. * * @throws InvalidArgumentException */ public function endTest(Test $test, float $time): void { if (!$test instanceof TestCase) { return; } $groups = array_filter( $test->getGroups(), static function ($group) { return !($group === 'small' || $group === 'medium' || $group === 'large'); } ); $testNode = $this->document->createElement('test'); $testNode->setAttribute('className', get_class($test)); $testNode->setAttribute('methodName', $test->getName()); $testNode->setAttribute('prettifiedClassName', $this->prettifier->prettifyTestClass(get_class($test))); $testNode->setAttribute('prettifiedMethodName', $this->prettifier->prettifyTestCase($test)); $testNode->setAttribute('status', (string) $test->getStatus()); $testNode->setAttribute('time', (string) $time); $testNode->setAttribute('size', (string) $test->getSize()); $testNode->setAttribute('groups', implode(',', $groups)); foreach ($groups as $group) { $groupNode = $this->document->createElement('group'); $groupNode->setAttribute('name', $group); $testNode->appendChild($groupNode); } $annotations = $test->getAnnotations(); foreach (['class', 'method'] as $type) { foreach ($annotations[$type] as $annotation => $values) { if ($annotation !== 'covers' && $annotation !== 'uses') { continue; } foreach ($values as $value) { $coversNode = $this->document->createElement($annotation); $coversNode->setAttribute('target', $value); $testNode->appendChild($coversNode); } } } foreach ($test->doubledTypes() as $doubledType) { $testDoubleNode = $this->document->createElement('testDouble'); $testDoubleNode->setAttribute('type', $doubledType); $testNode->appendChild($testDoubleNode); } $inlineAnnotations = \PHPUnit\Util\Test::getInlineAnnotations(get_class($test), $test->getName(false)); if (isset($inlineAnnotations['given'], $inlineAnnotations['when'], $inlineAnnotations['then'])) { $testNode->setAttribute('given', $inlineAnnotations['given']['value']); $testNode->setAttribute('givenStartLine', (string) $inlineAnnotations['given']['line']); $testNode->setAttribute('when', $inlineAnnotations['when']['value']); $testNode->setAttribute('whenStartLine', (string) $inlineAnnotations['when']['line']); $testNode->setAttribute('then', $inlineAnnotations['then']['value']); $testNode->setAttribute('thenStartLine', (string) $inlineAnnotations['then']['line']); } if ($this->exception !== null) { if ($this->exception instanceof Exception) { $steps = $this->exception->getSerializableTrace(); } else { $steps = $this->exception->getTrace(); } try { $file = (new ReflectionClass($test))->getFileName(); // @codeCoverageIgnoreStart } catch (ReflectionException $e) { throw new Exception( $e->getMessage(), $e->getCode(), $e ); } // @codeCoverageIgnoreEnd foreach ($steps as $step) { if (isset($step['file']) && $step['file'] === $file) { $testNode->setAttribute('exceptionLine', (string) $step['line']); break; } } $testNode->setAttribute('exceptionMessage', $this->exception->getMessage()); } $this->root->appendChild($testNode); } } PK!u/Ì4D+D+ofile-manager-advanced/application/svg-sanitizer/includes/phpunit/phpunit/src/Util/TestDox/CliTestDoxPrinter.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace PHPUnit\Util\TestDox; use const PHP_EOL; use function array_map; use function ceil; use function count; use function explode; use function get_class; use function implode; use function preg_match; use function sprintf; use function strlen; use function strpos; use function trim; use PHPUnit\Framework\Test; use PHPUnit\Framework\TestCase; use PHPUnit\Framework\TestFailure; use PHPUnit\Framework\TestResult; use PHPUnit\Runner\BaseTestRunner; use PHPUnit\Runner\PhptTestCase; use PHPUnit\Util\Color; use PHPUnit\Util\Filter; use SebastianBergmann\RecursionContext\InvalidArgumentException; use SebastianBergmann\Timer\RuntimeException; use SebastianBergmann\Timer\Timer; use Throwable; /** * @internal This class is not covered by the backward compatibility promise for PHPUnit */ class CliTestDoxPrinter extends TestDoxPrinter { /** * The default Testdox left margin for messages is a vertical line. */ private const PREFIX_SIMPLE = [ 'default' => '│', 'start' => '│', 'message' => '│', 'diff' => '│', 'trace' => '│', 'last' => '│', ]; /** * Colored Testdox use box-drawing for a more textured map of the message. */ private const PREFIX_DECORATED = [ 'default' => '│', 'start' => 'â”�', 'message' => '├', 'diff' => '┊', 'trace' => '╵', 'last' => 'â”´', ]; private const SPINNER_ICONS = [ " \e[36mâ—�\e[0m running tests", " \e[36mâ—“\e[0m running tests", " \e[36mâ—‘\e[0m running tests", " \e[36mâ—’\e[0m running tests", ]; private const STATUS_STYLES = [ BaseTestRunner::STATUS_PASSED => [ 'symbol' => '✔', 'color' => 'fg-green', ], BaseTestRunner::STATUS_ERROR => [ 'symbol' => '✘', 'color' => 'fg-yellow', 'message' => 'bg-yellow,fg-black', ], BaseTestRunner::STATUS_FAILURE => [ 'symbol' => '✘', 'color' => 'fg-red', 'message' => 'bg-red,fg-white', ], BaseTestRunner::STATUS_SKIPPED => [ 'symbol' => '↩', 'color' => 'fg-cyan', 'message' => 'fg-cyan', ], BaseTestRunner::STATUS_RISKY => [ 'symbol' => '☢', 'color' => 'fg-yellow', 'message' => 'fg-yellow', ], BaseTestRunner::STATUS_INCOMPLETE => [ 'symbol' => '∅', 'color' => 'fg-yellow', 'message' => 'fg-yellow', ], BaseTestRunner::STATUS_WARNING => [ 'symbol' => 'âš ', 'color' => 'fg-yellow', 'message' => 'fg-yellow', ], BaseTestRunner::STATUS_UNKNOWN => [ 'symbol' => '?', 'color' => 'fg-blue', 'message' => 'fg-white,bg-blue', ], ]; /** * @var int[] */ private $nonSuccessfulTestResults = []; /** * @throws RuntimeException */ public function printResult(TestResult $result): void { $this->printHeader($result); $this->printNonSuccessfulTestsSummary($result->count()); $this->printFooter($result); } /** * @throws RuntimeException */ protected function printHeader(TestResult $result): void { $this->write("\n" . Timer::resourceUsage() . "\n\n"); } protected function formatClassName(Test $test): string { if ($test instanceof TestCase) { return $this->prettifier->prettifyTestClass(get_class($test)); } return get_class($test); } /** * @throws InvalidArgumentException */ protected function registerTestResult(Test $test, ?Throwable $t, int $status, float $time, bool $verbose): void { if ($status !== BaseTestRunner::STATUS_PASSED) { $this->nonSuccessfulTestResults[] = $this->testIndex; } parent::registerTestResult($test, $t, $status, $time, $verbose); } /** * @throws InvalidArgumentException */ protected function formatTestName(Test $test): string { if ($test instanceof TestCase) { return $this->prettifier->prettifyTestCase($test); } return parent::formatTestName($test); } protected function writeTestResult(array $prevResult, array $result): void { // spacer line for new suite headers and after verbose messages if ($prevResult['testName'] !== '' && (!empty($prevResult['message']) || $prevResult['className'] !== $result['className'])) { $this->write(PHP_EOL); } // suite header if ($prevResult['className'] !== $result['className']) { $this->write($this->colorizeTextBox('underlined', $result['className']) . PHP_EOL); } // test result line if ($this->colors && $result['className'] === PhptTestCase::class) { $testName = Color::colorizePath($result['testName'], $prevResult['testName'], true); } else { $testName = $result['testMethod']; } $style = self::STATUS_STYLES[$result['status']]; $line = sprintf( ' %s %s%s' . PHP_EOL, $this->colorizeTextBox($style['color'], $style['symbol']), $testName, $this->verbose ? ' ' . $this->formatRuntime($result['time'], $style['color']) : '' ); $this->write($line); // additional information when verbose $this->write($result['message']); } protected function formatThrowable(Throwable $t, ?int $status = null): string { return trim(TestFailure::exceptionToString($t)); } protected function colorizeMessageAndDiff(string $style, string $buffer): array { $lines = $buffer ? array_map('\rtrim', explode(PHP_EOL, $buffer)) : []; $message = []; $diff = []; $insideDiff = false; foreach ($lines as $line) { if ($line === '--- Expected') { $insideDiff = true; } if (!$insideDiff) { $message[] = $line; } else { if (strpos($line, '-') === 0) { $line = Color::colorize('fg-red', Color::visualizeWhitespace($line, true)); } elseif (strpos($line, '+') === 0) { $line = Color::colorize('fg-green', Color::visualizeWhitespace($line, true)); } elseif ($line === '@@ @@') { $line = Color::colorize('fg-cyan', $line); } $diff[] = $line; } } $diff = implode(PHP_EOL, $diff); if (!empty($message)) { $message = $this->colorizeTextBox($style, implode(PHP_EOL, $message)); } return [$message, $diff]; } protected function formatStacktrace(Throwable $t): string { $trace = Filter::getFilteredStacktrace($t); if (!$this->colors) { return $trace; } $lines = []; $prevPath = ''; foreach (explode(PHP_EOL, $trace) as $line) { if (preg_match('/^(.*):(\d+)$/', $line, $matches)) { $lines[] = Color::colorizePath($matches[1], $prevPath) . Color::dim(':') . Color::colorize('fg-blue', $matches[2]) . "\n"; $prevPath = $matches[1]; } else { $lines[] = $line; $prevPath = ''; } } return implode('', $lines); } protected function formatTestResultMessage(Throwable $t, array $result, ?string $prefix = null): string { $message = $this->formatThrowable($t, $result['status']); $diff = ''; if (!($this->verbose || $result['verbose'])) { return ''; } if ($message && $this->colors) { $style = self::STATUS_STYLES[$result['status']]['message'] ?? ''; [$message, $diff] = $this->colorizeMessageAndDiff($style, $message); } if ($prefix === null || !$this->colors) { $prefix = self::PREFIX_SIMPLE; } if ($this->colors) { $color = self::STATUS_STYLES[$result['status']]['color'] ?? ''; $prefix = array_map(static function ($p) use ($color) { return Color::colorize($color, $p); }, self::PREFIX_DECORATED); } $trace = $this->formatStacktrace($t); $out = $this->prefixLines($prefix['start'], PHP_EOL) . PHP_EOL; if ($message) { $out .= $this->prefixLines($prefix['message'], $message . PHP_EOL) . PHP_EOL; } if ($diff) { $out .= $this->prefixLines($prefix['diff'], $diff . PHP_EOL) . PHP_EOL; } if ($trace) { if ($message || $diff) { $out .= $this->prefixLines($prefix['default'], PHP_EOL) . PHP_EOL; } $out .= $this->prefixLines($prefix['trace'], $trace . PHP_EOL) . PHP_EOL; } $out .= $this->prefixLines($prefix['last'], PHP_EOL) . PHP_EOL; return $out; } protected function drawSpinner(): void { if ($this->colors) { $id = $this->spinState % count(self::SPINNER_ICONS); $this->write(self::SPINNER_ICONS[$id]); } } protected function undrawSpinner(): void { if ($this->colors) { $id = $this->spinState % count(self::SPINNER_ICONS); $this->write("\e[1K\e[" . strlen(self::SPINNER_ICONS[$id]) . 'D'); } } private function formatRuntime(float $time, string $color = ''): string { if (!$this->colors) { return sprintf('[%.2f ms]', $time * 1000); } if ($time > 1) { $color = 'fg-magenta'; } return Color::colorize($color, ' ' . (int) ceil($time * 1000) . ' ' . Color::dim('ms')); } private function printNonSuccessfulTestsSummary(int $numberOfExecutedTests): void { if (empty($this->nonSuccessfulTestResults)) { return; } if ((count($this->nonSuccessfulTestResults) / $numberOfExecutedTests) >= 0.7) { return; } $this->write("Summary of non-successful tests:\n\n"); $prevResult = $this->getEmptyTestResult(); foreach ($this->nonSuccessfulTestResults as $testIndex) { $result = $this->testResults[$testIndex]; $this->writeTestResult($prevResult, $result); $prevResult = $result; } } } PK!pÐì"ì"lfile-manager-advanced/application/svg-sanitizer/includes/phpunit/phpunit/src/Util/TestDox/NamePrettifier.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace PHPUnit\Util\TestDox; use function array_key_exists; use function array_keys; use function array_map; use function array_pop; use function array_values; use function explode; use function get_class; use function gettype; use function implode; use function in_array; use function is_bool; use function is_float; use function is_int; use function is_numeric; use function is_object; use function is_scalar; use function is_string; use function ord; use function preg_quote; use function preg_replace; use function range; use function sprintf; use function str_replace; use function strlen; use function strpos; use function strtolower; use function strtoupper; use function substr; use function trim; use PHPUnit\Framework\TestCase; use PHPUnit\Util\Color; use PHPUnit\Util\Exception as UtilException; use PHPUnit\Util\Test; use ReflectionException; use ReflectionMethod; use ReflectionObject; use SebastianBergmann\Exporter\Exporter; use SebastianBergmann\RecursionContext\InvalidArgumentException; /** * @internal This class is not covered by the backward compatibility promise for PHPUnit */ final class NamePrettifier { /** * @var string[] */ private $strings = []; /** * @var bool */ private $useColor; public function __construct($useColor = false) { $this->useColor = $useColor; } /** * Prettifies the name of a test class. * * @psalm-param class-string $className */ public function prettifyTestClass(string $className): string { try { $annotations = Test::parseTestMethodAnnotations($className); if (isset($annotations['class']['testdox'][0])) { return $annotations['class']['testdox'][0]; } } catch (UtilException $e) { // ignore, determine className by parsing the provided name } $parts = explode('\\', $className); $className = array_pop($parts); if (substr($className, -1 * strlen('Test')) === 'Test') { $className = substr($className, 0, strlen($className) - strlen('Test')); } if (strpos($className, 'Tests') === 0) { $className = substr($className, strlen('Tests')); } elseif (strpos($className, 'Test') === 0) { $className = substr($className, strlen('Test')); } if (empty($className)) { $className = 'UnnamedTests'; } if (!empty($parts)) { $parts[] = $className; $fullyQualifiedName = implode('\\', $parts); } else { $fullyQualifiedName = $className; } $result = preg_replace('/(?<=[[:lower:]])(?=[[:upper:]])/u', ' ', $className); if ($fullyQualifiedName !== $className) { return $result . ' (' . $fullyQualifiedName . ')'; } return $result; } /** * @throws InvalidArgumentException */ public function prettifyTestCase(TestCase $test): string { $annotations = $test->getAnnotations(); $annotationWithPlaceholders = false; $callback = static function (string $variable): string { return sprintf('/%s(?=\b)/', preg_quote($variable, '/')); }; if (isset($annotations['method']['testdox'][0])) { $result = $annotations['method']['testdox'][0]; if (strpos($result, '$') !== false) { $annotation = $annotations['method']['testdox'][0]; $providedData = $this->mapTestMethodParameterNamesToProvidedDataValues($test); $variables = array_map($callback, array_keys($providedData)); $result = trim(preg_replace($variables, $providedData, $annotation)); $annotationWithPlaceholders = true; } } else { $result = $this->prettifyTestMethod($test->getName(false)); } if (!$annotationWithPlaceholders && $test->usesDataProvider()) { $result .= $this->prettifyDataSet($test); } return $result; } public function prettifyDataSet(TestCase $test): string { if (!$this->useColor) { return $test->getDataSetAsString(false); } if (is_int($test->dataName())) { $data = Color::dim(' with data set ') . Color::colorize('fg-cyan', (string) $test->dataName()); } else { $data = Color::dim(' with ') . Color::colorize('fg-cyan', Color::visualizeWhitespace((string) $test->dataName())); } return $data; } /** * Prettifies the name of a test method. */ public function prettifyTestMethod(string $name): string { $buffer = ''; if ($name === '') { return $buffer; } $string = (string) preg_replace('#\d+$#', '', $name, -1, $count); if (in_array($string, $this->strings, true)) { $name = $string; } elseif ($count === 0) { $this->strings[] = $string; } if (strpos($name, 'test_') === 0) { $name = substr($name, 5); } elseif (strpos($name, 'test') === 0) { $name = substr($name, 4); } if ($name === '') { return $buffer; } $name[0] = strtoupper($name[0]); if (strpos($name, '_') !== false) { return trim(str_replace('_', ' ', $name)); } $wasNumeric = false; foreach (range(0, strlen($name) - 1) as $i) { if ($i > 0 && ord($name[$i]) >= 65 && ord($name[$i]) <= 90) { $buffer .= ' ' . strtolower($name[$i]); } else { $isNumeric = is_numeric($name[$i]); if (!$wasNumeric && $isNumeric) { $buffer .= ' '; $wasNumeric = true; } if ($wasNumeric && !$isNumeric) { $wasNumeric = false; } $buffer .= $name[$i]; } } return $buffer; } /** * @throws InvalidArgumentException */ private function mapTestMethodParameterNamesToProvidedDataValues(TestCase $test): array { try { $reflector = new ReflectionMethod(get_class($test), $test->getName(false)); // @codeCoverageIgnoreStart } catch (ReflectionException $e) { throw new UtilException( $e->getMessage(), $e->getCode(), $e ); } // @codeCoverageIgnoreEnd $providedData = []; $providedDataValues = array_values($test->getProvidedData()); $i = 0; $providedData['$_dataName'] = $test->dataName(); foreach ($reflector->getParameters() as $parameter) { if (!array_key_exists($i, $providedDataValues) && $parameter->isDefaultValueAvailable()) { try { $providedDataValues[$i] = $parameter->getDefaultValue(); // @codeCoverageIgnoreStart } catch (ReflectionException $e) { throw new UtilException( $e->getMessage(), $e->getCode(), $e ); } // @codeCoverageIgnoreEnd } $value = $providedDataValues[$i++] ?? null; if (is_object($value)) { $reflector = new ReflectionObject($value); if ($reflector->hasMethod('__toString')) { $value = (string) $value; } else { $value = get_class($value); } } if (!is_scalar($value)) { $value = gettype($value); } if (is_bool($value) || is_int($value) || is_float($value)) { $value = (new Exporter)->export($value); } if (is_string($value) && $value === '') { if ($this->useColor) { $value = Color::colorize('dim,underlined', 'empty'); } else { $value = "''"; } } $providedData['$' . $parameter->getName()] = $value; } if ($this->useColor) { $providedData = array_map(static function ($value) { return Color::colorize('fg-cyan', Color::visualizeWhitespace((string) $value, true)); }, $providedData); } return $providedData; } } PK!ý#iª‰)‰)lfile-manager-advanced/application/svg-sanitizer/includes/phpunit/phpunit/src/Util/TestDox/TestDoxPrinter.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace PHPUnit\Util\TestDox; use const PHP_EOL; use function array_map; use function get_class; use function implode; use function preg_split; use function trim; use PHPUnit\Framework\AssertionFailedError; use PHPUnit\Framework\Exception; use PHPUnit\Framework\Test; use PHPUnit\Framework\TestCase; use PHPUnit\Framework\TestFailure; use PHPUnit\Framework\TestResult; use PHPUnit\Framework\TestSuite; use PHPUnit\Framework\Warning; use PHPUnit\Runner\BaseTestRunner; use PHPUnit\Runner\PhptTestCase; use PHPUnit\Runner\TestSuiteSorter; use PHPUnit\TextUI\ResultPrinter; use PHPUnit\Util\Filter; use SebastianBergmann\RecursionContext\InvalidArgumentException; use Throwable; /** * @internal This class is not covered by the backward compatibility promise for PHPUnit */ class TestDoxPrinter extends ResultPrinter { /** * @var NamePrettifier */ protected $prettifier; /** * @var int The number of test results received from the TestRunner */ protected $testIndex = 0; /** * @var int The number of test results already sent to the output */ protected $testFlushIndex = 0; /** * @var array Buffer for test results */ protected $testResults = []; /** * @var array Lookup table for testname to testResults[index] */ protected $testNameResultIndex = []; /** * @var bool */ protected $enableOutputBuffer = false; /** * @var array array */ protected $originalExecutionOrder = []; /** * @var int */ protected $spinState = 0; /** * @var bool */ protected $showProgress = true; /** * @param null|resource|string $out * * @throws Exception */ public function __construct($out = null, bool $verbose = false, string $colors = self::COLOR_DEFAULT, bool $debug = false, $numberOfColumns = 80, bool $reverse = false) { parent::__construct($out, $verbose, $colors, $debug, $numberOfColumns, $reverse); $this->prettifier = new NamePrettifier($this->colors); } public function setOriginalExecutionOrder(array $order): void { $this->originalExecutionOrder = $order; $this->enableOutputBuffer = !empty($order); } public function setShowProgressAnimation(bool $showProgress): void { $this->showProgress = $showProgress; } public function printResult(TestResult $result): void { } /** * @throws InvalidArgumentException */ public function endTest(Test $test, float $time): void { if (!$test instanceof TestCase && !$test instanceof PhptTestCase && !$test instanceof TestSuite) { return; } if ($this->testHasPassed()) { $this->registerTestResult($test, null, BaseTestRunner::STATUS_PASSED, $time, false); } if ($test instanceof TestCase || $test instanceof PhptTestCase) { $this->testIndex++; } parent::endTest($test, $time); } /** * @throws InvalidArgumentException */ public function addError(Test $test, Throwable $t, float $time): void { $this->registerTestResult($test, $t, BaseTestRunner::STATUS_ERROR, $time, true); } /** * @throws InvalidArgumentException */ public function addWarning(Test $test, Warning $e, float $time): void { $this->registerTestResult($test, $e, BaseTestRunner::STATUS_WARNING, $time, true); } /** * @throws InvalidArgumentException */ public function addFailure(Test $test, AssertionFailedError $e, float $time): void { $this->registerTestResult($test, $e, BaseTestRunner::STATUS_FAILURE, $time, true); } /** * @throws InvalidArgumentException */ public function addIncompleteTest(Test $test, Throwable $t, float $time): void { $this->registerTestResult($test, $t, BaseTestRunner::STATUS_INCOMPLETE, $time, false); } /** * @throws InvalidArgumentException */ public function addRiskyTest(Test $test, Throwable $t, float $time): void { $this->registerTestResult($test, $t, BaseTestRunner::STATUS_RISKY, $time, false); } /** * @throws InvalidArgumentException */ public function addSkippedTest(Test $test, Throwable $t, float $time): void { $this->registerTestResult($test, $t, BaseTestRunner::STATUS_SKIPPED, $time, false); } public function writeProgress(string $progress): void { $this->flushOutputBuffer(); } public function flush(): void { $this->flushOutputBuffer(true); } /** * @throws InvalidArgumentException */ protected function registerTestResult(Test $test, ?Throwable $t, int $status, float $time, bool $verbose): void { $testName = TestSuiteSorter::getTestSorterUID($test); $result = [ 'className' => $this->formatClassName($test), 'testName' => $testName, 'testMethod' => $this->formatTestName($test), 'message' => '', 'status' => $status, 'time' => $time, 'verbose' => $verbose, ]; if ($t !== null) { $result['message'] = $this->formatTestResultMessage($t, $result); } $this->testResults[$this->testIndex] = $result; $this->testNameResultIndex[$testName] = $this->testIndex; } protected function formatTestName(Test $test): string { return $test->getName(); } protected function formatClassName(Test $test): string { return get_class($test); } protected function testHasPassed(): bool { if (!isset($this->testResults[$this->testIndex]['status'])) { return true; } if ($this->testResults[$this->testIndex]['status'] === BaseTestRunner::STATUS_PASSED) { return true; } return false; } protected function flushOutputBuffer(bool $forceFlush = false): void { if ($this->testFlushIndex === $this->testIndex) { return; } if ($this->testFlushIndex > 0) { if ($this->enableOutputBuffer) { $prevResult = $this->getTestResultByName($this->originalExecutionOrder[$this->testFlushIndex - 1]); } else { $prevResult = $this->testResults[$this->testFlushIndex - 1]; } } else { $prevResult = $this->getEmptyTestResult(); } if (!$this->enableOutputBuffer) { $this->writeTestResult($prevResult, $this->testResults[$this->testFlushIndex++]); } else { do { $flushed = false; if (!$forceFlush && isset($this->originalExecutionOrder[$this->testFlushIndex])) { $result = $this->getTestResultByName($this->originalExecutionOrder[$this->testFlushIndex]); } else { // This test(name) cannot found in original execution order, // flush result to output stream right away $result = $this->testResults[$this->testFlushIndex]; } if (!empty($result)) { $this->hideSpinner(); $this->writeTestResult($prevResult, $result); $this->testFlushIndex++; $prevResult = $result; $flushed = true; } else { $this->showSpinner(); } } while ($flushed && $this->testFlushIndex < $this->testIndex); } } protected function showSpinner(): void { if (!$this->showProgress) { return; } if ($this->spinState) { $this->undrawSpinner(); } $this->spinState++; $this->drawSpinner(); } protected function hideSpinner(): void { if (!$this->showProgress) { return; } if ($this->spinState) { $this->undrawSpinner(); } $this->spinState = 0; } protected function drawSpinner(): void { // optional for CLI printers: show the user a 'buffering output' spinner } protected function undrawSpinner(): void { // remove the spinner from the current line } protected function writeTestResult(array $prevResult, array $result): void { } protected function getEmptyTestResult(): array { return [ 'className' => '', 'testName' => '', 'message' => '', 'failed' => '', 'verbose' => '', ]; } protected function getTestResultByName(?string $testName): array { if (isset($this->testNameResultIndex[$testName])) { return $this->testResults[$this->testNameResultIndex[$testName]]; } return []; } protected function formatThrowable(Throwable $t, ?int $status = null): string { $message = trim(TestFailure::exceptionToString($t)); if ($message) { $message .= PHP_EOL . PHP_EOL . $this->formatStacktrace($t); } else { $message = $this->formatStacktrace($t); } return $message; } protected function formatStacktrace(Throwable $t): string { return Filter::getFilteredStacktrace($t); } protected function formatTestResultMessage(Throwable $t, array $result, string $prefix = '│'): string { $message = $this->formatThrowable($t, $result['status']); if ($message === '') { return ''; } if (!($this->verbose || $result['verbose'])) { return ''; } return $this->prefixLines($prefix, $message); } protected function prefixLines(string $prefix, string $message): string { $message = trim($message); return implode( PHP_EOL, array_map( static function (string $text) use ($prefix) { return ' ' . $prefix . ($text ? ' ' . $text : ''); }, preg_split('/\r\n|\r|\n/', $message) ) ); } } PK!ÆB!Bìì]file-manager-advanced/application/svg-sanitizer/includes/phpunit/phpunit/src/Util/Printer.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace PHPUnit\Util; use const ENT_SUBSTITUTE; use const PHP_SAPI; use function assert; use function count; use function dirname; use function explode; use function fclose; use function fflush; use function flush; use function fopen; use function fsockopen; use function fwrite; use function htmlspecialchars; use function is_resource; use function is_string; use function sprintf; use function str_replace; use function strncmp; use function strpos; use PHPUnit\Framework\Exception; /** * @internal This class is not covered by the backward compatibility promise for PHPUnit */ class Printer { /** * If true, flush output after every write. * * @var bool */ protected $autoFlush = false; /** * @psalm-var resource|closed-resource */ protected $out; /** * @var string */ protected $outTarget; /** * Constructor. * * @param null|resource|string $out * * @throws Exception */ public function __construct($out = null) { if ($out === null) { return; } if (is_string($out) === false) { $this->out = $out; return; } if (strpos($out, 'socket://') === 0) { $out = explode(':', str_replace('socket://', '', $out)); if (count($out) !== 2) { throw new Exception; } $this->out = fsockopen($out[0], $out[1]); } else { if (strpos($out, 'php://') === false && !Filesystem::createDirectory(dirname($out))) { throw new Exception(sprintf('Directory "%s" was not created', dirname($out))); } $this->out = fopen($out, 'wt'); } $this->outTarget = $out; } /** * Flush buffer and close output if it's not to a PHP stream. */ public function flush(): void { if ($this->out && strncmp($this->outTarget, 'php://', 6) !== 0) { assert(is_resource($this->out)); fclose($this->out); } } /** * Performs a safe, incremental flush. * * Do not confuse this function with the flush() function of this class, * since the flush() function may close the file being written to, rendering * the current object no longer usable. */ public function incrementalFlush(): void { if ($this->out) { assert(is_resource($this->out)); fflush($this->out); } else { flush(); } } public function write(string $buffer): void { if ($this->out) { assert(is_resource($this->out)); fwrite($this->out, $buffer); if ($this->autoFlush) { $this->incrementalFlush(); } } else { if (PHP_SAPI !== 'cli' && PHP_SAPI !== 'phpdbg') { $buffer = htmlspecialchars($buffer, ENT_SUBSTITUTE); } print $buffer; if ($this->autoFlush) { $this->incrementalFlush(); } } } /** * Check auto-flush mode. */ public function getAutoFlush(): bool { return $this->autoFlush; } /** * Set auto-flushing mode. * * If set, *incremental* flushes will be done after each write. This should * not be confused with the different effects of this class' flush() method. */ public function setAutoFlush(bool $autoFlush): void { $this->autoFlush = $autoFlush; } } PK!'›7ñââbfile-manager-advanced/application/svg-sanitizer/includes/phpunit/phpunit/src/Util/ErrorHandler.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace PHPUnit\Util; use const E_DEPRECATED; use const E_NOTICE; use const E_STRICT; use const E_USER_DEPRECATED; use const E_USER_NOTICE; use const E_USER_WARNING; use const E_WARNING; use function defined; use function error_reporting; use function restore_error_handler; use function set_error_handler; use PHPUnit\Framework\Error\Deprecated; use PHPUnit\Framework\Error\Error; use PHPUnit\Framework\Error\Notice; use PHPUnit\Framework\Error\Warning; /** * @internal This class is not covered by the backward compatibility promise for PHPUnit */ final class ErrorHandler { /** * @var bool */ private $convertDeprecationsToExceptions; /** * @var bool */ private $convertErrorsToExceptions; /** * @var bool */ private $convertNoticesToExceptions; /** * @var bool */ private $convertWarningsToExceptions; /** * @var bool */ private $registered = false; public static function invokeIgnoringWarnings(callable $callable) { set_error_handler( static function ($errorNumber, $errorString) { if ($errorNumber === E_WARNING) { return; } return false; } ); $result = $callable(); restore_error_handler(); return $result; } public function __construct(bool $convertDeprecationsToExceptions, bool $convertErrorsToExceptions, bool $convertNoticesToExceptions, bool $convertWarningsToExceptions) { $this->convertDeprecationsToExceptions = $convertDeprecationsToExceptions; $this->convertErrorsToExceptions = $convertErrorsToExceptions; $this->convertNoticesToExceptions = $convertNoticesToExceptions; $this->convertWarningsToExceptions = $convertWarningsToExceptions; } public function __invoke(int $errorNumber, string $errorString, string $errorFile, int $errorLine): bool { /* * Do not raise an exception when the error suppression operator (@) was used. * * @see https://github.com/sebastianbergmann/phpunit/issues/3739 */ if (!($errorNumber & error_reporting())) { return false; } /** * E_STRICT is deprecated since PHP 8.4. * * @see https://github.com/sebastianbergmann/phpunit/issues/5956 */ if (defined('E_STRICT') && $errorNumber === @E_STRICT) { $errorNumber = E_NOTICE; } switch ($errorNumber) { case E_NOTICE: case E_USER_NOTICE: if (!$this->convertNoticesToExceptions) { return false; } throw new Notice($errorString, $errorNumber, $errorFile, $errorLine); case E_WARNING: case E_USER_WARNING: if (!$this->convertWarningsToExceptions) { return false; } throw new Warning($errorString, $errorNumber, $errorFile, $errorLine); case E_DEPRECATED: case E_USER_DEPRECATED: if (!$this->convertDeprecationsToExceptions) { return false; } throw new Deprecated($errorString, $errorNumber, $errorFile, $errorLine); default: if (!$this->convertErrorsToExceptions) { return false; } throw new Error($errorString, $errorNumber, $errorFile, $errorLine); } } public function register(): void { if ($this->registered) { return; } $oldErrorHandler = set_error_handler($this); if ($oldErrorHandler !== null) { restore_error_handler(); return; } $this->registered = true; } public function unregister(): void { if (!$this->registered) { return; } restore_error_handler(); } } PK!–¬dLS S Zfile-manager-advanced/application/svg-sanitizer/includes/phpunit/phpunit/src/Util/Json.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace PHPUnit\Util; use const JSON_PRETTY_PRINT; use const JSON_UNESCAPED_SLASHES; use const JSON_UNESCAPED_UNICODE; use function count; use function is_array; use function is_object; use function json_decode; use function json_encode; use function json_last_error; use function ksort; use PHPUnit\Framework\Exception; /** * @internal This class is not covered by the backward compatibility promise for PHPUnit */ final class Json { /** * Prettify json string. * * @throws Exception */ public static function prettify(string $json): string { $decodedJson = json_decode($json, false); if (json_last_error()) { throw new Exception( 'Cannot prettify invalid json' ); } return json_encode($decodedJson, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE); } /** * To allow comparison of JSON strings, first process them into a consistent * format so that they can be compared as strings. * * @return array ($error, $canonicalized_json) The $error parameter is used * to indicate an error decoding the json. This is used to avoid ambiguity * with JSON strings consisting entirely of 'null' or 'false'. */ public static function canonicalize(string $json): array { $decodedJson = json_decode($json); if (json_last_error()) { return [true, null]; } self::recursiveSort($decodedJson); $reencodedJson = json_encode($decodedJson); return [false, $reencodedJson]; } /** * JSON object keys are unordered while PHP array keys are ordered. * * Sort all array keys to ensure both the expected and actual values have * their keys in the same order. */ private static function recursiveSort(&$json): void { if (!is_array($json)) { // If the object is not empty, change it to an associative array // so we can sort the keys (and we will still re-encode it // correctly, since PHP encodes associative arrays as JSON objects.) // But EMPTY objects MUST remain empty objects. (Otherwise we will // re-encode it as a JSON array rather than a JSON object.) // See #2919. if (is_object($json) && count((array) $json) > 0) { $json = (array) $json; } else { return; } } ksort($json); foreach ($json as $key => &$value) { self::recursiveSort($value); } } } PK!.œí2ßß_file-manager-advanced/application/svg-sanitizer/includes/phpunit/phpunit/src/Util/Exception.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace PHPUnit\Util; use RuntimeException; /** * @internal This class is not covered by the backward compatibility promise for PHPUnit */ final class Exception extends RuntimeException implements \PHPUnit\Exception { } PK!"e@—¤¤qfile-manager-advanced/application/svg-sanitizer/includes/phpunit/phpunit/src/Util/XdebugFilterScriptGenerator.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace PHPUnit\Util; use const DIRECTORY_SEPARATOR; use function addslashes; use function array_map; use function implode; use function is_string; use function realpath; use function sprintf; /** * @internal This class is not covered by the backward compatibility promise for PHPUnit */ final class XdebugFilterScriptGenerator { public function generate(array $filterData): string { $items = $this->getWhitelistItems($filterData); $files = array_map( static function ($item) { return sprintf( " '%s'", $item ); }, $items ); $files = implode(",\n", $files); return << * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace PHPUnit\Util; use function array_map; use function array_merge; use function array_shift; use function array_slice; use function count; use function current; use function explode; use function key; use function next; use function preg_replace; use function reset; use function sort; use function strlen; use function strpos; use function strstr; use function substr; use PHPUnit\Framework\Exception; /** * @internal This class is not covered by the backward compatibility promise for PHPUnit */ final class Getopt { /** * @throws Exception */ public static function parse(array $args, string $short_options, ?array $long_options = null): array { if (empty($args)) { return [[], []]; } $opts = []; $non_opts = []; if ($long_options) { sort($long_options); } if (isset($args[0][0]) && $args[0][0] !== '-') { array_shift($args); } reset($args); $args = array_map('trim', $args); /* @noinspection ComparisonOperandsOrderInspection */ while (false !== $arg = current($args)) { $i = key($args); next($args); if ($arg === '') { continue; } if ($arg === '--') { $non_opts = array_merge($non_opts, array_slice($args, $i + 1)); break; } if ($arg[0] !== '-' || (strlen($arg) > 1 && $arg[1] === '-' && !$long_options)) { $non_opts[] = $args[$i]; continue; } if (strlen($arg) > 1 && $arg[1] === '-') { self::parseLongOption( substr($arg, 2), $long_options, $opts, $args ); } else { self::parseShortOption( substr($arg, 1), $short_options, $opts, $args ); } } return [$opts, $non_opts]; } /** * @throws Exception */ private static function parseShortOption(string $arg, string $short_options, array &$opts, array &$args): void { $argLen = strlen($arg); for ($i = 0; $i < $argLen; $i++) { $opt = $arg[$i]; $opt_arg = null; if ($arg[$i] === ':' || ($spec = strstr($short_options, $opt)) === false) { throw new Exception( "unrecognized option -- {$opt}" ); } if (strlen($spec) > 1 && $spec[1] === ':') { if ($i + 1 < $argLen) { $opts[] = [$opt, substr($arg, $i + 1)]; break; } if (!(strlen($spec) > 2 && $spec[2] === ':')) { /* @noinspection ComparisonOperandsOrderInspection */ if (false === $opt_arg = current($args)) { throw new Exception( "option requires an argument -- {$opt}" ); } next($args); } } $opts[] = [$opt, $opt_arg]; } } /** * @throws Exception */ private static function parseLongOption(string $arg, array $long_options, array &$opts, array &$args): void { $count = count($long_options); $list = explode('=', $arg); $opt = $list[0]; $opt_arg = null; if (count($list) > 1) { $opt_arg = $list[1]; } $opt_len = strlen($opt); foreach ($long_options as $i => $long_opt) { $opt_start = substr($long_opt, 0, $opt_len); if ($opt_start !== $opt) { continue; } $opt_rest = substr($long_opt, $opt_len); if ($opt_rest !== '' && $i + 1 < $count && $opt[0] !== '=' && strpos($long_options[$i + 1], $opt) === 0) { throw new Exception( "option --{$opt} is ambiguous" ); } if (substr($long_opt, -1) === '=') { /* @noinspection StrlenInEmptyStringCheckContextInspection */ if (substr($long_opt, -2) !== '==' && !strlen((string) $opt_arg)) { /* @noinspection ComparisonOperandsOrderInspection */ if (false === $opt_arg = current($args)) { throw new Exception( "option --{$opt} requires an argument" ); } next($args); } } elseif ($opt_arg) { throw new Exception( "option --{$opt} doesn't allow an argument" ); } $full_option = '--' . preg_replace('/={1,2}$/', '', $long_opt); $opts[] = [$full_option, $opt_arg]; return; } throw new Exception("unrecognized option --{$opt}"); } } PK!wSäËß ß ifile-manager-advanced/application/svg-sanitizer/includes/phpunit/phpunit/src/Util/XmlTestListRenderer.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace PHPUnit\Util; use function get_class; use function implode; use function str_replace; use PHPUnit\Framework\TestCase; use PHPUnit\Framework\TestSuite; use PHPUnit\Runner\PhptTestCase; use RecursiveIteratorIterator; use SebastianBergmann\RecursionContext\InvalidArgumentException; use XMLWriter; /** * @internal This class is not covered by the backward compatibility promise for PHPUnit */ final class XmlTestListRenderer { /** * @throws InvalidArgumentException */ public function render(TestSuite $suite): string { $writer = new XMLWriter; $writer->openMemory(); $writer->setIndent(true); $writer->startDocument('1.0', 'UTF-8'); $writer->startElement('tests'); $currentTestCase = null; foreach (new RecursiveIteratorIterator($suite->getIterator()) as $test) { if ($test instanceof TestCase) { if (get_class($test) !== $currentTestCase) { if ($currentTestCase !== null) { $writer->endElement(); } $writer->startElement('testCaseClass'); $writer->writeAttribute('name', get_class($test)); $currentTestCase = get_class($test); } $writer->startElement('testCaseMethod'); $writer->writeAttribute('name', $test->getName(false)); $writer->writeAttribute('groups', implode(',', $test->getGroups())); if (!empty($test->getDataSetAsString(false))) { $writer->writeAttribute( 'dataSet', str_replace( ' with data set ', '', $test->getDataSetAsString(false) ) ); } $writer->endElement(); } elseif ($test instanceof PhptTestCase) { if ($currentTestCase !== null) { $writer->endElement(); $currentTestCase = null; } $writer->startElement('phptFile'); $writer->writeAttribute('path', $test->getName()); $writer->endElement(); } } if ($currentTestCase !== null) { $writer->endElement(); } $writer->endElement(); $writer->endDocument(); return $writer->outputMemory(); } } PK!bÎÆ™šš`file-manager-advanced/application/svg-sanitizer/includes/phpunit/phpunit/src/Util/Reflection.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace PHPUnit\Util; use PHPUnit\Framework\Assert; use PHPUnit\Framework\TestCase; use ReflectionClass; use ReflectionMethod; /** * @internal This class is not covered by the backward compatibility promise for PHPUnit */ final class Reflection { /** * @psalm-return list */ public function publicMethodsInTestClass(ReflectionClass $class): array { return $this->filterMethods($class, ReflectionMethod::IS_PUBLIC); } /** * @psalm-return list */ public function methodsInTestClass(ReflectionClass $class): array { return $this->filterMethods($class, null); } /** * @psalm-return list */ private function filterMethods(ReflectionClass $class, ?int $filter): array { $methods = []; // PHP <7.2.18 and <7.3.5 throw error when null is passed // to ReflectionClass::getMethods() when strict_types is enabled. $classMethods = $filter === null ? $class->getMethods() : $class->getMethods($filter); foreach ($classMethods as $method) { if ($method->getDeclaringClass()->getName() === TestCase::class) { continue; } if ($method->getDeclaringClass()->getName() === Assert::class) { continue; } $methods[] = $method; } return $methods; } } PK!�À’À’cfile-manager-advanced/application/svg-sanitizer/includes/phpunit/phpunit/src/Util/Configuration.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace PHPUnit\Util; use const DIRECTORY_SEPARATOR; use const PATH_SEPARATOR; use const PHP_VERSION; use function assert; use function constant; use function count; use function define; use function defined; use function dirname; use function explode; use function file_exists; use function file_get_contents; use function getenv; use function implode; use function in_array; use function ini_get; use function ini_set; use function is_numeric; use function libxml_clear_errors; use function libxml_get_errors; use function libxml_use_internal_errors; use function preg_match; use function putenv; use function realpath; use function sprintf; use function stream_resolve_include_path; use function strlen; use function strpos; use function strtolower; use function strtoupper; use function substr; use function trim; use function version_compare; use DOMDocument; use DOMElement; use DOMNode; use DOMNodeList; use DOMXPath; use LibXMLError; use PHPUnit\Framework\Exception; use PHPUnit\Framework\TestSuite; use PHPUnit\Runner\TestSuiteSorter; use PHPUnit\TextUI\ResultPrinter; use PHPUnit\Util\TestDox\CliTestDoxPrinter; use SebastianBergmann\FileIterator\Facade as FileIteratorFacade; /** * @internal This class is not covered by the backward compatibility promise for PHPUnit */ final class Configuration { /** * @var self[] */ private static $instances = []; /** * @var DOMDocument */ private $document; /** * @var DOMXPath */ private $xpath; /** * @var string */ private $filename; /** * @var LibXMLError[] */ private $errors = []; /** * Returns a PHPUnit configuration object. * * @throws Exception */ public static function getInstance(string $filename): self { $realPath = realpath($filename); if ($realPath === false) { throw new Exception( sprintf( 'Could not read "%s".', $filename ) ); } if (!isset(self::$instances[$realPath])) { self::$instances[$realPath] = new self($realPath); } return self::$instances[$realPath]; } /** * Loads a PHPUnit configuration file. * * @throws Exception */ private function __construct(string $filename) { $this->filename = $filename; $this->document = Xml::loadFile($filename, false, true, true); $this->xpath = new DOMXPath($this->document); $this->validateConfigurationAgainstSchema(); } /** * @codeCoverageIgnore */ private function __clone() { } public function hasValidationErrors(): bool { return count($this->errors) > 0; } public function getValidationErrors(): array { $result = []; foreach ($this->errors as $error) { if (!isset($result[$error->line])) { $result[$error->line] = []; } $result[$error->line][] = trim($error->message); } return $result; } /** * Returns the real path to the configuration file. */ public function getFilename(): string { return $this->filename; } public function getExtensionConfiguration(): array { $result = []; foreach ($this->xpath->query('extensions/extension') as $extension) { $result[] = $this->getElementConfigurationParameters($extension); } return $result; } /** * Returns the configuration for SUT filtering. */ public function getFilterConfiguration(): array { $addUncoveredFilesFromWhitelist = true; $processUncoveredFilesFromWhitelist = false; $includeDirectory = []; $includeFile = []; $excludeDirectory = []; $excludeFile = []; $tmp = $this->xpath->query('filter/whitelist'); if ($tmp->length === 1) { if ($tmp->item(0)->hasAttribute('addUncoveredFilesFromWhitelist')) { $addUncoveredFilesFromWhitelist = $this->getBoolean( (string) $tmp->item(0)->getAttribute( 'addUncoveredFilesFromWhitelist' ), true ); } if ($tmp->item(0)->hasAttribute('processUncoveredFilesFromWhitelist')) { $processUncoveredFilesFromWhitelist = $this->getBoolean( (string) $tmp->item(0)->getAttribute( 'processUncoveredFilesFromWhitelist' ), false ); } $includeDirectory = $this->readFilterDirectories( 'filter/whitelist/directory' ); $includeFile = $this->readFilterFiles( 'filter/whitelist/file' ); $excludeDirectory = $this->readFilterDirectories( 'filter/whitelist/exclude/directory' ); $excludeFile = $this->readFilterFiles( 'filter/whitelist/exclude/file' ); } return [ 'whitelist' => [ 'addUncoveredFilesFromWhitelist' => $addUncoveredFilesFromWhitelist, 'processUncoveredFilesFromWhitelist' => $processUncoveredFilesFromWhitelist, 'include' => [ 'directory' => $includeDirectory, 'file' => $includeFile, ], 'exclude' => [ 'directory' => $excludeDirectory, 'file' => $excludeFile, ], ], ]; } /** * Returns the configuration for groups. */ public function getGroupConfiguration(): array { return $this->parseGroupConfiguration('groups'); } /** * Returns the configuration for testdox groups. */ public function getTestdoxGroupConfiguration(): array { return $this->parseGroupConfiguration('testdoxGroups'); } /** * Returns the configuration for listeners. */ public function getListenerConfiguration(): array { $result = []; foreach ($this->xpath->query('listeners/listener') as $listener) { $result[] = $this->getElementConfigurationParameters($listener); } return $result; } /** * Returns the logging configuration. */ public function getLoggingConfiguration(): array { $result = []; foreach ($this->xpath->query('logging/log') as $log) { assert($log instanceof DOMElement); $type = (string) $log->getAttribute('type'); $target = (string) $log->getAttribute('target'); if (!$target) { continue; } $target = $this->toAbsolutePath($target); if ($type === 'coverage-html') { if ($log->hasAttribute('lowUpperBound')) { $result['lowUpperBound'] = $this->getInteger( (string) $log->getAttribute('lowUpperBound'), 50 ); } if ($log->hasAttribute('highLowerBound')) { $result['highLowerBound'] = $this->getInteger( (string) $log->getAttribute('highLowerBound'), 90 ); } } elseif ($type === 'coverage-crap4j') { if ($log->hasAttribute('threshold')) { $result['crap4jThreshold'] = $this->getInteger( (string) $log->getAttribute('threshold'), 30 ); } } elseif ($type === 'coverage-text') { if ($log->hasAttribute('showUncoveredFiles')) { $result['coverageTextShowUncoveredFiles'] = $this->getBoolean( (string) $log->getAttribute('showUncoveredFiles'), false ); } if ($log->hasAttribute('showOnlySummary')) { $result['coverageTextShowOnlySummary'] = $this->getBoolean( (string) $log->getAttribute('showOnlySummary'), false ); } } $result[$type] = $target; } return $result; } /** * Returns the PHP configuration. */ public function getPHPConfiguration(): array { $result = [ 'include_path' => [], 'ini' => [], 'const' => [], 'var' => [], 'env' => [], 'post' => [], 'get' => [], 'cookie' => [], 'server' => [], 'files' => [], 'request' => [], ]; foreach ($this->xpath->query('php/includePath') as $includePath) { assert($includePath instanceof DOMNode); $path = (string) $includePath->textContent; if ($path) { $result['include_path'][] = $this->toAbsolutePath($path); } } foreach ($this->xpath->query('php/ini') as $ini) { assert($ini instanceof DOMElement); $name = (string) $ini->getAttribute('name'); $value = (string) $ini->getAttribute('value'); $result['ini'][$name]['value'] = $value; } foreach ($this->xpath->query('php/const') as $const) { assert($const instanceof DOMElement); $name = (string) $const->getAttribute('name'); $value = (string) $const->getAttribute('value'); $result['const'][$name]['value'] = $this->getBoolean($value, $value); } foreach (['var', 'env', 'post', 'get', 'cookie', 'server', 'files', 'request'] as $array) { foreach ($this->xpath->query('php/' . $array) as $var) { assert($var instanceof DOMElement); $name = (string) $var->getAttribute('name'); $value = (string) $var->getAttribute('value'); $verbatim = false; if ($var->hasAttribute('verbatim')) { $verbatim = $this->getBoolean($var->getAttribute('verbatim'), false); $result[$array][$name]['verbatim'] = $verbatim; } if ($var->hasAttribute('force')) { $force = $this->getBoolean($var->getAttribute('force'), false); $result[$array][$name]['force'] = $force; } if (!$verbatim) { $value = $this->getBoolean($value, $value); } $result[$array][$name]['value'] = $value; } } return $result; } /** * Handles the PHP configuration. */ public function handlePHPConfiguration(): void { $configuration = $this->getPHPConfiguration(); if (!empty($configuration['include_path'])) { ini_set( 'include_path', implode(PATH_SEPARATOR, $configuration['include_path']) . PATH_SEPARATOR . ini_get('include_path') ); } foreach ($configuration['ini'] as $name => $data) { $value = $data['value']; if (defined($value)) { $value = (string) constant($value); } ini_set($name, $value); } foreach ($configuration['const'] as $name => $data) { $value = $data['value']; if (!defined($name)) { define($name, $value); } } foreach ($configuration['var'] as $name => $data) { $GLOBALS[$name] = $data['value']; } foreach ($configuration['server'] as $name => $data) { $_SERVER[$name] = $data['value']; } foreach (['post', 'get', 'cookie', 'files', 'request'] as $array) { $target = &$GLOBALS['_' . strtoupper($array)]; foreach ($configuration[$array] as $name => $data) { $target[$name] = $data['value']; } } foreach ($configuration['env'] as $name => $data) { $value = $data['value']; $force = $data['force'] ?? false; if ($force || getenv($name) === false) { putenv("{$name}={$value}"); } $value = getenv($name); if (!isset($_ENV[$name])) { $_ENV[$name] = $value; } if ($force) { $_ENV[$name] = $value; } } } /** * Returns the PHPUnit configuration. */ public function getPHPUnitConfiguration(): array { $result = []; $root = $this->document->documentElement; if ($root->hasAttribute('cacheTokens')) { $result['cacheTokens'] = $this->getBoolean( (string) $root->getAttribute('cacheTokens'), false ); } if ($root->hasAttribute('columns')) { $columns = (string) $root->getAttribute('columns'); if ($columns === 'max') { $result['columns'] = 'max'; } else { $result['columns'] = $this->getInteger($columns, 80); } } if ($root->hasAttribute('colors')) { /* only allow boolean for compatibility with previous versions 'always' only allowed from command line */ if ($this->getBoolean($root->getAttribute('colors'), false)) { $result['colors'] = ResultPrinter::COLOR_AUTO; } else { $result['colors'] = ResultPrinter::COLOR_NEVER; } } /* * @see https://github.com/sebastianbergmann/phpunit/issues/657 */ if ($root->hasAttribute('stderr')) { $result['stderr'] = $this->getBoolean( (string) $root->getAttribute('stderr'), false ); } if ($root->hasAttribute('backupGlobals')) { $result['backupGlobals'] = $this->getBoolean( (string) $root->getAttribute('backupGlobals'), false ); } if ($root->hasAttribute('backupStaticAttributes')) { $result['backupStaticAttributes'] = $this->getBoolean( (string) $root->getAttribute('backupStaticAttributes'), false ); } if ($root->getAttribute('bootstrap')) { $result['bootstrap'] = $this->toAbsolutePath( (string) $root->getAttribute('bootstrap') ); } if ($root->hasAttribute('convertDeprecationsToExceptions')) { $result['convertDeprecationsToExceptions'] = $this->getBoolean( (string) $root->getAttribute('convertDeprecationsToExceptions'), false ); } if ($root->hasAttribute('convertErrorsToExceptions')) { $result['convertErrorsToExceptions'] = $this->getBoolean( (string) $root->getAttribute('convertErrorsToExceptions'), true ); } if ($root->hasAttribute('convertNoticesToExceptions')) { $result['convertNoticesToExceptions'] = $this->getBoolean( (string) $root->getAttribute('convertNoticesToExceptions'), true ); } if ($root->hasAttribute('convertWarningsToExceptions')) { $result['convertWarningsToExceptions'] = $this->getBoolean( (string) $root->getAttribute('convertWarningsToExceptions'), true ); } if ($root->hasAttribute('forceCoversAnnotation')) { $result['forceCoversAnnotation'] = $this->getBoolean( (string) $root->getAttribute('forceCoversAnnotation'), false ); } if ($root->hasAttribute('disableCodeCoverageIgnore')) { $result['disableCodeCoverageIgnore'] = $this->getBoolean( (string) $root->getAttribute('disableCodeCoverageIgnore'), false ); } if ($root->hasAttribute('processIsolation')) { $result['processIsolation'] = $this->getBoolean( (string) $root->getAttribute('processIsolation'), false ); } if ($root->hasAttribute('stopOnDefect')) { $result['stopOnDefect'] = $this->getBoolean( (string) $root->getAttribute('stopOnDefect'), false ); } if ($root->hasAttribute('stopOnError')) { $result['stopOnError'] = $this->getBoolean( (string) $root->getAttribute('stopOnError'), false ); } if ($root->hasAttribute('stopOnFailure')) { $result['stopOnFailure'] = $this->getBoolean( (string) $root->getAttribute('stopOnFailure'), false ); } if ($root->hasAttribute('stopOnWarning')) { $result['stopOnWarning'] = $this->getBoolean( (string) $root->getAttribute('stopOnWarning'), false ); } if ($root->hasAttribute('stopOnIncomplete')) { $result['stopOnIncomplete'] = $this->getBoolean( (string) $root->getAttribute('stopOnIncomplete'), false ); } if ($root->hasAttribute('stopOnRisky')) { $result['stopOnRisky'] = $this->getBoolean( (string) $root->getAttribute('stopOnRisky'), false ); } if ($root->hasAttribute('stopOnSkipped')) { $result['stopOnSkipped'] = $this->getBoolean( (string) $root->getAttribute('stopOnSkipped'), false ); } if ($root->hasAttribute('failOnWarning')) { $result['failOnWarning'] = $this->getBoolean( (string) $root->getAttribute('failOnWarning'), false ); } if ($root->hasAttribute('failOnRisky')) { $result['failOnRisky'] = $this->getBoolean( (string) $root->getAttribute('failOnRisky'), false ); } if ($root->hasAttribute('testSuiteLoaderClass')) { $result['testSuiteLoaderClass'] = (string) $root->getAttribute( 'testSuiteLoaderClass' ); } if ($root->hasAttribute('defaultTestSuite')) { $result['defaultTestSuite'] = (string) $root->getAttribute( 'defaultTestSuite' ); } if ($root->getAttribute('testSuiteLoaderFile')) { $result['testSuiteLoaderFile'] = $this->toAbsolutePath( (string) $root->getAttribute('testSuiteLoaderFile') ); } if ($root->hasAttribute('printerClass')) { $result['printerClass'] = (string) $root->getAttribute( 'printerClass' ); } if ($root->getAttribute('printerFile')) { $result['printerFile'] = $this->toAbsolutePath( (string) $root->getAttribute('printerFile') ); } if ($root->hasAttribute('beStrictAboutChangesToGlobalState')) { $result['beStrictAboutChangesToGlobalState'] = $this->getBoolean( (string) $root->getAttribute('beStrictAboutChangesToGlobalState'), false ); } if ($root->hasAttribute('beStrictAboutOutputDuringTests')) { $result['disallowTestOutput'] = $this->getBoolean( (string) $root->getAttribute('beStrictAboutOutputDuringTests'), false ); } if ($root->hasAttribute('beStrictAboutResourceUsageDuringSmallTests')) { $result['beStrictAboutResourceUsageDuringSmallTests'] = $this->getBoolean( (string) $root->getAttribute('beStrictAboutResourceUsageDuringSmallTests'), false ); } if ($root->hasAttribute('beStrictAboutTestsThatDoNotTestAnything')) { $result['reportUselessTests'] = $this->getBoolean( (string) $root->getAttribute('beStrictAboutTestsThatDoNotTestAnything'), true ); } if ($root->hasAttribute('beStrictAboutTodoAnnotatedTests')) { $result['disallowTodoAnnotatedTests'] = $this->getBoolean( (string) $root->getAttribute('beStrictAboutTodoAnnotatedTests'), false ); } if ($root->hasAttribute('beStrictAboutCoversAnnotation')) { $result['strictCoverage'] = $this->getBoolean( (string) $root->getAttribute('beStrictAboutCoversAnnotation'), false ); } if ($root->hasAttribute('defaultTimeLimit')) { $result['defaultTimeLimit'] = $this->getInteger( (string) $root->getAttribute('defaultTimeLimit'), 1 ); } if ($root->hasAttribute('enforceTimeLimit')) { $result['enforceTimeLimit'] = $this->getBoolean( (string) $root->getAttribute('enforceTimeLimit'), false ); } if ($root->hasAttribute('ignoreDeprecatedCodeUnitsFromCodeCoverage')) { $result['ignoreDeprecatedCodeUnitsFromCodeCoverage'] = $this->getBoolean( (string) $root->getAttribute('ignoreDeprecatedCodeUnitsFromCodeCoverage'), false ); } if ($root->hasAttribute('timeoutForSmallTests')) { $result['timeoutForSmallTests'] = $this->getInteger( (string) $root->getAttribute('timeoutForSmallTests'), 1 ); } if ($root->hasAttribute('timeoutForMediumTests')) { $result['timeoutForMediumTests'] = $this->getInteger( (string) $root->getAttribute('timeoutForMediumTests'), 10 ); } if ($root->hasAttribute('timeoutForLargeTests')) { $result['timeoutForLargeTests'] = $this->getInteger( (string) $root->getAttribute('timeoutForLargeTests'), 60 ); } if ($root->hasAttribute('reverseDefectList')) { $result['reverseDefectList'] = $this->getBoolean( (string) $root->getAttribute('reverseDefectList'), false ); } if ($root->hasAttribute('verbose')) { $result['verbose'] = $this->getBoolean( (string) $root->getAttribute('verbose'), false ); } if ($root->hasAttribute('testdox')) { $testdox = $this->getBoolean( (string) $root->getAttribute('testdox'), false ); if ($testdox) { if (isset($result['printerClass'])) { $result['conflictBetweenPrinterClassAndTestdox'] = true; } else { $result['printerClass'] = CliTestDoxPrinter::class; } } } if ($root->hasAttribute('registerMockObjectsFromTestArgumentsRecursively')) { $result['registerMockObjectsFromTestArgumentsRecursively'] = $this->getBoolean( (string) $root->getAttribute('registerMockObjectsFromTestArgumentsRecursively'), false ); } if ($root->hasAttribute('extensionsDirectory')) { $result['extensionsDirectory'] = $this->toAbsolutePath( (string) $root->getAttribute( 'extensionsDirectory' ) ); } if ($root->hasAttribute('cacheResult')) { $result['cacheResult'] = $this->getBoolean( (string) $root->getAttribute('cacheResult'), true ); } if ($root->hasAttribute('cacheResultFile')) { $result['cacheResultFile'] = $this->toAbsolutePath( (string) $root->getAttribute('cacheResultFile') ); } if ($root->hasAttribute('executionOrder')) { foreach (explode(',', $root->getAttribute('executionOrder')) as $order) { switch ($order) { case 'default': $result['executionOrder'] = TestSuiteSorter::ORDER_DEFAULT; $result['executionOrderDefects'] = TestSuiteSorter::ORDER_DEFAULT; $result['resolveDependencies'] = false; break; case 'defects': $result['executionOrderDefects'] = TestSuiteSorter::ORDER_DEFECTS_FIRST; break; case 'depends': $result['resolveDependencies'] = true; break; case 'duration': $result['executionOrder'] = TestSuiteSorter::ORDER_DURATION; break; case 'no-depends': $result['resolveDependencies'] = false; break; case 'random': $result['executionOrder'] = TestSuiteSorter::ORDER_RANDOMIZED; break; case 'reverse': $result['executionOrder'] = TestSuiteSorter::ORDER_REVERSED; break; case 'size': $result['executionOrder'] = TestSuiteSorter::ORDER_SIZE; break; } } } if ($root->hasAttribute('resolveDependencies')) { $result['resolveDependencies'] = $this->getBoolean( (string) $root->getAttribute('resolveDependencies'), false ); } if ($root->hasAttribute('noInteraction')) { $result['noInteraction'] = $this->getBoolean( (string) $root->getAttribute('noInteraction'), false ); } return $result; } /** * Returns the test suite configuration. * * @throws Exception */ public function getTestSuiteConfiguration(string $testSuiteFilter = ''): TestSuite { $testSuiteNodes = $this->xpath->query('testsuites/testsuite'); if ($testSuiteNodes->length === 0) { $testSuiteNodes = $this->xpath->query('testsuite'); } if ($testSuiteNodes->length === 1) { return $this->getTestSuite($testSuiteNodes->item(0), $testSuiteFilter); } $suite = new TestSuite; foreach ($testSuiteNodes as $testSuiteNode) { $suite->addTestSuite( $this->getTestSuite($testSuiteNode, $testSuiteFilter) ); } return $suite; } /** * Returns the test suite names from the configuration. */ public function getTestSuiteNames(): array { $names = []; foreach ($this->xpath->query('*/testsuite') as $node) { /* @var DOMElement $node */ $names[] = $node->getAttribute('name'); } return $names; } private function validateConfigurationAgainstSchema(): void { $original = libxml_use_internal_errors(true); $xsdFilename = __DIR__ . '/../../phpunit.xsd'; if (defined('__PHPUNIT_PHAR_ROOT__')) { $xsdFilename = __PHPUNIT_PHAR_ROOT__ . '/phpunit.xsd'; } $this->document->schemaValidateSource(file_get_contents($xsdFilename)); $this->errors = libxml_get_errors(); libxml_clear_errors(); libxml_use_internal_errors($original); } /** * Collects and returns the configuration arguments from the PHPUnit * XML configuration. */ private function getConfigurationArguments(DOMNodeList $nodes): array { $arguments = []; if ($nodes->length === 0) { return $arguments; } foreach ($nodes as $node) { if (!$node instanceof DOMElement) { continue; } if ($node->tagName !== 'arguments') { continue; } foreach ($node->childNodes as $argument) { if (!$argument instanceof DOMElement) { continue; } if ($argument->tagName === 'file' || $argument->tagName === 'directory') { $arguments[] = $this->toAbsolutePath((string) $argument->textContent); } else { $arguments[] = Xml::xmlToVariable($argument); } } } return $arguments; } /** * @throws Exception */ private function getTestSuite(DOMElement $testSuiteNode, string $testSuiteFilter = ''): TestSuite { if ($testSuiteNode->hasAttribute('name')) { $suite = new TestSuite( (string) $testSuiteNode->getAttribute('name') ); } else { $suite = new TestSuite; } $exclude = []; foreach ($testSuiteNode->getElementsByTagName('exclude') as $excludeNode) { $excludeFile = (string) $excludeNode->textContent; if ($excludeFile) { $exclude[] = $this->toAbsolutePath($excludeFile); } } $fileIteratorFacade = new FileIteratorFacade; $testSuiteFilter = $testSuiteFilter ? explode(',', $testSuiteFilter) : []; foreach ($testSuiteNode->getElementsByTagName('directory') as $directoryNode) { assert($directoryNode instanceof DOMElement); if (!empty($testSuiteFilter) && !in_array($directoryNode->parentNode->getAttribute('name'), $testSuiteFilter, true)) { continue; } $directory = (string) $directoryNode->textContent; if (empty($directory)) { continue; } if (!$this->satisfiesPhpVersion($directoryNode)) { continue; } $files = $fileIteratorFacade->getFilesAsArray( $this->toAbsolutePath($directory), $directoryNode->hasAttribute('suffix') ? (string) $directoryNode->getAttribute('suffix') : 'Test.php', $directoryNode->hasAttribute('prefix') ? (string) $directoryNode->getAttribute('prefix') : '', $exclude ); $suite->addTestFiles($files); } foreach ($testSuiteNode->getElementsByTagName('file') as $fileNode) { assert($fileNode instanceof DOMElement); if (!empty($testSuiteFilter) && !in_array($fileNode->parentNode->getAttribute('name'), $testSuiteFilter, true)) { continue; } $file = (string) $fileNode->textContent; if (empty($file)) { continue; } $file = $fileIteratorFacade->getFilesAsArray( $this->toAbsolutePath($file) ); if (!isset($file[0])) { continue; } $file = $file[0]; if (!$this->satisfiesPhpVersion($fileNode)) { continue; } $suite->addTestFile($file); } return $suite; } private function satisfiesPhpVersion(DOMElement $node): bool { $phpVersion = PHP_VERSION; $phpVersionOperator = '>='; if ($node->hasAttribute('phpVersion')) { $phpVersion = (string) $node->getAttribute('phpVersion'); } if ($node->hasAttribute('phpVersionOperator')) { $phpVersionOperator = (string) $node->getAttribute('phpVersionOperator'); } return version_compare(PHP_VERSION, $phpVersion, (new VersionComparisonOperator($phpVersionOperator))->asString()); } /** * if $value is 'false' or 'true', this returns the value that $value represents. * Otherwise, returns $default, which may be a string in rare cases. * See PHPUnit\Util\ConfigurationTest::testPHPConfigurationIsReadCorrectly. * * @param bool|string $default * * @return bool|string */ private function getBoolean(string $value, $default) { if (strtolower($value) === 'false') { return false; } if (strtolower($value) === 'true') { return true; } return $default; } private function getInteger(string $value, int $default): int { if (is_numeric($value)) { return (int) $value; } return $default; } private function readFilterDirectories(string $query): array { $directories = []; foreach ($this->xpath->query($query) as $directoryNode) { assert($directoryNode instanceof DOMElement); $directoryPath = (string) $directoryNode->textContent; if (!$directoryPath) { continue; } $directories[] = [ 'path' => $this->toAbsolutePath($directoryPath), 'prefix' => $directoryNode->hasAttribute('prefix') ? (string) $directoryNode->getAttribute('prefix') : '', 'suffix' => $directoryNode->hasAttribute('suffix') ? (string) $directoryNode->getAttribute('suffix') : '.php', 'group' => $directoryNode->hasAttribute('group') ? (string) $directoryNode->getAttribute('group') : 'DEFAULT', ]; } return $directories; } /** * @return string[] */ private function readFilterFiles(string $query): array { $files = []; foreach ($this->xpath->query($query) as $file) { assert($file instanceof DOMNode); $filePath = (string) $file->textContent; if ($filePath) { $files[] = $this->toAbsolutePath($filePath); } } return $files; } private function toAbsolutePath(string $path, bool $useIncludePath = false): string { $path = trim($path); if (strpos($path, '/') === 0) { return $path; } // Matches the following on Windows: // - \\NetworkComputer\Path // - \\.\D: // - \\.\c: // - C:\Windows // - C:\windows // - C:/windows // - c:/windows if (defined('PHP_WINDOWS_VERSION_BUILD') && ($path[0] === '\\' || (strlen($path) >= 3 && preg_match('#^[A-Z]\:[/\\\]#i', substr($path, 0, 3))))) { return $path; } if (strpos($path, '://') !== false) { return $path; } $file = dirname($this->filename) . DIRECTORY_SEPARATOR . $path; if ($useIncludePath && !file_exists($file)) { $includePathFile = stream_resolve_include_path($path); if ($includePathFile) { $file = $includePathFile; } } return $file; } private function parseGroupConfiguration(string $root): array { $groups = [ 'include' => [], 'exclude' => [], ]; foreach ($this->xpath->query($root . '/include/group') as $group) { assert($group instanceof DOMNode); $groups['include'][] = (string) $group->textContent; } foreach ($this->xpath->query($root . '/exclude/group') as $group) { assert($group instanceof DOMNode); $groups['exclude'][] = (string) $group->textContent; } return $groups; } private function getElementConfigurationParameters(DOMElement $element): array { $class = (string) $element->getAttribute('class'); $file = ''; $arguments = $this->getConfigurationArguments($element->childNodes); if ($element->getAttribute('file')) { $file = $this->toAbsolutePath( (string) $element->getAttribute('file'), true ); } return [ 'class' => $class, 'file' => $file, 'arguments' => $arguments, ]; } } PK!ÍžQÐÐjfile-manager-advanced/application/svg-sanitizer/includes/phpunit/phpunit/src/Util/TextTestListRenderer.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace PHPUnit\Util; use const PHP_EOL; use function get_class; use function sprintf; use function str_replace; use PHPUnit\Framework\TestCase; use PHPUnit\Framework\TestSuite; use PHPUnit\Runner\PhptTestCase; use RecursiveIteratorIterator; use SebastianBergmann\RecursionContext\InvalidArgumentException; /** * @internal This class is not covered by the backward compatibility promise for PHPUnit */ final class TextTestListRenderer { /** * @throws InvalidArgumentException */ public function render(TestSuite $suite): string { $buffer = 'Available test(s):' . PHP_EOL; foreach (new RecursiveIteratorIterator($suite->getIterator()) as $test) { if ($test instanceof TestCase) { $name = sprintf( '%s::%s', get_class($test), str_replace(' with data set ', '', $test->getName()) ); } elseif ($test instanceof PhptTestCase) { $name = $test->getName(); } else { continue; } $buffer .= sprintf( ' - %s' . PHP_EOL, $name ); } return $buffer; } } PK!³÷kfile-manager-advanced/application/svg-sanitizer/includes/phpunit/phpunit/src/Util/PHP/WindowsPhpProcess.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace PHPUnit\Util\PHP; use const PHP_MAJOR_VERSION; use function tmpfile; use PHPUnit\Framework\Exception; /** * @internal This class is not covered by the backward compatibility promise for PHPUnit * * @see https://bugs.php.net/bug.php?id=51800 */ final class WindowsPhpProcess extends DefaultPhpProcess { public function getCommand(array $settings, ?string $file = null): string { if (PHP_MAJOR_VERSION < 8) { return '"' . parent::getCommand($settings, $file) . '"'; } return parent::getCommand($settings, $file); } /** * @throws Exception */ protected function getHandles(): array { if (false === $stdout_handle = tmpfile()) { throw new Exception( 'A temporary file could not be created; verify that your TEMP environment variable is writable' ); } return [ 1 => $stdout_handle, ]; } protected function useTemporaryFile(): bool { return true; } } PK!¹­¾Ìbbofile-manager-advanced/application/svg-sanitizer/includes/phpunit/phpunit/src/Util/PHP/Template/PhptTestCase.tplnu„[µü¤start(__FILE__); } register_shutdown_function(function() use ($coverage) { $output = null; if ($coverage) { $output = $coverage->stop(); } file_put_contents('{coverageFile}', serialize($output)); }); ob_end_clean(); require '{job}'; PK! —ˆÝt t pfile-manager-advanced/application/svg-sanitizer/includes/phpunit/phpunit/src/Util/PHP/Template/TestCaseClass.tplnu„[µü¤setCodeCoverage( new CodeCoverage( null, unserialize('{codeCoverageFilter}') ) ); } $result->beStrictAboutTestsThatDoNotTestAnything({isStrictAboutTestsThatDoNotTestAnything}); $result->beStrictAboutOutputDuringTests({isStrictAboutOutputDuringTests}); $result->enforceTimeLimit({enforcesTimeLimit}); $result->beStrictAboutTodoAnnotatedTests({isStrictAboutTodoAnnotatedTests}); $result->beStrictAboutResourceUsageDuringSmallTests({isStrictAboutResourceUsageDuringSmallTests}); $test = new {className}('{name}', unserialize('{data}'), '{dataName}'); $test->setDependencyInput(unserialize('{dependencyInput}')); $test->setInIsolation(true); ob_end_clean(); $test->run($result); $output = ''; if (!$test->hasExpectationOnOutput()) { $output = $test->getActualOutput(); } ini_set('xdebug.scream', '0'); @rewind(STDOUT); /* @ as not every STDOUT target stream is rewindable */ if ($stdout = @stream_get_contents(STDOUT)) { $output = $stdout . $output; $streamMetaData = stream_get_meta_data(STDOUT); if (!empty($streamMetaData['stream_type']) && 'STDIO' === $streamMetaData['stream_type']) { @ftruncate(STDOUT, 0); @rewind(STDOUT); } } file_put_contents( '{processResultFile}', serialize( [ 'testResult' => $test->getResult(), 'numAssertions' => $test->getNumAssertions(), 'result' => $result, 'output' => $output ] ) ); } $configurationFilePath = '{configurationFilePath}'; if ('' !== $configurationFilePath) { $configuration = PHPUnit\Util\Configuration::getInstance($configurationFilePath); $configuration->handlePHPConfiguration(); unset($configuration); } function __phpunit_error_handler($errno, $errstr, $errfile, $errline) { return true; } set_error_handler('__phpunit_error_handler'); {constants} {included_files} {globals} restore_error_handler(); if (isset($GLOBALS['__PHPUNIT_BOOTSTRAP'])) { require_once $GLOBALS['__PHPUNIT_BOOTSTRAP']; unset($GLOBALS['__PHPUNIT_BOOTSTRAP']); } __phpunit_run_isolated_test(); PK! ˆ—©Ã à qfile-manager-advanced/application/svg-sanitizer/includes/phpunit/phpunit/src/Util/PHP/Template/TestCaseMethod.tplnu„[µü¤setCodeCoverage( new CodeCoverage( null, unserialize('{codeCoverageFilter}') ) ); } $result->beStrictAboutTestsThatDoNotTestAnything({isStrictAboutTestsThatDoNotTestAnything}); $result->beStrictAboutOutputDuringTests({isStrictAboutOutputDuringTests}); $result->enforceTimeLimit({enforcesTimeLimit}); $result->beStrictAboutTodoAnnotatedTests({isStrictAboutTodoAnnotatedTests}); $result->beStrictAboutResourceUsageDuringSmallTests({isStrictAboutResourceUsageDuringSmallTests}); $test = new {className}('{methodName}', unserialize('{data}'), '{dataName}'); \assert($test instanceof TestCase); $test->setDependencyInput(unserialize('{dependencyInput}')); $test->setInIsolation(true); ob_end_clean(); $test->run($result); $output = ''; if (!$test->hasExpectationOnOutput()) { $output = $test->getActualOutput(); } ini_set('xdebug.scream', '0'); @rewind(STDOUT); /* @ as not every STDOUT target stream is rewindable */ if ($stdout = @stream_get_contents(STDOUT)) { $output = $stdout . $output; $streamMetaData = stream_get_meta_data(STDOUT); if (!empty($streamMetaData['stream_type']) && 'STDIO' === $streamMetaData['stream_type']) { @ftruncate(STDOUT, 0); @rewind(STDOUT); } } file_put_contents( '{processResultFile}', serialize( [ 'testResult' => $test->getResult(), 'numAssertions' => $test->getNumAssertions(), 'result' => $result, 'output' => $output ] ) ); } $configurationFilePath = '{configurationFilePath}'; if ('' !== $configurationFilePath) { $configuration = PHPUnit\Util\Configuration::getInstance($configurationFilePath); $configuration->handlePHPConfiguration(); unset($configuration); } function __phpunit_error_handler($errno, $errstr, $errfile, $errline) { return true; } set_error_handler('__phpunit_error_handler'); {constants} {included_files} {globals} restore_error_handler(); if (isset($GLOBALS['__PHPUNIT_BOOTSTRAP'])) { require_once $GLOBALS['__PHPUNIT_BOOTSTRAP']; unset($GLOBALS['__PHPUNIT_BOOTSTRAP']); } __phpunit_run_isolated_test(); PK!x‡l5--lfile-manager-advanced/application/svg-sanitizer/includes/phpunit/phpunit/src/Util/PHP/AbstractPhpProcess.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace PHPUnit\Util\PHP; use const DIRECTORY_SEPARATOR; use const PHP_SAPI; use function array_keys; use function array_merge; use function assert; use function escapeshellarg; use function file_exists; use function file_get_contents; use function ini_get_all; use function restore_error_handler; use function set_error_handler; use function sprintf; use function str_replace; use function strpos; use function strrpos; use function substr; use function trim; use function unlink; use function unserialize; use __PHP_Incomplete_Class; use ErrorException; use PHPUnit\Framework\AssertionFailedError; use PHPUnit\Framework\Exception; use PHPUnit\Framework\SyntheticError; use PHPUnit\Framework\Test; use PHPUnit\Framework\TestCase; use PHPUnit\Framework\TestFailure; use PHPUnit\Framework\TestResult; use SebastianBergmann\Environment\Runtime; use SebastianBergmann\RecursionContext\InvalidArgumentException; /** * @internal This class is not covered by the backward compatibility promise for PHPUnit */ abstract class AbstractPhpProcess { /** * @var Runtime */ protected $runtime; /** * @var bool */ protected $stderrRedirection = false; /** * @var string */ protected $stdin = ''; /** * @var string */ protected $args = ''; /** * @var array */ protected $env = []; /** * @var int */ protected $timeout = 0; public static function factory(): self { if (DIRECTORY_SEPARATOR === '\\') { return new WindowsPhpProcess; } return new DefaultPhpProcess; } public function __construct() { $this->runtime = new Runtime; } /** * Defines if should use STDERR redirection or not. * * Then $stderrRedirection is TRUE, STDERR is redirected to STDOUT. */ public function setUseStderrRedirection(bool $stderrRedirection): void { $this->stderrRedirection = $stderrRedirection; } /** * Returns TRUE if uses STDERR redirection or FALSE if not. */ public function useStderrRedirection(): bool { return $this->stderrRedirection; } /** * Sets the input string to be sent via STDIN. */ public function setStdin(string $stdin): void { $this->stdin = $stdin; } /** * Returns the input string to be sent via STDIN. */ public function getStdin(): string { return $this->stdin; } /** * Sets the string of arguments to pass to the php job. */ public function setArgs(string $args): void { $this->args = $args; } /** * Returns the string of arguments to pass to the php job. */ public function getArgs(): string { return $this->args; } /** * Sets the array of environment variables to start the child process with. * * @param array $env */ public function setEnv(array $env): void { $this->env = $env; } /** * Returns the array of environment variables to start the child process with. */ public function getEnv(): array { return $this->env; } /** * Sets the amount of seconds to wait before timing out. */ public function setTimeout(int $timeout): void { $this->timeout = $timeout; } /** * Returns the amount of seconds to wait before timing out. */ public function getTimeout(): int { return $this->timeout; } /** * Runs a single test in a separate PHP process. * * @throws InvalidArgumentException */ public function runTestJob(string $job, Test $test, TestResult $result, string $processResultFile): void { $result->startTest($test); $processResult = ''; $_result = $this->runJob($job); if (file_exists($processResultFile)) { $processResult = file_get_contents($processResultFile); @unlink($processResultFile); } $this->processChildResult( $test, $result, $processResult, $_result['stderr'] ); } /** * Returns the command based into the configurations. */ public function getCommand(array $settings, ?string $file = null): string { $command = $this->runtime->getBinary(); if ($this->runtime->hasPCOV()) { $settings = array_merge( $settings, $this->runtime->getCurrentSettings( array_keys(ini_get_all('pcov')) ) ); } elseif ($this->runtime->hasXdebug()) { $settings = array_merge( $settings, $this->runtime->getCurrentSettings( array_keys(ini_get_all('xdebug')) ) ); } $command .= $this->settingsToParameters($settings); if (PHP_SAPI === 'phpdbg') { $command .= ' -qrr'; if (!$file) { $command .= 's='; } } if ($file) { $command .= ' ' . escapeshellarg($file); } if ($this->args) { if (!$file) { $command .= ' --'; } $command .= ' ' . $this->args; } if ($this->stderrRedirection) { $command .= ' 2>&1'; } return $command; } /** * Runs a single job (PHP code) using a separate PHP process. */ abstract public function runJob(string $job, array $settings = []): array; protected function settingsToParameters(array $settings): string { $buffer = ''; foreach ($settings as $setting) { $buffer .= ' -d ' . escapeshellarg($setting); } return $buffer; } /** * Processes the TestResult object from an isolated process. * * @throws InvalidArgumentException */ private function processChildResult(Test $test, TestResult $result, string $stdout, string $stderr): void { $time = 0; if (!empty($stderr)) { $result->addError( $test, new Exception(trim($stderr)), $time ); } else { set_error_handler( /** * @throws ErrorException */ static function ($errno, $errstr, $errfile, $errline): void { throw new ErrorException($errstr, $errno, $errno, $errfile, $errline); } ); try { if (strpos($stdout, "#!/usr/bin/env php\n") === 0) { $stdout = substr($stdout, 19); } $childResult = unserialize(str_replace("#!/usr/bin/env php\n", '', $stdout)); restore_error_handler(); if ($childResult === false) { $result->addFailure( $test, new AssertionFailedError('Test was run in child process and ended unexpectedly'), $time ); } } catch (ErrorException $e) { restore_error_handler(); $childResult = false; $result->addError( $test, new Exception(trim($stdout), 0, $e), $time ); } if ($childResult !== false) { if (!empty($childResult['output'])) { $output = $childResult['output']; } /* @var TestCase $test */ $test->setResult($childResult['testResult']); $test->addToAssertionCount($childResult['numAssertions']); $childResult = $childResult['result']; assert($childResult instanceof TestResult); if ($result->getCollectCodeCoverageInformation()) { $result->getCodeCoverage()->merge( $childResult->getCodeCoverage() ); } $time = $childResult->time(); $notImplemented = $childResult->notImplemented(); $risky = $childResult->risky(); $skipped = $childResult->skipped(); $errors = $childResult->errors(); $warnings = $childResult->warnings(); $failures = $childResult->failures(); if (!empty($notImplemented)) { $result->addError( $test, $this->getException($notImplemented[0]), $time ); } elseif (!empty($risky)) { $result->addError( $test, $this->getException($risky[0]), $time ); } elseif (!empty($skipped)) { $result->addError( $test, $this->getException($skipped[0]), $time ); } elseif (!empty($errors)) { $result->addError( $test, $this->getException($errors[0]), $time ); } elseif (!empty($warnings)) { $result->addWarning( $test, $this->getException($warnings[0]), $time ); } elseif (!empty($failures)) { $result->addFailure( $test, $this->getException($failures[0]), $time ); } } } $result->endTest($test, $time); if (!empty($output)) { print $output; } } /** * Gets the thrown exception from a PHPUnit\Framework\TestFailure. * * @see https://github.com/sebastianbergmann/phpunit/issues/74 */ private function getException(TestFailure $error): Exception { $exception = $error->thrownException(); if ($exception instanceof __PHP_Incomplete_Class) { $exceptionArray = []; foreach ((array) $exception as $key => $value) { $key = substr($key, strrpos($key, "\0") + 1); $exceptionArray[$key] = $value; } $exception = new SyntheticError( sprintf( '%s: %s', $exceptionArray['_PHP_Incomplete_Class_Name'], $exceptionArray['message'] ), $exceptionArray['code'], $exceptionArray['file'], $exceptionArray['line'], $exceptionArray['trace'] ); } return $exception; } } PK!”L壣kfile-manager-advanced/application/svg-sanitizer/includes/phpunit/phpunit/src/Util/PHP/DefaultPhpProcess.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace PHPUnit\Util\PHP; use function array_merge; use function fclose; use function file_put_contents; use function fread; use function fwrite; use function is_array; use function is_resource; use function proc_close; use function proc_open; use function proc_terminate; use function rewind; use function sprintf; use function stream_get_contents; use function stream_select; use function sys_get_temp_dir; use function tempnam; use function unlink; use PHPUnit\Framework\Exception; /** * @internal This class is not covered by the backward compatibility promise for PHPUnit */ class DefaultPhpProcess extends AbstractPhpProcess { /** * @var string */ protected $tempFile; /** * Runs a single job (PHP code) using a separate PHP process. * * @throws Exception */ public function runJob(string $job, array $settings = []): array { if ($this->stdin || $this->useTemporaryFile()) { if (!($this->tempFile = tempnam(sys_get_temp_dir(), 'PHPUnit')) || file_put_contents($this->tempFile, $job) === false) { throw new Exception( 'Unable to write temporary file' ); } $job = $this->stdin; } return $this->runProcess($job, $settings); } /** * Returns an array of file handles to be used in place of pipes. */ protected function getHandles(): array { return []; } /** * Handles creating the child process and returning the STDOUT and STDERR. * * @throws Exception */ protected function runProcess(string $job, array $settings): array { $handles = $this->getHandles(); $env = null; if ($this->env) { $env = $_SERVER ?? []; unset($env['argv'], $env['argc']); $env = array_merge($env, $this->env); foreach ($env as $envKey => $envVar) { if (is_array($envVar)) { unset($env[$envKey]); } } } $pipeSpec = [ 0 => $handles[0] ?? ['pipe', 'r'], 1 => $handles[1] ?? ['pipe', 'w'], 2 => $handles[2] ?? ['pipe', 'w'], ]; $process = proc_open( $this->getCommand($settings, $this->tempFile), $pipeSpec, $pipes, null, $env ); if (!is_resource($process)) { throw new Exception( 'Unable to spawn worker process' ); } if ($job) { $this->process($pipes[0], $job); } fclose($pipes[0]); $stderr = $stdout = ''; if ($this->timeout) { unset($pipes[0]); while (true) { $r = $pipes; $w = null; $e = null; $n = @stream_select($r, $w, $e, $this->timeout); if ($n === false) { break; } if ($n === 0) { proc_terminate($process, 9); throw new Exception( sprintf( 'Job execution aborted after %d seconds', $this->timeout ) ); } if ($n > 0) { foreach ($r as $pipe) { $pipeOffset = 0; foreach ($pipes as $i => $origPipe) { if ($pipe === $origPipe) { $pipeOffset = $i; break; } } if (!$pipeOffset) { break; } $line = fread($pipe, 8192); if ($line === '' || $line === false) { fclose($pipes[$pipeOffset]); unset($pipes[$pipeOffset]); } elseif ($pipeOffset === 1) { $stdout .= $line; } else { $stderr .= $line; } } if (empty($pipes)) { break; } } } } else { if (isset($pipes[1])) { $stdout = stream_get_contents($pipes[1]); fclose($pipes[1]); } if (isset($pipes[2])) { $stderr = stream_get_contents($pipes[2]); fclose($pipes[2]); } } if (isset($handles[1])) { rewind($handles[1]); $stdout = stream_get_contents($handles[1]); fclose($handles[1]); } if (isset($handles[2])) { rewind($handles[2]); $stderr = stream_get_contents($handles[2]); fclose($handles[2]); } proc_close($process); $this->cleanup(); return ['stdout' => $stdout, 'stderr' => $stderr]; } protected function process($pipe, string $job): void { fwrite($pipe, $job); } protected function cleanup(): void { if ($this->tempFile) { unlink($this->tempFile); } } protected function useTemporaryFile(): bool { return false; } } PK!#Õ4úúgfile-manager-advanced/application/svg-sanitizer/includes/phpunit/phpunit/src/Util/RegularExpression.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace PHPUnit\Util; use function preg_match; /** * @internal This class is not covered by the backward compatibility promise for PHPUnit */ final class RegularExpression { /** * @return false|int */ public static function safeMatch(string $pattern, string $subject) { return ErrorHandler::invokeIgnoringWarnings( static function () use ($pattern, $subject) { return preg_match($pattern, $subject); } ); } } PK!Ã}.pafile-manager-advanced/application/svg-sanitizer/includes/phpunit/phpunit/src/Util/GlobalState.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace PHPUnit\Util; use function array_keys; use function array_shift; use function count; use function defined; use function get_defined_constants; use function get_included_files; use function in_array; use function ini_get_all; use function is_array; use function is_file; use function is_scalar; use function preg_match; use function serialize; use function sprintf; use function strpos; use function strtr; use function substr; use function var_export; use Closure; /** * @internal This class is not covered by the backward compatibility promise for PHPUnit */ final class GlobalState { /** * @var string[] */ private const SUPER_GLOBAL_ARRAYS = [ '_ENV', '_POST', '_GET', '_COOKIE', '_SERVER', '_FILES', '_REQUEST', ]; /** * @throws Exception */ public static function getIncludedFilesAsString(): string { return self::processIncludedFilesAsString(get_included_files()); } /** * @param string[] $files * * @throws Exception */ public static function processIncludedFilesAsString(array $files): string { $blacklist = new Blacklist; $prefix = false; $result = ''; if (defined('__PHPUNIT_PHAR__')) { $prefix = 'phar://' . __PHPUNIT_PHAR__ . '/'; } // Do not process bootstrap script array_shift($files); // If bootstrap script was a Composer bin proxy, skip the second entry as well if (substr(strtr($files[0], '\\', '/'), -24) === '/phpunit/phpunit/phpunit') { array_shift($files); } for ($i = count($files) - 1; $i >= 0; $i--) { $file = $files[$i]; if (!empty($GLOBALS['__PHPUNIT_ISOLATION_BLACKLIST']) && in_array($file, $GLOBALS['__PHPUNIT_ISOLATION_BLACKLIST'], true)) { continue; } if ($prefix !== false && strpos($file, $prefix) === 0) { continue; } // Skip virtual file system protocols if (preg_match('/^(vfs|phpvfs[a-z0-9]+):/', $file)) { continue; } if (!$blacklist->isBlacklisted($file) && is_file($file)) { $result = 'require_once \'' . $file . "';\n" . $result; } } return $result; } public static function getIniSettingsAsString(): string { $result = ''; foreach (ini_get_all(null, false) as $key => $value) { $result .= sprintf( '@ini_set(%s, %s);' . "\n", self::exportVariable($key), self::exportVariable((string) $value) ); } return $result; } public static function getConstantsAsString(): string { $constants = get_defined_constants(true); $result = ''; if (isset($constants['user'])) { foreach ($constants['user'] as $name => $value) { $result .= sprintf( 'if (!defined(\'%s\')) define(\'%s\', %s);' . "\n", $name, $name, self::exportVariable($value) ); } } return $result; } public static function getGlobalsAsString(): string { $result = ''; foreach (self::SUPER_GLOBAL_ARRAYS as $superGlobalArray) { if (isset($GLOBALS[$superGlobalArray]) && is_array($GLOBALS[$superGlobalArray])) { foreach (array_keys($GLOBALS[$superGlobalArray]) as $key) { if ($GLOBALS[$superGlobalArray][$key] instanceof Closure) { continue; } $result .= sprintf( '$GLOBALS[\'%s\'][\'%s\'] = %s;' . "\n", $superGlobalArray, $key, self::exportVariable($GLOBALS[$superGlobalArray][$key]) ); } } } $blacklist = self::SUPER_GLOBAL_ARRAYS; $blacklist[] = 'GLOBALS'; foreach (array_keys($GLOBALS) as $key) { if (!$GLOBALS[$key] instanceof Closure && !in_array($key, $blacklist, true)) { $result .= sprintf( '$GLOBALS[\'%s\'] = %s;' . "\n", $key, self::exportVariable($GLOBALS[$key]) ); } } return $result; } private static function exportVariable($variable): string { if (is_scalar($variable) || $variable === null || (is_array($variable) && self::arrayOnlyContainsScalars($variable))) { return var_export($variable, true); } return 'unserialize(' . var_export(serialize($variable), true) . ')'; } private static function arrayOnlyContainsScalars(array $array): bool { $result = true; foreach ($array as $element) { if (is_array($element)) { $result = self::arrayOnlyContainsScalars($element); } elseif (!is_scalar($element) && $element !== null) { $result = false; } if (!$result) { break; } } return $result; } } PK! ®€ £)£)bfile-manager-advanced/application/svg-sanitizer/includes/phpunit/phpunit/src/Util/Log/TeamCity.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace PHPUnit\Util\Log; use const PHP_EOL; use function class_exists; use function count; use function explode; use function get_class; use function getmypid; use function ini_get; use function is_bool; use function is_scalar; use function method_exists; use function print_r; use function round; use function str_replace; use function stripos; use PHPUnit\Framework\AssertionFailedError; use PHPUnit\Framework\ExceptionWrapper; use PHPUnit\Framework\ExpectationFailedException; use PHPUnit\Framework\Test; use PHPUnit\Framework\TestCase; use PHPUnit\Framework\TestFailure; use PHPUnit\Framework\TestResult; use PHPUnit\Framework\TestSuite; use PHPUnit\Framework\Warning; use PHPUnit\TextUI\ResultPrinter; use PHPUnit\Util\Exception; use PHPUnit\Util\Filter; use ReflectionClass; use ReflectionException; use SebastianBergmann\Comparator\ComparisonFailure; use SebastianBergmann\Timer\RuntimeException; use Throwable; /** * @internal This class is not covered by the backward compatibility promise for PHPUnit */ final class TeamCity extends ResultPrinter { /** * @var bool */ private $isSummaryTestCountPrinted = false; /** * @var string */ private $startedTestName; /** * @var false|int */ private $flowId; /** * @throws RuntimeException */ public function printResult(TestResult $result): void { $this->printHeader($result); $this->printFooter($result); } /** * An error occurred. */ public function addError(Test $test, Throwable $t, float $time): void { $this->printEvent( 'testFailed', [ 'name' => $test->getName(), 'message' => self::getMessage($t), 'details' => self::getDetails($t), 'duration' => self::toMilliseconds($time), ] ); } /** * A warning occurred. */ public function addWarning(Test $test, Warning $e, float $time): void { $this->write(self::getMessage($e) . PHP_EOL); } /** * A failure occurred. */ public function addFailure(Test $test, AssertionFailedError $e, float $time): void { $parameters = [ 'name' => $test->getName(), 'message' => self::getMessage($e), 'details' => self::getDetails($e), 'duration' => self::toMilliseconds($time), ]; if ($e instanceof ExpectationFailedException) { $comparisonFailure = $e->getComparisonFailure(); if ($comparisonFailure instanceof ComparisonFailure) { $expectedString = $comparisonFailure->getExpectedAsString(); if ($expectedString === null || empty($expectedString)) { $expectedString = self::getPrimitiveValueAsString($comparisonFailure->getExpected()); } $actualString = $comparisonFailure->getActualAsString(); if ($actualString === null || empty($actualString)) { $actualString = self::getPrimitiveValueAsString($comparisonFailure->getActual()); } if ($actualString !== null && $expectedString !== null) { $parameters['type'] = 'comparisonFailure'; $parameters['actual'] = $actualString; $parameters['expected'] = $expectedString; } } } $this->printEvent('testFailed', $parameters); } /** * Incomplete test. */ public function addIncompleteTest(Test $test, Throwable $t, float $time): void { $this->printIgnoredTest($test->getName(), $t, $time); } /** * Risky test. */ public function addRiskyTest(Test $test, Throwable $t, float $time): void { $this->addError($test, $t, $time); } /** * Skipped test. */ public function addSkippedTest(Test $test, Throwable $t, float $time): void { $testName = $test->getName(); if ($this->startedTestName !== $testName) { $this->startTest($test); $this->printIgnoredTest($testName, $t, $time); $this->endTest($test, $time); } else { $this->printIgnoredTest($testName, $t, $time); } } public function printIgnoredTest($testName, Throwable $t, float $time): void { $this->printEvent( 'testIgnored', [ 'name' => $testName, 'message' => self::getMessage($t), 'details' => self::getDetails($t), 'duration' => self::toMilliseconds($time), ] ); } /** * A testsuite started. */ public function startTestSuite(TestSuite $suite): void { if (stripos(ini_get('disable_functions'), 'getmypid') === false) { $this->flowId = getmypid(); } else { $this->flowId = false; } if (!$this->isSummaryTestCountPrinted) { $this->isSummaryTestCountPrinted = true; $this->printEvent( 'testCount', ['count' => count($suite)] ); } $suiteName = $suite->getName(); if (empty($suiteName)) { return; } $parameters = ['name' => $suiteName]; if (class_exists($suiteName, false)) { $fileName = self::getFileName($suiteName); $parameters['locationHint'] = "php_qn://{$fileName}::\\{$suiteName}"; } else { $split = explode('::', $suiteName); if (count($split) === 2 && class_exists($split[0]) && method_exists($split[0], $split[1])) { $fileName = self::getFileName($split[0]); $parameters['locationHint'] = "php_qn://{$fileName}::\\{$suiteName}"; $parameters['name'] = $split[1]; } } $this->printEvent('testSuiteStarted', $parameters); } /** * A testsuite ended. */ public function endTestSuite(TestSuite $suite): void { $suiteName = $suite->getName(); if (empty($suiteName)) { return; } $parameters = ['name' => $suiteName]; if (!class_exists($suiteName, false)) { $split = explode('::', $suiteName); if (count($split) === 2 && class_exists($split[0]) && method_exists($split[0], $split[1])) { $parameters['name'] = $split[1]; } } $this->printEvent('testSuiteFinished', $parameters); } /** * A test started. */ public function startTest(Test $test): void { $testName = $test->getName(); $this->startedTestName = $testName; $params = ['name' => $testName]; if ($test instanceof TestCase) { $className = get_class($test); $fileName = self::getFileName($className); $params['locationHint'] = "php_qn://{$fileName}::\\{$className}::{$testName}"; } $this->printEvent('testStarted', $params); } /** * A test ended. */ public function endTest(Test $test, float $time): void { parent::endTest($test, $time); $this->printEvent( 'testFinished', [ 'name' => $test->getName(), 'duration' => self::toMilliseconds($time), ] ); } protected function writeProgress(string $progress): void { } private function printEvent(string $eventName, array $params = []): void { $this->write("\n##teamcity[{$eventName}"); if ($this->flowId) { $params['flowId'] = $this->flowId; } foreach ($params as $key => $value) { $escapedValue = self::escapeValue((string) $value); $this->write(" {$key}='{$escapedValue}'"); } $this->write("]\n"); } private static function getMessage(Throwable $t): string { $message = ''; if ($t instanceof ExceptionWrapper) { if ($t->getClassName() !== '') { $message .= $t->getClassName(); } if ($message !== '' && $t->getMessage() !== '') { $message .= ' : '; } } return $message . $t->getMessage(); } private static function getDetails(Throwable $t): string { $stackTrace = Filter::getFilteredStacktrace($t); $previous = $t instanceof ExceptionWrapper ? $t->getPreviousWrapped() : $t->getPrevious(); while ($previous) { $stackTrace .= "\nCaused by\n" . TestFailure::exceptionToString($previous) . "\n" . Filter::getFilteredStacktrace($previous); $previous = $previous instanceof ExceptionWrapper ? $previous->getPreviousWrapped() : $previous->getPrevious(); } return ' ' . str_replace("\n", "\n ", $stackTrace); } private static function getPrimitiveValueAsString($value): ?string { if ($value === null) { return 'null'; } if (is_bool($value)) { return $value ? 'true' : 'false'; } if (is_scalar($value)) { return print_r($value, true); } return null; } private static function escapeValue(string $text): string { return str_replace( ['|', "'", "\n", "\r", ']', '['], ['||', "|'", '|n', '|r', '|]', '|['], $text ); } /** * @param string $className */ private static function getFileName($className): string { try { return (new ReflectionClass($className))->getFileName(); // @codeCoverageIgnoreStart } catch (ReflectionException $e) { throw new Exception( $e->getMessage(), $e->getCode(), $e ); } // @codeCoverageIgnoreEnd } /** * @param float $time microseconds */ private static function toMilliseconds(float $time): int { return (int) round($time * 1000); } } PK! æ±ê,.,._file-manager-advanced/application/svg-sanitizer/includes/phpunit/phpunit/src/Util/Log/JUnit.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace PHPUnit\Util\Log; use function class_exists; use function get_class; use function method_exists; use function sprintf; use function str_replace; use DOMDocument; use DOMElement; use PHPUnit\Framework\AssertionFailedError; use PHPUnit\Framework\ExceptionWrapper; use PHPUnit\Framework\SelfDescribing; use PHPUnit\Framework\Test; use PHPUnit\Framework\TestFailure; use PHPUnit\Framework\TestListener; use PHPUnit\Framework\TestSuite; use PHPUnit\Framework\Warning; use PHPUnit\Util\Exception; use PHPUnit\Util\Filter; use PHPUnit\Util\Printer; use PHPUnit\Util\Xml; use ReflectionClass; use ReflectionException; use Throwable; /** * @internal This class is not covered by the backward compatibility promise for PHPUnit */ final class JUnit extends Printer implements TestListener { /** * @var DOMDocument */ private $document; /** * @var DOMElement */ private $root; /** * @var bool */ private $reportRiskyTests = false; /** * @var DOMElement[] */ private $testSuites = []; /** * @var int[] */ private $testSuiteTests = [0]; /** * @var int[] */ private $testSuiteAssertions = [0]; /** * @var int[] */ private $testSuiteErrors = [0]; /** * @var int[] */ private $testSuiteWarnings = [0]; /** * @var int[] */ private $testSuiteFailures = [0]; /** * @var int[] */ private $testSuiteSkipped = [0]; /** * @var int[] */ private $testSuiteTimes = [0]; /** * @var int */ private $testSuiteLevel = 0; /** * @var DOMElement */ private $currentTestCase; /** * @param null|mixed $out */ public function __construct($out = null, bool $reportRiskyTests = false) { $this->document = new DOMDocument('1.0', 'UTF-8'); $this->document->formatOutput = true; $this->root = $this->document->createElement('testsuites'); $this->document->appendChild($this->root); parent::__construct($out); $this->reportRiskyTests = $reportRiskyTests; } /** * Flush buffer and close output. */ public function flush(): void { $this->write($this->getXML()); parent::flush(); } /** * An error occurred. */ public function addError(Test $test, Throwable $t, float $time): void { $this->doAddFault($test, $t, $time, 'error'); $this->testSuiteErrors[$this->testSuiteLevel]++; } /** * A warning occurred. */ public function addWarning(Test $test, Warning $e, float $time): void { $this->doAddFault($test, $e, $time, 'warning'); $this->testSuiteWarnings[$this->testSuiteLevel]++; } /** * A failure occurred. */ public function addFailure(Test $test, AssertionFailedError $e, float $time): void { $this->doAddFault($test, $e, $time, 'failure'); $this->testSuiteFailures[$this->testSuiteLevel]++; } /** * Incomplete test. */ public function addIncompleteTest(Test $test, Throwable $t, float $time): void { $this->doAddSkipped(); } /** * Risky test. */ public function addRiskyTest(Test $test, Throwable $t, float $time): void { if (!$this->reportRiskyTests || $this->currentTestCase === null) { return; } $error = $this->document->createElement( 'error', Xml::prepareString( "Risky Test\n" . Filter::getFilteredStacktrace($t) ) ); $error->setAttribute('type', get_class($t)); $this->currentTestCase->appendChild($error); $this->testSuiteErrors[$this->testSuiteLevel]++; } /** * Skipped test. */ public function addSkippedTest(Test $test, Throwable $t, float $time): void { $this->doAddSkipped(); } /** * A testsuite started. */ public function startTestSuite(TestSuite $suite): void { $testSuite = $this->document->createElement('testsuite'); $testSuite->setAttribute('name', $suite->getName()); if (class_exists($suite->getName(), false)) { try { $class = new ReflectionClass($suite->getName()); $testSuite->setAttribute('file', $class->getFileName()); } catch (ReflectionException $e) { } } if ($this->testSuiteLevel > 0) { $this->testSuites[$this->testSuiteLevel]->appendChild($testSuite); } else { $this->root->appendChild($testSuite); } $this->testSuiteLevel++; $this->testSuites[$this->testSuiteLevel] = $testSuite; $this->testSuiteTests[$this->testSuiteLevel] = 0; $this->testSuiteAssertions[$this->testSuiteLevel] = 0; $this->testSuiteErrors[$this->testSuiteLevel] = 0; $this->testSuiteWarnings[$this->testSuiteLevel] = 0; $this->testSuiteFailures[$this->testSuiteLevel] = 0; $this->testSuiteSkipped[$this->testSuiteLevel] = 0; $this->testSuiteTimes[$this->testSuiteLevel] = 0; } /** * A testsuite ended. */ public function endTestSuite(TestSuite $suite): void { $this->testSuites[$this->testSuiteLevel]->setAttribute( 'tests', (string) $this->testSuiteTests[$this->testSuiteLevel] ); $this->testSuites[$this->testSuiteLevel]->setAttribute( 'assertions', (string) $this->testSuiteAssertions[$this->testSuiteLevel] ); $this->testSuites[$this->testSuiteLevel]->setAttribute( 'errors', (string) $this->testSuiteErrors[$this->testSuiteLevel] ); $this->testSuites[$this->testSuiteLevel]->setAttribute( 'warnings', (string) $this->testSuiteWarnings[$this->testSuiteLevel] ); $this->testSuites[$this->testSuiteLevel]->setAttribute( 'failures', (string) $this->testSuiteFailures[$this->testSuiteLevel] ); $this->testSuites[$this->testSuiteLevel]->setAttribute( 'skipped', (string) $this->testSuiteSkipped[$this->testSuiteLevel] ); $this->testSuites[$this->testSuiteLevel]->setAttribute( 'time', sprintf('%F', $this->testSuiteTimes[$this->testSuiteLevel]) ); if ($this->testSuiteLevel > 1) { $this->testSuiteTests[$this->testSuiteLevel - 1] += $this->testSuiteTests[$this->testSuiteLevel]; $this->testSuiteAssertions[$this->testSuiteLevel - 1] += $this->testSuiteAssertions[$this->testSuiteLevel]; $this->testSuiteErrors[$this->testSuiteLevel - 1] += $this->testSuiteErrors[$this->testSuiteLevel]; $this->testSuiteWarnings[$this->testSuiteLevel - 1] += $this->testSuiteWarnings[$this->testSuiteLevel]; $this->testSuiteFailures[$this->testSuiteLevel - 1] += $this->testSuiteFailures[$this->testSuiteLevel]; $this->testSuiteSkipped[$this->testSuiteLevel - 1] += $this->testSuiteSkipped[$this->testSuiteLevel]; $this->testSuiteTimes[$this->testSuiteLevel - 1] += $this->testSuiteTimes[$this->testSuiteLevel]; } $this->testSuiteLevel--; } /** * A test started. */ public function startTest(Test $test): void { $usesDataprovider = false; if (method_exists($test, 'usesDataProvider')) { $usesDataprovider = $test->usesDataProvider(); } $testCase = $this->document->createElement('testcase'); $testCase->setAttribute('name', $test->getName()); try { $class = new ReflectionClass($test); // @codeCoverageIgnoreStart } catch (ReflectionException $e) { throw new Exception( $e->getMessage(), $e->getCode(), $e ); } // @codeCoverageIgnoreEnd $methodName = $test->getName(!$usesDataprovider); if ($class->hasMethod($methodName)) { try { $method = $class->getMethod($methodName); // @codeCoverageIgnoreStart } catch (ReflectionException $e) { throw new Exception( $e->getMessage(), $e->getCode(), $e ); } // @codeCoverageIgnoreEnd $testCase->setAttribute('class', $class->getName()); $testCase->setAttribute('classname', str_replace('\\', '.', $class->getName())); $testCase->setAttribute('file', $class->getFileName()); $testCase->setAttribute('line', (string) $method->getStartLine()); } $this->currentTestCase = $testCase; } /** * A test ended. */ public function endTest(Test $test, float $time): void { $numAssertions = 0; if (method_exists($test, 'getNumAssertions')) { $numAssertions = $test->getNumAssertions(); } $this->testSuiteAssertions[$this->testSuiteLevel] += $numAssertions; $this->currentTestCase->setAttribute( 'assertions', (string) $numAssertions ); $this->currentTestCase->setAttribute( 'time', sprintf('%F', $time) ); $this->testSuites[$this->testSuiteLevel]->appendChild( $this->currentTestCase ); $this->testSuiteTests[$this->testSuiteLevel]++; $this->testSuiteTimes[$this->testSuiteLevel] += $time; $testOutput = ''; if (method_exists($test, 'hasOutput') && method_exists($test, 'getActualOutput')) { $testOutput = $test->hasOutput() ? $test->getActualOutput() : ''; } if (!empty($testOutput)) { $systemOut = $this->document->createElement( 'system-out', Xml::prepareString($testOutput) ); $this->currentTestCase->appendChild($systemOut); } $this->currentTestCase = null; } /** * Returns the XML as a string. */ public function getXML(): string { return $this->document->saveXML(); } private function doAddFault(Test $test, Throwable $t, float $time, $type): void { if ($this->currentTestCase === null) { return; } if ($test instanceof SelfDescribing) { $buffer = $test->toString() . "\n"; } else { $buffer = ''; } $buffer .= TestFailure::exceptionToString($t) . "\n" . Filter::getFilteredStacktrace($t); $fault = $this->document->createElement( $type, Xml::prepareString($buffer) ); if ($t instanceof ExceptionWrapper) { $fault->setAttribute('type', $t->getClassName()); } else { $fault->setAttribute('type', get_class($t)); } $this->currentTestCase->appendChild($fault); } private function doAddSkipped(): void { if ($this->currentTestCase === null) { return; } $skipped = $this->document->createElement('skipped'); $this->currentTestCase->appendChild($skipped); $this->testSuiteSkipped[$this->testSuiteLevel]++; } } PK!e]~#~#Yfile-manager-advanced/application/svg-sanitizer/includes/phpunit/phpunit/src/Util/Xml.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace PHPUnit\Util; use const ENT_QUOTES; use function assert; use function chdir; use function class_exists; use function dirname; use function error_reporting; use function file_get_contents; use function getcwd; use function gettype; use function htmlspecialchars; use function is_string; use function libxml_get_errors; use function libxml_use_internal_errors; use function mb_convert_encoding; use function ord; use function preg_replace; use function settype; use function sprintf; use function strlen; use DOMCharacterData; use DOMDocument; use DOMElement; use DOMNode; use DOMText; use PHPUnit\Framework\Exception; use ReflectionClass; use ReflectionException; /** * @internal This class is not covered by the backward compatibility promise for PHPUnit */ final class Xml { public static function import(DOMElement $element): DOMElement { return (new DOMDocument)->importNode($element, true); } /** * Load an $actual document into a DOMDocument. This is called * from the selector assertions. * * If $actual is already a DOMDocument, it is returned with * no changes. Otherwise, $actual is loaded into a new DOMDocument * as either HTML or XML, depending on the value of $isHtml. If $isHtml is * false and $xinclude is true, xinclude is performed on the loaded * DOMDocument. * * Note: prior to PHPUnit 3.3.0, this method loaded a file and * not a string as it currently does. To load a file into a * DOMDocument, use loadFile() instead. * * @param DOMDocument|string $actual * * @throws Exception */ public static function load($actual, bool $isHtml = false, string $filename = '', bool $xinclude = false, bool $strict = false): DOMDocument { if ($actual instanceof DOMDocument) { return $actual; } if (!is_string($actual)) { throw new Exception('Could not load XML from ' . gettype($actual)); } if ($actual === '') { throw new Exception('Could not load XML from empty string'); } // Required for XInclude on Windows. if ($xinclude) { $cwd = getcwd(); @chdir(dirname($filename)); } $document = new DOMDocument; $document->preserveWhiteSpace = false; $internal = libxml_use_internal_errors(true); $message = ''; $reporting = error_reporting(0); if ($filename !== '') { // Required for XInclude $document->documentURI = $filename; } if ($isHtml) { $loaded = $document->loadHTML($actual); } else { $loaded = $document->loadXML($actual); } if (!$isHtml && $xinclude) { $document->xinclude(); } foreach (libxml_get_errors() as $error) { $message .= "\n" . $error->message; } libxml_use_internal_errors($internal); error_reporting($reporting); if (isset($cwd)) { @chdir($cwd); } if ($loaded === false || ($strict && $message !== '')) { if ($filename !== '') { throw new Exception( sprintf( 'Could not load "%s".%s', $filename, $message !== '' ? "\n" . $message : '' ) ); } if ($message === '') { $message = 'Could not load XML for unknown reason'; } throw new Exception($message); } return $document; } /** * Loads an XML (or HTML) file into a DOMDocument object. * * @throws Exception */ public static function loadFile(string $filename, bool $isHtml = false, bool $xinclude = false, bool $strict = false): DOMDocument { $reporting = error_reporting(0); $contents = file_get_contents($filename); error_reporting($reporting); if ($contents === false) { throw new Exception( sprintf( 'Could not read "%s".', $filename ) ); } return self::load($contents, $isHtml, $filename, $xinclude, $strict); } public static function removeCharacterDataNodes(DOMNode $node): void { if ($node->hasChildNodes()) { for ($i = $node->childNodes->length - 1; $i >= 0; $i--) { if (($child = $node->childNodes->item($i)) instanceof DOMCharacterData) { $node->removeChild($child); } } } } /** * Escapes a string for the use in XML documents. * * Any Unicode character is allowed, excluding the surrogate blocks, FFFE, * and FFFF (not even as character reference). * * @see https://www.w3.org/TR/xml/#charsets */ public static function prepareString(string $string): string { return preg_replace( '/[\\x00-\\x08\\x0b\\x0c\\x0e-\\x1f\\x7f]/', '', htmlspecialchars( self::convertToUtf8($string), ENT_QUOTES ) ); } /** * "Convert" a DOMElement object into a PHP variable. */ public static function xmlToVariable(DOMElement $element) { $variable = null; switch ($element->tagName) { case 'array': $variable = []; foreach ($element->childNodes as $entry) { if (!$entry instanceof DOMElement || $entry->tagName !== 'element') { continue; } $item = $entry->childNodes->item(0); if ($item instanceof DOMText) { $item = $entry->childNodes->item(1); } $value = self::xmlToVariable($item); if ($entry->hasAttribute('key')) { $variable[(string) $entry->getAttribute('key')] = $value; } else { $variable[] = $value; } } break; case 'object': $className = $element->getAttribute('class'); if ($element->hasChildNodes()) { $arguments = $element->childNodes->item(0)->childNodes; $constructorArgs = []; foreach ($arguments as $argument) { if ($argument instanceof DOMElement) { $constructorArgs[] = self::xmlToVariable($argument); } } try { assert(class_exists($className)); $variable = (new ReflectionClass($className))->newInstanceArgs($constructorArgs); // @codeCoverageIgnoreStart } catch (ReflectionException $e) { throw new Exception( $e->getMessage(), $e->getCode(), $e ); } // @codeCoverageIgnoreEnd } else { $variable = new $className; } break; case 'boolean': $variable = $element->textContent === 'true'; break; case 'integer': case 'double': case 'string': $variable = $element->textContent; settype($variable, $element->tagName); break; } return $variable; } private static function convertToUtf8(string $string): string { if (!self::isUtf8($string)) { $string = mb_convert_encoding($string, 'UTF-8'); } return $string; } private static function isUtf8(string $string): bool { $length = strlen($string); for ($i = 0; $i < $length; $i++) { if (ord($string[$i]) < 0x80) { $n = 0; } elseif ((ord($string[$i]) & 0xE0) === 0xC0) { $n = 1; } elseif ((ord($string[$i]) & 0xF0) === 0xE0) { $n = 2; } elseif ((ord($string[$i]) & 0xF0) === 0xF0) { $n = 3; } else { return false; } for ($j = 0; $j < $n; $j++) { if ((++$i === $length) || ((ord($string[$i]) & 0xC0) !== 0x80)) { return false; } } } return true; } } PK!¬ÍåiÖÖofile-manager-advanced/application/svg-sanitizer/includes/phpunit/phpunit/src/Util/VersionComparisonOperator.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace PHPUnit\Util; use function in_array; use function sprintf; /** * @internal This class is not covered by the backward compatibility promise for PHPUnit * * @psalm-immutable */ final class VersionComparisonOperator { /** * @psalm-var '<'|'lt'|'<='|'le'|'>'|'gt'|'>='|'ge'|'=='|'='|'eq'|'!='|'<>'|'ne' */ private $operator; public function __construct(string $operator) { $this->ensureOperatorIsValid($operator); $this->operator = $operator; } /** * @return '!='|'<'|'<='|'<>'|'='|'=='|'>'|'>='|'eq'|'ge'|'gt'|'le'|'lt'|'ne' */ public function asString(): string { return $this->operator; } /** * @throws Exception * * @psalm-assert '<'|'lt'|'<='|'le'|'>'|'gt'|'>='|'ge'|'=='|'='|'eq'|'!='|'<>'|'ne' $operator */ private function ensureOperatorIsValid(string $operator): void { if (!in_array($operator, ['<', 'lt', '<=', 'le', '>', 'gt', '>=', 'ge', '==', '=', 'eq', '!=', '<>', 'ne'], true)) { throw new Exception( sprintf( '"%s" is not a valid version_compare() operator', $operator ) ); } } } PK!dq ››Zfile-manager-advanced/application/svg-sanitizer/includes/phpunit/phpunit/src/Util/Type.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace PHPUnit\Util; use Throwable; /** * @internal This class is not covered by the backward compatibility promise for PHPUnit */ final class Type { public static function isType(string $type): bool { switch ($type) { case 'numeric': case 'integer': case 'int': case 'iterable': case 'float': case 'string': case 'boolean': case 'bool': case 'null': case 'array': case 'object': case 'resource': case 'scalar': return true; default: return false; } } public static function isCloneable(object $object): bool { try { $clone = clone $object; } catch (Throwable $t) { return false; } return $clone instanceof $object; } } PK!@õó®•x•xZfile-manager-advanced/application/svg-sanitizer/includes/phpunit/phpunit/src/Util/Test.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace PHPUnit\Util; use const PHP_OS; use const PHP_VERSION; use function addcslashes; use function array_flip; use function array_key_exists; use function array_keys; use function array_merge; use function array_unique; use function array_unshift; use function class_exists; use function class_implements; use function class_parents; use function count; use function explode; use function extension_loaded; use function function_exists; use function get_class; use function ini_get; use function interface_exists; use function is_array; use function is_int; use function method_exists; use function phpversion; use function preg_match; use function preg_replace; use function range; use function sprintf; use function str_replace; use function strncmp; use function strpos; use function trait_exists; use function version_compare; use PHPUnit\Framework\CodeCoverageException; use PHPUnit\Framework\InvalidCoversTargetException; use PHPUnit\Framework\SelfDescribing; use PHPUnit\Framework\TestCase; use PHPUnit\Framework\Warning; use PHPUnit\Runner\Version; use PHPUnit\Util\Annotation\Registry; use ReflectionClass; use ReflectionException; use ReflectionFunction; use ReflectionMethod; use SebastianBergmann\Environment\OperatingSystem; use SebastianBergmann\RecursionContext\InvalidArgumentException; /** * @internal This class is not covered by the backward compatibility promise for PHPUnit */ final class Test { /** * @var int */ public const UNKNOWN = -1; /** * @var int */ public const SMALL = 0; /** * @var int */ public const MEDIUM = 1; /** * @var int */ public const LARGE = 2; /** * @var array */ private static $hookMethods = []; /** * @throws InvalidArgumentException */ public static function describe(\PHPUnit\Framework\Test $test): array { if ($test instanceof TestCase) { return [get_class($test), $test->getName()]; } if ($test instanceof SelfDescribing) { return ['', $test->toString()]; } return ['', get_class($test)]; } public static function describeAsString(\PHPUnit\Framework\Test $test): string { if ($test instanceof SelfDescribing) { return $test->toString(); } return get_class($test); } /** * @throws CodeCoverageException * * @return array|bool * * @psalm-param class-string $className */ public static function getLinesToBeCovered(string $className, string $methodName) { $annotations = self::parseTestMethodAnnotations( $className, $methodName ); if (!self::shouldCoversAnnotationBeUsed($annotations)) { return false; } return self::getLinesToBeCoveredOrUsed($className, $methodName, 'covers'); } /** * Returns lines of code specified with the @uses annotation. * * @throws CodeCoverageException * * @psalm-param class-string $className */ public static function getLinesToBeUsed(string $className, string $methodName): array { return self::getLinesToBeCoveredOrUsed($className, $methodName, 'uses'); } public static function requiresCodeCoverageDataCollection(TestCase $test): bool { $annotations = $test->getAnnotations(); // If there is no @covers annotation but a @coversNothing annotation on // the test method then code coverage data does not need to be collected if (isset($annotations['method']['coversNothing'])) { return false; } // If there is at least one @covers annotation then // code coverage data needs to be collected if (isset($annotations['method']['covers'])) { return true; } // If there is no @covers annotation but a @coversNothing annotation // then code coverage data does not need to be collected if (isset($annotations['class']['coversNothing'])) { return false; } // If there is no @coversNothing annotation then // code coverage data may be collected return true; } /** * @throws Exception * * @psalm-param class-string $className */ public static function getRequirements(string $className, string $methodName): array { return self::mergeArraysRecursively( Registry::getInstance()->forClassName($className)->requirements(), Registry::getInstance()->forMethod($className, $methodName)->requirements() ); } /** * Returns the missing requirements for a test. * * @throws Exception * @throws Warning * * @psalm-param class-string $className */ public static function getMissingRequirements(string $className, string $methodName): array { $required = self::getRequirements($className, $methodName); $missing = []; $hint = null; if (!empty($required['PHP'])) { $operator = new VersionComparisonOperator(empty($required['PHP']['operator']) ? '>=' : $required['PHP']['operator']); if (!version_compare(PHP_VERSION, $required['PHP']['version'], $operator->asString())) { $missing[] = sprintf('PHP %s %s is required.', $operator->asString(), $required['PHP']['version']); $hint = 'PHP'; } } elseif (!empty($required['PHP_constraint'])) { $version = new \PharIo\Version\Version(self::sanitizeVersionNumber(PHP_VERSION)); if (!$required['PHP_constraint']['constraint']->complies($version)) { $missing[] = sprintf( 'PHP version does not match the required constraint %s.', $required['PHP_constraint']['constraint']->asString() ); $hint = 'PHP_constraint'; } } if (!empty($required['PHPUnit'])) { $phpunitVersion = Version::id(); $operator = new VersionComparisonOperator(empty($required['PHPUnit']['operator']) ? '>=' : $required['PHPUnit']['operator']); if (!version_compare($phpunitVersion, $required['PHPUnit']['version'], $operator->asString())) { $missing[] = sprintf('PHPUnit %s %s is required.', $operator->asString(), $required['PHPUnit']['version']); $hint = $hint ?? 'PHPUnit'; } } elseif (!empty($required['PHPUnit_constraint'])) { $phpunitVersion = new \PharIo\Version\Version(self::sanitizeVersionNumber(Version::id())); if (!$required['PHPUnit_constraint']['constraint']->complies($phpunitVersion)) { $missing[] = sprintf( 'PHPUnit version does not match the required constraint %s.', $required['PHPUnit_constraint']['constraint']->asString() ); $hint = $hint ?? 'PHPUnit_constraint'; } } if (!empty($required['OSFAMILY']) && $required['OSFAMILY'] !== (new OperatingSystem)->getFamily()) { $missing[] = sprintf('Operating system %s is required.', $required['OSFAMILY']); $hint = $hint ?? 'OSFAMILY'; } if (!empty($required['OS'])) { $requiredOsPattern = sprintf('/%s/i', addcslashes($required['OS'], '/')); if (!preg_match($requiredOsPattern, PHP_OS)) { $missing[] = sprintf('Operating system matching %s is required.', $requiredOsPattern); $hint = $hint ?? 'OS'; } } if (!empty($required['functions'])) { foreach ($required['functions'] as $function) { $pieces = explode('::', $function); if (count($pieces) === 2 && class_exists($pieces[0]) && method_exists($pieces[0], $pieces[1])) { continue; } if (function_exists($function)) { continue; } $missing[] = sprintf('Function %s is required.', $function); $hint = $hint ?? 'function_' . $function; } } if (!empty($required['setting'])) { foreach ($required['setting'] as $setting => $value) { if (ini_get($setting) !== $value) { $missing[] = sprintf('Setting "%s" must be "%s".', $setting, $value); $hint = $hint ?? '__SETTING_' . $setting; } } } if (!empty($required['extensions'])) { foreach ($required['extensions'] as $extension) { if (isset($required['extension_versions'][$extension])) { continue; } if (!extension_loaded($extension)) { $missing[] = sprintf('Extension %s is required.', $extension); $hint = $hint ?? 'extension_' . $extension; } } } if (!empty($required['extension_versions'])) { foreach ($required['extension_versions'] as $extension => $req) { $actualVersion = phpversion($extension); $operator = new VersionComparisonOperator(empty($req['operator']) ? '>=' : $req['operator']); if ($actualVersion === false || !version_compare($actualVersion, $req['version'], $operator->asString())) { $missing[] = sprintf('Extension %s %s %s is required.', $extension, $operator->asString(), $req['version']); $hint = $hint ?? 'extension_' . $extension; } } } if ($hint && isset($required['__OFFSET'])) { array_unshift($missing, '__OFFSET_FILE=' . $required['__OFFSET']['__FILE']); array_unshift($missing, '__OFFSET_LINE=' . ($required['__OFFSET'][$hint] ?? 1)); } return $missing; } /** * Returns the expected exception for a test. * * @return array|false * * @deprecated * * @codeCoverageIgnore * * @psalm-param class-string $className */ public static function getExpectedException(string $className, string $methodName) { return Registry::getInstance()->forMethod($className, $methodName)->expectedException(); } /** * Returns the provided data for a method. * * @throws Exception * * @psalm-param class-string $className */ public static function getProvidedData(string $className, string $methodName): ?array { return Registry::getInstance()->forMethod($className, $methodName)->getProvidedData(); } /** * @psalm-param class-string $className */ public static function parseTestMethodAnnotations(string $className, ?string $methodName = ''): array { $registry = Registry::getInstance(); if ($methodName !== null) { try { return [ 'method' => $registry->forMethod($className, $methodName)->symbolAnnotations(), 'class' => $registry->forClassName($className)->symbolAnnotations(), ]; } catch (Exception $methodNotFound) { // ignored } } return [ 'method' => null, 'class' => $registry->forClassName($className)->symbolAnnotations(), ]; } /** * @psalm-param class-string $className */ public static function getInlineAnnotations(string $className, string $methodName): array { return Registry::getInstance()->forMethod($className, $methodName)->getInlineAnnotations(); } /** @psalm-param class-string $className */ public static function getBackupSettings(string $className, string $methodName): array { return [ 'backupGlobals' => self::getBooleanAnnotationSetting( $className, $methodName, 'backupGlobals' ), 'backupStaticAttributes' => self::getBooleanAnnotationSetting( $className, $methodName, 'backupStaticAttributes' ), ]; } /** @psalm-param class-string $className */ public static function getDependencies(string $className, string $methodName): array { $annotations = self::parseTestMethodAnnotations( $className, $methodName ); $dependencies = $annotations['class']['depends'] ?? []; if (isset($annotations['method']['depends'])) { $dependencies = array_merge( $dependencies, $annotations['method']['depends'] ); } return array_unique($dependencies); } /** @psalm-param class-string $className */ public static function getGroups(string $className, ?string $methodName = ''): array { $annotations = self::parseTestMethodAnnotations( $className, $methodName ); $groups = []; if (isset($annotations['method']['author'])) { $groups[] = $annotations['method']['author']; } elseif (isset($annotations['class']['author'])) { $groups[] = $annotations['class']['author']; } if (isset($annotations['class']['group'])) { $groups[] = $annotations['class']['group']; } if (isset($annotations['method']['group'])) { $groups[] = $annotations['method']['group']; } if (isset($annotations['class']['ticket'])) { $groups[] = $annotations['class']['ticket']; } if (isset($annotations['method']['ticket'])) { $groups[] = $annotations['method']['ticket']; } foreach (['method', 'class'] as $element) { foreach (['small', 'medium', 'large'] as $size) { if (isset($annotations[$element][$size])) { $groups[] = [$size]; break 2; } } } return array_unique(array_merge([], ...$groups)); } /** @psalm-param class-string $className */ public static function getSize(string $className, ?string $methodName): int { $groups = array_flip(self::getGroups($className, $methodName)); if (isset($groups['large'])) { return self::LARGE; } if (isset($groups['medium'])) { return self::MEDIUM; } if (isset($groups['small'])) { return self::SMALL; } return self::UNKNOWN; } /** @psalm-param class-string $className */ public static function getProcessIsolationSettings(string $className, string $methodName): bool { $annotations = self::parseTestMethodAnnotations( $className, $methodName ); return isset($annotations['class']['runTestsInSeparateProcesses']) || isset($annotations['method']['runInSeparateProcess']); } /** @psalm-param class-string $className */ public static function getClassProcessIsolationSettings(string $className, string $methodName): bool { $annotations = self::parseTestMethodAnnotations( $className, $methodName ); return isset($annotations['class']['runClassInSeparateProcess']); } /** @psalm-param class-string $className */ public static function getPreserveGlobalStateSettings(string $className, string $methodName): ?bool { return self::getBooleanAnnotationSetting( $className, $methodName, 'preserveGlobalState' ); } /** @psalm-param class-string $className */ public static function getHookMethods(string $className): array { if (!class_exists($className, false)) { return self::emptyHookMethodsArray(); } if (!isset(self::$hookMethods[$className])) { self::$hookMethods[$className] = self::emptyHookMethodsArray(); try { foreach ((new Reflection)->methodsInTestClass(new ReflectionClass($className)) as $method) { $docBlock = Registry::getInstance()->forMethod($className, $method->getName()); if ($method->isStatic()) { if ($docBlock->isHookToBeExecutedBeforeClass()) { array_unshift( self::$hookMethods[$className]['beforeClass'], $method->getName() ); } if ($docBlock->isHookToBeExecutedAfterClass()) { self::$hookMethods[$className]['afterClass'][] = $method->getName(); } } if ($docBlock->isToBeExecutedBeforeTest()) { array_unshift( self::$hookMethods[$className]['before'], $method->getName() ); } if ($docBlock->isToBeExecutedAfterTest()) { self::$hookMethods[$className]['after'][] = $method->getName(); } } } catch (ReflectionException $e) { } } return self::$hookMethods[$className]; } public static function isTestMethod(ReflectionMethod $method): bool { if (!$method->isPublic()) { return false; } if (strpos($method->getName(), 'test') === 0) { return true; } return array_key_exists( 'test', Registry::getInstance()->forMethod( $method->getDeclaringClass()->getName(), $method->getName() ) ->symbolAnnotations() ); } /** * @throws CodeCoverageException * * @psalm-param class-string $className */ private static function getLinesToBeCoveredOrUsed(string $className, string $methodName, string $mode): array { $annotations = self::parseTestMethodAnnotations( $className, $methodName ); $classShortcut = null; if (!empty($annotations['class'][$mode . 'DefaultClass'])) { if (count($annotations['class'][$mode . 'DefaultClass']) > 1) { throw new CodeCoverageException( sprintf( 'More than one @%sClass annotation in class or interface "%s".', $mode, $className ) ); } $classShortcut = $annotations['class'][$mode . 'DefaultClass'][0]; } $list = $annotations['class'][$mode] ?? []; if (isset($annotations['method'][$mode])) { $list = array_merge($list, $annotations['method'][$mode]); } $codeList = []; foreach (array_unique($list) as $element) { if ($classShortcut && strncmp($element, '::', 2) === 0) { $element = $classShortcut . $element; } $element = preg_replace('/[\s()]+$/', '', $element); $element = explode(' ', $element); $element = $element[0]; if ($mode === 'covers' && interface_exists($element)) { throw new InvalidCoversTargetException( sprintf( 'Trying to @cover interface "%s".', $element ) ); } $codeList[] = self::resolveElementToReflectionObjects($element); } return self::resolveReflectionObjectsToLines(array_merge([], ...$codeList)); } private static function emptyHookMethodsArray(): array { return [ 'beforeClass' => ['setUpBeforeClass'], 'before' => ['setUp'], 'after' => ['tearDown'], 'afterClass' => ['tearDownAfterClass'], ]; } /** @psalm-param class-string $className */ private static function getBooleanAnnotationSetting(string $className, ?string $methodName, string $settingName): ?bool { $annotations = self::parseTestMethodAnnotations( $className, $methodName ); if (isset($annotations['method'][$settingName])) { if ($annotations['method'][$settingName][0] === 'enabled') { return true; } if ($annotations['method'][$settingName][0] === 'disabled') { return false; } } if (isset($annotations['class'][$settingName])) { if ($annotations['class'][$settingName][0] === 'enabled') { return true; } if ($annotations['class'][$settingName][0] === 'disabled') { return false; } } return null; } /** * @throws InvalidCoversTargetException */ private static function resolveElementToReflectionObjects(string $element): array { $codeToCoverList = []; if (function_exists($element) && strpos($element, '\\') !== false) { try { $codeToCoverList[] = new ReflectionFunction($element); // @codeCoverageIgnoreStart } catch (ReflectionException $e) { throw new Exception( $e->getMessage(), $e->getCode(), $e ); } // @codeCoverageIgnoreEnd } elseif (strpos($element, '::') !== false) { [$className, $methodName] = explode('::', $element); if (isset($methodName[0]) && $methodName[0] === '<') { $classes = [$className]; foreach ($classes as $className) { if (!class_exists($className) && !interface_exists($className) && !trait_exists($className)) { throw new InvalidCoversTargetException( sprintf( 'Trying to @cover or @use not existing class or ' . 'interface "%s".', $className ) ); } try { $methods = (new ReflectionClass($className))->getMethods(); // @codeCoverageIgnoreStart } catch (ReflectionException $e) { throw new Exception( $e->getMessage(), $e->getCode(), $e ); } // @codeCoverageIgnoreEnd $inverse = isset($methodName[1]) && $methodName[1] === '!'; $visibility = 'isPublic'; if (strpos($methodName, 'protected')) { $visibility = 'isProtected'; } elseif (strpos($methodName, 'private')) { $visibility = 'isPrivate'; } foreach ($methods as $method) { if ($inverse && !$method->{$visibility}()) { $codeToCoverList[] = $method; } elseif (!$inverse && $method->{$visibility}()) { $codeToCoverList[] = $method; } } } } else { $classes = [$className]; foreach ($classes as $className) { if ($className === '' && function_exists($methodName)) { try { $codeToCoverList[] = new ReflectionFunction( $methodName ); // @codeCoverageIgnoreStart } catch (ReflectionException $e) { throw new Exception( $e->getMessage(), $e->getCode(), $e ); } // @codeCoverageIgnoreEnd } else { if (!((class_exists($className) || interface_exists($className) || trait_exists($className)) && method_exists($className, $methodName))) { throw new InvalidCoversTargetException( sprintf( 'Trying to @cover or @use not existing method "%s::%s".', $className, $methodName ) ); } try { $codeToCoverList[] = new ReflectionMethod( $className, $methodName ); // @codeCoverageIgnoreStart } catch (ReflectionException $e) { throw new Exception( $e->getMessage(), $e->getCode(), $e ); } // @codeCoverageIgnoreEnd } } } } else { $extended = false; if (strpos($element, '') !== false) { $element = str_replace('', '', $element); $extended = true; } $classes = [$element]; if ($extended) { $classes = array_merge( $classes, class_implements($element), class_parents($element) ); } foreach ($classes as $className) { if (!class_exists($className) && !interface_exists($className) && !trait_exists($className)) { throw new InvalidCoversTargetException( sprintf( 'Trying to @cover or @use not existing class or ' . 'interface "%s".', $className ) ); } try { $codeToCoverList[] = new ReflectionClass($className); // @codeCoverageIgnoreStart } catch (ReflectionException $e) { throw new Exception( $e->getMessage(), $e->getCode(), $e ); } // @codeCoverageIgnoreEnd } } return $codeToCoverList; } private static function resolveReflectionObjectsToLines(array $reflectors): array { $result = []; foreach ($reflectors as $reflector) { if ($reflector instanceof ReflectionClass) { foreach ($reflector->getTraits() as $trait) { $reflectors[] = $trait; } } } foreach ($reflectors as $reflector) { $filename = $reflector->getFileName(); if (!isset($result[$filename])) { $result[$filename] = []; } $result[$filename] = array_merge( $result[$filename], range($reflector->getStartLine(), $reflector->getEndLine()) ); } foreach ($result as $filename => $lineNumbers) { $result[$filename] = array_keys(array_flip($lineNumbers)); } return $result; } /** * Trims any extensions from version string that follows after * the .[.] format. */ private static function sanitizeVersionNumber(string $version) { return preg_replace( '/^(\d+\.\d+(?:.\d+)?).*$/', '$1', $version ); } private static function shouldCoversAnnotationBeUsed(array $annotations): bool { if (isset($annotations['method']['coversNothing'])) { return false; } if (isset($annotations['method']['covers'])) { return true; } if (isset($annotations['class']['coversNothing'])) { return false; } return true; } /** * Merge two arrays together. * * If an integer key exists in both arrays and preserveNumericKeys is false, the value * from the second array will be appended to the first array. If both values are arrays, they * are merged together, else the value of the second array overwrites the one of the first array. * * This implementation is copied from https://github.com/zendframework/zend-stdlib/blob/76b653c5e99b40eccf5966e3122c90615134ae46/src/ArrayUtils.php * * Zend Framework (http://framework.zend.com/) * * @see http://github.com/zendframework/zf2 for the canonical source repository * * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com) * @license http://framework.zend.com/license/new-bsd New BSD License */ private static function mergeArraysRecursively(array $a, array $b): array { foreach ($b as $key => $value) { if (array_key_exists($key, $a)) { if (is_int($key)) { $a[] = $value; } elseif (is_array($value) && is_array($a[$key])) { $a[$key] = self::mergeArraysRecursively($a[$key], $value); } else { $a[$key] = $value; } } else { $a[$key] = $value; } } return $a; } } PK!q50çdçdkfile-manager-advanced/application/svg-sanitizer/includes/phpunit/phpunit/src/Framework/Assert/Functions.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ use PHPUnit\Framework\Assert; use PHPUnit\Framework\AssertionFailedError; use PHPUnit\Framework\Constraint\ArrayHasKey; use PHPUnit\Framework\Constraint\Attribute; use PHPUnit\Framework\Constraint\Callback; use PHPUnit\Framework\Constraint\ClassHasAttribute; use PHPUnit\Framework\Constraint\ClassHasStaticAttribute; use PHPUnit\Framework\Constraint\Constraint; use PHPUnit\Framework\Constraint\Count; use PHPUnit\Framework\Constraint\DirectoryExists; use PHPUnit\Framework\Constraint\FileExists; use PHPUnit\Framework\Constraint\GreaterThan; use PHPUnit\Framework\Constraint\IsAnything; use PHPUnit\Framework\Constraint\IsEmpty; use PHPUnit\Framework\Constraint\IsEqual; use PHPUnit\Framework\Constraint\IsFalse; use PHPUnit\Framework\Constraint\IsFinite; use PHPUnit\Framework\Constraint\IsIdentical; use PHPUnit\Framework\Constraint\IsInfinite; use PHPUnit\Framework\Constraint\IsInstanceOf; use PHPUnit\Framework\Constraint\IsJson; use PHPUnit\Framework\Constraint\IsNan; use PHPUnit\Framework\Constraint\IsNull; use PHPUnit\Framework\Constraint\IsReadable; use PHPUnit\Framework\Constraint\IsTrue; use PHPUnit\Framework\Constraint\IsType; use PHPUnit\Framework\Constraint\IsWritable; use PHPUnit\Framework\Constraint\LessThan; use PHPUnit\Framework\Constraint\LogicalAnd; use PHPUnit\Framework\Constraint\LogicalNot; use PHPUnit\Framework\Constraint\LogicalOr; use PHPUnit\Framework\Constraint\LogicalXor; use PHPUnit\Framework\Constraint\ObjectHasAttribute; use PHPUnit\Framework\Constraint\RegularExpression; use PHPUnit\Framework\Constraint\StringContains; use PHPUnit\Framework\Constraint\StringEndsWith; use PHPUnit\Framework\Constraint\StringMatchesFormatDescription; use PHPUnit\Framework\Constraint\StringStartsWith; use PHPUnit\Framework\Constraint\TraversableContains; use PHPUnit\Framework\Constraint\TraversableContainsEqual; use PHPUnit\Framework\Constraint\TraversableContainsIdentical; use PHPUnit\Framework\Constraint\TraversableContainsOnly; use PHPUnit\Framework\ExpectationFailedException; use PHPUnit\Framework\MockObject\Rule\AnyInvokedCount as AnyInvokedCountMatcher; use PHPUnit\Framework\MockObject\Rule\InvokedAtIndex as InvokedAtIndexMatcher; use PHPUnit\Framework\MockObject\Rule\InvokedAtLeastCount as InvokedAtLeastCountMatcher; use PHPUnit\Framework\MockObject\Rule\InvokedAtLeastOnce as InvokedAtLeastOnceMatcher; use PHPUnit\Framework\MockObject\Rule\InvokedAtMostCount as InvokedAtMostCountMatcher; use PHPUnit\Framework\MockObject\Rule\InvokedCount as InvokedCountMatcher; use PHPUnit\Framework\MockObject\Stub\ConsecutiveCalls as ConsecutiveCallsStub; use PHPUnit\Framework\MockObject\Stub\Exception as ExceptionStub; use PHPUnit\Framework\MockObject\Stub\ReturnArgument as ReturnArgumentStub; use PHPUnit\Framework\MockObject\Stub\ReturnCallback as ReturnCallbackStub; use PHPUnit\Framework\MockObject\Stub\ReturnSelf as ReturnSelfStub; use PHPUnit\Framework\MockObject\Stub\ReturnStub; use PHPUnit\Framework\MockObject\Stub\ReturnValueMap as ReturnValueMapStub; use SebastianBergmann\RecursionContext\InvalidArgumentException; if (!\function_exists('PHPUnit\Framework\assertArrayHasKey')) { /** * Asserts that an array has a specified key. * * @param int|string $key * @param array|ArrayAccess $array * * @throws InvalidArgumentException * @throws Exception * @throws ExpectationFailedException * * @see Assert::assertArrayHasKey */ function assertArrayHasKey($key, $array, string $message = ''): void { Assert::assertArrayHasKey(...\func_get_args()); } } if (!\function_exists('PHPUnit\Framework\assertArraySubset')) { /** * Asserts that an array has a specified subset. * * @param array|ArrayAccess $subset * @param array|ArrayAccess $array * * @throws InvalidArgumentException * @throws Exception * @throws ExpectationFailedException * * @codeCoverageIgnore * * @deprecated https://github.com/sebastianbergmann/phpunit/issues/3494 * @see Assert::assertArraySubset */ function assertArraySubset($subset, $array, bool $checkForObjectIdentity = false, string $message = ''): void { Assert::assertArraySubset(...\func_get_args()); } } if (!\function_exists('PHPUnit\Framework\assertArrayNotHasKey')) { /** * Asserts that an array does not have a specified key. * * @param int|string $key * @param array|ArrayAccess $array * * @throws InvalidArgumentException * @throws Exception * @throws ExpectationFailedException * * @see Assert::assertArrayNotHasKey */ function assertArrayNotHasKey($key, $array, string $message = ''): void { Assert::assertArrayNotHasKey(...\func_get_args()); } } if (!\function_exists('PHPUnit\Framework\assertContains')) { /** * Asserts that a haystack contains a needle. * * @throws InvalidArgumentException * @throws Exception * @throws ExpectationFailedException * * @see Assert::assertContains */ function assertContains($needle, $haystack, string $message = '', bool $ignoreCase = false, bool $checkForObjectIdentity = true, bool $checkForNonObjectIdentity = false): void { Assert::assertContains(...\func_get_args()); } } if (!\function_exists('PHPUnit\Framework\assertContainsEquals')) { function assertContainsEquals($needle, iterable $haystack, string $message = ''): void { Assert::assertContainsEquals(...\func_get_args()); } } if (!\function_exists('PHPUnit\Framework\assertAttributeContains')) { /** * Asserts that a haystack that is stored in a static attribute of a class * or an attribute of an object contains a needle. * * @param object|string $haystackClassOrObject * * @throws InvalidArgumentException * @throws Exception * @throws ExpectationFailedException * * @deprecated https://github.com/sebastianbergmann/phpunit/issues/3338 * * @codeCoverageIgnore * * @see Assert::assertAttributeContains */ function assertAttributeContains($needle, string $haystackAttributeName, $haystackClassOrObject, string $message = '', bool $ignoreCase = false, bool $checkForObjectIdentity = true, bool $checkForNonObjectIdentity = false): void { Assert::assertAttributeContains(...\func_get_args()); } } if (!\function_exists('PHPUnit\Framework\assertNotContains')) { /** * Asserts that a haystack does not contain a needle. * * @throws InvalidArgumentException * @throws Exception * @throws ExpectationFailedException * * @see Assert::assertNotContains */ function assertNotContains($needle, $haystack, string $message = '', bool $ignoreCase = false, bool $checkForObjectIdentity = true, bool $checkForNonObjectIdentity = false): void { Assert::assertNotContains(...\func_get_args()); } } if (!\function_exists('PHPUnit\Framework\assertNotContainsEquals')) { function assertNotContainsEquals($needle, iterable $haystack, string $message = ''): void { Assert::assertNotContainsEquals(...\func_get_args()); } } if (!\function_exists('PHPUnit\Framework\assertAttributeNotContains')) { /** * Asserts that a haystack that is stored in a static attribute of a class * or an attribute of an object does not contain a needle. * * @param object|string $haystackClassOrObject * * @throws InvalidArgumentException * @throws Exception * @throws ExpectationFailedException * * @deprecated https://github.com/sebastianbergmann/phpunit/issues/3338 * * @codeCoverageIgnore * * @see Assert::assertAttributeNotContains */ function assertAttributeNotContains($needle, string $haystackAttributeName, $haystackClassOrObject, string $message = '', bool $ignoreCase = false, bool $checkForObjectIdentity = true, bool $checkForNonObjectIdentity = false): void { Assert::assertAttributeNotContains(...\func_get_args()); } } if (!\function_exists('PHPUnit\Framework\assertContainsOnly')) { /** * Asserts that a haystack contains only values of a given type. * * @throws InvalidArgumentException * @throws ExpectationFailedException * * @see Assert::assertContainsOnly */ function assertContainsOnly(string $type, iterable $haystack, ?bool $isNativeType = null, string $message = ''): void { Assert::assertContainsOnly(...\func_get_args()); } } if (!\function_exists('PHPUnit\Framework\assertContainsOnlyInstancesOf')) { /** * Asserts that a haystack contains only instances of a given class name. * * @throws InvalidArgumentException * @throws ExpectationFailedException * * @see Assert::assertContainsOnlyInstancesOf */ function assertContainsOnlyInstancesOf(string $className, iterable $haystack, string $message = ''): void { Assert::assertContainsOnlyInstancesOf(...\func_get_args()); } } if (!\function_exists('PHPUnit\Framework\assertAttributeContainsOnly')) { /** * Asserts that a haystack that is stored in a static attribute of a class * or an attribute of an object contains only values of a given type. * * @param object|string $haystackClassOrObject * * @throws InvalidArgumentException * @throws Exception * @throws ExpectationFailedException * * @deprecated https://github.com/sebastianbergmann/phpunit/issues/3338 * * @codeCoverageIgnore * * @see Assert::assertAttributeContainsOnly */ function assertAttributeContainsOnly(string $type, string $haystackAttributeName, $haystackClassOrObject, ?bool $isNativeType = null, string $message = ''): void { Assert::assertAttributeContainsOnly(...\func_get_args()); } } if (!\function_exists('PHPUnit\Framework\assertNotContainsOnly')) { /** * Asserts that a haystack does not contain only values of a given type. * * @throws InvalidArgumentException * @throws ExpectationFailedException * * @see Assert::assertNotContainsOnly */ function assertNotContainsOnly(string $type, iterable $haystack, ?bool $isNativeType = null, string $message = ''): void { Assert::assertNotContainsOnly(...\func_get_args()); } } if (!\function_exists('PHPUnit\Framework\assertAttributeNotContainsOnly')) { /** * Asserts that a haystack that is stored in a static attribute of a class * or an attribute of an object does not contain only values of a given * type. * * @param object|string $haystackClassOrObject * * @throws InvalidArgumentException * @throws Exception * @throws ExpectationFailedException * * @deprecated https://github.com/sebastianbergmann/phpunit/issues/3338 * * @codeCoverageIgnore * * @see Assert::assertAttributeNotContainsOnly */ function assertAttributeNotContainsOnly(string $type, string $haystackAttributeName, $haystackClassOrObject, ?bool $isNativeType = null, string $message = ''): void { Assert::assertAttributeNotContainsOnly(...\func_get_args()); } } if (!\function_exists('PHPUnit\Framework\assertCount')) { /** * Asserts the number of elements of an array, Countable or Traversable. * * @param Countable|iterable $haystack * * @throws InvalidArgumentException * @throws Exception * @throws ExpectationFailedException * * @see Assert::assertCount */ function assertCount(int $expectedCount, $haystack, string $message = ''): void { Assert::assertCount(...\func_get_args()); } } if (!\function_exists('PHPUnit\Framework\assertAttributeCount')) { /** * Asserts the number of elements of an array, Countable or Traversable * that is stored in an attribute. * * @param object|string $haystackClassOrObject * * @throws InvalidArgumentException * @throws Exception * @throws ExpectationFailedException * * @deprecated https://github.com/sebastianbergmann/phpunit/issues/3338 * * @codeCoverageIgnore * * @see Assert::assertAttributeCount */ function assertAttributeCount(int $expectedCount, string $haystackAttributeName, $haystackClassOrObject, string $message = ''): void { Assert::assertAttributeCount(...\func_get_args()); } } if (!\function_exists('PHPUnit\Framework\assertNotCount')) { /** * Asserts the number of elements of an array, Countable or Traversable. * * @param Countable|iterable $haystack * * @throws InvalidArgumentException * @throws Exception * @throws ExpectationFailedException * * @see Assert::assertNotCount */ function assertNotCount(int $expectedCount, $haystack, string $message = ''): void { Assert::assertNotCount(...\func_get_args()); } } if (!\function_exists('PHPUnit\Framework\assertAttributeNotCount')) { /** * Asserts the number of elements of an array, Countable or Traversable * that is stored in an attribute. * * @param object|string $haystackClassOrObject * * @throws InvalidArgumentException * @throws Exception * @throws ExpectationFailedException * * @deprecated https://github.com/sebastianbergmann/phpunit/issues/3338 * * @codeCoverageIgnore * * @see Assert::assertAttributeNotCount */ function assertAttributeNotCount(int $expectedCount, string $haystackAttributeName, $haystackClassOrObject, string $message = ''): void { Assert::assertAttributeNotCount(...\func_get_args()); } } if (!\function_exists('PHPUnit\Framework\assertEquals')) { /** * Asserts that two variables are equal. * * @throws InvalidArgumentException * @throws ExpectationFailedException * * @see Assert::assertEquals */ function assertEquals($expected, $actual, string $message = '', float $delta = 0.0, int $maxDepth = 10, bool $canonicalize = false, bool $ignoreCase = false): void { Assert::assertEquals(...\func_get_args()); } } if (!\function_exists('PHPUnit\Framework\assertEqualsCanonicalizing')) { /** * Asserts that two variables are equal (canonicalizing). * * @throws InvalidArgumentException * @throws ExpectationFailedException * * @see Assert::assertEqualsCanonicalizing */ function assertEqualsCanonicalizing($expected, $actual, string $message = ''): void { Assert::assertEqualsCanonicalizing(...\func_get_args()); } } if (!\function_exists('PHPUnit\Framework\assertEqualsIgnoringCase')) { /** * Asserts that two variables are equal (ignoring case). * * @throws InvalidArgumentException * @throws ExpectationFailedException * * @see Assert::assertEqualsIgnoringCase */ function assertEqualsIgnoringCase($expected, $actual, string $message = ''): void { Assert::assertEqualsIgnoringCase(...\func_get_args()); } } if (!\function_exists('PHPUnit\Framework\assertEqualsWithDelta')) { /** * Asserts that two variables are equal (with delta). * * @throws InvalidArgumentException * @throws ExpectationFailedException * * @see Assert::assertEqualsWithDelta */ function assertEqualsWithDelta($expected, $actual, float $delta, string $message = ''): void { Assert::assertEqualsWithDelta(...\func_get_args()); } } if (!\function_exists('PHPUnit\Framework\assertAttributeEquals')) { /** * Asserts that a variable is equal to an attribute of an object. * * @param object|string $actualClassOrObject * * @throws InvalidArgumentException * @throws Exception * @throws ExpectationFailedException * * @deprecated https://github.com/sebastianbergmann/phpunit/issues/3338 * * @codeCoverageIgnore * * @see Assert::assertAttributeEquals */ function assertAttributeEquals($expected, string $actualAttributeName, $actualClassOrObject, string $message = '', float $delta = 0.0, int $maxDepth = 10, bool $canonicalize = false, bool $ignoreCase = false): void { Assert::assertAttributeEquals(...\func_get_args()); } } if (!\function_exists('PHPUnit\Framework\assertNotEquals')) { /** * Asserts that two variables are not equal. * * @param float $delta * @param int $maxDepth * @param bool $canonicalize * @param bool $ignoreCase * * @throws InvalidArgumentException * @throws ExpectationFailedException * * @see Assert::assertNotEquals */ function assertNotEquals($expected, $actual, string $message = '', $delta = 0.0, $maxDepth = 10, $canonicalize = false, $ignoreCase = false): void { Assert::assertNotEquals(...\func_get_args()); } } if (!\function_exists('PHPUnit\Framework\assertNotEqualsCanonicalizing')) { /** * Asserts that two variables are not equal (canonicalizing). * * @throws InvalidArgumentException * @throws ExpectationFailedException * * @see Assert::assertNotEqualsCanonicalizing */ function assertNotEqualsCanonicalizing($expected, $actual, string $message = ''): void { Assert::assertNotEqualsCanonicalizing(...\func_get_args()); } } if (!\function_exists('PHPUnit\Framework\assertNotEqualsIgnoringCase')) { /** * Asserts that two variables are not equal (ignoring case). * * @throws InvalidArgumentException * @throws ExpectationFailedException * * @see Assert::assertNotEqualsIgnoringCase */ function assertNotEqualsIgnoringCase($expected, $actual, string $message = ''): void { Assert::assertNotEqualsIgnoringCase(...\func_get_args()); } } if (!\function_exists('PHPUnit\Framework\assertNotEqualsWithDelta')) { /** * Asserts that two variables are not equal (with delta). * * @throws InvalidArgumentException * @throws ExpectationFailedException * * @see Assert::assertNotEqualsWithDelta */ function assertNotEqualsWithDelta($expected, $actual, float $delta, string $message = ''): void { Assert::assertNotEqualsWithDelta(...\func_get_args()); } } if (!\function_exists('PHPUnit\Framework\assertAttributeNotEquals')) { /** * Asserts that a variable is not equal to an attribute of an object. * * @param object|string $actualClassOrObject * * @throws InvalidArgumentException * @throws Exception * @throws ExpectationFailedException * * @deprecated https://github.com/sebastianbergmann/phpunit/issues/3338 * * @codeCoverageIgnore * * @see Assert::assertAttributeNotEquals */ function assertAttributeNotEquals($expected, string $actualAttributeName, $actualClassOrObject, string $message = '', float $delta = 0.0, int $maxDepth = 10, bool $canonicalize = false, bool $ignoreCase = false): void { Assert::assertAttributeNotEquals(...\func_get_args()); } } if (!\function_exists('PHPUnit\Framework\assertEmpty')) { /** * Asserts that a variable is empty. * * @throws InvalidArgumentException * @throws ExpectationFailedException * * @psalm-assert empty $actual * * @see Assert::assertEmpty */ function assertEmpty($actual, string $message = ''): void { Assert::assertEmpty(...\func_get_args()); } } if (!\function_exists('PHPUnit\Framework\assertAttributeEmpty')) { /** * Asserts that a static attribute of a class or an attribute of an object * is empty. * * @param object|string $haystackClassOrObject * * @throws InvalidArgumentException * @throws Exception * @throws ExpectationFailedException * * @deprecated https://github.com/sebastianbergmann/phpunit/issues/3338 * * @codeCoverageIgnore * * @see Assert::assertAttributeEmpty */ function assertAttributeEmpty(string $haystackAttributeName, $haystackClassOrObject, string $message = ''): void { Assert::assertAttributeEmpty(...\func_get_args()); } } if (!\function_exists('PHPUnit\Framework\assertNotEmpty')) { /** * Asserts that a variable is not empty. * * @throws InvalidArgumentException * @throws ExpectationFailedException * * @psalm-assert !empty $actual * * @see Assert::assertNotEmpty */ function assertNotEmpty($actual, string $message = ''): void { Assert::assertNotEmpty(...\func_get_args()); } } if (!\function_exists('PHPUnit\Framework\assertAttributeNotEmpty')) { /** * Asserts that a static attribute of a class or an attribute of an object * is not empty. * * @param object|string $haystackClassOrObject * * @throws InvalidArgumentException * @throws Exception * @throws ExpectationFailedException * * @deprecated https://github.com/sebastianbergmann/phpunit/issues/3338 * * @codeCoverageIgnore * * @see Assert::assertAttributeNotEmpty */ function assertAttributeNotEmpty(string $haystackAttributeName, $haystackClassOrObject, string $message = ''): void { Assert::assertAttributeNotEmpty(...\func_get_args()); } } if (!\function_exists('PHPUnit\Framework\assertGreaterThan')) { /** * Asserts that a value is greater than another value. * * @throws InvalidArgumentException * @throws ExpectationFailedException * * @see Assert::assertGreaterThan */ function assertGreaterThan($expected, $actual, string $message = ''): void { Assert::assertGreaterThan(...\func_get_args()); } } if (!\function_exists('PHPUnit\Framework\assertAttributeGreaterThan')) { /** * Asserts that an attribute is greater than another value. * * @param object|string $actualClassOrObject * * @throws InvalidArgumentException * @throws Exception * @throws ExpectationFailedException * * @deprecated https://github.com/sebastianbergmann/phpunit/issues/3338 * * @codeCoverageIgnore * * @see Assert::assertAttributeGreaterThan */ function assertAttributeGreaterThan($expected, string $actualAttributeName, $actualClassOrObject, string $message = ''): void { Assert::assertAttributeGreaterThan(...\func_get_args()); } } if (!\function_exists('PHPUnit\Framework\assertGreaterThanOrEqual')) { /** * Asserts that a value is greater than or equal to another value. * * @throws InvalidArgumentException * @throws ExpectationFailedException * * @see Assert::assertGreaterThanOrEqual */ function assertGreaterThanOrEqual($expected, $actual, string $message = ''): void { Assert::assertGreaterThanOrEqual(...\func_get_args()); } } if (!\function_exists('PHPUnit\Framework\assertAttributeGreaterThanOrEqual')) { /** * Asserts that an attribute is greater than or equal to another value. * * @param object|string $actualClassOrObject * * @throws InvalidArgumentException * @throws Exception * @throws ExpectationFailedException * * @deprecated https://github.com/sebastianbergmann/phpunit/issues/3338 * * @codeCoverageIgnore * * @see Assert::assertAttributeGreaterThanOrEqual */ function assertAttributeGreaterThanOrEqual($expected, string $actualAttributeName, $actualClassOrObject, string $message = ''): void { Assert::assertAttributeGreaterThanOrEqual(...\func_get_args()); } } if (!\function_exists('PHPUnit\Framework\assertLessThan')) { /** * Asserts that a value is smaller than another value. * * @throws InvalidArgumentException * @throws ExpectationFailedException * * @see Assert::assertLessThan */ function assertLessThan($expected, $actual, string $message = ''): void { Assert::assertLessThan(...\func_get_args()); } } if (!\function_exists('PHPUnit\Framework\assertAttributeLessThan')) { /** * Asserts that an attribute is smaller than another value. * * @param object|string $actualClassOrObject * * @throws InvalidArgumentException * @throws Exception * @throws ExpectationFailedException * * @deprecated https://github.com/sebastianbergmann/phpunit/issues/3338 * * @codeCoverageIgnore * * @see Assert::assertAttributeLessThan */ function assertAttributeLessThan($expected, string $actualAttributeName, $actualClassOrObject, string $message = ''): void { Assert::assertAttributeLessThan(...\func_get_args()); } } if (!\function_exists('PHPUnit\Framework\assertLessThanOrEqual')) { /** * Asserts that a value is smaller than or equal to another value. * * @throws InvalidArgumentException * @throws ExpectationFailedException * * @see Assert::assertLessThanOrEqual */ function assertLessThanOrEqual($expected, $actual, string $message = ''): void { Assert::assertLessThanOrEqual(...\func_get_args()); } } if (!\function_exists('PHPUnit\Framework\assertAttributeLessThanOrEqual')) { /** * Asserts that an attribute is smaller than or equal to another value. * * @param object|string $actualClassOrObject * * @throws InvalidArgumentException * @throws Exception * @throws ExpectationFailedException * * @deprecated https://github.com/sebastianbergmann/phpunit/issues/3338 * * @codeCoverageIgnore * * @see Assert::assertAttributeLessThanOrEqual */ function assertAttributeLessThanOrEqual($expected, string $actualAttributeName, $actualClassOrObject, string $message = ''): void { Assert::assertAttributeLessThanOrEqual(...\func_get_args()); } } if (!\function_exists('PHPUnit\Framework\assertFileEquals')) { /** * Asserts that the contents of one file is equal to the contents of another * file. * * @throws InvalidArgumentException * @throws ExpectationFailedException * * @see Assert::assertFileEquals */ function assertFileEquals(string $expected, string $actual, string $message = '', bool $canonicalize = false, bool $ignoreCase = false): void { Assert::assertFileEquals(...\func_get_args()); } } if (!\function_exists('PHPUnit\Framework\assertFileEqualsCanonicalizing')) { /** * Asserts that the contents of one file is equal to the contents of another * file (canonicalizing). * * @throws InvalidArgumentException * @throws ExpectationFailedException * * @see Assert::assertFileEqualsCanonicalizing */ function assertFileEqualsCanonicalizing(string $expected, string $actual, string $message = ''): void { Assert::assertFileEqualsCanonicalizing(...\func_get_args()); } } if (!\function_exists('PHPUnit\Framework\assertFileEqualsIgnoringCase')) { /** * Asserts that the contents of one file is equal to the contents of another * file (ignoring case). * * @throws InvalidArgumentException * @throws ExpectationFailedException * * @see Assert::assertFileEqualsIgnoringCase */ function assertFileEqualsIgnoringCase(string $expected, string $actual, string $message = ''): void { Assert::assertFileEqualsIgnoringCase(...\func_get_args()); } } if (!\function_exists('PHPUnit\Framework\assertFileNotEquals')) { /** * Asserts that the contents of one file is not equal to the contents of * another file. * * @throws InvalidArgumentException * @throws ExpectationFailedException * * @see Assert::assertFileNotEquals */ function assertFileNotEquals(string $expected, string $actual, string $message = '', bool $canonicalize = false, bool $ignoreCase = false): void { Assert::assertFileNotEquals(...\func_get_args()); } } if (!\function_exists('PHPUnit\Framework\assertFileNotEqualsCanonicalizing')) { /** * Asserts that the contents of one file is not equal to the contents of another * file (canonicalizing). * * @throws InvalidArgumentException * @throws ExpectationFailedException * * @see Assert::assertFileNotEqualsCanonicalizing */ function assertFileNotEqualsCanonicalizing(string $expected, string $actual, string $message = ''): void { Assert::assertFileNotEqualsCanonicalizing(...\func_get_args()); } } if (!\function_exists('PHPUnit\Framework\assertFileNotEqualsIgnoringCase')) { /** * Asserts that the contents of one file is not equal to the contents of another * file (ignoring case). * * @throws InvalidArgumentException * @throws ExpectationFailedException * * @see Assert::assertFileNotEqualsIgnoringCase */ function assertFileNotEqualsIgnoringCase(string $expected, string $actual, string $message = ''): void { Assert::assertFileNotEqualsIgnoringCase(...\func_get_args()); } } if (!\function_exists('PHPUnit\Framework\assertStringEqualsFile')) { /** * Asserts that the contents of a string is equal * to the contents of a file. * * @throws InvalidArgumentException * @throws ExpectationFailedException * * @see Assert::assertStringEqualsFile */ function assertStringEqualsFile(string $expectedFile, string $actualString, string $message = '', bool $canonicalize = false, bool $ignoreCase = false): void { Assert::assertStringEqualsFile(...\func_get_args()); } } if (!\function_exists('PHPUnit\Framework\assertStringEqualsFileCanonicalizing')) { /** * Asserts that the contents of a string is equal * to the contents of a file (canonicalizing). * * @throws InvalidArgumentException * @throws ExpectationFailedException * * @see Assert::assertStringEqualsFileCanonicalizing */ function assertStringEqualsFileCanonicalizing(string $expectedFile, string $actualString, string $message = ''): void { Assert::assertStringEqualsFileCanonicalizing(...\func_get_args()); } } if (!\function_exists('PHPUnit\Framework\assertStringEqualsFileIgnoringCase')) { /** * Asserts that the contents of a string is equal * to the contents of a file (ignoring case). * * @throws InvalidArgumentException * @throws ExpectationFailedException * * @see Assert::assertStringEqualsFileIgnoringCase */ function assertStringEqualsFileIgnoringCase(string $expectedFile, string $actualString, string $message = ''): void { Assert::assertStringEqualsFileIgnoringCase(...\func_get_args()); } } if (!\function_exists('PHPUnit\Framework\assertStringNotEqualsFile')) { /** * Asserts that the contents of a string is not equal * to the contents of a file. * * @throws InvalidArgumentException * @throws ExpectationFailedException * * @see Assert::assertStringNotEqualsFile */ function assertStringNotEqualsFile(string $expectedFile, string $actualString, string $message = '', bool $canonicalize = false, bool $ignoreCase = false): void { Assert::assertStringNotEqualsFile(...\func_get_args()); } } if (!\function_exists('PHPUnit\Framework\assertStringNotEqualsFileCanonicalizing')) { /** * Asserts that the contents of a string is not equal * to the contents of a file (canonicalizing). * * @throws InvalidArgumentException * @throws ExpectationFailedException * * @see Assert::assertStringNotEqualsFileCanonicalizing */ function assertStringNotEqualsFileCanonicalizing(string $expectedFile, string $actualString, string $message = ''): void { Assert::assertStringNotEqualsFileCanonicalizing(...\func_get_args()); } } if (!\function_exists('PHPUnit\Framework\assertStringNotEqualsFileIgnoringCase')) { /** * Asserts that the contents of a string is not equal * to the contents of a file (ignoring case). * * @throws InvalidArgumentException * @throws ExpectationFailedException * * @see Assert::assertStringNotEqualsFileIgnoringCase */ function assertStringNotEqualsFileIgnoringCase(string $expectedFile, string $actualString, string $message = ''): void { Assert::assertStringNotEqualsFileIgnoringCase(...\func_get_args()); } } if (!\function_exists('PHPUnit\Framework\assertIsReadable')) { /** * Asserts that a file/dir is readable. * * @throws InvalidArgumentException * @throws ExpectationFailedException * * @see Assert::assertIsReadable */ function assertIsReadable(string $filename, string $message = ''): void { Assert::assertIsReadable(...\func_get_args()); } } if (!\function_exists('PHPUnit\Framework\assertNotIsReadable')) { /** * Asserts that a file/dir exists and is not readable. * * @throws InvalidArgumentException * @throws ExpectationFailedException * * @see Assert::assertNotIsReadable */ function assertNotIsReadable(string $filename, string $message = ''): void { Assert::assertNotIsReadable(...\func_get_args()); } } if (!\function_exists('PHPUnit\Framework\assertIsWritable')) { /** * Asserts that a file/dir exists and is writable. * * @throws InvalidArgumentException * @throws ExpectationFailedException * * @see Assert::assertIsWritable */ function assertIsWritable(string $filename, string $message = ''): void { Assert::assertIsWritable(...\func_get_args()); } } if (!\function_exists('PHPUnit\Framework\assertNotIsWritable')) { /** * Asserts that a file/dir exists and is not writable. * * @throws InvalidArgumentException * @throws ExpectationFailedException * * @see Assert::assertNotIsWritable */ function assertNotIsWritable(string $filename, string $message = ''): void { Assert::assertNotIsWritable(...\func_get_args()); } } if (!\function_exists('PHPUnit\Framework\assertDirectoryExists')) { /** * Asserts that a directory exists. * * @throws InvalidArgumentException * @throws ExpectationFailedException * * @see Assert::assertDirectoryExists */ function assertDirectoryExists(string $directory, string $message = ''): void { Assert::assertDirectoryExists(...\func_get_args()); } } if (!\function_exists('PHPUnit\Framework\assertDirectoryNotExists')) { /** * Asserts that a directory does not exist. * * @throws InvalidArgumentException * @throws ExpectationFailedException * * @see Assert::assertDirectoryNotExists */ function assertDirectoryNotExists(string $directory, string $message = ''): void { Assert::assertDirectoryNotExists(...\func_get_args()); } } if (!\function_exists('PHPUnit\Framework\assertDirectoryIsReadable')) { /** * Asserts that a directory exists and is readable. * * @throws InvalidArgumentException * @throws ExpectationFailedException * * @see Assert::assertDirectoryIsReadable */ function assertDirectoryIsReadable(string $directory, string $message = ''): void { Assert::assertDirectoryIsReadable(...\func_get_args()); } } if (!\function_exists('PHPUnit\Framework\assertDirectoryNotIsReadable')) { /** * Asserts that a directory exists and is not readable. * * @throws InvalidArgumentException * @throws ExpectationFailedException * * @see Assert::assertDirectoryNotIsReadable */ function assertDirectoryNotIsReadable(string $directory, string $message = ''): void { Assert::assertDirectoryNotIsReadable(...\func_get_args()); } } if (!\function_exists('PHPUnit\Framework\assertDirectoryIsWritable')) { /** * Asserts that a directory exists and is writable. * * @throws InvalidArgumentException * @throws ExpectationFailedException * * @see Assert::assertDirectoryIsWritable */ function assertDirectoryIsWritable(string $directory, string $message = ''): void { Assert::assertDirectoryIsWritable(...\func_get_args()); } } if (!\function_exists('PHPUnit\Framework\assertDirectoryNotIsWritable')) { /** * Asserts that a directory exists and is not writable. * * @throws InvalidArgumentException * @throws ExpectationFailedException * * @see Assert::assertDirectoryNotIsWritable */ function assertDirectoryNotIsWritable(string $directory, string $message = ''): void { Assert::assertDirectoryNotIsWritable(...\func_get_args()); } } if (!\function_exists('PHPUnit\Framework\assertFileExists')) { /** * Asserts that a file exists. * * @throws InvalidArgumentException * @throws ExpectationFailedException * * @see Assert::assertFileExists */ function assertFileExists(string $filename, string $message = ''): void { Assert::assertFileExists(...\func_get_args()); } } if (!\function_exists('PHPUnit\Framework\assertFileNotExists')) { /** * Asserts that a file does not exist. * * @throws InvalidArgumentException * @throws ExpectationFailedException * * @see Assert::assertFileNotExists */ function assertFileNotExists(string $filename, string $message = ''): void { Assert::assertFileNotExists(...\func_get_args()); } } if (!\function_exists('PHPUnit\Framework\assertFileIsReadable')) { /** * Asserts that a file exists and is readable. * * @throws InvalidArgumentException * @throws ExpectationFailedException * * @see Assert::assertFileIsReadable */ function assertFileIsReadable(string $file, string $message = ''): void { Assert::assertFileIsReadable(...\func_get_args()); } } if (!\function_exists('PHPUnit\Framework\assertFileNotIsReadable')) { /** * Asserts that a file exists and is not readable. * * @throws InvalidArgumentException * @throws ExpectationFailedException * * @see Assert::assertFileNotIsReadable */ function assertFileNotIsReadable(string $file, string $message = ''): void { Assert::assertFileNotIsReadable(...\func_get_args()); } } if (!\function_exists('PHPUnit\Framework\assertFileIsWritable')) { /** * Asserts that a file exists and is writable. * * @throws InvalidArgumentException * @throws ExpectationFailedException * * @see Assert::assertFileIsWritable */ function assertFileIsWritable(string $file, string $message = ''): void { Assert::assertFileIsWritable(...\func_get_args()); } } if (!\function_exists('PHPUnit\Framework\assertFileNotIsWritable')) { /** * Asserts that a file exists and is not writable. * * @throws InvalidArgumentException * @throws ExpectationFailedException * * @see Assert::assertFileNotIsWritable */ function assertFileNotIsWritable(string $file, string $message = ''): void { Assert::assertFileNotIsWritable(...\func_get_args()); } } if (!\function_exists('PHPUnit\Framework\assertTrue')) { /** * Asserts that a condition is true. * * @throws InvalidArgumentException * @throws ExpectationFailedException * * @psalm-assert true $condition * * @see Assert::assertTrue */ function assertTrue($condition, string $message = ''): void { Assert::assertTrue(...\func_get_args()); } } if (!\function_exists('PHPUnit\Framework\assertNotTrue')) { /** * Asserts that a condition is not true. * * @throws InvalidArgumentException * @throws ExpectationFailedException * * @psalm-assert !true $condition * * @see Assert::assertNotTrue */ function assertNotTrue($condition, string $message = ''): void { Assert::assertNotTrue(...\func_get_args()); } } if (!\function_exists('PHPUnit\Framework\assertFalse')) { /** * Asserts that a condition is false. * * @throws InvalidArgumentException * @throws ExpectationFailedException * * @psalm-assert false $condition * * @see Assert::assertFalse */ function assertFalse($condition, string $message = ''): void { Assert::assertFalse(...\func_get_args()); } } if (!\function_exists('PHPUnit\Framework\assertNotFalse')) { /** * Asserts that a condition is not false. * * @throws InvalidArgumentException * @throws ExpectationFailedException * * @psalm-assert !false $condition * * @see Assert::assertNotFalse */ function assertNotFalse($condition, string $message = ''): void { Assert::assertNotFalse(...\func_get_args()); } } if (!\function_exists('PHPUnit\Framework\assertNull')) { /** * Asserts that a variable is null. * * @throws InvalidArgumentException * @throws ExpectationFailedException * * @psalm-assert null $actual * * @see Assert::assertNull */ function assertNull($actual, string $message = ''): void { Assert::assertNull(...\func_get_args()); } } if (!\function_exists('PHPUnit\Framework\assertNotNull')) { /** * Asserts that a variable is not null. * * @throws InvalidArgumentException * @throws ExpectationFailedException * * @psalm-assert !null $actual * * @see Assert::assertNotNull */ function assertNotNull($actual, string $message = ''): void { Assert::assertNotNull(...\func_get_args()); } } if (!\function_exists('PHPUnit\Framework\assertFinite')) { /** * Asserts that a variable is finite. * * @throws InvalidArgumentException * @throws ExpectationFailedException * * @see Assert::assertFinite */ function assertFinite($actual, string $message = ''): void { Assert::assertFinite(...\func_get_args()); } } if (!\function_exists('PHPUnit\Framework\assertInfinite')) { /** * Asserts that a variable is infinite. * * @throws InvalidArgumentException * @throws ExpectationFailedException * * @see Assert::assertInfinite */ function assertInfinite($actual, string $message = ''): void { Assert::assertInfinite(...\func_get_args()); } } if (!\function_exists('PHPUnit\Framework\assertNan')) { /** * Asserts that a variable is nan. * * @throws InvalidArgumentException * @throws ExpectationFailedException * * @see Assert::assertNan */ function assertNan($actual, string $message = ''): void { Assert::assertNan(...\func_get_args()); } } if (!\function_exists('PHPUnit\Framework\assertClassHasAttribute')) { /** * Asserts that a class has a specified attribute. * * @throws InvalidArgumentException * @throws Exception * @throws ExpectationFailedException * * @see Assert::assertClassHasAttribute */ function assertClassHasAttribute(string $attributeName, string $className, string $message = ''): void { Assert::assertClassHasAttribute(...\func_get_args()); } } if (!\function_exists('PHPUnit\Framework\assertClassNotHasAttribute')) { /** * Asserts that a class does not have a specified attribute. * * @throws InvalidArgumentException * @throws Exception * @throws ExpectationFailedException * * @see Assert::assertClassNotHasAttribute */ function assertClassNotHasAttribute(string $attributeName, string $className, string $message = ''): void { Assert::assertClassNotHasAttribute(...\func_get_args()); } } if (!\function_exists('PHPUnit\Framework\assertClassHasStaticAttribute')) { /** * Asserts that a class has a specified static attribute. * * @throws InvalidArgumentException * @throws Exception * @throws ExpectationFailedException * * @see Assert::assertClassHasStaticAttribute */ function assertClassHasStaticAttribute(string $attributeName, string $className, string $message = ''): void { Assert::assertClassHasStaticAttribute(...\func_get_args()); } } if (!\function_exists('PHPUnit\Framework\assertClassNotHasStaticAttribute')) { /** * Asserts that a class does not have a specified static attribute. * * @throws InvalidArgumentException * @throws Exception * @throws ExpectationFailedException * * @see Assert::assertClassNotHasStaticAttribute */ function assertClassNotHasStaticAttribute(string $attributeName, string $className, string $message = ''): void { Assert::assertClassNotHasStaticAttribute(...\func_get_args()); } } if (!\function_exists('PHPUnit\Framework\assertObjectHasAttribute')) { /** * Asserts that an object has a specified attribute. * * @param object $object * * @throws InvalidArgumentException * @throws Exception * @throws ExpectationFailedException * * @see Assert::assertObjectHasAttribute */ function assertObjectHasAttribute(string $attributeName, $object, string $message = ''): void { Assert::assertObjectHasAttribute(...\func_get_args()); } } if (!\function_exists('PHPUnit\Framework\assertObjectNotHasAttribute')) { /** * Asserts that an object does not have a specified attribute. * * @param object $object * * @throws InvalidArgumentException * @throws Exception * @throws ExpectationFailedException * * @see Assert::assertObjectNotHasAttribute */ function assertObjectNotHasAttribute(string $attributeName, $object, string $message = ''): void { Assert::assertObjectNotHasAttribute(...\func_get_args()); } } if (!\function_exists('PHPUnit\Framework\assertSame')) { /** * Asserts that two variables have the same type and value. * Used on objects, it asserts that two variables reference * the same object. * * @throws InvalidArgumentException * @throws ExpectationFailedException * * @psalm-template ExpectedType * * @psalm-param ExpectedType $expected * * @psalm-assert =ExpectedType $actual * * @see Assert::assertSame */ function assertSame($expected, $actual, string $message = ''): void { Assert::assertSame(...\func_get_args()); } } if (!\function_exists('PHPUnit\Framework\assertAttributeSame')) { /** * Asserts that a variable and an attribute of an object have the same type * and value. * * @param object|string $actualClassOrObject * * @throws InvalidArgumentException * @throws Exception * @throws ExpectationFailedException * * @deprecated https://github.com/sebastianbergmann/phpunit/issues/3338 * * @codeCoverageIgnore * * @see Assert::assertAttributeSame */ function assertAttributeSame($expected, string $actualAttributeName, $actualClassOrObject, string $message = ''): void { Assert::assertAttributeSame(...\func_get_args()); } } if (!\function_exists('PHPUnit\Framework\assertNotSame')) { /** * Asserts that two variables do not have the same type and value. * Used on objects, it asserts that two variables do not reference * the same object. * * @throws InvalidArgumentException * @throws ExpectationFailedException * * @see Assert::assertNotSame */ function assertNotSame($expected, $actual, string $message = ''): void { Assert::assertNotSame(...\func_get_args()); } } if (!\function_exists('PHPUnit\Framework\assertAttributeNotSame')) { /** * Asserts that a variable and an attribute of an object do not have the * same type and value. * * @param object|string $actualClassOrObject * * @throws InvalidArgumentException * @throws Exception * @throws ExpectationFailedException * * @deprecated https://github.com/sebastianbergmann/phpunit/issues/3338 * * @codeCoverageIgnore * * @see Assert::assertAttributeNotSame */ function assertAttributeNotSame($expected, string $actualAttributeName, $actualClassOrObject, string $message = ''): void { Assert::assertAttributeNotSame(...\func_get_args()); } } if (!\function_exists('PHPUnit\Framework\assertInstanceOf')) { /** * Asserts that a variable is of a given type. * * @throws InvalidArgumentException * @throws Exception * @throws ExpectationFailedException * * @psalm-template ExpectedType of object * * @psalm-param class-string $expected * * @psalm-assert =ExpectedType $actual * * @see Assert::assertInstanceOf */ function assertInstanceOf(string $expected, $actual, string $message = ''): void { Assert::assertInstanceOf(...\func_get_args()); } } if (!\function_exists('PHPUnit\Framework\assertAttributeInstanceOf')) { /** * Asserts that an attribute is of a given type. * * @param object|string $classOrObject * * @throws InvalidArgumentException * @throws Exception * @throws ExpectationFailedException * * @deprecated https://github.com/sebastianbergmann/phpunit/issues/3338 * * @codeCoverageIgnore * * @psalm-param class-string $expected * * @see Assert::assertAttributeInstanceOf */ function assertAttributeInstanceOf(string $expected, string $attributeName, $classOrObject, string $message = ''): void { Assert::assertAttributeInstanceOf(...\func_get_args()); } } if (!\function_exists('PHPUnit\Framework\assertNotInstanceOf')) { /** * Asserts that a variable is not of a given type. * * @throws InvalidArgumentException * @throws Exception * @throws ExpectationFailedException * * @psalm-template ExpectedType of object * * @psalm-param class-string $expected * * @psalm-assert !ExpectedType $actual * * @see Assert::assertNotInstanceOf */ function assertNotInstanceOf(string $expected, $actual, string $message = ''): void { Assert::assertNotInstanceOf(...\func_get_args()); } } if (!\function_exists('PHPUnit\Framework\assertAttributeNotInstanceOf')) { /** * Asserts that an attribute is of a given type. * * @param object|string $classOrObject * * @throws InvalidArgumentException * @throws Exception * @throws ExpectationFailedException * * @deprecated https://github.com/sebastianbergmann/phpunit/issues/3338 * * @codeCoverageIgnore * * @psalm-param class-string $expected * * @see Assert::assertAttributeNotInstanceOf */ function assertAttributeNotInstanceOf(string $expected, string $attributeName, $classOrObject, string $message = ''): void { Assert::assertAttributeNotInstanceOf(...\func_get_args()); } } if (!\function_exists('PHPUnit\Framework\assertInternalType')) { /** * Asserts that a variable is of a given type. * * @throws InvalidArgumentException * @throws ExpectationFailedException * * @deprecated https://github.com/sebastianbergmann/phpunit/issues/3369 * * @codeCoverageIgnore * * @see Assert::assertInternalType */ function assertInternalType(string $expected, $actual, string $message = ''): void { Assert::assertInternalType(...\func_get_args()); } } if (!\function_exists('PHPUnit\Framework\assertAttributeInternalType')) { /** * Asserts that an attribute is of a given type. * * @param object|string $classOrObject * * @throws InvalidArgumentException * @throws Exception * @throws ExpectationFailedException * * @deprecated https://github.com/sebastianbergmann/phpunit/issues/3338 * * @codeCoverageIgnore * * @see Assert::assertAttributeInternalType */ function assertAttributeInternalType(string $expected, string $attributeName, $classOrObject, string $message = ''): void { Assert::assertAttributeInternalType(...\func_get_args()); } } if (!\function_exists('PHPUnit\Framework\assertIsArray')) { /** * Asserts that a variable is of type array. * * @throws InvalidArgumentException * @throws ExpectationFailedException * * @psalm-assert array $actual * * @see Assert::assertIsArray */ function assertIsArray($actual, string $message = ''): void { Assert::assertIsArray(...\func_get_args()); } } if (!\function_exists('PHPUnit\Framework\assertIsBool')) { /** * Asserts that a variable is of type bool. * * @throws InvalidArgumentException * @throws ExpectationFailedException * * @psalm-assert bool $actual * * @see Assert::assertIsBool */ function assertIsBool($actual, string $message = ''): void { Assert::assertIsBool(...\func_get_args()); } } if (!\function_exists('PHPUnit\Framework\assertIsFloat')) { /** * Asserts that a variable is of type float. * * @throws InvalidArgumentException * @throws ExpectationFailedException * * @psalm-assert float $actual * * @see Assert::assertIsFloat */ function assertIsFloat($actual, string $message = ''): void { Assert::assertIsFloat(...\func_get_args()); } } if (!\function_exists('PHPUnit\Framework\assertIsInt')) { /** * Asserts that a variable is of type int. * * @throws InvalidArgumentException * @throws ExpectationFailedException * * @psalm-assert int $actual * * @see Assert::assertIsInt */ function assertIsInt($actual, string $message = ''): void { Assert::assertIsInt(...\func_get_args()); } } if (!\function_exists('PHPUnit\Framework\assertIsNumeric')) { /** * Asserts that a variable is of type numeric. * * @throws InvalidArgumentException * @throws ExpectationFailedException * * @psalm-assert numeric $actual * * @see Assert::assertIsNumeric */ function assertIsNumeric($actual, string $message = ''): void { Assert::assertIsNumeric(...\func_get_args()); } } if (!\function_exists('PHPUnit\Framework\assertIsObject')) { /** * Asserts that a variable is of type object. * * @throws InvalidArgumentException * @throws ExpectationFailedException * * @psalm-assert object $actual * * @see Assert::assertIsObject */ function assertIsObject($actual, string $message = ''): void { Assert::assertIsObject(...\func_get_args()); } } if (!\function_exists('PHPUnit\Framework\assertIsResource')) { /** * Asserts that a variable is of type resource. * * @throws InvalidArgumentException * @throws ExpectationFailedException * * @psalm-assert resource $actual * * @see Assert::assertIsResource */ function assertIsResource($actual, string $message = ''): void { Assert::assertIsResource(...\func_get_args()); } } if (!\function_exists('PHPUnit\Framework\assertIsString')) { /** * Asserts that a variable is of type string. * * @throws InvalidArgumentException * @throws ExpectationFailedException * * @psalm-assert string $actual * * @see Assert::assertIsString */ function assertIsString($actual, string $message = ''): void { Assert::assertIsString(...\func_get_args()); } } if (!\function_exists('PHPUnit\Framework\assertIsScalar')) { /** * Asserts that a variable is of type scalar. * * @throws InvalidArgumentException * @throws ExpectationFailedException * * @psalm-assert scalar $actual * * @see Assert::assertIsScalar */ function assertIsScalar($actual, string $message = ''): void { Assert::assertIsScalar(...\func_get_args()); } } if (!\function_exists('PHPUnit\Framework\assertIsCallable')) { /** * Asserts that a variable is of type callable. * * @throws InvalidArgumentException * @throws ExpectationFailedException * * @psalm-assert callable $actual * * @see Assert::assertIsCallable */ function assertIsCallable($actual, string $message = ''): void { Assert::assertIsCallable(...\func_get_args()); } } if (!\function_exists('PHPUnit\Framework\assertIsIterable')) { /** * Asserts that a variable is of type iterable. * * @throws InvalidArgumentException * @throws ExpectationFailedException * * @psalm-assert iterable $actual * * @see Assert::assertIsIterable */ function assertIsIterable($actual, string $message = ''): void { Assert::assertIsIterable(...\func_get_args()); } } if (!\function_exists('PHPUnit\Framework\assertNotInternalType')) { /** * Asserts that a variable is not of a given type. * * @throws InvalidArgumentException * @throws ExpectationFailedException * * @deprecated https://github.com/sebastianbergmann/phpunit/issues/3369 * * @codeCoverageIgnore * * @see Assert::assertNotInternalType */ function assertNotInternalType(string $expected, $actual, string $message = ''): void { Assert::assertNotInternalType(...\func_get_args()); } } if (!\function_exists('PHPUnit\Framework\assertIsNotArray')) { /** * Asserts that a variable is not of type array. * * @throws InvalidArgumentException * @throws ExpectationFailedException * * @psalm-assert !array $actual * * @see Assert::assertIsNotArray */ function assertIsNotArray($actual, string $message = ''): void { Assert::assertIsNotArray(...\func_get_args()); } } if (!\function_exists('PHPUnit\Framework\assertIsNotBool')) { /** * Asserts that a variable is not of type bool. * * @throws InvalidArgumentException * @throws ExpectationFailedException * * @psalm-assert !bool $actual * * @see Assert::assertIsNotBool */ function assertIsNotBool($actual, string $message = ''): void { Assert::assertIsNotBool(...\func_get_args()); } } if (!\function_exists('PHPUnit\Framework\assertIsNotFloat')) { /** * Asserts that a variable is not of type float. * * @throws InvalidArgumentException * @throws ExpectationFailedException * * @psalm-assert !float $actual * * @see Assert::assertIsNotFloat */ function assertIsNotFloat($actual, string $message = ''): void { Assert::assertIsNotFloat(...\func_get_args()); } } if (!\function_exists('PHPUnit\Framework\assertIsNotInt')) { /** * Asserts that a variable is not of type int. * * @throws InvalidArgumentException * @throws ExpectationFailedException * * @psalm-assert !int $actual * * @see Assert::assertIsNotInt */ function assertIsNotInt($actual, string $message = ''): void { Assert::assertIsNotInt(...\func_get_args()); } } if (!\function_exists('PHPUnit\Framework\assertIsNotNumeric')) { /** * Asserts that a variable is not of type numeric. * * @throws InvalidArgumentException * @throws ExpectationFailedException * * @psalm-assert !numeric $actual * * @see Assert::assertIsNotNumeric */ function assertIsNotNumeric($actual, string $message = ''): void { Assert::assertIsNotNumeric(...\func_get_args()); } } if (!\function_exists('PHPUnit\Framework\assertIsNotObject')) { /** * Asserts that a variable is not of type object. * * @throws InvalidArgumentException * @throws ExpectationFailedException * * @psalm-assert !object $actual * * @see Assert::assertIsNotObject */ function assertIsNotObject($actual, string $message = ''): void { Assert::assertIsNotObject(...\func_get_args()); } } if (!\function_exists('PHPUnit\Framework\assertIsNotResource')) { /** * Asserts that a variable is not of type resource. * * @throws InvalidArgumentException * @throws ExpectationFailedException * * @psalm-assert !resource $actual * * @see Assert::assertIsNotResource */ function assertIsNotResource($actual, string $message = ''): void { Assert::assertIsNotResource(...\func_get_args()); } } if (!\function_exists('PHPUnit\Framework\assertIsNotString')) { /** * Asserts that a variable is not of type string. * * @throws InvalidArgumentException * @throws ExpectationFailedException * * @psalm-assert !string $actual * * @see Assert::assertIsNotString */ function assertIsNotString($actual, string $message = ''): void { Assert::assertIsNotString(...\func_get_args()); } } if (!\function_exists('PHPUnit\Framework\assertIsNotScalar')) { /** * Asserts that a variable is not of type scalar. * * @throws InvalidArgumentException * @throws ExpectationFailedException * * @psalm-assert !scalar $actual * * @see Assert::assertIsNotScalar */ function assertIsNotScalar($actual, string $message = ''): void { Assert::assertIsNotScalar(...\func_get_args()); } } if (!\function_exists('PHPUnit\Framework\assertIsNotCallable')) { /** * Asserts that a variable is not of type callable. * * @throws InvalidArgumentException * @throws ExpectationFailedException * * @psalm-assert !callable $actual * * @see Assert::assertIsNotCallable */ function assertIsNotCallable($actual, string $message = ''): void { Assert::assertIsNotCallable(...\func_get_args()); } } if (!\function_exists('PHPUnit\Framework\assertIsNotIterable')) { /** * Asserts that a variable is not of type iterable. * * @throws InvalidArgumentException * @throws ExpectationFailedException * * @psalm-assert !iterable $actual * * @see Assert::assertIsNotIterable */ function assertIsNotIterable($actual, string $message = ''): void { Assert::assertIsNotIterable(...\func_get_args()); } } if (!\function_exists('PHPUnit\Framework\assertAttributeNotInternalType')) { /** * Asserts that an attribute is of a given type. * * @param object|string $classOrObject * * @throws InvalidArgumentException * @throws Exception * @throws ExpectationFailedException * * @deprecated https://github.com/sebastianbergmann/phpunit/issues/3338 * * @codeCoverageIgnore * * @see Assert::assertAttributeNotInternalType */ function assertAttributeNotInternalType(string $expected, string $attributeName, $classOrObject, string $message = ''): void { Assert::assertAttributeNotInternalType(...\func_get_args()); } } if (!\function_exists('PHPUnit\Framework\assertRegExp')) { /** * Asserts that a string matches a given regular expression. * * @throws InvalidArgumentException * @throws ExpectationFailedException * * @see Assert::assertRegExp */ function assertRegExp(string $pattern, string $string, string $message = ''): void { Assert::assertRegExp(...\func_get_args()); } } if (!\function_exists('PHPUnit\Framework\assertNotRegExp')) { /** * Asserts that a string does not match a given regular expression. * * @throws InvalidArgumentException * @throws ExpectationFailedException * * @see Assert::assertNotRegExp */ function assertNotRegExp(string $pattern, string $string, string $message = ''): void { Assert::assertNotRegExp(...\func_get_args()); } } if (!\function_exists('PHPUnit\Framework\assertSameSize')) { /** * Assert that the size of two arrays (or `Countable` or `Traversable` objects) * is the same. * * @param Countable|iterable $expected * @param Countable|iterable $actual * * @throws InvalidArgumentException * @throws Exception * @throws ExpectationFailedException * * @see Assert::assertSameSize */ function assertSameSize($expected, $actual, string $message = ''): void { Assert::assertSameSize(...\func_get_args()); } } if (!\function_exists('PHPUnit\Framework\assertNotSameSize')) { /** * Assert that the size of two arrays (or `Countable` or `Traversable` objects) * is not the same. * * @param Countable|iterable $expected * @param Countable|iterable $actual * * @throws InvalidArgumentException * @throws Exception * @throws ExpectationFailedException * * @see Assert::assertNotSameSize */ function assertNotSameSize($expected, $actual, string $message = ''): void { Assert::assertNotSameSize(...\func_get_args()); } } if (!\function_exists('PHPUnit\Framework\assertStringMatchesFormat')) { /** * Asserts that a string matches a given format string. * * @throws InvalidArgumentException * @throws ExpectationFailedException * * @see Assert::assertStringMatchesFormat */ function assertStringMatchesFormat(string $format, string $string, string $message = ''): void { Assert::assertStringMatchesFormat(...\func_get_args()); } } if (!\function_exists('PHPUnit\Framework\assertStringNotMatchesFormat')) { /** * Asserts that a string does not match a given format string. * * @throws InvalidArgumentException * @throws ExpectationFailedException * * @see Assert::assertStringNotMatchesFormat */ function assertStringNotMatchesFormat(string $format, string $string, string $message = ''): void { Assert::assertStringNotMatchesFormat(...\func_get_args()); } } if (!\function_exists('PHPUnit\Framework\assertStringMatchesFormatFile')) { /** * Asserts that a string matches a given format file. * * @throws InvalidArgumentException * @throws ExpectationFailedException * * @see Assert::assertStringMatchesFormatFile */ function assertStringMatchesFormatFile(string $formatFile, string $string, string $message = ''): void { Assert::assertStringMatchesFormatFile(...\func_get_args()); } } if (!\function_exists('PHPUnit\Framework\assertStringNotMatchesFormatFile')) { /** * Asserts that a string does not match a given format string. * * @throws InvalidArgumentException * @throws ExpectationFailedException * * @see Assert::assertStringNotMatchesFormatFile */ function assertStringNotMatchesFormatFile(string $formatFile, string $string, string $message = ''): void { Assert::assertStringNotMatchesFormatFile(...\func_get_args()); } } if (!\function_exists('PHPUnit\Framework\assertStringStartsWith')) { /** * Asserts that a string starts with a given prefix. * * @throws InvalidArgumentException * @throws ExpectationFailedException * * @see Assert::assertStringStartsWith */ function assertStringStartsWith(string $prefix, string $string, string $message = ''): void { Assert::assertStringStartsWith(...\func_get_args()); } } if (!\function_exists('PHPUnit\Framework\assertStringStartsNotWith')) { /** * Asserts that a string starts not with a given prefix. * * @param string $prefix * @param string $string * * @throws InvalidArgumentException * @throws ExpectationFailedException * * @see Assert::assertStringStartsNotWith */ function assertStringStartsNotWith($prefix, $string, string $message = ''): void { Assert::assertStringStartsNotWith(...\func_get_args()); } } if (!\function_exists('PHPUnit\Framework\assertStringContainsString')) { /** * @throws InvalidArgumentException * @throws ExpectationFailedException * * @see Assert::assertStringContainsString */ function assertStringContainsString(string $needle, string $haystack, string $message = ''): void { Assert::assertStringContainsString(...\func_get_args()); } } if (!\function_exists('PHPUnit\Framework\assertStringContainsStringIgnoringCase')) { /** * @throws InvalidArgumentException * @throws ExpectationFailedException * * @see Assert::assertStringContainsStringIgnoringCase */ function assertStringContainsStringIgnoringCase(string $needle, string $haystack, string $message = ''): void { Assert::assertStringContainsStringIgnoringCase(...\func_get_args()); } } if (!\function_exists('PHPUnit\Framework\assertStringNotContainsString')) { /** * @throws InvalidArgumentException * @throws ExpectationFailedException * * @see Assert::assertStringNotContainsString */ function assertStringNotContainsString(string $needle, string $haystack, string $message = ''): void { Assert::assertStringNotContainsString(...\func_get_args()); } } if (!\function_exists('PHPUnit\Framework\assertStringNotContainsStringIgnoringCase')) { /** * @throws InvalidArgumentException * @throws ExpectationFailedException * * @see Assert::assertStringNotContainsStringIgnoringCase */ function assertStringNotContainsStringIgnoringCase(string $needle, string $haystack, string $message = ''): void { Assert::assertStringNotContainsStringIgnoringCase(...\func_get_args()); } } if (!\function_exists('PHPUnit\Framework\assertStringEndsWith')) { /** * Asserts that a string ends with a given suffix. * * @throws InvalidArgumentException * @throws ExpectationFailedException * * @see Assert::assertStringEndsWith */ function assertStringEndsWith(string $suffix, string $string, string $message = ''): void { Assert::assertStringEndsWith(...\func_get_args()); } } if (!\function_exists('PHPUnit\Framework\assertStringEndsNotWith')) { /** * Asserts that a string ends not with a given suffix. * * @throws InvalidArgumentException * @throws ExpectationFailedException * * @see Assert::assertStringEndsNotWith */ function assertStringEndsNotWith(string $suffix, string $string, string $message = ''): void { Assert::assertStringEndsNotWith(...\func_get_args()); } } if (!\function_exists('PHPUnit\Framework\assertXmlFileEqualsXmlFile')) { /** * Asserts that two XML files are equal. * * @throws InvalidArgumentException * @throws Exception * @throws ExpectationFailedException * * @see Assert::assertXmlFileEqualsXmlFile */ function assertXmlFileEqualsXmlFile(string $expectedFile, string $actualFile, string $message = ''): void { Assert::assertXmlFileEqualsXmlFile(...\func_get_args()); } } if (!\function_exists('PHPUnit\Framework\assertXmlFileNotEqualsXmlFile')) { /** * Asserts that two XML files are not equal. * * @throws InvalidArgumentException * @throws Exception * @throws ExpectationFailedException * * @see Assert::assertXmlFileNotEqualsXmlFile */ function assertXmlFileNotEqualsXmlFile(string $expectedFile, string $actualFile, string $message = ''): void { Assert::assertXmlFileNotEqualsXmlFile(...\func_get_args()); } } if (!\function_exists('PHPUnit\Framework\assertXmlStringEqualsXmlFile')) { /** * Asserts that two XML documents are equal. * * @param DOMDocument|string $actualXml * * @throws InvalidArgumentException * @throws Exception * @throws ExpectationFailedException * * @see Assert::assertXmlStringEqualsXmlFile */ function assertXmlStringEqualsXmlFile(string $expectedFile, $actualXml, string $message = ''): void { Assert::assertXmlStringEqualsXmlFile(...\func_get_args()); } } if (!\function_exists('PHPUnit\Framework\assertXmlStringNotEqualsXmlFile')) { /** * Asserts that two XML documents are not equal. * * @param DOMDocument|string $actualXml * * @throws InvalidArgumentException * @throws Exception * @throws ExpectationFailedException * * @see Assert::assertXmlStringNotEqualsXmlFile */ function assertXmlStringNotEqualsXmlFile(string $expectedFile, $actualXml, string $message = ''): void { Assert::assertXmlStringNotEqualsXmlFile(...\func_get_args()); } } if (!\function_exists('PHPUnit\Framework\assertXmlStringEqualsXmlString')) { /** * Asserts that two XML documents are equal. * * @param DOMDocument|string $expectedXml * @param DOMDocument|string $actualXml * * @throws InvalidArgumentException * @throws Exception * @throws ExpectationFailedException * * @see Assert::assertXmlStringEqualsXmlString */ function assertXmlStringEqualsXmlString($expectedXml, $actualXml, string $message = ''): void { Assert::assertXmlStringEqualsXmlString(...\func_get_args()); } } if (!\function_exists('PHPUnit\Framework\assertXmlStringNotEqualsXmlString')) { /** * Asserts that two XML documents are not equal. * * @param DOMDocument|string $expectedXml * @param DOMDocument|string $actualXml * * @throws InvalidArgumentException * @throws Exception * @throws ExpectationFailedException * * @see Assert::assertXmlStringNotEqualsXmlString */ function assertXmlStringNotEqualsXmlString($expectedXml, $actualXml, string $message = ''): void { Assert::assertXmlStringNotEqualsXmlString(...\func_get_args()); } } if (!\function_exists('PHPUnit\Framework\assertEqualXMLStructure')) { /** * Asserts that a hierarchy of DOMElements matches. * * @throws InvalidArgumentException * @throws AssertionFailedError * @throws ExpectationFailedException * * @see Assert::assertEqualXMLStructure */ function assertEqualXMLStructure(DOMElement $expectedElement, DOMElement $actualElement, bool $checkAttributes = false, string $message = ''): void { Assert::assertEqualXMLStructure(...\func_get_args()); } } if (!\function_exists('PHPUnit\Framework\assertThat')) { /** * Evaluates a PHPUnit\Framework\Constraint matcher object. * * @throws InvalidArgumentException * @throws ExpectationFailedException * * @see Assert::assertThat */ function assertThat($value, Constraint $constraint, string $message = ''): void { Assert::assertThat(...\func_get_args()); } } if (!\function_exists('PHPUnit\Framework\assertJson')) { /** * Asserts that a string is a valid JSON string. * * @throws InvalidArgumentException * @throws ExpectationFailedException * * @see Assert::assertJson */ function assertJson(string $actualJson, string $message = ''): void { Assert::assertJson(...\func_get_args()); } } if (!\function_exists('PHPUnit\Framework\assertJsonStringEqualsJsonString')) { /** * Asserts that two given JSON encoded objects or arrays are equal. * * @throws InvalidArgumentException * @throws ExpectationFailedException * * @see Assert::assertJsonStringEqualsJsonString */ function assertJsonStringEqualsJsonString(string $expectedJson, string $actualJson, string $message = ''): void { Assert::assertJsonStringEqualsJsonString(...\func_get_args()); } } if (!\function_exists('PHPUnit\Framework\assertJsonStringNotEqualsJsonString')) { /** * Asserts that two given JSON encoded objects or arrays are not equal. * * @param string $expectedJson * @param string $actualJson * * @throws InvalidArgumentException * @throws ExpectationFailedException * * @see Assert::assertJsonStringNotEqualsJsonString */ function assertJsonStringNotEqualsJsonString($expectedJson, $actualJson, string $message = ''): void { Assert::assertJsonStringNotEqualsJsonString(...\func_get_args()); } } if (!\function_exists('PHPUnit\Framework\assertJsonStringEqualsJsonFile')) { /** * Asserts that the generated JSON encoded object and the content of the given file are equal. * * @throws InvalidArgumentException * @throws ExpectationFailedException * * @see Assert::assertJsonStringEqualsJsonFile */ function assertJsonStringEqualsJsonFile(string $expectedFile, string $actualJson, string $message = ''): void { Assert::assertJsonStringEqualsJsonFile(...\func_get_args()); } } if (!\function_exists('PHPUnit\Framework\assertJsonStringNotEqualsJsonFile')) { /** * Asserts that the generated JSON encoded object and the content of the given file are not equal. * * @throws InvalidArgumentException * @throws ExpectationFailedException * * @see Assert::assertJsonStringNotEqualsJsonFile */ function assertJsonStringNotEqualsJsonFile(string $expectedFile, string $actualJson, string $message = ''): void { Assert::assertJsonStringNotEqualsJsonFile(...\func_get_args()); } } if (!\function_exists('PHPUnit\Framework\assertJsonFileEqualsJsonFile')) { /** * Asserts that two JSON files are equal. * * @throws InvalidArgumentException * @throws ExpectationFailedException * * @see Assert::assertJsonFileEqualsJsonFile */ function assertJsonFileEqualsJsonFile(string $expectedFile, string $actualFile, string $message = ''): void { Assert::assertJsonFileEqualsJsonFile(...\func_get_args()); } } if (!\function_exists('PHPUnit\Framework\assertJsonFileNotEqualsJsonFile')) { /** * Asserts that two JSON files are not equal. * * @throws InvalidArgumentException * @throws ExpectationFailedException * * @see Assert::assertJsonFileNotEqualsJsonFile */ function assertJsonFileNotEqualsJsonFile(string $expectedFile, string $actualFile, string $message = ''): void { Assert::assertJsonFileNotEqualsJsonFile(...\func_get_args()); } } if (!\function_exists('PHPUnit\Framework\logicalAnd')) { function logicalAnd(): LogicalAnd { return Assert::logicalAnd(...\func_get_args()); } } if (!\function_exists('PHPUnit\Framework\logicalOr')) { function logicalOr(): LogicalOr { return Assert::logicalOr(...\func_get_args()); } } if (!\function_exists('PHPUnit\Framework\logicalNot')) { function logicalNot(Constraint $constraint): LogicalNot { return Assert::logicalNot(...\func_get_args()); } } if (!\function_exists('PHPUnit\Framework\logicalXor')) { function logicalXor(): LogicalXor { return Assert::logicalXor(...\func_get_args()); } } if (!\function_exists('PHPUnit\Framework\anything')) { function anything(): IsAnything { return Assert::anything(...\func_get_args()); } } if (!\function_exists('PHPUnit\Framework\isTrue')) { function isTrue(): IsTrue { return Assert::isTrue(...\func_get_args()); } } if (!\function_exists('PHPUnit\Framework\callback')) { function callback(callable $callback): Callback { return Assert::callback(...\func_get_args()); } } if (!\function_exists('PHPUnit\Framework\isFalse')) { function isFalse(): IsFalse { return Assert::isFalse(...\func_get_args()); } } if (!\function_exists('PHPUnit\Framework\isJson')) { function isJson(): IsJson { return Assert::isJson(...\func_get_args()); } } if (!\function_exists('PHPUnit\Framework\isNull')) { function isNull(): IsNull { return Assert::isNull(...\func_get_args()); } } if (!\function_exists('PHPUnit\Framework\isFinite')) { function isFinite(): IsFinite { return Assert::isFinite(...\func_get_args()); } } if (!\function_exists('PHPUnit\Framework\isInfinite')) { function isInfinite(): IsInfinite { return Assert::isInfinite(...\func_get_args()); } } if (!\function_exists('PHPUnit\Framework\isNan')) { function isNan(): IsNan { return Assert::isNan(...\func_get_args()); } } if (!\function_exists('PHPUnit\Framework\attribute')) { function attribute(Constraint $constraint, string $attributeName): Attribute { return Assert::attribute(...\func_get_args()); } } if (!\function_exists('PHPUnit\Framework\contains')) { function contains($value, bool $checkForObjectIdentity = true, bool $checkForNonObjectIdentity = false): TraversableContains { return Assert::contains(...\func_get_args()); } } if (!\function_exists('PHPUnit\Framework\containsEqual')) { function containsEqual($value): TraversableContainsEqual { return Assert::containsEqual(...\func_get_args()); } } if (!\function_exists('PHPUnit\Framework\containsIdentical')) { function containsIdentical($value): TraversableContainsIdentical { return Assert::containsIdentical(...\func_get_args()); } } if (!\function_exists('PHPUnit\Framework\containsOnly')) { function containsOnly(string $type): TraversableContainsOnly { return Assert::containsOnly(...\func_get_args()); } } if (!\function_exists('PHPUnit\Framework\containsOnlyInstancesOf')) { function containsOnlyInstancesOf(string $className): TraversableContainsOnly { return Assert::containsOnlyInstancesOf(...\func_get_args()); } } if (!\function_exists('PHPUnit\Framework\arrayHasKey')) { function arrayHasKey($key): ArrayHasKey { return Assert::arrayHasKey(...\func_get_args()); } } if (!\function_exists('PHPUnit\Framework\equalTo')) { function equalTo($value, float $delta = 0.0, int $maxDepth = 10, bool $canonicalize = false, bool $ignoreCase = false): IsEqual { return Assert::equalTo(...\func_get_args()); } } if (!\function_exists('PHPUnit\Framework\attributeEqualTo')) { function attributeEqualTo(string $attributeName, $value, float $delta = 0.0, int $maxDepth = 10, bool $canonicalize = false, bool $ignoreCase = false): Attribute { return Assert::attributeEqualTo(...\func_get_args()); } } if (!\function_exists('PHPUnit\Framework\isEmpty')) { function isEmpty(): IsEmpty { return Assert::isEmpty(...\func_get_args()); } } if (!\function_exists('PHPUnit\Framework\isWritable')) { function isWritable(): IsWritable { return Assert::isWritable(...\func_get_args()); } } if (!\function_exists('PHPUnit\Framework\isReadable')) { function isReadable(): IsReadable { return Assert::isReadable(...\func_get_args()); } } if (!\function_exists('PHPUnit\Framework\directoryExists')) { function directoryExists(): DirectoryExists { return Assert::directoryExists(...\func_get_args()); } } if (!\function_exists('PHPUnit\Framework\fileExists')) { function fileExists(): FileExists { return Assert::fileExists(...\func_get_args()); } } if (!\function_exists('PHPUnit\Framework\greaterThan')) { function greaterThan($value): GreaterThan { return Assert::greaterThan(...\func_get_args()); } } if (!\function_exists('PHPUnit\Framework\greaterThanOrEqual')) { function greaterThanOrEqual($value): LogicalOr { return Assert::greaterThanOrEqual(...\func_get_args()); } } if (!\function_exists('PHPUnit\Framework\classHasAttribute')) { function classHasAttribute(string $attributeName): ClassHasAttribute { return Assert::classHasAttribute(...\func_get_args()); } } if (!\function_exists('PHPUnit\Framework\classHasStaticAttribute')) { function classHasStaticAttribute(string $attributeName): ClassHasStaticAttribute { return Assert::classHasStaticAttribute(...\func_get_args()); } } if (!\function_exists('PHPUnit\Framework\objectHasAttribute')) { function objectHasAttribute($attributeName): ObjectHasAttribute { return Assert::objectHasAttribute(...\func_get_args()); } } if (!\function_exists('PHPUnit\Framework\identicalTo')) { function identicalTo($value): IsIdentical { return Assert::identicalTo(...\func_get_args()); } } if (!\function_exists('PHPUnit\Framework\isInstanceOf')) { function isInstanceOf(string $className): IsInstanceOf { return Assert::isInstanceOf(...\func_get_args()); } } if (!\function_exists('PHPUnit\Framework\isType')) { function isType(string $type): IsType { return Assert::isType(...\func_get_args()); } } if (!\function_exists('PHPUnit\Framework\lessThan')) { function lessThan($value): LessThan { return Assert::lessThan(...\func_get_args()); } } if (!\function_exists('PHPUnit\Framework\lessThanOrEqual')) { function lessThanOrEqual($value): LogicalOr { return Assert::lessThanOrEqual(...\func_get_args()); } } if (!\function_exists('PHPUnit\Framework\matchesRegularExpression')) { function matchesRegularExpression(string $pattern): RegularExpression { return Assert::matchesRegularExpression(...\func_get_args()); } } if (!\function_exists('PHPUnit\Framework\matches')) { function matches(string $string): StringMatchesFormatDescription { return Assert::matches(...\func_get_args()); } } if (!\function_exists('PHPUnit\Framework\stringStartsWith')) { function stringStartsWith($prefix): StringStartsWith { return Assert::stringStartsWith(...\func_get_args()); } } if (!\function_exists('PHPUnit\Framework\stringContains')) { function stringContains(string $string, bool $case = true): StringContains { return Assert::stringContains(...\func_get_args()); } } if (!\function_exists('PHPUnit\Framework\stringEndsWith')) { function stringEndsWith(string $suffix): StringEndsWith { return Assert::stringEndsWith(...\func_get_args()); } } if (!\function_exists('PHPUnit\Framework\countOf')) { function countOf(int $count): Count { return Assert::countOf(...\func_get_args()); } } if (!\function_exists('PHPUnit\Framework\any')) { /** * Returns a matcher that matches when the method is executed * zero or more times. */ function any(): AnyInvokedCountMatcher { return new AnyInvokedCountMatcher; } } if (!\function_exists('PHPUnit\Framework\never')) { /** * Returns a matcher that matches when the method is never executed. */ function never(): InvokedCountMatcher { return new InvokedCountMatcher(0); } } if (!\function_exists('PHPUnit\Framework\atLeast')) { /** * Returns a matcher that matches when the method is executed * at least N times. */ function atLeast(int $requiredInvocations): InvokedAtLeastCountMatcher { return new InvokedAtLeastCountMatcher( $requiredInvocations ); } } if (!\function_exists('PHPUnit\Framework\atLeastOnce')) { /** * Returns a matcher that matches when the method is executed at least once. */ function atLeastOnce(): InvokedAtLeastOnceMatcher { return new InvokedAtLeastOnceMatcher; } } if (!\function_exists('PHPUnit\Framework\once')) { /** * Returns a matcher that matches when the method is executed exactly once. */ function once(): InvokedCountMatcher { return new InvokedCountMatcher(1); } } if (!\function_exists('PHPUnit\Framework\exactly')) { /** * Returns a matcher that matches when the method is executed * exactly $count times. */ function exactly(int $count): InvokedCountMatcher { return new InvokedCountMatcher($count); } } if (!\function_exists('PHPUnit\Framework\atMost')) { /** * Returns a matcher that matches when the method is executed * at most N times. */ function atMost(int $allowedInvocations): InvokedAtMostCountMatcher { return new InvokedAtMostCountMatcher($allowedInvocations); } } if (!\function_exists('PHPUnit\Framework\at')) { /** * Returns a matcher that matches when the method is executed * at the given index. */ function at(int $index): InvokedAtIndexMatcher { return new InvokedAtIndexMatcher($index); } } if (!\function_exists('PHPUnit\Framework\returnValue')) { function returnValue($value): ReturnStub { return new ReturnStub($value); } } if (!\function_exists('PHPUnit\Framework\returnValueMap')) { function returnValueMap(array $valueMap): ReturnValueMapStub { return new ReturnValueMapStub($valueMap); } } if (!\function_exists('PHPUnit\Framework\returnArgument')) { function returnArgument(int $argumentIndex): ReturnArgumentStub { return new ReturnArgumentStub($argumentIndex); } } if (!\function_exists('PHPUnit\Framework\returnCallback')) { function returnCallback($callback): ReturnCallbackStub { return new ReturnCallbackStub($callback); } } if (!\function_exists('PHPUnit\Framework\returnSelf')) { /** * Returns the current object. * * This method is useful when mocking a fluent interface. */ function returnSelf(): ReturnSelfStub { return new ReturnSelfStub; } } if (!\function_exists('PHPUnit\Framework\throwException')) { function throwException(Throwable $exception): ExceptionStub { return new ExceptionStub($exception); } } if (!\function_exists('PHPUnit\Framework\onConsecutiveCalls')) { function onConsecutiveCalls(): ConsecutiveCallsStub { $args = \func_get_args(); return new ConsecutiveCallsStub($args); } } PK!,JWL  gfile-manager-advanced/application/svg-sanitizer/includes/phpunit/phpunit/src/Framework/TestListener.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace PHPUnit\Framework; use Throwable; /** * This interface, as well as the associated mechanism for extending PHPUnit, * will be removed in PHPUnit 10. There is no alternative available in this * version of PHPUnit. * * @deprecated * @see https://github.com/sebastianbergmann/phpunit/issues/4676 */ interface TestListener { public function addError(Test $test, Throwable $t, float $time): void; public function addWarning(Test $test, Warning $e, float $time): void; public function addFailure(Test $test, AssertionFailedError $e, float $time): void; public function addIncompleteTest(Test $test, Throwable $t, float $time): void; public function addRiskyTest(Test $test, Throwable $t, float $time): void; public function addSkippedTest(Test $test, Throwable $t, float $time): void; public function startTestSuite(TestSuite $suite): void; public function endTestSuite(TestSuite $suite): void; public function startTest(Test $test): void; public function endTest(Test $test, float $time): void; } PK!ï— êÎÎafile-manager-advanced/application/svg-sanitizer/includes/phpunit/phpunit/src/Framework/Assert.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace PHPUnit\Framework; use const DEBUG_BACKTRACE_IGNORE_ARGS; use const PHP_EOL; use function array_key_exists; use function array_shift; use function array_unshift; use function assert; use function class_exists; use function count; use function debug_backtrace; use function explode; use function file_get_contents; use function func_get_args; use function implode; use function interface_exists; use function is_array; use function is_bool; use function is_int; use function is_iterable; use function is_object; use function is_string; use function preg_match; use function preg_split; use function sprintf; use function strpos; use ArrayAccess; use Countable; use DOMAttr; use DOMDocument; use DOMElement; use PHPUnit\Framework\Constraint\ArrayHasKey; use PHPUnit\Framework\Constraint\ArraySubset; use PHPUnit\Framework\Constraint\Attribute; use PHPUnit\Framework\Constraint\Callback; use PHPUnit\Framework\Constraint\ClassHasAttribute; use PHPUnit\Framework\Constraint\ClassHasStaticAttribute; use PHPUnit\Framework\Constraint\Constraint; use PHPUnit\Framework\Constraint\Count; use PHPUnit\Framework\Constraint\DirectoryExists; use PHPUnit\Framework\Constraint\FileExists; use PHPUnit\Framework\Constraint\GreaterThan; use PHPUnit\Framework\Constraint\IsAnything; use PHPUnit\Framework\Constraint\IsEmpty; use PHPUnit\Framework\Constraint\IsEqual; use PHPUnit\Framework\Constraint\IsFalse; use PHPUnit\Framework\Constraint\IsFinite; use PHPUnit\Framework\Constraint\IsIdentical; use PHPUnit\Framework\Constraint\IsInfinite; use PHPUnit\Framework\Constraint\IsInstanceOf; use PHPUnit\Framework\Constraint\IsJson; use PHPUnit\Framework\Constraint\IsNan; use PHPUnit\Framework\Constraint\IsNull; use PHPUnit\Framework\Constraint\IsReadable; use PHPUnit\Framework\Constraint\IsTrue; use PHPUnit\Framework\Constraint\IsType; use PHPUnit\Framework\Constraint\IsWritable; use PHPUnit\Framework\Constraint\JsonMatches; use PHPUnit\Framework\Constraint\LessThan; use PHPUnit\Framework\Constraint\LogicalAnd; use PHPUnit\Framework\Constraint\LogicalNot; use PHPUnit\Framework\Constraint\LogicalOr; use PHPUnit\Framework\Constraint\LogicalXor; use PHPUnit\Framework\Constraint\ObjectHasAttribute; use PHPUnit\Framework\Constraint\RegularExpression; use PHPUnit\Framework\Constraint\SameSize; use PHPUnit\Framework\Constraint\StringContains; use PHPUnit\Framework\Constraint\StringEndsWith; use PHPUnit\Framework\Constraint\StringMatchesFormatDescription; use PHPUnit\Framework\Constraint\StringStartsWith; use PHPUnit\Framework\Constraint\TraversableContains; use PHPUnit\Framework\Constraint\TraversableContainsEqual; use PHPUnit\Framework\Constraint\TraversableContainsIdentical; use PHPUnit\Framework\Constraint\TraversableContainsOnly; use PHPUnit\Util\Type; use PHPUnit\Util\Xml; use ReflectionClass; use ReflectionException; use ReflectionObject; use Traversable; /** * A set of assertion methods. */ abstract class Assert { /** * @var int */ private static $count = 0; /** * Asserts that an array has a specified key. * * @param int|string $key * @param array|ArrayAccess $array * * @throws \SebastianBergmann\RecursionContext\InvalidArgumentException * @throws Exception * @throws ExpectationFailedException */ public static function assertArrayHasKey($key, $array, string $message = ''): void { if (!(is_int($key) || is_string($key))) { throw InvalidArgumentException::create( 1, 'integer or string' ); } if (!(is_array($array) || $array instanceof ArrayAccess)) { throw InvalidArgumentException::create( 2, 'array or ArrayAccess' ); } $constraint = new ArrayHasKey($key); static::assertThat($array, $constraint, $message); } /** * Asserts that an array has a specified subset. * * @param array|ArrayAccess $subset * @param array|ArrayAccess $array * * @throws \SebastianBergmann\RecursionContext\InvalidArgumentException * @throws Exception * @throws ExpectationFailedException * * @codeCoverageIgnore * * @deprecated https://github.com/sebastianbergmann/phpunit/issues/3494 */ public static function assertArraySubset($subset, $array, bool $checkForObjectIdentity = false, string $message = ''): void { self::createWarning('assertArraySubset() is deprecated and will be removed in PHPUnit 9.'); if (!(is_array($subset) || $subset instanceof ArrayAccess)) { throw InvalidArgumentException::create( 1, 'array or ArrayAccess' ); } if (!(is_array($array) || $array instanceof ArrayAccess)) { throw InvalidArgumentException::create( 2, 'array or ArrayAccess' ); } $constraint = new ArraySubset($subset, $checkForObjectIdentity); static::assertThat($array, $constraint, $message); } /** * Asserts that an array does not have a specified key. * * @param int|string $key * @param array|ArrayAccess $array * * @throws \SebastianBergmann\RecursionContext\InvalidArgumentException * @throws Exception * @throws ExpectationFailedException */ public static function assertArrayNotHasKey($key, $array, string $message = ''): void { if (!(is_int($key) || is_string($key))) { throw InvalidArgumentException::create( 1, 'integer or string' ); } if (!(is_array($array) || $array instanceof ArrayAccess)) { throw InvalidArgumentException::create( 2, 'array or ArrayAccess' ); } $constraint = new LogicalNot( new ArrayHasKey($key) ); static::assertThat($array, $constraint, $message); } /** * Asserts that a haystack contains a needle. * * @throws \SebastianBergmann\RecursionContext\InvalidArgumentException * @throws Exception * @throws ExpectationFailedException */ public static function assertContains($needle, $haystack, string $message = '', bool $ignoreCase = false, bool $checkForObjectIdentity = true, bool $checkForNonObjectIdentity = false): void { // @codeCoverageIgnoreStart if (is_string($haystack)) { self::createWarning('Using assertContains() with string haystacks is deprecated and will not be supported in PHPUnit 9. Refactor your test to use assertStringContainsString() or assertStringContainsStringIgnoringCase() instead.'); } if (!$checkForObjectIdentity) { self::createWarning('The optional $checkForObjectIdentity parameter of assertContains() is deprecated and will be removed in PHPUnit 9. Refactor your test to use assertContainsEquals() instead.'); } if ($checkForNonObjectIdentity) { self::createWarning('The optional $checkForNonObjectIdentity parameter of assertContains() is deprecated and will be removed in PHPUnit 9.'); } if ($ignoreCase) { self::createWarning('The optional $ignoreCase parameter of assertContains() is deprecated and will be removed in PHPUnit 9.'); } // @codeCoverageIgnoreEnd if (is_array($haystack) || (is_object($haystack) && $haystack instanceof Traversable)) { $constraint = new TraversableContains( $needle, $checkForObjectIdentity, $checkForNonObjectIdentity ); } elseif (is_string($haystack)) { if (!is_string($needle)) { throw InvalidArgumentException::create( 1, 'string' ); } $constraint = new StringContains( $needle, $ignoreCase ); } else { throw InvalidArgumentException::create( 2, 'array, traversable or string' ); } static::assertThat($haystack, $constraint, $message); } public static function assertContainsEquals($needle, iterable $haystack, string $message = ''): void { $constraint = new TraversableContainsEqual($needle); static::assertThat($haystack, $constraint, $message); } /** * Asserts that a haystack that is stored in a static attribute of a class * or an attribute of an object contains a needle. * * @param object|string $haystackClassOrObject * * @throws \SebastianBergmann\RecursionContext\InvalidArgumentException * @throws Exception * @throws ExpectationFailedException * * @deprecated https://github.com/sebastianbergmann/phpunit/issues/3338 * * @codeCoverageIgnore */ public static function assertAttributeContains($needle, string $haystackAttributeName, $haystackClassOrObject, string $message = '', bool $ignoreCase = false, bool $checkForObjectIdentity = true, bool $checkForNonObjectIdentity = false): void { self::createWarning('assertAttributeContains() is deprecated and will be removed in PHPUnit 9.'); static::assertContains( $needle, static::readAttribute($haystackClassOrObject, $haystackAttributeName), $message, $ignoreCase, $checkForObjectIdentity, $checkForNonObjectIdentity ); } /** * Asserts that a haystack does not contain a needle. * * @throws \SebastianBergmann\RecursionContext\InvalidArgumentException * @throws Exception * @throws ExpectationFailedException */ public static function assertNotContains($needle, $haystack, string $message = '', bool $ignoreCase = false, bool $checkForObjectIdentity = true, bool $checkForNonObjectIdentity = false): void { // @codeCoverageIgnoreStart if (is_string($haystack)) { self::createWarning('Using assertNotContains() with string haystacks is deprecated and will not be supported in PHPUnit 9. Refactor your test to use assertStringNotContainsString() or assertStringNotContainsStringIgnoringCase() instead.'); } if (!$checkForObjectIdentity) { self::createWarning('The optional $checkForObjectIdentity parameter of assertNotContains() is deprecated and will be removed in PHPUnit 9. Refactor your test to use assertNotContainsEquals() instead.'); } if ($checkForNonObjectIdentity) { self::createWarning('The optional $checkForNonObjectIdentity parameter of assertNotContains() is deprecated and will be removed in PHPUnit 9.'); } if ($ignoreCase) { self::createWarning('The optional $ignoreCase parameter of assertNotContains() is deprecated and will be removed in PHPUnit 9.'); } // @codeCoverageIgnoreEnd if (is_array($haystack) || (is_object($haystack) && $haystack instanceof Traversable)) { $constraint = new LogicalNot( new TraversableContains( $needle, $checkForObjectIdentity, $checkForNonObjectIdentity ) ); } elseif (is_string($haystack)) { if (!is_string($needle)) { throw InvalidArgumentException::create( 1, 'string' ); } $constraint = new LogicalNot( new StringContains( $needle, $ignoreCase ) ); } else { throw InvalidArgumentException::create( 2, 'array, traversable or string' ); } static::assertThat($haystack, $constraint, $message); } public static function assertNotContainsEquals($needle, iterable $haystack, string $message = ''): void { $constraint = new LogicalNot(new TraversableContainsEqual($needle)); static::assertThat($haystack, $constraint, $message); } /** * Asserts that a haystack that is stored in a static attribute of a class * or an attribute of an object does not contain a needle. * * @param object|string $haystackClassOrObject * * @throws \SebastianBergmann\RecursionContext\InvalidArgumentException * @throws Exception * @throws ExpectationFailedException * * @deprecated https://github.com/sebastianbergmann/phpunit/issues/3338 * * @codeCoverageIgnore */ public static function assertAttributeNotContains($needle, string $haystackAttributeName, $haystackClassOrObject, string $message = '', bool $ignoreCase = false, bool $checkForObjectIdentity = true, bool $checkForNonObjectIdentity = false): void { self::createWarning('assertAttributeNotContains() is deprecated and will be removed in PHPUnit 9.'); static::assertNotContains( $needle, static::readAttribute($haystackClassOrObject, $haystackAttributeName), $message, $ignoreCase, $checkForObjectIdentity, $checkForNonObjectIdentity ); } /** * Asserts that a haystack contains only values of a given type. * * @throws \SebastianBergmann\RecursionContext\InvalidArgumentException * @throws ExpectationFailedException */ public static function assertContainsOnly(string $type, iterable $haystack, ?bool $isNativeType = null, string $message = ''): void { if ($isNativeType === null) { $isNativeType = Type::isType($type); } static::assertThat( $haystack, new TraversableContainsOnly( $type, $isNativeType ), $message ); } /** * Asserts that a haystack contains only instances of a given class name. * * @throws \SebastianBergmann\RecursionContext\InvalidArgumentException * @throws ExpectationFailedException */ public static function assertContainsOnlyInstancesOf(string $className, iterable $haystack, string $message = ''): void { static::assertThat( $haystack, new TraversableContainsOnly( $className, false ), $message ); } /** * Asserts that a haystack that is stored in a static attribute of a class * or an attribute of an object contains only values of a given type. * * @param object|string $haystackClassOrObject * * @throws \SebastianBergmann\RecursionContext\InvalidArgumentException * @throws Exception * @throws ExpectationFailedException * * @deprecated https://github.com/sebastianbergmann/phpunit/issues/3338 * * @codeCoverageIgnore */ public static function assertAttributeContainsOnly(string $type, string $haystackAttributeName, $haystackClassOrObject, ?bool $isNativeType = null, string $message = ''): void { self::createWarning('assertAttributeContainsOnly() is deprecated and will be removed in PHPUnit 9.'); static::assertContainsOnly( $type, static::readAttribute($haystackClassOrObject, $haystackAttributeName), $isNativeType, $message ); } /** * Asserts that a haystack does not contain only values of a given type. * * @throws \SebastianBergmann\RecursionContext\InvalidArgumentException * @throws ExpectationFailedException */ public static function assertNotContainsOnly(string $type, iterable $haystack, ?bool $isNativeType = null, string $message = ''): void { if ($isNativeType === null) { $isNativeType = Type::isType($type); } static::assertThat( $haystack, new LogicalNot( new TraversableContainsOnly( $type, $isNativeType ) ), $message ); } /** * Asserts that a haystack that is stored in a static attribute of a class * or an attribute of an object does not contain only values of a given * type. * * @param object|string $haystackClassOrObject * * @throws \SebastianBergmann\RecursionContext\InvalidArgumentException * @throws Exception * @throws ExpectationFailedException * * @deprecated https://github.com/sebastianbergmann/phpunit/issues/3338 * * @codeCoverageIgnore */ public static function assertAttributeNotContainsOnly(string $type, string $haystackAttributeName, $haystackClassOrObject, ?bool $isNativeType = null, string $message = ''): void { self::createWarning('assertAttributeNotContainsOnly() is deprecated and will be removed in PHPUnit 9.'); static::assertNotContainsOnly( $type, static::readAttribute($haystackClassOrObject, $haystackAttributeName), $isNativeType, $message ); } /** * Asserts the number of elements of an array, Countable or Traversable. * * @param Countable|iterable $haystack * * @throws \SebastianBergmann\RecursionContext\InvalidArgumentException * @throws Exception * @throws ExpectationFailedException */ public static function assertCount(int $expectedCount, $haystack, string $message = ''): void { if (!$haystack instanceof Countable && !is_iterable($haystack)) { throw InvalidArgumentException::create(2, 'countable or iterable'); } static::assertThat( $haystack, new Count($expectedCount), $message ); } /** * Asserts the number of elements of an array, Countable or Traversable * that is stored in an attribute. * * @param object|string $haystackClassOrObject * * @throws \SebastianBergmann\RecursionContext\InvalidArgumentException * @throws Exception * @throws ExpectationFailedException * * @deprecated https://github.com/sebastianbergmann/phpunit/issues/3338 * * @codeCoverageIgnore */ public static function assertAttributeCount(int $expectedCount, string $haystackAttributeName, $haystackClassOrObject, string $message = ''): void { self::createWarning('assertAttributeCount() is deprecated and will be removed in PHPUnit 9.'); static::assertCount( $expectedCount, static::readAttribute($haystackClassOrObject, $haystackAttributeName), $message ); } /** * Asserts the number of elements of an array, Countable or Traversable. * * @param Countable|iterable $haystack * * @throws \SebastianBergmann\RecursionContext\InvalidArgumentException * @throws Exception * @throws ExpectationFailedException */ public static function assertNotCount(int $expectedCount, $haystack, string $message = ''): void { if (!$haystack instanceof Countable && !is_iterable($haystack)) { throw InvalidArgumentException::create(2, 'countable or iterable'); } $constraint = new LogicalNot( new Count($expectedCount) ); static::assertThat($haystack, $constraint, $message); } /** * Asserts the number of elements of an array, Countable or Traversable * that is stored in an attribute. * * @param object|string $haystackClassOrObject * * @throws \SebastianBergmann\RecursionContext\InvalidArgumentException * @throws Exception * @throws ExpectationFailedException * * @deprecated https://github.com/sebastianbergmann/phpunit/issues/3338 * * @codeCoverageIgnore */ public static function assertAttributeNotCount(int $expectedCount, string $haystackAttributeName, $haystackClassOrObject, string $message = ''): void { self::createWarning('assertAttributeNotCount() is deprecated and will be removed in PHPUnit 9.'); static::assertNotCount( $expectedCount, static::readAttribute($haystackClassOrObject, $haystackAttributeName), $message ); } /** * Asserts that two variables are equal. * * @throws \SebastianBergmann\RecursionContext\InvalidArgumentException * @throws ExpectationFailedException */ public static function assertEquals($expected, $actual, string $message = '', float $delta = 0.0, int $maxDepth = 10, bool $canonicalize = false, bool $ignoreCase = false): void { // @codeCoverageIgnoreStart if ($delta !== 0.0) { self::createWarning('The optional $delta parameter of assertEquals() is deprecated and will be removed in PHPUnit 9. Refactor your test to use assertEqualsWithDelta() instead.'); } if ($maxDepth !== 10) { self::createWarning('The optional $maxDepth parameter of assertEquals() is deprecated and will be removed in PHPUnit 9.'); } if ($canonicalize) { self::createWarning('The optional $canonicalize parameter of assertEquals() is deprecated and will be removed in PHPUnit 9. Refactor your test to use assertEqualsCanonicalizing() instead.'); } if ($ignoreCase) { self::createWarning('The optional $ignoreCase parameter of assertEquals() is deprecated and will be removed in PHPUnit 9. Refactor your test to use assertEqualsIgnoringCase() instead.'); } // @codeCoverageIgnoreEnd $constraint = new IsEqual( $expected, $delta, $maxDepth, $canonicalize, $ignoreCase ); static::assertThat($actual, $constraint, $message); } /** * Asserts that two variables are equal (canonicalizing). * * @throws \SebastianBergmann\RecursionContext\InvalidArgumentException * @throws ExpectationFailedException */ public static function assertEqualsCanonicalizing($expected, $actual, string $message = ''): void { $constraint = new IsEqual( $expected, 0.0, 10, true, false ); static::assertThat($actual, $constraint, $message); } /** * Asserts that two variables are equal (ignoring case). * * @throws \SebastianBergmann\RecursionContext\InvalidArgumentException * @throws ExpectationFailedException */ public static function assertEqualsIgnoringCase($expected, $actual, string $message = ''): void { $constraint = new IsEqual( $expected, 0.0, 10, false, true ); static::assertThat($actual, $constraint, $message); } /** * Asserts that two variables are equal (with delta). * * @throws \SebastianBergmann\RecursionContext\InvalidArgumentException * @throws ExpectationFailedException */ public static function assertEqualsWithDelta($expected, $actual, float $delta, string $message = ''): void { $constraint = new IsEqual( $expected, $delta ); static::assertThat($actual, $constraint, $message); } /** * Asserts that a variable is equal to an attribute of an object. * * @param object|string $actualClassOrObject * * @throws \SebastianBergmann\RecursionContext\InvalidArgumentException * @throws Exception * @throws ExpectationFailedException * * @deprecated https://github.com/sebastianbergmann/phpunit/issues/3338 * * @codeCoverageIgnore */ public static function assertAttributeEquals($expected, string $actualAttributeName, $actualClassOrObject, string $message = '', float $delta = 0.0, int $maxDepth = 10, bool $canonicalize = false, bool $ignoreCase = false): void { self::createWarning('assertAttributeEquals() is deprecated and will be removed in PHPUnit 9.'); static::assertEquals( $expected, static::readAttribute($actualClassOrObject, $actualAttributeName), $message, $delta, $maxDepth, $canonicalize, $ignoreCase ); } /** * Asserts that two variables are not equal. * * @param float $delta * @param int $maxDepth * @param bool $canonicalize * @param bool $ignoreCase * * @throws \SebastianBergmann\RecursionContext\InvalidArgumentException * @throws ExpectationFailedException */ public static function assertNotEquals($expected, $actual, string $message = '', $delta = 0.0, $maxDepth = 10, $canonicalize = false, $ignoreCase = false): void { // @codeCoverageIgnoreStart if ($delta !== 0.0) { self::createWarning('The optional $delta parameter of assertNotEquals() is deprecated and will be removed in PHPUnit 9. Refactor your test to use assertNotEqualsWithDelta() instead.'); } if ($maxDepth !== 10) { self::createWarning('The optional $maxDepth parameter of assertNotEquals() is deprecated and will be removed in PHPUnit 9.'); } if ($canonicalize) { self::createWarning('The optional $canonicalize parameter of assertNotEquals() is deprecated and will be removed in PHPUnit 9. Refactor your test to use assertNotEqualsCanonicalizing() instead.'); } if ($ignoreCase) { self::createWarning('The optional $ignoreCase parameter of assertNotEquals() is deprecated and will be removed in PHPUnit 9. Refactor your test to use assertNotEqualsIgnoringCase() instead.'); } // @codeCoverageIgnoreEnd $constraint = new LogicalNot( new IsEqual( $expected, $delta, $maxDepth, $canonicalize, $ignoreCase ) ); static::assertThat($actual, $constraint, $message); } /** * Asserts that two variables are not equal (canonicalizing). * * @throws \SebastianBergmann\RecursionContext\InvalidArgumentException * @throws ExpectationFailedException */ public static function assertNotEqualsCanonicalizing($expected, $actual, string $message = ''): void { $constraint = new LogicalNot( new IsEqual( $expected, 0.0, 10, true, false ) ); static::assertThat($actual, $constraint, $message); } /** * Asserts that two variables are not equal (ignoring case). * * @throws \SebastianBergmann\RecursionContext\InvalidArgumentException * @throws ExpectationFailedException */ public static function assertNotEqualsIgnoringCase($expected, $actual, string $message = ''): void { $constraint = new LogicalNot( new IsEqual( $expected, 0.0, 10, false, true ) ); static::assertThat($actual, $constraint, $message); } /** * Asserts that two variables are not equal (with delta). * * @throws \SebastianBergmann\RecursionContext\InvalidArgumentException * @throws ExpectationFailedException */ public static function assertNotEqualsWithDelta($expected, $actual, float $delta, string $message = ''): void { $constraint = new LogicalNot( new IsEqual( $expected, $delta ) ); static::assertThat($actual, $constraint, $message); } /** * Asserts that a variable is not equal to an attribute of an object. * * @param object|string $actualClassOrObject * * @throws \SebastianBergmann\RecursionContext\InvalidArgumentException * @throws Exception * @throws ExpectationFailedException * * @deprecated https://github.com/sebastianbergmann/phpunit/issues/3338 * * @codeCoverageIgnore */ public static function assertAttributeNotEquals($expected, string $actualAttributeName, $actualClassOrObject, string $message = '', float $delta = 0.0, int $maxDepth = 10, bool $canonicalize = false, bool $ignoreCase = false): void { self::createWarning('assertAttributeNotEquals() is deprecated and will be removed in PHPUnit 9.'); static::assertNotEquals( $expected, static::readAttribute($actualClassOrObject, $actualAttributeName), $message, $delta, $maxDepth, $canonicalize, $ignoreCase ); } /** * Asserts that a variable is empty. * * @throws \SebastianBergmann\RecursionContext\InvalidArgumentException * @throws ExpectationFailedException * * @psalm-assert empty $actual */ public static function assertEmpty($actual, string $message = ''): void { static::assertThat($actual, static::isEmpty(), $message); } /** * Asserts that a static attribute of a class or an attribute of an object * is empty. * * @param object|string $haystackClassOrObject * * @throws \SebastianBergmann\RecursionContext\InvalidArgumentException * @throws Exception * @throws ExpectationFailedException * * @deprecated https://github.com/sebastianbergmann/phpunit/issues/3338 * * @codeCoverageIgnore */ public static function assertAttributeEmpty(string $haystackAttributeName, $haystackClassOrObject, string $message = ''): void { self::createWarning('assertAttributeEmpty() is deprecated and will be removed in PHPUnit 9.'); static::assertEmpty( static::readAttribute($haystackClassOrObject, $haystackAttributeName), $message ); } /** * Asserts that a variable is not empty. * * @throws \SebastianBergmann\RecursionContext\InvalidArgumentException * @throws ExpectationFailedException * * @psalm-assert !empty $actual */ public static function assertNotEmpty($actual, string $message = ''): void { static::assertThat($actual, static::logicalNot(static::isEmpty()), $message); } /** * Asserts that a static attribute of a class or an attribute of an object * is not empty. * * @param object|string $haystackClassOrObject * * @throws \SebastianBergmann\RecursionContext\InvalidArgumentException * @throws Exception * @throws ExpectationFailedException * * @deprecated https://github.com/sebastianbergmann/phpunit/issues/3338 * * @codeCoverageIgnore */ public static function assertAttributeNotEmpty(string $haystackAttributeName, $haystackClassOrObject, string $message = ''): void { self::createWarning('assertAttributeNotEmpty() is deprecated and will be removed in PHPUnit 9.'); static::assertNotEmpty( static::readAttribute($haystackClassOrObject, $haystackAttributeName), $message ); } /** * Asserts that a value is greater than another value. * * @throws \SebastianBergmann\RecursionContext\InvalidArgumentException * @throws ExpectationFailedException */ public static function assertGreaterThan($expected, $actual, string $message = ''): void { static::assertThat($actual, static::greaterThan($expected), $message); } /** * Asserts that an attribute is greater than another value. * * @param object|string $actualClassOrObject * * @throws \SebastianBergmann\RecursionContext\InvalidArgumentException * @throws Exception * @throws ExpectationFailedException * * @deprecated https://github.com/sebastianbergmann/phpunit/issues/3338 * * @codeCoverageIgnore */ public static function assertAttributeGreaterThan($expected, string $actualAttributeName, $actualClassOrObject, string $message = ''): void { self::createWarning('assertAttributeGreaterThan() is deprecated and will be removed in PHPUnit 9.'); static::assertGreaterThan( $expected, static::readAttribute($actualClassOrObject, $actualAttributeName), $message ); } /** * Asserts that a value is greater than or equal to another value. * * @throws \SebastianBergmann\RecursionContext\InvalidArgumentException * @throws ExpectationFailedException */ public static function assertGreaterThanOrEqual($expected, $actual, string $message = ''): void { static::assertThat( $actual, static::greaterThanOrEqual($expected), $message ); } /** * Asserts that an attribute is greater than or equal to another value. * * @param object|string $actualClassOrObject * * @throws \SebastianBergmann\RecursionContext\InvalidArgumentException * @throws Exception * @throws ExpectationFailedException * * @deprecated https://github.com/sebastianbergmann/phpunit/issues/3338 * * @codeCoverageIgnore */ public static function assertAttributeGreaterThanOrEqual($expected, string $actualAttributeName, $actualClassOrObject, string $message = ''): void { self::createWarning('assertAttributeGreaterThanOrEqual() is deprecated and will be removed in PHPUnit 9.'); static::assertGreaterThanOrEqual( $expected, static::readAttribute($actualClassOrObject, $actualAttributeName), $message ); } /** * Asserts that a value is smaller than another value. * * @throws \SebastianBergmann\RecursionContext\InvalidArgumentException * @throws ExpectationFailedException */ public static function assertLessThan($expected, $actual, string $message = ''): void { static::assertThat($actual, static::lessThan($expected), $message); } /** * Asserts that an attribute is smaller than another value. * * @param object|string $actualClassOrObject * * @throws \SebastianBergmann\RecursionContext\InvalidArgumentException * @throws Exception * @throws ExpectationFailedException * * @deprecated https://github.com/sebastianbergmann/phpunit/issues/3338 * * @codeCoverageIgnore */ public static function assertAttributeLessThan($expected, string $actualAttributeName, $actualClassOrObject, string $message = ''): void { self::createWarning('assertAttributeLessThan() is deprecated and will be removed in PHPUnit 9.'); static::assertLessThan( $expected, static::readAttribute($actualClassOrObject, $actualAttributeName), $message ); } /** * Asserts that a value is smaller than or equal to another value. * * @throws \SebastianBergmann\RecursionContext\InvalidArgumentException * @throws ExpectationFailedException */ public static function assertLessThanOrEqual($expected, $actual, string $message = ''): void { static::assertThat($actual, static::lessThanOrEqual($expected), $message); } /** * Asserts that an attribute is smaller than or equal to another value. * * @param object|string $actualClassOrObject * * @throws \SebastianBergmann\RecursionContext\InvalidArgumentException * @throws Exception * @throws ExpectationFailedException * * @deprecated https://github.com/sebastianbergmann/phpunit/issues/3338 * * @codeCoverageIgnore */ public static function assertAttributeLessThanOrEqual($expected, string $actualAttributeName, $actualClassOrObject, string $message = ''): void { self::createWarning('assertAttributeLessThanOrEqual() is deprecated and will be removed in PHPUnit 9.'); static::assertLessThanOrEqual( $expected, static::readAttribute($actualClassOrObject, $actualAttributeName), $message ); } /** * Asserts that the contents of one file is equal to the contents of another * file. * * @throws \SebastianBergmann\RecursionContext\InvalidArgumentException * @throws ExpectationFailedException */ public static function assertFileEquals(string $expected, string $actual, string $message = '', bool $canonicalize = false, bool $ignoreCase = false): void { // @codeCoverageIgnoreStart if ($canonicalize) { self::createWarning('The optional $canonicalize parameter of assertFileEquals() is deprecated and will be removed in PHPUnit 9. Refactor your test to use assertFileEqualsCanonicalizing() instead.'); } if ($ignoreCase) { self::createWarning('The optional $ignoreCase parameter of assertFileEquals() is deprecated and will be removed in PHPUnit 9. Refactor your test to use assertFileEqualsIgnoringCase() instead.'); } // @codeCoverageIgnoreEnd static::assertFileExists($expected, $message); static::assertFileExists($actual, $message); $constraint = new IsEqual( file_get_contents($expected), 0.0, 10, $canonicalize, $ignoreCase ); static::assertThat(file_get_contents($actual), $constraint, $message); } /** * Asserts that the contents of one file is equal to the contents of another * file (canonicalizing). * * @throws \SebastianBergmann\RecursionContext\InvalidArgumentException * @throws ExpectationFailedException */ public static function assertFileEqualsCanonicalizing(string $expected, string $actual, string $message = ''): void { static::assertFileExists($expected, $message); static::assertFileExists($actual, $message); $constraint = new IsEqual( file_get_contents($expected), 0.0, 10, true ); static::assertThat(file_get_contents($actual), $constraint, $message); } /** * Asserts that the contents of one file is equal to the contents of another * file (ignoring case). * * @throws \SebastianBergmann\RecursionContext\InvalidArgumentException * @throws ExpectationFailedException */ public static function assertFileEqualsIgnoringCase(string $expected, string $actual, string $message = ''): void { static::assertFileExists($expected, $message); static::assertFileExists($actual, $message); $constraint = new IsEqual( file_get_contents($expected), 0.0, 10, false, true ); static::assertThat(file_get_contents($actual), $constraint, $message); } /** * Asserts that the contents of one file is not equal to the contents of * another file. * * @throws \SebastianBergmann\RecursionContext\InvalidArgumentException * @throws ExpectationFailedException */ public static function assertFileNotEquals(string $expected, string $actual, string $message = '', bool $canonicalize = false, bool $ignoreCase = false): void { // @codeCoverageIgnoreStart if ($canonicalize) { self::createWarning('The optional $canonicalize parameter of assertFileNotEquals() is deprecated and will be removed in PHPUnit 9. Refactor your test to use assertFileNotEqualsCanonicalizing() instead.'); } if ($ignoreCase) { self::createWarning('The optional $ignoreCase parameter of assertFileNotEquals() is deprecated and will be removed in PHPUnit 9. Refactor your test to use assertFileNotEqualsIgnoringCase() instead.'); } // @codeCoverageIgnoreEnd static::assertFileExists($expected, $message); static::assertFileExists($actual, $message); $constraint = new LogicalNot( new IsEqual( file_get_contents($expected), 0.0, 10, $canonicalize, $ignoreCase ) ); static::assertThat(file_get_contents($actual), $constraint, $message); } /** * Asserts that the contents of one file is not equal to the contents of another * file (canonicalizing). * * @throws \SebastianBergmann\RecursionContext\InvalidArgumentException * @throws ExpectationFailedException */ public static function assertFileNotEqualsCanonicalizing(string $expected, string $actual, string $message = ''): void { static::assertFileExists($expected, $message); static::assertFileExists($actual, $message); $constraint = new LogicalNot( new IsEqual( file_get_contents($expected), 0.0, 10, true ) ); static::assertThat(file_get_contents($actual), $constraint, $message); } /** * Asserts that the contents of one file is not equal to the contents of another * file (ignoring case). * * @throws \SebastianBergmann\RecursionContext\InvalidArgumentException * @throws ExpectationFailedException */ public static function assertFileNotEqualsIgnoringCase(string $expected, string $actual, string $message = ''): void { static::assertFileExists($expected, $message); static::assertFileExists($actual, $message); $constraint = new LogicalNot( new IsEqual( file_get_contents($expected), 0.0, 10, false, true ) ); static::assertThat(file_get_contents($actual), $constraint, $message); } /** * Asserts that the contents of a string is equal * to the contents of a file. * * @throws \SebastianBergmann\RecursionContext\InvalidArgumentException * @throws ExpectationFailedException */ public static function assertStringEqualsFile(string $expectedFile, string $actualString, string $message = '', bool $canonicalize = false, bool $ignoreCase = false): void { // @codeCoverageIgnoreStart if ($canonicalize) { self::createWarning('The optional $canonicalize parameter of assertStringEqualsFile() is deprecated and will be removed in PHPUnit 9. Refactor your test to use assertStringEqualsFileCanonicalizing() instead.'); } if ($ignoreCase) { self::createWarning('The optional $ignoreCase parameter of assertStringEqualsFile() is deprecated and will be removed in PHPUnit 9. Refactor your test to use assertStringEqualsFileIgnoringCase() instead.'); } // @codeCoverageIgnoreEnd static::assertFileExists($expectedFile, $message); $constraint = new IsEqual( file_get_contents($expectedFile), 0.0, 10, $canonicalize, $ignoreCase ); static::assertThat($actualString, $constraint, $message); } /** * Asserts that the contents of a string is equal * to the contents of a file (canonicalizing). * * @throws \SebastianBergmann\RecursionContext\InvalidArgumentException * @throws ExpectationFailedException */ public static function assertStringEqualsFileCanonicalizing(string $expectedFile, string $actualString, string $message = ''): void { static::assertFileExists($expectedFile, $message); $constraint = new IsEqual( file_get_contents($expectedFile), 0.0, 10, true ); static::assertThat($actualString, $constraint, $message); } /** * Asserts that the contents of a string is equal * to the contents of a file (ignoring case). * * @throws \SebastianBergmann\RecursionContext\InvalidArgumentException * @throws ExpectationFailedException */ public static function assertStringEqualsFileIgnoringCase(string $expectedFile, string $actualString, string $message = ''): void { static::assertFileExists($expectedFile, $message); $constraint = new IsEqual( file_get_contents($expectedFile), 0.0, 10, false, true ); static::assertThat($actualString, $constraint, $message); } /** * Asserts that the contents of a string is not equal * to the contents of a file. * * @throws \SebastianBergmann\RecursionContext\InvalidArgumentException * @throws ExpectationFailedException */ public static function assertStringNotEqualsFile(string $expectedFile, string $actualString, string $message = '', bool $canonicalize = false, bool $ignoreCase = false): void { // @codeCoverageIgnoreStart if ($canonicalize) { self::createWarning('The optional $canonicalize parameter of assertStringNotEqualsFile() is deprecated and will be removed in PHPUnit 9. Refactor your test to use assertStringNotEqualsFileCanonicalizing() instead.'); } if ($ignoreCase) { self::createWarning('The optional $ignoreCase parameter of assertStringNotEqualsFile() is deprecated and will be removed in PHPUnit 9. Refactor your test to use assertStringNotEqualsFileIgnoringCase() instead.'); } // @codeCoverageIgnoreEnd static::assertFileExists($expectedFile, $message); $constraint = new LogicalNot( new IsEqual( file_get_contents($expectedFile), 0.0, 10, $canonicalize, $ignoreCase ) ); static::assertThat($actualString, $constraint, $message); } /** * Asserts that the contents of a string is not equal * to the contents of a file (canonicalizing). * * @throws \SebastianBergmann\RecursionContext\InvalidArgumentException * @throws ExpectationFailedException */ public static function assertStringNotEqualsFileCanonicalizing(string $expectedFile, string $actualString, string $message = ''): void { static::assertFileExists($expectedFile, $message); $constraint = new LogicalNot( new IsEqual( file_get_contents($expectedFile), 0.0, 10, true ) ); static::assertThat($actualString, $constraint, $message); } /** * Asserts that the contents of a string is not equal * to the contents of a file (ignoring case). * * @throws \SebastianBergmann\RecursionContext\InvalidArgumentException * @throws ExpectationFailedException */ public static function assertStringNotEqualsFileIgnoringCase(string $expectedFile, string $actualString, string $message = ''): void { static::assertFileExists($expectedFile, $message); $constraint = new LogicalNot( new IsEqual( file_get_contents($expectedFile), 0.0, 10, false, true ) ); static::assertThat($actualString, $constraint, $message); } /** * Asserts that a file/dir is readable. * * @throws \SebastianBergmann\RecursionContext\InvalidArgumentException * @throws ExpectationFailedException */ public static function assertIsReadable(string $filename, string $message = ''): void { static::assertThat($filename, new IsReadable, $message); } /** * Asserts that a file/dir exists and is not readable. * * @throws \SebastianBergmann\RecursionContext\InvalidArgumentException * @throws ExpectationFailedException */ public static function assertNotIsReadable(string $filename, string $message = ''): void { static::assertThat($filename, new LogicalNot(new IsReadable), $message); } /** * Asserts that a file/dir exists and is writable. * * @throws \SebastianBergmann\RecursionContext\InvalidArgumentException * @throws ExpectationFailedException */ public static function assertIsWritable(string $filename, string $message = ''): void { static::assertThat($filename, new IsWritable, $message); } /** * Asserts that a file/dir exists and is not writable. * * @throws \SebastianBergmann\RecursionContext\InvalidArgumentException * @throws ExpectationFailedException */ public static function assertNotIsWritable(string $filename, string $message = ''): void { static::assertThat($filename, new LogicalNot(new IsWritable), $message); } /** * Asserts that a directory exists. * * @throws \SebastianBergmann\RecursionContext\InvalidArgumentException * @throws ExpectationFailedException */ public static function assertDirectoryExists(string $directory, string $message = ''): void { static::assertThat($directory, new DirectoryExists, $message); } /** * Asserts that a directory does not exist. * * @throws \SebastianBergmann\RecursionContext\InvalidArgumentException * @throws ExpectationFailedException */ public static function assertDirectoryNotExists(string $directory, string $message = ''): void { static::assertThat($directory, new LogicalNot(new DirectoryExists), $message); } /** * Asserts that a directory exists and is readable. * * @throws \SebastianBergmann\RecursionContext\InvalidArgumentException * @throws ExpectationFailedException */ public static function assertDirectoryIsReadable(string $directory, string $message = ''): void { self::assertDirectoryExists($directory, $message); self::assertIsReadable($directory, $message); } /** * Asserts that a directory exists and is not readable. * * @throws \SebastianBergmann\RecursionContext\InvalidArgumentException * @throws ExpectationFailedException */ public static function assertDirectoryNotIsReadable(string $directory, string $message = ''): void { self::assertDirectoryExists($directory, $message); self::assertNotIsReadable($directory, $message); } /** * Asserts that a directory exists and is writable. * * @throws \SebastianBergmann\RecursionContext\InvalidArgumentException * @throws ExpectationFailedException */ public static function assertDirectoryIsWritable(string $directory, string $message = ''): void { self::assertDirectoryExists($directory, $message); self::assertIsWritable($directory, $message); } /** * Asserts that a directory exists and is not writable. * * @throws \SebastianBergmann\RecursionContext\InvalidArgumentException * @throws ExpectationFailedException */ public static function assertDirectoryNotIsWritable(string $directory, string $message = ''): void { self::assertDirectoryExists($directory, $message); self::assertNotIsWritable($directory, $message); } /** * Asserts that a file exists. * * @throws \SebastianBergmann\RecursionContext\InvalidArgumentException * @throws ExpectationFailedException */ public static function assertFileExists(string $filename, string $message = ''): void { static::assertThat($filename, new FileExists, $message); } /** * Asserts that a file does not exist. * * @throws \SebastianBergmann\RecursionContext\InvalidArgumentException * @throws ExpectationFailedException */ public static function assertFileNotExists(string $filename, string $message = ''): void { static::assertThat($filename, new LogicalNot(new FileExists), $message); } /** * Asserts that a file exists and is readable. * * @throws \SebastianBergmann\RecursionContext\InvalidArgumentException * @throws ExpectationFailedException */ public static function assertFileIsReadable(string $file, string $message = ''): void { self::assertFileExists($file, $message); self::assertIsReadable($file, $message); } /** * Asserts that a file exists and is not readable. * * @throws \SebastianBergmann\RecursionContext\InvalidArgumentException * @throws ExpectationFailedException */ public static function assertFileNotIsReadable(string $file, string $message = ''): void { self::assertFileExists($file, $message); self::assertNotIsReadable($file, $message); } /** * Asserts that a file exists and is writable. * * @throws \SebastianBergmann\RecursionContext\InvalidArgumentException * @throws ExpectationFailedException */ public static function assertFileIsWritable(string $file, string $message = ''): void { self::assertFileExists($file, $message); self::assertIsWritable($file, $message); } /** * Asserts that a file exists and is not writable. * * @throws \SebastianBergmann\RecursionContext\InvalidArgumentException * @throws ExpectationFailedException */ public static function assertFileNotIsWritable(string $file, string $message = ''): void { self::assertFileExists($file, $message); self::assertNotIsWritable($file, $message); } /** * Asserts that a condition is true. * * @throws \SebastianBergmann\RecursionContext\InvalidArgumentException * @throws ExpectationFailedException * * @psalm-assert true $condition */ public static function assertTrue($condition, string $message = ''): void { static::assertThat($condition, static::isTrue(), $message); } /** * Asserts that a condition is not true. * * @throws \SebastianBergmann\RecursionContext\InvalidArgumentException * @throws ExpectationFailedException * * @psalm-assert !true $condition */ public static function assertNotTrue($condition, string $message = ''): void { static::assertThat($condition, static::logicalNot(static::isTrue()), $message); } /** * Asserts that a condition is false. * * @throws \SebastianBergmann\RecursionContext\InvalidArgumentException * @throws ExpectationFailedException * * @psalm-assert false $condition */ public static function assertFalse($condition, string $message = ''): void { static::assertThat($condition, static::isFalse(), $message); } /** * Asserts that a condition is not false. * * @throws \SebastianBergmann\RecursionContext\InvalidArgumentException * @throws ExpectationFailedException * * @psalm-assert !false $condition */ public static function assertNotFalse($condition, string $message = ''): void { static::assertThat($condition, static::logicalNot(static::isFalse()), $message); } /** * Asserts that a variable is null. * * @throws \SebastianBergmann\RecursionContext\InvalidArgumentException * @throws ExpectationFailedException * * @psalm-assert null $actual */ public static function assertNull($actual, string $message = ''): void { static::assertThat($actual, static::isNull(), $message); } /** * Asserts that a variable is not null. * * @throws \SebastianBergmann\RecursionContext\InvalidArgumentException * @throws ExpectationFailedException * * @psalm-assert !null $actual */ public static function assertNotNull($actual, string $message = ''): void { static::assertThat($actual, static::logicalNot(static::isNull()), $message); } /** * Asserts that a variable is finite. * * @throws \SebastianBergmann\RecursionContext\InvalidArgumentException * @throws ExpectationFailedException */ public static function assertFinite($actual, string $message = ''): void { static::assertThat($actual, static::isFinite(), $message); } /** * Asserts that a variable is infinite. * * @throws \SebastianBergmann\RecursionContext\InvalidArgumentException * @throws ExpectationFailedException */ public static function assertInfinite($actual, string $message = ''): void { static::assertThat($actual, static::isInfinite(), $message); } /** * Asserts that a variable is nan. * * @throws \SebastianBergmann\RecursionContext\InvalidArgumentException * @throws ExpectationFailedException */ public static function assertNan($actual, string $message = ''): void { static::assertThat($actual, static::isNan(), $message); } /** * Asserts that a class has a specified attribute. * * @throws \SebastianBergmann\RecursionContext\InvalidArgumentException * @throws Exception * @throws ExpectationFailedException */ public static function assertClassHasAttribute(string $attributeName, string $className, string $message = ''): void { if (!self::isValidClassAttributeName($attributeName)) { throw InvalidArgumentException::create(1, 'valid attribute name'); } if (!class_exists($className)) { throw InvalidArgumentException::create(2, 'class name'); } static::assertThat($className, new ClassHasAttribute($attributeName), $message); } /** * Asserts that a class does not have a specified attribute. * * @throws \SebastianBergmann\RecursionContext\InvalidArgumentException * @throws Exception * @throws ExpectationFailedException */ public static function assertClassNotHasAttribute(string $attributeName, string $className, string $message = ''): void { if (!self::isValidClassAttributeName($attributeName)) { throw InvalidArgumentException::create(1, 'valid attribute name'); } if (!class_exists($className)) { throw InvalidArgumentException::create(2, 'class name'); } static::assertThat( $className, new LogicalNot( new ClassHasAttribute($attributeName) ), $message ); } /** * Asserts that a class has a specified static attribute. * * @throws \SebastianBergmann\RecursionContext\InvalidArgumentException * @throws Exception * @throws ExpectationFailedException */ public static function assertClassHasStaticAttribute(string $attributeName, string $className, string $message = ''): void { if (!self::isValidClassAttributeName($attributeName)) { throw InvalidArgumentException::create(1, 'valid attribute name'); } if (!class_exists($className)) { throw InvalidArgumentException::create(2, 'class name'); } static::assertThat( $className, new ClassHasStaticAttribute($attributeName), $message ); } /** * Asserts that a class does not have a specified static attribute. * * @throws \SebastianBergmann\RecursionContext\InvalidArgumentException * @throws Exception * @throws ExpectationFailedException */ public static function assertClassNotHasStaticAttribute(string $attributeName, string $className, string $message = ''): void { if (!self::isValidClassAttributeName($attributeName)) { throw InvalidArgumentException::create(1, 'valid attribute name'); } if (!class_exists($className)) { throw InvalidArgumentException::create(2, 'class name'); } static::assertThat( $className, new LogicalNot( new ClassHasStaticAttribute($attributeName) ), $message ); } /** * Asserts that an object has a specified attribute. * * @param object $object * * @throws \SebastianBergmann\RecursionContext\InvalidArgumentException * @throws Exception * @throws ExpectationFailedException */ public static function assertObjectHasAttribute(string $attributeName, $object, string $message = ''): void { if (!self::isValidObjectAttributeName($attributeName)) { throw InvalidArgumentException::create(1, 'valid attribute name'); } if (!is_object($object)) { throw InvalidArgumentException::create(2, 'object'); } static::assertThat( $object, new ObjectHasAttribute($attributeName), $message ); } /** * Asserts that an object does not have a specified attribute. * * @param object $object * * @throws \SebastianBergmann\RecursionContext\InvalidArgumentException * @throws Exception * @throws ExpectationFailedException */ public static function assertObjectNotHasAttribute(string $attributeName, $object, string $message = ''): void { if (!self::isValidObjectAttributeName($attributeName)) { throw InvalidArgumentException::create(1, 'valid attribute name'); } if (!is_object($object)) { throw InvalidArgumentException::create(2, 'object'); } static::assertThat( $object, new LogicalNot( new ObjectHasAttribute($attributeName) ), $message ); } /** * Asserts that two variables have the same type and value. * Used on objects, it asserts that two variables reference * the same object. * * @throws \SebastianBergmann\RecursionContext\InvalidArgumentException * @throws ExpectationFailedException * * @psalm-template ExpectedType * * @psalm-param ExpectedType $expected * * @psalm-assert =ExpectedType $actual */ public static function assertSame($expected, $actual, string $message = ''): void { static::assertThat( $actual, new IsIdentical($expected), $message ); } /** * Asserts that a variable and an attribute of an object have the same type * and value. * * @param object|string $actualClassOrObject * * @throws \SebastianBergmann\RecursionContext\InvalidArgumentException * @throws Exception * @throws ExpectationFailedException * * @deprecated https://github.com/sebastianbergmann/phpunit/issues/3338 * * @codeCoverageIgnore */ public static function assertAttributeSame($expected, string $actualAttributeName, $actualClassOrObject, string $message = ''): void { self::createWarning('assertAttributeSame() is deprecated and will be removed in PHPUnit 9.'); static::assertSame( $expected, static::readAttribute($actualClassOrObject, $actualAttributeName), $message ); } /** * Asserts that two variables do not have the same type and value. * Used on objects, it asserts that two variables do not reference * the same object. * * @throws \SebastianBergmann\RecursionContext\InvalidArgumentException * @throws ExpectationFailedException */ public static function assertNotSame($expected, $actual, string $message = ''): void { if (is_bool($expected) && is_bool($actual)) { static::assertNotEquals($expected, $actual, $message); } static::assertThat( $actual, new LogicalNot( new IsIdentical($expected) ), $message ); } /** * Asserts that a variable and an attribute of an object do not have the * same type and value. * * @param object|string $actualClassOrObject * * @throws \SebastianBergmann\RecursionContext\InvalidArgumentException * @throws Exception * @throws ExpectationFailedException * * @deprecated https://github.com/sebastianbergmann/phpunit/issues/3338 * * @codeCoverageIgnore */ public static function assertAttributeNotSame($expected, string $actualAttributeName, $actualClassOrObject, string $message = ''): void { self::createWarning('assertAttributeNotSame() is deprecated and will be removed in PHPUnit 9.'); static::assertNotSame( $expected, static::readAttribute($actualClassOrObject, $actualAttributeName), $message ); } /** * Asserts that a variable is of a given type. * * @throws \SebastianBergmann\RecursionContext\InvalidArgumentException * @throws Exception * @throws ExpectationFailedException * * @psalm-template ExpectedType of object * * @psalm-param class-string $expected * * @psalm-assert =ExpectedType $actual */ public static function assertInstanceOf(string $expected, $actual, string $message = ''): void { if (!class_exists($expected) && !interface_exists($expected)) { throw InvalidArgumentException::create(1, 'class or interface name'); } static::assertThat( $actual, new IsInstanceOf($expected), $message ); } /** * Asserts that an attribute is of a given type. * * @param object|string $classOrObject * * @throws \SebastianBergmann\RecursionContext\InvalidArgumentException * @throws Exception * @throws ExpectationFailedException * * @deprecated https://github.com/sebastianbergmann/phpunit/issues/3338 * * @codeCoverageIgnore * * @psalm-param class-string $expected */ public static function assertAttributeInstanceOf(string $expected, string $attributeName, $classOrObject, string $message = ''): void { self::createWarning('assertAttributeInstanceOf() is deprecated and will be removed in PHPUnit 9.'); static::assertInstanceOf( $expected, static::readAttribute($classOrObject, $attributeName), $message ); } /** * Asserts that a variable is not of a given type. * * @throws \SebastianBergmann\RecursionContext\InvalidArgumentException * @throws Exception * @throws ExpectationFailedException * * @psalm-template ExpectedType of object * * @psalm-param class-string $expected * * @psalm-assert !ExpectedType $actual */ public static function assertNotInstanceOf(string $expected, $actual, string $message = ''): void { if (!class_exists($expected) && !interface_exists($expected)) { throw InvalidArgumentException::create(1, 'class or interface name'); } static::assertThat( $actual, new LogicalNot( new IsInstanceOf($expected) ), $message ); } /** * Asserts that an attribute is of a given type. * * @param object|string $classOrObject * * @throws \SebastianBergmann\RecursionContext\InvalidArgumentException * @throws Exception * @throws ExpectationFailedException * * @deprecated https://github.com/sebastianbergmann/phpunit/issues/3338 * * @codeCoverageIgnore * * @psalm-param class-string $expected */ public static function assertAttributeNotInstanceOf(string $expected, string $attributeName, $classOrObject, string $message = ''): void { self::createWarning('assertAttributeNotInstanceOf() is deprecated and will be removed in PHPUnit 9.'); static::assertNotInstanceOf( $expected, static::readAttribute($classOrObject, $attributeName), $message ); } /** * Asserts that a variable is of a given type. * * @throws \SebastianBergmann\RecursionContext\InvalidArgumentException * @throws ExpectationFailedException * * @deprecated https://github.com/sebastianbergmann/phpunit/issues/3369 * * @codeCoverageIgnore */ public static function assertInternalType(string $expected, $actual, string $message = ''): void { self::createWarning( sprintf( 'assertInternalType() is deprecated and will be removed in PHPUnit 9. Refactor your test to use %s() instead.', self::assertInternalTypeReplacement($expected, false) ) ); static::assertThat( $actual, new IsType($expected), $message ); } /** * Asserts that an attribute is of a given type. * * @param object|string $classOrObject * * @throws \SebastianBergmann\RecursionContext\InvalidArgumentException * @throws Exception * @throws ExpectationFailedException * * @deprecated https://github.com/sebastianbergmann/phpunit/issues/3338 * * @codeCoverageIgnore */ public static function assertAttributeInternalType(string $expected, string $attributeName, $classOrObject, string $message = ''): void { self::createWarning('assertAttributeInternalType() is deprecated and will be removed in PHPUnit 9.'); static::assertInternalType( $expected, static::readAttribute($classOrObject, $attributeName), $message ); } /** * Asserts that a variable is of type array. * * @throws \SebastianBergmann\RecursionContext\InvalidArgumentException * @throws ExpectationFailedException * * @psalm-assert array $actual */ public static function assertIsArray($actual, string $message = ''): void { static::assertThat( $actual, new IsType(IsType::TYPE_ARRAY), $message ); } /** * Asserts that a variable is of type bool. * * @throws \SebastianBergmann\RecursionContext\InvalidArgumentException * @throws ExpectationFailedException * * @psalm-assert bool $actual */ public static function assertIsBool($actual, string $message = ''): void { static::assertThat( $actual, new IsType(IsType::TYPE_BOOL), $message ); } /** * Asserts that a variable is of type float. * * @throws \SebastianBergmann\RecursionContext\InvalidArgumentException * @throws ExpectationFailedException * * @psalm-assert float $actual */ public static function assertIsFloat($actual, string $message = ''): void { static::assertThat( $actual, new IsType(IsType::TYPE_FLOAT), $message ); } /** * Asserts that a variable is of type int. * * @throws \SebastianBergmann\RecursionContext\InvalidArgumentException * @throws ExpectationFailedException * * @psalm-assert int $actual */ public static function assertIsInt($actual, string $message = ''): void { static::assertThat( $actual, new IsType(IsType::TYPE_INT), $message ); } /** * Asserts that a variable is of type numeric. * * @throws \SebastianBergmann\RecursionContext\InvalidArgumentException * @throws ExpectationFailedException * * @psalm-assert numeric $actual */ public static function assertIsNumeric($actual, string $message = ''): void { static::assertThat( $actual, new IsType(IsType::TYPE_NUMERIC), $message ); } /** * Asserts that a variable is of type object. * * @throws \SebastianBergmann\RecursionContext\InvalidArgumentException * @throws ExpectationFailedException * * @psalm-assert object $actual */ public static function assertIsObject($actual, string $message = ''): void { static::assertThat( $actual, new IsType(IsType::TYPE_OBJECT), $message ); } /** * Asserts that a variable is of type resource. * * @throws \SebastianBergmann\RecursionContext\InvalidArgumentException * @throws ExpectationFailedException * * @psalm-assert resource $actual */ public static function assertIsResource($actual, string $message = ''): void { static::assertThat( $actual, new IsType(IsType::TYPE_RESOURCE), $message ); } /** * Asserts that a variable is of type string. * * @throws \SebastianBergmann\RecursionContext\InvalidArgumentException * @throws ExpectationFailedException * * @psalm-assert string $actual */ public static function assertIsString($actual, string $message = ''): void { static::assertThat( $actual, new IsType(IsType::TYPE_STRING), $message ); } /** * Asserts that a variable is of type scalar. * * @throws \SebastianBergmann\RecursionContext\InvalidArgumentException * @throws ExpectationFailedException * * @psalm-assert scalar $actual */ public static function assertIsScalar($actual, string $message = ''): void { static::assertThat( $actual, new IsType(IsType::TYPE_SCALAR), $message ); } /** * Asserts that a variable is of type callable. * * @throws \SebastianBergmann\RecursionContext\InvalidArgumentException * @throws ExpectationFailedException * * @psalm-assert callable $actual */ public static function assertIsCallable($actual, string $message = ''): void { static::assertThat( $actual, new IsType(IsType::TYPE_CALLABLE), $message ); } /** * Asserts that a variable is of type iterable. * * @throws \SebastianBergmann\RecursionContext\InvalidArgumentException * @throws ExpectationFailedException * * @psalm-assert iterable $actual */ public static function assertIsIterable($actual, string $message = ''): void { static::assertThat( $actual, new IsType(IsType::TYPE_ITERABLE), $message ); } /** * Asserts that a variable is not of a given type. * * @throws \SebastianBergmann\RecursionContext\InvalidArgumentException * @throws ExpectationFailedException * * @deprecated https://github.com/sebastianbergmann/phpunit/issues/3369 * * @codeCoverageIgnore */ public static function assertNotInternalType(string $expected, $actual, string $message = ''): void { self::createWarning( sprintf( 'assertNotInternalType() is deprecated and will be removed in PHPUnit 9. Refactor your test to use %s() instead.', self::assertInternalTypeReplacement($expected, true) ) ); static::assertThat( $actual, new LogicalNot( new IsType($expected) ), $message ); } /** * Asserts that a variable is not of type array. * * @throws \SebastianBergmann\RecursionContext\InvalidArgumentException * @throws ExpectationFailedException * * @psalm-assert !array $actual */ public static function assertIsNotArray($actual, string $message = ''): void { static::assertThat( $actual, new LogicalNot(new IsType(IsType::TYPE_ARRAY)), $message ); } /** * Asserts that a variable is not of type bool. * * @throws \SebastianBergmann\RecursionContext\InvalidArgumentException * @throws ExpectationFailedException * * @psalm-assert !bool $actual */ public static function assertIsNotBool($actual, string $message = ''): void { static::assertThat( $actual, new LogicalNot(new IsType(IsType::TYPE_BOOL)), $message ); } /** * Asserts that a variable is not of type float. * * @throws \SebastianBergmann\RecursionContext\InvalidArgumentException * @throws ExpectationFailedException * * @psalm-assert !float $actual */ public static function assertIsNotFloat($actual, string $message = ''): void { static::assertThat( $actual, new LogicalNot(new IsType(IsType::TYPE_FLOAT)), $message ); } /** * Asserts that a variable is not of type int. * * @throws \SebastianBergmann\RecursionContext\InvalidArgumentException * @throws ExpectationFailedException * * @psalm-assert !int $actual */ public static function assertIsNotInt($actual, string $message = ''): void { static::assertThat( $actual, new LogicalNot(new IsType(IsType::TYPE_INT)), $message ); } /** * Asserts that a variable is not of type numeric. * * @throws \SebastianBergmann\RecursionContext\InvalidArgumentException * @throws ExpectationFailedException * * @psalm-assert !numeric $actual */ public static function assertIsNotNumeric($actual, string $message = ''): void { static::assertThat( $actual, new LogicalNot(new IsType(IsType::TYPE_NUMERIC)), $message ); } /** * Asserts that a variable is not of type object. * * @throws \SebastianBergmann\RecursionContext\InvalidArgumentException * @throws ExpectationFailedException * * @psalm-assert !object $actual */ public static function assertIsNotObject($actual, string $message = ''): void { static::assertThat( $actual, new LogicalNot(new IsType(IsType::TYPE_OBJECT)), $message ); } /** * Asserts that a variable is not of type resource. * * @throws \SebastianBergmann\RecursionContext\InvalidArgumentException * @throws ExpectationFailedException * * @psalm-assert !resource $actual */ public static function assertIsNotResource($actual, string $message = ''): void { static::assertThat( $actual, new LogicalNot(new IsType(IsType::TYPE_RESOURCE)), $message ); } /** * Asserts that a variable is not of type string. * * @throws \SebastianBergmann\RecursionContext\InvalidArgumentException * @throws ExpectationFailedException * * @psalm-assert !string $actual */ public static function assertIsNotString($actual, string $message = ''): void { static::assertThat( $actual, new LogicalNot(new IsType(IsType::TYPE_STRING)), $message ); } /** * Asserts that a variable is not of type scalar. * * @throws \SebastianBergmann\RecursionContext\InvalidArgumentException * @throws ExpectationFailedException * * @psalm-assert !scalar $actual */ public static function assertIsNotScalar($actual, string $message = ''): void { static::assertThat( $actual, new LogicalNot(new IsType(IsType::TYPE_SCALAR)), $message ); } /** * Asserts that a variable is not of type callable. * * @throws \SebastianBergmann\RecursionContext\InvalidArgumentException * @throws ExpectationFailedException * * @psalm-assert !callable $actual */ public static function assertIsNotCallable($actual, string $message = ''): void { static::assertThat( $actual, new LogicalNot(new IsType(IsType::TYPE_CALLABLE)), $message ); } /** * Asserts that a variable is not of type iterable. * * @throws \SebastianBergmann\RecursionContext\InvalidArgumentException * @throws ExpectationFailedException * * @psalm-assert !iterable $actual */ public static function assertIsNotIterable($actual, string $message = ''): void { static::assertThat( $actual, new LogicalNot(new IsType(IsType::TYPE_ITERABLE)), $message ); } /** * Asserts that an attribute is of a given type. * * @param object|string $classOrObject * * @throws \SebastianBergmann\RecursionContext\InvalidArgumentException * @throws Exception * @throws ExpectationFailedException * * @deprecated https://github.com/sebastianbergmann/phpunit/issues/3338 * * @codeCoverageIgnore */ public static function assertAttributeNotInternalType(string $expected, string $attributeName, $classOrObject, string $message = ''): void { self::createWarning('assertAttributeNotInternalType() is deprecated and will be removed in PHPUnit 9.'); static::assertNotInternalType( $expected, static::readAttribute($classOrObject, $attributeName), $message ); } /** * Asserts that a string matches a given regular expression. * * @throws \SebastianBergmann\RecursionContext\InvalidArgumentException * @throws ExpectationFailedException */ public static function assertRegExp(string $pattern, string $string, string $message = ''): void { static::assertThat($string, new RegularExpression($pattern), $message); } /** * Asserts that a string does not match a given regular expression. * * @throws \SebastianBergmann\RecursionContext\InvalidArgumentException * @throws ExpectationFailedException */ public static function assertNotRegExp(string $pattern, string $string, string $message = ''): void { static::assertThat( $string, new LogicalNot( new RegularExpression($pattern) ), $message ); } /** * Assert that the size of two arrays (or `Countable` or `Traversable` objects) * is the same. * * @param Countable|iterable $expected * @param Countable|iterable $actual * * @throws \SebastianBergmann\RecursionContext\InvalidArgumentException * @throws Exception * @throws ExpectationFailedException */ public static function assertSameSize($expected, $actual, string $message = ''): void { if (!$expected instanceof Countable && !is_iterable($expected)) { throw InvalidArgumentException::create(1, 'countable or iterable'); } if (!$actual instanceof Countable && !is_iterable($actual)) { throw InvalidArgumentException::create(2, 'countable or iterable'); } static::assertThat( $actual, new SameSize($expected), $message ); } /** * Assert that the size of two arrays (or `Countable` or `Traversable` objects) * is not the same. * * @param Countable|iterable $expected * @param Countable|iterable $actual * * @throws \SebastianBergmann\RecursionContext\InvalidArgumentException * @throws Exception * @throws ExpectationFailedException */ public static function assertNotSameSize($expected, $actual, string $message = ''): void { if (!$expected instanceof Countable && !is_iterable($expected)) { throw InvalidArgumentException::create(1, 'countable or iterable'); } if (!$actual instanceof Countable && !is_iterable($actual)) { throw InvalidArgumentException::create(2, 'countable or iterable'); } static::assertThat( $actual, new LogicalNot( new SameSize($expected) ), $message ); } /** * Asserts that a string matches a given format string. * * @throws \SebastianBergmann\RecursionContext\InvalidArgumentException * @throws ExpectationFailedException */ public static function assertStringMatchesFormat(string $format, string $string, string $message = ''): void { static::assertThat($string, new StringMatchesFormatDescription($format), $message); } /** * Asserts that a string does not match a given format string. * * @throws \SebastianBergmann\RecursionContext\InvalidArgumentException * @throws ExpectationFailedException */ public static function assertStringNotMatchesFormat(string $format, string $string, string $message = ''): void { static::assertThat( $string, new LogicalNot( new StringMatchesFormatDescription($format) ), $message ); } /** * Asserts that a string matches a given format file. * * @throws \SebastianBergmann\RecursionContext\InvalidArgumentException * @throws ExpectationFailedException */ public static function assertStringMatchesFormatFile(string $formatFile, string $string, string $message = ''): void { static::assertFileExists($formatFile, $message); static::assertThat( $string, new StringMatchesFormatDescription( file_get_contents($formatFile) ), $message ); } /** * Asserts that a string does not match a given format string. * * @throws \SebastianBergmann\RecursionContext\InvalidArgumentException * @throws ExpectationFailedException */ public static function assertStringNotMatchesFormatFile(string $formatFile, string $string, string $message = ''): void { static::assertFileExists($formatFile, $message); static::assertThat( $string, new LogicalNot( new StringMatchesFormatDescription( file_get_contents($formatFile) ) ), $message ); } /** * Asserts that a string starts with a given prefix. * * @throws \SebastianBergmann\RecursionContext\InvalidArgumentException * @throws ExpectationFailedException */ public static function assertStringStartsWith(string $prefix, string $string, string $message = ''): void { static::assertThat($string, new StringStartsWith($prefix), $message); } /** * Asserts that a string starts not with a given prefix. * * @param string $prefix * @param string $string * * @throws \SebastianBergmann\RecursionContext\InvalidArgumentException * @throws ExpectationFailedException */ public static function assertStringStartsNotWith($prefix, $string, string $message = ''): void { static::assertThat( $string, new LogicalNot( new StringStartsWith($prefix) ), $message ); } /** * @throws \SebastianBergmann\RecursionContext\InvalidArgumentException * @throws ExpectationFailedException */ public static function assertStringContainsString(string $needle, string $haystack, string $message = ''): void { $constraint = new StringContains($needle, false); static::assertThat($haystack, $constraint, $message); } /** * @throws \SebastianBergmann\RecursionContext\InvalidArgumentException * @throws ExpectationFailedException */ public static function assertStringContainsStringIgnoringCase(string $needle, string $haystack, string $message = ''): void { $constraint = new StringContains($needle, true); static::assertThat($haystack, $constraint, $message); } /** * @throws \SebastianBergmann\RecursionContext\InvalidArgumentException * @throws ExpectationFailedException */ public static function assertStringNotContainsString(string $needle, string $haystack, string $message = ''): void { $constraint = new LogicalNot(new StringContains($needle)); static::assertThat($haystack, $constraint, $message); } /** * @throws \SebastianBergmann\RecursionContext\InvalidArgumentException * @throws ExpectationFailedException */ public static function assertStringNotContainsStringIgnoringCase(string $needle, string $haystack, string $message = ''): void { $constraint = new LogicalNot(new StringContains($needle, true)); static::assertThat($haystack, $constraint, $message); } /** * Asserts that a string ends with a given suffix. * * @throws \SebastianBergmann\RecursionContext\InvalidArgumentException * @throws ExpectationFailedException */ public static function assertStringEndsWith(string $suffix, string $string, string $message = ''): void { static::assertThat($string, new StringEndsWith($suffix), $message); } /** * Asserts that a string ends not with a given suffix. * * @throws \SebastianBergmann\RecursionContext\InvalidArgumentException * @throws ExpectationFailedException */ public static function assertStringEndsNotWith(string $suffix, string $string, string $message = ''): void { static::assertThat( $string, new LogicalNot( new StringEndsWith($suffix) ), $message ); } /** * Asserts that two XML files are equal. * * @throws \SebastianBergmann\RecursionContext\InvalidArgumentException * @throws Exception * @throws ExpectationFailedException */ public static function assertXmlFileEqualsXmlFile(string $expectedFile, string $actualFile, string $message = ''): void { $expected = Xml::loadFile($expectedFile); $actual = Xml::loadFile($actualFile); static::assertEquals($expected, $actual, $message); } /** * Asserts that two XML files are not equal. * * @throws \SebastianBergmann\RecursionContext\InvalidArgumentException * @throws Exception * @throws ExpectationFailedException */ public static function assertXmlFileNotEqualsXmlFile(string $expectedFile, string $actualFile, string $message = ''): void { $expected = Xml::loadFile($expectedFile); $actual = Xml::loadFile($actualFile); static::assertNotEquals($expected, $actual, $message); } /** * Asserts that two XML documents are equal. * * @param DOMDocument|string $actualXml * * @throws \SebastianBergmann\RecursionContext\InvalidArgumentException * @throws Exception * @throws ExpectationFailedException */ public static function assertXmlStringEqualsXmlFile(string $expectedFile, $actualXml, string $message = ''): void { $expected = Xml::loadFile($expectedFile); $actual = Xml::load($actualXml); static::assertEquals($expected, $actual, $message); } /** * Asserts that two XML documents are not equal. * * @param DOMDocument|string $actualXml * * @throws \SebastianBergmann\RecursionContext\InvalidArgumentException * @throws Exception * @throws ExpectationFailedException */ public static function assertXmlStringNotEqualsXmlFile(string $expectedFile, $actualXml, string $message = ''): void { $expected = Xml::loadFile($expectedFile); $actual = Xml::load($actualXml); static::assertNotEquals($expected, $actual, $message); } /** * Asserts that two XML documents are equal. * * @param DOMDocument|string $expectedXml * @param DOMDocument|string $actualXml * * @throws \SebastianBergmann\RecursionContext\InvalidArgumentException * @throws Exception * @throws ExpectationFailedException */ public static function assertXmlStringEqualsXmlString($expectedXml, $actualXml, string $message = ''): void { $expected = Xml::load($expectedXml); $actual = Xml::load($actualXml); static::assertEquals($expected, $actual, $message); } /** * Asserts that two XML documents are not equal. * * @param DOMDocument|string $expectedXml * @param DOMDocument|string $actualXml * * @throws \SebastianBergmann\RecursionContext\InvalidArgumentException * @throws Exception * @throws ExpectationFailedException */ public static function assertXmlStringNotEqualsXmlString($expectedXml, $actualXml, string $message = ''): void { $expected = Xml::load($expectedXml); $actual = Xml::load($actualXml); static::assertNotEquals($expected, $actual, $message); } /** * Asserts that a hierarchy of DOMElements matches. * * @throws \SebastianBergmann\RecursionContext\InvalidArgumentException * @throws AssertionFailedError * @throws ExpectationFailedException */ public static function assertEqualXMLStructure(DOMElement $expectedElement, DOMElement $actualElement, bool $checkAttributes = false, string $message = ''): void { $expectedElement = Xml::import($expectedElement); $actualElement = Xml::import($actualElement); static::assertSame( $expectedElement->tagName, $actualElement->tagName, $message ); if ($checkAttributes) { static::assertSame( $expectedElement->attributes->length, $actualElement->attributes->length, sprintf( '%s%sNumber of attributes on node "%s" does not match', $message, !empty($message) ? "\n" : '', $expectedElement->tagName ) ); for ($i = 0; $i < $expectedElement->attributes->length; $i++) { $expectedAttribute = $expectedElement->attributes->item($i); $actualAttribute = $actualElement->attributes->getNamedItem($expectedAttribute->name); assert($expectedAttribute instanceof DOMAttr); if (!$actualAttribute) { static::fail( sprintf( '%s%sCould not find attribute "%s" on node "%s"', $message, !empty($message) ? "\n" : '', $expectedAttribute->name, $expectedElement->tagName ) ); } } } Xml::removeCharacterDataNodes($expectedElement); Xml::removeCharacterDataNodes($actualElement); static::assertSame( $expectedElement->childNodes->length, $actualElement->childNodes->length, sprintf( '%s%sNumber of child nodes of "%s" differs', $message, !empty($message) ? "\n" : '', $expectedElement->tagName ) ); for ($i = 0; $i < $expectedElement->childNodes->length; $i++) { static::assertEqualXMLStructure( $expectedElement->childNodes->item($i), $actualElement->childNodes->item($i), $checkAttributes, $message ); } } /** * Evaluates a PHPUnit\Framework\Constraint matcher object. * * @throws \SebastianBergmann\RecursionContext\InvalidArgumentException * @throws ExpectationFailedException */ public static function assertThat($value, Constraint $constraint, string $message = ''): void { self::$count += count($constraint); $constraint->evaluate($value, $message); } /** * Asserts that a string is a valid JSON string. * * @throws \SebastianBergmann\RecursionContext\InvalidArgumentException * @throws ExpectationFailedException */ public static function assertJson(string $actualJson, string $message = ''): void { static::assertThat($actualJson, static::isJson(), $message); } /** * Asserts that two given JSON encoded objects or arrays are equal. * * @throws \SebastianBergmann\RecursionContext\InvalidArgumentException * @throws ExpectationFailedException */ public static function assertJsonStringEqualsJsonString(string $expectedJson, string $actualJson, string $message = ''): void { static::assertJson($expectedJson, $message); static::assertJson($actualJson, $message); static::assertThat($actualJson, new JsonMatches($expectedJson), $message); } /** * Asserts that two given JSON encoded objects or arrays are not equal. * * @param string $expectedJson * @param string $actualJson * * @throws \SebastianBergmann\RecursionContext\InvalidArgumentException * @throws ExpectationFailedException */ public static function assertJsonStringNotEqualsJsonString($expectedJson, $actualJson, string $message = ''): void { static::assertJson($expectedJson, $message); static::assertJson($actualJson, $message); static::assertThat( $actualJson, new LogicalNot( new JsonMatches($expectedJson) ), $message ); } /** * Asserts that the generated JSON encoded object and the content of the given file are equal. * * @throws \SebastianBergmann\RecursionContext\InvalidArgumentException * @throws ExpectationFailedException */ public static function assertJsonStringEqualsJsonFile(string $expectedFile, string $actualJson, string $message = ''): void { static::assertFileExists($expectedFile, $message); $expectedJson = file_get_contents($expectedFile); static::assertJson($expectedJson, $message); static::assertJson($actualJson, $message); static::assertThat($actualJson, new JsonMatches($expectedJson), $message); } /** * Asserts that the generated JSON encoded object and the content of the given file are not equal. * * @throws \SebastianBergmann\RecursionContext\InvalidArgumentException * @throws ExpectationFailedException */ public static function assertJsonStringNotEqualsJsonFile(string $expectedFile, string $actualJson, string $message = ''): void { static::assertFileExists($expectedFile, $message); $expectedJson = file_get_contents($expectedFile); static::assertJson($expectedJson, $message); static::assertJson($actualJson, $message); static::assertThat( $actualJson, new LogicalNot( new JsonMatches($expectedJson) ), $message ); } /** * Asserts that two JSON files are equal. * * @throws \SebastianBergmann\RecursionContext\InvalidArgumentException * @throws ExpectationFailedException */ public static function assertJsonFileEqualsJsonFile(string $expectedFile, string $actualFile, string $message = ''): void { static::assertFileExists($expectedFile, $message); static::assertFileExists($actualFile, $message); $actualJson = file_get_contents($actualFile); $expectedJson = file_get_contents($expectedFile); static::assertJson($expectedJson, $message); static::assertJson($actualJson, $message); $constraintExpected = new JsonMatches( $expectedJson ); $constraintActual = new JsonMatches($actualJson); static::assertThat($expectedJson, $constraintActual, $message); static::assertThat($actualJson, $constraintExpected, $message); } /** * Asserts that two JSON files are not equal. * * @throws \SebastianBergmann\RecursionContext\InvalidArgumentException * @throws ExpectationFailedException */ public static function assertJsonFileNotEqualsJsonFile(string $expectedFile, string $actualFile, string $message = ''): void { static::assertFileExists($expectedFile, $message); static::assertFileExists($actualFile, $message); $actualJson = file_get_contents($actualFile); $expectedJson = file_get_contents($expectedFile); static::assertJson($expectedJson, $message); static::assertJson($actualJson, $message); $constraintExpected = new JsonMatches( $expectedJson ); $constraintActual = new JsonMatches($actualJson); static::assertThat($expectedJson, new LogicalNot($constraintActual), $message); static::assertThat($actualJson, new LogicalNot($constraintExpected), $message); } /** * @throws Exception */ public static function logicalAnd(): LogicalAnd { $constraints = func_get_args(); $constraint = new LogicalAnd; $constraint->setConstraints($constraints); return $constraint; } public static function logicalOr(): LogicalOr { $constraints = func_get_args(); $constraint = new LogicalOr; $constraint->setConstraints($constraints); return $constraint; } public static function logicalNot(Constraint $constraint): LogicalNot { return new LogicalNot($constraint); } public static function logicalXor(): LogicalXor { $constraints = func_get_args(); $constraint = new LogicalXor; $constraint->setConstraints($constraints); return $constraint; } public static function anything(): IsAnything { return new IsAnything; } public static function isTrue(): IsTrue { return new IsTrue; } /** * @psalm-template CallbackInput of mixed * * @psalm-param callable(CallbackInput $callback): bool $callback * * @psalm-return Callback */ public static function callback(callable $callback): Callback { return new Callback($callback); } public static function isFalse(): IsFalse { return new IsFalse; } public static function isJson(): IsJson { return new IsJson; } public static function isNull(): IsNull { return new IsNull; } public static function isFinite(): IsFinite { return new IsFinite; } public static function isInfinite(): IsInfinite { return new IsInfinite; } public static function isNan(): IsNan { return new IsNan; } /** * @deprecated https://github.com/sebastianbergmann/phpunit/issues/3338 * * @codeCoverageIgnore */ public static function attribute(Constraint $constraint, string $attributeName): Attribute { self::createWarning('attribute() is deprecated and will be removed in PHPUnit 9.'); return new Attribute($constraint, $attributeName); } /** * @deprecated Use containsEqual() or containsIdentical() instead */ public static function contains($value, bool $checkForObjectIdentity = true, bool $checkForNonObjectIdentity = false): TraversableContains { return new TraversableContains($value, $checkForObjectIdentity, $checkForNonObjectIdentity); } public static function containsEqual($value): TraversableContainsEqual { return new TraversableContainsEqual($value); } public static function containsIdentical($value): TraversableContainsIdentical { return new TraversableContainsIdentical($value); } public static function containsOnly(string $type): TraversableContainsOnly { return new TraversableContainsOnly($type); } public static function containsOnlyInstancesOf(string $className): TraversableContainsOnly { return new TraversableContainsOnly($className, false); } /** * @param int|string $key */ public static function arrayHasKey($key): ArrayHasKey { return new ArrayHasKey($key); } public static function equalTo($value, float $delta = 0.0, int $maxDepth = 10, bool $canonicalize = false, bool $ignoreCase = false): IsEqual { return new IsEqual($value, $delta, $maxDepth, $canonicalize, $ignoreCase); } /** * @deprecated https://github.com/sebastianbergmann/phpunit/issues/3338 * * @codeCoverageIgnore */ public static function attributeEqualTo(string $attributeName, $value, float $delta = 0.0, int $maxDepth = 10, bool $canonicalize = false, bool $ignoreCase = false): Attribute { self::createWarning('attributeEqualTo() is deprecated and will be removed in PHPUnit 9.'); return static::attribute( static::equalTo( $value, $delta, $maxDepth, $canonicalize, $ignoreCase ), $attributeName ); } public static function isEmpty(): IsEmpty { return new IsEmpty; } public static function isWritable(): IsWritable { return new IsWritable; } public static function isReadable(): IsReadable { return new IsReadable; } public static function directoryExists(): DirectoryExists { return new DirectoryExists; } public static function fileExists(): FileExists { return new FileExists; } public static function greaterThan($value): GreaterThan { return new GreaterThan($value); } public static function greaterThanOrEqual($value): LogicalOr { return static::logicalOr( new IsEqual($value), new GreaterThan($value) ); } public static function classHasAttribute(string $attributeName): ClassHasAttribute { return new ClassHasAttribute($attributeName); } public static function classHasStaticAttribute(string $attributeName): ClassHasStaticAttribute { return new ClassHasStaticAttribute($attributeName); } public static function objectHasAttribute($attributeName): ObjectHasAttribute { return new ObjectHasAttribute($attributeName); } public static function identicalTo($value): IsIdentical { return new IsIdentical($value); } public static function isInstanceOf(string $className): IsInstanceOf { return new IsInstanceOf($className); } public static function isType(string $type): IsType { return new IsType($type); } public static function lessThan($value): LessThan { return new LessThan($value); } public static function lessThanOrEqual($value): LogicalOr { return static::logicalOr( new IsEqual($value), new LessThan($value) ); } public static function matchesRegularExpression(string $pattern): RegularExpression { return new RegularExpression($pattern); } public static function matches(string $string): StringMatchesFormatDescription { return new StringMatchesFormatDescription($string); } public static function stringStartsWith($prefix): StringStartsWith { return new StringStartsWith($prefix); } public static function stringContains(string $string, bool $case = true): StringContains { return new StringContains($string, $case); } public static function stringEndsWith(string $suffix): StringEndsWith { return new StringEndsWith($suffix); } public static function countOf(int $count): Count { return new Count($count); } /** * Fails a test with the given message. * * @throws AssertionFailedError * * @psalm-return never-return */ public static function fail(string $message = ''): void { self::$count++; throw new AssertionFailedError($message); } /** * Returns the value of an attribute of a class or an object. * This also works for attributes that are declared protected or private. * * @param object|string $classOrObject * * @throws Exception * * @deprecated https://github.com/sebastianbergmann/phpunit/issues/3338 * * @codeCoverageIgnore */ public static function readAttribute($classOrObject, string $attributeName) { self::createWarning('readAttribute() is deprecated and will be removed in PHPUnit 9.'); if (!self::isValidClassAttributeName($attributeName)) { throw InvalidArgumentException::create(2, 'valid attribute name'); } if (is_string($classOrObject)) { if (!class_exists($classOrObject)) { throw InvalidArgumentException::create( 1, 'class name' ); } return static::getStaticAttribute( $classOrObject, $attributeName ); } if (is_object($classOrObject)) { return static::getObjectAttribute( $classOrObject, $attributeName ); } throw InvalidArgumentException::create( 1, 'class name or object' ); } /** * Returns the value of a static attribute. * This also works for attributes that are declared protected or private. * * @throws Exception * * @deprecated https://github.com/sebastianbergmann/phpunit/issues/3338 * * @codeCoverageIgnore */ public static function getStaticAttribute(string $className, string $attributeName) { self::createWarning('getStaticAttribute() is deprecated and will be removed in PHPUnit 9.'); if (!class_exists($className)) { throw InvalidArgumentException::create(1, 'class name'); } if (!self::isValidClassAttributeName($attributeName)) { throw InvalidArgumentException::create(2, 'valid attribute name'); } try { $class = new ReflectionClass($className); // @codeCoverageIgnoreStart } catch (ReflectionException $e) { throw new Exception( $e->getMessage(), $e->getCode(), $e ); } // @codeCoverageIgnoreEnd while ($class) { $attributes = $class->getStaticProperties(); if (array_key_exists($attributeName, $attributes)) { return $attributes[$attributeName]; } $class = $class->getParentClass(); } throw new Exception( sprintf( 'Attribute "%s" not found in class.', $attributeName ) ); } /** * Returns the value of an object's attribute. * This also works for attributes that are declared protected or private. * * @param object $object * * @throws Exception * * @deprecated https://github.com/sebastianbergmann/phpunit/issues/3338 * * @codeCoverageIgnore */ public static function getObjectAttribute($object, string $attributeName) { self::createWarning('getObjectAttribute() is deprecated and will be removed in PHPUnit 9.'); if (!is_object($object)) { throw InvalidArgumentException::create(1, 'object'); } if (!self::isValidClassAttributeName($attributeName)) { throw InvalidArgumentException::create(2, 'valid attribute name'); } $reflector = new ReflectionObject($object); do { try { $attribute = $reflector->getProperty($attributeName); if (!$attribute || $attribute->isPublic()) { return $object->{$attributeName}; } $attribute->setAccessible(true); $value = $attribute->getValue($object); $attribute->setAccessible(false); return $value; } catch (ReflectionException $e) { } } while ($reflector = $reflector->getParentClass()); throw new Exception( sprintf( 'Attribute "%s" not found in object.', $attributeName ) ); } /** * Mark the test as incomplete. * * @throws IncompleteTestError * * @psalm-return never-return */ public static function markTestIncomplete(string $message = ''): void { throw new IncompleteTestError($message); } /** * Mark the test as skipped. * * @throws SkippedTestError * @throws SyntheticSkippedError * * @psalm-return never-return */ public static function markTestSkipped(string $message = ''): void { if ($hint = self::detectLocationHint($message)) { $trace = debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS); array_unshift($trace, $hint); throw new SyntheticSkippedError($hint['message'], 0, $hint['file'], (int) $hint['line'], $trace); } throw new SkippedTestError($message); } /** * Return the current assertion count. */ public static function getCount(): int { return self::$count; } /** * Reset the assertion counter. */ public static function resetCount(): void { self::$count = 0; } private static function detectLocationHint(string $message): ?array { $hint = null; $lines = preg_split('/\r\n|\r|\n/', $message); while (strpos($lines[0], '__OFFSET') !== false) { $offset = explode('=', array_shift($lines)); if ($offset[0] === '__OFFSET_FILE') { $hint['file'] = $offset[1]; } if ($offset[0] === '__OFFSET_LINE') { $hint['line'] = $offset[1]; } } if ($hint) { $hint['message'] = implode(PHP_EOL, $lines); } return $hint; } private static function isValidObjectAttributeName(string $attributeName): bool { return (bool) preg_match('/[^\x00-\x1f\x7f-\x9f]+/', $attributeName); } private static function isValidClassAttributeName(string $attributeName): bool { return (bool) preg_match('/[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*/', $attributeName); } /** * @codeCoverageIgnore */ private static function createWarning(string $warning): void { foreach (debug_backtrace() as $step) { if (isset($step['object']) && $step['object'] instanceof TestCase) { assert($step['object'] instanceof TestCase); $step['object']->addWarning($warning); break; } } } /** * @throws Exception */ private static function assertInternalTypeReplacement(string $type, bool $not): string { switch ($type) { case 'numeric': return 'assertIs' . ($not ? 'Not' : '') . 'Numeric'; case 'integer': case 'int': return 'assertIs' . ($not ? 'Not' : '') . 'Int'; case 'double': case 'float': case 'real': return 'assertIs' . ($not ? 'Not' : '') . 'Float'; case 'string': return 'assertIs' . ($not ? 'Not' : '') . 'String'; case 'boolean': case 'bool': return 'assertIs' . ($not ? 'Not' : '') . 'Bool'; case 'null': return 'assert' . ($not ? 'Not' : '') . 'Null'; case 'array': return 'assertIs' . ($not ? 'Not' : '') . 'Array'; case 'object': return 'assertIs' . ($not ? 'Not' : '') . 'Object'; case 'resource': return 'assertIs' . ($not ? 'Not' : '') . 'Resource'; case 'scalar': return 'assertIs' . ($not ? 'Not' : '') . 'Scalar'; case 'callable': return 'assertIs' . ($not ? 'Not' : '') . 'Callable'; case 'iterable': return 'assertIs' . ($not ? 'Not' : '') . 'Iterable'; } throw new Exception( sprintf( '"%s" is not a type supported by assertInternalType() / assertNotInternalType()', $type ) ); } } PK!Çͼ�˜˜mfile-manager-advanced/application/svg-sanitizer/includes/phpunit/phpunit/src/Framework/IncompleteTestCase.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace PHPUnit\Framework; use SebastianBergmann\RecursionContext\InvalidArgumentException; /** * @internal This class is not covered by the backward compatibility promise for PHPUnit */ final class IncompleteTestCase extends TestCase { /** * @var ?bool */ protected $backupGlobals = false; /** * @var ?bool */ protected $backupStaticAttributes = false; /** * @var ?bool */ protected $runTestInSeparateProcess = false; /** * @var string */ private $message; public function __construct(string $className, string $methodName, string $message = '') { parent::__construct($className . '::' . $methodName); $this->message = $message; } public function getMessage(): string { return $this->message; } /** * Returns a string representation of the test case. * * @throws InvalidArgumentException */ public function toString(): string { return $this->getName(); } /** * @throws Exception */ protected function runTest(): void { $this->markTestIncomplete($this->message); } } PK!”�˜JJkfile-manager-advanced/application/svg-sanitizer/includes/phpunit/phpunit/src/Framework/Error/Deprecated.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace PHPUnit\Framework\Error; final class Deprecated extends Error { } PK!¤œ}GGhfile-manager-advanced/application/svg-sanitizer/includes/phpunit/phpunit/src/Framework/Error/Warning.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace PHPUnit\Framework\Error; final class Warning extends Error { } PK!ð"o“FFgfile-manager-advanced/application/svg-sanitizer/includes/phpunit/phpunit/src/Framework/Error/Notice.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace PHPUnit\Framework\Error; final class Notice extends Error { } PK!¾]Û>XXffile-manager-advanced/application/svg-sanitizer/includes/phpunit/phpunit/src/Framework/Error/Error.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace PHPUnit\Framework\Error; use PHPUnit\Framework\Exception; class Error extends Exception { public function __construct(string $message, int $code, string $file, int $line, ?\Exception $previous = null) { parent::__construct($message, $code, $previous); $this->file = $file; $this->line = $line; } } PK!_-äÍ55ffile-manager-advanced/application/svg-sanitizer/includes/phpunit/phpunit/src/Framework/TestFailure.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace PHPUnit\Framework; use function get_class; use function sprintf; use function trim; use PHPUnit\Framework\Error\Error; use Throwable; /** * @internal This class is not covered by the backward compatibility promise for PHPUnit */ final class TestFailure { /** * @var null|Test */ private $failedTest; /** * @var Throwable */ private $thrownException; /** * @var string */ private $testName; /** * Returns a description for an exception. */ public static function exceptionToString(Throwable $e): string { if ($e instanceof SelfDescribing) { $buffer = $e->toString(); if ($e instanceof ExpectationFailedException && $e->getComparisonFailure()) { $buffer .= $e->getComparisonFailure()->getDiff(); } if ($e instanceof PHPTAssertionFailedError) { $buffer .= $e->getDiff(); } if (!empty($buffer)) { $buffer = trim($buffer) . "\n"; } return $buffer; } if ($e instanceof Error) { return $e->getMessage() . "\n"; } if ($e instanceof ExceptionWrapper) { return $e->getClassName() . ': ' . $e->getMessage() . "\n"; } return get_class($e) . ': ' . $e->getMessage() . "\n"; } /** * Constructs a TestFailure with the given test and exception. * * @param Throwable $t */ public function __construct(Test $failedTest, $t) { if ($failedTest instanceof SelfDescribing) { $this->testName = $failedTest->toString(); } else { $this->testName = get_class($failedTest); } if (!$failedTest instanceof TestCase || !$failedTest->isInIsolation()) { $this->failedTest = $failedTest; } $this->thrownException = $t; } /** * Returns a short description of the failure. */ public function toString(): string { return sprintf( '%s: %s', $this->testName, $this->thrownException->getMessage() ); } /** * Returns a description for the thrown exception. */ public function getExceptionAsString(): string { return self::exceptionToString($this->thrownException); } /** * Returns the name of the failing test (including data set, if any). */ public function getTestName(): string { return $this->testName; } /** * Returns the failing test. * * Note: The test object is not set when the test is executed in process * isolation. * * @see Exception */ public function failedTest(): ?Test { return $this->failedTest; } /** * Gets the thrown exception. */ public function thrownException(): Throwable { return $this->thrownException; } /** * Returns the exception's message. */ public function exceptionMessage(): string { return $this->thrownException()->getMessage(); } /** * Returns true if the thrown exception * is of type AssertionFailedError. */ public function isFailure(): bool { return $this->thrownException() instanceof AssertionFailedError; } } PK!àc€ÂÒÒffile-manager-advanced/application/svg-sanitizer/includes/phpunit/phpunit/src/Framework/TestBuilder.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace PHPUnit\Framework; use function assert; use function count; use function get_class; use function sprintf; use function trim; use PHPUnit\Util\Filter; use PHPUnit\Util\InvalidDataSetException; use PHPUnit\Util\Test as TestUtil; use ReflectionClass; use Throwable; /** * @internal This class is not covered by the backward compatibility promise for PHPUnit */ final class TestBuilder { public function build(ReflectionClass $theClass, string $methodName): Test { $className = $theClass->getName(); if (!$theClass->isInstantiable()) { return new WarningTestCase( sprintf('Cannot instantiate class "%s".', $className) ); } $backupSettings = TestUtil::getBackupSettings( $className, $methodName ); $preserveGlobalState = TestUtil::getPreserveGlobalStateSettings( $className, $methodName ); $runTestInSeparateProcess = TestUtil::getProcessIsolationSettings( $className, $methodName ); $runClassInSeparateProcess = TestUtil::getClassProcessIsolationSettings( $className, $methodName ); $constructor = $theClass->getConstructor(); if ($constructor === null) { throw new Exception('No valid test provided.'); } $parameters = $constructor->getParameters(); // TestCase() or TestCase($name) if (count($parameters) < 2) { $test = $this->buildTestWithoutData($className); } // TestCase($name, $data) else { try { $data = TestUtil::getProvidedData( $className, $methodName ); } catch (IncompleteTestError $e) { $message = sprintf( "Test for %s::%s marked incomplete by data provider\n%s", $className, $methodName, $this->throwableToString($e) ); $data = new IncompleteTestCase($className, $methodName, $message); } catch (SkippedTestError $e) { $message = sprintf( "Test for %s::%s skipped by data provider\n%s", $className, $methodName, $this->throwableToString($e) ); $data = new SkippedTestCase($className, $methodName, $message); } catch (Throwable $t) { $message = sprintf( "The data provider specified for %s::%s is invalid.\n%s", $className, $methodName, $this->throwableToString($t) ); $data = new WarningTestCase($message); } // Test method with @dataProvider. if (isset($data)) { $test = $this->buildDataProviderTestSuite( $methodName, $className, $data, $runTestInSeparateProcess, $preserveGlobalState, $runClassInSeparateProcess, $backupSettings ); } else { $test = $this->buildTestWithoutData($className); } } if ($test instanceof TestCase) { $test->setName($methodName); $this->configureTestCase( $test, $runTestInSeparateProcess, $preserveGlobalState, $runClassInSeparateProcess, $backupSettings ); } return $test; } /** @psalm-param class-string $className */ private function buildTestWithoutData(string $className) { return new $className; } /** @psalm-param class-string $className */ private function buildDataProviderTestSuite( string $methodName, string $className, $data, bool $runTestInSeparateProcess, ?bool $preserveGlobalState, bool $runClassInSeparateProcess, array $backupSettings ): DataProviderTestSuite { $dataProviderTestSuite = new DataProviderTestSuite( $className . '::' . $methodName ); $groups = TestUtil::getGroups($className, $methodName); if ($data instanceof WarningTestCase || $data instanceof SkippedTestCase || $data instanceof IncompleteTestCase) { $dataProviderTestSuite->addTest($data, $groups); } else { foreach ($data as $_dataName => $_data) { $_test = new $className($methodName, $_data, $_dataName); assert($_test instanceof TestCase); $this->configureTestCase( $_test, $runTestInSeparateProcess, $preserveGlobalState, $runClassInSeparateProcess, $backupSettings ); $dataProviderTestSuite->addTest($_test, $groups); } } return $dataProviderTestSuite; } private function configureTestCase( TestCase $test, bool $runTestInSeparateProcess, ?bool $preserveGlobalState, bool $runClassInSeparateProcess, array $backupSettings ): void { if ($runTestInSeparateProcess) { $test->setRunTestInSeparateProcess(true); if ($preserveGlobalState !== null) { $test->setPreserveGlobalState($preserveGlobalState); } } if ($runClassInSeparateProcess) { $test->setRunClassInSeparateProcess(true); if ($preserveGlobalState !== null) { $test->setPreserveGlobalState($preserveGlobalState); } } if ($backupSettings['backupGlobals'] !== null) { $test->setBackupGlobals($backupSettings['backupGlobals']); } if ($backupSettings['backupStaticAttributes'] !== null) { $test->setBackupStaticAttributes( $backupSettings['backupStaticAttributes'] ); } } private function throwableToString(Throwable $t): string { $message = $t->getMessage(); if (empty(trim($message))) { $message = ''; } if ($t instanceof InvalidDataSetException) { return sprintf( "%s\n%s", $message, Filter::getFilteredStacktrace($t) ); } return sprintf( "%s: %s\n%s", get_class($t), $message, Filter::getFilteredStacktrace($t) ); } } PK!ƒœŒ!ùùlfile-manager-advanced/application/svg-sanitizer/includes/phpunit/phpunit/src/Framework/TestSuiteIterator.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace PHPUnit\Framework; use function assert; use function count; use RecursiveIterator; /** * @template-implements RecursiveIterator * * @internal This class is not covered by the backward compatibility promise for PHPUnit */ final class TestSuiteIterator implements RecursiveIterator { /** * @var int */ private $position = 0; /** * @var Test[] */ private $tests; public function __construct(TestSuite $testSuite) { $this->tests = $testSuite->tests(); } public function rewind(): void { $this->position = 0; } public function valid(): bool { return $this->position < count($this->tests); } public function key(): int { return $this->position; } public function current(): Test { return $this->tests[$this->position]; } public function next(): void { $this->position++; } /** * @throws NoChildTestSuiteException */ public function getChildren(): self { if (!$this->hasChildren()) { throw new NoChildTestSuiteException( 'The current item is not a TestSuite instance and therefore does not have any children.' ); } $current = $this->current(); assert($current instanceof TestSuite); return new self($current); } public function hasChildren(): bool { return $this->valid() && $this->current() instanceof TestSuite; } } PK!Öð�¶ññnfile-manager-advanced/application/svg-sanitizer/includes/phpunit/phpunit/src/Framework/Constraint/Callback.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace PHPUnit\Framework\Constraint; /** * Constraint that evaluates against a specified closure. * * @psalm-template CallbackInput of mixed */ final class Callback extends Constraint { /** * @var callable * * @psalm-var callable(CallbackInput $input): bool */ private $callback; /** @psalm-param callable(CallbackInput $input): bool $callback */ public function __construct(callable $callback) { $this->callback = $callback; } /** * Returns a string representation of the constraint. */ public function toString(): string { return 'is accepted by specified callback'; } /** * Evaluates the constraint for parameter $value. Returns true if the * constraint is met, false otherwise. * * @param mixed $other value or object to evaluate * * @psalm-param CallbackInput $other */ protected function matches($other): bool { return ($this->callback)($other); } } PK!jh h yfile-manager-advanced/application/svg-sanitizer/includes/phpunit/phpunit/src/Framework/Constraint/TraversableContains.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace PHPUnit\Framework\Constraint; use function is_array; use function is_object; use function is_string; use function sprintf; use function strpos; use SebastianBergmann\RecursionContext\InvalidArgumentException; use SplObjectStorage; /** * Constraint that asserts that the Traversable it is applied to contains * a given value. * * @deprecated Use TraversableContainsEqual or TraversableContainsIdentical instead */ final class TraversableContains extends Constraint { /** * @var bool */ private $checkForObjectIdentity; /** * @var bool */ private $checkForNonObjectIdentity; /** * @var mixed */ private $value; public function __construct($value, bool $checkForObjectIdentity = true, bool $checkForNonObjectIdentity = false) { $this->checkForObjectIdentity = $checkForObjectIdentity; $this->checkForNonObjectIdentity = $checkForNonObjectIdentity; $this->value = $value; } /** * Returns a string representation of the constraint. * * @throws InvalidArgumentException */ public function toString(): string { if (is_string($this->value) && strpos($this->value, "\n") !== false) { return 'contains "' . $this->value . '"'; } return 'contains ' . $this->exporter()->export($this->value); } /** * Evaluates the constraint for parameter $other. Returns true if the * constraint is met, false otherwise. * * @param mixed $other value or object to evaluate */ protected function matches($other): bool { if ($other instanceof SplObjectStorage) { return $other->contains($this->value); } if (is_object($this->value)) { foreach ($other as $element) { if ($this->checkForObjectIdentity && $element === $this->value) { return true; } /* @noinspection TypeUnsafeComparisonInspection */ if (!$this->checkForObjectIdentity && $element == $this->value) { return true; } } } else { foreach ($other as $element) { if ($this->checkForNonObjectIdentity && $element === $this->value) { return true; } /* @noinspection TypeUnsafeComparisonInspection */ if (!$this->checkForNonObjectIdentity && $element == $this->value) { return true; } } } return false; } /** * Returns the description of the failure. * * The beginning of failure messages is "Failed asserting that" in most * cases. This method should return the second part of that sentence. * * @param mixed $other evaluated value or object * * @throws InvalidArgumentException */ protected function failureDescription($other): string { return sprintf( '%s %s', is_array($other) ? 'an array' : 'a traversable', $this->toString() ); } } PK!:…ÅÑÑ‚file-manager-advanced/application/svg-sanitizer/includes/phpunit/phpunit/src/Framework/Constraint/TraversableContainsIdentical.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace PHPUnit\Framework\Constraint; use function is_array; use function is_string; use function sprintf; use function strpos; use SebastianBergmann\RecursionContext\InvalidArgumentException; use SplObjectStorage; /** * Constraint that asserts that the Traversable it is applied to contains * a given value (using strict comparison). */ final class TraversableContainsIdentical extends Constraint { /** * @var mixed */ private $value; public function __construct($value) { $this->value = $value; } /** * Returns a string representation of the constraint. * * @throws InvalidArgumentException */ public function toString(): string { if (is_string($this->value) && strpos($this->value, "\n") !== false) { return 'contains "' . $this->value . '"'; } return 'contains ' . $this->exporter()->export($this->value); } /** * Evaluates the constraint for parameter $other. Returns true if the * constraint is met, false otherwise. * * @param mixed $other value or object to evaluate */ protected function matches($other): bool { if ($other instanceof SplObjectStorage) { return $other->contains($this->value); } foreach ($other as $element) { if ($this->value === $element) { return true; } } return false; } /** * Returns the description of the failure. * * The beginning of failure messages is "Failed asserting that" in most * cases. This method should return the second part of that sentence. * * @param mixed $other evaluated value or object * * @throws InvalidArgumentException */ protected function failureDescription($other): string { return sprintf( '%s %s', is_array($other) ? 'an array' : 'a traversable', $this->toString() ); } } PK!?¨Šµ…file-manager-advanced/application/svg-sanitizer/includes/phpunit/phpunit/src/Framework/Constraint/JsonMatchesErrorMessageProvider.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace PHPUnit\Framework\Constraint; use const JSON_ERROR_CTRL_CHAR; use const JSON_ERROR_DEPTH; use const JSON_ERROR_NONE; use const JSON_ERROR_STATE_MISMATCH; use const JSON_ERROR_SYNTAX; use const JSON_ERROR_UTF8; use function strtolower; /** * Provides human readable messages for each JSON error. */ final class JsonMatchesErrorMessageProvider { /** * Translates JSON error to a human readable string. */ public static function determineJsonError(string $error, string $prefix = ''): ?string { switch ($error) { case JSON_ERROR_NONE: return null; case JSON_ERROR_DEPTH: return $prefix . 'Maximum stack depth exceeded'; case JSON_ERROR_STATE_MISMATCH: return $prefix . 'Underflow or the modes mismatch'; case JSON_ERROR_CTRL_CHAR: return $prefix . 'Unexpected control character found'; case JSON_ERROR_SYNTAX: return $prefix . 'Syntax error, malformed JSON'; case JSON_ERROR_UTF8: return $prefix . 'Malformed UTF-8 characters, possibly incorrectly encoded'; default: return $prefix . 'Unknown error'; } } /** * Translates a given type to a human readable message prefix. */ public static function translateTypeToPrefix(string $type): string { switch (strtolower($type)) { case 'expected': $prefix = 'Expected value JSON decode error - '; break; case 'actual': $prefix = 'Actual value JSON decode error - '; break; default: $prefix = ''; break; } return $prefix; } } PK!¼Gp«��qfile-manager-advanced/application/svg-sanitizer/includes/phpunit/phpunit/src/Framework/Constraint/ArraySubset.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace PHPUnit\Framework\Constraint; use function array_replace_recursive; use function is_array; use function iterator_to_array; use function var_export; use ArrayObject; use PHPUnit\Framework\ExpectationFailedException; use SebastianBergmann\Comparator\ComparisonFailure; use SebastianBergmann\RecursionContext\InvalidArgumentException; use Traversable; /** * Constraint that asserts that the array it is evaluated for has a specified subset. * * Uses array_replace_recursive() to check if a key value subset is part of the * subject array. * * @codeCoverageIgnore * * @deprecated https://github.com/sebastianbergmann/phpunit/issues/3494 */ final class ArraySubset extends Constraint { /** * @var iterable */ private $subset; /** * @var bool */ private $strict; public function __construct(iterable $subset, bool $strict = false) { $this->strict = $strict; $this->subset = $subset; } /** * Evaluates the constraint for parameter $other. * * If $returnResult is set to false (the default), an exception is thrown * in case of a failure. null is returned otherwise. * * If $returnResult is true, the result of the evaluation is returned as * a boolean value instead: true in case of success, false in case of a * failure. * * @throws ExpectationFailedException * @throws InvalidArgumentException */ public function evaluate($other, string $description = '', bool $returnResult = false) { // type cast $other & $this->subset as an array to allow // support in standard array functions. $other = $this->toArray($other); $this->subset = $this->toArray($this->subset); $patched = array_replace_recursive($other, $this->subset); if ($this->strict) { $result = $other === $patched; } else { $result = $other == $patched; } if ($returnResult) { return $result; } if (!$result) { $f = new ComparisonFailure( $patched, $other, var_export($patched, true), var_export($other, true) ); $this->fail($other, $description, $f); } } /** * Returns a string representation of the constraint. * * @throws InvalidArgumentException */ public function toString(): string { return 'has the subset ' . $this->exporter()->export($this->subset); } /** * Returns the description of the failure. * * The beginning of failure messages is "Failed asserting that" in most * cases. This method should return the second part of that sentence. * * @param mixed $other evaluated value or object * * @throws InvalidArgumentException */ protected function failureDescription($other): string { return 'an array ' . $this->toString(); } private function toArray(iterable $other): array { if (is_array($other)) { return $other; } if ($other instanceof ArrayObject) { return $other->getArrayCopy(); } if ($other instanceof Traversable) { return iterator_to_array($other); } // Keep BC even if we know that array would not be the expected one return (array) $other; } } PK!"ï¥  ofile-manager-advanced/application/svg-sanitizer/includes/phpunit/phpunit/src/Framework/Constraint/LogicalOr.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace PHPUnit\Framework\Constraint; use function array_values; use function count; use PHPUnit\Framework\ExpectationFailedException; use SebastianBergmann\RecursionContext\InvalidArgumentException; /** * Logical OR. */ final class LogicalOr extends Constraint { /** * @var Constraint[] */ private $constraints = []; public static function fromConstraints(Constraint ...$constraints): self { $constraint = new self; $constraint->constraints = array_values($constraints); return $constraint; } /** * @param Constraint[] $constraints */ public function setConstraints(array $constraints): void { $this->constraints = []; foreach ($constraints as $constraint) { if (!($constraint instanceof Constraint)) { $constraint = new IsEqual( $constraint ); } $this->constraints[] = $constraint; } } /** * Evaluates the constraint for parameter $other. * * If $returnResult is set to false (the default), an exception is thrown * in case of a failure. null is returned otherwise. * * If $returnResult is true, the result of the evaluation is returned as * a boolean value instead: true in case of success, false in case of a * failure. * * @throws ExpectationFailedException * @throws InvalidArgumentException */ public function evaluate($other, string $description = '', bool $returnResult = false) { $success = false; foreach ($this->constraints as $constraint) { if ($constraint->evaluate($other, $description, true)) { $success = true; break; } } if ($returnResult) { return $success; } if (!$success) { $this->fail($other, $description); } } /** * Returns a string representation of the constraint. */ public function toString(): string { $text = ''; foreach ($this->constraints as $key => $constraint) { if ($key > 0) { $text .= ' or '; } $text .= $constraint->toString(); } return $text; } /** * Counts the number of constraint elements. */ public function count(): int { $count = 0; foreach ($this->constraints as $constraint) { $count += count($constraint); } return $count; } } PK!^ÞÁy''qfile-manager-advanced/application/svg-sanitizer/includes/phpunit/phpunit/src/Framework/Constraint/ArrayHasKey.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace PHPUnit\Framework\Constraint; use function array_key_exists; use function is_array; use ArrayAccess; use SebastianBergmann\RecursionContext\InvalidArgumentException; /** * Constraint that asserts that the array it is evaluated for has a given key. * * Uses array_key_exists() to check if the key is found in the input array, if * not found the evaluation fails. * * The array key is passed in the constructor. */ final class ArrayHasKey extends Constraint { /** * @var int|string */ private $key; /** * @param int|string $key */ public function __construct($key) { $this->key = $key; } /** * Returns a string representation of the constraint. * * @throws InvalidArgumentException */ public function toString(): string { return 'has the key ' . $this->exporter()->export($this->key); } /** * Evaluates the constraint for parameter $other. Returns true if the * constraint is met, false otherwise. * * @param mixed $other value or object to evaluate */ protected function matches($other): bool { if (is_array($other)) { return array_key_exists($this->key, $other); } if ($other instanceof ArrayAccess) { return $other->offsetExists($this->key); } return false; } /** * Returns the description of the failure. * * The beginning of failure messages is "Failed asserting that" in most * cases. This method should return the second part of that sentence. * * @param mixed $other evaluated value or object * * @throws InvalidArgumentException */ protected function failureDescription($other): string { return 'an array ' . $this->toString(); } } PK!€%Z„íímfile-manager-advanced/application/svg-sanitizer/includes/phpunit/phpunit/src/Framework/Constraint/IsEqual.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace PHPUnit\Framework\Constraint; use function is_string; use function sprintf; use function strpos; use function trim; use PHPUnit\Framework\ExpectationFailedException; use SebastianBergmann\Comparator\ComparisonFailure; use SebastianBergmann\Comparator\Factory as ComparatorFactory; use SebastianBergmann\RecursionContext\InvalidArgumentException; /** * Constraint that checks if one value is equal to another. * * Equality is checked with PHP's == operator, the operator is explained in * detail at {@url https://php.net/manual/en/types.comparisons.php}. * Two values are equal if they have the same value disregarding type. * * The expected value is passed in the constructor. */ final class IsEqual extends Constraint { /** * @var mixed */ private $value; /** * @var float */ private $delta; /** * @var bool */ private $canonicalize; /** * @var bool */ private $ignoreCase; public function __construct($value, float $delta = 0.0, int $maxDepth = 10, bool $canonicalize = false, bool $ignoreCase = false) { $this->value = $value; $this->delta = $delta; $this->canonicalize = $canonicalize; $this->ignoreCase = $ignoreCase; } /** * Evaluates the constraint for parameter $other. * * If $returnResult is set to false (the default), an exception is thrown * in case of a failure. null is returned otherwise. * * If $returnResult is true, the result of the evaluation is returned as * a boolean value instead: true in case of success, false in case of a * failure. * * @throws ExpectationFailedException */ public function evaluate($other, string $description = '', bool $returnResult = false) { // If $this->value and $other are identical, they are also equal. // This is the most common path and will allow us to skip // initialization of all the comparators. if ($this->value === $other) { return true; } $comparatorFactory = ComparatorFactory::getInstance(); try { $comparator = $comparatorFactory->getComparatorFor( $this->value, $other ); $comparator->assertEquals( $this->value, $other, $this->delta, $this->canonicalize, $this->ignoreCase ); } catch (ComparisonFailure $f) { if ($returnResult) { return false; } throw new ExpectationFailedException( trim($description . "\n" . $f->getMessage()), $f ); } return true; } /** * Returns a string representation of the constraint. * * @throws InvalidArgumentException */ public function toString(): string { $delta = ''; if (is_string($this->value)) { if (strpos($this->value, "\n") !== false) { return 'is equal to '; } return sprintf( "is equal to '%s'", $this->value ); } if ($this->delta != 0) { $delta = sprintf( ' with delta <%F>', $this->delta ); } return sprintf( 'is equal to %s%s', $this->exporter()->export($this->value), $delta ); } } PK!‰›t`bbxfile-manager-advanced/application/svg-sanitizer/includes/phpunit/phpunit/src/Framework/Constraint/ObjectHasAttribute.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace PHPUnit\Framework\Constraint; use ReflectionObject; /** * Constraint that asserts that the object it is evaluated for has a given * attribute. * * The attribute name is passed in the constructor. */ final class ObjectHasAttribute extends ClassHasAttribute { /** * Evaluates the constraint for parameter $other. Returns true if the * constraint is met, false otherwise. * * @param mixed $other value or object to evaluate */ protected function matches($other): bool { return (new ReflectionObject($other))->hasProperty($this->attributeName()); } } PK! Çõ¬66pfile-manager-advanced/application/svg-sanitizer/includes/phpunit/phpunit/src/Framework/Constraint/LogicalNot.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace PHPUnit\Framework\Constraint; use function count; use function get_class; use function preg_match; use function str_replace; use PHPUnit\Framework\ExpectationFailedException; use SebastianBergmann\RecursionContext\InvalidArgumentException; /** * Logical NOT. */ final class LogicalNot extends Constraint { /** * @var Constraint */ private $constraint; public static function negate(string $string): string { $positives = [ 'contains ', 'exists', 'has ', 'is ', 'are ', 'matches ', 'starts with ', 'ends with ', 'reference ', 'not not ', ]; $negatives = [ 'does not contain ', 'does not exist', 'does not have ', 'is not ', 'are not ', 'does not match ', 'starts not with ', 'ends not with ', 'don\'t reference ', 'not ', ]; preg_match('/(\'[\w\W]*\')([\w\W]*)("[\w\W]*")/i', $string, $matches); if (count($matches) > 0) { $nonInput = $matches[2]; $negatedString = str_replace( $nonInput, str_replace( $positives, $negatives, $nonInput ), $string ); } else { $negatedString = str_replace( $positives, $negatives, $string ); } return $negatedString; } /** * @param Constraint|mixed $constraint */ public function __construct($constraint) { if (!($constraint instanceof Constraint)) { $constraint = new IsEqual($constraint); } $this->constraint = $constraint; } /** * Evaluates the constraint for parameter $other. * * If $returnResult is set to false (the default), an exception is thrown * in case of a failure. null is returned otherwise. * * If $returnResult is true, the result of the evaluation is returned as * a boolean value instead: true in case of success, false in case of a * failure. * * @throws ExpectationFailedException * @throws InvalidArgumentException */ public function evaluate($other, string $description = '', bool $returnResult = false) { $success = !$this->constraint->evaluate($other, $description, true); if ($returnResult) { return $success; } if (!$success) { $this->fail($other, $description); } } /** * Returns a string representation of the constraint. */ public function toString(): string { switch (get_class($this->constraint)) { case LogicalAnd::class: case self::class: case LogicalOr::class: return 'not( ' . $this->constraint->toString() . ' )'; default: return self::negate( $this->constraint->toString() ); } } /** * Counts the number of constraint elements. */ public function count(): int { return count($this->constraint); } /** * Returns the description of the failure. * * The beginning of failure messages is "Failed asserting that" in most * cases. This method should return the second part of that sentence. * * @param mixed $other evaluated value or object * * @throws InvalidArgumentException */ protected function failureDescription($other): string { switch (get_class($this->constraint)) { case LogicalAnd::class: case self::class: case LogicalOr::class: return 'not( ' . $this->constraint->failureDescription($other) . ' )'; default: return self::negate( $this->constraint->failureDescription($other) ); } } } PK!øi*ŽÈÈnfile-manager-advanced/application/svg-sanitizer/includes/phpunit/phpunit/src/Framework/Constraint/SameSize.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace PHPUnit\Framework\Constraint; final class SameSize extends Count { public function __construct(iterable $expected) { parent::__construct($this->getCountOf($expected)); } } PK!gð””pfile-manager-advanced/application/svg-sanitizer/includes/phpunit/phpunit/src/Framework/Constraint/IsWritable.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace PHPUnit\Framework\Constraint; use function is_writable; use function sprintf; /** * Constraint that checks if the file/dir(name) that it is evaluated for is writable. * * The file path to check is passed as $other in evaluate(). */ final class IsWritable extends Constraint { /** * Returns a string representation of the constraint. */ public function toString(): string { return 'is writable'; } /** * Evaluates the constraint for parameter $other. Returns true if the * constraint is met, false otherwise. * * @param mixed $other value or object to evaluate */ protected function matches($other): bool { return is_writable($other); } /** * Returns the description of the failure. * * The beginning of failure messages is "Failed asserting that" in most * cases. This method should return the second part of that sentence. * * @param mixed $other evaluated value or object */ protected function failureDescription($other): string { return sprintf( '"%s" is writable', $other ); } } PK!8`£-  ~file-manager-advanced/application/svg-sanitizer/includes/phpunit/phpunit/src/Framework/Constraint/TraversableContainsEqual.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace PHPUnit\Framework\Constraint; use function is_array; use function is_string; use function sprintf; use function strpos; use SebastianBergmann\RecursionContext\InvalidArgumentException; use SplObjectStorage; /** * Constraint that asserts that the Traversable it is applied to contains * a given value (using non-strict comparison). */ final class TraversableContainsEqual extends Constraint { /** * @var mixed */ private $value; public function __construct($value) { $this->value = $value; } /** * Returns a string representation of the constraint. * * @throws InvalidArgumentException */ public function toString(): string { if (is_string($this->value) && strpos($this->value, "\n") !== false) { return 'contains "' . $this->value . '"'; } return 'contains ' . $this->exporter()->export($this->value); } /** * Evaluates the constraint for parameter $other. Returns true if the * constraint is met, false otherwise. * * @param mixed $other value or object to evaluate */ protected function matches($other): bool { if ($other instanceof SplObjectStorage) { return $other->contains($this->value); } foreach ($other as $element) { /* @noinspection TypeUnsafeComparisonInspection */ if ($this->value == $element) { return true; } } return false; } /** * Returns the description of the failure. * * The beginning of failure messages is "Failed asserting that" in most * cases. This method should return the second part of that sentence. * * @param mixed $other evaluated value or object * * @throws InvalidArgumentException */ protected function failureDescription($other): string { return sprintf( '%s %s', is_array($other) ? 'an array' : 'a traversable', $this->toString() ); } } PK!ƒ£Ù‚‚ofile-manager-advanced/application/svg-sanitizer/includes/phpunit/phpunit/src/Framework/Constraint/Composite.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace PHPUnit\Framework\Constraint; use function count; use PHPUnit\Framework\ExpectationFailedException; use SebastianBergmann\RecursionContext\InvalidArgumentException; /** * @deprecated https://github.com/sebastianbergmann/phpunit/issues/3338 * * @codeCoverageIgnore */ abstract class Composite extends Constraint { /** * @var Constraint */ private $innerConstraint; public function __construct(Constraint $innerConstraint) { $this->innerConstraint = $innerConstraint; } /** * Evaluates the constraint for parameter $other. * * If $returnResult is set to false (the default), an exception is thrown * in case of a failure. null is returned otherwise. * * If $returnResult is true, the result of the evaluation is returned as * a boolean value instead: true in case of success, false in case of a * failure. * * @throws ExpectationFailedException * @throws InvalidArgumentException */ public function evaluate($other, string $description = '', bool $returnResult = false) { try { return $this->innerConstraint->evaluate( $other, $description, $returnResult ); } catch (ExpectationFailedException $e) { $this->fail($other, $description, $e->getComparisonFailure()); } } /** * Counts the number of constraint elements. */ public function count(): int { return count($this->innerConstraint); } protected function innerConstraint(): Constraint { return $this->innerConstraint; } } PK!ð}~¤  pfile-manager-advanced/application/svg-sanitizer/includes/phpunit/phpunit/src/Framework/Constraint/IsAnything.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace PHPUnit\Framework\Constraint; use PHPUnit\Framework\ExpectationFailedException; /** * Constraint that accepts any input value. */ final class IsAnything extends Constraint { /** * Evaluates the constraint for parameter $other. * * If $returnResult is set to false (the default), an exception is thrown * in case of a failure. null is returned otherwise. * * If $returnResult is true, the result of the evaluation is returned as * a boolean value instead: true in case of success, false in case of a * failure. * * @throws ExpectationFailedException */ public function evaluate($other, string $description = '', bool $returnResult = false) { return $returnResult ? true : null; } /** * Returns a string representation of the constraint. */ public function toString(): string { return 'is anything'; } /** * Counts the number of constraint elements. */ public function count(): int { return 0; } } PK!»nnvfile-manager-advanced/application/svg-sanitizer/includes/phpunit/phpunit/src/Framework/Constraint/ExceptionMessage.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace PHPUnit\Framework\Constraint; use function sprintf; use function strpos; use Throwable; final class ExceptionMessage extends Constraint { /** * @var string */ private $expectedMessage; public function __construct(string $expected) { $this->expectedMessage = $expected; } public function toString(): string { if ($this->expectedMessage === '') { return 'exception message is empty'; } return 'exception message contains '; } /** * Evaluates the constraint for parameter $other. Returns true if the * constraint is met, false otherwise. * * @param Throwable $other */ protected function matches($other): bool { if ($this->expectedMessage === '') { return $other->getMessage() === ''; } return strpos((string) $other->getMessage(), $this->expectedMessage) !== false; } /** * Returns the description of the failure. * * The beginning of failure messages is "Failed asserting that" in most * cases. This method should return the second part of that sentence. * * @param mixed $other evaluated value or object */ protected function failureDescription($other): string { if ($this->expectedMessage === '') { return sprintf( "exception message is empty but is '%s'", $other->getMessage() ); } return sprintf( "exception message '%s' contains '%s'", $other->getMessage(), $this->expectedMessage ); } } PK!Õü••ufile-manager-advanced/application/svg-sanitizer/includes/phpunit/phpunit/src/Framework/Constraint/DirectoryExists.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace PHPUnit\Framework\Constraint; use function is_dir; use function sprintf; /** * Constraint that checks if the directory(name) that it is evaluated for exists. * * The file path to check is passed as $other in evaluate(). */ final class DirectoryExists extends Constraint { /** * Returns a string representation of the constraint. */ public function toString(): string { return 'directory exists'; } /** * Evaluates the constraint for parameter $other. Returns true if the * constraint is met, false otherwise. * * @param mixed $other value or object to evaluate */ protected function matches($other): bool { return is_dir($other); } /** * Returns the description of the failure. * * The beginning of failure messages is "Failed asserting that" in most * cases. This method should return the second part of that sentence. * * @param mixed $other evaluated value or object */ protected function failureDescription($other): string { return sprintf( 'directory "%s" exists', $other ); } } PK!¦÷‘ѯ¯}file-manager-advanced/application/svg-sanitizer/includes/phpunit/phpunit/src/Framework/Constraint/TraversableContainsOnly.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace PHPUnit\Framework\Constraint; use PHPUnit\Framework\Exception; use PHPUnit\Framework\ExpectationFailedException; use SebastianBergmann\RecursionContext\InvalidArgumentException; /** * Constraint that asserts that the Traversable it is applied to contains * only values of a given type. */ final class TraversableContainsOnly extends Constraint { /** * @var Constraint */ private $constraint; /** * @var string */ private $type; /** * @throws Exception */ public function __construct(string $type, bool $isNativeType = true) { if ($isNativeType) { $this->constraint = new IsType($type); } else { $this->constraint = new IsInstanceOf( $type ); } $this->type = $type; } /** * Evaluates the constraint for parameter $other. * * If $returnResult is set to false (the default), an exception is thrown * in case of a failure. null is returned otherwise. * * If $returnResult is true, the result of the evaluation is returned as * a boolean value instead: true in case of success, false in case of a * failure. * * @throws ExpectationFailedException * @throws InvalidArgumentException */ public function evaluate($other, string $description = '', bool $returnResult = false) { $success = true; foreach ($other as $item) { if (!$this->constraint->evaluate($item, '', true)) { $success = false; break; } } if ($returnResult) { return $success; } if (!$success) { $this->fail($other, $description); } } /** * Returns a string representation of the constraint. */ public function toString(): string { return 'contains only values of type "' . $this->type . '"'; } } PK!Õuö«óóofile-manager-advanced/application/svg-sanitizer/includes/phpunit/phpunit/src/Framework/Constraint/Attribute.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace PHPUnit\Framework\Constraint; use PHPUnit\Framework\Assert; use PHPUnit\Framework\Exception; use PHPUnit\Framework\ExpectationFailedException; use SebastianBergmann\RecursionContext\InvalidArgumentException; /** * @deprecated https://github.com/sebastianbergmann/phpunit/issues/3338 * * @codeCoverageIgnore */ final class Attribute extends Composite { /** * @var string */ private $attributeName; public function __construct(Constraint $constraint, string $attributeName) { parent::__construct($constraint); $this->attributeName = $attributeName; } /** * Evaluates the constraint for parameter $other. * * If $returnResult is set to false (the default), an exception is thrown * in case of a failure. null is returned otherwise. * * If $returnResult is true, the result of the evaluation is returned as * a boolean value instead: true in case of success, false in case of a * failure. * * @throws Exception * @throws ExpectationFailedException * @throws InvalidArgumentException */ public function evaluate($other, string $description = '', bool $returnResult = false) { return parent::evaluate( Assert::readAttribute( $other, $this->attributeName ), $description, $returnResult ); } /** * Returns a string representation of the constraint. */ public function toString(): string { return 'attribute "' . $this->attributeName . '" ' . $this->innerConstraint()->toString(); } /** * Returns the description of the failure. * * The beginning of failure messages is "Failed asserting that" in most * cases. This method should return the second part of that sentence. * * @param mixed $other evaluated value or object */ protected function failureDescription($other): string { return $this->toString(); } } PK!$ ÙÙrfile-manager-advanced/application/svg-sanitizer/includes/phpunit/phpunit/src/Framework/Constraint/IsInstanceOf.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace PHPUnit\Framework\Constraint; use function sprintf; use ReflectionClass; use ReflectionException; use SebastianBergmann\RecursionContext\InvalidArgumentException; /** * Constraint that asserts that the object it is evaluated for is an instance * of a given class. * * The expected class name is passed in the constructor. */ final class IsInstanceOf extends Constraint { /** * @var string */ private $className; public function __construct(string $className) { $this->className = $className; } /** * Returns a string representation of the constraint. */ public function toString(): string { return sprintf( 'is instance of %s "%s"', $this->getType(), $this->className ); } /** * Evaluates the constraint for parameter $other. Returns true if the * constraint is met, false otherwise. * * @param mixed $other value or object to evaluate */ protected function matches($other): bool { return $other instanceof $this->className; } /** * Returns the description of the failure. * * The beginning of failure messages is "Failed asserting that" in most * cases. This method should return the second part of that sentence. * * @param mixed $other evaluated value or object * * @throws InvalidArgumentException */ protected function failureDescription($other): string { return sprintf( '%s is an instance of %s "%s"', $this->exporter()->shortenedExport($other), $this->getType(), $this->className ); } private function getType(): string { try { $reflection = new ReflectionClass($this->className); if ($reflection->isInterface()) { return 'interface'; } } catch (ReflectionException $e) { } return 'class'; } } PK!«,DóMM}file-manager-advanced/application/svg-sanitizer/includes/phpunit/phpunit/src/Framework/Constraint/ClassHasStaticAttribute.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace PHPUnit\Framework\Constraint; use function sprintf; use PHPUnit\Framework\Exception; use ReflectionClass; use ReflectionException; /** * Constraint that asserts that the class it is evaluated for has a given * static attribute. * * The attribute name is passed in the constructor. */ final class ClassHasStaticAttribute extends ClassHasAttribute { /** * Returns a string representation of the constraint. */ public function toString(): string { return sprintf( 'has static attribute "%s"', $this->attributeName() ); } /** * Evaluates the constraint for parameter $other. Returns true if the * constraint is met, false otherwise. * * @param mixed $other value or object to evaluate */ protected function matches($other): bool { try { $class = new ReflectionClass($other); if ($class->hasProperty($this->attributeName())) { return $class->getProperty($this->attributeName())->isStatic(); } // @codeCoverageIgnoreStart } catch (ReflectionException $e) { throw new Exception( $e->getMessage(), $e->getCode(), $e ); } // @codeCoverageIgnoreEnd return false; } } PK!ʹ½d??kfile-manager-advanced/application/svg-sanitizer/includes/phpunit/phpunit/src/Framework/Constraint/IsNan.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace PHPUnit\Framework\Constraint; use function is_nan; /** * Constraint that accepts nan. */ final class IsNan extends Constraint { /** * Returns a string representation of the constraint. */ public function toString(): string { return 'is nan'; } /** * Evaluates the constraint for parameter $other. Returns true if the * constraint is met, false otherwise. * * @param mixed $other value or object to evaluate */ protected function matches($other): bool { return is_nan($other); } } PK!ï2Ä�--lfile-manager-advanced/application/svg-sanitizer/includes/phpunit/phpunit/src/Framework/Constraint/IsTrue.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace PHPUnit\Framework\Constraint; /** * Constraint that accepts true. */ final class IsTrue extends Constraint { /** * Returns a string representation of the constraint. */ public function toString(): string { return 'is true'; } /** * Evaluates the constraint for parameter $other. Returns true if the * constraint is met, false otherwise. * * @param mixed $other value or object to evaluate */ protected function matches($other): bool { return $other === true; } } PK!„ø¶Ä��‡file-manager-advanced/application/svg-sanitizer/includes/phpunit/phpunit/src/Framework/Constraint/ExceptionMessageRegularExpression.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace PHPUnit\Framework\Constraint; use function sprintf; use Exception; use PHPUnit\Util\RegularExpression as RegularExpressionUtil; final class ExceptionMessageRegularExpression extends Constraint { /** * @var string */ private $expectedMessageRegExp; public function __construct(string $expected) { $this->expectedMessageRegExp = $expected; } public function toString(): string { return 'exception message matches '; } /** * Evaluates the constraint for parameter $other. Returns true if the * constraint is met, false otherwise. * * @param \PHPUnit\Framework\Exception $other * * @throws \PHPUnit\Framework\Exception * @throws Exception */ protected function matches($other): bool { $match = RegularExpressionUtil::safeMatch($this->expectedMessageRegExp, $other->getMessage()); if ($match === false) { throw new \PHPUnit\Framework\Exception( "Invalid expected exception message regex given: '{$this->expectedMessageRegExp}'" ); } return $match === 1; } /** * Returns the description of the failure. * * The beginning of failure messages is "Failed asserting that" in most * cases. This method should return the second part of that sentence. * * @param mixed $other evaluated value or object */ protected function failureDescription($other): string { return sprintf( "exception message '%s' matches '%s'", $other->getMessage(), $this->expectedMessageRegExp ); } } PK!/ KH””pfile-manager-advanced/application/svg-sanitizer/includes/phpunit/phpunit/src/Framework/Constraint/IsReadable.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace PHPUnit\Framework\Constraint; use function is_readable; use function sprintf; /** * Constraint that checks if the file/dir(name) that it is evaluated for is readable. * * The file path to check is passed as $other in evaluate(). */ final class IsReadable extends Constraint { /** * Returns a string representation of the constraint. */ public function toString(): string { return 'is readable'; } /** * Evaluates the constraint for parameter $other. Returns true if the * constraint is met, false otherwise. * * @param mixed $other value or object to evaluate */ protected function matches($other): bool { return is_readable($other); } /** * Returns the description of the failure. * * The beginning of failure messages is "Failed asserting that" in most * cases. This method should return the second part of that sentence. * * @param mixed $other evaluated value or object */ protected function failureDescription($other): string { return sprintf( '"%s" is readable', $other ); } } PK!­_¬Íˆˆlfile-manager-advanced/application/svg-sanitizer/includes/phpunit/phpunit/src/Framework/Constraint/IsJson.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace PHPUnit\Framework\Constraint; use function json_decode; use function json_last_error; use function sprintf; use SebastianBergmann\RecursionContext\InvalidArgumentException; /** * Constraint that asserts that a string is valid JSON. */ final class IsJson extends Constraint { /** * Returns a string representation of the constraint. */ public function toString(): string { return 'is valid JSON'; } /** * Evaluates the constraint for parameter $other. Returns true if the * constraint is met, false otherwise. * * @param mixed $other value or object to evaluate */ protected function matches($other): bool { if ($other === '') { return false; } json_decode($other); if (json_last_error()) { return false; } return true; } /** * Returns the description of the failure. * * The beginning of failure messages is "Failed asserting that" in most * cases. This method should return the second part of that sentence. * * @param mixed $other evaluated value or object * * @throws InvalidArgumentException */ protected function failureDescription($other): string { if ($other === '') { return 'an empty string is valid JSON'; } json_decode($other); $error = JsonMatchesErrorMessageProvider::determineJsonError( (string) json_last_error() ); return sprintf( '%s is valid JSON (%s)', $this->exporter()->shortenedExport($other), $error ); } } PK!¶ˆ11mfile-manager-advanced/application/svg-sanitizer/includes/phpunit/phpunit/src/Framework/Constraint/IsFalse.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace PHPUnit\Framework\Constraint; /** * Constraint that accepts false. */ final class IsFalse extends Constraint { /** * Returns a string representation of the constraint. */ public function toString(): string { return 'is false'; } /** * Evaluates the constraint for parameter $other. Returns true if the * constraint is met, false otherwise. * * @param mixed $other value or object to evaluate */ protected function matches($other): bool { return $other === false; } } PK!É­w�--lfile-manager-advanced/application/svg-sanitizer/includes/phpunit/phpunit/src/Framework/Constraint/IsNull.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace PHPUnit\Framework\Constraint; /** * Constraint that accepts null. */ final class IsNull extends Constraint { /** * Returns a string representation of the constraint. */ public function toString(): string { return 'is null'; } /** * Evaluates the constraint for parameter $other. Returns true if the * constraint is met, false otherwise. * * @param mixed $other value or object to evaluate */ protected function matches($other): bool { return $other === null; } } PK!IµNNnfile-manager-advanced/application/svg-sanitizer/includes/phpunit/phpunit/src/Framework/Constraint/IsFinite.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace PHPUnit\Framework\Constraint; use function is_finite; /** * Constraint that accepts finite. */ final class IsFinite extends Constraint { /** * Returns a string representation of the constraint. */ public function toString(): string { return 'is finite'; } /** * Evaluates the constraint for parameter $other. Returns true if the * constraint is met, false otherwise. * * @param mixed $other value or object to evaluate */ protected function matches($other): bool { return is_finite($other); } } PK!w�˜Ð‹‹pfile-manager-advanced/application/svg-sanitizer/includes/phpunit/phpunit/src/Framework/Constraint/FileExists.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace PHPUnit\Framework\Constraint; use function file_exists; use function sprintf; /** * Constraint that checks if the file(name) that it is evaluated for exists. * * The file path to check is passed as $other in evaluate(). */ final class FileExists extends Constraint { /** * Returns a string representation of the constraint. */ public function toString(): string { return 'file exists'; } /** * Evaluates the constraint for parameter $other. Returns true if the * constraint is met, false otherwise. * * @param mixed $other value or object to evaluate */ protected function matches($other): bool { return file_exists($other); } /** * Returns the description of the failure. * * The beginning of failure messages is "Failed asserting that" in most * cases. This method should return the second part of that sentence. * * @param mixed $other evaluated value or object */ protected function failureDescription($other): string { return sprintf( 'file "%s" exists', $other ); } } PK!Ù/V¸ååpfile-manager-advanced/application/svg-sanitizer/includes/phpunit/phpunit/src/Framework/Constraint/Constraint.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace PHPUnit\Framework\Constraint; use function sprintf; use Countable; use PHPUnit\Framework\ExpectationFailedException; use PHPUnit\Framework\SelfDescribing; use SebastianBergmann\Comparator\ComparisonFailure; use SebastianBergmann\Exporter\Exporter; use SebastianBergmann\RecursionContext\InvalidArgumentException; /** * Abstract base class for constraints which can be applied to any value. */ abstract class Constraint implements Countable, SelfDescribing { /** * @var Exporter */ private $exporter; /** * Evaluates the constraint for parameter $other. * * If $returnResult is set to false (the default), an exception is thrown * in case of a failure. null is returned otherwise. * * If $returnResult is true, the result of the evaluation is returned as * a boolean value instead: true in case of success, false in case of a * failure. * * @throws ExpectationFailedException * @throws InvalidArgumentException */ public function evaluate($other, string $description = '', bool $returnResult = false) { $success = false; if ($this->matches($other)) { $success = true; } if ($returnResult) { return $success; } if (!$success) { $this->fail($other, $description); } } /** * Counts the number of constraint elements. */ public function count(): int { return 1; } protected function exporter(): Exporter { if ($this->exporter === null) { $this->exporter = new Exporter; } return $this->exporter; } /** * Evaluates the constraint for parameter $other. Returns true if the * constraint is met, false otherwise. * * This method can be overridden to implement the evaluation algorithm. * * @param mixed $other value or object to evaluate * * @codeCoverageIgnore */ protected function matches($other): bool { return false; } /** * Throws an exception for the given compared value and test description. * * @param mixed $other evaluated value or object * @param string $description Additional information about the test * * @throws ExpectationFailedException * @throws InvalidArgumentException * * @psalm-return never-return */ protected function fail($other, $description, ?ComparisonFailure $comparisonFailure = null): void { $failureDescription = sprintf( 'Failed asserting that %s.', $this->failureDescription($other) ); $additionalFailureDescription = $this->additionalFailureDescription($other); if ($additionalFailureDescription) { $failureDescription .= "\n" . $additionalFailureDescription; } if (!empty($description)) { $failureDescription = $description . "\n" . $failureDescription; } throw new ExpectationFailedException( $failureDescription, $comparisonFailure ); } /** * Return additional failure description where needed. * * The function can be overridden to provide additional failure * information like a diff * * @param mixed $other evaluated value or object */ protected function additionalFailureDescription($other): string { return ''; } /** * Returns the description of the failure. * * The beginning of failure messages is "Failed asserting that" in most * cases. This method should return the second part of that sentence. * * To provide additional failure information additionalFailureDescription * can be used. * * @param mixed $other evaluated value or object * * @throws InvalidArgumentException */ protected function failureDescription($other): string { return $this->exporter()->export($other) . ' ' . $this->toString(); } } PK!û±üÜŽ Ž qfile-manager-advanced/application/svg-sanitizer/includes/phpunit/phpunit/src/Framework/Constraint/JsonMatches.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace PHPUnit\Framework\Constraint; use function json_decode; use function sprintf; use PHPUnit\Framework\Exception; use PHPUnit\Framework\ExpectationFailedException; use PHPUnit\Util\Json; use SebastianBergmann\Comparator\ComparisonFailure; use SebastianBergmann\RecursionContext\InvalidArgumentException; /** * Asserts whether or not two JSON objects are equal. */ final class JsonMatches extends Constraint { /** * @var string */ private $value; public function __construct(string $value) { $this->value = $value; } /** * Returns a string representation of the object. */ public function toString(): string { return sprintf( 'matches JSON string "%s"', $this->value ); } /** * Evaluates the constraint for parameter $other. Returns true if the * constraint is met, false otherwise. * * This method can be overridden to implement the evaluation algorithm. * * @param mixed $other value or object to evaluate */ protected function matches($other): bool { [$error, $recodedOther] = Json::canonicalize($other); if ($error) { return false; } [$error, $recodedValue] = Json::canonicalize($this->value); if ($error) { return false; } return $recodedOther == $recodedValue; } /** * Throws an exception for the given compared value and test description. * * @param mixed $other evaluated value or object * @param string $description Additional information about the test * * @throws Exception * @throws ExpectationFailedException * @throws InvalidArgumentException * * @psalm-return never-return */ protected function fail($other, $description, ?ComparisonFailure $comparisonFailure = null): void { if ($comparisonFailure === null) { [$error, $recodedOther] = Json::canonicalize($other); if ($error) { parent::fail($other, $description); } [$error, $recodedValue] = Json::canonicalize($this->value); if ($error) { parent::fail($other, $description); } $comparisonFailure = new ComparisonFailure( json_decode($this->value), json_decode($other), Json::prettify($recodedValue), Json::prettify($recodedOther), false, 'Failed asserting that two json values are equal.' ); } parent::fail($other, $description, $comparisonFailure); } } PK!¤L]{XXpfile-manager-advanced/application/svg-sanitizer/includes/phpunit/phpunit/src/Framework/Constraint/IsInfinite.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace PHPUnit\Framework\Constraint; use function is_infinite; /** * Constraint that accepts infinite. */ final class IsInfinite extends Constraint { /** * Returns a string representation of the constraint. */ public function toString(): string { return 'is infinite'; } /** * Evaluates the constraint for parameter $other. Returns true if the * constraint is met, false otherwise. * * @param mixed $other value or object to evaluate */ protected function matches($other): bool { return is_infinite($other); } } PK!n²~ýofile-manager-advanced/application/svg-sanitizer/includes/phpunit/phpunit/src/Framework/Constraint/Exception.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace PHPUnit\Framework\Constraint; use function get_class; use function sprintf; use PHPUnit\Util\Filter; use Throwable; final class Exception extends Constraint { /** * @var string */ private $className; public function __construct(string $className) { $this->className = $className; } /** * Returns a string representation of the constraint. */ public function toString(): string { return sprintf( 'exception of type "%s"', $this->className ); } /** * Evaluates the constraint for parameter $other. Returns true if the * constraint is met, false otherwise. * * @param mixed $other value or object to evaluate */ protected function matches($other): bool { return $other instanceof $this->className; } /** * Returns the description of the failure. * * The beginning of failure messages is "Failed asserting that" in most * cases. This method should return the second part of that sentence. * * @param mixed $other evaluated value or object */ protected function failureDescription($other): string { if ($other !== null) { $message = ''; if ($other instanceof Throwable) { $message = '. Message was: "' . $other->getMessage() . '" at' . "\n" . Filter::getFilteredStacktrace($other); } return sprintf( 'exception of type "%s" matches expected exception "%s"%s', get_class($other), $this->className, $message ); } return sprintf( 'exception of type "%s" is thrown', $this->className ); } } PK!º’Õ™‹ ‹ pfile-manager-advanced/application/svg-sanitizer/includes/phpunit/phpunit/src/Framework/Constraint/LogicalXor.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace PHPUnit\Framework\Constraint; use function array_values; use function count; use PHPUnit\Framework\ExpectationFailedException; use SebastianBergmann\RecursionContext\InvalidArgumentException; /** * Logical XOR. */ final class LogicalXor extends Constraint { /** * @var Constraint[] */ private $constraints = []; public static function fromConstraints(Constraint ...$constraints): self { $constraint = new self; $constraint->constraints = array_values($constraints); return $constraint; } /** * @param Constraint[] $constraints */ public function setConstraints(array $constraints): void { $this->constraints = []; foreach ($constraints as $constraint) { if (!($constraint instanceof Constraint)) { $constraint = new IsEqual( $constraint ); } $this->constraints[] = $constraint; } } /** * Evaluates the constraint for parameter $other. * * If $returnResult is set to false (the default), an exception is thrown * in case of a failure. null is returned otherwise. * * If $returnResult is true, the result of the evaluation is returned as * a boolean value instead: true in case of success, false in case of a * failure. * * @throws ExpectationFailedException * @throws InvalidArgumentException */ public function evaluate($other, string $description = '', bool $returnResult = false) { $success = true; $lastResult = null; foreach ($this->constraints as $constraint) { $result = $constraint->evaluate($other, $description, true); if ($result === $lastResult) { $success = false; break; } $lastResult = $result; } if ($returnResult) { return $success; } if (!$success) { $this->fail($other, $description); } } /** * Returns a string representation of the constraint. */ public function toString(): string { $text = ''; foreach ($this->constraints as $key => $constraint) { if ($key > 0) { $text .= ' xor '; } $text .= $constraint->toString(); } return $text; } /** * Counts the number of constraint elements. */ public function count(): int { $count = 0; foreach ($this->constraints as $constraint) { $count += count($constraint); } return $count; } } PK!ð™�è wfile-manager-advanced/application/svg-sanitizer/includes/phpunit/phpunit/src/Framework/Constraint/ClassHasAttribute.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace PHPUnit\Framework\Constraint; use function get_class; use function is_object; use function sprintf; use PHPUnit\Framework\Exception; use ReflectionClass; use ReflectionException; /** * Constraint that asserts that the class it is evaluated for has a given * attribute. * * The attribute name is passed in the constructor. */ class ClassHasAttribute extends Constraint { /** * @var string */ private $attributeName; public function __construct(string $attributeName) { $this->attributeName = $attributeName; } /** * Returns a string representation of the constraint. */ public function toString(): string { return sprintf( 'has attribute "%s"', $this->attributeName ); } /** * Evaluates the constraint for parameter $other. Returns true if the * constraint is met, false otherwise. * * @param mixed $other value or object to evaluate */ protected function matches($other): bool { try { return (new ReflectionClass($other))->hasProperty($this->attributeName); // @codeCoverageIgnoreStart } catch (ReflectionException $e) { throw new Exception( $e->getMessage(), $e->getCode(), $e ); } // @codeCoverageIgnoreEnd } /** * Returns the description of the failure. * * The beginning of failure messages is "Failed asserting that" in most * cases. This method should return the second part of that sentence. * * @param mixed $other evaluated value or object */ protected function failureDescription($other): string { return sprintf( '%sclass "%s" %s', is_object($other) ? 'object of ' : '', is_object($other) ? get_class($other) : $other, $this->toString() ); } protected function attributeName(): string { return $this->attributeName; } } PK!©¡–©èèlfile-manager-advanced/application/svg-sanitizer/includes/phpunit/phpunit/src/Framework/Constraint/IsType.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace PHPUnit\Framework\Constraint; use function get_resource_type; use function is_array; use function is_bool; use function is_callable; use function is_float; use function is_int; use function is_iterable; use function is_numeric; use function is_object; use function is_resource; use function is_scalar; use function is_string; use function sprintf; use PHPUnit\Framework\Exception; use TypeError; /** * Constraint that asserts that the value it is evaluated for is of a * specified type. * * The expected value is passed in the constructor. */ final class IsType extends Constraint { /** * @var string */ public const TYPE_ARRAY = 'array'; /** * @var string */ public const TYPE_BOOL = 'bool'; /** * @var string */ public const TYPE_FLOAT = 'float'; /** * @var string */ public const TYPE_INT = 'int'; /** * @var string */ public const TYPE_NULL = 'null'; /** * @var string */ public const TYPE_NUMERIC = 'numeric'; /** * @var string */ public const TYPE_OBJECT = 'object'; /** * @var string */ public const TYPE_RESOURCE = 'resource'; /** * @var string */ public const TYPE_STRING = 'string'; /** * @var string */ public const TYPE_SCALAR = 'scalar'; /** * @var string */ public const TYPE_CALLABLE = 'callable'; /** * @var string */ public const TYPE_ITERABLE = 'iterable'; /** * @var array */ private const KNOWN_TYPES = [ 'array' => true, 'boolean' => true, 'bool' => true, 'double' => true, 'float' => true, 'integer' => true, 'int' => true, 'null' => true, 'numeric' => true, 'object' => true, 'real' => true, 'resource' => true, 'string' => true, 'scalar' => true, 'callable' => true, 'iterable' => true, ]; /** * @var string */ private $type; /** * @throws Exception */ public function __construct(string $type) { if (!isset(self::KNOWN_TYPES[$type])) { throw new Exception( sprintf( 'Type specified for PHPUnit\Framework\Constraint\IsType <%s> ' . 'is not a valid type.', $type ) ); } $this->type = $type; } /** * Returns a string representation of the constraint. */ public function toString(): string { return sprintf( 'is of type "%s"', $this->type ); } /** * Evaluates the constraint for parameter $other. Returns true if the * constraint is met, false otherwise. * * @param mixed $other value or object to evaluate */ protected function matches($other): bool { switch ($this->type) { case 'numeric': return is_numeric($other); case 'integer': case 'int': return is_int($other); case 'double': case 'float': case 'real': return is_float($other); case 'string': return is_string($other); case 'boolean': case 'bool': return is_bool($other); case 'null': return null === $other; case 'array': return is_array($other); case 'object': return is_object($other); case 'resource': if (is_resource($other)) { return true; } try { $resource = @get_resource_type($other); if (is_string($resource)) { return true; } } catch (TypeError $e) { } return false; case 'scalar': return is_scalar($other); case 'callable': return is_callable($other); case 'iterable': return is_iterable($other); } } } PK!P]'}}sfile-manager-advanced/application/svg-sanitizer/includes/phpunit/phpunit/src/Framework/Constraint/ExceptionCode.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace PHPUnit\Framework\Constraint; use function sprintf; use SebastianBergmann\RecursionContext\InvalidArgumentException; use Throwable; final class ExceptionCode extends Constraint { /** * @var int|string */ private $expectedCode; /** * @param int|string $expected */ public function __construct($expected) { $this->expectedCode = $expected; } public function toString(): string { return 'exception code is '; } /** * Evaluates the constraint for parameter $other. Returns true if the * constraint is met, false otherwise. * * @param Throwable $other */ protected function matches($other): bool { return (string) $other->getCode() === (string) $this->expectedCode; } /** * Returns the description of the failure. * * The beginning of failure messages is "Failed asserting that" in most * cases. This method should return the second part of that sentence. * * @param mixed $other evaluated value or object * * @throws InvalidArgumentException */ protected function failureDescription($other): string { return sprintf( '%s is equal to expected exception code %s', $this->exporter()->export($other->getCode()), $this->exporter()->export($this->expectedCode) ); } } PK!É.ä‹þþvfile-manager-advanced/application/svg-sanitizer/includes/phpunit/phpunit/src/Framework/Constraint/StringStartsWith.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace PHPUnit\Framework\Constraint; use function strpos; use PHPUnit\Framework\InvalidArgumentException; /** * Constraint that asserts that the string it is evaluated for begins with a * given prefix. */ final class StringStartsWith extends Constraint { /** * @var string */ private $prefix; public function __construct(string $prefix) { if ($prefix === '') { throw InvalidArgumentException::create(1, 'non-empty string'); } $this->prefix = $prefix; } /** * Returns a string representation of the constraint. */ public function toString(): string { return 'starts with "' . $this->prefix . '"'; } /** * Evaluates the constraint for parameter $other. Returns true if the * constraint is met, false otherwise. * * @param mixed $other value or object to evaluate */ protected function matches($other): bool { return strpos((string) $other, $this->prefix) === 0; } } PK!ÛÖÙÙqfile-manager-advanced/application/svg-sanitizer/includes/phpunit/phpunit/src/Framework/Constraint/GreaterThan.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace PHPUnit\Framework\Constraint; use SebastianBergmann\RecursionContext\InvalidArgumentException; /** * Constraint that asserts that the value it is evaluated for is greater * than a given value. */ final class GreaterThan extends Constraint { /** * @var float|int */ private $value; /** * @param float|int $value */ public function __construct($value) { $this->value = $value; } /** * Returns a string representation of the constraint. * * @throws InvalidArgumentException */ public function toString(): string { return 'is greater than ' . $this->exporter()->export($this->value); } /** * Evaluates the constraint for parameter $other. Returns true if the * constraint is met, false otherwise. * * @param mixed $other value or object to evaluate */ protected function matches($other): bool { return $this->value < $other; } } PK!o|2"  „file-manager-advanced/application/svg-sanitizer/includes/phpunit/phpunit/src/Framework/Constraint/StringMatchesFormatDescription.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace PHPUnit\Framework\Constraint; use const DIRECTORY_SEPARATOR; use function explode; use function implode; use function preg_match; use function preg_quote; use function preg_replace; use function strtr; use SebastianBergmann\Diff\Differ; /** * ... */ final class StringMatchesFormatDescription extends RegularExpression { /** * @var string */ private $string; public function __construct(string $string) { parent::__construct( $this->createPatternFromFormat( $this->convertNewlines($string) ) ); $this->string = $string; } /** * Evaluates the constraint for parameter $other. Returns true if the * constraint is met, false otherwise. * * @param mixed $other value or object to evaluate */ protected function matches($other): bool { return parent::matches( $this->convertNewlines($other) ); } protected function failureDescription($other): string { return 'string matches format description'; } protected function additionalFailureDescription($other): string { $from = explode("\n", $this->string); $to = explode("\n", $this->convertNewlines($other)); foreach ($from as $index => $line) { if (isset($to[$index]) && $line !== $to[$index]) { $line = $this->createPatternFromFormat($line); if (preg_match($line, $to[$index]) > 0) { $from[$index] = $to[$index]; } } } $this->string = implode("\n", $from); $other = implode("\n", $to); return (new Differ("--- Expected\n+++ Actual\n"))->diff($this->string, $other); } private function createPatternFromFormat(string $string): string { $string = strtr( preg_quote($string, '/'), [ '%%' => '%', '%e' => '\\' . DIRECTORY_SEPARATOR, '%s' => '[^\r\n]+', '%S' => '[^\r\n]*', '%a' => '.+', '%A' => '.*', '%w' => '\s*', '%i' => '[+-]?\d+', '%d' => '\d+', '%x' => '[0-9a-fA-F]+', '%f' => '[+-]?\.?\d+\.?\d*(?:[Ee][+-]?\d+)?', '%c' => '.', ] ); return '/^' . $string . '$/s'; } private function convertNewlines($text): string { return preg_replace('/\r\n/', "\n", $text); } } PK!Qg¤xxtfile-manager-advanced/application/svg-sanitizer/includes/phpunit/phpunit/src/Framework/Constraint/StringEndsWith.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace PHPUnit\Framework\Constraint; use function strlen; use function substr; /** * Constraint that asserts that the string it is evaluated for ends with a given * suffix. */ final class StringEndsWith extends Constraint { /** * @var string */ private $suffix; public function __construct(string $suffix) { $this->suffix = $suffix; } /** * Returns a string representation of the constraint. */ public function toString(): string { return 'ends with "' . $this->suffix . '"'; } /** * Evaluates the constraint for parameter $other. Returns true if the * constraint is met, false otherwise. * * @param mixed $other value or object to evaluate */ protected function matches($other): bool { return substr($other, 0 - strlen($this->suffix)) === $this->suffix; } } PK!ÇXúØccwfile-manager-advanced/application/svg-sanitizer/includes/phpunit/phpunit/src/Framework/Constraint/RegularExpression.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace PHPUnit\Framework\Constraint; use function preg_match; use function sprintf; /** * Constraint that asserts that the string it is evaluated for matches * a regular expression. * * Checks a given value using the Perl Compatible Regular Expression extension * in PHP. The pattern is matched by executing preg_match(). * * The pattern string passed in the constructor. */ class RegularExpression extends Constraint { /** * @var string */ private $pattern; public function __construct(string $pattern) { $this->pattern = $pattern; } /** * Returns a string representation of the constraint. */ public function toString(): string { return sprintf( 'matches PCRE pattern "%s"', $this->pattern ); } /** * Evaluates the constraint for parameter $other. Returns true if the * constraint is met, false otherwise. * * @param mixed $other value or object to evaluate */ protected function matches($other): bool { return preg_match($this->pattern, $other) > 0; } } PK!�Q\`ªªmfile-manager-advanced/application/svg-sanitizer/includes/phpunit/phpunit/src/Framework/Constraint/IsEmpty.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace PHPUnit\Framework\Constraint; use function count; use function gettype; use function sprintf; use function strpos; use Countable; use EmptyIterator; /** * Constraint that checks whether a variable is empty(). */ final class IsEmpty extends Constraint { /** * Returns a string representation of the constraint. */ public function toString(): string { return 'is empty'; } /** * Evaluates the constraint for parameter $other. Returns true if the * constraint is met, false otherwise. * * @param mixed $other value or object to evaluate */ protected function matches($other): bool { if ($other instanceof EmptyIterator) { return true; } if ($other instanceof Countable) { return count($other) === 0; } return empty($other); } /** * Returns the description of the failure. * * The beginning of failure messages is "Failed asserting that" in most * cases. This method should return the second part of that sentence. * * @param mixed $other evaluated value or object */ protected function failureDescription($other): string { $type = gettype($other); return sprintf( '%s %s %s', strpos($type, 'a') === 0 || strpos($type, 'o') === 0 ? 'an' : 'a', $type, $this->toString() ); } } PK!·w=&YYqfile-manager-advanced/application/svg-sanitizer/includes/phpunit/phpunit/src/Framework/Constraint/IsIdentical.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace PHPUnit\Framework\Constraint; use function get_class; use function is_array; use function is_object; use function is_string; use function sprintf; use PHPUnit\Framework\ExpectationFailedException; use SebastianBergmann\Comparator\ComparisonFailure; use SebastianBergmann\RecursionContext\InvalidArgumentException; /** * Constraint that asserts that one value is identical to another. * * Identical check is performed with PHP's === operator, the operator is * explained in detail at * {@url https://php.net/manual/en/types.comparisons.php}. * Two values are identical if they have the same value and are of the same * type. * * The expected value is passed in the constructor. */ final class IsIdentical extends Constraint { /** * @var mixed */ private $value; public function __construct($value) { $this->value = $value; } /** * Evaluates the constraint for parameter $other. * * If $returnResult is set to false (the default), an exception is thrown * in case of a failure. null is returned otherwise. * * If $returnResult is true, the result of the evaluation is returned as * a boolean value instead: true in case of success, false in case of a * failure. * * @throws ExpectationFailedException * @throws InvalidArgumentException */ public function evaluate($other, string $description = '', bool $returnResult = false) { $success = $this->value === $other; if ($returnResult) { return $success; } if (!$success) { $f = null; // if both values are strings, make sure a diff is generated if (is_string($this->value) && is_string($other)) { $f = new ComparisonFailure( $this->value, $other, sprintf("'%s'", $this->value), sprintf("'%s'", $other) ); } // if both values are array, make sure a diff is generated if (is_array($this->value) && is_array($other)) { $f = new ComparisonFailure( $this->value, $other, $this->exporter()->export($this->value), $this->exporter()->export($other) ); } $this->fail($other, $description, $f); } } /** * Returns a string representation of the constraint. * * @throws InvalidArgumentException */ public function toString(): string { if (is_object($this->value)) { return 'is identical to an object of class "' . get_class($this->value) . '"'; } return 'is identical to ' . $this->exporter()->export($this->value); } /** * Returns the description of the failure. * * The beginning of failure messages is "Failed asserting that" in most * cases. This method should return the second part of that sentence. * * @param mixed $other evaluated value or object * * @throws InvalidArgumentException */ protected function failureDescription($other): string { if (is_object($this->value) && is_object($other)) { return 'two variables reference the same object'; } if (is_string($this->value) && is_string($other)) { return 'two strings are identical'; } if (is_array($this->value) && is_array($other)) { return 'two arrays are identical'; } return parent::failureDescription($other); } } PK!–7=7Ÿ Ÿ pfile-manager-advanced/application/svg-sanitizer/includes/phpunit/phpunit/src/Framework/Constraint/LogicalAnd.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace PHPUnit\Framework\Constraint; use function array_values; use function count; use PHPUnit\Framework\Exception; use PHPUnit\Framework\ExpectationFailedException; use SebastianBergmann\RecursionContext\InvalidArgumentException; /** * Logical AND. */ final class LogicalAnd extends Constraint { /** * @var Constraint[] */ private $constraints = []; public static function fromConstraints(Constraint ...$constraints): self { $constraint = new self; $constraint->constraints = array_values($constraints); return $constraint; } /** * @param Constraint[] $constraints * * @throws Exception */ public function setConstraints(array $constraints): void { $this->constraints = []; foreach ($constraints as $constraint) { if (!($constraint instanceof Constraint)) { throw new Exception( 'All parameters to ' . __CLASS__ . ' must be a constraint object.' ); } $this->constraints[] = $constraint; } } /** * Evaluates the constraint for parameter $other. * * If $returnResult is set to false (the default), an exception is thrown * in case of a failure. null is returned otherwise. * * If $returnResult is true, the result of the evaluation is returned as * a boolean value instead: true in case of success, false in case of a * failure. * * @throws ExpectationFailedException * @throws InvalidArgumentException */ public function evaluate($other, string $description = '', bool $returnResult = false) { $success = true; foreach ($this->constraints as $constraint) { if (!$constraint->evaluate($other, $description, true)) { $success = false; break; } } if ($returnResult) { return $success; } if (!$success) { $this->fail($other, $description); } } /** * Returns a string representation of the constraint. */ public function toString(): string { $text = ''; foreach ($this->constraints as $key => $constraint) { if ($key > 0) { $text .= ' and '; } $text .= $constraint->toString(); } return $text; } /** * Counts the number of constraint elements. */ public function count(): int { $count = 0; foreach ($this->constraints as $constraint) { $count += count($constraint); } return $count; } } PK!ÞÇóR R kfile-manager-advanced/application/svg-sanitizer/includes/phpunit/phpunit/src/Framework/Constraint/Count.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace PHPUnit\Framework\Constraint; use function count; use function is_array; use function iterator_count; use function sprintf; use Countable; use EmptyIterator; use Generator; use Iterator; use IteratorAggregate; use Traversable; class Count extends Constraint { /** * @var int */ private $expectedCount; public function __construct(int $expected) { $this->expectedCount = $expected; } public function toString(): string { return sprintf( 'count matches %d', $this->expectedCount ); } /** * Evaluates the constraint for parameter $other. Returns true if the * constraint is met, false otherwise. */ protected function matches($other): bool { return $this->expectedCount === $this->getCountOf($other); } /** * @param iterable $other */ protected function getCountOf($other): ?int { if ($other instanceof Countable || is_array($other)) { return count($other); } if ($other instanceof EmptyIterator) { return 0; } if ($other instanceof Traversable) { while ($other instanceof IteratorAggregate) { $other = $other->getIterator(); } $iterator = $other; if ($iterator instanceof Generator) { return $this->getCountOfGenerator($iterator); } if (!$iterator instanceof Iterator) { return iterator_count($iterator); } $key = $iterator->key(); $count = iterator_count($iterator); // Manually rewind $iterator to previous key, since iterator_count // moves pointer. if ($key !== null) { $iterator->rewind(); while ($iterator->valid() && $key !== $iterator->key()) { $iterator->next(); } } return $count; } return null; } /** * Returns the total number of iterations from a generator. * This will fully exhaust the generator. */ protected function getCountOfGenerator(Generator $generator): int { for ($count = 0; $generator->valid(); $generator->next()) { $count++; } return $count; } /** * Returns the description of the failure. * * The beginning of failure messages is "Failed asserting that" in most * cases. This method should return the second part of that sentence. * * @param mixed $other evaluated value or object */ protected function failureDescription($other): string { return sprintf( 'actual size %d matches expected size %d', $this->getCountOf($other), $this->expectedCount ); } } PK!¹˜^,,tfile-manager-advanced/application/svg-sanitizer/includes/phpunit/phpunit/src/Framework/Constraint/StringContains.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace PHPUnit\Framework\Constraint; use function mb_stripos; use function mb_strpos; use function mb_strtolower; use function sprintf; /** * Constraint that asserts that the string it is evaluated for contains * a given string. * * Uses mb_strpos() to find the position of the string in the input, if not * found the evaluation fails. * * The sub-string is passed in the constructor. */ final class StringContains extends Constraint { /** * @var string */ private $string; /** * @var bool */ private $ignoreCase; public function __construct(string $string, bool $ignoreCase = false) { $this->string = $string; $this->ignoreCase = $ignoreCase; } /** * Returns a string representation of the constraint. */ public function toString(): string { if ($this->ignoreCase) { $string = mb_strtolower($this->string); } else { $string = $this->string; } return sprintf( 'contains "%s"', $string ); } /** * Evaluates the constraint for parameter $other. Returns true if the * constraint is met, false otherwise. * * @param mixed $other value or object to evaluate */ protected function matches($other): bool { if ('' === $this->string) { return true; } if ($this->ignoreCase) { return mb_stripos($other, $this->string) !== false; } return mb_strpos($other, $this->string) !== false; } } PK!`Ç.`ÐÐnfile-manager-advanced/application/svg-sanitizer/includes/phpunit/phpunit/src/Framework/Constraint/LessThan.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace PHPUnit\Framework\Constraint; use SebastianBergmann\RecursionContext\InvalidArgumentException; /** * Constraint that asserts that the value it is evaluated for is less than * a given value. */ final class LessThan extends Constraint { /** * @var float|int */ private $value; /** * @param float|int $value */ public function __construct($value) { $this->value = $value; } /** * Returns a string representation of the constraint. * * @throws InvalidArgumentException */ public function toString(): string { return 'is less than ' . $this->exporter()->export($this->value); } /** * Evaluates the constraint for parameter $other. Returns true if the * constraint is met, false otherwise. * * @param mixed $other value or object to evaluate */ protected function matches($other): bool { return $this->value > $other; } } PK!Oods6s6cfile-manager-advanced/application/svg-sanitizer/includes/phpunit/phpunit/src/Framework/TestCase.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace PHPUnit\Framework; use const LC_ALL; use const LC_COLLATE; use const LC_CTYPE; use const LC_MESSAGES; use const LC_MONETARY; use const LC_NUMERIC; use const LC_TIME; use const PATHINFO_FILENAME; use const PHP_EOL; use const PHP_URL_PATH; use function array_filter; use function array_flip; use function array_keys; use function array_merge; use function array_unique; use function array_values; use function assert; use function basename; use function call_user_func; use function chdir; use function class_exists; use function clearstatcache; use function count; use function defined; use function explode; use function get_class; use function get_include_path; use function getcwd; use function implode; use function in_array; use function ini_set; use function is_array; use function is_int; use function is_object; use function is_string; use function libxml_clear_errors; use function method_exists; use function ob_end_clean; use function ob_get_contents; use function ob_get_level; use function ob_start; use function parse_url; use function pathinfo; use function preg_replace; use function serialize; use function setlocale; use function sprintf; use function strlen; use function strpos; use function substr; use function sys_get_temp_dir; use function tempnam; use function trim; use function var_export; use DeepCopy\DeepCopy; use PHPUnit\Framework\Constraint\Exception as ExceptionConstraint; use PHPUnit\Framework\Constraint\ExceptionCode; use PHPUnit\Framework\Constraint\ExceptionMessage; use PHPUnit\Framework\Constraint\ExceptionMessageRegularExpression; use PHPUnit\Framework\Constraint\LogicalOr; use PHPUnit\Framework\Error\Deprecated; use PHPUnit\Framework\Error\Error; use PHPUnit\Framework\Error\Notice; use PHPUnit\Framework\Error\Warning as WarningError; use PHPUnit\Framework\MockObject\Generator as MockGenerator; use PHPUnit\Framework\MockObject\MockBuilder; use PHPUnit\Framework\MockObject\MockObject; use PHPUnit\Framework\MockObject\Rule\AnyInvokedCount as AnyInvokedCountMatcher; use PHPUnit\Framework\MockObject\Rule\InvokedAtIndex as InvokedAtIndexMatcher; use PHPUnit\Framework\MockObject\Rule\InvokedAtLeastCount as InvokedAtLeastCountMatcher; use PHPUnit\Framework\MockObject\Rule\InvokedAtLeastOnce as InvokedAtLeastOnceMatcher; use PHPUnit\Framework\MockObject\Rule\InvokedAtMostCount as InvokedAtMostCountMatcher; use PHPUnit\Framework\MockObject\Rule\InvokedCount as InvokedCountMatcher; use PHPUnit\Framework\MockObject\Stub; use PHPUnit\Framework\MockObject\Stub\ConsecutiveCalls as ConsecutiveCallsStub; use PHPUnit\Framework\MockObject\Stub\Exception as ExceptionStub; use PHPUnit\Framework\MockObject\Stub\ReturnArgument as ReturnArgumentStub; use PHPUnit\Framework\MockObject\Stub\ReturnCallback as ReturnCallbackStub; use PHPUnit\Framework\MockObject\Stub\ReturnSelf as ReturnSelfStub; use PHPUnit\Framework\MockObject\Stub\ReturnStub; use PHPUnit\Framework\MockObject\Stub\ReturnValueMap as ReturnValueMapStub; use PHPUnit\Runner\BaseTestRunner; use PHPUnit\Runner\PhptTestCase; use PHPUnit\Util\Exception as UtilException; use PHPUnit\Util\GlobalState; use PHPUnit\Util\PHP\AbstractPhpProcess; use PHPUnit\Util\Test as TestUtil; use PHPUnit\Util\Type; use Prophecy\Exception\Doubler\ClassNotFoundException; use Prophecy\Exception\Doubler\DoubleException; use Prophecy\Exception\Doubler\InterfaceNotFoundException; use Prophecy\Exception\Prediction\PredictionException; use Prophecy\Prophecy\MethodProphecy; use Prophecy\Prophecy\ObjectProphecy; use Prophecy\Prophet; use ReflectionClass; use ReflectionException; use SebastianBergmann\CodeCoverage\CoveredCodeNotExecutedException; use SebastianBergmann\CodeCoverage\MissingCoversAnnotationException; use SebastianBergmann\CodeCoverage\RuntimeException; use SebastianBergmann\CodeCoverage\UnintentionallyCoveredCodeException; use SebastianBergmann\Comparator\Comparator; use SebastianBergmann\Comparator\Factory as ComparatorFactory; use SebastianBergmann\Diff\Differ; use SebastianBergmann\Exporter\Exporter; use SebastianBergmann\GlobalState\Blacklist; use SebastianBergmann\GlobalState\Restorer; use SebastianBergmann\GlobalState\Snapshot; use SebastianBergmann\ObjectEnumerator\Enumerator; use SebastianBergmann\RecursionContext\InvalidArgumentException; use Text_Template; use Throwable; abstract class TestCase extends Assert implements SelfDescribing, Test { private const LOCALE_CATEGORIES = [LC_ALL, LC_COLLATE, LC_CTYPE, LC_MONETARY, LC_NUMERIC, LC_TIME]; /** * @var ?bool */ protected $backupGlobals; /** * @var string[] */ protected $backupGlobalsBlacklist = []; /** * @var ?bool */ protected $backupStaticAttributes; /** * @var array> */ protected $backupStaticAttributesBlacklist = []; /** * @var ?bool */ protected $runTestInSeparateProcess; /** * @var bool */ protected $preserveGlobalState = true; /** * @var ?bool */ private $runClassInSeparateProcess; /** * @var bool */ private $inIsolation = false; /** * @var array */ private $data; /** * @var string */ private $dataName; /** * @var ?string */ private $expectedException; /** * @var ?string */ private $expectedExceptionMessage; /** * @var ?string */ private $expectedExceptionMessageRegExp; /** * @var null|int|string */ private $expectedExceptionCode; /** * @var string */ private $name = ''; /** * @var string[] */ private $dependencies = []; /** * @var array */ private $dependencyInput = []; /** * @var array */ private $iniSettings = []; /** * @var array */ private $locale = []; /** * @var MockObject[] */ private $mockObjects = []; /** * @var MockGenerator */ private $mockObjectGenerator; /** * @var int */ private $status = BaseTestRunner::STATUS_UNKNOWN; /** * @var string */ private $statusMessage = ''; /** * @var int */ private $numAssertions = 0; /** * @var TestResult */ private $result; /** * @var mixed */ private $testResult; /** * @var string */ private $output = ''; /** * @var string */ private $outputExpectedRegex; /** * @var string */ private $outputExpectedString; /** * @var mixed */ private $outputCallback = false; /** * @var bool */ private $outputBufferingActive = false; /** * @var int */ private $outputBufferingLevel; /** * @var bool */ private $outputRetrievedForAssertion = false; /** * @var Snapshot */ private $snapshot; /** * @var Prophet */ private $prophet; /** * @var bool */ private $beStrictAboutChangesToGlobalState = false; /** * @var bool */ private $registerMockObjectsFromTestArgumentsRecursively = false; /** * @var string[] */ private $warnings = []; /** * @var string[] */ private $groups = []; /** * @var bool */ private $doesNotPerformAssertions = false; /** * @var Comparator[] */ private $customComparators = []; /** * @var string[] */ private $doubledTypes = []; /** * @var bool */ private $deprecatedExpectExceptionMessageRegExpUsed = false; /** * Returns a matcher that matches when the method is executed * zero or more times. */ public static function any(): AnyInvokedCountMatcher { return new AnyInvokedCountMatcher; } /** * Returns a matcher that matches when the method is never executed. */ public static function never(): InvokedCountMatcher { return new InvokedCountMatcher(0); } /** * Returns a matcher that matches when the method is executed * at least N times. */ public static function atLeast(int $requiredInvocations): InvokedAtLeastCountMatcher { return new InvokedAtLeastCountMatcher( $requiredInvocations ); } /** * Returns a matcher that matches when the method is executed at least once. */ public static function atLeastOnce(): InvokedAtLeastOnceMatcher { return new InvokedAtLeastOnceMatcher; } /** * Returns a matcher that matches when the method is executed exactly once. */ public static function once(): InvokedCountMatcher { return new InvokedCountMatcher(1); } /** * Returns a matcher that matches when the method is executed * exactly $count times. */ public static function exactly(int $count): InvokedCountMatcher { return new InvokedCountMatcher($count); } /** * Returns a matcher that matches when the method is executed * at most N times. */ public static function atMost(int $allowedInvocations): InvokedAtMostCountMatcher { return new InvokedAtMostCountMatcher($allowedInvocations); } /** * Returns a matcher that matches when the method is executed * at the given index. */ public static function at(int $index): InvokedAtIndexMatcher { return new InvokedAtIndexMatcher($index); } public static function returnValue($value): ReturnStub { return new ReturnStub($value); } public static function returnValueMap(array $valueMap): ReturnValueMapStub { return new ReturnValueMapStub($valueMap); } public static function returnArgument(int $argumentIndex): ReturnArgumentStub { return new ReturnArgumentStub($argumentIndex); } public static function returnCallback($callback): ReturnCallbackStub { return new ReturnCallbackStub($callback); } /** * Returns the current object. * * This method is useful when mocking a fluent interface. */ public static function returnSelf(): ReturnSelfStub { return new ReturnSelfStub; } public static function throwException(Throwable $exception): ExceptionStub { return new ExceptionStub($exception); } public static function onConsecutiveCalls(...$args): ConsecutiveCallsStub { return new ConsecutiveCallsStub($args); } /** * @param string $name * @param string $dataName * * @internal This method is not covered by the backward compatibility promise for PHPUnit */ public function __construct($name = null, array $data = [], $dataName = '') { if ($name !== null) { $this->setName($name); } $this->data = $data; $this->dataName = $dataName; } /** * This method is called before the first test of this test class is run. */ public static function setUpBeforeClass(): void { } /** * This method is called after the last test of this test class is run. */ public static function tearDownAfterClass(): void { } /** * This method is called before each test. */ protected function setUp(): void { } /** * Performs assertions shared by all tests of a test case. * * This method is called between setUp() and test. */ protected function assertPreConditions(): void { } /** * Performs assertions shared by all tests of a test case. * * This method is called between test and tearDown(). */ protected function assertPostConditions(): void { } /** * This method is called after each test. */ protected function tearDown(): void { } /** * Returns a string representation of the test case. * * @throws Exception * @throws InvalidArgumentException */ public function toString(): string { try { $class = new ReflectionClass($this); // @codeCoverageIgnoreStart } catch (ReflectionException $e) { throw new Exception( $e->getMessage(), $e->getCode(), $e ); } // @codeCoverageIgnoreEnd $buffer = sprintf( '%s::%s', $class->name, $this->getName(false) ); return $buffer . $this->getDataSetAsString(); } public function count(): int { return 1; } public function getActualOutputForAssertion(): string { $this->outputRetrievedForAssertion = true; return $this->getActualOutput(); } public function expectOutputRegex(string $expectedRegex): void { $this->outputExpectedRegex = $expectedRegex; } public function expectOutputString(string $expectedString): void { $this->outputExpectedString = $expectedString; } /** * @psalm-param class-string $exception */ public function expectException(string $exception): void { $this->expectedException = $exception; } /** * @param int|string $code */ public function expectExceptionCode($code): void { $this->expectedExceptionCode = $code; } public function expectExceptionMessage(string $message): void { $this->expectedExceptionMessage = $message; } public function expectExceptionMessageMatches(string $regularExpression): void { $this->expectedExceptionMessageRegExp = $regularExpression; } /** * @deprecated Use expectExceptionMessageMatches() instead */ public function expectExceptionMessageRegExp(string $regularExpression): void { $this->deprecatedExpectExceptionMessageRegExpUsed = true; $this->expectExceptionMessageMatches($regularExpression); } /** * Sets up an expectation for an exception to be raised by the code under test. * Information for expected exception class, expected exception message, and * expected exception code are retrieved from a given Exception object. */ public function expectExceptionObject(\Exception $exception): void { $this->expectException(get_class($exception)); $this->expectExceptionMessage($exception->getMessage()); $this->expectExceptionCode($exception->getCode()); } public function expectNotToPerformAssertions(): void { $this->doesNotPerformAssertions = true; } public function expectDeprecation(): void { $this->expectException(Deprecated::class); } public function expectDeprecationMessage(string $message): void { $this->expectExceptionMessage($message); } public function expectDeprecationMessageMatches(string $regularExpression): void { $this->expectExceptionMessageMatches($regularExpression); } public function expectNotice(): void { $this->expectException(Notice::class); } public function expectNoticeMessage(string $message): void { $this->expectExceptionMessage($message); } public function expectNoticeMessageMatches(string $regularExpression): void { $this->expectExceptionMessageMatches($regularExpression); } public function expectWarning(): void { $this->expectException(WarningError::class); } public function expectWarningMessage(string $message): void { $this->expectExceptionMessage($message); } public function expectWarningMessageMatches(string $regularExpression): void { $this->expectExceptionMessageMatches($regularExpression); } public function expectError(): void { $this->expectException(Error::class); } public function expectErrorMessage(string $message): void { $this->expectExceptionMessage($message); } public function expectErrorMessageMatches(string $regularExpression): void { $this->expectExceptionMessageMatches($regularExpression); } public function getStatus(): int { return $this->status; } public function markAsRisky(): void { $this->status = BaseTestRunner::STATUS_RISKY; } public function getStatusMessage(): string { return $this->statusMessage; } public function hasFailed(): bool { $status = $this->getStatus(); return $status === BaseTestRunner::STATUS_FAILURE || $status === BaseTestRunner::STATUS_ERROR; } /** * Runs the test case and collects the results in a TestResult object. * If no TestResult object is passed a new one will be created. * * @throws \SebastianBergmann\CodeCoverage\InvalidArgumentException * @throws CodeCoverageException * @throws CoveredCodeNotExecutedException * @throws InvalidArgumentException * @throws MissingCoversAnnotationException * @throws RuntimeException * @throws UnintentionallyCoveredCodeException * @throws UtilException */ public function run(?TestResult $result = null): TestResult { if ($result === null) { $result = $this->createResult(); } if (!$this instanceof WarningTestCase) { $this->setTestResultObject($result); } if (!$this instanceof WarningTestCase && !$this instanceof SkippedTestCase && !$this->handleDependencies()) { return $result; } if ($this->runInSeparateProcess()) { $runEntireClass = $this->runClassInSeparateProcess && !$this->runTestInSeparateProcess; try { $class = new ReflectionClass($this); // @codeCoverageIgnoreStart } catch (ReflectionException $e) { throw new Exception( $e->getMessage(), $e->getCode(), $e ); } // @codeCoverageIgnoreEnd if ($runEntireClass) { $template = new Text_Template( __DIR__ . '/../Util/PHP/Template/TestCaseClass.tpl' ); } else { $template = new Text_Template( __DIR__ . '/../Util/PHP/Template/TestCaseMethod.tpl' ); } if ($this->preserveGlobalState) { $constants = GlobalState::getConstantsAsString(); $globals = GlobalState::getGlobalsAsString(); $includedFiles = GlobalState::getIncludedFilesAsString(); $iniSettings = GlobalState::getIniSettingsAsString(); } else { $constants = ''; if (!empty($GLOBALS['__PHPUNIT_BOOTSTRAP'])) { $globals = '$GLOBALS[\'__PHPUNIT_BOOTSTRAP\'] = ' . var_export($GLOBALS['__PHPUNIT_BOOTSTRAP'], true) . ";\n"; } else { $globals = ''; } $includedFiles = ''; $iniSettings = ''; } $coverage = $result->getCollectCodeCoverageInformation() ? 'true' : 'false'; $isStrictAboutTestsThatDoNotTestAnything = $result->isStrictAboutTestsThatDoNotTestAnything() ? 'true' : 'false'; $isStrictAboutOutputDuringTests = $result->isStrictAboutOutputDuringTests() ? 'true' : 'false'; $enforcesTimeLimit = $result->enforcesTimeLimit() ? 'true' : 'false'; $isStrictAboutTodoAnnotatedTests = $result->isStrictAboutTodoAnnotatedTests() ? 'true' : 'false'; $isStrictAboutResourceUsageDuringSmallTests = $result->isStrictAboutResourceUsageDuringSmallTests() ? 'true' : 'false'; if (defined('PHPUNIT_COMPOSER_INSTALL')) { $composerAutoload = var_export(PHPUNIT_COMPOSER_INSTALL, true); } else { $composerAutoload = '\'\''; } if (defined('__PHPUNIT_PHAR__')) { $phar = var_export(__PHPUNIT_PHAR__, true); } else { $phar = '\'\''; } if ($result->getCodeCoverage()) { $codeCoverageFilter = $result->getCodeCoverage()->filter(); } else { $codeCoverageFilter = null; } $data = var_export(serialize($this->data), true); $dataName = var_export($this->dataName, true); $dependencyInput = var_export(serialize($this->dependencyInput), true); $includePath = var_export(get_include_path(), true); $codeCoverageFilter = var_export(serialize($codeCoverageFilter), true); // must do these fixes because TestCaseMethod.tpl has unserialize('{data}') in it, and we can't break BC // the lines above used to use addcslashes() rather than var_export(), which breaks null byte escape sequences $data = "'." . $data . ".'"; $dataName = "'.(" . $dataName . ").'"; $dependencyInput = "'." . $dependencyInput . ".'"; $includePath = "'." . $includePath . ".'"; $codeCoverageFilter = "'." . $codeCoverageFilter . ".'"; $configurationFilePath = $GLOBALS['__PHPUNIT_CONFIGURATION_FILE'] ?? ''; $processResultFile = tempnam(sys_get_temp_dir(), 'phpunit_'); $var = [ 'composerAutoload' => $composerAutoload, 'phar' => $phar, 'filename' => $class->getFileName(), 'className' => $class->getName(), 'collectCodeCoverageInformation' => $coverage, 'data' => $data, 'dataName' => $dataName, 'dependencyInput' => $dependencyInput, 'constants' => $constants, 'globals' => $globals, 'include_path' => $includePath, 'included_files' => $includedFiles, 'iniSettings' => $iniSettings, 'isStrictAboutTestsThatDoNotTestAnything' => $isStrictAboutTestsThatDoNotTestAnything, 'isStrictAboutOutputDuringTests' => $isStrictAboutOutputDuringTests, 'enforcesTimeLimit' => $enforcesTimeLimit, 'isStrictAboutTodoAnnotatedTests' => $isStrictAboutTodoAnnotatedTests, 'isStrictAboutResourceUsageDuringSmallTests' => $isStrictAboutResourceUsageDuringSmallTests, 'codeCoverageFilter' => $codeCoverageFilter, 'configurationFilePath' => $configurationFilePath, 'name' => $this->getName(false), 'processResultFile' => $processResultFile, ]; if (!$runEntireClass) { $var['methodName'] = $this->name; } $template->setVar($var); $php = AbstractPhpProcess::factory(); $php->runTestJob($template->render(), $this, $result, $processResultFile); } else { $result->run($this); } $this->result = null; return $result; } /** * Returns a builder object to create mock objects using a fluent interface. * * @param string|string[] $className * * @psalm-template RealInstanceType of object * * @psalm-param class-string|string[] $className * * @psalm-return MockBuilder */ public function getMockBuilder($className): MockBuilder { if (!is_string($className)) { $this->addWarning('Passing an array of interface names to getMockBuilder() for creating a test double that implements multiple interfaces is deprecated and will no longer be supported in PHPUnit 9.'); } $this->recordDoubledType($className); return new MockBuilder($this, $className); } public function registerComparator(Comparator $comparator): void { ComparatorFactory::getInstance()->register($comparator); $this->customComparators[] = $comparator; } /** * @internal This method is not covered by the backward compatibility promise for PHPUnit * * @deprecated Invoking this method has no effect; it will be removed in PHPUnit 9 */ public function setUseErrorHandler(bool $useErrorHandler): void { } /** * @return string[] * * @internal This method is not covered by the backward compatibility promise for PHPUnit */ public function doubledTypes(): array { return array_unique($this->doubledTypes); } /** * @internal This method is not covered by the backward compatibility promise for PHPUnit */ public function getGroups(): array { return $this->groups; } /** * @internal This method is not covered by the backward compatibility promise for PHPUnit */ public function setGroups(array $groups): void { $this->groups = $groups; } /** * @internal This method is not covered by the backward compatibility promise for PHPUnit */ public function getAnnotations(): array { return TestUtil::parseTestMethodAnnotations( static::class, $this->name ); } /** * @throws InvalidArgumentException * * @internal This method is not covered by the backward compatibility promise for PHPUnit */ public function getName(bool $withDataSet = true): string { if ($withDataSet) { return $this->name . $this->getDataSetAsString(false); } return $this->name; } /** * Returns the size of the test. * * @throws InvalidArgumentException * * @internal This method is not covered by the backward compatibility promise for PHPUnit */ public function getSize(): int { return TestUtil::getSize( static::class, $this->getName(false) ); } /** * @throws InvalidArgumentException * * @internal This method is not covered by the backward compatibility promise for PHPUnit */ public function hasSize(): bool { return $this->getSize() !== TestUtil::UNKNOWN; } /** * @throws InvalidArgumentException * * @internal This method is not covered by the backward compatibility promise for PHPUnit */ public function isSmall(): bool { return $this->getSize() === TestUtil::SMALL; } /** * @throws InvalidArgumentException * * @internal This method is not covered by the backward compatibility promise for PHPUnit */ public function isMedium(): bool { return $this->getSize() === TestUtil::MEDIUM; } /** * @throws InvalidArgumentException * * @internal This method is not covered by the backward compatibility promise for PHPUnit */ public function isLarge(): bool { return $this->getSize() === TestUtil::LARGE; } /** * @internal This method is not covered by the backward compatibility promise for PHPUnit */ public function getActualOutput(): string { if (!$this->outputBufferingActive) { return $this->output; } return (string) ob_get_contents(); } /** * @internal This method is not covered by the backward compatibility promise for PHPUnit */ public function hasOutput(): bool { if ($this->output === '') { return false; } if ($this->hasExpectationOnOutput()) { return false; } return true; } /** * @internal This method is not covered by the backward compatibility promise for PHPUnit */ public function doesNotPerformAssertions(): bool { return $this->doesNotPerformAssertions; } /** * @internal This method is not covered by the backward compatibility promise for PHPUnit */ public function hasExpectationOnOutput(): bool { return is_string($this->outputExpectedString) || is_string($this->outputExpectedRegex) || $this->outputRetrievedForAssertion; } /** * @internal This method is not covered by the backward compatibility promise for PHPUnit */ public function getExpectedException(): ?string { return $this->expectedException; } /** * @return null|int|string * * @internal This method is not covered by the backward compatibility promise for PHPUnit */ public function getExpectedExceptionCode() { return $this->expectedExceptionCode; } /** * @internal This method is not covered by the backward compatibility promise for PHPUnit */ public function getExpectedExceptionMessage(): ?string { return $this->expectedExceptionMessage; } /** * @internal This method is not covered by the backward compatibility promise for PHPUnit */ public function getExpectedExceptionMessageRegExp(): ?string { return $this->expectedExceptionMessageRegExp; } /** * @internal This method is not covered by the backward compatibility promise for PHPUnit */ public function setRegisterMockObjectsFromTestArgumentsRecursively(bool $flag): void { $this->registerMockObjectsFromTestArgumentsRecursively = $flag; } /** * @throws Throwable * * @internal This method is not covered by the backward compatibility promise for PHPUnit */ public function runBare(): void { $this->numAssertions = 0; $this->snapshotGlobalState(); $this->startOutputBuffering(); clearstatcache(); $currentWorkingDirectory = getcwd(); $hookMethods = TestUtil::getHookMethods(static::class); $hasMetRequirements = false; try { $this->checkRequirements(); $hasMetRequirements = true; if ($this->inIsolation) { foreach ($hookMethods['beforeClass'] as $method) { $this->{$method}(); } } $this->setExpectedExceptionFromAnnotation(); $this->setDoesNotPerformAssertionsFromAnnotation(); foreach ($hookMethods['before'] as $method) { $this->{$method}(); } $this->assertPreConditions(); $this->testResult = $this->runTest(); $this->verifyMockObjects(); $this->assertPostConditions(); if (!empty($this->warnings)) { throw new Warning( implode( "\n", array_unique($this->warnings) ) ); } $this->status = BaseTestRunner::STATUS_PASSED; } catch (IncompleteTest $e) { $this->status = BaseTestRunner::STATUS_INCOMPLETE; $this->statusMessage = $e->getMessage(); } catch (SkippedTest $e) { $this->status = BaseTestRunner::STATUS_SKIPPED; $this->statusMessage = $e->getMessage(); } catch (Warning $e) { $this->status = BaseTestRunner::STATUS_WARNING; $this->statusMessage = $e->getMessage(); } catch (AssertionFailedError $e) { $this->status = BaseTestRunner::STATUS_FAILURE; $this->statusMessage = $e->getMessage(); } catch (PredictionException $e) { $this->status = BaseTestRunner::STATUS_FAILURE; $this->statusMessage = $e->getMessage(); } catch (Throwable $_e) { $e = $_e; $this->status = BaseTestRunner::STATUS_ERROR; $this->statusMessage = $_e->getMessage(); } $this->mockObjects = []; $this->prophet = null; // Tear down the fixture. An exception raised in tearDown() will be // caught and passed on when no exception was raised before. try { if ($hasMetRequirements) { foreach ($hookMethods['after'] as $method) { $this->{$method}(); } if ($this->inIsolation) { foreach ($hookMethods['afterClass'] as $method) { $this->{$method}(); } } } } catch (Throwable $_e) { $e = $e ?? $_e; } try { $this->stopOutputBuffering(); } catch (RiskyTestError $_e) { $e = $e ?? $_e; } if (isset($_e)) { $this->status = BaseTestRunner::STATUS_ERROR; $this->statusMessage = $_e->getMessage(); } clearstatcache(); if ($currentWorkingDirectory !== getcwd()) { chdir($currentWorkingDirectory); } $this->restoreGlobalState(); $this->unregisterCustomComparators(); $this->cleanupIniSettings(); $this->cleanupLocaleSettings(); libxml_clear_errors(); // Perform assertion on output. if (!isset($e)) { try { if ($this->outputExpectedRegex !== null) { $this->assertRegExp($this->outputExpectedRegex, $this->output); } elseif ($this->outputExpectedString !== null) { $this->assertEquals($this->outputExpectedString, $this->output); } } catch (Throwable $_e) { $e = $_e; } } // Workaround for missing "finally". if (isset($e)) { if ($e instanceof PredictionException) { $e = new AssertionFailedError($e->getMessage()); } $this->onNotSuccessfulTest($e); } } /** * @internal This method is not covered by the backward compatibility promise for PHPUnit */ public function setName(string $name): void { $this->name = $name; } /** * @param string[] $dependencies * * @internal This method is not covered by the backward compatibility promise for PHPUnit */ public function setDependencies(array $dependencies): void { $this->dependencies = $dependencies; } /** * @internal This method is not covered by the backward compatibility promise for PHPUnit */ public function getDependencies(): array { return $this->dependencies; } /** * @internal This method is not covered by the backward compatibility promise for PHPUnit */ public function hasDependencies(): bool { return count($this->dependencies) > 0; } /** * @internal This method is not covered by the backward compatibility promise for PHPUnit */ public function setDependencyInput(array $dependencyInput): void { $this->dependencyInput = $dependencyInput; } /** * @internal This method is not covered by the backward compatibility promise for PHPUnit */ public function getDependencyInput(): array { return $this->dependencyInput; } /** * @internal This method is not covered by the backward compatibility promise for PHPUnit */ public function setBeStrictAboutChangesToGlobalState(?bool $beStrictAboutChangesToGlobalState): void { $this->beStrictAboutChangesToGlobalState = $beStrictAboutChangesToGlobalState; } /** * @internal This method is not covered by the backward compatibility promise for PHPUnit */ public function setBackupGlobals(?bool $backupGlobals): void { if ($this->backupGlobals === null && $backupGlobals !== null) { $this->backupGlobals = $backupGlobals; } } /** * @internal This method is not covered by the backward compatibility promise for PHPUnit */ public function setBackupStaticAttributes(?bool $backupStaticAttributes): void { if ($this->backupStaticAttributes === null && $backupStaticAttributes !== null) { $this->backupStaticAttributes = $backupStaticAttributes; } } /** * @internal This method is not covered by the backward compatibility promise for PHPUnit */ public function setRunTestInSeparateProcess(bool $runTestInSeparateProcess): void { if ($this->runTestInSeparateProcess === null) { $this->runTestInSeparateProcess = $runTestInSeparateProcess; } } /** * @internal This method is not covered by the backward compatibility promise for PHPUnit */ public function setRunClassInSeparateProcess(bool $runClassInSeparateProcess): void { if ($this->runClassInSeparateProcess === null) { $this->runClassInSeparateProcess = $runClassInSeparateProcess; } } /** * @internal This method is not covered by the backward compatibility promise for PHPUnit */ public function setPreserveGlobalState(bool $preserveGlobalState): void { $this->preserveGlobalState = $preserveGlobalState; } /** * @internal This method is not covered by the backward compatibility promise for PHPUnit */ public function setInIsolation(bool $inIsolation): void { $this->inIsolation = $inIsolation; } /** * @internal This method is not covered by the backward compatibility promise for PHPUnit */ public function isInIsolation(): bool { return $this->inIsolation; } /** * @internal This method is not covered by the backward compatibility promise for PHPUnit */ public function getResult() { return $this->testResult; } /** * @internal This method is not covered by the backward compatibility promise for PHPUnit */ public function setResult($result): void { $this->testResult = $result; } /** * @internal This method is not covered by the backward compatibility promise for PHPUnit */ public function setOutputCallback(callable $callback): void { $this->outputCallback = $callback; } /** * @internal This method is not covered by the backward compatibility promise for PHPUnit */ public function getTestResultObject(): ?TestResult { return $this->result; } /** * @internal This method is not covered by the backward compatibility promise for PHPUnit */ public function setTestResultObject(TestResult $result): void { $this->result = $result; } /** * @internal This method is not covered by the backward compatibility promise for PHPUnit */ public function registerMockObject(MockObject $mockObject): void { $this->mockObjects[] = $mockObject; } /** * @internal This method is not covered by the backward compatibility promise for PHPUnit */ public function addToAssertionCount(int $count): void { $this->numAssertions += $count; } /** * Returns the number of assertions performed by this test. * * @internal This method is not covered by the backward compatibility promise for PHPUnit */ public function getNumAssertions(): int { return $this->numAssertions; } /** * @internal This method is not covered by the backward compatibility promise for PHPUnit */ public function usesDataProvider(): bool { return !empty($this->data); } /** * @internal This method is not covered by the backward compatibility promise for PHPUnit */ public function dataDescription(): string { return is_string($this->dataName) ? $this->dataName : ''; } /** * @return int|string * * @internal This method is not covered by the backward compatibility promise for PHPUnit */ public function dataName() { return $this->dataName; } /** * @internal This method is not covered by the backward compatibility promise for PHPUnit */ public function getDataSetAsString(bool $includeData = true): string { $buffer = ''; if (!empty($this->data)) { if (is_int($this->dataName)) { $buffer .= sprintf(' with data set #%d', $this->dataName); } else { $buffer .= sprintf(' with data set "%s"', $this->dataName); } if ($includeData) { $exporter = new Exporter; $buffer .= sprintf(' (%s)', $exporter->shortenedRecursiveExport($this->data)); } } return $buffer; } /** * Gets the data set of a TestCase. * * @internal This method is not covered by the backward compatibility promise for PHPUnit */ public function getProvidedData(): array { return $this->data; } /** * @internal This method is not covered by the backward compatibility promise for PHPUnit */ public function addWarning(string $warning): void { $this->warnings[] = $warning; } /** * Override to run the test and assert its state. * * @throws \SebastianBergmann\ObjectEnumerator\InvalidArgumentException * @throws AssertionFailedError * @throws Exception * @throws ExpectationFailedException * @throws Throwable */ protected function runTest() { if (trim($this->name) === '') { throw new Exception( 'PHPUnit\Framework\TestCase::$name must be a non-blank string.' ); } $testArguments = array_merge($this->data, $this->dependencyInput); $this->registerMockObjectsFromTestArguments($testArguments); try { $testResult = $this->{$this->name}(...array_values($testArguments)); } catch (Throwable $exception) { if (!$this->checkExceptionExpectations($exception)) { throw $exception; } if ($this->expectedException !== null) { if ($this->expectedException === Error::class) { $this->assertThat( $exception, LogicalOr::fromConstraints( new ExceptionConstraint(Error::class), new ExceptionConstraint(\Error::class) ) ); } else { $this->assertThat( $exception, new ExceptionConstraint( $this->expectedException ) ); } } if ($this->expectedExceptionMessage !== null) { $this->assertThat( $exception, new ExceptionMessage( $this->expectedExceptionMessage ) ); } if ($this->expectedExceptionMessageRegExp !== null) { $this->assertThat( $exception, new ExceptionMessageRegularExpression( $this->expectedExceptionMessageRegExp ) ); } if ($this->expectedExceptionCode !== null) { $this->assertThat( $exception, new ExceptionCode( $this->expectedExceptionCode ) ); } if ($this->deprecatedExpectExceptionMessageRegExpUsed) { $this->addWarning('expectExceptionMessageRegExp() is deprecated in PHPUnit 8 and will be removed in PHPUnit 9. Use expectExceptionMessageMatches() instead.'); } return; } if ($this->expectedException !== null) { $this->assertThat( null, new ExceptionConstraint( $this->expectedException ) ); } elseif ($this->expectedExceptionMessage !== null) { $this->numAssertions++; throw new AssertionFailedError( sprintf( 'Failed asserting that exception with message "%s" is thrown', $this->expectedExceptionMessage ) ); } elseif ($this->expectedExceptionMessageRegExp !== null) { $this->numAssertions++; throw new AssertionFailedError( sprintf( 'Failed asserting that exception with message matching "%s" is thrown', $this->expectedExceptionMessageRegExp ) ); } elseif ($this->expectedExceptionCode !== null) { $this->numAssertions++; throw new AssertionFailedError( sprintf( 'Failed asserting that exception with code "%s" is thrown', $this->expectedExceptionCode ) ); } return $testResult; } /** * This method is a wrapper for the ini_set() function that automatically * resets the modified php.ini setting to its original value after the * test is run. * * @throws Exception */ protected function iniSet(string $varName, string $newValue): void { $currentValue = ini_set($varName, $newValue); if ($currentValue !== false) { $this->iniSettings[$varName] = $currentValue; } else { throw new Exception( sprintf( 'INI setting "%s" could not be set to "%s".', $varName, $newValue ) ); } } /** * This method is a wrapper for the setlocale() function that automatically * resets the locale to its original value after the test is run. * * @throws Exception */ protected function setLocale(...$args): void { if (count($args) < 2) { throw new Exception; } [$category, $locale] = $args; if (defined('LC_MESSAGES')) { $categories[] = LC_MESSAGES; } if (!in_array($category, self::LOCALE_CATEGORIES, true)) { throw new Exception; } if (!is_array($locale) && !is_string($locale)) { throw new Exception; } $this->locale[$category] = setlocale($category, 0); $result = setlocale(...$args); if ($result === false) { throw new Exception( 'The locale functionality is not implemented on your platform, ' . 'the specified locale does not exist or the category name is ' . 'invalid.' ); } } /** * Makes configurable stub for the specified class. * * @psalm-template RealInstanceType of object * * @psalm-param class-string $originalClassName * * @psalm-return Stub&RealInstanceType */ protected function createStub(string $originalClassName): Stub { return $this->createMock($originalClassName); } /** * Returns a mock object for the specified class. * * @param string|string[] $originalClassName * * @psalm-template RealInstanceType of object * * @psalm-param class-string|string[] $originalClassName * * @psalm-return MockObject&RealInstanceType */ protected function createMock($originalClassName): MockObject { if (!is_string($originalClassName)) { $this->addWarning('Passing an array of interface names to createMock() for creating a test double that implements multiple interfaces is deprecated and will no longer be supported in PHPUnit 9.'); } return $this->getMockBuilder($originalClassName) ->disableOriginalConstructor() ->disableOriginalClone() ->disableArgumentCloning() ->disallowMockingUnknownTypes() ->getMock(); } /** * Returns a configured mock object for the specified class. * * @param string|string[] $originalClassName * * @psalm-template RealInstanceType of object * * @psalm-param class-string|string[] $originalClassName * * @psalm-return MockObject&RealInstanceType */ protected function createConfiguredMock($originalClassName, array $configuration): MockObject { $o = $this->createMock($originalClassName); foreach ($configuration as $method => $return) { $o->method($method)->willReturn($return); } return $o; } /** * Returns a partial mock object for the specified class. * * @param string|string[] $originalClassName * @param string[] $methods * * @psalm-template RealInstanceType of object * * @psalm-param class-string|string[] $originalClassName * * @psalm-return MockObject&RealInstanceType */ protected function createPartialMock($originalClassName, array $methods): MockObject { if (!is_string($originalClassName)) { $this->addWarning('Passing an array of interface names to createPartialMock() for creating a test double that implements multiple interfaces is deprecated and will no longer be supported in PHPUnit 9.'); } $class_names = is_array($originalClassName) ? $originalClassName : [$originalClassName]; foreach ($class_names as $class_name) { $reflection = new ReflectionClass($class_name); $mockedMethodsThatDontExist = array_filter( $methods, static function (string $method) use ($reflection) { return !$reflection->hasMethod($method); } ); if ($mockedMethodsThatDontExist) { $this->addWarning( sprintf( 'createPartialMock called with method(s) %s that do not exist in %s. This will not be allowed in future versions of PHPUnit.', implode(', ', $mockedMethodsThatDontExist), $class_name ) ); } } return $this->getMockBuilder($originalClassName) ->disableOriginalConstructor() ->disableOriginalClone() ->disableArgumentCloning() ->disallowMockingUnknownTypes() ->setMethods(empty($methods) ? null : $methods) ->getMock(); } /** * Returns a test proxy for the specified class. * * @psalm-template RealInstanceType of object * * @psalm-param class-string $originalClassName * * @psalm-return MockObject&RealInstanceType */ protected function createTestProxy(string $originalClassName, array $constructorArguments = []): MockObject { return $this->getMockBuilder($originalClassName) ->setConstructorArgs($constructorArguments) ->enableProxyingToOriginalMethods() ->getMock(); } /** * Mocks the specified class and returns the name of the mocked class. * * @param string $originalClassName * @param array $methods * @param string $mockClassName * @param bool $callOriginalConstructor * @param bool $callOriginalClone * @param bool $callAutoload * @param bool $cloneArguments * * @psalm-template RealInstanceType of object * * @psalm-param class-string|string $originalClassName * * @psalm-return class-string */ protected function getMockClass($originalClassName, $methods = [], array $arguments = [], $mockClassName = '', $callOriginalConstructor = false, $callOriginalClone = true, $callAutoload = true, $cloneArguments = false): string { $this->recordDoubledType($originalClassName); $mock = $this->getMockObjectGenerator()->getMock( $originalClassName, $methods, $arguments, $mockClassName, $callOriginalConstructor, $callOriginalClone, $callAutoload, $cloneArguments ); return get_class($mock); } /** * Returns a mock object for the specified abstract class with all abstract * methods of the class mocked. Concrete methods are not mocked by default. * To mock concrete methods, use the 7th parameter ($mockedMethods). * * @param string $originalClassName * @param string $mockClassName * @param bool $callOriginalConstructor * @param bool $callOriginalClone * @param bool $callAutoload * @param array $mockedMethods * @param bool $cloneArguments * * @psalm-template RealInstanceType of object * * @psalm-param class-string $originalClassName * * @psalm-return MockObject&RealInstanceType */ protected function getMockForAbstractClass($originalClassName, array $arguments = [], $mockClassName = '', $callOriginalConstructor = true, $callOriginalClone = true, $callAutoload = true, $mockedMethods = [], $cloneArguments = false): MockObject { $this->recordDoubledType($originalClassName); $mockObject = $this->getMockObjectGenerator()->getMockForAbstractClass( $originalClassName, $arguments, $mockClassName, $callOriginalConstructor, $callOriginalClone, $callAutoload, $mockedMethods, $cloneArguments ); $this->registerMockObject($mockObject); return $mockObject; } /** * Returns a mock object based on the given WSDL file. * * @param string $wsdlFile * @param string $originalClassName * @param string $mockClassName * @param bool $callOriginalConstructor * @param array $options An array of options passed to SOAPClient::_construct * * @psalm-template RealInstanceType of object * * @psalm-param class-string|string $originalClassName * * @psalm-return MockObject&RealInstanceType */ protected function getMockFromWsdl($wsdlFile, $originalClassName = '', $mockClassName = '', array $methods = [], $callOriginalConstructor = true, array $options = []): MockObject { $this->recordDoubledType('SoapClient'); if ($originalClassName === '') { $fileName = pathinfo(basename(parse_url($wsdlFile, PHP_URL_PATH)), PATHINFO_FILENAME); $originalClassName = preg_replace('/\W/', '', $fileName); } if (!class_exists($originalClassName)) { eval( $this->getMockObjectGenerator()->generateClassFromWsdl( $wsdlFile, $originalClassName, $methods, $options ) ); } $mockObject = $this->getMockObjectGenerator()->getMock( $originalClassName, $methods, ['', $options], $mockClassName, $callOriginalConstructor, false, false ); $this->registerMockObject($mockObject); return $mockObject; } /** * Returns a mock object for the specified trait with all abstract methods * of the trait mocked. Concrete methods to mock can be specified with the * `$mockedMethods` parameter. * * @param string $traitName * @param string $mockClassName * @param bool $callOriginalConstructor * @param bool $callOriginalClone * @param bool $callAutoload * @param array $mockedMethods * @param bool $cloneArguments */ protected function getMockForTrait($traitName, array $arguments = [], $mockClassName = '', $callOriginalConstructor = true, $callOriginalClone = true, $callAutoload = true, $mockedMethods = [], $cloneArguments = false): MockObject { $this->recordDoubledType($traitName); $mockObject = $this->getMockObjectGenerator()->getMockForTrait( $traitName, $arguments, $mockClassName, $callOriginalConstructor, $callOriginalClone, $callAutoload, $mockedMethods, $cloneArguments ); $this->registerMockObject($mockObject); return $mockObject; } /** * Returns an object for the specified trait. * * @param string $traitName * @param string $traitClassName * @param bool $callOriginalConstructor * @param bool $callOriginalClone * @param bool $callAutoload * * @return object */ protected function getObjectForTrait($traitName, array $arguments = [], $traitClassName = '', $callOriginalConstructor = true, $callOriginalClone = true, $callAutoload = true)/* : object */ { $this->recordDoubledType($traitName); return $this->getMockObjectGenerator()->getObjectForTrait( $traitName, $traitClassName, $callAutoload, $callOriginalConstructor, $arguments ); } /** * @param ?string $classOrInterface * * @throws ClassNotFoundException * @throws DoubleException * @throws InterfaceNotFoundException * * @psalm-param class-string|null $classOrInterface */ protected function prophesize($classOrInterface = null): ObjectProphecy { if (!class_exists(Prophet::class)) { throw new Exception('This test uses TestCase::prophesize(), but phpspec/prophecy is not installed. Please run "composer require --dev phpspec/prophecy".'); } if (is_string($classOrInterface)) { $this->recordDoubledType($classOrInterface); } return $this->getProphet()->prophesize($classOrInterface); } /** * Creates a default TestResult object. * * @internal This method is not covered by the backward compatibility promise for PHPUnit */ protected function createResult(): TestResult { return new TestResult; } /** * This method is called when a test method did not execute successfully. * * @throws Throwable */ protected function onNotSuccessfulTest(Throwable $t): void { throw $t; } private function setExpectedExceptionFromAnnotation(): void { if ($this->name === null) { return; } try { $expectedException = TestUtil::getExpectedException( static::class, $this->name ); if ($expectedException !== false) { $this->addWarning('The @expectedException, @expectedExceptionCode, @expectedExceptionMessage, and @expectedExceptionMessageRegExp annotations are deprecated. They will be removed in PHPUnit 9. Refactor your test to use expectException(), expectExceptionCode(), expectExceptionMessage(), or expectExceptionMessageMatches() instead.'); $this->expectException($expectedException['class']); if ($expectedException['code'] !== null) { $this->expectExceptionCode($expectedException['code']); } if ($expectedException['message'] !== '') { $this->expectExceptionMessage($expectedException['message']); } elseif ($expectedException['message_regex'] !== '') { $this->expectExceptionMessageMatches($expectedException['message_regex']); } } } catch (UtilException $e) { } } /** * @throws SkippedTestError * @throws SyntheticSkippedError * @throws Warning */ private function checkRequirements(): void { if (!$this->name || !method_exists($this, $this->name)) { return; } $missingRequirements = TestUtil::getMissingRequirements( static::class, $this->name ); if (!empty($missingRequirements)) { $this->markTestSkipped(implode(PHP_EOL, $missingRequirements)); } } /** * @throws Throwable */ private function verifyMockObjects(): void { foreach ($this->mockObjects as $mockObject) { if ($mockObject->__phpunit_hasMatchers()) { $this->numAssertions++; } $mockObject->__phpunit_verify( $this->shouldInvocationMockerBeReset($mockObject) ); } if ($this->prophet !== null) { try { $this->prophet->checkPredictions(); } finally { foreach ($this->prophet->getProphecies() as $objectProphecy) { foreach ($objectProphecy->getMethodProphecies() as $methodProphecies) { foreach ($methodProphecies as $methodProphecy) { assert($methodProphecy instanceof MethodProphecy); $this->numAssertions += count($methodProphecy->getCheckedPredictions()); } } } } } } private function handleDependencies(): bool { if (!empty($this->dependencies) && !$this->inIsolation) { $passed = $this->result->passed(); $passedKeys = array_keys($passed); foreach ($passedKeys as $key => $value) { $pos = strpos($value, ' with data set'); if ($pos !== false) { $passedKeys[$key] = substr($value, 0, $pos); } } $passedKeys = array_flip(array_unique($passedKeys)); foreach ($this->dependencies as $dependency) { $deepClone = false; $shallowClone = false; if (empty($dependency)) { $this->markSkippedForNotSpecifyingDependency(); return false; } if (strpos($dependency, 'clone ') === 0) { $deepClone = true; $dependency = substr($dependency, strlen('clone ')); } elseif (strpos($dependency, '!clone ') === 0) { $deepClone = false; $dependency = substr($dependency, strlen('!clone ')); } if (strpos($dependency, 'shallowClone ') === 0) { $shallowClone = true; $dependency = substr($dependency, strlen('shallowClone ')); } elseif (strpos($dependency, '!shallowClone ') === 0) { $shallowClone = false; $dependency = substr($dependency, strlen('!shallowClone ')); } if (strpos($dependency, '::') === false) { $dependency = static::class . '::' . $dependency; } if (!isset($passedKeys[$dependency])) { if (!$this->isCallableTestMethod($dependency)) { $this->warnAboutDependencyThatDoesNotExist($dependency); } else { $this->markSkippedForMissingDependency($dependency); } return false; } if (isset($passed[$dependency])) { if ($passed[$dependency]['size'] !== TestUtil::UNKNOWN && $this->getSize() !== TestUtil::UNKNOWN && $passed[$dependency]['size'] > $this->getSize()) { $this->result->addError( $this, new SkippedTestError( 'This test depends on a test that is larger than itself.' ), 0 ); return false; } if ($deepClone) { $deepCopy = new DeepCopy; $deepCopy->skipUncloneable(false); $this->dependencyInput[$dependency] = $deepCopy->copy($passed[$dependency]['result']); } elseif ($shallowClone) { $this->dependencyInput[$dependency] = clone $passed[$dependency]['result']; } else { $this->dependencyInput[$dependency] = $passed[$dependency]['result']; } } else { $this->dependencyInput[$dependency] = null; } } } return true; } private function markSkippedForNotSpecifyingDependency(): void { $this->status = BaseTestRunner::STATUS_SKIPPED; $this->result->startTest($this); $this->result->addError( $this, new SkippedTestError( 'This method has an invalid @depends annotation.' ), 0 ); $this->result->endTest($this, 0); } private function markSkippedForMissingDependency(string $dependency): void { $this->status = BaseTestRunner::STATUS_SKIPPED; $this->result->startTest($this); $this->result->addError( $this, new SkippedTestError( sprintf( 'This test depends on "%s" to pass.', $dependency ) ), 0 ); $this->result->endTest($this, 0); } private function warnAboutDependencyThatDoesNotExist(string $dependency): void { $this->status = BaseTestRunner::STATUS_WARNING; $this->result->startTest($this); $this->result->addWarning( $this, new Warning( sprintf( 'This test depends on "%s" which does not exist.', $dependency ) ), 0 ); $this->result->endTest($this, 0); } /** * Get the mock object generator, creating it if it doesn't exist. */ private function getMockObjectGenerator(): MockGenerator { if ($this->mockObjectGenerator === null) { $this->mockObjectGenerator = new MockGenerator; } return $this->mockObjectGenerator; } private function startOutputBuffering(): void { ob_start(); $this->outputBufferingActive = true; $this->outputBufferingLevel = ob_get_level(); } /** * @throws RiskyTestError */ private function stopOutputBuffering(): void { if (ob_get_level() !== $this->outputBufferingLevel) { while (ob_get_level() >= $this->outputBufferingLevel) { ob_end_clean(); } throw new RiskyTestError( 'Test code or tested code did not (only) close its own output buffers' ); } $this->output = ob_get_contents(); if ($this->outputCallback !== false) { $this->output = (string) call_user_func($this->outputCallback, $this->output); } ob_end_clean(); $this->outputBufferingActive = false; $this->outputBufferingLevel = ob_get_level(); } private function snapshotGlobalState(): void { if ($this->runTestInSeparateProcess || $this->inIsolation || (!$this->backupGlobals && !$this->backupStaticAttributes)) { return; } $this->snapshot = $this->createGlobalStateSnapshot($this->backupGlobals === true); } /** * @throws InvalidArgumentException * @throws RiskyTestError */ private function restoreGlobalState(): void { if (!$this->snapshot instanceof Snapshot) { return; } if ($this->beStrictAboutChangesToGlobalState) { try { $this->compareGlobalStateSnapshots( $this->snapshot, $this->createGlobalStateSnapshot($this->backupGlobals === true) ); } catch (RiskyTestError $rte) { // Intentionally left empty } } $restorer = new Restorer; if ($this->backupGlobals) { $restorer->restoreGlobalVariables($this->snapshot); } if ($this->backupStaticAttributes) { $restorer->restoreStaticAttributes($this->snapshot); } $this->snapshot = null; if (isset($rte)) { throw $rte; } } private function createGlobalStateSnapshot(bool $backupGlobals): Snapshot { $blacklist = new Blacklist; foreach ($this->backupGlobalsBlacklist as $globalVariable) { $blacklist->addGlobalVariable($globalVariable); } if (!defined('PHPUNIT_TESTSUITE')) { $blacklist->addClassNamePrefix('PHPUnit'); $blacklist->addClassNamePrefix('SebastianBergmann\CodeCoverage'); $blacklist->addClassNamePrefix('SebastianBergmann\FileIterator'); $blacklist->addClassNamePrefix('SebastianBergmann\Invoker'); $blacklist->addClassNamePrefix('SebastianBergmann\Timer'); $blacklist->addClassNamePrefix('PHP_Token'); $blacklist->addClassNamePrefix('Text_Template'); $blacklist->addClassNamePrefix('Doctrine\Instantiator'); $blacklist->addClassNamePrefix('Prophecy'); $blacklist->addStaticAttribute(ComparatorFactory::class, 'instance'); foreach ($this->backupStaticAttributesBlacklist as $class => $attributes) { foreach ($attributes as $attribute) { $blacklist->addStaticAttribute($class, $attribute); } } } return new Snapshot( $blacklist, $backupGlobals, (bool) $this->backupStaticAttributes, false, false, false, false, false, false, false ); } /** * @throws InvalidArgumentException * @throws RiskyTestError */ private function compareGlobalStateSnapshots(Snapshot $before, Snapshot $after): void { $backupGlobals = $this->backupGlobals === null || $this->backupGlobals; if ($backupGlobals) { $this->compareGlobalStateSnapshotPart( $before->globalVariables(), $after->globalVariables(), "--- Global variables before the test\n+++ Global variables after the test\n" ); $this->compareGlobalStateSnapshotPart( $before->superGlobalVariables(), $after->superGlobalVariables(), "--- Super-global variables before the test\n+++ Super-global variables after the test\n" ); } if ($this->backupStaticAttributes) { $this->compareGlobalStateSnapshotPart( $before->staticAttributes(), $after->staticAttributes(), "--- Static attributes before the test\n+++ Static attributes after the test\n" ); } } /** * @throws RiskyTestError */ private function compareGlobalStateSnapshotPart(array $before, array $after, string $header): void { if ($before != $after) { $differ = new Differ($header); $exporter = new Exporter; $diff = $differ->diff( $exporter->export($before), $exporter->export($after) ); throw new RiskyTestError( $diff ); } } private function getProphet(): Prophet { if ($this->prophet === null) { $this->prophet = new Prophet; } return $this->prophet; } /** * @throws \SebastianBergmann\ObjectEnumerator\InvalidArgumentException */ private function shouldInvocationMockerBeReset(MockObject $mock): bool { $enumerator = new Enumerator; foreach ($enumerator->enumerate($this->dependencyInput) as $object) { if ($mock === $object) { return false; } } if (!is_array($this->testResult) && !is_object($this->testResult)) { return true; } return !in_array($mock, $enumerator->enumerate($this->testResult), true); } /** * @throws \SebastianBergmann\ObjectEnumerator\InvalidArgumentException * @throws \SebastianBergmann\ObjectReflector\InvalidArgumentException * @throws InvalidArgumentException */ private function registerMockObjectsFromTestArguments(array $testArguments, array &$visited = []): void { if ($this->registerMockObjectsFromTestArgumentsRecursively) { foreach ((new Enumerator)->enumerate($testArguments) as $object) { if ($object instanceof MockObject) { $this->registerMockObject($object); } } } else { foreach ($testArguments as $testArgument) { if ($testArgument instanceof MockObject) { if (Type::isCloneable($testArgument)) { $testArgument = clone $testArgument; } $this->registerMockObject($testArgument); } elseif (is_array($testArgument) && !in_array($testArgument, $visited, true)) { $visited[] = $testArgument; $this->registerMockObjectsFromTestArguments( $testArgument, $visited ); } } } } private function setDoesNotPerformAssertionsFromAnnotation(): void { $annotations = $this->getAnnotations(); if (isset($annotations['method']['doesNotPerformAssertions'])) { $this->doesNotPerformAssertions = true; } } private function unregisterCustomComparators(): void { $factory = ComparatorFactory::getInstance(); foreach ($this->customComparators as $comparator) { $factory->unregister($comparator); } $this->customComparators = []; } private function cleanupIniSettings(): void { foreach ($this->iniSettings as $varName => $oldValue) { ini_set($varName, $oldValue); } $this->iniSettings = []; } private function cleanupLocaleSettings(): void { foreach ($this->locale as $category => $locale) { setlocale($category, $locale); } $this->locale = []; } /** * @throws Exception */ private function checkExceptionExpectations(Throwable $throwable): bool { $result = false; if ($this->expectedException !== null || $this->expectedExceptionCode !== null || $this->expectedExceptionMessage !== null || $this->expectedExceptionMessageRegExp !== null) { $result = true; } if ($throwable instanceof Exception) { $result = false; } if (is_string($this->expectedException)) { try { $reflector = new ReflectionClass($this->expectedException); // @codeCoverageIgnoreStart } catch (ReflectionException $e) { throw new Exception( $e->getMessage(), $e->getCode(), $e ); } // @codeCoverageIgnoreEnd if ($this->expectedException === 'PHPUnit\Framework\Exception' || $this->expectedException === '\PHPUnit\Framework\Exception' || $reflector->isSubclassOf(Exception::class)) { $result = true; } } return $result; } private function runInSeparateProcess(): bool { return ($this->runTestInSeparateProcess || $this->runClassInSeparateProcess) && !$this->inIsolation && !$this instanceof PhptTestCase; } /** * @param string|string[] $originalClassName */ private function recordDoubledType($originalClassName): void { if (is_string($originalClassName)) { $this->doubledTypes[] = $originalClassName; } if (is_array($originalClassName)) { foreach ($originalClassName as $_originalClassName) { if (is_string($_originalClassName)) { $this->doubledTypes[] = $_originalClassName; } } } } private function isCallableTestMethod(string $dependency): bool { [$className, $methodName] = explode('::', $dependency); if (!class_exists($className)) { return false; } try { $class = new ReflectionClass($className); } catch (ReflectionException $e) { return false; } if (!$class->isSubclassOf(__CLASS__)) { return false; } if (!$class->hasMethod($methodName)) { return false; } try { $method = $class->getMethod($methodName); } catch (ReflectionException $e) { return false; } return TestUtil::isTestMethod($method); } } PK!#9dž™™ifile-manager-advanced/application/svg-sanitizer/includes/phpunit/phpunit/src/Framework/IncompleteTest.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace PHPUnit\Framework; /** * @internal This class is not covered by the backward compatibility promise for PHPUnit */ interface IncompleteTest { } PK!A¿sµµfile-manager-advanced/application/svg-sanitizer/includes/phpunit/phpunit/src/Framework/Exception/ExpectationFailedException.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace PHPUnit\Framework; use Exception; use SebastianBergmann\Comparator\ComparisonFailure; /** * Exception for expectations which failed their check. * * The exception contains the error message and optionally a * SebastianBergmann\Comparator\ComparisonFailure which is used to * generate diff output of the failed expectations. * * @internal This class is not covered by the backward compatibility promise for PHPUnit */ final class ExpectationFailedException extends AssertionFailedError { /** * @var ComparisonFailure */ protected $comparisonFailure; public function __construct(string $message, ?ComparisonFailure $comparisonFailure = null, ?Exception $previous = null) { $this->comparisonFailure = $comparisonFailure; parent::__construct($message, 0, $previous); } public function getComparisonFailure(): ?ComparisonFailure { return $this->comparisonFailure; } } PK!ÁpÇðÃÄfile-manager-advanced/application/svg-sanitizer/includes/phpunit/phpunit/src/Framework/Exception/CoveredCodeNotExecutedException.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace PHPUnit\Framework; /** * @internal This class is not covered by the backward compatibility promise for PHPUnit */ final class CoveredCodeNotExecutedException extends RiskyTestError { } PK!ëæÞR»»�file-manager-advanced/application/svg-sanitizer/includes/phpunit/phpunit/src/Framework/Exception/InvalidDataProviderException.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace PHPUnit\Framework; /** * @internal This class is not covered by the backward compatibility promise for PHPUnit */ final class InvalidDataProviderException extends Exception { } PK!ãÖ:tµµpfile-manager-advanced/application/svg-sanitizer/includes/phpunit/phpunit/src/Framework/Exception/OutputError.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace PHPUnit\Framework; /** * @internal This class is not covered by the backward compatibility promise for PHPUnit */ final class OutputError extends AssertionFailedError { } PK!>ŠìG  }file-manager-advanced/application/svg-sanitizer/includes/phpunit/phpunit/src/Framework/Exception/PHPTAssertionFailedError.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace PHPUnit\Framework; /** * @internal This class is not covered by the backward compatibility promise for PHPUnit */ final class PHPTAssertionFailedError extends SyntheticError { /** * @var string */ private $diff; public function __construct(string $message, int $code, string $file, int $line, array $trace, string $diff) { parent::__construct($message, $code, $file, $line, $trace); $this->diff = $diff; } public function getDiff(): string { return $this->diff; } } PK!<߆]®®zfile-manager-advanced/application/svg-sanitizer/includes/phpunit/phpunit/src/Framework/Exception/CodeCoverageException.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace PHPUnit\Framework; /** * @internal This class is not covered by the backward compatibility promise for PHPUnit */ class CodeCoverageException extends Exception { } PK!úÚÓ�ÐÐzfile-manager-advanced/application/svg-sanitizer/includes/phpunit/phpunit/src/Framework/Exception/SyntheticSkippedError.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace PHPUnit\Framework; /** * @internal This class is not covered by the backward compatibility promise for PHPUnit */ final class SyntheticSkippedError extends SyntheticError implements SkippedTest { } PK!9�d¯²²sfile-manager-advanced/application/svg-sanitizer/includes/phpunit/phpunit/src/Framework/Exception/RiskyTestError.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace PHPUnit\Framework; /** * @internal This class is not covered by the backward compatibility promise for PHPUnit */ class RiskyTestError extends AssertionFailedError { } PK!ÄU�œÇÇ�file-manager-advanced/application/svg-sanitizer/includes/phpunit/phpunit/src/Framework/Exception/InvalidCoversTargetException.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace PHPUnit\Framework; /** * @internal This class is not covered by the backward compatibility promise for PHPUnit */ final class InvalidCoversTargetException extends CodeCoverageException { } PK!1�ÈÄÄ…file-manager-advanced/application/svg-sanitizer/includes/phpunit/phpunit/src/Framework/Exception/MissingCoversAnnotationException.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace PHPUnit\Framework; /** * @internal This class is not covered by the backward compatibility promise for PHPUnit */ final class MissingCoversAnnotationException extends RiskyTestError { } PK! ë±Jcclfile-manager-advanced/application/svg-sanitizer/includes/phpunit/phpunit/src/Framework/Exception/Warning.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace PHPUnit\Framework; /** * @internal This class is not covered by the backward compatibility promise for PHPUnit */ final class Warning extends Exception implements SelfDescribing { /** * Wrapper for getMessage() which is declared as final. */ public function toString(): string { return $this->getMessage(); } } PK!i£tîÃÄfile-manager-advanced/application/svg-sanitizer/includes/phpunit/phpunit/src/Framework/Exception/UnintentionallyCoveredCodeError.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace PHPUnit\Framework; /** * @internal This class is not covered by the backward compatibility promise for PHPUnit */ final class UnintentionallyCoveredCodeError extends RiskyTestError { } PK!åŸ)R××xfile-manager-advanced/application/svg-sanitizer/includes/phpunit/phpunit/src/Framework/Exception/IncompleteTestError.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace PHPUnit\Framework; /** * @internal This class is not covered by the backward compatibility promise for PHPUnit */ final class IncompleteTestError extends AssertionFailedError implements IncompleteTest { } PK!uYÉĤ ¤ nfile-manager-advanced/application/svg-sanitizer/includes/phpunit/phpunit/src/Framework/Exception/Exception.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace PHPUnit\Framework; use function array_keys; use function get_object_vars; use PHPUnit\Util\Filter; use RuntimeException; use Throwable; /** * Base class for all PHPUnit Framework exceptions. * * Ensures that exceptions thrown during a test run do not leave stray * references behind. * * Every Exception contains a stack trace. Each stack frame contains the 'args' * of the called function. The function arguments can contain references to * instantiated objects. The references prevent the objects from being * destructed (until test results are eventually printed), so memory cannot be * freed up. * * With enabled process isolation, test results are serialized in the child * process and unserialized in the parent process. The stack trace of Exceptions * may contain objects that cannot be serialized or unserialized (e.g., PDO * connections). Unserializing user-space objects from the child process into * the parent would break the intended encapsulation of process isolation. * * @see http://fabien.potencier.org/article/9/php-serialization-stack-traces-and-exceptions * * @internal This class is not covered by the backward compatibility promise for PHPUnit */ class Exception extends RuntimeException implements \PHPUnit\Exception { /** * @var array */ protected $serializableTrace; public function __construct($message = '', $code = 0, ?Throwable $previous = null) { parent::__construct($message, $code, $previous); $this->serializableTrace = $this->getTrace(); foreach (array_keys($this->serializableTrace) as $key) { unset($this->serializableTrace[$key]['args']); } } public function __toString(): string { $string = TestFailure::exceptionToString($this); if ($trace = Filter::getFilteredStacktrace($this)) { $string .= "\n" . $trace; } return $string; } public function __sleep(): array { return array_keys(get_object_vars($this)); } /** * Returns the serializable trace (without 'args'). */ public function getSerializableTrace(): array { return $this->serializableTrace; } } PK!=é@úÑÑufile-manager-advanced/application/svg-sanitizer/includes/phpunit/phpunit/src/Framework/Exception/SkippedTestError.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace PHPUnit\Framework; /** * @internal This class is not covered by the backward compatibility promise for PHPUnit */ final class SkippedTestError extends AssertionFailedError implements SkippedTest { } PK!çÌkÖ}file-manager-advanced/application/svg-sanitizer/includes/phpunit/phpunit/src/Framework/Exception/InvalidArgumentException.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace PHPUnit\Framework; use function debug_backtrace; use function in_array; use function lcfirst; use function sprintf; /** * @internal This class is not covered by the backward compatibility promise for PHPUnit */ final class InvalidArgumentException extends Exception { public static function create(int $argument, string $type): self { $stack = debug_backtrace(); $function = $stack[1]['function']; if (isset($stack[1]['class'])) { $function = sprintf('%s::%s', $stack[1]['class'], $stack[1]['function']); } return new self( sprintf( 'Argument #%d of %s() must be %s %s', $argument, $function, in_array(lcfirst($type)[0], ['a', 'e', 'i', 'o', 'u'], true) ? 'an' : 'a', $type ) ); } private function __construct(string $message = '', int $code = 0, ?\Exception $previous = null) { parent::__construct($message, $code, $previous); } } PK!iîÙ&&sfile-manager-advanced/application/svg-sanitizer/includes/phpunit/phpunit/src/Framework/Exception/SyntheticError.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace PHPUnit\Framework; /** * @internal This class is not covered by the backward compatibility promise for PHPUnit */ class SyntheticError extends AssertionFailedError { /** * The synthetic file. * * @var string */ protected $syntheticFile = ''; /** * The synthetic line number. * * @var int */ protected $syntheticLine = 0; /** * The synthetic trace. * * @var array */ protected $syntheticTrace = []; public function __construct(string $message, int $code, string $file, int $line, array $trace) { parent::__construct($message, $code); $this->syntheticFile = $file; $this->syntheticLine = $line; $this->syntheticTrace = $trace; } public function getSyntheticFile(): string { return $this->syntheticFile; } public function getSyntheticLine(): int { return $this->syntheticLine; } public function getSyntheticTrace(): array { return $this->syntheticTrace; } } PK!¢‘]N¸¸~file-manager-advanced/application/svg-sanitizer/includes/phpunit/phpunit/src/Framework/Exception/NoChildTestSuiteException.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace PHPUnit\Framework; /** * @internal This class is not covered by the backward compatibility promise for PHPUnit */ final class NoChildTestSuiteException extends Exception { } PK!¢ZY³jjyfile-manager-advanced/application/svg-sanitizer/includes/phpunit/phpunit/src/Framework/Exception/AssertionFailedError.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace PHPUnit\Framework; /** * @internal This class is not covered by the backward compatibility promise for PHPUnit */ class AssertionFailedError extends Exception implements SelfDescribing { /** * Wrapper for getMessage() which is declared as final. */ public function toString(): string { return $this->getMessage(); } } PK!fôÄÖÖzfile-manager-advanced/application/svg-sanitizer/includes/phpunit/phpunit/src/Framework/Exception/SkippedTestSuiteError.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace PHPUnit\Framework; /** * @internal This class is not covered by the backward compatibility promise for PHPUnit */ final class SkippedTestSuiteError extends AssertionFailedError implements SkippedTest { } PK!š\n°ÕÕ|file-manager-advanced/application/svg-sanitizer/includes/phpunit/phpunit/src/Framework/TestListenerDefaultImplementation.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace PHPUnit\Framework; use Throwable; /** * @deprecated The `TestListener` interface is deprecated */ trait TestListenerDefaultImplementation { public function addError(Test $test, Throwable $t, float $time): void { } public function addWarning(Test $test, Warning $e, float $time): void { } public function addFailure(Test $test, AssertionFailedError $e, float $time): void { } public function addIncompleteTest(Test $test, Throwable $t, float $time): void { } public function addRiskyTest(Test $test, Throwable $t, float $time): void { } public function addSkippedTest(Test $test, Throwable $t, float $time): void { } public function startTestSuite(TestSuite $suite): void { } public function endTestSuite(TestSuite $suite): void { } public function startTest(Test $test): void { } public function endTest(Test $test, float $time): void { } } PK!´õ¦97€7€efile-manager-advanced/application/svg-sanitizer/includes/phpunit/phpunit/src/Framework/TestResult.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace PHPUnit\Framework; use const PHP_EOL; use function class_exists; use function count; use function extension_loaded; use function function_exists; use function get_class; use function sprintf; use function xdebug_get_monitored_functions; use function xdebug_is_debugger_active; use function xdebug_start_function_monitor; use function xdebug_stop_function_monitor; use AssertionError; use Countable; use Error; use PHPUnit\Framework\MockObject\Exception as MockObjectException; use PHPUnit\Util\Blacklist; use PHPUnit\Util\ErrorHandler; use PHPUnit\Util\Printer; use PHPUnit\Util\Test as TestUtil; use ReflectionClass; use ReflectionException; use SebastianBergmann\CodeCoverage\CodeCoverage; use SebastianBergmann\CodeCoverage\CoveredCodeNotExecutedException as OriginalCoveredCodeNotExecutedException; use SebastianBergmann\CodeCoverage\Exception as OriginalCodeCoverageException; use SebastianBergmann\CodeCoverage\MissingCoversAnnotationException as OriginalMissingCoversAnnotationException; use SebastianBergmann\CodeCoverage\RuntimeException; use SebastianBergmann\CodeCoverage\UnintentionallyCoveredCodeException; use SebastianBergmann\Invoker\Invoker; use SebastianBergmann\Invoker\TimeoutException; use SebastianBergmann\RecursionContext\InvalidArgumentException; use SebastianBergmann\ResourceOperations\ResourceOperations; use SebastianBergmann\Timer\Timer; use Throwable; /** * @internal This class is not covered by the backward compatibility promise for PHPUnit */ final class TestResult implements Countable { /** * @var array */ private $passed = []; /** * @var TestFailure[] */ private $errors = []; /** * @var TestFailure[] */ private $failures = []; /** * @var TestFailure[] */ private $warnings = []; /** * @var TestFailure[] */ private $notImplemented = []; /** * @var TestFailure[] */ private $risky = []; /** * @var TestFailure[] */ private $skipped = []; /** * @deprecated Use the `TestHook` interfaces instead * * @var TestListener[] */ private $listeners = []; /** * @var int */ private $runTests = 0; /** * @var float */ private $time = 0; /** * @var TestSuite */ private $topTestSuite; /** * Code Coverage information. * * @var CodeCoverage */ private $codeCoverage; /** * @var bool */ private $convertDeprecationsToExceptions = false; /** * @var bool */ private $convertErrorsToExceptions = true; /** * @var bool */ private $convertNoticesToExceptions = true; /** * @var bool */ private $convertWarningsToExceptions = true; /** * @var bool */ private $stop = false; /** * @var bool */ private $stopOnError = false; /** * @var bool */ private $stopOnFailure = false; /** * @var bool */ private $stopOnWarning = false; /** * @var bool */ private $beStrictAboutTestsThatDoNotTestAnything = true; /** * @var bool */ private $beStrictAboutOutputDuringTests = false; /** * @var bool */ private $beStrictAboutTodoAnnotatedTests = false; /** * @var bool */ private $beStrictAboutResourceUsageDuringSmallTests = false; /** * @var bool */ private $enforceTimeLimit = false; /** * @var int */ private $timeoutForSmallTests = 1; /** * @var int */ private $timeoutForMediumTests = 10; /** * @var int */ private $timeoutForLargeTests = 60; /** * @var bool */ private $stopOnRisky = false; /** * @var bool */ private $stopOnIncomplete = false; /** * @var bool */ private $stopOnSkipped = false; /** * @var bool */ private $lastTestFailed = false; /** * @var int */ private $defaultTimeLimit = 0; /** * @var bool */ private $stopOnDefect = false; /** * @var bool */ private $registerMockObjectsFromTestArgumentsRecursively = false; /** * @deprecated Use the `TestHook` interfaces instead * * @codeCoverageIgnore * * Registers a TestListener. */ public function addListener(TestListener $listener): void { $this->listeners[] = $listener; } /** * @deprecated Use the `TestHook` interfaces instead * * @codeCoverageIgnore * * Unregisters a TestListener. */ public function removeListener(TestListener $listener): void { foreach ($this->listeners as $key => $_listener) { if ($listener === $_listener) { unset($this->listeners[$key]); } } } /** * @deprecated Use the `TestHook` interfaces instead * * @codeCoverageIgnore * * Flushes all flushable TestListeners. */ public function flushListeners(): void { foreach ($this->listeners as $listener) { if ($listener instanceof Printer) { $listener->flush(); } } } /** * Adds an error to the list of errors. */ public function addError(Test $test, Throwable $t, float $time): void { if ($t instanceof RiskyTestError) { $this->risky[] = new TestFailure($test, $t); $notifyMethod = 'addRiskyTest'; if ($test instanceof TestCase) { $test->markAsRisky(); } if ($this->stopOnRisky || $this->stopOnDefect) { $this->stop(); } } elseif ($t instanceof IncompleteTest) { $this->notImplemented[] = new TestFailure($test, $t); $notifyMethod = 'addIncompleteTest'; if ($this->stopOnIncomplete) { $this->stop(); } } elseif ($t instanceof SkippedTest) { $this->skipped[] = new TestFailure($test, $t); $notifyMethod = 'addSkippedTest'; if ($this->stopOnSkipped) { $this->stop(); } } else { $this->errors[] = new TestFailure($test, $t); $notifyMethod = 'addError'; if ($this->stopOnError || $this->stopOnFailure) { $this->stop(); } } // @see https://github.com/sebastianbergmann/phpunit/issues/1953 if ($t instanceof Error) { $t = new ExceptionWrapper($t); } foreach ($this->listeners as $listener) { $listener->{$notifyMethod}($test, $t, $time); } $this->lastTestFailed = true; $this->time += $time; } /** * Adds a warning to the list of warnings. * The passed in exception caused the warning. */ public function addWarning(Test $test, Warning $e, float $time): void { if ($this->stopOnWarning || $this->stopOnDefect) { $this->stop(); } $this->warnings[] = new TestFailure($test, $e); foreach ($this->listeners as $listener) { $listener->addWarning($test, $e, $time); } $this->time += $time; } /** * Adds a failure to the list of failures. * The passed in exception caused the failure. */ public function addFailure(Test $test, AssertionFailedError $e, float $time): void { if ($e instanceof RiskyTestError || $e instanceof OutputError) { $this->risky[] = new TestFailure($test, $e); $notifyMethod = 'addRiskyTest'; if ($test instanceof TestCase) { $test->markAsRisky(); } if ($this->stopOnRisky || $this->stopOnDefect) { $this->stop(); } } elseif ($e instanceof IncompleteTest) { $this->notImplemented[] = new TestFailure($test, $e); $notifyMethod = 'addIncompleteTest'; if ($this->stopOnIncomplete) { $this->stop(); } } elseif ($e instanceof SkippedTest) { $this->skipped[] = new TestFailure($test, $e); $notifyMethod = 'addSkippedTest'; if ($this->stopOnSkipped) { $this->stop(); } } else { $this->failures[] = new TestFailure($test, $e); $notifyMethod = 'addFailure'; if ($this->stopOnFailure || $this->stopOnDefect) { $this->stop(); } } foreach ($this->listeners as $listener) { $listener->{$notifyMethod}($test, $e, $time); } $this->lastTestFailed = true; $this->time += $time; } /** * Informs the result that a test suite will be started. */ public function startTestSuite(TestSuite $suite): void { if ($this->topTestSuite === null) { $this->topTestSuite = $suite; } foreach ($this->listeners as $listener) { $listener->startTestSuite($suite); } } /** * Informs the result that a test suite was completed. */ public function endTestSuite(TestSuite $suite): void { foreach ($this->listeners as $listener) { $listener->endTestSuite($suite); } } /** * Informs the result that a test will be started. */ public function startTest(Test $test): void { $this->lastTestFailed = false; $this->runTests += count($test); foreach ($this->listeners as $listener) { $listener->startTest($test); } } /** * Informs the result that a test was completed. * * @throws InvalidArgumentException */ public function endTest(Test $test, float $time): void { foreach ($this->listeners as $listener) { $listener->endTest($test, $time); } if (!$this->lastTestFailed && $test instanceof TestCase) { $class = get_class($test); $key = $class . '::' . $test->getName(); $this->passed[$key] = [ 'result' => $test->getResult(), 'size' => TestUtil::getSize( $class, $test->getName(false) ), ]; $this->time += $time; } } /** * Returns true if no risky test occurred. */ public function allHarmless(): bool { return $this->riskyCount() == 0; } /** * Gets the number of risky tests. */ public function riskyCount(): int { return count($this->risky); } /** * Returns true if no incomplete test occurred. */ public function allCompletelyImplemented(): bool { return $this->notImplementedCount() == 0; } /** * Gets the number of incomplete tests. */ public function notImplementedCount(): int { return count($this->notImplemented); } /** * Returns an array of TestFailure objects for the risky tests. * * @return TestFailure[] */ public function risky(): array { return $this->risky; } /** * Returns an array of TestFailure objects for the incomplete tests. * * @return TestFailure[] */ public function notImplemented(): array { return $this->notImplemented; } /** * Returns true if no test has been skipped. */ public function noneSkipped(): bool { return $this->skippedCount() == 0; } /** * Gets the number of skipped tests. */ public function skippedCount(): int { return count($this->skipped); } /** * Returns an array of TestFailure objects for the skipped tests. * * @return TestFailure[] */ public function skipped(): array { return $this->skipped; } /** * Gets the number of detected errors. */ public function errorCount(): int { return count($this->errors); } /** * Returns an array of TestFailure objects for the errors. * * @return TestFailure[] */ public function errors(): array { return $this->errors; } /** * Gets the number of detected failures. */ public function failureCount(): int { return count($this->failures); } /** * Returns an array of TestFailure objects for the failures. * * @return TestFailure[] */ public function failures(): array { return $this->failures; } /** * Gets the number of detected warnings. */ public function warningCount(): int { return count($this->warnings); } /** * Returns an array of TestFailure objects for the warnings. * * @return TestFailure[] */ public function warnings(): array { return $this->warnings; } /** * Returns the names of the tests that have passed. */ public function passed(): array { return $this->passed; } /** * Returns the (top) test suite. */ public function topTestSuite(): TestSuite { return $this->topTestSuite; } /** * Returns whether code coverage information should be collected. */ public function getCollectCodeCoverageInformation(): bool { return $this->codeCoverage !== null; } /** * Runs a TestCase. * * @throws \SebastianBergmann\CodeCoverage\InvalidArgumentException * @throws CodeCoverageException * @throws InvalidArgumentException * @throws OriginalCoveredCodeNotExecutedException * @throws OriginalMissingCoversAnnotationException * @throws RuntimeException * @throws UnintentionallyCoveredCodeException */ public function run(Test $test): void { Assert::resetCount(); $size = TestUtil::UNKNOWN; if ($test instanceof TestCase) { $test->setRegisterMockObjectsFromTestArgumentsRecursively( $this->registerMockObjectsFromTestArgumentsRecursively ); $isAnyCoverageRequired = TestUtil::requiresCodeCoverageDataCollection($test); $size = $test->getSize(); } $error = false; $failure = false; $warning = false; $incomplete = false; $risky = false; $skipped = false; $this->startTest($test); if ($this->convertDeprecationsToExceptions || $this->convertErrorsToExceptions || $this->convertNoticesToExceptions || $this->convertWarningsToExceptions) { $errorHandler = new ErrorHandler( $this->convertDeprecationsToExceptions, $this->convertErrorsToExceptions, $this->convertNoticesToExceptions, $this->convertWarningsToExceptions ); $errorHandler->register(); } $collectCodeCoverage = $this->codeCoverage !== null && !$test instanceof WarningTestCase && $isAnyCoverageRequired; if ($collectCodeCoverage) { $this->codeCoverage->start($test); } $monitorFunctions = $this->beStrictAboutResourceUsageDuringSmallTests && !$test instanceof WarningTestCase && $size === TestUtil::SMALL && function_exists('xdebug_start_function_monitor'); if ($monitorFunctions) { /* @noinspection ForgottenDebugOutputInspection */ xdebug_start_function_monitor(ResourceOperations::getFunctions()); } Timer::start(); try { if (!$test instanceof WarningTestCase && $this->shouldTimeLimitBeEnforced($size)) { switch ($size) { case TestUtil::SMALL: $_timeout = $this->timeoutForSmallTests; break; case TestUtil::MEDIUM: $_timeout = $this->timeoutForMediumTests; break; case TestUtil::LARGE: $_timeout = $this->timeoutForLargeTests; break; default: $_timeout = $this->defaultTimeLimit; } $invoker = new Invoker; $invoker->invoke([$test, 'runBare'], [], $_timeout); } else { $test->runBare(); } } catch (TimeoutException $e) { $this->addFailure( $test, new RiskyTestError( $e->getMessage() ), $_timeout ); $risky = true; } catch (MockObjectException $e) { $e = new Warning( $e->getMessage() ); $warning = true; } catch (AssertionFailedError $e) { $failure = true; if ($e instanceof RiskyTestError) { $risky = true; } elseif ($e instanceof IncompleteTestError) { $incomplete = true; } elseif ($e instanceof SkippedTestError) { $skipped = true; } } catch (AssertionError $e) { $test->addToAssertionCount(1); $failure = true; $frame = $e->getTrace()[0]; $e = new AssertionFailedError( sprintf( '%s in %s:%s', $e->getMessage(), $frame['file'] ?? $e->getFile(), $frame['line'] ?? $e->getLine() ), 0, $e ); } catch (Warning $e) { $warning = true; } catch (Exception $e) { $error = true; } catch (Throwable $e) { $e = new ExceptionWrapper($e); $error = true; } $time = Timer::stop(); $test->addToAssertionCount(Assert::getCount()); if ($monitorFunctions) { $blacklist = new Blacklist; /** @noinspection ForgottenDebugOutputInspection */ $functions = xdebug_get_monitored_functions(); /* @noinspection ForgottenDebugOutputInspection */ xdebug_stop_function_monitor(); foreach ($functions as $function) { if (!$blacklist->isBlacklisted($function['filename'])) { $this->addFailure( $test, new RiskyTestError( sprintf( '%s() used in %s:%s', $function['function'], $function['filename'], $function['lineno'] ) ), $time ); } } } if ($this->beStrictAboutTestsThatDoNotTestAnything && $test->getNumAssertions() == 0) { $risky = true; } if ($collectCodeCoverage) { $append = !$risky && !$incomplete && !$skipped; $linesToBeCovered = []; $linesToBeUsed = []; if ($append && $test instanceof TestCase) { try { $linesToBeCovered = TestUtil::getLinesToBeCovered( get_class($test), $test->getName(false) ); $linesToBeUsed = TestUtil::getLinesToBeUsed( get_class($test), $test->getName(false) ); } catch (InvalidCoversTargetException $cce) { $this->addWarning( $test, new Warning( $cce->getMessage() ), $time ); } } try { $this->codeCoverage->stop( $append, $linesToBeCovered, $linesToBeUsed ); } catch (UnintentionallyCoveredCodeException $cce) { $this->addFailure( $test, new UnintentionallyCoveredCodeError( 'This test executed code that is not listed as code to be covered or used:' . PHP_EOL . $cce->getMessage() ), $time ); } catch (OriginalCoveredCodeNotExecutedException $cce) { $this->addFailure( $test, new CoveredCodeNotExecutedException( 'This test did not execute all the code that is listed as code to be covered:' . PHP_EOL . $cce->getMessage() ), $time ); } catch (OriginalMissingCoversAnnotationException $cce) { if ($linesToBeCovered !== false) { $this->addFailure( $test, new MissingCoversAnnotationException( 'This test does not have a @covers annotation but is expected to have one' ), $time ); } } catch (OriginalCodeCoverageException $cce) { $error = true; $e = $e ?? $cce; } } if (isset($errorHandler)) { $errorHandler->unregister(); unset($errorHandler); } if ($error) { $this->addError($test, $e, $time); } elseif ($failure) { $this->addFailure($test, $e, $time); } elseif ($warning) { $this->addWarning($test, $e, $time); } elseif ($this->beStrictAboutTestsThatDoNotTestAnything && !$test->doesNotPerformAssertions() && $test->getNumAssertions() == 0) { try { $reflected = new ReflectionClass($test); // @codeCoverageIgnoreStart } catch (ReflectionException $e) { throw new Exception( $e->getMessage(), $e->getCode(), $e ); } // @codeCoverageIgnoreEnd $name = $test->getName(false); if ($name && $reflected->hasMethod($name)) { try { $reflected = $reflected->getMethod($name); // @codeCoverageIgnoreStart } catch (ReflectionException $e) { throw new Exception( $e->getMessage(), $e->getCode(), $e ); } // @codeCoverageIgnoreEnd } $this->addFailure( $test, new RiskyTestError( sprintf( "This test did not perform any assertions\n\n%s:%d", $reflected->getFileName(), $reflected->getStartLine() ) ), $time ); } elseif ($this->beStrictAboutTestsThatDoNotTestAnything && $test->doesNotPerformAssertions() && $test->getNumAssertions() > 0) { $this->addFailure( $test, new RiskyTestError( sprintf( 'This test is annotated with "@doesNotPerformAssertions" but performed %d assertions', $test->getNumAssertions() ) ), $time ); } elseif ($this->beStrictAboutOutputDuringTests && $test->hasOutput()) { $this->addFailure( $test, new OutputError( sprintf( 'This test printed output: %s', $test->getActualOutput() ) ), $time ); } elseif ($this->beStrictAboutTodoAnnotatedTests && $test instanceof TestCase) { $annotations = $test->getAnnotations(); if (isset($annotations['method']['todo'])) { $this->addFailure( $test, new RiskyTestError( 'Test method is annotated with @todo' ), $time ); } } $this->endTest($test, $time); } /** * Gets the number of run tests. */ public function count(): int { return $this->runTests; } /** * Checks whether the test run should stop. */ public function shouldStop(): bool { return $this->stop; } /** * Marks that the test run should stop. */ public function stop(): void { $this->stop = true; } /** * Returns the code coverage object. */ public function getCodeCoverage(): ?CodeCoverage { return $this->codeCoverage; } /** * Sets the code coverage object. */ public function setCodeCoverage(CodeCoverage $codeCoverage): void { $this->codeCoverage = $codeCoverage; } /** * Enables or disables the deprecation-to-exception conversion. */ public function convertDeprecationsToExceptions(bool $flag): void { $this->convertDeprecationsToExceptions = $flag; } /** * Returns the deprecation-to-exception conversion setting. */ public function getConvertDeprecationsToExceptions(): bool { return $this->convertDeprecationsToExceptions; } /** * Enables or disables the error-to-exception conversion. */ public function convertErrorsToExceptions(bool $flag): void { $this->convertErrorsToExceptions = $flag; } /** * Returns the error-to-exception conversion setting. */ public function getConvertErrorsToExceptions(): bool { return $this->convertErrorsToExceptions; } /** * Enables or disables the notice-to-exception conversion. */ public function convertNoticesToExceptions(bool $flag): void { $this->convertNoticesToExceptions = $flag; } /** * Returns the notice-to-exception conversion setting. */ public function getConvertNoticesToExceptions(): bool { return $this->convertNoticesToExceptions; } /** * Enables or disables the warning-to-exception conversion. */ public function convertWarningsToExceptions(bool $flag): void { $this->convertWarningsToExceptions = $flag; } /** * Returns the warning-to-exception conversion setting. */ public function getConvertWarningsToExceptions(): bool { return $this->convertWarningsToExceptions; } /** * Enables or disables the stopping when an error occurs. */ public function stopOnError(bool $flag): void { $this->stopOnError = $flag; } /** * Enables or disables the stopping when a failure occurs. */ public function stopOnFailure(bool $flag): void { $this->stopOnFailure = $flag; } /** * Enables or disables the stopping when a warning occurs. */ public function stopOnWarning(bool $flag): void { $this->stopOnWarning = $flag; } public function beStrictAboutTestsThatDoNotTestAnything(bool $flag): void { $this->beStrictAboutTestsThatDoNotTestAnything = $flag; } public function isStrictAboutTestsThatDoNotTestAnything(): bool { return $this->beStrictAboutTestsThatDoNotTestAnything; } public function beStrictAboutOutputDuringTests(bool $flag): void { $this->beStrictAboutOutputDuringTests = $flag; } public function isStrictAboutOutputDuringTests(): bool { return $this->beStrictAboutOutputDuringTests; } public function beStrictAboutResourceUsageDuringSmallTests(bool $flag): void { $this->beStrictAboutResourceUsageDuringSmallTests = $flag; } public function isStrictAboutResourceUsageDuringSmallTests(): bool { return $this->beStrictAboutResourceUsageDuringSmallTests; } public function enforceTimeLimit(bool $flag): void { $this->enforceTimeLimit = $flag; } public function enforcesTimeLimit(): bool { return $this->enforceTimeLimit; } public function beStrictAboutTodoAnnotatedTests(bool $flag): void { $this->beStrictAboutTodoAnnotatedTests = $flag; } public function isStrictAboutTodoAnnotatedTests(): bool { return $this->beStrictAboutTodoAnnotatedTests; } /** * Enables or disables the stopping for risky tests. */ public function stopOnRisky(bool $flag): void { $this->stopOnRisky = $flag; } /** * Enables or disables the stopping for incomplete tests. */ public function stopOnIncomplete(bool $flag): void { $this->stopOnIncomplete = $flag; } /** * Enables or disables the stopping for skipped tests. */ public function stopOnSkipped(bool $flag): void { $this->stopOnSkipped = $flag; } /** * Enables or disables the stopping for defects: error, failure, warning. */ public function stopOnDefect(bool $flag): void { $this->stopOnDefect = $flag; } /** * Returns the time spent running the tests. */ public function time(): float { return $this->time; } /** * Returns whether the entire test was successful or not. */ public function wasSuccessful(): bool { return $this->wasSuccessfulIgnoringWarnings() && empty($this->warnings); } public function wasSuccessfulIgnoringWarnings(): bool { return empty($this->errors) && empty($this->failures); } public function wasSuccessfulAndNoTestIsRiskyOrSkippedOrIncomplete(): bool { return $this->wasSuccessful() && $this->allHarmless() && $this->allCompletelyImplemented() && $this->noneSkipped(); } /** * Sets the default timeout for tests. */ public function setDefaultTimeLimit(int $timeout): void { $this->defaultTimeLimit = $timeout; } /** * Sets the timeout for small tests. */ public function setTimeoutForSmallTests(int $timeout): void { $this->timeoutForSmallTests = $timeout; } /** * Sets the timeout for medium tests. */ public function setTimeoutForMediumTests(int $timeout): void { $this->timeoutForMediumTests = $timeout; } /** * Sets the timeout for large tests. */ public function setTimeoutForLargeTests(int $timeout): void { $this->timeoutForLargeTests = $timeout; } /** * Returns the set timeout for large tests. */ public function getTimeoutForLargeTests(): int { return $this->timeoutForLargeTests; } public function setRegisterMockObjectsFromTestArgumentsRecursively(bool $flag): void { $this->registerMockObjectsFromTestArgumentsRecursively = $flag; } private function shouldTimeLimitBeEnforced(int $size): bool { if (!$this->enforceTimeLimit) { return false; } if (!(($this->defaultTimeLimit || $size !== TestUtil::UNKNOWN))) { return false; } if (!extension_loaded('pcntl')) { return false; } if (!class_exists(Invoker::class)) { return false; } if (extension_loaded('xdebug') && xdebug_is_debugger_active()) { return false; } return true; } } PK!)Ù‹––ffile-manager-advanced/application/svg-sanitizer/includes/phpunit/phpunit/src/Framework/SkippedTest.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace PHPUnit\Framework; /** * @internal This class is not covered by the backward compatibility promise for PHPUnit */ interface SkippedTest { } PK!|”GGøøpfile-manager-advanced/application/svg-sanitizer/includes/phpunit/phpunit/src/Framework/DataProviderTestSuite.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace PHPUnit\Framework; use function count; use function explode; use PHPUnit\Util\Test as TestUtil; use SebastianBergmann\RecursionContext\InvalidArgumentException; /** * @internal This class is not covered by the backward compatibility promise for PHPUnit */ final class DataProviderTestSuite extends TestSuite { /** * @var string[] */ private $dependencies = []; /** * @param string[] $dependencies */ public function setDependencies(array $dependencies): void { $this->dependencies = $dependencies; foreach ($this->tests as $test) { if (!$test instanceof TestCase) { continue; } $test->setDependencies($dependencies); } } public function getDependencies(): array { return $this->dependencies; } public function hasDependencies(): bool { return count($this->dependencies) > 0; } /** * Returns the size of the each test created using the data provider(s). * * @throws InvalidArgumentException */ public function getSize(): int { [$className, $methodName] = explode('::', $this->getName()); return TestUtil::getSize($className, $methodName); } } PK!1?—X—Xdfile-manager-advanced/application/svg-sanitizer/includes/phpunit/phpunit/src/Framework/TestSuite.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace PHPUnit\Framework; use const PHP_EOL; use function array_keys; use function array_merge; use function array_slice; use function basename; use function call_user_func; use function class_exists; use function count; use function dirname; use function file_exists; use function get_declared_classes; use function implode; use function is_bool; use function is_object; use function is_string; use function method_exists; use function preg_match; use function preg_quote; use function sprintf; use function substr; use Iterator; use IteratorAggregate; use PHPUnit\Runner\BaseTestRunner; use PHPUnit\Runner\Filter\Factory; use PHPUnit\Runner\PhptTestCase; use PHPUnit\Util\FileLoader; use PHPUnit\Util\Reflection; use PHPUnit\Util\Test as TestUtil; use ReflectionClass; use ReflectionException; use ReflectionMethod; use SebastianBergmann\CodeCoverage\CoveredCodeNotExecutedException; use SebastianBergmann\CodeCoverage\MissingCoversAnnotationException; use SebastianBergmann\CodeCoverage\RuntimeException; use SebastianBergmann\CodeCoverage\UnintentionallyCoveredCodeException; use Throwable; /** * @template-implements IteratorAggregate * * @internal This class is not covered by the backward compatibility promise for PHPUnit */ class TestSuite implements IteratorAggregate, SelfDescribing, Test { /** * Enable or disable the backup and restoration of the $GLOBALS array. * * @var bool */ protected $backupGlobals; /** * Enable or disable the backup and restoration of static attributes. * * @var bool */ protected $backupStaticAttributes; /** * @var bool */ protected $runTestInSeparateProcess = false; /** * The name of the test suite. * * @var string */ protected $name = ''; /** * The test groups of the test suite. * * @var array */ protected $groups = []; /** * The tests in the test suite. * * @var Test[] */ protected $tests = []; /** * The number of tests in the test suite. * * @var int */ protected $numTests = -1; /** * @var bool */ protected $testCase = false; /** * @var string[] */ protected $foundClasses = []; /** * Last count of tests in this suite. * * @var null|int */ private $cachedNumTests; /** * @var bool */ private $beStrictAboutChangesToGlobalState; /** * @var Factory */ private $iteratorFilter; /** * @var int */ private $declaredClassesPointer; /** * Constructs a new TestSuite:. * * - PHPUnit\Framework\TestSuite() constructs an empty TestSuite. * * - PHPUnit\Framework\TestSuite(ReflectionClass) constructs a * TestSuite from the given class. * * - PHPUnit\Framework\TestSuite(ReflectionClass, String) * constructs a TestSuite from the given class with the given * name. * * - PHPUnit\Framework\TestSuite(String) either constructs a * TestSuite from the given class (if the passed string is the * name of an existing class) or constructs an empty TestSuite * with the given name. * * @param ReflectionClass|string $theClass * * @throws Exception */ public function __construct($theClass = '', string $name = '') { if (!is_string($theClass) && !$theClass instanceof ReflectionClass) { throw InvalidArgumentException::create( 1, 'ReflectionClass object or string' ); } $this->declaredClassesPointer = count(get_declared_classes()); if (!$theClass instanceof ReflectionClass) { if (class_exists($theClass, true)) { if ($name === '') { $name = $theClass; } try { $theClass = new ReflectionClass($theClass); // @codeCoverageIgnoreStart } catch (ReflectionException $e) { throw new Exception( $e->getMessage(), $e->getCode(), $e ); } // @codeCoverageIgnoreEnd } else { $this->setName($theClass); return; } } if (!$theClass->isSubclassOf(TestCase::class)) { $this->setName((string) $theClass); return; } if ($name !== '') { $this->setName($name); } else { $this->setName($theClass->getName()); } $constructor = $theClass->getConstructor(); if ($constructor !== null && !$constructor->isPublic()) { $this->addTest( new WarningTestCase( sprintf( 'Class "%s" has no public constructor.', $theClass->getName() ) ) ); return; } foreach ((new Reflection)->publicMethodsInTestClass($theClass) as $method) { if (!TestUtil::isTestMethod($method)) { continue; } $this->addTestMethod($theClass, $method); } if (empty($this->tests)) { $this->addTest( new WarningTestCase( sprintf( 'No tests found in class "%s".', $theClass->getName() ) ) ); } $this->testCase = true; } /** * Returns a string representation of the test suite. */ public function toString(): string { return $this->getName(); } /** * Adds a test to the suite. * * @param array $groups */ public function addTest(Test $test, $groups = []): void { try { $class = new ReflectionClass($test); // @codeCoverageIgnoreStart } catch (ReflectionException $e) { throw new Exception( $e->getMessage(), $e->getCode(), $e ); } // @codeCoverageIgnoreEnd if (!$class->isAbstract()) { $this->tests[] = $test; $this->numTests = -1; if ($test instanceof self && empty($groups)) { $groups = $test->getGroups(); } if (empty($groups)) { $groups = ['default']; } foreach ($groups as $group) { if (!isset($this->groups[$group])) { $this->groups[$group] = [$test]; } else { $this->groups[$group][] = $test; } } if ($test instanceof TestCase) { $test->setGroups($groups); } } } /** * Adds the tests from the given class to the suite. * * @param object|string $testClass * * @throws Exception */ public function addTestSuite($testClass): void { if (!(is_object($testClass) || (is_string($testClass) && class_exists($testClass)))) { throw InvalidArgumentException::create( 1, 'class name or object' ); } if (!is_object($testClass)) { try { $testClass = new ReflectionClass($testClass); // @codeCoverageIgnoreStart } catch (ReflectionException $e) { throw new Exception( $e->getMessage(), $e->getCode(), $e ); } // @codeCoverageIgnoreEnd } if ($testClass instanceof self) { $this->addTest($testClass); } elseif ($testClass instanceof ReflectionClass) { $suiteMethod = false; if (!$testClass->isAbstract() && $testClass->hasMethod(BaseTestRunner::SUITE_METHODNAME)) { try { $method = $testClass->getMethod( BaseTestRunner::SUITE_METHODNAME ); // @codeCoverageIgnoreStart } catch (ReflectionException $e) { throw new Exception( $e->getMessage(), $e->getCode(), $e ); } // @codeCoverageIgnoreEnd if ($method->isStatic()) { $this->addTest( $method->invoke(null, $testClass->getName()) ); $suiteMethod = true; } } if (!$suiteMethod && !$testClass->isAbstract() && $testClass->isSubclassOf(TestCase::class)) { $this->addTest(new self($testClass)); } } else { throw new Exception; } } /** * Wraps both addTest() and addTestSuite * as well as the separate import statements for the user's convenience. * * If the named file cannot be read or there are no new tests that can be * added, a PHPUnit\Framework\WarningTestCase will be created instead, * leaving the current test run untouched. * * @throws Exception */ public function addTestFile(string $filename): void { if (file_exists($filename) && substr($filename, -5) === '.phpt') { $this->addTest( new PhptTestCase($filename) ); return; } // The given file may contain further stub classes in addition to the // test class itself. Figure out the actual test class. $filename = FileLoader::checkAndLoad($filename); $newClasses = array_slice(get_declared_classes(), $this->declaredClassesPointer); // The diff is empty in case a parent class (with test methods) is added // AFTER a child class that inherited from it. To account for that case, // accumulate all discovered classes, so the parent class may be found in // a later invocation. if (!empty($newClasses)) { // On the assumption that test classes are defined first in files, // process discovered classes in approximate LIFO order, so as to // avoid unnecessary reflection. $this->foundClasses = array_merge($newClasses, $this->foundClasses); $this->declaredClassesPointer = count(get_declared_classes()); } // The test class's name must match the filename, either in full, or as // a PEAR/PSR-0 prefixed short name ('NameSpace_ShortName'), or as a // PSR-1 local short name ('NameSpace\ShortName'). The comparison must be // anchored to prevent false-positive matches (e.g., 'OtherShortName'). $shortName = basename($filename, '.php'); $shortNameRegEx = '/(?:^|_|\\\\)' . preg_quote($shortName, '/') . '$/'; foreach ($this->foundClasses as $i => $className) { if (preg_match($shortNameRegEx, $className)) { try { $class = new ReflectionClass($className); // @codeCoverageIgnoreStart } catch (ReflectionException $e) { throw new Exception( $e->getMessage(), $e->getCode(), $e ); } // @codeCoverageIgnoreEnd if ($class->getFileName() == $filename) { $newClasses = [$className]; unset($this->foundClasses[$i]); break; } } } foreach ($newClasses as $className) { try { $class = new ReflectionClass($className); // @codeCoverageIgnoreStart } catch (ReflectionException $e) { throw new Exception( $e->getMessage(), $e->getCode(), $e ); } // @codeCoverageIgnoreEnd if (dirname($class->getFileName()) === __DIR__) { continue; } if (!$class->isAbstract()) { if ($class->hasMethod(BaseTestRunner::SUITE_METHODNAME)) { try { $method = $class->getMethod( BaseTestRunner::SUITE_METHODNAME ); // @codeCoverageIgnoreStart } catch (ReflectionException $e) { throw new Exception( $e->getMessage(), $e->getCode(), $e ); } // @codeCoverageIgnoreEnd if ($method->isStatic()) { $this->addTest($method->invoke(null, $className)); } } elseif ($class->implementsInterface(Test::class)) { $this->addTestSuite($class); } } } $this->numTests = -1; } /** * Wrapper for addTestFile() that adds multiple test files. * * @throws Exception */ public function addTestFiles(iterable $fileNames): void { foreach ($fileNames as $filename) { $this->addTestFile((string) $filename); } } /** * Counts the number of test cases that will be run by this test. */ public function count(bool $preferCache = false): int { if ($preferCache && $this->cachedNumTests !== null) { return $this->cachedNumTests; } $numTests = 0; foreach ($this as $test) { $numTests += count($test); } $this->cachedNumTests = $numTests; return $numTests; } /** * Returns the name of the suite. */ public function getName(): string { return $this->name; } /** * Returns the test groups of the suite. */ public function getGroups(): array { return array_keys($this->groups); } public function getGroupDetails(): array { return $this->groups; } /** * Set tests groups of the test case. */ public function setGroupDetails(array $groups): void { $this->groups = $groups; } /** * Runs the tests and collects their result in a TestResult. * * @throws \SebastianBergmann\CodeCoverage\InvalidArgumentException * @throws \SebastianBergmann\RecursionContext\InvalidArgumentException * @throws CodeCoverageException * @throws CoveredCodeNotExecutedException * @throws MissingCoversAnnotationException * @throws RuntimeException * @throws UnintentionallyCoveredCodeException * @throws Warning */ public function run(?TestResult $result = null): TestResult { if ($result === null) { $result = $this->createResult(); } if (count($this) === 0) { return $result; } /** @psalm-var class-string $className */ $className = $this->name; $hookMethods = TestUtil::getHookMethods($className); $result->startTestSuite($this); try { foreach ($hookMethods['beforeClass'] as $beforeClassMethod) { if ($this->testCase && class_exists($this->name, false) && method_exists($this->name, $beforeClassMethod)) { if ($missingRequirements = TestUtil::getMissingRequirements($this->name, $beforeClassMethod)) { $this->markTestSuiteSkipped(implode(PHP_EOL, $missingRequirements)); } call_user_func([$this->name, $beforeClassMethod]); } } } catch (SkippedTestSuiteError $error) { foreach ($this->tests() as $test) { $result->startTest($test); $result->addFailure($test, $error, 0); $result->endTest($test, 0); } $result->endTestSuite($this); return $result; } catch (Throwable $t) { $errorAdded = false; foreach ($this->tests() as $test) { if ($result->shouldStop()) { break; } $result->startTest($test); if (!$errorAdded) { $result->addError($test, $t, 0); $errorAdded = true; } else { $result->addFailure( $test, new SkippedTestError('Test skipped because of an error in hook method'), 0 ); } $result->endTest($test, 0); } $result->endTestSuite($this); return $result; } foreach ($this as $test) { if ($result->shouldStop()) { break; } if ($test instanceof TestCase || $test instanceof self) { $test->setBeStrictAboutChangesToGlobalState($this->beStrictAboutChangesToGlobalState); $test->setBackupGlobals($this->backupGlobals); $test->setBackupStaticAttributes($this->backupStaticAttributes); $test->setRunTestInSeparateProcess($this->runTestInSeparateProcess); } $test->run($result); } try { foreach ($hookMethods['afterClass'] as $afterClassMethod) { if ($this->testCase && class_exists($this->name, false) && method_exists($this->name, $afterClassMethod)) { call_user_func([$this->name, $afterClassMethod]); } } } catch (Throwable $t) { $message = "Exception in {$this->name}::{$afterClassMethod}" . PHP_EOL . $t->getMessage(); $error = new SyntheticError($message, 0, $t->getFile(), $t->getLine(), $t->getTrace()); $placeholderTest = clone $test; $placeholderTest->setName($afterClassMethod); $result->startTest($placeholderTest); $result->addFailure($placeholderTest, $error, 0); $result->endTest($placeholderTest, 0); } $result->endTestSuite($this); return $result; } public function setRunTestInSeparateProcess(bool $runTestInSeparateProcess): void { $this->runTestInSeparateProcess = $runTestInSeparateProcess; } public function setName(string $name): void { $this->name = $name; } /** * Returns the test at the given index. * * @return false|Test */ public function testAt(int $index) { return $this->tests[$index] ?? false; } /** * Returns the tests as an enumeration. * * @return Test[] */ public function tests(): array { return $this->tests; } /** * Set tests of the test suite. * * @param Test[] $tests */ public function setTests(array $tests): void { $this->tests = $tests; } /** * Mark the test suite as skipped. * * @param string $message * * @throws SkippedTestSuiteError * * @psalm-return never-return */ public function markTestSuiteSkipped($message = ''): void { throw new SkippedTestSuiteError($message); } /** * @param bool $beStrictAboutChangesToGlobalState */ public function setBeStrictAboutChangesToGlobalState($beStrictAboutChangesToGlobalState): void { if (null === $this->beStrictAboutChangesToGlobalState && is_bool($beStrictAboutChangesToGlobalState)) { $this->beStrictAboutChangesToGlobalState = $beStrictAboutChangesToGlobalState; } } /** * @param bool $backupGlobals */ public function setBackupGlobals($backupGlobals): void { if (null === $this->backupGlobals && is_bool($backupGlobals)) { $this->backupGlobals = $backupGlobals; } } /** * @param bool $backupStaticAttributes */ public function setBackupStaticAttributes($backupStaticAttributes): void { if (null === $this->backupStaticAttributes && is_bool($backupStaticAttributes)) { $this->backupStaticAttributes = $backupStaticAttributes; } } /** * Returns an iterator for this test suite. */ public function getIterator(): Iterator { $iterator = new TestSuiteIterator($this); if ($this->iteratorFilter !== null) { $iterator = $this->iteratorFilter->factory($iterator, $this); } return $iterator; } public function injectFilter(Factory $filter): void { $this->iteratorFilter = $filter; foreach ($this as $test) { if ($test instanceof self) { $test->injectFilter($filter); } } } /** * Creates a default TestResult object. */ protected function createResult(): TestResult { return new TestResult; } /** * @throws Exception */ protected function addTestMethod(ReflectionClass $class, ReflectionMethod $method): void { if (!TestUtil::isTestMethod($method)) { return; } $methodName = $method->getName(); $test = (new TestBuilder)->build($class, $methodName); if ($test instanceof TestCase || $test instanceof DataProviderTestSuite) { $test->setDependencies( TestUtil::getDependencies($class->getName(), $methodName) ); } $this->addTest( $test, TestUtil::getGroups($class->getName(), $methodName) ); } } PK!}´û#½½yfile-manager-advanced/application/svg-sanitizer/includes/phpunit/phpunit/src/Framework/InvalidParameterGroupException.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace PHPUnit\Framework; /** * @internal This class is not covered by the backward compatibility promise for PHPUnit */ final class InvalidParameterGroupException extends Exception { } PK!�ÙAù� � kfile-manager-advanced/application/svg-sanitizer/includes/phpunit/phpunit/src/Framework/ExceptionWrapper.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace PHPUnit\Framework; use function array_keys; use function get_class; use function spl_object_hash; use PHPUnit\Util\Filter; use Throwable; /** * Wraps Exceptions thrown by code under test. * * Re-instantiates Exceptions thrown by user-space code to retain their original * class names, properties, and stack traces (but without arguments). * * Unlike PHPUnit\Framework_\Exception, the complete stack of previous Exceptions * is processed. * * @internal This class is not covered by the backward compatibility promise for PHPUnit */ final class ExceptionWrapper extends Exception { /** * @var string */ protected $className; /** * @var null|ExceptionWrapper */ protected $previous; public function __construct(Throwable $t) { // PDOException::getCode() is a string. // @see https://php.net/manual/en/class.pdoexception.php#95812 parent::__construct($t->getMessage(), (int) $t->getCode()); $this->setOriginalException($t); } public function __toString(): string { $string = TestFailure::exceptionToString($this); if ($trace = Filter::getFilteredStacktrace($this)) { $string .= "\n" . $trace; } if ($this->previous) { $string .= "\nCaused by\n" . $this->previous; } return $string; } public function getClassName(): string { return $this->className; } public function getPreviousWrapped(): ?self { return $this->previous; } public function setClassName(string $className): void { $this->className = $className; } public function setOriginalException(Throwable $t): void { $this->originalException($t); $this->className = get_class($t); $this->file = $t->getFile(); $this->line = $t->getLine(); $this->serializableTrace = $t->getTrace(); foreach (array_keys($this->serializableTrace) as $key) { unset($this->serializableTrace[$key]['args']); } if ($t->getPrevious()) { $this->previous = new self($t->getPrevious()); } } public function getOriginalException(): ?Throwable { return $this->originalException(); } /** * Method to contain static originalException to exclude it from stacktrace to prevent the stacktrace contents, * which can be quite big, from being garbage-collected, thus blocking memory until shutdown. * Approach works both for var_dump() and var_export() and print_r(). */ private function originalException(?Throwable $exceptionToStore = null): ?Throwable { static $originalExceptions; $instanceId = spl_object_hash($this); if ($exceptionToStore) { $originalExceptions[$instanceId] = $exceptionToStore; } return $originalExceptions[$instanceId] ?? null; } } PK!@wÂDjfile-manager-advanced/application/svg-sanitizer/includes/phpunit/phpunit/src/Framework/WarningTestCase.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace PHPUnit\Framework; /** * @internal This class is not covered by the backward compatibility promise for PHPUnit */ final class WarningTestCase extends TestCase { /** * @var ?bool */ protected $backupGlobals = false; /** * @var ?bool */ protected $backupStaticAttributes = false; /** * @var ?bool */ protected $runTestInSeparateProcess = false; /** * @var string */ private $message; public function __construct(string $message = '') { $this->message = $message; parent::__construct('Warning'); } public function getMessage(): string { return $this->message; } /** * Returns a string representation of the test case. */ public function toString(): string { return 'Warning'; } /** * @throws Exception * * @psalm-return never-return */ protected function runTest(): void { throw new Warning($this->message); } } PK!ë�F‘ifile-manager-advanced/application/svg-sanitizer/includes/phpunit/phpunit/src/Framework/SelfDescribing.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace PHPUnit\Framework; /** * @internal This class is not covered by the backward compatibility promise for PHPUnit */ interface SelfDescribing { /** * Returns a string representation of the object. */ public function toString(): string; } PK!V±Q+’’jfile-manager-advanced/application/svg-sanitizer/includes/phpunit/phpunit/src/Framework/SkippedTestCase.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace PHPUnit\Framework; use SebastianBergmann\RecursionContext\InvalidArgumentException; /** * @internal This class is not covered by the backward compatibility promise for PHPUnit */ final class SkippedTestCase extends TestCase { /** * @var ?bool */ protected $backupGlobals = false; /** * @var ?bool */ protected $backupStaticAttributes = false; /** * @var ?bool */ protected $runTestInSeparateProcess = false; /** * @var string */ private $message; public function __construct(string $className, string $methodName, string $message = '') { parent::__construct($className . '::' . $methodName); $this->message = $message; } public function getMessage(): string { return $this->message; } /** * Returns a string representation of the test case. * * @throws InvalidArgumentException */ public function toString(): string { return $this->getName(); } /** * @throws Exception */ protected function runTest(): void { $this->markTestSkipped($this->message); } } PK!׊@TÆÆmfile-manager-advanced/application/svg-sanitizer/includes/phpunit/phpunit/src/Framework/MockObject/Matcher.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace PHPUnit\Framework\MockObject; use function assert; use function implode; use function sprintf; use Exception; use PHPUnit\Framework\ExpectationFailedException; use PHPUnit\Framework\MockObject\Rule\AnyInvokedCount; use PHPUnit\Framework\MockObject\Rule\AnyParameters; use PHPUnit\Framework\MockObject\Rule\InvocationOrder; use PHPUnit\Framework\MockObject\Rule\InvokedAtMostCount; use PHPUnit\Framework\MockObject\Rule\InvokedCount; use PHPUnit\Framework\MockObject\Rule\MethodName; use PHPUnit\Framework\MockObject\Rule\ParametersRule; use PHPUnit\Framework\MockObject\Stub\Stub; use PHPUnit\Framework\TestFailure; use SebastianBergmann\RecursionContext\InvalidArgumentException; /** * @internal This class is not covered by the backward compatibility promise for PHPUnit */ final class Matcher { /** * @var InvocationOrder */ private $invocationRule; /** * @var mixed */ private $afterMatchBuilderId; /** * @var bool */ private $afterMatchBuilderIsInvoked = false; /** * @var MethodName */ private $methodNameRule; /** * @var ParametersRule */ private $parametersRule; /** * @var Stub */ private $stub; public function __construct(InvocationOrder $rule) { $this->invocationRule = $rule; } public function hasMatchers(): bool { return !$this->invocationRule instanceof AnyInvokedCount; } public function hasMethodNameRule(): bool { return $this->methodNameRule !== null; } public function getMethodNameRule(): MethodName { return $this->methodNameRule; } public function setMethodNameRule(MethodName $rule): void { $this->methodNameRule = $rule; } public function hasParametersRule(): bool { return $this->parametersRule !== null; } public function setParametersRule(ParametersRule $rule): void { $this->parametersRule = $rule; } public function setStub(Stub $stub): void { $this->stub = $stub; } public function setAfterMatchBuilderId(string $id): void { $this->afterMatchBuilderId = $id; } /** * @throws Exception * @throws ExpectationFailedException * @throws RuntimeException */ public function invoked(Invocation $invocation) { if ($this->methodNameRule === null) { throw new RuntimeException('No method rule is set'); } if ($this->afterMatchBuilderId !== null) { $matcher = $invocation->getObject() ->__phpunit_getInvocationHandler() ->lookupMatcher($this->afterMatchBuilderId); if (!$matcher) { throw new RuntimeException( sprintf( 'No builder found for match builder identification <%s>', $this->afterMatchBuilderId ) ); } assert($matcher instanceof self); if ($matcher->invocationRule->hasBeenInvoked()) { $this->afterMatchBuilderIsInvoked = true; } } $this->invocationRule->invoked($invocation); try { if ($this->parametersRule !== null) { $this->parametersRule->apply($invocation); } } catch (ExpectationFailedException $e) { throw new ExpectationFailedException( sprintf( "Expectation failed for %s when %s\n%s", $this->methodNameRule->toString(), $this->invocationRule->toString(), $e->getMessage() ), $e->getComparisonFailure() ); } if ($this->stub) { return $this->stub->invoke($invocation); } return $invocation->generateReturnValue(); } /** * @throws ExpectationFailedException * @throws InvalidArgumentException * @throws RuntimeException */ public function matches(Invocation $invocation): bool { if ($this->afterMatchBuilderId !== null) { $matcher = $invocation->getObject() ->__phpunit_getInvocationHandler() ->lookupMatcher($this->afterMatchBuilderId); if (!$matcher) { throw new RuntimeException( sprintf( 'No builder found for match builder identification <%s>', $this->afterMatchBuilderId ) ); } assert($matcher instanceof self); if (!$matcher->invocationRule->hasBeenInvoked()) { return false; } } if ($this->methodNameRule === null) { throw new RuntimeException('No method rule is set'); } if (!$this->invocationRule->matches($invocation)) { return false; } try { if (!$this->methodNameRule->matches($invocation)) { return false; } } catch (ExpectationFailedException $e) { throw new ExpectationFailedException( sprintf( "Expectation failed for %s when %s\n%s", $this->methodNameRule->toString(), $this->invocationRule->toString(), $e->getMessage() ), $e->getComparisonFailure() ); } return true; } /** * @throws ExpectationFailedException * @throws InvalidArgumentException * @throws RuntimeException */ public function verify(): void { if ($this->methodNameRule === null) { throw new RuntimeException('No method rule is set'); } try { $this->invocationRule->verify(); if ($this->parametersRule === null) { $this->parametersRule = new AnyParameters; } $invocationIsAny = $this->invocationRule instanceof AnyInvokedCount; $invocationIsNever = $this->invocationRule instanceof InvokedCount && $this->invocationRule->isNever(); $invocationIsAtMost = $this->invocationRule instanceof InvokedAtMostCount; if (!$invocationIsAny && !$invocationIsNever && !$invocationIsAtMost) { $this->parametersRule->verify(); } } catch (ExpectationFailedException $e) { throw new ExpectationFailedException( sprintf( "Expectation failed for %s when %s.\n%s", $this->methodNameRule->toString(), $this->invocationRule->toString(), TestFailure::exceptionToString($e) ) ); } } public function toString(): string { $list = []; if ($this->invocationRule !== null) { $list[] = $this->invocationRule->toString(); } if ($this->methodNameRule !== null) { $list[] = 'where ' . $this->methodNameRule->toString(); } if ($this->parametersRule !== null) { $list[] = 'and ' . $this->parametersRule->toString(); } if ($this->afterMatchBuilderId !== null) { $list[] = 'after ' . $this->afterMatchBuilderId; } if ($this->stub !== null) { $list[] = 'will ' . $this->stub->toString(); } return implode(' ', $list); } } PK!b ^OÇ+Ç+qfile-manager-advanced/application/svg-sanitizer/includes/phpunit/phpunit/src/Framework/MockObject/MockBuilder.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace PHPUnit\Framework\MockObject; use function array_diff; use function array_merge; use function sprintf; use PHPUnit\Framework\Exception; use PHPUnit\Framework\TestCase; use ReflectionClass; use ReflectionException; /** * @psalm-template MockedType */ final class MockBuilder { /** * @var TestCase */ private $testCase; /** * @var string */ private $type; /** * @var null|string[] */ private $methods = []; /** * @var bool */ private $emptyMethodsArray = false; /** * @var string */ private $mockClassName = ''; /** * @var array */ private $constructorArgs = []; /** * @var bool */ private $originalConstructor = true; /** * @var bool */ private $originalClone = true; /** * @var bool */ private $autoload = true; /** * @var bool */ private $cloneArguments = false; /** * @var bool */ private $callOriginalMethods = false; /** * @var ?object */ private $proxyTarget; /** * @var bool */ private $allowMockingUnknownTypes = true; /** * @var bool */ private $returnValueGeneration = true; /** * @var Generator */ private $generator; /** * @param string|string[] $type * * @psalm-param class-string|string|string[] $type */ public function __construct(TestCase $testCase, $type) { $this->testCase = $testCase; $this->type = $type; $this->generator = new Generator; } /** * Creates a mock object using a fluent interface. * * @throws RuntimeException * * @psalm-return MockObject&MockedType */ public function getMock(): MockObject { $object = $this->generator->getMock( $this->type, !$this->emptyMethodsArray ? $this->methods : null, $this->constructorArgs, $this->mockClassName, $this->originalConstructor, $this->originalClone, $this->autoload, $this->cloneArguments, $this->callOriginalMethods, $this->proxyTarget, $this->allowMockingUnknownTypes, $this->returnValueGeneration ); $this->testCase->registerMockObject($object); return $object; } /** * Creates a mock object for an abstract class using a fluent interface. * * @throws Exception * @throws RuntimeException * * @psalm-return MockObject&MockedType */ public function getMockForAbstractClass(): MockObject { $object = $this->generator->getMockForAbstractClass( $this->type, $this->constructorArgs, $this->mockClassName, $this->originalConstructor, $this->originalClone, $this->autoload, $this->methods, $this->cloneArguments ); $this->testCase->registerMockObject($object); return $object; } /** * Creates a mock object for a trait using a fluent interface. * * @throws Exception * @throws RuntimeException * * @psalm-return MockObject&MockedType */ public function getMockForTrait(): MockObject { $object = $this->generator->getMockForTrait( $this->type, $this->constructorArgs, $this->mockClassName, $this->originalConstructor, $this->originalClone, $this->autoload, $this->methods, $this->cloneArguments ); $this->testCase->registerMockObject($object); return $object; } /** * Specifies the subset of methods to mock. Default is to mock none of them. * * @deprecated https://github.com/sebastianbergmann/phpunit/pull/3687 * * @return $this */ public function setMethods(?array $methods = null): self { if ($methods === null) { $this->methods = $methods; } else { $this->methods = array_merge($this->methods ?? [], $methods); } return $this; } /** * Specifies the subset of methods to mock, requiring each to exist in the class. * * @param string[] $methods * * @throws RuntimeException * * @return $this */ public function onlyMethods(array $methods): self { if (empty($methods)) { $this->emptyMethodsArray = true; return $this; } try { $reflector = new ReflectionClass($this->type); // @codeCoverageIgnoreStart } catch (ReflectionException $e) { throw new RuntimeException( $e->getMessage(), $e->getCode(), $e ); } // @codeCoverageIgnoreEnd foreach ($methods as $method) { if (!$reflector->hasMethod($method)) { throw new RuntimeException( sprintf( 'Trying to set mock method "%s" with onlyMethods, but it does not exist in class "%s". Use addMethods() for methods that don\'t exist in the class.', $method, $this->type ) ); } } $this->methods = array_merge($this->methods ?? [], $methods); return $this; } /** * Specifies methods that don't exist in the class which you want to mock. * * @param string[] $methods * * @throws RuntimeException * * @return $this */ public function addMethods(array $methods): self { if (empty($methods)) { $this->emptyMethodsArray = true; return $this; } try { $reflector = new ReflectionClass($this->type); // @codeCoverageIgnoreStart } catch (ReflectionException $e) { throw new RuntimeException( $e->getMessage(), $e->getCode(), $e ); } // @codeCoverageIgnoreEnd foreach ($methods as $method) { if ($reflector->hasMethod($method)) { throw new RuntimeException( sprintf( 'Trying to set mock method "%s" with addMethods(), but it exists in class "%s". Use onlyMethods() for methods that exist in the class.', $method, $this->type ) ); } } $this->methods = array_merge($this->methods ?? [], $methods); return $this; } /** * Specifies the subset of methods to not mock. Default is to mock all of them. */ public function setMethodsExcept(array $methods = []): self { return $this->setMethods( array_diff( $this->generator->getClassMethods($this->type), $methods ) ); } /** * Specifies the arguments for the constructor. * * @return $this */ public function setConstructorArgs(array $args): self { $this->constructorArgs = $args; return $this; } /** * Specifies the name for the mock class. * * @return $this */ public function setMockClassName(string $name): self { $this->mockClassName = $name; return $this; } /** * Disables the invocation of the original constructor. * * @return $this */ public function disableOriginalConstructor(): self { $this->originalConstructor = false; return $this; } /** * Enables the invocation of the original constructor. * * @return $this */ public function enableOriginalConstructor(): self { $this->originalConstructor = true; return $this; } /** * Disables the invocation of the original clone constructor. * * @return $this */ public function disableOriginalClone(): self { $this->originalClone = false; return $this; } /** * Enables the invocation of the original clone constructor. * * @return $this */ public function enableOriginalClone(): self { $this->originalClone = true; return $this; } /** * Disables the use of class autoloading while creating the mock object. * * @return $this */ public function disableAutoload(): self { $this->autoload = false; return $this; } /** * Enables the use of class autoloading while creating the mock object. * * @return $this */ public function enableAutoload(): self { $this->autoload = true; return $this; } /** * Disables the cloning of arguments passed to mocked methods. * * @return $this */ public function disableArgumentCloning(): self { $this->cloneArguments = false; return $this; } /** * Enables the cloning of arguments passed to mocked methods. * * @return $this */ public function enableArgumentCloning(): self { $this->cloneArguments = true; return $this; } /** * Enables the invocation of the original methods. * * @return $this */ public function enableProxyingToOriginalMethods(): self { $this->callOriginalMethods = true; return $this; } /** * Disables the invocation of the original methods. * * @return $this */ public function disableProxyingToOriginalMethods(): self { $this->callOriginalMethods = false; $this->proxyTarget = null; return $this; } /** * Sets the proxy target. * * @return $this */ public function setProxyTarget(object $object): self { $this->proxyTarget = $object; return $this; } /** * @return $this */ public function allowMockingUnknownTypes(): self { $this->allowMockingUnknownTypes = true; return $this; } /** * @return $this */ public function disallowMockingUnknownTypes(): self { $this->allowMockingUnknownTypes = false; return $this; } /** * @return $this */ public function enableAutoReturnValueGeneration(): self { $this->returnValueGeneration = true; return $this; } /** * @return $this */ public function disableAutoReturnValueGeneration(): self { $this->returnValueGeneration = false; return $this; } } PK!ÍVŒzfile-manager-advanced/application/svg-sanitizer/includes/phpunit/phpunit/src/Framework/MockObject/Stub/ReturnReference.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace PHPUnit\Framework\MockObject\Stub; use function sprintf; use PHPUnit\Framework\MockObject\Invocation; use SebastianBergmann\Exporter\Exporter; /** * @internal This class is not covered by the backward compatibility promise for PHPUnit */ final class ReturnReference implements Stub { /** * @var mixed */ private $reference; public function __construct(&$reference) { $this->reference = &$reference; } public function invoke(Invocation $invocation) { return $this->reference; } public function toString(): string { $exporter = new Exporter; return sprintf( 'return user-specified reference %s', $exporter->export($this->reference) ); } } PK!Ýó ufile-manager-advanced/application/svg-sanitizer/includes/phpunit/phpunit/src/Framework/MockObject/Stub/ReturnSelf.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace PHPUnit\Framework\MockObject\Stub; use PHPUnit\Framework\MockObject\Invocation; use PHPUnit\Framework\MockObject\RuntimeException; /** * @internal This class is not covered by the backward compatibility promise for PHPUnit */ final class ReturnSelf implements Stub { /** * @throws RuntimeException */ public function invoke(Invocation $invocation) { return $invocation->getObject(); } public function toString(): string { return 'return the current object'; } } PK!´ß::yfile-manager-advanced/application/svg-sanitizer/includes/phpunit/phpunit/src/Framework/MockObject/Stub/ReturnCallback.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace PHPUnit\Framework\MockObject\Stub; use function call_user_func_array; use function get_class; use function is_array; use function is_object; use function sprintf; use PHPUnit\Framework\MockObject\Invocation; /** * @internal This class is not covered by the backward compatibility promise for PHPUnit */ final class ReturnCallback implements Stub { private $callback; public function __construct($callback) { $this->callback = $callback; } public function invoke(Invocation $invocation) { return call_user_func_array($this->callback, $invocation->getParameters()); } public function toString(): string { if (is_array($this->callback)) { if (is_object($this->callback[0])) { $class = get_class($this->callback[0]); $type = '->'; } else { $class = $this->callback[0]; $type = '::'; } return sprintf( 'return result of user defined callback %s%s%s() with the ' . 'passed arguments', $class, $type, $this->callback[1] ); } return 'return result of user defined callback ' . $this->callback . ' with the passed arguments'; } } PK!•P<×tfile-manager-advanced/application/svg-sanitizer/includes/phpunit/phpunit/src/Framework/MockObject/Stub/Exception.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace PHPUnit\Framework\MockObject\Stub; use function sprintf; use PHPUnit\Framework\MockObject\Invocation; use SebastianBergmann\Exporter\Exporter; use Throwable; /** * @internal This class is not covered by the backward compatibility promise for PHPUnit */ final class Exception implements Stub { private $exception; public function __construct(Throwable $exception) { $this->exception = $exception; } /** * @throws Throwable */ public function invoke(Invocation $invocation): void { throw $this->exception; } public function toString(): string { $exporter = new Exporter; return sprintf( 'raise user-specified exception %s', $exporter->export($this->exception) ); } } PK!¼‹ ßßufile-manager-advanced/application/svg-sanitizer/includes/phpunit/phpunit/src/Framework/MockObject/Stub/ReturnStub.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace PHPUnit\Framework\MockObject\Stub; use function sprintf; use PHPUnit\Framework\MockObject\Invocation; use SebastianBergmann\Exporter\Exporter; /** * @internal This class is not covered by the backward compatibility promise for PHPUnit */ final class ReturnStub implements Stub { /** * @var mixed */ private $value; public function __construct($value) { $this->value = $value; } public function invoke(Invocation $invocation) { return $this->value; } public function toString(): string { $exporter = new Exporter; return sprintf( 'return user-specified value %s', $exporter->export($this->value) ); } } PK!7Ócè22ofile-manager-advanced/application/svg-sanitizer/includes/phpunit/phpunit/src/Framework/MockObject/Stub/Stub.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace PHPUnit\Framework\MockObject\Stub; use PHPUnit\Framework\MockObject\Invocation; use PHPUnit\Framework\SelfDescribing; /** * @internal This class is not covered by the backward compatibility promise for PHPUnit */ interface Stub extends SelfDescribing { /** * Fakes the processing of the invocation $invocation by returning a * specific value. * * @param Invocation $invocation The invocation which was mocked and matched by the current method and argument matchers */ public function invoke(Invocation $invocation); } PK!Î53“ää{file-manager-advanced/application/svg-sanitizer/includes/phpunit/phpunit/src/Framework/MockObject/Stub/ConsecutiveCalls.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace PHPUnit\Framework\MockObject\Stub; use function array_shift; use function sprintf; use PHPUnit\Framework\MockObject\Invocation; use SebastianBergmann\Exporter\Exporter; /** * @internal This class is not covered by the backward compatibility promise for PHPUnit */ final class ConsecutiveCalls implements Stub { /** * @var array */ private $stack; /** * @var mixed */ private $value; public function __construct(array $stack) { $this->stack = $stack; } public function invoke(Invocation $invocation) { $this->value = array_shift($this->stack); if ($this->value instanceof Stub) { $this->value = $this->value->invoke($invocation); } return $this->value; } public function toString(): string { $exporter = new Exporter; return sprintf( 'return user-specified value %s', $exporter->export($this->value) ); } } PK!UG¬ààyfile-manager-advanced/application/svg-sanitizer/includes/phpunit/phpunit/src/Framework/MockObject/Stub/ReturnValueMap.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace PHPUnit\Framework\MockObject\Stub; use function array_pop; use function count; use function is_array; use PHPUnit\Framework\MockObject\Invocation; /** * @internal This class is not covered by the backward compatibility promise for PHPUnit */ final class ReturnValueMap implements Stub { /** * @var array */ private $valueMap; public function __construct(array $valueMap) { $this->valueMap = $valueMap; } public function invoke(Invocation $invocation) { $parameterCount = count($invocation->getParameters()); foreach ($this->valueMap as $map) { if (!is_array($map) || $parameterCount !== (count($map) - 1)) { continue; } $return = array_pop($map); if ($invocation->getParameters() === $map) { return $return; } } } public function toString(): string { return 'return value from a map'; } } PK! µ¤Åúúyfile-manager-advanced/application/svg-sanitizer/includes/phpunit/phpunit/src/Framework/MockObject/Stub/ReturnArgument.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace PHPUnit\Framework\MockObject\Stub; use function sprintf; use PHPUnit\Framework\MockObject\Invocation; /** * @internal This class is not covered by the backward compatibility promise for PHPUnit */ final class ReturnArgument implements Stub { /** * @var int */ private $argumentIndex; public function __construct($argumentIndex) { $this->argumentIndex = $argumentIndex; } public function invoke(Invocation $invocation) { if (isset($invocation->getParameters()[$this->argumentIndex])) { return $invocation->getParameters()[$this->argumentIndex]; } } public function toString(): string { return sprintf('return argument #%d', $this->argumentIndex); } } PK!�Ñ/vÊÊpfile-manager-advanced/application/svg-sanitizer/includes/phpunit/phpunit/src/Framework/MockObject/Verifiable.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace PHPUnit\Framework\MockObject; use PHPUnit\Framework\ExpectationFailedException; /** * @internal This class is not covered by the backward compatibility promise for PHPUnit */ interface Verifiable { /** * Verifies that the current expectation is valid. If everything is OK the * code should just return, if not it must throw an exception. * * @throws ExpectationFailedException */ public function verify(): void; } PK!Ö'ð5ÆÆnfile-manager-advanced/application/svg-sanitizer/includes/phpunit/phpunit/src/Framework/MockObject/MockType.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace PHPUnit\Framework\MockObject; /** * @internal This class is not covered by the backward compatibility promise for PHPUnit */ interface MockType { public function generate(): string; } PK!‡¹Žiãã†file-manager-advanced/application/svg-sanitizer/includes/phpunit/phpunit/src/Framework/MockObject/Exception/BadMethodCallException.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace PHPUnit\Framework\MockObject; /** * @internal This class is not covered by the backward compatibility promise for PHPUnit */ final class BadMethodCallException extends \BadMethodCallException implements Exception { } PK!"bB¬××€file-manager-advanced/application/svg-sanitizer/includes/phpunit/phpunit/src/Framework/MockObject/Exception/RuntimeException.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace PHPUnit\Framework\MockObject; /** * @internal This class is not covered by the backward compatibility promise for PHPUnit */ final class RuntimeException extends \RuntimeException implements Exception { } PK!t¼üòò�file-manager-advanced/application/svg-sanitizer/includes/phpunit/phpunit/src/Framework/MockObject/Exception/IncompatibleReturnValueException.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace PHPUnit\Framework\MockObject; /** * @internal This class is not covered by the backward compatibility promise for PHPUnit */ final class IncompatibleReturnValueException extends \PHPUnit\Framework\Exception implements Exception { } PK!Nˆ,ÁÁyfile-manager-advanced/application/svg-sanitizer/includes/phpunit/phpunit/src/Framework/MockObject/Exception/Exception.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace PHPUnit\Framework\MockObject; use Throwable; /** * @internal This class is not covered by the backward compatibility promise for PHPUnit */ interface Exception extends Throwable { } PK!©}-ãžfile-manager-advanced/application/svg-sanitizer/includes/phpunit/phpunit/src/Framework/MockObject/Exception/ConfigurableMethodsAlreadyInitializedException.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace PHPUnit\Framework\MockObject; /** * @internal This class is not covered by the backward compatibility promise for PHPUnit */ final class ConfigurableMethodsAlreadyInitializedException extends \PHPUnit\Framework\Exception implements Exception { } PK!9çÜ,,zfile-manager-advanced/application/svg-sanitizer/includes/phpunit/phpunit/src/Framework/MockObject/MethodNameConstraint.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace PHPUnit\Framework\MockObject; use function is_string; use function sprintf; use function strtolower; use PHPUnit\Framework\Constraint\Constraint; /** * @internal This class is not covered by the backward compatibility promise for PHPUnit */ final class MethodNameConstraint extends Constraint { /** * @var string */ private $methodName; public function __construct(string $methodName) { $this->methodName = $methodName; } public function toString(): string { return sprintf( 'is "%s"', $this->methodName ); } protected function matches($other): bool { if (!is_string($other)) { return false; } return strtolower($this->methodName) === strtolower($other); } } PK!È7¯——ofile-manager-advanced/application/svg-sanitizer/includes/phpunit/phpunit/src/Framework/MockObject/Generator.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace PHPUnit\Framework\MockObject; use const DIRECTORY_SEPARATOR; use const PHP_EOL; use const PHP_MAJOR_VERSION; use const PREG_OFFSET_CAPTURE; use const WSDL_CACHE_NONE; use function array_diff_assoc; use function array_map; use function array_merge; use function array_pop; use function array_unique; use function class_exists; use function count; use function explode; use function extension_loaded; use function implode; use function in_array; use function interface_exists; use function is_array; use function is_object; use function is_string; use function md5; use function mt_rand; use function preg_match; use function preg_match_all; use function range; use function serialize; use function sort; use function sprintf; use function str_replace; use function strlen; use function strpos; use function strtolower; use function substr; use function trait_exists; use Doctrine\Instantiator\Exception\ExceptionInterface as InstantiatorException; use Doctrine\Instantiator\Instantiator; use Exception; use Iterator; use IteratorAggregate; use PHPUnit\Framework\InvalidArgumentException; use ReflectionClass; use ReflectionException; use ReflectionMethod; use SoapClient; use SoapFault; use Text_Template; use Throwable; use Traversable; /** * @internal This class is not covered by the backward compatibility promise for PHPUnit */ final class Generator { private const MOCKED_CLONE_METHOD_WITH_VOID_RETURN_TYPE_TRAIT = <<<'EOT' namespace PHPUnit\Framework\MockObject; trait MockedCloneMethodWithVoidReturnType { public function __clone(): void { $this->__phpunit_invocationMocker = clone $this->__phpunit_getInvocationHandler(); } } EOT; private const MOCKED_CLONE_METHOD_WITHOUT_RETURN_TYPE_TRAIT = <<<'EOT' namespace PHPUnit\Framework\MockObject; trait MockedCloneMethodWithoutReturnType { public function __clone() { $this->__phpunit_invocationMocker = clone $this->__phpunit_getInvocationHandler(); } } EOT; private const UNMOCKED_CLONE_METHOD_WITH_VOID_RETURN_TYPE_TRAIT = <<<'EOT' namespace PHPUnit\Framework\MockObject; trait UnmockedCloneMethodWithVoidReturnType { public function __clone(): void { $this->__phpunit_invocationMocker = clone $this->__phpunit_getInvocationHandler(); parent::__clone(); } } EOT; private const UNMOCKED_CLONE_METHOD_WITHOUT_RETURN_TYPE_TRAIT = <<<'EOT' namespace PHPUnit\Framework\MockObject; trait UnmockedCloneMethodWithoutReturnType { public function __clone() { $this->__phpunit_invocationMocker = clone $this->__phpunit_getInvocationHandler(); parent::__clone(); } } EOT; /** * @var array */ private const BLACKLISTED_METHOD_NAMES = [ '__CLASS__' => true, '__DIR__' => true, '__FILE__' => true, '__FUNCTION__' => true, '__LINE__' => true, '__METHOD__' => true, '__NAMESPACE__' => true, '__TRAIT__' => true, '__clone' => true, '__halt_compiler' => true, ]; /** * @var array */ private static $cache = []; /** * @var Text_Template[] */ private static $templates = []; /** * Returns a mock object for the specified class. * * @param string|string[] $type * @param null|array $methods * * @throws RuntimeException */ public function getMock($type, $methods = [], array $arguments = [], string $mockClassName = '', bool $callOriginalConstructor = true, bool $callOriginalClone = true, bool $callAutoload = true, bool $cloneArguments = true, bool $callOriginalMethods = false, ?object $proxyTarget = null, bool $allowMockingUnknownTypes = true, bool $returnValueGeneration = true): MockObject { if (!is_array($type) && !is_string($type)) { throw InvalidArgumentException::create(1, 'array or string'); } if (!is_array($methods) && null !== $methods) { throw InvalidArgumentException::create(2, 'array'); } if ($type === 'Traversable' || $type === '\\Traversable') { $type = 'Iterator'; } if (is_array($type)) { $type = array_unique( array_map( static function ($type) { if ($type === 'Traversable' || $type === '\\Traversable' || $type === '\\Iterator') { return 'Iterator'; } return $type; }, $type ) ); } if (!$allowMockingUnknownTypes) { if (is_array($type)) { foreach ($type as $_type) { if (!class_exists($_type, $callAutoload) && !interface_exists($_type, $callAutoload)) { throw new RuntimeException( sprintf( 'Cannot stub or mock class or interface "%s" which does not exist', $_type ) ); } } } elseif (!class_exists($type, $callAutoload) && !interface_exists($type, $callAutoload)) { throw new RuntimeException( sprintf( 'Cannot stub or mock class or interface "%s" which does not exist', $type ) ); } } if (null !== $methods) { foreach ($methods as $method) { if (!preg_match('~[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*~', (string) $method)) { throw new RuntimeException( sprintf( 'Cannot stub or mock method with invalid name "%s"', $method ) ); } } if ($methods !== array_unique($methods)) { throw new RuntimeException( sprintf( 'Cannot stub or mock using a method list that contains duplicates: "%s" (duplicate: "%s")', implode(', ', $methods), implode(', ', array_unique(array_diff_assoc($methods, array_unique($methods)))) ) ); } } if ($mockClassName !== '' && class_exists($mockClassName, false)) { try { $reflector = new ReflectionClass($mockClassName); // @codeCoverageIgnoreStart } catch (ReflectionException $e) { throw new RuntimeException( $e->getMessage(), $e->getCode(), $e ); } // @codeCoverageIgnoreEnd if (!$reflector->implementsInterface(MockObject::class)) { throw new RuntimeException( sprintf( 'Class "%s" already exists.', $mockClassName ) ); } } if (!$callOriginalConstructor && $callOriginalMethods) { throw new RuntimeException( 'Proxying to original methods requires invoking the original constructor' ); } $mock = $this->generate( $type, $methods, $mockClassName, $callOriginalClone, $callAutoload, $cloneArguments, $callOriginalMethods ); return $this->getObject( $mock, $type, $callOriginalConstructor, $callAutoload, $arguments, $callOriginalMethods, $proxyTarget, $returnValueGeneration ); } /** * Returns a mock object for the specified abstract class with all abstract * methods of the class mocked. Concrete methods to mock can be specified with * the $mockedMethods parameter. * * @psalm-template RealInstanceType of object * * @psalm-param class-string $originalClassName * * @psalm-return MockObject&RealInstanceType * * @throws RuntimeException */ public function getMockForAbstractClass(string $originalClassName, array $arguments = [], string $mockClassName = '', bool $callOriginalConstructor = true, bool $callOriginalClone = true, bool $callAutoload = true, ?array $mockedMethods = null, bool $cloneArguments = true): MockObject { if (class_exists($originalClassName, $callAutoload) || interface_exists($originalClassName, $callAutoload)) { try { $reflector = new ReflectionClass($originalClassName); // @codeCoverageIgnoreStart } catch (ReflectionException $e) { throw new RuntimeException( $e->getMessage(), $e->getCode(), $e ); } // @codeCoverageIgnoreEnd $methods = $mockedMethods; foreach ($reflector->getMethods() as $method) { if ($method->isAbstract() && !in_array($method->getName(), $methods ?? [], true)) { $methods[] = $method->getName(); } } if (empty($methods)) { $methods = null; } return $this->getMock( $originalClassName, $methods, $arguments, $mockClassName, $callOriginalConstructor, $callOriginalClone, $callAutoload, $cloneArguments ); } throw new RuntimeException( sprintf('Class "%s" does not exist.', $originalClassName) ); } /** * Returns a mock object for the specified trait with all abstract methods * of the trait mocked. Concrete methods to mock can be specified with the * `$mockedMethods` parameter. * * @throws RuntimeException */ public function getMockForTrait(string $traitName, array $arguments = [], string $mockClassName = '', bool $callOriginalConstructor = true, bool $callOriginalClone = true, bool $callAutoload = true, ?array $mockedMethods = null, bool $cloneArguments = true): MockObject { if (!trait_exists($traitName, $callAutoload)) { throw new RuntimeException( sprintf( 'Trait "%s" does not exist.', $traitName ) ); } $className = $this->generateClassName( $traitName, '', 'Trait_' ); $classTemplate = $this->getTemplate('trait_class.tpl'); $classTemplate->setVar( [ 'prologue' => 'abstract ', 'class_name' => $className['className'], 'trait_name' => $traitName, ] ); $mockTrait = new MockTrait($classTemplate->render(), $className['className']); $mockTrait->generate(); return $this->getMockForAbstractClass($className['className'], $arguments, $mockClassName, $callOriginalConstructor, $callOriginalClone, $callAutoload, $mockedMethods, $cloneArguments); } /** * Returns an object for the specified trait. * * @throws RuntimeException */ public function getObjectForTrait(string $traitName, string $traitClassName = '', bool $callAutoload = true, bool $callOriginalConstructor = false, array $arguments = []): object { if (!trait_exists($traitName, $callAutoload)) { throw new RuntimeException( sprintf( 'Trait "%s" does not exist.', $traitName ) ); } $className = $this->generateClassName( $traitName, $traitClassName, 'Trait_' ); $classTemplate = $this->getTemplate('trait_class.tpl'); $classTemplate->setVar( [ 'prologue' => '', 'class_name' => $className['className'], 'trait_name' => $traitName, ] ); return $this->getObject( new MockTrait( $classTemplate->render(), $className['className'] ), '', $callOriginalConstructor, $callAutoload, $arguments ); } public function generate($type, ?array $methods = null, string $mockClassName = '', bool $callOriginalClone = true, bool $callAutoload = true, bool $cloneArguments = true, bool $callOriginalMethods = false): MockClass { if (is_array($type)) { sort($type); } if ($mockClassName !== '') { return $this->generateMock( $type, $methods, $mockClassName, $callOriginalClone, $callAutoload, $cloneArguments, $callOriginalMethods ); } $key = md5( is_array($type) ? implode('_', $type) : $type . serialize($methods) . serialize($callOriginalClone) . serialize($cloneArguments) . serialize($callOriginalMethods) ); if (!isset(self::$cache[$key])) { self::$cache[$key] = $this->generateMock( $type, $methods, $mockClassName, $callOriginalClone, $callAutoload, $cloneArguments, $callOriginalMethods ); } return self::$cache[$key]; } /** * @throws RuntimeException */ public function generateClassFromWsdl(string $wsdlFile, string $className, array $methods = [], array $options = []): string { if (!extension_loaded('soap')) { throw new RuntimeException( 'The SOAP extension is required to generate a mock object from WSDL.' ); } $options = array_merge($options, ['cache_wsdl' => WSDL_CACHE_NONE]); try { $client = new SoapClient($wsdlFile, $options); $_methods = array_unique($client->__getFunctions()); unset($client); } catch (SoapFault $e) { throw new RuntimeException( $e->getMessage(), $e->getCode(), $e ); } sort($_methods); $methodTemplate = $this->getTemplate('wsdl_method.tpl'); $methodsBuffer = ''; foreach ($_methods as $method) { preg_match_all('/[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*\(/', $method, $matches, PREG_OFFSET_CAPTURE); $lastFunction = array_pop($matches[0]); $nameStart = $lastFunction[1]; $nameEnd = $nameStart + strlen($lastFunction[0]) - 1; $name = str_replace('(', '', $lastFunction[0]); if (empty($methods) || in_array($name, $methods, true)) { $args = explode( ',', str_replace(')', '', substr($method, $nameEnd + 1)) ); foreach (range(0, count($args) - 1) as $i) { $parameterStart = strpos($args[$i], '$'); if (!$parameterStart) { continue; } $args[$i] = substr($args[$i], $parameterStart); } $methodTemplate->setVar( [ 'method_name' => $name, 'arguments' => implode(', ', $args), ] ); $methodsBuffer .= $methodTemplate->render(); } } $optionsBuffer = '['; foreach ($options as $key => $value) { $optionsBuffer .= $key . ' => ' . $value; } $optionsBuffer .= ']'; $classTemplate = $this->getTemplate('wsdl_class.tpl'); $namespace = ''; if (strpos($className, '\\') !== false) { $parts = explode('\\', $className); $className = array_pop($parts); $namespace = 'namespace ' . implode('\\', $parts) . ';' . "\n\n"; } $classTemplate->setVar( [ 'namespace' => $namespace, 'class_name' => $className, 'wsdl' => $wsdlFile, 'options' => $optionsBuffer, 'methods' => $methodsBuffer, ] ); return $classTemplate->render(); } /** * @throws RuntimeException * * @return string[] */ public function getClassMethods(string $className): array { try { $class = new ReflectionClass($className); // @codeCoverageIgnoreStart } catch (ReflectionException $e) { throw new RuntimeException( $e->getMessage(), $e->getCode(), $e ); } // @codeCoverageIgnoreEnd $methods = []; foreach ($class->getMethods() as $method) { if ($method->isPublic() || $method->isAbstract()) { $methods[] = $method->getName(); } } return $methods; } /** * @throws RuntimeException * * @return MockMethod[] */ public function mockClassMethods(string $className, bool $callOriginalMethods, bool $cloneArguments): array { try { $class = new ReflectionClass($className); // @codeCoverageIgnoreStart } catch (ReflectionException $e) { throw new RuntimeException( $e->getMessage(), $e->getCode(), $e ); } // @codeCoverageIgnoreEnd $methods = []; foreach ($class->getMethods() as $method) { if (($method->isPublic() || $method->isAbstract()) && $this->canMockMethod($method)) { $methods[] = MockMethod::fromReflection($method, $callOriginalMethods, $cloneArguments); } } return $methods; } /** * @throws RuntimeException * * @return MockMethod[] */ public function mockInterfaceMethods(string $interfaceName, bool $cloneArguments): array { try { $class = new ReflectionClass($interfaceName); // @codeCoverageIgnoreStart } catch (ReflectionException $e) { throw new RuntimeException( $e->getMessage(), $e->getCode(), $e ); } // @codeCoverageIgnoreEnd $methods = []; foreach ($class->getMethods() as $method) { $methods[] = MockMethod::fromReflection($method, false, $cloneArguments); } return $methods; } /** * @psalm-param class-string $interfaceName * * @return ReflectionMethod[] */ private function userDefinedInterfaceMethods(string $interfaceName): array { try { // @codeCoverageIgnoreStart $interface = new ReflectionClass($interfaceName); } catch (ReflectionException $e) { throw new RuntimeException( $e->getMessage(), $e->getCode(), $e ); } // @codeCoverageIgnoreEnd $methods = []; foreach ($interface->getMethods() as $method) { if (!$method->isUserDefined()) { continue; } $methods[] = $method; } return $methods; } private function getObject(MockType $mockClass, $type = '', bool $callOriginalConstructor = false, bool $callAutoload = false, array $arguments = [], bool $callOriginalMethods = false, ?object $proxyTarget = null, bool $returnValueGeneration = true) { $className = $mockClass->generate(); if ($callOriginalConstructor) { if (count($arguments) === 0) { $object = new $className; } else { try { $class = new ReflectionClass($className); // @codeCoverageIgnoreStart } catch (ReflectionException $e) { throw new RuntimeException( $e->getMessage(), $e->getCode(), $e ); } // @codeCoverageIgnoreEnd $object = $class->newInstanceArgs($arguments); } } else { try { $object = (new Instantiator)->instantiate($className); } catch (InstantiatorException $exception) { throw new RuntimeException($exception->getMessage()); } } if ($callOriginalMethods) { if (!is_object($proxyTarget)) { if (count($arguments) === 0) { $proxyTarget = new $type; } else { try { $class = new ReflectionClass($type); // @codeCoverageIgnoreStart } catch (ReflectionException $e) { throw new RuntimeException( $e->getMessage(), $e->getCode(), $e ); } // @codeCoverageIgnoreEnd $proxyTarget = $class->newInstanceArgs($arguments); } } $object->__phpunit_setOriginalObject($proxyTarget); } if ($object instanceof MockObject) { $object->__phpunit_setReturnValueGeneration($returnValueGeneration); } return $object; } /** * @param array|string $type * * @throws RuntimeException */ private function generateMock($type, ?array $explicitMethods, string $mockClassName, bool $callOriginalClone, bool $callAutoload, bool $cloneArguments, bool $callOriginalMethods): MockClass { $classTemplate = $this->getTemplate('mocked_class.tpl'); $additionalInterfaces = []; $mockedCloneMethod = false; $unmockedCloneMethod = false; $isClass = false; $isInterface = false; $class = null; $mockMethods = new MockMethodSet; if (is_array($type)) { $interfaceMethods = []; foreach ($type as $_type) { if (!interface_exists($_type, $callAutoload)) { throw new RuntimeException( sprintf( 'Interface "%s" does not exist.', $_type ) ); } $additionalInterfaces[] = $_type; try { $typeClass = new ReflectionClass($_type); // @codeCoverageIgnoreStart } catch (ReflectionException $e) { throw new RuntimeException( $e->getMessage(), $e->getCode(), $e ); } // @codeCoverageIgnoreEnd foreach ($this->getClassMethods($_type) as $method) { if (in_array($method, $interfaceMethods, true)) { throw new RuntimeException( sprintf( 'Duplicate method "%s" not allowed.', $method ) ); } try { $methodReflection = $typeClass->getMethod($method); // @codeCoverageIgnoreStart } catch (ReflectionException $e) { throw new RuntimeException( $e->getMessage(), $e->getCode(), $e ); } // @codeCoverageIgnoreEnd if ($this->canMockMethod($methodReflection)) { $mockMethods->addMethods( MockMethod::fromReflection($methodReflection, $callOriginalMethods, $cloneArguments) ); $interfaceMethods[] = $method; } } } unset($interfaceMethods); } $mockClassName = $this->generateClassName( $type, $mockClassName, 'Mock_' ); if (class_exists($mockClassName['fullClassName'], $callAutoload)) { $isClass = true; } elseif (interface_exists($mockClassName['fullClassName'], $callAutoload)) { $isInterface = true; } if (!$isClass && !$isInterface) { $prologue = 'class ' . $mockClassName['originalClassName'] . "\n{\n}\n\n"; if (!empty($mockClassName['namespaceName'])) { $prologue = 'namespace ' . $mockClassName['namespaceName'] . " {\n\n" . $prologue . "}\n\n" . "namespace {\n\n"; $epilogue = "\n\n}"; } $mockedCloneMethod = true; } else { try { $class = new ReflectionClass($mockClassName['fullClassName']); // @codeCoverageIgnoreStart } catch (ReflectionException $e) { throw new RuntimeException( $e->getMessage(), $e->getCode(), $e ); } // @codeCoverageIgnoreEnd if ($class->isFinal()) { throw new RuntimeException( sprintf( 'Class "%s" is declared "final" and cannot be mocked.', $mockClassName['fullClassName'] ) ); } // @see https://github.com/sebastianbergmann/phpunit/issues/2995 if ($isInterface && $class->implementsInterface(Throwable::class)) { $actualClassName = Exception::class; $additionalInterfaces[] = $class->getName(); $isInterface = false; try { $class = new ReflectionClass($actualClassName); // @codeCoverageIgnoreStart } catch (ReflectionException $e) { throw new RuntimeException( $e->getMessage(), $e->getCode(), $e ); } // @codeCoverageIgnoreEnd foreach ($this->userDefinedInterfaceMethods($mockClassName['fullClassName']) as $method) { $methodName = $method->getName(); if ($class->hasMethod($methodName)) { try { $classMethod = $class->getMethod($methodName); // @codeCoverageIgnoreStart } catch (ReflectionException $e) { throw new RuntimeException( $e->getMessage(), $e->getCode(), $e ); } // @codeCoverageIgnoreEnd if (!$this->canMockMethod($classMethod)) { continue; } } $mockMethods->addMethods( MockMethod::fromReflection($method, $callOriginalMethods, $cloneArguments) ); } $mockClassName = $this->generateClassName( $actualClassName, $mockClassName['className'], 'Mock_' ); } // @see https://github.com/sebastianbergmann/phpunit-mock-objects/issues/103 if ($isInterface && $class->implementsInterface(Traversable::class) && !$class->implementsInterface(Iterator::class) && !$class->implementsInterface(IteratorAggregate::class)) { $additionalInterfaces[] = Iterator::class; $mockMethods->addMethods( ...$this->mockClassMethods(Iterator::class, $callOriginalMethods, $cloneArguments) ); } if ($class->hasMethod('__clone')) { try { $cloneMethod = $class->getMethod('__clone'); // @codeCoverageIgnoreStart } catch (ReflectionException $e) { throw new RuntimeException( $e->getMessage(), $e->getCode(), $e ); } // @codeCoverageIgnoreEnd if (!$cloneMethod->isFinal()) { if ($callOriginalClone && !$isInterface) { $unmockedCloneMethod = true; } else { $mockedCloneMethod = true; } } } else { $mockedCloneMethod = true; } } if ($isClass && $explicitMethods === []) { $mockMethods->addMethods( ...$this->mockClassMethods($mockClassName['fullClassName'], $callOriginalMethods, $cloneArguments) ); } if ($isInterface && ($explicitMethods === [] || $explicitMethods === null)) { $mockMethods->addMethods( ...$this->mockInterfaceMethods($mockClassName['fullClassName'], $cloneArguments) ); } if (is_array($explicitMethods)) { foreach ($explicitMethods as $methodName) { if ($class !== null && $class->hasMethod($methodName)) { try { $method = $class->getMethod($methodName); // @codeCoverageIgnoreStart } catch (ReflectionException $e) { throw new RuntimeException( $e->getMessage(), $e->getCode(), $e ); } // @codeCoverageIgnoreEnd if ($this->canMockMethod($method)) { $mockMethods->addMethods( MockMethod::fromReflection($method, $callOriginalMethods, $cloneArguments) ); } } else { $mockMethods->addMethods( MockMethod::fromName( $mockClassName['fullClassName'], $methodName, $cloneArguments ) ); } } } $mockedMethods = ''; $configurable = []; foreach ($mockMethods->asArray() as $mockMethod) { $mockedMethods .= $mockMethod->generateCode(); $configurable[] = new ConfigurableMethod($mockMethod->getName(), $mockMethod->getReturnType()); } $method = ''; if (!$mockMethods->hasMethod('method') && (!isset($class) || !$class->hasMethod('method'))) { $method = PHP_EOL . ' use \PHPUnit\Framework\MockObject\Method;'; } $cloneTrait = ''; if ($mockedCloneMethod) { $cloneTrait = $this->mockedCloneMethod(); } if ($unmockedCloneMethod) { $cloneTrait = $this->unmockedCloneMethod(); } $classTemplate->setVar( [ 'prologue' => $prologue ?? '', 'epilogue' => $epilogue ?? '', 'class_declaration' => $this->generateMockClassDeclaration( $mockClassName, $isInterface, $additionalInterfaces ), 'clone' => $cloneTrait, 'mock_class_name' => $mockClassName['className'], 'mocked_methods' => $mockedMethods, 'method' => $method, ] ); return new MockClass( $classTemplate->render(), $mockClassName['className'], $configurable ); } /** * @param array|string $type */ private function generateClassName($type, string $className, string $prefix): array { if (is_array($type)) { $type = implode('_', $type); } if ($type[0] === '\\') { $type = substr($type, 1); } $classNameParts = explode('\\', $type); if (count($classNameParts) > 1) { $type = array_pop($classNameParts); $namespaceName = implode('\\', $classNameParts); $fullClassName = $namespaceName . '\\' . $type; } else { $namespaceName = ''; $fullClassName = $type; } if ($className === '') { do { $className = $prefix . $type . '_' . substr(md5((string) mt_rand()), 0, 8); } while (class_exists($className, false)); } return [ 'className' => $className, 'originalClassName' => $type, 'fullClassName' => $fullClassName, 'namespaceName' => $namespaceName, ]; } private function generateMockClassDeclaration(array $mockClassName, bool $isInterface, array $additionalInterfaces = []): string { $buffer = 'class '; $additionalInterfaces[] = MockObject::class; $interfaces = implode(', ', $additionalInterfaces); if ($isInterface) { $buffer .= sprintf( '%s implements %s', $mockClassName['className'], $interfaces ); if (!in_array($mockClassName['originalClassName'], $additionalInterfaces, true)) { $buffer .= ', '; if (!empty($mockClassName['namespaceName'])) { $buffer .= $mockClassName['namespaceName'] . '\\'; } $buffer .= $mockClassName['originalClassName']; } } else { $buffer .= sprintf( '%s extends %s%s implements %s', $mockClassName['className'], !empty($mockClassName['namespaceName']) ? $mockClassName['namespaceName'] . '\\' : '', $mockClassName['originalClassName'], $interfaces ); } return $buffer; } private function canMockMethod(ReflectionMethod $method): bool { return !($this->isConstructor($method) || $method->isFinal() || $method->isPrivate() || $this->isMethodNameBlacklisted($method->getName())); } private function isMethodNameBlacklisted(string $name): bool { return isset(self::BLACKLISTED_METHOD_NAMES[$name]); } private function getTemplate(string $template): Text_Template { $filename = __DIR__ . DIRECTORY_SEPARATOR . 'Generator' . DIRECTORY_SEPARATOR . $template; if (!isset(self::$templates[$filename])) { self::$templates[$filename] = new Text_Template($filename); } return self::$templates[$filename]; } /** * @see https://github.com/sebastianbergmann/phpunit/issues/4139#issuecomment-605409765 */ private function isConstructor(ReflectionMethod $method): bool { $methodName = strtolower($method->getName()); if ($methodName === '__construct') { return true; } if (PHP_MAJOR_VERSION >= 8) { return false; } $className = strtolower($method->getDeclaringClass()->getName()); return $methodName === $className; } private function mockedCloneMethod(): string { if (PHP_MAJOR_VERSION >= 8) { if (!trait_exists('\PHPUnit\Framework\MockObject\MockedCloneMethodWithVoidReturnType')) { eval(self::MOCKED_CLONE_METHOD_WITH_VOID_RETURN_TYPE_TRAIT); } return PHP_EOL . ' use \PHPUnit\Framework\MockObject\MockedCloneMethodWithVoidReturnType;'; } if (!trait_exists('\PHPUnit\Framework\MockObject\MockedCloneMethodWithoutReturnType')) { eval(self::MOCKED_CLONE_METHOD_WITHOUT_RETURN_TYPE_TRAIT); } return PHP_EOL . ' use \PHPUnit\Framework\MockObject\MockedCloneMethodWithoutReturnType;'; } private function unmockedCloneMethod(): string { if (PHP_MAJOR_VERSION >= 8) { if (!trait_exists('\PHPUnit\Framework\MockObject\UnmockedCloneMethodWithVoidReturnType')) { eval(self::UNMOCKED_CLONE_METHOD_WITH_VOID_RETURN_TYPE_TRAIT); } return PHP_EOL . ' use \PHPUnit\Framework\MockObject\UnmockedCloneMethodWithVoidReturnType;'; } if (!trait_exists('\PHPUnit\Framework\MockObject\UnmockedCloneMethodWithoutReturnType')) { eval(self::UNMOCKED_CLONE_METHOD_WITHOUT_RETURN_TYPE_TRAIT); } return PHP_EOL . ' use \PHPUnit\Framework\MockObject\UnmockedCloneMethodWithoutReturnType;'; } } PK!b¾^n//pfile-manager-advanced/application/svg-sanitizer/includes/phpunit/phpunit/src/Framework/MockObject/MockMethod.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace PHPUnit\Framework\MockObject; use const DIRECTORY_SEPARATOR; use function implode; use function is_string; use function method_exists; use function preg_match; use function preg_replace; use function sprintf; use function str_replace; use function substr_count; use function trim; use function var_export; use ReflectionException; use ReflectionMethod; use ReflectionNamedType; use ReflectionType; use SebastianBergmann\Type\ObjectType; use SebastianBergmann\Type\Type; use SebastianBergmann\Type\UnknownType; use SebastianBergmann\Type\VoidType; use Text_Template; /** * @internal This class is not covered by the backward compatibility promise for PHPUnit */ final class MockMethod { /** * @var Text_Template[] */ private static $templates = []; /** * @var string */ private $className; /** * @var string */ private $methodName; /** * @var bool */ private $cloneArguments; /** * @var string */ private $modifier; /** * @var string */ private $argumentsForDeclaration; /** * @var string */ private $argumentsForCall; /** * @var Type */ private $returnType; /** * @var string */ private $reference; /** * @var bool */ private $callOriginalMethod; /** * @var bool */ private $static; /** * @var ?string */ private $deprecation; /** * @throws RuntimeException */ public static function fromReflection(ReflectionMethod $method, bool $callOriginalMethod, bool $cloneArguments): self { if ($method->isPrivate()) { $modifier = 'private'; } elseif ($method->isProtected()) { $modifier = 'protected'; } else { $modifier = 'public'; } if ($method->isStatic()) { $modifier .= ' static'; } if ($method->returnsReference()) { $reference = '&'; } else { $reference = ''; } $docComment = $method->getDocComment(); if (is_string($docComment) && preg_match('#\*[ \t]*+@deprecated[ \t]*+(.*?)\r?+\n[ \t]*+\*(?:[ \t]*+@|/$)#s', $docComment, $deprecation)) { $deprecation = trim(preg_replace('#[ \t]*\r?\n[ \t]*+\*[ \t]*+#', ' ', $deprecation[1])); } else { $deprecation = null; } return new self( $method->getDeclaringClass()->getName(), $method->getName(), $cloneArguments, $modifier, self::getMethodParametersForDeclaration($method), self::getMethodParametersForCall($method), self::deriveReturnType($method), $reference, $callOriginalMethod, $method->isStatic(), $deprecation ); } public static function fromName(string $fullClassName, string $methodName, bool $cloneArguments): self { return new self( $fullClassName, $methodName, $cloneArguments, 'public', '', '', new UnknownType, '', false, false, null ); } public function __construct(string $className, string $methodName, bool $cloneArguments, string $modifier, string $argumentsForDeclaration, string $argumentsForCall, Type $returnType, string $reference, bool $callOriginalMethod, bool $static, ?string $deprecation) { $this->className = $className; $this->methodName = $methodName; $this->cloneArguments = $cloneArguments; $this->modifier = $modifier; $this->argumentsForDeclaration = $argumentsForDeclaration; $this->argumentsForCall = $argumentsForCall; $this->returnType = $returnType; $this->reference = $reference; $this->callOriginalMethod = $callOriginalMethod; $this->static = $static; $this->deprecation = $deprecation; } public function getName(): string { return $this->methodName; } /** * @throws RuntimeException */ public function generateCode(): string { if ($this->static) { $templateFile = 'mocked_static_method.tpl'; } elseif ($this->returnType instanceof VoidType) { $templateFile = sprintf( '%s_method_void.tpl', $this->callOriginalMethod ? 'proxied' : 'mocked' ); } else { $templateFile = sprintf( '%s_method.tpl', $this->callOriginalMethod ? 'proxied' : 'mocked' ); } $deprecation = $this->deprecation; if (null !== $this->deprecation) { $deprecation = "The {$this->className}::{$this->methodName} method is deprecated ({$this->deprecation})."; $deprecationTemplate = $this->getTemplate('deprecation.tpl'); $deprecationTemplate->setVar([ 'deprecation' => var_export($deprecation, true), ]); $deprecation = $deprecationTemplate->render(); } /** * This is required as the version of sebastian/type used * by PHPUnit 8.5 does now know about the mixed type. */ $returnTypeDeclaration = str_replace( '?mixed', 'mixed', $this->returnType->getReturnTypeDeclaration() ); $template = $this->getTemplate($templateFile); $template->setVar( [ 'arguments_decl' => $this->argumentsForDeclaration, 'arguments_call' => $this->argumentsForCall, 'return_declaration' => $returnTypeDeclaration, 'arguments_count' => !empty($this->argumentsForCall) ? substr_count($this->argumentsForCall, ',') + 1 : 0, 'class_name' => $this->className, 'method_name' => $this->methodName, 'modifier' => $this->modifier, 'reference' => $this->reference, 'clone_arguments' => $this->cloneArguments ? 'true' : 'false', 'deprecation' => $deprecation, ] ); return $template->render(); } public function getReturnType(): Type { return $this->returnType; } private function getTemplate(string $template): Text_Template { $filename = __DIR__ . DIRECTORY_SEPARATOR . 'Generator' . DIRECTORY_SEPARATOR . $template; if (!isset(self::$templates[$filename])) { self::$templates[$filename] = new Text_Template($filename); } return self::$templates[$filename]; } /** * Returns the parameters of a function or method. * * @throws RuntimeException */ private static function getMethodParametersForDeclaration(ReflectionMethod $method): string { $parameters = []; foreach ($method->getParameters() as $i => $parameter) { $name = '$' . $parameter->getName(); /* Note: PHP extensions may use empty names for reference arguments * or "..." for methods taking a variable number of arguments. */ if ($name === '$' || $name === '$...') { $name = '$arg' . $i; } $nullable = ''; $default = ''; $reference = ''; $typeDeclaration = ''; $type = null; $typeName = null; if ($parameter->hasType()) { $type = $parameter->getType(); if ($type instanceof ReflectionNamedType) { $typeName = $type->getName(); } } if ($parameter->isVariadic()) { $name = '...' . $name; } elseif ($parameter->isDefaultValueAvailable()) { $default = ' = ' . var_export($parameter->getDefaultValue(), true); } elseif ($parameter->isOptional()) { $default = ' = null'; } if ($type !== null) { if ($typeName !== 'mixed' && $parameter->allowsNull()) { $nullable = '?'; } if ($typeName === 'self') { $typeDeclaration = $method->getDeclaringClass()->getName() . ' '; } elseif ($typeName !== null) { $typeDeclaration = $typeName . ' '; } } if ($parameter->isPassedByReference()) { $reference = '&'; } $parameters[] = $nullable . $typeDeclaration . $reference . $name . $default; } return implode(', ', $parameters); } /** * Returns the parameters of a function or method. * * @throws ReflectionException */ private static function getMethodParametersForCall(ReflectionMethod $method): string { $parameters = []; foreach ($method->getParameters() as $i => $parameter) { $name = '$' . $parameter->getName(); /* Note: PHP extensions may use empty names for reference arguments * or "..." for methods taking a variable number of arguments. */ if ($name === '$' || $name === '$...') { $name = '$arg' . $i; } if ($parameter->isVariadic()) { continue; } if ($parameter->isPassedByReference()) { $parameters[] = '&' . $name; } else { $parameters[] = $name; } } return implode(', ', $parameters); } private static function deriveReturnType(ReflectionMethod $method): Type { $returnType = self::reflectionMethodGetReturnType($method); if ($returnType === null) { return new UnknownType; } // @see https://bugs.php.net/bug.php?id=70722 if ($returnType instanceof ReflectionNamedType && $returnType->getName() === 'self') { return ObjectType::fromName($method->getDeclaringClass()->getName(), $returnType->allowsNull()); } // @see https://github.com/sebastianbergmann/phpunit-mock-objects/issues/406 if ($returnType instanceof ReflectionNamedType && $returnType->getName() === 'parent') { $parentClass = $method->getDeclaringClass()->getParentClass(); if ($parentClass === false) { throw new RuntimeException( sprintf( 'Cannot mock %s::%s because "parent" return type declaration is used but %s does not have a parent class', $method->getDeclaringClass()->getName(), $method->getName(), $method->getDeclaringClass()->getName() ) ); } return ObjectType::fromName($parentClass->getName(), $returnType->allowsNull()); } return Type::fromName($returnType->getName(), $returnType->allowsNull()); } private static function reflectionMethodGetReturnType(ReflectionMethod $method): ?ReflectionType { if ($method->hasReturnType()) { return $method->getReturnType(); } if (!method_exists($method, 'getTentativeReturnType')) { return null; } return $method->getTentativeReturnType(); } } PK!˜7iæMM}file-manager-advanced/application/svg-sanitizer/includes/phpunit/phpunit/src/Framework/MockObject/Generator/mocked_method.tplnu„[µü¤ {modifier} function {reference}{method_name}({arguments_decl}){return_declaration} {{deprecation} $__phpunit_arguments = [{arguments_call}]; $__phpunit_count = func_num_args(); if ($__phpunit_count > {arguments_count}) { $__phpunit_arguments_tmp = func_get_args(); for ($__phpunit_i = {arguments_count}; $__phpunit_i < $__phpunit_count; $__phpunit_i++) { $__phpunit_arguments[] = $__phpunit_arguments_tmp[$__phpunit_i]; } } $__phpunit_result = $this->__phpunit_getInvocationHandler()->invoke( new \PHPUnit\Framework\MockObject\Invocation( '{class_name}', '{method_name}', $__phpunit_arguments, '{return_declaration}', $this, {clone_arguments} ) ); return $__phpunit_result; } PK!O5øs;;{file-manager-advanced/application/svg-sanitizer/includes/phpunit/phpunit/src/Framework/MockObject/Generator/deprecation.tplnu„[µü¤ @trigger_error({deprecation}, E_USER_DEPRECATED); PK!ô’±ÍÍzfile-manager-advanced/application/svg-sanitizer/includes/phpunit/phpunit/src/Framework/MockObject/Generator/wsdl_class.tplnu„[µü¤declare(strict_types=1); {namespace}class {class_name} extends \SoapClient { public function __construct($wsdl, array $options) { parent::__construct('{wsdl}', $options); } {methods}} PK!¾Ði‰<<{file-manager-advanced/application/svg-sanitizer/includes/phpunit/phpunit/src/Framework/MockObject/Generator/wsdl_method.tplnu„[µü¤ public function {method_name}({arguments}) { } PK! 4éRîî„file-manager-advanced/application/svg-sanitizer/includes/phpunit/phpunit/src/Framework/MockObject/Generator/mocked_static_method.tplnu„[µü¤ {modifier} function {reference}{method_name}({arguments_decl}){return_declaration} { throw new \PHPUnit\Framework\MockObject\BadMethodCallException('Static method "{method_name}" cannot be invoked on mock object'); } PK! ñ΂file-manager-advanced/application/svg-sanitizer/includes/phpunit/phpunit/src/Framework/MockObject/Generator/mocked_method_void.tplnu„[µü¤ {modifier} function {reference}{method_name}({arguments_decl}){return_declaration} {{deprecation} $__phpunit_arguments = [{arguments_call}]; $__phpunit_count = func_num_args(); if ($__phpunit_count > {arguments_count}) { $__phpunit_arguments_tmp = func_get_args(); for ($__phpunit_i = {arguments_count}; $__phpunit_i < $__phpunit_count; $__phpunit_i++) { $__phpunit_arguments[] = $__phpunit_arguments_tmp[$__phpunit_i]; } } $this->__phpunit_getInvocationHandler()->invoke( new \PHPUnit\Framework\MockObject\Invocation( '{class_name}', '{method_name}', $__phpunit_arguments, '{return_declaration}', $this, {clone_arguments} ) ); } PK!&›ÿ™}}ƒfile-manager-advanced/application/svg-sanitizer/includes/phpunit/phpunit/src/Framework/MockObject/Generator/proxied_method_void.tplnu„[µü¤ {modifier} function {reference}{method_name}({arguments_decl}){return_declaration} { $__phpunit_arguments = [{arguments_call}]; $__phpunit_count = func_num_args(); if ($__phpunit_count > {arguments_count}) { $__phpunit_arguments_tmp = func_get_args(); for ($__phpunit_i = {arguments_count}; $__phpunit_i < $__phpunit_count; $__phpunit_i++) { $__phpunit_arguments[] = $__phpunit_arguments_tmp[$__phpunit_i]; } } $this->__phpunit_getInvocationHandler()->invoke( new \PHPUnit\Framework\MockObject\Invocation( '{class_name}', '{method_name}', $__phpunit_arguments, '{return_declaration}', $this, {clone_arguments}, true ) ); call_user_func_array(array($this->__phpunit_originalObject, "{method_name}"), $__phpunit_arguments); } PK!‚wZ��|file-manager-advanced/application/svg-sanitizer/includes/phpunit/phpunit/src/Framework/MockObject/Generator/mocked_class.tplnu„[µü¤declare(strict_types=1); {prologue}{class_declaration} { use \PHPUnit\Framework\MockObject\Api;{method}{clone} {mocked_methods}}{epilogue} PK!�ñ»•„„~file-manager-advanced/application/svg-sanitizer/includes/phpunit/phpunit/src/Framework/MockObject/Generator/proxied_method.tplnu„[µü¤ {modifier} function {reference}{method_name}({arguments_decl}){return_declaration} { $__phpunit_arguments = [{arguments_call}]; $__phpunit_count = func_num_args(); if ($__phpunit_count > {arguments_count}) { $__phpunit_arguments_tmp = func_get_args(); for ($__phpunit_i = {arguments_count}; $__phpunit_i < $__phpunit_count; $__phpunit_i++) { $__phpunit_arguments[] = $__phpunit_arguments_tmp[$__phpunit_i]; } } $this->__phpunit_getInvocationHandler()->invoke( new \PHPUnit\Framework\MockObject\Invocation( '{class_name}', '{method_name}', $__phpunit_arguments, '{return_declaration}', $this, {clone_arguments}, true ) ); return call_user_func_array(array($this->__phpunit_originalObject, "{method_name}"), $__phpunit_arguments); } PK!÷<‹ÈQQ{file-manager-advanced/application/svg-sanitizer/includes/phpunit/phpunit/src/Framework/MockObject/Generator/trait_class.tplnu„[µü¤declare(strict_types=1); {prologue}class {class_name} { use {trait_name}; } PK!° •––xfile-manager-advanced/application/svg-sanitizer/includes/phpunit/phpunit/src/Framework/MockObject/ConfigurableMethod.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace PHPUnit\Framework\MockObject; use SebastianBergmann\Type\Type; /** * @internal This class is not covered by the backward compatibility promise for PHPUnit */ final class ConfigurableMethod { /** * @var string */ private $name; /** * @var Type */ private $returnType; public function __construct(string $name, Type $returnType) { $this->name = $name; $this->returnType = $returnType; } public function getName(): string { return $this->name; } public function mayReturn($value): bool { if ($value === null && $this->returnType->allowsNull()) { return true; } return $this->returnType->isAssignable(Type::fromValue($value, false)); } public function getReturnTypeDeclaration(): string { return $this->returnType->getReturnTypeDeclaration(); } } PK!Fñò‰‡ ‡ mfile-manager-advanced/application/svg-sanitizer/includes/phpunit/phpunit/src/Framework/MockObject/Api/Api.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace PHPUnit\Framework\MockObject; use PHPUnit\Framework\MockObject\Builder\InvocationMocker as InvocationMockerBuilder; use PHPUnit\Framework\MockObject\Rule\InvocationOrder; /** * @internal This trait is not covered by the backward compatibility promise for PHPUnit */ trait Api { /** * @var ConfigurableMethod[] */ private static $__phpunit_configurableMethods; /** * @var object */ private $__phpunit_originalObject; /** * @var bool */ private $__phpunit_returnValueGeneration = true; /** * @var InvocationHandler */ private $__phpunit_invocationMocker; /** @noinspection MagicMethodsValidityInspection */ public static function __phpunit_initConfigurableMethods(ConfigurableMethod ...$configurableMethods): void { if (isset(static::$__phpunit_configurableMethods)) { throw new ConfigurableMethodsAlreadyInitializedException( 'Configurable methods is already initialized and can not be reinitialized' ); } static::$__phpunit_configurableMethods = $configurableMethods; } /** @noinspection MagicMethodsValidityInspection */ public function __phpunit_setOriginalObject($originalObject): void { $this->__phpunit_originalObject = $originalObject; } /** @noinspection MagicMethodsValidityInspection */ public function __phpunit_setReturnValueGeneration(bool $returnValueGeneration): void { $this->__phpunit_returnValueGeneration = $returnValueGeneration; } /** @noinspection MagicMethodsValidityInspection */ public function __phpunit_getInvocationHandler(): InvocationHandler { if ($this->__phpunit_invocationMocker === null) { $this->__phpunit_invocationMocker = new InvocationHandler( static::$__phpunit_configurableMethods, $this->__phpunit_returnValueGeneration ); } return $this->__phpunit_invocationMocker; } /** @noinspection MagicMethodsValidityInspection */ public function __phpunit_hasMatchers(): bool { return $this->__phpunit_getInvocationHandler()->hasMatchers(); } /** @noinspection MagicMethodsValidityInspection */ public function __phpunit_verify(bool $unsetInvocationMocker = true): void { $this->__phpunit_getInvocationHandler()->verify(); if ($unsetInvocationMocker) { $this->__phpunit_invocationMocker = null; } } public function expects(InvocationOrder $matcher): InvocationMockerBuilder { return $this->__phpunit_getInvocationHandler()->expects($matcher); } } PK!�Ìýßßpfile-manager-advanced/application/svg-sanitizer/includes/phpunit/phpunit/src/Framework/MockObject/Api/Method.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace PHPUnit\Framework\MockObject; use function call_user_func_array; use function func_get_args; use PHPUnit\Framework\MockObject\Rule\AnyInvokedCount; /** * @internal This trait is not covered by the backward compatibility promise for PHPUnit */ trait Method { public function method() { $expects = $this->expects(new AnyInvokedCount); return call_user_func_array( [$expects, 'method'], func_get_args() ); } } PK!ŽûU•÷÷ofile-manager-advanced/application/svg-sanitizer/includes/phpunit/phpunit/src/Framework/MockObject/MockTrait.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace PHPUnit\Framework\MockObject; use function class_exists; /** * @internal This class is not covered by the backward compatibility promise for PHPUnit */ final class MockTrait implements MockType { /** * @var string */ private $classCode; /** * @var string */ private $mockName; public function __construct(string $classCode, string $mockName) { $this->classCode = $classCode; $this->mockName = $mockName; } public function generate(): string { if (!class_exists($this->mockName, false)) { eval($this->classCode); } return $this->mockName; } public function getClassCode(): string { return $this->classCode; } } PK! r›  pfile-manager-advanced/application/svg-sanitizer/includes/phpunit/phpunit/src/Framework/MockObject/MockObject.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace PHPUnit\Framework\MockObject; use PHPUnit\Framework\MockObject\Builder\InvocationMocker as BuilderInvocationMocker; use PHPUnit\Framework\MockObject\Rule\InvocationOrder; /** * @method BuilderInvocationMocker method($constraint) */ interface MockObject extends Stub { public function __phpunit_setOriginalObject($originalObject): void; public function __phpunit_verify(bool $unsetInvocationMocker = true): void; public function expects(InvocationOrder $invocationRule): BuilderInvocationMocker; } PK!Z²‰mmpfile-manager-advanced/application/svg-sanitizer/includes/phpunit/phpunit/src/Framework/MockObject/Invocation.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace PHPUnit\Framework\MockObject; use function array_map; use function implode; use function is_object; use function ltrim; use function sprintf; use function strpos; use function strtolower; use function substr; use PHPUnit\Framework\SelfDescribing; use PHPUnit\Util\Type; use SebastianBergmann\Exporter\Exporter; use stdClass; /** * @internal This class is not covered by the backward compatibility promise for PHPUnit */ final class Invocation implements SelfDescribing { /** * @var string */ private $className; /** * @var string */ private $methodName; /** * @var array */ private $parameters; /** * @var string */ private $returnType; /** * @var bool */ private $isReturnTypeNullable = false; /** * @var bool */ private $proxiedCall; /** * @var object */ private $object; public function __construct(string $className, string $methodName, array $parameters, string $returnType, object $object, bool $cloneObjects = false, bool $proxiedCall = false) { $this->className = $className; $this->methodName = $methodName; $this->parameters = $parameters; $this->object = $object; $this->proxiedCall = $proxiedCall; $returnType = ltrim($returnType, ': '); if (strtolower($methodName) === '__tostring') { $returnType = 'string'; } if (strpos($returnType, '?') === 0) { $returnType = substr($returnType, 1); $this->isReturnTypeNullable = true; } $this->returnType = $returnType; if (!$cloneObjects) { return; } foreach ($this->parameters as $key => $value) { if (is_object($value)) { $this->parameters[$key] = $this->cloneObject($value); } } } public function getClassName(): string { return $this->className; } public function getMethodName(): string { return $this->methodName; } public function getParameters(): array { return $this->parameters; } /** * @throws RuntimeException * * @return mixed Mocked return value */ public function generateReturnValue() { if ($this->isReturnTypeNullable || $this->proxiedCall) { return; } switch (strtolower($this->returnType)) { case '': case 'void': return; case 'string': return ''; case 'float': return 0.0; case 'int': return 0; case 'bool': return false; case 'array': return []; case 'object': return new stdClass; case 'callable': case 'closure': return static function (): void { }; case 'traversable': case 'generator': case 'iterable': $generator = static function () { yield from []; }; return $generator(); default: $generator = new Generator; return $generator->getMock($this->returnType, [], [], '', false); } } public function toString(): string { $exporter = new Exporter; return sprintf( '%s::%s(%s)%s', $this->className, $this->methodName, implode( ', ', array_map( [$exporter, 'shortenedExport'], $this->parameters ) ), $this->returnType ? sprintf(': %s', $this->returnType) : '' ); } public function getObject(): object { return $this->object; } private function cloneObject(object $original): object { if (Type::isCloneable($original)) { return clone $original; } return $original; } } PK!­Pl?ˆˆjfile-manager-advanced/application/svg-sanitizer/includes/phpunit/phpunit/src/Framework/MockObject/Stub.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace PHPUnit\Framework\MockObject; use PHPUnit\Framework\MockObject\Builder\InvocationStubber; /** * @method InvocationStubber method($constraint) */ interface Stub { public function __phpunit_getInvocationHandler(): InvocationHandler; public function __phpunit_hasMatchers(): bool; public function __phpunit_setReturnValueGeneration(bool $returnValueGeneration): void; } PK!ë :8°°ofile-manager-advanced/application/svg-sanitizer/includes/phpunit/phpunit/src/Framework/MockObject/MockClass.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace PHPUnit\Framework\MockObject; use function call_user_func; use function class_exists; /** * @internal This class is not covered by the backward compatibility promise for PHPUnit */ final class MockClass implements MockType { /** * @var string */ private $classCode; /** * @var string */ private $mockName; /** * @var ConfigurableMethod[] */ private $configurableMethods; public function __construct(string $classCode, string $mockName, array $configurableMethods) { $this->classCode = $classCode; $this->mockName = $mockName; $this->configurableMethods = $configurableMethods; } public function generate(): string { if (!class_exists($this->mockName, false)) { eval($this->classCode); call_user_func( [ $this->mockName, '__phpunit_initConfigurableMethods', ], ...$this->configurableMethods ); } return $this->mockName; } public function getClassCode(): string { return $this->classCode; } } PK!|è¹wfile-manager-advanced/application/svg-sanitizer/includes/phpunit/phpunit/src/Framework/MockObject/InvocationHandler.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace PHPUnit\Framework\MockObject; use function sprintf; use function strtolower; use Exception; use PHPUnit\Framework\ExpectationFailedException; use PHPUnit\Framework\MockObject\Builder\InvocationMocker; use PHPUnit\Framework\MockObject\Rule\InvocationOrder; use Throwable; /** * @internal This class is not covered by the backward compatibility promise for PHPUnit */ final class InvocationHandler { /** * @var Matcher[] */ private $matchers = []; /** * @var Matcher[] */ private $matcherMap = []; /** * @var ConfigurableMethod[] */ private $configurableMethods; /** * @var bool */ private $returnValueGeneration; /** * @var Throwable */ private $deferredError; public function __construct(array $configurableMethods, bool $returnValueGeneration) { $this->configurableMethods = $configurableMethods; $this->returnValueGeneration = $returnValueGeneration; } public function hasMatchers(): bool { foreach ($this->matchers as $matcher) { if ($matcher->hasMatchers()) { return true; } } return false; } /** * Looks up the match builder with identification $id and returns it. * * @param string $id The identification of the match builder */ public function lookupMatcher(string $id): ?Matcher { if (isset($this->matcherMap[$id])) { return $this->matcherMap[$id]; } return null; } /** * Registers a matcher with the identification $id. The matcher can later be * looked up using lookupMatcher() to figure out if it has been invoked. * * @param string $id The identification of the matcher * @param Matcher $matcher The builder which is being registered * * @throws RuntimeException */ public function registerMatcher(string $id, Matcher $matcher): void { if (isset($this->matcherMap[$id])) { throw new RuntimeException( 'Matcher with id <' . $id . '> is already registered.' ); } $this->matcherMap[$id] = $matcher; } public function expects(InvocationOrder $rule): InvocationMocker { $matcher = new Matcher($rule); $this->addMatcher($matcher); return new InvocationMocker( $this, $matcher, ...$this->configurableMethods ); } /** * @throws Exception * * @return mixed|void */ public function invoke(Invocation $invocation) { $exception = null; $hasReturnValue = false; $returnValue = null; foreach ($this->matchers as $match) { try { if ($match->matches($invocation)) { $value = $match->invoked($invocation); if (!$hasReturnValue) { $returnValue = $value; $hasReturnValue = true; } } } catch (Exception $e) { $exception = $e; } } if ($exception !== null) { throw $exception; } if ($hasReturnValue) { return $returnValue; } if (!$this->returnValueGeneration) { $exception = new ExpectationFailedException( sprintf( 'Return value inference disabled and no expectation set up for %s::%s()', $invocation->getClassName(), $invocation->getMethodName() ) ); if (strtolower($invocation->getMethodName()) === '__tostring') { $this->deferredError = $exception; return ''; } throw $exception; } return $invocation->generateReturnValue(); } public function matches(Invocation $invocation): bool { foreach ($this->matchers as $matcher) { if (!$matcher->matches($invocation)) { return false; } } return true; } /** * @throws ExpectationFailedException */ public function verify(): void { foreach ($this->matchers as $matcher) { $matcher->verify(); } if ($this->deferredError) { throw $this->deferredError; } } private function addMatcher(Matcher $matcher): void { $this->matchers[] = $matcher; } } PK!aº–ÊÊtfile-manager-advanced/application/svg-sanitizer/includes/phpunit/phpunit/src/Framework/MockObject/Builder/Match_.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace PHPUnit\Framework\MockObject\Builder; /** * @internal This class is not covered by the backward compatibility promise for PHPUnit */ interface Match_ extends Stub { /** * Defines the expectation which must occur before the current is valid. * * @param string $id the identification of the expectation that should * occur before this one * * @return Stub */ public function after($id); } PK!°œ}"��vfile-manager-advanced/application/svg-sanitizer/includes/phpunit/phpunit/src/Framework/MockObject/Builder/Identity.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace PHPUnit\Framework\MockObject\Builder; /** * @internal This class is not covered by the backward compatibility promise for PHPUnit */ interface Identity { /** * Sets the identification of the expectation to $id. * * @note The identifier is unique per mock object. * * @param string $id unique identification of expectation */ public function id($id); } PK!fö�1__}file-manager-advanced/application/svg-sanitizer/includes/phpunit/phpunit/src/Framework/MockObject/Builder/MethodNameMatch.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace PHPUnit\Framework\MockObject\Builder; use PHPUnit\Framework\Constraint\Constraint; /** * @internal This class is not covered by the backward compatibility promise for PHPUnit */ interface MethodNameMatch extends ParametersMatch { /** * Adds a new method name match and returns the parameter match object for * further matching possibilities. * * @param Constraint $constraint Constraint for matching method, if a string is passed it will use the PHPUnit_Framework_Constraint_IsEqual * * @return ParametersMatch */ public function method($constraint); } PK!£ÏÿÆ££file-manager-advanced/application/svg-sanitizer/includes/phpunit/phpunit/src/Framework/MockObject/Builder/InvocationStubber.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace PHPUnit\Framework\MockObject\Builder; use PHPUnit\Framework\MockObject\Stub\Stub; use Throwable; interface InvocationStubber { public function will(Stub $stub): Identity; /** @return self */ public function willReturn($value, ...$nextValues)/* : self */; /** * @param mixed $reference * * @return self */ public function willReturnReference(&$reference)/* : self */; /** * @param array> $valueMap * * @return self */ public function willReturnMap(array $valueMap)/* : self */; /** * @param int $argumentIndex * * @return self */ public function willReturnArgument($argumentIndex)/* : self */; /** * @param callable $callback * * @return self */ public function willReturnCallback($callback)/* : self */; /** @return self */ public function willReturnSelf()/* : self */; /** * @param mixed $values * * @return self */ public function willReturnOnConsecutiveCalls(...$values)/* : self */; /** @return self */ public function willThrowException(Throwable $exception)/* : self */; } PK!×ÅÊââ~file-manager-advanced/application/svg-sanitizer/includes/phpunit/phpunit/src/Framework/MockObject/Builder/InvocationMocker.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace PHPUnit\Framework\MockObject\Builder; use function array_map; use function array_merge; use function count; use function get_class; use function gettype; use function in_array; use function is_object; use function is_string; use function sprintf; use function strtolower; use PHPUnit\Framework\Constraint\Constraint; use PHPUnit\Framework\MockObject\ConfigurableMethod; use PHPUnit\Framework\MockObject\IncompatibleReturnValueException; use PHPUnit\Framework\MockObject\InvocationHandler; use PHPUnit\Framework\MockObject\Matcher; use PHPUnit\Framework\MockObject\Rule; use PHPUnit\Framework\MockObject\RuntimeException; use PHPUnit\Framework\MockObject\Stub\ConsecutiveCalls; use PHPUnit\Framework\MockObject\Stub\Exception; use PHPUnit\Framework\MockObject\Stub\ReturnArgument; use PHPUnit\Framework\MockObject\Stub\ReturnCallback; use PHPUnit\Framework\MockObject\Stub\ReturnReference; use PHPUnit\Framework\MockObject\Stub\ReturnSelf; use PHPUnit\Framework\MockObject\Stub\ReturnStub; use PHPUnit\Framework\MockObject\Stub\ReturnValueMap; use PHPUnit\Framework\MockObject\Stub\Stub; use Throwable; final class InvocationMocker implements InvocationStubber, MethodNameMatch { /** * @var InvocationHandler */ private $invocationHandler; /** * @var Matcher */ private $matcher; /** * @var ConfigurableMethod[] */ private $configurableMethods; public function __construct(InvocationHandler $handler, Matcher $matcher, ConfigurableMethod ...$configurableMethods) { $this->invocationHandler = $handler; $this->matcher = $matcher; $this->configurableMethods = $configurableMethods; } /** * @return $this */ public function id($id): self { $this->invocationHandler->registerMatcher($id, $this->matcher); return $this; } /** * @return $this */ public function will(Stub $stub): Identity { $this->matcher->setStub($stub); return $this; } public function willReturn($value, ...$nextValues): self { if (count($nextValues) === 0) { $this->ensureTypeOfReturnValues([$value]); $stub = $value instanceof Stub ? $value : new ReturnStub($value); } else { $values = array_merge([$value], $nextValues); $this->ensureTypeOfReturnValues($values); $stub = new ConsecutiveCalls($values); } return $this->will($stub); } public function willReturnReference(&$reference): self { $stub = new ReturnReference($reference); return $this->will($stub); } public function willReturnMap(array $valueMap): self { $stub = new ReturnValueMap($valueMap); return $this->will($stub); } public function willReturnArgument($argumentIndex): self { $stub = new ReturnArgument($argumentIndex); return $this->will($stub); } public function willReturnCallback($callback): self { $stub = new ReturnCallback($callback); return $this->will($stub); } public function willReturnSelf(): self { $stub = new ReturnSelf; return $this->will($stub); } public function willReturnOnConsecutiveCalls(...$values): self { $stub = new ConsecutiveCalls($values); return $this->will($stub); } public function willThrowException(Throwable $exception): self { $stub = new Exception($exception); return $this->will($stub); } /** * @return $this */ public function after($id): self { $this->matcher->setAfterMatchBuilderId($id); return $this; } /** * @throws RuntimeException * * @return $this */ public function with(...$arguments): self { $this->canDefineParameters(); $this->matcher->setParametersRule(new Rule\Parameters($arguments)); return $this; } /** * @param array ...$arguments * * @throws RuntimeException * * @return $this */ public function withConsecutive(...$arguments): self { $this->canDefineParameters(); $this->matcher->setParametersRule(new Rule\ConsecutiveParameters($arguments)); return $this; } /** * @throws RuntimeException * * @return $this */ public function withAnyParameters(): self { $this->canDefineParameters(); $this->matcher->setParametersRule(new Rule\AnyParameters); return $this; } /** * @param Constraint|string $constraint * * @throws RuntimeException * * @return $this */ public function method($constraint): self { if ($this->matcher->hasMethodNameRule()) { throw new RuntimeException( 'Rule for method name is already defined, cannot redefine' ); } $configurableMethodNames = array_map( static function (ConfigurableMethod $configurable) { return strtolower($configurable->getName()); }, $this->configurableMethods ); if (is_string($constraint) && !in_array(strtolower($constraint), $configurableMethodNames, true)) { throw new RuntimeException( sprintf( 'Trying to configure method "%s" which cannot be configured because it does not exist, has not been specified, is final, or is static', $constraint ) ); } $this->matcher->setMethodNameRule(new Rule\MethodName($constraint)); return $this; } /** * Validate that a parameters rule can be defined, throw exceptions otherwise. * * @throws RuntimeException */ private function canDefineParameters(): void { if (!$this->matcher->hasMethodNameRule()) { throw new RuntimeException( 'Rule for method name is not defined, cannot define rule for parameters ' . 'without one' ); } if ($this->matcher->hasParametersRule()) { throw new RuntimeException( 'Rule for parameters is already defined, cannot redefine' ); } } private function getConfiguredMethod(): ?ConfigurableMethod { $configuredMethod = null; foreach ($this->configurableMethods as $configurableMethod) { if ($this->matcher->getMethodNameRule()->matchesName($configurableMethod->getName())) { if ($configuredMethod !== null) { return null; } $configuredMethod = $configurableMethod; } } return $configuredMethod; } private function ensureTypeOfReturnValues(array $values): void { $configuredMethod = $this->getConfiguredMethod(); if ($configuredMethod === null) { return; } foreach ($values as $value) { if (!$configuredMethod->mayReturn($value)) { throw new IncompatibleReturnValueException( sprintf( 'Method %s may not return value of type %s, its return declaration is "%s"', $configuredMethod->getName(), is_object($value) ? get_class($value) : gettype($value), $configuredMethod->getReturnTypeDeclaration() ) ); } } } } PK!³?Ó ÃÃrfile-manager-advanced/application/svg-sanitizer/includes/phpunit/phpunit/src/Framework/MockObject/Builder/Stub.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace PHPUnit\Framework\MockObject\Builder; use PHPUnit\Framework\MockObject\Stub\Stub as BaseStub; /** * @internal This class is not covered by the backward compatibility promise for PHPUnit */ interface Stub extends Identity { /** * Stubs the matching method with the stub object $stub. Any invocations of * the matched method will now be handled by the stub instead. */ public function will(BaseStub $stub): Identity; } PK!#A i°°}file-manager-advanced/application/svg-sanitizer/includes/phpunit/phpunit/src/Framework/MockObject/Builder/ParametersMatch.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace PHPUnit\Framework\MockObject\Builder; /** * @internal This class is not covered by the backward compatibility promise for PHPUnit */ interface ParametersMatch extends Match_ { /** * Sets the parameters to match for, each parameter to this function will * be part of match. To perform specific matches or constraints create a * new PHPUnit\Framework\Constraint\Constraint and use it for the parameter. * If the parameter value is not a constraint it will use the * PHPUnit\Framework\Constraint\IsEqual for the value. * * Some examples: * * // match first parameter with value 2 * $b->with(2); * // match first parameter with value 'smock' and second identical to 42 * $b->with('smock', new PHPUnit\Framework\Constraint\IsEqual(42)); * * * @return ParametersMatch */ public function with(...$arguments); /** * Sets a rule which allows any kind of parameters. * * Some examples: * * // match any number of parameters * $b->withAnyParameters(); * * * @return ParametersMatch */ public function withAnyParameters(); } PK!šTp_sfile-manager-advanced/application/svg-sanitizer/includes/phpunit/phpunit/src/Framework/MockObject/MockMethodSet.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace PHPUnit\Framework\MockObject; use function array_key_exists; use function array_values; use function strtolower; /** * @internal This class is not covered by the backward compatibility promise for PHPUnit */ final class MockMethodSet { /** * @var MockMethod[] */ private $methods = []; public function addMethods(MockMethod ...$methods): void { foreach ($methods as $method) { $this->methods[strtolower($method->getName())] = $method; } } /** * @return MockMethod[] */ public function asArray(): array { return array_values($this->methods); } public function hasMethod(string $methodName): bool { return array_key_exists(strtolower($methodName), $this->methods); } } PK!ã�¡¡~file-manager-advanced/application/svg-sanitizer/includes/phpunit/phpunit/src/Framework/MockObject/Rule/InvokedAtLeastCount.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace PHPUnit\Framework\MockObject\Rule; use PHPUnit\Framework\ExpectationFailedException; use PHPUnit\Framework\MockObject\Invocation as BaseInvocation; /** * @internal This class is not covered by the backward compatibility promise for PHPUnit */ final class InvokedAtLeastCount extends InvocationOrder { /** * @var int */ private $requiredInvocations; /** * @param int $requiredInvocations */ public function __construct($requiredInvocations) { $this->requiredInvocations = $requiredInvocations; } public function toString(): string { return 'invoked at least ' . $this->requiredInvocations . ' times'; } /** * Verifies that the current expectation is valid. If everything is OK the * code should just return, if not it must throw an exception. * * @throws ExpectationFailedException */ public function verify(): void { $count = $this->getInvocationCount(); if ($count < $this->requiredInvocations) { throw new ExpectationFailedException( 'Expected invocation at least ' . $this->requiredInvocations . ' times but it occurred ' . $count . ' time(s).' ); } } public function matches(BaseInvocation $invocation): bool { return true; } protected function invokedDo(BaseInvocation $invocation): void { } } PK!Ý̼˜JJ€file-manager-advanced/application/svg-sanitizer/includes/phpunit/phpunit/src/Framework/MockObject/Rule/ConsecutiveParameters.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace PHPUnit\Framework\MockObject\Rule; use function count; use function gettype; use function is_iterable; use function sprintf; use PHPUnit\Framework\Constraint\Constraint; use PHPUnit\Framework\Constraint\IsEqual; use PHPUnit\Framework\Exception; use PHPUnit\Framework\ExpectationFailedException; use PHPUnit\Framework\InvalidParameterGroupException; use PHPUnit\Framework\MockObject\Invocation as BaseInvocation; use SebastianBergmann\RecursionContext\InvalidArgumentException; /** * @internal This class is not covered by the backward compatibility promise for PHPUnit */ final class ConsecutiveParameters implements ParametersRule { /** * @var array */ private $parameterGroups = []; /** * @var array */ private $invocations = []; /** * @throws Exception */ public function __construct(array $parameterGroups) { foreach ($parameterGroups as $index => $parameters) { if (!is_iterable($parameters)) { throw new InvalidParameterGroupException( sprintf( 'Parameter group #%d must be an array or Traversable, got %s', $index, gettype($parameters) ) ); } foreach ($parameters as $parameter) { if (!$parameter instanceof Constraint) { $parameter = new IsEqual($parameter); } $this->parameterGroups[$index][] = $parameter; } } } public function toString(): string { return 'with consecutive parameters'; } /** * @throws ExpectationFailedException * @throws InvalidArgumentException */ public function apply(BaseInvocation $invocation): void { $this->invocations[] = $invocation; $callIndex = count($this->invocations) - 1; $this->verifyInvocation($invocation, $callIndex); } /** * @throws ExpectationFailedException * @throws InvalidArgumentException */ public function verify(): void { foreach ($this->invocations as $callIndex => $invocation) { $this->verifyInvocation($invocation, $callIndex); } } /** * Verify a single invocation. * * @param int $callIndex * * @throws ExpectationFailedException * @throws InvalidArgumentException */ private function verifyInvocation(BaseInvocation $invocation, $callIndex): void { if (!isset($this->parameterGroups[$callIndex])) { // no parameter assertion for this call index return; } if ($invocation === null) { throw new ExpectationFailedException( 'Mocked method does not exist.' ); } $parameters = $this->parameterGroups[$callIndex]; if (count($invocation->getParameters()) < count($parameters)) { throw new ExpectationFailedException( sprintf( 'Parameter count for invocation %s is too low.', $invocation->toString() ) ); } foreach ($parameters as $i => $parameter) { $parameter->evaluate( $invocation->getParameters()[$i], sprintf( 'Parameter %s for invocation #%d %s does not match expected ' . 'value.', $i, $callIndex, $invocation->toString() ) ); } } } PK!�âB†ððyfile-manager-advanced/application/svg-sanitizer/includes/phpunit/phpunit/src/Framework/MockObject/Rule/ParametersRule.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace PHPUnit\Framework\MockObject\Rule; use PHPUnit\Framework\ExpectationFailedException; use PHPUnit\Framework\MockObject\Invocation as BaseInvocation; use PHPUnit\Framework\MockObject\Verifiable; use PHPUnit\Framework\SelfDescribing; interface ParametersRule extends SelfDescribing, Verifiable { /** * @throws ExpectationFailedException if the invocation violates the rule */ public function apply(BaseInvocation $invocation): void; public function verify(): void; } PK!‰”Qøøyfile-manager-advanced/application/svg-sanitizer/includes/phpunit/phpunit/src/Framework/MockObject/Rule/InvokedAtIndex.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace PHPUnit\Framework\MockObject\Rule; use function sprintf; use PHPUnit\Framework\ExpectationFailedException; use PHPUnit\Framework\MockObject\Invocation as BaseInvocation; /** * @internal This class is not covered by the backward compatibility promise for PHPUnit */ class InvokedAtIndex extends InvocationOrder { /** * @var int */ private $sequenceIndex; /** * @var int */ private $currentIndex = -1; /** * @param int $sequenceIndex */ public function __construct($sequenceIndex) { $this->sequenceIndex = $sequenceIndex; } public function toString(): string { return 'invoked at sequence index ' . $this->sequenceIndex; } public function matches(BaseInvocation $invocation): bool { $this->currentIndex++; return $this->currentIndex == $this->sequenceIndex; } /** * Verifies that the current expectation is valid. If everything is OK the * code should just return, if not it must throw an exception. * * @throws ExpectationFailedException */ public function verify(): void { if ($this->currentIndex < $this->sequenceIndex) { throw new ExpectationFailedException( sprintf( 'The expected invocation at index %s was never reached.', $this->sequenceIndex ) ); } } protected function invokedDo(BaseInvocation $invocation): void { } } PK!�æÂjP P wfile-manager-advanced/application/svg-sanitizer/includes/phpunit/phpunit/src/Framework/MockObject/Rule/InvokedCount.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace PHPUnit\Framework\MockObject\Rule; use function sprintf; use PHPUnit\Framework\ExpectationFailedException; use PHPUnit\Framework\MockObject\Invocation as BaseInvocation; /** * @internal This class is not covered by the backward compatibility promise for PHPUnit */ final class InvokedCount extends InvocationOrder { /** * @var int */ private $expectedCount; /** * @param int $expectedCount */ public function __construct($expectedCount) { $this->expectedCount = $expectedCount; } public function isNever(): bool { return $this->expectedCount === 0; } public function toString(): string { return 'invoked ' . $this->expectedCount . ' time(s)'; } public function matches(BaseInvocation $invocation): bool { return true; } /** * Verifies that the current expectation is valid. If everything is OK the * code should just return, if not it must throw an exception. * * @throws ExpectationFailedException */ public function verify(): void { $count = $this->getInvocationCount(); if ($count !== $this->expectedCount) { throw new ExpectationFailedException( sprintf( 'Method was expected to be called %d times, ' . 'actually called %d times.', $this->expectedCount, $count ) ); } } /** * @throws ExpectationFailedException */ protected function invokedDo(BaseInvocation $invocation): void { $count = $this->getInvocationCount(); if ($count > $this->expectedCount) { $message = $invocation->toString() . ' '; switch ($this->expectedCount) { case 0: $message .= 'was not expected to be called.'; break; case 1: $message .= 'was not expected to be called more than once.'; break; default: $message .= sprintf( 'was not expected to be called more than %d times.', $this->expectedCount ); } throw new ExpectationFailedException($message); } } } PK!ðÚ;ÀÖÖxfile-manager-advanced/application/svg-sanitizer/includes/phpunit/phpunit/src/Framework/MockObject/Rule/AnyParameters.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace PHPUnit\Framework\MockObject\Rule; use PHPUnit\Framework\MockObject\Invocation as BaseInvocation; /** * @internal This class is not covered by the backward compatibility promise for PHPUnit */ final class AnyParameters implements ParametersRule { public function toString(): string { return 'with any parameters'; } public function apply(BaseInvocation $invocation): void { } public function verify(): void { } } PK!™ÔÖÈÊÊzfile-manager-advanced/application/svg-sanitizer/includes/phpunit/phpunit/src/Framework/MockObject/Rule/InvocationOrder.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace PHPUnit\Framework\MockObject\Rule; use function count; use PHPUnit\Framework\MockObject\Invocation as BaseInvocation; use PHPUnit\Framework\MockObject\Verifiable; use PHPUnit\Framework\SelfDescribing; /** * @internal This class is not covered by the backward compatibility promise for PHPUnit */ abstract class InvocationOrder implements SelfDescribing, Verifiable { /** * @var BaseInvocation[] */ private $invocations = []; public function getInvocationCount(): int { return count($this->invocations); } public function hasBeenInvoked(): bool { return count($this->invocations) > 0; } final public function invoked(BaseInvocation $invocation) { $this->invocations[] = $invocation; return $this->invokedDo($invocation); } abstract public function matches(BaseInvocation $invocation): bool; abstract protected function invokedDo(BaseInvocation $invocation); } PK!žW¨Y&&}file-manager-advanced/application/svg-sanitizer/includes/phpunit/phpunit/src/Framework/MockObject/Rule/InvokedAtLeastOnce.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace PHPUnit\Framework\MockObject\Rule; use PHPUnit\Framework\ExpectationFailedException; use PHPUnit\Framework\MockObject\Invocation as BaseInvocation; /** * @internal This class is not covered by the backward compatibility promise for PHPUnit */ final class InvokedAtLeastOnce extends InvocationOrder { public function toString(): string { return 'invoked at least once'; } /** * Verifies that the current expectation is valid. If everything is OK the * code should just return, if not it must throw an exception. * * @throws ExpectationFailedException */ public function verify(): void { $count = $this->getInvocationCount(); if ($count < 1) { throw new ExpectationFailedException( 'Expected invocation at least once but it never occurred.' ); } } public function matches(BaseInvocation $invocation): bool { return true; } protected function invokedDo(BaseInvocation $invocation): void { } } PK!–4¬Ñufile-manager-advanced/application/svg-sanitizer/includes/phpunit/phpunit/src/Framework/MockObject/Rule/MethodName.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace PHPUnit\Framework\MockObject\Rule; use function is_string; use PHPUnit\Framework\Constraint\Constraint; use PHPUnit\Framework\ExpectationFailedException; use PHPUnit\Framework\InvalidArgumentException; use PHPUnit\Framework\MockObject\Invocation as BaseInvocation; use PHPUnit\Framework\MockObject\MethodNameConstraint; /** * @internal This class is not covered by the backward compatibility promise for PHPUnit */ final class MethodName { /** * @var Constraint */ private $constraint; /** * @param Constraint|string $constraint * * @throws InvalidArgumentException */ public function __construct($constraint) { if (is_string($constraint)) { $constraint = new MethodNameConstraint($constraint); } if (!$constraint instanceof Constraint) { throw InvalidArgumentException::create(1, 'PHPUnit\Framework\Constraint\Constraint object or string'); } $this->constraint = $constraint; } public function toString(): string { return 'method name ' . $this->constraint->toString(); } /** * @throws \SebastianBergmann\RecursionContext\InvalidArgumentException * @throws ExpectationFailedException */ public function matches(BaseInvocation $invocation): bool { return $this->matchesName($invocation->getMethodName()); } public function matchesName(string $methodName): bool { return $this->constraint->evaluate($methodName, '', true); } } PK!³�¬V,,ufile-manager-advanced/application/svg-sanitizer/includes/phpunit/phpunit/src/Framework/MockObject/Rule/Parameters.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace PHPUnit\Framework\MockObject\Rule; use function count; use function get_class; use function sprintf; use Exception; use PHPUnit\Framework\Constraint\Constraint; use PHPUnit\Framework\Constraint\IsAnything; use PHPUnit\Framework\Constraint\IsEqual; use PHPUnit\Framework\ExpectationFailedException; use PHPUnit\Framework\MockObject\Invocation as BaseInvocation; use SebastianBergmann\RecursionContext\InvalidArgumentException; /** * @internal This class is not covered by the backward compatibility promise for PHPUnit */ final class Parameters implements ParametersRule { /** * @var Constraint[] */ private $parameters = []; /** * @var BaseInvocation */ private $invocation; /** * @var bool|ExpectationFailedException */ private $parameterVerificationResult; /** * @throws \PHPUnit\Framework\Exception */ public function __construct(array $parameters) { foreach ($parameters as $parameter) { if (!($parameter instanceof Constraint)) { $parameter = new IsEqual( $parameter ); } $this->parameters[] = $parameter; } } public function toString(): string { $text = 'with parameter'; foreach ($this->parameters as $index => $parameter) { if ($index > 0) { $text .= ' and'; } $text .= ' ' . $index . ' ' . $parameter->toString(); } return $text; } /** * @throws Exception */ public function apply(BaseInvocation $invocation): void { $this->invocation = $invocation; $this->parameterVerificationResult = null; try { $this->parameterVerificationResult = $this->doVerify(); } catch (ExpectationFailedException $e) { $this->parameterVerificationResult = $e; throw $this->parameterVerificationResult; } } /** * Checks if the invocation $invocation matches the current rules. If it * does the rule will get the invoked() method called which should check * if an expectation is met. * * @throws ExpectationFailedException * @throws InvalidArgumentException */ public function verify(): void { $this->doVerify(); } /** * @throws ExpectationFailedException * @throws InvalidArgumentException */ private function doVerify(): bool { if (isset($this->parameterVerificationResult)) { return $this->guardAgainstDuplicateEvaluationOfParameterConstraints(); } if ($this->invocation === null) { throw new ExpectationFailedException('Mocked method does not exist.'); } if (count($this->invocation->getParameters()) < count($this->parameters)) { $message = 'Parameter count for invocation %s is too low.'; // The user called `->with($this->anything())`, but may have meant // `->withAnyParameters()`. // // @see https://github.com/sebastianbergmann/phpunit-mock-objects/issues/199 if (count($this->parameters) === 1 && get_class($this->parameters[0]) === IsAnything::class) { $message .= "\nTo allow 0 or more parameters with any value, omit ->with() or use ->withAnyParameters() instead."; } throw new ExpectationFailedException( sprintf($message, $this->invocation->toString()) ); } foreach ($this->parameters as $i => $parameter) { $parameter->evaluate( $this->invocation->getParameters()[$i], sprintf( 'Parameter %s for invocation %s does not match expected ' . 'value.', $i, $this->invocation->toString() ) ); } return true; } /** * @throws ExpectationFailedException */ private function guardAgainstDuplicateEvaluationOfParameterConstraints(): bool { if ($this->parameterVerificationResult instanceof ExpectationFailedException) { throw $this->parameterVerificationResult; } return (bool) $this->parameterVerificationResult; } } PK!MפDDzfile-manager-advanced/application/svg-sanitizer/includes/phpunit/phpunit/src/Framework/MockObject/Rule/AnyInvokedCount.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace PHPUnit\Framework\MockObject\Rule; use PHPUnit\Framework\MockObject\Invocation as BaseInvocation; /** * @internal This class is not covered by the backward compatibility promise for PHPUnit */ final class AnyInvokedCount extends InvocationOrder { public function toString(): string { return 'invoked zero or more times'; } public function verify(): void { } public function matches(BaseInvocation $invocation): bool { return true; } protected function invokedDo(BaseInvocation $invocation): void { } } PK!¹ól––}file-manager-advanced/application/svg-sanitizer/includes/phpunit/phpunit/src/Framework/MockObject/Rule/InvokedAtMostCount.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace PHPUnit\Framework\MockObject\Rule; use PHPUnit\Framework\ExpectationFailedException; use PHPUnit\Framework\MockObject\Invocation as BaseInvocation; /** * @internal This class is not covered by the backward compatibility promise for PHPUnit */ final class InvokedAtMostCount extends InvocationOrder { /** * @var int */ private $allowedInvocations; /** * @param int $allowedInvocations */ public function __construct($allowedInvocations) { $this->allowedInvocations = $allowedInvocations; } public function toString(): string { return 'invoked at most ' . $this->allowedInvocations . ' times'; } /** * Verifies that the current expectation is valid. If everything is OK the * code should just return, if not it must throw an exception. * * @throws ExpectationFailedException */ public function verify(): void { $count = $this->getInvocationCount(); if ($count > $this->allowedInvocations) { throw new ExpectationFailedException( 'Expected invocation at most ' . $this->allowedInvocations . ' times but it occurred ' . $count . ' time(s).' ); } } public function matches(BaseInvocation $invocation): bool { return true; } protected function invokedDo(BaseInvocation $invocation): void { } } PK!WY‚_file-manager-advanced/application/svg-sanitizer/includes/phpunit/phpunit/src/Framework/Test.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace PHPUnit\Framework; use Countable; /** * A Test can be run and collect its results. */ interface Test extends Countable { /** * Runs a test and collects its result in a TestResult instance. */ public function run(?TestResult $result = null): TestResult; } PK!(3ìE¬¬Zfile-manager-advanced/application/svg-sanitizer/includes/phpunit/phpunit/src/Exception.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace PHPUnit; use Throwable; /** * @internal This class is not covered by the backward compatibility promise for PHPUnit */ interface Exception extends Throwable { } PK!ºáÒWXXRfile-manager-advanced/application/svg-sanitizer/includes/phpunit/phpunit/README.mdnu„[µü¤# PHPUnit [![Latest Stable Version](https://poser.pugx.org/phpunit/phpunit/v)](https://packagist.org/packages/phpunit/phpunit) [![CI Status](https://github.com/sebastianbergmann/phpunit/workflows/CI/badge.svg)](https://github.com/sebastianbergmann/phpunit/actions) [![codecov](https://codecov.io/gh/sebastianbergmann/phpunit/branch/8.5/graph/badge.svg)](https://codecov.io/gh/sebastianbergmann/phpunit) PHPUnit is a programmer-oriented testing framework for PHP. It is an instance of the xUnit architecture for unit testing frameworks. ## Installation We distribute a [PHP Archive (PHAR)](https://php.net/phar) that has all required (as well as some optional) dependencies of PHPUnit bundled in a single file: ```bash $ wget https://phar.phpunit.de/phpunit-X.Y.phar $ php phpunit-X.Y.phar --version ``` Please replace `X.Y` with the version of PHPUnit you are interested in. Alternatively, you may use [Composer](https://getcomposer.org/) to download and install PHPUnit as well as its dependencies. Please refer to the [documentation](https://phpunit.de/documentation.html) for details on how to install PHPUnit. ## Contribute Please refer to [CONTRIBUTING.md](https://github.com/sebastianbergmann/phpunit/blob/main/.github/CONTRIBUTING.md) for information on how to contribute to PHPUnit and its related projects. ## List of Contributors Thanks to everyone who has contributed to PHPUnit! You can find a detailed list of contributors on every PHPUnit related package on GitHub. This list shows only the major components: * [PHPUnit](https://github.com/sebastianbergmann/phpunit/graphs/contributors) * [php-code-coverage](https://github.com/sebastianbergmann/php-code-coverage/graphs/contributors) A very special thanks to everyone who has contributed to the [documentation](https://github.com/sebastianbergmann/phpunit-documentation-english/graphs/contributors). PK!ßikûûPfile-manager-advanced/application/svg-sanitizer/includes/phpunit/phpunit/LICENSEnu„[µü¤BSD 3-Clause License Copyright (c) 2001-2024, Sebastian Bergmann All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. PK!2A[­ÓBÓBTfile-manager-advanced/application/svg-sanitizer/includes/phpunit/phpunit/phpunit.xsdnu„[µü¤ This Schema file defines the rules by which the XML configuration file of PHPUnit 8.5 may be structured. Root Element The main type specifying the document structure PK!hŒÑÒ& & Pfile-manager-advanced/application/svg-sanitizer/includes/phpunit/phpunit/phpunitnu„[µü¤#!/usr/bin/env php * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ if (!version_compare(PHP_VERSION, PHP_VERSION, '=')) { fwrite( STDERR, sprintf( '%s declares an invalid value for PHP_VERSION.' . PHP_EOL . 'This breaks fundamental functionality such as version_compare().' . PHP_EOL . 'Please use a different PHP interpreter.' . PHP_EOL, PHP_BINARY ) ); die(1); } if (version_compare('7.2.0', PHP_VERSION, '>')) { fwrite( STDERR, sprintf( 'This version of PHPUnit requires PHP >= 7.2.' . PHP_EOL . 'You are using PHP %s (%s).' . PHP_EOL, PHP_VERSION, PHP_BINARY ) ); die(1); } foreach (['dom', 'json', 'libxml', 'mbstring', 'tokenizer', 'xml', 'xmlwriter'] as $extension) { if (extension_loaded($extension)) { continue; } fwrite( STDERR, sprintf( 'PHPUnit requires the "%s" extension.' . PHP_EOL, $extension ) ); die(1); } if (!ini_get('date.timezone')) { ini_set('date.timezone', 'UTC'); } if (isset($GLOBALS['_composer_autoload_path'])) { define('PHPUNIT_COMPOSER_INSTALL', $GLOBALS['_composer_autoload_path']); unset($GLOBALS['_composer_autoload_path']); } else { foreach (array(__DIR__ . '/../../autoload.php', __DIR__ . '/../vendor/autoload.php', __DIR__ . '/vendor/autoload.php') as $file) { if (file_exists($file)) { define('PHPUNIT_COMPOSER_INSTALL', $file); break; } } unset($file); } if (!defined('PHPUNIT_COMPOSER_INSTALL')) { fwrite( STDERR, 'You need to set up the project dependencies using Composer:' . PHP_EOL . PHP_EOL . ' composer install' . PHP_EOL . PHP_EOL . 'You can learn all about Composer on https://getcomposer.org/.' . PHP_EOL ); die(1); } $options = getopt('', array('prepend:')); if (isset($options['prepend'])) { require $options['prepend']; } unset($options); require PHPUNIT_COMPOSER_INSTALL; PHPUnit\TextUI\Command::main(); PK!¾\XÌ ¾ ¾Vfile-manager-advanced/application/svg-sanitizer/includes/phpunit/phpunit/composer.locknu„[µü¤{ "_readme": [ "This file locks the dependencies of your project to a known state", "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], "content-hash": "f19db84218d192790d6cc390ee1136e9", "packages": [ { "name": "doctrine/instantiator", "version": "1.5.0", "source": { "type": "git", "url": "https://github.com/doctrine/instantiator.git", "reference": "0a0fa9780f5d4e507415a065172d26a98d02047b" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/doctrine/instantiator/zipball/0a0fa9780f5d4e507415a065172d26a98d02047b", "reference": "0a0fa9780f5d4e507415a065172d26a98d02047b", "shasum": "" }, "require": { "php": "^7.1 || ^8.0" }, "require-dev": { "doctrine/coding-standard": "^9 || ^11", "ext-pdo": "*", "ext-phar": "*", "phpbench/phpbench": "^0.16 || ^1", "phpstan/phpstan": "^1.4", "phpstan/phpstan-phpunit": "^1", "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", "vimeo/psalm": "^4.30 || ^5.4" }, "type": "library", "autoload": { "psr-4": { "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/" } }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], "authors": [ { "name": "Marco Pivetta", "email": "ocramius@gmail.com", "homepage": "https://ocramius.github.io/" } ], "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", "homepage": "https://www.doctrine-project.org/projects/instantiator.html", "keywords": [ "constructor", "instantiate" ], "support": { "issues": "https://github.com/doctrine/instantiator/issues", "source": "https://github.com/doctrine/instantiator/tree/1.5.0" }, "funding": [ { "url": "https://www.doctrine-project.org/sponsorship.html", "type": "custom" }, { "url": "https://www.patreon.com/phpdoctrine", "type": "patreon" }, { "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finstantiator", "type": "tidelift" } ], "time": "2022-12-30T00:15:36+00:00" }, { "name": "myclabs/deep-copy", "version": "1.12.1", "source": { "type": "git", "url": "https://github.com/myclabs/DeepCopy.git", "reference": "123267b2c49fbf30d78a7b2d333f6be754b94845" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/123267b2c49fbf30d78a7b2d333f6be754b94845", "reference": "123267b2c49fbf30d78a7b2d333f6be754b94845", "shasum": "" }, "require": { "php": "^7.1 || ^8.0" }, "conflict": { "doctrine/collections": "<1.6.8", "doctrine/common": "<2.13.3 || >=3 <3.2.2" }, "require-dev": { "doctrine/collections": "^1.6.8", "doctrine/common": "^2.13.3 || ^3.2.2", "phpspec/prophecy": "^1.10", "phpunit/phpunit": "^7.5.20 || ^8.5.23 || ^9.5.13" }, "type": "library", "autoload": { "files": [ "src/DeepCopy/deep_copy.php" ], "psr-4": { "DeepCopy\\": "src/DeepCopy/" } }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], "description": "Create deep copies (clones) of your objects", "keywords": [ "clone", "copy", "duplicate", "object", "object graph" ], "support": { "issues": "https://github.com/myclabs/DeepCopy/issues", "source": "https://github.com/myclabs/DeepCopy/tree/1.12.1" }, "funding": [ { "url": "https://tidelift.com/funding/github/packagist/myclabs/deep-copy", "type": "tidelift" } ], "time": "2024-11-08T17:47:46+00:00" }, { "name": "phar-io/manifest", "version": "2.0.4", "source": { "type": "git", "url": "https://github.com/phar-io/manifest.git", "reference": "54750ef60c58e43759730615a392c31c80e23176" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/phar-io/manifest/zipball/54750ef60c58e43759730615a392c31c80e23176", "reference": "54750ef60c58e43759730615a392c31c80e23176", "shasum": "" }, "require": { "ext-dom": "*", "ext-libxml": "*", "ext-phar": "*", "ext-xmlwriter": "*", "phar-io/version": "^3.0.1", "php": "^7.2 || ^8.0" }, "type": "library", "extra": { "branch-alias": { "dev-master": "2.0.x-dev" } }, "autoload": { "classmap": [ "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "BSD-3-Clause" ], "authors": [ { "name": "Arne Blankerts", "email": "arne@blankerts.de", "role": "Developer" }, { "name": "Sebastian Heuer", "email": "sebastian@phpeople.de", "role": "Developer" }, { "name": "Sebastian Bergmann", "email": "sebastian@phpunit.de", "role": "Developer" } ], "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)", "support": { "issues": "https://github.com/phar-io/manifest/issues", "source": "https://github.com/phar-io/manifest/tree/2.0.4" }, "funding": [ { "url": "https://github.com/theseer", "type": "github" } ], "time": "2024-03-03T12:33:53+00:00" }, { "name": "phar-io/version", "version": "3.2.1", "source": { "type": "git", "url": "https://github.com/phar-io/version.git", "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/phar-io/version/zipball/4f7fd7836c6f332bb2933569e566a0d6c4cbed74", "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74", "shasum": "" }, "require": { "php": "^7.2 || ^8.0" }, "type": "library", "autoload": { "classmap": [ "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "BSD-3-Clause" ], "authors": [ { "name": "Arne Blankerts", "email": "arne@blankerts.de", "role": "Developer" }, { "name": "Sebastian Heuer", "email": "sebastian@phpeople.de", "role": "Developer" }, { "name": "Sebastian Bergmann", "email": "sebastian@phpunit.de", "role": "Developer" } ], "description": "Library for handling version information and constraints", "support": { "issues": "https://github.com/phar-io/version/issues", "source": "https://github.com/phar-io/version/tree/3.2.1" }, "time": "2022-02-21T01:04:05+00:00" }, { "name": "phpunit/php-code-coverage", "version": "7.0.17", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-code-coverage.git", "reference": "40a4ed114a4aea5afd6df8d0f0c9cd3033097f66" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/40a4ed114a4aea5afd6df8d0f0c9cd3033097f66", "reference": "40a4ed114a4aea5afd6df8d0f0c9cd3033097f66", "shasum": "" }, "require": { "ext-dom": "*", "ext-xmlwriter": "*", "php": ">=7.2", "phpunit/php-file-iterator": "^2.0.2", "phpunit/php-text-template": "^1.2.1", "phpunit/php-token-stream": "^3.1.3 || ^4.0", "sebastian/code-unit-reverse-lookup": "^1.0.1", "sebastian/environment": "^4.2.2", "sebastian/version": "^2.0.1", "theseer/tokenizer": "^1.1.3" }, "require-dev": { "phpunit/phpunit": "^8.2.2" }, "suggest": { "ext-xdebug": "^2.7.2" }, "type": "library", "extra": { "branch-alias": { "dev-master": "7.0-dev" } }, "autoload": { "classmap": [ "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "BSD-3-Clause" ], "authors": [ { "name": "Sebastian Bergmann", "email": "sebastian@phpunit.de", "role": "lead" } ], "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.", "homepage": "https://github.com/sebastianbergmann/php-code-coverage", "keywords": [ "coverage", "testing", "xunit" ], "support": { "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/7.0.17" }, "funding": [ { "url": "https://github.com/sebastianbergmann", "type": "github" } ], "time": "2024-03-02T06:09:37+00:00" }, { "name": "phpunit/php-file-iterator", "version": "2.0.6", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-file-iterator.git", "reference": "69deeb8664f611f156a924154985fbd4911eb36b" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/69deeb8664f611f156a924154985fbd4911eb36b", "reference": "69deeb8664f611f156a924154985fbd4911eb36b", "shasum": "" }, "require": { "php": ">=7.1" }, "require-dev": { "phpunit/phpunit": "^8.5" }, "type": "library", "extra": { "branch-alias": { "dev-master": "2.0.x-dev" } }, "autoload": { "classmap": [ "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "BSD-3-Clause" ], "authors": [ { "name": "Sebastian Bergmann", "email": "sebastian@phpunit.de", "role": "lead" } ], "description": "FilterIterator implementation that filters files based on a list of suffixes.", "homepage": "https://github.com/sebastianbergmann/php-file-iterator/", "keywords": [ "filesystem", "iterator" ], "support": { "issues": "https://github.com/sebastianbergmann/php-file-iterator/issues", "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/2.0.6" }, "funding": [ { "url": "https://github.com/sebastianbergmann", "type": "github" } ], "time": "2024-03-01T13:39:50+00:00" }, { "name": "phpunit/php-text-template", "version": "1.2.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-text-template.git", "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/31f8b717e51d9a2afca6c9f046f5d69fc27c8686", "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686", "shasum": "" }, "require": { "php": ">=5.3.3" }, "type": "library", "autoload": { "classmap": [ "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "BSD-3-Clause" ], "authors": [ { "name": "Sebastian Bergmann", "email": "sebastian@phpunit.de", "role": "lead" } ], "description": "Simple template engine.", "homepage": "https://github.com/sebastianbergmann/php-text-template/", "keywords": [ "template" ], "support": { "issues": "https://github.com/sebastianbergmann/php-text-template/issues", "source": "https://github.com/sebastianbergmann/php-text-template/tree/1.2.1" }, "time": "2015-06-21T13:50:34+00:00" }, { "name": "phpunit/php-timer", "version": "2.1.4", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-timer.git", "reference": "a691211e94ff39a34811abd521c31bd5b305b0bb" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/a691211e94ff39a34811abd521c31bd5b305b0bb", "reference": "a691211e94ff39a34811abd521c31bd5b305b0bb", "shasum": "" }, "require": { "php": ">=7.1" }, "require-dev": { "phpunit/phpunit": "^8.5" }, "type": "library", "extra": { "branch-alias": { "dev-master": "2.1-dev" } }, "autoload": { "classmap": [ "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "BSD-3-Clause" ], "authors": [ { "name": "Sebastian Bergmann", "email": "sebastian@phpunit.de", "role": "lead" } ], "description": "Utility class for timing", "homepage": "https://github.com/sebastianbergmann/php-timer/", "keywords": [ "timer" ], "support": { "issues": "https://github.com/sebastianbergmann/php-timer/issues", "source": "https://github.com/sebastianbergmann/php-timer/tree/2.1.4" }, "funding": [ { "url": "https://github.com/sebastianbergmann", "type": "github" } ], "time": "2024-03-01T13:42:41+00:00" }, { "name": "phpunit/php-token-stream", "version": "3.1.3", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-token-stream.git", "reference": "9c1da83261628cb24b6a6df371b6e312b3954768" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/9c1da83261628cb24b6a6df371b6e312b3954768", "reference": "9c1da83261628cb24b6a6df371b6e312b3954768", "shasum": "" }, "require": { "ext-tokenizer": "*", "php": ">=7.1" }, "require-dev": { "phpunit/phpunit": "^7.0" }, "type": "library", "extra": { "branch-alias": { "dev-master": "3.1-dev" } }, "autoload": { "classmap": [ "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "BSD-3-Clause" ], "authors": [ { "name": "Sebastian Bergmann", "email": "sebastian@phpunit.de" } ], "description": "Wrapper around PHP's tokenizer extension.", "homepage": "https://github.com/sebastianbergmann/php-token-stream/", "keywords": [ "tokenizer" ], "support": { "issues": "https://github.com/sebastianbergmann/php-token-stream/issues", "source": "https://github.com/sebastianbergmann/php-token-stream/tree/3.1.3" }, "funding": [ { "url": "https://github.com/sebastianbergmann", "type": "github" } ], "abandoned": true, "time": "2021-07-26T12:15:06+00:00" }, { "name": "sebastian/code-unit-reverse-lookup", "version": "1.0.3", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", "reference": "92a1a52e86d34cde6caa54f1b5ffa9fda18e5d54" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/92a1a52e86d34cde6caa54f1b5ffa9fda18e5d54", "reference": "92a1a52e86d34cde6caa54f1b5ffa9fda18e5d54", "shasum": "" }, "require": { "php": ">=5.6" }, "require-dev": { "phpunit/phpunit": "^8.5" }, "type": "library", "extra": { "branch-alias": { "dev-master": "1.0.x-dev" } }, "autoload": { "classmap": [ "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "BSD-3-Clause" ], "authors": [ { "name": "Sebastian Bergmann", "email": "sebastian@phpunit.de" } ], "description": "Looks up which function or method a line of code belongs to", "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/", "support": { "issues": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/issues", "source": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/tree/1.0.3" }, "funding": [ { "url": "https://github.com/sebastianbergmann", "type": "github" } ], "time": "2024-03-01T13:45:45+00:00" }, { "name": "sebastian/comparator", "version": "3.0.5", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/comparator.git", "reference": "1dc7ceb4a24aede938c7af2a9ed1de09609ca770" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/1dc7ceb4a24aede938c7af2a9ed1de09609ca770", "reference": "1dc7ceb4a24aede938c7af2a9ed1de09609ca770", "shasum": "" }, "require": { "php": ">=7.1", "sebastian/diff": "^3.0", "sebastian/exporter": "^3.1" }, "require-dev": { "phpunit/phpunit": "^8.5" }, "type": "library", "extra": { "branch-alias": { "dev-master": "3.0-dev" } }, "autoload": { "classmap": [ "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "BSD-3-Clause" ], "authors": [ { "name": "Sebastian Bergmann", "email": "sebastian@phpunit.de" }, { "name": "Jeff Welch", "email": "whatthejeff@gmail.com" }, { "name": "Volker Dusch", "email": "github@wallbash.com" }, { "name": "Bernhard Schussek", "email": "bschussek@2bepublished.at" } ], "description": "Provides the functionality to compare PHP values for equality", "homepage": "https://github.com/sebastianbergmann/comparator", "keywords": [ "comparator", "compare", "equality" ], "support": { "issues": "https://github.com/sebastianbergmann/comparator/issues", "source": "https://github.com/sebastianbergmann/comparator/tree/3.0.5" }, "funding": [ { "url": "https://github.com/sebastianbergmann", "type": "github" } ], "time": "2022-09-14T12:31:48+00:00" }, { "name": "sebastian/diff", "version": "3.0.6", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/diff.git", "reference": "98ff311ca519c3aa73ccd3de053bdb377171d7b6" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/98ff311ca519c3aa73ccd3de053bdb377171d7b6", "reference": "98ff311ca519c3aa73ccd3de053bdb377171d7b6", "shasum": "" }, "require": { "php": ">=7.1" }, "require-dev": { "phpunit/phpunit": "^7.5 || ^8.0", "symfony/process": "^2 || ^3.3 || ^4" }, "type": "library", "extra": { "branch-alias": { "dev-master": "3.0-dev" } }, "autoload": { "classmap": [ "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "BSD-3-Clause" ], "authors": [ { "name": "Sebastian Bergmann", "email": "sebastian@phpunit.de" }, { "name": "Kore Nordmann", "email": "mail@kore-nordmann.de" } ], "description": "Diff implementation", "homepage": "https://github.com/sebastianbergmann/diff", "keywords": [ "diff", "udiff", "unidiff", "unified diff" ], "support": { "issues": "https://github.com/sebastianbergmann/diff/issues", "source": "https://github.com/sebastianbergmann/diff/tree/3.0.6" }, "funding": [ { "url": "https://github.com/sebastianbergmann", "type": "github" } ], "time": "2024-03-02T06:16:36+00:00" }, { "name": "sebastian/environment", "version": "4.2.5", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/environment.git", "reference": "56932f6049a0482853056ffd617c91ffcc754205" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/56932f6049a0482853056ffd617c91ffcc754205", "reference": "56932f6049a0482853056ffd617c91ffcc754205", "shasum": "" }, "require": { "php": ">=7.1" }, "require-dev": { "phpunit/phpunit": "^7.5" }, "suggest": { "ext-posix": "*" }, "type": "library", "extra": { "branch-alias": { "dev-master": "4.2-dev" } }, "autoload": { "classmap": [ "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "BSD-3-Clause" ], "authors": [ { "name": "Sebastian Bergmann", "email": "sebastian@phpunit.de" } ], "description": "Provides functionality to handle HHVM/PHP environments", "homepage": "http://www.github.com/sebastianbergmann/environment", "keywords": [ "Xdebug", "environment", "hhvm" ], "support": { "issues": "https://github.com/sebastianbergmann/environment/issues", "source": "https://github.com/sebastianbergmann/environment/tree/4.2.5" }, "funding": [ { "url": "https://github.com/sebastianbergmann", "type": "github" } ], "time": "2024-03-01T13:49:59+00:00" }, { "name": "sebastian/exporter", "version": "3.1.6", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/exporter.git", "reference": "1939bc8fd1d39adcfa88c5b35335910869214c56" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/1939bc8fd1d39adcfa88c5b35335910869214c56", "reference": "1939bc8fd1d39adcfa88c5b35335910869214c56", "shasum": "" }, "require": { "php": ">=7.2", "sebastian/recursion-context": "^3.0" }, "require-dev": { "ext-mbstring": "*", "phpunit/phpunit": "^8.5" }, "type": "library", "extra": { "branch-alias": { "dev-master": "3.1.x-dev" } }, "autoload": { "classmap": [ "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "BSD-3-Clause" ], "authors": [ { "name": "Sebastian Bergmann", "email": "sebastian@phpunit.de" }, { "name": "Jeff Welch", "email": "whatthejeff@gmail.com" }, { "name": "Volker Dusch", "email": "github@wallbash.com" }, { "name": "Adam Harvey", "email": "aharvey@php.net" }, { "name": "Bernhard Schussek", "email": "bschussek@gmail.com" } ], "description": "Provides the functionality to export PHP variables for visualization", "homepage": "http://www.github.com/sebastianbergmann/exporter", "keywords": [ "export", "exporter" ], "support": { "issues": "https://github.com/sebastianbergmann/exporter/issues", "source": "https://github.com/sebastianbergmann/exporter/tree/3.1.6" }, "funding": [ { "url": "https://github.com/sebastianbergmann", "type": "github" } ], "time": "2024-03-02T06:21:38+00:00" }, { "name": "sebastian/global-state", "version": "3.0.5", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/global-state.git", "reference": "91c7c47047a971f02de57ed6f040087ef110c5d9" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/91c7c47047a971f02de57ed6f040087ef110c5d9", "reference": "91c7c47047a971f02de57ed6f040087ef110c5d9", "shasum": "" }, "require": { "php": ">=7.2", "sebastian/object-reflector": "^1.1.1", "sebastian/recursion-context": "^3.0" }, "require-dev": { "ext-dom": "*", "phpunit/phpunit": "^8.0" }, "suggest": { "ext-uopz": "*" }, "type": "library", "extra": { "branch-alias": { "dev-master": "3.0-dev" } }, "autoload": { "classmap": [ "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "BSD-3-Clause" ], "authors": [ { "name": "Sebastian Bergmann", "email": "sebastian@phpunit.de" } ], "description": "Snapshotting of global state", "homepage": "http://www.github.com/sebastianbergmann/global-state", "keywords": [ "global state" ], "support": { "issues": "https://github.com/sebastianbergmann/global-state/issues", "source": "https://github.com/sebastianbergmann/global-state/tree/3.0.5" }, "funding": [ { "url": "https://github.com/sebastianbergmann", "type": "github" } ], "time": "2024-03-02T06:13:16+00:00" }, { "name": "sebastian/object-enumerator", "version": "3.0.5", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/object-enumerator.git", "reference": "ac5b293dba925751b808e02923399fb44ff0d541" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/ac5b293dba925751b808e02923399fb44ff0d541", "reference": "ac5b293dba925751b808e02923399fb44ff0d541", "shasum": "" }, "require": { "php": ">=7.0", "sebastian/object-reflector": "^1.1.1", "sebastian/recursion-context": "^3.0" }, "require-dev": { "phpunit/phpunit": "^6.0" }, "type": "library", "extra": { "branch-alias": { "dev-master": "3.0.x-dev" } }, "autoload": { "classmap": [ "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "BSD-3-Clause" ], "authors": [ { "name": "Sebastian Bergmann", "email": "sebastian@phpunit.de" } ], "description": "Traverses array structures and object graphs to enumerate all referenced objects", "homepage": "https://github.com/sebastianbergmann/object-enumerator/", "support": { "issues": "https://github.com/sebastianbergmann/object-enumerator/issues", "source": "https://github.com/sebastianbergmann/object-enumerator/tree/3.0.5" }, "funding": [ { "url": "https://github.com/sebastianbergmann", "type": "github" } ], "time": "2024-03-01T13:54:02+00:00" }, { "name": "sebastian/object-reflector", "version": "1.1.3", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/object-reflector.git", "reference": "1d439c229e61f244ff1f211e5c99737f90c67def" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/1d439c229e61f244ff1f211e5c99737f90c67def", "reference": "1d439c229e61f244ff1f211e5c99737f90c67def", "shasum": "" }, "require": { "php": ">=7.0" }, "require-dev": { "phpunit/phpunit": "^6.0" }, "type": "library", "extra": { "branch-alias": { "dev-master": "1.1-dev" } }, "autoload": { "classmap": [ "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "BSD-3-Clause" ], "authors": [ { "name": "Sebastian Bergmann", "email": "sebastian@phpunit.de" } ], "description": "Allows reflection of object attributes, including inherited and non-public ones", "homepage": "https://github.com/sebastianbergmann/object-reflector/", "support": { "issues": "https://github.com/sebastianbergmann/object-reflector/issues", "source": "https://github.com/sebastianbergmann/object-reflector/tree/1.1.3" }, "funding": [ { "url": "https://github.com/sebastianbergmann", "type": "github" } ], "time": "2024-03-01T13:56:04+00:00" }, { "name": "sebastian/recursion-context", "version": "3.0.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/recursion-context.git", "reference": "9bfd3c6f1f08c026f542032dfb42813544f7d64c" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/9bfd3c6f1f08c026f542032dfb42813544f7d64c", "reference": "9bfd3c6f1f08c026f542032dfb42813544f7d64c", "shasum": "" }, "require": { "php": ">=7.0" }, "require-dev": { "phpunit/phpunit": "^6.0" }, "type": "library", "extra": { "branch-alias": { "dev-master": "3.0.x-dev" } }, "autoload": { "classmap": [ "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "BSD-3-Clause" ], "authors": [ { "name": "Sebastian Bergmann", "email": "sebastian@phpunit.de" }, { "name": "Jeff Welch", "email": "whatthejeff@gmail.com" }, { "name": "Adam Harvey", "email": "aharvey@php.net" } ], "description": "Provides functionality to recursively process PHP variables", "homepage": "http://www.github.com/sebastianbergmann/recursion-context", "support": { "issues": "https://github.com/sebastianbergmann/recursion-context/issues", "source": "https://github.com/sebastianbergmann/recursion-context/tree/3.0.2" }, "funding": [ { "url": "https://github.com/sebastianbergmann", "type": "github" } ], "time": "2024-03-01T14:07:30+00:00" }, { "name": "sebastian/resource-operations", "version": "2.0.3", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/resource-operations.git", "reference": "72a7f7674d053d548003b16ff5a106e7e0e06eee" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/72a7f7674d053d548003b16ff5a106e7e0e06eee", "reference": "72a7f7674d053d548003b16ff5a106e7e0e06eee", "shasum": "" }, "require": { "php": ">=7.1" }, "type": "library", "extra": { "branch-alias": { "dev-master": "2.0-dev" } }, "autoload": { "classmap": [ "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "BSD-3-Clause" ], "authors": [ { "name": "Sebastian Bergmann", "email": "sebastian@phpunit.de" } ], "description": "Provides a list of PHP built-in functions that operate on resources", "homepage": "https://www.github.com/sebastianbergmann/resource-operations", "support": { "source": "https://github.com/sebastianbergmann/resource-operations/tree/2.0.3" }, "funding": [ { "url": "https://github.com/sebastianbergmann", "type": "github" } ], "time": "2024-03-01T13:59:09+00:00" }, { "name": "sebastian/type", "version": "1.1.5", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/type.git", "reference": "18f071c3a29892b037d35e6b20ddf3ea39b42874" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/18f071c3a29892b037d35e6b20ddf3ea39b42874", "reference": "18f071c3a29892b037d35e6b20ddf3ea39b42874", "shasum": "" }, "require": { "php": ">=7.2" }, "require-dev": { "phpunit/phpunit": "^8.2" }, "type": "library", "extra": { "branch-alias": { "dev-master": "1.1-dev" } }, "autoload": { "classmap": [ "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "BSD-3-Clause" ], "authors": [ { "name": "Sebastian Bergmann", "email": "sebastian@phpunit.de", "role": "lead" } ], "description": "Collection of value objects that represent the types of the PHP type system", "homepage": "https://github.com/sebastianbergmann/type", "support": { "issues": "https://github.com/sebastianbergmann/type/issues", "source": "https://github.com/sebastianbergmann/type/tree/1.1.5" }, "funding": [ { "url": "https://github.com/sebastianbergmann", "type": "github" } ], "time": "2024-03-01T14:04:07+00:00" }, { "name": "sebastian/version", "version": "2.0.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/version.git", "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/99732be0ddb3361e16ad77b68ba41efc8e979019", "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019", "shasum": "" }, "require": { "php": ">=5.6" }, "type": "library", "extra": { "branch-alias": { "dev-master": "2.0.x-dev" } }, "autoload": { "classmap": [ "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "BSD-3-Clause" ], "authors": [ { "name": "Sebastian Bergmann", "email": "sebastian@phpunit.de", "role": "lead" } ], "description": "Library that helps with managing the version number of Git-hosted PHP projects", "homepage": "https://github.com/sebastianbergmann/version", "support": { "issues": "https://github.com/sebastianbergmann/version/issues", "source": "https://github.com/sebastianbergmann/version/tree/master" }, "time": "2016-10-03T07:35:21+00:00" }, { "name": "theseer/tokenizer", "version": "1.2.3", "source": { "type": "git", "url": "https://github.com/theseer/tokenizer.git", "reference": "737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/theseer/tokenizer/zipball/737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2", "reference": "737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2", "shasum": "" }, "require": { "ext-dom": "*", "ext-tokenizer": "*", "ext-xmlwriter": "*", "php": "^7.2 || ^8.0" }, "type": "library", "autoload": { "classmap": [ "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "BSD-3-Clause" ], "authors": [ { "name": "Arne Blankerts", "email": "arne@blankerts.de", "role": "Developer" } ], "description": "A small library for converting tokenized PHP source code into XML and potentially other formats", "support": { "issues": "https://github.com/theseer/tokenizer/issues", "source": "https://github.com/theseer/tokenizer/tree/1.2.3" }, "funding": [ { "url": "https://github.com/theseer", "type": "github" } ], "time": "2024-03-03T12:36:25+00:00" } ], "packages-dev": [], "aliases": [], "minimum-stability": "stable", "stability-flags": {}, "prefer-stable": true, "prefer-lowest": false, "platform": { "php": ">=7.2", "ext-dom": "*", "ext-json": "*", "ext-libxml": "*", "ext-mbstring": "*", "ext-xml": "*", "ext-xmlwriter": "*" }, "platform-dev": {}, "platform-overrides": { "php": "7.2.0" }, "plugin-api-version": "2.6.0" } PK! ùT‡‚‚^file-manager-advanced/application/svg-sanitizer/includes/phpunit/php-code-coverage/phpunit.xmlnu„[µü¤ tests/tests src PK! ˆ·‰RR`file-manager-advanced/application/svg-sanitizer/includes/phpunit/php-code-coverage/composer.jsonnu„[µü¤{ "name": "phpunit/php-code-coverage", "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.", "type": "library", "keywords": [ "coverage", "testing", "xunit" ], "homepage": "https://github.com/sebastianbergmann/php-code-coverage", "license": "BSD-3-Clause", "authors": [ { "name": "Sebastian Bergmann", "email": "sebastian@phpunit.de", "role": "lead" } ], "support": { "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues" }, "config": { "optimize-autoloader": true, "sort-packages": true }, "prefer-stable": true, "require": { "php": ">=7.2", "ext-dom": "*", "ext-xmlwriter": "*", "phpunit/php-file-iterator": "^2.0.2", "phpunit/php-token-stream": "^3.1.3 || ^4.0", "phpunit/php-text-template": "^1.2.1", "sebastian/code-unit-reverse-lookup": "^1.0.1", "sebastian/environment": "^4.2.2", "sebastian/version": "^2.0.1", "theseer/tokenizer": "^1.1.3" }, "require-dev": { "phpunit/phpunit": "^8.2.2" }, "suggest": { "ext-xdebug": "^2.7.2" }, "autoload": { "classmap": [ "src/" ] }, "autoload-dev": { "files": [ "tests/TestCase.php", "tests/_files/BankAccountTest.php" ] }, "extra": { "branch-alias": { "dev-master": "7.0-dev" } } } PK!I‰ì(ÃÃ\file-manager-advanced/application/svg-sanitizer/includes/phpunit/php-code-coverage/phive.xmlnu„[µü¤ PK!æéá_file-manager-advanced/application/svg-sanitizer/includes/phpunit/php-code-coverage/ChangeLog.mdnu„[µü¤# ChangeLog All notable changes are documented in this file using the [Keep a CHANGELOG](http://keepachangelog.com/) principles. ## [7.0.17] - 2024-03-02 ### Changed * Do not use implicitly nullable parameters ## [7.0.16] - 2024-03-01 * No code changes, only updated `.gitattributes` to not export non-essential files. ## [7.0.15] - 2021-07-26 ### Changed * Bumped required version of php-token-stream ## [7.0.14] - 2020-12-02 ### Changed * [#837](https://github.com/sebastianbergmann/php-code-coverage/issues/837): Allow version 4 of php-token-stream ## [7.0.13] - 2020-11-30 ### Changed * Changed PHP version constraint in `composer.json` from `^7.2` to `>=7.2` to allow installation of this version of this library on PHP 8. However, this version of this library does not work on PHP 8. PHPUnit 8.5, which uses this version of this library, does not call into this library and instead shows a message that code coverage functionality is not available for PHPUnit 8.5 on PHP 8. ## [7.0.12] - 2020-11-27 ### Added * [#834](https://github.com/sebastianbergmann/php-code-coverage/issues/834): Support `XDEBUG_MODE` environment variable ## [7.0.11] - 2020-11-27 ### Added * Support for Xdebug 3 ## [7.0.10] - 2019-11-20 ### Fixed * [#710](https://github.com/sebastianbergmann/php-code-coverage/pull/710): Code Coverage does not work in PhpStorm ## [7.0.9] - 2019-11-20 ### Changed * [#709](https://github.com/sebastianbergmann/php-code-coverage/pull/709): Prioritize PCOV over Xdebug ## [7.0.8] - 2019-09-17 ### Changed * Update HTML report Bootstrap 4.3.1, jQuery 3.4.1, and popper.js 1.15.0 ## [7.0.7] - 2019-07-25 ### Changed * Bumped required version of php-token-stream ## [7.0.6] - 2019-07-08 ### Changed * Bumped required version of php-token-stream ## [7.0.5] - 2019-06-06 ### Fixed * [#681](https://github.com/sebastianbergmann/php-code-coverage/pull/681): `use function` statements are not ignored ## [7.0.4] - 2019-05-29 ### Fixed * [#682](https://github.com/sebastianbergmann/php-code-coverage/pull/682): Code that is not executed is reported as being executed when using PCOV ## [7.0.3] - 2019-02-26 ### Fixed * [#671](https://github.com/sebastianbergmann/php-code-coverage/issues/671): `TypeError` when directory name is a number ## [7.0.2] - 2019-02-15 ### Changed * Updated HTML report to Bootstrap 4.3.0 ### Fixed * [#667](https://github.com/sebastianbergmann/php-code-coverage/pull/667): `TypeError` in PHP reporter ## [7.0.1] - 2019-02-01 ### Fixed * [#664](https://github.com/sebastianbergmann/php-code-coverage/issues/664): `TypeError` when whitelisted file does not exist ## [7.0.0] - 2019-02-01 ### Added * Implemented [#663](https://github.com/sebastianbergmann/php-code-coverage/pull/663): Support for PCOV ### Fixed * [#654](https://github.com/sebastianbergmann/php-code-coverage/issues/654): HTML report fails to load assets * [#655](https://github.com/sebastianbergmann/php-code-coverage/issues/655): Popin pops in outside of screen ### Removed * This component is no longer supported on PHP 7.1 ## [6.1.4] - 2018-10-31 ### Fixed * [#650](https://github.com/sebastianbergmann/php-code-coverage/issues/650): Wasted screen space in HTML code coverage report ## [6.1.3] - 2018-10-23 ### Changed * Use `^3.1` of `sebastian/environment` again due to [regression](https://github.com/sebastianbergmann/environment/issues/31) ## [6.1.2] - 2018-10-23 ### Fixed * [#645](https://github.com/sebastianbergmann/php-code-coverage/pull/645): Crash that can occur when php-token-stream parses invalid files ## [6.1.1] - 2018-10-18 ### Changed * This component now allows `^4` of `sebastian/environment` ## [6.1.0] - 2018-10-16 ### Changed * Class names are now abbreviated (unqualified name shown, fully qualified name shown on hover) in the file view of the HTML report * Update HTML report to Bootstrap 4 [7.0.17]: https://github.com/sebastianbergmann/php-code-coverage/compare/7.0.16...7.0.17 [7.0.16]: https://github.com/sebastianbergmann/php-code-coverage/compare/7.0.15...7.0.16 [7.0.15]: https://github.com/sebastianbergmann/php-code-coverage/compare/7.0.14...7.0.15 [7.0.14]: https://github.com/sebastianbergmann/php-code-coverage/compare/7.0.13...7.0.14 [7.0.13]: https://github.com/sebastianbergmann/php-code-coverage/compare/7.0.12...7.0.13 [7.0.12]: https://github.com/sebastianbergmann/php-code-coverage/compare/7.0.11...7.0.12 [7.0.11]: https://github.com/sebastianbergmann/php-code-coverage/compare/7.0.10...7.0.11 [7.0.10]: https://github.com/sebastianbergmann/php-code-coverage/compare/7.0.9...7.0.10 [7.0.9]: https://github.com/sebastianbergmann/php-code-coverage/compare/7.0.8...7.0.9 [7.0.8]: https://github.com/sebastianbergmann/php-code-coverage/compare/7.0.7...7.0.8 [7.0.7]: https://github.com/sebastianbergmann/php-code-coverage/compare/7.0.6...7.0.7 [7.0.6]: https://github.com/sebastianbergmann/php-code-coverage/compare/7.0.5...7.0.6 [7.0.5]: https://github.com/sebastianbergmann/php-code-coverage/compare/7.0.4...7.0.5 [7.0.4]: https://github.com/sebastianbergmann/php-code-coverage/compare/7.0.3...7.0.4 [7.0.3]: https://github.com/sebastianbergmann/php-code-coverage/compare/7.0.2...7.0.3 [7.0.2]: https://github.com/sebastianbergmann/php-code-coverage/compare/7.0.1...7.0.2 [7.0.1]: https://github.com/sebastianbergmann/php-code-coverage/compare/7.0.0...7.0.1 [7.0.0]: https://github.com/sebastianbergmann/php-code-coverage/compare/6.1.4...7.0.0 [6.1.4]: https://github.com/sebastianbergmann/php-code-coverage/compare/6.1.3...6.1.4 [6.1.3]: https://github.com/sebastianbergmann/php-code-coverage/compare/6.1.2...6.1.3 [6.1.2]: https://github.com/sebastianbergmann/php-code-coverage/compare/6.1.1...6.1.2 [6.1.1]: https://github.com/sebastianbergmann/php-code-coverage/compare/6.1.0...6.1.1 [6.1.0]: https://github.com/sebastianbergmann/php-code-coverage/compare/6.0...6.1.0 PK!ÞY|o\file-manager-advanced/application/svg-sanitizer/includes/phpunit/php-code-coverage/build.xmlnu„[µü¤ PK!Nõ=ÌÌffile-manager-advanced/application/svg-sanitizer/includes/phpunit/php-code-coverage/src/Driver/PCOV.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace SebastianBergmann\CodeCoverage\Driver; /** * Driver for PCOV code coverage functionality. * * @codeCoverageIgnore */ final class PCOV implements Driver { /** * Start collection of code coverage information. */ public function start(bool $determineUnusedAndDead = true): void { \pcov\start(); } /** * Stop collection of code coverage information. */ public function stop(): array { \pcov\stop(); $waiting = \pcov\waiting(); $collect = []; if ($waiting) { $collect = \pcov\collect(\pcov\inclusive, $waiting); \pcov\clear(); } return $collect; } } PK!éh—žN N hfile-manager-advanced/application/svg-sanitizer/includes/phpunit/php-code-coverage/src/Driver/Xdebug.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace SebastianBergmann\CodeCoverage\Driver; use SebastianBergmann\CodeCoverage\Filter; use SebastianBergmann\CodeCoverage\RuntimeException; /** * Driver for Xdebug's code coverage functionality. * * @codeCoverageIgnore */ final class Xdebug implements Driver { /** * @var array */ private $cacheNumLines = []; /** * @var Filter */ private $filter; /** * @throws RuntimeException */ public function __construct(?Filter $filter = null) { if (!\extension_loaded('xdebug')) { throw new RuntimeException('This driver requires Xdebug'); } if (\version_compare(\phpversion('xdebug'), '3', '>=')) { $mode = \getenv('XDEBUG_MODE'); if ($mode === false) { $mode = \ini_get('xdebug.mode'); } if ($mode === false || !\in_array('coverage', \explode(',', $mode), true)) { throw new RuntimeException('XDEBUG_MODE=coverage or xdebug.mode=coverage has to be set'); } } elseif (!\ini_get('xdebug.coverage_enable')) { throw new RuntimeException('xdebug.coverage_enable=On has to be set'); } if ($filter === null) { $filter = new Filter; } $this->filter = $filter; } /** * Start collection of code coverage information. */ public function start(bool $determineUnusedAndDead = true): void { if ($determineUnusedAndDead) { \xdebug_start_code_coverage(XDEBUG_CC_UNUSED | XDEBUG_CC_DEAD_CODE); } else { \xdebug_start_code_coverage(); } } /** * Stop collection of code coverage information. */ public function stop(): array { $data = \xdebug_get_code_coverage(); \xdebug_stop_code_coverage(); return $this->cleanup($data); } private function cleanup(array $data): array { foreach (\array_keys($data) as $file) { unset($data[$file][0]); if (!$this->filter->isFile($file)) { continue; } $numLines = $this->getNumberOfLinesInFile($file); foreach (\array_keys($data[$file]) as $line) { if ($line > $numLines) { unset($data[$file][$line]); } } } return $data; } private function getNumberOfLinesInFile(string $fileName): int { if (!isset($this->cacheNumLines[$fileName])) { $buffer = \file_get_contents($fileName); $lines = \substr_count($buffer, "\n"); if (\substr($buffer, -1) !== "\n") { $lines++; } $this->cacheNumLines[$fileName] = $lines; } return $this->cacheNumLines[$fileName]; } } PK!dõÞŽ Ž hfile-manager-advanced/application/svg-sanitizer/includes/phpunit/php-code-coverage/src/Driver/PHPDBG.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace SebastianBergmann\CodeCoverage\Driver; use SebastianBergmann\CodeCoverage\RuntimeException; /** * Driver for PHPDBG's code coverage functionality. * * @codeCoverageIgnore */ final class PHPDBG implements Driver { /** * @throws RuntimeException */ public function __construct() { if (\PHP_SAPI !== 'phpdbg') { throw new RuntimeException( 'This driver requires the PHPDBG SAPI' ); } if (!\function_exists('phpdbg_start_oplog')) { throw new RuntimeException( 'This build of PHPDBG does not support code coverage' ); } } /** * Start collection of code coverage information. */ public function start(bool $determineUnusedAndDead = true): void { \phpdbg_start_oplog(); } /** * Stop collection of code coverage information. */ public function stop(): array { static $fetchedLines = []; $dbgData = \phpdbg_end_oplog(); if ($fetchedLines == []) { $sourceLines = \phpdbg_get_executable(); } else { $newFiles = \array_diff(\get_included_files(), \array_keys($fetchedLines)); $sourceLines = []; if ($newFiles) { $sourceLines = phpdbg_get_executable(['files' => $newFiles]); } } foreach ($sourceLines as $file => $lines) { foreach ($lines as $lineNo => $numExecuted) { $sourceLines[$file][$lineNo] = self::LINE_NOT_EXECUTED; } } $fetchedLines = \array_merge($fetchedLines, $sourceLines); return $this->detectExecutedLines($fetchedLines, $dbgData); } /** * Convert phpdbg based data into the format CodeCoverage expects */ private function detectExecutedLines(array $sourceLines, array $dbgData): array { foreach ($dbgData as $file => $coveredLines) { foreach ($coveredLines as $lineNo => $numExecuted) { // phpdbg also reports $lineNo=0 when e.g. exceptions get thrown. // make sure we only mark lines executed which are actually executable. if (isset($sourceLines[$file][$lineNo])) { $sourceLines[$file][$lineNo] = self::LINE_EXECUTED; } } } return $sourceLines; } } PK!Nµ‰hfile-manager-advanced/application/svg-sanitizer/includes/phpunit/php-code-coverage/src/Driver/Driver.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace SebastianBergmann\CodeCoverage\Driver; /** * Interface for code coverage drivers. */ interface Driver { /** * @var int * * @see http://xdebug.org/docs/code_coverage */ public const LINE_EXECUTED = 1; /** * @var int * * @see http://xdebug.org/docs/code_coverage */ public const LINE_NOT_EXECUTED = -1; /** * @var int * * @see http://xdebug.org/docs/code_coverage */ public const LINE_NOT_EXECUTABLE = -2; /** * Start collection of code coverage information. */ public function start(bool $determineUnusedAndDead = true): void; /** * Stop collection of code coverage information. */ public function stop(): array; } PK!_ÿSÇÇbfile-manager-advanced/application/svg-sanitizer/includes/phpunit/php-code-coverage/src/Version.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace SebastianBergmann\CodeCoverage; use SebastianBergmann\Version as VersionId; final class Version { /** * @var string */ private static $version; public static function id(): string { if (self::$version === null) { $version = new VersionId('7.0.17', \dirname(__DIR__)); self::$version = $version->getVersion(); } return self::$version; } } PK!R}‹EEafile-manager-advanced/application/svg-sanitizer/includes/phpunit/php-code-coverage/src/Filter.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace SebastianBergmann\CodeCoverage; use SebastianBergmann\FileIterator\Facade as FileIteratorFacade; /** * Filter for whitelisting of code coverage information. */ final class Filter { /** * Source files that are whitelisted. * * @var array */ private $whitelistedFiles = []; /** * Remembers the result of the `is_file()` calls. * * @var bool[] */ private $isFileCallsCache = []; /** * Adds a directory to the whitelist (recursively). */ public function addDirectoryToWhitelist(string $directory, string $suffix = '.php', string $prefix = ''): void { $facade = new FileIteratorFacade; $files = $facade->getFilesAsArray($directory, $suffix, $prefix); foreach ($files as $file) { $this->addFileToWhitelist($file); } } /** * Adds a file to the whitelist. */ public function addFileToWhitelist(string $filename): void { $filename = \realpath($filename); if (!$filename) { return; } $this->whitelistedFiles[$filename] = true; } /** * Adds files to the whitelist. * * @param string[] $files */ public function addFilesToWhitelist(array $files): void { foreach ($files as $file) { $this->addFileToWhitelist($file); } } /** * Removes a directory from the whitelist (recursively). */ public function removeDirectoryFromWhitelist(string $directory, string $suffix = '.php', string $prefix = ''): void { $facade = new FileIteratorFacade; $files = $facade->getFilesAsArray($directory, $suffix, $prefix); foreach ($files as $file) { $this->removeFileFromWhitelist($file); } } /** * Removes a file from the whitelist. */ public function removeFileFromWhitelist(string $filename): void { $filename = \realpath($filename); if (!$filename || !isset($this->whitelistedFiles[$filename])) { return; } unset($this->whitelistedFiles[$filename]); } /** * Checks whether a filename is a real filename. */ public function isFile(string $filename): bool { if (isset($this->isFileCallsCache[$filename])) { return $this->isFileCallsCache[$filename]; } if ($filename === '-' || \strpos($filename, 'vfs://') === 0 || \strpos($filename, 'xdebug://debug-eval') !== false || \strpos($filename, 'eval()\'d code') !== false || \strpos($filename, 'runtime-created function') !== false || \strpos($filename, 'runkit created function') !== false || \strpos($filename, 'assert code') !== false || \strpos($filename, 'regexp code') !== false || \strpos($filename, 'Standard input code') !== false) { $isFile = false; } else { $isFile = \file_exists($filename); } $this->isFileCallsCache[$filename] = $isFile; return $isFile; } /** * Checks whether or not a file is filtered. */ public function isFiltered(string $filename): bool { if (!$this->isFile($filename)) { return true; } return !isset($this->whitelistedFiles[$filename]); } /** * Returns the list of whitelisted files. * * @return string[] */ public function getWhitelist(): array { return \array_keys($this->whitelistedFiles); } /** * Returns whether this filter has a whitelist. */ public function hasWhitelist(): bool { return !empty($this->whitelistedFiles); } /** * Returns the whitelisted files. * * @return string[] */ public function getWhitelistedFiles(): array { return $this->whitelistedFiles; } /** * Sets the whitelisted files. */ public function setWhitelistedFiles(array $whitelistedFiles): void { $this->whitelistedFiles = $whitelistedFiles; } } PK!X Î΄file-manager-advanced/application/svg-sanitizer/includes/phpunit/php-code-coverage/src/Exception/CoveredCodeNotExecutedException.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace SebastianBergmann\CodeCoverage; /** * Exception that is raised when covered code is not executed. */ final class CoveredCodeNotExecutedException extends RuntimeException { } PK!´bPDˆˆufile-manager-advanced/application/svg-sanitizer/includes/phpunit/php-code-coverage/src/Exception/RuntimeException.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace SebastianBergmann\CodeCoverage; class RuntimeException extends \RuntimeException implements Exception { } PK!)‰�þMMˆfile-manager-advanced/application/svg-sanitizer/includes/phpunit/php-code-coverage/src/Exception/UnintentionallyCoveredCodeException.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace SebastianBergmann\CodeCoverage; /** * Exception that is raised when code is unintentionally covered. */ final class UnintentionallyCoveredCodeException extends RuntimeException { /** * @var array */ private $unintentionallyCoveredUnits = []; public function __construct(array $unintentionallyCoveredUnits) { $this->unintentionallyCoveredUnits = $unintentionallyCoveredUnits; parent::__construct($this->toString()); } public function getUnintentionallyCoveredUnits(): array { return $this->unintentionallyCoveredUnits; } private function toString(): string { $message = ''; foreach ($this->unintentionallyCoveredUnits as $unit) { $message .= '- ' . $unit . "\n"; } return $message; } } PK!Ê¡£ðÒÒ…file-manager-advanced/application/svg-sanitizer/includes/phpunit/php-code-coverage/src/Exception/MissingCoversAnnotationException.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace SebastianBergmann\CodeCoverage; /** * Exception that is raised when @covers must be used but is not. */ final class MissingCoversAnnotationException extends RuntimeException { } PK!¡Ó~––nfile-manager-advanced/application/svg-sanitizer/includes/phpunit/php-code-coverage/src/Exception/Exception.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace SebastianBergmann\CodeCoverage; /** * Exception interface for php-code-coverage component. */ interface Exception { } PK!e¦Uu}file-manager-advanced/application/svg-sanitizer/includes/phpunit/php-code-coverage/src/Exception/InvalidArgumentException.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace SebastianBergmann\CodeCoverage; final class InvalidArgumentException extends \InvalidArgumentException implements Exception { /** * @param int $argument * @param string $type * @param null|mixed $value * * @return InvalidArgumentException */ public static function create($argument, $type, $value = null): self { $stack = \debug_backtrace(0); return new self( \sprintf( 'Argument #%d%sof %s::%s() must be a %s', $argument, $value !== null ? ' (' . \gettype($value) . '#' . $value . ')' : ' (No Value) ', $stack[1]['class'], $stack[1]['function'], $type ) ); } } PK!DQü‹ú)ú)hfile-manager-advanced/application/svg-sanitizer/includes/phpunit/php-code-coverage/src/Report/Clover.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace SebastianBergmann\CodeCoverage\Report; use SebastianBergmann\CodeCoverage\CodeCoverage; use SebastianBergmann\CodeCoverage\Node\File; use SebastianBergmann\CodeCoverage\RuntimeException; /** * Generates a Clover XML logfile from a code coverage object. */ final class Clover { /** * @throws \RuntimeException */ public function process(CodeCoverage $coverage, ?string $target = null, ?string $name = null): string { $xmlDocument = new \DOMDocument('1.0', 'UTF-8'); $xmlDocument->formatOutput = true; $xmlCoverage = $xmlDocument->createElement('coverage'); $xmlCoverage->setAttribute('generated', (string) $_SERVER['REQUEST_TIME']); $xmlDocument->appendChild($xmlCoverage); $xmlProject = $xmlDocument->createElement('project'); $xmlProject->setAttribute('timestamp', (string) $_SERVER['REQUEST_TIME']); if (\is_string($name)) { $xmlProject->setAttribute('name', $name); } $xmlCoverage->appendChild($xmlProject); $packages = []; $report = $coverage->getReport(); foreach ($report as $item) { if (!$item instanceof File) { continue; } /* @var File $item */ $xmlFile = $xmlDocument->createElement('file'); $xmlFile->setAttribute('name', $item->getPath()); $classes = $item->getClassesAndTraits(); $coverageData = $item->getCoverageData(); $lines = []; $namespace = 'global'; foreach ($classes as $className => $class) { $classStatements = 0; $coveredClassStatements = 0; $coveredMethods = 0; $classMethods = 0; foreach ($class['methods'] as $methodName => $method) { if ($method['executableLines'] == 0) { continue; } $classMethods++; $classStatements += $method['executableLines']; $coveredClassStatements += $method['executedLines']; if ($method['coverage'] == 100) { $coveredMethods++; } $methodCount = 0; foreach (\range($method['startLine'], $method['endLine']) as $line) { if (isset($coverageData[$line]) && ($coverageData[$line] !== null)) { $methodCount = \max($methodCount, \count($coverageData[$line])); } } $lines[$method['startLine']] = [ 'ccn' => $method['ccn'], 'count' => $methodCount, 'crap' => $method['crap'], 'type' => 'method', 'visibility' => $method['visibility'], 'name' => $methodName, ]; } if (!empty($class['package']['namespace'])) { $namespace = $class['package']['namespace']; } $xmlClass = $xmlDocument->createElement('class'); $xmlClass->setAttribute('name', $className); $xmlClass->setAttribute('namespace', $namespace); if (!empty($class['package']['fullPackage'])) { $xmlClass->setAttribute( 'fullPackage', $class['package']['fullPackage'] ); } if (!empty($class['package']['category'])) { $xmlClass->setAttribute( 'category', $class['package']['category'] ); } if (!empty($class['package']['package'])) { $xmlClass->setAttribute( 'package', $class['package']['package'] ); } if (!empty($class['package']['subpackage'])) { $xmlClass->setAttribute( 'subpackage', $class['package']['subpackage'] ); } $xmlFile->appendChild($xmlClass); $xmlMetrics = $xmlDocument->createElement('metrics'); $xmlMetrics->setAttribute('complexity', (string) $class['ccn']); $xmlMetrics->setAttribute('methods', (string) $classMethods); $xmlMetrics->setAttribute('coveredmethods', (string) $coveredMethods); $xmlMetrics->setAttribute('conditionals', '0'); $xmlMetrics->setAttribute('coveredconditionals', '0'); $xmlMetrics->setAttribute('statements', (string) $classStatements); $xmlMetrics->setAttribute('coveredstatements', (string) $coveredClassStatements); $xmlMetrics->setAttribute('elements', (string) ($classMethods + $classStatements /* + conditionals */)); $xmlMetrics->setAttribute('coveredelements', (string) ($coveredMethods + $coveredClassStatements /* + coveredconditionals */)); $xmlClass->appendChild($xmlMetrics); } foreach ($coverageData as $line => $data) { if ($data === null || isset($lines[$line])) { continue; } $lines[$line] = [ 'count' => \count($data), 'type' => 'stmt', ]; } \ksort($lines); foreach ($lines as $line => $data) { $xmlLine = $xmlDocument->createElement('line'); $xmlLine->setAttribute('num', (string) $line); $xmlLine->setAttribute('type', $data['type']); if (isset($data['name'])) { $xmlLine->setAttribute('name', $data['name']); } if (isset($data['visibility'])) { $xmlLine->setAttribute('visibility', $data['visibility']); } if (isset($data['ccn'])) { $xmlLine->setAttribute('complexity', (string) $data['ccn']); } if (isset($data['crap'])) { $xmlLine->setAttribute('crap', (string) $data['crap']); } $xmlLine->setAttribute('count', (string) $data['count']); $xmlFile->appendChild($xmlLine); } $linesOfCode = $item->getLinesOfCode(); $xmlMetrics = $xmlDocument->createElement('metrics'); $xmlMetrics->setAttribute('loc', (string) $linesOfCode['loc']); $xmlMetrics->setAttribute('ncloc', (string) $linesOfCode['ncloc']); $xmlMetrics->setAttribute('classes', (string) $item->getNumClassesAndTraits()); $xmlMetrics->setAttribute('methods', (string) $item->getNumMethods()); $xmlMetrics->setAttribute('coveredmethods', (string) $item->getNumTestedMethods()); $xmlMetrics->setAttribute('conditionals', '0'); $xmlMetrics->setAttribute('coveredconditionals', '0'); $xmlMetrics->setAttribute('statements', (string) $item->getNumExecutableLines()); $xmlMetrics->setAttribute('coveredstatements', (string) $item->getNumExecutedLines()); $xmlMetrics->setAttribute('elements', (string) ($item->getNumMethods() + $item->getNumExecutableLines() /* + conditionals */)); $xmlMetrics->setAttribute('coveredelements', (string) ($item->getNumTestedMethods() + $item->getNumExecutedLines() /* + coveredconditionals */)); $xmlFile->appendChild($xmlMetrics); if ($namespace === 'global') { $xmlProject->appendChild($xmlFile); } else { if (!isset($packages[$namespace])) { $packages[$namespace] = $xmlDocument->createElement( 'package' ); $packages[$namespace]->setAttribute('name', $namespace); $xmlProject->appendChild($packages[$namespace]); } $packages[$namespace]->appendChild($xmlFile); } } $linesOfCode = $report->getLinesOfCode(); $xmlMetrics = $xmlDocument->createElement('metrics'); $xmlMetrics->setAttribute('files', (string) \count($report)); $xmlMetrics->setAttribute('loc', (string) $linesOfCode['loc']); $xmlMetrics->setAttribute('ncloc', (string) $linesOfCode['ncloc']); $xmlMetrics->setAttribute('classes', (string) $report->getNumClassesAndTraits()); $xmlMetrics->setAttribute('methods', (string) $report->getNumMethods()); $xmlMetrics->setAttribute('coveredmethods', (string) $report->getNumTestedMethods()); $xmlMetrics->setAttribute('conditionals', '0'); $xmlMetrics->setAttribute('coveredconditionals', '0'); $xmlMetrics->setAttribute('statements', (string) $report->getNumExecutableLines()); $xmlMetrics->setAttribute('coveredstatements', (string) $report->getNumExecutedLines()); $xmlMetrics->setAttribute('elements', (string) ($report->getNumMethods() + $report->getNumExecutableLines() /* + conditionals */)); $xmlMetrics->setAttribute('coveredelements', (string) ($report->getNumTestedMethods() + $report->getNumExecutedLines() /* + coveredconditionals */)); $xmlProject->appendChild($xmlMetrics); $buffer = $xmlDocument->saveXML(); if ($target !== null) { if (!$this->createDirectory(\dirname($target))) { throw new \RuntimeException(\sprintf('Directory "%s" was not created', \dirname($target))); } if (@\file_put_contents($target, $buffer) === false) { throw new RuntimeException( \sprintf( 'Could not write to "%s', $target ) ); } } return $buffer; } private function createDirectory(string $directory): bool { return !(!\is_dir($directory) && !@\mkdir($directory, 0777, true) && !\is_dir($directory)); } } PK!èaD¨ffjfile-manager-advanced/application/svg-sanitizer/includes/phpunit/php-code-coverage/src/Report/Xml/Node.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace SebastianBergmann\CodeCoverage\Report\Xml; abstract class Node { /** * @var \DOMDocument */ private $dom; /** * @var \DOMElement */ private $contextNode; public function __construct(\DOMElement $context) { $this->setContextNode($context); } public function getDom(): \DOMDocument { return $this->dom; } public function getTotals(): Totals { $totalsContainer = $this->getContextNode()->firstChild; if (!$totalsContainer) { $totalsContainer = $this->getContextNode()->appendChild( $this->dom->createElementNS( 'https://schema.phpunit.de/coverage/1.0', 'totals' ) ); } return new Totals($totalsContainer); } public function addDirectory(string $name): Directory { $dirNode = $this->getDom()->createElementNS( 'https://schema.phpunit.de/coverage/1.0', 'directory' ); $dirNode->setAttribute('name', $name); $this->getContextNode()->appendChild($dirNode); return new Directory($dirNode); } public function addFile(string $name, string $href): File { $fileNode = $this->getDom()->createElementNS( 'https://schema.phpunit.de/coverage/1.0', 'file' ); $fileNode->setAttribute('name', $name); $fileNode->setAttribute('href', $href); $this->getContextNode()->appendChild($fileNode); return new File($fileNode); } protected function setContextNode(\DOMElement $context): void { $this->dom = $context->ownerDocument; $this->contextNode = $context; } protected function getContextNode(): \DOMElement { return $this->contextNode; } } PK!¡ç›X™ ™ vfile-manager-advanced/application/svg-sanitizer/includes/phpunit/php-code-coverage/src/Report/Xml/BuildInformation.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace SebastianBergmann\CodeCoverage\Report\Xml; use SebastianBergmann\Environment\Runtime; final class BuildInformation { /** * @var \DOMElement */ private $contextNode; public function __construct(\DOMElement $contextNode) { $this->contextNode = $contextNode; } public function setRuntimeInformation(Runtime $runtime): void { $runtimeNode = $this->getNodeByName('runtime'); $runtimeNode->setAttribute('name', $runtime->getName()); $runtimeNode->setAttribute('version', $runtime->getVersion()); $runtimeNode->setAttribute('url', $runtime->getVendorUrl()); $driverNode = $this->getNodeByName('driver'); if ($runtime->hasPHPDBGCodeCoverage()) { $driverNode->setAttribute('name', 'phpdbg'); $driverNode->setAttribute('version', \constant('PHPDBG_VERSION')); } if ($runtime->hasXdebug()) { $driverNode->setAttribute('name', 'xdebug'); $driverNode->setAttribute('version', \phpversion('xdebug')); } if ($runtime->hasPCOV()) { $driverNode->setAttribute('name', 'pcov'); $driverNode->setAttribute('version', \phpversion('pcov')); } } public function setBuildTime(\DateTime $date): void { $this->contextNode->setAttribute('time', $date->format('D M j G:i:s T Y')); } public function setGeneratorVersions(string $phpUnitVersion, string $coverageVersion): void { $this->contextNode->setAttribute('phpunit', $phpUnitVersion); $this->contextNode->setAttribute('coverage', $coverageVersion); } private function getNodeByName(string $name): \DOMElement { $node = $this->contextNode->getElementsByTagNameNS( 'https://schema.phpunit.de/coverage/1.0', $name )->item(0); if (!$node) { $node = $this->contextNode->appendChild( $this->contextNode->ownerDocument->createElementNS( 'https://schema.phpunit.de/coverage/1.0', $name ) ); } return $node; } } PK!Íß-ÃÏÏjfile-manager-advanced/application/svg-sanitizer/includes/phpunit/php-code-coverage/src/Report/Xml/File.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace SebastianBergmann\CodeCoverage\Report\Xml; class File { /** * @var \DOMDocument */ private $dom; /** * @var \DOMElement */ private $contextNode; public function __construct(\DOMElement $context) { $this->dom = $context->ownerDocument; $this->contextNode = $context; } public function getTotals(): Totals { $totalsContainer = $this->contextNode->firstChild; if (!$totalsContainer) { $totalsContainer = $this->contextNode->appendChild( $this->dom->createElementNS( 'https://schema.phpunit.de/coverage/1.0', 'totals' ) ); } return new Totals($totalsContainer); } public function getLineCoverage(string $line): Coverage { $coverage = $this->contextNode->getElementsByTagNameNS( 'https://schema.phpunit.de/coverage/1.0', 'coverage' )->item(0); if (!$coverage) { $coverage = $this->contextNode->appendChild( $this->dom->createElementNS( 'https://schema.phpunit.de/coverage/1.0', 'coverage' ) ); } $lineNode = $coverage->appendChild( $this->dom->createElementNS( 'https://schema.phpunit.de/coverage/1.0', 'line' ) ); return new Coverage($lineNode, $line); } protected function getContextNode(): \DOMElement { return $this->contextNode; } protected function getDomDocument(): \DOMDocument { return $this->dom; } } PK!mãlغ º jfile-manager-advanced/application/svg-sanitizer/includes/phpunit/php-code-coverage/src/Report/Xml/Unit.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace SebastianBergmann\CodeCoverage\Report\Xml; final class Unit { /** * @var \DOMElement */ private $contextNode; public function __construct(\DOMElement $context, string $name) { $this->contextNode = $context; $this->setName($name); } public function setLines(int $start, int $executable, int $executed): void { $this->contextNode->setAttribute('start', (string) $start); $this->contextNode->setAttribute('executable', (string) $executable); $this->contextNode->setAttribute('executed', (string) $executed); } public function setCrap(float $crap): void { $this->contextNode->setAttribute('crap', (string) $crap); } public function setPackage(string $full, string $package, string $sub, string $category): void { $node = $this->contextNode->getElementsByTagNameNS( 'https://schema.phpunit.de/coverage/1.0', 'package' )->item(0); if (!$node) { $node = $this->contextNode->appendChild( $this->contextNode->ownerDocument->createElementNS( 'https://schema.phpunit.de/coverage/1.0', 'package' ) ); } $node->setAttribute('full', $full); $node->setAttribute('name', $package); $node->setAttribute('sub', $sub); $node->setAttribute('category', $category); } public function setNamespace(string $namespace): void { $node = $this->contextNode->getElementsByTagNameNS( 'https://schema.phpunit.de/coverage/1.0', 'namespace' )->item(0); if (!$node) { $node = $this->contextNode->appendChild( $this->contextNode->ownerDocument->createElementNS( 'https://schema.phpunit.de/coverage/1.0', 'namespace' ) ); } $node->setAttribute('name', $namespace); } public function addMethod(string $name): Method { $node = $this->contextNode->appendChild( $this->contextNode->ownerDocument->createElementNS( 'https://schema.phpunit.de/coverage/1.0', 'method' ) ); return new Method($node, $name); } private function setName(string $name): void { $this->contextNode->setAttribute('name', $name); } } PK!vÒê]lfile-manager-advanced/application/svg-sanitizer/includes/phpunit/php-code-coverage/src/Report/Xml/Source.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace SebastianBergmann\CodeCoverage\Report\Xml; use TheSeer\Tokenizer\NamespaceUri; use TheSeer\Tokenizer\Tokenizer; use TheSeer\Tokenizer\XMLSerializer; final class Source { /** @var \DOMElement */ private $context; public function __construct(\DOMElement $context) { $this->context = $context; } public function setSourceCode(string $source): void { $context = $this->context; $tokens = (new Tokenizer())->parse($source); $srcDom = (new XMLSerializer(new NamespaceUri($context->namespaceURI)))->toDom($tokens); $context->parentNode->replaceChild( $context->ownerDocument->importNode($srcDom->documentElement, true), $context ); } } PK! ŽhËppofile-manager-advanced/application/svg-sanitizer/includes/phpunit/php-code-coverage/src/Report/Xml/Directory.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace SebastianBergmann\CodeCoverage\Report\Xml; final class Directory extends Node { } PK!Zàhè00lfile-manager-advanced/application/svg-sanitizer/includes/phpunit/php-code-coverage/src/Report/Xml/Totals.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace SebastianBergmann\CodeCoverage\Report\Xml; use SebastianBergmann\CodeCoverage\Util; final class Totals { /** * @var \DOMNode */ private $container; /** * @var \DOMElement */ private $linesNode; /** * @var \DOMElement */ private $methodsNode; /** * @var \DOMElement */ private $functionsNode; /** * @var \DOMElement */ private $classesNode; /** * @var \DOMElement */ private $traitsNode; public function __construct(\DOMElement $container) { $this->container = $container; $dom = $container->ownerDocument; $this->linesNode = $dom->createElementNS( 'https://schema.phpunit.de/coverage/1.0', 'lines' ); $this->methodsNode = $dom->createElementNS( 'https://schema.phpunit.de/coverage/1.0', 'methods' ); $this->functionsNode = $dom->createElementNS( 'https://schema.phpunit.de/coverage/1.0', 'functions' ); $this->classesNode = $dom->createElementNS( 'https://schema.phpunit.de/coverage/1.0', 'classes' ); $this->traitsNode = $dom->createElementNS( 'https://schema.phpunit.de/coverage/1.0', 'traits' ); $container->appendChild($this->linesNode); $container->appendChild($this->methodsNode); $container->appendChild($this->functionsNode); $container->appendChild($this->classesNode); $container->appendChild($this->traitsNode); } public function getContainer(): \DOMNode { return $this->container; } public function setNumLines(int $loc, int $cloc, int $ncloc, int $executable, int $executed): void { $this->linesNode->setAttribute('total', (string) $loc); $this->linesNode->setAttribute('comments', (string) $cloc); $this->linesNode->setAttribute('code', (string) $ncloc); $this->linesNode->setAttribute('executable', (string) $executable); $this->linesNode->setAttribute('executed', (string) $executed); $this->linesNode->setAttribute( 'percent', $executable === 0 ? '0' : \sprintf('%01.2F', Util::percent($executed, $executable)) ); } public function setNumClasses(int $count, int $tested): void { $this->classesNode->setAttribute('count', (string) $count); $this->classesNode->setAttribute('tested', (string) $tested); $this->classesNode->setAttribute( 'percent', $count === 0 ? '0' : \sprintf('%01.2F', Util::percent($tested, $count)) ); } public function setNumTraits(int $count, int $tested): void { $this->traitsNode->setAttribute('count', (string) $count); $this->traitsNode->setAttribute('tested', (string) $tested); $this->traitsNode->setAttribute( 'percent', $count === 0 ? '0' : \sprintf('%01.2F', Util::percent($tested, $count)) ); } public function setNumMethods(int $count, int $tested): void { $this->methodsNode->setAttribute('count', (string) $count); $this->methodsNode->setAttribute('tested', (string) $tested); $this->methodsNode->setAttribute( 'percent', $count === 0 ? '0' : \sprintf('%01.2F', Util::percent($tested, $count)) ); } public function setNumFunctions(int $count, int $tested): void { $this->functionsNode->setAttribute('count', (string) $count); $this->functionsNode->setAttribute('tested', (string) $tested); $this->functionsNode->setAttribute( 'percent', $count === 0 ? '0' : \sprintf('%01.2F', Util::percent($tested, $count)) ); } } PK!)"ÿ“è è lfile-manager-advanced/application/svg-sanitizer/includes/phpunit/php-code-coverage/src/Report/Xml/Facade.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace SebastianBergmann\CodeCoverage\Report\Xml; use SebastianBergmann\CodeCoverage\CodeCoverage; use SebastianBergmann\CodeCoverage\Node\AbstractNode; use SebastianBergmann\CodeCoverage\Node\Directory as DirectoryNode; use SebastianBergmann\CodeCoverage\Node\File as FileNode; use SebastianBergmann\CodeCoverage\RuntimeException; use SebastianBergmann\CodeCoverage\Version; use SebastianBergmann\Environment\Runtime; final class Facade { /** * @var string */ private $target; /** * @var Project */ private $project; /** * @var string */ private $phpUnitVersion; public function __construct(string $version) { $this->phpUnitVersion = $version; } /** * @throws RuntimeException */ public function process(CodeCoverage $coverage, string $target): void { if (\substr($target, -1, 1) !== \DIRECTORY_SEPARATOR) { $target .= \DIRECTORY_SEPARATOR; } $this->target = $target; $this->initTargetDirectory($target); $report = $coverage->getReport(); $this->project = new Project( $coverage->getReport()->getName() ); $this->setBuildInformation(); $this->processTests($coverage->getTests()); $this->processDirectory($report, $this->project); $this->saveDocument($this->project->asDom(), 'index'); } private function setBuildInformation(): void { $buildNode = $this->project->getBuildInformation(); $buildNode->setRuntimeInformation(new Runtime()); $buildNode->setBuildTime(\DateTime::createFromFormat('U', (string) $_SERVER['REQUEST_TIME'])); $buildNode->setGeneratorVersions($this->phpUnitVersion, Version::id()); } /** * @throws RuntimeException */ private function initTargetDirectory(string $directory): void { if (\file_exists($directory)) { if (!\is_dir($directory)) { throw new RuntimeException( "'$directory' exists but is not a directory." ); } if (!\is_writable($directory)) { throw new RuntimeException( "'$directory' exists but is not writable." ); } } elseif (!$this->createDirectory($directory)) { throw new RuntimeException( "'$directory' could not be created." ); } } private function processDirectory(DirectoryNode $directory, Node $context): void { $directoryName = $directory->getName(); if ($this->project->getProjectSourceDirectory() === $directoryName) { $directoryName = '/'; } $directoryObject = $context->addDirectory($directoryName); $this->setTotals($directory, $directoryObject->getTotals()); foreach ($directory->getDirectories() as $node) { $this->processDirectory($node, $directoryObject); } foreach ($directory->getFiles() as $node) { $this->processFile($node, $directoryObject); } } /** * @throws RuntimeException */ private function processFile(FileNode $file, Directory $context): void { $fileObject = $context->addFile( $file->getName(), $file->getId() . '.xml' ); $this->setTotals($file, $fileObject->getTotals()); $path = \substr( $file->getPath(), \strlen($this->project->getProjectSourceDirectory()) ); $fileReport = new Report($path); $this->setTotals($file, $fileReport->getTotals()); foreach ($file->getClassesAndTraits() as $unit) { $this->processUnit($unit, $fileReport); } foreach ($file->getFunctions() as $function) { $this->processFunction($function, $fileReport); } foreach ($file->getCoverageData() as $line => $tests) { if (!\is_array($tests) || \count($tests) === 0) { continue; } $coverage = $fileReport->getLineCoverage((string) $line); foreach ($tests as $test) { $coverage->addTest($test); } $coverage->finalize(); } $fileReport->getSource()->setSourceCode( \file_get_contents($file->getPath()) ); $this->saveDocument($fileReport->asDom(), $file->getId()); } private function processUnit(array $unit, Report $report): void { if (isset($unit['className'])) { $unitObject = $report->getClassObject($unit['className']); } else { $unitObject = $report->getTraitObject($unit['traitName']); } $unitObject->setLines( $unit['startLine'], $unit['executableLines'], $unit['executedLines'] ); $unitObject->setCrap((float) $unit['crap']); $unitObject->setPackage( $unit['package']['fullPackage'], $unit['package']['package'], $unit['package']['subpackage'], $unit['package']['category'] ); $unitObject->setNamespace($unit['package']['namespace']); foreach ($unit['methods'] as $method) { $methodObject = $unitObject->addMethod($method['methodName']); $methodObject->setSignature($method['signature']); $methodObject->setLines((string) $method['startLine'], (string) $method['endLine']); $methodObject->setCrap($method['crap']); $methodObject->setTotals( (string) $method['executableLines'], (string) $method['executedLines'], (string) $method['coverage'] ); } } private function processFunction(array $function, Report $report): void { $functionObject = $report->getFunctionObject($function['functionName']); $functionObject->setSignature($function['signature']); $functionObject->setLines((string) $function['startLine']); $functionObject->setCrap($function['crap']); $functionObject->setTotals((string) $function['executableLines'], (string) $function['executedLines'], (string) $function['coverage']); } private function processTests(array $tests): void { $testsObject = $this->project->getTests(); foreach ($tests as $test => $result) { if ($test === 'UNCOVERED_FILES_FROM_WHITELIST') { continue; } $testsObject->addTest($test, $result); } } private function setTotals(AbstractNode $node, Totals $totals): void { $loc = $node->getLinesOfCode(); $totals->setNumLines( $loc['loc'], $loc['cloc'], $loc['ncloc'], $node->getNumExecutableLines(), $node->getNumExecutedLines() ); $totals->setNumClasses( $node->getNumClasses(), $node->getNumTestedClasses() ); $totals->setNumTraits( $node->getNumTraits(), $node->getNumTestedTraits() ); $totals->setNumMethods( $node->getNumMethods(), $node->getNumTestedMethods() ); $totals->setNumFunctions( $node->getNumFunctions(), $node->getNumTestedFunctions() ); } private function getTargetDirectory(): string { return $this->target; } /** * @throws RuntimeException */ private function saveDocument(\DOMDocument $document, string $name): void { $filename = \sprintf('%s/%s.xml', $this->getTargetDirectory(), $name); $document->formatOutput = true; $document->preserveWhiteSpace = false; $this->initTargetDirectory(\dirname($filename)); $document->save($filename); } private function createDirectory(string $directory): bool { return !(!\is_dir($directory) && !@\mkdir($directory, 0777, true) && !\is_dir($directory)); } } PK!Ûˆé|Í Í lfile-manager-advanced/application/svg-sanitizer/includes/phpunit/php-code-coverage/src/Report/Xml/Report.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace SebastianBergmann\CodeCoverage\Report\Xml; final class Report extends File { public function __construct(string $name) { $dom = new \DOMDocument(); $dom->loadXML(''); $contextNode = $dom->getElementsByTagNameNS( 'https://schema.phpunit.de/coverage/1.0', 'file' )->item(0); parent::__construct($contextNode); $this->setName($name); } public function asDom(): \DOMDocument { return $this->getDomDocument(); } public function getFunctionObject($name): Method { $node = $this->getContextNode()->appendChild( $this->getDomDocument()->createElementNS( 'https://schema.phpunit.de/coverage/1.0', 'function' ) ); return new Method($node, $name); } public function getClassObject($name): Unit { return $this->getUnitObject('class', $name); } public function getTraitObject($name): Unit { return $this->getUnitObject('trait', $name); } public function getSource(): Source { $source = $this->getContextNode()->getElementsByTagNameNS( 'https://schema.phpunit.de/coverage/1.0', 'source' )->item(0); if (!$source) { $source = $this->getContextNode()->appendChild( $this->getDomDocument()->createElementNS( 'https://schema.phpunit.de/coverage/1.0', 'source' ) ); } return new Source($source); } private function setName($name): void { $this->getContextNode()->setAttribute('name', \basename($name)); $this->getContextNode()->setAttribute('path', \dirname($name)); } private function getUnitObject($tagName, $name): Unit { $node = $this->getContextNode()->appendChild( $this->getDomDocument()->createElementNS( 'https://schema.phpunit.de/coverage/1.0', $tagName ) ); return new Unit($node, $name); } } PK!*'mc®®nfile-manager-advanced/application/svg-sanitizer/includes/phpunit/php-code-coverage/src/Report/Xml/Coverage.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace SebastianBergmann\CodeCoverage\Report\Xml; use SebastianBergmann\CodeCoverage\RuntimeException; final class Coverage { /** * @var \XMLWriter */ private $writer; /** * @var \DOMElement */ private $contextNode; /** * @var bool */ private $finalized = false; public function __construct(\DOMElement $context, string $line) { $this->contextNode = $context; $this->writer = new \XMLWriter(); $this->writer->openMemory(); $this->writer->startElementNS(null, $context->nodeName, 'https://schema.phpunit.de/coverage/1.0'); $this->writer->writeAttribute('nr', $line); } /** * @throws RuntimeException */ public function addTest(string $test): void { if ($this->finalized) { throw new RuntimeException('Coverage Report already finalized'); } $this->writer->startElement('covered'); $this->writer->writeAttribute('by', $test); $this->writer->endElement(); } public function finalize(): void { $this->writer->endElement(); $fragment = $this->contextNode->ownerDocument->createDocumentFragment(); $fragment->appendXML($this->writer->outputMemory()); $this->contextNode->parentNode->replaceChild( $fragment, $this->contextNode ); $this->finalized = true; } } PK!3�1ÓÓlfile-manager-advanced/application/svg-sanitizer/includes/phpunit/php-code-coverage/src/Report/Xml/Method.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace SebastianBergmann\CodeCoverage\Report\Xml; final class Method { /** * @var \DOMElement */ private $contextNode; public function __construct(\DOMElement $context, string $name) { $this->contextNode = $context; $this->setName($name); } public function setSignature(string $signature): void { $this->contextNode->setAttribute('signature', $signature); } public function setLines(string $start, ?string $end = null): void { $this->contextNode->setAttribute('start', $start); if ($end !== null) { $this->contextNode->setAttribute('end', $end); } } public function setTotals(string $executable, string $executed, string $coverage): void { $this->contextNode->setAttribute('executable', $executable); $this->contextNode->setAttribute('executed', $executed); $this->contextNode->setAttribute('coverage', $coverage); } public function setCrap(string $crap): void { $this->contextNode->setAttribute('crap', $crap); } private function setName(string $name): void { $this->contextNode->setAttribute('name', $name); } } PK!\äи= = mfile-manager-advanced/application/svg-sanitizer/includes/phpunit/php-code-coverage/src/Report/Xml/Project.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace SebastianBergmann\CodeCoverage\Report\Xml; final class Project extends Node { public function __construct(string $directory) { $this->init(); $this->setProjectSourceDirectory($directory); } public function getProjectSourceDirectory(): string { return $this->getContextNode()->getAttribute('source'); } public function getBuildInformation(): BuildInformation { $buildNode = $this->getDom()->getElementsByTagNameNS( 'https://schema.phpunit.de/coverage/1.0', 'build' )->item(0); if (!$buildNode) { $buildNode = $this->getDom()->documentElement->appendChild( $this->getDom()->createElementNS( 'https://schema.phpunit.de/coverage/1.0', 'build' ) ); } return new BuildInformation($buildNode); } public function getTests(): Tests { $testsNode = $this->getContextNode()->getElementsByTagNameNS( 'https://schema.phpunit.de/coverage/1.0', 'tests' )->item(0); if (!$testsNode) { $testsNode = $this->getContextNode()->appendChild( $this->getDom()->createElementNS( 'https://schema.phpunit.de/coverage/1.0', 'tests' ) ); } return new Tests($testsNode); } public function asDom(): \DOMDocument { return $this->getDom(); } private function init(): void { $dom = new \DOMDocument; $dom->loadXML(''); $this->setContextNode( $dom->getElementsByTagNameNS( 'https://schema.phpunit.de/coverage/1.0', 'project' )->item(0) ); } private function setProjectSourceDirectory(string $name): void { $this->getContextNode()->setAttribute('source', $name); } } PK!QÇlˆˆkfile-manager-advanced/application/svg-sanitizer/includes/phpunit/php-code-coverage/src/Report/Xml/Tests.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace SebastianBergmann\CodeCoverage\Report\Xml; final class Tests { private $contextNode; private $codeMap = [ -1 => 'UNKNOWN', // PHPUnit_Runner_BaseTestRunner::STATUS_UNKNOWN 0 => 'PASSED', // PHPUnit_Runner_BaseTestRunner::STATUS_PASSED 1 => 'SKIPPED', // PHPUnit_Runner_BaseTestRunner::STATUS_SKIPPED 2 => 'INCOMPLETE', // PHPUnit_Runner_BaseTestRunner::STATUS_INCOMPLETE 3 => 'FAILURE', // PHPUnit_Runner_BaseTestRunner::STATUS_FAILURE 4 => 'ERROR', // PHPUnit_Runner_BaseTestRunner::STATUS_ERROR 5 => 'RISKY', // PHPUnit_Runner_BaseTestRunner::STATUS_RISKY 6 => 'WARNING', // PHPUnit_Runner_BaseTestRunner::STATUS_WARNING ]; public function __construct(\DOMElement $context) { $this->contextNode = $context; } public function addTest(string $test, array $result): void { $node = $this->contextNode->appendChild( $this->contextNode->ownerDocument->createElementNS( 'https://schema.phpunit.de/coverage/1.0', 'test' ) ); $node->setAttribute('name', $test); $node->setAttribute('size', $result['size']); $node->setAttribute('result', (string) $result['status']); $node->setAttribute('status', $this->codeMap[(int) $result['status']]); } } PK!Úá)°p%p%yfile-manager-advanced/application/svg-sanitizer/includes/phpunit/php-code-coverage/src/Report/Html/Renderer/Dashboard.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace SebastianBergmann\CodeCoverage\Report\Html; use SebastianBergmann\CodeCoverage\Node\AbstractNode; use SebastianBergmann\CodeCoverage\Node\Directory as DirectoryNode; /** * Renders the dashboard for a directory node. */ final class Dashboard extends Renderer { /** * @throws \InvalidArgumentException * @throws \RuntimeException */ public function render(DirectoryNode $node, string $file): void { $classes = $node->getClassesAndTraits(); $template = new \Text_Template( $this->templatePath . 'dashboard.html', '{{', '}}' ); $this->setCommonTemplateVariables($template, $node); $baseLink = $node->getId() . '/'; $complexity = $this->complexity($classes, $baseLink); $coverageDistribution = $this->coverageDistribution($classes); $insufficientCoverage = $this->insufficientCoverage($classes, $baseLink); $projectRisks = $this->projectRisks($classes, $baseLink); $template->setVar( [ 'insufficient_coverage_classes' => $insufficientCoverage['class'], 'insufficient_coverage_methods' => $insufficientCoverage['method'], 'project_risks_classes' => $projectRisks['class'], 'project_risks_methods' => $projectRisks['method'], 'complexity_class' => $complexity['class'], 'complexity_method' => $complexity['method'], 'class_coverage_distribution' => $coverageDistribution['class'], 'method_coverage_distribution' => $coverageDistribution['method'], ] ); $template->renderTo($file); } /** * Returns the data for the Class/Method Complexity charts. */ protected function complexity(array $classes, string $baseLink): array { $result = ['class' => [], 'method' => []]; foreach ($classes as $className => $class) { foreach ($class['methods'] as $methodName => $method) { if ($className !== '*') { $methodName = $className . '::' . $methodName; } $result['method'][] = [ $method['coverage'], $method['ccn'], \sprintf( '%s', \str_replace($baseLink, '', $method['link']), $methodName ), ]; } $result['class'][] = [ $class['coverage'], $class['ccn'], \sprintf( '%s', \str_replace($baseLink, '', $class['link']), $className ), ]; } return [ 'class' => \json_encode($result['class']), 'method' => \json_encode($result['method']), ]; } /** * Returns the data for the Class / Method Coverage Distribution chart. */ protected function coverageDistribution(array $classes): array { $result = [ 'class' => [ '0%' => 0, '0-10%' => 0, '10-20%' => 0, '20-30%' => 0, '30-40%' => 0, '40-50%' => 0, '50-60%' => 0, '60-70%' => 0, '70-80%' => 0, '80-90%' => 0, '90-100%' => 0, '100%' => 0, ], 'method' => [ '0%' => 0, '0-10%' => 0, '10-20%' => 0, '20-30%' => 0, '30-40%' => 0, '40-50%' => 0, '50-60%' => 0, '60-70%' => 0, '70-80%' => 0, '80-90%' => 0, '90-100%' => 0, '100%' => 0, ], ]; foreach ($classes as $class) { foreach ($class['methods'] as $methodName => $method) { if ($method['coverage'] === 0) { $result['method']['0%']++; } elseif ($method['coverage'] === 100) { $result['method']['100%']++; } else { $key = \floor($method['coverage'] / 10) * 10; $key = $key . '-' . ($key + 10) . '%'; $result['method'][$key]++; } } if ($class['coverage'] === 0) { $result['class']['0%']++; } elseif ($class['coverage'] === 100) { $result['class']['100%']++; } else { $key = \floor($class['coverage'] / 10) * 10; $key = $key . '-' . ($key + 10) . '%'; $result['class'][$key]++; } } return [ 'class' => \json_encode(\array_values($result['class'])), 'method' => \json_encode(\array_values($result['method'])), ]; } /** * Returns the classes / methods with insufficient coverage. */ protected function insufficientCoverage(array $classes, string $baseLink): array { $leastTestedClasses = []; $leastTestedMethods = []; $result = ['class' => '', 'method' => '']; foreach ($classes as $className => $class) { foreach ($class['methods'] as $methodName => $method) { if ($method['coverage'] < $this->highLowerBound) { $key = $methodName; if ($className !== '*') { $key = $className . '::' . $methodName; } $leastTestedMethods[$key] = $method['coverage']; } } if ($class['coverage'] < $this->highLowerBound) { $leastTestedClasses[$className] = $class['coverage']; } } \asort($leastTestedClasses); \asort($leastTestedMethods); foreach ($leastTestedClasses as $className => $coverage) { $result['class'] .= \sprintf( ' %s%d%%' . "\n", \str_replace($baseLink, '', $classes[$className]['link']), $className, $coverage ); } foreach ($leastTestedMethods as $methodName => $coverage) { [$class, $method] = \explode('::', $methodName); $result['method'] .= \sprintf( ' %s%d%%' . "\n", \str_replace($baseLink, '', $classes[$class]['methods'][$method]['link']), $methodName, $method, $coverage ); } return $result; } /** * Returns the project risks according to the CRAP index. */ protected function projectRisks(array $classes, string $baseLink): array { $classRisks = []; $methodRisks = []; $result = ['class' => '', 'method' => '']; foreach ($classes as $className => $class) { foreach ($class['methods'] as $methodName => $method) { if ($method['coverage'] < $this->highLowerBound && $method['ccn'] > 1) { $key = $methodName; if ($className !== '*') { $key = $className . '::' . $methodName; } $methodRisks[$key] = $method['crap']; } } if ($class['coverage'] < $this->highLowerBound && $class['ccn'] > \count($class['methods'])) { $classRisks[$className] = $class['crap']; } } \arsort($classRisks); \arsort($methodRisks); foreach ($classRisks as $className => $crap) { $result['class'] .= \sprintf( ' %s%d' . "\n", \str_replace($baseLink, '', $classes[$className]['link']), $className, $crap ); } foreach ($methodRisks as $methodName => $crap) { [$class, $method] = \explode('::', $methodName); $result['method'] .= \sprintf( ' %s%d' . "\n", \str_replace($baseLink, '', $classes[$class]['methods'][$method]['link']), $methodName, $method, $crap ); } return $result; } protected function getActiveBreadcrumb(AbstractNode $node): string { return \sprintf( ' ' . "\n" . ' ' . "\n", $node->getName() ); } } PK!f&&(e=a.render.queue[f]);f++)d=e.generate(),typeof e.callback==typeof Function&&e.callback(d);a.render.queue.splice(0,f),a.render.queue.length?setTimeout(c):(a.dispatch.render_end(),a.render.active=!1)};setTimeout(c)},a.render.active=!1,a.render.queue=[],a.addGraph=function(b){typeof arguments[0]==typeof Function&&(b={generate:arguments[0],callback:arguments[1]}),a.render.queue.push(b),a.render.active||a.render()},"undefined"!=typeof module&&"undefined"!=typeof exports&&(module.exports=a),"undefined"!=typeof window&&(window.nv=a),a.dom.write=function(a){return void 0!==window.fastdom?fastdom.write(a):a()},a.dom.read=function(a){return void 0!==window.fastdom?fastdom.read(a):a()},a.interactiveGuideline=function(){"use strict";function b(l){l.each(function(l){function m(){var a=d3.mouse(this),d=a[0],e=a[1],i=!0,j=!1;if(k&&(d=d3.event.offsetX,e=d3.event.offsetY,"svg"!==d3.event.target.tagName&&(i=!1),d3.event.target.className.baseVal.match("nv-legend")&&(j=!0)),i&&(d-=f.left,e-=f.top),0>d||0>e||d>o||e>p||d3.event.relatedTarget&&void 0===d3.event.relatedTarget.ownerSVGElement||j){if(k&&d3.event.relatedTarget&&void 0===d3.event.relatedTarget.ownerSVGElement&&(void 0===d3.event.relatedTarget.className||d3.event.relatedTarget.className.match(c.nvPointerEventsClass)))return;return h.elementMouseout({mouseX:d,mouseY:e}),b.renderGuideLine(null),void c.hidden(!0)}c.hidden(!1);var l=g.invert(d);h.elementMousemove({mouseX:d,mouseY:e,pointXValue:l}),"dblclick"===d3.event.type&&h.elementDblclick({mouseX:d,mouseY:e,pointXValue:l}),"click"===d3.event.type&&h.elementClick({mouseX:d,mouseY:e,pointXValue:l})}var n=d3.select(this),o=d||960,p=e||400,q=n.selectAll("g.nv-wrap.nv-interactiveLineLayer").data([l]),r=q.enter().append("g").attr("class"," nv-wrap nv-interactiveLineLayer");r.append("g").attr("class","nv-interactiveGuideLine"),j&&(j.on("touchmove",m).on("mousemove",m,!0).on("mouseout",m,!0).on("dblclick",m).on("click",m),b.guideLine=null,b.renderGuideLine=function(c){i&&(b.guideLine&&b.guideLine.attr("x1")===c||a.dom.write(function(){var b=q.select(".nv-interactiveGuideLine").selectAll("line").data(null!=c?[a.utils.NaNtoZero(c)]:[],String);b.enter().append("line").attr("class","nv-guideline").attr("x1",function(a){return a}).attr("x2",function(a){return a}).attr("y1",p).attr("y2",0),b.exit().remove()}))})})}var c=a.models.tooltip();c.duration(0).hideDelay(0)._isInteractiveLayer(!0).hidden(!1);var d=null,e=null,f={left:0,top:0},g=d3.scale.linear(),h=d3.dispatch("elementMousemove","elementMouseout","elementClick","elementDblclick"),i=!0,j=null,k="ActiveXObject"in window;return b.dispatch=h,b.tooltip=c,b.margin=function(a){return arguments.length?(f.top="undefined"!=typeof a.top?a.top:f.top,f.left="undefined"!=typeof a.left?a.left:f.left,b):f},b.width=function(a){return arguments.length?(d=a,b):d},b.height=function(a){return arguments.length?(e=a,b):e},b.xScale=function(a){return arguments.length?(g=a,b):g},b.showGuideLine=function(a){return arguments.length?(i=a,b):i},b.svgContainer=function(a){return arguments.length?(j=a,b):j},b},a.interactiveBisect=function(a,b,c){"use strict";if(!(a instanceof Array))return null;var d;d="function"!=typeof c?function(a){return a.x}:c;var e=function(a,b){return d(a)-b},f=d3.bisector(e).left,g=d3.max([0,f(a,b)-1]),h=d(a[g]);if("undefined"==typeof h&&(h=g),h===b)return g;var i=d3.min([g+1,a.length-1]),j=d(a[i]);return"undefined"==typeof j&&(j=i),Math.abs(j-b)>=Math.abs(h-b)?g:i},a.nearestValueIndex=function(a,b,c){"use strict";var d=1/0,e=null;return a.forEach(function(a,f){var g=Math.abs(b-a);null!=a&&d>=g&&c>g&&(d=g,e=f)}),e},function(){"use strict";a.models.tooltip=function(){function b(){if(k){var a=d3.select(k);"svg"!==a.node().tagName&&(a=a.select("svg"));var b=a.node()?a.attr("viewBox"):null;if(b){b=b.split(" ");var c=parseInt(a.style("width"),10)/b[2];p.left=p.left*c,p.top=p.top*c}}}function c(){if(!n){var a;a=k?k:document.body,n=d3.select(a).append("div").attr("class","nvtooltip "+(j?j:"xy-tooltip")).attr("id",v),n.style("top",0).style("left",0),n.style("opacity",0),n.selectAll("div, table, td, tr").classed(w,!0),n.classed(w,!0),o=n.node()}}function d(){if(r&&B(e)){b();var f=p.left,g=null!==i?i:p.top;return a.dom.write(function(){c();var b=A(e);b&&(o.innerHTML=b),k&&u?a.dom.read(function(){var a=k.getElementsByTagName("svg")[0],b={left:0,top:0};if(a){var c=a.getBoundingClientRect(),d=k.getBoundingClientRect(),e=c.top;if(0>e){var i=k.getBoundingClientRect();e=Math.abs(e)>i.height?0:e}b.top=Math.abs(e-d.top),b.left=Math.abs(c.left-d.left)}f+=k.offsetLeft+b.left-2*k.scrollLeft,g+=k.offsetTop+b.top-2*k.scrollTop,h&&h>0&&(g=Math.floor(g/h)*h),C([f,g])}):C([f,g])}),d}}var e=null,f="w",g=25,h=0,i=null,j=null,k=null,l=!0,m=400,n=null,o=null,p={left:null,top:null},q={left:0,top:0},r=!0,s=100,t=!0,u=!1,v="nvtooltip-"+Math.floor(1e5*Math.random()),w="nv-pointer-events-none",x=function(a){return a},y=function(a){return a},z=function(a){return a},A=function(a){if(null===a)return"";var b=d3.select(document.createElement("table"));if(t){var c=b.selectAll("thead").data([a]).enter().append("thead");c.append("tr").append("td").attr("colspan",3).append("strong").classed("x-value",!0).html(y(a.value))}var d=b.selectAll("tbody").data([a]).enter().append("tbody"),e=d.selectAll("tr").data(function(a){return a.series}).enter().append("tr").classed("highlight",function(a){return a.highlight});e.append("td").classed("legend-color-guide",!0).append("div").style("background-color",function(a){return a.color}),e.append("td").classed("key",!0).html(function(a,b){return z(a.key,b)}),e.append("td").classed("value",!0).html(function(a,b){return x(a.value,b)}),e.selectAll("td").each(function(a){if(a.highlight){var b=d3.scale.linear().domain([0,1]).range(["#fff",a.color]),c=.6;d3.select(this).style("border-bottom-color",b(c)).style("border-top-color",b(c))}});var f=b.node().outerHTML;return void 0!==a.footer&&(f+=""),f},B=function(a){if(a&&a.series){if(a.series instanceof Array)return!!a.series.length;if(a.series instanceof Object)return a.series=[a.series],!0}return!1},C=function(b){o&&a.dom.read(function(){var c,d,e=parseInt(o.offsetHeight,10),h=parseInt(o.offsetWidth,10),i=a.utils.windowSize().width,j=a.utils.windowSize().height,k=window.pageYOffset,p=window.pageXOffset;j=window.innerWidth>=document.body.scrollWidth?j:j-16,i=window.innerHeight>=document.body.scrollHeight?i:i-16;var r,t,u=function(a){var b=d;do isNaN(a.offsetTop)||(b+=a.offsetTop),a=a.offsetParent;while(a);return b},v=function(a){var b=c;do isNaN(a.offsetLeft)||(b+=a.offsetLeft),a=a.offsetParent;while(a);return b};switch(f){case"e":c=b[0]-h-g,d=b[1]-e/2,r=v(o),t=u(o),p>r&&(c=b[0]+g>p?b[0]+g:p-r+c),k>t&&(d=k-t+d),t+e>k+j&&(d=k+j-t+d-e);break;case"w":c=b[0]+g,d=b[1]-e/2,r=v(o),t=u(o),r+h>i&&(c=b[0]-h-g),k>t&&(d=k+5),t+e>k+j&&(d=k+j-t+d-e);break;case"n":c=b[0]-h/2-5,d=b[1]+g,r=v(o),t=u(o),p>r&&(c=p+5),r+h>i&&(c=c-h/2+5),t+e>k+j&&(d=k+j-t+d-e);break;case"s":c=b[0]-h/2,d=b[1]-e-g,r=v(o),t=u(o),p>r&&(c=p+5),r+h>i&&(c=c-h/2+5),k>t&&(d=k);break;case"none":c=b[0],d=b[1]-g,r=v(o),t=u(o)}c-=q.left,d-=q.top;var w=o.getBoundingClientRect(),k=window.pageYOffset||document.documentElement.scrollTop,p=window.pageXOffset||document.documentElement.scrollLeft,x="translate("+(w.left+p)+"px, "+(w.top+k)+"px)",y="translate("+c+"px, "+d+"px)",z=d3.interpolateString(x,y),A=n.style("opacity")<.1;l?n.transition().delay(m).duration(0).style("opacity",0):n.interrupt().transition().duration(A?0:s).styleTween("transform",function(){return z},"important").style("-webkit-transform",y).style("opacity",1)})};return d.nvPointerEventsClass=w,d.options=a.utils.optionsFunc.bind(d),d._options=Object.create({},{duration:{get:function(){return s},set:function(a){s=a}},gravity:{get:function(){return f},set:function(a){f=a}},distance:{get:function(){return g},set:function(a){g=a}},snapDistance:{get:function(){return h},set:function(a){h=a}},classes:{get:function(){return j},set:function(a){j=a}},chartContainer:{get:function(){return k},set:function(a){k=a}},fixedTop:{get:function(){return i},set:function(a){i=a}},enabled:{get:function(){return r},set:function(a){r=a}},hideDelay:{get:function(){return m},set:function(a){m=a}},contentGenerator:{get:function(){return A},set:function(a){A=a}},valueFormatter:{get:function(){return x},set:function(a){x=a}},headerFormatter:{get:function(){return y},set:function(a){y=a}},keyFormatter:{get:function(){return z},set:function(a){z=a}},headerEnabled:{get:function(){return t},set:function(a){t=a}},_isInteractiveLayer:{get:function(){return u},set:function(a){u=!!a}},position:{get:function(){return p},set:function(a){p.left=void 0!==a.left?a.left:p.left,p.top=void 0!==a.top?a.top:p.top}},offset:{get:function(){return q},set:function(a){q.left=void 0!==a.left?a.left:q.left,q.top=void 0!==a.top?a.top:q.top}},hidden:{get:function(){return l},set:function(a){l!=a&&(l=!!a,d())}},data:{get:function(){return e},set:function(a){a.point&&(a.value=a.point.x,a.series=a.series||{},a.series.value=a.point.y,a.series.color=a.point.color||a.series.color),e=a}},tooltipElem:{get:function(){return o},set:function(){}},id:{get:function(){return v},set:function(){}}}),a.utils.initOptions(d),d}}(),a.utils.windowSize=function(){var a={width:640,height:480};return window.innerWidth&&window.innerHeight?(a.width=window.innerWidth,a.height=window.innerHeight,a):"CSS1Compat"==document.compatMode&&document.documentElement&&document.documentElement.offsetWidth?(a.width=document.documentElement.offsetWidth,a.height=document.documentElement.offsetHeight,a):document.body&&document.body.offsetWidth?(a.width=document.body.offsetWidth,a.height=document.body.offsetHeight,a):a},a.utils.windowResize=function(b){return window.addEventListener?window.addEventListener("resize",b):a.log("ERROR: Failed to bind to window.resize with: ",b),{callback:b,clear:function(){window.removeEventListener("resize",b)}}},a.utils.getColor=function(b){if(void 0===b)return a.utils.defaultColor();if(Array.isArray(b)){var c=d3.scale.ordinal().range(b);return function(a,b){var d=void 0===b?a:b;return a.color||c(d)}}return b},a.utils.defaultColor=function(){return a.utils.getColor(d3.scale.category20().range())},a.utils.customTheme=function(a,b,c){b=b||function(a){return a.key},c=c||d3.scale.category20().range();var d=c.length;return function(e){var f=b(e);return"function"==typeof a[f]?a[f]():void 0!==a[f]?a[f]:(d||(d=c.length),d-=1,c[d])}},a.utils.pjax=function(b,c){var d=function(d){d3.html(d,function(d){var e=d3.select(c).node();e.parentNode.replaceChild(d3.select(d).select(c).node(),e),a.utils.pjax(b,c)})};d3.selectAll(b).on("click",function(){history.pushState(this.href,this.textContent,this.href),d(this.href),d3.event.preventDefault()}),d3.select(window).on("popstate",function(){d3.event.state&&d(d3.event.state)})},a.utils.calcApproxTextWidth=function(a){if("function"==typeof a.style&&"function"==typeof a.text){var b=parseInt(a.style("font-size").replace("px",""),10),c=a.text().length;return c*b*.5}return 0},a.utils.NaNtoZero=function(a){return"number"!=typeof a||isNaN(a)||null===a||1/0===a||a===-1/0?0:a},d3.selection.prototype.watchTransition=function(a){var b=[this].concat([].slice.call(arguments,1));return a.transition.apply(a,b)},a.utils.renderWatch=function(b,c){if(!(this instanceof a.utils.renderWatch))return new a.utils.renderWatch(b,c);var d=void 0!==c?c:250,e=[],f=this;this.models=function(a){return a=[].slice.call(arguments,0),a.forEach(function(a){a.__rendered=!1,function(a){a.dispatch.on("renderEnd",function(){a.__rendered=!0,f.renderEnd("model")})}(a),e.indexOf(a)<0&&e.push(a)}),this},this.reset=function(a){void 0!==a&&(d=a),e=[]},this.transition=function(a,b,c){if(b=arguments.length>1?[].slice.call(arguments,1):[],c=b.length>1?b.pop():void 0!==d?d:250,a.__rendered=!1,e.indexOf(a)<0&&e.push(a),0===c)return a.__rendered=!0,a.delay=function(){return this},a.duration=function(){return this},a;a.__rendered=0===a.length?!0:a.every(function(a){return!a.length})?!0:!1;var g=0;return a.transition().duration(c).each(function(){++g}).each("end",function(){0===--g&&(a.__rendered=!0,f.renderEnd.apply(this,b))})},this.renderEnd=function(){e.every(function(a){return a.__rendered})&&(e.forEach(function(a){a.__rendered=!1}),b.renderEnd.apply(this,arguments))}},a.utils.deepExtend=function(b){var c=arguments.length>1?[].slice.call(arguments,1):[];c.forEach(function(c){for(var d in c){var e=b[d]instanceof Array,f="object"==typeof b[d],g="object"==typeof c[d];f&&!e&&g?a.utils.deepExtend(b[d],c[d]):b[d]=c[d]}})},a.utils.state=function(){if(!(this instanceof a.utils.state))return new a.utils.state;var b={},c=function(){},d=function(){return{}},e=null,f=null;this.dispatch=d3.dispatch("change","set"),this.dispatch.on("set",function(a){c(a,!0)}),this.getter=function(a){return d=a,this},this.setter=function(a,b){return b||(b=function(){}),c=function(c,d){a(c),d&&b()},this},this.init=function(b){e=e||{},a.utils.deepExtend(e,b)};var g=function(){var a=d();if(JSON.stringify(a)===JSON.stringify(b))return!1;for(var c in a)void 0===b[c]&&(b[c]={}),b[c]=a[c],f=!0;return!0};this.update=function(){e&&(c(e,!1),e=null),g.call(this)&&this.dispatch.change(b)}},a.utils.optionsFunc=function(a){return a&&d3.map(a).forEach(function(a,b){"function"==typeof this[a]&&this[a](b)}.bind(this)),this},a.utils.calcTicksX=function(b,c){var d=1,e=0;for(e;ed?f:d}return a.log("Requested number of ticks: ",b),a.log("Calculated max values to be: ",d),b=b>d?b=d-1:b,b=1>b?1:b,b=Math.floor(b),a.log("Calculating tick count as: ",b),b},a.utils.calcTicksY=function(b,c){return a.utils.calcTicksX(b,c)},a.utils.initOption=function(a,b){a._calls&&a._calls[b]?a[b]=a._calls[b]:(a[b]=function(c){return arguments.length?(a._overrides[b]=!0,a._options[b]=c,a):a._options[b]},a["_"+b]=function(c){return arguments.length?(a._overrides[b]||(a._options[b]=c),a):a._options[b]})},a.utils.initOptions=function(b){b._overrides=b._overrides||{};var c=Object.getOwnPropertyNames(b._options||{}),d=Object.getOwnPropertyNames(b._calls||{});c=c.concat(d);for(var e in c)a.utils.initOption(b,c[e])},a.utils.inheritOptionsD3=function(a,b,c){a._d3options=c.concat(a._d3options||[]),c.unshift(b),c.unshift(a),d3.rebind.apply(this,c)},a.utils.arrayUnique=function(a){return a.sort().filter(function(b,c){return!c||b!=a[c-1]})},a.utils.symbolMap=d3.map(),a.utils.symbol=function(){function b(b,e){var f=c.call(this,b,e),g=d.call(this,b,e);return-1!==d3.svg.symbolTypes.indexOf(f)?d3.svg.symbol().type(f).size(g)():a.utils.symbolMap.get(f)(g)}var c,d=64;return b.type=function(a){return arguments.length?(c=d3.functor(a),b):c},b.size=function(a){return arguments.length?(d=d3.functor(a),b):d},b},a.utils.inheritOptions=function(b,c){var d=Object.getOwnPropertyNames(c._options||{}),e=Object.getOwnPropertyNames(c._calls||{}),f=c._inherited||[],g=c._d3options||[],h=d.concat(e).concat(f).concat(g);h.unshift(c),h.unshift(b),d3.rebind.apply(this,h),b._inherited=a.utils.arrayUnique(d.concat(e).concat(f).concat(d).concat(b._inherited||[])),b._d3options=a.utils.arrayUnique(g.concat(b._d3options||[]))},a.utils.initSVG=function(a){a.classed({"nvd3-svg":!0})},a.utils.sanitizeHeight=function(a,b){return a||parseInt(b.style("height"),10)||400},a.utils.sanitizeWidth=function(a,b){return a||parseInt(b.style("width"),10)||960},a.utils.availableHeight=function(b,c,d){return a.utils.sanitizeHeight(b,c)-d.top-d.bottom},a.utils.availableWidth=function(b,c,d){return a.utils.sanitizeWidth(b,c)-d.left-d.right},a.utils.noData=function(b,c){var d=b.options(),e=d.margin(),f=d.noData(),g=null==f?["No Data Available."]:[f],h=a.utils.availableHeight(d.height(),c,e),i=a.utils.availableWidth(d.width(),c,e),j=e.left+i/2,k=e.top+h/2;c.selectAll("g").remove();var l=c.selectAll(".nv-noData").data(g);l.enter().append("text").attr("class","nvd3 nv-noData").attr("dy","-.7em").style("text-anchor","middle"),l.attr("x",j).attr("y",k).text(function(a){return a})},a.models.axis=function(){"use strict";function b(g){return s.reset(),g.each(function(b){var g=d3.select(this);a.utils.initSVG(g);var p=g.selectAll("g.nv-wrap.nv-axis").data([b]),q=p.enter().append("g").attr("class","nvd3 nv-wrap nv-axis"),t=(q.append("g"),p.select("g"));null!==n?c.ticks(n):("top"==c.orient()||"bottom"==c.orient())&&c.ticks(Math.abs(d.range()[1]-d.range()[0])/100),t.watchTransition(s,"axis").call(c),r=r||c.scale();var u=c.tickFormat();null==u&&(u=r.tickFormat());var v=t.selectAll("text.nv-axislabel").data([h||null]);v.exit().remove();var w,x,y;switch(c.orient()){case"top":v.enter().append("text").attr("class","nv-axislabel"),y=d.range().length<2?0:2===d.range().length?d.range()[1]:d.range()[d.range().length-1]+(d.range()[1]-d.range()[0]),v.attr("text-anchor","middle").attr("y",0).attr("x",y/2),i&&(x=p.selectAll("g.nv-axisMaxMin").data(d.domain()),x.enter().append("g").attr("class",function(a,b){return["nv-axisMaxMin","nv-axisMaxMin-x",0==b?"nv-axisMin-x":"nv-axisMax-x"].join(" ")}).append("text"),x.exit().remove(),x.attr("transform",function(b){return"translate("+a.utils.NaNtoZero(d(b))+",0)"}).select("text").attr("dy","-0.5em").attr("y",-c.tickPadding()).attr("text-anchor","middle").text(function(a){var b=u(a);return(""+b).match("NaN")?"":b}),x.watchTransition(s,"min-max top").attr("transform",function(b,c){return"translate("+a.utils.NaNtoZero(d.range()[c])+",0)"}));break;case"bottom":w=o+36;var z=30,A=0,B=t.selectAll("g").select("text"),C="";if(j%360){B.each(function(){var a=this.getBoundingClientRect(),b=a.width;A=a.height,b>z&&(z=b)}),C="rotate("+j+" 0,"+(A/2+c.tickPadding())+")";var D=Math.abs(Math.sin(j*Math.PI/180));w=(D?D*z:z)+30,B.attr("transform",C).style("text-anchor",j%360>0?"start":"end")}v.enter().append("text").attr("class","nv-axislabel"),y=d.range().length<2?0:2===d.range().length?d.range()[1]:d.range()[d.range().length-1]+(d.range()[1]-d.range()[0]),v.attr("text-anchor","middle").attr("y",w).attr("x",y/2),i&&(x=p.selectAll("g.nv-axisMaxMin").data([d.domain()[0],d.domain()[d.domain().length-1]]),x.enter().append("g").attr("class",function(a,b){return["nv-axisMaxMin","nv-axisMaxMin-x",0==b?"nv-axisMin-x":"nv-axisMax-x"].join(" ")}).append("text"),x.exit().remove(),x.attr("transform",function(b){return"translate("+a.utils.NaNtoZero(d(b)+(m?d.rangeBand()/2:0))+",0)"}).select("text").attr("dy",".71em").attr("y",c.tickPadding()).attr("transform",C).style("text-anchor",j?j%360>0?"start":"end":"middle").text(function(a){var b=u(a);return(""+b).match("NaN")?"":b}),x.watchTransition(s,"min-max bottom").attr("transform",function(b){return"translate("+a.utils.NaNtoZero(d(b)+(m?d.rangeBand()/2:0))+",0)"})),l&&B.attr("transform",function(a,b){return"translate(0,"+(b%2==0?"0":"12")+")"});break;case"right":v.enter().append("text").attr("class","nv-axislabel"),v.style("text-anchor",k?"middle":"begin").attr("transform",k?"rotate(90)":"").attr("y",k?-Math.max(e.right,f)+12:-10).attr("x",k?d3.max(d.range())/2:c.tickPadding()),i&&(x=p.selectAll("g.nv-axisMaxMin").data(d.domain()),x.enter().append("g").attr("class",function(a,b){return["nv-axisMaxMin","nv-axisMaxMin-y",0==b?"nv-axisMin-y":"nv-axisMax-y"].join(" ")}).append("text").style("opacity",0),x.exit().remove(),x.attr("transform",function(b){return"translate(0,"+a.utils.NaNtoZero(d(b))+")"}).select("text").attr("dy",".32em").attr("y",0).attr("x",c.tickPadding()).style("text-anchor","start").text(function(a){var b=u(a);return(""+b).match("NaN")?"":b}),x.watchTransition(s,"min-max right").attr("transform",function(b,c){return"translate(0,"+a.utils.NaNtoZero(d.range()[c])+")"}).select("text").style("opacity",1));break;case"left":v.enter().append("text").attr("class","nv-axislabel"),v.style("text-anchor",k?"middle":"end").attr("transform",k?"rotate(-90)":"").attr("y",k?-Math.max(e.left,f)+25-(o||0):-10).attr("x",k?-d3.max(d.range())/2:-c.tickPadding()),i&&(x=p.selectAll("g.nv-axisMaxMin").data(d.domain()),x.enter().append("g").attr("class",function(a,b){return["nv-axisMaxMin","nv-axisMaxMin-y",0==b?"nv-axisMin-y":"nv-axisMax-y"].join(" ")}).append("text").style("opacity",0),x.exit().remove(),x.attr("transform",function(b){return"translate(0,"+a.utils.NaNtoZero(r(b))+")"}).select("text").attr("dy",".32em").attr("y",0).attr("x",-c.tickPadding()).attr("text-anchor","end").text(function(a){var b=u(a);return(""+b).match("NaN")?"":b}),x.watchTransition(s,"min-max right").attr("transform",function(b,c){return"translate(0,"+a.utils.NaNtoZero(d.range()[c])+")"}).select("text").style("opacity",1))}if(v.text(function(a){return a}),!i||"left"!==c.orient()&&"right"!==c.orient()||(t.selectAll("g").each(function(a){d3.select(this).select("text").attr("opacity",1),(d(a)d.range()[0]-10)&&((a>1e-10||-1e-10>a)&&d3.select(this).attr("opacity",0),d3.select(this).select("text").attr("opacity",0))}),d.domain()[0]==d.domain()[1]&&0==d.domain()[0]&&p.selectAll("g.nv-axisMaxMin").style("opacity",function(a,b){return b?0:1})),i&&("top"===c.orient()||"bottom"===c.orient())){var E=[];p.selectAll("g.nv-axisMaxMin").each(function(a,b){try{E.push(b?d(a)-this.getBoundingClientRect().width-4:d(a)+this.getBoundingClientRect().width+4)}catch(c){E.push(b?d(a)-4:d(a)+4)}}),t.selectAll("g").each(function(a){(d(a)E[1])&&(a>1e-10||-1e-10>a?d3.select(this).remove():d3.select(this).select("text").remove())})}t.selectAll(".tick").filter(function(a){return!parseFloat(Math.round(1e5*a)/1e6)&&void 0!==a}).classed("zero",!0),r=d.copy()}),s.renderEnd("axis immediate"),b}var c=d3.svg.axis(),d=d3.scale.linear(),e={top:0,right:0,bottom:0,left:0},f=75,g=60,h=null,i=!0,j=0,k=!0,l=!1,m=!1,n=null,o=0,p=250,q=d3.dispatch("renderEnd");c.scale(d).orient("bottom").tickFormat(function(a){return a});var r,s=a.utils.renderWatch(q,p);return b.axis=c,b.dispatch=q,b.options=a.utils.optionsFunc.bind(b),b._options=Object.create({},{axisLabelDistance:{get:function(){return o},set:function(a){o=a}},staggerLabels:{get:function(){return l},set:function(a){l=a}},rotateLabels:{get:function(){return j},set:function(a){j=a}},rotateYLabel:{get:function(){return k},set:function(a){k=a}},showMaxMin:{get:function(){return i},set:function(a){i=a}},axisLabel:{get:function(){return h},set:function(a){h=a}},height:{get:function(){return g},set:function(a){g=a}},ticks:{get:function(){return n},set:function(a){n=a}},width:{get:function(){return f},set:function(a){f=a}},margin:{get:function(){return e},set:function(a){e.top=void 0!==a.top?a.top:e.top,e.right=void 0!==a.right?a.right:e.right,e.bottom=void 0!==a.bottom?a.bottom:e.bottom,e.left=void 0!==a.left?a.left:e.left}},duration:{get:function(){return p},set:function(a){p=a,s.reset(p)}},scale:{get:function(){return d},set:function(e){d=e,c.scale(d),m="function"==typeof d.rangeBands,a.utils.inheritOptionsD3(b,d,["domain","range","rangeBand","rangeBands"])}}}),a.utils.initOptions(b),a.utils.inheritOptionsD3(b,c,["orient","tickValues","tickSubdivide","tickSize","tickPadding","tickFormat"]),a.utils.inheritOptionsD3(b,d,["domain","range","rangeBand","rangeBands"]),b},a.models.boxPlot=function(){"use strict";function b(l){return v.reset(),l.each(function(b){var l=j-i.left-i.right,p=k-i.top-i.bottom;r=d3.select(this),a.utils.initSVG(r),m.domain(c||b.map(function(a,b){return o(a,b)})).rangeBands(e||[0,l],.1);var w=[];if(!d){var x=d3.min(b.map(function(a){var b=[];return b.push(a.values.Q1),a.values.hasOwnProperty("whisker_low")&&null!==a.values.whisker_low&&b.push(a.values.whisker_low),a.values.hasOwnProperty("outliers")&&null!==a.values.outliers&&(b=b.concat(a.values.outliers)),d3.min(b)})),y=d3.max(b.map(function(a){var b=[];return b.push(a.values.Q3),a.values.hasOwnProperty("whisker_high")&&null!==a.values.whisker_high&&b.push(a.values.whisker_high),a.values.hasOwnProperty("outliers")&&null!==a.values.outliers&&(b=b.concat(a.values.outliers)),d3.max(b)}));w=[x,y]}n.domain(d||w),n.range(f||[p,0]),g=g||m,h=h||n.copy().range([n(0),n(0)]);{var z=r.selectAll("g.nv-wrap").data([b]);z.enter().append("g").attr("class","nvd3 nv-wrap")}z.attr("transform","translate("+i.left+","+i.top+")");var A=z.selectAll(".nv-boxplot").data(function(a){return a}),B=A.enter().append("g").style("stroke-opacity",1e-6).style("fill-opacity",1e-6);A.attr("class","nv-boxplot").attr("transform",function(a,b){return"translate("+(m(o(a,b))+.05*m.rangeBand())+", 0)"}).classed("hover",function(a){return a.hover}),A.watchTransition(v,"nv-boxplot: boxplots").style("stroke-opacity",1).style("fill-opacity",.75).delay(function(a,c){return c*t/b.length}).attr("transform",function(a,b){return"translate("+(m(o(a,b))+.05*m.rangeBand())+", 0)"}),A.exit().remove(),B.each(function(a,b){var c=d3.select(this);["low","high"].forEach(function(d){a.values.hasOwnProperty("whisker_"+d)&&null!==a.values["whisker_"+d]&&(c.append("line").style("stroke",a.color?a.color:q(a,b)).attr("class","nv-boxplot-whisker nv-boxplot-"+d),c.append("line").style("stroke",a.color?a.color:q(a,b)).attr("class","nv-boxplot-tick nv-boxplot-"+d))})});var C=A.selectAll(".nv-boxplot-outlier").data(function(a){return a.values.hasOwnProperty("outliers")&&null!==a.values.outliers?a.values.outliers:[]});C.enter().append("circle").style("fill",function(a,b,c){return q(a,c)}).style("stroke",function(a,b,c){return q(a,c)}).on("mouseover",function(a,b,c){d3.select(this).classed("hover",!0),s.elementMouseover({series:{key:a,color:q(a,c)},e:d3.event})}).on("mouseout",function(a,b,c){d3.select(this).classed("hover",!1),s.elementMouseout({series:{key:a,color:q(a,c)},e:d3.event})}).on("mousemove",function(){s.elementMousemove({e:d3.event})}),C.attr("class","nv-boxplot-outlier"),C.watchTransition(v,"nv-boxplot: nv-boxplot-outlier").attr("cx",.45*m.rangeBand()).attr("cy",function(a){return n(a)}).attr("r","3"),C.exit().remove();var D=function(){return null===u?.9*m.rangeBand():Math.min(75,.9*m.rangeBand())},E=function(){return.45*m.rangeBand()-D()/2},F=function(){return.45*m.rangeBand()+D()/2};["low","high"].forEach(function(a){var b="low"===a?"Q1":"Q3";A.select("line.nv-boxplot-whisker.nv-boxplot-"+a).watchTransition(v,"nv-boxplot: boxplots").attr("x1",.45*m.rangeBand()).attr("y1",function(b){return n(b.values["whisker_"+a])}).attr("x2",.45*m.rangeBand()).attr("y2",function(a){return n(a.values[b])}),A.select("line.nv-boxplot-tick.nv-boxplot-"+a).watchTransition(v,"nv-boxplot: boxplots").attr("x1",E).attr("y1",function(b){return n(b.values["whisker_"+a])}).attr("x2",F).attr("y2",function(b){return n(b.values["whisker_"+a])})}),["low","high"].forEach(function(a){B.selectAll(".nv-boxplot-"+a).on("mouseover",function(b,c,d){d3.select(this).classed("hover",!0),s.elementMouseover({series:{key:b.values["whisker_"+a],color:q(b,d)},e:d3.event})}).on("mouseout",function(b,c,d){d3.select(this).classed("hover",!1),s.elementMouseout({series:{key:b.values["whisker_"+a],color:q(b,d)},e:d3.event})}).on("mousemove",function(){s.elementMousemove({e:d3.event})})}),B.append("rect").attr("class","nv-boxplot-box").on("mouseover",function(a,b){d3.select(this).classed("hover",!0),s.elementMouseover({key:a.label,value:a.label,series:[{key:"Q3",value:a.values.Q3,color:a.color||q(a,b)},{key:"Q2",value:a.values.Q2,color:a.color||q(a,b)},{key:"Q1",value:a.values.Q1,color:a.color||q(a,b)}],data:a,index:b,e:d3.event})}).on("mouseout",function(a,b){d3.select(this).classed("hover",!1),s.elementMouseout({key:a.label,value:a.label,series:[{key:"Q3",value:a.values.Q3,color:a.color||q(a,b)},{key:"Q2",value:a.values.Q2,color:a.color||q(a,b)},{key:"Q1",value:a.values.Q1,color:a.color||q(a,b)}],data:a,index:b,e:d3.event})}).on("mousemove",function(){s.elementMousemove({e:d3.event})}),A.select("rect.nv-boxplot-box").watchTransition(v,"nv-boxplot: boxes").attr("y",function(a){return n(a.values.Q3)}).attr("width",D).attr("x",E).attr("height",function(a){return Math.abs(n(a.values.Q3)-n(a.values.Q1))||1}).style("fill",function(a,b){return a.color||q(a,b)}).style("stroke",function(a,b){return a.color||q(a,b)}),B.append("line").attr("class","nv-boxplot-median"),A.select("line.nv-boxplot-median").watchTransition(v,"nv-boxplot: boxplots line").attr("x1",E).attr("y1",function(a){return n(a.values.Q2)}).attr("x2",F).attr("y2",function(a){return n(a.values.Q2)}),g=m.copy(),h=n.copy()}),v.renderEnd("nv-boxplot immediate"),b}var c,d,e,f,g,h,i={top:0,right:0,bottom:0,left:0},j=960,k=500,l=Math.floor(1e4*Math.random()),m=d3.scale.ordinal(),n=d3.scale.linear(),o=function(a){return a.x},p=function(a){return a.y},q=a.utils.defaultColor(),r=null,s=d3.dispatch("elementMouseover","elementMouseout","elementMousemove","renderEnd"),t=250,u=null,v=a.utils.renderWatch(s,t);return b.dispatch=s,b.options=a.utils.optionsFunc.bind(b),b._options=Object.create({},{width:{get:function(){return j},set:function(a){j=a}},height:{get:function(){return k},set:function(a){k=a}},maxBoxWidth:{get:function(){return u},set:function(a){u=a}},x:{get:function(){return o},set:function(a){o=a}},y:{get:function(){return p},set:function(a){p=a}},xScale:{get:function(){return m},set:function(a){m=a}},yScale:{get:function(){return n},set:function(a){n=a}},xDomain:{get:function(){return c},set:function(a){c=a}},yDomain:{get:function(){return d},set:function(a){d=a}},xRange:{get:function(){return e},set:function(a){e=a}},yRange:{get:function(){return f},set:function(a){f=a}},id:{get:function(){return l},set:function(a){l=a}},margin:{get:function(){return i},set:function(a){i.top=void 0!==a.top?a.top:i.top,i.right=void 0!==a.right?a.right:i.right,i.bottom=void 0!==a.bottom?a.bottom:i.bottom,i.left=void 0!==a.left?a.left:i.left}},color:{get:function(){return q},set:function(b){q=a.utils.getColor(b)}},duration:{get:function(){return t},set:function(a){t=a,v.reset(t)}}}),a.utils.initOptions(b),b},a.models.boxPlotChart=function(){"use strict";function b(k){return t.reset(),t.models(e),l&&t.models(f),m&&t.models(g),k.each(function(k){var p=d3.select(this);a.utils.initSVG(p);var t=(i||parseInt(p.style("width"))||960)-h.left-h.right,u=(j||parseInt(p.style("height"))||400)-h.top-h.bottom;if(b.update=function(){r.beforeUpdate(),p.transition().duration(s).call(b)},b.container=this,!(k&&k.length&&k.filter(function(a){return a.values.hasOwnProperty("Q1")&&a.values.hasOwnProperty("Q2")&&a.values.hasOwnProperty("Q3")}).length)){var v=p.selectAll(".nv-noData").data([q]);return v.enter().append("text").attr("class","nvd3 nv-noData").attr("dy","-.7em").style("text-anchor","middle"),v.attr("x",h.left+t/2).attr("y",h.top+u/2).text(function(a){return a}),b}p.selectAll(".nv-noData").remove(),c=e.xScale(),d=e.yScale().clamp(!0);var w=p.selectAll("g.nv-wrap.nv-boxPlotWithAxes").data([k]),x=w.enter().append("g").attr("class","nvd3 nv-wrap nv-boxPlotWithAxes").append("g"),y=x.append("defs"),z=w.select("g"); x.append("g").attr("class","nv-x nv-axis"),x.append("g").attr("class","nv-y nv-axis").append("g").attr("class","nv-zeroLine").append("line"),x.append("g").attr("class","nv-barsWrap"),z.attr("transform","translate("+h.left+","+h.top+")"),n&&z.select(".nv-y.nv-axis").attr("transform","translate("+t+",0)"),e.width(t).height(u);var A=z.select(".nv-barsWrap").datum(k.filter(function(a){return!a.disabled}));if(A.transition().call(e),y.append("clipPath").attr("id","nv-x-label-clip-"+e.id()).append("rect"),z.select("#nv-x-label-clip-"+e.id()+" rect").attr("width",c.rangeBand()*(o?2:1)).attr("height",16).attr("x",-c.rangeBand()/(o?1:2)),l){f.scale(c).ticks(a.utils.calcTicksX(t/100,k)).tickSize(-u,0),z.select(".nv-x.nv-axis").attr("transform","translate(0,"+d.range()[0]+")"),z.select(".nv-x.nv-axis").call(f);var B=z.select(".nv-x.nv-axis").selectAll("g");o&&B.selectAll("text").attr("transform",function(a,b,c){return"translate(0,"+(c%2==0?"5":"17")+")"})}m&&(g.scale(d).ticks(Math.floor(u/36)).tickSize(-t,0),z.select(".nv-y.nv-axis").call(g)),z.select(".nv-zeroLine line").attr("x1",0).attr("x2",t).attr("y1",d(0)).attr("y2",d(0))}),t.renderEnd("nv-boxplot chart immediate"),b}var c,d,e=a.models.boxPlot(),f=a.models.axis(),g=a.models.axis(),h={top:15,right:10,bottom:50,left:60},i=null,j=null,k=a.utils.getColor(),l=!0,m=!0,n=!1,o=!1,p=a.models.tooltip(),q="No Data Available.",r=d3.dispatch("tooltipShow","tooltipHide","beforeUpdate","renderEnd"),s=250;f.orient("bottom").showMaxMin(!1).tickFormat(function(a){return a}),g.orient(n?"right":"left").tickFormat(d3.format(",.1f")),p.duration(0);var t=a.utils.renderWatch(r,s);return e.dispatch.on("elementMouseover.tooltip",function(a){p.data(a).hidden(!1)}),e.dispatch.on("elementMouseout.tooltip",function(a){p.data(a).hidden(!0)}),e.dispatch.on("elementMousemove.tooltip",function(){p.position({top:d3.event.pageY,left:d3.event.pageX})()}),b.dispatch=r,b.boxplot=e,b.xAxis=f,b.yAxis=g,b.tooltip=p,b.options=a.utils.optionsFunc.bind(b),b._options=Object.create({},{width:{get:function(){return i},set:function(a){i=a}},height:{get:function(){return j},set:function(a){j=a}},staggerLabels:{get:function(){return o},set:function(a){o=a}},showXAxis:{get:function(){return l},set:function(a){l=a}},showYAxis:{get:function(){return m},set:function(a){m=a}},tooltips:{get:function(){return tooltips},set:function(a){tooltips=a}},tooltipContent:{get:function(){return p},set:function(a){p=a}},noData:{get:function(){return q},set:function(a){q=a}},margin:{get:function(){return h},set:function(a){h.top=void 0!==a.top?a.top:h.top,h.right=void 0!==a.right?a.right:h.right,h.bottom=void 0!==a.bottom?a.bottom:h.bottom,h.left=void 0!==a.left?a.left:h.left}},duration:{get:function(){return s},set:function(a){s=a,t.reset(s),e.duration(s),f.duration(s),g.duration(s)}},color:{get:function(){return k},set:function(b){k=a.utils.getColor(b),e.color(k)}},rightAlignYAxis:{get:function(){return n},set:function(a){n=a,g.orient(a?"right":"left")}}}),a.utils.inheritOptions(b,e),a.utils.initOptions(b),b},a.models.bullet=function(){"use strict";function b(d){return d.each(function(b,d){var p=m-c.left-c.right,s=n-c.top-c.bottom;o=d3.select(this),a.utils.initSVG(o);{var t=f.call(this,b,d).slice().sort(d3.descending),u=g.call(this,b,d).slice().sort(d3.descending),v=h.call(this,b,d).slice().sort(d3.descending),w=i.call(this,b,d).slice(),x=j.call(this,b,d).slice(),y=k.call(this,b,d).slice(),z=d3.scale.linear().domain(d3.extent(d3.merge([l,t]))).range(e?[p,0]:[0,p]);this.__chart__||d3.scale.linear().domain([0,1/0]).range(z.range())}this.__chart__=z;var A=d3.min(t),B=d3.max(t),C=t[1],D=o.selectAll("g.nv-wrap.nv-bullet").data([b]),E=D.enter().append("g").attr("class","nvd3 nv-wrap nv-bullet"),F=E.append("g"),G=D.select("g");F.append("rect").attr("class","nv-range nv-rangeMax"),F.append("rect").attr("class","nv-range nv-rangeAvg"),F.append("rect").attr("class","nv-range nv-rangeMin"),F.append("rect").attr("class","nv-measure"),D.attr("transform","translate("+c.left+","+c.top+")");var H=function(a){return Math.abs(z(a)-z(0))},I=function(a){return z(0>a?a:0)};G.select("rect.nv-rangeMax").attr("height",s).attr("width",H(B>0?B:A)).attr("x",I(B>0?B:A)).datum(B>0?B:A),G.select("rect.nv-rangeAvg").attr("height",s).attr("width",H(C)).attr("x",I(C)).datum(C),G.select("rect.nv-rangeMin").attr("height",s).attr("width",H(B)).attr("x",I(B)).attr("width",H(B>0?A:B)).attr("x",I(B>0?A:B)).datum(B>0?A:B),G.select("rect.nv-measure").style("fill",q).attr("height",s/3).attr("y",s/3).attr("width",0>v?z(0)-z(v[0]):z(v[0])-z(0)).attr("x",I(v)).on("mouseover",function(){r.elementMouseover({value:v[0],label:y[0]||"Current",color:d3.select(this).style("fill")})}).on("mousemove",function(){r.elementMousemove({value:v[0],label:y[0]||"Current",color:d3.select(this).style("fill")})}).on("mouseout",function(){r.elementMouseout({value:v[0],label:y[0]||"Current",color:d3.select(this).style("fill")})});var J=s/6,K=u.map(function(a,b){return{value:a,label:x[b]}});F.selectAll("path.nv-markerTriangle").data(K).enter().append("path").attr("class","nv-markerTriangle").attr("transform",function(a){return"translate("+z(a.value)+","+s/2+")"}).attr("d","M0,"+J+"L"+J+","+-J+" "+-J+","+-J+"Z").on("mouseover",function(a){r.elementMouseover({value:a.value,label:a.label||"Previous",color:d3.select(this).style("fill"),pos:[z(a.value),s/2]})}).on("mousemove",function(a){r.elementMousemove({value:a.value,label:a.label||"Previous",color:d3.select(this).style("fill")})}).on("mouseout",function(a){r.elementMouseout({value:a.value,label:a.label||"Previous",color:d3.select(this).style("fill")})}),D.selectAll(".nv-range").on("mouseover",function(a,b){var c=w[b]||(b?1==b?"Mean":"Minimum":"Maximum");r.elementMouseover({value:a,label:c,color:d3.select(this).style("fill")})}).on("mousemove",function(){r.elementMousemove({value:v[0],label:y[0]||"Previous",color:d3.select(this).style("fill")})}).on("mouseout",function(a,b){var c=w[b]||(b?1==b?"Mean":"Minimum":"Maximum");r.elementMouseout({value:a,label:c,color:d3.select(this).style("fill")})})}),b}var c={top:0,right:0,bottom:0,left:0},d="left",e=!1,f=function(a){return a.ranges},g=function(a){return a.markers?a.markers:[0]},h=function(a){return a.measures},i=function(a){return a.rangeLabels?a.rangeLabels:[]},j=function(a){return a.markerLabels?a.markerLabels:[]},k=function(a){return a.measureLabels?a.measureLabels:[]},l=[0],m=380,n=30,o=null,p=null,q=a.utils.getColor(["#1f77b4"]),r=d3.dispatch("elementMouseover","elementMouseout","elementMousemove");return b.dispatch=r,b.options=a.utils.optionsFunc.bind(b),b._options=Object.create({},{ranges:{get:function(){return f},set:function(a){f=a}},markers:{get:function(){return g},set:function(a){g=a}},measures:{get:function(){return h},set:function(a){h=a}},forceX:{get:function(){return l},set:function(a){l=a}},width:{get:function(){return m},set:function(a){m=a}},height:{get:function(){return n},set:function(a){n=a}},tickFormat:{get:function(){return p},set:function(a){p=a}},margin:{get:function(){return c},set:function(a){c.top=void 0!==a.top?a.top:c.top,c.right=void 0!==a.right?a.right:c.right,c.bottom=void 0!==a.bottom?a.bottom:c.bottom,c.left=void 0!==a.left?a.left:c.left}},orient:{get:function(){return d},set:function(a){d=a,e="right"==d||"bottom"==d}},color:{get:function(){return q},set:function(b){q=a.utils.getColor(b)}}}),a.utils.initOptions(b),b},a.models.bulletChart=function(){"use strict";function b(d){return d.each(function(e,o){var p=d3.select(this);a.utils.initSVG(p);var q=a.utils.availableWidth(k,p,g),r=l-g.top-g.bottom;if(b.update=function(){b(d)},b.container=this,!e||!h.call(this,e,o))return a.utils.noData(b,p),b;p.selectAll(".nv-noData").remove();var s=h.call(this,e,o).slice().sort(d3.descending),t=i.call(this,e,o).slice().sort(d3.descending),u=j.call(this,e,o).slice().sort(d3.descending),v=p.selectAll("g.nv-wrap.nv-bulletChart").data([e]),w=v.enter().append("g").attr("class","nvd3 nv-wrap nv-bulletChart"),x=w.append("g"),y=v.select("g");x.append("g").attr("class","nv-bulletWrap"),x.append("g").attr("class","nv-titles"),v.attr("transform","translate("+g.left+","+g.top+")");var z=d3.scale.linear().domain([0,Math.max(s[0],t[0],u[0])]).range(f?[q,0]:[0,q]),A=this.__chart__||d3.scale.linear().domain([0,1/0]).range(z.range());this.__chart__=z;var B=x.select(".nv-titles").append("g").attr("text-anchor","end").attr("transform","translate(-6,"+(l-g.top-g.bottom)/2+")");B.append("text").attr("class","nv-title").text(function(a){return a.title}),B.append("text").attr("class","nv-subtitle").attr("dy","1em").text(function(a){return a.subtitle}),c.width(q).height(r);var C=y.select(".nv-bulletWrap");d3.transition(C).call(c);var D=m||z.tickFormat(q/100),E=y.selectAll("g.nv-tick").data(z.ticks(n?n:q/50),function(a){return this.textContent||D(a)}),F=E.enter().append("g").attr("class","nv-tick").attr("transform",function(a){return"translate("+A(a)+",0)"}).style("opacity",1e-6);F.append("line").attr("y1",r).attr("y2",7*r/6),F.append("text").attr("text-anchor","middle").attr("dy","1em").attr("y",7*r/6).text(D);var G=d3.transition(E).attr("transform",function(a){return"translate("+z(a)+",0)"}).style("opacity",1);G.select("line").attr("y1",r).attr("y2",7*r/6),G.select("text").attr("y",7*r/6),d3.transition(E.exit()).attr("transform",function(a){return"translate("+z(a)+",0)"}).style("opacity",1e-6).remove()}),d3.timer.flush(),b}var c=a.models.bullet(),d=a.models.tooltip(),e="left",f=!1,g={top:5,right:40,bottom:20,left:120},h=function(a){return a.ranges},i=function(a){return a.markers?a.markers:[0]},j=function(a){return a.measures},k=null,l=55,m=null,n=null,o=null,p=d3.dispatch("tooltipShow","tooltipHide");return d.duration(0).headerEnabled(!1),c.dispatch.on("elementMouseover.tooltip",function(a){a.series={key:a.label,value:a.value,color:a.color},d.data(a).hidden(!1)}),c.dispatch.on("elementMouseout.tooltip",function(){d.hidden(!0)}),c.dispatch.on("elementMousemove.tooltip",function(){d.position({top:d3.event.pageY,left:d3.event.pageX})()}),b.bullet=c,b.dispatch=p,b.tooltip=d,b.options=a.utils.optionsFunc.bind(b),b._options=Object.create({},{ranges:{get:function(){return h},set:function(a){h=a}},markers:{get:function(){return i},set:function(a){i=a}},measures:{get:function(){return j},set:function(a){j=a}},width:{get:function(){return k},set:function(a){k=a}},height:{get:function(){return l},set:function(a){l=a}},tickFormat:{get:function(){return m},set:function(a){m=a}},ticks:{get:function(){return n},set:function(a){n=a}},noData:{get:function(){return o},set:function(a){o=a}},tooltips:{get:function(){return d.enabled()},set:function(b){a.deprecated("tooltips","use chart.tooltip.enabled() instead"),d.enabled(!!b)}},tooltipContent:{get:function(){return d.contentGenerator()},set:function(b){a.deprecated("tooltipContent","use chart.tooltip.contentGenerator() instead"),d.contentGenerator(b)}},margin:{get:function(){return g},set:function(a){g.top=void 0!==a.top?a.top:g.top,g.right=void 0!==a.right?a.right:g.right,g.bottom=void 0!==a.bottom?a.bottom:g.bottom,g.left=void 0!==a.left?a.left:g.left}},orient:{get:function(){return e},set:function(a){e=a,f="right"==e||"bottom"==e}}}),a.utils.inheritOptions(b,c),a.utils.initOptions(b),b},a.models.candlestickBar=function(){"use strict";function b(x){return x.each(function(b){c=d3.select(this);var x=a.utils.availableWidth(i,c,h),y=a.utils.availableHeight(j,c,h);a.utils.initSVG(c);var A=x/b[0].values.length*.45;l.domain(d||d3.extent(b[0].values.map(n).concat(t))),l.range(v?f||[.5*x/b[0].values.length,x*(b[0].values.length-.5)/b[0].values.length]:f||[5+A/2,x-A/2-5]),m.domain(e||[d3.min(b[0].values.map(s).concat(u)),d3.max(b[0].values.map(r).concat(u))]).range(g||[y,0]),l.domain()[0]===l.domain()[1]&&l.domain(l.domain()[0]?[l.domain()[0]-.01*l.domain()[0],l.domain()[1]+.01*l.domain()[1]]:[-1,1]),m.domain()[0]===m.domain()[1]&&m.domain(m.domain()[0]?[m.domain()[0]+.01*m.domain()[0],m.domain()[1]-.01*m.domain()[1]]:[-1,1]);var B=d3.select(this).selectAll("g.nv-wrap.nv-candlestickBar").data([b[0].values]),C=B.enter().append("g").attr("class","nvd3 nv-wrap nv-candlestickBar"),D=C.append("defs"),E=C.append("g"),F=B.select("g");E.append("g").attr("class","nv-ticks"),B.attr("transform","translate("+h.left+","+h.top+")"),c.on("click",function(a,b){z.chartClick({data:a,index:b,pos:d3.event,id:k})}),D.append("clipPath").attr("id","nv-chart-clip-path-"+k).append("rect"),B.select("#nv-chart-clip-path-"+k+" rect").attr("width",x).attr("height",y),F.attr("clip-path",w?"url(#nv-chart-clip-path-"+k+")":"");var G=B.select(".nv-ticks").selectAll(".nv-tick").data(function(a){return a});G.exit().remove();{var H=G.enter().append("g").attr("class",function(a,b,c){return(p(a,b)>q(a,b)?"nv-tick negative":"nv-tick positive")+" nv-tick-"+c+"-"+b});H.append("line").attr("class","nv-candlestick-lines").attr("transform",function(a,b){return"translate("+l(n(a,b))+",0)"}).attr("x1",0).attr("y1",function(a,b){return m(r(a,b))}).attr("x2",0).attr("y2",function(a,b){return m(s(a,b))}),H.append("rect").attr("class","nv-candlestick-rects nv-bars").attr("transform",function(a,b){return"translate("+(l(n(a,b))-A/2)+","+(m(o(a,b))-(p(a,b)>q(a,b)?m(q(a,b))-m(p(a,b)):0))+")"}).attr("x",0).attr("y",0).attr("width",A).attr("height",function(a,b){var c=p(a,b),d=q(a,b);return c>d?m(d)-m(c):m(c)-m(d)})}c.selectAll(".nv-candlestick-lines").transition().attr("transform",function(a,b){return"translate("+l(n(a,b))+",0)"}).attr("x1",0).attr("y1",function(a,b){return m(r(a,b))}).attr("x2",0).attr("y2",function(a,b){return m(s(a,b))}),c.selectAll(".nv-candlestick-rects").transition().attr("transform",function(a,b){return"translate("+(l(n(a,b))-A/2)+","+(m(o(a,b))-(p(a,b)>q(a,b)?m(q(a,b))-m(p(a,b)):0))+")"}).attr("x",0).attr("y",0).attr("width",A).attr("height",function(a,b){var c=p(a,b),d=q(a,b);return c>d?m(d)-m(c):m(c)-m(d)})}),b}var c,d,e,f,g,h={top:0,right:0,bottom:0,left:0},i=null,j=null,k=Math.floor(1e4*Math.random()),l=d3.scale.linear(),m=d3.scale.linear(),n=function(a){return a.x},o=function(a){return a.y},p=function(a){return a.open},q=function(a){return a.close},r=function(a){return a.high},s=function(a){return a.low},t=[],u=[],v=!1,w=!0,x=a.utils.defaultColor(),y=!1,z=d3.dispatch("tooltipShow","tooltipHide","stateChange","changeState","renderEnd","chartClick","elementClick","elementDblClick","elementMouseover","elementMouseout","elementMousemove");return b.highlightPoint=function(a,d){b.clearHighlights(),c.select(".nv-candlestickBar .nv-tick-0-"+a).classed("hover",d)},b.clearHighlights=function(){c.select(".nv-candlestickBar .nv-tick.hover").classed("hover",!1)},b.dispatch=z,b.options=a.utils.optionsFunc.bind(b),b._options=Object.create({},{width:{get:function(){return i},set:function(a){i=a}},height:{get:function(){return j},set:function(a){j=a}},xScale:{get:function(){return l},set:function(a){l=a}},yScale:{get:function(){return m},set:function(a){m=a}},xDomain:{get:function(){return d},set:function(a){d=a}},yDomain:{get:function(){return e},set:function(a){e=a}},xRange:{get:function(){return f},set:function(a){f=a}},yRange:{get:function(){return g},set:function(a){g=a}},forceX:{get:function(){return t},set:function(a){t=a}},forceY:{get:function(){return u},set:function(a){u=a}},padData:{get:function(){return v},set:function(a){v=a}},clipEdge:{get:function(){return w},set:function(a){w=a}},id:{get:function(){return k},set:function(a){k=a}},interactive:{get:function(){return y},set:function(a){y=a}},x:{get:function(){return n},set:function(a){n=a}},y:{get:function(){return o},set:function(a){o=a}},open:{get:function(){return p()},set:function(a){p=a}},close:{get:function(){return q()},set:function(a){q=a}},high:{get:function(){return r},set:function(a){r=a}},low:{get:function(){return s},set:function(a){s=a}},margin:{get:function(){return h},set:function(a){h.top=void 0!=a.top?a.top:h.top,h.right=void 0!=a.right?a.right:h.right,h.bottom=void 0!=a.bottom?a.bottom:h.bottom,h.left=void 0!=a.left?a.left:h.left}},color:{get:function(){return x},set:function(b){x=a.utils.getColor(b)}}}),a.utils.initOptions(b),b},a.models.cumulativeLineChart=function(){"use strict";function b(l){return H.reset(),H.models(f),r&&H.models(g),s&&H.models(h),l.each(function(l){function A(){d3.select(b.container).style("cursor","ew-resize")}function E(){G.x=d3.event.x,G.i=Math.round(F.invert(G.x)),K()}function H(){d3.select(b.container).style("cursor","auto"),y.index=G.i,C.stateChange(y)}function K(){bb.data([G]);var a=b.duration();b.duration(0),b.update(),b.duration(a)}var L=d3.select(this);a.utils.initSVG(L),L.classed("nv-chart-"+x,!0);var M=this,N=a.utils.availableWidth(o,L,m),O=a.utils.availableHeight(p,L,m);if(b.update=function(){0===D?L.call(b):L.transition().duration(D).call(b)},b.container=this,y.setter(J(l),b.update).getter(I(l)).update(),y.disabled=l.map(function(a){return!!a.disabled}),!z){var P;z={};for(P in y)z[P]=y[P]instanceof Array?y[P].slice(0):y[P]}var Q=d3.behavior.drag().on("dragstart",A).on("drag",E).on("dragend",H);if(!(l&&l.length&&l.filter(function(a){return a.values.length}).length))return a.utils.noData(b,L),b;if(L.selectAll(".nv-noData").remove(),d=f.xScale(),e=f.yScale(),w)f.yDomain(null);else{var R=l.filter(function(a){return!a.disabled}).map(function(a){var b=d3.extent(a.values,f.y());return b[0]<-.95&&(b[0]=-.95),[(b[0]-b[1])/(1+b[1]),(b[1]-b[0])/(1+b[0])]}),S=[d3.min(R,function(a){return a[0]}),d3.max(R,function(a){return a[1]})];f.yDomain(S)}F.domain([0,l[0].values.length-1]).range([0,N]).clamp(!0);var l=c(G.i,l),T=v?"none":"all",U=L.selectAll("g.nv-wrap.nv-cumulativeLine").data([l]),V=U.enter().append("g").attr("class","nvd3 nv-wrap nv-cumulativeLine").append("g"),W=U.select("g");if(V.append("g").attr("class","nv-interactive"),V.append("g").attr("class","nv-x nv-axis").style("pointer-events","none"),V.append("g").attr("class","nv-y nv-axis"),V.append("g").attr("class","nv-background"),V.append("g").attr("class","nv-linesWrap").style("pointer-events",T),V.append("g").attr("class","nv-avgLinesWrap").style("pointer-events","none"),V.append("g").attr("class","nv-legendWrap"),V.append("g").attr("class","nv-controlsWrap"),q&&(i.width(N),W.select(".nv-legendWrap").datum(l).call(i),m.top!=i.height()&&(m.top=i.height(),O=a.utils.availableHeight(p,L,m)),W.select(".nv-legendWrap").attr("transform","translate(0,"+-m.top+")")),u){var X=[{key:"Re-scale y-axis",disabled:!w}];j.width(140).color(["#444","#444","#444"]).rightAlign(!1).margin({top:5,right:0,bottom:5,left:20}),W.select(".nv-controlsWrap").datum(X).attr("transform","translate(0,"+-m.top+")").call(j)}U.attr("transform","translate("+m.left+","+m.top+")"),t&&W.select(".nv-y.nv-axis").attr("transform","translate("+N+",0)");var Y=l.filter(function(a){return a.tempDisabled});U.select(".tempDisabled").remove(),Y.length&&U.append("text").attr("class","tempDisabled").attr("x",N/2).attr("y","-.71em").style("text-anchor","end").text(Y.map(function(a){return a.key}).join(", ")+" values cannot be calculated for this time period."),v&&(k.width(N).height(O).margin({left:m.left,top:m.top}).svgContainer(L).xScale(d),U.select(".nv-interactive").call(k)),V.select(".nv-background").append("rect"),W.select(".nv-background rect").attr("width",N).attr("height",O),f.y(function(a){return a.display.y}).width(N).height(O).color(l.map(function(a,b){return a.color||n(a,b)}).filter(function(a,b){return!l[b].disabled&&!l[b].tempDisabled}));var Z=W.select(".nv-linesWrap").datum(l.filter(function(a){return!a.disabled&&!a.tempDisabled}));Z.call(f),l.forEach(function(a,b){a.seriesIndex=b});var $=l.filter(function(a){return!a.disabled&&!!B(a)}),_=W.select(".nv-avgLinesWrap").selectAll("line").data($,function(a){return a.key}),ab=function(a){var b=e(B(a));return 0>b?0:b>O?O:b};_.enter().append("line").style("stroke-width",2).style("stroke-dasharray","10,10").style("stroke",function(a){return f.color()(a,a.seriesIndex)}).attr("x1",0).attr("x2",N).attr("y1",ab).attr("y2",ab),_.style("stroke-opacity",function(a){var b=e(B(a));return 0>b||b>O?0:1}).attr("x1",0).attr("x2",N).attr("y1",ab).attr("y2",ab),_.exit().remove();var bb=Z.selectAll(".nv-indexLine").data([G]);bb.enter().append("rect").attr("class","nv-indexLine").attr("width",3).attr("x",-2).attr("fill","red").attr("fill-opacity",.5).style("pointer-events","all").call(Q),bb.attr("transform",function(a){return"translate("+F(a.i)+",0)"}).attr("height",O),r&&(g.scale(d)._ticks(a.utils.calcTicksX(N/70,l)).tickSize(-O,0),W.select(".nv-x.nv-axis").attr("transform","translate(0,"+e.range()[0]+")"),W.select(".nv-x.nv-axis").call(g)),s&&(h.scale(e)._ticks(a.utils.calcTicksY(O/36,l)).tickSize(-N,0),W.select(".nv-y.nv-axis").call(h)),W.select(".nv-background rect").on("click",function(){G.x=d3.mouse(this)[0],G.i=Math.round(F.invert(G.x)),y.index=G.i,C.stateChange(y),K()}),f.dispatch.on("elementClick",function(a){G.i=a.pointIndex,G.x=F(G.i),y.index=G.i,C.stateChange(y),K()}),j.dispatch.on("legendClick",function(a){a.disabled=!a.disabled,w=!a.disabled,y.rescaleY=w,C.stateChange(y),b.update()}),i.dispatch.on("stateChange",function(a){for(var c in a)y[c]=a[c];C.stateChange(y),b.update()}),k.dispatch.on("elementMousemove",function(c){f.clearHighlights();var d,e,i,j=[];if(l.filter(function(a,b){return a.seriesIndex=b,!a.disabled}).forEach(function(g,h){e=a.interactiveBisect(g.values,c.pointXValue,b.x()),f.highlightPoint(h,e,!0);var k=g.values[e];"undefined"!=typeof k&&("undefined"==typeof d&&(d=k),"undefined"==typeof i&&(i=b.xScale()(b.x()(k,e))),j.push({key:g.key,value:b.y()(k,e),color:n(g,g.seriesIndex)}))}),j.length>2){var o=b.yScale().invert(c.mouseY),p=Math.abs(b.yScale().domain()[0]-b.yScale().domain()[1]),q=.03*p,r=a.nearestValueIndex(j.map(function(a){return a.value}),o,q);null!==r&&(j[r].highlight=!0)}var s=g.tickFormat()(b.x()(d,e),e);k.tooltip.position({left:i+m.left,top:c.mouseY+m.top}).chartContainer(M.parentNode).valueFormatter(function(a){return h.tickFormat()(a)}).data({value:s,series:j})(),k.renderGuideLine(i)}),k.dispatch.on("elementMouseout",function(){f.clearHighlights()}),C.on("changeState",function(a){"undefined"!=typeof a.disabled&&(l.forEach(function(b,c){b.disabled=a.disabled[c]}),y.disabled=a.disabled),"undefined"!=typeof a.index&&(G.i=a.index,G.x=F(G.i),y.index=a.index,bb.data([G])),"undefined"!=typeof a.rescaleY&&(w=a.rescaleY),b.update()})}),H.renderEnd("cumulativeLineChart immediate"),b}function c(a,b){return K||(K=f.y()),b.map(function(b){if(!b.values)return b;var c=b.values[a];if(null==c)return b;var d=K(c,a);return-.95>d&&!E?(b.tempDisabled=!0,b):(b.tempDisabled=!1,b.values=b.values.map(function(a,b){return a.display={y:(K(a,b)-d)/(1+d)},a}),b)})}var d,e,f=a.models.line(),g=a.models.axis(),h=a.models.axis(),i=a.models.legend(),j=a.models.legend(),k=a.interactiveGuideline(),l=a.models.tooltip(),m={top:30,right:30,bottom:50,left:60},n=a.utils.defaultColor(),o=null,p=null,q=!0,r=!0,s=!0,t=!1,u=!0,v=!1,w=!0,x=f.id(),y=a.utils.state(),z=null,A=null,B=function(a){return a.average},C=d3.dispatch("stateChange","changeState","renderEnd"),D=250,E=!1;y.index=0,y.rescaleY=w,g.orient("bottom").tickPadding(7),h.orient(t?"right":"left"),l.valueFormatter(function(a,b){return h.tickFormat()(a,b)}).headerFormatter(function(a,b){return g.tickFormat()(a,b)}),j.updateState(!1);var F=d3.scale.linear(),G={i:0,x:0},H=a.utils.renderWatch(C,D),I=function(a){return function(){return{active:a.map(function(a){return!a.disabled}),index:G.i,rescaleY:w}}},J=function(a){return function(b){void 0!==b.index&&(G.i=b.index),void 0!==b.rescaleY&&(w=b.rescaleY),void 0!==b.active&&a.forEach(function(a,c){a.disabled=!b.active[c]})}};f.dispatch.on("elementMouseover.tooltip",function(a){var c={x:b.x()(a.point),y:b.y()(a.point),color:a.point.color};a.point=c,l.data(a).position(a.pos).hidden(!1)}),f.dispatch.on("elementMouseout.tooltip",function(){l.hidden(!0)});var K=null;return b.dispatch=C,b.lines=f,b.legend=i,b.controls=j,b.xAxis=g,b.yAxis=h,b.interactiveLayer=k,b.state=y,b.tooltip=l,b.options=a.utils.optionsFunc.bind(b),b._options=Object.create({},{width:{get:function(){return o},set:function(a){o=a}},height:{get:function(){return p},set:function(a){p=a}},rescaleY:{get:function(){return w},set:function(a){w=a}},showControls:{get:function(){return u},set:function(a){u=a}},showLegend:{get:function(){return q},set:function(a){q=a}},average:{get:function(){return B},set:function(a){B=a}},defaultState:{get:function(){return z},set:function(a){z=a}},noData:{get:function(){return A},set:function(a){A=a}},showXAxis:{get:function(){return r},set:function(a){r=a}},showYAxis:{get:function(){return s},set:function(a){s=a}},noErrorCheck:{get:function(){return E},set:function(a){E=a}},tooltips:{get:function(){return l.enabled()},set:function(b){a.deprecated("tooltips","use chart.tooltip.enabled() instead"),l.enabled(!!b)}},tooltipContent:{get:function(){return l.contentGenerator()},set:function(b){a.deprecated("tooltipContent","use chart.tooltip.contentGenerator() instead"),l.contentGenerator(b)}},margin:{get:function(){return m},set:function(a){m.top=void 0!==a.top?a.top:m.top,m.right=void 0!==a.right?a.right:m.right,m.bottom=void 0!==a.bottom?a.bottom:m.bottom,m.left=void 0!==a.left?a.left:m.left}},color:{get:function(){return n},set:function(b){n=a.utils.getColor(b),i.color(n)}},useInteractiveGuideline:{get:function(){return v},set:function(a){v=a,a===!0&&(b.interactive(!1),b.useVoronoi(!1))}},rightAlignYAxis:{get:function(){return t},set:function(a){t=a,h.orient(a?"right":"left")}},duration:{get:function(){return D},set:function(a){D=a,f.duration(D),g.duration(D),h.duration(D),H.reset(D)}}}),a.utils.inheritOptions(b,f),a.utils.initOptions(b),b},a.models.discreteBar=function(){"use strict";function b(m){return y.reset(),m.each(function(b){var m=k-j.left-j.right,x=l-j.top-j.bottom;c=d3.select(this),a.utils.initSVG(c),b.forEach(function(a,b){a.values.forEach(function(a){a.series=b})});var z=d&&e?[]:b.map(function(a){return a.values.map(function(a,b){return{x:p(a,b),y:q(a,b),y0:a.y0}})});n.domain(d||d3.merge(z).map(function(a){return a.x})).rangeBands(f||[0,m],.1),o.domain(e||d3.extent(d3.merge(z).map(function(a){return a.y}).concat(r))),o.range(t?g||[x-(o.domain()[0]<0?12:0),o.domain()[1]>0?12:0]:g||[x,0]),h=h||n,i=i||o.copy().range([o(0),o(0)]);{var A=c.selectAll("g.nv-wrap.nv-discretebar").data([b]),B=A.enter().append("g").attr("class","nvd3 nv-wrap nv-discretebar"),C=B.append("g");A.select("g")}C.append("g").attr("class","nv-groups"),A.attr("transform","translate("+j.left+","+j.top+")");var D=A.select(".nv-groups").selectAll(".nv-group").data(function(a){return a},function(a){return a.key});D.enter().append("g").style("stroke-opacity",1e-6).style("fill-opacity",1e-6),D.exit().watchTransition(y,"discreteBar: exit groups").style("stroke-opacity",1e-6).style("fill-opacity",1e-6).remove(),D.attr("class",function(a,b){return"nv-group nv-series-"+b}).classed("hover",function(a){return a.hover}),D.watchTransition(y,"discreteBar: groups").style("stroke-opacity",1).style("fill-opacity",.75);var E=D.selectAll("g.nv-bar").data(function(a){return a.values});E.exit().remove();var F=E.enter().append("g").attr("transform",function(a,b){return"translate("+(n(p(a,b))+.05*n.rangeBand())+", "+o(0)+")"}).on("mouseover",function(a,b){d3.select(this).classed("hover",!0),v.elementMouseover({data:a,index:b,color:d3.select(this).style("fill")})}).on("mouseout",function(a,b){d3.select(this).classed("hover",!1),v.elementMouseout({data:a,index:b,color:d3.select(this).style("fill")})}).on("mousemove",function(a,b){v.elementMousemove({data:a,index:b,color:d3.select(this).style("fill")})}).on("click",function(a,b){v.elementClick({data:a,index:b,color:d3.select(this).style("fill")}),d3.event.stopPropagation()}).on("dblclick",function(a,b){v.elementDblClick({data:a,index:b,color:d3.select(this).style("fill")}),d3.event.stopPropagation()});F.append("rect").attr("height",0).attr("width",.9*n.rangeBand()/b.length),t?(F.append("text").attr("text-anchor","middle"),E.select("text").text(function(a,b){return u(q(a,b))}).watchTransition(y,"discreteBar: bars text").attr("x",.9*n.rangeBand()/2).attr("y",function(a,b){return q(a,b)<0?o(q(a,b))-o(0)+12:-4})):E.selectAll("text").remove(),E.attr("class",function(a,b){return q(a,b)<0?"nv-bar negative":"nv-bar positive"}).style("fill",function(a,b){return a.color||s(a,b)}).style("stroke",function(a,b){return a.color||s(a,b)}).select("rect").attr("class",w).watchTransition(y,"discreteBar: bars rect").attr("width",.9*n.rangeBand()/b.length),E.watchTransition(y,"discreteBar: bars").attr("transform",function(a,b){var c=n(p(a,b))+.05*n.rangeBand(),d=q(a,b)<0?o(0):o(0)-o(q(a,b))<1?o(0)-1:o(q(a,b));return"translate("+c+", "+d+")"}).select("rect").attr("height",function(a,b){return Math.max(Math.abs(o(q(a,b))-o(e&&e[0]||0))||1)}),h=n.copy(),i=o.copy()}),y.renderEnd("discreteBar immediate"),b}var c,d,e,f,g,h,i,j={top:0,right:0,bottom:0,left:0},k=960,l=500,m=Math.floor(1e4*Math.random()),n=d3.scale.ordinal(),o=d3.scale.linear(),p=function(a){return a.x},q=function(a){return a.y},r=[0],s=a.utils.defaultColor(),t=!1,u=d3.format(",.2f"),v=d3.dispatch("chartClick","elementClick","elementDblClick","elementMouseover","elementMouseout","elementMousemove","renderEnd"),w="discreteBar",x=250,y=a.utils.renderWatch(v,x);return b.dispatch=v,b.options=a.utils.optionsFunc.bind(b),b._options=Object.create({},{width:{get:function(){return k},set:function(a){k=a}},height:{get:function(){return l},set:function(a){l=a}},forceY:{get:function(){return r},set:function(a){r=a}},showValues:{get:function(){return t},set:function(a){t=a}},x:{get:function(){return p},set:function(a){p=a}},y:{get:function(){return q},set:function(a){q=a}},xScale:{get:function(){return n},set:function(a){n=a}},yScale:{get:function(){return o},set:function(a){o=a}},xDomain:{get:function(){return d},set:function(a){d=a}},yDomain:{get:function(){return e},set:function(a){e=a}},xRange:{get:function(){return f},set:function(a){f=a}},yRange:{get:function(){return g},set:function(a){g=a}},valueFormat:{get:function(){return u},set:function(a){u=a}},id:{get:function(){return m},set:function(a){m=a}},rectClass:{get:function(){return w},set:function(a){w=a}},margin:{get:function(){return j},set:function(a){j.top=void 0!==a.top?a.top:j.top,j.right=void 0!==a.right?a.right:j.right,j.bottom=void 0!==a.bottom?a.bottom:j.bottom,j.left=void 0!==a.left?a.left:j.left}},color:{get:function(){return s},set:function(b){s=a.utils.getColor(b)}},duration:{get:function(){return x},set:function(a){x=a,y.reset(x)}}}),a.utils.initOptions(b),b},a.models.discreteBarChart=function(){"use strict";function b(h){return t.reset(),t.models(e),m&&t.models(f),n&&t.models(g),h.each(function(h){var l=d3.select(this);a.utils.initSVG(l);var q=a.utils.availableWidth(j,l,i),t=a.utils.availableHeight(k,l,i);if(b.update=function(){r.beforeUpdate(),l.transition().duration(s).call(b)},b.container=this,!(h&&h.length&&h.filter(function(a){return a.values.length}).length))return a.utils.noData(b,l),b;l.selectAll(".nv-noData").remove(),c=e.xScale(),d=e.yScale().clamp(!0);var u=l.selectAll("g.nv-wrap.nv-discreteBarWithAxes").data([h]),v=u.enter().append("g").attr("class","nvd3 nv-wrap nv-discreteBarWithAxes").append("g"),w=v.append("defs"),x=u.select("g");v.append("g").attr("class","nv-x nv-axis"),v.append("g").attr("class","nv-y nv-axis").append("g").attr("class","nv-zeroLine").append("line"),v.append("g").attr("class","nv-barsWrap"),x.attr("transform","translate("+i.left+","+i.top+")"),o&&x.select(".nv-y.nv-axis").attr("transform","translate("+q+",0)"),e.width(q).height(t);var y=x.select(".nv-barsWrap").datum(h.filter(function(a){return!a.disabled}));if(y.transition().call(e),w.append("clipPath").attr("id","nv-x-label-clip-"+e.id()).append("rect"),x.select("#nv-x-label-clip-"+e.id()+" rect").attr("width",c.rangeBand()*(p?2:1)).attr("height",16).attr("x",-c.rangeBand()/(p?1:2)),m){f.scale(c)._ticks(a.utils.calcTicksX(q/100,h)).tickSize(-t,0),x.select(".nv-x.nv-axis").attr("transform","translate(0,"+(d.range()[0]+(e.showValues()&&d.domain()[0]<0?16:0))+")"),x.select(".nv-x.nv-axis").call(f); var z=x.select(".nv-x.nv-axis").selectAll("g");p&&z.selectAll("text").attr("transform",function(a,b,c){return"translate(0,"+(c%2==0?"5":"17")+")"})}n&&(g.scale(d)._ticks(a.utils.calcTicksY(t/36,h)).tickSize(-q,0),x.select(".nv-y.nv-axis").call(g)),x.select(".nv-zeroLine line").attr("x1",0).attr("x2",q).attr("y1",d(0)).attr("y2",d(0))}),t.renderEnd("discreteBar chart immediate"),b}var c,d,e=a.models.discreteBar(),f=a.models.axis(),g=a.models.axis(),h=a.models.tooltip(),i={top:15,right:10,bottom:50,left:60},j=null,k=null,l=a.utils.getColor(),m=!0,n=!0,o=!1,p=!1,q=null,r=d3.dispatch("beforeUpdate","renderEnd"),s=250;f.orient("bottom").showMaxMin(!1).tickFormat(function(a){return a}),g.orient(o?"right":"left").tickFormat(d3.format(",.1f")),h.duration(0).headerEnabled(!1).valueFormatter(function(a,b){return g.tickFormat()(a,b)}).keyFormatter(function(a,b){return f.tickFormat()(a,b)});var t=a.utils.renderWatch(r,s);return e.dispatch.on("elementMouseover.tooltip",function(a){a.series={key:b.x()(a.data),value:b.y()(a.data),color:a.color},h.data(a).hidden(!1)}),e.dispatch.on("elementMouseout.tooltip",function(){h.hidden(!0)}),e.dispatch.on("elementMousemove.tooltip",function(){h.position({top:d3.event.pageY,left:d3.event.pageX})()}),b.dispatch=r,b.discretebar=e,b.xAxis=f,b.yAxis=g,b.tooltip=h,b.options=a.utils.optionsFunc.bind(b),b._options=Object.create({},{width:{get:function(){return j},set:function(a){j=a}},height:{get:function(){return k},set:function(a){k=a}},staggerLabels:{get:function(){return p},set:function(a){p=a}},showXAxis:{get:function(){return m},set:function(a){m=a}},showYAxis:{get:function(){return n},set:function(a){n=a}},noData:{get:function(){return q},set:function(a){q=a}},tooltips:{get:function(){return h.enabled()},set:function(b){a.deprecated("tooltips","use chart.tooltip.enabled() instead"),h.enabled(!!b)}},tooltipContent:{get:function(){return h.contentGenerator()},set:function(b){a.deprecated("tooltipContent","use chart.tooltip.contentGenerator() instead"),h.contentGenerator(b)}},margin:{get:function(){return i},set:function(a){i.top=void 0!==a.top?a.top:i.top,i.right=void 0!==a.right?a.right:i.right,i.bottom=void 0!==a.bottom?a.bottom:i.bottom,i.left=void 0!==a.left?a.left:i.left}},duration:{get:function(){return s},set:function(a){s=a,t.reset(s),e.duration(s),f.duration(s),g.duration(s)}},color:{get:function(){return l},set:function(b){l=a.utils.getColor(b),e.color(l)}},rightAlignYAxis:{get:function(){return o},set:function(a){o=a,g.orient(a?"right":"left")}}}),a.utils.inheritOptions(b,e),a.utils.initOptions(b),b},a.models.distribution=function(){"use strict";function b(k){return m.reset(),k.each(function(b){var k=(e-("x"===g?d.left+d.right:d.top+d.bottom),"x"==g?"y":"x"),l=d3.select(this);a.utils.initSVG(l),c=c||j;var n=l.selectAll("g.nv-distribution").data([b]),o=n.enter().append("g").attr("class","nvd3 nv-distribution"),p=(o.append("g"),n.select("g"));n.attr("transform","translate("+d.left+","+d.top+")");var q=p.selectAll("g.nv-dist").data(function(a){return a},function(a){return a.key});q.enter().append("g"),q.attr("class",function(a,b){return"nv-dist nv-series-"+b}).style("stroke",function(a,b){return i(a,b)});var r=q.selectAll("line.nv-dist"+g).data(function(a){return a.values});r.enter().append("line").attr(g+"1",function(a,b){return c(h(a,b))}).attr(g+"2",function(a,b){return c(h(a,b))}),m.transition(q.exit().selectAll("line.nv-dist"+g),"dist exit").attr(g+"1",function(a,b){return j(h(a,b))}).attr(g+"2",function(a,b){return j(h(a,b))}).style("stroke-opacity",0).remove(),r.attr("class",function(a,b){return"nv-dist"+g+" nv-dist"+g+"-"+b}).attr(k+"1",0).attr(k+"2",f),m.transition(r,"dist").attr(g+"1",function(a,b){return j(h(a,b))}).attr(g+"2",function(a,b){return j(h(a,b))}),c=j.copy()}),m.renderEnd("distribution immediate"),b}var c,d={top:0,right:0,bottom:0,left:0},e=400,f=8,g="x",h=function(a){return a[g]},i=a.utils.defaultColor(),j=d3.scale.linear(),k=250,l=d3.dispatch("renderEnd"),m=a.utils.renderWatch(l,k);return b.options=a.utils.optionsFunc.bind(b),b.dispatch=l,b.margin=function(a){return arguments.length?(d.top="undefined"!=typeof a.top?a.top:d.top,d.right="undefined"!=typeof a.right?a.right:d.right,d.bottom="undefined"!=typeof a.bottom?a.bottom:d.bottom,d.left="undefined"!=typeof a.left?a.left:d.left,b):d},b.width=function(a){return arguments.length?(e=a,b):e},b.axis=function(a){return arguments.length?(g=a,b):g},b.size=function(a){return arguments.length?(f=a,b):f},b.getData=function(a){return arguments.length?(h=d3.functor(a),b):h},b.scale=function(a){return arguments.length?(j=a,b):j},b.color=function(c){return arguments.length?(i=a.utils.getColor(c),b):i},b.duration=function(a){return arguments.length?(k=a,m.reset(k),b):k},b},a.models.furiousLegend=function(){"use strict";function b(p){function q(a,b){return"furious"!=o?"#000":m?a.disengaged?g(a,b):"#fff":m?void 0:a.disabled?g(a,b):"#fff"}function r(a,b){return m&&"furious"==o?a.disengaged?"#fff":g(a,b):a.disabled?"#fff":g(a,b)}return p.each(function(b){var p=d-c.left-c.right,s=d3.select(this);a.utils.initSVG(s);var t=s.selectAll("g.nv-legend").data([b]),u=(t.enter().append("g").attr("class","nvd3 nv-legend").append("g"),t.select("g"));t.attr("transform","translate("+c.left+","+c.top+")");var v,w=u.selectAll(".nv-series").data(function(a){return"furious"!=o?a:a.filter(function(a){return m?!0:!a.disengaged})}),x=w.enter().append("g").attr("class","nv-series");if("classic"==o)x.append("circle").style("stroke-width",2).attr("class","nv-legend-symbol").attr("r",5),v=w.select("circle");else if("furious"==o){x.append("rect").style("stroke-width",2).attr("class","nv-legend-symbol").attr("rx",3).attr("ry",3),v=w.select("rect"),x.append("g").attr("class","nv-check-box").property("innerHTML",'').attr("transform","translate(-10,-8)scale(0.5)");var y=w.select(".nv-check-box");y.each(function(a,b){d3.select(this).selectAll("path").attr("stroke",q(a,b))})}x.append("text").attr("text-anchor","start").attr("class","nv-legend-text").attr("dy",".32em").attr("dx","8");var z=w.select("text.nv-legend-text");w.on("mouseover",function(a,b){n.legendMouseover(a,b)}).on("mouseout",function(a,b){n.legendMouseout(a,b)}).on("click",function(a,b){n.legendClick(a,b);var c=w.data();if(k){if("classic"==o)l?(c.forEach(function(a){a.disabled=!0}),a.disabled=!1):(a.disabled=!a.disabled,c.every(function(a){return a.disabled})&&c.forEach(function(a){a.disabled=!1}));else if("furious"==o)if(m)a.disengaged=!a.disengaged,a.userDisabled=void 0==a.userDisabled?!!a.disabled:a.userDisabled,a.disabled=a.disengaged||a.userDisabled;else if(!m){a.disabled=!a.disabled,a.userDisabled=a.disabled;var d=c.filter(function(a){return!a.disengaged});d.every(function(a){return a.userDisabled})&&c.forEach(function(a){a.disabled=a.userDisabled=!1})}n.stateChange({disabled:c.map(function(a){return!!a.disabled}),disengaged:c.map(function(a){return!!a.disengaged})})}}).on("dblclick",function(a,b){if(("furious"!=o||!m)&&(n.legendDblclick(a,b),k)){var c=w.data();c.forEach(function(a){a.disabled=!0,"furious"==o&&(a.userDisabled=a.disabled)}),a.disabled=!1,"furious"==o&&(a.userDisabled=a.disabled),n.stateChange({disabled:c.map(function(a){return!!a.disabled})})}}),w.classed("nv-disabled",function(a){return a.userDisabled}),w.exit().remove(),z.attr("fill",q).text(f);var A;switch(o){case"furious":A=23;break;case"classic":A=20}if(h){var B=[];w.each(function(){var b,c=d3.select(this).select("text");try{if(b=c.node().getComputedTextLength(),0>=b)throw Error()}catch(d){b=a.utils.calcApproxTextWidth(c)}B.push(b+i)});for(var C=0,D=0,E=[];p>D&&Cp&&C>1;){E=[],C--;for(var F=0;F(E[F%C]||0)&&(E[F%C]=B[F]);D=E.reduce(function(a,b){return a+b})}for(var G=[],H=0,I=0;C>H;H++)G[H]=I,I+=E[H];w.attr("transform",function(a,b){return"translate("+G[b%C]+","+(5+Math.floor(b/C)*A)+")"}),j?u.attr("transform","translate("+(d-c.right-D)+","+c.top+")"):u.attr("transform","translate(0,"+c.top+")"),e=c.top+c.bottom+Math.ceil(B.length/C)*A}else{var J,K=5,L=5,M=0;w.attr("transform",function(){var a=d3.select(this).select("text").node().getComputedTextLength()+i;return J=L,dM&&(M=L),"translate("+J+","+K+")"}),u.attr("transform","translate("+(d-c.right-M)+","+c.top+")"),e=c.top+c.bottom+K+15}"furious"==o&&v.attr("width",function(a,b){return z[0][b].getComputedTextLength()+27}).attr("height",18).attr("y",-9).attr("x",-15),v.style("fill",r).style("stroke",function(a,b){return a.color||g(a,b)})}),b}var c={top:5,right:0,bottom:5,left:0},d=400,e=20,f=function(a){return a.key},g=a.utils.getColor(),h=!0,i=28,j=!0,k=!0,l=!1,m=!1,n=d3.dispatch("legendClick","legendDblclick","legendMouseover","legendMouseout","stateChange"),o="classic";return b.dispatch=n,b.options=a.utils.optionsFunc.bind(b),b._options=Object.create({},{width:{get:function(){return d},set:function(a){d=a}},height:{get:function(){return e},set:function(a){e=a}},key:{get:function(){return f},set:function(a){f=a}},align:{get:function(){return h},set:function(a){h=a}},rightAlign:{get:function(){return j},set:function(a){j=a}},padding:{get:function(){return i},set:function(a){i=a}},updateState:{get:function(){return k},set:function(a){k=a}},radioButtonMode:{get:function(){return l},set:function(a){l=a}},expanded:{get:function(){return m},set:function(a){m=a}},vers:{get:function(){return o},set:function(a){o=a}},margin:{get:function(){return c},set:function(a){c.top=void 0!==a.top?a.top:c.top,c.right=void 0!==a.right?a.right:c.right,c.bottom=void 0!==a.bottom?a.bottom:c.bottom,c.left=void 0!==a.left?a.left:c.left}},color:{get:function(){return g},set:function(b){g=a.utils.getColor(b)}}}),a.utils.initOptions(b),b},a.models.historicalBar=function(){"use strict";function b(x){return x.each(function(b){w.reset(),k=d3.select(this);var x=a.utils.availableWidth(h,k,g),y=a.utils.availableHeight(i,k,g);a.utils.initSVG(k),l.domain(c||d3.extent(b[0].values.map(n).concat(p))),l.range(r?e||[.5*x/b[0].values.length,x*(b[0].values.length-.5)/b[0].values.length]:e||[0,x]),m.domain(d||d3.extent(b[0].values.map(o).concat(q))).range(f||[y,0]),l.domain()[0]===l.domain()[1]&&l.domain(l.domain()[0]?[l.domain()[0]-.01*l.domain()[0],l.domain()[1]+.01*l.domain()[1]]:[-1,1]),m.domain()[0]===m.domain()[1]&&m.domain(m.domain()[0]?[m.domain()[0]+.01*m.domain()[0],m.domain()[1]-.01*m.domain()[1]]:[-1,1]);var z=k.selectAll("g.nv-wrap.nv-historicalBar-"+j).data([b[0].values]),A=z.enter().append("g").attr("class","nvd3 nv-wrap nv-historicalBar-"+j),B=A.append("defs"),C=A.append("g"),D=z.select("g");C.append("g").attr("class","nv-bars"),z.attr("transform","translate("+g.left+","+g.top+")"),k.on("click",function(a,b){u.chartClick({data:a,index:b,pos:d3.event,id:j})}),B.append("clipPath").attr("id","nv-chart-clip-path-"+j).append("rect"),z.select("#nv-chart-clip-path-"+j+" rect").attr("width",x).attr("height",y),D.attr("clip-path",s?"url(#nv-chart-clip-path-"+j+")":"");var E=z.select(".nv-bars").selectAll(".nv-bar").data(function(a){return a},function(a,b){return n(a,b)});E.exit().remove(),E.enter().append("rect").attr("x",0).attr("y",function(b,c){return a.utils.NaNtoZero(m(Math.max(0,o(b,c))))}).attr("height",function(b,c){return a.utils.NaNtoZero(Math.abs(m(o(b,c))-m(0)))}).attr("transform",function(a,c){return"translate("+(l(n(a,c))-x/b[0].values.length*.45)+",0)"}).on("mouseover",function(a,b){v&&(d3.select(this).classed("hover",!0),u.elementMouseover({data:a,index:b,color:d3.select(this).style("fill")}))}).on("mouseout",function(a,b){v&&(d3.select(this).classed("hover",!1),u.elementMouseout({data:a,index:b,color:d3.select(this).style("fill")}))}).on("mousemove",function(a,b){v&&u.elementMousemove({data:a,index:b,color:d3.select(this).style("fill")})}).on("click",function(a,b){v&&(u.elementClick({data:a,index:b,color:d3.select(this).style("fill")}),d3.event.stopPropagation())}).on("dblclick",function(a,b){v&&(u.elementDblClick({data:a,index:b,color:d3.select(this).style("fill")}),d3.event.stopPropagation())}),E.attr("fill",function(a,b){return t(a,b)}).attr("class",function(a,b,c){return(o(a,b)<0?"nv-bar negative":"nv-bar positive")+" nv-bar-"+c+"-"+b}).watchTransition(w,"bars").attr("transform",function(a,c){return"translate("+(l(n(a,c))-x/b[0].values.length*.45)+",0)"}).attr("width",x/b[0].values.length*.9),E.watchTransition(w,"bars").attr("y",function(b,c){var d=o(b,c)<0?m(0):m(0)-m(o(b,c))<1?m(0)-1:m(o(b,c));return a.utils.NaNtoZero(d)}).attr("height",function(b,c){return a.utils.NaNtoZero(Math.max(Math.abs(m(o(b,c))-m(0)),1))})}),w.renderEnd("historicalBar immediate"),b}var c,d,e,f,g={top:0,right:0,bottom:0,left:0},h=null,i=null,j=Math.floor(1e4*Math.random()),k=null,l=d3.scale.linear(),m=d3.scale.linear(),n=function(a){return a.x},o=function(a){return a.y},p=[],q=[0],r=!1,s=!0,t=a.utils.defaultColor(),u=d3.dispatch("chartClick","elementClick","elementDblClick","elementMouseover","elementMouseout","elementMousemove","renderEnd"),v=!0,w=a.utils.renderWatch(u,0);return b.highlightPoint=function(a,b){k.select(".nv-bars .nv-bar-0-"+a).classed("hover",b)},b.clearHighlights=function(){k.select(".nv-bars .nv-bar.hover").classed("hover",!1)},b.dispatch=u,b.options=a.utils.optionsFunc.bind(b),b._options=Object.create({},{width:{get:function(){return h},set:function(a){h=a}},height:{get:function(){return i},set:function(a){i=a}},forceX:{get:function(){return p},set:function(a){p=a}},forceY:{get:function(){return q},set:function(a){q=a}},padData:{get:function(){return r},set:function(a){r=a}},x:{get:function(){return n},set:function(a){n=a}},y:{get:function(){return o},set:function(a){o=a}},xScale:{get:function(){return l},set:function(a){l=a}},yScale:{get:function(){return m},set:function(a){m=a}},xDomain:{get:function(){return c},set:function(a){c=a}},yDomain:{get:function(){return d},set:function(a){d=a}},xRange:{get:function(){return e},set:function(a){e=a}},yRange:{get:function(){return f},set:function(a){f=a}},clipEdge:{get:function(){return s},set:function(a){s=a}},id:{get:function(){return j},set:function(a){j=a}},interactive:{get:function(){return v},set:function(a){v=a}},margin:{get:function(){return g},set:function(a){g.top=void 0!==a.top?a.top:g.top,g.right=void 0!==a.right?a.right:g.right,g.bottom=void 0!==a.bottom?a.bottom:g.bottom,g.left=void 0!==a.left?a.left:g.left}},color:{get:function(){return t},set:function(b){t=a.utils.getColor(b)}}}),a.utils.initOptions(b),b},a.models.historicalBarChart=function(b){"use strict";function c(b){return b.each(function(k){z.reset(),z.models(f),q&&z.models(g),r&&z.models(h);var w=d3.select(this),A=this;a.utils.initSVG(w);var B=a.utils.availableWidth(n,w,l),C=a.utils.availableHeight(o,w,l);if(c.update=function(){w.transition().duration(y).call(c)},c.container=this,u.disabled=k.map(function(a){return!!a.disabled}),!v){var D;v={};for(D in u)v[D]=u[D]instanceof Array?u[D].slice(0):u[D]}if(!(k&&k.length&&k.filter(function(a){return a.values.length}).length))return a.utils.noData(c,w),c;w.selectAll(".nv-noData").remove(),d=f.xScale(),e=f.yScale();var E=w.selectAll("g.nv-wrap.nv-historicalBarChart").data([k]),F=E.enter().append("g").attr("class","nvd3 nv-wrap nv-historicalBarChart").append("g"),G=E.select("g");F.append("g").attr("class","nv-x nv-axis"),F.append("g").attr("class","nv-y nv-axis"),F.append("g").attr("class","nv-barsWrap"),F.append("g").attr("class","nv-legendWrap"),F.append("g").attr("class","nv-interactive"),p&&(i.width(B),G.select(".nv-legendWrap").datum(k).call(i),l.top!=i.height()&&(l.top=i.height(),C=a.utils.availableHeight(o,w,l)),E.select(".nv-legendWrap").attr("transform","translate(0,"+-l.top+")")),E.attr("transform","translate("+l.left+","+l.top+")"),s&&G.select(".nv-y.nv-axis").attr("transform","translate("+B+",0)"),t&&(j.width(B).height(C).margin({left:l.left,top:l.top}).svgContainer(w).xScale(d),E.select(".nv-interactive").call(j)),f.width(B).height(C).color(k.map(function(a,b){return a.color||m(a,b)}).filter(function(a,b){return!k[b].disabled}));var H=G.select(".nv-barsWrap").datum(k.filter(function(a){return!a.disabled}));H.transition().call(f),q&&(g.scale(d)._ticks(a.utils.calcTicksX(B/100,k)).tickSize(-C,0),G.select(".nv-x.nv-axis").attr("transform","translate(0,"+e.range()[0]+")"),G.select(".nv-x.nv-axis").transition().call(g)),r&&(h.scale(e)._ticks(a.utils.calcTicksY(C/36,k)).tickSize(-B,0),G.select(".nv-y.nv-axis").transition().call(h)),j.dispatch.on("elementMousemove",function(b){f.clearHighlights();var d,e,i,n=[];k.filter(function(a,b){return a.seriesIndex=b,!a.disabled}).forEach(function(g){e=a.interactiveBisect(g.values,b.pointXValue,c.x()),f.highlightPoint(e,!0);var h=g.values[e];void 0!==h&&(void 0===d&&(d=h),void 0===i&&(i=c.xScale()(c.x()(h,e))),n.push({key:g.key,value:c.y()(h,e),color:m(g,g.seriesIndex),data:g.values[e]}))});var o=g.tickFormat()(c.x()(d,e));j.tooltip.position({left:i+l.left,top:b.mouseY+l.top}).chartContainer(A.parentNode).valueFormatter(function(a){return h.tickFormat()(a)}).data({value:o,index:e,series:n})(),j.renderGuideLine(i)}),j.dispatch.on("elementMouseout",function(){x.tooltipHide(),f.clearHighlights()}),i.dispatch.on("legendClick",function(a){a.disabled=!a.disabled,k.filter(function(a){return!a.disabled}).length||k.map(function(a){return a.disabled=!1,E.selectAll(".nv-series").classed("disabled",!1),a}),u.disabled=k.map(function(a){return!!a.disabled}),x.stateChange(u),b.transition().call(c)}),i.dispatch.on("legendDblclick",function(a){k.forEach(function(a){a.disabled=!0}),a.disabled=!1,u.disabled=k.map(function(a){return!!a.disabled}),x.stateChange(u),c.update()}),x.on("changeState",function(a){"undefined"!=typeof a.disabled&&(k.forEach(function(b,c){b.disabled=a.disabled[c]}),u.disabled=a.disabled),c.update()})}),z.renderEnd("historicalBarChart immediate"),c}var d,e,f=b||a.models.historicalBar(),g=a.models.axis(),h=a.models.axis(),i=a.models.legend(),j=a.interactiveGuideline(),k=a.models.tooltip(),l={top:30,right:90,bottom:50,left:90},m=a.utils.defaultColor(),n=null,o=null,p=!1,q=!0,r=!0,s=!1,t=!1,u={},v=null,w=null,x=d3.dispatch("tooltipHide","stateChange","changeState","renderEnd"),y=250;g.orient("bottom").tickPadding(7),h.orient(s?"right":"left"),k.duration(0).headerEnabled(!1).valueFormatter(function(a,b){return h.tickFormat()(a,b)}).headerFormatter(function(a,b){return g.tickFormat()(a,b)});var z=a.utils.renderWatch(x,0);return f.dispatch.on("elementMouseover.tooltip",function(a){a.series={key:c.x()(a.data),value:c.y()(a.data),color:a.color},k.data(a).hidden(!1)}),f.dispatch.on("elementMouseout.tooltip",function(){k.hidden(!0)}),f.dispatch.on("elementMousemove.tooltip",function(){k.position({top:d3.event.pageY,left:d3.event.pageX})()}),c.dispatch=x,c.bars=f,c.legend=i,c.xAxis=g,c.yAxis=h,c.interactiveLayer=j,c.tooltip=k,c.options=a.utils.optionsFunc.bind(c),c._options=Object.create({},{width:{get:function(){return n},set:function(a){n=a}},height:{get:function(){return o},set:function(a){o=a}},showLegend:{get:function(){return p},set:function(a){p=a}},showXAxis:{get:function(){return q},set:function(a){q=a}},showYAxis:{get:function(){return r},set:function(a){r=a}},defaultState:{get:function(){return v},set:function(a){v=a}},noData:{get:function(){return w},set:function(a){w=a}},tooltips:{get:function(){return k.enabled()},set:function(b){a.deprecated("tooltips","use chart.tooltip.enabled() instead"),k.enabled(!!b)}},tooltipContent:{get:function(){return k.contentGenerator()},set:function(b){a.deprecated("tooltipContent","use chart.tooltip.contentGenerator() instead"),k.contentGenerator(b)}},margin:{get:function(){return l},set:function(a){l.top=void 0!==a.top?a.top:l.top,l.right=void 0!==a.right?a.right:l.right,l.bottom=void 0!==a.bottom?a.bottom:l.bottom,l.left=void 0!==a.left?a.left:l.left}},color:{get:function(){return m},set:function(b){m=a.utils.getColor(b),i.color(m),f.color(m)}},duration:{get:function(){return y},set:function(a){y=a,z.reset(y),h.duration(y),g.duration(y)}},rightAlignYAxis:{get:function(){return s},set:function(a){s=a,h.orient(a?"right":"left")}},useInteractiveGuideline:{get:function(){return t},set:function(a){t=a,a===!0&&c.interactive(!1)}}}),a.utils.inheritOptions(c,f),a.utils.initOptions(c),c},a.models.ohlcBarChart=function(){var b=a.models.historicalBarChart(a.models.ohlcBar());return b.useInteractiveGuideline(!0),b.interactiveLayer.tooltip.contentGenerator(function(a){var c=a.series[0].data,d=c.open'+a.value+"
    open:"+b.yAxis.tickFormat()(c.open)+"
    close:"+b.yAxis.tickFormat()(c.close)+"
    high"+b.yAxis.tickFormat()(c.high)+"
    low:"+b.yAxis.tickFormat()(c.low)+"
    "}),b},a.models.candlestickBarChart=function(){var b=a.models.historicalBarChart(a.models.candlestickBar());return b.useInteractiveGuideline(!0),b.interactiveLayer.tooltip.contentGenerator(function(a){var c=a.series[0].data,d=c.open'+a.value+"
    open:"+b.yAxis.tickFormat()(c.open)+"
    close:"+b.yAxis.tickFormat()(c.close)+"
    high"+b.yAxis.tickFormat()(c.high)+"
    low:"+b.yAxis.tickFormat()(c.low)+"
    "}),b},a.models.legend=function(){"use strict";function b(p){function q(a,b){return"furious"!=o?"#000":m?a.disengaged?"#000":"#fff":m?void 0:(a.color||(a.color=g(a,b)),a.disabled?a.color:"#fff")}function r(a,b){return m&&"furious"==o&&a.disengaged?"#eee":a.color||g(a,b)}function s(a){return m&&"furious"==o?1:a.disabled?0:1}return p.each(function(b){var g=d-c.left-c.right,p=d3.select(this);a.utils.initSVG(p);var t=p.selectAll("g.nv-legend").data([b]),u=t.enter().append("g").attr("class","nvd3 nv-legend").append("g"),v=t.select("g");t.attr("transform","translate("+c.left+","+c.top+")");var w,x,y=v.selectAll(".nv-series").data(function(a){return"furious"!=o?a:a.filter(function(a){return m?!0:!a.disengaged})}),z=y.enter().append("g").attr("class","nv-series");switch(o){case"furious":x=23;break;case"classic":x=20}if("classic"==o)z.append("circle").style("stroke-width",2).attr("class","nv-legend-symbol").attr("r",5),w=y.select("circle");else if("furious"==o){z.append("rect").style("stroke-width",2).attr("class","nv-legend-symbol").attr("rx",3).attr("ry",3),w=y.select(".nv-legend-symbol"),z.append("g").attr("class","nv-check-box").property("innerHTML",'').attr("transform","translate(-10,-8)scale(0.5)");var A=y.select(".nv-check-box");A.each(function(a,b){d3.select(this).selectAll("path").attr("stroke",q(a,b))})}z.append("text").attr("text-anchor","start").attr("class","nv-legend-text").attr("dy",".32em").attr("dx","8");var B=y.select("text.nv-legend-text");y.on("mouseover",function(a,b){n.legendMouseover(a,b)}).on("mouseout",function(a,b){n.legendMouseout(a,b)}).on("click",function(a,b){n.legendClick(a,b);var c=y.data();if(k){if("classic"==o)l?(c.forEach(function(a){a.disabled=!0}),a.disabled=!1):(a.disabled=!a.disabled,c.every(function(a){return a.disabled})&&c.forEach(function(a){a.disabled=!1}));else if("furious"==o)if(m)a.disengaged=!a.disengaged,a.userDisabled=void 0==a.userDisabled?!!a.disabled:a.userDisabled,a.disabled=a.disengaged||a.userDisabled;else if(!m){a.disabled=!a.disabled,a.userDisabled=a.disabled;var d=c.filter(function(a){return!a.disengaged});d.every(function(a){return a.userDisabled})&&c.forEach(function(a){a.disabled=a.userDisabled=!1})}n.stateChange({disabled:c.map(function(a){return!!a.disabled}),disengaged:c.map(function(a){return!!a.disengaged})})}}).on("dblclick",function(a,b){if(("furious"!=o||!m)&&(n.legendDblclick(a,b),k)){var c=y.data();c.forEach(function(a){a.disabled=!0,"furious"==o&&(a.userDisabled=a.disabled)}),a.disabled=!1,"furious"==o&&(a.userDisabled=a.disabled),n.stateChange({disabled:c.map(function(a){return!!a.disabled})})}}),y.classed("nv-disabled",function(a){return a.userDisabled}),y.exit().remove(),B.attr("fill",q).text(f);var C=0;if(h){var D=[];y.each(function(){var b,c=d3.select(this).select("text");try{if(b=c.node().getComputedTextLength(),0>=b)throw Error()}catch(d){b=a.utils.calcApproxTextWidth(c)}D.push(b+i)});var E=0,F=[];for(C=0;g>C&&Eg&&E>1;){F=[],E--;for(var G=0;G(F[G%E]||0)&&(F[G%E]=D[G]);C=F.reduce(function(a,b){return a+b})}for(var H=[],I=0,J=0;E>I;I++)H[I]=J,J+=F[I];y.attr("transform",function(a,b){return"translate("+H[b%E]+","+(5+Math.floor(b/E)*x)+")"}),j?v.attr("transform","translate("+(d-c.right-C)+","+c.top+")"):v.attr("transform","translate(0,"+c.top+")"),e=c.top+c.bottom+Math.ceil(D.length/E)*x}else{var K,L=5,M=5,N=0;y.attr("transform",function(){var a=d3.select(this).select("text").node().getComputedTextLength()+i;return K=M,dN&&(N=M),K+N>C&&(C=K+N),"translate("+K+","+L+")"}),v.attr("transform","translate("+(d-c.right-N)+","+c.top+")"),e=c.top+c.bottom+L+15}if("furious"==o){w.attr("width",function(a,b){return B[0][b].getComputedTextLength()+27}).attr("height",18).attr("y",-9).attr("x",-15),u.insert("rect",":first-child").attr("class","nv-legend-bg").attr("fill","#eee").attr("opacity",0);var O=v.select(".nv-legend-bg");O.transition().duration(300).attr("x",-x).attr("width",C+x-12).attr("height",e+10).attr("y",-c.top-10).attr("opacity",m?1:0)}w.style("fill",r).style("fill-opacity",s).style("stroke",r)}),b}var c={top:5,right:0,bottom:5,left:0},d=400,e=20,f=function(a){return a.key},g=a.utils.getColor(),h=!0,i=32,j=!0,k=!0,l=!1,m=!1,n=d3.dispatch("legendClick","legendDblclick","legendMouseover","legendMouseout","stateChange"),o="classic";return b.dispatch=n,b.options=a.utils.optionsFunc.bind(b),b._options=Object.create({},{width:{get:function(){return d},set:function(a){d=a}},height:{get:function(){return e},set:function(a){e=a}},key:{get:function(){return f},set:function(a){f=a}},align:{get:function(){return h},set:function(a){h=a}},rightAlign:{get:function(){return j},set:function(a){j=a}},padding:{get:function(){return i},set:function(a){i=a}},updateState:{get:function(){return k},set:function(a){k=a}},radioButtonMode:{get:function(){return l},set:function(a){l=a}},expanded:{get:function(){return m},set:function(a){m=a}},vers:{get:function(){return o},set:function(a){o=a}},margin:{get:function(){return c},set:function(a){c.top=void 0!==a.top?a.top:c.top,c.right=void 0!==a.right?a.right:c.right,c.bottom=void 0!==a.bottom?a.bottom:c.bottom,c.left=void 0!==a.left?a.left:c.left}},color:{get:function(){return g},set:function(b){g=a.utils.getColor(b)}}}),a.utils.initOptions(b),b},a.models.line=function(){"use strict";function b(r){return v.reset(),v.models(e),r.each(function(b){i=d3.select(this);var r=a.utils.availableWidth(g,i,f),s=a.utils.availableHeight(h,i,f);a.utils.initSVG(i),c=e.xScale(),d=e.yScale(),t=t||c,u=u||d;var w=i.selectAll("g.nv-wrap.nv-line").data([b]),x=w.enter().append("g").attr("class","nvd3 nv-wrap nv-line"),y=x.append("defs"),z=x.append("g"),A=w.select("g");z.append("g").attr("class","nv-groups"),z.append("g").attr("class","nv-scatterWrap"),w.attr("transform","translate("+f.left+","+f.top+")"),e.width(r).height(s);var B=w.select(".nv-scatterWrap");B.call(e),y.append("clipPath").attr("id","nv-edge-clip-"+e.id()).append("rect"),w.select("#nv-edge-clip-"+e.id()+" rect").attr("width",r).attr("height",s>0?s:0),A.attr("clip-path",p?"url(#nv-edge-clip-"+e.id()+")":""),B.attr("clip-path",p?"url(#nv-edge-clip-"+e.id()+")":"");var C=w.select(".nv-groups").selectAll(".nv-group").data(function(a){return a},function(a){return a.key});C.enter().append("g").style("stroke-opacity",1e-6).style("stroke-width",function(a){return a.strokeWidth||j}).style("fill-opacity",1e-6),C.exit().remove(),C.attr("class",function(a,b){return(a.classed||"")+" nv-group nv-series-"+b}).classed("hover",function(a){return a.hover}).style("fill",function(a,b){return k(a,b)}).style("stroke",function(a,b){return k(a,b)}),C.watchTransition(v,"line: groups").style("stroke-opacity",1).style("fill-opacity",function(a){return a.fillOpacity||.5});var D=C.selectAll("path.nv-area").data(function(a){return o(a)?[a]:[]});D.enter().append("path").attr("class","nv-area").attr("d",function(b){return d3.svg.area().interpolate(q).defined(n).x(function(b,c){return a.utils.NaNtoZero(t(l(b,c)))}).y0(function(b,c){return a.utils.NaNtoZero(u(m(b,c)))}).y1(function(){return u(d.domain()[0]<=0?d.domain()[1]>=0?0:d.domain()[1]:d.domain()[0])}).apply(this,[b.values])}),C.exit().selectAll("path.nv-area").remove(),D.watchTransition(v,"line: areaPaths").attr("d",function(b){return d3.svg.area().interpolate(q).defined(n).x(function(b,d){return a.utils.NaNtoZero(c(l(b,d)))}).y0(function(b,c){return a.utils.NaNtoZero(d(m(b,c)))}).y1(function(){return d(d.domain()[0]<=0?d.domain()[1]>=0?0:d.domain()[1]:d.domain()[0])}).apply(this,[b.values])});var E=C.selectAll("path.nv-line").data(function(a){return[a.values]});E.enter().append("path").attr("class","nv-line").attr("d",d3.svg.line().interpolate(q).defined(n).x(function(b,c){return a.utils.NaNtoZero(t(l(b,c)))}).y(function(b,c){return a.utils.NaNtoZero(u(m(b,c)))})),E.watchTransition(v,"line: linePaths").attr("d",d3.svg.line().interpolate(q).defined(n).x(function(b,d){return a.utils.NaNtoZero(c(l(b,d)))}).y(function(b,c){return a.utils.NaNtoZero(d(m(b,c)))})),t=c.copy(),u=d.copy()}),v.renderEnd("line immediate"),b}var c,d,e=a.models.scatter(),f={top:0,right:0,bottom:0,left:0},g=960,h=500,i=null,j=1.5,k=a.utils.defaultColor(),l=function(a){return a.x},m=function(a){return a.y},n=function(a,b){return!isNaN(m(a,b))&&null!==m(a,b)},o=function(a){return a.area},p=!1,q="linear",r=250,s=d3.dispatch("elementClick","elementMouseover","elementMouseout","renderEnd");e.pointSize(16).pointDomain([16,256]);var t,u,v=a.utils.renderWatch(s,r);return b.dispatch=s,b.scatter=e,e.dispatch.on("elementClick",function(){s.elementClick.apply(this,arguments)}),e.dispatch.on("elementMouseover",function(){s.elementMouseover.apply(this,arguments)}),e.dispatch.on("elementMouseout",function(){s.elementMouseout.apply(this,arguments)}),b.options=a.utils.optionsFunc.bind(b),b._options=Object.create({},{width:{get:function(){return g},set:function(a){g=a}},height:{get:function(){return h},set:function(a){h=a}},defined:{get:function(){return n},set:function(a){n=a}},interpolate:{get:function(){return q},set:function(a){q=a}},clipEdge:{get:function(){return p},set:function(a){p=a}},margin:{get:function(){return f},set:function(a){f.top=void 0!==a.top?a.top:f.top,f.right=void 0!==a.right?a.right:f.right,f.bottom=void 0!==a.bottom?a.bottom:f.bottom,f.left=void 0!==a.left?a.left:f.left}},duration:{get:function(){return r},set:function(a){r=a,v.reset(r),e.duration(r)}},isArea:{get:function(){return o},set:function(a){o=d3.functor(a)}},x:{get:function(){return l},set:function(a){l=a,e.x(a)}},y:{get:function(){return m},set:function(a){m=a,e.y(a)}},color:{get:function(){return k},set:function(b){k=a.utils.getColor(b),e.color(k)}}}),a.utils.inheritOptions(b,e),a.utils.initOptions(b),b},a.models.lineChart=function(){"use strict";function b(j){return y.reset(),y.models(e),p&&y.models(f),q&&y.models(g),j.each(function(j){var v=d3.select(this),y=this;a.utils.initSVG(v);var B=a.utils.availableWidth(m,v,k),C=a.utils.availableHeight(n,v,k);if(b.update=function(){0===x?v.call(b):v.transition().duration(x).call(b)},b.container=this,t.setter(A(j),b.update).getter(z(j)).update(),t.disabled=j.map(function(a){return!!a.disabled}),!u){var D;u={};for(D in t)u[D]=t[D]instanceof Array?t[D].slice(0):t[D] }if(!(j&&j.length&&j.filter(function(a){return a.values.length}).length))return a.utils.noData(b,v),b;v.selectAll(".nv-noData").remove(),c=e.xScale(),d=e.yScale();var E=v.selectAll("g.nv-wrap.nv-lineChart").data([j]),F=E.enter().append("g").attr("class","nvd3 nv-wrap nv-lineChart").append("g"),G=E.select("g");F.append("rect").style("opacity",0),F.append("g").attr("class","nv-x nv-axis"),F.append("g").attr("class","nv-y nv-axis"),F.append("g").attr("class","nv-linesWrap"),F.append("g").attr("class","nv-legendWrap"),F.append("g").attr("class","nv-interactive"),G.select("rect").attr("width",B).attr("height",C>0?C:0),o&&(h.width(B),G.select(".nv-legendWrap").datum(j).call(h),k.top!=h.height()&&(k.top=h.height(),C=a.utils.availableHeight(n,v,k)),E.select(".nv-legendWrap").attr("transform","translate(0,"+-k.top+")")),E.attr("transform","translate("+k.left+","+k.top+")"),r&&G.select(".nv-y.nv-axis").attr("transform","translate("+B+",0)"),s&&(i.width(B).height(C).margin({left:k.left,top:k.top}).svgContainer(v).xScale(c),E.select(".nv-interactive").call(i)),e.width(B).height(C).color(j.map(function(a,b){return a.color||l(a,b)}).filter(function(a,b){return!j[b].disabled}));var H=G.select(".nv-linesWrap").datum(j.filter(function(a){return!a.disabled}));H.call(e),p&&(f.scale(c)._ticks(a.utils.calcTicksX(B/100,j)).tickSize(-C,0),G.select(".nv-x.nv-axis").attr("transform","translate(0,"+d.range()[0]+")"),G.select(".nv-x.nv-axis").call(f)),q&&(g.scale(d)._ticks(a.utils.calcTicksY(C/36,j)).tickSize(-B,0),G.select(".nv-y.nv-axis").call(g)),h.dispatch.on("stateChange",function(a){for(var c in a)t[c]=a[c];w.stateChange(t),b.update()}),i.dispatch.on("elementMousemove",function(c){e.clearHighlights();var d,h,m,n=[];if(j.filter(function(a,b){return a.seriesIndex=b,!a.disabled}).forEach(function(f,g){h=a.interactiveBisect(f.values,c.pointXValue,b.x());var i=f.values[h],j=b.y()(i,h);null!=j&&e.highlightPoint(g,h,!0),void 0!==i&&(void 0===d&&(d=i),void 0===m&&(m=b.xScale()(b.x()(i,h))),n.push({key:f.key,value:j,color:l(f,f.seriesIndex)}))}),n.length>2){var o=b.yScale().invert(c.mouseY),p=Math.abs(b.yScale().domain()[0]-b.yScale().domain()[1]),q=.03*p,r=a.nearestValueIndex(n.map(function(a){return a.value}),o,q);null!==r&&(n[r].highlight=!0)}var s=f.tickFormat()(b.x()(d,h));i.tooltip.position({left:c.mouseX+k.left,top:c.mouseY+k.top}).chartContainer(y.parentNode).valueFormatter(function(a){return null==a?"N/A":g.tickFormat()(a)}).data({value:s,index:h,series:n})(),i.renderGuideLine(m)}),i.dispatch.on("elementClick",function(c){var d,f=[];j.filter(function(a,b){return a.seriesIndex=b,!a.disabled}).forEach(function(e){var g=a.interactiveBisect(e.values,c.pointXValue,b.x()),h=e.values[g];if("undefined"!=typeof h){"undefined"==typeof d&&(d=b.xScale()(b.x()(h,g)));var i=b.yScale()(b.y()(h,g));f.push({point:h,pointIndex:g,pos:[d,i],seriesIndex:e.seriesIndex,series:e})}}),e.dispatch.elementClick(f)}),i.dispatch.on("elementMouseout",function(){e.clearHighlights()}),w.on("changeState",function(a){"undefined"!=typeof a.disabled&&j.length===a.disabled.length&&(j.forEach(function(b,c){b.disabled=a.disabled[c]}),t.disabled=a.disabled),b.update()})}),y.renderEnd("lineChart immediate"),b}var c,d,e=a.models.line(),f=a.models.axis(),g=a.models.axis(),h=a.models.legend(),i=a.interactiveGuideline(),j=a.models.tooltip(),k={top:30,right:20,bottom:50,left:60},l=a.utils.defaultColor(),m=null,n=null,o=!0,p=!0,q=!0,r=!1,s=!1,t=a.utils.state(),u=null,v=null,w=d3.dispatch("tooltipShow","tooltipHide","stateChange","changeState","renderEnd"),x=250;f.orient("bottom").tickPadding(7),g.orient(r?"right":"left"),j.valueFormatter(function(a,b){return g.tickFormat()(a,b)}).headerFormatter(function(a,b){return f.tickFormat()(a,b)});var y=a.utils.renderWatch(w,x),z=function(a){return function(){return{active:a.map(function(a){return!a.disabled})}}},A=function(a){return function(b){void 0!==b.active&&a.forEach(function(a,c){a.disabled=!b.active[c]})}};return e.dispatch.on("elementMouseover.tooltip",function(a){j.data(a).position(a.pos).hidden(!1)}),e.dispatch.on("elementMouseout.tooltip",function(){j.hidden(!0)}),b.dispatch=w,b.lines=e,b.legend=h,b.xAxis=f,b.yAxis=g,b.interactiveLayer=i,b.tooltip=j,b.dispatch=w,b.options=a.utils.optionsFunc.bind(b),b._options=Object.create({},{width:{get:function(){return m},set:function(a){m=a}},height:{get:function(){return n},set:function(a){n=a}},showLegend:{get:function(){return o},set:function(a){o=a}},showXAxis:{get:function(){return p},set:function(a){p=a}},showYAxis:{get:function(){return q},set:function(a){q=a}},defaultState:{get:function(){return u},set:function(a){u=a}},noData:{get:function(){return v},set:function(a){v=a}},tooltips:{get:function(){return j.enabled()},set:function(b){a.deprecated("tooltips","use chart.tooltip.enabled() instead"),j.enabled(!!b)}},tooltipContent:{get:function(){return j.contentGenerator()},set:function(b){a.deprecated("tooltipContent","use chart.tooltip.contentGenerator() instead"),j.contentGenerator(b)}},margin:{get:function(){return k},set:function(a){k.top=void 0!==a.top?a.top:k.top,k.right=void 0!==a.right?a.right:k.right,k.bottom=void 0!==a.bottom?a.bottom:k.bottom,k.left=void 0!==a.left?a.left:k.left}},duration:{get:function(){return x},set:function(a){x=a,y.reset(x),e.duration(x),f.duration(x),g.duration(x)}},color:{get:function(){return l},set:function(b){l=a.utils.getColor(b),h.color(l),e.color(l)}},rightAlignYAxis:{get:function(){return r},set:function(a){r=a,g.orient(r?"right":"left")}},useInteractiveGuideline:{get:function(){return s},set:function(a){s=a,s&&(e.interactive(!1),e.useVoronoi(!1))}}}),a.utils.inheritOptions(b,e),a.utils.initOptions(b),b},a.models.linePlusBarChart=function(){"use strict";function b(v){return v.each(function(v){function J(a){var b=+("e"==a),c=b?1:-1,d=X/3;return"M"+.5*c+","+d+"A6,6 0 0 "+b+" "+6.5*c+","+(d+6)+"V"+(2*d-6)+"A6,6 0 0 "+b+" "+.5*c+","+2*d+"ZM"+2.5*c+","+(d+8)+"V"+(2*d-8)+"M"+4.5*c+","+(d+8)+"V"+(2*d-8)}function S(){u.empty()||u.extent(I),kb.data([u.empty()?e.domain():I]).each(function(a){var b=e(a[0])-e.range()[0],c=e.range()[1]-e(a[1]);d3.select(this).select(".left").attr("width",0>b?0:b),d3.select(this).select(".right").attr("x",e(a[1])).attr("width",0>c?0:c)})}function T(){I=u.empty()?null:u.extent(),c=u.empty()?e.domain():u.extent(),K.brush({extent:c,brush:u}),S(),l.width(V).height(W).color(v.map(function(a,b){return a.color||C(a,b)}).filter(function(a,b){return!v[b].disabled&&v[b].bar})),j.width(V).height(W).color(v.map(function(a,b){return a.color||C(a,b)}).filter(function(a,b){return!v[b].disabled&&!v[b].bar}));var b=db.select(".nv-focus .nv-barsWrap").datum(Z.length?Z.map(function(a){return{key:a.key,values:a.values.filter(function(a,b){return l.x()(a,b)>=c[0]&&l.x()(a,b)<=c[1]})}}):[{values:[]}]),h=db.select(".nv-focus .nv-linesWrap").datum($[0].disabled?[{values:[]}]:$.map(function(a){return{area:a.area,fillOpacity:a.fillOpacity,key:a.key,values:a.values.filter(function(a,b){return j.x()(a,b)>=c[0]&&j.x()(a,b)<=c[1]})}}));d=Z.length?l.xScale():j.xScale(),n.scale(d)._ticks(a.utils.calcTicksX(V/100,v)).tickSize(-W,0),n.domain([Math.ceil(c[0]),Math.floor(c[1])]),db.select(".nv-x.nv-axis").transition().duration(L).call(n),b.transition().duration(L).call(l),h.transition().duration(L).call(j),db.select(".nv-focus .nv-x.nv-axis").attr("transform","translate(0,"+f.range()[0]+")"),p.scale(f)._ticks(a.utils.calcTicksY(W/36,v)).tickSize(-V,0),q.scale(g)._ticks(a.utils.calcTicksY(W/36,v)).tickSize(Z.length?0:-V,0),db.select(".nv-focus .nv-y1.nv-axis").style("opacity",Z.length?1:0),db.select(".nv-focus .nv-y2.nv-axis").style("opacity",$.length&&!$[0].disabled?1:0).attr("transform","translate("+d.range()[1]+",0)"),db.select(".nv-focus .nv-y1.nv-axis").transition().duration(L).call(p),db.select(".nv-focus .nv-y2.nv-axis").transition().duration(L).call(q)}var U=d3.select(this);a.utils.initSVG(U);var V=a.utils.availableWidth(y,U,w),W=a.utils.availableHeight(z,U,w)-(E?H:0),X=H-x.top-x.bottom;if(b.update=function(){U.transition().duration(L).call(b)},b.container=this,M.setter(R(v),b.update).getter(Q(v)).update(),M.disabled=v.map(function(a){return!!a.disabled}),!N){var Y;N={};for(Y in M)N[Y]=M[Y]instanceof Array?M[Y].slice(0):M[Y]}if(!(v&&v.length&&v.filter(function(a){return a.values.length}).length))return a.utils.noData(b,U),b;U.selectAll(".nv-noData").remove();var Z=v.filter(function(a){return!a.disabled&&a.bar}),$=v.filter(function(a){return!a.bar});d=l.xScale(),e=o.scale(),f=l.yScale(),g=j.yScale(),h=m.yScale(),i=k.yScale();var _=v.filter(function(a){return!a.disabled&&a.bar}).map(function(a){return a.values.map(function(a,b){return{x:A(a,b),y:B(a,b)}})}),ab=v.filter(function(a){return!a.disabled&&!a.bar}).map(function(a){return a.values.map(function(a,b){return{x:A(a,b),y:B(a,b)}})});d.range([0,V]),e.domain(d3.extent(d3.merge(_.concat(ab)),function(a){return a.x})).range([0,V]);var bb=U.selectAll("g.nv-wrap.nv-linePlusBar").data([v]),cb=bb.enter().append("g").attr("class","nvd3 nv-wrap nv-linePlusBar").append("g"),db=bb.select("g");cb.append("g").attr("class","nv-legendWrap");var eb=cb.append("g").attr("class","nv-focus");eb.append("g").attr("class","nv-x nv-axis"),eb.append("g").attr("class","nv-y1 nv-axis"),eb.append("g").attr("class","nv-y2 nv-axis"),eb.append("g").attr("class","nv-barsWrap"),eb.append("g").attr("class","nv-linesWrap");var fb=cb.append("g").attr("class","nv-context");if(fb.append("g").attr("class","nv-x nv-axis"),fb.append("g").attr("class","nv-y1 nv-axis"),fb.append("g").attr("class","nv-y2 nv-axis"),fb.append("g").attr("class","nv-barsWrap"),fb.append("g").attr("class","nv-linesWrap"),fb.append("g").attr("class","nv-brushBackground"),fb.append("g").attr("class","nv-x nv-brush"),D){var gb=t.align()?V/2:V,hb=t.align()?gb:0;t.width(gb),db.select(".nv-legendWrap").datum(v.map(function(a){return a.originalKey=void 0===a.originalKey?a.key:a.originalKey,a.key=a.originalKey+(a.bar?O:P),a})).call(t),w.top!=t.height()&&(w.top=t.height(),W=a.utils.availableHeight(z,U,w)-H),db.select(".nv-legendWrap").attr("transform","translate("+hb+","+-w.top+")")}bb.attr("transform","translate("+w.left+","+w.top+")"),db.select(".nv-context").style("display",E?"initial":"none"),m.width(V).height(X).color(v.map(function(a,b){return a.color||C(a,b)}).filter(function(a,b){return!v[b].disabled&&v[b].bar})),k.width(V).height(X).color(v.map(function(a,b){return a.color||C(a,b)}).filter(function(a,b){return!v[b].disabled&&!v[b].bar}));var ib=db.select(".nv-context .nv-barsWrap").datum(Z.length?Z:[{values:[]}]),jb=db.select(".nv-context .nv-linesWrap").datum($[0].disabled?[{values:[]}]:$);db.select(".nv-context").attr("transform","translate(0,"+(W+w.bottom+x.top)+")"),ib.transition().call(m),jb.transition().call(k),G&&(o._ticks(a.utils.calcTicksX(V/100,v)).tickSize(-X,0),db.select(".nv-context .nv-x.nv-axis").attr("transform","translate(0,"+h.range()[0]+")"),db.select(".nv-context .nv-x.nv-axis").transition().call(o)),F&&(r.scale(h)._ticks(X/36).tickSize(-V,0),s.scale(i)._ticks(X/36).tickSize(Z.length?0:-V,0),db.select(".nv-context .nv-y3.nv-axis").style("opacity",Z.length?1:0).attr("transform","translate(0,"+e.range()[0]+")"),db.select(".nv-context .nv-y2.nv-axis").style("opacity",$.length?1:0).attr("transform","translate("+e.range()[1]+",0)"),db.select(".nv-context .nv-y1.nv-axis").transition().call(r),db.select(".nv-context .nv-y2.nv-axis").transition().call(s)),u.x(e).on("brush",T),I&&u.extent(I);var kb=db.select(".nv-brushBackground").selectAll("g").data([I||u.extent()]),lb=kb.enter().append("g");lb.append("rect").attr("class","left").attr("x",0).attr("y",0).attr("height",X),lb.append("rect").attr("class","right").attr("x",0).attr("y",0).attr("height",X);var mb=db.select(".nv-x.nv-brush").call(u);mb.selectAll("rect").attr("height",X),mb.selectAll(".resize").append("path").attr("d",J),t.dispatch.on("stateChange",function(a){for(var c in a)M[c]=a[c];K.stateChange(M),b.update()}),K.on("changeState",function(a){"undefined"!=typeof a.disabled&&(v.forEach(function(b,c){b.disabled=a.disabled[c]}),M.disabled=a.disabled),b.update()}),T()}),b}var c,d,e,f,g,h,i,j=a.models.line(),k=a.models.line(),l=a.models.historicalBar(),m=a.models.historicalBar(),n=a.models.axis(),o=a.models.axis(),p=a.models.axis(),q=a.models.axis(),r=a.models.axis(),s=a.models.axis(),t=a.models.legend(),u=d3.svg.brush(),v=a.models.tooltip(),w={top:30,right:30,bottom:30,left:60},x={top:0,right:30,bottom:20,left:60},y=null,z=null,A=function(a){return a.x},B=function(a){return a.y},C=a.utils.defaultColor(),D=!0,E=!0,F=!1,G=!0,H=50,I=null,J=null,K=d3.dispatch("brush","stateChange","changeState"),L=0,M=a.utils.state(),N=null,O=" (left axis)",P=" (right axis)";j.clipEdge(!0),k.interactive(!1),n.orient("bottom").tickPadding(5),p.orient("left"),q.orient("right"),o.orient("bottom").tickPadding(5),r.orient("left"),s.orient("right"),v.headerEnabled(!0).headerFormatter(function(a,b){return n.tickFormat()(a,b)});var Q=function(a){return function(){return{active:a.map(function(a){return!a.disabled})}}},R=function(a){return function(b){void 0!==b.active&&a.forEach(function(a,c){a.disabled=!b.active[c]})}};return j.dispatch.on("elementMouseover.tooltip",function(a){v.duration(100).valueFormatter(function(a,b){return q.tickFormat()(a,b)}).data(a).position(a.pos).hidden(!1)}),j.dispatch.on("elementMouseout.tooltip",function(){v.hidden(!0)}),l.dispatch.on("elementMouseover.tooltip",function(a){a.value=b.x()(a.data),a.series={value:b.y()(a.data),color:a.color},v.duration(0).valueFormatter(function(a,b){return p.tickFormat()(a,b)}).data(a).hidden(!1)}),l.dispatch.on("elementMouseout.tooltip",function(){v.hidden(!0)}),l.dispatch.on("elementMousemove.tooltip",function(){v.position({top:d3.event.pageY,left:d3.event.pageX})()}),b.dispatch=K,b.legend=t,b.lines=j,b.lines2=k,b.bars=l,b.bars2=m,b.xAxis=n,b.x2Axis=o,b.y1Axis=p,b.y2Axis=q,b.y3Axis=r,b.y4Axis=s,b.tooltip=v,b.options=a.utils.optionsFunc.bind(b),b._options=Object.create({},{width:{get:function(){return y},set:function(a){y=a}},height:{get:function(){return z},set:function(a){z=a}},showLegend:{get:function(){return D},set:function(a){D=a}},brushExtent:{get:function(){return I},set:function(a){I=a}},noData:{get:function(){return J},set:function(a){J=a}},focusEnable:{get:function(){return E},set:function(a){E=a}},focusHeight:{get:function(){return H},set:function(a){H=a}},focusShowAxisX:{get:function(){return G},set:function(a){G=a}},focusShowAxisY:{get:function(){return F},set:function(a){F=a}},legendLeftAxisHint:{get:function(){return O},set:function(a){O=a}},legendRightAxisHint:{get:function(){return P},set:function(a){P=a}},tooltips:{get:function(){return v.enabled()},set:function(b){a.deprecated("tooltips","use chart.tooltip.enabled() instead"),v.enabled(!!b)}},tooltipContent:{get:function(){return v.contentGenerator()},set:function(b){a.deprecated("tooltipContent","use chart.tooltip.contentGenerator() instead"),v.contentGenerator(b)}},margin:{get:function(){return w},set:function(a){w.top=void 0!==a.top?a.top:w.top,w.right=void 0!==a.right?a.right:w.right,w.bottom=void 0!==a.bottom?a.bottom:w.bottom,w.left=void 0!==a.left?a.left:w.left}},duration:{get:function(){return L},set:function(a){L=a}},color:{get:function(){return C},set:function(b){C=a.utils.getColor(b),t.color(C)}},x:{get:function(){return A},set:function(a){A=a,j.x(a),k.x(a),l.x(a),m.x(a)}},y:{get:function(){return B},set:function(a){B=a,j.y(a),k.y(a),l.y(a),m.y(a)}}}),a.utils.inheritOptions(b,j),a.utils.initOptions(b),b},a.models.lineWithFocusChart=function(){"use strict";function b(o){return o.each(function(o){function z(a){var b=+("e"==a),c=b?1:-1,d=M/3;return"M"+.5*c+","+d+"A6,6 0 0 "+b+" "+6.5*c+","+(d+6)+"V"+(2*d-6)+"A6,6 0 0 "+b+" "+.5*c+","+2*d+"ZM"+2.5*c+","+(d+8)+"V"+(2*d-8)+"M"+4.5*c+","+(d+8)+"V"+(2*d-8)}function G(){n.empty()||n.extent(y),U.data([n.empty()?e.domain():y]).each(function(a){var b=e(a[0])-c.range()[0],d=K-e(a[1]);d3.select(this).select(".left").attr("width",0>b?0:b),d3.select(this).select(".right").attr("x",e(a[1])).attr("width",0>d?0:d)})}function H(){y=n.empty()?null:n.extent();var a=n.empty()?e.domain():n.extent();if(!(Math.abs(a[0]-a[1])<=1)){A.brush({extent:a,brush:n}),G();var b=Q.select(".nv-focus .nv-linesWrap").datum(o.filter(function(a){return!a.disabled}).map(function(b){return{key:b.key,area:b.area,values:b.values.filter(function(b,c){return g.x()(b,c)>=a[0]&&g.x()(b,c)<=a[1]})}}));b.transition().duration(B).call(g),Q.select(".nv-focus .nv-x.nv-axis").transition().duration(B).call(i),Q.select(".nv-focus .nv-y.nv-axis").transition().duration(B).call(j)}}var I=d3.select(this),J=this;a.utils.initSVG(I);var K=a.utils.availableWidth(t,I,q),L=a.utils.availableHeight(u,I,q)-v,M=v-r.top-r.bottom;if(b.update=function(){I.transition().duration(B).call(b)},b.container=this,C.setter(F(o),b.update).getter(E(o)).update(),C.disabled=o.map(function(a){return!!a.disabled}),!D){var N;D={};for(N in C)D[N]=C[N]instanceof Array?C[N].slice(0):C[N]}if(!(o&&o.length&&o.filter(function(a){return a.values.length}).length))return a.utils.noData(b,I),b;I.selectAll(".nv-noData").remove(),c=g.xScale(),d=g.yScale(),e=h.xScale(),f=h.yScale();var O=I.selectAll("g.nv-wrap.nv-lineWithFocusChart").data([o]),P=O.enter().append("g").attr("class","nvd3 nv-wrap nv-lineWithFocusChart").append("g"),Q=O.select("g");P.append("g").attr("class","nv-legendWrap");var R=P.append("g").attr("class","nv-focus");R.append("g").attr("class","nv-x nv-axis"),R.append("g").attr("class","nv-y nv-axis"),R.append("g").attr("class","nv-linesWrap"),R.append("g").attr("class","nv-interactive");var S=P.append("g").attr("class","nv-context");S.append("g").attr("class","nv-x nv-axis"),S.append("g").attr("class","nv-y nv-axis"),S.append("g").attr("class","nv-linesWrap"),S.append("g").attr("class","nv-brushBackground"),S.append("g").attr("class","nv-x nv-brush"),x&&(m.width(K),Q.select(".nv-legendWrap").datum(o).call(m),q.top!=m.height()&&(q.top=m.height(),L=a.utils.availableHeight(u,I,q)-v),Q.select(".nv-legendWrap").attr("transform","translate(0,"+-q.top+")")),O.attr("transform","translate("+q.left+","+q.top+")"),w&&(p.width(K).height(L).margin({left:q.left,top:q.top}).svgContainer(I).xScale(c),O.select(".nv-interactive").call(p)),g.width(K).height(L).color(o.map(function(a,b){return a.color||s(a,b)}).filter(function(a,b){return!o[b].disabled})),h.defined(g.defined()).width(K).height(M).color(o.map(function(a,b){return a.color||s(a,b)}).filter(function(a,b){return!o[b].disabled})),Q.select(".nv-context").attr("transform","translate(0,"+(L+q.bottom+r.top)+")");var T=Q.select(".nv-context .nv-linesWrap").datum(o.filter(function(a){return!a.disabled}));d3.transition(T).call(h),i.scale(c)._ticks(a.utils.calcTicksX(K/100,o)).tickSize(-L,0),j.scale(d)._ticks(a.utils.calcTicksY(L/36,o)).tickSize(-K,0),Q.select(".nv-focus .nv-x.nv-axis").attr("transform","translate(0,"+L+")"),n.x(e).on("brush",function(){H()}),y&&n.extent(y);var U=Q.select(".nv-brushBackground").selectAll("g").data([y||n.extent()]),V=U.enter().append("g");V.append("rect").attr("class","left").attr("x",0).attr("y",0).attr("height",M),V.append("rect").attr("class","right").attr("x",0).attr("y",0).attr("height",M);var W=Q.select(".nv-x.nv-brush").call(n);W.selectAll("rect").attr("height",M),W.selectAll(".resize").append("path").attr("d",z),H(),k.scale(e)._ticks(a.utils.calcTicksX(K/100,o)).tickSize(-M,0),Q.select(".nv-context .nv-x.nv-axis").attr("transform","translate(0,"+f.range()[0]+")"),d3.transition(Q.select(".nv-context .nv-x.nv-axis")).call(k),l.scale(f)._ticks(a.utils.calcTicksY(M/36,o)).tickSize(-K,0),d3.transition(Q.select(".nv-context .nv-y.nv-axis")).call(l),Q.select(".nv-context .nv-x.nv-axis").attr("transform","translate(0,"+f.range()[0]+")"),m.dispatch.on("stateChange",function(a){for(var c in a)C[c]=a[c];A.stateChange(C),b.update()}),p.dispatch.on("elementMousemove",function(c){g.clearHighlights();var d,f,h,k=[];if(o.filter(function(a,b){return a.seriesIndex=b,!a.disabled}).forEach(function(i,j){var l=n.empty()?e.domain():n.extent(),m=i.values.filter(function(a,b){return g.x()(a,b)>=l[0]&&g.x()(a,b)<=l[1]});f=a.interactiveBisect(m,c.pointXValue,g.x());var o=m[f],p=b.y()(o,f);null!=p&&g.highlightPoint(j,f,!0),void 0!==o&&(void 0===d&&(d=o),void 0===h&&(h=b.xScale()(b.x()(o,f))),k.push({key:i.key,value:b.y()(o,f),color:s(i,i.seriesIndex)}))}),k.length>2){var l=b.yScale().invert(c.mouseY),m=Math.abs(b.yScale().domain()[0]-b.yScale().domain()[1]),r=.03*m,t=a.nearestValueIndex(k.map(function(a){return a.value}),l,r);null!==t&&(k[t].highlight=!0)}var u=i.tickFormat()(b.x()(d,f));p.tooltip.position({left:c.mouseX+q.left,top:c.mouseY+q.top}).chartContainer(J.parentNode).valueFormatter(function(a){return null==a?"N/A":j.tickFormat()(a)}).data({value:u,index:f,series:k})(),p.renderGuideLine(h)}),p.dispatch.on("elementMouseout",function(){g.clearHighlights()}),A.on("changeState",function(a){"undefined"!=typeof a.disabled&&o.forEach(function(b,c){b.disabled=a.disabled[c]}),b.update()})}),b}var c,d,e,f,g=a.models.line(),h=a.models.line(),i=a.models.axis(),j=a.models.axis(),k=a.models.axis(),l=a.models.axis(),m=a.models.legend(),n=d3.svg.brush(),o=a.models.tooltip(),p=a.interactiveGuideline(),q={top:30,right:30,bottom:30,left:60},r={top:0,right:30,bottom:20,left:60},s=a.utils.defaultColor(),t=null,u=null,v=50,w=!1,x=!0,y=null,z=null,A=d3.dispatch("brush","stateChange","changeState"),B=250,C=a.utils.state(),D=null;g.clipEdge(!0).duration(0),h.interactive(!1),i.orient("bottom").tickPadding(5),j.orient("left"),k.orient("bottom").tickPadding(5),l.orient("left"),o.valueFormatter(function(a,b){return j.tickFormat()(a,b)}).headerFormatter(function(a,b){return i.tickFormat()(a,b)});var E=function(a){return function(){return{active:a.map(function(a){return!a.disabled})}}},F=function(a){return function(b){void 0!==b.active&&a.forEach(function(a,c){a.disabled=!b.active[c]})}};return g.dispatch.on("elementMouseover.tooltip",function(a){o.data(a).position(a.pos).hidden(!1)}),g.dispatch.on("elementMouseout.tooltip",function(){o.hidden(!0)}),b.dispatch=A,b.legend=m,b.lines=g,b.lines2=h,b.xAxis=i,b.yAxis=j,b.x2Axis=k,b.y2Axis=l,b.interactiveLayer=p,b.tooltip=o,b.options=a.utils.optionsFunc.bind(b),b._options=Object.create({},{width:{get:function(){return t},set:function(a){t=a}},height:{get:function(){return u},set:function(a){u=a}},focusHeight:{get:function(){return v},set:function(a){v=a}},showLegend:{get:function(){return x},set:function(a){x=a}},brushExtent:{get:function(){return y},set:function(a){y=a}},defaultState:{get:function(){return D},set:function(a){D=a}},noData:{get:function(){return z},set:function(a){z=a}},tooltips:{get:function(){return o.enabled()},set:function(b){a.deprecated("tooltips","use chart.tooltip.enabled() instead"),o.enabled(!!b)}},tooltipContent:{get:function(){return o.contentGenerator()},set:function(b){a.deprecated("tooltipContent","use chart.tooltip.contentGenerator() instead"),o.contentGenerator(b)}},margin:{get:function(){return q},set:function(a){q.top=void 0!==a.top?a.top:q.top,q.right=void 0!==a.right?a.right:q.right,q.bottom=void 0!==a.bottom?a.bottom:q.bottom,q.left=void 0!==a.left?a.left:q.left}},color:{get:function(){return s},set:function(b){s=a.utils.getColor(b),m.color(s)}},interpolate:{get:function(){return g.interpolate()},set:function(a){g.interpolate(a),h.interpolate(a)}},xTickFormat:{get:function(){return i.tickFormat()},set:function(a){i.tickFormat(a),k.tickFormat(a)}},yTickFormat:{get:function(){return j.tickFormat()},set:function(a){j.tickFormat(a),l.tickFormat(a)}},duration:{get:function(){return B},set:function(a){B=a,j.duration(B),l.duration(B),i.duration(B),k.duration(B)}},x:{get:function(){return g.x()},set:function(a){g.x(a),h.x(a)}},y:{get:function(){return g.y()},set:function(a){g.y(a),h.y(a)}},useInteractiveGuideline:{get:function(){return w},set:function(a){w=a,w&&(g.interactive(!1),g.useVoronoi(!1))}}}),a.utils.inheritOptions(b,g),a.utils.initOptions(b),b},a.models.multiBar=function(){"use strict";function b(E){return C.reset(),E.each(function(b){var E=k-j.left-j.right,F=l-j.top-j.bottom;p=d3.select(this),a.utils.initSVG(p);var G=0;if(x&&b.length&&(x=[{values:b[0].values.map(function(a){return{x:a.x,y:0,series:a.series,size:.01}})}]),u){var H=d3.layout.stack().offset(v).values(function(a){return a.values}).y(r)(!b.length&&x?x:b);H.forEach(function(a,c){a.nonStackable?(b[c].nonStackableSeries=G++,H[c]=b[c]):c>0&&H[c-1].nonStackable&&H[c].values.map(function(a,b){a.y0-=H[c-1].values[b].y,a.y1=a.y0+a.y})}),b=H}b.forEach(function(a,b){a.values.forEach(function(c){c.series=b,c.key=a.key})}),u&&b[0].values.map(function(a,c){var d=0,e=0;b.map(function(a,f){if(!b[f].nonStackable){var g=a.values[c];g.size=Math.abs(g.y),g.y<0?(g.y1=e,e-=g.size):(g.y1=g.size+d,d+=g.size)}})});var I=d&&e?[]:b.map(function(a,b){return a.values.map(function(a,c){return{x:q(a,c),y:r(a,c),y0:a.y0,y1:a.y1,idx:b}})});m.domain(d||d3.merge(I).map(function(a){return a.x})).rangeBands(f||[0,E],A),n.domain(e||d3.extent(d3.merge(I).map(function(a){var c=a.y;return u&&!b[a.idx].nonStackable&&(c=a.y>0?a.y1:a.y1+a.y),c}).concat(s))).range(g||[F,0]),m.domain()[0]===m.domain()[1]&&m.domain(m.domain()[0]?[m.domain()[0]-.01*m.domain()[0],m.domain()[1]+.01*m.domain()[1]]:[-1,1]),n.domain()[0]===n.domain()[1]&&n.domain(n.domain()[0]?[n.domain()[0]+.01*n.domain()[0],n.domain()[1]-.01*n.domain()[1]]:[-1,1]),h=h||m,i=i||n;var J=p.selectAll("g.nv-wrap.nv-multibar").data([b]),K=J.enter().append("g").attr("class","nvd3 nv-wrap nv-multibar"),L=K.append("defs"),M=K.append("g"),N=J.select("g");M.append("g").attr("class","nv-groups"),J.attr("transform","translate("+j.left+","+j.top+")"),L.append("clipPath").attr("id","nv-edge-clip-"+o).append("rect"),J.select("#nv-edge-clip-"+o+" rect").attr("width",E).attr("height",F),N.attr("clip-path",t?"url(#nv-edge-clip-"+o+")":"");var O=J.select(".nv-groups").selectAll(".nv-group").data(function(a){return a},function(a,b){return b});O.enter().append("g").style("stroke-opacity",1e-6).style("fill-opacity",1e-6);var P=C.transition(O.exit().selectAll("rect.nv-bar"),"multibarExit",Math.min(100,z)).attr("y",function(a){var c=i(0)||0;return u&&b[a.series]&&!b[a.series].nonStackable&&(c=i(a.y0)),c}).attr("height",0).remove();P.delay&&P.delay(function(a,b){var c=b*(z/(D+1))-b;return c}),O.attr("class",function(a,b){return"nv-group nv-series-"+b}).classed("hover",function(a){return a.hover}).style("fill",function(a,b){return w(a,b)}).style("stroke",function(a,b){return w(a,b)}),O.style("stroke-opacity",1).style("fill-opacity",.75);var Q=O.selectAll("rect.nv-bar").data(function(a){return x&&!b.length?x.values:a.values});Q.exit().remove();Q.enter().append("rect").attr("class",function(a,b){return r(a,b)<0?"nv-bar negative":"nv-bar positive"}).attr("x",function(a,c,d){return u&&!b[d].nonStackable?0:d*m.rangeBand()/b.length}).attr("y",function(a,c,d){return i(u&&!b[d].nonStackable?a.y0:0)||0}).attr("height",0).attr("width",function(a,c,d){return m.rangeBand()/(u&&!b[d].nonStackable?1:b.length)}).attr("transform",function(a,b){return"translate("+m(q(a,b))+",0)"});Q.style("fill",function(a,b,c){return w(a,c,b)}).style("stroke",function(a,b,c){return w(a,c,b)}).on("mouseover",function(a,b){d3.select(this).classed("hover",!0),B.elementMouseover({data:a,index:b,color:d3.select(this).style("fill")})}).on("mouseout",function(a,b){d3.select(this).classed("hover",!1),B.elementMouseout({data:a,index:b,color:d3.select(this).style("fill")})}).on("mousemove",function(a,b){B.elementMousemove({data:a,index:b,color:d3.select(this).style("fill")})}).on("click",function(a,b){B.elementClick({data:a,index:b,color:d3.select(this).style("fill")}),d3.event.stopPropagation()}).on("dblclick",function(a,b){B.elementDblClick({data:a,index:b,color:d3.select(this).style("fill")}),d3.event.stopPropagation()}),Q.attr("class",function(a,b){return r(a,b)<0?"nv-bar negative":"nv-bar positive"}).attr("transform",function(a,b){return"translate("+m(q(a,b))+",0)"}),y&&(c||(c=b.map(function(){return!0})),Q.style("fill",function(a,b,d){return d3.rgb(y(a,b)).darker(c.map(function(a,b){return b}).filter(function(a,b){return!c[b]})[d]).toString()}).style("stroke",function(a,b,d){return d3.rgb(y(a,b)).darker(c.map(function(a,b){return b}).filter(function(a,b){return!c[b]})[d]).toString()}));var R=Q.watchTransition(C,"multibar",Math.min(250,z)).delay(function(a,c){return c*z/b[0].values.length});u?R.attr("y",function(a,c,d){var e=0;return e=b[d].nonStackable?r(a,c)<0?n(0):n(0)-n(r(a,c))<-1?n(0)-1:n(r(a,c))||0:n(a.y1)}).attr("height",function(a,c,d){return b[d].nonStackable?Math.max(Math.abs(n(r(a,c))-n(0)),1)||0:Math.max(Math.abs(n(a.y+a.y0)-n(a.y0)),1)}).attr("x",function(a,c,d){var e=0;return b[d].nonStackable&&(e=a.series*m.rangeBand()/b.length,b.length!==G&&(e=b[d].nonStackableSeries*m.rangeBand()/(2*G))),e}).attr("width",function(a,c,d){if(b[d].nonStackable){var e=m.rangeBand()/G;return b.length!==G&&(e=m.rangeBand()/(2*G)),e}return m.rangeBand()}):R.attr("x",function(a){return a.series*m.rangeBand()/b.length}).attr("width",m.rangeBand()/b.length).attr("y",function(a,b){return r(a,b)<0?n(0):n(0)-n(r(a,b))<1?n(0)-1:n(r(a,b))||0}).attr("height",function(a,b){return Math.max(Math.abs(n(r(a,b))-n(0)),1)||0}),h=m.copy(),i=n.copy(),b[0]&&b[0].values&&(D=b[0].values.length)}),C.renderEnd("multibar immediate"),b}var c,d,e,f,g,h,i,j={top:0,right:0,bottom:0,left:0},k=960,l=500,m=d3.scale.ordinal(),n=d3.scale.linear(),o=Math.floor(1e4*Math.random()),p=null,q=function(a){return a.x},r=function(a){return a.y},s=[0],t=!0,u=!1,v="zero",w=a.utils.defaultColor(),x=!1,y=null,z=500,A=.1,B=d3.dispatch("chartClick","elementClick","elementDblClick","elementMouseover","elementMouseout","elementMousemove","renderEnd"),C=a.utils.renderWatch(B,z),D=0;return b.dispatch=B,b.options=a.utils.optionsFunc.bind(b),b._options=Object.create({},{width:{get:function(){return k},set:function(a){k=a}},height:{get:function(){return l},set:function(a){l=a}},x:{get:function(){return q},set:function(a){q=a}},y:{get:function(){return r},set:function(a){r=a}},xScale:{get:function(){return m},set:function(a){m=a}},yScale:{get:function(){return n},set:function(a){n=a}},xDomain:{get:function(){return d},set:function(a){d=a}},yDomain:{get:function(){return e},set:function(a){e=a}},xRange:{get:function(){return f},set:function(a){f=a}},yRange:{get:function(){return g},set:function(a){g=a}},forceY:{get:function(){return s},set:function(a){s=a}},stacked:{get:function(){return u},set:function(a){u=a}},stackOffset:{get:function(){return v},set:function(a){v=a}},clipEdge:{get:function(){return t},set:function(a){t=a}},disabled:{get:function(){return c},set:function(a){c=a}},id:{get:function(){return o},set:function(a){o=a}},hideable:{get:function(){return x},set:function(a){x=a}},groupSpacing:{get:function(){return A},set:function(a){A=a}},margin:{get:function(){return j},set:function(a){j.top=void 0!==a.top?a.top:j.top,j.right=void 0!==a.right?a.right:j.right,j.bottom=void 0!==a.bottom?a.bottom:j.bottom,j.left=void 0!==a.left?a.left:j.left}},duration:{get:function(){return z},set:function(a){z=a,C.reset(z)}},color:{get:function(){return w},set:function(b){w=a.utils.getColor(b)}},barColor:{get:function(){return y},set:function(b){y=b?a.utils.getColor(b):null}}}),a.utils.initOptions(b),b},a.models.multiBarChart=function(){"use strict";function b(j){return D.reset(),D.models(e),r&&D.models(f),s&&D.models(g),j.each(function(j){var z=d3.select(this);a.utils.initSVG(z);var D=a.utils.availableWidth(l,z,k),H=a.utils.availableHeight(m,z,k);if(b.update=function(){0===C?z.call(b):z.transition().duration(C).call(b)},b.container=this,x.setter(G(j),b.update).getter(F(j)).update(),x.disabled=j.map(function(a){return!!a.disabled}),!y){var I;y={};for(I in x)y[I]=x[I]instanceof Array?x[I].slice(0):x[I]}if(!(j&&j.length&&j.filter(function(a){return a.values.length}).length))return a.utils.noData(b,z),b;z.selectAll(".nv-noData").remove(),c=e.xScale(),d=e.yScale(); var J=z.selectAll("g.nv-wrap.nv-multiBarWithLegend").data([j]),K=J.enter().append("g").attr("class","nvd3 nv-wrap nv-multiBarWithLegend").append("g"),L=J.select("g");if(K.append("g").attr("class","nv-x nv-axis"),K.append("g").attr("class","nv-y nv-axis"),K.append("g").attr("class","nv-barsWrap"),K.append("g").attr("class","nv-legendWrap"),K.append("g").attr("class","nv-controlsWrap"),q&&(h.width(D-B()),L.select(".nv-legendWrap").datum(j).call(h),k.top!=h.height()&&(k.top=h.height(),H=a.utils.availableHeight(m,z,k)),L.select(".nv-legendWrap").attr("transform","translate("+B()+","+-k.top+")")),o){var M=[{key:p.grouped||"Grouped",disabled:e.stacked()},{key:p.stacked||"Stacked",disabled:!e.stacked()}];i.width(B()).color(["#444","#444","#444"]),L.select(".nv-controlsWrap").datum(M).attr("transform","translate(0,"+-k.top+")").call(i)}J.attr("transform","translate("+k.left+","+k.top+")"),t&&L.select(".nv-y.nv-axis").attr("transform","translate("+D+",0)"),e.disabled(j.map(function(a){return a.disabled})).width(D).height(H).color(j.map(function(a,b){return a.color||n(a,b)}).filter(function(a,b){return!j[b].disabled}));var N=L.select(".nv-barsWrap").datum(j.filter(function(a){return!a.disabled}));if(N.call(e),r){f.scale(c)._ticks(a.utils.calcTicksX(D/100,j)).tickSize(-H,0),L.select(".nv-x.nv-axis").attr("transform","translate(0,"+d.range()[0]+")"),L.select(".nv-x.nv-axis").call(f);var O=L.select(".nv-x.nv-axis > g").selectAll("g");if(O.selectAll("line, text").style("opacity",1),v){var P=function(a,b){return"translate("+a+","+b+")"},Q=5,R=17;O.selectAll("text").attr("transform",function(a,b,c){return P(0,c%2==0?Q:R)});var S=d3.selectAll(".nv-x.nv-axis .nv-wrap g g text")[0].length;L.selectAll(".nv-x.nv-axis .nv-axisMaxMin text").attr("transform",function(a,b){return P(0,0===b||S%2!==0?R:Q)})}u&&O.filter(function(a,b){return b%Math.ceil(j[0].values.length/(D/100))!==0}).selectAll("text, line").style("opacity",0),w&&O.selectAll(".tick text").attr("transform","rotate("+w+" 0,0)").style("text-anchor",w>0?"start":"end"),L.select(".nv-x.nv-axis").selectAll("g.nv-axisMaxMin text").style("opacity",1)}s&&(g.scale(d)._ticks(a.utils.calcTicksY(H/36,j)).tickSize(-D,0),L.select(".nv-y.nv-axis").call(g)),h.dispatch.on("stateChange",function(a){for(var c in a)x[c]=a[c];A.stateChange(x),b.update()}),i.dispatch.on("legendClick",function(a){if(a.disabled){switch(M=M.map(function(a){return a.disabled=!0,a}),a.disabled=!1,a.key){case"Grouped":case p.grouped:e.stacked(!1);break;case"Stacked":case p.stacked:e.stacked(!0)}x.stacked=e.stacked(),A.stateChange(x),b.update()}}),A.on("changeState",function(a){"undefined"!=typeof a.disabled&&(j.forEach(function(b,c){b.disabled=a.disabled[c]}),x.disabled=a.disabled),"undefined"!=typeof a.stacked&&(e.stacked(a.stacked),x.stacked=a.stacked,E=a.stacked),b.update()})}),D.renderEnd("multibarchart immediate"),b}var c,d,e=a.models.multiBar(),f=a.models.axis(),g=a.models.axis(),h=a.models.legend(),i=a.models.legend(),j=a.models.tooltip(),k={top:30,right:20,bottom:50,left:60},l=null,m=null,n=a.utils.defaultColor(),o=!0,p={},q=!0,r=!0,s=!0,t=!1,u=!0,v=!1,w=0,x=a.utils.state(),y=null,z=null,A=d3.dispatch("stateChange","changeState","renderEnd"),B=function(){return o?180:0},C=250;x.stacked=!1,e.stacked(!1),f.orient("bottom").tickPadding(7).showMaxMin(!1).tickFormat(function(a){return a}),g.orient(t?"right":"left").tickFormat(d3.format(",.1f")),j.duration(0).valueFormatter(function(a,b){return g.tickFormat()(a,b)}).headerFormatter(function(a,b){return f.tickFormat()(a,b)}),i.updateState(!1);var D=a.utils.renderWatch(A),E=!1,F=function(a){return function(){return{active:a.map(function(a){return!a.disabled}),stacked:E}}},G=function(a){return function(b){void 0!==b.stacked&&(E=b.stacked),void 0!==b.active&&a.forEach(function(a,c){a.disabled=!b.active[c]})}};return e.dispatch.on("elementMouseover.tooltip",function(a){a.value=b.x()(a.data),a.series={key:a.data.key,value:b.y()(a.data),color:a.color},j.data(a).hidden(!1)}),e.dispatch.on("elementMouseout.tooltip",function(){j.hidden(!0)}),e.dispatch.on("elementMousemove.tooltip",function(){j.position({top:d3.event.pageY,left:d3.event.pageX})()}),b.dispatch=A,b.multibar=e,b.legend=h,b.controls=i,b.xAxis=f,b.yAxis=g,b.state=x,b.tooltip=j,b.options=a.utils.optionsFunc.bind(b),b._options=Object.create({},{width:{get:function(){return l},set:function(a){l=a}},height:{get:function(){return m},set:function(a){m=a}},showLegend:{get:function(){return q},set:function(a){q=a}},showControls:{get:function(){return o},set:function(a){o=a}},controlLabels:{get:function(){return p},set:function(a){p=a}},showXAxis:{get:function(){return r},set:function(a){r=a}},showYAxis:{get:function(){return s},set:function(a){s=a}},defaultState:{get:function(){return y},set:function(a){y=a}},noData:{get:function(){return z},set:function(a){z=a}},reduceXTicks:{get:function(){return u},set:function(a){u=a}},rotateLabels:{get:function(){return w},set:function(a){w=a}},staggerLabels:{get:function(){return v},set:function(a){v=a}},tooltips:{get:function(){return j.enabled()},set:function(b){a.deprecated("tooltips","use chart.tooltip.enabled() instead"),j.enabled(!!b)}},tooltipContent:{get:function(){return j.contentGenerator()},set:function(b){a.deprecated("tooltipContent","use chart.tooltip.contentGenerator() instead"),j.contentGenerator(b)}},margin:{get:function(){return k},set:function(a){k.top=void 0!==a.top?a.top:k.top,k.right=void 0!==a.right?a.right:k.right,k.bottom=void 0!==a.bottom?a.bottom:k.bottom,k.left=void 0!==a.left?a.left:k.left}},duration:{get:function(){return C},set:function(a){C=a,e.duration(C),f.duration(C),g.duration(C),D.reset(C)}},color:{get:function(){return n},set:function(b){n=a.utils.getColor(b),h.color(n)}},rightAlignYAxis:{get:function(){return t},set:function(a){t=a,g.orient(t?"right":"left")}},barColor:{get:function(){return e.barColor},set:function(a){e.barColor(a),h.color(function(a,b){return d3.rgb("#ccc").darker(1.5*b).toString()})}}}),a.utils.inheritOptions(b,e),a.utils.initOptions(b),b},a.models.multiBarHorizontal=function(){"use strict";function b(m){return E.reset(),m.each(function(b){var m=k-j.left-j.right,C=l-j.top-j.bottom;n=d3.select(this),a.utils.initSVG(n),w&&(b=d3.layout.stack().offset("zero").values(function(a){return a.values}).y(r)(b)),b.forEach(function(a,b){a.values.forEach(function(c){c.series=b,c.key=a.key})}),w&&b[0].values.map(function(a,c){var d=0,e=0;b.map(function(a){var b=a.values[c];b.size=Math.abs(b.y),b.y<0?(b.y1=e-b.size,e-=b.size):(b.y1=d,d+=b.size)})});var F=d&&e?[]:b.map(function(a){return a.values.map(function(a,b){return{x:q(a,b),y:r(a,b),y0:a.y0,y1:a.y1}})});o.domain(d||d3.merge(F).map(function(a){return a.x})).rangeBands(f||[0,C],A),p.domain(e||d3.extent(d3.merge(F).map(function(a){return w?a.y>0?a.y1+a.y:a.y1:a.y}).concat(t))),p.range(x&&!w?g||[p.domain()[0]<0?z:0,m-(p.domain()[1]>0?z:0)]:g||[0,m]),h=h||o,i=i||d3.scale.linear().domain(p.domain()).range([p(0),p(0)]);{var G=d3.select(this).selectAll("g.nv-wrap.nv-multibarHorizontal").data([b]),H=G.enter().append("g").attr("class","nvd3 nv-wrap nv-multibarHorizontal"),I=(H.append("defs"),H.append("g"));G.select("g")}I.append("g").attr("class","nv-groups"),G.attr("transform","translate("+j.left+","+j.top+")");var J=G.select(".nv-groups").selectAll(".nv-group").data(function(a){return a},function(a,b){return b});J.enter().append("g").style("stroke-opacity",1e-6).style("fill-opacity",1e-6),J.exit().watchTransition(E,"multibarhorizontal: exit groups").style("stroke-opacity",1e-6).style("fill-opacity",1e-6).remove(),J.attr("class",function(a,b){return"nv-group nv-series-"+b}).classed("hover",function(a){return a.hover}).style("fill",function(a,b){return u(a,b)}).style("stroke",function(a,b){return u(a,b)}),J.watchTransition(E,"multibarhorizontal: groups").style("stroke-opacity",1).style("fill-opacity",.75);var K=J.selectAll("g.nv-bar").data(function(a){return a.values});K.exit().remove();var L=K.enter().append("g").attr("transform",function(a,c,d){return"translate("+i(w?a.y0:0)+","+(w?0:d*o.rangeBand()/b.length+o(q(a,c)))+")"});L.append("rect").attr("width",0).attr("height",o.rangeBand()/(w?1:b.length)),K.on("mouseover",function(a,b){d3.select(this).classed("hover",!0),D.elementMouseover({data:a,index:b,color:d3.select(this).style("fill")})}).on("mouseout",function(a,b){d3.select(this).classed("hover",!1),D.elementMouseout({data:a,index:b,color:d3.select(this).style("fill")})}).on("mouseout",function(a,b){D.elementMouseout({data:a,index:b,color:d3.select(this).style("fill")})}).on("mousemove",function(a,b){D.elementMousemove({data:a,index:b,color:d3.select(this).style("fill")})}).on("click",function(a,b){D.elementClick({data:a,index:b,color:d3.select(this).style("fill")}),d3.event.stopPropagation()}).on("dblclick",function(a,b){D.elementDblClick({data:a,index:b,color:d3.select(this).style("fill")}),d3.event.stopPropagation()}),s(b[0],0)&&(L.append("polyline"),K.select("polyline").attr("fill","none").attr("points",function(a,c){var d=s(a,c),e=.8*o.rangeBand()/(2*(w?1:b.length));d=d.length?d:[-Math.abs(d),Math.abs(d)],d=d.map(function(a){return p(a)-p(0)});var f=[[d[0],-e],[d[0],e],[d[0],0],[d[1],0],[d[1],-e],[d[1],e]];return f.map(function(a){return a.join(",")}).join(" ")}).attr("transform",function(a,c){var d=o.rangeBand()/(2*(w?1:b.length));return"translate("+(r(a,c)<0?0:p(r(a,c))-p(0))+", "+d+")"})),L.append("text"),x&&!w?(K.select("text").attr("text-anchor",function(a,b){return r(a,b)<0?"end":"start"}).attr("y",o.rangeBand()/(2*b.length)).attr("dy",".32em").text(function(a,b){var c=B(r(a,b)),d=s(a,b);return void 0===d?c:d.length?c+"+"+B(Math.abs(d[1]))+"-"+B(Math.abs(d[0])):c+"±"+B(Math.abs(d))}),K.watchTransition(E,"multibarhorizontal: bars").select("text").attr("x",function(a,b){return r(a,b)<0?-4:p(r(a,b))-p(0)+4})):K.selectAll("text").text(""),y&&!w?(L.append("text").classed("nv-bar-label",!0),K.select("text.nv-bar-label").attr("text-anchor",function(a,b){return r(a,b)<0?"start":"end"}).attr("y",o.rangeBand()/(2*b.length)).attr("dy",".32em").text(function(a,b){return q(a,b)}),K.watchTransition(E,"multibarhorizontal: bars").select("text.nv-bar-label").attr("x",function(a,b){return r(a,b)<0?p(0)-p(r(a,b))+4:-4})):K.selectAll("text.nv-bar-label").text(""),K.attr("class",function(a,b){return r(a,b)<0?"nv-bar negative":"nv-bar positive"}),v&&(c||(c=b.map(function(){return!0})),K.style("fill",function(a,b,d){return d3.rgb(v(a,b)).darker(c.map(function(a,b){return b}).filter(function(a,b){return!c[b]})[d]).toString()}).style("stroke",function(a,b,d){return d3.rgb(v(a,b)).darker(c.map(function(a,b){return b}).filter(function(a,b){return!c[b]})[d]).toString()})),w?K.watchTransition(E,"multibarhorizontal: bars").attr("transform",function(a,b){return"translate("+p(a.y1)+","+o(q(a,b))+")"}).select("rect").attr("width",function(a,b){return Math.abs(p(r(a,b)+a.y0)-p(a.y0))}).attr("height",o.rangeBand()):K.watchTransition(E,"multibarhorizontal: bars").attr("transform",function(a,c){return"translate("+p(r(a,c)<0?r(a,c):0)+","+(a.series*o.rangeBand()/b.length+o(q(a,c)))+")"}).select("rect").attr("height",o.rangeBand()/b.length).attr("width",function(a,b){return Math.max(Math.abs(p(r(a,b))-p(0)),1)}),h=o.copy(),i=p.copy()}),E.renderEnd("multibarHorizontal immediate"),b}var c,d,e,f,g,h,i,j={top:0,right:0,bottom:0,left:0},k=960,l=500,m=Math.floor(1e4*Math.random()),n=null,o=d3.scale.ordinal(),p=d3.scale.linear(),q=function(a){return a.x},r=function(a){return a.y},s=function(a){return a.yErr},t=[0],u=a.utils.defaultColor(),v=null,w=!1,x=!1,y=!1,z=60,A=.1,B=d3.format(",.2f"),C=250,D=d3.dispatch("chartClick","elementClick","elementDblClick","elementMouseover","elementMouseout","elementMousemove","renderEnd"),E=a.utils.renderWatch(D,C);return b.dispatch=D,b.options=a.utils.optionsFunc.bind(b),b._options=Object.create({},{width:{get:function(){return k},set:function(a){k=a}},height:{get:function(){return l},set:function(a){l=a}},x:{get:function(){return q},set:function(a){q=a}},y:{get:function(){return r},set:function(a){r=a}},yErr:{get:function(){return s},set:function(a){s=a}},xScale:{get:function(){return o},set:function(a){o=a}},yScale:{get:function(){return p},set:function(a){p=a}},xDomain:{get:function(){return d},set:function(a){d=a}},yDomain:{get:function(){return e},set:function(a){e=a}},xRange:{get:function(){return f},set:function(a){f=a}},yRange:{get:function(){return g},set:function(a){g=a}},forceY:{get:function(){return t},set:function(a){t=a}},stacked:{get:function(){return w},set:function(a){w=a}},showValues:{get:function(){return x},set:function(a){x=a}},disabled:{get:function(){return c},set:function(a){c=a}},id:{get:function(){return m},set:function(a){m=a}},valueFormat:{get:function(){return B},set:function(a){B=a}},valuePadding:{get:function(){return z},set:function(a){z=a}},groupSpacing:{get:function(){return A},set:function(a){A=a}},margin:{get:function(){return j},set:function(a){j.top=void 0!==a.top?a.top:j.top,j.right=void 0!==a.right?a.right:j.right,j.bottom=void 0!==a.bottom?a.bottom:j.bottom,j.left=void 0!==a.left?a.left:j.left}},duration:{get:function(){return C},set:function(a){C=a,E.reset(C)}},color:{get:function(){return u},set:function(b){u=a.utils.getColor(b)}},barColor:{get:function(){return v},set:function(b){v=b?a.utils.getColor(b):null}}}),a.utils.initOptions(b),b},a.models.multiBarHorizontalChart=function(){"use strict";function b(j){return C.reset(),C.models(e),r&&C.models(f),s&&C.models(g),j.each(function(j){var w=d3.select(this);a.utils.initSVG(w);var C=a.utils.availableWidth(l,w,k),D=a.utils.availableHeight(m,w,k);if(b.update=function(){w.transition().duration(z).call(b)},b.container=this,t=e.stacked(),u.setter(B(j),b.update).getter(A(j)).update(),u.disabled=j.map(function(a){return!!a.disabled}),!v){var E;v={};for(E in u)v[E]=u[E]instanceof Array?u[E].slice(0):u[E]}if(!(j&&j.length&&j.filter(function(a){return a.values.length}).length))return a.utils.noData(b,w),b;w.selectAll(".nv-noData").remove(),c=e.xScale(),d=e.yScale();var F=w.selectAll("g.nv-wrap.nv-multiBarHorizontalChart").data([j]),G=F.enter().append("g").attr("class","nvd3 nv-wrap nv-multiBarHorizontalChart").append("g"),H=F.select("g");if(G.append("g").attr("class","nv-x nv-axis"),G.append("g").attr("class","nv-y nv-axis").append("g").attr("class","nv-zeroLine").append("line"),G.append("g").attr("class","nv-barsWrap"),G.append("g").attr("class","nv-legendWrap"),G.append("g").attr("class","nv-controlsWrap"),q&&(h.width(C-y()),H.select(".nv-legendWrap").datum(j).call(h),k.top!=h.height()&&(k.top=h.height(),D=a.utils.availableHeight(m,w,k)),H.select(".nv-legendWrap").attr("transform","translate("+y()+","+-k.top+")")),o){var I=[{key:p.grouped||"Grouped",disabled:e.stacked()},{key:p.stacked||"Stacked",disabled:!e.stacked()}];i.width(y()).color(["#444","#444","#444"]),H.select(".nv-controlsWrap").datum(I).attr("transform","translate(0,"+-k.top+")").call(i)}F.attr("transform","translate("+k.left+","+k.top+")"),e.disabled(j.map(function(a){return a.disabled})).width(C).height(D).color(j.map(function(a,b){return a.color||n(a,b)}).filter(function(a,b){return!j[b].disabled}));var J=H.select(".nv-barsWrap").datum(j.filter(function(a){return!a.disabled}));if(J.transition().call(e),r){f.scale(c)._ticks(a.utils.calcTicksY(D/24,j)).tickSize(-C,0),H.select(".nv-x.nv-axis").call(f);var K=H.select(".nv-x.nv-axis").selectAll("g");K.selectAll("line, text")}s&&(g.scale(d)._ticks(a.utils.calcTicksX(C/100,j)).tickSize(-D,0),H.select(".nv-y.nv-axis").attr("transform","translate(0,"+D+")"),H.select(".nv-y.nv-axis").call(g)),H.select(".nv-zeroLine line").attr("x1",d(0)).attr("x2",d(0)).attr("y1",0).attr("y2",-D),h.dispatch.on("stateChange",function(a){for(var c in a)u[c]=a[c];x.stateChange(u),b.update()}),i.dispatch.on("legendClick",function(a){if(a.disabled){switch(I=I.map(function(a){return a.disabled=!0,a}),a.disabled=!1,a.key){case"Grouped":e.stacked(!1);break;case"Stacked":e.stacked(!0)}u.stacked=e.stacked(),x.stateChange(u),t=e.stacked(),b.update()}}),x.on("changeState",function(a){"undefined"!=typeof a.disabled&&(j.forEach(function(b,c){b.disabled=a.disabled[c]}),u.disabled=a.disabled),"undefined"!=typeof a.stacked&&(e.stacked(a.stacked),u.stacked=a.stacked,t=a.stacked),b.update()})}),C.renderEnd("multibar horizontal chart immediate"),b}var c,d,e=a.models.multiBarHorizontal(),f=a.models.axis(),g=a.models.axis(),h=a.models.legend().height(30),i=a.models.legend().height(30),j=a.models.tooltip(),k={top:30,right:20,bottom:50,left:60},l=null,m=null,n=a.utils.defaultColor(),o=!0,p={},q=!0,r=!0,s=!0,t=!1,u=a.utils.state(),v=null,w=null,x=d3.dispatch("stateChange","changeState","renderEnd"),y=function(){return o?180:0},z=250;u.stacked=!1,e.stacked(t),f.orient("left").tickPadding(5).showMaxMin(!1).tickFormat(function(a){return a}),g.orient("bottom").tickFormat(d3.format(",.1f")),j.duration(0).valueFormatter(function(a,b){return g.tickFormat()(a,b)}).headerFormatter(function(a,b){return f.tickFormat()(a,b)}),i.updateState(!1);var A=function(a){return function(){return{active:a.map(function(a){return!a.disabled}),stacked:t}}},B=function(a){return function(b){void 0!==b.stacked&&(t=b.stacked),void 0!==b.active&&a.forEach(function(a,c){a.disabled=!b.active[c]})}},C=a.utils.renderWatch(x,z);return e.dispatch.on("elementMouseover.tooltip",function(a){a.value=b.x()(a.data),a.series={key:a.data.key,value:b.y()(a.data),color:a.color},j.data(a).hidden(!1)}),e.dispatch.on("elementMouseout.tooltip",function(){j.hidden(!0)}),e.dispatch.on("elementMousemove.tooltip",function(){j.position({top:d3.event.pageY,left:d3.event.pageX})()}),b.dispatch=x,b.multibar=e,b.legend=h,b.controls=i,b.xAxis=f,b.yAxis=g,b.state=u,b.tooltip=j,b.options=a.utils.optionsFunc.bind(b),b._options=Object.create({},{width:{get:function(){return l},set:function(a){l=a}},height:{get:function(){return m},set:function(a){m=a}},showLegend:{get:function(){return q},set:function(a){q=a}},showControls:{get:function(){return o},set:function(a){o=a}},controlLabels:{get:function(){return p},set:function(a){p=a}},showXAxis:{get:function(){return r},set:function(a){r=a}},showYAxis:{get:function(){return s},set:function(a){s=a}},defaultState:{get:function(){return v},set:function(a){v=a}},noData:{get:function(){return w},set:function(a){w=a}},tooltips:{get:function(){return j.enabled()},set:function(b){a.deprecated("tooltips","use chart.tooltip.enabled() instead"),j.enabled(!!b)}},tooltipContent:{get:function(){return j.contentGenerator()},set:function(b){a.deprecated("tooltipContent","use chart.tooltip.contentGenerator() instead"),j.contentGenerator(b)}},margin:{get:function(){return k},set:function(a){k.top=void 0!==a.top?a.top:k.top,k.right=void 0!==a.right?a.right:k.right,k.bottom=void 0!==a.bottom?a.bottom:k.bottom,k.left=void 0!==a.left?a.left:k.left}},duration:{get:function(){return z},set:function(a){z=a,C.reset(z),e.duration(z),f.duration(z),g.duration(z)}},color:{get:function(){return n},set:function(b){n=a.utils.getColor(b),h.color(n)}},barColor:{get:function(){return e.barColor},set:function(a){e.barColor(a),h.color(function(a,b){return d3.rgb("#ccc").darker(1.5*b).toString()})}}}),a.utils.inheritOptions(b,e),a.utils.initOptions(b),b},a.models.multiChart=function(){"use strict";function b(j){return j.each(function(j){function k(a){var b=2===j[a.seriesIndex].yAxis?z:y;a.value=a.point.x,a.series={value:a.point.y,color:a.point.color},B.duration(100).valueFormatter(function(a,c){return b.tickFormat()(a,c)}).data(a).position(a.pos).hidden(!1)}function l(a){var b=2===j[a.seriesIndex].yAxis?z:y;a.point.x=v.x()(a.point),a.point.y=v.y()(a.point),B.duration(100).valueFormatter(function(a,c){return b.tickFormat()(a,c)}).data(a).position(a.pos).hidden(!1)}function n(a){var b=2===j[a.data.series].yAxis?z:y;a.value=t.x()(a.data),a.series={value:t.y()(a.data),color:a.color},B.duration(0).valueFormatter(function(a,c){return b.tickFormat()(a,c)}).data(a).hidden(!1)}var C=d3.select(this);a.utils.initSVG(C),b.update=function(){C.transition().call(b)},b.container=this;var D=a.utils.availableWidth(g,C,e),E=a.utils.availableHeight(h,C,e),F=j.filter(function(a){return"line"==a.type&&1==a.yAxis}),G=j.filter(function(a){return"line"==a.type&&2==a.yAxis}),H=j.filter(function(a){return"bar"==a.type&&1==a.yAxis}),I=j.filter(function(a){return"bar"==a.type&&2==a.yAxis}),J=j.filter(function(a){return"area"==a.type&&1==a.yAxis}),K=j.filter(function(a){return"area"==a.type&&2==a.yAxis});if(!(j&&j.length&&j.filter(function(a){return a.values.length}).length))return a.utils.noData(b,C),b;C.selectAll(".nv-noData").remove();var L=j.filter(function(a){return!a.disabled&&1==a.yAxis}).map(function(a){return a.values.map(function(a){return{x:a.x,y:a.y}})}),M=j.filter(function(a){return!a.disabled&&2==a.yAxis}).map(function(a){return a.values.map(function(a){return{x:a.x,y:a.y}})});o.domain(d3.extent(d3.merge(L.concat(M)),function(a){return a.x})).range([0,D]);var N=C.selectAll("g.wrap.multiChart").data([j]),O=N.enter().append("g").attr("class","wrap nvd3 multiChart").append("g");O.append("g").attr("class","nv-x nv-axis"),O.append("g").attr("class","nv-y1 nv-axis"),O.append("g").attr("class","nv-y2 nv-axis"),O.append("g").attr("class","lines1Wrap"),O.append("g").attr("class","lines2Wrap"),O.append("g").attr("class","bars1Wrap"),O.append("g").attr("class","bars2Wrap"),O.append("g").attr("class","stack1Wrap"),O.append("g").attr("class","stack2Wrap"),O.append("g").attr("class","legendWrap");var P=N.select("g"),Q=j.map(function(a,b){return j[b].color||f(a,b)});if(i){var R=A.align()?D/2:D,S=A.align()?R:0;A.width(R),A.color(Q),P.select(".legendWrap").datum(j.map(function(a){return a.originalKey=void 0===a.originalKey?a.key:a.originalKey,a.key=a.originalKey+(1==a.yAxis?"":" (right axis)"),a})).call(A),e.top!=A.height()&&(e.top=A.height(),E=a.utils.availableHeight(h,C,e)),P.select(".legendWrap").attr("transform","translate("+S+","+-e.top+")")}r.width(D).height(E).interpolate(m).color(Q.filter(function(a,b){return!j[b].disabled&&1==j[b].yAxis&&"line"==j[b].type})),s.width(D).height(E).interpolate(m).color(Q.filter(function(a,b){return!j[b].disabled&&2==j[b].yAxis&&"line"==j[b].type})),t.width(D).height(E).color(Q.filter(function(a,b){return!j[b].disabled&&1==j[b].yAxis&&"bar"==j[b].type})),u.width(D).height(E).color(Q.filter(function(a,b){return!j[b].disabled&&2==j[b].yAxis&&"bar"==j[b].type})),v.width(D).height(E).color(Q.filter(function(a,b){return!j[b].disabled&&1==j[b].yAxis&&"area"==j[b].type})),w.width(D).height(E).color(Q.filter(function(a,b){return!j[b].disabled&&2==j[b].yAxis&&"area"==j[b].type})),P.attr("transform","translate("+e.left+","+e.top+")");var T=P.select(".lines1Wrap").datum(F.filter(function(a){return!a.disabled})),U=P.select(".bars1Wrap").datum(H.filter(function(a){return!a.disabled})),V=P.select(".stack1Wrap").datum(J.filter(function(a){return!a.disabled})),W=P.select(".lines2Wrap").datum(G.filter(function(a){return!a.disabled})),X=P.select(".bars2Wrap").datum(I.filter(function(a){return!a.disabled})),Y=P.select(".stack2Wrap").datum(K.filter(function(a){return!a.disabled})),Z=J.length?J.map(function(a){return a.values}).reduce(function(a,b){return a.map(function(a,c){return{x:a.x,y:a.y+b[c].y}})}).concat([{x:0,y:0}]):[],$=K.length?K.map(function(a){return a.values}).reduce(function(a,b){return a.map(function(a,c){return{x:a.x,y:a.y+b[c].y}})}).concat([{x:0,y:0}]):[];p.domain(c||d3.extent(d3.merge(L).concat(Z),function(a){return a.y})).range([0,E]),q.domain(d||d3.extent(d3.merge(M).concat($),function(a){return a.y})).range([0,E]),r.yDomain(p.domain()),t.yDomain(p.domain()),v.yDomain(p.domain()),s.yDomain(q.domain()),u.yDomain(q.domain()),w.yDomain(q.domain()),J.length&&d3.transition(V).call(v),K.length&&d3.transition(Y).call(w),H.length&&d3.transition(U).call(t),I.length&&d3.transition(X).call(u),F.length&&d3.transition(T).call(r),G.length&&d3.transition(W).call(s),x._ticks(a.utils.calcTicksX(D/100,j)).tickSize(-E,0),P.select(".nv-x.nv-axis").attr("transform","translate(0,"+E+")"),d3.transition(P.select(".nv-x.nv-axis")).call(x),y._ticks(a.utils.calcTicksY(E/36,j)).tickSize(-D,0),d3.transition(P.select(".nv-y1.nv-axis")).call(y),z._ticks(a.utils.calcTicksY(E/36,j)).tickSize(-D,0),d3.transition(P.select(".nv-y2.nv-axis")).call(z),P.select(".nv-y1.nv-axis").classed("nv-disabled",L.length?!1:!0).attr("transform","translate("+o.range()[0]+",0)"),P.select(".nv-y2.nv-axis").classed("nv-disabled",M.length?!1:!0).attr("transform","translate("+o.range()[1]+",0)"),A.dispatch.on("stateChange",function(){b.update()}),r.dispatch.on("elementMouseover.tooltip",k),s.dispatch.on("elementMouseover.tooltip",k),r.dispatch.on("elementMouseout.tooltip",function(){B.hidden(!0)}),s.dispatch.on("elementMouseout.tooltip",function(){B.hidden(!0)}),v.dispatch.on("elementMouseover.tooltip",l),w.dispatch.on("elementMouseover.tooltip",l),v.dispatch.on("elementMouseout.tooltip",function(){B.hidden(!0)}),w.dispatch.on("elementMouseout.tooltip",function(){B.hidden(!0)}),t.dispatch.on("elementMouseover.tooltip",n),u.dispatch.on("elementMouseover.tooltip",n),t.dispatch.on("elementMouseout.tooltip",function(){B.hidden(!0)}),u.dispatch.on("elementMouseout.tooltip",function(){B.hidden(!0)}),t.dispatch.on("elementMousemove.tooltip",function(){B.position({top:d3.event.pageY,left:d3.event.pageX})()}),u.dispatch.on("elementMousemove.tooltip",function(){B.position({top:d3.event.pageY,left:d3.event.pageX})()})}),b}var c,d,e={top:30,right:20,bottom:50,left:60},f=a.utils.defaultColor(),g=null,h=null,i=!0,j=null,k=function(a){return a.x},l=function(a){return a.y},m="monotone",n=!0,o=d3.scale.linear(),p=d3.scale.linear(),q=d3.scale.linear(),r=a.models.line().yScale(p),s=a.models.line().yScale(q),t=a.models.multiBar().stacked(!1).yScale(p),u=a.models.multiBar().stacked(!1).yScale(q),v=a.models.stackedArea().yScale(p),w=a.models.stackedArea().yScale(q),x=a.models.axis().scale(o).orient("bottom").tickPadding(5),y=a.models.axis().scale(p).orient("left"),z=a.models.axis().scale(q).orient("right"),A=a.models.legend().height(30),B=a.models.tooltip(),C=d3.dispatch();return b.dispatch=C,b.lines1=r,b.lines2=s,b.bars1=t,b.bars2=u,b.stack1=v,b.stack2=w,b.xAxis=x,b.yAxis1=y,b.yAxis2=z,b.tooltip=B,b.options=a.utils.optionsFunc.bind(b),b._options=Object.create({},{width:{get:function(){return g},set:function(a){g=a}},height:{get:function(){return h},set:function(a){h=a}},showLegend:{get:function(){return i},set:function(a){i=a}},yDomain1:{get:function(){return c},set:function(a){c=a}},yDomain2:{get:function(){return d},set:function(a){d=a}},noData:{get:function(){return j},set:function(a){j=a}},interpolate:{get:function(){return m},set:function(a){m=a}},tooltips:{get:function(){return B.enabled()},set:function(b){a.deprecated("tooltips","use chart.tooltip.enabled() instead"),B.enabled(!!b)}},tooltipContent:{get:function(){return B.contentGenerator()},set:function(b){a.deprecated("tooltipContent","use chart.tooltip.contentGenerator() instead"),B.contentGenerator(b)}},margin:{get:function(){return e},set:function(a){e.top=void 0!==a.top?a.top:e.top,e.right=void 0!==a.right?a.right:e.right,e.bottom=void 0!==a.bottom?a.bottom:e.bottom,e.left=void 0!==a.left?a.left:e.left}},color:{get:function(){return f},set:function(b){f=a.utils.getColor(b)}},x:{get:function(){return k},set:function(a){k=a,r.x(a),s.x(a),t.x(a),u.x(a),v.x(a),w.x(a)}},y:{get:function(){return l},set:function(a){l=a,r.y(a),s.y(a),v.y(a),w.y(a),t.y(a),u.y(a)}},useVoronoi:{get:function(){return n},set:function(a){n=a,r.useVoronoi(a),s.useVoronoi(a),v.useVoronoi(a),w.useVoronoi(a)}}}),a.utils.initOptions(b),b},a.models.ohlcBar=function(){"use strict";function b(y){return y.each(function(b){k=d3.select(this);var y=a.utils.availableWidth(h,k,g),A=a.utils.availableHeight(i,k,g);a.utils.initSVG(k);var B=y/b[0].values.length*.9;l.domain(c||d3.extent(b[0].values.map(n).concat(t))),l.range(v?e||[.5*y/b[0].values.length,y*(b[0].values.length-.5)/b[0].values.length]:e||[5+B/2,y-B/2-5]),m.domain(d||[d3.min(b[0].values.map(s).concat(u)),d3.max(b[0].values.map(r).concat(u))]).range(f||[A,0]),l.domain()[0]===l.domain()[1]&&l.domain(l.domain()[0]?[l.domain()[0]-.01*l.domain()[0],l.domain()[1]+.01*l.domain()[1]]:[-1,1]),m.domain()[0]===m.domain()[1]&&m.domain(m.domain()[0]?[m.domain()[0]+.01*m.domain()[0],m.domain()[1]-.01*m.domain()[1]]:[-1,1]);var C=d3.select(this).selectAll("g.nv-wrap.nv-ohlcBar").data([b[0].values]),D=C.enter().append("g").attr("class","nvd3 nv-wrap nv-ohlcBar"),E=D.append("defs"),F=D.append("g"),G=C.select("g");F.append("g").attr("class","nv-ticks"),C.attr("transform","translate("+g.left+","+g.top+")"),k.on("click",function(a,b){z.chartClick({data:a,index:b,pos:d3.event,id:j})}),E.append("clipPath").attr("id","nv-chart-clip-path-"+j).append("rect"),C.select("#nv-chart-clip-path-"+j+" rect").attr("width",y).attr("height",A),G.attr("clip-path",w?"url(#nv-chart-clip-path-"+j+")":"");var H=C.select(".nv-ticks").selectAll(".nv-tick").data(function(a){return a});H.exit().remove(),H.enter().append("path").attr("class",function(a,b,c){return(p(a,b)>q(a,b)?"nv-tick negative":"nv-tick positive")+" nv-tick-"+c+"-"+b}).attr("d",function(a,b){return"m0,0l0,"+(m(p(a,b))-m(r(a,b)))+"l"+-B/2+",0l"+B/2+",0l0,"+(m(s(a,b))-m(p(a,b)))+"l0,"+(m(q(a,b))-m(s(a,b)))+"l"+B/2+",0l"+-B/2+",0z"}).attr("transform",function(a,b){return"translate("+l(n(a,b))+","+m(r(a,b))+")"}).attr("fill",function(){return x[0]}).attr("stroke",function(){return x[0]}).attr("x",0).attr("y",function(a,b){return m(Math.max(0,o(a,b)))}).attr("height",function(a,b){return Math.abs(m(o(a,b))-m(0))}),H.attr("class",function(a,b,c){return(p(a,b)>q(a,b)?"nv-tick negative":"nv-tick positive")+" nv-tick-"+c+"-"+b}),d3.transition(H).attr("transform",function(a,b){return"translate("+l(n(a,b))+","+m(r(a,b))+")"}).attr("d",function(a,c){var d=y/b[0].values.length*.9;return"m0,0l0,"+(m(p(a,c))-m(r(a,c)))+"l"+-d/2+",0l"+d/2+",0l0,"+(m(s(a,c))-m(p(a,c)))+"l0,"+(m(q(a,c))-m(s(a,c)))+"l"+d/2+",0l"+-d/2+",0z"})}),b}var c,d,e,f,g={top:0,right:0,bottom:0,left:0},h=null,i=null,j=Math.floor(1e4*Math.random()),k=null,l=d3.scale.linear(),m=d3.scale.linear(),n=function(a){return a.x},o=function(a){return a.y},p=function(a){return a.open},q=function(a){return a.close},r=function(a){return a.high},s=function(a){return a.low},t=[],u=[],v=!1,w=!0,x=a.utils.defaultColor(),y=!1,z=d3.dispatch("tooltipShow","tooltipHide","stateChange","changeState","renderEnd","chartClick","elementClick","elementDblClick","elementMouseover","elementMouseout","elementMousemove");return b.highlightPoint=function(a,c){b.clearHighlights(),k.select(".nv-ohlcBar .nv-tick-0-"+a).classed("hover",c)},b.clearHighlights=function(){k.select(".nv-ohlcBar .nv-tick.hover").classed("hover",!1)},b.dispatch=z,b.options=a.utils.optionsFunc.bind(b),b._options=Object.create({},{width:{get:function(){return h},set:function(a){h=a}},height:{get:function(){return i},set:function(a){i=a}},xScale:{get:function(){return l},set:function(a){l=a}},yScale:{get:function(){return m},set:function(a){m=a}},xDomain:{get:function(){return c},set:function(a){c=a}},yDomain:{get:function(){return d},set:function(a){d=a}},xRange:{get:function(){return e},set:function(a){e=a}},yRange:{get:function(){return f},set:function(a){f=a}},forceX:{get:function(){return t},set:function(a){t=a}},forceY:{get:function(){return u},set:function(a){u=a}},padData:{get:function(){return v},set:function(a){v=a}},clipEdge:{get:function(){return w},set:function(a){w=a}},id:{get:function(){return j},set:function(a){j=a}},interactive:{get:function(){return y},set:function(a){y=a}},x:{get:function(){return n},set:function(a){n=a}},y:{get:function(){return o},set:function(a){o=a}},open:{get:function(){return p()},set:function(a){p=a}},close:{get:function(){return q()},set:function(a){q=a}},high:{get:function(){return r},set:function(a){r=a}},low:{get:function(){return s},set:function(a){s=a}},margin:{get:function(){return g},set:function(a){g.top=void 0!=a.top?a.top:g.top,g.right=void 0!=a.right?a.right:g.right,g.bottom=void 0!=a.bottom?a.bottom:g.bottom,g.left=void 0!=a.left?a.left:g.left }},color:{get:function(){return x},set:function(b){x=a.utils.getColor(b)}}}),a.utils.initOptions(b),b},a.models.parallelCoordinates=function(){"use strict";function b(p){return p.each(function(b){function p(a){return F(h.map(function(b){if(isNaN(a[b])||isNaN(parseFloat(a[b]))){var c=g[b].domain(),d=g[b].range(),e=c[0]-(c[1]-c[0])/9;if(J.indexOf(b)<0){var h=d3.scale.linear().domain([e,c[1]]).range([x-12,d[1]]);g[b].brush.y(h),J.push(b)}return[f(b),g[b](e)]}return J.length>0?(D.style("display","inline"),E.style("display","inline")):(D.style("display","none"),E.style("display","none")),[f(b),g[b](a[b])]}))}function q(){var a=h.filter(function(a){return!g[a].brush.empty()}),b=a.map(function(a){return g[a].brush.extent()});k=[],a.forEach(function(a,c){k[c]={dimension:a,extent:b[c]}}),l=[],M.style("display",function(c){var d=a.every(function(a,d){return isNaN(c[a])&&b[d][0]==g[a].brush.y().domain()[0]?!0:b[d][0]<=c[a]&&c[a]<=b[d][1]});return d&&l.push(c),d?null:"none"}),o.brush({filters:k,active:l})}function r(a){m[a]=this.parentNode.__origin__=f(a),L.attr("visibility","hidden")}function s(a){m[a]=Math.min(w,Math.max(0,this.parentNode.__origin__+=d3.event.x)),M.attr("d",p),h.sort(function(a,b){return u(a)-u(b)}),f.domain(h),N.attr("transform",function(a){return"translate("+u(a)+")"})}function t(a){delete this.parentNode.__origin__,delete m[a],d3.select(this.parentNode).attr("transform","translate("+f(a)+")"),M.attr("d",p),L.attr("d",p).attr("visibility",null)}function u(a){var b=m[a];return null==b?f(a):b}var v=d3.select(this),w=a.utils.availableWidth(d,v,c),x=a.utils.availableHeight(e,v,c);a.utils.initSVG(v),l=b,f.rangePoints([0,w],1).domain(h);var y={};h.forEach(function(a){var c=d3.extent(b,function(b){return+b[a]});return y[a]=!1,void 0===c[0]&&(y[a]=!0,c[0]=0,c[1]=0),c[0]===c[1]&&(c[0]=c[0]-1,c[1]=c[1]+1),g[a]=d3.scale.linear().domain(c).range([.9*(x-12),0]),g[a].brush=d3.svg.brush().y(g[a]).on("brush",q),"name"!=a});var z=v.selectAll("g.nv-wrap.nv-parallelCoordinates").data([b]),A=z.enter().append("g").attr("class","nvd3 nv-wrap nv-parallelCoordinates"),B=A.append("g"),C=z.select("g");B.append("g").attr("class","nv-parallelCoordinates background"),B.append("g").attr("class","nv-parallelCoordinates foreground"),B.append("g").attr("class","nv-parallelCoordinates missingValuesline"),z.attr("transform","translate("+c.left+","+c.top+")");var D,E,F=d3.svg.line().interpolate("cardinal").tension(n),G=d3.svg.axis().orient("left"),H=d3.behavior.drag().on("dragstart",r).on("drag",s).on("dragend",t),I=f.range()[1]-f.range()[0],J=[],K=[0+I/2,x-12,w-I/2,x-12];D=z.select(".missingValuesline").selectAll("line").data([K]),D.enter().append("line"),D.exit().remove(),D.attr("x1",function(a){return a[0]}).attr("y1",function(a){return a[1]}).attr("x2",function(a){return a[2]}).attr("y2",function(a){return a[3]}),E=z.select(".missingValuesline").selectAll("text").data(["undefined values"]),E.append("text").data(["undefined values"]),E.enter().append("text"),E.exit().remove(),E.attr("y",x).attr("x",w-92-I/2).text(function(a){return a});var L=z.select(".background").selectAll("path").data(b);L.enter().append("path"),L.exit().remove(),L.attr("d",p);var M=z.select(".foreground").selectAll("path").data(b);M.enter().append("path"),M.exit().remove(),M.attr("d",p).attr("stroke",j),M.on("mouseover",function(a,b){d3.select(this).classed("hover",!0),o.elementMouseover({label:a.name,data:a.data,index:b,pos:[d3.mouse(this.parentNode)[0],d3.mouse(this.parentNode)[1]]})}),M.on("mouseout",function(a,b){d3.select(this).classed("hover",!1),o.elementMouseout({label:a.name,data:a.data,index:b})});var N=C.selectAll(".dimension").data(h),O=N.enter().append("g").attr("class","nv-parallelCoordinates dimension");O.append("g").attr("class","nv-parallelCoordinates nv-axis"),O.append("g").attr("class","nv-parallelCoordinates-brush"),O.append("text").attr("class","nv-parallelCoordinates nv-label"),N.attr("transform",function(a){return"translate("+f(a)+",0)"}),N.exit().remove(),N.select(".nv-label").style("cursor","move").attr("dy","-1em").attr("text-anchor","middle").text(String).on("mouseover",function(a){o.elementMouseover({dim:a,pos:[d3.mouse(this.parentNode.parentNode)[0],d3.mouse(this.parentNode.parentNode)[1]]})}).on("mouseout",function(a){o.elementMouseout({dim:a})}).call(H),N.select(".nv-axis").each(function(a,b){d3.select(this).call(G.scale(g[a]).tickFormat(d3.format(i[b])))}),N.select(".nv-parallelCoordinates-brush").each(function(a){d3.select(this).call(g[a].brush)}).selectAll("rect").attr("x",-8).attr("width",16)}),b}var c={top:30,right:0,bottom:10,left:0},d=null,e=null,f=d3.scale.ordinal(),g={},h=[],i=[],j=a.utils.defaultColor(),k=[],l=[],m=[],n=1,o=d3.dispatch("brush","elementMouseover","elementMouseout");return b.dispatch=o,b.options=a.utils.optionsFunc.bind(b),b._options=Object.create({},{width:{get:function(){return d},set:function(a){d=a}},height:{get:function(){return e},set:function(a){e=a}},dimensionNames:{get:function(){return h},set:function(a){h=a}},dimensionFormats:{get:function(){return i},set:function(a){i=a}},lineTension:{get:function(){return n},set:function(a){n=a}},dimensions:{get:function(){return h},set:function(b){a.deprecated("dimensions","use dimensionNames instead"),h=b}},margin:{get:function(){return c},set:function(a){c.top=void 0!==a.top?a.top:c.top,c.right=void 0!==a.right?a.right:c.right,c.bottom=void 0!==a.bottom?a.bottom:c.bottom,c.left=void 0!==a.left?a.left:c.left}},color:{get:function(){return j},set:function(b){j=a.utils.getColor(b)}}}),a.utils.initOptions(b),b},a.models.pie=function(){"use strict";function b(E){return D.reset(),E.each(function(b){function E(a,b){a.endAngle=isNaN(a.endAngle)?0:a.endAngle,a.startAngle=isNaN(a.startAngle)?0:a.startAngle,p||(a.innerRadius=0);var c=d3.interpolate(this._current,a);return this._current=c(0),function(a){return B[b](c(a))}}var F=d-c.left-c.right,G=e-c.top-c.bottom,H=Math.min(F,G)/2,I=[],J=[];if(i=d3.select(this),0===z.length)for(var K=H-H/5,L=y*H,M=0;Mc)return"";if("function"==typeof n)d=n(a,b,{key:f(a.data),value:g(a.data),percent:k(c)});else switch(n){case"key":d=f(a.data);break;case"value":d=k(g(a.data));break;case"percent":d=d3.format("%")(c)}return d})}}),D.renderEnd("pie immediate"),b}var c={top:0,right:0,bottom:0,left:0},d=500,e=500,f=function(a){return a.x},g=function(a){return a.y},h=Math.floor(1e4*Math.random()),i=null,j=a.utils.defaultColor(),k=d3.format(",.2f"),l=!0,m=!1,n="key",o=.02,p=!1,q=!1,r=!0,s=0,t=!1,u=!1,v=!1,w=!1,x=0,y=.5,z=[],A=d3.dispatch("chartClick","elementClick","elementDblClick","elementMouseover","elementMouseout","elementMousemove","renderEnd"),B=[],C=[],D=a.utils.renderWatch(A);return b.dispatch=A,b.options=a.utils.optionsFunc.bind(b),b._options=Object.create({},{arcsRadius:{get:function(){return z},set:function(a){z=a}},width:{get:function(){return d},set:function(a){d=a}},height:{get:function(){return e},set:function(a){e=a}},showLabels:{get:function(){return l},set:function(a){l=a}},title:{get:function(){return q},set:function(a){q=a}},titleOffset:{get:function(){return s},set:function(a){s=a}},labelThreshold:{get:function(){return o},set:function(a){o=a}},valueFormat:{get:function(){return k},set:function(a){k=a}},x:{get:function(){return f},set:function(a){f=a}},id:{get:function(){return h},set:function(a){h=a}},endAngle:{get:function(){return w},set:function(a){w=a}},startAngle:{get:function(){return u},set:function(a){u=a}},padAngle:{get:function(){return v},set:function(a){v=a}},cornerRadius:{get:function(){return x},set:function(a){x=a}},donutRatio:{get:function(){return y},set:function(a){y=a}},labelsOutside:{get:function(){return m},set:function(a){m=a}},labelSunbeamLayout:{get:function(){return t},set:function(a){t=a}},donut:{get:function(){return p},set:function(a){p=a}},growOnHover:{get:function(){return r},set:function(a){r=a}},pieLabelsOutside:{get:function(){return m},set:function(b){m=b,a.deprecated("pieLabelsOutside","use labelsOutside instead")}},donutLabelsOutside:{get:function(){return m},set:function(b){m=b,a.deprecated("donutLabelsOutside","use labelsOutside instead")}},labelFormat:{get:function(){return k},set:function(b){k=b,a.deprecated("labelFormat","use valueFormat instead")}},margin:{get:function(){return c},set:function(a){c.top="undefined"!=typeof a.top?a.top:c.top,c.right="undefined"!=typeof a.right?a.right:c.right,c.bottom="undefined"!=typeof a.bottom?a.bottom:c.bottom,c.left="undefined"!=typeof a.left?a.left:c.left}},y:{get:function(){return g},set:function(a){g=d3.functor(a)}},color:{get:function(){return j},set:function(b){j=a.utils.getColor(b)}},labelType:{get:function(){return n},set:function(a){n=a||"key"}}}),a.utils.initOptions(b),b},a.models.pieChart=function(){"use strict";function b(e){return q.reset(),q.models(c),e.each(function(e){var k=d3.select(this);a.utils.initSVG(k);var n=a.utils.availableWidth(g,k,f),o=a.utils.availableHeight(h,k,f);if(b.update=function(){k.transition().call(b)},b.container=this,l.setter(s(e),b.update).getter(r(e)).update(),l.disabled=e.map(function(a){return!!a.disabled}),!m){var q;m={};for(q in l)m[q]=l[q]instanceof Array?l[q].slice(0):l[q]}if(!e||!e.length)return a.utils.noData(b,k),b;k.selectAll(".nv-noData").remove();var t=k.selectAll("g.nv-wrap.nv-pieChart").data([e]),u=t.enter().append("g").attr("class","nvd3 nv-wrap nv-pieChart").append("g"),v=t.select("g");if(u.append("g").attr("class","nv-pieWrap"),u.append("g").attr("class","nv-legendWrap"),i)if("top"===j)d.width(n).key(c.x()),t.select(".nv-legendWrap").datum(e).call(d),f.top!=d.height()&&(f.top=d.height(),o=a.utils.availableHeight(h,k,f)),t.select(".nv-legendWrap").attr("transform","translate(0,"+-f.top+")");else if("right"===j){var w=a.models.legend().width();w>n/2&&(w=n/2),d.height(o).key(c.x()),d.width(w),n-=d.width(),t.select(".nv-legendWrap").datum(e).call(d).attr("transform","translate("+n+",0)")}t.attr("transform","translate("+f.left+","+f.top+")"),c.width(n).height(o);var x=v.select(".nv-pieWrap").datum([e]);d3.transition(x).call(c),d.dispatch.on("stateChange",function(a){for(var c in a)l[c]=a[c];p.stateChange(l),b.update()}),p.on("changeState",function(a){"undefined"!=typeof a.disabled&&(e.forEach(function(b,c){b.disabled=a.disabled[c]}),l.disabled=a.disabled),b.update()})}),q.renderEnd("pieChart immediate"),b}var c=a.models.pie(),d=a.models.legend(),e=a.models.tooltip(),f={top:30,right:20,bottom:20,left:20},g=null,h=null,i=!0,j="top",k=a.utils.defaultColor(),l=a.utils.state(),m=null,n=null,o=250,p=d3.dispatch("tooltipShow","tooltipHide","stateChange","changeState","renderEnd");e.headerEnabled(!1).duration(0).valueFormatter(function(a,b){return c.valueFormat()(a,b)});var q=a.utils.renderWatch(p),r=function(a){return function(){return{active:a.map(function(a){return!a.disabled})}}},s=function(a){return function(b){void 0!==b.active&&a.forEach(function(a,c){a.disabled=!b.active[c]})}};return c.dispatch.on("elementMouseover.tooltip",function(a){a.series={key:b.x()(a.data),value:b.y()(a.data),color:a.color},e.data(a).hidden(!1)}),c.dispatch.on("elementMouseout.tooltip",function(){e.hidden(!0)}),c.dispatch.on("elementMousemove.tooltip",function(){e.position({top:d3.event.pageY,left:d3.event.pageX})()}),b.legend=d,b.dispatch=p,b.pie=c,b.tooltip=e,b.options=a.utils.optionsFunc.bind(b),b._options=Object.create({},{noData:{get:function(){return n},set:function(a){n=a}},showLegend:{get:function(){return i},set:function(a){i=a}},legendPosition:{get:function(){return j},set:function(a){j=a}},defaultState:{get:function(){return m},set:function(a){m=a}},tooltips:{get:function(){return e.enabled()},set:function(b){a.deprecated("tooltips","use chart.tooltip.enabled() instead"),e.enabled(!!b)}},tooltipContent:{get:function(){return e.contentGenerator()},set:function(b){a.deprecated("tooltipContent","use chart.tooltip.contentGenerator() instead"),e.contentGenerator(b)}},color:{get:function(){return k},set:function(a){k=a,d.color(k),c.color(k)}},duration:{get:function(){return o},set:function(a){o=a,q.reset(o)}},margin:{get:function(){return f},set:function(a){f.top=void 0!==a.top?a.top:f.top,f.right=void 0!==a.right?a.right:f.right,f.bottom=void 0!==a.bottom?a.bottom:f.bottom,f.left=void 0!==a.left?a.left:f.left}}}),a.utils.inheritOptions(b,c),a.utils.initOptions(b),b},a.models.scatter=function(){"use strict";function b(N){return P.reset(),N.each(function(b){function N(){if(O=!1,!w)return!1;if(M===!0){var a=d3.merge(b.map(function(a,b){return a.values.map(function(a,c){var d=p(a,c),e=q(a,c);return[m(d)+1e-4*Math.random(),n(e)+1e-4*Math.random(),b,c,a]}).filter(function(a,b){return x(a[4],b)})}));if(0==a.length)return!1;a.length<3&&(a.push([m.range()[0]-20,n.range()[0]-20,null,null]),a.push([m.range()[1]+20,n.range()[1]+20,null,null]),a.push([m.range()[0]-20,n.range()[0]+20,null,null]),a.push([m.range()[1]+20,n.range()[1]-20,null,null]));var c=d3.geom.polygon([[-10,-10],[-10,i+10],[h+10,i+10],[h+10,-10]]),d=d3.geom.voronoi(a).map(function(b,d){return{data:c.clip(b),series:a[d][2],point:a[d][3]}});U.select(".nv-point-paths").selectAll("path").remove();var e=U.select(".nv-point-paths").selectAll("path").data(d),f=e.enter().append("svg:path").attr("d",function(a){return a&&a.data&&0!==a.data.length?"M"+a.data.join(",")+"Z":"M 0 0"}).attr("id",function(a,b){return"nv-path-"+b}).attr("clip-path",function(a,b){return"url(#nv-clip-"+b+")"});C&&f.style("fill",d3.rgb(230,230,230)).style("fill-opacity",.4).style("stroke-opacity",1).style("stroke",d3.rgb(200,200,200)),B&&(U.select(".nv-point-clips").selectAll("clipPath").remove(),U.select(".nv-point-clips").selectAll("clipPath").data(a).enter().append("svg:clipPath").attr("id",function(a,b){return"nv-clip-"+b}).append("svg:circle").attr("cx",function(a){return a[0]}).attr("cy",function(a){return a[1]}).attr("r",D));var k=function(a,c){if(O)return 0;var d=b[a.series];if(void 0!==d){var e=d.values[a.point];e.color=j(d,a.series),e.x=p(e),e.y=q(e);var f=l.node().getBoundingClientRect(),h=window.pageYOffset||document.documentElement.scrollTop,i=window.pageXOffset||document.documentElement.scrollLeft,k={left:m(p(e,a.point))+f.left+i+g.left+10,top:n(q(e,a.point))+f.top+h+g.top+10};c({point:e,series:d,pos:k,seriesIndex:a.series,pointIndex:a.point})}};e.on("click",function(a){k(a,L.elementClick)}).on("dblclick",function(a){k(a,L.elementDblClick)}).on("mouseover",function(a){k(a,L.elementMouseover)}).on("mouseout",function(a){k(a,L.elementMouseout)})}else U.select(".nv-groups").selectAll(".nv-group").selectAll(".nv-point").on("click",function(a,c){if(O||!b[a.series])return 0;var d=b[a.series],e=d.values[c];L.elementClick({point:e,series:d,pos:[m(p(e,c))+g.left,n(q(e,c))+g.top],seriesIndex:a.series,pointIndex:c})}).on("dblclick",function(a,c){if(O||!b[a.series])return 0;var d=b[a.series],e=d.values[c];L.elementDblClick({point:e,series:d,pos:[m(p(e,c))+g.left,n(q(e,c))+g.top],seriesIndex:a.series,pointIndex:c})}).on("mouseover",function(a,c){if(O||!b[a.series])return 0;var d=b[a.series],e=d.values[c];L.elementMouseover({point:e,series:d,pos:[m(p(e,c))+g.left,n(q(e,c))+g.top],seriesIndex:a.series,pointIndex:c,color:j(a,c)})}).on("mouseout",function(a,c){if(O||!b[a.series])return 0;var d=b[a.series],e=d.values[c];L.elementMouseout({point:e,series:d,seriesIndex:a.series,pointIndex:c,color:j(a,c)})})}l=d3.select(this);var R=a.utils.availableWidth(h,l,g),S=a.utils.availableHeight(i,l,g);a.utils.initSVG(l),b.forEach(function(a,b){a.values.forEach(function(a){a.series=b})});var T=E&&F&&I?[]:d3.merge(b.map(function(a){return a.values.map(function(a,b){return{x:p(a,b),y:q(a,b),size:r(a,b)}})}));m.domain(E||d3.extent(T.map(function(a){return a.x}).concat(t))),m.range(y&&b[0]?G||[(R*z+R)/(2*b[0].values.length),R-R*(1+z)/(2*b[0].values.length)]:G||[0,R]),n.domain(F||d3.extent(T.map(function(a){return a.y}).concat(u))).range(H||[S,0]),o.domain(I||d3.extent(T.map(function(a){return a.size}).concat(v))).range(J||Q),K=m.domain()[0]===m.domain()[1]||n.domain()[0]===n.domain()[1],m.domain()[0]===m.domain()[1]&&m.domain(m.domain()[0]?[m.domain()[0]-.01*m.domain()[0],m.domain()[1]+.01*m.domain()[1]]:[-1,1]),n.domain()[0]===n.domain()[1]&&n.domain(n.domain()[0]?[n.domain()[0]-.01*n.domain()[0],n.domain()[1]+.01*n.domain()[1]]:[-1,1]),isNaN(m.domain()[0])&&m.domain([-1,1]),isNaN(n.domain()[0])&&n.domain([-1,1]),c=c||m,d=d||n,e=e||o;var U=l.selectAll("g.nv-wrap.nv-scatter").data([b]),V=U.enter().append("g").attr("class","nvd3 nv-wrap nv-scatter nv-chart-"+k),W=V.append("defs"),X=V.append("g"),Y=U.select("g");U.classed("nv-single-point",K),X.append("g").attr("class","nv-groups"),X.append("g").attr("class","nv-point-paths"),V.append("g").attr("class","nv-point-clips"),U.attr("transform","translate("+g.left+","+g.top+")"),W.append("clipPath").attr("id","nv-edge-clip-"+k).append("rect"),U.select("#nv-edge-clip-"+k+" rect").attr("width",R).attr("height",S>0?S:0),Y.attr("clip-path",A?"url(#nv-edge-clip-"+k+")":""),O=!0;var Z=U.select(".nv-groups").selectAll(".nv-group").data(function(a){return a},function(a){return a.key});Z.enter().append("g").style("stroke-opacity",1e-6).style("fill-opacity",1e-6),Z.exit().remove(),Z.attr("class",function(a,b){return"nv-group nv-series-"+b}).classed("hover",function(a){return a.hover}),Z.watchTransition(P,"scatter: groups").style("fill",function(a,b){return j(a,b)}).style("stroke",function(a,b){return j(a,b)}).style("stroke-opacity",1).style("fill-opacity",.5);var $=Z.selectAll("path.nv-point").data(function(a){return a.values.map(function(a,b){return[a,b]}).filter(function(a,b){return x(a[0],b)})});$.enter().append("path").style("fill",function(a){return a.color}).style("stroke",function(a){return a.color}).attr("transform",function(a){return"translate("+c(p(a[0],a[1]))+","+d(q(a[0],a[1]))+")"}).attr("d",a.utils.symbol().type(function(a){return s(a[0])}).size(function(a){return o(r(a[0],a[1]))})),$.exit().remove(),Z.exit().selectAll("path.nv-point").watchTransition(P,"scatter exit").attr("transform",function(a){return"translate("+m(p(a[0],a[1]))+","+n(q(a[0],a[1]))+")"}).remove(),$.each(function(a){d3.select(this).classed("nv-point",!0).classed("nv-point-"+a[1],!0).classed("nv-noninteractive",!w).classed("hover",!1)}),$.watchTransition(P,"scatter points").attr("transform",function(a){return"translate("+m(p(a[0],a[1]))+","+n(q(a[0],a[1]))+")"}).attr("d",a.utils.symbol().type(function(a){return s(a[0])}).size(function(a){return o(r(a[0],a[1]))})),clearTimeout(f),f=setTimeout(N,300),c=m.copy(),d=n.copy(),e=o.copy()}),P.renderEnd("scatter immediate"),b}var c,d,e,f,g={top:0,right:0,bottom:0,left:0},h=null,i=null,j=a.utils.defaultColor(),k=Math.floor(1e5*Math.random()),l=null,m=d3.scale.linear(),n=d3.scale.linear(),o=d3.scale.linear(),p=function(a){return a.x},q=function(a){return a.y},r=function(a){return a.size||1},s=function(a){return a.shape||"circle"},t=[],u=[],v=[],w=!0,x=function(a){return!a.notActive},y=!1,z=.1,A=!1,B=!0,C=!1,D=function(){return 25},E=null,F=null,G=null,H=null,I=null,J=null,K=!1,L=d3.dispatch("elementClick","elementDblClick","elementMouseover","elementMouseout","renderEnd"),M=!0,N=250,O=!1,P=a.utils.renderWatch(L,N),Q=[16,256];return b.dispatch=L,b.options=a.utils.optionsFunc.bind(b),b._calls=new function(){this.clearHighlights=function(){return a.dom.write(function(){l.selectAll(".nv-point.hover").classed("hover",!1)}),null},this.highlightPoint=function(b,c,d){a.dom.write(function(){l.select(" .nv-series-"+b+" .nv-point-"+c).classed("hover",d)})}},L.on("elementMouseover.point",function(a){w&&b._calls.highlightPoint(a.seriesIndex,a.pointIndex,!0)}),L.on("elementMouseout.point",function(a){w&&b._calls.highlightPoint(a.seriesIndex,a.pointIndex,!1)}),b._options=Object.create({},{width:{get:function(){return h},set:function(a){h=a}},height:{get:function(){return i},set:function(a){i=a}},xScale:{get:function(){return m},set:function(a){m=a}},yScale:{get:function(){return n},set:function(a){n=a}},pointScale:{get:function(){return o},set:function(a){o=a}},xDomain:{get:function(){return E},set:function(a){E=a}},yDomain:{get:function(){return F},set:function(a){F=a}},pointDomain:{get:function(){return I},set:function(a){I=a}},xRange:{get:function(){return G},set:function(a){G=a}},yRange:{get:function(){return H},set:function(a){H=a}},pointRange:{get:function(){return J},set:function(a){J=a}},forceX:{get:function(){return t},set:function(a){t=a}},forceY:{get:function(){return u},set:function(a){u=a}},forcePoint:{get:function(){return v},set:function(a){v=a}},interactive:{get:function(){return w},set:function(a){w=a}},pointActive:{get:function(){return x},set:function(a){x=a}},padDataOuter:{get:function(){return z},set:function(a){z=a}},padData:{get:function(){return y},set:function(a){y=a}},clipEdge:{get:function(){return A},set:function(a){A=a}},clipVoronoi:{get:function(){return B},set:function(a){B=a}},clipRadius:{get:function(){return D},set:function(a){D=a}},showVoronoi:{get:function(){return C},set:function(a){C=a}},id:{get:function(){return k},set:function(a){k=a}},x:{get:function(){return p},set:function(a){p=d3.functor(a)}},y:{get:function(){return q},set:function(a){q=d3.functor(a)}},pointSize:{get:function(){return r},set:function(a){r=d3.functor(a)}},pointShape:{get:function(){return s},set:function(a){s=d3.functor(a)}},margin:{get:function(){return g},set:function(a){g.top=void 0!==a.top?a.top:g.top,g.right=void 0!==a.right?a.right:g.right,g.bottom=void 0!==a.bottom?a.bottom:g.bottom,g.left=void 0!==a.left?a.left:g.left}},duration:{get:function(){return N},set:function(a){N=a,P.reset(N)}},color:{get:function(){return j},set:function(b){j=a.utils.getColor(b)}},useVoronoi:{get:function(){return M},set:function(a){M=a,M===!1&&(B=!1)}}}),a.utils.initOptions(b),b},a.models.scatterChart=function(){"use strict";function b(z){return D.reset(),D.models(c),t&&D.models(d),u&&D.models(e),q&&D.models(g),r&&D.models(h),z.each(function(z){m=d3.select(this),a.utils.initSVG(m);var G=a.utils.availableWidth(k,m,j),H=a.utils.availableHeight(l,m,j);if(b.update=function(){0===A?m.call(b):m.transition().duration(A).call(b)},b.container=this,w.setter(F(z),b.update).getter(E(z)).update(),w.disabled=z.map(function(a){return!!a.disabled}),!x){var I;x={};for(I in w)x[I]=w[I]instanceof Array?w[I].slice(0):w[I]}if(!(z&&z.length&&z.filter(function(a){return a.values.length}).length))return a.utils.noData(b,m),D.renderEnd("scatter immediate"),b;m.selectAll(".nv-noData").remove(),o=c.xScale(),p=c.yScale();var J=m.selectAll("g.nv-wrap.nv-scatterChart").data([z]),K=J.enter().append("g").attr("class","nvd3 nv-wrap nv-scatterChart nv-chart-"+c.id()),L=K.append("g"),M=J.select("g");if(L.append("rect").attr("class","nvd3 nv-background").style("pointer-events","none"),L.append("g").attr("class","nv-x nv-axis"),L.append("g").attr("class","nv-y nv-axis"),L.append("g").attr("class","nv-scatterWrap"),L.append("g").attr("class","nv-regressionLinesWrap"),L.append("g").attr("class","nv-distWrap"),L.append("g").attr("class","nv-legendWrap"),v&&M.select(".nv-y.nv-axis").attr("transform","translate("+G+",0)"),s){var N=G;f.width(N),J.select(".nv-legendWrap").datum(z).call(f),j.top!=f.height()&&(j.top=f.height(),H=a.utils.availableHeight(l,m,j)),J.select(".nv-legendWrap").attr("transform","translate(0,"+-j.top+")")}J.attr("transform","translate("+j.left+","+j.top+")"),c.width(G).height(H).color(z.map(function(a,b){return a.color=a.color||n(a,b),a.color}).filter(function(a,b){return!z[b].disabled})),J.select(".nv-scatterWrap").datum(z.filter(function(a){return!a.disabled})).call(c),J.select(".nv-regressionLinesWrap").attr("clip-path","url(#nv-edge-clip-"+c.id()+")");var O=J.select(".nv-regressionLinesWrap").selectAll(".nv-regLines").data(function(a){return a});O.enter().append("g").attr("class","nv-regLines");var P=O.selectAll(".nv-regLine").data(function(a){return[a]});P.enter().append("line").attr("class","nv-regLine").style("stroke-opacity",0),P.filter(function(a){return a.intercept&&a.slope}).watchTransition(D,"scatterPlusLineChart: regline").attr("x1",o.range()[0]).attr("x2",o.range()[1]).attr("y1",function(a){return p(o.domain()[0]*a.slope+a.intercept)}).attr("y2",function(a){return p(o.domain()[1]*a.slope+a.intercept)}).style("stroke",function(a,b,c){return n(a,c)}).style("stroke-opacity",function(a){return a.disabled||"undefined"==typeof a.slope||"undefined"==typeof a.intercept?0:1}),t&&(d.scale(o)._ticks(a.utils.calcTicksX(G/100,z)).tickSize(-H,0),M.select(".nv-x.nv-axis").attr("transform","translate(0,"+p.range()[0]+")").call(d)),u&&(e.scale(p)._ticks(a.utils.calcTicksY(H/36,z)).tickSize(-G,0),M.select(".nv-y.nv-axis").call(e)),q&&(g.getData(c.x()).scale(o).width(G).color(z.map(function(a,b){return a.color||n(a,b)}).filter(function(a,b){return!z[b].disabled})),L.select(".nv-distWrap").append("g").attr("class","nv-distributionX"),M.select(".nv-distributionX").attr("transform","translate(0,"+p.range()[0]+")").datum(z.filter(function(a){return!a.disabled})).call(g)),r&&(h.getData(c.y()).scale(p).width(H).color(z.map(function(a,b){return a.color||n(a,b)}).filter(function(a,b){return!z[b].disabled})),L.select(".nv-distWrap").append("g").attr("class","nv-distributionY"),M.select(".nv-distributionY").attr("transform","translate("+(v?G:-h.size())+",0)").datum(z.filter(function(a){return!a.disabled})).call(h)),f.dispatch.on("stateChange",function(a){for(var c in a)w[c]=a[c];y.stateChange(w),b.update()}),y.on("changeState",function(a){"undefined"!=typeof a.disabled&&(z.forEach(function(b,c){b.disabled=a.disabled[c]}),w.disabled=a.disabled),b.update()}),c.dispatch.on("elementMouseout.tooltip",function(a){i.hidden(!0),m.select(".nv-chart-"+c.id()+" .nv-series-"+a.seriesIndex+" .nv-distx-"+a.pointIndex).attr("y1",0),m.select(".nv-chart-"+c.id()+" .nv-series-"+a.seriesIndex+" .nv-disty-"+a.pointIndex).attr("x2",h.size())}),c.dispatch.on("elementMouseover.tooltip",function(a){m.select(".nv-series-"+a.seriesIndex+" .nv-distx-"+a.pointIndex).attr("y1",a.pos.top-H-j.top),m.select(".nv-series-"+a.seriesIndex+" .nv-disty-"+a.pointIndex).attr("x2",a.pos.left+g.size()-j.left),i.position(a.pos).data(a).hidden(!1)}),B=o.copy(),C=p.copy()}),D.renderEnd("scatter with line immediate"),b}var c=a.models.scatter(),d=a.models.axis(),e=a.models.axis(),f=a.models.legend(),g=a.models.distribution(),h=a.models.distribution(),i=a.models.tooltip(),j={top:30,right:20,bottom:50,left:75},k=null,l=null,m=null,n=a.utils.defaultColor(),o=c.xScale(),p=c.yScale(),q=!1,r=!1,s=!0,t=!0,u=!0,v=!1,w=a.utils.state(),x=null,y=d3.dispatch("stateChange","changeState","renderEnd"),z=null,A=250;c.xScale(o).yScale(p),d.orient("bottom").tickPadding(10),e.orient(v?"right":"left").tickPadding(10),g.axis("x"),h.axis("y"),i.headerFormatter(function(a,b){return d.tickFormat()(a,b)}).valueFormatter(function(a,b){return e.tickFormat()(a,b)});var B,C,D=a.utils.renderWatch(y,A),E=function(a){return function(){return{active:a.map(function(a){return!a.disabled})}}},F=function(a){return function(b){void 0!==b.active&&a.forEach(function(a,c){a.disabled=!b.active[c]})}};return b.dispatch=y,b.scatter=c,b.legend=f,b.xAxis=d,b.yAxis=e,b.distX=g,b.distY=h,b.tooltip=i,b.options=a.utils.optionsFunc.bind(b),b._options=Object.create({},{width:{get:function(){return k},set:function(a){k=a}},height:{get:function(){return l},set:function(a){l=a}},container:{get:function(){return m},set:function(a){m=a}},showDistX:{get:function(){return q},set:function(a){q=a}},showDistY:{get:function(){return r},set:function(a){r=a}},showLegend:{get:function(){return s},set:function(a){s=a}},showXAxis:{get:function(){return t},set:function(a){t=a}},showYAxis:{get:function(){return u},set:function(a){u=a}},defaultState:{get:function(){return x},set:function(a){x=a}},noData:{get:function(){return z},set:function(a){z=a}},duration:{get:function(){return A},set:function(a){A=a}},tooltips:{get:function(){return i.enabled()},set:function(b){a.deprecated("tooltips","use chart.tooltip.enabled() instead"),i.enabled(!!b) }},tooltipContent:{get:function(){return i.contentGenerator()},set:function(b){a.deprecated("tooltipContent","use chart.tooltip.contentGenerator() instead"),i.contentGenerator(b)}},tooltipXContent:{get:function(){return i.contentGenerator()},set:function(){a.deprecated("tooltipContent","This option is removed, put values into main tooltip.")}},tooltipYContent:{get:function(){return i.contentGenerator()},set:function(){a.deprecated("tooltipContent","This option is removed, put values into main tooltip.")}},margin:{get:function(){return j},set:function(a){j.top=void 0!==a.top?a.top:j.top,j.right=void 0!==a.right?a.right:j.right,j.bottom=void 0!==a.bottom?a.bottom:j.bottom,j.left=void 0!==a.left?a.left:j.left}},rightAlignYAxis:{get:function(){return v},set:function(a){v=a,e.orient(a?"right":"left")}},color:{get:function(){return n},set:function(b){n=a.utils.getColor(b),f.color(n),g.color(n),h.color(n)}}}),a.utils.inheritOptions(b,c),a.utils.initOptions(b),b},a.models.sparkline=function(){"use strict";function b(k){return k.each(function(b){var k=h-g.left-g.right,q=i-g.top-g.bottom;j=d3.select(this),a.utils.initSVG(j),l.domain(c||d3.extent(b,n)).range(e||[0,k]),m.domain(d||d3.extent(b,o)).range(f||[q,0]);{var r=j.selectAll("g.nv-wrap.nv-sparkline").data([b]),s=r.enter().append("g").attr("class","nvd3 nv-wrap nv-sparkline");s.append("g"),r.select("g")}r.attr("transform","translate("+g.left+","+g.top+")");var t=r.selectAll("path").data(function(a){return[a]});t.enter().append("path"),t.exit().remove(),t.style("stroke",function(a,b){return a.color||p(a,b)}).attr("d",d3.svg.line().x(function(a,b){return l(n(a,b))}).y(function(a,b){return m(o(a,b))}));var u=r.selectAll("circle.nv-point").data(function(a){function b(b){if(-1!=b){var c=a[b];return c.pointIndex=b,c}return null}var c=a.map(function(a,b){return o(a,b)}),d=b(c.lastIndexOf(m.domain()[1])),e=b(c.indexOf(m.domain()[0])),f=b(c.length-1);return[e,d,f].filter(function(a){return null!=a})});u.enter().append("circle"),u.exit().remove(),u.attr("cx",function(a){return l(n(a,a.pointIndex))}).attr("cy",function(a){return m(o(a,a.pointIndex))}).attr("r",2).attr("class",function(a){return n(a,a.pointIndex)==l.domain()[1]?"nv-point nv-currentValue":o(a,a.pointIndex)==m.domain()[0]?"nv-point nv-minValue":"nv-point nv-maxValue"})}),b}var c,d,e,f,g={top:2,right:0,bottom:2,left:0},h=400,i=32,j=null,k=!0,l=d3.scale.linear(),m=d3.scale.linear(),n=function(a){return a.x},o=function(a){return a.y},p=a.utils.getColor(["#000"]);return b.options=a.utils.optionsFunc.bind(b),b._options=Object.create({},{width:{get:function(){return h},set:function(a){h=a}},height:{get:function(){return i},set:function(a){i=a}},xDomain:{get:function(){return c},set:function(a){c=a}},yDomain:{get:function(){return d},set:function(a){d=a}},xRange:{get:function(){return e},set:function(a){e=a}},yRange:{get:function(){return f},set:function(a){f=a}},xScale:{get:function(){return l},set:function(a){l=a}},yScale:{get:function(){return m},set:function(a){m=a}},animate:{get:function(){return k},set:function(a){k=a}},x:{get:function(){return n},set:function(a){n=d3.functor(a)}},y:{get:function(){return o},set:function(a){o=d3.functor(a)}},margin:{get:function(){return g},set:function(a){g.top=void 0!==a.top?a.top:g.top,g.right=void 0!==a.right?a.right:g.right,g.bottom=void 0!==a.bottom?a.bottom:g.bottom,g.left=void 0!==a.left?a.left:g.left}},color:{get:function(){return p},set:function(b){p=a.utils.getColor(b)}}}),a.utils.initOptions(b),b},a.models.sparklinePlus=function(){"use strict";function b(p){return p.each(function(p){function q(){if(!j){var a=z.selectAll(".nv-hoverValue").data(i),b=a.enter().append("g").attr("class","nv-hoverValue").style("stroke-opacity",0).style("fill-opacity",0);a.exit().transition().duration(250).style("stroke-opacity",0).style("fill-opacity",0).remove(),a.attr("transform",function(a){return"translate("+c(e.x()(p[a],a))+",0)"}).transition().duration(250).style("stroke-opacity",1).style("fill-opacity",1),i.length&&(b.append("line").attr("x1",0).attr("y1",-f.top).attr("x2",0).attr("y2",u),b.append("text").attr("class","nv-xValue").attr("x",-6).attr("y",-f.top).attr("text-anchor","end").attr("dy",".9em"),z.select(".nv-hoverValue .nv-xValue").text(k(e.x()(p[i[0]],i[0]))),b.append("text").attr("class","nv-yValue").attr("x",6).attr("y",-f.top).attr("text-anchor","start").attr("dy",".9em"),z.select(".nv-hoverValue .nv-yValue").text(l(e.y()(p[i[0]],i[0]))))}}function r(){function a(a,b){for(var c=Math.abs(e.x()(a[0],0)-b),d=0,f=0;fc;++c){for(b=0,d=0;bb;b++)a[b][c][1]/=d;else for(b=0;e>b;b++)a[b][c][1]=0}for(c=0;f>c;++c)g[c]=0;return g}}),u.renderEnd("stackedArea immediate"),b}var c,d,e={top:0,right:0,bottom:0,left:0},f=960,g=500,h=a.utils.defaultColor(),i=Math.floor(1e5*Math.random()),j=null,k=function(a){return a.x},l=function(a){return a.y},m="stack",n="zero",o="default",p="linear",q=!1,r=a.models.scatter(),s=250,t=d3.dispatch("areaClick","areaMouseover","areaMouseout","renderEnd","elementClick","elementMouseover","elementMouseout");r.pointSize(2.2).pointDomain([2.2,2.2]);var u=a.utils.renderWatch(t,s);return b.dispatch=t,b.scatter=r,r.dispatch.on("elementClick",function(){t.elementClick.apply(this,arguments)}),r.dispatch.on("elementMouseover",function(){t.elementMouseover.apply(this,arguments)}),r.dispatch.on("elementMouseout",function(){t.elementMouseout.apply(this,arguments)}),b.interpolate=function(a){return arguments.length?(p=a,b):p},b.duration=function(a){return arguments.length?(s=a,u.reset(s),r.duration(s),b):s},b.dispatch=t,b.scatter=r,b.options=a.utils.optionsFunc.bind(b),b._options=Object.create({},{width:{get:function(){return f},set:function(a){f=a}},height:{get:function(){return g},set:function(a){g=a}},clipEdge:{get:function(){return q},set:function(a){q=a}},offset:{get:function(){return n},set:function(a){n=a}},order:{get:function(){return o},set:function(a){o=a}},interpolate:{get:function(){return p},set:function(a){p=a}},x:{get:function(){return k},set:function(a){k=d3.functor(a)}},y:{get:function(){return l},set:function(a){l=d3.functor(a)}},margin:{get:function(){return e},set:function(a){e.top=void 0!==a.top?a.top:e.top,e.right=void 0!==a.right?a.right:e.right,e.bottom=void 0!==a.bottom?a.bottom:e.bottom,e.left=void 0!==a.left?a.left:e.left}},color:{get:function(){return h},set:function(b){h=a.utils.getColor(b)}},style:{get:function(){return m},set:function(a){switch(m=a){case"stack":b.offset("zero"),b.order("default");break;case"stream":b.offset("wiggle"),b.order("inside-out");break;case"stream-center":b.offset("silhouette"),b.order("inside-out");break;case"expand":b.offset("expand"),b.order("default");break;case"stack_percent":b.offset(b.d3_stackedOffset_stackPercent),b.order("default")}}},duration:{get:function(){return s},set:function(a){s=a,u.reset(s),r.duration(s)}}}),a.utils.inheritOptions(b,r),a.utils.initOptions(b),b},a.models.stackedAreaChart=function(){"use strict";function b(k){return F.reset(),F.models(e),r&&F.models(f),s&&F.models(g),k.each(function(k){var x=d3.select(this),F=this;a.utils.initSVG(x);var K=a.utils.availableWidth(m,x,l),L=a.utils.availableHeight(n,x,l);if(b.update=function(){x.transition().duration(C).call(b)},b.container=this,v.setter(I(k),b.update).getter(H(k)).update(),v.disabled=k.map(function(a){return!!a.disabled}),!w){var M;w={};for(M in v)w[M]=v[M]instanceof Array?v[M].slice(0):v[M]}if(!(k&&k.length&&k.filter(function(a){return a.values.length}).length))return a.utils.noData(b,x),b;x.selectAll(".nv-noData").remove(),c=e.xScale(),d=e.yScale();var N=x.selectAll("g.nv-wrap.nv-stackedAreaChart").data([k]),O=N.enter().append("g").attr("class","nvd3 nv-wrap nv-stackedAreaChart").append("g"),P=N.select("g");if(O.append("rect").style("opacity",0),O.append("g").attr("class","nv-x nv-axis"),O.append("g").attr("class","nv-y nv-axis"),O.append("g").attr("class","nv-stackedWrap"),O.append("g").attr("class","nv-legendWrap"),O.append("g").attr("class","nv-controlsWrap"),O.append("g").attr("class","nv-interactive"),P.select("rect").attr("width",K).attr("height",L),q){var Q=p?K-z:K;h.width(Q),P.select(".nv-legendWrap").datum(k).call(h),l.top!=h.height()&&(l.top=h.height(),L=a.utils.availableHeight(n,x,l)),P.select(".nv-legendWrap").attr("transform","translate("+(K-Q)+","+-l.top+")")}if(p){var R=[{key:B.stacked||"Stacked",metaKey:"Stacked",disabled:"stack"!=e.style(),style:"stack"},{key:B.stream||"Stream",metaKey:"Stream",disabled:"stream"!=e.style(),style:"stream"},{key:B.expanded||"Expanded",metaKey:"Expanded",disabled:"expand"!=e.style(),style:"expand"},{key:B.stack_percent||"Stack %",metaKey:"Stack_Percent",disabled:"stack_percent"!=e.style(),style:"stack_percent"}];z=A.length/3*260,R=R.filter(function(a){return-1!==A.indexOf(a.metaKey)}),i.width(z).color(["#444","#444","#444"]),P.select(".nv-controlsWrap").datum(R).call(i),l.top!=Math.max(i.height(),h.height())&&(l.top=Math.max(i.height(),h.height()),L=a.utils.availableHeight(n,x,l)),P.select(".nv-controlsWrap").attr("transform","translate(0,"+-l.top+")")}N.attr("transform","translate("+l.left+","+l.top+")"),t&&P.select(".nv-y.nv-axis").attr("transform","translate("+K+",0)"),u&&(j.width(K).height(L).margin({left:l.left,top:l.top}).svgContainer(x).xScale(c),N.select(".nv-interactive").call(j)),e.width(K).height(L);var S=P.select(".nv-stackedWrap").datum(k);if(S.transition().call(e),r&&(f.scale(c)._ticks(a.utils.calcTicksX(K/100,k)).tickSize(-L,0),P.select(".nv-x.nv-axis").attr("transform","translate(0,"+L+")"),P.select(".nv-x.nv-axis").transition().duration(0).call(f)),s){var T;if(T="wiggle"===e.offset()?0:a.utils.calcTicksY(L/36,k),g.scale(d)._ticks(T).tickSize(-K,0),"expand"===e.style()||"stack_percent"===e.style()){var U=g.tickFormat();D&&U===J||(D=U),g.tickFormat(J)}else D&&(g.tickFormat(D),D=null);P.select(".nv-y.nv-axis").transition().duration(0).call(g)}e.dispatch.on("areaClick.toggle",function(a){k.forEach(1===k.filter(function(a){return!a.disabled}).length?function(a){a.disabled=!1}:function(b,c){b.disabled=c!=a.seriesIndex}),v.disabled=k.map(function(a){return!!a.disabled}),y.stateChange(v),b.update()}),h.dispatch.on("stateChange",function(a){for(var c in a)v[c]=a[c];y.stateChange(v),b.update()}),i.dispatch.on("legendClick",function(a){a.disabled&&(R=R.map(function(a){return a.disabled=!0,a}),a.disabled=!1,e.style(a.style),v.style=e.style(),y.stateChange(v),b.update())}),j.dispatch.on("elementMousemove",function(c){e.clearHighlights();var d,g,h,i=[];if(k.filter(function(a,b){return a.seriesIndex=b,!a.disabled}).forEach(function(f,j){g=a.interactiveBisect(f.values,c.pointXValue,b.x());var k=f.values[g],l=b.y()(k,g);if(null!=l&&e.highlightPoint(j,g,!0),"undefined"!=typeof k){"undefined"==typeof d&&(d=k),"undefined"==typeof h&&(h=b.xScale()(b.x()(k,g)));var m="expand"==e.style()?k.display.y:b.y()(k,g);i.push({key:f.key,value:m,color:o(f,f.seriesIndex),stackedValue:k.display})}}),i.reverse(),i.length>2){var m=b.yScale().invert(c.mouseY),n=null;i.forEach(function(a,b){m=Math.abs(m);var c=Math.abs(a.stackedValue.y0),d=Math.abs(a.stackedValue.y);return m>=c&&d+c>=m?void(n=b):void 0}),null!=n&&(i[n].highlight=!0)}var p=f.tickFormat()(b.x()(d,g)),q=j.tooltip.valueFormatter();"expand"===e.style()||"stack_percent"===e.style()?(E||(E=q),q=d3.format(".1%")):E&&(q=E,E=null),j.tooltip.position({left:h+l.left,top:c.mouseY+l.top}).chartContainer(F.parentNode).valueFormatter(q).data({value:p,series:i})(),j.renderGuideLine(h)}),j.dispatch.on("elementMouseout",function(){e.clearHighlights()}),y.on("changeState",function(a){"undefined"!=typeof a.disabled&&k.length===a.disabled.length&&(k.forEach(function(b,c){b.disabled=a.disabled[c]}),v.disabled=a.disabled),"undefined"!=typeof a.style&&(e.style(a.style),G=a.style),b.update()})}),F.renderEnd("stacked Area chart immediate"),b}var c,d,e=a.models.stackedArea(),f=a.models.axis(),g=a.models.axis(),h=a.models.legend(),i=a.models.legend(),j=a.interactiveGuideline(),k=a.models.tooltip(),l={top:30,right:25,bottom:50,left:60},m=null,n=null,o=a.utils.defaultColor(),p=!0,q=!0,r=!0,s=!0,t=!1,u=!1,v=a.utils.state(),w=null,x=null,y=d3.dispatch("stateChange","changeState","renderEnd"),z=250,A=["Stacked","Stream","Expanded"],B={},C=250;v.style=e.style(),f.orient("bottom").tickPadding(7),g.orient(t?"right":"left"),k.headerFormatter(function(a,b){return f.tickFormat()(a,b)}).valueFormatter(function(a,b){return g.tickFormat()(a,b)}),j.tooltip.headerFormatter(function(a,b){return f.tickFormat()(a,b)}).valueFormatter(function(a,b){return g.tickFormat()(a,b)});var D=null,E=null;i.updateState(!1);var F=a.utils.renderWatch(y),G=e.style(),H=function(a){return function(){return{active:a.map(function(a){return!a.disabled}),style:e.style()}}},I=function(a){return function(b){void 0!==b.style&&(G=b.style),void 0!==b.active&&a.forEach(function(a,c){a.disabled=!b.active[c]})}},J=d3.format("%");return e.dispatch.on("elementMouseover.tooltip",function(a){a.point.x=e.x()(a.point),a.point.y=e.y()(a.point),k.data(a).position(a.pos).hidden(!1)}),e.dispatch.on("elementMouseout.tooltip",function(){k.hidden(!0)}),b.dispatch=y,b.stacked=e,b.legend=h,b.controls=i,b.xAxis=f,b.yAxis=g,b.interactiveLayer=j,b.tooltip=k,b.dispatch=y,b.options=a.utils.optionsFunc.bind(b),b._options=Object.create({},{width:{get:function(){return m},set:function(a){m=a}},height:{get:function(){return n},set:function(a){n=a}},showLegend:{get:function(){return q},set:function(a){q=a}},showXAxis:{get:function(){return r},set:function(a){r=a}},showYAxis:{get:function(){return s},set:function(a){s=a}},defaultState:{get:function(){return w},set:function(a){w=a}},noData:{get:function(){return x},set:function(a){x=a}},showControls:{get:function(){return p},set:function(a){p=a}},controlLabels:{get:function(){return B},set:function(a){B=a}},controlOptions:{get:function(){return A},set:function(a){A=a}},tooltips:{get:function(){return k.enabled()},set:function(b){a.deprecated("tooltips","use chart.tooltip.enabled() instead"),k.enabled(!!b)}},tooltipContent:{get:function(){return k.contentGenerator()},set:function(b){a.deprecated("tooltipContent","use chart.tooltip.contentGenerator() instead"),k.contentGenerator(b)}},margin:{get:function(){return l},set:function(a){l.top=void 0!==a.top?a.top:l.top,l.right=void 0!==a.right?a.right:l.right,l.bottom=void 0!==a.bottom?a.bottom:l.bottom,l.left=void 0!==a.left?a.left:l.left}},duration:{get:function(){return C},set:function(a){C=a,F.reset(C),e.duration(C),f.duration(C),g.duration(C)}},color:{get:function(){return o},set:function(b){o=a.utils.getColor(b),h.color(o),e.color(o)}},rightAlignYAxis:{get:function(){return t},set:function(a){t=a,g.orient(t?"right":"left")}},useInteractiveGuideline:{get:function(){return u},set:function(a){u=!!a,b.interactive(!a),b.useVoronoi(!a),e.scatter.interactive(!a)}}}),a.utils.inheritOptions(b,e),a.utils.initOptions(b),b},a.models.sunburst=function(){"use strict";function b(u){return t.reset(),u.each(function(b){function t(a){a.x0=a.x,a.dx0=a.dx}function u(a){var b=d3.interpolate(p.domain(),[a.x,a.x+a.dx]),c=d3.interpolate(q.domain(),[a.y,1]),d=d3.interpolate(q.range(),[a.y?20:0,y]);return function(a,e){return e?function(){return s(a)}:function(e){return p.domain(b(e)),q.domain(c(e)).range(d(e)),s(a)}}}l=d3.select(this);var v,w=a.utils.availableWidth(g,l,f),x=a.utils.availableHeight(h,l,f),y=Math.min(w,x)/2;a.utils.initSVG(l);var z=l.selectAll(".nv-wrap.nv-sunburst").data(b),A=z.enter().append("g").attr("class","nvd3 nv-wrap nv-sunburst nv-chart-"+k),B=A.selectAll("nv-sunburst");z.attr("transform","translate("+w/2+","+x/2+")"),l.on("click",function(a,b){o.chartClick({data:a,index:b,pos:d3.event,id:k})}),q.range([0,y]),c=c||b,e=b[0],r.value(j[i]||j.count),v=B.data(r.nodes).enter().append("path").attr("d",s).style("fill",function(a){return m((a.children?a:a.parent).name)}).style("stroke","#FFF").on("click",function(a){d!==c&&c!==a&&(d=c),c=a,v.transition().duration(n).attrTween("d",u(a))}).each(t).on("dblclick",function(a){d.parent==a&&v.transition().duration(n).attrTween("d",u(e))}).each(t).on("mouseover",function(a){d3.select(this).classed("hover",!0).style("opacity",.8),o.elementMouseover({data:a,color:d3.select(this).style("fill")})}).on("mouseout",function(a){d3.select(this).classed("hover",!1).style("opacity",1),o.elementMouseout({data:a})}).on("mousemove",function(a){o.elementMousemove({data:a})})}),t.renderEnd("sunburst immediate"),b}var c,d,e,f={top:0,right:0,bottom:0,left:0},g=null,h=null,i="count",j={count:function(){return 1},size:function(a){return a.size}},k=Math.floor(1e4*Math.random()),l=null,m=a.utils.defaultColor(),n=500,o=d3.dispatch("chartClick","elementClick","elementDblClick","elementMousemove","elementMouseover","elementMouseout","renderEnd"),p=d3.scale.linear().range([0,2*Math.PI]),q=d3.scale.sqrt(),r=d3.layout.partition().sort(null).value(function(){return 1}),s=d3.svg.arc().startAngle(function(a){return Math.max(0,Math.min(2*Math.PI,p(a.x)))}).endAngle(function(a){return Math.max(0,Math.min(2*Math.PI,p(a.x+a.dx)))}).innerRadius(function(a){return Math.max(0,q(a.y))}).outerRadius(function(a){return Math.max(0,q(a.y+a.dy))}),t=a.utils.renderWatch(o);return b.dispatch=o,b.options=a.utils.optionsFunc.bind(b),b._options=Object.create({},{width:{get:function(){return g},set:function(a){g=a}},height:{get:function(){return h},set:function(a){h=a}},mode:{get:function(){return i},set:function(a){i=a}},id:{get:function(){return k},set:function(a){k=a}},duration:{get:function(){return n},set:function(a){n=a}},margin:{get:function(){return f},set:function(a){f.top=void 0!=a.top?a.top:f.top,f.right=void 0!=a.right?a.right:f.right,f.bottom=void 0!=a.bottom?a.bottom:f.bottom,f.left=void 0!=a.left?a.left:f.left}},color:{get:function(){return m},set:function(b){m=a.utils.getColor(b)}}}),a.utils.initOptions(b),b},a.models.sunburstChart=function(){"use strict";function b(d){return m.reset(),m.models(c),d.each(function(d){var h=d3.select(this);a.utils.initSVG(h);var i=a.utils.availableWidth(f,h,e),j=a.utils.availableHeight(g,h,e);if(b.update=function(){0===k?h.call(b):h.transition().duration(k).call(b)},b.container=this,!d||!d.length)return a.utils.noData(b,h),b;h.selectAll(".nv-noData").remove();var l=h.selectAll("g.nv-wrap.nv-sunburstChart").data(d),m=l.enter().append("g").attr("class","nvd3 nv-wrap nv-sunburstChart").append("g"),n=l.select("g");m.append("g").attr("class","nv-sunburstWrap"),l.attr("transform","translate("+e.left+","+e.top+")"),c.width(i).height(j);var o=n.select(".nv-sunburstWrap").datum(d);d3.transition(o).call(c)}),m.renderEnd("sunburstChart immediate"),b}var c=a.models.sunburst(),d=a.models.tooltip(),e={top:30,right:20,bottom:20,left:20},f=null,g=null,h=a.utils.defaultColor(),i=(Math.round(1e5*Math.random()),null),j=null,k=250,l=d3.dispatch("tooltipShow","tooltipHide","stateChange","changeState","renderEnd"),m=a.utils.renderWatch(l);return d.headerEnabled(!1).duration(0).valueFormatter(function(a){return a}),c.dispatch.on("elementMouseover.tooltip",function(a){a.series={key:a.data.name,value:a.data.size,color:a.color},d.data(a).hidden(!1)}),c.dispatch.on("elementMouseout.tooltip",function(){d.hidden(!0)}),c.dispatch.on("elementMousemove.tooltip",function(){d.position({top:d3.event.pageY,left:d3.event.pageX})()}),b.dispatch=l,b.sunburst=c,b.tooltip=d,b.options=a.utils.optionsFunc.bind(b),b._options=Object.create({},{noData:{get:function(){return j},set:function(a){j=a}},defaultState:{get:function(){return i},set:function(a){i=a}},color:{get:function(){return h},set:function(a){h=a,c.color(h)}},duration:{get:function(){return k},set:function(a){k=a,m.reset(k),c.duration(k)}},margin:{get:function(){return e},set:function(a){e.top=void 0!==a.top?a.top:e.top,e.right=void 0!==a.right?a.right:e.right,e.bottom=void 0!==a.bottom?a.bottom:e.bottom,e.left=void 0!==a.left?a.left:e.left}}}),a.utils.inheritOptions(b,c),a.utils.initOptions(b),b},a.version="1.8.1"}();PK!b�ä†ùùfile-manager-advanced/application/svg-sanitizer/includes/phpunit/php-code-coverage/src/Report/Html/Renderer/Template/js/file.jsnu„[µü¤ $(function() { var $window = $(window) , $top_link = $('#toplink') , $body = $('body, html') , offset = $('#code').offset().top , hidePopover = function ($target) { $target.data('popover-hover', false); setTimeout(function () { if (!$target.data('popover-hover')) { $target.popover('hide'); } }, 300); }; $top_link.hide().click(function(event) { event.preventDefault(); $body.animate({scrollTop:0}, 800); }); $window.scroll(function() { if($window.scrollTop() > offset) { $top_link.fadeIn(); } else { $top_link.fadeOut(); } }).scroll(); $('.popin') .popover({trigger: 'manual'}) .on({ 'mouseenter.popover': function () { var $target = $(this); var $container = $target.children().first(); $target.data('popover-hover', true); // popover already displayed if ($target.next('.popover').length) { return; } // show the popover $container.popover('show'); // register mouse events on the popover $target.next('.popover:not(.popover-initialized)') .on({ 'mouseenter': function () { $target.data('popover-hover', true); }, 'mouseleave': function () { hidePopover($container); } }) .addClass('popover-initialized'); }, 'mouseleave.popover': function () { hidePopover($(this).children().first()); } }); }); PK!Q†ä[QXQX…file-manager-advanced/application/svg-sanitizer/includes/phpunit/php-code-coverage/src/Report/Html/Renderer/Template/js/jquery.min.jsnu„[µü¤/*! jQuery v3.4.1 | (c) JS Foundation and other contributors | jquery.org/license */ !function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(C,e){"use strict";var t=[],E=C.document,r=Object.getPrototypeOf,s=t.slice,g=t.concat,u=t.push,i=t.indexOf,n={},o=n.toString,v=n.hasOwnProperty,a=v.toString,l=a.call(Object),y={},m=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType},x=function(e){return null!=e&&e===e.window},c={type:!0,src:!0,nonce:!0,noModule:!0};function b(e,t,n){var r,i,o=(n=n||E).createElement("script");if(o.text=e,t)for(r in c)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function w(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[o.call(e)]||"object":typeof e}var f="3.4.1",k=function(e,t){return new k.fn.init(e,t)},p=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g;function d(e){var t=!!e&&"length"in e&&e.length,n=w(e);return!m(e)&&!x(e)&&("array"===n||0===t||"number"==typeof t&&0+~]|"+M+")"+M+"*"),U=new RegExp(M+"|>"),X=new RegExp($),V=new RegExp("^"+I+"$"),G={ID:new RegExp("^#("+I+")"),CLASS:new RegExp("^\\.("+I+")"),TAG:new RegExp("^("+I+"|[*])"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+$),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+R+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,Q=/^(?:input|select|textarea|button)$/i,J=/^h\d$/i,K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\([\\da-f]{1,6}"+M+"?|("+M+")|.)","ig"),ne=function(e,t,n){var r="0x"+t-65536;return r!=r||n?t:r<0?String.fromCharCode(r+65536):String.fromCharCode(r>>10|55296,1023&r|56320)},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){T()},ae=be(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{H.apply(t=O.call(m.childNodes),m.childNodes),t[m.childNodes.length].nodeType}catch(e){H={apply:t.length?function(e,t){L.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&((e?e.ownerDocument||e:m)!==C&&T(e),e=e||C,E)){if(11!==p&&(u=Z.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&y(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return H.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&d.getElementsByClassName&&e.getElementsByClassName)return H.apply(n,e.getElementsByClassName(i)),n}if(d.qsa&&!A[t+" "]&&(!v||!v.test(t))&&(1!==p||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===p&&U.test(t)){(s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=k),o=(l=h(t)).length;while(o--)l[o]="#"+s+" "+xe(l[o]);c=l.join(","),f=ee.test(t)&&ye(e.parentNode)||e}try{return H.apply(n,f.querySelectorAll(c)),n}catch(e){A(t,!0)}finally{s===k&&e.removeAttribute("id")}}}return g(t.replace(B,"$1"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function le(e){return e[k]=!0,e}function ce(e){var t=C.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){var n=e.split("|"),r=n.length;while(r--)b.attrHandle[n[r]]=t}function pe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function de(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function ge(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ve(a){return le(function(o){return o=+o,le(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ye(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}for(e in d=se.support={},i=se.isXML=function(e){var t=e.namespaceURI,n=(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},T=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:m;return r!==C&&9===r.nodeType&&r.documentElement&&(a=(C=r).documentElement,E=!i(C),m!==C&&(n=C.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),d.attributes=ce(function(e){return e.className="i",!e.getAttribute("className")}),d.getElementsByTagName=ce(function(e){return e.appendChild(C.createComment("")),!e.getElementsByTagName("*").length}),d.getElementsByClassName=K.test(C.getElementsByClassName),d.getById=ce(function(e){return a.appendChild(e).id=k,!C.getElementsByName||!C.getElementsByName(k).length}),d.getById?(b.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=d.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):d.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},b.find.CLASS=d.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&E)return t.getElementsByClassName(e)},s=[],v=[],(d.qsa=K.test(C.querySelectorAll))&&(ce(function(e){a.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&v.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||v.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll("[id~="+k+"-]").length||v.push("~="),e.querySelectorAll(":checked").length||v.push(":checked"),e.querySelectorAll("a#"+k+"+*").length||v.push(".#.+[+~]")}),ce(function(e){e.innerHTML="";var t=C.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&v.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&v.push(":enabled",":disabled"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&v.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),v.push(",.*:")})),(d.matchesSelector=K.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){d.disconnectedMatch=c.call(e,"*"),c.call(e,"[s!='']:x"),s.push("!=",$)}),v=v.length&&new RegExp(v.join("|")),s=s.length&&new RegExp(s.join("|")),t=K.test(a.compareDocumentPosition),y=t||K.test(a.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},D=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)===(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e===C||e.ownerDocument===m&&y(m,e)?-1:t===C||t.ownerDocument===m&&y(m,t)?1:u?P(u,e)-P(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e===C?-1:t===C?1:i?-1:o?1:u?P(u,e)-P(u,t):0;if(i===o)return pe(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?pe(a[r],s[r]):a[r]===m?-1:s[r]===m?1:0}),C},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if((e.ownerDocument||e)!==C&&T(e),d.matchesSelector&&E&&!A[t+" "]&&(!s||!s.test(t))&&(!v||!v.test(t)))try{var n=c.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){A(t,!0)}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=h(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=p[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&p(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function j(e,n,r){return m(n)?k.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?k.grep(e,function(e){return e===n!==r}):"string"!=typeof n?k.grep(e,function(e){return-1)[^>]*|#([\w-]+))$/;(k.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||q,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:L.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof k?t[0]:t,k.merge(this,k.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:E,!0)),D.test(r[1])&&k.isPlainObject(t))for(r in t)m(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=E.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):m(e)?void 0!==n.ready?n.ready(e):e(k):k.makeArray(e,this)}).prototype=k.fn,q=k(E);var H=/^(?:parents|prev(?:Until|All))/,O={children:!0,contents:!0,next:!0,prev:!0};function P(e,t){while((e=e[t])&&1!==e.nodeType);return e}k.fn.extend({has:function(e){var t=k(e,this),n=t.length;return this.filter(function(){for(var e=0;e\x20\t\r\n\f]*)/i,he=/^$|^module$|\/(?:java|ecma)script/i,ge={option:[1,""],thead:[1,"","
    "],col:[2,"","
    "],tr:[2,"","
    "],td:[3,"","
    "],_default:[0,"",""]};function ve(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&A(e,t)?k.merge([e],n):n}function ye(e,t){for(var n=0,r=e.length;nx",y.noCloneChecked=!!me.cloneNode(!0).lastChild.defaultValue;var Te=/^key/,Ce=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,Ee=/^([^.]*)(?:\.(.+)|)/;function ke(){return!0}function Se(){return!1}function Ne(e,t){return e===function(){try{return E.activeElement}catch(e){}}()==("focus"===t)}function Ae(e,t,n,r,i,o){var a,s;if("object"==typeof t){for(s in"string"!=typeof n&&(r=r||n,n=void 0),t)Ae(e,s,n,r,t[s],o);return e}if(null==r&&null==i?(i=n,r=n=void 0):null==i&&("string"==typeof n?(i=r,r=void 0):(i=r,r=n,n=void 0)),!1===i)i=Se;else if(!i)return e;return 1===o&&(a=i,(i=function(e){return k().off(e),a.apply(this,arguments)}).guid=a.guid||(a.guid=k.guid++)),e.each(function(){k.event.add(this,t,i,r,n)})}function De(e,i,o){o?(Q.set(e,i,!1),k.event.add(e,i,{namespace:!1,handler:function(e){var t,n,r=Q.get(this,i);if(1&e.isTrigger&&this[i]){if(r.length)(k.event.special[i]||{}).delegateType&&e.stopPropagation();else if(r=s.call(arguments),Q.set(this,i,r),t=o(this,i),this[i](),r!==(n=Q.get(this,i))||t?Q.set(this,i,!1):n={},r!==n)return e.stopImmediatePropagation(),e.preventDefault(),n.value}else r.length&&(Q.set(this,i,{value:k.event.trigger(k.extend(r[0],k.Event.prototype),r.slice(1),this)}),e.stopImmediatePropagation())}})):void 0===Q.get(e,i)&&k.event.add(e,i,ke)}k.event={global:{},add:function(t,e,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,v=Q.get(t);if(v){n.handler&&(n=(o=n).handler,i=o.selector),i&&k.find.matchesSelector(ie,i),n.guid||(n.guid=k.guid++),(u=v.events)||(u=v.events={}),(a=v.handle)||(a=v.handle=function(e){return"undefined"!=typeof k&&k.event.triggered!==e.type?k.event.dispatch.apply(t,arguments):void 0}),l=(e=(e||"").match(R)||[""]).length;while(l--)d=g=(s=Ee.exec(e[l])||[])[1],h=(s[2]||"").split(".").sort(),d&&(f=k.event.special[d]||{},d=(i?f.delegateType:f.bindType)||d,f=k.event.special[d]||{},c=k.extend({type:d,origType:g,data:r,handler:n,guid:n.guid,selector:i,needsContext:i&&k.expr.match.needsContext.test(i),namespace:h.join(".")},o),(p=u[d])||((p=u[d]=[]).delegateCount=0,f.setup&&!1!==f.setup.call(t,r,h,a)||t.addEventListener&&t.addEventListener(d,a)),f.add&&(f.add.call(t,c),c.handler.guid||(c.handler.guid=n.guid)),i?p.splice(p.delegateCount++,0,c):p.push(c),k.event.global[d]=!0)}},remove:function(e,t,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,v=Q.hasData(e)&&Q.get(e);if(v&&(u=v.events)){l=(t=(t||"").match(R)||[""]).length;while(l--)if(d=g=(s=Ee.exec(t[l])||[])[1],h=(s[2]||"").split(".").sort(),d){f=k.event.special[d]||{},p=u[d=(r?f.delegateType:f.bindType)||d]||[],s=s[2]&&new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),a=o=p.length;while(o--)c=p[o],!i&&g!==c.origType||n&&n.guid!==c.guid||s&&!s.test(c.namespace)||r&&r!==c.selector&&("**"!==r||!c.selector)||(p.splice(o,1),c.selector&&p.delegateCount--,f.remove&&f.remove.call(e,c));a&&!p.length&&(f.teardown&&!1!==f.teardown.call(e,h,v.handle)||k.removeEvent(e,d,v.handle),delete u[d])}else for(d in u)k.event.remove(e,d+t[l],n,r,!0);k.isEmptyObject(u)&&Q.remove(e,"handle events")}},dispatch:function(e){var t,n,r,i,o,a,s=k.event.fix(e),u=new Array(arguments.length),l=(Q.get(this,"events")||{})[s.type]||[],c=k.event.special[s.type]||{};for(u[0]=s,t=1;t\x20\t\r\n\f]*)[^>]*)\/>/gi,qe=/\s*$/g;function Oe(e,t){return A(e,"table")&&A(11!==t.nodeType?t:t.firstChild,"tr")&&k(e).children("tbody")[0]||e}function Pe(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function Re(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Me(e,t){var n,r,i,o,a,s,u,l;if(1===t.nodeType){if(Q.hasData(e)&&(o=Q.access(e),a=Q.set(t,o),l=o.events))for(i in delete a.handle,a.events={},l)for(n=0,r=l[i].length;n")},clone:function(e,t,n){var r,i,o,a,s,u,l,c=e.cloneNode(!0),f=oe(e);if(!(y.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||k.isXMLDoc(e)))for(a=ve(c),r=0,i=(o=ve(e)).length;r").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),E.head.appendChild(r[0])},abort:function(){i&&i()}}});var Vt,Gt=[],Yt=/(=)\?(?=&|$)|\?\?/;k.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Gt.pop()||k.expando+"_"+kt++;return this[e]=!0,e}}),k.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Yt.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Yt.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=m(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Yt,"$1"+r):!1!==e.jsonp&&(e.url+=(St.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||k.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=C[r],C[r]=function(){o=arguments},n.always(function(){void 0===i?k(C).removeProp(r):C[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,Gt.push(r)),o&&m(i)&&i(o[0]),o=i=void 0}),"script"}),y.createHTMLDocument=((Vt=E.implementation.createHTMLDocument("").body).innerHTML="
    ",2===Vt.childNodes.length),k.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(y.createHTMLDocument?((r=(t=E.implementation.createHTMLDocument("")).createElement("base")).href=E.location.href,t.head.appendChild(r)):t=E),o=!n&&[],(i=D.exec(e))?[t.createElement(i[1])]:(i=we([e],t,o),o&&o.length&&k(o).remove(),k.merge([],i.childNodes)));var r,i,o},k.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1").append(k.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},k.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){k.fn[t]=function(e){return this.on(t,e)}}),k.expr.pseudos.animated=function(t){return k.grep(k.timers,function(e){return t===e.elem}).length},k.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=k.css(e,"position"),c=k(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=k.css(e,"top"),u=k.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),m(t)&&(t=t.call(e,n,k.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):c.css(f)}},k.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){k.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===k.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===k.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=k(e).offset()).top+=k.css(e,"borderTopWidth",!0),i.left+=k.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-k.css(r,"marginTop",!0),left:t.left-i.left-k.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===k.css(e,"position"))e=e.offsetParent;return e||ie})}}),k.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;k.fn[t]=function(e){return _(this,function(e,t,n){var r;if(x(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),k.each(["top","left"],function(e,n){k.cssHooks[n]=ze(y.pixelPosition,function(e,t){if(t)return t=_e(e,n),$e.test(t)?k(e).position()[n]+"px":t})}),k.each({Height:"height",Width:"width"},function(a,s){k.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){k.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return _(this,function(e,t,n){var r;return x(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?k.css(e,t,i):k.style(e,t,n,i)},s,n?e:void 0,n)}})}),k.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){k.fn[n]=function(e,t){return 0n?-1:n>t?1:n>=t?0:NaN}function r(n){return null===n?NaN:+n}function i(n){return!isNaN(n)}function u(n){return{left:function(t,e,r,i){for(arguments.length<3&&(r=0),arguments.length<4&&(i=t.length);i>r;){var u=r+i>>>1;n(t[u],e)<0?r=u+1:i=u}return r},right:function(t,e,r,i){for(arguments.length<3&&(r=0),arguments.length<4&&(i=t.length);i>r;){var u=r+i>>>1;n(t[u],e)>0?i=u:r=u+1}return r}}}function o(n){return n.length}function a(n){for(var t=1;n*t%1;)t*=10;return t}function l(n,t){for(var e in t)Object.defineProperty(n.prototype,e,{value:t[e],enumerable:!1})}function c(){this._=Object.create(null)}function f(n){return(n+="")===bo||n[0]===_o?_o+n:n}function s(n){return(n+="")[0]===_o?n.slice(1):n}function h(n){return f(n)in this._}function p(n){return(n=f(n))in this._&&delete this._[n]}function g(){var n=[];for(var t in this._)n.push(s(t));return n}function v(){var n=0;for(var t in this._)++n;return n}function d(){for(var n in this._)return!1;return!0}function y(){this._=Object.create(null)}function m(n){return n}function M(n,t,e){return function(){var r=e.apply(t,arguments);return r===t?n:r}}function x(n,t){if(t in n)return t;t=t.charAt(0).toUpperCase()+t.slice(1);for(var e=0,r=wo.length;r>e;++e){var i=wo[e]+t;if(i in n)return i}}function b(){}function _(){}function w(n){function t(){for(var t,r=e,i=-1,u=r.length;++ie;e++)for(var i,u=n[e],o=0,a=u.length;a>o;o++)(i=u[o])&&t(i,o,e);return n}function Z(n){return ko(n,qo),n}function V(n){var t,e;return function(r,i,u){var o,a=n[u].update,l=a.length;for(u!=e&&(e=u,t=0),i>=t&&(t=i+1);!(o=a[t])&&++t0&&(n=n.slice(0,a));var c=To.get(n);return c&&(n=c,l=B),a?t?i:r:t?b:u}function $(n,t){return function(e){var r=ao.event;ao.event=e,t[0]=this.__data__;try{n.apply(this,t)}finally{ao.event=r}}}function B(n,t){var e=$(n,t);return function(n){var t=this,r=n.relatedTarget;r&&(r===t||8&r.compareDocumentPosition(t))||e.call(t,n)}}function W(e){var r=".dragsuppress-"+ ++Do,i="click"+r,u=ao.select(t(e)).on("touchmove"+r,S).on("dragstart"+r,S).on("selectstart"+r,S);if(null==Ro&&(Ro="onselectstart"in e?!1:x(e.style,"userSelect")),Ro){var o=n(e).style,a=o[Ro];o[Ro]="none"}return function(n){if(u.on(r,null),Ro&&(o[Ro]=a),n){var t=function(){u.on(i,null)};u.on(i,function(){S(),t()},!0),setTimeout(t,0)}}}function J(n,e){e.changedTouches&&(e=e.changedTouches[0]);var r=n.ownerSVGElement||n;if(r.createSVGPoint){var i=r.createSVGPoint();if(0>Po){var u=t(n);if(u.scrollX||u.scrollY){r=ao.select("body").append("svg").style({position:"absolute",top:0,left:0,margin:0,padding:0,border:"none"},"important");var o=r[0][0].getScreenCTM();Po=!(o.f||o.e),r.remove()}}return Po?(i.x=e.pageX,i.y=e.pageY):(i.x=e.clientX,i.y=e.clientY),i=i.matrixTransform(n.getScreenCTM().inverse()),[i.x,i.y]}var a=n.getBoundingClientRect();return[e.clientX-a.left-n.clientLeft,e.clientY-a.top-n.clientTop]}function G(){return ao.event.changedTouches[0].identifier}function K(n){return n>0?1:0>n?-1:0}function Q(n,t,e){return(t[0]-n[0])*(e[1]-n[1])-(t[1]-n[1])*(e[0]-n[0])}function nn(n){return n>1?0:-1>n?Fo:Math.acos(n)}function tn(n){return n>1?Io:-1>n?-Io:Math.asin(n)}function en(n){return((n=Math.exp(n))-1/n)/2}function rn(n){return((n=Math.exp(n))+1/n)/2}function un(n){return((n=Math.exp(2*n))-1)/(n+1)}function on(n){return(n=Math.sin(n/2))*n}function an(){}function ln(n,t,e){return this instanceof ln?(this.h=+n,this.s=+t,void(this.l=+e)):arguments.length<2?n instanceof ln?new ln(n.h,n.s,n.l):_n(""+n,wn,ln):new ln(n,t,e)}function cn(n,t,e){function r(n){return n>360?n-=360:0>n&&(n+=360),60>n?u+(o-u)*n/60:180>n?o:240>n?u+(o-u)*(240-n)/60:u}function i(n){return Math.round(255*r(n))}var u,o;return n=isNaN(n)?0:(n%=360)<0?n+360:n,t=isNaN(t)?0:0>t?0:t>1?1:t,e=0>e?0:e>1?1:e,o=.5>=e?e*(1+t):e+t-e*t,u=2*e-o,new mn(i(n+120),i(n),i(n-120))}function fn(n,t,e){return this instanceof fn?(this.h=+n,this.c=+t,void(this.l=+e)):arguments.length<2?n instanceof fn?new fn(n.h,n.c,n.l):n instanceof hn?gn(n.l,n.a,n.b):gn((n=Sn((n=ao.rgb(n)).r,n.g,n.b)).l,n.a,n.b):new fn(n,t,e)}function sn(n,t,e){return isNaN(n)&&(n=0),isNaN(t)&&(t=0),new hn(e,Math.cos(n*=Yo)*t,Math.sin(n)*t)}function hn(n,t,e){return this instanceof hn?(this.l=+n,this.a=+t,void(this.b=+e)):arguments.length<2?n instanceof hn?new hn(n.l,n.a,n.b):n instanceof fn?sn(n.h,n.c,n.l):Sn((n=mn(n)).r,n.g,n.b):new hn(n,t,e)}function pn(n,t,e){var r=(n+16)/116,i=r+t/500,u=r-e/200;return i=vn(i)*na,r=vn(r)*ta,u=vn(u)*ea,new mn(yn(3.2404542*i-1.5371385*r-.4985314*u),yn(-.969266*i+1.8760108*r+.041556*u),yn(.0556434*i-.2040259*r+1.0572252*u))}function gn(n,t,e){return n>0?new fn(Math.atan2(e,t)*Zo,Math.sqrt(t*t+e*e),n):new fn(NaN,NaN,n)}function vn(n){return n>.206893034?n*n*n:(n-4/29)/7.787037}function dn(n){return n>.008856?Math.pow(n,1/3):7.787037*n+4/29}function yn(n){return Math.round(255*(.00304>=n?12.92*n:1.055*Math.pow(n,1/2.4)-.055))}function mn(n,t,e){return this instanceof mn?(this.r=~~n,this.g=~~t,void(this.b=~~e)):arguments.length<2?n instanceof mn?new mn(n.r,n.g,n.b):_n(""+n,mn,cn):new mn(n,t,e)}function Mn(n){return new mn(n>>16,n>>8&255,255&n)}function xn(n){return Mn(n)+""}function bn(n){return 16>n?"0"+Math.max(0,n).toString(16):Math.min(255,n).toString(16)}function _n(n,t,e){var r,i,u,o=0,a=0,l=0;if(r=/([a-z]+)\((.*)\)/.exec(n=n.toLowerCase()))switch(i=r[2].split(","),r[1]){case"hsl":return e(parseFloat(i[0]),parseFloat(i[1])/100,parseFloat(i[2])/100);case"rgb":return t(Nn(i[0]),Nn(i[1]),Nn(i[2]))}return(u=ua.get(n))?t(u.r,u.g,u.b):(null==n||"#"!==n.charAt(0)||isNaN(u=parseInt(n.slice(1),16))||(4===n.length?(o=(3840&u)>>4,o=o>>4|o,a=240&u,a=a>>4|a,l=15&u,l=l<<4|l):7===n.length&&(o=(16711680&u)>>16,a=(65280&u)>>8,l=255&u)),t(o,a,l))}function wn(n,t,e){var r,i,u=Math.min(n/=255,t/=255,e/=255),o=Math.max(n,t,e),a=o-u,l=(o+u)/2;return a?(i=.5>l?a/(o+u):a/(2-o-u),r=n==o?(t-e)/a+(e>t?6:0):t==o?(e-n)/a+2:(n-t)/a+4,r*=60):(r=NaN,i=l>0&&1>l?0:r),new ln(r,i,l)}function Sn(n,t,e){n=kn(n),t=kn(t),e=kn(e);var r=dn((.4124564*n+.3575761*t+.1804375*e)/na),i=dn((.2126729*n+.7151522*t+.072175*e)/ta),u=dn((.0193339*n+.119192*t+.9503041*e)/ea);return hn(116*i-16,500*(r-i),200*(i-u))}function kn(n){return(n/=255)<=.04045?n/12.92:Math.pow((n+.055)/1.055,2.4)}function Nn(n){var t=parseFloat(n);return"%"===n.charAt(n.length-1)?Math.round(2.55*t):t}function En(n){return"function"==typeof n?n:function(){return n}}function An(n){return function(t,e,r){return 2===arguments.length&&"function"==typeof e&&(r=e,e=null),Cn(t,e,n,r)}}function Cn(n,t,e,r){function i(){var n,t=l.status;if(!t&&Ln(l)||t>=200&&300>t||304===t){try{n=e.call(u,l)}catch(r){return void o.error.call(u,r)}o.load.call(u,n)}else o.error.call(u,l)}var u={},o=ao.dispatch("beforesend","progress","load","error"),a={},l=new XMLHttpRequest,c=null;return!this.XDomainRequest||"withCredentials"in l||!/^(http(s)?:)?\/\//.test(n)||(l=new XDomainRequest),"onload"in l?l.onload=l.onerror=i:l.onreadystatechange=function(){l.readyState>3&&i()},l.onprogress=function(n){var t=ao.event;ao.event=n;try{o.progress.call(u,l)}finally{ao.event=t}},u.header=function(n,t){return n=(n+"").toLowerCase(),arguments.length<2?a[n]:(null==t?delete a[n]:a[n]=t+"",u)},u.mimeType=function(n){return arguments.length?(t=null==n?null:n+"",u):t},u.responseType=function(n){return arguments.length?(c=n,u):c},u.response=function(n){return e=n,u},["get","post"].forEach(function(n){u[n]=function(){return u.send.apply(u,[n].concat(co(arguments)))}}),u.send=function(e,r,i){if(2===arguments.length&&"function"==typeof r&&(i=r,r=null),l.open(e,n,!0),null==t||"accept"in a||(a.accept=t+",*/*"),l.setRequestHeader)for(var f in a)l.setRequestHeader(f,a[f]);return null!=t&&l.overrideMimeType&&l.overrideMimeType(t),null!=c&&(l.responseType=c),null!=i&&u.on("error",i).on("load",function(n){i(null,n)}),o.beforesend.call(u,l),l.send(null==r?null:r),u},u.abort=function(){return l.abort(),u},ao.rebind(u,o,"on"),null==r?u:u.get(zn(r))}function zn(n){return 1===n.length?function(t,e){n(null==t?e:null)}:n}function Ln(n){var t=n.responseType;return t&&"text"!==t?n.response:n.responseText}function qn(n,t,e){var r=arguments.length;2>r&&(t=0),3>r&&(e=Date.now());var i=e+t,u={c:n,t:i,n:null};return aa?aa.n=u:oa=u,aa=u,la||(ca=clearTimeout(ca),la=1,fa(Tn)),u}function Tn(){var n=Rn(),t=Dn()-n;t>24?(isFinite(t)&&(clearTimeout(ca),ca=setTimeout(Tn,t)),la=0):(la=1,fa(Tn))}function Rn(){for(var n=Date.now(),t=oa;t;)n>=t.t&&t.c(n-t.t)&&(t.c=null),t=t.n;return n}function Dn(){for(var n,t=oa,e=1/0;t;)t.c?(t.t8?function(n){return n/e}:function(n){return n*e},symbol:n}}function jn(n){var t=n.decimal,e=n.thousands,r=n.grouping,i=n.currency,u=r&&e?function(n,t){for(var i=n.length,u=[],o=0,a=r[0],l=0;i>0&&a>0&&(l+a+1>t&&(a=Math.max(1,t-l)),u.push(n.substring(i-=a,i+a)),!((l+=a+1)>t));)a=r[o=(o+1)%r.length];return u.reverse().join(e)}:m;return function(n){var e=ha.exec(n),r=e[1]||" ",o=e[2]||">",a=e[3]||"-",l=e[4]||"",c=e[5],f=+e[6],s=e[7],h=e[8],p=e[9],g=1,v="",d="",y=!1,m=!0;switch(h&&(h=+h.substring(1)),(c||"0"===r&&"="===o)&&(c=r="0",o="="),p){case"n":s=!0,p="g";break;case"%":g=100,d="%",p="f";break;case"p":g=100,d="%",p="r";break;case"b":case"o":case"x":case"X":"#"===l&&(v="0"+p.toLowerCase());case"c":m=!1;case"d":y=!0,h=0;break;case"s":g=-1,p="r"}"$"===l&&(v=i[0],d=i[1]),"r"!=p||h||(p="g"),null!=h&&("g"==p?h=Math.max(1,Math.min(21,h)):"e"!=p&&"f"!=p||(h=Math.max(0,Math.min(20,h)))),p=pa.get(p)||Fn;var M=c&&s;return function(n){var e=d;if(y&&n%1)return"";var i=0>n||0===n&&0>1/n?(n=-n,"-"):"-"===a?"":a;if(0>g){var l=ao.formatPrefix(n,h);n=l.scale(n),e=l.symbol+d}else n*=g;n=p(n,h);var x,b,_=n.lastIndexOf(".");if(0>_){var w=m?n.lastIndexOf("e"):-1;0>w?(x=n,b=""):(x=n.substring(0,w),b=n.substring(w))}else x=n.substring(0,_),b=t+n.substring(_+1);!c&&s&&(x=u(x,1/0));var S=v.length+x.length+b.length+(M?0:i.length),k=f>S?new Array(S=f-S+1).join(r):"";return M&&(x=u(k+x,k.length?f-b.length:1/0)),i+=v,n=x+b,("<"===o?i+n+k:">"===o?k+i+n:"^"===o?k.substring(0,S>>=1)+i+n+k.substring(S):i+(M?n:k+n))+e}}}function Fn(n){return n+""}function Hn(){this._=new Date(arguments.length>1?Date.UTC.apply(this,arguments):arguments[0])}function On(n,t,e){function r(t){var e=n(t),r=u(e,1);return r-t>t-e?e:r}function i(e){return t(e=n(new va(e-1)),1),e}function u(n,e){return t(n=new va(+n),e),n}function o(n,r,u){var o=i(n),a=[];if(u>1)for(;r>o;)e(o)%u||a.push(new Date(+o)),t(o,1);else for(;r>o;)a.push(new Date(+o)),t(o,1);return a}function a(n,t,e){try{va=Hn;var r=new Hn;return r._=n,o(r,t,e)}finally{va=Date}}n.floor=n,n.round=r,n.ceil=i,n.offset=u,n.range=o;var l=n.utc=In(n);return l.floor=l,l.round=In(r),l.ceil=In(i),l.offset=In(u),l.range=a,n}function In(n){return function(t,e){try{va=Hn;var r=new Hn;return r._=t,n(r,e)._}finally{va=Date}}}function Yn(n){function t(n){function t(t){for(var e,i,u,o=[],a=-1,l=0;++aa;){if(r>=c)return-1;if(i=t.charCodeAt(a++),37===i){if(o=t.charAt(a++),u=C[o in ya?t.charAt(a++):o],!u||(r=u(n,e,r))<0)return-1}else if(i!=e.charCodeAt(r++))return-1}return r}function r(n,t,e){_.lastIndex=0;var r=_.exec(t.slice(e));return r?(n.w=w.get(r[0].toLowerCase()),e+r[0].length):-1}function i(n,t,e){x.lastIndex=0;var r=x.exec(t.slice(e));return r?(n.w=b.get(r[0].toLowerCase()),e+r[0].length):-1}function u(n,t,e){N.lastIndex=0;var r=N.exec(t.slice(e));return r?(n.m=E.get(r[0].toLowerCase()),e+r[0].length):-1}function o(n,t,e){S.lastIndex=0;var r=S.exec(t.slice(e));return r?(n.m=k.get(r[0].toLowerCase()),e+r[0].length):-1}function a(n,t,r){return e(n,A.c.toString(),t,r)}function l(n,t,r){return e(n,A.x.toString(),t,r)}function c(n,t,r){return e(n,A.X.toString(),t,r)}function f(n,t,e){var r=M.get(t.slice(e,e+=2).toLowerCase());return null==r?-1:(n.p=r,e)}var s=n.dateTime,h=n.date,p=n.time,g=n.periods,v=n.days,d=n.shortDays,y=n.months,m=n.shortMonths;t.utc=function(n){function e(n){try{va=Hn;var t=new va;return t._=n,r(t)}finally{va=Date}}var r=t(n);return e.parse=function(n){try{va=Hn;var t=r.parse(n);return t&&t._}finally{va=Date}},e.toString=r.toString,e},t.multi=t.utc.multi=ct;var M=ao.map(),x=Vn(v),b=Xn(v),_=Vn(d),w=Xn(d),S=Vn(y),k=Xn(y),N=Vn(m),E=Xn(m);g.forEach(function(n,t){M.set(n.toLowerCase(),t)});var A={a:function(n){return d[n.getDay()]},A:function(n){return v[n.getDay()]},b:function(n){return m[n.getMonth()]},B:function(n){return y[n.getMonth()]},c:t(s),d:function(n,t){return Zn(n.getDate(),t,2)},e:function(n,t){return Zn(n.getDate(),t,2)},H:function(n,t){return Zn(n.getHours(),t,2)},I:function(n,t){return Zn(n.getHours()%12||12,t,2)},j:function(n,t){return Zn(1+ga.dayOfYear(n),t,3)},L:function(n,t){return Zn(n.getMilliseconds(),t,3)},m:function(n,t){return Zn(n.getMonth()+1,t,2)},M:function(n,t){return Zn(n.getMinutes(),t,2)},p:function(n){return g[+(n.getHours()>=12)]},S:function(n,t){return Zn(n.getSeconds(),t,2)},U:function(n,t){return Zn(ga.sundayOfYear(n),t,2)},w:function(n){return n.getDay()},W:function(n,t){return Zn(ga.mondayOfYear(n),t,2)},x:t(h),X:t(p),y:function(n,t){return Zn(n.getFullYear()%100,t,2)},Y:function(n,t){return Zn(n.getFullYear()%1e4,t,4)},Z:at,"%":function(){return"%"}},C={a:r,A:i,b:u,B:o,c:a,d:tt,e:tt,H:rt,I:rt,j:et,L:ot,m:nt,M:it,p:f,S:ut,U:Bn,w:$n,W:Wn,x:l,X:c,y:Gn,Y:Jn,Z:Kn,"%":lt};return t}function Zn(n,t,e){var r=0>n?"-":"",i=(r?-n:n)+"",u=i.length;return r+(e>u?new Array(e-u+1).join(t)+i:i)}function Vn(n){return new RegExp("^(?:"+n.map(ao.requote).join("|")+")","i")}function Xn(n){for(var t=new c,e=-1,r=n.length;++e68?1900:2e3)}function nt(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e,e+2));return r?(n.m=r[0]-1,e+r[0].length):-1}function tt(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e,e+2));return r?(n.d=+r[0],e+r[0].length):-1}function et(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e,e+3));return r?(n.j=+r[0],e+r[0].length):-1}function rt(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e,e+2));return r?(n.H=+r[0],e+r[0].length):-1}function it(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e,e+2));return r?(n.M=+r[0],e+r[0].length):-1}function ut(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e,e+2));return r?(n.S=+r[0],e+r[0].length):-1}function ot(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e,e+3));return r?(n.L=+r[0],e+r[0].length):-1}function at(n){var t=n.getTimezoneOffset(),e=t>0?"-":"+",r=xo(t)/60|0,i=xo(t)%60;return e+Zn(r,"0",2)+Zn(i,"0",2)}function lt(n,t,e){Ma.lastIndex=0;var r=Ma.exec(t.slice(e,e+1));return r?e+r[0].length:-1}function ct(n){for(var t=n.length,e=-1;++e=0?1:-1,a=o*e,l=Math.cos(t),c=Math.sin(t),f=u*c,s=i*l+f*Math.cos(a),h=f*o*Math.sin(a);ka.add(Math.atan2(h,s)),r=n,i=l,u=c}var t,e,r,i,u;Na.point=function(o,a){Na.point=n,r=(t=o)*Yo,i=Math.cos(a=(e=a)*Yo/2+Fo/4),u=Math.sin(a)},Na.lineEnd=function(){n(t,e)}}function dt(n){var t=n[0],e=n[1],r=Math.cos(e);return[r*Math.cos(t),r*Math.sin(t),Math.sin(e)]}function yt(n,t){return n[0]*t[0]+n[1]*t[1]+n[2]*t[2]}function mt(n,t){return[n[1]*t[2]-n[2]*t[1],n[2]*t[0]-n[0]*t[2],n[0]*t[1]-n[1]*t[0]]}function Mt(n,t){n[0]+=t[0],n[1]+=t[1],n[2]+=t[2]}function xt(n,t){return[n[0]*t,n[1]*t,n[2]*t]}function bt(n){var t=Math.sqrt(n[0]*n[0]+n[1]*n[1]+n[2]*n[2]);n[0]/=t,n[1]/=t,n[2]/=t}function _t(n){return[Math.atan2(n[1],n[0]),tn(n[2])]}function wt(n,t){return xo(n[0]-t[0])a;++a)i.point((e=n[a])[0],e[1]);return void i.lineEnd()}var l=new Tt(e,n,null,!0),c=new Tt(e,null,l,!1);l.o=c,u.push(l),o.push(c),l=new Tt(r,n,null,!1),c=new Tt(r,null,l,!0),l.o=c,u.push(l),o.push(c)}}),o.sort(t),qt(u),qt(o),u.length){for(var a=0,l=e,c=o.length;c>a;++a)o[a].e=l=!l;for(var f,s,h=u[0];;){for(var p=h,g=!0;p.v;)if((p=p.n)===h)return;f=p.z,i.lineStart();do{if(p.v=p.o.v=!0,p.e){if(g)for(var a=0,c=f.length;c>a;++a)i.point((s=f[a])[0],s[1]);else r(p.x,p.n.x,1,i);p=p.n}else{if(g){f=p.p.z;for(var a=f.length-1;a>=0;--a)i.point((s=f[a])[0],s[1])}else r(p.x,p.p.x,-1,i);p=p.p}p=p.o,f=p.z,g=!g}while(!p.v);i.lineEnd()}}}function qt(n){if(t=n.length){for(var t,e,r=0,i=n[0];++r0){for(b||(u.polygonStart(),b=!0),u.lineStart();++o1&&2&t&&e.push(e.pop().concat(e.shift())),p.push(e.filter(Dt))}var p,g,v,d=t(u),y=i.invert(r[0],r[1]),m={point:o,lineStart:l,lineEnd:c,polygonStart:function(){m.point=f,m.lineStart=s,m.lineEnd=h,p=[],g=[]},polygonEnd:function(){m.point=o,m.lineStart=l,m.lineEnd=c,p=ao.merge(p);var n=Ot(y,g);p.length?(b||(u.polygonStart(),b=!0),Lt(p,Ut,n,e,u)):n&&(b||(u.polygonStart(),b=!0),u.lineStart(),e(null,null,1,u),u.lineEnd()),b&&(u.polygonEnd(),b=!1),p=g=null},sphere:function(){u.polygonStart(),u.lineStart(),e(null,null,1,u),u.lineEnd(),u.polygonEnd()}},M=Pt(),x=t(M),b=!1;return m}}function Dt(n){return n.length>1}function Pt(){var n,t=[];return{lineStart:function(){t.push(n=[])},point:function(t,e){n.push([t,e])},lineEnd:b,buffer:function(){var e=t;return t=[],n=null,e},rejoin:function(){t.length>1&&t.push(t.pop().concat(t.shift()))}}}function Ut(n,t){return((n=n.x)[0]<0?n[1]-Io-Uo:Io-n[1])-((t=t.x)[0]<0?t[1]-Io-Uo:Io-t[1])}function jt(n){var t,e=NaN,r=NaN,i=NaN;return{lineStart:function(){n.lineStart(),t=1},point:function(u,o){var a=u>0?Fo:-Fo,l=xo(u-e);xo(l-Fo)0?Io:-Io),n.point(i,r),n.lineEnd(),n.lineStart(),n.point(a,r),n.point(u,r),t=0):i!==a&&l>=Fo&&(xo(e-i)Uo?Math.atan((Math.sin(t)*(u=Math.cos(r))*Math.sin(e)-Math.sin(r)*(i=Math.cos(t))*Math.sin(n))/(i*u*o)):(t+r)/2}function Ht(n,t,e,r){var i;if(null==n)i=e*Io,r.point(-Fo,i),r.point(0,i),r.point(Fo,i),r.point(Fo,0),r.point(Fo,-i),r.point(0,-i),r.point(-Fo,-i),r.point(-Fo,0),r.point(-Fo,i);else if(xo(n[0]-t[0])>Uo){var u=n[0]a;++a){var c=t[a],f=c.length;if(f)for(var s=c[0],h=s[0],p=s[1]/2+Fo/4,g=Math.sin(p),v=Math.cos(p),d=1;;){d===f&&(d=0),n=c[d];var y=n[0],m=n[1]/2+Fo/4,M=Math.sin(m),x=Math.cos(m),b=y-h,_=b>=0?1:-1,w=_*b,S=w>Fo,k=g*M;if(ka.add(Math.atan2(k*_*Math.sin(w),v*x+k*Math.cos(w))),u+=S?b+_*Ho:b,S^h>=e^y>=e){var N=mt(dt(s),dt(n));bt(N);var E=mt(i,N);bt(E);var A=(S^b>=0?-1:1)*tn(E[2]);(r>A||r===A&&(N[0]||N[1]))&&(o+=S^b>=0?1:-1)}if(!d++)break;h=y,g=M,v=x,s=n}}return(-Uo>u||Uo>u&&-Uo>ka)^1&o}function It(n){function t(n,t){return Math.cos(n)*Math.cos(t)>u}function e(n){var e,u,l,c,f;return{lineStart:function(){c=l=!1,f=1},point:function(s,h){var p,g=[s,h],v=t(s,h),d=o?v?0:i(s,h):v?i(s+(0>s?Fo:-Fo),h):0;if(!e&&(c=l=v)&&n.lineStart(),v!==l&&(p=r(e,g),(wt(e,p)||wt(g,p))&&(g[0]+=Uo,g[1]+=Uo,v=t(g[0],g[1]))),v!==l)f=0,v?(n.lineStart(),p=r(g,e),n.point(p[0],p[1])):(p=r(e,g),n.point(p[0],p[1]),n.lineEnd()),e=p;else if(a&&e&&o^v){var y;d&u||!(y=r(g,e,!0))||(f=0,o?(n.lineStart(),n.point(y[0][0],y[0][1]),n.point(y[1][0],y[1][1]),n.lineEnd()):(n.point(y[1][0],y[1][1]),n.lineEnd(),n.lineStart(),n.point(y[0][0],y[0][1])))}!v||e&&wt(e,g)||n.point(g[0],g[1]),e=g,l=v,u=d},lineEnd:function(){l&&n.lineEnd(),e=null},clean:function(){return f|(c&&l)<<1}}}function r(n,t,e){var r=dt(n),i=dt(t),o=[1,0,0],a=mt(r,i),l=yt(a,a),c=a[0],f=l-c*c;if(!f)return!e&&n;var s=u*l/f,h=-u*c/f,p=mt(o,a),g=xt(o,s),v=xt(a,h);Mt(g,v);var d=p,y=yt(g,d),m=yt(d,d),M=y*y-m*(yt(g,g)-1);if(!(0>M)){var x=Math.sqrt(M),b=xt(d,(-y-x)/m);if(Mt(b,g),b=_t(b),!e)return b;var _,w=n[0],S=t[0],k=n[1],N=t[1];w>S&&(_=w,w=S,S=_);var E=S-w,A=xo(E-Fo)E;if(!A&&k>N&&(_=k,k=N,N=_),C?A?k+N>0^b[1]<(xo(b[0]-w)Fo^(w<=b[0]&&b[0]<=S)){var z=xt(d,(-y+x)/m);return Mt(z,g),[b,_t(z)]}}}function i(t,e){var r=o?n:Fo-n,i=0;return-r>t?i|=1:t>r&&(i|=2),-r>e?i|=4:e>r&&(i|=8),i}var u=Math.cos(n),o=u>0,a=xo(u)>Uo,l=ve(n,6*Yo);return Rt(t,e,l,o?[0,-n]:[-Fo,n-Fo])}function Yt(n,t,e,r){return function(i){var u,o=i.a,a=i.b,l=o.x,c=o.y,f=a.x,s=a.y,h=0,p=1,g=f-l,v=s-c;if(u=n-l,g||!(u>0)){if(u/=g,0>g){if(h>u)return;p>u&&(p=u)}else if(g>0){if(u>p)return;u>h&&(h=u)}if(u=e-l,g||!(0>u)){if(u/=g,0>g){if(u>p)return;u>h&&(h=u)}else if(g>0){if(h>u)return;p>u&&(p=u)}if(u=t-c,v||!(u>0)){if(u/=v,0>v){if(h>u)return;p>u&&(p=u)}else if(v>0){if(u>p)return;u>h&&(h=u)}if(u=r-c,v||!(0>u)){if(u/=v,0>v){if(u>p)return;u>h&&(h=u)}else if(v>0){if(h>u)return;p>u&&(p=u)}return h>0&&(i.a={x:l+h*g,y:c+h*v}),1>p&&(i.b={x:l+p*g,y:c+p*v}),i}}}}}}function Zt(n,t,e,r){function i(r,i){return xo(r[0]-n)0?0:3:xo(r[0]-e)0?2:1:xo(r[1]-t)0?1:0:i>0?3:2}function u(n,t){return o(n.x,t.x)}function o(n,t){var e=i(n,1),r=i(t,1);return e!==r?e-r:0===e?t[1]-n[1]:1===e?n[0]-t[0]:2===e?n[1]-t[1]:t[0]-n[0]}return function(a){function l(n){for(var t=0,e=d.length,r=n[1],i=0;e>i;++i)for(var u,o=1,a=d[i],l=a.length,c=a[0];l>o;++o)u=a[o],c[1]<=r?u[1]>r&&Q(c,u,n)>0&&++t:u[1]<=r&&Q(c,u,n)<0&&--t,c=u;return 0!==t}function c(u,a,l,c){var f=0,s=0;if(null==u||(f=i(u,l))!==(s=i(a,l))||o(u,a)<0^l>0){do c.point(0===f||3===f?n:e,f>1?r:t);while((f=(f+l+4)%4)!==s)}else c.point(a[0],a[1])}function f(i,u){return i>=n&&e>=i&&u>=t&&r>=u}function s(n,t){f(n,t)&&a.point(n,t)}function h(){C.point=g,d&&d.push(y=[]),S=!0,w=!1,b=_=NaN}function p(){v&&(g(m,M),x&&w&&E.rejoin(),v.push(E.buffer())),C.point=s,w&&a.lineEnd()}function g(n,t){n=Math.max(-Ha,Math.min(Ha,n)),t=Math.max(-Ha,Math.min(Ha,t));var e=f(n,t);if(d&&y.push([n,t]),S)m=n,M=t,x=e,S=!1,e&&(a.lineStart(),a.point(n,t));else if(e&&w)a.point(n,t);else{var r={a:{x:b,y:_},b:{x:n,y:t}};A(r)?(w||(a.lineStart(),a.point(r.a.x,r.a.y)),a.point(r.b.x,r.b.y),e||a.lineEnd(),k=!1):e&&(a.lineStart(),a.point(n,t),k=!1)}b=n,_=t,w=e}var v,d,y,m,M,x,b,_,w,S,k,N=a,E=Pt(),A=Yt(n,t,e,r),C={point:s,lineStart:h,lineEnd:p,polygonStart:function(){a=E,v=[],d=[],k=!0},polygonEnd:function(){a=N,v=ao.merge(v);var t=l([n,r]),e=k&&t,i=v.length;(e||i)&&(a.polygonStart(),e&&(a.lineStart(),c(null,null,1,a),a.lineEnd()),i&&Lt(v,u,t,c,a),a.polygonEnd()),v=d=y=null}};return C}}function Vt(n){var t=0,e=Fo/3,r=ae(n),i=r(t,e);return i.parallels=function(n){return arguments.length?r(t=n[0]*Fo/180,e=n[1]*Fo/180):[t/Fo*180,e/Fo*180]},i}function Xt(n,t){function e(n,t){var e=Math.sqrt(u-2*i*Math.sin(t))/i;return[e*Math.sin(n*=i),o-e*Math.cos(n)]}var r=Math.sin(n),i=(r+Math.sin(t))/2,u=1+r*(2*i-r),o=Math.sqrt(u)/i;return e.invert=function(n,t){var e=o-t;return[Math.atan2(n,e)/i,tn((u-(n*n+e*e)*i*i)/(2*i))]},e}function $t(){function n(n,t){Ia+=i*n-r*t,r=n,i=t}var t,e,r,i;$a.point=function(u,o){$a.point=n,t=r=u,e=i=o},$a.lineEnd=function(){n(t,e)}}function Bt(n,t){Ya>n&&(Ya=n),n>Va&&(Va=n),Za>t&&(Za=t),t>Xa&&(Xa=t)}function Wt(){function n(n,t){o.push("M",n,",",t,u)}function t(n,t){o.push("M",n,",",t),a.point=e}function e(n,t){o.push("L",n,",",t)}function r(){a.point=n}function i(){o.push("Z")}var u=Jt(4.5),o=[],a={point:n,lineStart:function(){a.point=t},lineEnd:r,polygonStart:function(){a.lineEnd=i},polygonEnd:function(){a.lineEnd=r,a.point=n},pointRadius:function(n){return u=Jt(n),a},result:function(){if(o.length){var n=o.join("");return o=[],n}}};return a}function Jt(n){return"m0,"+n+"a"+n+","+n+" 0 1,1 0,"+-2*n+"a"+n+","+n+" 0 1,1 0,"+2*n+"z"}function Gt(n,t){Ca+=n,za+=t,++La}function Kt(){function n(n,r){var i=n-t,u=r-e,o=Math.sqrt(i*i+u*u);qa+=o*(t+n)/2,Ta+=o*(e+r)/2,Ra+=o,Gt(t=n,e=r)}var t,e;Wa.point=function(r,i){Wa.point=n,Gt(t=r,e=i)}}function Qt(){Wa.point=Gt}function ne(){function n(n,t){var e=n-r,u=t-i,o=Math.sqrt(e*e+u*u);qa+=o*(r+n)/2,Ta+=o*(i+t)/2,Ra+=o,o=i*n-r*t,Da+=o*(r+n),Pa+=o*(i+t),Ua+=3*o,Gt(r=n,i=t)}var t,e,r,i;Wa.point=function(u,o){Wa.point=n,Gt(t=r=u,e=i=o)},Wa.lineEnd=function(){n(t,e)}}function te(n){function t(t,e){n.moveTo(t+o,e),n.arc(t,e,o,0,Ho)}function e(t,e){n.moveTo(t,e),a.point=r}function r(t,e){n.lineTo(t,e)}function i(){a.point=t}function u(){n.closePath()}var o=4.5,a={point:t,lineStart:function(){a.point=e},lineEnd:i,polygonStart:function(){a.lineEnd=u},polygonEnd:function(){a.lineEnd=i,a.point=t},pointRadius:function(n){return o=n,a},result:b};return a}function ee(n){function t(n){return(a?r:e)(n)}function e(t){return ue(t,function(e,r){e=n(e,r),t.point(e[0],e[1])})}function r(t){function e(e,r){e=n(e,r),t.point(e[0],e[1])}function r(){M=NaN,S.point=u,t.lineStart()}function u(e,r){var u=dt([e,r]),o=n(e,r);i(M,x,m,b,_,w,M=o[0],x=o[1],m=e,b=u[0],_=u[1],w=u[2],a,t),t.point(M,x)}function o(){S.point=e,t.lineEnd()}function l(){ r(),S.point=c,S.lineEnd=f}function c(n,t){u(s=n,h=t),p=M,g=x,v=b,d=_,y=w,S.point=u}function f(){i(M,x,m,b,_,w,p,g,s,v,d,y,a,t),S.lineEnd=o,o()}var s,h,p,g,v,d,y,m,M,x,b,_,w,S={point:e,lineStart:r,lineEnd:o,polygonStart:function(){t.polygonStart(),S.lineStart=l},polygonEnd:function(){t.polygonEnd(),S.lineStart=r}};return S}function i(t,e,r,a,l,c,f,s,h,p,g,v,d,y){var m=f-t,M=s-e,x=m*m+M*M;if(x>4*u&&d--){var b=a+p,_=l+g,w=c+v,S=Math.sqrt(b*b+_*_+w*w),k=Math.asin(w/=S),N=xo(xo(w)-1)u||xo((m*z+M*L)/x-.5)>.3||o>a*p+l*g+c*v)&&(i(t,e,r,a,l,c,A,C,N,b/=S,_/=S,w,d,y),y.point(A,C),i(A,C,N,b,_,w,f,s,h,p,g,v,d,y))}}var u=.5,o=Math.cos(30*Yo),a=16;return t.precision=function(n){return arguments.length?(a=(u=n*n)>0&&16,t):Math.sqrt(u)},t}function re(n){var t=ee(function(t,e){return n([t*Zo,e*Zo])});return function(n){return le(t(n))}}function ie(n){this.stream=n}function ue(n,t){return{point:t,sphere:function(){n.sphere()},lineStart:function(){n.lineStart()},lineEnd:function(){n.lineEnd()},polygonStart:function(){n.polygonStart()},polygonEnd:function(){n.polygonEnd()}}}function oe(n){return ae(function(){return n})()}function ae(n){function t(n){return n=a(n[0]*Yo,n[1]*Yo),[n[0]*h+l,c-n[1]*h]}function e(n){return n=a.invert((n[0]-l)/h,(c-n[1])/h),n&&[n[0]*Zo,n[1]*Zo]}function r(){a=Ct(o=se(y,M,x),u);var n=u(v,d);return l=p-n[0]*h,c=g+n[1]*h,i()}function i(){return f&&(f.valid=!1,f=null),t}var u,o,a,l,c,f,s=ee(function(n,t){return n=u(n,t),[n[0]*h+l,c-n[1]*h]}),h=150,p=480,g=250,v=0,d=0,y=0,M=0,x=0,b=Fa,_=m,w=null,S=null;return t.stream=function(n){return f&&(f.valid=!1),f=le(b(o,s(_(n)))),f.valid=!0,f},t.clipAngle=function(n){return arguments.length?(b=null==n?(w=n,Fa):It((w=+n)*Yo),i()):w},t.clipExtent=function(n){return arguments.length?(S=n,_=n?Zt(n[0][0],n[0][1],n[1][0],n[1][1]):m,i()):S},t.scale=function(n){return arguments.length?(h=+n,r()):h},t.translate=function(n){return arguments.length?(p=+n[0],g=+n[1],r()):[p,g]},t.center=function(n){return arguments.length?(v=n[0]%360*Yo,d=n[1]%360*Yo,r()):[v*Zo,d*Zo]},t.rotate=function(n){return arguments.length?(y=n[0]%360*Yo,M=n[1]%360*Yo,x=n.length>2?n[2]%360*Yo:0,r()):[y*Zo,M*Zo,x*Zo]},ao.rebind(t,s,"precision"),function(){return u=n.apply(this,arguments),t.invert=u.invert&&e,r()}}function le(n){return ue(n,function(t,e){n.point(t*Yo,e*Yo)})}function ce(n,t){return[n,t]}function fe(n,t){return[n>Fo?n-Ho:-Fo>n?n+Ho:n,t]}function se(n,t,e){return n?t||e?Ct(pe(n),ge(t,e)):pe(n):t||e?ge(t,e):fe}function he(n){return function(t,e){return t+=n,[t>Fo?t-Ho:-Fo>t?t+Ho:t,e]}}function pe(n){var t=he(n);return t.invert=he(-n),t}function ge(n,t){function e(n,t){var e=Math.cos(t),a=Math.cos(n)*e,l=Math.sin(n)*e,c=Math.sin(t),f=c*r+a*i;return[Math.atan2(l*u-f*o,a*r-c*i),tn(f*u+l*o)]}var r=Math.cos(n),i=Math.sin(n),u=Math.cos(t),o=Math.sin(t);return e.invert=function(n,t){var e=Math.cos(t),a=Math.cos(n)*e,l=Math.sin(n)*e,c=Math.sin(t),f=c*u-l*o;return[Math.atan2(l*u+c*o,a*r+f*i),tn(f*r-a*i)]},e}function ve(n,t){var e=Math.cos(n),r=Math.sin(n);return function(i,u,o,a){var l=o*t;null!=i?(i=de(e,i),u=de(e,u),(o>0?u>i:i>u)&&(i+=o*Ho)):(i=n+o*Ho,u=n-.5*l);for(var c,f=i;o>0?f>u:u>f;f-=l)a.point((c=_t([e,-r*Math.cos(f),-r*Math.sin(f)]))[0],c[1])}}function de(n,t){var e=dt(t);e[0]-=n,bt(e);var r=nn(-e[1]);return((-e[2]<0?-r:r)+2*Math.PI-Uo)%(2*Math.PI)}function ye(n,t,e){var r=ao.range(n,t-Uo,e).concat(t);return function(n){return r.map(function(t){return[n,t]})}}function me(n,t,e){var r=ao.range(n,t-Uo,e).concat(t);return function(n){return r.map(function(t){return[t,n]})}}function Me(n){return n.source}function xe(n){return n.target}function be(n,t,e,r){var i=Math.cos(t),u=Math.sin(t),o=Math.cos(r),a=Math.sin(r),l=i*Math.cos(n),c=i*Math.sin(n),f=o*Math.cos(e),s=o*Math.sin(e),h=2*Math.asin(Math.sqrt(on(r-t)+i*o*on(e-n))),p=1/Math.sin(h),g=h?function(n){var t=Math.sin(n*=h)*p,e=Math.sin(h-n)*p,r=e*l+t*f,i=e*c+t*s,o=e*u+t*a;return[Math.atan2(i,r)*Zo,Math.atan2(o,Math.sqrt(r*r+i*i))*Zo]}:function(){return[n*Zo,t*Zo]};return g.distance=h,g}function _e(){function n(n,i){var u=Math.sin(i*=Yo),o=Math.cos(i),a=xo((n*=Yo)-t),l=Math.cos(a);Ja+=Math.atan2(Math.sqrt((a=o*Math.sin(a))*a+(a=r*u-e*o*l)*a),e*u+r*o*l),t=n,e=u,r=o}var t,e,r;Ga.point=function(i,u){t=i*Yo,e=Math.sin(u*=Yo),r=Math.cos(u),Ga.point=n},Ga.lineEnd=function(){Ga.point=Ga.lineEnd=b}}function we(n,t){function e(t,e){var r=Math.cos(t),i=Math.cos(e),u=n(r*i);return[u*i*Math.sin(t),u*Math.sin(e)]}return e.invert=function(n,e){var r=Math.sqrt(n*n+e*e),i=t(r),u=Math.sin(i),o=Math.cos(i);return[Math.atan2(n*u,r*o),Math.asin(r&&e*u/r)]},e}function Se(n,t){function e(n,t){o>0?-Io+Uo>t&&(t=-Io+Uo):t>Io-Uo&&(t=Io-Uo);var e=o/Math.pow(i(t),u);return[e*Math.sin(u*n),o-e*Math.cos(u*n)]}var r=Math.cos(n),i=function(n){return Math.tan(Fo/4+n/2)},u=n===t?Math.sin(n):Math.log(r/Math.cos(t))/Math.log(i(t)/i(n)),o=r*Math.pow(i(n),u)/u;return u?(e.invert=function(n,t){var e=o-t,r=K(u)*Math.sqrt(n*n+e*e);return[Math.atan2(n,e)/u,2*Math.atan(Math.pow(o/r,1/u))-Io]},e):Ne}function ke(n,t){function e(n,t){var e=u-t;return[e*Math.sin(i*n),u-e*Math.cos(i*n)]}var r=Math.cos(n),i=n===t?Math.sin(n):(r-Math.cos(t))/(t-n),u=r/i+n;return xo(i)i;i++){for(;r>1&&Q(n[e[r-2]],n[e[r-1]],n[i])<=0;)--r;e[r++]=i}return e.slice(0,r)}function qe(n,t){return n[0]-t[0]||n[1]-t[1]}function Te(n,t,e){return(e[0]-t[0])*(n[1]-t[1])<(e[1]-t[1])*(n[0]-t[0])}function Re(n,t,e,r){var i=n[0],u=e[0],o=t[0]-i,a=r[0]-u,l=n[1],c=e[1],f=t[1]-l,s=r[1]-c,h=(a*(l-c)-s*(i-u))/(s*o-a*f);return[i+h*o,l+h*f]}function De(n){var t=n[0],e=n[n.length-1];return!(t[0]-e[0]||t[1]-e[1])}function Pe(){rr(this),this.edge=this.site=this.circle=null}function Ue(n){var t=cl.pop()||new Pe;return t.site=n,t}function je(n){Be(n),ol.remove(n),cl.push(n),rr(n)}function Fe(n){var t=n.circle,e=t.x,r=t.cy,i={x:e,y:r},u=n.P,o=n.N,a=[n];je(n);for(var l=u;l.circle&&xo(e-l.circle.x)f;++f)c=a[f],l=a[f-1],nr(c.edge,l.site,c.site,i);l=a[0],c=a[s-1],c.edge=Ke(l.site,c.site,null,i),$e(l),$e(c)}function He(n){for(var t,e,r,i,u=n.x,o=n.y,a=ol._;a;)if(r=Oe(a,o)-u,r>Uo)a=a.L;else{if(i=u-Ie(a,o),!(i>Uo)){r>-Uo?(t=a.P,e=a):i>-Uo?(t=a,e=a.N):t=e=a;break}if(!a.R){t=a;break}a=a.R}var l=Ue(n);if(ol.insert(t,l),t||e){if(t===e)return Be(t),e=Ue(t.site),ol.insert(l,e),l.edge=e.edge=Ke(t.site,l.site),$e(t),void $e(e);if(!e)return void(l.edge=Ke(t.site,l.site));Be(t),Be(e);var c=t.site,f=c.x,s=c.y,h=n.x-f,p=n.y-s,g=e.site,v=g.x-f,d=g.y-s,y=2*(h*d-p*v),m=h*h+p*p,M=v*v+d*d,x={x:(d*m-p*M)/y+f,y:(h*M-v*m)/y+s};nr(e.edge,c,g,x),l.edge=Ke(c,n,null,x),e.edge=Ke(n,g,null,x),$e(t),$e(e)}}function Oe(n,t){var e=n.site,r=e.x,i=e.y,u=i-t;if(!u)return r;var o=n.P;if(!o)return-(1/0);e=o.site;var a=e.x,l=e.y,c=l-t;if(!c)return a;var f=a-r,s=1/u-1/c,h=f/c;return s?(-h+Math.sqrt(h*h-2*s*(f*f/(-2*c)-l+c/2+i-u/2)))/s+r:(r+a)/2}function Ie(n,t){var e=n.N;if(e)return Oe(e,t);var r=n.site;return r.y===t?r.x:1/0}function Ye(n){this.site=n,this.edges=[]}function Ze(n){for(var t,e,r,i,u,o,a,l,c,f,s=n[0][0],h=n[1][0],p=n[0][1],g=n[1][1],v=ul,d=v.length;d--;)if(u=v[d],u&&u.prepare())for(a=u.edges,l=a.length,o=0;l>o;)f=a[o].end(),r=f.x,i=f.y,c=a[++o%l].start(),t=c.x,e=c.y,(xo(r-t)>Uo||xo(i-e)>Uo)&&(a.splice(o,0,new tr(Qe(u.site,f,xo(r-s)Uo?{x:s,y:xo(t-s)Uo?{x:xo(e-g)Uo?{x:h,y:xo(t-h)Uo?{x:xo(e-p)=-jo)){var p=l*l+c*c,g=f*f+s*s,v=(s*p-c*g)/h,d=(l*g-f*p)/h,s=d+a,y=fl.pop()||new Xe;y.arc=n,y.site=i,y.x=v+o,y.y=s+Math.sqrt(v*v+d*d),y.cy=s,n.circle=y;for(var m=null,M=ll._;M;)if(y.yd||d>=a)return;if(h>g){if(u){if(u.y>=c)return}else u={x:d,y:l};e={x:d,y:c}}else{if(u){if(u.yr||r>1)if(h>g){if(u){if(u.y>=c)return}else u={x:(l-i)/r,y:l};e={x:(c-i)/r,y:c}}else{if(u){if(u.yp){if(u){if(u.x>=a)return}else u={x:o,y:r*o+i};e={x:a,y:r*a+i}}else{if(u){if(u.xu||s>o||r>h||i>p)){if(g=n.point){var g,v=t-n.x,d=e-n.y,y=v*v+d*d;if(l>y){var m=Math.sqrt(l=y);r=t-m,i=e-m,u=t+m,o=e+m,a=g}}for(var M=n.nodes,x=.5*(f+h),b=.5*(s+p),_=t>=x,w=e>=b,S=w<<1|_,k=S+4;k>S;++S)if(n=M[3&S])switch(3&S){case 0:c(n,f,s,x,b);break;case 1:c(n,x,s,h,b);break;case 2:c(n,f,b,x,p);break;case 3:c(n,x,b,h,p)}}}(n,r,i,u,o),a}function vr(n,t){n=ao.rgb(n),t=ao.rgb(t);var e=n.r,r=n.g,i=n.b,u=t.r-e,o=t.g-r,a=t.b-i;return function(n){return"#"+bn(Math.round(e+u*n))+bn(Math.round(r+o*n))+bn(Math.round(i+a*n))}}function dr(n,t){var e,r={},i={};for(e in n)e in t?r[e]=Mr(n[e],t[e]):i[e]=n[e];for(e in t)e in n||(i[e]=t[e]);return function(n){for(e in r)i[e]=r[e](n);return i}}function yr(n,t){return n=+n,t=+t,function(e){return n*(1-e)+t*e}}function mr(n,t){var e,r,i,u=hl.lastIndex=pl.lastIndex=0,o=-1,a=[],l=[];for(n+="",t+="";(e=hl.exec(n))&&(r=pl.exec(t));)(i=r.index)>u&&(i=t.slice(u,i),a[o]?a[o]+=i:a[++o]=i),(e=e[0])===(r=r[0])?a[o]?a[o]+=r:a[++o]=r:(a[++o]=null,l.push({i:o,x:yr(e,r)})),u=pl.lastIndex;return ur;++r)a[(e=l[r]).i]=e.x(n);return a.join("")})}function Mr(n,t){for(var e,r=ao.interpolators.length;--r>=0&&!(e=ao.interpolators[r](n,t)););return e}function xr(n,t){var e,r=[],i=[],u=n.length,o=t.length,a=Math.min(n.length,t.length);for(e=0;a>e;++e)r.push(Mr(n[e],t[e]));for(;u>e;++e)i[e]=n[e];for(;o>e;++e)i[e]=t[e];return function(n){for(e=0;a>e;++e)i[e]=r[e](n);return i}}function br(n){return function(t){return 0>=t?0:t>=1?1:n(t)}}function _r(n){return function(t){return 1-n(1-t)}}function wr(n){return function(t){return.5*(.5>t?n(2*t):2-n(2-2*t))}}function Sr(n){return n*n}function kr(n){return n*n*n}function Nr(n){if(0>=n)return 0;if(n>=1)return 1;var t=n*n,e=t*n;return 4*(.5>n?e:3*(n-t)+e-.75)}function Er(n){return function(t){return Math.pow(t,n)}}function Ar(n){return 1-Math.cos(n*Io)}function Cr(n){return Math.pow(2,10*(n-1))}function zr(n){return 1-Math.sqrt(1-n*n)}function Lr(n,t){var e;return arguments.length<2&&(t=.45),arguments.length?e=t/Ho*Math.asin(1/n):(n=1,e=t/4),function(r){return 1+n*Math.pow(2,-10*r)*Math.sin((r-e)*Ho/t)}}function qr(n){return n||(n=1.70158),function(t){return t*t*((n+1)*t-n)}}function Tr(n){return 1/2.75>n?7.5625*n*n:2/2.75>n?7.5625*(n-=1.5/2.75)*n+.75:2.5/2.75>n?7.5625*(n-=2.25/2.75)*n+.9375:7.5625*(n-=2.625/2.75)*n+.984375}function Rr(n,t){n=ao.hcl(n),t=ao.hcl(t);var e=n.h,r=n.c,i=n.l,u=t.h-e,o=t.c-r,a=t.l-i;return isNaN(o)&&(o=0,r=isNaN(r)?t.c:r),isNaN(u)?(u=0,e=isNaN(e)?t.h:e):u>180?u-=360:-180>u&&(u+=360),function(n){return sn(e+u*n,r+o*n,i+a*n)+""}}function Dr(n,t){n=ao.hsl(n),t=ao.hsl(t);var e=n.h,r=n.s,i=n.l,u=t.h-e,o=t.s-r,a=t.l-i;return isNaN(o)&&(o=0,r=isNaN(r)?t.s:r),isNaN(u)?(u=0,e=isNaN(e)?t.h:e):u>180?u-=360:-180>u&&(u+=360),function(n){return cn(e+u*n,r+o*n,i+a*n)+""}}function Pr(n,t){n=ao.lab(n),t=ao.lab(t);var e=n.l,r=n.a,i=n.b,u=t.l-e,o=t.a-r,a=t.b-i;return function(n){return pn(e+u*n,r+o*n,i+a*n)+""}}function Ur(n,t){return t-=n,function(e){return Math.round(n+t*e)}}function jr(n){var t=[n.a,n.b],e=[n.c,n.d],r=Hr(t),i=Fr(t,e),u=Hr(Or(e,t,-i))||0;t[0]*e[1]180?t+=360:t-n>180&&(n+=360),r.push({i:e.push(Ir(e)+"rotate(",null,")")-2,x:yr(n,t)})):t&&e.push(Ir(e)+"rotate("+t+")")}function Vr(n,t,e,r){n!==t?r.push({i:e.push(Ir(e)+"skewX(",null,")")-2,x:yr(n,t)}):t&&e.push(Ir(e)+"skewX("+t+")")}function Xr(n,t,e,r){if(n[0]!==t[0]||n[1]!==t[1]){var i=e.push(Ir(e)+"scale(",null,",",null,")");r.push({i:i-4,x:yr(n[0],t[0])},{i:i-2,x:yr(n[1],t[1])})}else 1===t[0]&&1===t[1]||e.push(Ir(e)+"scale("+t+")")}function $r(n,t){var e=[],r=[];return n=ao.transform(n),t=ao.transform(t),Yr(n.translate,t.translate,e,r),Zr(n.rotate,t.rotate,e,r),Vr(n.skew,t.skew,e,r),Xr(n.scale,t.scale,e,r),n=t=null,function(n){for(var t,i=-1,u=r.length;++i=0;)e.push(i[r])}function oi(n,t){for(var e=[n],r=[];null!=(n=e.pop());)if(r.push(n),(u=n.children)&&(i=u.length))for(var i,u,o=-1;++oe;++e)(t=n[e][1])>i&&(r=e,i=t);return r}function yi(n){return n.reduce(mi,0)}function mi(n,t){return n+t[1]}function Mi(n,t){return xi(n,Math.ceil(Math.log(t.length)/Math.LN2+1))}function xi(n,t){for(var e=-1,r=+n[0],i=(n[1]-r)/t,u=[];++e<=t;)u[e]=i*e+r;return u}function bi(n){return[ao.min(n),ao.max(n)]}function _i(n,t){return n.value-t.value}function wi(n,t){var e=n._pack_next;n._pack_next=t,t._pack_prev=n,t._pack_next=e,e._pack_prev=t}function Si(n,t){n._pack_next=t,t._pack_prev=n}function ki(n,t){var e=t.x-n.x,r=t.y-n.y,i=n.r+t.r;return.999*i*i>e*e+r*r}function Ni(n){function t(n){f=Math.min(n.x-n.r,f),s=Math.max(n.x+n.r,s),h=Math.min(n.y-n.r,h),p=Math.max(n.y+n.r,p)}if((e=n.children)&&(c=e.length)){var e,r,i,u,o,a,l,c,f=1/0,s=-(1/0),h=1/0,p=-(1/0);if(e.forEach(Ei),r=e[0],r.x=-r.r,r.y=0,t(r),c>1&&(i=e[1],i.x=i.r,i.y=0,t(i),c>2))for(u=e[2],zi(r,i,u),t(u),wi(r,u),r._pack_prev=u,wi(u,i),i=r._pack_next,o=3;c>o;o++){zi(r,i,u=e[o]);var g=0,v=1,d=1;for(a=i._pack_next;a!==i;a=a._pack_next,v++)if(ki(a,u)){g=1;break}if(1==g)for(l=r._pack_prev;l!==a._pack_prev&&!ki(l,u);l=l._pack_prev,d++);g?(d>v||v==d&&i.ro;o++)u=e[o],u.x-=y,u.y-=m,M=Math.max(M,u.r+Math.sqrt(u.x*u.x+u.y*u.y));n.r=M,e.forEach(Ai)}}function Ei(n){n._pack_next=n._pack_prev=n}function Ai(n){delete n._pack_next,delete n._pack_prev}function Ci(n,t,e,r){var i=n.children;if(n.x=t+=r*n.x,n.y=e+=r*n.y,n.r*=r,i)for(var u=-1,o=i.length;++u=0;)t=i[u],t.z+=e,t.m+=e,e+=t.s+(r+=t.c)}function Pi(n,t,e){return n.a.parent===t.parent?n.a:e}function Ui(n){return 1+ao.max(n,function(n){return n.y})}function ji(n){return n.reduce(function(n,t){return n+t.x},0)/n.length}function Fi(n){var t=n.children;return t&&t.length?Fi(t[0]):n}function Hi(n){var t,e=n.children;return e&&(t=e.length)?Hi(e[t-1]):n}function Oi(n){return{x:n.x,y:n.y,dx:n.dx,dy:n.dy}}function Ii(n,t){var e=n.x+t[3],r=n.y+t[0],i=n.dx-t[1]-t[3],u=n.dy-t[0]-t[2];return 0>i&&(e+=i/2,i=0),0>u&&(r+=u/2,u=0),{x:e,y:r,dx:i,dy:u}}function Yi(n){var t=n[0],e=n[n.length-1];return e>t?[t,e]:[e,t]}function Zi(n){return n.rangeExtent?n.rangeExtent():Yi(n.range())}function Vi(n,t,e,r){var i=e(n[0],n[1]),u=r(t[0],t[1]);return function(n){return u(i(n))}}function Xi(n,t){var e,r=0,i=n.length-1,u=n[r],o=n[i];return u>o&&(e=r,r=i,i=e,e=u,u=o,o=e),n[r]=t.floor(u),n[i]=t.ceil(o),n}function $i(n){return n?{floor:function(t){return Math.floor(t/n)*n},ceil:function(t){return Math.ceil(t/n)*n}}:Sl}function Bi(n,t,e,r){var i=[],u=[],o=0,a=Math.min(n.length,t.length)-1;for(n[a]2?Bi:Vi,l=r?Wr:Br;return o=i(n,t,l,e),a=i(t,n,l,Mr),u}function u(n){return o(n)}var o,a;return u.invert=function(n){return a(n)},u.domain=function(t){return arguments.length?(n=t.map(Number),i()):n},u.range=function(n){return arguments.length?(t=n,i()):t},u.rangeRound=function(n){return u.range(n).interpolate(Ur)},u.clamp=function(n){return arguments.length?(r=n,i()):r},u.interpolate=function(n){return arguments.length?(e=n,i()):e},u.ticks=function(t){return Qi(n,t)},u.tickFormat=function(t,e){return nu(n,t,e)},u.nice=function(t){return Gi(n,t),i()},u.copy=function(){return Wi(n,t,e,r)},i()}function Ji(n,t){return ao.rebind(n,t,"range","rangeRound","interpolate","clamp")}function Gi(n,t){return Xi(n,$i(Ki(n,t)[2])),Xi(n,$i(Ki(n,t)[2])),n}function Ki(n,t){null==t&&(t=10);var e=Yi(n),r=e[1]-e[0],i=Math.pow(10,Math.floor(Math.log(r/t)/Math.LN10)),u=t/r*i;return.15>=u?i*=10:.35>=u?i*=5:.75>=u&&(i*=2),e[0]=Math.ceil(e[0]/i)*i,e[1]=Math.floor(e[1]/i)*i+.5*i,e[2]=i,e}function Qi(n,t){return ao.range.apply(ao,Ki(n,t))}function nu(n,t,e){var r=Ki(n,t);if(e){var i=ha.exec(e);if(i.shift(),"s"===i[8]){var u=ao.formatPrefix(Math.max(xo(r[0]),xo(r[1])));return i[7]||(i[7]="."+tu(u.scale(r[2]))),i[8]="f",e=ao.format(i.join("")),function(n){return e(u.scale(n))+u.symbol}}i[7]||(i[7]="."+eu(i[8],r)),e=i.join("")}else e=",."+tu(r[2])+"f";return ao.format(e)}function tu(n){return-Math.floor(Math.log(n)/Math.LN10+.01)}function eu(n,t){var e=tu(t[2]);return n in kl?Math.abs(e-tu(Math.max(xo(t[0]),xo(t[1]))))+ +("e"!==n):e-2*("%"===n)}function ru(n,t,e,r){function i(n){return(e?Math.log(0>n?0:n):-Math.log(n>0?0:-n))/Math.log(t)}function u(n){return e?Math.pow(t,n):-Math.pow(t,-n)}function o(t){return n(i(t))}return o.invert=function(t){return u(n.invert(t))},o.domain=function(t){return arguments.length?(e=t[0]>=0,n.domain((r=t.map(Number)).map(i)),o):r},o.base=function(e){return arguments.length?(t=+e,n.domain(r.map(i)),o):t},o.nice=function(){var t=Xi(r.map(i),e?Math:El);return n.domain(t),r=t.map(u),o},o.ticks=function(){var n=Yi(r),o=[],a=n[0],l=n[1],c=Math.floor(i(a)),f=Math.ceil(i(l)),s=t%1?2:t;if(isFinite(f-c)){if(e){for(;f>c;c++)for(var h=1;s>h;h++)o.push(u(c)*h);o.push(u(c))}else for(o.push(u(c));c++0;h--)o.push(u(c)*h);for(c=0;o[c]l;f--);o=o.slice(c,f)}return o},o.tickFormat=function(n,e){if(!arguments.length)return Nl;arguments.length<2?e=Nl:"function"!=typeof e&&(e=ao.format(e));var r=Math.max(1,t*n/o.ticks().length);return function(n){var o=n/u(Math.round(i(n)));return t-.5>o*t&&(o*=t),r>=o?e(n):""}},o.copy=function(){return ru(n.copy(),t,e,r)},Ji(o,n)}function iu(n,t,e){function r(t){return n(i(t))}var i=uu(t),u=uu(1/t);return r.invert=function(t){return u(n.invert(t))},r.domain=function(t){return arguments.length?(n.domain((e=t.map(Number)).map(i)),r):e},r.ticks=function(n){return Qi(e,n)},r.tickFormat=function(n,t){return nu(e,n,t)},r.nice=function(n){return r.domain(Gi(e,n))},r.exponent=function(o){return arguments.length?(i=uu(t=o),u=uu(1/t),n.domain(e.map(i)),r):t},r.copy=function(){return iu(n.copy(),t,e)},Ji(r,n)}function uu(n){return function(t){return 0>t?-Math.pow(-t,n):Math.pow(t,n)}}function ou(n,t){function e(e){return u[((i.get(e)||("range"===t.t?i.set(e,n.push(e)):NaN))-1)%u.length]}function r(t,e){return ao.range(n.length).map(function(n){return t+e*n})}var i,u,o;return e.domain=function(r){if(!arguments.length)return n;n=[],i=new c;for(var u,o=-1,a=r.length;++oe?[NaN,NaN]:[e>0?a[e-1]:n[0],et?NaN:t/u+n,[t,t+1/u]},r.copy=function(){return lu(n,t,e)},i()}function cu(n,t){function e(e){return e>=e?t[ao.bisect(n,e)]:void 0}return e.domain=function(t){return arguments.length?(n=t,e):n},e.range=function(n){return arguments.length?(t=n,e):t},e.invertExtent=function(e){return e=t.indexOf(e),[n[e-1],n[e]]},e.copy=function(){return cu(n,t)},e}function fu(n){function t(n){return+n}return t.invert=t,t.domain=t.range=function(e){return arguments.length?(n=e.map(t),t):n},t.ticks=function(t){return Qi(n,t)},t.tickFormat=function(t,e){return nu(n,t,e)},t.copy=function(){return fu(n)},t}function su(){return 0}function hu(n){return n.innerRadius}function pu(n){return n.outerRadius}function gu(n){return n.startAngle}function vu(n){return n.endAngle}function du(n){return n&&n.padAngle}function yu(n,t,e,r){return(n-e)*t-(t-r)*n>0?0:1}function mu(n,t,e,r,i){var u=n[0]-t[0],o=n[1]-t[1],a=(i?r:-r)/Math.sqrt(u*u+o*o),l=a*o,c=-a*u,f=n[0]+l,s=n[1]+c,h=t[0]+l,p=t[1]+c,g=(f+h)/2,v=(s+p)/2,d=h-f,y=p-s,m=d*d+y*y,M=e-r,x=f*p-h*s,b=(0>y?-1:1)*Math.sqrt(Math.max(0,M*M*m-x*x)),_=(x*y-d*b)/m,w=(-x*d-y*b)/m,S=(x*y+d*b)/m,k=(-x*d+y*b)/m,N=_-g,E=w-v,A=S-g,C=k-v;return N*N+E*E>A*A+C*C&&(_=S,w=k),[[_-l,w-c],[_*e/M,w*e/M]]}function Mu(n){function t(t){function o(){c.push("M",u(n(f),a))}for(var l,c=[],f=[],s=-1,h=t.length,p=En(e),g=En(r);++s1?n.join("L"):n+"Z"}function bu(n){return n.join("L")+"Z"}function _u(n){for(var t=0,e=n.length,r=n[0],i=[r[0],",",r[1]];++t1&&i.push("H",r[0]),i.join("")}function wu(n){for(var t=0,e=n.length,r=n[0],i=[r[0],",",r[1]];++t1){a=t[1],u=n[l],l++,r+="C"+(i[0]+o[0])+","+(i[1]+o[1])+","+(u[0]-a[0])+","+(u[1]-a[1])+","+u[0]+","+u[1];for(var c=2;c9&&(i=3*t/Math.sqrt(i),o[a]=i*e,o[a+1]=i*r));for(a=-1;++a<=l;)i=(n[Math.min(l,a+1)][0]-n[Math.max(0,a-1)][0])/(6*(1+o[a]*o[a])),u.push([i||0,o[a]*i||0]);return u}function Fu(n){return n.length<3?xu(n):n[0]+Au(n,ju(n))}function Hu(n){for(var t,e,r,i=-1,u=n.length;++i=t?o(n-t):void(f.c=o)}function o(e){var i=g.active,u=g[i];u&&(u.timer.c=null,u.timer.t=NaN,--g.count,delete g[i],u.event&&u.event.interrupt.call(n,n.__data__,u.index));for(var o in g)if(r>+o){var c=g[o];c.timer.c=null,c.timer.t=NaN,--g.count,delete g[o]}f.c=a,qn(function(){return f.c&&a(e||1)&&(f.c=null,f.t=NaN),1},0,l),g.active=r,v.event&&v.event.start.call(n,n.__data__,t),p=[],v.tween.forEach(function(e,r){(r=r.call(n,n.__data__,t))&&p.push(r)}),h=v.ease,s=v.duration}function a(i){for(var u=i/s,o=h(u),a=p.length;a>0;)p[--a].call(n,o);return u>=1?(v.event&&v.event.end.call(n,n.__data__,t),--g.count?delete g[r]:delete n[e],1):void 0}var l,f,s,h,p,g=n[e]||(n[e]={active:0,count:0}),v=g[r];v||(l=i.time,f=qn(u,0,l),v=g[r]={tween:new c,time:l,timer:f,delay:i.delay,duration:i.duration,ease:i.ease,index:t},i=null,++g.count)}function no(n,t,e){n.attr("transform",function(n){var r=t(n);return"translate("+(isFinite(r)?r:e(n))+",0)"})}function to(n,t,e){n.attr("transform",function(n){var r=t(n);return"translate(0,"+(isFinite(r)?r:e(n))+")"})}function eo(n){return n.toISOString()}function ro(n,t,e){function r(t){return n(t)}function i(n,e){var r=n[1]-n[0],i=r/e,u=ao.bisect(Kl,i);return u==Kl.length?[t.year,Ki(n.map(function(n){return n/31536e6}),e)[2]]:u?t[i/Kl[u-1]1?{floor:function(t){for(;e(t=n.floor(t));)t=io(t-1);return t},ceil:function(t){for(;e(t=n.ceil(t));)t=io(+t+1);return t}}:n))},r.ticks=function(n,t){var e=Yi(r.domain()),u=null==n?i(e,10):"number"==typeof n?i(e,n):!n.range&&[{range:n},t];return u&&(n=u[0],t=u[1]),n.range(e[0],io(+e[1]+1),1>t?1:t)},r.tickFormat=function(){return e},r.copy=function(){return ro(n.copy(),t,e)},Ji(r,n)}function io(n){return new Date(n)}function uo(n){return JSON.parse(n.responseText)}function oo(n){var t=fo.createRange();return t.selectNode(fo.body),t.createContextualFragment(n.responseText)}var ao={version:"3.5.17"},lo=[].slice,co=function(n){return lo.call(n)},fo=this.document;if(fo)try{co(fo.documentElement.childNodes)[0].nodeType}catch(so){co=function(n){for(var t=n.length,e=new Array(t);t--;)e[t]=n[t];return e}}if(Date.now||(Date.now=function(){return+new Date}),fo)try{fo.createElement("DIV").style.setProperty("opacity",0,"")}catch(ho){var po=this.Element.prototype,go=po.setAttribute,vo=po.setAttributeNS,yo=this.CSSStyleDeclaration.prototype,mo=yo.setProperty;po.setAttribute=function(n,t){go.call(this,n,t+"")},po.setAttributeNS=function(n,t,e){vo.call(this,n,t,e+"")},yo.setProperty=function(n,t,e){mo.call(this,n,t+"",e)}}ao.ascending=e,ao.descending=function(n,t){return n>t?-1:t>n?1:t>=n?0:NaN},ao.min=function(n,t){var e,r,i=-1,u=n.length;if(1===arguments.length){for(;++i=r){e=r;break}for(;++ir&&(e=r)}else{for(;++i=r){e=r;break}for(;++ir&&(e=r)}return e},ao.max=function(n,t){var e,r,i=-1,u=n.length;if(1===arguments.length){for(;++i=r){e=r;break}for(;++ie&&(e=r)}else{for(;++i=r){e=r;break}for(;++ie&&(e=r)}return e},ao.extent=function(n,t){var e,r,i,u=-1,o=n.length;if(1===arguments.length){for(;++u=r){e=i=r;break}for(;++ur&&(e=r),r>i&&(i=r))}else{for(;++u=r){e=i=r;break}for(;++ur&&(e=r),r>i&&(i=r))}return[e,i]},ao.sum=function(n,t){var e,r=0,u=n.length,o=-1;if(1===arguments.length)for(;++o1?l/(f-1):void 0},ao.deviation=function(){var n=ao.variance.apply(this,arguments);return n?Math.sqrt(n):n};var Mo=u(e);ao.bisectLeft=Mo.left,ao.bisect=ao.bisectRight=Mo.right,ao.bisector=function(n){return u(1===n.length?function(t,r){return e(n(t),r)}:n)},ao.shuffle=function(n,t,e){(u=arguments.length)<3&&(e=n.length,2>u&&(t=0));for(var r,i,u=e-t;u;)i=Math.random()*u--|0,r=n[u+t],n[u+t]=n[i+t],n[i+t]=r;return n},ao.permute=function(n,t){for(var e=t.length,r=new Array(e);e--;)r[e]=n[t[e]];return r},ao.pairs=function(n){for(var t,e=0,r=n.length-1,i=n[0],u=new Array(0>r?0:r);r>e;)u[e]=[t=i,i=n[++e]];return u},ao.transpose=function(n){if(!(i=n.length))return[];for(var t=-1,e=ao.min(n,o),r=new Array(e);++t=0;)for(r=n[i],t=r.length;--t>=0;)e[--o]=r[t];return e};var xo=Math.abs;ao.range=function(n,t,e){if(arguments.length<3&&(e=1,arguments.length<2&&(t=n,n=0)),(t-n)/e===1/0)throw new Error("infinite range");var r,i=[],u=a(xo(e)),o=-1;if(n*=u,t*=u,e*=u,0>e)for(;(r=n+e*++o)>t;)i.push(r/u);else for(;(r=n+e*++o)=u.length)return r?r.call(i,o):e?o.sort(e):o;for(var l,f,s,h,p=-1,g=o.length,v=u[a++],d=new c;++p=u.length)return n;var r=[],i=o[e++];return n.forEach(function(n,i){r.push({key:n,values:t(i,e)})}),i?r.sort(function(n,t){return i(n.key,t.key)}):r}var e,r,i={},u=[],o=[];return i.map=function(t,e){return n(e,t,0)},i.entries=function(e){return t(n(ao.map,e,0),0)},i.key=function(n){return u.push(n),i},i.sortKeys=function(n){return o[u.length-1]=n,i},i.sortValues=function(n){return e=n,i},i.rollup=function(n){return r=n,i},i},ao.set=function(n){var t=new y;if(n)for(var e=0,r=n.length;r>e;++e)t.add(n[e]);return t},l(y,{has:h,add:function(n){return this._[f(n+="")]=!0,n},remove:p,values:g,size:v,empty:d,forEach:function(n){for(var t in this._)n.call(this,s(t))}}),ao.behavior={},ao.rebind=function(n,t){for(var e,r=1,i=arguments.length;++r=0&&(r=n.slice(e+1),n=n.slice(0,e)),n)return arguments.length<2?this[n].on(r):this[n].on(r,t);if(2===arguments.length){if(null==t)for(n in this)this.hasOwnProperty(n)&&this[n].on(r,null);return this}},ao.event=null,ao.requote=function(n){return n.replace(So,"\\$&")};var So=/[\\\^\$\*\+\?\|\[\]\(\)\.\{\}]/g,ko={}.__proto__?function(n,t){n.__proto__=t}:function(n,t){for(var e in t)n[e]=t[e]},No=function(n,t){return t.querySelector(n)},Eo=function(n,t){return t.querySelectorAll(n)},Ao=function(n,t){var e=n.matches||n[x(n,"matchesSelector")];return(Ao=function(n,t){return e.call(n,t)})(n,t)};"function"==typeof Sizzle&&(No=function(n,t){return Sizzle(n,t)[0]||null},Eo=Sizzle,Ao=Sizzle.matchesSelector),ao.selection=function(){return ao.select(fo.documentElement)};var Co=ao.selection.prototype=[];Co.select=function(n){var t,e,r,i,u=[];n=A(n);for(var o=-1,a=this.length;++o=0&&"xmlns"!==(e=n.slice(0,t))&&(n=n.slice(t+1)),Lo.hasOwnProperty(e)?{space:Lo[e],local:n}:n}},Co.attr=function(n,t){if(arguments.length<2){if("string"==typeof n){var e=this.node();return n=ao.ns.qualify(n),n.local?e.getAttributeNS(n.space,n.local):e.getAttribute(n)}for(t in n)this.each(z(t,n[t]));return this}return this.each(z(n,t))},Co.classed=function(n,t){if(arguments.length<2){if("string"==typeof n){var e=this.node(),r=(n=T(n)).length,i=-1;if(t=e.classList){for(;++ii){if("string"!=typeof n){2>i&&(e="");for(r in n)this.each(P(r,n[r],e));return this}if(2>i){var u=this.node();return t(u).getComputedStyle(u,null).getPropertyValue(n)}r=""}return this.each(P(n,e,r))},Co.property=function(n,t){if(arguments.length<2){if("string"==typeof n)return this.node()[n];for(t in n)this.each(U(t,n[t]));return this}return this.each(U(n,t))},Co.text=function(n){return arguments.length?this.each("function"==typeof n?function(){var t=n.apply(this,arguments);this.textContent=null==t?"":t}:null==n?function(){this.textContent=""}:function(){this.textContent=n}):this.node().textContent},Co.html=function(n){return arguments.length?this.each("function"==typeof n?function(){var t=n.apply(this,arguments);this.innerHTML=null==t?"":t}:null==n?function(){this.innerHTML=""}:function(){this.innerHTML=n}):this.node().innerHTML},Co.append=function(n){return n=j(n),this.select(function(){return this.appendChild(n.apply(this,arguments))})},Co.insert=function(n,t){return n=j(n),t=A(t),this.select(function(){return this.insertBefore(n.apply(this,arguments),t.apply(this,arguments)||null)})},Co.remove=function(){return this.each(F)},Co.data=function(n,t){function e(n,e){var r,i,u,o=n.length,s=e.length,h=Math.min(o,s),p=new Array(s),g=new Array(s),v=new Array(o);if(t){var d,y=new c,m=new Array(o);for(r=-1;++rr;++r)g[r]=H(e[r]);for(;o>r;++r)v[r]=n[r]}g.update=p,g.parentNode=p.parentNode=v.parentNode=n.parentNode,a.push(g),l.push(p),f.push(v)}var r,i,u=-1,o=this.length;if(!arguments.length){for(n=new Array(o=(r=this[0]).length);++uu;u++){i.push(t=[]),t.parentNode=(e=this[u]).parentNode;for(var a=0,l=e.length;l>a;a++)(r=e[a])&&n.call(r,r.__data__,a,u)&&t.push(r)}return E(i)},Co.order=function(){for(var n=-1,t=this.length;++n=0;)(e=r[i])&&(u&&u!==e.nextSibling&&u.parentNode.insertBefore(e,u),u=e);return this},Co.sort=function(n){n=I.apply(this,arguments);for(var t=-1,e=this.length;++tn;n++)for(var e=this[n],r=0,i=e.length;i>r;r++){var u=e[r];if(u)return u}return null},Co.size=function(){var n=0;return Y(this,function(){++n}),n};var qo=[];ao.selection.enter=Z,ao.selection.enter.prototype=qo,qo.append=Co.append,qo.empty=Co.empty,qo.node=Co.node,qo.call=Co.call,qo.size=Co.size,qo.select=function(n){for(var t,e,r,i,u,o=[],a=-1,l=this.length;++ar){if("string"!=typeof n){2>r&&(t=!1);for(e in n)this.each(X(e,n[e],t));return this}if(2>r)return(r=this.node()["__on"+n])&&r._;e=!1}return this.each(X(n,t,e))};var To=ao.map({mouseenter:"mouseover",mouseleave:"mouseout"});fo&&To.forEach(function(n){"on"+n in fo&&To.remove(n)});var Ro,Do=0;ao.mouse=function(n){return J(n,k())};var Po=this.navigator&&/WebKit/.test(this.navigator.userAgent)?-1:0;ao.touch=function(n,t,e){if(arguments.length<3&&(e=t,t=k().changedTouches),t)for(var r,i=0,u=t.length;u>i;++i)if((r=t[i]).identifier===e)return J(n,r)},ao.behavior.drag=function(){function n(){this.on("mousedown.drag",u).on("touchstart.drag",o)}function e(n,t,e,u,o){return function(){function a(){var n,e,r=t(h,v);r&&(n=r[0]-M[0],e=r[1]-M[1],g|=n|e,M=r,p({type:"drag",x:r[0]+c[0],y:r[1]+c[1],dx:n,dy:e}))}function l(){t(h,v)&&(y.on(u+d,null).on(o+d,null),m(g),p({type:"dragend"}))}var c,f=this,s=ao.event.target.correspondingElement||ao.event.target,h=f.parentNode,p=r.of(f,arguments),g=0,v=n(),d=".drag"+(null==v?"":"-"+v),y=ao.select(e(s)).on(u+d,a).on(o+d,l),m=W(s),M=t(h,v);i?(c=i.apply(f,arguments),c=[c.x-M[0],c.y-M[1]]):c=[0,0],p({type:"dragstart"})}}var r=N(n,"drag","dragstart","dragend"),i=null,u=e(b,ao.mouse,t,"mousemove","mouseup"),o=e(G,ao.touch,m,"touchmove","touchend");return n.origin=function(t){return arguments.length?(i=t,n):i},ao.rebind(n,r,"on")},ao.touches=function(n,t){return arguments.length<2&&(t=k().touches),t?co(t).map(function(t){var e=J(n,t);return e.identifier=t.identifier,e}):[]};var Uo=1e-6,jo=Uo*Uo,Fo=Math.PI,Ho=2*Fo,Oo=Ho-Uo,Io=Fo/2,Yo=Fo/180,Zo=180/Fo,Vo=Math.SQRT2,Xo=2,$o=4;ao.interpolateZoom=function(n,t){var e,r,i=n[0],u=n[1],o=n[2],a=t[0],l=t[1],c=t[2],f=a-i,s=l-u,h=f*f+s*s;if(jo>h)r=Math.log(c/o)/Vo,e=function(n){return[i+n*f,u+n*s,o*Math.exp(Vo*n*r)]};else{var p=Math.sqrt(h),g=(c*c-o*o+$o*h)/(2*o*Xo*p),v=(c*c-o*o-$o*h)/(2*c*Xo*p),d=Math.log(Math.sqrt(g*g+1)-g),y=Math.log(Math.sqrt(v*v+1)-v);r=(y-d)/Vo,e=function(n){var t=n*r,e=rn(d),a=o/(Xo*p)*(e*un(Vo*t+d)-en(d));return[i+a*f,u+a*s,o*e/rn(Vo*t+d)]}}return e.duration=1e3*r,e},ao.behavior.zoom=function(){function n(n){n.on(L,s).on(Wo+".zoom",p).on("dblclick.zoom",g).on(R,h)}function e(n){return[(n[0]-k.x)/k.k,(n[1]-k.y)/k.k]}function r(n){return[n[0]*k.k+k.x,n[1]*k.k+k.y]}function i(n){k.k=Math.max(A[0],Math.min(A[1],n))}function u(n,t){t=r(t),k.x+=n[0]-t[0],k.y+=n[1]-t[1]}function o(t,e,r,o){t.__chart__={x:k.x,y:k.y,k:k.k},i(Math.pow(2,o)),u(d=e,r),t=ao.select(t),C>0&&(t=t.transition().duration(C)),t.call(n.event)}function a(){b&&b.domain(x.range().map(function(n){return(n-k.x)/k.k}).map(x.invert)),w&&w.domain(_.range().map(function(n){return(n-k.y)/k.k}).map(_.invert))}function l(n){z++||n({type:"zoomstart"})}function c(n){a(),n({type:"zoom",scale:k.k,translate:[k.x,k.y]})}function f(n){--z||(n({type:"zoomend"}),d=null)}function s(){function n(){a=1,u(ao.mouse(i),h),c(o)}function r(){s.on(q,null).on(T,null),p(a),f(o)}var i=this,o=D.of(i,arguments),a=0,s=ao.select(t(i)).on(q,n).on(T,r),h=e(ao.mouse(i)),p=W(i);Il.call(i),l(o)}function h(){function n(){var n=ao.touches(g);return p=k.k,n.forEach(function(n){n.identifier in d&&(d[n.identifier]=e(n))}),n}function t(){var t=ao.event.target;ao.select(t).on(x,r).on(b,a),_.push(t);for(var e=ao.event.changedTouches,i=0,u=e.length;u>i;++i)d[e[i].identifier]=null;var l=n(),c=Date.now();if(1===l.length){if(500>c-M){var f=l[0];o(g,f,d[f.identifier],Math.floor(Math.log(k.k)/Math.LN2)+1),S()}M=c}else if(l.length>1){var f=l[0],s=l[1],h=f[0]-s[0],p=f[1]-s[1];y=h*h+p*p}}function r(){var n,t,e,r,o=ao.touches(g);Il.call(g);for(var a=0,l=o.length;l>a;++a,r=null)if(e=o[a],r=d[e.identifier]){if(t)break;n=e,t=r}if(r){var f=(f=e[0]-n[0])*f+(f=e[1]-n[1])*f,s=y&&Math.sqrt(f/y);n=[(n[0]+e[0])/2,(n[1]+e[1])/2],t=[(t[0]+r[0])/2,(t[1]+r[1])/2],i(s*p)}M=null,u(n,t),c(v)}function a(){if(ao.event.touches.length){for(var t=ao.event.changedTouches,e=0,r=t.length;r>e;++e)delete d[t[e].identifier];for(var i in d)return void n()}ao.selectAll(_).on(m,null),w.on(L,s).on(R,h),N(),f(v)}var p,g=this,v=D.of(g,arguments),d={},y=0,m=".zoom-"+ao.event.changedTouches[0].identifier,x="touchmove"+m,b="touchend"+m,_=[],w=ao.select(g),N=W(g);t(),l(v),w.on(L,null).on(R,t)}function p(){var n=D.of(this,arguments);m?clearTimeout(m):(Il.call(this),v=e(d=y||ao.mouse(this)),l(n)),m=setTimeout(function(){m=null,f(n)},50),S(),i(Math.pow(2,.002*Bo())*k.k),u(d,v),c(n)}function g(){var n=ao.mouse(this),t=Math.log(k.k)/Math.LN2;o(this,n,e(n),ao.event.shiftKey?Math.ceil(t)-1:Math.floor(t)+1)}var v,d,y,m,M,x,b,_,w,k={x:0,y:0,k:1},E=[960,500],A=Jo,C=250,z=0,L="mousedown.zoom",q="mousemove.zoom",T="mouseup.zoom",R="touchstart.zoom",D=N(n,"zoomstart","zoom","zoomend");return Wo||(Wo="onwheel"in fo?(Bo=function(){return-ao.event.deltaY*(ao.event.deltaMode?120:1)},"wheel"):"onmousewheel"in fo?(Bo=function(){return ao.event.wheelDelta},"mousewheel"):(Bo=function(){return-ao.event.detail},"MozMousePixelScroll")),n.event=function(n){n.each(function(){var n=D.of(this,arguments),t=k;Hl?ao.select(this).transition().each("start.zoom",function(){k=this.__chart__||{x:0,y:0,k:1},l(n)}).tween("zoom:zoom",function(){var e=E[0],r=E[1],i=d?d[0]:e/2,u=d?d[1]:r/2,o=ao.interpolateZoom([(i-k.x)/k.k,(u-k.y)/k.k,e/k.k],[(i-t.x)/t.k,(u-t.y)/t.k,e/t.k]);return function(t){var r=o(t),a=e/r[2];this.__chart__=k={x:i-r[0]*a,y:u-r[1]*a,k:a},c(n)}}).each("interrupt.zoom",function(){f(n)}).each("end.zoom",function(){f(n)}):(this.__chart__=k,l(n),c(n),f(n))})},n.translate=function(t){return arguments.length?(k={x:+t[0],y:+t[1],k:k.k},a(),n):[k.x,k.y]},n.scale=function(t){return arguments.length?(k={x:k.x,y:k.y,k:null},i(+t),a(),n):k.k},n.scaleExtent=function(t){return arguments.length?(A=null==t?Jo:[+t[0],+t[1]],n):A},n.center=function(t){return arguments.length?(y=t&&[+t[0],+t[1]],n):y},n.size=function(t){return arguments.length?(E=t&&[+t[0],+t[1]],n):E},n.duration=function(t){return arguments.length?(C=+t,n):C},n.x=function(t){return arguments.length?(b=t,x=t.copy(),k={x:0,y:0,k:1},n):b},n.y=function(t){return arguments.length?(w=t,_=t.copy(),k={x:0,y:0,k:1},n):w},ao.rebind(n,D,"on")};var Bo,Wo,Jo=[0,1/0];ao.color=an,an.prototype.toString=function(){return this.rgb()+""},ao.hsl=ln;var Go=ln.prototype=new an;Go.brighter=function(n){return n=Math.pow(.7,arguments.length?n:1),new ln(this.h,this.s,this.l/n)},Go.darker=function(n){return n=Math.pow(.7,arguments.length?n:1),new ln(this.h,this.s,n*this.l)},Go.rgb=function(){return cn(this.h,this.s,this.l)},ao.hcl=fn;var Ko=fn.prototype=new an;Ko.brighter=function(n){return new fn(this.h,this.c,Math.min(100,this.l+Qo*(arguments.length?n:1)))},Ko.darker=function(n){return new fn(this.h,this.c,Math.max(0,this.l-Qo*(arguments.length?n:1)))},Ko.rgb=function(){return sn(this.h,this.c,this.l).rgb()},ao.lab=hn;var Qo=18,na=.95047,ta=1,ea=1.08883,ra=hn.prototype=new an;ra.brighter=function(n){return new hn(Math.min(100,this.l+Qo*(arguments.length?n:1)),this.a,this.b)},ra.darker=function(n){return new hn(Math.max(0,this.l-Qo*(arguments.length?n:1)),this.a,this.b)},ra.rgb=function(){return pn(this.l,this.a,this.b)},ao.rgb=mn;var ia=mn.prototype=new an;ia.brighter=function(n){n=Math.pow(.7,arguments.length?n:1);var t=this.r,e=this.g,r=this.b,i=30;return t||e||r?(t&&i>t&&(t=i),e&&i>e&&(e=i),r&&i>r&&(r=i),new mn(Math.min(255,t/n),Math.min(255,e/n),Math.min(255,r/n))):new mn(i,i,i)},ia.darker=function(n){return n=Math.pow(.7,arguments.length?n:1),new mn(n*this.r,n*this.g,n*this.b)},ia.hsl=function(){return wn(this.r,this.g,this.b)},ia.toString=function(){return"#"+bn(this.r)+bn(this.g)+bn(this.b)};var ua=ao.map({aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074});ua.forEach(function(n,t){ua.set(n,Mn(t))}),ao.functor=En,ao.xhr=An(m),ao.dsv=function(n,t){function e(n,e,u){arguments.length<3&&(u=e,e=null);var o=Cn(n,t,null==e?r:i(e),u);return o.row=function(n){return arguments.length?o.response(null==(e=n)?r:i(n)):e},o}function r(n){return e.parse(n.responseText)}function i(n){return function(t){return e.parse(t.responseText,n)}}function u(t){return t.map(o).join(n)}function o(n){return a.test(n)?'"'+n.replace(/\"/g,'""')+'"':n}var a=new RegExp('["'+n+"\n]"),l=n.charCodeAt(0);return e.parse=function(n,t){var r;return e.parseRows(n,function(n,e){if(r)return r(n,e-1);var i=new Function("d","return {"+n.map(function(n,t){return JSON.stringify(n)+": d["+t+"]"}).join(",")+"}");r=t?function(n,e){return t(i(n),e)}:i})},e.parseRows=function(n,t){function e(){if(f>=c)return o;if(i)return i=!1,u;var t=f;if(34===n.charCodeAt(t)){for(var e=t;e++f;){var r=n.charCodeAt(f++),a=1;if(10===r)i=!0;else if(13===r)i=!0,10===n.charCodeAt(f)&&(++f,++a);else if(r!==l)continue;return n.slice(t,f-a)}return n.slice(t)}for(var r,i,u={},o={},a=[],c=n.length,f=0,s=0;(r=e())!==o;){for(var h=[];r!==u&&r!==o;)h.push(r),r=e();t&&null==(h=t(h,s++))||a.push(h)}return a},e.format=function(t){if(Array.isArray(t[0]))return e.formatRows(t);var r=new y,i=[];return t.forEach(function(n){for(var t in n)r.has(t)||i.push(r.add(t))}),[i.map(o).join(n)].concat(t.map(function(t){return i.map(function(n){return o(t[n])}).join(n)})).join("\n")},e.formatRows=function(n){return n.map(u).join("\n")},e},ao.csv=ao.dsv(",","text/csv"),ao.tsv=ao.dsv(" ","text/tab-separated-values");var oa,aa,la,ca,fa=this[x(this,"requestAnimationFrame")]||function(n){setTimeout(n,17)};ao.timer=function(){qn.apply(this,arguments)},ao.timer.flush=function(){Rn(),Dn()},ao.round=function(n,t){return t?Math.round(n*(t=Math.pow(10,t)))/t:Math.round(n)};var sa=["y","z","a","f","p","n","\xb5","m","","k","M","G","T","P","E","Z","Y"].map(Un);ao.formatPrefix=function(n,t){var e=0;return(n=+n)&&(0>n&&(n*=-1),t&&(n=ao.round(n,Pn(n,t))),e=1+Math.floor(1e-12+Math.log(n)/Math.LN10),e=Math.max(-24,Math.min(24,3*Math.floor((e-1)/3)))),sa[8+e/3]};var ha=/(?:([^{])?([<>=^]))?([+\- ])?([$#])?(0)?(\d+)?(,)?(\.-?\d+)?([a-z%])?/i,pa=ao.map({b:function(n){return n.toString(2)},c:function(n){return String.fromCharCode(n)},o:function(n){return n.toString(8)},x:function(n){return n.toString(16)},X:function(n){return n.toString(16).toUpperCase()},g:function(n,t){return n.toPrecision(t)},e:function(n,t){return n.toExponential(t)},f:function(n,t){return n.toFixed(t)},r:function(n,t){return(n=ao.round(n,Pn(n,t))).toFixed(Math.max(0,Math.min(20,Pn(n*(1+1e-15),t))))}}),ga=ao.time={},va=Date;Hn.prototype={getDate:function(){return this._.getUTCDate()},getDay:function(){return this._.getUTCDay()},getFullYear:function(){return this._.getUTCFullYear()},getHours:function(){return this._.getUTCHours()},getMilliseconds:function(){return this._.getUTCMilliseconds()},getMinutes:function(){return this._.getUTCMinutes()},getMonth:function(){return this._.getUTCMonth()},getSeconds:function(){return this._.getUTCSeconds()},getTime:function(){return this._.getTime()},getTimezoneOffset:function(){return 0},valueOf:function(){return this._.valueOf()},setDate:function(){da.setUTCDate.apply(this._,arguments)},setDay:function(){da.setUTCDay.apply(this._,arguments)},setFullYear:function(){da.setUTCFullYear.apply(this._,arguments)},setHours:function(){da.setUTCHours.apply(this._,arguments)},setMilliseconds:function(){da.setUTCMilliseconds.apply(this._,arguments)},setMinutes:function(){da.setUTCMinutes.apply(this._,arguments)},setMonth:function(){da.setUTCMonth.apply(this._,arguments)},setSeconds:function(){da.setUTCSeconds.apply(this._,arguments)},setTime:function(){da.setTime.apply(this._,arguments)}};var da=Date.prototype;ga.year=On(function(n){return n=ga.day(n),n.setMonth(0,1),n},function(n,t){n.setFullYear(n.getFullYear()+t)},function(n){return n.getFullYear()}),ga.years=ga.year.range,ga.years.utc=ga.year.utc.range,ga.day=On(function(n){var t=new va(2e3,0);return t.setFullYear(n.getFullYear(),n.getMonth(),n.getDate()),t},function(n,t){n.setDate(n.getDate()+t)},function(n){return n.getDate()-1}),ga.days=ga.day.range,ga.days.utc=ga.day.utc.range,ga.dayOfYear=function(n){var t=ga.year(n);return Math.floor((n-t-6e4*(n.getTimezoneOffset()-t.getTimezoneOffset()))/864e5)},["sunday","monday","tuesday","wednesday","thursday","friday","saturday"].forEach(function(n,t){t=7-t;var e=ga[n]=On(function(n){return(n=ga.day(n)).setDate(n.getDate()-(n.getDay()+t)%7),n},function(n,t){n.setDate(n.getDate()+7*Math.floor(t))},function(n){var e=ga.year(n).getDay();return Math.floor((ga.dayOfYear(n)+(e+t)%7)/7)-(e!==t)});ga[n+"s"]=e.range,ga[n+"s"].utc=e.utc.range,ga[n+"OfYear"]=function(n){var e=ga.year(n).getDay();return Math.floor((ga.dayOfYear(n)+(e+t)%7)/7)}}),ga.week=ga.sunday,ga.weeks=ga.sunday.range,ga.weeks.utc=ga.sunday.utc.range,ga.weekOfYear=ga.sundayOfYear;var ya={"-":"",_:" ",0:"0"},ma=/^\s*\d+/,Ma=/^%/;ao.locale=function(n){return{numberFormat:jn(n),timeFormat:Yn(n)}};var xa=ao.locale({decimal:".",thousands:",",grouping:[3],currency:["$",""],dateTime:"%a %b %e %X %Y",date:"%m/%d/%Y",time:"%H:%M:%S",periods:["AM","PM"],days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"], shortDays:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],shortMonths:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]});ao.format=xa.numberFormat,ao.geo={},ft.prototype={s:0,t:0,add:function(n){st(n,this.t,ba),st(ba.s,this.s,this),this.s?this.t+=ba.t:this.s=ba.t},reset:function(){this.s=this.t=0},valueOf:function(){return this.s}};var ba=new ft;ao.geo.stream=function(n,t){n&&_a.hasOwnProperty(n.type)?_a[n.type](n,t):ht(n,t)};var _a={Feature:function(n,t){ht(n.geometry,t)},FeatureCollection:function(n,t){for(var e=n.features,r=-1,i=e.length;++rn?4*Fo+n:n,Na.lineStart=Na.lineEnd=Na.point=b}};ao.geo.bounds=function(){function n(n,t){M.push(x=[f=n,h=n]),s>t&&(s=t),t>p&&(p=t)}function t(t,e){var r=dt([t*Yo,e*Yo]);if(y){var i=mt(y,r),u=[i[1],-i[0],0],o=mt(u,i);bt(o),o=_t(o);var l=t-g,c=l>0?1:-1,v=o[0]*Zo*c,d=xo(l)>180;if(d^(v>c*g&&c*t>v)){var m=o[1]*Zo;m>p&&(p=m)}else if(v=(v+360)%360-180,d^(v>c*g&&c*t>v)){var m=-o[1]*Zo;s>m&&(s=m)}else s>e&&(s=e),e>p&&(p=e);d?g>t?a(f,t)>a(f,h)&&(h=t):a(t,h)>a(f,h)&&(f=t):h>=f?(f>t&&(f=t),t>h&&(h=t)):t>g?a(f,t)>a(f,h)&&(h=t):a(t,h)>a(f,h)&&(f=t)}else n(t,e);y=r,g=t}function e(){b.point=t}function r(){x[0]=f,x[1]=h,b.point=n,y=null}function i(n,e){if(y){var r=n-g;m+=xo(r)>180?r+(r>0?360:-360):r}else v=n,d=e;Na.point(n,e),t(n,e)}function u(){Na.lineStart()}function o(){i(v,d),Na.lineEnd(),xo(m)>Uo&&(f=-(h=180)),x[0]=f,x[1]=h,y=null}function a(n,t){return(t-=n)<0?t+360:t}function l(n,t){return n[0]-t[0]}function c(n,t){return t[0]<=t[1]?t[0]<=n&&n<=t[1]:nka?(f=-(h=180),s=-(p=90)):m>Uo?p=90:-Uo>m&&(s=-90),x[0]=f,x[1]=h}};return function(n){p=h=-(f=s=1/0),M=[],ao.geo.stream(n,b);var t=M.length;if(t){M.sort(l);for(var e,r=1,i=M[0],u=[i];t>r;++r)e=M[r],c(e[0],i)||c(e[1],i)?(a(i[0],e[1])>a(i[0],i[1])&&(i[1]=e[1]),a(e[0],i[1])>a(i[0],i[1])&&(i[0]=e[0])):u.push(i=e);for(var o,e,g=-(1/0),t=u.length-1,r=0,i=u[t];t>=r;i=e,++r)e=u[r],(o=a(i[1],e[0]))>g&&(g=o,f=e[0],h=i[1])}return M=x=null,f===1/0||s===1/0?[[NaN,NaN],[NaN,NaN]]:[[f,s],[h,p]]}}(),ao.geo.centroid=function(n){Ea=Aa=Ca=za=La=qa=Ta=Ra=Da=Pa=Ua=0,ao.geo.stream(n,ja);var t=Da,e=Pa,r=Ua,i=t*t+e*e+r*r;return jo>i&&(t=qa,e=Ta,r=Ra,Uo>Aa&&(t=Ca,e=za,r=La),i=t*t+e*e+r*r,jo>i)?[NaN,NaN]:[Math.atan2(e,t)*Zo,tn(r/Math.sqrt(i))*Zo]};var Ea,Aa,Ca,za,La,qa,Ta,Ra,Da,Pa,Ua,ja={sphere:b,point:St,lineStart:Nt,lineEnd:Et,polygonStart:function(){ja.lineStart=At},polygonEnd:function(){ja.lineStart=Nt}},Fa=Rt(zt,jt,Ht,[-Fo,-Fo/2]),Ha=1e9;ao.geo.clipExtent=function(){var n,t,e,r,i,u,o={stream:function(n){return i&&(i.valid=!1),i=u(n),i.valid=!0,i},extent:function(a){return arguments.length?(u=Zt(n=+a[0][0],t=+a[0][1],e=+a[1][0],r=+a[1][1]),i&&(i.valid=!1,i=null),o):[[n,t],[e,r]]}};return o.extent([[0,0],[960,500]])},(ao.geo.conicEqualArea=function(){return Vt(Xt)}).raw=Xt,ao.geo.albers=function(){return ao.geo.conicEqualArea().rotate([96,0]).center([-.6,38.7]).parallels([29.5,45.5]).scale(1070)},ao.geo.albersUsa=function(){function n(n){var u=n[0],o=n[1];return t=null,e(u,o),t||(r(u,o),t)||i(u,o),t}var t,e,r,i,u=ao.geo.albers(),o=ao.geo.conicEqualArea().rotate([154,0]).center([-2,58.5]).parallels([55,65]),a=ao.geo.conicEqualArea().rotate([157,0]).center([-3,19.9]).parallels([8,18]),l={point:function(n,e){t=[n,e]}};return n.invert=function(n){var t=u.scale(),e=u.translate(),r=(n[0]-e[0])/t,i=(n[1]-e[1])/t;return(i>=.12&&.234>i&&r>=-.425&&-.214>r?o:i>=.166&&.234>i&&r>=-.214&&-.115>r?a:u).invert(n)},n.stream=function(n){var t=u.stream(n),e=o.stream(n),r=a.stream(n);return{point:function(n,i){t.point(n,i),e.point(n,i),r.point(n,i)},sphere:function(){t.sphere(),e.sphere(),r.sphere()},lineStart:function(){t.lineStart(),e.lineStart(),r.lineStart()},lineEnd:function(){t.lineEnd(),e.lineEnd(),r.lineEnd()},polygonStart:function(){t.polygonStart(),e.polygonStart(),r.polygonStart()},polygonEnd:function(){t.polygonEnd(),e.polygonEnd(),r.polygonEnd()}}},n.precision=function(t){return arguments.length?(u.precision(t),o.precision(t),a.precision(t),n):u.precision()},n.scale=function(t){return arguments.length?(u.scale(t),o.scale(.35*t),a.scale(t),n.translate(u.translate())):u.scale()},n.translate=function(t){if(!arguments.length)return u.translate();var c=u.scale(),f=+t[0],s=+t[1];return e=u.translate(t).clipExtent([[f-.455*c,s-.238*c],[f+.455*c,s+.238*c]]).stream(l).point,r=o.translate([f-.307*c,s+.201*c]).clipExtent([[f-.425*c+Uo,s+.12*c+Uo],[f-.214*c-Uo,s+.234*c-Uo]]).stream(l).point,i=a.translate([f-.205*c,s+.212*c]).clipExtent([[f-.214*c+Uo,s+.166*c+Uo],[f-.115*c-Uo,s+.234*c-Uo]]).stream(l).point,n},n.scale(1070)};var Oa,Ia,Ya,Za,Va,Xa,$a={point:b,lineStart:b,lineEnd:b,polygonStart:function(){Ia=0,$a.lineStart=$t},polygonEnd:function(){$a.lineStart=$a.lineEnd=$a.point=b,Oa+=xo(Ia/2)}},Ba={point:Bt,lineStart:b,lineEnd:b,polygonStart:b,polygonEnd:b},Wa={point:Gt,lineStart:Kt,lineEnd:Qt,polygonStart:function(){Wa.lineStart=ne},polygonEnd:function(){Wa.point=Gt,Wa.lineStart=Kt,Wa.lineEnd=Qt}};ao.geo.path=function(){function n(n){return n&&("function"==typeof a&&u.pointRadius(+a.apply(this,arguments)),o&&o.valid||(o=i(u)),ao.geo.stream(n,o)),u.result()}function t(){return o=null,n}var e,r,i,u,o,a=4.5;return n.area=function(n){return Oa=0,ao.geo.stream(n,i($a)),Oa},n.centroid=function(n){return Ca=za=La=qa=Ta=Ra=Da=Pa=Ua=0,ao.geo.stream(n,i(Wa)),Ua?[Da/Ua,Pa/Ua]:Ra?[qa/Ra,Ta/Ra]:La?[Ca/La,za/La]:[NaN,NaN]},n.bounds=function(n){return Va=Xa=-(Ya=Za=1/0),ao.geo.stream(n,i(Ba)),[[Ya,Za],[Va,Xa]]},n.projection=function(n){return arguments.length?(i=(e=n)?n.stream||re(n):m,t()):e},n.context=function(n){return arguments.length?(u=null==(r=n)?new Wt:new te(n),"function"!=typeof a&&u.pointRadius(a),t()):r},n.pointRadius=function(t){return arguments.length?(a="function"==typeof t?t:(u.pointRadius(+t),+t),n):a},n.projection(ao.geo.albersUsa()).context(null)},ao.geo.transform=function(n){return{stream:function(t){var e=new ie(t);for(var r in n)e[r]=n[r];return e}}},ie.prototype={point:function(n,t){this.stream.point(n,t)},sphere:function(){this.stream.sphere()},lineStart:function(){this.stream.lineStart()},lineEnd:function(){this.stream.lineEnd()},polygonStart:function(){this.stream.polygonStart()},polygonEnd:function(){this.stream.polygonEnd()}},ao.geo.projection=oe,ao.geo.projectionMutator=ae,(ao.geo.equirectangular=function(){return oe(ce)}).raw=ce.invert=ce,ao.geo.rotation=function(n){function t(t){return t=n(t[0]*Yo,t[1]*Yo),t[0]*=Zo,t[1]*=Zo,t}return n=se(n[0]%360*Yo,n[1]*Yo,n.length>2?n[2]*Yo:0),t.invert=function(t){return t=n.invert(t[0]*Yo,t[1]*Yo),t[0]*=Zo,t[1]*=Zo,t},t},fe.invert=ce,ao.geo.circle=function(){function n(){var n="function"==typeof r?r.apply(this,arguments):r,t=se(-n[0]*Yo,-n[1]*Yo,0).invert,i=[];return e(null,null,1,{point:function(n,e){i.push(n=t(n,e)),n[0]*=Zo,n[1]*=Zo}}),{type:"Polygon",coordinates:[i]}}var t,e,r=[0,0],i=6;return n.origin=function(t){return arguments.length?(r=t,n):r},n.angle=function(r){return arguments.length?(e=ve((t=+r)*Yo,i*Yo),n):t},n.precision=function(r){return arguments.length?(e=ve(t*Yo,(i=+r)*Yo),n):i},n.angle(90)},ao.geo.distance=function(n,t){var e,r=(t[0]-n[0])*Yo,i=n[1]*Yo,u=t[1]*Yo,o=Math.sin(r),a=Math.cos(r),l=Math.sin(i),c=Math.cos(i),f=Math.sin(u),s=Math.cos(u);return Math.atan2(Math.sqrt((e=s*o)*e+(e=c*f-l*s*a)*e),l*f+c*s*a)},ao.geo.graticule=function(){function n(){return{type:"MultiLineString",coordinates:t()}}function t(){return ao.range(Math.ceil(u/d)*d,i,d).map(h).concat(ao.range(Math.ceil(c/y)*y,l,y).map(p)).concat(ao.range(Math.ceil(r/g)*g,e,g).filter(function(n){return xo(n%d)>Uo}).map(f)).concat(ao.range(Math.ceil(a/v)*v,o,v).filter(function(n){return xo(n%y)>Uo}).map(s))}var e,r,i,u,o,a,l,c,f,s,h,p,g=10,v=g,d=90,y=360,m=2.5;return n.lines=function(){return t().map(function(n){return{type:"LineString",coordinates:n}})},n.outline=function(){return{type:"Polygon",coordinates:[h(u).concat(p(l).slice(1),h(i).reverse().slice(1),p(c).reverse().slice(1))]}},n.extent=function(t){return arguments.length?n.majorExtent(t).minorExtent(t):n.minorExtent()},n.majorExtent=function(t){return arguments.length?(u=+t[0][0],i=+t[1][0],c=+t[0][1],l=+t[1][1],u>i&&(t=u,u=i,i=t),c>l&&(t=c,c=l,l=t),n.precision(m)):[[u,c],[i,l]]},n.minorExtent=function(t){return arguments.length?(r=+t[0][0],e=+t[1][0],a=+t[0][1],o=+t[1][1],r>e&&(t=r,r=e,e=t),a>o&&(t=a,a=o,o=t),n.precision(m)):[[r,a],[e,o]]},n.step=function(t){return arguments.length?n.majorStep(t).minorStep(t):n.minorStep()},n.majorStep=function(t){return arguments.length?(d=+t[0],y=+t[1],n):[d,y]},n.minorStep=function(t){return arguments.length?(g=+t[0],v=+t[1],n):[g,v]},n.precision=function(t){return arguments.length?(m=+t,f=ye(a,o,90),s=me(r,e,m),h=ye(c,l,90),p=me(u,i,m),n):m},n.majorExtent([[-180,-90+Uo],[180,90-Uo]]).minorExtent([[-180,-80-Uo],[180,80+Uo]])},ao.geo.greatArc=function(){function n(){return{type:"LineString",coordinates:[t||r.apply(this,arguments),e||i.apply(this,arguments)]}}var t,e,r=Me,i=xe;return n.distance=function(){return ao.geo.distance(t||r.apply(this,arguments),e||i.apply(this,arguments))},n.source=function(e){return arguments.length?(r=e,t="function"==typeof e?null:e,n):r},n.target=function(t){return arguments.length?(i=t,e="function"==typeof t?null:t,n):i},n.precision=function(){return arguments.length?n:0},n},ao.geo.interpolate=function(n,t){return be(n[0]*Yo,n[1]*Yo,t[0]*Yo,t[1]*Yo)},ao.geo.length=function(n){return Ja=0,ao.geo.stream(n,Ga),Ja};var Ja,Ga={sphere:b,point:b,lineStart:_e,lineEnd:b,polygonStart:b,polygonEnd:b},Ka=we(function(n){return Math.sqrt(2/(1+n))},function(n){return 2*Math.asin(n/2)});(ao.geo.azimuthalEqualArea=function(){return oe(Ka)}).raw=Ka;var Qa=we(function(n){var t=Math.acos(n);return t&&t/Math.sin(t)},m);(ao.geo.azimuthalEquidistant=function(){return oe(Qa)}).raw=Qa,(ao.geo.conicConformal=function(){return Vt(Se)}).raw=Se,(ao.geo.conicEquidistant=function(){return Vt(ke)}).raw=ke;var nl=we(function(n){return 1/n},Math.atan);(ao.geo.gnomonic=function(){return oe(nl)}).raw=nl,Ne.invert=function(n,t){return[n,2*Math.atan(Math.exp(t))-Io]},(ao.geo.mercator=function(){return Ee(Ne)}).raw=Ne;var tl=we(function(){return 1},Math.asin);(ao.geo.orthographic=function(){return oe(tl)}).raw=tl;var el=we(function(n){return 1/(1+n)},function(n){return 2*Math.atan(n)});(ao.geo.stereographic=function(){return oe(el)}).raw=el,Ae.invert=function(n,t){return[-t,2*Math.atan(Math.exp(n))-Io]},(ao.geo.transverseMercator=function(){var n=Ee(Ae),t=n.center,e=n.rotate;return n.center=function(n){return n?t([-n[1],n[0]]):(n=t(),[n[1],-n[0]])},n.rotate=function(n){return n?e([n[0],n[1],n.length>2?n[2]+90:90]):(n=e(),[n[0],n[1],n[2]-90])},e([0,0,90])}).raw=Ae,ao.geom={},ao.geom.hull=function(n){function t(n){if(n.length<3)return[];var t,i=En(e),u=En(r),o=n.length,a=[],l=[];for(t=0;o>t;t++)a.push([+i.call(this,n[t],t),+u.call(this,n[t],t),t]);for(a.sort(qe),t=0;o>t;t++)l.push([a[t][0],-a[t][1]]);var c=Le(a),f=Le(l),s=f[0]===c[0],h=f[f.length-1]===c[c.length-1],p=[];for(t=c.length-1;t>=0;--t)p.push(n[a[c[t]][2]]);for(t=+s;t=r&&c.x<=u&&c.y>=i&&c.y<=o?[[r,o],[u,o],[u,i],[r,i]]:[];f.point=n[a]}),t}function e(n){return n.map(function(n,t){return{x:Math.round(u(n,t)/Uo)*Uo,y:Math.round(o(n,t)/Uo)*Uo,i:t}})}var r=Ce,i=ze,u=r,o=i,a=sl;return n?t(n):(t.links=function(n){return ar(e(n)).edges.filter(function(n){return n.l&&n.r}).map(function(t){return{source:n[t.l.i],target:n[t.r.i]}})},t.triangles=function(n){var t=[];return ar(e(n)).cells.forEach(function(e,r){for(var i,u,o=e.site,a=e.edges.sort(Ve),l=-1,c=a.length,f=a[c-1].edge,s=f.l===o?f.r:f.l;++l=c,h=r>=f,p=h<<1|s;n.leaf=!1,n=n.nodes[p]||(n.nodes[p]=hr()),s?i=c:a=c,h?o=f:l=f,u(n,t,e,r,i,o,a,l)}var f,s,h,p,g,v,d,y,m,M=En(a),x=En(l);if(null!=t)v=t,d=e,y=r,m=i;else if(y=m=-(v=d=1/0),s=[],h=[],g=n.length,o)for(p=0;g>p;++p)f=n[p],f.xy&&(y=f.x),f.y>m&&(m=f.y),s.push(f.x),h.push(f.y);else for(p=0;g>p;++p){var b=+M(f=n[p],p),_=+x(f,p);v>b&&(v=b),d>_&&(d=_),b>y&&(y=b),_>m&&(m=_),s.push(b),h.push(_)}var w=y-v,S=m-d;w>S?m=d+w:y=v+S;var k=hr();if(k.add=function(n){u(k,n,+M(n,++p),+x(n,p),v,d,y,m)},k.visit=function(n){pr(n,k,v,d,y,m)},k.find=function(n){return gr(k,n[0],n[1],v,d,y,m)},p=-1,null==t){for(;++p=0?n.slice(0,t):n,r=t>=0?n.slice(t+1):"in";return e=vl.get(e)||gl,r=dl.get(r)||m,br(r(e.apply(null,lo.call(arguments,1))))},ao.interpolateHcl=Rr,ao.interpolateHsl=Dr,ao.interpolateLab=Pr,ao.interpolateRound=Ur,ao.transform=function(n){var t=fo.createElementNS(ao.ns.prefix.svg,"g");return(ao.transform=function(n){if(null!=n){t.setAttribute("transform",n);var e=t.transform.baseVal.consolidate()}return new jr(e?e.matrix:yl)})(n)},jr.prototype.toString=function(){return"translate("+this.translate+")rotate("+this.rotate+")skewX("+this.skew+")scale("+this.scale+")"};var yl={a:1,b:0,c:0,d:1,e:0,f:0};ao.interpolateTransform=$r,ao.layout={},ao.layout.bundle=function(){return function(n){for(var t=[],e=-1,r=n.length;++ea*a/y){if(v>l){var c=t.charge/l;n.px-=u*c,n.py-=o*c}return!0}if(t.point&&l&&v>l){var c=t.pointCharge/l;n.px-=u*c,n.py-=o*c}}return!t.charge}}function t(n){n.px=ao.event.x,n.py=ao.event.y,l.resume()}var e,r,i,u,o,a,l={},c=ao.dispatch("start","tick","end"),f=[1,1],s=.9,h=ml,p=Ml,g=-30,v=xl,d=.1,y=.64,M=[],x=[];return l.tick=function(){if((i*=.99)<.005)return e=null,c.end({type:"end",alpha:i=0}),!0;var t,r,l,h,p,v,y,m,b,_=M.length,w=x.length;for(r=0;w>r;++r)l=x[r],h=l.source,p=l.target,m=p.x-h.x,b=p.y-h.y,(v=m*m+b*b)&&(v=i*o[r]*((v=Math.sqrt(v))-u[r])/v,m*=v,b*=v,p.x-=m*(y=h.weight+p.weight?h.weight/(h.weight+p.weight):.5),p.y-=b*y,h.x+=m*(y=1-y),h.y+=b*y);if((y=i*d)&&(m=f[0]/2,b=f[1]/2,r=-1,y))for(;++r<_;)l=M[r],l.x+=(m-l.x)*y,l.y+=(b-l.y)*y;if(g)for(ri(t=ao.geom.quadtree(M),i,a),r=-1;++r<_;)(l=M[r]).fixed||t.visit(n(l));for(r=-1;++r<_;)l=M[r],l.fixed?(l.x=l.px,l.y=l.py):(l.x-=(l.px-(l.px=l.x))*s,l.y-=(l.py-(l.py=l.y))*s);c.tick({type:"tick",alpha:i})},l.nodes=function(n){return arguments.length?(M=n,l):M},l.links=function(n){return arguments.length?(x=n,l):x},l.size=function(n){return arguments.length?(f=n,l):f},l.linkDistance=function(n){return arguments.length?(h="function"==typeof n?n:+n,l):h},l.distance=l.linkDistance,l.linkStrength=function(n){return arguments.length?(p="function"==typeof n?n:+n,l):p},l.friction=function(n){return arguments.length?(s=+n,l):s},l.charge=function(n){return arguments.length?(g="function"==typeof n?n:+n,l):g},l.chargeDistance=function(n){return arguments.length?(v=n*n,l):Math.sqrt(v)},l.gravity=function(n){return arguments.length?(d=+n,l):d},l.theta=function(n){return arguments.length?(y=n*n,l):Math.sqrt(y)},l.alpha=function(n){return arguments.length?(n=+n,i?n>0?i=n:(e.c=null,e.t=NaN,e=null,c.end({type:"end",alpha:i=0})):n>0&&(c.start({type:"start",alpha:i=n}),e=qn(l.tick)),l):i},l.start=function(){function n(n,r){if(!e){for(e=new Array(i),l=0;i>l;++l)e[l]=[];for(l=0;c>l;++l){var u=x[l];e[u.source.index].push(u.target),e[u.target.index].push(u.source)}}for(var o,a=e[t],l=-1,f=a.length;++lt;++t)(r=M[t]).index=t,r.weight=0;for(t=0;c>t;++t)r=x[t],"number"==typeof r.source&&(r.source=M[r.source]),"number"==typeof r.target&&(r.target=M[r.target]),++r.source.weight,++r.target.weight;for(t=0;i>t;++t)r=M[t],isNaN(r.x)&&(r.x=n("x",s)),isNaN(r.y)&&(r.y=n("y",v)),isNaN(r.px)&&(r.px=r.x),isNaN(r.py)&&(r.py=r.y);if(u=[],"function"==typeof h)for(t=0;c>t;++t)u[t]=+h.call(this,x[t],t);else for(t=0;c>t;++t)u[t]=h;if(o=[],"function"==typeof p)for(t=0;c>t;++t)o[t]=+p.call(this,x[t],t);else for(t=0;c>t;++t)o[t]=p;if(a=[],"function"==typeof g)for(t=0;i>t;++t)a[t]=+g.call(this,M[t],t);else for(t=0;i>t;++t)a[t]=g;return l.resume()},l.resume=function(){return l.alpha(.1)},l.stop=function(){return l.alpha(0)},l.drag=function(){return r||(r=ao.behavior.drag().origin(m).on("dragstart.force",Qr).on("drag.force",t).on("dragend.force",ni)),arguments.length?void this.on("mouseover.force",ti).on("mouseout.force",ei).call(r):r},ao.rebind(l,c,"on")};var ml=20,Ml=1,xl=1/0;ao.layout.hierarchy=function(){function n(i){var u,o=[i],a=[];for(i.depth=0;null!=(u=o.pop());)if(a.push(u),(c=e.call(n,u,u.depth))&&(l=c.length)){for(var l,c,f;--l>=0;)o.push(f=c[l]),f.parent=u,f.depth=u.depth+1;r&&(u.value=0),u.children=c}else r&&(u.value=+r.call(n,u,u.depth)||0),delete u.children;return oi(i,function(n){var e,i;t&&(e=n.children)&&e.sort(t),r&&(i=n.parent)&&(i.value+=n.value)}),a}var t=ci,e=ai,r=li;return n.sort=function(e){return arguments.length?(t=e,n):t},n.children=function(t){return arguments.length?(e=t,n):e},n.value=function(t){return arguments.length?(r=t,n):r},n.revalue=function(t){return r&&(ui(t,function(n){n.children&&(n.value=0)}),oi(t,function(t){var e;t.children||(t.value=+r.call(n,t,t.depth)||0),(e=t.parent)&&(e.value+=t.value)})),t},n},ao.layout.partition=function(){function n(t,e,r,i){var u=t.children;if(t.x=e,t.y=t.depth*i,t.dx=r,t.dy=i,u&&(o=u.length)){var o,a,l,c=-1;for(r=t.value?r/t.value:0;++cs?-1:1),g=ao.sum(c),v=g?(s-l*p)/g:0,d=ao.range(l),y=[];return null!=e&&d.sort(e===bl?function(n,t){return c[t]-c[n]}:function(n,t){return e(o[n],o[t])}),d.forEach(function(n){y[n]={data:o[n],value:a=c[n],startAngle:f,endAngle:f+=a*v+p,padAngle:h}}),y}var t=Number,e=bl,r=0,i=Ho,u=0;return n.value=function(e){return arguments.length?(t=e,n):t},n.sort=function(t){return arguments.length?(e=t,n):e},n.startAngle=function(t){return arguments.length?(r=t,n):r},n.endAngle=function(t){return arguments.length?(i=t,n):i},n.padAngle=function(t){return arguments.length?(u=t,n):u},n};var bl={};ao.layout.stack=function(){function n(a,l){if(!(h=a.length))return a;var c=a.map(function(e,r){return t.call(n,e,r)}),f=c.map(function(t){return t.map(function(t,e){return[u.call(n,t,e),o.call(n,t,e)]})}),s=e.call(n,f,l);c=ao.permute(c,s),f=ao.permute(f,s);var h,p,g,v,d=r.call(n,f,l),y=c[0].length;for(g=0;y>g;++g)for(i.call(n,c[0][g],v=d[g],f[0][g][1]),p=1;h>p;++p)i.call(n,c[p][g],v+=f[p-1][g][1],f[p][g][1]);return a}var t=m,e=gi,r=vi,i=pi,u=si,o=hi;return n.values=function(e){return arguments.length?(t=e,n):t},n.order=function(t){return arguments.length?(e="function"==typeof t?t:_l.get(t)||gi,n):e},n.offset=function(t){return arguments.length?(r="function"==typeof t?t:wl.get(t)||vi,n):r},n.x=function(t){return arguments.length?(u=t,n):u},n.y=function(t){return arguments.length?(o=t,n):o},n.out=function(t){return arguments.length?(i=t,n):i},n};var _l=ao.map({"inside-out":function(n){var t,e,r=n.length,i=n.map(di),u=n.map(yi),o=ao.range(r).sort(function(n,t){return i[n]-i[t]}),a=0,l=0,c=[],f=[];for(t=0;r>t;++t)e=o[t],l>a?(a+=u[e],c.push(e)):(l+=u[e],f.push(e));return f.reverse().concat(c)},reverse:function(n){return ao.range(n.length).reverse()},"default":gi}),wl=ao.map({silhouette:function(n){var t,e,r,i=n.length,u=n[0].length,o=[],a=0,l=[];for(e=0;u>e;++e){for(t=0,r=0;i>t;t++)r+=n[t][e][1];r>a&&(a=r),o.push(r)}for(e=0;u>e;++e)l[e]=(a-o[e])/2;return l},wiggle:function(n){var t,e,r,i,u,o,a,l,c,f=n.length,s=n[0],h=s.length,p=[];for(p[0]=l=c=0,e=1;h>e;++e){for(t=0,i=0;f>t;++t)i+=n[t][e][1];for(t=0,u=0,a=s[e][0]-s[e-1][0];f>t;++t){for(r=0,o=(n[t][e][1]-n[t][e-1][1])/(2*a);t>r;++r)o+=(n[r][e][1]-n[r][e-1][1])/a;u+=o*n[t][e][1]}p[e]=l-=i?u/i*a:0,c>l&&(c=l)}for(e=0;h>e;++e)p[e]-=c;return p},expand:function(n){var t,e,r,i=n.length,u=n[0].length,o=1/i,a=[];for(e=0;u>e;++e){for(t=0,r=0;i>t;t++)r+=n[t][e][1];if(r)for(t=0;i>t;t++)n[t][e][1]/=r;else for(t=0;i>t;t++)n[t][e][1]=o}for(e=0;u>e;++e)a[e]=0;return a},zero:vi});ao.layout.histogram=function(){function n(n,u){for(var o,a,l=[],c=n.map(e,this),f=r.call(this,c,u),s=i.call(this,f,c,u),u=-1,h=c.length,p=s.length-1,g=t?1:1/h;++u0)for(u=-1;++u=f[0]&&a<=f[1]&&(o=l[ao.bisect(s,a,1,p)-1],o.y+=g,o.push(n[u]));return l}var t=!0,e=Number,r=bi,i=Mi;return n.value=function(t){return arguments.length?(e=t,n):e},n.range=function(t){return arguments.length?(r=En(t),n):r},n.bins=function(t){return arguments.length?(i="number"==typeof t?function(n){return xi(n,t)}:En(t),n):i},n.frequency=function(e){return arguments.length?(t=!!e,n):t},n},ao.layout.pack=function(){function n(n,u){var o=e.call(this,n,u),a=o[0],l=i[0],c=i[1],f=null==t?Math.sqrt:"function"==typeof t?t:function(){return t};if(a.x=a.y=0,oi(a,function(n){n.r=+f(n.value)}),oi(a,Ni),r){var s=r*(t?1:Math.max(2*a.r/l,2*a.r/c))/2;oi(a,function(n){n.r+=s}),oi(a,Ni),oi(a,function(n){n.r-=s})}return Ci(a,l/2,c/2,t?1:1/Math.max(2*a.r/l,2*a.r/c)),o}var t,e=ao.layout.hierarchy().sort(_i),r=0,i=[1,1];return n.size=function(t){return arguments.length?(i=t,n):i},n.radius=function(e){return arguments.length?(t=null==e||"function"==typeof e?e:+e,n):t},n.padding=function(t){return arguments.length?(r=+t,n):r},ii(n,e)},ao.layout.tree=function(){function n(n,i){var f=o.call(this,n,i),s=f[0],h=t(s);if(oi(h,e),h.parent.m=-h.z,ui(h,r),c)ui(s,u);else{var p=s,g=s,v=s;ui(s,function(n){n.xg.x&&(g=n),n.depth>v.depth&&(v=n)});var d=a(p,g)/2-p.x,y=l[0]/(g.x+a(g,p)/2+d),m=l[1]/(v.depth||1);ui(s,function(n){n.x=(n.x+d)*y,n.y=n.depth*m})}return f}function t(n){for(var t,e={A:null,children:[n]},r=[e];null!=(t=r.pop());)for(var i,u=t.children,o=0,a=u.length;a>o;++o)r.push((u[o]=i={_:u[o],parent:t,children:(i=u[o].children)&&i.slice()||[],A:null,a:null,z:0,m:0,c:0,s:0,t:null,i:o}).a=i);return e.children[0]}function e(n){var t=n.children,e=n.parent.children,r=n.i?e[n.i-1]:null;if(t.length){Di(n);var u=(t[0].z+t[t.length-1].z)/2;r?(n.z=r.z+a(n._,r._),n.m=n.z-u):n.z=u}else r&&(n.z=r.z+a(n._,r._));n.parent.A=i(n,r,n.parent.A||e[0])}function r(n){n._.x=n.z+n.parent.m,n.m+=n.parent.m}function i(n,t,e){if(t){for(var r,i=n,u=n,o=t,l=i.parent.children[0],c=i.m,f=u.m,s=o.m,h=l.m;o=Ti(o),i=qi(i),o&&i;)l=qi(l),u=Ti(u),u.a=n,r=o.z+s-i.z-c+a(o._,i._),r>0&&(Ri(Pi(o,n,e),n,r),c+=r,f+=r),s+=o.m,c+=i.m,h+=l.m,f+=u.m;o&&!Ti(u)&&(u.t=o,u.m+=s-f),i&&!qi(l)&&(l.t=i,l.m+=c-h,e=n)}return e}function u(n){n.x*=l[0],n.y=n.depth*l[1]}var o=ao.layout.hierarchy().sort(null).value(null),a=Li,l=[1,1],c=null;return n.separation=function(t){return arguments.length?(a=t,n):a},n.size=function(t){return arguments.length?(c=null==(l=t)?u:null,n):c?null:l},n.nodeSize=function(t){return arguments.length?(c=null==(l=t)?null:u,n):c?l:null},ii(n,o)},ao.layout.cluster=function(){function n(n,u){var o,a=t.call(this,n,u),l=a[0],c=0;oi(l,function(n){var t=n.children;t&&t.length?(n.x=ji(t),n.y=Ui(t)):(n.x=o?c+=e(n,o):0,n.y=0,o=n)});var f=Fi(l),s=Hi(l),h=f.x-e(f,s)/2,p=s.x+e(s,f)/2;return oi(l,i?function(n){n.x=(n.x-l.x)*r[0],n.y=(l.y-n.y)*r[1]}:function(n){n.x=(n.x-h)/(p-h)*r[0],n.y=(1-(l.y?n.y/l.y:1))*r[1]}),a}var t=ao.layout.hierarchy().sort(null).value(null),e=Li,r=[1,1],i=!1;return n.separation=function(t){return arguments.length?(e=t,n):e},n.size=function(t){return arguments.length?(i=null==(r=t),n):i?null:r},n.nodeSize=function(t){return arguments.length?(i=null!=(r=t),n):i?r:null},ii(n,t)},ao.layout.treemap=function(){function n(n,t){for(var e,r,i=-1,u=n.length;++it?0:t),e.area=isNaN(r)||0>=r?0:r}function t(e){var u=e.children;if(u&&u.length){var o,a,l,c=s(e),f=[],h=u.slice(),g=1/0,v="slice"===p?c.dx:"dice"===p?c.dy:"slice-dice"===p?1&e.depth?c.dy:c.dx:Math.min(c.dx,c.dy);for(n(h,c.dx*c.dy/e.value),f.area=0;(l=h.length)>0;)f.push(o=h[l-1]),f.area+=o.area,"squarify"!==p||(a=r(f,v))<=g?(h.pop(),g=a):(f.area-=f.pop().area,i(f,v,c,!1),v=Math.min(c.dx,c.dy),f.length=f.area=0,g=1/0);f.length&&(i(f,v,c,!0),f.length=f.area=0),u.forEach(t)}}function e(t){var r=t.children;if(r&&r.length){var u,o=s(t),a=r.slice(),l=[];for(n(a,o.dx*o.dy/t.value),l.area=0;u=a.pop();)l.push(u),l.area+=u.area,null!=u.z&&(i(l,u.z?o.dx:o.dy,o,!a.length),l.length=l.area=0);r.forEach(e)}}function r(n,t){for(var e,r=n.area,i=0,u=1/0,o=-1,a=n.length;++oe&&(u=e),e>i&&(i=e));return r*=r,t*=t,r?Math.max(t*i*g/r,r/(t*u*g)):1/0}function i(n,t,e,r){var i,u=-1,o=n.length,a=e.x,c=e.y,f=t?l(n.area/t):0; if(t==e.dx){for((r||f>e.dy)&&(f=e.dy);++ue.dx)&&(f=e.dx);++ue&&(t=1),1>e&&(n=0),function(){var e,r,i;do e=2*Math.random()-1,r=2*Math.random()-1,i=e*e+r*r;while(!i||i>1);return n+t*e*Math.sqrt(-2*Math.log(i)/i)}},logNormal:function(){var n=ao.random.normal.apply(ao,arguments);return function(){return Math.exp(n())}},bates:function(n){var t=ao.random.irwinHall(n);return function(){return t()/n}},irwinHall:function(n){return function(){for(var t=0,e=0;n>e;e++)t+=Math.random();return t}}},ao.scale={};var Sl={floor:m,ceil:m};ao.scale.linear=function(){return Wi([0,1],[0,1],Mr,!1)};var kl={s:1,g:1,p:1,r:1,e:1};ao.scale.log=function(){return ru(ao.scale.linear().domain([0,1]),10,!0,[1,10])};var Nl=ao.format(".0e"),El={floor:function(n){return-Math.ceil(-n)},ceil:function(n){return-Math.floor(-n)}};ao.scale.pow=function(){return iu(ao.scale.linear(),1,[0,1])},ao.scale.sqrt=function(){return ao.scale.pow().exponent(.5)},ao.scale.ordinal=function(){return ou([],{t:"range",a:[[]]})},ao.scale.category10=function(){return ao.scale.ordinal().range(Al)},ao.scale.category20=function(){return ao.scale.ordinal().range(Cl)},ao.scale.category20b=function(){return ao.scale.ordinal().range(zl)},ao.scale.category20c=function(){return ao.scale.ordinal().range(Ll)};var Al=[2062260,16744206,2924588,14034728,9725885,9197131,14907330,8355711,12369186,1556175].map(xn),Cl=[2062260,11454440,16744206,16759672,2924588,10018698,14034728,16750742,9725885,12955861,9197131,12885140,14907330,16234194,8355711,13092807,12369186,14408589,1556175,10410725].map(xn),zl=[3750777,5395619,7040719,10264286,6519097,9216594,11915115,13556636,9202993,12426809,15186514,15190932,8666169,11356490,14049643,15177372,8077683,10834324,13528509,14589654].map(xn),Ll=[3244733,7057110,10406625,13032431,15095053,16616764,16625259,16634018,3253076,7652470,10607003,13101504,7695281,10394312,12369372,14342891,6513507,9868950,12434877,14277081].map(xn);ao.scale.quantile=function(){return au([],[])},ao.scale.quantize=function(){return lu(0,1,[0,1])},ao.scale.threshold=function(){return cu([.5],[0,1])},ao.scale.identity=function(){return fu([0,1])},ao.svg={},ao.svg.arc=function(){function n(){var n=Math.max(0,+e.apply(this,arguments)),c=Math.max(0,+r.apply(this,arguments)),f=o.apply(this,arguments)-Io,s=a.apply(this,arguments)-Io,h=Math.abs(s-f),p=f>s?0:1;if(n>c&&(g=c,c=n,n=g),h>=Oo)return t(c,p)+(n?t(n,1-p):"")+"Z";var g,v,d,y,m,M,x,b,_,w,S,k,N=0,E=0,A=[];if((y=(+l.apply(this,arguments)||0)/2)&&(d=u===ql?Math.sqrt(n*n+c*c):+u.apply(this,arguments),p||(E*=-1),c&&(E=tn(d/c*Math.sin(y))),n&&(N=tn(d/n*Math.sin(y)))),c){m=c*Math.cos(f+E),M=c*Math.sin(f+E),x=c*Math.cos(s-E),b=c*Math.sin(s-E);var C=Math.abs(s-f-2*E)<=Fo?0:1;if(E&&yu(m,M,x,b)===p^C){var z=(f+s)/2;m=c*Math.cos(z),M=c*Math.sin(z),x=b=null}}else m=M=0;if(n){_=n*Math.cos(s-N),w=n*Math.sin(s-N),S=n*Math.cos(f+N),k=n*Math.sin(f+N);var L=Math.abs(f-s+2*N)<=Fo?0:1;if(N&&yu(_,w,S,k)===1-p^L){var q=(f+s)/2;_=n*Math.cos(q),w=n*Math.sin(q),S=k=null}}else _=w=0;if(h>Uo&&(g=Math.min(Math.abs(c-n)/2,+i.apply(this,arguments)))>.001){v=c>n^p?0:1;var T=g,R=g;if(Fo>h){var D=null==S?[_,w]:null==x?[m,M]:Re([m,M],[S,k],[x,b],[_,w]),P=m-D[0],U=M-D[1],j=x-D[0],F=b-D[1],H=1/Math.sin(Math.acos((P*j+U*F)/(Math.sqrt(P*P+U*U)*Math.sqrt(j*j+F*F)))/2),O=Math.sqrt(D[0]*D[0]+D[1]*D[1]);R=Math.min(g,(n-O)/(H-1)),T=Math.min(g,(c-O)/(H+1))}if(null!=x){var I=mu(null==S?[_,w]:[S,k],[m,M],c,T,p),Y=mu([x,b],[_,w],c,T,p);g===T?A.push("M",I[0],"A",T,",",T," 0 0,",v," ",I[1],"A",c,",",c," 0 ",1-p^yu(I[1][0],I[1][1],Y[1][0],Y[1][1]),",",p," ",Y[1],"A",T,",",T," 0 0,",v," ",Y[0]):A.push("M",I[0],"A",T,",",T," 0 1,",v," ",Y[0])}else A.push("M",m,",",M);if(null!=S){var Z=mu([m,M],[S,k],n,-R,p),V=mu([_,w],null==x?[m,M]:[x,b],n,-R,p);g===R?A.push("L",V[0],"A",R,",",R," 0 0,",v," ",V[1],"A",n,",",n," 0 ",p^yu(V[1][0],V[1][1],Z[1][0],Z[1][1]),",",1-p," ",Z[1],"A",R,",",R," 0 0,",v," ",Z[0]):A.push("L",V[0],"A",R,",",R," 0 0,",v," ",Z[0])}else A.push("L",_,",",w)}else A.push("M",m,",",M),null!=x&&A.push("A",c,",",c," 0 ",C,",",p," ",x,",",b),A.push("L",_,",",w),null!=S&&A.push("A",n,",",n," 0 ",L,",",1-p," ",S,",",k);return A.push("Z"),A.join("")}function t(n,t){return"M0,"+n+"A"+n+","+n+" 0 1,"+t+" 0,"+-n+"A"+n+","+n+" 0 1,"+t+" 0,"+n}var e=hu,r=pu,i=su,u=ql,o=gu,a=vu,l=du;return n.innerRadius=function(t){return arguments.length?(e=En(t),n):e},n.outerRadius=function(t){return arguments.length?(r=En(t),n):r},n.cornerRadius=function(t){return arguments.length?(i=En(t),n):i},n.padRadius=function(t){return arguments.length?(u=t==ql?ql:En(t),n):u},n.startAngle=function(t){return arguments.length?(o=En(t),n):o},n.endAngle=function(t){return arguments.length?(a=En(t),n):a},n.padAngle=function(t){return arguments.length?(l=En(t),n):l},n.centroid=function(){var n=(+e.apply(this,arguments)+ +r.apply(this,arguments))/2,t=(+o.apply(this,arguments)+ +a.apply(this,arguments))/2-Io;return[Math.cos(t)*n,Math.sin(t)*n]},n};var ql="auto";ao.svg.line=function(){return Mu(m)};var Tl=ao.map({linear:xu,"linear-closed":bu,step:_u,"step-before":wu,"step-after":Su,basis:zu,"basis-open":Lu,"basis-closed":qu,bundle:Tu,cardinal:Eu,"cardinal-open":ku,"cardinal-closed":Nu,monotone:Fu});Tl.forEach(function(n,t){t.key=n,t.closed=/-closed$/.test(n)});var Rl=[0,2/3,1/3,0],Dl=[0,1/3,2/3,0],Pl=[0,1/6,2/3,1/6];ao.svg.line.radial=function(){var n=Mu(Hu);return n.radius=n.x,delete n.x,n.angle=n.y,delete n.y,n},wu.reverse=Su,Su.reverse=wu,ao.svg.area=function(){return Ou(m)},ao.svg.area.radial=function(){var n=Ou(Hu);return n.radius=n.x,delete n.x,n.innerRadius=n.x0,delete n.x0,n.outerRadius=n.x1,delete n.x1,n.angle=n.y,delete n.y,n.startAngle=n.y0,delete n.y0,n.endAngle=n.y1,delete n.y1,n},ao.svg.chord=function(){function n(n,a){var l=t(this,u,n,a),c=t(this,o,n,a);return"M"+l.p0+r(l.r,l.p1,l.a1-l.a0)+(e(l,c)?i(l.r,l.p1,l.r,l.p0):i(l.r,l.p1,c.r,c.p0)+r(c.r,c.p1,c.a1-c.a0)+i(c.r,c.p1,l.r,l.p0))+"Z"}function t(n,t,e,r){var i=t.call(n,e,r),u=a.call(n,i,r),o=l.call(n,i,r)-Io,f=c.call(n,i,r)-Io;return{r:u,a0:o,a1:f,p0:[u*Math.cos(o),u*Math.sin(o)],p1:[u*Math.cos(f),u*Math.sin(f)]}}function e(n,t){return n.a0==t.a0&&n.a1==t.a1}function r(n,t,e){return"A"+n+","+n+" 0 "+ +(e>Fo)+",1 "+t}function i(n,t,e,r){return"Q 0,0 "+r}var u=Me,o=xe,a=Iu,l=gu,c=vu;return n.radius=function(t){return arguments.length?(a=En(t),n):a},n.source=function(t){return arguments.length?(u=En(t),n):u},n.target=function(t){return arguments.length?(o=En(t),n):o},n.startAngle=function(t){return arguments.length?(l=En(t),n):l},n.endAngle=function(t){return arguments.length?(c=En(t),n):c},n},ao.svg.diagonal=function(){function n(n,i){var u=t.call(this,n,i),o=e.call(this,n,i),a=(u.y+o.y)/2,l=[u,{x:u.x,y:a},{x:o.x,y:a},o];return l=l.map(r),"M"+l[0]+"C"+l[1]+" "+l[2]+" "+l[3]}var t=Me,e=xe,r=Yu;return n.source=function(e){return arguments.length?(t=En(e),n):t},n.target=function(t){return arguments.length?(e=En(t),n):e},n.projection=function(t){return arguments.length?(r=t,n):r},n},ao.svg.diagonal.radial=function(){var n=ao.svg.diagonal(),t=Yu,e=n.projection;return n.projection=function(n){return arguments.length?e(Zu(t=n)):t},n},ao.svg.symbol=function(){function n(n,r){return(Ul.get(t.call(this,n,r))||$u)(e.call(this,n,r))}var t=Xu,e=Vu;return n.type=function(e){return arguments.length?(t=En(e),n):t},n.size=function(t){return arguments.length?(e=En(t),n):e},n};var Ul=ao.map({circle:$u,cross:function(n){var t=Math.sqrt(n/5)/2;return"M"+-3*t+","+-t+"H"+-t+"V"+-3*t+"H"+t+"V"+-t+"H"+3*t+"V"+t+"H"+t+"V"+3*t+"H"+-t+"V"+t+"H"+-3*t+"Z"},diamond:function(n){var t=Math.sqrt(n/(2*Fl)),e=t*Fl;return"M0,"+-t+"L"+e+",0 0,"+t+" "+-e+",0Z"},square:function(n){var t=Math.sqrt(n)/2;return"M"+-t+","+-t+"L"+t+","+-t+" "+t+","+t+" "+-t+","+t+"Z"},"triangle-down":function(n){var t=Math.sqrt(n/jl),e=t*jl/2;return"M0,"+e+"L"+t+","+-e+" "+-t+","+-e+"Z"},"triangle-up":function(n){var t=Math.sqrt(n/jl),e=t*jl/2;return"M0,"+-e+"L"+t+","+e+" "+-t+","+e+"Z"}});ao.svg.symbolTypes=Ul.keys();var jl=Math.sqrt(3),Fl=Math.tan(30*Yo);Co.transition=function(n){for(var t,e,r=Hl||++Zl,i=Ku(n),u=[],o=Ol||{time:Date.now(),ease:Nr,delay:0,duration:250},a=-1,l=this.length;++au;u++){i.push(t=[]);for(var e=this[u],a=0,l=e.length;l>a;a++)(r=e[a])&&n.call(r,r.__data__,a,u)&&t.push(r)}return Wu(i,this.namespace,this.id)},Yl.tween=function(n,t){var e=this.id,r=this.namespace;return arguments.length<2?this.node()[r][e].tween.get(n):Y(this,null==t?function(t){t[r][e].tween.remove(n)}:function(i){i[r][e].tween.set(n,t)})},Yl.attr=function(n,t){function e(){this.removeAttribute(a)}function r(){this.removeAttributeNS(a.space,a.local)}function i(n){return null==n?e:(n+="",function(){var t,e=this.getAttribute(a);return e!==n&&(t=o(e,n),function(n){this.setAttribute(a,t(n))})})}function u(n){return null==n?r:(n+="",function(){var t,e=this.getAttributeNS(a.space,a.local);return e!==n&&(t=o(e,n),function(n){this.setAttributeNS(a.space,a.local,t(n))})})}if(arguments.length<2){for(t in n)this.attr(t,n[t]);return this}var o="transform"==n?$r:Mr,a=ao.ns.qualify(n);return Ju(this,"attr."+n,t,a.local?u:i)},Yl.attrTween=function(n,t){function e(n,e){var r=t.call(this,n,e,this.getAttribute(i));return r&&function(n){this.setAttribute(i,r(n))}}function r(n,e){var r=t.call(this,n,e,this.getAttributeNS(i.space,i.local));return r&&function(n){this.setAttributeNS(i.space,i.local,r(n))}}var i=ao.ns.qualify(n);return this.tween("attr."+n,i.local?r:e)},Yl.style=function(n,e,r){function i(){this.style.removeProperty(n)}function u(e){return null==e?i:(e+="",function(){var i,u=t(this).getComputedStyle(this,null).getPropertyValue(n);return u!==e&&(i=Mr(u,e),function(t){this.style.setProperty(n,i(t),r)})})}var o=arguments.length;if(3>o){if("string"!=typeof n){2>o&&(e="");for(r in n)this.style(r,n[r],e);return this}r=""}return Ju(this,"style."+n,e,u)},Yl.styleTween=function(n,e,r){function i(i,u){var o=e.call(this,i,u,t(this).getComputedStyle(this,null).getPropertyValue(n));return o&&function(t){this.style.setProperty(n,o(t),r)}}return arguments.length<3&&(r=""),this.tween("style."+n,i)},Yl.text=function(n){return Ju(this,"text",n,Gu)},Yl.remove=function(){var n=this.namespace;return this.each("end.transition",function(){var t;this[n].count<2&&(t=this.parentNode)&&t.removeChild(this)})},Yl.ease=function(n){var t=this.id,e=this.namespace;return arguments.length<1?this.node()[e][t].ease:("function"!=typeof n&&(n=ao.ease.apply(ao,arguments)),Y(this,function(r){r[e][t].ease=n}))},Yl.delay=function(n){var t=this.id,e=this.namespace;return arguments.length<1?this.node()[e][t].delay:Y(this,"function"==typeof n?function(r,i,u){r[e][t].delay=+n.call(r,r.__data__,i,u)}:(n=+n,function(r){r[e][t].delay=n}))},Yl.duration=function(n){var t=this.id,e=this.namespace;return arguments.length<1?this.node()[e][t].duration:Y(this,"function"==typeof n?function(r,i,u){r[e][t].duration=Math.max(1,n.call(r,r.__data__,i,u))}:(n=Math.max(1,n),function(r){r[e][t].duration=n}))},Yl.each=function(n,t){var e=this.id,r=this.namespace;if(arguments.length<2){var i=Ol,u=Hl;try{Hl=e,Y(this,function(t,i,u){Ol=t[r][e],n.call(t,t.__data__,i,u)})}finally{Ol=i,Hl=u}}else Y(this,function(i){var u=i[r][e];(u.event||(u.event=ao.dispatch("start","end","interrupt"))).on(n,t)});return this},Yl.transition=function(){for(var n,t,e,r,i=this.id,u=++Zl,o=this.namespace,a=[],l=0,c=this.length;c>l;l++){a.push(n=[]);for(var t=this[l],f=0,s=t.length;s>f;f++)(e=t[f])&&(r=e[o][i],Qu(e,f,o,u,{time:r.time,ease:r.ease,delay:r.delay+r.duration,duration:r.duration})),n.push(e)}return Wu(a,o,u)},ao.svg.axis=function(){function n(n){n.each(function(){var n,c=ao.select(this),f=this.__chart__||e,s=this.__chart__=e.copy(),h=null==l?s.ticks?s.ticks.apply(s,a):s.domain():l,p=null==t?s.tickFormat?s.tickFormat.apply(s,a):m:t,g=c.selectAll(".tick").data(h,s),v=g.enter().insert("g",".domain").attr("class","tick").style("opacity",Uo),d=ao.transition(g.exit()).style("opacity",Uo).remove(),y=ao.transition(g.order()).style("opacity",1),M=Math.max(i,0)+o,x=Zi(s),b=c.selectAll(".domain").data([0]),_=(b.enter().append("path").attr("class","domain"),ao.transition(b));v.append("line"),v.append("text");var w,S,k,N,E=v.select("line"),A=y.select("line"),C=g.select("text").text(p),z=v.select("text"),L=y.select("text"),q="top"===r||"left"===r?-1:1;if("bottom"===r||"top"===r?(n=no,w="x",k="y",S="x2",N="y2",C.attr("dy",0>q?"0em":".71em").style("text-anchor","middle"),_.attr("d","M"+x[0]+","+q*u+"V0H"+x[1]+"V"+q*u)):(n=to,w="y",k="x",S="y2",N="x2",C.attr("dy",".32em").style("text-anchor",0>q?"end":"start"),_.attr("d","M"+q*u+","+x[0]+"H0V"+x[1]+"H"+q*u)),E.attr(N,q*i),z.attr(k,q*M),A.attr(S,0).attr(N,q*i),L.attr(w,0).attr(k,q*M),s.rangeBand){var T=s,R=T.rangeBand()/2;f=s=function(n){return T(n)+R}}else f.rangeBand?f=s:d.call(n,s,f);v.call(n,f,s),y.call(n,s,s)})}var t,e=ao.scale.linear(),r=Vl,i=6,u=6,o=3,a=[10],l=null;return n.scale=function(t){return arguments.length?(e=t,n):e},n.orient=function(t){return arguments.length?(r=t in Xl?t+"":Vl,n):r},n.ticks=function(){return arguments.length?(a=co(arguments),n):a},n.tickValues=function(t){return arguments.length?(l=t,n):l},n.tickFormat=function(e){return arguments.length?(t=e,n):t},n.tickSize=function(t){var e=arguments.length;return e?(i=+t,u=+arguments[e-1],n):i},n.innerTickSize=function(t){return arguments.length?(i=+t,n):i},n.outerTickSize=function(t){return arguments.length?(u=+t,n):u},n.tickPadding=function(t){return arguments.length?(o=+t,n):o},n.tickSubdivide=function(){return arguments.length&&n},n};var Vl="bottom",Xl={top:1,right:1,bottom:1,left:1};ao.svg.brush=function(){function n(t){t.each(function(){var t=ao.select(this).style("pointer-events","all").style("-webkit-tap-highlight-color","rgba(0,0,0,0)").on("mousedown.brush",u).on("touchstart.brush",u),o=t.selectAll(".background").data([0]);o.enter().append("rect").attr("class","background").style("visibility","hidden").style("cursor","crosshair"),t.selectAll(".extent").data([0]).enter().append("rect").attr("class","extent").style("cursor","move");var a=t.selectAll(".resize").data(v,m);a.exit().remove(),a.enter().append("g").attr("class",function(n){return"resize "+n}).style("cursor",function(n){return $l[n]}).append("rect").attr("x",function(n){return/[ew]$/.test(n)?-3:null}).attr("y",function(n){return/^[ns]/.test(n)?-3:null}).attr("width",6).attr("height",6).style("visibility","hidden"),a.style("display",n.empty()?"none":null);var l,s=ao.transition(t),h=ao.transition(o);c&&(l=Zi(c),h.attr("x",l[0]).attr("width",l[1]-l[0]),r(s)),f&&(l=Zi(f),h.attr("y",l[0]).attr("height",l[1]-l[0]),i(s)),e(s)})}function e(n){n.selectAll(".resize").attr("transform",function(n){return"translate("+s[+/e$/.test(n)]+","+h[+/^s/.test(n)]+")"})}function r(n){n.select(".extent").attr("x",s[0]),n.selectAll(".extent,.n>rect,.s>rect").attr("width",s[1]-s[0])}function i(n){n.select(".extent").attr("y",h[0]),n.selectAll(".extent,.e>rect,.w>rect").attr("height",h[1]-h[0])}function u(){function u(){32==ao.event.keyCode&&(C||(M=null,L[0]-=s[1],L[1]-=h[1],C=2),S())}function v(){32==ao.event.keyCode&&2==C&&(L[0]+=s[1],L[1]+=h[1],C=0,S())}function d(){var n=ao.mouse(b),t=!1;x&&(n[0]+=x[0],n[1]+=x[1]),C||(ao.event.altKey?(M||(M=[(s[0]+s[1])/2,(h[0]+h[1])/2]),L[0]=s[+(n[0]f?(i=r,r=f):i=f),v[0]!=r||v[1]!=i?(e?a=null:o=null,v[0]=r,v[1]=i,!0):void 0}function m(){d(),k.style("pointer-events","all").selectAll(".resize").style("display",n.empty()?"none":null),ao.select("body").style("cursor",null),q.on("mousemove.brush",null).on("mouseup.brush",null).on("touchmove.brush",null).on("touchend.brush",null).on("keydown.brush",null).on("keyup.brush",null),z(),w({type:"brushend"})}var M,x,b=this,_=ao.select(ao.event.target),w=l.of(b,arguments),k=ao.select(b),N=_.datum(),E=!/^(n|s)$/.test(N)&&c,A=!/^(e|w)$/.test(N)&&f,C=_.classed("extent"),z=W(b),L=ao.mouse(b),q=ao.select(t(b)).on("keydown.brush",u).on("keyup.brush",v);if(ao.event.changedTouches?q.on("touchmove.brush",d).on("touchend.brush",m):q.on("mousemove.brush",d).on("mouseup.brush",m),k.interrupt().selectAll("*").interrupt(),C)L[0]=s[0]-L[0],L[1]=h[0]-L[1];else if(N){var T=+/w$/.test(N),R=+/^n/.test(N);x=[s[1-T]-L[0],h[1-R]-L[1]],L[0]=s[T],L[1]=h[R]}else ao.event.altKey&&(M=L.slice());k.style("pointer-events","none").selectAll(".resize").style("display",null),ao.select("body").style("cursor",_.style("cursor")),w({type:"brushstart"}),d()}var o,a,l=N(n,"brushstart","brush","brushend"),c=null,f=null,s=[0,0],h=[0,0],p=!0,g=!0,v=Bl[0];return n.event=function(n){n.each(function(){var n=l.of(this,arguments),t={x:s,y:h,i:o,j:a},e=this.__chart__||t;this.__chart__=t,Hl?ao.select(this).transition().each("start.brush",function(){o=e.i,a=e.j,s=e.x,h=e.y,n({type:"brushstart"})}).tween("brush:brush",function(){var e=xr(s,t.x),r=xr(h,t.y);return o=a=null,function(i){s=t.x=e(i),h=t.y=r(i),n({type:"brush",mode:"resize"})}}).each("end.brush",function(){o=t.i,a=t.j,n({type:"brush",mode:"resize"}),n({type:"brushend"})}):(n({type:"brushstart"}),n({type:"brush",mode:"resize"}),n({type:"brushend"}))})},n.x=function(t){return arguments.length?(c=t,v=Bl[!c<<1|!f],n):c},n.y=function(t){return arguments.length?(f=t,v=Bl[!c<<1|!f],n):f},n.clamp=function(t){return arguments.length?(c&&f?(p=!!t[0],g=!!t[1]):c?p=!!t:f&&(g=!!t),n):c&&f?[p,g]:c?p:f?g:null},n.extent=function(t){var e,r,i,u,l;return arguments.length?(c&&(e=t[0],r=t[1],f&&(e=e[0],r=r[0]),o=[e,r],c.invert&&(e=c(e),r=c(r)),e>r&&(l=e,e=r,r=l),e==s[0]&&r==s[1]||(s=[e,r])),f&&(i=t[0],u=t[1],c&&(i=i[1],u=u[1]),a=[i,u],f.invert&&(i=f(i),u=f(u)),i>u&&(l=i,i=u,u=l),i==h[0]&&u==h[1]||(h=[i,u])),n):(c&&(o?(e=o[0],r=o[1]):(e=s[0],r=s[1],c.invert&&(e=c.invert(e),r=c.invert(r)),e>r&&(l=e,e=r,r=l))),f&&(a?(i=a[0],u=a[1]):(i=h[0],u=h[1],f.invert&&(i=f.invert(i),u=f.invert(u)),i>u&&(l=i,i=u,u=l))),c&&f?[[e,i],[r,u]]:c?[e,r]:f&&[i,u])},n.clear=function(){return n.empty()||(s=[0,0],h=[0,0],o=a=null),n},n.empty=function(){return!!c&&s[0]==s[1]||!!f&&h[0]==h[1]},ao.rebind(n,l,"on")};var $l={n:"ns-resize",e:"ew-resize",s:"ns-resize",w:"ew-resize",nw:"nwse-resize",ne:"nesw-resize",se:"nwse-resize",sw:"nesw-resize"},Bl=[["n","e","s","w","nw","ne","se","sw"],["e","w"],["n","s"],[]],Wl=ga.format=xa.timeFormat,Jl=Wl.utc,Gl=Jl("%Y-%m-%dT%H:%M:%S.%LZ");Wl.iso=Date.prototype.toISOString&&+new Date("2000-01-01T00:00:00.000Z")?eo:Gl,eo.parse=function(n){var t=new Date(n);return isNaN(t)?null:t},eo.toString=Gl.toString,ga.second=On(function(n){return new va(1e3*Math.floor(n/1e3))},function(n,t){n.setTime(n.getTime()+1e3*Math.floor(t))},function(n){return n.getSeconds()}),ga.seconds=ga.second.range,ga.seconds.utc=ga.second.utc.range,ga.minute=On(function(n){return new va(6e4*Math.floor(n/6e4))},function(n,t){n.setTime(n.getTime()+6e4*Math.floor(t))},function(n){return n.getMinutes()}),ga.minutes=ga.minute.range,ga.minutes.utc=ga.minute.utc.range,ga.hour=On(function(n){var t=n.getTimezoneOffset()/60;return new va(36e5*(Math.floor(n/36e5-t)+t))},function(n,t){n.setTime(n.getTime()+36e5*Math.floor(t))},function(n){return n.getHours()}),ga.hours=ga.hour.range,ga.hours.utc=ga.hour.utc.range,ga.month=On(function(n){return n=ga.day(n),n.setDate(1),n},function(n,t){n.setMonth(n.getMonth()+t)},function(n){return n.getMonth()}),ga.months=ga.month.range,ga.months.utc=ga.month.utc.range;var Kl=[1e3,5e3,15e3,3e4,6e4,3e5,9e5,18e5,36e5,108e5,216e5,432e5,864e5,1728e5,6048e5,2592e6,7776e6,31536e6],Ql=[[ga.second,1],[ga.second,5],[ga.second,15],[ga.second,30],[ga.minute,1],[ga.minute,5],[ga.minute,15],[ga.minute,30],[ga.hour,1],[ga.hour,3],[ga.hour,6],[ga.hour,12],[ga.day,1],[ga.day,2],[ga.week,1],[ga.month,1],[ga.month,3],[ga.year,1]],nc=Wl.multi([[".%L",function(n){return n.getMilliseconds()}],[":%S",function(n){return n.getSeconds()}],["%I:%M",function(n){return n.getMinutes()}],["%I %p",function(n){return n.getHours()}],["%a %d",function(n){return n.getDay()&&1!=n.getDate()}],["%b %d",function(n){return 1!=n.getDate()}],["%B",function(n){return n.getMonth()}],["%Y",zt]]),tc={range:function(n,t,e){return ao.range(Math.ceil(n/e)*e,+t,e).map(io)},floor:m,ceil:m};Ql.year=ga.year,ga.scale=function(){return ro(ao.scale.linear(),Ql,nc)};var ec=Ql.map(function(n){return[n[0].utc,n[1]]}),rc=Jl.multi([[".%L",function(n){return n.getUTCMilliseconds()}],[":%S",function(n){return n.getUTCSeconds()}],["%I:%M",function(n){return n.getUTCMinutes()}],["%I %p",function(n){return n.getUTCHours()}],["%a %d",function(n){return n.getUTCDay()&&1!=n.getUTCDate()}],["%b %d",function(n){return 1!=n.getUTCDate()}],["%B",function(n){return n.getUTCMonth()}],["%Y",zt]]);ec.year=ga.year.utc,ga.scale.utc=function(){return ro(ao.scale.linear(),ec,rc)},ao.text=An(function(n){return n.responseText}),ao.json=function(n,t){return Cn(n,"application/json",uo,t)},ao.html=function(n,t){return Cn(n,"text/html",oo,t)},ao.xml=An(function(n){return n.responseXML}),"function"==typeof define&&define.amd?(this.d3=ao,define(ao)):"object"==typeof module&&module.exports?module.exports=ao:this.d3=ao}();PK!'Ì^èØâØâˆfile-manager-advanced/application/svg-sanitizer/includes/phpunit/php-code-coverage/src/Report/Html/Renderer/Template/js/bootstrap.min.jsnu„[µü¤/*! * Bootstrap v4.3.1 (https://getbootstrap.com/) * Copyright 2011-2019 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) */ !function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports,require("jquery"),require("popper.js")):"function"==typeof define&&define.amd?define(["exports","jquery","popper.js"],e):e((t=t||self).bootstrap={},t.jQuery,t.Popper)}(this,function(t,g,u){"use strict";function i(t,e){for(var n=0;nthis._items.length-1||t<0))if(this._isSliding)g(this._element).one(Q.SLID,function(){return e.to(t)});else{if(n===t)return this.pause(),void this.cycle();var i=ndocument.documentElement.clientHeight;!this._isBodyOverflowing&&t&&(this._element.style.paddingLeft=this._scrollbarWidth+"px"),this._isBodyOverflowing&&!t&&(this._element.style.paddingRight=this._scrollbarWidth+"px")},t._resetAdjustments=function(){this._element.style.paddingLeft="",this._element.style.paddingRight=""},t._checkScrollbar=function(){var t=document.body.getBoundingClientRect();this._isBodyOverflowing=t.left+t.right
    ',trigger:"hover focus",title:"",delay:0,html:!1,selector:!1,placement:"top",offset:0,container:!1,fallbackPlacement:"flip",boundary:"scrollParent",sanitize:!0,sanitizeFn:null,whiteList:Ee},je="show",He="out",Re={HIDE:"hide"+De,HIDDEN:"hidden"+De,SHOW:"show"+De,SHOWN:"shown"+De,INSERTED:"inserted"+De,CLICK:"click"+De,FOCUSIN:"focusin"+De,FOCUSOUT:"focusout"+De,MOUSEENTER:"mouseenter"+De,MOUSELEAVE:"mouseleave"+De},xe="fade",Fe="show",Ue=".tooltip-inner",We=".arrow",qe="hover",Me="focus",Ke="click",Qe="manual",Be=function(){function i(t,e){if("undefined"==typeof u)throw new TypeError("Bootstrap's tooltips require Popper.js (https://popper.js.org/)");this._isEnabled=!0,this._timeout=0,this._hoverState="",this._activeTrigger={},this._popper=null,this.element=t,this.config=this._getConfig(e),this.tip=null,this._setListeners()}var t=i.prototype;return t.enable=function(){this._isEnabled=!0},t.disable=function(){this._isEnabled=!1},t.toggleEnabled=function(){this._isEnabled=!this._isEnabled},t.toggle=function(t){if(this._isEnabled)if(t){var e=this.constructor.DATA_KEY,n=g(t.currentTarget).data(e);n||(n=new this.constructor(t.currentTarget,this._getDelegateConfig()),g(t.currentTarget).data(e,n)),n._activeTrigger.click=!n._activeTrigger.click,n._isWithActiveTrigger()?n._enter(null,n):n._leave(null,n)}else{if(g(this.getTipElement()).hasClass(Fe))return void this._leave(null,this);this._enter(null,this)}},t.dispose=function(){clearTimeout(this._timeout),g.removeData(this.element,this.constructor.DATA_KEY),g(this.element).off(this.constructor.EVENT_KEY),g(this.element).closest(".modal").off("hide.bs.modal"),this.tip&&g(this.tip).remove(),this._isEnabled=null,this._timeout=null,this._hoverState=null,(this._activeTrigger=null)!==this._popper&&this._popper.destroy(),this._popper=null,this.element=null,this.config=null,this.tip=null},t.show=function(){var e=this;if("none"===g(this.element).css("display"))throw new Error("Please use show on visible elements");var t=g.Event(this.constructor.Event.SHOW);if(this.isWithContent()&&this._isEnabled){g(this.element).trigger(t);var n=_.findShadowRoot(this.element),i=g.contains(null!==n?n:this.element.ownerDocument.documentElement,this.element);if(t.isDefaultPrevented()||!i)return;var o=this.getTipElement(),r=_.getUID(this.constructor.NAME);o.setAttribute("id",r),this.element.setAttribute("aria-describedby",r),this.setContent(),this.config.animation&&g(o).addClass(xe);var s="function"==typeof this.config.placement?this.config.placement.call(this,o,this.element):this.config.placement,a=this._getAttachment(s);this.addAttachmentClass(a);var l=this._getContainer();g(o).data(this.constructor.DATA_KEY,this),g.contains(this.element.ownerDocument.documentElement,this.tip)||g(o).appendTo(l),g(this.element).trigger(this.constructor.Event.INSERTED),this._popper=new u(this.element,o,{placement:a,modifiers:{offset:this._getOffset(),flip:{behavior:this.config.fallbackPlacement},arrow:{element:We},preventOverflow:{boundariesElement:this.config.boundary}},onCreate:function(t){t.originalPlacement!==t.placement&&e._handlePopperPlacementChange(t)},onUpdate:function(t){return e._handlePopperPlacementChange(t)}}),g(o).addClass(Fe),"ontouchstart"in document.documentElement&&g(document.body).children().on("mouseover",null,g.noop);var c=function(){e.config.animation&&e._fixTransition();var t=e._hoverState;e._hoverState=null,g(e.element).trigger(e.constructor.Event.SHOWN),t===He&&e._leave(null,e)};if(g(this.tip).hasClass(xe)){var h=_.getTransitionDurationFromElement(this.tip);g(this.tip).one(_.TRANSITION_END,c).emulateTransitionEnd(h)}else c()}},t.hide=function(t){var e=this,n=this.getTipElement(),i=g.Event(this.constructor.Event.HIDE),o=function(){e._hoverState!==je&&n.parentNode&&n.parentNode.removeChild(n),e._cleanTipClass(),e.element.removeAttribute("aria-describedby"),g(e.element).trigger(e.constructor.Event.HIDDEN),null!==e._popper&&e._popper.destroy(),t&&t()};if(g(this.element).trigger(i),!i.isDefaultPrevented()){if(g(n).removeClass(Fe),"ontouchstart"in document.documentElement&&g(document.body).children().off("mouseover",null,g.noop),this._activeTrigger[Ke]=!1,this._activeTrigger[Me]=!1,this._activeTrigger[qe]=!1,g(this.tip).hasClass(xe)){var r=_.getTransitionDurationFromElement(n);g(n).one(_.TRANSITION_END,o).emulateTransitionEnd(r)}else o();this._hoverState=""}},t.update=function(){null!==this._popper&&this._popper.scheduleUpdate()},t.isWithContent=function(){return Boolean(this.getTitle())},t.addAttachmentClass=function(t){g(this.getTipElement()).addClass(Ae+"-"+t)},t.getTipElement=function(){return this.tip=this.tip||g(this.config.template)[0],this.tip},t.setContent=function(){var t=this.getTipElement();this.setElementContent(g(t.querySelectorAll(Ue)),this.getTitle()),g(t).removeClass(xe+" "+Fe)},t.setElementContent=function(t,e){"object"!=typeof e||!e.nodeType&&!e.jquery?this.config.html?(this.config.sanitize&&(e=Se(e,this.config.whiteList,this.config.sanitizeFn)),t.html(e)):t.text(e):this.config.html?g(e).parent().is(t)||t.empty().append(e):t.text(g(e).text())},t.getTitle=function(){var t=this.element.getAttribute("data-original-title");return t||(t="function"==typeof this.config.title?this.config.title.call(this.element):this.config.title),t},t._getOffset=function(){var e=this,t={};return"function"==typeof this.config.offset?t.fn=function(t){return t.offsets=l({},t.offsets,e.config.offset(t.offsets,e.element)||{}),t}:t.offset=this.config.offset,t},t._getContainer=function(){return!1===this.config.container?document.body:_.isElement(this.config.container)?g(this.config.container):g(document).find(this.config.container)},t._getAttachment=function(t){return Pe[t.toUpperCase()]},t._setListeners=function(){var i=this;this.config.trigger.split(" ").forEach(function(t){if("click"===t)g(i.element).on(i.constructor.Event.CLICK,i.config.selector,function(t){return i.toggle(t)});else if(t!==Qe){var e=t===qe?i.constructor.Event.MOUSEENTER:i.constructor.Event.FOCUSIN,n=t===qe?i.constructor.Event.MOUSELEAVE:i.constructor.Event.FOCUSOUT;g(i.element).on(e,i.config.selector,function(t){return i._enter(t)}).on(n,i.config.selector,function(t){return i._leave(t)})}}),g(this.element).closest(".modal").on("hide.bs.modal",function(){i.element&&i.hide()}),this.config.selector?this.config=l({},this.config,{trigger:"manual",selector:""}):this._fixTitle()},t._fixTitle=function(){var t=typeof this.element.getAttribute("data-original-title");(this.element.getAttribute("title")||"string"!==t)&&(this.element.setAttribute("data-original-title",this.element.getAttribute("title")||""),this.element.setAttribute("title",""))},t._enter=function(t,e){var n=this.constructor.DATA_KEY;(e=e||g(t.currentTarget).data(n))||(e=new this.constructor(t.currentTarget,this._getDelegateConfig()),g(t.currentTarget).data(n,e)),t&&(e._activeTrigger["focusin"===t.type?Me:qe]=!0),g(e.getTipElement()).hasClass(Fe)||e._hoverState===je?e._hoverState=je:(clearTimeout(e._timeout),e._hoverState=je,e.config.delay&&e.config.delay.show?e._timeout=setTimeout(function(){e._hoverState===je&&e.show()},e.config.delay.show):e.show())},t._leave=function(t,e){var n=this.constructor.DATA_KEY;(e=e||g(t.currentTarget).data(n))||(e=new this.constructor(t.currentTarget,this._getDelegateConfig()),g(t.currentTarget).data(n,e)),t&&(e._activeTrigger["focusout"===t.type?Me:qe]=!1),e._isWithActiveTrigger()||(clearTimeout(e._timeout),e._hoverState=He,e.config.delay&&e.config.delay.hide?e._timeout=setTimeout(function(){e._hoverState===He&&e.hide()},e.config.delay.hide):e.hide())},t._isWithActiveTrigger=function(){for(var t in this._activeTrigger)if(this._activeTrigger[t])return!0;return!1},t._getConfig=function(t){var e=g(this.element).data();return Object.keys(e).forEach(function(t){-1!==Oe.indexOf(t)&&delete e[t]}),"number"==typeof(t=l({},this.constructor.Default,e,"object"==typeof t&&t?t:{})).delay&&(t.delay={show:t.delay,hide:t.delay}),"number"==typeof t.title&&(t.title=t.title.toString()),"number"==typeof t.content&&(t.content=t.content.toString()),_.typeCheckConfig(be,t,this.constructor.DefaultType),t.sanitize&&(t.template=Se(t.template,t.whiteList,t.sanitizeFn)),t},t._getDelegateConfig=function(){var t={};if(this.config)for(var e in this.config)this.constructor.Default[e]!==this.config[e]&&(t[e]=this.config[e]);return t},t._cleanTipClass=function(){var t=g(this.getTipElement()),e=t.attr("class").match(Ne);null!==e&&e.length&&t.removeClass(e.join(""))},t._handlePopperPlacementChange=function(t){var e=t.instance;this.tip=e.popper,this._cleanTipClass(),this.addAttachmentClass(this._getAttachment(t.placement))},t._fixTransition=function(){var t=this.getTipElement(),e=this.config.animation;null===t.getAttribute("x-placement")&&(g(t).removeClass(xe),this.config.animation=!1,this.hide(),this.show(),this.config.animation=e)},i._jQueryInterface=function(n){return this.each(function(){var t=g(this).data(Ie),e="object"==typeof n&&n;if((t||!/dispose|hide/.test(n))&&(t||(t=new i(this,e),g(this).data(Ie,t)),"string"==typeof n)){if("undefined"==typeof t[n])throw new TypeError('No method named "'+n+'"');t[n]()}})},s(i,null,[{key:"VERSION",get:function(){return"4.3.1"}},{key:"Default",get:function(){return Le}},{key:"NAME",get:function(){return be}},{key:"DATA_KEY",get:function(){return Ie}},{key:"Event",get:function(){return Re}},{key:"EVENT_KEY",get:function(){return De}},{key:"DefaultType",get:function(){return ke}}]),i}();g.fn[be]=Be._jQueryInterface,g.fn[be].Constructor=Be,g.fn[be].noConflict=function(){return g.fn[be]=we,Be._jQueryInterface};var Ve="popover",Ye="bs.popover",ze="."+Ye,Xe=g.fn[Ve],$e="bs-popover",Ge=new RegExp("(^|\\s)"+$e+"\\S+","g"),Je=l({},Be.Default,{placement:"right",trigger:"click",content:"",template:''}),Ze=l({},Be.DefaultType,{content:"(string|element|function)"}),tn="fade",en="show",nn=".popover-header",on=".popover-body",rn={HIDE:"hide"+ze,HIDDEN:"hidden"+ze,SHOW:"show"+ze,SHOWN:"shown"+ze,INSERTED:"inserted"+ze,CLICK:"click"+ze,FOCUSIN:"focusin"+ze,FOCUSOUT:"focusout"+ze,MOUSEENTER:"mouseenter"+ze,MOUSELEAVE:"mouseleave"+ze},sn=function(t){var e,n;function i(){return t.apply(this,arguments)||this}n=t,(e=i).prototype=Object.create(n.prototype),(e.prototype.constructor=e).__proto__=n;var o=i.prototype;return o.isWithContent=function(){return this.getTitle()||this._getContent()},o.addAttachmentClass=function(t){g(this.getTipElement()).addClass($e+"-"+t)},o.getTipElement=function(){return this.tip=this.tip||g(this.config.template)[0],this.tip},o.setContent=function(){var t=g(this.getTipElement());this.setElementContent(t.find(nn),this.getTitle());var e=this._getContent();"function"==typeof e&&(e=e.call(this.element)),this.setElementContent(t.find(on),e),t.removeClass(tn+" "+en)},o._getContent=function(){return this.element.getAttribute("data-content")||this.config.content},o._cleanTipClass=function(){var t=g(this.getTipElement()),e=t.attr("class").match(Ge);null!==e&&0=this._offsets[o]&&("undefined"==typeof this._offsets[o+1]||t=o.clientWidth&&n>=o.clientHeight}),l=0a[e]&&!t.escapeWithReference&&(n=Q(f[o],a[e]-('right'===e?f.width:f.height))),le({},o,n)}};return l.forEach(function(e){var t=-1===['left','top'].indexOf(e)?'secondary':'primary';f=fe({},f,m[t](e))}),e.offsets.popper=f,e},priority:['left','right','top','bottom'],padding:5,boundariesElement:'scrollParent'},keepTogether:{order:400,enabled:!0,fn:function(e){var t=e.offsets,o=t.popper,n=t.reference,i=e.placement.split('-')[0],r=Z,p=-1!==['top','bottom'].indexOf(i),s=p?'right':'bottom',d=p?'left':'top',a=p?'width':'height';return o[s]r(n[s])&&(e.offsets.popper[d]=r(n[s])),e}},arrow:{order:500,enabled:!0,fn:function(e,o){var n;if(!K(e.instance.modifiers,'arrow','keepTogether'))return e;var i=o.element;if('string'==typeof i){if(i=e.instance.popper.querySelector(i),!i)return e;}else if(!e.instance.popper.contains(i))return console.warn('WARNING: `arrow.element` must be child of its popper element!'),e;var r=e.placement.split('-')[0],p=e.offsets,s=p.popper,d=p.reference,a=-1!==['left','right'].indexOf(r),l=a?'height':'width',f=a?'Top':'Left',m=f.toLowerCase(),h=a?'left':'top',c=a?'bottom':'right',u=S(i)[l];d[c]-us[c]&&(e.offsets.popper[m]+=d[m]+u-s[c]),e.offsets.popper=g(e.offsets.popper);var b=d[m]+d[l]/2-u/2,w=t(e.instance.popper),y=parseFloat(w['margin'+f],10),E=parseFloat(w['border'+f+'Width'],10),v=b-e.offsets.popper[m]-y-E;return v=ee(Q(s[l]-u,v),0),e.arrowElement=i,e.offsets.arrow=(n={},le(n,m,$(v)),le(n,h,''),n),e},element:'[x-arrow]'},flip:{order:600,enabled:!0,fn:function(e,t){if(W(e.instance.modifiers,'inner'))return e;if(e.flipped&&e.placement===e.originalPlacement)return e;var o=v(e.instance.popper,e.instance.reference,t.padding,t.boundariesElement,e.positionFixed),n=e.placement.split('-')[0],i=T(n),r=e.placement.split('-')[1]||'',p=[];switch(t.behavior){case ge.FLIP:p=[n,i];break;case ge.CLOCKWISE:p=G(n);break;case ge.COUNTERCLOCKWISE:p=G(n,!0);break;default:p=t.behavior;}return p.forEach(function(s,d){if(n!==s||p.length===d+1)return e;n=e.placement.split('-')[0],i=T(n);var a=e.offsets.popper,l=e.offsets.reference,f=Z,m='left'===n&&f(a.right)>f(l.left)||'right'===n&&f(a.left)f(l.top)||'bottom'===n&&f(a.top)f(o.right),g=f(a.top)f(o.bottom),b='left'===n&&h||'right'===n&&c||'top'===n&&g||'bottom'===n&&u,w=-1!==['top','bottom'].indexOf(n),y=!!t.flipVariations&&(w&&'start'===r&&h||w&&'end'===r&&c||!w&&'start'===r&&g||!w&&'end'===r&&u),E=!!t.flipVariationsByContent&&(w&&'start'===r&&c||w&&'end'===r&&h||!w&&'start'===r&&u||!w&&'end'===r&&g),v=y||E;(m||b||v)&&(e.flipped=!0,(m||b)&&(n=p[d+1]),v&&(r=z(r)),e.placement=n+(r?'-'+r:''),e.offsets.popper=fe({},e.offsets.popper,C(e.instance.popper,e.offsets.reference,e.placement)),e=P(e.instance.modifiers,e,'flip'))}),e},behavior:'flip',padding:5,boundariesElement:'viewport',flipVariations:!1,flipVariationsByContent:!1},inner:{order:700,enabled:!1,fn:function(e){var t=e.placement,o=t.split('-')[0],n=e.offsets,i=n.popper,r=n.reference,p=-1!==['left','right'].indexOf(o),s=-1===['top','left'].indexOf(o);return i[p?'left':'top']=r[o]-(s?i[p?'width':'height']:0),e.placement=T(t),e.offsets.popper=g(i),e}},hide:{order:800,enabled:!0,fn:function(e){if(!K(e.instance.modifiers,'hide','preventOverflow'))return e;var t=e.offsets.reference,o=D(e.instance.modifiers,function(e){return'preventOverflow'===e.name}).boundaries;if(t.bottomo.right||t.top>o.bottom||t.rightwindow.devicePixelRatio||!me),c='bottom'===o?'top':'bottom',g='right'===n?'left':'right',b=B('transform');if(d='bottom'==c?'HTML'===l.nodeName?-l.clientHeight+h.bottom:-f.height+h.bottom:h.top,s='right'==g?'HTML'===l.nodeName?-l.clientWidth+h.right:-f.width+h.right:h.left,a&&b)m[b]='translate3d('+s+'px, '+d+'px, 0)',m[c]=0,m[g]=0,m.willChange='transform';else{var w='bottom'==c?-1:1,y='right'==g?-1:1;m[c]=d*w,m[g]=s*y,m.willChange=c+', '+g}var E={"x-placement":e.placement};return e.attributes=fe({},E,e.attributes),e.styles=fe({},m,e.styles),e.arrowStyles=fe({},e.offsets.arrow,e.arrowStyles),e},gpuAcceleration:!0,x:'bottom',y:'right'},applyStyle:{order:900,enabled:!0,fn:function(e){return V(e.instance.popper,e.styles),j(e.instance.popper,e.attributes),e.arrowElement&&Object.keys(e.arrowStyles).length&&V(e.arrowElement,e.arrowStyles),e},onLoad:function(e,t,o,n,i){var r=L(i,t,e,o.positionFixed),p=O(o.placement,r,t,e,o.modifiers.flip.boundariesElement,o.modifiers.flip.padding);return t.setAttribute('x-placement',p),V(t,{position:o.positionFixed?'fixed':'absolute'}),o},gpuAcceleration:void 0}}},ue}); //# sourceMappingURL=popper.min.js.map PK!Ø¿êttˆfile-manager-advanced/application/svg-sanitizer/includes/phpunit/php-code-coverage/src/Report/Html/Renderer/Template/file_item.html.distnu„[µü¤ {{name}} {{classes_bar}}
    {{classes_tested_percent}}
    {{classes_number}}
    {{methods_bar}}
    {{methods_tested_percent}}
    {{methods_number}}
    {{crap}} {{lines_bar}}
    {{lines_executed_percent}}
    {{lines_number}}
    PK!GÉM³Ì̈file-manager-advanced/application/svg-sanitizer/includes/phpunit/php-code-coverage/src/Report/Html/Renderer/Template/directory.html.distnu„[µü¤ Code Coverage for {{full_path}}
    {{items}}
     
    Code Coverage
     
    Lines
    Functions and Methods
    Classes and Traits

    Legend

    Low: 0% to {{low_upper_bound}}% Medium: {{low_upper_bound}}% to {{high_lower_bound}}% High: {{high_lower_bound}}% to 100%

    Generated by php-code-coverage {{version}} using {{runtime}}{{generator}} at {{date}}.

    PK!õO}''‹file-manager-advanced/application/svg-sanitizer/includes/phpunit/php-code-coverage/src/Report/Html/Renderer/Template/coverage_bar.html.distnu„[µü¤
    {{percent}}% covered ({{level}})
    PK!äÄlGGˆfile-manager-advanced/application/svg-sanitizer/includes/phpunit/php-code-coverage/src/Report/Html/Renderer/Template/dashboard.html.distnu„[µü¤ Dashboard for {{full_path}}

    Classes

    Coverage Distribution

    Complexity

    Insufficient Coverage

    {{insufficient_coverage_classes}}
    Class Coverage

    Project Risks

    {{project_risks_classes}}
    Class CRAP

    Methods

    Coverage Distribution

    Complexity

    Insufficient Coverage

    {{insufficient_coverage_methods}}
    Method Coverage

    Project Risks

    {{project_risks_methods}}
    Method CRAP
    PK!îf "  ƒfile-manager-advanced/application/svg-sanitizer/includes/phpunit/php-code-coverage/src/Report/Html/Renderer/Template/file.html.distnu„[µü¤ Code Coverage for {{full_path}}
    {{items}}
     
    Code Coverage
     
    Classes and Traits
    Functions and Methods
    Lines
    {{lines}}
    PK!†îs:‚‚Šfile-manager-advanced/application/svg-sanitizer/includes/phpunit/php-code-coverage/src/Report/Html/Renderer/Template/method_item.html.distnu„[µü¤ {{name}} {{methods_bar}}
    {{methods_tested_percent}}
    {{methods_number}}
    {{crap}} {{lines_bar}}
    {{lines_executed_percent}}
    {{lines_number}}
    PK!ýÚZÿêê�file-manager-advanced/application/svg-sanitizer/includes/phpunit/php-code-coverage/src/Report/Html/Renderer/Template/icons/file-directory.svgnu„[µü¤PK!ÙQUU00ˆfile-manager-advanced/application/svg-sanitizer/includes/phpunit/php-code-coverage/src/Report/Html/Renderer/Template/icons/file-code.svgnu„[µü¤PK!�0,X%X%†file-manager-advanced/application/svg-sanitizer/includes/phpunit/php-code-coverage/src/Report/Html/Renderer/Template/css/nv.d3.min.cssnu„[µü¤.nvd3 .nv-axis{pointer-events:none;opacity:1}.nvd3 .nv-axis path{fill:none;stroke:#000;stroke-opacity:.75;shape-rendering:crispEdges}.nvd3 .nv-axis path.domain{stroke-opacity:.75}.nvd3 .nv-axis.nv-x path.domain{stroke-opacity:0}.nvd3 .nv-axis line{fill:none;stroke:#e5e5e5;shape-rendering:crispEdges}.nvd3 .nv-axis .zero line,.nvd3 .nv-axis line.zero{stroke-opacity:.75}.nvd3 .nv-axis .nv-axisMaxMin text{font-weight:700}.nvd3 .x .nv-axis .nv-axisMaxMin text,.nvd3 .x2 .nv-axis .nv-axisMaxMin text,.nvd3 .x3 .nv-axis .nv-axisMaxMin text{text-anchor:middle}.nvd3 .nv-axis.nv-disabled{opacity:0}.nvd3 .nv-bars rect{fill-opacity:.75;transition:fill-opacity 250ms linear;-moz-transition:fill-opacity 250ms linear;-webkit-transition:fill-opacity 250ms linear}.nvd3 .nv-bars rect.hover{fill-opacity:1}.nvd3 .nv-bars .hover rect{fill:#add8e6}.nvd3 .nv-bars text{fill:rgba(0,0,0,0)}.nvd3 .nv-bars .hover text{fill:rgba(0,0,0,1)}.nvd3 .nv-multibar .nv-groups rect,.nvd3 .nv-multibarHorizontal .nv-groups rect,.nvd3 .nv-discretebar .nv-groups rect{stroke-opacity:0;transition:fill-opacity 250ms linear;-moz-transition:fill-opacity 250ms linear;-webkit-transition:fill-opacity 250ms linear}.nvd3 .nv-multibar .nv-groups rect:hover,.nvd3 .nv-multibarHorizontal .nv-groups rect:hover,.nvd3 .nv-candlestickBar .nv-ticks rect:hover,.nvd3 .nv-discretebar .nv-groups rect:hover{fill-opacity:1}.nvd3 .nv-discretebar .nv-groups text,.nvd3 .nv-multibarHorizontal .nv-groups text{font-weight:700;fill:rgba(0,0,0,1);stroke:rgba(0,0,0,0)}.nvd3 .nv-boxplot circle{fill-opacity:.5}.nvd3 .nv-boxplot circle:hover{fill-opacity:1}.nvd3 .nv-boxplot rect:hover{fill-opacity:1}.nvd3 line.nv-boxplot-median{stroke:#000}.nv-boxplot-tick:hover{stroke-width:2.5px}.nvd3.nv-bullet{font:10px sans-serif}.nvd3.nv-bullet .nv-measure{fill-opacity:.8}.nvd3.nv-bullet .nv-measure:hover{fill-opacity:1}.nvd3.nv-bullet .nv-marker{stroke:#000;stroke-width:2px}.nvd3.nv-bullet .nv-markerTriangle{stroke:#000;fill:#fff;stroke-width:1.5px}.nvd3.nv-bullet .nv-tick line{stroke:#666;stroke-width:.5px}.nvd3.nv-bullet .nv-range.nv-s0{fill:#eee}.nvd3.nv-bullet .nv-range.nv-s1{fill:#ddd}.nvd3.nv-bullet .nv-range.nv-s2{fill:#ccc}.nvd3.nv-bullet .nv-title{font-size:14px;font-weight:700}.nvd3.nv-bullet .nv-subtitle{fill:#999}.nvd3.nv-bullet .nv-range{fill:#bababa;fill-opacity:.4}.nvd3.nv-bullet .nv-range:hover{fill-opacity:.7}.nvd3.nv-candlestickBar .nv-ticks .nv-tick{stroke-width:1px}.nvd3.nv-candlestickBar .nv-ticks .nv-tick.hover{stroke-width:2px}.nvd3.nv-candlestickBar .nv-ticks .nv-tick.positive rect{stroke:#2ca02c;fill:#2ca02c}.nvd3.nv-candlestickBar .nv-ticks .nv-tick.negative rect{stroke:#d62728;fill:#d62728}.with-transitions .nv-candlestickBar .nv-ticks .nv-tick{transition:stroke-width 250ms linear,stroke-opacity 250ms linear;-moz-transition:stroke-width 250ms linear,stroke-opacity 250ms linear;-webkit-transition:stroke-width 250ms linear,stroke-opacity 250ms linear}.nvd3.nv-candlestickBar .nv-ticks line{stroke:#333}.nvd3 .nv-legend .nv-disabled rect{}.nvd3 .nv-check-box .nv-box{fill-opacity:0;stroke-width:2}.nvd3 .nv-check-box .nv-check{fill-opacity:0;stroke-width:4}.nvd3 .nv-series.nv-disabled .nv-check-box .nv-check{fill-opacity:0;stroke-opacity:0}.nvd3 .nv-controlsWrap .nv-legend .nv-check-box .nv-check{opacity:0}.nvd3.nv-linePlusBar .nv-bar rect{fill-opacity:.75}.nvd3.nv-linePlusBar .nv-bar rect:hover{fill-opacity:1}.nvd3 .nv-groups path.nv-line{fill:none}.nvd3 .nv-groups path.nv-area{stroke:none}.nvd3.nv-line .nvd3.nv-scatter .nv-groups .nv-point{fill-opacity:0;stroke-opacity:0}.nvd3.nv-scatter.nv-single-point .nv-groups .nv-point{fill-opacity:.5!important;stroke-opacity:.5!important}.with-transitions .nvd3 .nv-groups .nv-point{transition:stroke-width 250ms linear,stroke-opacity 250ms linear;-moz-transition:stroke-width 250ms linear,stroke-opacity 250ms linear;-webkit-transition:stroke-width 250ms linear,stroke-opacity 250ms linear}.nvd3.nv-scatter .nv-groups .nv-point.hover,.nvd3 .nv-groups .nv-point.hover{stroke-width:7px;fill-opacity:.95!important;stroke-opacity:.95!important}.nvd3 .nv-point-paths path{stroke:#aaa;stroke-opacity:0;fill:#eee;fill-opacity:0}.nvd3 .nv-indexLine{cursor:ew-resize}svg.nvd3-svg{-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-ms-user-select:none;-moz-user-select:none;user-select:none;display:block;width:100%;height:100%}.nvtooltip.with-3d-shadow,.with-3d-shadow .nvtooltip{-moz-box-shadow:0 5px 10px rgba(0,0,0,.2);-webkit-box-shadow:0 5px 10px rgba(0,0,0,.2);box-shadow:0 5px 10px rgba(0,0,0,.2);-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px}.nvd3 text{font:400 12px Arial}.nvd3 .title{font:700 14px Arial}.nvd3 .nv-background{fill:#fff;fill-opacity:0}.nvd3.nv-noData{font-size:18px;font-weight:700}.nv-brush .extent{fill-opacity:.125;shape-rendering:crispEdges}.nv-brush .resize path{fill:#eee;stroke:#666}.nvd3 .nv-legend .nv-series{cursor:pointer}.nvd3 .nv-legend .nv-disabled circle{fill-opacity:0}.nvd3 .nv-brush .extent{fill-opacity:0!important}.nvd3 .nv-brushBackground rect{stroke:#000;stroke-width:.4;fill:#fff;fill-opacity:.7}.nvd3.nv-ohlcBar .nv-ticks .nv-tick{stroke-width:1px}.nvd3.nv-ohlcBar .nv-ticks .nv-tick.hover{stroke-width:2px}.nvd3.nv-ohlcBar .nv-ticks .nv-tick.positive{stroke:#2ca02c}.nvd3.nv-ohlcBar .nv-ticks .nv-tick.negative{stroke:#d62728}.nvd3 .background path{fill:none;stroke:#EEE;stroke-opacity:.4;shape-rendering:crispEdges}.nvd3 .foreground path{fill:none;stroke-opacity:.7}.nvd3 .nv-parallelCoordinates-brush .extent{fill:#fff;fill-opacity:.6;stroke:gray;shape-rendering:crispEdges}.nvd3 .nv-parallelCoordinates .hover{fill-opacity:1;stroke-width:3px}.nvd3 .missingValuesline line{fill:none;stroke:#000;stroke-width:1;stroke-opacity:1;stroke-dasharray:5,5}.nvd3.nv-pie path{stroke-opacity:0;transition:fill-opacity 250ms linear,stroke-width 250ms linear,stroke-opacity 250ms linear;-moz-transition:fill-opacity 250ms linear,stroke-width 250ms linear,stroke-opacity 250ms linear;-webkit-transition:fill-opacity 250ms linear,stroke-width 250ms linear,stroke-opacity 250ms linear}.nvd3.nv-pie .nv-pie-title{font-size:24px;fill:rgba(19,196,249,.59)}.nvd3.nv-pie .nv-slice text{stroke:#000;stroke-width:0}.nvd3.nv-pie path{stroke:#fff;stroke-width:1px;stroke-opacity:1}.nvd3.nv-pie .hover path{fill-opacity:.7}.nvd3.nv-pie .nv-label{pointer-events:none}.nvd3.nv-pie .nv-label rect{fill-opacity:0;stroke-opacity:0}.nvd3 .nv-groups .nv-point.hover{stroke-width:20px;stroke-opacity:.5}.nvd3 .nv-scatter .nv-point.hover{fill-opacity:1}.nv-noninteractive{pointer-events:none}.nv-distx,.nv-disty{pointer-events:none}.nvd3.nv-sparkline path{fill:none}.nvd3.nv-sparklineplus g.nv-hoverValue{pointer-events:none}.nvd3.nv-sparklineplus .nv-hoverValue line{stroke:#333;stroke-width:1.5px}.nvd3.nv-sparklineplus,.nvd3.nv-sparklineplus g{pointer-events:all}.nvd3 .nv-hoverArea{fill-opacity:0;stroke-opacity:0}.nvd3.nv-sparklineplus .nv-xValue,.nvd3.nv-sparklineplus .nv-yValue{stroke-width:0;font-size:.9em;font-weight:400}.nvd3.nv-sparklineplus .nv-yValue{stroke:#f66}.nvd3.nv-sparklineplus .nv-maxValue{stroke:#2ca02c;fill:#2ca02c}.nvd3.nv-sparklineplus .nv-minValue{stroke:#d62728;fill:#d62728}.nvd3.nv-sparklineplus .nv-currentValue{font-weight:700;font-size:1.1em}.nvd3.nv-stackedarea path.nv-area{fill-opacity:.7;stroke-opacity:0;transition:fill-opacity 250ms linear,stroke-opacity 250ms linear;-moz-transition:fill-opacity 250ms linear,stroke-opacity 250ms linear;-webkit-transition:fill-opacity 250ms linear,stroke-opacity 250ms linear}.nvd3.nv-stackedarea path.nv-area.hover{fill-opacity:.9}.nvd3.nv-stackedarea .nv-groups .nv-point{stroke-opacity:0;fill-opacity:0}.nvtooltip{position:absolute;background-color:rgba(255,255,255,1);color:rgba(0,0,0,1);padding:1px;border:1px solid rgba(0,0,0,.2);z-index:10000;display:block;font-family:Arial;font-size:13px;text-align:left;pointer-events:none;white-space:nowrap;-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.nvtooltip{background:rgba(255,255,255,.8);border:1px solid rgba(0,0,0,.5);border-radius:4px}.nvtooltip.with-transitions,.with-transitions .nvtooltip{transition:opacity 50ms linear;-moz-transition:opacity 50ms linear;-webkit-transition:opacity 50ms linear;transition-delay:200ms;-moz-transition-delay:200ms;-webkit-transition-delay:200ms}.nvtooltip.x-nvtooltip,.nvtooltip.y-nvtooltip{padding:8px}.nvtooltip h3{margin:0;padding:4px 14px;line-height:18px;font-weight:400;background-color:rgba(247,247,247,.75);color:rgba(0,0,0,1);text-align:center;border-bottom:1px solid #ebebeb;-webkit-border-radius:5px 5px 0 0;-moz-border-radius:5px 5px 0 0;border-radius:5px 5px 0 0}.nvtooltip p{margin:0;padding:5px 14px;text-align:center}.nvtooltip span{display:inline-block;margin:2px 0}.nvtooltip table{margin:6px;border-spacing:0}.nvtooltip table td{padding:2px 9px 2px 0;vertical-align:middle}.nvtooltip table td.key{font-weight:400}.nvtooltip table td.value{text-align:right;font-weight:700}.nvtooltip table tr.highlight td{padding:1px 9px 1px 0;border-bottom-style:solid;border-bottom-width:1px;border-top-style:solid;border-top-width:1px}.nvtooltip table td.legend-color-guide div{width:8px;height:8px;vertical-align:middle}.nvtooltip table td.legend-color-guide div{width:12px;height:12px;border:1px solid #999}.nvtooltip .footer{padding:3px;text-align:center}.nvtooltip-pending-removal{pointer-events:none;display:none}.nvd3 .nv-interactiveGuideLine{pointer-events:none}.nvd3 line.nv-guideline{stroke:#ccc}PK!ƒfile-manager-advanced/application/svg-sanitizer/includes/phpunit/php-code-coverage/src/Report/Html/Renderer/Template/css/custom.cssnu„[µü¤PK!'#ïXX…file-manager-advanced/application/svg-sanitizer/includes/phpunit/php-code-coverage/src/Report/Html/Renderer/Template/css/octicons.cssnu„[µü¤.octicon { display: inline-block; vertical-align: text-top; fill: currentColor; } PK!¾Ýv‰‰‚file-manager-advanced/application/svg-sanitizer/includes/phpunit/php-code-coverage/src/Report/Html/Renderer/Template/css/style.cssnu„[µü¤body { padding-top: 10px; } .popover { max-width: none; } .octicon { margin-right:.25em; } .table-bordered>thead>tr>td { border-bottom-width: 1px; } .table tbody>tr>td, .table thead>tr>td { padding-top: 3px; padding-bottom: 3px; } .table-condensed tbody>tr>td { padding-top: 0; padding-bottom: 0; } .table .progress { margin-bottom: inherit; } .table-borderless th, .table-borderless td { border: 0 !important; } .table tbody tr.covered-by-large-tests, li.covered-by-large-tests, tr.success, td.success, li.success, span.success { background-color: #dff0d8; } .table tbody tr.covered-by-medium-tests, li.covered-by-medium-tests { background-color: #c3e3b5; } .table tbody tr.covered-by-small-tests, li.covered-by-small-tests { background-color: #99cb84; } .table tbody tr.danger, .table tbody td.danger, li.danger, span.danger { background-color: #f2dede; } .table tbody td.warning, li.warning, span.warning { background-color: #fcf8e3; } .table tbody td.info { background-color: #d9edf7; } td.big { width: 117px; } td.small { } td.codeLine { font-family: "Source Code Pro", "SFMono-Regular", Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; white-space: pre; } td span.comment { color: #888a85; } td span.default { color: #2e3436; } td span.html { color: #888a85; } td span.keyword { color: #2e3436; font-weight: bold; } pre span.string { color: #2e3436; } span.success, span.warning, span.danger { margin-right: 2px; padding-left: 10px; padding-right: 10px; text-align: center; } #classCoverageDistribution, #classComplexity { height: 200px; width: 475px; } #toplink { position: fixed; left: 5px; bottom: 5px; outline: 0; } svg text { font-family: "Lucida Grande", "Lucida Sans Unicode", Verdana, Arial, Helvetica, sans-serif; font-size: 11px; color: #666; fill: #666; } .scrollbox { height:245px; overflow-x:hidden; overflow-y:scroll; } PK!ÑÿÓn`n`Šfile-manager-advanced/application/svg-sanitizer/includes/phpunit/php-code-coverage/src/Report/Html/Renderer/Template/css/bootstrap.min.cssnu„[µü¤/*! * Bootstrap v4.3.1 (https://getbootstrap.com/) * Copyright 2011-2019 The Bootstrap Authors * Copyright 2011-2019 Twitter, Inc. * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) */:root{--blue:#007bff;--indigo:#6610f2;--purple:#6f42c1;--pink:#e83e8c;--red:#dc3545;--orange:#fd7e14;--yellow:#ffc107;--green:#28a745;--teal:#20c997;--cyan:#17a2b8;--white:#fff;--gray:#6c757d;--gray-dark:#343a40;--primary:#007bff;--secondary:#6c757d;--success:#28a745;--info:#17a2b8;--warning:#ffc107;--danger:#dc3545;--light:#f8f9fa;--dark:#343a40;--breakpoint-xs:0;--breakpoint-sm:576px;--breakpoint-md:768px;--breakpoint-lg:992px;--breakpoint-xl:1200px;--font-family-sans-serif:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--font-family-monospace:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace}*,::after,::before{box-sizing:border-box}html{font-family:sans-serif;line-height:1.15;-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:transparent}article,aside,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}body{margin:0;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-size:1rem;font-weight:400;line-height:1.5;color:#212529;text-align:left;background-color:#fff}[tabindex="-1"]:focus{outline:0!important}hr{box-sizing:content-box;height:0;overflow:visible}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem}p{margin-top:0;margin-bottom:1rem}abbr[data-original-title],abbr[title]{text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;border-bottom:0;-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none}address{margin-bottom:1rem;font-style:normal;line-height:inherit}dl,ol,ul{margin-top:0;margin-bottom:1rem}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#007bff;text-decoration:none;background-color:transparent}a:hover{color:#0056b3;text-decoration:underline}a:not([href]):not([tabindex]){color:inherit;text-decoration:none}a:not([href]):not([tabindex]):focus,a:not([href]):not([tabindex]):hover{color:inherit;text-decoration:none}a:not([href]):not([tabindex]):focus{outline:0}code,kbd,pre,samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;font-size:1em}pre{margin-top:0;margin-bottom:1rem;overflow:auto}figure{margin:0 0 1rem}img{vertical-align:middle;border-style:none}svg{overflow:hidden;vertical-align:middle}table{border-collapse:collapse}caption{padding-top:.75rem;padding-bottom:.75rem;color:#6c757d;text-align:left;caption-side:bottom}th{text-align:inherit}label{display:inline-block;margin-bottom:.5rem}button{border-radius:0}button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,input{overflow:visible}button,select{text-transform:none}select{word-wrap:normal}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled),button:not(:disabled){cursor:pointer}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{padding:0;border-style:none}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=date],input[type=datetime-local],input[type=month],input[type=time]{-webkit-appearance:listbox}textarea{overflow:auto;resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;max-width:100%;padding:0;margin-bottom:.5rem;font-size:1.5rem;line-height:inherit;color:inherit;white-space:normal}progress{vertical-align:baseline}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:none}[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}summary{display:list-item;cursor:pointer}template{display:none}[hidden]{display:none!important}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{margin-bottom:.5rem;font-weight:500;line-height:1.2}.h1,h1{font-size:2.5rem}.h2,h2{font-size:2rem}.h3,h3{font-size:1.75rem}.h4,h4{font-size:1.5rem}.h5,h5{font-size:1.25rem}.h6,h6{font-size:1rem}.lead{font-size:1.25rem;font-weight:300}.display-1{font-size:6rem;font-weight:300;line-height:1.2}.display-2{font-size:5.5rem;font-weight:300;line-height:1.2}.display-3{font-size:4.5rem;font-weight:300;line-height:1.2}.display-4{font-size:3.5rem;font-weight:300;line-height:1.2}hr{margin-top:1rem;margin-bottom:1rem;border:0;border-top:1px solid rgba(0,0,0,.1)}.small,small{font-size:80%;font-weight:400}.mark,mark{padding:.2em;background-color:#fcf8e3}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;list-style:none}.list-inline-item{display:inline-block}.list-inline-item:not(:last-child){margin-right:.5rem}.initialism{font-size:90%;text-transform:uppercase}.blockquote{margin-bottom:1rem;font-size:1.25rem}.blockquote-footer{display:block;font-size:80%;color:#6c757d}.blockquote-footer::before{content:"\2014\00A0"}.img-fluid{max-width:100%;height:auto}.img-thumbnail{padding:.25rem;background-color:#fff;border:1px solid #dee2e6;border-radius:.25rem;max-width:100%;height:auto}.figure{display:inline-block}.figure-img{margin-bottom:.5rem;line-height:1}.figure-caption{font-size:90%;color:#6c757d}code{font-size:87.5%;color:#e83e8c;word-break:break-word}a>code{color:inherit}kbd{padding:.2rem .4rem;font-size:87.5%;color:#fff;background-color:#212529;border-radius:.2rem}kbd kbd{padding:0;font-size:100%;font-weight:700}pre{display:block;font-size:87.5%;color:#212529}pre code{font-size:inherit;color:inherit;word-break:normal}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{width:100%;padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:576px){.container{max-width:540px}}@media (min-width:768px){.container{max-width:720px}}@media (min-width:992px){.container{max-width:960px}}@media (min-width:1200px){.container{max-width:1140px}}.container-fluid{width:100%;padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}.row{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-right:-15px;margin-left:-15px}.no-gutters{margin-right:0;margin-left:0}.no-gutters>.col,.no-gutters>[class*=col-]{padding-right:0;padding-left:0}.col,.col-1,.col-10,.col-11,.col-12,.col-2,.col-3,.col-4,.col-5,.col-6,.col-7,.col-8,.col-9,.col-auto,.col-lg,.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-auto,.col-md,.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-auto,.col-sm,.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-auto,.col-xl,.col-xl-1,.col-xl-10,.col-xl-11,.col-xl-12,.col-xl-2,.col-xl-3,.col-xl-4,.col-xl-5,.col-xl-6,.col-xl-7,.col-xl-8,.col-xl-9,.col-xl-auto{position:relative;width:100%;padding-right:15px;padding-left:15px}.col{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-first{-ms-flex-order:-1;order:-1}.order-last{-ms-flex-order:13;order:13}.order-0{-ms-flex-order:0;order:0}.order-1{-ms-flex-order:1;order:1}.order-2{-ms-flex-order:2;order:2}.order-3{-ms-flex-order:3;order:3}.order-4{-ms-flex-order:4;order:4}.order-5{-ms-flex-order:5;order:5}.order-6{-ms-flex-order:6;order:6}.order-7{-ms-flex-order:7;order:7}.order-8{-ms-flex-order:8;order:8}.order-9{-ms-flex-order:9;order:9}.order-10{-ms-flex-order:10;order:10}.order-11{-ms-flex-order:11;order:11}.order-12{-ms-flex-order:12;order:12}.offset-1{margin-left:8.333333%}.offset-2{margin-left:16.666667%}.offset-3{margin-left:25%}.offset-4{margin-left:33.333333%}.offset-5{margin-left:41.666667%}.offset-6{margin-left:50%}.offset-7{margin-left:58.333333%}.offset-8{margin-left:66.666667%}.offset-9{margin-left:75%}.offset-10{margin-left:83.333333%}.offset-11{margin-left:91.666667%}@media (min-width:576px){.col-sm{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-sm-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-sm-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-sm-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-sm-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-sm-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-sm-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-sm-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-sm-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-sm-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-sm-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-sm-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-sm-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-sm-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-sm-first{-ms-flex-order:-1;order:-1}.order-sm-last{-ms-flex-order:13;order:13}.order-sm-0{-ms-flex-order:0;order:0}.order-sm-1{-ms-flex-order:1;order:1}.order-sm-2{-ms-flex-order:2;order:2}.order-sm-3{-ms-flex-order:3;order:3}.order-sm-4{-ms-flex-order:4;order:4}.order-sm-5{-ms-flex-order:5;order:5}.order-sm-6{-ms-flex-order:6;order:6}.order-sm-7{-ms-flex-order:7;order:7}.order-sm-8{-ms-flex-order:8;order:8}.order-sm-9{-ms-flex-order:9;order:9}.order-sm-10{-ms-flex-order:10;order:10}.order-sm-11{-ms-flex-order:11;order:11}.order-sm-12{-ms-flex-order:12;order:12}.offset-sm-0{margin-left:0}.offset-sm-1{margin-left:8.333333%}.offset-sm-2{margin-left:16.666667%}.offset-sm-3{margin-left:25%}.offset-sm-4{margin-left:33.333333%}.offset-sm-5{margin-left:41.666667%}.offset-sm-6{margin-left:50%}.offset-sm-7{margin-left:58.333333%}.offset-sm-8{margin-left:66.666667%}.offset-sm-9{margin-left:75%}.offset-sm-10{margin-left:83.333333%}.offset-sm-11{margin-left:91.666667%}}@media (min-width:768px){.col-md{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-md-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-md-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-md-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-md-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-md-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-md-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-md-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-md-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-md-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-md-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-md-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-md-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-md-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-md-first{-ms-flex-order:-1;order:-1}.order-md-last{-ms-flex-order:13;order:13}.order-md-0{-ms-flex-order:0;order:0}.order-md-1{-ms-flex-order:1;order:1}.order-md-2{-ms-flex-order:2;order:2}.order-md-3{-ms-flex-order:3;order:3}.order-md-4{-ms-flex-order:4;order:4}.order-md-5{-ms-flex-order:5;order:5}.order-md-6{-ms-flex-order:6;order:6}.order-md-7{-ms-flex-order:7;order:7}.order-md-8{-ms-flex-order:8;order:8}.order-md-9{-ms-flex-order:9;order:9}.order-md-10{-ms-flex-order:10;order:10}.order-md-11{-ms-flex-order:11;order:11}.order-md-12{-ms-flex-order:12;order:12}.offset-md-0{margin-left:0}.offset-md-1{margin-left:8.333333%}.offset-md-2{margin-left:16.666667%}.offset-md-3{margin-left:25%}.offset-md-4{margin-left:33.333333%}.offset-md-5{margin-left:41.666667%}.offset-md-6{margin-left:50%}.offset-md-7{margin-left:58.333333%}.offset-md-8{margin-left:66.666667%}.offset-md-9{margin-left:75%}.offset-md-10{margin-left:83.333333%}.offset-md-11{margin-left:91.666667%}}@media (min-width:992px){.col-lg{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-lg-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-lg-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-lg-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-lg-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-lg-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-lg-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-lg-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-lg-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-lg-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-lg-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-lg-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-lg-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-lg-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-lg-first{-ms-flex-order:-1;order:-1}.order-lg-last{-ms-flex-order:13;order:13}.order-lg-0{-ms-flex-order:0;order:0}.order-lg-1{-ms-flex-order:1;order:1}.order-lg-2{-ms-flex-order:2;order:2}.order-lg-3{-ms-flex-order:3;order:3}.order-lg-4{-ms-flex-order:4;order:4}.order-lg-5{-ms-flex-order:5;order:5}.order-lg-6{-ms-flex-order:6;order:6}.order-lg-7{-ms-flex-order:7;order:7}.order-lg-8{-ms-flex-order:8;order:8}.order-lg-9{-ms-flex-order:9;order:9}.order-lg-10{-ms-flex-order:10;order:10}.order-lg-11{-ms-flex-order:11;order:11}.order-lg-12{-ms-flex-order:12;order:12}.offset-lg-0{margin-left:0}.offset-lg-1{margin-left:8.333333%}.offset-lg-2{margin-left:16.666667%}.offset-lg-3{margin-left:25%}.offset-lg-4{margin-left:33.333333%}.offset-lg-5{margin-left:41.666667%}.offset-lg-6{margin-left:50%}.offset-lg-7{margin-left:58.333333%}.offset-lg-8{margin-left:66.666667%}.offset-lg-9{margin-left:75%}.offset-lg-10{margin-left:83.333333%}.offset-lg-11{margin-left:91.666667%}}@media (min-width:1200px){.col-xl{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-xl-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-xl-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-xl-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-xl-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-xl-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-xl-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-xl-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-xl-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-xl-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-xl-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-xl-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-xl-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-xl-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-xl-first{-ms-flex-order:-1;order:-1}.order-xl-last{-ms-flex-order:13;order:13}.order-xl-0{-ms-flex-order:0;order:0}.order-xl-1{-ms-flex-order:1;order:1}.order-xl-2{-ms-flex-order:2;order:2}.order-xl-3{-ms-flex-order:3;order:3}.order-xl-4{-ms-flex-order:4;order:4}.order-xl-5{-ms-flex-order:5;order:5}.order-xl-6{-ms-flex-order:6;order:6}.order-xl-7{-ms-flex-order:7;order:7}.order-xl-8{-ms-flex-order:8;order:8}.order-xl-9{-ms-flex-order:9;order:9}.order-xl-10{-ms-flex-order:10;order:10}.order-xl-11{-ms-flex-order:11;order:11}.order-xl-12{-ms-flex-order:12;order:12}.offset-xl-0{margin-left:0}.offset-xl-1{margin-left:8.333333%}.offset-xl-2{margin-left:16.666667%}.offset-xl-3{margin-left:25%}.offset-xl-4{margin-left:33.333333%}.offset-xl-5{margin-left:41.666667%}.offset-xl-6{margin-left:50%}.offset-xl-7{margin-left:58.333333%}.offset-xl-8{margin-left:66.666667%}.offset-xl-9{margin-left:75%}.offset-xl-10{margin-left:83.333333%}.offset-xl-11{margin-left:91.666667%}}.table{width:100%;margin-bottom:1rem;color:#212529}.table td,.table th{padding:.75rem;vertical-align:top;border-top:1px solid #dee2e6}.table thead th{vertical-align:bottom;border-bottom:2px solid #dee2e6}.table tbody+tbody{border-top:2px solid #dee2e6}.table-sm td,.table-sm th{padding:.3rem}.table-bordered{border:1px solid #dee2e6}.table-bordered td,.table-bordered th{border:1px solid #dee2e6}.table-bordered thead td,.table-bordered thead th{border-bottom-width:2px}.table-borderless tbody+tbody,.table-borderless td,.table-borderless th,.table-borderless thead th{border:0}.table-striped tbody tr:nth-of-type(odd){background-color:rgba(0,0,0,.05)}.table-hover tbody tr:hover{color:#212529;background-color:rgba(0,0,0,.075)}.table-primary,.table-primary>td,.table-primary>th{background-color:#b8daff}.table-primary tbody+tbody,.table-primary td,.table-primary th,.table-primary thead th{border-color:#7abaff}.table-hover .table-primary:hover{background-color:#9fcdff}.table-hover .table-primary:hover>td,.table-hover .table-primary:hover>th{background-color:#9fcdff}.table-secondary,.table-secondary>td,.table-secondary>th{background-color:#d6d8db}.table-secondary tbody+tbody,.table-secondary td,.table-secondary th,.table-secondary thead th{border-color:#b3b7bb}.table-hover .table-secondary:hover{background-color:#c8cbcf}.table-hover .table-secondary:hover>td,.table-hover .table-secondary:hover>th{background-color:#c8cbcf}.table-success,.table-success>td,.table-success>th{background-color:#c3e6cb}.table-success tbody+tbody,.table-success td,.table-success th,.table-success thead th{border-color:#8fd19e}.table-hover .table-success:hover{background-color:#b1dfbb}.table-hover .table-success:hover>td,.table-hover .table-success:hover>th{background-color:#b1dfbb}.table-info,.table-info>td,.table-info>th{background-color:#bee5eb}.table-info tbody+tbody,.table-info td,.table-info th,.table-info thead th{border-color:#86cfda}.table-hover .table-info:hover{background-color:#abdde5}.table-hover .table-info:hover>td,.table-hover .table-info:hover>th{background-color:#abdde5}.table-warning,.table-warning>td,.table-warning>th{background-color:#ffeeba}.table-warning tbody+tbody,.table-warning td,.table-warning th,.table-warning thead th{border-color:#ffdf7e}.table-hover .table-warning:hover{background-color:#ffe8a1}.table-hover .table-warning:hover>td,.table-hover .table-warning:hover>th{background-color:#ffe8a1}.table-danger,.table-danger>td,.table-danger>th{background-color:#f5c6cb}.table-danger tbody+tbody,.table-danger td,.table-danger th,.table-danger thead th{border-color:#ed969e}.table-hover .table-danger:hover{background-color:#f1b0b7}.table-hover .table-danger:hover>td,.table-hover .table-danger:hover>th{background-color:#f1b0b7}.table-light,.table-light>td,.table-light>th{background-color:#fdfdfe}.table-light tbody+tbody,.table-light td,.table-light th,.table-light thead th{border-color:#fbfcfc}.table-hover .table-light:hover{background-color:#ececf6}.table-hover .table-light:hover>td,.table-hover .table-light:hover>th{background-color:#ececf6}.table-dark,.table-dark>td,.table-dark>th{background-color:#c6c8ca}.table-dark tbody+tbody,.table-dark td,.table-dark th,.table-dark thead th{border-color:#95999c}.table-hover .table-dark:hover{background-color:#b9bbbe}.table-hover .table-dark:hover>td,.table-hover .table-dark:hover>th{background-color:#b9bbbe}.table-active,.table-active>td,.table-active>th{background-color:rgba(0,0,0,.075)}.table-hover .table-active:hover{background-color:rgba(0,0,0,.075)}.table-hover .table-active:hover>td,.table-hover .table-active:hover>th{background-color:rgba(0,0,0,.075)}.table .thead-dark th{color:#fff;background-color:#343a40;border-color:#454d55}.table .thead-light th{color:#495057;background-color:#e9ecef;border-color:#dee2e6}.table-dark{color:#fff;background-color:#343a40}.table-dark td,.table-dark th,.table-dark thead th{border-color:#454d55}.table-dark.table-bordered{border:0}.table-dark.table-striped tbody tr:nth-of-type(odd){background-color:rgba(255,255,255,.05)}.table-dark.table-hover tbody tr:hover{color:#fff;background-color:rgba(255,255,255,.075)}@media (max-width:575.98px){.table-responsive-sm{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-sm>.table-bordered{border:0}}@media (max-width:767.98px){.table-responsive-md{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-md>.table-bordered{border:0}}@media (max-width:991.98px){.table-responsive-lg{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-lg>.table-bordered{border:0}}@media (max-width:1199.98px){.table-responsive-xl{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-xl>.table-bordered{border:0}}.table-responsive{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive>.table-bordered{border:0}.form-control{display:block;width:100%;height:calc(1.5em + .75rem + 2px);padding:.375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:#495057;background-color:#fff;background-clip:padding-box;border:1px solid #ced4da;border-radius:.25rem;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.form-control{transition:none}}.form-control::-ms-expand{background-color:transparent;border:0}.form-control:focus{color:#495057;background-color:#fff;border-color:#80bdff;outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.form-control::-webkit-input-placeholder{color:#6c757d;opacity:1}.form-control::-moz-placeholder{color:#6c757d;opacity:1}.form-control:-ms-input-placeholder{color:#6c757d;opacity:1}.form-control::-ms-input-placeholder{color:#6c757d;opacity:1}.form-control::placeholder{color:#6c757d;opacity:1}.form-control:disabled,.form-control[readonly]{background-color:#e9ecef;opacity:1}select.form-control:focus::-ms-value{color:#495057;background-color:#fff}.form-control-file,.form-control-range{display:block;width:100%}.col-form-label{padding-top:calc(.375rem + 1px);padding-bottom:calc(.375rem + 1px);margin-bottom:0;font-size:inherit;line-height:1.5}.col-form-label-lg{padding-top:calc(.5rem + 1px);padding-bottom:calc(.5rem + 1px);font-size:1.25rem;line-height:1.5}.col-form-label-sm{padding-top:calc(.25rem + 1px);padding-bottom:calc(.25rem + 1px);font-size:.875rem;line-height:1.5}.form-control-plaintext{display:block;width:100%;padding-top:.375rem;padding-bottom:.375rem;margin-bottom:0;line-height:1.5;color:#212529;background-color:transparent;border:solid transparent;border-width:1px 0}.form-control-plaintext.form-control-lg,.form-control-plaintext.form-control-sm{padding-right:0;padding-left:0}.form-control-sm{height:calc(1.5em + .5rem + 2px);padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.form-control-lg{height:calc(1.5em + 1rem + 2px);padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}select.form-control[multiple],select.form-control[size]{height:auto}textarea.form-control{height:auto}.form-group{margin-bottom:1rem}.form-text{display:block;margin-top:.25rem}.form-row{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-right:-5px;margin-left:-5px}.form-row>.col,.form-row>[class*=col-]{padding-right:5px;padding-left:5px}.form-check{position:relative;display:block;padding-left:1.25rem}.form-check-input{position:absolute;margin-top:.3rem;margin-left:-1.25rem}.form-check-input:disabled~.form-check-label{color:#6c757d}.form-check-label{margin-bottom:0}.form-check-inline{display:-ms-inline-flexbox;display:inline-flex;-ms-flex-align:center;align-items:center;padding-left:0;margin-right:.75rem}.form-check-inline .form-check-input{position:static;margin-top:0;margin-right:.3125rem;margin-left:0}.valid-feedback{display:none;width:100%;margin-top:.25rem;font-size:80%;color:#28a745}.valid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;line-height:1.5;color:#fff;background-color:rgba(40,167,69,.9);border-radius:.25rem}.form-control.is-valid,.was-validated .form-control:valid{border-color:#28a745;padding-right:calc(1.5em + .75rem);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%2328a745' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:center right calc(.375em + .1875rem);background-size:calc(.75em + .375rem) calc(.75em + .375rem)}.form-control.is-valid:focus,.was-validated .form-control:valid:focus{border-color:#28a745;box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.form-control.is-valid~.valid-feedback,.form-control.is-valid~.valid-tooltip,.was-validated .form-control:valid~.valid-feedback,.was-validated .form-control:valid~.valid-tooltip{display:block}.was-validated textarea.form-control:valid,textarea.form-control.is-valid{padding-right:calc(1.5em + .75rem);background-position:top calc(.375em + .1875rem) right calc(.375em + .1875rem)}.custom-select.is-valid,.was-validated .custom-select:valid{border-color:#28a745;padding-right:calc((1em + .75rem) * 3 / 4 + 1.75rem);background:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") no-repeat right .75rem center/8px 10px,url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%2328a745' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e") #fff no-repeat center right 1.75rem/calc(.75em + .375rem) calc(.75em + .375rem)}.custom-select.is-valid:focus,.was-validated .custom-select:valid:focus{border-color:#28a745;box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.custom-select.is-valid~.valid-feedback,.custom-select.is-valid~.valid-tooltip,.was-validated .custom-select:valid~.valid-feedback,.was-validated .custom-select:valid~.valid-tooltip{display:block}.form-control-file.is-valid~.valid-feedback,.form-control-file.is-valid~.valid-tooltip,.was-validated .form-control-file:valid~.valid-feedback,.was-validated .form-control-file:valid~.valid-tooltip{display:block}.form-check-input.is-valid~.form-check-label,.was-validated .form-check-input:valid~.form-check-label{color:#28a745}.form-check-input.is-valid~.valid-feedback,.form-check-input.is-valid~.valid-tooltip,.was-validated .form-check-input:valid~.valid-feedback,.was-validated .form-check-input:valid~.valid-tooltip{display:block}.custom-control-input.is-valid~.custom-control-label,.was-validated .custom-control-input:valid~.custom-control-label{color:#28a745}.custom-control-input.is-valid~.custom-control-label::before,.was-validated .custom-control-input:valid~.custom-control-label::before{border-color:#28a745}.custom-control-input.is-valid~.valid-feedback,.custom-control-input.is-valid~.valid-tooltip,.was-validated .custom-control-input:valid~.valid-feedback,.was-validated .custom-control-input:valid~.valid-tooltip{display:block}.custom-control-input.is-valid:checked~.custom-control-label::before,.was-validated .custom-control-input:valid:checked~.custom-control-label::before{border-color:#34ce57;background-color:#34ce57}.custom-control-input.is-valid:focus~.custom-control-label::before,.was-validated .custom-control-input:valid:focus~.custom-control-label::before{box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.custom-control-input.is-valid:focus:not(:checked)~.custom-control-label::before,.was-validated .custom-control-input:valid:focus:not(:checked)~.custom-control-label::before{border-color:#28a745}.custom-file-input.is-valid~.custom-file-label,.was-validated .custom-file-input:valid~.custom-file-label{border-color:#28a745}.custom-file-input.is-valid~.valid-feedback,.custom-file-input.is-valid~.valid-tooltip,.was-validated .custom-file-input:valid~.valid-feedback,.was-validated .custom-file-input:valid~.valid-tooltip{display:block}.custom-file-input.is-valid:focus~.custom-file-label,.was-validated .custom-file-input:valid:focus~.custom-file-label{border-color:#28a745;box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.invalid-feedback{display:none;width:100%;margin-top:.25rem;font-size:80%;color:#dc3545}.invalid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;line-height:1.5;color:#fff;background-color:rgba(220,53,69,.9);border-radius:.25rem}.form-control.is-invalid,.was-validated .form-control:invalid{border-color:#dc3545;padding-right:calc(1.5em + .75rem);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23dc3545' viewBox='-2 -2 7 7'%3e%3cpath stroke='%23dc3545' d='M0 0l3 3m0-3L0 3'/%3e%3ccircle r='.5'/%3e%3ccircle cx='3' r='.5'/%3e%3ccircle cy='3' r='.5'/%3e%3ccircle cx='3' cy='3' r='.5'/%3e%3c/svg%3E");background-repeat:no-repeat;background-position:center right calc(.375em + .1875rem);background-size:calc(.75em + .375rem) calc(.75em + .375rem)}.form-control.is-invalid:focus,.was-validated .form-control:invalid:focus{border-color:#dc3545;box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.form-control.is-invalid~.invalid-feedback,.form-control.is-invalid~.invalid-tooltip,.was-validated .form-control:invalid~.invalid-feedback,.was-validated .form-control:invalid~.invalid-tooltip{display:block}.was-validated textarea.form-control:invalid,textarea.form-control.is-invalid{padding-right:calc(1.5em + .75rem);background-position:top calc(.375em + .1875rem) right calc(.375em + .1875rem)}.custom-select.is-invalid,.was-validated .custom-select:invalid{border-color:#dc3545;padding-right:calc((1em + .75rem) * 3 / 4 + 1.75rem);background:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") no-repeat right .75rem center/8px 10px,url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23dc3545' viewBox='-2 -2 7 7'%3e%3cpath stroke='%23dc3545' d='M0 0l3 3m0-3L0 3'/%3e%3ccircle r='.5'/%3e%3ccircle cx='3' r='.5'/%3e%3ccircle cy='3' r='.5'/%3e%3ccircle cx='3' cy='3' r='.5'/%3e%3c/svg%3E") #fff no-repeat center right 1.75rem/calc(.75em + .375rem) calc(.75em + .375rem)}.custom-select.is-invalid:focus,.was-validated .custom-select:invalid:focus{border-color:#dc3545;box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.custom-select.is-invalid~.invalid-feedback,.custom-select.is-invalid~.invalid-tooltip,.was-validated .custom-select:invalid~.invalid-feedback,.was-validated .custom-select:invalid~.invalid-tooltip{display:block}.form-control-file.is-invalid~.invalid-feedback,.form-control-file.is-invalid~.invalid-tooltip,.was-validated .form-control-file:invalid~.invalid-feedback,.was-validated .form-control-file:invalid~.invalid-tooltip{display:block}.form-check-input.is-invalid~.form-check-label,.was-validated .form-check-input:invalid~.form-check-label{color:#dc3545}.form-check-input.is-invalid~.invalid-feedback,.form-check-input.is-invalid~.invalid-tooltip,.was-validated .form-check-input:invalid~.invalid-feedback,.was-validated .form-check-input:invalid~.invalid-tooltip{display:block}.custom-control-input.is-invalid~.custom-control-label,.was-validated .custom-control-input:invalid~.custom-control-label{color:#dc3545}.custom-control-input.is-invalid~.custom-control-label::before,.was-validated .custom-control-input:invalid~.custom-control-label::before{border-color:#dc3545}.custom-control-input.is-invalid~.invalid-feedback,.custom-control-input.is-invalid~.invalid-tooltip,.was-validated .custom-control-input:invalid~.invalid-feedback,.was-validated .custom-control-input:invalid~.invalid-tooltip{display:block}.custom-control-input.is-invalid:checked~.custom-control-label::before,.was-validated .custom-control-input:invalid:checked~.custom-control-label::before{border-color:#e4606d;background-color:#e4606d}.custom-control-input.is-invalid:focus~.custom-control-label::before,.was-validated .custom-control-input:invalid:focus~.custom-control-label::before{box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.custom-control-input.is-invalid:focus:not(:checked)~.custom-control-label::before,.was-validated .custom-control-input:invalid:focus:not(:checked)~.custom-control-label::before{border-color:#dc3545}.custom-file-input.is-invalid~.custom-file-label,.was-validated .custom-file-input:invalid~.custom-file-label{border-color:#dc3545}.custom-file-input.is-invalid~.invalid-feedback,.custom-file-input.is-invalid~.invalid-tooltip,.was-validated .custom-file-input:invalid~.invalid-feedback,.was-validated .custom-file-input:invalid~.invalid-tooltip{display:block}.custom-file-input.is-invalid:focus~.custom-file-label,.was-validated .custom-file-input:invalid:focus~.custom-file-label{border-color:#dc3545;box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.form-inline{display:-ms-flexbox;display:flex;-ms-flex-flow:row wrap;flex-flow:row wrap;-ms-flex-align:center;align-items:center}.form-inline .form-check{width:100%}@media (min-width:576px){.form-inline label{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;margin-bottom:0}.form-inline .form-group{display:-ms-flexbox;display:flex;-ms-flex:0 0 auto;flex:0 0 auto;-ms-flex-flow:row wrap;flex-flow:row wrap;-ms-flex-align:center;align-items:center;margin-bottom:0}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-plaintext{display:inline-block}.form-inline .custom-select,.form-inline .input-group{width:auto}.form-inline .form-check{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;width:auto;padding-left:0}.form-inline .form-check-input{position:relative;-ms-flex-negative:0;flex-shrink:0;margin-top:0;margin-right:.25rem;margin-left:0}.form-inline .custom-control{-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center}.form-inline .custom-control-label{margin-bottom:0}}.btn{display:inline-block;font-weight:400;color:#212529;text-align:center;vertical-align:middle;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-color:transparent;border:1px solid transparent;padding:.375rem .75rem;font-size:1rem;line-height:1.5;border-radius:.25rem;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.btn{transition:none}}.btn:hover{color:#212529;text-decoration:none}.btn.focus,.btn:focus{outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.btn.disabled,.btn:disabled{opacity:.65}a.btn.disabled,fieldset:disabled a.btn{pointer-events:none}.btn-primary{color:#fff;background-color:#007bff;border-color:#007bff}.btn-primary:hover{color:#fff;background-color:#0069d9;border-color:#0062cc}.btn-primary.focus,.btn-primary:focus{box-shadow:0 0 0 .2rem rgba(38,143,255,.5)}.btn-primary.disabled,.btn-primary:disabled{color:#fff;background-color:#007bff;border-color:#007bff}.btn-primary:not(:disabled):not(.disabled).active,.btn-primary:not(:disabled):not(.disabled):active,.show>.btn-primary.dropdown-toggle{color:#fff;background-color:#0062cc;border-color:#005cbf}.btn-primary:not(:disabled):not(.disabled).active:focus,.btn-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(38,143,255,.5)}.btn-secondary{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-secondary:hover{color:#fff;background-color:#5a6268;border-color:#545b62}.btn-secondary.focus,.btn-secondary:focus{box-shadow:0 0 0 .2rem rgba(130,138,145,.5)}.btn-secondary.disabled,.btn-secondary:disabled{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-secondary:not(:disabled):not(.disabled).active,.btn-secondary:not(:disabled):not(.disabled):active,.show>.btn-secondary.dropdown-toggle{color:#fff;background-color:#545b62;border-color:#4e555b}.btn-secondary:not(:disabled):not(.disabled).active:focus,.btn-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(130,138,145,.5)}.btn-success{color:#fff;background-color:#28a745;border-color:#28a745}.btn-success:hover{color:#fff;background-color:#218838;border-color:#1e7e34}.btn-success.focus,.btn-success:focus{box-shadow:0 0 0 .2rem rgba(72,180,97,.5)}.btn-success.disabled,.btn-success:disabled{color:#fff;background-color:#28a745;border-color:#28a745}.btn-success:not(:disabled):not(.disabled).active,.btn-success:not(:disabled):not(.disabled):active,.show>.btn-success.dropdown-toggle{color:#fff;background-color:#1e7e34;border-color:#1c7430}.btn-success:not(:disabled):not(.disabled).active:focus,.btn-success:not(:disabled):not(.disabled):active:focus,.show>.btn-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(72,180,97,.5)}.btn-info{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-info:hover{color:#fff;background-color:#138496;border-color:#117a8b}.btn-info.focus,.btn-info:focus{box-shadow:0 0 0 .2rem rgba(58,176,195,.5)}.btn-info.disabled,.btn-info:disabled{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-info:not(:disabled):not(.disabled).active,.btn-info:not(:disabled):not(.disabled):active,.show>.btn-info.dropdown-toggle{color:#fff;background-color:#117a8b;border-color:#10707f}.btn-info:not(:disabled):not(.disabled).active:focus,.btn-info:not(:disabled):not(.disabled):active:focus,.show>.btn-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(58,176,195,.5)}.btn-warning{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-warning:hover{color:#212529;background-color:#e0a800;border-color:#d39e00}.btn-warning.focus,.btn-warning:focus{box-shadow:0 0 0 .2rem rgba(222,170,12,.5)}.btn-warning.disabled,.btn-warning:disabled{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-warning:not(:disabled):not(.disabled).active,.btn-warning:not(:disabled):not(.disabled):active,.show>.btn-warning.dropdown-toggle{color:#212529;background-color:#d39e00;border-color:#c69500}.btn-warning:not(:disabled):not(.disabled).active:focus,.btn-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(222,170,12,.5)}.btn-danger{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-danger:hover{color:#fff;background-color:#c82333;border-color:#bd2130}.btn-danger.focus,.btn-danger:focus{box-shadow:0 0 0 .2rem rgba(225,83,97,.5)}.btn-danger.disabled,.btn-danger:disabled{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-danger:not(:disabled):not(.disabled).active,.btn-danger:not(:disabled):not(.disabled):active,.show>.btn-danger.dropdown-toggle{color:#fff;background-color:#bd2130;border-color:#b21f2d}.btn-danger:not(:disabled):not(.disabled).active:focus,.btn-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(225,83,97,.5)}.btn-light{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:hover{color:#212529;background-color:#e2e6ea;border-color:#dae0e5}.btn-light.focus,.btn-light:focus{box-shadow:0 0 0 .2rem rgba(216,217,219,.5)}.btn-light.disabled,.btn-light:disabled{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:not(:disabled):not(.disabled).active,.btn-light:not(:disabled):not(.disabled):active,.show>.btn-light.dropdown-toggle{color:#212529;background-color:#dae0e5;border-color:#d3d9df}.btn-light:not(:disabled):not(.disabled).active:focus,.btn-light:not(:disabled):not(.disabled):active:focus,.show>.btn-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(216,217,219,.5)}.btn-dark{color:#fff;background-color:#343a40;border-color:#343a40}.btn-dark:hover{color:#fff;background-color:#23272b;border-color:#1d2124}.btn-dark.focus,.btn-dark:focus{box-shadow:0 0 0 .2rem rgba(82,88,93,.5)}.btn-dark.disabled,.btn-dark:disabled{color:#fff;background-color:#343a40;border-color:#343a40}.btn-dark:not(:disabled):not(.disabled).active,.btn-dark:not(:disabled):not(.disabled):active,.show>.btn-dark.dropdown-toggle{color:#fff;background-color:#1d2124;border-color:#171a1d}.btn-dark:not(:disabled):not(.disabled).active:focus,.btn-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(82,88,93,.5)}.btn-outline-primary{color:#007bff;border-color:#007bff}.btn-outline-primary:hover{color:#fff;background-color:#007bff;border-color:#007bff}.btn-outline-primary.focus,.btn-outline-primary:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.btn-outline-primary.disabled,.btn-outline-primary:disabled{color:#007bff;background-color:transparent}.btn-outline-primary:not(:disabled):not(.disabled).active,.btn-outline-primary:not(:disabled):not(.disabled):active,.show>.btn-outline-primary.dropdown-toggle{color:#fff;background-color:#007bff;border-color:#007bff}.btn-outline-primary:not(:disabled):not(.disabled).active:focus,.btn-outline-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.btn-outline-secondary{color:#6c757d;border-color:#6c757d}.btn-outline-secondary:hover{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-outline-secondary.focus,.btn-outline-secondary:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-outline-secondary.disabled,.btn-outline-secondary:disabled{color:#6c757d;background-color:transparent}.btn-outline-secondary:not(:disabled):not(.disabled).active,.btn-outline-secondary:not(:disabled):not(.disabled):active,.show>.btn-outline-secondary.dropdown-toggle{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-outline-secondary:not(:disabled):not(.disabled).active:focus,.btn-outline-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-outline-success{color:#28a745;border-color:#28a745}.btn-outline-success:hover{color:#fff;background-color:#28a745;border-color:#28a745}.btn-outline-success.focus,.btn-outline-success:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-outline-success.disabled,.btn-outline-success:disabled{color:#28a745;background-color:transparent}.btn-outline-success:not(:disabled):not(.disabled).active,.btn-outline-success:not(:disabled):not(.disabled):active,.show>.btn-outline-success.dropdown-toggle{color:#fff;background-color:#28a745;border-color:#28a745}.btn-outline-success:not(:disabled):not(.disabled).active:focus,.btn-outline-success:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-outline-info{color:#17a2b8;border-color:#17a2b8}.btn-outline-info:hover{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-outline-info.focus,.btn-outline-info:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-outline-info.disabled,.btn-outline-info:disabled{color:#17a2b8;background-color:transparent}.btn-outline-info:not(:disabled):not(.disabled).active,.btn-outline-info:not(:disabled):not(.disabled):active,.show>.btn-outline-info.dropdown-toggle{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-outline-info:not(:disabled):not(.disabled).active:focus,.btn-outline-info:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-outline-warning{color:#ffc107;border-color:#ffc107}.btn-outline-warning:hover{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-outline-warning.focus,.btn-outline-warning:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-outline-warning.disabled,.btn-outline-warning:disabled{color:#ffc107;background-color:transparent}.btn-outline-warning:not(:disabled):not(.disabled).active,.btn-outline-warning:not(:disabled):not(.disabled):active,.show>.btn-outline-warning.dropdown-toggle{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-outline-warning:not(:disabled):not(.disabled).active:focus,.btn-outline-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-outline-danger{color:#dc3545;border-color:#dc3545}.btn-outline-danger:hover{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-outline-danger.focus,.btn-outline-danger:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-outline-danger.disabled,.btn-outline-danger:disabled{color:#dc3545;background-color:transparent}.btn-outline-danger:not(:disabled):not(.disabled).active,.btn-outline-danger:not(:disabled):not(.disabled):active,.show>.btn-outline-danger.dropdown-toggle{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-outline-danger:not(:disabled):not(.disabled).active:focus,.btn-outline-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-outline-light{color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light:hover{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light.focus,.btn-outline-light:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-outline-light.disabled,.btn-outline-light:disabled{color:#f8f9fa;background-color:transparent}.btn-outline-light:not(:disabled):not(.disabled).active,.btn-outline-light:not(:disabled):not(.disabled):active,.show>.btn-outline-light.dropdown-toggle{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light:not(:disabled):not(.disabled).active:focus,.btn-outline-light:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-outline-dark{color:#343a40;border-color:#343a40}.btn-outline-dark:hover{color:#fff;background-color:#343a40;border-color:#343a40}.btn-outline-dark.focus,.btn-outline-dark:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-outline-dark.disabled,.btn-outline-dark:disabled{color:#343a40;background-color:transparent}.btn-outline-dark:not(:disabled):not(.disabled).active,.btn-outline-dark:not(:disabled):not(.disabled):active,.show>.btn-outline-dark.dropdown-toggle{color:#fff;background-color:#343a40;border-color:#343a40}.btn-outline-dark:not(:disabled):not(.disabled).active:focus,.btn-outline-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-link{font-weight:400;color:#007bff;text-decoration:none}.btn-link:hover{color:#0056b3;text-decoration:underline}.btn-link.focus,.btn-link:focus{text-decoration:underline;box-shadow:none}.btn-link.disabled,.btn-link:disabled{color:#6c757d;pointer-events:none}.btn-group-lg>.btn,.btn-lg{padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}.btn-group-sm>.btn,.btn-sm{padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:.5rem}input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.fade{transition:opacity .15s linear}@media (prefers-reduced-motion:reduce){.fade{transition:none}}.fade:not(.show){opacity:0}.collapse:not(.show){display:none}.collapsing{position:relative;height:0;overflow:hidden;transition:height .35s ease}@media (prefers-reduced-motion:reduce){.collapsing{transition:none}}.dropdown,.dropleft,.dropright,.dropup{position:relative}.dropdown-toggle{white-space:nowrap}.dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid;border-right:.3em solid transparent;border-bottom:0;border-left:.3em solid transparent}.dropdown-toggle:empty::after{margin-left:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:10rem;padding:.5rem 0;margin:.125rem 0 0;font-size:1rem;color:#212529;text-align:left;list-style:none;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.15);border-radius:.25rem}.dropdown-menu-left{right:auto;left:0}.dropdown-menu-right{right:0;left:auto}@media (min-width:576px){.dropdown-menu-sm-left{right:auto;left:0}.dropdown-menu-sm-right{right:0;left:auto}}@media (min-width:768px){.dropdown-menu-md-left{right:auto;left:0}.dropdown-menu-md-right{right:0;left:auto}}@media (min-width:992px){.dropdown-menu-lg-left{right:auto;left:0}.dropdown-menu-lg-right{right:0;left:auto}}@media (min-width:1200px){.dropdown-menu-xl-left{right:auto;left:0}.dropdown-menu-xl-right{right:0;left:auto}}.dropup .dropdown-menu{top:auto;bottom:100%;margin-top:0;margin-bottom:.125rem}.dropup .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:0;border-right:.3em solid transparent;border-bottom:.3em solid;border-left:.3em solid transparent}.dropup .dropdown-toggle:empty::after{margin-left:0}.dropright .dropdown-menu{top:0;right:auto;left:100%;margin-top:0;margin-left:.125rem}.dropright .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:0;border-bottom:.3em solid transparent;border-left:.3em solid}.dropright .dropdown-toggle:empty::after{margin-left:0}.dropright .dropdown-toggle::after{vertical-align:0}.dropleft .dropdown-menu{top:0;right:100%;left:auto;margin-top:0;margin-right:.125rem}.dropleft .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:""}.dropleft .dropdown-toggle::after{display:none}.dropleft .dropdown-toggle::before{display:inline-block;margin-right:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:.3em solid;border-bottom:.3em solid transparent}.dropleft .dropdown-toggle:empty::after{margin-left:0}.dropleft .dropdown-toggle::before{vertical-align:0}.dropdown-menu[x-placement^=bottom],.dropdown-menu[x-placement^=left],.dropdown-menu[x-placement^=right],.dropdown-menu[x-placement^=top]{right:auto;bottom:auto}.dropdown-divider{height:0;margin:.5rem 0;overflow:hidden;border-top:1px solid #e9ecef}.dropdown-item{display:block;width:100%;padding:.25rem 1.5rem;clear:both;font-weight:400;color:#212529;text-align:inherit;white-space:nowrap;background-color:transparent;border:0}.dropdown-item:focus,.dropdown-item:hover{color:#16181b;text-decoration:none;background-color:#f8f9fa}.dropdown-item.active,.dropdown-item:active{color:#fff;text-decoration:none;background-color:#007bff}.dropdown-item.disabled,.dropdown-item:disabled{color:#6c757d;pointer-events:none;background-color:transparent}.dropdown-menu.show{display:block}.dropdown-header{display:block;padding:.5rem 1.5rem;margin-bottom:0;font-size:.875rem;color:#6c757d;white-space:nowrap}.dropdown-item-text{display:block;padding:.25rem 1.5rem;color:#212529}.btn-group,.btn-group-vertical{position:relative;display:-ms-inline-flexbox;display:inline-flex;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;-ms-flex:1 1 auto;flex:1 1 auto}.btn-group-vertical>.btn:hover,.btn-group>.btn:hover{z-index:1}.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus{z-index:1}.btn-toolbar{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-pack:start;justify-content:flex-start}.btn-toolbar .input-group{width:auto}.btn-group>.btn-group:not(:first-child),.btn-group>.btn:not(:first-child){margin-left:-1px}.btn-group>.btn-group:not(:last-child)>.btn,.btn-group>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:not(:first-child)>.btn,.btn-group>.btn:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.dropdown-toggle-split{padding-right:.5625rem;padding-left:.5625rem}.dropdown-toggle-split::after,.dropright .dropdown-toggle-split::after,.dropup .dropdown-toggle-split::after{margin-left:0}.dropleft .dropdown-toggle-split::before{margin-right:0}.btn-group-sm>.btn+.dropdown-toggle-split,.btn-sm+.dropdown-toggle-split{padding-right:.375rem;padding-left:.375rem}.btn-group-lg>.btn+.dropdown-toggle-split,.btn-lg+.dropdown-toggle-split{padding-right:.75rem;padding-left:.75rem}.btn-group-vertical{-ms-flex-direction:column;flex-direction:column;-ms-flex-align:start;align-items:flex-start;-ms-flex-pack:center;justify-content:center}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group{width:100%}.btn-group-vertical>.btn-group:not(:first-child),.btn-group-vertical>.btn:not(:first-child){margin-top:-1px}.btn-group-vertical>.btn-group:not(:last-child)>.btn,.btn-group-vertical>.btn:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:not(:first-child)>.btn,.btn-group-vertical>.btn:not(:first-child){border-top-left-radius:0;border-top-right-radius:0}.btn-group-toggle>.btn,.btn-group-toggle>.btn-group>.btn{margin-bottom:0}.btn-group-toggle>.btn input[type=checkbox],.btn-group-toggle>.btn input[type=radio],.btn-group-toggle>.btn-group>.btn input[type=checkbox],.btn-group-toggle>.btn-group>.btn input[type=radio]{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.input-group{position:relative;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-align:stretch;align-items:stretch;width:100%}.input-group>.custom-file,.input-group>.custom-select,.input-group>.form-control,.input-group>.form-control-plaintext{position:relative;-ms-flex:1 1 auto;flex:1 1 auto;width:1%;margin-bottom:0}.input-group>.custom-file+.custom-file,.input-group>.custom-file+.custom-select,.input-group>.custom-file+.form-control,.input-group>.custom-select+.custom-file,.input-group>.custom-select+.custom-select,.input-group>.custom-select+.form-control,.input-group>.form-control+.custom-file,.input-group>.form-control+.custom-select,.input-group>.form-control+.form-control,.input-group>.form-control-plaintext+.custom-file,.input-group>.form-control-plaintext+.custom-select,.input-group>.form-control-plaintext+.form-control{margin-left:-1px}.input-group>.custom-file .custom-file-input:focus~.custom-file-label,.input-group>.custom-select:focus,.input-group>.form-control:focus{z-index:3}.input-group>.custom-file .custom-file-input:focus{z-index:4}.input-group>.custom-select:not(:last-child),.input-group>.form-control:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.custom-select:not(:first-child),.input-group>.form-control:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.input-group>.custom-file{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center}.input-group>.custom-file:not(:last-child) .custom-file-label,.input-group>.custom-file:not(:last-child) .custom-file-label::after{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.custom-file:not(:first-child) .custom-file-label{border-top-left-radius:0;border-bottom-left-radius:0}.input-group-append,.input-group-prepend{display:-ms-flexbox;display:flex}.input-group-append .btn,.input-group-prepend .btn{position:relative;z-index:2}.input-group-append .btn:focus,.input-group-prepend .btn:focus{z-index:3}.input-group-append .btn+.btn,.input-group-append .btn+.input-group-text,.input-group-append .input-group-text+.btn,.input-group-append .input-group-text+.input-group-text,.input-group-prepend .btn+.btn,.input-group-prepend .btn+.input-group-text,.input-group-prepend .input-group-text+.btn,.input-group-prepend .input-group-text+.input-group-text{margin-left:-1px}.input-group-prepend{margin-right:-1px}.input-group-append{margin-left:-1px}.input-group-text{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;padding:.375rem .75rem;margin-bottom:0;font-size:1rem;font-weight:400;line-height:1.5;color:#495057;text-align:center;white-space:nowrap;background-color:#e9ecef;border:1px solid #ced4da;border-radius:.25rem}.input-group-text input[type=checkbox],.input-group-text input[type=radio]{margin-top:0}.input-group-lg>.custom-select,.input-group-lg>.form-control:not(textarea){height:calc(1.5em + 1rem + 2px)}.input-group-lg>.custom-select,.input-group-lg>.form-control,.input-group-lg>.input-group-append>.btn,.input-group-lg>.input-group-append>.input-group-text,.input-group-lg>.input-group-prepend>.btn,.input-group-lg>.input-group-prepend>.input-group-text{padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}.input-group-sm>.custom-select,.input-group-sm>.form-control:not(textarea){height:calc(1.5em + .5rem + 2px)}.input-group-sm>.custom-select,.input-group-sm>.form-control,.input-group-sm>.input-group-append>.btn,.input-group-sm>.input-group-append>.input-group-text,.input-group-sm>.input-group-prepend>.btn,.input-group-sm>.input-group-prepend>.input-group-text{padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.input-group-lg>.custom-select,.input-group-sm>.custom-select{padding-right:1.75rem}.input-group>.input-group-append:last-child>.btn:not(:last-child):not(.dropdown-toggle),.input-group>.input-group-append:last-child>.input-group-text:not(:last-child),.input-group>.input-group-append:not(:last-child)>.btn,.input-group>.input-group-append:not(:last-child)>.input-group-text,.input-group>.input-group-prepend>.btn,.input-group>.input-group-prepend>.input-group-text{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.input-group-append>.btn,.input-group>.input-group-append>.input-group-text,.input-group>.input-group-prepend:first-child>.btn:not(:first-child),.input-group>.input-group-prepend:first-child>.input-group-text:not(:first-child),.input-group>.input-group-prepend:not(:first-child)>.btn,.input-group>.input-group-prepend:not(:first-child)>.input-group-text{border-top-left-radius:0;border-bottom-left-radius:0}.custom-control{position:relative;display:block;min-height:1.5rem;padding-left:1.5rem}.custom-control-inline{display:-ms-inline-flexbox;display:inline-flex;margin-right:1rem}.custom-control-input{position:absolute;z-index:-1;opacity:0}.custom-control-input:checked~.custom-control-label::before{color:#fff;border-color:#007bff;background-color:#007bff}.custom-control-input:focus~.custom-control-label::before{box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.custom-control-input:focus:not(:checked)~.custom-control-label::before{border-color:#80bdff}.custom-control-input:not(:disabled):active~.custom-control-label::before{color:#fff;background-color:#b3d7ff;border-color:#b3d7ff}.custom-control-input:disabled~.custom-control-label{color:#6c757d}.custom-control-input:disabled~.custom-control-label::before{background-color:#e9ecef}.custom-control-label{position:relative;margin-bottom:0;vertical-align:top}.custom-control-label::before{position:absolute;top:.25rem;left:-1.5rem;display:block;width:1rem;height:1rem;pointer-events:none;content:"";background-color:#fff;border:#adb5bd solid 1px}.custom-control-label::after{position:absolute;top:.25rem;left:-1.5rem;display:block;width:1rem;height:1rem;content:"";background:no-repeat 50%/50% 50%}.custom-checkbox .custom-control-label::before{border-radius:.25rem}.custom-checkbox .custom-control-input:checked~.custom-control-label::after{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26 2.974 7.25 8 2.193z'/%3e%3c/svg%3e")}.custom-checkbox .custom-control-input:indeterminate~.custom-control-label::before{border-color:#007bff;background-color:#007bff}.custom-checkbox .custom-control-input:indeterminate~.custom-control-label::after{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 4'%3e%3cpath stroke='%23fff' d='M0 2h4'/%3e%3c/svg%3e")}.custom-checkbox .custom-control-input:disabled:checked~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-checkbox .custom-control-input:disabled:indeterminate~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-radio .custom-control-label::before{border-radius:50%}.custom-radio .custom-control-input:checked~.custom-control-label::after{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e")}.custom-radio .custom-control-input:disabled:checked~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-switch{padding-left:2.25rem}.custom-switch .custom-control-label::before{left:-2.25rem;width:1.75rem;pointer-events:all;border-radius:.5rem}.custom-switch .custom-control-label::after{top:calc(.25rem + 2px);left:calc(-2.25rem + 2px);width:calc(1rem - 4px);height:calc(1rem - 4px);background-color:#adb5bd;border-radius:.5rem;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out,-webkit-transform .15s ease-in-out;transition:transform .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:transform .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out,-webkit-transform .15s ease-in-out}@media (prefers-reduced-motion:reduce){.custom-switch .custom-control-label::after{transition:none}}.custom-switch .custom-control-input:checked~.custom-control-label::after{background-color:#fff;-webkit-transform:translateX(.75rem);transform:translateX(.75rem)}.custom-switch .custom-control-input:disabled:checked~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-select{display:inline-block;width:100%;height:calc(1.5em + .75rem + 2px);padding:.375rem 1.75rem .375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:#495057;vertical-align:middle;background:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") no-repeat right .75rem center/8px 10px;background-color:#fff;border:1px solid #ced4da;border-radius:.25rem;-webkit-appearance:none;-moz-appearance:none;appearance:none}.custom-select:focus{border-color:#80bdff;outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.custom-select:focus::-ms-value{color:#495057;background-color:#fff}.custom-select[multiple],.custom-select[size]:not([size="1"]){height:auto;padding-right:.75rem;background-image:none}.custom-select:disabled{color:#6c757d;background-color:#e9ecef}.custom-select::-ms-expand{display:none}.custom-select-sm{height:calc(1.5em + .5rem + 2px);padding-top:.25rem;padding-bottom:.25rem;padding-left:.5rem;font-size:.875rem}.custom-select-lg{height:calc(1.5em + 1rem + 2px);padding-top:.5rem;padding-bottom:.5rem;padding-left:1rem;font-size:1.25rem}.custom-file{position:relative;display:inline-block;width:100%;height:calc(1.5em + .75rem + 2px);margin-bottom:0}.custom-file-input{position:relative;z-index:2;width:100%;height:calc(1.5em + .75rem + 2px);margin:0;opacity:0}.custom-file-input:focus~.custom-file-label{border-color:#80bdff;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.custom-file-input:disabled~.custom-file-label{background-color:#e9ecef}.custom-file-input:lang(en)~.custom-file-label::after{content:"Browse"}.custom-file-input~.custom-file-label[data-browse]::after{content:attr(data-browse)}.custom-file-label{position:absolute;top:0;right:0;left:0;z-index:1;height:calc(1.5em + .75rem + 2px);padding:.375rem .75rem;font-weight:400;line-height:1.5;color:#495057;background-color:#fff;border:1px solid #ced4da;border-radius:.25rem}.custom-file-label::after{position:absolute;top:0;right:0;bottom:0;z-index:3;display:block;height:calc(1.5em + .75rem);padding:.375rem .75rem;line-height:1.5;color:#495057;content:"Browse";background-color:#e9ecef;border-left:inherit;border-radius:0 .25rem .25rem 0}.custom-range{width:100%;height:calc(1rem + .4rem);padding:0;background-color:transparent;-webkit-appearance:none;-moz-appearance:none;appearance:none}.custom-range:focus{outline:0}.custom-range:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,.25)}.custom-range:focus::-moz-range-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,.25)}.custom-range:focus::-ms-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,.25)}.custom-range::-moz-focus-outer{border:0}.custom-range::-webkit-slider-thumb{width:1rem;height:1rem;margin-top:-.25rem;background-color:#007bff;border:0;border-radius:1rem;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;-webkit-appearance:none;appearance:none}@media (prefers-reduced-motion:reduce){.custom-range::-webkit-slider-thumb{transition:none}}.custom-range::-webkit-slider-thumb:active{background-color:#b3d7ff}.custom-range::-webkit-slider-runnable-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem}.custom-range::-moz-range-thumb{width:1rem;height:1rem;background-color:#007bff;border:0;border-radius:1rem;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;-moz-appearance:none;appearance:none}@media (prefers-reduced-motion:reduce){.custom-range::-moz-range-thumb{transition:none}}.custom-range::-moz-range-thumb:active{background-color:#b3d7ff}.custom-range::-moz-range-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem}.custom-range::-ms-thumb{width:1rem;height:1rem;margin-top:0;margin-right:.2rem;margin-left:.2rem;background-color:#007bff;border:0;border-radius:1rem;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;appearance:none}@media (prefers-reduced-motion:reduce){.custom-range::-ms-thumb{transition:none}}.custom-range::-ms-thumb:active{background-color:#b3d7ff}.custom-range::-ms-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:transparent;border-color:transparent;border-width:.5rem}.custom-range::-ms-fill-lower{background-color:#dee2e6;border-radius:1rem}.custom-range::-ms-fill-upper{margin-right:15px;background-color:#dee2e6;border-radius:1rem}.custom-range:disabled::-webkit-slider-thumb{background-color:#adb5bd}.custom-range:disabled::-webkit-slider-runnable-track{cursor:default}.custom-range:disabled::-moz-range-thumb{background-color:#adb5bd}.custom-range:disabled::-moz-range-track{cursor:default}.custom-range:disabled::-ms-thumb{background-color:#adb5bd}.custom-control-label::before,.custom-file-label,.custom-select{transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.custom-control-label::before,.custom-file-label,.custom-select{transition:none}}.nav{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding-left:0;margin-bottom:0;list-style:none}.nav-link{display:block;padding:.5rem 1rem}.nav-link:focus,.nav-link:hover{text-decoration:none}.nav-link.disabled{color:#6c757d;pointer-events:none;cursor:default}.nav-tabs{border-bottom:1px solid #dee2e6}.nav-tabs .nav-item{margin-bottom:-1px}.nav-tabs .nav-link{border:1px solid transparent;border-top-left-radius:.25rem;border-top-right-radius:.25rem}.nav-tabs .nav-link:focus,.nav-tabs .nav-link:hover{border-color:#e9ecef #e9ecef #dee2e6}.nav-tabs .nav-link.disabled{color:#6c757d;background-color:transparent;border-color:transparent}.nav-tabs .nav-item.show .nav-link,.nav-tabs .nav-link.active{color:#495057;background-color:#fff;border-color:#dee2e6 #dee2e6 #fff}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.nav-pills .nav-link{border-radius:.25rem}.nav-pills .nav-link.active,.nav-pills .show>.nav-link{color:#fff;background-color:#007bff}.nav-fill .nav-item{-ms-flex:1 1 auto;flex:1 1 auto;text-align:center}.nav-justified .nav-item{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;text-align:center}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.navbar{position:relative;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-align:center;align-items:center;-ms-flex-pack:justify;justify-content:space-between;padding:.5rem 1rem}.navbar>.container,.navbar>.container-fluid{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-align:center;align-items:center;-ms-flex-pack:justify;justify-content:space-between}.navbar-brand{display:inline-block;padding-top:.3125rem;padding-bottom:.3125rem;margin-right:1rem;font-size:1.25rem;line-height:inherit;white-space:nowrap}.navbar-brand:focus,.navbar-brand:hover{text-decoration:none}.navbar-nav{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;padding-left:0;margin-bottom:0;list-style:none}.navbar-nav .nav-link{padding-right:0;padding-left:0}.navbar-nav .dropdown-menu{position:static;float:none}.navbar-text{display:inline-block;padding-top:.5rem;padding-bottom:.5rem}.navbar-collapse{-ms-flex-preferred-size:100%;flex-basis:100%;-ms-flex-positive:1;flex-grow:1;-ms-flex-align:center;align-items:center}.navbar-toggler{padding:.25rem .75rem;font-size:1.25rem;line-height:1;background-color:transparent;border:1px solid transparent;border-radius:.25rem}.navbar-toggler:focus,.navbar-toggler:hover{text-decoration:none}.navbar-toggler-icon{display:inline-block;width:1.5em;height:1.5em;vertical-align:middle;content:"";background:no-repeat center center;background-size:100% 100%}@media (max-width:575.98px){.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:576px){.navbar-expand-sm{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-sm .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-sm .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-sm .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-sm .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-sm .navbar-toggler{display:none}}@media (max-width:767.98px){.navbar-expand-md>.container,.navbar-expand-md>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:768px){.navbar-expand-md{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-md .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-md .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-md .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-md>.container,.navbar-expand-md>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-md .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-md .navbar-toggler{display:none}}@media (max-width:991.98px){.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:992px){.navbar-expand-lg{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-lg .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-lg .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-lg .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-lg .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-lg .navbar-toggler{display:none}}@media (max-width:1199.98px){.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:1200px){.navbar-expand-xl{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-xl .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-xl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xl .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-xl .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-xl .navbar-toggler{display:none}}.navbar-expand{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand>.container,.navbar-expand>.container-fluid{padding-right:0;padding-left:0}.navbar-expand .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand .navbar-nav .dropdown-menu{position:absolute}.navbar-expand .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand>.container,.navbar-expand>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand .navbar-toggler{display:none}.navbar-light .navbar-brand{color:rgba(0,0,0,.9)}.navbar-light .navbar-brand:focus,.navbar-light .navbar-brand:hover{color:rgba(0,0,0,.9)}.navbar-light .navbar-nav .nav-link{color:rgba(0,0,0,.5)}.navbar-light .navbar-nav .nav-link:focus,.navbar-light .navbar-nav .nav-link:hover{color:rgba(0,0,0,.7)}.navbar-light .navbar-nav .nav-link.disabled{color:rgba(0,0,0,.3)}.navbar-light .navbar-nav .active>.nav-link,.navbar-light .navbar-nav .nav-link.active,.navbar-light .navbar-nav .nav-link.show,.navbar-light .navbar-nav .show>.nav-link{color:rgba(0,0,0,.9)}.navbar-light .navbar-toggler{color:rgba(0,0,0,.5);border-color:rgba(0,0,0,.1)}.navbar-light .navbar-toggler-icon{background-image:url("data:image/svg+xml,%3csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3e%3cpath stroke='rgba(0, 0, 0, 0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")}.navbar-light .navbar-text{color:rgba(0,0,0,.5)}.navbar-light .navbar-text a{color:rgba(0,0,0,.9)}.navbar-light .navbar-text a:focus,.navbar-light .navbar-text a:hover{color:rgba(0,0,0,.9)}.navbar-dark .navbar-brand{color:#fff}.navbar-dark .navbar-brand:focus,.navbar-dark .navbar-brand:hover{color:#fff}.navbar-dark .navbar-nav .nav-link{color:rgba(255,255,255,.5)}.navbar-dark .navbar-nav .nav-link:focus,.navbar-dark .navbar-nav .nav-link:hover{color:rgba(255,255,255,.75)}.navbar-dark .navbar-nav .nav-link.disabled{color:rgba(255,255,255,.25)}.navbar-dark .navbar-nav .active>.nav-link,.navbar-dark .navbar-nav .nav-link.active,.navbar-dark .navbar-nav .nav-link.show,.navbar-dark .navbar-nav .show>.nav-link{color:#fff}.navbar-dark .navbar-toggler{color:rgba(255,255,255,.5);border-color:rgba(255,255,255,.1)}.navbar-dark .navbar-toggler-icon{background-image:url("data:image/svg+xml,%3csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3e%3cpath stroke='rgba(255, 255, 255, 0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")}.navbar-dark .navbar-text{color:rgba(255,255,255,.5)}.navbar-dark .navbar-text a{color:#fff}.navbar-dark .navbar-text a:focus,.navbar-dark .navbar-text a:hover{color:#fff}.card{position:relative;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;min-width:0;word-wrap:break-word;background-color:#fff;background-clip:border-box;border:1px solid rgba(0,0,0,.125);border-radius:.25rem}.card>hr{margin-right:0;margin-left:0}.card>.list-group:first-child .list-group-item:first-child{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.card>.list-group:last-child .list-group-item:last-child{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.card-body{-ms-flex:1 1 auto;flex:1 1 auto;padding:1.25rem}.card-title{margin-bottom:.75rem}.card-subtitle{margin-top:-.375rem;margin-bottom:0}.card-text:last-child{margin-bottom:0}.card-link:hover{text-decoration:none}.card-link+.card-link{margin-left:1.25rem}.card-header{padding:.75rem 1.25rem;margin-bottom:0;background-color:rgba(0,0,0,.03);border-bottom:1px solid rgba(0,0,0,.125)}.card-header:first-child{border-radius:calc(.25rem - 1px) calc(.25rem - 1px) 0 0}.card-header+.list-group .list-group-item:first-child{border-top:0}.card-footer{padding:.75rem 1.25rem;background-color:rgba(0,0,0,.03);border-top:1px solid rgba(0,0,0,.125)}.card-footer:last-child{border-radius:0 0 calc(.25rem - 1px) calc(.25rem - 1px)}.card-header-tabs{margin-right:-.625rem;margin-bottom:-.75rem;margin-left:-.625rem;border-bottom:0}.card-header-pills{margin-right:-.625rem;margin-left:-.625rem}.card-img-overlay{position:absolute;top:0;right:0;bottom:0;left:0;padding:1.25rem}.card-img{width:100%;border-radius:calc(.25rem - 1px)}.card-img-top{width:100%;border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.card-img-bottom{width:100%;border-bottom-right-radius:calc(.25rem - 1px);border-bottom-left-radius:calc(.25rem - 1px)}.card-deck{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column}.card-deck .card{margin-bottom:15px}@media (min-width:576px){.card-deck{-ms-flex-flow:row wrap;flex-flow:row wrap;margin-right:-15px;margin-left:-15px}.card-deck .card{display:-ms-flexbox;display:flex;-ms-flex:1 0 0%;flex:1 0 0%;-ms-flex-direction:column;flex-direction:column;margin-right:15px;margin-bottom:0;margin-left:15px}}.card-group{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column}.card-group>.card{margin-bottom:15px}@media (min-width:576px){.card-group{-ms-flex-flow:row wrap;flex-flow:row wrap}.card-group>.card{-ms-flex:1 0 0%;flex:1 0 0%;margin-bottom:0}.card-group>.card+.card{margin-left:0;border-left:0}.card-group>.card:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.card-group>.card:not(:last-child) .card-header,.card-group>.card:not(:last-child) .card-img-top{border-top-right-radius:0}.card-group>.card:not(:last-child) .card-footer,.card-group>.card:not(:last-child) .card-img-bottom{border-bottom-right-radius:0}.card-group>.card:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.card-group>.card:not(:first-child) .card-header,.card-group>.card:not(:first-child) .card-img-top{border-top-left-radius:0}.card-group>.card:not(:first-child) .card-footer,.card-group>.card:not(:first-child) .card-img-bottom{border-bottom-left-radius:0}}.card-columns .card{margin-bottom:.75rem}@media (min-width:576px){.card-columns{-webkit-column-count:3;-moz-column-count:3;column-count:3;-webkit-column-gap:1.25rem;-moz-column-gap:1.25rem;column-gap:1.25rem;orphans:1;widows:1}.card-columns .card{display:inline-block;width:100%}}.accordion>.card{overflow:hidden}.accordion>.card:not(:first-of-type) .card-header:first-child{border-radius:0}.accordion>.card:not(:first-of-type):not(:last-of-type){border-bottom:0;border-radius:0}.accordion>.card:first-of-type{border-bottom:0;border-bottom-right-radius:0;border-bottom-left-radius:0}.accordion>.card:last-of-type{border-top-left-radius:0;border-top-right-radius:0}.accordion>.card .card-header{margin-bottom:-1px}.breadcrumb{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding:.75rem 1rem;margin-bottom:1rem;list-style:none;background-color:#e9ecef;border-radius:.25rem}.breadcrumb-item+.breadcrumb-item{padding-left:.5rem}.breadcrumb-item+.breadcrumb-item::before{display:inline-block;padding-right:.5rem;color:#6c757d;content:"/"}.breadcrumb-item+.breadcrumb-item:hover::before{text-decoration:underline}.breadcrumb-item+.breadcrumb-item:hover::before{text-decoration:none}.breadcrumb-item.active{color:#6c757d}.pagination{display:-ms-flexbox;display:flex;padding-left:0;list-style:none;border-radius:.25rem}.page-link{position:relative;display:block;padding:.5rem .75rem;margin-left:-1px;line-height:1.25;color:#007bff;background-color:#fff;border:1px solid #dee2e6}.page-link:hover{z-index:2;color:#0056b3;text-decoration:none;background-color:#e9ecef;border-color:#dee2e6}.page-link:focus{z-index:2;outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.page-item:first-child .page-link{margin-left:0;border-top-left-radius:.25rem;border-bottom-left-radius:.25rem}.page-item:last-child .page-link{border-top-right-radius:.25rem;border-bottom-right-radius:.25rem}.page-item.active .page-link{z-index:1;color:#fff;background-color:#007bff;border-color:#007bff}.page-item.disabled .page-link{color:#6c757d;pointer-events:none;cursor:auto;background-color:#fff;border-color:#dee2e6}.pagination-lg .page-link{padding:.75rem 1.5rem;font-size:1.25rem;line-height:1.5}.pagination-lg .page-item:first-child .page-link{border-top-left-radius:.3rem;border-bottom-left-radius:.3rem}.pagination-lg .page-item:last-child .page-link{border-top-right-radius:.3rem;border-bottom-right-radius:.3rem}.pagination-sm .page-link{padding:.25rem .5rem;font-size:.875rem;line-height:1.5}.pagination-sm .page-item:first-child .page-link{border-top-left-radius:.2rem;border-bottom-left-radius:.2rem}.pagination-sm .page-item:last-child .page-link{border-top-right-radius:.2rem;border-bottom-right-radius:.2rem}.badge{display:inline-block;padding:.25em .4em;font-size:75%;font-weight:700;line-height:1;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25rem;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.badge{transition:none}}a.badge:focus,a.badge:hover{text-decoration:none}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.badge-pill{padding-right:.6em;padding-left:.6em;border-radius:10rem}.badge-primary{color:#fff;background-color:#007bff}a.badge-primary:focus,a.badge-primary:hover{color:#fff;background-color:#0062cc}a.badge-primary.focus,a.badge-primary:focus{outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.badge-secondary{color:#fff;background-color:#6c757d}a.badge-secondary:focus,a.badge-secondary:hover{color:#fff;background-color:#545b62}a.badge-secondary.focus,a.badge-secondary:focus{outline:0;box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.badge-success{color:#fff;background-color:#28a745}a.badge-success:focus,a.badge-success:hover{color:#fff;background-color:#1e7e34}a.badge-success.focus,a.badge-success:focus{outline:0;box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.badge-info{color:#fff;background-color:#17a2b8}a.badge-info:focus,a.badge-info:hover{color:#fff;background-color:#117a8b}a.badge-info.focus,a.badge-info:focus{outline:0;box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.badge-warning{color:#212529;background-color:#ffc107}a.badge-warning:focus,a.badge-warning:hover{color:#212529;background-color:#d39e00}a.badge-warning.focus,a.badge-warning:focus{outline:0;box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.badge-danger{color:#fff;background-color:#dc3545}a.badge-danger:focus,a.badge-danger:hover{color:#fff;background-color:#bd2130}a.badge-danger.focus,a.badge-danger:focus{outline:0;box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.badge-light{color:#212529;background-color:#f8f9fa}a.badge-light:focus,a.badge-light:hover{color:#212529;background-color:#dae0e5}a.badge-light.focus,a.badge-light:focus{outline:0;box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.badge-dark{color:#fff;background-color:#343a40}a.badge-dark:focus,a.badge-dark:hover{color:#fff;background-color:#1d2124}a.badge-dark.focus,a.badge-dark:focus{outline:0;box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.jumbotron{padding:2rem 1rem;margin-bottom:2rem;background-color:#e9ecef;border-radius:.3rem}@media (min-width:576px){.jumbotron{padding:4rem 2rem}}.jumbotron-fluid{padding-right:0;padding-left:0;border-radius:0}.alert{position:relative;padding:.75rem 1.25rem;margin-bottom:1rem;border:1px solid transparent;border-radius:.25rem}.alert-heading{color:inherit}.alert-link{font-weight:700}.alert-dismissible{padding-right:4rem}.alert-dismissible .close{position:absolute;top:0;right:0;padding:.75rem 1.25rem;color:inherit}.alert-primary{color:#004085;background-color:#cce5ff;border-color:#b8daff}.alert-primary hr{border-top-color:#9fcdff}.alert-primary .alert-link{color:#002752}.alert-secondary{color:#383d41;background-color:#e2e3e5;border-color:#d6d8db}.alert-secondary hr{border-top-color:#c8cbcf}.alert-secondary .alert-link{color:#202326}.alert-success{color:#155724;background-color:#d4edda;border-color:#c3e6cb}.alert-success hr{border-top-color:#b1dfbb}.alert-success .alert-link{color:#0b2e13}.alert-info{color:#0c5460;background-color:#d1ecf1;border-color:#bee5eb}.alert-info hr{border-top-color:#abdde5}.alert-info .alert-link{color:#062c33}.alert-warning{color:#856404;background-color:#fff3cd;border-color:#ffeeba}.alert-warning hr{border-top-color:#ffe8a1}.alert-warning .alert-link{color:#533f03}.alert-danger{color:#721c24;background-color:#f8d7da;border-color:#f5c6cb}.alert-danger hr{border-top-color:#f1b0b7}.alert-danger .alert-link{color:#491217}.alert-light{color:#818182;background-color:#fefefe;border-color:#fdfdfe}.alert-light hr{border-top-color:#ececf6}.alert-light .alert-link{color:#686868}.alert-dark{color:#1b1e21;background-color:#d6d8d9;border-color:#c6c8ca}.alert-dark hr{border-top-color:#b9bbbe}.alert-dark .alert-link{color:#040505}@-webkit-keyframes progress-bar-stripes{from{background-position:1rem 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:1rem 0}to{background-position:0 0}}.progress{display:-ms-flexbox;display:flex;height:1rem;overflow:hidden;font-size:.75rem;background-color:#e9ecef;border-radius:.25rem}.progress-bar{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;-ms-flex-pack:center;justify-content:center;color:#fff;text-align:center;white-space:nowrap;background-color:#007bff;transition:width .6s ease}@media (prefers-reduced-motion:reduce){.progress-bar{transition:none}}.progress-bar-striped{background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-size:1rem 1rem}.progress-bar-animated{-webkit-animation:progress-bar-stripes 1s linear infinite;animation:progress-bar-stripes 1s linear infinite}@media (prefers-reduced-motion:reduce){.progress-bar-animated{-webkit-animation:none;animation:none}}.media{display:-ms-flexbox;display:flex;-ms-flex-align:start;align-items:flex-start}.media-body{-ms-flex:1;flex:1}.list-group{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;padding-left:0;margin-bottom:0}.list-group-item-action{width:100%;color:#495057;text-align:inherit}.list-group-item-action:focus,.list-group-item-action:hover{z-index:1;color:#495057;text-decoration:none;background-color:#f8f9fa}.list-group-item-action:active{color:#212529;background-color:#e9ecef}.list-group-item{position:relative;display:block;padding:.75rem 1.25rem;margin-bottom:-1px;background-color:#fff;border:1px solid rgba(0,0,0,.125)}.list-group-item:first-child{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.list-group-item.disabled,.list-group-item:disabled{color:#6c757d;pointer-events:none;background-color:#fff}.list-group-item.active{z-index:2;color:#fff;background-color:#007bff;border-color:#007bff}.list-group-horizontal{-ms-flex-direction:row;flex-direction:row}.list-group-horizontal .list-group-item{margin-right:-1px;margin-bottom:0}.list-group-horizontal .list-group-item:first-child{border-top-left-radius:.25rem;border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal .list-group-item:last-child{margin-right:0;border-top-right-radius:.25rem;border-bottom-right-radius:.25rem;border-bottom-left-radius:0}@media (min-width:576px){.list-group-horizontal-sm{-ms-flex-direction:row;flex-direction:row}.list-group-horizontal-sm .list-group-item{margin-right:-1px;margin-bottom:0}.list-group-horizontal-sm .list-group-item:first-child{border-top-left-radius:.25rem;border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-sm .list-group-item:last-child{margin-right:0;border-top-right-radius:.25rem;border-bottom-right-radius:.25rem;border-bottom-left-radius:0}}@media (min-width:768px){.list-group-horizontal-md{-ms-flex-direction:row;flex-direction:row}.list-group-horizontal-md .list-group-item{margin-right:-1px;margin-bottom:0}.list-group-horizontal-md .list-group-item:first-child{border-top-left-radius:.25rem;border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-md .list-group-item:last-child{margin-right:0;border-top-right-radius:.25rem;border-bottom-right-radius:.25rem;border-bottom-left-radius:0}}@media (min-width:992px){.list-group-horizontal-lg{-ms-flex-direction:row;flex-direction:row}.list-group-horizontal-lg .list-group-item{margin-right:-1px;margin-bottom:0}.list-group-horizontal-lg .list-group-item:first-child{border-top-left-radius:.25rem;border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-lg .list-group-item:last-child{margin-right:0;border-top-right-radius:.25rem;border-bottom-right-radius:.25rem;border-bottom-left-radius:0}}@media (min-width:1200px){.list-group-horizontal-xl{-ms-flex-direction:row;flex-direction:row}.list-group-horizontal-xl .list-group-item{margin-right:-1px;margin-bottom:0}.list-group-horizontal-xl .list-group-item:first-child{border-top-left-radius:.25rem;border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-xl .list-group-item:last-child{margin-right:0;border-top-right-radius:.25rem;border-bottom-right-radius:.25rem;border-bottom-left-radius:0}}.list-group-flush .list-group-item{border-right:0;border-left:0;border-radius:0}.list-group-flush .list-group-item:last-child{margin-bottom:-1px}.list-group-flush:first-child .list-group-item:first-child{border-top:0}.list-group-flush:last-child .list-group-item:last-child{margin-bottom:0;border-bottom:0}.list-group-item-primary{color:#004085;background-color:#b8daff}.list-group-item-primary.list-group-item-action:focus,.list-group-item-primary.list-group-item-action:hover{color:#004085;background-color:#9fcdff}.list-group-item-primary.list-group-item-action.active{color:#fff;background-color:#004085;border-color:#004085}.list-group-item-secondary{color:#383d41;background-color:#d6d8db}.list-group-item-secondary.list-group-item-action:focus,.list-group-item-secondary.list-group-item-action:hover{color:#383d41;background-color:#c8cbcf}.list-group-item-secondary.list-group-item-action.active{color:#fff;background-color:#383d41;border-color:#383d41}.list-group-item-success{color:#155724;background-color:#c3e6cb}.list-group-item-success.list-group-item-action:focus,.list-group-item-success.list-group-item-action:hover{color:#155724;background-color:#b1dfbb}.list-group-item-success.list-group-item-action.active{color:#fff;background-color:#155724;border-color:#155724}.list-group-item-info{color:#0c5460;background-color:#bee5eb}.list-group-item-info.list-group-item-action:focus,.list-group-item-info.list-group-item-action:hover{color:#0c5460;background-color:#abdde5}.list-group-item-info.list-group-item-action.active{color:#fff;background-color:#0c5460;border-color:#0c5460}.list-group-item-warning{color:#856404;background-color:#ffeeba}.list-group-item-warning.list-group-item-action:focus,.list-group-item-warning.list-group-item-action:hover{color:#856404;background-color:#ffe8a1}.list-group-item-warning.list-group-item-action.active{color:#fff;background-color:#856404;border-color:#856404}.list-group-item-danger{color:#721c24;background-color:#f5c6cb}.list-group-item-danger.list-group-item-action:focus,.list-group-item-danger.list-group-item-action:hover{color:#721c24;background-color:#f1b0b7}.list-group-item-danger.list-group-item-action.active{color:#fff;background-color:#721c24;border-color:#721c24}.list-group-item-light{color:#818182;background-color:#fdfdfe}.list-group-item-light.list-group-item-action:focus,.list-group-item-light.list-group-item-action:hover{color:#818182;background-color:#ececf6}.list-group-item-light.list-group-item-action.active{color:#fff;background-color:#818182;border-color:#818182}.list-group-item-dark{color:#1b1e21;background-color:#c6c8ca}.list-group-item-dark.list-group-item-action:focus,.list-group-item-dark.list-group-item-action:hover{color:#1b1e21;background-color:#b9bbbe}.list-group-item-dark.list-group-item-action.active{color:#fff;background-color:#1b1e21;border-color:#1b1e21}.close{float:right;font-size:1.5rem;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;opacity:.5}.close:hover{color:#000;text-decoration:none}.close:not(:disabled):not(.disabled):focus,.close:not(:disabled):not(.disabled):hover{opacity:.75}button.close{padding:0;background-color:transparent;border:0;-webkit-appearance:none;-moz-appearance:none;appearance:none}a.close.disabled{pointer-events:none}.toast{max-width:350px;overflow:hidden;font-size:.875rem;background-color:rgba(255,255,255,.85);background-clip:padding-box;border:1px solid rgba(0,0,0,.1);box-shadow:0 .25rem .75rem rgba(0,0,0,.1);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);opacity:0;border-radius:.25rem}.toast:not(:last-child){margin-bottom:.75rem}.toast.showing{opacity:1}.toast.show{display:block;opacity:1}.toast.hide{display:none}.toast-header{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;padding:.25rem .75rem;color:#6c757d;background-color:rgba(255,255,255,.85);background-clip:padding-box;border-bottom:1px solid rgba(0,0,0,.05)}.toast-body{padding:.75rem}.modal-open{overflow:hidden}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal{position:fixed;top:0;left:0;z-index:1050;display:none;width:100%;height:100%;overflow:hidden;outline:0}.modal-dialog{position:relative;width:auto;margin:.5rem;pointer-events:none}.modal.fade .modal-dialog{transition:-webkit-transform .3s ease-out;transition:transform .3s ease-out;transition:transform .3s ease-out,-webkit-transform .3s ease-out;-webkit-transform:translate(0,-50px);transform:translate(0,-50px)}@media (prefers-reduced-motion:reduce){.modal.fade .modal-dialog{transition:none}}.modal.show .modal-dialog{-webkit-transform:none;transform:none}.modal-dialog-scrollable{display:-ms-flexbox;display:flex;max-height:calc(100% - 1rem)}.modal-dialog-scrollable .modal-content{max-height:calc(100vh - 1rem);overflow:hidden}.modal-dialog-scrollable .modal-footer,.modal-dialog-scrollable .modal-header{-ms-flex-negative:0;flex-shrink:0}.modal-dialog-scrollable .modal-body{overflow-y:auto}.modal-dialog-centered{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;min-height:calc(100% - 1rem)}.modal-dialog-centered::before{display:block;height:calc(100vh - 1rem);content:""}.modal-dialog-centered.modal-dialog-scrollable{-ms-flex-direction:column;flex-direction:column;-ms-flex-pack:center;justify-content:center;height:100%}.modal-dialog-centered.modal-dialog-scrollable .modal-content{max-height:none}.modal-dialog-centered.modal-dialog-scrollable::before{content:none}.modal-content{position:relative;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;width:100%;pointer-events:auto;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem;outline:0}.modal-backdrop{position:fixed;top:0;left:0;z-index:1040;width:100vw;height:100vh;background-color:#000}.modal-backdrop.fade{opacity:0}.modal-backdrop.show{opacity:.5}.modal-header{display:-ms-flexbox;display:flex;-ms-flex-align:start;align-items:flex-start;-ms-flex-pack:justify;justify-content:space-between;padding:1rem 1rem;border-bottom:1px solid #dee2e6;border-top-left-radius:.3rem;border-top-right-radius:.3rem}.modal-header .close{padding:1rem 1rem;margin:-1rem -1rem -1rem auto}.modal-title{margin-bottom:0;line-height:1.5}.modal-body{position:relative;-ms-flex:1 1 auto;flex:1 1 auto;padding:1rem}.modal-footer{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:end;justify-content:flex-end;padding:1rem;border-top:1px solid #dee2e6;border-bottom-right-radius:.3rem;border-bottom-left-radius:.3rem}.modal-footer>:not(:first-child){margin-left:.25rem}.modal-footer>:not(:last-child){margin-right:.25rem}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:576px){.modal-dialog{max-width:500px;margin:1.75rem auto}.modal-dialog-scrollable{max-height:calc(100% - 3.5rem)}.modal-dialog-scrollable .modal-content{max-height:calc(100vh - 3.5rem)}.modal-dialog-centered{min-height:calc(100% - 3.5rem)}.modal-dialog-centered::before{height:calc(100vh - 3.5rem)}.modal-sm{max-width:300px}}@media (min-width:992px){.modal-lg,.modal-xl{max-width:800px}}@media (min-width:1200px){.modal-xl{max-width:1140px}}.tooltip{position:absolute;z-index:1070;display:block;margin:0;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;opacity:0}.tooltip.show{opacity:.9}.tooltip .arrow{position:absolute;display:block;width:.8rem;height:.4rem}.tooltip .arrow::before{position:absolute;content:"";border-color:transparent;border-style:solid}.bs-tooltip-auto[x-placement^=top],.bs-tooltip-top{padding:.4rem 0}.bs-tooltip-auto[x-placement^=top] .arrow,.bs-tooltip-top .arrow{bottom:0}.bs-tooltip-auto[x-placement^=top] .arrow::before,.bs-tooltip-top .arrow::before{top:0;border-width:.4rem .4rem 0;border-top-color:#000}.bs-tooltip-auto[x-placement^=right],.bs-tooltip-right{padding:0 .4rem}.bs-tooltip-auto[x-placement^=right] .arrow,.bs-tooltip-right .arrow{left:0;width:.4rem;height:.8rem}.bs-tooltip-auto[x-placement^=right] .arrow::before,.bs-tooltip-right .arrow::before{right:0;border-width:.4rem .4rem .4rem 0;border-right-color:#000}.bs-tooltip-auto[x-placement^=bottom],.bs-tooltip-bottom{padding:.4rem 0}.bs-tooltip-auto[x-placement^=bottom] .arrow,.bs-tooltip-bottom .arrow{top:0}.bs-tooltip-auto[x-placement^=bottom] .arrow::before,.bs-tooltip-bottom .arrow::before{bottom:0;border-width:0 .4rem .4rem;border-bottom-color:#000}.bs-tooltip-auto[x-placement^=left],.bs-tooltip-left{padding:0 .4rem}.bs-tooltip-auto[x-placement^=left] .arrow,.bs-tooltip-left .arrow{right:0;width:.4rem;height:.8rem}.bs-tooltip-auto[x-placement^=left] .arrow::before,.bs-tooltip-left .arrow::before{left:0;border-width:.4rem 0 .4rem .4rem;border-left-color:#000}.tooltip-inner{max-width:200px;padding:.25rem .5rem;color:#fff;text-align:center;background-color:#000;border-radius:.25rem}.popover{position:absolute;top:0;left:0;z-index:1060;display:block;max-width:276px;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem}.popover .arrow{position:absolute;display:block;width:1rem;height:.5rem;margin:0 .3rem}.popover .arrow::after,.popover .arrow::before{position:absolute;display:block;content:"";border-color:transparent;border-style:solid}.bs-popover-auto[x-placement^=top],.bs-popover-top{margin-bottom:.5rem}.bs-popover-auto[x-placement^=top]>.arrow,.bs-popover-top>.arrow{bottom:calc((.5rem + 1px) * -1)}.bs-popover-auto[x-placement^=top]>.arrow::before,.bs-popover-top>.arrow::before{bottom:0;border-width:.5rem .5rem 0;border-top-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=top]>.arrow::after,.bs-popover-top>.arrow::after{bottom:1px;border-width:.5rem .5rem 0;border-top-color:#fff}.bs-popover-auto[x-placement^=right],.bs-popover-right{margin-left:.5rem}.bs-popover-auto[x-placement^=right]>.arrow,.bs-popover-right>.arrow{left:calc((.5rem + 1px) * -1);width:.5rem;height:1rem;margin:.3rem 0}.bs-popover-auto[x-placement^=right]>.arrow::before,.bs-popover-right>.arrow::before{left:0;border-width:.5rem .5rem .5rem 0;border-right-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=right]>.arrow::after,.bs-popover-right>.arrow::after{left:1px;border-width:.5rem .5rem .5rem 0;border-right-color:#fff}.bs-popover-auto[x-placement^=bottom],.bs-popover-bottom{margin-top:.5rem}.bs-popover-auto[x-placement^=bottom]>.arrow,.bs-popover-bottom>.arrow{top:calc((.5rem + 1px) * -1)}.bs-popover-auto[x-placement^=bottom]>.arrow::before,.bs-popover-bottom>.arrow::before{top:0;border-width:0 .5rem .5rem .5rem;border-bottom-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=bottom]>.arrow::after,.bs-popover-bottom>.arrow::after{top:1px;border-width:0 .5rem .5rem .5rem;border-bottom-color:#fff}.bs-popover-auto[x-placement^=bottom] .popover-header::before,.bs-popover-bottom .popover-header::before{position:absolute;top:0;left:50%;display:block;width:1rem;margin-left:-.5rem;content:"";border-bottom:1px solid #f7f7f7}.bs-popover-auto[x-placement^=left],.bs-popover-left{margin-right:.5rem}.bs-popover-auto[x-placement^=left]>.arrow,.bs-popover-left>.arrow{right:calc((.5rem + 1px) * -1);width:.5rem;height:1rem;margin:.3rem 0}.bs-popover-auto[x-placement^=left]>.arrow::before,.bs-popover-left>.arrow::before{right:0;border-width:.5rem 0 .5rem .5rem;border-left-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=left]>.arrow::after,.bs-popover-left>.arrow::after{right:1px;border-width:.5rem 0 .5rem .5rem;border-left-color:#fff}.popover-header{padding:.5rem .75rem;margin-bottom:0;font-size:1rem;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-top-left-radius:calc(.3rem - 1px);border-top-right-radius:calc(.3rem - 1px)}.popover-header:empty{display:none}.popover-body{padding:.5rem .75rem;color:#212529}.carousel{position:relative}.carousel.pointer-event{-ms-touch-action:pan-y;touch-action:pan-y}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner::after{display:block;clear:both;content:""}.carousel-item{position:relative;display:none;float:left;width:100%;margin-right:-100%;-webkit-backface-visibility:hidden;backface-visibility:hidden;transition:-webkit-transform .6s ease-in-out;transition:transform .6s ease-in-out;transition:transform .6s ease-in-out,-webkit-transform .6s ease-in-out}@media (prefers-reduced-motion:reduce){.carousel-item{transition:none}}.carousel-item-next,.carousel-item-prev,.carousel-item.active{display:block}.active.carousel-item-right,.carousel-item-next:not(.carousel-item-left){-webkit-transform:translateX(100%);transform:translateX(100%)}.active.carousel-item-left,.carousel-item-prev:not(.carousel-item-right){-webkit-transform:translateX(-100%);transform:translateX(-100%)}.carousel-fade .carousel-item{opacity:0;transition-property:opacity;-webkit-transform:none;transform:none}.carousel-fade .carousel-item-next.carousel-item-left,.carousel-fade .carousel-item-prev.carousel-item-right,.carousel-fade .carousel-item.active{z-index:1;opacity:1}.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-right{z-index:0;opacity:0;transition:0s .6s opacity}@media (prefers-reduced-motion:reduce){.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-right{transition:none}}.carousel-control-next,.carousel-control-prev{position:absolute;top:0;bottom:0;z-index:1;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;width:15%;color:#fff;text-align:center;opacity:.5;transition:opacity .15s ease}@media (prefers-reduced-motion:reduce){.carousel-control-next,.carousel-control-prev{transition:none}}.carousel-control-next:focus,.carousel-control-next:hover,.carousel-control-prev:focus,.carousel-control-prev:hover{color:#fff;text-decoration:none;outline:0;opacity:.9}.carousel-control-prev{left:0}.carousel-control-next{right:0}.carousel-control-next-icon,.carousel-control-prev-icon{display:inline-block;width:20px;height:20px;background:no-repeat 50%/100% 100%}.carousel-control-prev-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 8 8'%3e%3cpath d='M5.25 0l-4 4 4 4 1.5-1.5-2.5-2.5 2.5-2.5-1.5-1.5z'/%3e%3c/svg%3e")}.carousel-control-next-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 8 8'%3e%3cpath d='M2.75 0l-1.5 1.5 2.5 2.5-2.5 2.5 1.5 1.5 4-4-4-4z'/%3e%3c/svg%3e")}.carousel-indicators{position:absolute;right:0;bottom:0;left:0;z-index:15;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;padding-left:0;margin-right:15%;margin-left:15%;list-style:none}.carousel-indicators li{box-sizing:content-box;-ms-flex:0 1 auto;flex:0 1 auto;width:30px;height:3px;margin-right:3px;margin-left:3px;text-indent:-999px;cursor:pointer;background-color:#fff;background-clip:padding-box;border-top:10px solid transparent;border-bottom:10px solid transparent;opacity:.5;transition:opacity .6s ease}@media (prefers-reduced-motion:reduce){.carousel-indicators li{transition:none}}.carousel-indicators .active{opacity:1}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center}@-webkit-keyframes spinner-border{to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes spinner-border{to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.spinner-border{display:inline-block;width:2rem;height:2rem;vertical-align:text-bottom;border:.25em solid currentColor;border-right-color:transparent;border-radius:50%;-webkit-animation:spinner-border .75s linear infinite;animation:spinner-border .75s linear infinite}.spinner-border-sm{width:1rem;height:1rem;border-width:.2em}@-webkit-keyframes spinner-grow{0%{-webkit-transform:scale(0);transform:scale(0)}50%{opacity:1}}@keyframes spinner-grow{0%{-webkit-transform:scale(0);transform:scale(0)}50%{opacity:1}}.spinner-grow{display:inline-block;width:2rem;height:2rem;vertical-align:text-bottom;background-color:currentColor;border-radius:50%;opacity:0;-webkit-animation:spinner-grow .75s linear infinite;animation:spinner-grow .75s linear infinite}.spinner-grow-sm{width:1rem;height:1rem}.align-baseline{vertical-align:baseline!important}.align-top{vertical-align:top!important}.align-middle{vertical-align:middle!important}.align-bottom{vertical-align:bottom!important}.align-text-bottom{vertical-align:text-bottom!important}.align-text-top{vertical-align:text-top!important}.bg-primary{background-color:#007bff!important}a.bg-primary:focus,a.bg-primary:hover,button.bg-primary:focus,button.bg-primary:hover{background-color:#0062cc!important}.bg-secondary{background-color:#6c757d!important}a.bg-secondary:focus,a.bg-secondary:hover,button.bg-secondary:focus,button.bg-secondary:hover{background-color:#545b62!important}.bg-success{background-color:#28a745!important}a.bg-success:focus,a.bg-success:hover,button.bg-success:focus,button.bg-success:hover{background-color:#1e7e34!important}.bg-info{background-color:#17a2b8!important}a.bg-info:focus,a.bg-info:hover,button.bg-info:focus,button.bg-info:hover{background-color:#117a8b!important}.bg-warning{background-color:#ffc107!important}a.bg-warning:focus,a.bg-warning:hover,button.bg-warning:focus,button.bg-warning:hover{background-color:#d39e00!important}.bg-danger{background-color:#dc3545!important}a.bg-danger:focus,a.bg-danger:hover,button.bg-danger:focus,button.bg-danger:hover{background-color:#bd2130!important}.bg-light{background-color:#f8f9fa!important}a.bg-light:focus,a.bg-light:hover,button.bg-light:focus,button.bg-light:hover{background-color:#dae0e5!important}.bg-dark{background-color:#343a40!important}a.bg-dark:focus,a.bg-dark:hover,button.bg-dark:focus,button.bg-dark:hover{background-color:#1d2124!important}.bg-white{background-color:#fff!important}.bg-transparent{background-color:transparent!important}.border{border:1px solid #dee2e6!important}.border-top{border-top:1px solid #dee2e6!important}.border-right{border-right:1px solid #dee2e6!important}.border-bottom{border-bottom:1px solid #dee2e6!important}.border-left{border-left:1px solid #dee2e6!important}.border-0{border:0!important}.border-top-0{border-top:0!important}.border-right-0{border-right:0!important}.border-bottom-0{border-bottom:0!important}.border-left-0{border-left:0!important}.border-primary{border-color:#007bff!important}.border-secondary{border-color:#6c757d!important}.border-success{border-color:#28a745!important}.border-info{border-color:#17a2b8!important}.border-warning{border-color:#ffc107!important}.border-danger{border-color:#dc3545!important}.border-light{border-color:#f8f9fa!important}.border-dark{border-color:#343a40!important}.border-white{border-color:#fff!important}.rounded-sm{border-radius:.2rem!important}.rounded{border-radius:.25rem!important}.rounded-top{border-top-left-radius:.25rem!important;border-top-right-radius:.25rem!important}.rounded-right{border-top-right-radius:.25rem!important;border-bottom-right-radius:.25rem!important}.rounded-bottom{border-bottom-right-radius:.25rem!important;border-bottom-left-radius:.25rem!important}.rounded-left{border-top-left-radius:.25rem!important;border-bottom-left-radius:.25rem!important}.rounded-lg{border-radius:.3rem!important}.rounded-circle{border-radius:50%!important}.rounded-pill{border-radius:50rem!important}.rounded-0{border-radius:0!important}.clearfix::after{display:block;clear:both;content:""}.d-none{display:none!important}.d-inline{display:inline!important}.d-inline-block{display:inline-block!important}.d-block{display:block!important}.d-table{display:table!important}.d-table-row{display:table-row!important}.d-table-cell{display:table-cell!important}.d-flex{display:-ms-flexbox!important;display:flex!important}.d-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}@media (min-width:576px){.d-sm-none{display:none!important}.d-sm-inline{display:inline!important}.d-sm-inline-block{display:inline-block!important}.d-sm-block{display:block!important}.d-sm-table{display:table!important}.d-sm-table-row{display:table-row!important}.d-sm-table-cell{display:table-cell!important}.d-sm-flex{display:-ms-flexbox!important;display:flex!important}.d-sm-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:768px){.d-md-none{display:none!important}.d-md-inline{display:inline!important}.d-md-inline-block{display:inline-block!important}.d-md-block{display:block!important}.d-md-table{display:table!important}.d-md-table-row{display:table-row!important}.d-md-table-cell{display:table-cell!important}.d-md-flex{display:-ms-flexbox!important;display:flex!important}.d-md-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:992px){.d-lg-none{display:none!important}.d-lg-inline{display:inline!important}.d-lg-inline-block{display:inline-block!important}.d-lg-block{display:block!important}.d-lg-table{display:table!important}.d-lg-table-row{display:table-row!important}.d-lg-table-cell{display:table-cell!important}.d-lg-flex{display:-ms-flexbox!important;display:flex!important}.d-lg-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:1200px){.d-xl-none{display:none!important}.d-xl-inline{display:inline!important}.d-xl-inline-block{display:inline-block!important}.d-xl-block{display:block!important}.d-xl-table{display:table!important}.d-xl-table-row{display:table-row!important}.d-xl-table-cell{display:table-cell!important}.d-xl-flex{display:-ms-flexbox!important;display:flex!important}.d-xl-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media print{.d-print-none{display:none!important}.d-print-inline{display:inline!important}.d-print-inline-block{display:inline-block!important}.d-print-block{display:block!important}.d-print-table{display:table!important}.d-print-table-row{display:table-row!important}.d-print-table-cell{display:table-cell!important}.d-print-flex{display:-ms-flexbox!important;display:flex!important}.d-print-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}.embed-responsive{position:relative;display:block;width:100%;padding:0;overflow:hidden}.embed-responsive::before{display:block;content:""}.embed-responsive .embed-responsive-item,.embed-responsive embed,.embed-responsive iframe,.embed-responsive object,.embed-responsive video{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive-21by9::before{padding-top:42.857143%}.embed-responsive-16by9::before{padding-top:56.25%}.embed-responsive-4by3::before{padding-top:75%}.embed-responsive-1by1::before{padding-top:100%}.flex-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-center{-ms-flex-align:center!important;align-items:center!important}.align-items-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}@media (min-width:576px){.flex-sm-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-sm-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-sm-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-sm-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-sm-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-sm-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-sm-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-sm-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-sm-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-sm-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-sm-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-sm-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-sm-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-sm-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-sm-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-sm-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-sm-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-sm-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-sm-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-sm-center{-ms-flex-align:center!important;align-items:center!important}.align-items-sm-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-sm-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-sm-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-sm-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-sm-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-sm-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-sm-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-sm-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-sm-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-sm-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-sm-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-sm-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-sm-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-sm-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:768px){.flex-md-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-md-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-md-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-md-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-md-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-md-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-md-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-md-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-md-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-md-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-md-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-md-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-md-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-md-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-md-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-md-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-md-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-md-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-md-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-md-center{-ms-flex-align:center!important;align-items:center!important}.align-items-md-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-md-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-md-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-md-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-md-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-md-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-md-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-md-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-md-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-md-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-md-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-md-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-md-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-md-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:992px){.flex-lg-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-lg-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-lg-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-lg-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-lg-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-lg-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-lg-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-lg-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-lg-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-lg-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-lg-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-lg-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-lg-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-lg-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-lg-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-lg-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-lg-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-lg-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-lg-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-lg-center{-ms-flex-align:center!important;align-items:center!important}.align-items-lg-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-lg-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-lg-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-lg-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-lg-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-lg-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-lg-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-lg-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-lg-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-lg-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-lg-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-lg-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-lg-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-lg-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:1200px){.flex-xl-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-xl-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-xl-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-xl-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-xl-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-xl-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-xl-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-xl-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-xl-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-xl-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-xl-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-xl-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-xl-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-xl-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-xl-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-xl-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-xl-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-xl-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-xl-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-xl-center{-ms-flex-align:center!important;align-items:center!important}.align-items-xl-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-xl-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-xl-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-xl-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-xl-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-xl-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-xl-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-xl-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-xl-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-xl-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-xl-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-xl-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-xl-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-xl-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}.float-left{float:left!important}.float-right{float:right!important}.float-none{float:none!important}@media (min-width:576px){.float-sm-left{float:left!important}.float-sm-right{float:right!important}.float-sm-none{float:none!important}}@media (min-width:768px){.float-md-left{float:left!important}.float-md-right{float:right!important}.float-md-none{float:none!important}}@media (min-width:992px){.float-lg-left{float:left!important}.float-lg-right{float:right!important}.float-lg-none{float:none!important}}@media (min-width:1200px){.float-xl-left{float:left!important}.float-xl-right{float:right!important}.float-xl-none{float:none!important}}.overflow-auto{overflow:auto!important}.overflow-hidden{overflow:hidden!important}.position-static{position:static!important}.position-relative{position:relative!important}.position-absolute{position:absolute!important}.position-fixed{position:fixed!important}.position-sticky{position:-webkit-sticky!important;position:sticky!important}.fixed-top{position:fixed;top:0;right:0;left:0;z-index:1030}.fixed-bottom{position:fixed;right:0;bottom:0;left:0;z-index:1030}@supports ((position:-webkit-sticky) or (position:sticky)){.sticky-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}.sr-only{position:absolute;width:1px;height:1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;overflow:visible;clip:auto;white-space:normal}.shadow-sm{box-shadow:0 .125rem .25rem rgba(0,0,0,.075)!important}.shadow{box-shadow:0 .5rem 1rem rgba(0,0,0,.15)!important}.shadow-lg{box-shadow:0 1rem 3rem rgba(0,0,0,.175)!important}.shadow-none{box-shadow:none!important}.w-25{width:25%!important}.w-50{width:50%!important}.w-75{width:75%!important}.w-100{width:100%!important}.w-auto{width:auto!important}.h-25{height:25%!important}.h-50{height:50%!important}.h-75{height:75%!important}.h-100{height:100%!important}.h-auto{height:auto!important}.mw-100{max-width:100%!important}.mh-100{max-height:100%!important}.min-vw-100{min-width:100vw!important}.min-vh-100{min-height:100vh!important}.vw-100{width:100vw!important}.vh-100{height:100vh!important}.stretched-link::after{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;pointer-events:auto;content:"";background-color:rgba(0,0,0,0)}.m-0{margin:0!important}.mt-0,.my-0{margin-top:0!important}.mr-0,.mx-0{margin-right:0!important}.mb-0,.my-0{margin-bottom:0!important}.ml-0,.mx-0{margin-left:0!important}.m-1{margin:.25rem!important}.mt-1,.my-1{margin-top:.25rem!important}.mr-1,.mx-1{margin-right:.25rem!important}.mb-1,.my-1{margin-bottom:.25rem!important}.ml-1,.mx-1{margin-left:.25rem!important}.m-2{margin:.5rem!important}.mt-2,.my-2{margin-top:.5rem!important}.mr-2,.mx-2{margin-right:.5rem!important}.mb-2,.my-2{margin-bottom:.5rem!important}.ml-2,.mx-2{margin-left:.5rem!important}.m-3{margin:1rem!important}.mt-3,.my-3{margin-top:1rem!important}.mr-3,.mx-3{margin-right:1rem!important}.mb-3,.my-3{margin-bottom:1rem!important}.ml-3,.mx-3{margin-left:1rem!important}.m-4{margin:1.5rem!important}.mt-4,.my-4{margin-top:1.5rem!important}.mr-4,.mx-4{margin-right:1.5rem!important}.mb-4,.my-4{margin-bottom:1.5rem!important}.ml-4,.mx-4{margin-left:1.5rem!important}.m-5{margin:3rem!important}.mt-5,.my-5{margin-top:3rem!important}.mr-5,.mx-5{margin-right:3rem!important}.mb-5,.my-5{margin-bottom:3rem!important}.ml-5,.mx-5{margin-left:3rem!important}.p-0{padding:0!important}.pt-0,.py-0{padding-top:0!important}.pr-0,.px-0{padding-right:0!important}.pb-0,.py-0{padding-bottom:0!important}.pl-0,.px-0{padding-left:0!important}.p-1{padding:.25rem!important}.pt-1,.py-1{padding-top:.25rem!important}.pr-1,.px-1{padding-right:.25rem!important}.pb-1,.py-1{padding-bottom:.25rem!important}.pl-1,.px-1{padding-left:.25rem!important}.p-2{padding:.5rem!important}.pt-2,.py-2{padding-top:.5rem!important}.pr-2,.px-2{padding-right:.5rem!important}.pb-2,.py-2{padding-bottom:.5rem!important}.pl-2,.px-2{padding-left:.5rem!important}.p-3{padding:1rem!important}.pt-3,.py-3{padding-top:1rem!important}.pr-3,.px-3{padding-right:1rem!important}.pb-3,.py-3{padding-bottom:1rem!important}.pl-3,.px-3{padding-left:1rem!important}.p-4{padding:1.5rem!important}.pt-4,.py-4{padding-top:1.5rem!important}.pr-4,.px-4{padding-right:1.5rem!important}.pb-4,.py-4{padding-bottom:1.5rem!important}.pl-4,.px-4{padding-left:1.5rem!important}.p-5{padding:3rem!important}.pt-5,.py-5{padding-top:3rem!important}.pr-5,.px-5{padding-right:3rem!important}.pb-5,.py-5{padding-bottom:3rem!important}.pl-5,.px-5{padding-left:3rem!important}.m-n1{margin:-.25rem!important}.mt-n1,.my-n1{margin-top:-.25rem!important}.mr-n1,.mx-n1{margin-right:-.25rem!important}.mb-n1,.my-n1{margin-bottom:-.25rem!important}.ml-n1,.mx-n1{margin-left:-.25rem!important}.m-n2{margin:-.5rem!important}.mt-n2,.my-n2{margin-top:-.5rem!important}.mr-n2,.mx-n2{margin-right:-.5rem!important}.mb-n2,.my-n2{margin-bottom:-.5rem!important}.ml-n2,.mx-n2{margin-left:-.5rem!important}.m-n3{margin:-1rem!important}.mt-n3,.my-n3{margin-top:-1rem!important}.mr-n3,.mx-n3{margin-right:-1rem!important}.mb-n3,.my-n3{margin-bottom:-1rem!important}.ml-n3,.mx-n3{margin-left:-1rem!important}.m-n4{margin:-1.5rem!important}.mt-n4,.my-n4{margin-top:-1.5rem!important}.mr-n4,.mx-n4{margin-right:-1.5rem!important}.mb-n4,.my-n4{margin-bottom:-1.5rem!important}.ml-n4,.mx-n4{margin-left:-1.5rem!important}.m-n5{margin:-3rem!important}.mt-n5,.my-n5{margin-top:-3rem!important}.mr-n5,.mx-n5{margin-right:-3rem!important}.mb-n5,.my-n5{margin-bottom:-3rem!important}.ml-n5,.mx-n5{margin-left:-3rem!important}.m-auto{margin:auto!important}.mt-auto,.my-auto{margin-top:auto!important}.mr-auto,.mx-auto{margin-right:auto!important}.mb-auto,.my-auto{margin-bottom:auto!important}.ml-auto,.mx-auto{margin-left:auto!important}@media (min-width:576px){.m-sm-0{margin:0!important}.mt-sm-0,.my-sm-0{margin-top:0!important}.mr-sm-0,.mx-sm-0{margin-right:0!important}.mb-sm-0,.my-sm-0{margin-bottom:0!important}.ml-sm-0,.mx-sm-0{margin-left:0!important}.m-sm-1{margin:.25rem!important}.mt-sm-1,.my-sm-1{margin-top:.25rem!important}.mr-sm-1,.mx-sm-1{margin-right:.25rem!important}.mb-sm-1,.my-sm-1{margin-bottom:.25rem!important}.ml-sm-1,.mx-sm-1{margin-left:.25rem!important}.m-sm-2{margin:.5rem!important}.mt-sm-2,.my-sm-2{margin-top:.5rem!important}.mr-sm-2,.mx-sm-2{margin-right:.5rem!important}.mb-sm-2,.my-sm-2{margin-bottom:.5rem!important}.ml-sm-2,.mx-sm-2{margin-left:.5rem!important}.m-sm-3{margin:1rem!important}.mt-sm-3,.my-sm-3{margin-top:1rem!important}.mr-sm-3,.mx-sm-3{margin-right:1rem!important}.mb-sm-3,.my-sm-3{margin-bottom:1rem!important}.ml-sm-3,.mx-sm-3{margin-left:1rem!important}.m-sm-4{margin:1.5rem!important}.mt-sm-4,.my-sm-4{margin-top:1.5rem!important}.mr-sm-4,.mx-sm-4{margin-right:1.5rem!important}.mb-sm-4,.my-sm-4{margin-bottom:1.5rem!important}.ml-sm-4,.mx-sm-4{margin-left:1.5rem!important}.m-sm-5{margin:3rem!important}.mt-sm-5,.my-sm-5{margin-top:3rem!important}.mr-sm-5,.mx-sm-5{margin-right:3rem!important}.mb-sm-5,.my-sm-5{margin-bottom:3rem!important}.ml-sm-5,.mx-sm-5{margin-left:3rem!important}.p-sm-0{padding:0!important}.pt-sm-0,.py-sm-0{padding-top:0!important}.pr-sm-0,.px-sm-0{padding-right:0!important}.pb-sm-0,.py-sm-0{padding-bottom:0!important}.pl-sm-0,.px-sm-0{padding-left:0!important}.p-sm-1{padding:.25rem!important}.pt-sm-1,.py-sm-1{padding-top:.25rem!important}.pr-sm-1,.px-sm-1{padding-right:.25rem!important}.pb-sm-1,.py-sm-1{padding-bottom:.25rem!important}.pl-sm-1,.px-sm-1{padding-left:.25rem!important}.p-sm-2{padding:.5rem!important}.pt-sm-2,.py-sm-2{padding-top:.5rem!important}.pr-sm-2,.px-sm-2{padding-right:.5rem!important}.pb-sm-2,.py-sm-2{padding-bottom:.5rem!important}.pl-sm-2,.px-sm-2{padding-left:.5rem!important}.p-sm-3{padding:1rem!important}.pt-sm-3,.py-sm-3{padding-top:1rem!important}.pr-sm-3,.px-sm-3{padding-right:1rem!important}.pb-sm-3,.py-sm-3{padding-bottom:1rem!important}.pl-sm-3,.px-sm-3{padding-left:1rem!important}.p-sm-4{padding:1.5rem!important}.pt-sm-4,.py-sm-4{padding-top:1.5rem!important}.pr-sm-4,.px-sm-4{padding-right:1.5rem!important}.pb-sm-4,.py-sm-4{padding-bottom:1.5rem!important}.pl-sm-4,.px-sm-4{padding-left:1.5rem!important}.p-sm-5{padding:3rem!important}.pt-sm-5,.py-sm-5{padding-top:3rem!important}.pr-sm-5,.px-sm-5{padding-right:3rem!important}.pb-sm-5,.py-sm-5{padding-bottom:3rem!important}.pl-sm-5,.px-sm-5{padding-left:3rem!important}.m-sm-n1{margin:-.25rem!important}.mt-sm-n1,.my-sm-n1{margin-top:-.25rem!important}.mr-sm-n1,.mx-sm-n1{margin-right:-.25rem!important}.mb-sm-n1,.my-sm-n1{margin-bottom:-.25rem!important}.ml-sm-n1,.mx-sm-n1{margin-left:-.25rem!important}.m-sm-n2{margin:-.5rem!important}.mt-sm-n2,.my-sm-n2{margin-top:-.5rem!important}.mr-sm-n2,.mx-sm-n2{margin-right:-.5rem!important}.mb-sm-n2,.my-sm-n2{margin-bottom:-.5rem!important}.ml-sm-n2,.mx-sm-n2{margin-left:-.5rem!important}.m-sm-n3{margin:-1rem!important}.mt-sm-n3,.my-sm-n3{margin-top:-1rem!important}.mr-sm-n3,.mx-sm-n3{margin-right:-1rem!important}.mb-sm-n3,.my-sm-n3{margin-bottom:-1rem!important}.ml-sm-n3,.mx-sm-n3{margin-left:-1rem!important}.m-sm-n4{margin:-1.5rem!important}.mt-sm-n4,.my-sm-n4{margin-top:-1.5rem!important}.mr-sm-n4,.mx-sm-n4{margin-right:-1.5rem!important}.mb-sm-n4,.my-sm-n4{margin-bottom:-1.5rem!important}.ml-sm-n4,.mx-sm-n4{margin-left:-1.5rem!important}.m-sm-n5{margin:-3rem!important}.mt-sm-n5,.my-sm-n5{margin-top:-3rem!important}.mr-sm-n5,.mx-sm-n5{margin-right:-3rem!important}.mb-sm-n5,.my-sm-n5{margin-bottom:-3rem!important}.ml-sm-n5,.mx-sm-n5{margin-left:-3rem!important}.m-sm-auto{margin:auto!important}.mt-sm-auto,.my-sm-auto{margin-top:auto!important}.mr-sm-auto,.mx-sm-auto{margin-right:auto!important}.mb-sm-auto,.my-sm-auto{margin-bottom:auto!important}.ml-sm-auto,.mx-sm-auto{margin-left:auto!important}}@media (min-width:768px){.m-md-0{margin:0!important}.mt-md-0,.my-md-0{margin-top:0!important}.mr-md-0,.mx-md-0{margin-right:0!important}.mb-md-0,.my-md-0{margin-bottom:0!important}.ml-md-0,.mx-md-0{margin-left:0!important}.m-md-1{margin:.25rem!important}.mt-md-1,.my-md-1{margin-top:.25rem!important}.mr-md-1,.mx-md-1{margin-right:.25rem!important}.mb-md-1,.my-md-1{margin-bottom:.25rem!important}.ml-md-1,.mx-md-1{margin-left:.25rem!important}.m-md-2{margin:.5rem!important}.mt-md-2,.my-md-2{margin-top:.5rem!important}.mr-md-2,.mx-md-2{margin-right:.5rem!important}.mb-md-2,.my-md-2{margin-bottom:.5rem!important}.ml-md-2,.mx-md-2{margin-left:.5rem!important}.m-md-3{margin:1rem!important}.mt-md-3,.my-md-3{margin-top:1rem!important}.mr-md-3,.mx-md-3{margin-right:1rem!important}.mb-md-3,.my-md-3{margin-bottom:1rem!important}.ml-md-3,.mx-md-3{margin-left:1rem!important}.m-md-4{margin:1.5rem!important}.mt-md-4,.my-md-4{margin-top:1.5rem!important}.mr-md-4,.mx-md-4{margin-right:1.5rem!important}.mb-md-4,.my-md-4{margin-bottom:1.5rem!important}.ml-md-4,.mx-md-4{margin-left:1.5rem!important}.m-md-5{margin:3rem!important}.mt-md-5,.my-md-5{margin-top:3rem!important}.mr-md-5,.mx-md-5{margin-right:3rem!important}.mb-md-5,.my-md-5{margin-bottom:3rem!important}.ml-md-5,.mx-md-5{margin-left:3rem!important}.p-md-0{padding:0!important}.pt-md-0,.py-md-0{padding-top:0!important}.pr-md-0,.px-md-0{padding-right:0!important}.pb-md-0,.py-md-0{padding-bottom:0!important}.pl-md-0,.px-md-0{padding-left:0!important}.p-md-1{padding:.25rem!important}.pt-md-1,.py-md-1{padding-top:.25rem!important}.pr-md-1,.px-md-1{padding-right:.25rem!important}.pb-md-1,.py-md-1{padding-bottom:.25rem!important}.pl-md-1,.px-md-1{padding-left:.25rem!important}.p-md-2{padding:.5rem!important}.pt-md-2,.py-md-2{padding-top:.5rem!important}.pr-md-2,.px-md-2{padding-right:.5rem!important}.pb-md-2,.py-md-2{padding-bottom:.5rem!important}.pl-md-2,.px-md-2{padding-left:.5rem!important}.p-md-3{padding:1rem!important}.pt-md-3,.py-md-3{padding-top:1rem!important}.pr-md-3,.px-md-3{padding-right:1rem!important}.pb-md-3,.py-md-3{padding-bottom:1rem!important}.pl-md-3,.px-md-3{padding-left:1rem!important}.p-md-4{padding:1.5rem!important}.pt-md-4,.py-md-4{padding-top:1.5rem!important}.pr-md-4,.px-md-4{padding-right:1.5rem!important}.pb-md-4,.py-md-4{padding-bottom:1.5rem!important}.pl-md-4,.px-md-4{padding-left:1.5rem!important}.p-md-5{padding:3rem!important}.pt-md-5,.py-md-5{padding-top:3rem!important}.pr-md-5,.px-md-5{padding-right:3rem!important}.pb-md-5,.py-md-5{padding-bottom:3rem!important}.pl-md-5,.px-md-5{padding-left:3rem!important}.m-md-n1{margin:-.25rem!important}.mt-md-n1,.my-md-n1{margin-top:-.25rem!important}.mr-md-n1,.mx-md-n1{margin-right:-.25rem!important}.mb-md-n1,.my-md-n1{margin-bottom:-.25rem!important}.ml-md-n1,.mx-md-n1{margin-left:-.25rem!important}.m-md-n2{margin:-.5rem!important}.mt-md-n2,.my-md-n2{margin-top:-.5rem!important}.mr-md-n2,.mx-md-n2{margin-right:-.5rem!important}.mb-md-n2,.my-md-n2{margin-bottom:-.5rem!important}.ml-md-n2,.mx-md-n2{margin-left:-.5rem!important}.m-md-n3{margin:-1rem!important}.mt-md-n3,.my-md-n3{margin-top:-1rem!important}.mr-md-n3,.mx-md-n3{margin-right:-1rem!important}.mb-md-n3,.my-md-n3{margin-bottom:-1rem!important}.ml-md-n3,.mx-md-n3{margin-left:-1rem!important}.m-md-n4{margin:-1.5rem!important}.mt-md-n4,.my-md-n4{margin-top:-1.5rem!important}.mr-md-n4,.mx-md-n4{margin-right:-1.5rem!important}.mb-md-n4,.my-md-n4{margin-bottom:-1.5rem!important}.ml-md-n4,.mx-md-n4{margin-left:-1.5rem!important}.m-md-n5{margin:-3rem!important}.mt-md-n5,.my-md-n5{margin-top:-3rem!important}.mr-md-n5,.mx-md-n5{margin-right:-3rem!important}.mb-md-n5,.my-md-n5{margin-bottom:-3rem!important}.ml-md-n5,.mx-md-n5{margin-left:-3rem!important}.m-md-auto{margin:auto!important}.mt-md-auto,.my-md-auto{margin-top:auto!important}.mr-md-auto,.mx-md-auto{margin-right:auto!important}.mb-md-auto,.my-md-auto{margin-bottom:auto!important}.ml-md-auto,.mx-md-auto{margin-left:auto!important}}@media (min-width:992px){.m-lg-0{margin:0!important}.mt-lg-0,.my-lg-0{margin-top:0!important}.mr-lg-0,.mx-lg-0{margin-right:0!important}.mb-lg-0,.my-lg-0{margin-bottom:0!important}.ml-lg-0,.mx-lg-0{margin-left:0!important}.m-lg-1{margin:.25rem!important}.mt-lg-1,.my-lg-1{margin-top:.25rem!important}.mr-lg-1,.mx-lg-1{margin-right:.25rem!important}.mb-lg-1,.my-lg-1{margin-bottom:.25rem!important}.ml-lg-1,.mx-lg-1{margin-left:.25rem!important}.m-lg-2{margin:.5rem!important}.mt-lg-2,.my-lg-2{margin-top:.5rem!important}.mr-lg-2,.mx-lg-2{margin-right:.5rem!important}.mb-lg-2,.my-lg-2{margin-bottom:.5rem!important}.ml-lg-2,.mx-lg-2{margin-left:.5rem!important}.m-lg-3{margin:1rem!important}.mt-lg-3,.my-lg-3{margin-top:1rem!important}.mr-lg-3,.mx-lg-3{margin-right:1rem!important}.mb-lg-3,.my-lg-3{margin-bottom:1rem!important}.ml-lg-3,.mx-lg-3{margin-left:1rem!important}.m-lg-4{margin:1.5rem!important}.mt-lg-4,.my-lg-4{margin-top:1.5rem!important}.mr-lg-4,.mx-lg-4{margin-right:1.5rem!important}.mb-lg-4,.my-lg-4{margin-bottom:1.5rem!important}.ml-lg-4,.mx-lg-4{margin-left:1.5rem!important}.m-lg-5{margin:3rem!important}.mt-lg-5,.my-lg-5{margin-top:3rem!important}.mr-lg-5,.mx-lg-5{margin-right:3rem!important}.mb-lg-5,.my-lg-5{margin-bottom:3rem!important}.ml-lg-5,.mx-lg-5{margin-left:3rem!important}.p-lg-0{padding:0!important}.pt-lg-0,.py-lg-0{padding-top:0!important}.pr-lg-0,.px-lg-0{padding-right:0!important}.pb-lg-0,.py-lg-0{padding-bottom:0!important}.pl-lg-0,.px-lg-0{padding-left:0!important}.p-lg-1{padding:.25rem!important}.pt-lg-1,.py-lg-1{padding-top:.25rem!important}.pr-lg-1,.px-lg-1{padding-right:.25rem!important}.pb-lg-1,.py-lg-1{padding-bottom:.25rem!important}.pl-lg-1,.px-lg-1{padding-left:.25rem!important}.p-lg-2{padding:.5rem!important}.pt-lg-2,.py-lg-2{padding-top:.5rem!important}.pr-lg-2,.px-lg-2{padding-right:.5rem!important}.pb-lg-2,.py-lg-2{padding-bottom:.5rem!important}.pl-lg-2,.px-lg-2{padding-left:.5rem!important}.p-lg-3{padding:1rem!important}.pt-lg-3,.py-lg-3{padding-top:1rem!important}.pr-lg-3,.px-lg-3{padding-right:1rem!important}.pb-lg-3,.py-lg-3{padding-bottom:1rem!important}.pl-lg-3,.px-lg-3{padding-left:1rem!important}.p-lg-4{padding:1.5rem!important}.pt-lg-4,.py-lg-4{padding-top:1.5rem!important}.pr-lg-4,.px-lg-4{padding-right:1.5rem!important}.pb-lg-4,.py-lg-4{padding-bottom:1.5rem!important}.pl-lg-4,.px-lg-4{padding-left:1.5rem!important}.p-lg-5{padding:3rem!important}.pt-lg-5,.py-lg-5{padding-top:3rem!important}.pr-lg-5,.px-lg-5{padding-right:3rem!important}.pb-lg-5,.py-lg-5{padding-bottom:3rem!important}.pl-lg-5,.px-lg-5{padding-left:3rem!important}.m-lg-n1{margin:-.25rem!important}.mt-lg-n1,.my-lg-n1{margin-top:-.25rem!important}.mr-lg-n1,.mx-lg-n1{margin-right:-.25rem!important}.mb-lg-n1,.my-lg-n1{margin-bottom:-.25rem!important}.ml-lg-n1,.mx-lg-n1{margin-left:-.25rem!important}.m-lg-n2{margin:-.5rem!important}.mt-lg-n2,.my-lg-n2{margin-top:-.5rem!important}.mr-lg-n2,.mx-lg-n2{margin-right:-.5rem!important}.mb-lg-n2,.my-lg-n2{margin-bottom:-.5rem!important}.ml-lg-n2,.mx-lg-n2{margin-left:-.5rem!important}.m-lg-n3{margin:-1rem!important}.mt-lg-n3,.my-lg-n3{margin-top:-1rem!important}.mr-lg-n3,.mx-lg-n3{margin-right:-1rem!important}.mb-lg-n3,.my-lg-n3{margin-bottom:-1rem!important}.ml-lg-n3,.mx-lg-n3{margin-left:-1rem!important}.m-lg-n4{margin:-1.5rem!important}.mt-lg-n4,.my-lg-n4{margin-top:-1.5rem!important}.mr-lg-n4,.mx-lg-n4{margin-right:-1.5rem!important}.mb-lg-n4,.my-lg-n4{margin-bottom:-1.5rem!important}.ml-lg-n4,.mx-lg-n4{margin-left:-1.5rem!important}.m-lg-n5{margin:-3rem!important}.mt-lg-n5,.my-lg-n5{margin-top:-3rem!important}.mr-lg-n5,.mx-lg-n5{margin-right:-3rem!important}.mb-lg-n5,.my-lg-n5{margin-bottom:-3rem!important}.ml-lg-n5,.mx-lg-n5{margin-left:-3rem!important}.m-lg-auto{margin:auto!important}.mt-lg-auto,.my-lg-auto{margin-top:auto!important}.mr-lg-auto,.mx-lg-auto{margin-right:auto!important}.mb-lg-auto,.my-lg-auto{margin-bottom:auto!important}.ml-lg-auto,.mx-lg-auto{margin-left:auto!important}}@media (min-width:1200px){.m-xl-0{margin:0!important}.mt-xl-0,.my-xl-0{margin-top:0!important}.mr-xl-0,.mx-xl-0{margin-right:0!important}.mb-xl-0,.my-xl-0{margin-bottom:0!important}.ml-xl-0,.mx-xl-0{margin-left:0!important}.m-xl-1{margin:.25rem!important}.mt-xl-1,.my-xl-1{margin-top:.25rem!important}.mr-xl-1,.mx-xl-1{margin-right:.25rem!important}.mb-xl-1,.my-xl-1{margin-bottom:.25rem!important}.ml-xl-1,.mx-xl-1{margin-left:.25rem!important}.m-xl-2{margin:.5rem!important}.mt-xl-2,.my-xl-2{margin-top:.5rem!important}.mr-xl-2,.mx-xl-2{margin-right:.5rem!important}.mb-xl-2,.my-xl-2{margin-bottom:.5rem!important}.ml-xl-2,.mx-xl-2{margin-left:.5rem!important}.m-xl-3{margin:1rem!important}.mt-xl-3,.my-xl-3{margin-top:1rem!important}.mr-xl-3,.mx-xl-3{margin-right:1rem!important}.mb-xl-3,.my-xl-3{margin-bottom:1rem!important}.ml-xl-3,.mx-xl-3{margin-left:1rem!important}.m-xl-4{margin:1.5rem!important}.mt-xl-4,.my-xl-4{margin-top:1.5rem!important}.mr-xl-4,.mx-xl-4{margin-right:1.5rem!important}.mb-xl-4,.my-xl-4{margin-bottom:1.5rem!important}.ml-xl-4,.mx-xl-4{margin-left:1.5rem!important}.m-xl-5{margin:3rem!important}.mt-xl-5,.my-xl-5{margin-top:3rem!important}.mr-xl-5,.mx-xl-5{margin-right:3rem!important}.mb-xl-5,.my-xl-5{margin-bottom:3rem!important}.ml-xl-5,.mx-xl-5{margin-left:3rem!important}.p-xl-0{padding:0!important}.pt-xl-0,.py-xl-0{padding-top:0!important}.pr-xl-0,.px-xl-0{padding-right:0!important}.pb-xl-0,.py-xl-0{padding-bottom:0!important}.pl-xl-0,.px-xl-0{padding-left:0!important}.p-xl-1{padding:.25rem!important}.pt-xl-1,.py-xl-1{padding-top:.25rem!important}.pr-xl-1,.px-xl-1{padding-right:.25rem!important}.pb-xl-1,.py-xl-1{padding-bottom:.25rem!important}.pl-xl-1,.px-xl-1{padding-left:.25rem!important}.p-xl-2{padding:.5rem!important}.pt-xl-2,.py-xl-2{padding-top:.5rem!important}.pr-xl-2,.px-xl-2{padding-right:.5rem!important}.pb-xl-2,.py-xl-2{padding-bottom:.5rem!important}.pl-xl-2,.px-xl-2{padding-left:.5rem!important}.p-xl-3{padding:1rem!important}.pt-xl-3,.py-xl-3{padding-top:1rem!important}.pr-xl-3,.px-xl-3{padding-right:1rem!important}.pb-xl-3,.py-xl-3{padding-bottom:1rem!important}.pl-xl-3,.px-xl-3{padding-left:1rem!important}.p-xl-4{padding:1.5rem!important}.pt-xl-4,.py-xl-4{padding-top:1.5rem!important}.pr-xl-4,.px-xl-4{padding-right:1.5rem!important}.pb-xl-4,.py-xl-4{padding-bottom:1.5rem!important}.pl-xl-4,.px-xl-4{padding-left:1.5rem!important}.p-xl-5{padding:3rem!important}.pt-xl-5,.py-xl-5{padding-top:3rem!important}.pr-xl-5,.px-xl-5{padding-right:3rem!important}.pb-xl-5,.py-xl-5{padding-bottom:3rem!important}.pl-xl-5,.px-xl-5{padding-left:3rem!important}.m-xl-n1{margin:-.25rem!important}.mt-xl-n1,.my-xl-n1{margin-top:-.25rem!important}.mr-xl-n1,.mx-xl-n1{margin-right:-.25rem!important}.mb-xl-n1,.my-xl-n1{margin-bottom:-.25rem!important}.ml-xl-n1,.mx-xl-n1{margin-left:-.25rem!important}.m-xl-n2{margin:-.5rem!important}.mt-xl-n2,.my-xl-n2{margin-top:-.5rem!important}.mr-xl-n2,.mx-xl-n2{margin-right:-.5rem!important}.mb-xl-n2,.my-xl-n2{margin-bottom:-.5rem!important}.ml-xl-n2,.mx-xl-n2{margin-left:-.5rem!important}.m-xl-n3{margin:-1rem!important}.mt-xl-n3,.my-xl-n3{margin-top:-1rem!important}.mr-xl-n3,.mx-xl-n3{margin-right:-1rem!important}.mb-xl-n3,.my-xl-n3{margin-bottom:-1rem!important}.ml-xl-n3,.mx-xl-n3{margin-left:-1rem!important}.m-xl-n4{margin:-1.5rem!important}.mt-xl-n4,.my-xl-n4{margin-top:-1.5rem!important}.mr-xl-n4,.mx-xl-n4{margin-right:-1.5rem!important}.mb-xl-n4,.my-xl-n4{margin-bottom:-1.5rem!important}.ml-xl-n4,.mx-xl-n4{margin-left:-1.5rem!important}.m-xl-n5{margin:-3rem!important}.mt-xl-n5,.my-xl-n5{margin-top:-3rem!important}.mr-xl-n5,.mx-xl-n5{margin-right:-3rem!important}.mb-xl-n5,.my-xl-n5{margin-bottom:-3rem!important}.ml-xl-n5,.mx-xl-n5{margin-left:-3rem!important}.m-xl-auto{margin:auto!important}.mt-xl-auto,.my-xl-auto{margin-top:auto!important}.mr-xl-auto,.mx-xl-auto{margin-right:auto!important}.mb-xl-auto,.my-xl-auto{margin-bottom:auto!important}.ml-xl-auto,.mx-xl-auto{margin-left:auto!important}}.text-monospace{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace!important}.text-justify{text-align:justify!important}.text-wrap{white-space:normal!important}.text-nowrap{white-space:nowrap!important}.text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.text-left{text-align:left!important}.text-right{text-align:right!important}.text-center{text-align:center!important}@media (min-width:576px){.text-sm-left{text-align:left!important}.text-sm-right{text-align:right!important}.text-sm-center{text-align:center!important}}@media (min-width:768px){.text-md-left{text-align:left!important}.text-md-right{text-align:right!important}.text-md-center{text-align:center!important}}@media (min-width:992px){.text-lg-left{text-align:left!important}.text-lg-right{text-align:right!important}.text-lg-center{text-align:center!important}}@media (min-width:1200px){.text-xl-left{text-align:left!important}.text-xl-right{text-align:right!important}.text-xl-center{text-align:center!important}}.text-lowercase{text-transform:lowercase!important}.text-uppercase{text-transform:uppercase!important}.text-capitalize{text-transform:capitalize!important}.font-weight-light{font-weight:300!important}.font-weight-lighter{font-weight:lighter!important}.font-weight-normal{font-weight:400!important}.font-weight-bold{font-weight:700!important}.font-weight-bolder{font-weight:bolder!important}.font-italic{font-style:italic!important}.text-white{color:#fff!important}.text-primary{color:#007bff!important}a.text-primary:focus,a.text-primary:hover{color:#0056b3!important}.text-secondary{color:#6c757d!important}a.text-secondary:focus,a.text-secondary:hover{color:#494f54!important}.text-success{color:#28a745!important}a.text-success:focus,a.text-success:hover{color:#19692c!important}.text-info{color:#17a2b8!important}a.text-info:focus,a.text-info:hover{color:#0f6674!important}.text-warning{color:#ffc107!important}a.text-warning:focus,a.text-warning:hover{color:#ba8b00!important}.text-danger{color:#dc3545!important}a.text-danger:focus,a.text-danger:hover{color:#a71d2a!important}.text-light{color:#f8f9fa!important}a.text-light:focus,a.text-light:hover{color:#cbd3da!important}.text-dark{color:#343a40!important}a.text-dark:focus,a.text-dark:hover{color:#121416!important}.text-body{color:#212529!important}.text-muted{color:#6c757d!important}.text-black-50{color:rgba(0,0,0,.5)!important}.text-white-50{color:rgba(255,255,255,.5)!important}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.text-decoration-none{text-decoration:none!important}.text-break{word-break:break-word!important;overflow-wrap:break-word!important}.text-reset{color:inherit!important}.visible{visibility:visible!important}.invisible{visibility:hidden!important}@media print{*,::after,::before{text-shadow:none!important;box-shadow:none!important}a:not(.btn){text-decoration:underline}abbr[title]::after{content:" (" attr(title) ")"}pre{white-space:pre-wrap!important}blockquote,pre{border:1px solid #adb5bd;page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}@page{size:a3}body{min-width:992px!important}.container{min-width:992px!important}.navbar{display:none}.badge{border:1px solid #000}.table{border-collapse:collapse!important}.table td,.table th{background-color:#fff!important}.table-bordered td,.table-bordered th{border:1px solid #dee2e6!important}.table-dark{color:inherit}.table-dark tbody+tbody,.table-dark td,.table-dark th,.table-dark thead th{border-color:#dee2e6}.table .thead-dark th{color:inherit;border-color:#dee2e6}} /*# sourceMappingURL=bootstrap.min.css.map */PK!dsAA�file-manager-advanced/application/svg-sanitizer/includes/phpunit/php-code-coverage/src/Report/Html/Renderer/Template/directory_item.html.distnu„[µü¤ {{icon}}{{name}} {{lines_bar}}
    {{lines_executed_percent}}
    {{lines_number}}
    {{methods_bar}}
    {{methods_tested_percent}}
    {{methods_number}}
    {{classes_bar}}
    {{classes_tested_percent}}
    {{classes_number}}
    PK!9•jíëIëItfile-manager-advanced/application/svg-sanitizer/includes/phpunit/php-code-coverage/src/Report/Html/Renderer/File.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace SebastianBergmann\CodeCoverage\Report\Html; use SebastianBergmann\CodeCoverage\Node\File as FileNode; use SebastianBergmann\CodeCoverage\Util; /** * Renders a file node. */ final class File extends Renderer { /** * @var int */ private $htmlSpecialCharsFlags = \ENT_COMPAT | \ENT_HTML401 | \ENT_SUBSTITUTE; /** * @throws \RuntimeException */ public function render(FileNode $node, string $file): void { $template = new \Text_Template($this->templatePath . 'file.html', '{{', '}}'); $template->setVar( [ 'items' => $this->renderItems($node), 'lines' => $this->renderSource($node), ] ); $this->setCommonTemplateVariables($template, $node); $template->renderTo($file); } protected function renderItems(FileNode $node): string { $template = new \Text_Template($this->templatePath . 'file_item.html', '{{', '}}'); $methodItemTemplate = new \Text_Template( $this->templatePath . 'method_item.html', '{{', '}}' ); $items = $this->renderItemTemplate( $template, [ 'name' => 'Total', 'numClasses' => $node->getNumClassesAndTraits(), 'numTestedClasses' => $node->getNumTestedClassesAndTraits(), 'numMethods' => $node->getNumFunctionsAndMethods(), 'numTestedMethods' => $node->getNumTestedFunctionsAndMethods(), 'linesExecutedPercent' => $node->getLineExecutedPercent(false), 'linesExecutedPercentAsString' => $node->getLineExecutedPercent(), 'numExecutedLines' => $node->getNumExecutedLines(), 'numExecutableLines' => $node->getNumExecutableLines(), 'testedMethodsPercent' => $node->getTestedFunctionsAndMethodsPercent(false), 'testedMethodsPercentAsString' => $node->getTestedFunctionsAndMethodsPercent(), 'testedClassesPercent' => $node->getTestedClassesAndTraitsPercent(false), 'testedClassesPercentAsString' => $node->getTestedClassesAndTraitsPercent(), 'crap' => 'CRAP', ] ); $items .= $this->renderFunctionItems( $node->getFunctions(), $methodItemTemplate ); $items .= $this->renderTraitOrClassItems( $node->getTraits(), $template, $methodItemTemplate ); $items .= $this->renderTraitOrClassItems( $node->getClasses(), $template, $methodItemTemplate ); return $items; } protected function renderTraitOrClassItems(array $items, \Text_Template $template, \Text_Template $methodItemTemplate): string { $buffer = ''; if (empty($items)) { return $buffer; } foreach ($items as $name => $item) { $numMethods = 0; $numTestedMethods = 0; foreach ($item['methods'] as $method) { if ($method['executableLines'] > 0) { $numMethods++; if ($method['executedLines'] === $method['executableLines']) { $numTestedMethods++; } } } if ($item['executableLines'] > 0) { $numClasses = 1; $numTestedClasses = $numTestedMethods == $numMethods ? 1 : 0; $linesExecutedPercentAsString = Util::percent( $item['executedLines'], $item['executableLines'], true ); } else { $numClasses = 'n/a'; $numTestedClasses = 'n/a'; $linesExecutedPercentAsString = 'n/a'; } $buffer .= $this->renderItemTemplate( $template, [ 'name' => $this->abbreviateClassName($name), 'numClasses' => $numClasses, 'numTestedClasses' => $numTestedClasses, 'numMethods' => $numMethods, 'numTestedMethods' => $numTestedMethods, 'linesExecutedPercent' => Util::percent( $item['executedLines'], $item['executableLines'], false ), 'linesExecutedPercentAsString' => $linesExecutedPercentAsString, 'numExecutedLines' => $item['executedLines'], 'numExecutableLines' => $item['executableLines'], 'testedMethodsPercent' => Util::percent( $numTestedMethods, $numMethods ), 'testedMethodsPercentAsString' => Util::percent( $numTestedMethods, $numMethods, true ), 'testedClassesPercent' => Util::percent( $numTestedMethods == $numMethods ? 1 : 0, 1 ), 'testedClassesPercentAsString' => Util::percent( $numTestedMethods == $numMethods ? 1 : 0, 1, true ), 'crap' => $item['crap'], ] ); foreach ($item['methods'] as $method) { $buffer .= $this->renderFunctionOrMethodItem( $methodItemTemplate, $method, ' ' ); } } return $buffer; } protected function renderFunctionItems(array $functions, \Text_Template $template): string { if (empty($functions)) { return ''; } $buffer = ''; foreach ($functions as $function) { $buffer .= $this->renderFunctionOrMethodItem( $template, $function ); } return $buffer; } protected function renderFunctionOrMethodItem(\Text_Template $template, array $item, string $indent = ''): string { $numMethods = 0; $numTestedMethods = 0; if ($item['executableLines'] > 0) { $numMethods = 1; if ($item['executedLines'] === $item['executableLines']) { $numTestedMethods = 1; } } return $this->renderItemTemplate( $template, [ 'name' => \sprintf( '%s%s', $indent, $item['startLine'], \htmlspecialchars($item['signature'], $this->htmlSpecialCharsFlags), $item['functionName'] ?? $item['methodName'] ), 'numMethods' => $numMethods, 'numTestedMethods' => $numTestedMethods, 'linesExecutedPercent' => Util::percent( $item['executedLines'], $item['executableLines'] ), 'linesExecutedPercentAsString' => Util::percent( $item['executedLines'], $item['executableLines'], true ), 'numExecutedLines' => $item['executedLines'], 'numExecutableLines' => $item['executableLines'], 'testedMethodsPercent' => Util::percent( $numTestedMethods, 1 ), 'testedMethodsPercentAsString' => Util::percent( $numTestedMethods, 1, true ), 'crap' => $item['crap'], ] ); } protected function renderSource(FileNode $node): string { $coverageData = $node->getCoverageData(); $testData = $node->getTestData(); $codeLines = $this->loadFile($node->getPath()); $lines = ''; $i = 1; foreach ($codeLines as $line) { $trClass = ''; $popoverContent = ''; $popoverTitle = ''; if (\array_key_exists($i, $coverageData)) { $numTests = ($coverageData[$i] ? \count($coverageData[$i]) : 0); if ($coverageData[$i] === null) { $trClass = ' class="warning"'; } elseif ($numTests == 0) { $trClass = ' class="danger"'; } else { $lineCss = 'covered-by-large-tests'; $popoverContent = '
      '; if ($numTests > 1) { $popoverTitle = $numTests . ' tests cover line ' . $i; } else { $popoverTitle = '1 test covers line ' . $i; } foreach ($coverageData[$i] as $test) { if ($lineCss == 'covered-by-large-tests' && $testData[$test]['size'] == 'medium') { $lineCss = 'covered-by-medium-tests'; } elseif ($testData[$test]['size'] == 'small') { $lineCss = 'covered-by-small-tests'; } switch ($testData[$test]['status']) { case 0: switch ($testData[$test]['size']) { case 'small': $testCSS = ' class="covered-by-small-tests"'; break; case 'medium': $testCSS = ' class="covered-by-medium-tests"'; break; default: $testCSS = ' class="covered-by-large-tests"'; break; } break; case 1: case 2: $testCSS = ' class="warning"'; break; case 3: $testCSS = ' class="danger"'; break; case 4: $testCSS = ' class="danger"'; break; default: $testCSS = ''; } $popoverContent .= \sprintf( '%s', $testCSS, \htmlspecialchars($test, $this->htmlSpecialCharsFlags) ); } $popoverContent .= '
    '; $trClass = ' class="' . $lineCss . ' popin"'; } } $popover = ''; if (!empty($popoverTitle)) { $popover = \sprintf( ' data-title="%s" data-content="%s" data-placement="top" data-html="true"', $popoverTitle, \htmlspecialchars($popoverContent, $this->htmlSpecialCharsFlags) ); } $lines .= \sprintf( ' %s' . "\n", $trClass, $popover, $i, $i, $i, $line ); $i++; } return $lines; } /** * @param string $file */ protected function loadFile($file): array { $buffer = \file_get_contents($file); $tokens = \token_get_all($buffer); $result = ['']; $i = 0; $stringFlag = false; $fileEndsWithNewLine = \substr($buffer, -1) == "\n"; unset($buffer); foreach ($tokens as $j => $token) { if (\is_string($token)) { if ($token === '"' && $tokens[$j - 1] !== '\\') { $result[$i] .= \sprintf( '%s', \htmlspecialchars($token, $this->htmlSpecialCharsFlags) ); $stringFlag = !$stringFlag; } else { $result[$i] .= \sprintf( '%s', \htmlspecialchars($token, $this->htmlSpecialCharsFlags) ); } continue; } [$token, $value] = $token; $value = \str_replace( ["\t", ' '], ['    ', ' '], \htmlspecialchars($value, $this->htmlSpecialCharsFlags) ); if ($value === "\n") { $result[++$i] = ''; } else { $lines = \explode("\n", $value); foreach ($lines as $jj => $line) { $line = \trim($line); if ($line !== '') { if ($stringFlag) { $colour = 'string'; } else { switch ($token) { case \T_INLINE_HTML: $colour = 'html'; break; case \T_COMMENT: case \T_DOC_COMMENT: $colour = 'comment'; break; case \T_ABSTRACT: case \T_ARRAY: case \T_AS: case \T_BREAK: case \T_CALLABLE: case \T_CASE: case \T_CATCH: case \T_CLASS: case \T_CLONE: case \T_CONTINUE: case \T_DEFAULT: case \T_ECHO: case \T_ELSE: case \T_ELSEIF: case \T_EMPTY: case \T_ENDDECLARE: case \T_ENDFOR: case \T_ENDFOREACH: case \T_ENDIF: case \T_ENDSWITCH: case \T_ENDWHILE: case \T_EXIT: case \T_EXTENDS: case \T_FINAL: case \T_FINALLY: case \T_FOREACH: case \T_FUNCTION: case \T_GLOBAL: case \T_IF: case \T_IMPLEMENTS: case \T_INCLUDE: case \T_INCLUDE_ONCE: case \T_INSTANCEOF: case \T_INSTEADOF: case \T_INTERFACE: case \T_ISSET: case \T_LOGICAL_AND: case \T_LOGICAL_OR: case \T_LOGICAL_XOR: case \T_NAMESPACE: case \T_NEW: case \T_PRIVATE: case \T_PROTECTED: case \T_PUBLIC: case \T_REQUIRE: case \T_REQUIRE_ONCE: case \T_RETURN: case \T_STATIC: case \T_THROW: case \T_TRAIT: case \T_TRY: case \T_UNSET: case \T_USE: case \T_VAR: case \T_WHILE: case \T_YIELD: $colour = 'keyword'; break; default: $colour = 'default'; } } $result[$i] .= \sprintf( '%s', $colour, $line ); } if (isset($lines[$jj + 1])) { $result[++$i] = ''; } } } } if ($fileEndsWithNewLine) { unset($result[\count($result) - 1]); } return $result; } private function abbreviateClassName(string $className): string { $tmp = \explode('\\', $className); if (\count($tmp) > 1) { $className = \sprintf( '%s', $className, \array_pop($tmp) ); } return $className; } } PK!Åc·~Ï Ï yfile-manager-advanced/application/svg-sanitizer/includes/phpunit/php-code-coverage/src/Report/Html/Renderer/Directory.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace SebastianBergmann\CodeCoverage\Report\Html; use SebastianBergmann\CodeCoverage\Node\AbstractNode as Node; use SebastianBergmann\CodeCoverage\Node\Directory as DirectoryNode; /** * Renders a directory node. */ final class Directory extends Renderer { /** * @throws \InvalidArgumentException * @throws \RuntimeException */ public function render(DirectoryNode $node, string $file): void { $template = new \Text_Template($this->templatePath . 'directory.html', '{{', '}}'); $this->setCommonTemplateVariables($template, $node); $items = $this->renderItem($node, true); foreach ($node->getDirectories() as $item) { $items .= $this->renderItem($item); } foreach ($node->getFiles() as $item) { $items .= $this->renderItem($item); } $template->setVar( [ 'id' => $node->getId(), 'items' => $items, ] ); $template->renderTo($file); } protected function renderItem(Node $node, bool $total = false): string { $data = [ 'numClasses' => $node->getNumClassesAndTraits(), 'numTestedClasses' => $node->getNumTestedClassesAndTraits(), 'numMethods' => $node->getNumFunctionsAndMethods(), 'numTestedMethods' => $node->getNumTestedFunctionsAndMethods(), 'linesExecutedPercent' => $node->getLineExecutedPercent(false), 'linesExecutedPercentAsString' => $node->getLineExecutedPercent(), 'numExecutedLines' => $node->getNumExecutedLines(), 'numExecutableLines' => $node->getNumExecutableLines(), 'testedMethodsPercent' => $node->getTestedFunctionsAndMethodsPercent(false), 'testedMethodsPercentAsString' => $node->getTestedFunctionsAndMethodsPercent(), 'testedClassesPercent' => $node->getTestedClassesAndTraitsPercent(false), 'testedClassesPercentAsString' => $node->getTestedClassesAndTraitsPercent(), ]; if ($total) { $data['name'] = 'Total'; } else { if ($node instanceof DirectoryNode) { $data['name'] = \sprintf( '%s', $node->getName(), $node->getName() ); $up = \str_repeat('../', \count($node->getPathAsArray()) - 2); $data['icon'] = \sprintf('', $up); } else { $data['name'] = \sprintf( '%s', $node->getName(), $node->getName() ); $up = \str_repeat('../', \count($node->getPathAsArray()) - 2); $data['icon'] = \sprintf('', $up); } } return $this->renderItemTemplate( new \Text_Template($this->templatePath . 'directory_item.html', '{{', '}}'), $data ); } } PK!¢lNOOmfile-manager-advanced/application/svg-sanitizer/includes/phpunit/php-code-coverage/src/Report/Html/Facade.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace SebastianBergmann\CodeCoverage\Report\Html; use SebastianBergmann\CodeCoverage\CodeCoverage; use SebastianBergmann\CodeCoverage\Node\Directory as DirectoryNode; use SebastianBergmann\CodeCoverage\RuntimeException; /** * Generates an HTML report from a code coverage object. */ final class Facade { /** * @var string */ private $templatePath; /** * @var string */ private $generator; /** * @var int */ private $lowUpperBound; /** * @var int */ private $highLowerBound; public function __construct(int $lowUpperBound = 50, int $highLowerBound = 90, string $generator = '') { $this->generator = $generator; $this->highLowerBound = $highLowerBound; $this->lowUpperBound = $lowUpperBound; $this->templatePath = __DIR__ . '/Renderer/Template/'; } /** * @throws RuntimeException * @throws \InvalidArgumentException * @throws \RuntimeException */ public function process(CodeCoverage $coverage, string $target): void { $target = $this->getDirectory($target); $report = $coverage->getReport(); if (!isset($_SERVER['REQUEST_TIME'])) { $_SERVER['REQUEST_TIME'] = \time(); } $date = \date('D M j G:i:s T Y', $_SERVER['REQUEST_TIME']); $dashboard = new Dashboard( $this->templatePath, $this->generator, $date, $this->lowUpperBound, $this->highLowerBound ); $directory = new Directory( $this->templatePath, $this->generator, $date, $this->lowUpperBound, $this->highLowerBound ); $file = new File( $this->templatePath, $this->generator, $date, $this->lowUpperBound, $this->highLowerBound ); $directory->render($report, $target . 'index.html'); $dashboard->render($report, $target . 'dashboard.html'); foreach ($report as $node) { $id = $node->getId(); if ($node instanceof DirectoryNode) { if (!$this->createDirectory($target . $id)) { throw new \RuntimeException(\sprintf('Directory "%s" was not created', $target . $id)); } $directory->render($node, $target . $id . '/index.html'); $dashboard->render($node, $target . $id . '/dashboard.html'); } else { $dir = \dirname($target . $id); if (!$this->createDirectory($dir)) { throw new \RuntimeException(\sprintf('Directory "%s" was not created', $dir)); } $file->render($node, $target . $id . '.html'); } } $this->copyFiles($target); } /** * @throws RuntimeException */ private function copyFiles(string $target): void { $dir = $this->getDirectory($target . '_css'); \copy($this->templatePath . 'css/bootstrap.min.css', $dir . 'bootstrap.min.css'); \copy($this->templatePath . 'css/nv.d3.min.css', $dir . 'nv.d3.min.css'); \copy($this->templatePath . 'css/style.css', $dir . 'style.css'); \copy($this->templatePath . 'css/custom.css', $dir . 'custom.css'); \copy($this->templatePath . 'css/octicons.css', $dir . 'octicons.css'); $dir = $this->getDirectory($target . '_icons'); \copy($this->templatePath . 'icons/file-code.svg', $dir . 'file-code.svg'); \copy($this->templatePath . 'icons/file-directory.svg', $dir . 'file-directory.svg'); $dir = $this->getDirectory($target . '_js'); \copy($this->templatePath . 'js/bootstrap.min.js', $dir . 'bootstrap.min.js'); \copy($this->templatePath . 'js/popper.min.js', $dir . 'popper.min.js'); \copy($this->templatePath . 'js/d3.min.js', $dir . 'd3.min.js'); \copy($this->templatePath . 'js/jquery.min.js', $dir . 'jquery.min.js'); \copy($this->templatePath . 'js/nv.d3.min.js', $dir . 'nv.d3.min.js'); \copy($this->templatePath . 'js/file.js', $dir . 'file.js'); } /** * @throws RuntimeException */ private function getDirectory(string $directory): string { if (\substr($directory, -1, 1) != \DIRECTORY_SEPARATOR) { $directory .= \DIRECTORY_SEPARATOR; } if (!$this->createDirectory($directory)) { throw new RuntimeException( \sprintf( 'Directory "%s" does not exist.', $directory ) ); } return $directory; } private function createDirectory(string $directory): bool { return !(!\is_dir($directory) && !@\mkdir($directory, 0777, true) && !\is_dir($directory)); } } PK!Ô\x?Á!Á!ofile-manager-advanced/application/svg-sanitizer/includes/phpunit/php-code-coverage/src/Report/Html/Renderer.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace SebastianBergmann\CodeCoverage\Report\Html; use SebastianBergmann\CodeCoverage\Node\AbstractNode; use SebastianBergmann\CodeCoverage\Node\Directory as DirectoryNode; use SebastianBergmann\CodeCoverage\Node\File as FileNode; use SebastianBergmann\CodeCoverage\Version; use SebastianBergmann\Environment\Runtime; /** * Base class for node renderers. */ abstract class Renderer { /** * @var string */ protected $templatePath; /** * @var string */ protected $generator; /** * @var string */ protected $date; /** * @var int */ protected $lowUpperBound; /** * @var int */ protected $highLowerBound; /** * @var string */ protected $version; public function __construct(string $templatePath, string $generator, string $date, int $lowUpperBound, int $highLowerBound) { $this->templatePath = $templatePath; $this->generator = $generator; $this->date = $date; $this->lowUpperBound = $lowUpperBound; $this->highLowerBound = $highLowerBound; $this->version = Version::id(); } protected function renderItemTemplate(\Text_Template $template, array $data): string { $numSeparator = ' / '; if (isset($data['numClasses']) && $data['numClasses'] > 0) { $classesLevel = $this->getColorLevel($data['testedClassesPercent']); $classesNumber = $data['numTestedClasses'] . $numSeparator . $data['numClasses']; $classesBar = $this->getCoverageBar( $data['testedClassesPercent'] ); } else { $classesLevel = ''; $classesNumber = '0' . $numSeparator . '0'; $classesBar = ''; $data['testedClassesPercentAsString'] = 'n/a'; } if ($data['numMethods'] > 0) { $methodsLevel = $this->getColorLevel($data['testedMethodsPercent']); $methodsNumber = $data['numTestedMethods'] . $numSeparator . $data['numMethods']; $methodsBar = $this->getCoverageBar( $data['testedMethodsPercent'] ); } else { $methodsLevel = ''; $methodsNumber = '0' . $numSeparator . '0'; $methodsBar = ''; $data['testedMethodsPercentAsString'] = 'n/a'; } if ($data['numExecutableLines'] > 0) { $linesLevel = $this->getColorLevel($data['linesExecutedPercent']); $linesNumber = $data['numExecutedLines'] . $numSeparator . $data['numExecutableLines']; $linesBar = $this->getCoverageBar( $data['linesExecutedPercent'] ); } else { $linesLevel = ''; $linesNumber = '0' . $numSeparator . '0'; $linesBar = ''; $data['linesExecutedPercentAsString'] = 'n/a'; } $template->setVar( [ 'icon' => $data['icon'] ?? '', 'crap' => $data['crap'] ?? '', 'name' => $data['name'], 'lines_bar' => $linesBar, 'lines_executed_percent' => $data['linesExecutedPercentAsString'], 'lines_level' => $linesLevel, 'lines_number' => $linesNumber, 'methods_bar' => $methodsBar, 'methods_tested_percent' => $data['testedMethodsPercentAsString'], 'methods_level' => $methodsLevel, 'methods_number' => $methodsNumber, 'classes_bar' => $classesBar, 'classes_tested_percent' => $data['testedClassesPercentAsString'] ?? '', 'classes_level' => $classesLevel, 'classes_number' => $classesNumber, ] ); return $template->render(); } protected function setCommonTemplateVariables(\Text_Template $template, AbstractNode $node): void { $template->setVar( [ 'id' => $node->getId(), 'full_path' => $node->getPath(), 'path_to_root' => $this->getPathToRoot($node), 'breadcrumbs' => $this->getBreadcrumbs($node), 'date' => $this->date, 'version' => $this->version, 'runtime' => $this->getRuntimeString(), 'generator' => $this->generator, 'low_upper_bound' => $this->lowUpperBound, 'high_lower_bound' => $this->highLowerBound, ] ); } protected function getBreadcrumbs(AbstractNode $node): string { $breadcrumbs = ''; $path = $node->getPathAsArray(); $pathToRoot = []; $max = \count($path); if ($node instanceof FileNode) { $max--; } for ($i = 0; $i < $max; $i++) { $pathToRoot[] = \str_repeat('../', $i); } foreach ($path as $step) { if ($step !== $node) { $breadcrumbs .= $this->getInactiveBreadcrumb( $step, \array_pop($pathToRoot) ); } else { $breadcrumbs .= $this->getActiveBreadcrumb($step); } } return $breadcrumbs; } protected function getActiveBreadcrumb(AbstractNode $node): string { $buffer = \sprintf( ' ' . "\n", $node->getName() ); if ($node instanceof DirectoryNode) { $buffer .= ' ' . "\n"; } return $buffer; } protected function getInactiveBreadcrumb(AbstractNode $node, string $pathToRoot): string { return \sprintf( ' ' . "\n", $pathToRoot, $node->getName() ); } protected function getPathToRoot(AbstractNode $node): string { $id = $node->getId(); $depth = \substr_count($id, '/'); if ($id !== 'index' && $node instanceof DirectoryNode) { $depth++; } return \str_repeat('../', $depth); } protected function getCoverageBar(float $percent): string { $level = $this->getColorLevel($percent); $template = new \Text_Template( $this->templatePath . 'coverage_bar.html', '{{', '}}' ); $template->setVar(['level' => $level, 'percent' => \sprintf('%.2F', $percent)]); return $template->render(); } protected function getColorLevel(float $percent): string { if ($percent <= $this->lowUpperBound) { return 'danger'; } if ($percent > $this->lowUpperBound && $percent < $this->highLowerBound) { return 'warning'; } return 'success'; } private function getRuntimeString(): string { $runtime = new Runtime; $buffer = \sprintf( '%s %s', $runtime->getVendorUrl(), $runtime->getName(), $runtime->getVersion() ); if ($runtime->hasXdebug() && !$runtime->hasPHPDBGCodeCoverage()) { $buffer .= \sprintf( ' with Xdebug %s', \phpversion('xdebug') ); } if ($runtime->hasPCOV() && !$runtime->hasPHPDBGCodeCoverage()) { $buffer .= \sprintf( ' with PCOV %s', \phpversion('pcov') ); } return $buffer; } } PK!æ.–(vvhfile-manager-advanced/application/svg-sanitizer/includes/phpunit/php-code-coverage/src/Report/Crap4j.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace SebastianBergmann\CodeCoverage\Report; use SebastianBergmann\CodeCoverage\CodeCoverage; use SebastianBergmann\CodeCoverage\Node\File; use SebastianBergmann\CodeCoverage\RuntimeException; final class Crap4j { /** * @var int */ private $threshold; public function __construct(int $threshold = 30) { $this->threshold = $threshold; } /** * @throws \RuntimeException */ public function process(CodeCoverage $coverage, ?string $target = null, ?string $name = null): string { $document = new \DOMDocument('1.0', 'UTF-8'); $document->formatOutput = true; $root = $document->createElement('crap_result'); $document->appendChild($root); $project = $document->createElement('project', \is_string($name) ? $name : ''); $root->appendChild($project); $root->appendChild($document->createElement('timestamp', \date('Y-m-d H:i:s', $_SERVER['REQUEST_TIME']))); $stats = $document->createElement('stats'); $methodsNode = $document->createElement('methods'); $report = $coverage->getReport(); unset($coverage); $fullMethodCount = 0; $fullCrapMethodCount = 0; $fullCrapLoad = 0; $fullCrap = 0; foreach ($report as $item) { $namespace = 'global'; if (!$item instanceof File) { continue; } $file = $document->createElement('file'); $file->setAttribute('name', $item->getPath()); $classes = $item->getClassesAndTraits(); foreach ($classes as $className => $class) { foreach ($class['methods'] as $methodName => $method) { $crapLoad = $this->getCrapLoad($method['crap'], $method['ccn'], $method['coverage']); $fullCrap += $method['crap']; $fullCrapLoad += $crapLoad; $fullMethodCount++; if ($method['crap'] >= $this->threshold) { $fullCrapMethodCount++; } $methodNode = $document->createElement('method'); if (!empty($class['package']['namespace'])) { $namespace = $class['package']['namespace']; } $methodNode->appendChild($document->createElement('package', $namespace)); $methodNode->appendChild($document->createElement('className', $className)); $methodNode->appendChild($document->createElement('methodName', $methodName)); $methodNode->appendChild($document->createElement('methodSignature', \htmlspecialchars($method['signature']))); $methodNode->appendChild($document->createElement('fullMethod', \htmlspecialchars($method['signature']))); $methodNode->appendChild($document->createElement('crap', (string) $this->roundValue($method['crap']))); $methodNode->appendChild($document->createElement('complexity', (string) $method['ccn'])); $methodNode->appendChild($document->createElement('coverage', (string) $this->roundValue($method['coverage']))); $methodNode->appendChild($document->createElement('crapLoad', (string) \round($crapLoad))); $methodsNode->appendChild($methodNode); } } } $stats->appendChild($document->createElement('name', 'Method Crap Stats')); $stats->appendChild($document->createElement('methodCount', (string) $fullMethodCount)); $stats->appendChild($document->createElement('crapMethodCount', (string) $fullCrapMethodCount)); $stats->appendChild($document->createElement('crapLoad', (string) \round($fullCrapLoad))); $stats->appendChild($document->createElement('totalCrap', (string) $fullCrap)); $crapMethodPercent = 0; if ($fullMethodCount > 0) { $crapMethodPercent = $this->roundValue((100 * $fullCrapMethodCount) / $fullMethodCount); } $stats->appendChild($document->createElement('crapMethodPercent', (string) $crapMethodPercent)); $root->appendChild($stats); $root->appendChild($methodsNode); $buffer = $document->saveXML(); if ($target !== null) { if (!$this->createDirectory(\dirname($target))) { throw new \RuntimeException(\sprintf('Directory "%s" was not created', \dirname($target))); } if (@\file_put_contents($target, $buffer) === false) { throw new RuntimeException( \sprintf( 'Could not write to "%s', $target ) ); } } return $buffer; } /** * @param float $crapValue * @param int $cyclomaticComplexity * @param float $coveragePercent */ private function getCrapLoad($crapValue, $cyclomaticComplexity, $coveragePercent): float { $crapLoad = 0; if ($crapValue >= $this->threshold) { $crapLoad += $cyclomaticComplexity * (1.0 - $coveragePercent / 100); $crapLoad += $cyclomaticComplexity / $this->threshold; } return $crapLoad; } /** * @param float $value */ private function roundValue($value): float { return \round($value, 2); } private function createDirectory(string $directory): bool { return !(!\is_dir($directory) && !@\mkdir($directory, 0777, true) && !\is_dir($directory)); } } PK!5^�-llefile-manager-advanced/application/svg-sanitizer/includes/phpunit/php-code-coverage/src/Report/PHP.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace SebastianBergmann\CodeCoverage\Report; use SebastianBergmann\CodeCoverage\CodeCoverage; use SebastianBergmann\CodeCoverage\RuntimeException; /** * Uses var_export() to write a SebastianBergmann\CodeCoverage\CodeCoverage object to a file. */ final class PHP { /** * @throws \SebastianBergmann\CodeCoverage\RuntimeException */ public function process(CodeCoverage $coverage, ?string $target = null): string { $filter = $coverage->filter(); $buffer = \sprintf( 'setData(%s); $coverage->setTests(%s); $filter = $coverage->filter(); $filter->setWhitelistedFiles(%s); return $coverage;', \var_export($coverage->getData(true), true), \var_export($coverage->getTests(), true), \var_export($filter->getWhitelistedFiles(), true) ); if ($target !== null) { if (!$this->createDirectory(\dirname($target))) { throw new \RuntimeException(\sprintf('Directory "%s" was not created', \dirname($target))); } if (@\file_put_contents($target, $buffer) === false) { throw new RuntimeException( \sprintf( 'Could not write to "%s', $target ) ); } } return $buffer; } private function createDirectory(string $directory): bool { return !(!\is_dir($directory) && !@\mkdir($directory, 0777, true) && !\is_dir($directory)); } } PK!í>¿Ük"k"ffile-manager-advanced/application/svg-sanitizer/includes/phpunit/php-code-coverage/src/Report/Text.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace SebastianBergmann\CodeCoverage\Report; use SebastianBergmann\CodeCoverage\CodeCoverage; use SebastianBergmann\CodeCoverage\Node\File; use SebastianBergmann\CodeCoverage\Util; /** * Generates human readable output from a code coverage object. * * The output gets put into a text file our written to the CLI. */ final class Text { /** * @var string */ private const COLOR_GREEN = "\x1b[30;42m"; /** * @var string */ private const COLOR_YELLOW = "\x1b[30;43m"; /** * @var string */ private const COLOR_RED = "\x1b[37;41m"; /** * @var string */ private const COLOR_HEADER = "\x1b[1;37;40m"; /** * @var string */ private const COLOR_RESET = "\x1b[0m"; /** * @var string */ private const COLOR_EOL = "\x1b[2K"; /** * @var int */ private $lowUpperBound; /** * @var int */ private $highLowerBound; /** * @var bool */ private $showUncoveredFiles; /** * @var bool */ private $showOnlySummary; public function __construct(int $lowUpperBound = 50, int $highLowerBound = 90, bool $showUncoveredFiles = false, bool $showOnlySummary = false) { $this->lowUpperBound = $lowUpperBound; $this->highLowerBound = $highLowerBound; $this->showUncoveredFiles = $showUncoveredFiles; $this->showOnlySummary = $showOnlySummary; } public function process(CodeCoverage $coverage, bool $showColors = false): string { $output = \PHP_EOL . \PHP_EOL; $report = $coverage->getReport(); $colors = [ 'header' => '', 'classes' => '', 'methods' => '', 'lines' => '', 'reset' => '', 'eol' => '', ]; if ($showColors) { $colors['classes'] = $this->getCoverageColor( $report->getNumTestedClassesAndTraits(), $report->getNumClassesAndTraits() ); $colors['methods'] = $this->getCoverageColor( $report->getNumTestedMethods(), $report->getNumMethods() ); $colors['lines'] = $this->getCoverageColor( $report->getNumExecutedLines(), $report->getNumExecutableLines() ); $colors['reset'] = self::COLOR_RESET; $colors['header'] = self::COLOR_HEADER; $colors['eol'] = self::COLOR_EOL; } $classes = \sprintf( ' Classes: %6s (%d/%d)', Util::percent( $report->getNumTestedClassesAndTraits(), $report->getNumClassesAndTraits(), true ), $report->getNumTestedClassesAndTraits(), $report->getNumClassesAndTraits() ); $methods = \sprintf( ' Methods: %6s (%d/%d)', Util::percent( $report->getNumTestedMethods(), $report->getNumMethods(), true ), $report->getNumTestedMethods(), $report->getNumMethods() ); $lines = \sprintf( ' Lines: %6s (%d/%d)', Util::percent( $report->getNumExecutedLines(), $report->getNumExecutableLines(), true ), $report->getNumExecutedLines(), $report->getNumExecutableLines() ); $padding = \max(\array_map('strlen', [$classes, $methods, $lines])); if ($this->showOnlySummary) { $title = 'Code Coverage Report Summary:'; $padding = \max($padding, \strlen($title)); $output .= $this->format($colors['header'], $padding, $title); } else { $date = \date(' Y-m-d H:i:s', $_SERVER['REQUEST_TIME']); $title = 'Code Coverage Report:'; $output .= $this->format($colors['header'], $padding, $title); $output .= $this->format($colors['header'], $padding, $date); $output .= $this->format($colors['header'], $padding, ''); $output .= $this->format($colors['header'], $padding, ' Summary:'); } $output .= $this->format($colors['classes'], $padding, $classes); $output .= $this->format($colors['methods'], $padding, $methods); $output .= $this->format($colors['lines'], $padding, $lines); if ($this->showOnlySummary) { return $output . \PHP_EOL; } $classCoverage = []; foreach ($report as $item) { if (!$item instanceof File) { continue; } $classes = $item->getClassesAndTraits(); foreach ($classes as $className => $class) { $classStatements = 0; $coveredClassStatements = 0; $coveredMethods = 0; $classMethods = 0; foreach ($class['methods'] as $method) { if ($method['executableLines'] == 0) { continue; } $classMethods++; $classStatements += $method['executableLines']; $coveredClassStatements += $method['executedLines']; if ($method['coverage'] == 100) { $coveredMethods++; } } $namespace = ''; if (!empty($class['package']['namespace'])) { $namespace = '\\' . $class['package']['namespace'] . '::'; } elseif (!empty($class['package']['fullPackage'])) { $namespace = '@' . $class['package']['fullPackage'] . '::'; } $classCoverage[$namespace . $className] = [ 'namespace' => $namespace, 'className ' => $className, 'methodsCovered' => $coveredMethods, 'methodCount' => $classMethods, 'statementsCovered' => $coveredClassStatements, 'statementCount' => $classStatements, ]; } } \ksort($classCoverage); $methodColor = ''; $linesColor = ''; $resetColor = ''; foreach ($classCoverage as $fullQualifiedPath => $classInfo) { if ($this->showUncoveredFiles || $classInfo['statementsCovered'] != 0) { if ($showColors) { $methodColor = $this->getCoverageColor($classInfo['methodsCovered'], $classInfo['methodCount']); $linesColor = $this->getCoverageColor($classInfo['statementsCovered'], $classInfo['statementCount']); $resetColor = $colors['reset']; } $output .= \PHP_EOL . $fullQualifiedPath . \PHP_EOL . ' ' . $methodColor . 'Methods: ' . $this->printCoverageCounts($classInfo['methodsCovered'], $classInfo['methodCount'], 2) . $resetColor . ' ' . ' ' . $linesColor . 'Lines: ' . $this->printCoverageCounts($classInfo['statementsCovered'], $classInfo['statementCount'], 3) . $resetColor; } } return $output . \PHP_EOL; } private function getCoverageColor(int $numberOfCoveredElements, int $totalNumberOfElements): string { $coverage = Util::percent( $numberOfCoveredElements, $totalNumberOfElements ); if ($coverage >= $this->highLowerBound) { return self::COLOR_GREEN; } if ($coverage > $this->lowUpperBound) { return self::COLOR_YELLOW; } return self::COLOR_RED; } private function printCoverageCounts(int $numberOfCoveredElements, int $totalNumberOfElements, int $precision): string { $format = '%' . $precision . 's'; return Util::percent( $numberOfCoveredElements, $totalNumberOfElements, true, true ) . ' (' . \sprintf($format, $numberOfCoveredElements) . '/' . \sprintf($format, $totalNumberOfElements) . ')'; } private function format($color, $padding, $string): string { $reset = $color ? self::COLOR_RESET : ''; return $color . \str_pad($string, $padding) . $reset . \PHP_EOL; } } PK!Q9rff_file-manager-advanced/application/svg-sanitizer/includes/phpunit/php-code-coverage/src/Util.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace SebastianBergmann\CodeCoverage; /** * Utility methods. */ final class Util { /** * @return float|int|string */ public static function percent(float $a, float $b, bool $asString = false, bool $fixedWidth = false) { if ($asString && $b == 0) { return ''; } $percent = 100; if ($b > 0) { $percent = ($a / $b) * 100; } if ($asString) { $format = $fixedWidth ? '%6.2F%%' : '%01.2F%%'; return \sprintf($format, $percent); } return $percent; } } PK!a6¦Ò´´gfile-manager-advanced/application/svg-sanitizer/includes/phpunit/php-code-coverage/src/Node/Builder.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace SebastianBergmann\CodeCoverage\Node; use SebastianBergmann\CodeCoverage\CodeCoverage; final class Builder { public function build(CodeCoverage $coverage): Directory { $files = $coverage->getData(); $commonPath = $this->reducePaths($files); $root = new Directory( $commonPath, null ); $this->addItems( $root, $this->buildDirectoryStructure($files), $coverage->getTests(), $coverage->getCacheTokens() ); return $root; } private function addItems(Directory $root, array $items, array $tests, bool $cacheTokens): void { foreach ($items as $key => $value) { $key = (string) $key; if (\substr($key, -2) === '/f') { $key = \substr($key, 0, -2); if (\file_exists($root->getPath() . \DIRECTORY_SEPARATOR . $key)) { $root->addFile($key, $value, $tests, $cacheTokens); } } else { $child = $root->addDirectory($key); $this->addItems($child, $value, $tests, $cacheTokens); } } } /** * Builds an array representation of the directory structure. * * For instance, * * * Array * ( * [Money.php] => Array * ( * ... * ) * * [MoneyBag.php] => Array * ( * ... * ) * ) * * * is transformed into * * * Array * ( * [.] => Array * ( * [Money.php] => Array * ( * ... * ) * * [MoneyBag.php] => Array * ( * ... * ) * ) * ) * */ private function buildDirectoryStructure(array $files): array { $result = []; foreach ($files as $path => $file) { $path = \explode(\DIRECTORY_SEPARATOR, $path); $pointer = &$result; $max = \count($path); for ($i = 0; $i < $max; $i++) { $type = ''; if ($i === ($max - 1)) { $type = '/f'; } $pointer = &$pointer[$path[$i] . $type]; } $pointer = $file; } return $result; } /** * Reduces the paths by cutting the longest common start path. * * For instance, * * * Array * ( * [/home/sb/Money/Money.php] => Array * ( * ... * ) * * [/home/sb/Money/MoneyBag.php] => Array * ( * ... * ) * ) * * * is reduced to * * * Array * ( * [Money.php] => Array * ( * ... * ) * * [MoneyBag.php] => Array * ( * ... * ) * ) * */ private function reducePaths(array &$files): string { if (empty($files)) { return '.'; } $commonPath = ''; $paths = \array_keys($files); if (\count($files) === 1) { $commonPath = \dirname($paths[0]) . \DIRECTORY_SEPARATOR; $files[\basename($paths[0])] = $files[$paths[0]]; unset($files[$paths[0]]); return $commonPath; } $max = \count($paths); for ($i = 0; $i < $max; $i++) { // strip phar:// prefixes if (\strpos($paths[$i], 'phar://') === 0) { $paths[$i] = \substr($paths[$i], 7); $paths[$i] = \str_replace('/', \DIRECTORY_SEPARATOR, $paths[$i]); } $paths[$i] = \explode(\DIRECTORY_SEPARATOR, $paths[$i]); if (empty($paths[$i][0])) { $paths[$i][0] = \DIRECTORY_SEPARATOR; } } $done = false; $max = \count($paths); while (!$done) { for ($i = 0; $i < $max - 1; $i++) { if (!isset($paths[$i][0]) || !isset($paths[$i + 1][0]) || $paths[$i][0] !== $paths[$i + 1][0]) { $done = true; break; } } if (!$done) { $commonPath .= $paths[0][0]; if ($paths[0][0] !== \DIRECTORY_SEPARATOR) { $commonPath .= \DIRECTORY_SEPARATOR; } for ($i = 0; $i < $max; $i++) { \array_shift($paths[$i]); } } } $original = \array_keys($files); $max = \count($original); for ($i = 0; $i < $max; $i++) { $files[\implode(\DIRECTORY_SEPARATOR, $paths[$i])] = $files[$original[$i]]; unset($files[$original[$i]]); } \ksort($files); return \substr($commonPath, 0, -1); } } PK!³l8@8@dfile-manager-advanced/application/svg-sanitizer/includes/phpunit/php-code-coverage/src/Node/File.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace SebastianBergmann\CodeCoverage\Node; /** * Represents a file in the code coverage information tree. */ final class File extends AbstractNode { /** * @var array */ private $coverageData; /** * @var array */ private $testData; /** * @var int */ private $numExecutableLines = 0; /** * @var int */ private $numExecutedLines = 0; /** * @var array */ private $classes = []; /** * @var array */ private $traits = []; /** * @var array */ private $functions = []; /** * @var array */ private $linesOfCode = []; /** * @var int */ private $numClasses; /** * @var int */ private $numTestedClasses = 0; /** * @var int */ private $numTraits; /** * @var int */ private $numTestedTraits = 0; /** * @var int */ private $numMethods; /** * @var int */ private $numTestedMethods; /** * @var int */ private $numTestedFunctions; /** * @var bool */ private $cacheTokens; /** * @var array */ private $codeUnitsByLine = []; public function __construct(string $name, AbstractNode $parent, array $coverageData, array $testData, bool $cacheTokens) { parent::__construct($name, $parent); $this->coverageData = $coverageData; $this->testData = $testData; $this->cacheTokens = $cacheTokens; $this->calculateStatistics(); } /** * Returns the number of files in/under this node. */ public function count(): int { return 1; } /** * Returns the code coverage data of this node. */ public function getCoverageData(): array { return $this->coverageData; } /** * Returns the test data of this node. */ public function getTestData(): array { return $this->testData; } /** * Returns the classes of this node. */ public function getClasses(): array { return $this->classes; } /** * Returns the traits of this node. */ public function getTraits(): array { return $this->traits; } /** * Returns the functions of this node. */ public function getFunctions(): array { return $this->functions; } /** * Returns the LOC/CLOC/NCLOC of this node. */ public function getLinesOfCode(): array { return $this->linesOfCode; } /** * Returns the number of executable lines. */ public function getNumExecutableLines(): int { return $this->numExecutableLines; } /** * Returns the number of executed lines. */ public function getNumExecutedLines(): int { return $this->numExecutedLines; } /** * Returns the number of classes. */ public function getNumClasses(): int { if ($this->numClasses === null) { $this->numClasses = 0; foreach ($this->classes as $class) { foreach ($class['methods'] as $method) { if ($method['executableLines'] > 0) { $this->numClasses++; continue 2; } } } } return $this->numClasses; } /** * Returns the number of tested classes. */ public function getNumTestedClasses(): int { return $this->numTestedClasses; } /** * Returns the number of traits. */ public function getNumTraits(): int { if ($this->numTraits === null) { $this->numTraits = 0; foreach ($this->traits as $trait) { foreach ($trait['methods'] as $method) { if ($method['executableLines'] > 0) { $this->numTraits++; continue 2; } } } } return $this->numTraits; } /** * Returns the number of tested traits. */ public function getNumTestedTraits(): int { return $this->numTestedTraits; } /** * Returns the number of methods. */ public function getNumMethods(): int { if ($this->numMethods === null) { $this->numMethods = 0; foreach ($this->classes as $class) { foreach ($class['methods'] as $method) { if ($method['executableLines'] > 0) { $this->numMethods++; } } } foreach ($this->traits as $trait) { foreach ($trait['methods'] as $method) { if ($method['executableLines'] > 0) { $this->numMethods++; } } } } return $this->numMethods; } /** * Returns the number of tested methods. */ public function getNumTestedMethods(): int { if ($this->numTestedMethods === null) { $this->numTestedMethods = 0; foreach ($this->classes as $class) { foreach ($class['methods'] as $method) { if ($method['executableLines'] > 0 && $method['coverage'] === 100) { $this->numTestedMethods++; } } } foreach ($this->traits as $trait) { foreach ($trait['methods'] as $method) { if ($method['executableLines'] > 0 && $method['coverage'] === 100) { $this->numTestedMethods++; } } } } return $this->numTestedMethods; } /** * Returns the number of functions. */ public function getNumFunctions(): int { return \count($this->functions); } /** * Returns the number of tested functions. */ public function getNumTestedFunctions(): int { if ($this->numTestedFunctions === null) { $this->numTestedFunctions = 0; foreach ($this->functions as $function) { if ($function['executableLines'] > 0 && $function['coverage'] === 100) { $this->numTestedFunctions++; } } } return $this->numTestedFunctions; } private function calculateStatistics(): void { if ($this->cacheTokens) { $tokens = \PHP_Token_Stream_CachingFactory::get($this->getPath()); } else { $tokens = new \PHP_Token_Stream($this->getPath()); } $this->linesOfCode = $tokens->getLinesOfCode(); foreach (\range(1, $this->linesOfCode['loc']) as $lineNumber) { $this->codeUnitsByLine[$lineNumber] = []; } try { $this->processClasses($tokens); $this->processTraits($tokens); $this->processFunctions($tokens); } catch (\OutOfBoundsException $e) { // This can happen with PHP_Token_Stream if the file is syntactically invalid, // and probably affects a file that wasn't executed. } unset($tokens); foreach (\range(1, $this->linesOfCode['loc']) as $lineNumber) { if (isset($this->coverageData[$lineNumber])) { foreach ($this->codeUnitsByLine[$lineNumber] as &$codeUnit) { $codeUnit['executableLines']++; } unset($codeUnit); $this->numExecutableLines++; if (\count($this->coverageData[$lineNumber]) > 0) { foreach ($this->codeUnitsByLine[$lineNumber] as &$codeUnit) { $codeUnit['executedLines']++; } unset($codeUnit); $this->numExecutedLines++; } } } foreach ($this->traits as &$trait) { foreach ($trait['methods'] as &$method) { if ($method['executableLines'] > 0) { $method['coverage'] = ($method['executedLines'] / $method['executableLines']) * 100; } else { $method['coverage'] = 100; } $method['crap'] = $this->crap( $method['ccn'], $method['coverage'] ); $trait['ccn'] += $method['ccn']; } unset($method); if ($trait['executableLines'] > 0) { $trait['coverage'] = ($trait['executedLines'] / $trait['executableLines']) * 100; if ($trait['coverage'] === 100) { $this->numTestedClasses++; } } else { $trait['coverage'] = 100; } $trait['crap'] = $this->crap( $trait['ccn'], $trait['coverage'] ); } unset($trait); foreach ($this->classes as &$class) { foreach ($class['methods'] as &$method) { if ($method['executableLines'] > 0) { $method['coverage'] = ($method['executedLines'] / $method['executableLines']) * 100; } else { $method['coverage'] = 100; } $method['crap'] = $this->crap( $method['ccn'], $method['coverage'] ); $class['ccn'] += $method['ccn']; } unset($method); if ($class['executableLines'] > 0) { $class['coverage'] = ($class['executedLines'] / $class['executableLines']) * 100; if ($class['coverage'] === 100) { $this->numTestedClasses++; } } else { $class['coverage'] = 100; } $class['crap'] = $this->crap( $class['ccn'], $class['coverage'] ); } unset($class); foreach ($this->functions as &$function) { if ($function['executableLines'] > 0) { $function['coverage'] = ($function['executedLines'] / $function['executableLines']) * 100; } else { $function['coverage'] = 100; } if ($function['coverage'] === 100) { $this->numTestedFunctions++; } $function['crap'] = $this->crap( $function['ccn'], $function['coverage'] ); } } private function processClasses(\PHP_Token_Stream $tokens): void { $classes = $tokens->getClasses(); $link = $this->getId() . '.html#'; foreach ($classes as $className => $class) { if (\strpos($className, 'anonymous') === 0) { continue; } if (!empty($class['package']['namespace'])) { $className = $class['package']['namespace'] . '\\' . $className; } $this->classes[$className] = [ 'className' => $className, 'methods' => [], 'startLine' => $class['startLine'], 'executableLines' => 0, 'executedLines' => 0, 'ccn' => 0, 'coverage' => 0, 'crap' => 0, 'package' => $class['package'], 'link' => $link . $class['startLine'], ]; foreach ($class['methods'] as $methodName => $method) { if (\strpos($methodName, 'anonymous') === 0) { continue; } $this->classes[$className]['methods'][$methodName] = $this->newMethod($methodName, $method, $link); foreach (\range($method['startLine'], $method['endLine']) as $lineNumber) { $this->codeUnitsByLine[$lineNumber] = [ &$this->classes[$className], &$this->classes[$className]['methods'][$methodName], ]; } } } } private function processTraits(\PHP_Token_Stream $tokens): void { $traits = $tokens->getTraits(); $link = $this->getId() . '.html#'; foreach ($traits as $traitName => $trait) { $this->traits[$traitName] = [ 'traitName' => $traitName, 'methods' => [], 'startLine' => $trait['startLine'], 'executableLines' => 0, 'executedLines' => 0, 'ccn' => 0, 'coverage' => 0, 'crap' => 0, 'package' => $trait['package'], 'link' => $link . $trait['startLine'], ]; foreach ($trait['methods'] as $methodName => $method) { if (\strpos($methodName, 'anonymous') === 0) { continue; } $this->traits[$traitName]['methods'][$methodName] = $this->newMethod($methodName, $method, $link); foreach (\range($method['startLine'], $method['endLine']) as $lineNumber) { $this->codeUnitsByLine[$lineNumber] = [ &$this->traits[$traitName], &$this->traits[$traitName]['methods'][$methodName], ]; } } } } private function processFunctions(\PHP_Token_Stream $tokens): void { $functions = $tokens->getFunctions(); $link = $this->getId() . '.html#'; foreach ($functions as $functionName => $function) { if (\strpos($functionName, 'anonymous') === 0) { continue; } $this->functions[$functionName] = [ 'functionName' => $functionName, 'signature' => $function['signature'], 'startLine' => $function['startLine'], 'executableLines' => 0, 'executedLines' => 0, 'ccn' => $function['ccn'], 'coverage' => 0, 'crap' => 0, 'link' => $link . $function['startLine'], ]; foreach (\range($function['startLine'], $function['endLine']) as $lineNumber) { $this->codeUnitsByLine[$lineNumber] = [&$this->functions[$functionName]]; } } } private function crap(int $ccn, float $coverage): string { if ($coverage === 0.0) { return (string) ($ccn ** 2 + $ccn); } if ($coverage >= 95) { return (string) $ccn; } return \sprintf( '%01.2F', $ccn ** 2 * (1 - $coverage / 100) ** 3 + $ccn ); } private function newMethod(string $methodName, array $method, string $link): array { return [ 'methodName' => $methodName, 'visibility' => $method['visibility'], 'signature' => $method['signature'], 'startLine' => $method['startLine'], 'endLine' => $method['endLine'], 'executableLines' => 0, 'executedLines' => 0, 'ccn' => $method['ccn'], 'coverage' => 0, 'crap' => 0, 'link' => $link . $method['startLine'], ]; } } PK!nr)Ãq$q$ifile-manager-advanced/application/svg-sanitizer/includes/phpunit/php-code-coverage/src/Node/Directory.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace SebastianBergmann\CodeCoverage\Node; use SebastianBergmann\CodeCoverage\InvalidArgumentException; /** * Represents a directory in the code coverage information tree. */ final class Directory extends AbstractNode implements \IteratorAggregate { /** * @var AbstractNode[] */ private $children = []; /** * @var Directory[] */ private $directories = []; /** * @var File[] */ private $files = []; /** * @var array */ private $classes; /** * @var array */ private $traits; /** * @var array */ private $functions; /** * @var array */ private $linesOfCode; /** * @var int */ private $numFiles = -1; /** * @var int */ private $numExecutableLines = -1; /** * @var int */ private $numExecutedLines = -1; /** * @var int */ private $numClasses = -1; /** * @var int */ private $numTestedClasses = -1; /** * @var int */ private $numTraits = -1; /** * @var int */ private $numTestedTraits = -1; /** * @var int */ private $numMethods = -1; /** * @var int */ private $numTestedMethods = -1; /** * @var int */ private $numFunctions = -1; /** * @var int */ private $numTestedFunctions = -1; /** * Returns the number of files in/under this node. */ public function count(): int { if ($this->numFiles === -1) { $this->numFiles = 0; foreach ($this->children as $child) { $this->numFiles += \count($child); } } return $this->numFiles; } /** * Returns an iterator for this node. */ public function getIterator(): \RecursiveIteratorIterator { return new \RecursiveIteratorIterator( new Iterator($this), \RecursiveIteratorIterator::SELF_FIRST ); } /** * Adds a new directory. */ public function addDirectory(string $name): self { $directory = new self($name, $this); $this->children[] = $directory; $this->directories[] = &$this->children[\count($this->children) - 1]; return $directory; } /** * Adds a new file. * * @throws InvalidArgumentException */ public function addFile(string $name, array $coverageData, array $testData, bool $cacheTokens): File { $file = new File($name, $this, $coverageData, $testData, $cacheTokens); $this->children[] = $file; $this->files[] = &$this->children[\count($this->children) - 1]; $this->numExecutableLines = -1; $this->numExecutedLines = -1; return $file; } /** * Returns the directories in this directory. */ public function getDirectories(): array { return $this->directories; } /** * Returns the files in this directory. */ public function getFiles(): array { return $this->files; } /** * Returns the child nodes of this node. */ public function getChildNodes(): array { return $this->children; } /** * Returns the classes of this node. */ public function getClasses(): array { if ($this->classes === null) { $this->classes = []; foreach ($this->children as $child) { $this->classes = \array_merge( $this->classes, $child->getClasses() ); } } return $this->classes; } /** * Returns the traits of this node. */ public function getTraits(): array { if ($this->traits === null) { $this->traits = []; foreach ($this->children as $child) { $this->traits = \array_merge( $this->traits, $child->getTraits() ); } } return $this->traits; } /** * Returns the functions of this node. */ public function getFunctions(): array { if ($this->functions === null) { $this->functions = []; foreach ($this->children as $child) { $this->functions = \array_merge( $this->functions, $child->getFunctions() ); } } return $this->functions; } /** * Returns the LOC/CLOC/NCLOC of this node. */ public function getLinesOfCode(): array { if ($this->linesOfCode === null) { $this->linesOfCode = ['loc' => 0, 'cloc' => 0, 'ncloc' => 0]; foreach ($this->children as $child) { $linesOfCode = $child->getLinesOfCode(); $this->linesOfCode['loc'] += $linesOfCode['loc']; $this->linesOfCode['cloc'] += $linesOfCode['cloc']; $this->linesOfCode['ncloc'] += $linesOfCode['ncloc']; } } return $this->linesOfCode; } /** * Returns the number of executable lines. */ public function getNumExecutableLines(): int { if ($this->numExecutableLines === -1) { $this->numExecutableLines = 0; foreach ($this->children as $child) { $this->numExecutableLines += $child->getNumExecutableLines(); } } return $this->numExecutableLines; } /** * Returns the number of executed lines. */ public function getNumExecutedLines(): int { if ($this->numExecutedLines === -1) { $this->numExecutedLines = 0; foreach ($this->children as $child) { $this->numExecutedLines += $child->getNumExecutedLines(); } } return $this->numExecutedLines; } /** * Returns the number of classes. */ public function getNumClasses(): int { if ($this->numClasses === -1) { $this->numClasses = 0; foreach ($this->children as $child) { $this->numClasses += $child->getNumClasses(); } } return $this->numClasses; } /** * Returns the number of tested classes. */ public function getNumTestedClasses(): int { if ($this->numTestedClasses === -1) { $this->numTestedClasses = 0; foreach ($this->children as $child) { $this->numTestedClasses += $child->getNumTestedClasses(); } } return $this->numTestedClasses; } /** * Returns the number of traits. */ public function getNumTraits(): int { if ($this->numTraits === -1) { $this->numTraits = 0; foreach ($this->children as $child) { $this->numTraits += $child->getNumTraits(); } } return $this->numTraits; } /** * Returns the number of tested traits. */ public function getNumTestedTraits(): int { if ($this->numTestedTraits === -1) { $this->numTestedTraits = 0; foreach ($this->children as $child) { $this->numTestedTraits += $child->getNumTestedTraits(); } } return $this->numTestedTraits; } /** * Returns the number of methods. */ public function getNumMethods(): int { if ($this->numMethods === -1) { $this->numMethods = 0; foreach ($this->children as $child) { $this->numMethods += $child->getNumMethods(); } } return $this->numMethods; } /** * Returns the number of tested methods. */ public function getNumTestedMethods(): int { if ($this->numTestedMethods === -1) { $this->numTestedMethods = 0; foreach ($this->children as $child) { $this->numTestedMethods += $child->getNumTestedMethods(); } } return $this->numTestedMethods; } /** * Returns the number of functions. */ public function getNumFunctions(): int { if ($this->numFunctions === -1) { $this->numFunctions = 0; foreach ($this->children as $child) { $this->numFunctions += $child->getNumFunctions(); } } return $this->numFunctions; } /** * Returns the number of tested functions. */ public function getNumTestedFunctions(): int { if ($this->numTestedFunctions === -1) { $this->numTestedFunctions = 0; foreach ($this->children as $child) { $this->numTestedFunctions += $child->getNumTestedFunctions(); } } return $this->numTestedFunctions; } } PK!—_Õc::hfile-manager-advanced/application/svg-sanitizer/includes/phpunit/php-code-coverage/src/Node/Iterator.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace SebastianBergmann\CodeCoverage\Node; /** * Recursive iterator for node object graphs. */ final class Iterator implements \RecursiveIterator { /** * @var int */ private $position; /** * @var AbstractNode[] */ private $nodes; public function __construct(Directory $node) { $this->nodes = $node->getChildNodes(); } /** * Rewinds the Iterator to the first element. */ public function rewind(): void { $this->position = 0; } /** * Checks if there is a current element after calls to rewind() or next(). */ public function valid(): bool { return $this->position < \count($this->nodes); } /** * Returns the key of the current element. */ public function key(): int { return $this->position; } /** * Returns the current element. */ public function current(): AbstractNode { return $this->valid() ? $this->nodes[$this->position] : null; } /** * Moves forward to next element. */ public function next(): void { $this->position++; } /** * Returns the sub iterator for the current element. * * @return Iterator */ public function getChildren(): self { return new self($this->nodes[$this->position]); } /** * Checks whether the current element has children. */ public function hasChildren(): bool { return $this->nodes[$this->position] instanceof Directory; } } PK!°EÔ´OOlfile-manager-advanced/application/svg-sanitizer/includes/phpunit/php-code-coverage/src/Node/AbstractNode.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace SebastianBergmann\CodeCoverage\Node; use SebastianBergmann\CodeCoverage\Util; /** * Base class for nodes in the code coverage information tree. */ abstract class AbstractNode implements \Countable { /** * @var string */ private $name; /** * @var string */ private $path; /** * @var array */ private $pathArray; /** * @var AbstractNode */ private $parent; /** * @var string */ private $id; public function __construct(string $name, ?self $parent = null) { if (\substr($name, -1) == \DIRECTORY_SEPARATOR) { $name = \substr($name, 0, -1); } $this->name = $name; $this->parent = $parent; } public function getName(): string { return $this->name; } public function getId(): string { if ($this->id === null) { $parent = $this->getParent(); if ($parent === null) { $this->id = 'index'; } else { $parentId = $parent->getId(); if ($parentId === 'index') { $this->id = \str_replace(':', '_', $this->name); } else { $this->id = $parentId . '/' . $this->name; } } } return $this->id; } public function getPath(): string { if ($this->path === null) { if ($this->parent === null || $this->parent->getPath() === null || $this->parent->getPath() === false) { $this->path = $this->name; } else { $this->path = $this->parent->getPath() . \DIRECTORY_SEPARATOR . $this->name; } } return $this->path; } public function getPathAsArray(): array { if ($this->pathArray === null) { if ($this->parent === null) { $this->pathArray = []; } else { $this->pathArray = $this->parent->getPathAsArray(); } $this->pathArray[] = $this; } return $this->pathArray; } public function getParent(): ?self { return $this->parent; } /** * Returns the percentage of classes that has been tested. * * @return int|string */ public function getTestedClassesPercent(bool $asString = true) { return Util::percent( $this->getNumTestedClasses(), $this->getNumClasses(), $asString ); } /** * Returns the percentage of traits that has been tested. * * @return int|string */ public function getTestedTraitsPercent(bool $asString = true) { return Util::percent( $this->getNumTestedTraits(), $this->getNumTraits(), $asString ); } /** * Returns the percentage of classes and traits that has been tested. * * @return int|string */ public function getTestedClassesAndTraitsPercent(bool $asString = true) { return Util::percent( $this->getNumTestedClassesAndTraits(), $this->getNumClassesAndTraits(), $asString ); } /** * Returns the percentage of functions that has been tested. * * @return int|string */ public function getTestedFunctionsPercent(bool $asString = true) { return Util::percent( $this->getNumTestedFunctions(), $this->getNumFunctions(), $asString ); } /** * Returns the percentage of methods that has been tested. * * @return int|string */ public function getTestedMethodsPercent(bool $asString = true) { return Util::percent( $this->getNumTestedMethods(), $this->getNumMethods(), $asString ); } /** * Returns the percentage of functions and methods that has been tested. * * @return int|string */ public function getTestedFunctionsAndMethodsPercent(bool $asString = true) { return Util::percent( $this->getNumTestedFunctionsAndMethods(), $this->getNumFunctionsAndMethods(), $asString ); } /** * Returns the percentage of executed lines. * * @return int|string */ public function getLineExecutedPercent(bool $asString = true) { return Util::percent( $this->getNumExecutedLines(), $this->getNumExecutableLines(), $asString ); } /** * Returns the number of classes and traits. */ public function getNumClassesAndTraits(): int { return $this->getNumClasses() + $this->getNumTraits(); } /** * Returns the number of tested classes and traits. */ public function getNumTestedClassesAndTraits(): int { return $this->getNumTestedClasses() + $this->getNumTestedTraits(); } /** * Returns the classes and traits of this node. */ public function getClassesAndTraits(): array { return \array_merge($this->getClasses(), $this->getTraits()); } /** * Returns the number of functions and methods. */ public function getNumFunctionsAndMethods(): int { return $this->getNumFunctions() + $this->getNumMethods(); } /** * Returns the number of tested functions and methods. */ public function getNumTestedFunctionsAndMethods(): int { return $this->getNumTestedFunctions() + $this->getNumTestedMethods(); } /** * Returns the functions and methods of this node. */ public function getFunctionsAndMethods(): array { return \array_merge($this->getFunctions(), $this->getMethods()); } /** * Returns the classes of this node. */ abstract public function getClasses(): array; /** * Returns the traits of this node. */ abstract public function getTraits(): array; /** * Returns the functions of this node. */ abstract public function getFunctions(): array; /** * Returns the LOC/CLOC/NCLOC of this node. */ abstract public function getLinesOfCode(): array; /** * Returns the number of executable lines. */ abstract public function getNumExecutableLines(): int; /** * Returns the number of executed lines. */ abstract public function getNumExecutedLines(): int; /** * Returns the number of classes. */ abstract public function getNumClasses(): int; /** * Returns the number of tested classes. */ abstract public function getNumTestedClasses(): int; /** * Returns the number of traits. */ abstract public function getNumTraits(): int; /** * Returns the number of tested traits. */ abstract public function getNumTestedTraits(): int; /** * Returns the number of methods. */ abstract public function getNumMethods(): int; /** * Returns the number of tested methods. */ abstract public function getNumTestedMethods(): int; /** * Returns the number of functions. */ abstract public function getNumFunctions(): int; /** * Returns the number of tested functions. */ abstract public function getNumTestedFunctions(): int; } PK!Œx1²IrIrgfile-manager-advanced/application/svg-sanitizer/includes/phpunit/php-code-coverage/src/CodeCoverage.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace SebastianBergmann\CodeCoverage; use PHPUnit\Framework\TestCase; use PHPUnit\Runner\PhptTestCase; use PHPUnit\Util\Test; use SebastianBergmann\CodeCoverage\Driver\Driver; use SebastianBergmann\CodeCoverage\Driver\PCOV; use SebastianBergmann\CodeCoverage\Driver\PHPDBG; use SebastianBergmann\CodeCoverage\Driver\Xdebug; use SebastianBergmann\CodeCoverage\Node\Builder; use SebastianBergmann\CodeCoverage\Node\Directory; use SebastianBergmann\CodeUnitReverseLookup\Wizard; use SebastianBergmann\Environment\Runtime; /** * Provides collection functionality for PHP code coverage information. */ final class CodeCoverage { /** * @var Driver */ private $driver; /** * @var Filter */ private $filter; /** * @var Wizard */ private $wizard; /** * @var bool */ private $cacheTokens = false; /** * @var bool */ private $checkForUnintentionallyCoveredCode = false; /** * @var bool */ private $forceCoversAnnotation = false; /** * @var bool */ private $checkForUnexecutedCoveredCode = false; /** * @var bool */ private $checkForMissingCoversAnnotation = false; /** * @var bool */ private $addUncoveredFilesFromWhitelist = true; /** * @var bool */ private $processUncoveredFilesFromWhitelist = false; /** * @var bool */ private $ignoreDeprecatedCode = false; /** * @var PhptTestCase|string|TestCase */ private $currentId; /** * Code coverage data. * * @var array */ private $data = []; /** * @var array */ private $ignoredLines = []; /** * @var bool */ private $disableIgnoredLines = false; /** * Test data. * * @var array */ private $tests = []; /** * @var string[] */ private $unintentionallyCoveredSubclassesWhitelist = []; /** * Determine if the data has been initialized or not * * @var bool */ private $isInitialized = false; /** * Determine whether we need to check for dead and unused code on each test * * @var bool */ private $shouldCheckForDeadAndUnused = true; /** * @var Directory */ private $report; /** * @throws RuntimeException */ public function __construct(?Driver $driver = null, ?Filter $filter = null) { if ($filter === null) { $filter = new Filter; } if ($driver === null) { $driver = $this->selectDriver($filter); } $this->driver = $driver; $this->filter = $filter; $this->wizard = new Wizard; } /** * Returns the code coverage information as a graph of node objects. */ public function getReport(): Directory { if ($this->report === null) { $this->report = (new Builder)->build($this); } return $this->report; } /** * Clears collected code coverage data. */ public function clear(): void { $this->isInitialized = false; $this->currentId = null; $this->data = []; $this->tests = []; $this->report = null; } /** * Returns the filter object used. */ public function filter(): Filter { return $this->filter; } /** * Returns the collected code coverage data. */ public function getData(bool $raw = false): array { if (!$raw && $this->addUncoveredFilesFromWhitelist) { $this->addUncoveredFilesFromWhitelist(); } return $this->data; } /** * Sets the coverage data. */ public function setData(array $data): void { $this->data = $data; $this->report = null; } /** * Returns the test data. */ public function getTests(): array { return $this->tests; } /** * Sets the test data. */ public function setTests(array $tests): void { $this->tests = $tests; } /** * Start collection of code coverage information. * * @param PhptTestCase|string|TestCase $id * * @throws RuntimeException */ public function start($id, bool $clear = false): void { if ($clear) { $this->clear(); } if ($this->isInitialized === false) { $this->initializeData(); } $this->currentId = $id; $this->driver->start($this->shouldCheckForDeadAndUnused); } /** * Stop collection of code coverage information. * * @param array|false $linesToBeCovered * * @throws MissingCoversAnnotationException * @throws CoveredCodeNotExecutedException * @throws RuntimeException * @throws InvalidArgumentException * @throws \ReflectionException */ public function stop(bool $append = true, $linesToBeCovered = [], array $linesToBeUsed = [], bool $ignoreForceCoversAnnotation = false): array { if (!\is_array($linesToBeCovered) && $linesToBeCovered !== false) { throw InvalidArgumentException::create( 2, 'array or false' ); } $data = $this->driver->stop(); $this->append($data, null, $append, $linesToBeCovered, $linesToBeUsed, $ignoreForceCoversAnnotation); $this->currentId = null; return $data; } /** * Appends code coverage data. * * @param PhptTestCase|string|TestCase $id * @param array|false $linesToBeCovered * * @throws \SebastianBergmann\CodeCoverage\UnintentionallyCoveredCodeException * @throws \SebastianBergmann\CodeCoverage\MissingCoversAnnotationException * @throws \SebastianBergmann\CodeCoverage\CoveredCodeNotExecutedException * @throws \ReflectionException * @throws \SebastianBergmann\CodeCoverage\InvalidArgumentException * @throws RuntimeException */ public function append(array $data, $id = null, bool $append = true, $linesToBeCovered = [], array $linesToBeUsed = [], bool $ignoreForceCoversAnnotation = false): void { if ($id === null) { $id = $this->currentId; } if ($id === null) { throw new RuntimeException; } $this->applyWhitelistFilter($data); $this->applyIgnoredLinesFilter($data); $this->initializeFilesThatAreSeenTheFirstTime($data); if (!$append) { return; } if ($id !== 'UNCOVERED_FILES_FROM_WHITELIST') { $this->applyCoversAnnotationFilter( $data, $linesToBeCovered, $linesToBeUsed, $ignoreForceCoversAnnotation ); } if (empty($data)) { return; } $size = 'unknown'; $status = -1; if ($id instanceof TestCase) { $_size = $id->getSize(); if ($_size === Test::SMALL) { $size = 'small'; } elseif ($_size === Test::MEDIUM) { $size = 'medium'; } elseif ($_size === Test::LARGE) { $size = 'large'; } $status = $id->getStatus(); $id = \get_class($id) . '::' . $id->getName(); } elseif ($id instanceof PhptTestCase) { $size = 'large'; $id = $id->getName(); } $this->tests[$id] = ['size' => $size, 'status' => $status]; foreach ($data as $file => $lines) { if (!$this->filter->isFile($file)) { continue; } foreach ($lines as $k => $v) { if ($v === Driver::LINE_EXECUTED) { if (empty($this->data[$file][$k]) || !\in_array($id, $this->data[$file][$k])) { $this->data[$file][$k][] = $id; } } } } $this->report = null; } /** * Merges the data from another instance. * * @param CodeCoverage $that */ public function merge(self $that): void { $this->filter->setWhitelistedFiles( \array_merge($this->filter->getWhitelistedFiles(), $that->filter()->getWhitelistedFiles()) ); foreach ($that->data as $file => $lines) { if (!isset($this->data[$file])) { if (!$this->filter->isFiltered($file)) { $this->data[$file] = $lines; } continue; } // we should compare the lines if any of two contains data $compareLineNumbers = \array_unique( \array_merge( \array_keys($this->data[$file]), \array_keys($that->data[$file]) ) ); foreach ($compareLineNumbers as $line) { $thatPriority = $this->getLinePriority($that->data[$file], $line); $thisPriority = $this->getLinePriority($this->data[$file], $line); if ($thatPriority > $thisPriority) { $this->data[$file][$line] = $that->data[$file][$line]; } elseif ($thatPriority === $thisPriority && \is_array($this->data[$file][$line])) { $this->data[$file][$line] = \array_unique( \array_merge($this->data[$file][$line], $that->data[$file][$line]) ); } } } $this->tests = \array_merge($this->tests, $that->getTests()); $this->report = null; } public function setCacheTokens(bool $flag): void { $this->cacheTokens = $flag; } public function getCacheTokens(): bool { return $this->cacheTokens; } public function setCheckForUnintentionallyCoveredCode(bool $flag): void { $this->checkForUnintentionallyCoveredCode = $flag; } public function setForceCoversAnnotation(bool $flag): void { $this->forceCoversAnnotation = $flag; } public function setCheckForMissingCoversAnnotation(bool $flag): void { $this->checkForMissingCoversAnnotation = $flag; } public function setCheckForUnexecutedCoveredCode(bool $flag): void { $this->checkForUnexecutedCoveredCode = $flag; } public function setAddUncoveredFilesFromWhitelist(bool $flag): void { $this->addUncoveredFilesFromWhitelist = $flag; } public function setProcessUncoveredFilesFromWhitelist(bool $flag): void { $this->processUncoveredFilesFromWhitelist = $flag; } public function setDisableIgnoredLines(bool $flag): void { $this->disableIgnoredLines = $flag; } public function setIgnoreDeprecatedCode(bool $flag): void { $this->ignoreDeprecatedCode = $flag; } public function setUnintentionallyCoveredSubclassesWhitelist(array $whitelist): void { $this->unintentionallyCoveredSubclassesWhitelist = $whitelist; } /** * Determine the priority for a line * * 1 = the line is not set * 2 = the line has not been tested * 3 = the line is dead code * 4 = the line has been tested * * During a merge, a higher number is better. * * @param array $data * @param int $line * * @return int */ private function getLinePriority($data, $line) { if (!\array_key_exists($line, $data)) { return 1; } if (\is_array($data[$line]) && \count($data[$line]) === 0) { return 2; } if ($data[$line] === null) { return 3; } return 4; } /** * Applies the @covers annotation filtering. * * @param array|false $linesToBeCovered * * @throws \SebastianBergmann\CodeCoverage\CoveredCodeNotExecutedException * @throws \ReflectionException * @throws MissingCoversAnnotationException * @throws UnintentionallyCoveredCodeException */ private function applyCoversAnnotationFilter(array &$data, $linesToBeCovered, array $linesToBeUsed, bool $ignoreForceCoversAnnotation): void { if ($linesToBeCovered === false || ($this->forceCoversAnnotation && empty($linesToBeCovered) && !$ignoreForceCoversAnnotation)) { if ($this->checkForMissingCoversAnnotation) { throw new MissingCoversAnnotationException; } $data = []; return; } if (empty($linesToBeCovered)) { return; } if ($this->checkForUnintentionallyCoveredCode && (!$this->currentId instanceof TestCase || (!$this->currentId->isMedium() && !$this->currentId->isLarge()))) { $this->performUnintentionallyCoveredCodeCheck($data, $linesToBeCovered, $linesToBeUsed); } if ($this->checkForUnexecutedCoveredCode) { $this->performUnexecutedCoveredCodeCheck($data, $linesToBeCovered, $linesToBeUsed); } $data = \array_intersect_key($data, $linesToBeCovered); foreach (\array_keys($data) as $filename) { $_linesToBeCovered = \array_flip($linesToBeCovered[$filename]); $data[$filename] = \array_intersect_key($data[$filename], $_linesToBeCovered); } } private function applyWhitelistFilter(array &$data): void { foreach (\array_keys($data) as $filename) { if ($this->filter->isFiltered($filename)) { unset($data[$filename]); } } } /** * @throws \SebastianBergmann\CodeCoverage\InvalidArgumentException */ private function applyIgnoredLinesFilter(array &$data): void { foreach (\array_keys($data) as $filename) { if (!$this->filter->isFile($filename)) { continue; } foreach ($this->getLinesToBeIgnored($filename) as $line) { unset($data[$filename][$line]); } } } private function initializeFilesThatAreSeenTheFirstTime(array $data): void { foreach ($data as $file => $lines) { if (!isset($this->data[$file]) && $this->filter->isFile($file)) { $this->data[$file] = []; foreach ($lines as $k => $v) { $this->data[$file][$k] = $v === -2 ? null : []; } } } } /** * @throws CoveredCodeNotExecutedException * @throws InvalidArgumentException * @throws MissingCoversAnnotationException * @throws RuntimeException * @throws UnintentionallyCoveredCodeException * @throws \ReflectionException */ private function addUncoveredFilesFromWhitelist(): void { $data = []; $uncoveredFiles = \array_diff( $this->filter->getWhitelist(), \array_keys($this->data) ); foreach ($uncoveredFiles as $uncoveredFile) { if (!\file_exists($uncoveredFile)) { continue; } $data[$uncoveredFile] = []; $lines = \count(\file($uncoveredFile)); for ($i = 1; $i <= $lines; $i++) { $data[$uncoveredFile][$i] = Driver::LINE_NOT_EXECUTED; } } $this->append($data, 'UNCOVERED_FILES_FROM_WHITELIST'); } private function getLinesToBeIgnored(string $fileName): array { if (isset($this->ignoredLines[$fileName])) { return $this->ignoredLines[$fileName]; } try { return $this->getLinesToBeIgnoredInner($fileName); } catch (\OutOfBoundsException $e) { // This can happen with PHP_Token_Stream if the file is syntactically invalid, // and probably affects a file that wasn't executed. return []; } } private function getLinesToBeIgnoredInner(string $fileName): array { $this->ignoredLines[$fileName] = []; $lines = \file($fileName); foreach ($lines as $index => $line) { if (!\trim($line)) { $this->ignoredLines[$fileName][] = $index + 1; } } if ($this->cacheTokens) { $tokens = \PHP_Token_Stream_CachingFactory::get($fileName); } else { $tokens = new \PHP_Token_Stream($fileName); } foreach ($tokens->getInterfaces() as $interface) { $interfaceStartLine = $interface['startLine']; $interfaceEndLine = $interface['endLine']; foreach (\range($interfaceStartLine, $interfaceEndLine) as $line) { $this->ignoredLines[$fileName][] = $line; } } foreach (\array_merge($tokens->getClasses(), $tokens->getTraits()) as $classOrTrait) { $classOrTraitStartLine = $classOrTrait['startLine']; $classOrTraitEndLine = $classOrTrait['endLine']; if (empty($classOrTrait['methods'])) { foreach (\range($classOrTraitStartLine, $classOrTraitEndLine) as $line) { $this->ignoredLines[$fileName][] = $line; } continue; } $firstMethod = \array_shift($classOrTrait['methods']); $firstMethodStartLine = $firstMethod['startLine']; $lastMethodEndLine = $firstMethod['endLine']; do { $lastMethod = \array_pop($classOrTrait['methods']); } while ($lastMethod !== null && 0 === \strpos($lastMethod['signature'], 'anonymousFunction')); if ($lastMethod !== null) { $lastMethodEndLine = $lastMethod['endLine']; } foreach (\range($classOrTraitStartLine, $firstMethodStartLine) as $line) { $this->ignoredLines[$fileName][] = $line; } foreach (\range($lastMethodEndLine + 1, $classOrTraitEndLine) as $line) { $this->ignoredLines[$fileName][] = $line; } } if ($this->disableIgnoredLines) { $this->ignoredLines[$fileName] = \array_unique($this->ignoredLines[$fileName]); \sort($this->ignoredLines[$fileName]); return $this->ignoredLines[$fileName]; } $ignore = false; $stop = false; foreach ($tokens->tokens() as $token) { switch (\get_class($token)) { case \PHP_Token_COMMENT::class: case \PHP_Token_DOC_COMMENT::class: $_token = \trim((string) $token); $_line = \trim($lines[$token->getLine() - 1]); if ($_token === '// @codeCoverageIgnore' || $_token === '//@codeCoverageIgnore') { $ignore = true; $stop = true; } elseif ($_token === '// @codeCoverageIgnoreStart' || $_token === '//@codeCoverageIgnoreStart') { $ignore = true; } elseif ($_token === '// @codeCoverageIgnoreEnd' || $_token === '//@codeCoverageIgnoreEnd') { $stop = true; } if (!$ignore) { $start = $token->getLine(); $end = $start + \substr_count((string) $token, "\n"); // Do not ignore the first line when there is a token // before the comment if (0 !== \strpos($_token, $_line)) { $start++; } for ($i = $start; $i < $end; $i++) { $this->ignoredLines[$fileName][] = $i; } // A DOC_COMMENT token or a COMMENT token starting with "/*" // does not contain the final \n character in its text if (isset($lines[$i - 1]) && 0 === \strpos($_token, '/*') && '*/' === \substr(\trim($lines[$i - 1]), -2)) { $this->ignoredLines[$fileName][] = $i; } } break; case \PHP_Token_INTERFACE::class: case \PHP_Token_TRAIT::class: case \PHP_Token_CLASS::class: case \PHP_Token_FUNCTION::class: /* @var \PHP_Token_Interface $token */ $docblock = (string) $token->getDocblock(); $this->ignoredLines[$fileName][] = $token->getLine(); if (\strpos($docblock, '@codeCoverageIgnore') || ($this->ignoreDeprecatedCode && \strpos($docblock, '@deprecated'))) { $endLine = $token->getEndLine(); for ($i = $token->getLine(); $i <= $endLine; $i++) { $this->ignoredLines[$fileName][] = $i; } } break; /* @noinspection PhpMissingBreakStatementInspection */ case \PHP_Token_NAMESPACE::class: $this->ignoredLines[$fileName][] = $token->getEndLine(); // Intentional fallthrough case \PHP_Token_DECLARE::class: case \PHP_Token_OPEN_TAG::class: case \PHP_Token_CLOSE_TAG::class: case \PHP_Token_USE::class: case \PHP_Token_USE_FUNCTION::class: $this->ignoredLines[$fileName][] = $token->getLine(); break; } if ($ignore) { $this->ignoredLines[$fileName][] = $token->getLine(); if ($stop) { $ignore = false; $stop = false; } } } $this->ignoredLines[$fileName][] = \count($lines) + 1; $this->ignoredLines[$fileName] = \array_unique( $this->ignoredLines[$fileName] ); $this->ignoredLines[$fileName] = \array_unique($this->ignoredLines[$fileName]); \sort($this->ignoredLines[$fileName]); return $this->ignoredLines[$fileName]; } /** * @throws \ReflectionException * @throws UnintentionallyCoveredCodeException */ private function performUnintentionallyCoveredCodeCheck(array &$data, array $linesToBeCovered, array $linesToBeUsed): void { $allowedLines = $this->getAllowedLines( $linesToBeCovered, $linesToBeUsed ); $unintentionallyCoveredUnits = []; foreach ($data as $file => $_data) { foreach ($_data as $line => $flag) { if ($flag === 1 && !isset($allowedLines[$file][$line])) { $unintentionallyCoveredUnits[] = $this->wizard->lookup($file, $line); } } } $unintentionallyCoveredUnits = $this->processUnintentionallyCoveredUnits($unintentionallyCoveredUnits); if (!empty($unintentionallyCoveredUnits)) { throw new UnintentionallyCoveredCodeException( $unintentionallyCoveredUnits ); } } /** * @throws CoveredCodeNotExecutedException */ private function performUnexecutedCoveredCodeCheck(array &$data, array $linesToBeCovered, array $linesToBeUsed): void { $executedCodeUnits = $this->coverageToCodeUnits($data); $message = ''; foreach ($this->linesToCodeUnits($linesToBeCovered) as $codeUnit) { if (!\in_array($codeUnit, $executedCodeUnits)) { $message .= \sprintf( '- %s is expected to be executed (@covers) but was not executed' . "\n", $codeUnit ); } } foreach ($this->linesToCodeUnits($linesToBeUsed) as $codeUnit) { if (!\in_array($codeUnit, $executedCodeUnits)) { $message .= \sprintf( '- %s is expected to be executed (@uses) but was not executed' . "\n", $codeUnit ); } } if (!empty($message)) { throw new CoveredCodeNotExecutedException($message); } } private function getAllowedLines(array $linesToBeCovered, array $linesToBeUsed): array { $allowedLines = []; foreach (\array_keys($linesToBeCovered) as $file) { if (!isset($allowedLines[$file])) { $allowedLines[$file] = []; } $allowedLines[$file] = \array_merge( $allowedLines[$file], $linesToBeCovered[$file] ); } foreach (\array_keys($linesToBeUsed) as $file) { if (!isset($allowedLines[$file])) { $allowedLines[$file] = []; } $allowedLines[$file] = \array_merge( $allowedLines[$file], $linesToBeUsed[$file] ); } foreach (\array_keys($allowedLines) as $file) { $allowedLines[$file] = \array_flip( \array_unique($allowedLines[$file]) ); } return $allowedLines; } /** * @throws RuntimeException */ private function selectDriver(Filter $filter): Driver { $runtime = new Runtime; if ($runtime->hasPHPDBGCodeCoverage()) { return new PHPDBG; } if ($runtime->hasPCOV()) { return new PCOV; } if ($runtime->hasXdebug()) { return new Xdebug($filter); } throw new RuntimeException('No code coverage driver available'); } private function processUnintentionallyCoveredUnits(array $unintentionallyCoveredUnits): array { $unintentionallyCoveredUnits = \array_unique($unintentionallyCoveredUnits); \sort($unintentionallyCoveredUnits); foreach (\array_keys($unintentionallyCoveredUnits) as $k => $v) { $unit = \explode('::', $unintentionallyCoveredUnits[$k]); if (\count($unit) !== 2) { continue; } $class = new \ReflectionClass($unit[0]); foreach ($this->unintentionallyCoveredSubclassesWhitelist as $whitelisted) { if ($class->isSubclassOf($whitelisted)) { unset($unintentionallyCoveredUnits[$k]); break; } } } return \array_values($unintentionallyCoveredUnits); } /** * @throws CoveredCodeNotExecutedException * @throws InvalidArgumentException * @throws MissingCoversAnnotationException * @throws RuntimeException * @throws UnintentionallyCoveredCodeException * @throws \ReflectionException */ private function initializeData(): void { $this->isInitialized = true; if ($this->processUncoveredFilesFromWhitelist) { $this->shouldCheckForDeadAndUnused = false; $this->driver->start(); foreach ($this->filter->getWhitelist() as $file) { if ($this->filter->isFile($file)) { include_once $file; } } $data = []; foreach ($this->driver->stop() as $file => $fileCoverage) { if ($this->filter->isFiltered($file)) { continue; } foreach (\array_keys($fileCoverage) as $key) { if ($fileCoverage[$key] === Driver::LINE_EXECUTED) { $fileCoverage[$key] = Driver::LINE_NOT_EXECUTED; } } $data[$file] = $fileCoverage; } $this->append($data, 'UNCOVERED_FILES_FROM_WHITELIST'); } } private function coverageToCodeUnits(array $data): array { $codeUnits = []; foreach ($data as $filename => $lines) { foreach ($lines as $line => $flag) { if ($flag === 1) { $codeUnits[] = $this->wizard->lookup($filename, $line); } } } return \array_unique($codeUnits); } private function linesToCodeUnits(array $data): array { $codeUnits = []; foreach ($data as $filename => $lines) { foreach ($lines as $line) { $codeUnits[] = $this->wizard->lookup($filename, $line); } } return \array_unique($codeUnits); } } PK!Q©‹†pp\file-manager-advanced/application/svg-sanitizer/includes/phpunit/php-code-coverage/README.mdnu„[µü¤[![Latest Stable Version](https://poser.pugx.org/phpunit/php-code-coverage/v/stable.png)](https://packagist.org/packages/phpunit/php-code-coverage) [![Build Status](https://travis-ci.org/sebastianbergmann/php-code-coverage.svg?branch=master)](https://travis-ci.org/sebastianbergmann/php-code-coverage) # SebastianBergmann\CodeCoverage **SebastianBergmann\CodeCoverage** is a library that provides collection, processing, and rendering functionality for PHP code coverage information. ## Installation You can add this library as a local, per-project dependency to your project using [Composer](https://getcomposer.org/): composer require phpunit/php-code-coverage If you only need this library during development, for instance to run your project's test suite, then you should add it as a development-time dependency: composer require --dev phpunit/php-code-coverage ## Using the SebastianBergmann\CodeCoverage API ```php filter()->addDirectoryToWhitelist('/path/to/src'); $coverage->start(''); // ... $coverage->stop(); $writer = new \SebastianBergmann\CodeCoverage\Report\Clover; $writer->process($coverage, '/tmp/clover.xml'); $writer = new \SebastianBergmann\CodeCoverage\Report\Html\Facade; $writer->process($coverage, '/tmp/code-coverage-report'); ``` PK!˜ØIRZfile-manager-advanced/application/svg-sanitizer/includes/phpunit/php-code-coverage/LICENSEnu„[µü¤php-code-coverage Copyright (c) 2009-2019, Sebastian Bergmann . All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. * Neither the name of Sebastian Bergmann nor the names of his contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. PK! b—Ÿ¸^file-manager-advanced/application/svg-sanitizer/includes/phpunit/php-code-coverage/.travis.ymlnu„[µü¤language: php php: - 7.2 - 7.3 - 7.4snapshot matrix: fast_finish: true env: matrix: - DRIVER="xdebug" DEPENDENCIES="high" - DRIVER="phpdbg" DEPENDENCIES="high" - DRIVER="pcov" DEPENDENCIES="high" - DRIVER="xdebug" DEPENDENCIES="low" - DRIVER="phpdbg" DEPENDENCIES="low" - DRIVER="pcov" DEPENDENCIES="low" global: - DEFAULT_COMPOSER_FLAGS="--no-interaction --no-ansi --no-progress --no-suggest" before_install: - ./tools/composer clear-cache install: - if [[ "$DEPENDENCIES" = 'high' ]]; then travis_retry ./tools/composer update $DEFAULT_COMPOSER_FLAGS; fi - if [[ "$DEPENDENCIES" = 'low' ]]; then travis_retry ./tools/composer update $DEFAULT_COMPOSER_FLAGS --prefer-lowest; fi before_script: - | if [[ "$DRIVER" = 'pcov' ]]; then echo > $HOME/.phpenv/versions/$TRAVIS_PHP_VERSION/etc/conf.d/xdebug.ini git clone --single-branch --branch=v1.0.6 --depth=1 https://github.com/krakjoe/pcov cd pcov phpize ./configure make clean install echo "extension=pcov.so" > $HOME/.phpenv/versions/$TRAVIS_PHP_VERSION/etc/conf.d/pcov.ini cd $TRAVIS_BUILD_DIR fi script: - if [[ "$DRIVER" = 'phpdbg' ]]; then phpdbg -qrr vendor/bin/phpunit --coverage-clover=coverage.xml; fi - if [[ "$DRIVER" != 'phpdbg' ]]; then vendor/bin/phpunit --coverage-clover=coverage.xml; fi after_success: - bash <(curl -s https://codecov.io/bash) notifications: email: false jobs: include: - stage: Static Code Analysis php: 7.3 env: php-cs-fixer install: - phpenv config-rm xdebug.ini script: - ./tools/php-cs-fixer fix --dry-run -v --show-progress=dots --diff-format=udiff PK!’u\b55`file-manager-advanced/application/svg-sanitizer/includes/phpunit/php-token-stream/.gitattributesnu„[µü¤/.github export-ignore /.phive export-ignore /.php_cs.dist export-ignore /.psalm export-ignore /bin export-ignore /build.xml export-ignore /phpunit.xml export-ignore /tests export-ignore /tools export-ignore /tools/* binary *.php diff=php PK!xlÿRââ_file-manager-advanced/application/svg-sanitizer/includes/phpunit/php-token-stream/composer.jsonnu„[µü¤{ "name": "phpunit/php-token-stream", "description": "Wrapper around PHP's tokenizer extension.", "type": "library", "keywords": ["tokenizer"], "homepage": "https://github.com/sebastianbergmann/php-token-stream/", "license": "BSD-3-Clause", "authors": [ { "name": "Sebastian Bergmann", "email": "sebastian@phpunit.de" } ], "support": { "issues": "https://github.com/sebastianbergmann/php-token-stream/issues" }, "prefer-stable": true, "require": { "php": "^7.3 || ^8.0", "ext-tokenizer": "*" }, "require-dev": { "phpunit/phpunit": "^9.0" }, "config": { "platform": { "php": "7.3.0" }, "optimize-autoloader": true, "sort-packages": true }, "autoload": { "classmap": [ "src/" ] }, "extra": { "branch-alias": { "dev-master": "4.0-dev" } } } PK!«sñ†> > ^file-manager-advanced/application/svg-sanitizer/includes/phpunit/php-token-stream/ChangeLog.mdnu„[µü¤# Change Log All notable changes to `sebastianbergmann/php-token-stream` are documented in this file using the [Keep a CHANGELOG](http://keepachangelog.com/) principles. ## [4.0.4] - 2020-08-04 ### Added * Support for `NAME_FULLY_QUALIFIED`, `NAME_QUALIFIED`, and `NAME_RELATIVE` tokens ## [4.0.3] - 2020-06-27 ### Added * This component is now supported on PHP 8 ## [4.0.2] - 2020-06-16 ### Fixed * Fixed backward compatibility breaks introduced in version 4.0.1 ## [4.0.1] - 2020-05-06 ### Fixed * [#93](https://github.com/sebastianbergmann/php-token-stream/issues/93): Class with method that uses anonymous class is not processed correctly ## [4.0.0] - 2020-02-07 ### Removed * This component is no longer supported PHP 7.1 and PHP 7.2 ## [3.1.1] - 2019-09-17 ### Fixed * [#84](https://github.com/sebastianbergmann/php-token-stream/issues/84): Methods named `class` are not handled correctly ## [3.1.0] - 2019-07-25 ### Added * Added support for `FN` and `COALESCE_EQUAL` tokens introduced in PHP 7.4 ## [3.0.2] - 2019-07-08 ### Changed * [#82](https://github.com/sebastianbergmann/php-token-stream/issues/82): Make sure this component works when its classes are prefixed using php-scoper ## [3.0.1] - 2018-10-30 ### Fixed * [#78](https://github.com/sebastianbergmann/php-token-stream/pull/78): `getEndTokenId()` does not handle string-dollar (`"${var}"`) interpolation ## [3.0.0] - 2018-02-01 ### Removed * [#71](https://github.com/sebastianbergmann/php-token-stream/issues/71): Remove code specific to Hack language constructs * [#72](https://github.com/sebastianbergmann/php-token-stream/issues/72): Drop support for PHP 7.0 ## [2.0.2] - 2017-11-27 ### Fixed * [#69](https://github.com/sebastianbergmann/php-token-stream/issues/69): `PHP_Token_USE_FUNCTION` does not serialize correctly ## [2.0.1] - 2017-08-20 ### Fixed * [#68](https://github.com/sebastianbergmann/php-token-stream/issues/68): Method with name `empty` wrongly recognized as anonymous function ## [2.0.0] - 2017-08-03 [4.0.4]: https://github.com/sebastianbergmann/php-token-stream/compare/4.0.3...4.0.4 [4.0.3]: https://github.com/sebastianbergmann/php-token-stream/compare/4.0.2...4.0.3 [4.0.2]: https://github.com/sebastianbergmann/php-token-stream/compare/4.0.1...4.0.2 [4.0.1]: https://github.com/sebastianbergmann/php-token-stream/compare/4.0.0...4.0.1 [4.0.0]: https://github.com/sebastianbergmann/php-token-stream/compare/3.1.1...4.0.0 [3.1.1]: https://github.com/sebastianbergmann/php-token-stream/compare/3.1.0...3.1.1 [3.1.0]: https://github.com/sebastianbergmann/php-token-stream/compare/3.0.2...3.1.0 [3.0.2]: https://github.com/sebastianbergmann/php-token-stream/compare/3.0.1...3.0.2 [3.0.1]: https://github.com/sebastianbergmann/php-token-stream/compare/3.0.0...3.0.1 [3.0.0]: https://github.com/sebastianbergmann/php-token-stream/compare/2.0...3.0.0 [2.0.2]: https://github.com/sebastianbergmann/php-token-stream/compare/2.0.1...2.0.2 [2.0.1]: https://github.com/sebastianbergmann/php-token-stream/compare/2.0.0...2.0.1 [2.0.0]: https://github.com/sebastianbergmann/php-token-stream/compare/1.4.11...2.0.0 PK!90\ 77\file-manager-advanced/application/svg-sanitizer/includes/phpunit/php-token-stream/src/As.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ class PHP_Token_AS extends PHP_Token { } PK!Œ1gL::_file-manager-advanced/application/svg-sanitizer/includes/phpunit/php-token-stream/src/Colon.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ class PHP_Token_COLON extends PHP_Token { } PK!kÅ‚Ú::_file-manager-advanced/application/svg-sanitizer/includes/phpunit/php-token-stream/src/Print.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ class PHP_Token_PRINT extends PHP_Token { } PK!j\æU<<afile-manager-advanced/application/svg-sanitizer/includes/phpunit/php-token-stream/src/Default.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ class PHP_Token_DEFAULT extends PHP_Token { } PK!i�«››ufile-manager-advanced/application/svg-sanitizer/includes/phpunit/php-token-stream/src/TokenWithScopeAndVisibility.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ abstract class PHP_TokenWithScopeAndVisibility extends PHP_TokenWithScope { /** * @return string */ public function getVisibility() { $tokens = $this->tokenStream->tokens(); for ($i = $this->id - 2; $i > $this->id - 7; $i -= 2) { if (isset($tokens[$i]) && ($tokens[$i] instanceof PHP_Token_PRIVATE || $tokens[$i] instanceof PHP_Token_PROTECTED || $tokens[$i] instanceof PHP_Token_PUBLIC)) { return \strtolower( \str_replace('PHP_Token_', '', PHP_Token_Util::getClass($tokens[$i])) ); } if (isset($tokens[$i]) && !($tokens[$i] instanceof PHP_Token_STATIC || $tokens[$i] instanceof PHP_Token_FINAL || $tokens[$i] instanceof PHP_Token_ABSTRACT)) { // no keywords; stop visibility search break; } } } /** * @return string */ public function getKeywords() { $keywords = []; $tokens = $this->tokenStream->tokens(); for ($i = $this->id - 2; $i > $this->id - 7; $i -= 2) { if (isset($tokens[$i]) && ($tokens[$i] instanceof PHP_Token_PRIVATE || $tokens[$i] instanceof PHP_Token_PROTECTED || $tokens[$i] instanceof PHP_Token_PUBLIC)) { continue; } if (isset($tokens[$i]) && ($tokens[$i] instanceof PHP_Token_STATIC || $tokens[$i] instanceof PHP_Token_FINAL || $tokens[$i] instanceof PHP_Token_ABSTRACT)) { $keywords[] = \strtolower( \str_replace('PHP_Token_', '', PHP_Token_Util::getClass($tokens[$i])) ); } } return \implode(',', $keywords); } } PK!ÖŸT?@@dfile-manager-advanced/application/svg-sanitizer/includes/phpunit/php-token-stream/src/DoubleCast.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ class PHP_Token_DOUBLE_CAST extends PHP_Token { } PK!]XqD??cfile-manager-advanced/application/svg-sanitizer/includes/phpunit/php-token-stream/src/UnsetCast.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ class PHP_Token_UNSET_CAST extends PHP_Token { } PK!µr“=99^file-manager-advanced/application/svg-sanitizer/includes/phpunit/php-token-stream/src/Case.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ class PHP_Token_CASE extends PHP_Token { } PK!&–GÞ99^file-manager-advanced/application/svg-sanitizer/includes/phpunit/php-token-stream/src/Echo.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ class PHP_Token_ECHO extends PHP_Token { } PK!¥gPU>>cfile-manager-advanced/application/svg-sanitizer/includes/phpunit/php-token-stream/src/Ampersand.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ class PHP_Token_AMPERSAND extends PHP_Token { } PK!I™ú—==bfile-manager-advanced/application/svg-sanitizer/includes/phpunit/php-token-stream/src/Ellipsis.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ class PHP_Token_ELLIPSIS extends PHP_Token { } PK!jtI+77\file-manager-advanced/application/svg-sanitizer/includes/phpunit/php-token-stream/src/Fn.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ class PHP_Token_FN extends PHP_Token { } PK!ëX× ??dfile-manager-advanced/application/svg-sanitizer/includes/phpunit/php-token-stream/src/Whitespace.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ class PHP_Token_WHITESPACE extends PHP_Token { } PK!ÔVMHHjfile-manager-advanced/application/svg-sanitizer/includes/phpunit/php-token-stream/src/IsGreaterOrEqual.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ class PHP_Token_IS_GREATER_OR_EQUAL extends PHP_Token { } PK!°ë6ëCCgfile-manager-advanced/application/svg-sanitizer/includes/phpunit/php-token-stream/src/CoalesceEqual.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ class PHP_Token_COALESCE_EQUAL extends PHP_Token { } PK!GLª::_file-manager-advanced/application/svg-sanitizer/includes/phpunit/php-token-stream/src/Catch.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ class PHP_Token_CATCH extends PHP_Token { } PK!½Mõ==afile-manager-advanced/application/svg-sanitizer/includes/phpunit/php-token-stream/src/OrEqual.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ class PHP_Token_OR_EQUAL extends PHP_Token { } PK!ãÚË7++cfile-manager-advanced/application/svg-sanitizer/includes/phpunit/php-token-stream/src/Namespace.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ class PHP_Token_NAMESPACE extends PHP_TokenWithScope { /** * @return string */ public function getName() { $tokens = $this->tokenStream->tokens(); $namespace = (string) $tokens[$this->id + 2]; for ($i = $this->id + 3;; $i += 2) { if (isset($tokens[$i]) && $tokens[$i] instanceof PHP_Token_NS_SEPARATOR) { $namespace .= '\\' . $tokens[$i + 1]; } else { break; } } return $namespace; } } PK!õ±ÙÁ88]file-manager-advanced/application/svg-sanitizer/includes/phpunit/php-token-stream/src/Try.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ class PHP_Token_TRY extends PHP_Token { } PK!’Œû]BBffile-manager-advanced/application/svg-sanitizer/includes/phpunit/php-token-stream/src/StartHeredoc.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ class PHP_Token_START_HEREDOC extends PHP_Token { } PK!š£®N::_file-manager-advanced/application/svg-sanitizer/includes/phpunit/php-token-stream/src/Empty.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ class PHP_Token_EMPTY extends PHP_Token { } PK!�dQ–>>cfile-manager-advanced/application/svg-sanitizer/includes/phpunit/php-token-stream/src/Character.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ class PHP_Token_CHARACTER extends PHP_Token { } PK!ÌåÓŠEEhfile-manager-advanced/application/svg-sanitizer/includes/phpunit/php-token-stream/src/IsNotIdentical.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ class PHP_Token_IS_NOT_IDENTICAL extends PHP_Token { } PK!Ë'77\file-manager-advanced/application/svg-sanitizer/includes/phpunit/php-token-stream/src/If.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ class PHP_Token_IF extends PHP_Token { } PK!é'W£88]file-manager-advanced/application/svg-sanitizer/includes/phpunit/php-token-stream/src/Pow.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ class PHP_Token_POW extends PHP_Token { } PK! L·îAAefile-manager-advanced/application/svg-sanitizer/includes/phpunit/php-token-stream/src/CloseSquare.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ class PHP_Token_CLOSE_SQUARE extends PHP_Token { } PK!c‰C/CCgfile-manager-advanced/application/svg-sanitizer/includes/phpunit/php-token-stream/src/StringVarname.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ class PHP_Token_STRING_VARNAME extends PHP_Token { } PK!`W3T}H}H`file-manager-advanced/application/svg-sanitizer/includes/phpunit/php-token-stream/src/Stream.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ class PHP_Token_Stream implements ArrayAccess, Countable, SeekableIterator { /** * @var array> */ protected static $customTokens = [ '(' => PHP_Token_OPEN_BRACKET::class, ')' => PHP_Token_CLOSE_BRACKET::class, '[' => PHP_Token_OPEN_SQUARE::class, ']' => PHP_Token_CLOSE_SQUARE::class, '{' => PHP_Token_OPEN_CURLY::class, '}' => PHP_Token_CLOSE_CURLY::class, ';' => PHP_Token_SEMICOLON::class, '.' => PHP_Token_DOT::class, ',' => PHP_Token_COMMA::class, '=' => PHP_Token_EQUAL::class, '<' => PHP_Token_LT::class, '>' => PHP_Token_GT::class, '+' => PHP_Token_PLUS::class, '-' => PHP_Token_MINUS::class, '*' => PHP_Token_MULT::class, '/' => PHP_Token_DIV::class, '?' => PHP_Token_QUESTION_MARK::class, '!' => PHP_Token_EXCLAMATION_MARK::class, ':' => PHP_Token_COLON::class, '"' => PHP_Token_DOUBLE_QUOTES::class, '@' => PHP_Token_AT::class, '&' => PHP_Token_AMPERSAND::class, '%' => PHP_Token_PERCENT::class, '|' => PHP_Token_PIPE::class, '$' => PHP_Token_DOLLAR::class, '^' => PHP_Token_CARET::class, '~' => PHP_Token_TILDE::class, '`' => PHP_Token_BACKTICK::class, ]; /** * @var string */ protected $filename; /** * @var array */ protected $tokens = []; /** * @var array */ protected $tokensByLine = []; /** * @var int */ protected $position = 0; /** * @var array */ protected $linesOfCode = ['loc' => 0, 'cloc' => 0, 'ncloc' => 0]; /** * @var array */ protected $classes; /** * @var array */ protected $functions; /** * @var array */ protected $includes; /** * @var array */ protected $interfaces; /** * @var array */ protected $traits; /** * @var array */ protected $lineToFunctionMap = []; /** * Constructor. * * @param string $sourceCode */ public function __construct($sourceCode) { if (\is_file($sourceCode)) { $this->filename = $sourceCode; $sourceCode = \file_get_contents($sourceCode); } $this->scan($sourceCode); } /** * Destructor. */ public function __destruct() { $this->tokens = []; $this->tokensByLine = []; } /** * @return string */ public function __toString() { $buffer = ''; foreach ($this as $token) { $buffer .= $token; } return $buffer; } /** * @return string */ public function getFilename() { return $this->filename; } /** * @return int */ public function count() { return \count($this->tokens); } /** * @return PHP_Token[] */ public function tokens() { return $this->tokens; } /** * @return array */ public function getClasses() { if ($this->classes !== null) { return $this->classes; } $this->parse(); return $this->classes; } /** * @return array */ public function getFunctions() { if ($this->functions !== null) { return $this->functions; } $this->parse(); return $this->functions; } /** * @return array */ public function getInterfaces() { if ($this->interfaces !== null) { return $this->interfaces; } $this->parse(); return $this->interfaces; } /** * @return array */ public function getTraits() { if ($this->traits !== null) { return $this->traits; } $this->parse(); return $this->traits; } /** * Gets the names of all files that have been included * using include(), include_once(), require() or require_once(). * * Parameter $categorize set to TRUE causing this function to return a * multi-dimensional array with categories in the keys of the first dimension * and constants and their values in the second dimension. * * Parameter $category allow to filter following specific inclusion type * * @param bool $categorize OPTIONAL * @param string $category OPTIONAL Either 'require_once', 'require', * 'include_once', 'include' * * @return array */ public function getIncludes($categorize = false, $category = null) { if ($this->includes === null) { $this->includes = [ 'require_once' => [], 'require' => [], 'include_once' => [], 'include' => [], ]; foreach ($this->tokens as $token) { switch (\get_class($token)) { case PHP_Token_REQUIRE_ONCE::class: case PHP_Token_REQUIRE::class: case PHP_Token_INCLUDE_ONCE::class: case PHP_Token_INCLUDE::class: $this->includes[$token->getType()][] = $token->getName(); break; } } } if (isset($this->includes[$category])) { $includes = $this->includes[$category]; } elseif ($categorize === false) { $includes = \array_merge( $this->includes['require_once'], $this->includes['require'], $this->includes['include_once'], $this->includes['include'] ); } else { $includes = $this->includes; } return $includes; } /** * Returns the name of the function or method a line belongs to. * * @return string or null if the line is not in a function or method */ public function getFunctionForLine($line) { $this->parse(); if (isset($this->lineToFunctionMap[$line])) { return $this->lineToFunctionMap[$line]; } } /** * @return array */ public function getLinesOfCode() { return $this->linesOfCode; } public function rewind()/*: void*/ { $this->position = 0; } /** * @return bool */ public function valid() { return isset($this->tokens[$this->position]); } /** * @return int */ public function key() { return $this->position; } /** * @return PHP_Token */ public function current() { return $this->tokens[$this->position]; } public function next()/*: void*/ { $this->position++; } /** * @param int $offset * * @return bool */ public function offsetExists($offset) { return isset($this->tokens[$offset]); } /** * @param int $offset * * @throws OutOfBoundsException */ public function offsetGet($offset) { if (!$this->offsetExists($offset)) { throw new OutOfBoundsException( \sprintf( 'No token at position "%s"', $offset ) ); } return $this->tokens[$offset]; } /** * @param int $offset */ public function offsetSet($offset, $value)/*: void*/ { $this->tokens[$offset] = $value; } /** * @param int $offset * * @throws OutOfBoundsException */ public function offsetUnset($offset)/*: void*/ { if (!$this->offsetExists($offset)) { throw new OutOfBoundsException( \sprintf( 'No token at position "%s"', $offset ) ); } unset($this->tokens[$offset]); } /** * Seek to an absolute position. * * @param int $position * * @throws OutOfBoundsException */ public function seek($position)/*: void*/ { $this->position = $position; if (!$this->valid()) { throw new OutOfBoundsException( \sprintf( 'No token at position "%s"', $this->position ) ); } } /** * Scans the source for sequences of characters and converts them into a * stream of tokens. * * @param string $sourceCode */ protected function scan($sourceCode)/*: void*/ { $id = 0; $line = 1; $tokens = \token_get_all($sourceCode); $numTokens = \count($tokens); $lastNonWhitespaceTokenWasDoubleColon = false; $name = null; for ($i = 0; $i < $numTokens; ++$i) { $token = $tokens[$i]; $skip = 0; if (\is_array($token)) { $name = \substr(\token_name($token[0]), 2); $text = $token[1]; if ($lastNonWhitespaceTokenWasDoubleColon && $name == 'CLASS') { $name = 'CLASS_NAME_CONSTANT'; } elseif ($name == 'USE' && isset($tokens[$i + 2][0]) && $tokens[$i + 2][0] == \T_FUNCTION) { $name = 'USE_FUNCTION'; $text .= $tokens[$i + 1][1] . $tokens[$i + 2][1]; $skip = 2; } /** @var class-string $tokenClass */ $tokenClass = 'PHP_Token_' . $name; } else { $text = $token; $tokenClass = self::$customTokens[$token]; } /* * @see https://github.com/sebastianbergmann/php-token-stream/issues/95 */ if (PHP_MAJOR_VERSION >= 8 && $name === 'WHITESPACE' && // Current token is T_WHITESPACE isset($this->tokens[$id - 1]) && // Current token is not the first token $this->tokens[$id - 1] instanceof PHP_Token_COMMENT && // Previous token is T_COMMENT strpos((string) $this->tokens[$id - 1], '/*') === false && // Previous token is comment that starts with '#' or '//' strpos($text, "\n") === 0 // Text of current token begins with newline ) { $this->tokens[$id - 1] = new PHP_Token_COMMENT( $this->tokens[$id - 1] . "\n", $this->tokens[$id - 1]->getLine(), $this, $id - 1 ); $text = substr($text, 1); $line++; if (empty($text)) { continue; } } if (!isset($this->tokensByLine[$line])) { $this->tokensByLine[$line] = []; } $token = new $tokenClass($text, $line, $this, $id++); $this->tokens[] = $token; $this->tokensByLine[$line][] = $token; $line += \substr_count($text, "\n"); if ($tokenClass == PHP_Token_HALT_COMPILER::class) { break; } if ($name == 'DOUBLE_COLON') { $lastNonWhitespaceTokenWasDoubleColon = true; } elseif ($name != 'WHITESPACE') { $lastNonWhitespaceTokenWasDoubleColon = false; } $i += $skip; } foreach ($this->tokens as $token) { if (!$token instanceof PHP_Token_COMMENT && !$token instanceof PHP_Token_DOC_COMMENT) { continue; } foreach ($this->tokensByLine[$token->getLine()] as $_token) { if (!$_token instanceof PHP_Token_COMMENT && !$_token instanceof PHP_Token_DOC_COMMENT && !$_token instanceof PHP_Token_WHITESPACE) { continue 2; } } $this->linesOfCode['cloc'] += max(1, \substr_count((string) $token, "\n")); } $this->linesOfCode['loc'] = \substr_count($sourceCode, "\n"); $this->linesOfCode['ncloc'] = $this->linesOfCode['loc'] - $this->linesOfCode['cloc']; } protected function parse()/*: void*/ { $this->interfaces = []; $this->classes = []; $this->traits = []; $this->functions = []; $class = []; $classEndLine = []; $trait = false; $traitEndLine = false; $interface = false; $interfaceEndLine = false; foreach ($this->tokens as $token) { switch (\get_class($token)) { case PHP_Token_HALT_COMPILER::class: return; case PHP_Token_INTERFACE::class: $interface = $token->getName(); $interfaceEndLine = $token->getEndLine(); $this->interfaces[$interface] = [ 'methods' => [], 'parent' => $token->getParent(), 'keywords' => $token->getKeywords(), 'docblock' => $token->getDocblock(), 'startLine' => $token->getLine(), 'endLine' => $interfaceEndLine, 'package' => $token->getPackage(), 'file' => $this->filename, ]; break; case PHP_Token_CLASS::class: case PHP_Token_TRAIT::class: $tmp = [ 'methods' => [], 'parent' => $token->getParent(), 'interfaces'=> $token->getInterfaces(), 'keywords' => $token->getKeywords(), 'docblock' => $token->getDocblock(), 'startLine' => $token->getLine(), 'endLine' => $token->getEndLine(), 'package' => $token->getPackage(), 'file' => $this->filename, ]; if ($token instanceof PHP_Token_CLASS) { $class[] = $token->getName(); $classEndLine[] = $token->getEndLine(); if ($token->getName() !== null) { $this->classes[$class[\count($class) - 1]] = $tmp; } } else { $trait = $token->getName(); $traitEndLine = $token->getEndLine(); $this->traits[$trait] = $tmp; } break; case PHP_Token_FUNCTION::class: $name = $token->getName(); $tmp = [ 'docblock' => $token->getDocblock(), 'keywords' => $token->getKeywords(), 'visibility'=> $token->getVisibility(), 'signature' => $token->getSignature(), 'startLine' => $token->getLine(), 'endLine' => $token->getEndLine(), 'ccn' => $token->getCCN(), 'file' => $this->filename, ]; if (empty($class) && $trait === false && $interface === false) { $this->functions[$name] = $tmp; $this->addFunctionToMap( $name, $tmp['startLine'], $tmp['endLine'] ); } elseif (!empty($class)) { if ($class[\count($class) - 1] !== null) { $this->classes[$class[\count($class) - 1]]['methods'][$name] = $tmp; $this->addFunctionToMap( $class[\count($class) - 1] . '::' . $name, $tmp['startLine'], $tmp['endLine'] ); } } elseif ($trait !== false) { $this->traits[$trait]['methods'][$name] = $tmp; $this->addFunctionToMap( $trait . '::' . $name, $tmp['startLine'], $tmp['endLine'] ); } else { $this->interfaces[$interface]['methods'][$name] = $tmp; } break; case PHP_Token_CLOSE_CURLY::class: if (!empty($classEndLine) && $classEndLine[\count($classEndLine) - 1] == $token->getLine()) { \array_pop($classEndLine); \array_pop($class); } elseif ($traitEndLine !== false && $traitEndLine == $token->getLine()) { $trait = false; $traitEndLine = false; } elseif ($interfaceEndLine !== false && $interfaceEndLine == $token->getLine()) { $interface = false; $interfaceEndLine = false; } break; } } } /** * @param string $name * @param int $startLine * @param int $endLine */ private function addFunctionToMap($name, $startLine, $endLine): void { for ($line = $startLine; $line <= $endLine; $line++) { $this->lineToFunctionMap[$line] = $name; } } } PK!a µ==bfile-manager-advanced/application/svg-sanitizer/includes/phpunit/php-token-stream/src/Endwhile.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ class PHP_Token_ENDWHILE extends PHP_Token { } PK!Ó ôAAefile-manager-advanced/application/svg-sanitizer/includes/phpunit/php-token-stream/src/DoubleArrow.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ class PHP_Token_DOUBLE_ARROW extends PHP_Token { } PK!—üùï::_file-manager-advanced/application/svg-sanitizer/includes/phpunit/php-token-stream/src/Equal.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ class PHP_Token_EQUAL extends PHP_Token { } PK!Û„!×MMofile-manager-advanced/application/svg-sanitizer/includes/phpunit/php-token-stream/src/DollarOpenCurlyBraces.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ class PHP_Token_DOLLAR_OPEN_CURLY_BRACES extends PHP_Token { } PK!ß×ï¢??cfile-manager-advanced/application/svg-sanitizer/includes/phpunit/php-token-stream/src/LogicalOr.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ class PHP_Token_LOGICAL_OR extends PHP_Token { } PK!J¦q°MMpfile-manager-advanced/application/svg-sanitizer/includes/phpunit/php-token-stream/src/ConstantEncapsedString.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ class PHP_Token_CONSTANT_ENCAPSED_STRING extends PHP_Token { } PK!ø,}ï==afile-manager-advanced/application/svg-sanitizer/includes/phpunit/php-token-stream/src/IsEqual.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ class PHP_Token_IS_EQUAL extends PHP_Token { } PK!÷Ø~øIImfile-manager-advanced/application/svg-sanitizer/includes/phpunit/php-token-stream/src/PaamayimNekudotayim.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ class PHP_Token_PAAMAYIM_NEKUDOTAYIM extends PHP_Token { } PK!”ïxª>>cfile-manager-advanced/application/svg-sanitizer/includes/phpunit/php-token-stream/src/Semicolon.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ class PHP_Token_SEMICOLON extends PHP_Token { } PK!é¾»S<<`file-manager-advanced/application/svg-sanitizer/includes/phpunit/php-token-stream/src/TraitC.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ class PHP_Token_TRAIT_C extends PHP_Token { } PK!h.}‚HHkfile-manager-advanced/application/svg-sanitizer/includes/phpunit/php-token-stream/src/ClassNameConstant.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ class PHP_Token_CLASS_NAME_CONSTANT extends PHP_Token { } PK!¯§É‡??cfile-manager-advanced/application/svg-sanitizer/includes/phpunit/php-token-stream/src/NumString.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ class PHP_Token_NUM_STRING extends PHP_Token { } PK!H­�ôôcfile-manager-advanced/application/svg-sanitizer/includes/phpunit/php-token-stream/src/Interface.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ class PHP_Token_INTERFACE extends PHP_TokenWithScopeAndVisibility { /** * @var array */ protected $interfaces; /** * @return string */ public function getName() { return (string) $this->tokenStream[$this->id + 2]; } /** * @return bool */ public function hasParent() { return $this->tokenStream[$this->id + 4] instanceof PHP_Token_EXTENDS; } /** * @return array */ public function getPackage() { $result = [ 'namespace' => '', 'fullPackage' => '', 'category' => '', 'package' => '', 'subpackage' => '', ]; $docComment = $this->getDocblock(); $className = $this->getName(); for ($i = $this->id; $i; --$i) { if ($this->tokenStream[$i] instanceof PHP_Token_NAMESPACE) { $result['namespace'] = $this->tokenStream[$i]->getName(); break; } } if ($docComment === null) { return $result; } if (\preg_match('/@category[\s]+([\.\w]+)/', $docComment, $matches)) { $result['category'] = $matches[1]; } if (\preg_match('/@package[\s]+([\.\w]+)/', $docComment, $matches)) { $result['package'] = $matches[1]; $result['fullPackage'] = $matches[1]; } if (\preg_match('/@subpackage[\s]+([\.\w]+)/', $docComment, $matches)) { $result['subpackage'] = $matches[1]; $result['fullPackage'] .= '.' . $matches[1]; } if (empty($result['fullPackage'])) { $result['fullPackage'] = $this->arrayToName( \explode('_', \str_replace('\\', '_', $className)), '.' ); } return $result; } /** * @return bool|string */ public function getParent() { if (!$this->hasParent()) { return false; } $i = $this->id + 6; $tokens = $this->tokenStream->tokens(); $className = (string) $tokens[$i]; while (isset($tokens[$i + 1]) && !$tokens[$i + 1] instanceof PHP_Token_WHITESPACE) { $className .= (string) $tokens[++$i]; } return $className; } /** * @return bool */ public function hasInterfaces() { return (isset($this->tokenStream[$this->id + 4]) && $this->tokenStream[$this->id + 4] instanceof PHP_Token_IMPLEMENTS) || (isset($this->tokenStream[$this->id + 8]) && $this->tokenStream[$this->id + 8] instanceof PHP_Token_IMPLEMENTS); } /** * @return array|bool */ public function getInterfaces() { if ($this->interfaces !== null) { return $this->interfaces; } if (!$this->hasInterfaces()) { return $this->interfaces = false; } if ($this->tokenStream[$this->id + 4] instanceof PHP_Token_IMPLEMENTS) { $i = $this->id + 3; } else { $i = $this->id + 7; } $tokens = $this->tokenStream->tokens(); while (!$tokens[$i + 1] instanceof PHP_Token_OPEN_CURLY) { $i++; if ($tokens[$i] instanceof PHP_Token_STRING) { $this->interfaces[] = (string) $tokens[$i]; } } return $this->interfaces; } /** * @param string $join * * @return string */ protected function arrayToName(array $parts, $join = '\\') { $result = ''; if (\count($parts) > 1) { \array_pop($parts); $result = \implode($join, $parts); } return $result; } } PK!ÞLYŠEEafile-manager-advanced/application/svg-sanitizer/includes/phpunit/php-token-stream/src/Include.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ class PHP_Token_INCLUDE extends PHP_Token_Includes { } PK!,„ž%??cfile-manager-advanced/application/svg-sanitizer/includes/phpunit/php-token-stream/src/CurlyOpen.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ class PHP_Token_CURLY_OPEN extends PHP_Token { } PK!Sý|::_file-manager-advanced/application/svg-sanitizer/includes/phpunit/php-token-stream/src/Final.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ class PHP_Token_FINAL extends PHP_Token { } PK!'Y¨Ë::_file-manager-advanced/application/svg-sanitizer/includes/phpunit/php-token-stream/src/Endif.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ class PHP_Token_ENDIF extends PHP_Token { } PK!%ã{ÏAAdfile-manager-advanced/application/svg-sanitizer/includes/phpunit/php-token-stream/src/IsNotEqual.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ class PHP_Token_IS_NOT_EQUAL extends PHP_Token { } PK!¸áû>>bfile-manager-advanced/application/svg-sanitizer/includes/phpunit/php-token-stream/src/DivEqual.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ class PHP_Token_DIV_EQUAL extends PHP_Token { } PK!‰�lAAefile-manager-advanced/application/svg-sanitizer/includes/phpunit/php-token-stream/src/NsSeparator.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ class PHP_Token_NS_SEPARATOR extends PHP_Token { } PK!^~›Ê==bfile-manager-advanced/application/svg-sanitizer/includes/phpunit/php-token-stream/src/Variable.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ class PHP_Token_VARIABLE extends PHP_Token { } PK!@œP::_file-manager-advanced/application/svg-sanitizer/includes/phpunit/php-token-stream/src/Isset.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ class PHP_Token_ISSET extends PHP_Token { } PK!Õ£†99^file-manager-advanced/application/svg-sanitizer/includes/phpunit/php-token-stream/src/List.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ class PHP_Token_LIST extends PHP_Token { } PK!‡7Í??dfile-manager-advanced/application/svg-sanitizer/includes/phpunit/php-token-stream/src/Instanceof.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ class PHP_Token_INSTANCEOF extends PHP_Token { } PK!'®½}@@dfile-manager-advanced/application/svg-sanitizer/includes/phpunit/php-token-stream/src/CloseCurly.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ class PHP_Token_CLOSE_CURLY extends PHP_Token { } PK!Ìo·°99^file-manager-advanced/application/svg-sanitizer/includes/phpunit/php-token-stream/src/Pipe.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ class PHP_Token_PIPE extends PHP_Token { } PK!®ý€6??cfile-manager-advanced/application/svg-sanitizer/includes/phpunit/php-token-stream/src/PlusEqual.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ class PHP_Token_PLUS_EQUAL extends PHP_Token { } PK!Öå/)BBffile-manager-advanced/application/svg-sanitizer/includes/phpunit/php-token-stream/src/CloseBracket.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ class PHP_Token_CLOSE_BRACKET extends PHP_Token { } PK!ãqBeAAefile-manager-advanced/application/svg-sanitizer/includes/phpunit/php-token-stream/src/DoubleColon.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ class PHP_Token_DOUBLE_COLON extends PHP_Token { } PK!gC�{88]file-manager-advanced/application/svg-sanitizer/includes/phpunit/php-token-stream/src/Dot.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ class PHP_Token_DOT extends PHP_Token { } PK!‹þ­D@@dfile-manager-advanced/application/svg-sanitizer/includes/phpunit/php-token-stream/src/DocComment.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ class PHP_Token_DOC_COMMENT extends PHP_Token { } PK!–ƒ-¶<<`file-manager-advanced/application/svg-sanitizer/includes/phpunit/php-token-stream/src/ClassC.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ class PHP_Token_CLASS_C extends PHP_Token { } PK!Bxc÷@@dfile-manager-advanced/application/svg-sanitizer/includes/phpunit/php-token-stream/src/InlineHtml.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ class PHP_Token_INLINE_HTML extends PHP_Token { } PK!äkUI>>cfile-manager-advanced/application/svg-sanitizer/includes/phpunit/php-token-stream/src/Endswitch.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ class PHP_Token_ENDSWITCH extends PHP_Token { } PK!9)AAefile-manager-advanced/application/svg-sanitizer/includes/phpunit/php-token-stream/src/UseFunction.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ class PHP_Token_USE_FUNCTION extends PHP_Token { } PK!v9Ÿß88]file-manager-advanced/application/svg-sanitizer/includes/phpunit/php-token-stream/src/New.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ class PHP_Token_NEW extends PHP_Token { } PK!2´¸;;`file-manager-advanced/application/svg-sanitizer/includes/phpunit/php-token-stream/src/Public.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ class PHP_Token_PUBLIC extends PHP_Token { } PK!(Ð;;`file-manager-advanced/application/svg-sanitizer/includes/phpunit/php-token-stream/src/Dollar.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ class PHP_Token_DOLLAR extends PHP_Token { } PK!µ,iÙ??dfile-manager-advanced/application/svg-sanitizer/includes/phpunit/php-token-stream/src/Enddeclare.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ class PHP_Token_ENDDECLARE extends PHP_Token { } PK!�º Ø::_file-manager-advanced/application/svg-sanitizer/includes/phpunit/php-token-stream/src/Comma.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ class PHP_Token_COMMA extends PHP_Token { } PK!²X«Ç>>bfile-manager-advanced/application/svg-sanitizer/includes/phpunit/php-token-stream/src/ModEqual.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ class PHP_Token_MOD_EQUAL extends PHP_Token { } PK!I¸ÉÝBBffile-manager-advanced/application/svg-sanitizer/includes/phpunit/php-token-stream/src/NameRelative.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ class PHP_Token_NAME_RELATIVE extends PHP_Token { } PK!ë1ˆxCCgfile-manager-advanced/application/svg-sanitizer/includes/phpunit/php-token-stream/src/NameQualified.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ class PHP_Token_NAME_QUALIFIED extends PHP_Token { } PK!¨i¢(;;`file-manager-advanced/application/svg-sanitizer/includes/phpunit/php-token-stream/src/String.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ class PHP_Token_STRING extends PHP_Token { } PK!é_ £>>bfile-manager-advanced/application/svg-sanitizer/includes/phpunit/php-token-stream/src/XorEqual.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ class PHP_Token_XOR_EQUAL extends PHP_Token { } PK!LƤ[@@dfile-manager-advanced/application/svg-sanitizer/includes/phpunit/php-token-stream/src/OpenSquare.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ class PHP_Token_OPEN_SQUARE extends PHP_Token { } PK!ºþ�|::_file-manager-advanced/application/svg-sanitizer/includes/phpunit/php-token-stream/src/Tilde.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ class PHP_Token_TILDE extends PHP_Token { } PK!|g;Ý99^file-manager-advanced/application/svg-sanitizer/includes/phpunit/php-token-stream/src/File.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ class PHP_Token_FILE extends PHP_Token { } PK!œ€˜*@@dfile-manager-advanced/application/svg-sanitizer/includes/phpunit/php-token-stream/src/ObjectCast.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ class PHP_Token_OBJECT_CAST extends PHP_Token { } PK!§È)>>cfile-manager-advanced/application/svg-sanitizer/includes/phpunit/php-token-stream/src/Insteadof.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ class PHP_Token_INSTEADOF extends PHP_Token { } PK!ï -¸??dfile-manager-advanced/application/svg-sanitizer/includes/phpunit/php-token-stream/src/Endforeach.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ class PHP_Token_ENDFOREACH extends PHP_Token { } PK!XZøÞ88]file-manager-advanced/application/svg-sanitizer/includes/phpunit/php-token-stream/src/For.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ class PHP_Token_FOR extends PHP_Token { } PK!ÊÕ“W==afile-manager-advanced/application/svg-sanitizer/includes/phpunit/php-token-stream/src/SrEqual.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ class PHP_Token_SR_EQUAL extends PHP_Token { } PK!Z‡A(AAefile-manager-advanced/application/svg-sanitizer/includes/phpunit/php-token-stream/src/OpenBracket.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ class PHP_Token_OPEN_BRACKET extends PHP_Token { } PK!×€Ó::_file-manager-advanced/application/svg-sanitizer/includes/phpunit/php-token-stream/src/Unset.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ class PHP_Token_UNSET extends PHP_Token { } PK!3ûø²;;_file-manager-advanced/application/svg-sanitizer/includes/phpunit/php-token-stream/src/FuncC.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ class PHP_Token_FUNC_C extends PHP_Token { } PK!äåCó99^file-manager-advanced/application/svg-sanitizer/includes/phpunit/php-token-stream/src/Goto.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ class PHP_Token_GOTO extends PHP_Token { } PK!—h„ÆEEafile-manager-advanced/application/svg-sanitizer/includes/phpunit/php-token-stream/src/Require.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ class PHP_Token_REQUIRE extends PHP_Token_Includes { } PK!Œ)Н==bfile-manager-advanced/application/svg-sanitizer/includes/phpunit/php-token-stream/src/Callable.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ class PHP_Token_CALLABLE extends PHP_Token { } PK!�­‘<<afile-manager-advanced/application/svg-sanitizer/includes/phpunit/php-token-stream/src/Comment.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ class PHP_Token_COMMENT extends PHP_Token { } PK!CÚ1::_file-manager-advanced/application/svg-sanitizer/includes/phpunit/php-token-stream/src/Array.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ class PHP_Token_ARRAY extends PHP_Token { } PK!‰\S{>>bfile-manager-advanced/application/svg-sanitizer/includes/phpunit/php-token-stream/src/MulEqual.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ class PHP_Token_MUL_EQUAL extends PHP_Token { } PK!ýý´/<<afile-manager-advanced/application/svg-sanitizer/includes/phpunit/php-token-stream/src/Private.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ class PHP_Token_PRIVATE extends PHP_Token { } PK!€bJi::_file-manager-advanced/application/svg-sanitizer/includes/phpunit/php-token-stream/src/Yield.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ class PHP_Token_YIELD extends PHP_Token { } PK!Ò+):::_file-manager-advanced/application/svg-sanitizer/includes/phpunit/php-token-stream/src/Caret.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ class PHP_Token_CARET extends PHP_Token { } PK!èkŸú77\file-manager-advanced/application/svg-sanitizer/includes/phpunit/php-token-stream/src/Gt.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ class PHP_Token_GT extends PHP_Token { } PK!Œfhè>>bfile-manager-advanced/application/svg-sanitizer/includes/phpunit/php-token-stream/src/CloseTag.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ class PHP_Token_CLOSE_TAG extends PHP_Token { } PK!€5½ÔAAefile-manager-advanced/application/svg-sanitizer/includes/phpunit/php-token-stream/src/ConcatEqual.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ class PHP_Token_CONCAT_EQUAL extends PHP_Token { } PK!7 :77\file-manager-advanced/application/svg-sanitizer/includes/phpunit/php-token-stream/src/Do.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ class PHP_Token_DO extends PHP_Token { } PK!mxœ[LLofile-manager-advanced/application/svg-sanitizer/includes/phpunit/php-token-stream/src/EncapsedAndWhitespace.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ class PHP_Token_ENCAPSED_AND_WHITESPACE extends PHP_Token { } PK!vê´Ç??dfile-manager-advanced/application/svg-sanitizer/includes/phpunit/php-token-stream/src/Implements.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ class PHP_Token_IMPLEMENTS extends PHP_Token { } PK!†Wh99^file-manager-advanced/application/svg-sanitizer/includes/phpunit/php-token-stream/src/Eval.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ class PHP_Token_EVAL extends PHP_Token { } PK!ýëXL::_file-manager-advanced/application/svg-sanitizer/includes/phpunit/php-token-stream/src/Minus.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ class PHP_Token_MINUS extends PHP_Token { } PK!žÒ[>>bfile-manager-advanced/application/svg-sanitizer/includes/phpunit/php-token-stream/src/AndEqual.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ class PHP_Token_AND_EQUAL extends PHP_Token { } PK!c3±<<afile-manager-advanced/application/svg-sanitizer/includes/phpunit/php-token-stream/src/Extends.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ class PHP_Token_EXTENDS extends PHP_Token { } PK!¿i@@dfile-manager-advanced/application/svg-sanitizer/includes/phpunit/php-token-stream/src/StringCast.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ class PHP_Token_STRING_CAST extends PHP_Token { } PK!»Ä9==bfile-manager-advanced/application/svg-sanitizer/includes/phpunit/php-token-stream/src/Abstract.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ class PHP_Token_ABSTRACT extends PHP_Token { } PK!:®Ú’@@dfile-manager-advanced/application/svg-sanitizer/includes/phpunit/php-token-stream/src/BooleanAnd.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ class PHP_Token_BOOLEAN_AND extends PHP_Token { } PK! {㾪ª_file-manager-advanced/application/svg-sanitizer/includes/phpunit/php-token-stream/src/Token.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ abstract class PHP_Token { /** * @var string */ protected $text; /** * @var int */ protected $line; /** * @var PHP_Token_Stream */ protected $tokenStream; /** * @var int */ protected $id; /** * @param string $text * @param int $line * @param int $id */ public function __construct($text, $line, PHP_Token_Stream $tokenStream, $id) { $this->text = $text; $this->line = $line; $this->tokenStream = $tokenStream; $this->id = $id; } /** * @return string */ public function __toString() { return $this->text; } /** * @return int */ public function getLine() { return $this->line; } /** * @return int */ public function getId() { return $this->id; } } PK!µî�IIlfile-manager-advanced/application/svg-sanitizer/includes/phpunit/php-token-stream/src/NameFullyQualified.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ class PHP_Token_NAME_FULLY_QUALIFIED extends PHP_Token { } PK!0OO(99]file-manager-advanced/application/svg-sanitizer/includes/phpunit/php-token-stream/src/NsC.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ class PHP_Token_NS_C extends PHP_Token { } PK!õär�==bfile-manager-advanced/application/svg-sanitizer/includes/phpunit/php-token-stream/src/Backtick.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ class PHP_Token_BACKTICK extends PHP_Token { } PK!þESô77\file-manager-advanced/application/svg-sanitizer/includes/phpunit/php-token-stream/src/Sl.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ class PHP_Token_SL extends PHP_Token { } PK!€¸g½==afile-manager-advanced/application/svg-sanitizer/includes/phpunit/php-token-stream/src/MethodC.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ class PHP_Token_METHOD_C extends PHP_Token { } PK! Æ„Ã@@dfile-manager-advanced/application/svg-sanitizer/includes/phpunit/php-token-stream/src/MinusEqual.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ class PHP_Token_MINUS_EQUAL extends PHP_Token { } PK!„eJ˜@@dfile-manager-advanced/application/svg-sanitizer/includes/phpunit/php-token-stream/src/LogicalXor.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ class PHP_Token_LOGICAL_XOR extends PHP_Token { } PK!1þz388]file-manager-advanced/application/svg-sanitizer/includes/phpunit/php-token-stream/src/Var.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ class PHP_Token_VAR extends PHP_Token { } PK!•:Ħ;;`file-manager-advanced/application/svg-sanitizer/includes/phpunit/php-token-stream/src/Switch.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ class PHP_Token_SWITCH extends PHP_Token { } PK!'†pä;;`file-manager-advanced/application/svg-sanitizer/includes/phpunit/php-token-stream/src/Return.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ class PHP_Token_RETURN extends PHP_Token { } PK!"AMñ::_file-manager-advanced/application/svg-sanitizer/includes/phpunit/php-token-stream/src/While.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ class PHP_Token_WHILE extends PHP_Token { } PK!‰m< EEifile-manager-advanced/application/svg-sanitizer/includes/phpunit/php-token-stream/src/ExclamationMark.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ class PHP_Token_EXCLAMATION_MARK extends PHP_Token { } PK!‘}i 88]file-manager-advanced/application/svg-sanitizer/includes/phpunit/php-token-stream/src/Dir.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ class PHP_Token_DIR extends PHP_Token { } PK!*ö*—<<afile-manager-advanced/application/svg-sanitizer/includes/phpunit/php-token-stream/src/Lnumber.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ class PHP_Token_LNUMBER extends PHP_Token { } PK!—û€Ž??cfile-manager-advanced/application/svg-sanitizer/includes/phpunit/php-token-stream/src/BooleanOr.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ class PHP_Token_BOOLEAN_OR extends PHP_Token { } PK!DËæP;;`file-manager-advanced/application/svg-sanitizer/includes/phpunit/php-token-stream/src/Static.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ class PHP_Token_STATIC extends PHP_Token { } PK!uC”w;;`file-manager-advanced/application/svg-sanitizer/includes/phpunit/php-token-stream/src/Endfor.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ class PHP_Token_ENDFOR extends PHP_Token { } PK!ò¿é¢==bfile-manager-advanced/application/svg-sanitizer/includes/phpunit/php-token-stream/src/Continue.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ class PHP_Token_CONTINUE extends PHP_Token { } PK!ù½K–==afile-manager-advanced/application/svg-sanitizer/includes/phpunit/php-token-stream/src/SlEqual.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ class PHP_Token_SL_EQUAL extends PHP_Token { } PK!ÎãoÉ88]file-manager-advanced/application/svg-sanitizer/includes/phpunit/php-token-stream/src/Div.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ class PHP_Token_DIV extends PHP_Token { } PK!•û�>>bfile-manager-advanced/application/svg-sanitizer/includes/phpunit/php-token-stream/src/PowEqual.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ class PHP_Token_POW_EQUAL extends PHP_Token { } PK!šÞø¾??cfile-manager-advanced/application/svg-sanitizer/includes/phpunit/php-token-stream/src/OpenCurly.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ class PHP_Token_OPEN_CURLY extends PHP_Token { } PK!šB  hfile-manager-advanced/application/svg-sanitizer/includes/phpunit/php-token-stream/src/TokenWithScope.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ abstract class PHP_TokenWithScope extends PHP_Token { /** * @var int */ protected $endTokenId; /** * Get the docblock for this token. * * This method will fetch the docblock belonging to the current token. The * docblock must be placed on the line directly above the token to be * recognized. * * @return null|string Returns the docblock as a string if found */ public function getDocblock() { $tokens = $this->tokenStream->tokens(); $currentLineNumber = $tokens[$this->id]->getLine(); $prevLineNumber = $currentLineNumber - 1; for ($i = $this->id - 1; $i; $i--) { if (!isset($tokens[$i])) { return; } if ($tokens[$i] instanceof PHP_Token_FUNCTION || $tokens[$i] instanceof PHP_Token_CLASS || $tokens[$i] instanceof PHP_Token_TRAIT) { // Some other trait, class or function, no docblock can be // used for the current token break; } $line = $tokens[$i]->getLine(); if ($line == $currentLineNumber || ($line == $prevLineNumber && $tokens[$i] instanceof PHP_Token_WHITESPACE)) { continue; } if ($line < $currentLineNumber && !$tokens[$i] instanceof PHP_Token_DOC_COMMENT) { break; } return (string) $tokens[$i]; } } /** * @return int */ public function getEndTokenId() { $block = 0; $i = $this->id; $tokens = $this->tokenStream->tokens(); while ($this->endTokenId === null && isset($tokens[$i])) { if ($tokens[$i] instanceof PHP_Token_OPEN_CURLY || $tokens[$i] instanceof PHP_Token_DOLLAR_OPEN_CURLY_BRACES || $tokens[$i] instanceof PHP_Token_CURLY_OPEN) { $block++; } elseif ($tokens[$i] instanceof PHP_Token_CLOSE_CURLY) { $block--; if ($block === 0) { $this->endTokenId = $i; } } elseif (($this instanceof PHP_Token_FUNCTION || $this instanceof PHP_Token_NAMESPACE) && $tokens[$i] instanceof PHP_Token_SEMICOLON) { if ($block === 0) { $this->endTokenId = $i; } } $i++; } if ($this->endTokenId === null) { $this->endTokenId = $this->id; } return $this->endTokenId; } /** * @return int */ public function getEndLine() { return $this->tokenStream[$this->getEndTokenId()]->getLine(); } } PK!Nü„þ<<afile-manager-advanced/application/svg-sanitizer/includes/phpunit/php-token-stream/src/Declare.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ class PHP_Token_DECLARE extends PHP_Token { } PK!<ØþÈÈ^file-manager-advanced/application/svg-sanitizer/includes/phpunit/php-token-stream/src/Util.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ final class PHP_Token_Util { public static function getClass($object): string { $parts = \explode('\\', \get_class($object)); return \array_pop($parts); } } PK!jÖ3==afile-manager-advanced/application/svg-sanitizer/includes/phpunit/php-token-stream/src/OpenTag.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ class PHP_Token_OPEN_TAG extends PHP_Token { } PK!+è\¯<<afile-manager-advanced/application/svg-sanitizer/includes/phpunit/php-token-stream/src/DNumber.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ class PHP_Token_DNUMBER extends PHP_Token { } PK!¦MæDD_file-manager-advanced/application/svg-sanitizer/includes/phpunit/php-token-stream/src/Trait.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ class PHP_Token_TRAIT extends PHP_Token_INTERFACE { } PK!5_Gl¶¶hfile-manager-advanced/application/svg-sanitizer/includes/phpunit/php-token-stream/src/CachingFactory.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ class PHP_Token_Stream_CachingFactory { /** * @var array */ protected static $cache = []; /** * @param string $filename * * @return PHP_Token_Stream */ public static function get($filename) { if (!isset(self::$cache[$filename])) { self::$cache[$filename] = new PHP_Token_Stream($filename); } return self::$cache[$filename]; } /** * @param string $filename */ public static function clear($filename = null)/*: void*/ { if (\is_string($filename)) { unset(self::$cache[$filename]); } else { self::$cache = []; } } } PK!�i3…JJefile-manager-advanced/application/svg-sanitizer/includes/phpunit/php-token-stream/src/IncludeOnce.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ class PHP_Token_INCLUDE_ONCE extends PHP_Token_Includes { } PK!5fŒ‡99^file-manager-advanced/application/svg-sanitizer/includes/phpunit/php-token-stream/src/Mult.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ class PHP_Token_MULT extends PHP_Token { } PK!ÜÀŸ<<afile-manager-advanced/application/svg-sanitizer/includes/phpunit/php-token-stream/src/Foreach.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ class PHP_Token_FOREACH extends PHP_Token { } PK!°Z/G88]file-manager-advanced/application/svg-sanitizer/includes/phpunit/php-token-stream/src/Use.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ class PHP_Token_USE extends PHP_Token { } PK!W¥bfile-manager-advanced/application/svg-sanitizer/includes/phpunit/php-token-stream/src/Function.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ class PHP_Token_FUNCTION extends PHP_TokenWithScopeAndVisibility { /** * @var array */ protected $arguments; /** * @var int */ protected $ccn; /** * @var string */ protected $name; /** * @var string */ protected $signature; /** * @var bool */ private $anonymous = false; /** * @return array */ public function getArguments() { if ($this->arguments !== null) { return $this->arguments; } $this->arguments = []; $tokens = $this->tokenStream->tokens(); $typeDeclaration = null; // Search for first token inside brackets $i = $this->id + 2; while (!$tokens[$i - 1] instanceof PHP_Token_OPEN_BRACKET) { $i++; } while (!$tokens[$i] instanceof PHP_Token_CLOSE_BRACKET) { if ($tokens[$i] instanceof PHP_Token_STRING) { $typeDeclaration = (string) $tokens[$i]; } elseif ($tokens[$i] instanceof PHP_Token_VARIABLE) { $this->arguments[(string) $tokens[$i]] = $typeDeclaration; $typeDeclaration = null; } $i++; } return $this->arguments; } /** * @return string */ public function getName() { if ($this->name !== null) { return $this->name; } $tokens = $this->tokenStream->tokens(); $i = $this->id + 1; if ($tokens[$i] instanceof PHP_Token_WHITESPACE) { $i++; } if ($tokens[$i] instanceof PHP_Token_AMPERSAND) { $i++; } if ($tokens[$i + 1] instanceof PHP_Token_OPEN_BRACKET) { $this->name = (string) $tokens[$i]; } elseif ($tokens[$i + 1] instanceof PHP_Token_WHITESPACE && $tokens[$i + 2] instanceof PHP_Token_OPEN_BRACKET) { $this->name = (string) $tokens[$i]; } else { $this->anonymous = true; $this->name = \sprintf( 'anonymousFunction:%s#%s', $this->getLine(), $this->getId() ); } if (!$this->isAnonymous()) { for ($i = $this->id; $i; --$i) { if ($tokens[$i] instanceof PHP_Token_NAMESPACE) { $this->name = $tokens[$i]->getName() . '\\' . $this->name; break; } if ($tokens[$i] instanceof PHP_Token_INTERFACE) { break; } } } return $this->name; } /** * @return int */ public function getCCN() { if ($this->ccn !== null) { return $this->ccn; } $this->ccn = 1; $end = $this->getEndTokenId(); $tokens = $this->tokenStream->tokens(); for ($i = $this->id; $i <= $end; $i++) { switch (\get_class($tokens[$i])) { case PHP_Token_IF::class: case PHP_Token_ELSEIF::class: case PHP_Token_FOR::class: case PHP_Token_FOREACH::class: case PHP_Token_WHILE::class: case PHP_Token_CASE::class: case PHP_Token_CATCH::class: case PHP_Token_BOOLEAN_AND::class: case PHP_Token_LOGICAL_AND::class: case PHP_Token_BOOLEAN_OR::class: case PHP_Token_LOGICAL_OR::class: case PHP_Token_QUESTION_MARK::class: $this->ccn++; break; } } return $this->ccn; } /** * @return string */ public function getSignature() { if ($this->signature !== null) { return $this->signature; } if ($this->isAnonymous()) { $this->signature = 'anonymousFunction'; $i = $this->id + 1; } else { $this->signature = ''; $i = $this->id + 2; } $tokens = $this->tokenStream->tokens(); while (isset($tokens[$i]) && !$tokens[$i] instanceof PHP_Token_OPEN_CURLY && !$tokens[$i] instanceof PHP_Token_SEMICOLON) { $this->signature .= $tokens[$i++]; } $this->signature = \trim($this->signature); return $this->signature; } /** * @return bool */ public function isAnonymous() { return $this->anonymous; } } PK! Nyã77\file-manager-advanced/application/svg-sanitizer/includes/phpunit/php-token-stream/src/Lt.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ class PHP_Token_LT extends PHP_Token { } PK!‡2j99^file-manager-advanced/application/svg-sanitizer/includes/phpunit/php-token-stream/src/Else.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ class PHP_Token_ELSE extends PHP_Token { } PK!¡w”ŽDDhfile-manager-advanced/application/svg-sanitizer/includes/phpunit/php-token-stream/src/ObjectOperator.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ class PHP_Token_OBJECT_OPERATOR extends PHP_Token { } PK!)¡ÇR99^file-manager-advanced/application/svg-sanitizer/includes/phpunit/php-token-stream/src/Line.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ class PHP_Token_LINE extends PHP_Token { } PK!tÂrû<<afile-manager-advanced/application/svg-sanitizer/includes/phpunit/php-token-stream/src/Finally.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ class PHP_Token_FINALLY extends PHP_Token { } PK!ND‘77\file-manager-advanced/application/svg-sanitizer/includes/phpunit/php-token-stream/src/At.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ class PHP_Token_AT extends PHP_Token { } PK!M Ñ¢::_file-manager-advanced/application/svg-sanitizer/includes/phpunit/php-token-stream/src/Const.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ class PHP_Token_CONST extends PHP_Token { } PK!/ô<"::_file-manager-advanced/application/svg-sanitizer/includes/phpunit/php-token-stream/src/Clone.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ class PHP_Token_CLONE extends PHP_Token { } PK!Ò&@@dfile-manager-advanced/application/svg-sanitizer/includes/phpunit/php-token-stream/src/EndHeredoc.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ class PHP_Token_END_HEREDOC extends PHP_Token { } PK!!J{BBffile-manager-advanced/application/svg-sanitizer/includes/phpunit/php-token-stream/src/HaltCompiler.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ class PHP_Token_HALT_COMPILER extends PHP_Token { } PK!Rˆù³;;`file-manager-advanced/application/svg-sanitizer/includes/phpunit/php-token-stream/src/Global.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ class PHP_Token_GLOBAL extends PHP_Token { } PK!´Í&JJefile-manager-advanced/application/svg-sanitizer/includes/phpunit/php-token-stream/src/RequireOnce.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ class PHP_Token_REQUIRE_ONCE extends PHP_Token_Includes { } PK!»Ò*©AAefile-manager-advanced/application/svg-sanitizer/includes/phpunit/php-token-stream/src/IsIdentical.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ class PHP_Token_IS_IDENTICAL extends PHP_Token { } PK!Þö==afile-manager-advanced/application/svg-sanitizer/includes/phpunit/php-token-stream/src/IntCast.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ class PHP_Token_INT_CAST extends PHP_Token { } PK!¤ð~œBBffile-manager-advanced/application/svg-sanitizer/includes/phpunit/php-token-stream/src/DoubleQuotes.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ class PHP_Token_DOUBLE_QUOTES extends PHP_Token { } PK!´ñê@@dfile-manager-advanced/application/svg-sanitizer/includes/phpunit/php-token-stream/src/LogicalAnd.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ class PHP_Token_LOGICAL_AND extends PHP_Token { } PK!%õ??cfile-manager-advanced/application/svg-sanitizer/includes/phpunit/php-token-stream/src/YieldFrom.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ class PHP_Token_YIELD_FROM extends PHP_Token { } PK! 4¿w;;`file-manager-advanced/application/svg-sanitizer/includes/phpunit/php-token-stream/src/Elseif.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ class PHP_Token_ELSEIF extends PHP_Token { } PK!N.Ã::_file-manager-advanced/application/svg-sanitizer/includes/phpunit/php-token-stream/src/break.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ class PHP_Token_BREAK extends PHP_Token { } PK!¥?Gt>>cfile-manager-advanced/application/svg-sanitizer/includes/phpunit/php-token-stream/src/Spaceship.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ class PHP_Token_SPACESHIP extends PHP_Token { } PK!Àr°>>bfile-manager-advanced/application/svg-sanitizer/includes/phpunit/php-token-stream/src/BoolCast.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ class PHP_Token_BOOL_CAST extends PHP_Token { } PK!ó(Õ^ÈÈbfile-manager-advanced/application/svg-sanitizer/includes/phpunit/php-token-stream/src/Includes.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ abstract class PHP_Token_Includes extends PHP_Token { /** * @var string */ protected $name; /** * @var string */ protected $type; /** * @return string */ public function getName() { if ($this->name === null) { $this->process(); } return $this->name; } /** * @return string */ public function getType() { if ($this->type === null) { $this->process(); } return $this->type; } private function process(): void { $tokens = $this->tokenStream->tokens(); if ($tokens[$this->id + 2] instanceof PHP_Token_CONSTANT_ENCAPSED_STRING) { $this->name = \trim((string) $tokens[$this->id + 2], "'\""); $this->type = \strtolower( \str_replace('PHP_Token_', '', PHP_Token_Util::getClass($tokens[$this->id])) ); } } } PK!¨^ì99^file-manager-advanced/application/svg-sanitizer/includes/phpunit/php-token-stream/src/Plus.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ class PHP_Token_PLUS extends PHP_Token { } PK!Bf¬??cfile-manager-advanced/application/svg-sanitizer/includes/phpunit/php-token-stream/src/ArrayCast.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ class PHP_Token_ARRAY_CAST extends PHP_Token { } PK!-Té77\file-manager-advanced/application/svg-sanitizer/includes/phpunit/php-token-stream/src/Sr.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ class PHP_Token_SR extends PHP_Token { } PK!ÊM7LBBffile-manager-advanced/application/svg-sanitizer/includes/phpunit/php-token-stream/src/QuestionMark.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ class PHP_Token_QUESTION_MARK extends PHP_Token { } PK!Ǿ‘‰88]file-manager-advanced/application/svg-sanitizer/includes/phpunit/php-token-stream/src/Dec.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ class PHP_Token_DEC extends PHP_Token { } PK!XØm::_file-manager-advanced/application/svg-sanitizer/includes/phpunit/php-token-stream/src/Throw.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ class PHP_Token_THROW extends PHP_Token { } PK!K‚-.<<afile-manager-advanced/application/svg-sanitizer/includes/phpunit/php-token-stream/src/Percent.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ class PHP_Token_PERCENT extends PHP_Token { } PK!Ö†×88]file-manager-advanced/application/svg-sanitizer/includes/phpunit/php-token-stream/src/Inc.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ class PHP_Token_INC extends PHP_Token { } PK!¿w˜ƒ99^file-manager-advanced/application/svg-sanitizer/includes/phpunit/php-token-stream/src/Exit.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ class PHP_Token_EXIT extends PHP_Token { } PK!Ž�ýyff_file-manager-advanced/application/svg-sanitizer/includes/phpunit/php-token-stream/src/Class.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ class PHP_Token_CLASS extends PHP_Token_INTERFACE { /** * @var bool */ private $anonymous = false; /** * @var string */ private $name; /** * @return string */ public function getName() { if ($this->name !== null) { return $this->name; } $next = $this->tokenStream[$this->id + 1]; if ($next instanceof PHP_Token_WHITESPACE) { $next = $this->tokenStream[$this->id + 2]; } if ($next instanceof PHP_Token_STRING) { $this->name =(string) $next; return $this->name; } if ($next instanceof PHP_Token_OPEN_CURLY || $next instanceof PHP_Token_EXTENDS || $next instanceof PHP_Token_IMPLEMENTS) { $this->name = \sprintf( 'AnonymousClass:%s#%s', $this->getLine(), $this->getId() ); $this->anonymous = true; return $this->name; } } public function isAnonymous() { return $this->anonymous; } } PK!²À¤yGGifile-manager-advanced/application/svg-sanitizer/includes/phpunit/php-token-stream/src/OpenTagWithEcho.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ class PHP_Token_OPEN_TAG_WITH_ECHO extends PHP_Token { } PK!-«IðHHjfile-manager-advanced/application/svg-sanitizer/includes/phpunit/php-token-stream/src/IsSmallerOrEqual.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ class PHP_Token_IS_SMALLER_OR_EQUAL extends PHP_Token { } PK!_ú^J==bfile-manager-advanced/application/svg-sanitizer/includes/phpunit/php-token-stream/src/Coalesce.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ class PHP_Token_COALESCE extends PHP_Token { } PK! vHBBffile-manager-advanced/application/svg-sanitizer/includes/phpunit/php-token-stream/src/BadCharacter.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ class PHP_Token_BAD_CHARACTER extends PHP_Token { } PK!PEM/>>cfile-manager-advanced/application/svg-sanitizer/includes/phpunit/php-token-stream/src/Protected.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ class PHP_Token_PROTECTED extends PHP_Token { } PK!\žØéé[file-manager-advanced/application/svg-sanitizer/includes/phpunit/php-token-stream/README.mdnu„[µü¤# phpunit/php-token-stream [![CI Status](https://github.com/sebastianbergmann/php-token-stream/workflows/CI/badge.svg)](https://github.com/sebastianbergmann/php-token-stream/actions) [![Type Coverage](https://shepherd.dev/github/sebastianbergmann/php-token-stream/coverage.svg)](https://shepherd.dev/github/sebastianbergmann/php-token-stream) ## Installation You can add this library as a local, per-project dependency to your project using [Composer](https://getcomposer.org/): ``` composer require phpunit/php-token-stream ``` If you only need this library during development, for instance to run your project's test suite, then you should add it as a development-time dependency: ``` composer require --dev phpunit/php-token-stream ``` PK!¡b¤[[\file-manager-advanced/application/svg-sanitizer/includes/phpunit/php-token-stream/.gitignorenu„[µü¤/.idea /.php_cs /.php_cs.cache /.phpunit.result.cache /.psalm/cache /composer.lock /vendor PK!ÎZ[{Yfile-manager-advanced/application/svg-sanitizer/includes/phpunit/php-token-stream/LICENSEnu„[µü¤php-token-stream Copyright (c) 2009-2020, Sebastian Bergmann . All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. * Neither the name of Sebastian Bergmann nor the names of his contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. PK!ïº[^nnUfile-manager-advanced/application/svg-sanitizer/includes/sebastian/diff/composer.jsonnu„[µü¤{ "name": "sebastian/diff", "description": "Diff implementation", "keywords": ["diff", "udiff", "unidiff", "unified diff"], "homepage": "https://github.com/sebastianbergmann/diff", "license": "BSD-3-Clause", "authors": [ { "name": "Sebastian Bergmann", "email": "sebastian@phpunit.de" }, { "name": "Kore Nordmann", "email": "mail@kore-nordmann.de" } ], "require": { "php": ">=7.1" }, "require-dev": { "phpunit/phpunit": "^7.5 || ^8.0", "symfony/process": "^2 || ^3.3 || ^4" }, "autoload": { "classmap": [ "src/" ] }, "autoload-dev": { "classmap": [ "tests/" ] }, "extra": { "branch-alias": { "dev-master": "3.0-dev" } } } PK!E«Ê Ê Tfile-manager-advanced/application/svg-sanitizer/includes/sebastian/diff/ChangeLog.mdnu„[µü¤# ChangeLog All notable changes are documented in this file using the [Keep a CHANGELOG](http://keepachangelog.com/) principles. ## [3.0.6] - 2023-03-02 ### Changed * Do not use implicitly nullable parameters ## [3.0.5] - 2023-03-01 * No code changes, only updated `.gitattributes` to not export non-essential files. ## [3.0.4] - 2023-05-07 ### Changed * [#118](https://github.com/sebastianbergmann/diff/pull/118): Improve performance of `MemoryEfficientLongestCommonSubsequenceCalculator` * [#119](https://github.com/sebastianbergmann/diff/pull/119): Improve performance of `TimeEfficientLongestCommonSubsequenceCalculator` ## [3.0.3] - 2020-11-30 ### Changed * Changed PHP version constraint in `composer.json` from `^7.1` to `>=7.1` ## [3.0.2] - 2019-02-04 ### Changed * `Chunk::setLines()` now ensures that the `$lines` array only contains `Line` objects ## [3.0.1] - 2018-06-10 ### Fixed * Removed `"minimum-stability": "dev",` from `composer.json` ## [3.0.0] - 2018-02-01 * The `StrictUnifiedDiffOutputBuilder` implementation of the `DiffOutputBuilderInterface` was added ### Changed * The default `DiffOutputBuilderInterface` implementation now generates context lines (unchanged lines) ### Removed * Removed support for PHP 7.0 ### Fixed * Fixed [#70](https://github.com/sebastianbergmann/diff/issues/70): Diffing of arrays no longer works ## [2.0.1] - 2017-08-03 ### Fixed * Fixed [#66](https://github.com/sebastianbergmann/diff/pull/66): Restored backwards compatibility for PHPUnit 6.1.4, 6.2.0, 6.2.1, 6.2.2, and 6.2.3 ## [2.0.0] - 2017-07-11 [YANKED] ### Added * Implemented [#64](https://github.com/sebastianbergmann/diff/pull/64): Show line numbers for chunks of a diff ### Removed * This component is no longer supported on PHP 5.6 [3.0.6]: https://github.com/sebastianbergmann/diff/compare/3.0.5...3.0.6 [3.0.5]: https://github.com/sebastianbergmann/diff/compare/3.0.4...3.0.5 [3.0.4]: https://github.com/sebastianbergmann/diff/compare/3.0.3...3.0.4 [3.0.3]: https://github.com/sebastianbergmann/diff/compare/3.0.2...3.0.3 [3.0.2]: https://github.com/sebastianbergmann/diff/compare/3.0.1...3.0.2 [3.0.1]: https://github.com/sebastianbergmann/diff/compare/3.0.0...3.0.1 [3.0.0]: https://github.com/sebastianbergmann/diff/compare/2.0...3.0.0 [2.0.1]: https://github.com/sebastianbergmann/diff/compare/c341c98ce083db77f896a0aa64f5ee7652915970...2.0.1 [2.0.0]: https://github.com/sebastianbergmann/diff/compare/1.4...c341c98ce083db77f896a0aa64f5ee7652915970 PK!Gœ2¦ ¦ Vfile-manager-advanced/application/svg-sanitizer/includes/sebastian/diff/src/Parser.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace SebastianBergmann\Diff; /** * Unified diff parser. */ final class Parser { /** * @param string $string * * @return Diff[] */ public function parse(string $string): array { $lines = \preg_split('(\r\n|\r|\n)', $string); if (!empty($lines) && $lines[\count($lines) - 1] === '') { \array_pop($lines); } $lineCount = \count($lines); $diffs = []; $diff = null; $collected = []; for ($i = 0; $i < $lineCount; ++$i) { if (\preg_match('(^---\\s+(?P\\S+))', $lines[$i], $fromMatch) && \preg_match('(^\\+\\+\\+\\s+(?P\\S+))', $lines[$i + 1], $toMatch)) { if ($diff !== null) { $this->parseFileDiff($diff, $collected); $diffs[] = $diff; $collected = []; } $diff = new Diff($fromMatch['file'], $toMatch['file']); ++$i; } else { if (\preg_match('/^(?:diff --git |index [\da-f\.]+|[+-]{3} [ab])/', $lines[$i])) { continue; } $collected[] = $lines[$i]; } } if ($diff !== null && \count($collected)) { $this->parseFileDiff($diff, $collected); $diffs[] = $diff; } return $diffs; } private function parseFileDiff(Diff $diff, array $lines): void { $chunks = []; $chunk = null; foreach ($lines as $line) { if (\preg_match('/^@@\s+-(?P\d+)(?:,\s*(?P\d+))?\s+\+(?P\d+)(?:,\s*(?P\d+))?\s+@@/', $line, $match)) { $chunk = new Chunk( (int) $match['start'], isset($match['startrange']) ? \max(1, (int) $match['startrange']) : 1, (int) $match['end'], isset($match['endrange']) ? \max(1, (int) $match['endrange']) : 1 ); $chunks[] = $chunk; $diffLines = []; continue; } if (\preg_match('/^(?P[+ -])?(?P.*)/', $line, $match)) { $type = Line::UNCHANGED; if ($match['type'] === '+') { $type = Line::ADDED; } elseif ($match['type'] === '-') { $type = Line::REMOVED; } $diffLines[] = new Line($type, $match['line']); if (null !== $chunk) { $chunk->setLines($diffLines); } } } $diff->setChunks($chunks); } } PK!3߬î  Tfile-manager-advanced/application/svg-sanitizer/includes/sebastian/diff/src/Diff.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace SebastianBergmann\Diff; final class Diff { /** * @var string */ private $from; /** * @var string */ private $to; /** * @var Chunk[] */ private $chunks; /** * @param string $from * @param string $to * @param Chunk[] $chunks */ public function __construct(string $from, string $to, array $chunks = []) { $this->from = $from; $this->to = $to; $this->chunks = $chunks; } public function getFrom(): string { return $this->from; } public function getTo(): string { return $this->to; } /** * @return Chunk[] */ public function getChunks(): array { return $this->chunks; } /** * @param Chunk[] $chunks */ public function setChunks(array $chunks): void { $this->chunks = $chunks; } } PK!sŒøDDpfile-manager-advanced/application/svg-sanitizer/includes/sebastian/diff/src/Exception/ConfigurationException.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace SebastianBergmann\Diff; final class ConfigurationException extends InvalidArgumentException { /** * @param string $option * @param string $expected * @param mixed $value * @param int $code * @param null|\Exception $previous */ public function __construct( string $option, string $expected, $value, int $code = 0, ?\Exception $previous = null ) { parent::__construct( \sprintf( 'Option "%s" must be %s, got "%s".', $option, $expected, \is_object($value) ? \get_class($value) : (null === $value ? '' : \gettype($value) . '#' . $value) ), $code, $previous ); } } PK!gÔÕ@@cfile-manager-advanced/application/svg-sanitizer/includes/sebastian/diff/src/Exception/Exception.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace SebastianBergmann\Diff; interface Exception { } PK!g¢ø“‚‚rfile-manager-advanced/application/svg-sanitizer/includes/sebastian/diff/src/Exception/InvalidArgumentException.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace SebastianBergmann\Diff; class InvalidArgumentException extends \InvalidArgumentException implements Exception { } PK!ݪª;%;%Vfile-manager-advanced/application/svg-sanitizer/includes/sebastian/diff/src/Differ.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace SebastianBergmann\Diff; use SebastianBergmann\Diff\Output\DiffOutputBuilderInterface; use SebastianBergmann\Diff\Output\UnifiedDiffOutputBuilder; /** * Diff implementation. */ final class Differ { public const OLD = 0; public const ADDED = 1; public const REMOVED = 2; public const DIFF_LINE_END_WARNING = 3; public const NO_LINE_END_EOF_WARNING = 4; /** * @var DiffOutputBuilderInterface */ private $outputBuilder; /** * @param DiffOutputBuilderInterface $outputBuilder * * @throws InvalidArgumentException */ public function __construct($outputBuilder = null) { if ($outputBuilder instanceof DiffOutputBuilderInterface) { $this->outputBuilder = $outputBuilder; } elseif (null === $outputBuilder) { $this->outputBuilder = new UnifiedDiffOutputBuilder; } elseif (\is_string($outputBuilder)) { // PHPUnit 6.1.4, 6.2.0, 6.2.1, 6.2.2, and 6.2.3 support // @see https://github.com/sebastianbergmann/phpunit/issues/2734#issuecomment-314514056 // @deprecated $this->outputBuilder = new UnifiedDiffOutputBuilder($outputBuilder); } else { throw new InvalidArgumentException( \sprintf( 'Expected builder to be an instance of DiffOutputBuilderInterface, or a string, got %s.', \is_object($outputBuilder) ? 'instance of "' . \get_class($outputBuilder) . '"' : \gettype($outputBuilder) . ' "' . $outputBuilder . '"' ) ); } } /** * Returns the diff between two arrays or strings as string. * * @param array|string $from * @param array|string $to * @param null|LongestCommonSubsequenceCalculator $lcs * * @return string */ public function diff($from, $to, ?LongestCommonSubsequenceCalculator $lcs = null): string { $diff = $this->diffToArray( $this->normalizeDiffInput($from), $this->normalizeDiffInput($to), $lcs ); return $this->outputBuilder->getDiff($diff); } /** * Returns the diff between two arrays or strings as array. * * Each array element contains two elements: * - [0] => mixed $token * - [1] => 2|1|0 * * - 2: REMOVED: $token was removed from $from * - 1: ADDED: $token was added to $from * - 0: OLD: $token is not changed in $to * * @param array|string $from * @param array|string $to * @param LongestCommonSubsequenceCalculator $lcs * * @return array */ public function diffToArray($from, $to, ?LongestCommonSubsequenceCalculator $lcs = null): array { if (\is_string($from)) { $from = $this->splitStringByLines($from); } elseif (!\is_array($from)) { throw new InvalidArgumentException('"from" must be an array or string.'); } if (\is_string($to)) { $to = $this->splitStringByLines($to); } elseif (!\is_array($to)) { throw new InvalidArgumentException('"to" must be an array or string.'); } [$from, $to, $start, $end] = self::getArrayDiffParted($from, $to); if ($lcs === null) { $lcs = $this->selectLcsImplementation($from, $to); } $common = $lcs->calculate(\array_values($from), \array_values($to)); $diff = []; foreach ($start as $token) { $diff[] = [$token, self::OLD]; } \reset($from); \reset($to); foreach ($common as $token) { while (($fromToken = \reset($from)) !== $token) { $diff[] = [\array_shift($from), self::REMOVED]; } while (($toToken = \reset($to)) !== $token) { $diff[] = [\array_shift($to), self::ADDED]; } $diff[] = [$token, self::OLD]; \array_shift($from); \array_shift($to); } while (($token = \array_shift($from)) !== null) { $diff[] = [$token, self::REMOVED]; } while (($token = \array_shift($to)) !== null) { $diff[] = [$token, self::ADDED]; } foreach ($end as $token) { $diff[] = [$token, self::OLD]; } if ($this->detectUnmatchedLineEndings($diff)) { \array_unshift($diff, ["#Warning: Strings contain different line endings!\n", self::DIFF_LINE_END_WARNING]); } return $diff; } /** * Casts variable to string if it is not a string or array. * * @param mixed $input * * @return array|string */ private function normalizeDiffInput($input) { if (!\is_array($input) && !\is_string($input)) { return (string) $input; } return $input; } /** * Checks if input is string, if so it will split it line-by-line. * * @param string $input * * @return array */ private function splitStringByLines(string $input): array { return \preg_split('/(.*\R)/', $input, -1, PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY); } /** * @param array $from * @param array $to * * @return LongestCommonSubsequenceCalculator */ private function selectLcsImplementation(array $from, array $to): LongestCommonSubsequenceCalculator { // We do not want to use the time-efficient implementation if its memory // footprint will probably exceed this value. Note that the footprint // calculation is only an estimation for the matrix and the LCS method // will typically allocate a bit more memory than this. $memoryLimit = 100 * 1024 * 1024; if ($this->calculateEstimatedFootprint($from, $to) > $memoryLimit) { return new MemoryEfficientLongestCommonSubsequenceCalculator; } return new TimeEfficientLongestCommonSubsequenceCalculator; } /** * Calculates the estimated memory footprint for the DP-based method. * * @param array $from * @param array $to * * @return float|int */ private function calculateEstimatedFootprint(array $from, array $to) { $itemSize = PHP_INT_SIZE === 4 ? 76 : 144; return $itemSize * \min(\count($from), \count($to)) ** 2; } /** * Returns true if line ends don't match in a diff. * * @param array $diff * * @return bool */ private function detectUnmatchedLineEndings(array $diff): bool { $newLineBreaks = ['' => true]; $oldLineBreaks = ['' => true]; foreach ($diff as $entry) { if (self::OLD === $entry[1]) { $ln = $this->getLinebreak($entry[0]); $oldLineBreaks[$ln] = true; $newLineBreaks[$ln] = true; } elseif (self::ADDED === $entry[1]) { $newLineBreaks[$this->getLinebreak($entry[0])] = true; } elseif (self::REMOVED === $entry[1]) { $oldLineBreaks[$this->getLinebreak($entry[0])] = true; } } // if either input or output is a single line without breaks than no warning should be raised if (['' => true] === $newLineBreaks || ['' => true] === $oldLineBreaks) { return false; } // two way compare foreach ($newLineBreaks as $break => $set) { if (!isset($oldLineBreaks[$break])) { return true; } } foreach ($oldLineBreaks as $break => $set) { if (!isset($newLineBreaks[$break])) { return true; } } return false; } private function getLinebreak($line): string { if (!\is_string($line)) { return ''; } $lc = \substr($line, -1); if ("\r" === $lc) { return "\r"; } if ("\n" !== $lc) { return ''; } if ("\r\n" === \substr($line, -2)) { return "\r\n"; } return "\n"; } private static function getArrayDiffParted(array &$from, array &$to): array { $start = []; $end = []; \reset($to); foreach ($from as $k => $v) { $toK = \key($to); if ($toK === $k && $v === $to[$k]) { $start[$k] = $v; unset($from[$k], $to[$k]); } else { break; } } \end($from); \end($to); do { $fromK = \key($from); $toK = \key($to); if (null === $fromK || null === $toK || \current($from) !== \current($to)) { break; } \prev($from); \prev($to); $end = [$fromK => $from[$fromK]] + $end; unset($from[$fromK], $to[$toK]); } while (true); return [$from, $to, $start, $end]; } } PK!$KÎÈ1 1 �file-manager-advanced/application/svg-sanitizer/includes/sebastian/diff/src/MemoryEfficientLongestCommonSubsequenceCalculator.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace SebastianBergmann\Diff; final class MemoryEfficientLongestCommonSubsequenceCalculator implements LongestCommonSubsequenceCalculator { /** * {@inheritdoc} */ public function calculate(array $from, array $to): array { $cFrom = \count($from); $cTo = \count($to); if ($cFrom === 0) { return []; } if ($cFrom === 1) { if (\in_array($from[0], $to, true)) { return [$from[0]]; } return []; } $i = (int) ($cFrom / 2); $fromStart = \array_slice($from, 0, $i); $fromEnd = \array_slice($from, $i); $llB = $this->length($fromStart, $to); $llE = $this->length(\array_reverse($fromEnd), \array_reverse($to)); $jMax = 0; $max = 0; for ($j = 0; $j <= $cTo; $j++) { $m = $llB[$j] + $llE[$cTo - $j]; if ($m >= $max) { $max = $m; $jMax = $j; } } $toStart = \array_slice($to, 0, $jMax); $toEnd = \array_slice($to, $jMax); return \array_merge( $this->calculate($fromStart, $toStart), $this->calculate($fromEnd, $toEnd) ); } private function length(array $from, array $to): array { $current = \array_fill(0, \count($to) + 1, 0); $cFrom = \count($from); $cTo = \count($to); for ($i = 0; $i < $cFrom; $i++) { $prev = $current; for ($j = 0; $j < $cTo; $j++) { if ($from[$i] === $to[$j]) { $current[$j + 1] = $prev[$j] + 1; } else { // don't use max() to avoid function call overhead if ($current[$j] > $prev[$j + 1]) { $current[$j + 1] = $current[$j]; } else { $current[$j + 1] = $prev[$j + 1]; } } } } return $current; } } PK!ïþ¥NÍ(Í(ufile-manager-advanced/application/svg-sanitizer/includes/sebastian/diff/src/Output/StrictUnifiedDiffOutputBuilder.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace SebastianBergmann\Diff\Output; use SebastianBergmann\Diff\ConfigurationException; use SebastianBergmann\Diff\Differ; /** * Strict Unified diff output builder. * * Generates (strict) Unified diff's (unidiffs) with hunks. */ final class StrictUnifiedDiffOutputBuilder implements DiffOutputBuilderInterface { private static $default = [ 'collapseRanges' => true, // ranges of length one are rendered with the trailing `,1` 'commonLineThreshold' => 6, // number of same lines before ending a new hunk and creating a new one (if needed) 'contextLines' => 3, // like `diff: -u, -U NUM, --unified[=NUM]`, for patch/git apply compatibility best to keep at least @ 3 'fromFile' => null, 'fromFileDate' => null, 'toFile' => null, 'toFileDate' => null, ]; /** * @var bool */ private $changed; /** * @var bool */ private $collapseRanges; /** * @var int >= 0 */ private $commonLineThreshold; /** * @var string */ private $header; /** * @var int >= 0 */ private $contextLines; public function __construct(array $options = []) { $options = \array_merge(self::$default, $options); if (!\is_bool($options['collapseRanges'])) { throw new ConfigurationException('collapseRanges', 'a bool', $options['collapseRanges']); } if (!\is_int($options['contextLines']) || $options['contextLines'] < 0) { throw new ConfigurationException('contextLines', 'an int >= 0', $options['contextLines']); } if (!\is_int($options['commonLineThreshold']) || $options['commonLineThreshold'] <= 0) { throw new ConfigurationException('commonLineThreshold', 'an int > 0', $options['commonLineThreshold']); } foreach (['fromFile', 'toFile'] as $option) { if (!\is_string($options[$option])) { throw new ConfigurationException($option, 'a string', $options[$option]); } } foreach (['fromFileDate', 'toFileDate'] as $option) { if (null !== $options[$option] && !\is_string($options[$option])) { throw new ConfigurationException($option, 'a string or ', $options[$option]); } } $this->header = \sprintf( "--- %s%s\n+++ %s%s\n", $options['fromFile'], null === $options['fromFileDate'] ? '' : "\t" . $options['fromFileDate'], $options['toFile'], null === $options['toFileDate'] ? '' : "\t" . $options['toFileDate'] ); $this->collapseRanges = $options['collapseRanges']; $this->commonLineThreshold = $options['commonLineThreshold']; $this->contextLines = $options['contextLines']; } public function getDiff(array $diff): string { if (0 === \count($diff)) { return ''; } $this->changed = false; $buffer = \fopen('php://memory', 'r+b'); \fwrite($buffer, $this->header); $this->writeDiffHunks($buffer, $diff); if (!$this->changed) { \fclose($buffer); return ''; } $diff = \stream_get_contents($buffer, -1, 0); \fclose($buffer); // If the last char is not a linebreak: add it. // This might happen when both the `from` and `to` do not have a trailing linebreak $last = \substr($diff, -1); return "\n" !== $last && "\r" !== $last ? $diff . "\n" : $diff ; } private function writeDiffHunks($output, array $diff): void { // detect "No newline at end of file" and insert into `$diff` if needed $upperLimit = \count($diff); if (0 === $diff[$upperLimit - 1][1]) { $lc = \substr($diff[$upperLimit - 1][0], -1); if ("\n" !== $lc) { \array_splice($diff, $upperLimit, 0, [["\n\\ No newline at end of file\n", Differ::NO_LINE_END_EOF_WARNING]]); } } else { // search back for the last `+` and `-` line, // check if has trailing linebreak, else add under it warning under it $toFind = [1 => true, 2 => true]; for ($i = $upperLimit - 1; $i >= 0; --$i) { if (isset($toFind[$diff[$i][1]])) { unset($toFind[$diff[$i][1]]); $lc = \substr($diff[$i][0], -1); if ("\n" !== $lc) { \array_splice($diff, $i + 1, 0, [["\n\\ No newline at end of file\n", Differ::NO_LINE_END_EOF_WARNING]]); } if (!\count($toFind)) { break; } } } } // write hunks to output buffer $cutOff = \max($this->commonLineThreshold, $this->contextLines); $hunkCapture = false; $sameCount = $toRange = $fromRange = 0; $toStart = $fromStart = 1; foreach ($diff as $i => $entry) { if (0 === $entry[1]) { // same if (false === $hunkCapture) { ++$fromStart; ++$toStart; continue; } ++$sameCount; ++$toRange; ++$fromRange; if ($sameCount === $cutOff) { $contextStartOffset = ($hunkCapture - $this->contextLines) < 0 ? $hunkCapture : $this->contextLines ; // note: $contextEndOffset = $this->contextLines; // // because we never go beyond the end of the diff. // with the cutoff/contextlines here the follow is never true; // // if ($i - $cutOff + $this->contextLines + 1 > \count($diff)) { // $contextEndOffset = count($diff) - 1; // } // // ; that would be true for a trailing incomplete hunk case which is dealt with after this loop $this->writeHunk( $diff, $hunkCapture - $contextStartOffset, $i - $cutOff + $this->contextLines + 1, $fromStart - $contextStartOffset, $fromRange - $cutOff + $contextStartOffset + $this->contextLines, $toStart - $contextStartOffset, $toRange - $cutOff + $contextStartOffset + $this->contextLines, $output ); $fromStart += $fromRange; $toStart += $toRange; $hunkCapture = false; $sameCount = $toRange = $fromRange = 0; } continue; } $sameCount = 0; if ($entry[1] === Differ::NO_LINE_END_EOF_WARNING) { continue; } $this->changed = true; if (false === $hunkCapture) { $hunkCapture = $i; } if (Differ::ADDED === $entry[1]) { // added ++$toRange; } if (Differ::REMOVED === $entry[1]) { // removed ++$fromRange; } } if (false === $hunkCapture) { return; } // we end here when cutoff (commonLineThreshold) was not reached, but we where capturing a hunk, // do not render hunk till end automatically because the number of context lines might be less than the commonLineThreshold $contextStartOffset = $hunkCapture - $this->contextLines < 0 ? $hunkCapture : $this->contextLines ; // prevent trying to write out more common lines than there are in the diff _and_ // do not write more than configured through the context lines $contextEndOffset = \min($sameCount, $this->contextLines); $fromRange -= $sameCount; $toRange -= $sameCount; $this->writeHunk( $diff, $hunkCapture - $contextStartOffset, $i - $sameCount + $contextEndOffset + 1, $fromStart - $contextStartOffset, $fromRange + $contextStartOffset + $contextEndOffset, $toStart - $contextStartOffset, $toRange + $contextStartOffset + $contextEndOffset, $output ); } private function writeHunk( array $diff, int $diffStartIndex, int $diffEndIndex, int $fromStart, int $fromRange, int $toStart, int $toRange, $output ): void { \fwrite($output, '@@ -' . $fromStart); if (!$this->collapseRanges || 1 !== $fromRange) { \fwrite($output, ',' . $fromRange); } \fwrite($output, ' +' . $toStart); if (!$this->collapseRanges || 1 !== $toRange) { \fwrite($output, ',' . $toRange); } \fwrite($output, " @@\n"); for ($i = $diffStartIndex; $i < $diffEndIndex; ++$i) { if ($diff[$i][1] === Differ::ADDED) { $this->changed = true; \fwrite($output, '+' . $diff[$i][0]); } elseif ($diff[$i][1] === Differ::REMOVED) { $this->changed = true; \fwrite($output, '-' . $diff[$i][0]); } elseif ($diff[$i][1] === Differ::OLD) { \fwrite($output, ' ' . $diff[$i][0]); } elseif ($diff[$i][1] === Differ::NO_LINE_END_EOF_WARNING) { $this->changed = true; \fwrite($output, $diff[$i][0]); } //} elseif ($diff[$i][1] === Differ::DIFF_LINE_END_WARNING) { // custom comment inserted by PHPUnit/diff package // skip //} else { // unknown/invalid //} } } } PK!E™läOOqfile-manager-advanced/application/svg-sanitizer/includes/sebastian/diff/src/Output/AbstractChunkOutputBuilder.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace SebastianBergmann\Diff\Output; abstract class AbstractChunkOutputBuilder implements DiffOutputBuilderInterface { /** * Takes input of the diff array and returns the common parts. * Iterates through diff line by line. * * @param array $diff * @param int $lineThreshold * * @return array */ protected function getCommonChunks(array $diff, int $lineThreshold = 5): array { $diffSize = \count($diff); $capturing = false; $chunkStart = 0; $chunkSize = 0; $commonChunks = []; for ($i = 0; $i < $diffSize; ++$i) { if ($diff[$i][1] === 0 /* OLD */) { if ($capturing === false) { $capturing = true; $chunkStart = $i; $chunkSize = 0; } else { ++$chunkSize; } } elseif ($capturing !== false) { if ($chunkSize >= $lineThreshold) { $commonChunks[$chunkStart] = $chunkStart + $chunkSize; } $capturing = false; } } if ($capturing !== false && $chunkSize >= $lineThreshold) { $commonChunks[$chunkStart] = $chunkStart + $chunkSize; } return $commonChunks; } } PK!¦ÿè* * ofile-manager-advanced/application/svg-sanitizer/includes/sebastian/diff/src/Output/UnifiedDiffOutputBuilder.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace SebastianBergmann\Diff\Output; use SebastianBergmann\Diff\Differ; /** * Builds a diff string representation in unified diff format in chunks. */ final class UnifiedDiffOutputBuilder extends AbstractChunkOutputBuilder { /** * @var bool */ private $collapseRanges = true; /** * @var int >= 0 */ private $commonLineThreshold = 6; /** * @var int >= 0 */ private $contextLines = 3; /** * @var string */ private $header; /** * @var bool */ private $addLineNumbers; public function __construct(string $header = "--- Original\n+++ New\n", bool $addLineNumbers = false) { $this->header = $header; $this->addLineNumbers = $addLineNumbers; } public function getDiff(array $diff): string { $buffer = \fopen('php://memory', 'r+b'); if ('' !== $this->header) { \fwrite($buffer, $this->header); if ("\n" !== \substr($this->header, -1, 1)) { \fwrite($buffer, "\n"); } } if (0 !== \count($diff)) { $this->writeDiffHunks($buffer, $diff); } $diff = \stream_get_contents($buffer, -1, 0); \fclose($buffer); // If the last char is not a linebreak: add it. // This might happen when both the `from` and `to` do not have a trailing linebreak $last = \substr($diff, -1); return "\n" !== $last && "\r" !== $last ? $diff . "\n" : $diff ; } private function writeDiffHunks($output, array $diff): void { // detect "No newline at end of file" and insert into `$diff` if needed $upperLimit = \count($diff); if (0 === $diff[$upperLimit - 1][1]) { $lc = \substr($diff[$upperLimit - 1][0], -1); if ("\n" !== $lc) { \array_splice($diff, $upperLimit, 0, [["\n\\ No newline at end of file\n", Differ::NO_LINE_END_EOF_WARNING]]); } } else { // search back for the last `+` and `-` line, // check if has trailing linebreak, else add under it warning under it $toFind = [1 => true, 2 => true]; for ($i = $upperLimit - 1; $i >= 0; --$i) { if (isset($toFind[$diff[$i][1]])) { unset($toFind[$diff[$i][1]]); $lc = \substr($diff[$i][0], -1); if ("\n" !== $lc) { \array_splice($diff, $i + 1, 0, [["\n\\ No newline at end of file\n", Differ::NO_LINE_END_EOF_WARNING]]); } if (!\count($toFind)) { break; } } } } // write hunks to output buffer $cutOff = \max($this->commonLineThreshold, $this->contextLines); $hunkCapture = false; $sameCount = $toRange = $fromRange = 0; $toStart = $fromStart = 1; foreach ($diff as $i => $entry) { if (0 === $entry[1]) { // same if (false === $hunkCapture) { ++$fromStart; ++$toStart; continue; } ++$sameCount; ++$toRange; ++$fromRange; if ($sameCount === $cutOff) { $contextStartOffset = ($hunkCapture - $this->contextLines) < 0 ? $hunkCapture : $this->contextLines ; // note: $contextEndOffset = $this->contextLines; // // because we never go beyond the end of the diff. // with the cutoff/contextlines here the follow is never true; // // if ($i - $cutOff + $this->contextLines + 1 > \count($diff)) { // $contextEndOffset = count($diff) - 1; // } // // ; that would be true for a trailing incomplete hunk case which is dealt with after this loop $this->writeHunk( $diff, $hunkCapture - $contextStartOffset, $i - $cutOff + $this->contextLines + 1, $fromStart - $contextStartOffset, $fromRange - $cutOff + $contextStartOffset + $this->contextLines, $toStart - $contextStartOffset, $toRange - $cutOff + $contextStartOffset + $this->contextLines, $output ); $fromStart += $fromRange; $toStart += $toRange; $hunkCapture = false; $sameCount = $toRange = $fromRange = 0; } continue; } $sameCount = 0; if ($entry[1] === Differ::NO_LINE_END_EOF_WARNING) { continue; } if (false === $hunkCapture) { $hunkCapture = $i; } if (Differ::ADDED === $entry[1]) { ++$toRange; } if (Differ::REMOVED === $entry[1]) { ++$fromRange; } } if (false === $hunkCapture) { return; } // we end here when cutoff (commonLineThreshold) was not reached, but we where capturing a hunk, // do not render hunk till end automatically because the number of context lines might be less than the commonLineThreshold $contextStartOffset = $hunkCapture - $this->contextLines < 0 ? $hunkCapture : $this->contextLines ; // prevent trying to write out more common lines than there are in the diff _and_ // do not write more than configured through the context lines $contextEndOffset = \min($sameCount, $this->contextLines); $fromRange -= $sameCount; $toRange -= $sameCount; $this->writeHunk( $diff, $hunkCapture - $contextStartOffset, $i - $sameCount + $contextEndOffset + 1, $fromStart - $contextStartOffset, $fromRange + $contextStartOffset + $contextEndOffset, $toStart - $contextStartOffset, $toRange + $contextStartOffset + $contextEndOffset, $output ); } private function writeHunk( array $diff, int $diffStartIndex, int $diffEndIndex, int $fromStart, int $fromRange, int $toStart, int $toRange, $output ): void { if ($this->addLineNumbers) { \fwrite($output, '@@ -' . $fromStart); if (!$this->collapseRanges || 1 !== $fromRange) { \fwrite($output, ',' . $fromRange); } \fwrite($output, ' +' . $toStart); if (!$this->collapseRanges || 1 !== $toRange) { \fwrite($output, ',' . $toRange); } \fwrite($output, " @@\n"); } else { \fwrite($output, "@@ @@\n"); } for ($i = $diffStartIndex; $i < $diffEndIndex; ++$i) { if ($diff[$i][1] === Differ::ADDED) { \fwrite($output, '+' . $diff[$i][0]); } elseif ($diff[$i][1] === Differ::REMOVED) { \fwrite($output, '-' . $diff[$i][0]); } elseif ($diff[$i][1] === Differ::OLD) { \fwrite($output, ' ' . $diff[$i][0]); } elseif ($diff[$i][1] === Differ::NO_LINE_END_EOF_WARNING) { \fwrite($output, "\n"); // $diff[$i][0] } else { /* Not changed (old) Differ::OLD or Warning Differ::DIFF_LINE_END_WARNING */ \fwrite($output, ' ' . $diff[$i][0]); } } } } PK!“zkì  qfile-manager-advanced/application/svg-sanitizer/includes/sebastian/diff/src/Output/DiffOutputBuilderInterface.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace SebastianBergmann\Diff\Output; /** * Defines how an output builder should take a generated * diff array and return a string representation of that diff. */ interface DiffOutputBuilderInterface { public function getDiff(array $diff): string; } PK!þ28>ÉÉlfile-manager-advanced/application/svg-sanitizer/includes/sebastian/diff/src/Output/DiffOnlyOutputBuilder.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace SebastianBergmann\Diff\Output; use SebastianBergmann\Diff\Differ; /** * Builds a diff string representation in a loose unified diff format * listing only changes lines. Does not include line numbers. */ final class DiffOnlyOutputBuilder implements DiffOutputBuilderInterface { /** * @var string */ private $header; public function __construct(string $header = "--- Original\n+++ New\n") { $this->header = $header; } public function getDiff(array $diff): string { $buffer = \fopen('php://memory', 'r+b'); if ('' !== $this->header) { \fwrite($buffer, $this->header); if ("\n" !== \substr($this->header, -1, 1)) { \fwrite($buffer, "\n"); } } foreach ($diff as $diffEntry) { if ($diffEntry[1] === Differ::ADDED) { \fwrite($buffer, '+' . $diffEntry[0]); } elseif ($diffEntry[1] === Differ::REMOVED) { \fwrite($buffer, '-' . $diffEntry[0]); } elseif ($diffEntry[1] === Differ::DIFF_LINE_END_WARNING) { \fwrite($buffer, ' ' . $diffEntry[0]); continue; // Warnings should not be tested for line break, it will always be there } else { /* Not changed (old) 0 */ continue; // we didn't write the non changs line, so do not add a line break either } $lc = \substr($diffEntry[0], -1); if ($lc !== "\n" && $lc !== "\r") { \fwrite($buffer, "\n"); // \No newline at end of file } } $diff = \stream_get_contents($buffer, -1, 0); \fclose($buffer); return $diff; } } PK!÷Ÿ¢<<rfile-manager-advanced/application/svg-sanitizer/includes/sebastian/diff/src/LongestCommonSubsequenceCalculator.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace SebastianBergmann\Diff; interface LongestCommonSubsequenceCalculator { /** * Calculates the longest common subsequence of two arrays. * * @param array $from * @param array $to * * @return array */ public function calculate(array $from, array $to): array; } PK!ÓAàmmUfile-manager-advanced/application/svg-sanitizer/includes/sebastian/diff/src/Chunk.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace SebastianBergmann\Diff; final class Chunk { /** * @var int */ private $start; /** * @var int */ private $startRange; /** * @var int */ private $end; /** * @var int */ private $endRange; /** * @var Line[] */ private $lines; public function __construct(int $start = 0, int $startRange = 1, int $end = 0, int $endRange = 1, array $lines = []) { $this->start = $start; $this->startRange = $startRange; $this->end = $end; $this->endRange = $endRange; $this->lines = $lines; } public function getStart(): int { return $this->start; } public function getStartRange(): int { return $this->startRange; } public function getEnd(): int { return $this->end; } public function getEndRange(): int { return $this->endRange; } /** * @return Line[] */ public function getLines(): array { return $this->lines; } /** * @param Line[] $lines */ public function setLines(array $lines): void { foreach ($lines as $line) { if (!$line instanceof Line) { throw new InvalidArgumentException; } } $this->lines = $lines; } } PK!'êË OOTfile-manager-advanced/application/svg-sanitizer/includes/sebastian/diff/src/Line.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace SebastianBergmann\Diff; final class Line { public const ADDED = 1; public const REMOVED = 2; public const UNCHANGED = 3; /** * @var int */ private $type; /** * @var string */ private $content; public function __construct(int $type = self::UNCHANGED, string $content = '') { $this->type = $type; $this->content = $content; } public function getContent(): string { return $this->content; } public function getType(): int { return $this->type; } } PK!LPWGññfile-manager-advanced/application/svg-sanitizer/includes/sebastian/diff/src/TimeEfficientLongestCommonSubsequenceCalculator.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace SebastianBergmann\Diff; final class TimeEfficientLongestCommonSubsequenceCalculator implements LongestCommonSubsequenceCalculator { /** * {@inheritdoc} */ public function calculate(array $from, array $to): array { $common = []; $fromLength = \count($from); $toLength = \count($to); $width = $fromLength + 1; $matrix = new \SplFixedArray($width * ($toLength + 1)); for ($i = 0; $i <= $fromLength; ++$i) { $matrix[$i] = 0; } for ($j = 0; $j <= $toLength; ++$j) { $matrix[$j * $width] = 0; } for ($i = 1; $i <= $fromLength; ++$i) { for ($j = 1; $j <= $toLength; ++$j) { $o = ($j * $width) + $i; // don't use max() to avoid function call overhead $firstOrLast = $from[$i - 1] === $to[$j - 1] ? $matrix[$o - $width - 1] + 1 : 0; if ($matrix[$o - 1] > $matrix[$o - $width]) { if ($firstOrLast > $matrix[$o - 1]) { $matrix[$o] = $firstOrLast; } else { $matrix[$o] = $matrix[$o - 1]; } } else { if ($firstOrLast > $matrix[$o - $width]) { $matrix[$o] = $firstOrLast; } else { $matrix[$o] = $matrix[$o - $width]; } } } } $i = $fromLength; $j = $toLength; while ($i > 0 && $j > 0) { if ($from[$i - 1] === $to[$j - 1]) { $common[] = $from[$i - 1]; --$i; --$j; } else { $o = ($j * $width) + $i; if ($matrix[$o - $width] > $matrix[$o - 1]) { --$j; } else { --$i; } } } return \array_reverse($common); } } PK!*à_ÙQfile-manager-advanced/application/svg-sanitizer/includes/sebastian/diff/README.mdnu„[µü¤# sebastian/diff Diff implementation for PHP, factored out of PHPUnit into a stand-alone component. ## Installation You can add this library as a local, per-project dependency to your project using [Composer](https://getcomposer.org/): composer require sebastian/diff If you only need this library during development, for instance to run your project's test suite, then you should add it as a development-time dependency: composer require --dev sebastian/diff ### Usage #### Generating diff The `Differ` class can be used to generate a textual representation of the difference between two strings: ```php diff('foo', 'bar'); ``` The code above yields the output below: ```diff --- Original +++ New @@ @@ -foo +bar ``` There are three output builders available in this package: #### UnifiedDiffOutputBuilder This is default builder, which generates the output close to udiff and is used by PHPUnit. ```php diff('foo', 'bar'); ``` #### StrictUnifiedDiffOutputBuilder Generates (strict) Unified diff's (unidiffs) with hunks, similar to `diff -u` and compatible with `patch` and `git apply`. ```php true, // ranges of length one are rendered with the trailing `,1` 'commonLineThreshold' => 6, // number of same lines before ending a new hunk and creating a new one (if needed) 'contextLines' => 3, // like `diff: -u, -U NUM, --unified[=NUM]`, for patch/git apply compatibility best to keep at least @ 3 'fromFile' => null, 'fromFileDate' => null, 'toFile' => null, 'toFileDate' => null, ]); $differ = new Differ($builder); print $differ->diff('foo', 'bar'); ``` #### DiffOnlyOutputBuilder Output only the lines that differ. ```php diff('foo', 'bar'); ``` #### DiffOutputBuilderInterface You can pass any output builder to the `Differ` class as longs as it implements the `DiffOutputBuilderInterface`. #### Parsing diff The `Parser` class can be used to parse a unified diff into an object graph: ```php use SebastianBergmann\Diff\Parser; use SebastianBergmann\Git; $git = new Git('/usr/local/src/money'); $diff = $git->getDiff( '948a1a07768d8edd10dcefa8315c1cbeffb31833', 'c07a373d2399f3e686234c4f7f088d635eb9641b' ); $parser = new Parser; print_r($parser->parse($diff)); ``` The code above yields the output below: Array ( [0] => SebastianBergmann\Diff\Diff Object ( [from:SebastianBergmann\Diff\Diff:private] => a/tests/MoneyTest.php [to:SebastianBergmann\Diff\Diff:private] => b/tests/MoneyTest.php [chunks:SebastianBergmann\Diff\Diff:private] => Array ( [0] => SebastianBergmann\Diff\Chunk Object ( [start:SebastianBergmann\Diff\Chunk:private] => 87 [startRange:SebastianBergmann\Diff\Chunk:private] => 7 [end:SebastianBergmann\Diff\Chunk:private] => 87 [endRange:SebastianBergmann\Diff\Chunk:private] => 7 [lines:SebastianBergmann\Diff\Chunk:private] => Array ( [0] => SebastianBergmann\Diff\Line Object ( [type:SebastianBergmann\Diff\Line:private] => 3 [content:SebastianBergmann\Diff\Line:private] => * @covers SebastianBergmann\Money\Money::add ) [1] => SebastianBergmann\Diff\Line Object ( [type:SebastianBergmann\Diff\Line:private] => 3 [content:SebastianBergmann\Diff\Line:private] => * @covers SebastianBergmann\Money\Money::newMoney ) [2] => SebastianBergmann\Diff\Line Object ( [type:SebastianBergmann\Diff\Line:private] => 3 [content:SebastianBergmann\Diff\Line:private] => */ ) [3] => SebastianBergmann\Diff\Line Object ( [type:SebastianBergmann\Diff\Line:private] => 2 [content:SebastianBergmann\Diff\Line:private] => public function testAnotherMoneyWithSameCurrencyObjectCanBeAdded() ) [4] => SebastianBergmann\Diff\Line Object ( [type:SebastianBergmann\Diff\Line:private] => 1 [content:SebastianBergmann\Diff\Line:private] => public function testAnotherMoneyObjectWithSameCurrencyCanBeAdded() ) [5] => SebastianBergmann\Diff\Line Object ( [type:SebastianBergmann\Diff\Line:private] => 3 [content:SebastianBergmann\Diff\Line:private] => { ) [6] => SebastianBergmann\Diff\Line Object ( [type:SebastianBergmann\Diff\Line:private] => 3 [content:SebastianBergmann\Diff\Line:private] => $a = new Money(1, new Currency('EUR')); ) [7] => SebastianBergmann\Diff\Line Object ( [type:SebastianBergmann\Diff\Line:private] => 3 [content:SebastianBergmann\Diff\Line:private] => $b = new Money(2, new Currency('EUR')); ) ) ) ) ) ) PK!Dte#  Ofile-manager-advanced/application/svg-sanitizer/includes/sebastian/diff/LICENSEnu„[µü¤sebastian/diff Copyright (c) 2002-2019, Sebastian Bergmann . All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. * Neither the name of Sebastian Bergmann nor the names of his contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. PK!íhPëëdfile-manager-advanced/application/svg-sanitizer/includes/sebastian/resource-operations/composer.jsonnu„[µü¤{ "name": "sebastian/resource-operations", "description": "Provides a list of PHP built-in functions that operate on resources", "homepage": "https://www.github.com/sebastianbergmann/resource-operations", "license": "BSD-3-Clause", "authors": [ { "name": "Sebastian Bergmann", "email": "sebastian@phpunit.de" } ], "require": { "php": ">=7.1" }, "autoload": { "classmap": [ "src/" ] }, "config": { "platform": { "php": "7.1.0" }, "optimize-autoloader": true, "sort-packages": true }, "extra": { "branch-alias": { "dev-master": "2.0-dev" } } } PK!>m1�ÜÜcfile-manager-advanced/application/svg-sanitizer/includes/sebastian/resource-operations/ChangeLog.mdnu„[µü¤# ChangeLog All notable changes are documented in this file using the [Keep a CHANGELOG](https://keepachangelog.com/) principles. ## [2.0.3] - 2024-03-01 * No code changes, only updated `.gitattributes` to not export non-essential files. ## [2.0.2] - 2020-11-30 ### Changed * Changed PHP version constraint in `composer.json` from `^7.1` to `>=7.1` ## [2.0.1] - 2018-10-04 ### Fixed * Functions and methods with nullable parameters of type `resource` are now also considered ## [2.0.0] - 2018-09-27 ### Changed * [FunctionSignatureMap.php](https://raw.githubusercontent.com/phan/phan/master/src/Phan/Language/Internal/FunctionSignatureMap.php) from `phan/phan` is now used instead of [arginfo.php](https://raw.githubusercontent.com/rlerdorf/phan/master/includes/arginfo.php) from `rlerdorf/phan` ### Removed * This component is no longer supported on PHP 5.6 and PHP 7.0 ## 1.0.0 - 2015-07-28 * Initial release [2.0.3]: https://github.com/sebastianbergmann/comparator/compare/2.0.2...2.0.3 [2.0.2]: https://github.com/sebastianbergmann/comparator/compare/2.0.1...2.0.2 [2.0.1]: https://github.com/sebastianbergmann/comparator/compare/2.0.0...2.0.1 [2.0.0]: https://github.com/sebastianbergmann/comparator/compare/1.0.0...2.0.0 PK!6Giiqfile-manager-advanced/application/svg-sanitizer/includes/sebastian/resource-operations/src/ResourceOperations.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace SebastianBergmann\ResourceOperations; final class ResourceOperations { /** * @return string[] */ public static function getFunctions(): array { return [ 'Directory::close', 'Directory::read', 'Directory::rewind', 'DirectoryIterator::openFile', 'FilesystemIterator::openFile', 'Gmagick::readimagefile', 'HttpResponse::getRequestBodyStream', 'HttpResponse::getStream', 'HttpResponse::setStream', 'Imagick::pingImageFile', 'Imagick::readImageFile', 'Imagick::writeImageFile', 'Imagick::writeImagesFile', 'MongoGridFSCursor::__construct', 'MongoGridFSFile::getResource', 'MysqlndUhConnection::stmtInit', 'MysqlndUhConnection::storeResult', 'MysqlndUhConnection::useResult', 'PDF_activate_item', 'PDF_add_launchlink', 'PDF_add_locallink', 'PDF_add_nameddest', 'PDF_add_note', 'PDF_add_pdflink', 'PDF_add_table_cell', 'PDF_add_textflow', 'PDF_add_thumbnail', 'PDF_add_weblink', 'PDF_arc', 'PDF_arcn', 'PDF_attach_file', 'PDF_begin_document', 'PDF_begin_font', 'PDF_begin_glyph', 'PDF_begin_item', 'PDF_begin_layer', 'PDF_begin_page', 'PDF_begin_page_ext', 'PDF_begin_pattern', 'PDF_begin_template', 'PDF_begin_template_ext', 'PDF_circle', 'PDF_clip', 'PDF_close', 'PDF_close_image', 'PDF_close_pdi', 'PDF_close_pdi_page', 'PDF_closepath', 'PDF_closepath_fill_stroke', 'PDF_closepath_stroke', 'PDF_concat', 'PDF_continue_text', 'PDF_create_3dview', 'PDF_create_action', 'PDF_create_annotation', 'PDF_create_bookmark', 'PDF_create_field', 'PDF_create_fieldgroup', 'PDF_create_gstate', 'PDF_create_pvf', 'PDF_create_textflow', 'PDF_curveto', 'PDF_define_layer', 'PDF_delete', 'PDF_delete_pvf', 'PDF_delete_table', 'PDF_delete_textflow', 'PDF_encoding_set_char', 'PDF_end_document', 'PDF_end_font', 'PDF_end_glyph', 'PDF_end_item', 'PDF_end_layer', 'PDF_end_page', 'PDF_end_page_ext', 'PDF_end_pattern', 'PDF_end_template', 'PDF_endpath', 'PDF_fill', 'PDF_fill_imageblock', 'PDF_fill_pdfblock', 'PDF_fill_stroke', 'PDF_fill_textblock', 'PDF_findfont', 'PDF_fit_image', 'PDF_fit_pdi_page', 'PDF_fit_table', 'PDF_fit_textflow', 'PDF_fit_textline', 'PDF_get_apiname', 'PDF_get_buffer', 'PDF_get_errmsg', 'PDF_get_errnum', 'PDF_get_parameter', 'PDF_get_pdi_parameter', 'PDF_get_pdi_value', 'PDF_get_value', 'PDF_info_font', 'PDF_info_matchbox', 'PDF_info_table', 'PDF_info_textflow', 'PDF_info_textline', 'PDF_initgraphics', 'PDF_lineto', 'PDF_load_3ddata', 'PDF_load_font', 'PDF_load_iccprofile', 'PDF_load_image', 'PDF_makespotcolor', 'PDF_moveto', 'PDF_new', 'PDF_open_ccitt', 'PDF_open_file', 'PDF_open_image', 'PDF_open_image_file', 'PDF_open_memory_image', 'PDF_open_pdi', 'PDF_open_pdi_document', 'PDF_open_pdi_page', 'PDF_pcos_get_number', 'PDF_pcos_get_stream', 'PDF_pcos_get_string', 'PDF_place_image', 'PDF_place_pdi_page', 'PDF_process_pdi', 'PDF_rect', 'PDF_restore', 'PDF_resume_page', 'PDF_rotate', 'PDF_save', 'PDF_scale', 'PDF_set_border_color', 'PDF_set_border_dash', 'PDF_set_border_style', 'PDF_set_gstate', 'PDF_set_info', 'PDF_set_layer_dependency', 'PDF_set_parameter', 'PDF_set_text_pos', 'PDF_set_value', 'PDF_setcolor', 'PDF_setdash', 'PDF_setdashpattern', 'PDF_setflat', 'PDF_setfont', 'PDF_setgray', 'PDF_setgray_fill', 'PDF_setgray_stroke', 'PDF_setlinecap', 'PDF_setlinejoin', 'PDF_setlinewidth', 'PDF_setmatrix', 'PDF_setmiterlimit', 'PDF_setrgbcolor', 'PDF_setrgbcolor_fill', 'PDF_setrgbcolor_stroke', 'PDF_shading', 'PDF_shading_pattern', 'PDF_shfill', 'PDF_show', 'PDF_show_boxed', 'PDF_show_xy', 'PDF_skew', 'PDF_stringwidth', 'PDF_stroke', 'PDF_suspend_page', 'PDF_translate', 'PDF_utf16_to_utf8', 'PDF_utf32_to_utf16', 'PDF_utf8_to_utf16', 'PDO::pgsqlLOBOpen', 'RarEntry::getStream', 'SQLite3::openBlob', 'SWFMovie::saveToFile', 'SplFileInfo::openFile', 'SplFileObject::openFile', 'SplTempFileObject::openFile', 'V8Js::compileString', 'V8Js::executeScript', 'Vtiful\Kernel\Excel::setColumn', 'Vtiful\Kernel\Excel::setRow', 'Vtiful\Kernel\Format::align', 'Vtiful\Kernel\Format::bold', 'Vtiful\Kernel\Format::italic', 'Vtiful\Kernel\Format::underline', 'XMLWriter::openMemory', 'XMLWriter::openURI', 'ZipArchive::getStream', 'Zookeeper::setLogStream', 'apc_bin_dumpfile', 'apc_bin_loadfile', 'bbcode_add_element', 'bbcode_add_smiley', 'bbcode_create', 'bbcode_destroy', 'bbcode_parse', 'bbcode_set_arg_parser', 'bbcode_set_flags', 'bcompiler_read', 'bcompiler_write_class', 'bcompiler_write_constant', 'bcompiler_write_exe_footer', 'bcompiler_write_file', 'bcompiler_write_footer', 'bcompiler_write_function', 'bcompiler_write_functions_from_file', 'bcompiler_write_header', 'bcompiler_write_included_filename', 'bzclose', 'bzerrno', 'bzerror', 'bzerrstr', 'bzflush', 'bzopen', 'bzread', 'bzwrite', 'cairo_surface_write_to_png', 'closedir', 'copy', 'crack_closedict', 'crack_opendict', 'cubrid_bind', 'cubrid_close_prepare', 'cubrid_close_request', 'cubrid_col_get', 'cubrid_col_size', 'cubrid_column_names', 'cubrid_column_types', 'cubrid_commit', 'cubrid_connect', 'cubrid_connect_with_url', 'cubrid_current_oid', 'cubrid_db_parameter', 'cubrid_disconnect', 'cubrid_drop', 'cubrid_fetch', 'cubrid_free_result', 'cubrid_get', 'cubrid_get_autocommit', 'cubrid_get_charset', 'cubrid_get_class_name', 'cubrid_get_db_parameter', 'cubrid_get_query_timeout', 'cubrid_get_server_info', 'cubrid_insert_id', 'cubrid_is_instance', 'cubrid_lob2_bind', 'cubrid_lob2_close', 'cubrid_lob2_export', 'cubrid_lob2_import', 'cubrid_lob2_new', 'cubrid_lob2_read', 'cubrid_lob2_seek', 'cubrid_lob2_seek64', 'cubrid_lob2_size', 'cubrid_lob2_size64', 'cubrid_lob2_tell', 'cubrid_lob2_tell64', 'cubrid_lob2_write', 'cubrid_lob_export', 'cubrid_lob_get', 'cubrid_lob_send', 'cubrid_lob_size', 'cubrid_lock_read', 'cubrid_lock_write', 'cubrid_move_cursor', 'cubrid_next_result', 'cubrid_num_cols', 'cubrid_num_rows', 'cubrid_pconnect', 'cubrid_pconnect_with_url', 'cubrid_prepare', 'cubrid_put', 'cubrid_query', 'cubrid_rollback', 'cubrid_schema', 'cubrid_seq_add', 'cubrid_seq_drop', 'cubrid_seq_insert', 'cubrid_seq_put', 'cubrid_set_add', 'cubrid_set_autocommit', 'cubrid_set_db_parameter', 'cubrid_set_drop', 'cubrid_set_query_timeout', 'cubrid_unbuffered_query', 'curl_close', 'curl_copy_handle', 'curl_errno', 'curl_error', 'curl_escape', 'curl_exec', 'curl_getinfo', 'curl_multi_add_handle', 'curl_multi_close', 'curl_multi_errno', 'curl_multi_exec', 'curl_multi_getcontent', 'curl_multi_info_read', 'curl_multi_remove_handle', 'curl_multi_select', 'curl_multi_setopt', 'curl_pause', 'curl_reset', 'curl_setopt', 'curl_setopt_array', 'curl_share_close', 'curl_share_errno', 'curl_share_init', 'curl_share_setopt', 'curl_unescape', 'cyrus_authenticate', 'cyrus_bind', 'cyrus_close', 'cyrus_connect', 'cyrus_query', 'cyrus_unbind', 'db2_autocommit', 'db2_bind_param', 'db2_client_info', 'db2_close', 'db2_column_privileges', 'db2_columns', 'db2_commit', 'db2_conn_error', 'db2_conn_errormsg', 'db2_connect', 'db2_cursor_type', 'db2_exec', 'db2_execute', 'db2_fetch_array', 'db2_fetch_assoc', 'db2_fetch_both', 'db2_fetch_object', 'db2_fetch_row', 'db2_field_display_size', 'db2_field_name', 'db2_field_num', 'db2_field_precision', 'db2_field_scale', 'db2_field_type', 'db2_field_width', 'db2_foreign_keys', 'db2_free_result', 'db2_free_stmt', 'db2_get_option', 'db2_last_insert_id', 'db2_lob_read', 'db2_next_result', 'db2_num_fields', 'db2_num_rows', 'db2_pclose', 'db2_pconnect', 'db2_prepare', 'db2_primary_keys', 'db2_procedure_columns', 'db2_procedures', 'db2_result', 'db2_rollback', 'db2_server_info', 'db2_set_option', 'db2_special_columns', 'db2_statistics', 'db2_stmt_error', 'db2_stmt_errormsg', 'db2_table_privileges', 'db2_tables', 'dba_close', 'dba_delete', 'dba_exists', 'dba_fetch', 'dba_firstkey', 'dba_insert', 'dba_nextkey', 'dba_open', 'dba_optimize', 'dba_popen', 'dba_replace', 'dba_sync', 'dbplus_add', 'dbplus_aql', 'dbplus_close', 'dbplus_curr', 'dbplus_find', 'dbplus_first', 'dbplus_flush', 'dbplus_freelock', 'dbplus_freerlocks', 'dbplus_getlock', 'dbplus_getunique', 'dbplus_info', 'dbplus_last', 'dbplus_lockrel', 'dbplus_next', 'dbplus_open', 'dbplus_prev', 'dbplus_rchperm', 'dbplus_rcreate', 'dbplus_rcrtexact', 'dbplus_rcrtlike', 'dbplus_restorepos', 'dbplus_rkeys', 'dbplus_ropen', 'dbplus_rquery', 'dbplus_rrename', 'dbplus_rsecindex', 'dbplus_runlink', 'dbplus_rzap', 'dbplus_savepos', 'dbplus_setindex', 'dbplus_setindexbynumber', 'dbplus_sql', 'dbplus_tremove', 'dbplus_undo', 'dbplus_undoprepare', 'dbplus_unlockrel', 'dbplus_unselect', 'dbplus_update', 'dbplus_xlockrel', 'dbplus_xunlockrel', 'deflate_add', 'dio_close', 'dio_fcntl', 'dio_open', 'dio_read', 'dio_seek', 'dio_stat', 'dio_tcsetattr', 'dio_truncate', 'dio_write', 'dir', 'eio_busy', 'eio_cancel', 'eio_chmod', 'eio_chown', 'eio_close', 'eio_custom', 'eio_dup2', 'eio_fallocate', 'eio_fchmod', 'eio_fchown', 'eio_fdatasync', 'eio_fstat', 'eio_fstatvfs', 'eio_fsync', 'eio_ftruncate', 'eio_futime', 'eio_get_last_error', 'eio_grp', 'eio_grp_add', 'eio_grp_cancel', 'eio_grp_limit', 'eio_link', 'eio_lstat', 'eio_mkdir', 'eio_mknod', 'eio_nop', 'eio_open', 'eio_read', 'eio_readahead', 'eio_readdir', 'eio_readlink', 'eio_realpath', 'eio_rename', 'eio_rmdir', 'eio_seek', 'eio_sendfile', 'eio_stat', 'eio_statvfs', 'eio_symlink', 'eio_sync', 'eio_sync_file_range', 'eio_syncfs', 'eio_truncate', 'eio_unlink', 'eio_utime', 'eio_write', 'enchant_broker_describe', 'enchant_broker_dict_exists', 'enchant_broker_free', 'enchant_broker_free_dict', 'enchant_broker_get_dict_path', 'enchant_broker_get_error', 'enchant_broker_init', 'enchant_broker_list_dicts', 'enchant_broker_request_dict', 'enchant_broker_request_pwl_dict', 'enchant_broker_set_dict_path', 'enchant_broker_set_ordering', 'enchant_dict_add_to_personal', 'enchant_dict_add_to_session', 'enchant_dict_check', 'enchant_dict_describe', 'enchant_dict_get_error', 'enchant_dict_is_in_session', 'enchant_dict_quick_check', 'enchant_dict_store_replacement', 'enchant_dict_suggest', 'event_add', 'event_base_free', 'event_base_loop', 'event_base_loopbreak', 'event_base_loopexit', 'event_base_new', 'event_base_priority_init', 'event_base_reinit', 'event_base_set', 'event_buffer_base_set', 'event_buffer_disable', 'event_buffer_enable', 'event_buffer_fd_set', 'event_buffer_free', 'event_buffer_new', 'event_buffer_priority_set', 'event_buffer_read', 'event_buffer_set_callback', 'event_buffer_timeout_set', 'event_buffer_watermark_set', 'event_buffer_write', 'event_del', 'event_free', 'event_new', 'event_priority_set', 'event_set', 'event_timer_add', 'event_timer_del', 'event_timer_pending', 'event_timer_set', 'expect_expectl', 'expect_popen', 'fam_cancel_monitor', 'fam_close', 'fam_monitor_collection', 'fam_monitor_directory', 'fam_monitor_file', 'fam_next_event', 'fam_open', 'fam_pending', 'fam_resume_monitor', 'fam_suspend_monitor', 'fann_cascadetrain_on_data', 'fann_cascadetrain_on_file', 'fann_clear_scaling_params', 'fann_copy', 'fann_create_from_file', 'fann_create_shortcut_array', 'fann_create_standard', 'fann_create_standard_array', 'fann_create_train', 'fann_create_train_from_callback', 'fann_descale_input', 'fann_descale_output', 'fann_descale_train', 'fann_destroy', 'fann_destroy_train', 'fann_duplicate_train_data', 'fann_get_MSE', 'fann_get_activation_function', 'fann_get_activation_steepness', 'fann_get_bias_array', 'fann_get_bit_fail', 'fann_get_bit_fail_limit', 'fann_get_cascade_activation_functions', 'fann_get_cascade_activation_functions_count', 'fann_get_cascade_activation_steepnesses', 'fann_get_cascade_activation_steepnesses_count', 'fann_get_cascade_candidate_change_fraction', 'fann_get_cascade_candidate_limit', 'fann_get_cascade_candidate_stagnation_epochs', 'fann_get_cascade_max_cand_epochs', 'fann_get_cascade_max_out_epochs', 'fann_get_cascade_min_cand_epochs', 'fann_get_cascade_min_out_epochs', 'fann_get_cascade_num_candidate_groups', 'fann_get_cascade_num_candidates', 'fann_get_cascade_output_change_fraction', 'fann_get_cascade_output_stagnation_epochs', 'fann_get_cascade_weight_multiplier', 'fann_get_connection_array', 'fann_get_connection_rate', 'fann_get_errno', 'fann_get_errstr', 'fann_get_layer_array', 'fann_get_learning_momentum', 'fann_get_learning_rate', 'fann_get_network_type', 'fann_get_num_input', 'fann_get_num_layers', 'fann_get_num_output', 'fann_get_quickprop_decay', 'fann_get_quickprop_mu', 'fann_get_rprop_decrease_factor', 'fann_get_rprop_delta_max', 'fann_get_rprop_delta_min', 'fann_get_rprop_delta_zero', 'fann_get_rprop_increase_factor', 'fann_get_sarprop_step_error_shift', 'fann_get_sarprop_step_error_threshold_factor', 'fann_get_sarprop_temperature', 'fann_get_sarprop_weight_decay_shift', 'fann_get_total_connections', 'fann_get_total_neurons', 'fann_get_train_error_function', 'fann_get_train_stop_function', 'fann_get_training_algorithm', 'fann_init_weights', 'fann_length_train_data', 'fann_merge_train_data', 'fann_num_input_train_data', 'fann_num_output_train_data', 'fann_randomize_weights', 'fann_read_train_from_file', 'fann_reset_errno', 'fann_reset_errstr', 'fann_run', 'fann_save', 'fann_save_train', 'fann_scale_input', 'fann_scale_input_train_data', 'fann_scale_output', 'fann_scale_output_train_data', 'fann_scale_train', 'fann_scale_train_data', 'fann_set_activation_function', 'fann_set_activation_function_hidden', 'fann_set_activation_function_layer', 'fann_set_activation_function_output', 'fann_set_activation_steepness', 'fann_set_activation_steepness_hidden', 'fann_set_activation_steepness_layer', 'fann_set_activation_steepness_output', 'fann_set_bit_fail_limit', 'fann_set_callback', 'fann_set_cascade_activation_functions', 'fann_set_cascade_activation_steepnesses', 'fann_set_cascade_candidate_change_fraction', 'fann_set_cascade_candidate_limit', 'fann_set_cascade_candidate_stagnation_epochs', 'fann_set_cascade_max_cand_epochs', 'fann_set_cascade_max_out_epochs', 'fann_set_cascade_min_cand_epochs', 'fann_set_cascade_min_out_epochs', 'fann_set_cascade_num_candidate_groups', 'fann_set_cascade_output_change_fraction', 'fann_set_cascade_output_stagnation_epochs', 'fann_set_cascade_weight_multiplier', 'fann_set_error_log', 'fann_set_input_scaling_params', 'fann_set_learning_momentum', 'fann_set_learning_rate', 'fann_set_output_scaling_params', 'fann_set_quickprop_decay', 'fann_set_quickprop_mu', 'fann_set_rprop_decrease_factor', 'fann_set_rprop_delta_max', 'fann_set_rprop_delta_min', 'fann_set_rprop_delta_zero', 'fann_set_rprop_increase_factor', 'fann_set_sarprop_step_error_shift', 'fann_set_sarprop_step_error_threshold_factor', 'fann_set_sarprop_temperature', 'fann_set_sarprop_weight_decay_shift', 'fann_set_scaling_params', 'fann_set_train_error_function', 'fann_set_train_stop_function', 'fann_set_training_algorithm', 'fann_set_weight', 'fann_set_weight_array', 'fann_shuffle_train_data', 'fann_subset_train_data', 'fann_test', 'fann_test_data', 'fann_train', 'fann_train_epoch', 'fann_train_on_data', 'fann_train_on_file', 'fbsql_affected_rows', 'fbsql_autocommit', 'fbsql_blob_size', 'fbsql_change_user', 'fbsql_clob_size', 'fbsql_close', 'fbsql_commit', 'fbsql_connect', 'fbsql_create_blob', 'fbsql_create_clob', 'fbsql_create_db', 'fbsql_data_seek', 'fbsql_database', 'fbsql_database_password', 'fbsql_db_query', 'fbsql_db_status', 'fbsql_drop_db', 'fbsql_errno', 'fbsql_error', 'fbsql_fetch_array', 'fbsql_fetch_assoc', 'fbsql_fetch_field', 'fbsql_fetch_lengths', 'fbsql_fetch_object', 'fbsql_fetch_row', 'fbsql_field_flags', 'fbsql_field_len', 'fbsql_field_name', 'fbsql_field_seek', 'fbsql_field_table', 'fbsql_field_type', 'fbsql_free_result', 'fbsql_get_autostart_info', 'fbsql_hostname', 'fbsql_insert_id', 'fbsql_list_dbs', 'fbsql_list_fields', 'fbsql_list_tables', 'fbsql_next_result', 'fbsql_num_fields', 'fbsql_num_rows', 'fbsql_password', 'fbsql_pconnect', 'fbsql_query', 'fbsql_read_blob', 'fbsql_read_clob', 'fbsql_result', 'fbsql_rollback', 'fbsql_rows_fetched', 'fbsql_select_db', 'fbsql_set_characterset', 'fbsql_set_lob_mode', 'fbsql_set_password', 'fbsql_set_transaction', 'fbsql_start_db', 'fbsql_stop_db', 'fbsql_table_name', 'fbsql_username', 'fclose', 'fdf_add_doc_javascript', 'fdf_add_template', 'fdf_close', 'fdf_create', 'fdf_enum_values', 'fdf_get_ap', 'fdf_get_attachment', 'fdf_get_encoding', 'fdf_get_file', 'fdf_get_flags', 'fdf_get_opt', 'fdf_get_status', 'fdf_get_value', 'fdf_get_version', 'fdf_next_field_name', 'fdf_open', 'fdf_open_string', 'fdf_remove_item', 'fdf_save', 'fdf_save_string', 'fdf_set_ap', 'fdf_set_encoding', 'fdf_set_file', 'fdf_set_flags', 'fdf_set_javascript_action', 'fdf_set_on_import_javascript', 'fdf_set_opt', 'fdf_set_status', 'fdf_set_submit_form_action', 'fdf_set_target_frame', 'fdf_set_value', 'fdf_set_version', 'feof', 'fflush', 'ffmpeg_frame::__construct', 'ffmpeg_frame::toGDImage', 'fgetc', 'fgetcsv', 'fgets', 'fgetss', 'file', 'file_get_contents', 'file_put_contents', 'finfo::buffer', 'finfo::file', 'finfo_buffer', 'finfo_close', 'finfo_file', 'finfo_open', 'finfo_set_flags', 'flock', 'fopen', 'fpassthru', 'fprintf', 'fputcsv', 'fputs', 'fread', 'fscanf', 'fseek', 'fstat', 'ftell', 'ftp_alloc', 'ftp_append', 'ftp_cdup', 'ftp_chdir', 'ftp_chmod', 'ftp_close', 'ftp_delete', 'ftp_exec', 'ftp_fget', 'ftp_fput', 'ftp_get', 'ftp_get_option', 'ftp_login', 'ftp_mdtm', 'ftp_mkdir', 'ftp_mlsd', 'ftp_nb_continue', 'ftp_nb_fget', 'ftp_nb_fput', 'ftp_nb_get', 'ftp_nb_put', 'ftp_nlist', 'ftp_pasv', 'ftp_put', 'ftp_pwd', 'ftp_quit', 'ftp_raw', 'ftp_rawlist', 'ftp_rename', 'ftp_rmdir', 'ftp_set_option', 'ftp_site', 'ftp_size', 'ftp_systype', 'ftruncate', 'fwrite', 'get_resource_type', 'gmp_div', 'gnupg::init', 'gnupg_adddecryptkey', 'gnupg_addencryptkey', 'gnupg_addsignkey', 'gnupg_cleardecryptkeys', 'gnupg_clearencryptkeys', 'gnupg_clearsignkeys', 'gnupg_decrypt', 'gnupg_decryptverify', 'gnupg_encrypt', 'gnupg_encryptsign', 'gnupg_export', 'gnupg_geterror', 'gnupg_getprotocol', 'gnupg_import', 'gnupg_init', 'gnupg_keyinfo', 'gnupg_setarmor', 'gnupg_seterrormode', 'gnupg_setsignmode', 'gnupg_sign', 'gnupg_verify', 'gupnp_context_get_host_ip', 'gupnp_context_get_port', 'gupnp_context_get_subscription_timeout', 'gupnp_context_host_path', 'gupnp_context_new', 'gupnp_context_set_subscription_timeout', 'gupnp_context_timeout_add', 'gupnp_context_unhost_path', 'gupnp_control_point_browse_start', 'gupnp_control_point_browse_stop', 'gupnp_control_point_callback_set', 'gupnp_control_point_new', 'gupnp_device_action_callback_set', 'gupnp_device_info_get', 'gupnp_device_info_get_service', 'gupnp_root_device_get_available', 'gupnp_root_device_get_relative_location', 'gupnp_root_device_new', 'gupnp_root_device_set_available', 'gupnp_root_device_start', 'gupnp_root_device_stop', 'gupnp_service_action_get', 'gupnp_service_action_return', 'gupnp_service_action_return_error', 'gupnp_service_action_set', 'gupnp_service_freeze_notify', 'gupnp_service_info_get', 'gupnp_service_info_get_introspection', 'gupnp_service_introspection_get_state_variable', 'gupnp_service_notify', 'gupnp_service_proxy_action_get', 'gupnp_service_proxy_action_set', 'gupnp_service_proxy_add_notify', 'gupnp_service_proxy_callback_set', 'gupnp_service_proxy_get_subscribed', 'gupnp_service_proxy_remove_notify', 'gupnp_service_proxy_send_action', 'gupnp_service_proxy_set_subscribed', 'gupnp_service_thaw_notify', 'gzclose', 'gzeof', 'gzgetc', 'gzgets', 'gzgetss', 'gzpassthru', 'gzputs', 'gzread', 'gzrewind', 'gzseek', 'gztell', 'gzwrite', 'hash_update_stream', 'http\Env\Response::send', 'http_get_request_body_stream', 'ibase_add_user', 'ibase_affected_rows', 'ibase_backup', 'ibase_blob_add', 'ibase_blob_cancel', 'ibase_blob_close', 'ibase_blob_create', 'ibase_blob_get', 'ibase_blob_open', 'ibase_close', 'ibase_commit', 'ibase_commit_ret', 'ibase_connect', 'ibase_db_info', 'ibase_delete_user', 'ibase_drop_db', 'ibase_execute', 'ibase_fetch_assoc', 'ibase_fetch_object', 'ibase_fetch_row', 'ibase_field_info', 'ibase_free_event_handler', 'ibase_free_query', 'ibase_free_result', 'ibase_gen_id', 'ibase_maintain_db', 'ibase_modify_user', 'ibase_name_result', 'ibase_num_fields', 'ibase_num_params', 'ibase_param_info', 'ibase_pconnect', 'ibase_prepare', 'ibase_query', 'ibase_restore', 'ibase_rollback', 'ibase_rollback_ret', 'ibase_server_info', 'ibase_service_attach', 'ibase_service_detach', 'ibase_set_event_handler', 'ibase_trans', 'ifx_affected_rows', 'ifx_close', 'ifx_connect', 'ifx_do', 'ifx_error', 'ifx_fetch_row', 'ifx_fieldproperties', 'ifx_fieldtypes', 'ifx_free_result', 'ifx_getsqlca', 'ifx_htmltbl_result', 'ifx_num_fields', 'ifx_num_rows', 'ifx_pconnect', 'ifx_prepare', 'ifx_query', 'image2wbmp', 'imageaffine', 'imagealphablending', 'imageantialias', 'imagearc', 'imagebmp', 'imagechar', 'imagecharup', 'imagecolorallocate', 'imagecolorallocatealpha', 'imagecolorat', 'imagecolorclosest', 'imagecolorclosestalpha', 'imagecolorclosesthwb', 'imagecolordeallocate', 'imagecolorexact', 'imagecolorexactalpha', 'imagecolormatch', 'imagecolorresolve', 'imagecolorresolvealpha', 'imagecolorset', 'imagecolorsforindex', 'imagecolorstotal', 'imagecolortransparent', 'imageconvolution', 'imagecopy', 'imagecopymerge', 'imagecopymergegray', 'imagecopyresampled', 'imagecopyresized', 'imagecrop', 'imagecropauto', 'imagedashedline', 'imagedestroy', 'imageellipse', 'imagefill', 'imagefilledarc', 'imagefilledellipse', 'imagefilledpolygon', 'imagefilledrectangle', 'imagefilltoborder', 'imagefilter', 'imageflip', 'imagefttext', 'imagegammacorrect', 'imagegd', 'imagegd2', 'imagegetclip', 'imagegif', 'imagegrabscreen', 'imagegrabwindow', 'imageinterlace', 'imageistruecolor', 'imagejpeg', 'imagelayereffect', 'imageline', 'imageopenpolygon', 'imagepalettecopy', 'imagepalettetotruecolor', 'imagepng', 'imagepolygon', 'imagepsencodefont', 'imagepsextendfont', 'imagepsfreefont', 'imagepsloadfont', 'imagepsslantfont', 'imagepstext', 'imagerectangle', 'imageresolution', 'imagerotate', 'imagesavealpha', 'imagescale', 'imagesetbrush', 'imagesetclip', 'imagesetinterpolation', 'imagesetpixel', 'imagesetstyle', 'imagesetthickness', 'imagesettile', 'imagestring', 'imagestringup', 'imagesx', 'imagesy', 'imagetruecolortopalette', 'imagettftext', 'imagewbmp', 'imagewebp', 'imagexbm', 'imap_append', 'imap_body', 'imap_bodystruct', 'imap_check', 'imap_clearflag_full', 'imap_close', 'imap_create', 'imap_createmailbox', 'imap_delete', 'imap_deletemailbox', 'imap_expunge', 'imap_fetch_overview', 'imap_fetchbody', 'imap_fetchheader', 'imap_fetchmime', 'imap_fetchstructure', 'imap_fetchtext', 'imap_gc', 'imap_get_quota', 'imap_get_quotaroot', 'imap_getacl', 'imap_getmailboxes', 'imap_getsubscribed', 'imap_header', 'imap_headerinfo', 'imap_headers', 'imap_list', 'imap_listmailbox', 'imap_listscan', 'imap_listsubscribed', 'imap_lsub', 'imap_mail_copy', 'imap_mail_move', 'imap_mailboxmsginfo', 'imap_msgno', 'imap_num_msg', 'imap_num_recent', 'imap_ping', 'imap_rename', 'imap_renamemailbox', 'imap_reopen', 'imap_savebody', 'imap_scan', 'imap_scanmailbox', 'imap_search', 'imap_set_quota', 'imap_setacl', 'imap_setflag_full', 'imap_sort', 'imap_status', 'imap_subscribe', 'imap_thread', 'imap_uid', 'imap_undelete', 'imap_unsubscribe', 'inflate_add', 'inflate_get_read_len', 'inflate_get_status', 'ingres_autocommit', 'ingres_autocommit_state', 'ingres_charset', 'ingres_close', 'ingres_commit', 'ingres_connect', 'ingres_cursor', 'ingres_errno', 'ingres_error', 'ingres_errsqlstate', 'ingres_escape_string', 'ingres_execute', 'ingres_fetch_array', 'ingres_fetch_assoc', 'ingres_fetch_object', 'ingres_fetch_proc_return', 'ingres_fetch_row', 'ingres_field_length', 'ingres_field_name', 'ingres_field_nullable', 'ingres_field_precision', 'ingres_field_scale', 'ingres_field_type', 'ingres_free_result', 'ingres_next_error', 'ingres_num_fields', 'ingres_num_rows', 'ingres_pconnect', 'ingres_prepare', 'ingres_query', 'ingres_result_seek', 'ingres_rollback', 'ingres_set_environment', 'ingres_unbuffered_query', 'inotify_add_watch', 'inotify_init', 'inotify_queue_len', 'inotify_read', 'inotify_rm_watch', 'kadm5_chpass_principal', 'kadm5_create_principal', 'kadm5_delete_principal', 'kadm5_destroy', 'kadm5_flush', 'kadm5_get_policies', 'kadm5_get_principal', 'kadm5_get_principals', 'kadm5_init_with_password', 'kadm5_modify_principal', 'ldap_add', 'ldap_bind', 'ldap_close', 'ldap_compare', 'ldap_control_paged_result', 'ldap_control_paged_result_response', 'ldap_count_entries', 'ldap_delete', 'ldap_errno', 'ldap_error', 'ldap_exop', 'ldap_exop_passwd', 'ldap_exop_refresh', 'ldap_exop_whoami', 'ldap_first_attribute', 'ldap_first_entry', 'ldap_first_reference', 'ldap_free_result', 'ldap_get_attributes', 'ldap_get_dn', 'ldap_get_entries', 'ldap_get_option', 'ldap_get_values', 'ldap_get_values_len', 'ldap_mod_add', 'ldap_mod_del', 'ldap_mod_replace', 'ldap_modify', 'ldap_modify_batch', 'ldap_next_attribute', 'ldap_next_entry', 'ldap_next_reference', 'ldap_parse_exop', 'ldap_parse_reference', 'ldap_parse_result', 'ldap_rename', 'ldap_sasl_bind', 'ldap_set_option', 'ldap_set_rebind_proc', 'ldap_sort', 'ldap_start_tls', 'ldap_unbind', 'libxml_set_streams_context', 'm_checkstatus', 'm_completeauthorizations', 'm_connect', 'm_connectionerror', 'm_deletetrans', 'm_destroyconn', 'm_getcell', 'm_getcellbynum', 'm_getcommadelimited', 'm_getheader', 'm_initconn', 'm_iscommadelimited', 'm_maxconntimeout', 'm_monitor', 'm_numcolumns', 'm_numrows', 'm_parsecommadelimited', 'm_responsekeys', 'm_responseparam', 'm_returnstatus', 'm_setblocking', 'm_setdropfile', 'm_setip', 'm_setssl', 'm_setssl_cafile', 'm_setssl_files', 'm_settimeout', 'm_transactionssent', 'm_transinqueue', 'm_transkeyval', 'm_transnew', 'm_transsend', 'm_validateidentifier', 'm_verifyconnection', 'm_verifysslcert', 'mailparse_determine_best_xfer_encoding', 'mailparse_msg_create', 'mailparse_msg_extract_part', 'mailparse_msg_extract_part_file', 'mailparse_msg_extract_whole_part_file', 'mailparse_msg_free', 'mailparse_msg_get_part', 'mailparse_msg_get_part_data', 'mailparse_msg_get_structure', 'mailparse_msg_parse', 'mailparse_msg_parse_file', 'mailparse_stream_encode', 'mailparse_uudecode_all', 'maxdb::use_result', 'maxdb_affected_rows', 'maxdb_connect', 'maxdb_disable_rpl_parse', 'maxdb_dump_debug_info', 'maxdb_embedded_connect', 'maxdb_enable_reads_from_master', 'maxdb_enable_rpl_parse', 'maxdb_errno', 'maxdb_error', 'maxdb_fetch_lengths', 'maxdb_field_tell', 'maxdb_get_host_info', 'maxdb_get_proto_info', 'maxdb_get_server_info', 'maxdb_get_server_version', 'maxdb_info', 'maxdb_init', 'maxdb_insert_id', 'maxdb_master_query', 'maxdb_more_results', 'maxdb_next_result', 'maxdb_num_fields', 'maxdb_num_rows', 'maxdb_rpl_parse_enabled', 'maxdb_rpl_probe', 'maxdb_select_db', 'maxdb_sqlstate', 'maxdb_stmt::result_metadata', 'maxdb_stmt_affected_rows', 'maxdb_stmt_errno', 'maxdb_stmt_error', 'maxdb_stmt_num_rows', 'maxdb_stmt_param_count', 'maxdb_stmt_result_metadata', 'maxdb_stmt_sqlstate', 'maxdb_thread_id', 'maxdb_use_result', 'maxdb_warning_count', 'mcrypt_enc_get_algorithms_name', 'mcrypt_enc_get_block_size', 'mcrypt_enc_get_iv_size', 'mcrypt_enc_get_key_size', 'mcrypt_enc_get_modes_name', 'mcrypt_enc_get_supported_key_sizes', 'mcrypt_enc_is_block_algorithm', 'mcrypt_enc_is_block_algorithm_mode', 'mcrypt_enc_is_block_mode', 'mcrypt_enc_self_test', 'mcrypt_generic', 'mcrypt_generic_deinit', 'mcrypt_generic_end', 'mcrypt_generic_init', 'mcrypt_module_close', 'mcrypt_module_open', 'mdecrypt_generic', 'mkdir', 'mqseries_back', 'mqseries_begin', 'mqseries_close', 'mqseries_cmit', 'mqseries_conn', 'mqseries_connx', 'mqseries_disc', 'mqseries_get', 'mqseries_inq', 'mqseries_open', 'mqseries_put', 'mqseries_put1', 'mqseries_set', 'msg_get_queue', 'msg_receive', 'msg_remove_queue', 'msg_send', 'msg_set_queue', 'msg_stat_queue', 'msql_affected_rows', 'msql_close', 'msql_connect', 'msql_create_db', 'msql_data_seek', 'msql_db_query', 'msql_drop_db', 'msql_fetch_array', 'msql_fetch_field', 'msql_fetch_object', 'msql_fetch_row', 'msql_field_flags', 'msql_field_len', 'msql_field_name', 'msql_field_seek', 'msql_field_table', 'msql_field_type', 'msql_free_result', 'msql_list_dbs', 'msql_list_fields', 'msql_list_tables', 'msql_num_fields', 'msql_num_rows', 'msql_pconnect', 'msql_query', 'msql_result', 'msql_select_db', 'mssql_bind', 'mssql_close', 'mssql_connect', 'mssql_data_seek', 'mssql_execute', 'mssql_fetch_array', 'mssql_fetch_assoc', 'mssql_fetch_batch', 'mssql_fetch_field', 'mssql_fetch_object', 'mssql_fetch_row', 'mssql_field_length', 'mssql_field_name', 'mssql_field_seek', 'mssql_field_type', 'mssql_free_result', 'mssql_free_statement', 'mssql_init', 'mssql_next_result', 'mssql_num_fields', 'mssql_num_rows', 'mssql_pconnect', 'mssql_query', 'mssql_result', 'mssql_rows_affected', 'mssql_select_db', 'mysql_affected_rows', 'mysql_client_encoding', 'mysql_close', 'mysql_connect', 'mysql_create_db', 'mysql_data_seek', 'mysql_db_name', 'mysql_db_query', 'mysql_drop_db', 'mysql_errno', 'mysql_error', 'mysql_fetch_array', 'mysql_fetch_assoc', 'mysql_fetch_field', 'mysql_fetch_lengths', 'mysql_fetch_object', 'mysql_fetch_row', 'mysql_field_flags', 'mysql_field_len', 'mysql_field_name', 'mysql_field_seek', 'mysql_field_table', 'mysql_field_type', 'mysql_free_result', 'mysql_get_host_info', 'mysql_get_proto_info', 'mysql_get_server_info', 'mysql_info', 'mysql_insert_id', 'mysql_list_dbs', 'mysql_list_fields', 'mysql_list_processes', 'mysql_list_tables', 'mysql_num_fields', 'mysql_num_rows', 'mysql_pconnect', 'mysql_ping', 'mysql_query', 'mysql_real_escape_string', 'mysql_result', 'mysql_select_db', 'mysql_set_charset', 'mysql_stat', 'mysql_tablename', 'mysql_thread_id', 'mysql_unbuffered_query', 'mysqlnd_uh_convert_to_mysqlnd', 'ncurses_bottom_panel', 'ncurses_del_panel', 'ncurses_delwin', 'ncurses_getmaxyx', 'ncurses_getyx', 'ncurses_hide_panel', 'ncurses_keypad', 'ncurses_meta', 'ncurses_move_panel', 'ncurses_mvwaddstr', 'ncurses_new_panel', 'ncurses_newpad', 'ncurses_newwin', 'ncurses_panel_above', 'ncurses_panel_below', 'ncurses_panel_window', 'ncurses_pnoutrefresh', 'ncurses_prefresh', 'ncurses_replace_panel', 'ncurses_show_panel', 'ncurses_top_panel', 'ncurses_waddch', 'ncurses_waddstr', 'ncurses_wattroff', 'ncurses_wattron', 'ncurses_wattrset', 'ncurses_wborder', 'ncurses_wclear', 'ncurses_wcolor_set', 'ncurses_werase', 'ncurses_wgetch', 'ncurses_whline', 'ncurses_wmouse_trafo', 'ncurses_wmove', 'ncurses_wnoutrefresh', 'ncurses_wrefresh', 'ncurses_wstandend', 'ncurses_wstandout', 'ncurses_wvline', 'newt_button', 'newt_button_bar', 'newt_checkbox', 'newt_checkbox_get_value', 'newt_checkbox_set_flags', 'newt_checkbox_set_value', 'newt_checkbox_tree', 'newt_checkbox_tree_add_item', 'newt_checkbox_tree_find_item', 'newt_checkbox_tree_get_current', 'newt_checkbox_tree_get_entry_value', 'newt_checkbox_tree_get_multi_selection', 'newt_checkbox_tree_get_selection', 'newt_checkbox_tree_multi', 'newt_checkbox_tree_set_current', 'newt_checkbox_tree_set_entry', 'newt_checkbox_tree_set_entry_value', 'newt_checkbox_tree_set_width', 'newt_compact_button', 'newt_component_add_callback', 'newt_component_takes_focus', 'newt_create_grid', 'newt_draw_form', 'newt_entry', 'newt_entry_get_value', 'newt_entry_set', 'newt_entry_set_filter', 'newt_entry_set_flags', 'newt_form', 'newt_form_add_component', 'newt_form_add_components', 'newt_form_add_hot_key', 'newt_form_destroy', 'newt_form_get_current', 'newt_form_run', 'newt_form_set_background', 'newt_form_set_height', 'newt_form_set_size', 'newt_form_set_timer', 'newt_form_set_width', 'newt_form_watch_fd', 'newt_grid_add_components_to_form', 'newt_grid_basic_window', 'newt_grid_free', 'newt_grid_get_size', 'newt_grid_h_close_stacked', 'newt_grid_h_stacked', 'newt_grid_place', 'newt_grid_set_field', 'newt_grid_simple_window', 'newt_grid_v_close_stacked', 'newt_grid_v_stacked', 'newt_grid_wrapped_window', 'newt_grid_wrapped_window_at', 'newt_label', 'newt_label_set_text', 'newt_listbox', 'newt_listbox_append_entry', 'newt_listbox_clear', 'newt_listbox_clear_selection', 'newt_listbox_delete_entry', 'newt_listbox_get_current', 'newt_listbox_get_selection', 'newt_listbox_insert_entry', 'newt_listbox_item_count', 'newt_listbox_select_item', 'newt_listbox_set_current', 'newt_listbox_set_current_by_key', 'newt_listbox_set_data', 'newt_listbox_set_entry', 'newt_listbox_set_width', 'newt_listitem', 'newt_listitem_get_data', 'newt_listitem_set', 'newt_radio_get_current', 'newt_radiobutton', 'newt_run_form', 'newt_scale', 'newt_scale_set', 'newt_scrollbar_set', 'newt_textbox', 'newt_textbox_get_num_lines', 'newt_textbox_reflowed', 'newt_textbox_set_height', 'newt_textbox_set_text', 'newt_vertical_scrollbar', 'oci_bind_array_by_name', 'oci_bind_by_name', 'oci_cancel', 'oci_close', 'oci_commit', 'oci_connect', 'oci_define_by_name', 'oci_error', 'oci_execute', 'oci_fetch', 'oci_fetch_all', 'oci_fetch_array', 'oci_fetch_assoc', 'oci_fetch_object', 'oci_fetch_row', 'oci_field_is_null', 'oci_field_name', 'oci_field_precision', 'oci_field_scale', 'oci_field_size', 'oci_field_type', 'oci_field_type_raw', 'oci_free_cursor', 'oci_free_statement', 'oci_get_implicit_resultset', 'oci_new_collection', 'oci_new_connect', 'oci_new_cursor', 'oci_new_descriptor', 'oci_num_fields', 'oci_num_rows', 'oci_parse', 'oci_pconnect', 'oci_register_taf_callback', 'oci_result', 'oci_rollback', 'oci_server_version', 'oci_set_action', 'oci_set_client_identifier', 'oci_set_client_info', 'oci_set_module_name', 'oci_set_prefetch', 'oci_statement_type', 'oci_unregister_taf_callback', 'odbc_autocommit', 'odbc_close', 'odbc_columnprivileges', 'odbc_columns', 'odbc_commit', 'odbc_connect', 'odbc_cursor', 'odbc_data_source', 'odbc_do', 'odbc_error', 'odbc_errormsg', 'odbc_exec', 'odbc_execute', 'odbc_fetch_array', 'odbc_fetch_into', 'odbc_fetch_row', 'odbc_field_len', 'odbc_field_name', 'odbc_field_num', 'odbc_field_precision', 'odbc_field_scale', 'odbc_field_type', 'odbc_foreignkeys', 'odbc_free_result', 'odbc_gettypeinfo', 'odbc_next_result', 'odbc_num_fields', 'odbc_num_rows', 'odbc_pconnect', 'odbc_prepare', 'odbc_primarykeys', 'odbc_procedurecolumns', 'odbc_procedures', 'odbc_result', 'odbc_result_all', 'odbc_rollback', 'odbc_setoption', 'odbc_specialcolumns', 'odbc_statistics', 'odbc_tableprivileges', 'odbc_tables', 'openal_buffer_create', 'openal_buffer_data', 'openal_buffer_destroy', 'openal_buffer_get', 'openal_buffer_loadwav', 'openal_context_create', 'openal_context_current', 'openal_context_destroy', 'openal_context_process', 'openal_context_suspend', 'openal_device_close', 'openal_device_open', 'openal_source_create', 'openal_source_destroy', 'openal_source_get', 'openal_source_pause', 'openal_source_play', 'openal_source_rewind', 'openal_source_set', 'openal_source_stop', 'openal_stream', 'opendir', 'openssl_csr_new', 'openssl_dh_compute_key', 'openssl_free_key', 'openssl_pkey_export', 'openssl_pkey_free', 'openssl_pkey_get_details', 'openssl_spki_new', 'openssl_x509_free', 'pclose', 'pfsockopen', 'pg_affected_rows', 'pg_cancel_query', 'pg_client_encoding', 'pg_close', 'pg_connect_poll', 'pg_connection_busy', 'pg_connection_reset', 'pg_connection_status', 'pg_consume_input', 'pg_convert', 'pg_copy_from', 'pg_copy_to', 'pg_dbname', 'pg_delete', 'pg_end_copy', 'pg_escape_bytea', 'pg_escape_identifier', 'pg_escape_literal', 'pg_escape_string', 'pg_execute', 'pg_fetch_all', 'pg_fetch_all_columns', 'pg_fetch_array', 'pg_fetch_assoc', 'pg_fetch_row', 'pg_field_name', 'pg_field_num', 'pg_field_size', 'pg_field_table', 'pg_field_type', 'pg_field_type_oid', 'pg_flush', 'pg_free_result', 'pg_get_notify', 'pg_get_pid', 'pg_get_result', 'pg_host', 'pg_insert', 'pg_last_error', 'pg_last_notice', 'pg_last_oid', 'pg_lo_close', 'pg_lo_create', 'pg_lo_export', 'pg_lo_import', 'pg_lo_open', 'pg_lo_read', 'pg_lo_read_all', 'pg_lo_seek', 'pg_lo_tell', 'pg_lo_truncate', 'pg_lo_unlink', 'pg_lo_write', 'pg_meta_data', 'pg_num_fields', 'pg_num_rows', 'pg_options', 'pg_parameter_status', 'pg_ping', 'pg_port', 'pg_prepare', 'pg_put_line', 'pg_query', 'pg_query_params', 'pg_result_error', 'pg_result_error_field', 'pg_result_seek', 'pg_result_status', 'pg_select', 'pg_send_execute', 'pg_send_prepare', 'pg_send_query', 'pg_send_query_params', 'pg_set_client_encoding', 'pg_set_error_verbosity', 'pg_socket', 'pg_trace', 'pg_transaction_status', 'pg_tty', 'pg_untrace', 'pg_update', 'pg_version', 'php_user_filter::filter', 'proc_close', 'proc_get_status', 'proc_terminate', 'ps_add_bookmark', 'ps_add_launchlink', 'ps_add_locallink', 'ps_add_note', 'ps_add_pdflink', 'ps_add_weblink', 'ps_arc', 'ps_arcn', 'ps_begin_page', 'ps_begin_pattern', 'ps_begin_template', 'ps_circle', 'ps_clip', 'ps_close', 'ps_close_image', 'ps_closepath', 'ps_closepath_stroke', 'ps_continue_text', 'ps_curveto', 'ps_delete', 'ps_end_page', 'ps_end_pattern', 'ps_end_template', 'ps_fill', 'ps_fill_stroke', 'ps_findfont', 'ps_get_buffer', 'ps_get_parameter', 'ps_get_value', 'ps_hyphenate', 'ps_include_file', 'ps_lineto', 'ps_makespotcolor', 'ps_moveto', 'ps_new', 'ps_open_file', 'ps_open_image', 'ps_open_image_file', 'ps_open_memory_image', 'ps_place_image', 'ps_rect', 'ps_restore', 'ps_rotate', 'ps_save', 'ps_scale', 'ps_set_border_color', 'ps_set_border_dash', 'ps_set_border_style', 'ps_set_info', 'ps_set_parameter', 'ps_set_text_pos', 'ps_set_value', 'ps_setcolor', 'ps_setdash', 'ps_setflat', 'ps_setfont', 'ps_setgray', 'ps_setlinecap', 'ps_setlinejoin', 'ps_setlinewidth', 'ps_setmiterlimit', 'ps_setoverprintmode', 'ps_setpolydash', 'ps_shading', 'ps_shading_pattern', 'ps_shfill', 'ps_show', 'ps_show2', 'ps_show_boxed', 'ps_show_xy', 'ps_show_xy2', 'ps_string_geometry', 'ps_stringwidth', 'ps_stroke', 'ps_symbol', 'ps_symbol_name', 'ps_symbol_width', 'ps_translate', 'px_close', 'px_create_fp', 'px_date2string', 'px_delete', 'px_delete_record', 'px_get_field', 'px_get_info', 'px_get_parameter', 'px_get_record', 'px_get_schema', 'px_get_value', 'px_insert_record', 'px_new', 'px_numfields', 'px_numrecords', 'px_open_fp', 'px_put_record', 'px_retrieve_record', 'px_set_blob_file', 'px_set_parameter', 'px_set_tablename', 'px_set_targetencoding', 'px_set_value', 'px_timestamp2string', 'px_update_record', 'radius_acct_open', 'radius_add_server', 'radius_auth_open', 'radius_close', 'radius_config', 'radius_create_request', 'radius_demangle', 'radius_demangle_mppe_key', 'radius_get_attr', 'radius_put_addr', 'radius_put_attr', 'radius_put_int', 'radius_put_string', 'radius_put_vendor_addr', 'radius_put_vendor_attr', 'radius_put_vendor_int', 'radius_put_vendor_string', 'radius_request_authenticator', 'radius_salt_encrypt_attr', 'radius_send_request', 'radius_server_secret', 'radius_strerror', 'readdir', 'readfile', 'recode_file', 'rename', 'rewind', 'rewinddir', 'rmdir', 'rpm_close', 'rpm_get_tag', 'rpm_open', 'sapi_windows_vt100_support', 'scandir', 'sem_acquire', 'sem_get', 'sem_release', 'sem_remove', 'set_file_buffer', 'shm_attach', 'shm_detach', 'shm_get_var', 'shm_has_var', 'shm_put_var', 'shm_remove', 'shm_remove_var', 'shmop_close', 'shmop_delete', 'shmop_open', 'shmop_read', 'shmop_size', 'shmop_write', 'socket_accept', 'socket_addrinfo_bind', 'socket_addrinfo_connect', 'socket_addrinfo_explain', 'socket_bind', 'socket_clear_error', 'socket_close', 'socket_connect', 'socket_export_stream', 'socket_get_option', 'socket_get_status', 'socket_getopt', 'socket_getpeername', 'socket_getsockname', 'socket_import_stream', 'socket_last_error', 'socket_listen', 'socket_read', 'socket_recv', 'socket_recvfrom', 'socket_recvmsg', 'socket_send', 'socket_sendmsg', 'socket_sendto', 'socket_set_block', 'socket_set_blocking', 'socket_set_nonblock', 'socket_set_option', 'socket_set_timeout', 'socket_shutdown', 'socket_write', 'sqlite_close', 'sqlite_fetch_string', 'sqlite_has_more', 'sqlite_open', 'sqlite_popen', 'sqlsrv_begin_transaction', 'sqlsrv_cancel', 'sqlsrv_client_info', 'sqlsrv_close', 'sqlsrv_commit', 'sqlsrv_connect', 'sqlsrv_execute', 'sqlsrv_fetch', 'sqlsrv_fetch_array', 'sqlsrv_fetch_object', 'sqlsrv_field_metadata', 'sqlsrv_free_stmt', 'sqlsrv_get_field', 'sqlsrv_has_rows', 'sqlsrv_next_result', 'sqlsrv_num_fields', 'sqlsrv_num_rows', 'sqlsrv_prepare', 'sqlsrv_query', 'sqlsrv_rollback', 'sqlsrv_rows_affected', 'sqlsrv_send_stream_data', 'sqlsrv_server_info', 'ssh2_auth_agent', 'ssh2_auth_hostbased_file', 'ssh2_auth_none', 'ssh2_auth_password', 'ssh2_auth_pubkey_file', 'ssh2_disconnect', 'ssh2_exec', 'ssh2_fetch_stream', 'ssh2_fingerprint', 'ssh2_methods_negotiated', 'ssh2_publickey_add', 'ssh2_publickey_init', 'ssh2_publickey_list', 'ssh2_publickey_remove', 'ssh2_scp_recv', 'ssh2_scp_send', 'ssh2_sftp', 'ssh2_sftp_chmod', 'ssh2_sftp_lstat', 'ssh2_sftp_mkdir', 'ssh2_sftp_readlink', 'ssh2_sftp_realpath', 'ssh2_sftp_rename', 'ssh2_sftp_rmdir', 'ssh2_sftp_stat', 'ssh2_sftp_symlink', 'ssh2_sftp_unlink', 'ssh2_shell', 'ssh2_tunnel', 'stomp_connect', 'streamWrapper::stream_cast', 'stream_bucket_append', 'stream_bucket_make_writeable', 'stream_bucket_new', 'stream_bucket_prepend', 'stream_context_create', 'stream_context_get_default', 'stream_context_get_options', 'stream_context_get_params', 'stream_context_set_default', 'stream_context_set_params', 'stream_copy_to_stream', 'stream_encoding', 'stream_filter_append', 'stream_filter_prepend', 'stream_filter_remove', 'stream_get_contents', 'stream_get_line', 'stream_get_meta_data', 'stream_isatty', 'stream_set_blocking', 'stream_set_chunk_size', 'stream_set_read_buffer', 'stream_set_timeout', 'stream_set_write_buffer', 'stream_socket_accept', 'stream_socket_client', 'stream_socket_enable_crypto', 'stream_socket_get_name', 'stream_socket_recvfrom', 'stream_socket_sendto', 'stream_socket_server', 'stream_socket_shutdown', 'stream_supports_lock', 'svn_fs_abort_txn', 'svn_fs_apply_text', 'svn_fs_begin_txn2', 'svn_fs_change_node_prop', 'svn_fs_check_path', 'svn_fs_contents_changed', 'svn_fs_copy', 'svn_fs_delete', 'svn_fs_dir_entries', 'svn_fs_file_contents', 'svn_fs_file_length', 'svn_fs_is_dir', 'svn_fs_is_file', 'svn_fs_make_dir', 'svn_fs_make_file', 'svn_fs_node_created_rev', 'svn_fs_node_prop', 'svn_fs_props_changed', 'svn_fs_revision_prop', 'svn_fs_revision_root', 'svn_fs_txn_root', 'svn_fs_youngest_rev', 'svn_repos_create', 'svn_repos_fs', 'svn_repos_fs_begin_txn_for_commit', 'svn_repos_fs_commit_txn', 'svn_repos_open', 'sybase_affected_rows', 'sybase_close', 'sybase_connect', 'sybase_data_seek', 'sybase_fetch_array', 'sybase_fetch_assoc', 'sybase_fetch_field', 'sybase_fetch_object', 'sybase_fetch_row', 'sybase_field_seek', 'sybase_free_result', 'sybase_num_fields', 'sybase_num_rows', 'sybase_pconnect', 'sybase_query', 'sybase_result', 'sybase_select_db', 'sybase_set_message_handler', 'sybase_unbuffered_query', 'tmpfile', 'udm_add_search_limit', 'udm_alloc_agent', 'udm_alloc_agent_array', 'udm_cat_list', 'udm_cat_path', 'udm_check_charset', 'udm_clear_search_limits', 'udm_crc32', 'udm_errno', 'udm_error', 'udm_find', 'udm_free_agent', 'udm_free_res', 'udm_get_doc_count', 'udm_get_res_field', 'udm_get_res_param', 'udm_hash32', 'udm_load_ispell_data', 'udm_set_agent_param', 'unlink', 'vfprintf', 'w32api_init_dtype', 'wddx_add_vars', 'wddx_packet_end', 'wddx_packet_start', 'xml_get_current_byte_index', 'xml_get_current_column_number', 'xml_get_current_line_number', 'xml_get_error_code', 'xml_parse', 'xml_parse_into_struct', 'xml_parser_create', 'xml_parser_create_ns', 'xml_parser_free', 'xml_parser_get_option', 'xml_parser_set_option', 'xml_set_character_data_handler', 'xml_set_default_handler', 'xml_set_element_handler', 'xml_set_end_namespace_decl_handler', 'xml_set_external_entity_ref_handler', 'xml_set_notation_decl_handler', 'xml_set_object', 'xml_set_processing_instruction_handler', 'xml_set_start_namespace_decl_handler', 'xml_set_unparsed_entity_decl_handler', 'xmlrpc_server_add_introspection_data', 'xmlrpc_server_call_method', 'xmlrpc_server_create', 'xmlrpc_server_destroy', 'xmlrpc_server_register_introspection_callback', 'xmlrpc_server_register_method', 'xmlwriter_end_attribute', 'xmlwriter_end_cdata', 'xmlwriter_end_comment', 'xmlwriter_end_document', 'xmlwriter_end_dtd', 'xmlwriter_end_dtd_attlist', 'xmlwriter_end_dtd_element', 'xmlwriter_end_dtd_entity', 'xmlwriter_end_element', 'xmlwriter_end_pi', 'xmlwriter_flush', 'xmlwriter_full_end_element', 'xmlwriter_open_memory', 'xmlwriter_open_uri', 'xmlwriter_output_memory', 'xmlwriter_set_indent', 'xmlwriter_set_indent_string', 'xmlwriter_start_attribute', 'xmlwriter_start_attribute_ns', 'xmlwriter_start_cdata', 'xmlwriter_start_comment', 'xmlwriter_start_document', 'xmlwriter_start_dtd', 'xmlwriter_start_dtd_attlist', 'xmlwriter_start_dtd_element', 'xmlwriter_start_dtd_entity', 'xmlwriter_start_element', 'xmlwriter_start_element_ns', 'xmlwriter_start_pi', 'xmlwriter_text', 'xmlwriter_write_attribute', 'xmlwriter_write_attribute_ns', 'xmlwriter_write_cdata', 'xmlwriter_write_comment', 'xmlwriter_write_dtd', 'xmlwriter_write_dtd_attlist', 'xmlwriter_write_dtd_element', 'xmlwriter_write_dtd_entity', 'xmlwriter_write_element', 'xmlwriter_write_element_ns', 'xmlwriter_write_pi', 'xmlwriter_write_raw', 'xslt_create', 'yaz_addinfo', 'yaz_ccl_conf', 'yaz_ccl_parse', 'yaz_close', 'yaz_database', 'yaz_element', 'yaz_errno', 'yaz_error', 'yaz_es', 'yaz_es_result', 'yaz_get_option', 'yaz_hits', 'yaz_itemorder', 'yaz_present', 'yaz_range', 'yaz_record', 'yaz_scan', 'yaz_scan_result', 'yaz_schema', 'yaz_search', 'yaz_sort', 'yaz_syntax', 'zip_close', 'zip_entry_close', 'zip_entry_compressedsize', 'zip_entry_compressionmethod', 'zip_entry_filesize', 'zip_entry_name', 'zip_entry_open', 'zip_entry_read', 'zip_open', 'zip_read', ]; } } PK!_{ƒ„ðð`file-manager-advanced/application/svg-sanitizer/includes/sebastian/resource-operations/README.mdnu„[µü¤# Resource Operations Provides a list of PHP built-in functions that operate on resources. ## Installation You can add this library as a local, per-project dependency to your project using [Composer](https://getcomposer.org/): composer require sebastian/resource-operations If you only need this library during development, for instance to run your project's test suite, then you should add it as a development-time dependency: composer require --dev sebastian/resource-operations PK!™Érä^file-manager-advanced/application/svg-sanitizer/includes/sebastian/resource-operations/LICENSEnu„[µü¤Resource Operations Copyright (c) 2015-2018, Sebastian Bergmann . All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. * Neither the name of Sebastian Bergmann nor the names of his contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. PK!5 YddUfile-manager-advanced/application/svg-sanitizer/includes/sebastian/type/composer.jsonnu„[µü¤{ "name": "sebastian/type", "description": "Collection of value objects that represent the types of the PHP type system", "type": "library", "homepage": "https://github.com/sebastianbergmann/type", "license": "BSD-3-Clause", "authors": [ { "name": "Sebastian Bergmann", "email": "sebastian@phpunit.de", "role": "lead" } ], "support": { "issues": "https://github.com/sebastianbergmann/type/issues" }, "prefer-stable": true, "require": { "php": ">=7.2" }, "require-dev": { "phpunit/phpunit": "^8.2" }, "config": { "platform": { "php": "7.2.0" }, "optimize-autoloader": true, "sort-packages": true }, "autoload": { "classmap": [ "src/" ] }, "autoload-dev": { "classmap": [ "tests/_fixture" ], "files": [ "tests/_fixture/callback_function.php" ] }, "extra": { "branch-alias": { "dev-master": "1.1-dev" } } } PK!X&Ãu¢¢Tfile-manager-advanced/application/svg-sanitizer/includes/sebastian/type/ChangeLog.mdnu„[µü¤# ChangeLog All notable changes are documented in this file using the [Keep a CHANGELOG](http://keepachangelog.com/) principles. ## [1.1.5] - 2024-03-01 * No code changes, only updated `.gitattributes` to not export non-essential files. ## [1.1.4] - 2020-11-30 ### Changed * Changed PHP version constraint in `composer.json` from `^7.2` to `>=7.2` ## [1.1.3] - 2019-07-02 ### Fixed * Fixed class name comparison in `ObjectType` to be case insensitive ## [1.1.2] - 2019-06-19 ### Fixed * Fixed handling of `object` type ## [1.1.1] - 2019-06-08 ### Fixed * Fixed autoloading of `callback_function.php` fixture file ## [1.1.0] - 2019-06-07 ### Added * Added support for `callable` type * Added support for `iterable` type ## [1.0.0] - 2019-06-06 * Initial release based on [code contributed by Michel Hartmann to PHPUnit](https://github.com/sebastianbergmann/phpunit/pull/3673) [1.1.5]: https://github.com/sebastianbergmann/type/compare/1.1.4...1.1.5 [1.1.4]: https://github.com/sebastianbergmann/type/compare/1.1.3...1.1.4 [1.1.3]: https://github.com/sebastianbergmann/type/compare/1.1.2...1.1.3 [1.1.2]: https://github.com/sebastianbergmann/type/compare/1.1.1...1.1.2 [1.1.1]: https://github.com/sebastianbergmann/type/compare/1.1.0...1.1.1 [1.1.0]: https://github.com/sebastianbergmann/type/compare/1.0.0...1.1.0 [1.0.0]: https://github.com/sebastianbergmann/type/compare/ff74aa41746bd8d10e931843ebf37d42da513ede...1.0.0 PK!ûçÄÚÚafile-manager-advanced/application/svg-sanitizer/includes/sebastian/type/src/GenericObjectType.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace SebastianBergmann\Type; final class GenericObjectType extends Type { /** * @var bool */ private $allowsNull; public function __construct(bool $nullable) { $this->allowsNull = $nullable; } public function isAssignable(Type $other): bool { if ($this->allowsNull && $other instanceof NullType) { return true; } if (!$other instanceof ObjectType) { return false; } return true; } public function getReturnTypeDeclaration(): string { return ': ' . ($this->allowsNull ? '?' : '') . 'object'; } public function allowsNull(): bool { return $this->allowsNull; } } PK!9Õoê[[Xfile-manager-advanced/application/svg-sanitizer/includes/sebastian/type/src/NullType.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace SebastianBergmann\Type; final class NullType extends Type { public function isAssignable(Type $other): bool { return !($other instanceof VoidType); } public function getReturnTypeDeclaration(): string { return ''; } public function allowsNull(): bool { return true; } } PK!œ »«EE[file-manager-advanced/application/svg-sanitizer/includes/sebastian/type/src/UnknownType.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace SebastianBergmann\Type; final class UnknownType extends Type { public function isAssignable(Type $other): bool { return true; } public function getReturnTypeDeclaration(): string { return ''; } public function allowsNull(): bool { return true; } } PK!Ř1ßååZfile-manager-advanced/application/svg-sanitizer/includes/sebastian/type/src/ObjectType.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace SebastianBergmann\Type; final class ObjectType extends Type { /** * @var TypeName */ private $className; /** * @var bool */ private $allowsNull; public function __construct(TypeName $className, bool $allowsNull) { $this->className = $className; $this->allowsNull = $allowsNull; } public function isAssignable(Type $other): bool { if ($this->allowsNull && $other instanceof NullType) { return true; } if ($other instanceof self) { if (0 === \strcasecmp($this->className->getQualifiedName(), $other->className->getQualifiedName())) { return true; } if (\is_subclass_of($other->className->getQualifiedName(), $this->className->getQualifiedName(), true)) { return true; } } return false; } public function getReturnTypeDeclaration(): string { return ': ' . ($this->allowsNull ? '?' : '') . $this->className->getQualifiedName(); } public function allowsNull(): bool { return $this->allowsNull; } public function className(): TypeName { return $this->className; } } PK!ÎN >Xfile-manager-advanced/application/svg-sanitizer/includes/sebastian/type/src/TypeName.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace SebastianBergmann\Type; final class TypeName { /** * @var ?string */ private $namespaceName; /** * @var string */ private $simpleName; public static function fromQualifiedName(string $fullClassName): self { if ($fullClassName[0] === '\\') { $fullClassName = \substr($fullClassName, 1); } $classNameParts = \explode('\\', $fullClassName); $simpleName = \array_pop($classNameParts); $namespaceName = \implode('\\', $classNameParts); return new self($namespaceName, $simpleName); } public static function fromReflection(\ReflectionClass $type): self { return new self( $type->getNamespaceName(), $type->getShortName() ); } public function __construct(?string $namespaceName, string $simpleName) { if ($namespaceName === '') { $namespaceName = null; } $this->namespaceName = $namespaceName; $this->simpleName = $simpleName; } public function getNamespaceName(): ?string { return $this->namespaceName; } public function getSimpleName(): string { return $this->simpleName; } public function getQualifiedName(): string { return $this->namespaceName === null ? $this->simpleName : $this->namespaceName . '\\' . $this->simpleName; } public function isNamespaced(): bool { return $this->namespaceName !== null; } } PK!³¹­qQQ\file-manager-advanced/application/svg-sanitizer/includes/sebastian/type/src/IterableType.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace SebastianBergmann\Type; final class IterableType extends Type { /** * @var bool */ private $allowsNull; public function __construct(bool $nullable) { $this->allowsNull = $nullable; } /** * @throws RuntimeException */ public function isAssignable(Type $other): bool { if ($this->allowsNull && $other instanceof NullType) { return true; } if ($other instanceof self) { return true; } if ($other instanceof SimpleType) { return \is_iterable($other->value()); } if ($other instanceof ObjectType) { try { return (new \ReflectionClass($other->className()->getQualifiedName()))->isIterable(); // @codeCoverageIgnoreStart } catch (\ReflectionException $e) { throw new RuntimeException( $e->getMessage(), (int) $e->getCode(), $e ); // @codeCoverageIgnoreEnd } } return false; } public function getReturnTypeDeclaration(): string { return ': ' . ($this->allowsNull ? '?' : '') . 'iterable'; } public function allowsNull(): bool { return $this->allowsNull; } } PK!Ί]¾šš\file-manager-advanced/application/svg-sanitizer/includes/sebastian/type/src/CallableType.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace SebastianBergmann\Type; final class CallableType extends Type { /** * @var bool */ private $allowsNull; public function __construct(bool $nullable) { $this->allowsNull = $nullable; } /** * @throws RuntimeException */ public function isAssignable(Type $other): bool { if ($this->allowsNull && $other instanceof NullType) { return true; } if ($other instanceof self) { return true; } if ($other instanceof ObjectType) { if ($this->isClosure($other)) { return true; } if ($this->hasInvokeMethod($other)) { return true; } } if ($other instanceof SimpleType) { if ($this->isFunction($other)) { return true; } if ($this->isClassCallback($other)) { return true; } if ($this->isObjectCallback($other)) { return true; } } return false; } public function getReturnTypeDeclaration(): string { return ': ' . ($this->allowsNull ? '?' : '') . 'callable'; } public function allowsNull(): bool { return $this->allowsNull; } private function isClosure(ObjectType $type): bool { return !$type->className()->isNamespaced() && $type->className()->getSimpleName() === \Closure::class; } /** * @throws RuntimeException */ private function hasInvokeMethod(ObjectType $type): bool { try { $class = new \ReflectionClass($type->className()->getQualifiedName()); // @codeCoverageIgnoreStart } catch (\ReflectionException $e) { throw new RuntimeException( $e->getMessage(), (int) $e->getCode(), $e ); // @codeCoverageIgnoreEnd } if ($class->hasMethod('__invoke')) { return true; } return false; } private function isFunction(SimpleType $type): bool { if (!\is_string($type->value())) { return false; } return \function_exists($type->value()); } private function isObjectCallback(SimpleType $type): bool { if (!\is_array($type->value())) { return false; } if (\count($type->value()) !== 2) { return false; } if (!\is_object($type->value()[0]) || !\is_string($type->value()[1])) { return false; } [$object, $methodName] = $type->value(); $reflector = new \ReflectionObject($object); return $reflector->hasMethod($methodName); } private function isClassCallback(SimpleType $type): bool { if (!\is_string($type->value()) && !\is_array($type->value())) { return false; } if (\is_string($type->value())) { if (\strpos($type->value(), '::') === false) { return false; } [$className, $methodName] = \explode('::', $type->value()); } if (\is_array($type->value())) { if (\count($type->value()) !== 2) { return false; } if (!\is_string($type->value()[0]) || !\is_string($type->value()[1])) { return false; } [$className, $methodName] = $type->value(); } \assert(isset($className) && \is_string($className)); \assert(isset($methodName) && \is_string($methodName)); try { $class = new \ReflectionClass($className); if ($class->hasMethod($methodName)) { $method = $class->getMethod($methodName); return $method->isPublic() && $method->isStatic(); } // @codeCoverageIgnoreStart } catch (\ReflectionException $e) { throw new RuntimeException( $e->getMessage(), (int) $e->getCode(), $e ); // @codeCoverageIgnoreEnd } return false; } } PK!)T[[Xfile-manager-advanced/application/svg-sanitizer/includes/sebastian/type/src/VoidType.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace SebastianBergmann\Type; final class VoidType extends Type { public function isAssignable(Type $other): bool { return $other instanceof self; } public function getReturnTypeDeclaration(): string { return ': void'; } public function allowsNull(): bool { return false; } } PK!56‹…wwjfile-manager-advanced/application/svg-sanitizer/includes/sebastian/type/src/exception/RuntimeException.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace SebastianBergmann\Type; final class RuntimeException extends \RuntimeException implements Exception { } PK!Pm{??cfile-manager-advanced/application/svg-sanitizer/includes/sebastian/type/src/exception/Exception.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace SebastianBergmann\Type; interface Exception { } PK!g¯Ñ ÒÒZfile-manager-advanced/application/svg-sanitizer/includes/sebastian/type/src/SimpleType.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace SebastianBergmann\Type; final class SimpleType extends Type { /** * @var string */ private $name; /** * @var bool */ private $allowsNull; /** * @var mixed */ private $value; public function __construct(string $name, bool $nullable, $value = null) { $this->name = $this->normalize($name); $this->allowsNull = $nullable; $this->value = $value; } public function isAssignable(Type $other): bool { if ($this->allowsNull && $other instanceof NullType) { return true; } if ($other instanceof self) { return $this->name === $other->name; } return false; } public function getReturnTypeDeclaration(): string { return ': ' . ($this->allowsNull ? '?' : '') . $this->name; } public function allowsNull(): bool { return $this->allowsNull; } public function value() { return $this->value; } private function normalize(string $name): string { $name = \strtolower($name); switch ($name) { case 'boolean': return 'bool'; case 'real': case 'double': return 'float'; case 'integer': return 'int'; case '[]': return 'array'; default: return $name; } } } PK!k§Ž5ûûTfile-manager-advanced/application/svg-sanitizer/includes/sebastian/type/src/Type.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace SebastianBergmann\Type; abstract class Type { public static function fromValue($value, bool $allowsNull): self { $typeName = \gettype($value); if ($typeName === 'object') { return new ObjectType(TypeName::fromQualifiedName(\get_class($value)), $allowsNull); } $type = self::fromName($typeName, $allowsNull); if ($type instanceof SimpleType) { $type = new SimpleType($typeName, $allowsNull, $value); } return $type; } public static function fromName(string $typeName, bool $allowsNull): self { switch (\strtolower($typeName)) { case 'callable': return new CallableType($allowsNull); case 'iterable': return new IterableType($allowsNull); case 'null': return new NullType; case 'object': return new GenericObjectType($allowsNull); case 'unknown type': return new UnknownType; case 'void': return new VoidType; case 'array': case 'bool': case 'boolean': case 'double': case 'float': case 'int': case 'integer': case 'real': case 'resource': case 'resource (closed)': case 'string': return new SimpleType($typeName, $allowsNull); default: return new ObjectType(TypeName::fromQualifiedName($typeName), $allowsNull); } } abstract public function isAssignable(Type $other): bool; abstract public function getReturnTypeDeclaration(): string; abstract public function allowsNull(): bool; } PK!h�ÑÜÜQfile-manager-advanced/application/svg-sanitizer/includes/sebastian/type/README.mdnu„[µü¤# sebastian/type Collection of value objects that represent the types of the PHP type system. ## Installation You can add this library as a local, per-project dependency to your project using [Composer](https://getcomposer.org/): ``` composer require sebastian/type ``` If you only need this library during development, for instance to run your project's test suite, then you should add it as a development-time dependency: ``` composer require --dev sebastian/type ``` PK!$�»1Ofile-manager-advanced/application/svg-sanitizer/includes/sebastian/type/LICENSEnu„[µü¤sebastian/type Copyright (c) 2019, Sebastian Bergmann . All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. * Neither the name of Sebastian Bergmann nor the names of his contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. PK!ùÒe¾ ¾ Vfile-manager-advanced/application/svg-sanitizer/includes/sebastian/type/.idea/type.imlnu„[µü¤ PK!ûÔùn°n°tfile-manager-advanced/application/svg-sanitizer/includes/sebastian/type/.idea/inspectionProfiles/Project_Default.xmlnu„[µü¤ PK!ÇcÜž´´Ufile-manager-advanced/application/svg-sanitizer/includes/sebastian/type/.idea/vcs.xmlnu„[µü¤ PK!v¼WH H Ufile-manager-advanced/application/svg-sanitizer/includes/sebastian/type/.idea/php.xmlnu„[µü¤ PK!ȶ¡iYfile-manager-advanced/application/svg-sanitizer/includes/sebastian/type/.idea/modules.xmlnu„[µü¤ PK!î.]&&mfile-manager-advanced/application/svg-sanitizer/includes/sebastian/type/.idea/php-inspections-ea-ultimate.xmlnu„[µü¤ PK!èB"1®®Vfile-manager-advanced/application/svg-sanitizer/includes/sebastian/type/.idea/misc.xmlnu„[µü¤ PK!D¡�““ifile-manager-advanced/application/svg-sanitizer/includes/sebastian/code-unit-reverse-lookup/composer.jsonnu„[µü¤{ "name": "sebastian/code-unit-reverse-lookup", "description": "Looks up which function or method a line of code belongs to", "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/", "license": "BSD-3-Clause", "authors": [ { "name": "Sebastian Bergmann", "email": "sebastian@phpunit.de" } ], "require": { "php": ">=5.6" }, "require-dev": { "phpunit/phpunit": "^8.5" }, "autoload": { "classmap": [ "src/" ] }, "extra": { "branch-alias": { "dev-master": "1.0.x-dev" } } } PK!à™}6€€hfile-manager-advanced/application/svg-sanitizer/includes/sebastian/code-unit-reverse-lookup/ChangeLog.mdnu„[µü¤# Change Log All notable changes to `sebastianbergmann/code-unit-reverse-lookup` are documented in this file using the [Keep a CHANGELOG](http://keepachangelog.com/) principles. ## [1.0.3] - 2024-03-01 * No code changes, only updated `.gitattributes` to not export non-essential files. ## [1.0.2] - 2020-11-30 ### Changed * Changed PHP version constraint in `composer.json` from `^5.6 || ^7.0` to `>=5.6` ## 1.0.0 - 2016-02-13 * Initial release [1.0.3]: https://github.com/sebastianbergmann/code-unit-reverse-lookup/compare/1.0.2...1.0.3 [1.0.2]: https://github.com/sebastianbergmann/code-unit-reverse-lookup/compare/1.0.1...1.0.2 PK!þíŽþe e jfile-manager-advanced/application/svg-sanitizer/includes/sebastian/code-unit-reverse-lookup/src/Wizard.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace SebastianBergmann\CodeUnitReverseLookup; /** * @since Class available since Release 1.0.0 */ class Wizard { /** * @var array */ private $lookupTable = []; /** * @var array */ private $processedClasses = []; /** * @var array */ private $processedFunctions = []; /** * @param string $filename * @param int $lineNumber * * @return string */ public function lookup($filename, $lineNumber) { if (!isset($this->lookupTable[$filename][$lineNumber])) { $this->updateLookupTable(); } if (isset($this->lookupTable[$filename][$lineNumber])) { return $this->lookupTable[$filename][$lineNumber]; } else { return $filename . ':' . $lineNumber; } } private function updateLookupTable() { $this->processClassesAndTraits(); $this->processFunctions(); } private function processClassesAndTraits() { foreach (array_merge(get_declared_classes(), get_declared_traits()) as $classOrTrait) { if (isset($this->processedClasses[$classOrTrait])) { continue; } $reflector = new \ReflectionClass($classOrTrait); foreach ($reflector->getMethods() as $method) { $this->processFunctionOrMethod($method); } $this->processedClasses[$classOrTrait] = true; } } private function processFunctions() { foreach (get_defined_functions()['user'] as $function) { if (isset($this->processedFunctions[$function])) { continue; } $this->processFunctionOrMethod(new \ReflectionFunction($function)); $this->processedFunctions[$function] = true; } } /** * @param \ReflectionFunctionAbstract $functionOrMethod */ private function processFunctionOrMethod(\ReflectionFunctionAbstract $functionOrMethod) { if ($functionOrMethod->isInternal()) { return; } $name = $functionOrMethod->getName(); if ($functionOrMethod instanceof \ReflectionMethod) { $name = $functionOrMethod->getDeclaringClass()->getName() . '::' . $name; } if (!isset($this->lookupTable[$functionOrMethod->getFileName()])) { $this->lookupTable[$functionOrMethod->getFileName()] = []; } foreach (range($functionOrMethod->getStartLine(), $functionOrMethod->getEndLine()) as $line) { $this->lookupTable[$functionOrMethod->getFileName()][$line] = $name; } } } PK!Ê[¶÷÷efile-manager-advanced/application/svg-sanitizer/includes/sebastian/code-unit-reverse-lookup/README.mdnu„[µü¤# code-unit-reverse-lookup Looks up which function or method a line of code belongs to. ## Installation You can add this library as a local, per-project dependency to your project using [Composer](https://getcomposer.org/): composer require sebastian/code-unit-reverse-lookup If you only need this library during development, for instance to run your project's test suite, then you should add it as a development-time dependency: composer require --dev sebastian/code-unit-reverse-lookup PK!XXÞåcfile-manager-advanced/application/svg-sanitizer/includes/sebastian/code-unit-reverse-lookup/LICENSEnu„[µü¤code-unit-reverse-lookup Copyright (c) 2016-2017, Sebastian Bergmann . All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. * Neither the name of Sebastian Bergmann nor the names of his contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. PK!rsXYfile-manager-advanced/application/svg-sanitizer/includes/sebastian/version/.gitattributesnu„[µü¤*.php diff=php PK!a§ÊÁÁXfile-manager-advanced/application/svg-sanitizer/includes/sebastian/version/composer.jsonnu„[µü¤{ "name": "sebastian/version", "description": "Library that helps with managing the version number of Git-hosted PHP projects", "homepage": "https://github.com/sebastianbergmann/version", "license": "BSD-3-Clause", "authors": [ { "name": "Sebastian Bergmann", "email": "sebastian@phpunit.de", "role": "lead" } ], "support": { "issues": "https://github.com/sebastianbergmann/version/issues" }, "require": { "php": ">=5.6" }, "autoload": { "classmap": [ "src/" ] }, "extra": { "branch-alias": { "dev-master": "2.0.x-dev" } } } PK!‚�oXRfile-manager-advanced/application/svg-sanitizer/includes/sebastian/version/.php_csnu„[µü¤files() ->in('src') ->name('*.php'); return Symfony\CS\Config\Config::create() ->level(\Symfony\CS\FixerInterface::NONE_LEVEL) ->fixers( array( 'align_double_arrow', 'align_equals', 'braces', 'concat_with_spaces', 'duplicate_semicolon', 'elseif', 'empty_return', 'encoding', 'eof_ending', 'extra_empty_lines', 'function_call_space', 'function_declaration', 'indentation', 'join_function', 'line_after_namespace', 'linefeed', 'list_commas', 'lowercase_constants', 'lowercase_keywords', 'method_argument_space', 'multiple_use', 'namespace_no_leading_whitespace', 'no_blank_lines_after_class_opening', 'no_empty_lines_after_phpdocs', 'parenthesis', 'php_closing_tag', 'phpdoc_indent', 'phpdoc_no_access', 'phpdoc_no_empty_return', 'phpdoc_no_package', 'phpdoc_params', 'phpdoc_scalar', 'phpdoc_separation', 'phpdoc_to_comment', 'phpdoc_trim', 'phpdoc_types', 'phpdoc_var_without_name', 'remove_lines_between_uses', 'return', 'self_accessor', 'short_array_syntax', 'short_tag', 'single_line_after_imports', 'single_quote', 'spaces_before_semicolon', 'spaces_cast', 'ternary_spaces', 'trailing_spaces', 'trim_array_spaces', 'unused_use', 'visibility', 'whitespacy_lines' ) ) ->finder($finder); PK!N\DZ±Zfile-manager-advanced/application/svg-sanitizer/includes/sebastian/version/src/Version.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace SebastianBergmann; /** * @since Class available since Release 1.0.0 */ class Version { /** * @var string */ private $path; /** * @var string */ private $release; /** * @var string */ private $version; /** * @param string $release * @param string $path */ public function __construct($release, $path) { $this->release = $release; $this->path = $path; } /** * @return string */ public function getVersion() { if ($this->version === null) { if (count(explode('.', $this->release)) == 3) { $this->version = $this->release; } else { $this->version = $this->release . '-dev'; } $git = $this->getGitInformation($this->path); if ($git) { if (count(explode('.', $this->release)) == 3) { $this->version = $git; } else { $git = explode('-', $git); $this->version = $this->release . '-' . end($git); } } } return $this->version; } /** * @param string $path * * @return bool|string */ private function getGitInformation($path) { if (!is_dir($path . DIRECTORY_SEPARATOR . '.git')) { return false; } $process = proc_open( 'git describe --tags', [ 1 => ['pipe', 'w'], 2 => ['pipe', 'w'], ], $pipes, $path ); if (!is_resource($process)) { return false; } $result = trim(stream_get_contents($pipes[1])); fclose($pipes[1]); fclose($pipes[2]); $returnCode = proc_close($process); if ($returnCode !== 0) { return false; } return $result; } } PK!|ÐQsÿÿTfile-manager-advanced/application/svg-sanitizer/includes/sebastian/version/README.mdnu„[µü¤# Version **Version** is a library that helps with managing the version number of Git-hosted PHP projects. ## Installation You can add this library as a local, per-project dependency to your project using [Composer](https://getcomposer.org/): composer require sebastian/version If you only need this library during development, for instance to run your project's test suite, then you should add it as a development-time dependency: composer require --dev sebastian/version ## Usage The constructor of the `SebastianBergmann\Version` class expects two parameters: * `$release` is the version number of the latest release (`X.Y.Z`, for instance) or the name of the release series (`X.Y`) when no release has been made from that branch / for that release series yet. * `$path` is the path to the directory (or a subdirectory thereof) where the sourcecode of the project can be found. Simply passing `__DIR__` here usually suffices. Apart from the constructor, the `SebastianBergmann\Version` class has a single public method: `getVersion()`. Here is a contrived example that shows the basic usage: getVersion()); ?> string(18) "3.7.10-17-g00f3408" When a new release is prepared, the string that is passed to the constructor as the first argument needs to be updated. ### How SebastianBergmann\Version::getVersion() works * If `$path` is not (part of) a Git repository and `$release` is in `X.Y.Z` format then `$release` is returned as-is. * If `$path` is not (part of) a Git repository and `$release` is in `X.Y` format then `$release` is returned suffixed with `-dev`. * If `$path` is (part of) a Git repository and `$release` is in `X.Y.Z` format then the output of `git describe --tags` is returned as-is. * If `$path` is (part of) a Git repository and `$release` is in `X.Y` format then a string is returned that begins with `X.Y` and ends with information from `git describe --tags`. PK!=vkUfile-manager-advanced/application/svg-sanitizer/includes/sebastian/version/.gitignorenu„[µü¤/.idea PK!nRfile-manager-advanced/application/svg-sanitizer/includes/sebastian/version/LICENSEnu„[µü¤Version Copyright (c) 2013-2015, Sebastian Bergmann . All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. * Neither the name of Sebastian Bergmann nor the names of his contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. PK!}€JJbfile-manager-advanced/application/svg-sanitizer/includes/sebastian/recursion-context/composer.jsonnu„[µü¤{ "name": "sebastian/recursion-context", "description": "Provides functionality to recursively process PHP variables", "homepage": "http://www.github.com/sebastianbergmann/recursion-context", "license": "BSD-3-Clause", "authors": [ { "name": "Sebastian Bergmann", "email": "sebastian@phpunit.de" }, { "name": "Jeff Welch", "email": "whatthejeff@gmail.com" }, { "name": "Adam Harvey", "email": "aharvey@php.net" } ], "require": { "php": ">=7.0" }, "require-dev": { "phpunit/phpunit": "^6.0" }, "autoload": { "classmap": [ "src/" ] }, "extra": { "branch-alias": { "dev-master": "3.0.x-dev" } } } PK!Èô³ñJJffile-manager-advanced/application/svg-sanitizer/includes/sebastian/recursion-context/src/Exception.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace SebastianBergmann\RecursionContext; /** */ interface Exception { } PK!mH’’ufile-manager-advanced/application/svg-sanitizer/includes/sebastian/recursion-context/src/InvalidArgumentException.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace SebastianBergmann\RecursionContext; /** */ final class InvalidArgumentException extends \InvalidArgumentException implements Exception { } PK!‰¤�{{dfile-manager-advanced/application/svg-sanitizer/includes/sebastian/recursion-context/src/Context.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace SebastianBergmann\RecursionContext; /** * A context containing previously processed arrays and objects * when recursively processing a value. */ final class Context { /** * @var array[] */ private $arrays; /** * @var \SplObjectStorage */ private $objects; /** * Initialises the context */ public function __construct() { $this->arrays = array(); $this->objects = new \SplObjectStorage; } /** * Adds a value to the context. * * @param array|object $value The value to add. * * @return int|string The ID of the stored value, either as a string or integer. * * @throws InvalidArgumentException Thrown if $value is not an array or object */ public function add(&$value) { if (is_array($value)) { return $this->addArray($value); } elseif (is_object($value)) { return $this->addObject($value); } throw new InvalidArgumentException( 'Only arrays and objects are supported' ); } /** * Checks if the given value exists within the context. * * @param array|object $value The value to check. * * @return int|string|false The string or integer ID of the stored value if it has already been seen, or false if the value is not stored. * * @throws InvalidArgumentException Thrown if $value is not an array or object */ public function contains(&$value) { if (is_array($value)) { return $this->containsArray($value); } elseif (is_object($value)) { return $this->containsObject($value); } throw new InvalidArgumentException( 'Only arrays and objects are supported' ); } /** * @param array $array * * @return bool|int */ private function addArray(array &$array) { $key = $this->containsArray($array); if ($key !== false) { return $key; } $key = count($this->arrays); $this->arrays[] = &$array; if (!isset($array[PHP_INT_MAX]) && !isset($array[PHP_INT_MAX - 1])) { $array[] = $key; $array[] = $this->objects; } else { /* cover the improbable case too */ do { $key = random_int(PHP_INT_MIN, PHP_INT_MAX); } while (isset($array[$key])); $array[$key] = $key; do { $key = random_int(PHP_INT_MIN, PHP_INT_MAX); } while (isset($array[$key])); $array[$key] = $this->objects; } return $key; } /** * @param object $object * * @return string */ private function addObject($object) { if (!$this->objects->contains($object)) { $this->objects->attach($object); } return spl_object_hash($object); } /** * @param array $array * * @return int|false */ private function containsArray(array &$array) { $end = array_slice($array, -2); return isset($end[1]) && $end[1] === $this->objects ? $end[0] : false; } /** * @param object $value * * @return string|false */ private function containsObject($value) { if ($this->objects->contains($value)) { return spl_object_hash($value); } return false; } public function __destruct() { foreach ($this->arrays as &$array) { if (is_array($array)) { array_pop($array); array_pop($array); } } } } PK!¯b˜Ô©©^file-manager-advanced/application/svg-sanitizer/includes/sebastian/recursion-context/README.mdnu„[µü¤# Recursion Context ... ## Installation You can add this library as a local, per-project dependency to your project using [Composer](https://getcomposer.org/): composer require sebastian/recursion-context If you only need this library during development, for instance to run your project's test suite, then you should add it as a development-time dependency: composer require --dev sebastian/recursion-context PK! ÛË>\file-manager-advanced/application/svg-sanitizer/includes/sebastian/recursion-context/LICENSEnu„[µü¤Recursion Context Copyright (c) 2002-2017, Sebastian Bergmann . All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. * Neither the name of Sebastian Bergmann nor the names of his contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. PK!ÉáÅœ÷÷Yfile-manager-advanced/application/svg-sanitizer/includes/sebastian/exporter/composer.jsonnu„[µü¤{ "name": "sebastian/exporter", "description": "Provides the functionality to export PHP variables for visualization", "keywords": ["exporter","export"], "homepage": "http://www.github.com/sebastianbergmann/exporter", "license": "BSD-3-Clause", "authors": [ { "name": "Sebastian Bergmann", "email": "sebastian@phpunit.de" }, { "name": "Jeff Welch", "email": "whatthejeff@gmail.com" }, { "name": "Volker Dusch", "email": "github@wallbash.com" }, { "name": "Adam Harvey", "email": "aharvey@php.net" }, { "name": "Bernhard Schussek", "email": "bschussek@gmail.com" } ], "config": { "optimize-autoloader": true, "sort-packages": true }, "prefer-stable": true, "require": { "php": ">=7.2", "sebastian/recursion-context": "^3.0" }, "require-dev": { "phpunit/phpunit": "^8.5", "ext-mbstring": "*" }, "autoload": { "classmap": [ "src/" ] }, "extra": { "branch-alias": { "dev-master": "3.1.x-dev" } } } PK!ËÌÒLXfile-manager-advanced/application/svg-sanitizer/includes/sebastian/exporter/ChangeLog.mdnu„[µü¤# ChangeLog All notable changes are documented in this file using the [Keep a CHANGELOG](https://keepachangelog.com/) principles. ## [3.1.6] - 2024-03-02 ### Changed * Do not use implicitly nullable parameters ### Removed * This component is no longer supported on PHP 7.0 and PHP 7.1 ## [3.1.5] - 2022-09-14 ### Fixed * [#47](https://github.com/sebastianbergmann/exporter/pull/47): Fix `float` export precision ## [3.1.4] - 2021-11-11 ### Changed * [#38](https://github.com/sebastianbergmann/exporter/pull/38): Improve export of closed resources ## [3.1.3] - 2020-11-30 ### Changed * Changed PHP version constraint in `composer.json` from `^7.0` to `>=7.0` ## [3.1.2] - 2019-09-14 ### Fixed * [#29](https://github.com/sebastianbergmann/exporter/pull/29): Second parameter for `str_repeat()` must be an integer ### Removed * Remove HHVM-specific code that is no longer needed [3.1.6]: https://github.com/sebastianbergmann/exporter/compare/3.1.5...3.1.6 [3.1.5]: https://github.com/sebastianbergmann/exporter/compare/3.1.4...3.1.5 [3.1.4]: https://github.com/sebastianbergmann/exporter/compare/3.1.3...3.1.4 [3.1.3]: https://github.com/sebastianbergmann/exporter/compare/3.1.2...3.1.3 [3.1.2]: https://github.com/sebastianbergmann/exporter/compare/3.1.1...3.1.2 PK!âg-+-+\file-manager-advanced/application/svg-sanitizer/includes/sebastian/exporter/src/Exporter.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace SebastianBergmann\Exporter; use SebastianBergmann\RecursionContext\Context; /** * A nifty utility for visualizing PHP variables. * * * export(new Exception); * */ class Exporter { /** * Exports a value as a string * * The output of this method is similar to the output of print_r(), but * improved in various aspects: * * - NULL is rendered as "null" (instead of "") * - TRUE is rendered as "true" (instead of "1") * - FALSE is rendered as "false" (instead of "") * - Strings are always quoted with single quotes * - Carriage returns and newlines are normalized to \n * - Recursion and repeated rendering is treated properly * * @param int $indentation The indentation level of the 2nd+ line * * @return string */ public function export($value, $indentation = 0) { return $this->recursiveExport($value, $indentation); } /** * @param array $data * @param Context $context * * @return string */ public function shortenedRecursiveExport(&$data, ?Context $context = null) { $result = []; $exporter = new self(); if (!$context) { $context = new Context; } $array = $data; $context->add($data); foreach ($array as $key => $value) { if (\is_array($value)) { if ($context->contains($data[$key]) !== false) { $result[] = '*RECURSION*'; } else { $result[] = \sprintf( 'array(%s)', $this->shortenedRecursiveExport($data[$key], $context) ); } } else { $result[] = $exporter->shortenedExport($value); } } return \implode(', ', $result); } /** * Exports a value into a single-line string * * The output of this method is similar to the output of * SebastianBergmann\Exporter\Exporter::export(). * * Newlines are replaced by the visible string '\n'. * Contents of arrays and objects (if any) are replaced by '...'. * * @return string * * @see SebastianBergmann\Exporter\Exporter::export */ public function shortenedExport($value) { if (\is_string($value)) { $string = \str_replace("\n", '', $this->export($value)); if (\function_exists('mb_strlen')) { if (\mb_strlen($string) > 40) { $string = \mb_substr($string, 0, 30) . '...' . \mb_substr($string, -7); } } else { if (\strlen($string) > 40) { $string = \substr($string, 0, 30) . '...' . \substr($string, -7); } } return $string; } if (\is_object($value)) { return \sprintf( '%s Object (%s)', \get_class($value), \count($this->toArray($value)) > 0 ? '...' : '' ); } if (\is_array($value)) { return \sprintf( 'Array (%s)', \count($value) > 0 ? '...' : '' ); } return $this->export($value); } /** * Converts an object to an array containing all of its private, protected * and public properties. * * @return array */ public function toArray($value) { if (!\is_object($value)) { return (array) $value; } $array = []; foreach ((array) $value as $key => $val) { // Exception traces commonly reference hundreds to thousands of // objects currently loaded in memory. Including them in the result // has a severe negative performance impact. if ("\0Error\0trace" === $key || "\0Exception\0trace" === $key) { continue; } // properties are transformed to keys in the following way: // private $property => "\0Classname\0property" // protected $property => "\0*\0property" // public $property => "property" if (\preg_match('/^\0.+\0(.+)$/', (string) $key, $matches)) { $key = $matches[1]; } // See https://github.com/php/php-src/commit/5721132 if ($key === "\0gcdata") { continue; } $array[$key] = $val; } // Some internal classes like SplObjectStorage don't work with the // above (fast) mechanism nor with reflection in Zend. // Format the output similarly to print_r() in this case if ($value instanceof \SplObjectStorage) { foreach ($value as $key => $val) { $array[\spl_object_hash($val)] = [ 'obj' => $val, 'inf' => $value->getInfo(), ]; } } return $array; } /** * Recursive implementation of export * * @param mixed $value The value to export * @param int $indentation The indentation level of the 2nd+ line * @param \SebastianBergmann\RecursionContext\Context $processed Previously processed objects * * @return string * * @see SebastianBergmann\Exporter\Exporter::export */ protected function recursiveExport(&$value, $indentation, $processed = null) { if ($value === null) { return 'null'; } if ($value === true) { return 'true'; } if ($value === false) { return 'false'; } if (\is_float($value)) { $precisionBackup = \ini_get('precision'); \ini_set('precision', '-1'); try { $valueStr = (string) $value; if ((string) (int) $value === $valueStr) { return $valueStr . '.0'; } return $valueStr; } finally { \ini_set('precision', $precisionBackup); } } if ($this->isClosedResource($value)) { return 'resource (closed)'; } if (\is_resource($value)) { return \sprintf( 'resource(%d) of type (%s)', $value, \get_resource_type($value) ); } if (\is_string($value)) { // Match for most non printable chars somewhat taking multibyte chars into account if (\preg_match('/[^\x09-\x0d\x1b\x20-\xff]/', $value)) { return 'Binary String: 0x' . \bin2hex($value); } return "'" . \str_replace( '', "\n", \str_replace( ["\r\n", "\n\r", "\r", "\n"], ['\r\n', '\n\r', '\r', '\n'], $value ) ) . "'"; } $whitespace = \str_repeat(' ', (int)(4 * $indentation)); if (!$processed) { $processed = new Context; } if (\is_array($value)) { if (($key = $processed->contains($value)) !== false) { return 'Array &' . $key; } $array = $value; $key = $processed->add($value); $values = ''; if (\count($array) > 0) { foreach ($array as $k => $v) { $values .= \sprintf( '%s %s => %s' . "\n", $whitespace, $this->recursiveExport($k, $indentation), $this->recursiveExport($value[$k], $indentation + 1, $processed) ); } $values = "\n" . $values . $whitespace; } return \sprintf('Array &%s (%s)', $key, $values); } if (\is_object($value)) { $class = \get_class($value); if ($hash = $processed->contains($value)) { return \sprintf('%s Object &%s', $class, $hash); } $hash = $processed->add($value); $values = ''; $array = $this->toArray($value); if (\count($array) > 0) { foreach ($array as $k => $v) { $values .= \sprintf( '%s %s => %s' . "\n", $whitespace, $this->recursiveExport($k, $indentation), $this->recursiveExport($v, $indentation + 1, $processed) ); } $values = "\n" . $values . $whitespace; } return \sprintf('%s Object &%s (%s)', $class, $hash, $values); } return \var_export($value, true); } /** * Determines whether a variable represents a resource, either open or closed. * * @param mixed $actual The variable to test. * * @return bool */ private function isResource($value) { return $value !== null && \is_scalar($value) === false && \is_array($value) === false && \is_object($value) === false; } /** * Determines whether a variable represents a closed resource. * * @param mixed $actual The variable to test. * * @return bool */ private function isClosedResource($value) { /* * PHP 7.2 introduced "resource (closed)". */ if (\gettype($value) === 'resource (closed)') { return true; } /* * If gettype did not work, attempt to determine whether this is * a closed resource in another way. */ $isResource = \is_resource($value); $isNotNonResource = $this->isResource($value); if ($isResource === false && $isNotNonResource === true) { return true; } if ($isNotNonResource === true) { try { $resourceType = @\get_resource_type($value); if ($resourceType === 'Unknown') { return true; } } catch (TypeError $e) { // Ignore. Not a resource. } catch (Exception $e) { // Ignore. Not a resource. } } return false; } } PK!©Š¨b© © Ufile-manager-advanced/application/svg-sanitizer/includes/sebastian/exporter/README.mdnu„[µü¤Exporter ======== This component provides the functionality to export PHP variables for visualization. ## Usage Exporting: ```php '' 'string' => '' 'code' => 0 'file' => '/home/sebastianbergmann/test.php' 'line' => 34 'previous' => null ) */ print $exporter->export(new Exception); ``` ## Data Types Exporting simple types: ```php export(46); // 4.0 print $exporter->export(4.0); // 'hello, world!' print $exporter->export('hello, world!'); // false print $exporter->export(false); // NAN print $exporter->export(acos(8)); // -INF print $exporter->export(log(0)); // null print $exporter->export(null); // resource(13) of type (stream) print $exporter->export(fopen('php://stderr', 'w')); // Binary String: 0x000102030405 print $exporter->export(chr(0) . chr(1) . chr(2) . chr(3) . chr(4) . chr(5)); ``` Exporting complex types: ```php Array &1 ( 0 => 1 1 => 2 2 => 3 ) 1 => Array &2 ( 0 => '' 1 => 0 2 => false ) ) */ print $exporter->export(array(array(1,2,3), array("",0,FALSE))); /* Array &0 ( 'self' => Array &1 ( 'self' => Array &1 ) ) */ $array = array(); $array['self'] = &$array; print $exporter->export($array); /* stdClass Object &0000000003a66dcc0000000025e723e2 ( 'self' => stdClass Object &0000000003a66dcc0000000025e723e2 ) */ $obj = new stdClass(); $obj->self = $obj; print $exporter->export($obj); ``` Compact exports: ```php shortenedExport(array()); // Array (...) print $exporter->shortenedExport(array(1,2,3,4,5)); // stdClass Object () print $exporter->shortenedExport(new stdClass); // Exception Object (...) print $exporter->shortenedExport(new Exception); // this\nis\na\nsuper\nlong\nstring\nt...\nspace print $exporter->shortenedExport( <<. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. * Neither the name of Sebastian Bergmann nor the names of his contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. PK!V†<çTTbfile-manager-advanced/application/svg-sanitizer/includes/sebastian/object-enumerator/composer.jsonnu„[µü¤{ "name": "sebastian/object-enumerator", "description": "Traverses array structures and object graphs to enumerate all referenced objects", "homepage": "https://github.com/sebastianbergmann/object-enumerator/", "license": "BSD-3-Clause", "authors": [ { "name": "Sebastian Bergmann", "email": "sebastian@phpunit.de" } ], "require": { "php": ">=7.0", "sebastian/object-reflector": "^1.1.1", "sebastian/recursion-context": "^3.0" }, "require-dev": { "phpunit/phpunit": "^6.0" }, "autoload": { "classmap": [ "src/" ] }, "autoload-dev": { "classmap": [ "tests/_fixture/" ] }, "extra": { "branch-alias": { "dev-master": "3.0.x-dev" } } } PK!m2èÅafile-manager-advanced/application/svg-sanitizer/includes/sebastian/object-enumerator/ChangeLog.mdnu„[µü¤# Change Log All notable changes to `sebastianbergmann/object-enumerator` are documented in this file using the [Keep a CHANGELOG](http://keepachangelog.com/) principles. ## [3.0.5] - 2024-03-01 * No code changes, only updated `.gitattributes` to not export non-essential files. ## [3.0.4] - 2020-11-30 ### Changed * Changed PHP version constraint in `composer.json` from `^7.0` to `>=7.0` ## [3.0.3] - 2017-08-03 ### Changed * Bumped required version of `sebastian/object-reflector` ## [3.0.2] - 2017-03-12 ### Changed * `sebastian/object-reflector` is now a dependency ## [3.0.1] - 2017-03-12 ### Fixed * Objects aggregated in inherited attributes are not enumerated ## [3.0.0] - 2017-03-03 ### Removed * This component is no longer supported on PHP 5.6 ## [2.0.1] - 2017-02-18 ### Fixed * Fixed [#2](https://github.com/sebastianbergmann/phpunit/pull/2): Exceptions in `ReflectionProperty::getValue()` are not handled ## [2.0.0] - 2016-11-19 ### Changed * This component is now compatible with `sebastian/recursion-context: ~1.0.4` ## 1.0.0 - 2016-02-04 ### Added * Initial release [3.0.5]: https://github.com/sebastianbergmann/object-enumerator/compare/3.0.4...3.0.5 [3.0.4]: https://github.com/sebastianbergmann/object-enumerator/compare/3.0.3...3.0.4 [3.0.3]: https://github.com/sebastianbergmann/object-enumerator/compare/3.0.2...3.0.3 [3.0.2]: https://github.com/sebastianbergmann/object-enumerator/compare/3.0.1...3.0.2 [3.0.1]: https://github.com/sebastianbergmann/object-enumerator/compare/3.0.0...3.0.1 [3.0.0]: https://github.com/sebastianbergmann/object-enumerator/compare/2.0...3.0.0 [2.0.1]: https://github.com/sebastianbergmann/object-enumerator/compare/2.0.0...2.0.1 [2.0.0]: https://github.com/sebastianbergmann/object-enumerator/compare/1.0...2.0.0 PK!n$*a66ffile-manager-advanced/application/svg-sanitizer/includes/sebastian/object-enumerator/src/Exception.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace SebastianBergmann\ObjectEnumerator; interface Exception { } PK!�û'íxxufile-manager-advanced/application/svg-sanitizer/includes/sebastian/object-enumerator/src/InvalidArgumentException.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace SebastianBergmann\ObjectEnumerator; class InvalidArgumentException extends \InvalidArgumentException implements Exception { } PK!zÇ\ýrrgfile-manager-advanced/application/svg-sanitizer/includes/sebastian/object-enumerator/src/Enumerator.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace SebastianBergmann\ObjectEnumerator; use SebastianBergmann\ObjectReflector\ObjectReflector; use SebastianBergmann\RecursionContext\Context; /** * Traverses array structures and object graphs * to enumerate all referenced objects. */ class Enumerator { /** * Returns an array of all objects referenced either * directly or indirectly by a variable. * * @param array|object $variable * * @return object[] */ public function enumerate($variable) { if (!is_array($variable) && !is_object($variable)) { throw new InvalidArgumentException; } if (isset(func_get_args()[1])) { if (!func_get_args()[1] instanceof Context) { throw new InvalidArgumentException; } $processed = func_get_args()[1]; } else { $processed = new Context; } $objects = []; if ($processed->contains($variable)) { return $objects; } $array = $variable; $processed->add($variable); if (is_array($variable)) { foreach ($array as $element) { if (!is_array($element) && !is_object($element)) { continue; } $objects = array_merge( $objects, $this->enumerate($element, $processed) ); } } else { $objects[] = $variable; $reflector = new ObjectReflector; foreach ($reflector->getAttributes($variable) as $value) { if (!is_array($value) && !is_object($value)) { continue; } $objects = array_merge( $objects, $this->enumerate($value, $processed) ); } } return $objects; } } PK!¤Â‚5÷÷^file-manager-advanced/application/svg-sanitizer/includes/sebastian/object-enumerator/README.mdnu„[µü¤# Object Enumerator Traverses array structures and object graphs to enumerate all referenced objects. ## Installation You can add this library as a local, per-project dependency to your project using [Composer](https://getcomposer.org/): composer require sebastian/object-enumerator If you only need this library during development, for instance to run your project's test suite, then you should add it as a development-time dependency: composer require --dev sebastian/object-enumerator PK!¼f¬Î\file-manager-advanced/application/svg-sanitizer/includes/sebastian/object-enumerator/LICENSEnu„[µü¤Object Enumerator Copyright (c) 2016-2017, Sebastian Bergmann . All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. * Neither the name of Sebastian Bergmann nor the names of his contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. PK!_kÈKK\file-manager-advanced/application/svg-sanitizer/includes/sebastian/environment/composer.jsonnu„[µü¤{ "name": "sebastian/environment", "description": "Provides functionality to handle HHVM/PHP environments", "keywords": ["environment","hhvm","xdebug"], "homepage": "http://www.github.com/sebastianbergmann/environment", "license": "BSD-3-Clause", "authors": [ { "name": "Sebastian Bergmann", "email": "sebastian@phpunit.de" } ], "config": { "optimize-autoloader": true, "sort-packages": true }, "prefer-stable": true, "require": { "php": ">=7.1" }, "require-dev": { "phpunit/phpunit": "^7.5" }, "suggest": { "ext-posix": "*" }, "autoload": { "classmap": [ "src/" ] }, "extra": { "branch-alias": { "dev-master": "4.2-dev" } } } PK!è}žT´´[file-manager-advanced/application/svg-sanitizer/includes/sebastian/environment/ChangeLog.mdnu„[µü¤# Changes in sebastianbergmann/environment All notable changes in `sebastianbergmann/environment` are documented in this file using the [Keep a CHANGELOG](http://keepachangelog.com/) principles. ## [4.2.5] - 2024-03-01 * No code changes, only updated `.gitattributes` to not export non-essential files. ## [4.2.4] - 2020-11-30 ### Changed * Changed PHP version constraint in `composer.json` from `^7.1` to `>=7.1` ## [4.2.3] - 2019-11-20 ### Changed * Implemented [#50](https://github.com/sebastianbergmann/environment/pull/50): Windows improvements to console capabilities ### Fixed * Fixed [#49](https://github.com/sebastianbergmann/environment/issues/49): Detection how OpCache handles docblocks does not work correctly when PHPDBG is used ## [4.2.2] - 2019-05-05 ### Fixed * Fixed [#44](https://github.com/sebastianbergmann/environment/pull/44): `TypeError` in `Console::getNumberOfColumnsInteractive()` ## [4.2.1] - 2019-04-25 ### Fixed * Fixed an issue in `Runtime::getCurrentSettings()` ## [4.2.0] - 2019-04-25 ### Added * Implemented [#36](https://github.com/sebastianbergmann/environment/pull/36): `Runtime::getCurrentSettings()` ## [4.1.0] - 2019-02-01 ### Added * Implemented `Runtime::getNameWithVersionAndCodeCoverageDriver()` method * Implemented [#34](https://github.com/sebastianbergmann/environment/pull/34): Support for PCOV extension ## [4.0.2] - 2019-01-28 ### Fixed * Fixed [#33](https://github.com/sebastianbergmann/environment/issues/33): `Runtime::discardsComments()` returns true too eagerly ### Removed * Removed support for Zend Optimizer+ in `Runtime::discardsComments()` ## [4.0.1] - 2018-11-25 ### Fixed * Fixed [#31](https://github.com/sebastianbergmann/environment/issues/31): Regressions in `Console` class ## [4.0.0] - 2018-10-23 [YANKED] ### Fixed * Fixed [#25](https://github.com/sebastianbergmann/environment/pull/25): `Console::hasColorSupport()` does not work on Windows ### Removed * This component is no longer supported on PHP 7.0 ## [3.1.0] - 2017-07-01 ### Added * Implemented [#21](https://github.com/sebastianbergmann/environment/issues/21): Equivalent of `PHP_OS_FAMILY` (for PHP < 7.2) ## [3.0.4] - 2017-06-20 ### Fixed * Fixed [#20](https://github.com/sebastianbergmann/environment/pull/20): PHP 7 mode of HHVM not forced ## [3.0.3] - 2017-05-18 ### Fixed * Fixed [#18](https://github.com/sebastianbergmann/environment/issues/18): `Uncaught TypeError: preg_match() expects parameter 2 to be string, null given` ## [3.0.2] - 2017-04-21 ### Fixed * Fixed [#17](https://github.com/sebastianbergmann/environment/issues/17): `Uncaught TypeError: trim() expects parameter 1 to be string, boolean given` ## [3.0.1] - 2017-04-21 ### Fixed * Fixed inverted logic in `Runtime::discardsComments()` ## [3.0.0] - 2017-04-21 ### Added * Implemented `Runtime::discardsComments()` for querying whether the PHP runtime discards annotations ### Removed * This component is no longer supported on PHP 5.6 [4.2.5]: https://github.com/sebastianbergmann/phpunit/compare/4.2.4...4.2.5 [4.2.4]: https://github.com/sebastianbergmann/phpunit/compare/4.2.3...4.2.4 [4.2.3]: https://github.com/sebastianbergmann/phpunit/compare/4.2.2...4.2.3 [4.2.2]: https://github.com/sebastianbergmann/phpunit/compare/4.2.1...4.2.2 [4.2.1]: https://github.com/sebastianbergmann/phpunit/compare/4.2.0...4.2.1 [4.2.0]: https://github.com/sebastianbergmann/phpunit/compare/4.1.0...4.2.0 [4.1.0]: https://github.com/sebastianbergmann/phpunit/compare/4.0.2...4.1.0 [4.0.2]: https://github.com/sebastianbergmann/phpunit/compare/4.0.1...4.0.2 [4.0.1]: https://github.com/sebastianbergmann/phpunit/compare/66691f8e2dc4641909166b275a9a4f45c0e89092...4.0.1 [4.0.0]: https://github.com/sebastianbergmann/phpunit/compare/3.1.0...66691f8e2dc4641909166b275a9a4f45c0e89092 [3.1.0]: https://github.com/sebastianbergmann/phpunit/compare/3.0...3.1.0 [3.0.4]: https://github.com/sebastianbergmann/phpunit/compare/3.0.3...3.0.4 [3.0.3]: https://github.com/sebastianbergmann/phpunit/compare/3.0.2...3.0.3 [3.0.2]: https://github.com/sebastianbergmann/phpunit/compare/3.0.1...3.0.2 [3.0.1]: https://github.com/sebastianbergmann/phpunit/compare/3.0.0...3.0.1 [3.0.0]: https://github.com/sebastianbergmann/phpunit/compare/2.0...3.0.0 PK!Y:h÷˜˜^file-manager-advanced/application/svg-sanitizer/includes/sebastian/environment/src/Runtime.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace SebastianBergmann\Environment; /** * Utility class for HHVM/PHP environment handling. */ final class Runtime { /** * @var string */ private static $binary; /** * Returns true when Xdebug or PCOV is available or * the runtime used is PHPDBG. */ public function canCollectCodeCoverage(): bool { return $this->hasXdebug() || $this->hasPCOV() || $this->hasPHPDBGCodeCoverage(); } /** * Returns true when Zend OPcache is loaded, enabled, and is configured to discard comments. */ public function discardsComments(): bool { if (!\extension_loaded('Zend OPcache')) { return false; } if (\ini_get('opcache.save_comments') !== '0') { return false; } if ((\PHP_SAPI === 'cli' || \PHP_SAPI === 'phpdbg') && \ini_get('opcache.enable_cli') === '1') { return true; } if (\PHP_SAPI !== 'cli' && \PHP_SAPI !== 'phpdbg' && \ini_get('opcache.enable') === '1') { return true; } return false; } /** * Returns the path to the binary of the current runtime. * Appends ' --php' to the path when the runtime is HHVM. */ public function getBinary(): string { // HHVM if (self::$binary === null && $this->isHHVM()) { // @codeCoverageIgnoreStart if ((self::$binary = \getenv('PHP_BINARY')) === false) { self::$binary = \PHP_BINARY; } self::$binary = \escapeshellarg(self::$binary) . ' --php' . ' -d hhvm.php7.all=1'; // @codeCoverageIgnoreEnd } if (self::$binary === null && \PHP_BINARY !== '') { self::$binary = \escapeshellarg(\PHP_BINARY); } if (self::$binary === null) { // @codeCoverageIgnoreStart $possibleBinaryLocations = [ \PHP_BINDIR . '/php', \PHP_BINDIR . '/php-cli.exe', \PHP_BINDIR . '/php.exe', ]; foreach ($possibleBinaryLocations as $binary) { if (\is_readable($binary)) { self::$binary = \escapeshellarg($binary); break; } } // @codeCoverageIgnoreEnd } if (self::$binary === null) { // @codeCoverageIgnoreStart self::$binary = 'php'; // @codeCoverageIgnoreEnd } return self::$binary; } public function getNameWithVersion(): string { return $this->getName() . ' ' . $this->getVersion(); } public function getNameWithVersionAndCodeCoverageDriver(): string { if (!$this->canCollectCodeCoverage() || $this->hasPHPDBGCodeCoverage()) { return $this->getNameWithVersion(); } if ($this->hasXdebug()) { return \sprintf( '%s with Xdebug %s', $this->getNameWithVersion(), \phpversion('xdebug') ); } if ($this->hasPCOV()) { return \sprintf( '%s with PCOV %s', $this->getNameWithVersion(), \phpversion('pcov') ); } } public function getName(): string { if ($this->isHHVM()) { // @codeCoverageIgnoreStart return 'HHVM'; // @codeCoverageIgnoreEnd } if ($this->isPHPDBG()) { // @codeCoverageIgnoreStart return 'PHPDBG'; // @codeCoverageIgnoreEnd } return 'PHP'; } public function getVendorUrl(): string { if ($this->isHHVM()) { // @codeCoverageIgnoreStart return 'https://hhvm.com/'; // @codeCoverageIgnoreEnd } return 'https://www.php.net/'; } public function getVersion(): string { if ($this->isHHVM()) { // @codeCoverageIgnoreStart return HHVM_VERSION; // @codeCoverageIgnoreEnd } return \PHP_VERSION; } /** * Returns true when the runtime used is PHP and Xdebug is loaded. */ public function hasXdebug(): bool { return ($this->isPHP() || $this->isHHVM()) && \extension_loaded('xdebug'); } /** * Returns true when the runtime used is HHVM. */ public function isHHVM(): bool { return \defined('HHVM_VERSION'); } /** * Returns true when the runtime used is PHP without the PHPDBG SAPI. */ public function isPHP(): bool { return !$this->isHHVM() && !$this->isPHPDBG(); } /** * Returns true when the runtime used is PHP with the PHPDBG SAPI. */ public function isPHPDBG(): bool { return \PHP_SAPI === 'phpdbg' && !$this->isHHVM(); } /** * Returns true when the runtime used is PHP with the PHPDBG SAPI * and the phpdbg_*_oplog() functions are available (PHP >= 7.0). */ public function hasPHPDBGCodeCoverage(): bool { return $this->isPHPDBG(); } /** * Returns true when the runtime used is PHP with PCOV loaded and enabled */ public function hasPCOV(): bool { return $this->isPHP() && \extension_loaded('pcov') && \ini_get('pcov.enabled'); } /** * Parses the loaded php.ini file (if any) as well as all * additional php.ini files from the additional ini dir for * a list of all configuration settings loaded from files * at startup. Then checks for each php.ini setting passed * via the `$values` parameter whether this setting has * been changed at runtime. Returns an array of strings * where each string has the format `key=value` denoting * the name of a changed php.ini setting with its new value. * * @return string[] */ public function getCurrentSettings(array $values): array { $diff = []; $files = []; if ($file = \php_ini_loaded_file()) { $files[] = $file; } if ($scanned = \php_ini_scanned_files()) { $files = \array_merge( $files, \array_map( 'trim', \explode(",\n", $scanned) ) ); } foreach ($files as $ini) { $config = \parse_ini_file($ini, true); foreach ($values as $value) { $set = \ini_get($value); if (isset($config[$value]) && $set != $config[$value]) { $diff[] = \sprintf('%s=%s', $value, $set); } } } return $diff; } } PK!B°s^file-manager-advanced/application/svg-sanitizer/includes/sebastian/environment/src/Console.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace SebastianBergmann\Environment; final class Console { /** * @var int */ public const STDIN = 0; /** * @var int */ public const STDOUT = 1; /** * @var int */ public const STDERR = 2; /** * Returns true if STDOUT supports colorization. * * This code has been copied and adapted from * Symfony\Component\Console\Output\StreamOutput. */ public function hasColorSupport(): bool { if ('Hyper' === \getenv('TERM_PROGRAM')) { return true; } if ($this->isWindows()) { // @codeCoverageIgnoreStart return (\defined('STDOUT') && \function_exists('sapi_windows_vt100_support') && @\sapi_windows_vt100_support(\STDOUT)) || false !== \getenv('ANSICON') || 'ON' === \getenv('ConEmuANSI') || 'xterm' === \getenv('TERM'); // @codeCoverageIgnoreEnd } if (!\defined('STDOUT')) { // @codeCoverageIgnoreStart return false; // @codeCoverageIgnoreEnd } return $this->isInteractive(\STDOUT); } /** * Returns the number of columns of the terminal. * * @codeCoverageIgnore */ public function getNumberOfColumns(): int { if (!$this->isInteractive(\defined('STDIN') ? \STDIN : self::STDIN)) { return 80; } if ($this->isWindows()) { return $this->getNumberOfColumnsWindows(); } return $this->getNumberOfColumnsInteractive(); } /** * Returns if the file descriptor is an interactive terminal or not. * * Normally, we want to use a resource as a parameter, yet sadly it's not always awailable, * eg when running code in interactive console (`php -a`), STDIN/STDOUT/STDERR constants are not defined. * * @param int|resource $fileDescriptor */ public function isInteractive($fileDescriptor = self::STDOUT): bool { if (\is_resource($fileDescriptor)) { // These functions require a descriptor that is a real resource, not a numeric ID of it if (\function_exists('stream_isatty') && @\stream_isatty($fileDescriptor)) { return true; } $stat = @\fstat(\STDOUT); // Check if formatted mode is S_IFCHR return $stat ? 0020000 === ($stat['mode'] & 0170000) : false; } return \function_exists('posix_isatty') && @\posix_isatty($fileDescriptor); } private function isWindows(): bool { return \DIRECTORY_SEPARATOR === '\\'; } /** * @codeCoverageIgnore */ private function getNumberOfColumnsInteractive(): int { if (\function_exists('shell_exec') && \preg_match('#\d+ (\d+)#', \shell_exec('stty size') ?: '', $match) === 1) { if ((int) $match[1] > 0) { return (int) $match[1]; } } if (\function_exists('shell_exec') && \preg_match('#columns = (\d+);#', \shell_exec('stty') ?: '', $match) === 1) { if ((int) $match[1] > 0) { return (int) $match[1]; } } return 80; } /** * @codeCoverageIgnore */ private function getNumberOfColumnsWindows(): int { $ansicon = \getenv('ANSICON'); $columns = 80; if (\is_string($ansicon) && \preg_match('/^(\d+)x\d+ \(\d+x(\d+)\)$/', \trim($ansicon), $matches)) { $columns = $matches[1]; } elseif (\function_exists('proc_open')) { $process = \proc_open( 'mode CON', [ 1 => ['pipe', 'w'], 2 => ['pipe', 'w'], ], $pipes, null, null, ['suppress_errors' => true] ); if (\is_resource($process)) { $info = \stream_get_contents($pipes[1]); \fclose($pipes[1]); \fclose($pipes[2]); \proc_close($process); if (\preg_match('/--------+\r?\n.+?(\d+)\r?\n.+?(\d+)\r?\n/', $info, $matches)) { $columns = $matches[2]; } } } return $columns - 1; } } PK!©`«”……ffile-manager-advanced/application/svg-sanitizer/includes/sebastian/environment/src/OperatingSystem.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace SebastianBergmann\Environment; final class OperatingSystem { /** * Returns PHP_OS_FAMILY (if defined (which it is on PHP >= 7.2)). * Returns a string (compatible with PHP_OS_FAMILY) derived from PHP_OS otherwise. */ public function getFamily(): string { if (\defined('PHP_OS_FAMILY')) { return \PHP_OS_FAMILY; } if (\DIRECTORY_SEPARATOR === '\\') { return 'Windows'; } switch (\PHP_OS) { case 'Darwin': return 'Darwin'; case 'DragonFly': case 'FreeBSD': case 'NetBSD': case 'OpenBSD': return 'BSD'; case 'Linux': return 'Linux'; case 'SunOS': return 'Solaris'; default: return 'Unknown'; } } } PK!ó­‚I½½Xfile-manager-advanced/application/svg-sanitizer/includes/sebastian/environment/README.mdnu„[µü¤# sebastian/environment This component provides functionality that helps writing PHP code that has runtime-specific (PHP / HHVM) execution paths. [![Latest Stable Version](https://img.shields.io/packagist/v/sebastian/environment.svg?style=flat-square)](https://packagist.org/packages/sebastian/environment) [![Minimum PHP Version](https://img.shields.io/badge/php-%3E%3D%207.1-8892BF.svg?style=flat-square)](https://php.net/) [![Build Status](https://travis-ci.org/sebastianbergmann/environment.svg?branch=master)](https://travis-ci.org/sebastianbergmann/environment) ## Installation You can add this library as a local, per-project dependency to your project using [Composer](https://getcomposer.org/): composer require sebastian/environment If you only need this library during development, for instance to run your project's test suite, then you should add it as a development-time dependency: composer require --dev sebastian/environment PK!I¡°âVfile-manager-advanced/application/svg-sanitizer/includes/sebastian/environment/LICENSEnu„[µü¤sebastian/environment Copyright (c) 2014-2019, Sebastian Bergmann . All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. * Neither the name of Sebastian Bergmann nor the names of his contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. PK!S©ô:ððafile-manager-advanced/application/svg-sanitizer/includes/sebastian/object-reflector/composer.jsonnu„[µü¤{ "name": "sebastian/object-reflector", "description": "Allows reflection of object attributes, including inherited and non-public ones", "homepage": "https://github.com/sebastianbergmann/object-reflector/", "license": "BSD-3-Clause", "authors": [ { "name": "Sebastian Bergmann", "email": "sebastian@phpunit.de" } ], "require": { "php": ">=7.0" }, "require-dev": { "phpunit/phpunit": "^6.0" }, "autoload": { "classmap": [ "src/" ] }, "autoload-dev": { "classmap": [ "tests/_fixture/" ] }, "extra": { "branch-alias": { "dev-master": "1.1-dev" } } } PK!:±‚DD`file-manager-advanced/application/svg-sanitizer/includes/sebastian/object-reflector/ChangeLog.mdnu„[µü¤# Change Log All notable changes to `sebastianbergmann/object-reflector` are documented in this file using the [Keep a CHANGELOG](http://keepachangelog.com/) principles. ## 1.1.3 - 2024-03-01 * No code changes, only updated `.gitattributes` to not export non-essential files. ## 1.1.2 - 2020-11-30 ### Changed * Changed PHP version constraint in `composer.json` from `^7.0` to `>=7.1` ## 1.1.1 - 2017-03-29 * Fixed [#1](https://github.com/sebastianbergmann/object-reflector/issues/1): Attributes that with non-string names are not handled correctly ## 1.1.0 - 2017-03-16 ### Changed * Changed implementation of `ObjectReflector::getattributes()` to use `(array)` cast instead of `ReflectionObject` ## 1.0.0 - 2017-03-12 * Initial release [1.1.3]: https://github.com/sebastianbergmann/object-reflector/compare/1.1.2...1.1.3 [1.1.2]: https://github.com/sebastianbergmann/object-reflector/compare/1.1.1...1.1.2 [1.1.1]: https://github.com/sebastianbergmann/object-reflector/compare/1.1.0...1.1.1 [1.1.0]: https://github.com/sebastianbergmann/object-reflector/compare/1.0.0...1.1.0 PK!Ú "ˆˆkfile-manager-advanced/application/svg-sanitizer/includes/sebastian/object-reflector/src/ObjectReflector.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ declare(strict_types=1); namespace SebastianBergmann\ObjectReflector; class ObjectReflector { /** * @param object $object * * @return array * * @throws InvalidArgumentException */ public function getAttributes($object): array { if (!is_object($object)) { throw new InvalidArgumentException; } $attributes = []; $className = get_class($object); foreach ((array) $object as $name => $value) { $name = explode("\0", (string) $name); if (count($name) === 1) { $name = $name[0]; } else { if ($name[1] !== $className) { $name = $name[1] . '::' . $name[2]; } else { $name = $name[2]; } } $attributes[$name] = $value; } return $attributes; } } PK!³ ^âNNefile-manager-advanced/application/svg-sanitizer/includes/sebastian/object-reflector/src/Exception.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ declare(strict_types=1); namespace SebastianBergmann\ObjectReflector; interface Exception { } PK!YÄJ��tfile-manager-advanced/application/svg-sanitizer/includes/sebastian/object-reflector/src/InvalidArgumentException.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ declare(strict_types=1); namespace SebastianBergmann\ObjectReflector; class InvalidArgumentException extends \InvalidArgumentException implements Exception { } PK!'6ñÆóó]file-manager-advanced/application/svg-sanitizer/includes/sebastian/object-reflector/README.mdnu„[µü¤# Object Reflector Allows reflection of object attributes, including inherited and non-public ones. ## Installation You can add this library as a local, per-project dependency to your project using [Composer](https://getcomposer.org/): composer require sebastian/object-reflector If you only need this library during development, for instance to run your project's test suite, then you should add it as a development-time dependency: composer require --dev sebastian/object-reflector PK!ÑF¢ú  [file-manager-advanced/application/svg-sanitizer/includes/sebastian/object-reflector/LICENSEnu„[µü¤Object Reflector Copyright (c) 2017, Sebastian Bergmann . All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. * Neither the name of Sebastian Bergmann nor the names of his contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. PK!ïÀúú[file-manager-advanced/application/svg-sanitizer/includes/sebastian/comparator/composer.jsonnu„[µü¤{ "name": "sebastian/comparator", "description": "Provides the functionality to compare PHP values for equality", "keywords": ["comparator","compare","equality"], "homepage": "https://github.com/sebastianbergmann/comparator", "license": "BSD-3-Clause", "authors": [ { "name": "Sebastian Bergmann", "email": "sebastian@phpunit.de" }, { "name": "Jeff Welch", "email": "whatthejeff@gmail.com" }, { "name": "Volker Dusch", "email": "github@wallbash.com" }, { "name": "Bernhard Schussek", "email": "bschussek@2bepublished.at" } ], "prefer-stable": true, "require": { "php": ">=7.1", "sebastian/diff": "^3.0", "sebastian/exporter": "^3.1" }, "require-dev": { "phpunit/phpunit": "^8.5" }, "config": { "optimize-autoloader": true, "sort-packages": true }, "autoload": { "classmap": [ "src/" ] }, "autoload-dev": { "classmap": [ "tests/_fixture" ] }, "extra": { "branch-alias": { "dev-master": "3.0-dev" } } } PK!^Ù�¥Ç Ç Zfile-manager-advanced/application/svg-sanitizer/includes/sebastian/comparator/ChangeLog.mdnu„[µü¤# ChangeLog All notable changes are documented in this file using the [Keep a CHANGELOG](http://keepachangelog.com/) principles. ## [3.0.5] - 2022-09-14 ### Fixed * [#102](https://github.com/sebastianbergmann/comparator/pull/102): Fix `float` comparison precision ## [3.0.4] - 2022-09-14 ### Fixed * [#99](https://github.com/sebastianbergmann/comparator/pull/99): Fix weak comparison between `'0'` and `false` ## [3.0.3] - 2020-11-30 ### Changed * Changed PHP version constraint in `composer.json` from `^7.1` to `>=7.1` ## [3.0.2] - 2018-07-12 ### Changed * By default, `MockObjectComparator` is now tried before all other (default) comparators ## [3.0.1] - 2018-06-14 ### Fixed * [#53](https://github.com/sebastianbergmann/comparator/pull/53): `DOMNodeComparator` ignores `$ignoreCase` parameter * [#58](https://github.com/sebastianbergmann/comparator/pull/58): `ScalarComparator` does not handle extremely ugly string comparison edge cases ## [3.0.0] - 2018-04-18 ### Fixed * [#48](https://github.com/sebastianbergmann/comparator/issues/48): `DateTimeComparator` does not support fractional second deltas ### Removed * Removed support for PHP 7.0 ## [2.1.3] - 2018-02-01 ### Changed * This component is now compatible with version 3 of `sebastian/diff` ## [2.1.2] - 2018-01-12 ### Fixed * Fix comparison of `DateTimeImmutable` objects ## [2.1.1] - 2017-12-22 ### Fixed * [phpunit/#2923](https://github.com/sebastianbergmann/phpunit/issues/2923): Unexpected failed date matching ## [2.1.0] - 2017-11-03 ### Added * Added `SebastianBergmann\Comparator\Factory::reset()` to unregister all non-default comparators * Added support for `phpunit/phpunit-mock-objects` version `^5.0` [3.0.5]: https://github.com/sebastianbergmann/comparator/compare/3.0.4...3.0.5 [3.0.4]: https://github.com/sebastianbergmann/comparator/compare/3.0.3...3.0.4 [3.0.3]: https://github.com/sebastianbergmann/comparator/compare/3.0.2...3.0.3 [3.0.2]: https://github.com/sebastianbergmann/comparator/compare/3.0.1...3.0.2 [3.0.1]: https://github.com/sebastianbergmann/comparator/compare/3.0.0...3.0.1 [3.0.0]: https://github.com/sebastianbergmann/comparator/compare/2.1.3...3.0.0 [2.1.3]: https://github.com/sebastianbergmann/comparator/compare/2.1.2...2.1.3 [2.1.2]: https://github.com/sebastianbergmann/comparator/compare/2.1.1...2.1.2 [2.1.1]: https://github.com/sebastianbergmann/comparator/compare/2.1.0...2.1.1 [2.1.0]: https://github.com/sebastianbergmann/comparator/compare/2.0.2...2.1.0 PK!8˜9\\`file-manager-advanced/application/svg-sanitizer/includes/sebastian/comparator/src/Comparator.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace SebastianBergmann\Comparator; use SebastianBergmann\Exporter\Exporter; /** * Abstract base class for comparators which compare values for equality. */ abstract class Comparator { /** * @var Factory */ protected $factory; /** * @var Exporter */ protected $exporter; public function __construct() { $this->exporter = new Exporter; } public function setFactory(Factory $factory) { $this->factory = $factory; } /** * Returns whether the comparator can compare two values. * * @param mixed $expected The first value to compare * @param mixed $actual The second value to compare * * @return bool */ abstract public function accepts($expected, $actual); /** * Asserts that two values are equal. * * @param mixed $expected First value to compare * @param mixed $actual Second value to compare * @param float $delta Allowed numerical distance between two values to consider them equal * @param bool $canonicalize Arrays are sorted before comparison when set to true * @param bool $ignoreCase Case is ignored when set to true * * @throws ComparisonFailure */ abstract public function assertEquals($expected, $actual, $delta = 0.0, $canonicalize = false, $ignoreCase = false); } PK!¶~—ÈÌ Ì hfile-manager-advanced/application/svg-sanitizer/includes/sebastian/comparator/src/DateTimeComparator.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace SebastianBergmann\Comparator; /** * Compares DateTimeInterface instances for equality. */ class DateTimeComparator extends ObjectComparator { /** * Returns whether the comparator can compare two values. * * @param mixed $expected The first value to compare * @param mixed $actual The second value to compare * * @return bool */ public function accepts($expected, $actual) { return ($expected instanceof \DateTime || $expected instanceof \DateTimeInterface) && ($actual instanceof \DateTime || $actual instanceof \DateTimeInterface); } /** * Asserts that two values are equal. * * @param mixed $expected First value to compare * @param mixed $actual Second value to compare * @param float $delta Allowed numerical distance between two values to consider them equal * @param bool $canonicalize Arrays are sorted before comparison when set to true * @param bool $ignoreCase Case is ignored when set to true * @param array $processed List of already processed elements (used to prevent infinite recursion) * * @throws \Exception * @throws ComparisonFailure */ public function assertEquals($expected, $actual, $delta = 0.0, $canonicalize = false, $ignoreCase = false, array &$processed = []) { /** @var \DateTimeInterface $expected */ /** @var \DateTimeInterface $actual */ $absDelta = \abs($delta); $delta = new \DateInterval(\sprintf('PT%dS', $absDelta)); $delta->f = $absDelta - \floor($absDelta); $actualClone = (clone $actual) ->setTimezone(new \DateTimeZone('UTC')); $expectedLower = (clone $expected) ->setTimezone(new \DateTimeZone('UTC')) ->sub($delta); $expectedUpper = (clone $expected) ->setTimezone(new \DateTimeZone('UTC')) ->add($delta); if ($actualClone < $expectedLower || $actualClone > $expectedUpper) { throw new ComparisonFailure( $expected, $actual, $this->dateTimeToString($expected), $this->dateTimeToString($actual), false, 'Failed asserting that two DateTime objects are equal.' ); } } /** * Returns an ISO 8601 formatted string representation of a datetime or * 'Invalid DateTimeInterface object' if the provided DateTimeInterface was not properly * initialized. */ private function dateTimeToString(\DateTimeInterface $datetime): string { $string = $datetime->format('Y-m-d\TH:i:s.uO'); return $string ?: 'Invalid DateTimeInterface object'; } } PK!Lj:Qˆˆefile-manager-advanced/application/svg-sanitizer/includes/sebastian/comparator/src/ArrayComparator.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace SebastianBergmann\Comparator; /** * Compares arrays for equality. */ class ArrayComparator extends Comparator { /** * Returns whether the comparator can compare two values. * * @param mixed $expected The first value to compare * @param mixed $actual The second value to compare * * @return bool */ public function accepts($expected, $actual) { return \is_array($expected) && \is_array($actual); } /** * Asserts that two values are equal. * * @param mixed $expected First value to compare * @param mixed $actual Second value to compare * @param float $delta Allowed numerical distance between two values to consider them equal * @param bool $canonicalize Arrays are sorted before comparison when set to true * @param bool $ignoreCase Case is ignored when set to true * @param array $processed List of already processed elements (used to prevent infinite recursion) * * @throws ComparisonFailure */ public function assertEquals($expected, $actual, $delta = 0.0, $canonicalize = false, $ignoreCase = false, array &$processed = []) { if ($canonicalize) { \sort($expected); \sort($actual); } $remaining = $actual; $actualAsString = "Array (\n"; $expectedAsString = "Array (\n"; $equal = true; foreach ($expected as $key => $value) { unset($remaining[$key]); if (!\array_key_exists($key, $actual)) { $expectedAsString .= \sprintf( " %s => %s\n", $this->exporter->export($key), $this->exporter->shortenedExport($value) ); $equal = false; continue; } try { $comparator = $this->factory->getComparatorFor($value, $actual[$key]); $comparator->assertEquals($value, $actual[$key], $delta, $canonicalize, $ignoreCase, $processed); $expectedAsString .= \sprintf( " %s => %s\n", $this->exporter->export($key), $this->exporter->shortenedExport($value) ); $actualAsString .= \sprintf( " %s => %s\n", $this->exporter->export($key), $this->exporter->shortenedExport($actual[$key]) ); } catch (ComparisonFailure $e) { $expectedAsString .= \sprintf( " %s => %s\n", $this->exporter->export($key), $e->getExpectedAsString() ? $this->indent($e->getExpectedAsString()) : $this->exporter->shortenedExport($e->getExpected()) ); $actualAsString .= \sprintf( " %s => %s\n", $this->exporter->export($key), $e->getActualAsString() ? $this->indent($e->getActualAsString()) : $this->exporter->shortenedExport($e->getActual()) ); $equal = false; } } foreach ($remaining as $key => $value) { $actualAsString .= \sprintf( " %s => %s\n", $this->exporter->export($key), $this->exporter->shortenedExport($value) ); $equal = false; } $expectedAsString .= ')'; $actualAsString .= ')'; if (!$equal) { throw new ComparisonFailure( $expected, $actual, $expectedAsString, $actualAsString, false, 'Failed asserting that two arrays are equal.' ); } } protected function indent($lines) { return \trim(\str_replace("\n", "\n ", $lines)); } } PK!8½üç ç gfile-manager-advanced/application/svg-sanitizer/includes/sebastian/comparator/src/DOMNodeComparator.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace SebastianBergmann\Comparator; use DOMDocument; use DOMNode; /** * Compares DOMNode instances for equality. */ class DOMNodeComparator extends ObjectComparator { /** * Returns whether the comparator can compare two values. * * @param mixed $expected The first value to compare * @param mixed $actual The second value to compare * * @return bool */ public function accepts($expected, $actual) { return $expected instanceof DOMNode && $actual instanceof DOMNode; } /** * Asserts that two values are equal. * * @param mixed $expected First value to compare * @param mixed $actual Second value to compare * @param float $delta Allowed numerical distance between two values to consider them equal * @param bool $canonicalize Arrays are sorted before comparison when set to true * @param bool $ignoreCase Case is ignored when set to true * @param array $processed List of already processed elements (used to prevent infinite recursion) * * @throws ComparisonFailure */ public function assertEquals($expected, $actual, $delta = 0.0, $canonicalize = false, $ignoreCase = false, array &$processed = []) { $expectedAsString = $this->nodeToText($expected, true, $ignoreCase); $actualAsString = $this->nodeToText($actual, true, $ignoreCase); if ($expectedAsString !== $actualAsString) { $type = $expected instanceof DOMDocument ? 'documents' : 'nodes'; throw new ComparisonFailure( $expected, $actual, $expectedAsString, $actualAsString, false, \sprintf("Failed asserting that two DOM %s are equal.\n", $type) ); } } /** * Returns the normalized, whitespace-cleaned, and indented textual * representation of a DOMNode. */ private function nodeToText(DOMNode $node, bool $canonicalize, bool $ignoreCase): string { if ($canonicalize) { $document = new DOMDocument; @$document->loadXML($node->C14N()); $node = $document; } $document = $node instanceof DOMDocument ? $node : $node->ownerDocument; $document->formatOutput = true; $document->normalizeDocument(); $text = $node instanceof DOMDocument ? $node->saveXML() : $document->saveXML($node); return $ignoreCase ? \strtolower($text) : $text; } } PK!˜PNPPjfile-manager-advanced/application/svg-sanitizer/includes/sebastian/comparator/src/MockObjectComparator.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace SebastianBergmann\Comparator; /** * Compares PHPUnit_Framework_MockObject_MockObject instances for equality. */ class MockObjectComparator extends ObjectComparator { /** * Returns whether the comparator can compare two values. * * @param mixed $expected The first value to compare * @param mixed $actual The second value to compare * * @return bool */ public function accepts($expected, $actual) { return ($expected instanceof \PHPUnit_Framework_MockObject_MockObject || $expected instanceof \PHPUnit\Framework\MockObject\MockObject) && ($actual instanceof \PHPUnit_Framework_MockObject_MockObject || $actual instanceof \PHPUnit\Framework\MockObject\MockObject); } /** * Converts an object to an array containing all of its private, protected * and public properties. * * @param object $object * * @return array */ protected function toArray($object) { $array = parent::toArray($object); unset($array['__phpunit_invocationMocker']); return $array; } } PK!SžóÒæædfile-manager-advanced/application/svg-sanitizer/includes/sebastian/comparator/src/TypeComparator.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace SebastianBergmann\Comparator; /** * Compares values for type equality. */ class TypeComparator extends Comparator { /** * Returns whether the comparator can compare two values. * * @param mixed $expected The first value to compare * @param mixed $actual The second value to compare * * @return bool */ public function accepts($expected, $actual) { return true; } /** * Asserts that two values are equal. * * @param mixed $expected First value to compare * @param mixed $actual Second value to compare * @param float $delta Allowed numerical distance between two values to consider them equal * @param bool $canonicalize Arrays are sorted before comparison when set to true * @param bool $ignoreCase Case is ignored when set to true * * @throws ComparisonFailure */ public function assertEquals($expected, $actual, $delta = 0.0, $canonicalize = false, $ignoreCase = false) { if (\gettype($expected) != \gettype($actual)) { throw new ComparisonFailure( $expected, $actual, // we don't need a diff '', '', false, \sprintf( '%s does not match expected type "%s".', $this->exporter->shortenedExport($actual), \gettype($expected) ) ); } } } PK!Ñ•¼—ßßifile-manager-advanced/application/svg-sanitizer/includes/sebastian/comparator/src/ExceptionComparator.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace SebastianBergmann\Comparator; /** * Compares Exception instances for equality. */ class ExceptionComparator extends ObjectComparator { /** * Returns whether the comparator can compare two values. * * @param mixed $expected The first value to compare * @param mixed $actual The second value to compare * * @return bool */ public function accepts($expected, $actual) { return $expected instanceof \Exception && $actual instanceof \Exception; } /** * Converts an object to an array containing all of its private, protected * and public properties. * * @param object $object * * @return array */ protected function toArray($object) { $array = parent::toArray($object); unset( $array['file'], $array['line'], $array['trace'], $array['string'], $array['xdebug_message'] ); return $array; } } PK!#×{ žžffile-manager-advanced/application/svg-sanitizer/includes/sebastian/comparator/src/DoubleComparator.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace SebastianBergmann\Comparator; /** * Compares doubles for equality. * * @deprecated since v3.0.5 and v4.0.8 */ class DoubleComparator extends NumericComparator { /** * Smallest value available in PHP. * * @var float */ const EPSILON = 0.0000000001; /** * Returns whether the comparator can compare two values. * * @param mixed $expected The first value to compare * @param mixed $actual The second value to compare * * @return bool */ public function accepts($expected, $actual) { return (\is_float($expected) || \is_float($actual)) && \is_numeric($expected) && \is_numeric($actual); } /** * Asserts that two values are equal. * * @param mixed $expected First value to compare * @param mixed $actual Second value to compare * @param float $delta Allowed numerical distance between two values to consider them equal * @param bool $canonicalize Arrays are sorted before comparison when set to true * @param bool $ignoreCase Case is ignored when set to true * * @throws ComparisonFailure */ public function assertEquals($expected, $actual, $delta = 0.0, $canonicalize = false, $ignoreCase = false) { if ($delta == 0) { $delta = self::EPSILON; } parent::assertEquals($expected, $actual, $delta, $canonicalize, $ignoreCase); } } PK!�I­ ­ gfile-manager-advanced/application/svg-sanitizer/includes/sebastian/comparator/src/ComparisonFailure.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace SebastianBergmann\Comparator; use SebastianBergmann\Diff\Differ; use SebastianBergmann\Diff\Output\UnifiedDiffOutputBuilder; /** * Thrown when an assertion for string equality failed. */ class ComparisonFailure extends \RuntimeException { /** * Expected value of the retrieval which does not match $actual. * * @var mixed */ protected $expected; /** * Actually retrieved value which does not match $expected. * * @var mixed */ protected $actual; /** * The string representation of the expected value * * @var string */ protected $expectedAsString; /** * The string representation of the actual value * * @var string */ protected $actualAsString; /** * @var bool */ protected $identical; /** * Optional message which is placed in front of the first line * returned by toString(). * * @var string */ protected $message; /** * Initialises with the expected value and the actual value. * * @param mixed $expected expected value retrieved * @param mixed $actual actual value retrieved * @param string $expectedAsString * @param string $actualAsString * @param bool $identical * @param string $message a string which is prefixed on all returned lines * in the difference output */ public function __construct($expected, $actual, $expectedAsString, $actualAsString, $identical = false, $message = '') { $this->expected = $expected; $this->actual = $actual; $this->expectedAsString = $expectedAsString; $this->actualAsString = $actualAsString; $this->message = $message; } public function getActual() { return $this->actual; } public function getExpected() { return $this->expected; } /** * @return string */ public function getActualAsString() { return $this->actualAsString; } /** * @return string */ public function getExpectedAsString() { return $this->expectedAsString; } /** * @return string */ public function getDiff() { if (!$this->actualAsString && !$this->expectedAsString) { return ''; } $differ = new Differ(new UnifiedDiffOutputBuilder("\n--- Expected\n+++ Actual\n")); return $differ->diff($this->expectedAsString, $this->actualAsString); } /** * @return string */ public function toString() { return $this->message . $this->getDiff(); } } PK! òØØpfile-manager-advanced/application/svg-sanitizer/includes/sebastian/comparator/src/SplObjectStorageComparator.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace SebastianBergmann\Comparator; /** * Compares \SplObjectStorage instances for equality. */ class SplObjectStorageComparator extends Comparator { /** * Returns whether the comparator can compare two values. * * @param mixed $expected The first value to compare * @param mixed $actual The second value to compare * * @return bool */ public function accepts($expected, $actual) { return $expected instanceof \SplObjectStorage && $actual instanceof \SplObjectStorage; } /** * Asserts that two values are equal. * * @param mixed $expected First value to compare * @param mixed $actual Second value to compare * @param float $delta Allowed numerical distance between two values to consider them equal * @param bool $canonicalize Arrays are sorted before comparison when set to true * @param bool $ignoreCase Case is ignored when set to true * * @throws ComparisonFailure */ public function assertEquals($expected, $actual, $delta = 0.0, $canonicalize = false, $ignoreCase = false) { foreach ($actual as $object) { if (!$expected->contains($object)) { throw new ComparisonFailure( $expected, $actual, $this->exporter->export($expected), $this->exporter->export($actual), false, 'Failed asserting that two objects are equal.' ); } } foreach ($expected as $object) { if (!$actual->contains($object)) { throw new ComparisonFailure( $expected, $actual, $this->exporter->export($expected), $this->exporter->export($actual), false, 'Failed asserting that two objects are equal.' ); } } } } PK!°KÄ..hfile-manager-advanced/application/svg-sanitizer/includes/sebastian/comparator/src/ResourceComparator.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace SebastianBergmann\Comparator; /** * Compares resources for equality. */ class ResourceComparator extends Comparator { /** * Returns whether the comparator can compare two values. * * @param mixed $expected The first value to compare * @param mixed $actual The second value to compare * * @return bool */ public function accepts($expected, $actual) { return \is_resource($expected) && \is_resource($actual); } /** * Asserts that two values are equal. * * @param mixed $expected First value to compare * @param mixed $actual Second value to compare * @param float $delta Allowed numerical distance between two values to consider them equal * @param bool $canonicalize Arrays are sorted before comparison when set to true * @param bool $ignoreCase Case is ignored when set to true * * @throws ComparisonFailure */ public function assertEquals($expected, $actual, $delta = 0.0, $canonicalize = false, $ignoreCase = false) { if ($actual != $expected) { throw new ComparisonFailure( $expected, $actual, $this->exporter->export($expected), $this->exporter->export($actual) ); } } } PK!)í %Ä Ä ffile-manager-advanced/application/svg-sanitizer/includes/sebastian/comparator/src/ScalarComparator.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace SebastianBergmann\Comparator; /** * Compares scalar or NULL values for equality. */ class ScalarComparator extends Comparator { /** * Returns whether the comparator can compare two values. * * @param mixed $expected The first value to compare * @param mixed $actual The second value to compare * * @return bool * * @since Method available since Release 3.6.0 */ public function accepts($expected, $actual) { return ((\is_scalar($expected) xor null === $expected) && (\is_scalar($actual) xor null === $actual)) // allow comparison between strings and objects featuring __toString() || (\is_string($expected) && \is_object($actual) && \method_exists($actual, '__toString')) || (\is_object($expected) && \method_exists($expected, '__toString') && \is_string($actual)); } /** * Asserts that two values are equal. * * @param mixed $expected First value to compare * @param mixed $actual Second value to compare * @param float $delta Allowed numerical distance between two values to consider them equal * @param bool $canonicalize Arrays are sorted before comparison when set to true * @param bool $ignoreCase Case is ignored when set to true * * @throws ComparisonFailure */ public function assertEquals($expected, $actual, $delta = 0.0, $canonicalize = false, $ignoreCase = false) { $expectedToCompare = $expected; $actualToCompare = $actual; // always compare as strings to avoid strange behaviour // otherwise 0 == 'Foobar' if ((\is_string($expected) && !\is_bool($actual)) || (\is_string($actual) && !\is_bool($expected))) { $expectedToCompare = (string) $expectedToCompare; $actualToCompare = (string) $actualToCompare; if ($ignoreCase) { $expectedToCompare = \strtolower($expectedToCompare); $actualToCompare = \strtolower($actualToCompare); } } if ($expectedToCompare !== $actualToCompare && \is_string($expected) && \is_string($actual)) { throw new ComparisonFailure( $expected, $actual, $this->exporter->export($expected), $this->exporter->export($actual), false, 'Failed asserting that two strings are equal.' ); } if ($expectedToCompare != $actualToCompare) { throw new ComparisonFailure( $expected, $actual, // no diff is required '', '', false, \sprintf( 'Failed asserting that %s matches expected %s.', $this->exporter->export($actual), $this->exporter->export($expected) ) ); } } } PK!Uù±vvgfile-manager-advanced/application/svg-sanitizer/includes/sebastian/comparator/src/NumericComparator.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace SebastianBergmann\Comparator; /** * Compares numerical values for equality. */ class NumericComparator extends ScalarComparator { /** * Returns whether the comparator can compare two values. * * @param mixed $expected The first value to compare * @param mixed $actual The second value to compare * * @return bool */ public function accepts($expected, $actual) { // all numerical values, but not if both of them are strings return \is_numeric($expected) && \is_numeric($actual) && !(\is_string($expected) && \is_string($actual)); } /** * Asserts that two values are equal. * * @param mixed $expected First value to compare * @param mixed $actual Second value to compare * @param float $delta Allowed numerical distance between two values to consider them equal * @param bool $canonicalize Arrays are sorted before comparison when set to true * @param bool $ignoreCase Case is ignored when set to true * * @throws ComparisonFailure */ public function assertEquals($expected, $actual, $delta = 0.0, $canonicalize = false, $ignoreCase = false) { if (\is_infinite($actual) && \is_infinite($expected)) { return; // @codeCoverageIgnore } if ((\is_infinite($actual) xor \is_infinite($expected)) || (\is_nan($actual) || \is_nan($expected)) || \abs($actual - $expected) > $delta) { throw new ComparisonFailure( $expected, $actual, '', '', false, \sprintf( 'Failed asserting that %s matches expected %s.', $this->exporter->export($actual), $this->exporter->export($expected) ) ); } } } PK!Î9§2ffile-manager-advanced/application/svg-sanitizer/includes/sebastian/comparator/src/ObjectComparator.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace SebastianBergmann\Comparator; /** * Compares objects for equality. */ class ObjectComparator extends ArrayComparator { /** * Returns whether the comparator can compare two values. * * @param mixed $expected The first value to compare * @param mixed $actual The second value to compare * * @return bool */ public function accepts($expected, $actual) { return \is_object($expected) && \is_object($actual); } /** * Asserts that two values are equal. * * @param mixed $expected First value to compare * @param mixed $actual Second value to compare * @param float $delta Allowed numerical distance between two values to consider them equal * @param bool $canonicalize Arrays are sorted before comparison when set to true * @param bool $ignoreCase Case is ignored when set to true * @param array $processed List of already processed elements (used to prevent infinite recursion) * * @throws ComparisonFailure */ public function assertEquals($expected, $actual, $delta = 0.0, $canonicalize = false, $ignoreCase = false, array &$processed = []) { if (\get_class($actual) !== \get_class($expected)) { throw new ComparisonFailure( $expected, $actual, $this->exporter->export($expected), $this->exporter->export($actual), false, \sprintf( '%s is not instance of expected class "%s".', $this->exporter->export($actual), \get_class($expected) ) ); } // don't compare twice to allow for cyclic dependencies if (\in_array([$actual, $expected], $processed, true) || \in_array([$expected, $actual], $processed, true)) { return; } $processed[] = [$actual, $expected]; // don't compare objects if they are identical // this helps to avoid the error "maximum function nesting level reached" // CAUTION: this conditional clause is not tested if ($actual !== $expected) { try { parent::assertEquals( $this->toArray($expected), $this->toArray($actual), $delta, $canonicalize, $ignoreCase, $processed ); } catch (ComparisonFailure $e) { throw new ComparisonFailure( $expected, $actual, // replace "Array" with "MyClass object" \substr_replace($e->getExpectedAsString(), \get_class($expected) . ' Object', 0, 5), \substr_replace($e->getActualAsString(), \get_class($actual) . ' Object', 0, 5), false, 'Failed asserting that two objects are equal.' ); } } } /** * Converts an object to an array containing all of its private, protected * and public properties. * * @param object $object * * @return array */ protected function toArray($object) { return $this->exporter->toArray($object); } } PK!k‚¨�ÍÍ]file-manager-advanced/application/svg-sanitizer/includes/sebastian/comparator/src/Factory.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace SebastianBergmann\Comparator; /** * Factory for comparators which compare values for equality. */ class Factory { /** * @var Factory */ private static $instance; /** * @var Comparator[] */ private $customComparators = []; /** * @var Comparator[] */ private $defaultComparators = []; /** * @return Factory */ public static function getInstance() { if (self::$instance === null) { self::$instance = new self; } return self::$instance; } /** * Constructs a new factory. */ public function __construct() { $this->registerDefaultComparators(); } /** * Returns the correct comparator for comparing two values. * * @param mixed $expected The first value to compare * @param mixed $actual The second value to compare * * @return Comparator */ public function getComparatorFor($expected, $actual) { foreach ($this->customComparators as $comparator) { if ($comparator->accepts($expected, $actual)) { return $comparator; } } foreach ($this->defaultComparators as $comparator) { if ($comparator->accepts($expected, $actual)) { return $comparator; } } } /** * Registers a new comparator. * * This comparator will be returned by getComparatorFor() if its accept() method * returns TRUE for the compared values. It has higher priority than the * existing comparators, meaning that its accept() method will be invoked * before those of the other comparators. * * @param Comparator $comparator The comparator to be registered */ public function register(Comparator $comparator) { \array_unshift($this->customComparators, $comparator); $comparator->setFactory($this); } /** * Unregisters a comparator. * * This comparator will no longer be considered by getComparatorFor(). * * @param Comparator $comparator The comparator to be unregistered */ public function unregister(Comparator $comparator) { foreach ($this->customComparators as $key => $_comparator) { if ($comparator === $_comparator) { unset($this->customComparators[$key]); } } } /** * Unregisters all non-default comparators. */ public function reset() { $this->customComparators = []; } private function registerDefaultComparators() { $this->registerDefaultComparator(new MockObjectComparator); $this->registerDefaultComparator(new DateTimeComparator); $this->registerDefaultComparator(new DOMNodeComparator); $this->registerDefaultComparator(new SplObjectStorageComparator); $this->registerDefaultComparator(new ExceptionComparator); $this->registerDefaultComparator(new ObjectComparator); $this->registerDefaultComparator(new ResourceComparator); $this->registerDefaultComparator(new ArrayComparator); $this->registerDefaultComparator(new NumericComparator); $this->registerDefaultComparator(new ScalarComparator); $this->registerDefaultComparator(new TypeComparator); } private function registerDefaultComparator(Comparator $comparator) { $this->defaultComparators[] = $comparator; $comparator->setFactory($this); } } PK!Vzu÷wwWfile-manager-advanced/application/svg-sanitizer/includes/sebastian/comparator/README.mdnu„[µü¤[![Build Status](https://travis-ci.org/sebastianbergmann/comparator.svg?branch=master)](https://travis-ci.org/sebastianbergmann/comparator) # Comparator This component provides the functionality to compare PHP values for equality. ## Installation You can add this library as a local, per-project dependency to your project using [Composer](https://getcomposer.org/): composer require sebastian/comparator If you only need this library during development, for instance to run your project's test suite, then you should add it as a development-time dependency: composer require --dev sebastian/comparator ## Usage ```php getComparatorFor($date1, $date2); try { $comparator->assertEquals($date1, $date2); print "Dates match"; } catch (ComparisonFailure $failure) { print "Dates don't match"; } ``` PK!ùq¦å  Ufile-manager-advanced/application/svg-sanitizer/includes/sebastian/comparator/LICENSEnu„[µü¤Comparator Copyright (c) 2002-2018, Sebastian Bergmann . All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. * Neither the name of Sebastian Bergmann nor the names of his contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. PK!JÓCƒFF]file-manager-advanced/application/svg-sanitizer/includes/sebastian/global-state/composer.jsonnu„[µü¤{ "name": "sebastian/global-state", "description": "Snapshotting of global state", "keywords": ["global state"], "homepage": "http://www.github.com/sebastianbergmann/global-state", "license": "BSD-3-Clause", "authors": [ { "name": "Sebastian Bergmann", "email": "sebastian@phpunit.de" } ], "prefer-stable": true, "config": { "optimize-autoloader": true, "sort-packages": true }, "require": { "php": ">=7.2", "sebastian/object-reflector": "^1.1.1", "sebastian/recursion-context": "^3.0" }, "require-dev": { "ext-dom": "*", "phpunit/phpunit": "^8.0" }, "suggest": { "ext-uopz": "*" }, "autoload": { "classmap": [ "src/" ] }, "autoload-dev": { "classmap": [ "tests/_fixture/" ], "files": [ "tests/_fixture/SnapshotFunctions.php" ] }, "extra": { "branch-alias": { "dev-master": "3.0-dev" } } } PK!ú³Ì¥««\file-manager-advanced/application/svg-sanitizer/includes/sebastian/global-state/ChangeLog.mdnu„[µü¤# Changes in sebastian/global-state All notable changes in `sebastian/global-state` are documented in this file using the [Keep a CHANGELOG](https://keepachangelog.com/) principles. ## [3.0.5] - 2024-03-02 ### Changed * Do not use implicitly nullable parameters ## [3.0.4] - 2024-03-01 * No code changes, only updated `.gitattributes` to not export non-essential files. ## [3.0.3] - 2023-08-02 ### Changed * Changed usage of `ReflectionProperty::setValue()` to be compatible with PHP 8.3 ## [3.0.2] - 2022-02-10 ### Fixed * The `$includeTraits` parameter of `SebastianBergmann\GlobalState\Snapshot::__construct()` is not respected ## [3.0.1] - 2020-11-30 ### Changed * Changed PHP version constraint in `composer.json` from `^7.2` to `>=7.2` ## [3.0.0] - 2019-02-01 ### Changed * `Snapshot::canBeSerialized()` now recursively checks arrays and object graphs for variables that cannot be serialized ### Removed * This component is no longer supported on PHP 7.0 and PHP 7.1 [3.0.5]: https://github.com/sebastianbergmann/phpunit/compare/3.0.4...3.0.5 [3.0.4]: https://github.com/sebastianbergmann/phpunit/compare/3.0.3...3.0.4 [3.0.3]: https://github.com/sebastianbergmann/phpunit/compare/3.0.2...3.0.3 [3.0.2]: https://github.com/sebastianbergmann/phpunit/compare/3.0.1...3.0.2 [3.0.1]: https://github.com/sebastianbergmann/phpunit/compare/3.0.0...3.0.1 [3.0.0]: https://github.com/sebastianbergmann/phpunit/compare/2.0.0...3.0.0 PK!©ªQYk)k)`file-manager-advanced/application/svg-sanitizer/includes/sebastian/global-state/src/Snapshot.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace SebastianBergmann\GlobalState; use SebastianBergmann\ObjectReflector\ObjectReflector; use SebastianBergmann\RecursionContext\Context; /** * A snapshot of global state. */ class Snapshot { /** * @var Blacklist */ private $blacklist; /** * @var array */ private $globalVariables = []; /** * @var array */ private $superGlobalArrays = []; /** * @var array */ private $superGlobalVariables = []; /** * @var array */ private $staticAttributes = []; /** * @var array */ private $iniSettings = []; /** * @var array */ private $includedFiles = []; /** * @var array */ private $constants = []; /** * @var array */ private $functions = []; /** * @var array */ private $interfaces = []; /** * @var array */ private $classes = []; /** * @var array */ private $traits = []; /** * Creates a snapshot of the current global state. */ public function __construct(?Blacklist $blacklist = null, bool $includeGlobalVariables = true, bool $includeStaticAttributes = true, bool $includeConstants = true, bool $includeFunctions = true, bool $includeClasses = true, bool $includeInterfaces = true, bool $includeTraits = true, bool $includeIniSettings = true, bool $includeIncludedFiles = true) { if ($blacklist === null) { $blacklist = new Blacklist; } $this->blacklist = $blacklist; if ($includeConstants) { $this->snapshotConstants(); } if ($includeFunctions) { $this->snapshotFunctions(); } if ($includeClasses || $includeStaticAttributes) { $this->snapshotClasses(); } if ($includeInterfaces) { $this->snapshotInterfaces(); } if ($includeGlobalVariables) { $this->setupSuperGlobalArrays(); $this->snapshotGlobals(); } if ($includeStaticAttributes) { $this->snapshotStaticAttributes(); } if ($includeIniSettings) { $this->iniSettings = \ini_get_all(null, false); } if ($includeIncludedFiles) { $this->includedFiles = \get_included_files(); } if ($includeTraits) { $this->traits = \get_declared_traits(); } } public function blacklist(): Blacklist { return $this->blacklist; } public function globalVariables(): array { return $this->globalVariables; } public function superGlobalVariables(): array { return $this->superGlobalVariables; } public function superGlobalArrays(): array { return $this->superGlobalArrays; } public function staticAttributes(): array { return $this->staticAttributes; } public function iniSettings(): array { return $this->iniSettings; } public function includedFiles(): array { return $this->includedFiles; } public function constants(): array { return $this->constants; } public function functions(): array { return $this->functions; } public function interfaces(): array { return $this->interfaces; } public function classes(): array { return $this->classes; } public function traits(): array { return $this->traits; } /** * Creates a snapshot user-defined constants. */ private function snapshotConstants(): void { $constants = \get_defined_constants(true); if (isset($constants['user'])) { $this->constants = $constants['user']; } } /** * Creates a snapshot user-defined functions. */ private function snapshotFunctions(): void { $functions = \get_defined_functions(); $this->functions = $functions['user']; } /** * Creates a snapshot user-defined classes. */ private function snapshotClasses(): void { foreach (\array_reverse(\get_declared_classes()) as $className) { $class = new \ReflectionClass($className); if (!$class->isUserDefined()) { break; } $this->classes[] = $className; } $this->classes = \array_reverse($this->classes); } /** * Creates a snapshot user-defined interfaces. */ private function snapshotInterfaces(): void { foreach (\array_reverse(\get_declared_interfaces()) as $interfaceName) { $class = new \ReflectionClass($interfaceName); if (!$class->isUserDefined()) { break; } $this->interfaces[] = $interfaceName; } $this->interfaces = \array_reverse($this->interfaces); } /** * Creates a snapshot of all global and super-global variables. */ private function snapshotGlobals(): void { $superGlobalArrays = $this->superGlobalArrays(); foreach ($superGlobalArrays as $superGlobalArray) { $this->snapshotSuperGlobalArray($superGlobalArray); } foreach (\array_keys($GLOBALS) as $key) { if ($key !== 'GLOBALS' && !\in_array($key, $superGlobalArrays) && $this->canBeSerialized($GLOBALS[$key]) && !$this->blacklist->isGlobalVariableBlacklisted($key)) { /* @noinspection UnserializeExploitsInspection */ $this->globalVariables[$key] = \unserialize(\serialize($GLOBALS[$key])); } } } /** * Creates a snapshot a super-global variable array. */ private function snapshotSuperGlobalArray(string $superGlobalArray): void { $this->superGlobalVariables[$superGlobalArray] = []; if (isset($GLOBALS[$superGlobalArray]) && \is_array($GLOBALS[$superGlobalArray])) { foreach ($GLOBALS[$superGlobalArray] as $key => $value) { /* @noinspection UnserializeExploitsInspection */ $this->superGlobalVariables[$superGlobalArray][$key] = \unserialize(\serialize($value)); } } } /** * Creates a snapshot of all static attributes in user-defined classes. */ private function snapshotStaticAttributes(): void { foreach ($this->classes as $className) { $class = new \ReflectionClass($className); $snapshot = []; foreach ($class->getProperties() as $attribute) { if ($attribute->isStatic()) { $name = $attribute->getName(); if ($this->blacklist->isStaticAttributeBlacklisted($className, $name)) { continue; } $attribute->setAccessible(true); $value = $attribute->getValue(); if ($this->canBeSerialized($value)) { /* @noinspection UnserializeExploitsInspection */ $snapshot[$name] = \unserialize(\serialize($value)); } } } if (!empty($snapshot)) { $this->staticAttributes[$className] = $snapshot; } } } /** * Returns a list of all super-global variable arrays. */ private function setupSuperGlobalArrays(): void { $this->superGlobalArrays = [ '_ENV', '_POST', '_GET', '_COOKIE', '_SERVER', '_FILES', '_REQUEST', ]; } private function canBeSerialized($variable): bool { if (\is_scalar($variable) || $variable === null) { return true; } if (\is_resource($variable)) { return false; } foreach ($this->enumerateObjectsAndResources($variable) as $value) { if (\is_resource($value)) { return false; } if (\is_object($value)) { $class = new \ReflectionClass($value); if ($class->isAnonymous()) { return false; } try { @\serialize($value); } catch (\Throwable $t) { return false; } } } return true; } private function enumerateObjectsAndResources($variable): array { if (isset(\func_get_args()[1])) { $processed = \func_get_args()[1]; } else { $processed = new Context; } $result = []; if ($processed->contains($variable)) { return $result; } $array = $variable; $processed->add($variable); if (\is_array($variable)) { foreach ($array as $element) { if (!\is_array($element) && !\is_object($element) && !\is_resource($element)) { continue; } if (!\is_resource($element)) { /** @noinspection SlowArrayOperationsInLoopInspection */ $result = \array_merge( $result, $this->enumerateObjectsAndResources($element, $processed) ); } else { $result[] = $element; } } } else { $result[] = $variable; foreach ((new ObjectReflector)->getAttributes($variable) as $value) { if (!\is_array($value) && !\is_object($value) && !\is_resource($value)) { continue; } if (!\is_resource($value)) { /** @noinspection SlowArrayOperationsInLoopInspection */ $result = \array_merge( $result, $this->enumerateObjectsAndResources($value, $processed) ); } else { $result[] = $value; } } } return $result; } } PK!7gêÑj j dfile-manager-advanced/application/svg-sanitizer/includes/sebastian/global-state/src/CodeExporter.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace SebastianBergmann\GlobalState; /** * Exports parts of a Snapshot as PHP code. */ final class CodeExporter { public function constants(Snapshot $snapshot): string { $result = ''; foreach ($snapshot->constants() as $name => $value) { $result .= \sprintf( 'if (!defined(\'%s\')) define(\'%s\', %s);' . "\n", $name, $name, $this->exportVariable($value) ); } return $result; } public function globalVariables(Snapshot $snapshot): string { $result = '$GLOBALS = [];' . \PHP_EOL; foreach ($snapshot->globalVariables() as $name => $value) { $result .= \sprintf( '$GLOBALS[%s] = %s;' . \PHP_EOL, $this->exportVariable($name), $this->exportVariable($value) ); } return $result; } public function iniSettings(Snapshot $snapshot): string { $result = ''; foreach ($snapshot->iniSettings() as $key => $value) { $result .= \sprintf( '@ini_set(%s, %s);' . "\n", $this->exportVariable($key), $this->exportVariable($value) ); } return $result; } private function exportVariable($variable): string { if (\is_scalar($variable) || null === $variable || (\is_array($variable) && $this->arrayOnlyContainsScalars($variable))) { return \var_export($variable, true); } return 'unserialize(' . \var_export(\serialize($variable), true) . ')'; } private function arrayOnlyContainsScalars(array $array): bool { $result = true; foreach ($array as $element) { if (\is_array($element)) { $result = $this->arrayOnlyContainsScalars($element); } elseif (!\is_scalar($element) && null !== $element) { $result = false; } if ($result === false) { break; } } return $result; } } PK!=ŵ@Á Á afile-manager-advanced/application/svg-sanitizer/includes/sebastian/global-state/src/Blacklist.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace SebastianBergmann\GlobalState; /** * A blacklist for global state elements that should not be snapshotted. */ final class Blacklist { /** * @var array */ private $globalVariables = []; /** * @var string[] */ private $classes = []; /** * @var string[] */ private $classNamePrefixes = []; /** * @var string[] */ private $parentClasses = []; /** * @var string[] */ private $interfaces = []; /** * @var array */ private $staticAttributes = []; public function addGlobalVariable(string $variableName): void { $this->globalVariables[$variableName] = true; } public function addClass(string $className): void { $this->classes[] = $className; } public function addSubclassesOf(string $className): void { $this->parentClasses[] = $className; } public function addImplementorsOf(string $interfaceName): void { $this->interfaces[] = $interfaceName; } public function addClassNamePrefix(string $classNamePrefix): void { $this->classNamePrefixes[] = $classNamePrefix; } public function addStaticAttribute(string $className, string $attributeName): void { if (!isset($this->staticAttributes[$className])) { $this->staticAttributes[$className] = []; } $this->staticAttributes[$className][$attributeName] = true; } public function isGlobalVariableBlacklisted(string $variableName): bool { return isset($this->globalVariables[$variableName]); } public function isStaticAttributeBlacklisted(string $className, string $attributeName): bool { if (\in_array($className, $this->classes)) { return true; } foreach ($this->classNamePrefixes as $prefix) { if (\strpos($className, $prefix) === 0) { return true; } } $class = new \ReflectionClass($className); foreach ($this->parentClasses as $type) { if ($class->isSubclassOf($type)) { return true; } } foreach ($this->interfaces as $type) { if ($class->implementsInterface($type)) { return true; } } if (isset($this->staticAttributes[$className][$attributeName])) { return true; } return false; } } PK!p˜»Æ††sfile-manager-advanced/application/svg-sanitizer/includes/sebastian/global-state/src/exceptions/RuntimeException.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace SebastianBergmann\GlobalState; final class RuntimeException extends \RuntimeException implements Exception { } PK!ch5NNlfile-manager-advanced/application/svg-sanitizer/includes/sebastian/global-state/src/exceptions/Exception.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace SebastianBergmann\GlobalState; interface Exception { } PK!|T@**`file-manager-advanced/application/svg-sanitizer/includes/sebastian/global-state/src/Restorer.phpnu„[µü¤ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace SebastianBergmann\GlobalState; /** * Restorer of snapshots of global state. */ class Restorer { /** * Deletes function definitions that are not defined in a snapshot. * * @throws RuntimeException when the uopz_delete() function is not available * * @see https://github.com/krakjoe/uopz */ public function restoreFunctions(Snapshot $snapshot): void { if (!\function_exists('uopz_delete')) { throw new RuntimeException('The uopz_delete() function is required for this operation'); } $functions = \get_defined_functions(); foreach (\array_diff($functions['user'], $snapshot->functions()) as $function) { uopz_delete($function); } } /** * Restores all global and super-global variables from a snapshot. */ public function restoreGlobalVariables(Snapshot $snapshot): void { $superGlobalArrays = $snapshot->superGlobalArrays(); foreach ($superGlobalArrays as $superGlobalArray) { $this->restoreSuperGlobalArray($snapshot, $superGlobalArray); } $globalVariables = $snapshot->globalVariables(); foreach (\array_keys($GLOBALS) as $key) { if ($key !== 'GLOBALS' && !\in_array($key, $superGlobalArrays) && !$snapshot->blacklist()->isGlobalVariableBlacklisted($key)) { if (\array_key_exists($key, $globalVariables)) { $GLOBALS[$key] = $globalVariables[$key]; } else { unset($GLOBALS[$key]); } } } } /** * Restores all static attributes in user-defined classes from this snapshot. */ public function restoreStaticAttributes(Snapshot $snapshot): void { $current = new Snapshot($snapshot->blacklist(), false, false, false, false, true, false, false, false, false); $newClasses = \array_diff($current->classes(), $snapshot->classes()); unset($current); foreach ($snapshot->staticAttributes() as $className => $staticAttributes) { foreach ($staticAttributes as $name => $value) { $reflector = new \ReflectionProperty($className, $name); $reflector->setAccessible(true); $reflector->setValue(null, $value); } } foreach ($newClasses as $className) { $class = new \ReflectionClass($className); $defaults = $class->getDefaultProperties(); foreach ($class->getProperties() as $attribute) { if (!$attribute->isStatic()) { continue; } $name = $attribute->getName(); if ($snapshot->blacklist()->isStaticAttributeBlacklisted($className, $name)) { continue; } if (!isset($defaults[$name])) { continue; } $attribute->setAccessible(true); $attribute->setValue(null, $defaults[$name]); } } } /** * Restores a super-global variable array from this snapshot. */ private function restoreSuperGlobalArray(Snapshot $snapshot, string $superGlobalArray): void { $superGlobalVariables = $snapshot->superGlobalVariables(); if (isset($GLOBALS[$superGlobalArray]) && \is_array($GLOBALS[$superGlobalArray]) && isset($superGlobalVariables[$superGlobalArray])) { $keys = \array_keys( \array_merge( $GLOBALS[$superGlobalArray], $superGlobalVariables[$superGlobalArray] ) ); foreach ($keys as $key) { if (isset($superGlobalVariables[$superGlobalArray][$key])) { $GLOBALS[$superGlobalArray][$key] = $superGlobalVariables[$superGlobalArray][$key]; } else { unset($GLOBALS[$superGlobalArray][$key]); } } } } } PK!ÂÚYD{{Yfile-manager-advanced/application/svg-sanitizer/includes/sebastian/global-state/README.mdnu„[µü¤# global-state Snapshotting of global state, factored out of PHPUnit into a stand-alone component. [![Build Status](https://travis-ci.org/sebastianbergmann/global-state.svg?branch=master)](https://travis-ci.org/sebastianbergmann/global-state) ## Installation You can add this library as a local, per-project dependency to your project using [Composer](https://getcomposer.org/): composer require sebastian/global-state If you only need this library during development, for instance to run your project's test suite, then you should add it as a development-time dependency: composer require --dev sebastian/global-state PK!ØJ‚€Wfile-manager-advanced/application/svg-sanitizer/includes/sebastian/global-state/LICENSEnu„[µü¤sebastian/global-state Copyright (c) 2001-2022, Sebastian Bergmann . All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. * Neither the name of Sebastian Bergmann nor the names of his contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. PK!tP£Çmm4file-manager-advanced/application/class_fma_lang.phpnu„[µü¤'en', 'Arabic'=>'ar', 'Bulgarian' => 'bg', 'Catalan' => 'ca', 'Czech' => 'cs', 'Danish' => 'da', 'German' => 'de', 'Greek' => 'el', 'Español' => 'es', 'Persian-Farsi' => 'fa', 'Faroese translation' => 'fo', 'French' => 'fr', 'Hebrew' => 'he', 'hr' => 'hr', 'magyar' => 'hu', 'Indonesian' => 'id', 'Italiano' => 'it', 'Japanese' => 'ja', 'Korean' => 'ko', 'Dutch' => 'nl', 'Norwegian' => 'no', 'Polski' => 'pl', 'Português' => 'pt_BR', 'Română' => 'ro', 'Russian' => 'ru', 'Slovak' => 'sk', 'Slovenian' => 'sl', 'Serbian' => 'sr', 'Swedish' => 'sv', 'Türkçe' => 'tr', 'Uyghur' => 'ug_CN', 'Ukrainian' => 'uk', 'Vietnamese' => 'vi', 'Simplified Chinese' => 'zh_CN', 'Traditional Chinese' => 'zh_TW', ); return $locales; } }PK!ubº�AABfile-manager-advanced/application/class_fma_elfinder_connector.phpnu„[µü¤input_filter(), so unslashing * the full array again would double-strip put content (\" becomes "). * * @param mixed $args Request argument or array of arguments. * @return mixed */ protected function input_filter($args) { if (is_array($args)) { return parent::input_filter($args); } $args = parent::input_filter($args); return function_exists('wp_unslash') ? wp_unslash($args) : $args; } /** * Keep issuing a token for the JS client, but do not block write commands on it. */ protected function csrfProtectedCommand( $cmd ) { return false; } protected function issueCsrfToken() { return $this->generateCsrfToken(); } /** * Host-safe passthrough fallback. * * @param resource $fp File pointer. * @return void */ protected function fma_stream_passthru($fp) { if (function_exists('fpassthru')) { fpassthru($fp); return; } while (!feof($fp)) { $chunk = fread($fp, 8192); if ($chunk === false) { break; } echo $chunk; } } /** * Override only to customize stream output fallback. * * @param array $data elFinder response. * @return void * @throws elFinderAbortException */ protected function output(array $data) { $this->elFinder->getSession()->close(); ignore_user_abort(false); if ($this->header) { self::sendHeader($this->header); } if (isset($data['pointer'])) { elFinder::extendTimeLimit(0); if (!empty($data['header'])) { self::sendHeader($data['header']); } while (ob_get_level() && ob_end_clean()) { } $toEnd = true; $fp = $data['pointer']; $sendData = !($this->reqMethod === 'HEAD' || !empty($data['info']['xsendfile'])); $psize = null; if (($this->reqMethod === 'GET' || !$sendData) && (elFinder::isSeekableStream($fp) || elFinder::isSeekableUrl($fp)) && (array_search('Accept-Ranges: none', headers_list()) === false)) { header('Accept-Ranges: bytes'); if (!empty($_SERVER['HTTP_RANGE'])) { $size = $data['info']['size']; $end = $size - 1; if (preg_match('/bytes=(\d*)-(\d*)(,?)/i', $_SERVER['HTTP_RANGE'], $matches)) { if (empty($matches[3])) { if (empty($matches[1]) && $matches[1] !== '0') { $start = $size - $matches[2]; } else { $start = intval($matches[1]); if (!empty($matches[2])) { $end = intval($matches[2]); if ($end >= $size) { $end = $size - 1; } $toEnd = ($end == ($size - 1)); } } $psize = $end - $start + 1; header('HTTP/1.1 206 Partial Content'); header('Content-Length: ' . $psize); header('Content-Range: bytes ' . $start . '-' . $end . '/' . $size); if (isset($data['info']['xsendfile']) && strtolower($data['info']['xsendfile']) === 'x-sendfile') { if (function_exists('header_remove')) { header_remove($data['info']['xsendfile']); } else { header($data['info']['xsendfile'] . ':'); } unset($data['info']['xsendfile']); if ($this->reqMethod !== 'HEAD') { $sendData = true; } } $sendData && !elFinder::isSeekableUrl($fp) && fseek($fp, $start); } } } if ($sendData && is_null($psize)) { elFinder::rewind($fp); } } else { header('Accept-Ranges: none'); if (isset($data['info']) && !$data['info']['size']) { if (function_exists('header_remove')) { header_remove('Content-Length'); } else { header('Content-Length:'); } } } if ($sendData) { if ($toEnd || elFinder::isSeekableUrl($fp)) { if (version_compare(PHP_VERSION, '5.6', '<')) { file_put_contents('php://output', $fp); } else { $this->fma_stream_passthru($fp); } } else { $out = fopen('php://output', 'wb'); stream_copy_to_stream($fp, $out, $psize); fclose($out); } } if (!empty($data['volume'])) { $data['volume']->close($fp, $data['info']['hash']); } else { fclose($fp); } exit(); } self::outputJson($data); exit(0); } } PK!Q,ñpÆ7Æ7@file-manager-advanced/application/class_fma_local_filesystem.phpnu„[µü¤contentSearchTag = ''; $tagFromHook = self::getContentSearchTag(); if (empty($tagFromHook) && strpos($q, '__CONTENT_SEARCH__:') === 0) { $tagFromHook = substr($q, strlen('__CONTENT_SEARCH__:')); $q = ''; } if (empty($tagFromHook) && $type === 'SearchTag' && $q !== '' && $q !== 'CONTENTSEARCHPLACEHOLDER') { $tagFromHook = $q; } $isContentSearch = ($type === 'SearchTag' || ($tagFromHook !== '' && $tagFromHook !== false && $tagFromHook !== null)); if ($isContentSearch) { $this->contentSearchTag = $tagFromHook; if ($q === '') { $q = 'CONTENTSEARCHPLACEHOLDER'; } } // Start of parent search logic (from elFinderVolumeDriver.class.php line 3160) $res = array(); $matchMethod = empty($type) ? 'searchMatchName' : 'searchMatch' . $type; if (!method_exists($this, $matchMethod)) { $matchMethod = 'searchMatchName'; } $dir = null; if ($hash) { $dir = $this->decode($hash); $stat = $this->stat($dir); if (!$stat || $stat['mime'] !== 'directory' || !$stat['read']) { $q = ''; } } if ($mimes && $this->onlyMimes) { $mimes = array_intersect($mimes, $this->onlyMimes); if (!$mimes) { $q = ''; } } $this->searchStart = time(); $qs = preg_split('/"([^"]+)"| +/', $q, -1, PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE); $query = $excludes = array(); foreach ($qs as $_q) { $_q = trim($_q); if ($_q !== '') { if ($_q[0] === '-') { if (isset($_q[1])) { $excludes[] = substr($_q, 1); } } else { $query[] = $_q; } } } // For content search, ensure we don't return early even if query is empty if (!$query && !$isContentSearch) { $q = ''; } else { if ($query) { $q = join(' ', $query); } else { // For content search, keep q as placeholder so doSearch is called $q = 'CONTENTSEARCHPLACEHOLDER'; } $this->doSearchCurrentQuery = array( 'q' => $q, 'excludes' => $excludes, 'matchMethod' => $matchMethod ); // Set type for content search if ($isContentSearch) { $this->doSearchCurrentQuery['type'] = 'SearchTag'; } } // For content search, don't return early even if q is empty if (($q === '' && !$isContentSearch) || $this->commandDisabled('search')) { return $res; } // valided regex $this->options['searchExDirReg'] if ($this->options['searchExDirReg']) { if (false === preg_match($this->options['searchExDirReg'], '')) { $this->options['searchExDirReg'] = ''; } } // check the leaf root too if (!$mimes && (is_null($dir) || $dir == $this->root)) { $rootStat = $this->stat($this->root); if (!empty($rootStat['phash'])) { if ($isContentSearch || $this->stripos($rootStat['name'], $q) !== false) { $res = array($rootStat); } } } $result = array_merge($res, $this->doSearch(is_null($dir) ? $this->root : $dir, $q, $mimes)); return $result; } /** * Static storage for content search tag (set by bind hook) */ protected static $contentSearchTagStorage = ''; /** * Set content search tag (called by bind hook) */ public static function setContentSearchTag($tag) { self::$contentSearchTagStorage = $tag; } /** * Get content search tag */ public static function getContentSearchTag() { return self::$contentSearchTagStorage; } /** * Override doSearch to implement content-based search */ protected function doSearch($path, $q, $mimes) { $result = array(); $matchMethod = empty($this->doSearchCurrentQuery['matchMethod']) ? 'searchMatchName' : $this->doSearchCurrentQuery['matchMethod']; $timeout = $this->options['searchTimeout'] ? $this->searchStart + $this->options['searchTimeout'] : 0; if ($timeout && $timeout < time()) { $this->setError(elFinder::ERROR_SEARCH_TIMEOUT, $this->path($this->encode($path))); return $result; } // Get tag for content search - check instance property first, then static $tag = ''; if (!empty($this->contentSearchTag)) { $tag = $this->contentSearchTag; } else { $tag = self::getContentSearchTag(); } // Check if this is content search // Primary indicator: type is set to SearchTag in doSearchCurrentQuery // Secondary: we have a tag stored $qInQuery = !empty($this->doSearchCurrentQuery['q']) ? $this->doSearchCurrentQuery['q'] : $q; // For content search, q might be 'CONTENTSEARCHPLACEHOLDER' or empty after parent processes it $isPlaceholderQ = ($qInQuery === 'CONTENTSEARCHPLACEHOLDER' || $qInQuery === '' || trim($qInQuery) === ''); // Check if type is already set in doSearchCurrentQuery $searchType = !empty($this->doSearchCurrentQuery['type']) ? $this->doSearchCurrentQuery['type'] : ''; // Determine if this is content search $hasTag = ($tag !== '' && $tag !== null && $tag !== false); $isContentSearch = false; if ($hasTag) { // If we have a tag, check if this is content search if ($isPlaceholderQ || $searchType === 'SearchTag') { $isContentSearch = true; // Ensure type is set for recursive calls if (!isset($this->doSearchCurrentQuery['type'])) { $this->doSearchCurrentQuery['type'] = 'SearchTag'; } } } foreach ($this->scandirCE($path) as $p) { elFinder::extendTimeLimit($this->options['searchTimeout'] + 30); if ($timeout && ($this->error || $timeout < time())) { !$this->error && $this->setError(elFinder::ERROR_SEARCH_TIMEOUT, $this->path($this->encode($path))); break; } $stat = $this->stat($p); if (!$stat) { continue; } if (!empty($stat['hidden']) || !$this->mimeAccepted($stat['mime'], $mimes)) { continue; } $name = $stat['name']; if ($this->doSearchCurrentQuery['excludes']) { foreach ($this->doSearchCurrentQuery['excludes'] as $exclude) { if ($this->stripos($name, $exclude) !== false) { continue 2; } } } // For content search, skip directories completely (only search in files) if ($isContentSearch && $stat['mime'] === 'directory') { // Skip heavy/irrelevant dirs to avoid timeout $skipDirs = array('node_modules', 'vendor', '.git', '.svn', 'bower_components'); if (in_array(strtolower($name), $skipDirs)) { continue; } // Still recurse into directories for content search, but don't include them in results if ($stat['read'] && !isset($stat['alias'])) { if (!$this->options['searchExDirReg'] || !preg_match($this->options['searchExDirReg'], $p)) { $result = array_merge($result, $this->doSearch($p, $q, $mimes)); } } continue; // Skip directories in content search results } // Check tag match (search inside file contents) for content search $tagMatch = true; if ($isContentSearch && $stat['mime'] !== 'directory' && is_readable($p)) { $tagMatch = false; // Only search in text-based files $textMimes = array('text/', 'application/javascript', 'application/json', 'application/xml', 'application/x-php', 'text/x-php'); $isTextFile = false; foreach ($textMimes as $textMime) { if (strpos($stat['mime'], $textMime) === 0) { $isTextFile = true; break; } } // Also check by extension $textExtensions = array('txt', 'php', 'js', 'css', 'html', 'htm', 'xml', 'json', 'md', 'log', 'sql', 'csv', 'ini', 'conf', 'config', 'yaml', 'yml'); $ext = strtolower(pathinfo($p, PATHINFO_EXTENSION)); if (!$isTextFile && in_array($ext, $textExtensions)) { $isTextFile = true; } if ($isTextFile) { try { $maxRead = 2 * 1024 * 1024; // 2MB max read per file for content search $size = isset($stat['size']) ? (int) $stat['size'] : 0; if ($size > 0 && $size > $maxRead) { $fh = @fopen($p, 'rb'); if ($fh) { $content = @fread($fh, $maxRead); @fclose($fh); } else { $content = false; } } else { $content = @file_get_contents($p); } if ($content !== false && $content !== '') { if (stripos($content, $tag) !== false) { $tagMatch = true; } } } catch (Exception $e) { $tagMatch = false; } } else { $tagMatch = false; } } // Check name match - skip for content search $nameMatch = true; if (!$isContentSearch) { // Normal name-based search $nameMatch = ($q === '' || $this->$matchMethod($name, $q, $p) !== false); } // For content search, nameMatch is always true (we only care about content match) // Include file if both name and tag match // For content search, only include files (not directories) if ((!$mimes || $stat['mime'] !== 'directory') && $nameMatch && $tagMatch) { $stat['path'] = $this->path($stat['hash']); if ($this->URL && !isset($stat['url'])) { $path = str_replace($this->separator, '/', substr($p, strlen($this->root) + 1)); if ($this->encoding) { $path = str_replace('%2F', '/', rawurlencode($this->convEncIn($path, true))); } else { $path = str_replace('%2F', '/', rawurlencode($path)); } $stat['url'] = $this->URL . $path; } $result[] = $stat; } // Recurse into directories for non-content searches // (For content searches, we already handled recursion above) if (!$isContentSearch && $stat['mime'] == 'directory' && $stat['read'] && !isset($stat['alias'])) { if (!$this->options['searchExDirReg'] || !preg_match($this->options['searchExDirReg'], $p)) { $result = array_merge($result, $this->doSearch($p, $q, $mimes)); } } } return $result; } /** * Skip hidden items when scanning children for paste/move pre-checks. * * elFinder's copy() loop already ignores hidden files, but paste() calls * closest('read', false) first and walks every child — including hidden * .htaccess (read=false when "Display .htaccess?" is off). That blocked * entire folder copy with "Permission denied". * * Exception: when looking for locked=true (rm/archive safety), do NOT skip * hidden items — restricted .php files are hidden+locked and must block * recursive delete / archive (AFM-885). * * @param string $path Directory path. * @param string $attr Attribute name. * @param bool $val Attribute value to match. * @return string|false */ protected function childsByAttr($path, $attr, $val) { foreach ($this->scandirCE($path) as $p) { $stat = $this->stat($p); if ('locked' !== $attr && !empty($stat['hidden'])) { continue; } if (($_p = $this->closestByAttr($p, $attr, $val)) != false) { return $_p; } } return false; } } PK!årœ¥õ õ Cfile-manager-advanced/application/rest-api/class-fma-controller.phpnu„[µü¤namespace, '/hide-banner', array( 'methods' => $wp_rest_server::CREATABLE, 'permission_callback' => array( $this, 'permission_callback' ), 'callback' => array( $this, 'hide_banner' ), ) ); register_rest_route( $this->namespace, '/minimize-maximize-banner', array( 'methods' => $wp_rest_server::CREATABLE, 'permission_callback' => array( $this, 'permission_callback' ), 'callback' => array( $this, 'minimize_maximize_banner' ), ) ); } /** * Permission Callback * * @since 5.3.2 * @return bool */ public function permission_callback() { return is_user_logged_in() && current_user_can( 'manage_options' ); } /** * Hide Banner * @since 5.3.0 * * @param WP_REST_Request $request Rest API Request. * * @return WP_REST_Response */ public function hide_banner( $request ) { update_option( '_fma_banner_hide', 'yes' ); return new WP_REST_Response( array( 'success' => true ), 200 ); } /** * Minimize Maximize Banner * @since 5.3.0 * * @param WP_REST_Request $request Rest API Request. * * @return WP_REST_Response */ public function minimize_maximize_banner( $request ) { $action = $request->get_param( 'action' ); $action = sanitize_text_field( wp_unslash( $action ) ); update_option( '_fma_banner_minimize', $action ); return new WP_REST_Response( array( 'success' => true ), 200 ); } /** * Get Singleton Instance * @since 5.3.0 * * @return FMA_Controller */ public static function get_instance() { if ( is_null( self::$instance ) ) { self::$instance = new FMA_Controller(); } return self::$instance; } } FMA_Controller::get_instance(); endif; PK!óõÅ-J-J4file-manager-advanced/application/class_fma_main.phpnu„[µü¤settings = get_option('fmaoptions'); add_action('admin_init', array($this, 'admin_init')); // Initialize SMTP recommendation $this->init_smtp_recommendation(); } /** * Load Menus */ public function fma_menus() { include 'class_fma_admin_menus.php'; $fma_menus = new class_fma_admin_menus(); $fma_menus->load_menus(); } /** * Load File Manager UI */ public function fma_load_fma_ui() { // Clear any buffered output so file/download streams stay binary-clean. while (ob_get_level()) { ob_end_clean(); } class_fma_permissions::verify_ajax_access(); $fmakey = isset($_REQUEST['_fmakey']) ? sanitize_text_field(wp_unslash($_REQUEST['_fmakey'])) : ''; if ('' === $fmakey || !wp_verify_nonce($fmakey, 'fmaskey')) { wp_die(esc_html__('Security check failed', 'file-manager-advanced'), esc_html__('Forbidden', 'file-manager-advanced'), array('response' => 403)); } include 'class_fma_connector.php'; $fma_connector = new class_fma_connector(); $fma_connector->fma_local_file_system(); } /** * Load Scripts * * @param string $hook The current admin page. */ public function fma_scripts($hook) { $locale = isset($this->settings['fma_locale']) ? sanitize_file_name($this->settings['fma_locale']) : 'en'; $display_ui_options = isset($this->settings['display_ui_options']) ? $this->settings['display_ui_options'] : FMA_UI; $cm_theme = isset($this->settings['fma_cm_theme']) ? $this->settings['fma_cm_theme'] : 'default'; $library_url = FMA_PLUGIN_URL . 'application/library/'; $hide_path = false; if (isset($this->settings['hide_path']) && 1 === absint($this->settings['hide_path'])) { $hide_path = true; } if ('toplevel_page_file_manager_advanced_ui' === $hook) { if (isset($_GET['page']) && 'file_manager_advanced_ui' === sanitize_text_field(wp_unslash($_GET['page']))) { // phpcs:ignore WordPress.Security.NonceVerification.Recommended wp_enqueue_style('elfinder.jquery-ui', $library_url . 'jquery/jquery-ui.min.css', array(), FMA_VERSION, 'all'); wp_enqueue_style('elfinder', $library_url . 'css/elfinder.min.css', array(), FMA_VERSION, 'all'); wp_enqueue_style('elfinder.theme', $library_url . 'css/theme.css', array(), FMA_VERSION, 'all'); wp_enqueue_style('codemirror', $library_url . 'codemirror/lib/codemirror.css', array(), FMA_VERSION, 'all'); if (isset($this->settings['fma_theme']) && in_array($this->settings['fma_theme'], array('dark', 'grey', 'windows10', 'bootstrap', 'mono', 'm-light', 'moono'), true)) { wp_enqueue_style('elfinder.preview', $library_url . 'themes/' . $this->settings['fma_theme'] . '/css/theme.css', array(), FMA_VERSION, 'all'); } wp_enqueue_style('elfinder.styles', FMA_PLUGIN_URL . 'application/assets/css/custom_style_filemanager_advanced.css', array(), FMA_VERSION, 'all'); wp_enqueue_script('elfinder', $library_url . 'js/elfinder.min.js', array('jquery', 'jquery-ui-core', 'jquery-ui-selectable', 'jquery-ui-draggable', 'jquery-ui-droppable', 'jquery-ui-resizable', 'jquery-ui-dialog', 'jquery-ui-slider', 'jquery-ui-tabs'), FMA_VERSION, true); wp_enqueue_script('fma-elfinder-security', FMA_PLUGIN_URL . 'application/assets/js/fma-elfinder-security.js', array('jquery', 'elfinder'), FMA_VERSION, true); wp_enqueue_script('codemirror', $library_url . 'codemirror/lib/codemirror.js', array(), FMA_VERSION, true); wp_enqueue_script('codemirror.htmlmixed', $library_url . 'codemirror/mode/htmlmixed/htmlmixed.js', array(), FMA_VERSION, true); wp_enqueue_script('codemirror.xml', $library_url . 'codemirror/mode/xml/xml.js', array(), FMA_VERSION, true); wp_enqueue_script('codemirror.css', $library_url . 'codemirror/mode/css/css.js', array(), FMA_VERSION, true); wp_enqueue_script('codemirror.javascript', $library_url . 'codemirror/mode/javascript/javascript.js', array(), FMA_VERSION, true); wp_enqueue_script('codemirror.clike', $library_url . 'codemirror/mode/clike/clike.js', array(), FMA_VERSION, true); wp_enqueue_script('codemirror.php', $library_url . 'codemirror/mode/php/php.js', array(), FMA_VERSION, true); if ('en' !== $locale) { wp_enqueue_script('elfinder.language', $library_url . sprintf('js/i18n/elfinder.%s.js', $locale), array('elfinder'), FMA_VERSION, true); } if ('default' !== $cm_theme) { wp_enqueue_style('codemirror.theme', $library_url . 'codemirror/theme/' . $cm_theme . '.css', array(), FMA_VERSION, 'all'); } wp_enqueue_script('fma-elfinder-commands', FMA_PLUGIN_URL . 'application/assets/js/fma-elfinder-commands.js', array('jquery', 'elfinder', 'fma-elfinder-security'), FMA_VERSION, true); wp_enqueue_script('elfinder.script', FMA_PLUGIN_URL . 'application/assets/js/elfinder_script.js', array('jquery', 'fma-elfinder-security', 'fma-elfinder-commands'), FMA_VERSION, true); wp_localize_script( 'elfinder.script', 'afm_object', array( 'ajaxurl' => admin_url('admin-ajax.php'), 'nonce' => wp_create_nonce('fmaskey'), 'locale' => $locale, 'ui' => $display_ui_options, 'cm_theme' => $cm_theme, 'hide_path' => $hide_path, 'plugin_url' => FMA_PLUGIN_URL, 'debug_enabled' => isset($this->settings['fma_debug_enabled']) ? $this->settings['fma_debug_enabled'] : '0', ) ); } } wp_register_style('afm-jquery.select2', FMA_PLUGIN_URL . 'application/assets/css/select2/jquery.select2.min.css', array(), FMA_VERSION, 'all'); wp_register_script('afm-jquery.select2', FMA_PLUGIN_URL . 'application/assets/js/select2/jquery.select2.min.js', array('jquery'), FMA_VERSION, true); if (in_array($hook, array('file-manager_page_file_manager_advanced_controls', 'file-manager_page_file_manager_advanced_shortcodes', 'file-manager_page_afmp-adminer', 'file-manager_page_afmp-dropbox', 'file-manager_page_afmp-googledrive', 'file-manager_page_afmp-googlecloud', 'file-manager_page_afmp-github', 'toplevel_page_file_manager_advanced_ui', 'file-manager_page_afmp-file-logs', 'file-manager_page_afmp-onedrive', 'file-manager_page_afmp-aws', 'file-manager_page_afm-integrations-pro'), true)) { wp_enqueue_style('afm-admin', FMA_PLUGIN_URL . 'application/assets/css/afm-styles.css', array('afm-jquery.select2'), FMA_VERSION, 'all'); wp_enqueue_script('afm-admin', FMA_PLUGIN_URL . 'application/assets/js/afm-scripts.js', array('afm-jquery.select2'), FMA_VERSION, true); wp_localize_script( 'afm-admin', 'afmAdmin', array( 'assetsURL' => FMA_PLUGIN_URL . 'application/assets/', 'jsonURL' => rest_url(), 'siteURL' => untrailingslashit(site_url()), ), ); // Enqueue SMTP scripts if we are on the settings page if ($hook === 'file-manager_page_file_manager_advanced_controls' && $this->recommend_smtp) { $this->recommend_smtp->admin_enqueue_scripts(); } } } /** * Code Mirror Themes */ public static function cm_themes() { $cm_themes_dir = FMA_CM_THEMES_PATH; $cm_themes = []; $cm_themes['default'] = array( 'title' => 'default', 'pro' => false, ); $free_themes = array('3024-day', '3024-night', 'base16-dark', 'base16-light', 'downtown-light'); foreach (glob($cm_themes_dir . '/*.css') as $file) { $bn = basename($file, ".css"); $args = array( 'title' => $bn, 'pro' => true, ); if (in_array($bn, $free_themes, true)) { $args['pro'] = false; } $cm_themes[$bn] = $args; } usort( $cm_themes, function ($a, $b) { if ($a['pro'] === $b['pro']) { return 0; } return $a['pro'] ? 1 : -1; } ); return $cm_themes; } /** * Thank-you / Rate Us line used in AFM admin headers. * * @return string */ public static function review_header_line_html() { $img = plugins_url( 'images/5stars.png', FMAFILEPATH . 'application/pages/main.php' ); return sprintf( '%s%s ', wp_kses_post( __( 'Thank you for using File Manager Advanced. If happy then ', 'file-manager-advanced' ) ), esc_url( 'https://wordpress.org/support/plugin/file-manager-advanced/reviews/?filter=5' ), esc_html__( ' Rate Us', 'file-manager-advanced' ), esc_url( $img ) ); } /** * Show the Rate Us line in the header on AFM pages except the main File Manager screen. */ public function maybe_inject_review_header_line() { if ( ! is_admin() ) { return; } $page = isset( $_GET['page'] ) ? sanitize_text_field( wp_unslash( $_GET['page'] ) ) : ''; $post_type = isset( $_GET['post_type'] ) ? sanitize_text_field( wp_unslash( $_GET['post_type'] ) ) : ''; if ( 'file_manager_advanced_ui' === $page ) { return; } $is_afm = false; if ( '' !== $page && ( 0 === strpos( $page, 'file_manager_advanced' ) || 0 === strpos( $page, 'afmp-' ) || 0 === strpos( $page, 'fma_shortcode' ) || 'afm-integrations-pro' === $page ) ) { $is_afm = true; } if ( 'fma_shortcode' === $post_type ) { $is_afm = true; } $screen = function_exists( 'get_current_screen' ) ? get_current_screen() : null; if ( $screen && isset( $screen->post_type ) && 'fma_shortcode' === $screen->post_type ) { $is_afm = true; } if ( ! $is_afm ) { return; } $html = self::review_header_line_html(); ?> __('You do not have permission to access the file manager.', 'file-manager-advanced'))); return; } if (!class_fma_permissions::has_unrestricted_filesystem_access()) { wp_send_json_error(array('message' => __('You do not have permission to edit PHP files.', 'file-manager-advanced'))); return; } // Check nonce for security if (!wp_verify_nonce($_POST['nonce'], 'fmaskey')) { wp_send_json_error(array('message' => __('Security check failed', 'file-manager-advanced'))); return; } // Get the PHP code and file info from POST data. // Keep php_code slashed here; connector applies wp_unslash once on put content. $php_code = isset($_POST['php_code']) ? $_POST['php_code'] : ''; $file_hash = sanitize_text_field($_POST['file_hash']); $filename = sanitize_text_field(wp_unslash($_POST['filename'])); // Skip validation since this is called when user chooses "Save Anyway" // The validation was already done and user explicitly chose to save with errors try { // Store original POST data $original_post = $_POST; // Set up POST data for elFinder save operation $_POST = array( 'cmd' => 'put', 'target' => $file_hash, 'content' => $php_code, 'action' => 'fma_load_fma_ui', '_fmakey' => wp_create_nonce('fmaskey') ); // Use elFinder connector to save the file if (!class_exists('class_fma_connector')) { include_once 'class_fma_connector.php'; } if (class_exists('class_fma_connector')) { $fma_connector = new class_fma_connector(); // Capture elFinder output ob_start(); $fma_connector->fma_local_file_system(); $elfinder_response = ob_get_clean(); // Restore original POST data $_POST = $original_post; // Parse elFinder response $response_data = json_decode($elfinder_response, true); if ($response_data && isset($response_data['changed']) && !empty($response_data['changed'])) { wp_send_json_success(array( 'message' => __('File saved successfully', 'file-manager-advanced'), 'elfinder_response' => $response_data )); } else if ($response_data && !isset($response_data['error'])) { // Sometimes elFinder doesn't return 'changed' but save is successful wp_send_json_success(array( 'message' => __('File saved successfully', 'file-manager-advanced'), 'elfinder_response' => $response_data )); } else { $error_message = ''; if ($response_data && isset($response_data['error'])) { $error_message = $response_data['error']; } else { $error_message = __('Failed to save file through elFinder', 'file-manager-advanced'); } wp_send_json_error(array( 'message' => $error_message, 'elfinder_response' => $elfinder_response )); } } else { // Restore original POST data $_POST = $original_post; wp_send_json_error(array( 'message' => __('elFinder connector class not found', 'file-manager-advanced') )); } } catch (Exception $e) { // Restore original POST data in case of exception $_POST = $original_post; wp_send_json_error(array( 'message' => sprintf(__('Error saving file: %s', 'file-manager-advanced'), $e->getMessage()), 'exception' => $e->getMessage() )); } } /** * Initialize SMTP recommendation using universal system * @since 6.7.3 */ private function init_smtp_recommendation() { require_once FMAFILEPATH . 'application/post-smtp-notice/recommend-post-smtp-loader.php'; // Initialize SMTP recommendation without parent menu (to hide submenu) $this->recommend_smtp = recommend_smtp_loader( 'fma', // Unique plugin identifier 'file-manager-advanced', // Plugin slug true, // Show admin notice false, // Parent menu (false = no submenu) 'png' // Format ); if (!function_exists('is_plugin_active')) { require_once ABSPATH . 'wp-admin/includes/plugin.php'; } $smtp_plugins = array( 'post-smtp/postman-smtp.php', 'wp-mail-smtp/wp_mail_smtp.php', 'wp-mail-smtp-pro/wp_mail_smtp_pro.php', 'easy-wp-smtp/easy-wp-smtp.php', 'fluent-smtp/fluent-smtp.php', 'gosmtp/gosmtp.php', 'smtp-mailer/smtp-mailer.php', 'suremails/suremails.php', 'mailin/mailin.php', 'site-mailer/site-mailer.php', 'wp-smtp/wp-smtp.php' ); $smtp_active = false; foreach ($smtp_plugins as $plugin) { if (is_plugin_active($plugin)) { $smtp_active = true; break; } } // Only add SMTP tab if no SMTP plugin is active if (!$smtp_active) { // Add SMTP tab to settings with a high priority to ensure it's always last add_filter('fma__settings_tabs', array($this, 'fma_settings_smtp_tab'), 999); // Add content for SMTP tab add_action('fma__settings_tab_smtp_content', array($this, 'fma_settings_smtp_content')); } } /** * Add SMTP tab to settings * @param array $tabs * @return array */ public function fma_settings_smtp_tab($tabs) { $tabs['smtp'] = array( 'title' => __('SMTP', 'file-manager-advanced') . ' FREE', 'slug' => 'smtp', 'icon' => '', ); return $tabs; } /** * Display SMTP tab content */ public function fma_settings_smtp_content() { if ($this->recommend_smtp) { $this->recommend_smtp->recommend_post_smtp_submenu(); } } public static function has_pro() { $has_pro = apply_filters('fma__has_pro', false); return $has_pro; } }PK!W”y‹:file-manager-advanced/application/fma-elfinder-helpers.phpnu„[µü¤validate_syntax( $php_code ); } // Fallback to original method $result = array( 'valid' => false, 'errors' => array(), 'message' => '', 'php_version' => '', 'execution_time' => 0 ); $start_time = microtime( true ); try { // Create temporary file $temp_file = $this->create_temp_file( $php_code ); if ( ! $temp_file ) { $result['errors'][] = 'Unable to create temporary file for validation'; $result['message'] = 'PHP syntax errors found'; return $result; } // Run PHP syntax check $output = array(); $return_code = 0; $command = $this->php_path . ' -l "' . $temp_file . '" 2>&1'; // Use exec-with-fallback if available if ( class_exists( 'ExecWithFallback\\ExecWithFallback' ) ) { $exec_result = \ExecWithFallback\ExecWithFallback::exec( $command, $output, $return_code ); } else { // Fallback to regular exec $exec_result = exec( $command, $output, $return_code ); } // Get PHP version $version_output = array(); if ( class_exists( 'ExecWithFallback\\ExecWithFallback' ) ) { \ExecWithFallback\ExecWithFallback::exec( $this->php_path . ' -v', $version_output ); } else { exec( $this->php_path . ' -v', $version_output ); } $result['php_version'] = ! empty( $version_output ) ? $version_output[0] : 'PHP ' . PHP_VERSION; // Parse results if ( $return_code === 0 ) { $result['valid'] = true; $result['message'] = 'PHP syntax is valid'; $result['errors'] = array(); } else { $result['valid'] = false; $result['message'] = 'PHP syntax errors found'; $result['errors'] = $this->parse_syntax_errors( $output ); } // Clean up $this->cleanup_temp_file( $temp_file ); } catch ( Exception $e ) { $result['errors'][] = 'Validation failed: ' . $e->getMessage(); $result['message'] = 'PHP syntax errors found'; } $result['execution_time'] = round( ( microtime( true ) - $start_time ) * 1000, 2 ); return $result; } /** * Create temporary file with PHP code * * @since 1.0.0 * @param string $php_code PHP code * @return string|false Temporary file path or false on failure */ private function create_temp_file( $php_code ) { // Ensure code has proper PHP tags if ( strpos( $php_code, ' 'parse_error', 'message' => trim( $matches[1] ), 'file' => basename( $matches[2] ), 'line' => intval( $matches[3] ), 'severity' => 'error' ); } // Parse fatal errors if ( preg_match( '/Fatal error:\s*(.+?)\s+in\s+(.+?)\s+on\s+line\s+(\d+)/i', $output_text, $matches ) ) { $errors[] = array( 'type' => 'fatal_error', 'message' => trim( $matches[1] ), 'file' => basename( $matches[2] ), 'line' => intval( $matches[3] ), 'severity' => 'error' ); } // Parse warnings if ( preg_match( '/Warning:\s*(.+?)\s+in\s+(.+?)\s+on\s+line\s+(\d+)/i', $output_text, $matches ) ) { $errors[] = array( 'type' => 'warning', 'message' => trim( $matches[1] ), 'file' => basename( $matches[2] ), 'line' => intval( $matches[3] ), 'severity' => 'warning' ); } // If no specific errors found, add generic error if ( empty( $errors ) && ! empty( $output_text ) ) { $errors[] = array( 'type' => 'unknown', 'message' => trim( $output_text ), 'file' => 'unknown', 'line' => 0, 'severity' => 'error' ); } return $errors; } /** * Get PHP configuration info * * @since 1.0.0 * @return array PHP configuration */ public function get_php_info() { $info = array( 'php_path' => $this->php_path, 'php_version' => PHP_VERSION, 'php_binary' => PHP_BINARY, 'exec_functions' => array(), 'disabled_functions' => array(), 'exec_with_fallback_available' => class_exists( 'ExecWithFallback\\ExecWithFallback' ) ); // Check available exec functions $exec_functions = array( 'exec', 'system', 'shell_exec', 'passthru', 'proc_open', 'popen' ); foreach ( $exec_functions as $func ) { $info['exec_functions'][ $func ] = function_exists( $func ) && ! in_array( $func, explode( ',', ini_get( 'disable_functions' ) ) ); } // Get disabled functions $disabled = ini_get( 'disable_functions' ); $info['disabled_functions'] = ! empty( $disabled ) ? explode( ',', $disabled ) : array(); return $info; } /** * Test if validation is available * * @since 1.0.0 * @return bool */ public function is_available() { try { $test_code = 'validate_syntax( $test_code ); return $result['success']; } catch ( Exception $e ) { return false; } } } endif; PK!k\y娨9file-manager-advanced/application/class_fma_shortcode.phpnu„[µü¤PK!¶Ì?öððQfile-manager-advanced/application/post-smtp-notice/recommend-post-smtp-loader.phpnu„[µü¤slug = $slug; $this->format = $format; // Only show notice if global option not set $global_notice_hidden = get_option('post_smtp_global_recommendation_notice_hidden', false); if ($global_notice_hidden) { $show_admin_notice = false; } add_action('rest_api_init', array($this, 'rest_api_init')); // Register AJAX actions early add_action('wp_ajax_post_smtp_request', array($this, 'request_post_smtp_ajax')); add_action('wp_ajax_nopriv_post_smtp_request', array($this, 'request_post_smtp_ajax')); if ($show_admin_notice || $parent_menu) { add_action('admin_enqueue_scripts', array($this, 'admin_enqueue_scripts')); add_action('admin_head', array($this, 'admin_head')); if (!function_exists('is_plugin_active')) { require_once(ABSPATH . 'wp-admin/includes/plugin.php'); } foreach ($this->plugins as $plugin) { if (is_plugin_active($plugin)) { break; } else { if ($parent_menu) { if ('login-designer' === $this->slug) { add_action('admin_menu', function () use ($parent_menu) { add_theme_page('SMTP', 'SMTP Free', 'manage_options', "{$this->slug}-recommend-post-smtp", array($this, 'recommend_post_smtp_submenu'), 99); }, 9999); } else { add_action('admin_menu', function () use ($parent_menu) { add_submenu_page( $parent_menu, 'SMTP', 'SMTP Free', 'manage_options', "{$this->slug}-recommend-post-smtp", array($this, 'recommend_post_smtp_submenu'), 99 ); }, 9999); } } if (file_exists(WP_PLUGIN_DIR . "/{$this->plugins[0]}")) { $this->is_installed = true; } break; } } } } /** * Hide the admin notice | Action Callback * * @return void */ public function hide_post_smtp_recommendation_notice() { if (!current_user_can('manage_options') || !isset($_GET['nonce']) || !wp_verify_nonce($_GET['nonce'], 'hide-post-smtp-recommendation-notice')) { wp_die(__('Security Check.', 'file-manager-advanced')); } if (isset($_GET['action']) && $_GET['action'] === 'hide-post-smtp-recommendation-notice') { update_option('post-smtp-recommendation-notice-hidden', true); wp_redirect(wp_get_referer()); } } /** * Display the submenu page for the plugin | Action Callback * * @return void */ public function recommend_post_smtp_submenu() { $button = array( 'text' => 'Install and Activate Post SMTP Now!', 'action' => 'install-plugin_post-smtp', ); if ($this->is_installed) { $button['text'] = 'Activate Post SMTP Now!'; $button['action'] = 'activate-plugin_post-smtp'; } ?>
    slug}/assets/icon-128x128.{$this->format}"); ?>" alt="slug} Logo" ?>" width="75px" /> Attachment Post SMTP Logo

    Boost Wordpress Email Deliverability with Post SMTP

    Post SMTP is #1 SMTP plugin trusted by over 400,000 WordPress sites. Experience flawless email deliverability, detailed email logs, instant failure notifications and much more.

    Post SMTP Banner

    Post SMTP - Your WordPress Email Solution

    Ensure guaranteed email deliverability with seamless integration to top SMTP services. Manage your emails confidently and ensure they always reach the inbox. Learn more about Post SMTP


    Exclusive API support for all popular ESPs

    Gmail SMTP

    Microsoft 365 (Office 365)

    Mailgun

    SendGrid

    Brevo (fomerly SendInBlue)

    Amazon SES

    Twilio (SMS Notifications)

    Zoho Mail

    +Any SMTP Provider

    'No nonce provided')); } if (!wp_verify_nonce($_POST['nonce'], 'post_smtp_request_nonce')) { wp_send_json_error(array('message' => 'Security check failed')); } if (!current_user_can('manage_options')) { wp_send_json_error(array('message' => 'Insufficient permissions')); } // Check if status is provided if (!isset($_POST['status'])) { wp_send_json_error(array('message' => 'No status provided')); } // Handle consent grant request if (isset($_POST['grant_consent']) && $_POST['grant_consent'] === '1') { self::grant_data_consent(); } // Only send data to external server if admin has given consent if (!self::has_data_consent()) { wp_send_json_success(array( 'message' => __('Action completed (data sharing skipped — no consent)', 'file-manager-advanced'), 'consent' => false )); return; } $site_url = get_bloginfo('url'); $status = sanitize_text_field($_POST['status']); $plugin_slug = $this->slug; $secret_key = self::get_site_secret_key(); $response = wp_remote_post("https://connect.postmansmtp.com/wp-json/update/v1/update?site_url={$site_url}&status={$status}&plugin_slug={$plugin_slug}", array( 'method' => 'POST', 'headers' => array( 'Content-Type' => 'application/json', 'Secret-Key' => $secret_key ) )); if (is_wp_error($response)) { wp_send_json_error(array( 'message' => 'Failed to send request: ' . $response->get_error_message() )); } else { wp_send_json_success(array( 'message' => __('Request sent successfully', 'file-manager-advanced') )); } } /** * Add the admin footer script to the notice | Action Callback */ public function admin_enqueue_scripts() { wp_enqueue_script('updates'); wp_enqueue_script('recommend-post-smtp-script', plugin_dir_url(__FILE__) . 'assets/js/admin-script.js', array('updates', 'jquery'), '1.0.0', true); wp_localize_script('recommend-post-smtp-script', 'recommendPostSMTP', array( 'redirectURL' => admin_url("admin-post.php?action=hide-post-smtp-recommendation-notice&nonce=" . wp_create_nonce('hide-post-smtp-recommendation-notice')), 'postSMTPURL' => admin_url("admin.php?page=postman"), 'ajaxURL' => admin_url('admin-ajax.php'), 'ajaxNonce' => wp_create_nonce('post_smtp_request_nonce'), 'hasConsent' => self::has_data_consent(), )); } } endif;PK!?ù/�>%>%Wfile-manager-advanced/application/post-smtp-notice/recommend-post-smtp-admin-notice.phpnu„[µü¤init(); } /** * Initialize the notice */ private function init() { $is_notice_hidden = get_option( 'post-smtp-recommendation-notice-hidden', false ); if( ! $is_notice_hidden ) { add_action( 'admin_enqueue_scripts', array( $this, 'admin_enqueue_scripts' ) ); add_action( 'admin_head', array( $this, 'admin_head' ) ); add_action( 'admin_notices', array( $this, 'show_notice' ) ); add_action( 'admin_post_hide-post-smtp-recommendation-notice', array( $this, 'hide_post_smtp_recommendation_notice' ) ); add_action( 'rest_api_init', array( $this, 'rest_api_init' ) ); } } /** * Set plugin slug and format */ public function set_plugin_info( $slug, $format = 'png' ) { $this->slug = $slug; $this->format = $format; } /** * Check if any SMTP plugin is active */ private function is_smtp_plugin_active() { if( ! function_exists( 'is_plugin_active' ) ) { require_once( ABSPATH . 'wp-admin/includes/plugin.php' ); } foreach( $this->plugins as $plugin ) { if( is_plugin_active( $plugin ) ) { return true; } } return false; } /** * Display the admin notice */ public function show_notice() { // Don't show if any SMTP plugin is active if( $this->is_smtp_plugin_active() ) { return; } $button = array( 'text' => 'Install & Activate', 'action' => 'install-plugin_post-smtp', ); if( file_exists( WP_PLUGIN_DIR . "/{$this->plugins[0]}" ) ) { $this->is_installed = true; $button['text'] = 'Activate Post SMTP'; $button['action'] = 'activate-plugin_post-smtp'; } ?>
    Post SMTP Logo

    ✨ Boost Your Email Delivery with Post SMTP!
    Make sure every WordPress email lands safely in your users' inboxes. Install Post SMTP — trusted by 400,000+ websites for reliable delivery, detailed logs, and instant alerts.

    'POST', 'callback' => array( $this, 'request_post_smtp' ), 'permission_callback' => function() { return current_user_can( 'manage_options' ); } ) ); } /** * Callback for the rest route */ public function request_post_smtp( $request ) { if ( ! \RecommendPostSMTP\Base\Recommend_Post_SMTP_Base::has_data_consent() ) { wp_send_json_success( array( 'message' => __( 'Action completed (data sharing skipped — no consent)', 'file-manager-advanced' ), 'consent' => false ) ); return; } $site_url = get_bloginfo( 'url' ); $status = $request->get_param( 'status' ); $plugin_slug = $this->slug; $secret_key = \RecommendPostSMTP\Base\Recommend_Post_SMTP_Base::get_site_secret_key(); $response = wp_remote_post( "https://connect.postmansmtp.com/wp-json/update/v1/update?site_url={$site_url}&status={$status}&plugin_slug={$plugin_slug}", array( 'method' => 'POST', 'headers' => array( 'Content-Type' => 'application/json', 'Secret-Key' => $secret_key ) ) ); wp_send_json_success( array( 'message' => __( 'Request sent successfully', 'file-manager-advanced' ) ) ); } /** * Add the admin footer script to the notice */ public function admin_enqueue_scripts() { wp_enqueue_script( 'recommend-post-smtp-script', plugin_dir_url( __FILE__ ) . 'assets/js/admin-script.js', array( 'updates', 'jquery' ), '1.0.0', true ); $has_consent = false; if ( class_exists( 'RecommendPostSMTP\\Base\\Recommend_Post_SMTP_Base' ) ) { $has_consent = \RecommendPostSMTP\Base\Recommend_Post_SMTP_Base::has_data_consent(); } wp_localize_script( 'recommend-post-smtp-script', 'recommendPostSMTP', array( 'redirectURL' => admin_url( "admin-post.php?action=hide-post-smtp-recommendation-notice&nonce=" . wp_create_nonce( 'hide-post-smtp-recommendation-notice' ) ), 'postSMTPURL' => admin_url( "admin.php?page=postman" ), 'XWPNonce' => wp_create_nonce( 'wp_rest' ), 'restURL' => rest_url(), 'ajaxURL' => admin_url( 'admin-ajax.php' ), 'ajaxNonce' => wp_create_nonce( 'post_smtp_request_nonce' ), 'hasConsent' => $has_consent, ) ); } } endif;PK!R ‚×ÃÃLfile-manager-advanced/application/post-smtp-notice/assets/js/admin-script.jsnu„[µü¤// Returns: 'agree' | 'skip' | 'cancel' function showConsentModal() { return new Promise( function( resolve ) { var overlay = document.getElementById( 'fma-consent-overlay' ); if ( ! overlay ) { resolve( 'cancel' ); return; } overlay.classList.add( 'fma-consent-visible' ); var agreeBtn = document.getElementById( 'fma-consent-agree' ); var skipBtn = document.getElementById( 'fma-consent-skip' ); var closeBtn = document.getElementById( 'fma-consent-close' ); function cleanup() { overlay.classList.remove( 'fma-consent-visible' ); agreeBtn.removeEventListener( 'click', onAgree ); skipBtn.removeEventListener( 'click', onSkip ); closeBtn.removeEventListener( 'click', onClose ); } function onAgree() { cleanup(); resolve( 'agree' ); } function onSkip() { cleanup(); resolve( 'skip' ); } function onClose() { cleanup(); resolve( 'cancel' ); } agreeBtn.addEventListener( 'click', onAgree ); skipBtn.addEventListener( 'click', onSkip ); closeBtn.addEventListener( 'click', onClose ); } ); } ( async function() { const buttons = document.querySelectorAll( '.post-smtp-notice-install' ); buttons.forEach( function( button ) { const action = button.getAttribute( 'data-action' ); button.addEventListener( 'click', async function( e ) { e.preventDefault(); var consentGiven = true; if ( ! recommendPostSMTP.hasConsent ) { var choice = await showConsentModal(); if ( choice === 'cancel' ) { return; } consentGiven = ( choice === 'agree' ); } button.setAttribute( 'disabled', 'disabled' ); if( action === 'install-plugin_post-smtp' ) { button.innerHTML = 'Installing...'; try { await sendPostSMTPRequest( 'installed', consentGiven ); const response = await wp.updates.installPlugin( { slug: 'post-smtp' } ); if( response.activateUrl !== undefined && response.install === 'plugin' ) { await activatePostSMTP( button, consentGiven ); } } catch ( error ) { console.error( error ); button.innerHTML = 'Error!'; } } if( action === 'activate-plugin_post-smtp' ) { await sendPostSMTPRequest( 'activated', consentGiven ); await activatePostSMTP( button, consentGiven ); } } ); } ); } )(); const sendPostSMTPRequest = async function( status, consentGiven ) { try { const params = { action: 'post_smtp_request', status: status, nonce: recommendPostSMTP.ajaxNonce }; if ( consentGiven ) { params.grant_consent = '1'; } const formData = new URLSearchParams( params ); const response = await fetch( recommendPostSMTP.ajaxURL, { method: 'POST', headers: { 'Content-Type': 'application/x-www-form-urlencoded', }, body: formData }); if( !response.ok ) { throw new Error( 'HTTP ' + response.status ); } const data = await response.json(); if ( data.success && consentGiven ) { recommendPostSMTP.hasConsent = true; } return data.success || false; } catch ( error ) { console.error( 'Post SMTP request error:', error ); } } const activatePostSMTP = async function( button, consentGiven ) { button.innerHTML = 'Activating...'; const activateResponse = await wp.updates.activatePlugin( { slug: 'post-smtp', name: 'Post SMTP', plugin: 'post-smtp/postman-smtp.php' } ); if( activateResponse ) { await sendPostSMTPRequest( 'activated', consentGiven ); button.innerHTML = 'Activated!'; setTimeout(() => { window.location.href = recommendPostSMTP.postSMTPURL; }, 1000); } else { button.innerHTML = 'Error!'; } } // Notice dismiss functionality removed since admin notice is disabledPK!\Äçæ  Sfile-manager-advanced/application/post-smtp-notice/assets/images/post-smtp-logo.gifnu„[µü¤GIF89a€€÷ÿ1@_ŒBO�CP‡CU}EQ—Ej—FOŸFT�F_“HT“HT¥HV�HVœJX˜KW¦KY¨LX L[§L_«MZ¢MZ«M[¤N\�N^¨Nb«O[°O_‰Ob§Oe¯Oi­PbŸPi±Pq¬Ps£Q[Qi¥RY‹R[“Rl´Rn³So¹Tq¶UtºVe—Vx¼V}ÀV€¸XvµYn­Yy±Z[lZg‹Zz¹Z¿[yª[{À[Ã[‡¾\ŠÌ]l•]‚Ã^„È^‡Å_¯`o¡a‹ÇbŒÅbŽÐb�Ãb”Ðc}·cˆÌc�Ëc‘Édo…dr–eVKe{¤eƒ½e†¶e“Ðe˜Óg•Îh}žh�»hšÒi…®i—Ôj‘ÒjžÖk�ÕlŒÁl—Êlœ×mœ×ngln Ôn¡Øo¡Ðp†¦p£×p¥Ür޲r¨ÜsŒ¹s•Ás¥Ýt¬Þuš×u¡Ñv¨Ùv«àw«áx�‘x¯áy–ºy³ãz¦Îz²ä{�Æ{²ä{·ä|±ß|·ç}Žª~´æ~·è~¸æ­Ö�nC�œÏ�»è‚u‚¨à‚½æƒ´ÜƒÁì…­Ö…³è†�œ†¢Í†¸â†Å»‡¯ÑˆÂꊤÊ­Þ‹ÉێyJ�Ž‚�Íð’À铟°“ª×“·â•«Ð–ªÃ—ÇìšÁÜ�ž›�³ÙžÌòŸ¬î µÌ¡»ë¡Ì梌S£žŽ§Öú¨œt©®±ª×﫼٬Äó¯Üü²¯œ³Çæ³Öþ³àû´¿ò·¾Ì¹»¾ºÉÙ»çý¼—C¼Ðþ½Óð½ÝýÀ¨wÁÒÞº¦ÅäþÅïÿÈóþÉÚèÉòþÉòÿËôÿËõüËõþËöþÌÎ×ÌîÿÌñúÌóüÌóÿÌóÿÌôÿÍòÿÍóÿÍôþÎÜûÎõÿÏÚìÐè÷ÑšҫIÒåóÓôÿÓöÿÓúÿÔÝæ×ÞäÚèÿÜëïßµZßðýâ¾fâùþåÜÄæúÿèþþé£2êõýëË}ïûþð¿Có­5ó±%óþýöýÿ÷¶ø¸.øýûøÿþù¼!ùûþùýÿû¬$û±ûüþýþþþ¸"ÿ!ÿ NETSCAPE2.0!ù þ,€€‡@_ŒBO�CP‡CU}EQ—Ej—FOŸFT�F_“HT“HT¥HV�HVœJX˜KW¦KY¨LX L[§L_«MZ¢MZ«M[¤N\�N^¨Nb«O[°O_‰Ob§Oe¯Oi­PbŸPi±Pq¬Ps£Q[Qi¥RY‹R[“Rl´Rn³So¹Tq¶UtºVe—Vx¼V}ÀV€¸XvµYn­Yy±Z[lZg‹Zz¹Z¿[yª[{À[Ã[‡¾\ŠÌ]l•]‚Ã^„È^‡Å_¯`o¡a‹ÇbŒÅbŽÐb�Ãb”Ðc}·cˆÌc�Ëc‘Édo…dr–eVKe{¤eƒ½e†¶e“Ðe˜Óg•Îh}žh�»hšÒi…®i—Ôj‘ÒjžÖk�ÕlŒÁl—Êlœ×mœ×ngln Ôn¡Øo¡Ðp†¦p£×p¥Ür޲r¨ÜsŒ¹s•Ás¥Ýt¬Þuš×u¡Ñv¨Ùv«àw«áx�‘x¯áy–ºy³ãz¦Îz²ä{�Æ{²ä{·ä|±ß|·ç}Žª~´æ~·è~¸æ­Ö�nC�œÏ�»è‚u‚¨à‚½æƒ´ÜƒÁì…­Ö…³è†�œ†¢Í†¸â†Å»‡¯ÑˆÂꊤÊ­Þ‹ÉێyJ�Ž‚�Íð’À铟°“ª×“·â•«Ð–ªÃ—ÇìšÁÜ�ž›�³ÙžÌòŸ¬î µÌ¡»ë¡Ì梌S£žŽ§Öú¨œt©®±ª×﫼٬Äó¯Üü²¯œ³Çæ³Öþ³àû´¿ò·¾Ì¹»¾ºÉÙ»çý¼—C¼Ðþ½Óð½ÝýÀ¨wÁÒÞº¦ÅäþÅïÿÈóþÉÚèÉòþÉòÿËôÿËõüËõþËöþÌÎ×ÌîÿÌñúÌóüÌóÿÌôÿÍòÿÍóÿÍôþÎÜûÎõÿÏÚìÐè÷ÑšҫIÒåóÓôÿÓöÿÓúÿÔÝæ×ÞäÚèÿÜëïßµZßðýâ¾fâùþåÜÄæúÿèþþé£2êõýëË}ïûþð¿Có­5ó±%óþýöýÿ÷¶ø¸.øýûøÿþù¼!ùûþùýÿû¬$û±ûüþýþþþ¸"ÿÿÿÿÖ“ H° Áƒ*\Ȱ¡Ã‡#JœH±¢Å‹3jÜȱ£Ç� CŠI²¤É“(Sª\ɲ¥Ë—0cÊœI³¦Í›8sêÜɳ§ÏŸ@ƒ J´¨Ñ£H“*]Ê´©Ó§P£J�JµªÕ«X³jÝʵ«×¯`ÊK¶¬Ù³hÓª]˶­Û·pãÊ�K·®Ý»xóêÝË·¯ß¿€ L¸°áÈ+^ìðØ1¿Ž!?î™±å˘3kÞ̹³çÏ C‹Mº´éÓ¨S«^ͺµë×°cËžM»¶íÛ¸sëÞM3 !ù ÿ,F :ÿ•!¨L 3güǰ¡Ã‡ÿ ",8p˜Â„36Tư ÇfÃ,jép˜³‚Ý” k& $2’$‹ KùO˜°\-AÛy &Ä‚ÑnË•‹e3ž=}6ŒöŒè¯V­†âVì™U¥ mÒjuêT©6�=3†•!,® @y…J‹hXcd±v-¥¶+ÔVm§ ƒ‹u’¢L†ê®ÅÛÖ¦°�/aN£ˆÓ§O£F�RÑ\Ä%†éŽžF™GE™°^¤I!’q£GQ¥H�1ašÌ6o³bH5¶qúÑëП0�ÂTÛ­0«ÏvªvHΡJ†2ÞŠ2­¶ØÂ&OÝ�·œI‡5ÿÝdLª¬ç}סw=‡ù�(“#J¤‰›žÊ÷!ïIrÀ×Ç!} R~è•–N2AÄÛzHàxˆ82i ºÒrß1†‡xˆH…áw—mÃ8Ø™Œ±¨G{ˆ%²ÉÆQ.ùçF!zLÒ‡‹väá‡�÷QŽˆéèY‹xèAGBIã‰6%é�;Ê¡ˆ"xàatô‘y™D¢_[!¥–…ÀÁe—rØAÇ“  (”ÜhÑ0Ü1tj²¥„ƉÇ!y¼É(­… bÔD*)5j(c„ÂA¨ˆ²¨*h"v̤’²!¨)vÀ¡êp¬á\#†|ÿÒŠe‡y4*©Ô˜b "ŠÀFeœq†Î† ,´ÔZPЏR3Š)j°EdP[†vxJÚT1Ûl´X\‘Ea€Fkô«*°ØäÑ£·âzRHQUˆFo�¡©PŠ}6õVÆd¬vÈ ÛÖúè@Êe4pör�ïnŽáåðž i4±½÷ŠA†™¨‚SHËb4ÒCPl±m$’É(½3ŒG=„3Î,QùÂÉ(–Y³sέŒC!bÔшWîzdMFJ/=DBpAF#²âMA EìPÖAá\RrKjþS ngíÃÀR¸1´*Í<¦ZöÜf'}´[¤ÑÆÐíé4ŒOSÖ?9lÑÆ$DggÕâÆHÓžR…3 ,ÌǸ5ÖPs�3�á¹)Â0sLé’žŽzYw$J/ÃDÃé¤Oú8$Ÿô’‹5ÉýÃ;ì‘>J²ÂD£Üñ¾—EKvÆðd<ïÑc…“X)c 2Ç“þø^ÜGä=øá?N7wáóþxÀ×·ÿ¸Fí‹??Dõ_}ÿCùïÏý� !ù ÿ,1BOÿÿ H° Áƒ CVPY‡#&V_KÏä2 Høð"Œ2þaH#€'Žƒè˜‰#ŸüH‹‚à S_4Ýó OàpÄ‹‚áÆ!™@)Ç›}ìñG•<:2Š–[ªä%nÃP#Ì,w<‘CG!E…\¸Ñ'ƒ²Ærà‘GNò %˜è%ßž’1¥ #B8уG �…‡2H&~rÆrØÿA¥ƒðÈc–zíÔeiGñjÌ1³@² <8qÄA`�f!™ Òˆnœñ¦œ9"bm$ŸŒÚh¤%ãí·à†›LGÊàd ,‰ KC <š¬‹\0›‰"ÑBjÇø:¹c$ ŒXÛmâümG/Y# $hü� -´K([ ÁÅ$ƒ˜Òg¬Ç´è{ ¦¡Ù&иÿ nAÔ “²5Ôp 'h€ÂÂ-àÐCÉF|)ÛFg-³ê›]Èk-$ðÉ­ŒŒ4a‚B… 2Ól3> ±El(¢ˆ)pTQFMtf—i�)m²ÀÔPãL3Ò0Ã�4¯°'€ÿ  7°[²§ b "ЍQEÐA¯A4íUr -£%ÍPÉKw3ÍäÂM7³Â~§ð ì:á©B$!'¦€]E´�›Ý(°T~U— enÜÔXs÷.‚а'œ�‚ /à`D F8!„fTË(`«ÆØ�¯\$!·�´2¾kNÍ4Ô0à #!l°AÉ/ø 4¨¾E³xSŒ"axQÅöd{p�‰µ)C|�é�ï(2�i0C½ p�pÀ0H ``#X!  è…4r‘·ÖI� YøÙܰ@4”ëÛtã�ò1puãÄ,@A¼ï¤Áÿ8±‹^ôŒ ‚’*t… …A e€ (CÚ†-˜ËÜ1’Q7f€Â `@&À ¸/†ÛE-Á†#�>HÖ©šè0Ô±u°·º4dÈð€ä+_1 & 3x`(c:ÀƒBÔ‚…À‚^@?#ø` GØ樅*p! uÐC+„áÇ.¤”4 Qb’Œr)ƒ´D&@l G€$Ž@IÐ�6»Ùt€$@áPrCN!ŒÝý‘wBRå*?ÒJŠÃO6p8*@8°Aa]5°Ù±ˆ9„$@QnE.y@?–2š™&H¼õÿ aœÂ?ýnp@€œÄàßhÀ8¬Cˆh’P¡;T€"Ñ'5“a cœiØÂ ,0�LÀã4Á`€‚Ü€,¨™Ítp‰RT •P…È$¢Q?:££¼@¢€€€ XàçYª‚¿Å´=h—| ¥ÌäTF5:ŒŸƒ½p'aŒàÀ>Äå9u]½ÙT“P…:Œ"%ÅøUE"ÒS~~¬§Åœ„ØR­0PhSÿVƒÀM5> B2A‹~þª�qã«F½ÕQf0£Á�…)±…$õx4A ÜzºÀÁq Bƒ)hñ+cÿxΈˆ3vËÛÞîÖÒ�Æ4ºá2^˜¢[(«û8° ¢@«ý[àœ@…-T‚ÝðFK¢›Ë=Ä·àýiÝÆË fìÂ…H. 0�Ö˜ñcÞ ÖEF¨BÇPFЏ2’ðú·vc6rÁ WˆBN€�é^(O'¸Á9ë0JaC(º�nýÞ.Jƒؘ…, �àÀà}â T@P#lÁ°Æ¯’a‘”\Óà\ЍA`YŒ5¹ ðÀ6À7JÒ ‡èK–b“KäÆßj`Ь‘]icœ`„z=°H¾�ÀŒFðn²W'GÊâ¢r7žÁŒ`ðbÿ¢`„b0:™Y!ªhG”ጘ¬ÅÆh׎©\°¾âÇF�Y ÒðŠ\t#ŸDùó“-® 7L½ð1#ÒÐÌáØ8†5ØòšP:\/9Ÿg­¬ S$" wx3¨<�¬åÔà²J7”‘]oL#­Å)>ËŒã×ßºŠš½a °ö‚8„¶MLƒlo­¥×qQ54ò —L[2Õn%dÀ²kŒh„#{¥vµÿÕI$ªÒ©\ÂJªÝkp˜²¿ÂFIR£ÈÔ ±Sÿ*f«—¯R·Ã„Ñt§PaE‡*�¢Uó¯_¦Ž“zCæ /jÚp4éP£L™háõë×ÛßГ%+8Ñ[®CwذqÃ)“žCŠ ú+×ÑÅÊp#ÔM½:õŠsUâ’%ÌpØzõÿé£È¦Vx=ß–nк{eÉ Q¥n¼ò‰…œÂaG{üÁ¥#‹ÞˆÑ…–*P€’ƒ <øà.PÐÊů˜R‡jdkG·ƒ â"‘ {—2Þœjæ‰î%ùÊ5ÐÀ=èIкÆ,¦�qF¾œúáëŸ8h+zFQZ©êfL+i„ð‚Ãû HÐ*Ær¬È¾ü  �œ‘6&ʺQƒ 5H[_0i€ÃË8D}DH�„Šô¢j”¡Ç{ä± Óà†4:�4  `';àR¼¢^Wx‚~à‚é9ANW¨O}È0Kž‘6»tIª,wŒbpïÈä0H l0E- �…Àài4HaŽ0ÿ„VJ� Z°Tê‰\t†‡¼§‘ÈYŒiœb€@`‚#�‚l¸B ƒD…îš¼ä¥6¸¡œq$Nr2N6v#|XÀ0pƒ#`*¸€8ʼŒyƒXĆ€„!PŠ 5£�$˜•–N$ÖhÅ‚¨€0.p�öô§ùÓ›†@Ô«UªŸ(‹cœŠŒ¡ÐÂ!ð@& � TàÀÀ'M�‚² ob�Ùˆ …4ˆ‚(âKK�ጡH£›°AÀ Ø5ðd˜è×DMoï₨`ˆ\$ÃPk]èD”¡4f0£œøÁ Ð ÿX³šý@Up· ¶ËA¨$`Ñ�rcÓ8˜{*Ÿd¸Á0Å,€< œä©nï×ÛýAË]¶êE2†!”ã&W)KYuFòÆ×Þ¡@@ W*o·Îkמ0‡QëˆjªzÝsŒhHãÀÌØ#R€DÀ¨[Ýê×W´ ]TxBZ½‘¢hØ"ê-Ò€u3’ê0Ö’¯­Cæ(�ÌnÖL¬° �`…J#>ÍMèEBô•ãŒè[#×͘¯ƒñ‰G„ 6`D/˜a�*$Ùœ¦õˆ'Çërs§x„$A nX£dš\¬Å=`r—»Ôpíks¡o¡Ä;’ ¡÷¸y2 ”4õo|c.¸‘oƒý;&óxª&÷ì„'<Ôž†5ô¢>Ü šâ¸¶83¦! ä#>h鸹ä ò\c|ä%ŸÆÉ ¢òc‰ûΞFu¹!µçæ8wöÎ%‚>ŸDâ»1úG:� ë(=7ˆ~:K™.õ–ȹHU·º‚®ìô¬/}ë ²ؽq÷`�HdxÒg}¦¤¯=íV6RÕ!ù ÿ,LDÿÿ H° Áƒ*xìØÂ‡#JLØp¢Å‹‘iܨQ™2Œ CäÈѣȓ!7*+ù¥Ë‰$U¶|IsáÆaÃ8ÖܙУϕ‡ÍäIT ²cB?âV´©@Z­h k†,'N§“iM&ÐZ1c ÂJ¨’*a9�:£†Œ-[¬ ·&óx¬Ø1­ÊhAª3©R¥VÂE�UˆAj%Âʇ}ü1ˆšŽ¸«¬¢ñ$W1Å £L7°°a„>ôpÄH@qE€ô2‰°pÀ!‡yì±G«I6zÊ)ÉÅi)hÉ4ä 2´HC Üz‹HTÁ…½$"ìéÊᮚˆDLÉ)°¶‚LnL½”˜V¶ÓÆ¿7ôзI$1ĸœÐ’n0|¦»ïFÜ,(óæbíkC�´±1Édi5ÜÀC9øPrãfÒ #,3|,ÌË"b% `‚Ÿ~&¹”Œ[²QcL7¦üü -à€ÃÈH 1ÄTŒÒ `�¡†g¼AÇy ’·’¦ÿ¥24±e�3ÖPãÍ)?„B ,Üp¶ÈB¨}D£ÌÂEÜe”qÆtWŸŠŽœâšO0jtQL\OÃŒ0ÝÌòà #œ ‚ Ž›ÝÃG ÄÂdr9glÎyqy#R %¹üó“µ€ŸNRêÓxÃÌ€ÐA )ÐnöÙk�ÄÈd’d¼Ãy¤Ÿ&o’Ž5F€sÄÖ4Íp# 6[x» (d2!;‚žðI(Ãwä#CùÖÀ9õ¢JùI´N÷ù!ƒ~ÌÀ† °�˜À(˜Ý FÀÞáÞ8Äï(¼5ä¡8­¸�GD“‚lì†[‰2´2 k0㇜�ÿ;`‚dO,  ~Ð3ˆ"éðF+¸À†*„A� ¤ ŠÑá 6CÁ!9ÂCJãK@8°�œ'� ^`FÌ¢äà$æ`†]A YCðÈG€G†3ÄYAÄxCùù�Þ�…0 l`ø R„4Ô"Áx…€r�„K W¸Ô À:Ô¡´ˆPf©H221*)œ4¼Ñ‹), ¨€üƒ»Ø…)Ò`üÀ 9èÓÉPé-T¡ n bhÖ�<·|NbŒIüÀ`@ð6�¢…Ø `06pËHB¨®àÿ.\³�8‹ò®"”ªäLœŒD(^„Á f<â— ÀXàNAa0€@0¶ˆ¬Wú,B�®p9CaB²¬Ê;“ÐZ£ (€€‚`á70A8PDìÕ³<št.$pá¨b¸C%rá�ç,†+ ¹åg6Ö a@b Á >€ àÀ>(»$Ö¨##jÚÆwTXæIyŸ #=òR^ÜA�h&p°r௠œ�Ïz¶oyo|i¨C+䢵[N£Þà… €an `-&Oû7G”íqŸ‚ˆ U€…g‰+8§Zi0C®Ý„L` ÿd°(áì>;4¢�¯  †7Œa—iL#"ª]¤m66 r¾6Ì0ôJ D@³ÌíìX`¶  iÈÄ3š –c¹P]­÷#�h¸6 °Ô(�bv n”ÏŠÖ'Pá¹Ë3žQ©‡$×–ŒÜÏ3¦áZi„2 @€$€Iüº1{ckP}`…:À"ÝP†5 ¥ˆx ‰ÁWXî²5ÍP¶Ì€Å � K`¬aöÔ9¨ÂË™M‰%rb…ŠsÅZq12`+ n#ˆ@�yšcý² ‰<8E7’ §Èˆ‘.s2Qýa€ˆ&Àoöbð+d‚ÿP=(M¾,Æ0kÆ>|E €�3gÒˆ*�&Ñ‹ÆôGªIf°0vA… ±#ÁBÀ¦6ÇBˆÖ 3œÁŒ^`aè€õ^‚4ôÂÒ¨¦¥ªª4£Á�Df‚ á̘Æ3ú£P0³®f'–P€ Á¯­¯ñ…h`¿º?dÆ)ÌÀ‡S°ÏCv¢µâŒg[õªëE.¢-�"fÛÉpök™Œ †ºÖ!žº�niü£Á°r¼£4ïzçZçM1¯Ñ� zÿƒÁÿ6îÆ–Mp÷áclž¶~܇O#â‡n¸gP|C†k\¹ _vBBnK‘[„äwJ@!ù ÿ, <?ÿÿ H° Áƒ*S–°¡Ã‡ “IL¦p 2d BÜÈQàDЇý»˜‘aÇ“' 9ì"2”0JT&Ң˘8J<¦¬ÛBoÊ�µÌIôŸ2‰Ã’Ë%l˜H¡C‹ví$%­$&”I:�FÍ?ÖPÃ�0…„ÿ�*¨àóÏ=;ÄD¼L\„QÆ ËaÇ{¸f(ÊÍ5snÉPó’3ysSI!œø×ƒñÏXl!Å,ÁpÁ »±0åOÿ¡ÜÔTKDPhÈX= 3Ìtc œpB (ŽáGlwôÒ \œAäo¬1ùBI.†%Rzç'6’ðÏtÃL € |ó¨?ÿ±FüÀ3³!<ÃTe‡< NÙKzâ;‹üCxÍà†4±…Œ€X^àþq#Ü  F#^Á od¢DYƒÊàF‡è TÐw¾*oÖ˜†0˜� A¬Àè@ÿ™—‚ñw(7˜± N¤Av]È‚Úܰ@Äæ¹HL]lHÃd\D7ÓH7‚Á  à€Mƒ6>a½ G/L!ˆ'8AdRø‘È 2¸¡uEëäNä‹ÊÈ×7Q€ @�À8À�âÕØÅ&¶ðƒ'ØQz‚º�´ ?Ö¡YLJ‡¸ØE{¯œ°0D`p)vQ 68¡ˆ4¨�Ç‚Ð#‚‰’ \¨BN‰À�|$}­Ó0€�dJÊÔÀ}­æ„j¤�†6´‚VT™F9âÊŽº/   ¤ô„¥ßàì׃� £`ˆ1Ð"YÊN$KÈà†^¥‘‰ÿà‘ø,a[zƒøëœ>xI‘g`ÈNy¦3�! ®vUX@g7€�°4¡‚ë­0}Àƒ'"<ÁëqQòŸÅX�ÊxEI €v©jUAý|% ZxC%È� ZÌK ilu>àlg _ÃÞàÀF�,¼�h,Ю ô]ð&\3aŒ1 (€A ÚÑ40ÂTᓣĤ� ôœçðÚ ap#…xdMð�x؈1ØB&°‘Èþˆæ./A†d™±ÄI„ A:ƒ¿�  £ð©�s“ Y¯ÜxE ,°äŒ0'ˆü•)ÄjÎhF3@ç ^X¢¤ûé:Ñ cXÃÌ ¹›š›1¼¬Í!Ã!Bf![<× Íÿ`Æ4™a�`@b !˜C+ºzçüâY"Ôp†¦;:<®2•è…§¥ACsnÓHG¥Ñio,Qw6µA&2 cücÕˆ­YMYsn"Æ£so=�šYÚ×] vAX}µcûú#­�lkéfdC;ŒÒž¬AnóìgnÙ³övÝÊ!ù ÿ,"@>ÿÿ H° Áƒ&K–°¡Ã‡ *û·�aÄ‹.Dö2e)ZÌHòâB�A*Y²%‰Ŏ%Rå¿cÇ\ê|©ÌHo5âÜITNcÿž 6qâ°§D‰&›hL™°V§Zå¢(2jËb‡!™P%U¹TN<éµäÔÊ`AX©Ò)aÿhŠtÖ6"Û�ªÕ™ôoСJ˜h 9ð/Ǿ�‡%jñN7ÿ8é9t-¨6»¢„¼øéÄ\‡ê�!Sè“�yQj…—&KÒ‡Å+ Ô¿:ÿÚÀõúßfC h É8êm…yá~J£E ˜0“ˆãùóïПH‘´‚ÿ,öÖë߯‹[ýKcý_Eªðèiô/¶¡J”N¥½)¶/[°Ê0WDˆQm´1È(zèáG}p÷%ùÑ"`PÎUTL1Ê8ã -wüÃÅ?Uhñ¦¨² yÒ‡ƒüÉ? |BK355§[ÃÜô�0€ä DEH¡E\Œ2Š€À!‡@1"‚ˆ#Ž$&�^ÊxD 2[’ôW3Kb…A ñÏ"r¡J&n¸ˆ}@)匔8¢^Sbq©gFSM”Ó0ÂdâD>è�„W\Á…½4rÙ?ràñâkS:BÉ?˜(§LžéùD#ÓÓ(cüC臞ÉE¹$âæÆMÿ:ˆ”Tb‚©V=vª¥GÃá4³HaÄ@: �Š’ ÿ¸ñ†pàáŒÿHIᥙ Ã鮟ú%S0sÄàÂ?>üSì?Èr¡H.u´‰Š@Y­µ”ØŠI�vºe· -„Ó4¹ 8ô@®H@¡0¦sG›Eûµ´R˜•2ÞxäÌ–]ú•Œ¨Ò@BÿÜ€Ã?=”›Ä?IP1J.s´yÆ?NÆ c”–ú¶U§ÿpÌïCÑDÉ ¼À‚É÷P¦±TôâojœqÆt´GŒ2bºUGÇXãsFÖxÊ!­B 8œ¬´@XPñ�*ÿˆáÿœ‡{ìQØ?† ÿ’XSFQóuCÔDÍ4Òt³Ë œpB *�vGüclÌ|r‡a„UëÍwr=*$øé…7dMÏÔãM/O P ��²ÁC`�#æp’F�Ï|yä�‡!†Ðö”d¨Ÿ¾RE ¥NP0[x0A*Ü`2ÊNø�F‰¤£Èïa¬6ótÄÙÈ!w-vLó‚?_QÏ1c 7ÒRÀ ˜p *ˆÜ þ‘¶aýc ²H‡ÈW¾óÉ�x‡ ÄVœ’ŒbÀ/uç™âÇ r0âèÀ>€‚üC/ Á lð+üãÌH‡1È ….pÎs€Ø $*A <Áä‚+!ˆàÿ¤1�pc;°€6°8Ñ00¡Ü&�`¨âsHBªp �œaEz€D+ô"D „WÒø‡4¸!Š0ðÀ?8 �ücX³ È~„-@QUàœèöHœ:$ñâ¤á S�Ì@À?€ œ€ µÈã?ž0�'A[¸ ½p 2¸¡Ÿ¨�Ž<¦FsÌø$ �``XµH_ð��ëHÂ9¢6Ô!¹(Üs@µ)fü£MHÀ@*p,èòšg«AÊ …3IA UHÐ!hÑ ¸¬ò"Æ`†4Ò0 Ü Xè� 00Ç”0€ÿ A xÐÿƒaHX™ˆîˆVãc:1Æ4˜Œ –%Ë€þQ�Jràþ3! zÉ”éàCˆ¸À…:ŒâÆ�ITº¢ Œ@ `"ð `à¢&øGíz‰ðÓTC(Ré#¢ƒÓ#¤ù@ ÿˆD?0»°€hK›¹|R)¤¡iÆPv4i0£Àb*U›r€Ž&@Á Y@À‚� Dg7”aŒg´…Üà9>�@ p+@¬¤£>R`a�gôÕ¯^qF�8‹ @ pœ#UýרÔ =5Øî0ŠbX#hBÉÉNJ7½ÿ€¦´üG:à¸{²`£ûŒ,R¹ºw¬^iÆ�¤Œ;,@’¶Äé?œ¸Óð fÈ3”[†È¶/�Y].áDõ¢ÿíN{YƒD£ψï@¾»Žt‹f�F& €€l`·&è@NSð‚üãŒÈE9q3šO�n¡ÝxE $‰�ÌÑÂ&,ðfQ\Ÿ±#ÊH]4º¡Š' @Žáí?`P€-ÀâÞÀ¬‡bß²:³½6�â€àÀ¯ðZJgl�“įÜøQ"ø+�7�Á0F4�Kä ÆïÍH\7@€ 6¸C/¸[úVy%ÔpF3”«FnÈÂb XÂÔ3�Ÿ¹ œr¥‘Ffÿÿ H° ÁƒåÒ<²*Yœ8™N ë•ÇÀ ÿ÷çPž×†Nåÿ¢‰6ºReŸÓ�H«‘ß`À¨ù4JŽž?yòüidÈÐ(Zè%FÍ€ 4àN SS2x%BbhÑnзÆ}ùåÁ_&†€B‹1É(H`�ÿXÒG ƒ“0‡ü#„UTA†`Œ2ŠzÐ�Ç<Ò_$”À‚’Šÿ<3�‰&”bJÊdbHÀXÅ„b¨’‰€Øç‡ü1H$@‚ÒÊ\'Es$5¢yb2 �øO&[üƒW\Q…\´1K&m\¨G[‚"@bBɘŒ¡WÛ‰4-–Ì(TnÌ"I�ÂNÈ88B‰Ìx,¢"Ï´‹ YŸ@¤á�]XŒcyÀàN(Ä,þ��]ˆâT Bít=5¨�hu¨,V5 †ø‘U?)Ê�˜Ñ�^l! ðÀF€�˜ÀÿxAjÁŒp¼‚>‚0ç$yá„m™WÃ&™©rÌøGñÐl�€:àRì∳Áœ�ƒ'A©+æ��‰@Œ‚(ÆPRCŒÑ nbˆþ!ÿ� À€ )Ä^ƒØc¶Â�¤ð/hA ½©(Jc•5ýÃÜè„ p H‚A´ ó�äýƒ 3’hQ“õYc!@þ¡‚#°á(à@þaK˜‘7@é?| ¸!üCW¿Ã*!—“¯$ÂðÆ+ äáÀP2p�pà0Ðà �Z¤TN�ÒKÅ !I‹&0¡Æ4¤!M3X³PÀ?P� HÀ¬ÿ0 4ˆT"îtÿB¸pÄ:œb,Ωé?t , ÿ`Àrس*VƒW#â?0¦ƒ[A�bøDiØÔóÿ”%ÒØ"7‚! ®Â² È‚ž"n]ª|б4T"†ÃxÆUaÂ×Üþ£u‚ËO�Ø—ŒU­[**",*:F4¦K’� ƒ¯a†,B0îbøÀP`ú!uµ«]îrPXxÄ#ìmïD¶¸Yi¼Â ã?6`V\bп6ãÁrÀÌ g& v¦�þMn´Â ÿˆ@w9pVâò4Ã9ÈA>!±`Å0™Æú¤Ñ 6x€Úä€-‡[Üú Ä ÖÊD3¼�ߨŠÖ˜†0¸! F``q~?€A¼€Fp�&‘ÕD©Ê.8&æ¶È‰/Jí¿ãüþA0·¡Þˆ']ÎL–SêÄÖÐa7vñx~a,è @FÃÖ` h¤sJj8Ã�–F+¥`h v ~ AfÑ>cHzÒÑk3É +` @ú'�õÝÕ Q3¢É N„Œ A2¡Cn×AÓì Wü 3h$t8 kÔðÖÈ>È4šM¾2ü˜*Œë8ÄÙÎ\|¿½ÙiÐk<Ð<^Ó�k]Gs�›…´4¬= tÓ{ ñÞ¬7+Œ}[Ãßÿ83Ö·k€úÚ ‡Éú:"�ˆÃÄUVäI@!ù ÿ, C@ÿÿ H° Áƒ*[È0¡Ã‡#d¸0™Ä‹Rü—ìX2oÊþ5ü7ìß±cÔ¨¤¸0£Ë�Ébæ:ÕŠ–°a!‡ +V,åJ–.ƒVI«RH™háÄù�§Ï�,CÅ8,™²�¹@‰Té(XO>Ut*Ä…:C*Ëõ© 9ŸðФ*WCjΆ!ˆ¬/²–f†´hLä§;[匒sèP¥V¹–þS9Ðï_©�!¦õ¯ 7ŠëɓǦ\& FÍl°ØÀaÎD*kUGL0 G­ÑÓØñ'›ÔŽ)”½‘5B«ÿ¼åªCE Ü™“Îóç�¡ß$§ÜNÙ8ÁcÅJzÿ¨¹0`ÔŒr'O#Ò‡U¢Ôj/IdÜÇNµX°¤2a$BÿhqÞë¹ñÇtüQš!‘€¢ €LM¶Ý~ YT•2•ü3`Î�ˆ*™¸ñOt�&Ÿ!”PrŠ]Rqç�@¥¦Œ*&EZ´QE°4â†zØáG{‚ˆ#-b"ÌBOò7#GYËD¡#�bpá-z¸ñ~ìáÇ ˆD‚H“06elÃxC‹DDQDÑ\$Œn¬ˆ}ôq&šK²¹fÞ-¤\O‘Ã�xz¡œäBF‚jè ˆ2I &˜Ø¤SjÿX¦êªödŒ1zÿ“K!OøÄ­IqEl$aJ/¶ J†ž‰È±-ŽŠ dÊTÈê³­ÊfR3ÊÓa>dKé®\pñÊ,ÁîF¡~ëȹÊ.™}вªÚ?¯fòDÿdëƒPH!ÅÝÎòJ°�Ú�G¡æ.É$©Ë–ÄW»ªT’0 µòÄõÚ{D¾I\!Á¼ÂEg¸!ÇÈ{l¢¤Òà Ëf2ÅôBÅ .àÐC¶7#‘P$!3¦ØòÈr êÉ(¿ˆË–‘eÑZw„C 8ÔËC¶Hd-Ån�#ÊÇgœ±Ær�y(Ò-Ò$YªL÷E–1ÿÝ4°PÃ?<ô wÿ ÿ±µ"Ýx"†a»!¶{,ø‡!J¦I+‹âÔ¶Û"‰$L"ÿHý 8ð�wÞ> ![pÒ #ƒöØ).Èø±�£&mB”'\4ÌTC)ü£ ÿTÝCÞ9$ADT|ÂÍ\�QFg¼ñ†t챨ŒW¢4C #Tû@'YãM&Sd~‚ï,à þð<a<ò³3G`„¡FØo¬Qýõƒ2ŸRÍÒË0¨­ƒìå€Ò�F7vaƒtà'èð‚7¼ä@š-‚‘†+x! Ï ÛR”¸U‚hi–p hÀT�Þè…ð�œ ‚¿³™Í<—ƒ >a€Eÿ?è¼7D�zy؃{Z!�täÍHÕC¬ÑnƒÁØ‚jxC €7œ�ƒ'Xáf0ƒ+Ò1‹!–„aƒÃÈèИSPH/”› fÜaà@:€ O wû‡ ¨ Š^¤#̘®Ð…0€ð~gÙ!ô 6+±a!�„c!kPcÍ�†91‚ løÀ Ï÷�¼ÀO¸Ã+È�fÈ¢i�BÆô¤†2¨á˜€X$N¨d8ƒ€<ÈI¢k8ƒÓH(F@Ãlàçù@'p¢äè…@Ð0*PAKûªBêB7EÍâ 4ñ#ÿÊ�XEÿ€á.Fðn@ä``„B삽à„~@F\P:“ÂŽì×1´á(LÄ £$“šc!@þa( èjñ�Wlâ 60‚ \�'øÀNÕ׎¼¢ÁAB—)Db"ã¨À?"ð xà…øG-°`„¾@5°›ç²¥ƒ dL£U¨Àp‡:€@#Áˆ2ŽÑG4€˜ê °ðRðõ›ÿ€Á ^À‚ºµ€5¸Yt°³}qA `hà ™“|/"11†0¤!‹ €¸°pPàá4� "˜ö���0„$ÿ$¡[\$PX™Ë>6ϸ"(þà…‘˜À?.ÎXâ�°`lÁúî„ÚÞ– i¨ â—‹Ä$Ó †7‚ñX€ ø"ð€Hà€jO ‚ß¹VºëÓ�† ¥nÕá 1Jšvà ƒæèÅþôþ£½î…¯|W›û²¿6»—’P*pá­*pw½û�hDãUÝÆ 0 ½À€„?àEÔ÷¾êËp¶ºEÊæsa#&iGŒÁŒHÃÌèÀº÷ð¥±+Œcõ�ÎY-Ƴ2»ÄÈ(7¤‘‰@ y•ðeYáßÕàÿ5@,zh1@îiÊpWPú" fô™ªxA\éMXÊW–ôýœk@µl¹ £ðEV%dƒô/0„…@C ¼—ø‡jÛ Æ´ >ˆÔ)ªD=/UJÜMÉ4ü 6¸´ªðý‡”!He0"ö ™¨’Gòü¬ÀØ'%Î`†5˜‘ˆ À• �åj#ø‚ÍÕà.€Ä8’Œ¿ÛØ¡†Ÿ¹Á 4ñä´[mü@¹èF2ªÒmhÇmÈï48 ¡éÁ `PíØ ½PF4¼×²ÌàÛ”³fÆŸpAŽà|/€A¶0 �Lƒá^fML2ën(gÿÏpà ;‚€à²ø‡I9¥‡ŒüÓøxª�œˆVÞP°çD0ü<Íšc6)i†Ò‘arN„À'�Ô% œœæFwHL’¾ôftƒ¯àA °ƒ9¨óÖ�Fѳ®u¤S#�ÌhFÄ­1 I˜á­ðs‘±Îö ¹ Eι4¸ÁŒ`ÐÌ`†1Ê÷¾û}ñÌØ·‘ûld$_ÝñÞo@÷íç>'>òÖX;æmΟÂP>�9§FèGŸy‚$ðõÒÈ9ªX�‘œÛÞöá}Fn{Ì!ù ÿ, FFÿÿ H° Áƒ +6¬a‡#JL8L™Å‰3fhR¤YóOÿ!P¶PDqElp!H.Ÿd¶%mtìñÇ …:2dºÌæ‚XiñV,ï1M¶øO.’¸ðÄ?AñPüóoÀuà l[vYà 'ëð²2å‚Ì0[\qGõ c/'?2®WH¡g‰x“Hxÿp) ‡ù�˜;Œ(&§H'œÎstŒ1nZÊ?4tRDÁ…ipÒͽ°­Á%Ô`2ü�©3§{&u\ŸÿÆÒ0ƼIÜ4äÀƒ=üãƒÈHH!ÅÚid #ü�±Æ€Úч�ƒtª#ˆÊTß}ÿ¦“Ï´Paƒ ÿðຠd4U̱‹0wˆ�ï?g¼‘ù—v;r*& ¶uWßð25i/¹Pà ®'îƒÚJÅœiôLîu”Á»Ó /Ü9Þ¨f5ÎÈ¿;R2ÔÞ1 7ÔÃâX$a?i`ÓË_üñŽùÓ ŸÌ4ºž,Æb±IØþ‘ „-h�@zp8Á~[¸ƒ1`‘0�A j èð‡?ìajˆ0™fR”aPc.:K H’�gp"!hÐLp‚óÃVÿr s¨‚ mCB‡îAaJa$DÓÂi¼�L†4¤ÁŒixÃ?Èá?^ð‚˜Q 8èA{�$¤á œHÇ+¨°©%þã \²C† CìÍ%òÁ⻦Á �¨¢ ø‡Uð‚˜@ìÁþ‘*ü éÈ8†0”¡wk°Ã?žøÄ‘Ĉ…¥yIW¶(�XÀÙ@2V¼À[˜Ä,ÈŒWâ�Ox¨P´Ôªjp Q U��+u�Lu Ù+ Ø€$°|ˆ†Š�W´á ?ø�žP©-Ád™ê¤Dë7T”IŒu kHc hX€€ÿTÀ°@Ž@Š]ìB[ �^ƒä@ A°ð�´uÁ ÈôÚP‡CÐÇxÆGä#mnSi�mt; T@‚¨E- a„À1p�|èØå+[©B· ë2´!ª¨H4à¤J¬>ÄÇ`F7¸Ñ‰Œ—`xK 6Ü€€�@ ¿Ô€ GÉÒ¦_/\! w¨Ã)ˆ¢6IÄņ7^€€hØÐdàxì `p‚¨Àœ5øð?&9(Há ´ƒn2‘wy-#Ó(3¬!Š iÄ� 2 TàùÀN€Ërž±ÿu‰Hœì8/pA •¨²©Á*,OCÞ L€˜À* �œª™Í-ˆë2„ÐY UÃ!ÜSMëô#é"7 �4@ h@* H` &ài›¢d msª§µºg”4É•Þè†)B€üö¬–þáØX£@=²ü¢!VáÎ+ÞŸ»¢‘“CÔ²ø�—kk 3û0Á?Rír:²�äÁüt@="aŸ˜ÌK¦aÅiÈ Ô_3ƹá�Y ¡ØØ€«1€átÿì&ÈD£÷�^"ÁÞ‡Ð÷HøÍçç…1×äb7rÑ ÿ`x³Õ=Ni£q¢´ žšÄ"|öÚI2B—kþ™¨Ø˜„€�0ÃêŽ5.¡íÈLÓBê �í�$çWN k©1-¢ª,'OyÒm‚‡FœºlA x�ü œ ItîâŒl]1®äÆ+j t ±c7ÁN×Q‰Ö`~. ‚*´Ò›Þ�†î�銖­1‹'˜åEO7-Û­Ë$;á9¨DLIBЬGžÏÏà"7‚!0 å™<» 'ðà“�q5GRúºã…ßøÙæ?$Q$ܱkÞü hPƒ¸à½ð†ó(ß…ßüf†4Þ6ì4–üÿ? Mü€ªè†2¨E}“Xß)á7ÿá kœâÆghC‹ü¦AÜc;!„THÿ æ O�Xc5d ð#ð£pPÏð~HJ1 ÍÐEç ¹�Nà!Ð�@TÏ ]È(ÒÀ(ÛÄ ›à�0€CŒÐ [d ,Ø‚!p®ÔgÝ œ`5µw Ó` N„1 ß¶E18Ò° ˜5³@ [4 …ÁoÇU\õÌÀ § Ì Ìð,`øÀ—€¯EÚÇ Ý }Ÿö†‡Á ßÖ„yzH|X]È(Hw8ˆaÊÀgOȈÐrÜ%‰N¡nh‰)�‰@!ù ÿ,abÿ•)óæ-"Q„ЄLذaÈþIœH±¢Å‹3jÜÈQ¢@oÊ(…iÑE*­”![Ù±¥Ë—0- TFKL8Z I©Ù0e1ƒ êQ™0LbˆèйG¥ÑˆD£Jå(°•¡5k²”Á4ó¡O SÊý÷&Dtèp&ðáϱp¥K&JªÚþ|¨ìmÜ¿1çæª«êa®•{^ü²ï\¾+¿BfL¹ãC‡ŽUòÝ ¶²g™nÛö=ú³é‹ÈFï]Ýù´k‰©9wmýÚtâÕ~k×ÖLº´îÚ{%ÓþM¼¸ñãÈ“+_μ¹óçУKŸ32²cǨõŽ]ûXë,½Oÿí ™3ˆâ‰v˜Œ}ú¨Ö€ ûrøû�3ç:UiT®ÐÉÜ×Q~U"I‡€B PŠ xQƒýdÌ(urˆ!‡ÒÊ0ÿØç`ƒ‚Dá€4òÉ?‡T‚I‡è E3±åM+nˆ!†ˆP¢¶RQv/vè˜7´"Fn�‘ %kòOA>8d.€pQÇ7Ž‚ÈtèaEøø"ƒ UB…�d¸q†–\æñe#/vW‘@ˆœ)Æ?bœ±†*ƒ¬ÑGDÙ]1°It Tà™dÈÁ'}Hå?€IœÉüô UT‘E`¤é-z¬%Q’ 1Ñ’\ÿ‘E¡Š!G.n²#ª�Pr’¥L2låR‡EEÿ„A†�äBÆ?kèñ�z,�ºH%R¡lͶF&5ýÈ?r\„ˆD˜8Äá°Ì`2ÏuHD$…UtÑ`h1 ,7b¥ÇŽ9ò%̉)Q1ÇXS Pf ±HQ…D`¢,ÿ´áFµr,|Ä ƒ/qG¨˜2ŸA…ÿEÿ|¬ÅÁ|b²D ï¸GEcä¡kƃ^2£X‘CA�„ÎWt †•Òp‚¤¥LÇѱ•qÆüãr4ªlá‚pÿ#Ä?EHÑó\$â�‘Ô®ÿñ�íæáÇF+ÎÇ"ÌÆ°ÕË.<·ÜH$!EUh‘'ÝÔQÇ´k´øà9ÌòD˜Ð"ÌW§åw™2ÑäÒÆ>ðàE‘Kð?\¸ÂMm¤Éîµÿ�-Ñ»�ŽI+‡�]™êIJÉ.Ô;í’÷Œ;/؈ÑFž~k”´#+þƒÉ)¹Ô–Œ‹Ç¼lŠ 1ðP8ôÀƒDCHž„D\Ìb�q»X™È@Wˆ�oCÿHÍiÎ'‘´y? hÐH¤=ø‡ü•„ûq½HÃæüG-8L$RADÒÄG L”o&§éÎ1ŒÑ�Yü   ZPƒøM$Œÿa^¤¡Óªˆ4B òy„C1ÌŽ1¬‹'„ÿ`q0¿ ÎN9Û‚Òq($–a"Ý“Èш—´ÒÁÈ5Ò�Æ4¼Ñ‹9àð)xA n`A þ#>ÈÁýþ‘†B¤G$CÊð?j©Q"ƒx"TH 2è5Ò`F7˜q‡+âð/`Á Z ‘ùRD¸L‘ŽRpA `XäÿôD‘AP‘@‹ â ×0ƒÜ(ÄFp‚¤ *È"ü˜Á’D0Ã(Ò!‰W†! g8c#Ǽ=äá]†8…á~rŒ^BÅ3Ã�†7LQ€a™/P þaÁ ASƒ¦zAÿM.|l‘g,äЮá Âá|a‡8ÔŒf,ЯÁ NЉóÉäã?2ø�#è@[HraŽ;HA ³b¤DÖ0P;ìá¥O¢Dù&j,¯"ÞØ… FP€tÀxßä&sž;¬ µ?ú�~áŽwÅO–örg8CæÆæ(~¯Çù;qçkL�³àð$™Hµ]ÝÁ·"Þ8ß3^ãUe8ã—Üè"þDàçÿüqƒzvÄ[�ÕÕA¿ˆ@Hp(LɘÆ?³ªƒçîb¥p0Ú°"KàóGÞp’G³~‡Ë”ž4(9"ˆA¼´—=í=“[˜K#ݰÆ! °f`ØÂ/.ÿñ1zøÔàü<�ÝìXŸ†C‘öÓ¯Lõ‘áðLÆ1¢D@$P²~è¢t~çÇQ�D£à2í1ðW{ÔgwG Ôà ê¤ S ÀnG&zlUxú6J=ô�äTð §#nñWÖs8 Ìð ¹p@˜d`\ï4tYdtÒ35¹†:q‚ºÔ` Ö€ šd,PÆ5ØqÈ$TY$.à?pó! nÅ!„ˆ ÖÀ b¨#€�àSó¥Ç„LSXFàu@ ¡<³Ç…Æ!'17 ÔGÝ0 [·ap†ÇeLkøDWs ‡½x†{ÿ(†Ý° ?ghUƒPL…÷4ð†ø�¦…Í�¢x ÓPŠ,È 41€Iæ„0pƒ dOð ½e Ö£ˆ¦È‚ÌpwÆ‚ö>u¯hj0`¨å Ò�@‘ñØPÍ€ Ýà �P0Œ#Ð8tE‰Ð Ý0 r‹éñŒ EÝ�u*` p80iÐ bØ-â(GÌàpá ª`Ð!`!PV0 Xg Ôõè÷(†q´ŒÀ4 XP@°¯ Ò@ ²ÇŒ.'¼Å bõ™¤IÁ�3PS@>Üð 6%Š?È€ÒQŠ"ù�qÄ ×=w  Ð ¾å‰/,uø»h“ø(†ÀÄ ÿ��ÿ�‹0yCI”É Â ÖÀ"L ”©R ˜•11, ÷!ù ÿ,bbÿ“ H° À*\Ȱ¡Ã‡#JLh°âÀ‰3jÜØÐ¢GŽ CФè±àÈ“(1–¬˜²¥K’+/¾œ‰2¦Iš8AÚ”™³gÆ�} �4èУw"]ê0&Ó§ �B�ZrªU„U¯Re©µ«×¯`ÊK¶¬Ù³hÓ.L˜·\•Ü"ã&Ó?=ÿ5ÕjØæÝ¿‡7×.2oÃ"†…¨¡F&Ÿ¬ÑÇ?yT‰*Âlö 5Ý…÷˜_ÊäÕ&i h £Dâ†t \%ªh ~ÓXx›Y”&š7˜ˆEeXÈ?"öñÇ ÿ4’‡!§Ðòkâ‘#sÒ"ddAFŽp¨R‰}øáÇÖRÉ(¹ ÃV^ÿ$IV1Æ”©¡*bpQÅ?Y€A�AÊñO 28ˆ!ÓÑrß?º�U šÆXÖ\iTQqþ£¹rÆ?xä™G#|‚BI+})&£ Ç<#Ìc¹Ô¡(œÿ€Fªr”*‡xTÿŠgEBɦš)£Ý1ú�5Œ3ƒŠ Y%VT!…oþÓF`pòOn¼«{ìd$™ÜšÙcÃð ÞWdêeX¨��BIüE²Ê‚‘‰“ÑÂë‚~ 2H$ŽàëHmÞü#Œ1Ï<ÓbWá– è?ÞŒ2ǹI@±nB‚T¡Ê,­Qrè‘ç ˆðÉ'”œ’Ý?„U[ÏXã ,\<‘„H�P±q,£´ñ�pÈ«‡ÿø��ˆ âÈ­µuf_hPL´ܑÃ?A Ѱ½ÉE¹dRÇ?nô,m–ql4Ò˜Ð"ÌÒ�je˜7´ñÄ?>�PE¼Ù\HÿbM#u�ñ†Ø°nŒPÑGS‚ &­ Ô ŸBÅV1ÉÉSûðÿàÍAâM"w�ñOÏ;k´½ÿ ~ô'‹gÆYÛGEÍ…ƒ=É>hDÕœgý�ÿˆbŽm°÷Æ«ïÑûÑF�PÚ´ŒùPÊì™1Ç(JNä 9ÕHp.ó›m‚Â�² ©îÇó­G?ý?§dáõ>#�þÌ%¼=àAzða3Sñd!�6oR±SÞW¯Ã%„ 9Em–Ô1éϼÙB ZÀƒ�jÄÚ?®€�^ãb0ݘ§�÷Aï·š^f˜ó¢£DæÝèÅÿNPƒà€ÿ  Ž $`M…ÿÀÆ?¶–�5Ð0he#B¤‡‰ú1çOHi‹]àv‡¼ ˆG`|`À @!]RHºÁ .<ð“ZÃ?€4¶n‹ŠÛT„Àˆdpð!Ò�F3¼ÁŒDœ*`Á p@%j®|�“‘ŽS(ä zTH–´¤„8âŸØá¿UÈC:$‘Ö°'B‚Dò“L"B|×¹@! ;E®;«)-x´ÚˆP¬<‰!ò"f0àˆALp‚HJ²±$ù‚çžRp!!“*áð*-=¯”ˆø-–“ŒïDs$ÓTÈcö¹ÿlx£cÁR`K|I\£ïìö�4Ìž æBÎ;mø‡!aµbmÿˆ†5ìÙ’|&dŸlL7‚‘€QÁ zƒp®‘n:ÐÁ‚�†^ôK ZÈ‚:ÿQ†2ˆÍYúƒ!8ö�Lœb�#¥2zÕJ}>Æ)�3î°‚¼ô¶ü j�K%a€=ØéÈa�GL1 1jE${5LÌF~¦zO‘˜”‡ÖÀ�5»Áˆx&0�-U ÓÔ!Mè°°…G0r˜^HȪŠz:9 u”~(Îÿ!Ušü!laO1ü£&@Ábe*É„ÿDöGøÇœà‰t0³Z &ŽäºG9(BBƒÅãtUZ—2ŸÉا4˜! o¼"Ø:ðÄ¢€±*ë?"Ûƒüàhpk2äÑ‹HᜫZQ{VQ=÷º 2œ!U§áó¹¢ÉP2´ê ^„ðÀv?�Øï² ¼¶%à¸pˆ^t#éhFC¥p….„A¾óe§ÆðPˆOäªLSMqORú f˜?h0ðíþ#±0@ hpƒÄ !u6Ò‘nðâwàB8\…0!jÀã{€câÀ&Ã[> Õ3þ‰üÃÙÝLpãïÞ0}ALŒ˜ƒÿ²è„2g„@q!n@ 2‘ j<#öìëLcŒézƒ¥ð@* �H€¸± `à�ù¬Kæ¿bV±ª(r˜7a êÔ£'“£C‡*jÕÐãǵ€‡ÉF©8j QÊ(OÞ½Ai>£F™ PÀ(•yóÖJŒĉGZã8�ÞSAÿM£LÍ2RÌ=&£é –.aÔ膣ª‘œ>{þäiTiT.’~a§Ì©9W*d”)“¸÷ï>}7tŠV2eÌ_+ÿWéiÈ\€ˆˆÉ’… ™pÐË¡ƒ=�}C•(Ñ"iVàìñùõ—7Ã@B…gì¹Æ$ÎÉ!}Ø×H#ø}ÒŠ`âý`BÃdLRÿdRňì‰Zp’ k8aÿ bH$4Â$Ø?䵡A&cÌwÞ|2GRDQbmhñŠmn8(‡{äñ‡!3F &Au¨ãŽ8óÌ3ÿ<£ ,\ÁEQh‘Ea´Á…*ÿ´Ñ$úñǃü‰#ŽP‚eH7rYZ_ ã�sTp‘D‘j² °Œ"g‹‡ç ˆ É'” ¨x øÑGÞüãÆD$‘QŒØ…›u`ÿ“‰©oÀáâ?vbšiŸ~Ò"24í(àlÇXÉT¨Z«ÿD!uXÓH¦ÚZi®ˆ`º'%½ÆêxDyùŒ7Öpò„B �Ä?PTEœ\tb u�á¥z¤+"ÿp‹ %6Šô-`V=ÓM�Tœ›®ºI¸ûi€ÒMmØû†å¹+¯˜`ÒJPÃ&à?ÆãÍ([ä „H�ĪÍV¡Åm²H3gPJ{ ’ç@ˆ8Ò¯ŸgÒ_˜}$L7°¤ñƒ9á²@ ;«bð‚�gb伯Î<ï#¿ÿÝg¿ÿ~|#Ò€³4-wÔ°²>1„@HÉE\´ÿL0wt}ÆóÑa‡@~ÄH�Д í±¯3LÔ[uü�ƒt×ýÏÝyK!Å?ÐrÓKž ¾Æ?t`|¿¼þƒÉ)EJUQ!ùØ�0‰¼P8ôÐÃ?Gè`·@Q|NEæðrü^Ÿn‡}àªxÙAs+PǨy#Òì6Í$Ô1œØC 5ðàû?=wÅÿC'æ´’FƒŸ1Ð|Ñ'þó®Ö»þ’fý¹‰lÐÒ�nd‚ ¸A þa>�ô xAøÇ>W3È àÂ?ì—3�ào û3[ãÒ �àè*áÒÌ(¬Ð�°€¼CŸ } �@¡\°`:*A„:”A k"Æÿ '= ñ©©ÁÑÀ6"”Õ0cÞà…@�¼ð»ë|ð�º  03C/¼Ñ‰tM § b‹ˆ˜¸ƒ|â´xÍ0‚u­ eÆ`†7‚1‡€à*PÁ °ˆrq ê’BÌP oHâ8AZô""„ey x2¢¡¤”äÇ�ÆÒ°QˆÀÿ°â?Xpò` :ðÁò†„G„ƒwàÂ{¦s†2 ÎVvÛÏÊF# %qÈp'é’�X”zü$B°‚üQ•©{ÀÅXê o>�„9°q‡ÏIG ¾<Þ'¶?L�F˜ ‰@óîA¤“%±Æ1¦Áÿ fpc#€Á L€‚@²à4 ú^y„#¤ïn>èD:F÷00Lç‡y^ô¦$�yêFÊP¦Fð‰k$ƒ&s5OpTÑŠ7Hh!µˆ>ßõ`Ið�+&š)€ 蜎ÿ=Ÿù쟈£Ò Ž4Dȸc?½1‹X`&h) X`EVÞ � ýGrð�—å@éPE4ø�,”! è< ç‡Ä5°0‰H‚ÕÉŠ<5rÌ0T/¬P€t` 5¨WgÊÀ@ÍnD /â1 3üC �ë@Þ �ÚéBÊ`Zó�¾Rä¯Ó°3ºÑ‹'\•0AV *Vÿþ£w<à�žðƒ AžøE;ìÁ *ŒèpÅè?8û)â£�ç@bZ¿JzdF€€Àö&ˆ*ëßÁi(Ä+‚Ñy ã€ ‚‘û^.—³¿in&” ’_•–™™ÍwœØ nlÂÀÀ8ÀðT'H h`„¼  6˜ƒ+ª�Žx¬£¦˜¤ A™±g ½l®‘ˆý åFÀpE¾3<L@0¼Û�È6±/øÇ ^`'lbæH3xá I  [Ø‚ªZU…,Ð�ÔY戣dƒ1–qDfC kLƒŸÒ0Ç,b° Hàÿø^ü#hÂLÑ n�cœp‚ ��.U-êïZ›àj/7Ô´ÌðH4V#Òn„ÌfΣ7‹TÀÍÀÀœ9°�¿ “Ø6‚ñŠDXÁ?´Ô¦,D'ZÑdC܉Q”,Ñ Æ4bé‘&CØSÅÆ`7O Ôøô`àAÔbÕxE!Œ ë6s>(ôºŠÐ¬x! ^øÚ †žœ‚$àpu—yæÕrƒê0€BÆ)jñ S°! °Á ŒàòñàrusY^æ¹Vy!Ý—ew2²ÿÈ;%³‘†4¼aŽI,  ÿ`@@p ‚ …Ì�ƒià«0,¤6§>¼yî îb´P‡;b*3¡‰˜9rn¤c+@À(X()Ø`\§¼ù ^X,äwR»Û?EÁ* wL’~Œy3=Ò°F0Ì €&€!Ø€‚ @`0, f[ű׀ÿØÝ+¹©Î �Ü$æ‚W‡wÏdTW™Íjƒ1…|Ÿ ç…7 °l`±ý LPŃ>ž|¼ó] g¹®|î š‡Ö»ùʶ›ÔØָÂX`À¦?ýRs`ñ>nü?bªÀ,róxë½ÿ×:CÀ{Ÿ­YúI0í Z`9*P�\ �ó?8àãì« È¬y8 M5”fÂ\ptÚã«aw)Qfÿ�Áð €0ÿr&j ^ÿaµ5ØX4$A ÈT ¹Uu7Ktõf æ “Pÿ@ào„€!‚–BF80y)AB@bB Ú“#‡IJOydÿa°qFg {* d¥@¼óJ:~]d&Tp|�!W8lÌðÜÐ » ðˆa„H˜„jVÿKD9ÿ@˜p ‚ñÿz2öÔð!P Oñƒà�DØ^$˜J^Õ8ÐæC7*ƒ,•@Jg‡b¦ ­! ‘ ˆŠPj¤XŠY•J0õUª˜[tƒ.Tp‘áe3x["É`fzøÌ�<è‰!qöe('�JÄèU õO�uGÑà5�cvf¸˜‡Ò� ¨ô½Ý(‚#(Ž1H- M9€^eQw8A‹ AƒÃ&£ð �¡( Æ#xˆ«$XÄOàf  À*êWhÔèO³Ð0À�sö¤8‘aP õ?@Ÿ�tÿ’;²Ïÿ$€ƒ�xû'áåRgØx4àFð•p0^ö‘‚"gvf! Á°ƒö(=^á8”IXa€ ÂŽM©Dq‹þÄ ™ ð“ ÆR(ŽIÿp¹@ Æ a)–‘Z¸øÝð ?`� V†nÙx m0FÏP—²Á”ayfÂ&r¸h ­°ðƒÐcñ ;°°`Êð#Œy—N™�"•¬u­w™* )#ð¯ lÆð 6Iš!rÌ€]ÙUy„„6P Ø ÒàŽ¸¹§ ™|É ¢ð#0ÍÇ™Œ ÑÀ ÔàeÉ©§™“ó M\`s@ ÓÀ ɰޣ¹�qšá Ý0 O°!�¼` "÷%¥Åža )�N— §ðÅ ˜ÅÇŸñŸÏd ÖP`ÒÀ ÏPwŠ Qÿ`iÑðJ¡a¡C±¡€!ù ÿ,jbÿ• (pX.LDbäpAä-oì=;vìß?e3jÜȱ£Ç� CŠ´Hp ÁH.B¤t±¦Õ0aÇŒM¬xq¤Í›8sj$8l " N€hA“²—˜I›6�¤Î§P£^,)0G-T¸0$¬ç0cÒ˜1u*µ¬Ù�‡©Å† -XÒR{¬´»Ö¨a<Ë·¯Ia¹ä¸xÛE™¹^¿ÞÅ«·¯c³Þ Óã¢Ök'Ž6m1Ó½�CëôY™°•-ZdÑÜóè¿ÎLó‚M{d.�”V²‘“ZµÈ þËKmšÀÚÈG’¦E¥@�,\8 2ºÑ¨OÎ=¤2ZQ\Àÿ•à‚ŽÚÛÖƒSíÎÞ£*9,X¨ÐÑ¢ÈÜ£éÕlÏŸã�!X…K­åwÝQ³õÇ_…a…o¿)c ]=)¨ [( ðàoÖ “Ÿ‡t�DEL•h 3'>3Œ3RYgш4™¥B†-8ò›‡zXP‚ÁX"SÂ$%Ì4+¶ˆÌ‹#òÂ’ÓU—ŽÁQÈ#Œ>–Ž0¼´Â -¹3L1"1å!PF.]hÝQ­UØ#•7Í3¹œJ–YBfHcu´âŸGö·¥™žIzÅã?pZdMg½€" (²Œ²¥7Û=EQ1Åc̘}ÝaÔmPv˜¨¢ÁYÑ£Ìp" $ ˜ÿÂK0Î0#L3PmÚé§�òõ¤š"ˆŸ›åG‘4ÁlBÅŒ0" (Ìx3�v8Q9\7¥Ay°ù%Êæ¢­‰LLÒT’ƹ‚Üñ -ØRã 5ÕŽ(`·A¤ã¶Üv˜‚!åG 3¯˜±Å犒 3ÍôiS’SÑ’ '™¨"LI0B•¯©m‚›‘�Í´2‡O�#­˜Ã ŠÒÄ+/-•ÜQÇ!‡œ"LiÊTüÔÅŠò Ò4Î4“N3ÜÌÒ„ ?ü‚Ÿ„ub1)ç4P.‡ÔQ‡™ÀŒÉmÇ1cN8'zàÎ�aÛË!„`CV@«´4`9­Œ7¹€RÇ€(ò‰"�T -ûQÿ¤1Hj‚â·! 3-3æôÂG#”$Òxö§œâÔ“7Â|â†jÔÑÈ(}è‘Ç!ŸÀ2ñ0qVV‡Á^¸5Ö`Ó�$ 0XÑKX˜S¾çH­ýƒ‰uÈ¡Æ?ƒŒˆÒ(­LŒµgIè:Hó6cM:ŒŒ€€ÐD/¶ ã©ï6ç�*bháF!d¸‘É(rÈч"~‰ÄG EgA•GJ23oÈ"ßó@B0‹` È|ç«ðþá ZÔ! bPƒë ŠO¬}èƒ*шJ´"=™ÉßBc�b #ªxV>€ÂÂ�†ù8ÅÃßN¹¨ÿÄ�…0hÐ |q¿?äÁ†8 •‘Œcì'ɨ�5”Ñ� ã!(@ø Ð lLE¾ë¡MÔ*1 a(Cü`Ñ@,1„øC% Q‰OÌ‹WÌâY´ã®wQãQÝèâœF <"ÿÆ1Šq íTHà?²hŒC Q EüÈZ4¢v°ýà‡?@ÑŸpÉŽSHgØò�Ñj…&ÊäœÌ!J£\%Õ“ªM‘D™ ¸Ê0ˆ’”´P„þ�Uîa(a$@‰èYD�ƒÔNÏšANjpƒÝà‚0J"Ý02š±¢àˆ„"É0Æ7?ÿ…+Há ]èˆCï«&û�GC "‘ Ä gB޳œÜ�'–P;À¹Àœ0l9O{†€žZŸþùÏ€Æñ`¨D.Þ8P„Ä?ô·MJHÑ$-N3¤AÎftƒ¦°�:PØÎha1œá¡f˜”##êÔ3Œ1±\ˆ!I€Ú…‘  ÆæjЇØ�¡9…â?"áJ`BS!ÖS´S"j` §" �2åAZÑà”3æy¯7Q$[…$r@( ¡Ÿÿpi´  X´p@å?ä€? o¥ë'|Ê·ýD…¯Óà†l¹! Aÿ|€BjŒhü†ª�Õˆµ « cLâ B@Â.{…æ– wèÅ.Úà›Ö�´}°È �CÔ•v¥Å?"¤IœÀV¶æF° b˜…D û'[7#02Æ1žá�Tâ ÈUîúy…(”U mÆ)Ô@S‹`w#­+&0qŠèU¨¼7ÑÎb¸ .4` ð¨ há ¦P¤gõí•Gžñ le 9B–kÙ(ü ›m9\¿7¬AÿÐò€¼�ZŽøxÁ;Ñ oM$^L!VÀ€ ,)³èÌ]KOª.6$)…`,ÐxQ(°@¹ˆn¸Bÿ g-�ÿ1ä=XD®Üµ%V[a4õÃaÒòÉ$À�äö ÀÆÚÀ–bÐÓ…¹ê?„a�YpÁBÈ�þ¡Ü@¡þ‡ÒÀ ttB n8CýèL:üãÚÍH’)!<»Jq¼ŒÉ@`'�tðb ø@�N�ïdŒf›²%®½xª¹`Ãr�ƒ T»ÓE(Â�£0êO CpvÃ�Yíê<YÖJV2…[�˜'P �á,d¸� •6N†"±ü¨Dq‘EàV‡ð <ð�t0cNÿÃÆIÃ(Ìî3œa qõ?DhZ�Ù³¶ë„'ŠìíÚ½ÿ0P €@½p ¿Qôo€ï$8œê†28aƒðàç=ðÁþñŸËÚ˜ UHC/ºñˆXÜÁ«Æé¹ÿñPºªû> )pIH‹ØrZ°ë†4Q»ðÀ Çž9Ík>�òbDÿ“F&bÜ=è�EtÐi(ü£RøÇÂñ�;ˆ� ÁxýèðÖ=t\§Ü¹]i =¼â‡ëÔû:¯½Š @ŒxB/Òq¢°(å.lo{ŒŽc o|b ¨ÁÝñ®÷ Ý"~·î`ŽYÌÎqÆøhéœ]XÂãˆÈ­)|›ñb‘#Ôh†æ·wŠ à{˜Â)°!¹°xõÿ¦ÿŒ–²>'€@,¸û?ôk ~—‚'СŠ;d� qŽ3�çœÝŽÌú§ÐZÊð Ï·Ô€ ·„-´0µRÔ J¡åá/ZCI­ f ðñ¡~ÿÀ±pHài'˜¢ÐŸ�`0Jÿ°'|oõÇ´ 2 ÑNq€|Õ ¼0+Wp4Í€ Iqz¸€–L�"ÝÐ i0 �è—~ÿ`p$¸pA œv‚Hà ñ` iGdPN'ƒ£Õx7˜‘ð À?{��Ї ¼– � žg„TpN3÷}¨hÇq8(G6!�çÇÿp5ÿP#ø›ÆpËÅi[ ñÀ iJjhqW?v`g~àqT÷ŸpWY3 ÔàƒqHÖ ¼P aÔKÑez�È œ�aÁ(:$ ܰ !`…¢apy÷:`fÿ‘IP ñ0 Ìe0�eà‰p v`7XuŸ€B¨3 É@=Á] f !00´€Cj7�¹¸5YSEbÁya €Xø/°y§= :0X°\èPT÷G�Óø6•vyˆ °�5ÿÐu!(s �@c0S`2“ž¢lŒö?)Öp ¦ç ¯`'pÃh7ÿp�wëg{`ˆDÐæ@n°‰E4P‘]¬¤S�ðÑ㪈€v˜os"°à w0T`s SÍ�l`) „È’ÉÀ;¼`4i“*@Œ8ù8ГìwInÐäÐià^`Óè—5åV6ÈJ#$1;ø @¸IT‰-" ’�ÎR 2Ó Å ’Zc3���NÁ€ 0p&`(°9—q©p> ÉeŒà ÜÀRàZGÎôy�©¤Šð�ðS®ŽÚQ€Ç] �Ð u ™J¹v™ ³‘ ¶Ò Ì�Œ3¢iÿ@š�~:9‚NÿàNàAà[p³ØxU Pj˜jÈVrÀ›àXã|Ç@-Ä9^ÈP ÂÐ ­P È) Ûw+S…�Kaa[ÐðÜ9šÿPšÿ ýhNðNð?Ði ¼€ý³@HWfõRÿ �‰ „•p‘oWEYÔŸ1 Í Ä  �@ ƒ0Æ0- j8aCv0…&¡š!ÿp*@RJ/ðV ³Ð òÐè)Œ�RP*ªdSp°D¾I‡Î·ŠXÄŠãEN¹ð §`'§ È4âX…Ò`Ÿ °Àð`¨Ü™üø6ÿ6`hÀ Á`é�Á` ‚°B@Ix¢¶¢¤qzp� 1ÁQEûɦQU]Ò ¶p Íà by {Úæ0 Kð=‚Zhˆz¨&€…/!`Œ0 è�Øð ‰pVÐO°œš\pUЗ¶©AeP]nŸ0RÇ€E\‡£Tù6È� q: ¤Ñ [5-Sé{z"Ñ2 1€Ã&`¨ˆÊkið ²s©\à¡FðNcBÀŒP 6Æ—aÀ¶I]RÓ�Ò ѰImê¦ÒI;Š íšLq«�E`-Á`íµ ð…ÊJÊ0ÿà¤@>½@ T@4?ðåcN�\H�ÿà©}Éÿ@±d u ?¹Ð’ϰ±7j®+)!VÄ�L�,éµÀ 0€Ð 0“‚P Á° “à/Ê8P8�ÿA€Éåi'j|©^ÀmÐw S°ÓƒÛ¦"QYÛ [{Qè Ì0°Àf+@@l@ »P l`00øUš~xûš¶·�€÷p|I±l€`bpªÅ` k£�;é!äh› ` ð€X@ Ò+7pI š4ùè÷4ðˆ7tEÿ7`PÙz´ÙZà22ó»VËä €¼ °¹€lP¤ÀG°+€½@“Ä¥4°…Ƹp•8`�­†ÛuÐ�îJ€á±ÝÁÜ` &€G€lp�`‚:¨ˆj'€…èG9ùº GtC¸R Ë\°œQËð2®b<,*pû›@ ¨`Â(̤+Ü– x-—’(�DçiF[Ã�—‡ Tô ÓânÝ¡ILá �p°`�°@¶pÿ€ÁÅ)@¬!Øqi{ÿ`´\qä -y DÿJÁÈaÆÓ`¹…pð¹`pÉPÇÿ`Ç„úú¤,¬½.\Å$¨w3ÆpEk­ÿ °Ð»31-íËÚ-æX Àÿð``džz¨ ÌÇU|·q�{Ëp ûT0˜€ÈúÕ¦+Ô³Ì Ü€³`¬ËÀËðËÁ¼¯žl+¬¨ ˜A‚i}+Tà_X$ÁûÃã˜2Üà ê5��Â,Ì‘ýh~Ìë"ѱj2ݛ뺾ëmj Ó¼Ý!ù ÿ,jcÿ“ H° Á�ÿþ%KȰ¡Ã‡Ÿ=c¦*Mˆ@öì˜Ç� CŠé"Ã(S&\h²eK‰ÁFÝùñ£À�JÅ:’ÜɳdË”@ ®tIô¡ÄS ÍI3”0cÏŠJ�ª0¨Õ¡T‰>‹Š¤:w>åÊÅL˜³¬hZ]+0mËcÆrµ%©U.iÆàºÝ[•mP¾�6¶3i}Îê÷êb†9…5{f-/ÈÇŒ·=ˆ9¡b‡Ÿ;»Ô¼Y¨èÊRÿ³v:-iƒ­ªŽ�ö5AÚ SëÖ�{´íÞ¹wóÑ6ËÞ‡whü8íä³—74.µñCèÊŠ¶Ý\»ßëнŸÿ6ˆÌay�°™S'ztÈñ¦Í£GX|½o“"΅ߞmZôºy£2–·ØoüÝæZ)ã�1 #à0à £Œ�€Ù§Ö~™%£L.£d2 -Ãd§_þ”âT }JuRI+ÿˆZv’Æžf™é&L&0&2ˆ"3æâ�B�éè�Ty˜Ú0§Àè'Ÿ(I%§ä‚ŠÖ-ÉäT³�ˆmüãÇ(ÿБÇ!£D¨Œ1¹¹¥¤IJUb�­¸Q‡jÔÑÈ(zèÑÈ!�dygœµ}çå—DHKYÀQÈ?ndò�rôñG#†|BKjÆPCÍ�@í¸bK:( i€¡† ¡ÿ¹F¦~üÓH#ŸÀ"ÌBpb–žŠ¢:Ì?ÂÂÅ?a”áFBª|òOŠÔºi%Ž´"Œ€Ûe'ªœô%ØQÃ4£Ì0•ÌQ…Y„A†€üƒ Ð>ëÇÿŠ]ã*Óâ?Ûלs ù$á?§pÁEéþC€ÐÒ ràñìÐÛH$Y>™Lh±ý»ÝC –èM+sœCdüsH.züÇ?vü³Ńü (˜ä2ì0çèq#i¢*Z[ECj€qȪn¼,ñÌyЋˆ#†`Bâ?þsLg?Ç×Ð0Å4¤ -wqì?]0T•äâÆpÀ�G}äñÏ ƒ É? PÿÒJ‰ÊèEj×à†}Œ0ʬšÃ?PÒUœÒ »qãa‡Ä bˆ!6;ò‰*ORˆã^]üÓ?ÆdW T �£ýZðKÊr\ŠiBàm"Sâ·0ˆrIøh¬¥– > �ã°£]FZÃKÊ aqóæ�wB”P¢Š›¢“^ºKÅ$óL7ÊœBÅB8ÏбƒÑF0§Pêrî q/õ÷ŽøGøNA" ‹[Ç›K$b o¨Â 9ÈA†€(ü£ ÑBÈኔ½á!µº›»Á�ðY 5X ÜÖšt>õ$äÆð,æ`…ꀂPB¢p…„p!æ¨D™ÿΰ†´,„5¡)!¼Sü-5[!‹˜ �DÖF\ ÁÅ!�‚E(ýŽ–E¤Ã 9ÿrׇ=Ô*‰î `B0A LØ5‡šâÏ̃#cÃÂ(Ä„�ø ~8Äà?ª�…4d"’HcB3Ý ŽŽ`…gG-é«C{ÈyPc NÔ �†üG‚��!ü#vZøÇ(ÌÉ3üc’ ±÷�è®Î �!�FмJQ£úÄ\Àƒf¦’•ÿpÝ+«Ë^Hãi$â¥`f?„0!À›Ú/)ñL8qÕ)]Ð<¤k¨Â 1À�<{Ѓø@_LȤ ÿ…*Ì�Á¸Ò˜�"ÊA—–„# r sÐT-<‰@ô@¸@ž8èìyh2ŽŸÿ�7f1‡�2d’r¨¤7/ NG�sŽ˜Å§p”uþ*¢òF/¸Ðà8`ÈFï9Á ZP ’hšNV†Ñ 0û&DêxŠ—ö¥¦6mÖDЄ€,hÈF{@TµíxE«Ê@†¦Þ2{º”*CäÈDy&:ͪé â�`$")HCnð�fj”!Mˆ+ÒÁ‰4´{·\Ãè@Y†$Ñ -'±òPõèõ8ÉF7„! „)PCjPØ�U«üG“ÀYÿÄ£ CBÜš¦”Ò�^‘ã?rá -yv�7â�4ã NØ`!8�CjT†øà �’À‹$âéâíSé�Ò< ¸à$¡§pT¡³ó[Ê13øƒ€'¬jBØ„Ôó°MˆÙª‘FpA &-CS‹XD5ÍL„sý[B(T )°˜(\ÉÖæ; +l¿ù,ÿ1OÿXÿÀÂÚ@r´! 'Ó­Sÿ±`Êæ�b{È Oq(œ.Ê>£c�hƒ±…Œ'Èï~ûÛß�b÷u¥ÚŽ6 a�±S%kã<Ø-s£Eœ¶æÞã~ë$'a†5¤qŒÀÿ'0 þ¡Úì·º Iå?¨0‰x`Ã`ZðÂnÒ`:<Ø5£ÄÕ<ãŒQ­¹qÈá¸Á�N„À è@œçEpXX<@VÆH°OQP4ÿ h  ´` ¡5ÒÑÒÐ ¢0„€,p¤`l’¸}”hwJö, ‰ �gqgÃ�`|~ØŠ ñŠ“ ‹À7pG` ЋÇ`wrv* Œ?õ-@]%iÖ2:çæŒ‘n¯à7À��/‰ÿp°qàXlÁÈ7@çØZõT„ÑÔóRèâ�! ÜÀ Øô �ÿ0Y€"é�«o‚%ŒaÕÆx](Ƙ\ ¹Ð áŽÙ¼ÿæ ›°ÿ0ƒÿð؇$¹z)bÿVçˆÔÅ:`öi°4�Ó6y“ �…Ü  Ð`è9wG‰�”ûVõ†Ž8à `D@•DPZ²1Ó¡•-a*=ÙÐ�tg” !�A�*Éoù-Ù~Ç"­à Y£—E'Ñð³ð Бý˜@wð–›–ZaÕêGD0£0.ÇÐŒ”É—™æ0 T�0Cy HwiIl%IgûUŒþ— AD� <£5R›&¡ Ô0 á ØÀ Ñ™Ÿé�Fù­Wl !r«Õ…ÿeœÇ¹4ÂDnÎéÒ™ÜÐW¢ð— € A˜Á©d Á–¸Q¬D�@\}‘žRÁÓ@iæ ~ 8ŸïÆîö� ‘’ ±Q9`uPv› '˜³@r @}¦÷ߨtjp™T0 ÆÐYJ•6ÿÐ Tðð šîöqAX-àÇéÊÀ°¹¢&1kÜÐ l€ @£ Ñ ª,°_p裆EAº1›G¤t�pR‘œÀ‚f9ç¤k¹€ ñ�@<8òIZ:Eë‰nÒ` ð…îFwÂ&]ÃIgÄØb¦55¤m*Q ÁvÂÀ Ó0 ?€‘w£ ÿ!b/�‰j³à —ùš€¨‚ §k–0J �z%y/ ”\  XhÝ‚©iÑ ÒI6à¤Òõ¨ÿ0Vð ÞÀ 󡪋±vÜÐ Á0 ‹Z’� 1À ÌÐ ž‘¥¼ŠÍÐ ™ !€ w­ ± Á lלÏê½Ò Á¬h²ÿ ‘iw0 Xø­�±vÿ`¨ Ñ s�®+h  ÿÐ |˜ªîŠðÊk‰…¹ !àfið Ò°°Ó –ú¯‹�…Ó0*Ì*�’ †A<» ±€ñyÿ°v[Á¬ÈP¨ž¡ÎʱSá±ü’ÖÐ Ô /p±5'‹²iA ¬Á/ÔÐ-3K³YA‚ á =dz­á³Æ%´§Q v“!ù ÿ,Lcÿÿ H° Á�É*\xìØÁ‡#Jœxp¡Åd )jÜÈÑàÅ‹CŠŒøäÈ“'K.DÉR¤J…-cn|™P¦M‰5+&»Éó!Ì�=ƒ’*´¨N“F…–LZt)Ó NŸòŒZ0§@«Rq~ôIôÖ¬1¿‚�:¬ØX¨W� ³x–¥2ooÂl{òX.Z´†)KfÌkWº“µU Ô©\Ê”!¬1c2X•þI:tè­Äÿö2¦¸SY®Èu UŠ ŠP‡›!Í• �@=ŸáiTI•^Œ©+(ì 7uÔLú7hÒŸ•Z ›¦0LmÜþÏÏ?E‡þÔÎ%uîœÞTÕÿÑ"½Eªú¸n$°Òá¾Ñ¦åþç쟷Vk¸�QÃÿ'UzÈñOÿ4òG#˜Ð’–wm%3Œ3ÉÐ ÿ„ñ…d¢Šxä{}ËnÆ0(•UÈ$“Ë!ÿTaá…j¸1Ê(pà¡HuDZWÉ'Êý£jÔPÃT2ŠÕ$L)b¤Qaþ#ã(nà!G~üq @ˆðvUBA>µÓnÅBEÿx!Pÿ´Q,™üSH‡ 2È?”Dr˜bÿdÔÔ1 ¡6 (þs…f¢IFþ¹Ááu{tÜ?m~bÙ^™xn|©Š’WtZæ@`@’‹"nò�SV7"™d™ A̵ÿ4 jÆ(C‹VD�…�zFj —Ë$¥þÓa‡Ö”I$™$8Ìm6é™g4ÿãM.uAHz…@ÀrñI0‰¸iì?vØ‘,qYFò�#"¤˜¥!ééP4Âü#Ì!V‘DA]D²cª© ‚Èœ‘bÒ bó¶$mžÊSÉÿ ñ·‚F…@mpÑK/Áǹ­;§#Ž„¨ w>jVjÑø�õ@¢ “™¤ã AªËA�==Š@ îF¹jeyÍp-ôÀÁó@\k‘Æ+æ@"†tk$ Ò±n%ÿŒrJ+´ “gHzuJ 1ü³ý?=øÇ‚0ÐyŒBi˜7$!£„}«‚È(W?Üt¤Þ0Å@À=þÃÌX¡ ÑUaÁÀ#´P†3¨� x`D(á¸S`"Þ¸ŸF€rŸ„ `ÿ}À3Ð]AtWx9zq‡�¡….„áÒò‰ÒBEŠÛäPƒ™LcÒèÞFð‚�à ˆ<ð]�:ÐI¢ª¸ƒŒ†¦œUr°�Ðæ>:UQ9zÁSž¶ÈEJƒÞ`F ð�2þãÿ8ãÿÑ·$AtR�Âñž÷4µÐŽÿH_º×¾wùQ³ó‘ý99˜PŠÿ`#@‚œ@ �ô}§ C�Â?Ja�W „Žqa«ãë4­uð:Lfd¦E>%Ä™Á—5¼! F†` ,ø%é»èàH®� {pBIN$Èî(�=:K�rVbfEÿ”-^ÓÖØIæ8€(0H :øA�hlc[àE N ·ß€40‚Ľrj Eø–§À�H\F©ÖÇañEf04ð(ÀP÷ª¶jÂçgát5PtÑKÔ-E�IÿÀW�uÐ Ý T^ÑlÈ  °`xpsø°ZÂ7/ðv4I8PqõçPl$$Ä\pª°Ï`3– t%à€PXxû•g&–b<ˆK‘4±Õ7½”NI iÀ§  ÝÐñ¥‚qh“PИ…Z˜yÆZ­–bed�+†]å?!dN4g˜ƒ —ÿC-Ç@xá Å€Hæð @0Àx_÷pƒ¨Õ‡Â—Ä7�TˆÔK¾”1»"�P Þ` �qA }e»`uh~H9XpÛl‡(�}¶y�4¤Š”ŽU&·³ˆËÅ Æ`°`�ÿpmÿPp|¬åj¥¸y�$„Ë×AàI w`rkaA,qWÒÀ H ‚°PAƒÛe®ÆZçh|DCA�I°†™áµÔP|…dÂ0‡€`ð‘ÙÖ~ÈZì'„‘Ô½s>à]Ó11$Ó` ÷øÜ`¯ÿÀ€…ÿ@ƒQfýu†U7Pt*é=CP v“Ê` ÓÓñ%“£ÕWé  ˆàa'ܦZ¬6|×…ŒáDˆÿ�9`‡� 'è”’ˆS¹\,g‹`¶@Ö&�Ð%]Ye’n‡Kiä9P´Ð –“o“Ab U™C�À ÿ]˜÷'`E Nï'˜?�9„rƒ×A²˜Ü@—þ€Ü†{¹ZÃNèøNài  Þ` ˜au‰y3É ûÖ Ýp 1°Ð]üu'�Pí÷®�6 Þà Ïàz®gúÆ Ø„d¯à¤†œ˜ÿ'’ÃG|~Ö~ð÷œ`-6ƒ�£¢õY¥\wcgVÕªfD)–�ô6à�€ ±(îÙ›1Ÿ¥I“Ìp“½ #søùÌIŠ®h60 Áà PE Êx…MÌ0 Ý@.!pŸ"©Ÿ†åŸ#€B¹™x% òjÿ` 1pœ·$¡)ð/[  õ% 6ã¢ÔðEÒP“ÞÐ ¯`P0p�1M øP)'¤Dúi5)Fhð\0@Š!0œ€ Ü VúzŒ$Eú£VÙ �Pð !`Á0“E ï¹jz�±W_Þ`äb!s° ÂP¤Ÿ•§i:¤Æ:£ÿ` Ý` Ö2œ PÎШA’�¹A•A Æ ¢Î¢ŒùE™ª¨ó+Qáž§z+Aªºª¬Ê!ù ÿ,jeÿ• H° ²*\Ȱ¡Ã‡#J”h°âÀ‰3jܘѠ±��!xL$Ç“(S>ô(¬¥0c%IšTI³æF‚ÞºåjÕ*WËbƆ +i³¨Qˆ$‡Ûù«±\À %z´ªU�ĵ:Å•g3aBÃ"³JÖ(APhAµú•µYØacËÊUéM­HzåAÔªY.dn‘ �;·ðÆa´ Õ©CG‘£\Íš †+˜°áË1å¡"FÌG°þJFFz°ę®C… :˜ R&]štêÛ Aä(B„Êce•i×¶�»¸9ˆjEy6íÙÅ�·pªðëÁ‡ŒÎ�8Bª5[ ÿÐ�È4öá§¹#ôþÊ?8ûÞ ò‡è‘ŒÛvD‹Ì<Ú2¦xLën;è¦~Ayó½RQÄ?^BÀp‡\|¢àó�ú°‡òýà ‰ÄúÌ¥#æ1n(ò›ßãê·'‚ ŰàŠ�„H!!YPƒêP NÔ8Cˆ8„BtŽø„ׄ‚�Óa$ƒÓó`Ûÿ$’¥Èô¸C„�(  W¸BÔþ‘ˆnâ…� ÿ¼îƒ€`$þáLТtz:ÜD¨"’ lˆ)¢–l•+ä xüþÑ…º‘� �0G"òÅ0þŠxÿhE·ÔÃp­E'+Û¬8’¢$AâO@Èž(E„dá� `ß0/=üÔ ©!")A ä ER>|È1>Òª'½roÊI%¬ð„!H‚Q.ì"u`Ä$†=t±†ˆ€ "þA‰|‚•®œ”#Rc#´xJ.€’ J„4YJ†0¬�LôR9ÐABöø�+t! màB/ªAÿ†:œá 2üö°U.¤š˜`å�J—4ˆDåÖÐÊVœò’rÊïœÈÈÒG”1Š'¸@fCÂPÌ`ô¢ mX3»ØÀ= D•ŽpD5’Ð>«¡ùÈN¸Ò�<ˆuLº¡ $ÁHý‡„°ÉAŠUÚðYü�àSÁøR2"˜ æ?>ô,‡Œ IÑ( QŠJœB¹L€°½ Z½Hƒ œàƒø@© Eˆÿ®©"Vý‡Ää€3:t1!ÓTˆ#ò Lœ¢ÿK2¦ÁÙÎRƒÖ˜†1¬Ñ�nÐs�$Üš =ã§t…ˆF)džÿà 8Àþªƒ ü£„Q®Òpˆt€B TýÇÒEže¦gÝ*Fg= ZÑN#' Ð„ê Iœb�Ñx-qºNu£r6pþ±^…a“Iní¨�‰tˆ¹gP.ø–ûXƒ.¤²3Ås�Q iøÀœå7˜ÁŒ`˜b70Ê\ÔÅ[@´Ÿ‘4ì,oXC6xA ÚÛ¥"DžC€BpÿQ…9ÈÂ�àBÊ�ßýr‘éBN¡–±øÀN0-˜‘Elá=�0$ð¤Œn`8ƒn¤ª -PØ -ñzKü×Èó‰ýcñzÑ ITaÆù]Ãrc؇®&dÿ²3e¥e™œ ™ÁÁà Fƒ'˜á_mÌ©�†r6ÝÅ@ð°W·&)‘P„=Jaá`Æbö�3¨y lîjdÉÈJJ\óNR†4¸qà/8ªCƒŒáÈ †@„CèïD®‡³d3ù‚Fgy½<èþ„Þ"Á©–~D8rñ°äžÁÓ ^ƒfˆ/h"R¦”ˆMŽd`V3CçNG/°à�0àE3vM_§¨Ð@ˆ5 ì�`¤áŒþ nЂÔ!»=ŽoŸ)$AäÆ?Ü…�k§™±t ÃÎ1ˆi"1¥(h�¤Á”[äÿ009ò:0ÀåW� ½‰Ók YÃIk74]€ÄàgA–þ�Ýú@áxT1<ñ�^P� w+C§¢f9d|xGÈ#ÑÊn…EG¬^µ�Œ… 0(Àzáz¼‘»¹5Ô©àD¬` øG âè‚ÿ£Ëîro…)… ¸"£ BÀ©W¼ÆV^\:5ãUÂcÊ4"v£›Ø€6€�¹×yûx§œ ~ƒb Á N �ÿƒàçÁ²•ªð A B�E:^A-PU€ QóÕÿQЩ‰n}†h9ÏjwC?0Àè`…OœΠ9ÿÜw”Ñ<#çöÆ+lP€Ìžö|wôßuxäÀA€¶Ð‹t˜‚ ^P7È÷x 6P¥uƒP f„Ò÷Yp!vÒ`­`Àð ÁPnÔ ~ãµ#@s~Â& 6€#0ïW{Ž6p§[\†T¿„´Céph@Û³žfu¸q~ �2 2 ŸÅyc7 h€ Piç Æ Ó` ÔwòÃ)b2 ÌÐ Á°&Ø �* +˜¹Õ=àGG°X`sÀ é�TÐG�çx4ÖiÚ&À³3‡P Ì1n%’«Æ ä�€�v…Ð žÇ Ñÿ0…Tˆ"V¨#Y w`‚#Ð`&€)P{bx‘[·ÕG€†|euéÐs˜RGcRWuŒe;syŽ´sÌÀà@@´� f މ‘ø&…"}cç‹ðÈœˆ(ÀbŠ7P†N`S0| ¸`ñÀ ZPBZ ÿÐxQŽW‹rp€Pa#ÁH � ‚´&ˆ@§€ ÞpŒÉ¸Œ1!&Yè  0 z†bȤxFp’0 Ø¬È ­ðož„|±èxp`xÐz„ø� Ç@ á`ÀX!ð�°jÜ wÊwœÿe È€nÜ ~6Ðð ”ð&ð&ð‰)ð4Д1?0¢ éP•̰ ‰ÀI \ a ì¨ÿ@Jv }Hr#ˆ 1 p‰(! _ñ„5ys79^œÕ�Ò` ÞÀ 6ÿ` ”ðFɉŸÈ/°”/ð…0 pè ½ ’`Oð[PB @__©oðOrP'°�XÁ �ª‰€à Ì ÌÐ Qxsœ…èÆ æ0 ? šÿÀÿ `�E‰˜/°gF0®@ö n¦ ·õ¦˜bÏöQ�aàR'/×–+� HÛqMÿ‚¤@Ø€…³É ÔP›·)êiÁ€Ðÿ€0œÄɉ'à¤ÐæÀ ’€Sð?€GðG LNuBØ€ÛÝ ˜ ²ã)ª)½QÌ` ‘Ñ�:™Ò Þw�`!Âz0£#ÐŒ° · ‚à4àYÆ^>x�UBÿSá™t㎹R”€F 1žpˆ´ ¹À`"Ú $ GÿÀ ÜÐ Œð °° P#`iP Õ¯�?°6`FàDw[9ÀlBÀDIð§Q¡vã™`pu †@ 8²ãÿ ! X( Ôà Î0¢¹GYh›Ðœ €Ÿ @PF@ µ° ¤°0À0€ Ñÿ e·etCLI@iÖY^0¨YÐupÌ�*mWo{£pnÌð Ó@©–Ú�¸i ¯ ÿàr ªÀ,€µP …à0à#0ð)°w‘eZx^LHÐDR ¶£t�ñ�_7¬ÄÚSP ý ý2©•Š¥—*[’£6 ×J&pl@ ¤ p°F‰”zŠ·GFÀ±E·ÂôDõ¯`@@u€ .2Ðã�Ð ÖžŸÅ¬ë¬ñ Ãÿà ¿  ÛÈ‚pœ`0˜_xŸX{˱—l á zô®WPê¨b .ÂHÔ´€nÒ�—Ÿu©H³Ü$ÎÐ ­`4pGà¡w·C‰”Gy”ÿÐh,@ QëuŠC°I`vB]™sP L†š¸‰nÔU¶dË&T±sÛ/ÿP·G[´ÿzyK�«´*Ðh¯úwÒµy¤™ØC\�rg5ýÒ/ÓõY’k¶! ×W:›0iª¹pû¹Ÿ…ù t}K†°ê‚5ÇL[ÉDPŠ*m§–ð9]‘;¹Ïš³ÿ`;Ûæ;ÿpÄ+�Çˉ&tµ÷�Ë^êêeµ:Ó+§paL‚½Á½Ý+¹1 &Ÿsp�îÆP¦ë»¾€¼ï t{'¨ i'¶®¿—fð u Ðñ¿L„c+À²‹…Ó€ÿÀ‰`ê›· Á·®ZÁ ¡[�ßã qaÊ©§ ñYQÈ Ñ�ÒÀÂ@ž ùy¼xüðg{òWp8pO@ @ 9BÌaÌœ…nÝ@œ0P€Ÿ–l˜^¨¼ q€—5ð� ¦é¸à  % ØpDª0 kÉÇ{ÉŸÈw·É.à?ðKva±»Ïa»[�ª°г0”ÒLÍÿ°Å+8pNà?àd|½ÔPZÏ »–hžwë…†ÿi� ­‚/Pz° Ñ+�*Z ‚àr#ÐÑÁGéª[†4P6@£à Þ` ýÓÁÊÒð�Ð’Ðà…G©´!]º/PkV� Ý` /RÄX­ÄºË œ à0”FIÖµ·” àÞ× Æ`ƧüÖáÌÊÝÀ ²ð€š¸‰ïÛ·*`5z=9 &1Ø„­ÌðÜ0 [@zE©·'PlOÉÁÐ Ò —=Ì™½ ¦›¹ ‡˜‰\l; Êak =ÔÚE‘›ò¹ -7{� 0Oð ÿ�Û±M¼­Q FÕ¢À~|6`•À¥RØÜ½�nÉ^�nÞà 1°�60 ¸—*ÉÝ5!ZV“=I ’à†Ù…ΰ'¢¥ê­ìdœ•~ÌP¥ÍàˆÓà fœßÁ½¶‹¥Í ¬& ømàqÄRˆ RH„œ5I^W�!ù ÿ,€€ÿ“ (ð˜ÁcɆ ËÕjÛ0dÊþIœH±¢EŠÔ�QsÖ¬™¹\غ1Ú1ÁS@I“F°¥Ë—0/Êœ)æA„ÉŠ k6ì!2š@1jt†¬›3fÁzY)¢€€’r­„IµêÀ X/"ÛÊu«A�[©QS¶5+ÖŒÓ:6cÆl× x�(X:cÒÌêÝ›µkׯɶÛY "_™›Mã¶¶›¨à†°Ò+]·gykÞüÏ/WÀ[Áþä\Q,[fݺu²Q†I3½ºM›f�éÛf={Åú*n‰ÎŽ23—îÕŽ^ÄmÕ�­4kÓ~KŸió _Ò7�ý£f�™·tŸžÄÿÝ‘ F)o术œ={ºûÕ ^ç|ðŸµíÖº¥S5€€È)’7̬d {ѽ'�U/iv“}ÊX³7»Ñ@\Øp3éHà �®¤ { ºäàƒÊt�7Á<@r&qÑ‹9rbˆ#NW¢‰|ÝôL4Ï(ãM7…,@ B0ÓÈMˆ8j5šDåÔŽ-Vå1ÏX“ z• àB+æt#Í“P(SYUi%uXÔã?Æc�1ÁxÓ‹ ÐA\¯¤óL�ÑP³Øzì͉[�vî¥]žÖÓM/O ð¢àÁ�7JM4³1Úž£¤A)PÙéé¡7³¤ÿQÀbpF0Ý<É ‚Óˆx‘@Tj÷�œ¨þªj2Yeg 3]srq ®ØØ+‚¾Zì°Ú%Cl±»­Yy(Í)!ì¤AKj´‰EM«oN nPâ"«—AlñIM4-Þ°5�¼ÓÐ+å½Yå»×lÌ´" $sŒ1†h ÃŒ1yRÙp– ×ß±zÍL%�@"Iw€â 6¹tóíÇ«†®¸O3 (¢L2q+!# wÊ]4Mµ*ì¸6ç«oV³}âŠ)›@ÂK0NÖV´5F#í-B\wã-Ó6�Œ3¹Ìô¢Ê'¢€âÜl÷m}ôEÃ83l1ÿD˜Œ�E?ÿ$ÑÓ!;­×`½ì’‰*½4ÃhÜFÏ]QÝá­Œ0´´’KÑÈè 8Âï%ÌNCCwpÂy‘EuSÌ1Æ$“Ë(•$’I+œ® ²d£ÚùàÆ°§({9N·3ª”Ë)�Ü‘È!•œR;E¹;ºûfÚͱÞD¼‘‹JTA ü *2ñXÒ}(a%þq ÚÎÿ³à^�uc(ã§Àð�,Häƒ�È…Ü€EôÁ¸Dø"qB(š-p¢e2¬Q !µbi�ˆ$B7´!¹H„ôPËìá–à“(hw»<Õ\Áæ1”A 2pA U¨‚+ÿA2´á„€8à?a=úáÿˆ„>?¡ÿŠËq…÷ ƒ¼•'J‚\¨Â?Ô†0ü£ mPÅ,þá†IüÕôƒD‘‰Hü˜x^ëX¨>«œñkqÂÓäñ„"ü é‚+ÕQµÕáŠrøG=ó¨Ë B"Ž Ä•AÄS + š3Û“´‰ÃÞH(¨@…"@ W¨Hî°½›b">ÔãDaˆOH€ŒÈ0Ò4“â†)þ‘„‰@!«YèÂ?Øpkd‚9ý‡ìPOŠôô§ŸpÄ(„HÔÛµÕŒLì’7Z‘†'  ɪ^Ù©…Dpƒ7½¢Dì°E±þ£§ù%>A;"œ$»ÒÓŽ cÿ<ViÈ�‚0$ áY�‚DÔðQpâpíhq©ÑŸVDµ˜h-QIª `© _³}†0hx+!:èí`ªÙ,´áŸ G<¿::�—>u.P?� ‰X."Þ*éue«�gh×K‰pA‚@`̾ôQ¸‚LÃÀY0Cžo ö Ñ±•”øÇ(VÛ ’²� gˆõÅ?k<ƒ?Ðmþ[5 ÂýdŽ6Ôá ¹åiwüG8↮YÁ£2Õ�TÉʨ¬1¤LÔÀ>ðÁþ¡Þ" EÈj …;`#`hæDä@‡XR"~�¯#äkVNª‚ÿC$’”QÝvOˆxàô`Å¿ýG²¼e.´�½Ð%’ÓÁ¢ù"ÎŰYG!‘ËY€sn‰ '2±‰E\ˆÁ?zðHä¼ý‡�ì…4Ôa²Ø2Ž×Ðèè¡Ì2ù±D(1 L`¢“GìŠû2M�MK¤ÓÜ1h \pøv" ÖB8aWD! 8f´­ÿ�ëGo´"õýu+¼1ac�ØK�séŽM PM"ÿ¨�DpЃø@ù-¤ ……šáëEÊð�3”!Â9ÕCNñ)ÔR$Ãþ"¹=3lt³ð¨EcOj*aƒ´à89©}ð’ç; ýÿ®vaŽN <Û!ðéð‰PâÇÆ-žGñswŽG)}²¤ÑœLü/˜7öìg«:Õ‰Âx±ŽN A —ÈÖ ‘2çá58¯ ŸžÓ €@/âÓ¬q f( OÁ ’þñ�ó€ÔNçíx�+…9TƒŒp©C³Íunÿ#{»!äÛã òóyÿ(Ì|ξ߿�ÌcÈÚ^¼ñŠü#*H nÐy—ÚÞ:HýÆ{W)<¢Z�€‚C‰«†Y Öëû 1Gd⣨Q�‘ ÍL/í±×ö$ oðâ A R0‘�S$Êøþǰp×$HÂÎÂÂÿì'r†­ öðÿȽO× DüQ"=9•ñc[• ¤;¨é…¬Fêÿƒÿ@zò&oöv8ÛWIÐ ÿ WÀa@\a{eÆ@ˆvd ¿gÿ0 x�/„gSõ1M2 ÎR+ÿ1z¥Wj¡¸zF¥ð±"lð5�ÿÀu¸öèS†   Dð·Æ ÙQqèö7T" MB ›ð#Ð&p¡o¥¶g£FƒÚW\@²ÐuZàjð†Wpp�S}°y°Eƒ€•àEEµò¢4PHlR8t" !€#ðÀ…*ðÿ!ow7S6WÀiÀ ýð ÿÀ^ðp8�gðƒ… ”~ƒÐ•|ð�Cà Üò„>…{¶±&¦ ˆÿðÿ€*Јq7r£öˆX�R`Vp ý� [ð�è‰oX{ÚæC}ð%t_tlÓà Ž€‹W4Ô°y³`àa&€ÿЈ,0z¤7=0eQ6`fðjý Ñ(�Ã%�Ù&x0BÙx‘gÞ0 ³Ž‚ØeqØBt½°Pð@(�óè…ÂHo=àNðO0•À æÐíRÀá†Ô‡‚E�xpzÿP ­ §$/òâ„)[·¥Ò Áð€€ñ&0ðø‹ ‰8p4`B�³` é`æP ²“Y%cQ7�¥‡Ð´á“b¡4—&”X¡|¯r\!Ð옑»ø”)•/pFð6`VÐ2Ì€é~¯0 ‚ÀäõË䃞XÙÖC‰•  Â`yÛ¡òr•7oI DÇ  `ðÀà”˜ƒù0ð4°œ0#–Ñ ¦Ài`O°[PW1)?ø†Wôk€à<xá“L$—㈽ò!Ý` ‡ÈŽ ±ÿùN鎡×0à’ æ°Â [à5àN‡˜SáJËùåç�€VÓ ,öòØ™�AÑ$Ò`¼àyë8›²IžîøX` Ø€ä �€MàF`÷¸½uY/%1�p¤üùAù“7#…,Š”!+1˜ P >а0¤@`›P á ¯ÀF@4ðÌVr&G¢á�ØPqTuP £- 2£°HbA ,‚@+€?* F »Õ` hð@p˜5`5`z&ç-fÂe¥ ÕPnPz  AHÔ•*uÿišÇ`£Ü€ i� ÀðÀ–Š‘G@ »° ¤`ð.ø0ØTÙ¦&eVölRp å®äTTÑù™®U1Jš�*§Ù|›°ÿ€ ©@€‚P µ 70¤ü&�òHz¨ºt«Jr˜…YCðªéd¥ZmÐA!åZŽõÍ »Ê¨;‚4Ê`ÜÀ Na¬ (p…@ lpЂ-h¼�¿H�ÿð¡5°g¤Ve‘`Uð€Z°UbТÃD'…Ô®tB éZ ðÇú7pl°¯ÿ`0ù”ïxk•W™§©jŒÚ—oEÿÀo°Ê\ sp¹À“Ûbn["4ñ–Íà ;`Gà0�`¤A:N •*ðóx5rvW€qYûöª›È2u0nƒ”7ºÓ«1ô¨ÍÀ ­€À `0°ЗÀLiÙ‹¡µ,@¤G•§GezwY7+Ràj°ð�£¶¡D´4q4 þ! `0 ë À”~Ë,Û‚(@­I€Ä( [³#Š/)wp Þ@T‰ JÕŶ±5@ П;››€ ˜.ûZû4൦goÚWe#ú’D –§9„d%­ÿY@á Ó Ü`é(Ð ÀŸp£kµ!­©+[ †®KrU†½ÊH‡°]Ú¡»s¾IÊ1Ý`)¼ ð¾¿LÙ·íø)�ºò8z ‰x‡o÷†R uÐ Q5Àß»¶¤~Ãó2i `€¼AµäYª0Б/8KGGe-Fw°“b”Âty›q0¦�Ì0 #�;š² 0žWû”ñ8Â8Œ=<Ræ9�£  ­£TÑS6œ¯b °Ž<¿ò;›å‰ÅþŒ!¹tª*¥O°½k…h<'Êg.ä° .’`ÿp‹Œ£Ê²NI­ø»ÅTIo<e>@œð™c³¨�ŒòÒÜ�Á€š¢¦ °IÇ …' ÉŽ¨ÁTÉg>ð9 1ÓHôÉ#"ã!Þ Œ€0µP¯É‹®œÅÿç…¬»t>ÀOཀ;vsƼ<ÜÁÜ0   ”Kɰ‘ÐË,ЈÂXµìw b؜ͿÁ‚ªYÀ›å¼‹è\^H�|æi  ¶QFlÏÒq—ÝD—Ž´²#À”£*ŒŒ¦zJ™À b³7#æÐ9ršÿ &½ÐMÎ�KÐÕj.ÿ Þq>ãTÒ&='bq»â,-›A}sפ?À1CÆ;m3ba+~ŒP£[ÎZø\¨ºGͱÁ?sÙÔÅÒÓÏðäÆqB=ä°œ1!p±¡ c]nëZ,Ɔ*¾" �7µçLÎ[˜s7hð ÞÀ þEk3wÍ0ÜŒ¾T#€Öç|H?à6²ÑØà²Döì!ÿÀÀi0¤‹ø‚íÖœ€ +a ù•Íž�ÆòGÓÀ K} $ !ñ D³Ëö¼Ø!ÓÅ'!Í— 6€ˆˆ˜BC…µš Ü óÔ‘&¼0MðsÐ OR ÷Ööÿ,ÝA<Ã"%4òÕÞÝÔÅÐ ÔÐ ÞðÞÒÀÙé�ÍʇÖÒ„è=ß&Ý8èÈò­ß”ûßà›ßžÞ^àö|àÎË ¾àþMàá>á^á~ážáu½áŽòDͰ;9^,§3 <±¹ ~S⨢VÈ ÄÐ ¿0â>áâVÒ8÷Aã§`9‹Ä8þÇPL"$ÏÐ ¥À §pÈ€=Ð䤡:)R44T �À ­ P.jõÞ1 m0Ùí-¾å¸a4ï­ §°60 à=Ñä'læšAåE3 ?ÐTð>ÑärîKt~j4Yw?p¶ÞZÀ�Õá�žÊ0è³ð �Ð [H�“é]ÓèYEÆPЀË[ÑXš~꜎z" • b�å‰~ê´>ç©^P5 KÀ.9@ –¾³^ë�!ù ÿ,€€ÿÿ (0™Ádÿ*DH°¡Ã‡J”x¬¢Å‹3j¼±£Ç� †T²äÄ“7ª\‰±¤Ë†(N| 2fLš8s~¼™p¦N‡6Qþ:”§ÈžD�õ™´©I¡H�*]ºPªUœ<V¥šõª×©LuLØ“kدhÑ’4 5­[µkÙJ|K׫ܠ�F¬Ë·£È»'ó2ÜÛ·0A„€^Lq⹌# ~ ÙãQ½’ÝR>ûPä1Ì™énºôáѦSÃ4[PµëÎ\_ˆ-·æàÙ|ÛþlðØ@Ò¸“.- \©2e½E ~uxå�Çrå&p2æp…޽ý¯âCaª@5ÿúDkö´T!z'hLX«uêl5L9÷óÍ—w\ÿ¯Ø°aª$ß?‡4r u@á'•c y÷Ÿ@´TrÇC¤à‚/÷_2ÊÐbˆ@ntÈ?}Œ’ËqÆ\hÕ}!÷�y¹RGˆ¤H%˜äò�2Ѩè‹iø�0ŸˆA�£8ò�ÿ4"yæq‡Ìu>¾TLǽˆÉ?\üã�!�"ƒ<Ù ‚ƒMYåWc�B˜ÿ¼!“ÿø1P#‘¼‡œ‹©¹¦SÃ(cP+þFg”ñ� dgC|öIåŸ8U¤�yÞÐR£@F’Hˈzô1Ðÿò!%´¼¸ãq‚I©z¾%ÿ4 BÂ@òOÕQ&£õaç¤TÞŽ�¶úª•Êø¦ŒyÂ4BD]j‘Å?Šþ“ -‰„Ç@{üSæ@”œ9P ÇZ)P1Æ Š@]TbŒËœ½Š:�!‘ ÔŠŽË’[îd Ö7 BH!ÅCwÌâ$ÙKP$‘8r¦yÿ™÷/XżX,\8T„ëI! 7u´±ýœr˜œ÷â;p%ífdq òT@ß)‰<YÖ”F:©ÙðHÝ`F¡þqœDA �ÀF8Q�dT£ÉCL%%ÑMÔAN H::ÕXà 7¸‘ˆü'HÁ?TÐD cû‡$ÌŒ;@Á jè¥C˜ôOo•J ˆ€˜¸^dŒg<ãBÉ(†4f¹„€¥%‘ÞÇ…$䳉óÂ?Î�þ£„r‹„Ôþ6 cLC}¯ñÓ3z4×WØ xmiCn€C‚Ô¯!®ˆÇ­¤ Ø2˜v k0# ÷PB�ât'úÇ[bµÙÿPé“u§,êø�´T³ù¬@jJ„ÄšÉ(j‰8¹Òx‚û\…ƒLƒÝÆ0‚|'G8\Ò@büãTØd{Z�˜ÑM£Üa+AÙVIPØíjoGÐ� DªSÈ Òƒ ápH°®a­ôj�“6mˆËâ[¦Jè8³=�B¦q4f0LШ@š¹Rƒ'ü@Á’XW? ñ¬+p²—íuï¢ä ‡CÈL“@¨�›ã$cÌøÇ,G° x@ ð ü�á \¨-º�~�ƒK™Vrÿ!¦50JT€¨,Š%ddôhÿ6Ìl¬4ÒñŠH ÿÀó?8ðø1ñ n`#ØÀV¸(º‘Žxă¯à¸p0Á „°e\Ãx¬H¢¾nÄ3�Á�L= �€6€ ðÙ}Žª‰o ¼€iàD0ÍUYx‚é¥B¸p…zº+Ó›Öá ó, =±¡‰4¤ÁÕ44‘À?\-�ïšÀÖ@€Áž ‰]𺜸ž�ƒX3«‰{HåPH\˜UNÔJ´]" wªTøGòb x—Äß… l�S„#æØ…$Ì`…üà O Ø?’€¸*ØØ a°ô?àðË:`BÈÿø�2�‘o±ìÛ/·áF'�êØü¸6Às¬`FØD5Ìé;üÀ? A xPàÔ�- [HļÜ:Ù*§XQ›Âš�$C×5'f€ÜæÚfõ>#bá Ç+ÒЄØ` .°�–Þô†m�ÿÈ‚Xâ†:ä!UÕqÑÖU#’ëþ£²X�þÁœo H; °P‹jì‚[èí F?èpÖ¡9´`á®y0�€! Eƒ è³'‚8£‰ƒé/v T>˜€�¢µ`à V0‚ÀÀùÿ½é ½b‚qP¯žõþ!xâäRüÿí™C jô»¨#Í @€0àœ')nÀö (ü±~� h@ƒ(½ú<àõƒGAÓz^ÀI``$VGÂàlÑ ÿ°x©Q~ýÆ �0”Àp…@ l ppÀs0ð0àg)  ýGe(€;2dSO^`pbP ÈT,%%�¦aÌà Ì0ÿ *€Xp00­ö<·gÞ%'.È-€C`HA;´qPpS<8�ðƒ1Rø‘ ÈvÌ`ø8p&p ÀP𸠈$ö…Ñ÷•TŒXÿèX6@3“ÆuðÇ’ Ó�1 0ÐÀ @ p§¸g‚¸g°Ö'°…R5z4Ð-€ŒhEO·E\�wÐ ÞÀH!¥"šØa¦ìgv `ŠÛö‡XÈ0€-•úÇP”TIÿÐYôs}«·q\’˜ŒþR{>2 Ö ÜðŸPðØ–‘"¶sбöб¨ˆµø…ÿÀtN7a“D õ!Tu!Ì4mÒ@»` ¨ð€Y…þåŠ& �±ÈÚ(¸h`X´WP@z B²#”rÓ6 ÞÐ T€� Py`‘ÿw:e…øŠAUÛX+Ö—„GPÀTP'òl6óÓÐoÿPm½Šà‡Àjç'€ÆÒä�U4:@MH b@ H•,�u,å×NÂào‰€à‡Ð˜•kZ`±b>Ðt9ðfÐ ËÒ ÖÑ”å×XÌÀ Øà ä� #�«fsÀ§sÑg†\ Õw>c�ý"„”’˜Ï°˜Üq! p…¨má_&à_›E8T?_C•TšR~ÑoIf²J¸|¬Ù0`!MÖåí¶†ïcºù'Ãà ÅÐ Ž•Þ0 f p‚ªÿÆšßõ]�¶œ'F<�Nð'c Gæ nØ”A Î` ¹˜DWP•Úv� Ñ‚è9K—.p°Ð QBRô‰U³LD¶˜ÞÐ  ȨŠþ5bæùÊ™bÿPC?@­` .rÕé#ÁLGÅ ÁPš»ðɃØÚ‘çù(öN08Ÿ` êpXRÿ²Ó@ Ý` Ì` ÝùÐ[ ñ]š”û'A?P Íà ¼AŸa¤Ô¤éÈ æÐ w€ €6z�QFÆ6ÐÁà Ï` -w,Fz¤G•RsÅ mPà€¦1z6ŒÐ ÊQ Çà')ÿ iq§¼¦bŠ œ 6º°¦Y‚€¨HUŒJ¤…Q§C±å—˜Òp4Ü ¦ððdýupa!`£`Ö`^x£ÿ9ÃP¦2: t†Ú›™‡ÁÔ´Š>ðêŽ1ÿ’A¥D„ NàÁKhÂ$¤° ¸ÒzÁ 7Ü@3$X ó0¤–1ljð«à(,¸¢œFš‘I½¬Q‰üC‰ÿ! µ‡�I! W`ÒŒ`´!†ÿ XÁä@‡ry9Ý?F‘ªS´"k ¢YCIËãbŸ°A\P%ÊÑAОñ¨Ç6H£bàÂv”E”‚‰„ß"1‘*À ÎIš™K2¦1 fXãøÁ&iЂNò þ åìŠpG�¡�ÝàÀЭ¼¡• úÜÝù¾ª dŽìZ$ÑX¡8dÆ`†7za†Ø Ä4惠!M_W@Ã+Ò1ÿŠ:�A º&Á@%&s!Œ²Äà?Ü…Ÿqf&#Ö¸ 3Œá�`¤!/x� XPƒŽþƒ„9`™™-4Œ"ŸØBºU†€ÎTÄ+ѹ¹ÃuÍ5›!'U c�cÔ‹’(F5Ê‚bvt‰ )Úа‹t€" lèQ�Îð�5¼”y ÓL±·äMÐAÿhhNú�ˆþcÂàF7&Q€¼ /` n`Tëù :ÐÁÿ„–­9ô"�@BTÕ0U,tTŸcX"�³&â<ãE’Ü)A|é Y„ AFåzƒtÔ$$¡^ƒö8,Ü¡渃Ø€©añ¥aÒ&"#á�ÿ¨‚U¹duJ±�ÅÌÀß+l0œ *Ø(g;ÚÉÐæuCÀ° otc\`-¦þP«Ò†~ø"L•‰H´"zÿ�†4~âкø–0½Œ¦ œÉ•ë?<{Tÿù ¯:ˆî� ‰tpcRCžÔ [u ÙTûL¥"[D½õÃ¥Y`"�^Vt Á þaä—ûeî1—ø�ÿƒ [E:˜q%Ad¡š ¨ÜÈE¬#-,ú5B jd¸84˜! l¢­ 0Á?P`båÎUÅJü/(ÿ�…|É"³˜”nÜ-5ÀA o8Ã䀇aíAÿj•ˆD��1�‚9²4á%/}É FxÀàÀLPb*o´³ˆÆ�JJ O�…=v1†*h�[e殎Öæ?T"E°ÀéVþáŒ!㤠xž /—Ì o˜¢ Á0ð�AOÙÄråì ýÑ lÁ ŒCê±È+UOÛí–šáv°>üá�pqz*�R ùμ¥I:¹aŽW¼ ØÀ¬Mè)oT œý‡¢�pƒa¥øë?ÒÁ‰- ðÒ­mð˜#Ó"y¹ abj›ÀäÈf17øiƒxÿ�À?8@ns'w¿ûE4 œ St#ö0G0d1žZ*OÜÿ­fš‰@èa2Y«_Áqrp‹´F$̘†7fá„T@¨À¸+ŽüÎU5Bæ Š¿¦Cä¯ÀQr…jIOeÈ:‡¬éòTÂÂÑr‘gΑ›ƒä~æ`§�ŸW ¸­ñ‹ôÀhÄ.>žŽ`€Bf˜‚„°…ä« QÐBðô�-ýjNà!`¡¨øeìd×H.šÑ³wÄÌ`&`�H�{``‚Ü6˜ƒ+Âñô^pB¿Nœö ðJÁäYh|Ræ�ŒS|"$’Í#cÎÀ)GºñI ¨€é%÷ üCÜ€�ÿHÁ r�c�0ƒlðƒ8!D0!þáÄ;Z}ñié?êˆQ‡U•±5"Ñ øá ‘ê% ä ðm'nÞ'0ЂP á»PO6ð4 nÇJ³SG½÷{÷§%�÷`pÞ€íÎc€¡^ÝÐ ; Àtÿ t‚ð»P µÀF@6`4`ŠV‚> uô1ö—Šwu.X†� Ò×#ÖàyÁ ݰ Ѓ€ÀÿÐpÿP µ l 0¬—\4�hžÔke4($@v¢``°ÿ ,ÿ€Éà.Î}·-†a ÒÐ ÁÐ G ,Àµ@ …p nwçz&€\º6…r…XG)––`°ˆb ÈGÂ�Ðç.2øE& iå ŸØƒ` �ÿ@ ¤€(Њ(@b†6W�ÅkžÔh'”B*X½øiP§à.­²d!V°QdÌР̰ŸH qX€l`Àá~²ÆzÑ�çYJ4B∾§‹UÐZ s Æè.ZÓ(ÈÐ À50À=à*p@ °­È¨'„†²8‹8�eIE;EðQÿð{”’s`ª!§S‰2 Å � p° ÿ��’ÿw-Ùz/‰\Êõ�3¹DBCÀ�E�R�#ÇÇ:±±PÏó*Ó@ Ò� i0lHŠ Ð¤WPw!hƒ†vb»†o„Lyõ?_é19Bu@ Þð1#iù$k¹‰Ìpl˜Ð €—¨ÇÁ—„–U¦_»VoT‚:à•ØÓ1\@w  1ø/ʰjÿ0 @ À›ù™Q9•q'hø—Hwe‚yLÈt­Ùšbù:§P›ÙÖ(«¦€¦0¾™=Èp’Æÿ9q‚F�0‰\q5W-€ªÙ?ÿÿ%I@Ÿp ™j�2 ÍÐ Ò°s?БsÙƒ0�p'wRfÇ…\ÿ�žÌ¥šÇÔ?ñ:•@ ;8ÐóüÉdiGH™Ÿù€�pJh'p\ç&WF¡=€L= ?Pp! ÷#”ÐSjÌ Ì`Â00œž�³wV‰¢Xù˘ƒ)OðwÀ"ÔÀ|JdlÉ Ø ÝÀ “Ѐw‰—y™—Ѓ†¢*ʤ,ˆëÉk=�ÿð\Ð Ôp¡z¥ÿ€é¤NÝ ! #P•§wµÖz ª Šbˆÿö5àNð?@£à Ép¾…§�NÒ°§Ü€» °ðƒ@§—f:h)°ªËɨ7à¨#´? 0ŒI!×Y1QdÎà ê\ÿ™ty©—µFb*škËUOàVÐÌ  [Aø‰«É «Î\KÖ iÐ tp¤µVk)*‹jšb<`û Þ0pÒz«Ð+[ÑjÝ 0 nªw¨ ʪÊEQ˜±× Þðg‰dšÊÒÀ ÁðÝ�I €Úÿp¦±(‹ˆ.”jÊ ±‘5îz°+ ÿ …0´fº¯6ÀÁÐ ½²-‘¶3S›^nÛ Ò0 h�µ*Û ÿ If Àe Uj¶Ûá·¨¼$êõÌ V»�#€ൎû£À �‹£eµÓ:jÕ Œ�YšM@³Ó@¹¶y§;{ÔQŸkØ0 !° 0+œ°‰l{FÁÛ”[Vêå ÞÀ œ0PSP 9l‡‚јqnË Ü€†}* ¿‘sÿ€±;Vj¼Td$Û ;š°ïKf˜K·Yz¶½4 ò\Îbÿ{”ÔSGÁ^¯‹p1˜Û‘™fU€ =9k<½DÑÁ\ Â� Á !ù ÿ,~€ÿ… CæÍ›°fÞ† ¥Š8@`RæMÙ¿‹3jÜÈñŸ²næBXP™ÅŽ(Sª\¹²Be.sÌu¦ÅC‡v†)C6�¥O�%…IÐäÉŸH“²DFpQ‚rp<´Y†–²aÈL*EyY±\ÄZýjårØ0gȶª]{ÑdHa1µ`áðáDeÂvšM˶m³aÍh�;ò/Ö¾ˆVà (¹«sob¬½�º X«V…ÿ2ML:eHÆÞ`!qØÃ!%™f¯ÊFlÒXP±*�:uN&²½|K ÏHQ˜LUl>´h¡Cdz•cëÜ:mš±iÔ¦yÃÊ$H¡ åÿòÍ´üðó³ sJ†.ŽÖvr9�^ù(RjÔŒYËî-—§EšÔJåø›}è%–•7´¨Q„T6­!ß|ÒÍv5Î8ÃŒ4Ò0Ó‹$?ä`q€ò›�Ó%(\A´|¢F­p&ÐÕhaRø5# 6ÆpÓK?„ð„!˜èT�)ªXZŸd¢ˆ: ¡ƒ*5VYßRåQƒ 5 2Ã� '˜pÂ!@¢pÁ))Ü0§dâ¤]ØáH�®ÛOZcM7|bÃÉlÐ�uèØ 2.ýE�šÃ Ó %Ÿ(¢ˆ*ò™d–|A‡`G„h0Þ¼ €´$êR1ÍàǨp´´ÿ¢ &œŒ’©N™Úyæ¦uê 2ؤ3Ê,€.¼âM‡ÌlèR4‹¾JšqŸ�2¡NxݪéJ�2UP:ªl�@$B&ØpÃì†ÅHƒ�OÇ#mJ;Ñ2ž�gÒ··¾þšË#˜Ê@l0“N³KÓî»,Å;/W]eutºV˜’Ãÿè’7½€ ¦ÖÌÁ:+�«'61¶¿Õhçļf„qFŒ1sǤ°AjÓ�º%KÓÌÉѦܗlX]‰meª¯Ãñ^×�)XÀÀP1 HB7Û.ÊF“–$ÍzżÆÖcÌ1ÒœB @ £�ÓM¢^vØ|wÿ$o4ÑX�0ÝÌbE B#Üxs÷ªÍdx±¼%cùå}«oàŽ Ó ¹p˜³,7¬FžaÑÍüÏå˜gŽÞÓÿ€Ô  ;sÀµ¡5g�õÓ3Ï<} ì²Ï5‡“°º‹‘K7JcÍ?‡5lÌ?Å'/òÉ÷Õ-22ÃIÀˆ`YÅT7MRÇ<ÍGÊX> ì–‡¿ÖøÂ˜óÉ0UB  gpÈ}?)Æñö4ŒcÔÏ÷KÆëò§¿­tªÓ0Ç)hH`¨„3¼Á j¸DKZZÉÚ’! ZŒb¹F2бÂüQ°‚x*O3%�`L¡ �ÀÀÿÑ fTC(LG†1Ác´’€D%Z‘—úáO‚8Ì!¢vè f¤A€Äã �(‰(ÁŠåžÑŠDÜ¡‡ˆã)ªÁÞ0‹œB3 a*(C E7ŒrÆ-)q#¤$Þx7IÑZ&Áßñˆ’ê0%CÝðÓ0Œà ªP×øFS9,bäx¨DÄPE|‚q<Ä'r‘ e|s’¤äEŽˆŒ i¦ „ž>a7iŒ2MwüGB>qHÔá®l„qH|Â*¶´bì’);ãÅË}Ó�7xq‡lREÚõ.ò´êLî"ª¸ƒÎà†6èa™øGAÿÍH¨b=Þ37“çÍcTǹ�F/Ì  ¼-�0"3Pf»‡?üÁ†ˆD$Z£LІ٥\4rʱ4$€T@ÌÛ,=©×·”ÃH1’ oŒbó­ï}‰º_UÀB –ƒ>ÛÔA "Á‘MëWÕj.~ÑØn.h‘ˆ4ÄÀ!A%„±!c0c?{;+F†¡@a.žDà‚¢P/x�¨¬„…*Úc3ÕÀ6V°‚A�GÿpÆ.îð„4lá D4¢4ŒA´(ÿÃuò2†wçð-oÙ¾] êÜ�‹Q0W26s�oŒƒ¹0I^®hUyY#έEFt‡ò D× §»ÞÇËÅK~ý¹„�(@á WèB¢Õ�@4šÌ�ðgÿ0bSºÒŽÀ´¦l‰¼•*ÉaÖJ+<ñß;p.ýF1¬¡j‹"2 %$¨@…$  RÀµ®Ã@.4"™`. -à=ÜÕÆ66D¥? LÐ[ÌÎ%£Œç9P@B�°VAÖÙ>÷ùy—Óàœ42ñ" ÿ@·º†;dÂ|uXü|Wï!ßÿÿ@Ä?áJ`™V†1¦êlå¹¶…¿0¸ÂåZ÷‚óáÿà³~¨ *T\·õÆÃÐq[%BÞ�žq� Ll}_„å�¢eØc“&^Å(µ~q .2%xÈguÐôgüï B„„ ü ç¾Bt 0Ü�R€pƒÈçm:ô¡äøFÄ �uJ¸œR–J)v•ÇZ y‡:D»Ú§Ávc<#£ixÒëŽ$`áÖºîBßïЋ\ÔÁ n¹ _rc#âö+wü'0� 6[ñ–^O k‚ù̧§ Þó�\�ƒ ø îCÈ{rýV¿ C¯_ÃOÃçÍ‹_<ÿã[®{L\:vØ]rAÈïl{¢E¦ „øàùAˆ¾Ò÷þÖ$‚Ì´Úvit�}ð}¶w{�)Ÿp ­@ ë¡RÁGÇbÆCJ¯#hÿÀÌç=pG�ç–n\ZÀ‡à xÁ&cÝ—S—xãG~”ð˜p ª‘dC±£$â7Þ”ZXÔE‡ðÌ×N‚#¨E�nU€‚I Þ� wpg°ÁVxÎ%ƒ~@ƒãçx78 9x Ø„K?6hu Lñjƒ .ð5P=‚!¨¥Wk&X\�²` œpe €2&Ýgx†ÇT6v{aèxÿÿ@†9Ø]—““aAAûR ñ c.À5À (‚y¨qéÖ‡ª ‡ÀXè‚hˆ†÷Yƒð…Œ˜{Žøˆ½WET‰�v‰±(ÌPb¼ðžèsÈuxøWkè&RÀiPD…�­Hˆ¨¨ˆ~ÀˆŒ'†ºg†Ó±‹iaiH ÒÀ1f6@.С˜Œ= ¤§‡Î˜m€ Áà¬ØŠr …°x€ö…â׈Žg-fq‰T5Žac9z‚Ì hÁp!ð1°5€ȨŒuHÀŒW [0 Ý mÀo epÛg€Ý—€Š8�,Çr»÷o–¢RxÄ�zÿ2 Ìà ÿ I/À5©ŒøWzHð‘\@œ�½àwe•*ùþø�poúÆ€2 Uô:6™E&‘“FÔ œð* ,Ð70‡5à¢èÍ‘E ”[ð éÀ õ¥(©Õø,ioƦo‘àŸðs´2ÄC;¼h4&�ð¥/°)€–,À7@mŠ9‚rI—OÈ[0 é \ |É—lÎ%˜™ ‘Cã=ÏÀy”Ó˜)#–;¹ 6° €i©7€™m‰¡h”Q2XðŒ[0 é §™š|ùXø€)lˆ§o™@ZØD<d›Q�jÿ‚â ø¡–ÄYœ<�‘÷—œX�Ð82¢pYD•jðÕy�õ&˜†� �� vÕñ�®#ž r Ò ?"(pëÉž7pîøŽu˜œÑG‚0Ì`÷©˜Å—ü‰…p@€v ` ]ÿ@]&aPj— 5÷0äY;ÿ €5&`:œj‘êC0P€z* RZÀtÒ gp¢ô6`y`zµc£à$£@hÖNáÄ µC–Óð<:¡íi¡Æ)ŠòXzC°? ë@ŒpšU�a�_~ùp°’&`ÔdRUI{Ãv]JJå> ÿñ K�8`¦;ª¦—‰™8€‘<�Í‘-ð[ÀÕðáÀRP_zº§©9•„7c‡ €Mi• ‡bj¡ L¡^ß„Ôà%æ0 1`°Àhú(À£ì©–7p©ïé1`V0¥P ëé0 iP_Q §•)I�'jz �`´�—è øÁ:‰a«ó¢0šÒ`†Ó¤²@¬;š¦Áy™ËŠ4@‘[ ½@ñ�NY Œ€Úš§zê­Qª*zà• WQVÉ ®@W«éçà´!ôŠ0PøJ¬h:©/в1’ áÐýÿÐ Õ0 wZnQ e¦Ú­Qi�Y¨u ;ÆDrœ–Gädé T`*À*)Ëûº£•ù0N ¦ö`ä° ¢ðf`?@ÿ@Uð„\–§º§e@�TÉ\£Pe„Ã�›+Q=;Ù …P à †›¯Ð&Œ#°hÐ ½`³ …€NF0wBPž›E¥ ·p+·­ø_s”'qHÂÁ·*Q2! �d…ûøzŒÛ#06 ¯ é€ ¯Ð O`0 ¹NHב [DEà°q›’XX†s«È0£lñ±+ÿaÜÐ,éð ;p²éË pð¾+i` Á@ÁÀ [`!/`ÈØGð|´æ¼žºUÀ­qKnPup±ZQ?òr9ߣ´ I/Ù!²¼`@ Pé[à¾/À»@Õ Ä¸êh?pFð=——‡|h¤ÿ  *YÇ“1å½)C zÒ!æÐ ? è+Pp À€µ° –kè Y«™ú¯3|¤×‘Eð¼\Vb }ÇJu@#'q‡ñ~áCžÌÐ Ì0ÐUì; @€¤P µÀ0°°Ð ÿpü”Äɬqù|HYÆž{ÆBµÆu@ ]9IX$Ç™³®Ñö¡ �Ç}@ÅG@ ¤€*¬Ãú’Š)@¡ Éb<Éf\ªBÅwpKfV‘R¿%; Œ ÊÀ c @`GÀ¤ 7p 0# ¬Ð‘:©µì¯šÙ¦‘Œ”C@ÉE@_B%i ´PGaÄÌ^¥±´±7šæ >ÄÌÀGà0P ð#\ÿ€ËVË£µÌž�ܦñÉ‘:På쌖usP­àÎmQV…¨E«AÏaÏÉÌ Ü 0�bÀðÄ"(TËùÿÊÿàÍiY©lzŒñHz�¡É‡\€Ñ¦^ðŠ|ðÒ¡ ÕÑEu0ylÊ pÍO|¯|Ј{¦br9}™ËaœÇŸx}¡ �ip ¦^ªK1 ÖÀ ™4 ã7ìKÕ`Õ}Ðúº£\ÝÕB‰îŸM˜‡Ï˜T ŒaLú”$/áD="Ï3Š€‡;¬ú¡'°Ðì¹ËñžuØÓCÀ‘R�TP Ýu%lýÑ%à äð K@”0®,�¯]¬'ÐÙÁ©– }©2Ì„ojØÖ Þc9õÓÚ)áÖÒ8½@y ×<�¾y=¬+»Õµÿl™4àŽÌ:Ã,ÆDðw�ÑòìÜ•¦Íb15ðĸ}€x½×ÞýÝ^-Þï Ÿ>€…†ÖÊð )ÅÞ+qÁ;ÒE�P]µ° Û]¬ûÍ–y¡)Ú÷·"ò &±6Ú„à*á�cÜ` #�°wMáy-©œÝ×*”4à–Y”A�O°d× HÄ$þøQÆP ¼Ú @-nÕNáÜ¡b²Ð: î<îÓC<Þ3ä,QäîÓ,â´ O@ÛÁj¸P©gúÛ´ÌЪáNà.P½à @æÑ^Þø�UÓÐ ¼:,~æ)+©lþͶ<‡qÿþw°5É0s¬ C¾çîÂ!æÀ ›à (0>¬ŠëÝ]ý£5à5àT0 Ý` òÓåœçg…VÑ “$Ä ÀàÍÍkÞÙ)ÀJF`?ðŸÐ8n]#Îê­³ÞÿÐ!Ø@ ½ú¬ˆËÍÿðÛ4®ÓF@?0 ;ÉåäWÈžìlçÖ¯E¯s=‰ËÍf*å×þ4sÚ]ÊÄl�çâYé“Ãvø¡'&=’Œ^€¯‰»²4®4ð6Р"8öžÔH�|ù.äjá:ºzÄóš �LŽ5éní5þ?fÐ ŸæÉkѱ &„ÏF«ºjÄã+NÌÿ` 6@*én¦Àݲ!p—̰˜Ê®*Y,_ÄFÌmá¤.§í¼ÛŒœ1M� vúŽAJJýÉFœÕá%Þ0 Tà�¸L¯ó1À>3 tõzή�C‹zÁÝ�ÄåT À¿6; 2z’6ôžY/e,ÕNýÞ!ÂË ŒKd’³°,zÒå¥1ø_ŠG´Óï��Æ KP iРݰväöoñYd<Ùa=î²!ÞÐ oT ½Ð!=‡–ÿðásPÕ,ÔÐ8áZ²ƒúFsDGä�7aÏ @™Cü™ã``'/Ùc‰á~JìXÕߨ”£ûÙÇ/-ÃýÝ¿Z[þ}þäþèŸþê¿þìßþîÿþ iA–ÿñ/ÿÿP €1ýö¡L˜²a¹r5†LÙ?† >„QâDŠ-^ÄH‘`AXÁ6S˜QäH’%MJö� -P£`–páIš5mÒ,6L­J=+ CòæP¢E!ó– Rš:�~ÆD†ÌèTª'•]É 1€ !–PjU²e+^¥ÉFˆ\O‰6Óì\º*•A Â…‹€h)Œ[·h@!ù ÿ,€€ÿ“ H° Á*\Ȱá?ƒBœè°¢Å‹'j,ˆ±cÂ�%‚ 鱤I„#7žÌ˜2ÙÊ—0¶TócËš8_ÎŒ˜s§Àœ@=ú<ˆshУ,‡’<©” Ò§ ›.5)u*T¤U]Rͪõ*T©:³zõ*#×®c¯‚z6-Ù¦ÏZutíE¹?é>…{o^³sõ.ä›/Û¿‚e*e‰²mb¬F¶û¨F‘D+:-[y/Z›�7®Ú¹tI—\%#{¶º5m·‹3Ì-a´h‹ùþ}4uEÖ¹wC?¦õ3sËœNÿgl÷Àb¨­_ÿ/ {x1cÇ­)ë¦LÙ1c³C�_YÞuáóÅäf ×�2ÂŒrÊ'ªä2Ì0þý'^€[9¶Ð{ÿsJ’É'¶ xRè�_™%ÔÞ1ŽRÇ‹�T’(°´ç^|%šŠÂ cã?ª@rG‡d’É!�TÒŠ�É(甎'fåŒ3à C��X*óO{°âÆ—z|’‰"‡Ä¨Š0ÊT ”\ C¥•e™%-•ˆQG"mLb$�4rˆ’hF$ßuY!c(œqf‰�7¹ Â…o|ÙÇ(™¸ñÏ�üQ ˆí1)С "c"iK%úã?ÃäŠb�±†uôÿ¡Ê rôágŸ›æbã@¡:êfN†%BÊ ó Z”QÆo�ÑȬ€üᇘƈ ->ú¨L¯†æhšs  û�7´ÜÁÊ2ÛÆ °ôÈ´ÓfZI% ,¹í¶Üz[Y}£µ‡Ð0ŒÖQ…a„¡†n�‘ ,€ÒGðúш!†PÒ šÚ¶ª¾¯UG™D[vªL.€Ì1p#ÜF&½¸H­O›GŒ‘€‚ šXn'ã£zŸPAEQFÒd´‹*b¬!GÔRS=È݆ØLK§Ãðÿjå×î„P¯Î ƒ¦1 A„RDÅуáF0£¸!7vÈ�ðru$‘P‚m±8§Èsx·q›¦7Ÿ˜‘Œ_qÅÑIƒˆ0ŸX.rhŽ‡ÝžƒŠ#K>¸ë“ßÞDÑBÈ4S¥7°¤‘I@ÑøãHsH0 œ±¼Ó ñžSŒ%”¯+ßÉ@G¸ ® £wADXRq„B¤€¶*„¡ wF0î@ïõ1jÿ ƒ ïFH-bÂf˜(ž"•š�NÇ(†5¼¡ *¸ <ðÁ?„€Iü5® žü‡$‚1‹;„��,L% ÷ÀJB¢ï�†lÅúÚ³ÈÓåè‘VÆ?ŠA®4Ø m´¤ñ—„Æq2 Q�3v‘†e™²w™f5­¹ÿELœB›¥£¥kÀصpî2wˆ� |Àƒ`¶‘˜ìd\´ Q�ãix&4åð9LÓûtD! © nó/aì˜BÊ0aÔÁç¬A0ƒ„Èј\¸BŠàŠn˜¢žjà£Üòù�@†T¤6<¤?¹-’¤´6!i�2x# HØ 9¨�LyЃ!Ål§®P4^¬ƒ\0XÒþñ†>JóŠ2DR¯©TmjÌ©<]BZã£nTb !øA \Ђ†vÕ9øàc—0TcŠêZÿ±†5HS• Œë\éúOmm‰ b ©1 fLòxBbhµ¡ˆu#X©W„´ÿ¡ Õ0´ V{V¶wÓDàÕ4kÃR‚‹>úWš „ NÃÒ€ÞB`ƒ€ -¨Á?ÚF¯Â1 µ�Ür€¡ kK—å~K+â­•®dª–ˆ•W×´ÇÖ`†0ºÑ‹-Œ/P X�Ý×¢S:°)ÂK…I´#m CoSxÏæa•q•k ñ‰ÑiéæûÍ}©Á o0ãA R0`Ü@«Zí®‚ ð:Ž œ°G5ĵRØ{oÐ\ö�‡ “¾ F¶>̵§ ƒúí7&‚œ*0 hc‡Z’ÆHÂ�9�kd�·SÃ?¼—BÞýîÿ…™•+èN¡µ¦iyÌ™’4¦ñQ„`0¸r–ü×@�>øª�pãWă`C”–´‡ÏD¾°çdº¬ùkɶ,�h©ñküç!°L`‚,kù–©:-æ"<õpÅn—¨´ƒµùÒ{ ²p)F¯õý«oÚÐv*3j zƒO(@`Àê,ß@7 p—g æ($aÁ°‡+¤ …%¦Ì×+¬[‚CCT"°ÈÖ0ž1�g„›Ö‰àrÄ8 Z!ÌàÆ,žà+wÀ(À2¶|ƒãÁD°ŠP„*AØ@‡(ÈÍÛ‚ù:Šâ{¦Ü‰‹+?ÿ¤–”Œõ,×Ú7dúíoîx#h@À¬ü„+¼Å ¯Á `ëƒ8¡âD¨9Èá )pA‰kKs›©ø°=4b1:ÆÚ—ò•C¹{.ô£o™Ka�¥Á i˜ãŒhÀ:Ð�|tñÛÈzÑE˜ñ~ ‰u�ƒRèBÌ�´J¿!ÈRû�!¬uÒÑÞÛF_‡E+þ™ lœgÙHA{ûŽaAf”X›(€Ü9P÷ž'-pßûqÖiØD5þÄ#“ñÊZÖ÷¨Þ‡C¹ðƇGK�ËÛHC§ø'-„ÑŒ˜§Eí|&±7¸!ŠX`Àÿz~÷¼ XÀ7x8jà‚ØÀ �pE0Úa�tЙQ(·Çƒÿ I‡Ð ÇÃ|¬a<Ê  £@)õB _g}c�}ã]¦ €~ãÇj>çjØ–~8ð/ðI Á`õÐëÐ ¯ÀT�6UðY°DÁÇ,þ‡z J¢-LB€Çð Â@ ‘p€�œ' Îð  wkÇvÓ`£` p�âgwˆ ø4ð@`@`�À äÐöÀ ½` w@TP°ÃI‹|ËÒVrÐ0€`/Úb(Sb Ô =( ˜`°R“ðOÍ`„Hè>c±vÌ0.Á0ÿ(…ÿ€âÇh'‚0�‰[ »@ñ á �0fðV@гSǃ“^ý·€+7“HƒÓ<ÅÐ »Á¹ÐbÐu0 ŠPÍ ˆèÒÀvn NÐ Íø ~tg™#ðK@¢ é€Áð ‚€FðNàFGGqÿÀ†iƒ¬˜.Þó"Ÿ€1âd(ÞÐ ÍP ó0Þ�:0XÀ…@ aWˆ0—„P�ŒÞ L(�Àz™Øÿ0?P»à é ¦ðNð/Fà`VàEqiSnæ¶6V‘�|óõ†Ò Þ ÈP“Æÿ0 ƒð'ÐCp¤�*úsÝQŒGáoÓÀvæÐ ›€à�yO ~à+`‚ð Ø@³° O`#4`8Ð=p‰fDàu’ŽÃŽ“¥ô"•ÐE1i�ö8?ÆÀ ¹ *Ð(P–j@ é Ø Di�@áoÐ% Üà  •Í(`0F° Á]Ù!°ÔeFPdi–ÁäFq$G·IëÈŠY gPuˆ3�q(Éç ä4 9pe §ª02úe˜†‰˜5á\ÔpŒÌ`¯°À ``À* µ° àø+ð_)`4@ ÿ—~ uš_Gk‰’ÈÄ*`iOƒ [ƒ*~c(í1O,À '(€ øb�†Y�F™Ε”ÌÐ ¼ P @€ÿ𠤀0`•Pp p)‚ ×på9k©Yl‰L�ÒžvB Jö á&¢b(É× R Ÿ=�(°>2“ÅðŸˆÈÉ Ì0 ÕY� €¤@ G€~ù@‰–8h.Öp~GtpG$Š’œô(�r•°MâôÅ 2i8´À,ðz(`˜÷u  Æ( Ø€Z €É)ðÒù}MjÀzpe)ðjây¥§ÿYtq4[úEó¥\ ƦÖP¦ÇÐ 49 �*ðze@—>§þáZ" &6 Gp0Õù}p«á'�ÿÀj?tçw=ðeHPc�ºIE“b0u €Z2¦Ê #2?aW × —]´dÃpÆ€”ÄqZR Ü  &•РPßgTÈPj…(�¨T k~'k> ˜4kÉ8\Ài°¬âRjÐJN5ylš:Ÿò&o0ç­fwvÓP ÜÐ Vp§�µ:à�Ð ~âW…=7¥TŠ]÷ÊUùÚ�C°hàõ¯È Êg<Ã�KÖÀÇÿ€3£€(`­0ް5Å’Hò°5—ˆÇé Øw Z� 0 zp¹ÊU¸«(p®Öb5€ÙÕ¨36a†?ÿJ‘ oÁ¹p“’­@~Y­?k€@;´ÝZ´^!IÜpŒ¨÷˜ À~™бᗫQzp'€µYK|WX=pšG0c5ætT ª'íƒ ·ù4 l€e¯gvæuSEov{¬ñ£äð #� ë�{0µug¸ˆ«/ {[ q8`Ih9cŒón� üá>.q(Ô€FÁPÐÖŠY€-!´:8³HÉgn¡ˆÜà„!P® Ðð ÿ:¸±»­w¸óЏ·kêçÁšht{co²%g:?° = ÍÅ“¶‰$´ÅBzHIKhzæ° 1�  á÷àW¸‡z¸)€µ·K`صµ†Å¾–ÔA­€!N¢ÃÐ †òu¦ oÛ:€r(ÚšCÑP½‚]úUb½pÀŒîz«L¾äÇ¡J¥Š«UWÚ¾lD °nR%A,7é à CðÆD�Ø’C\œH<Àz¡ˆ¦¤¤:\h,µ‰ugp¸C ¸kÄ2…ÄBP Â` ÈÁíá ~Ü T{F†°$+ÚÅ2Kº`ÿLÎÅv¦gb Pp8…–\¨vG»Y‹Á'ëBàV�¹Ð eúÄZñaÒúÙ*Ð…œ*\ËóV½ÿ¦ª·m§œ?@ p�–²³k‰W{~œ cNð.P½� ÏP¦?qʨ‚ u¥ØÕo K²œC»AËÖ+£F ÍPZÝ� O€~Sȯvw–H¯ZÖwZåNði Ö@Œ£±%é0ƒpŸÍû¼â Ùü ŠLË�ñÍÍð£½� �шë,t÷ƼÉò\NàTð Âp|Ø!Q%íq ¬¬5º°B+³s»ÍÜ\ËÞ,!É€_Ôÿ` ƒyÐ’ˆÉÿǵ t4PÏ?P Ý` ÿá-§1©r qªØUް-mÐ/½È“ád±CQÓ{ lÇ �Ît7ÁAÍpái‰PbùLÁÔ#s qà¡Ú”P%È ËÅâÒW ÓY]_&ñ­]Mb%è ¯`9�@ÑðÆpL¯-ÆZÊì Èñ9³×À g ¬Œ.@-¼× !ôæÓ1Ÿ*9AØ3m Ê Ý0 >€ ÐØgýÆÿ0¯TÊ1 ´à o�Ù6‚¹>R„Õ,Ðt°Å%¼ÒI Ø‘Úбڠâ4m @]½0ÿP¬Gw'p¨¶’/`½à Ýp ö¶ÔŽ״àžýzY°5¤ÍÅz‹A¨í޹Ƞr ¾r^MZ¥% ã\�MÞü ð£Ð 0çð³†â„Õ;Û{£×Úª ‹) ü½ÕþMŒÞû¤eÝÀ • m  ð1ÿÀ Ý W‚%~¬|˜0,Àá ŸøòÜ[£·$Nj&ž‹Ï�âª: @ÀDZ× ¯ç0ë�F2­\íA ­��çÙe�C½²5˜¾ßš~už‹P¼býðêîƒ_ÖÀv �ÐP30°PæÌ°C¹±5¹Ð uPX€`{°Å•^Â2Ë|ƒÍé»qjˆƒÐ@¥này;.Ì f0€0 ÍÎ E™v¾áƒ­`�W0v@îå®ÙÅòè^Ãåós SðÝ Ð�aA5+ %V±Á ÿÑ=ˆK|¥Ý>&Z ì"'½Î¢ïP¾Ýÿá §`9]QP ŸrÈØ ~< "!%ßí£ð “°2ћ٠R%âôò‘‹ÑåÌ0 Épíöu_Ð!§Ã�*a§yŸ  àa,ç.?Z&óù! ‚à˜@ i§I¡ó]ÿu¶ §0 Ó''ñÝÂg�ö%ÑÑ` É— �àö7ãóãá/1™÷?Ø ­Ð c'N}ìuK� ÇÀ|ÁŽûa BŒް©~Ì\]¿£¹@ ˜Ÿ ݱ%Ê·r{}ûUòùN/úÏ�ÏéÐ S0�ï£ìósÏú ‘KÔ7vú!cûLDÉ{ £ðÐø�p1ÈÿÀÇ�ü«ñÍ0%2ÿ­:(½çÿn²£ä2nËúuA´àÏNü/¢òüP,·Köqìß3k´< G+aÈ*ƒøOâDŠ-^ĘQãFއ)CöQÙÇŽ•Yû­¨1!B¸À”k˜Cd%mÞÄ™#I�z;õhŽ•9˜œ ›Y³çR¦M�JfLX+Hu$‰95Ìš²§]/&ûìX¯=!Ë•«¤G�"{VV®X²cÃν ±Y.b§*¹m†ÌX.gñ>µ›8Ùa›ÊšÑju W«ÀÖ„=;f˜ñRʼn7sÔK¬/åšÖŽ¡ÔüùæâÎvUk‰LX®_4H‘A„ˆòõêÖ®w› ˜æLˆÞ"þ.ÙÛ7òж7nœ+s�Ê=SoR»²è¸±g´¾ü»ÄçŹŸŸ>¾bø»ê'â>ß=ýÄ€!ù ÿ,rpÿÿ H° Áƒ<ư!C…#JœH±"E‡-jÜȱ£Ç� CŠI²¤ÉƒÉRª<ɲeD•+]Êt ³fÌ™8GÚL)�gΟŸ=c¨Ñ�Bö<ÊTbÆdBF{VìXѦX >µÖMY7¨U¯fû�¡ÐgÉ” û'l˜±·6Éf5‹öX®SÿNå–ÌjM¹c“ýF+ ‡>ÑJ;•èMÀ?•)H T�:‰*AúG ™µhDÿùü§L0äŽbE›6P­Fw0gÊtèP%X” +�VòäÓSû4í-W%@€êš­§‘íS¹uOö Ü£XÉ=M+Ë©Ž@nþÍÿ–ÓÈy%L¹$ë{s§é걫NæmØ)1b¾»�3êœ>åUR (¹ìÆÞhîÁG‘|)#Ì'u€A†k¸!Ç(”È¡ˆ}ü3H#‘à¦Þtî�¦ Dò ¤L+b¤qÆ„o¸¡Grøñ�å•I+Ñí6ßN'J$YJÊb”Q†pȨJ&5ú!%ŽåÒJzÒ‘† 2qµtLY_ž4$}ÂT2~J–qFŠÀ‚ˆ}ì1e�RI$zùöÛ�&štŒ5J�ÓCÊ#P%\p‘Ea„¡ÆbdB‹rèÑÇ”~ü1ˆ!‘D‚ -z’ÖÞ{!#�©¹XCK)" ZÌ?ÆLÿ–‰HV±è’jÜ1 -€¬¡‡}+å¦�‚ò©zë�J’©¦N3Í)’�”Ò1ÆXå�*\PEQtÑ®m¨2 pØ�G°Âú1"ˆtJ ,» “lj"1+�0°Tòˆ´ÃPûÌ?£ÜAQHÑm£j„Ñ,³ü‡vÈqî¥ê®[ìŽñÎûX©§2ÓŠ,�DÒ–[öå ,i<‘QDq…·Ž‚q-ªX(‡Äx(BqÅìFB %<Ê+™1Em¼‘½§œ¢™HÈ(ãL3ÅWT$‘DË.ws´ŒbóÃv„=å ë²ëˆ#@c)o‚ÙÛÊ) TÒj_’ sÈÀD$…ÁÝvÿ‘…Z$Ì'mÀa8æÚ1öºƒœ}6%ªÐ²[[‚)ãX GKÃŒ0½´ây«ë VämuË~/J†•“I~‡K ì°e#ò8%xîe k—‡É‘©›Ó -½x䬳oEcÍ(Tä@VK!ÅUT¡u\dÂL&w¬!G¹a+'ÙìÚŽö'˜üƒ‰ˆòm´GÍã 2Æ?•5­�.ÄþÐ'1½õ¶ÂÞ)˜Q‰üxba‹Ï̆¶Ÿ¡ï<Ò�_Þ÷»jùn#Î’†4¦á�Y¤!BðÁ?„€$ì�zÕËöTÁŒCˆa 0D èðMÕÎ|?ÃDúþ´x‰¦:Îb†1ÿ¼Ñ‹;ü [ðA‚@B,ü/…b¸Ã,°!z/btÈ ÉW>Ç9P‡,�tH•ŸXeˆ¹¨ƒ rà.1P0ᶪ.´!½pCÎ@¡›ÝŒ{ȃ kw;J¤O‡­ E[|ôÃ2VŽ!Þhar�´Q‰%DÂÿ¨—…Ô�½hƒÎp†þ1�Ã*¿ˆ‰QàE‘ºÌž˜ò«£ݨ„bà'ô J\"ôNX…+x! €èÆ,Ðô¨7øÑ\}$ø3CŽx š2è7–Zþ£+Ÿ°BœÀƒr3˜%ôŸô¨G…F˜£vTÒÞp@;Xj|7,¤úZ ÿA¡ý£dMñ 3¢á ^�YT!Id åõ@‡hÚP•úÔ!6u·Í’‘12$¢B`Рå´$CI½+H![£0(¸@2¨É }Ôïö`CCt±�†Ä„* $¯ˆ) aƒÁ…¼€,xiLÛ˜a–pzR€‚faNð4M½4+fÔ£6�Ÿ¸’|X3—c0Ãÿ�ĬzÕ(T¦èüªM‘�†`tg•g)¬=�Ím5ß[ÑC=•)ÖàF781¼à*¸�hzI¯êͦIx3º± )�A jP81iÿj ¤Žø„b ˜iP£ °Á >«‚°À¯~å„BÁ¦y57ÁGÅ–”n8ƒZÏ%ÈA2Ðg­�—?—bjPc¦âÆ+l°¤ *`Áqý SÀê :0¡M· Št`ãW@lÿAʇIìRDýh»"Š6•®e™Ö]B kLãÜ … Р@ñ=î?þZÚ%á¹R(ÒQÄ*°AÀjøÇ ÍKÕð¶ˆàTžb)‡HX+QгB�HÃÁ˜ FÐ� àáq pPN6î/'ÆÂž ‹xì" ¶.l™4ãrMŒ¨äËÄy°$ npÿÃéKCæ“�ùÂÔ0ÆjƒÁˆxM~2ˆE;Z*+× ‚~·À^Äã`~qpcÙ¹±š2ê?ƒ�B¹ÙYqöqLú‡o\-361‚?ŸÀ&th ÝP¹G8‚†€…^£! Õˆ‡)"í…2ˆù †C º*V‰L„w2ÇxÆ�ÿaÞýE51õñ4ç�͆€î¬e-_BßÀœ¸¯±0„¤!é0ÅØà/8JI°E6Ø–ý¡J¨BÞÐÍ©‰L k_…Ô Ñvªqù # ààÀÆ-hùÎ÷¶þe®·à„' aÿH:8�6ÀlÒcÿvØ&Vž¼ ¯¢™6Á >ê“&¼!C–7¼±‹ À�Äaë·Ü¶æÁ/mm„4lbሇ=ÈQ,xá Z`Êa›ìB€ø›"sjœæ¦AxBÈŽjÍ}sN°À6€ H|âO~2 @Z#á1ˆ�!‹`¤#éàF/2q,TÏzaøVš,ý=â••¥mÞj£ýà6_û12ÈŒ y@ÀÜ%À�Ö›ïPVÁ?n@ƒ¼ l …áÓ‘rð¢sH°p…(üãäi*ƒá˜„=`^ó`rVçÏþù8W$ƒÒH7˜ÁˆXàøÿÝ[?qXÃà³Fl€Fì¼Æ+6q‡-äà yã[ µfì%ÁÙr�‡ i!*ÕgmuFØ÷æÀ �0àð0~wkÿ0ð1�¦! ¦Àf`VðO00ÒóPÜb+~3i“f8¥¤ªP7x€îñ%jgC¦gÌÀ ê`@�€ã6ÿO° ½€,6l~7bJDSI€ÿðPc+Y 5SR�0 Øa&…ƒ×¶ƒ1m?h²`0�„Hèð‚° Ì@»° V`6ð4ðNàÁDBÎõP-ÿã…‹ƒjâ˜p“¡i¨†57Ø÷ƒ»ð @ PŠsN` Õ»ÀFVe4`×¾$Í5LEàˆÛ‰�@U•Àf¥A2\¢‰ Ç‰¨öƒÁ€@ P0ð`‚P ÕP ‚ðh `1àw5p¾ôK�¥7EEðˆ^`u ™·6ˆŒÊ¸Œ1 ÖðMÁp  À0‘lðµ` Xàÿ0pð5kwnìØF™”[�òˆbàI€ðl?2 ÉØ�›(Ö�YÜ` 3 ÀÙHÿÀ I l`pàB×a&�‘‡q åUHP[È7\pQøáI£ÐTó1A,Ù’a^ÞÐ 0P�À�r‰Ð $ è,\ h Š `0Öxu×zâ9žEœòUkS¦t¸†_Hpœ+ÃDP­ ŸM%QŸ¡‡Ò—YÝPD Òx�P*J~å{Ç ·ø Š–NR@ip Ø1Á¡]r}ÓÀ ÒÐ Á° p�5)™£~ qðz'€‘|gqSVk= tžé3J¡T� Œ �´à?V¹Ð kA˜Q¨b ¤‡ :÷ Nð¨~o:t°6§Qz©wj¥—d3c oa UQ¤Zª a^Óð Ì€ ¦WD h�Ô¸¢D7«F)Z™q½ÿðiÐ /9öCÁÚ¡A¬Í¤æ0¤@pDX„*J~NZ©o‰žÃ¹ÿ0QÒ𠆂9`¬õC¦ÒP °ª÷¬EØzÿP~ _·‘ç–ˆ[ðT Ì` ÂP-®l§–j¨V ëå ¢ÏÚzw7§ _¢ÕÉå÷7 €šßÊ'¤ú¯Çÿã Ö UÝ iPŠYw¬Ç¢&àd™y\éh>ð?�½@ ƒ &;z•ŽAs6+}¦séàA0²u×›:´E{-�PNðlÐ Ý Õù·ÝMEªÕÿöó§v%ç§)K§>Ý:FÀÃN'Sæø¿>ªé)ï§‘@Cª ¤Ln§±‡Œ{]äM.up!F}gpç,þýáÇ?Ê T &¹x“š�B”SK¾’a tF™À¢‡yôÇ †üsÊ?¹QvZ2í©Ô`!åt–0•¤!†`¤¨†b·2þQI�˜H �úIL“Ì0™PñÏ‘©Ñ†*°ˆ¡tôñÏÿ\("”À’v…Á%Rd|^SÊxsJThÁ…@)þCF°¨R‡lú±Ç¤UòO+ž¦gH}n)R4ÂhþOÿ@qî?Q yGÒ´F6Ëæ}1–—�Ð!þÃïÑÝÌ2‡ Tð û?H@á{ª�ÁÅ!ÞÈ"kD81”‰;_ô˜|&-×Ê>ÔÉÖxÓ‹6hÿOAB €µ�¤¡騄"¤>‚ôarÙçžbmA’°Áþ¡9òîÞ?øö�4d"¥8Bèà¾çýÃ8˜¸žv4ÉD­³A rPð` Bà@ÿ¢ …*ðmé€DèþQ†7 § µ"ˆ#þ¿¡§J„!ŒýVÒe„+•ø� \à$AL‚ËÎõ¹9ÐÂ’P¡@Î@›‰Í C¹‘µ²™¦¼åÞÈDBà‚Ð!k4W±æ iÔ! ``b}Þ@œ�½é!˜€^[¤ÅÞðV ¤ hPƒ�ð,á?Ìe.$Ìaظßêó�3œ�brÀƒ@Z8è äôÃÖ`ú¨“i0Ef� rƒ”r h‚]f.!H½H$ âĉ ¤<ô¢’Aˆv' ˆ˜02¦A oãÊ\& X0�g¢²jÓ\eÕJ‘ÿŽYhÓ yft1)þãªxŽ•„¢NfxŒA^ Ðó-È«†·$¡©"‚+â¡ *ÀL Kª¥Aà4#)""”pŒ@89uJƒ“(@ ‹ äÏüaИƒ"x4 jäE<^ñÏ�¨¡–k¨$­R£) dÖjMâ&�Fr1ð@ R ‚Šö´ =¸[ÕþñÑ! ÄøG&Òà/ w”W²`ª‡ \]HŸ>ÂUjü£|;`@Ö4ó5åÝ(@a \`F<AW/<5!Š˜”Ï4t©L „d�5H§*’’ „̰†9Faƒÿ(Ö((+ npÑà ”º B†°J(¥g ÌÈö@Äý’`SÄ£lø¯Â†ÏþÃÆQ„!>A Ê4Ću›„)Baf8”s@€mOðxø*€ì ;bœ2ÅUs‚d‘Ž^°! ÿÐBèjlc'XNŠhj”ñ 3íÿq !¯‘ÍÁ�B ÀÈœ,�ŠF£$þǶà„<Á wp9þ±‹w! KL-"‡YùGçÑÑ3R+d8'ĵ°õF7D1l`øÀž=œ[³Ò�ÆÁ b`„4LbäˆG?Ìa .pÁˆ$dØ@Þ@;à!4‰…i7ä7‡÷!$«ð?˜! ^� �8�jð9/÷?^`#Ð 6°Á:ñ r¤#üU'Ú�„Ï ÒÏ�ãÄt™ˆÛdu@ÓàC·I‘tCóYÄ)ô£Ð€ÿ0@ €FPµ° ¯ 6°è4@JFkQÄU@©B¨(bà_—6ò×'|ŸÖ ²€ ‚Áð'€¤P ‚#à§v`ˆq>%Væš#\dTWlQ `7L:’%÷�� V Ð �XXl�à…0ð'�ã¶[ÿ�<€¹Sˆ_DĆˆ ÁÊP!C‡  ¼P+ØXPàç0l×|©öpñ^�e?ôC:°;�_úôwÀs}¡/|ïaŒa ÉÀ K `4p` }Ðyÿ`‚ÇNöa~æX€¶Qšƒb³7•u*V­à ”A L8‡q  "è @ÀPýØypÁЇ[�uQ7€U50‰:0\݃~!í˜6ÐQN7÷Ç ‚>�p°&(y&(pQV ÙCøæ˜bŒŸÿàŽåq‰0 Àœ&Éy ‡Û&‹Ɉ1b-�Qä¹H\´F„ ƒñoaZNA9Ö Ì` 6°ÿ€À‡ý—”Ñ’/9P™Q?”;¹h~kDz E!y;a ÒÀ Ü0 f”ÀÎ×y‡¸�§jLæ”OÉ��ø?Á…Ò4,¬Âf�W¡ÿ€pþ´‡à|(�‹}g…1b¡9Bôb )Õœ‰Ç Üðæ� V0 €¸y'éyˆØa`è’qq-à[fDgHTp=VÆ N!Ò$saw�pˆÂ)¨¹’ÿ°ˆdň"VJÍyFÿ@,ª€ VQÈø•G³`ÕÆ ŒP àð )©j6ž‹ø–UO<àDuTð q3ñy€aL:Ç ¦°>w ‰’—gð˜ñ[Ît öõ[� Ø�  \=ß%FÖ Òð !p°˜ü™’pg…L¦[?•QÎTJ„f‡ ^¤ðé¢Vù [pg‡ØŸW�Æ9/Yùäç‰Ð Ý^Kƒ Kˆ�7§?s° }Rª’ª egåX é…v³@ ?;ašyº'à…�ÿð—é lP˜q²Øj…N©�âÿè1@³Ð ϰ—ö ±§%ñ1Óð Æ �€+¹’Vèd )9ÈzO�“ú%�©/êšjvÝÐ d‰ÛX�:¹U‹Žun?À Òà ϵ9—j©DfXݘhªyf‚;êa§JtÅ3·+È«#S2 I ª:Údö’‡d“ Þ 7±­ÚÒ­Ê:Ô` õÊ ÜÐ „S¹’L6nãf! 8Ý0 wš¤Üš¬%7\EmÝ ›^8ãù)/[0 ~ùÑ�4ÞJs [Ù²`Ü d ࡉøÛ9É ¡‘§aòð:µú 90}¼åO¯yÁíUmuÍÞäÒÆ>ÔïC­_,v^Ì.‹4€¸Ãp'‡Êa|y„ï6¼Ëa¢nšƒ…0¬ã¾†ýM‰øÁr`?üµ{üzÁŒ6€g€<`È÷-^®n™Ó©&8œ«ÄGEÏL4ñü£<¨õÿZWŒ]á là‚Œ6´�Z!+ ”À ¯�ÿXYÝFÑŠãÕå†-:Æ3JŠØ <àA„ˆ?°ñ^àB¤ 1ÜaJ,`žXø)á‚Æ;Å)ÄT–~Îú„@àÔ@�÷"’PÄ+HA T˜„9zÁ1¨ŠÔÃÿ,?þÑx£À©¾ˆ üì$~V� \PƒGñ~¬›¤áÞ+N¤ãtO$ÃÎà†5B*$å¿\øÂ-ªR?óÁÊ ‹a�øÝ!6h Z`Ëú A’úã¨`ŠtŒBŽSæ÷Îó!`1“*{à'†¤Ÿ"Ùð>Åð†0ê€ÿMЀµLcý¦çAýA‹ £H(ªÐ†O³˜¹ëÕ<ÕB¹ýã…™Cž@~ƒ•ÃÓ€Ä?lð‚° 7¨ý|€^ï IHÃ,Ò!Š*,Ç¡n@!;û@¾?xɔ铨p”Í¥ƒšÝÅBð˜ô¤ýG] …+ ! ÁHG'´ÐPœ�m¼ê)E-wÑO(È2ï©!M0" Àý 1xÁ?XÀ‚¤”›·Œ¤�0(Ta wà†V«%9©á¡rx;÷à£?LTn‘ø óž"u­ ik/ÆÀÔ¼@t­kJ9Õ½" U #Ìá�NTJq’Ó0»Xòÿ±0X‘È-±Ä™a´(øAÆ0¼Œ- ŸýhCk×G®1’AÂi¹°Q¤Œ¨‚À`£2Èö HãUþÀBD¤ÿ …ZÛÓ"àÃÊ`Æ‚(W¹¡¥ëhoI½è¦BpE:zñþq7¶‡}ƒbÅ+VDx)A›Æ3¦º‘¨h˜7&1‚ü÷UÁrõÛ� QºPÀ¨ {Ì" U`Û|8 mW½j¬ùŠVÌ8ÿx_Mb”X£§ØÁN @Ä"Îo]I[¿–þwœièE>^a/xNÿ0l�á0¹ò} 0²ÁÌ„U¢¢TMCÿ6Ç+ à�tÀ&x²ˆçJbGâà¹øÃB¸`+¸"/Ö‚À0-ÃöÆÝúÇ *qËüƒYÿX˜¦™Ç‘6ŸdÆ€³7fa€`wƳžù¬ß¤”G¶„'8Á sFG€)ÐX lppz0ýøpÞÖŠvõЍÞXHP‹cÓIw@u`iÑ@ c Üà  €Á÷èY`@€ z`w&p'eʵ�|I:@=ßHIXÇ1uÿ€‚÷W$GR3Ó ÞÐ M0MuFÀËø‰;x  t ·m'àm, ¹‡<ðgõ“ßXD5)i §°“Õ“@A EQp�Pð‰`}jtð gwùmuŇޔW¦•�c“i�•*(ea ?‰]™ÿ� ð†0v¹ÿ€€°™y¶’#Ö—xµF1iZ^ùniö· À¡Vë83G† “Pð(™ 0 ˆ™O‰€vÇy–) e-àH%D²]=c8ià�(Èš„±08× Ì Ó—Œ`}ttO™—wç™#6œ-ÿPœ·k­ƒ1T�ci­Á.ø|ÜÀe pÇÿ �vÙ� —) œ) OUK/Ù„Ap¬ÃD`Ÿ "úW á‚dè³°—Õ7’©tAç�R¹’ÿiRÜT~ IUö;s˜Pá"ÄÁÑ0Ìðfÿwl‰s9—ù)tû¹™*yÿeãé—ÎU?G@[@€� 7ã9—U,z ïYpæ›§gƒj¨Ÿ ÷* œQv-ð|¤÷ó.pêõ2i·¢úfÌÀ Þ@œ` po(™Ù�(ù�=*ZÃù—KèB@{­Ð>�$ñ¤•(g?Ðÿ°P’N‰§›Ù[eúµ‡"Êÿ°eª Ì�C…z&‡Ê¦•È ¼0_ P� Ü™}Z:•ÿÉ\Ín> A§0 7#…rkÊv•Ø ›p€ •:ª’*œ²ZK>àO0 Ì`>±«@Ñ«1ª8G†Ì` !°�Ê�Êzg[ê¬$–„äÁ  ¸Š"çÒQfâ«îùf8' ¬õ 1°0É*©;Ê¥ÌÕFP6°½à µ$ñzÚJ¯íå‚Ö¦¦cP’ �T™�6`Ÿà Ýà" *ªa5÷Š Õ ‚P§•ûépNqVi•1ÿàÛã <¡¢È±-z5pv‘Ì !«™Ü6³zv*0 °oÃP²=K²ðj5Ô@pdØ pj§—£›‰ݦ(À´* Ò0²i:µh’ ›¦aχdO€±þÚpª6¶*‚ ÜÐ ¾µ¤j‹ 13 s¯Üp:€›©—àd7ÐO0 ÞÀ ZŒ ¸ ѶÜð|ÄÕ²€j'`Á9�?0 ÝÀ Ó ”[¹Û¶iÙŽ“ÐÉÅ}6ð€8‡º©«ºhפVÓ0ÞjÜÀ VP !`¶‘먫»Ѥ3ç‚•8x¦p;@¼6€6ÒÉ I‘¶Î»» –zZá[ʰ0ÁP ’ðލ³Âð Åðë¼’"ù÷ Ï°·m*!ÆÐ¾î{a4¯òÛ^M*‡Ú @é Ñà7Á ­Àº¾ khá0bA¨>Á  󽆡ŒN�|ÀÑÁ"|½Ú Ѱ•ë½ÛêwñÂ.ü½3Ìyõ«˧Á"‘Ã\Ã:LµB›¶jàËkö6ª°n2�’sÈС¼“ýZÆÌ:!aeÞrãf�7£Fá™4¨‘oC£r 󫺵ñ�Iÿ %¦ÍíŹñ(òÝÈP¥J˜h¯|`ï¶À¼^wèE.:w·ðÉAoíé›Ö/œåìb‰úKwÞ?ðDO ^þò„"Ád•ó{A‹Ù¸AGµ�ØC:Sý-p tàÎ^t¯g£²sAœàô ƒ’Ûß·ÿtÅ…:£u°Ó Ÿˆ5¬�T}{¡à(¶Ñ�QÓ°a4¤1ØÀ<èa°79�]á \H#˜Œ$Ö¡ KL¡ä@òE¬fñŠaá4vEã4é}Ò�Æ Ÿñ‰|±ö¼¤â„oêV˜Ì¾Å•ïgÿHûòb +Lp `º¬`ÉÁ¶ma c¸6ÒÁ‰4hA *ûÕDœ·>4¢§9…0¼ñj÷}ï%.fó¾Tà ( @p˜àÄÔUq pà„1n X@ìPn¤ãoš’ÆûCÖÿÇ}€Dˈ|ŒhùÂJÌF6HT2"î@¬lâéúUѽ�jà#8a ´BJŒxx£ÆUàÂÒ0§c`ªÈy�q�œä<fÏÔ°¯9N±Œ`ƒ¶ò• }hÀAÑ=p‚ ~�S#ÀžEÒ�é*hj¼eH¶§xˆ²´"ÞPÆ`@ZjS³%|¤7vñl@Ðø€¬S�Dó÷F0B Œð€ âNÇ.9q‡níêRY@¶²u´†f¢¹ˆvUªíG>OƒØHƒ«Gðíp�›Ü/HÁ¹_üàÝÒv/^! +X�[º²ÔÒ²�… íØ rÿ„Ñ c <¨N2f(xÊ@.×#ðö8Àsq[ù0x ® çö:ÞÜèÅ$žð7�ÄSŒÀhx7ÐÁŒ] ýÁȈ ÂìRšÚ‡Ê�I7Ôaì]‰UÄ®™ãª‰Éÿè33ÌÑ ',ÀíÀzþH¼î#L� sÌb[0^Àh·Õ4wP¸Õ3Eò*ݦu°¬V$OR¤äK0—Oüú,Î9xÀÛ¸@èynet`#ˆƱñ 6Ø@Äëæÿ�ò+ EÐ=¯²@%9§‡ÀPC"¤¸ãgÆþÆ¿|‡»aŽB” ÑW €;Ø7F° Õ I¤@ t0…èC=Ð:àMC0PPég9`@mÐ\§ ÃMÒtyÆWɧ|§Ä æÀ 1 (€xnWà¦P Áð \³t/S×…]ØGp�H��xE€xø�b ¹\Ò¶(xÈ·‚5gØÀ�p¸0°F@ »P …`w'‡'`h*X×…„IXSP@u–'b wP­ ¡U|�‚±‚ƒ‘jÝÿ › €°0 €¤P ¤p#`¯Ö¦wåæWvx‡8€„:p� …Eð-™ˆip§àÒsˆ˜‚‰È…ÝÀ  P�‰ ÀÀ)À‰nx�†Ààs(0k, v(�GèyÈ„º3‹w0 ðÁ$ЍŒ2¼pŒ€œ(G�P‰ßv}Ñ(k(pŠ)V„= K> KH9(ipC6|¤”&åxXȈY  ÀÀG 7`àp¢7z<—�$fŠYSØècd~�¤ii�THdñ‹ iÉ…Òÿ 0�Š`‘nG†!)’Ïøs&™e[†H„•�K(0.Iˆ‘T4©‚ iç8©Ô c®æ@H†DY”Ð8hâ&‡tøW[¶e8F®¸”˜0 ÞðrIŽùLjÒÀ Ü0U  �h ’£7z‚�iiŠüÈK‰�²$�ûóH€pÃð #Q•á™X™•Ö@ Ü ¯e °à€˜P”÷ؘ‡ä¶–[6�²D~AuTP´Ð Z–·—\Ø‚Ò0 i°©Ù p˜@�‹É°&h�yŠ(&™`+ÙAI°tÿÓ Æ` Ñ0Åyç(\Öà—½° !p°0‡9�pàv´Y’ÚY�€Õ�Fˆ=[ðU à 07_Æ™|šHÌ@ØÀ ?à Àp˜±’n7ÐhPeI™ZE8�pÙAO�´À&æ9Ÿu•‘•jb É Ý@ª 6à°Ñ'}z–‚†”ÿXÝéGàf`³À&œi\—Ñ2jR¨DI' [Š–ˆ˜Š� ¢'¢·™Z8p5€]ã÷\ð Ò�j0§a¥4¥ƒ�JÌà—Á ‚À£6h–G¢ƒ6¢*¦UNðN@œ 'õ¤PÿºdrZ£}) V*I›à#àih–#9h!*¨vKN°CwФYĨpêGSÚa}Æ Áà i°£Þ6ÓÇs=çŸåV�©è…š§ \0Êøä¢…‘ª§Ts‘ÚƒŒð}=*z´Z«þ¹�v¸CO� ÜàѰ�˜¬ó¨Ê·Ya ÓÐ ÌÀ ›p;º¬" wi9¦*Æn6 Ìà Ñ0¯1¬ó¨w®�Ä ½` ‚à Ǭ´*�‚Jê¶´à Ö Ñ;b¯!£wfd¨d§¯ ?Pà¡=‡0�&vb€E1`£à Â)¬¬�žê ‘wvpgg±°gwû±ÿ²(X×ô æ  ÒÀ²­´-+£Ôà5ǪÁ ¯ w ‹7ð6pñú çyª#•/�£�j´§Ä }‰p¯pN^úNkb7T° ÃÀ°Oz$µµ¡)§›å^g7®‡€w�úˆ{ `Ë B먠¹ˆ�z·Â¥yýÊ6`}CJb(`“P§!E·NUy )§á^€Ts½Ð 6h"fz/ÀÁà ÓÀ Ó€¹–7v'Á­�;\æ—Ý œð¯÷½Ð _ÛºX›¹°‹²Û™šMÐÔ �0MPK0•À Â庈SRœ‹¼ƒ¡¼Èp»ŸP u��½H!u½›ËˆC‘|ÊP´Ó Á0ÊP¾æ{¾+˜¾—ç³gg´(e Â;¿Æ‹¾Ú{yà­Ãë¿æÀ7™|lÀÿ{Ž ìÀÌÀ®‘•œ|ñ#Áÿ£ØË­YˆÁ¼ˆ/�ºÁ¿êÁu«&÷º‚Ã*Â$¼…&<¬Œ˜Â-¼Â½¨¹.ì»HÃ2<Ã4‰Â'œÃ>üÃ@üº1ÄWÁÃDL!ù ÿ,rhÿÿ H° Áƒ*xì`²‡J”¸°¢Å‹3&^•ZµìÔ�Æ]U5É�"N™F-ûԬݡhŸÒTgÒ¤L‡*�j%LìÕ«wŸüXl­CuÚÊôÊO£FŸTåR«lXKÅ 1¢VéŽ7jL9Rt¹R&¯ÂÒKºöAÃbs‰¨Ð™¸x ºŒY­¥±=GúÙvYœ½)‹t§ÎÔ¦FùaMÜP¥H­Žãÿ¬Ë°¹ó²Ãž*SUGÌu7n©RÔÇ�ýFƒ 5Š„I³Ò´‡�EÖygu¦Œ0™Ü!ð¹1ˆ*ÛÙg™eÞEòI+á!'PRe˜7£ìFF r!ô)bß ù!‰#”`ËqÉuösÚt˜7¹T’Æ‚j”8}¹"‹†Db(”œ�jÝ(b9¢ô‘1ëÕa‰'£ ‚‘9"h¾ˆI†L¥å‡UšDÑ^ilF—_Ž’‰ri¤,ž‰H’‘ð‡áqn³Rœ%¡•V2ÿdÂ…Zd‘E—j´¡ˆ*¯¬HŸôÕ(‹hº %1ΈÜ0±ý££}ÿi2¨2ÇnUTÚen€9ÊoÈ¡ˆEŠJª!¦RòI“‡"›y°&tU2åÒˆUdÛE—’Q‡"°Œ¨v+a i:cŒ2çl«Ñ*$k1ÿœÂÅRHQEQtÁe‡Ì¢ …ÈǰcžKª©ë~‚Éš­À¢Ôfi9¯U# -u‘D¾WD‘­^´1‰*ª¸QpàÑr¹ Цº1²»¦ÄK¥—ÞÅÑõ�0ÉTBD !ÅWŒ\²³À_!pð‰G¹{T�d©/¢j³“l¦… Ï.ɪñ?iP‘-rK«Ò ¨±Œ‡vÐÑGyü‘²3ÓÿÌnŒ‡ •˜ŒJ§ �DP€¼vÉ‚¨ Üj@Í'Ÿxç�$ßꮣà ƒÌ×?t µ+yCËDÍxãRˆÜ…`ˆ1K.“´¡Æ,_NGæèÍ÷ÌZoÝJ.ãÅkúáÇx#Ì!?´î1ãùÊÞE¶ “»j¼qÆ|þþ{W—ê7ª£ãÝÐ#]Àð’i¤^%¥ n$³ ˜*ƒ3}'J) ÊB‘8ò:“ÿW¾’ Ú”å]º9 aÜRTAjÀ<²—éô Ø)�^0 aèä Q(‡5@3�g*(há¨7aS ÝæTÉZár6pA fŠôÀ7Mg0óÅQH£Œ¸Â�2º»3|/”,   ‘ P-Çx!m(P”´,Ød 5¬Q‡Øà4˜)CozSm°K‚O«!‰+`4£e8¡=ŠÀ¤þPƒ¢-¬9 ©N•UýGJí2 æ¢ !ˆA X@ÓrÚ¢j”‚ZÉŒ ÂóNq5ªUX7þ?œÈç>ÓcÃÒ¦ô´„…Ÿé˜Q $v±7hA jZ·ÿ"!ˆ“\ÜZ-‹ÙÌj–³¢\ªwöi£ÒRõ´W5‹éŠ ý !x� X@ƒX—¶¶�äâ6��pˆâ ³»TF�ú[Þí³ƒ¨Ä'\âã–6GÔ²F1¼á�9@7º/`�uõÛ‚š>ô—B$B: ïJ�[\ ÈÈk@óæ­�É…@ÚëÞ“*w$Ù‰0¤1ŠçÂ*˜îtY _ø’Ü:� iˆB_â…ëF H·>â‡Ä)%Õ ×ê‰5zaè‚Ä#&1‰MÌ'øà÷"„Àl˜ÃQðBb×�Âa åÒÃ!aZ$5î�G2 gƒÿÞHÇ$ à¤àÎ!¾Áto ßÔÔ AØ‚ UlI0£œpc¶Ä˽¸ª¡wÁÑC%`©UØÂ„Åð0š!¿V„G¾s B¬=+ÙÏ8@£M„40Béè†(])Kq’{,[ƒ�±^†\úŸŠÁ0!™á�`¤¡Î'8A P@ê³`ÄÕu‚´Ÿð+0bÌHGði0 ÝÀ ß´§¶Ñ§ÕH ÍÐ â� ÄÀ ¢0?0+àК4¨w�©’:©§V7àdŽW Ü@ ˆt£Ÿ ª6ä Î0ªØ ¨²0 i`·øªaH˜z·¦±yo_¹“²5mw0 ÞàfѬkJ ÎÀ ÈÀ ÍÀ Ø€ ¼ �`6°@€4H†Ù÷"G­,ª_50mœ� Ý`™°b:*�ÃJ®âД̀®]ê …€100¯ô©}wo´¹“ûê٠댪h–…ãªqtGwµÔ¥ pˆõq\)«±™“$çl7P6ðŸÿ ÖàÞ¬}jˆ$}Ü´Ò€ ½ð ¢0�'p¢Øç²‹¯¥¦_6ÐÁÐ 9{¥ ²!kˆ„Ä s7Ÿ�š ²P ª çð¨`˜÷ê´7ðV� J'%;‹£ šqÒ@PÓÀ °(¨‹·NP‡g›€÷³ÓxŒ Þð«žJ X+�UZ¤g …D ¼� Œ@®¸Òj¯0Ë!�©Þ¡�Û!�+l‘k�”;´¹P´‡�./|©÷ª)`DZ•9·¦+ˆ}j\Ýd\–9 Î@ § u0O`Gu p 0o `Ä&%솧+¼iæ^ÓÐ ªÿ¶Œ�Bà40»G³Ë 8Û­¾KЧ ª,Q JÑ \ ’ðVð\®µi� Ì`£ï;ñëó›¥Zµ¥Jñ £ �ÀVàU6`¯Ð ÓЩŒ¥…5° ü£Ó  fÁ�`õ ” û(’Ú;àúÁK£Ê¥½p Ÿ ½�°ÆÀ ¥KÄy2 ª†Q¬Ø`PTû�ÒðÃüv%1Ä}:tI©ÄK¼Á4áÂÅð)Ôò•Æ21œB¡ÅÒ8tƒÆL\ú8d–LY«:uÖˆþÓHQ#?�ZÉ¥çpaÓ”8 ·u° Ã*v ¸чõÿñãçÏCèGÅøÔìÉ ¯[×Ý;ELuÜ�ù®j�"=}؇a‰5G‰sÑÅ‘F–ɇ}ÊØG hb¸ñ%Ÿ("H zŒ%XP@98}*ñö‘2°p!†d¨!‡"ªÈá†pà�Çx~(‡^$ˆ ˆÉM+úd¢Pš©aoµâ"dì7 -Ÿ„a¡rØÑG{†˜bŽ8§ŠMitäWÙÙ7Œ1Q†Z€Á†nŒò ƒâÆYy_ª‡ |�é}# ‹‡€Á…�†Ñ†"¹Lb!|Ê¡yléeb¯Ñ‚Ñ?bŠŠa9¤Ì,uTÁ…UTÿÁmÌ2Ê~—Âñ†¦zÐñ'qË�"ª™ÖPC�©'A¸¤0¹ŒÒ¯JÁ…�r2 'mèyƶ»öšÇŸ¨�"ÑHÉ{,²™õöÏFÖX“Ô!wH!¯W¸Ê…"¯Œ¢Hj¨QÆo𩇃�Š*¹€D�5Î{.º$E¨Œ5ÉÓK&w‘ÄÆôBËE&³|†~ÿž±Æ÷zÈŸ¨2‘J 7l,ÄØi¶.2ÊtV.ŸÜ!„H�HáÆ.³´ÁHýªñF·�ö ,ÕÁìŒÌÓló?LâÜÍ0Öä’ Bä€DA½¯TÊÓýn+\Ô•|òHÉ\�5Í%ÿ©’5ÈôÖ�2ÓÃÉ9øÄâA �ÄRpbx^0]Æ¿{B°!Â.™÷Õó½Yšå"ãÌFÝ<4ÉB¸ øâŽo�#½ÌrGl\~¹…šÂ9-+£wèZ/ĵnjT®0 ¸�†.ðàÃô�?>É,ÁÂHåa„A†&‹fÈ‚Ê5üÌë¶ÙñžGM0 0B„NÔ0½G#¯0É‚èÂP¡“"‰�ù@g,ã!K}¨JU4Ž‘‹JP� ГÞý† „ l¡ÁèÅ$¸†,d UøŽ �ÀE #,çËš¡ès<%a«Ä~à$nzG@›ÿž ˆ`0CiÈB¬b%†5ÔᔀÏG„Ç@ž‰t,Jg‚ˆÄ z<Ð`Ž@?"#wHB®…*Äé{‡2.Ã*¦¯†Y,F4„Á *xÑ.¨A Âè„ Ô/ 4Ò@/yU o:„¸0RG¬9ð�ìMQ¤ŒL˜�4 A j@ƒ¸ÀN'^ñŠ*¬mP¸‚¢À…*ˆá ¢#÷–¾LÖ§Ï€E]ƒЀ,¥hà‚BÌâmØÂ’à8($A^.ÊC.ËÃK^fkxôeXÊe ldbT Á Rð¨@�/pB!^± 6HÓt6æÿ¢J´"'S�ÌF÷ Kг>©rW/$A4Ä)`';ià6°R 1pâ—¿}&¡Ÿ.ËHÞ¨ÁKpâæ ©*JêT‰;<á0ˆiDaÏWÌ ­�~È8"�b¨Ädx’ ‡9 ÇB_ÍÐtТ¨T¼HDÐSÄô0è€MÙ`#lA�9#>‰ÔIêÒ¨ÆB†@”Ú7õ�¥)åM³:�†À`Vý@VIÑ 6ÐôFàÁ 5èƒä@T¸C+x¡ê†jý[Qµ¸:µ/¹�#ê:| žeC5ØÐÄ´”Fd ›ƒ'PA ÀŲ̂AÈÿ®5k”M–ñ èËË&Eux‚ `°àN¨b €àÆtÁ(ÃÖ$–Öðªl{¼š™4!6ƒk\ò‰Gü …� RP 6p€¦/0 žûéö~ivµ‹"î‚3·•çesÑ WÜÁ;x/ R@ RD ¦#ˆo NÝP ÒN î�‰\PLx�ó2BŒÒ¼4õ†ÅB°‚t …(„ f l`/ ð ’9J #¶ £`FQòFâã�X¼>ñ1¨A`QÌ¡+ØÀp€pàÆ0xï RTµ.xÂÒ@ û UGöfA-k¾VœBÿf@@<à„å^yÀs@;_'Ó4øAî0 ohetôI³|Ä;Î%Ÿ’øA4p„-¨ Ëw¾18°çt¢Ð5æï ŒŽ„Í‘]t83É£œÂw˜BÐp„˜wÓW¾r8Ý�Ì—�/øâê Ù®zÄ×2£Ëå�n¼Ú !øA`Ó÷ê×¼Þ3¶ÜÎúþ °oÒœèTßFÙâ=Æ0ž‘‹g�á vͲ¼?`U«Z»× µ rЊÁ5$äÖ ²Íhc(ê €„$Ði't•7B¨aúx140‚ Bp‡\x#UÈÀq3�i0zÅÿ(-Í @Ôás�™ca •¦ßÃ�ñüÀ6øÄ¢È‰ÜÜI^vŠŽaŒfä‚nNx) щG0B‚xַކ4laª¤‚k­0‡,V$ü��ÒéScƒYŽÉ)d‘ SpœÅ&öÎí]ëw¸CO…€¢PE7úI×¾¦»½p'ÆLÜ|ŠÊƒ"œÈ¼(81 H$"ÀaÄþñH�kI¼[×Ìx->#å�‡{[Á‹V¨B·ESLqyNTB�8$†_‰› Ñjf*ãÿŒæ¯ 'Æ`†0¤að·'…½¨ýLdayPx¿0!wÿƒ®³|¶£ùW”0Å~EI_ú FM #wÊOr]G¿ÚË×ôW$åÑ ‘r”Á,ØÄ� ´u ( j5Ga"ü·tmgpÿ—r!€)—~ÒW€¹p€U‘ ¡ä7�x hW3 ÈÐ +ˆ‚y±çt2øßµxY)xÎЂ,¨�)( 58„(W*%h‚™4 Π„<øƒM¸„KÈ„-Ø TøÍpdˆ„I…L¸„>Ø…`ˆ>øH·xZW#–†iXnj؆ÉÇzg‡Ô7G(‡v^w‡w¸>3¤‡9h„}è‡åˆ�(ˆ­çT˜dˆJÇ5—ÕKŠ�¸l$h*�¨t‘Xˆ“(N©Gˆ–x‰™”‰|ɘ(:ÞŠ4$ŠmEŠ4ô†ŽˆŠIbŠÁŠ5䊣HвX—ʼnµh·x‰¹h‹NeˆÝÕ‹¾ˆnÀ(Œza‚ÆxŒØ‹¥hbkgŒÍèŒË–ŒyWÔX‡X`רŒ¤³jѸ�‡RŠ%ŽÒè77HŽk†|×!ù ÿ,XPÿÿ H° Áƒ�)<ö¬á³hѬI”ÑZÄiܸIËH-™Ç� C L†°¤É“2tXQâ?‹/fÌ(­cÈ›’Dɳç@•B¬(Ô¢5Œ3¹ÙÄÉôßNŸPKe­¨ÐªÑ¤mÜÈíÓ¯N£Š=8µ¡1‡ �Sæ-W®`¹˜Éåæì«Ý±x. úÐÚ3a€i•ªêT«^¹°qcfÍ.ؼx§žý×M™1U£êˆ¡2E áVÄŒ1Sê'ä¼S½µ…Õê 1V~„a¦N¥V´æ+ÝôtT Ö„ÑU Ð*TˆPù1å•:�Za3&­1oÓ¾}oU ¤:š¹pÿ¡â"Ç”ç�NÑjÆm÷u�#³÷>Ò!H€ä¬ÉB$GTÌ‘^+£½÷˜|&E�0 @H~}„ÅSá™zÌHcàMò¤`.•Trˆ‡¨‘Ä! "b`—†~Ô¡‡ ATL+•p¢GU¸àB>Z˜‡!§£Q41’ôÔŒ©Í1Üb›q®ñÏy`B‹[´ £Õ“1:•“dÕˆd.ß�—FŸ¨²¥[ “ 5ÌL£Ð†#�If™î ÓJa¸åç0Ã(3Lœq6³T’ðí™Ò�»ùéV3ÍJè ‡"CÍ¢×åÙ¨£}„Œ3”6ƒ 2Yjé©Ê(¦˜Ÿ‚ÿª“G§ÖŠêGª"Sh«IÂ*£¬唌­7 £k«Èâéé¯À.ëX¡ñʨHÍÆ'ì´ÓVŸ³Ø6Õ›¶¾–6Œ3ㆉ¸Ýv .·ézËáºíò®žÕÆ+ï¹õÎkoiè껯cÍîô/¿ï;0Áw9zð]ü*,ãÁ›FlS°Ôî¹0HoJoÁd^üQÆÔ«Å'²ÈÌ:ì±ÄôæYoÉ,/érÀ%‡‹òË%W}RÍ×Þ<–Ñ%õœt¨2µI9‹ÙôÔ<1}�ÓVo�u‡N+ù5Í\¯‹rÕ]›ÍnÍj¯ýïÏm‡�¶Úa��sÏmŸ½pÞC{JÌ÷ÑoÿMõ¾yiM2Çn·ànÊx³!?.9ã#OŽ`å–g‡yæ§mιâŸ3ixèK/N:T£Ÿ®úꬷîúë°[îyì}§Nz@!ù ÿ,.<*ÿÿ H°à¿d*\È�¡Á‡#lH±bB‰3ZÜè0£Ç‡C"üH’ È�%Sžä˜²$Ń+“µ$ÓâÌ�5+Þô˜óåNŒ=;þ”táP E/�˜TáRˆM�¶†L™2¦Fƒ–挪կVAŽ„³å×_»…+³mÙ”_­5&,W³fèíhs¦²a¹~�ú• ™a¤Rêœ)Œ(V Z!óv±Ì‚>S"kõ8²aÊÊ�ý s&2Á­${óÖ̰è§7óÞuM»2ì–µs¿>š¸¤nÚ·w"£ª;øÏá´õ:ìïÕåУKŸN½ºõëØ³cí­ªÑìÔ‹7(ôºøñ˜¿c?ž¼Rí쩹' }wŒç?!ù ÿ,. 1ÿ LF0™Àƒÿ *T8�`Â…Jtøp¢Á†1Z4¸±£Ç‰AV² ˆ&!ù ÿ,ÿ!ù ÿ,ÿ!ù ÿ,Jqÿ æL Áƒ�Dhp¡Ã‚ •”Èp`³aÃ�UÖL˜Çf5"Öê(dEtvŠÕ)d0U „Ù T®˜2ÿÁlö gNŸ1ÍXfF¢u¢¤˜´©Ó§P£J�Jµ*ÂcÇ bÕšõéV¯]�b !ù ÿ,€€ÿ­ H° Áƒ*\Ȱ¡Ã‡#JœH±¢Å‹3jÜȱ£Ç� CŠI²¤É“(Sª\ɲ¥Ë—0cÊœI³¦Í›8sêÜɳ§ÏŸ@ƒ J´¨Ñ£H“*]Ê´©Ó§P£J�JµªÕ«X³jÝʵ«×¯`]v ëq,YŽfÏjL«Ö"Û¶náÊ�K·®Ý»xóêÝË·¯ß¿€ L¸°áù| ˜-cÄ�#KžL¹²å˘3kÞ̹³çÏ C‹Mº´éÒʺ¥¦fí1_Õ°Y{ã�õß±Ô¦u æ-�5iÒlïíæm 7a’r¥û\øÝÔʼëíÔŒJ³§Msnºtk̼1ÿó`2iÚ÷¦n-¾[7j|„ ý@d®Ï®ïvê³tÂŒQ@ŒôÍ4÷åGÖ~­xÂI/Þ@B6| 3ÊXƒ ^ëYŒ$V´AK:sü#´4#Іϙ%M+w4qG.Ö@²Ã­0C køug3½$òÄT€’ $f@ÒÍ3<*tÝäÒŠ(i0’†žäŠ$ ¨¨¡“`AÌ)²@bå’HÒŸ‘âס\°ýÓ .Ÿ€’$ŠL’† ™ðòË0ÈpgW.¿´Ê+ ˜bŠ"¤TÂI+Û Ã"^’6C 1´Ð /­Ìy 1Í4ƒÌ›t�…L¨¹4ÃŒ0ØŒ¤°BZy~�6³ã?Ïl«¤ª}iW›Ôغ㰻Jº"˜_µ©ÝŽÀIãL±Ý´‰¬WmZ³5ÍJc 5´®H©†àV+톰í5éb©•KØ´§µëî»ðÆ+ï¼ôÖkoQ!ù ÿ,€€ÿ»u3'�àÀ‚*4È0aÃ…#Bœø°¢D‹/j܈±#Ç�Cz r¤É’(Iª<¹2%ˇ-c¾tISfÍ™6sâÜy³§Ož: J¨Ñ¡GCEÊt©Ó¤P›FuúTªÕªX§j½:5+ׯ^Ãn Ö Ù³cÓ–]‹¶fÛ·já²�KW¢Ü»uñÎÝKT¯ß¼€ùÎùW°áˆó&><¸1c¾‹#;–ü¸ïäË•1SƺY³çÌ cvýyôfÓ¥S“^ÍZ5êÖÿÅ}MÛµm„²¯Ö†½»7PßRÿ®ø6qÞÆ»&GÎü8áåΡKO½ùôêÖ³c¿“»vïØ·ÿO[¼yð¥Ï“GÏZ½{öw«æ(¾ýõ>ßã×–ÿ}ÿM(àI ¸�`¨ ‚¢1èà��=¸ „TIh!…³]8á†fiè!†CqâD)$bX&v7b‰cyC�7£9ÜH�Z.Âc7Þ�c�–‘lõÕÇãA:šãÍ’J2¹¤‹qCN7äYã‚FÊ%’1&ùd“.Š¥”Ì`Ó 6ØŒˆÑEõA™ã“9¦%Aâ4³Í6ÄÓ /®Èâ'/§T©fl)Ù¤¡JŠS'ž¿œ‚K)�Bâ‰$’ýØ“Ž-h ÁÆlŒx!ªäÂãÁ;¾¨:ãà DäœHš#ûÖÞ¼\Ï:ëàƒy;¼€]YTá…è…˜B‹0È8)¦’±ó˜6pÁΈ�ìpk]{:·ãÞO=žŒ�\ˆ¡c‡¡'£äRÌ—©ŸÎ¥Àì)}°/»¼µ9ñÔS:ª°AÃ\_ÄP9¨¡“ÈÄ(�'q0ïF3’žôZ¬ Œz/ÓÚì‚á‰!! ƒÉp†7œAŠxÅ,š‘¼7 D‚H‚Ý{“¤‚�ŠJ³KîÖA#Y¨Á [¸ÿ¼P…,€! e8ÃÖ�ÀQô¢…`ò†›¶:-®9É ÒÌAŽÈ™c‡èè…(rƒ¸ ^È“x8à¡*ÌEòš$¦/u©y°{Þm v2 Rèàa82QˆØ f¨C%ÜP7¬A€ÐÃ!*‘¾’¹myÈHZ�w¤N§ŠÔ %îÈÑ FÁ\…*z¡ NàarЃ$ ñ Uc}9ª£íÁ‚lru¼y!'e7�PÊFÁŶJÑŠa£ €Ä!AMGœÂ`Yßv:q=�“nÒ#h*8L.³Í�E"$ñ‰³=©¹€(*aˆLDb­À¦óvÉÿÏåÅèŸ;2XóxSý�yÞø1~Šo4#GMBçB1 P`¢¹HÆé&'áqN'S›i¦7L�†*TÍÇCk÷¦%!£zÂÄE�§ ƒrÔ "åäB¼ô>Ö´¤ u›&×Ң­ Å6�!ÒÕ‚« çüzÒÅDO`y<Py$¦—æâ«,,æ@žZG<Êh‚D5TO#óS7™µe�]Ó’IRÝÐPËÛ$8{i0¾¾1$•aT"A·6„FSz`8Õ¶K+ ´yß4leÚ:Xp2ö©:e\G�šG;JÐ"?&f® P½*öPÎcê�nxP¸ôI:éûj¨ØµÌN¦“|faÍ‘ªÞLjU« éJZªF¯0¤=®h!j°Íê”°ógo- ÜÎo“’�OA5ù\®u¬ˆ[,÷¹W ’S·Ü5éZ岸*f2‚�•*dµ:\¡ª.“ç‡ßñŠV7¸]+N—ZÕ}6¿}m*81ÙKᾆß\Üë"aÁr©£¦í¯l»Ü×6xG°£.O³‹#êÚöº’µ©/­Ëü>ذ°Õ¤?Å;Û­ŠÓ2óý, §Ù×ÄU4o_û\MF5EB !ù ÿ,€€ÿÑ™ˆîÁ�"-ºtkÖ«U«vµí׳a÷ÌÍûvmܾiÓî ¼øïãÂu+HùòàÏ�'—Û|:ôêÑ�7ÇÎýºwéÙ‡ÿ×>Þ:øîÆÑ“?_>¼ûÅêͯŸ/¿>ìøïÛãßï›?ûÿôåàgú8 €ú‡ } 2h`‚Øà‚n÷ ƒ^Xáxv¨¡‡báˆ"–¸¡‰ ’x¢ŠÔ}èbˆ,¾—Œ(Ò¸b�SÙ˜"ޤ™ó�90 Ö �@þHd�7Rdä’E6y$“O6‰NŒ\-ç$”X^©¥�Sî]–Q† ¦‘S"™j[Žy¥8æ°)Î’éø�šb:Éf›WNIeQ™¥éç‘â¤óf›P–¹'†tªéÍ�ƒ¶‰ ‘†¦Øg�”¨7∳M.Ä#7zši`¢M.êM:Þ˜ƒi3½œâ (¼Èÿ² ™ %i‘••™ª�©¦*N3 €â‰$¥{ 8@‚$gqPvSä�Ϊj2Ýp ,¥p2GidÒK’|òæAzѤÑþø�‘äô:­8�‚" fØ@Å,¹$’†$ªªdœ¢þ§î�˜ªº.‘š¾"Š…áÄ[0B‹1€ÁE"ª�“Э<Š4)”éÙÍ6¿È‹F;¡ò$Ó0Æ\´QI/ät)Ò²ƒ $Г©ÙLÈÌTóJ!i 8±?pÂ�4‚äPE2ÃåÕÛ:W®O¢J6ĸ" VØ` F ­r¯ÄuPx† ôòcA7¼õ’ä˜ÿÓÍ:>ömd:„wÓ /¦ÔA ¤ Â 7<ÞÃsü‚*$IlÑ`¸Q‰Õ3d.sBñ½î¸æ�­³ÁüRŠS„€!œð‚ ,ÜÐ7Ü� ᕘÁa¨F!ŸÐbh²:w|TDž¾nßzb4#h#pßÁ ޳�û Mt’N<Þ@âDl°¡Æûz€’K¤8ë,»ÐšCx꽸’È+(À <0‚î�'À x‡WœÏ¯KBûØà5ÀAŸÆò´ö‘Ò‰R:È1 Sb /€�,à�tà&@ T@Các�E<â‘Q` W`CÿŠ7Äo~£{‰R’º„LÛ¸Ãv€€ ppá b8ÃÇ©/D5v˜Hðá Xbá‡3DâÂ0{Ä&rÈBiB `ø\h.z@ð„9xøS!�WƒÞÇF=D¢ÌH¹6ÈŸ¬8ñc˜ÁH€X`d!aØ�Bv±*ØÂ.Ò�ÂÉ ?lŸêP6Â!™ÀäÝ Ò¼9BO¸àDPE œ²0 ¥éJ’¯ ¸hG>䱎W<²}C,CÎàK?|‚Ê ŸÞJâÉÙ +X<`pàž…Œ! ÿ¹GTüèG?vÁ‡ªÁ}â<9ÙˆAZ8ƒ“8ƒžABFŽ^ða KXÁ`ƒp@†]D$Â��~´#ոê…0ˆ3¡o`¨"FAŒTÍÑ%IaâבŽuTÃN <`Ìð(à¨Ú�uÈâTHCº�—Z��v¸à T‘‹a®3§0Ù˜ßÞ¨ó¡c¶àÀ„ �­M¨Å:ð!�x˜£i°B´P…,dAœ”„ƒAØQ`æIDŒB¢÷£�NíØ…,Ð�= ÀÀÿÄÇ:òa^ðá i�BúêÒ2\U°„Í„*šá ˆ~õ!/aâ΀¤¿Úÿ.ýàG8ÂA Mh"³ýH‡=zÁ…'H¡RˆÂÔ¬zU;ÈAƒÈÄ,šÁ¼›š$§‹ÕŸc·›ŽÜòÕ¨I×±YrTã[àÂFKÕ¿š¶�pÀ‘‰OÀ‚wó’µ"ÂÚŠ£ëГpó‘[¦î0Ì`„„@åvaˆa(ÞUå =¢™¸ï¢œ·“’LD"´Ò:ÚQ�M©òè‡=ªb{„CV@Cˆp…+@تpxÃ(¬‡>pb´�FÏê×�¤±mŠ>\K‚œO¸ñ°Jë`(°! Hˆ„;a âo ƺòKd3D§úkG;ð��…ìÿÄ@âa5ñ* !6ÎBÊÐ…÷�VÎC%‚Œn ùµ±È‡1B¦tÔ#í /Oi‹ŽuÔ ĸC¨Àõr¡ Zˆ°ÞËF9Ð�ŽÄ'Z‘ nì*±NYôb×µÃvTzij=q:°Q +4b�öªêçÓÚ�h„!ê ‹VoÑ܈AH7�“ª¹Lk&ï”2^< ?°A~‚'ˆÁ îò±“½l Ã=ã°©­tÔpú£«¶·=BPŒá ?(@=¼B…pC!ä@Û¡y`w&€œ oìJ¿”u‘ËÔSt¨²q=ê‘nd 9ÿp�¸CP ftƒ§$Qá>è!��¸» )/m|Ú?×SœÐA×HŸxÍíHÇ6êð.¨œåÒH‡5Ò!ŒQd"4Ïù ¶¾ìH¸û`wƒ6Fμq‡\Í<y¥¬fsœ BàÂÌ êúÈÓ"Ì+Q‰HÂï‘xc+h1 žc-Ee¿‰ÎÐÞÓj¯²jf†(¶˜�âT`÷Q7�!ŒVŒ‚™0Äߟ‹aü#ÞdŸPêÏ%ƒŒÒ´Üv>l]Ë^lâÎw8kCâpC´hÅ)>ñ‰`µ¢ÙÈØU²è-ïÄ/èQóµiI¸k·H¯¡{̧ÃH´MUÿ2¬1 Z¨b˜ÀÄ)h! g]œìò.¦´þøx4ùèB76Da†;¼‚„s*¼×$Î’Í� ¿Ð ¸p ÄÐ éR]Ì—$Ît§f¦' W&æEþçj¨€´…oá‡*Þp€ÄÀjx÷~1!‹¦hF8BƒèÐ ÿ  ¥° §’ƒ„ãDÌó'~=]Âh6ò|ð×S{q"GÕc u§?:¸$!ƒfNR'A¨q�d…Ï*à„ø ?…ýåXX“z:%„È@§q²Ö$à'Üb "BêR[°…åâ‚j˜$X¸èU´¥.x#†dfDH„.¨ ˜Pr$Q’G¬2°å1Bhfx¸!Eˆ½—‰Œè'd–†¬'„(#‰ÈL¢&a÷‡”–‡-˜q±¥"EXˆ—ØŠXc?A§Š315â‰yX‰QŠ”Xo¸øŠ²‚·HŠ­x†¡h‹«Ho½A:•øŒ²‹Ð¸‹£hÊ(Œ°ø‹ž¨‹f¸zÔȌގӈ�Æhd5q�Ô¶xˆ±–hÉhŒ»Qoà(ܸŠöè�ÝÈ‹£}?áŒäX!ù ÿ,€€ÿÛ H° Áƒ*\Ȱ¡Ã‡#JœH±¢Å‹3jÜȱ£Ç� CŠI²¤É“(Sª\ɲ¥Ë—0cÊœI³¦Í›8sêÜɳ§ÏŸ@ƒ J´¨Ñ£H“*]Ê´©Ó§P£J�JµªÕ«X³jÝʵ«×¯`ÊK¶¬Ù³hÓª]˶­Û·ÿþ[w!:�uÍÞmwßu~ÖÝ 60ºÁÿ£[‡M9„éFë—.ßv‘“ÛFŒØ²m� ú5×nÝä§øÚÉSÍzµÁ»°ç¦CG®š¬N¥@ÙºV×µ@sõL—>ý5ö:rÄdyšã©”¤R þ«7}:ᦩ³·K½zµßt‘ÓÍÿe6+S¢4iLͪs§T°u×1ÿ®'®q¦©·'” ž1/QwÜA¯ÃÉi¸AÀÕ×ßUyá…N7äô"Ë$wp±…Tì’ '\¤Q(ïdu(NZ]‘Å“Î:½€²Ü?l!„ª˜ó \Üц+ÁD(_( Ue)ž9Òìb #O8áƒ4¢1J<½pÁ£?–xÐt–v$_w�ç"6²”2G?Ä ¥�h¼’N0m<Á…w¸ä‚’­Sp¤EuØ:æ ^:̨"É?¼ðB >±áÄØcL¶ìó¾�6Çñü’ÆUp<d”AÆ™çÑJ¸á•Y;碳5#G ¾Á&˜€ÿ ¯Ã{ .pÂAŽ~È£ÁÄ*…*Ø }Å;ƒê& ©e6~‰ :ÂáŠu­Àà@>0Ât€,PÁÄ(†ƒ6I¢€E[Ç&œ€…ÊO d8ú2׈V0Cj¢ÓÉ`ÿ>W�M �p€2€pà8� N€±!> Q:Žõâ@¶l¨îð oD™q™ž Ñ/ñ°G<Âñ‹Rða$!(�'>qŠT¬â g±ü@ë0`>ìá 3\¡ l€ä6•Cô½!��à3fÓ“Å\MfÕØÅ#¬°‚(`ˆúÈ� ˜ð°DAY@ƒ¸ÀMpE"ñ�,m�r�Ô¶6…¹3¬á˜€0D+¸!Ÿ Öd.ð)M8DÁ‡&�€ ÐÀ&à€ H ‰M|åeÙ3frõ(ZѪ1‡-`A �ÜVpx>7S€ÈÄ2«†ÿðÔeá¨Å60�0 ˆÀ6p� `@N4!þL K!V°Ád¡NŽ‘£.¨‚~—…mý«|Æ\ƒð ^4/;9×Ìxá +”  €,� T•õ#FÐ�ü¡ (PÁÃl`^´££ë(€Yaú ¥èSéJ¡OrLÆ™2IG<̱Œ1ˆ@0@3�� dà�€C]i¢R4©®û�FeqÀ¢Ù¦xB[…’fAds3æJí@®ò‚àá‰Xÿ!IL¡$0€fÝêÖ·Bt¨u…bE]§ä@ö(Z=êa\ ¨ ƒ�BI/72ôÿ­Tthl&ˆ! ~†~á¸F-„›–@§oå@1EüµÎu)xA €0^Mò8W0æàxF! ]ÐÖÜŠ©U;ôa� 1¦!ÏÉ6„Á9vQ‹ce`oÍ@þöKQÒ*•#@/˜Zy؃’°’Pðj ±Å|Ãmñ°ô~‚Üp‘oirÀx˜ø¨-:„R–`€ ^×9 M@ÃÆ:úÅN� R�B´•….„A M;ΰØóZ˜ÖhŸN`ŸÀàƒPÖZ-HÁ#áP± ^pAáàGGíÑWL� \ÈqxÜ…‘©ÿC†ƒ쀇>øÁ�¸p7æÞ˜Æļè2j¡ #,;‚•� ‰pàà ö«,¨ð-pá»kž-�ß g9ÓÙÎxÆ1º1$�€n òx2 CŽjP @ˆ5˜S“Ú'�THƒH«Ð@ÿÈ�^iìü?b£.µQðQ´| ÐáX)4a‹jðrÌáh[„5“4 ^˜§å0gPÿaÇÎ3•�$…F;Ø�cjûíj¬#Ä~�¡'~@„,èX ZèBaKZ`ùܠÄ "�lRoØ&{ñK~ìλ¼„rÑÎÅ1N< W lU«zXľù¶vÿ؃þpntŸBÝ?!Ì^ò#3‚Èc‘4îÇ?æ²6[< WH¾Û€—\dB†Ãbé r–£›áÛX·Oò²Žîø¦ ÷¢Î9&�xì Np'ü;£“�¼ZeúZnDdb¹p8Oâ“]ý »òHgÑþÁ±µ]à cÀ‚;“ …ÊÖªXM;ò°…‘øÄ(¢NìêgâÉîÚ)Ç9vbrI€BŽÉnXnAP«¸U»ÂùO¨"îËæ¥¨PÍšÀŒUSHš’…Â7°°þ CVWª‡ÜVøÜ¬oýúä”ìb——vïºAÓsÈâOHBèsü{a«zDÿñßòdz>˜hE.Õü8®&;GÌ>×^˜Áh€ÂD?Òo¶¶gð‡ z�å—|‘ ”°>ì'Ff!{úqo† wðßã˜O`DPn \0¤Uã§ræÇz™àzá2{<�VqxÁKÐG�ÐèÀ T`Oð PPB(ª0 …à X%(hdÈçvˆàŸàC;ç€wu¼”j¥b4ƒé ¿ô.?`Âà ä€ §P �pu ⧇°x~�‚n'…­@UÎçÙqs4¸…]X}žðDЃ.Ð.0Âÿ�ÞÜ ¼P • ‡0€‡ÀrO…‘à§  Ò`Íù‘…4Ç…\(Ü 9@D@1€3!p ‚é`Ìð   ˜X �`†ðxŽPŒŸŠªÀ |(yñ0˜4èŒQˆí€ ’à\€f8‘€ æ{3àá Ò §p‰�P Â…ÆŠ{h§fqQ…ÚñŒ§xoÐWƒ_—b ‚`?P ÍÀIÓ8{3!ÛÐ  p‰Â˜€ y§àC…ÒŒ;!ΈwQ�«¸œ`°¸I`‡�†{#HÒeÈ ­p ‘� I  @ § äP(0ÿ•“Bt‘ÐÈ—}[¸¯ð9"O ›ÔaÑ2 r(�È ´Ð’½x 4y ´p“¤‚’@ñ7—jUø~õ¸á° ˜�w æ�–(É”õð9N9ŽÜ� Qy ˜p )Ã’óØF8±sxgyÓ(�@yoíP i`\�’À ßh&‘á'�Ù–&‰IÂ@ v‰ ¿p“d‚’‰±“)\É;Wˆ€‘]²�NÀ#²0,o‰ó?Iâ™Þ0 Ø@ ¿Ð t|Ù—ª˜‘ñ|—7‰”²ÀO@¦�‘3íc{Ò7wÿ`Õ¹›{ù™7±s\)ƒx‘ø ˜ÄÌYýÀ ¥ iÀ Ø ‘ÅO¡Ñ–òÇ@IšÁR°ÑuGš´Gœ{soüp ’`•( 2›ç3ÙA˜bòUö©•òø•‘Ý!&–HÄð�  ÂqŸ ‘ ç¢ð·2V¶  ¿ a�Ká‚'¥` ΀AkÑgbÒà€ â@fÔ‡`5ží@•ñ£báL'ù q¤mA¤7Ê¢dÁ¤7ФI*&NФî¥RJ5Wš¥Ó‡¥\Ú¥U*¥Jú¥ZJ¦1¦X!ù ÿ,€€ÿå H° Áƒ*\Ȱ¡Ã‡#JœH±¢Å‹3jÜȱ£Ç� CŠI²¤É“(Sª\ɲ¥Ë—0cÊœI³¦Í›8sêÜɳ§ÏŸ@ƒ J´¨Ñ£H“*]Ê´©Ó§P£J�JµªÕ«XÆ“·Õ`¾¬·v-øµXyöÒª]»–`¼õÞr�G×^]´ö šµÊ¶¯Z·òàþ››î-9qäð¡Õ{Õ¯_±t#Ï�·.œ,S»výƒË˜¯c¶�#oµ·n›,I�$mª.î^�¯©~~<:^ºt´L¹AƒÆT!A¢ZŒ=uv_tñúõK‡-S'.9U«%ˆÍ$qøˆ—º6Þgº·ÉUÿÓý$‰™G½‚UIsG8~°÷n�Úý{·ÙfWdq½õ�x…¤±… B@�ÆÌÄÃÉbˆÑÆ!àäcO=(š5ŸS ÞVX]ñDøÏ6ˈ‡?ä°Np�+OPÁ…ˆ�`Wω(ʳâSÞÑÅZñ ÃŒ,›âÄ Fø€DS<"�<ªÌAÄ�D‚ƒ’I.ÉÔ‚>)6²x2Æ6aÄA‘Ã#ÌôCLi„X…npΙ)ª¨ ›iQŒ,‚<á‚NôpÄX1Æâ¤#MID1¨a¸aˆ‘‰*y•rò�s�+�Œÿ‚ ?8ÄGdzĦ#É]t!FYˆQG#‡&šdOKªI�‰â‰Â†(°0©>ä‰h0²�=æ€ÒÃltA,d¸Q ª©ú´â»ÙÓÏ:¼t2G0ÄÀB Näàƒ¿A�ÄÞôc�,V`Á†^€Fd’ »)âäZŒÏ·Õfƒ½e]愳‹´F˜ð 5ð r<øpÄV0W?ßx�Ä�l”FdŽY1V|ÓÅ(ƨª@ø ÆÇKƒG/’la /Ü`D )óà¯Ë>ôÐ 6(’£IR ÙE¹e„QêÄøÐ…Ovζäš`E‹ö�ÝÓEN8¯ÿâD )¨@CÕYc‹íËMlBŽÁí�r„¨UdÑ…]¤1ÛnÃm1ÆpE(ÖftÝͱ=蘦É0P­‚àX¦ì‚áAôЃ(Ìà… X\QEä•W^F€|ò3Wo/kÓÜE{¾ôf…5?� Fp «¿ ø XË΃[8aÃ&ë,Ï,T°¡ûîZ˜›ve`<Š_“kõt.Úò‘­SM)÷®�:õÕ»�SÖƒ–l ‚G?Úa�m ! »‹ ´ 6ö…AbØÉœüh—Î¥£b�¹9vQˆ- &0 N¸º¼àd5À�ìf8…N,N9äE°P.œËaëc_ðÿµ•øÅ­$_ÑK•U»¬ƒŒƒ< ½ª°…,0 n ×Av�蓼ÖáŠ1àŽ ‘ÖÃØW†3´ï”‡Qò¶:ÖQ ªãWÞ’¼¼™Hd�@ƒP˜‚®7X X0Àzq ¢X?šô L]A »#–È@6žá CŒ‹5w;Ú�ù¸£’à"šú‘†šà VpéMo……\� ÈÅ”áà‹7èDøò‘œ`Ì!We«‚ˆÅÉNºq gX‰9Ê Ž„~A Z»X)št„ƒ:FØ€`°é}�Ó¥")@'ðà5˜‚+ð¡~Ø‚ØîηÿLµq²�Ÿå'SDRšDY‰bË*»¹ [ a +(Á6p …ÓSg"yÉE'ààj¢HG?øÁ�åx \Àä²ð°0°/ kˆé@ÛVÍ#n¡)ŠQ^r7ºè¯h°�”3u@¡ T`=]rÔÅ�<×¢u|‚R8ú²PÁ—~2¦Á#hMQ‚Ó¥%^¤Á…œv`‰z`¢�91ÊT§îr€ÿ€ª+W?ý T(‚ ×O—ºñ“oxÃä ‡Qˆµx6õÐðâ»üc»è„F TàÀ6Ð�|à'èÀ Ò©´–—5ø�Æ` zÿ¬ýƆà…"!“Äêj@ß90Ö±4…ìJöº#Ùã²×ðÄfP‚L ¸0@Ú¨Ö0X­F_‹ƒüÃO0…9 ö\{�ƒO¸Â¢@Øàzõ ‰}äpˆ™Ôš#Qš@Ò²yôƒ§iB V�\€�Àv1à]¨öN§k[û‚¡ �g=KÚtl"Y�oƒ[Á¯Æt ûÍr ªÜ’ÈEiÊi .¡�@$(A @�H@£-í…1,ÞÖ¶–n|°‹vÔ³üÀ‡)Ð „-! ]X1WýÙÆ—‡˜ñ(kL’�­cÿŒÓÁ@ëV`ð€$° '¹)TájY[½“¥` ²PŽm & (l! RUº�>¿Ô 1=3¡f;ø#–5X8\�†� Î H5&0 LT´è…­Bt²ö­Ü œÀ +÷c3ý¨G8æ ){w”&֘ˠ5àw±r°ÐÜé:~š#lªGi:Ñ„ÀP€ à`»|mbý�ZS{Ae DgY9ʉ‡9Ø /Da°“^f¼ 6—6ûÙÆµCòÀéÇZ;²1ŠÄ¡‰@w¹!pn#KXÖ³î@»W¨²à'ÿ‹�l°…](úøŽÇI·D_Q%›àjS@kÜh/¼áÉ}¸Iœh‹E,�ðv¸ËM d È(lÑl†äðæ h@'>,ß0‡¹–s0„" A¾º3‹ Žß7$Üçy¨„c'¹fƒŽDB{›2p M:$ŒdüÃê+ ®i­üàÉ 6°ù±Œ$! E¸B䬵‡áàÄ�6ìЇ<ìÁªp8›Iò|¬£Žáx€QT éÿ�ºE9pZš /\Ý?NNƒ1È%Œwz1$@á¹ –æû9æƒÃ¡¸=—öÂ+¡ qÐÝÓ¯HÿÒZ¿Žò×Q» Å )à€ YêV?ç?H| ŸHàŽaþÒÜÁ Reš7}cöyÌg€}vm¥÷¨ç}4fw"�íP¦ô6Y†â° ·0U0#‰gr'÷-ðV ý�’gžð²-™·yj×Rl¤‰U\vðƒÚw©t«'x�í�4m£Mý@áÀ ¤ÀFà`óWrëäZ/ ¼�ÊÑ9G 0I°#X Xœ9,åR�älÄ@øƒ¥7‘Ð Ã?BgHh®Áõ qòSÿ8&ÇTcP _È1bÿÑ [°Bi‚•U“¦vPåƒrØ{�u¨z(b�õ�„(:…$ö�Júà ¢p!/pöwrNP ¶…"›Ñù@žðñ*ƦbÉ&\›‡r@}@{à Ø ¢xmQŠIxŠžÓJG‚[øVbÛ€ ¥`S°KÀ¸˜|õó‚½È Nàgè[ôµ;^PX†õU¡7zʸÍŠC8�Ò8�1R�©!t‘PøÖ(•! ¢° ‡BR®$/ $ h°C0‘_9UàøR‰…_¢w�ù8ƒ ûXwý(Y¥H?É£,Û¸’ø&I­‡|ã³pL¸SvHðŽÊÿ¤l-MѤit°p”†€‘�za¨ø�%ù9•1•$Æ’+vüà…ý° ‚`¹2PàŽõÅb0Õ“Ó6m@)”D �g?r¤”áÇ*¢Md•Rùk›Q?üÀ@äðN}e7˜9j·lõbcù“ 70†`”�&¢–I¹”'± •$5—tÙ9mÓ�`�¦R^9iž7˜™6– w˜‰9”Žà˜v�”l) BRϲ –9—»È@òæsv‰“,æL_Õsd ”†’Љ�I�éš’` òð1vt™Sù…Æ |ðú$€5÷Ž:™‰¤ mÃÿ™ƒ�Å9ˆ€œ¬ ™¯ –IRF(’�8:é° s0;ä|™‡“jÈU�žÂyšäyžC‰œªðzE´–ͱIRUy‰ŸtébÓVP†\9_`¦lèReffgvšåyœéé˜ ÊÙš Ú–ñ6b1JRŠ1›Ah‚"üP?ÿPœ`9 N°-P@_ÁÅâ0›D0%œãi{€虞ˆ€¢*ºœ´Ù £n"3šeŸH4ðiÓD@;â|Fúoj´¤Õ“Éhš{P¢ y Ž€¢´  ‘¥.š¡©4�£v�P… cNÿ�e¸-IÀeƒFU\P!꓆™žäI¥DI § ëð­é§,¨$5¨!:b‘£(’ëV`4à¯Ó/> 9�\°‘œÁé“§YœRŠªé”€ { %I¹ Z ¨u”ªwó$§t£)BªX¶ÁPV@?ð €PfÐ § w "0%ž†IžyP¬SZ¥Èz ¹@Ìjª)1�UISX¨`¨$•òDð9ààJ®çúÍ�Ý Ÿ�mÑTšñJžõJ¥yЬ˜�¯Xꬺ¥È'¨]š�ñq$Ûh²�° +¶*®æZ¹ÿðAÊÑÁ€ • ™ÆX ”¦×±K  º¬Hïtt²©š²ÿú6++/$f•‰»*1àЭà‡G˜æ ­ÀsŒõ€y�˜ é©E{´æ€GkI²§š�H›£Ôz�±£Á¦ÒÐ D Ðá-àâ¬à é@™D ‚ P € zЇÐj;¥m ª¹`H‰45Ê/iJ©J™­g­pƒ"ý€ w 4(A`-Z Þà N"Ÿ·Ñ ½0 zð~Ð�`¢'Š¬Éª¹œ+GžÛ¡kG›Ñ¬H3i‘(Iˆ°@B >�C ]‡ öÐ[!?‘ÿÁ@”a¥� �Ð~€¹yš¬˜Ð¾¹P`P;J [w¥û6L–cia�’´ ? 0Û¢>ðiÐ /ò½±QíÐ…aÌ0 Ÿ� Š€¼¾íÛ¾øZ¼5¿+ñ’\¿PË£V™cGb"œ@A�PAàfp ›ñ´Ÿ+Ÿ1l¸%ÞÀ ¼p ¯� Žð F˾í+ªU™D¼Êk¿Ë;õ@›c0I$íð!A�yWPI ÞУ*û,ôiÃè"É� °0 £`Áɪ {Ú”)¿È«„l¿�á…­˜J^8í\à\i>hð æð"]ì¹óÙ(_Ñ ·a¹ÿð £� A< ² ’ÔÆG¬Jœ�­7­ø6ý€íp [ %X€œ ‚‡§$�pÓ(y�Ícbë °  £€ µ, ½0ÉF<Ã$A·JøËPk"ø–JL†è€ l ƒ@àà"‰�n SYM"ñf3'Ó:·Á':}º)9^žÐˆÿ¿ý„ʬtª¶la£Å4ðì¡BµLn×õA| áb›—½^sÁ…bÌÊuðMFŽ,|ŒÑ„[ �BÌ1K<ÁÜa`hÑÞ+ïUÅ?�8¢B™‘c ?üáA�s­ÔÃ�$DTÑ¡`ÜñIˆL�x�‰$&Ï6¥ð1Å-BèÃXø@Å'ý¤ɆmxF�ŸàÏ_B"tT‰w\“O<§ð`ds|ò˜EŠY�™WUÓ Müð„Nä§~l0Ò‹<ñðbÆ‚xáÅŸÞ! :«%xÐ?™¡Ó‹ Oa¤GøÿÀœ1 A§`ö#W°áia„: Y âd‘‰Õ�9¿02…«®¾ ç¬> !„sô�=äxòD¾zÁ°`�!j;_ŠXè@õÔ3¦™õ à FÔ`/µ“>iÅÕ`†Ž)O@qE¿ì£|¥®AQ¶Ž,h,ñ‚ /Ü[¾ùጄƒi<²ÜÆÆL#ª ú?øðS�Ë,+óT˜¥ƒU8®laÄ /Üpƒ½ãëC[8ÑDÇóe(Ut‘…Áa”Q’¨‚àÊ-¿ü²Ì\G…9®˜±„ 6Ü`„Ï@óÀCqMÒNm³˜\t…O+õɪàÿCÖ0×ÃõQèbÌ&N„pÏ4ÜÐB 8ØÛC³Nþ�c<ÎSËv²ßMW¡¨Q“áÊWûÄrà2C…j;ÕxÄ!Ä@à 4°ð8ä÷N>ù�jÎÏSø„- kÆè`è}Æ’Ì¢²êø´•±íD/ œ€‚ *°pƒî»GŽƒÚ>ôp„ÑŒ�Ã�S™b±èUdág¹d”q†g@"}©>1V=æc¬~¬ƒ�ØÁ €ƒ€�$ßãÌG¹j±iî“G;úQ�Gðæ  ó‚ý€E2I¹>l|Ø�H°�ân€ÇMè5ãWxs´àä�\$‹tDR—¿}Ä·\;°.8íiÿ fþžÇ?9àÁÌc;Â5ÖÔcŠÛáÜ:ja„@¸€q‘{ܶ¶ò³Úl¨ÁÙH£¦S,ÿx:&a�‚´im„ZéôwRó6V½}Ý-FÚÛ×vùö)á�ÝHP‚ LÀú-.BûÛÖ„2Ô�-€à?Èw¹4á ®°.™¼ŠWX N­Bw# 5©)Ö¤k0ï:¡­¬jø"öðj*;Fl p@.°å 4¹mñþàà0ÆGiRœ`£�ÿsQ™ð R/ Ì x“°ÔÊpäÛš½*ÔªF¢e¤®£ƒ+8Àe0 DàÑ� Ú„bó¿ÜüÇ÷fcÝegF�….åñ¤Úãs°Â?@J2‚‰0 O+ážÕÐç$ËaÉéu²H"ÐZ< ýhG[ÒÖ\«B[Ù\ç"…i¦~`£ÁÊÂÆ#$dv!ž÷«í‘‘l^9衽À° 3ì>ìŠH ð;TàÑp´�æ„¶’Ì'Ð4Rbi¯Uµ¥^‡$ÆÀ`²º WÈóÞ85>+¶Âæ¥Ã*‘ëõnd)º$G-Ð`€ÿÈ2£pïcK`:M(B9H8{ÆÐý‡ÆàЧð£Ô˜ÁL)ÊÃ…$¤�§&÷\R$ÛštÐzÕýd‹D’A% A �€¤ü¾öÆ·, Ó²û»4×´sQpèâ ¡Þ`ÅâYŒá6‚å®_=O’žð ~†zÎÝñ {d¶X €­Ý�¯@Ø+°od[Óšÿ`¶ l®‚ÀÐàóŸAjáÛR”T Bуùà*àÖˆ­ç_nÁžêaY8X14Þä;&@ÊK€ò0ÇÀ?šùo¾ó8WAiiPƒÏ» @ïG:ÃñÐH�Q&ÿý>Ud¿Ÿaöå¶ú0xŽãž#\ G5lÁ d�Ä÷¥7Ëõ�ù…Ù6·imG1PN|° ÄtIP‰ðI@GO—ôj±wBç÷p�~t�íWxë¶a\³òW |0C\v�o i2—y4€Ð7c7@€1à¼0<ƒtJå ©—@Lÿ°w¯w�Ï3{(v°„øyP ¹ð~ìå7ý$ô×@`rÀ‚:µ|ÊçVÚdfÿÐyD}? 8<¥ñ° T€PHPQpI®'RFhR妄‚—N XuÑO3%(ðÕ´o]ø ÿpcØvÿðy1€¼À9?÷¦$V‡qX‡Jt‡n4UN·‡x°~~8yˆ�&ˆq«³:£äa/µË  M�J˜sË×SÛ}t?fp‰œƒø�NäÐ â‰th‡2:±g[�§~¨øˆA/S‡õ�&òë° ‚`Å¥|=å‹Ýôlÿ–èI$¢0DƒEPWŠõnôDkGhkr@êÇ~؈�€(…Ñ�\#8Õ³˜Yë`M° 0 ')ð¸6À—è7I‘í€)²ðCXà‰Ád‡ÿ¨IYkµ×�Mø�ÿð ©k¹g,_…=ÉØ.ÍdSÄ9äð 5ÅEÝô‘¸NÐ/ɸ†IµA¼À9À- «“xóndd'tk5y“†0:©� a’�!õÐLäHÜáa‘ÕßÑ}³KS�ƒ<¶t÷LápO€ÿà‰[ŠmÔwd �Ï#–Ù‡ØX–gÉ�A…þôÍ”„Û€ ¥0jˆœA*Æ"ØÑW$ˆ žð©ÆE0@ µN�&æ§0$¸Ð2…ú‚còà c0NP0ŸH‡¡ø�°©qX©‚Ç£Øè›šº©mꊧ2S¤ÕP ¤@ …@@$:%@q°2ÓÃ礰|% á€H ¤2[ðW0!Ázt^ÊFZÒ<``ž³¡¨ˆ©ÐŠˆ� y Ì0Vg‘a,æáp ®°­XpẮªÆb»° _+¨OZS j™¯b‘NÁð?€’¯Žú¥'kGÿ†~µÇ~Κ©+­Ü0ÑOA&°ß° ¶@ h`6yê§@N*µÀ2DZ_~Z}|ßj_iøÙ)é@ŒÐ�¢��ú’äù4~2RŠE{æ¥ê¹³k°™Ð² r ]±Õi ’ÀKÚ´�rЧ®€]öà àj°:0|P $°~óaN�žðª%CP˜úZ›REŠç'°gš�sk°‘�°Í�·QDŠê ¦‰§M»®O:"ðC”Nµ ®:¹“+¹ ¹’k‹p îòéàWV`[ XШGWCȯöó•Ôˆºr[¡¬ÿ ‘Ч î´õÐF» ®pŸM€…Lꤒ »;áÀt +@$:|“ ®Pp¼% Ëð^PÄ`S0N2²¥ûŠÑXº·‰qJh:û¬«©â+¾§À ~#ë°ä° » Jk\”»+¹PP©©Ká÷ub°z.<| y`Xp àÐßÈ spƒI !H‡Axî´Dó¤7N„³�¹Tœ¦<‹ ” ° ã¦Aßà™÷9¸yê¤f\¼°º$P „F@ �_œ!KÇ ÃÀG@ ¶�õ¶ ×$o#IŒ®ÕÄR �aÿ K{*¡»ºâëŽð §À ]L­Q ¦¢¸[¢%м&fYÇ ü`œs—ePrF€+@oLF@ ôé° ¬‚N@ !0!pÌ`‰�s u`:Ƥ‡:*x ¾ ”\É­€ÉãÅ¢ƒ¿0²N²r¬ÆhÐ2$ Šæîœ_‚P ü@ Ç+À`°ÇÕP=‡Ò¼°&å1ÌPÐ nà Í0 ‰PwàÐ|ºcy“>Ú³“ì”ð ”°Í@›¡ ¡Â,¬®êêÂ~tVqð®Tá �ZËÀæÚàÿðö®pËË`®ïUè ŠÊ5àDíÄ\=s`3DZ¢ uP€ ¨ë‡ÕܳXŒÍ½Ñ­ ! Ò ÁE`SêʤùµÃ€b ò\jÕ0 `ùg@° £i ÀÃ+l¬ƒSdž)GÁEH]àÈ�]A¤æÀ ° Qín |h“ª;k¾”L ž� ¼à ™ìj|Y+¹NºÃtŒb%P ca@FÞ @$ ÒÔ`7Î@�¸ªÕí°NNQ"+1@Ì0´@¤é”=ñ AßQ ’ €0Õ6y¦ŠÕíÙ”ÿÚÔ0Ú aÎòÛ§È‹Ãz ÀÖ×öÃå �r$ðœ¥&° Ö0àæ*Ò‰’ÕÀ´+>`Ô†]!p é`3ny'™‘ÞÐ §`‰·hÕ�Ñ�íÙŸ€ ´À âÍ^¦±á²w|Ç8Ìh¤ ±‚��e àuq�¹ëð`  �K°ÏâÀš˜Ò øC 1bÔ6PJ àØq�,^bé°Ø€ •`݇�“9©Ù›Í[ý٘Рþ7DÂ`âvü§rŒÖ´¬_àh�J$J¿+à{'¢0 `Þz¸}-à`,ñ° `2¢CÿCí�’à rÊ«Ñ�é`¹Ð ™pYþš:Ž€ÙìÝŸ= b®0e¾÷fÏ;Üê&~O{¸«$›u|ð®æÊ$ÀçP0¢FwÅé%ëÀ †.!Š9àc0lñÕ°ëqO!ß •p•­£þå˜Ðí­ Úgîêänâ±Þêg¼ög¸Ž|@{.; š#òIö ‰`ÿP½Â [��0 »Zeéé °0 •€Å”¬Õ_þÝaŽ çøvæ[fâ«Oû´X+¹€ qP ÿpÕ°çÃgP@p �q w$wÿð†H°¥H� ! æ°-ž Ÿ Ì ÄÐ  � •ÐÁÜîíÈàÍqñ�¶ñ_|Å7â$½Ë�`¯ñ�*yð @ åò1ñð ©W5_P ið è�ÏT^¢éÐ ¹  Ÿ ¾¤þݪ€ §  JL�o-×ô\|ºkSR[jN± üK|ÐÒ|à> ãþT@-�ü8D�9†£“%Ž.ó^¼jè€ ¼p CÏÑÝŽôo�ûMoøÈ›ð ¶A¶`ÛÞ ® Àî§<m^S DÀ+½"?œÀ Lýùîú#2YÍ”ÞÙ£ð Þú§ÿ�ôš\²û'®©D@�`×± ±|¼/lJ° ØýÓ/æ [@32’ X�.!/ß@‚ þ3˜PÞÂ|òìٓ׎\¯V£N]ü•.>|ü<&™/ÂH’%MV 0ÁA†€Tû×®_¸%&X¨PÁŒZøúý´WÐcÐj|„$¹Â抠Vé쥋/äTªA.´Õ·\°ZÑ2—_>�©4™¶d… )/�X±ìß\rh@˜pAƒ†_Âùü×ÏjÁ‡³æä�†ËWèÆxVòÀÈ=â›û0â:ríâ!$Ëo2Zµjs^¸�©¹ÿÖ PoÿÄxpAyýd™qÁ…‹QÜòA• zôh�sûå{øøóÜÐËE–N{� 4µ^ÇÈ@ 2T�!â’­Üý¨+Œ·ÉŠ�4fD},5ôOÉï߇,‹ŸŸ´Ç½¹Æ²n ì²Ë€ÐXǵzD!/óR—ŸÄñ ŸÊê§�v±‚"$ ºôóˆ¿þ¢ªÅ<è\ð$ X"~þ©'œ JÈ`‚¼V(—#*ðÂÒ!§*̸ã—ë©Çª©jM¹�ºüÒ2g¤q#ŽT0G’*`†e~to&(rJ@ÃDzjÒK‚â¹& *î8e�+³hÿË êÒKÉD$5Gªà�jé'Á!2ƒ 2 r‰]:zH°çBŠç3æÀ¥ û©gÏD�Š´Ñ/[kqÌH%�´RQ`-�•:]!P7Y‡‡ d¤¬\1£lâÁÈ=M¥M0o�+Ww-hÒ‘&Ø¥ŸuÚ$� ,0Tc—@ƒC™šIqYd›¨~|µw7¡ 8\q'øu�MH(á"?¥#HYF  ÁmÁÅ©xÆÄòÔ‚ÏX´‘¯S3''ª©å>-Ò݀Ф–s:J6$—¹e�~Æü¹¬“‡Æ±× P. “Nc'�˜bŽÊLþ{꩸2$ºëÉÄ�  0 N:‰$ Rl©†#“uŒÌ Köºn^'…yƒ˜‰¤s Ԯ毷ò3ŸçJæÚnÅÓL5ÔÜ5r¿'^&œu:Bq¡Wì(x<¯È/â‘Zª¹üÌ57‹óºÁ>­Ôèt>(þ 0×w/Øs”.ˆý`ð¤r·ÿã=yë<ߎOAÏàïZr·yå¯?‹yà/À€Ù› rø±Z°Â±Gß Ï?߃•nࣖñcöüôï_zí`8‚”]|ŽŽùî7@õiïy7 E-Î�ÚÃ~¼^þ"ð© ôuQià!˜¼€!ù ÿ,|€ÿÿ H° Áƒ*\ȰaC{#BtH±¢Å‹-J”˜±£Ç� nŒ²¤É“ GNDɲeHŽÿðá[鲦͇$câ«WO¦OŸ7ƒÞŒØó§ÑŸB“¶„yô¨Ò§7åÉ“))Ô«�VÅ'•êV|XÃb”*ï_½xñì¥ýWV§W±p¶5Qž½²ýbNÕ·ïAyh›C×®`Ÿ{ßú],°Z{鈕òä*œ]ÄV3¶‹Ž×$.D¶ …/žÞ¼|5CÍû�µÀuË:�!BF4‚¡Æ×Ï^LÕy NœàÊ‘<ãÌM–¢$Tˆ0 gJÈ–6àîJõý8Câà…ÿç¾±·cµñÄá’4‡ tEáfIÙrLv¶v«zÿüx�ñÔšoñ Œ+m<áChl!‰7ÌÌ!\´±M^R Ö~ õçß@+õ& Wí„cËfPAI<Áˆ7æbUTøM?e͵!‡yXˆöôÓ~íÄS�)\8D:\Á¡¤“N%O$¡E�YwÔÀƒ»:$A±í¹ i\Qŵ“†Ìí§s�Ü,±ÿÈìŠ�މ"Å?BW¡…¾!«=ò6ÁMp€�EÆÈ)Àp 8ˆnsK„F¼²N?üôs®Ð±ÏF!“12¦«Æ>üÔþ÷Ný£¬éô"ˆ 47Œ>:ÈûЃ@:ñ5¥5i1.æÐ„Ø4`Á 68:\ g=ÐÁ?ž0/Ö…ÃD�„–ÙaO_lƒÄÁ²h†�âs Lʘx¬ã[xÁÿNÀ‚"±Hœ_ P¤ʶ¨›�ÈAŠ#Àn…Uh¡¶À@†2�¡ “ø—·n¾’o&Ž–,ưƒÀàs “h5�„ðð3E:úQ!ÙâXXáþ¡-hkm],ƒäP²]õå{<�ˆOÚÁ–#a&0Á @:#†nŽ6«�@r0„Ü BÂÇóf¡¸.Ha€]¨öÖV†Z¶á˜Ò•ÀˆHF$ùR5\Ñ„(€ãç<9ÇüÃ�ɘ �* þá‚Ö™Y{^Á:™ô#spBXÃÚÍ^¯va°©ÒŠKJ¶Õ%>=ŠTâ{fXµ6°ôõ°ýèç2ØÿÔ‰.À�–7+à"TßË9ñ(ü# ÿð¦ 1›Y‡ža n ç†(Z’Ðe´¥-‘+ø°‚¼rà|5AbkO�¨@ ÎÈé—ƒP�±¾Á?Úá‰PáÆ­lËz=³Úô¹k¨ƒÂáYê†Äº; i!BSXH*:À�½š€¼™­T bXÃþã¾e]*ña 5%¬Zè‚ )õ8/ªá¿k€n#Ä1T®(æ$‹] ŽR°±æ€�'ÞØž÷)øÇlk‹^gâà50C/„ô<èõc[Ø‚’`ܲV-&ƒÔÐÐס“»‹�wDòý4ÿ!B ’o ²Žj�%°À*° y¯_�l^8‰ j4o)™qHSÀbâÉÑÿ¨† €�L ¸@Ÿ7Ð…|n“JV²ý�÷ ˸f Ò! H È­¬¦ê_¯Ar¨'Ä!¬l7dÛtévª¡w�G� $˜€&�îY³;©àm÷?L0�Ø6Þ'ÿ¯š@n€4T#zÉ‹ô¦�„G¡ É-ä³÷•ÙZ’Àwƒ!¸‡mR/˜êö]챎] Á`@"@õt'¶õ@H>òxw’¶4pAÔeƒ&äÛ5y±/¢Ó…+á*&`!y^Ë2ŒÙÓAÏ�Õ"G=ý‘s;êʇ‹— �Õ#  Hø¶õþáWÊ+ùëlÕæXaà’�®±"p! Q°tÛ5]ÀDÚ­Ô¦ÃôÞð�|‹"ĉÈka $€ úÏxÇû9òà¥ü…‘œy&–£s� ~€ïP]"è`„ºYóÔW!Ós¯Ýÿ?Èð�†º!Æ—èD�cÔ~çÏpèLL$àþ Øs†OuÅòöÐnË—d1X7@üd‹V ½>y±U¥`T�/V°THÿ@wå÷›…~Gy0{{Wtñ×À$Õ @@@ `àS7uýWÆ—T¶¦u#wÿ€(`H-ÀM0×`}f�M£0îaPèBDKht§"™ð~|gtQÕà K hè0`ƒ�·9ø’ÇWC$Ét^¾vPV/0áL­q9}tT0#D°lEÐMÝd=`ðþÿU~g0mÿ€p!8‚[8j7–;"$á0nÀ÷‚ ƒÀ ÿðçöÐxŽ·ÿ€r(€[„AxrêE/p„º!ˆÿð=‘¦B€EV¥\³“ŽÿPÑPoðp‚"˜ZÈ…E—‰Á�¥ +@e|�¥(Šðÿ ÀŠÿðq°˜u“çƒ@¨a¶h3/Œ ¡ÂG€ÒGë0 ŵ(ÃXY42weeVgÐŒÏ�”(‚{ [HZ‰Áf áXýà 2 )�2h ¥ø¦ÿ ª‹r(r™$$—µÈdaKðºá�‚®ÿ€'�ogŒSØEñŒk  9�‡ð�]á… Á&Â3à� ƒ3蹆ûW’8øŠÀn±ˆk~U‹´…^ÿ@4ðÈ<ñVý° ÿPPÃ�b5@Y0…=×Pÿc“(v`ë—{p”äP{ظ`�áð‹ðj$@P’%X‡u®(‡u„qd1 Uéei°‹0'>eÛÀ "ù:¤i�Ósÿu—éG|Ù—pŸ˜I9˜ =2±áÀ{%à˜%àÿ@q%)[)r„˜ih,�, h[Ÿ=?õ)óä  5 ÿð–¨WY^ÿÀš�h—Ô6›tÐy�ƒ`›¸‘!ª¶ôéáà qP†S' àŸ‚öƒAh€ÿ`r¡ã1Пùhâ#íPí0 ?À1‰—ÞôØ“Œ>{k �{™ž~ùíy›ép Ñ,³ š@š@gdgOwn@`’ y“÷W?˜ac©A1w°‹Jø†a· .05X€¡r9KþõsÏõ”¢ê¹$Ú&š›™;SQσ¿‰0ð‚¼>�Æâà lĘ€œ•Iyãuu€ÿ° Œð<àc’v³@9ð:oVÇåM†Äs®éiéÿ‡…}™�† ¥ïGZFq!bN#·@¦Áy%� � ŽÑG¡U µà[銰^y§¶Ø1’ð<ëЋùˆ�5?€šß‰zQ¸\µSw?‚Ò˜"ø0©·  à�E’ªjŒ)•0¢šµ=Ø$bßà¦;` 0 °µkúKÐ aÚ‹fsýÀ ’�SPp*„zˆºiuWf@wpt€…ëɬ†0” ­—ê!ñð ¶0Oœª��[  Æ–{ŽQ ï'°®&U/`ò:$�ØíÀëà mybEÿ Há)p{VÏe…ê÷¨Ì: û¬–Šáa$¢`+P£�M»­ÜªÜʱµÐ¶‡M©†à hÐ+ P�@K ¼Qß*ñà ÑQ'†\ǰ«Ébç¡é'�ËÚ¬ƒà¬ïù°2Ç |@îÁ1o7·tûl-ƳÓFmêç¨�Ê·~{¢H±‚F I ðL›¸5:P` ¼T¹°¤�µØ„£�õ°×P ‹Àž>/Û>aØp.ÿe�Â)¨—\u ¥‰>»~´I¢}ë·k´æ° ·Ð- ’à»L¼{¶gÆ[T   q�„=al¬#B"³0z�;1”ôSæà h�'äk¾+†Yé �yû³ é¾ïÛ°E ©…ÝÊ­Â  °¿0LTW4L¼ |¨Xk ‡Ù‹?%bBÌ:­!® ¦ðD@:c³†ÊÁ‰Z¬µT~Ш�zë—�*´}‹&­ÿp&àäµPŽû»0|5lÃ8LÃ;l%`vC¬ÀBs‘¸0BIÀÄNliL¬GÅp`Å?›}°XªÅˆÿ¿'L�«†�±À†°‹gƒÄ·¿MKƒÐà5z°‚°–[¯tlÇ’0öÐ sÐC<Ù“ƒ´šŒÈE]DfÿPÅV<›#úZlˆÀÅDëÅ:|±‘|±ÛJ|ćÉ8¼ÉWiÌ¿KK° et{ᲄJ›ðŠ"Œ©)r÷B¸¼ŒÎ8ȽŒêyÈA»ÅÃÜÅ—:ÉÉ,ÉÃËÌøœ¸gì@3` �µ  gÜš†¹A¹ßS0K¡õ€¥àDC°&Hð�aËJ;d@~̉ê\¥ì<¢ƒÌð òŒ°±+µÃëÌù\£ÀÏ@»=ëÿ°àèÆÂ@@° ”ô �r#käDà¼&Ã(ÈU·´sÎÉуŒpx`ì¼±ÒðŒ$]Ì—êÆ¡ºÂ4œÏÏLüÜ €JÔÚðÀÂ�K•%àrÿˆÁ:Ê¡vhðGÑÿ ÎoW¾+öBíEOÍËr0ÕvЇ|ÕY­Õ% n<Éô|n,�Éüa €ªf»² éf�ÿиÞœJ` ø�æS×|ôX�ðO°&¬áéB“"Ø ‰P-ÕxÀÎîLÂÂ<Ì‘à�0 ×…�}¼+,¼a½xl8|Ï]œ`qÀgq –n�;ç¸ÿàr¥¡GW… N”\ö6;·OJ)ÉX—Ή¢"Š¥$jÁ úí‘0 i6ISÛªÜç¶g,}ÆÏ=¼5ÙèÚýÇûÜzç´5*$À è0yÑ¥ ¨GpI°Æ•ÔU@Î fÙó‘øyi¥#´ø-Üûý ª° iàQÃÛºg+�Ï0üÉÄ™" ácZX�N[œ¢¼@Ã5êë`ËP¯B² M€<#>}}ºA)Z ¡j³�ˆôzx§—TÝÎö-´ù­ÕŽà”`Ü=ÃãÁŸèVÃ.äûK•Tþü*¬_-àýÿûãˆÊ€%�2P ëÐG߀&>À*ÿ 7{\s«¡±P>÷�k@¥zÙÛWúÎ#=ÜsŽãØ`x.—}^ÙT×´`" ;‘µðÕ@Ã7 àÌÝ¿ô̱ л€ ip{-P “\)\ð\�í؈�Û6õŒ0‚ÿ°Øˆ¬êÂ-çtN ­ðßÙÌüùîbmœÿÐh€)<+°+á±­¢*ÝÊ4ȱÁ[+p*ƒS:XãB°1‘B5ÒÔA~ õíϸ�{@ˆÌ؃0ÌZ�sN Ž€ ª wÞîÌlë3\ÿ�<=é`@ÿèÅëÁ™»gX¼“LÖM;€.ªÀK”Òç6 7!PI¿ôipŒ@w@n@õUxž|‰ÈånîZ½ßéŽ ­@'_b�Ï“¬ÃÿPÄV7ÿà¼p\¼¤Pg[GáSÞ´F ÂÂKìKBZcô!à!´�>œPmÐn°YÎxžë§õo.´ Ÿî”€ ° öjFöe�Ïvß �UÉñ�9 Ù   [ $à´Ã$pYŽ|ÉðG°1D_ô…ÿ`ü0 �ô)�Py2ù® ´Y ç›?çžO § iÿ†m¤_úÎMÃ#ÀëáS®@yU¼0pp}×µ M  0�I 1Á× jq$9\¸ÂE†ÔI¯�={ñÌ…Ë4©Ž›€äȱC‡ÎžQ8÷"‡‰í2šMÏÿœxòâ‡,ÍÞ«Ûk7ƒá‚ªÙ +'þÙ€� xà�þÃj#(Á€ 2x…#þ‘‚Š!v†"‰¬È寢sÅ«'¤óÉëè ö†L2Y©¥díЬµv�3®òô&ø'Jžb^FÉzÖÑ„‚ 8è2ƒ’oéç*|ø0Û LÈ€°8‚‹'ŠˆâŠ"¨ã—x'ëÎÿYüŸ€GôU,·9”OdTÙªãá)/h;§8tÏ�€tÓ %©ÒJ!Áƒ  ’éçÛ~\Y tÇÖ °Ðƒ$P! QèÂÒ0Š9M¤eáÇóž—�^}¨ù¨œ"¢ a¨âÿ™˜zT‘žˆÈ#3Ï’ Otô€F5* ËXD´Œ @À šT¡ºxàø� °E�ð[ µ�†[µ)/Œ ‘= bæ2òÀQ¦úa�8…²ÈÄ'¼×ŠºðDb)|Xã:ÓAd)Í5f�€Vàbu¤P‰ZÔC‰Ò­È€þñÍÔcàÊÄ–” ²@  š¾¦/} ðÀÿFá�™AÄH&}"·vnqyé VæÊ£Ž¯³<1@ÈGq¬ ˆ IP‹¬…ã–®t¥c»RA¬£ƒôB$‹�QiD=m(%Ú5Í5Š¥µ«@[!6¢ ¶¦û�$àÍåGJà� ÖQIŸ®�YalØ.ÒÁ¦%I/D=-A×Þ ×Œgì,0€�·]E)� Áÿìø± â*ÚÅ ,@Þn©«cÁG)´…W |m’^s·˜_Åí7´£Ío +%¨Ú"‚jÒDªx’¾¨ü) ª”„Óšôih?Òñ,`AähîˆXÿv´-b…Ä?ý,ÖœLb«˜ -[“+d€-ô•—*íXS8¦`€à´Ò±%˜H¡r<â…°Lí@´&ý>ù­QfnR«Œ ôŽ@;G“«„ò’®5®dHÑŽj°áœÀa83@<‚>¿XÄ"¶Q‘£F±qv¾ó©ì¨JQ Ïø!)*·Ž%”`¦ÛÏÒǪ#„³ªwÃá�<¶Ñ«,#¸ H<ŽÆÜ<ƒÊ¢N1©Q½ìü í°í�L'¶Ð0`U€Ôn /l•` µ‡Uðq VôçÑ5vºÑ¸g5¶mÙ*‡ 2ë @°®$@R\¦jH‹ [ Ç-ŽÿÍLYÝ—àžÛ¶ðÿ)àœÊ�éÌ»�H* åXWzlÕðš7Gµ/ÂEžBv·Û)ÈO"îºÛ¤³ŽTÊkG¨B ¤H]R2ã+IŽÜç²ó“* Œ*/ÝÆZ#ó˜T®³y âP ­¡p”Åþù“ƒé>w‰€éx2ï¥sŒcPùŒHm�;^gíPËÄzÖ“½g ¨qÙbS_Êy´©U�øäMý§õŸ½~üê�å÷�ìÕ³#nå*ÏÞ?°bÍ¢�;±Ÿ=’ñò L‡®ÝÔzõäÒ¼Ðn¾~yí¡Ã¥©“+q&Éš¤J¸2Á~˜‘®{Å( ,W<­“—�>~J-ϵ‹ùkæuŒ© iæöœjýJóCRõY{öÚ ÏKîU!\Òâ&jÈ•4½ìÉÛM5ªo«ÀíųÎÕ3i¤äÿØäm×,]¨´ßÒë �Ê—_Ï-Uàã ”î59S‚ä@DD˜! 7äHQÅl¤1‹a>å³| Íga>õ ~é'ÝWë¸2[$QDDÔ�Œ9�äP^8¡†Æw!}ömèÞ?yå•N5¦`áÄ[EfÔ‘N:œX‘„^t1ǃìÑX£B7â¨a>_¹\<Ûˆb†d)…BÔaN<¸P1GYxáŽöÓ•f9R†î�´Ý�� ñƒ> �Ä?HaEâô3K'f‘EsöÂeWx.¤çžn¹×g;ÄH‡ V<±…Hè ƒI02M?áÿ’†¤’Êy•fª©…%µÝ¯ŠõÂÈ6ÄàB>q¢E˜á‰<ýxIrv!†Ytq«]˜êŠÐ….ù©Ý?ëð"I©Oä�.²Ê$æôƒ(fD!§dˆFt^:U·Þf$_IZW°œ9a¡<¸àƒAèPè?H²Ž{¿pADÿPºï¤·ЪH QC'ƒócÏ5‚pÑÅê­»ûìa2‹í�œ�[þ™òD 4/ü@žó°÷?瀄Ì$MA¬ÎëpJ*öŒÌ²Ýí÷¼bÞYa@ˆÁ ^ð�´áÁñÚ÷�NHÃSëàÄ?Šp.(î®ûGÈð�Ùõo;\± u(w“ɰ¥`ÚIG06áhî,Èaç ²7°¯=˜‚Åÿ:^h Ä.¶x®€R<–²c™ÝKK_CË!°Hte’šoE¤S1&`� PºÒئoœãƒøÒ—- d nÀƒ7¶` }í c�Y˜AQ(BJw[�@WY Ó,ô­µLÜ]ÛÈÝ{‹<¶Ñ‰%€ ð@�ÿ�� œY 7Fð?P`Ñ_6p�íä h Šx1ßHC½Ä er›’ ‹UºÏ°†×[V4E/‡rÜÿÄ � L fÞ@�9€�Xú¢%È‚ŸmðáÝ FøÁ,vj/ýƒ’ÈAª W-%ˆÆ§Ùq;Ðäí^t|„â– DŒ �J`Tàff®l€Ÿ çBÈE[0<üÜ 1ˆ#A²#Š1D â^]{÷9ä Àý‡Õ±Žx+d‹wáR=ük�j¢`"@ t^8H¦MàVÑZwÁÚ5ê´y`„4¡¯e‘Ëäeñ*¡Ã­®øA:M7t\ z ÃÕÙÝx­3Ä&Ùá’¶Û!ŽGh P" �„>ô±¹šMÀ}+øœ¼LmÿÛyƒt¢t6 {Á*ØðÿP{ »¡¥›¾Œý‡úÐÆ‹œ"Z‘\]±Õ  ` ððÕzØwi7G]9‡ÇcéDI/`S “õ“G\°€7n)õdQ×[U&é6r|{àŽ—Ø%ÿp |@ÐG �@à€Öw}Qs uc7pçf©WFðæ×Æeë LD€R­–RÍDb/•JƒF/È2h|šC¼€ �€ÿ nèqH„øðo7F]K˜~EÅzOè�‚bñöð 9€CWp$ÿ±RÁGqoðp xÿ@}0|!7ƒZ4Y¡2¸0b·†n¨pøªÔ7€؇ZÔ¥„*°„~(L¬÷›p1;r RpXPP0n†•Ru[Å‚•x‰˜¨‰ýG|ÿ·(…ëP = €l¨€àÿPðqØŠ±h‡Ê6�Ae臼tO8¢°‘,&D O”{*Å…Nô[„¶rPhV§‰œ˜u Ñ%!�€Ü¨à ‘¬8ŽãˆÑPØ7zÜׇAw8P7¢�YžT9¦!¢ðT¥OM§…¬3e]ø…õõ{ЇÂÿ·Ó؉f8ˆ)›@™ߨ€ ˜”8„kײH7f�åÄ`±p­×{aú‘,~#nü8x“"|Sõ%t`ÿÐkƒÄy !„C¶ »P h˜×†ðƒÿ�ªH‡³(wX숋r…>åóè<ö6A{N€IÀgø#^@+%ö'†‰‡–kùyÐn¹epi�$ FP$°µ€ë° š03ð � @h}Azjç” A•Ï�4`gœT\€‘Y¶õ«Pð’�HbMT'Ö™ˆ÷—8�jÉ–:Yš­á‰\ñ Mÿ@$ i @Sð +Fµð/0 �Õ7‹5÷”¥g9DFe�Œ)@øU\Êù.)ÏÙt1‰?Ò)òubéFh†fVÇ�}àŒwš !¸¸™’FP¤08q³ *'ÿÀÔW`ŸõYq€›&W¾´på³�™_,&G�PPEpR±D‹C4ç†Xæqz�‰t�yð{à‡0 ¦ žÿÀ %��!:�¸f_Ñ» )°0Ÿ6sWì(w¿Ä95°p›Ð%±f7ñ ?ðÎ ¤(•^éÕDLD–òE�©„eÿgh™˜‰Oºƒ0¥Uj†#�j\ê\z ©ð¸1.`Ñ×Ð S°P0ÿ8W]nFT6 t¢0Sc±§¥ hàA€Xàœꈭ#)QÇ ,˜©t š𬓚k„#!î¦ò`  Ž?0Wðƒ°¶�YãøNF#€ …`}ècPÈZ é�BÄ%™EŒÐɬŒ˜…ZÈD*¸‚Éú{Ù¬¢ùÐz¹6¤7B8ØZ‘ ør`p?lP o€qjøð ¨º;ðH6”°ú1Ð1Sà ÷‘Yèÿ O¬P¬'ûjðå™À5�Ž*|y °†ðÑyÔ ±B8ÿ�©r¨Š+Ž@À¡8ÊI•ƒв\Õ° [ñÊ/à ð®Ð‡Q7Qtö`^ÿ°Î C0n¬ó³$´”˜ǬMŠ´€� Lû°Õ1+µªøUklÆ&,‡»0…–§u žÀK°;¢û®@d!Á [ðŒè¯ÏY+;°F°o€x69ƒûÿ0…˰}Ò´‹+�ûS ¹’klÜ:ð%  är[ÆI§±\» i`@`mËe4[\ÁðNÿ°‹èœW�H̸™”�…†°ÿ°»»»…{¸‰{\O{­Ž»Šâ8Ž“ËŠ h! ¯™¥;šhëp ¶ð ™U>Ù~A›ðGt·d¾z ‰»Xë˾9{ð¤»;ƒ`¸°Ðhök!�ËŠ�Ë­¬Žá8Žä80¢Êb�|�מò‹ok8hðC0Ä?Z¾�ˆŒÅ*»~k‰<¤¹ºKÂ%|¸(ì´*Œ¿/¼›åø©Á­i7 µ0…45eܽ"ë²€BpX¬y«OŽ8RÆROÄ™©Dhp�r –M ¿º»»†€&<L¼F±Ârÿ„äX‘2\fÖ€ ƒ‹à±a{jÄ0V€R ˆ�z‚tLOt�Á¾v€}0𡻆ðˆP†`4¢‹Å䨊0lXû ° 0AH+° q˽‘�›ý€ w`*Càºû¨·Ab-PLhØI�ªœðk„Ì '\Ë)̸ø+-|v!Ã@�®�©WK Kp ÄeÆ‘dòÁ� W6¾êµ:*EJ€VB×ù·Ýüx�ʤy´1ÿðÊ„œ ªy‡|ËØªÎºÌÎÁygwcp Ù8fvv Ê¥% áÐø`ž²#Ýÿ$ ês(ÅØˆÑDþ(h }‰x€‰lù¤�<„Œ³¬Ñ¶|¿�ËAÒ3Ž@à±ÀÄŽ zµ PK +FKI&¥Ã |P·X°5wkÐ=½8ÙlxÓ¤Ç7ÔªLš +ƒðʰ|Ѫ híÔàÕ»Ò iË`ë`àr{“û,w^+9—a±bA ¾9m¾1xu¼ŒT6‰Üìq‰ªü¾w�׽׈� ´Ì%M}ÅOý¸ƒ- ¢r± +ðr‹µWŒÏ¶@dÍB§vtÊôN ‡r·ç[¬ýD–±&ÚÝÜÇ©,Gû¬ñ+IÝÚ}ÿ}-Ûà(ŽqpÖ“×Ä�vìüƒ0§Õ~YXPe”Cò >G�,¬òaçë�"¤‚_è–Xh7)v­´ªMȰìˆð °`ˆÙ¡4èÜÑR]`yztJào½|µ0Ç¿�\ óÈ£o� hðm¬‚(>{ÍÒm6Fªq`Ⱦ7¹Ê NÂÍÝN þ=9ØêLA(3`Éîá‘v Òp¬èy?˜:¼ Õ�4ÀäãCH �¹¥+U¤7•h“)š€, ˆçŽàNˆŽÈ—šÎS]äÿ@¸�;š� áÈ,ÜçÜ"ÿÀ ÄM‚ÐD²,\£5û¨RBÒ�¬gkÀÍ~¼Ê€È=çÿ0ç¾Mõ1äâ­Î~ Ùÿ ­Ä\fXëÈsÈ€ }FP½Ê}¿z(‡Òaé… bàAb ».5u©�vÀ–�š° Ë1甀 °§ŽêضÞç ðsà‹ÿð al YKëq¨Š}iÛ¶¹OàIU.Pïön,E"mpì³EÔ‰nË.V§“àœÝx­×ÿ £N Ž@ ¥žíÚ.¼zÞíÌ{Ü~ñÿ�ÕFpY Ãà(‘ÉÐØpË’á¯ú ðòÿ�À �0wpu@n€L)Ñ×ñ‹°Ìð ñ×~ê%“êäH +P cµœ ÀP7ѤPvYß¹€¤``QnG�B A,°úò0?Tà é`½P wÐmÐóÀމÑæÛç ïIoí7ÕôÛ®ÎÀ è‚ñíññ°6±@0‘Ó¬ðuF0ÏÀG ú®ò.ïò/¯ÃÐ#ý@ÄP ’�óuà÷U7ý¬ NÑqnôˆ/”Pí´P$Gä ˜± €ÌAù7@�eQ 3‘*êù €eÿXP5¨ÿ*.0º0_­�z¡ñ CŸ�uÐ÷ÙÇ‹ðQ ü øQü� Ö¿zùþ<˜OáÂ…ýäÙr€ð_‰1ë$þ£0á ƒ ÿ¾„û‡ïß:#*\Pð A%ëõ ã߆NŽAâÃG.B„8X ¨tñâ¬WÏž½~èÂÉò( @÷üóçß Cˆý‹tÐ%„”(a¢¥Ô D†mB<¡Áˆý.Ôˆp>|üði2`á „F\ÃWï9>2\€qÄÇ¿ Atðüç∠y‹—Ž R¥FCK›U©‘=ó\4ô¯ë¿¯ÿÿ•=‹véZ„m¾�x� rý^b�ð/x‚Dñå÷�Ô� ÿ"DÐ(BÔ?~õø J�!ƒ[|A’>OÍ! Ìñ6ú ÝƒÞëá[ÚŽ1P�ü7ú@„b«Í6ÿ1 Ýìá-!ßî (  ~úa�(P΂6áî eJ(ƒL´€�Gúê§[Hoƒ„â "ЏL"*r)*)ÅZÒ8‘äù'sÒæ”Fù£­ºê*’°nà ÁrðÁÿy ÆP¨ŽCÁþ�¾êª"¸ ‚ƒ@cw€2˜`ƒ#‚âŸ$þ�Â2žBø¡Ѹã'ÿQE£#ˆ)îðɧŸ|äaP*Ñꢯn£A+i‘§­,}Ûò  ¨î ä0úˆpøig¤&HPõN\å‹/'J`UzÀb$¤T=Ÿ0)ê Dûb6:»ýG!|Úi'4ahd„"©m¬»Î¢…A,£}0Ò‡"š¡R�OæÀ i¤9°€0 8,Á–�ü„„uÛ}àÐ  , H"‰¦¨$¾ºì’ôÁ» U¡t¶9åÒJ¤¼ !i‰ÇžGã-×\¸&äp‚¼ªÀMR.l§Rþi@0à F’™x½€ÂŽH/ˆ+°ø§"þ©ÃÑ u¡Žµÿ(o˜i)Éê“VhIGd¿H.7–/Ê«Xy¸ŸZVX7L XdãúÁ¥6à ƒ¾/¸aˆ$ˆ@â +×D˜ùZL”ܧ6Hê|’Z*lZ)”O>áÚc´Œ¢šl-Ïý§‚Ð>ˆ3Eê§%.X—ñþ1Aœîþ 'xÝà|ï¡Ï„ 'B �ë‰:e;†Üñh“:*éÍ¡å”>ñX¯ ÷ ‘JŽðºÊèØã‡u’Öeuf¨Æ®zÖa£Ý8�É| ‚À‚.ЍB¤0Y,¥>ö`£˜Ç–-Åõ ’<ì�u£À„ÇNÑŠ�)kÿlà#Ýu2R�“´«ÁG À+‰Àô©‡&`4� ôÍ ø€Ç…(d¡ \…9ú!¿ä#� ¼H¹ø�N04æÈE+4ØŒx´#:Ër©Hg� T€B!�+DR—M8ÀMäûÇq¡º˜‚……Œ‰00£áeA TD8†(�x@ЈËC")Ö¦\Ñ!è 6ˆÑŠVˆ#|飸B¸D`|'ÉÀ <Ð ‰ÜÂ$ ÚDâW—eÀM"°@( �‹Å+,ú‘<>† �€ äó°ºÔÅ(ÒChÒÑ¢5Ž’¹Ž(° �€#QL5V`€v±ÿ Á..#HNË& �l \ðÁ+©0\Èc�äbŠsÈ¥0Š>ôaK‹äq¾„(j¿Ùb"‚ o_ä0 2°�¼tÄNFøÆ2Р6 ¹i¨×0ÐJ.¨óëÈ_ˆ¤�xŠlžH”'/'&-yiŒ \¸¤œ¬$Üiì„ � qÑD, ;•ýf< 9Qp,H� T(…8rÄùœ4�>º%JíÑÒx%±l[äPMkÑ¢¾ôke)HÖ1Ñt±#FeS )�`=i8Ä6†éAöÒª½i‹¡uú,…«ý„©!r�¬�mó)ÿ«®ù� ` éãK-H`RÖw À$0Z`mA �è¤ZTÏgÕŤí˜`ÿñZ‰8PT+�©KA¬£;ý¸†ªST£–1ÁÇXز–]´–|@Z€…$H�Ã$Òlȃ0Ÿ°½ˆ`멨ƒÈ6�àˇ+ >>øö ×€Apðò�0öSfX•ùJwkB‡A�1ÕònWjàežx—¨]ó ²lö€ˆnðª£�#ÐHØG€è.r€ÊI [Ö�ä`§ø0ËKH0Úª9v +Nµ€"Ń3€]K‡§ „Ø(0@~ÝÊ\æ^``l‘Ž ÝmµÄ4tªÜü,¥Ì@úAŽ%ˆÊyÎ@*/Ê ð׈ˆž…� @“@ÇQ�$ïªÚÙ�cµmAC l` F@e›.eò×Í9*Ë8}Í6¹ï á‰A¸-B~÷ÙÏÎñKì�‹ €¿h€ ¬í kdNçÙÆ}Mÿ \³ÁÍØ^BLª¹ûݪöÍ㹌„jhvª϶;Ò‘–eDàüæo €� ³¤¥ƒì2®‡Ã;°JYŠ8H� jvÈõ<°qó]ÀçgÔö5™Û.Ü€‰ëè¹FÕòw—Œ)øXÇ2Xá MPÝêUÇúÕ5¡‰Gp½ë�»×Áþˆj4kQLG;`•¸¬u´½íPw{Üå¾rÐ�á û:ð¾÷3 1’�K;Ú•¸”v/*QAB<âÏ8Ã7ëÃ?{à>xA¯ò¹Â|æåÁ¬Ìw^$}1<à%ïòÁ÷±�”óNèUzD- : _ýè�]²|,y•àêu¿ú\ù$e÷²‡¸Ó—rzÔïÞø‹êýK�ÏtÚ;�øJIýñ�Ÿüå§= !ù ÿ,0QPÿÿ ø>‚*\Ȱ¡Ã‡ BœH±¢Â~3jܘÐÇ� CЉÐÉ“(Sª|ØBa;ŒûÙó˜o%H˜óé”—ã› YÄñϤ+�ÿÙ ‡(D#NŽþ“‡³¢Î|íê­kÒ”„S†5Æüã÷¯_U„HêœnŸjµýKðu¡Y˜gÿùHÛ°çÌu@ù·î`]„üòÆC(ŠÚ|öò…Û!PÄ¿k‡æÕ¸¶ßd� dÖŒÓðÂ(Rª,„ìy‡�æŽXŸ<‡Qþ©Ö2ð*Û(T|ö懪 ú^JùÁ@ç,϶˜¼÷Zæ �OŸXÝ:dì_Gÿ}ÜâòÏ ÇoϘEàyÊ Õ;-±½ûëè*XÿÐþ¿÷= J3�`l i§¸Ð‚ N`„â_C¢QøÐ„ñi(¡…†ÄaˆUÑ]_ j8_½7 ,"¤où—�‹ú E$Dc{6"„£†I Ô] Zø"‰V¥È$gN>i^”RRô^Vùáwè•ðÏ-ZnHe˜�qy!™bš9Yh2 m–ù[œiÎI'ŠjÞéfŠ%LPBV@�Wq^ hd0�@øðcZ•: Тzzgç@”Àë”uÙ¼&å{úÏ ’ŽõO=áeú䄱]ÿ`*f‘E©–2D ·Bja¯ Ñ…&‡4TÁ±\0ê˜ UÐ+]à„È!à°©Pªct“*àåCàÊ,¢)!nž K~Ukè=:�¨ÿH‡°ÿKÁ­>`qÇXlòëæIð?døOlÌ ª± ÷Ï~l8ñÏ08‘U“ˆ�^Õ9àà#S?‚„›�\�l²¤Ø“N5#ü“©²„j3Êl@Ãl|ãžwóãñ:…±j ½*«ììW,áL@ÈÅšx±Ša”Ḓ€!ù ÿ,8HBÿÿýë!° Áƒ*\Ȱ¡Ã‡#JDؤÄÄ‹%¢Éȱ£Bñ­óHÒa’E’ ñï[É— ¡”bÐÂ? 0s&,% B t -Èå_Ñ,C'òËèრ$e¸4bS†8§z¼Š°‚Ö¯`“‚ Û°^ÁpÇ’}n’Õ®�ˆeîÐ!ÿ ð´û ^¾/ÿL¸°áÃ}A’�+b…>¶L)Ðñムʼ 1Ç?$I6s–Èx´éÓ¨S«^ͺµë×°cËžM»vFQÿÌôµ¬‚8dø'á_Ý×ÂQÝïŸ �6Än.0ëÁ «k êÕºjb ¥ÿ7L�BïLx*ÐÂ�Åÿ ÉQ”°y #4, êŸ=�ù¬Á?qÁ½ôÀ?ú)äI7ñSUXËñƒtN1HÜ‚ÿq$ØÄsЄS•`€@üÔÃ�+zU4¨P€f™V ÄG‹ ´~ áÓœ�%‘¨�võ �xåU“D ã?iüCÝ…ÿä N … ‹Jü“¤YZ°AïAña!Ù4FRç‘‘¹A‚ÿ¬pž@h"dÓ?7l�E8t’•æ?št‘‹á³åaÖ¡)£~SôaPÀáB” - FÕÐfJ-Ĉh›r¶f–=ýä ³N«°õ#᪅ê!ù ÿ,9*<ÿÿ H° Áƒ•°¡C„7¦¸Â÷�ßËiäg£Ç„?Š4Øn¤I‚ýNª\ɲ¥Ë—0cÊœI³¦Í›8sêÜɳ§ÏŸ@ƒ J´¨Ñ£H“*]Ê´©SšJd¸°„ To–X‚CNO'Pø—áæ.þE­`Á&8‚ ÚN(។�YÒz˜¡lÙ‚þUxðoB… 7 Bä_*Ë*øGÀà\Ä ‰Ì©„Ñ@`Œšë,�"ƒ™ˆ`ȃ,!hËA…¹C?Ì—¯à–ñ«Gœ0ý5ÁÕ~ý·i]R×1B�K°2‡Á»-ÿËP�ó?Yýòá3ˆÆ´5Vÿþgâ_é�§Sº¤�aBQr¤ˆ\ ††ÑO¨HÁ6í¿µ %ä�(up‚h¹�­Ç€µ³LC0€@Ð .ücƒNQ]×?”@S)õO;ÁC1´B†l1§Q}ÒÅT�:ÉÁwÿ¼ �8¢$ÖÿXdJ·MÀœŒGftÛ@³5)å” AØP Øõ ETÂsVv™Ñ¸'¦F†yæE´ùOX`ךY@ç�xæ©çž|öé矀*è „j衈&ªè¢‡uÁ… (>ñYÇ¡òü´§ÍÑg|�‚ hTG‘†ŸH6èUIºæ% : TH17æi“ßʤ  jg;(Z¬  ¥!ù ÿ, 08Fÿÿ äW� Á~ÿê)LXÏžÀ‡#JœHQ¢Á‚õÖ¸±¢Ç� ÿܸ±Éx7•0ð�BÈ—GrìçP ¸"þ€à ‚„ÿ"ÀÊQ¡½š@ ðP¢P‹vŒ(€Ä?¦(<µ«@«8€ÀÕ«Ùœ8ø§àß„²>͆\'°­Dx!JðYV.E>3°… p‚[¿C•|ùw b[—.'bø‡¡ÃdÄãàrµˆ"ä‡B%`®Xâ+pøþ Z1ã ¦œ>| ñò¿&$²PA4� Bàúñ 'Fi‰¢ÿqˆØ·î/"F¯˜Á^J°-°Ã¿ÿL ÿðZ3ë $ŒÁÅ�Ÿ@„9`à Á;ÄwEê2ÂÃ9_DxPÀÿØ— )ðfÖT¡D(M´É?@Øx(œ BƒÐýÃÂ??€PŠG5Ñ>¼x‚aE#þQ´UÐT@€Ñ .€ðÃh@)ä�Diä‘H&©ä’L6éä“PF)å”TViå•Xf©å–\véå—`†)æ˜d‚…ÿ<ÒŒ•^ôø3�—KÜ*�ÚdŒ;ëñ§äüóDv \ðP |�¥ÆõO ¨èÓ¥—ûxÉèĺSŽ—âñû«§LZñC ‘ÁTPÁdüÓ4•Ø9” (ÁŠÎÎú1´Š¶{ŸÏ;dFDX„…´Òh;­ÞÚÿ@0Aƒ2 â£þÀcñÜ¬ÒØ±·Þ*ÿ¸Óh×W>9•ò ðA¾Ï6Þ®Í^ï½o=çqÈ/6 ¶ \à.‹ÈH€DÍÀ3ªÄr  p$M{HQÿ”fÂ9€%„.Êwv¸ƒVèa “€êýÃ�?DOTr�¼Æ‹Ã3Àqµfeƒ=”¢@’@‘?e†‘á"á†3%ª¥k‰JEÒ˜E‘0m2!ÜP.PH`ø¬\�!! �dc-H‹|e(�€€?%ÄA�9pÁ$/b‹TfŽ `ð€ °ì=€FiáüÇ$ªiÀ¨0蘖¥ D ‚(‚Ð2"°–"‚¥ >„9¹P`ppÌ‘Œ!9!A)!‚†äc!ZáŽð!<Äת¦@Þ¶=‹,a"à€|€’…ò!³¬f—ÿÞü†¯Y†ßÂBˆè€�êŒ)ú1PˆÜ’¡MŠ HfÎ&4"�€&Hú# T 9ˆHH/ÊÅÿýƒNˆß Sô`$»üH:’uts+sù‡Ñ‚�¹$�W?ðÁ¢õ˜¯yˆß¶9™ÌÔŠIM-òŸleEaAÙt …žþã©G§*�lS  fH4JVf– ,Ì@€þqˆTôòøÝ¸Ú*‘³¶”œÉT’¾N$xÚsš î*Aä {5¬ ·b¹U"¿³“d)b� ¦ › ˜f�Ä4 \ø.ÙÐRd‹k,LÁÚÖ8º"΄HR2;�õ¶IBjwb’$©õÈ?úq�ãÊ'Cͬs1‚‡8iºɉq›û™€!ù ÿ,i[ÿÿ H° Áƒ*\hО½zÿêA´Ç°¢Å‹3*¤(Pb<� CŠI²¤É“(Sª<)/^»›þYI³&Â1ÿ~8±É“¦ -/^üóqäHÏ£'wþãáÇ£H£†ä!�GŽ ÿ‚ä�Ê£CzX ‚DGÙ®hÞø‡ƒª@§:Šèó_ºupÒ Ì’–' ©ö¨ƒl‘ƒ¹ýÃW°Š–¾6U´ˆx`˜�Œ‘´nà,ÈRq°ýWù_aC°Tl0 èž8Dãð�X‡ÓÿÆxñß³�\^ÃÆQ£êà·ÿ$ã ±”^�l ÇøQÔ?&þ©xAƒød�“©:ÿÅý#¹ˆõÖÝrÅu–Ç| –!3ýà¶Mvtxqc;à“ xõ C!ñƒ?¸,‚ÅÿTÑE|…AßeüSÇ?òÔ'� |0P (P GÛm:LáÉ?ýðÓ™@[DqEWxáÅ@a „á?€x8 (¨0b ÿ¬ub 8˜Ã`:´ðb?õà‘&[üsÅ�]èØ£� ½��A-|Wƒh¤ÅfZ „„ÂÎ9pJô[¶§#�`„QF†gœ¦@0YP ,€7ƒµÀf¡ÃΣç”E@á?Y„‘iAnüy� å€b<´© <ï¼s;ä,…k®ýÿ£…eèéE-Ô b=ä°0óÀ£Ž:�>ÂGE¼*ÿ0+Ÿ@~Þwÿ y¢ gF[qÄÏ·©êÌ*X!P¬ZdFžu*í?ÜY;� <ŒzÛ=„r <úð‹ê*¨è�D²QTA�³©í»¹ØKÕÖC›÷|˯>ãŒ3'²ÊV‘__TFŸn¼q+¼A¹ð� kÝP\ på‹;ë£�6«˜A²ÿ¸æÈÛêÆ&K+T‰5œ)Z>”ŠÅP»s‡››lÿ²@BÔK>qôšPB9\\l˜1­/ÍP¿£ÍcðüjÁÙêç M'Ô?4äÿÊÖ¨sµ 5<û|ËÊ"ÿcî«XSXPŸk¬qò@G'ШLj²o¿üîã<‹Ä}îÜKgä’s…u "A*¤ A7Ü0Y[ˆµi³ÍûìóÎ>À¤RÄÈ.^0_êjýø‘sÅÿtýô'T½ìF ºV®h·Ðè;»ïîO(— onÏ|+ëÑ»þOõՃʓÝ�{(ô€>ƾ`1DVˆú¦¸NzÖû‡ì %¨ µÕ÷ô>_lŠƒ•¬àó'HÏ€8�ôN¿Ù*I7ˆ�îz·Þéãã˜Ã?�ð"Pª ƒO|öxp %<�ìÿ°g�6I_-ì�þö1] a EHÂ?‚#�ÀgkÓ�ž@@h‚ë)P B™ \À¤‰¥‚pƒ+œ>4±ˆ¸ aU”‚kÒ•) �ÿÑ…(;‚Ô[±iÔàÐØ/>kxW�‚”uE;NÇ€ï#a ú¨TebÓça³our±A …*ÆÊ‘ÌŽ$'Y-K‰™ô0z×É‹Í鸊PE-y“{ ’‚íü–L¢áhÙ»où˜ᙶ$@Lm ‹Ó1AWù!#Å L=À� ƒÅÌÂÍײ 0M_ Ä1ÊSÞž„Â1}ÑHÔÊäR1ÿ�~ÎcÿLb9Æ!!�—‰¤f´ �é鶪�=‚=°€;°„e*féO€²�‰ºÈª%ý£ ²â× šçÄ(˜(�‰LB\âôð( sš?A<á�ÿ€‚–¦ !”džqWW$À> $;( ¨ „‚Ìl´bûÈéN}§Ž'l!5¬QOj:®!2  D4ѽ͎û„NáÁÓ¬²Ð‹x#ñ®P©ÉeTlaÁUúOd•®6[Ä"Žà?¹�ë�e�ÜÞ×Ç�X’©¸Ç=úi×€z.«0ßðzv>º)D '»¤E rÕŽþÓ³þ@gñ†…KÿEȯùæ@nùÚŽfuåÐFâÅ$¤&}±Â-C~`-`l–°¾í§6.X\ãª&BÉUî= 2ƒÐ£·œõ\áÊцË I�⃨©Ü…øÃ ½û®o ;x �Äû‡‹ öz pHü1�ïÊ·ÀöG)ø ×Ò¡ê»­�"0‘¸Ÿ<í§?ò:½ H˜f; Ùö"ý0‚ýÚ§ »|ìI ¦šøÄ†ýí-=—KÔÄP(m€)TBF+øG…1ÒÝÐãž›Ç=Æá‹$`ÆÃÈ’/ßùƒ�oié `L ¡Çn¡Œâ{Lÿ3¨Ñ+ÇäÈ…,`�¡`ÈlÌ•¤V &@� TdÃ9õGƲ„š¹$¿[`Ä�5ÈPà ¡@*€f‹ Ú°îÐE ã\C"@��±3¦øÂ.á|䘆õ?8=� D@É·ÞtAÞ+�yÐì¸ȇi¨8ôa ·Z¤€’ ,ùÊ&wÿáuL'Y1hPƒLxÞxÖQ¶@$@qÄÿ¸Å%Žã &�†¦Äî�•mîÜZ ·~À?Ì-¹þC”ÿY¾�C/¹Ð04Aœªð‚hb Bˆ nCS°f€Aî}�/P|!K.ˆ2�†ÿCã ÿÀ¾ÿ‘� d'â dþñ‚øy ž@Èÿ¡ï‚([¬ùAœ]aMÌH _ˆÉ…ÎÆðã30@ÏÒ€,õ£"!pA>î€X'ˆ!W_ˆ¶s&Žõ. b�T@�¾ÆÓ„¹(äոłr~<}î Ñ�Ê"¶Émbï¹ÀðõŠHñ9Èz¨Àt‚,ý€ÿ‡€)°¨U¹ôHp¸Â"‚ñ?zy–ÊWdî �öÊ]�þäé d$’ùšèƒXy�eö®¨ÿøH=ÂÎï’@ÀÏÈû"Œ‚ôž+…W &°-²¼( ‰Gx=:Ę®`âø´8J :�LÃü\½tGð�°¥ùÙ_É¥;m�ƒdw1õÌ�|=ah^GE&CÑ!òÐ!¯aGÑiA+ÁÁ! Ýp o%×aB€®W8EçE™ð8‚Áqÿ zqt“!ù ÿ,j[ÿÿ H° Áƒ*TX¯ž½‡ ÿÕ“ˆ�—9ˆ$Hn¡Ç� C~løÐ^ÉÚ'pË!Iªäøg­£�‹"sêÜI�$D{IùçÄGŽ"U¨H"HÄKžP£.ôièA#Fþ�™d£A-Rʘ²dÁ-y )‚D HýÆËØ»PS ´Zðˆ�Hÿ“ä� –§{ ”‡·ñÎ#kôx¤H’1�Ö „Â&K–�v‹IŒÑ¢<|ô8Y+Æ:Øìi&˜EÌèÛ"i8á¤G�Bt ¹2dŠ&uúÎe£’¥KÏžqKÿ˜Ú·!C²yÄJŸ:_¨œ?ÿ‡}ºy‚<:ùí#ˆpc4Áó®Ž�ñÁd£ÿ¼�>8QÔ_:§É-﨣�.‚˜qÅaÿ@×ßÿ­&Pvÿx¢�wúlÂGã}Fü}F¡þ#Üš€Â¡:�ðáYž…A—ûýslj£ñÐÃ_*êðqÈ— >¬\‚E]am#–H�¢¥—Ú@:ô Ã�ï$¨N*—\ˆÐ‰%ŽSR‰ù6kE£r¾ø‚ÖÎ�HY�QFu¨9V lþ3Ù@=xr ïhsG�Ié@S–ÿQF§w±ÉCzm†rË© ÎqGcFQEt&þ#«±€ÐUz“ù&d*ô¼ã]‚š,¬“Y á“a�á§²RñPCZn ¤Î|ôñqš“4 ô™‰#[F Œ�+R >¶)<ûlˆ\,—T»4›£@ß$O>öòă®ýn¸!˜ÿDÁî“Ð5,!ÝI¬Ï?¾ü#„À¿›cšgü“²Æ:ù50Ǭ�/—ûðÇ/ÿüô×oÿýøç¯ÿþüGUAˆ@ÿ" L`€¹X� üÃ� $È#HÁ Zð‚Ì 7ÈÁz°~È>ˆ—¤€ XØ?\ÀŠÂüCqò "(`¡+.?¨„‰‚Ôƒ;tÀhv8��ô£^\ÄhÉ)0$ÿ†™¢IŸ:V—®h±¹4ç–D’‘ªÉVÑP—þ�¹#F"SH€ÆÑôî0_X®TÑ’Eb˜œ:ÿãÁªTÑU¨°°ØEbA³úMò/«wê´iS¼¸1Óÿé¸2TÝ?mº°x‰(Ñm¦|Xù{'ðŽÉ+}ÿýÍò—)«úÞ�ӆƤ[Š`˜î£ýOÒ¢+µt�˜œ¢-æÿø�ì’¥k˜,dª Û¢8NŸÀTW¢DÙ»4 ˜ê`zOTg~ë\þµóšŒ|¦IH¡I}½Ç[rd�ÁÈg\H�U÷ÙDf ´W«½÷O‚gL8t#i†á%HF‡d$âáHJ½ç¢@zXD,¶h"ÿ ¸ =�d!{jm˜à?n9P;’mÔ£~"È¡‘ !N!Š˜‚Fé¡~Òi˜`8j9!{V &‘12E£tey†Eº!‡‡]^™ ˜[ d%&vˆç–{N8'�RtÆkä9�@e|fGžy>:Q@!ù ÿ,] ÿÿ ´G° Áòðá«WO Ã‡ÿ Dˆ�_½~ñ >”ho ¼�5:äá¿u"GNt(u�ü»‚¥SJˆeý#’昛3:TƒDÊI×Jéø7¨8�[¸ôÔËÖ" ¥ìÔQDà¸lU´`ý·Eã-_¨zaÓsìÃGÿ¤VÁºÔ¡­‡bܦÔÒF`½µôÌØ—Ã.„Sù‡¤®C_—f{Ó±>�ºØÌô’%ñ_�ý„h¼,ðŠæb½ “’ž:�‚þ©– &ËϬÝÎ}x;wJFkô�õóêÛ€«tS›8à¿Í‚qTKgædþ•,Ýçí3,¹‹ O¾¼yñZ(� !ù ÿ,`³ë (PÞ?~üúý³ïŸÃ L±^ÇëÙ믣@†íþ¡s˜qc<{ ÿ…üçé_¸’O¦û7Š ‘‡-7¢|ø—$*\Ä�áùï"ÑC¢,Ò,Ö�£<é¸Eˆ¤S±.AuÈå_$D»þërôÉÖI´8œs–§¦9b¸d�ú´­Ý£`ª½Ëóο½|ÿþ›;—gO·ß% Ñ,Œyúã™æa–,` >ë¥m@!ù ÿ,ÿ!ù ÿ,ÿ!ù ÿ,ÿ!ù ÿ,ÿ;PK!3T}¦¶¦¶Pfile-manager-advanced/application/post-smtp-notice/assets/images/bottom-left.pngnu„[µü¤‰PNG  IHDRd¬O pHYs  šœsRGB®ÎégAMA±� üa¶;IDATxí½ œdey着÷mzöaÖA!lA4Q Æ€ˆkî'¨  & ‚BD4ÿÜO¸[n"¹ê'Œ$J¢(÷ƒ7A®be¿¢0lÃlÝÓ=½wWwýß3ç)ß>}NÕ©­—éó|>ÕU]uªêÔ9ïû=¿÷yž÷y=/µÔRK-µÔRK-µÔRK-µÔRK-µÔRK-µÔRK-µÔRK-µÔRK-µÔR[ΖñRK-µš-ç¥e¦ð�o|cݱÇ;vß}÷¼ÔRK­*Ëz©…ÍÌwܱall¬ý´ÓNÛ襖ZjU[ ™Ùææ›ßüæÆ���VÝfvìØ‘ûÞ÷¾·ÉK‡O©¥V•¥'d·ÞzëÆ™™™æ¾¾¾iÝg[ZZ†tëY¿~}þ-oyËK^j©¥V‘¥Jæ€ù°ý§ú§MF䡦¦¦Ý2»wžžصkWS hRK-µ ,…Ì+˜©©©¦ýû÷� *Cù|¾‰Ö®]›™ÌårƒÏ>ûlÓ¿þ뿦 I-µ ,…Œw@Á`t?¨§šÝ×[[[sûöí›DѤ I-µä¶ì!ãæ°ÃìíímZ¹reA`)†­»»»ù?W(&P4)hRK-¹-kÈ„ÌÞ½{›¤Væ8Ãí¹°¢¹í¶Û6{©¥–ZI[¶�¹å–[6˜={öŒ›‚&¨^Ÿ˜˜ðÁÂÿöæ*'—*šÔR+mË2(˜L&“CÁlܸqß“O>ÙÞÆ.E¼–*šÔRKhË2®‚aˆôÜsÏ5¯_¿Þ Å5\в°¢¹óÎ;Mšw”Zj![V�0(ƒ‚ámÜ¡Q9sM�œNAH-µ�-Èdn½õÖ-.`dMííí¾òÐ�gÖÆ/¾øbÒÏ-*@CM:!µÔfÛ²€Œ ™¼Y0<\l¨ä‚†¶ûþ0„šTѤ–Z`û³9 9|3===>Hx h $<ž–MNNvÉgÓ©ûÝ@Gï‹S0X)ÐÈ™;Ó)2òÑäšÄÇI@›Vø;×Ñё۲eËÌ›Þô&Æ^)hR[¶v°—fù`öÉÏ2ËÉ `L…ðØ:¹Ã¥ÁÁÁL>Ÿ/´´´ø7‡ÿçÞýl Ÿ²ò÷ðÞ)/LjËÜJ%ã*ók¿ök¹RÃ�°¢q‡K²]‘�7çýîgnÞ¼™É”SO?ýt�ÓÝÜÜ<ñŸþÓÚ饖Ú2·ƒ­ü¦¯`tïF�½?›Í6‰±0•êðáÂ=·þþþŒ†:½§ECŸ}Ƹ|,©•lØ´]FÛe›ššP„3;wîìíêêêÔû&ßýîw§€I-5ï .ÝvÛmÅ(€i’)«ÖÂC§rÛ‡ö›üøø¸ÞÚÓÞÖÖ6yÁ¼ì¥–Zj¾,�ñŒ:z®RÀ˜¹ )g–ÌMJfJŽb07Sï|ç;SÀ¤–šcd2–3::Z >ÝÂ9/¥ÌU1R$eseP0ò½¬dÚ5Lš:ÿüówx©¥–Ú,[ê�ñó`ÌÉ»uëÖ>ùNrãžìÝJ@ƒáèÕÍìÂŇŒ"Lù·¾õ­)`RK-–²ã7ó¥/}i³:zvxxxä²Ë.Ûûãÿ¸)'û79b= a zGîœÛGQX±b…ÓP‹ü˜‚ÔÐ ‘$q£Wð*¼â¯Ò0*ÛÛÛ›‘2ò¤X¼±±1_ÁH5µë>ÿž÷¼'-0žZj1¶TCØÅL^…‘=õõ)'MšDPÉD½&˜1ÊN iOès³ÞVH™Ì?ýÓ?±ðZ€ùã?þã¾x`R é^³fM×!‡ÂR&æ MMMe£nîd—Œ†J-E«¶gÚ€@‚*Ê "Yn$×iØä'èaQ^~0©‚I-µ„¶T ㆊv‚ÁðÆ�äämQ§ŸÆž.£S gG¯þ�›Bà HùUš�ŒîGÙ¾TF03«œ•Nª`RK­ [ !ì"`P0ÇwÜ †3¾ó…pugg'³¤wã¨üŽz<÷aÛ¶m›õ™ðö””ÎJÁ«-U0©¥V�e¯½öÚÅìü�¥`=ôÐ}�?þxÎ�¬döú Ñv©˜õÌ?*š°E�#•³ª££Cî˜6S0éŒêÔR«Ð²§Ÿ~zë"M0Ï=÷ÜðÞ½{}ž LÑ0cE#ÿÌ:^K šˆ„=_Á8€ILj©UiÙíÛ·~í×~­m‘�&óÍo~óÃâ÷[·nXµj•ï?"7ê (©™éj�e6¥ïô C¤w¾ó�VÝ.­Û›ZjUX–a�”Ba)0ÃÃÃÍ»víRä§èƒ1‹MRE³aÆHH1™ò¯xŤà´ríÚµm„ÆcÛ§C¥ÔR«Ârr¤Ž>úhrC²òy4ëÿ™ûî»/±?£Þvë­·n$ú“Ïç‡ÔÙçÆLŠ…ú/sÔ…"H9‹:ÉaÛ%ðt*zTŒ:‘÷2::ꇰõ£ÔŽ!\Mâ�ÔÌj)¦v…Ág.¼ðBóÁ¤ &µÔj0¢KÙÿ÷ÿþ_~(¦ l<(ôí+¯Lˆ=‰¢±¡¯Å �¨hç*˜K.¹Äuò¦ &µÔj0 aû 9ì°Ã¦ðÑ,hn»í¶ F¾•!ùH|À�y[î}I|4nx[ )‚UC½ð§žzj³©Q0çŸ~ª`RK­ŽææÉÍc�=æÍ£38#Àø>˜;v ­Y³f¿—0f•(š_üâV#`›SN9eJß³*(8å*˜Œ—*˜ÔR«‹å^ÿú×» ÉìÙ³gZ’¡Eæ„NhRd§ÐH�ÂÔð‘ `®¼òÊA�®©À˜Åùh(�¢ÁGÓÜÜÜ%?L‡|5y|2RmÍ‚Z”&Lj©ÕÉÂ�ÁèdÓr{ºêçän”38ó•¯|åuøf�mHáæýÿöoÿÖ¤áŒ'USÕP¥”3EÓÞÞ>*Èt‡ªyÍ(˜0©¥Ö8‹›Và�¤.¦öíÛ7ÓMæk_ûÚ:ËäýØÇ>Æ©IC4ÿŸ0s+5tBÑ0óÀ0Q2“&µÔêlQJƬQŠÆŒ†/-‚Ìþ]»vù ÆcFºz*ÖH:þøã§·mÛÖµzõj¦WR“Zj�·R�Áêí£ñ#…Ô,Å1|Ùe— 0�,&õÍîÝ»óÓÓÓ=úÌòhþàþÀÍäM“Zj ²Œ†AY©ˆ’YC§Â!‡BÎJ³† ¥Æõ¾¼Wáw}ãßXkNÞ—_~yˆÏÔ½ÿÝa%ãZ5Ž`3æ:~øáy[ÙÑ™M½¨ÁÂyyÝë^—=óÌ3+=Ω¥¶¨,sóÍ7·ñ nW3ü¶�†MÌyšü£?ú£)/¡ 0ë¤^š•ák®¹f覛n*Ƭޠ0Ï=÷\^C½nýÛ”ÌdU�%©H?µÏÓ^j©-Q#¼ëߘ»SîfoŠZƒ¨„1›z-€`ö^�’™ÕÙ¥�b?¤Rg0€!ÑnóæÍ=Þ vï½÷.ÅZÌ©¥æ[&I¦Á 9A¡‰z·ccc‰U €‘/„0õ°ÂÔÃÁ°ËCÅdê­h 0{÷îíY±bÅ’Œüd3_ÿú×ýßùû¿ÿû3ÿå¿ü—œŽI!U4©-E󯘥nŠüÌh˜”­0·ß~û…‰›Ìå—_>d€Á\SoE³”Ã1Ïd2EǺ{ög6­c’IMjKÑb#K4êà! »¹RÀ(Š´Fãfj£ˆTädGS1õ�^˘5kÖt/ÀÈ]ŒöÀÌQk€FÀG.åùR[† ƒ<¯vˆ`"íØ±£¨`˜3µm=� …¯— `à"`ôì¶©¢Im)ÚÈÔ0 ‘Ì'>ñ‰aü IÞW«¢0 �³‘óÄ]笠ÿ§— hLÉT¥`¾úÕ¯®Ô]Nï½úê«GŒ…¾qNÆY- !QÀÜtÓMÝ=”´koŸ¼à‚ –•‚1³Ï0ФáíÅe¡Ü§Y'œ ÄrM6œh—TÁ|ë[ßZ‰æ¹çžÕ{†]À˜Õ4Á­ ÀŒ��O©Ã2ÇaY)˜°¥ {‹Ï\ÀØ9çB`¯óÿr JÆO´kkkK¬`þÏÿù?½T›0�‚É…cV/Ðp£�€Ñþú>˜‹/¾xѦ &lÖ`Ó„½ÅaQ€‰2;odÕÌ ÉÚI#‘‚0R×)2r`úûûùQã=æ6ÑÚÚšüÆ,EÓªaÔX†’ª¨\ÔÉÌ�7ÞØÙÓÓÓ�‚‘“·Ï[ZQ¤ºÆ�.Å5à0 gÕ†èR¹•Aâl)G çü`5î.�‡p0ÀDЙ`BâsÏ=×vÜqÇå|ðÁi=ŸtXí`´ИcØ}�È€‘<ìÂÉ+L¿· r–y)AÉ̪P¸‘âìµ+WT#N³pV«‚ ê+UqLA;›OOX 6+ºt×]wuêàe‡††Æ®¸âŠ S0F·i¥êÄènFªf\°aèTVÑDE�P1¼¯|å++W®ì\j€±y)Dܼ: 98Fsc ˜…³z ‘˜ DËYAî:3gžy&çyÉ+BæË_þ2€ÉC’ÞÎ�;[¥^Æõò,À˜ ÖÊæ=•‚Æþ7À.¦`öyK(LÍÿÔÎѪ¢ÏˆRs!›!Êà6ä0 g�ˆ"•²`ÈlJyÉó!sûí·w0IÑœqf`ôÒ„:ÂŒT‹ ÂË=ôЬ0Ð2ú·"Ð0DÒöí²Nœ¼òÁÌ̾ð…ŽÓN;­åä“Oð�¹>þ'ùM¿£"ùkÇ&*ó“q»]éRÀ, Æ÷»y 4óÉ-å!’k$ü´£` Ù¿(=ï+|0Á°(ÒÿÇš^xÁW4Š@%Š:9€éjkkË¿ï}ï›3DÒÉíÐ�nà�2wß}÷ o��ÆÎäe¼L£ !÷ånÅßõÔ ¯¥€Y˜FF6À`ø_šN:é$0�‚i³!e ÂoPä§°mÛ¶âÿ.h4¤òM9ÐÐA >…È SÏQ0 ßN<ñÄö_|qJ‘¦‰gžyÆ[HРýâCÖÉ 4A©Q 0ë7Ð÷�eÊm“fá,L},›ÏçÇO=õÔ) ƒš½@Áx1€‰3«V—DÑÐ1u Ûš››ý!Ò>ð�9€¹îºë:¥n:tr÷ 03ÚǬ>{XÀ¡^J¯7Ïf€¡“‡£Hüžw@S´„νXK³pߪÕHëÖ“ ÛÁ ÌÿÑ�“·¨`ø¡<žÌ-jQ‡Ï¾šÈƒö“ŸüÄ;þøãé˜7­E�FÐèÔ0)ÿö·¿}Ð æ†nèÚ²eKÛöíÛ‡î¿ÿ~–6é”r¢c³oÞa‡ÖµyóæÂßøÆAõߥT˜ÚŠviû9  }J†§Ýí\¸¥€™? ý.<ùä“],˾ϙœ:«�0Ï�÷[Ä0Ê¡°Ë¢` 0…r#á™Ñ–¡ûÜsÏ5K©àn–ø%|{ík_ÛBÒ ¬¡hÈ  “˜±±±Ž8Àèàwáƒ0„ÌÏ:묬îý× e?üðyS446L”‚ [HÑ̲JM ˜…³pÑo]\¼$€Ñ6… ­d"^³‡Q€)Ì€Áš}ôѶ3Î8cì[ßú Ù"¹3¥Ã3£±5kÖL þ0HªfÖ²L‰†:mC5»†N:°ùÏ|æ3í QwÌÌÌLÇ)£‡ƒz–?óøã�÷ƒá˜ö�F0,u �+4Ôkˆ¢±NÎp/“0Ñ.PjY@V4áhQœ¥€Y83ÀP©Î`á®Kžäýºãü罘ö¡`r3`°lww÷„ 3w^QXцK8}7s;ᄘkÁ,êùg¦È¹¹ùæ›Û4Äi§àÔÅ_\0|.€‰[Ð�:¿€E#5Dј‚)7DвZM ˜…3WÁ 6ìØë1iœ8œ¾±·`?=#x®¤ã9(3:3Ô�tò–�*ÇU:d 3K{dd„¢äãFPêèêê"Š´ß«0q3µ]ÐHÑÔ5êd€Aþfªœ*P 4q–fáìZgÙ;ÇîyL:ìMp1Y ƬèsˆÛÀí襶³áŒBâ~Ÿ)˜–––vÂÔçœsÎ�÷+Àøg¡64øhêšzƬФ€Y8»vö²%Ås o3áóX‡ˆá²Q0fEcá¾’"SfÁœ'feO`z{{ÛP0ï}ï{]À`…/~ñ‹Ý.`¼ª*ò³¥„,»vÖ*’½>ôÄOÔ ‚Zc–4)`Î"Ld BµŠ&lËMÁ˜5¹ù0Šà�\gëÍÚPC"ü,M:@¾C6(ÏÀs@)ûì³Ï¶²Ðš3±²-›ÍN+=ä|ŒŸ°†‚‘/ˆÙÛøg8¹9[ÀÍÖY20¹\.#ÿKNákÿ5�¬øºžãÿì¦M›FùË_vþèG?êyõ«_†ZI«§‚ [)g0ûè„Èùî0ódq &ÊP4lãžÇ¤Ž|3K]Xn€Áüu—ì¦áN®bXÚ}�s˜!š°ð^`î¼óNúðÃäC€Áæ(˜`õÊâ/K;>>^èèèhšžžnh‹» ŽíÚg[¿ð…/$^ଠ&laEcù¡$¿0ódåLØjU4Ë0^p_É|ýë_÷�@² uðÜsÏMZ(ÏŠæðõ`¼ë6CRŸü/øa8yÈ ×Sp}0ºM‡ãZ hf¶lÙÒNH[Še<* ù”SNñžyæ™…Λ´]O?ýôþ¤‹Ô¹€Ñãg_bq+<¤C¤ù30Õ^T‰—Np?OÆM²\î€Á²ÀŃq�Èu±ÿÝú/öXŠÇ÷¡D†<äa/䃩0˜½&Ø¿ÛV’䆓9p4äømÙºuk�`4T`ŠaÈFYxyrpRÀÌŸ¹y0µ¨Ö¤Š&ÌKàø†~øáæcŽ9¦kxxx0éR1 ¦¡\Ù(Bä¯ðÈý™gž™û×ý×Mõ,x•Z´qÎå÷ò«:•j-áÔŸÕžSÀüʲæ0 ÿ. ð�`äÿhÖ�¦5ŸÏwˆä›FŸë+¦ xŽ_S3Î~Ì̶mÛöט†+Ì¢HL± Ì€¹ôÒK7jHÚtÏ=÷l™�}X®fç\Ǿ®~·�¢)*nÝ¥€qÌw<†Á"Ç휃b€LZ]ÀhÈÒªƒ9ͪ’á÷)^ß§1 y ¥näÛØ½>Ÿ�m!l³0`Ø/�-¤‚q¢H>`>øÁnÂ�ÞÜÜ<©áÞäí·ßž‚¦f &tQ©—�»&<%3SÀüÊ2€@��Î3Ö£¿Ey¦ 0‚MK[[~…±ð3ÙñÄOlÕû&qÜÊbLWWWatt´ànÃsŠdåô}Y…°ññøÎ`�©g¶oßÞ´~ýún=µÿœsÎI˜`ÕËlƒ[ɯvsê©§6]uÕUõ{ÇÇdúͽ:Ž/ËŸµVÐlzãßø‚·„K-.&‹Q­uµÀé[p—,I3Û2ÀxhxÒ… ÿK�äØFo’a ó9Ž<òÈÖ8ÀPpª···]P˜’Ò™¤ò^Ütww¦¦¦²ú,ÂÔ“òíÌjzïd°_tÔ™žž_Á<øàƒCL[ðØ|G‘+8“æ¦ ó³{÷îI…å÷êwg³Ù®�7gäjEÑšÎ;ï¼45Ú|ÆÌM ˜¹–¥Ö ¹/:8$ÇùIaö"Å 0(Ì«^õªý? NI…´ 0ƒÌЦòÞe—]6¢Ï‹º .ãLÒÔ•¼pÁŒ;÷†ra¿¸7ÀìÚµ+1`P0 Œ$t3€‘ƒzRÊŒúͶ! �z®YûÚ'°çï¾ûîtèTƒÍ'`0€’‘âÍ_™ŽHUì€É}÷Ý7vÍ5×døÃf©ñ«mˆ ù †©[‹®ÀÖd C¯£Ž:ªEeˆµ¬9Ñ\­YuR¾“a€µ---<߯<¤pY � ˜¨ï޲ˆ!Ò¬ßî5Î ÖÐç`Ëÿ÷ÿý‡ `ÌÄÄDeLulÚLɘÚæ©¢©Þæ0^°l‰œø)`bÌñŠŠæ-oyK€Áá:>>Žº™ Œû€‘J™‰êä(œ¼FѪæåpô2¯ˆ•¤XºOø}îìî¨9R.`žzê©á¤€‘• Ö¨ÆP0õ`Î>ûìV#¥6a€‘?‰:<‘ßoŠFPžNMe¡ZSÀ,+:Z 4òE²ÎuÓš5kð“Ø)««.ôf¢­æ„NÀ¯³�¦Ìo4ú¬ýêX™­[·vE�F¯ÅeýÎR0nŒy ŒÆde–‹"Õ»Qø€±J€(˜÷¾÷½P0‚m0å ÐB}‚j>ˆ:¥VÆh£óìØ÷Õj ˜ò6+âC¡c²yéyŒ`ÑB¡ª¨P1€‘´oµ!•®:1ДS4ac?¤`ÂV¯ÆQ°á•Ñ\³iÓ&|-Íá7PA�{…°ç|˜¢OM¦hîºë®TÑ”°…P0Îô„0e¬™ WÆ"é„Y&oö´ÓNk–B™‰Jv3ÀÈqYLÔ—$U4f†©A&ïpÌœ·zµY0®‚¨'—~Â&ð–"›õFàÍdR©œi÷FîQ�#´[!û¼@³ÙKmŽE(˜F[ ˜ ͇‚&KO±D ò]ïzW“úx!)`JÕ�I¢hØÆ &*‚c™[µ�e`ÔðÚLÁÎýòMù€ÁÑ«¡h! %§ÛzùÃVsS¤Í¿ôóÛýìg?ËÜÿý‡¦S~e 9LS…e]À `lˆ`~ðƒD†¥c�=öØ–(À$�«h˜¬f¯sâªQ0Þ�(Y=®f•6š9 æƒüàzŒ Óg€qÍ@ãš"LüN†¢z½xÏ¢v¼¦è\žðè/ù˱´a°˜äÊ0‹Ðü< †“wî¹çæLÔŒfŒ| ­(’8S‰¢Yµj@)�'sýõ×û€yá…F*Q0ìsårÒÆ©`Œ”HŸŽMsÜ�=f.Í«_ýêýR-C oذÁ¿µ¶¶Žè¸ì×qUD¯]¡í±K.¹d�—Z¹Ô„†|e ˜ê-£èE™¹P2=ôPåÎ<óÌ|xcŒ&P %';Ú²*Qˆ˜çA €á9]ù›µ/£Qó âö?ˆæx hl¥®Š³Chÿmo{[0úMM:F%¯ªÔÜlÚõ9]{¤ZŠ9Dd=ã“!w¦··w5S¤�vy©-Äô�05ZvãÆ�EÀÜ{ï½9 @ÅFWÔÄ€Á’(9FYÁ€ùM?ÿùÏÇ `°¸Æ4 0D‘ 4÷& F–o{{;S*æl `t\²ßN ˜¶P€Áz³“ä&¼î¯€Y·n]‹ýpRÀ¸§hø>*Úi¸ÖñÒK/M,"ÀÌú.çñÀEÒ°oLÎܽr„“íìoHíá(³Ê›7ožÞ»wo§ Ò½bÅŠÝzœÃW£û&… þkŒB÷;½Ô0Á)`ª4¿NS]‰#Ë@ê@w0U ZÀ`t¼Ã?|ÖsÁ:ÃÍG}t×Ã?<þñ�|1¦ø�Þe“9î¸ãŠ>€05¥‡¤ò:äSaùÞf�|¨�Ld®e||¼™@˜bÝd„[·à=*õ8¹eË–,óÁôÞìêÕ«×ÎÌÌL¾ï}ïK㥀Yê– ¦ Ž?þø9ÀœtÒI³ƒErHTt¢]Ð`N<ñÄÎíÛ·�~êSŸªÈÉ;Ï€ñ�ï5À ` kù`&ņ.mÒb7=W¼—¿…iÌÿ"= I Ö^Ã$ }�Ê73¬ûœ†N(›œæ‚ .xÙK ó�û|‡©SÀÔÏüBâQëýÆÆÝÆjÿ&5†MET:t?VI˜z¡ãjÀ(ìÞª}Ø U2,Õá×4¾ì²Ëv¼¢ŽÇ´†RëuŒ'‘ÁÓN;mÖ$QEÒr8�¥j²RC)`f[©Ô„F€&L,òD}æ3Ÿi?á„ZƦœf$`Ì’‚ƃæ¯xEg¥€¡|°6Ñ|Ÿø"`ÌÓÜÜ<ªý'&§Ñ! ?çuÛÅü.ó¹˜É_3-_ËZ…¤'Ÿþù!–•q_OkIrŸê š0 ²9þ#§$’ÞL¹elK½æœ̆ –$`P0æäÕóÔƒi‘¯%+µ·C~—œà²Nþ˜©ðìj+˜®¡•·jÕªY¯ÉCQõ €ÑgL¥€)ZÒܧºÍ;KÓ8›%Ý 0z8üæ7¿y†¥g“|H9 úþ÷¿ß `^|ñÅ%©`>úÑ�nTF5|ìg¸GôHê$£áNFþ¬ýú]½zaþý8o ÿx TÔa:Vé_Šƒex�ùIR>øbÖ)²6©ÏOsÀª×¢hRÀ4ØŠ�1À¨Œœ{î¹38Û¼ ,4Ä €!Lýì³ÏŽ/Ec€@úQcЧ�FNlÊ\ôhèÓÞÓÓ3d  CFŸ‘œpY;|�ÔMþÃþð/5Ì?îÿüÏÿ\�ß­Ф€™óA`Ž9æB«Ã$Å­tXÎÂC'sýõ×û€ùÅ/~Q `¼Å¢`pòjF 0ò½ø ʹoà9ÖêÖïY>šf½¾>jè„Q“‡ÙÕ»wï^'åÕ¸wáK'>Ö<=¤âyg)`æÇ27ß|s›“->øà(Å®«Œk�3N“B¸�R8c•ÔƒYHÀ¨ÁQ: X2S¾”)”~)Žâ\$ ÷î›yNsVÇ<åÒ××·[OgÇï>jäHÝø€ùЇ>´ƒ>4ôe^¶ž‘Ã$°N3�–¥óБ(v]OÀð¹æ{ßûÞx€Yp`˜‹`˜°(5²Ï f€)¥h¦§§›äØ]§ß3)uãièÄT�l`x/‘·ûî»o9*šz§&”k7)`æÙ²øX ŠŒJ¯>FC¡ƒµ£`>ûÙÏVâƒÉ.`€›•kPãóó`¾õ­o x!ç¸Y9ÐXÔé†nØ�Ífó$âÉi¼! 0fË4�Ê}Š�w–fþͯÁQƒµišÔÁ:}ôÑñ¤Ë–`Ö± 04r €Q˜zXÑ"Ó$S²Ã—:mÛ¶m‹Ö1ÒŒÊ=¢ÑS8Ȩ^C§ùH®œ5ï,ÌÂX¶€Xr€9å”SšU›ÖÜŽZ²×µRŠæÖ[oÍ(<½7 0 OÝå�ùíÁs™e hæ+{ÛŽo ˜4?£2¼v¥f€yÍk^Ó®pn%NÞE˜+®¸â�¦¦¦!0fÕ€F¡ìé·½ím”kX§ß8åF7¿¡‡†Kz*ã-ÐøÇ}§‡¤€Y`+–‡ ÖÀ®¸Aó>Òë¦nÿÁ~@ññDkSct :–1†f=ù‰f<¯!ë#Eæ—¿üå ¿EѤ9o4 ?Ç4Š$Íè3˜rà;y?ò‘�¼ìFßëÏèF°Ü)÷Ó6t4z‰›ƒ¡sÌ{ä0ÌÂÛ¬¡R¥ŠÆ y0?ûÙÏ*"•Œ|íú¼v¯ææãÿø†‘‘0þNé·Íy_E`˜n€‚‰ 0‰3�«h¨õs(š0ËÔæøc’‚ÆÌi§�Ö`¢ÖdгR€¡a°Š¥”ÅŒàEÃìðêg~Ëó'ò'ëúð‡?<`€±¹FX¥ 1ÀÈÑ»¾À˜E�&P4K4)`–±E:}Ë�ÆC˜ZÑ“‰z&X´¼ƒêpd˲š%¥,ëWÁ\yå•ëŸþùá‹.ºh�uÀyÀT šzÆì`R4)`–·ÅF–â@ÓHÀ0DêèèÈoÞ¼y’·¬D©¡ÌD=�)}G“öyC¤�}ìcƒ�B(Z5 qƒ“·VÀ˜ŠfÞsŸRÀ,>+¾ƒ†g€®Û‰¹;†ÚÌù±5¿øÅ/ü2Ï<óLM q‡HôG´NC¤á?üÃ?Ü�s•ïo_ h'/!êuíííS×ÎzÆl)+š…P0ú>/Ìâ²l¹0¢�†{uÐ&S0Q‹¾ÅY9£»vJè>ò3k� `�ÒˆFɸëv»–4‚¢ݯWÈ:¯Ï­+`Ìì3–’¢Y`d…0‹Ë²¤½—�IÏ;väÞüæ7·=øàƒuU0úìö_|qš!ÏEUÚã¹j@̾}ûF>ùÉO*õ”L5 ÑýÌ¿ýÛ¿e7mÚ´NÿÖ]ÁDÙRQ4ó [®ÖK³(-«ÔZ 4¦`ÌÃ?LL] €Ñ]YÀ8ûQh\Œ|$«Œà8|oÑ 0‚Æ/I `P0—^zé®F‹S4‹ 4ìË|FwÌ;K‡H‹Ô²ÍÍÍ#q ¡±°ÍùçŸßZ%`xT˜ºICŒY€ÁÊ•òL 0¬޽{7€ÙÔŒõ;dÔÂs Aƒ_*3߀qm±fÏwö¶Æ;ÐÆRÀ,R£cŒF�À `4¬hS‡œ¬0X\C0ª(RÁ¸ ‰êô.h¢ÂÛ.`.¹ä’U(˜k®¹fVJU€†ÈZ&›Í®×SS l1*š… ß—*˜Åm”z Gdhð[œuÖY­Õ&Î ÐJª`¢"?˜�ÆÂÛTöãyžFX©§F.»ì²a›õ=IA³råJ_Á(LMø{êøÀî…Œk‹EÑ,$`¼TÁ,z#ý}šr�ê8#mmmC:”TÀD=c æÊ+¯Lì8Ž3WÑ(Œœ»îºë:itD«4DêUiô / û`ª €¡üBSSÓZý;õÑ�~tÁƒ-E“&µr–•_A}´µ¥§§§�eR¥h&͆ Öj¸”÷ê`aóõ¯=Q'°Ž¢à` QçŸ8ì°ÃfÍ™gžÙ3444zõÕW�0tŠúÜJ@`øíûZ5lfSïY €qm¡�9öSÀ¤Vʨ¨ßm·©©©^ÝZ¤lè¸Íõ˜ h fûöíùJ Ã%:ŽÝ¯£¶ô|tuuÍH•uµ··ãK³ÌϸÏNš`µK¾ku\ò_|ñÞÅ,.3¸‘ )9lÔ÷qìSÀ,=#º4ÀM�hPÍý,Y»eË–L__ß^u¢Q¯†„/WÁhø’XÁ`RV4$°oå&ßK«=¶›`Ø*4©SµëóWÈ_2¾wïÞ©›o¾¹µ\’!V 4)¤5ò[-ZÀ˜Í'h 0A‰Œ0K̲û÷ïW_ÍOçr¹Á¦“õ€¶mÛÖ�?#ئª“V0ÕÔª‘M�zê©ܘ,)ðoMª#�KÅäÕàY€ZÂS ›.ºè"|IÙ$3Ê£@sã�7ú€Q˜z5aêË/¿|QÆl>@“&µJ�Õ ²‰1¹zœèWÈwÈ«ÁjQ0f‚ŸŸ‰+eÁJ–¾oÄn„’åðõ£=/½ôR“ûûû}å"Ç﬚6U€†Z¿ÞúõëW Nˉܷc悆ÿë š0©UcY"Kºõ `Ôa÷½ÿýï¯0Õú`¢,¬€ˆò|1Æ´KÁäGGG (Á_!€BÑ*�¿ö÷ððð*œàüÇù †N`,âý%Ë‹òú“O>™9ôÐCW±0Ûe—]¶Ï-ú�ñ‘ŽT+·éÕÁ¨O¬Ï›µÇMÇ/[8@‹Š¾'LjµX€yþùç¥:jŒ«` ÏÕ 0˜æž{îÉžtÒI­f×®]žL¡`Ìâ@c€9묳Vj¸HϼÆÙ�†~Ç/LjómM`¼Ì|0 ÏÕ ùDŠ�-`(ÍɪŒŽ‚1ø�2<\r- ̹çžÛ;22`0æC1c‚¹c›½7¼`‹×y˜3ÿl^,ÌÁi5wsúé§·ª£Î<ðÀ“8Mk¹"ÓšÕÉÊÉ;a€ÁóÐCµÚÆ)ŒF�'o$J�&øžŒù,Ö¬Y³RáûjýÎ`PîšW ^ßeªÎ…ébŒ÷«$RÀdVÓÂn.`6oÞì1×IJ¦-œÏuShVt¨Å}Žÿy?€QdÉ‘NþÅ/~ÑäÎø94A©àÈùYVNP#‡{í7 ˆÓó ˜«+`<çÜV ïWYµóbgßõÌO<Ñò…/|¡ÙKmQXM‰vFC$«ÇBÞŠ¯8HhÇe¼FèYiSQ“ùîMÅ(ÞÂÿ̺¦À¸:ÍXÔþGEh¢ âùuëÖ­ ?(¨”7¯€‰P23µF˜\À˜Ó· ÀÌ·ÕUÁ蘶°>ÖÖ­[½^xaæ�þè�¦¼ÔÔªR2L:0?ÿùÏ)99¦0ò C^c gÝQ5.òÆkä¹´··Ïʃáf�ÝïbèXÔh2z\†Hf³¶M¢h 0+V¬è1Àè3³ž³²ã<+˜ºØRL½LWWW†ÚËÃÃõË\ªhÞ*îLF´mÇŽÓæäÅ4„i•o#ÛÖÖ6ž \œaxD&o*¦^¸'9�çIjdfÎ8ãŒ1/ÁïˆS4œ›nº©gbb¢pùå—˜ãŽ;.3ßC¤z*™¥ ˜zE®P0ºeÕ®fP2ýýýÓA gŠÅO§Šfá¬"%C#ï´E⦨ ó†fÆÇÇÛ\§jœYôÈÝ.0€)µ:ebE`ˆN-$`êi)`(søá‡çÕvŠ•¤RóФŠfá,1dP0×\s�?Dò‚U\µB¸TQŸ‰¤ !Ç%lÝûû`t3L¹ÆX4×_}·†^Ó«�¤€Y0«+`î¼óÎÖÿøÇ”,™f¨î¶IÔ«†æÓ)hÖA#5ÑúÃþpZ2Ô—�QÃ!ž«41ŸÃÄÆ¢‚9ï¼óƼä šOúÓ]ø`ôÙ£äŤ€Y3ÀÔÍ£‹UÀ“¸´…4 ke!c FQ¤’€1«fèdF²÷Gyds `ü0µW™ÍÍ�7ÞØ©ñ9Nåƒ0…:&sï½÷¶Õ2·)Éw8 ¦æÏr âroHA³pV²Q˜$ &l•�0BßÜGÁT{µ+¾ïºë®ëèîî.\pÁc‘‚ñ£aõŒ:l‹8uß}÷µÖ[Ñ8€©ÕŠ †˜JcÆ{€SªhæÏ"O€QÇœ˜°%�›D ‡·õt€mÙ²e‚ÜÖ×0(˜z† HÞS£·ÙàI;ó|X(å¿løº€¡‚`°ö8)MDfXêU i‘u¢`¨çôÃ})Àp\Ân"„­c«#ÒæP4' o7Öæœ$0 óN–ºR$ )üŸýìgÛ 4<‡º †L�C¤¢©ó´éÊŒ’š—›°0¹·H,X¾d=™F) ‘¦ø~αAÆ6xÝë^×,‡S¶ŒiœÕ0þ�ŽåLRÈ�ÒpÓM75¥y4�·Y' À¨c¶<ôÐC3q &lÕ(–1až’žž²!R½ÃÕŽˆWho›ŽµïŸX €áÉ0djU4ó­`Ì’BÆ,U4�·âÉrSNÁ„­RE3==�%œÌTž¯`Èú$­CTI‡àª»¯•f܆g;'ÍÚµËB ‘¢ƒ…!cV�¢YcV)dREÓxó|aS©3-©¯ƒ¨Î`©™ézFûÞL:¹ ›iX6phÆ~W�«e ¸,&À”2)™I@“4ê´�€©ÆÜ„½4êÔˆŒW¥% ÛPf‡,ÿ× 0êáÔSOm´¿¢n€¡žQ”2+w4Ï=÷ÜL šúYÆêªzu6s†º ¦ž€D‚µªgÆ‹pîº aÜ žž©Å\­ã·Ôgy ˜(ÇoP{§™Õôu»ÅX]cŽ_ ˆ�ΫÂx/óçXÝ�¡¢†Œ‹}NØ¢¶¦FIQGÑÔ]ÁFù²¤ÂóRÀ�?£qw«"ƒhP4^)Д 1× àºN¨0Q"o~×»ÞåüñK0®‘Á| 'TœãCåFVð8í´ÓÈBŸNS»5y�50AÉ̺ ªð?+ `ˆ>ýèG?òç2\wÝuù«¯¾zd1€¦Q€QgA•P 9«aì Ž;î8…ûÿÒK/eIÛâ뮂YŠ€éîîÎhÈSÐgMWòYTèÓ©‰4ˆ´tgý¬‘�ñ#oýÌ™gžÉJ’ué¥êìYAÆ+ヱmýNLþŒsÏ577³kÔ˜ jD£ š* _Á�µ°"7Ôë,ýËT :%åOýï5ÕüœsΩyÐrûÛ'ïÐÐ�,“~–“îмeË–0u¶ºN„s’ß:$!Õ(L)ÀìÞ½û�|>_0º�éù‰©©©µM‡>Óüóê n`˜‹Ä‰p`êóæ8rÍïB‡çO9å?ôo †+ùRL5„õ}°¦€©¿Õ2n©€1ˆ%õÁüõ_ÿu+€ àÒÏ‚pdë¶OWïüB�¦€¡Ã2•‚Ï”m †pÜÒ0n‡vƒ[Ò ¦3°¦€iœÕ»H�¦¹Q€a˜„%uòf³Ù F*¦íÚµÓíííþ6ú?+Gô‚€¦Q€!Ó™Ïá³é8”m�"iÂUn *ÌrS0)`æÇê 0êÌ…F†Õ)“fddÄwò ì£p¸†ÅD22ŽÃ Ñ÷44 ÌŒeäš2Iœ�Ë0:N…0�³º@&HdZ€¡Ž €AÁ辿··wZ�ÉáÜ ¿ÇÍš5k*V4^¿s̬c’4FCªƒ 0”ò ºTj›°‚ÑqhtmY[=¢Ktœæ`ᵺ?�à’I ˜–––u<‡‚9âˆ#ò(˜Àéù=hV**höTuJb�ÌÙgŸ=å|ö3Ðè~ �ž*^­ùM6k}>âk�Sº®CuÂò�Ï.»sçNœØ8sçlV0:©‚i°U ™`ïÓ(À$uò¢BöðœþïT¦Ý!’kjä¡Jù? šÛo¿}Ïyç�WÐ4 0(ÁaæÚ2“]Ðè_r_üR›¤ÌÏ'`¶mÛægÒòĪU«šë·~Ë«ÔÊeñêB—!|ÍDYï@[œµm`R3–)×H£Ì ‹j.¾øâŒ«`" 0ùÖÖÖY€a¸¤èÒj9ƒ'Ô÷óz[[[4¾ÙJEŸšô®¢Á¢¦ ܨWxZAƒÌL%çΖçeú€­=€±á †œ}ÿ´�¯Ä¨M^€ŒZ?Ýìõ¯}R“fž¬*%`X£úðÃ_” ÆX”Ø `\Рhš}z¸2ˆ:U=tšc>–$¾ ¶aßIB¤–Ï|Æ]2V Ƈ¢üvùJVEÀÉNæ²ö™uѧôþØ9bQÇ"ÌÂZ¦Ò«¡¯NÞjã*.öØ”ŒÂج 0ä*�Í%c»XoÀÐauLò¦`ÂNÜr ±”ù×¼æ5™ù˜*`€Ñq&4ì;Óù~f7³œ¬ÚÎgu)«´â�Y ˜…·ªÃÿ ˜/ùË�®‚Y·nÝ”†çìÞc˜˜ó™¦hì�l_.—«&�¦!€!ÁÀ ¢ÂÑ¥ra 0'œpå,óÀ„%Ê(lß¾½éÞ{ïͱ_^V.ïÇÝ.ÌÂ["È„ÌBû`®»îºÎýû÷¯á9ÓÑё愩]ДÛ�*A3gÔS¹!FTç †HóÏU0aµ8¡§¨@W+hÊY ˜Åce!ãfýúõ……V07ÜpC—†<>`tß`FGGc}KaðÎîììÌKÑL‡oƒƒƒy2ƒí†Sû7~ã7vk{®ê©h0f.hƒc¾Œ¦vLx#@S/Eg)`—•tü†‡Hr¼q²0z¼šçðÁÈ·2uä‘G時`û]æ.ÉÇÒ*¿ÀZªø=•§Ïðl³Õ«W{�>úh�×ôžê U@=š *߬} |3 ×Ò•èš)V @ãU꣉³0‹Ïb•LXÁ,ô) AbÀìÚµËßÎî㌵�¸—"Éȱ;ë&ù>ëqøFy ûEIÊ&o-$`‚(’˜yT0þE¨”‚‰ÚÏz+š¥˜¥¸{- ™0`ZÁàƒ FÐh’꘵O¥@C$u¥öÙg÷¬X±¢�›¢Hýîc÷ÆsòÓôÉ/“N6í ’ô²N$i–-ÀÌ`æ£d¦FÃË™JÕH=}4¼o)†¶ó½ï}o•ŽÛ o™ØÈR¾`Ìc€‘ÿ¤˜žžžD ‘ñï Þà 99{³8xyL?ÈÚ�my]~šu(BÙRsãNø¸.š^+`z衦‡H3惙À°¿<0ÀTSÔËM- a{Ý=`X ⵯ}íʧŸ~š¬kïî»ï^ ™™ ódÔ™š3`Â`I š°…ÃÛføx¸ïïï_ÍJáñÝA®ŒK´sW¨¬`¾õ­oMW ö‰õ§æ0¬uå¦Ú �å†NåÂóK0—^zéÊÇ{lTm˜ß3ªvZX )BÆÒοýío/ '¯ ÂÔGqÄy0a ˜• Ã%3jÇåÑ�ˆÇgI)­0ºß«N;ÖHÀ0¼©0(f/5À˜U3tZj€ùÅ/~1úÀLª³ô kp�,ÐdœF½(ƒ‚QGŸÐp'ÑE€f}®™Ïð pŽ<É«áy7‡ÀÛú€lö^xá…#q€¡ü„ž«0ÌJ®UÁ˜ùX©€qÍœ·‡vXÖÍ v3~µÍt°„Ì’ŒF«´�#úw’éºïÐ9'�2Ã\.�µSí4óÆ7¾qÐ;­Xäèú믯;`è4õP0IƒÅ)ÔKÔö¦b`*-„5Ï€ñ ,FÑ�ìä -À¼þõ¯o0/¼ðˆö{B·Yî Š¹ë.·mÛ¶ƒzèäÏ]bê=Óè)<íÕ0D¨ª §$%w_tÑE“úŒ’€!7#ª³ŒÍ(LÔ%“³­GÑ¢!©�±5kÖO¸9‘À1eÑ(Àà‡ˆZi!‰ÕÃìäy¨êVT0:ŸÌ�j`\s�|5$@Îè±_ÇXç1»eË–ìbÌ'>ñ‰•(£§rÌBÀÒ!¿Ì¸TYÁYMâ U4ŠmÓþëª`* Ù´ÎT�Á`Zaäº6²\¦’Þ»woÎF÷>`PO—]vÙ°Óñë®Îj„ÓqÇÄÿÒÒ+Wη‚i+³Fƒ†„=uÈ,I~¶„ËRP0fX¦'µÏnÙ–«é2ö›ì®¾Øq°�&‹ H˜`rÙ ù$IfS`:::f¨ùÂc…�g’Üd>�ä¿¡TCÞ}MŸåKêhÀ8YŒþŸÁ!¼Øão3trÌ|ø`p(›‚‰ S'�¬X�YÔ‰Îhxn©†!’ç&P0ÞŽ;Š'–º8ÔDZ›žÊâ ~þùçgî¼óÎï ±Lp+ ˜×½îumjØLÛ�Û®cåP/:À„¨ÛôÿàÇ>ö±A \Ç}— �€ä=÷ÜS8餓6ðþ|à{Ì�íšÆ¼dïfq Ãó:ék`\‹(‚Õ„óp> _—R0ak¤¢¹Ö©E¼T#…2Á°Žçu!ó�  Ñã‚ÜRÕ3¤Jè¢:ç¸áT[nÙ¼ysá`P4ç>®š}Óé§ŸÞªÎèw°Õ«WgÉz o¥`">3l; 0ø`ä‹éSƒÛ´iÓZ@ƒòÐ ` '&*ò>tÖ8Θ—ÇÜë|pÂ(û0ÅšJáªx˜uâóooï¢S0Qæ,T—£ªEŸ¼ÆZƲ†]L9khlÈdUñëªæ¿þ×ÿºòûßÿ¾ïƒ1À˜hd3@FÇwi`×€�~oëÆ�óeì÷–¸e¿øÅ/2³0²áKª6£`Ûç epÄöõõÍÜ~ûíîvQ Æ‹†V! 0êðfJ×Ö—^z©�Ô½Ö)çì IÊI–0áÍ/¾ø¢%2¸ÄEŒ¢Ì¢N†{̺uëbcë<Õ@]5`‚ïŸOÀx!Àä“fòÖ{è„‚1Ÿ ¾˜Å ÌÏ~ö³HÀ`6\ÂÈ“¹ÿþû§™qnz�S{œ¸ï¾ûÆ´mNNîéƒ0>™Uù—94æüóÏgáöqý;ƒŠÐÀÓM0üãø`¢,ㆲ F˜$ÕŸ tp› 4ú·ëÉ'ŸLæq�Ç>îÇ Z>,ä§)‘´¿%Læ"å‚¼Žª wó¬`šC€©hŸë›äiNߥE’Z�Œ™ š£�>Ú rf²êcLmÉ2”Xº:Çï³Ï>K¸w•Nâ*/P440nv+ï4Û·oŸ¾ë®»˜¸X\üÞæôD}QÐXý¢ßº_ ‘ö ‡šÜ!P¥ Áø¼R?”!Û`J){O�€¡€S6ä—ª¨.SÕð§Vи³Èƒò�‹ZÁ‰vã(¯ ÂØÓj÷]…;èBØ:™‡¢N<ñÄÉßþíß~À¨CãýªS‹û”ž÷¬(“:m+“ /½ôÒë¨qßÃk®‚0znÊLð™E…B~„|4«ñÑè©áãŽ;nPÎç9>×'£+B8y�×]À”óÁ`uL®`’tÞñÁèñtxÕ…j­MXÁ,fÀ¦½?üðˆÔ8ÑÐY Æ�"�rÊ)þ=Jõ¢ö¨ëeç(>¦ÀWCP—†ðÞÛßþöï ³ÜÛÞö¶ÞW¾ò•:h;KÆßVfF7AV�@åE^¦#´Ü}÷Ýqr¶¨`(…SF�§OÏMQTÚÖ§6ã…ž)ìM’]¶»»{XPj‘C·Iyì±ÇŽ 5 V8sýi<ƇÃ> 6czOñ„/Àx%ŽKœÍ·‚)‘tlêLmÊS[J WÁè|.j'ïŸþ韮ضmj/+8´ªÍµ¸79m›Õ–›�<òH"�þ�çÕŽ[õžIúyN,`8×o}ë[:À`Y©�I5ä9€ –ž�ÕÚÔÉ  èkq}Ý&ñu�­ñù>`Ôaüu‘P0úŒ>†>&n§P16¢äÄŠ+ö–:Å€ñd2yããø”æ0þwÇ=?ß>˜àñt%NÞ¤–tèäf±G‘>ùÉOö¨½�yL C¥Ñ¨Ë·ŽV{%¤=ÆM�‡aõ.ÈYýï+µÓ̹çž{PËþÞïýÞËQ€ oHg¦á“¦ˆ“Í%ñïñÑy†C¶½ëƒ!…<Ià½T–cNŠ—Ð 4¥|4¬è¾@í—G=˜ðT�¨(RvŸ/À˜…·+e=½ùôÁ ãùíÕú`ÊY9Ж`®¸âŠ̘î‡ÈR»ì¾çž{IÁ½qLi‡{÷îõ/ÎNÂ�ïðeb¤Úu7}ê=ïy€iXRãB[& `¸ÊëÀàñ¨ä˜ˆÀ³*ÃÑÑÉOᵫ¯¾’û€AEà”EÁN“•ÆÌrc˜·"h¬ ûh(®++Hú>²BI¾K ˜:D‘¼ Dg¡À¸–±}R‡ÌÔ2Ob–5ÌÕ´‘€q-ÊG³” C$êÁàƒQ[Î’–ð¥/}©KmÍ`ðÌ'`°°¢YJ †!™¼ž¿ï¾ûr<Ç´BÏ(šrŸµÜƒeËF*&ƒ¼C¡0ý5¡§éÓ,l,n>­¡IóÀÀ@ž¢I(:y¢¾“O>yjÕªU9.•€ÆõÑD…·YÚÿ1Ù¬%Ú­3'ï|ÆJAx•[Æ>£õ$f æ™gž™WÀ˜hLÁè꿨C=#e2Š[ÀcÆÿIAÃkFý)»\ƒe,[7êE ÒO^òÖ-[¶L0¾äyÛç°žk—×|JãÔ  áä®®®™Gy„bÜS€!*\Q½„Þ\ö«“wp¢‘®,/[JÁ8S0ÅϘoÀÌ·‚ ç³Øc Æ£§²‚J䶺XϨtÚÐICùŒ;\b¹ ºu[6 Æ,cŽÆ°`xŒ# ßCòd\“ìkc�5Šl`‚™Ï}€㕱J@ƒ™�Æ ‘+Ô‹ÿ£J„©ë÷³½*-ÌâV0ïÿûWüèG?>`ìµ$ ¹è¢‹?ûÙÏ2Ù·éšk®VßX�‚Q eŸ·ŒƒÍR0¦P/º¯Ñ8¹wƒ‚0¢ô”F} €‘Óu`ð×x%¬Z é»ßýî^)˜Ñ0ñ–¦20R徂‘R�“h¾Ðš¹C§¯~õ«Ý\–™[n¹¥{¹CɳáS¶Ë$º9kMÑHm[†H¦`ÔaÚ¤(|Àè ÷ëe0nź¨êua«tèd%3ÕxWëFòS¿®>C󘚊 Q—`˜(J ÊŘ÷½ï}==ôK‰ÎR0a+¥hô;;ä;ÄÁî×lZnC$×üd:n:¸$æA"¹îÔSO�Ð�gœºÁmÆ”N0‚ÑjŒî”†míÞÊd–Ú™J €a2¤ÀBN3>˜0³m±)˜¥9Å#LØJ)}ÖÓ–;`°Y>†I–ÇD‘æ€!/媫®£t§Y¾‚‘´Ü`´I¤¦žŠñ9D°´/¹¨!RD}›Œwàx/`¼N~o¾Í méa–YÈ‹0—^zi÷ã�?>¦‹û˜¸ôkXÑ dô[»×­[—yûÛßÎdÇe ,‡¸�,ôÄOþÍÒ‰ŸþùéÀ7S´jƒ)Úä 3WÃW4ÜÇm«P¹_s#ê5ÂâÚ7rv|À `>øÁΉ"1Ïi±†Ï9þøãËæRÔj‹ 0” ùÍßüMÊ¢. À\~ùå“´µ}Ú{"åGf9³§1Œ‚$™³Ï>{ÙË>ùä“>`ˆ Aä¸!K0øA¨�«çú 0*eµ� r[þŸ"`Âaêð2,õP õ S+¼ÛbS07n\ôNÞw¿ûÝEÀ¸éá¹{å Àlݺµ sæ™g¦€ ,û–·¼¥ÍºäÀDmŒ@°/HÆ+¦Q 1Àl>`XÙ1*¦žC¤:ËÎ,KÀàƒYìC$)­.ùçÆ, h¸8ßxã�£všM‡H³-wÞyçårkyä‘G˜÷C©È£N<ÃpÉŒü -Šû¯Ö0iFCš �_~φ@|r3Î*:É‘ìO.ØÖ�ŽŽ6zè¡{.¹ä’Ѱ‚©ç©^øÜÅÉeøÖˆ ê\‹f±‘ŒÚÕ˜Sq ©X©¡€AÁœqÆ)`b,‹ƒWѤ< É^uÕ€Ñ.Fÿ¯BÁ@"ÿË=ØÌRÌ-/X/EÃk®‚àöPȼ‘NÞzÙ|†N\ `˜©¿˜óÇüÇ�F�KÆ,NÑØ)L¼e¬<Áõ×_ß"¯:*†—Œ:t¡lÂÔ.`víÚ5 ?δÆ9*®9•Ù=g…¼H+u"DÍwè꼎©†%Y–`êä,.kV{ÆŒ³Þ|™»\ ÿ/fÀ¨MwJ=�³b*ѾJÞïN©‘ù¾äÂè³(ú�&Š!l�•k ”ƒœ¯`vìØ±RÏŒ6Í'©eZ+h 0’Ük¥œšC€9Pa;L,`œ}ñm.` ÌG-œjÌLReh|Àhèž}ãߘ¦„2œü€0`+ VËЉڮ%ã¿'LyÀ`™Lcóï–`ÞûÞ÷vÔ ˜ÀŠ &Ly›u 5®lgˆd€éëëëÅ\)`̪�ùx:::Ö…w‡L:DJ³F�f©ߨG?úQ¹Ÿ`ˆT `hs†ßœ‘’™°9p¬<`>–'0(Ýf†ÆTÉT Ÿ¯ˆÒZ)¨ðÒ!Ò¯Ìóú׿~& `Ìê š¥9¡;4ä0“•ú`\ssÎ9ç y)`y%€ �9KÁ\¤–ÿøÇ+qò*\= ßÊ4€1¸�‡ÑИ‚Ù¾}ûæ"1DŠ %`°ùV0AÞMEä¨h–`Ôf}ÃÿV0¾RÃgɤÇ0•[ö¬³Îj5À `t{‚ sƒ.`˜ Ö(ÐëÏðú©˜ÝvÇ9yy¼Ø3V­‚ [­ YJ€ Fm)OB¤½V)hØþÆoììêêʦ€©Ü² Šÿð‡?ìe½›Ÿüä'>`˜Mt~K:ª;h 0ê@k¼ëÓì%/g©(˜ù0CD£Z¶jAã†s¶˜súé§·«mÍŒYRаÐÝ‘GÙ¾yóæTÁTiþÁGÁ,+XŒþ¨£ŽÚOvŠ$»SÙm¦)ÏñØ YUó*jµÞ:¤À«ó°.+CNtö¸ãŽ[Ö€ù³?û³™zƵJÂÛKIÁ »'ÉÕ Š¼ÇZ‰âù>`n¸á†Î“N:)óÚ×¾vØ[f€©—ŸÑ_Eꥧ­­­ðâ‹/â-/®J<ª+h0®†”ÏÜZ$E÷Æù`x¼\ýü…zÆ, h2ÁšÜL¤åœ±œ·8-{×]w%ŒYhÌ—¿üåõ Ú ¸-À¨½µœvÚi½W_}õn¯–0ø`P0ºZÒ‰cg¡š²©uèĶ(ƒF�xO ˜Ùf ¦‘€ÁÊ �\ÀpÞ+`h/·ß~{[¥€ÁÂC'œ¼fÅŠÙå?rŸ¬ÓE¿ùÞ{ï]ãÕÁ2rh­Ü½{7cÍðÚ×E«·¢ V?X511ѲuëÖ½’Þ,obï+¸€ø¼Ì<Ì`^L¡`°†fÕE)š¥¤`Lww7K.ç+ŒkÁÅlÙ*rãdë_zé%Jkyzè¡£ õy5XvÍš5ûuR¦£Ö¾6¸ÔKј‚Y¿~ý*j“ÆL1Ñ.Ìœ!RcÓv½¹Šf©†ö¢€Ek½sÝu×ulÙ²eYFÊmý®]»üóÜÚÚ:)ñ±ÿ©§žêÀkR4ÈÁ™¸%.µ‚††Êv}}}«õo3K¦Õò~lYÆ:HHÁÌ›h–’‚ùú׿Þ&E<`j©aL?�²ýÄOdòejD¡`XðO÷ûpŸtttd?ùÉOâ£Vè¸çž{V{UZìºK®¡h 2Õ �‚u�©³J ¡Y?¢? ˜TÁ8ø‚ò W/1¶TCÛm[»víT-  V³l—Ê^v>˜;ï¼³•uäÌØØXÿ•W^9! U¦ûûû)«ËÚ÷+ÆÇÇ»5t9ï¼óöVøeÊžŠöîÃ|¬¾)7@sÊ)§ V2Ü uƒÙÑ�;w®"�7 0žñÌ,kC¢ FÆýíó š‚%ýQüê²Ë.[¬ÎöŒœ’­£££Sçž{®¿ Ãë_ÿzÚ_ÅÇ À+µ¹ì»ßýnr[NN^ ½î…^ð#˜P¸.§ãÚNþ“I)±¢!Ô8å_ôzçÇ>ö±&ù¬Æ*ùžÄiÖnH;éЉÇO>ù$ó¢V2Uà�Cé‹R0–,µ£ß_\¶%â·Ïgƒ/DL¼\Œ–¹ùæ›[µ�Sáe^l�í¤f€!Štá….+À°ãé§Ÿ¾öùçŸ/`âV{åùžžžA)žáj|49]¼þçöÂ+DY%ŠFÒŠ,^oãÆ�+õr³œHû>øÁ²–Mª` VUÈ8C¤8k´¢)P Aj`ÑFò¾E÷ùÿ³ŽTREÃñþÌg>ÓNÑï7¿ùÍ\™—•‚Ñ…m-C¤ÉÉÉY€!ã_*¶¿ JF&¤£ÇÙjMnõêÕ›¯¹æšýÇw\bи�£@ÓÙÙ‰ê)(Ö¾2ŸÏ·°¢�¾c`‚œ˜ƒ0�?©¢÷¸ Ï]›¬Dg£@ã+˜¥5öXÀ˜• Ç›+ùæÍ›³ò1,+ÀÖW½êUkyä`2GÁP—9 2�Å‹1�(+÷G÷‡>ô¡æ[o½u´Üwfõ�Yy—7!5+™87t¢¡ò9 �¯ÔN6˜+®¸bŽ‚ ;yét Enª%B°ÆUAû}(ú ÞS)`°Ft_Á,…!’|{ÍIc7t2À¨³,KÀsÌ1«Q0r�ö•"Å™àÒÄÐIÑᡤQ§¬†3ýЉg¯¿þúMŒQ+ñÑ„sOé]!¨EÓ$§Ñ¾0`¢|0<'ºnþéOÚôío{“·DŒÆú¿ñëï¿ÿþÂQGµ�\ƒrï©0fõ쾂¹ôÒK=`´ŸÍ:^Ó•Î>ƒÆóÊW¾2³£ÑÊšmÛ¶yå|0åÌ@“ÔGƒOÀSèÎM­Š†÷ÉùÛK˜ú±ÇH¢`Œh¸E(ŠÈvìØ‘ûÞ÷¾·É[¸n"“/«MzýöíÛ'ä8œV¸žƒ~H)ÐÔ³ztŒ‚E´–`tᚘJf‘h8Þ¨M–�9ãŒ3>,'L€ùùÏ^�û¢�5頻Y%Š&Kú´ šj ÛëK{ÕÑXxm@Ÿ30aCC0úñþó@Fë™gŸ}¶I Ùè-RãjØßß¿^Q³!Iø�_sƒƒƒ£òI ©G‚¦N€1«¥ƒøC$ïÀfQæ _øB“ŽWÈx¡‹N% 1Àlذ�<˜eE‘V»€QË•[l1lI�ïÔ ƒ¦ECnÊä¥_!Ç�b0JÁD ‘^óš×l0Úɼ¾wš"ær<õ9 YtC'S0Ú¿Ýwww7 ª”­hÒñÕ}и>š:ƬšŽâ+Ö?çâ°ØCM£RÇ+ h‚ìå–N8!“f6`ÂP /I”Ä’(š¢ç¸”¢‰ƒ €!ªòùϾWïo’3­b\˜b PZF�ƒMˆ|¯�æ_ÿõ_ h×¢`LKKË¿Ù^Óq+°º¥€9ªß5´iÓ¦ ÌhåµƬ’S²b³‹0€<˜ÈßZ 4µ§ì™gž9áÕŽyMÞ°¤ &J½¨m×UÑÌ:`qŠ&¼€‡Bã»Êɧ2H¡f¯ÃÿògJNøÛ e4ì`‰Ó> EXŠeQ€#‡áº½{÷ú€éííåJ;g;@ƒ¢a(uôÑGûІÝÀ˜%iK 0MM‹9^‰AÙ¢ZÝC¥Èûî»/[ˆù°ë®»®ÀE*7DÂÂÏsÁ÷*´RŠfÎÁŠR4zÚ_Û ÷ÀçsŸûÜ HúPfr—Œ«`ø_je¯:# fÖ�êèèðÿ?òÈ#}E³Ð 1óâ‹/Žh|ÀØkòÅÌÙÐ(²6®ß6,�ujX®K©×`b�A�¯3]¦[YÐð~б�vÚi™‹/¾¸n€Á‡Å�Ç‹4ÿøÇ;O<ñÄU6©`ÌxÝ݆µíi/,²˜ô¦·åîºë®Aµý!‰ŽS4™/~ñ‹ÝQ_*',*ƒ¤›•tt}È.�€× 0: Å&PAŒ«`¡XŠT d Ã%‘·_?°€¢Qg-°Ðœ"Nk»ºº2ëׯϿå-oyÉ›GCÁh?|ÀSù[šµþkÚç‚h«Èß½qãÆ=Ìû`ßIVÒ”…êX,¯�ÉeòY½¡ôêmá\0×ÎÓzÝÞ¯ö¯ðÐC­9å”Sú\˜ØrÉ™äåã`åfË–-ýæx× 0üou¦¹è²ö<»²†‚©0®Qs[ÆU¨ ެú#Ke’ ¡Lé}~;Ó{›Ž9æ˜A>dš› 2ãÞÔ¡²êXŒçúIØP6rPåƒÉIÝt³z^9À®Ž Ƶ³†{^g»…R4¦`ž~úéQ);0<¯ýð_Ç£ýò· R08ò?YÏ@ r÷îÝuòÁë5ÆÜ†P0‡s`þðÿ°ù¼óÎ[M´Ìk¼ùmäŽ;îØðÈ#�tÞ}÷Ý‡Ø U‹ÚÖŒÚZ¦Þ€aÿìyÊB,6E¥`ôt®Òˆ‘P‘�«íNj4Á}¹›Þ3y ¸<ÆtV¢%eeȬ榽ʽi¨´RWäUz#‰uÓ„iÕ‰6é Ñ®ÿ[�DååÀÑgï!W!0ac;Þ«ï�W�ù`^zé¥Q�fP„gÌY`€ RÆÌcó;¬Ú ¶ž*ãš¿’‚:=y0S^�f€a¢oÀÈíh À|ýë_o*·ZkÓoÊ=þøãÅÇ×ýŸ›Îg–۫͵êX­~Å+^Ñò­o}kwiöç.í·›†D,û0,P¸gXo”/Ä/GÈ 1]�Çp¦ft ^•U0”Ú4À¸?¤RÐ4Zј‚0,ÑëÆÌ�:¨Ÿ©¬}Þ'ŸÒ`Ô�©Úÿ`$§ñ¾kXÊCzA)À¼ð gœqÆ ÃÞ ów?K°Ö4E£ãÙª¶CÛ ÂÀ£€fÛ¶m-ÿþïÿ~ˆW½ùÓ#‚µ©ë¦` …õL©4Q ÆL=@ãZ\Í 'œ@;kÖEd•““Ãw—“ÊâeÕ‘rkÖ¬!dܬ%*Âã\ 4zÔ‰:†q©—1�ïÆuà' \02\•½0`~çw~gŽ‚!Šd Æ|•X£�«`Œ”JSܶm—!O eJWf®¢Å›œ¾y· ~«†V= ™ÞûÞ÷î÷d®‚‰šÕ`Ô)ziï+üð‡?Ìê¼+êw×SÑÌR0RÉcŸúÔ§€­L¥ šÔ Gôüàc�=V5h¬+x5Z¥€1›gÐøçêÒK/í:õÔSW’c>˜(S+hÊùt¤ô§õÛ›ÕŽz›Ü­·Þº'œ+—µhˆTŒ‡“N#äÕ1ºõ›þ×Gmbd’+…-kÆèðØŒü¾‚Ù´iS0îûjM½�«`t°ö×çeá×??Ï Å&xOë··ª¬¢3Ix 27«8JÁà BÁ|ÿûßÔ6¬ë<ë<âËà¾NŠf–‚¡d€ÎS¿.BÍÎ÷áoFá¡hª�¦ ÍU ³y Cî·¾õ­+Ÿzê©b¢�žÏÅ¥Q AÁ¨ÿ·˜‚ùêW¿ºûþáÂU/ýu—üp«ˆD,�«¯àÒ¥Ìøj‚¡“ÔÍÔW\1¬æ8Ãj†¨[M�{>̆HŒdy. ³¨aQ3Ðèsë¢hÈŽ´(€‘3tVgˆzS ¸·èRÄ>挎o¯TÎ~IÙ†&x©`~ý×½GatöÁ /Üx 45*š"`LÁ ôIù5ë{gm¨×½@-Ž¢ò*�Mð\ €1k0hŠ †IȦ`Ô9y“‚ƪZ’'ãZ¸­D)˜(À`>`·ò�çÕ9Š FæýV4p~ñC�Ú …æYÖV_VL´Óûv›‚!caßz ¡£×ªhô»ÚµßkõþýêŒ{qnéÊ0­ñçŒ:@ž{�inú.ÿžú§,é«·OÉÇÂTˆYŸIf F cŸ× +çƒ1ó³Ÿýl@Î8?{»TƒsM ™S0 e‡�R¯³Þ` áb–tèdPXL€1k hŠ FWrPúðÁèÜ£¸ I ’4ø9OáZQWÁpnãŒYÀA%Oò F~ Êì§C`ì ø]‚r äÒ ¹3R/I³0GqÄn† vµ7K š¤ÛE)šï~÷»‰goá _è RûÞ½{ ÌCºé¦›6èX°&!üâ=7Iú*á|•Vê¸õê#Öh¦U SÓiÞLÜ*¦`ÌãEdxc¼FCµ›=¯?¨ßÙ‘4³CŽ…Þ{i„ +ã!f aèÄ14|ŽWâ7/FÀ˜Õ4¦P»N?ýô•ŠZN©³ïV»W¿ã³§YËLÇ„ ÌL¹CåR7}~7ItÚv*¼2 †‚Q?hAÁœrÊ)Ùo|ã%ƒùW#ëÑøC$ÉÐ5 “wà °2“ÁbXœè&u,_AQ¤>uÚ¦@¡0ÈÔ-‚ƒ{˘�³àõD>›@Ñxò§ô>~þùç›Q4å2ƒé8’ðk£Ø:¢8?ܪôÛ6zŽáPFÛá½oh½RÁÝ?&äàO”Çå�iÒ° Ïv‚N¯žl$`ºÊ?W€ÜW0[·nõŒFWŸ‚ûǔǺ#|Ͱ·%|A°mÔÈ£éT;à|ÇÕtõ „ˆ‚0,àg@L´2Ê�$@"ªYPÔiŸ÷Û¿ýÛÅ b˜zL�h`Ì þË4‘ÃØ„æ+†H:פ—Wê‚Èùä¸ú‰sAò[¡Ô¼#R(ØÖRR\³ÏPnÒE{\B� ÷ðv(˜V�וj[¹¿ù›¿Ù£ßX0XV;\T0F�vàðÃÏë Ïë…צ¦.‰† ¾r°©4Vü<ª& KR¥âæÒØãRámRû“(š0ë™Ô©ÏSŸîÐÀwÀLr]M÷qÏMŸ¹O£ŸÜ!òˆôž}Ryû¨™£ßËóäÁºMÛöêdíŸÀdQ0å|0.`xÍî]ã\‘�ÉM~¹¬Ýó<Ã]¤³€wE.*˜8À”R1®•R4ü楳z(ò`t.W>òÈ#þïÖ¹˜"QÎs¢˜joy÷¾Ä —ˆgùpQŸ�‹D€Ù‡Äõ¡¡r´VóÁ `Ô¹è”�&ÓD˜Z †ug&(—)ÀLÛj|ú›¯a™VàŸh<û»wïÞÌó6U€†H‡×=Ãî ‡Ï I¤hâÔ Ÿç<ž³¯³ŸRú9ý«Q4Ô£Q¤k–¢1À0KZ'o˜F «9aüM:yrÁì¤Óå8Ѥ1ªÔ‰ï»"óÙ;ú',í¿®N9¥Ç픽ûî»?÷¹Ï50ILà”ŸÕ\Ð�L¨Ž=ƱcI+‰g»:¶cç�w^TÁèYC$Ò˜>}V³ŽÉ¬  гœE)šo~ó›õ[wèå%³Z y0'�tÒ “qõSjw輌©ÿõ“k„’MúY´]47¨-O|ä#ésu U·äqÆ|s�±ŒuK__ßJ�לTT"c–‘ä9 ²)ÔLã ]\îÓÂÕÁd0úÂP0Š"m¢ó™Fá4?çÆýð4dÄú•ã‚ãÒñÉŒåó¼�Ä8òVpÆR>âÔSO�~õ«_ý"¯`¤z†Õìj{ç�wNixµšÉŒ€†çL‰©Á“„„£w%’Ãï¤Ó¾†¼FŽÕýŸÿüçæäuL©<Ã8]ç3¥\ÌhHì;ù*:¿Å+­½G {…ŽÃØ…^8ñö9NÞ�~ô£{tj ÆLWÁi]€–xݹ«TŠÇ]¯çuáëÒ9é‘zœ¼à‚ ^öj°ZƒïÑ;Ð •‚‰óVɤJÌïþîï®xöÙg A1þIõÕUz‰ñæ°\ûtžJF•lhŒéw3•c-sŒô™´ÑY9`áÈŸcÓ¦`Ž9昲NÞ(ó§èj¶7 N@°Æ’Æ3ÀœuÖYEÀ0õÀà§`Ö´ûá¦h*:!KÝHî ÿo7öÙgÑÁÏûö·¿í_> 0D‘\À`çœsŽ¿67Yͤýÿò—¿ô Œ®1fÅÃn€ÑI,æÇ?þñ`£ƒŠ,¥`\À°Ìl)À`R}¨8×G3 0,‘0�‚Ù[ 0QVÎ,£\Ã0ámY¬38‰ÕYÁTôF¾«’I•(õ±µCFýºxLQ)ð²Ë.ë×Ëú�v²A÷}@Ž•;ÿ 娢~†‚!0²§RÀ`,÷ÙÄ�† ¥0†µl¦iäòÁl+ã¦Ú‡§”S4VÎ8¨óï±ÆGGæŠVÎ슈ªÐŽ€Ù¾}{ŸNÌ0€‘b½�ûurö3ý]�hÎUE£pï*²œQ4‚‘ÇïÓþN ¶«LÉP+–«¬ÞÒ¡Ïë½ÿþû>D2Xœæ�o|c÷OúS?Æ‹‰"¹†4–ÿˆ%HÛ5DFÉ„ó¦7½)‘‚‘?j�ž+ WÉwÜq/9k¥Ï9,"Æ=P<§¾ô¥/u‘Ô¨s2ù{¿÷{)šz&œˆZ­C’HEc Àà¾ÐПI“�*/FÑDKÌU2êg¨Üð6!5ã+œ¼ø`ªQ0fþ´€(ÀШ91<`Dâ¬;D"˜„ƒ‘ð,ëR q!£[Ã'7�ÿ‹ëð�òÛ�ü¦ýîæé§Ÿf9–ý®‚1À¸ï ÃFWÍ)�=Wëw‡Nä2þ‘׉—jâ7ø€ás™S0]tQÛûÞ÷¾®ÇgžçúŠ\¬),ä™r�ù-8wI@$,é'Vª‘öê�ë|GìΜ0õ>ðÒÈ›£ 62L¾Õ9s_+ù~T«¶á;³Ç{lþ oxÃŽ$+ë©`ê™ ‰•0kGH ÕÐ~…Ú.uŠö¡`tî›ÂŠóå/y•úS'éïÿû÷!ìõ(Й'žxbeâ ƒ ñŒúP7L"'o”ù;˜`DzQ€‰S0aK¢h¸C&Ê)\ 4ÚŸ)©”€À¨Ã |ò“ŸtŒΠ®ŽÍQûév�@=Mº ÑÉ™‘Î/'( ìÖAï&ŠÄOxÏ{Þ³`€AÁ¼ùÍoîÔiFÊcJ!ü‰sÏ=7£ûY�L�zFǤƒTý;eN=rbÌ9\)`LÁpLíøéœJÁÆ… Ã[¯cECò7pÀzè¡SºÚï(÷žz;yŸ ç"‘ÿ�ïã{™@lÅ®ÊF}‹èæ,¶JMȸ€!Ñ®Vc–�  ‘ra“0XMÔgD=žëdÀAÁH�ô`Xÿȃ‚áL`0:‡=f¨F'ÒI.úhÔ™­L}â©¿ú«¿j0$+.4`ÞúÖ·v± ‹œöC$’ï"ç3C»Y V8ƒ¤K*¼Î�Ïa(\�‚1Àð¢?ãË(Óù÷_饗v à»ìvòÉ'ïulwso�¥–^Òy]HÀ„,Ãg%¹U ùmú À(åSáu|4Ì+ÄGƒ_ÐõÑðÞJ|2� – Ö¤ž<è$âIaÌ"Qtª‚ï(«hhüjD±Ã%×LÑpV08_µßò­´ê÷0û—0î©×å–{ˆóÑH–¯¶iòÉ4ißéX‹0Ì1ºçž{fXâ„çÓjpcúÍãîU G°ŽW9Q¬hsÍlžJ- Æ…J9Eƒ’Q ¡G‰í,¥zÌϬt¸R“fL£Sit©ÀèÂ=£ãJ›Ê—‹¹†¢QÛ_©cuBÕ¸J&]j$`°l`88.`˜ìH£¨0X9Eeq {æT`È||ì±Çö»€aȤÎ5 `¼2ר‰:¡h¼Q¾ÀȆ ÏYe³`tU0ŠBС|G®ËR´éx´–R_`è„•†(R”‚1«DÑD`1¸àð—’™’rñƒ‚I|6ó™gIså•W¶k_©íS`0¶W°uBÑPPî”SNq·‰=� –�ŒE²’™Lxôª0†?á�p4ä·„ß s‰œ!ÒþO}êSûãš‚Ñç¹ãθ­0ë܇; D�ÃQ*…5D"”×8+®ðPÊ`n¼ñÆëX›a?�~û~©…v"\墾ģû^*&U0\pÁžRÃN¬иQERèuÅ])Åã+˜$C$Ã’%K0Ô.:ï¼óV<ú裖töªŒN_†N:ïL�é&Ÿ†as©÷x¹# £'o#ƒeˆL^àBönÒôð8‹ ³u—*¹Û¸ AÁ�¾ï* ‘† PQÊ5ìcˆÄ×…Œ æR q3½âÁlW§^#ÐÊ7°`€Ñs-Föý˜ð6WÑ„AÃë.`™ŠÚ/BÁ(ŠÔâ%°Z C$ €©DÁ,À `^ùÊW®Ø¶m[c>¯3Ðx!E·=C¨'Ÿ|rZQ£Vò`ˆ"50XQ™\{ à <›ƒ4z aï ÀE0˜‘Ãs†rÜ(wPÍ G­>…¶ý¢Ûú>æµó�”là³ÙŸ¨„=†H®‚Ñ�ˆbæý¢q‹® ëIDl|ÀÄý`M‰câwŒN³®ßþö·7,ÆK�Û» N\Cg²$I׊Ð0 „™öv‘¨0¦`’ ;]‹ Ng*ñŽÇ"{˜ƒUÁèbA¢]AÎ惘Hqf !¬M¦4Š&NÍê8å5ÔöŒ  FãΆLðÚ03“7nÜèéÊH)@Sà9¯&X˜rÉ19“ÇÔeõE”“›GÃ= ƃ‚ajÀŸüÉŸô) ¦ ö÷÷sÂÜð]Tºt9È0�]�¤MÇc5€idE;/ˆTXéÒð‹aÀ˜¿Á5|2a³u‚ºïeÕË#�<2§ûÁ“ò“òëÄæ _øÂ!Ú¦EÇ{ø}ï{_ßµA‰Õ$&?^ä±U;ò÷‡å{9·¯zÕ«^Þ¾}{ñsÝÔ}o{Ò5¶ 0ü^²j½_­Q®£TÔŽƒ‹åHÇo0Q‹Ôéõ¶×¾öµ$Ú‘ù^Ó©”¹ám–ãaÕ‚8úÎõLô•ÂÙK™“F+3»z’í¹™! ¾ºÌ§Š`FtÕkbIž3и€ ¢HE`ðÁ\rÉ%ÃA†rÆ-i€•MXÙ�˜&À¼Æ‘X`~çw~§ó{ßû@(™É²KÆQ<£Nܬβ?õí«Ø±M¯¶õŒÆ‘Ãÿù?ÿç~&;ÿüó×SXé#ùȰeƒñ=ŠT­`ôz�ü…$îS»¤.K¼ü1ž~{Ý/ê?ùÉO²R±,,˜Óþt)Rê§žèû)ïÒyôÑG7KÝìþÚ×¾Ö0c–QÃ:4hã\íHË·œ®òR ~cPã`'flNI)ÓûòÏ?ÿüJ2;Yy‘‚-j¸þç0¿ÅªÈÙÿ’ñ9ê—àæ9+ë `Lèôš‚ù¿ÿ÷ÿÿÏÿù?ûžkþô§?½î©§ž¢´åˆ›Rm–TÑ`�38¯†Ô`´»’”ƒ^­`P0R&õI4ÉÌU4¦dhàúw²TIW=‚ ­,f§¶@¦óô‡>ô!¿³Ç¥Ó»•Óð…HvwKu®d^ßM§s·ö'g ³i•(˜kç.› |16TªÈ®=P7©l&oµ€9ýôÓ{t1$¬¨`,*hfó¸êm¦h8§Þ�º1”¬m™c–5'¯U?Å™¸‚!CÉt šq²dŠCNW™!g&Rî î¦ÏÍéJf>ÖÑ%{‘!Wº¬=¶ÿ q`ÌH£˜ù`ê+F÷k™”`‚©9f€qsâjœ}¿¯`¨t·�€AÁ=¬0˜ùk¬& À໹âŠ+˜ ºGǽIѤML)aF·w Xµcþ7 ’³:7j<ëBäŸ ül¼^Œç\À\tÑE“®‚©0ÔjaøÂ0†v¨›BÒl\»¹Ç#ávEÀèa¶`žyæÒ8ŠNÞ0`°¨çêa\€¥ô)®6¦‹göøã�o®¤àT=ŒÊgS#îAiMÐÛhxQ¯­AePÛ¢=$IÌfí\­ámKØCۆÅ´È´%?塇ò�¼F>ƒ5×îוˌͻ‰úÌ„ ™L)™¹F iŸ­ƽ²Ôí*SNÁœ¾‚ÁÉ«§(7Yt.gEòÊæïþîïÖëÊÖ`tÕ£˜Q‹ŽÑõ^(Ð%§óÆ tDÁõcq_Î�ei0û·»À¨ÍMiË:y�ˆÎ{Æœ¼¶²£�Fý2 ™ÚW¤,i®‚± q€aU†H8cãcÖÐpîäjÕ›¶Ô¤ˆÓÞF:y£,{ÒI'1M5áŸ1ê¬è$î��½) 4åÖ(*g¨ÂÚ„´¥–Vž×ý( †+ü_ýÕ_­þ�ÿø�ý”o06ïÆfG}nÐøÓÙùX£ß²ÏYxÍ?Td»÷Þ{×x^}Ö®.|L¯yÍkÚÝ!’ —¤ ±íH߸§Ê)©�"`l]$îÞÉuëÖí–2e ÙÅÌ>ƒ¦R#¤Íg»€IꃡSë ìkSûßo c¾@S‰‚0,È�õ•"õ €¡?«ôjë/;Ÿ Æ,Ë*‚ XP Ð0Ÿç Ö ±íâM”¹>˜8c®N^í 0º�*j´‡LÞ?øƒ?X-E3tõÕW�†Cªvb’‚ÆR©ŒößW0rŒÍÌwܱ�ue’í¼óÎ;Q5�¦`äõoVÇé ä¤w`]¤LTÊ�ÆŒ†¸%Ìç?ÿùu(—aŒù¬ 1E£óQT4q Iâ€5ÀHWkSÏ…›ÓhÐTª` 0 %ãò𢬠á\Q/ÀsÌ1D‘úÂ+;ΗùÅ¢EX•ªr™¢QÃ%<Ø»*Д2£G´Éwòòœ|DEÀèõ^5ì!íÓ¸»zBø¤%Q4<¶Tj£†0GÁÜvÛm‡È�ÉʇTÀãx¬¬4åÌ‘G醪wÖ™â,4.`Xö©TÁ©ë®»N"e];€a¼Î¸=*;:JÑÜzë­…j €Ñi¢ž€)þ¨yMXÁ�hþlÚêÞð†î(À˜Íhô½$_6ˉ߫(Rö_þå_æ}ˆäÚ¬©aÐàÄeê¹)…ÄÖѦº�†\Ì�üã•ÔØå9Bè8 ñ6Tÿ¡€²8ÝŽæž´$C'Ö§!•Úã$¥£ßÞ\pŠ“+R hÊF ežÑ0¨`Ì ±ÿuܺQ0¥JfAÍ Ù¡”u¾QNqWÑèìFѼå-o9¤”¢Á¶mÛ6ësLÁh¸»ÖíªŒý޹?®� ‰R0^¨³:ÜccÖHÐàûùö·¿ÝŒËAç…LÁ˜Í‰\¸°ê˜4Â>S4òR¯óê¤hø| Õ&-LÍs&ÈHlV#^!3`BEvª „ǹ­‡k£ƒFjŠTzr<ü5†²éJÞg øVxÉAS0o{ÛÛÚ걊ö^f¿ß Ëe”R0êk +5˜‚qCü¥@Ãr¨ �âMœQÂÔŒÚG;s‘’dòÆ(˜’ÖÐ$U0,Aó /ðü`)À˜54´oݵ°!yHßýîw÷.4`°È†† aÑ6riø¿RE£F:ç9ÃR"¤6‡CÝaýK¥üaý?F5"Ç¥"Ð@xE¦ZÕÉpäö‡Òê©�³  0¡PµPyAJ¦I�o”Ð6¯±2dBДŒ`V`Ì€)¥`̦M›:(rE¹F /†Ë” j¤”¢ÑaÖg˜|pÊU0I N%U0s~lAÃöIÌá‡Þýì³ÏâŒN³z‚ÆŒÎñ íoÎQ0ž·€€Ábw,šÕùŠQ']Õb}4I #§êÊ(óä“O®Ð˜r䪫®ò}0B�ø˜² á1„×÷µ jdòî ;D 0aÅHíe-HZ*:—ƒò(š"hî¾ûî$ ‰Ì›ßüæ6C'¨CÝX¦ ”"ýùŸÿy0:¦ýáäÅJ@ƒ¢4¦h˜ôÔ<žcgŸ}öä|(˜°Õ4`ü¬âR æ„NèV;£¢À~[²¹’,äz€†ö\V `B€Yp+ÙÀÃe0q&Y ó›â Æ„Êí+©#?Šä*}G·:y0ö†jAáåô¢’þjyÛ#£ŽÃbb>`Xæ„Ï´2‘…ÄÙMmST4L<,£hbCXžÆïþ¾J�µ—t×¥Æ�/µð 敯|eÏuLQ0‘õ`’‚†\  ŠFþ?¼�ÓšÄKÛöòË/'L=o &lµ€ÆSJÁPZ£ "©ƒ^³yN^B«4¦`˜Û·qãÆ¦Å¬âFÿ£|4elŠ¥-¢†H?üp³°/¾øâñ¨X)hh§�vZ³ å&ì¯pŒ€º—}CjzÑ¿Û�W�¢ñ‚¹V­Q€¡ƒz ¸p“êÖ>”"i˜²c+*Ø)Î’€ +ä�?û³?Ã�å+0ó©`ÂV h’*˜w¼ãÝò§ô‹ ÆmƒóWÁqÄ9Á~Ñ«êJNØ3EÃJ‹QÛK Xœ¥`S`~ô£u«á`bg§& €á[$éWË WÁ|“¬Ã\j¸g ‰S4I y=FÇlÌX .I£J�za.Q79»X`Ôð:À4'ùŽJ‡N–G#¨øk�3‹¿ãdòV¥`ÂV!hŠ€‰S0deK­w¡`¢3_ q €¹ãŽ;ú#`° SÐã^LPnsJÎÙÕVFu/W3ü9rDvg³Ù]õ)ƒ9®FÉŠ�½.`,L½wïÞÎqµj´I§¿³¬ Â!<Í•�*nºŠ3Õ}0<œ0$P0aÀ�t¨çº�âÌCÌÛ²÷uŽ™UÞ�šamn½>LI˜åÉ0§Ÿ~z«:Û˜9Ã;l¬Tž €Qcö¤ÌºäÏ!“w,b³"`Ô;µÛÏLr ^é¼ð’¿S.ƒÅÇðwŠÖ‡L¥« ¸€ñê”]6[9 Ï?3A-%‚d°©˜¨‚S(ík×öíÛYiˆÊs¼7 $îäQg�éDU¶Ã5Á�ö½$ƒÕ c^a&¹ù¥ N]c¥¢ í¯Ëó>¨¿:œÉ `^z饎ÞÞÞqœ­ÈÓr�!<«: –ú�b`¿W©óïæ–[nÙ,žåÌÉëX‡¨É"cAm“’�Á’€F�¡éSŸúTIÀ8¿%ö5Œ¢5]êÌ%ó7ó7«ê.«{ älu‚J­Рl˜TËqHZpj¾c÷Ø—˜*Ðrâ‰'v+XA»Ù/ÀL™r •Ìæ´�ˆjò~ãߨ·˜ƒÕ¼"ám IúܹN̺fÉXþ'³SÛô†ƒ|giChÔS.\žƒd  ¾«Ý££ý̹> �Š À$Íõq}4 �øL7¼MçN ˜à·¢W )ˆNù  0宊¥,©�“Bí0º².JÀ`qC'{=0(˜×¾öµÝ(˜ãŽ;nÀpl¥ÛÂò¹zœ�H½‡N(ƒ‚9ꨣrŸþô§=`°º,» hÈ 6ÐèʶV’Þ÷lÛ¶­G�¯“Ç6UÀ:íºù€±åpËÍAr¾oh ë9˹ò� wÆÛn»Í C$ÔC$5¥ÂKhaИ3øÆo\‰z|Ç©ÍS0Îo™å£1Àœ|òÉ�åó™Ï|f•Xk1]yå•®‚©%E½hpòjÖ ï¡ÌïüÎï,JÀ˜Å€¦¤‚Ññë0:û5ŒbˆÔ¤‹£ïƒ"ˆ¡ÿ; Œ|q8î{t!É~ç;ßÙ'ŸÌ¢ VÑp‰Bà^ 0(¾Æ|4n)O‹"áÔ¥vË–-[&8aŽä,7g'c> ²ݹH,\`äûèÕÁúìg?;«3†‡Hzߤ”LsXµ8kþ”.¹fC'Ý·S´‰+:Ë–àá÷V=²ßêF0ΗŒœÛ¾“—Z8q ¦–ÂHQC'íã‘ô{»*)8µP€‰Ø—’§l šgžy¦pì±Ç`Ôö|ÀPP5\í´+ñ¼^ï¡“"w¾F{ätÏ©Ï.À`¤`ÜâfI ã^ùé´RÓÇ|/N_ƒŒ&8A\& 0Ià½&( T4Kº´zuð‡ƒ©ìÅßwë­·n¦,¤)˜_þò—“ÇsLSܰ(©O&ʨ¸fÍTïCÕ ¢*ª ¦ßÔIm"n/û€A5ÉÒ©ß5Äò¼Q€q‡¡õM0‹ÍÉ›ÀŠy0%Vvô ¸»€ "t‡PÇXÃCVƒ`Õ‡½ÿ‚µÕ¤!0 †baû0Y2€Áü[ÍÚ8fᡆBµœßãF�çXs0äW”ú| õ–ŒÀµBy(Ì& i²¦>õÔS'J&ü{*9T<ì°ÃÚ´aàÂóŒ�¾^–$I¦6ÓöI#uA /†gýºÃ¥Z‡N˜/~ñ‹(¶.|nÌRR0EÀÐÉãÂÔp0»wïžAÿSßè訿ïL"ÖsÃÌu£R«Ôqèäû`Ô~{6nܘ#×k©+vÚz€†eE™œ¥ŽÆleÏŒ†2DŸ&Ý!€Iš'Ÿ|20r€õÈÃ>Le7CÁl1'/W†H?üpsˆ”rpFýv5°œÂÅÍLì¡Ñ)’6ª¡“An…†o�Àè}ùR€á3¹‚*rG(uµä*�ûœ©˜jACÚ€FÿvåLÉÏ[¬€ÑãH €yüñÇ= À0ÈF£NϲÅ,T|�†³Mº 3·¯Ž á85©Iu3DÒ¹<çœs–`°¬;TŠM’N‰‚0’t+ÌÉKèÚÚҌÙéhžï{ûÕ±/ÃzÏnÇ !�#åÐ-µ2˜Í®‚Ñã‰(LœqÅÖ±ðÊž£j €QÔl2pã›"ËxÔU4D�Ê�†cÀ,ér€AÁPƒ†!’®lûƒáX&‘¨§¢1Àn>`8ŸK0üCáq/BÁHíú€q €aˆ¤û>V1Õýœ€  ÑÅuÈM�Î`ˆ$åâ+‚ ú¬9í�‰Gyd÷Þ"¶,`)šrÑ0�³EÁ²¿õ[¿ÕDŒÆÞW4öØ ÷Ü81R ]wÜqG$`ðÁ¸ ¦À„Í�ÃäF¢ 0$`°?çKÇ¥ÉU4d›¢Ño›ó=üÞ¯|å+v•U0úÜv�l˜!’&nÿ£�YRÐà‹Ñ~O}ík_ëÕo뜼;½%ª`‚¬â9€¡€;“MÁ�Çe€AÁèñ‰ ÿñÿ1#õ.æÞ"µ¢O¦ZE`6í08zQ0ùÈGú‚“ÚD¢V0fq ±ÇQuQé4z¾ë®»î åD**üÕZ¹?0µŸ‡Sœ¡ªÃŒk¦hÔðüÊ{(TamWѸ€‰‘ÄEÀ¨´ÿô§?vŒWÆJUf+£ý›Ò~ãäìYŠ€ax^JÁ VŒÂÔœ³a ] ‚}l¬Û>çw»Ï%U4aõâ$6©t}ß`”årÚi§m|á…¦‰píØ±cF¦C+hüè’ý^ =XÞÄ7:s“ F¦`ŒTCwp2F 0\á™�+gl$`\ /7a€q¯Â<æÄh?ºnºé¦1}î¤û;Ü(’…©ŒW… Ó”±ÔCœQÛØj›å>‹í¸j_ü_wE“Ö~ûí··«�OÇ8õ|À¨#¬PãëPˆ|˜Ú’ƵR‰yQQ'£ýóCŒÎé„Bº;½2F§¶îEež¬`ûb>/bˆ`4ìð~ý×½²—ƒó¶LxˆÄJøÛô‹Üã{›õãXÈNÛt“„Z*êäœC_Á†H/¾øb$` @Q¿›!À¬™6¬wż±�AŸ[46ëÀ…M8QÍÌ {óUŠ@0�+ `0k|Ü!íYë=#a99£vÆÆU0µ&l4´¨j$î5÷Æ"ij³N:Ñ îQ0‚GbÀlÛ¶­^üµ —K)5/JÑEÇVèÜv€Ù啱(Àà(Öy³Ò¥ófî¾Ä)˜“N:©C€- Î m:0á5¢¬BEã+�¼›T‰R ÀPÞTÛPX�ü/rÎÔÆú Ë,FE3g|*EU»C2`øó�| ?ˆˆ²«ñ…ÍI½ÏFuÄŽù—‰U0n¢€áwÔ1sökXQ”ºbììöÂýGqÄn=·‹U6¹ñÔ�×4\Ü8 ýc±nݺõ;'�±~ ëJåKæ/þâ/¨ÕÚÆ„¼k®¹f(j†z#@Ãä?#U×£ž)˜’ßc�šeK 08Š™4Ë„Tuàù�¿À› »°ÀœrÊ)á箂Ñ&L;ñ¢œ¼˜”ìÿ£†Qæ£8Æâ|4Áò.MÚ�î­[·fõ¹‘Q$ƒFÑDcdÂ1]Xý¶ sJÕIh@úЇ•�¦ì´+B…¡óÏ Œ)=´«FE€q†Jþ¸Ù�2Ï�)õ+V¬h““w\WÃ)ç­™/}éK³Œ:ì„Æ6ª4LÃ>ªó5éŠÑ¬«ÇÌ®]»2”¶`¥n¬Ìu;ãŒ3ff^¯îO±PCØaþ)ý6†©Óú2âk}ÀÐ)‰6=õÔSÔ .U£^ Á€QHw·WÆ\ÀèVT0öº:Ú¸Îcó|€ÆU0îMf†èÜO~òÎÉH”‚¡<¬.,¤@J){�0µ›üWñ"g,6�†}Ó>4éØt¡`¤Ô÷G]pfýùŸÿùzÂʺÖ�3Ç}£¼-«xšÅ¨h*š»D”HÐéѽuðaŒf¬FJ5 †{÷ ™Ñ`õùm<ðÀD0( &™‚0Ô¹‰‚J- !ºtüñdz,*Uà|'o8âæN°´ÿõ8/@®c¹WžÓé%—wàX1•£$`P0¯|å+ÛôûbLØj˜ãßã—aòŸ:B€9üðÃÇÝÛU®€T0Ó.`(BFÅ<”ú#òÒÒ@Ð$R0†¥c çäÎ;`ˆ$¹p ƒF¯‚/\uSYÅ�¹MÀ%ðÍ h×4†o¬uõïÿþïDërq ÀÈɻᡇòŒò(@ oG�.°$».6E3Ëñ6Ö¼æ>èª ÀúÝßýÝÖï~÷»SAç,î³ù`¢†H¥¾,núDØ\Ç/Ѳ¾¾¾Q]`\³Çj\¬- – åóéÌáFDzG¾‚¶Ç{ gá°©IbÕ”p³BÇ´Gaò ÿ=U&c€¡ñ«½t鸖÷Ï“~—:Ý$2¯~§BXÁDFj´]CX|ÔXžÖ±mÓPf}àÄ÷ƒ:�û"L…´"‡ú-Ô9ŽüRo 'p§Ú0+£Ô,€Q@%VÁèülÚçAÃzâ¼Æúí¤E0OP·>޳t×¶,‰Û¢ïZ¥óè©Í½¼�Îà’JÆ®Ðø pþéÇø€Ñ *†×‰�TQÍÌL”‚0:¸-ÏOFÆõÁh(3‘0X5ŠFß“Ñož.,eçÕ« VPí0¯0X¥ŠÆŒ:“ðÆßô¦7íN ÎW0Š�Œ<ñÄÔþõÛXP/:ËïWû©·¢)„Îá}§ü©Žk;–ü%ƒ‚0(�;j • fŠÆ¦hˆ3¹zõjjË̹©½å5´×g¶º€!ÿÀñÁ8À `H ¨\À”³Å¦hrgŸ}vìŽkl𕣉èWžNœ—(–Ôðj»Œ>oÖ \�$1[þîïþ.¢oQÁ¨â@Ý­ý›”¤o®jä^ÜUÇL€ *„ÂSh¡Ää„ ›% t¢ÞäÎPýo�¶ñ�©BŠ/ilœTÁxù—Ù-HÛÏþóQ5Æ‘jcÆqÕ¯ì{)Á>ÝrË-=:î+ä|œP›Ø[î}.`"‡ó /Ìè÷gØ’!™I.™?£{Ê^Îè¸æuß.µÔÌ(®¶=ùmIßUŒáƒùÍßüÍv:¬:öȹçžë+í‹ïƒÑyñCXšõØõÉ}a+f“´iÛ1½/K(Ù½ñ;¥šòjK�A¼¿˜ž†=ÍÚ0D/¹ä’9CfS0,זּ=¨¶5ŒàÆ:× »y~Lÿã¯ñ÷›6.•Ã?ßÛÛ;©Ç�LöÔ9©f¢n­–�[f”¡ †z¦˜°‚©Òb €¡.¯:d$`\C”)ÎSÎʽ‡ü}‡ÿÃP‰›^@\`p(²ïºb¶†ùR æ†nè:öØc[åǽúê«kŒY9Ec€AÁ�h§«¥¯`¼„Q¤8À( èÄÿÃknÑÞx­NŠÆW06ÜŽŒ)–n0q † ®ÀƒÇv_ÊÌ'ƒ…ý5äÌ軦†.£vÁbz}(˜|° À0‹;JÁ°¿Õ*˜°¡hp%Huõ3D\(E“ãK] šé‡¡`"uè f©`ð!èÊMâ^óW¿úÕé8ÀX‰!Ó vµ¥h€Ïé EëeBg‹È„O¢dl;WÑ¢«ÆzWÁ`ô[›%™ ïz×»òqûb F ‚ºÇ£õŒYœ¢ÁÃ>¡`Ôé»uÕ�”㱬‚ñÕ ÇãÐCõ#gq†6…Ñ®(ÍŠ’¡Ty'¼688X«¢)«`l �ÀᑨŸ¤+»¯`¤Pw³ßFç8x¶ßj^œ¢áy.ºì·Œá�¿¤±½®ák­wêØtâÓ“ZñŒn]ÁdÇýR5‘ F‘¼ /½ô’¯`ÔÎÇôY‘€)¥dœýôG#îO1¬[(ESì8®¢Á©Ôà Z€ax¢8(˜Z,RÁ<í,8¦Ç±C$òš�ä0Ÿ‰Åj½q5UœáÆcŽ�"Î\ñpÜú)ºº äÛ0KT0Ï?ÿüúCY–�™)¡`<ÌÑGÝ`‚¬Ðlp\êÖŠ&(”MØ–é Ý8y®èå¾3T¢Œ"6ظ7»Ç1JÑHŽ|™ï>æ˜cf˜Î¡Û47פVòÚÇéðMçtR#$?-A°šUc‰$€±!sø®Ý}÷Ý],¼†‚!O*üƒLÁàCAÁH£\H9Nq£�¤V4óÞι_ Õaè€+tâ; ¶ôˆdV°IMãæ(ãH§Îá$ ÂßfEƒF~DDžÑÕ·]W ²#›ËÝt¢Q#Í¥njþ�Çú®ýf‰«õWZ…¯÷©#f£ü8ä éJ¥`L €±ÿ£ìºë®ëÔÕ¿�¥R\À˜éy¿,¤Ws ~"C*‚ðäyç�×—à#2A /¬`tÌFÔ9¦å÷˜ã4u• >”Œ½V4ú¬$Ц¬‚AÈïÒ¦}Ê`"é¼nàuµ ¢Cí:ß]úþ )Û!E2ë¦×Q í$‚²Ä‹Ý´=*…ÚA£ú}ú,ß' C$£ÎÝ)bîé§ŸŠR0Á²Åë]c€q�•«T’(³°¢h:æSÑÌ*¿ Ùƒi�FN£a ªŠð´YQÁ„§¸{A¥x'¿¦¸_Ž“·àJÑù2¾Ë’µœÌ9�ÀHl`Í!þwCÃ"{¶`t…iUo쪫® Ƶz �‚ù;y"Xú·[ß?!å‘0nTØ#?%,²QKÔVÕq¤rÜ‘7JF„?œmP– '¼­í&ßûÞ÷F…·çD‘¼ÀH©µ±/+ë\M|&;òº†½yíϸՠŽ3í ~¶ÚžTË„ �ô^¸¤~ÂLëqò§‚çóì{`ÈkQ'ŠÊ‹ Âê~¢� 2@áµR*ÃÂÔ¥BØqfÉ´:¾­êÛ+ç+¼]̃0¢\—:WÏ‘N`®ýÕ"XU†˜àñÀPÑΜ¼œd²%qžqÏjî-És\q˜~χ#•)¦Å6q7u„ýº*ïd ~N™¼õLÜ¢pÎñªùjãFWé.’˜þo�"¡`ȃ1À°¡»rD%:é˜G9ƒý¶”0�œàB™a­OÝwß}ÌÐÿû¸ÙcîÕfÿÙ �yN�ÕWµúŒ‰(À˜“×£ŽL;Þ €AÁH –Œ«$ÏEmWC2&vNhdÐØþàþ áC§Ìg>ó†„Ú|ÀЩ"5RÁ“ÕìÀì|0AÍŽi]mȽhe’áý÷ßqýÕIürM©Ô~øQ+ÉüÖ éjRC“�¶î"îöo‡ù\XD�¼“PnÏ,0ºú3,£nL)¶Z ΃OáïxGMC$|0q Æý?‰’1+¡hüˆ–~C–s] 0 �.¸à–¡¡­´ ~&/ª”‹ƒ†-ÝTnÔç)r:L9[ó�0s�Fï#êÆpšE ýŽHÑ*÷{K)£ã4tê©§Îñɹ †šCßùÎwF+ììÓ¦dÔû‰âmݺuÎFL�‰z3@—º"_§WEï¿ý·ÿ¶KàÍ{ ° ?V'•; “Ir·ñ*·ÈL^§*¼-´50¶ªËŸ^tÑEL'Ø€o%ÈÈ| ?]z—“‰Ì!ZXJŸTãÚ£aÎ iGe³ ™”(£ÎÂP¡¨` ëâиãöƒy+jä-ò Œ˜$…ÔÃV)hLÁè\t©Ãu70ξ¹ßëÿo� 2~ó¿±@œk–«Á/H.”¢šÃ¥œ¼qC$ ’EÊÑ ãOÑÞ)Óh”aµµ9 !Ì@£ðò” Öm †)6Ázb:F,¿3åôLZtþס`ÈäÕwŒ0 ̦۫µ¯Ì!d}õœ•Ij ùô;ñƒô Ð|‹”í õXƒ`Œ.ŽcÁ:W-;vìØ€?MŸEÔŒýö N©ãS‹yDC!ò¾z´_�1Eã(™YûEˆ[×—âÿF¿�5É}c€ÑcŠ�åJ).TR0$ôU ˜YF˜¼’í™K¦ã:C@%D±r1 ¯€Ášt•éÀ+­0⦦(Rxˆ^×& ]u(Òì_©�ÝO>ùäÞu>�жžÛ%r†}Ðè³wêךr yšðɌ߀t’€©¯ÎôüZy¿+ö5YýNA-)Ÿfu¼å|0å,)h¸¢ùË_fݦNIó)&‘†¹h•(˜Ð¾ÍqþÒ¨I³§Ó{ Œé ™uÌZ‰éÞ:Q$`€:û¸ ‘ 0ú^?ÑN&ÿâÅ4©X4TÐÕŸd¼„¹GH’Ñè×@ìYÀÅï3Ðhß|`âL`L]Ã9áü¨$†ŒŽ 5³ýó 6½Z@lÁ?ó¦7½iÄk�álÃ{>Ìú@Ás5‡©K&d¾‚¡,C$�Š"Mºá;ÆðTÙûØÇ>¶ IP8òð›0|qÁ’ÔV®Ô�Y`~üã¿l€ fFÏ€Y§ýbÅ̉7¼á +YÌ;°ðZ»œm¬—3N†§ ˜r«4”²rÎ`ŒvêXMV¢`x§`ôR¶œs7üº>®éŸüä'·²7|7‚€?qW`ÊcÌ2꫼êU¯j¡ãム&;ú€¡$¥†¹H@+Œ[ÉÍ~|4”[�Ò›BÅØwh?Šß\¸i¨‹¹èƒq£ö›�"¹ajwˆÄ±ªÆYîÐ熡ÜMC|~ \·zõj"Ëý� †OfKjØÿ^u–HÁ„¿£ë�u] mÇŠ‘Ó(ò.ðѨ± hfÊùhã«ñ}2O?ýôž¨éòa F ´èäUô¯Ž ‘î¸ãŽujÜ\�f˜Ž@dŒ¼”gŸ}vD|††¤�gÂ¥F±j†MfQŠÆ£Îå+˜sÏ=·¦!kIq,X¹Ó«Ðtœ;~¥ ?üá™ ä§Ý^vÙeû¢|\ALKP†á§?DRXv–‚‰šìh áÞª ˜�àèB1Â0�ò™úÝ̲.úd¤Z¦(.¥÷t¹ †%—Q0Èp)ÀPpŠz0.`\+ç¯ YÑñ+øù™Úå”<ý€„Hõ�ÕrJ3´ë§N‘×`ËÖ 0•*ƒ‚á�¤9 &lµ(šSN9ūԢL`ü!¨1CID=¤`è裎¾›ó`¢ÊÇ&U4aç)À `ṫË)˜R€ÁjQ4¼·”’0AšWÀ`FúšŒûdRÀ M ++”ìl$óÑè³mr>šl)ÐÐ +±(c©àAÈÙW0·ÝvÛ}/ÃÍ]ö3‹—¡�®À#yVg%¹±›¿åœjõ�F´“LÞ@Á$š*P0¬EÅͫѢ:*ÕŒœ±¡Ü)ߌ†õ-LHDÁ!:º:î!ä?é\ìF @pá’4øh uvõ<áó).)Ê9 jÊóßÿû UóÍŒ@V0¥ŽO%S0Ú�Õø½y –ñê `Ü'“F‘Há&.e6tR£_LðóUâÂÛáv©áR”‚1À˜¿Â†H(Âþ÷ÜsÏnÊhÖ’Ó£±.…Â'uR»5Tðc‹ú­ýaŸL”U3tbÈ`ˆ`é_¢Xù·¿ýí(Ô²€ ê*—Œû¦¨¹\%ö�°pWÜp‰sÉsA'öåƒ1À<þøã")– s�3È ›w®5t"_ EÂjJ“ö»•W¨ò‚<Òžyæ™vÚ€ |M³, EÑG½ÑÜÄÇ­Œù!l�«�Œ_.Ðî{ì‚k À `ägÜG1zo­¢ò›ŽU­`p4s¥‰ VŽæ6tBÑ0t ž&mÀ„ó›â,‰¢Ñ­#P/˜-÷ÓDmù„²Ÿüä'GãsÎ9çl�²â·P”jD¡¦¤Ã ¸ÌéÐþs>˜ÄÙ£vÈ4†Å¹ð6®‚pö½õ­o�wÀ`•B¦ª(’&˜X60fõ Q'ýÏòŨS)È 3Õš–ÿbƒi0nòW,`ÌȬfuØqgy˜À ï•’ë«hèp„È5<ë@=©qï÷Ê[,`ÿÊJ–«è5l5ü�}�(�ÌWs ÑP9‡zè`Ô\¯k¬áÕ¬ìH)V†½tØCðyyAM^+�eV hHÚS `Jép‡H†úÀúì¬ÎåHT ¾MPÉ�s�²õ*4||ÜG½7˜¸é®.Szìgo»ÃP;¾jktáäxáCš7LØ|'fÂm«Š"áÕÕ1ãFÏÏ %%+:uÒÕ12ê¶ÀÑœÃÞP`ô]{ 0„N™kt¦BTyN:2S5: í®uèd F*¢�‹L’«ÔÀ|þóŸïÕoŸaý!ä7«(êøígØPîÆv( i‡ßsÚi§ù÷¾‘ý\씿0Àè½”w� & :±|2Ô–bƒ%©–7t’Mé;:­H¸FûÝ&Ɔmä—[«}õ?Wí�ú-c:?£:α·±�ñ �vb¯»Û èãjçcÔ¥9üðÃ÷ºÇ3C˜Àèøî[HÀ`v‚Ê�”ª|0†(Ž^WÁ”—Ö¦ ¸>MÔ{‚¡T^`‰"ÍÌw¾ó�uúœŒM€0¬—Ã=Ÿ/U’ W#]1« ŽêmÇsÌT ƒ+"ÿærc’Ô>¤4,éÁž4gV(¼B‚ùÁþíßþ�Ïb·nåÍ`¤¢&“¢`þüÏÿ¼)¬`(oJÍ�Ðσ0qaÛj@Ã26nÎ çË£ö‘ýÿãD†!ÒÉ'Ÿ¼îÑGeç¡À�Ó¤v¿Ÿ‰Æø`ÜM {À½ñ�jÃ~[úð‡?ì?gÛ=ðÀƒÜîºë®A–s¡¼ ø®]»Ö˜“—åt¼¶L™ÿ±ª|0_ùÊW3ûC$’£LÁ$u|Õkètà£^žV§f8½¡zØ>Æã¦I \ `ø-.`‚‰¥9*ãÙâ`(Ê1ÚZTQy1îЉcCd ’¡“†BKÇ{씾{ÄK Fm¶·æþáˆL úxÿ´A‚Yʨ1uèµF¶™8²¾]ã~:WËØ¡N`€CŠÎEVä�¸!’TPóƒ>È÷óÔSO­ç ¯6°—} &N±&:ù †ŒnA±À|úÓŸ�S0æùçŸ÷—Ž¥øQ>)‘Õ6¤ €�µ¶_*:ÇÐ]Ǫ—„S/Pkîöq}€¤TR9ƒ&láFQˆø¿b`è@(˜Ç{¬bÀ`õP4ÁÒ°(šS÷Ù¡ßSp#¥²3 äz9ÀP: Tݘ¨æ«U4˜FÛÀ {Uæ/þâ/zŒ:Â(‘1” ª�mtÕbA; �9j�ì8‹;¿ Ç20ì€!*ã…C‡U‡/‘ ¦ZEcëºSšÀPvÁ :KóêW¿z­¢MÌÚ òÅÜ)îÕGöêøR‡zmplg µäEõ >FWÁ,À`QWž‚s_M&ïzTÛÚ4^…€1«4–°g !YË¢%ŒuÕQ×» æú믷r�E£Pߺ(ÀÐèiä$k][¢nŒY9а?€¦TÂ*†,ÄׯU7LY æsŸûÜ œµ(˜ûï¿?O½dÛ6 ÖâÿZ@ã*|> ‘â +U ™MSšžxâ‰uzyjëÖ­¾ƒ“áVPª €L;™× `.¾øâ.0ò%Q(§¶;DzÇ;Þ±†"årÀ2|çbøq¶N†NúM£@ƒ‚á˜èخƒ‚Yˆ0u)‹“·ÕæÁP-ÎW0úñ{i,øZh= ãÛ`¨D^F m•R0z~-ë…C£§ ù4N¸µ¬OE%bóh 0²¶�7N%ÍÖŒŒœÄ>`P0.`Ì 4RJ5+š°‚ÑSƒq æ]ïzW€!?ÇCr# Fª¾`Rk¶Ü„ÂJ@ÃPÀàä5À0D’šjˆ}Uš’}{Ó›Þ´æg?ûÿúý>h´ÿ}�R4(†H‹UÁ˜ÅA¦š0õ:êS `ä¤òŒ{àk±z({ž§`˜Ù‹‚‰ ��Z`üÏ4¿LµŠ†ÇFr¸•N‘tÆl`ô£äEÆŒÎ@§6ÐT£h¢LÔÜž fo3ç“‹¿7p¶rQðø‹²n2[­ q£[QÁH™´éwfo¹å–Ø!Ò 'œ°–òÚ÷ý?ÕÎ 46tª§¢ ü2þñųXŒYTC‹Œ~ÐLœœÿÚ×¾¶N`Éj\멃îUD¤n€1«5¼M'fètôÑGg¢ €ùä'?©`h|ø-ôp:Lâü".¥@CÝUöQ�ª¨h¸1Æ×f­Š"Õ 0€Q šj|4l“TÁëOay&–úk“tuuõÛ¾¸ç¿VÐuN?†$@2³9Ço+€¡èXœ‚‘RX�“W탈•c§ 4BÑÅÀ|CÌbV0faÈÄ*˜k#&¬a þ�,¹0Áü‘<¾\#®Æª�®žùÃ;lC¥R ¦`¸êëŠå¦b+§h®ºêª~× \˜í­ä+˜SO=u4Á×ø€!ìm€Ñ¹  ÷ÀØöå@Ã}%ŠÆ“DÁ(ÌíwP5·cÇŽ5 ‘ 0Ü£ö­bÐiB‰jÈÛ¡öº’ùIjã˜`J)˜ßø�ßXCX£c<–äBZ‹¢ gŒ’_´f±+3÷V¬`¾üå/¯Ãc€‰R0 /N^|0ê¨Ù¨0u Àp<²R”¨ 0X%ŠFWÈ‚à²FaæuŒ‰óÎ;oÌK`|€±§† ^˜0Âd£ÎG%ŠF~ˆî8E㦜‚0ßúÖ·2.`¨Ô`‚4ùXÀ8ûVhpÖ+ÔÝ©Ž¾RÊneN8Çúˆtã�7–T0FNÖýåLÌ~ÎR4^иéa£ fÓb S—²b©‡j ‹Žãƒ1À>_Á¸h!@£+ÔÔßÿý߯3'¯3Ù1)`|?€S¼jÀ¸–DÑàCbtߥ�ío¦ÌçÚ ñXÀ”zREý)š�ÍʃcVÎô}e ûD0¨E£(Í4…ªØˆö—¤Ý$ †‚¸; 0¬‚`´¿\€2q€AÁ¼öµ¯õÃ’(®‚©Âî+}Nlx;ÎLÁàä5³ƒÑð*V0ºê¬EÁðX§ÏÃAg T®| sà 7éj œª0Þ�Òšu VJÑp¼ÉÁ‘S‘u¡&¥Ë¿ùÍo^Ef±W"&0¿õ[¿5’0f•*ž'�žiÌÇ`ôt,`î½÷^¿ƒº Fû¹ '¯"€Ôµ±U3­ye¬hHÒ0$Õ颸ÊØ +Qêb4§`Ô–Výüç?'ùoŽ¦Ê¨[“|@ã(:Qw×+ š¢‚Yj€Á²•*˜o|㨃N^Ù,cÛ,høÀüÝßýÝ:ʾò•¯,Tª`PAIK[6·ÀÊÝÌÁkNϱ$Ãô%—\²G>�ѧŸ~ºpÆg¬ rd¼ðþ„ó—ù—¾Àh8Böh6iMc¬EÔË!µÝ”( Ú~² Š”Õ}% †Z¾ß²ýåæ¶#¯ŒÅ�F!ñ)ŒŽÍj�뢂9ýôÓ[J&˜*°Z¾ˆ¢|0Õ€F mv Ñ*S4á탬ê%©`Ì2AÃöÍL`P0”5DÅè Ö3k(áQ*U½ã pî¹çäeù�õ&nª@)ÀðúµÎü/9` AË*5è©C=td||<ñì[æÀɯ•c¥Õ$‹ø]3jX>4Ô!rßÿþ÷ÉD/~i`èðÞ�² sãž›rVêÙù–Cݯ£}'!­).“×óŠë Ó P‚M¯¾‡É™6�{Î13ÐX;òʘ©� Ì;�‚‘jX¥›ï µ!€yà�Æ¢Ú: †!€Ñùô}0圼á j’ý úO»MA�ŸjïÆ�§Õv)Ö"ÐíÒs9íçÚ¥ ¬™2y0>`X�Ç,Û©�Æl!@ÃþüíßþíZ]MÛQ0óÏ"Ѱ?øÁ® §£ŒY«f!ÃüýÏ´ƒDW7¡•à=¼?k.ûâ«‚ááaï´ÓNkUø}‡EŽl_y¬ˆYwP¢ÁŒ“U/ÐÃ#�<2ûàƒúC$–b-7D€Ø/_Á¨¯è§/ºè¢Á`^–-u[O¶¬4êÀyùYS¯’¨�±EÃŽìOúÓñ8ÀHå¬R˜šåp|“ÔÉ[ ht—z²5A…¿� «“rТïïÇo³eË–œÎóÀR æŸØy0k€Q˜/g€ 7ÜðÕ³ÑC'ä7N^Ì~ðƒ�Q>Iå9€ :ë¬ä·àaUûG-5ì!]�FÊÝd”CcÍe5²)&%ŽRî‘׸‘¤†GQ¦æ ¿§jÀ`õ:"?rJwRÓ¸`<›XëæÕ¯~u¯†�y ÃSàb€ W.¬dèd7 0z>`t�üELÒtŒzøh—µ¬ŒÀšOø�˜Ú Ðì_ª€Á2ÁòªÓ¥Ã‰‚ÙrÌ“¤±Î‡¢1£Ô¦+«¥`ÌŸüÉŸ¬‹Là|-Õ0’ì_!bvù7pÒúj0jÔW¿úÕ•R:-]]]9�§=«¶<0¬Ò¨F9V0®U«hìbÌXÎiØ1XjˆÄÚÕ�ó¼΃Λ?Ë[þ�9ûk ©FÑp ÔÚ¥Véâ¹�)A¡ôV*Ú%ŒÛû/¾øâ 9á›ÂÐHÒ^«U4úÍ­º˜ã;šæb¥ýgÍôý¡U]—œe“ŒF'+0ó­h€ €!Š`⌮>`Xg»BÀ$y½”ebnþ4…ø‡h%+ÙLqqµ/}éKkåëh0LÓˆ ¦RÀ`Õ( çŽË8yKÆ( ÙŒÚYÃyñ� V­¢¡}RÒƒD;ý[ŒŽSËïþîïfâC †!^¥9EfÕ*y\û¾�á3KÇ €Á²q€Qiu°úÔ¢‚)õaQ ·Q a>ÿùÏ“ ئÆî&ÊÉ‹‚‘cÑW0vì®0fuÚñYF¡Uò$È".Ö¶šÀø¿ÈARCËê<ìœq ÆK0DгJ@`î¹ç¦ŽtR‚ò¨£ŽÚ_0Y$cC$öÀ<þøã3Šö qìQ9¥VÁ¬4ƒ¯|å+‚.µz(Þ]ŒBØÙï~÷»q æSŸú”ó!S0^ khd3¨Z*’™,ˆ €Á"¡`ähôÇ… �õÿ¯ÿõ¿P;Ló’�ÀݖLJ~¸ÿ˜{ ®q"4FöŸçßC’ϧÓÉG±–ÊpòÁ°RãÎ�üã±C$Œ@³§JÀ¸»gŸ}v“>·ƒ|�Ûo¿},f{ÿŠ®ÔLéÏ`Ÿýí 0€“a€AÁ(b4Å>ë÷ÌòÁð&�³¨`èŒT©S4¥¢á§{nâLŸéwxò`’F¤¨`(x½}ûö™}èCÃ{"xúLûìb^LØø=÷w±Ï:dP¨Œ"`+õùƒBÅr–gzè¡É8£ý\©÷ãX¾êª«P:¹$‹&i¯¼hÊmÇp™6>ý¦“ �þùIê5/ ›™üÇ\Íâ÷jàÞc�=6ðWõW>`*iÄQ0ªhpò2”`½™­[·z·ÝvÛN5¦È!ÒŽ;|Àüñ»u…ª0f‘û—2~‡C³TE`P0ŒÆß(Œ~;ë0gN8á„Ñw¾ó�Ó:Žá<§º‚Æ£NЩNÌwņßÇyU'÷s€Ø_�§îG}´ð‘�|¤˜ˆï¨4µ¡v—•"=1`´?“q ÀHQ‚÷ÉÏM^¬ 0$ãIm­T˜ºÀ�ËãD6Kb«‘¯²µ\t¥Ý'ùæû`ÜFµfQœÕÛGƒ‚‘Ÿ•Õ `xà�]ÁÊ}sò`"`èuLµï/Ñ rfœHŒÆCÁ¨ù€ùùϾWj`ÒöÙóéOºKb5�1¢�ø4¢ÎG%çÈ,jèä†vAÂH)Àh8Ç}0‚m—TæÌ'>ñ‰XÀ˜U3tŸHž‰®` Ø /¼�Y꾂„3q€¡�@sヤCÉZ†N AQ0'Ÿ|2Shû6À`EÈÂ’äcüèG?¢Àót8Ø,i#®—�†ÿQ0+¯Q'cˆ”0×þj]¤Y †D»Æs¿/é¶j¬DCŽ¥|Ãïr÷Ù£p¦‡‚Ád%ÇZ­  †,ßkc*ºjË æYÉGÖ¥HÉÌ¥—^:d÷–UW•€F@›d)EºB·Á«¯¾ÚŒ¾§™5˜J)½·—YÚ¯!"•k«¥¬Ð~ Àttt -å0u)ó‡K'/‰¦j\ø`âcV�,7«dèĉDº¦ãS k�:ݤû™¦`È’m0`\+þ~.QåÎ;ï,Κfù2Î/8*`–‚±!ÒO<±÷Æoœ í3‰y]ŠîeŽ9æ˜1®ÞqQ™°U;tÒ°c`˜¯Äp3j{Œ~›_B×�ú-…øÃ£6}§5~%�ë’û“dè`>ûÙ϶Ééïý¦x7ߋÖ9>Úf*NÁ¼ãïèex"Õà;y¯ UŒ:õ:qoyF:v«Ö­[wPË�‹`¨P¯ê+˜ðÊ¥,œËg¦ZÂÏ™ÅåÑ¡Pã!w UW¨Ìƒ>¸ÛQ0¾™‚‰"5.®ùC5 |K® åÉøÙ®¨·šž)JePMsË-·‡HþFAÖñ¿øE?uŸõ‹’&<´HzŽ0S ®‚)¦vöÕx×]wuÈÉ[ bœ óÂïK²:fœRcyVBÿj³+Ô&†\À°ø½ÚÇTœ‚yÕ«^Õ‹“·¥¥e8 `\KšWT.?ÆŒü/«vc†çßo´ÕkäЉÆ-G4©úT†‹ Fcÿi¢a:y»¬SÌ`0¿# n=L °i^0»=0ž£Ðp_`P”y¬0Xøœ$=G˜¶¶¶¢‚©0òÁ´3DŠŒÁ%ÉzßQC'ŒŒbèû“†6R `°z � 0:ç+¥`rË0'hMµ€q­ÞŠÆU0¬ì÷“ŸüdOœ‚‘üÍ“0¨HƤN …�êZú3În¤¸+3´Û’¢òAì²<þ/§`~øá9>/ŒÀÉ!ƵJ� ˜žž0×–X�!¤}Àh80sÑEM`¬”E¡Ýï*Q4„Ä5 mÌWÜzë­C: I­L C¤|`þôOÿtÅK/½DªÃˆ¶©0®U«h 0Š®R$‰2ÃË0'©©VÀ˜U"ËÃæž¼@Á� èºÿþû÷”R0 éXS™¹6ÑЫÑHí&ó’áWÜç1‘‘רÍ+ÀÍÈÙÉ�gÚ&�Æ(˜µ¦`~øÃöQ 4 †�<ò‹œ�Ûzœ³¨sd€Ñ>u�£Ž0µø}ŒDV€( <§À–ýf{l\LÍ” �0ý×Ýòë¿þë=:^Ã`üõ¯È˜.˜§Ÿ~WÀ0€±cY¯¶ZÊ 4®‚Ù´i“šUÓ² æ§¹7ºGYœ¢1À(Zê&NÁ�¥¹k×.Bí8ñXƒzò¨£Žš$ ìÕh !™ ¥ÎÆÂgãòµ°Òbìö—b’›Õ„Aê[(׋P0¦ŽR0F‘Èxµ &l¥M­€A]ð@ŽïIWÙØq q-4Óf9}{¤–F(òÍk\Ï=÷Ü 5sâsÅW¬Ðñž¥`ªõU…-)h.ãÈ~üñÇÅš•MËIÁ˜Íª'S/«æä`þþïÿ~‰v'Ÿ|²'_ÅÞ0`(× Ç*å™íì75âf¢:R<ýQˆ*5މçzÁfRãþ½Ißw­³J@ðT3Ëij€©·‚ ›; Ààƒa=ìJ#œ©³^·Õ‚æÚ`½)íg—ã#òÇŒÏû€QÄ.åw Tn�.B™0ãqí¼‘ 0ÜïܹsÕrT0f � V‰¢ÁÌßüÍ߬f `�Y3æ«p·uðèûßÿ>S|7È i�Pªª†MÈpêxh(dú’|N”#4JÁ`BûWŒ®zcÁջJh£°v€ñ˜Ö€1«4×X¥…šÁÿûÿïQ í•:6q€¡�¼ÿýï_`XŸ[jf²Ü±lhœ<£^ ¥<–#`°†])+Iãª�‚0GqDæŽ;îØS0,úeª%PSøGuXË•ÎKP|»Þnôá(’«`¼À `,\>�²”Ìâ®0t~EGfÊ+ŽE¡DuÌü4×XAҌڈ †¥ €yñޤ€ÁªI\4‹Ë”æ €ÑÃe©`̬ÜÉs†H+Y_è°ÃóÔ÷SŠ˜ðH€Fê#OE9–7�gЄóq|ˆD ‘BÛf´M¾%Œ ‘ðé”Ê~­ÅÔ‘ý¡ ß“:Áp%€y衇šYïùÔSO�Jø–Ä ±5¿Q’úüN³"`âJ“ÐF"ëÑÑÑf¢X× 4¦`žþù•òqåP0I—>X-Û¨Ælwò,L�‚‘\o=öØc=K©w·£ñ\~ùå«Ô)¦#3ë³PÑ„3KÁH©ôG ‘<¾Ü+l\T0îù¨÷¹Ñ±,0CÚL¥€¡À+0ÆUÁ+a‰@c€yÅ+^Ñyà 7Œ`˜Ù]0ï{ßûzP0j#¦`*vÔ S0]]]½G}tNNôe­`Ì,œ7¯ 1óÕ¯~µwbb¢óÅ/~±/NÁ0ÉŽòŸ¥c¶ÐŠÆs ¾%ŒÉ}o6`XÅ0³z�ŒŽeG5 ÀЉâ’óXIÐd‚å`äoéÐÅfìÛßþv0÷Ýw_¶`"±ôI5 &lՂƆ¢»wïîݸqcNízÙ+³ÿÿ”ÅTÚŽTIEND®B`‚PK!ó|¨/ˣˣQfile-manager-advanced/application/post-smtp-notice/assets/images/bottom-right.pngnu„[µü¤‰PNG  IHDRÐdQˆµ£ pHYs  šœsRGB®ÎégAMA±� üa£`IDATxí½ ”dU•ï}#3#窬ÊÌÊ‚*@ P@@dGVÓø ´s¿õœ˜AA@™Ô^b¿×ÚŠO}Ð`ƒŽíZíÐÏnÛ~¶(<[ATe´€’ªÊ¬ÊyˆÈˆøþ¿[w‡'oÞqcÈ©*öZ±bºqãçwþûìsÎ>ž×°ÝÒ^óš×´üøÇ?~Ï^ÃÌš½†ív4úЇ6<òÈ#©SO=uu6›ÿÝï~WðVwk´›Ù_ÿõ_7_tÑEû<óÌ3©\.—÷N:é¤ÕÓÓÓ ˆÀíFvÌ1Ǥ/»ì²�‚§ Ëæóù&=v>÷ÜsR¢ž©©©Du¶@»‰ÏßþíßnøÓŸþäµ··ÍÎÎ6ÉZ·nÝ:±jÕªéáááŽW½êU=/xÁ Æî¸ãŽDu²@»�½ð…/lýøÇ?îÃ399¹sÍš5™�;wv¦Óé–���)©PA@MË�ë8ꨣJTGk´Â x®»îº½ �’UÛ§YÖšJ¥ZÑ”Ú?M---y B‰hxà� %ªƒ5ZÁ¦€Aë•W^Y„G®ZFmŸ)L^à´@™L&%J‘šÑ÷Gyd¢:X j(O=·è¹ÐÛÛ[$sâ7@ÔÙÙé+ÑÈÈH¢:X h®ò í0Yƒ‡ïu+˜ –IÀ±ß6”¨¾Öh…Ùë^÷º¶óÏ?¿¨úèÍú¸¡D1Ö¨a–¡¡ù$�¤C÷ßÿÌñÇ_ô ºººRržËíËíûh³R«5‚¤]¿ßžËåŠ%m!ÚÖ",¢¸„ÀCBÿµå¹÷Þ{ÇðÔÇ.Ü"™ë¶éí (sÚi§¥~ýë_¯—š4D@3r±b½‚}öÙ‡éÚy)î»åÆmÇ%ãs7ˆàß<(ð|üãòVK5ú�ÁÂðè‘ifŽ’£­P(tñ�k6#�ié¨ãéwmÓª·­R–ImK"²Ÿxô›‚\7_yzè¡ñ�~ô£ xêdßùÎwöi´Àf�¤�>úhaP¦ÿ¬ t³\.¿ ¤†=órðÙ)•è.Q@´{Â�­Ï:Ê<üàðÔÇRßüæ7÷Õµon´€À³—zøi¯áq·1ˆL‰äΕT¢0@Ú¶ÀïmÄÛ„áùýï߀§~–úú׿¾ÑÛ5jºDX ³�¡ªù½áááÁ¼à™0îˆýGžd!ÀƒÛÖ€§®†òì£ ¬yûöíÓtÐP 0S¢mÀóêW¿:£×-ŠžxDýˆtSXMa«nP> D( Ï0àQ§)!ë� T=±ØðÜyç�7ß|sÚÛý,õ¥/}iV¼P·ÃÄûÞ÷¾mܯF®Îfð˜ò¸ð¸ÛÉ�‹¼ö&/U¡¿f/¹tMáèœ`É)\½J/»ÕvÚ†òØ�þx‚NÒ …ª½E´þçîP?Vêé§Ÿ&÷Ì»ßý{˜¯<À£{ƒ;î/CN‰F¨Žfð<üðÃôó ª=Cj‰R]|F ÌƒÈ ,DEçM }·’4DÏ#{ì1�í+�BãKIì‰4]”ËÚ"§pÇw何mÅ6ðè>̨*~ò´Gó €êdÏþð†Ø 1”™�€gå :âˆ#ÆŸ}öY?°@6ÕîÙ‘‘‘&Eì|€öÞ{ï‰;v€H7tý�¸$ðüë¿þk§Üš&ó¸“6lÈoÞ¼9µß~û¥;ì°ü †È‡‡6�úí˜#…kš’°ý—¿üåÄ0Õ¨ÆâVW]uÕÞ(� O’ß–‚ˆTUjÓLÈEë Ô(óÓŸþ4£BÊLÓV)Û˜‡¾¤õ7n\2x䪦wTAk~Þóž—Ê£HªVª¥¤ªT1µÏûßÿþ¡»îº+Ô÷þþþnU^Sô¿5ªÑX%áþÏÿ¹·Ü¨ü“O>9„«•³R Œ‚)©vŸ¦�¡Âê»pÀc�¤ó7³¨ƒ‡áBd ’6©pÑ6(èZ�gŽNÞ¦¨D><ºþ-rÛÆu͇զ¤Û §J�˺u^]º× €j0”çºë®ÛKîJ^îËÐÑGÍâVU Ð-§D¡ õ;t ž.üo’&’=Gjä+ÏRÂð¤ /¼0÷Ýw7ëøš‚0zAQ*‘c½O­ %*ƒòyä‘#O<ñ‘¨´š "¹ÑÝŠzv5ªÒ€ç#ùÈÞÀ³uëÖ!)Qö¹çžkÁ¥"C¨ NÅÎR1’%R„«[QzòÁ—\yèß’›™'¤K;ÈÒfD7ÉJR¢yÊn"Ãi@œ")hӱǻ\•¨�Ήï#xáî6¦Dz=Ù¨Bž�}ìc{Ñæ4><ú¸ÙMîŽU«BXD„ÂUh=AºNpI�>òáÑ5ð+Ž€0¢ç?ÿùŒ&_ŽJ”úÞ÷¾··T%­sS€`Ä\ñ¸ %¢@˜)�ܶœÂȤžb”@ì5¬DÀCÂx¹ *´,µÛV ,¥÷9ÁCdq9)‘�Ž=-�bLJ:‚7ánQQ‰¼†%2­+Ú¶žá9ê—Ù!%ðáùÝï~ç©`¸IÚçX­7�Ž»¾)ϘàYÔÉpIàÁÊ„ù-'%úæ7¿¹Aç–V… �Yœ5ÆÂ%0”GýëqÛ �ãÃcæ¾›Û6Jjæ{�nÞº���–Ÿýìg‹>“4)<™OgÉ$%*üñm:§¥H-À𜠺¶,ƒ9¦Žk²•”¨% *c(ÏG?úÑõkÐIºÓ”GµlA…|ŽºÔS‰Xi[ÿWEÛÒ(�pYÃc ¤È\Žñ| d6G‰–"Äý�ï|go�WZ]tF“[¢YÇRöþ„•¨¡@% åùà?8ðè£�Ò¯¡~ÂY R ü‹¨çœÂTN‰’¨ÛðzÙ¯Pjz)€,€ò„­¨D¿ýíoé�n_$%JmEPÇÑL �™«D Š1SÝäœVM…òÖô¿çˆx®D‰°RJäÂ#k%o›Ú<‹š·Íà!›�* ðT©sÂL�´�¯@l_B…0_‰˜U»X�­ Uï¥pz+ÊsÙe—�èþ¶T�™)QC�" å¹úê«×� Òξ¾¾¬”¦9¬6¼¯§ñ™ ]^7¸Ïb'=t•G…Œ„|åñª´ŠÅ¾C‰R_ûÚ×öVx:­JatÛ¶m#ª kú”¨PÈPž¿û»¿ëg,ðè£Yà‰Û¾ZˆÂƨjjmý¦_Ñ©%…åQ�öáAyjuÛ’@„;'`q‘ó XHýÓ?ýÓ€�0¸ôÒKqÛZt\þ—ÕyÌ9•J ë"æ€G@¤Åíê QÍ+¬Y³åi×ÿ�.<(O-ð`#5ûë|çíG×eó¯ËXð« ãª¥³5õÝï~w�û­zŒ úðpêÙݰÇçD¹K½Œ0ÐÛ‘óÏ?V7«X±ü¿ÿ÷ÿ<¹Ws~£Qòºq“Ì•3×ÎÌ\ƒgãÆ�}êóià�Fä²,™ò{ì±3:×|-n½øŠL5[6ÔRÛÆeR5ã÷¶�jÒýÉT’cAð HuÒºÆã¬{tË-·4ÇÝ‹˜sItöh€âàÌÀ©7DA›ÉW޶Ÿÿüç£K�ÛÏS <´™T¤È«ƒÙc“ôtœIbTu¿¶o»øâ‹�§Ø–ª7D{,@Àsùå—¯‘»QH§Ó£À£Æå¼›_oˆx¯Â‘—+Ø'õÁmQÈ|Q·r•ÇBÕµ  ™™™¦të£\” —Äpó*ÅJ}¬.Q<ôó¬#T­}ŒË%·j¯ ÊÊA´G<ùÈG|x¨ýo¾ùæHxÌêfðpÀmwÝuרJW3ˆE´¿Ì÷¿ÿý\5ûe?A¡OW �έ_ª“–ë7Vž°Õ ¢=.Œ zzè!òH�ê"Ï~ë[ß*y\—Î^›Uâž?þñ�><ж�.e›§žðDY¥û8¶=…¾bxm+ƒò¸íX×jénˆ²= ƒGmßmÓÍ™U!ö/t¹~ŠZ ¢�xÝéU›§x–Òm“‹Åâ[ O¥<\ÿjÝ6àÁmS÷Ã8ʃ‚Åy.8µBÄÀâ= ¿þë¿nV¡] <x �üå9ƒ#">¿é¦› rzuÁÛ{ì±Ñ¥nóÔ»“´«<´»€çÊ+¯/劻V«�®åª= à9çœszžxâ ";£'žxbx¢¶­'D¼§A|ÒI'­Ey~ùË_Ž^rÉ%£Þ"ÚJSÝ£lRx¾ò•¯ôÏää$¡jßmÓ~Rå<¬Z% ž®®®Õ»}G*ðœqÆ«U€ ÏþóÇÏ:ë¬XxÌÊõ˜“À�V@ÕÙjÊ£Áµ›6mbxΘ”gÉàAy‚NÌ�‡ÎIÐ\j$‚kqÊó�| 1ŸÏþ÷ÿþߟÓׅݲH‘µ¦#�ò‘œ—ðë[ßš³� ©a™I »jâl©v=£®exxN%n›Á£hÛ¤Ô xš�ýš›Uß—Z òáÑój5ë²oûÛ·y!x°Ý @ÑëÔ�I•ƒÇ¬qãhc|îsŸ[£ÈLk�nwÉà ÚÍrsÒ¬dWËp�àÚ´�R €˜r]Ë~ªQž[o½u� o3‰ÜÏTTu!”tß}÷íRÀ`õ¬,lÅw¤*"“:¿ž~úé"<ª}ËõCÌ ëº0•3À ã2¾Ôðp(£¡GGGSr½Ú¼]ùŸ[=Í”GÇ‘¦�„ò$…GçÖ£ß5)‚fÊS¶ã;Ü îèv-®³Õ…‡6O)x°•PÓþçvéu'U€óeð,$DÀóå/¹G’NаõÑ€Ç^[´�sÁÍ"EÄüÕ½i“yK‘)�éõë×{*Œ³Iݶ¯ýë«õÔüÌ3ÏL]~ùåSÜÓRÛ8QjT DOgg窖––ìé§Ÿ¾Ý+¶bû�¸¨'œpB' (Þ÷¾÷Mžx≅¨ ýš×¼†‹{ˆóSðx¶÷¥ú‰T8 ‡vX᳟ý,mž´ú<&Ô‡±èð <*”)ƒÇmŸP�-¢ÇÜS(¿Y•–l6K_Pâ>°àz4iÿdaå·ù¤¿5åQ-ž"t³I•xèÅmSßÒ´ k×ýkÒë\)wÍí³(·ÿÎúë¢Ìú‰\xt­fÕÏSl¥”:æ˜c:¸ *¼“ºà…RµT½ =Ô'°ZmƒÖŸüä'“üà'½E4Sž8x̸6ú.wß}÷¥˜Ñ©¶G³:CT-@¦<º­kÖ¬ñãIáùÞ÷¾GámÉd2Sª¦¯¿þú6òãéÿÓêSËKAÕùm!&Sê7]z»JýL´yX6&‘b¯D.¥�-Kª\xd,{û£ZÝ9ƒçŸøÄjÕT­wß}÷ħ>õ©%Q¦:—‚ÇŒï.¾øbuïÅh<´y>øàB%ààsàÑ~ZU I0’™™™é`‚ç\j?•¶‰€G׉•Ð}åÑñ&†[i1ß½�ŽA]Èiàá3œ…€xø/àÑ÷ià‘k±$ʃ©¿)cð”ƒÁÚDh‹,T›È…ÇÚ<•À£¾»f}ܦ¾¥ Ñ‚\Ô3ÚwE•j¡<òLr7Ýt“# Á­l%”ºýöÛ¹¨ÕSOðÝÜέ:BdÊ£›ºŠE¡ÔË¿dð„•Ç*¨% ”A´PJ䆪+U�ß4%¦ žÞÞ^Žo†‘ϯúcÈW—Óƒ0}g=”å¹}ݺ¹m,XVñõX)¥~ðƒ´>õÔSŒrž àÁì9å-DÚŽýn¸á†UªõÓÿþïÿ>ITÈ[Dsáq•‡Q:®Ö-[¶l”2vó¾Ô~J‰Â¡êJ”ç‡?üa—T§I 3Gy`‚a?¾1χµ’¤Óµ(}Ct0ík_ëTeÔE´íÍo~3+_TuV@><¬%‚ÇlÁ òvµyºU¶ÞÉÏ|æ3Ë [>Ÿ_ßÓÓ“Qc}í�7Þ˜"S¢Z!rCÕ(O%ð|õ«_íRýX.¹ä’�+ÇÒ¦k=�òLø7ŒM"~S)Df¸mÀ#pºk…[îÑæIï·ß~Éx&³ºC$7­ðÉO~²{Ó¦Mi”EW¹«íç?n¾ùæNõë­ñÚrȇ§»»;¥~—l xÌêï�G…±K7�¿tÐN{‹hÀC(6 úEÔ£¿—TdL…`Bµ°v‘`¨¢j•(ÜI*uÎUÐæé@y€‡ß$Q3›¤DO?ýtEJdðȺuÞ³gœqÆ<åѵíT›¨ã®»îJýèG?êñØr(uï½÷ú9½^÷º×eÀcV3DlwÝu×uÊ-¢ïaz9Áƒò¨_d½6Ÿœœœ� BAdȦ‘‘‘Y¹t;«U¢¤�…°ò Ï¢"^µwZŽ<òHSàÑ×sÚúèÔrTm6®3N¡Ë{©Q¶Z%â}9%ŠRž¤ðçÆ1N+š™U™öåñbà‰3Kú‘D‰€‡®õ'ùnÛ¹çž;U˜]º�:¾QÁÃ23t �ë>ù-éÎ-;€tÀ-Çs «ÄÍV�YÅñ_ø¿º�-?ùÉO–<®òHeÆ›q½Üß³šÕK‰Â®-•KµÊsë­·¶« 3¢a† t¸mwÞyg‡ÁÇR™tH'Å4{Ï„7”ÈÔèÁô! w¶<¢K@dßñŽw�ÈrÎÿp�é�ŽÞvÛmye˜"îGîÈ£Aä·”-«é ,¨D˜‘HI ð¸æöÍ9W°?oÀ£‹œþ¯ÿú¯i…‡ŒzY9å1xPÜ5àÁµÁ…Óç«T@†)üìK.RJ)§‚ТNÈ^�ÛÐE]4îΣ‰2þ“°8i¢Ø7ýMlü6f޲�þ·å©àð-ûî»ï̉'ž8‹ò룱\‰Ùg¨^%Ê<‚…cΘۦã¡-2í*OØÊ)†‹çºy¤ëb�2ÆÍÑnåÚé¼;ÕýA´�D–‰á‰›;V"·M´¤O0–k!á1+BDa¥†Çm“ÿ;½ðàS£úÑ�2ÝÝßå©”×O›ñp9ƒÒÏ>ûl;¡kËÖS*}²[ˆKm`DáP5½�1åQeÒA¨ú”SN!#’[qV¤<çŸ~úSŸúT#&ˆªºƒt ›ïî§Ô,R3”xPƒG}wí(Ï;ßùN¬ðÅ/~q• �·+\¹o¿�¡›“'Û Ò÷cŠüù-U.¥š–Gµ«/WmÀÃ"Pj_ø�Mo�›l¯Qž@ ýë`Ѷééé‰ýöÛ×£9Á:¢Mj­Ve4D{#j\DžåÊõI‘2gŸ}övSþð¶À³eË–æ“N:ɦJ<ÂxT@)”9ƒçmo{i�³áò*4)mcìò»p̡݈O>ùd›5cC�T™tȕ˽á opsñù.»«<œS�^«ü‡{\y#ü¹fºVYí3ö˜i—)ºØÕâ-²™ò�üÃ[d# ¤BÙü³Ÿý,ÃÂZÞ"š 5´ Ê# }·m`` 5:‚N~ݯ<+’{ì±Ý‹ÐRXj’ÿšYNnð0ªå1xÔ.bÓB¢¶d,œ”¦øê£B@˜×‡åqቚu(OUðPÈTø5âÃ#÷¯Mí;¿m©ëÎ/ ‘‰]—ˆÏX6„¤îÁñ¸ÇfIBò¸sgm.<ª$5) ßïÔ¹“ŽØ<”zПdÏÚ…?ÛÂØfqð`»¥:î¸ãšåB‘²hÙ(�MÃVSEF>tŸjß!ÆŠÉÅlÑë‚>›sOT 8þ~²qjhû^�\׌žöG3¨ÁÞD›xÎ;ï¼XxÌmS�!´·*‚Ç’™çÕrüñÇÓˆŸ)µî,§DA›l^Áà!œlð‰îYïhÞì`†¾èE/Â…äé2çc�E×¾099Yp·á3:œ¹Žê;ó£yÎ`ÒUT4ÒFÕA;§Ol·[¡.WGФœzÔ—  ÙRÃðèF�ëÆLèF[¾³~TR…yVß5ë}êÀL¶å122B¨ºC…7KI�4áîèF§TpyäUøš¥h}Ú梋.ŠuÛ,Yb5ðx»Fp¤X‰Î”çä“OöáAy…+¹új 7/§š¼ ÚU€s„§ùޏ\NΕÏ8_Æñ¡$ô[øiQx¿-ÆùmÚ´©C×~¶§§G»Ê6鸼¨G___�Uôy¯ÊÇoó9¦ëGFÓiÝ�‚ÀE0&½ÿþû¯ºûî»ÇT1ÍëPÞ­\8à9à€¸‘Kâ¶ñLL”‡iáaxT0&TðǤb†»dìÉ´½æ.æ(Ø ñIbÀCÛå@E·�ïâܶ*ᡆ÷sŽ›òà¶™ò¸ùéJ ØŽƒëιóޏfÌ92åáøø¯£�>ºUïsQð0¾O¹GQ²ÖMÕþ§¢‚pš°>ý8ïz×»¦Æ} 8Þ®)y®n›À‹›¶Û¸pNH5·Ø#Ly€G6­êݧŸ‡ù�R]ðä]åÕܾò¢Èk�áÎ "kCÌÝ Fç‚?ÇPàAyô6‹òðy0‚z!àÁ|åž»îº+GT[¶Y›‡ï£Ú<æ¶Q³â¶¡<ÕζÅmûØÇ>–®'<,NÕÇc¬èæŸ ÷~·LZ/‹€'oƒ‡™¤ä0Ð Šu‹“ºs„¶ _³nŽjεú(ûž÷¼g;GTaÚBÀÃ{FaT OHyf­c¶sá¡ST dƒãóS8SÉ�|$ü;”Çà ”£ä±”ZÖÈqÓO<|¦vZÇ25®.ÆRAÐÆ³ˆo 2V †Õ÷õõõËÍšfK2-!n_I¢@á§kû>ÝðìûÞ÷¾mIá!zU‹Û†òüçþg¶ÞÊóÚ;m6lÈ¢<Þ®Ó�Qˆ5<ºîlŸ³rÉHšH~„–Ç|º‚ÕÕçÁƒívcáêiIàQhwBwåàÁTóùuŒÆnç£çÌ{ßûÞí‹ �ÚŒjÈÕCy0GG1Êóú׿>ÄmÒÄM5«"ÚCL¢uèõ²f§ ò`R· å©F:sõló`Á R¦›Ï<ì×JѶy…‘üä ,´ÞsÏ=œ“‚ǬˆPà!{ŽÀìDÁÃõ—:,Ù Ñh,øä[ØmCyšššzÕ�T³›,K‹kQS“KÛ�Àcvöì³Ï¬¤ÍS­Û<êSb?uuÛ8Fƒ‡ÑJ·\€Q59ð¨]ÒÊ\)/˜¥Z*¥o©ï\Sá÷SOéW�Í}*»±×0ž'žx†™ÌSwª@Lé‚N2ü�©¾Q™%i<*8k'''³çŸþPxI|÷Ýwj…ÇrW/„òH)²Ö¯ã$ÒœW ½·•)¼„VªMd�Úv ¶Ç+PxÔØŸ”ï>³àÊc¶Çä£ ç'=4xøN7w� ùT)x\K¢D,Ehð¤L°Ôú²„ǬDA›)õå/¹U}-ìž]—öw0H•Pu'ó}KyÌö¨ €�]ߔDžåÑg=êÈ›L OØ¢ �ú�Ö�ÛíœsÎYx¨Y«…ÇŽ%îsàºãŽ;æÀ¬^L…¼ðÜÿý•À㯑[+<Ø£@å”G›ô¨�O)"7Åœ“¨tG¥,J‰H ËÜ à!öb)ϵÁÔèjáqÍU"ƒ‡Á˜n@xÞóž÷ì³mÛ¶ìÛÞö¶-îïƒå,[h—,å)Z¯Ôö€Ly¾ÿýïs¾óÚ<=ôP�Ú%Ó ã;7U¹šZ8%¯¯´A£1¸¦ÓoûÛý‰d-Rå‘vá±ü¥R^•3ƒçå/yÇÃ?<�t J¬žðøûñvs3xî»ï>�4J®ò¨°‘N©'�NO €i7IE¥ d†Ê¡<¬¥)w�H3IQžÔJ„Ç,ž+®¸b#ëêLOOS(gtÎm„þ·nÝ:xüñÇwŒŒŒL‡á1«"öA®7?ÿùÏIDR‘òX‚Èðw¨¨îCÞ«p±ëݺ „ºÄÁÃw«IÀã×ÂÀ‰[f½œ™Û¦Pí©Oö‚ .`�ÀXxø®^ðÆ](xp £”xdþº¤¬.`FuM;>øà½^ûÚ×NÄÁƒUº^�)ð <õ„GçÓ¡ýuxÚn½¼ ��qÊ£>‘Õ]]]Óƒì8ÕBd¿•+ÿYuäݶp�¿ÁCÇïëýYõ„‡c7xX£(¬<ü㹞;äªú##Xð‹óÖû™¡¡¡ô�7Þ¸—>.”%)D¦<:–öjܶ8x¸võWÕÎz�IE×éU`»¥ <A<«äºMë¦Ì¸ :™¿7€’¸sl‹Û¦hS�ÚR³W_}õ° OÄOê �jÑÙ`š'ëÕjvìqð <ƒƒƒÃ¬Y¤ãoÏf³kXªR¡zVЛQ›²CŸuÍÎÎN»Iï㬔;gð°øÕc�=6S/xLyXí�ä“ C’ûéçâÖñ&šp·Û)P)xÈ· <ò×§uñ¦£àÁ*U"ÛV7yµT/«€Á¢ÂVž ÀÔd;¡g¹Ãi÷R›‡œuþ9 ®³¿¼ˆÞN«É©csïkˤ]ŽS¢…†GKËdXœŒû(xf*Q¢Ý  rÊóì³Ï®"T}Ùe—M[/xܠĤ9ÛômS8Õ_= �öáaÀi­ð�ʆ!y»Öï)~_-Dæ¶YQ]åùÛ¿ýÛ .<:ß)�¿0Û°f) óš|×d¼"=Z?ÿùϯ¯"F+< É×Ím£"VºcíZ«D¹�”EC´Û¸på”GòÜ�kqæ™gÎD !‰_Ê�sáуQÕ£|§À£‚1kÊWÛ<¼®ž;ÙY�"ñý+¥D.<:F¥—…‡¥YÄ9—Ëeˆ¾ ¯ +�Y¥Jdð(R:SÉܧrðè)W�ÜUÂË)ÑŠV ƒ‹‚GnE'ðœrÊ)™¤#Ë)Q�¤Â_ M hSžBT?�«<¼¯vW-š1xTØèCkRå០€”úoS"/,Ä)‘¥'~ÛÛÞÖV%<ü>*T͹Í�+7=<‰­X€Äàq •Áóä“Ov²\"ÊSéø«¨ kI*¸¨º «U�fßñŽwøˆÜ¼¨6�L^× ‰Cë U>w%‘ÁC{JosQnýjŠþmXy¨Ùë �YÕƒÈBŲ̈åsîýŠÈàÁ¥²BeË�a¹é¦›:Y]<(@Õí<»Ðæ 5ïÅ_\Tžðo\—ˆ÷nƒ¼ ó–Y�¯ˆ >”ÛfðÐÏÃòò„ª�‡¥áQ™(xTi±ªDAÛ,ü,í/¬Ï3¡ýŽD à•JÏÔSu[$BÄ™«D*ͬÁu\QAIþå¡AªÚ¡#Xg3kmÈœ{U}H*¹sÎ9§,›t¾›Çš®îC úm ñññ¼"z…`¬ÓÓüØc�íP¿Ð¸Wƒ™òèüf/¸à‚L%y´ÙV,d�8âˆÙ 6äO^Ç—³Ç 'œ�ûÍo~3»ß~û኶“Û"ŸÏÏ.k€Lyâàa‚ס‡êÏQ±åÞ ‡–ƒˆ×(QL¨�"SÜÜÜyç�—f ª6/ÔO�N¶ã�Uƒå”ÇàdMÍ<üF*á…!’êx£=´�<55KݰñÞ®œì=À#åÚaA™jÍ”‡5a·mÛV<ÛëÚ·‰íåÎùm6{È�õt-ó×´cÇŽ.UŒÚæ:-ß06… ˆsÛÜÙ‘ná.¶.5¥px¾á†ºU ÍÊ¥˜ Ž%"YÀCB­ð¤b²xÖ`þ5ÓqÎSsÛPž§Ÿ~ºè¶�ÚöLE÷áa{"k¶Ã°[L¨Kl¸?z¬ÆmSb§eª5Sž§žzj¶Ѷp¹ ’ ¢°Íª(:,�BpE�÷SË í< …™™R¥yðDLX‹4wÔ¯½6x½@¨5ðÇ åàá}½àñê�rwëð�±ÓU7` Hft><€ÃƒP=wg¥ R­¹]Ø…<úß�ô¥y5�õó¨=À³yóæ©Å°Wƒ¹Ñ6àá³jበc<·Ýv[Ó‘GÙF¸žŠå1x(ËJ�*�Ç+²­D‰ ]°ÎžI/!<„<Œ¾vˇQæ– ƒGn™‘ÔÎ� é9mü ƪ”ˆgàÁ§wRÂF] é°báÙ²e ¹ ¶Œ x @„ªècÃTCûϼç5µ5ßkûfAÕÏd9¹}“„¡ÃÿM‡g«ÑõDòêç¦~©ößÿþ÷ äÍ|ùË_nã|tœ$‡É'pÕ'٦㙡Ÿ'nT iŸ~‡x___“:x —_~¹ï¶9ûšó_K�«<$ßóBi�àkË$¢ð*€Èì3ŸùL;…c1áYH³áKQÊ#ô‚šWï;P”H¡çmŠº¥\ p‹Tû_c(ŽDBÚ ¥Ž…ýI}z�G0Ž‘Ï«Á U9 `Œ@‘ò5I§Ë ÏŠ,jßÙh{]ÿ^3ý ƒÊŸp qˤÿkI¢p×îZ“Õ‰‚Ç«/üÛT‰|<‡rHbå¡à¹Cþ—›…á¡o$ j#ׇQÓ‚`Q3–²îУnû‡×DãâæüD™ �Ú\µÂà aàQ° çFÛx�Y‰( o·$$¥öeQ¶P`$<”O©¬§Å},:@�^Q¹ˆm,XBxÌÊBÄg·ÞzkðœrÊ)Öc �%î°)ÜNðbYY”òX¢w/€Gn*s~ìú°ÕÔÀÀÀ=ðÀÌÉ…³hfî^”ÑþqáùÀ>0èÕ`”ƒ«®ºª ·Moç…ª™¢Ï€Ñ¤…;ƒýˆüë<*Ôþ÷VÐÝ}ðˆ\%:üðÃ×38×U¢°©�P⃚1#å †NÖž$ʶJÝ9ÌFâ�£<—¿(Oäú+q¹¼jù[o<­Œ”¾öÏóìcÝ6Bæô¬$xÜ6�ܵí¸m„a�‡•)x B“k5¶Û&ÒW³.pá¶�ž‰Æ¥Óé¢ÛvÉ%—l÷j0Ü6”GðÏ�§få n�v Däz¶mžŠ•ÇlAçEÀ³hÆÂZ*@ž“ 'Vydþu Q¹’”çšk®a„ÃlUsžE屡*èžûÞ5 O¿o>ðÀɼò—]ª�»>øàQ0cæ( t’ ‘õŽÈs@G¬þ³¿žð¼ë]ïjÀEx0æoÙs’‰�€!×sVýRäoH B…IAL4�dõ̲mEyÞüæ7W ¶` ´”ðœþùþÊ¡TRá‹TîÏ›•Ê£Þf~úð†5xP^»Ê~oæ*‘¹sA›(§Z»¸=ãá‚´Ä©…€å¡“4n»Z”Ȳ+éºQ›ê¡ƉeUÓ·ë?û‚ÎÖçXÄOµù€ThX°M ¬½ê � {ë½÷Þ›w•§”U�ç `�­¤¢ ƶe žjÛ>îP@°×IŒ¡:l¯ÿìW£;]�±m<�O›"†9¸l½á1³ëâÊ£  nð•5ÓÓý}Ñ©kƒž«Žâ,%<þTÚ •g%¹mÀÃÙƒ‡º¼„ýv€ƒ UªDªÈu?#“ëÊ£ššþoá͇§žÊƒ«÷åfŒªÖ…›Ó¹·È–hÐéJmó\}õÕë€GѯACÛàan¿ëªø�8«¤MÄ÷ú¯‚TÇwÛ°¯‡ò\xá…~2Sž…RŸÀ|x^ð‚äë �%aqpæÝ:ªÈ`)àIdÔ|ÁóŠjóÏã�?îã¶‚?¶Íà1s!*gn›("[5x6lØ�ž÷¾÷½C^ <¯~õ«[É?°�ÊãDàŠðÈMg¾W]Ê&çA†\·Í“úóR¢þ6× ™£fÉ5x½’àQ”«ÿ©§žÂ�g4n[K)XX§Æ}ÏšDqf®œ¹vö9ªÃ(\½xm—ûX7x!õáY,å©7<¬l,sß<زcÏY�r…¸m²¦—½ìekXMmõêÕ#ÀÃèpƒÇ,üÞµ8‹ qó9¹Ï€gÓ¦M­jsU Ïõ×_¿N�¬�À#wªÐøË|�•gdddš•¸yO‘/~ñ‹«h‡Æ­èUha·í”SNYrxHñÅg´yÔîË¢<¨xLËZ�V"<ܨ«¯¾z�j~ð£¬dS+¢¬^Jd«Iüüç?ïU ¢MnÛD5Ê#·Í‡‡C‘|Óv³õ€xt­št~ËÖ’å3ƒGдèøÇDÛÇ…hÙ´R•ç}ï{ßjúy¤ c7.IRt³J•ÈV“жkÕæiS„lB�¤£^2+*� �®?´éXX½;§ÄÒ�sâÇõ€(h'¥ä ¥q‡–+<¶‚¹™ Ѳh…*OêCúÐjúhTc�“b˲¤: @*†¨œ©ðø @Î;*àQ�P˜»S�ã"< ø¹£0 %®4è[Ãa‘ç´‰é­ècYˆ€‡àƒÜ¢e0pá!T½qãÆŒÎ­m ›A´œ:R—2ËOµ–R¯ü*@–ÏðáqGJ¸kÔ$MEkÆRÁï öÚÙ/ŸR]{ðÁ·JyÆÏ9眱„».£ýt¸Ê<ôQî»ï¾yõ_µOOO¯’ 3%^ƃ6Ð89 ãÔzxO¸—ã òöÅÝËÔüÇ,;xPAM2úD w–@Á4ñâ[oe˜ÏŽ;X­m" �Y= íχgŸ}öY#×¢ulll¢x8à€Vµ)δš=m.<‹sÑïãÄJÜ &Ì;. ’tð‡ýP¯ºêªHˆPžÞÞÞôATWx(G#jQy™�;w&ÎVµä.ÜJ…ç{ßû^·jïÔ¹çž;®6D>  Ž›Y‹;gï �³F¥¥<“Õ*�¹m�Ü‘‰ä‰Ø yâZÜ ‚I àš›`—kWŒÎÅu¶<ƒƒƒž á‰qð¸V«…âsŸûÜùç­úÿŠáù»¿û»õ‡rH»«<*<­¨¨^ûé‘¥hÅcC�¤$À°J}B“úÍ dßWªD¼_.ÊÛÆŠ9Bö^…¶œÚ@+ÁR?üá;Uûp“&¹ð®‹Rn eµ‘žKûö¤èQÍM�É‹.ºh<áÏ#Û<Ê£gßmsáÁÊ„%�ÈÚDŠøµ¡À“e ÕgŸ}v%Òw]êSëyÁ ^�±¹žyæÁ1Ç@r­PiKÝyç�~£å!``QÃTDZ½ 2x>ñ‰O¬f]Oܶj”çÅ/~q»Á#u™²~à‰ûqDR ^Nµõ¼Jų~;‹êðpG,«ÐŽÒR�dé”^�×<ˆ€çmo{[›:Zý�§ö¿ãŽ;šÔy†¨oPžý†)Ü.à8=|%UGr‹A¤·Ýª¨AĪ}ž×"”²Ôí·ßÞFYzºTT'lµ¸s.<º‘-úÿ©w¿ûÝÉZ·n› P¸Uˆæ“üúy;Â�s]8BܬÜ_Ç™…Ã7Š´i’µ3³õ� 2ççXP'»hž biU¸8LëȽ“ÛròÉ'OrMCѶyf)¨I¢s·µ`H˜ŸÕ9µ„¡¨³$]Á�ÓGã‡vØÈþð‡HwŽÏÌ…km><¼PÿÅLtÐ2|­\AOmº™O<ñ¹ð`>@Œ÷ce8íƒJuJ« 7•piýkaÊ<:wr~gu‘"pV”²¿D®5Ú@s-õàƒ¦KÀƒEÖzµ¶‰ø/¹mÝRŠôSO=5Y <(� Ù¤ _«ÁÆáQÅa Üšš© Ú߬µ{Ô.›Ó¢#–°8."Ó!Ž¿­ö‘áÔñ»xT3QðIçð0rƒ<Á2/”׌û9FÄ]‹þçöó¶�ö1D›&;Osé<«.ƒÁRm"×ýÙ|塯,�Y]!,Ì€ìRm×¢4uùå—Oy �Ù‹P}6¥‚ç·y ³J!2)ý6¥pväCjÅÈå”"} ya¸Éæó*ÀÍú®Oáìðüÿßÿ÷§˜6Ï£ £ÜƒU$0ÿ™À€â¢ÙöÁH~_y÷ûyð Ú[YUH‰Ç¶D¥ î¢Ì n—¥î½÷Þ…6i˜f+ ^“;¤çò€‡Õ°UqO�uÖYÓ^òÿžÊ�kIÜ9)F^¹#®ˆvUlð?³è@éP¬f¦E›ò$…‡ö  >.”ï.q¬ÀènC!æXøNîj½+WuS“ªFy^¦xÌ,XçΡ¬ª(ÈLÚha‚' +PZ,2‡-D¸~¬/+ppßt O?ýô‰³:C­FG›nDÓ"ÁcæÀMW»¥YQ¥™|àÙJ~KºÝ#Ž8¢ÓVIÐ>È:*?œ¶[&î¡mf[F8k¯yèw3Úþ{�üi¶ ÿ^*ÃgÓÚfÄ’)<(†š§<¯}íkÿĨêN8¡•) W]uUöÔSOmVˆ¾u|||ÖͼW0ÂoIÝrá ä„è ,~á…N3£Uÿï+«š�6k&§œk¼×ÿ¥xÏqY×Ónä•0àa?Œn’�œwÞy”©= N”ð¢‹.Zô¹¸é¤HbþI5ð�èåQAöûxTXÉ:Í*sÇw\NnÜ ³?ylÛ¶-£FuFµ9=õþC.Yf²fS,QŠ ´k´ý$ée܇ą9ä{k:IÉ…< ¥r ¨PùÊcðè·þèG?ša)õ™°¤åì�wÞÙ¤6S«*�YK¬Âø¶|�¶TtóæÍ¹pƒ‡‘\GAíÃ#7¶OܬD´ulžÁƒò<þ´o÷·”5à½E6n:9•ö³Ÿen¹å–ªàAytó‡U›�~éK_êfz4é¦�©�2¸2<>‹Hœû™™“åÔ.é�dJddÌRX�}F禫< qaT5ð(pà+ð¸Ñ6¦Üpà “j¾í¶ÛfN:é¤&[aâ�ð!�ºe]/ íBÕ‚mgÐD[2vEr³ZÜ9àa ž ]ïºmN&©•¿Ì}[2xé£_¦Y7`öÝï~wÕÊ£›7,n’!$Þ®†u›”Æ_5€þ½«¢DYòw8�Úp9EÜZPwxŽMÃ&×°D…ªq�kÈïõÛiÔ†6í¾wŠ‚å‘*Î�Çl! 2xt¬‚–ÄòƒŒwá¡M½»÷-ÉR�Áènr¶RxXΔÇàQJš>沨à1¹�°-ý0«1þ'¤2><îgaÀ0FOGˆ �EÎPõÂS�ü±m´y€å”'ƶ‘+œv�EÛ kGMgwá¡’jõ’rÊ…‡‚톼]˜¢Ì À㢠wÒUàѹnÃÃk€ßc‚‹eAÇaó½÷Þ;«j6áÏŠÊ£>"V†ã&îTÿÆ”n¤¥¢ «áîé; P&âÒIÒCü}©ÊÔ�H»¤¸S^‘}Æ3AÂÓzÛ¢B(¦¨Ù‹µr·(�zâ[HBè¶yPž·½ím­*˜3´/Õæñ§Z» $mê:ï Y,�òëûßÿþ¬Ú€Åhn”®“¡@çž{®�öÓ«ã`\ßðÅ_œýö·¿ÝÂ{;V–²´¶MðŸ±8i›ˆïLyX‰Ní®íïxÇ;&ÃðØ´ò@u4F7Pc)êT1<(Ë*’1xô<¥Âž6pÌx­ØÌŒNÝPfXvÒ#Nx›©å ¢–ݨ` W�)Þ~Œ •_ÂðèXXÔ‡Ç�¶©Ÿ‡Bî+�Ácÿk™X f–’ŸÜkoxÃüÀÂÿý¿ÿ—ßûÓt,m ˆäÞùÎwNúè"ùätµðXÿN0þ�c ÓO>ÛÖzÏ=÷à¶åQa’•��Ô“…€(HR‚R÷30·- F°ÄÁƒ5\¸*Œ4ÝØfnöM7Ý”txPQy=ôPÒa¹St&⪕³rî\Tt.ìÎQp™ ¦Ÿøm µ5H˜ˆåÔ&!L\tÛLy€‡€Exlm×(xXaB�"<(�*†ž Àޏðx8æ˜cüUÈm%rž½„VÊ�&íi›u ᣪÛ&�T‹$ÆU’ €*4Ñ­¶…©"x° ïã�?^páñ*°$m"7:çBLµ¦ƒÖïR­ @yÁ… épCÕAû®Uà•„#ÚF!5ˆÂðè÷)úËtLkˆ ÿæ7¿a†gNÁ|án ‘Á£×Œ«ctÇ`<(O9x°@ö5¯yM“:ô •ÂsÍ5×ôÑIª¨Ãâ‡U@*†Ç¬%¢ŸHPMÓiª‡Æ @#9‡ ö¼Pu�ݧ¬ò0ÊÝjø¢BðÚwxèSÒ¾fPâÚ |ð¨ 0´9Hã[\L¹ÞÑÇÌ1Z§×$KŒTc“Üß²ð`{Â`ÒzYŠá(¥ò1GýÆÛ•n©Wm�Nà‘»4R�òDY©¹,„¢I®¡ÜÎ4k>cêå—_¾óóŸÿ<#‹ÛßE~5=Ö»“á‚àˆÁ¹ö«YÄ,Óy׆6ð0“åQ[g5ö¤z„‹IÃÓ· cÖ�D{ˆ÷@d¯+1”‡¼:×V©ò`\›ÇÎ+IÛ¶¡@ �Btá…*…G¿ë¥ÍùK#j0OõõõÕ –Ä�sû‰èlU»†~~C~³Œ>cl[Qyê �¶icMQ‚`ìÌ3ÏÌ ¿ ¢\á5aë¥Dl«s&xÒ¯kFº¬í„Îk…k(P³Å´ªUžGy„Ih#º1dõ L%ù ÊY)%bü#™KdJ¬®çƒaCMyTˆÓrS3Aþ†Øý&�‡| Dù€‡‘ŠúÊÃro~.lw_uU¢ ËO/+9Ê�<ñÄIQe¿+¸ð9ÊÏk„±Ë—Ô»•Âóñ�|-ð(`À`Íaàqݶr£‚+±¸7n!jFq«fŸ–_�‡¡26%xäšúð(ª˜ Ö~�W0-)¤ à$…‡ö‡ú~FYû4*¶�þÜÚFÀÃë¤!n¾ã?ׯ_ßK›Ú=.<¯Fx<¯¡@eÍ•ùVtÛän�ÃÀž»ï¾›y2‘îòB*QxyB©àŒÚ"]LÊs•‡c“{jʹê¸%… Ãuax~øáUŒ0PûcŒ€mI/�Õ¢D¨ÏÀ£'2˜i“ ,eE5ð` *cÕ(9 ¶lÙâ+�:HcáÁJ‰\x0)MNÇÒª6Àê°ò� e&¼ê¸Y¥ð0 Õ…Gª“­žZ•xø­*ˆµ¬¾OàYÔ�ç5¨^V„G}*� �6jDnÔnd¢€A½”(ª=d9ãÔ�^Ï* ¶>𨠧Y‹ÔVwg¹¼“ @LÒCÚSr_YßuZÿ�VèÞ_Yü…%UvÍú“ìµû])%²¹ôŸ½:ï4¹PByÌQ¸ÚÍ¿1W_}õÚc�=–Pu^5Þˆ Ì4ð0”¤Ô F3ÜèÕ`�;Š; Êó—ù—><*X_V0̓“KçU}H²îžž .Ñ>Öê&¯Ãa‡æ…“‡D™uÊV�£ö¡‡*lذa-ö¤@Cô;y!å±!ֵƒ5ªÍŠðüñŒ0 ”\ˆ"�n,½ê><68<¹Üðz³J áv³+Yx9§«†ÇžÃ�”‡•³õ}uÜvêØ§»Ôþc�èÌh0!IÓ©aÓõ×_¿‘ýÅAeq�…`õ†‚kix‚„ýs”'ª&Xrç�wnŒ»I­¡@•[ž—½ìeÀCMïÃÃHâðÔcw,¶JVEžšôûõÏ©§žúæ´ÓNK'�ÇŽÓ…'¼Hò›ßüæV@7xä:vê§N7S)Pµ{†Éß-%b‘®Fè7SÙl¶S…·f%&¦G}ôÑkTY°Âßpž(åá3ï¾êànVÛ©ûßøÆ¨W¥5¨2óoÌßÿýß÷Èmk§Í£BQ„'îG‹¥DÀã*�Ü›iàAyÞúÖ·¶$…Ç9ÎXå1xØ7©¨ÔÓ?¥ÿ]<äšHÃdµqË�!ÀTx}ÇW«ñ;EáÑ�þío;œDy8÷Ûn»mßÍ›73 ˆU.šüãoôªŒH7ÂØÉ­n›n@^ájB³ÓI§S¸Ý÷åš% qS³Y©M¥ÙU¶ök)—% P*rúV\Dä³oÖ*b!,VnÓ&Ý(�Ôf§Á#ò—·×çÖ¤‘U»ƒ© ¯É«à?KX9iˆõ9­éèèh°#Qð„CÕïË_þò}~ÿûßûŸÜP§2×®iÓ¦M³ññ¬W¡5Jfþ�QáY­š—NRRM�m«tÞþB@dÊÃʸoz&}îÖ$ðs„\x¢V7xø/’E²o5Þ;è(VÄk�6é¦Í£B9GyXR¶–,¨äZ@…ø< ÑÅ_ül8êeÌ-ÒSásŸûÜf’ ¤‘n¸¡,<¦<À#¥œez‡T²I÷qP�‡¾j!jTÞü#½G!àvÒíVªñ‰O¬2xT¸}å)¶îÊl$¤À<ð¨�ûU[7+`àÃÃq³&Ï©§žš¯žpižòhß><_ùÊWúTغQž—¼ä%C�=öX‹Ú$‘çÆ"Ä*ðEˆÔt¤€²Æj‡öA'«ß/D¿•Ω…üu„“éüe:C�7§íYœìE3^x!“ýšƒ×~^>Uå¹ð¨t…Ñ}åÑÃWþ›câ pü‡~¸¯6ßþö·éÀM«)¤ª§òðÝ6”ÇÜ6¹ˆÍaxÜãÂ’*�™)‘ܸI–Çt•h�V ë®»®ë¯xEÛoûÛ‚ ßEå+ ÛB(m ’bPXÈߌòè™U|x‚Ô³‰à �>o<´+® –£TÈà¡@«Ðo—‹Õl+<°Ø1ÉJ܇íÐ}�ú°­µ=pÁè[/H¯gUè‹Ê#ØF îƒ!,î—¶ :rgiû)˜Qì$Õï¶™ò te"‚JD/¬D{¬�zïÛé$Õ�›°Dî6á�QVo%2åQ§bm�”U¬O $å d1²µy (È–�˜\xèçQ›pðÙgŸm#Ÿ6ÊÃüÙöÚüž ‚]+ 1µ6hû*2I'ªÞûë‘RXp­’1í{F�‘QÆÊ¹•˜Ü7ÿ„UQù‘EÚ†ïÿûs:·fm»A¿óáQàg›¬‰e*™GEÛ ã™÷a +°q¼^‹R¢=2 §BÒ©çvf’>üðÓêçÈ”J·Î eõˆÎY.3”×GêE¿AX7á4ä9.ZÔVQ<¼çõõ×_Ï€T VÁÆŠ%±RÛó�fXѵm>SáÍ鱚¤÷6‚[ê‘S¿Ó¬{ÈCN· øŠÞùm®cØ–ÈŸ¹‘@³poTKÚFr£s{œ ÷�| K Í6àÑ�˜`(|¹\e‹áÎ<$?ÃCCy¡áaéàá3úkX­�гjñQVÃã™mhÏvæ5CvÜ”ð´ÁÃ:²(� �|6k7ÇÃÃä=�¸Á?Ñ`xÀ°o W»A ³¤î‡e.§½ŽÏg�… 6lߣ\8Ý ÎN8¡�QÕjäN^tÑE™°Ûg éΑ~–}«pÐCŸRá�UÀÀ”'%�’´£ÜÔHã\éãÒyçƒ}7©‘ž½íÖO Üm[¶lY-Ehæ™gF(�ª™ó,À%5ÉñZ…5¯‚ë?Ëuã³n}?óä“ONéØóª¡׿÷MáV©ºð¬–+fƒ�ªÉsÖïd×Åçµúyó—âxƒ¼ÝûòâðÂßü— ÷�@ »áô(wÎuát|ÓüÎ}°�ŽŸ×T°, ¦âû`DJ�§ÔãÂϱÇëÃóÊW¾rB¯³Iáq­Þî\°^ Põóy2'�t’å°N¥’gFÅb! 2޳ÑؾI€¯‚¸ Q›gkýð½ Ú‹ñhj¨?§BÜBnxŸT(éä]¯5©B=Æ"^ÜNR ·ö•e*‚ v;aq)í�®%aèY‹ZÈš‘Ø�¢û‹˜¡<жm¤àZ›ç‘Gi Ör-ÿÃ#›ùçΙ Dk²=B�TH:öÛo¿vƶ©–�xýë__+×�åë}·MŠ6HÑ0^ÊcðàZÿ¬wä[ˆ˜S¥ýtñ® Ž}’(¡lJíš)©jñ¡}Í{/cm!*�Ý»Èà!T­·sàáûJ²Á„­–À‚ÁCþfܵ#è$­;Ø/k½JQ{v[€€G>z«jÑüK_úÒ ›Qé.~‹-6D.<*ÄMê˜Ë�¬ 7â-€…Bß>HÒ¸…™t»j£l@M:6Œr°íU°«¾'@ T”)÷ÄOÐñÛMú,A°Mm»f›aFÈx\åóuî¶žþù{É%^ÑEÁc¾¶­ïiÛ.&Dö{E}x˜q¹@ʃ¹ÃwŠðè¸{Ô)9qÐA «ÙŸFm?0p*�B¾¸H8Äò5–�·Í?ˆòðÌQžàãq¦F(Ú眠ME¯’ |IÌ‚Rœf²òZJ7¦ë2‰â…ó9¸ð <êKÿà?8<çž{îz½gÏñ �n@ëñÇϲŒ°žJE,’¶Å€ˆß1CRÇÖ£š�Õ ² ¥ûìñ[n¹¥eE¶�Pà!H9xÊå~޲jÛD¶ðôõõ¥’Aϯ~õ+ž$ù» ¢¸ï™†m¡dà¡�óy€‡™¤‚ÇÏÓà%„å1hˆ&Ô>–Ú0ÖfÜž¥@$ï/÷ÐqŒÒßÄþ8ÞGmgûe*†\ÛIFð ,�þ3«ã+*Ïý÷ßOŽŒrÙÒêøÍo~S„ÇóV`Z+”çè£�nÑðHpnðØ´åp’À([%²íX9å‘KI?OÕ+ŸU`Eå‘»¶Z•Ê„Ú]#Àã¦È*•í´”<öx䲈VW9å1 ÃÛFA'Õ/½ùÖçÃ10ˆßµù¸ @®éw³¶J„Ž�ujÇuîþ~¢Ä¸D3ÞËE$˜B Â?HK7,µ�Q?ÏSžŸýìgãÿøÇ‡Ž9æ˜ô'?ùÉuèŽ(@2aðxÞ Èà‘{RPcu& �ÙbC´Ôð�IUƒÕ–j�¸Ê“¢¨6‘fà!F>7Fp_pÁ‘ʃ…’8Î�ÇÁ<¨uÖ&Qûd°¿¿ŸÄŠÍ´EŒÏ™6áæ“ ›ëN¢ZúÝd¹¸Û'@6W‰0¼ÛæA´îÎ;ï•’N0R‚|öÛã‘·ìä“OnòTóZæÁãy±I4Ä�sá!_óyßjnøÕW_]tÛ 7mp\Ê``©<€S ¹OYÁ±…д2À”~#¶×wý¨>ø <ÚÎ ‡´k q[g«ÍU2x´_RáQ?Zÿ£�>:wfñŠxTö0ªxÜþ…Àæ]Ì(ˆÂÐÔ ‘-»ÑÓÓ³xt3f_ñŠWŒy o~Á%Ÿð¨R™`¡c×µœJ 2úw\x´ŸY©Ãª<î±Ì³8å9òÈ#;Õdôô_DQ£ ²}EATJ‘’í9F0Þ½ò¹ž'qÛ|êSŸêûå/9ª>´qàa¤8ð0Ò Zö.I$tà-¿þõ¯SrÛ¦C£•Ë”;W�·5Œ�‡±c7nœ}ÃÞ°ðø†òrÈ!«¤j Ž’æ)*i @åÜ9࢓÷‡Y¥@«µª:[1àa¨˳¿þõ¯_Tx:è ®ááá©ÓO?�å&›B#!üו(€‘ÿ-Jy¤®Ýºö“%à‰uÛ€åÑñFÂS‰—` 7©²úܱsŒ— ú�VÑRe0¦k2­sÍ’vá±PµÚZ]äÄfTK’ë*DØ?\X2€ ³Š!úÔ§>ÕIš[5Þs'œp”·Hùä«\Øða<Ï>ûl§:xY-/K¦KÎÌéxC´$.œÕ¨ÔŠ‹Vvÿ®;·Tð�UH×¥C¡ê)à)•ÅmȆ“™¸î\ÊšçãZ¥J<œûbä/Sø­o}+µð�!î ƒGhV�¤ÓÞ"ð(@Ñ!U˜ZSž¤SÉ£ÚDÁkr^Û$À£‚Ò¥‚Z1<“‚{Ë5fÔ6²,?%­"ˆâ¢pqÆTVó³6‘;=Ü¢m¸ÀRÚvûŒ­CÄ÷åÆ>¾08<7»�ÐЇçøã�_³˜•'É"¹ },áÔöhgο rn±áÑ iW›gF®Ô”¥åuo`’ý¸Jdð¸…[5/yÛ|xÔQ:Ej¦à«È€�¥¡r•‡�b`è56}=^K Q€ÂPïºë®ÜᇾÆ]šÒàaH˜Î¹•Î ž$àðlמ0¶û½Mg�kär/^Rg�'.äRÂcVv»à ´D‘¶’öƒü �hÛÉ'Ÿ¼¨ðNUÀ U�øi…WùßD!,"ÞÓ›Ž2šBðY^Û²6O»×Sú¯8xì3³9n›‚*ÓŠ<í¸ñÆ÷%£'Pz%l1”xÔOf³dýµ\ø„ý[S‡á)žh Döšðv¸_ˆ>5}ÞýÃþpò†npËJê›ßüæ>‹Æ^rÃ} ’fäu¡3Þ"ðèæ´©&üo*œ;ÍjÁR@…«Exœr–�'×Z»ö?}Î9çØ„¿Dð <œµäg.ºè¢7ÝtÓ>Á~û':fõ?%+Þj îb¬›�fÊ<ÁD¿‚�2�6ßvÛmyu‘DÂãÍ=Ñ9ï ë€f$¯ Èè8ºU¡Li¿nYñáA¡÷(€€Gî«$äYæÞ[$žý÷ß¿UíˆLð¿þu�º‘I¢Dax쌦“´ƒ cª ÊÁã¹ß�`YdÏ™Ñow<êÍ'¢- ²e¡ ²¤òA­"@.<ÀDŽiV]àõêÕ«|:Œ�Û{Ë–-uƒÈ5› ‡¡>Œ6T=®ò“ýÑBù­Xyó;« žy°¦“"–í LËusË ýa¾òèº[Ú­™ÝÞ…Ã}R¤mÑ•‡!$Š\¥õ’aA³ÎW‘×<Î�³×<pÑNh²¡%ºé9²öŽŽŽö ÝR1<@!e™¹à‚ † ò!¨-4©èÓ*fêõ0ã¿g¦BDþ–8©k›È\8Çe]„Gÿ; |M3s •*�L $×[XyX MÊÖ~×]w‘¼sÎ=3åqáažÒn­@ÀCM}÷Ýw/ªòÐ3•ƒÛôˆÏœðÈ•HoÛ¶-[)<7ÜpC?…B6ÃÊÝaåQ»¦xØÞžËY½”ˆæV“Nðà21Í膦YϦ’ñ{ÀóÕ¯~µ—‚.ðPŠ1guìqÕ°S&Òm£�ƒ§n…-®M„»Én,‡@Ì’*yVšÆßé?&JeJzÚ^D›'˜t˜�\0›£ó™Ï¬•k†Û•qáÑ×ã¬#Uð½�Rà˜E¤ÏvhŸMÖ6¢ý# æÜ½joú&µn³ � [—ÚP¾Û&'’f*aåܶHxP””>«}÷ÝwëÝwß�Å]vÁ"V 1%â3›H†h%v¤î6ʆ‡¤,àÅ”o>sÛ<¼ŽJ4<ŸûÜçÖÄÁ#Õ7x0S RVªßÃB×ÃÃÃó~ãÂcK‰p®(ðPpë O¸“4‰òà¶ÊÞ0<#øéhÕ6[iGïÍ8?òB¸m Ðîä¶¹ðxÁ9nŽ�‚#y7U/Ï.D¯ãà‘Š¤ÃÇ�"µ]Â!ÜBÔv<�`ð¨Pú s®,ȬBÛ,ƒRWå©ÔmÃu Îc«ž2æ¶Eý ÷ƒJíÒK/}ŽU÷‚òüQ.D{Ì”îå`.<„B j6|ìðà×0D¯‡Çg?ûÙJÚsàa•¶8xÌ’@„…ûAÂnP�:J{Ím{ûÛßî+ÏAÄØ¸ÎzÃS�òSÓƒÎÝl�Á§ä5p•ÈVƒðBJ´[ åY �¥�eÈK© A�Ùµ)HÛëßô��–d/ fUÃO¹ðÈ� óàQ!Ÿw¿i™Ò„¿—K6Ë’;$)¡ ´qãÆ”µ�h 1׊·þ{­¹m¦<¬®g¡jÚ`¡¼tÕXUmàÑy¤è(uá±áEXÔ#×,° õYn5h¬x‚ßûJdï�åQ!žýÀ>0�>›W %ì–¹Jä~ÇçA?”¿dˆ O^…¯8J�¾">7xPBÕ“Îq²^ðT£<¨íž8x°ðû°™;‡‹(c{ë±g¥µZ s‡¹ÏÕŒg_ÀÃk©Å¬B±N›Ç òx•#zâ~ƒßÏ>ÖN€"„mãáôy.m F‡°X±ßæÐ¡ì@ÕXUÊó½ï}ooµYÈ*DX›Ácë�ºëý˜U£D»Õ| åfqððÝ©§žZ¨dî…ó�`IvB°³*¤“*D™ŸÀ÷*ÐÓz?%—Ž’UaŸµ‡6ÿ™‚¯}1lÅ϶#¥hÖgSîw< ósèÄÃU¤ß„ÿ ÂÐ@¿VÏÍÎR"Œ¤(£ÿ�¼à‚ Æ"N¥ª î|ž¤ðp|<˜*…ys’tüžû?aÓuHqþLQ?Q׮Й ï¹9O#ÇS}}}«¨ýÕÎÈUšÒ~ý¤‡ ÜÔ÷i}Gen� ëˆÎ�žÕ³CF7›© r]óX¿~ý´ ;÷ŸÉ­ÃÏ>ûl–µF‹GરÊ5é­XÂÞLªB釪�‡6ÏE]4L(ìÚ²eKÛè·qðÏ'Á9GN†+Ïw¾ó�½t�š<�¾><žÏ}K”K[3D+z4örµ0<˜û¾Rx®¿þzùòõÞOá _Ø<´yȤúŽfžxâ Ö PÁbj´\—æ­[·ú;,svhÁ…›åKZòìïv¶2Œ£}$@9nïm²µGƒ¤Œ]DÛ¤ŽÌb�tܶ8+7U¡ìðœˆßøðm#h ÷‘Ê6wå9³¨Õ¸] Y63ì§Ñª³…áqW<«büÃsXE»É…‡v™BvOC?p©hÏôI T "A’ß¼ys—ž»tLCá?v!’[èmÚ´ ·xš�笳Î v ùcÛðTxæœ_ÄgUµy¾öµ¯ùËOâ¶é:l7åq .eÕ¶‰.\-–´¼ýöÛ+íN}âŸèf€¦ ÈÈ%šqáa ~ S È!@þ‚ýöÛo’ÂÌðA5£¯sÁ,Q†çø¹ÌÔ‡Á ËVmÓªãš7=5 Fp³m£> U¿ç=ïTan–øu¨ÆgmW©RxŠçé¼®ªÍ<€#emzøá‡·k»ŠàÁªuçÕɢܶ /¼Ð Œ ¯žo¼‘…€qÓüÙ7Üp“¾Šðh¿ŸGªàçÆ"äí¦NÖ -Qoo/CoŠá¢+Ñ ˆ ¿/*mO‚ETÇ_J¾ å™w¾^•mm¿žöÇ®ë3X <¬`À„O�FAä*Qœ;§¨^^5·�öãOê1€P#¶×ïúÍm#ÚÆ¹JyÊŠæ Ïqá©¥=]ñ”…ª†‡‡›9ðA`¯V D�‘5ØBÀ#ó£m_|±9ÙPž—¾ô¥änóá1³×Ìô¤H�}2ã:ðù0HG(í (Q8˜€¹Cxø}ÿ¬Ác# ˆ¶i¬z§ÂE'ëtÈm«v o$¡uîØ6Žï«_ý*k­2½;e‹wÕa†n¥Ê<ë!õIéø9n_yliF²·zu´rѹ†UaQð`ÕÂsóÍ7ûci€G6ó¥/}ioàQA>âˆ#&Ÿ÷¼çµ¸m PUªD(Lø žÇ{l�«¢v>DR¸uL¸#i¡ê X1}ï»mÀÃ*¨o‚ÔZ¥,Vyâ®ãw¿ûÝ©is�ýgÐUÛf© â} fðÈçŸóyµðèw֞Ȫ`ÎÒ“N~2Õ²;7mÚ4é.£Qoˆø%â™~"ËaÀçªñÛ ¹wÓ¶„J©…�XUÊÃx=^+Œ¼#HôQ„Ç–¥Ç¢ÓN;­À½kTƵküeÛ¹ªé=ì÷ó�:8ç)ÏB(‘€!@À¹&7` B‹ÛÖN?“Àš¾âŠ+&¼Ú­båµÉü~+õO E)¶TsÌ1³j¯®kTžV¹f$â`íÔð¨@3Üy§Á÷ÛzAD'+A³–ïlx¯o¿ýö6mÓ®‚KGí´³xW-™¤L?O?ððZ ûÊsÇw4<€âÚbCDÅÇâÌLuocõ†çúë¯oc•–mgÉû[o½u=}µ“„ ^‚Q!µBD”Nðd{zzÖ’ôP�3%�…¼ÔÕõÔSOùn›¢wÓú¬.ðÄMÃŽ»ŽÀŒ>Ÿ� ‰û:ê³…„ˆãAytlm|p£ cuWž�‡Ì;Ÿÿüç×£<ê°r“ñ}’Õ¬«…ˆËOî»ï¾ýj×�°~ü½ï}ïQ5©S›Úº~]¿vEÛRÀ¸m˜¿=“ ÷t€êÉÇI¾gðà¶é& ³\:�q¿5ˆ¢2ÈTÑúõë ÀóØc�ùðè£b›åÑvm .U[(£ã�d.î(ˆ‚¥ùϪà±Q¦BÕäxΜrÊ)3^‹ƒ¨”•ƒG5ùÚ¡¡!–'Ÿ|r¤RxÌjÐZ "”‡ Æäädû!‡¹Ä*Ï#�<âŸãž˜¡ot‘ü›Q <<Ÿzê©yƒ‡6�nÂ(yÜ6lØà»WÁI|ÓmN~Ô<|‚„çëcDûÈžCª)”G.£¯˜‚ ƒ8›Je¥1+Ï¿üË¿¬!‡ÊóôÓOW Oð_Wb%Rvñ=¯åâú¯y"Ú¬�òô«âigĆÚ<Ûã”GÇÏ„^òÏeö4€æÀSëJßÔÒ[òžÚKÒ�Û6rá…Χ‚Ù7::ÚAªßsÎ9ggp|­O0Û5Ëj'�tÒÀî…cxÎü«LÅ<(—%‰§ö’Ü4888†‹ä$Ûˆ´°Qiâ ¢sÀ$Hrßüæ7{I¯+|x‚~¨Ö`ól0ä¤f ÷•ƒçG?úQëó0¯¨¿¿”ð÷BÁãZ’è\ON÷n-ðlÚ´)õío{{0 haxä9 ¹‹¡pPÅÕ²;»pu…g×OSExhë6ðÐ)Ù‚;QÊ¥¨‡;G'­ôâwè÷£ºÉþ½ü¿jb"nžjÔì[ßúÖY¯Õ‰zï½÷âàùÁ~°ZçÔ†‡>£À ]°J»œ;çºmô‰Ãs†þ×ÿú_Iá)î[!ùIu´ï® é¶Õ�Áhð¨ 6=óÌ3ã¦<á,„Ë öë–ŽÙª×Üðã�?¾•ð«Àš](å þ«Tƒ[„X�1 ] Ês¶w¾ÖÛ¢®}Xy˜¬ÀÏ`”ò\|ñŽê§bönsžyç½;Toå)¶{Ø c5Л$Sj¬X=!¹kÕOцG5¡?!�!<Ô°^¬Rx¾þõ¯¯V{ÌwÓ¤Bc´Ñ‚ÎØH[LˆLy¨øÔ凪¿øÅ/é#Û< xä˜R®(çŽRð`ÿ?*›Ï ¹ÔvIEND®B`‚PK! Ú`×22Ofile-manager-advanced/application/post-smtp-notice/assets/images/attachment.pngnu„[µü¤‰PNG  IHDR;0®¢ pHYs  šœsRGB®ÎégAMA±� üaÇIDATxµ–KrÚ@†»Gò"‹tåáQIUVÀ ì€O(Wy^¹ÊÆEràÁ'Ù&Æ�X>�6©8H“n�lIHXÊ¿�™éÑ7�~ B†:Ÿ™ºâˆ¦@¨ @^Ž´GöLNßi†ß!#]NÍ&¢Ò�“ )�³“²6ôúd «éÏÎ&( u�Ê€ížú2€JÄn–ðƒvõZÒ‘ûǤm×Úo´Iª_~7«a¨”ò츴¯µKûU�v‘zF�E)Jg½¸t`úÐ?´]ÎuÃv½ÛÛT½¶‚¶–jÇ|dDûDÈ{‚¶¢ ,Dìz j!3¯Þ¦Þ�yBùìµézj™xuœ¤�6,­�vìÞ©Pê°öTìklF©w³¨SÐ>ÚÐ ç{•Ì@PÄ€ã1<ÆÉaùÛ©…3SÔK8:.ïcÁQqWÑ)¶Ššô�ÿ‹çAå}àƒ€º¿%«¹ö‘×»@yŃJ9�~ùž w¿Þn£¡r¤à²æ?L Ý”üÚ¥…6¶j´OÐæ&¨ëhBT—ÎÐïP\�hý$P† ‚6¶A})Ò¢ZÛ,JïÁ—ã ,5)”%TE—òq8Ï¥.ú²¶CÝo­¡�8èÊØ{µQ”»ã ,äçÊžTîâ žú33oKñ‘¦Ös¾R5è¶‹/'�@x15î‘%€†°ª22ÿöæ§Åì U€(:È[“L\Çäž)AÎášX­ˆœë‰½Ú-qH‡Ã“òßÌB”¡û ãP¢ºº~Q¤KÇ:T1àû CC™¬ )åFáÕí⎼R÷:Wï`¸æ×""VþqÈ”sMH!ÌÇKÉa–lJ|rH"7�œ¼Õæà؇Y%‡$ $<º[�’C—êkÅ;zïq¾KrH%v°óÙ/þ“þƒwž¼×œ»IEND®B`‚PK!q©Ò\òÎòÎUfile-manager-advanced/application/post-smtp-notice/assets/images/post-smtp-banner.jpgnu„[µü¤ÿØÿàJFIFHHÿÛCÿÛCÿÀôÿÄ ÿĵ}!1AQa"q2�‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ ÿĵw!1AQaq"2�B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ ?üÓ'§¨Àëþ}ñôöͯ§ñ©~ÃN›P�*|‘)l½”N�™ÈtêH4_úÐ µ-1ìdÜ¥¤·bvHFH#ø$Àv{€ëØ€'p2³ß�Ǹà{œàÓ· séÇùúúvã8íÜsÇ9ê@ôý§¯·%À??­0ŸÇŽ?,ú¹Æ}:R3’yüý±ÿê =ˆã§ù<ý{8ÇÀ3@ÿ¨õ÷ç¯òð~¥ÿà€¿çô>¿þ±Ç­ ={øã'¹'ƒŽ{œq@Ã=úçðÏá�Ï‘ø`š?¯ëïÏøóß¿óíGõý[ˆ;ôÇôüûÿ_NÅÀ=?9ú{p_Ê‹€g·C�ÓòõÇ×ß’ ÿ_×åèç“ÓßžÇçùÐ~?â?¦~†€ ãðëÁÏÔzàú}Ií@ ƒþ>ø÷?Ë4\?ÔñúñÀãÓŽzð1@sŸOÇü“ùgù—2rr=úþy=ϸàãµ>½¸^>ÿýnÃLàÿ.��·#±È'¿<�†éøwÁÀÀôì=¨¸ƒÛ§·=;ryÿ9¢ÿ×õýwÝŸ_NøãŸåÛ±èsŽÞ¾Üúþ£Š éê0:ÿŸ|}=³@ϯ^NþŸJQê}ÿúÝzä�?.0Ï~?zã�îs€GNÞ€†çÓ�óõôíÆqÛ¸çŽsÔ�éúÿO_nK€~~ÿZ`)?�~XÿõsŒút¤g$óùûcÿÕ@{ÆOòyúö$qŽ €f€ÿQëïÏ_ä9àýKÿÁÏè}ýc�Z@zö'ñÆOrO÷8â�†{õÏáŸÃŸ#ðÁ4_×ÞŸðç¿çÚ�ëúþ·wé�éù÷þ¾�‹€z~Ÿ�ù'òÏó.dää{õüò{ŸqÁÇj.}{p>¼}ÿú݆(™Áþ];nGc�O~2y; 3Óðïƒ��éØ{Qq·Onzv<äóþsEÿ¯ëúî»>¾�ñÇ?Ë·bÐ(ç½}¸ÿõýGÓÔ`uÿ>øú{f€ÿŸ^¼þ�ý>”£ÔûÿõºõÉ ~4\ažü~8õÇÜçŽ�½ ϧçëéÛŒã·pÏç©Óõþž¾Ü—üýþ´ÀR8ü±ÿêçôéHÎIçóöÇÿª€ ö#ŒŸäóõìHãÍþ£×ßž¿ÈsÁú—ÿ‚ÿŸÐúÿúÇ´€õìO㌞äž9îqÅ ÷ëŸÃ?†?>Gá‚hþ¿¯¼?à?Ï~ÿϵ×õýn ïÓÓóïý};ôüxçéíÁý*.žÝ?OË×_~H/ý_—  žOO~yÿsŸç@ øÿˆþ™ú3�ï?Qëƒéõ'µ.ùüûãÜÿ,Ñp ÿSÇëÇ�N9ëÀÅÎ}?òOåŸæ\ÉÉÈ÷ëùä÷>ãƒŽÔ \úöà}xûÿõ» P!3ƒüºv>ÜŽÇ žüdòvg§áßÓ°ö¢ânžÜôìyÉçüæ‹ÿ_×õÜv}};㎗nÄ QÎ;zûqÿëúŽ('§¨Àëþ}ñôöÍ!ÿ>½yý;ú}(G©÷ÿëuë’@üh¸Ã=øüq뎹Î;zŸN?Ï×Ó·Çnà ž9ÏR§ëý=}¹.ùûýi€¤þ¾ü�_úþ¿/@<žžüóþ8ç?΀ñÿý3ô4g‡^~£×ÓêOj\óù÷ǹþY¢àþ§�׎œs×�Š3œú~?äŸË?̸ ““‘ï×óÉî}Ǩ¹õíÀúð9÷ÿëv Bgùtì}¹ŽA=øÉäì0ÏOþ§aíEÄÝ=¹éØó“ÏùÍþ¿¯ë¸ìúúwÇÿ.݈?@£œvõöãÿ×õPOOQ�×üûãéíšCþ}zóúwôúP�SïÿÖë×$�øÑq†{ñøã×sœ:vô7>œŸ¯§n3ŽÝÀÔ_×õ¸ƒ¿LOÏ¿õôì\Óñ㟧·õü¨¸{t8ý?/\}}ù ¿õý~^€.y==ùçüqÎ�'ãþ#úgèhÎ?¼ýG®§ÔžÔ¸?çóï�sü³EÀ3ýO¯=8ç¯g9ôüÉ?–™p''#߯ç“ÜûŽ;P1sëÛ�õàsïÿÖì1@„ÎòéØûr;‚{ñ“ÉØažŸ‡| NÃÚ‹ˆ=º{sÓ±ç'Ÿóš/ý_×p ÙõôïŽ9þ]»~€G8íëíÇÿ¯ê8 žž£¯ù÷ÇÓÛ4‡üúõçôïéô §ßÿ­×®Iñ¢ã ÷ãñÇ®8ç8tíèn}8ÿ?_NÜg»€.xç=HŸ¯ôõöä¸çïõ¦“øñÇå�ÿW8ϧJ@&rO?Ÿ¶?ýTg±`tÿ'Ÿ¯bGà¸hÿõ¾üõþCžÔ¿üüþ‡×ÿÖ8õ ¯bd÷$ðqÏsŽ(g¿\þü1ùò? Gõý}àÿþ{÷þ}¨þ¿¯ëq~˜þŸŸë騏§ãÇ?OnëùQp öèqú~^¸úûòAëúü½\òz{óÏøãœÿ:OÇüGôÏÐМ~x9ú�\O©=¨pÏçßçùf‹€gúž?^8zqÏ^(Îséøÿ’,ÿ2à&NNG¿_Ï'¹÷v bç×·ëÀçßÿ­Øb� œåÓ±öäv9÷ã'“°Ã=?ø8�‡µ{töç§cÎO?ç4_úþ¿®à³ëéßsü»v ýŽqÛ×Û�ÿ_Ôq@==F_óï�§¶hö�§É}.ß¹¬—(ëÇL³.qŽr{ Oúþ½ˠΞ)ãImìíKxÝT°ÿ–§9$“‚~l“Ÿ¼Hþ ùþ×õØ^¿ÖäOr«=̯›m$Ž3Îß›ï)\Gá܃ºŽ‹úÿ€3ŸÔ´ö³a,dËk.Z)@Èä#ñÃv“€xÀSÀ­ÿP2óõ?�¿<‘ôÇÓê ý~0 þ�ÿÎ{Žý9çœQý[¹çŒ`êsõ<ŒcóÅ×õ÷pÎ1’xã{þCÓœtíš<Àï׌ýN=¹õ£úAý_×ù€Æ8çØnÝÿÏ<Ðÿžâg<ž?,3ŒvéǶzQý_×ÞÕÃ?ŽOcù×'·¸î_×èî=¹ãñç§ùõ­×õý|€:½ù÷ã¨í“øúè^€÷È÷çÿÕíÇ=º×Pþ¿¯ÃúÐLŒôãÓ~]ÿ[ÖŽŸ×êÖŸ×pÉãü:�éœ}=x£òþ¿«õýiÐQž8ϯNsßéß}yè_×ùÿL>çþŸˆü3ùc�õ?ÏcïÐÑý^�ý_×Ü.sëÏ9ú{ŸÏüŠN¾¼ñù~]ÙzvüCÔ?þ½:qéÏ?�J?¯ø &zúž£ØúôÈã¶Hú`êâç?¯_N£ôéôéÜ×ù‡õýZ ŸNàŽœž8ü¸ þ àÑý~:ÿ_˜ œqžÇ¯ãý}·j7ëúþ�qý8ü;vêsœ`þ¿¸À$~dà`ûãòäþõý~¢ŸÃŽHçüsÔ Ñ×·õýuÈÁôÏ�¨õǾ ëGõ`üÃ<Lsß¿'?�¦0=(üÿ¯»ó8éÇóÝÐF}:úô?¯ë~¿Ö�asïÀãÛCéײzÐ?øpÝßü3ù�ÿÖ=èßòþ¿­!?ž öþYã9èqÓŠ?Îß�õý\?¯ëúõ ýOãïÏ$}1ôú‚_‡Ì?§óžã¿Nyç_ÖÀ.yãúœýO#üñGõý}ÁÜ3Œdž8Çÿ�ôç;f�0{õã?S�n@Àýhþ�_×õþ`1Ž9öÛ·ÄsÏ4ÿ縙Ï'�ËŒãºqíž”_×õ÷‡õpÏã�ÓØþ@uÉíî;Ÿ×õú»�nG8üyéþ}AëGõý_ ƒ¯~}øê;dþ>€ú× }ò}ùÿõ{qÏn‡õÔ?¯ëðþ´#=xôÇ—AÿÖõ£§õú‡õ§õÜ2xÿ£úgO^(ü¿¯êÁýZtgŽ3ëÓœ÷úwÁ^z×õþÓϹƧâ? þXäAýGOóØûô4_× _×õ÷ œúóÎ~žçóÿ"€¯¯<~_—_öE�¿õÇ¿¯NœzsÏãÒ�ëþ ž¾§¨ö>½28í’~˜ú¸¹Ïë×Ó¨ý:}:wõþaý_Ö‚gÓ¸#§'Ž?.?¨84_Ž¿×æçg±ëøÿ_AíÚ�Ãúþ¿¤N?ݺ�ßÜç?¯Àî0 ™8>øü¹?…ý_¨§ðã’ùÿõ4uíý]@20}óãê=qï‚zÑýX?0ÏÓ÷ïÉÏãéŒJ??ëîüÀ@GN:qü÷t‘ŸN¾½ëú߯õ X\ûð8öÇÐúuÁÇlž´þ7wÿ þ`õ†Oz7ßü¿¯ëAOç‚}¿–xÎFztâ�ó·ãýWëúþ½C?SøûóÉL}> Ÿ×áóÏéßüç¸ïÓžyÅ×õ° žxÆþ§?SÈÆ?‡õèŸ|�Ÿ~ý^ÜsÛ¡ýuëúü?­ÈÏAž=1ÇåÐõ½héý~¡ýiýw ž?èþ™ÇÓ׊?/ëú°_Ö�ãŒúôç=þ�ðGמ‡õýŸôÁ3îqŸéø�Ã?–9PQÓüö>ý ×õè×õý}Âç>¼óŸ§¹üÿÈ ëëÏ—å×ðí‘G§oÄ=CñïëÓ§œóøô£úÿ‚g¯©ê=�¯LŽ;d�ߦþ®.súõôê?NŸN�Áý˜_×õ ™ôîéÉã�Ë‚ê ×ã¯õù€¹Çìzþ?×Ð{v£pþ¿¯éÓ�÷n w÷9Æëð;ŒGæN¾?.Oá@_×ê)ü8ä�þÇ=@Í{_×P ŒAüøú�\{àž´VÌ3ÀôÇ=ûòsøúcÒ�Ïúû¿0ÓŽœ=ÝägÓ¯¯Cúþ·ëýh>ü=±ô>�pqÛ'­ÿ‡ ÝÿÃ?˜ýa“Þ�÷ÿ/ëúÐBùàŸoåž3‘ž‡8£üíøÿ_ÕÃúþ¿¯PÏÔþ>üòGÓO¨'õø|À3úwÿ9î;ôçžqGõýlçž1€©ÏÔò1�Ï_×ÜÃ8ÆIãŒqïùNqÓ¶hó¿^3õ8öä Ö�éõý_æãŸ`}»wüG<ó@oþ{‰œòxü°xÎ1Û§ÙéGõý_xW þ8=�ä\žÞã¹ý_  ¸öäs�ÇžŸçÔ´_×õòè:÷çߎ£¶Oãè¡ýzgß gߟÿW·öè]Cúþ¿ëA23Ðg�LqùtýoZ:_¨Z]Ã'�ðê?¦qôõâ�Ëúþ¬×õ§AFxã>½9ϧ|õç¡ý_çý0Lûœgú~#ðÏåŽ@Ôtÿ=�¿CGõýzõý_p¹Ï¯<çéî?ò(:úóÇåùuü;dQéÛñPü{úôéǧ<þ=(þ¿à€™ëêz�cëÓ#ŽÙ wé€?«‹œþ½}:�Ó§Ó§p_æ×õýh&};‚:rxãòàƒúƒƒGõøëý~`.qÆ{¿�õôݨÜ?¯ëúAÇôãðíÛ¨ýÎqƒúüNã‘ù“�ƒï�Ë“øP×õúŠ9 ŸñÏP3G^ß×õÔ#Ð>>£×ø'­Õƒó ð=1Ï~üœþ>˜Àô£óþ¾ïÌtã§Ïw@9ôëëÐþ¿­úÿZ…Ï¿�l}§\vÉë@ÿáÃwðÏæÿXd÷£}ÿËúþ´„þx'ÛùgŒäg¡ÇN(ÿ;~?×õpþ¿¯ëÔ3õ?�¿<‘ôÇÓê ý~0 þ�ÿÎ{Žý9çœQý[¹çŒ`êsõ<ŒcóÅ×õ÷pÎ1’xã{þCÓœtíš<Àï׌ýN=¹õ£úAý_×ù€Æ8çØnÝÿÏ<Ðÿžâg<ž?,3ŒvéǶzQý_×ÞÕÃ?ŽOcù×'·¸î_×èî=¹ãñç§ùõ­×õý|€:½ù÷ã¨í“øúè^€÷È÷çÿÕíÇ=º×Pþ¿¯ÃúÐLŒôãÓ~]ÿ[ÖŽŸ×êÖŸ×pÉãü:�éœ}=x£òþ¿«õýiÐQž8ϯNsßéß}yè_×ùÿL>çþŸˆü3ùc�õ?ÏcïÐÑý^�ý_×Ü.sëÏ9ú{ŸÏüŠN¾¼ñù~]ÙzvüCÔ?þ½:qéÏ?�J?¯ø &zúž£ØúôÈã¶Hú`êâç?¯_N£ôéôéÜ×ù‡õýZ ŸNàŽœž8ü¸ þ àÑý~:ÿ_˜ œqžÇ¯ãý}·j7ëúþ�qý8ü;vêsœ`þ¿¸À$~dà`ûãòäþõý~¢ŸÃŽHçüsÔ Ñ×·õýuÈÁôÏ�¨õǾ ëGõ`üÃ<Lsß¿'?�¦0=(üÿ¯»ó8éÇóÝÐF}:úô?¯ë~¿Ö�asïÀãÛCéײzÐ?øpÝßü3ù�ÿÖ=èßòþ¿­!?ž öþYã9èqÓŠ?Îß�õý\?¯ëúõ ýOãïÏ$}1ôú‚_‡Ì?§óžã¿Nyç_ÖÀ.yãúœýO#üñGõý}ÁÜ3Œdž8Çÿ�ôç;f�0{õã?S�n@Àýhþ�_×õþ`1Ž9öÛ·ÄsÏ4ÿ縙Ï'�ËŒãºqíž”_×õ÷‡õpÏã�ÓØþ@uÉíî;Ÿ×õú»�nG8üyéþ}AëGõý_ ƒ¯~}øê;dþ>€ú× }ò}ùÿõ{qÏn‡õÔ?¯ëðþ´#=xôÇ—AÿÖõ£§õú‡õ§õÜ2xÿ£úgO^(ü¿¯êÁýZtgŽ3ëÓœ÷úwÁ^z×õþÓϹƧâ? þXäAýGOóØûô4_× _×õ÷ œúóÎ~žçóÿ"€¯¯<~_—_öE�¿õÇ¿¯NœzsÏãÒ�ëþ ž¾§¨ö>½28í’~˜ú¸¹Ïë×Ó¨ý:}:wõþaý_Ö‚gÓ¸#§'Ž?.?¨84_Ž¿×æçg±ëøÿ_AíÚ�Ãúþ¿¤N?ݺ�ßÜç?¯Àî0 ™8>øü¹?…ý_¨§ðã’ùÿõ4uíý]@20}óãê=qï‚zÑýX?0ÏÓ÷ïÉÏãéŒJ??ëîüÀ@GN:qü÷t‘ŸN¾½ëú߯õ Xë®.bŽ!gf¡ �åb �‘œœ †ÆKá@+»þ¿¯é� Ÿü}Áÿ]'Ž{sÏ#_aíý_ˆ?ÌmÙÿJŸÓÌn½‘ÇéÓØÐ¶Cù[ܪ+A:‰-eÈt#%rH ½pG^=3ŒŒÐÄcê:{Y°’3æÚKÌ2œ ‘ÈÀ ¼ó�¸~ ;ÿ_×õÔ}?ëúü Â}ú矯QïŽ3íŒô\?¯ëú°€Ÿ¯_§}z~>ÜÑpþ¿¤ÿ$ã¾^.øäëúþ¿ÈRHèGNß^½1Á÷¨ä&Gyÿ9éÔg<õÈ È#¿:zõüq�2(¸_åý}á»×ŸSê>ÄgúþT_×õèÇóþ¿¯øq3Áúúäçðǧ^}³ž ˆPqÆéÈöÈÿõb‹÷ü?Qrqê8ýIÿ9èq�ŽÀ¿¯ëÌ:úÇ·Ný8ÁíÀŽGqŽÞßÓÓŽã­çú†{ýéÇçúsÆ(gߦ;tþ¢}zzPžž¿çœ÷ãÜ~Y ?¯ ãŸéƒõ÷ûó‘ƒEÀ\ŸÇŒ^¹?×?ÌŠúôÛóüû0=® A#¯oÇÿ­ž{~>À_×ôÃèOOà ûž;vãØpù\3×ßߌÓ·å@9ë�Çß;ŸnŸ•ÿ ïÇ©íéÀõàÔ úþº‡§_ÇשïÏÓéœQq‹ÏÐg©íÇø=�~�9Éq ÛôÏOÿV1þ8ûÔ\×õ`ùðzöô>ØüqEÿ¯ëúô€ý9õëÈüáéØq@ ž}=ϯo|ôuõö?¯ëþ¨Ð/~½Nôý þ¿«õýHwè>žøÙÇõÈÇ4_úþ¾ð þ½?!ôwã8ëÅ×õÿ×õýy�>ýsÏר÷ÇöÆz.×õýX@Oׯӎ>½?nh¸_Ò ÿ’qß?¯?—|rõý_ä)$t#§o¯^˜àûŽÔ ò#޼ÿœôê3ž?úäÐdߎ�=zþ8È\?¯òþ¾ðÝëÏ©õŸb3Žý*?¯ëúôcùÿ_×ü8™àý}rsøcÓ¯>ÙÏÄ(8ãtä{dú±Eû�þ¨¹8õ~¤ÿœô8ÀÇ`_×õæ?ýcŽ‡Û§~œ`öà Ç#¸ÇooééÇqÖ€óýC=þ„tã�sý9ã 3ïÓºÿQ>½=(ÏO_óÎ{ñî?,Ð×�qÏôÁúûŽ}ùÈÁ¢à.OãÆ¯\ŸëŸæEýz íùþ}�¿×‹€ ‘×·ãÿÖÏ=¿`?¯ëúaô'§á�}Ï»qì8|®ëïïÆ éÛò õÇãïŽ�Ï·OÊ€ÿ† ÷ã�Ôöôàzðjý]CÓ¯ãëÔ÷çéôÎ(¸Åçè3ÔöãŽüÇ¿Nœä¸„íúg§ÿ«ÿ}ê.?ëú°üø={zlþ8¢ÿ×õýz À~œúõä~ðôì8 Ï>žç×·¾z:úû×õÿ?Ôh?—¿^ƒ§ú~†‹ÿ_Õƒúþ¿¤;ôO|lãúäcš/ý_x^Ÿ�ú;ñœuâ�ëúÿ‡ëúþ¼ÀŸ~¹çëÔ{ãŒûc½ëúþ¬ 'ë×éÇ^Ÿ�·4\?¯éÉ8ïŸ×ŸË¾9úþ¿¯ò’:ӷׯLp}Çjù ‘Ç^ÎzuÏýrè2ïÇNž½d Š.×ù_xnõçÔúƒÏ±Ç~¿•×õýz1üÿ¯ëþLð~¾¹9ü1éןlç‚âq‚:r=²?ýX¢ýÇÿÔ\œzŽ?RÎz`c°/ëúóŸþ±ÇCíÓ¿N0{p„ã‘Üc··ôôã¸ë@yþ¡žÿB:qǹþœñŠ÷éŽÝÿ¨Ÿ^ƒž”g§¯ùç=ø÷–hëÈ8çú`ý}Ç>üä`Ñp'ñã×®OõÏó"€þ½öüÿ>ÇŒ_ëƒEÀPHëÛñÿëgžß�°×õý0úÓðÈ>çŽÝ¸ö>W õ÷÷ã�ôíùPzãñ÷ÇNçÛ§å@Ã{ñÇê{zp=xµþ¿®¡é×ñõê{óôúg\bóôê{qÇ~cß§Nr\Bvý3ÓÿÕŒŽ>õõýXþ|½½¶ÿQëúþ½`¿N}zò?øzvPçŸOsëÛß=}}�ëúÿ‡ê4Ë߯AÓƒý?CEÿ¯êÁý_Òú§¾¶qýr1Íþ¿¯¼?¯OÈ}øÎ:ñGõýÇõý^`O¿\óõê=ñÆ}±�Þ‹‡õýVõëôã�¯OÇÛš.×ôƒ?äœwÏëÏåß�ý_×ù IéÛëצ8>ãµü„Èã¯?ç=:Œç�þ¹ôwã§O^¿Ž2Eëü¿¯¼7zóê}AçØŒã¿_Ê�ëúþ½þ×õÿ&x?_\œþôë϶sÁq 8Á9žÙþ¬Q~ãÿ‡ê.N=G©?ç=01Øõýy‡OÿXã¡öéß§=¸BqÈî1ÛÛúzqÜu <ÿPÏ¡8ãÜÿNxÅ ûôÇnƒÿÔO¯AÏJ3Ó×üóžü{�Ë4õäsý0~¾ãŸ~r0h¸ “øñ�ë×'úçù‘@^‚{~ŸcƯõÁ¢à($uíøÿõ³ÏoÇØëúþ˜} éødsÇnÜ{+†zûûñ‚@úvü¨=qøûã§síÓò ?áƒ=øãõ=½8¼Ú�_×Pôëøúõ=ùú}3ƒŠ.1yú õ=¸ã¿±ïÓ§9.!;~™éÿêÆ?Çz‹�úþ¬ÿ>^Þ‡ÛŽ(¿õý^‚°ß§>½y€ü=;(sϧ¹õíïž€Ž¾¾ÇõýÃ�õåï× éÁþŸ¡¢ÿ×õ`þ¿¯éýÓßÛ8þ¹æ‹ÿ_×ޟקä>ƒŽügx£úþ¿áÃúþ¿¯0'ß®yúõøã>ØÀïEÃúþ¿« úõúqÇ×§ãíÍëúAŸòN;çõçòïŽ@þ¿¯ëü…$Ž„tíõëÓqÚ�~Bdqןóž�FsÇÿ\€ú ‚;ñÓ§¯_Ç"‹‡õþ_×Þ½yõ> óìFq߯åGõý^Œ?ëúÿ‡<¯®N zuçÛ9ฅ`Žœ�Ïl�ÿV(¿qÿÃõ'£�ÔŸóž‡ì úþ¼Ã§ÿ¬qÐûtïÓŒÜ!8äwííý=8î:Шg¿ÐŽœqî§„ôü2¹ã·n=‡•Ã=}ýøÁ };~Tƒž¸ü}ñÓ¹öéùPðÁžüqúžÞœ^í@¿¯ë¨zuü}zžüý>™ÁżýzžÜq߃Ø÷éÓœ—�¿Lôÿõcã�½EÇýVŸ¯oCí€?Ç_úþ¿¯AXïÓŸ^¼�À~�‡¹çÓÜúö÷Ï@G__cúþ¿áÇú�ò÷ëÐtàÿOÐÑëú°_×ô‡~ƒéï�íœ\ŒsEÿ¯ëïÏëÓòAÇ~3޼Qý_ðáý_טï×<ýz�|qŸl`w¢áý_Õ„ýzý8ãëÓñö拇õý Ïù'óúóùwÇ _×õþB’GB:vúõ鎸í@¿!28ëÏùÏN£9ãÿ®@}AøéÓׯãŒ�‘EÃúÿ/ëï Þ¼úŸPyö#8ï×ò£úþ¿¯F?ŸõýÉž××'?†=:óíœð\BƒŽ0GN@ç¶Gÿ«_¸ÿáú‹“�QÇêOùÏCŒ vý^aÓÿÖ8è}ºwéÆnœr;Œvöþžœwh?Ô3ßèGN8÷?Óž1@Ã>ý1Û ÿõëÐsÒ€ ôõÿ<ç¿ãòÍýyÿL¯¸çßœŒ.äþ<`zõÉþ¹þdP× žßŸçØñ�ëýph¸ {~?ýlóÛñöúþ¿¦Bz~ÜñÛ·ÀÊáž¾þü`�>�¿*AÏ\~>øéÜûtü¨ø`Ï~8ýOoN¯ö _×õÔ=:þ>½O~~ŸLà⋌^~ƒ=On8ïÁì{ôéÎKˆNߦzú±�ñÇÞ¢ãþ¿«?σ׷¡öÀãŠ/ý_× ¬÷éϯ^Gà?NÊÞÿÔ3Œ{çÿ®1éP˜ÿ¯ëúÿ2Õ—ü}Aß÷Š1ëÏùô<÷¦öÿúþ¿Ì³sgtóÌË 23³)ܸ ôêAô÷� éÐ/ùþÁwÿ„s@X;z?óÿëÏA@_ðâäõïÓÿלúâ€òþ¼½?×9'Ûüÿ>9 :üÃ?ýp3ÓñÿëŒzP úþ¿¯ÔOÿV=ÏàyühëîõòþºŠO^ãëßòßN0FyCù�ìqü¿”sÓüôïùý:�ÅÿðÔ:õÿ´ üÿ­?¯Ô3êúüvãüõ ?¯ë° ãñï�§_oóÆyúþµ=ÿ/ðÏLcð ?«~×üAǧåÔ†ý\P×õØø8üxÿ>ÝMò¸™ýN:þžþùíè(Çæ€^¹ÿ#לóßú�ý_§â¯øp>¸ãëÇJ¸_oÄñŽŸ^zŠ·õý}àOëÓé×ßž}¸ë@]_ë`ϧ×ù~dgú÷4õý_ˆ™ç×ü=¹ü¨ëúõ‘ßôÇOOzóþ»ÿÉž:z�óþ?OÄëúü?Ï?áÿ×þYÿõä.@#éêztí×½ ÇBzzãß=ztüúÍ`íéüÿÏÿ¯=ýË“׿Oÿ^sëŠËúòô ÿ\äŸoóüøæ€ëó ÿõÀÏOÇÿ®1é@/ëúþ¿Q?ýXõÿ?�çñ ?¯»×Ëúê)={�¯È{}8Áäåþ±Çòü:PÏOóÓ¿çôêüÃPë×üñÀü‡ùë@}½ý3žxôÇ×ô ?«€ôþYþ™ÿŠúþ·þ»?×>ÃÓ=O¯=>¹ ?ëúÿ ÏoðãßÛ§8öP×éýhç�óÔ}(àþ|ÿžç®xúÐ/óþ´þ¿PÏ©ÿëñÛ�óÖ€þ¿®Âƒ�Ǿ>�}¿ÏäëúÔL÷ü¿Ã=1�€þ­ø_ðŸ—Qþÿõq@_×`?àxãñãüûu4Êâgõ8ëú{ûç·  ?š}zçü�^sÏêõý~Ÿˆ~¿áÀúã�¯(à}}¿Æ:}yüyê(ß×õ÷€=?¯O§_~yöã­ýuý­ƒ>Ÿ_åù‘ŸëÜÐ×õý~"dŸ_ðöçò ?¯ëÔöÝöqøïâ?…~'øß£ü'ñ½çÂ/Á Ö¿ñ èw6¾µ‚}FÛI2Ùjw‹o°¶º…嬟ö/ö�Ò…ÄSjbÒ ZùìGðÖ;ÁpÞ#<Ëiçù‡µxL£ëTå�ª¨ÓU*Iáá)N”y%VTãQÊ1¦å)(¿JžOšVÀWÍ)`1RËðÎ ¶5RšÃÁÔ“Œcí$”fÛRºƒ“ŠNRQŠmxžxéê?Ïøý?¡<ßëúü?Ï?áÿ×þYÿõä.@#éêztí×½ ÇBzzãß=ztüúÍ`íéüÿÏÿ¯=ýË“׿Oÿ^sëŠËúòô ÿ\äŸoóüøæ€ëó ÿõÀÏOÇÿ®1é@/ëúþ¿Q?ýXõÿ?�çñ ?¯»×Ëúê)={�¯È{}8Áäåþ±Çòü:PÏOóÓ¿çôêüÃPë×üñÀü‡ùë@}½ý3žxôÇ×ô ?«€ôþYþ™ÿŠúþ·þ»?×>ÃÓ=O¯=>¹ ?ëúÿ ÏoðãßÛ§8öP×éýhç�óÔ}(àþ|ÿžç®xúÐ/óþ´þ¿PÏ©ÿëñÛ�óÖ€þ¿®Âƒ�Ǿ>�}¿ÏäëúÔL÷ü¿Ã=1�€þ­ø_ðŸ—Qþÿõq@_×`?àxãñãüûu4Êâgõ8ëú{ûç·  ?š}zçü�^sÏêõý~Ÿˆ~¿áÀúã�¯(à}}¿Æ:}yüyê(ß×õ÷€=?¯O§_~yöã­ýuý­ƒ>Ÿ_åù‘ŸëÜÐ×õý~"dŸ_ðöçò ?¯ëÔvGÓ}==èÏúïÿ&xéê?Ïøý??¯ëð ÿ<ÿ‡ÿ_ùdPýÿ×�¹¾:à�§©éÓ·^ôƒ éë�|õéÓóèG4ƒ·§óÿ?þ¼ôõÿ.O^ý?ýyÏ®(/ëËÐ3ýs’}¿Ïó㚯Ì3ÿ×=?þ¸Ç¥¿¯ëúýDÿõc×üþŸÆ€þ¾ï_/먤õî>½ÿ!íôãg�?—øÇËðé@=?ÏNÿŸÓ¨Pð C¯_óÇòç­ö÷ôÎyãÓ_Ò€þ®Óùgúdcür(ëúßúìÿ\ûLõ>¼ôúæ€ü¯ëüƒ=¿Ã�nœãØq@_§õ ž?ÏQô €gùóþ{ž¹ãë@¿ÏúÓúýC>§ÿ¯Çn?ÏZúþ» ?øúuöÿ¼t ;�õöüOéõçñ稠;_×Þôþ½>�}ùçÛŽ´õ×õþ¶ ú}—æF¯s@_×õø‰‘þ}ÃÛŸÊ€þ¿¯QÙÿLqôô÷ ??ë¿ü8™ã§¨ÿ?ãôü@þ¿¯À3üóþýå‘@o÷ÿ^Bäøë‚>ž§§NÝ{Ð t'§®=ó×§OÏ¡ÐÞŸÏüÿúóÐP×ü8¹={ôÿõç>¸ <¿¯/@ÏõÎIöÿ?ÏŽh¿0Ïÿ\ ôüúã”þ¿¯ëõÿÕ�_óøúû½|¿®¢“׸ú÷ü‡·ÓŒž@þ_à{/Ã¥ôÿ=;þN q@Áü5½ÏÈž´gÛßÓ9ç�L}Jú¸OåŸé‘�ñÈ ?¯ëë°ýsì=3ÔúóÓëšñþ¿¯ò öÿ=ýºs�aÅý~ŸÖ�þxÿ=GÒ�þŸçÏùîzç�­ÿ?ëOëõ úŸþ¿¸ÿ=hëúì(8ü{ãé×Ûüñž@þ¿­DÏËü3Óü(ê߇õÿPqéùuáŸÿWõývþŽ??Ï·S@|®&SŽ¿§¿¾{z ñù ×®Èõç<÷þ _×éø‡ëþ®8úñÒ€î×Ûñ„s@X;z?óÿëÏA@_ðâäõïÓÿלúâ€òþ¼½?×9'Ûüÿ>9 :üÃ?ýp3ÓñÿëŒzP úþ¿¯ÔÜÎz~NGëïëëY&×õý2Õ‘ÿJƒœ~õyüþ¹Ï^?õOoëóõúù^£î¦�n&iYHÀ`v=ºŽÝè@•ÿ­H>Ñqÿ=åçÖF'§=û÷÷íŠzy½7þ¿®Æ„%¡ˆÞ^Ï"B¼¢yŒVì¡X©mÄ`.îs…É©ò·õýz ßåýHæ5 FKù·¿‚V8³•EÏ7Ÿâ>ØÆVñG±9ñþ{ö¿*?¯ëúØ>[ÿV ôéŽùã>£ŸlúvÇJÎ9Ç<óÀãòþ]ºt¢ãþ¿ËúBuÏ^¸üú~úôã’à…Ïp8=Àý=2<Ñpóþ¿¯Ì3Çn?nàõç�@oý_×`9üýý9öë“‚hþ¿¯ë¨Ãÿ_×È3ëýGsÆsøöüh3ÁÎz}9ϸëÆGÌÑp¶¿×õý1sëÁúÿ/N}…×õÐ?¯ëúØLôöóߟώÜgóEÂÂç9ýqŸË�ò=1LKúóþ¿®Áž¹íÇõǯsߟaœ!ÿ^�?­~ñ2õüú}?�éì\?¯!søãØvÏSÛ?ýj.çý ÏOÏ#ùcóýaÁýoýWOëúþ´ œwéè9çô÷ýzâ‹…¿­¯ø;†}®xì{ã¹Ï®y ?¯—é·üüLt>üŸ^½{Pðÿ?éŠÓ8#ü�ë�xÏÿ¨¿õý[ Ûzõ:�ŸÇñÇs‘Cõÿ ú Ÿ\ŸËÓEÃú_×ÈLã“ùøc¯õéùÐ×üÏN öéïŒûûwÏÒ˜XP8íŽ�?¯ÝÿëŠ_×õý�_ÕÃ<õà�ooÃõþBŸõý^¡ýiý_xŸÃ‘ëß§Ùô펔3œsŽyç�Çåü»téEÇý—ô„ëž½qùôüõéÇ%Á ž8àp{�úzdþy¢áçý_˜gŽþÜ~>ÜÀëÏ€ßúþ¿®Àsùûúsí×'Ñý_×Pÿ‡þ¿¯�g×úŽçŒçñíøÐgƒœôúsŸq׌Žÿ™¢ám¯ëúbç׃õþ^œû ?¯ë _×õ°™éì9ç¿?Ÿ¸Î2 æ‹……Îsúã?—äzb˜—õçý]ƒ=sÛ�ë�^ç¿>Ã8Cþ½:Zýâdëùôú!ÓØ¸^Bçñǰ힧¶úÔ\?ÏúAžŸžGòÇæ?úÃúßúþ®Ÿ×õýh8ïÓÐsÎ1éïúõÅ Zÿ_ðw úÿ\ñØ÷ÇsŸ\ó@_/Óoøø˜è}ù>½zö ?áþÓ7¦pGù× ñŸÿQëúþ¶¶õê ÿ�ãŽç"†?ëþô>¸ÿ?—¦8‹‡ô¿¯�™Ç'òðÇ_ëÓó ?¯ø!žœíÓß÷ö0° qÛ:_»ÿ׿¯ëúÿ þ¿«†yëÁÞ߇ëü…?ëúþ½CúÓúþ¾ðÿ?‡#׿NxçëJáý�ï�ðçëׯOZòÿƒø Èç9ÆO¦xüsŽ£ë@oýj××éÏýýÇLPçý]ƒƒÓóÏO±Íý_×Qrgœuü³éïœôäPÄäwÇùïØvü¨þ¿¯ë`ùoýX3Ó¦;çŒúŽ}³éÛ(g8çóÏ�ËùvéÒ‹�úÿ/é ×=zãóéøëÓŽK‚ã¯ÿ3EÂÚÿ_×ôÅϯëü½9ö_×@þ¿¯ëa3ÓØsÏ~>;qœdÍ œçõÆ.?ÈôÅ1/ëÏúþ»zç·×½Ï~}†p‡ýztþµûÄÈ?×óéôþC§±pþ¼…Ïã�aÛ=Olÿõ¨¸Ÿôƒ=?<�å�Ìõ‡õ¿õý\=?¯ëúÐýý”à–Ÿ¶ísý›¬ø3áûøáÆ ‹:|Tø nü)á ›6ågÐ!6Wž"ñjÎE·¹ðÎ…©éBå<›ýSO æ¯æ4×úlÑA#$·Úß�¯Y†ÇÊ4êP¤¹ãW2ÇЧƒÀåx':ØÚ•—±§_ú/Ã_ð™Æ>j­J5pùe˜gÜAšÁÃ$áüº–µq•°ñr�Iµ &s­‰ÆâiááO÷“§ô§ü‡Ãúügö£Ÿ]{ñÿÃ�";ë}"6·ðþƒciâ¯ŦxWÂö;Q,¼? Ú°´¶ÛRêãTºUžìÃ�ôjɳ܈œ1œñŽ>žgÆ™þi,^}_ R¼ò¼¿ý“S �äPÄ?iO)Ê£VT–"¢Ž/6ÆÏœc¿Úq²§K»Å|Ë-Äðæi—pþx.Êð¾Ã+¥Zã�Å¿m‡�|×4•%Ë<~>Tã7J-ÐÀa£‡Ëð¿¹Ã)ÏøLøyà�oâo�üðÛÃdÿ„�â‹ü3àÿh\M?ûoÅšÕ–ƒ¥ Û¥Žv·´7Ú…¿Ún2˜!ó$HT)ÿTs<Ô幆k‹çú®Y�Åãñ>Î<õ>¯ƒ¡S[ÙÂñS©ìéË’<Ñæ—*æW?‘0¸j˜¼V G—Úâqpô¹ß,}¥j‘§gghóI]ÙÙkcöÁo°1äüçþª=ϯý‹\ýx¯Äâcü8þl÷ÿ qÿæ£î¿âñ/ýKÿð®_ü¤ó‰ðDŸø(/Ãoßø™>èìô»wº½ÓþøÃLñ'ˆ¼ˆön6¹M']×.2ØK OÔõv¹†ÑÀÉõrŸ|5ÍqTð�6Äå“«% us\\.™ííqqu°øxé­LMJ4•Õê#“áïá)J²ÂRÅF ÉÇ^5jÙ-)(T¨ú(ÒŒäúEŸ“—v·Z}ÕÍ�ý´öW¶WZÞY]C%½Õ¥Ý¼�ŭͼʒÁq¨ñMª’Å"²HªÀãöHN! ”å”êF3…HIJ„’qœeã(É5(É6šÕ(Ê2q’q”[Œ£%gfšvi§£[§¦–+ç§ût÷Æ}ý»çéV+ê±Ó§õû¿ýqKúþ¿¯òëú¸gž¼ííø~¿ÈSþ¿¯ëÔ?­?¯ëï4tÝ#VÖe’ KÔuYâC,�é¶W7ÒÇà†I#µŽVH˲¦÷P��W;Ž5kР”«Ö¥F2vN­HÓ‹v½“›I»+Ù=µµŠ…9ÔmS„æÒ»Q‹“KMZKEw½ŠRG,ËñÉo<2<3C*4sE$lÉ$RÆà:Hެ®Œ¡‘”©VŠJQR‹RŒ’q”ZjI«©)-kf´¶Ä´Óiégfš³Nû5¥šÛÈ‹‘ÎsŒŸLñøçGÖ˜oýj~�üÿ‚I~Ö~i?µð»àoÿÛYÞøKÄß¼uÿ>+²Ô [› ÍM±ÑüG­%ž¡jÂïNºÕ´Í.ßT³)}¦=圑Ìÿ“q��æu²jÚüA™ág:xÜ' åÿÚ2ÁΜ¹*S¯V¥|-R”ýʰ£V´¨ÔN�U §õùwçy†é}K.ÂÖQ• Ù–'êÊ´d¯SŒaV§,–±”á8µ(7™Ê~ÑðK¿ÚÇölðçůh^ øƒð‹M[gÕ~'ü!ñ¶•ã_ i‹{}k¦ÚI ¦“â8mn/om`þÑþÀm2'ž$¹¼…äU=œ/âçñVcO%Ãb1ùnuUÍQÊs¬l2·³§:³Tä�l,§tç/eõ•VJ-Æœ¬cšðvw”᥎«OŠÀÁ.|^ EsJ0‹’÷*¨¹I.gȯ¬•õì|/ÿ‹ý®·Oõ9Tú×¶´°Ê­¤ë*mF“ç”RÛz< �â2å™Ðú�j2Á¬liCž'ÙJ—¶Qö\šUpÑSrW–‰Üü¿ìNG|žý‡oÊ¿Zþ¿¯ëcãþ[ÿV ôéŽùã>£ŸlúvÇJ~ž|Dÿ‚Gþ× ~ ^|tñü_ ¼7á½;À–¿oü3¨xí ñõ¶—uak}&”Þ—KG“ÄV&í,¯´¸.äòuæµK‰ )oɲ¿x/8Ï©ðö[,ÛŠ«˜Ï-§‹§—9eÓ« “¦«}mViajr:”ëJ š›ŒùϰÅp>w‚Ëå˜â~§J”pÑÅJŒ±6Ĩ8Æ\žÅÃZ±¿, ›´¯Ùë7ßðBßÛ[LŸìº®·û>éW~ZJÖz�ÅëkK¤IP¼3hjÛHÎ�°J³�“ãSúBphóѡĵ¡v”éd“œ[ÚQÄ5§UºêŽéxsÄv�\®²n3Ç(É/4éþ?s{ÿ+ýµôÕ¶mCZýŸ,ö¹³kÏ‹°Ú-Ý»`¬öÆm 1<,–-èw‘JŸÒ€ª¹*T8–§³—-EO$”Ü&´qŸ.!òËM¥¨KÃŽ …œêåqæW�6:×]oI]y­þgœx£þùûZø?âÂ߇Þ£ðb[âþ‘ñZðv«Ĩ›Ã2Yü6ƒÃW>!]C[}(-g–/i¿Ù1F—ù£½â6àIêa…š!‚Ì›��B·¼ºH^­ÌéPâZª2埳Ée>I-ã'C´—Tõ³Øë—‡A sTÊà乣͎Qº{5zJëÏf|ÁûKÁ3l/ÙKƒâņÖ÷ Õí#Ÿâ�üE£øËÃ:{_Ë6M«¾•tÚ¶‹kw=͵½¦¥¬iVUåÕÌ–—³ÝJ�Ÿ­áOø#ŒqŸÙ™Fk(f–›Ž[˜a«àqu5)TTh*5çÆr�*ªV„#)Μbœ�6á÷%£õ¬fK ¹T±Xj´ñ£Íe~Gí)¦ÚQ�HF“II·cà\ðsžŸNsî:ñ‘ßó5ú5Ïš¶¿×õý1sëÁúÿ/N}…×õÐ?¯ëúØLôöóߟώÜgóEÂÂç9ýqŸË�ò=1LKúóþ¿®Áž¹íÇõǯsߟaœ!ÿ^�?­~ñ2õüú}?�éì\?¯!søãØvÏSÛ?ýj.çý ÏOÏ#ùcóýaÁýoýWOëúþ´ œwéè9çô÷ýzâ‹…¿­¯ø;†}®xì{ã¹Ï®y ?¯—é·üüLt>üŸ^½{Pðÿ?éŠÓ8#ü�ë�xÏÿ¨¿õý[ Ûzõ:�ŸÇñÇs‘Cõÿ ú Ÿ\ŸËÓEÃú_×ÈLã“ùøc¯õéùÐ×üÏN öéïŒûûwÏÒ˜XP8íŽ�?¯ÝÿëŠ_×õý�_ÕÃ<õà�ooÃõþBŸõý^¡ýiý_xŸÃ‘ëß§Ùô펔3œsŽyç�Çåü»téEÇý—ô„ëž½qùôüõéÇ%Á ž8àp{�úzdþy¢áçý_˜gŽþÜ~>ÜÀëÏ€ßúþ¿®Àsùûúsí×'Ñý_×Pÿ‡þ¿¯�g×úŽçŒçñíøÐgƒœôúsŸq׌Žÿ™¢ám¯ëúbç׃õþ^œû ?¯ë _×õ°™éì9ç¿?Ÿ¸Î2 æ‹……Îsúã?—äzb˜—õçý]ƒ=sÛ�ë�^ç¿>Ã8Cþ½:Zýâdëùôú!ÓØ¸^Bçñǰ힧¶úÔ\?ÏúAžŸžGòÇæ?úÃúßúþ®Ÿ×õýh8ïÓÐsÎ1éïúõÅ Zÿ_ðw úÿ\ñØ÷ÇsŸ\ó@_/Óoøø˜è}ù>½zö ?áþÓ7¦pGù× ñŸÿQëúþ¶¶õê ÿ�ãŽç"†?ëþô>¸ÿ?—¦8‹‡ô¿¯�™Ç'òðÇ_ëÓó ?¯ø!žœíÓß÷ö0° qÛ:_»ÿ׿¯ëúÿ þ¿«†yëÁÞ߇ëü…?ëúþ½CúÓúþ¾ðÿ?‡#׿NxçëJáý�ï�ðçëׯOZòÿƒø Èç9ÆO¦xüsŽ£ë@oýj××éÏýýÇLPçý]ƒƒÓóÏO±Íý_×Qrgœuü³éïœôäPÄäwÇùïØvü¨þ¿¯ë`ùoýX3Ó¦;çŒúŽ}³éÛ(g8çóÏ�ËùvéÒ‹�úÿ/é ×=zãóéøëÓŽK‚ã¯ÿ3EÂÚÿ_×ôÅϯëü½9ö_×@þ¿¯ëa3ÓØsÏ~>;qœdÍ œçõÆ.?ÈôÅ1/ëÏúþ»zç·×½Ï~}†p‡ýztþµûÄÈ?×óéôþC§±pþ¼…Ïã�aÛ=Olÿõ¨¸Ÿôƒ=?<�å�Ìõ‡õ¿õý\=?¯ëúÐ2qß§ çœcÓßõëŠ.þµþ¿àîõþ¹ã±ïŽç>¹æ€þ¾_¦ßðð=1Ðûò}zõí@Ãüÿ¦(oLà�ò®Aã?þ¢ÿ×õýl+mëÔ@xê}ÿÇÎE ×ü7è.}qþ/Lpé_!3ŽOäᎿקç@_ðC=8'Û§¾3ïíß?Ja`=@ã¶:tþ¿wÿ®)_×õþAýW óׂ=½¿×ù ×õýz‡õ§õý}áþG¯~œñÏÖ•Ãúÿ#«Uà<,÷Øõúu÷ü½*?¯ëP³E›{måI®4Š&ÞI|ýÞx§¡ïŒphèÿ¯ëúù?ëúûŒéäK+®v»³pIÆ{äñÇëT€· 1C½½; @J+c2žß/pÝ�½×�I¾Âôþ·ûŽPÔ%¿—s|�®D1ˆ£¾G±�ONݦ¿¯ë¨ÿ¯ëîûŒâN~ŸçN3ê?Z?à¹ç=y'zŸ¨ãÖ€þ¿«ˆH>ÝG¯¿�¯\õô?áÀ3ùú�Ooé�ŒÆ�ÿ¯ë¨qÏÔuÈÏ^ÜyÅ×è×õý}áŸÃ8ïž2OùÿëÒë°g‡å“ÿÖéßרëúíÿ_^øçÿמür8Í×õ÷‡õý}àsøœz~}ýqíßµ×õý~Bû¿$÷ëŒvgõãß¿æõøúñŸ¨õïοZ?È×è'_rqÿêÇüP\?¯ëúÿ‚¾žýùõê}ºQý_ÖàøèqÔŽýsõïúb�ë [1Ÿ§^Éàþ¼æ€ ä ýsùþXé×éÅý�¼Aüÿ˜äc×çž(¸#éùþ‡¦1ùq@yÿ_רg¹þcß8íßÐcñ?¯!_ÖâuÇOo®?Ä`gõÅÓž{ã‚3ïúûtö8Åëúÿ1sÀã߯^9'òÿ<Šúþ¿¤!>Ã8íÓðú?<Ðט¹'úž?¯~½8ôÅ0'×Ûò>€ÿ.ÙÆ{ ïù‹œcØcßÓ¿§nµ03Çÿ«í×þxâ•Àh?˜ÿ?Ÿù”Ãúþ¿¯QÀúž?úã?�$äb—õý]Ãúþ¿®¡ÛŒàöû þƒ‡òh þG¾3þ~¼ö <ãé�Ëß¡ÀÈôõöúþ¾ï¸BN~ŸçN3ê?Z?à¹ç=y'zŸ¨ãÖ€þ¿«ˆH>ÝG¯¿�¯\õô?áÀ3ùú�Ooé�ŒÆ�ÿ¯ë¨qÏÔuÈÏ^ÜyÅ×è×õý}áŸÃ8ïž2OùÿëÒë°g‡å“ÿÖéßרëúíÿ_^øçÿמür8Í×õ÷‡õý}àsøœz~}ýqíßµ×õý~Bû¿$÷ëŒvgõãß¿æõøúñŸ¨õïοZ?È×è'_rqÿêÇüP\?¯ëúÿ‚¾žýùõê}ºQý_ÖàøèqÔŽýsõïúb�ë [1Ÿ§^Éàþ¼æ€ ä ýsùþXé×éÅý�¼Aüÿ˜äc×çž(¸#éùþ‡¦1ùq@yÿ_רg¹þcß8íßÐcñ?¯!_ÖâuÇOo®?Ä`gõÅÓž{ã‚3ïúûtö8Åëúÿ1sÀã߯^9'òÿ<Šúþ¿¤!>Ã8íÓðú?<Ðט¹'úž?¯~½8ôÅ0'×Ûò>€ÿ.ÙÆ{ ïù‹œcØcßÓ¿§nµ03Çÿ«í×þxâ•Àh?˜ÿ?Ÿù”Ãúþ¿¯QÀúž?úã?�$äb—õý]Ãúþ¿®¡ÛŒàöû þƒ‡òh þG¾3þ~¼ö <ãé�Ëß¡ÀÈôõöúþ¾ï¸BN~ŸçN3ê?Z?à¹ç=y'zŸ¨ãÖ€þ¿«ˆH>ÝG¯¿�¯\õô?áÀ3ùú�Ooé�ŒÆ�ÿ¯ë¨qÏÔuÈÏ^ÜyÅ×è×õý}áŸÃ8ïž2OùÿëÒë°g‡å“ÿÖéßרëúíÿ_^øçÿמür8Í×õ÷‡õý}àsøœz~}ýqíßµ×õý~Bû¿$÷ëŒvgõãß¿æõøúñŸ¨õïοZ?È×è'_rqÿêÇüP\?¯ëúÿ‚¾žýùõê}ºQý_ÖàøèqÔŽýsõïúb�ë [1Ÿ§^Éàþ¼æ€?Sd/ø$/íuûY /ÄGÃð¦þ_y7ð²>'YÞéÚZ|˜o´ø?Áû"ñ'Š<Ø[ͱ½ò4¯ ^Sþh[ƒùx×Á\í°¿[þÝÎ)óGû/)�:ÞÊ¢Ó—Ž»Âá--*Sæ­‹§¿Õd�±Èø;Îù*û¨`¥gõ¼dexÿ5 U­u¬ehR—üþGôëû%ÁÿdÙ†M3ÄÚö…7Ç¿‰ö" ÇŒ>(ØØ]èf£Ò×^øyÏáí!DÉÕ�Æ»'‹5ý2å<ÛBÑü�Æ~:q·ª¸L>"<9”Ôæ�ÔrŠ•!‰«IéÉŒÌÛŽ&»qn#‡X<5X;TÃKsõì“€r,Ÿ’­JO2ÆFÏÛã#R„×Ú£…Ö”5³‹¨ëTƒøj£ôWâÿÆ |ð¬šæ»"Ï{*=¿‡ü;m$qßëW¨ƒd) ök|£_êAe Pk©mm.?Œ¼oñÄ< á*ÜGĵÖ+2Å*´8w†ðõá ψ3(Æê�%7‡ÀÐr…LË4©Nt0Te£ˆÆWÁàñ_¹ø{áîwâwO*Ê©û%' ™¦kVœ¥„Ë0®Vs©gWQ)G „ŒãSQ;ºt)ׯGʾøÅ:þ©7ÇŸ‹ \xëĶ¡|#¢Kú€ü'u{km6ÒC#i×ú�¼ì.o·Eg#¥ü§QÔ5d?‘ýü=âî#Ìë}!àü]/i…Âå˜:®¤²ÌÃ2Ã×—Öc)<}IC0«,Ï1Íà}׊\U‘åX*~pt¸_&®Þ™B_íSŸQŸ-jØÊðPXÌ.­5ìZ_V©ˆŒe†‚Âa0^Aÿaÿ”w~Ôÿö Øþð—xo­¡¾ ÿÉÍáûÔÿÔ,QüÃÆŸòKg?ö ý?Hÿ>Í'VÕt-SM×t=JÿFÖôkû=WGÖt›Ë�;TÒµ]:æ;Í?RÓu 9!»±Ô,náŠêÎîÖh®-®"Žx$�¤õ©QÄQ«‡ÄR§_^�J5èV„jÑ­F¬\*Ò«JjP©J¤%(T„âã(ÉÆI¦ÑüÇ ÎœáRœ¥N¥9Ftç 8΋RŒá(´ã(´¥&œZºw?­üeø¿üá |Zƒâ¯Ä˜~*Mý—ç|K‹Ç^(�â ¾gíe>…'™ã4ÕÄo¿CQ£¾íHîÒ€Ó›6cɯã<&G’Ké+‰É¥“åRÉãí¹r©eøG–ÆÜB¶Òúª¶#÷êÔ´­ûÕïûÇí•qøåá…ÿ‚3þÚŸµ¿ŠmŸ‡?¼Yñ‹âņÿ4¿ÃâÝâ‹'~ÕŸðT?�ž ý™ü3 i–ø{áïÄŠÞ+×ïdÑ|àÏxËË=Õæµwaaªj'Xñ…Ο&¶ºV�¤êÚ¾§¨ßjzÃÚ%ˆ¿¾µâðëÄü§ƒ¼$ÈqÜW‹ÄÖ¨±Yž[“àðÔÕ|Ç„Àâœa ©R•/a�…E‡öÕëQ¡J•:TÝOgN{ñ' âó®0Ì0ùEP‹¥…ÅckU“§†ÃÕ¯FîU%Î|õÜ=§%8Nsœ§;róIršçüóñÞM_†¿´?À‰^1ðÚ¼z—‚¬u-kH¼Kè4ÚKj&×S·ÓõGoÜÛE¯C£Z´¬‚òòÂ&icìÃý$øyWÃ,׆x“*Àâ¬écêR¡ZœŸ»[Ù)Ò•ZI{ÓxyW�¯É �$ð©á–eìê¼&i–bëÒ¿>3© )%¬9Üf£;ü*ª§Úæ”§æ�À/Øö›ý¢~µ÷ü,•ñåéðæ�ðö ?RƒI¹¹ñò[êN¯uo�¶ƒ§ëzŽ« µþ“e}§CquêÜGâ? ðÇàøŸ˜-þÌW_ <"ŸüKðÖÎçÆ^ðµ£C}©ëÞÚxe/F‘o¬Éu·Н-cÒõ�.ûH°¶Ön•…‡ówÑûˆ8W'È1¼=˜âðY/C:Æ¼Ï šÎv2jTèÐ�9â�?m* 2¡,&ëP­NµIP�¶u*~›â&]›cs –�lvO,…«„‹¯BŒm)Ôr�ofª6ª*ÒŠ…HJU"Œ&¾þÖZŸÀŸ€µ¯ìñqày|EcûNh^Ð.µ+ŸM¡Ÿj>ÔõûÓ©G¡� RþÚº¿}b;K»fÔ4)4ÈÖâ[¯Ü­§ì¼CÁ´x‹‰83‰£˜,-NÄf˜R†8�í*Y�5?dñX¥ì!MPs„Õ,EÝVâ¡ïsüV[�O-Ë3¼­áÝXæôðÔœåUÓú´°Ó«.gìçí%75.zvQWoN_Õ/ø!'ÅO‚^ÿ‚‚übÔ4Ùõ‹…¿|ãëý*ÖD†çR±ð¢üIÖï,meqåÇssmg,Vï&Qft2|»«ñÿ¤6Q<ÿá®GN¬hTÍóÌ~]J´“”)TÆeP…I¥«„g4ä–¼©ÛSì¼8ÆG/¡ÄøéEÎ<('g(ÐXº’Š}”ZOkŸŸðS¿Ù·Ãÿ³ÿí!uâ/†_f½øûAè6~ë\xÑ%ðŽj—zšê¢8¡ðÖ«q=¶�b]î¡ðµ×†.®ÂI¨_¥xMÅXž$áha³nj|IÃXŠœ=Ä4+;â;/~Êš©»¹bèÆ3«RÊÅÃ]R>c‹òšYfjêàí,³4§Ç.©áû G¿*Pè•)·ÇuEÑr³‘·ÿ«ýŸ|/ñ‹ö‘o‰?DV¿eß j~1jú„^fŒšw‚ã“TðÞ‡©3Žhµ]nÈj7ºd‘\6±áÍÄVI ,Ï?ŒK‹É8_û+'æŸñn*—dt)ÊÕÝ\{T±XŠIYÅÑÃÔöTê§C‰ÂÔrÒÏN Êèãóo­ãm³'¥,Ï9+ÓåÃÞt©Ë£S©iBÏž•*±±úÿÃø“ øËâŸìñRÒ5 x¯àÆ…ñ&ÿA†[k�Z ]ñƒâ{½")Ù­­'ÔbÓ®¤²IY ¶’àfŠ&ÊþoôÊñ£ÄŒ’•zRÅàóÜFUOã8Ñ–#…Äá!]Å)Î4�X*Ž6””4Õ£éüCÅÒÄcxg8MQ¯€¥‹•$Óš§R­:ÎÒ.|²qW²rì�Ê?ø(OíI¢~Ø¿µoÄ/�Ò¯Z¦/ˆ¯MÃÛS¥UòaªP¥>x/~œ­xr³âø£8§ŸgX¬Ê�:´¨ÕŽ©Öåö��,=:sR䔣ïU�I«Ká’¾·GÞðZïù°1ëûxßþyþ—Ó­~wà7üÜû.ó/ÔúO?æ™ÿ±ô>1øÕû[xCâ¿ì1û&~ÌÇ@ñDÿgOüK¸ÔüU}”<1©øcƚi:v�4Z¥Î²÷vShÖW w¦iÖ¨ºqXšà,rŸºÈ¸3“xƒÆ|Wõœ#Êø£ •F–›­õºX¼�ÕkÅÑ… “�yÅ­Y·Vï’ía�ÐÆðîI”{*Ë•ÕŹ֒‡±�EI΃çu9£MJð„}Ë+èϳ¿à¸Ÿò;~Žñûü8ÿÓ¾½þ23øWÂ}ÿä_Çö]æŸúc {þ!ÿ¼pÿýˆ0Ÿú]S¼ÿ‚x§Ä^;ñí/û6üCÔu=wöcñGìáã=sÇÖnf»ðŸ‡õ¯øoB}^ÊÚã΋G½Õ|?â?¥òé&Î}PÙÚêWks/‡ì¥´ó¾�ø<6_‚áN)ËiRÃñfŠ08|¿B ÜM/«b± �IÕׅNéºÜñ£Ï:PäX™©ôxqZ®&¾o”â¥*™El«SFrr£JN¥|ñNê�*µ¹¹9\ùTÝÝ(µüý’{õÆ;3úñïßóþ’?2þ¿?^3õ½ùÏá×ëGùúýëîN?ýXàÿ�ê ‡õý_ðWÓß ÿ>½O·J?¯ëúÜß:‘ß®~½ÿLQýtëa3ôëÏù<לМ�Ÿ®?Ë:à}8 ?¯òƒÈ?ŸóŒzã<óÅ$}??ÐôÆ?.(?ëúõ àw?Ì{ç»ú ~'õä/ëúÜN¸éíõÇøŒ þ¸£úcsÏ|pF}ÿ_nžÇ¢áý_æ.x{õëÇ$þ_ç‘@_×ô„'Øgº~AÇçšúó$ÿSÇõï×§˜¦dúû~GÐåÛ8Ïdÿ1sŒ{ `ûúwôíÁö¦Æxÿõcºã?ÏR¸ óçóÿ#Ò˜_×õê8SÇÿ\gñäƒÜŒRþ¿¯ë¸_×õÔ;qœßaŸÐc°ãžM!?È÷ÆÏמԧœ}1ù{ô8ž¾À_×Ý÷IÏÓüãéÆ}GëGü<ç¯$ã�OóõzÐ×õq Û¨õ÷ãñõëž¾‡ü8?Qéíý01ƒøÓ¿õýuÎ9ú޹ãëÛ�Ï8£úýúþ¿¯¼3øgóÆIÿ?ýzAýv ãðü²úÝ;úûý]¿à ëßÿúóߎG£úþ¾ðþ¿¯¼�OÏ¿®=»ö£úþ¿¯È_wâžýqŽÃŒþ¼{÷üÀþ¿?^3õ½ùÏá×ëGùúýëîN?ýXàÿ�ê ‡õý_ðWÓß ÿ>½O·J?¯ëúÜß:‘ß®~½ÿLQýtëa3ôëÏù<לМ�Ÿ®?Ë:à}8 ?¯òƒÈ?ŸóŒzã<óÅ$}??ÐôÆ?.(?ëúõ àw?Ì{ç»ú ~'õä/ëúÜN¸éíõÇøŒ þ¸£úcsÏ|pF}ÿ_nžÇ¢áý_æ.x{õëÇ$þ_ç‘@_×ô„'Øgº~AÇçšúó$ÿSÇõï×§˜¦dúû~GÐåÛ8Ïdÿ1sŒ{ `ûúwôíÁö¦Æxÿõcºã?ÏR¸ óçóÿ#Ò˜_×õê8SÇÿ\gñäƒÜŒRþ¿¯ë¸_×õÔ;qœßaŸÐc°ãžM!?È÷ÆÏמԧœ}1ù{ô8ž¾À_×Ý÷IÏÓüãéÆ}GëGü<ç¯$ã�OóõzÐ×õq Û¨õ÷ãñõëž¾‡ü8?Qéíý01ƒøÓ¿õýuÎ9ú޹ãëÛ�Ï8£úýúþ¿¯¼3øgóÆIÿ?ýzAýv ãðü²úÝ;úûý]¿à ëßÿúóߎG£úþ¾ðþ¿¯¼�OÏ¿®=»ö£úþ¿¯È_wâžýqŽÃŒþ¼{÷üÀþ¿?^3õ½ùÏá×ëGùúýëîN?ýXàÿ�ê ‡õý_ðWÓß ÿ>½O·J?¯ëúÜß:‘ß®~½ÿLQýtëa3ôëÏù<לМ�Ÿ®?Ë:à}8 ?¯òƒÈ?ŸóŒzã<óÅ$}??ÐôÆ?.(?ëúõ àw?Ì{ç»ú ~'õä/ëúÜN¸éíõÇøŒ þ¸£úcsÏ|pF}ÿ_nžÇ¢áý_æ.x{õëÇ$þ_ç‘@_×ô„'Øgº~AÇçšúó$ÿSÇõï×§˜¦dúû~GÐåÛ8Ïdÿ1sŒ{ `ûúwôíÁö¦Æxÿõcºã?ÏR¸ óçóÿ#Ò˜_×õêu“²ÞMÉ+ŒuQÿêú÷ã!¿‘L9õ$zdÿõÿÏáSý_Ž„ê´ùÿ_�©opÄo/X$)ƒlpÒ6 PÆíÄ|ªXõàw*úÿ_Ÿõò9ýCQ–þ]Çä… Ä§�ŸW Ÿø ð(þ˜ßçüçéøñÓ¥;ÿ_×êëž½ºÿž=ðè\?­¿¯ëñ2;çüÿ>×ÔQý~¡ý/òþ¿Ì\ôÿø,æ‹üÂÁŸÓÓ¦}óŸÇ¶G´_˜ ÿëÆÏ~ÝqÍðÀÿ?çùN§õý|À3Ž}OøñÐuÿëõ£úþ¿¦×õýu'ÐçÓÿ­Ôqÿêù‰“ž ?žÏçÓó3Ð ãÿ¯õ÷ãüy£úìžß�òþ¿Ð‘Ö�ëü†Ùãôÿ?ã×­þ¿¯ëô#ù�çß¿_óŽK€œs×øOóÛŒÐÏ=ñùwÿ=?.„ ŽücõÏ#ùÿ.‡&€þ¿¯ëÔÿŽqúûÿžçÜ×äÿõçž}ÿÏZ?¯ø׿ž=yü^ÞýútïGâ×õø ×ß8éù‘Óÿ׎=€ÿ!?/ßÿ_éšWþ¿¯ëQ†zç¾—LcÖŸä×üÎOéëú‘øQý}â ÿú‰àg�æxô£ïþ¿OëA‡SÇs�϶xúnô úÿƒý\;þ_ç&�ëïzž�ùÇ·_Ó·øò_×õóêâgüü}—׿Qëúþ�ÿQAç·~9ïùý>Ÿ…þ¿¯˜¿¯ëúB}}1Ïùïøæ€þ¿áÿ¯ ÷N½8éëôü¨ÿ?ç?OÇŽ�(¿õý~ ¹ëÛ¯ùãßp>…ÃúÛúþ¿#¾Ïóàð}}E×êÒÿ/ëüÅÏOð‡òÎh¿Ì,ý=:gß9ü{dqëGõù€Ÿþ¼gü÷í×Ñÿ Ÿóþ—ôê_×Ì8çÔÿ�_þ¿Z?¯ëúaý_×Qr}}?úÝGþ¡@˜™9à“ùçüþ}?0=Î?úÿ_~?Çš?®Àíøÿ/ëý hþ¿Èaíž?Oóþ=zÐ/ëúþ¿Ar?˜þ}ûõÿ8ä¸ Ç=qß�×ôÿ=¸Íóß—óÓòè@Ð8ïÆ?\ò?Ÿòèrhëúþ½@ñÈ篿ùî}Áý~AŸÿ^yçßüõ£úÿ�ý~`ãןÀuíïß§Nô~!ý_€½}óŽŸ™?ýxãØòòü9÷ÿõþ™¥ëúþµg®{çùtÆ=iþAýÁ äþž¿§ù…×Þ Ïÿ¨žxþg�J>ÿëôþ´u×ÔQý~¡ý/òþ¿Ì\ôÿø,æ‹üÂÁŸÓÓ¦}óŸÇ¶G´_˜ ÿëÆÏ~ÝqÍðÀÿ?çùN§õý|À3Ž}OøñÐuÿëõ£úþ¿¦×õýu'ÐçÓÿ­Ôqÿêù‰“ž ?žÏçÓó3Ð ãÿ¯õ÷ãüy£úìžß�òþ¿Ð‘Ö�ëü†Ùãôÿ?ã×­þ¿¯ëô#ù�çß¿_óŽK€œs×øOóÛŒÐõƒÿÒø}û ü ðÂ|Aø2š÷Æ/ø3¾-Šþ/{Zé·ž'ÑìµÈáð׆µo³èž m(jÂ×SÑtû¿ÞBÏÕfY…¤_çGÒŸÅ?x#šæSáž(â/ 0˜‰ÑÆâ|4¥Ó>áújrŽ7ż3J8<÷0ÉaR�JÕ1Ù'>§‡¢ãS“à!Eâk~ÝàÍâjï'«™eY/ÒÄb(á¡Å>«•æòŽ*T°Ô²|Ún® ˜Ô¦éÁasY|ªÕ¼pØìL¦¨ÓþŒü!ñOáï�…#éãG6;†ò¬z�äÕ©V§”æXü·9ápy^¤¥Mp¯ âa5^“u¡›gÖ–>¦6¬3¥[ú3Äþ,ɼ(áZ~p%°Ù¦7 Þu�§8K…Ãb¨Æ5«âëÅ)ÿlf´¥NiAà°.2ÃF„%�äý'¯õˆþ8?<à¬?òŽïÚŸþÄýK¼7_¦x9ÿ'7„?ìcSÿP±GËñ§ü’ÙÏýƒGÿOÒ?Ïkòü9÷ÿõþ™¯ô¦ÿ×õýj1Ù§ìÏã߀ ÿà†? × Ô£Ë‡š”¦¢Ür�ï9F',Âxu‚¯œag�Ëà§í°ôá Σ–qVš�J´bù+Jw©(Ý]¤ŸÇZ/üþ ãû4é> Õb�Øs\ð×Äm{K}1õ�è~ð, •f†ÛR×ü9âψÞ)Ô4Hnc‚þã@µŸJ·Ô'¶… ÕœÉ õ¿ÜWðKÄÎ+­†£Çž añy^²ª¨`ñ†a$ìã)ÒÃb°yfž"Pr§LãZTã)>IÅÊœ¼*|uÂùD*χøv¥UH8{Jôðøu½Ò�JU±U¥M4¤é§&–±iI}9ðïã�ÅÏø"·íû[éZä“~ÐõoŠ4ñï‹t2týONÕ¯~&XüûN–ÖsÛÍ¡Ç௄Ú‘…ᶹ·¦é:töþlªÞwÉæ|?”CÇ~àÊØt¸k"£”à2ì#÷´ªÑ§•TÎù+sÆQÄ<~sˆ¯,\¥öеªÆ\©û¾¾1ÆK€3\îö¦>xÌF&½?vqœ±‘ÀóC•§MaðTéª)?ÝÆœZ½µþsàœß|yðûöåý˜µ�_ê6ÚÆ½ñŸÀ> Ö`³3È5¯øãÄúg†üa¤j0ÆØ¹±»Ðuée7 ñYO¾­òO§Ã4_ÓÞ'å¹vgá÷P̩ҕ >E˜ãèJ¢Šú¾7/ÂUÅ`kR“ø*CJš\¶u#)QÖ5\_å|+ŠÄáx‹(žRU*cðØzŠ7~ÒŽ"´)W„Òø£*s“wº‹J{Å3ú’ý¤¿lŸ�ŸðOïø)>«®|CÐo­¼1ûJ~ÍŸ n>#x¯ÂÚrêÚ§†|Uà/üNÐ|+âmkG¶C©_éšç‡]|=~Ús=üKá�km7Ròî<Ÿänà~ ñ#ÂÊ8|³NX¾âœÚ9^WØÑÅàó¿)Äc0˜zò~Ê�l>%*]]!–Qmj¾<Öb{›ƒ°†Ýešši6Ư,hX3 ?Õ¼3RážSœcí2L¢R’NSyu¡µÍ&£)(«»&öLü�5Œžkšr¦íŽÆÉÙ7d±5o²M¥we®çŠ[ÛÏu<6ÖÑKqsq,P[[À�,óÏ3áŠ�3Ë,²Ž8ã ï#U,@>ô¥FRœ”cå9I¨Æ1м¥);%®ÛnÉjô<ô›iE]ɤ’Wm½¶­¶ô]Þˆûoágí‘ûu~Äš¥ßÃÏüMø§ðŽ]áQøOã­ ÝéZ,ÚŒ6º¡YþüHÑõãU³šÒñ®mt}:úêÒ꘮6Î’·ÁgáïQ†gŽÊrŒébbÕ,ã/­ÉZ¼iJt}ÜÓ+¯J¦"4gÁBuêÓ„âàãx¸ŸAƒÏ¸‹‡§,- f3é?ˆ…áMÉFzá1Pœi¹ÅÆMªp“MI;;Ÿ¯ÿ¾.ø7þ ð#ö–ð7íðoáÆƒûHüøK}ñKá÷í ðïCO kº£è¶:„PÙøŸ‹ûç¶“UŽÎ={IKû¿ kz~¯su¦x{ÃzÖ�¤ê øžy’ã¼âÌ8_<Í1-Ÿç4òŒË†³_k'J¤jI•)Ó„Ï•?à•ÿòj?ðWû4KŸýE¾.Ÿjûÿä±ð_þËHÿê^JxÜÿ"^7ÿ±ÿÓ8ãKà|QþßðLŒÊ5/Ú/ö“UøÍð@ßë^+ø'¬O$Þ>ð]‰>uíéÒg’á"¶�Ašù>è6H°C5eŸÉøuâ¶[Å û.ñ Qȳÿ³CŸPŠŽ]�ŸÃ ~Ú*7œŸ»Mçš�ÊQ/.K‰8G•?5áÎ|~]¥êVËê6ñ8xï)r6ÒŠÞ_R¥9Ï�r¿ì3ÿêøaû-Z»éŸÿm6Ò¿h/Ú5c«á„2*ü*øy|™ŠæÑõ››4Ôõ inlõ?ÇZ£¶Z•¸=<;oëÇôí\žÿ¿ø¥ÿeÞ?ÿOb͸óýß„ÿìA‡ÿÒ(Ÿ†ßþ¼gü÷í××ôü1ùÙû“ÿ®ÿ›ÿ³/ðþÓ¯çÿ¿æãÿÙw™~§èœÿ4Ïýˆ0ß¡ømœsêÇŽƒ¯ÿ_­@_×ôÏÎÿ¯ëúêUðROŠß°ÿ€®?d½3ö¡ý•|cñçÅן²—ëïx“Ã_|SðêßHðã=ý¸Ðî4�Q³µ½™u8/ïÆ£*=ÁKÕ¶fòíâùÂÜŸ�óñ�^ã à¡Æ9�k^MŸ²ñf7‡°Ï$†q“WÌ«Ë%ÂÊ•ZXêØUN•ä½›…9F2|êRæzµ.]’?3¾)ÁL¾øwà¯�g¿ØWö`Ð?dïüN²M/â_�O‹µ_|Vñ~‡$0Þø}¼S¬DÚ¥Ž›qm{y¦Ô5¯\C¦ßjqé ¢K©\8ý[(ð«2ÅgØ%ñ ‹qŸ…þ¿¯˜¿¯ëúB}}1Ïùïøæ€þ¿áÿ¯ ÷N½8éëôü¨ÿ?ç?OÇŽ�(¿õý~ ¹ëÛ¯ùãßp>…ÃúÛúþ¿#¾Ïóàð}}E×êÒÿ/ëüÅÏOð‡òÎh¿Ì,ý=:gß9ü{dqëGõù€Ÿþ¼gü÷í×Ñÿ Ÿóþ—ôê_×Ì8çÔÿ�_þ¿Z?¯ëúaý_×Qr}}?úÝGþ¡@˜™9à“ùçüþ}?0=Î?úÿ_~?Çš?®Àíøÿ/ëý hþ¿Èaíž?Oóþ=zÐ/ëúþ¿Ar?˜þ}ûõÿ8ä¸ Ç=qß�×ôÿ=¸Íóß—óÓòè@Ð8ïÆ?\ò?Ÿòèrhëúþ½@ñÈ篿ùî}Áý~AŸÿ^yçßüõ£úÿ�ý~`ãןÀuíïß§Nô~!ý_€½}óŽŸ™?ýxãØòòü9÷ÿõþ™¥ëúþµg®{çùtÆ=iþAýÁ äþž¿§ù…×Þ Ïÿ¨žxþg�J>ÿëôþ´u×ÔQý~¡ý/òþ¿Ì\ôÿø,æ‹üÂÁŸÓÓ¦}óŸÇ¶G´_˜ ÿëÆÏ~ÝqÍðÀÿ?çùN§õý|À3Ž}OøñÐuÿëõ£úþ¿¦×õýu'ÐçÓÿ­Ôqÿêù‰“ž ?žÏçÓó3Ð ãÿ¯õ÷ãüy£úìžß�òþ¿Ð‘Ö�ëü†Ùãôÿ?ã×­þ¿¯ëô#ù�çß¿_óŽK€œs×øOóÛŒÐÏ=ñùwÿ=?.„ ŽücõÏ#ùÿ.‡&€þ¿¯ëÔÿŽqúûÿžçÜ×äIrM"E—‘Û $çÜzrI<’p×õþ¨V;[>ÚÆ |à³Üy{§ #Fÿ–j§€ = c=1•ý^`sú–›ör.-³-œ§*Ë’b'G<œdü¬}6žFh»þ¿_×oøsòü9÷ÿõþ™¢ÿ×õýj0Ï\÷ÏòéŒzÓüƒúÿ‚Éý=Oò? ?¯¼AŸÿQ< ñüÏ”}ÿ×éýh0êxîqùöÏAíÞ�_ð«‡ËüäÑý}à/SÓ¿8öëúvÿOëúþ¾aý\Lã��¯òú÷à /ý_ÒêtÚ™ÿM›±Ü½Hþèì{ƒéŽ{Òk[x ˆß_� Ü‹ÞCÎÜ®2ßì¨9'“�Õo棨˨K¸��¡"(¸@$n>®G^Hãh¦qõþC õàw힟ÈÐþr?—·ÿ®‹€¿§åüÿ^?• '#ëÁîzúà’ztLÿOÇ×ƒŽžÄñøPÿŸ~ÜŸNxé×߀¹úÿžùíÿÖîz€&O8ÛñÀÎ?Ny{díÓ§§=�üûÿJ.Ÿ§§\tÿýqÇ^ êÁúàŸo§89L}s‘@O~É÷éí×ר?ë@‡Ó#Š\çëÓ©è28çŒý:PÿëöçÓ§>¿áŠi#÷ãÓŸÌŸZ.Œ{zñÓ¹ëÇP3@o_óŸÿQ ,þYätÿõŸ¥ã8ì8ëÈëϧ­õý0Èï×Ó¿ÿ«ßŸË�úþ¿­ÀÉé‘“Áé‚G~F{ú‚;f€l�Ï·~£¹Èüû䊼ñÔòzò: túût 8è3×Ó<~§œsõçÔÈã�ÀsÓ9ÆííÁõ ?¯ëúÜ9ÏžyôüºþG43Çæ8öÏåÇ94 lþc’3è:/s@—õasø÷Çò=ˆÁôÇ=è¸}ýò?OËüõ ëÓ×ùpÇÞ€ëü†AëÀïÛ=?‘ üä/oÿ]OËùþ¼*@NG׃ÜõõÀÿ$ôè™þŸ�¯=‰ãð ÿ>ý¹>œñÓ¯¿sõÿ=óÛÿ­ÜõLžp·ã�œ~œòöÈ3Û§ON{ù÷þ”\?ON¸è=ÿú㎼.ÕƒõÁ>ßNpr>˜úç"€ žüÿ“ïÓÛ¯¯°Ö€?¦G¹Ï×§SÐdqÏút ÿ×íϧN}ÃÒF9ïǧ?˜ÿ>´\öõã§s׎ f€Þ¿ç?þ£@Xü³Èéÿë?J3ÆqØqבמÿOZ./ëúa‘߯§ÿW¿?— õý[€#“Ó#'ƒÓŽüŒ÷õvÍÙŸnýGs‘ù÷È9=yã©äõätéõöé@qÐg¯¦xýO8çëϨ‘Ç€ç¦sŒÛÛƒë@_×õ¸r?Ÿ<óéùuü:Žhg�ÌqíŸËŽ:rhÙüÇ$gÐtþ^æ€ÿ/êÂçð9ï�ä{ƒéŽ{Ñp ûûä~Ÿ—ùë@ ×§¯òàÿ�½×ù ƒ×�ß¶z#@ùÈþ^ßþº.þŸ—óýxþT€œ�¯¹ëë�þIéÐ3ý?^:{Çá@ þ}ûr}9ã§_~çëþ{ç·ÿ[¹ê™<àoÇ8ý9äí�g·Nžœöóïý(¸~ž�qÐ{ÿõÇx4\?«ë‚}¾œàä}1õÎE=ùÿ'ß§·__`<ÿ­~LŽ(sŸ¯N§ Èãž3ôé@ÿ¯ÛŸNœúÿ†(¤Œsß�N1þ}h¸Öìåð~÷â×Á€Zb^C¡h_¾k>1ñmä/.—á_ i¾Ñ®5=^÷a_1Òš;@ñµåãÃø¢3OóŸçôr Viˆ•9b±uó|V-ËéIG˜c«ã*BŽ�ïdå.jµ-%J’”¬åË|ÿ äøŒóˆ3 59¬6 ˆÆâó,¤[Ãåø5jN®"³VÖÑp£NéÕªããyGæ=[öƒÔ¾ x»XÓtÛ�GÇŸ ,5»ø4 õ8Ɠ∴K[É£Òµ 'óg[;‰lVÞâMîK‹{ym¬îtð$‘ÿÏ�¥ìÒðÃé ¼wÁï àï�˜hæ¶ECÚp—g5y15êq6O…� C0–5U—úÕ‘ýO3­W_œáx‚²ÂÓ¡ý¥à¿Ò�Š<>qáÌÚ¥~6àZ3ú® ™O“9Ërø9R¢²ÜeYTÿfú¿"þÈÇ{|-(Ó§‡ÀÕË©º®§éOì¿©é_¶¶³§¢øëPñ†¼5”>2Ô5mNyuß Y1ž[OÍkªKs6�¨_¼wI¥ÄUì8ïµV»¶´›øÕ„úý$óŸ0žøõ†âÜ&YÃø*XœË�³,ÛÄ^7„pت”ðØ^ât±˜Ltó D§G �¦£W(uq8¬Ï-ÃÎ…L-OïZ¾7øq–ð^"à9åqY•iSÂd¸l%¿K7©J2©[;Ëðê�Z1ÃSQ�jòn8¾JtpؙƤ*Ç÷OFÒ´­JÓô}ÎÚÃHÓmb³ÓììÔ-µ½¬ 8ãœà ³³4’9i$w‘™�û;‘dY? dÙgdv)Érl ¿,Ëptý–„ÃAS¥Fœu“²W�IÊUjÔr«Vs«9Î_ÅüÚãqY–c‰«ŒÇckÔÄâ±U¥ÏRµj²rœäöÕ»F1JŠP„c¤´ëÖ9Ïø+ðNÏÚŸþÄýK¼7_¦x9ÿ'7„?ìcSÿP±GËñ§ü’ùÏýƒGÿOÒ?�Ÿ„÷¾Ó¾*|4Ô>)i׿È>¼ø�¤Ù Ÿ¶jž¶ñ�?‹ôÛO±Þi÷¿j½ðüz…¬ÒþÆëÍ• ½í¬ÛfOô_9†cW(ÍiåcG6©–ã¡–V©ËÉG1ž¬pUgí!V”ñ.”¥ÏN¤,Ÿ4$¯üׂ–8Ì$±‘sÁLJ–*¿4ðʬx®YBW•%(®YEÝé$õ?ª;¯ø)§üºûöt¶ý“.¾|]“ö|´0ý›áÉð犣¶O#ÅÍã¸HñÅŽÅŽÚÇϯ6éÙ[uˆû(þB‡…>8Sâyq”sL•q,ù¹³O­`Üß6 eÒÿfy[Á«à×°Ó ´÷×ï=óöIqwK+Y+ÂcžW[ ìkr«WúÊýâÅûãþóø›éðè3µ6¯ð\øùñVý˜¼?©x_àMÉð÷Ãú¿ö©Ô´Í=|?¤E©Cuý¹«ëÚ®÷ñz¬ëö­Zôˆ¥A‰•Uð�"ÃðæWG‹14±œCN•U™bh{eV§Ök:R‡ÕèaèÙa�¾J4õO™9^Oò\æymLË<¢”èåÒœ”ùù¡gu/i:“¿µçzÎ[饑ú/ÿÑÿ‚ŸxköSðW�fÿÚ#Àz—ÄÿÙ—âkk2ên� –¥¯xfëÄúT:ŠmHÕ¯ôË wÂ%ÒbŒk0Ô4û»´¹ÔôÖ»¸¿½³ºüÇÅ_ ñ\a�˸£†sYOå*‚¥V¼ªRÃâá„­,Fnµujañ¸ZÍû þʬ*AÆ•UÓ§8}O q}›‰Ê³L4ñ™F-Ôr�5Ô¥*ÐTëGÙÎP�J`—´‡Þõü á}fËÄ3éþ Ô5n oìËïÜiö:[Û)“w§ëZ|—:¦›©-ìÚÍ–¥¬\é׺ËIeìñ�‚xú¼/Âã°Te¸¼na[ûZUiTÍqø¹a*}vU¨Q¯N5¡R…E5i{5B¥*0¯N�ªqä¼s‡ŽkœãóÊê,Ú• <>¨¡8á0ôUhû “§'NQ©ç ó:‘�G J¥ãèÿ¾<Á?c¿X|øAÿ -ñ7â†aÔ¥ðf�«iúŒŸØúÕ�ö�s%’êÑxÃí"iW×vrÜëZ¶º¶öÒOkmy«Å•åçÜ=ã÷åõ8s;ÿUrœ§*Kˆ£V’úÍ:§^*§±y†%'Zœ&£BŽš¥5Î[æêÀf^dX˜æxíl^2Š›¡Nq—îåR2¦ùyÖ•ù%(·9Ô´et¥4­ógÀø+Þ©à¿ø(ÅÛâo�îî< ñ»F‡À~,ðW…®¡½ÖÐü)§�´M Ä�nšO‡í,¢¼šëJ{éBßÞhút�p‡ðɼgðû+ÃðÖO–pwä¸ â~¡ˆ–/�ƨb±˜Œe_oíñh):Ø™ÔpŒ+*k÷p¯U(³ô<ËÁE‹©šcqYÖWŽÄFšÄS�8ŠÔ¨Ó£gìéÕ•”)F*MÙûÒ§ÙÀø›ö×ýŽ¿d߀ÿþÁ<<'ñ7ÄÞ2øóáù¼ñ[ö�øÜ4ûm\xB[}_O—Eð_‡4ø­"¶ž[ oU†Þðèž]>K«}Bú?j–ZlÚG¥„à>7ã."ɸ‡ÄÌfS…Àðî&8ÜŸ†2i:?]R£QWÇâª9¹ETÃÑr‡Ö1~ÑBT©¼-*•c_š·dY.[�˸^†.­|Ê“¡�ÍsU?`ÕH:t)E$›…I¥/gEEÉJJ¬ãOÐbßÚ;þ wû>þÎß>ø³ÅßµqñÏíCðSMøkñö+ø#RÑ|;{6�¯éúÜŸ îÓF´–Éc›ÄÚ›i×>'ÿ„¥6C`ÓÛHc�.<Þ;á�ø“‰²|˃àå—ð–}W5áÉTÄãéWÅS�|5L:Î ëÍTn8J*¬0ŸTw•E«Åǧ Íx?,Êñ¸Zõó¯¬g|p™š�,4éÒ“§V5^Î.:ÖŸ#­í•”o|)ý¥| ûþÛšÆïÙ>ãǾ2ø7á f=/Jø›y¦hþ2ñçÃýo@³²ñ§†üUs¢hÖÚ5�ÝÍäú£h—Ðø~{m*úÃ@ÖšÂöâÀy¿£g-˜ñßÔÈ8Æ9v<ÆÐ”êÖÊaV¾/̨bjTÀb°qÄW•yÂ0�oNX˜Êµ:˜šÒœj{¿5‚ͰÙG0É^&¾…EC(B¾' Rœcˆ¥YÓ¦¡6çìä©5 F�NY8ëWÆ´ÃoÛ öÜ×>7~Øú‡Ä_ |!ñö¹¯Ï¯Ú|'¸ÒuOx/ÂÚW„µK†~ð´Þ!Ño4k¸ô�BÇš^»}6ƒÕ-_^Ö–ÊËS¿ó"¼ æœÀ8|ƒ�ée˜Ìë-ÃᣆžsÔpüele™¶/5zuàëS©Œ­‡§Kö3Xzu)S³Uó<&{Ä3 öXªMJ®¬pNÄaè„ㄣEÕ§*o’Q¡ ’t×<}­NXÊW_ _·ßí1ÿÌý§þxËÁÞ+ý¨“â§ìýðcOøWðJÇPð÷ƒ´¯ë±i ¥ZØÜ|I•ô�CP¹¹–ÖÃuÕׇî¼;nÓ±ò¬¢V¿›øsž*ðžy˜ÔÇ`øEåIžÔÍóê”ñ8êØÜ;¬ëN¤r¸ªÔéB*u-baŠ’ŽõÔún%͸K7Àa£B¶p±™f8,¾2¥‡… Š‘‹Å¾IJO–:ºR¤¯´Rgå×ì«¥þÇ:¯Š|Mí•âOŽ~ð|z2xFëàT¸Öîù"€G¯¾Ý(Î: õôÏ©çýyõ28ãðôÎq€;{p}hëúþ·Góçž}?.¿‡QÍ ñùŽ=³ùqÇNMÛ?˜äŒúŸËÜÐåýX\þ=ñü�b0}1Ïz.Ÿ|�Óòÿ=h:ôõþ\ñ÷ úÿ!�zð;öÏOähÿ9ËÛÿ×EÀ_Óòþ¯Ê€‘õà÷=}p?É=:&§ãëÁÇObxü(Ï¿nO§¹È '¿?äûôöëëìŸõ Ãé‘Å.sõéÔôsÆ~�(ÿõûséÓŸ_ðÅ4‘Ž{ñéÏæ?Ï­F=½xéÜõ㨠·¯ùÏÿ¨Ð,ò:úÏÒ€ ñœvuäuç¿ÓÖ‹‹úþ˜dwëéßÿÕïÏåÈý_ÖàäôÈÉàôÁ#¿#=ýA³@¶@çÛ¿QÜä~}òE�^xêy=y:}}ºPœtëéž?SÎ9úóêdqÇà9éœãvöàúÐ×õýn�çÏ<ú~]£šãó{gò㎜š¶1Éô?—¹ ?Ëú°¹ü{ãùÄ`úcžô\>þù§åþzÐuéëü¸?ãï@õþC õàw힟ÈÐþr?—·ÿ®‹€¿§åüÿ^?• '#ëÁîzúà’ztLÿOÇ×ƒŽžÄñøPÿŸ~ÜŸNxé×߀¹úÿžùíÿÖîz€&O8ÛñÀÎ?Ny{díÓ§§=�üûÿJ.Ÿ§§\tÿýqÇ^ êÁúàŸo§89L}s‘@O~É÷éí×ר?ë@‡Ó#Š\çëÓ©è28çŒý:PÿëöçÓ§>¿áŠi#÷ãÓŸÌŸZ.Œ{zñÓ¹ëÇP3@o_óŸÿQ ,I rO"Ew`ªƒ9ç×è9'€Np(­†´xHe¿•çê±áI8à`a“òàQq_×õø’YÈ^örYš0I',OÍ×õçÛƒ�Âõý[•­n„[’Ußm(ı°ÈÚAåFOÿ\Œu©�—©é¿f"âØï³”åX`˜‹d˜ßà€òs�Ha‚®8#מ:žO^GAŽŸ_n”À3Žƒ=}3ÇêyÇ?^}@ Ž8ü=3œ`ÞÜZúþ¿­Ã‘üùçŸO˯áÔs@ƒ<~c�lþ\qÓ“@ÀöÏæ9#>ƒ§ò÷4ùV?�Ï|#ØŒLsÞ‹�ÛÜ[ÅÌ÷÷„-º(‡“#ê[$áFY›Ðd”+¨ê2ê–9HcÜ!ŒsŒ°äÀË0Æ:(Æ2¿¯ë`3ɧáõíž¡àv§ý_׿g ÆO ÿ^N1ôÜãŠRzõÿõuÆx#¿¯lô¥×üÆ&q×ðéøqë‚: uàSÉíÓÇ$ÆO8ÏOÏ�¨!{þ€ärF{qÜû}yÅÝè;õëþ>ÃŽyÇN ý_Õ¿0 ð1Ž;޹Æ=:ãŽ\Kúþº™#Ÿ¦IïÏnÙéÔözÓr=A?Ïž˜ç#õë@ “èN?ɹêO^;œ�@ ž{ì3Û‡¯©öéÉ9>¾Ø�?È{sÓ4|ÀSïÓëÜs×óã×󤼀 p1×8éÇòü†sëLuç<ý9õãŸOn´ 3�RGl“ôÁúàþ#¸Å?×¶:zg<óíÓ´_×õ÷€™õëÔó�özöÇ<Œ“Ç=¨xö�<ôü�é×®:r¿«ÿ_רÄã=yè:}xãßןSGmzúqÛ8ü}{g¾0 “œÛžœàà{~dæ�ëúü@2{zã§à;tϯpp½Eõ»Î:~ƒ×=ºƒúù€½H=±í×9ã#œã�Š:sìqÔŒ€{óÉÇÃÞ—õê!ÏrzŸN};ñéÛ·@ÿ®àúqëúÿ´3œòyê9 9ÏÐàñÎãœuÏéÏ+ú·õ° Hý?¯lð=°Í?ëúþ¿0=2yúòq� öçP“ׯÿ«®3Áý{g¥.¿æ13Ž¿‡OÀ�\Ðc¯˜On˜Æ9 Ž2yÆz~|}A ßô#’3ÛŽçÛëÎ(¸ïA߯_ñösÎ:pOëúþ­ù€g�ŒqØŒuÎ1é×pzàš_×õÐÉý2O~{vÏN§°ëÖ˜ ‘ê þ|ôÇ9ϯZLŸBqþIã9ê9úÑý]€]ÃÜO~½zçß�|PŸLàãžã©õÏRzñÜä LóØŸažØì=}O·NH ÉõöÀü þCÛž™£æŸ~Ÿ^ãž¿Ÿ¿�%ä[�޹ÇN?—ä3ŸZ` #¯9çéϨçú{u aœz’;dŸ¦×ñÆ(¹þ½±ÓÓ9çŸn˜õ£úþ¿¯¼ϯ^§œ³×¶9ädž9í@ ǰüyç§äN½qÓ•ý_úþ½F'ëÏAÓëÇþ¼úš;h ë×ÓŽÙÇãèsÛ=ð)€dœàÜôçwØãó'4_×â“Û×?Û¦}{ƒ…ê(ϨíØðFqÓô¹íÔ×ÌõêAí�n¹Ïäç QÓŸcޤdßžN8öô¿¯Qxë“Ôúséß�NݺýwïÐã�_×ý¡œç“ÏQÍÎ~‡Žpã®Ny_Õ¿­€RGéø}{g�èx†iÿ_×õù€™è1“È?דŒ}·8„½ý]qžïëÛ=)uÿ1‰œuü:~zàŽƒxÀ2{tÆ1Éq“Î3Óóãê^ÿ 9‘žÜw>ß^qEÀ7zýzÿ�°ãžqÓ‚_×õoÌ< cŽÄc®q�N¸ãƒ×Òþ¿®€&Hçé’{óÛ¶zu=‡^´À\�POóç¦9ÈÆ}zÐdú�òOÉÏQÏÖ�ëúìîàú{õès×>ü{†úg÷O®z“׎ç PgžÄû öÇaëê}ºr@NO¯¶àOòÜôÍ0ûôú÷õüøõüé/ Ü uÎ:qü¿!œúÓû+ý•ì|Cñ'öGøðƒÃÉ¥øgE½øGðËÄ¿ü]4’B�¡i>Ñ']CÄ—’H±C¢ør’[]=^8.µ rRæC)þVã¨dœM›qN>xŒÃO‹Ë²,ª*2äÆbq5#*9}(ÅÊx¼|ãV»NtèFqÖœTWI_2Ϊb¸?,¡„Ëpu3ZÔæúFp‹{¤Ö§ñ¡û0x ÃßÿioÙãáw‹£»›ÂŸ>9|%ð‰¡±º{é¼=ãxúÔvw¨í.ßLÔ®VÚé´2²J”¿¸ø³1Ääü+ÄÙ¾ Â8̯‡óœÇ *�U)Ç‚˱8špvS‚«JpoÞ�Õõ?Ê0´±™¶Wƒ®¤èâ󲌹déWÄÒ¥QF[Æ\²•žéê}‡¥~ÄG�µßŒoÂçÔ¼[¢xÇÃ_ 5ÿÙ3Ä·÷«¦Á}?ÅÚwá‡ÁIü=ã–´–‘ø“ÀSø«Äñå™c�¯éâ;D›D¼Ñ®¯~"·VÀaòJ¹²¥‚Ä`±YÎŒ°´éûYSŽQÂy¶}N_ÏÉ7…ÌcƒÃftþ*˜jË 7D+Ÿ»§ˆ©Ž†ž½:ô°5rZ²—*“ÆgL½ÒÄòóGÚá�z¸|Lv…X{XÞœ©¹PÔÿàœþ#²]:ñ<}«èš$¾?Ò>ê^"ø�ð_â7ÂM~#xÓLñ[|4ŸÃ·~7¶±Oü0ñ‡‰<.<-ãÉŽ‹¬xãZÑõ�øLÐîÖõµ¥âv~Ö.£_²êùÕ,6SžåyÍw•à*àÖkL0¨ðÙ¶ ŒúÝ<¾>Þ†>4+ÑÁfqpQ>«Y,MJtÞ&)ÕÅà1X}j¼+<#¥,BŠ«„¯Z�±–%û:˜wRœëá£NJFF¯û"ü2ø}ð+ãæ³ñCâv«¥|wøAª|Òµ?h¾“WÑü!ãˆþøµ®Ëð£Äš¤:äv÷~%/á-GñN©oIðÛÄÖZï‡u ;Y»·¼6{QãLÛ3â¡”å4kpöuK=­K_¨ÖÆà²¼VM‡Žq…¢ðîPÂÛˆ¯„£7'šá'‡ÅR«B‡/xeÌ6±x']Ô&¿°Ñ»°ž!ÔÎ\9ÃõóhÓÈèg•ç,Ï……8O4ÏrŒN_N¤^.–'O�⡆tjK/Å®iˇ§u+á[†ã‚W̳x7,uL8¬."«“XL2ž"Q~Êtðò¡˜R•^x,E"°õ$åu¾ÿ‚_|WÔnl´/ëï‡üUâOˆÿ¾øNü"ø‘ñKÁqëÿ ¾!ë¿ õ­_â�¼)¦�7À»ø‡á½{CÓõU±ñ.­®—w¯jÚ•¡¬WÓqã'…Ë2ÌÛ,nu•åç†Í2Ì>sB†Y—c*û\Ë ³‡ÄT¢êah¹Õ†Ž"¶"ôã½ÆIÆ�z•)V«ŠÅ`èªV3ªa1U0U'ŠÄч.‹ÅQ©N3å«>XJ¤éÂ�¤ø[¿ØLè–þ·ñgÆ�xkÄ÷¿ |CñŸâW‡'ð‡Š/ÛáÂßëþ0ðˆõ�T°IìµÿËãO Úx_ÂÞð×Û®µ«ý~ÊçU¾ðΚ©ysèCÄ/o,l°y+„†i†È²¬Lq¸Jk:Íñ¸l7 C F£�L6`1sÅã1¸¯g ðÕ#Fž*¯¹ipç³TUl}*U¥„«�ÅÒt+Kê8:+Ы:³�ãR³ÄQ�4(óJ¤ªÆS•(®gÞü$ý‹>ø«Aoˆú¿íqâ…ºÿ�ki|9{£ü9×t�è>.ý�>x;â!—žŸX¹´…’߯ÐkÿØzn»«Zk6‘ia¿gâF]Îθïˆpx…•Ñá¸á³|6aÁ‘ľg‡¯‚Äฟ:Çe–Áâ£B’rÀK õЏz3¡^´ê<4éáoˆéÀäujZžfêàêáó·JPÂÕ§^•|«CzÔ�GeˆU}”jN5)Â1U#:ß»âügû,x:ÓÂþø—âOxWáŸÁ­3á�Â…oxkÁ¾3ñ‹~$x¿âf©ñ>ïÃ+€õŸN£Åú¯†>x�_ñ,ðø‹ÁÞÐt�KÓá�5ÍBu~üãg‹ÅåX\¿šç•sláýCŽÀápY^ *¥”ÃÞcCõ*8¼Ë †ÂÅá±ØüMlEZ’“ÃÒ”¨á_&¡4qu±4p˜`ð_í¨b*ÖÅ×ÅÏèÛ :ï÷ó¥…«V³ö´0ôáNQU$”òuŸØ·ÃÞð�ÏÄ�Š_|?áχW~"ð—àÏøOÀÞ&ñ½ÿŽ´‰ß?ádxWÅ>ƒ-dž'Ó`³ÑÅÍ�ŒtŸÝhú§‡5­?PÒ �Y¾ŠÞÞëZw‰Ìq°ÊòŽÄâ³8a³*¸ì670Â`)åØŒ§3þËÆa+bqq«)Öp©‚­……zXªiÖ“¡MÊQΦAK Aâñ™•*XYUÃCV޶"XŠx¼/Ö¨Ö…6è¸(Óæ�xUtçJ¤gí$’xý�|áOÚ§Äß~9x»ÃÓÙxWMñt¾¾´ñ�·Ã¿üOñU¿„&ñ'ÂÍ_ˆþ-ÒRËá÷†þ#ÜÜhI/ˆ|Qa¤ .ÓQ�燯&þÓÓúqüO�Æp†ˆr *51•°QÄÓžYž;)ÁË.oˆŽW‚¬ç™b²¸ÇÖ R·¶�/iJšqöU3Ãåxz9Íl»0¯IÆŒ+ºRŽ"8ZºÊƒ«ƒ¦ñUáË…¥Šn�êVŒ9#.YJ”Ÿ<~™Ð¿c‡_âøÛ£§Ã/Š¿~(i_¾ë |âOi~5ðwо0x�ǚΉ§ÙxÅÖv6Ëã�‡ÿìt(|àË¥¼ÔäÑþ'k3é¯âMkMÓÚX¾WÇ9žVòÿÚ¹?e³ÌΆq�Âàë`1Ø<“ —PÄU©˜àªT—Ô3,ž¦"Xìt=�%_*¡« B­[K×§�aqk0‚Âcrì\0Z˜*kÃB¶:®&tã5xÅ}c ��5BƒæŸ³ÅÔpujB:x§‚>ü,ð—ìwuûNüNÒ5OxÊ‹^Óü?ðÆ/^øWNºø=âM?â÷†bñV§¨éöj1Oâ‰?|Ce¢Ig;ypü9ÔÒXž°O{Äy¾7�¡Â™Uj8 rl¦'6xZxʰÎðµ2l[ÂR¥R¢¤ã†Êó,5JêqWy�ÍA£ÏÃå˜:9³|]9â+¼n4°Š¬¨ÁàkGEVœã4êâ°µcMÅéõY¦­3èë�ÙÓà¹ñgö’ð'ÃÏÙ·Ä^(¾ø ð?ÁŸ|×.üA§|3ñ7„´�|XðÎ…ãÆ>&øc®ÉðÃXñ�‹<eã�L�Fñ©á»Í>ÜæyÚl·RxKYYõ­R¸—ßÅqGRà,ç<¡ 5L× �­…ÉñxŒ|6ìچ˜TËëÕu°ÔqP«(®j¼µcŒ¡ËB½(¯>–U–ˈ0X ’«%j0«�£N½:õpu>©R½|¦'†ã‰öpÃQ§B¥—îá¼JŽ:µ ».Éá™ç5s*Ùl°¹vy—b²èÊU\ÞŽ2žq¨UÁTÃÑ­ �Ñ¥�¡Z�ZO:žÊ5¸*𻡠˜œN6X\ 0ÐÅ*Øœ&Ž%§‹Žte‚—ï#^5' E)ÊŒá8ÍWQçpüÜϦpqÏqÔúç©=xîr~¢| ™ç±>Ã=±ØzúŸnœ�“ëí�øü‡·=3GÌ>ý>½Ç=>=:KÈ·sŽœ/Èg>´À@G^sÏÓŸQÎ9ôöë@Ã8õ$vÉ?L®â;ŒP!sý{c§¦sÏ>Ý1ëGõý_x Ÿ^½O8ÿg¯lsÈÉÇHÈ¿<œqì=é^¢ñ×'©ôçÓ¿�»túîߡǿ¯ûC9Ï'ž£š3œýàþ9Ç\þœò¿«[¤�ÓðúöÏÐð; Óþ¿¯ëó3Ðc'�¯'únqÅ)=zÿúºã<ß×¶zRëþc8ëøtü8õÁ:ð)€döéŒc’ã'œg§çÇÔ½ÿ@r9#=¸î}¾¼â‹€nôúõÿaÇ<ã§þ¿¯êߘxLjÇ\ã�qÇ® ¥ý]L‘ÏÓ$÷ç·lôê{½i€¹ ŸçÏLs‘Œúõ Éô'äž1“ž£Ÿ­×õØÜ=Áô÷ëÐç®}ø÷ÅôÎ9î:Ÿ\õ'¯Î@ Ï=‰öíŽÃ×Ôût䀜Ÿ_lÀŸä=¹éš>`)÷éõî9ëùñëùÒ^@¸ëœtãù~C9õ¦:óž~œúŽqϧ·ZÇ©#¶Iú`ýpÜb� ŸëÛ=3žyöé�Z?¯ëúûÀLúõêyÇû={cžFIãžÔ¼{Çžz~@ôë×9_Õÿ¯ëÔbqž¼ô>¼qïëÏ©£¶‚½}8íœ~>‡=³ß˜IÎíÏNpp=Ž?2sGõý~ =½qÓðºg׸8^¢€ úŽÝ�g?AëžÝAý|À^¤Øöëœñ‘ŽNq�@Å9ö8êF@=ùäã�aïKúõ€ç޹=O§>�øôíÛ ×pý8õýÚÎy<õМçèpxçñÎ:çôç•ý[úØ$~Ÿ‡×¶x‡�ØfŸõý_˜ žƒ<ƒýy8ÇÐ{sŽ(Ië×ÿÕ×àŽþ½³Ò—_ó™Ç_çàÇ®è1×�L'·Lc�G<ã=?>> …ïú‘ÉíÇsíõç\w ïׯøû9ç8'õýVüÀ3ÀÆ8ìF:çôëŽ8=pM/ëúèdŽ~™'¿=»g§SØuëLÈõÿ>zcœŒg×­&O¡8ÿ$ñŒœõýhþ¿®À.áî§¿^‡=sïǾ(ϦpqÏqÔúç©=xîr&yìO°Ïlv¾§Û§$äúû`~ÿ!íÏLÑóO¿O¯qÏ_Ï�_Î’ò-ÀÇ\ã§ËòÏ­0לóôçÔsŽ}=ºÐ2H¢’iV(‘¤‘Û ƒ$’}ø '€9'ŠuñE�l—ò¯ÎçD:•PyÀ=2r2ß(ÛH Övf,ä–bY‰8äœuüùž;pvû=÷~é{óÈçn¾™À¥ý_ÓóÔf_ëÏAÓëÇþ¼úš;h"å­×•˜åe¼€‰#n„ OP‡w¶¦3/SÓM¿úM·ï,äÁG&6 ŽO$g¡=þVç¨#'·®:~·Lú÷ ÔPŸQÛ±àŒã§è=sÛ¨?¯˜ëÔƒÛÝsž21ÉÎ0(£§>ÇHÈ¿<œqì=é^¢ñ×'©ôçÓ¿�»túîߡǿ¯ûC9Ï'ž£š¿¨êRêîbR%ÈŽÜ(ä9K°Î[íTÿ_Õµÿ†¸Ìà‘÷ÈǧÇÓàAÇ×·'ŸñÏ:ñœœà¿õý\·?‡§^~¸'ÓœEÿ¯ëþÎzžž½»|÷úð:fŽÿ× '9ç¶1ú ÷÷ìOèÿ¯ëòìþGâ=889ênœœ—þ¼¯óÎ1øñ�שüG� ¥ý~[_ðAG'väûþ] ìIâŸõýt ß޽qÁ9#ž¿_|ŒQŸ qÀÿÝOÿ«¥þ¶î3ïß�íØñЂzg¥þ¿®¡ý_Ò=�òì{€aì8öÿ¯ëü¼ÀCÏO¡äñÛØ~\qéEÿ¯×úèÏ¡Ïsì9ǧnüõõ×õ¿ô€B{Žz}?ý‡~1Eý}oø€î8籇nHÇNýy÷¥ÿý^` ?ÈûäcÓ¿ã郌p ãëÛ“ÏøçŽ�xÎNp_úþ®ÛŸÃÓ�¯?\é΢ÿ×õÿ g=OO^Ý�¾{ýx3GëГœóÛý{ûö'ô×õùvÿ#ñœõ·NNKÿ^Wù€güxÇëÔþ#�N„Òþ¿-¿¯ø gðàþ|~„úž�qOúþµöƒùqÉô=lç4¯ý0 �3ŽßOnNAÆ1ÏLŸZ/ý_ðàìyàägñ=ýN�éßúþ¿¯0 þ�óÇSÜÇÛ¹{hç¸tã×Û©œ{géFŸ�õ§ù€ƒ×œõëõíÔç§?Lóš?¥¦¿ÒÉ=úúþ]~ƒœ`žzÑýÃÿLç§8ãß�ÃŽ1ÛéGæq�ÏòÇáŽF2p?L _×õù\ÈéÉÏ¡ô�ä_QŒŸ×ëúùsïÇ¿¿?ä}{pÿ_ø`N:÷íï“Ç\‚{Ò—õý�À3œL{ôî8ã×ñ£Óúþ½_®qŽƒœŒûu?þ®”_úظϿ~·cÇB 霔_úþº‡õýH8ö?˱ãØþ¿¯òó=>‡“ÇoaùqÇ¥þ¿_ë >‡¼ýpO§8"‹ÿ_×ü0 œõ=={v>ùïõàtÍÿ¯@NsÏlcôïïØŸÑÿ_×åØü�ÄzppsÔÝ99/ýy_æœcñã¯SøŽ=:Kúü¶þ¿à�ŸÃƒùñúêzuÅ?ëúÔØñ×®;äŽzÿõøÅù€góÇc�ëø½M¿õý]4=½¿>ŸËúç>”¿áÿ¯ëP,cžç¿Cô§p úåÇ'Ðtô=³œÒ¿ôÀ2@Î;}=¹9Ç=2}h¿õýÀg±çƒ‘ŸÄ÷ô}:w§ëúþ¼À3úwÏýOp?nåí  žàqÓ�_n¤qퟥ~?ÖŸæ^sׯ׷Sžœý3Îhþ–šÿHé»á—ü§öEð7ì¡ðsà~•ãÝoG×l¾ü<Ó~/^Ýø#Æu©x»Að–�§]øbÎëMÐo-æðÆ�¨ÙÜÇm4W�­97¢(‘ßíÏ•¼=â\Ç‹ón%Í0¸zÔéfú|7…§Š¡*8LLMY,ƪ©V?𡎧(9®DðÔ­KšM/eŽqV®(Y Ъ¨æu–gĹ•YУ_0ÆTj­<®œ\•Hå¹l›QNVÄ׿­É¹:¿6þÒ·7ìÙñ-lô‡úÝç†<¤éú|V>‹LñÕͽö¹ —Ùµ/ëlÑ­,.¼Q«–k{­NßN±c¦[iö Ú$ö¸‚3üµVÄfNŽi‰­Zu1ÏêTeK :®t2ü2�YÕ¥�ä¥N„ëUýüëUæýâKª®2U§‡£„ËÞU–á¨P…< qo§ˆ§IB¾?$ãN®7îªV§F•èÂ�>_ÝÝüQûX~ÚúŸÆ„Ÿ?fo‡rêÀƒš�æšám¤ñÿÅ}vëU×üQã^Ý`†hìt}KÄš¶‰ám6âK�–é}®ÎVëY[=3èx?�(ä™ÖÅY’§ˆâ ó*Tê¯}eÙ>4pØL 9J.¥zXZ5ñub£yºxx§ ¥_ Í³ú˜Ü»,Ê0îT²üJp½ž#Sš­zóI/vœëN•¶ôR©½NX~}ätäçÐúÇò¯¨ÆGþ»ÿ_×ËæÄçß�~Èúöáþ¿ðÀœuïÛß'Žþ¹ö¥/ëúÿ;�è? >$k¾*ü1ø·áë=7Q×þüAð_Ä}OÖ£»›G¿Ö<â=7ÄÚe¦«�Õ�ìšeÍæ— ÑÙÞÙÝ=¬’­½Õ¼ÅfO79Ë(gyFm’âgV–7ËqÙ^"¥×§C0ÂÕÂÕ�R ªÂ¥*ntç5hÉ^/«Š©€Æa1Ô£ ÔÁâpøªq¨›§)áê´Ô\eÉ)A)rÊ-¦ìÓÔ÷_„?¶—ÆŸ‚^ñ·Ãß]h°Xø«Çø�¢ë7ºkÞkÿ¼gà�x?â"êž½{‘ „>'Ö¼àÈ|]¥êvú¶™­ÚxgE2ÚÇwaÍ|þuÀ¹}™`3,|1ž/Ì2ºô)ÕTðùž—crÇG0‚‡5G„Ãæ8é`«R•´'‹ÄZnGŸcòü.# ‡•5ØŒ>.�IGš®¾Cχ“vŠ­S ‡Uá58T�wŠq¹¿}ûhߦµ¤xƒÂß> xSVÓ<]/ÄO´4¼k~>¶Ð¼E¦øgTÑí>#x÷ÅÖ¾ðÿ‚õ¯¿Œt?éqEá�KÄZO‡Ç�,¼[£hZN“gÍO�©º°Ø¾ Ï1”jà–YÈž[€o.–# WF¼ò¼»Ð5íWÅ Ò<}yñEÔ¼ ­ëñiÐøŒxsÄÿ ð·Â�ÜørÖÖ]Zö4ðÆ‰£| ðÔz:KçëÒOw«]kzö¯suÐúÙW `²œM\U,Vaˆ­_$˲:µ1•éÖ�Jv/8ÆÃ9ª4ÛÅâ+çX§Y®\:Œ(†Œ`Ô¸ñy­|e(R�,=8C‰ÇÅQ„¡ÏGAÒQs’TiÓÀÑTÓ½FÜåR¤Ü®{εÿñ¯‹u�KÄž;øKð›Æºü~)|Kð]α/ÄË=3Á—üyâ/‰¾!ð¤¾Ðþ"i>ñß‚4Ïø§[ñ7‡´Oˆz_‰§‚öþîÃZÔ5ï ß^è=CÃ| …,._œç 3Êòœ¯+*�\t2l» •a±‹ˆË+â²ü}\¿ C ‰Äe•p‘•:TêЧ‡ÅBž">�N&ÄV©:¸œ Qbñ˜¼;›Å¨P–7WV‹£O 8œ<1ªU¥O ÍJRŒçR”�'åzWíqãÝ;Äþ ñ ׆ü®Xxcà¶¡ðÄ>ÕôÍEü/ñ᮵­x£]×4¯ZéÚ¶�¨Y]_Þø¦k‹]K—†otÝ'CÔô ´½KMK£ëÖàܺ®††+‡©‹ÏiñF­%‹ÊóJ0˜|=lêÑ«J¤)ÓÂF3¥�¥Š§ˆ§[K´ª¸.8gX˜ÕÃÕt°õ#G<¶­ �—±ÅájT­R¤+F„¢å*Í©Ð�)S”)Λ„â™Ûé¿·¯áí7Á^ð§À߃>øoà©~<¿­Ÿâ¥æŸâ�öŽøoáÏ…ßôÏøŽÿâdþ6¾¸¸ðÿ‡!»Ò5�3ÄšF§¤j· ØË‘§i:=‡^¡‰«�Æc3üóšc×ÉæRYD*a+ðÆiŠÍ²º¸<5<©`!âqR…jpµ©V£~.µZÕêtCˆ'Jz4rì,&æKêÉã%Ôó\%,&.ªËñn•$áRa:s—ºÔ# qË—öÉÕµmþüø]ã„«á�xrÛᆫ7Ä;=3M¸ø]{ã{�xŸIñN�ã­;Ç6%Ñ´ÿˆ^*ðÍåÊx’KsÃ:µÝ–«§\ê?fÕ­6�Q£_ëø,ï6Ág/˜â§›QŽ[:µc›ÓÀG1ÂVÂWËêåõ0µêå¸LT ðªx|]T¥V4¹¨Î{:�ú½|¾ QÃRŽoAàåˆxjЭO DjÓŽ*µ)?jáRŒåÁÏ–¤xß‹¿µOŽ~2xBokzƒ|?áKxGÄÑ<-c¬YØø/HðÃÑðÏžðâjZÞ«(ðÞ™áÐ'žãX›Vñ6³®Éw®ë~!Ôu=CR¹»íÉxG/Èñ«0Ãâ1Øœd°xÜ6*¾.¥ ÔÇVÌs/í\f?éa语UÅ{±…G C¡‡¡†¥J•(C vq‰ÇÐxj”¨R¢«P«J�ÔŒpôðØ_ªQÃÒç©7ì¡KVæçZ¥G*•*Ês›–v¡ûGëšßÆ­cãGŠ<ðÓÅÓø—B‡Ã>#ð'‰¼=w«x/TЗÁV’Ú ñ6�«ÿeé¶úŽ�⟠x�Fñ>�¯¢j¾ÕôÉ"Ž5Ö— aðù ‹ ˜æ¸(áqÅá³ &&�u,CÇÔÌ¥ËEá1}­IR©„Åáká18vèâhÕM²%šÔ©˜TÇÖÃa+º´Õ¸jÔ¥S:k;KßU©Ï’ q­F­:Ôê.zs†Çy­~Ú^= 7�¼á?|+ð^™¤ø'Jð&‰àùücuwðþOüO¾øÇo®è^!ñOŠõÿÞø‹[ñþ§y¬jú–¹©Á,t+ÆÎÒ|ú —,ZÌ3 f;7ÇU­�­˜WÆÇfQÇå4òIáñl&†††[JhÒÃÒ¥)>j˜Š•êNr—MLÿèý[ F† aᇧA×”°ÏŒ–9T§Vµj•eV¦*r©9T”ÒV�8ÓŒRY¿lˆŸ­>,Xx“ÃþÒl>,jÿµK­3ÂÚE拤øFßà‡‡üaáï è¾ÓRžÏMÒ/áñ¾µ¨ëÐ]G{sw«ºßCunóß ½²^ Ë29äÕ0¸œ}j™=ò”*âëB½ll³üN ‹¯�¬éFukS–…,< éÆS§(IFŸ$c³ÌV>8ØÕ¥‡„qµ0p£ S…—Ò¯J�:çqŒ$±%Q5')ûɦå|/þÔ6ñ^§ñóT¿Ñ<+o7í ð÷Àß<\–vڲŤiñoÂoéžóõ‰Þ FïPø?áû]IõI5KYlµam­m&–ÊkŒ' à0t¸v�:øÉG†³,Ã4Á9Ê‹uëf8<çZž+–ŒT©Bžw‰•%IQš�*sœUHÔζoˆ­<Êr§E<Ï ‡ÂWQU-Njøð•+ÍÚnXJ\îQå”ì¢Ü\|ßáÅ oà×Äâ/‡lt½GXЭõûk[Mn+¹´ÙSÄ^Õü3vnÆòÂì¼V:ÍÌÖÆ;¸ÂÝÇ J²Â²C'©�eT3Ì·–bjV§C,4çSá±xlMT9]HT…¥R„c+ÁÞVq•šäÁc*`1TñT£ Nšª£ŠN U¥:2ºŒ¢ô�F×½ºWºº=ÖËöÚø½k£|-Ð&´ð¥öŸð£á—Åÿ†:WÚ4ýM.|Gañá·ð.ïÄ0ºµÖ-äÖ|Cà�…š–‘àÿK²Ót'ÂZ$é·¦çÄ ¬üüø%©_7ÄFxÊusŒ×%Í«rդᅩ’çT8‚lgBJ†›Ò¯�ÌSö•q5±•äªSäÃ*Œxƒx:N4e„…ã4êÇ�©—J­v¦�J˜|¡C ×,)B„,¹ªóôÒþܺü·~4ñlŸ~ Kñ{âo¯|#ø•ñŠx> Íâ¯è¿~êß õï.ˆÞ=ÿ„Añ¾£¥j‹«k'Ñ<+gs­ëÖfæú/±ë>'°×ya”085žç‹%ʳŒ¿:ÊòHË-Ž_-Í(æ¸|+Äghb0ëQtha1¹Â†|´ß= %L>ψj¹b+¼¿ñؼ'‹Ç5Šu«SÅag„©WÙýgêôñ„ùçZ�º•åîÔ­—oà ß5=V;½Kž¹Ño5Ÿ‹7¾,ð´#Æš^™ã=ã'…¾ x_Å>Õ¯ô�Øx‹OÓ¬À_x‹ÃZ‡‡µ­]ÒŽ_FµÊáV1�ön­)R©N¥:ÉÏ�¥ÇÍügûVë¾'ð·Ž| £|;ð‚¼ã_øSÁ¦hƒÅZ¦©§ÙxWâ—Ä‘¬\ø·Å~%ñмMâcÄ) ýÿŠu}ZÏOÑš=ÃZvƒ¦YXZÛzxÃá1y~a[3ÌqøÜ;�ö¸�©Ò£R¦3-©•û`°x\6 †¡†¨åNž�Ô¯Í_WVu'.LFsRµF\6†#GÉOÛNq�Lq^ÒU«U©ZµZ•ciJ´çÓµ:Q§Å/•r@Î;}=¹9Ç=2}këïý_ðçŒìyàägñ=ýN�éßúþ¿¯0 þ�óÇSÜÇÛ¹{hç¸tã×Û©œ{géFŸ�õ§ù€ƒ×œõëõíÔç§?Lóš?¥¦¿ÒÉ=úúþ]~ƒœ`žzÑýÃÿLç§8ãß�ÃŽ1ÛéGæq�ÏòÇáŽF2p?L _×õù\ÈéÉÏ¡ô�ä_QŒŸ×ëúùsïÇ¿¿?ä}{pÿ_ø`N:÷íï“Ç\‚{Ò—õý�À3œL{ôî8ã×ñ£Óúþ½_®qŽƒœŒûu?þ®”_úظϿ~·cÇB 霔_úþº‡õýH8ö?˱ãØþ¿¯òó=>‡“ÇoaùqÇ¥þ¿_ë >‡¼ýpO§8"‹ÿ_×ü0 œõ=={v>ùïõàtÍÿ¯@NsÏlcôïïØŸÑÿ_×åØü�ÄzppsÔÝ99/ýy_æœcñã¯SøŽ=:Kúü¶þ¿à�ŸÃƒùñúêzuÅ?ëúÔØñ×®;äŽzÿõøÅù€góÇc�ëø½M¿õý]4=½¿>ŸËúç>”¿áÿ¯ëP,cžç¿Cô§p úåÇ'Ðtô=³œÒ¿ôÀ2@Î;}=¹9Ç=2}h¿õýÀg±çƒ‘ŸÄ÷ô}:w§ëúþ¼À3úwÏýOp?nåí  žàqÓ�_n¤qퟥ~?ÖŸæ^sׯ׷Sžœý3Îhþ–šÿH$÷ëëùuúq‚yëGõÿý0žœã�~?8Ço¥˜Æ?ˆ9ÉÀý0)_×åp#§'>‡Ð~?�}F2]ÿ¯ëä Ï¿þüÿ‘õíÃýဠ8ëß·¾Oýr ìJ_×õþwÎp=1ïÓ¸ãŒ_Æ�Oëúô~¹Æ: r3íÔÿúºQë`ã>ýøÝ�'¦p:Qëúê×õý ãØÿ.ǸvÃ�`_úþ¿ËÌ<ôúO½‡åÇ”_úý®€úñ×>ÜzvïÏ_Wý[ÿH'¸àg§Óÿ×øwã_×ÖÿˆãŽ{øväŒtïןz_ðÿ×õæü�¾F=;þ>˜8Ç >½¹<ÿŽxé׌äçÿ¯êà¹ü=8úóõÁ>œàŠ/ý_ðÀ&sÔôõíØûç¿×�Ó4wþ½ 9Ï=±�Ðg¿¿bGý_—`ò?éÁÁÏP;tää¿õå˜q�ÇŒ~½Oâ8ôèM/ëòÛúÿ‚çÇèO©é×ÿ¯ëPcÇ^¸ï’9ëÿ×ã_æœp?ÏŽ¯àzõ4^ÿ×õýtÐööüú/ëœúRÿ‡þ¿­@ ü±Žx8žýÒ�À3è?—ŸAÓÐöÎsJÿÓÉ8íôöääcôÉõ¢ÿ×õÿžÇžFßÐqôéÞ�ÿ¯ëúóÏé߇“ÇoaùqÇ¥þ¿_ë >‡˜ÿ<óéÐPÿ�ÿ¹?þ°¾yüÿÏ¿…AÏÓŽ\sžßŸN8>c úóÏôôí×ߜ󚯯áèqÇLûÐ0Ï^ã·õàcŸÏߦhëîCøçÓçž}: Áßð?çŽÿ�ïÖ€þ}?ýOq@_×K~‡¦zõÇ9÷ÏÐŽÞ´õùÿ]>àÏør}¿¦?�)<þù#Û#¾ÏjO^=}>ƒŸééÚ€�H$þ9ã“ß¡=øî  ,.OO|õøÆ•ÿ !9ýÏŽ™ÿëñ@ þ>ÿË·O¥¯ôÏ>œtöè1@Ãüö'þßýo¯õú‡~:�ÓõöïŠ ÏN�º~<}Ïj3�~Çtü×'ÿÖwÏ?Ÿù÷ãð @9úqÏëŽsÛóéÇÌaŸ^yþƒ>�ºûóžs@ƒõõü=8éŸzëÜvþ¼ sùûôÍý}ÁèúcüóϧA@X;þüñßòúÐÀ�§ÿ¯éî(ëúé`ÏÐôÏ^¸ç>ùúÛÖ€þ¿?ë§ÜÿO·áôÇó 'ŸÃ¿${dwÏùí@ ëǯ§Ðsý=;PÓ©ŸÇ�þ§8�õ =?ÀtÆ?ý]~”séÍëúþ»ëÏO^¸ô?ךùúçÛÿ­õâ€þ¿PïÇQúc>¾Ýñ@9éÓ·OÇ�¯ùí@qïØãŽŸ€úäÿúÀùçóÿ>ü~?N9ýqÎ{~}8àùŒ3ëÏ?ÐgÓ·_~sÎh~¾¿‡¡Ç3ï@Ã={Žß×�Ž?~™ ?¯¸=ãŸLžyôè( Àÿž;þC¿Zøôÿõý=Åý],ú™ë×çß?B;zÐ×çýtûƒ?áÉöü>˜þt¤óøwä�lŽùÿ=¨=xõôú§§j:u “øçŽO~„÷ã¸&€°¹==ñÿ×ãþTü0„äõÿ>:gÿ¯Å'ùüûÿ.Ý>”^¿Ó<úqÓÛ ÅóØœsøñ�Oç@q؉§_óŽ(xÿõ{ûsÛ×µþŸŽ§§ùÍ ÿ/þ·8õéÛÖ�ÿ_×õú>½½ÿ¯ùúP×`÷ϹýN£?Lð¿‡Ó¿Ôçñþ´g§ø˜Çÿ«¯Ò€}9¢áý_×`ýyéëׇúó@ÿ?\ûõ¾¼P×êøê?Lg×Û¾('=:véøñõÿ=¨Î=ûqÓð\ŸÿXß<þçß�Â� çéÇ?®9Ïoϧ1†}yçú úvëïÎyÍ××ðô8ã¦}èg¯qÛúð1ÏçïÓ4õ÷¡üsé�óÏ>�`ïøóÇÈwë@ÿ>Ÿþ¿§¸ ?¯ë¥ƒ?CÓ=zãœûçèGoZúüÿ®Ÿpgü9>߇Ó΀žü‘í‘ß?çµ'¯¾ŸAÏôôí@N¤ñÉïОüwÐ'§¾?úüc?Ê€ÿ†œ�þ¿çÇLÿõø ÿ?ŸåÛ§Ò� ×úgŸN:{t aþ{Ž1éüèÎ;ñ#ôëþqůþ¯aÎ{zö ¿ÓñÏôôÿ9 AŸåÿÖç½;zÐ?ëúþ¿@'×·¿õÿ?Júìùã·?¯éÔgéž×ðúwúœà~?Ö€ ôÿÓÿõuúPϧ4\?¯ëúì¯==zãÐÿ^hçëŸoþ·×ŠúýC¿GéŒúûwÅç§NÝ?>¿çµÇ¿cŽ:~ë“ÿë;çŸÏüûñøP ý8çõÇ9íùôãƒæ0ϯ<ÿAŸNÝ}ùÏ9 Aúúþ‡tϽ õî;^9üýúf€þ¾âXb’y8QžG<çžäç€V$í’@ ,uq$:4%Slš„©ó¿Q#î��º1‘À.~fàŒ¶wv.ì]Øî$õ9ë“éÇ·ÓÐ87Ó¶~¸þdýíëFäíéý]gü9>߇Ó΂�;#û‹Þåˆ÷#ïc‘ïÓ·¯ fzñëéôÿONÔfÚÕîáG/!ûª¸ùŽ}}3Ç|â€ÿ‡ ÔõDl,Ø+4«ÖcÆ@a‚W=OñtQ‚Γ‘ÿ×üøéŸþ¿Ÿçóïü»túP!zÿLóéÇOnƒ ?ÏbqÏãÆ=?�Çaþ$~�Î8 uãÿÕïì9Ïo^ÔÌþ¿‡\ú}1�\Ò¸íý_Õ…לžœóõþgŸ\@_Öâç9=OçÿÕÔÐÿ_×ü0™íøþ}zú8ãµý/|wêéž™4Ëúþ½8è3Ï·nùÿ?…õýzWsýsÛ?§Ó¹ç®(뿯ùŽ,Ú;u8ëÛüþC9õý_ðïëƒÉ÷Ç~=½¿EÃúþ»ýýFg9ç·>¹çüx4úÿ�ýy�áÆGÞ½�ôÇ\qÓÛ¸4 úïýj3§âqþèh¿ ÏoÀg>£Óñëî=M _Öß×�gƒœv9ç¨'éø¼ú¯¯õø†zzŸÏ�çÏ^hõý~�ø‘ÿêïŒ }?>hëô àõë‘ÿÖÇ<çúcõÐ3Ûñãߌý8þ]hëõþ¿@Ï=}ôÏ_σíÉÆ3À1Ç_©õÆOOñÁõ _×õýX\ãŽ3Ç?AÎ8�1EÃóþ¿¦ëÏãÛ§ùíŽçÖ€þ¿¯ëVü:“ߦxúgðõàb‹Žß×õø†Gòÿ>Ãüæ‹‹úþ½5=qþAõöúãÔQqÛþä‡ÓÓÓ½¾aëžßçÓ>£Þ‹‡ëý“=±õç¹Î=zò(¸íý_ðÂgõü:çÓéŒzæ‹…¿¯ëú°ôºô'ߟóÔóëÍþ·þ¿« Ã’Ýz{ãÛÓÛÔœz_ëúÿ†žß�çׯ àãŽ;PÏ×ò÷Ç~ ~™é“@ü¿¯ëÐ3Žƒ<ûvïŸóøQq_×§õpÈÿõûþœ�\P×pÏcÎ?Ïõúöç"€ü¿­ÿÏúF<žOáôööüMØBG¯QÇ'§¯øðhõÿúóõ¾˜ü88àúýy _×õóÇ©ÿ?§ô4ß�g·à3ŸQéøõ÷¦‹…¿¯ëoëÈ3ÁÎ;óÔôü^} ××úüC==OçÇóç¯4 úþ¿@üHÿõwÆ>ŸŸ4õúpzõÈÿëcžsý1ŠúèíøñïÆ~œ.´õúÿ_ gž¾€úg¯çÁöäãà€ã¯Ôúã'§øàúÐ/ëúþ¬.qÇ㟠ç9ü9¿ä¸ÿ9 öÆNÿÈßðÿÕÿ­ƒpÿË9ïÛ8ëEÅåý_ä§9ÿ>�»“Ó€3Ú‹‡õý_¨g�lCÏ9N˜¢áùÿ_Ó õçñíÓüöÇsë@_×õ« þIïÓ<}3øzð1EÇoëúüC#ùŸaþsEÅý^šˆ¸ÿ úû}qê(¸íÿ r?ÿéééÞ‹‹_0õÏoóéŸQïEÃõþ¿É‹žØúóÜç½ù\vþ¿¯øa3úþséôÆ=sEÂß×õýXP}yÉéÏ?_æyõÁôýn.s“Ôñþý]M¯õýà žß�çׯ àãŽ;PÏ×ò÷Ç~ ~™é“@ü¿¯ëÐ3Žƒ<ûvïŸóøQq_×§õpÈÿõûþœ�\P×pÏcÎ?Ïõúöç"€ü¿­ÿÏúF<žOáôööüMØBG¯QÇ'§¯øðhõÿúóõ¾˜ü88àúýy _×õóÇ©ÿ?§ô4ß�g·à3ŸQéøõ÷¦‹…¿¯ëoëÈ3ÁÎ;óÔôü^} ××úüC==OçÇóç¯4 úþ¿@üHÿõwÆ>ŸŸ4õúpzõÈÿëcžsý1ŠúèíøñïÆ~œ.´õúÿ_ gž¾€úg¯çÁöäãà€ã¯Ôúã'§øàúÐ/ëúþ¬.qÇ㟠ç9ü9¿ä¸ÿ9 öÆNÿÈßðÿÕÿ­ƒpÿË9ïÛ8ëEÅåý_ä§9ÿ>�»“Ó€3Ú‹‡õý_¨g�lCÏ9N˜¢áùÿ_Ó õçñíÓüöÇsë@_×õ« þIïÓ<}3øzð1EÇoëúüC#ùŸaþsEÅý^šˆ¸ÿ úû}qê(¸íÿ r?ÿéééÞ‹‹_0õÏoóéŸQïEÃõþ¿É‹žØúóÜç½ù\vþ¿¯øa3úþséôÆ=sEÂß×õýXP}yÉéÏ?_æyõÁôýn.s“Ôñþý]M¯õýà žß�çׯ àãŽ;PÏ×ò÷Ç~ ~™é“@ü¿¯ëÐ3Žƒ<ûvïŸóøQq_×§õpÈÿõûþœ�\P×pÏcÎ?Ïõúöç"€ü¿­ÿÏúF<žOáôööüMØBG¯QÇ'§¯øðhõÿúóõ¾˜ü88àúýy _×õóÇ©ÿ?§ô4ß�g·à3ŸQéøõ÷¦‹…¿¯ëoëÈ3ÁÎ;óÔôü^} ××úüC==OçÇóç¯4 úþ¿@üHÿõwÆ>ŸŸ4õúpzõÈÿëcžsý1ŠúèíøñïÆ~œ.´õúÿ_ gž¾€úg¯çÁöäãà€ã¯Ôúã'§øàúÐ/ëúþ¬.qÇ㟠ç9ü9¿ä¸ÿ9 öÆNÿÈßðÿÕÿ­ƒpÿË9ïÛ8ëEÅåý_ä§9ÿ>�»“Ó€3Ú‹‡õý_¨g�lCÏ9N˜¢áùÿ_Ó õçñíÓüöÇsë@_×õ« þIïÓ<}3øzð1EÇoëúüC#ùŸaþsEÅý^šˆ¸ÿ úû}qê(¸íÿ r?ÿéééÞ‹‹_0õÏoóéŸQïEÃõþ¿É‹žØúóÜç½ù\vþ¿¯øa3úþséôÆ=sEÂß×õýXP}yÉéÏ?_æyõÁôýn.s“Ôñþý]M¯õýà žß�çׯ àãŽ;PÏ×ò÷Ç~ ~™é“@ü¿¯ëÐ3Žƒ<ûvïŸóøQq_×§õpÈÿõûþœ�\P×pÏcÎ?Ïõúöç"€ü¿­ÿÏúF<žOáôööüMØBG¯QÇ'§¯øðhõÿúóõ¾˜ü88àúýy _×õóÇ©ÿ?§ô4ß�g·à3ŸQéøõ÷¦‹…¿¯ëoëÈ3ÁÎ;óÔôü^} ××úüC==OçÇóç¯4 úþ¿@üHÿõwÆ>ŸŸ4õúpzõÈÿëcžsý1ŠúèíøñïÆ~œ.´õúÿ_ gž¾€úg¯çÁöäãà€ã¯Ôúã'§øàúÐ/ëúþ¬.qÇ㟠ç9ü9¿ä¸ÿ9 öÆNÿÈßðÿÕÿ­ƒpÿË9ïÛ8ëEÅåý_ä§9ÿ>�»“Ó€3Ú‹‡õý_¨g�lCÏ9N˜¢áùÿ_Ó õçñíÓüöÇsë@_×õ« þIïÓ<}3øzð1EÇoëúüC#ùŸaþsEÅý^šˆ¸ÿ úû}qê(¸íÿ r?ÿéééÞ‹‹_0õÏoóéŸQïEÃõþ¿É‹žØúóÜç½ù\vþ¿¯øa3úþséôÆ=sEÂß×õýXP}yÉéÏ?_æyõÁôýn.s“Ôñþý]M¯õýà žß�çׯ àãŽ;PÏ×ò÷Ç~ ~™é“@ü¿¯ëÐ3Žƒ<ûvïŸóøQq_×§õpÈÿõûþœ�\P×pÏcÎ?Ïõúöç"€ü¿­ÿÏúF<žOáôööüMØBG¯QÇ'§¯øðhõÿúóõ¾˜ü88àúýy _×õóÇ©ÿ?§ô4ß�g·à3ŸQéøõ÷¦‹…¿¯ëoëÈ3ÁÎ;óÔôü^} ××úüC==OçÇóç¯4 úþ¿@üHÿõwÆ>ŸŸ4õúpzõÈÿëcžsý1ŠúèIrO"E³Èí…U篽”–=äœdÑpþ¿¯ëî;�6ÎßO‰Î|Û½€ÎSÔrBĤŒ( çûçœ ª¨ðJM&”ÌÍ'ÛËrØ-Ôç¿ô?@(é_?A»´�Æ.³Ç?/aÎcÇ?‡"�÷ü‰íãÓ. ˆÅÎcC#neQÔ “ÏOâçŸEý^‚·õÛúþ¶Iÿ§®ü™éœõ8ã=�4ïqh´þ¿¯Õ·6ÑÀðÚ#ƒ/úÉ$Æàð®8îN@rqœ_x×—õò µ¶{—Ú¼ æGêNyç‚zàqëÓ&�Ãúþ¿_ø$ž¨ˆ�ab؈ ³N:ÊØÃ(aÔwœa»|¼�s?‡R{ôÏLþ¼ QqÛúþ¿Èþ_çØœÑq_צ¢Ç®?È>¾ß\zŠ.;Á@�ðïúzzw¢â×Ì=sÛüúgÔ{Ñpý¯òbç¶>¼÷9ǯCþE¿¯ëþLþ¿‡\ú}1�\Ñp·õýVœ~Ë“îG_ò¤×õ÷V°¹í‚ÄõÉç§n; ž1@}ÿx™ì}9Ç~Ï­×àט»¿úßËéúr8æ€þ¿¯ë°½ûñïþqÏŸ§ü_ׯü0€xü{ãã?ç?Nh¸|¿¯ëAåöð¼zžçÓóPü?«ŒÎùä{}AÎ ëÓ` _×ü0õ<œœAþqÉöæ€þ¿¯Ä�Ÿþ¿=¹÷úçQwÈ?—o~œã§Sý(þ¿¯ø`þ¿ËüÇä8øºŸS×=xçsœP×õè38õŸSïßÐdzzQ@ÓŸlþ\wÇòþ[úùÿ^¡ž½ý¸üþ¿Cë@_×õ÷ЧúQý_ðÁý—ù†G�Ìõϰþ¹Åúÿ_טgê:úžÙïÇ>Þ”_Ð WÕb¾›LÒõF-.ÎMCTšÂÊæî=7O‹míûÛÅ*ÙYÅŸÞ]\àŒŸ™ÆxÊ¥z4]8Õ­J”«MS¢ªT„%V«Ú�5).y¾��äú"ãNsRq„ä¡)rÅË’)üRi{±îÝ�Ý3LÔõ«è4ÍN¾Õõ+¦qk§i–sßß\´q¼Ò--c–y™!ŽI\DŒV$‘Û¬C«Z• r«Z­:4 “�Z³�:qM¤¹§7Æí¨¦Ú»inÅN¤”)ÆS›ÑF ÊR²¾‰]è®öÒÅY¢– e‚x¤†x$x¦†dx¥†Xؤ‘Iª²ª|@×˦&‡ýŸwý²Ú“Ê M=tÏ'í†ùæ+ Ú ÃJÞX�qÅmíèû¬{j^ÁAÕuý¤=Ц—3Ÿ´¿'"Š»Ÿ7*ZÞÚ“ìçÏìù%í/ËÉÊùù¶ååø¹›vµ®ôê[×ü+â� \Ak⟠ëþº¹ˆÜ[[ëúF££Ossšuki%„J¦3$jɼ2– ¸‡Åa±QrÃb(b#Ë)P­N´c+^ÍÓ”’vÖÎÎÃ�*”š�Zs¦ÚºU!(7®éI&Òî»ZäÞðWŒüX·RøSÂ>'ñ�ir°4ˆ%”¡”Få$,F7„qX¬^ 曂ÄW¥EÍFÜÎ>ÒQæJêö½®®:t*Õ¿³£V¢�“öpœí{µ~TÒëë«èii þ$ë–ƒPÑ>øãW±in [Ý/Âzö¡hÓÚLö÷0‹›K ¡3[Ï�OòðÍÇ"««�\Ë.¡?g[0ÁR¨”eÉWBœùf”£.YÍ;J-J.Öqw[•6"kšzÓ�Úæ�)É];=Rjé«=zYì·Ã?‰�q«kŸ¼q¢éVb6»Ôõo kÚnŸj²Ë¼FâöòÂh³Í1ù² y¤Ž$˺ )fYuz‘¥C‚­VwP§KB¥IY9IF¨å+E9;-okŠxlD"ç<=hEZò•*‘Š»²¼šIjìº7bìß~,ÛÅ$óü/ø‡1+I,Óx'ıÅó4’>˜¨ˆVb9$rj#›åRj1Ìò÷&ì£f¶ü’©«ô+꘤›xlBKwìj%ÿ¤Ûïgžº±¤&Ÿ.«¤êzdZ¥”:ž—&¡cudš–›p7[ߨ=ÌQ‹»)Ôæ+»s$ HÀƒE:ô+:Š�jU]Ž•UN¤&éT�ÅN¢‹|•#Ö´–·A*u!Êç ÁN*ps‹�›39Óœ$ãR„–ñœ\d½S³_‘@žüg'ßÛüúûsZ“ý_ˆœÿõùíÏ¿×8 :‹¸Žs×Ó·¿Nqõ?Ò�ëúÿ†ëü¿Ì28ü{þg®}‡õÎ(×úþ¼Ã?Q×ÔöÏ~8öô¢þ€'§>Ùü¸ï�ä9ü·õóþ½C={ûqùý~‡Ö€þ¿¯ëïþxçüñéëÿëçý_ŽâuútÿëgÓñþ†•Ãúþ¿@öïþG^sÆã޹Å0ëý_Ö¢ç8çŸQúñŸÔ�þ±ý_ðámý9ç¹õç¯ëõö DøQð›â?Ç/ø{á_Â_ ê~8ñÿŠå½‹ÃþÒ ²Þj §i·ºÆ¡ –öâÒÊÚÞÇKÓïu »«Ë›{[k[IçšdD$y™Æs–dv'7Îq”°n0xŒUngNš«V�jÐŒç9T«R�8B”¥9Æ1M³«‚ÅfªX<â15œ•*0µæã NnòqŠQ„e)94”Sm¤…„"ðç�ü_/€¼U…¾øŽÏÂ?5étkØô¿x£P¼ŸO²ð÷ˆnÞ1™¬\ÞÚ\Úŧܲ\™`•<¿‘€u”¼N³Åæ¸iãrÜ:¯MÕÇa)B5*bpÐMº´aNq“©ãË%¨<-RÄWxjÊŽ¤hbj¸K’�iIÆ4êJÖ…G$ÒŒµm5Ðó¯\ý}½�•霿ÓþŸõùGòã�åøþ\úš_×Ì?¯ëúè(#�^Ù÷÷ôëëý)ƒ¾ ;g¿N½øÈúõÁ=(ëúÑ~�ê^ø%ñc⧇>%x»á߀õÿøgà÷†GŒ~&kZM¼sYx7Ã,× jÚ«É4L 1ØßÜ­ÖâàYiÚ�ù„Yi׳Áäf9öO”b²¼g˜aðx¬ëõª…i5àLfeB¦+/Âq—ðç bqøjU¸œ ó2ÀÕÅP§UªU+P…Jp©îJJZSÃü ÆÜYG‰á^âž%Ãá*Ɔ*¿ðþmœÑÃVœ}¤)b*åØLD(Õœ=øB£Œåy&µ2n¼-â‹7„ï¼9¯Yø©.â°o Ýi…¿ˆúuF†Í´imÓRs c1[›a4‹"2©)>æŒø;1áxq¾_Åœ5�àʘ*Ùœ8»žåx®ž[‡u!ˆÌ#ŸÐÅTÊ¥�¡*5c[±oJTª)ÔNKÎÄpö}„Î_b²Lß ÄÄSÁË"Äe¸Ê9ÌquT],,²º”#�XŠ‘œ%Nƒ ªÍN0|Êý§Šþ|að.�ž ñÃOøsD& Ú¦©áýBÖÆÝ§†;Û‡€¥„²±b¼0Hd0¥ÁQù÷}"¼ñ=Ÿ ð'‹¾ñWÁV”2l›‰ò¼^c‰§‡v¯W…†#ÚfTi%Ï:øâhÆ›U\ýœ£'õEáO‰|%–Ç8â^✓*“¦¥˜f>7…£*©{8b«J—&¤ß»x§J£�à£Í�ð·„Êö•¥K N¤©Ð¦šukÍB�4ïRqZ›>6ø_ñá»ÚGãßø›Â_o µÝ"öÂÚõ£9•-.æˆ[\IÃK2´‘£+ºªÈŒ||dð£ÅšxÚžx‰Âoý™ìÞcG‡3Üe‹ËãU~æ¦7B´±˜JU�ãFµz¥Vp© s”éTŒ}>*à7àyaãÅü+Ÿpç×9–¦m–âptqN�ý¤pØš”Ö½JkZ”éTœá Î1ŒâÞxgÄ²è²ø–/k²øv<©µøô�AôX¥ó<¡šªÛ›ä2/cÎÉ”ÆìŠúмcÂ4x‚� V➣ÅXŠ~Ú‡ ÕÏ2Ê|C^�³UÝZ9,ñK2©KصWÚC (û&ª_‘©42 ö¦WS<§’æÓÉiKÙÕÎ!—c%•Ó©Ïìý�LÂ4^ö—§Ë*ÊNk—âD~ƒ®êñ]\i:.­ªAb^ϧé÷—°Ú)Gpne¶†D·R±HÙ•�I¢½¯pæE_…Îøƒ$ɱ9Œ¥¿šæ¸¾¾:jtéÊ8:8¼E˜™*•iÁª1›S«N:JqO,O›fT«Ö˲¼ÇG ¯Š«‚ÀâqTðÉÆSOR…)ÆŠä„æ�GviÚ,ÈÉ#œþ=;güæ½»žwËúü…Ýø?oÌqú÷ -ø_×üÎùä{}AÎ ëÓ` _×ü0ߌäûûŸ_nhëúüOb¶ýŸþ1IâÏø&ûÀzöƒâ\ÏmákÚI¡G©ýŠ8®u ˆçÔ|˜þͧÛL—W’�Æ8˜G•Ò6üôžðŸqïˆyw‰|5ļ/áž ‹ã,g c©ñl£ûBµl.W…«†Êž"«Æf¸Ê0x -EU¯ç:t¡R¬M£à߉“â>á\_fùFsÆëPÈ(gxiå0Ç,-:u±µéÖÆªPú¾ …XWÅTM¸Sk–3œ£ b|VøWã/ƒ1»ð?Žm-¬õ»[[Kàlo"¿±º±¾Bö×–—^) IÙ’ã–)HPŒ¢ð[Æ®ñ÷€ð>"øs�Æc¸{ŒÇeÒY޾[˜`³º¢§ŒÀãp•®¡Z’�*ªt*â0õhÖ¥R•y©;y>!xyÄÞq6'„ø³ C šáèañkꘪxÌ.' ‹‹–‡¯NÎTæãR5)Ò« ”çÒ‹ZùÆG�Ìõϰþ¹Å~°|Gëý^goàÿ†ß> Å«Ïà�x‹ÅQh m.·&…¦]j)¥Çz·oh÷Í8·[„°¾10®-g+‘có¾;ñsà ëdx8ó…¸.¿UÆQáê\G›á2©ç5rù`iã©åÑÅTƒÅO <Ï/�xÒætÞ7 ¥gV7ú¾à^1ã*y•^áœëˆiäðÃÔÍ'”à+ãc—ÃL°ÒźŸ°�xàñN››JkVߎӟlþ\wÇòþ¢)oëçýzžëá/ÙÏâŸ�¾ø«ãƒ¤YOàŸ®§.£<ú•µ¾¡qo¡Ú%þ·u§éí™.`Ò¬ÜOu#¼@“Çiö™ š4þoã¥wƒ>øÍÁžq.y�¡âO(£”ápùN+•áqã|&K”ñ+…sÌ6CžâpxL›8¯—×£—fxœz©, *¤cKS5gB4äý¤iÎJñ‹k²øÇû;üOøuá{?éVvòø¾Öê}i:„:ºÍ=ƒÙG¦»Zƒ‹ë'ÔlÑÅçA!»„ÚÜ\Y~Ào¥?ƒ¿I ã¼1γ UÆ`ðüAý·•b29ÐÃftó ¹^kN8Ư–fò¬ÊT*Vt14¾¥]c0¸Y(©}?‰¾ qŒƒ Æ9~�^%¡ˆ«•ÿgcifQ©[ ,,1¸ºc0²Ç`ãRÕZ3úÅ7‡¯Y7Ëâ×6—VRo-®-&ÚEs �JQ·(`’¢¹S´ª¶Üd_Ð8£õã?©ýn¯ëúÿ‡0¶‚~œóÜúó×õúûPžÃ§QÏ^¾¸ÿõНõýwž=3Ó¸öëÇOË?J.å÷‰ëŸ¯·±àcÒ€þŸôÿ¯È2?—/ÇòçÔÒþ¾aý_×AAzöÏ¿¿§__éLõÛ=úuïÆGÓÿ® é@_Ö‹ðüÈíéÇáמF;}}(×úþ¿Ïÿ_ðçŸèzóGõý~¡ý_ª=G¿áïŒþ&€þ¿®ý.'åŽ õíÇ^˜ÿõ—/óüÀǧ<úqƒ×ôÇÿZ€ïý^L^\`c�òýc ÐÖÿÖ‚g‡òäû‘×ü‚(ëúû¿«X\öÁ?âzäóÓ·†O >ÿ¼Lö>‡œã¿?ç�Ö�ëðëÌ]ßýoåôý9s@_×õØ^ýø÷ÿ8ç�ÏÓƒþ/ë×þnH9çñéÛ?ç4\>_×ä.ïÃùû~c�×½oÃúþ¿àp?Ï#ÛêpO^˜ã[úþ¿á€žüg'ßÛüúûs@_×â'?ý~{sïõÎ(¢î#œõôíïÓœ}Oô£úþ¿áƒúÿ/ó Ž?ÿ™ëŸaýsŠõþ¿¯0ÏÔuõ=³ßŽ}½(¿  é϶.;ãù-ý|ÿ¯PÏ^þÜ~_¡õ ?¯ëúûÅ?ž9ÿnr[®ïï+pCt9cé´4fŠ;øÍͺ„¸^n –=K¨ïŸL|ÝÆî ¸wù˜ç#åüzý}qߨr)‡_ëúîjégç¹ç�³KÇ~Ü{tü¿*<ÃÌÌ×úþ#Š[ ¯ëþ½in÷O…ùQp]Î6¨êxõÆ@Ç'€Hwþº‚Ü�RÕ46lk•–aÖRxt ŒíÎw8'w |£�zœàížý:÷ã#éÿ×ô ?¯ëEø~dvôãðë€O#¾¾”ëý_ˆgÿ¯øsÏô=y£úþ¿Pþ¿¯Õ ž£ßð÷Æ@_×~—òÇúöã¯Lúˇ—ùþ`cÓž}8Áëúcÿ­@wþ¿¯&/?®01Çù?þ±�hëëA3�Ãùr}ÈëþAõý}ßÕ¬7·^ü}}~¿_ZŸëúþ¼†�|t8úÿú¿Î(ëúüÃ=9öã8õÎ=zûÑëúþ¾ñ]_ßù†ÏáÆxûÑý_!Š>cýÈïÉ÷õÍëúý7[ Œq’:ž¹ ?§§õýuŸ××¶9çÛÔdæ€ÇŠWëóÏõüI¿Qžùî þ¿¯È=ºñ8<õãúÑpÿ?�gÔÿžOæO®(þ¿¯ëóõýZ=òqú};û§#¾ ×õø‹ôþ¿¯êêãþsøcôíÇŒLÿ#ƦrO×�9ÇOCHZýãÀƒ©éžÈ<ÿõßõaÿ_wüfÈÀ8ãП_¯×Ö�_ðâ!‡\r?þ·ùÅý_˜„ó×¹œcžž¹Ç¯_z/ý_×Þ/ë«ûÿ1U±‘Øõü¸Ïó£ôõý>€Ã¸äóéõ=óßš×õýh×õýn7‚çõÇõíŽyöõ9 Ïéý:õãôü¨õ gÜúöéõ9íøb�ëúþ�ý¯ëä?ç¿¶9çÿÕÒ€þ¾ÿÊÂúþƒõ÷$wê¨/ý0þ¿3Ž‡ÓŽ}z?×½ úý~¿ ÷Æ~Ÿ@°¿aÚb?Ù[ö‰ð¿�µÛ®ü1ñž¥ð×ãw„¦‰î­ø“ã�Á?¾ü“Ö>=ø§{á'òüiãM_Å~-´ÔôŸø@Ö7è²[é·zÝÞª’,miæií¨}ÎwÅ\GŒâŠÜÁ\¥cr¼Ÿç9ÒÄÏ.Êiãð88<éVÄcñmˆ‚•XP…›SµOeààrœ¶ŽU ó=­‹ö8¼E\>_�ÀºQÄâåCLF"u«Fp¥‡¥?ÝÊÐuïðÞ<ÎøÃû1þÎ^9ý™üGû\~Æþ,ø—ÿÇÂïxcÂ_¾ ühoj:øk'Žïn4ïøÃFñg…l´�Äž ñ¯hvPM¦&µox³Is<¢ÞöE’ñ_eüS†àÞ7ÁåZÍpx¼og¹Öià3E—Ó�\v ¾Rµ|6; E¼EI*®„¡e®hJf;(ʱM\ë"­‹ö8:Ôhæ8 {¥,Fâ$ãBµ:ôc uhUŸîâœ}¢•ÛnÒQòŸÛ›ösðOìÉñ'ᯃ¼ªø«VÓ!ʰùN+ C :Ó…|³Œ›¯(JJ®&›�HÅÓ§M{4þÓ’_å¹îëû|*oÁ/tøH>!}‹öزð…ÏÅI«áÏ´ø~Mâ…·‚oGÃ÷ÿ„OÉÒ–=*g¸¶#ƒÅeu%”Ím›Fùïõï8ú—Šø�«e¼ü 6üEøÃðïâߊ¼5ñÆ~3µðž›ðÂÓCÑnµ­8ø?ÂÖÚu½—‰µ¯øgTŽÃEñ'‹5 ;HÐuíOIÖué6zEî›z¼œq·a°™ï`ò³$̲l+.ÀàgŒ«›O^*,n.Ue<- &.“©_ ƒ§V¶#Jµ xšÓ­ ¬äâ E–Õ­—åÕ³ V; �­K^¼hC©Ó•Hû **5ªV£5ukÊ0§Rp©*PŒ%{üãþ ÿà/ÚÀ_h¯ÚǺŸÃ¿Ù÷á]Åõ�üÚ1·±Ôõë½Hƒ_ñÔºÕý–£™¡èZu晢ÃHÕ5=r÷Q›OÓ¤ÓnôüÝpñïc¸—pÿàiæögNš­Í:t!Z¬¨aâ¨Ó�7Vµz�ª×´«N�SU**�Ÿ»¦C�ÐÇÐÄfúòÃà0Í©8Z2¨áR£çq—,!Ú3”ܹbâ㯾|^ÿ‚x~Éfo~Ò°'Å/ø•>Á­Þx·Áž-{‹ˆõ+ ÚGªk¶ÖöúÆ…áÏøo^¶ðùŸÄiÔ Õ´ïÛGo§XÛé÷{…”ø�ÅyG`¸wŽòÌ.æ’£ &3£Nx™:T%)Q­ˆÂâhJ¿- žÎTªaäåRrœb û±yU‹Ë«æ9&­O«)Ê­·jQ¦”¦’œ)Õ§5Nõ#Ì¥ŠÑJ-ó‡?àž_°Ö…ûüý©><|Rø›ðæÇÅ:w„µ¯ϧÜÛë±ø†ç\Óõf_øGFÓü)}©i·úŽ¡ ¥Ò_´ZçØ´m7UYb‡ÎþØÓyñÆÕø¿<áœ�,Ës ájb¨àcR2 èF„é_‹­S u)Ó¦çM:<õªRi´½•K§�d°Ê09ž7ˆÃª±¥:î-MTsŒÿuF¥)FR•Ÿ5§hFWJüñòoÛkþ ãð7Á¿³ïÃ_Ú£ö=ñ·‹š{Û{9¤[� ÁÚØ±Òl/nÁõ¯_Ü�Q,o5h4m2Ú9 ·ùÿøˆÜkÄ5³g àrŠF[9FÌ*QXÜZP”Òq¯‹£ÏV¤#í4#ìÜáJUªÉ§.ÿõw%Ëᆥš×ÅψŠrxxÍÑ¢ÛIÙÂŒùa7z’|Ö”ù"´_þÒŸðJŸŠ¿ÿj=àÀùŸâVŸãÿjÞ?ø{¨x�Rм7©@¸6¾$ÑuÛë¹´ÍmkÃò=¤²]Y%•¶©eªi÷VöVw\ØÚ}‡x¡•æ3[=΢²ê˜ ],a =:øŠ~Ú¼y°õèB ­eFºçJ3s•)Ó©NqQœ¼|dž18|ÎúÄkÑ�|<ªJåÉMÚ¤*JN0s§u¬RRŒ¢ÔSm.#ÅðI/Û�Á~ñ'Œ|AðÛÃÖš„ôcÄÚÝÔ_¼ w%¾‘ é÷®§qµ¾»%ÅÄ‘YÚÏ*Áo4¬¢8‘ÝÀ=¸_¸+‰Ã`ðùŽ"UñUèá¨ÁåøØ)V¯R4©ÅÊTb¥9E9I¤·m-Lªð®uF�JÕ0ôÔ)Bu*5ˆ íEÊM%;¿ul“lúö*ý€>øßöS׿k¯Ú"çâÿŒ4Koê:V‹ðãà~�6±®G¥i½ž‡{©k~›£jzíåëêRÝ]Ë ¥Ö�¦èž³:Ö¡{wöÕM3Àã.<Ïp\QC…8~9F´°ôêÖÌsªŠ�Vµ)×…:5*V§BTÔ"œãZ¥|Lý�8G“÷�ù>E�­–TÍs‹«RP†y¨BJ›”ãJr—3m¤áS\ÒošÑ«ÿ ûû|6ý±ÿeÍoáÿí{ã_�¾5×Åæ«áÈ5$Ô¾'ü;ø‡¤ÚÚêѼMe¦øq5{-'ľ2¼ÐtË«-_ÃZv¯ ½Ž¹¦ë÷–¥ì5ý¿ÇY�q5~A uƒ¡ÉK*nžY˜eõg:xúØiÕÄ{)ÕÃàá^¬gKR•u:(BWä”ýC#Ãæùlèf¶ µKÊš—6'ˆ‚R¡ ª4ùã •¥¸Îœg N3j×>Ñÿ‚Òøà7Ž7üN±¶–ÒÿE¹¹Ð<;b÷÷í¥ÛßÙCkàÿXxsÃÿÚÖ×E®·ãÝV[kÙá¾Ô&�M´·¸‡Jî£âˆœF³ ×…²,ö.[9)Ó­×ÄTTéûYBnX¼<ñý”£VT04”¡S§RR‹«„ø‡²ï«ásL}o®bRjPn�5Í.Dâ•‘§O™8)×›M©KÝIòøe¿ü³Âþÿ‚„xöeø‡â?ø›à¿ÄßøÓÆþñ^‹=–�♬ü?¡ë—GBÕ§}?QÓS\е]6Ö=R{;±jš]ö�¨A—5üºn�íËÅ N7€qüI—áðØlã-Æ`ðX¼-hξN½zöô¢ªS¨èW¥RNšœùéÕ…Jru5R¯áŠT3êv"¥Z˜§Äïi¾ —➇âx¬ÚMSÅ0x~àüQѵîNñ–±ã6¶¾²¼ñ<Ú|^ý曩Ù[M¢Ì?œsø`)ø‡�ÿÄB§›<·S²ÊØg;RÃJ¼³+SµÝL”' 2©(â´©Jr�hŸ¢à%ˆ—`¿Õéa>³N4^*R¼ªªoë0•þÓ­gUÅ:ZÆqN øã¿ÆOüWÿ‚†~ÃÑü]ý�¯?fO‹ÞøÕðÞÛ\×îñý¾�m¬Å%¬p™.~ɨIàïCvÌÖVEŸ‰�dYøEñ¾ çU2® y^&ðÁñK )[’Xì«J‹RnÑæ¦±t§:ÓÃ&¬ágŒpqÅ`>µNÒ­—T^Ñ+ÝP® ¦¬•Ý¥ìª'´bªu¹í_ðIo‚zGÀ/ÙgÀvZÈ·±ø¡ñÚÃQøß¬éÓÇjçÂòLðÔ$«I7öv—áíSÃWÍmra{-cÅzœ?fIÚì×�â¦sW=â|tèóO,ÈêSÉhÔ‹n—ÖW¶«‰}´«ˆ¥‰‡4y”éai¾g³…°pÀå”íN:2ÆN-Z~ÏÜ�5ß–4åJV êÉZ÷?)ÿàžÿ·7Ç/ þÓý‘tçð�øE­|hø™â\x}åñ0�ZÕ¼]â{Ñ´5Õö¯Í6OåÁ˜I~¿QãÞ É1<7ŽâÊ‹ý­G&Ë\q a¯FŽ ÑönÿºÝs«Ë]6>c!α´óT}—Õ'ŒÄ'zw¨”çV£÷ù—Úz{»i©sþ óûoün²ø³ñÓö8�ü">Ýé¿ üåoÈÞ)ÿHÐ|ñLk‡Pò×þ*Ň?èÃæýõG„ü’Ï*É8¾Ký¯ ™—+öéa}ÚøÜ½^�³¿û¿÷þ?{È|WœãV+”¯eõG=ÿwzºÓ£ˆøù¿çç÷~<ÏÙÛsâ_íÃàüµý�þhß4ÍzóÄiñ.{KŠãL°û-÷…#ðìºÓøƒA:¦¡oyâu|³IåÅjn7Dm±/ä\—pV? �K‹s:ÙmJü¶T*¸ÕŸ41O(QT+ûyÓ”0ü°i]Ë—^m>·9ÄçT*à–S††&5O¬©Æñ�¥ISN|ðöjJU/+è•úkø¡ÿáð¯Ã ãÏÂ�W–z6™ñÅ>ÖµO‰6ºU¬—…œ:ìv¾ñ´–ÛRëUÕ$_X6¡qÛ®-4[X®.'‚ÞÕ`ý“ÀüVe_#Í)b§Z®_…ÇQ¥—J¬å8Ânƒ–/Gšî4©'…©ÉÉÖ“Œc)IËã¸Þ–ì,éF¯V„åˆQI9GžÔªNÛÊV«f¹š‚M´•©þÇßðOOÙcãOìGªþÒ?>"xÛá•æ‡âOÅâXêzdžÑ|5á�kMI™t ô+ËË­OQÓå¹Ó,LW—rjÞØÍ•©Ééwšqoñ>MÆt¸w&Ëðy”+aðΆtª,MlN&�K'^5áÒ§QF¤ï¯e ©U¦Ÿµ‚Êr³“K1Æb+a�:•=¥U8ºp§JqOÜpmÊQ¼#fß;‹P“÷Wñ;þ ×ûüeý– 㜳 †§šÔ£O[ EЖ*²¡‡­Ô±XŒ5|*­zUâåí¨ßÚ:—¦éT×ÃùF3,¯�É15ªK ʤ*¹55Jõ á:TêB¯'½MÛ’[(ûÜÑôoÚºÆ Sþõû i·%þϨø÷à��Á‰‚IäÞx;âE¼¾[•`�åÈÅ£ØÊž•çðµIRño�ªÆÜÔðÔã}Uá‹Ë¤¯Ý]¢Rá<–/iWÁÅÛ³£ˆNß¡ðŸü;ö7øGûxÿá_†~\ø¾ãNñŸƒõ�wWok6ZÍÊÞØk+§À,å±Ò4t†³±.’E34Ÿ0qÊŸ·ðÇŒ3^/À昜Ú8HÔÁâèÐ¥õJ3£ Ñö’sS­Y¹slÓJÚ[©áñ6Q„Ê1jxWUƵÎ~Öq›æŒì¹Z„,­äõ>�ý¬?à—|!ñ7ö$øMðTñT!ý¦fñü~(Ô¼s¬Úk–Z5Ÿƒt_‡Þ!½Õôû}7FÒeHt­[ñ>¥shòN÷âÊÎÚ9­˜4²x<-âf?–ñžkžÒÂËÃkð´ðTgFu§Œ­�ÕIT­U7Vµ 58ÎÑP眜d�—¡špÖ–'&Âà%WÚf.º©*òSP�Pœ§A¥N¤šûVJè÷/ÿÁ:ÿà˜^øŸàïÙ[Qý¡~#hŸ´]åÿ†LðßÝ‹˜|G>®öW÷sÛø.?øoVñN™#Ãá[­C¬Ùͨi,~$¹–ÖÃVñ0¾ ø•‰Ëq|QO Ëëpü!‰³§YaãINŸÖ ¥ŒxÌE,5Dž*~ÅÑš§U'‡Š•J]•x†éâie’Çâ!˜9S¿3º¨ågì›TUs« ªQçSNPº¨ÚŒótØ{á·Àßø*gÂß�? ¼}ñŸÀ¾Õ~êÿn?á¬n_‹âLƒ„ɳ�à Iª˜˜P‹Œ§KëÅÕt±´©T„Üqa �š*”j*W…áìƒ2¡ˆ£–ãëÕÆaâ¯VzSswQ—³•óP”âÕé͸«7)^<ÿÏ-õ•Þ™{w¦ßÁ%­öŸuqcym.–×v³<È@x¦�ãlSŒðÇ÷êu!V©NJtêB3„£´£4¥/'š> §8É4âùZ¶Í;5òµ�ÞŸÛÎïö*?±—ì7ö= ö£KɾüSÿ†ukŸ|'’×LÿŠâUÿ‹Ò‘ø29uÜëû$ÿŠü;³FßÏ{¶qüõáì8ëýwãç\þغ�íãÿ�Ÿü üU þßxÁº7ÂÏxº;™¼2Þ5ñ'ŒtÏ_k^2Õ¬ J-L³Ò-ô¦ûeŽ®O“iu¨ýU.'ã~.Ì3˜ðU.˲,“1ÄeÛõ<Ã_6ÌpN1Å,W N† �G*R¯Vu¥[Ü©Gâœ)ù3ʲ,›‚–y<Ë�Ça©ã>§—Ë B<5{º>Þ­xÔ•JóŠRTá({ÑžÉËÅk�ÙgáÿŸüý¡?gßkß?fï�ö~!‡Â·Þ4Ól4ˆžñ¯ƒ¯VËÅ¿ü}e¦Ó.µM-¤†k-J¶²Óu¨ÖöK1§ÛØjzÇ»Á¼[˜çüó†ø�.Ãå|OóÃKOV¥|·0Àãiº˜<Ï.�[Õ…©J50õe:´³U'í%R•?:Éð¸: Ï,ÄTÅeY”jª2¯ÓÅaëЗ-l.&0÷¡tÕH(§½ËUÔ_Ø+öYðoí?ã‹ñUñÔ~øðOÆ/ýŸ>;jžñ‰5ýPµ’K_ü?ñ„´=Þ{m:õ#ÓüC¡jöbö9æžêÜÙÚØÛ.³9aǸlóû+аYFc–b°3Æ`¸“‡èâ°Ø\>"œÒž_˜á±•ëÊ2«êá±gÈ⣠sΤ½ƒÌpü?S±™M|fK¨WË3R«V­9EµˆÃU¡Nšj\•iÎ<×m®UÏïgoØ_ö7Ö<;ðö¸¸ý¤~'üºð¯†|Iñ[Iø­|=ð�„þ ?Œ´ÛMJð�¹ñ®‡«jž2ñÆ�áÍJÇUÔ�Ôº'‡™¯l"„2\Ë5¿ÏåÜKÇümC�plxc*áØbñx\¢·P̱˜Ìñ`jÏ W/¨×£G€«‰§R�.E_¹*9YÅ)z8œ¯‡r*”°9ÓÍ1y”¨Ò«�†]S FŽÛÂ5!E}bœç_ SŒåwN“æŠZ6ÕÏ ÿÁ:¾ê¿¶ÿìµðhüAñ�‹?f/Úןð²¾|JÐíô¯ üAŸÁwñF¬Ú>­g¬i>"Ñôxo_ÐIñGI¿±¸´– ÛXl¤Ô¾�¿3:<Źßöv Å|ŒþËͲ¼Dªã2Øã£‹ÂQöôgB¶µ|+ˆöØf«S©©BRš§ÍQÑá|,øƒ'Àýf½l£:£õ¼&*š…KÃÊ�iû9Æp«NéT¥ÉUrJ.-I(¹Z7þüÿ‚e|BøÍì�eãŸÚ†Û⟈¼auð³Á¿´Tóü5—á­ñAõ)´Êøug§MâVð‰2©€á9ål3lw Æ9¢Îhå^Éb1ÌçR8U˜a°ÜÕkÃêžÂ—³«,K„UKÂå¼%‰Ç¬–8ŒÞ8ʵÞ†hÞà§‹ætéÛ :¿W«VЧ/mí%Íý’“qñ߀߰ï†.5ßÚ«Å¿µG޵�‡?ÿbÏIàÏ‹·¾²³Ö/Zœ©WŒiâ(¿oJkéøJ—WÍý¾U<Ç ˆÃ`±ÎXLÆT+ÇJ¦¥'<=z§ìêÒ”ÔêQ© )ÓnT潜¢9ùþGŒL䟯 sŽž†¿¥Ï˵ûÏÙ¿ÛoÀzÇíqñþ Õñ§ÃH÷º÷í§ð{á�Ãj¶©%Û^üoømâ¨>üDÔ'�³Iþˆ&Ðxî}–ÚÆI%º¸�$�à<Ƈå¾%äX¦©áø:Ís\%µL‡4ÂK9Ë)ÅY/—ÊâýùTIB.ÑwŸá§�b¸cGÞ©Ÿ`pxJÓ�½Í˜a+,&MïîÞ•î´Qwm&Ï ÿ୺ǀ?hO€>ø•ð£K·±ÑÿbÚ[Ç¿±¡ «}¢æïÀúw…|;7€¼O3Æ@:—ƒu­7KºòâŠ{ÝbXáY>oÁÊ� ñ'+ÍêÊ¥n;ál»�)¹û±†>¦3à îÞ'Ùc¨U­ ·tS–·oÔãIá³<¶–+d¶'‡ä–®XxѤðÕ�´T¹¨TŒ‰Êm.Ç—þÓ_|cñ‡ãWüçþ …ðîêÇIÖþþϾ3mK΋Ið�ÄÏ‹ZEÇÆß�¾ Ô­ã̦3ÃVú^¶Ð+‹­FTpˆn.¡Zõ¸Wˆ°9.Gâ?ŠÙ”*V¡œñ+ê>Ë•ÖÆeY=häY”ž‰ÕÅJ­krÒOÚKš0lãÍòÚøì p–Q…LYKÛóÝB†/˜ff–¶…(Â¥®¥&¹Uœ‘ãzWÃ�ø$lj¼}iû?hßÿk-7Ħ¹‚tOÚ“V î>\øÆæüiÚõ÷Ã;X ñ ¯ÂËûçIm/GŠWÄ0XÏoy¨Ímh—w íÕÍ•®x6ôkžÑ,î<+«jwš†�kw¨éÆ[ˆ£8‡Ä¼tr~Î8C/ÂæqãLÒ––0u)UŒëáꥇöôq¥„­COØbñŽ.�(R­(S«ËÌ»…è0xçÀ>2øËð‡ö(ýœþèÞ:ø­ãoŠ6¾ñ'ÆýBêíô�?þÒü$ÃK¯xûXIáðØkyìtå³¹p\ÝËccu×›ñgðÎS’à3 Iœñ×fÕ²ü£”Ë…ÉiÓŒj˜œM\eñO—Pq–%©F¥G88J0U*CQ“f˜¼v# _‚È2¼%"eÜŸQâj<7›å™…,.¶7‡á˜`±95iã°“¡:øltë×ԭN_k ”14kb)Îp«Ñïð�.Äñ_<ªyž‡�Z�¡˜¼=zXØ,=hÔ�:´# PÄBuye”§ RŒe ;œ¯ìy«~Ѻ/ìEÿÔ?eh¾(Íñ†?Ú[áiüÑuíÇI—Uñ2kÆÏLð݆£ªKd4ó!ÔdŽÑâ†Ø3Ì苼uñ­¯ÇžÓâ甬•ð¶të<î¾ €öÑ£…xiWR•SÚ[Ù'4Üì’oCŽy¥>âYdÿ\xåšày>£N­\G#�US–£)¸ò_šÑ²Z¾æoÇ—ý¢5ïø&ßįÁE´ßZüa¶øÉðÖÓö?Ô~1hvúÆÉâ¼’ìüeÒ¤´¿²±ñ²ø/ ÚC~b×ì Óá ûÑÍ-Ãiˆ5áåÃXò¼7†•p’É%’f“ãJY."XŒŠ2‚�ö%U:s©€y‹ÅÍÓ¾r«õnx¸¨ûVFbóJœ+‹«Å­zÇaVI$ø­¤ü ÖþøGÂ_ÆZmž¿¥øNßþ]VÕ)ãŽ"â.(Ê8F§ 唸WO:ð?Ä[O§é×ZÞ·ñ“Å"Ò5Â]3QÔ“ÃÚV—á�+ÝkPµÔ®n—F·Óå·’²>3ñ‹¥˜dùnU�dÇ âëeüM˜ærÆcòÉc£R¬0ô2L&µ7‹Ì3 iFŒ¯ …Tpø¥‡qŒªTÇV© S‹„çì¡ TÔªJ3“öj6ï ñæ7êüeƒã<./Î8Äg5²¹U–]ŽË±:Øü?.§‹šÄE×ÃМ^¬›öŽ•§ Öt(yù—Ðö™-l’­lF ˆ©à¡‹QXšŠUᇭC*)Òj�J‘~Ò .U+Ũ{Iú/Å?„?ðK?�;Ö¿g?xÛö¶ñßÄê·> ø�ñóÀP|0²øiá¯éÒ¥Ž²<1ðÏT†ïÄž#ð¿†õt¹°ñ­×Š-õ¹eÓõ(ôBÿ6¿™”g^-q_C‰°ËòÌucrÎÌ%šÏ4ÅeõS©Cëy­)C …Åâ¨òÔÃNIPJ¥'ˆ§OßK¯‚á »S+Äb3¬F*„Ý Ve†Ž8JX˜¾Yû,$Ô«U£Jiƪu•Fã5JR÷[ö¨ÿàŸ¿þÿÁJbïÙÃÀ_>/Zi_~ xKâ^¹ñ‹áÇŒ´¿ øÒÓÅZï†~'Ï©êÿ ¼KcáKfð÷…u3áI4H5]7[ÖbÑ5[Ûkí^îYÒh<7â6e�x]ÇXsr¯�ÇP¥†Åâ(PÄÃB•YÂŽ*’´+ÓOܨ“»�4låyeuwdßÓ?f hbߌ¿®¼_â“ûJh¾.ðŸ‹tmfóHԦѾ9ø ÅÖžÖ¼5¡G¥èz$ºn�®C«èÚ‡†ôÝeõ]JKyfŸûjú _+‘ñf/Äs’gpÁa?Õzø,˯ü(ñ-Þ·¨hÚƒéÿ´¯ÃŸÚø'âOƒôÑ¡èé:5¾«®hQhÚ^­m¨êe åÚkšÅ´±=¿Ïøwâ>3‰ð|K‰â *žN°ù¾)פªp¾g�ž;+ÆÕöøŒB­^Thbz´eJ�ù!ì(I5/C‰8j†U[,¥–׫‹X×WUÔœ%ËšákÇŠ¡gNŸ%5:”Õ8N3ŸÄý¤Õšõ-söKø]ð÷Å_ðT/‡¾2|{³ðÇì¿ðKÃ×­§xçIÑôïŠ~3´Õt 7â†>%éz?„ôÛ_xIñ«ë6š?‡Z;K˜&Ò-onµ[Ù‹òpüc›fXO 3,ç$áéâø¯>ÅÊ ®µj¹NtqrÜVWV¶.¬ðÙ�l¡:ø•Ï*Ó„(Ó‰ÙS%Áá«qvŽÌ£G(ÀRRåÄBœ1•ÔéÃG t`ªá¡_ÚF¬špŒ¥9;ž™ñ6ïö,_ø%Gìz|] þÔSi/ã�ŽqøI<9âß…Ú�¿Åµ²Ò‡ŒnüG.§à««kχSø‡l¾Ó´Èl|Kk£ƒUÕ//ˆ¹VU:ÿˆ»ÆŸSÄp𬰯ÎöÚÇEÔuÍcSñF‘”ºu¥®¡x†[_‹e⇊˜¥“Ò©Z¿ b1ù¶v±uð¸t²'N†Ž :5q8¼dêÕ�9T¯J… XJÎj¤çN ÄÓÉ× p–#7ž6q§ Þ� &Ò§V¼§˜sT©R½e8R£EF1’�9T©:ÐQqQ”�†ÿk/Ù·àO‡~ üý¬?e_|G¿ø)ñoÄ^,ø{¯x/ââèxûá‡ÄïAku¡]k^‚ÓF×´]oKž}SBº‚Ñn­´ë[wÔn%¼Ô$³°ûþ⎠Äç¹çñv,§žäøle‡ÇdßYŽ]šåXÙJœ1¡Š”ëáëáêÆ4±”Ü%RrT¢¡MN§Ïg9V]K€Îrj¸©eøÚµ°µ(c½“Äá1td麔’§V�H7:mG™E.få.XÍÿçø™â½âýŸÂû«Tð�ŒS\Öu»I, ’îkíÃwóXKó/Ÿl‰$)¾(Ø$ƒppx¯óÛö¬xEÁY÷�xï³6§p%NÈ8wO0ÄRÁPËx‡‹2Ú�,F]}[R¥¥ûr~Óž3Ô †{ÏÛé�é-4BScqâ; 8îõo‘š;¸ôí*êÀKö]Jî Jqü=ô‰ãlû)ýœÿCïòœM|6Ä NqˆÎáB³¢³,/ fX긫ïÆpUs\ë™Ê�[ÓúæS�¬Ü]ßú?žË1ßK¸£J�\O ÑËéeέ5Qá+gX<418Úì¥ D0Yv#§¥ì1ØŠi5QÛ öAý¤¼qûKøÏâ·Ã¿ŠqiÇ…5_êz½†““gg›¤Üj¶š%î€÷©÷ö³Xë‘'�¨}¦ûu©—íj]•¾‹éÓôLðëè�À ø§àÍló!ãl›ŽrŒ�2Ï*çY†:®m�ár\wåüM .6¦#–c¨f<9Z«ÃåŸSËù1Š�Ôf©©ÇÉú6xãÅ~:ñ?ˆ|â<·3áÜÆñÙ–.†]…ÃC—WÌ0Ù^+&•l<)UÆaêá3jpUqŸXÅsaÜþ³&¥ÌþÎ迳×ì¯ûDüOðõ½�ÏŒ´¿x“Ãöz�ÜáD>¼Ó<7 Gq¶ÛˆlµM_RÕZ%“ɸk�’nE¯°úST—Ò�é�ôVð{Šq8ü'gðŸãò¬"XYgxaßC_Ú)ôyË|†c“ð�‰x^ʳ>Åfù†eJžŒ¸‡7àŒë/ž+0Äbq¸ìº†WÄ8J9†#*9Æ�ZsŠÂá=–ù/fÞ?ý|UÆx�,&?=á Ù¶7šQÀap“�\ƒ*Àñ]Š� -*8|6.J¦7*¯<-**¦_ZPœ[¯_Ÿ£ð?í ðr‡žÔágivþ ѾÉð÷_ý�×CŽóÄ> ñÃEcfÒÔ[´×ÒjL—Z|WF3ax·Iys3¾Õ5Í"ÞÂýõÍíM¢h�u§Fºl÷:­ÌÃ# ZèXZÜ[EK)½·ÿx›ö‚ý)ixýãg‚ÞøcÃÞ#f\;ļoÂü—dÜ7žbs<¶Ÿq7ԡĵCϾþÉ?î|ãO�¿|MâUøQmâïé_´¿ G&£ªxƒ@ÒüGy éºÅÅÍŽ�¨ßß Nê -¬í4ý>Ì”µmZâú; ¶ÅúŒŸN°|uÀG�8G„eãV/�¸K:ñ?8ãz´²¬›…ø›8á\æù˜æ¹N[—<£ ‰§‹Çc3<Ï£ÏsÕáå$Ïrî Àpä*cs ç'Àgxœ£™Ö¯„Ác±˜¿¯W£:8l>†¼pòÌkâá„«ËO—ý¡ÿeoø{á&�ñ÷à~·â}CÀ’_Ãg¯hž.´–ÛTÒbºÔÎ…üóOÒµa‡[éwZ…¤Ó¹¾µ¼¶¼’Ô1o²ú,ý4|NâŸ3O£7Ò+‡øC+ñ–[_Ã|EÀøÚÌŸ;­‚Ê#ÄXœ·õÏ:Êëׯïœas ³‡ÃÓŽ[ŒÀbð4qŽ �?G¾É|9ÁxÃáFiŸcxJxºXlß*â<5Jüºž#òª8Ê_YÁåØÊTéfÊ–¶†©Vo‡ÅPÄÔ ›—Ùßµf„øŽ/qʲ®®ò>,Êã�pæg×ãªÃfÙ\ªÐXÌ,¡VMÓU©ITŒ*Bqœ"×õÒ(Yï‹¿F¦Y†k”¬n7‰)idx×—æØ7\7R5°8ØÂ£ÃÖŒ ’Ÿ³šqr‹‹M£Á¼]û(Ÿ‹¶/Š< ¨øÓÆz‡…ü;á/ ø—Å>(ñ©o­ø®â Ë+h­4kɬá³�îg”ÅfNžöšu•­Ä¿f¸•)¥¸鮼úðwˆÙW‡Ü•ñ�q¿p—pw äØžà¬6#˜c+ã³ìËC_Ч…ÃQ�\|ViOšf8Ì%/­áhÎ¥j�qÑáø�ô™ÏøOÅC�>šŸ´# òþ>ñ?ÂËr.6Äe�ƒø¶¾Y²ª¸¸O·ˆ8+â¼V7³\¦•Z™]<æ†IŽ¥V”å:øÚ�«ƒ¥ïp÷Ñçè³Ç¼eŠáŽ ã¾#Æf\;K³ìŽ–2Oë°¡(á^/+Íq¹%>#êXéÂÉåõs4á8¨ÓÃÆPÄO»ý‰<¤ø?âOí—ð÷Džê=Bñ…<5¦ÜjGuy�¼ÿ, šîHÒÒ;‰’<<…Rr`ñù·íñ;ãÏ ¾€Þ(ñWˆ8“…¸×‹³l.YJ¦ S1Åáü!Ì10TªÔÆÕÃP©VôèÆu13§®êµ¯×}xS.áž8úNðfUW ¯(θw"ÀÖÆNŒL0”*ñÞ•LDá <*ÔŒ-)¸ÂŒfÓ²‚zy_ƒÿd¿Ùã�â?üø»â gâo…´ùf¹ÖnZDÓ®®VX톤tk� ÂßSðÏÛY- LJ¯ç{5ºµyõ¶žÕ¯g㿦ïÓ›ÀŒÿ…x÷Ço¸_ ð‡Œ³J40¹§šàð“£Sò•Ÿ`ø�2Åe^²èO°¼S–aá�ž V 8|l0Ÿp×ÑÏèÝâ^Y�ðφ¾#ç9§ä*•kf•åR8,ExÔ…Žyf#)ÂQÇä_[”0î¾KŒ«,äˆNäa÷XŽ1_œýæ¡ûO¾•Ó•:u”x_ÅJ•h{J5Tx¯�§V›iN”íËR ®h6¯©õž.ÅËèoàŒTçMË:àħNN ÞIÄ©J_ ã¼eou¤í¡ß|QømàO~Õ³5·Ž¾!|MñµÃÇ7†n¼Yâ üIw�4�xy|¥DÖÚ1Ún¥¬K kÍfä-î§O93ðsů|Aúý.ñ~x]àÿ âð´êÐâìðÆ„ðUx<àÞ(—ˆ9Õxb³ôñy¶S�ѯ<‡‡¯Ua%ÍC.Éñ.«¡?°ãîáúBxC‹xÏ�3ªç ¹#ˆ³š¹æ"Q–çù2álºœ¨å–¡�ÇfU)Ç3«Vœuj˜¼}V4?m�öm¿ø¿à?øXzï‰íüo¨ßx/Eñ›§ÜO§év uŸÚ?ˆãÔeÐ/´è®ô�Rá/®b{ù.'±´ž²O5'_OözgßK<³À¯¿âpçâ|;ʲî?âͳ<.4Î3?ò¬' cið�\ª�eù­lw“áªåøJÐË)á°ùŽ;ˆža5FxgÇô¨ÊüÆx“Â?ë®mŸRâ¼n+…ò¬ïƒ­[€Áð66¾u‡žy lò|V ž'.ÇÖŽ.½9c'Z® V”p±ç�eówƯØÚÓ´g¯…þ ›Y—Á�‹YjZ•Ä7—öI¦\±ñ¾.¢²´¶¸—IÑÒ=j$å^Á’Næþ±ú?}>1üsôSñ§Æ/hdxÿÁ¯ífNQ„¯€Ë3 ™Æ ÃÇ,lÊÂÑÏ3ú•x~´åˆW­—â«ÓKXÇðï~ŒX^ñ·ÃÞáj™�Nñê’Âã±Õéb±˜X`+ÉñRXŠx\=ÓËrÈÃ4§KJxª4ç‰ùí{ðÏá_Áï‰ñü:øg'ˆn_DÑìîyT©�ö|´þ¯ÍWå`xöíøÿ>ÿ¯µh_×õ©üùý_Óù†N?AÓ§ôã?þºÏü„Ïzÿ’sþ}3êasßÐwç>üöþgîÿ×õ¸_×�™çóÇùö§üò2xýqGõý_˜ÿ¯ëúÐï“�Óéߨu9ðhþ¿¯Ä_§õýWPóŸÃ§n8,bgù0}3’~¼�Î:zB×ï#�úýHú})�úû¿à‰Û¯~>¾¿_¯­/ëúþ¼€øèqõÿõœP×õù†zsì9Æ:qëœzõ÷¢ÿ×õý}âþº¿¿ó ÿŸÃŒð9÷£úþ¾C çüÿõ¿:ýh¸_×é¸gŽÝ¾¸çëŠÏ ¹ýqý{cž}½FNh3Æ:N½xý?*ýh÷>½º}N{~£úþ¿¤?_ëúùÏùïíŽyÿõt ?¯¿ò°¾¿ ý}ÉúŸê ÿL?¯ÀLã¡ôãŸ^ŸÏõï@ƒ>¿_¯è=ñŸ§ÐÈöõü½¾¾Ÿ©"‹�†GÇðýO°õ§ë{õòò$Ž7šEŽ5,îpzœòOl×'€< Ò¤A•Õ*÷²(Þü=€êuPr\ò~\(d½-äP.ÌK$±ÎIÎNqÏ¿ÿ«¥ß·èþ—¿áƒÏ‡oëËúü‰"šH$Y#%]HÇ<À‡p}:cð%ÿZ úØÔ–(ïâk«`užÜ½Øº䌞û¹èÃæWëúþ¾ò=,�÷>Ö²�OîõþG¯Ó©£úþ�öþ‘VÒÖK· ØÆ ŽG ½Î{ž8® ¾Bêzœq¡±°8�L927F ÙÁSÎöþ#€£o$ëúýNo#üþxÿ>ÇŠ.?ëóÏõüI¿Qžùî þ¿¯È=ºñ8<õãúÑpÿ?�gÔÿžOæO®(þ¿¯ëóõýZ=òqú};û§#¾ ×õø‹ôþ¿¯êöà‡8w@õî3í펞ÜbÍ9hýÁ@=I÷ç�Ûµý_§êTÈýnÿ‡=©‡õ÷Á·^ü}}~¿_Z_×õýyÜûðy÷Ƨ\Ùú.þ¿¯øp8ëÏÿ_ÛñúR¿úþ¯þbzñþ>Ÿ®8ÿ¥ÂÆOŸ|p3ëëô÷÷ ?¯ëúÔqlñž½=±�ùúQýz‡õ¹xÏo¯QÛ·®)ÿ_Ö½ßÓü…ç¯<ó“Èúgÿׯ1ÜR¸]?¯ëpÁÿõöý{ž{öéOúþ½úÿ‡þ¿AëÜóŒc?Èsþ#;Ѱ_×åÿ 0g·óëÏáéé׎)õÛÎßpà;·O§ü»žÞ§�è3núv·¯Ôþ_�çý_‡ä3#ðü¸ïøŒöçô€“Ž£ŸÀqü†¾GÔPÕ·þ´?ÏÝùü~‡®(ëúÿ>ÀãÇ8^=xäûP×õ¸~wã·OçŽzcõaý Î;c޽Ž;óøsÇ4‚ß×@¿¯9Ç~¹=¿úÿNA†O~=ù=_ê;±_×õ¦�“�Ë¡ÿ?çŸjAý]¼ô õëÛߩϿ¯Ó�“ÈÈׯõÿLäõíÇâ!ÏJúû¿ÏpÏSÔ€G^AïéŽôõý\RÎ}Ÿ§~¸ ?¯×úò ãúþ¯æO~(¿×Q3úöþ|~cü�ëúßóÜP}ÏùÏÿ\t'±_×pþ¿­ÄÏ8Ç?§OqŸ_R_ט ‘þzóéëØñÏ_Júþ´ßA@Ï' <ŸSþ}�?ëä'ä)“i‘áª`pÎyt'õ²üFn¥LE.ocVêVµ8ÕéÃ}S?È2ì¥ãðyve’×Ç<4qõ~¯†Æáqõc^­±2Œ©ÃN´TcJV熩ۙÂ…Ÿ±ìGñËötÓþ7|/øëûD~×^&øR|{iðKÄ‘øóáÇÂO…¿ 5ëïiÝxòÒÞ-XñψuûÉ4ûýOó³´Ùä•å·û �Ö·8ín;㼃‰ªd9·ð×ásìùç¸W—æyÆmœáéàë8åó“­C†ÃÁT§Z§/µ«’—´œ(V#ê|?�f\3 &cšgUpXŽ_Wë\RUàž")S©ˆ«QòJ¿,[zrÅÔï¿ho†ß¿oï þÏ_~~Ó_³GÃ_øKövøqð{ãgÂï�?¬~x§Áþ-ø[§]é·~!ðõ–«cu/м«Ùº]X]èÂö÷b[F°ÜjwWÚ^‘çpÞi™øu‹âN͸[Š3L.3‰sLë"͸{(©›a1¸<Ú¬*à ‰©J¤#„ÆÑ¨¹*B¿³§w&åP§V·Ng„Âñ-³2ÁæÙV­³ �Çàódp•¨VÁÆP•JQœ[­BqÖ.ÒÛG7(CÕ>(|Aý�|3ûAÁô¯‡ß>øëÀßm¾èŸ¾ Úx—MÓ4mïAøÁ£]ø�Ä,·Õï¡¿ð‘}-¾©â=>ׯ‘è·ÖžšÖîúÚÕE�ÈÊrî%Åp玳.Í0‡K4Äe¹tðµj×ÄC’Ö† ƒ•r§˜Ö¦¥K RX^œñQœ)Êm¦û1˜œ®ŽeÀpÂæ8\F.XJxœJ«Ó¦éc©Ê­ZÊrRÃBMN¬Uu F“R”V¶ürý¬õ½ÄµOí1â/jºn½áý{ö�øÍ¬èZæ�kªhúÎ�©üFñ%ö™«i:�”³Ùj:f£e<¶ösÍkwk4Wó³øKÄ+¿_øSÇú½í†� ?éš%”¶2k:‹Å¥Økz½¥.¹nºíŦ�­X^5€¹‰¬�'üËÄNÏðÜO“ñ¾A€žk,¾jx¬(Nµ~|-ZÓSTi§Vt+ЪèIÐŒªQœ9ùZškèø{0ÀTË1™&>ºÂªî¤©Wœ£ v«.W9Z1©Nqç÷ÚŒâùox»û´þ;ý’àšŸ±çÇ…? ?hŸ þÒ_¾8ÛxŠÓL_^hz¥µ”úï‡$ðž�u«Zx_^ñ.•áíÃ7ZµÇö¦º5_ßJm¬mÖÙã‡x�Ź.i™pþ'‡rœ–XyUúÜ+Ó”ãC±U#Jxšz¸ŠØ™Æ4£ìè{,<4åÍiÜëå\;”ãp¸l}<Ç�U}‹„’s§ì¢æ©Î¤)Æœ[“æŸ=I;EZܾû[|`øKâOø$wì�ðÛÿ~kÿ|9â…óø‡À:/�¼5ªx×B†ÃÁm/¥Ö|+c©Ï®iqY]ßY[]É}a[\]ÚÃ1In!W÷8W)ÍpÞ+qNcˆË3 ~#™G�­ƒÄÒÁ×u1¹|à¨â§N4*¹Æ”*7(ÂM]Eœ9®/ S…r¼5h«6“³hÚÕ>>ü2пà�|¢|Nøk{ñ‡ÁÞ;мGÿ ÏþO\øÞÖmãÿ‰|Mê> ‡Uÿ„’+_°}“Q˜Éa:eÄWaÖÞhæ8Òȳ*þ/føºÙne £�­‡þÒúž"8)*¹ %Oé}]ËÚsÓV›ýì\-Ìš.Xì48G Fœ<±tk§սµ7Y8cªU\Ôy½¢\¶“¼WºÓÙÜýÔÿj�…ßµv�ð¿â�¿ø(¾‹û&èšu„Kñká'ˆáUÚxžël‘_ßÛYÏñ%ôûÍX±ßw£/ЬtÿøSQ·ûýŽŸ$–SÁ©~}O†3>©™e™§‡Õ¸¦µJ�û+5ÃÿiË 8JqË•HV£?r·Õ§<.*œ¹é΢S‹§ôÌðÙ¤pØœ/C+„b¾µ…©õUQí)(¼G+„Ö°öª5iIZQ�âÔ¿ ¿à ?µ›ø“ãׇn?g¿ÚWãŸ�t�†~Ôô /Šúƽ£ø_W¸Öi)5îr¹|W¨~Ô_´¾­a{¥j¿´GÇ=KLÔí.l5-7Pø·ãûËBÆò·¼±½³¹ñ–÷VwvòKoskáÊS…Z\?’S©NQ©N¤2¬'NpjPœ' Pœ$”£(µ(´šw½O×ø&i5o‡·—‰ÿeoÚ-rúã]ð7Žgá¾¥û=ø�}¼Ëi­èÞ ñ—‡´åž}WÂvöš6§¨éþ5OiZÎ�5óÛM¤ &Ò_ʼDÃæUsªrÌx Äù£ÐÆåTsYþÜ´¨ÖÆ`ëÔ²§Š”ëS§SðÕhÔŒ£WÚÉ}WTÃG%‡Ï*e˜õ6êQÅO<Mn§ 5©Æît’„¥þÒ3‹•œySÙÿ‚¤~Ñ?³Ž­ñöLÖüâŸü\øÏð¯Ä:Gˆ>2|DøUo§6‰¬Xè—½þÊm_Nº¿ÓµµcNÕï´]5íjOÛý²ÆòîÞMC7øg�q ,¿Š¨âðØü«'Í0õhe ÒU=µ׎*ÕR©u)ªtjR…jÎ…Š—,á*~íñ6?/ž#+�*”1xÌ-HÔÅ×Ã(òJ0t¥ËÏ(ÉÊq›„9çìµRjúúoücâ_ìËãß|ý¾~~Ò_øN<7á]Cñ¿Ã�x‹Á>ñ-æ•¢ëZŸˆ­4{«?ëú]ÿ†5‹kÝcZÓ/µkM;ÅZ>³l¶rh¨ »^ê~I‹ãßðy¯ Òá,ViõœUjø,à ‡Æb0ð«Z�<<êÆxZ!‰£(R£R¥S ZŒ¹Õgï(SèÆÒÈsúØ\Êyµ,/³¥VÃÕ©F�WNUjÎ2§4ç8ÊJ5a5nM›–χ?l~Õ_ðV¯€ºo›Õ×~ü#øyñ‡@±ñjÃ=½¿Š|A®ø7W¼ñ ö•Õ½½ËhV‹§iznŸu4Jº„ö—Ú…™“Nº²¸Ÿ G c¸c¼ò¦ia�Ís ¢¼ð�ÆRÃaèbéC ®2”}¼ý¥Z•"�é©BœíR3Šºy­ ÏŠp1¾zL>.œjÙ¥V¥J2u%Ò|‹–1‹kÞjRW‹Mêx›öwý…?á¼·àÛ[Ùîê¨æ ‰–Õ©a%IW¨©bhaëEª3JœkÍÚ¨×\³lϱxz¸¬-L¿—S¥R¯Ö)<:©MU÷%UK’<ôçR 9Åó8%ï4lü$ý¸¾øŸþ ñÎ}Wã'Â�|ømð/à þkÚÇ�|#á¯x†ö×ĺ^»âk¿ êWÚÔ¨ÓjWwm´Ú%ÃEuáÿiG†ç,ׂó¬7d‘¥”f˜¼ç1Îñ9¦gBމÆáá,5ZhbiÂŒ«ÒQ§Ô”kF𯈪›¼¬^9ÁÔÏñ®X¼-,O †œëÒ§F£U!:ŽœœÔ%y7ÈìéÓƒ¶‡àßìeã?ø[þ #ð߯Þ&ñ_†ü;àËŒ0Ôï|]¯kš^“á{=6êÛÅ+mu¯êVúU½�Ã\[¬Rݬ™àÈÆD û‡á1xŸó ˆÄc'”a)C B…Z¸™ÔŒ°ÜÔãBœeVS�,¹¢¡Ì¹]ÖŒøŒ¢µ*YþµJ”éÑŽ.¬¥VsŒ)¨µRÒs“QQwVw³¾æ‡üSÆÞ ø‰ûqü]ñoÃÿx_Ç^Ô´ÿ†é¦ø›Áúþ“âo_µ�Ã/é÷Ëe¬è·wºuÛYßÛ\Y]¬2{»y­¦ 4R"çᆗðVU„Çáq8,U:™‹©†ÅЫ†ÄSç̱sƒ�Ð…HóÓ”gâ¹£(É6šeq5j8ŒëV…ZuéJ8~Z”jF¥9[ F2´àåfšvnÍ5º?Sà­¿·¦±áëß�pþÈŸµƒqieñ|@oƒ<)âqÐOà�á¯íéü;{«>›+$Úïög�-£Üªßù>h†_/ó/ ¸Ž"Û⾯Sž]õ팿†º”q¿YöÄB’¨¯ÒÊJ7‡7/2¿ÓqNw:rÁ,«2¦Ô£ˆöÿTÄR©k:>Ï�Ó”ù~ß-ìß½m™üáø«Åþ+ñ׈5/xÛĺÿ‹üQ¬Ì³êÞ#ñ>¯¨kÚî§:F�¬×ú®©quvé qC\Næ8£Ž4Û"¯ô. …ÀЧ…Áa¨a0Ô—-,>�:)¦Û´)RŒiÁ96ß,UÛmêÙùíZµkÎUkÔ©V¬Ús©Rrœå§Ú”›“²VÕô²?¦OØwAøUâŸø#çŽü3ñ³Ä÷ž øeâø»Fñ'Œ,#ig𼚗�ü1i¡kïÃ:½–•âI´‹ÝIeˆÛ�>¡pÑ[ù’'ó‡×Í0¾-`q96Üʆ [ „›´q*ž *ôæ�§WªÂ�Ÿ7´q弬ŸèÙ-<5^¯KVTpõ+V…JÑÕÓæ­MBv³÷cQÁÉ=9S¾—0cñìÿâýŠ~9xáoí%àÿÚ#â§Ç+\¶Ñ×Âú¯‡uiî/|Cáæðž�=Ƈá]s^¶ð߇|1¦ß^k—·:ö²—:ÕÒ_ZXÈóËe¥Ûnðœ[âd¸ìχqyW’Õ¢ëœý°#ýƒà¢ øCñû[ý±¼%ðA|áíDx«Â:”š¯ãùômBK-SSðŠøëÄ:O‰m<[¥j×¶ºn©£h¾+±Ö„í6™¥ëv_b¹ošá'njͲ*<#ŠÎ¾½ˆ§õ\]5^–5i©Ó§‹úìpõpóÂÕ§(J¥*Õ°³£Ëj•hÏž+ÑÍ–IŸÑÂc§›RÁ{ rö´¤á:î唩{R5XÉJ1”!UN÷Œf¹YwöÞýµgï‡ÿ´‡ü›ãÃïˆÞø�á…7ß,ümgðëÅþñίáo øïÂ_|gÕltM^ú{=J=÷Z¼Ólµ¶ŸRºÑ/màv–Þsp_gØþñ (ÇåøÜ·šC%ž y†‚¥ŠÅ`qYŽ3–”ëÒ§Óu¡F'MJ4ãZ’´•ë9Î03ÅÐÄQÄÒÂË«,=ZuçJ•zXz7”a95.INQR³“„’Ùš<ø)û|Vý²>~ÙÚí�à«ûï|EøEªX|ðƯá�]ñ_Ä­>ïÃ~ðLV¶–:Çü%Þ±¼Õl<5sâ­#Uð•ÄöŽš¼Ú†«¢Yݦç�Îxï+áÃçÂ8ÈC —æ´ç›âibhPÂåÕ!ˆÄc\§:?TÄNªbc…«K$éF�*Ó‡ï*¾"Äæø|áfôe*¸Œ,£„§:U'WN�”gíi§(Óua*M«KšPOÝë¾7xóÀß ¿à³4üdÕ~)|IðÃ]/Uø_aa¦j^?ñ‡‡¼a¨ß¯ŠôË—²±¼ñ£§[ÝÞ%¼o;[[É$ÂyJBÕöž3åyži“e²Ì»˜Õ¥™Î¥Jx&#:tÞ¬Tç =:’„šŠ”’Wi^ìñ¸7†Âã1rÄâ(aã,4cW«NŒe/kÔ]IEIÙ^ɽùñ îÞ÷Çþ8½³¸‚îÎïÆ&¹´º¶š9í®mçÖ¯¦‚âÞâ&x¦‚x™e†hÙ£’6WF*ÀŸÖrøÊ 'BpÂa£8Í8Ê2�'EÙÆQwM=SM=O“Ä4ëÖqi§Z¤“Z¦œÛM5{­oCõ7ãf‘à?Ú7ö ý�|Cà¿�<=âoÙgáů üLøKñâN™àÏ‹Žª|k/ˆt›‡þ¾Š[¯ɯéhÒé+¥JYeµ´‘ã¾’âÖ×òLжaÃ> ñžÃÜC‰Âñns“b²¼ã,Êêã²zt~¢°Õ¥™ciÊ0À,=WjβÑ)M'MFsû|0Ù§d•pùŽ[J®O‚ÆÑÅàñX¨PÆÊXö°XjNX‡R ðäÝ´�¥uïã¿�~ÁIìþ |wø]ûH~Ïß >*èßüð«ã—ÁÏÚ â�ÂMCBñ7ûÑׯ~ Öu{ìoøCÄs[^4pÓèh–ñÜ´º•Ö¡¤èžw柅óÏ86áŽ"ͲŠùÞa›äßeµ3ŠxŒ.eQWxu 5=¾†ª¥jöUÛ“�©B�lGNc‡ÂñTp9Ž5ËpxÊx60ÀæX¨à¥N®.Ÿ·ÃÔœ}�jciZž´ôNòr…?ý´~"ü#ðìáû8þÃ_þ%h_%ø;¯øïâÆO‹>kɾk?_•d™>7’9• §/NRÅftá)¬>'_–qÂÉûL2S§'R>άüìû‚ÃeY_`qtñïW‹Çchs<5Lf#EK )$êR£NéÖ^íFã%Êù£ý…4ÿ jµ¶ºý¨uÙâ]‡‚õkÿ‚¿_UŸÃ~ ¸ø…ÖËoàÿˆ>-¶t›Â¾ñŸ%ÊÜëW"M"$´šÛQ†é®m,/=î?«Š§”Päá:|e•ÔÇQ§žå Œq8èå²RrÆå¸9'f+ QAÆ„mY¹Ætå ԇƔ±•/›Ï%ÅF…I`1œî•ŠVµ Ue­UbåzŽð÷ZŸ5ã }ýûeøÊÖÙ2÷þÏâïìµñïöÐÿ…§á ¿‚>8ýŸux§â�ðæÈ^?Œ[ã7Œ¾éZ‡5O ]ÇC¶ïö¯‰%Õõ%Ô%ŽB×—zWç\‚œxÂê~MÅœ;Àï)ÆÃ>Àq,~-«™TtÖ d˜,Ò¶#K'õʘc…Ti{4×¹ ¿Iž×O%—öÖ7(̳߮Q–_ˆËg‡­‰Ž*N¿×«á!J”é;~æ59ê¹Ë™¯ŠPúÃâ§ígûK~ÔÚÞ“ñËöKý¿gOƒþ ñ‡…¼+?Ž~ükñ‡Âo†þ1øã]/BÓ4?دü'Þ Ô5ø&ÿY³}cEñV›©ê—2jòX�:Ý ´I>?(àþá*²1ðï‰s¬v ‹Žˆ2,q™à³ì \E\F£þÎÇS¥�ÇÓ¡5B¾­*Q‚¢ª{Y9M¯g�f¹½Hf/e˜=z4^'.Ç×ÁákåøˆS…:Ñÿi¡)×ÃÊqç§Z›“›�"´oáž ý¨<©ÿÁSÿc»Ï~ײülðOÁ WÐüiñßâ3ü=øsð¢ËÇ·�0ÈåˆÎÞ?—ÂtñŽ+êØ\qÃ×öÿU”iЊÂ:ŽœiԬܧ;¨ÊQä”ÿ)¿f_øsAý¼gßk¾ Ñ´_ hßµÏÂ�k)Õµ[;ÚO‡t©¨kúž·yq™a¢Øé�ͨ^j—W1YZØE%Ôó¥¼o ýwа¸œG‡ÜG‚Ãá«×ÆWàÜß C F�J˜šØš¹&"•,=*ŒªÔ¯R¬•8R„IÔ’„bäÒ>7)«JŸå•êU§ 4ó¬iÖœãP¥ u9ʤêI¨F ÊSmEE97dÏѽ7âÿÀ�‹ÿ¿à©ÿ²GŽ~/ø'ῇ?i�Ú_Æ¿þüzÕuAyð•ük࿌ž-ÖtK/ø§C�T²·ðOÄ/ß[I¦øÊ36‹ce Ö¡××wº5�ïæurn É²ß 8Ç/Éqùž+…¸[“qQ£ìó…�Çd˜:ç…ÂWt§<~]‰§5WùkÔ›…7p…yÓú˜crìn'Œ2\F;…¥›fØŒn[˜Î|Ø/¬PÇW©N5«SçŠÃâiÉ8WÖœbœ“”œ#.×öøð_ö.ý£ÏŽÿh_Ú÷ö]¹ñ%ïߊþøsáÿ†ü=âýßSÕ¼ «Gyâoˆ¾5•´� øCF¸Ò ï‡|+ ^êø¯Å^+×ô“e¤Áa§\Ï?ˆ¼CžqÇ ÿgðçqd0Ôó<Ÿ™â3\“‚¯*Ts .\³½¶/^5½ž'‰…5„Â`ðõ½¥iT«Ç~˰iõŒÏ;ÊW…ÆÒÂÓÂc©W¦§<<Ôªâ±ÙÑ£jTiÊNµjÕ!˶ÿŸbÌÿúý�=…FŸšÿ_×õÿ÷Ëþ ãûH|ð¿ì“­k¼wàýâÏì'ñ â�Æßٷ¾*ñ‰c©øöëâÏÁxoLðWƒü=¨ÝÁ¨xŽ]âå–�ã=M4˜¯O’æÊmFßÈ•¿ž=~Í¿µÄ?øáGÆ»O…¿.|kñ'ÅzO‡4´ñçÀÿ‹ñ„ZX×üG©i–Vº¯�ü1ªx¿Kžú]Gí%·x/㸖÷|]Ëó¼&‡¸Ÿ…2Üna›äSͲ¨àr¼lMW—çù>'êý_ J¬çGŠ¥‚«j—$nä¥MÆ2<þ Ä`kTÌr¬ßCƒÇÇ ‹•|]hR‡Örüm*êÖ¬á­)ÒúÕLîu–y]:×�:êjué¨Ã÷r”§ iðΖ.8šÜE’Ë&…eWÛSÆ)ãªáá5%J8ÃÛ,\©Ú2ƒMBMËÞIF^·¥þ×ß><üEÿ‚¾|gÖuÿ|?ƒã·ìåªh_ ¼;ã wDðÿˆs’æ•‚ÃçXl<)ã&¤éáñx:ζÛò¦ãBsœ£Rz($®âœ§³ÿ`/Ù·àÿìkûcü"øµûG~Ù²„Öz=÷ˆ-¼¦ü%øÛ øÚÛTֵ߸‡NƒÄž;ñ E¢h?¾Øh÷·×°êÞ%ÕtëÝ_}BÓ4Ëõ¿ºŒ|GˆœQ�q¿ç9? ðOÆu©áå˜ÕÎ2,FT¨añØj²Âåøe*øŒË2©Z�8JŽ�Jx|:Äb*Õ¦éÁžï åX‹=ÁcsL÷&jœª¬40Xúx…9ÔÃÕ‚«ˆ«jtðØXÓ”¤§Vp•JŽ�8B\ÒGÎ ¾7i^ý‚¿ný#Âÿ¬<ñ;Å´ÁÍ[ÁzfƒãûøïÄ~´×5æ×5/ ÙiÚ­Ÿˆ5�ÖÖxŽ«{¥Gsc¼Ñ¹V7\ý6o‘UÌ|Bðú¶/&©ŽÊ°œ3�ÑÇUÄeÒÅeølLðøu‡¥‹©RŒðÔkÎq~ÆœjJIò&Ó·—ƒÌ!†áÎ"§G>.¶i��SÄÆ–"­(Ô©í'F1œjT¦“÷å Å'ï4~[xŸÆ>.ñ¾¢5�x«Ä~/Õ–lº§Š5ÍO_ÔRÙGX÷U»»º,²É ˆKå«Èì3±?¬á0X,'G„Â਷Îéa(RÃÓsi'/gF‡5’MÚöK]ò«×ÄKž½jµçksÖ©:’µö曓¶®ÊöÞÇèWü?âƒ#:…l-z8ŠqÀeÑö”j­>zxh)AΜ¥hI8Î7¼^ŽÍ«kOÚWö§Ö´�Ž_²_í÷û9üðO‹ü+áI¼sð+ãWŒ>|7ñ—Áiz&�¢ø¾Ó?ðn£¨øÃÁWúÅ›jÚ/Št­KRšéµW±þÍ·Xm¼ïȲŽá~¡[ ãø—:ÇàñxÈåüA‘à³|ÏŸ`*ש_?øNÇR§‚ÇS¡5F¾µ*Q‚¤ª{Y7._°ÆgY®qRža’ñ&Y�¡Z�ˆË±õðxZù~"ã ñÿi¡)ס)§:u¡)¶çËʬ¯ðwÇO‹Ÿ þ5~Ù¼ñ;öðø­â�ü1𵟇¯ÿk þÑ´?|g�'Õnµ¯…^ м!ª[ü*±ñ…¦ƒo‹¯dŸÄ0…¼Õìï›FÓ¬õk¿Ðr Ÿ4ȸ#ˆ1ÙW‡ÙFšâ牧ÁøŒV.½|~G0¡œOˆÆÒ–oSw0Æáqùî_‡Åñ2µ%Ó–sN•tðø÷yʦ4)ÑšÁƼi¥^Wª½éÆnŒßÐß<]«ÿÃ3~Ðz?íùûP~É?µ&~]Ø~ÉÚÏÃoø âŸíŸ~ߦ¿…µÝ?ÅþÐí<_¥x+Xn›ÆgÇwÂKÛyÿ³ÞFËÚ]|ÞUƒ¡þ´ðåoøSŒxKþaSŒ(f˜<Ã)áÇ“{:«‡©‚Æ×ž ¶c)¸¬ö};BQö‰m8zxÊóþÉÌáÄ™¾Kœ²J94ð•ðؼÏëÜÑtjƽ q¯ 2Š“¯õ‰{Ñ|·û2óÙjã⇆> ü8¾ý�ÿà 4 ëšMÅ·íû4~מ8ð/…<#àÿMp¿Û÷:W€>"éÚ燼[ð÷ÄP´ â/ Ù�3ù^»k}ž•êñlrœVy™Óã?³ÜF*…hφø£ƒ0ü^7�ŒÙã[1Ë*añ8<Ë .h¼62VKšTÒ£Ë:¼™;ÆQÀae’q&•)Á¬Ï*Îñz4(Wo÷®lLjR¯…ª­%V„}¥ì¥ïÝCàŸø(f¥û=jÿµ§ÄûïÙ€h ð®_øFcK�é³èÞ¿ñ…¿…ôx+ÎøW3âîÍrŒ6 O'Ž.¾e’f8òÓÅ< †­ŠËñ8[F¬àêN…Js›ŠN«ôÙs^¦E§›ár|Ç Œ«^Œ±®�<6? ˆ�4©,EzUaGJµÜc.XÔŒ’»wpÆý¯þ=üeпe�ü*øóûxè_>-üSñ>…oqðsà çÂ/|.ð÷€|3¨é^%:§Å_ˆ>ð=…Ãø’ë]±³>ð×…µôò’%ºÕ绲{ý8oÁœ?‘×âÜ6oÃÞb8&Êp˜‰G;â*yÎ6Äæ8ªU°¾Ç(˱˜ú‘XXáêOë¬^ÝË’ŒaQSªg�æ8úy=\eÄpÌq¸ÊÔÓÀå²ÁWÁÓÃRœ*óã14pñ~ÕÔŠöt¨ÕVµæÜy¢|Íÿ7ñ×�ü}ñöi½ð/Œ|+ãK-ö"ý›ü'®ÞxKÄ?ˆí´ohZ±¹á­V}òî-?Ä<ÒÅ«£]´:ŽžòF—–ð—Uo©ð¯�˲Þ)§�Àã03Äqßã0ðÆa«ae_ ˆÄQt1Tc^upõÒn•xsR¨“p”¬íåqn#‰ÅeRÃ×£^4ò ª�IQ« ±…jtæªR›§)(Õ¦ì§NV”]”’¸~Ýþ;ð?‹þ ÿÁ;´¿ xÇÂÞ(Ô¼û#i>ñžŸáßéÝ÷„|EŠõ›‰4Úé×—è:ÜpK ï¦j©i|�È’´I^àqø,ïÄš¸Ì/ KÆU±X*˜œ5jñ˜g„¡ˆÂN¬!E$âªÑs§tÒ•Õƒˆ±zø…ôkO’Æ–"ªÂ¤¨UU¦ý•e 7NikÉ5$Óµ�qÓÿi¿üý™?à�>3Ñ|Cá¯ø¿öxøÝûGxëâÃ�ÄZçŒt}óã?†õ›k{DŽò]CÃøÃÃPjGÃ7šÕ�¬7�—P³ûDîÕàÔálvyÅ^3à«á±x,ä\3—å¹�|."*øˆdxª©‡®à©â£‚ÅJ—֩МåáO–RHô#›aðGW§V�zù^ašb18Zuiʼ)ËJ¢�J|ÎT]zJ^ÉÔŠRøãtŠÿcoƒ¿¾/ü@ý¢¾~Ûÿ²Ž�û=|VñŸˆ>'Oqñâ%ƃñ{áÔ>1Ôï|O¯xOZø/ý•wã�gÄz ííö› éº$µ‚Âíç±W[éÃÜo�äy.]ÃY·ñ}~$Ê08|ª1ËrØâ2\Íà©C ‡ÆPÏ=¬00ØŠtáWV³„p³•H%S’1”æ9�Äæ˜> É¡–c1q�âqNž; «ÎUjQ©€ä–"¥Zr”£NMÕŠ„¯¶¾Î×¾7~ÌðÁVàœ>9ðÅÿ¯ÀŸ‡²‡Âï ÏãOxçÂ6Ú‚ Ñüñ’ÃOðïÄ�m5UÑ<+ã=6ÏQÐlüA¡ê·V7º~­¨Ak5´R\[Ç'Ãáò.)—„^&åùŽK˜¬ŸæØÈàpù~6U1Ò­ŽÉ*TÄå”'_�«:x‰áñaR(Ó”ã6£&½Ú˜ü¥q� b0ØÜ7öv&ÁÑuêâ((áÕ:èÆ–*§:§F¼c*q«Nn2Œä“Šmž~ø…àoø'¯íé૟xFxÃö“ø-®øKÂsx—E‹ÄÞ(Ñ4½^ŸTÖ<9 Éz5MoJÓaž)oõ 2ÖæÎÎ9b’âhÒEcúF7/Ì'â?‡¸øà1²Á`¸_<Ãã1‘Â×– ^¶T18…e‡­VQj�*³„ç$ÔbÚ>j†' ¸gˆðïAW¯šà*Ñ¢ëSUkS…ZŽu)Sæç©¦œ¥¸¤ÕÙö7ìí}ãÏ x/àü??ࡳ�Š?eÍ_ÞÔ¾7þÏß¶‹¾ÃÃ�D~ûâ'�î~xóJÖõ+¿ 8kËm Wølt××î$¹’ˆ¦MJó⸖v/�Kˆ¼8âl'QÅbiäÍý”š}£GvÚ±{Sª$³yõëæ<1âŽy›â8wˆsL¯‰rl‡ƒÇdYe\Ò†‚©:á™{)EàãolêM8{Nú´º)à šð¦O2Ëp˜¼¯�¯[˜b£…�ZUá”å†çRöíÛ“–-KžñéwåµoŽüâ/ØGþ ‘àÿøÇºï‹<á¯Ú¢ßÇ^ÑüC¤j~"ð\þ!øÇ¥ê~‡Åº%�äúŸ‡%×tÈåÔtxõ‹[7Ôìc{»1=º4ƒØá ¿†ñÅLn'ŒÃàóW K/Å×ÃV¥†ÇG ’U¥‰–¼áX•‡ªÕ*ÎŒæ©Tj9dÒ8³ŒF¯p• UèÔ¯†¥œ,EU„êáÝ\t'MV§9Òu!ySU\â¹£t®'‰üwàyÿà“_ þAã/ ÏñOý·|mâËÿÃâ"OYxZïá%¶›kâ[¿ ¥Ûk–ú΢ „ÌÖ)§Mz ¬w-8)F��Œ9¶g,.9mNÀ`éæÃVX˜¸g2«<,1nÂX˜Rj¤¨F£«{î*:…lFðf «Ñx¨gøŠÒê´ÝxÑx%VTSöŠ›Ÿºª8¨9h¥sÄ¿aÏøsÂ_´w„uÏxƒEðΉm¥ø²+�cÄ:­Ž‹¥Á%φµ(-ÒmCRžÚÒ'¸�㆒Uift�v šÿh¿ qWý¸ã‡x/†xƒ‹øƒœðM\&EÂù6eŸçšXN,Êq8ª˜|³*Ãbñµ©á°ôêb+Î� F�s«UÆ”—ì¿Düó$áÏxo6âã+ÈrºB¶eœæL¯Fuò—\ ô…ñÿÂüW„ü!á6ý—•c²Ìχ¥ŠÄäXŒÓ4áì»,Ë3ÌLóÌ~*§æµ3¬Û8­††]õ Ë}¬&ð%õ­WŒó<¿*­ƒÆCS3Åp­,§™â!‡£“åÙ†.Z™.iý#á�n>—ŠœE‚âþàs®-È«äxÎ6©‚Ãàèøk•O+§Áâ±´ñyU†ŽwÉóHbÚ0•ð9CÃFŽ[^N¾Q‚–*­O W<ù é'œðnã'fœ , |’½l´Æå‘§·1Ía�ÃÇ7ÇàåG÷UébqÞÚU1”Ò§ŽÄ*øÚs­OEo§¿i�x^ý‹¿g è^5ðž³â]¾�oÚWˆô�G\Ò �Ã�nÆìêº=�äÚ…�³¼ž;;ƒwo·º™-äÙ,�ø÷è‰áŸˆ¼5ôÿúWq§ø}ƹñ ñEpïg|)žå\9ž,ÇÅ~̰+&ϱø ff±ø =L~`qU¾µƒ¡Ágtò¼Ë*�lF/,ÌiPÿf�O·ú?xÁÃùÏ‚Ô|*«âfÂ>8á길ä¼K˜SËeƒÅeÕsZÙµ:‘yÔ¨eUåËŒÄe˜ŒºxÜ&5Ó¥C„�OÞÆ_ísñGAÒ¾AðÚÇö”ñ?Æßx†m-Ê2ÿip>Ç,ûÅN'Ϊeëˆ)åÕ8KýQ§�Áâa˜K]äÙ%ZÔkÔÆappÂe”8޽xrÕ¯Žœh(a±~ÑñÛâ·Âí_ö�ý�5�'âO€uMÃ:§Š¤ñ&­§xÇÃ׺o‡£¸¶ðÂÀúåõ¶£%®’“µ¼ë jÀ²42„,c}¿ÏÿFß¼cȾŒNîÎü&ñ3'ϸ¿&àº\'’f¼ Å9~oÅp¸¾/–*Ÿ帼ªŽ3;©†Ž' *ðË(âeF8ТЫO›ôÿ¡ay:4�§ÝKl÷>M¨»š-ñ_D”|]‹ÄñQ�àî2á^Ê×e9Ž5Ê09¶U†…L+Åbò긚 ý®7‰«7ƒÄT¡*þ˱5)Ûø5ðûöOøñ–ûÇ_´w„5«ßØëÐxcH»ñ?†WIðæ�¨N—W�«xšßU¸²º»@ºv›&¡>’÷‚k†K+ë�³Zñx÷â‡Ó_é3à&[áÞaôR㜃.áldž±a�àxC‹¥�ñVk–aç‚ÀÓÉ8G“as âkË4Í©åx|îžT0±«˜e¸^jÞ� ¸7èïà÷‰Ø¾+ÂøÛÃy¦/:Âfô²»ŸdK.É0XʱÄbg˜ç´s ØZø…F’Á`gŒ«—KªVpÂâëÚ¦;önø©ð£BøÓûij¾%ø‡àm3BñOŒ´k­÷Pñw‡ìm|Q§Eyñ®åðíÕÞ¥¾´‚+ëLɧM:/Ûl÷:‹ˆwzŸK|iâ?£ÿìÿÉxKÂßs~$àÞÏð|K€Ë8‰óof•ð>CGа˜,«‰È*J¾]�µ,ÒŽ¤¾¡�å§'…®¡Åàˆå>(ý(s ó�8O”ñåxŒŸŒâ<› ‡ÏðTñ‘\GôÕúaáø'è÷�}³ÿ1a3>-⺘<ê|˜çY~ ‘,ò�c²Ü>A–ðÆŽk›æ¡—çÜKS4ŒðÑËq¸ê˜jPÅsøQ”ý|«Ä^)åÞ1å|UK3È«àò<’8Œ¾9þ/Åb0ù—ömL£ Œ«šbóŠõ0X ,ªb²Ì¢8'χÃB¬åGÏ~|aðV³û þÓË®ø»Â:Œ¼㯊>&ÓüâMÏćÄÚ‡nà]7F¹»‡R¾ŽK“smm%µ¤‹<–Ó${ž'UýGżAÈ~�CéðçñÇð†^ø9Ÿå¼'Ÿc¸c¸G3⬠yæÙö_)ËjÒÂ,/O�§<=,] •yaZœ¥ñ¼âW fFß–mÄ|9”ñ?ñggØ>Åç™f9ļ÷’â©G–WÄÓÇbá:ÿX¡Bt0óU§B¬ayBibüfø�à=Wöøá=3ÆÞÔ¼U£kÞ›Xð͇‰4kÏiPÚh>)†î]KF·½“Q°ŽÖk‹x®$º¶‰ ’xRR­*+}€>ø““~Ñ?¤ßfþñÆUÁ™÷ ø“‡È¸»2á<ûÃÕ|wpe| §?Å`)eY�le .&¶žZxŠXjõ(©Â�G+Äþ1áÃè¥àïà8«‡1¼C–g#W2Ȱ™æY‰Îrúxl£ˆ)bjc²º8š˜Ü$0õ+Q§^UèS�)Õ§ ¸Ê¤SéÿmŒ?¥øíû4xçÃ~/ðÏ�toë¶ZÿˆÁÞ Ò»5¯‡|"| ¥jz=Þ¤ºlmâ BMzkEÔS\±XZ{kYí®ôtË"nQ¥HGÛþÍþͪPÉxmð–]ŽËq8èà¡,ã<Þ®8èæØXÒu¨áêáñ9dU*“‹©Z©Kí/€_<;â?Ù�Ã?ü{b×ïÁ� ø«FŸXÔ†êæçHÓíìn$ÒîÝB]]x£NƒF±–EŽO;ZžâÉVYâËŸÿI�ø«…¾—Ü[ôrðÏ0††ü~âÎ ÏðÙXÕ| žfx¬Ë K9ÀÓ”§ƒÁðvkˆÏ³T¥R—°È0øl{•5d£ýCàÿ‰9.uà>EâÇáe[6ð¿$â²¶eŒ^νzùnŽ´òüDÒŽ"¾}‚¥–a'5 ûLÒ­l2�JÔîÿüaâ­[Æþ+ñŒuÙ<Ý[ÄúÖ§®j FEºÔ®æ»’( ¯#¥´_&Ö"äCoQ) ‹_ô«Àœ’øwÁ|)Àœ;GØd|ÃùOepq¥ ’Áå*UñÂ�*sÅâ}‹ÄâëFœ]|UZÕ¦¹êIŸä?çù‡qwŬý®eŸf¸ìß%)Ê ¾?S:t½¤§5B‹©ì¨Sr~ÊŒ)Ó�»s™8üºóþyö¯ª½9§¹;tÿ!Àç‘ßœ�ßß¶¯Ó”R×oÄ\žþü{òzþ¿Ôwaý_ÖšÁ4–î²ÄØaއ‚3ÈoPGw#¿0ÿ†þ»yèt¶f»2ÜǘäxLSÆ0@gçx=9ç§\ àòÌ_ùýß×™�©êqƇO°lD ¬³/ü´$á•N;‘ó8<ò«Ç%Íç©ê@#¿¯? ÷ôÇzýWŸóŸ_çéß®(ëõþ¼ƒ8þ¿€ëù“ߊ¯õÔLþ½¿Ÿ˜Æ?#Àúþ·ü÷sþsÿ× ìE×õÜ?¯ërÔ1ty >è=Ç@Hô#�9ÏSÇ$þ¿¯0þ¿®¿Ò&YwH9;px¯¿NzƒÇó�ý^zuÒ•º‘»‘ê}G¾}¾¢˜_×õÿ’Æy‘ãžX/§¨Ìtú‚ƒ·ù•3ïÁçß�p{gèpiÜ-ý_ðã Ç¡äútÀÇÓ©þœT�úþ¿®�žüç8ô眜óŽçƒ@äë׌c<`tä`ôý@Ã(8ñßêyõàžG^ÜrŒåIà{ã8É÷Ç�Ï4žiç§¹çõ Ïù€²Çuãüõü8ÏZBäqÇÔç×ÜtÁãŸÆ€þ¿Èi‘±·Ž}\ûñÿ×'×"€?ˆôä€3ù~'¡õr1`qÀ {wü>øÁ�}ñßžsŸA�̃ù€!÷Èõ#Ûž uõõÏ'ŸŸ¨öûAèÍýx?ˆã�“Î8ÏNžôgžzd�~xÎ~ž‡Ó¶(ÈÇN§9<÷ç=}qÓóâ€oÃ<ñíÀÇN½;óÍ÷=pOçž?1Ûž´ ç¹ Ÿ×ž3üýÏCôê Ô~žÜõëÉëÜõ#`ëïŽüóœú ~`ŒÌ¸ÎG©Üõ¯¯®y8 tüýG°ïØz@h'ëÁüG žqÆzt÷ <óÓ${óÆsôô>�±@F:u9Éç¿9ë뎟Ÿ{~ç�n:uéßžhϹë‚<ð1ùŽÜõ 9ãŽaÎzñÛ¡ ¸Î9ç¯~Þ¼tÇÖ€=‡>™~‡°ê{ý(ÈéÐcô>¸'–yq‘ÛÔqÇ·ãƒë׵ɨ`uöôcútÀ¸ç×ñã©êGOåÜõÈ3Ïÿ_Ôq×Ôòp8ãÒ€<œóÎ8àƒÛðþ´õ¨¹ê}8½O?L}8ï@ œ÷½1ÏQÏ~=Æ(3×êzŽSÎ1ì¦N(SìŸØ+öŒð‡ì©ûLø7ãWŽtëÞðî•ã >óMð¤mÆ·,ž"𾩢Z=´:¾¥£Ø:Ew{—>n¡ [t‘¢YeQü�ðþ/Š8s“à«aèb1p•!SêÆŠX|M:ÓRtiU�Ü`ÔmMûÖ½–«ÖÈñô²ÌÆŽ2´*N�8U‹�%7í)Ê Êr„ZMÝûËMUÙ矵�ÅíãÏíñsã…´ý_Jð÷ÄÜëúN�¯Åc³ii-¥¤ ¡�}©YGp$[_\ǵ”‰ $þÊ«ä|?•eš”ªâ0XЫRƒ›£9)I·MÔ…9¸ûÚ9B/ÊÆ¦*ž;0ÅbéFq§^¯´Œj(©¤Ò^ò‹’¾�$×™óÎ{óœãÐcžrsÎ;ž {ç¹Æï�†ãž; þ 3ÏCéÐuê‘<Žý8äÏ\û�Ïê�àsÏ4õýy†zûz“Ïò^È4¹ãòéØ�Ð f€§Ϲ Ÿ×ž3üýÏCôê©þýº>øWþ ³ñö3¾ð¿�'ø‰âý[T¿ÓüIggáçð]¼wž0ðïˆâK˹¼E¸² ]â<� p.%‡ix™äO̱Ü™b¼DËø¾œ rü%*Têaç:ë' &#Ü"°îƒ\Õ£%zñ÷SÙÙ?¦¡�a©pö#(•:ïVR”j%OؤëS©«uöƒ½ õk¡ùc×ßùç9ôüÁ?Ÿé§Ìˆ}Ær=Höç¨}}sÉŧçê=‡~ÃÐzs@ïÂçÂOˆÞø›á¨ìn5Ïø›Hñ6ŸiªÛ Í*ú].î;–Ó5KRÈ×:^§ rXj0+Å$¶W3$sE#,‹Ã™åô3\¿–â\ãC†«†©:Rä«V*¥)ÙòÕ¦Ú�94ÒœSi«£|5yáqq4Ô\èT…H©+ÆN.ü²]c%îÉi£viíûÑmÿCÿ‚uø�ÅÞø÷ãïØÏÆŸ´g…¡±ŸJÔ|?eàÝ[ö:Æ�üIï#Ö®<]ád¼¹Ófmúf·¨|;¹Õ´v·±žÉ¼û+6ƒðéxkÇø|.'#Àq~\?‰u#V�yâéb'F³ýôá1.¨•ªQ§˜F•niÆjÓŸ7Û®$È*U§Ž¯”VY…5AR�58|�Õ¥wðÎXw8Z-j•¿¿kŸÚsÅ?µÏÇügñN—o ÿjÅc¤xwÃ6—“j¾ð¶Œ�“£­ôñÀ×· %¸½Ôï’ÎÆíZúþö (®Ò×8S†ð¼)’á²|5IWöNuq™Æ0–'Y§V³„[ä‹´aNS”)Bu&ãÌþK5Ìjæ¸Ú¸Ê‘PæQ…:jNJ�(|æi]ï);EJr“QIØùŸÛðÏ<{p1Ó¯Nüó_FyÁŸs×þyàcó¹ë@ sÆ?þÜõã·C@qœsÏ^ý½xé�­&{}28ýaÔ÷úP‘Ó Çè}pN?,ò(ã#·¨ãŽoÇׯj3’°Àëíè8Çôé€qϯãÇSÔŽŸË¹ë�gŸþ¿¨ã¯©äàqÇ¥&y9çœqÁ·áýhëQsÔúp;zž~˜úqÞ€9î;zcž£žü{ŒPg¯Ôõþ§œcØLœP qŽOÐã××�¯>ÙëšúêãÐò}:`céÔÿN(ëúþº{óœãÐcžrsÎ;ž .q€;äÇá€8çŽÃ?¨LóÐútzŸäO#¿N93×>ãóÆzŸä8óÍý^až¾Þ¤óü—Ÿò .xüºvãô éßóϺñòôÁãŸlÐ×ùqÀç>ÿ×ÿ®O®hþg'ŒôïϹè~�AàØ$œcÓŸcÏ·'©ã®äg >žùÈä�Œœq‚ìyW×Þ;}þ‚nÇn£Ô‚yÇl¨Æq××<œQÔ-ù€aŽx=yÈéÀÈö¨0Ío—éþ_x…‡“ƒÎO#Ž'¶G¦pAšCKúûƇÁÁéœry–OäŽ:@¢ÿ×õýyüëúû„`ržN3“댎çEÿ¯ëþ?­ÅÜIÁäýÞ¹ÁëÙqÓƒøö"‹¯—ô€MçŸNzq’zq׺žsš.€rÉœþ¤àÈã’®Ú¢ëúûÿÈ,¿¦ù_p;�Üàç“Æ23œp;Quý~¡þ×õÿO3¨=¹Œ®Ð:óžs�8.¿¯ëúûƒOëôH½8ÇLIã<ñéÐ�V‹ùÿ_ר[ú]?¯Ô ŒàtÜ:cé׎FIúf‹ýß×õù…¶þ¿¯O¼qpHòÆOdvq�r?'ó¿¯ó Ù<G$s�9=H´8 øBsÿT“À>¾¿Øcúò}F(ÿˆ�ÑÀñÏÿ‡‰ŸýüDìÓþ‰ ¿ñ\pÿ:Dÿ…Ï­ЕðƒžF>ø ùÿa÷=ù¨4ÄÈ?èàxçÿ‹ÃÄ¿þˆƒþ"viÿD¿†ßø®8?ÿ�"ÿÂæÖ°Hð_ÂŒôøIàÿ¸>ÿàqÈ£þ AÿGÇ?ü^%ÿôDñ³Oú%ü6ÿÅqÁÿüéÿ†ø\ÚÑÿ™/áÇòI<sœ�úq�¦3þ AÿGÇ?ü^&ôDñ³Oú%ü6ÿÅqÁÿüéø\Ú×|!9ôI<=¿èGõõÏP(ÿˆ�ÑÀñÏÿ‡‰ŸýüDìÓþ‰ ¿ñ\pÿ:@|fÖ±ÿ"WÂõÿ’Gà!ÓÔbzz@hÿˆ�ÑÀñÏÿ‡‰ýüDìÓþ‰ ¿ñ\pÿ:D?õŸúþñÿT�À9q×CöÏN˜£þ AÿGÇ?ü^&ôDñ³Oú%ü6ÿÅqÁÿüéø\ÚÖyð_¤É#ð~¿òôôöÏ�ø€yýÿñxx™ÿÑÄNÍ?è—ðÛÿÇÿó¤?ásë8ÿ‘+á ÉÏü’?úóŸø‘û㧸£þ AÿGÇ?ü^%ÿôDñ³Oú%ü6ÿÅqÁÿüéþ6µÓþ¯„>ŸòHü@ÿʧ§CëGü@<ƒþŽŽø¼ÂÅâeƒÈ0u³ ²œó ú£ÍêËꘫԣFþÖ§/Ã)ñ•ɯ4oèÿ` ð§„ô ­À¹07ÃC±²ûi‹É_³“'Ù·Ïäló¦ßþ�p_åüÆ8ûŽ3Ïí)aeV\iÆüMÆrÃ}Qb\ø‹1Ì?³£Wë3x¥ƒT~¶éáÞ!Ôúµgü™Ä^˜(ÞVXãRÎÇ 9‰ç€$ô97ÔE¥ÅµO™vãçn¢0G ä/Ÿï6gfbÎI%ŽIë“Ô“ôô>�(21Ó©ÎO=ùÏ_\tüø pqøu<{p1Ó¯ÐóÍÕÉCzÇ�¯n9÷§=iîFÏúüÉÏl~9ü=‡=�³ƒH²Í­´—R*Œ3¾pgŽyÉÇÝSÐP× š†¥Q›B’Y‡ñ�0ʬ#}ÇÞè¿'$ _sžÈéÐcô>¸'–yq‘ÛÔqÇ·ãƒë׵ɨ`uöôcútÀ¸ç×ñã©êGOåÜõÈ3Ïÿ_Ôq×Ôòp8ãÒ€-CÿY(㪌c8èN‡¸¼ž:€>Iw“Ø��ÏÔóÏ8Ǧ2ZXŽ\r8Øäs×<ð}F8 ?¯ëúÿ!’�ÿÞ=G==Ï8ǰ™8 =EGÙÔäþON½Gnž Ð×Q&�þZÇ‚IQé€r='#ñ ?¦Rúõü{uè1ר÷ú•ëúwá“€9õ<äsõê{qßêhüÀRÀû~¾Ýsê3éèh¿õÿLô=±ßüöè:Ñ¿õý~€H¤•¹Î0}9ïßùqÉö.Tàò~€ÿúº`öãŠ?¯˜‡!ù¹î;çœgý=ûš/ý[ i<ó�â÷ãÉç‘Çàh¿õý˜P:±Àüþ¨÷öäŸðûÿš÷qŒ äËŽ?§ÿ^�€nyÎz`þ¿þ¿^ç¹4_ð@3Ó¿cמI<Ž¿ýz?¯ø OÿW|�§lã�\œþ¿¯ëo$À>¸ü¸ÿsíÎ8Æ(þ¿àßúÜ#¨ûŸçë‘üþ”yzÿ_Ö �ç·NŸáEÿ¯?QÐûý1ôvç×½ü‘þ}?§^yqÞ‹ÿ_Öš€çƒÇøqÏóõ£OÐ#¾?®xç·ùÈõ4Zÿ_×Èœ~gzúz}ãÈ£úþ¿Ìþ÷?^ÿ—>¿§=hþ¿¯ëäžã¦9ÏaÏôô=x…!9?_ǨéõZ.r9õúç3éÏõy_×õ`?N˜=?úþÀsÆ:b…ý_×`½xíÓ�xüø?àÿ_×ü8=FNIÂúóøþ£¨<óÏZ?¯?ëå ,1�2;Ž€ÔñÏ8Ïz<¶ÿ†¡ÀþãÓÓ¾xÎ>½ÿ*?­ÿ¯øg÷�½¹œ~}ñÓØãÛ¡ÿü€V út랃G¡ïõ%ÿ¯éÜó1Â�õç=}½~�ûóGæ€jüÜgÛœúûsý9ìhþ¿«€ÀÂñî;œõþ�‡QEïý]@Ó�_Ã^ÿËŽ~…ÿ¯ëú¸qî~€þƒ�ÓéÇg׿<ägÇè}}{ÿ×õ·õòÏON}ÇOÄõ瞟�¢ÿ×õþ`&zsŽ?—?¯Qïǽðû€gŸþ®ùNÙǹ8/ý_ÖÞI€}qùqþ8çÛœqŒQýÁ¿õ¸GP9÷?Ï×#ùý(òõþ¿­@??Ïn�?‹ÿ^~¢¡÷úcè8íϯz/ø #üúN¼ò8ã½þ¿­5?Ï�ðãŸçëFŸ G|\ñÏoó‘êhþµþ¿¯�8üÎ8õôôúÇ‘Gõý˜ ýî~½ÿ.}NzÑý_×È=ÇLsžÃŸéèzð; Br~¿�QÓê:>´\äsëõÎ:gÓŸê(òþ¿¯êÀ.~�0zõý€çŒtÅ úþ¿®À&xïÏå�˱éïØw<¿¯ë¿ü8}zñÛ¦8ÿ ñùðÁþ¿¯øp^ýŸ¾zg¸ìyçž´~×ü� Ÿþ¿§áÔúó׿z<¿§  ;=3Ó¾{ãëßò£úßúÿ†x/ÔÛМú ÇLþþÿP g¯s�NÜãñÈé×=ù¢ÿ×ÏúûÂÁØry=yíùg§ãß¹Ãúþ¶ô8õÏaÔ~ƒ“žÿLsÁ¢ÿÖÿ×õ° ïœwç×9útì?Zw¿õ÷à¸àû>çßÓ·à®Æ9È=øü°?.OLð(¿õý�׿<瞸?ˆè3ÈÇ4\Ó¶3ÇnžüŒŸ\ààS¸ Ç®8Èü9Çlç¨éÏ·%LƒÛ©$}xã�œz‘×õ¢ÿ×õÿ?¯øp÷ÏN~¸>ø?Ï¿RN ÿ_¯õäžÇ®r8ïÉÈÈÆz�ÆG9ì_úüŸõó8Æyô8íŽr9ü�§®h¿õýÀ#¾=:qÁüðsÛ¿n†‹ÿ_ðt㌞3“ŸÄúŒséÏÒ‹þ¿×õ¨]ÃçËߎŸŸL /ý_ר G¡éÏ=±ùÆ;zœsEÿqßßצz€~½úôàwþ¿à‡õýZ�¹É#Ó¿·c�ÌçžUÿ­@8ï�CÓ¯sž?ßuɧëúþ¾àÿŽÇ~8ôüG¯¯ÿ°úûñŸÇó¢û]_×ü0ç€9ÏaÏ®ÄdðJ.òs‘üÉü>¼¿J/ýv ï×ëÓ§a�~¹éß«¿õÿ#§·8Æ=}ý€çŒr)_úþ¿¯¼öä秦=øíÎ0p:ñ‚ þ¿¯ëP?_Lœøä:qÍ+þ /~§ò?SÓ=À=yç“É¢ÿ×õý ‚yÏ>Àï¿=³Ÿ©ëäqØwéžÜœtïÉãƒÛ¿õý}À�=½Îzàý:gÝ ýþ¿×õ¨3׹ǧnqøätëžüÑëçý}á`ì9<ž¼öü³ÓñïÜ¿áý[zœzç°ê?AÉϦ9àÑëëúØ÷Î;Œsëœý:v­;ßúû€p\p}¿ŸsƒïéÛðW ãäü~X—'¦x_úþ¿ÈëßžsÏ\Ätäcš.éÛã·O~FO®pp)Ü÷ÇØõéÁëÛŸnJ¿õ}Àw îN}>î8ã’;õõ¤åý~ºŽÂgœ“œ|ÃŽ3žG8<û‚x=I8›ÿÃï [úþ¶þ½D'¡8=¸îw3‘“÷Gã9õÿ¯+võÿ ý~C `ÇãÛ$‘ϾHÀç’N0}ïqŒÃ¯Ð ½~½Ç¡õu\þv/¨ÒËÔ»<�ÙÁ$óî8ÏLdŒš\þçý]ƒ—oë·õÿn៽�HüÈã9ã§?ŽÈž}?¯À|¿×õ`ÝèHêÜç<~°89$ŒfŽë§Oë ¹¯ëüÃ~Ü;“‚O ä㟡àÐçÛ_ëúÿ†cå ýNI0x$ŸÀ‘�ß'=1É΢à‚@<Œ\Ž‡Ã£Þ—=ÿ¯¿ú¿O�r­2cÓ¾:tè>˜êÆäp)óì¨ ° ÛÐ18ç ç§=p¿Z9º½ÿ¯.¡Ê(~r¿Žz�Ï®?,ŒžÎËþO×þ9PâÜöçñÎF1Ðto”=±MOÏñ·Ï}?­v_6éÉÉÏ<ôÆãå÷ë“�zšR×õýzËý_×qá‡Onz3Ï^}€9àç >oéýÁaÁ‡NsžcŽO8 �çŽîþŸŸëüúÖ¿×�ðÀñЂy ÀãƒÔw8ÈéÍ;ÿ_×õÐ-ý_ðãúŽA>ç¦ìóƒ×ç’Aj/ÛúþºÊߗõý~c0 Ï<öÀǾ9n;g¨'žôÓÿ‡þ¿­Ö 8ì;ôÏnN:wäñÁí‚ïý_pàOosž¸?AŽ™Ç·Bÿ¯õýjëþqÔŒvÎGCÎ}é§ý_×à ôŸÏ=B~�þ´™ü{c§cÎ}³Óèh¿õÿ:g¡íŽÿç·AÖ�ÿ¯ëôéǯá�¯åÇ?Bÿ×õý\8÷¿@AÀéôãŠ3ëßžr3Œãô>¾ƒ=‰ëúÛúùç§§>ã§âzóÏOÀÑëúÿ0=9Ç˟ר÷ãÞ�ø}À3ž1ß#ôãŽ{vêzúÐØyÎz`þ¿þ¿^ç¹4_ð@3Ó¿cמI<Ž¿ýz?¯ø OÿW|�§lã�\œþ¿¯ëo$À>¸ü¸ÿsíÎ8Æ(þ¿àßúÜ#¨ûŸçë‘üþ”yzÿ_Ö �ç·NŸáEÿ¯?QÐûý1ôvç×½ü‘þ}?§^yqÞ‹ÿ_Öš€çƒÇøqÏóõ£OÐ#¾?®xç·ùÈõ4Zÿ_×Èœ~gzúz}ãÈ£úþ¿Ìþ÷?^ÿ—>¿§=hþ¿¯ëäžã¦9ÏaÏôô=x…!9?_ǨéõZ.r9õúç3éÏõy_×õ`?N˜=?úþÀsÆ:b…ý_×`½xíÓ�xüø?àÿ_×ü8/~¿Ïß=3Üv<óÏZ?ëþÈÏÿ_Óðê}yëß½_ÓЇ™éß=ñõïùQýoýÃ?¼ ýN?¾þ˜ÇÝøä}zþ=ºôëì{ýIëúwsÐ<õý úwúÐgñíŽ�ý�9öÏO¡¢ÿ×ü8鞇¶;ÿžÝZ7þ¿¯Ð§¿†>½ÿ—ý ÿ_×õp ãÜýý§ÓŽ(ϯ~yÈÎ3�Ðúú ö%ÿ¯ëoëä žžœûŽŸ‰ëÏ=?Eÿ¯ëüÀLôç.^£ß�z?á÷ÎxÇ|�ÓŽ9íÛ©ëëC`ç9éƒúÿúý{žäÑýÁÏNý�^y$ò:ÿõèþ¿à€øÑ¤eHÔ³1 õ랣sÉ ’{à¿õý_“ ÔéÑ�»^íÀÞØás€@~ùˆGõëúÔM_ТÌX–9,NI''$õ>¹öãœzQåëýZ€ßÇ�óÛ§Oð¢ÿן¨Ðûý1ôvç×½ü‘þ}?§^yqÞ‹ÿ_Öš€¹fèzòŸü?õúù wðÆ÷¹ú÷ü¹õý9ëGõý_"ƒ=ÇLsžÃŸéèzð; Br~¿�QÓê:>´\äsëõÎ:gÓŸê(òþ¿¯êÀ.~�0zõý€çŒtÅ úþ¿®ÀZ†!�2N�UOB=[غ;žp:’]ütŽÞœdÿ,?˜.;õþ~ùéžã±çžzÑø_ð~@I ̃ß=zt=:öÏ=ºõ4yG8‘¸Ó=;ç¾>½ÿ*?­ÿ¯øaŒÏÔãðëïé�ìqíÐÿ�þ@=¡ç�zŽ{u#xè­Ÿ×ãp)IǧåŽÿ<_×õßT™±…_Ï×>ŸË§Rzb€žßâ:ûôþ”¿¯ëúÿ0 €zãœÿ_ר§ý–Ÿ/éììútê?ÏϳGõÚÂ$RÈëÆGèžø£§OëõPÁÇ©ý¦yü:Òþ¯ý}À åˆÆIž}ÇŽ?ëÍ;ýßÓ° -Ÿè?Èþxǯ¨gôî?ϯ¿뀺_×ô€§çéõül­þ¿¯Ë@ óÇëŽÜÿŸË½ F–{ýGÓÓ§wý~€üºzÿNœöÏ®3À?¯ëú@ç¦;óý1Óôÿë×õÔúñÐuééíǹîqŒf—ÏúõÜ#¸#�ñÁ'Ž:~žÂ‡ý/ëúü@B!×úÿŸÿU.}Rœcƒôàzñ@ ž·åÓÜûg§z�õ÷g§=?1þ{RùÁϧø}zŒý=}9£ü€3ïíþÓ]>£�^Ÿ€ìG^ž‡ßõýyösé�Äúùàzõäš?¯ø ý?ÇüŠ? sŽ¿OéÜ}>´ÿ¯ÃþÉ$ð=úõõþ|gú+€3ÇaÛž~¼çôõúÓÿƒÿ éùþ b§#¿_LŸÈöÅ×õýn›dtî8ÿ<~=xÀ¤ùÇ<†3õüxÕ¼€{Ÿ›ðü¯çø_×õÜ“ÇçíþG­0°ûƒ·~G\÷àc¿¦h½¿¯ë_ëÌd×ôàÿúþ½E×ùiòþžÎÁŸ§N£ü÷üñÛ4]¬!x÷ägéǧäsÇ�ëúó?SÏãü³ÏáÔR3êG¨Ÿ>ý:óŸ~iþ_×�ùÿ9Ï_Súù_×@ þ�Çùõ÷àýpOëúþ�ôüý>¿€íƒõ¢ÿ×õùhžxýqÛŸóùw£ôÈÏòϨúzcîÿ¯Ð?—O_éÓžÙõÆxõýHôÇ~¦:~Ÿýcúþº€¿^:½==¸÷=Î1ŒÒùÿ^»€dwqþ8$ñÇOÓØPÿ¥ý_ˆOä:ÿ_óÿê Ï êOãÓŒp~œ^(3Àöüº{ŸlôïOñþ¾à ôç§æ?Ïj_/ø ôÿ¯QŸ§¯§4�}ý¿Ãúb�ë ÔqëÓðˆëÓÐûàþ¿¯>À.}1ø�ÿ_<^¼“Gõÿ§øÿ‘Gäq×éý;�§ÖŸõøÀäçÿ¯××?ӯ讑øÿ?¯9§ýÀþ¿•ì ö—ÿ[Š@8�¼Œ^þ»‡¥+ÿO·õ÷úþ¿¤ÁÿõàôÉëžÝ üu:õý}ÁÉÇóõϧ~Øq“ÀÆ)ÿ]ÿ¤�8ž9ß\~&�ëëúô¸ “Œß×õç$�¥×õä×õý|Àœ¿Šžž˜×'>Øã9 ·CÏ9ôã<{ñÉíé@ ?R}úþ¿—QŠ?¯ëúØ'‘’Rèsœ}}ñúóGåþ_/[™>œöÇ_N§ôÎ;{Qú~_×õºÏ׎„c¶3ùާÓ<úþºsÐcœ`½ÿ—l`óGü?õåóý¹àzã$tüú¹�ÐbgcðÉëëÇ~8=;Q¿ôÀ qì8Ïòê:sŒŒúóÐ5ýZþ‚ÜPÀúgü=#†Aô¾_‡ü7èÆúöz{wé�^rpZ>?Öûü„�ÔÇáßž8Èüñìý[úþ¿ˆX~]Oóö?©ííGõnÿ×ü>�Éüs€AÇ=G^8£úý­~Aý\MÜcü�ø‘ÏéÆO\ðúÿ_ðß×ÉŸ×ëúÔ\�·§^§\~8äb—õ¯õýh ÏãØ�=yÇ à8æ�ëÖàç¯'œwÿ†0Kþ¿¯ë¸< ÿ‡Ó?O§¿¯Ì@¯^Øç�¦9þ¼tÍÖ½¾ÿøa†î½zýr23ü»�p9£·õÓªëðÿ†'ñõúÿõÇõ<”õù˜€öÔœð{c§·çŠ?/ëúÿ†¸`^‡‡ßùþ9ö§ý–Ÿ/釦 [·ÔË�ùnƒ=OÏúÓ¨_æPyçéÆqÉç×éé@'ó?¯>‡×ò=1Kü¿¯ë°¿¯ëþ¹äg©ÀèsÈ?O__~rtþº|¾áФŽq“ؽqϧLŒàAî2Ÿ®Û~×_È-�ÐñÐŒtÈü{ñÏõà+ùÿWîV�<¿¯éú Ü~œòÇø qŒ“Ÿ¥+éýÃ÷ë¢õëúù—Áô#8è>ï#'ǰì;ƒPÞŸÕÿ¯ë¦†ÿ×õý4¶#.20=qθÇ9$|¸ç�}%Éoçk~©ôüJ·õýy´ÞþÞãðÇNq‘ÎppÇ¢ï¯õßþ·Ü1žw$�½O?§ËÁŽ Œàæ“~O§§õ÷1¥q<î ç¶yéôëÊã''<œc§›]×õëýv†4£¸+ÇNœ{ž8à qÎ1ŽÏú·ã÷þ°Ö”×>¼àŸ^FAç¾8ÈüW0­ý_×@óqŒg«sÜç‚09ÆG·\ñÅÞÒþ¿£²þ¿_ëÌ ÀŒFO^À#=zü¹èq“ŒäŠ9¼ßõÿÿ†ÿ‡þº—qÐtéžOœdrsëš9¼Ýüü¾[÷—õ÷‹ç~8úÇvr3ü³éÍß/ëÏñ߯ȲÓ_ëúÿ‡çpO#ã>ØéÐíÀÉÁñÍÞ‡ço.¡o¿úc–^¤ôëÏ~£p¾ü ŒpF8«ÿ_×õùŠÌ�JNx_^œtàÿ9=Ú=V©K×úþº~�fJ­Ó#¸ÀÆqŒç�@'éÀú æÿ‡ùÿ]k’#çŒqÇR@ôþ!Îx8ïžùª¿žŸq-ŸõÿÔ“w,OCŒ óÉÁÁÈô=F~œÕßOëþño×q~~�»žH9ç$6rH?7luœ`ò¹§ý[_�ýiÿ]w$u<àc�ÏR óŒ‘Ç_úüÿ®�o/ëúþµžÇÛÑsÇ÷�?­]|Éþvò1ý{úî”_ú}¿¯¸?¯ëúAž¿ý|€ûóއðêvþ¿¡ý_pÞxÇ\õçüûtïíT Ïoñ}úJ_×õý˜@=q�Nÿ¯ëÔSþ¿ËO—ôöv ý:uç¿çŽÙ£úía Ç¿#?N=?#ž8_טÉúžåž¢� ŸR=@üù÷éלûóOòþ¼€?ÏùÈþxúúŸ×Ëúþºgôî?ϯ¿뀺_×ô€§çéõül­þ¿¯Ë@ óÇëŽÜÿŸË½ F–{ýGÓÓ§wý~€üºzÿNœöÏ®3À?¯ëú@ç¦;óý1Óôÿë×õÔúñÐuééíǹîqŒf—ÏúõÜ#¸#�ñÁ'Ž:~žÂ‡ý/ëúü@B!×úÿŸÿU.}Rœcƒôàzñ@ ž·åÓÜûg§z�õ÷g§=?1þ{RùÁϧø}zŒý=}9£ü€3ïíþÓ]>£�^Ÿ€ìG^ž‡ßõýyösé�Äúùàzõäš?¯ø ý?ÇüŠ? sŽ¿OéÜ}>´ÿ¯Ãþç'?ý~¾¹þ�Ep �ÇùýyÍ?ëþõü¨Ï¯ùôúãÿ­HœsÇøc?_LJý[È?ç±õüÿKúþ»€sÆ:ç¯?çÛ§j`íþ#¯¿OéKúþ¿¯óÈ®1éÁÿõýzŠ×ùiòþžÎÁŸ§N£ü÷üñÛ4]¬!x÷ägéǧäsÇ�ëúó?SÏãü³ÏáÔR3êG¨Ÿ>ý:óŸ~iþ_×�ùÿ9Ï_Súù_×@ þ�Çùõ÷àýpOëúþ�ôüý>¿€íƒõ¢ÿ×õùh‘ZG –fè8Ïóœ zöÇŠ?@6A‹N@]H[ûƒÓsŒ­œ�qóù!~^Kë¿õù]ÀÂÏNz~cüö¥òÿ‚ŸOðúõúzúsGùgßÛü?¦(þº}G½?ØŽ½=¾ëúóìçÓˆÿõóÀõëÉ4_ð@·#I>èäÓ§Þ=±è9Ïå–¿ÏúÖÀKæ9täôëŒ�§Ö†ÿà_ÖÀFs“Ÿþ¿_\ÿN¿¢¸Gãüþ¼æŸõÿ aÿX?è:oÓ·Ò„ÿ¯ëï±+BÌIÜ=;û}qút¢Þ}¯¸ˆ®áøÈÆ~¿Èùÿ]€<†Ä?^{΋z}ÿÕÀÏ,Ê£‘Œ“Ç×>‡ON1è*F7=89#§¶:{ûŸ\žÄ¸<OSŽzýáõÀ íõôþXçäš.×õÿL‘þIÁo×'Ò� ¸t?Þäÿõñÿ×äö ,LŒÄŒ±8^§$œmžs�ï÷}èFçJ½‚Ù.¤@¹xÁáS÷YÆHù�ÁÛ÷zÎ(ÿ¯ëÌÈÉÇàyìON�1ßž?,Ð?ëðž™ëÆ}}sÇàzŸÎ‹……íë�øúçè{õéǰð¯ëð ú‘ÐÿŽ&€ù†s�Ð÷äûzã�^1Š. ÏNzsÏ¿oÃ¿çØ° ç�¯P3ïÓ�þ¾sÈ¥pþ¿@Î}½¿N3ž}¾€àqL?¯ëåýuŸ‰üsøv<÷4€3œöÉôúÈéÔuz⋇õùŠNO¸ïÈïÉÎGA�L~4gð#õÈ?N8íÔò è Ÿ|ŸS×ùztêy($~_çÐõéùÐ ûtÈéÛ<�üÿP†IôêsžÇŒ}p)\-ý_Ó#ôäþ=¸ãõœô\Ï¿ný¸úôéè¯jp<ð£<äsý8ÿ˜§p°1Ïã§{öçž¿N9=P Èú~C°ãýîÝú `óNáarbz¾ùÇ·éÕªØ9 cü?Ç’O¯Jß×õý~Ž##rñê9ïßœíÿëP‘–Çû œÿ?c�åŒÐ¨ŒÃ…ôö±ÛÛ®Osì(€ð}=N9ëô‡ÔS<~ƒ·×Óùcœc’h¸_×ü2Gù$wp=¿\ŸJ@.áÐÿ{“ÿ×Çÿ_“Ú€°n83ùŒúg±ãñé@˜Î?N½Aþ}s@N?ÏbztéŽüñùf€þ¿ éž¼g××ý8ÿëç<ŠWëô çÛÛôã9çÛèÃúþ¾_×QéøŸÇ?‡cÏsH9ÏlŸO <Ž�GQ×®(¸_˜¤äûŽüŽüœätôÇã@?\ƒôãŽÝO ž�€™÷Áéõ=‘ǧN§’€RGåþ}^Ÿ�`Ï·L�Ð�³ÈÏõàéødŸN ç9ìxÇוÂß×õý12?NOãÛŽ1ÏQÉÏAEÀ\ûöïÛ�¯Nž€zö <þ}Çÿ«�ó€)Ü`}ÇåþsÏSŽÜsÆP„Èú~C°ãýîÝú `óNáarbz¾ùÇ·éÕøôÿó’hëúþ¿à;·¡Ï?N½[œ‘Jãþ¿Aà^;¾˜îzqŒö£ïþ¿¯Pìg’GC�Æõë�Ó¶O9à½Cú×õºsŸ¯^=ûp8ÿëP ™õë’Ž¿CEÿ¯ëúõ 8ê:óø£±ç8íïL?¯ëñ ÷÷ãÜw?×Oj_×õýu ®?Cõ^sÛ‘œdu'Œ .×ùï°ž‡ñöç#øç?Ÿjwëúþ¾àȃ„øç¦ÜŒqŽ�ºàwÂPùÿ­ÿ¯ëÌV[ÛÏúþ¿BA7+‚ $�r@yç®2j”ÿ¯ò.�´þ½IDÃ?ÔvëÇN1“Ôr}ÍZšï×ðþ¿­Y6ýw¶¿—õò,,ÝóØzœ`žpÙÇAžƒ¹ç�#$ÿ®¿×ùlMºÿ^š–™ =øï‚>‡¿ãÀŸõëÚúõ¿¯ëúØœ0ÇnAÀÏdÿ_×ùú’¡'�I޽º°ìrG'+ž Vÿ¯˜¿¯ëî°ãŽyÏOË$tö#“œd{´ÿ¯ëúü§ô†öô9çé׫s’)Ü?¯ÐL�‘Œé×ÐŽç§ÏAOúþ¿«€™éÁÉ8±ÓßÜúäö%Äð}=N9ëô‡ÔS<~ƒ·×Óùcœc’h¸_×ü2Gù$wp=¿\ŸJ@.áÐÿ{“ÿ×Çÿ_“Ú€°n83ùŒúg±ãñé@˜Î?N½Aþ}s@N?ÏbztéŽüñùf€þ¿ éž¼g××ý8ÿëç<ŠWëô çÛÛôã9çÛèÃúþ¾_×QéøŸÇ?‡cÏsH9ÏlŸO <Ž�GQ×®(¸_˜¤äûŽüŽüœätôÇã@?\ƒôãŽÝO ž�€™÷Áéõ=‘ǧN§’€RGåþ}^Ÿ�`Ï·L�Ð�³ÈÏõàéødŸN ç9ìxÇוÂß×õý12?NOãÛŽ1ÏQÉÏAEÀ\ûöïÛ�¯Nž€zö <þ}Çÿ«�ó€)Ü`}ÇåþsÏSŽÜsÆP„Èú~C°ãýîÝú `óNáarbz¾ùÇ·éÕúcü?/rMoëúþ¿C·§<õúõ<çmý_ä >Üàuãñö8ëôÆz õûÅÏNHéÀ펞þç×'±.ÓÔãž¿Aø}E0Çè;}}?–9Æ9&‹‡õýÁ$’GpGÛõÉô¤î÷¹?ý|õù=¨ ã�Ó?˜Ï¦{?”ù€'üãôëÔç×4dãð<ö'§N˜ïÏ–hëðž™ëÆ}}sÇàzŸÎ‹…‡¢3°T˜ãuíÉ=—Ôôgèü\l°Œ…Ãܸå±Â)þ˜<rüÅÐÏ,\å‰$ó“œäƒ’{zã�âã·aU°xç¦~œþ¼wüûS¸†{õÆ}û~ž¹î(¸ œû{~œg<û}Àâ€þ¿¯—õÔ@z~'ñÏáØóÜÒ޻ܹUùW#{ã€:‡©è2O\S¸_Ÿõÿ’úý#CgfJªñ,À�d?Ä 8ù˜`º>^¥Åmuþ¿Ë~ÿq‰ŸÀ�× ý8ã·SÈ' &}ðz}O_äqéÓ©ä ‘ùŸC×§ç@X3íÓ t§lòóýC¸z~'Ó¨9Î{1õÀ¥p·õýL· #ýlœ(Áã<ž{‚xËn ^!z|»’bçázãðêyéŒ`tSŠ.;|ȳÏçÜú¸ÿ8‹Œ¸ü¿ÎyêqÛŽxÊ™OÈv½Û¿AŒiÜ,M&EöÏByr=sŽzvüÀa#ïÉÀ>½;~^ù?• ;_×õò�qÇR9ç“õêyÎÚAý_ä cÓœàu8ü}Ž:þYè(®zã?Ÿ|‘Ÿ~½ºžÂ� Û ôþ¸äóé@_×Ëú¸¹=³Ôÿ_lƒù‘‘Í[‰×ŽœôíÏnyúŒ~\Ðåý0Ï?AØŸÇ®yç‘Î=h ¿¯2DRØ''…Á$ôÀã$óøž)‹ð:{kdÓ\\÷¬»¡€ò¶àôy:eǧðž$ Ì[úy~Eé.¥T³•Žó$r‰òVPÒ¶UÁê1Ó��ÇnX­ýv롃¨ièªo,•�¹#͈röÎq�xæ6ÉÚç>‡ŒCNúÃ~=¥±‡é×óÇÿ[§¸çÛŠE\\žßþ¬tÿ�_N”À3Ó§Ôúxöíßjý˜Ï@sþrzþ�?:Cþ¾_ÖÁÓ¯§×Óü‘Æ=òrÃúþ¿Ïò ŒóúûäÇ_~i_×õ÷}¯ëúaž�Oæx÷þYõàõý_ssœŸç>ÿQüºþ¿¯ ϯ§§N9Ç�ºã4õýy‡¯8äýGr}ÿ>½Mý]<ÃñëŒôŽG©üqŒôÈý^@~¾ž¾øÇ’;òO¸Í ôí�Ç©íÁèxõé�JËúþ¿0'=}xç�ðǾ9üÈýl¨9ßËëÆ}xëEǧõý_�OåÈÿ9éÆqßð ?¯ëúÔp°OØžÄgúúu£úþ¿¯Ð?¯øoëAYòpzŽ£°Ç8üH<`ÌþÃüóìzâ�ëúþ¿!‹Ï óôë�~:r:zd´ úþ¿¯ÀAÛ§ëßÓêÝG4úéýw}3ÀÇùëÓ¨ë@^�tü‡© úãã·¾}9é߸æ�ÅòŸ¨\úg=òG¿QÔúRøb>Ý õÀÿ'ŸJúþ¾_ÕÅÉíž§úûdÌŒŽhÜN¼tç§n{sÏÔcòæ€ÿ/é†yúÄþ=sÏ<Žqë@mýy‹“Óñ9ôã‚yý{c§Júþ˜nëùŸ^¸ÆzÿQÛøuäõõÆ9ϯ~�8§(BaÏ;zúä`õ'Ÿ¦0õÿ'§_ÏýnžãŸn(ÅÉíÿêÇAïøõôéL=:}O ç�nÝñÐö _×ù€<ô?ç'¯éÓó¤?ëåýl:ú}}?Écß',?¯ëüÿ ÈÁÿ?¯¾@u÷æ—õý_pw×úþ¿¦éÐtü:g�åŸ^_×õ÷0'9ÁéþsïõË ?ëúò ÷úúztãœqéÛ®3@_טzóŽOÔw'ßóëÔÐ×õÓÌ?¸ÏAøäzŸÇÏL€_×õäëéëïŒpy#¿$ûŒÐ0ÏNØüzžÜ‡�^˜ô <¿¯ëós×׎xÿ {ãŸÌ€_ÖÀ:ƒ‘íü±ž¼g׎´\z_×õùþ\�óžœgÿ úþ¿­DÎp}¿CÓ?†{u ?¯ønâ“ÏLcߎ¾ß‡õŠ÷†�aþùö=qGõý_�Åç�yúuÇ¿9=2Zý_×à íÓõïéõ�n£šýtþ»ŠqŸ—ç¾ê84õúÿÀb’2=G|r}ùþ‡®9š~¿×ôÅÏŸ§äOÿ«©ì´¾×õýv>ïëü„ÉÆ1ŒdqøñÇòïéÅ×õý|Áþ¿×áÿ ô÷üÁí�z“ž™=‰ý� ÉÈÏN=¹_Ã×ôÿëõ þ×éó’áž=}Iäg‘Ï~hÜ_×ôÅçóçŸÃƒŒô÷ÇÏQp·õýh.FsÉ=�oǾ:×€ü?¯ëðè?ëËúê&yüqŽFrO_Ãé�ôäõýÃõìü:väý{¤ŸËôú}ÿ×â'¦;ûþ8ü±ß“ŽH£çýwûû‹“�OÏ·O®_N†€üVƒ�©Î}°@9Áàú?¯ëú°sŸ_Ã�©ëϧ¦8 Qòþ¿¯ëQX:}××ùò?Oëúþ¬×õþ`qƒ�Sϧ¸Æ :ŸZòü¼»†zNsëŽqŒóéßš.×ü<ô<þO¿®~§è\×õß dò~¹ã?€Ç@qϱœdP!={~Žù÷éÜž¼ã_×õЗßù õ=zñùœñÔöê3Ó4z_×â/é0äñÁéúr1Á<ŽýObFhÛúî×õý/ÄLôç�Ÿ~§·^˜ïƒÓè@þ¿¯øç9ϯñíÇL`c8Æ?Cúþ¿áÃúþ¿¤Ç#Ðuú}{ö'š/ýVœã§NÃÿ¬8Î^ü~ÿÕÿ¯Ð?¯Ïa8>� ïŸLqŸÃ>Ù÷?®�ýZÿ]ϰCÇ\t¹1ëŠ?¯ëîõý_ðL�è?ŸnÄÏŒç_×õú�Ëúëýz}œääôë�Ë�x‡èùþBvéï×?çÛíõ¢ÿ×õø�úè÷�£ßÿ®Í@?L`ã“ùÿ�^ãšúþ¿Ì3×è?™õçê:ŸLÐóþ¿¯PÉÇ@:ã<óŽxãòÇCŠ?¯ëúè×®ÁŸO¦?1é‘ëÏLƒžÄuÈÏN=†GO_^=qÓš?¯ëúØ@IÓŒõõÎz矛�sŽæ�ëúþ½9ãßžyôàãúã# qEÂß×õ§ù‹‘ϯ'Ðöîyï鞸ì¨_ÖŸ0Ï<ôÎäg9ëø}0>œ—ëúÐ <ŒtÿxçÔAêIÏaŒboØ×oë_ëK�8çSíž0}9?¦*[ü¿¿¯¸‰Ü…'$îF1ÀëÁÏ=ùþïݬ¤ú_òõûôüŠŠ·Ÿôʮ·®Üç�LÕþ*x¦Åc:ªÙêrÝ®�á ùð\Ù¯‰©ù߈¤¤Ú êµ…¡wðRÃEà B+ùiSNúÊòm¿Û2ü›€§`°”pñI/iÊ�Zšo:­J­FûÎ^šh}ÿ®«ÿ=4ÿü¹ÿä*ùÏíóî|OKêòþeø‡ü"º¯üôÓÿð"çÿ�¨þѧÿ>ç÷Ä>¯/æ_ˆÂ+ªÿÏM?ÿ.ù �íóî|Cêòþeø‡ü"º¯üôÓÿð"çÿ�¨þѧÿ>ç÷Ä>¯/æ_ˆÂ+ªÿÏM?ÿ.ù �íóî|Cêòþeø‡ü"º¯üôÓÿð"çÿ�¨þѧÿ>ç÷Ä>¯/æ_ˆÂ+ªÿÏM?ÿ.ù �íóî|Cêòþeø‡ü"º¯üôÓÿð"çÿ�¨þѧÿ>ç÷Ä>¯/æ_ˆÂ+ªÿÏM?ÿ.ù �íóî|Cêòþeø‡ü"º¯üôÓÿð"çÿ�¨þѧÿ>ç÷Ä>¯/æ_ˆ�á=M••›Neee*ÓÜ`AX" ·FÈ<ÁéBÌ©ßøs^i«þaõy4ósöÈÿ‚bþÎ_µ/†µ;={ÀzÃoŠ/mw/†~-xDÓ4Ín=I ’+WñÓa°�ƺ Ï$FóG׊j o¿û.÷E¸�o+ô~ñ+>áÜE9añµñùr”V'*ÆÖ©R“¥Ìœþ®ê9¼%f“Q­Bðæ·µ…X®C泞Ëó:rU(SÃâZ~ËBŒÔí§´QQU¡{^=ë_’P~ñü9ülø?ã�ÙûâÇŽ¾ üEÓF™âÿë“èÚ¢DÎöw°„ŽëLÖ´É#k�^Ò.lu­&áãŠIôÛûYd†)âOí<—8Áç¹f 6Ëê:˜\uZ›vRƒ»�Z5mF­ ±•±M¨Ô„’m$ßáØì|*¾ZØyòIn¥³„âúÂpjpvMÆJé7cÍñÁÀ8ö’zœ tüzW®Ÿ^ÏS‹§ÝÔ´¤äôöõÁô<|ÜàgŽ;‘¢–ß�õó!¯ëOëðüI—�9À¹Ïè8ÁÈæ´íýuø¿ëõB7 ¸ý9ãàúsOúü„ÿNÚ/OêãI£¾9>üÿC׎MRëýL3ÁÆ~¿¦ý]Oe£úþ¿¯øõÿä7·Aèýp?ÉçÒ�_×Ëú¸¹=³Ôÿ_lƒù‘‘Í[‰×ŽœôíÏnyúŒ~\Ðåý0Ï?AØŸÇ®yç‘Î=h ¿¯1rz~'>œpO?¯lté@_Ó Ý3ë×Ï_ê;c aÿ¼ƒ>¾¸Ç#9õïÓ§ôåAì9ã§o_\Œ¤óôÆþ¿áÄôëùãÿ­ÓÜsퟹ=¿ýXè=ÿ¾�)€g§O©ôñíÛ¾:Ô úÿ0ž€çüäõý:~t‡ý|¿­ƒ§_O¯§ù#Œ{äå‡õýŸä?çõ÷È޾üÒþ¿¯ëîúÿ_×ôÃ=:Ÿ‡Lñïü³ëÀ/ëúþ¾æç8=?Î}þ£ùtý^Ažÿ_ONœsŽ=;uÆhëúó^qÉúŽäûþ}zšúþºy‡ã×è?�Søãé� úþ¼€ý}=}ñŽ$wäŸqšéÛ�SÛƒÐñëÓ”—õý~`NzúñÏá�|sù� úØPr=¿–3׌úñÖ‹�Oëúþ¿ ŸË‘þsÓŒã¿á@_×õ¨™Î·ãèzgðÏn´õÿ ÜRyéŒ{ñ×Ûðþ ñ@¾ðÏàqì?Àÿ>Ç®(þ¿¯ëò¼ò?N¸÷ã§#§¦@ë@¿¯ëúüº~½ý> qíÔs@ÿ®Ÿ×pÓ< ž½:Ž´õé×OÈ Áõ#¡Ço|ú{~cšb=qŸÏ¾HÏ¿^ÝOaHíÐz\òyô ?¯ëåý\\žÙ꯶AüÈÈæ�­ÄëÇNzvç·<ýF?.hòþ˜gŸ ìOã×<óÈç´ßט¹=?ŸN8'Ÿ×¶:t ?¯é†î¿™õëŒg¯õ±Ð0ÿ‡^AŸ_\c‘œú÷éÓ�úr„ öñÓ·¯®FRyúc_ð⪳²ªIéüûqÂõä{œP=ÿ¯ëñ5Û$À!®rFpƒ°çžLà·÷@Å4ÿ!ËrH$œäž}x'·nøè{P×èÄž€çüäõý:~t‡ý|¿­ƒ§_O¯§ù#Œ{äå‡õýŸä86ý©ì3ƒ�Ç_΀ùÿ_×ôɃgÀÎ9㎙㎼p}û …ýÀ'‚¸}ªpªFö=AûŸ`sÜàtÿ×õÐuíòF†ÖÐáD².óŽUHçiÇ,:ãhã9~מ¦7¯8äýGr}ÿ>½M!ÿ_×O0üzã=ã‘êc=2_×�¯§¯¾1ÁäŽü“î3@Ã=;cñê{pz=zcÒ€òþ¿¯Ì Ï_^9ãü1ïŽ2[ ·K)@ʯס>Üð2}zuwî²þ»ÿ]Å–c'L„äÓÓ9íëŽÿ… /Ÿõ±sƒíøú™ü3Û­!ÿ_ðÝÅ'ž˜Ç¿}¿ê ï þÃüóìzâ�ëúþ¿!‹Ï óôë�~:r:zd´ úþ¿¯À–Ü~ñ{àõî·p8éÇÔS_Ó·õýw!c‘Ÿ”‘ý=úã­ [|¾îº~]ÈÉÁõ#8Éý}=¿1ÍÊ*ƦI3Û>¹Rr:uö¦'®‹ïØÌþ¾¾ÙõÀõëõÔÜ­¿¯ëúÜ=ûŸN9ÿ8àQp'¯ôçüç“õïGõý_æ?çëÔ}=}ý:Ñý]uëúó±"!b8$œX“Ðzú`g=h¸^gQmm–‹<êù×0Ày[e#Ÿ–NN1ÓGsNâ½ôéý_¡Uäi¤‘‹;’z“êGéÆ08qJÿ×õ¸Ë÷!�µ‰ Íû©:@ýá# >ÿ¯jiÛ ­¹Mn H##))"–VÁqÏ#ð-žv÷ìOn˜<ñõ£ú¸_×õþC3ÀÿéÇóüúÿ×ü0à Ÿñþ½¿ƒŸz/÷ƒþ=?ÇëÇóï@Ÿõøô}?úþþ„gçŒf€ë°åžßÓÞ‹ÿ_×õp?áÀôô4\;}ÁÔóŸO^¯~?Z?¯é€g×Óüôõü0(þ¿®áý\3�僟§ù÷&€·õýn³Û·¿OëïŸZqŽzÿNÿ†~€c½×ëúØ?¯ëúì&L÷àwüHÉ÷éŠ/ù€¹ëœ÷íÛ“ùõÇo¨ Ðž_N?Æ�ëúþ¿?烑ÿêëÏÖ‹ÿ_Õƒúþ¾Aœð8þGÓÿÖsš.€g×<ÿžÝzæ�ëúþ¿à×ôý|Ã9ëþO×üÿ"ÿ×õýlý?Ÿon˜=…ÿ‡ëOëúüg�þ?Ó�çùôÿ¯ø`ÿ†?â3ý{~>ô_ïüz�×�çÞ€ÿ?ëñèúõýýÎ=Ï8Í×aG·õNN1žÙÉ_×üûÀsÉõÇãÿëÇ8ì +ÿ_×ô‚ß×ã¯õæ(à w'žƒ�®?ý}p(õåý}Âg¿€õç§Ž~œóŽ0(ëú°¹'éß�Ôdzÿ>øÿ­7òÐGóçë×Û¸õÎ1Ö�ë×õÔ?¯ÇúüäóÏ8>Ãê:õ¢ÿ×õè×õýy žÞØéïøúõúqÚ‹ÿÃ_ uþ¿­¿M48ëøzþ#üqÆObÿ×õ¿ü0yþ×äÏ^ï§ÿ«'×…°[_0ÉöøïŒþ¿Èúð?¯ë°_?òþ´{äp}=ñõü:qéš[[_Ö�ayÈüN1ù× ëþ4_×È6þ¿Èon½N}>žƒù�Ú‹ÿ_×—âׯõø‹“ÓŒž8·p~ŸJwëäß<à~?׌ôõÇÕŸ×õ÷‰žþßáǹöÆ2áý~¿ÕÇtÏLôÁÏ=³øõú“ëEÿ¯À?¯¼MÄþYü?Éç9ëíGü7Ì?¯ëúûÀzs×ëíÏ~€ç¦×õý}À¿.xÏâ>¤~}1Ö�óþ¿¯Ä?¯ëúî<ç=óÆF98ϯ\vã¸õýKü×�þ¹'9Áô4¯ý0òüÃ>¸¯÷ííž¹î;öúþº‰õÿ'�óôèïý_ÖÁoëúÐ;úc×Ôúö÷ý9¢àŸãëŽÜ`g÷Åý_úþº�?â8÷Æ}?ŸNhëôíÇ\ãùg8ç¦3ì}ËÿÀõ¶ Oùý^�©í�Ò•Ãåè�úsõ$ tèy§ëúþ¾Aýy ŸsÎr3þ{}>˜‹ÿ_×ô…oëúØQÓêHÉöþ]HýG8¢ÿ×õè§õòþ¼ƒß�Onƒ?úÜ`R¿×è.O_oOqï×¾×õý˜[úþ¿¯Õþ¼ýzð=;�®:æŸõëÿ˜éœóÏ®°úŒv4®×Ì3íÛÓ·æ{ŸÐ})ßúþ¿¯Ôþ¿¯ëäÇ·§cø�ð öÏ¡ý]ÐZŽÏžsïîHtè{t›Ùì; ?‡±=3�ß7çÁéž…I¥ý_Þ?ëÍ�1>àz‘×Çדœ‡1š†õôþ¼ÿ®ã]ÿáÿ¯ëR»–ééž1Ôä€Ùç�29÷ïY7ý|µ/ËúòÛúý(HØgŸ@{�ÎNÃ#ß“œ%/?OÇúýKK§ž¿ÒùÚü ÁÚF�ûÍ®[‡Qñׯ¯_ë7!q,‘èÖ>ðõ�˜“sn··¶Ó$žU�Rkû¢»¼’ øå�­>+tÛ÷0Y>c{¤êνyÎÖ^ô¥Q'»j×D—ìüBÉù’\Õñµ¥7ÝB4éÅo²Qo¥œž‡ôª¨ªˆªˆŠ@UUQ…UQ€ª 08¯çÝõz·»?B@Éb�älí�Û'j)c�Üàp;ÓŠr’ŠÞM%êÝ�7dßmN-¼[.ã¶É6äíÝ+nÇlá1œuÇê,¶6W«+õ´U¯å©Íõ‡ü«ïÿ€'ü%³Ï”_÷õÿøŠÙ°ÿŸ²ÿÀWù‡Öò¯¼rxµ÷¯™f›27l•·Ü®Sޏ8ÏLŽ´ž]>Z®ý/kùÙ‚Ä>±üNÔ@#¡�¡äW•¶‡H´P@º½´wZuÒH3²'š3Ý%‰Ñ�íÈÚØêŒËКÛ7 ÔÚ{Î1~q“I¯¹ýödTJP’}›^«T?ðpg„ô�öªø[â»#·Ô‘]�ÂnîGç<CƒÀ>œ×îq~~¾�;Ÿû–�÷ qëÏœžlg ç'dôôþ¿?™/oëþ`1íÔô㜎½y\óÇ'€ë�"ú_×õtJíúÿ—ü9:ã°Ç§\g''€rzàsNÿ×çÿ /Óúþ�Ï©<Ÿ\u=ýxìzUëëôìM¿¯Çúÿ€/AÇ|äý8ï�þs׋�úþ¾ï!¾ý¿Ï§ÿœp)ÜBäõþœÿœò~½èþ¿¯ëüÂÂgüýz�§¯¿§Z?¯ë®¡ý^vðëÏãúuëéïEÃúó ÿ‡Ó¿©ïüºv¢ÿÖ�÷ÿ_×üÏùÿ¯r þ¿­À3ëÏëïþr(ý~Ÿ×螸ã×óôÿ?J/`þ·Ó�ñüúöéǦhyý=zà�lqÇÿ^‹€ßǯ¶>žßÓÞ‹ÿ_×õp?áÀôô4\;}ÁÔóŸO^¯~?Z?¯é€g×Óüôõü0(þ¿®áý\3�僟§ù÷&€·õýn³Û·¿OëïŸZqŽzÿNÿ†~€c½×ëúØ?¯ëúì&L÷àwüHÉ÷éŠ/ù€¹ëœ÷íÛ“ùõÇo¨ Ðž_N?Æ�ëúþ¿?烑ÿêëÏÖ‹ÿ_Õƒúþ¾Aœð8þGÓÿÖsš.€g×<ÿžÝzæ�ëúþ¿à×ôý|Ã9ëþO×üÿ"ÿ×õýlý?Ÿon˜=…ÿ‡ëOëúüg�þ?Ó�çùôÿ¯ø`ÿ†?â3ý{~>ô_ïüz�×�çÞ€ÿ?ëñèúõýýÎ=Ï8Í×`Ùý®:ö'Ú€ò>üŸëþyéú/ý_ÒëúØ_ëëíŸ\^¿QÍ ¿¯ëúÜ=ûŸN9ÿ8àQp'¯ôçüç“õïGõý_æ?çëÔ}=}ý:Ñý]uëúó°‡^Ó¯_Oz.טgü>�ýOåÓµþ´¿úþ¿àÏøý{�h¿õýnŸ^{ÿ_ó‘@?ëôþ¿Aʬì ±<}O<ñ�~{{f‹Ø?¯ÐÐ]¶©�ƒ3O]½Ç×®q�®4_ïþ¿5ý_=Šå˜œ’KIÏRNyýqÇÿ^‹�úþ¿¯QŸ�_l}=¿§½þ¿¯êà.Ã�éèh¸vûƒ©ç>ž¼ÿ^ü~´_Óϯ§ùéØçÛ‹ÿ_Öáý\µk “9UáGß';TtÏXö÷'§Zz_Ö¿ÖÁ·õýL–îõQM­¯ ŒI ÎX÷PxÈèãý‘òõ/¥½¯ëïëçæd ãõþ�ÿ ýÇz_×ëúØ?¯ëúì&L÷àwüHÉ÷éŠ/ù€¹ëœ÷íÛ“ùõÇo¨ Ðž_N?Æ�ëúþ¿?烑ÿêëÏÖ‹ÿ_Õƒúþ¾EÈ"I'ʼ�¡#ÓÓ9Ýô£×úéýw÷$t &å<‚0G·~™îißúþ¿¯ÒUÿ¯ëæAæÂzÄ!×�ýïóü‹¡ëý_ÕÃ̃þy;:ŸÇ9ÏáÒ‹¯0³î'›�ÿAüxϯ|ûûQp´»þ_äJL*Šæ1†è1Ï~¹ ~¾™£D-{ëeýy‘‰ ÿž_�Ï>½hÓ³þ¾c´€Ü"‚"LÜðsПÓëÇ"•ÂÏ©_¿ׯ㎽�Éö¢ã,"¬kæÊqèæ>¤ãúö4ÿ¯ëúù{»"œ³4§'�Î`}H=óõ6VÖþ¿¯ëB öü}¾£ŒtÏêHíSøÿ_ðF! §ä~?ãíÛ§'õ`·õýuþ˜ã� ÇCø÷ÎýYõõý_�ôRÄcqÉ I$㜞t'zQý_×üò:{ktÒãYî’þEÌ0ðVÝXHùë'Lãû õj{_äK×ë¹Yäy\¼ŒY˜î$÷ï�ÑÆxíŽJcZÿ—õý~�ÿóíß·ÿZ€ÿ‡þ¿¯3R[™àµ²HÈ7,¨“¨ÏON§Š;|ÿ0¶¿q77Ó8Ž9]™¸í…Á嘅áG¿êx¦»_× šK¶ÿðÄ:¶¬ÑÄl!˜ÊämºœcŽE¸!˜}rØ@—_Ãïÿƒär¼c¯æ~�OÓ?‡¦K•òî;<Ÿ\ö=¾žãéíì_úÜ5þ¼„ÏùÛÜÿ\}hþ¿¯ø!ý˜¿OOçßùúgÜñ@[úÔn{uçùôöÿëÐ+~!ß ãßõþ_¨×õýiù.sßüñÐöíÉ ŸPhõ×úíú‡àG®;þ£®3ÅwõýX_Öß×O먙xÿ#=:ôéÛ¿J4õý|ÅÿõúzvÏôö4 Áž}0úãŒ8ç£aíýà ž:süÇÿ[¿ÔcÐ þ¿¯ëA¹?—n�:õã¾{b˜[ó£>¸õüº3ô�Î�êÁý/ëüö`xÛžƒ�^Ÿ—¿Z.Ãúþ»ÿÀŸcÜœý;~'Ð Ÿoþ·<Ÿ§¯ ýßîÿ!LŒþž½¸'Œvçž(þ¿¤×õý0'œry=�ùç9ÏçÖ€þ¿¥ý|Åœúzú`óÎ;õ±Åÿ 9ŸøGC×±<öþ|ûÐÕÈóôüûã?^1‘éïÖ�[úê.{~>ßQÆ:gõ$v£ñþ¿àŒB@N9ÈüÇÛ·NOêÁoëúëý1ÇAއñïœÿú³ê/ëúþ¿!3ÏSއéÓŸéÛ ö£úþ¿¯øúþ¼ÿ¯ ööíŽùéïŽMÖ _¯ËðéÜŸLrOëúþ¿àƒüÏ·~ßýjÿý^aœbG¯9öú�M·õåý~[‡ò÷í�§#é×ò 6óéý~!œ½}ÿ?–sØÐ8Ç_Ìý:Ÿ¦L——qÙäúç±íô÷OobÿÖá¯õä&È>ØçúãëGõýÁëüÅúz>ÿÏÓ>çŠßÖ£sÛ¯?ϧ·ÿ^�[ñøýÿ¯òý@þ¿¯ëOÉsžÿ率·nIú€s@ÿ®¿×oÔ?=qßõqž(û¿¯êÂþ¶þº]DÈëÇùé×§NØ=úQ ÿ¯ëæ/ÿ¯ÓÓ¶§± V óëùƒÿ×`ñÇ8Åoëþ\ñÓŸæ?úÝþ£�õýZ Éü»téׯóÛÂߘ¾ÝŸnÜgè9ýp_×õþAý/ëð×`Ïùç ã×§åï@_§ÏÀ3ì{�óŸ§oÄúa3íÿÖç“ôõô ýßä/鑟Ó×·ñŽÜóÅ×ôƒúþ¿¦óŽO'±ÿ<ç9üúÐ×ô¿¯˜gÿžÿÓÿ­ƒŠþúþ¿à'ƒßœøgüõç¾hþ¾þ�ù ŸÇ޽9ǯ^1øuç¤ÿ_v¿w�g¶}úäuëÓ¿?ÌŽÔùÿ]íýt�Sƒß#üúçÓ§/ú·õýwëËúþ¼…ý;÷ÆOn¿Ó·LôíÉ#§`h°yßôþ¿A> óèÏ©àƒÏ^8ëÅðÃêqÀär ôô ¸ãÒ€õÿ�éè/?Ÿlc: ñØtéÁ¢Âü?¯ëúØï‘ϹãŸË‘‘ŒãŽzu£P8'?�ü;úŸLŒu–þ¿Ì?¯˜ÐOŽ21Ó·^IÆséÅ×úþ—õØ:súgã©oëúþ�އׯnqߌ h·õ·ù ¯õý_!ã Bzx côÈÉÆG;{à×õÜkúþ¾doŒsÎxí‚rI÷ã’>¹6~ŸðGýtÿ/ò+±Âàòxû¸#ññŽ3í•$ Ÿõÿçý2¢žÿ×õù”¥8öÇ'< gž;`Æ@Ç÷IÎ[z|‹�õþE)NI¹Éç¶:`‘ŒÊðN01Žiÿ_×N¦‘þ´?·/ø y'öð‰8ÿ’¯ñ#é�í >‡¿×'=ù¯ã�¿ä®Æسÿ¦ä~×ÀŸò%£ÿaXŸý)¼uøQ÷�@„0y‚B(´ !˜±³$“¶k„^}f £Ð(vÒ±˜”­í^�ãþ÷ßÌÏÙSþ_Åÿ˜Ÿð�hÿóçÿ“_ü~Ÿ×q?ó÷ÿ$§ÿȱ§ü¿Œ¿ÌrhJ2ºÙ®å!†énr9G•‘‡³)¸¤ñ˜–šu]š³´`ŸÞ¢šù0öTÿ—ñoõ6+˜Ð( €*ßÇ•çýzÜè§­)—ý|‡þ”…/†_á‘übÁÄg´À1ÔÂ›Ôøã�ø­µ|žz` gƒè3_Ø^»d™×ý�aÿ¨”OƼ@ÿÀÿØ$ÿôô�çÖ6y\ŽØ9Àç¦p:Œ`Ií_¼Áÿ]µþ»Ÿžµóþ¿àÿZ—žCŒ·®9¦sÎyÏ^r~õtEíýyþ/ÄÍ­? ]2ÊœzrN œq‘ƒÏCÔ jˆk__ë¯ãó,dž§®zŽËÏåú“Èù_×ü8[·Ëþÿ^{�?Ë×¾~éÛ¾qšhŸëM?®ŸðâgƒÏzärx#ŽüãäŒqOúþ¿¯@þ¿¥¨Ò@N9ÈüÇÛ·N_õ`·õýuþ˜ã� ÇCø÷ÎýYõõý_�™ç©ÇCôéÏôíÐ{Qý_×üý^×�{{vÇ|ô÷Ç&�ëP¯×¿åøtîO¦9'õý_ðÁþ?çÛ¿oþµÿ‡þ¿¯0α#׎û}N¦�Ûúòþ¿-Ãù{öÇÓ‘ôëùPyôþ¿Î^¾€ŸË9ìèœc¯æ~�OÓ?‡¦K‡Ë¸ìò}sØöú{�§·±ëp×úò?älsýqõ£úþ¿à‡õþbý=?ŸçéŸsÅoëQ¹íןçÓÛÿ¯@­ø‡|~ƒ�×ù~ _×õ§ä¹ÏóÇCÛ·$‚}@9 ×_ë·ê�¸ïúޏÏ}ß×õa[]?®¢duãüŒôëÓ§lý(Ð×õóÿ×ééÛ?ÓØÐ+yõüÁÿëŽ0xãœb�‡·õÿ .xéÏóýnÿQ�@ƒúþ¿­äþ]ºtë׎ùíŠaoÌ_n¿Ï·n3ôþ¸?¯ëúÿ þ—õøk°güóÐqëÓò÷ ?¯Óç¿àö=ÇùÏÓ·â}°™öÿësÉúzúÐ þïòôÈÏéëÛ‚xÇnyâ�ëúAý_ÓyÇ'“Øÿžsœþ}hëú_×Ì3€ÏéÿÖÁÅÿ ý_ð “ÁïÏðÏùëÏ|Ñý}ýòî&~ŸŸ|gëÆ2==úÐ+]EÏoÇÛê8ÇLþ¤ŽÔ~?×üˆH©ÁÇ9�øûvéÉýX-ý]¦8ãè1Ðþ=óŸÿV}@ý_×ä&yêqÐý:sý;tÔ_×õÿÿ_ןõäÞݱß==ñÉ£úÔëõïù~;“éŽIý_×ü°�ùöïÛÿ­@¿áÿ¯ëÌU p£'qõÀãŸlõ#µ·õåý~E½Él¤.Vxÿïôç ê{ôÅ×õÜZéÛúÿƒÿ®$?ÄIÝß©ü?–}†(ÜðãøÇ_ׯN¤{qŸÃÓ%Ãþìò}sØöú{�§·±ëp×úò?älsýqõ£úþ¿à‡õþbý=?ŸçéŸsÅoëRX!iÛhè,ØàÓÛ?ˆõí@‰nnÖ4û%¹Â$pF[ÔïœǸàp9:|¿¯Ð-×î33žÿ率·nIú€s@ÿ®¿×oÔ?=qßõqž(û¿¯êÂþ¶þº]DÈëÇùé×§NØ=úQ ÿ¯ëæ/ÿ¯ÓÓ¶§± V óëùƒÿ×`ñÇ8Åoëþ· Ch’@09 {�R?§|ŽÄ_p_×õ§æ<¥úpAÓÓ'ž;äzQý_p[óþ¿¯!ñK·äo™\òGNƒ¿ÐsÜ !5÷ôþ¿Ïþe�o̼¡ç¿Ê:rsÓòïš;�gØ÷ç?N߉ôa3íÿÖç“ôõô ýßäZõöÉÏèß—¦>¼ñGBVì¬O8äò{óÎsŸÏ­_Òþ¾aœïÓ¿éÿÖÁÅÿ ý_ð,¢ˆ×Ì—¡L‘ß=½ýóL—®‹Ï]ŠsLÒ¶OÝtg§Ï×>ßJWVþ�ÿ¥ýyÄ9àu' ç$ž1Ç_O^¸íGŸõýj1™üóé߯ëÆ_ÄT�úþ¿Éö={}:?®“ nHˆÅ‡î *Žç#zœôIÁï@¿¯øc¯Òí-ì^9.Êý²PL1aã€Í‚«+t�;WžH‰zúÁþ¿áÈç–ÏÏ´ZÝyÙù÷ÜaÝ~ï÷qÆ1·‚ ;ô¼Õ½:„2iÒÉ'ÝP0ã'¸?L÷8¡è+[AÎúrJÑ›yÿvÌœJv’§¶A<àÇ¿R‡¯—õýjG#5ì±Ao EDÛ{²UKnfvà ýæb8àrq’ãÛWý_Ö„÷ñØ£ØÙ¸i› ut¸Ï¼QžqŒá›¨ÆÍ’§õØK]}l¿¯ëï9’Iî <ýŸ=Î}}¸E|¿¯ëòõ#™öÏN~¾Ýº0þ¿¯Èãôö—géÖ�_Ö¡“ïŸNž ûõüºô¦!rq�ëÏlút#Ó¡�:z`Ñpó==¸ìyäã¯×ÜP/×úóþ¾BgŽ?‘ÇÓ?NýRã_©êyö?� ¶>ž¼�a۟΀þ¿®ßÖÁœg×ü�L‡%Åoëúc€“Ð{ñùŒgÓ=xêiþ§õú [œÇãנǯäsÛ€Üý;tôôÇÔ};S¸_Óþ˜™õǧ¾Gáú™íœÑp·êéÿÖïèoÓ‡ ǯ¹ú�ê}3þ4\>ïëþP7tŒóÇ99ç'#ß׎3EÃúó\c Ðuƒ§ëÇÿ_©¤žG¦?ã¹ôþ½Hé�|¯OAÇ$ŸoJ`=8ÿ?ãœöôÈý É=ÁÈöþ^¾¿_nþ_×õùú‘�Lûg§¿_nÝ_×äñú{�ËŽ3ôëH?¯ëPÉ÷ϧOP}úþ]zS¹8Àõç¶}:éО3î\vþ¾áüz{ûqÏ¿±í߀?¯—õÿÜôë߇ŸË¦së’( ¯ëúìíÇåýN�=0h¸y‹žžÜv<òq×ëî(ëýyÿ_!3‚GÈã韧~ƒ©q�?¯Ôõ<ûŒÆ‹…ƒÛO^G°íÏç@_×oë`Î3�ëþG¦?Ã’â·õý0ÿ=OôÆ}=xêÝ) ^ý»^Ç\þG=¸ ?=C?NÝ==1õNÔ\?¯éÿLLúãÓß#ðýLöÎh¸[õ ôÿëwô·é�CÐã×ÜýGõ>™ÿ.wõÿ‡#¿ä眜�ëÅÏåœõúõÿ@8.×ùKîèyëןñã=³ßšýVþºh.yç#>àãéßéÏ>µ7þ¼‡oëúþ» ŸÓ§Ôœþ¼`uïÚ˜~Bg?í{sÐ}=½ÿ¡Ûúþ¿­„õþ¿¯ÓqFsý8㟨ç#=x8>À yÿ[_ð¯'ÛÜñÿ×ÀÈ £úþ¿§¨=ľ:Žü{:~¼ñÁÍ uÔ3Èçž?®áÈ#œdŒƒ@ÿ¯�£¨ˆè'ü^øíîX¿¯ëõÿ 둎z‘Ÿ~:p8ïÎ8ôÍÿ/ëúÿ!ÿ_×AzoËŽqéÉÏSÓ°ªôè/$vÎ9éÐŒò9Çãúã…ý_×üú¿ô¿áìŽ?O¯ñø�§¨wþ¿¤/ë^�ÛŸå�LóŸn8éï‚ ?¯ø`þ¿¯øpûþ8¹ç¯_N�¨¸]ÿ¯ëæ¼`ãéúñÇL~Dð>¥ÿ¯ëpþ¾ñ?^žü{r>˜ìi\?¯Ÿõø �ë‚x߯úôã¡wëúè/§ONGóòíÓÓ_üÿ­Ã_ë¯ÜqÓ¦=H<ñ׿ôQý~!ý_×�t÷Ç=±ý2yï׎œÑpþ¿¯ëóþƒ·^çžø§Ôw¢ÿ×õýl?ëúê‡çÓ¿N‡Û8ôúÐÀ™Çõþ_�ÈöüËú úþŸõòØ:ý=¹÷Æ3ÜuÏh¿õ¿õýn?¾âóôö?Èqü±ƒ‘Ðb‹ÿ[‡õ¿õý|€ñŒã¶8öà{uëÓv£úõþºËü„Ͻ½xëÛô? æ‹ÿ_×õ÷‹úÓ`ë�ñééŒã�ñìzíúuëõŽ¿‰õÿëú׺¿õýŸÜÕ´þ¿®¨>¾ãõô÷‡Jw ÿ¯ëúôsÓÔœv©öÿp ‡éý~€=0yöíþ{ã qEÿ¯ëúõ¸_×õþB}} ïþsüðh¿õþAýyÿVáàq×9ý{gŸÊ‹üÿ¯ëñõým }ÎOnsøãüMØ<ÿ¯êÿ×eÁ¿æ1×·ãÏן`\_×ô„õëõÏ^GáëÆ@¢ý¯ëõêÿ×ê¯NÝú`�~߯§4\<ö ò{þ^ÿä÷#4®~ ô±ØóŸÈ2_ðî×õ°î§õç�¦ <àc=)?Ÿåý^cþ¿®Œ�Ž Ï·~qôÎ1ëœôÇ$KzKþ§ü�úýJï“ÓƒÀ$QØÿ>™8ã)[þ_sò-mÛúûÿ¯;”¥àq•ëƒÈúô<~#ÜtÆOúû‹�õßúÜÍ—ç’GàqÈ?¢Œt§ËŽi¿>ûÿ_×çªÿ/ëOë¡ý»ÿÁ?äÅü#×þJÇÄž½ä#gŸ×5üsãgü•¸Ïû`?ô‰µp/ü‰¨ÿØV#óGï-~}ÙEµ+%MÊdpp‡æªAü l°ÕÚº§/�—àÝÊå—a?´ì?çáï—ÿâiýZ¿üûzÿ1òK·äZy¢Ž?9äE‹‡ÈÚCtÁsÛÏjÉBr—"‹rÕrÛ]7¿ku&Í»[R¯ö�‡üü/ýó'ÿZýV¿üû|Ì®IvüƒûNÃþ~þù“ÿˆ£êµÿçÛûãþaÉ.ß�øïìåqs£;p«ó.O ,$öÉì*eB´”©É%»ÑÛÖÍéæ'-Ñ$×VöøJ±–ä’Hõ‚qïŒT•J—䃕·ko½è$›ÙiØÏÂÿß2ñ§ÕkÿÏ·÷ÇüÊä—oÈ·±Ì‚H�]pÊxã¨õzkFPn2N-td´Ö䔄Vûþ<¯?ëÖãÿE=iKø´¿ëä?ô¤)|2ÿ ü�âÿþ&ÿ“…øëÿ oRÇLÿÈí¬t¯òç×_øÿ"LëþÆ”ÿõ‘øßÿ¿`ì_úzGóçrêAîF>œã°8úòOï§—õ÷ýÇçÍ[úßëoRüm¸úF=9î:’FqÓ¡ã½tÅÿ_×ÈÊÝõëý]‹q·§©lÔàu'ÐçƒÇ_N6‹õþ½??-7!ü¾ï»úÔ�sŒŽy:d{€sŒŽ†®úßðíÓúü{‡õëýom~B’7s€1Ǩà{c'Ç<úÓL‘3øžÝ:õéïÆ\óÔS¹>ǯo§AÇõÏòamÅç=ùúc®~�³×®z§épÏ~Ü÷ÎϽ=’}½)€t<ôãüÿŽsÛÓ ôƒ$÷#Ûùzúý}¸Cù_×äêF=3ížœý}»taý_� Çéì?.8ÏÓ­ þ¿­C'ß>�=A÷ëùuéLBäãמÙôèG§BxϹqÛúû„ñéïíÇ>þÇ·~þ¾_×ü?sÓ¯|z.™Ï®H 5þ¿¯ë°g·—ô<}:tôÁ¢áæ}%ûüðïí ûLüø)âÝGZÒ<7ñÆÞÖ5/Ía¹gi5¥äï.›6¥a©ØGsºÝµÕ…Ô[IýÑ8#æø¿9Äp÷ g9Ö�Øœ»,EX…9Pœã8EFª¥:U}ï³RÌô²|<Ç3Á`kJp¥‰¬©ÎTœTÔZnðsŒâž�c%ø¯íãû(ßþÆŸ´ŸŒþ ý£TÕ¼%V(ømâM\[ßø _G“J¾¹–ÊÞÎÊæÿO½ƒRðî±=¥�•¬úƉ-­¥µ¬�Ç\\ ÅtøÇ†ðyÇ-*8¶êas,5.og†ÇÐiU„cRSœiÔ„©b(Æsœ£Fµ8Êrš“7Ïò—’æu°wœèûµpÕgnj¸z‰¸I¸¨ÅÊ-Jœå¤ç 4’²>�øëÿðÒ¾Á:þ ~Ö~)×9ðÍ�Ç‚žãHÿ„GCð/�¼;ã?ø^y-FŽºòøšïAд RìO¬­µ—öÅÆ�&›çÚ‰ÏÎä~!ÕÏ|CθO C òŒ§‰œqª5¾·_‚Ä`𸨩{gCêЯ^½(8ÑrŸ±�EW–\§£�áÈ`8s›U©W똼E$èÞÆ� Ô«Õ¤ÚäöžÖP§Nr¼ì¹Üyn®|ñŸà7Å�ÙïâV¡ðâÿ…„>"éqhÓßx{ûsÃ^ ò"×ìmu-!Ž­á�c[Ð¥û]…í´áaÔåk3˹Ì’"}æMŸe\A–ÓÎ2Œ_Öòꮲ§ˆöœ?3ÃÔ•*ߺÄÑ¡]rNŽ´—5¯$Ó< n—b¥ƒÆRö8ˆ(9Rç§RʤTáïÒ�Jz¦ž’Ó­µ>øý•ÿasíûJüý¬üy¥x»à÷ìŸñ+âÕ¿…ìücg;i>.Ót¿ëž ÔgÖü¯êV§lt­ÜšlzµÕ«”‚þ¹·xcø.)ã«ð÷ ç¼'�…\&oÅynS,Tðs�µÂT«�¡Œ§8ü=:´¥í°ÜŠ£¥{®Tß,”Ÿ¿•d6Ìs,¿7ÃÊ5°yN'©F´}ÊÑ… ”dêaêJ3\•Tœyåm%ue«àßø%7Åω_°ßƒ¿i?‡º³¯üSñgĉþÍàÉüsð¯Fð£ü ‡ÂšÅøñô7ZÞ»¤ÜGâøJtûm øzç[á³–[‘ᣠ‹ÄËâ®S–ñÆ3†ó E>W„ËcÍŒŽ5­‹Yì±TiýAÆ… ±xªÔ•o¬F‡°çJ?Y¿¸ô£ÂxÌNEG2ÃÓ�L]\Kµ_ /©N_XN¤àÕOkfêsÙßÙ[ÞÒ/o5¿ ê^ø›à­?RkvÖôÈ%±šæ]/P²ò®ô]b)mL‰$WV­Ò£Œ¸£–×à9d¸ÊÁñå9~*´!CO–cjSæöd¦¢ªÓ�áZ‹S³NCÉrªšyúÆÑ¨«e¹V3J”éJ–*ŒeoiâÛ„£g ¦´jIž)ðöýª?i¿ÞøÇáÂËÍWÁVo§ÏãokÞð?„¦ÔRE…ôý/\ñ¦± Ùkw±O$v÷6º+êYÍ$qÞ-»:×µŸñß pÎ"<ß4�,mH{Hà°ô18ì\iµuR­ ó¡åÖTÔ⛇5Ž¿!Ís:r­ƒÂ9ÐŒ¹]z•)P¢äŸÃÖ�8ÎIèÕ>v›JV6Òb¶¹»Ðõ”�š[K´g´Ô4íBÆ{½/XÓ.ÂH¶Ú¦‘}§O$7ÅtÓ[Ì©íeÖWŸàiæY>6Ž?UÊ0¯EÉ%8;N�JsŒ*Ñ«9©V„*EJ-Å)E¾,f—×–BT+Á&éÔ¶±{J2‹pœ©NQvj÷M/Ö¯ø'OüóöGý¢¿dï�¿´ÿíGñão�4/�Þ2Ô´íRãán£ád²‹Âšo„|;â›ë�Uøkã­kQÕÖ¯øQ¤D’øwHñ½ö¥öû«á+éš}­¤–÷WÛÞýOÅ\[’äùæyâ®%Èpt²å„­’GŒsŽ/,%g^�~oZMbk`iÒöp§eV¬æ¥¹CÍÆå>7€Àp•|ncˆÄ¬Oµ†9Ò£ÊèÓU ©Î¦û¸W”¹œ¾¥fí+“ÿÁÿà¤6ú‰|@ÿ³­ëAᛋë{�6|;¹×µ�ìÙw³xkD·ñ\š†¿n‘ì¥Óá—ûm#Ý ®¨d€Mñ³ÃIb0¸uÄ�RÅFœ£VX Æ8z>Õ^ÅW–SÃËeQT’ö ÿ´{+K•¾â…N­G–JÔœ“ŠÄa�Iò?yÒ¦«sT]b⟴_Âæº¿#áïø$·üÄÿ ¤øÏ¦~Î~%_ �çÄ6º^¥«øcHñö£¢ZÀ×2ßé¿u=jÓÆ·/5¼o>�¦a¦µ­Eå>‹¦ê ydn{1>/xw…ÍÖKW‰0¿[öÑÃÊ­*8ªÙ}*󒊧S2¥Bx¥&£R¯·th;ªõiòO—|Äupo²¯±äu%:PÄJœS|ÑÂÊ¢ÄJëXÑN¢³„%xßÄ?fØ›ö™ý±u�wHýŸþ_xÁ<*-�ŠuÛ½KFð׆|:÷¾q³¶Ôõÿßéšwö�à·™­t{I®õ‰¡‚{˜¬ÚÚy¢÷x§Žx_ƒ(áëqiOñ|ÿTÕlV+¡nyRÃá©Õ©ì¡Í:ÓP£J1u9åø2œ‡5ÎêT†]…•eE/mQÊ�*T¹¯Ê§R¬¡wghFói6£dÙë¿à–ß·/Á/‡¿>+|Mø,þðÂMFÛOñ‡ˆ.|gà)â zþŽËTðý�¯‰fÔ|Q£]Iâ�&Õ|Hñü[áߌ`ï~Ξø¿ªhZ/ŠüuáOxmGã^‰©øgÁw×&îïáÖ¢-˰™V}ŒÀ`©Êž”p®”çQ§W F¬ï:ŽRwœäõz-Çé÷Šà›ÿðJÿ€¿³¯ì»ñ›ö¤øíûVx#Tý¢¾øCƶþŸÁúþ�Þ!Ô| á?x¢ÏO´Ó>ø‡PÒô»�Àšjj×÷WÙ’&¾¼ž¦?–a˜¾³Ñoµë½WÃÓGâv%®Ÿ§^‹«oG¨ßYÞÀtë»Xoš8 ‹ÞæxŒ§‚Ï}¾/:ÅC�ÃG˜*¿Z�zxxQÄEáRÂ9T«Iâ:sƒö�œ œ•â87ˆp´±•«à)`i:øŠ¯†pöQ„ªJtÚ«ûä£s*JRMrÉ)Yn|Aø]ào~É¿ðKýWý…|/ð‹Nø�ñŸà¯ƒ|WûFè¾*øzþ!øÍ¢ø‚4�~ÖóþI~%y¾>…î|_s/�­í‡‚o4˜ôJñ$–æ¸ü'x©^�Ⳋ¹^Ižc0œ5_ ˜¬6I_%[8}r—öe²ö£ƒŒp2—סYÖÄ«Á£ÝÄàèVÉøNáúX8bñØ5³HVÃ:¸êu…H¿c/­_¯Yºé}^PötŸ½s�ý¸?à—š�çíí­~ËŸ°�Ãu´€¾ø½©økYø‡eÐØÏâðö¹¬ÂCñ'Ä–‰7üLµ¯Ú¦™ ó˜ÏmgåCy4}| â¥8p+ãìÑSxŽ Ådô±T2éµ*‘üE ?VË0ÓqýÕ LÝYSJñQ”îàž9ÿ Iñ òžÂ9{<º–6T§‰Šj.¯³©?kŠ«ýú”’‚“zÝFÊLüÙýŸ?cÚ/ö¥ø…ãO…Ÿ|gâï|?ÓïµOéø³Â>�O°ÓuËo^Ï£âmoIÒï|�^îÞÛʲ¼¸šA/Ÿr[Æò§éœEÆÜ9™v6Ï1ÓÁà3”éa+G ŒÄº•*Ж&t°´+U‡5JWœ#nVÔšOæ2Ü‹3ͱ5ð˜ :­ˆÃFS­Z�.XÆ¢¥&§V¤!+NIZ2m請]¿Â/ø'gí‰ñßáTÿ¾|½ñ×€í¼dž{½ľ:Ëx�µÍÃÒÙÇá›�~ß_{;=C^°—RÖ†�ý‹¥élÖõB×GÓuëN,ãÄŽ È3h䙯s >X'˜(×Ãc=ŠÂª±*o<°ês§‡¨©Pu=½Z¼”)R•j´¡=°\3�æG�Á`¥ˆÃªÿWr…Z.§¶ö�¤â©:ª¯,eRóåöp‡5IMB3’Ðø}ÿßý±þ)|hø‰ðÁ?nõŸü$Ô-ô¿‰Œ¾ 𽿄ü}uš ]WÆ×:Ä^–îâ5•¬¬tÍRþÿP[[ÇÓ­®£µ¸’8Ì|K༫$ËxƒœB†_œS•\­<6*XÌm8Ë–S£�…‹P‹·=J´©Ó§ÍRpsŠu†á|ó�ÄåØ|§‰ÁICûÚJ� 5t§]ÔTœš¿,c9JVn)ò»q´ÿìGûMþÇ:–‹cû@ü2¿ð}§‰Zá|5â+MOFñ'…uÙm$»µ±ñ‡5 OO�Q·IY´›ùlµx "èØý•’fîá^:á~4¥^|=šSÆÏ Ëõ¬4éVÃbðêm¨N¦N•WJMZ5©©Ñr÷=§2q\ù¶Ašäs‚̰’¡¼Þʬg ´ªrÙµ”å8©¤îá'Û^[YŸ+Å™ˆ^3Š9Ç=÷ã¯×Gõùud—AÛ[Ÿ�¬qÕ³Á ÏNÄðIùG .ÿ×õý37Ó¯|z.™Ï®H zÿ_×õØ3Û�Ëú>�:z`Ñpó==¸ìyäã¯×ÜP/×úóþ¾BgŽ?‘ÇÓ?NýRã_©êyö?� á‡�$ƒ|Êäàõaì:/$ã¿p;’fIäD¥‰l"Œäžy=ÀÎr@$‘ŒÑq[úþ™róL–Ö5“p•p<Ò½"cвößÇ#ñ�ÿ+½ûvþ¼޹üŽ{pþz“E6ß•°PöÆHãÐc®rqôíÉrZë×üºv cÛó©3ŒÉ¯§O¯#=ºÐ5­»êAžŸýnþ€öý1èz,¾>Ï=ò}È úþ?âK’·{_ðåoϸã9ëžFrr?¯\¢Üj±¯›'çðÇÔõàöϧ.û/ë·õ½þò”³[¸^ËÏCß¶N3“×Ó¥_×õÿ èBH÷éëÏq×>ÜŸ­¿¯ÈÒ…¸êf?»Nà“Ÿ~HǸè9 }�´íý^FgÓ¯CÜœýž�OZ‘�E,q‚y(,NpNIèëÞ�˜¼)§ š`¯zã÷Q�N~w7qÏ}Õ<±§{]Å¿Ëúõ*<�#–bı=sœŒ÷ÃŒ�ŒR£‰}Á;*Ý.Þvé í¿\á]‡N=©ÜV·šþ¿R¼ñ^ÊQÖtt9,¿†;ƒÈ<i¿ëúê[úù´Oqy$Q©f3KÿØDzŒd’p=‚moOø`¾¼[(žÎɃNãW+Ø€AŽ#ØŽA#¡=wg¥­®rÙ ó×üO'œþ?SH×õýÀ_sÆ}zñצ:žçÛ4\Ïåéÿ×þ]ý(Ïâ}ÿ>þÿ¥.{þ·¹ÉëÈãò4™O@úþ?âx¢áóþ¿¯À3Ü{ýyãŸñõ4\=�ÿ«¯l{ŸóÐN{Œ`g§¸1ϧ°â€·ÓùÿŸÇ�ANà÷Æ}³×±=þ¾øæ€ þ¿×®}øüzñÆ^qýxüE< Œ‘ùqø{ôü9ç ¥pÀð8\óùt÷ý úÐQìG¯áõÿõÓzqíž½Ã?§z@&sÓùŸëÿëé@z§¿à;õ±‚áý_ÖŸxå»à úãñü�ŒwÏî Vl «žƒ'×ÓŽ£øÁ4€nLÛÿÕ×ÿ¯@=�\_~ƒÜý{àëúþ½cÿ­ßðõ?çè¿N½rsõüzzu=h3ùgמüÇÍý^bþ]yäsïß�^==M&Bsüùïþp(yúžÝÿO¡îè\ÎÎ3Ó�Jaý~búg§ôçôà÷õãƒúþº ž¾þ¿–ŸãëL$Ÿå�Ÿ­ þ¿¯ëþûž3ë׎½1ÔðxÏ>Ù¢à&/Oþ¿òïé@ïù÷÷ý(sØõ½ÎO^G‘ Èúz×ñÿÅŸõý~žãßëÏÿ�©¢àìý]{cÜÿž€ sÜc==ÀéŽ}=‡�¾ŸÏüþ�øð³Ánõ ëž1Ô|âHVÝ'Tm6=wB›N,¶÷k}¥[›MYÆy"¹¸¼Ó®ïî>Êþ]¾‡ré$ñrbêâèÁÕÃaáŒäŒœ°Ê¤hW¨Òm{ ÕeõwQÙB4«ºäåÍ<](ÆÒÎu©Ò”=´½•9ÉGÛ¸Êp§'·µ…5*Š›MÉÔ§Ó�'*¡QÍ8úç�`O޾ ÑâñN“‡üuàË·hôÿxWS[­"áʉV Ë©lô=EáewÑ5ûÍ3^µ"X¯´«Y •ËËøŸ(Ì1u2Õˆ–7¢¹«dù�9`s(Fî.¥<=~_®a”—,qÙ|ñx ºJ†*¬' K§‡Äá°ðÆÔ¡*¹}WjyŽQÆ`díÌ¡:ôž·+»ÂâéáñPÕT£ FJ?+ëß ü}á’ç[ðŽ»cºèØOqeòã8¿µÙ7P~YÏlf½ó’Š> °“ítŸþìÿ‰ÏCôã×üoþ¶0\Ûúþ¿­>ðÏ¿LúàŸ§¿#Œ{ñLôü?ÏåÓ=¹ìM ?¦ íÿêë�ÿ× uàã8þ¾ý¿ãßÇ9ç?Lóùr2=½2)vþ¿¯A‹Ïlg¡÷ϱúƒŒzSþ¿¯ëþ þ¿¯òÓ#ÐóØ÷éÏ>ý@ÏN9.×õæ/\tç“úþã¸=¹äÑý}áØ=} œöÏÿ_q@/øa{zœqŽsøcŒõÇ=pþ¿ëõ‡Ó©'ØyäžÙ•ýkýyûoþ ýû+ißµ÷í §|5ñ­{£x7CðÖ¯ãÏ\éOZÕLJt[Ý'I]7F–âÚîÚÞóRÖõýÎK©á‘,ì&¾¼Ž)® ‚Þ_ÏüLã*¼Âõsl5 xŒv'C-ËáYJXxâ±ëÖöµãÂR§K…ÄMB2N¥ENQ„¥(ý ä±ÏsXá*Ô•<=:SÅb,ª:TåN”ÛRŠ”êÕ§´ù`å$›I?邸$Çì 1E'À©nž4U{™þ)|cY§`0e•m~ [[‡~¬!‚ò~HÔ`äÉxÕâ\¤Úâ5ÝÔc“äN1]“žY9Ùt攟vÏ×—ðÂJùk“]^7wæíŠKîIyç`ú ù”þ5óÆÿ<úšŸø�>&ÑKÿ˜lƒÿ�CÿR8_þ…Ÿù{˜ÿóXç`ú ù”þ5ýèÿŸ­ñ|Lÿ¢—ÿ0Ü?ÿΠÿR8_þ…Ÿù{˜óXç?àŸÿô@¿ó)üjÿç�ùzsަ�ø�>&ÑKÿ˜|ƒÿ�Aþ¤p¿ý ?ò÷0ÿæ°ÿ‡NÿÁ?ÿè�æSøÔ{ç¿ÄoZ?â4ø™ÿE/þa²þuú‘Âÿô,ÿËÜÇÿšÃþ;ûÑÿ̧ñ«Ûþª7µñ|Kÿ¢—ÿ0Ùÿ:ƒýHáúåîaÿÍaÿ�ÿ‚ÿÑÿ̧ñ«ÿž5ñ|Lÿ¢—ÿ0Ùÿ:ƒýHáúÿåîcÿÍaÿ�ý€?è�ÿæSøÕßþê=ñ|Lÿ¢—ÿ0Ùÿ:ƒýHáúåîcÿÍaÿ�ý€?è�ÿæSøÓïÿUÜÑÿ§ÄÏú)ó�ó¨?ÔŽÿ¡_þ^æüÖðéߨþˆþe?�_üñ¿ÏJ?â4ø—ÿE/þa²þuú‘Âÿô,ÿËÜÇÿšÃþ9ÿÿÿ¢ÿ™OãWû¨ôÄiñ3þŠ_üÃdüêõ…ÿèYÿ—¹�ÿ5‡ü:wöÿ¢ÿ™OãWëÿŸÆ�ø�>&ÑKÿ˜lƒÿ�Aþ£ð¿ý ÿò÷1ÿæ°ÿ‡NÁ?ÿè�ÿæSøÕÿÏ�ø�>&ÑKÿ˜lƒÿ�Aþ£ð¿ý ?ò÷1ÿæ°ÿ‡NþÀô@ÿó)üjÿç�GüFŸ?è¥ÿÌ>AÿΠÿR8_þ…Ÿù{˜óXç?àŸÿô@¿ó)üjÿç�GüFŸ?è¥ÿÌ6AÿΠÿR8_þ…Ÿù{˜ÿóXç`âÁõçþJŸÆ¯þxôÄiñ3þŠ_üÃäüêõ#…ÿèYÿ—¹�ÿ5‡ü:wöÿ¢ÿ™OãWÿ&ÑKÿ˜lƒÿ�Aþ£ð¿ý ÿò÷1ÿæ°ÿ‡NÿÁ?ÿè�æSøÓÿÏ�ø�>&ÑKÿ˜|ƒÿ�Aþ£ð¿ý ÿò÷1ÿæ°ÿ‡NþÀô@ÿó)üjÿç�þzQÿ£Ä¿ú)ó�ó¨?ÔŽÿ¡gþ^æüÖðéßø'ÿý/üÊ¿ùãsþÄiñ3þŠ_üÃdüêõ…ÿèYÿ—¹�ÿ5‡ü:wöÿ¢ׯü]?�_üñ½¨ÿˆÓâgý¿ù‡È?ùÔê? ÿЯÿ/sþkøtïüÿþˆOúª¿ùãQÿ§ÄÏú)ó�ó¨?Ô~ÿ¡_þ^æüÖ5¿à“ß°À1œõø§ñ§?ì£uý¿â4x–ÿæ¤ÿÌ6AÿΠÿR8_þ…Ÿù{˜óYROø%ì½>c’ü]/�ëÏ_ˆ§ùäzE'ãG‰ôRÿæ!ÿç_õòõ#†?èYÿ—¹‡ÿ5™3ÿÁ)ÿ`uÝ�€Ø$ÿ%Gã?ãÇü,\äð ãuëGüFo¿è¤ÿÌ>Aÿαÿ©<1ÿBÏü½Ì?ù¬çîà•ÿ°ZÇÀ|`ÑNøËßžââgØtÇldÖoÆOÿ’�ÿ0ùÿ:ÿ¯‘_êW ¥ÿ"Ïü½Ì?ù¬æ/?à—°Š³àg8?óS~1w{ârsÎ{ sS/|Fÿ¢‹ÿ1ÿ;¸3†¿è[ÿ—™‡ÿ5¬±Á¿†ß~è¾øSáÏøE¼#mâ­{T‡Iþ×׵͗ú”ÑË}?ÛüIªjú›yÒ"Ÿ)ï(ñˆ£@N~g9ϳn#öÙžu‹úî:tcFUý†zt´§g„£BŠåMê©óKy6zØ¿ –F\aAJSPö•j{ÓÖOš´êOWӚˢGßN»ÑÓ$oV\Ž£p##Üg"¾M;4÷³NÏ­�Ï\å[C»…hXv;˜gðØqùŸ­z«FÚ©§ÚÉþ75ö‹Ìoö%ç¬?÷Ûñþ½Gûÿø ÿ1ûHùÿ_3^m5ßOŠÑ%á!Ã6v»|ùSŒ�¹s´àãŠã†%G:®>ìÓVVºZYö¿»¯«!Is9[s#û÷Öûí¿øŠìúíïÿà+üËö‘óìKßXï¶ÿâ(úíïÿà+üÃÚGÌš äKJñª++ŒÅþSœ/ÊN:“Ç^zTTÆÒp’Š“m4®’Z«k®Âu�¯r楦Mu0šL• ÊäŒmÎ �<Ž0yç�¸'×8ƒ×'=r3š×ëòþ½EoëúõŸË>¼÷àsþ8ÎhëúóòëÏ#Ÿ~üzñéêh3úŸçÏó�@ ÏÔöïú}p0?Bà&sþqžœzSëóÓ=?§?§¿¯À¤×õÐLõ÷õü³üÿZ`#üÿ,ƒøtýiõý_ðÜñŸ^¼u鎧ƒÆyöÍ3ùzõÿ—Jìô‡~:ñ@FÐ|'®ê0É÷.ãÓçŠÃ‘¸gP¸HlW88ßp2:Qsâ(RøêB>\ÉËÿW—à}+oûü\Ò´$ñOÄ«�ü*ðüšlÚ¼?ð”ßI?ˆ/ôè-ÚíîôÏ éP^^Og$1ÈÖú½ìºo‡¤hÌm¬£:îñigø ^&®,›Í+áê{,T°\µ0˜)ß–qÅcÛŽi6½¶•ZÙ„"ù–q‹·Mju0ô©ÖÄÓž5⥆Ž".�|T_ÂðøV¾³(TWöx‰Ò§„”½×‰‹høòqÏ:ÛÊó[¬²-¼ÒB°K4!ÈŠY-ÖYÖ$Œ+4"y„lŲÞ}«™­“{éu{ën�OÒè‹=ǿמ9ÿSEÆìý]{cÜÿž€ sÜc==ÀéŽ}=‡÷üþOóöYÿ²¡aùÿgj_N£ñü+á|Mÿ’ Š?ìYSÿNR=þÿ’ƒ*ÿ°¨ÿé?]tÿ…žÿ‚‰êºÏ†~#ëÖšWˆÿaÚóâÍ�ÅmWWÔʼn×cøÿÇ^6š'¿–Oµ5Ç„uO j^Ò>Áo4^Ño­e¸Ø—é,_’ÔÍ1ÞR£‰Ë¨N®ޏG)žUJ•.aÆX|©¥ËË‹¥‰¥Œ­í%‰­ ¨ÝÓiý|p”8Žs¥‰¨¡W!Î1qÅÎråö™-LEzÍs7{Ñ•)Q‡*µ84ݹ´ñOÚ÷ãý×í;ÿÓøŸñ™­eÓ4oÿÁMM¯ƒ40‰á¿è³ì‚t(í¢ckfÖÓ´ñ{’Efú¤—÷PÃÚ¯g„rpω9fL¤ªÖÃxiÍŒ®µxœ~#?•|mw'ïÍTÄÔ©É)·5IS‹o•9Æ`óNÅclã ¼Oj4ööxzyr§B�–‹–œcÌ£eÍÌÒÔoüÓö_øõûD~Þ>ø¥ð[áo�þ"ü0øçá/‚ºÿ�þ"øWÚ¦³às¤?†t].âó]ñM�¼ú‡b±ŽÉµKæ×/ôõ¶Ò'¶Ô¤"Òx¦gá§ä<=À˜œ¯9Í0Yvg‘âó¬>;.ÅbiQÆûe‰¯V0¡…œ£_ææ©CØS©ÍV2¦½ø´Ž'ÊñùŽ}K‚ÂWÄáqÔpU(bhÒœèr:Pƒs«éÓQQç—´”m¤ôiŸbx³þRéÿÿ´~x·Ÿû¤¿}ǧéÖ¾C ÿ&—ïû/ðŸú¶Ïb·ü•üGÿdýoýCÀŸ›zÃï|Tÿ‚-hú?Ã?ø¯â¯áoÛÿQñ‰4ŸxUñ>©¢h|Ö¬î5�GNÑmoo-´»{­wG†âúHVÚÔm|ÙÌ¿G¯˜`2¿«VÌñ¸\¾Ž+€iáðõq¸ŠXjUñÎèÎ4iÔ­(BUeœ`¥Í/g+'k5 5|_BZ±£Ä©R)ʬáM`fœåFME:�NMYs+´�\·ÿ’ÿ ÿ³‹ø�?óh¼ôç�ï½yþGþ=Ù;—ë1�;ü‹øþÆXŸýZPûx~Ì߷׌?à¦ß�¾øC⯈®5�øfïà§Åo išíß�üáí2 *ÆÆÞoiñÏ ø2×Á—‰ugâËMNëMÿOMOQ½´ŸûlO~ø‰x á­e‹Ê°ñ£�ÄÃ:ʱUhGŒÄU•YÔ’ÂTq¯Œ–2ÂN”j~íÓ§ ÇØòÓ3ì¯?­Äõ+á¨âês×¥,.”jJ…pPŠN¬oNŠ¡.eV2q÷¹¥$ùï/°|uâ_ø£ö´ÿ‚ÓßxçL¿†Çþ ÷ã�Äú–Ž»l/¼qáÿ…pi(1�$‰ö�>þÓûQ(Íÿ=2óÌ–y¼Û‰¾?†ÆáxSÁˆc£R›Ÿàká©Öw�<#5•l-Ý—»Rœýµ;¥ûº�²ŒmìW©B®oƲ ã%¯N¬¡ðʽ<"…^úÆK’ZüQ–îíùGˆì~|Oÿ‚|þÁIû.þп´Ï€ü#àßxkUÒÿg?ßi–^ø¹ õ•·Œ[Ç~Ð|5¯_É­ø“W{ýGG×58¡Hµ;¸ín7ø„>¥ëaªggˆx—ðÿ cñxÌ>&•^"Á¬ñÙC„åƒX ^#B𡆣ìéÖ¡Nm·JѶÔù*GŠáì�¼«1ÌðôhÔ¥(eÕ¥ÐÆ)EVuèÓ¥RNugÍ(T”RJNÏ÷ž÷Å¿ðV?]O¦~Èÿ uÏ‚þ*ø7â?…¿ õño§üDø±áÿŠŸ¯|⻯ ÜxNñ´Ú8Ÿ‡o´ 4Ck¤ø‘aÕ’BHZÚ³;þÏœ$cW‹sJÎ8Ãf™®š¦_•b2¬¶ü,q1ÇTÁF¯î±Ä*ØiN®š‹pMIóéâqmfã”ag‚«‚«…ÂÔ´qºx¬SÃÖt�×p÷éJ›…D£VÓ÷¬Ò±úqÿD½ø�¦ÿÁ8¿l‹ï…^ðÿÅ_ˆößõ™|ðçÅv°ÞøoÆ:ðømàqc¡ëV·:ž�ú}Û�—˪éñ•Sºê 7Wå9C/«âOÓͳ FS–Ë*¢±¹–nœæxîzôgU¥�ZŪU¿>Àå‰� grÂa©âñKQÐÃVJT«Ôú®–�DçM8·½çæŽwàzþÕú·üãöñ�íOû.|4ý—µKÂ?´†¼¢|.Ó´�'CñU—†¾ üSÕ5�VúËLñ—Œ¤þÕ°ŸÅÚ}œ·W76I5¤–q[Á#[\8éÏÕ*>qî …8«3âªt±œ=ŠÆ×ÍjV«_ ›ªéÑ_Ggaü—W:�Ä÷2Í«j’]ù¹÷äT~�¹FkK(ÀRÌÔrÌSÌa…¥tëâó?aˆ•LZ�Ö*F­*ŽœêJšŒiF1Q£IC§/̱óñ„ž3,-ñT~¬êÍáÔ(á}¥57öqpœT””T®äÛnsn/Øsö�øÝâßø-çíqðïÄß|w¯|?µÔÿhMÇÀú¿‰u]KÂZ^—à?iºo„àÑü={s>•£¾‹eh–ö·]­�ÀŽ{ØÞW�P½YßpöGƒð3„3.S€Ãæ¥Ã¸‰ã¨áiRÆU«�ÀU«Œ•lL#Õ•iÍÊq«)Æñ¦ÒNœLƒ1ÇÖãÌç Wˆ©†Œ³*qÃάçFÃâ! *äÜ!Éh¸(½evù¥]ýž4xïö6ÿ‚Ÿü ýŒ|Ggà_ÚwDý³hh¬âÑõØ<1âKkmCâf–t‡ÓõÉn,¥ðôž(øyá­À~ñ,Ú…Œ:^·¦\\¦«§É¦Íyoãñl�<-Ï¸× < ×à®su¨K†œéåu}²©AFk°¹Ž+�Æa•9º´*Æ.•EV0—f[ øŒ�Šòüެhf°Îó% Š�T¥Š‡'-Fâé{l5*˜z5\¢¡R-óÇ‘Ér^4øgûU|%ÿ‚~ÑÞý°u½_Vø¡ȾÒì¼Gâø¼wâ øóâ_âx{Ä(ƒRÖ ¿¼�Q�[Õlaƒ[Õ£Ó4-[HÓâßìÙ¶=˜,Ó„óxkÁÔ(ÑÊœ}�j˜lÀaqXèe™—·Äá°²¥BTà麧)P¢ê×£Z«Œ¹ý­Lkás|‡ù� ê¤ç‹Ræ„jÖXŠ´¨{i_¿õLxóßùtâ¿yð'þM�ÿ×ìçÿWY�ùÿÉU˜ÿƒÿ¨8söÏöÀý´ö:ý…¿àšÚ�ü(ƒÇŸ|dl¾/è]¶ðóxàÿÂÉÖçB]¬-¦Ô¬ñ_±\Ë­¨ydÄ8;‚—q牴ÿ·ó¬…à8ƒ>|›ì%‰úÆsšÇ’»Óš4Ý$éösŸsîó¬óû áyg`³¬eÔ#Ë�§í/e‚Á»ÓìåÏi?î®Ç‡Á0ð”eô^¼Ñtïx&ÖÇÁA¿-Ö•a£x–é:F·jžÔu=7Q’æÞi횽߰Ô2Ž6ðçÄ1� `p˜,.Ui¼D+ÔÁã§SõŠvä­R¶á+V¡&Þ2�*´Ôd£$ppMJ˜Ì‹‰pùuJxlâ½jõ¨¨KÙºp­AGìå{Â0ª«B_Á”£+¦â}-ðGá7í�ðgþ !ûwxcöÎ×|E¨xÖëáŸÇÍkÁú'Œ¾ [|JñW†ü#?››ŠóÄVzç‰maÒõM{NÕµ-'I·Öîâ·i/ï¶[K©Mùœ÷7à¼ëÅþÅðM =<3N¡�¯‚Ë¥–a18ÈæÐšpÃN†R«KR�:Õ¥BV§NòT“=L;ÀðoÒÏ*U•yasЧ_±U©Qx7J¤jUJ©ÊU�å+'&|ýñ|ÿÆ¿à‡‡¯üd¯ìÑÉ÷¶Õºÿžµô9?üœ?ì™âoý*‘çcäœàûå?”ÿáϸ4oè>ÿ‚ùø»JÖ5{ïþÁ6žð½¼î¨ú¶½oãÿ xÆ]:Ô1K…ðç„üA©ùk–ò4éØ )#á+áq�£ö­r©Oâñx©E]QÃË/Å`•Iv‹Äã0ô¯üÕbºžô+S§â%hNJ2¯Ã±£I?·Qbh×q^~Î�I[´YâßðIŸØ#ö“ý–lÚ»â7Æ?XxwÁ'Ò|Oá�ë°ø“ú§ü&ãRø‘¥øž oFÓt½NóV´Ò#Ñìí亓[±Òî ºÔ­¬y ìV¾ß‹ž pÏðg e¹.2¦#…­…ÅcèK ˆ¥õe–UÂÊ…jµiBŒë:Ó’‚¡R¬e R©ÍÉ*n\<ù¦S�ç¬mÒ¡V¨áê*´çõŽ|T*ª”á Êq‡$Sn¤`Ó’�®¤—ͳ/ÆOˆß?àƒÿ´§Å„Þ"ŸÂ_<;ñË[°Ð¼Gkokqy¤/‹þ-|#ð^±sb·�ÜAøÐ¼E©Çcxbi¬.Þëb—6ñ:ý7d¹oøùÃ9No†Ž3/ÄäT*b0Ò”ã Ï”gÚ0›ƒŒ�?¬a©:�ºU ¥ ^2iùyV;—x}šã0u]M,¤iÕŠMÃÛc0T&ãtÒ—³«%Y¸¶¤µHõŸø&�Ä‹ßÚþ ¡ûMØCg㯎ÿ´>©ñsYñ7Æx/âØøGñ�â0׿ð0±ÕćxîôØ5?è7zdoÇŠ-ü-¬ø-\ɨÝG'“âv[ñ;…êJx ƒ‡)dôp¹67“ÿld¹oÕã�ö”¿³,áVT±¸ˆUi¦ð²ÅPƵjpk³…±2̸[5ŠŽ#0̧��\m Ï©c±^Ñáùgõ¦Ó‚• n ÖU•ÐÞNþAÿEñ‹| ÿÚøOðWâOÀ„øWm¬xïú�ÂÍ?âwí1?ÆÿŽ›I“]ÖµHïì§ð:Í%–�áíZçÃwgÆ÷žÓuíÃ2æ–ËHOkœ.1ñ37Ï2ÌýæÒ£€ÄÓͪåœ/‹"ÄÆ²¡B“§8ãùUJØš0ÄÆQŒñupõñJñS¬øx¶­l7 a08¬¿êŠxŠSÂCš¼~aIÃÚTš”^î0¥7I¿nãF5!KwËt÷ª`€€£‡e±ôŒú^1ÅU·ý_×à~GÓR†{�¯¦‹Œ3Øÿúºöǹÿ=ç¸Æz{�Óú{(;}?ŸùüxôîŸ|gÛ={ßëïŽhÔ1 y�Âõ÷Î>fþƒ©ûÝ0)õؘy—¢RÄ�G;»d‘�I!TrO ?¯ëú×ÌÛEŽÂ3x{§K*ãçŸ.3ørz’2qò….—õú OÏüÉå˜ÆðŸ¼¯n‚Ea•u;²¬9Îy烞j…míÑ™–jªn-²mÛ!“–hœíoE'O>ý‰‘§ßs7 ÷Ùë×ü3úw¤2XåÚvžPõêqî3ØúuéŽz´Ä×^¿×�²Ç·§rxôô>ݺœð(¯Ëúþ»sþ�=ßï>œcߊ/§Ì:±Q5ó$ã€@ÿëu=€ôôæ€mì½NišSžŠ§!s�ÇëÎ?• iXˆuàõÇõ÷è=Ï×¾_×õè\‰V†ù[ˆÓ¸'¡­ž§·Ašbi»knÿ×èN2„»Ó7 ÜFèîy±ç“ú_×aÿ_Òþ¿31Ab3ÎHÀÄÝマùü3#7¡Ž==iU^ñÆb„ò �íÔo*Þ¼•q’Á«_¯ÝýX[ÿ_‘U¥iX³¾YŽI=Içù}0=: ;ÿ[^dìÿ¯êÁŸÃüöÏò$pzÒþ·) Ó¿ùéú.3nÆU½’¦í•h§ÆK¢aŒr�{ºÄpp3ÎKüÿOø?Ö¤½›2Fþ+?>ÚÌîšWv¹¸þîâu¦;·;yà¹ùKÿ_Ÿ§ù‚Wµÿ¯ë¡Ì–ÀÎrsŒžIë“Û'=sïŽqK¯ü†²ädsßß·§çõéGõý^`Eþ{þ>žÞ‡ÓØùÿ_×üðàÇó#ÿ­ŸÀ×õåù€güý/Ç?ý`}ßäžßýo^äãü1Ö�ëú²ëúÔ3éútôíž3è2}(þ½ ãñ�Óñÿõ‘ÍÿÀ3Æ{ûwýxºþy£úêÿáúæ.séÿëäÿ“Œté�Gõ«þ�}=³ÿëqÛ®z`Ñÿ¯Ì'—=Gè3ëÇz?¯ëú€Hþ�9Î8ÇluöÁã<Ñ÷ú_ Qž§±ç'§O~G?\u£üþ@#6ztÇAÏÏÇåÜŠ?¯˜ ÏÓÓñôüú¿…þ¿¯ëüÅÏ\c§¯sÇl~—Ôþ¿¯øo?V&ps’Go¯osôöéš?¯ëçýwC³Á¿¶^ßç‘“Eÿ_êû UÉþ§ž™ÏQןN{ñGü0¿¯ëúóØÀ9÷#ëþOJ?¯ëúØbg¶}9íß¿âzzô¢ÿ×õùþ'ùçú~_Ò‹üÀ·~ÿL~gŽ´_ú° Óóëøàéúš=?¯0>¼çÓ×ßsÎ?ýY?¯êàÎ1ŒÿõÇô?�ôÍõçþAý_×âíž¼ôäõÿ<ú}tÏ?¯ÿ«ü28ïGõ¿õý|€;ž{Qpóÿõúcðÿ<Ñ·õøÿ_æ³ø÷üú§þcµx ž8ëÓëÔÛŸ¯áÎ(ê¯ÿ_ô£×úòþ½BÁþ{þ>žÞ‡ÓØùÿ_×üðàÇó#ÿ­ŸÀ×õåù€güý/Ç?ý`}ßäžßýo^äãü1Ö�ëú²ëúÔ3éútôíž3è2}(þ½ ãñ�Óñÿõ‘ÍÿÀ3Æ{ûwýxºþy£úêÿáúæ.séÿëäÿ“Œté�Gõ«þ�}=³ÿëqÛ®z`Ñÿ¯Ì'—=Gè3ëÇz?¯ëú€Hþ�9Î8ÇluöÁã<Ñ÷ú_  :õÉǦOoÈò9úâ�ëîõ3üºxÏçéùw=Oëægééøú~}_Â�_×õþgKáßø;ĺ?‰´ÆÅÖ“{Ï—¼ª\ÓÕœ¥yòo-š[iqÎÉX¯Ì£úþ¿¯?X«N5iΜ¶škÑô—ªv~§îÂ�)ðˆÓåÞILi6™c$K/Ú¼I¿d·?”æ?¸øœƒSÄ^§5*™Fs7.(ÁÐJNK ˜ÒŒjf ÑŒyœ15ã'e–ÊÖ¡÷XLOñm¨æØxp~s8¸Ã0ËcË‘â*¶¬ë`ç)CîÛ²• Mssã#/gÉ~8Á7<_¡C>·ÿ†¾/xZkayŠü§Gy«¶Ÿ(WŠââÂÙSÄ1‰!eºit™µm>;r':‰EvOO…ümà¾!œpxìMNÍÕGB®_žráéªñ¼gN–=Û ùf�5SÁâ%Qr}]IÅ>|çÞ+Èâñ%ý³—r*´ñY\¥YºM'ÏïUÖ-MÊŒqT=ïlÒvüÔñì›ðîõæ]2]Â÷q´‘ýž+¿·ÛA*–VI­µhç¾-�¥?´"q´«ß0ý~2ŒãÆJQ’RŒ¢ÓŒ£%tâÕÓŒ•šjé­V‡ÃÇ1ÄÓn5c8¶¤§ ¦´iòòÙ­SN:>‡Škß²/‹ì÷ÉáïèšÜkÊÃ}Î�xã-…ER´,2^@§,xÀ¯ý_™× Ò“þ%9ÃÍZk×쿹3Åuïƒ_<6\ê^ ÖÁf¹Ó`]fÕcòÑî4—½HPŒß˜gkª°*®¼5O†´í'Èþ\ö¿ÈóIc’hå�¢‘ ŠQÑ�:0qÎT€Ã½B³WZ®�7üpHô$`zý8=óÓ½?¯>öÁžyç8Ç<~8ãžØ>þ™×õëñ:�Ó¯|öÆ:ŸCß�}3G^¿%ßÏü„.GLàžzàç¿luèP¯oëúþ·Ž0yç¯ùϧ$u>”-÷ÿ‡õßúþ¶p#=uãÓüôÓý:LÇøtûŒ¾Ýº{ÓëÔý¡ÿ‚gþ×âÿ«tñiëÜüKøEøÿžÝ+ð_¤Oü‘Y_ý•8/ýTçgèÿÈóÿbšÿú™�?«jþ3?k='À_›ùîoÚÊÎÄÅ"Iq4ó+²ãyÙH«–fV.HD ëÏ^¿²åJ7r×]¬¿SZtùïwd¾óšñg‡ŸÂúíæŽ× t°yRC8]ŒðO˘™;%Um²Jî”í"´¥SÚANÖ¾ëÍhþDN<²ksÒu?„COð¼úÂêÍ.£g§¶£snaE³hâ„Ü\C ›¼ÝñÄË•²&tÊŒH sÇÍQC—ÝråNúêìŸmútîÍ]AÊú¥.ÿ×äpžð¡ñ~²Ús]Kx-d¼¹™U^_-$ŠŽbw–d›*ˆˆf �½j¾ÊÖ»m$ºw×äŒéÞV½•®Ë><ðhðv£koá½µ½·iày#XçŒÆþ\‘JŠ>2¬²¨@ÁŠù`¡,¨Uö±m«4ìû?OòHr;^éëæp•±˜P@P@P@P@P@P@PðÏOóõü9  2ãœtÉéÇ 3ׯCÏøR`c]tlƒ8úsõϰãèz°9‹Á…|gqïíÛúãÛš—ºC‹¿ ïŸÌp ý3Ûó¢AÐúÛözÿ‘kLÏýµ^>uãšï‡û…OI~hÇþ_GåúŸXW’uP@P@P[ïøò¼ÿ¯[�ýõ¥/âÒÿ¯�ÿÒ�¥ðËü/ò?‹¯ø8«þNàÿ‹5©úÿÐï«ã§¡\ãs_׾ȗ9ÿ±­?ýD¦~9ÇßïØû—þž‘ü÷Äy§Lçß‘ê8ï_»Äüýÿ_�cI  �P:žøí¸ƒØç‘È®ˆ]öþ¿à½ËiÁÇÁÁüOBqé׃Î3Ç:§ý™”¿¯ëú¹c éמ¿ˆã'å$‚sÇ8_êþ�Ëò°»_�õþJqÆFG=z㎤“Ž;ô>œ×ü/ŸõÜ_×õÓa õ½2xÇn9þc"þ¿«€™Î1ŒÿõÇô?�ôÍ?¿úóÿ þ¿¯ëñ öÏ^zrzÿž}>‚�ºgŸ×ÿÕþw£úßúþ¾@¿Ï=¨¸ ùÿúý1øžhÛúü¯óDW‘–8Ѥv8D@]�›€W$äô} â�¼^½µìz>ƒðâo‰¶•àÍhÆøÙs¨[®‘j댙çW{%\wG#îä ,„ñXjh_´_;û¡w÷žÕ þȾ2¼Øþ ñ‡¢DÄnŽÑ.u›ÔÃF£O´Ýé²úAܑЇóJKà§9¾îÐ_¼ÿ{ß‚¿c_ j•–—·‹¼y­^H°Ûizέ}+ í´íª;3…ŽõØp3Œç›�Âeøj¸Ì~+‚ÂP‹�lV.µ<= P[Ê¥jÒ…8GÎRHÊ–+0ÆÖ†‡�jõZ�:8j3ÄWœžÊâ¦äü”Ó¿‡?ðM­'ÀÚ~:øÀ|ð Á¶o Iy«Áe­øâé]<Èí¬¢ÜËíÒ#$sê“ëÌŽ…;£FÿŒf~6e˜œwöe‡guÕ5ƒ§S •Ñq|²«[Z ¤èÒ“R�hQ†Q·ût”×Þá<:Í#…þÓâì×ÃY\\yÖ&¤kc*&¹”)a©OÙF­Dš…9NX„ïþË.^W>¿ñ›áoÀt�Ù·ÀïioæÆÿ>"Ãg¯ü@™Ù‚}£ÂÚl�`øC÷j˧k§&®ÐO½!Ò/ci_×Àpoq±~$g‘­‡©É%ÁÜ;:Ø ‚JþÏ4ÄÆ_Íýæ�L5\CÁ©Ó´§‹¡%äâø�"ɯ‡àÌ­Ó«dø�8�<^m&ݹð4\~©—èš…xQX‡]GU9?ÊŸÚ÷âÖ¦ÚtžºÖ/uoøÚS©x“TÔ/æ½Õ$Ò’b]ï.îd’êYõ{¸|“4Ò±’ÒÒö ²‚¿¨áp¸\އ¡„ÂaáT0ØjTèaèS�ÃN•Q�:p]#¤º3„öøÜU\v.­\EiMÊuëÎujÖ­/Šu*NNs’NíÉ·wt?93éútôíž3è2}+£úõü�`3�Ä~?OÇÿÖG4oÿÏïíßõàvëùæ�ë«ÿ‡è˜¹Ï§ÿ¯“þN1Ó¦Ö¯ú@oxcÅ~'ðF¿¥x¯Á~$×¼#â�éot_ø_WÔt G½Ed[Í+YÒnm5 >éGQqiqÁ]Ô8³†' †ÆÐ«…Æá¨c0µâé×Ãb©SÄaëAÙòU£Z3§R7JñœZÑ;liJ­Z!Z…J”jÓ|ЩJr§RÛšƒR‹ó‹LÛÓ¾(|LÒ.üm¨i?üs¥ßüKÓµ�â5ö�âÝ~Îïâ‘â+ƒyâ /Æ×V·ñÏâ½7]»fºÖ,u׿¶Õ.Ižö)å%ë ™f[Z8*urü JymJ5²êu0˜yÃ[L=\%MÇ R„�”%J6ŒR.8¬TyC^2ÄÆpÄÊ5ªEâ!QóT…v¥z±¨îçœÊOY&Ê_ðŸøìx#þŸü&¾-ÿ…oÿ ü&á÷ü$zÇü!'ÅÇOWü%?ð‰ý·ûxŒiñ.þÜþÏþÓÙý§ìÿ%_Ô0?]þÒú–ûKêÿSúÿÕèýwêžÓÚýWë\žßêþ×÷žÃÚ{/iïòójOÖ+ûªûjßVöžÛêþÒ~ÃÛrò{_cgí9}Þ~^n]/mïCý£¿h/ x…~øåñsBøkuÜøGø‹âí;ÁÒÛß;Kj|7g«Ã¤ kùdyo­… ‚òGy.#•صpÖá܃ŽŽiˆÉ2šù”\%}\¿ S¥MZúÌèʯ4Jçæ‚IE¤tC2Ì)aÞž; 3RO MhÑjWr^Ê3P´›¼•­&îÑŸ7ǯŽW/ñ'Äþ3üW›Ç¾2ðôÞñw�¥ø‹âù|_⯠\ZXióøgÄ~%}aµ­sÃÓØize”Ú.©{u§Ii¦Ø[=³Egn‰¤r,Ž8<6_›*ŽˆX¼& eØ5„Ââã)ÔŽ'†TU…:µgÔá ªu'%.iɹxüs­Sñ¸·^µ7Fµwˆ¬ëU¤ÔbéTªçÏ:n0Œ\%'£k$Røñ§ãÂx5«o…Ÿ>%|4¶ñQÛøŠ‡þ;ñOƒaס…eŽ(u˜¼;ªé±ê‘D“Α%òΨ“̪Èû¯0ɲŒÖTešeYne<;rÃË0ÀaqŽƒ“MÊ‹ÄR¨éI¸Å·ÜS{&§�ÆaÖ‰Ã*ŠÕV‚¨•즩Î<ËV—5íwÝž£û>üf×t¯�_²šüGø�ây>üøÝðÿÄú^‘¯x‡_Õü#ðçB?ü=â?ê>ðãÏ{e¡Ez¶êÚÔz� ڭŸšx®®•7y™þMB®KÅ?ÙÙvfÙÎI�ÂÕ­C‡£‹Ìkÿgb0Ø*xœBP�yC�R¢ñiFV‹„nueøÉÔýgUá0Xì=XÂ¥J“£†§õšukÊ•;µMK—ž¢§æÕÚl÷�Ú¯öÐø«/í-ûJê³Ïíñ[Eø5ñâ�Šõý&ÓÀ¾=ñׄ|3®éúÄ¥$ÔSA‚÷GòN§tº3iö÷QanVE � …¸7+\7Ãtøƒ‡rªÙÎ_•á(Už;�ÅâhT¢´¦ëʹ½”’på©(ÁÝÆÚß¿6αo3Ì¥—fX¸`±8ªµ"¨W¯F•HÍü^Í8[›­â›[Ýxgâ7Ä/Aâ»_øïÆ^·ñÞƒáoÁá¯kz2ðÆª’GªxsÅQiwÖ‰â RŽIÿGÕÖïN½Yn-äÙûlN_—ãe…–3ƒÅË^¬±8jåƒÅRiÒÄáeVú½zm'NµJ�i8ÉXðébqUUF½j*½9R®©U©MW¥?Ž�UGÚS—Ú„ï&î�Λá�ÇŸ�¿[R„¾%ü0þÙò¶À7ñ'„¢Õ¾Î[6§…©YC¨=¸w=ÒJðoo%“yÏ6g‘d™Ê¦³|£-Ìý�Õ�Áa±n—5¹½œ«Ó›¦¥e̢⥥ïcL.?‚æúž3…ç·?ÕëÕ£Ïm:§(©[¥ïk»‰¼SâokÚŸŠ¼câ-wÅž'Öî~Ù¬ø�ÄÚµþ½¯j׌‹ºÕ5�RæïP¿¹1Çf{»‰eÚˆ»ÈU» †Ã`èRÂàðô0˜Z䣇ÃQ§B…]¾JTiF4éÆí¾XÅ/%vaV­Zõ%VµJ•jÍóN¥YÊ¥I»o9ɹIô»w=+á·íûBüÒ¯ô„>2ü)ÐõMCû[SÑþ|Pñ¿�´�GU6ðÙ�NûOð¾¹¥Ú^jÒÚÚÔÞO —&ÞÞ ž\Qªù™Ÿ ðîuZ�|ç ÉslE*~Æ•lÏ*ÀãêÓ¢¥)û(TÅP«8SçœåÉ£Í)K–í³¯ ™æXJž 0Ç`éÊ\ó§…Å×ÃÂS²�<£J¤#)r¤¹�Ý’W²FÆ­ûWþÔº÷Šü%ãÍwö”øû­xãÀI®Gà_êÿþ"j>+ð\~'°W‰SÂ^"¼ñÚ¿‡Ä:b�7\]òÈjÖYß‹‹ÝVxO…pøL^Ã4èÿ®¾1i?þ(i/徸½ø§§|@ñe—Ä{Éõ;FÓõ®üom«Åâk‰/ô÷’ÊùæÕK«6kk†’1žÊ™I[-†M['ÊêäôÔ#O*©—a'–Â4¦ªSŒ02£,,U:‰T‚�+BiJ6–¦1Ç㡉xØcqpÆÉÉËMhâ¤çY9b#?jÜ£xɹëg¦‚x{ãÆŸø÷Xø­áO‹ÿ|3ñCÄ3jÓëÿ|=ãÿhÞ=×'×î…æ».±ã7W¶ñ§6µx¢ëV’÷Q�õ+¥¦i†êxœ‹$Æeôrœ^O•b²¬2£>YˆËð•²úÃÓ¨àªÑžš¡rŠ…(ªq|°åZ,~:Ž"xÊ8Ü],]W7SKZŠŽ£æ¨ç^UfêKY¹Ió=evIᎿþxãXø›à_‹ß<ñÄsêw>"ñç†|uâmÅþ!¸ÖïN¥­M¯ø�NÔíõ]jMcQfÔ5FԮ|MÝß›9ÆdY&c€£•ãò|¯–á£J|¿€Â×ÁáãBÊŒpøz´åF‚£M{:J”!ìà¹!hÝ Ã†ÄTÅañ¸ª8š®n¦"–"­:õIsÔu*Æjss“æŸ3|ÒÕÝ›Þ ý§¿i?h^.ð·‰ÿhO�þ"ðÇÄ Iu�øk\ø¯ã½SÃþ4Õ•4˜SSñ^‰}¯O¦x†ý Ðô8’ïWµ»ž8ô]&$u�N³XpÃð¿ á1-ñ6¥Ÿe›§Ç¯k÷·ú¥êØéÖ–º}š\ÞH-¬­­í`òà†4^ü_€Ê°´ð9f—`©9ºX<Ž IÔœªTtðøztéSs©9Ô›Œ5IJr¼¤ÙψÄb1ue_^¶&¼ùyëb*εYrÅF<Õ*ÊS|±J1M»E$¬•�Ï|dø½ñÃþðŸÄ/Š¿'ñ>�à½:;+2=?ÂZ6·ª_iÞ±�NÓtë´Ñí¬ [+ +EA¬dž &ÉòÜF3—e9n˜MÕÇâ°X .�¨ç:ަ2½ Têâj:•jTs­)ÉÔ©Rwæ”›Ò¾7‰§BŽ'ŠÄQÃECJ¾"­jt £rÑ…IÊ4£ËÆÔÔRŒb­d‘Ÿà‰_þøŽßÆ ¼wã‡^-´ŠK{øÄš¿…uØm§hž{UÕt+Ë+ß²\40›‹V˜ÛÜÐMŠ¢µÌ2Ì»6ÃKšà0y–mJX\vŽ.ƒšMF~ʼ'x©>YróFï•§r0جNª­„ÄVÃVI¥WVtj$ìÜyé¸Ë•´®¯gmQ躷í_ûQkÐøÖÛ[ý¤>,_x[ᆧ¦k? |3yñÆ^ø{¬è¢EÑõhÓk/¦øOTÒDŽ4ËýßOº°âÒX·é†A‘SÄã±tòL¢ž/4¥V†gІ]ƒŽ#2£_øÔqÕ£ETÅÒ­eíiâ%R,¹Ô¬e,Ã0•,=c±’£„œ'…¥,UwO :ðôÜùhÎ û’¦¢ãÑ¢�Š>4|bñ¿�´ï‰ž5ø±ñ/Åÿ4ìßì�ˆ>(ñߊ5ÿi_ØÓ5Æ�ý�â½WU»×l¿²®î4ß²ßÅöÝ¥µò�™Ž˜\—&À`jå˜,§,Á啽¯¶Ëð˜ .[Û%ÞÓ JŒ0óö±J5y©¿i)Ý"j㱸ŒDqUñ˜ªØ¨ròbjâ*ÔÄC‘Þµ§7R<Žî6’åz«3Òeý³¿kù¼Kÿ ›þÕ?´jø¸h­áÁâx¾6üJƒ^_½Í½ôºêðx–;õÒ&¾³´¿ŸNYÖÒ{ëx¯e‰î�J<ÅÁ\°¿R\)ÃSößYú«ÈòÉaþ°£(*Λ¬©ÎtãS—ž4å*i¨û¯©ç™Ó«íÞo™ûnOeíV;ª{;©:|ꪗ#”Tœ/g$¤îÕÏ6ƒãGÆ+_‡Z·Â o‹íþk÷ãV×>Cã¿CðïYÕ“P°Õ×SÕ|ª<3¨ê «iZ^¨·—šd×#PÓl/D‚æÎÞX½9d™4³*9̲Œ²Y¾Ÿ±¡šË…–cB‹§R�²£Žt¾³JŸ±«V—$*¨û:µ)Û’rO•c±« <Æb–¤¹êa"·ÕªMJ3瞟ÙJ\ð„îâß4#+Þ*Õ~|Oø�ð—Ä+⯅üoðÓÄ« ZŸxÅ:ç„u�²HÉ$–rjZ õ…ܶs_„¡ƒ£*’I:’§‡„#)É$¥9'&’WÑ+ŒÇTU±¸œF*ªŠŠ©‰­R´ÔSmEJ¤¤ÔUÛQVWoDÏ2ϧéÓÓ¶x8Ï Éô¯GúõüŽpÎ?øý?ÿYÑ¿üŸþ¾Où8ÇN˜Z¿égÓÛ?þ°qÇºç¦ ðzüÀµ \y’`‚ ô>玟ÝÅ×¥‡õýH?¯ø£Í¸‘b‰K8Ee½Èìä“€IÆ3G�¿®Æâ$zzЉ.ä\K(Øddô9*IÀÏ_î€ö_×êëø3ÎsÏ_RA=}O¿Ó¹ê¿¯ŸõójèóOø÷Œ~§úýáM6­ý]ÉïêG Æ&b²²áП•Áà‚öô?Žkt _¯B¥í˜Aö›mÍnÇæ_â�ÿºGR¿Ý' À<à™×õê ÷ÜÍÏþÙý{žFM+þ¿Õö(–)¶|­ó!àû 烞yäþc^ĵשmŠ"Ü*ËžÄç�¯8×éßúü¯ÐZ¶fM3JÜ𣅻÷õäôõ¥ëúüÿ’·õý~d_çÿÕøñÇ^”_¶£,(H #}Å�sÇLñÔb‹ÿ_1©ùØî™¸ÏQ=ëÏÿ_ß,7ôüíúï$䜓ÏÔúžÇ¾øŒ´ïýV ¿¯ÌщÁY@{·_ÝÇÔûøÜyÿöF95?ŸNÚå7‘äbìK;sýzc�ØcéÇZ[ÿ_ð¯A�Œôç÷úÉþ§±>žú‹éö—÷6º}ßÚ›Nk¿0�>ü¬h‘j",“E–/&X$Žyc”1ù>ãÜ›Ä\›Ä?‡Íiå4ó\vW„Æf˜¨Ç7†ÒŒ³L®.­J•òªõ*J� Eháë:ø|M*Øj5hÊ'Ïð§å¼e–ÖÍòŠ8øeðÇâ°8|F; õXæ1Âû5,~.s�\YNTèÖ©U}­ÔªP¥:R‰Ëgñíž3É õÏ?Nµö¿×Ü}1úíþÆ_²/ì˧x/Ãß·íñS@øçã? h~0Õþ~Ïÿü?âû¯ƒÚŠtÛmSÃðüSñŠõ­/OOÏdíq©x_@¶»Ôtøf²ºˆÞé—¶�÷ä´8׋øž¦7À¼=”â2&¾ŽsÄ9†# 澬©b%•a°”*ÔxXÍrÓÅâ%u$§ÉV�JTþ¦E“eQ¡K>Ìq”ñõéS­<]†¥YàiÖŠ•5‹«Z¤"ª¸»Ê•5)E8µÍFRùoöŒý—t�†ü á€ÿ|'ûSøOâþ—¤k? õ¿†^]׌oåׯ�—‚¼gðîÎóSñƒþ"[\Ogdž¯Õ®g¶­Žïíúf›õ\7ÅU³L¯ŒÏò|_ bòzµ¨æÔ3KÃMaáí'ŽÁf3…,>3.”cQÇOÝ�$”¯gV¯“™å0ÂbðôrüeÚŽ6ž¦Þ¯/hùcB¾2•Z8”ÜoJZ¾ekKš0ë~/ÿÁ4¿mï€ÿµŠ?¾ë7�ô8­çñ.¯¥x£À~0¸ðŒwrD�?‹ôoø§_×ϱÔ(âp¸Sˆ„§F´±ZTæ£7M®zÕà£78´©Ë–¤’rQqNG¸~ÁÿðN_üdýµ¯¿g¿Ú#À2ðž�ð¢Ã[×þ3øY5}¾)ŠojwþÒ¬¯µ;ìÏ¥ø¿\�F�Æâ³¾Â.2Áf˜\ ãq˜Œ-NÄå¸üò½EZK5¢þ¯ 9u RЧ,$êR›T¥%F²¯ ”sÇeô)`3Šßص°•pù� êÇ1¥‰Ãà)Μ&ð“ýì§ŠœÓrU£Ås¤êAÓqŸ›èðL/Û¿Ä_ ô�‹šOìëâ»�kúlZæ‰êþµñ†¯ L–Òůé߯|CoñëD{{»kÁ©Ãá–µt«ª4ƒMÿL�x ™ÖÊ+q8Ì=YP¯%G<BrRÃÔ̩ᥗƽá({'‰Sö‹Ù%í}Ö)Ä0°ÆÃ-¬èÔ‚©MsÑUçMÙª‘ÃJ¢Äºvj\Ê•¹_?Áï;âOÙö‹ð�ÏÇ»-áµÖ�qû0Gᙾ:ÂÞ"ð…Ëx ?^Aaáǹ6~ ¸]u5¹â‹þ)vÖþÈÎø[F®ÃÙÃq‡bã�O™Â¤x¡â£�µ†ÆEf TĨ©áãì(EËý«ØsÛ÷|í£Š¦K™ÑyŒja\^R©<Á{ZêþÞJ4¯ËQªœÒi~çÚ[íY ‡ÁŠ:—Á­oö‚²ð¬³üðߎ,>ë~2¦†�Øx×TÓ#Öl4GÒ%ÔÓÄ2½Æ�4w+}o¤M¦.|—¼Žeh—¾¦y•RΨpõL\cœbp53*/e]º˜*U]•ÕeIá’�H¸ºr¬ª½ÔZgxöiý±¾8|øl5�à‡úî…§ø|kú‚êš¿Ùõøo\¸—ñÛY¥Ë‹ÝRèFE´eaò£;Š—oKÃÜûÄÜ‘g¹—±úöa‡¯Sõzn•jxÜMòSrŸ*ä¥ûîîïÈæâ<¿•çxüŸêøj”ãOÚKžv• U4’�ýé»h´²:ÿ‡ßðKÿ۳↙á=wÁÿ5;¿øçÀþø‰ájž3øqáÏ ëÞñ„wRx\Ùø‡Ä~0Ò´q¯kKjïoá9ïañ]µ¼°^ê=�„ñ\·aâŸåu1”1™ý(bpìN]ŒÂÒÁfXœU N Åb¹ðølZßW¡Î”±qƒÂJJP§Zu"àm‡á> ÅF�J9t�,F–&�Y×ÂÒ¥R•tÝT«^U*YÚ‹’¬“R”#™óã~ÌŸ´ üm?³wü*/Âô]Péá�ѧµØ³:‘”@¥­Î—ý•�`k‚á´Fѱ¬® tÃöªúõ£‡¿°ÿÖ_íŒö²öË4öÑXnNeno‰Uö¿¹ö>ßÛþãÙû_t󲳯ÿeýN¿ö‡?'Õyµ¿/5í·''¿í/ìýŸ¿ÍÉï£û@~Àµßì½á[_|jø;¨øoÁw:œZ$ž+ÑüOàŸhn¹2nM^Ô¼â_[xsSóCZÇi¯6š÷HÐÚ} ùeü®ñ „8§<IœÓÄãcI×XJØ\v_ˆ«B/ZÔ)æl,±4­i¹aÕU»Ë•^Ýy�ç9UˆÇ`¥Jƒš‡¶…ZŠq¨þÅIaªÕT§}9jr¶ôW=ÂðJïÛçÆÖúM燿gÍNM7Äð¯Œü=«ê^8ø_ hž Ñ|kgqá„е�Æún™¬kÚ•¥¿ÚšuÕÏŠ4¸ntùõ}OƒR°{Ÿ?â¿`eZŽ!¤ªáñx¼"�,kˆ¯‡­‚œiâ�z8| Z´pô§._­ÔŒ0µ\jF�j’§QG¦�ñ u SË¥ËR�ôç,Fœ*S¯*^Îu+Æ©8«û·V ÅÔ„T£ž-eÚëÅ?ü~x‚ÃÅÿ³Ï‚+áèá2\wö®¦ˆ±Øl·&ÄÐUq4qØìW´öxONª§9:Ua7_ÙB�Js§ZTêEÄóVQ™J®:‡Õ*F¶[B¦'J£…)СK—ž¤£RPsŠSŒ’§Îç)AJ.ç)áo‚?¼kð·âŸÆŸ øR]Wá—ÁI<Äÿ¦©¡ÛEáY~"k‡ÃžY´»ÝJÛ[Ô¿¶µµ6�MÔÖÑ�›Pk;ß×^/=ʰY®U’b±j–i�¬l²¼+¥^O²êYÆ5V�9P¥ì(?hý½J\ÿ >y{¦4pºøL^:•<&ÐXº¼ôÒ¢ñ5=•rSU'ÏSÝýÜg˼¹V§ÛŸµ¿ìD¾ý ÿg�_³„|kã�|fý›¾ |JO =ÜZæ¯}ã?ézÕÿˆä´¸û>›k¥h‘i†úiµ "ÓôM>ËÝGRŠÊ&‹áøCŽ^/‡x‹>âŒf …Éx—:Ë)AУ ­Xe8óT�\DÝ_f•4êW¨á Tœä“÷³œ‡ØæYn_•Q¯^®;+Àâ½—2©9W¯ ’«gh(S\œÍɨӊ”¥%uÃøûþ ûuü2Ò">¹á´%ðn�¨M¥^ß‘/ˆRüê ¨ZÏ¿‡~Çÿ %äPË}k¤Í§Å-âwÔãî¥�.žuEg�0¥–,¹PÆ:ïZœjž˜gOÙû9ÅËÏõh6¡*Ê£P|ñáìâxí%�ŸÔVx§‰u(ª~Âp”µ©ÍÍÍ•._i$¹”S’³ûþËŸµ‡ÄÏø{_ñ¤¾ø}ð�àï�~=üSñ&—¡MâÛü;øp4¥Ö­|ᨦµ]kÄ÷÷zæ—iai5äÇ×WÀ_Mi™}qÅsá,³‰ÃࣘfÆu€È2¬5ZñÂáe˜æ^ÕО3Ôý†œ(U�IÆm¨S½59U¦ò,¢9Æ*½*•Þ ƒÁb3]XÓuj¬6“�Q¥xóÕ”ªB1NI$ܽçu¾ þÇVŸ´Ï�?²Ïí#âO\CãðWŠþüpðÿ†üñšÅ%°mBx~ kz¾“¯ø@—·Ó¯ ¼aìnüÇmBáÖæÎË—‡³Î2žuW$â¾ÃabðO„Ïr,F'’ÍªŠœ°‰bèQ«‡Æi*°æv© /gÂsÛ1Àd‘ÀÔæujµ_ØVËñôéQÇFñæXŠj�IÂ¥  ì½Ù]ó=cAÿ‚šÿÁ=®?`_ü6Ó4oêÞ:øwñSÁ'_ðçŠu�6ÛM¾‡Äš<ÖÑx»Â÷qX³Ù4ÚL¯‡uH'‰•ÞÃÄ6‰$BH^Y<ï ø‰ü@°øÆØj—–mwâ�^ÏÂz®¹á›)î¬ôKý/QÑ~Óuo#]¼XPñ¶eâsÀùF YeY6.ºÌ15«B�\ï °îX9û(O“ F¦.• Tã ×§V�~XÉ('u8j^Ág¸Êõ¡õ¼mW§JPÀÕö–®¹åjÓ�Ô¥Õ9BP»NöôÍ[öDÿ‚qhß³7„ÿj˯�ÿ¶3|5ñ—Å]ká•cÂ_„âè¼S¡hRx‚îæûLˆñéqh¯c ‰owµqv÷#d–!W™GŒÐsçkh²ö©ûþÕÇÏþÌ:ÏÁíwKøáãžçž ¿Ôü3i‰ì“OÔµ?í-Åsëqø/WÒZÏGÕ-ZÃÄwt×60Ý=êjΗð¥~ÄñE æ…\‹Ô1xÚt±SxZŽ¥*^Ï„T6�^zÔ“¥S ª5#9AAó<‡7§˜ÒÊg‚© }ez4%:QUcË)óS¬ê*‡,'ïÆ«‹qqRæV:/Á>l?‡>ñ‰üoðOWðæ™á?†z'Æ?[ê%ð?ü$/Ã_ëz§‡tÿ_øJKâ¸-cÖ4{û]VÈèÇUÐ8/5ë 6ÊöÆæç›âæXœ6�ÑÄÕÅæuòl4©á±ßW¯™áèRÄÔÂSÅË °’“£ZœéOÛ{,Eå =J³„ãkðÞu†¥V­| éBŽž:ª•\?´†­IÒ…iQU]d¹á%8òsÓ²•HÂ2‹~wð—öø‡ã=OøÈÿu|ðÿÅχÿ )þÙ_>~Ë_³‡�ü/ÿn©<çáO‰¼[á�wSøc¡éºf–º¤þ;ø•sâ{¯éšpÕ'’Xµ]SƳéð JÃHþÛÔ/UdŸÀÊøÇ.ʸ3%ϸ«‰rüW×iF?ÚØ\+K4¯V­_d°dp°ÇU«ì¢“¥K’tªVöàÚ�¡‹Éq8¼ï—å9f"�°›S«Z•Ia)Â0çxŒSªðñ‡;ºœë¸®hÃÚJVoÆ><~Ç_´¯ìÑâ xoã­o÷Þ<Ú<{¤Þhž6ðÿ�¤y¡·[_ x—Àú§ˆü?®jb[»%›FÓõ)u›V¾±Z}»^[¬žÞAÆ|3ÄØ|^+&Íhb)å÷úü*¾�\®\ø¼6:–B•¡S–µJjŒ•:œ•%É#‡0É3L®¥XÜ%JrÄÿ»¸Jž"ž#T­F­ Õ§RW”oÉÍsFñ\Êþ«ãŸø&gíÍðßáÞ±ñOƳþ¿¥xKÃz2ø�Å ‰< ¬x¯Âš[ý­µ¯|>ÑŽˆæäö8Lƾž_Š©)Z� MGRrŒ)sÉò�xŽÏð¸iâëåÕ!F”=­[UÃεv¿=l5:²ÄRŠWru)G•&åʵ0¾ ÿÁ<ÿlOÚ'À|PøEðjûÄžÔnõ‹ë‡‹|á&ñv¡á÷xõ«éž1ñN�«øÊ}9གuðÍŽ¦†ûOÔ4¸¤“T´šÄožx‹Á¼9˜K+Î3¨a±ÔáF¦"�<&?°tñ :ÇUÁa1pq¨¥ Gë5)>J”ê´©N5ÀpÞu™aÖ/�•Zs�9ʶ�¶•/âF„+Ö§:î-I?eûÑ”çä]A×<)®ëñ>“¨øÄ~Õ/ôMBÖ,çÓµmXÒԴ½NÂé"¹²¿°½†[[»[ˆÒh'‰â‘•€û >"†.…Vµ,FJ�|=z3�J5¨Õ„jR«J¤[ŒéÎŒá4Ú”Ziê�¥:”jT¥V¥VœåN¥9ÅÆpœ[Œ£(É'FI¦šºkSpýGãž3øÿ,Óoø×õæ@Æ?ýyëŽ;þ<�@Çbÿ×õýz�÷ì™ñ°Ô>êW ³k߯¶ý_N�8ÉÜãS†5ç�JVàp\ñóJ"+´*í’ÿÛ_ýº}½AãJü ýª¾+| ž=UþÜðyŸÍ¼ðVºïs¤8fgÒç;¯4+§�›§H–ÒÊÂ[ë+Òˆ£ó~8ð¯…xê­�ÂýK7Tù(çX©âÕ—¹T4£Ž¥owVN+Ðæ“iÂüwŸp´£O _ë9w?5L·Üðîÿ¡-jafÕýê-BR÷ªÓ©d�ÒÍŲ'í¯l–~&ðþŸáŠp@’ÚÜÏm øÐÜÄ›t/Z¤þ0¶‡t«miw Ôÿg_´Ýx~Ì"y͘ü¯ÅϪ:ÙfaˆÍ8^”æãV�:˜ü•R“æo–U”êdõ'hº•hΕ?hý�,µåÍûFáï‰pTñ¸JXò¤ ¥ Ê\Ëž*ÖÂã`£ Æ»P§R5'ÉïÏ NË—æï‹_ðM¿xíZ§Â_[xçMW•âðö²Öº'Š €(hãŠùä‹AÖ%q,¬ú 11,¥,Û?Gá?¤~E˜{,/`*äx—ÆY† UÆås©{JS£Ëƒ‹¼\b£�Is9×�—7Æçþ æ¸Oi_ ÅÃ4¢œœp˜— .:0µÒ�Vã…ÄIY©I¼+~ï-'woÏøGÅ> ÕfÐü]áígÃZ¼¼Í?[Ó®´Û’ªí›wQFg·vFò®aó-æQ¾)cý –fÙ^u…†;(Ì0y–våÄ`±±4®Ò—$¥JR䨓\ÔçËRIÅ;£òn_ŽËkË ˜`ñ8,Doz8š5(Îɵ̕HÇš §Ë8ÞZŵ©çÚ×…|3â41ëþѵ… êZm¥Û®1ƒ³DòFË�µ£ueÀÁ¯@æ…J”þ Îá“_“Ôñ�{öaøU¬ ÎÃSðäîKyš.§)�ðæ×T]JÙcŽàÈFBwì†e‰…¯(ÔKùâ¿8ò¿¾çŠëÿ±î©ù<1ã ÁÉK]rÆãOu�¦öÁµ•ŽÍöuÉè d‡\3X¿âRkÎOð—/þ”Ïš¼gðïÄ~œÛë­¢–—û?^Ò/åfä�> £ªÀ˜Áßsa€%[8õý\ôh×§Y^û_Þ„£ÿ“5ÊþRg ;ç#8>£°¯ó'&ƒasƒÀäã¿QÇ8=¹è×¹¦ÿN;ôÆyç¸êsÍ&-Û 7øã=1ן@=1Øš`r׬`sé’:ûsž=Æ OT6q:ƒú}r:מ�9¡îƒ¡õÏìñÿ"Ö™ÿa½Gôuß÷¾’üÑ“þ4~_‘õƒ(`Tç`à�#ê5äI)'{5gfÓù4Ó^©¦tJ*Qqw³Vvn/äâÓOÍ4È>Íý4ÿ¿óÿñÊÇêÔ¿éçþ¯ÿË >«GþžÿáF#ÿ–‘ªZ<’B²îš�¥‰n¤2D²îòšHÄ¥‘dØþY`ìm¹Úp¾¯Fí^¥Õ®¾±Zêû]{M/gnöÕ¨6â�G%f×ÖkÝ'{6½­Õìí}ìí±�q¨évÒ¼2<åã8}�pÀgó$gœgޠוˆÌ²¼5iЩ'4Ê0•§‡«SêSvš…LL”edùy½ªM«ëkÙèõMÿliÞºÿ¾®?øíaý³”6+ÿÄòÓíÌ—ù±Ÿø'ÿ—öÆ‘ýë¯ûêãÿŽÑý³”6+ÿÄòÐþÜÉ›ÿ�bùpliÞºÿ¾®?øíÛ9Gób¿ð,Gÿ-íÌ—ù±Ÿø'ÿ—öÆ‘ýë¯ûêãÿŽÑý³”6+ÿÄòÐþÜÉ›ÿ�bùpliÞºÿ¾®?øíÛ9Gób¿ð,Gÿ-íÌ—ù±Ÿø'ÿ—öÆ‘ýë¯ûêãÿŽÑý³”6+ÿÄòÐþÜÉ›ÿ�bùpliÞºÿ¾®?øíÛ9Gób¿ð,Gÿ-íÌ—ù±Ÿø'ÿ—rY_#=»JÁk–ue8ÈÈ2t#�FAäg �èàêà±Ð•L<êÉB\³R«ˆŒ¢íutêlÖ©«§ª½ÓKÓÁUÀfåS :ÒP—$ã*ؘÊ.×WN®Íjšºz«Ý4¬ßÇ•çýzÜ觯^—ñi×ÈéHõ%ðËü/ò?‹�ø8³þNàý‘�O¿_ø­õŒ~#±õ5ýyàkÿ„\çþÆ”ÿ%3ñÞ=ÿ~ÀÿØ$¿ôô�ç¾q�xÀ'Óœ/LOåÀè°?w‹??z¯ëÈ¿F{SÐç‚2OSÛ ru=ºaoëúüôfL¼§Ž8ã zõ<ãìH9#‚zšÕzÿÃu3–å…àdäã®9r=1Œ| :8ÉÓúüÿMEýKoøq[Ž·§¯rz}Î1T¶ûÿ¯-¿«ˆBxç®1ܱ<{’;wzQýyÜœqé�çÓ‡¿×š{ˆµge{¨Oµ…�ÍõÓð–ö–ò\Îü�òE»“–Ç y »�ëôþ¿¦ ¨«É¨®íÙ~'¬èþ,xƒcÁá+Ý:túì�èÁH Ö×ïûÉÄvr�Œiœ“Çaa½U'ÚŸâ½ß½žÕ¡~ǺÌÁľ/Ó¬F2öÚ-•΢äpv}ªñôÕG« i”ÆñóR9'šÃþ]Ò“ó›Qü7æ{Vƒû/|+Ñö=í–«â)—v±©I!Á"ÛIM2&AÈÜ Ô‚wï<ÐqÏ1ÄÏgkû‘×ï—3ù«Ñ¢xKÂþ]¾ðî‹£|»YôÝ6ÒÒY1ûÙá‰&™ˆà´®ìÝÉ ä�Z•?‰Rsÿ›û“zÑðóáįŠú‡öoÃïk>%™X,÷6�,U‘8Çö†µzöºFžá·í·°oÎqâ¾wˆx·†øSõž Î0yl¼)Õ›©Š­¿û¾ „jâñ³¿±¡;u²=\£‡ó¬ú·±Ê2ìN6IÚS§ öþ6&«†Žú{J±¿KŸ¤ ÿà›6vV˯|rñ´vöÖöë{uáï \Ekmj‘~úa¬x§T·1‹xâR—©§éð…ýëÛë!Q&ç'úHV­Qà8$•J•*:4³ ÚœªÔªåîAàò¼-E'RS|ÔeˆÄM¿uTÁ·'û.GàÅ:pX¾(ÌÔ!*“ÁåóŒ!MGÞ—Ö1ÕánHÅZ¢£F6÷œ16JOWǵ—À/ÙÆÂÿÁ?³'‚<5­ëØk[ÿZ¤§Ãpφ[ÍtÉ&·ã™"qÀ‹S‹N ™`Ödc$'—#ð£�|E¯C:ñ3;̰X ª´2Ú® 2œ*6ç8Xà²8É?·…–#ìÏË5¾iÇÜ)ÁԪ圖`±8»:uq°Rúœehʦ*ïš8¿å¯?j8™;ÄüÀø�ñOÇßuÙ_‡Vu4çˆÄÍ_÷¸¬UG¥a¢^ëz âØdÕ´‡³ž³ÞÛÛ?åxï8O/ãðUzy¤³cðyd±Ô¨`å•SÅã£EÓ§SññÄÅR©^1X9*5”ã+Æœ¦}fƒ3|NK,ò¬*Ã×Å*©YbçFƒŸ4£MaåMóÆœ§M:Ëž­YÉ'å?ðOØoUÿ‚€|iñ?ÁÍ#â.ŸðÊçÃ_ õ¯‰’kÚ—‡.|Soy�âÏxY´„Óíu�á–âOEz·†êDD°xM³›„–/[Ä^;£áöI…Îkeµ3Hâ³J9bÃÒÄÇ (J¾ŠöΤ¨×N1X'NDÛ¨¥Ì¹Z|œ7�OˆñÕpPÄÇéa'Šu%IÖRTëP£ÉʧM¦Ýu.nm9Z¶·_k¾Ô4¯ëÞ Ó£º×uÄ:Î�°²žK�J]#P¹²iíì 7S�æÎîßPIDXÏm,W‰;¶‘e™™ÔÊbTæº#Rœ¡í#8J�œ”ã$àâ¾Ò’n.+«½­ÔÍÆI¸¸ÉJöqi©&úYë+þÌÔüç¶mù¸Š5–[qgqçG’Å r¼^^ô�æš(‘ÙB´²Å;Ý—¶¥Ê¥íiò·Ê¥Ï6““Ißu¶õÙIípä�íÉ+¥v¹]í{^ÖÚí/V‘ö‡í‹û|pýˆ¢øa?ŽCÀšÕ¯Å�Sñ‡.þê¾!Öíìì´–ÐÖxµÙuŸ xml.å> ÓþÍlIOœ¦XÙP?Åpoˆ9<Ñeñô'”×¥†ÄÃ0¥‡¡)β®âè*8¬O´‚ú½Ng.F´ÑÝÛÝÎøs�¬#ÆKQc)Î¥'†�JŠ1‡³º¨êQ¥Ë'í#d¹“×SãeÐu×Ò¤×ÓEÕŸCŠQo.´šmáÒcœºD°É¨¬?cYŒ²Æž[L$2HŠs~Ñâh*ªƒ¯IWk™QuaíœmvÕ;óµdÝík&ú³©Èê*söiÙÔä—"{YÊܩ괽̬CõÇÝ?^™ÏP;Œs­ÿ¯ÇåùhAúð‡þ Çñ‡âOÃ�âÿŽ~"üý™¾xÄ‘à?þÒÿ,þAãä1³­×„´æÓµ}RûO?º•5ËM>ÒîÒQ¦Éf­ ø ÛÄ\£.Ìkå¿=â\Ë þý…á¼²yœ°öåÅÔU(Ò…MÓ§ Ô”ggQS›Iý†ñ˜œ5±†«vVþ%)Õ¦›ä”Ô×)Ç™äØÜ©Ò–!R©C›ÃâðÕc_ ]-ý�XõWøgÉ­RqÔùzÖÒòöGŽÎÖæîH¢’ycµ‚[‡ŽÞ/<î±#”†Áyfa²4%�Â×ÓJ¤ ¯9 µå%äôŒSv¼›vQêôJ÷<µ-“vM»&ô[·n‹«=ƒö{øãoÚcã‚þ|8“D‡Æ~;ŸW·Ñ$ñ%ýÆ™¢+è¾ÕüMzoïí¬µíÓû7F½ò¼»+‚÷>Ld*¹tò8ƒ=ÁpÖQŒÎóm,4¥Ya©Æ¥v«b(á¡ìéÊtÔ¿yZ¼ãhó=mc³/ÀWÌñ”p8gZ»šƒ«'{”çR\ÒQ“^ì­weÖçmð'àïÂ/üIøƒà_�ÿìþi~ðŸ�®ôÏÂ3©øÂË_ñ×…ï!´±ð¤¶&Îâ(õD]JòÞæU†K¥ÓÓOµˆê7ö�ž,ó8Íð™n�d“Ïjã1X(TÂýf–t08¨JsÅÊSç‹tŸ²„ ®¡íI?gNl߃ÁÖÄâ(fèà!F•w¾ÎU£R½&”i%;OÞ’nÎ\¼©sI#æ«k[»Ûˆ¬ì­n.î§`�ZÚÁ$÷HA!"†%yð ¨HÁ8Çô’œa)Ê0Œnå)IF)wm»/VÑæ(¹4¢›od“m¿$· edb¬¬IFRpÀà‚½A‡tâši«Ýt~MtïÝ}ábxìï%¶žò+K™--Lkss=µ³LÁbYæT1Âdr0î¦F!W,i9ÁJ0sŠœïË$¥+-yc{ÊËWdí«Ø9[M¤ÚV»IÙ_k¾—ér(¢–y#ޤšiÔŽ4/#ž¸D@X·^3žE7%ÜšŠ[¶ÒK¦ïå«›v¶½­¯Ü,ÐÏk4–÷ËÄLcš ‘âš7^ ÉŠ®Œ3ʲ‚>¤ Q’R‹N/TâÓM>©­ª`ÓM¦šktÕŸÍ2=ÝyöÏ'Ðþ<�ïíÞšW ç<¯¦G?ÃŽþù 9çè=;g¨ôäŸñ9"ü€þ½OAô‡¦{ 9éÜp}ð3׿·?ŽÓú×úü@Lö÷=úp}#ðÎsŠ?¯ëðHÔ¹ÚÔäí?^øõã9£þõý�I(AåEÂŽ Ï8Àç œ �AÔ¿õý~¿˜³øöÏä�?ú矧Z?¯¸Ïÿ_Ó§'¯Ðzc®ëúþ· 8œ÷8ûÄ}88ç=xúGõéý^`£�¯søý9ã׿½'Û·Óô'?ÏÉŸ×õßúù¨càÈü‚£} uãŒq×éÔþ¿¯ø`&mÄ‹JÌÄáwÎy ‘€9$à`dúšÚŒG§¡Ž2¯vãIœ„óÎ<�`r0Iä�»€[úKu9É9<œ÷û޽_ÄQëúþ¿1†zsÛ=ºs×ñ#ú(F{¹`,mµ|„%v޼ò Ý=±€z;é÷_ן ­vïÜbÞ]ÊÁ÷1ãW?Ž8îsØôêÿ¯ëúõØ,­×ï"Ô5Ž6µŽA,Ì Ï(Ecbà[œ9ê¼ã �£×õý}À—_Àç¿Î t=zg=@ç#«ÿ_Öß�ÉÕUÊç�Ðz}F=ïž¼t«$­!ôA‚£œs�œ Ç·Ó¢ÿ×Ì3’> zÿŸ¯'¯j}ÿ¯Oëþã.Ãä_½÷�ëéïœúúÒþ»r5†‘Žéq–ÇÍ僜`qÛÐcê/æ'ø~dGË?Æüãø:Ÿ^OôàóÓ‚_×õä‡òþ¶R6`¡Ûq}ÞsÔô==:zqš_×õ¿õ÷€®í#vÜÄä’sÔú÷ú zWßAž:c¿â?úýydŒc¦ ã8ôî_^Ý€%‰%‘Ö8—sŒdqêIà åºzò*“¾ŒMîn£²�ímX˜qqÆW¯î�ƒü=7WýíÛSðâHçY÷éœûçÔqŽÃ¯?�"†ûçÛ¯8Ïs�ïÐöÀ•ŽTuÎG×§‘ߎÀ tæ€"xü9>㟩Î?ÔвxGÂÞñç†N‹£¥üIÒÍåÜPÝÞ9²ñ•‘wœ[[,òy¥„EQã™#7™D·i߀ñÏñ�…üb¸‡ˆRμΖ_�¯_—ÓY—‡¹’§O ñ¸Ç†¤ñ9¦M™ây«Ö¯^UªaêVXl2£:8l6mù'ñOp7lgÌü9ÌÖ V® �àüj„(¼N%ч·Çe¸ê÷«V­WRtgQQ ©Ê� ‡LF�ðCOÏú.©ñgR´à*æËÀ¶WQã#ýd3ë³Bþ¬‘¡Ç6gþ&¿ÿ ßI,Ûþc²o²lwý>Áf>'f8*ß÷¾†pÕéÿr¥Z‘阯øCùÏøPñ§0ÿ˜¬·Â¼·ÿO0¸Î8ÆajÛ•hd”*Ãû³©8ôÆ/øJùöêêæöââòòâ[›«©ž{‹›‰Yî%•‹I4®å™ÝØ—vbY‰99¯êl —a0Ø † ƒ¡K „ÂaiB† ‡¡N� i¨Ó¥J”#BŠŒb’JÇîøl6‡£„ÂP¥†Âá©S¡‡ÃЄiQ¡F”T)Ò¥N Bá£E$¢•’EÝ V—BÖ´}r`¹ŸFÕ4ýV+{¥f¶žm:¸Tev†W…c”+£˜Ù¶°'u]zJ½ Ô%)F5éT¤å%RQm4¤“ºm5{huS›§RMÂqšOfã%$žÚ;Yëó?t¿mOÙâÿü7㦩ûf~Åv�ñëá¯Ç�Àú¾¿¢i¾7ðV›ã‚¾6Ò<á¿ë?þ%hÞ(ñ‡s¤Ki6†/tíI´a¤L¤]&Ÿmi¨j„ðOäþä4¸/�êTÈ3<‚¶:޽\:®;ÀÖÆâq”s ²¶ ^”ã_ÙÔ¤Ú­í–°u%:tþû<ɱ¼I˜O;È£à ˜S¡:��z¯�¯ ¨ÔÃâ¡V¬ö|Ñ’¼9ü©JXß²'ß„?ðO�ø(×ìý£|Yý¡¾x“Å ñ¶—㽘Ôüû:üRñÏ�u¿ xgFñ�e¼—DÕµ-;TÔ¥ÒüAm¦—á�·[ÝêóÚÚ›Ë�?n/̳�ü7âÙOæ˜l,q¸¸ >/÷Xî#ʰ8úœUl> AW£J¥*Q«‡§':¸¯g(QŒ§É‘“a°\9ÄÙt1™–­WB¼q(ûô2Ü^#R•*uk¹8NP”œ*I(—2”Ú\Î>¥û#~Ì´7ìã?ÚsãÇí­>Ÿào�zŸÀŒñQÖþ$xcÄqþÔž!ñÆ“<~ð׃,­5­V÷Ç—þ"¿¼þÛƒUÔ-­¥´ûaœÖ�{ªÛ§—ÅüQü{‚á|‡‚cSŸRϲ|fØe¸¬3á\>´^'�©:4¡€†œ=„©Sœ”ù?t¦¡JO¯&ʳ.¯šæëŽ/ž_�£WÚb©UþÖ©ˆƒöT¨ETœ±«){E9¥ËÍï¸óM&~ۚðO�ø$ÿ‡£Ôï£Ðÿá_þÑëiQÜÉŒšÌ_m¬`Õ&� Ç=í­›Ímgq.ù,⻼KVˆ^Ýùß[Àô(¿¼YĺTÝíÃûWê*/(”åJ2jñ§)¥)ÅYMÆiû8røùíIÿ«œMJ\ŸVÌêr&Ô\Ö21Rk¬”n¢Þ±NV·3¿êö“q>£ÿHý‡õëù¦½×0Gu«j—’³Ï{¨Ü¥¼ =ÝÃÉ<«�íù5XÆŸ…œq‡§N†ÅŠô0ô`”iС ï&p£J´aN.Rq„RŠ»²>¾ Ï‹2’nU*ð�:•''yÔ¨ðÄç9=e&­vÛnÛè~dþÎz–‹¢ÿÁ%¾>jþ#±:¯‡t¯Û§ö}Ôµí-QdmKE±Ó4‹­SOìˆæòÆ)킳¢·™†e‘úÓ¯[ÅΣ†©ì±5xˆiáê·oe^¥JÐ¥Qµv¹*8Êé;[KŸ-–JàìÆucÏJþ]*�[΄ã®÷ŠjÚk~Ò²çíAñ—þ 1àßÛƒàߎ4=Cö^ñ‰þüAðí9Ä� è¾øiðëAÒ¼-­ j—zý¶­ Ï¡Ïµ¤ÿÂ!“æxž÷R–ÒK5M_]±´øžâ®ɼ7Æð6s�¯OŠpØ\ç/Ì8^Yn*¶;3Ì«ÕÅJ–"œá‡•*ê¼eF·×kaaMMMR£B¤ý¼Ï(Íq¼MC?ÁW§,ª­\' š¬UPÂá©ÂŠ�9FUéºmT‡±P½YI®W9ÔŠè<{¤Gñkö¸ÿ‚ÖþËÕ4h~2ü}ð¿ÃI¾xgXÕôý øï^øaq ø³Sðž�¨jÓÚi²x†þÊxN�a=Ü-,){x펟siÍ—ÖyGø%ÅXšUžKÃø¬Î9Î*�•þ¡‡Í#ˆÂRÅ×§F3¨°ôçí*FJNIÔ©NÛŒÎxë(¥8,ncK ðT§8ÓúÅL#§ZTa)µRQk–.JéJZF2”~^ø�û4ü\ý—ÿàŽ?üñ·DÓü!ã�wöÒø{â)<¾"ðþ»âHoC§iòøšßÃÚž«‡w«Éawy§é··ß˦ }BH#¶½¶i>§/â|£ŠW(ÂRRp´šJJþÏûg|fð·Ã¯ø/ׂü_ñ»^’_…? üSðM!oMu¨h²Õ>økQµÖììÙ¦�J°Ðüq®§�靈�L7Ö÷©Inîñx/%Åæ_Gün# –mšás·%‡Œiâ1ó¥›âi΄æ’ujWÀÐxFrÖœ£Fê,îÏ1ÔpÞ"P­�¨Þ [ohÜ©áã<)*‘޼‘§ˆ©íäâ´’sµÑôý·‡¼Gû<üpý ?jÃû ü"ð…SKø£âMö©ø¥ûuüHñÂOŽ~ñÌ÷N-´íKÒþ%§ŒõŠvz„þðƒø2åmµo²XH4�R×Oˆü¼±8n"ȸ{„ÿ×¼ã0Åû\« ‡áL«€òÜ6o‘c0Šæ©^­\±à©åS§*xŒbÆÅÊ—=Eí©N£^ª§W-Çæ9¿ú¿‚ÃÑPÅÕ©›âøƒW˜QÄ6ípŽ)Wž.2R§GØ;O–>äÔQüüÿÁ3¾$ü9øEûw~;,]XiÞм{$Z¾­ªˆÿ³4+ÍsÃú߇ü9â=Jiÿuecáßêº>¹y©I¶=.ÞÂMIÝ®åþ„ñ7,̳Žâl»(…J˜üF:4i_Ú×… M F' M-gS…¥Z„)+º²¨©ÙóXüç…±XlexœcŒpôñ Ns·-9T¥R•*²oHÆ•Y¤¤þ~‡íwìû~Ùÿ¿à§ö¾.x‚ßLøuâ_|U{ŸŠ‡Äß j6¿´Í‡‹¼)â½KÞÓ-üM{®øæ]]›Jø‰sa>�,žÓ|=.¯ª�>ÿJ´‰ÿñŽ8+=ðºy6O‡•\Ç †ÊTrºy^*œøb¦„§Šž2¬°´è`UªåÑ©‰bêb^Ò�Yµ÷\;‘g™ÇŒ¨¡†«W|\±T¤³HÖ£ZT•*²©]ÏÜĸ¸·FÜçË(#áRsÿ®=‡ü>¿ŸøÇNýqÏéëÅ}ßüÝoûÂ_ûñžüÒ_÷}ï3æ|ýÿ†ÿ”“þÔÿö6xL~á§‚º~_O§9ú/?äÚp¯ý‚bÿõg�<Þ5ÿ’£6ÿ¯Ôõ�ú+û`þÈ_µ/íUû=ÿÁ1`ýž­—âe—…?bσ©¬ü-Òüoám]ð>­­évØ|L¿ðÿˆOoÍÍí/MþóÜ_|6øñ—ö ý‹ok_Û"Ò?†ÚOÇŸ‡ú/Ã?„?õÏøoZñÄ/‹Ÿð�‰m¾!è^ÐuÝbÝ4ÿ‡ÐD5KïÈð¥í¤@ÙÏzm,ÒO¸ÌóÜ—�¸×€gÁ’y•\ƒ0¯™çå &†.Ê>¯ieÕñ5èQ—´Ì$ý”0©IÂoߌæ×ƒ…Àc¸{#â�Åaa˜á¡…Á`jV¥R®'í/M:TêMrá’ç•Wnd½×+E?oÿ‚�þÆ_µwíckû Ü~ÏÐZüPѼ#ûüÓu/‡¶=ð¶…«ü-Öõ�*âëþ½o@ñ.¿¢¦›áÿÚ[Yéö^3·ÇusàKJÔ&·š&ð¼=ãNá)ñäx†RÊëã8߈*ÒÌjeø¬EÖ…±‡Ô(b0Øzî®#9N¤ðR³„s uiÆ^Þ§/¡Äy&qœ,�åÉbéÑȲèÏ E*sÂTœúÅJujSP§ˆJ1�u{¼<¡&½œoêÚ¯�¼ñgöÞøýû:X|SðGˆ>0øóþ 1uûêgñ�ÿ—Å?ÚÊÓMÑõ-VÞ?³Ác{y¨BF�sv§|:�‡oôϳ6¡j,kÉ¥€ÇåÃüGS*Çaòl‹pã*YdpÕ>·•p”êÖ§JO ïT„)Ë÷уÑÓÄÓ«Íìçí¹â0øÌû1Ë#‹ÃÔÆâ8=ä²Å:‘ö8¼â1„æ•]#'%î9n¥JP·2å>Nð�ì›ñËöXÿ‚SÿÁN¬>üTøíÿdð'ÁÏ€õýQ´;übñN“,Þµ�_ÛŸjÀÓî!Ó5»wMJ;û{}+H[�SW´²¹ø˜a1x*¶cõù¦S�øÑ�Îxƒ-ÃÒöõ196²X©¼?üÄS£í"êÐ’t�9J­gTg8û²­Nä0ÞÞLfaÁ|]Š©?gxÚ°n”UK~êSQj5¼¤”ayÍEüÑû~ÇÿµGìŸû?ÿÁL ý ¬!øa¤øÏö!øÍý‹ðÃSñσõøßWðæ›<3üE±ð߇uÝj÷ûÁÖú¤þŸÄ÷)icswã«;YoßÌ6ŸMÆK‡ªK4­‚㌗Ûf”°8Ê8| MX¸åµ18œ=}c*QÄG 9ÆÎjš·?—“d¹¾O—qJÌ¢°°¯‘c}žuèή"t¢ÓÄÆ•*•%쨩ºn«å‹–"*<Îü¿þÝþ&××öÿ‚WxE5�F ËðW⮽q¡E{pšUÖ°>$-Œ:�Ý‚H-n®ím"6öw3BóZG=Ê@è—3‡û>Ãaßø­Œti+øÙàytÙ§ø�â_ˆ>ðn³©é:�ž�p°¢xÕ!·’]Z].ÆÖ->Îi¿¶~€óë¤2Þ âLç‰8/û½|Òži½NžXHС[‡qoW‡¡9ÂQƒI{t“spŠå‹~Óô ö‘ðׄ¿m/Úûö›ÿ‚~üPñ^•áoìmOöbý¥~ x¯Y¼[ |?o¡|øQ¢~Ñþ°Ôåµ¼ º÷¯¼O¤iMäipx‡Ã3ëº�6ñÝÝZþ{ÃX¬gp øƒ•á+býµ.(áœë F¢ÄJ¾q›Wá¼MJJpÿwÎ<-j¾õYañQÃÒ÷œ#/£Í)QÏ3¬Û‡1uaK’yVi�­9rû%Oƒ§™ÒŒšvö˜'*І‘U):“ÑI¯†ÿk/ÚÇö�ÿ‚w~ÒÞ;ðÍ„z'Ãþ ð³á¯Á_ Zù‹§øWà×Ã�€ÒxSáþ�§ÚÊò}�.4m=uÛû(�á‡ZÖuC ´ný× pýNñ†pšŽ¾i_Ãì×3Îñr³©‹Î³,ýbó Õ&’öŽ5ª<=9´¤èQ¥uucÁÎ3æ|5šb)GÙáiñ �¥òÑÁarçG §ð§ûIEh§9ØùÇßò…O€ö}Ÿ~¿òL5|nþ¼ã5õ9üžÞ ÿ²-ÿÕ¥3ÉÄÉ —ÿÙA‰ÿÔIë®þÐÑþÏÿðKÏø&Ýëü ý�~8?ˆ|Uû`­ÿh?‡?lü:Ú/Æ ·ørÒ/èPY6ªu�[Kµ¿Šþ+ >#i‚o¯.Ì£–Ï«äÕ±3xzòŸ²öw àéºn¥Gvä­èTÌ–]œ//ìü³íjçZfXW‰�/gŽ‹ýÒUi¨óóZ¥ù””b¬­¯ä?íûA|Oý¦¾%ê¿þ-k6º¯‰õ+=3Iµ·Ó4ÛMÃþðî‰j¶Z†¼1 Ø"Xèº�h¾]��ºe�绺šâþæêæØ8{‡²¾Ë)e9ERÂÒ�ZÒ•Z“¯ˆÄb+Éξ+^£s­ˆ­7yÔ“ÙFQ§F?˜æ8¬×Ëó> ÊðY~9ðþ;ÂeXª ÆpÔþ±BQË«Sr�HN0¦ªÂ>ÅÉ6é¬òå‡ÇdX¼» ƒ�b0¹æ.¶'ý£SWF£”hækÙTO $¢âܹ%.t�”Ÿ¦ø/ÅŽ�ûzÿÁ'ÿgságÂσZ¯Àû�ðü0ðoÇ/|yø�ðÏEø�à�WT°ð'ÅŸx›Ã6vº&±§Ï¤]^è^Ó|iãVÑôKÈ!aáý+û GËÆái×àx’†kšç4³Ùd´åšcr,A—æu²ÜuU1ùN Šœ«Ñ¨«BñU0Xm^kë}¼©õЭ(qe•0˜L ð %„¡�¯˜b0°Åaç8áñujÒJœâàåN”k×ä§$¿wf¥ù-ûþÐ á¿ø(»mñ�W¼ñ€j=_âGìçñÂç\ÔîÚMW¿uK�ïõE¥ß zgŠeÐu‹«·`¶–6—¢)-2·þ¹Ç\>ñ>aå“Q†0áj9odQ¡J QÅät£ˆTéÓJÒup«FIóÔœ.§¬eñÙc츊¢ÆÍÕÃæÓÅe˜÷RNó£�›¦å)_EΜå/³ÊÍn¾“ýª<3'ìÿ ÿè³Ömµ={Áß4ÿÚ;ãÕî—q¿OÖþ#øÿâ$^ømУ•¶¿ðÏÂÍ&$’ó†·ñ”é1,Û¾g…1KŒ×ßçBT¨crZœ7�B¬mV†[—åÒÄæmI«Êž+5ªÚ•¢ù°Ó‹Žˆõ3z_Ø¿ê÷ FjU(c£™æƒ÷jbq¥K tž’¥„‚Ó]*ÅÜú³â–•ñ�âü›öXøE¬i_í1ñKâǯx?ÃZÕ¯‡u¿Œ_¼{ïŒþøkT¾¸±µ¸Ôm º’õ´½ ¯Á¬Ke$§NêËäòªÔòl¿ÁN*ÍèÖ«Ã9VS›a1˜¨Pž&†M˜fpÁf8šTãRq§9ACë aåEMIUöQŸ¯‹„±¸ž9Êps„sL^3 Z�'QRž7 †’•|5)ÉÅ9ÅK›Ù¹~ñMÆÜ¼î?|øñö ø±û ÛWâ~�á†v´m¿�-f kÆ· ñÂ¥‰.ô¸þ<ø—Ã"ÕEµýݶ‰2iúŒÖßk�f?e(,Æ­(sÑ£N2šš~ÑUŸ,š¦ùd×ét~ñìóñóã�íhß°¿ÂoxOÓþ(x·Rý­>'~Ý¿uÿ„ßü+ã…¼Ao¦é^™ñþKâ}†«dž¼Þ »KmdYZ¬z^¥¦éÆ?ÌÞ' Ä\?‘p�ú÷›cñ*eXJ\#•ðW‡Í²\^‘¹T­V¦[õ:Y]JRŽ'±°r£Ï&êÒ«RÿSìêe¹Ž?8ÿWðxzqŽ*´³œ_bê`ñÔ±ÊÑ„#‰U狌ӥCØ4§Ê­ F6ù“ö:øcñGöˆý™ÿd¯ x¯àG�¿j„žø‡â›_†ÿgïÚ[øUûI~Äsø‡ÆÖº¶±7Ä[mfËNÑ®ü�Fßþï +G¬$Ú^ƒcu6»ß 5ÇÓñ–i•pçqv+ Ÿc¸[7ÇåØIfYgðõ Û†¸â8| èÑŽ]*3«ZÔåõ<[½¸Š�TûO/“’áqy–W“R­—áólUaqYvcSšd.¥u9¼Jœc ZQöÔ~;Æœ[¨¿uÄ?ÛKÓ4/Ú›ãÞ‹¢üWÖ¾9iZGÅi¶_¼G«¯ˆ5ïCa©Iký±¬x†<Ûø‡Qg‰­nõû-ºv·=³êšjGaun£÷ ­V¿ äëe42*µ²¼%Iåj?WÃà]JJ^ÆŽûØzv|ðÃÏ÷´#%J«u!&þ;„)æÙ�:xÉãá UhGV~Ò¦!FMsΪҬ´q•HûµçŠå’>kÿ=?ýa“׎ç"¾˜òÅÏ~s×ôç�`ÎAÏ‹ÿ_ר>×õ ëš_ˆt™Œ†‘{õ³eö»Dà´2€À¼1o‚æ#òÍo,‘>UÊÐEJq© BJñš³ùõ]šz§Ý&~ÂxCÄö2ð΋â}0ÿ¢k1]÷kiùŽîÎFk+¤šÖR �±\® 3å*Ó•“§-àÚõ]£V3¤ Ì’)e‚Xæ†I!šX¥‰Ú9b–6‘È„:HŽ#© ¬)JQŒã(N1œ'ÂIJ2Œ•¥EÝJ2M¦ši§g ã)FQ”dã(µ(Ê-©FIÝJ-jšz¦µOT~�üÿ‚€|@øv-_ß`ã*1JWÀÔœý¤[á_slŸÙá3¸ÔÎrõîªÒ�ó: K8ש.\\R¿îñ5jؘF<’ý[ÐüCðö¦ði’Þ? üDГoÚô­^Â6Õü?y[Øéÿo¼P{I6¬÷–®{ŽÆ;sÈþ‰»ô?4†Y†�¹ùê>·—*ù(¤þù3®üFñ߉|Å×|_¯_Ã!bÖ�©\Çcó“»m�»Åf ä�±Àƒf€1A× = vä¥N-uQ\ß{ÕýûœnzÓ8õϾ} ýóKçÿ l/§9öíÛ9 *Kúþ¿¦#ë_ØÛöÖÿ†øŸ®ü^ÿ…iÿ Sþ?êŸ ÿáÿ„Ëþ±ÿkø‡Âþ&þÚþÖÿ„SÆhû?ü!ÿaþÎþ͇ÎþÐûH¿�ìŸg¹ügÇL¿ûK„rêÛØòq¯7³ö—åË3xròóÓßÚ^÷{m­Ï½ðî~Ï;Å;^ù]e½¿æ/ëÛó?Kâ#Ïú³oüØoÿµü£þªÿÔþZÿ÷Áû/Ö¹ÿ“ö¡ÿÕ›æÃø�£ýUÿ¨ÿüµÿï€úÏ÷?òoþÔ?â#Ïú³oüØoÿ´ª¿õÿ–¿ýðYþçþMÿÚ‡üDyÿVmÿ› ÿâ6�õWþ£ÿò×ÿ¾ë?ÜÿÉ¿ûPÿˆ�?êÍ¿óa¿üFÑþªÿÔþZÿ÷À}gûŸù7ÿjñçýY·þl7ÿˆÚ?Õ_ú�ÿË_þø¬ÿsÿ&ÿíCþ"<ÿ«6ÿ͆ÿñGú«ÿQÿùkÿßõŸîäßý©ýk¨ÿ¨÷þRÿûã_+ìüÿø&ÜÞ_ˆ¨ÿ¨÷þRÿûãG³óü?à‡7—âðª?ê=ÿ”¿þøÑìüÿø!Íåø‡ü*�ú�å/ÿ¾4{??Ãþsy~!ÿ £þ£ßùKÿï�ÏÏðÿ‚Þ_ˆ¨ÿ¨÷þRÿûãG³óü?à‡7—âðª?ê=ÿ”¿þøÑìüÿø!Íåø‡ü*�ú�å/ÿ¾4{??Ãþsy~!ÿ £þ£ßùKÿï�ÏÏðÿ‚Þ_ˆ¨ÿ¨÷þRÿûãG³óü?à‡7—âðª?ê=ÿ”¿þøÑìüÿø!Íåø‡ü*�ú�å/ÿ¾4{??Ãþsy~!ÿ £þ£ßùKÿï�ÏÏðÿ‚Þ_ˆ¨ÿ¨÷þRÿûãG³óü?à‡7—âðª?ê=ÿ”¿þøÑìüÿø!Íåø‡ü*�ú�å/ÿ¾4{??Ãþsy~!ÿ £þ£ßùKÿï�ÏÏðÿ‚Þ_ˆ¨ÿ¨÷þRÿûãG³óü?à‡7—âðª?ê=ÿ”¿þøÑìüÿø!Íåø‡ü*�ú�å/ÿ¾4{??Ãþsy~!ÿ £þ£ßùKÿï�ÏÏðÿ‚Þ_ˆ¨ÿ¨÷þRÿûãG³óü?à‡7—âðª?ê=ÿ”¿þøÑìüÿø!Íåø‡ü*�ú�å/ÿ¾4{??Ãþsy~!ÿ £þ£ßùKÿï�ÏÏðÿ‚Þ_ˆÇøQÓþ'ß–•Ï·?Ú<ž /gýïÃþsy~&lÿ ?òÏþacŽžº�ROOSžÜ¿gýïÃþù¼¿óánwc\ã§üƒ;ãŽ?´{v$ñ“Å/gýïÃþsù~?ðV÷áo �sñþÌüºêçŸLÒöVwæü?àŽú^Ý/Qø_€Ãûs ç?ñ-' g�C�\ŸN©Âýø"æòþ¾ãß> èÿØZV�aöŸµíÕ¯$ó¼Ÿ#>c·ËófÆÜc;ùôØ•°UW”¿4EïZ/Óò>—¯ ê?9?h��~üsƒÂ¾øq«üZø¯xcH×-4mO×b¿°¹yîô­FÄë­å˜Ss¦½óÁ­éZƒÔ¢ 4VþTIùçã3êªÃ`©âñ8JØzUcO ‰ÂMÎ�HJ¥u”9Ú©Íe5f•‘ù_fwU^j·'®Ÿ3æ’5àLas Ó›`japØú\]IÒN5°õ%쩪*¤«+Ó¯ZNr†²MÍóÉ_î½F-׳“§[¾[ýa¼1³ü£çdžÿ(>¹9'³1¥Í�®Þ]†©y/ÞKéJ~ê÷¥ˆ¦¢ß_q>÷woÖÍ(ócñ å¸IÞk÷’Ç:R¨¹cïÊšÅÒQ“ëîGÎîòt¼�ÿ@ËoüoþJ®/`¿èW…ÿÄ¿ù¬óý‚ÿ¡V ÿRÿæâa§ÎFFˆ¤Arà�ü­¿³ñU‘Á§³úÝoþi:YŠjë!¤ÓÕ5Œ­f¿ð°?³î?è¿ø/ÿ$SþÎÄÐŽøW[ÿšGý—‹ÿ¡?ü,­ÿ͆½¦‹i$ ÷V>DĶc[‰˜ Úr%8Èç8ý¯„Épu(Fx¬°¬Ü¹©ÇZI$ß+ºªíu­®íø/o�àªááÍ£éZn“l:[é–6¶ûekQÿã´²œ¦ï9JO¼›“ûÛf�…}5ð—öEøáñ|ÚÞhÞ›@ðÜò*¿Š¼Z_DÒ„DdÏeohS©³ûlƒÃî'âJ˜l°˜)I'�Ì/…¡ËüÔá$ñˆî”°ôjC›Ý”áºý:øIÿîøOà±i©üB»¼ø—¯D’Y܆Ò|#½TG¤[H×Ú�ˆ–F}SSšÎéB»iP¥2ñoÒŠó—W ÃÔhðÖ^ìkRk›Î;7,]Hª~uf£…ÃBµ&ÜV.¢´�Ûx ƒ-öuóz•3¬ZÕÓ�ðù|eÓ— :µ¹uMׯ*uMІ¨õ‹¿µÁÙ³K_ YÇa}¯évë›ðãÁPXÚ 5J‡Š=I­£]/ÃVØu”Å26 ñH'¶Ó.•‰¯—á 8ÛÄŒSÍkJ½ *£ž'ˆó©×ªñ->YË ªÉâ³*·‹Š”$°êqtêâi5cÝâ8áž  °ãJ®.„häÙdiST¯ÖpJ† ©rÉ:®/š&™øßñÃö¬ø³ñÖi¬õý_ûÂMÖÞ ðóÍg¢íIá}Y̆ï^ºCRyºœ²ÚÃp�6�c§ù�bðG…|'ÀÐ…lëÙ¿-ªgY‚…lmÜ\f°‹•RÀR’”£Ë†„jΛPÄWÄr©Î|OÇ™ÿÊTñx�ªå÷¼2Ì•<5“N.»¿´ÅÍZ/š¼¥Í9Q¥Fí5WéÅ…|eûYüB[M7Oøw§\´êm«âsŸ›´ÛÈÿK»C}"®‰cjÜÇsÈÏ_+¡yK%¤o~r¾KÝ^¯±ðP#©çŽ�Ï_ èG^æ‘í‡>£qÔöü{Û=zsEÀ_~G¿õÀïèx¢àû�ñüyè:qEÀ\dz€sËO|z�3Jÿ�™ð_ágˆ~8ü[øið{Â`ÂGñ7ÆþðF•+ – ;�jÖšgö…Ê`_±é±Ü=õéiâ im;¼±…,¾^u›aò<£3ÎqîÙfŽª“´§5Uöqv—¿UÅS¦¹]ç(«=޼¦?†ÁQþ&*½*}«5gª÷a~gªÑ=Qþƒ:_‚~;ü;ý¢þ|ð'Ã[ߨGÁ²æ¯ð£Äº¬Úÿ‚ ŠÏÆ�´›IwáK½qÿ#^üWÁík)T抌NOöÇñwÀŸŽþÿ‚|üeÔ¼Q¢üBý¦ô?Ú«ö}Ð%øÍà_�þøâ‚õßIq-�ž³ã äjV‘[iº>»¥Y·Šµ'´Ô-¼G7†-¬´­[Q¶N¾ ÂgÙ+Ä,–ž¶_ÃøSˆq %ÇçÙFkŽÊñ´0**s£�ÄºÔæåR¶¬Ö’�9á–*S«FœÞ9Õl¿0¥Ã˜éU†'5§›åÔÞ;—ãp˜|U ˜‹¸Æué(J)F!m>Y*®’PœÐÿø,wü‹Ä³ƫπŸ þxI ÿ5Íó…£W?ɰÙ>Æ8ha³<ª¦]˜Öö“çtñ5á�›R£N./AÔ�UjtŸñ5\¯,» ƒÃûiÃ/ÆÕÆTMÕ•\..œ49cËÍJ›ÃÅ594ý¤ÔTæ–‡ü‡öžø� |5ý�¾ézN™â‡µ‡m5¯‰ –•u/‰uëßøßáGŒtM#Áºµ¬Ó\iSê:¡ŽÍÖ=Nâh® Šº³Ç€¼1•×Ìø‹ˆ*Ö«‡Ì¸[:f"u`°¸xcð9¶ ½lmÅFª§JóW�(§6ì´¯3\]<.[—B«†ÍiƦ*š„�Z²Ãâ0ué„âÛƒ”ì´ŒÛM$»ý­£þÐükÕü#à/Ùâ?À_hÏð5ôY¿à�_µÁm{ᩨ,gP–ëS‚úM0ø„éz^�ž½Ðü1àÏ|?–ÏEÔuïï­î¥Ô¬~"·¼’–3Åùn‰¬³Õ]x�ÂÙÝ Þ•6ýš�)AUú¿µ«Y¬E:ø¬n 0S¯N›„%J~ä3Ž�>MŠË©CêÍðÖk�©ƒœ­ÌÜÔœ}§$ ½“§J…l3Œ%%)'Íáóâ>†<)ñ¯ÇÞñg„ÓÀ_ðŽ|QñNƒâ_é·ï«Gࣣø¶ûOÖ<%aª™g“SOýžëG¶¾i¦’ðY¥É–C!vþäË1 ’eø¬.-ãþ³•áqluZj“Æûl%:”qs¥Ê•'‰æ…iS劇;�*JÇàøª~lj¥ZŠÃû,]jup𓚡ÉZQ�Îï›Ùò¸FW|Ê)ÝÜý'ÿ‚Ù¾¸?lô‰£øUÁÏ„Ñ|ìð¿ü+øE­Ÿ1"ØI£�·‰UÄ´JàD[lq¢þuàDZÿS›ß4yÆjóÞw|Wö—Ö¥þö¥ïªßUX[©ÙÛ^­ŸIƪÛ)m„X<"Àrÿ êÞÉ Þï"­í~:tEχ�¨MÿXý ÏÄesá«OÚ‡áÊþÏ ­«)�ÆÓþø:K�%xÂ’xŒÝ%›5€¹>*`¢ôjÕ÷N>2äÙÖX‰ðÎcþ°{{à’­ýžñj7JK°üœéO—ê·÷=’+¤ø/0úÏð–g†þÏu:V|ŸXö-ôö^Òü¾íý¯^cîø*§í÷ûK~Ê¿µ†|ð÷EøY§Ý|-øwãx†?øKXÖ~-]Jš�…˜ñ·âMTº½ð߇m´¹ü=¦iºmŬv—_ÛÒ½Ó]\B,>#Âîá¾(áœN3=…lÒ¤3<à †Ã¼v.�ª ÙÔŸÕèa«ÒŒ18‰UXŠ•*FNqö G–-ÏÜâ¬û3ʳJTp†/ ‡­R§°£9âß½í'Vœ¥*tÔ}œ#?iwwîú¯Ã+Ñà/ø)gìñÀ:F—ð“Xý¹ÿe{o~Ò |=£iÖ-νqðïľ1¸¸¶Ò/¬f¾ðÔZŸŠ<=¤^Éö 4ûë�CÃwRÞÏ-Ö£®-ç—™CëþñÖ]�­W5¥ÁQ,æxŠÕ*V�ælc*°š†&T𸊰^ÑT§ x˜(EF�N¬3ú¿ä8œÃ>¡æúÏ+ÁñψœS—q+«‹Ë8_ ”SÊrWŠÄaðÕ'�ÃuN�¸Ö*¶EÙN'+䥊Íjã%‹Ç*TêUŠÃÔTéá£*±¨¡µåI^Tç5Êå+ú‹uçý¥> ÿÁ7?m/ІôŸÚYý·|#ðcÄ-ðþƒká¹~0ø/Iñy¿³ñޱe¦Á›wáÍ[ÃãÃóÞÛE ëÝJ(#‚×ʰ°ó0”Wg"ðnYˆÄVáú<‹Î0øJõå‰YF6®ÙÏ JuªÆž"–#Û¨I·É nMÊõ'ÕZo2ÁðÞuЧJŒóº8:•©ÓTÞ2„+sF´ã¢åNtý›i%Ìä’JÑ�¯|Fÿ‚�ü|пà¬s~Í2ø%gŸ~ÐÞ ø%âß„’xÁ“h^-Òþ"jžð·‰üQâ]Bm Ojþ)¾¹ÖeÖÞöëUhd{x4™mäÒd¼¶ºòrþÈkøW$šÆÿ¬^ÆçXLÕcñо®_K‰ÃapÔÕu‡£…„hª*¤¤”¥UIUP”{19þ>Ÿ¼µ{ìê¹… \#ÃÑtêÇ:TªÕ«'Ru[›©w+;([“™?ø!ã�Ÿ²oíÿ"økeâ+�Ù«ÄW_gðÀ_Ún„rü[Ð>éºgÄ/›ïÞØ ;Toéž&²¼Ñ|?o©Ý —㎟¦êv0>‡ãøcÓ4Hl|Kà5·K;{hô¨m–[ísì÷W—k«Eaô^ÿba±\I�Ê#že§_ [Â9Üy^IR¥)µ_'V³žäç):®V…hB.“©çqGתÒË+ãS­ YÆÿ¿F2ŠäÄ.X(Ô¡k$¢’r©fß:�ä!ïÐcŽÄ޼qž>Ÿ® ~¹sãÄÈçõÆsøpaך=óíלg¹Çá×è{àÏ®søƒÛ“ž§˜ÇNhxü9>㟩Î?ÔÐÑKƒ¯·¦F~÷Û=³š{ºªì\àcœã=AÇ韧€"Ï\ž¤~#sõ –sÓ?"1Æ9õ#ñÁéF�ǯ�É ¹•V% XÑNsµxËÜòÄãc$ƒEåߨ۫¤²F··lÜ·úé†?uÆý 2ô?7Bÿ×õê½z[˜õ÷眜äõÉ={û÷ë€ ™Q|Çà‘ßóøóòöê(ëúþ¾Eyf2“ÙAà’yäŸrqÁ4y�Q%½:Гè;“ÓƒéBì× g[Û¶é˜q0<ƒÉ)ÁÁ�q÷q�¾IRöÿ?ëúùˆÁgÜ}½Ç'·~þœ }hþ¿¯ëñõý~r:~ýýtúþ¿¯žáþ}—ÿ[ùÑp%sǯOåž:~ô8¥ëúïø‹?Ôãðôÿ#¦qNãþ¿2kk›‹Kˆn­.&µº·•'·¹·‘ขxœ$�•Õ€*Aؼ&†Ä`±Ø\>3‹£S‹ÁâèÓÄáqXzÐp«C‡­ѯF¬%(T¥R„âÜe›OF†.…l6.…NNtq|E8V¡^•H¸Î•j5#*u)T‹q�9ÆQ”[RM1ÓÞ\]Ï5Õäó]\ÜÊóÜÜÜÊóO<Ò±y'šiY¤–Y³HîÅ™‰f%ŽhÂap˜ 6�ÃaðX,%xl& Fž †ÃÑŠ§F†F0£F�(EB�:qŒ!£¤’ >†….…6NhaðôáF…4â£N•4£S§N)F„Tc”RI u�yõõõúñùúžÝþºg׿ôçé׋‡õùG4Ж0Ë$Eâ’ nè^I"b¤nŽD$H‡åu$04šOI$Òi«¤Òi¦¥¯TõO{ê Û«WÑÙÙÛfºiÑ‘õÿ=¿Èþ´ÿ«�,—$I4ÒÈ–èc�$‘Ý!BI)±"5$“µB‚yÅ$£ÚŒS–­¤““ÚíéwÑ^úmîÛ¶Šíé齈³ÿ×ý099ã�zzÿH6ê{“þFyÇ¿âïý_×Ü!s߯à1ëøwà}=i_úê3õëÃÿ´çü'SñÃß�7ý–¾;x/â¿€£ðƳª|ø'ã/hß³'ÄOxF Siâ-FË^·—ƾ³Ö¯m"—WÒ|1ö¸|ˆãWmFê]VëVüƒÃ'RÃf9.в,nS�xª³œóŽ­Äùv_Œ”ùðÔçBKŽ�NJ�lW#æm¯gJ4~Êžk³©†ÇWÊ3 Ì?²œ°X øxeXœE­Vq¨�z©$œáK™YZó|î�´7Æÿ~Ñ¿þ'üwñ]½¶›â‰ž2Õ|Ws§iÎïe¢Ãw>Ý+E°�Õ&ž×BÒá±Òm®§i¸ŠÉ.n§‘Øþ‹Ã¹&†ò,¯!ÂJu0ùf Ž5j/~´¡Þר•ãWªçZQ�¹7.T�›Ì±õs<~/0¬”jb«Î³Œ/ËåîS‹zµN±MêùSz³Ç&š[‰iä’i¤mÒK+³É!=YärÌÌ@,N~µì¥¥¥­’I$»$´_�ÂÛnò»o«züÛÔ‹8éùÿŸË�Wê"Ë\ÜËV¯q;ÚÀ]¡·i\Á ;vŠ"|¸Ë–fbª 1bz𕦿£)[šV\ÎÖµÞí+i}­¡Wmr¶Úè®ì½çæDÍ�µ~ïãϯlàþ9;Ó¿õ÷’=®g’( ’yž s!·…¤fŠ3—É�˜Ç˜à4›w°Ëä�JÑNRQJR·3I'+mÌ÷|«kíÐm¶’»²Ù>—íë×ñ!ç¿ëþs×ùýiþ`½�éŸëéÿê§ý}Â>Òý®?iÏ|Òÿe é&ðìß¿d�…߳߉gÖÂí¯ø&çÄ3jú¶‹ý—xçÃ÷©«Û¥‘¿6—ò›íV0 ›þ'„xcÃõx²¦2¶ âìÓˆ°±¢ªKØa±ÑÃÆ�*þÖœ?Ú èÉÏÙóÓW�-Ikow9Íif0Ê#Fi<»&Âeµ\ÜW´«‡uçO’R~Î\ë—›–[Þ(ø»?€íßúsƒùf¾×sÂü §º¹ºdk›™®^(ÖÚâY&d‰w‰ …ŠF¥Ø¬`„‰šQŒcu¨Ý¹5¢›ÒòvÝ»o«²müM¾—m½?Èû_öÛý©|5ûMx¯à7ˆ|¢øŸÂñ|(ý•¾üÖS]{n5M{áäZúk®œt›ëÔþÃÔ¶"+w$7Ž‘Éö›HIU?Àü-‰áŒ&‡ÇVÂâžmÅYÆEáÕIF–1xwF•OmNÛÓö/�ÁJ µÉ9n{¹îmK5­€©Bi,&S‚Ëê*Ž)ΦTçœy&ÿw.uʤԴ÷’>!Ïôÿ?�øú×Üzô<"Yî'º™æ¹ž[‰ßh’iåy¥pª¨»¤vvl"…\“µ@^€£ÁrÆ*1W´b¬•õøRIy÷ê ¶îÛo»»oç©9ç·éÓúãéÁÇJwþ¿@&–â{¦q<³È# 4¯#ìNHX„A¨ ( QQŠ´b¢®Þ‰$ÛÕ»-ÛûÛßPm½[mé»»ÿ†üˆsþqϧ~øöúÕ2:~ýýtúþ¿¯žä³\Opáî'–w±‡šG™Äh0ˆËˆ8U*Ž51Q‚´b¢®ÛQI+½Û·W¿v ¶õméÕßN׿NÄYëÎzz~8íôç¡§ëúÿƒ`þ»©ÇáéþGLâ�ÃúüÃ9úý9ÎéÙýúz fgbÌY™˜³3Ìʼn$³KÉ'9$“Í5¥•¬º[e¦ËúÐ?§ý˜Þ§çŸþ½;ÿ_Õ…ý[‹Ÿþ¿é�ÉÏ{Ò×úCØUfVVFee`ÊÁˆ*Êr¤0Á §œŽAä{›­“î»§¿�-ôÿ‚I,ÒÏ+Í<²O4�ºIfv•Üœrò9g'Ü’xǵ$££¢–‰-,¼–‰ m·vîû½ßê)¸¸hRØÍ3[Æí$p4®aI‡t‹vÄw1Pº{�3’ŠæiEÊÊí-“{´¾à»µ®ìž‹¢~—²¸Cusn²¬À³ÆÐÜ,2¼kä žà§ÊÎQŒœZqm'Ë.ñmhöw_!¦ÕìÚMYÙµu}Ÿ–¾„9ú~;ŸÄtí׌Õ&qÓóÿ?–?:¨ Ÿò8ÏééëÒ—˜ÿÈ3Û·n¿‰Ç\¡öïEÅýZŸf~ÉÿþÅ©^|:ÔçÿFÕZ]OÃÌäm‡RŠú�€%¸[ËXVêQ'µ¸nê“èy9¦š+¬mžqû2ù=ì×cïŠg†V¼¼´Óí¦½¿º¶±³¶C-ÅÝäñ[[[Ľdšy™"‰F]ÝTw4 '&£äÞ‰$ÛoÉ-Yê¿ ¼gñWD·ñn—âm& Osukæ‘s©s<ö3µ½Ôb&ÍÒD#7NfØÑN¶’[Í ¯ø7‰~9åÜ Ž¯�àrŒ^iŸR§NsúÔj`2º¯MT¥QVœ|zi§l%8áçiAccRŒfàOs,ÂÒͱùŽ,ÊjNqŠ áŒÌk:sq©J3Tpné«â'*Ѽdð’„£'úmûxÃ~ ø§¦�È­Ôº>µ Æ£rþ~¡qØË˜ä›j,q3Ç´ÑA±ýÏü›þ{/ï~ðL¹¼)kq,“I1ó$%˜ª8�|yçAǰ¯*¾]€ÄU�j”'ÏQóMÆ´Òrïm•ü´<|G帚Õ+Õ„ý¥IsMƤÒrêì¥e~¶²¹ü!ÖóÙ¿ï‡ÿäŠËû,ÿŸ?ð¢äcþ«e_óî¯þ ©ÿÉñéO$ir¡#UD_ œ*¨U3äàä“Ôäó^½:±¥NáNЧÓ‚çnÑ‚QŠ»M»$•ÛmîÙíÓÃB•8R§îÓ§Ó„u|°„Tb®ÛnÉ%vÛ}n<鲜¥/\ŸÜ}¿×ôôúý1XþçþMÿڗ쿽øÁìÙçézÿϹõÎ?×ÿ,qGÖ?¹ÿ“ÀeýïÃþ6_ùû¿å‡çÿ-»þŸžO¬sÿ&ÿ€Ëû߇ü?³fÿŸµÿÀsÿÇèúÇ÷?òoþÔ=—÷¿³fÿŸ¥ÿÀsÿÇý?ÇÖ�¬sÿ&ÿíE쿽øÁ¦Ê?åéOÖÜÿñü~”}cûŸù7üû/ï~ðH§Òeš¡û`_6)#Ýölãz²îÇž3·9ÆFqŒŽÕ W$ã/g~YFVçÞÍ;_—­„èÝ5ͺkm¯ó??à¯_ðIo‰ß¶8Ñ~2ü'ø�¢?Œ¾|7Õ´m?áf³áéì�Ž ¥÷ˆš-/Æ+¯Kk¥ë)<–fŸ©hGN¹½[¶kšu¼òMmû†>*åü/:™^g—VŽ2ÇÓ©<Ê–!TúŸ58PR©…ö•JQiN¤éÖçŒ9¹(T’J_ Å|%‰ÍTqxLLl.qŽtÜ}µ¤êZ5½£Q›øcC•»sN)¶¿ˆh²W9àqÓù“ÇæpN@Ù”ÞßÕÿ®ÿ;h~$ÖþO·õùÀzäŒàN}û {g8⺡­º_Õý ¥ý_‰qO§ÊNÎA#øN@<œŒ‚xõ­Wõå±oëúü )€;g®OQÇNƒœc�}zUÇgèN¿×™§¦ë:¾‹8¹ÑµMGI¹Çmí݌ْÛIƒÛæ=sÔÕ§ýuþ¿®„Êš´á.ÒŠkî}�[пhŸ‹ZU'}^ÆmõÛK]D? ÷oz‘럖ùw`Î1U{nÎJ˜ ,ÿåÒƒïãø|?ù/Ü{6ƒûbê1ì�ÄÞ ²¹< .´=Bk-½>e±¾Žü9<�§PŒzÓ¹Ç<¦?òî³]”ãüš6ÿÒYìÚíEð§XØ··Ú§‡&pÍgL•¢ßÝEΔúœ*œ²NÐ)\nù@s#’yn* cSüWû¥Êïä®~·|ý„þ#|cм=ã�[YÑüàé:WˆtXˈ5}AÖm ÔtÝKKÒ´ëµ·‚ÚöÆxå�õ�GOºŒIÿgÌ„×á|kã× ð¾#–e¸|Vœ`ëWÂâhÓSÀàp˜¬<åJ­F/IÔ«:u"ÓX<6"”­%õˆI¢pß„ùîuN†3VŽQ—×§Nµ)ÍÇ‹¯F¬Tá:Xz5!AF¤nŸ²’?TþþÇŸ~yšo†Å>"�ã™|OãEµ×5('‹ ’é¶Ík“¤¼RnhgÓôøo”0Yogؤ/qg‹üqÅÞÒŽ'3y^]5(<³&up8j�–’Ž&¢«<^-J6S§ˆÄNƒj𣠴~å�xwÂü?ÉRŽc±‘q’Ææ\˜ªÐœuR£áðî.î2£F5Uí*’²=_âÆ‡´7×~ x–ÇD�‘Í��qq­jò!U0húD%¯µ :,� FÞÔ8–ò{xJ¿)Ã!Ä\a�Xƒ-¯�šqUë¨û<.ïÚc1sµ '%os‡�êÖ•ÚMÆ<�¿5IB7’üxøñÿø…ñ ížød— ü&í4©[Ü©ñ¦±lÇj<Úœ'‡UÔ6Ú$­{�µ«ˆXư8Àáÿc˜q3£Äy´T'5JmdØ:‹V¡†©®`ÓÓÚc`¨É%%‚§4¤;qW‹Y¾oí0™"©“`4]hÍib ôNU¡¦ =ù0Òö‹Tñ3‹q?>¤’Idyew–Y]¤’IžI$v,îîij»±,Ìij1$’M@F1„cEF1J1ŒRŒc«(Å+$’I$•’Ñ’6äܤܥ&ܤÛm¶îÛoVÛÕ·«c)ˆ(Ä:îŸá�Vñ«/•§èö7÷L1½’Þ2â(� <ó¸X-ãÎešHã_™€ ºp•IÆœUå9(¯Ÿ_E»ìµ?¼Yâ]CÅþ"ÕüIªÈZ÷W½šéÔ1d·‰Ž-ìáÎÙìí„v°ÉŽ%,I,j/ýtý¬¥N4©ÆœvŠI>ýÛóoWæÎw>½ÿ ÿ?N¸4\Óúüƒ==¿>3øtç?Ö�ëòþº‡õý~A×üöÿ#úÑý\óÇ™ë‘ß¿_Ã<�CbÝ{õÏn8 œñÆ{�ÇZžßqZ÷>†ý•¿iþÈÿ|+ñïÀ^ðŒ$ÃáÝÄ~,¶ø¤j:~­m«é^Òü1{â-Cg„ô±ci¦Zh÷×·îúMºZ^]ÝÈóO'�xc�RáØe˜j¸:ytòÙb+á°’ÇÖ¥RŒ¨ÖÄUÅC Oý®¯<êε:pµi9BIEo[?Íkæ2Ì¥Š« ÒĬR¥N­e‡„£58R�)T•¨Ã•EBRw‚´›ÕŸ^[ÿÁji{OÚª÷ö¿²øYû7ÙüVÔþ?À-^ÒÛÂcðž¯áOøM4¯[ëZŽœ>-ÿkÜx¾ÎóE²Ò-µoíä³ÿ„~8ôÙô»‡µ°º³øùx1Ã3áXp|ó^$žUKX¸øßìŸÿHý¥ÿd+ÿˆ°ø<âïüSñ¯âï|'ø�áËÝ{ÀRø£ZtûV»¤Åc­i> Ò¯M¬6Ú|‰ˆ$Óu [%Ö¬5Iôý:âרâÏ 8g‹éåÒǼ~0ʰÔpx<Û-ÄC�XZ7ä¡ZU(ÕÃÕ‡3•DÞT§9MÑ©J5*F|YGf™4±+õzØ|]YÖ­„ÄÒ•L;«=êAFp« Y(´ª8Ê**q“ŒZíÿMý§¿iï‰_¼ã×ð“¢|ñ§‡üyð×áO„|?£|4ÓÁb0žk‹ÄÓ­™ÕÃâiÕ„áJj„0´T]YT�&ߨ¡,GÖ8ØÌø«5ÍqX,F#êð†_^ž# „£JPÂÆ¥)FQsN£«;òF.õ´‹’¥ìÔ™á?¶?í…ñ+öÜøÆß~*èžðÿŠÛÂÚ„NŸð÷L×´¯gh_½œâÓÄž&ñf¦/e:ŒÂêOíS…�˵„«o÷x;„rÎÉÿ±2œF;„XªøÏi˜ÕÃÕÄ{Jê qçÃa°”ýšöqå^Êêò¼ž–àÎó|V{�xì]:ë:4èòá£R4ùióYÚ¥ZÒæ|ÎïžÏMô·�?ிµŸÄïÙGþÇOðóĆÇÀÚ}‡Ä×ðö¿§|eÓ`øqâï x¿Â’ØxŸHñfŸáÔÔ,n¼)¤i³k¸Ö/tا–êþ]jwÖ+æ°p–YÅëvûG‹”ñÕ*e‹‡©“U–e„Äàñj¦¶¦!ÓœquªFŒq‘£ Ž*0TcìOSÅùÆ+(þÆ®ðÕ(¨Ð„qN�Hã`°Õ©W£ËVcOš.Œ"æè¹Ê)Þ\ïœ÷­'þ éûhéþÓ`Ô¼#û:øŸâ^�áÉ|-¥ütñÂëÙ~)Ûi×Zê_µiÞ)Ó¼,'¹�îkx<-o¡Ý\�6óEºbkÁ«à/ÔÄUt±œE†Ë+bcŠ«‘aóH,®U#~EÉS SË·ÎX©WŒt…xž„<@Ï#N*TrÚ¸¨Rt¡�©…“Ũ½ÝãV4®Þ­**›z¸3ñƒÄ~%×<_â-{Åž&Õ.µŸø£[ÔüEâ bõÖKÝ[\Öï§Ôµ]JíÀE{«ëë©î®*ƒ,®ÛFB×ìøj0xzL-8ÐÃahRÃaèÃHR¡Bš§JœnÐ…8FÞÉ#â*Î¥z•+U“�Z³�J“•œ§Rrsœ¥ÝÊM¶ÒÕ³îÏ„ÿðQÿ‹^økᯃ¿~~Ïß´÷Ã_¤±xÃÿ´¯Ã~"Üü<µ�"ýƒÁºìZž�¬iÖ!ŽÞKË�FM9WI°KM>+k{ˆÍ<>ÊqÙŽ'7Ëó<û†³,kæÇ×áÜÊY|qóW|øÊ•j5*6Ü¥8Æœ§Qº³r¨å){¸N!ÆaðÔðxŒ._™á¨]aéæXe‰xx½9hÏžŒtI&ä”}ÈÚ)%äß´¿í—ñ�ö¨ÿ„OLñÁð�„~|>´{/‡ß>xfü)ð>xKÃ>ø·ÀÖ>Áã[ïkú·kÕìµ] Q‚ÇVžÆÎëPÓ/g¾·’òÚÞâßì­ÝøÏ†œ„θbY�,,V#˜áq³È³I`¡Ž¡F»Tc‰¥:UéÊt”ç u ¡% J2æOOµâ|ò¶4XyàrÜ}*x|5Z …U凩8.wJjp’ŒÜS”[’æI«Xü^×?oÚ;Ä?µF�ûbê~-´—ㆵ;k¯H4ÄÐôKk;Ý2/é~2²Zø@é:–§¥ÜiËron¡Õ5+Û­JmfþïT›öø~­Â4°³YF&œ£ˆ^Õýj½iJ^2­~Tç‹ö´éU�N^H:T¡q£NׯÏ<Ìjf°Î%V?\¥$éû¿º„”UÓ¾”yg(8ß™©JNNrr=Fßþ Sñ/IøÏâÿŽ^ø!û0|=ñGŽþ xÃàŸ‹4_‡ÿ üKá_ kšgŽuÔñˆd¼<ËjäøL“�q.? �Î0™Ö¶?0Ãâ±Tj`¨{ > �Z˜HeЋ”¾¯Q¨§)8ÖŒ_)Ô¸‹ mluY‡«_[V|5JTgõ=¤ëÊ1ÄsKÝ—´rqåI87©Ä~Ï_·¯Å€¿uo‚×þø;ñßàž­­Ÿ'Â�ž_xSDñA�R_xlÁ£êº=ýÇ— Íê3éÞ`šâÞÆÞöþúêç·?àŒ³<Ìigñ¹¾GœÒ£õgšdXç�ÅWÂÞëˆR§Z•hFí'ìã;rÆS”!Ç¿<Å`0ÓÁJ†‚”ý¯Õ1ô=½(TÿŸ”í(NÑ]s8ét“”›­ñ{ö÷øÙñ—âGÁ¯kºÃßh_³Ö·£k?þøŸð‰ü!ð?öFµ¤k¿Ùúo†´ýEu7´Õnô-2-Ziõ÷Ô¥²¶KK;ûb�!¬§‚2lŸ.Î04*cñóú5hæù¶;ñY¶7ÚÑ«CÚTÄÔ§ìÔéB½WIF‚§ÉÊtê7&çžc±˜œyÇNž_8Oƒ¡KÙa(òN9cJ2æ´¥N mÔrå�£(Ùˆ¿jψ>(ý«íÿl+ýÁ°üLµøµá_Œ©¡ÙØk‰àSâkZ>»§X¶™/ˆ®uó Ow¢ÚÅ}jø¯¬¹ä[n½Aºþ<}}ÿ‘Æz{Õú_§õòõý\Oóëü¿úßÎ�À3לôôüqÛéÏCJÿ×õÿÁývAn>¤þ^œ…0þ¿¯ëQÅð6Ç9ã“øõÇ={òƒúþ¼Âß×â¶œ�×ÿ¯ùuü)\Bœw?�sÇòÇç뎅ÿ®ƒ>½ÿ ÿ?N¸4\?¯È3ÓÛóã?‡Nsýhþ¿/ë¨_×äÏoò?­ÕÀ± òÒNß>¿Ó?ÊŸå¹-ößúõ&çuŽ5,Ìp~äžêIÆâh»¸Ò¶¯úêk€–cŒïº~$—¨�¾ÄÈã$‘’O'Œ >ïë°–¯Ëô!†âHdóç<8nUÔòU¾¼ûŽÝèRéÿ6‹2Æ®Ÿh·ÎÌþò?â…ŽsÐýÃÎÓôô�O"Ÿùßñóbzý¿q.zc§å׋î—üV••w3tÇw$öãðëÆM"ýGÝÜ¥Š{vÍË O0?êÁþônÇŒ®N~lm.-õíÓúûÌsœóÜöÉõÿõÒó+ü‰ÕDk¾NèÐŽF3ÏððzñÍVIŒ�Ƀ�? óŒööéEÇý~\÷ýÎzÿ?­˜ ¹8Ç8 zûzú{þÿ¯¸Vþ»–À‚OÍ+Á9ýN1ÏÔt¥p¸žrŸ¿ù9ý=ûõ¢áýu¬T†^¼õÎ:ƒÇ~¹éßúCþ¿à–#Úî²/ûéÏ©ПëëŠ?Mÿ^Šß™OqŸÄ~<þcœ÷ê=)_úþ¿¯Ì«_þ³´¬± Ë1ã=°3“œð3ϧ>” v×Ýøæ¸K8Úv + M0à¯LÆ„t>àäÇÌ2 íÜÆf$ž¸þçü=sKúþ¿­@�<óÈéþ}F)ÿ_×õù�þ\ƒÿÖúàuüý) ß×àïø~œŒùó“Gõý\?¯ø?×ù’9ʨϦ?ñï__æ{ÑýVëò#ÏÓ°¿_oåÇA@_ׯõ¸{žOÓŸLñüǧ>¥†¿×õý0üò=.1Іp:Rùõêøã9ËéõïïÓ¥?ëñþ¿Ì6@ °Ç¸#ƒþ{ãÓëHsþ}ý=~½×õ`=†¿?Ï¿åêN{€&O=q×ùz÷ý~§šóþ»<þ|OÏ##ÜÑý}à.{ÿ“ïéþ Lÿ1ŒqüˆëôëéGõý|ƒúþ´>üúõ÷éúàç‘@Zÿ_�r3Ïÿ_ëí×ùz`þ½Gý~?×áæÁëëۧ㟯ÝsÀ;OÌöèIëž´÷þ®-¿®£‹ð@éß““�¡ü9öÆ)¶ïÜn{à÷éë�\cÿ­Íþ¿¯ëpïßüõýqÓ�×½ ûƒþ?çÿ×è\>ÿëúù€çëÏNéÓ×ôí@X\ûŒqÎl{qíÓŽ¢�ÿ_×õù�Ï#ëéùzuÏSÓ×¥0·È3ÿêöÀç¯~½ztïKúþ¾á_×õ¸ çðõëéÏo_çGõý]Ãúþ¿$矯øþsžýG¥ÿëŽÞÙ>¾ý? ?¯êÁýV ñž¿§§ÿž~´ÁÎO_óý?Ï|Ð!3Áÿ<ŽŸçÔ`âŸõý_˜ÿá…È?ýo®_ÏÒ�­ý~žÿ‡éÈÀ?Ÿ94_ÕÃúÿƒý˜gþž¿^‚�ëú° žÃߟçßòõ'=À'ž¸ëü½{þ¿SÍùÿ]ƒ?ž>§ç‘‘îhþ¾ð=ÿÉ÷ôÿ?…&˜Æ8þDuúuô£úþ¾AýZ Ÿ~}zûôýpsÈ ?­¯È9çÿ¯õöëü½0^£þ¿ëðó àõõíÓñÏ×�n¹à€N}øõ>ØéÀ¾¾â€ù »¯>�ùãèÏ·súþ¶g¾~ž¸õÆ?úÜÐ?ëúþ·44�R÷DÕ4ýcM�­¯ô»Ëkû)דͬ«4MŒá”H‹½Èé•`Uˆ ™Æ3Œ¡%xÉ8µäÖ¿…ì}¿â/ÛÊ=&Å|/á·º×'°¶“P›V�ä麃Â�soo»›ÍR(fó#Ym5YBH@Ysyzž-<¥ó¿kRÐR|ª:ÊQ¾�·¤[Vé#ä_üEñ��îþÕâ�nëPTv{kao¦Yƒìš|;-£`¤!ŸËk™i¤lšM¿ø«KJ‚µ8(¾¯y5ç'¯ËeÐú'öBý§µÙïÆÆßV’{*¸¶ƒÅº\cÌ—O™@‚×Å\|¾Ó•¶ÞÛ¦TÒÃÛȆîßMžÓò|2Ãøƒ’ûL$iÑâ\ª�Iå8©>Xâ ýú¹f*[:†¯B¤µÂâmR2Tªba[ôøÖ· f\•ÜêdØéÆ9…ûÒ¥%îÃAt«Fö«¥z Á§R4eêoökñO‡SÆ�µ§ Ãá IJx‚;˜åÒÆ�…6¥.¬.â/Ø¥‚5Ù™ /’¥Æküù§—ã©æo+©…¯O1Ž)àe‚©NPÄGí=‡Õ¥JIJ5}·îÜMKCú¯1ÅaªeON½)á%Nž&8ˆMJŒ¨4ª*±œ[‹¦áï)&×.§òñë⦥ñ¿ãWÅ?‹š«În¾!xëÄ~(Š †Ý%†›©êSË£iKóɶ Hû•k› ŽÖÎ(ƒ¾ÝÇýHἚ�d6IEG“+˰˜9J+J•iQŒkÖÙ{Õ몕¦ì¯:’v[Äy®:yžeŽÌ*^øÌUjéKìBs“§O®”éòÓŠÖÊ+W¹äùÎ=�É8ÏO©?ž@í^ÑÁý?ë¯A¤œ“øãñ=9#¸ÉíÛ/°_…¿¤;Û׿~™é“ëèO±Æ(¿õ§õø‹ñ߯ä;Žƒ§OóÁª_×õýXBƒÉëÛ9˜ïéÛŸoSGŸåý~_x ÇÿXŽ˜—~Üû´ ~Aáúuüý=;SŠñïü�­½´àöÿ—[ÞÙ"¿*ñ‡þIœý�pßú¯ÌϸàùâìY[ÿR°^_×Þy7¯u¾ ðŽ>#kÃÿüâkžD—m¤xSBÔüA¨Çg Q=ìÖš]µÔÐY[ïSsy2%µº�óKóQR¥:Qæ«8S�íÍ9(«½•ÛZ¾‹wÐi7²¿¡ë'öQý ¥K‘¤|7Ô ÔåÒ¼G¢,/ìgŒFÂu·–H丰™eŒÃn²Z³±…¥[ˆå…<�í¼½â1UVN¾n�jj>ôZ¶¶m7ui+Ç¥îš?C~ñ|rŒ£>ž•<§<ÂÇ–ãeYº5éÉÉr9Â�:ñp—= Ž5RJj.œ£'‡}ûSüÓ/õ�2ÿÄ2A{¥Z$Ö–ñÁôÞ%ÔÍíž›7…<1�sy>©ãKMGSÑ­n¼$b·×b]sFÔ“é:„7æ–FU#*ÍJN+•Iן4i¼= IÔÄÆs¥a쪥V”ù]9©�Tü"ãzÔ°uèåЩK^TëÔueFžW…T+b¡›æµ14¨ÓÂdu°Ø\uZYÇ=L¥€Ça�hã0Õ0ëÔüS¬øŠ×ÃöZŽƒ£Ý}ºé­dº²¹·K«ý6à2¼3ÚÙOs ÜÃ)K{†·žîÞ&’T):öâ«b!B(R“œœy¢ãÏ:i«´ã$ä�£&œ¢µ³jÌùŒƒ.Éñ9®# ›céG F5•ôë<>R�EÊñéN4§Oš­(Ô…³\ŠQ„”©¿1ÿ„Ëâwý.ÿðžºÿãUæ}s3ÿŸ3ÿÂy‘÷?êçÿÐÇÿ‡Šü°?á2ø�ÿ@‹¿ü'®¿øÕ\ÌÿçÌÿðž_äêçÿÐÇÿ‡Šü°?á2ø�ÿ@‹¿ü'®¿øÕ\ÌÿçÌÿðž_äêçÿÐÇÿ‡Šü°?á2ø�ÿ@‹¿ü'®¿øÕ\ÌÿçÌÿðž_äêçÿÐÇÿ‡Šü°?á2ø�ÿ@‹¿ü'®¿øÕ\ÌÿçÌÿðž_äêçÿÐÇÿ‡Šü°?á2ø�ÿ@‹¿ü'®¿øÕ\ÌÿçÌÿðž_äêçÿÐÇÿ‡Šü°?á2ø�ÿ@‹¿ü'®¿øÕ\ÌÿçÌÿðž_äêçÿÐÇÿ‡Šü°?á2ø�ÿ@‹¿ü'®¿øÕ\ÌÿçÌÿðž_äêçÿÐÇÿ‡Šü°?á2ø�ÿ@‹¿ü'®¿øÕ\ÌÿçÌÿðž_äêçÿÐÇÿ‡Šü°ì|âꚤ¶úö—$ÕäûLÚtúyŠetª4Š«1—sˆà/˜U?f �«Uƽ'|­ó:r§gud›²w×MúôwùÎ&Ê8g�§[*ÇB®-׌=�Bgÿ¬N;{dúûôü)ÿ_Õ…ýV ñž¿§§ÿž~´ÇöyÿdøØ~+þÆ>ð®£x÷^"ø'â_á½÷žÌ×/ ïOx:~~Qgm¡ë)ỸÄ~ueÊï“ø#ǾþÅãìV6”0¼A…¡šÓåIAblð¸èùÔž#ñu/×�õ²þŽðã3úÿ Ñ¡9sVËkTÁÎÿ²¿¶Ã¿ðÆ•EF?õ定ýIûX|jø™ð¿IÓ´¯…š&�{â fÎêî]_V˜M.—m ¢ø•èò¤VW×ìŤI/ï ´"0‡M¿iBÇñœC€±Ì)ñîc™`röáì#ƒ ÞµFß»˜c(ʦ/ Ch¿«a\Ÿ?<±XhBR~çÓã•U«Â,/e[ë’ÄÓ‡-ù°xjªlE[]¥[’å厼¤¢~xÛÄ^3ñOˆõ cÇÚ¦¹«øžwÛ}uâ®eÔ)fŽßeÖ ­´!ÊÛZB‘ZÛÄDvÐÇUèŸPáì>Q„‡ C,ŽJáÏ„yC¡<Dì¥V5pîP­Rm~ö´§:µ&›«9Nìþ6ΧœÔ̱/?xÿíHË—Ê5¡Š¦Öª§YFT¡ÿwMF4ã*qQ±ÊW¶yA@ðÇíkñš[†úeÆ5ƒXñ/–Çæ‘ðú>›.:Óþ&“ÄÁ•üÝ2U!¢ ÌŸO¼ö²¼>’ÄIrŸ§Û’ùû©ùIu> Ï`À}_óíSØöu õþ¼�óôô ?¯ëúì&Ï¿§¯× £úþ¬ç�8úóüÇ'éõ'=Àþ¿¯ëÈ 9Éx~< óÓõ=Njoùÿ]ïýÁ#fÇsžp}NqŒtN89õWþ¿ÏúùúÛú¿Ìú{öRý�>5~Ù¿o>üÓ4™nô}(ë^$ñ'‰µ ´Ÿ xcLiM½­Æ³©ZØjw‚]Fó–:n™¨ê7RùÓ%¨³³¿¸µùn*â죄00ÇfÕ+5Z§±Ãa°´ãW‰©¼Õs©JŸ-({õjU«NœW,y�IÓŒý\§&Æg8‰aðq�áz•jÉ•(ì¹ä£9^RÒ1Œ%'«·,e%úYÿúþÚ=¾#þÌÜ�ø­>'Ž™î>uç¯?Züçþ#¿ ÿг‰?ð“*ÿçÉôßêqÿA9oþÅóŸñ§í¥Ûâ?ìÍžzø×â�Ïþa¾9ä�›ŸÇ+þ#¿ ÿг‰?ð“+ÿçȨÏýeŸø;ÿÌcâOÛOŸø¹³/þŸ9Ï®> Žÿ_J_ñ¸Sþ…¼Iÿ„¹_ÿ>þ gô–àìWÿ1Š?àß?ÛLÍHý™zðá4ø¡ž˜ÿ¢9õNùüGnÿ¡oá&WÿÏ�ÿP3Ÿú Ëðv+ÿ˜ÆÿÄ>¶§ý�Ù˜ûüPÇ|ÿ͹úsGüGnÿ¡gÿá&WÿÏ€ÿP3Ÿú Ë?ðv+ÿ˜ÇÄ>Ÿ¶Ÿ?ñqÿfnqÿ3¯ÅÓéðoŸÇ8ã£þ#· ÿг‰?ð“+ÿçÇõ°¿Ô çþ‚rßüŠÿæ1üçûig?ð±¿fQÁéã_‰ýOýÑ®;�j?â;pŸý 8�ÿ 2¿þ|‡ú�œÿÐN[ÿƒ±_üÆñŸí§Ÿù)³0±ãO‰ù{üõ篩£þ#· ÿг‰?ð—+ÿçÀ¨ÏýåŸø;ÿÌaÿùþÚ|ÅÇý™¸Ç_üOê:ÿÍïë×±'<ñ¸Oþ…œIÿ„™_ÿ>?¯!ÿ¨9Ïýå¿ø;ÿÌaÿùþÚôQÿfoü-~'Œ~?ð¦¹ï郃ŽÔÄvá?úq'þeüøõ8ÿ œ·ÿb¿ùŒ½ÿý¹5[“wª|Výœµ+¢¨�s¨xûâµåÃGÂFf¸ø=$›CáAàsñË„)EB–SÄ4á{òÓÁe0�Þú,á-_‘Rà<êNòÅeÒ}å_'÷¼%Ê?ñŸí§œÿÂÇý™G?ô:|Oéÿ†ln£hèN_üGnÿ¡gá.WÿÏ‚?Ô ãþ‚rÏüŠÿæ0ÿˆ|ÿm?ú(ÿ³/où�~(€ ÿÉœþ¾¼ñ¸Oþ…œIÿ„™_ÿ>=Gþ gô–ÿàìWÿ1ŠàßOÛLãþ.?ìËÀ<ÿÂiñC'<Ñ#§O~qÍñ¸Oþ…œIÿ„™_ÿ>áÃý@Î?è',ÿÁدþcø‡ÓöÓÎOÄÙ—×ðšüPëžæ�ðó£þ#· ÿг‰?ð—+ÿçÀ¨Çýå¿ø;ÿÌc‡üëûiâã~ÌÄç9>5øŸœóƒÿ$oßúûSÿˆïÂô,âOü$Êÿùò/õ9ÿ œ³ÿb¿ùŒ¯wÿþ~Ú¶¶·øëöoÔf‚%ŠÆÓÆÿêíã]Ëml×ÿ ¬lRiŠì�®ï-­Ã°ón"@Î.;p“”bòþ"¦›IÎxLµÆ7ûRPÍç7»Q„¥m¢Þ‚—g6mb2ÙY7Ê«bnße|$cw¶­.ö?&¯>|YÒ¾9Aû8jž¼Ó~2ÝxÿFøcƒïç³´ž_ø‡W²Ñ´+Ôg¹�K6zµÞ§§½†¯öÁ¤ÝX^[êQ^¶Ÿ2]Õ)çÙU\’\EK ™D0ó)bá“QÂaéN®"nœbê©Ò�*Š¥Om�•'R.'ÈË/ÅöTœq’ÄC 2qMÖ«(œy›Q´å(òÏ›‘ÆJI¸»Ÿ¯ðÿÁ¾¶SE·Å/Ùz’4vŠ_|Z2ÂÅAò¤0üš"ñð¯åM,EÔ˜åt!›ò·ã× &×öWÉ'£XL¢ÏÍ_;NÏ¥ÒvÝ'¡õÿñs‡fñ™RÓgWuu­í�jéömz’ø7ÃöÆ#þJ¿ì¹ž?æpø¿ÛþèwÐç×�rÄ{á/úñ?þdÿüüø‡¹Çýe_ø;ÿÌÄ>¶?ýÙo·üÎÇÔcþw~üäÓÿˆùÂ_ô(âü$Éÿùø/ø‡™Çýe_ø;ÿÌÿø~ØçþjÇì·Óþ‡‹þÿõC½ýºQÿï„¿èSÅøI“ÿóð?âgô•àìoÿ;Çø7ËöÇÆÅÙl cþG‹àž1ÏüXßoËŽ‚�ø�œ%ÿBž(ÿÂLŸÿŸ�ÿó9ë�ʺÿËìoÿ0 ÿˆ{ÿl|çþ¿ì·Ÿû>/óŽëïÿë£þ#ç У‰ÿð“'ÿççü0Ä=Îè3)ÿÁØßþ`ø‡¿öÇÿ¢±û.gücñÿœwü:”¿â=ð—ý x£ÿ 2þ~üCÌãþƒ2Ÿü�ÿæâÛþŠ¿ì·ÿ…‡ÅÿÓþ,oùü)ÿÄ|á/úq?þdÿüüø‡™Ïýe_ø;ÿÌÿø~ØÿôUÿe¿ÇÆÏþðïåGüG¾ÿ¡Oá&OÿÏÀÿˆyœÐfSÿƒ±¿üÀ'üCáûcÿÑWý–ÿð°ø¿ÿÎ7óüñGüGÎÿ¡Oá&OÿÏÀÿˆyœÐfUÿƒ±¿üÀ=?àßÛ·ÅoÙpã ÿ„Ãâÿ_sÿ <~^üç¡�œ#×)â�–'ÿçàÄ<Î?è3*ÿÁØßþw’7üíûc·ðµÿeͽ‡ü&¿3ÿ;¯ùêI¡øùÂ_ô(âü$Éÿùøñ3�ú Êoÿ_±¿üÀ^ƒþ ýý°-¢"/Š¿³Úaåo|\)å�I€ryÈÉÎþ#ç ЧŠ?ð“'ÿçèÄ<ÎüÆe6ÿ¯Øßþ`!?ðo×íˆNOÅoÙ|“É'ÆI$÷?ñcú“×üŠŸø�œ%ÿBž'ÿÂLŸÿŸ�ÿó8ÿ Ì«ÿcù€?âŸÛþŠ·ì½ÔÌßñx/‚ÊŸüGÎÿ¡Oá&OÿÏÀÿˆyœÐfSÿƒ±¿üï&ƒþûc@ûÓâ·ì¼{2·Œ>/uî¬?áHr¡Ï<æšñ÷„¿èSÅøI“ÿóð‡™Ãÿ˜Ì§ÿcù€´Ÿð@/Úò9šDø©û1…x�JÂ]ñoåwÀ#à�Êg=yŒ?â>p�ý 8£ÿ 2~ÿö<'þ!ÞsÿA™OþÇwÿ°Ë>5ÿÁ¿kO�¼}ñjïÅ¿<_¥|<ðΫãé~ ñWަñ0ðÖƒi&¥âGK·ñGÃ_ hóÇ¢i÷ºÅä2ëv×rØØ\.�ö¢ml¥ô²xS9Í0M,{ƒ­˜bhàðõñ¸\½a¾³ˆš¥‡¥Qá3<]hûzÒ…IQ”#:‘u%Nš”ãÍ�à\ß„Äc'_/¯ 5)Ö©O[êû:qæ©(ªØJ4ß³‚”äœÓq‹QR•¢ÿ99äžüžyêHãëž¾â¿\>;äN�QL’8À=}¸“è=¸  ²Ìd9Á 3€:gÉ=3�È=H?ëúÓúd]ûÿž¿®:p:÷ AÉÀ1èäçüþ�ý ÿ_×ôÃúe´!žROàtõ>üvíÁ`4±<“œã“ŒœcÛŽ>œu‡ý_׿7<�¯§åé×=OO^”Âß Ïÿ«Ûž½úõéÓ½/ëúû…ý_Öâ�˜€:ôõ>œþ¿Î‡ý_×P×õ÷–1. ­ù(êsõ9îy -ÃôîE<®IãØv=OÝÇSœzsÁCÛñþ¿¯økÒJ–‘´0ŸÞ·úÙ¿ºG;“ÏQÇÝÆpIÈwí¿q[©�[w^�‡þÌsú8ü +�úþ´]n7#üœgó>¹ä~¹üÇúî.xüxê{óÉí€?¨¢áo/ëOë_Ì8=È¿®?>Ÿ‡CEÀOóëÁ=ý:íØö Ÿõýz_¹6àÏL¼Ž™úç$ôúb‹‹×þúÛõ ë€z~ŸäsÜc�cM�“û¿­¾ñ7®:z ßñéŽ{Ô×î ?¥ýZnX¶‚{Û˜,ìà–êîæXíímíãifžyœ$QE+<�#°¨‰ ›¯63…˰˜œ~?C�ÁЫ‰ÅâñUaC†ÃЄªV¯ZµGR¥Jœe9ÎrQŒSmÛS N'ƒÃ×ÅâëRÃapÔªWÄb+Î4¨Ð£J.ujÕ©6¡ p‚rœäÒI6Þ‡Eâï j^ Ôáѵ™´÷ÔŸO´Ô.m´û¯µ¶š÷žaK A„h�ê¤k$ÑFfˆE4Å4©*µ|ŸñæQâ.MˆÏøšÓÊ)æ¸ì¯ŒÌð?QŽo ¦§šequjN¾U^¥IQÃâ*ÇY×ÃâhÖÃQ©FQ>…8¯-ã,¶¶o”PÇÃ/†?€ÃâqØ_ªÇ0ŽÙ©cðu':¸ ³œ©Ò­QQ«í(Ö§R…)Ò”N\qÏ çëÔúÇñí_kséÿëÔý¥ñ‡üëö'øGãí'öbøëû\xûá�í;ðïEñn±ãWáç‡`ý˜<âOxSþí'Â׊o¾û‹|imâ_ x{áÖ’^ò{;)æñÿŒ5ŸøQ“V6Ó\èÖ˪hêÖjn,,n~…žq§pÝ ló0y}LÂøLð¸¬FcZЌ棗àèâqw¥ÍV—²öTfùjN,ùÌI™æs¯ ë +V®ªÒ§†…äÔoˆ¯:T}û7ÏÍ8«Æ,ö¿„ðMÿ�þ%ý±þþÈ¿üâ/„zÿŠçƒW×u©|1z¶~ŽGMOÆžÕ¾¾ñÕ…³G,6¿ð‹kººßÞE=�—Ú.­æ�o‡ÂEÒ¡N+<Á¤é`±t–â°%tåõª}œg>XI7Ý‚áŒÂ®u†É±´jàêUju%'JVçiW£/iì«Ål�“R’qWi£Â¿kOÙsâ'ì�ñ�Ä þ X-²¥ö»à­Kûoº¼þ'ð-§Šuÿh>(º·ð¦»ât;�dh3Ï&‰©ÏkªØ>丳� M'½Â\S—qvO‡ÍrúŽMÂ…<Íéá1X¨©ÑÂRÃã1Ø©ÒrpöÒÃ`0øšÔèÞ2J­HBpšƒ”âÒã˲ Û6…J¸«R¤ùgZU(Т¤—7"«ˆ«J�šn“’æ‹•“Mæü_ý‹j_€w? ´ÿ‹¼[àÝ[ã&»âO ü2Ðn²õ?øÇ]𦷣ø{YÒô¿hzާ®-ÑÕüA¡ÚéïO¶_EªØ^øqµk+ˆ®[LŸ�x[?ŽgS(ΰ˜ÚY5 6'3ÄGÚÒÃ`èbèVÄÑ«W^�*¾Ç^U¹*KêΕHbU)ÅÄ1¹m—Ë fµãgV–œ¹%VµJ3…)Â4©Îuç«MCš+ÚóÆT¹¢îz'Å_ø&Çí³ðWáÖ­ñ[â7À­[HðW‡aÓî*ÕüoªCÍ�Ï�ü+ák¾)ð}¼¶óE$Óø“FÓb±*j2ZÈÁ�•x•Á9ÖcK*˳ÚU±¸™TŽ0¸ü%l©IƤp8¬^†%$Ôc†¯QÎÍÓSZ�8¾Ï08iâñ8 Â…%Y®´è)$âëÑ£V¥j)§vêÓ‚�Ú³=âÏìG-÷…àŸzGìëáø×â÷í[ðgUñ–½áµÔ­.ÒÿÄö&¿ÓÚM'ík¦Øx{D³Ò,¤¼Ô®uMEtí>.u íBÚÖ)$O7(ãuOâ n#Åàð9G gT°T1.œâéájaiÔµUR¦"¼ëMBœiSu*JQ§ r›Iôâò.j<; ²�jøÌß:õ)s)sU�YFðæå�:q„y¦ç.X¤å)$|™â_ÙŸã_„|ñâ·á uðW¯‰VßüyâM/Åþ ñ™¡üGº³–ö $Þñ&¨uy MæêZjz43Ã%¬ú„wQ´+õ¸n'É1xÌ».¡Œ—×s\²YÆ WŽÃÕ¯–ÆjĵˆÃRöKšQµ:î•iFJQ¦âù�®WŽ£C‰�ì0˜¥‚ÄT…z#OÓ~Ë÷ugÏ¢~õ>h&œ\¯¡•û5|nÖü/ð{Æš_�n.ü3ñ÷â׿„Z¢k^�yÆ<Õ#ku+'o§$ÿ‚OÿÁB¢Ð|Sâ?f¯¬>¸Ö¡Õtsâ¿‹¯cðíäú~±¨øcÁ)â·ñgŒ´{{Ûv†ÓYðŽ�®iºÀu¸Ðîµ;Q,ñ|ÂñgÃ×_ ‡\K…rÆFŒ©Vú¾=a ñ0�J4ñXׄXLiBJR£Œ¯B­¹kœ¬Ÿ©þ¨q§V£ÊêÚ‹¨§k‡öÒT›ŒåJ‚­í«ÁIiRŒ*FkZršW??lôû»ÍJ×IŠ0—×w°éÑÁpËo¶îâu·HçiŠ,™ÂÈe(±ò_h Î¤!JU›ýÜ!*ŽQ÷¯Ç™¸¥w-5V»}�Pr’‚O™ÉE'§¼Ý¬îôùì~Ïøïþ ñûü+ø—­~Ê?lŸ|:ý©<;á+]kZñŸ�>èÞý—­‹à¶:ØCöKý�kK[Ÿx»âÇí àïŒþø{ñ⇌4ÿøÀ—è¼1à;‰ï>ÏáýRñlzýö³{áé4ÙÍ¥öƒaf5W¼µém 72óñçq‡ N8ÌSÃØÌ—˜å¹^¦'0Ì)f/�Œa͈ÃÓÂ<=:0Ä*±ç…z“öJönMÆ7Ãù>Kœ'B¶32£Ž¥†Äâ«F– ,2¥‡mÚ�IVU%9Såv•8®w%Íd›­ðöTýŽh?‰ŸÂ_ÿh‹€ÿeŸþО ×uχÿ¬þ)jŸ‚uý"ÏÄ:›á«_j>¸°mVŠïI¹›Ä6W:Š5µÉ´€y¦³þ,ã.Ë2‹ÊxvyöÅ8^ÃС˜fÊéÒÆáëOˆ©‰–ž*5=½'±Žq�7Íy{¡—å9.cŠÌ^e¿/Êjæ5'S †Ž.S¡R ¥8ÒU¥IÅÂwƒubå-*Ôä>/þÈÿ/¿f sö´ý”~0|Cñß�<ñ'@øeñ?Á?¾iñ¿†oüS§›¿ø‹L¿ð׊|Máí{G¿»)¦Ïi –×ö3È“³\E戻2~/ÏaÅ8KŠò|»�Ç希Ï+Çdù…lvO S“‡©O…Ãb0õ©ÂõTÚ”'ãh»_nO—Ë*©›åÌM|>O Š¡�ÃS¡^”«FôêFTªÕ§R~ãŠjQm=UíògÀ¯ÙããGí/ã7øð;À:§�¼So¥Þk·ö¶WZ^•¦èº��o5¯ø“ÄWúG†¼9£ÀòÁjzY™àµ5ÅÄQ?Öç¼E’ðÎ fæ>– *°¡NS�jµ+W©~J8l6�lN&´’”•,=“匥ʣ×�€ËqÙ¥«`0óÄUP•I(ÊŒ)Å.iÔ©VP¥J ÙsÕœcv•ùšG]ñûö>ý£ÿf-gº/ÆŸ†¯†$ñÜãÀÚ¦™©øƾñ”bh h¼1â¯jÞ#ðæ±~�shÓéš›ë‰}`×–-õ¯›ÉÃücÃ|OG[%Í)b–\¸êUib0X¬³•ñXLu6&�7Ë%²¤¨Í§%IrJÛf.g•NŒ1ØIÒx…z„©W¥_T­Jµ Ô¥9j›„gÏ(¹Es+û�à—¿·�ÿ†Ú‡Å~Îþ&Ó|%£hãÄZý¼xoÃÆvÚ߉~hÞ%Ô> øM··Žyu�[ÃG†Öâ}`ið"I'�‚ñG€óÊžS„â,-L]jχ”¨c¨àñ8ŽnUC ™VÃS˱e'Ó�Tý´§GÚJév×á^ Ãae‹­–Õ�(AU¨•J­J�¯í*á¡VXšpJîNt£È”¹ùV¯’ø%ÿúý¯ÿhŸhŸ¾ü¼ñG€5í[[Ðíº¾ Õô–¶Ðõ�¯§øŽ}6{�:ê ©/¡6㢇ð¦'‡«ñU æ…l‡ ÒÄã©RÄÍáæçJŸ³¯…��£UJ½j50ѫԅIES—1œòÚ–cO(©‚© ­Ý*�(ûEiËž�gSØN´çiÆ£ƒq”Tœ“Gmñ#þ µûnü$øaª|aøƒð Ä:��Sæwºz«¤~Ê´Ž»ñÊ÷öiÒ¾ øæïã®›}qc¨ü7]%£×4浂;©µ BYž-6ËAK)­¯×Ä·WÑxz]6êÓQ‡S’ÊòÚy} ÜYÃt2(q-\ç Ф!R–eíS¡SžN1§ME:“¯í#*o oªBtÝ%8J+žFgSò¸`kË0Œ¥a¹-8r¤Ü¤ÛQ�;5/jä©òÊ2Råi¿Lø§ÿóý°~ êß´¯ˆ_æÓÅ�i?|®iž3øyâŸë~:×o“OÒ|/qã x³YðŽ�«ÝÝ3…¶ñ&·£”·¶¾¾•’ÂÆîæ7*ñƒóªY�\»8�_ìœlÇ0¡W˜áq”04!í*â£�Åa(ã1c¯,5 ·”á�J�‹êÅðæs‚žœ‡×+à ‡©øj´*W©.XRxŠU§FœÛÒÕg ¥¤c&¾Þø­ÿ¶Öe¿Û[à¿Ã¯xÅ¿´‡À?x¿ÂžÒ,¼;ã‡>ñÏÄÍ_RðYñˆ<)§Z¯� ½ðËi:‚ÞÇ«­]xgNÖ,´ñž¿e&¥k~>)ñN�ðVu™a3 ' çù~ˆ«#9Pöµ(Å}aJ—$¹­9ºPœchÔ‹”d|/àØßã¯í3ñ{âÿ…?fŸ‚¾%¾Ñ¼âß.©§ë^%ðÍž›ðÓAÿ„ƒU´Ñt_üEñ±£xBM^ÊÎÆ{C(Ö>Ñ®¾“ª_év÷vöÓ¼_u˜q–EÃ9FO‹âlï N¶? ‡tªQÂâ§S3Ä}Z”ë×ÁeØz5±ŠŒç8ÊÞÇ–‚­JeJ)ø|—šc1´²¼ YCZ§4gV’†Ÿ´š§N¾&¬áC�(µ~{Ôp” šLÁñ×ìIûT|3øÑàÙóÇ_µÏ|Zø™{¦Xü>ðåæ©á‰4ÿ\j÷ÇMÓχ|ei®Üx#U¶šü}•ïm|G%�¬¬‹usôݾ�øW3ÉqÜC€Î(brŒ²*f˜RÅ*˜(ѧíj}g:ÇR”iûêÃ)É_–2³J1m…ÇPËq:”ñ˜©B8jR�.Zîrå�²®ª:N^ï4jò§ñ5sÓümÿ¿ý¼>ü<ñ/ÅþÏ>"Òü'àÛ;ÝOÅ‹ˆü«x§Ãº>Ÿ,±^kÚ·€t_j>;³Ð Ž ¯¤×ßÙQèñ>¼÷K¢4Wòyx81Ìp¹^ˆpÕqxÙ–øl}.&µDœ(QÇ×ÂSÀOÜ£MPXŸjë5ACÛ§MuWá\ÿ †«Š­–Ô…”ëZ®u©Ó‹iÔž�ib4““›¥ÉȽ£’…¤r¿àŸßµ×í1àé~ |øCwâOlOáÛjÞ,ð�ìMF5ñPÂâV“m8ËésE©Fð÷ŒrþÎ3JXÁ`ÝZî”jN¶µ»§Gëi{y+YªJz§f¬|³âß xŸÀ>(ñ‚|i êžñw…u{ýÄ~Öìæ°Õô]gL¸{Ký;P²�Vk{›[˜¤ŠXÙ~ðK) ~« ŒÂãð¸|n ½,VFž# ˆ¡5R•j5b§N­9ŵ(Ê-4ÓëÑíäV£WV¥ ôçJµ)Ê�ZU"ã8TƒjQ”^ªI¯»äs¹Çè?Ï�là×Gõýz™Ûþ‡—~¹ýG¿¿œš.?ëúü?­C?ŽyŸŽý_�Aÿ_×õóÃóù¾=8çÓútã4\Vòíýoýw=¸õùü¹íŸOSŠ?¯ëú°uþ¿àÿ]ÏמÜÇñ÷ç®sܸÿ¯ëúV~ƒöà~?��×õý~�úëÐ\ãž}?¿×Üx ^_—õÛü„éùpyý:?¨ç­ë ™>¿Ÿ¯òíÜgò.×õùÿÁ>Óø?ûgxßáwÀ�‹ËÞ_ZxÏÁš·…|©Ç2‰|%mâûÈ,|q¦Îí*JÚ>¯á{Ý|Ø¥¾ùlu»�DOi¨\IgùFáVQœqçqÅK‰Ëñk�Pq|™¤°˜y<«¢â±˜\e<,kJv�|å˜xF·Ýåœs�Àð®mÂõ}¥jªJm[®l¶¬ž6‹nI¼=j­*i^T«ËDáVNŸÅÙ÷÷ééíÀÏëúWêçÂ_Öÿäíרztû“œçóοõý_pÿ¯ëú¶á“Çà;8Ûg<õ·¿õóÔOúþ¿Èwaï’3ëƒ�מs�LgÓ _×õÿì3ÛŒó�ô vÏlU'ývÿ€-?¯/ëÈ~§sÈç¾}GÔýhü¿_ëðëúþ¾C�à~çžOÿ_¾z‘Miý_ÖÂô0qרŸåíéL?Šñðÿ‰5·?ó‡õµ½þ]?úÕùWŒòLàìy†ÿÔ ÌûŽÿ‘Î'þÅ•¿õ+y7Ÿ¯W�¼­|Dñ§„¼á¸à—Ä4ñ&‰ám.æû5Ÿöž½¨Ûi–O{tUÅ­”sܤ——lŒ–¶Ë,î6FÕ5'TçRwå§NVÕÚ)·eÕÙhº½•Ú]ÏêWþ àOØëâŸÄþÏú¿Â‹ßnüá[O‰:WÃøwÀ¾ ø[âÏ iZN‰}áŸ�Ÿ´|OÑ|Oñ£Æï5ýXøyá�ø_Ä ~ x{ÆžÒô¸­-/u߈z¯ÈgU1ÔiÃô){IºR­ T©Zr’žŒ¡FP¡NŠŒ£Vpœjל$åv£J;ÓQmÆÍÛ[h“ózêßNŠÿ3õ{á'ÅOØ+öÖø“ñ‡öOÓÿ` �dzü•¿�t?ˆß ÿgÛø\Ò¯ït½>ËÃþ!ð/Äßø¦ÚêïZÒ#²Ó|]ðÊËUÓ4ás¥jRk¶vöW=j9Ž• cÌ”©âZör¥[SÚE¤Û”*QŒQ•Ü*´Ýšåm4hœ$Üy5[ÝE[îŠ?Ž?Œvþ!øý üañ—Œ~j>ø³ðsÅþ'·›SÔ/®õŸx³Âú³a§ø§á—ÄíT�ë¾/ø³ð~ÏTÓµ�/ÇÞ ·_ø¿ÀzG�“Æz¾µá-¯ÛÐqÃJ„)ÕU(ׄ’QŒ'(· Ôcvk¸¸ºQ÷!QÓöj*r¿3Öí«4þÿ'Ý®ýUî~W¤@PúÖ×ågpP@#ûEø'Ç¿>øÃ ›®(h~"—ÄŸe¾´7nÕÌÌf¶°70KmkåZ\³ÞCÞÆ¿d³&$Óµ�iÆQ½ßÊ÷ùŸ|ÔVsŽœväpG\õ<ôút •?k¿†ÿþ)ü"ºð¿Â� Ä_Ûš^¡{Õ&Ñ¿á Ðía¾K­µ(yµÝϧê_¼’.˜-fuŽvÝQi=HšmY=o÷ù‘7_±/í�»³6ý”¨:€ê!úñêr:[”¤eìç~¿zÿ>Ç;yû~ØkÁ›‘Ÿù©ž‡·ú=Ïÿ^¥Ê?Ò)Ó©ý3¤ø5û%þÔžøïð?Ä>$��AøÁðÓXÖGü'°ÞçIÓ|k¢ÞjX´ûs¡ö;{€mÂ9ŸýXVߊ¼¢èÖ·üû©ÓûŒºPŸ´¦Ûÿ—�¾¿ÞGôÕ_<{æÅø' ÇÄ‹þ0ø½¤|yÖüªø«X¹Õ¢·Ñüíw¤}ªÕ,涃Zµñ¦—s*É ºI"ÛÛy‘Êñ4eIÝð¸þ xÌǘÓͪágˆ©*Š4ðו>h¨¸ª‹M»­´n�¬Vp—Òn5Á¹/bü?Àç˜\£K*ØÌéF–3ÙU•hUž ¦GЧµ(ÅÔ«Ë(©)^Öë>ÿÁ=<+ð÷KK{ˆºíÖ·¥%¶¹á_YèÐiWzÄÛ]Cí¶ÿï þÔ¿�ÄY[Ag¡ižÔŸûÇA—Ä›SñF««?F ƒðø:j+VUi¨ÕÃÖ�%NT±ÑŸ4q’^Òj³ŒTiB„ÿu N²ÖuêT~7}$3~$ÅÊ­NÀRÀâåW›åµ±µ1tqü+W ì*ðÝŸTÃÏ.�zµ+æ¬× ¾½ˆÌ#—M¸arœ?cøÒÖìøcJ·Õ†©¬ßÅ5¢ßÜøZÙôÈîoÒU¸»þÏš]e­,f˜3Ãk%ÍëÛ3Ž�©y~‡<58ÔUjÍJ<ï ½Ÿ4”]åÈý¯,Ú-ÉÅ´¹ß_Çø^µ(ç8Ú¸)eù~tk¼=<î¢ÅºTe^›§Eb`° ®&²�XÓ¡±ŒåõxÝ(y'öu¯ýþ ÿߨÿùO^G³�üøÌ>õÿÊOÐþ¹_þ†œ#ÿ‚çÿÏh4«I§†¢|BA,±Æ[̈íáKa´¤S´á�²ŽEF”’ö9‚»J÷Z]ïü%ù¯S:¸üE:U*,Ï„$éÂsQ䨹œbÚ�Ö>M]«i=t‹z™ÿ £Gÿ Ïˆ?ð.×ÿ�ëÒþÊ£ÿ?±øùâ?×ìÇþ…¹Gþ×ÿæ�ÿ…Q£ÿÐgÄøkÿÈteQÿŸØ�ü?ü€¯Ù�ý r�ü'¯ÿÍ'CáÏXøjîk»]CUºiíÍ»E{q�2G'˜#г*˜ö£±;Qä|ù®Œ> iÊq©VNQåjrN;§{(­tÑôM÷<Œç‰±YÖ–¾B4«*Ñ©†£8UmBpäs�Z–¦Ôï(¤¹¥6ýÛ•v6P@þM¶¼F¹8$uË} ßÜc®ký@¥ð§ÞÇò´÷=?/ëï5œzÿxg“Œú…öÎNO\r;cý~?å¯cúÿ^�?à—£lü äã·¯=p0sŽ21[¯ëC6´_ÖŸ×rpÃc¢·@0FsÇ ž˜ç8Ò­mýÀþ¿­züµžÙÈãzt_\œýïN´Óþ¿¯ëÌ_ð?¯Óô`xÓ±œw¿Ÿ¯òíÜgò.×õùÿÁc ñúóõ£úù‡}ïýyŠ9àrNNÿN^¾Ô‡³¾QóJÀ{…§¯<篧=(Oëüˆ •È$ýãþ×¶{ïïÍþ¿¯éþõùžD¶VŠ3™bYxÈþò©<�ЩÏ|Ñýz ø{_×™˜Ï“íùôõÎ?ÏzWõÓúþ˜Üã?ÓŽ�ÿ¯§NÂ�tþ¿¯/øpÏ_ üpq߯øvÈ ×ùyêý?:ÿ�ù4 m¿¯À?Äã××�åŒÿ3@]?¯øk'üû ŸOþ±Ï# =?á¿­?®äŒ~QÓ¨<cü�lóô õýy‘ƒŸþ¹ëõëÓÓÛß’âþ¿¯ëð=�Â^ðÇ�ü0t]ÿe|MÒÍåÜ1]Þ¹°ñ¥‰wœZÚ‰ßȰÔì ÄQCŽ9Ò3=Á•ež}7ðN8ã®1ðÃŒWñ Y׃ÙÒÀ`k×Àåôã™x{™*tðÏŒxjYÍ2lÏå^½zò­W R²Ãa•ÑÃa³oÉ8«Šx“�x‘fùų?35„ÂÕ«…ÂCë¼�P…¬â]{|v[Ž­zµ*Õu'Fu œéÑ¡˜uÓ¾i½m5?‹š¥Ÿê®ì¼ew9ûðÏ®ÜDüpÉ79²?ñ6øÿøVúHæßó“x“c¿éö 1ñ71ÁVÿ¸uðÜ3†¯Oûµ+T‡LÁ·�Y‡üÅe¾e¸¯úy…ÆqÆ3 SþÜ«G#¡VÝ�IǦ1Â_€\\\ÞÜÏ{}<·7wRÉqqspí,óÏ+$šY\–y$v,Îı$’kú� „ÂeØL6/ÃPÁàpt)ap˜L-(PÃá°Ô ©Ñ¡B�8ÆéR„cB F1I%c÷Œ6ƒÃÐÂa(RÃapÔ©ÐÃáèB4¨Ð£J*éR§£ p‚Q„b”RVIX¬ìOCòÿ_~�‡NýOj蹿õåßú¿sú±øIð³ö©ñmÿÁ?þÒ:Oì×ûvÿÁ;n¾h³ÜþÕ~;Óü¦ê_>¾�sqªG¤|\“]Ñ>'x3Åþ ¸Xí/"Ö®õ}bGÙ+aç\O¦)æù¯ á)çxî­Ä¼ â$s Ñ� `*fiç¢ÄF4�l¡aëå˜Ü67œQ¢—ï]9Ú1«úÖ ›V–™Ã+Ïømá å›â#‡„°XOfÜ”1žÒº¨;FJ£œßÁÍ·!ý–¬~ ü]ý…þ0~Î?~Xþ×§€lŸü@Ÿàe×Ç| ñ玾^iðèŸ ¾.ÀÚèW"Ñôû-?IÕ'ˆð¼oŒXº.�Öq8œV¹ÂJ®®*·³« JÑ��“´´Õ-Ј?³ÅïÛ�öÿ‚|k߲扦|S“à‡ƒþ(ü%øÍ¢Øø§Âº.³ðÇÄ—¾=þÜѯÿ‚±øk@_è%ß…ÿà”º>�¿,µ®¼-¤\hž ¶²5´ÕÆØn4 m¿· ÔFØ¥Ó¢K‘…züÏZ8Ï ñ8�©b+Ãâ½jÏ.�7UXׯJR�eEE/a*{ª’qÜúŠ0tx¾�?oN›¥ÂP‡Öc+Òƒ§AGÛ©ézqiTS랇Á?²'ìËñ÷ö&‡öÃý ?l­7Á_¼Iû8ü]øys{ªüAðç‹t¯ÚoÇ¿í%ƒÁºG„bÒõíU¼q&±pºž¹k¯]@÷1EvîÊ‘^ëséÿ}ÅüM�q³àþàøÔÆç¸n#Ê3–_‰ÂUáŒ_%,ml[«‡¥õF>Ê„°ð’‹pI]„j|þM•æγ密®YŒÃ9KJ´s\F%5FT*OÛ¹¾jŠ«W\Û{Õ~ÿ‚;ÊJ?e_øJü[ÿªÏÆß§§âs_sãü›^*ÿ°L'þ¬ðGƒÁòSå?õö·þ¢×þ¿¦~™þÌ?²ÿíCû?ÿÁA¼]ûq|qñ¯†´ŸÙBñÆxÿö—¼ø§àýwÁ?üâ�/Űhú7‡£´×ïµoÞx¢ù´”µð´ºJ]h·Úd¯ki¯iú&�uùŸñG ñ‡¸NÈðXšÜO_“`²þ†WŒ¡ŽÉñøZ¸IV­ˆsÃÂŽX*¼Ø¥Uƽ:²’”ðõ+Ô‡ÔeYVk—qlû^”2ªu1µñ£ÅQ� n´k(Bš�IN´ªË’Ô\/ E'R0‹ño|)ñïíáÿèý˜|ûéöž »øñ?ãäß?g=_ÒtZê_ü}w¯ü-ø‡¨è𦭦Øx—OÓ<$÷Z5޳æÜ"MoPÑtY%·°ÖaÓ}¬6k€à?xŸÆÕ'‡Ž–dÈx޽ ¸Œ,©e¹|0ù¦]N½*U*aªUŨÖ�GÛ*ëÖJU(ʯ L&#?ᬪ†GQåø¬Áæm:�§UKˆu0˜™Sœã±…ÓŒîùIS…ÔgÉ÷§«éß³‰à�'ö§ñŸ†µ´øjk_xÓÄçÄz?‰<7àïÍeà_x3JÔ¼Qasq¡ù¼Ká� kš¬7óØh7^ ¾šKùbÓ^龕œO†ñ÷ýUÁbh<ÏýRÆà°¿V­†Äã0êxìv6­,-Hƽóœ5f£sòïÅß±üà¡ûVüoñ×Å[?�Ô¼1ã·ñ_Æ}_â©MöŸÓ¼e¬ý¾×À¾ ÿ„Jã^×ü«üWY¿µôËcJÓôáÉÿ .¡¡Í!�ÿQÂq¿‡üAO„ò<U<ûO€XL–ŽUzÜ1WGÙË�X¸ÐÃåôr¦½�Z”jÔ©{}Z�t®¾R¶EÄYt³|}|dp%Kêãg‹´3Xן2¡Cغ•1ÅüpŒáÛJ²¦ô?Tþø·A¿ý�eÙÏÀ+Ó> ~Ø_´Oì?uàÿÙÿãV²Ë•í¥¯Ä½NûÅ,µ×YÀ:ßÄØ!†ËHñE”Muu¨¥œ³C¯éž‚ûòÌˈ¥Æ|YÄyŽ®uÁÜ9ÇÆqIE^p”òÊTð™äè&–aC+”¥:ØYÉF4Üå8¼=\T©ýfµ9d¹F[‡­u™d.†]Žž‘’X©J¶T×êõ1I(¬Uܬ“U#IKósöuýžþ*|Rý…?loØ�Ã>û?í_àOÚKáÇÅß�ž#¿Ó¼3ã}_ÂþÐn¼-âðí®¹wci«\è·oöËï*ì[.�.ŸqÔ§YÑÒÿôŽ$â «*ã¾ã|N'Ÿ„±ü5˜åtóÜ5:˜œ V"¼qXuˆ�Ô�(Ö‡¹Ošìk:1–eؼ^A�dT©òæø|Ï ‹–¬£K:TéÊ�Ofª8Æn›÷¥gÊ£ÊÓ|ðæú÷à¯�ÿgï�ßðFŸ†_¢Òtÿi?ðP}ZïÅ>ÒµýIJxOPÕ>,øòëZ—‡u WHM~ÛN’ÆëTÓmïçŸI–ôiº‚Á©ZÝÛCó°Î° |<œé¿|wñÓâ'Šu &¯n–?£Ï|.ý¤¼câÏ xSöÞÒÿeïÛGþ ùÿ Þ-BÛ³ÅÀZ&½á‡É໋­*ÿ¿l5­âU—‰ôÏËk¡ÝYxŽÓ\ñ.³,×7�}�¬Ú8cóNÁá1X¾«Åâö“§Âý~½ f`ñ±�Zx¬ž¥ùdðµpªuáS:j*1‚„¥B¦að¹�jÔhç±Ê³¾ú¯3Ïêý^(ὃp•lg TjÆ«TÜj*•fÛ“’OÚ/“e_�Ú/ìÁÿõøMñ4ÿ„—á,ßðT¯ü?ø‹£ë6ŒÐxÏàgŽfÉ<+ã=?YÓRçËqáKçÕà³0l]jÂÃt,°˜ÏÖqVA[‰üBͲöþ­›GÂÜa—V£;Kžàx‘b°U(Ôæ÷TqtÕOšî�J–’nç‘”æ4ò¾ÁâWïpoŠñ|L&®«à1c£^3�µ½s¨ÛãŒzh}Ãû.øgÁ?±GíÁûþÁ_ üO£ø¬x÷âíûPü[ñž‰r·ï¯øWRø#ñÇÃÿ²ÿ„®µ0|ÝšGÂ茵íšm8ø‹Ä–ZÖ•5Õ¬ðêz�ÃñF+ÆÜÆ\{›aka>¡—pß å*ñökŠ¥�äxŽ(ÅÆ–×­šKêt+YTú¾t*¨J.•?w*¥C#ÏrNÂU…o¬bs<Û^›ÚRžO*¢å¿¹„^Þ¥=aíj)Á´Ôåøãÿf?ñ’ŸìÏ?hï^Þ°Àü+ö?ŸücY?ý–<9ÿ©5‹àŸùc?ìK™ÿ騚_ðHŸ/‚î?à ž.x_Åëá�ø'Ç=xøWƺdºÇƒüF4�{ÀW¿Ø¾(Ñà¼ÓæÕ4 KÉû&­§¥í©¼±šk>!&់¸o®ÇÃì"Äâ°Zñ#¡õ¼UG†ö´1ðöøZÒ…EKK›ž•G rMF\®Ö+ƒªûõг¥J·²á¼}Oc^t*òTÃËÙÕ‚”yéÊܳ�4oë­Ï”>:þÝ?>7ü,Ó~Yøà‡Àïƒv>-_ß|7ýŸ¾Aðïþ'ñ¼VéV¾'ñT“jšîµ­êztÍgmƪºpŽ%±–ãJÒ¦²ú¼‹�r¼�5«žO�ç™ÍL'ö}<ˈ3)f8Œ.ÔUe†Â%J…çR<òq¥í.ê%5µc?#Ÿb±øHàc‡Àà0Q­õ‰arì2ÃR«]G’5k^U*NJ•{ü¶å÷[Œ~¼ÿ‚{éw¿?c_ÛëöSøM¬èú_í3ñf?‚^'ð…ï5Ë ë|àêz�Ž~økXÔ/tûk�JÓOž{É|]ýƒ>'þÃCöÚø•¤ø[áu§ímãèe�WÆrø“ÄŸ á‡íZ`øëâo iQêÞð—‡ãÔµ;køÚMr?ëpÁ©Oi¡Ü}‹Pšß—7ÌrŽ<ÊøçýIËjâ³Iðä°Š©`– š9rÕþÂÃbêº8¼^!Ò¥:nÔ„¥N3¯zq–¸<>3‡ñyöî*°±Ì–!e3¯í*áR¼~¿VŒyèѦ¥5%ûÅViJÔß,šúïà‡ìµûO~ÎßðR/~ÜŸü[£h_²ö�â�‹<]ûIê_|+«øCâ¯Ã?è>)�š'‡¬íõ½GUñeÇ‹ Ô43Âpé2¶•%�´Z|qßéÞK��Ï8§†8‹Ã|dJÕø¢¾(˰|5K.ÅÑÆeYž …xªø‰Ê…:XHá%N¼êâåU*ªru§Sãìà2œ×-âjùöaZòªuq˜šÙœ±4gG…¯ ÞÆ�4ªJu�e*q�rË—Þ�4þ/ý óÄl.þ{ ¨¼pm,¥ÓxZ^õ7NƒŠNœ#¸E¨µ]^·�ÃUªT̸�ÚT”þ±’gr¬¥'%V^칪'u)]¶›Õ^ZûÍsø[ÃÞý«bØbßá'ì_£þÙÍð[ÀÚ·ÃoøsGý§$¦­g>¯©ø‹Áº&«¡Áw§ü@’?øKm¼m)»E#­õÅŠÜD÷ ŠÄâøS�øêY·VàÏí¬u,Ë/ÄÖáŒ>y‡Îòßc8Ñ¥†ÆW¥^P©—§õI`W'3KÙÆ£‹P÷©S£›dY Áä�Îþ£Bx\E8f•p508¥8¹Î­s¦¥Cýò®ù¬¾'®n£Zø·ÅÚWöÃýž­u��ÿiÏ~À>ý˜þꟾ6øƒÇÚ7‹|qá]k\ÖuŸ†Z�ÆÿøOÀ·¿|Má�SBð~¶×·7ö7�„à‚÷Å׺­­ìV´r‡”ð×q ¨ç¸þÁqþ'‰óJY†I‡ÀVÂ`qThQ£™ÓÈòü^:0Êð¸šUñ”!N¤iâå(a!Jpu5ž1c3Lç.SÀaóJü=K*ÂK Ž©ˆ…jô§Ru0²Çâ(áܱUiJ�ó9EÊŠR­)©rþ;üfý’¿lOÙOöTÔ øóãý;à×�|sñ:Ïû#öW×ü}=ïŒþ#kzM¥ˆ›â~—àO Ç®øfBŽ5°ºñ·­h×Áôø­V cÔ4«~Å“qoq_Ó–C—ÔÎqø²~ÛŠ°øÃ—Q«9òåuqø—C*ÕÛö‘ÃP£Z�ª9¹'Oì¾3“çYNQ%˜b#‚¡ˆÅ.L¦¦!ʶ&¤oŠŽ’©IS‡ÂêT© {©%iSçýŽøÉð«ÇwðYïÙö¦°Ò-õOÙû㉾ i? >'iZÞƒªh>,Ôt¯‚ð%ý¾�†§q©¯Ùÿ²ïXÏqa«¬@Ç;™7ã™6k€‡ƒ]ÂÕ+J—dølî®e•Õ¡ˆ¥_ N®tÝ9Tu)F—½íahƤ¤¯¬U�¾Ó„ÄK�ò|Ú0S˱µp1Ââ¡Rœ©Ö”0+™EFNzrÉÝÅ/>‡ÉPøÅ¿µìUñ÷ö\ýš'°Ö>>xþ ñ;ã'Äσþ!Ò<1⿉ÿ ï´ýKCÒ<[£G¬jšMŸŒ¬ü'®Ûéö×úšæçOŸM±ÔZ/‡cÕ¾±ã°œ'ƹq4jQÈ1Þe™6Y�K[…ÊóHT§^¶³£J¬ðSÅЕIB¿,cR5*SR”>°éy¶o‘æNVã<ÃÄX¬n+ªÆ•l^Q•8V¦§8F²£QEJ�Û‹„edýŸ?¹x#NÔþ Iÿtý“>6kú.±ûMü?ý¯çñÖ¡àûé^-Öþü+ñ7ˆô¸´�‡¾*Ôô«Ûûm'R×u&´Öm¼?åâØÚèæÚF¶‚ÃOŽOR–v¼bâÜ“Z� f #ñ�®¯¬ø‹Å§UþÄðeî�ªß8ñ·„c™µÛ í u�sH6¶Vö¼oŽÊò.âvˆ3Î3 ¯õØgy ß…8ÆÁÎ�6Ù{ll*R¦¾£‹iP©©*4*óÎU6Ȩb±ù6[B¦]†ÎpXlV#Ø<>¦7ɪլ§:µ¹ý�Ë÷ôoí#Ëg:�åŠ�äwíá iÞý¯þ>øoIøÉ­~Ð~‹ã«�>×â߉5Äñ?ˆ|T¶ú~žŽš÷ˆâ’HuígÃ’yžÕ5{.×P¿Ðç»¶¶µ‚híbýo€ñ1|�bkdÔx~¥l jK(ÃPxl>š¥F� 3IУ‰VÅÒ£+Êœ+Æ”äœßÇñ8ÑÎs PÆÔÌc CŠÆU©íjÖ´ciWUR¥7û©Î:IÓm(¦’ù#¾8§\þœ~>õõÇ�ý_uî¹ÿ=?ÈížsÚ€ý¯ë¯ÏPÏo|žr§¡ÿß×õòüCžßCŽþüŸÊ€þ¶þ¿¯1AçØþ™ôôÇo¥ý}âgóü½r=?ÏÖ‹‹ú^¿ð?­…É8ëøwâ3þ4¯õ×Oëæ!'§cøuíÏ'Ÿç@¶þ¶ óÎ~½úŸòhõåÿoø!ž~¼{3éôú úŠI÷éŸ_n§Û§ÿ^€þ½Ïúô6çÑ'‹AÓüC«qay{w¦]yjá´íNÙVâ;[“Êÿ¦XK圠…ŸË½†0Ïaqƒ¥þD©§RTÚ´”T—÷¢ôºô•Óíî¿´¯‹‘éŸÓÔgƒÎÒ—õýW/úþ¿®‚ õàþÉätúõüA_ð?¥ú‹œtúý8Ç8?.¹â˜_×õ÷d!Ž™ê:ý{tê*—Oëîôëúþ�ìç=øÏ~Ùã�øQÀþ¿¯»a}:p?Éúÿõ½j„H:ôõÇsÜœ~c¿_ÄÓBð¯øãìÿcÛgþ‚Pþ?è—Ÿ‡ÿ¯¸éùWŒòLàì{†ÿÕ~f}LJÿò9Äÿز·þ¥`¿¯Äò*þo?_>€ý–e·>XOu„Þ$½Ö|¤ê@}›Nñ'޼5­x7ÂÚ•ÌŒ¶ƒOñ&»¥^Mzv‹àkÍñùbóc/õj­&ùTjI-Ü)Î3š]Û„d­×n¥Gu÷}úÓŸ‰üQáŸÙ»öÁÿ‚KÁB¾�쟃¿µÁO‡³?ƸíþÍck¡ëú?ƒü=ðÒ[°·†+;Ï ,ú 7ÖS]ÜMk}ðCT³?f�M…dù8Bx¬s–T÷«á+ÕÅá÷nQ”åVð×U?y§eu]=noðÊœÖÒJ/î¶¿×C©ñ'Ž5ÿÙÇþ Mð‡öÇšÞ×BøûzøÃâ7ìÆ×O»´{¿øW—…> ÙøƒXw»6ÞG‹þ$xKÀ´]\[ZÚjž ¹þÔ†+©�åùˆSŽ+"¯�ÖXŒº±z´ííTë¸ÇKû”§Rœ£vÔÕ›Z ¿-U.“n?vŸ‹IúeûvAðÛ¿|añjM:Ë\ý©¾1~ßµP�-E¶£kðOXøãïÙà¶³sndg_Äï|VøCã 2åâ…oµ/ÞN�q>™9]²ÿk£ÿRlçÿÿø(?´ÿêbðçýøÿïí×þ¢0ÿøÿw¨ÿÔ›9ÿÁ¿þ í?ú˜¼9ÿ~?ûûGµÿ¨Œ?þÿÝÃê?õ&Îðoÿ‚ƒûOþ¦/ß�þþÑíê#ÿ€ÿ÷pú�ýI³Ÿüÿà þÓÿ©‹ÃŸ÷ãÿ¿´{_úˆÃÿà?ýÜ>£ÿRlçÿÿø(?´ÿêbðçýøÿïí×þ¢0ÿøÿw¨ÿÔ›9ÿÁ¿þ í?ú˜¼9ÿ~?ûûGµÿ¨Œ?þÿÝÃê?õ&Îðoÿ‚‹÷w{¾Ë¬h—;1¿ìö2ͳvq»ËÖÛnpqœg*£)Îüµ¨ÊÛòÁ»zÚ³1­K‡åöùvgCšü¾Û |ÖµùyòÈÞ×W¶×F´"e�EÄ‘K/;žšÏ'nØžk†\.Ì­’  í«ÛÞi¾­'÷9Iþ,óê:nmÒ„áONXÔ©³Z+Þq¥F.îíZœlšZµwþNV¹Ø„î< §þFA ú޾§©'ýA¥ð¯—ôô_ç©ü§SwóüôÓîF”ddsÉ`ãtõç¶H=OÙÿ¯ÀÅÿZ~_woBè,G|¼àçŸ\÷È<~¥«dÿ?ŸÜCþ¿_Ëñ,ƒŒØ¼Ž~`G÷G|þu×õr?¯ø�zgó£×œcÆ8ÆqÅRþ¿¯¼??éøÏ_¨<û�ÄqϾ_oë ¿®¿×�Üý?ŸNݺ“Náÿ ý�gþœtïý}:v §õýyÞËû<|\Ô>üsøSñ‹M7 'ÃßxÄw–ö­²mOE´¾Š?èà—�)®h2êzDÃÌŒ4².ô'pðx£$¥Äœ;�dUym™åØœ-9ÏXÒÄNœž¾Ï\>%R¯½M;=�K(Ì'•æ˜ Æß옪U¥èçII*´úiV‹�7ªÒV?´_Ú—R°Öµk]ÔWºf­áfÔ´ëØI0ÝØ_ÏÕ�ÔD…&+‹yc–2@%dÅ–øêU0õçB´:ÔgR•Zrø¡RœÜ' yÆIÅù£û[#œ*açRœ”¡QÓœ$¶”%hÉy4ÓGäGí�ûQX~Ïþ m'A¹µºø¥â»I ðÖŸº9_A±•g‚_ê6Ì~Ïg,o“op»5=UBysÙXêb/Õ¼ðÆ¿g+�§V— eUa<ËiEc«E¤rŒ=DÓö•¡%<]Jo› …wæ§Z¾›å|Cãz\)—:Y¦yާ(àèÞ2xZRRŒ³ Ðw\”äœhBJÕ««rÎ�:Öþv5FÿWÔ/µ]RòçQÔõ;Ë�CQ¿¼šK‹ËëëÉžæòöêâVi'¹¹žI'ži]¤–IGf$šÿB°øzJ0˜Z4ðøl5X|>Œ#N� aThÒ§¡ téÆ0„"”c¨Å$¬#U­R½Z¸Šõ'Zµj“­Z­I9Ô«V¤œêT©9^Rœç')JNò“m¶Û4¼;âŸxJøj^Öµ ðmß-„ï�–]B ‚îÜ›k¨æ��ÞŒŠÚö9çN�UËRšÞÍ^Út{žë_3ì‡ÿµÔñùZÄm+í €ƒÄ:Iþ�¯ô‡t‚L’ZIôù­Â"â=:V96§ßï<šùVòÃÊßôî{Û²Õú)'ÝÊÇ%ûIüeÒ¼rº7†<#¨ ß[,ZÆ¥x‘ϼÔäI#´´1Ì‘KåéÖòI$Ë$aZêáF7Z#)^ÉzšåØ9Qç©UrÔw„V�–:6ôë'¶º%æÏ“³ï�ÿXê?ÓØõ'«ýtü®�øcðüÉ -ý_0?\�åÇÐvüûÑqVü«÷ž>�?ëž3ÛÓÛ’_ëO—ãýX^Ç üºc¦~¸í׌Òc_×õý~õ<àž¹Àã‰<õêpzÍHÚÓúõþ™]Ø2>QŸ¯¦<ãУœ™Qþ¾Ó?¦ßø7æÛÿÓ/ÙûÿCøÛþzŸê›ü}w— úgÿžJ~—áâ·ö¿ýÈîéý?×óÁúYóGí_ûQxöIøI«|PñÛû ãJðw„mn¡¶Õüiâ‹„f³Ñ¬U�[[D‹%ö³ª43Ç¥i6÷7BÞòïìš}çÉq§eœ’WÎ3í'c�ÀÂq…|~2Iºt)¶Ÿ$N¦"³Œ•1œùjO’•OØ<ð_ŠZïʳŒÓ#ÅÔcñYv.›\µð•§JM)'ÉQEòÕ¤Ú\ÔªÆtçkJ h|Çðo qÖO_ ãÊx“'Ä_Ÿ›`èâéFn‚¯‡u"êaqPŒä©b𳣉¢Û•*°–§õ ÿ÷ÿ‚‚[~Ó6Cá—Äï°éôM9® »¶Xlôωeœl׺¶™cqA¦ø‚Âëz°û,°yšÆ�6 }§hßÚx±4§ý‹�{,?a¨ó¤iÐÎ(Ó�ê×£J*1£‹¥{†‡¹(sb0ê4•Z8oñ'ésôG¯à¦#ýwà�­f>æxÅB®³©ˆÇpf;56ŠœêUÆå8º�ÒË3Jß¿§W“.ÌgS<.32ýI¯Üásó¯ö§ÿ‚¨~ƱÿŒâøqñcâ¡{ñb´¹Õ|à__x·WðÕ�ôqÍiqâim V�-Ŭ±ÞÃ¥]jC\–ÂH/£ÒÚÒêÒiû0ø N&<ôà”5´§%&¿—«í{Zú_FK’E¯ÿÁNÿe_ ~É—?¶†µïüXø9câ]'Âñü9Ѭ›Æšg‰u]F×M:>­á�k—G¿Óå¼µº½µÕ®ì§—Kº³Õ´Èõ:þÂæèŽ,GÕ¤£N«‹’ço•Å&î¥;§gk'­Ó³L.­~‡Ý~ñ.—â­IÖ´É Å«hº6º–Wn5+=vÂ=GO]FÚÞ{…¶�íäÁQ,‘3Ç/“4È›Ï$¢âÚ}WèÚvv§£§Êqõœ§ÏØŽê?i*î-ð®~V7aú¨çn�¬û1޶fí´ñwjoÒ´µ�ž#v¶ÅÖ?´5°8A½•<Ò‚=ì«»$ ,í{iß †Ë¨éð‘5õœ&Ê15à–êͤEC nC¸ò#*ÊÁ娥H àŠ,û=vóG»´ˆÛ,—VñµãùvŠóF†êO,˲Ø3;ùJÒm‹qòÔ¾6‚h·á¸ ¼½³Ó­¥½Ô.íl,à§»¼ž+[hU™QZYçtŠ0ÎÊ€»€Y•G$ oD®û ,«+ª²°e`YH*ÊFC)ràŽE€?Ž¯Ú¡ˆÿ‚þø4gþ«ö#ôçþ$ÿ1ïÔãŽ8îkú›†_ühìzÿªk�?ôþz~I™ÿÉ{Cþƹ'þ‘€·õ¹ýŠ×òÉúÙÌxÓÄž×¼D°ý¡ô�:k¨áìòŒ$A¹\ ‘ÕœRÈC) �ϼVâì_xoÆœa—áèb³ ƒ Çc²ú®w…ž`©û,ÅFœ©Ôžž*¥*˜štªS«V„*S§VœåÇé8;"‡qNE�Õ«*sLƆµX[ž[s­ìIR„ãNRŒ£¸ÊQ’M?”l>0x£YG¹²ñ$Œ3™![[žÜ¶p� µÜƒ‚¹GÚJ;àšÿ³¥ÇÒUb«U¯âF? ëT�HÓÃdÜ3K ÝÔ0ð†KËpMEE·4¬ê76äÿ²ªx;À˜% 5xj“å�£RxÌÆ£«måí>¹ïIï-š½¹b¬‹ÿð²Zÿ^¾Œ^"qG‰þåý’¿à¨þø³àÿÚ“âGí}ðÛáÀ?áSh~4Óõ-^çE×´ëÛ½BÓBÕ5 ¹¦ÔÑ®õw¶¶û3é YJ.7ÇòjëÄ`%NXxQS©:Ô½£‹Jé«]%¦‹ÏQ'{ù3ëÏ ~ß±g‹üWà�~Óÿõ/išEî»}`¾9Ñ­áƒIÓ4Éõ­Zìêw—úK�IµºÔ5¸¢¾{�ÒÖêmR+E¶œÇÍ,&*1R• ª-¤Ÿ#Ý»-º½šô¸î»—>þØŸ³ïíáo‰W³wÇ?…~>ñ7�|3¬êWQ�Vê{/\Ãe|ºV·â]&­¼@þ]JÝ>Ûªi–²Áql’¥…Ô—@žµCÛÒ©ÎIlµÚê/nkt0º{3å¯Ù ö汇ö_ð?ÄÿÛ3öˆýžî|Kãߊž)ð…þ׿³Çßø�Àÿþ:|8ø•âÏ Gqq­è^ñž§{ •¬öö·¥ŠÆÂ=gE†êîÖÚMoE“PÒVââ~ÛæHªyªa«ÑŒgV”álå+ö}ž›;?!Ýw>ެF|Ûûf?c¯Úàžƒö]ý¡ ú„>1&¾ƒ„¿ä­áOû)ø{ÿW#ÍÎ?äO›ÿØ«2ÿÔ*çùÚK+H}pÔã©þCŽÄ×÷ñüïý_×âF>Çôϧ¦;}(ëï$ž2IéÇ~r1ί×4\_Òõ-(ÙŽìzãŽ>£?ç‹ýýûÁõÓÐBIç×è½¹äóü踶þ¶<óŸ¯~ŸçüšýyÃÛþgŸ¯ßÌú}>‚�~¢òprGN¼“Ž§Û§ÿ^€ßúþ¯¯õÐ{8„m20ç¾ÑŽ£Þý}¨_ë_ëúó­¿©ûÄòIõÿÙä õ _×õþd°B$;¤;by½Op çœsÇ÷¡kèªýáÿ¦WgÏ8铃ߨãÓ'Ö•ýGývCAôü{óÜg>øõÆx¤/Âÿ×õóL÷ä}G§×¿lŒg)€¹üOõ÷?N�GA@]ƒ>¸äãüþ^¤ñÀ?Cí@ç߯^Ý^z÷+ ‹£O…ÄáëA­ F´gJ½°“…JU!(Nq”Zv1Äaðøº°Øªq8lE:”q|E(V¡^�H¸T¥Z�E:uiÎ-ÂtçFQn.-;Í=ÍåÄ×w“Íwuq,“Ü\ÜÈóÏq4Œ^I¦šVye–F%�ÝÙÙÉ,wx\.…Ãàp8\> „£O…Âa(ÓÃápØz1P¥C‡£R¡F”#S¥N„"”c’A‡Ãað”(áp´(á°Øzp£C B”(СFœT)Ò£JœcN•:qJ0„"£¤’I$VgÉÀÆ9?Þéý=8Ç~+soêãzÃ?äwô8úsÆM¯ëúAý_ÖÄ¢âu…íÖy–ÞGI$�da ’'*ïv; #kbBàg3h¹)8Ç™&”šWIî“Ý'øŽîÖÖÏ[_OÏþt q‹=¼²C,D4rÆïˆÃ<Ç"a•¹ÆAtëMÆ2N2JQz5$š~Vz?ëÈ›6šÙì×§ügvfv,ìY™Ø–fc÷‹“–c’I<äžôh¬´VÒÝínÝ…ë«óþ¿3Ç×§\zÿ>ØþG ?®ä‘Ï4BA®‚hü™Dnè%‰™]¢“k ñ—Db�•,ªÄeA ¤ít��ÕÒvi=Uöv{®ã»W³jú;;]vü»ŸdþÃß´¯…e߈¿¼iâíÄ> ±ñ§ìûñá�iáÁ¦›»]wâ&…•¥êW§S¿±‰t›ciu‚Iïxû=¬ìH_�ãŽÅñN]–`°•ðøyฃ(ÍêKí9'C.¯*µiÃÙS©'V¢v§Ì£ üR‰ídY�«НZ�Jо]ŒÁÂ4ùnªbi¨BRæqJjò³nÛEÜøáî.$Ž$ši!·ßäBò»ÅœÛåòbmÉšà4žX]íó>HÍ}ŠŒS””R”­ÌÒIÊÊÊïweµï¦Ç‹wd›z_NŠú»t^vZ�nü:çבÈþ_‡ª„Mö™ü�j'—쾞müÇò<ýžPŸÊÏ—çy'™·xO”6Þ*mn~UÍn^k.n[ß–ö½¯ïZûù�[[[^ö¾—ïoOò ‰íßÌ·šX$(ñ™ ‘âm’�©Øë•e<0àƒCQ–’Š’ºvi5u³Öú®à›OF×£·åÓ¡É I<ñõÀç§ùöæ…ý|þFƒM0†$šY#€IäDò;ÃœÛæòcf1Ä%pO-W{ü͸€hQŒ[j+šVæ’Jò²²»ÝÙh·í°]´“nËeÑ_{.—ëmÙ?+wÏÓœqŒãÓùç=0Ö©ü¿¯ëñõøÿ_ðGÁ<°H²E+ÄéÊK ¼rFÀ}ät`ê@ÈÊ�}98¥¤“ŒÒ”^�4šù§æ4ÚwNÍuZ>Ú[cÔ~ü@Ó~üyø-ñ_]µÔ5Má·Å߇?µ‹=3È“UÔtßxËFñ&£gaöÉím›P»¶Ó¦†ÓíW6ð=̱ý¢x£.ëäçùuL×!⪧J®e”f9u•y•*u1˜:Øjs©ÉIS„ªFR匥ʟ,[²;2ìL0™†QJPÂã0Ø™Æ6r”hÖ…YFÍ.f£¥ÚWz´µ6iÏ‹šÇÚãÇÅïZjÚ7†¾,ü^ñ÷Ä]+DÕå€j:мO©ëzu¶­�ÅΞu+[[Øâ¹6óÝB“‰ ‰cPíÏÃML�‡²£:5±9NQ€Ëª×¢Ÿ³�L.• ’¤çÔösœ�4c.[9E=™¦28üË0ÆSŒéÒÆc1˜S�¹£ÕeR*j-Ç�)$ìÚ½õz òçÛ8ÏõÇ¿Lö÷�?Ì—íýŸì‚i¾Íç} Ûy�ä öyf(Ÿ/ÍòðžfÝåÌíâ§–<ÜÖ\ܼ¼Ö\Ü·½¯kÚúÚö¾»ŽîÜ·vÞ×Òöµí¶Úú~ç¿Ðõã�QØgŠ¡ Ÿ ëŽ™<þ#�©ïEÃúÓ`ÓñïÏqœûã×â�|¿ ÿ_×Í3ß‘õŸ^ý²1œt¦çñ?×Üý:uýv]‘•Ôíu`U”•eaÈea‚0àŒÇ 擳Ó}-f´×˰y­ú™$ÓKq+M<²Í3�ÒK3´’HN>g‘É.ØÉ$útÅ (¤¢”b¶I$—¢Z ¶Þ®þo¿õ`7´)nÓJÖñ»I #˜c‘ÆÒ"J+œ Î>f’x´nåd¤ÒNVI´¶Mïo+…Ý­weëoRçñ>ØwéŒÝj„.}úõíÐuç¯sÇúf€þ¿¯ò õDZÿõr:þ‡uÀðIíî®mYÚÖâ{v‘ d„É ^'1²–�Š©d$©*7 €*eÎÊqŒ’|ÉI)Y®©5£]ú�6¶mtz½WËÓúЯŸ§s댞lwëT"ÅÅÕÅܦk«‰î¦*–âY&�…û«¾Vf*½Ï�Û3Æ –ŒWh¥¯’r{¶ßvõòþ»Éúöé�¯¨éœö÷¡_׿KÓ[ʳA,�Ë ±3Ç$mê’! ­Î2¸ dRj2N2JQz5$š~M;¯½ i³³]of¿®ƒÙس1fbÌÎij37Þ,N[,Ç$’NrOz4I--µº%þ]…ë«óþ¿3Ç×§\zÿ>ØþG ?®ä°ÜÜ[ù¾DòEçÄÖòù2I�¸ó`“c2 o�²��¹N8™(ÊÜÑNÍI]'i-š¾ÍtkUÐwjöm_Ggk§ÓÓnä=³ø}=ù?§±<ö«‹¯õý^bçŸ~=úû`çŸëš_×õýjÓwá×>¼ŽGòü8íLÈã3Ïòç·cKúþ¿0þ¿¯ÏðN?Øœpiõ¿×õý|Ã?¯?¯ôõõý9?¯êß×@þ¾ éžÞ§ÿ¯Óß§_ÕŽ?ÞqŽƒ¯õÉ=)ÿ_×Ëúaý_×Þûcã?_SÓ‘Ï_BN(ù‡Ïúÿ‡œqï×ú�ùÍ þ¿¯óÙÆ®=úg°déwr–ÒÙGqp–—A=ŪË"ÛM=²Ì–óÍá’Û¥ÍÂÃ#¡xÖâuŒªÊá‹ùŠÊéÙ]&“Òé;]^Û;+ëge~…½GIÔ4¯±BÕí×Q°¶Ôôù7G,vWkº)íç‰Þ”ðN«!–Öî+‹;„ŠòÞhcZÿ_ð.”g~W~Vã%k8Ê;¦ž½š¾�4ÕÓFv~ƒÓ¦OówƒNÿ×Oé�ÿ—Ü(ôúŽO9¨úã×Àõý\\ž¿ÌñÆG@F3�AÅxç§==¹ç©ôÇCÏaGõÿ<¯ýwïþCÆO\sëúþg=9ÇR9¦ÚõþðÄ 9éùc ðp?A‘ׯïnâ±Åxôì{nßñ3‡ðÿE¼ã¡þdý{~WâûÿŒgÿcÜ7þ«ó3îXj:'Ão‡<&©­Kðóà�Ã�+Q¼ð­Æ­¨ø›Æž"¼½ø“ñCSÔ×VIsÍEBœR¥F*<ò©”¥ÃðÙ%Ñ/Çwåð…z­m~VwP@P@P@P@P@P@dnž¼ƒíߎ€õ9ïÅfN뎽§~{ç·×߀vðœc¯†=>¼=½·9 àrÇë×�}zç=ûñ–[Øålÿäoð‰ÿ©¯ÃÓ¬YçÛ�ü@gÜV5¿ƒWþ½ÏÿIaOã‡ø£ù£íªð�Hü—ñ—ü"ÿá¿Ç�Š ¼wØøoÃ>&ºÓü=â='JŽú[{D¶†t´Ö´ñ×3°y Cc½ÎQ.,ðê¿;Åñ}lm�Àâ- +Êjš›QQO–¤läõzJ>Ž?hþËá]Äþp§dÊXŒÏ4Êébs¿�©B+J­Jn¶º© T×,S� ÖZ9S­ª¤VðÏíÏñ'ƳÝêzœš7„¼PöºŸ­ø³L¶ž†ÚT~ Ó¼=wñÃR‹Ãö2´ž[½VïEÔ´Ÿ]A¤Åâ½"Åô¿Üi+ã[ ~*Çbo:pTèW壵éŬ5ZešMQƒ¾J¤©N�yFšÄSƒ§]ÓúÔ0óœø™³Âã1Æf¹R«˜×ÀeXº°©Äø¹e¸¬Ê—᧘â"£�JŽŽ? ‹Ê©UÆK(Æâ#‹ÊiãGˆÍÿG<ib<'£Á¬ëzŒïÖ1�b; K™µ;¤²‘%¼¼µ²:^š�x—,-�´s>--Ö䝨f§õZJµjŽÒ‚öª“©%œ¥ºp\ÚËÝåIü1¶‡ó‡×Ŭ÷S.˰‘U(â$ð51U¨C FXˆJhW¯n*Jƒp¤½²¯RTÕëUu=÷â_bð·ý ·þpÿóA^'&þ‚*ÿá4ù ýGëYïý 0øy«ÿ΀û…¿è`Õ¿ð›‡ÿš 90¿ôWÿ £ÿÍõ¬÷þ…ü<Õÿç@}‹Âßô0jßøMÃÿ͘_ú«ÿ„Ñÿæ€úÖ{ÿBŒþjÿó >Åáoú5oü&áÿ悎L/ýUÿÂhÿó@}k=ÿ¡Fÿ5ùÐoø{ÁÚ7‰®æ²Ó¼E|³Ann_í>XÐIJGæµ(ݺT¶܌•ÎÓŽŒ>Ž&nñ¼cÌù°é+]-Õg­Ú<Œãˆó,“OŒÉð®�ZÊ„}Žo)Ë�Âuã,²›åå§+µ{;'k£°ÿ…/ÿS/þQÿûë]Øßõÿ”û©ó¿ñ¿êKÿ™þðøRÿõ2ÿåÿ¾´cÔOþQÿî¡ÿ+þ¤¿ù‘ÿïÿ…/ÿS/þQÿûëGö7ýDÿåþêñ¿êKÿ™þðøRÿõ2ÿåÿ¾´cÔOþQÿî¡ÿ+þ¤¿ù‘ÿï©ð�äð¶¦ú™Õä¾sm%²D¶c@%dfiOÚîL lSáÉ%@®¬&\°µ]_læù\RPäZµ{ûò¾Ú-5Ô𸃌ežàc‚Yt0±UáZU%‰úÌŸ³Œ”TÕè*mó>i^MÆñI&ÙéUé“M¯ËŒŒ“ÁóŒŒÐäzŒ‚:§ô~òõõסü¯=ßô»þ¿y¬‡€xçòùôÎÞû¹ÏeÁì�¿¯ÔÁê‹iÛŽ£<ò$dg=ÌG<‘Ærvïÿ×õЇÿ ýtü ×qÓÔc�\’Üã§AÈÏ5ý_¯õÿ�êãý3�Ð�ž9çœB ã'KËúû¿¯ kþõùxì=:dãרL‘ÆOQNþ¿ tüDÓñïÏqœûã×â�|¿ ÿ_×Í3ß‘õŸ^ý²1œt¦çñ?×Üý:uýv?£o þÛž²ý�~üCñ•éÔüUðËÃÚ×Á6Ñè.¡â?ø6æü#§A;‰f+qà‹Ÿ j:Ƨ,24”ì—RÃ] ñ¯…Yžwã;!Ê©{ náÄU±ÞÍʆ]—cfÞa‰©ãÇ1Ž.†§mQЧÍJ2œ©ÿKð§à²�ãšã§íq8)<®Ž›–®3BŸû-7ÌÒxWF¥z®/ÙAT“R’Œgøñ+â/Š~+øÓ\ñߌu /õ½ríç|³ý–ÂÐ9û•¦ÄìâßMÓmöÚÙ[©%"MÎÒNòÈÿÙ9ÃÙ_ äØ�(ÃÇ‚ÀÒ�8ékˆªÒu±X‰Å/k‰ÄT½ZÕ\Ò“QQ„aÿ>g9¾;=̱9¦aUÕÄâª9=ù)BïÙУß%1´)ÂúE]·&äøP}¿ÏO~‡©É=}±î\òÿ­„Îí�Ç~˜ÁíÖ€>ýzöè:ó×¹ãŽ}3@_×ùzãØÿú¹CŽ:àø!úóןóëÁÇJúÔLý;Ÿ\cüð;c¿Z^‡ðÏùý>œñ“_ëúþ�_×õ°„ý{tÇ׿ÔtÎ{{�ý_˜áúqÔ~:N}8銖26l8èFqžxÆ:u9éÙi2Ÿõr«±ÁäôÎHã$äxÏl§Ðã2ÿ¯¼þ›ÿàÛó™ÿlŽ˜~σ#¿Ïñ´ú“Ôÿ“šþqñïâá?LûóÉOÒü=Vþ×ÿ¹ýÝ?¨*þy?I?•ø,ě/ÚÜJú7Á+ MFµWͼúæ«ac­xºíc‹™¤žÇF}Û˜·‡möY\7òŽº¹îw[JNTø~œiaàŸ»:ÕiS¯Ž’VøåxQëw…‚VRwú¢ÓAx ôçœK˜G áa²8®¥^_«dùýj�üa9ûŽ�,«8Ì¥’æÕ*Tú¾"Çæy„éÕ­ƒÃ(ü—û~Ížø¸ßþ1üyñ§àÿÙ›öxдÏ|UÕ´@ƒÄ¾'Ôu»©ì¼ðßÁæuòˆ\&{+�JÆöšðÁ|÷Ç;ËxG%£*²ÄâhÑ©iº1“©µ¥í+û:ŸWÂáð¸|N70ÄÆ�IáðXj²§Nu§F2ÿu¾šŸJܧè­á•N"k_‰³zxÈdt±4ý¾GõXb³«†Å£Þnà¥þðv¢t?‚?°—ìsᯅÖ3ùn‘ñá�ÏÄ¿jÚ\lQdñg�/µÝ>÷UÔ®a,Í,Ð]5™�[}¯PŠ6÷k‡?f—�ا–q|Ï2Ìêá],n#ƒÈ(eÒ©R NÃfÙ.s�ÅQ�3¦åŽÌ*ÏÛ…gùzãÚaôšân$ÄgTxÏ:Ãᧉu(aªñáåNŸ2iRÃä9ÆI”eüܪjŽY–a¨Ò›ÓÚ¸¹ÏôsàŽ¹û-þÚ? üQñ3á—Á/ü/ø£ðÇìñwáѵ= hÚ¤ÒçøëÀ÷òé0I.‰,°M§§4¾‹$Es Q.�¨ø‡þzÿkìäâ¿£fYˆñ{Â0âú<)JÆfÙNˆ3úYv#/§Z…<Ã˞i‰Yg‘ýfŽ'1ÀaªbcòOišeÐËñ9vc‚«þŒý~�|SãÿU¸§‰3úYõ)S£WÏ1ÕkS­R52øwñÇžÕo£ñWÂMsÄ2Õã³ð¾½o£ê3YéÚ®™©øbít[f·´Õá¶¶Òm"»ŸÂÒÙØýî&•lVð©Îœ)¨Î’\µb¯%uªjJý7ÓšïÍM&ï¥ßàyßí¥ñ;öEøÁÿ´ý¥¼wûüñÁï‡÷ßþØk~#Ô|¥xÃüGaâ×7Ç„ìôÝT}BÛIŠåb¾¸ºÓ49,ÛR´Ó^×íV—–zmá©â)ãèCZ5f©Ti)¹Êœ\v“iZý5w³}Sc·+²íÓÌÛñìÛà�اöëÿ‚Mø¯àn»ñ Kñ/í /´¿ŽZ®»ã¿ø’Oˆ®šOÃûmF÷ZM^òè“­/Œõ7¾Ó’OìX&³ÑîtÍ6ÂóO2¨×ž+ ˜Fªƒ�i(ÁG“Y´•—NEg¾®íÜV³�Žöý˜.¼y­ÿÁAj ø“â-÷ÆßÙ»ã‡í9wû9ü9Ñukü sñcUð7�í´ÝsZðõ擨ɭkš�Ρ£h¶FÚçMH¡²Ž;µÔ£–(­o_‘`ðòŒ*Ô¨{i´ùýš”n“º²Vmï¾–êÒøŸ[»ž·ß³f�û|*ý¤¾|mø“uÿYÕ¾;Íq¯G§øÃÅ·Ä+�m¼q¯ùbÿÃsA2ɦ]xj? _Úë^ÜøƒÄ÷¯¡Mw~³_èv–®ñ5(Δ?³Õ-/¨[‘m.üÜÉ­9b¯¦�Ζ¿Ú?QôÿÙ+áßí³ÿ‰ýµ|ûJYø˜Xiß>xÇ\ð·ƒ"ø�û"|Dñ�Ã_€³x÷\Máï…<Ã�Ûéú'†Ìòi–©ªk~>ñ צ8ÃÛ,–gK{ lã–ºêâ'OBŒ#N4ñŒë.EyÊ|ñ»–ú(Fß�î$•Ÿ•λö†ñ×�>9üDÿ‚th?µ¿à¯|Öa�‡^;ÓôïÚã/Ä‚ßü{ñ2M#]²ñg‰|_ñÀz.±­Eã©E¶’³Èf°–é Ò"“U±ÿ„‰ìõ™£Ò†5ÐR�U‹œ£JjÂN1Œ&Òäß½®ôvº¶¾Öô?a¿à…ÃÄvßþ6é6Ÿ¼1ñSà¾�ñvKOƒÐøVïã.³¥|:·“Mk¯|<°ñÆ?…ÿ ou�/E´ŸÂ·rxnËPÑÍÕþ¥¨Éö ÍVXfós[{ZMÓ•:®Ÿï9½’s×I¸Ó©Q&ý¢Z¤Tv}®~ã×–Qüs~ÕGþ7ÿàÁŸùºÏØ‹è?âMð¯¹PzpA5ýKÃOþ4~=Õ7ÆŸú=?%Ìÿä¼ÃÿØ×%ÿÒpÕÏìf¿–�Ö�2øËÿ$¿Æ¿ö“ÿGC_ˆ}$¿äÅx›ÿdÕýHâxKÿ'#„?ìoKÿMU?/-®®læ[‹Y¤·™>ì‘1VÇu8á”ãæFXpÀŠÿêR§ZaÁï+¯UÙ®�Y®ŒÿIjS§V.!Áï+¯_&º5ªèÏQÐüsÆËm\-´ä…[Ŷ�ð˜g01=_˜z³TWÍc2iÓæ©…½Hné?âG¿#ûk²Ò}“>w“Ω…½HjÝ'üHÿ�ýµåñô\Íž€¬¬¡Õ•‘€ee ©R20à‚9b¼6šm4ÓNÍ5fŸf·¹â4Ói¦švi«4û5ÜâußZiûí´à—·c*Òd›Xý¦R îT�‚ŽCJJc”U¯j˜‹Ñ¤ìÔmûÙ¯$þûÉ_´Zw=|SVµªW½[¨Û÷“^Iü ÷’¿hÙ¦yEíýæ£;\^ÎóÊxÏÊ‹œì�4ðˆª¹ç$×ÓÑ¡KNŒ#®‹vûɽdüÛlúJ4iP‚§J ]·o¼žò~m¶~†~ÍòKíì5¬èèëýœúÉŠÀÙKÄ_ú‘Dþ úCÿÉÈÅØ£*ÿÓS>Kÿ‚¼~Ñ‘þÍÿ°—Æ^ÃQû�>'iëð_À)_µÏ®|B‚ëOÖg²ýâKÞ�à˜|U®Z\²<ºm© Õ‡ö>]GÛâ馯oÚϵ¡ª¿“—*~Lü2NÈþq¼CðãöÁý�t/Øöˆø•û(Ø|ð—ì‘ã)¥aúý¹?dÏÙ·Â^;ÿ‚%h>ø1à i¿<}ð×Àÿ¡Ðt -!¾#xzó_ýŸ"½‡Æ’XGnþ$Ô/SÅÞ$ºÞªnµ«±«Ý-Íü©åªraqå ÑʬäéÂr§vß$­ZÜ·øRå�’²VØK”õßü+øsð#þ G¬øWàׂü7ðÞ0ý„þ&kšï…< £iÞðÍÆ£uàß­Ô�h:=µž—eÔþÐïî ³µ†)u?·:‰dvÎ'[,æ«)T”qPJSnR·4:½_ÄÖ½‡kI[±ùw�¦ø�þ qûø{Y¶šF½ÿñ†�ªÚ3:-Ö›ªG�õ³�IÕÊqn¬åQÆ´y\ää×½EÙ7­®Þžl{Iz™ý"׊Yó_íŸÿ&oû]Ù­þÐßú¨¤ž¿Ì’O>Ÿ_LqL×õ¡<0ùŸ;�±¨>§�•s�Ó‚zŒð <M$»€Us±F9㞣=ñ“ß®y/ý^¡ývEQ³ŽFqݺóì}Ï¿ë”ÿ¯ëúÐzˆB1·ó÷úñÇ<þT_×PöüÈÏ8ÏÞç9ç�¯j@'îúü¿˜ú~¼q×$Sþ¿¯ëñH^ãÙ#·Ô{ñßוåøÿW0œôë�“Ç©ëŽã�µ?ëúûúõýÊ6øóÏã\õ>ÿ\Òßúÿ?ϰ gŒùuíÔýpÛ�Gõý}ÀGžHúç'ð÷ãžœc׊.Š1ËÜÝxìyyæŸõç·õý\g'Oø¨ïúïÿ ßòÏ_N�®xÎéÏ'­×õ°"ƒó7ž=OqÉÏ>Ý(_;[y�8l‚{`mŽãŒÔg뎴_ë¯õ¨y e8nzn÷é’ÞŸýlóì×ȃ¦Aöî8îCׯSÈã¡ý_ð?Ÿž9ç·|zûúýA]¾àÉè>¼äÇóŽ{çÓ¡øÀì1zg‘œôöçñ=sߥ+€�yϯ¨üÿÃëÐæ˜[úþ¿®Á»ëÀ÷ô$sƒÿëë“îTp£'·�Ð ýE×çý}÷@Z@"®F{äzŽ£�ÄûSÛ×úØ’ ç§_¯ç߯äséKÏúü7õÔ|�Ãÿúú iïý_ט¿Í~csÆ;ôÏ=ý}»p1èŸô†80û­È=¸$r?ç “ýZ}ßÖ¿xX…Óo å[�}�õã�9éô¤ôkðéuã¦O#Ûלúu# óÞ‹ÿ]?¯ëP Ü{túÿ‘Ûõ<Š?È>ÿëæäqÆsÓçŸ|`{“×Ëòëúþ¿1AéÏ8îG<û}O¿ë‘ÿ_×õ j!ä cüŸÓŽx9ü¨þ¿®þ (?çÏ8Ï^sžxúö¤duãôúqõ㎹"Ÿõý_ˆ}xöü?~;àzò¿«ÿWÏ_®zzž wü}©ÿ_×ßÐ?¯ëþ_ÏÁôÏÏ’G¯±Í/ëúÿ0 ò?N:öëøà àO»@ ž£>¹Éü=øöã¼Qp úŽØã§èyryíOúóþ¿ÏÔÏAß�¡õíŽý³ùÒþ½?¯ë¨ õüzŽpzòAôïœóîÿ®ÿðÝÿ ñõôéÐúçŒàœòzÑý[g×©ÏøóžÝJ?¯ëú`óëÓ¯Bxüò3õõ¢ÿ×Þž=²@ëÇ^™?ýonWù¿¯ëúêŸçÁüO=O#އõýÀ_p=?¼äÇóŽ{çÓ¡øÀì1zg‘œôöçñ=sߥ+€�yϯ¨üÿÃëÐæ˜[úþ¿®Á»ëÀ÷ô$sƒÿëë“îéÓ“Û�ò ÿ1Í×çý}ú þ¼÷ÈÇâ1øqŸaEÿ¯ë°G~ƒŸÿ^{ž{sœç½×õoÌ“œäzÃôþ}J?­ÿ¤³Æ;ôÏ=ý}»p1è?égŸ®1Ðã§×ŽIóî}^yôxèzqÛÖ—èuã¦O#Ûלúu# óÞ�ÿ®Ÿ×õ¨î=O¨ÿõvýzŠ?Ëþõó´Ð|Eh–#Ã~%‚{ÿ Mr×öû?µ¼;w.ÔŸRÐd—†”*iis‘e«Ã qÈÖ·±Yê6‰>�oøÿ™�Jr¿´¦Ôj¥g‚¢[Fv×GðÉk ½Óq|Œë \J–óˆY†ŒÂg…da¦ÌbiSçòË3&v$Yª»JêÍÚê÷¶š«ÿWÜgP1Ç ç‘Ï=1ŒxöÄŠRO>Ýy=~l’ã¿'¥ ôõþ¾ûW _üÀ¸\œ2NyÁÇÏ^î=¿õm—õý jß×_!¦^}íŸÔò;gØà¤Ñt´þ¾à¶þ}­?Àp—ŽsÔ�ž�3ÜzŒzdäg£Ÿúþ¿®¢³þ¿¯ëÔã~žP˜üh±ø…©ü)ñîŸð¢ö-?â-߆ïàð�ܲÃncÕ ourVÚÎþh<è4ëë—ŽÞÊþ[k©äŽ(]×å¸ãÄx®â?W†‰ke˜Šy=iΜqrŽŠ•j­R¡ˆ�>zxjõet1¥V¤£9/+<§™UÊ3 yDÕ<Êxj‘Á͸ÆÕZû3—» ’�4iNMFg&’m~‚¿ðT"I:ÏÇL’IÇÇØsÏ|G@ Wð[ào¥kmýw�µ×Oé¥òK‰¬½‡à¿Ø~+ÏüÿÿÿóÌ?áJÁPè3ñ×ÿô?üò)¨¿JÏúãÿüX”ÿú'ì?¿çþÿ‰ùæð¥?à¨?ôøëÿ‡úþy¨¿JÏúãÿüX”ÿú'ì?¿çþÿ‰ùæ{·ìÕð·þ  |hð^«ñ^øˆžµ¿fñ|~8ø­gã ëBhÙo-#Ñ$ñWˆ¤—S¸SM¹¶°Ií.vÏöËXVi+ô øOé#—qÆG‹âlÉcÃÔ± ç1ϸºŽu�«€qjµàe›fR–*¢iajÓÃÆ¥¶Ÿ¶¥9AÂùO‰|ó[2ÄfK/…OöÕ�Íá�¡,=½ø*‰n¬´T¥jP•¥Ï©3ö~¿·�ÛÊÒcp÷Ͼ~œþמ1Šº�ž-®M¶ ב0¶ß�Ÿhò›ÉßþÉr¡¸Æ:ýÚbw³¶övõè|ᨈÞd›¿¶rY³°�¹Î~B„Ç€IÆß”h/K‹Ûß^ÓüŽ>ý~"ÿÈsœçïžý=.ƒŠ�.?ßßþ^[æu^Mlêþmx2Ü'‹ôFˆÍ´OöUÕ,Y Æ7«ù¥wŸ3fÒÀñXW·²«où÷?ý%�t9¯}ùãëk­ÿ‘÷Õx'ªyž¯ð[àçˆ5+Ík^øMðÏ[Ö5�Æ¡«jþ𶥩_\Ïy}y¥Mus1UU2Ï+¹ l\52̶´åV®_�«Rnó©S Bs›ï)Ê›”Ÿ›mŸSƒãŽ5˰´p9qN†‚§‡Áàøƒ6ÂápôÓmS£‡¡‹…*PM¶£N�ÛvÔÝÒþøDµÔ,t_øCH²ÕôÈt]VÏKðÖ‹ak©èÖðÜ[Á¤êö–QC{¦AåÜØ\¤¶±ÃuqD©<ŠÚÓÁá)Fp¥…ÃS�H*U#N…(Ft’’T棥¥$¡$┤’³gŸ‹â>!ÇÕÃb1ÙösŒ¯ƒÅO„­‹Í1ØŠ¸\mIÓ©S†©Z¼çC:”hÎxŠR�iN•9JnTâÓõo I&‰§è~»‡Â–šh¶·´¶Ò좷²·Ó­ 6öúu­­¯Ù’ÎÖÝK6Þ\1ÇÄ"Ù·b­‡”¨ÂŽk r¨ªpJ*VPŒcËË¥”l’Vµ¶×-Î)QÌq9Žq…–yWªÎ´ñ˜‰Ô¯çüOÜwËý/ý]a§�1�òN9àçò§ý]ý@èµO x‹AÓ4=cZÒnô½?İÜÝhRß*ÛMªYÚÉrjÖrH/N’I–+mE­–ÆòHî#´¸�­nP§9(É7 %mlßKÚ×ÓU}4¾ãqi&Õ“Úý~]ºyœîG^?O¡Ç^8ë’*ÿ¯ëúüDZ{ûÙ,¡Ód»ºm>ÖêêúÛOk‰ZÊÞöú8/o!µ/äEuyŸa ÔéËq …œS;%´rT©*²­TÕyÓ§Fu”"ªÎ•)T�*R¨—<©Ó•jÒ§Üa*µeœæÝ9ÍÁSs“§Êq¦å.HΤaÎ0¿*œãNœe$”¥A6ùUªç¯×==OP;Œ~>Õ¯õý}ý þ¿¯øqI¾Ç4¿¯ëüÀ3Èý8ëÛ¯ã€3€}>í&zŒúç'ð÷ãÛŒzñEÀ3ê;cŽœ¡äuÉçµ?ëÏúÿ?P=~>‡×¶;öÏçKúôþ¿® '×ñê9ÁëÉÓ¾sÏ»þ»ÿÃwü€3Ç×Ó§Cëž3€zsÉëGõýlŸ^§?àsÎ{t(þ¿¯é€å<ç¯CŒõã'Ž}NF}Î:Ò×õò&ÇçÆ@Æ}þîI<úœŽœaÿ^Et*ÉŽx#®sË0 Rx=òN:�”º–¿¯ò?¦ÿø6óýí“Ïü²ýŸ~2ß}@úqé_Î>=|\)éŸ~y)ú_‡ßó6ÿ¹ýÜ?¨Zþz?I?�ÏÛšÚ÷Gý­ÿh;ôxç“âF·©F² lµ¦‹XÓ\çË—N¾µ’">V‰Ð¯ÈV¿ŽøÞ”éqwF¢jO2¯U^ëܬÕjo^Ž�H5ÒÍ4í¡þdx¯‡«‡ñ#Œ©ÖN2–y‹®”¯eŠåÅPjý%Fµ9G§+M+—ð—F¹ñ¿ü/öÂð'�`kßø'ã?Ã�þ,Ñl@:¥÷Ã(ôáê7±[F‚ký'º­…Æ¿©í2A¤Yƒy2À6<ÿÙÿ³‡8È8cÆ¿«fu°øYg�ÌpYmZü��<Ë4ÀÓ§„¡ÊܲÄÖÁ×Àáìýêù�4R•eÍý�ã'Ò ‰>“?FÊóÌV#0ã¯r,¿„¸�νZø¼û…²\Æ¥l�Šë*’�Jø©exÊ~{Zr«^¾/†k纫ëôiSü•¯ú?ÍÃöãþµá?Úx§ö¥øµw Ô4OÙãÄ?5;©CǧjÞ4ñÞ»áÛ¯ h‘"+›¸í¼?©Í;@³M¦Gydgò#Õ ûGù7ûcxë„8cè‹Æ9NW <~g“ñEl¬£íjQÄð–}Ãz-¥)ÒŽižqS—ÑrIU›­Vœj<OgýÏôáÌó3ñ— šà!^8 Ëp¸ŠñRTþ²ó¬³5ÒíF¤°˜ «‰©ËwJ.”fà±0çý’oóý+þêἿ¯ø'ý§ŸõúŸª­æµð‚­çÏ�…tua‚‡û2؈Ž;ÄŒú”Íַѯ/Æå_GŸ²ìÇ™c0¾xN¼$”eB_ê¾Y(ád“k› G &›MÑm6�ÏòÛÄ:ôq\{ÆxŠö5x£=”$�Ô×öž%:ŠúÚ«N¢ì¥cå‰þ4ÿ‚x|jø…¦ü-øÉ{û,üWø›£ø¡<¤x3â6—ðóÇ+ÒüZuìïøEôý;ÄV:�ý–§&°ïaq¥Û¬m-Ä“ZÜDÂI‘¿¥ið§ÓËžoK$Îiåo õ÷�† +Á{/mõ§Y%GØþñT¿/%¤�¬~tó¬£ë?RyŽë~ÛêÿWöÐöÞߟ“Ùr_›ŸŸÝåµï¡ôLj~ | ñw€í¾x¯áOÃoü1²M>;?‡>!ð7…õ¯ÚG¤È³iImá KK¹ðü ¦J«.ž±iè,¤U{akæ£V¤gí#Rq¨ïyÆrS×y;ë×]OLæ4~Ο_Á´� |"ø™?Â}cWÑþøÉ|1áO^|7Öô‹«]7\°ð>¹>Ÿuuáë ÍÊÊþ?ÜéòE>—k¸k(V.Ìn2ʪ¼.:†+Zµ5åBº�)Ô¡^Ò…YAÛšiËži©F\ËFcC‡ÅAÕÃÕ§^šœé¹Ó’œUJrq© «®hI8ÉtjÇià…¿ ~ÿÂCÿ ÛáÏ�>ÿÂ[­Üx—ÅðƒøCÃþÿ„ŸÄwyû_ˆ"OñwJø ðoLø©uq%åÇÄ�?ៃ,üs=ôÇ3êøªßE�[}B~{ö½7“¢G³ºFжëÖpön­WOnG98[·-ío+X,»ŽÚÑÖÝt{[1 ²ˆ#Û \‘­Z”ãV¤g/ŠjrR—ø¤�åó¹µ—cÑ|+á/ øÃúg„üáŸø;ÂÚ-¸´Ñ¼5á]Mð÷‡ô›E%–ÛLÑ´‹k=:ÂÜ33mm¢Œ$.I¨”¥6å)9Iêå&Û~­Ý°:C?ŽOÚ«þðaàøjÏØ‹¯|过øãù濨økþL†;þɾ3ÿÓùéù.gÿ%Þþƹ/þ‘€ÿ‚cuü¸~´y—Æ_ù%þ5ÿ°4Ÿú:üCé%ÿ&+Äßû&«ÿêFýÂ_ù9!ÿcz_új©ùk_àñþ”š–¥äî‚ÌLJqÿ,½‡ý4ÿÐ?Þéß…ÂóÚ¥Eîo¿·æÿ»ÿ¥zoéà°^ÒÕj¯Ýï¿·æÿ¹ÿ¥zo›¹¬Ca.—¥w„ͺKe™„lH!—9ޱɓæÄ¬#”àÈŒ@#²XëÇ,=)b ­® ™ZÖ}œ£ovM9Ei“g£,uኞŒ±V�Wä­k>ÎQ·»&œ¢´‹I²Þ™©ãmµËqÂÅ+žˆçÓ²±éÐñ‚9ñxKÞ­%®ó‚ëÞQ]û®»­wãÆà¯zÔV»Î ¯yEwþhõÝktú*óýýš?ä—ÚÿØkXÿÑÑ×û/ô$ÿ“€ÿ²—ˆ¿õ"‰ü ô‡ÿ“‘Šÿ±FUÿ¦¦|ïÿ7ý­ü}ûþË:¯Ç?†Þð‡‰|Oaã_xj-/ǺÕÞ‚ö~"¼¸·»šHto@Ô Ì) ›f]EbV-æÅ(Àظ<1X…JnQ‹Œ¥xY;Åiºkð? nÊç’þÏÿµ—í§ø+Çÿ¿mþÌøá‚_â½ýžµ¿x§â,7�X†ßWðö³âmbì¿á›[’x"X®Æ±ocj—6˜6•°øg(RÃ:ò­*¾Ï÷Ê1‡U£QZó[åq&÷vÛ¡— ÿÁo?à�^)ñg�ü(>(kZ|Þ.6/¿â?k:_…|'ªßÈ ³°ñ_ˆnâû‹x"¹Š[ÍBy£h°\•Öõ}2H¯!·o+ÆÆ3—³O–þìfœ¤–î)n¼´o¢aÌ»ž±ð#þ ¿û~ÑßÏÀO…ÿu ï^}¹|/>·áMwÃ~ñÌÚm³ÞÝÛxOUÖmmZîìXÃq{ik©Zisê–¶ÓK¥%ê„ß�\¿B—¶© ­Íi)8_EÌ—žš^Ýl IèqŸ?à³°W‹Þ.ø/⯉:ûø›À·š¶�â}_Eð^·«xGMñ>‰#Ûj^mzÞ=“jöÚ„o¤Ïq »èVÚ¢Iew¬ÛËÂ:†Y‹©N5còÍ'䔜^Ò·kk½í­ƒ™?þÒß·.ƒñsKÿ‚x|`øûRøóàOÃÏ�õï &Ž>Éâ Ÿ‹© xÓÃ~¿ðÿˆ­ç¾Oì?S:¦�om¨ùºN­‰µrð]x{MY6¡…tÞ2�l<*Ε+ûK{;ÆSRŽš¶¬ôÕrÛi0ofŸà{'ì5û\ükøçûkÁB¾üCÖt}GÀ?³Ï�¬t†6V>Ót½CLÓgñ_Ž4©!Ôu;8£¹ÖÙhšr ¯Œ’†…¤ ¾YKeŠÃÒ¥…ÁÕ‚ju ÝFÛi¾X=ÑjÞÀ›»]�ÖÚóÊ ù«öÐãö7ý®ÿìÖ¿h~ŸöGüe_AÂ_òVp§ý”ü=ÿ«Œæçò'ÍÿìU™êsüë€9À=°:óùuùŠþüþ·õþ¾ýç‚`DCÖFïòŽýÀŒ}O§þº~×MCô"Ý“’}þ¿\õ'ž1ÈçÒ©;¯Ãúî&;;³‘Óðÿ=þéÀéF©ÿ_ðÄÚÄ�²0zôÏ=Ïn£��IÒ}ÿ¯ëÐ^à§èOo®9óî_Ò(víŸ*|Ò>1ÆHíÇqÛî(zzö¯èt6þi-K‰ WRá¢Bp©Ü r ,ý0PàŒóšK¾öA»Ëô9ók,R¼w ÑŽ×ÈëŒýÓÜÈÇcô©þºÿZ‡â+ɼAµ@ñ=Ï_®0=ÈîFNyÇr9çÛê}ÿ\�úþ¿­©PúÞüz“ÓôãÓé# ûŒv}OLqŸoZ3ëŸnƒ¹Ç#¯×·8¢àçèNsÀëœsÓŸ^øéGõý_æŽq´ýGòõè1éõ ºuãú^£ŸJðß×õósì8ç¯çÏødúzR¸ƒ§'Ôw¦:tÈíøQq’(ÇÌ~ véׂö¸Î8À!síŽs× dÓžý¨Kk[›ë‹{K;y®nîåŽÞÚÚÝY®'•ÂE Q gw’BA,NNsc1˜\¿ ‰Çcñ40x, ¸œ^+VpØl=:•«×­QÆ�*T©ÆS�IÉF1M¶’0Äâpø<=|^.½,6 J¥|F"½HÒ£B�(¹Ô«V¤Üa p‚r”¤ÒŠM¶t~0ð†©à�R ZŸN“R}6ÓP¹µ°»û[i­yæ§j ±¢A¨Âˆ²Í fx„SA,W¤ªkå8Žò2|F�aóZyM<וá1yžê0Í¡�t£<Ó+‹«R¥|ª½J’£CV8zν MØz5(Ê'ÏðŸe¼e–ÖÍòŠ8øeðÇâ°8lN; õXæ1Âû5,~.s•\YNTéV©5}­ôêP§:rG4Š~ñ8@ëÀÔã'Ó‘Žkí/ëOëÔúcõ³ö'ÿ‚dŸÚÓömø½ñžûÇ·þñ…–©â�~΃N·›þ'Ä/|6Ö¾%x£A 8kÓfºe¦Ÿei¤Ã,1^ǬÁs+\ZÇm_“q·‰¿ê§e-<<^t°¸Î#Ç:’�ö6_ŽÌ¨e¸Zö�îùÝYÔœéÕjNŒ ¹fä}~GÂßÚùf3,D¨×S«G, ¢Ÿ×q40Õ1Uiëïr¨¨ÅJ ¥.tõV?:¾ |ø§ûAøûJø]ðkÁ:Ï�¼u­¥ÄÖ:޶êëkežûQÔoõ ‹+FÒ¬¢ïu}búÃL³Þ¾}ÜFHÃ~‹œgyWåõ³LçG/ÀÐåS¯[™ûó’Œ)Ó§N3«Z¬Þ�£FœêÎÏ–-&|Þ ‹Ìq0Âà¨Oˆ©~Zp²÷b¯)JRq„!ñNrŒV�Vý¡b�ÚköYÓ´-wãà ¿ øoĺ„Ú>‡âÝ/Ä>ñÏ„/õ«h%º›E)ðˆ+ ä¨ÝYÓ�7ìæ£)J-.\»"ÍsZu*àp’«Fœ¹'Zu(áè©éjj¶&¥*r¨ù£îFNKš-¤šfhýŒ?j_ø_Ãö\o‚¾1�ãËo�|>ž.þ–ª6·ý³5òxe|24øÞðø¤ëCÃgS/ö¦Î¿ëŸ ÿ`­ÛXG‘h¿´#*’‡´sT•b ñ/í‡Õ}�Öy�½‘?Ø™¯ö‡öWÔk,Ãþ�ÚŠ|¼¼ÞÓ�ÉRö\¾÷µçöV×œÒøÓûþÕ?³þ­à âgÂfÎãâ¶£‰ðÒïÂz§†þ$èÞ9׿½‡M‹Ãž×¾ë^,ѵ?Ë<6‘xvïíÉ'’%ŠÅÕÑ›,—Ž8[?¥�­–æôgª›­™CK–ÖÀáÔGˆÄÐÌhá+RÃ*qsx‰Sö )ÞwM�ȳl¾xxb°sO% +£:X¨b*9(ªTªa§Z«ÌÔU%.vÞ‘Øê~6ÿÁ:lÏÙÛáìß~/|Ô|7àk Í3N×µ›øŲøGPÖD'H´ñ¶‘àÿëú׃PVÞOiÚ\ q©iÖuÔo!³<Ù'ˆ¼Ä9‚ÊòŒêž'RjP£<.;±tèßÚÏ[…¡G©òÔæXj•d£N¥N_g3\w çYnâñ˜RÃÆQ�Iƶ³£)Û‘W… µ*Pr¼mícyF7æ’F¿üÃö(Õ¿n¿�Öÿ ¢Õ¯¼1ák/ x�_ñw‹´ßì›í+ S¸ðòÛèÚÖ¯¥K«�kĶú^‰4ZgÚn,-¯¦Õ.bŠÆÊæxðñ �hð6A,Ùц+S†Ãá0•>±Ws¯J8‡*Ô(ÕT}ŽUkÅÕå�IAR‹u'½8s#ž}˜,<©R�:µ+V�³r¦£Nn•¡Rps窡£w'6”bÚät_ØCö±×¾9j_³o‡~êÞ øÑ£hö¾!Öü/¡øƒÁºÆŸ¡èWš}¦¥m¬ë^5Ó¼Ksà=LšÚþÊ?·j^&µ·]BîÛIyTž+6ô*ñß á²*|KˆÎ)PÉëÖ–†*¾J¥jð©:R£GS }jªP›ä§…”�8JªN”\×<2 Þ¦>Ye<êciÁU©J�J�:r‚š�Jñªðð‹RŠæ•T¹¤¡~wÊ`~ѱÏí)û(\èiñëán­à»$¯á�Á©øÅž ñ“–šßIñ§ƒuox^îþUn.4…Õ†¯gm$SÝØ[Ç,dëücÃ|Yï"Í)cjaZX¬4©â0˜Ì?6ŠU°xÚ8|T)¹{±¬é{)I8ÂrqdfY.g”:k0ÂN„jßÙUR§Z�Kn¡^„êRrKW~tšn*èã¾þο¿iïEðÓà?ÃÝgâ/ŒßOºÕçÓtÉtÛ =3G³h£¹ÕõÝ^¾Ò¼=áÝ*)®-m?´õíWO±kÛ»+™¯/- —³>â,—†02ϳ 9v T�R¬jT�ZÓ»…z«ˆÄUqŒ§ì¨R©5Nn*”–~[ŽÍ1 €ÃÏ[•ÍÆ.1Œa':•*JéÁ6—=IÆ<ÍF÷i?ÐÍ[þ ©ã/ƒ?±?íwñ›öŽø{â¯üSøU¯ü‡áõ�Š<;®øÄš/�>  xÎhu ^x�Ã~(“OŒ$%tÏ%Ö‰y4Q…Lð#þ}GĬsƼ%’ðæa…ÆåY¶=y½9áq1øjØ ¿ëx%*X¸a±8UQÞW«‡q¯ËÙËÝ“_ES†+`²<ã™áªÐÅá*eë(Õ§SRž#쫵:.­*¼¶·»RôßĵHùçÀ?ðLŸÛ§âÃý'âoƒ?gÏjñ•s®øa5xÃ~*ñn‰kkôºÏ„|âoèþ<ñV˜ö“Û\ÙßxÚ�¾¥ouo.š×q>áôÿ8+Ì+e˜Þ ÃÓÅaªÆ†)ÓÃã±8L%yMÁQÆcð¸ZØ %U8Ê3†#NTåF¢ƒV<ü? çØ¬<1T2ê’¥V¥%*¸zUkSIIÎŽ­Xb+A¦œeN””“NLô�Ù{þ •ñsö�ý›ÿiŒ¾±Ôí¾:ñN£âeÓ¾)èÞ#¼ñ‰t Ÿ\|=ðåÞ—¬[¾·�¾¿u>‰§Mu©Ø^ZÁçqG‰™O q' dؙҖ 9ÂæÜà xÜCÀáiá}¦U[ ls L*Ñ’ ç,=8F½E s„åÓ•p¾35Ë3Lm(ÉWÁUÃÐÃaܨSúÅYUåÅ«­V› ðô¥ ¯h¢ªIºqr”d—‡üý€¿kŸÚÓÆº�ƒ·Þ"Ð~ø‚óÂ~,ñ.¥â¿x?¶>'°%/Z°Œý´}“Œ¥�IÑU#ü:Š2Uç‹ÿe¿„öÿ±wí=ûCYxsÆ>ñ×Ã?ÛŠ_�¾ð¶¯â‹-f øçK›Q_ ø‰ì!¸²×¼O¢L�sâ?P—’ÛË< ,Ç%sá8§6—ðÏOƒÅà3.Yæ/G :2ÄããV4¾³‡ö’ŒðøjË÷‘ÃÔ§Ï%ZI£JÙVd™¦cu¨â0¹ëÀQ¥:±š¥‡qröUS�J°~ë©r¶®®™Àh¿ðKßÛ×Äm¾&i³—Šåðí÷‡ÛÅZ~™q­x*Ãâ©á¤�¦þÛÒþê&µø¡©XKZIeàùšú)#–Ánc;Ç}oø†a,²¯áV"�ªÔ«Ú™},Ki{ ¹­<4²ºuÒjxÈû6šŸ+Ðç‡ çõ0ë ¶«¦éûXÁÎŒq¥ÿ?!ƒ•UŠ”m³�Ítãty'ìëû~Òÿµ}÷‰¬¾ü+Õ|g‚áŽ_ëW:§‡¼#áo ’âH-õŸøÓVð÷†ìu ”µ¹{m.mQuâ·žX­(%’?_ˆxˆ¸Riç¹¥,ÆÉÇ F4±ÌV&Î*R£„ÁQÄbjS‹œTªÆ—³‹”SšrIñå¹.g›JªÀa'YP_¾›�:4©^í)Ö¯:t£'gh¹ó4�•“>›ý£¿a=Göfýо|Mø­à�ø ö„×iü2ñ>‹¯ßÚÍ Éà�Á–Þ ðþ£ Cb·:f©oq,“[x›HÖµM'T�JÙÎêŽÕó<9ÇTø›�3,³*Ç`±ü?C†ðY–µ rUÖ6¶6X|E!kš^žú¾´l%Ó4�úJÚ~'ñ_ˆ/ô xgNwGŽ+íYÓm¦•^$’Q´}†}Ĺ aa�Ïs*9}µ>ÑU«_UÛ÷Xl.�lV*¢M7OF¬¢š”’G‹—åxüÖ¬¨à0ÓÄT„yçÊãS‡óU«RP¥J:i*“ŠoE©ÝüTýˆ?jo‚ß¾ü/ø‘ð“UÐ<]ñ‡WÓ4/…ÂsÂzï†|w«kZ­†‹§ØøsÇ>×õ_^ÌÚž«¦[Ý¡ñ /ûBÎ}Wì0O‡‡+ã~ÎrüË4ËsjUð™=µóNjºœ*ªW©9ðF�â CÇŠe–/9üUáÝ X=Gì“H‘žÜ·Än ͳe’eùö¾cRU)Чì±t¨c'Fê¤p8ÚØzxsVvX\En{7O™&Ìq<5ž`ð�ˆËêÓÃEFU%ÏFU(Æ ÄP…IW �õöÔ¡ËuÍff|ÿ‚~~×ÿ´Ï�ïþ%|ø3¨x—Àz~©&о)Õ|Sà_é®±|ý/Ãw^?ñG…×Å7Öå^;˜|85F·ºCe)ŽôÇlÚg¾ p‡ c©å¹ÎsO �©MVú­,.;Z•ðÕÄÇ/Â⾫ ]8¼G²RƒçW…äF_ùÎiBX¬ Upñ—³ö³«‡ÃÂs[“ÄU¥íd¶jŸ5Ÿºýíløû|Pð/íqðáGíOû'üIñÍ·ÅÏxÏÅ:'ÀýÇžð޼i¢hÞñ…ïÛU¼ñv„ž›ÃzŽƒ>³¨è~"×¼#¬\E¢Ï§”y.ÂûÅÏøã+Çp–šð·åØe8œ¾w[‹ÇàpU«c0pät¡„®ñQÄÓ¯4ëáèbèÅÖ�K¥RŸv_�âègv5Ê15Ö2�zÐÀCG^¼!F´¯ÎëSö.œ©¹ÊjQ›Pqݨ˓ñ—ìßðÇIÿ‚sxwö¦Ó-¼Igñ+Wý³|Oð:[{ín Íi¿5?ØÁ%…½œQ¾¿£m W­½Ê[O :%š½X.#Ìêø‰‰áz²ÃO-£Á¸\íJ� B´±õ3*XIÉT”ÛXyS“q¥(óEµy»XʶY…‡ RÍ ª¬Lóº¸JjPXxá§Z)ÅE/h¤’sNÍ_Cöhýž¾|Vý—?o‹~)]sþïÙßÀßüGðíôÍMm4åÔW²pÄÕ¥8¦¥(Æ’X>Ïqøxâ°¹}IÐ�Ý)έ ²[º¯V•JÊ׳¥ÅÚÉ·£ñŸ…_²¯íñ³âΩð/á§Â_ø‡âÆ‚uqâ?\ZÛøzûÂË ÍömaüYwâ{�Jð¤}ÛGc=LjoôØ£5®ž’5íÝ´û9¯pöK”ÒÏ3<Û ‡Êkª?VÆFRÄCõ…ÍEa!†�j¸¹T…êF8zu%ìÔª4¡Iqa2œË‹– ƒ­SOŸÚQiS•/fí7YÕp…î·VP\ÍGâiµñoþ Ïûg| ðW޾%|Lø+ ü:øq†.¼Sã›oø_ð¼vÞ2ñ8ðw‡eÑõ_x«TƒÄæïÄ�—}oᣪÝè3OnÞ!·Òcž7#)ñƒsÌn-Ë3ªuóÅ⣅ÀË �¡ŠrÁáž3«RÄaiK ˆN¬%‰öPÄ(ËêòªÓK³ÃyÞ†#ŠÀÊž ©:µÕl=JIV«ìi¸N•iª·«hIRçtÛ^ÑA4ÍÿÏý¸ÛáGü.„øâ <ÿ‚|A0CâÉã�àY K”ñwü*èüLßÿ°šÞD¹7Ÿð‰m¬.Ê­§ï„ÄKàušÿbÿoáÖ7ëo/æx|jÀýy7„þÔxe–{u%ËÉõ¿�r§Íî•þ¬g¿Túïö}Oaì~±oiCëWµý·Õ=¯Ö½�š|ÞÇgÍðê|)žqùõ<þ8þ˜$‘Ú¾äðC>ÜàuÆ3øãü;ÐÑýVÉÓ€89õéŸÿ_;Ž3ùsžÿבÇR ®xç·¶pý»žƒ ×§Œß—åøh=Ï={œc×ó=踅ëÓ¸ÇÔŽ}ztôúcŠ'n§ÿ®}óŽyÉíÒ�ë¾€ëê}}¯|`qŒþ¢€=:gòí×Û§^�= úgŸÏùžzc¿¾y 9ü�QŒõýxíì01Š^=#ÓŽ� �O¾M'S€3üøãúqÇS@ä9ÇסüFyϯµ'òüqœ{çß~(¸$�?¸=úä}p0;{¯ëÐ *ýtÛø.ä°±Ôâ‹ÍIl5žk+¨§‚H%I) � ŽW0Ïm4V³ˆî-&Šâ(äF·Ù?'ý[“8óE®iFö´¢ìÓM5mz­SM5tî›:}GIÐ5+�kÂú‚Y¥ºùú‡…õ«¨SS°�¾üšF¡(·µñ ŒraìÚä[�M¦ÝE·î÷Ûî§uå¿–ìΩ(U�5Ý£V Ý—øâ¯*rûàúI7Êq\rsŽqŒvoUçé�óu=%»~·6òKúþ¿´“cëÉ>ƒ×¨' ž3ëêA¬Ü÷×úþµû‹Qûôòþ¶Ûþ—OµÔu‹û]3I°¾Õu;ÙE½–�¦ZÏ{w;gl6¶–ñK=Ä�ƒ¶8£w!N:áÆf8L¿[�Åá°8<<LN/^ž BšµêW¯Zp¥J KΤãuz�|-|UZx|-¸Šõd¡J… s«V¬žÑ§Jœe9ÉôŒbß“ÔúóŸðO¿ÛGÆ6qßéüA×ôè:c¡éÒŸÜdz�þxÛâ,º„ ФÖ_JŽÞ]@‹Ý6Â+U»iRÕ^}RòÆ’³ÏåD’<¬°Êá Fì1ÄbðøE^¢¦¦Ú‡»9¹rۚʓ²º»jÚ¥ÔNi|N×ÛOòO¿ãÜô_øf/Ž'þdŽüøI|!Ïr?ä?×ÓëÏÍý±—ÐOþQ¯ÿʈu!ßð—ù¨X^iW÷Ú^£o%¦¡¦Þ\Ø_ZÊ–ÚòÎg·º·”@’ãxÜ@e8&½Ê3Œg¥ÅJ2[8É]5äÓLµ®«©R˜­m~VwP@gjͨ¦™~úDPͪ-¤íaÆK±RBY)|šHМ’5%Çk,Ân:yM*5³8ákKJ¼”hÔÅ*rtaQ¹B*.v^õJqnÊU)ʬ1.ºÃÖxXÂx…Jn„fí Uå|ŠNéY»o(®òŠ»^7ý£ñÓþ€:OýþÑ¿ùs_�ÿhxÛÿB<¯ÿdÿü÷>WÛñ�ýaðƒ,–c<3y¥:T±ÒJ1¤âײ´y\¹'RÎ\ÿ ß»Ët�ΔÈŒGùç¯l⾘ôHMÂƒÉÆ=2:œdpxúà€0Þ Î[òãõÇN¸õëÇ`퉟½ÛØ÷ë€nŸàr@{¯n=;“�Î;c¿Ð}²?ïž~žžÙã"€¶Çýãü‡¿LgÐlu öÔþ÷צ;{vÏÐðíˆqÏà:ñøwÁöëž„P‹Ä'�ä:güÿ*Azž¹üyÇ£ùÿPeºLn?Ó=pzäHà‘é€7_×õùþA™=Úzçà0Á8Ç÷�ÎyÀQŽTdÐ9yv„¿<üǧ^G¨_º$ëÇPRöézä�Ù¡ñócžCa¸àç —±oc…Õ.ÈPÈ̲FÊÈèûY�ñ°�ƒ´«¹F ¶§G¦ýÑ:üÏ^ðoÄ?ê6¶Q]ÞZ\7ÚÕ§šÑ<ù#‰p�##D¯){¸�/Õ†âMfòü;ÃÔ­i©.f’—»£]-{|Ícˆ©ÏÝ4íÓ__êÝOLþÚñäMiÉfQØäeÉŒþ?/�ì!ç÷ÿÀ:=¤¼¾á³øƒ\µ‰§º½Ó­`�™'¹…!…?3Ë$Ë/+×'š™R¥Í)rÅo)IE/VÕ…*êrœ¡­å'ËêÛI?ÄøH/õ-3Cñ‰ªßhði÷Zœ6*·"ÖßVmB=:c4r42Gw&•¨ÇÅ$ƒÌ²¸�°ñ•¬(ÕÁbgVžN´èò{UJ¤f¡í9¹.ãuïrNÉ=âÓ9°ùžRµ<.'ˆžSu•ªžÍUçTù¥ãï:U³zÂIÙ£Boë°Èñ<¶»�àÿ¢wïÿ-zzqÿ×ò1yÎ ˆ«‡ú½ZŽ”¹e.xÅ9Y7dÓvWµÛ×¶Ç‹ŒâšXLM\7ÕªTteÉ)©F ÊÉ»'we{&í}íkÿÂY­Ïkoüüv¹¿Ö 7ýUÿÁ±ÿä_õÆ—ýTÿÁ±ÿäCþÍkþ{[à ûTöúcÞ�õƒ ÿ@•¿ðlùÿ\iÐOüþD?á,Ö¿ç­·þ�þ9ëþMëþ�+àØÿòþ¸Òÿ *Ÿø2?ä'ü%šßüö¶ÿÀ@ö¨£ý`ÃÐ%oüþ@?×_ôSÿÇÿ‘þÍkþ{[tÿŸQ×þþÿú½èÿX0ßô WÿÇÿ�õÆ—ýTÿÁ‘ÿ!?á,Öÿçµ·þþ;þzûQþ°a¿è·þ �ÿ ë�/ú©ÿƒcÿÈ‹ÿ fµÿ=­¿ðñßJëþ�*ÿàèÿòþ¸Òÿ *Ÿø6?ü‰v×]ñ Ú3C-®¶œÚwÆîÒc¦xÎ}ºW¯—b¨f4§RêStçÉ(ÊWNêé©%gæ­unÍ3ÛÊóxætªT…)RtêrJ3÷·Š’jJÉÞú­¶º5ygÕ|OÈ$´Ý2ȹµãr#0Ü<΀ŽzÏ¥z”ðôå8EÞÒœS³¶�ÙÙÛ·õÔô¥VJ2zh›ZvùŸÌ‡üOþ ûSüÕ|!ðá��¬<àÏŒ 5‹ÏjZ&‹kŒn ¸×uMûMÒüKpn.ô;ý21ou>‘ž¬¡¤º•¸–Eoè¿8 ‡3Hâ3¬Ã SŠË3qÂS­ZO F�:ЩR‚Q…iB£æŒj¹SnÜÔÝ“?6ã> ÌðŽ– Z4ibðÒu¥%Y§9BQ…Gw(èÜm+^ÓW?’€'1ÓŒc¯8<œw$ãÔôú.Öþ¿­Éåç×Îÿä\@ Œg9äã�|Ë“îèWÐÉ—û箞¼çצyÝÜ‘Î+xÿ_ðä2aȸ=J�ÏBzÕ&JOÊ3ï×Ó#’qžr ˜êZý?_ëþŽ÷¿|Eâ›WÕÿÐ<;á;yþÍ}ã_]#ÂÖR�¹áŽùá’}_Rå×Bðý¦­¯N™{}2UWd‰ÕŒµ”íuN+šOä´Šþôš�vR‹zè—ó=üä®û#™ÕâÓ´­jækrë:}�ÄÙúÙÓåÒñ¢Tv»‚Âyç¹¶‰nUþÆn^;© Xg¸¶³šW´†ÓrŠæ�+kXßšÞWÚöÞÚy½Ü»'£ºï·áý~„Ƶ«xƒS»ÖuíOPÖukùšâ÷SÔî羿»™�2Ü]Ü<“Lçnw;Tm^ÊPJ1J)-VKä¿ m·w«ï¹šÇ>ž¿^¾½ñÐÓþç ý=>´�:ñý?¯QÏ¥?øoëúù€¹ös×óçü2}=)\AÓ“ê;�Ó:dvü(¸Ã8Ïù1ž#òã€qÅ/²}ç×��ü9ç=¨:óÏOò1Ødd{í@ Ÿ^xÿ#Ûòê8 BäŽ�9ëúp}úã½�~ƒé×Ðþz¼wëÇ^½yç±?¦ cIÿŸè�ÈéÐ�þÎ3ŽOoSÜãÁ57þ¿¯¿þçý}ÅG$\p6¶yÉé߯nzb±ÕÑ¢?§/ø6÷>퓞¾Wìùÿ¡üm?®r:}3Éþsñëâá?LûóÉOÒ¼=ÿ™·ýÈîéýB×óÑúIüðÁcÿf­bÃĺGí=á}>[½Z±Ò¼%ñ,ÚÂÒ>‘­éÑý‡Ã"½1FJéú¾––ž–êvXm/´½"ÔÈeÕí£_À|\᪱ÅRâ\57*¡K ™r«ºU©¯g†ÄNËJui(aÜÛ´'J”[n¬Qümô’à\E<~ŽðeS Š¥‡ËóÎH¶ðøª Øàq•\V”q<©7ËJ®Ošøˆ%ùðö‹ø‘û4|JÒþ(|1Õ!³Öl¡ŸNÕ4­F}áïørù¢:·…¼O¦"]KCվљŽÄ6Ú……ͦ¥giwäÙ>mŽÈñÔs¾´¨â(É4ÓiN*Q“„ù\]›Š’qjpœc8JŒd¿žxKŠóž Îhgy%xÓÄRŒ¨×¡Z>Ó �ÁÕqöøu ¥[ ]F<ñ¼g ÆiNiÓ©®u_�?ðKÿßÉã_~ÆŸü ã©…æ­áƒŸ­->kÇi¸{{MN=.ÿ–n �+Ãv6Öö !ŽÞI|çþîáÏÚãNG‘ÓÊ+f³:´(*|~k—à3LÆ”c£)fV¦.¤wUs*9…gdªÕ«mB¯Ÿø#›ÕyžiáÎ}•f%í1ç°§‘â*ý· u•¸ 5oØ`©Ó…$íß¼ÿJ¾üQ¼ø‡ð�E‹Á¿ ôÙãà%½Åãü/ø;á‹ëÍZkë&•×Ĉ>'Ôb·Ôü_âÝvê†ÂþöÞ!k¤ZÇp�{&¨÷�þþÒ?¥�xïÆË‚ó<÷™ár\E ljëÊ¿3Ægð¥Z ©ª£„†!Áâ%8`0˜|> †aŒ«††#�ýƒú pK¡Á ÄJ¼5…àü§;†#Àœ5†œñ¥ÃÞÖ“Åñ&i‹ÄBŒnmŸc0î–V1•<§ Nµ)Ö§šÔ›ú#áß�n|sâ› )#“û:9c»ÖnT0[}6'S8ó@ÂMrÙ­³Ï� l�ñüqôfð5ñ÷Å®àú8lOú·…Åaó~8ÌéF¤ie¼/ƒÄSž>YŒ\hc³X¯ì¼«šîXÜL+rJŽ»�õ׈Üo†ànÇæÒ©OûB­:˜L› ',FeVT³m9ÑÃ7õœM¿åÍ7©Ný.DH‘#�U#�aQUP8 ªtÿS(QÂУ†ÃR… >•:(ÒŠ…:4hÁS¥Jœ”aNŒ!­¤–ˆÿ4g9ÕœêT“�J“”ç9;Ês›r”¤Þ­ÊM¶ú¶~þÈ;³ðÿícûTxwQøçû;x*ÓZý¼þ.Æ¿ üw¡XÜükñΡ©^éºn“/€5Û¯éRXY_j‚ÏMÓ­àð®µ+êvZºÃ3Or‘ÛEq®_xÎÎîËšøâÙüKûhOðCÄ_~1_þɶ_¾;Kû5뇈2/†þ3þÈ?ü_ñVñψ4ÈpYu’ƶ_˜Õ�:¹F+½�/«TTã­c&åJRöõë>YIýèÕÊsjt(f8ÿc�Èó ø™â*ÖÇ8bpÐŒ¡Œ¥EóOÚÇ™ËÙPŠSKÙÓ†©|ø±6�à?Ú;ÃúWÆOøëÆ÷ÿ°Æïˆ³|AøiûHø§âïÃ�뚆5Ymüâÿ |DÐtŸŠ>4Ã{yowk£Åw£$Q\ÍÆ…§]Å?oŸäñ¯˜pÆ&¶IƒËðüEÈrØå¹¯ a2lÏ ‡Äbè©eØ,f[ˆ­”qFéÂP�w í¸©GV ž_�tðÙ­(cëbqá¬ÃñXLÚ¶; Z¥:3k^Ž*œ1™n`¥%%*i&Ó§cÐô߈~ñ—ˆgï ~ØŸ´GÄ¿ƒ¿,ÿàŸß>!ü1ÔtŸ‰~&øskñâ6µàÝ _ˆ.ת•<]^-ºØˆS¢¢£É*‘§J§Ó U,E\²†{šbð8ðÎ[ŠÂJºØXâ±U(Sxšõ1jUñ4Þ�§)M¶î¢å9)Áð£RøÇûCx›þ ÅàoŒ¿¾2éÚÄO~Õ2ëz†‰ãOü?ñgÅo‡¾ŸwÃmoÆw:EõŽ¥%æ¹ [i³M«ÈF­­h³�@_™uë�BzÎ)äœ5„ñ;‘åYLFY˜ðŠÃÓ¯�Âf8<£2ÆFÙ¥ +B¥% ‰UŒh¯ÜЯgìùpñ§<~iW…pøüf>4±X\åÔ•¤þ8¿j¯ùX ÁöuŸ±}?ä ð õç¿1ɯê>ÿ“!Žÿ²oŒÿôþx~M™ÿÉw‡ÿ±®Kÿ¤àOìv¿—ÖO3øÈ ø_ãP'ûc€3ÂË'ŽÀIì'ŠüGé#/üMQNOýYÄJÉ6íøyIéÒ1NR{$›z#ô? š^#ð}Ú_ð±Ijí«§U%êÛI.­¤~LêZ—“º3Çü²öôÓÿ@ÿ{§øY…ÂóÚ¥Eîo¿·æÿ»ÿ¥zoþž`°^ÒÕj¯Ýï¿·æÿ¹ÿ¥zoÌžO$òIï^±îlPA¦jxÛmrÜp±Jǧ¢9ôì¬zt<`�7„½êÒZï8.½åߺëº×#‚½ëQZï8.½åßù£×u­Óý;ýšU‡Âë2Aµ�a”�@eóÑr¤õ•—#�ÊGPký†úFQð'-rŒ¢§Ä|G(6šSŠÅÓƒ”[ÒQS„áuuÍGx´¿Î¿¤3OÄœZM7«*RI¦âý„¥gÙòÊ2³ÖÍ=š>ÿ‚ßü4ø�ñgö×ü!ð³áÿ�¾%ø²o‰Ÿoáð¿Ãÿ ë¾2ñ¶6:�ãÞÞÇ¢xrÃRÔžÒÍ^êåmŒ6êÊÒº des…<\eRq„y&¹§%Ý­äÒÔü6[�?>øÙ?öÏøað?þ �û`~Íÿ¼eûxŽÇÄ~-ø“áO�úoÅïhÖzTð^�âýS]Y|Q¬ë>!ÔµÍ+BðÖ•k}u§Û_"[4V‘ÃeYÏëj•qØjô㉋Œa*IÓ‹w擊^êQI¹6“°–ÎÉ­?C ö‘ý–þ/j?ðC/ÙKá_…g‰—ÿü9ñ'Bñˆ>h œ÷CTÓÛT½Ô4è„‚÷O725¦j�zk5ÄT•h*r¦Ò›©GeNÉI¾W³²O£½Õ¡öíÕðÇ¿¶·ü#Ä¿ >xÇQð—ÂÏM¤øóÄ^ð»¨xáß„t­sáIÑ,¼c¬èz\ú…4+QâF°�\¹±²ŽÖš/‘/HåÂÖŠÂæ1©V*U"œ¦”§&ªs8¦ï&ô½¯ÓÈÖ'ç7Ã/þÖ?±ç�?o¯Ø¿Sÿ‚}üMý õÏÚ ÿâ ÿƒ¾6ø{ÂÓë> ×ôGDÔô}'Uñˆ!Ðot[ë=>:ðž�oªØø–߯z½Ö‚tÍ/ZÔìæƒ¶¤°ø™á1+ *Š‚•)JÒM4ÚŠºi¿‚NÎ<ª÷i1+««^å 'öeý¤cý•?à�^“ö}øßˆ>þÕ_|Eñ3B…<]cá߇õÚÃÚÕ†»ã­1´{áûF†mZÏS×àÓì®tÈ¥¿†wµ�å סõŒÊ^Ú•ªaéÆÚBÓj‹MAÞÒièÒ»¾�ghè÷?PàœŸ ~*øþ ÿJñ¯�~üAðƒ~ üKÓoüâßx3Ä~ðÏ�ìcñ¯ÄK§½ð†½«i¶šW‰mÖöÊåî4[»ØVÞîÖbâ;ˆ™ø1µ)Ï€Œg JjqŒ¢åË $“n;=í°ÖìýƯ,° š¿mcoÚì§öZý¡ÿõOøÊ½þÿ’³…ì§áïý\`Ï;8ÿ‘>oÿb¬ËÿP«Ÿç`–2ÏõÎÜŒuÏ÷'§O¯÷çõéä;êÿ­Hóœ“Ôúó××¾08Æ•!‰Ç§#?—lgÛ§^�=ÿ® ¹ã<þgõ>ØþyäÒwÓúÿ‡‰s»ßƒžÞ¿áÛØv¤M‰ B®ZFÀy#=“�3øÒ¿Rºjui‘­åâ‰/‚Ö>0Kï~cŒ&v®[škM^ÿ×õÿ&Í,“Ø\M#�|õbGÃGò�@1Ç_^¦�î¾b^[•¦Hµh|—";¸Áò%$âN>ë�S´ÿ´>ðî(z­G¯õùÁ9)¢–h¦R’/ÊÊyã?{<äü¤vÁÖÈý�§ñëž�ý8ôÆzso%¼­ÈRXÎ ö<ðW ­Ù‡Û¥-�k±P‚ שï�¯òï@ ŸSÀÿ<ÜóÍ(ã?×Û··¨úñÍ>CÓÓŸON½ãÛùa=zýsÛ¿×äñ�z?Pûöü½?/ÈЪ¸ç¶z€9ïž3ÇsÛ¹À ;“œ�nü�ï¸Zö?øKÂÿ|1ý‰¢“¥|NÒ�åÜ0ÝÞ¹°ñ­‰wœZÚ‰ßȰÕ4ø1PÄ"ŽtŒÏ;J’Ïq¦þ ÇqÆ>ñ‚â K:ð:X zø5™x™*tðÏŒxz_YÌòlÏåZ½jÒ­SR¬pøeFtpØlÛòN*âž$àN$YÆqlÏÃŒÍ`ðµjáppXÞƨB‹Äâ]{|vYŽ­zµjÕu*Q©QP ©Ê� ‡Qÿï�Zo?dÕ~.ê–œ Åueà+¨»�ÞCq¯Ï ÿ¶‘#¶Gþ&ÿÿ ¿HüÛþc²r|v¿ÆÁf&f8*Ý?‡_ Ã8jôÿ¹RµHôÌü"|×ü(xÕ˜ÌV[áV[Šÿ§˜\gã0µ?íÊ´2:aýÙÔœzcü%|ý4÷:…Ô÷·ÓÍssu4“ÜÜÜHÒ\\Ï+$’Y$%ÞI™™Ø³1$ç5ýG‚Áá2ü.€ÃPÁà°t)a°˜L-(QÃáðô`©Ñ¡B�8Æ©S„cBQŒRI¼áðØ|† F– †¥N†B¥F…QP§J•8%S„Œc”RI+"H¡’æXííÒI¦šD‚!�¥–Ydp‘Åh É$ŽUUQY݈ WD¦’r”£Å7&ÚJ)+¶ÛÑ$®ÛnÈÝ&Ý’m¶’¶·od­ß¡ýEx»Æ²—ì[â?Øà¯ÄÚ;âÂÿŠ_°N™£|@ø…ðóÀañî‹âŠmt?üQÒ¼Eâûé �KAÕfðm«E§ßÞè¾Õ&šÚïϹû=¿òöÅ\i†ãÜë-áÌ»3Êøò­l¿/Ì1ùÔ°ð¹^M*ø ®® ,%oáפ±“½Jp­ˆ¤”£hsKõZÕòŒ’§àq9–# ‹áøÃ‰Ãað+ ¸¼liâ1p«YV‡ÅNnŠ÷dáNM§weËi_|9ðwö–ÿ‚¡þË_ üAáßxÓö½ýŸ,|eûkÚ¥�‡4ßø'Ç÷²xÿYøYá?j³Ã>$Óµ[ßi÷—6�êçÁ·3ÜA´s/U\çœp׆SšáñŒñLÑ…)â*`q¸,ׇ¥75JPÆV”#9RúäcÉÉÄÊ*X,ÏŠ²¬%Jtëç9tkä³”ãJèb%õ‰á(Ô›I:±œ¨ÁI¥?bÛi+Ÿ h¿?h¯ØgÃÿu¿ÛÆÚwÃ��—_µ¿Â¯ø‡ö?Ö¼pÞ ñ��4Ox�DÕ<[ñ=¾øhk¾O ÚèZ-î�.³­êºuýåд²‚ÆhuM]Cîkgü9ÇŒú�`ªæYìxK5ÁḾŽêø<|f½,&Yý§‰ö—‰•zÐÄ*4)T§óÎSR¥YSðiåù–EO/žs^8lÎ0•ªäÓ¯í+â!F­9ÖÅ}V—´¥ì•8J›©9ÆMòÅE©ÁËê/Úö;ý¸¼Sûtüfý²~ü`ð÷Ã/‚Þ#½ñ¯ÅoþÛòü^´Ò¾èuO^¦ƒ§Câ_ _k~-‡f¶øq�£øvöi/öƒCÿ‰Š|¶AÆ…àl›ƒ³<£™çXx`²¬w¬¢Us—â¿j0ÚEâMR›Ÿ ÌeÑtøàI|C�çç3Æp׈ÜI™f>Oñwà�õ 2ÚJ/ÚFÆ;K]{_ð�-|YŸ†üTúÕ–©y.›­\ÜþÍ„_j—æðϱœeƒÅ¬?åkƒqñ|]‘d1Êsìm:²tß ÍÊT(c1ÒÂ9âpªŒéAT£ÛÚ?gO›1ÁË/£’W¢êä·�S•Ÿ0Ì3/¡(¥%™Å%R¥ :¬£J¯´Œ¤á6þÍ/Jý«ÿgÿÂ…ý¸þ6|Yø[­~ÄÿµK]X×þ!|ý£¤ñì·ûvø—[ñL—Mc§|/ñßü$RYøœ\j-𽕭Á“LŸV]W^µ¶¾�SÒu;…3ü7ö÷d¹NiG�rÚR¯G—ç<8°üQÀ¸j8Uz™žWSÃrÓÂb§(Ú¤i{*”:´ús|¾§ö~{ŽÆa'‘⦩Φ'™:™VR¥Vùc…¨ý£�[ʵ(§î¹óÔQ’”%ù§ÿaÕôMþ %ð6]wYÒô85-+âÞ…k{¬_[i¶2júÿÁÏi.žnî䊹ÔõKËM>Âp÷w×6ö°,“Ímú_Œ´kVðïq€­Z§$“…:P�J’µ¡ÊRj1m|¿NâL©8SŒ¡Œ¦¥9(Çž¦ G™éyNJ1]dÒZ´�¥ÿfoÙÿâÿ†ÿg_ø('üöïK²ø_ûnü@‹à7�<;ðÓ]ñO‡´�ü[øqá›ÛŸx‡áÿ‡ƒu©�SÐðàÖÌÚ厱sgqj4èu«�;æx›ˆ2ŒOxâjÏ4àœϰXŒÊ†[ ”æ8˜G ‡Çâpò¢«Æ—·§ì~³ì9hNŒg{IP�OS+˱”²Þ"á×ásÌBËëÓÂÔ«N1˜jRujaéTSön~Î~ÓÙsÞ¤fÓ\ªn<ÇÅÿ‡þ3ý’¿à–:ÿìåûQÝiz7Ɖ´·…þ#|ø}âm#Ä~5øcá=AºµñwÄGKÒ¯uH<¥ø¨µÖ�khn —Q—W’õ-š[­TÁÕ”f>-ñKÄ|/µ²l³†±YvsžC [‚Ìñuñ–/§V¬)KW îÖœù$©ª*IF—6XÌ=|£…*e¹«„1¸¬Î–'€•XU¯…£ mVÄJ”•UÖWNNnIk;s?ðMÿ튲Ÿíùû(|#ñ.—á�Úã~�ð�Tøa¦^kú_…u‹žð7ˆõ{Ïˆß ´j—6Ūj~¿ºUÑ>ßnž ³Õ/mµƒÃðk—–Ý>#:ygpæØj¸®É1½,ά(UÅSÊ1xì=eÙ­|=(ÎN•,E8Þ¿³“ÃΔ%M3ð'Ãφþ/†ãAñå¯Ã/Žšö­ñ+ž×|s§xï_Фˆ§Š¦Õum@¿½oÙtدumßî³Ðà¬_‚XüÞ¾aC&È0|O‚Çf–ƾYžG‡£–á1ô051ðÃ×NøUJ•jð‚ÃNÕ)¹/ êg”x烆¦70¯•W¡‡ÃV½0Åå´«R£Zxzª§ÕêOhûXÒ§:Š ácSž®_ŽÎxo(ÁeQU«eñô³\¾5hÓ«OV»•Lá:��XrûHF¥ß#œ£×µqû—Tð·‹ü ñƒþ úðW�|_¤øßÆ>Ÿã/‡¼G®hž$±ñ~�¥£ßx"Â_ Câ]2ÿTÓµ‰|!_ÞÝéú…Ý‘½ðýÊZÌ`HÀøZx¼;(ñÿ€ÁÕÀàñ‹&ÄaèVÃTÁÔ•*´ñµ*Xj”éT¢±ÎOT§ òb"ä¹›=ùQ­‡ÆxyCZëÑúí*³§R5 ¥ P‹¤ªÆSŒÝ { J2”y©´��‹µ-oAðçì=û`ø‹Å:Y×<1 ÿÁd4�gÄz*¤r6¯ ésý»WÓr²DæÿO‚âÐ$Œ‘·›‡eRM}•:5ñ1Ìrìg.'*Æð�²ünoS‰ÅMJž YQxÊ•åQbècÖ6›‹q�:ð©JúLU'_:YÖ%Ãbh·OCˆjg¸š8Ò¥J-J½:nj„`¢èÔúOXÊœ£)ŸWz_Š¿à °ÏÆï‡²e—„äø¿aû}üOý >+|ðGŠlô‰ð«] CFðç‹tkÍ:ëY¼ø©$Þ&¸ðŒ—ÐÇ«Á«¨Š¹¡§â�,n‹x;‰'šÖÈò|4ÀÏ<†OK<£’f®_g[„­ ‘£ —.8µèº.î PáIЯ“çYdp�ÇãkÕÂ׎XÙà'ŽÃÒ¿4)U„ ç,<¯UÑæ´Ôö{@xòóRøCü›öf׿f¿†Ÿ²üºŸüàÿÆ�ü ÿ†�ñ÷Ç�¾ ³�Æ…5mG]Ñ|A ^èÞð'ާ¾´ÔôË ˆ2>¥¬Ø]êQøIo¤Öõ+?ŸÀžnüEâjI™q:§ÀÆKˆÍÿÕÌG’ãfðu1TiЭ‡ÄB¶;�Œ'J¬å—¥N�HÓx·FœýòžýZÊêe˜\©ËˆpXêX/í,F;A*Ñ¥9T…Zr††!ÉJX‹ÊqrTTœä¹o€ž+ñ<ÿðq·Š$ŸÄ:ÔÒ_üyý¡|)zÒêWrÏ hß ¾!Ziºß).•m¢h°éÚd¡í,WHÒÍ´Q5…«Eןap±ú:áTpôb¡‘pö* S‚äÄÖÌòùÖÄBËÝ­VUë:•§?mW™µRWË/«Uø“Uº“|ØüÊ”¯9{Ô¡…ĨSzëN œbýØòFÉr«|ÍÿáñWˆõßÚþ 'm­ëº¶±�?cÛ+Pñ¤z¥ýÆ ž(Ôbkkøµ-l]I/ö†§ åÝäÑjWï¢û}òG:Ç}x“}/ˆØ\=ðòThR£,ðu<¥N4þ«MóSt¨ò¥ìé8Btãh?gM¸Þqò¸j­Z™�©ÔœÖ#%Î¥_šN^ÖJÒS©wïK™É©?ysJÏÞ•ý;âÿÀ¯�¿·Çìmû^þÇv6ÿ|!ð áÿ >.|+Ò‹â=kÃÉicñ Î5«O¼³ÚÙéVßk¿¹±Šîk›Ÿ3'ÏrNã=‡T–[ŒÏóxæ¹NkWŒ¯K4ɧG÷5l=Cœòù¹Pž(ÎueÉN3pQ�^7Žâ —‡¥“Ebhåø7„Åá!^�9áqª¼ÄU…IÓåŽ!%5U¶£¥'fßév‰¥kºü¿þ¯ øŸÆz_ÄOè_±��4=Æú&µ‰4�kGÀÿŒ:v£ªiþ#‚âòÛOwk/—®¥Ìɬ:��ý¦¿5­V… |g¯…ÁÕË°ÕøË_�¯Eáªá¨ÖÎòz”éTÃJ0xyÆW â½�ðì¹O¦§ ”øŸ‚iÕ¯ MZy."�J🵅YÃ�Œ§©µQ6�ª]óüWÔüdøŽãK> 9ëÿ1ñ¿Oû"š×á×è?ý—.ÿ“Ï�ÿ³k�ÿÕÕâñ?òDPÿ²ž¿þ Ô9OØ{ŸØ;þ Ëÿd£öqü?âò]ŸÓõýk«�ÿä»ð£þƼGÿªxä_ò âïûËõ5ŸfþÖ_²çí'ûw|@ý™>>þÅÙþ6ø ¥| ø5àÿëšÄ� xgKýš¼EðóG…Ô쎽s{a¥<—H¶ƒGmOP·´·“ãxOŠ8o�rþ&È8ÓÚ`³ê¹æsŒÆÐ¯—bq5x—˜Uo ˆÂT¥‡©GOJ~Â0�[EóûoeNS’ö³|«3Ïñ9^a‘ò×ÀC‚£B¥þË_|¿´Æÿ~Í:Ã�麥—…íÿh+ï‚vkÇ¿ø/Åm%��Ãøª(eÐáû5Ôv<±ûF¤×þµ—Wƒç09nc™W…YïeØÇÃù&?‰+æ8:”§‰—Ã;›–C‹Æá-9Åa\•ysEÔÀO–šŒ1rTeé×Åa³|_åùV&�öŽ;–SÃWŒ£If2ÀÆÙ…o¿l—³V|µãy^TSšùË@ýœ¿hÙ‹þëÿðí`ðž­¨ø»ö`ñN�ðnãžñ‰<c¨ünð-�ߌõ�ú®¯ÿÕ§ÄItË{ &=BâÞçTÿ„P»K(â�gºú,GðÿxÁáÖa�sbéSÂq>œG ˆÃáñµ)ä˜éÃF¶"•¬Ï/Ue:®œe_^§6ß,|Úync•ðga³ Qœ«eUià�jU*ÐŒ±Ô"ëÎç?d±. 0æiÏêò—*Z¿¯<5ðgâƽ[Áh- Að5Ö�û8Éy¥ÿÁ[ÿc?Ú[Vð׃´¿ xáÞ¥§i¶<â{"][V¸x‡‡|c¦èš…õ9TŸM†ÞßNSw¥ü–'9ËòZXÌ£‡ë×ÇF·¨U𛌸jŽ'WˆÌ)Ô©S.ÇaªVT©E?¬`êV¯Š¤½”jÊR©hÕö)à±éÑÆf0§AÃ-æ‡ä™�JTaFžqŒq8z±ƒœÛ^δ)Ó¥7Îâ’�Ü?‘qüýýsô~‡G8þµ?ù}}{~œŸ¡ÇL€!=ý±Çåü¿ 2zçŸåù“ÓÜzé@â8ãùuúsŽ£¶EÇÿª€óý?SÿÖ üýÏùï@åïßòíéþMý?!øPþϧoçéEÀ3#ÿ­þE¯çúwþ_•ú}=Oòúôê~”_úþ¿¦z÷§<Œÿœàõ_Ðzÿõ³×¦qÏCõLöÇãõ=þ˜ü:‘Þ€'§ð§åü¨¸ÅSÜcŒçÓ’àð3Ï=º)]~"þ¿¯ëó›œp:üÇŒ�cŸ£ g‘œ ›Ñ¿ëþð*Ý?ዚUÖ‚’Oˆ-u m'„Ç æ—q wÚuÆåeºKk¤k]F"«²k)¦±yTƒ¡jÊŲ”Ò½ïòûïÿO^�(Ô·îå§v¦Ÿ,–Í6µ‹ê¤”’ëY~ʱÄ_ÚóâøoÀZΕoàM)-¯üqñâ)ÚÓÂ:\Ó*Ggu¢“ íÇ‹5(–át ÍŠÏT–Òúo혴­;QÔí? ñÓÇNð3…–w�FY–o˜Ê¶‡8s Z�,no�§Kžs©)ó<U„r¤ó,ÅÒ­2­B•*Œ^# †­ú/†Þç>#çO-À/¨àð‘§[6ÍkÒ�L69òÅSp´q8Êê3XL=)Vä©:’£B•j´ÿ«oÙ÷ö9ø û,hPi¿ ¼gˆ>Ëöm_â¹¶«ãÍ{w3ýyíâ{KI›èú4Z^‹Ôxôá)y_ü1ñ‹Ço¼bÇÖÄñ‡b'•ªÞ×Ã|êà¸o-åÒŸÕòÈÕ”+צ´Xì|±˜ù]ÆX§XGý à/ ¸G€ðÐ¥‘e”£Œtýž#8ÅÆŒÛ‹Úã©Ó“×êøhЫ&¨§výºÿ¿NŸç©ÿ=}ëùÇÔýo ÓúùÀ8»þw~<ÿ?ÌóÁïÅ|Ž7¯õßçØ÷ðÝ�iŸÙ#àoí? É¥|Nð�¬ºÔ2h¾:ÑV +ÆþpŽ‘› v8^K«æ“CÕãÔ´+‰)çÓ^êÚÖx~«Ã¯üBð‡3XîΪÃ9©cø{êc83‡4e%‰Ë¥R1£]ò(Ç0ÀÏ ˜Òƒ�:x¨Ò«V�O'м=án;Á¼6{—BXˆÅ¬.k…PÃæ˜9Y¤èâ”$êRW»Ãb#_ 7Ë9Ðs„%ä¿ö³ý“¾!~Èß—Â^,xõ¿ k‘ÝjñΟm=¾•âm*ÞàÅ$SG q¦ø‡M[ÿnhfæé¬êÒ{{»Ý6öÂþëý�ð?ÇñÆ%�d‘–_œe³£…â>ÅV§S”cjÒæ…Js‡+ÅåX·¯-̽�âUÔªÐÃbðøœ5àŸ¼8Î|9Î#—æ8¬23­”æ´iÎ|vå”e_Øch^[ÂsÔt]Js…J´*Ñ­SÔÿb p~%�û;ôñ_¸ë×·OZý'ˆ?æþæ?÷ù­o³ÿo~Ÿ×sôß ãúséÛ¨éŸQšùÃ>ðÅŠ¿òT>$ØûãýHuý þç„ÿ°júj\~ÿ…~G]# ÿZÚü¬î ( € ( € ( “�ÿëã‘“Ç×Ú€(Í0ž?R}3Ðtä“Ó·\P%Íú¡9o\ûù?‡�LPÚÀ\�ؾq�BsßÎÆ;dÑqÙ”$×G|O÷ãÐÛ§9ôàR¸Yw!þÞL}óƒï×<Ï~>½°I¢è,»‹ý¾½7œõûÝ;ôíœtúQt]ÿ¯¸?·TõÄžsî '¾:`‚3Ž(¸YwíÕï'¨ûÞ�=Æq�ùf‹ ²î]^…ù<ýì†1žŸ�AeÜ?·“'çÜ8èÞ½:r:ä£ë’è,»ÿ_×�}sŸ3©þ÷^øuÀüÏ¢è,»‹ýº¹8�Ìã¾°9Èϯ']—q�¯/wàç ±çøsØà篨›A§õÿ eO¯ÆÀ“ñµ»ŽAÊŽ ò=UH Ápþ¾fƽ,œÓqÎížq둃·Žy£Wè#—¿×`qÔóÏ^x¸*IPpH#4�º½Jwµ»F¥®)–Á9Æû§€HÝwu$Ž™›öDØïþë«åØå†´.'ÔäsžyêzݳÓö:ž’üÑ+ø±íuýv>…‹ZWà¸<äà�Ã=¸Ç<×’uŸ|sÓ?kK_ŽÐkŸ !ðfµá­ãUÓ|Mw¡¿…4ízÕï´Û¸"McP²Ôtýö6º^¥+ø~æÔÜ\]JÓy¬nþ}ÄyV{‰Í•L¶2­…©‡¤çµiÆ…*Ñs„£Ôœ\oÓ›öKYIÞ÷gåÜW“qF+<�\ž2Ä`«ahʤ+פ°´qu)N1…Z±”/Nª?b—4¦î›¹Ú~É~>|6ø�ñâÆøoXoˆÚ=°Ôì´ÍRÿQÕ·l5§Ò¤t:Už“k¦iºmƯaometéh’Û[Z@–±ü½|/�æ¹N+ˆÇVÃʺ1R§J¤çSÛBiÓ“½8ÁB0•XÚ2væI+¼ÃYæIŽÇã3LF¤1øxFt¨Õ©R¯·§UJ”�éBš§ s­£'nh¨®[³í›é�¯&ãJ!UeµYdPª>Wv´—æÀr`½*ó*’xÚëë9RQ’ŠU°±«V)E{³œ°u›’ëûÆ–ÞïºóZ³xüBx¬�rÉEF¾5ªÅ(«F¤å‚®Ü—_ÞI-½ß…UÞßóó£àü�\<òÿ ¬›ÿiÿó¸ó½¤¿è+#ÿÃ}?þv)¦jR"º !‘Õ]XZ[á•€*GúB"½(ey�HFpþÈ”'ÎXL5¥$â×ûÍ4ÑêÃ)ÍjB!ý‰(TŒg ,ÒŒ’”d¿Ø6i¦‡ejŸÝÒðßÿ�꿲s^ÙGþa¿ùˆ¯ìlãùr_ü"Âÿó±i§D° ¼µ°’|¶æŽÖ¤díÿ–J22B¨öî}Œ&]J4 ±˜\JéËžTð´TZæ|¿òê µ]¨Ey=ß¹‚ÊèÃã°™u\Jrç�,%¹Ÿ*þ j6M¨Ey?‰Ùû�üùZà4?üEtÿgà?è ÿ„Ôù¯û7.ÿ  þÐÿåaö ùò´ÿÀhøŠ?³ðô„ÿÂj?ü€fåßô‚ÿÂZü¬>Ácÿ>VŸø ÿGö~þ€°ŸøMGÿ�ìÜ»þ€0_øKCÿ•“ÇP®ÈbŽ$Ém±¢¢äðNÕdާ®Št©Q�%téBíòÓ„a½ß,RWvWv¾‡E*4hG’�*tavù)B4ãw»å‚JîÊî×v!¾ÿ�+Ïúõ¸ÿÑO[Òþ-?úùý)/†_á‘üXÿÁÆòpÿ³ÿ�ƒ—'ßÇ:·AÇ<„uç"¿®|ÿ‘6qÿcJú‹Hü�?ß°_ö ÿôôÏçš>zà&ì3Œt9ÉàsÐäWîqþ¿¯ë¡ð/ëÏú·‘y:ŽNI’3ÏS“œúqž\g¡Ãþfoeý^e´ûRyÎ8ã=zÀϧS»X¿Ì†w~øâ�As{¦XÅk¡iò,z·Šu«ËmÂÚK8ܱê:þ§%¶›ÓF­ôÈ¥›T¾*Éacu3,l§R1Ñ¶Ûøb“”忢“my½V�E½RÓ«nÉz½–Ÿ>ÝŒßéš&�©%†ƒâh|WvÑÍ^ÓK¿ÒôÖÔKH.!ÒFª Õ/´Ø£uCMÑn.%y“û.(¡Šâæá'(ÞQåÕèÚnÞ|·W¾é7Ñß[)i'£¿�­×§V¼íßB=oÅ>!ñ"iQëÚΡ«C¡i–š.�íÔ“[izU”1[ÛXiöì|‹8p«H � Äáîn —I+‘Œc~X¥Í')Y%v÷o«zú%¦Èm¹Zí»++ô_×ù˜Ïשï�¯ê*É úžùàöàžhuÿ=¿—¯ãÇ43ø{~}ãÛùP“ׯ×=»ýqîO÷£õÏ¿oËÓòü�N™èN;ôôÏÏnäK€™ã#¸íõü¿Q@ =3ÿÖã?¦úüÐçë�ËüsÇ~Ç‚€œÿžý�.zõç¿_S�åþx¢àöÇã�§¯ôÇ=úQp;öÎ;ã9'·à@<œ&ÿ¯ëOóÃéלðyÁÇl`ƒ’q�ƒ×,oúþ¾â³Œu•+ÇL3Ó°�Çñt&±“ÖÖþ¾_ÖÝ Kúþ¿3úoÿƒp'ý²:sìøGýõñ´÷9ý:cȯç?~>Öþî}ùä§é^h³oû�×ÿ t?§ýã�ŸòÏ#©çŽ£¾8õ¯ç³ôƒÄzƒâÝ Wð¿Š4‹ úõ…Æ™¬èºµ¬7ºn§§ÞFb¸´¼µœ�ØÚxŠøþÅRÄaªNUE˜VöŒ:”®©`s ²t14£v¡tðõiÓ‚çÄâª7#àðM¯Ú«[ø¯áŸ üGø/ão øM¯…ߊ<@b´¼Ò¢Ñ¬GÚo--5­÷PÓŸQÔÑWN°]Hââä\mh­çdü/Ä\‹ÄŽáLëÃ\žgüI,èd™v[�y�´Ìk§Oˆ®ðò�„ÁɼV!Ô©Ô§IЄ�ZÔã/Ÿð¯Àÿ‰7ø{ÂYV)áz3§–`¨eù^Y”áe—å8. �<>«×¥F� % éÑ£¡NœiÆŠM}�àïè~Ò×KÑ  $¼»›d——÷Jù·2¢¨bD1"¬¦Dq‚Òÿdüð;€¼á|%À¹|©Æ¬áŠÎó¼s¥[<â,Æ0ö^ͱtéÒŒýœ\©á0t)ÑÀàiJpÂáéÊ­yÕþNã4Ï8ã5–k�WRpR¥ƒÁQR† /ùs{-)JMs4�ZÕ%:Õ¤“©RJ0ŒzÃ&=ºÏ~¯¦NqœWìÉC|9øpÚÃx…þø)µö¿þÕmpø[Bm`ê�?ÚN¢u3`oZüÝ~ÿížÚ ÀËæ™9®ÿíLÏØý[ûGõgìVë˜�aì¹y=—²öžÏÙòû¼œ¼¼ºZÆTÂûOkõl?µrçöžÆŸ?=ïÎçËÍÍ}y¯{ë{š0x?Á¶ö:6™oá/ A§xrÿûWÃÖèZ\VZ¦.%¹þÒÑí#µX4»ñss=À¼±ŽÞãÏži|Ã$ŽÍ”±ØéT¯VXÌTªâ©ûMIb+:˜Š\ªʼÜù«SåŒcÉQÊ<±Œmd‘KAFœ J¥ÏJ*œiÎíóÓŠ�¡+¶ù¢“»n÷e´ðÿ‡#¹Öo"Ð4h¯Û™4ý­¢½¥Óió^é´÷ OÁž Öô­/BÖ|!á�_DÑZÐèÚ>©áý&ÿJÒZÂ%‚Àéz}ݤ¶–&ÊXlͬ0›h•c‡b€KŽ¡Z®"†7F½~o^–&µ:Õ½£æ©íjBju=¤›”ùå.vÛ•Øç‡ÃÔ„)Ô¡FtéòòS�8JåV�$Zq�*Ò<©Ym¢5¥ÒtIõ-;YŸGÓ§Õôˆ®mô­Vk Y5.Þõ;Ë}>õá760ÝÄ‹ÌVÒÄ“¢ªÈ¬ª²�zñ¥V„kU�ÒŒ«QUf©U”á*”Ô¹*8;¸¹&âõMéÓr…G9Á5 ¸ÅÎ ZIBM^*KIY¤Öãôý/HÒŸP“JÒôí5õ[ùµ]RK +['ÔõK„Ž;�GPh#ŒÞßÏQ$×—eÄ©k$‡baT¯Z²¦«V«UQ¦¨ÑU*Nj•(¶ãJš“|”âÛj´Sm¥«Âæp„`ç'9¸ÅGžnל¬—4�’rwnÛšBA×vyÇSî}3Žãžžµ‘GñÙûTøß÷‚Ùº·íWû7 ޱ¾¯nsŒ•àg�Ã5ýCÃm¯qßöMñŸÝíóÄÿÌü£3_ñ�áßýM2_ý'ëøÙØÝ/¬\Û[ÞÛOgwW6·PÉosmŸ_òißúþº?Ïùôíüý(¸S�Оç©ýoOÓ480ª7ÊØ$Œ–'#äú`S»ÖàuV61éQ‹ÛÐõÇî-ø>^@Ã0è`î|íPv®XÓZ_×§ü>«B'–K‰Y˜�Ç’s�ܪŒô`Æyæ›®i)Η68Q:}9Lqž¹ÆqÏ׸ŸçúÚþ&PbÛ�Aá†A=sž0Gá×Þ˜äŽ=Z …c½Œ7“6€>ã“ÉÏuæQœŠO__ë°¶~_×õùœ¤ÑIo#E2’6!�úçŒpÈ=¸¨Ø­Î¥Ä:¬B ÊÇyÿG¸ÇÞÇü²“ØçžH9ܸa†{‹Uýwþ´ÿ#“¸·– “d‰Æqž ó•8Êž2 Kíý^Ÿ-JéýZpz ƒÏÿ«Ûú{Ÿ×õóþ¡þdú\d ?¯êÝ¿@$“8�=;gôüº�Á¥ý_×â]ǧùÀú`s×úÓÿ‡ _Öß™*�Ô�ó×òöä÷4]¿¦3äàqßòÏÞœŒâ—õ×úþºÌãùãÛž9ç§\ÿ‰§ú‡ôÉ­î®lç†êÒy­n­¥Iíîm¥x.-æŒîŠhgˆ¬�Ë€É$l ÏŠÂaqølF †ÃãpXº50ø¬&.�„ÃÑÂáhQÃa°ôáF†JhP£N*éQ£MF�*P‚Q„!Æ1IE%a¥¹Æ8€8ãõÉõãë]›_×â;!»àÿè\vã¨éïßš7õþ¾æƒò¨ÿG§$wêzw?¯ëúAÿk0�w¼~êöëÔ‘Æàÿ…—õù[Pæòêöcqyq5ÔÄ2ÜM$ò¹ »ä,ÛG s�Е1Œb­Æ {F*+]ôZÃ�·'vÛ~o·›ù�ûDþGÙ|é¾Íç}£ìÞcˆ>Ñåˆüÿ$7•æù»m ³ �¤ÑËnk.n^^nU~[ÞÜÛÚúÛkë«Ý­}7µô¿{m{|ÂÞêæÎUšÒâ{ipÊ%·šHd ÝTI+í<2rùä~=y=:~t_úÞÿ×�­Äë Û¬Òˆ$q$� ]awLw�\#ºŽ™w.HÈU£Ì¥eÌ•”¬¹’}¶—ëaÝÚ×v}.ìû; os=¬É=´òÛΛ¶Ko$�Ê›”£‘2îFdb­†F*x8*J2‹RŠ”]®¤“NÎë}ìÒ{im,$ÚÕhû§®·ìCÏá�Ï\ãŸp~£š`(r¬Y”£¬¬U•�È`F`@ ŽAƧå½ô×[úùwøqòÍ-Ä�4ò¼ÒÈŤ–gi$r{»±fv#x“Î2JJ*ÑJ)l¢’KÉ[EoO0m·­Ûî÷ìFsôý:óú~]@àæ�ÿ¯ë@þ¿¯ëü„î=?ÎÓž¿ÖŸü8[úþ¶üÉ¢¸ž/‘4Ðyñ<y2<~tc|2la¾Ú7ÄÛ•ð /-FVæJ\­Is%¤–ÒWÚK£V·@ÕlíugÓGÑ÷þ¼ˆ�ç¯â?úÙã×=¹ÅWõý_pqüñíÏóÓ®ÄÑú‡ôÃ<`�þ·r{{ð}=èþ¿¯;õý~±\O ËSK\&ÉÒ)hÁdʤ T0ÈW ¹À¤Ô[MÅ>W£jî/¼o³ÿ†ÚM&Õ÷óíê½O©eO‹_¾ø‡ÆZ?í'ð5¾2ü1øƒá�øGnïü9ªCá µXnÒóNñÏÂízñ&ÓbÖ¬Ï�GŸ¬Dö¢öñ-læ±Ô~_Šr¬ÿ2ÃàëpÞwý�™åø¯¬Bž"”±^gJPp©�Í(AªŽŒý× Ô›©E©rEÊ¢�?W)Ååøj•¡™à~»…ÄRönTçìñxY©sB¾£¼Ö©ÂiFjÜÍE8ËèÏŒµ—ìÙá_Ù“Æÿ²¯ìià��–øÓã x×ã�ÄÿÚ+_ð~£ãÿÛøéõ/ø/FѼ xoOÑ4�a£Ö&Õe˜êW7PÉ –Þ]ÎûœÉøW‰1\M‚âž1Çdµ1Y.‚É2ÎÃã)à0²ÇÁRÆã+VÇ·‰�z´S£J*œbÔ”¯KÒÆæÙe,®¾S’ÐÇF–6½øìVcRŒ±V¹P¡aÒ¥B~ÿ=ùäÕš×OÍur¶æÐ\N¶¯'œöÂgÍ.|׃w”ÒmU]åKmgWé\±æç勚VRå\Éjíͽ¼—­»üÅÝ­wmí}/ÞÛ\¯ŸóÛ¯¨ã€;­Wõø]ý_×asôþÓŒž§ô8~¿—_ëÌðïôì=1Žƒ�ÓŽI£úÛñþ¿õ‡ßÔôëî=xôÉpù_×�dqØý:úñÖ�ë}»¤œ{~€ w÷òã2_×õ¸?ä}1ÓŸcϯ$f—õ¯õýy‡õæ < c<ñÐg°ý~�iÿ_×õpþ¿0÷Ï®x½øèxÏB1êhþ¿¤ž}sëÏåžÝs×òÆP ‘Ôûþ¡íϧ_\?ëúèqü¿^¼ô÷8é�Äòþ¿¯òëúÔ3Ó¯^¿ç�n(îäëÛÜúœžxãü÷£úý??ø 'ñßÓ>øÏÓßžô}áÿúýEý=Ï\}@àg§_×ù~ ?�Ó<õê:~t^¿×�Ïè[©#€F9¯§OBZWül;lu?€ÏÜäƒ×�Aç Ê~_ðÿ×P_׿»•äbŽF1ŒþrqÔq÷[9ÀÁÍDŸô®R¿õr; K[ÔôýH³¸Ôµ]^þÓKÒôûDi®¯õ-Bâ;;++hTo–âææX`†5žY“Ï—�Æáð8\N7^ž „¡[ŠÄV’…*|=)U¯Z¬Ý”)Ò¥ Tœž‘Šm�X|=\EjXzåV½z°£Fœ4êU«(Â�8Ejå9Ê1ŠZ¶Ò[ŸÝ�ì�û2xwöKøàß„Ú:C>» ¢ëßuä æx“ÇÚ½¼x‡Q2$qî°µ’8´M'V–ÛÃÚ^•oq-ÍÒ\]ÜϧŽÞ(f^.x��ñn6S†U%€áÜœ”rÎÁÔ©» ¡)JÕêÆRÆãå£W1ÅâªS…*R§JŸúá·á8†2ì�£,L`±9¦%%Í‹ÌëÆ/U´•éA¨áðɦᅣF2”ê)Ô•_ÚSãxø-á} hšøÓâoÄ vßÁ ¼ÌV²ø£Å·ÿêšòæWŒXx{E„ÿhø‡T‘’+$Ti¡{˜dΙ�eJ6Kš¤åÉJÍ'ß´Vò}ú³õ¬?i+½!Í9v�êäö]~GŠ~Ðÿ´Ï†¾x'QðÖ§â;ý µ‡º¥ß†<à­#YñΠž4}×M¸M.ËI½š×ÃÃÄrÀ,/üSk¦Ûj6‘°)+¤ð/Ëc%­›\ÖÕ+½z½u·físÜî©;-›þ¿#�ø+ûJxwâç�ì<7aâKøÿ£øL›Å> ñ¦•©ø+UoEáÛGÔ¯%Ñ.tÛ ™¼<Úô„Þ_xjÎîÎÎÒuòR"öñ7Ëã Õå$ý›kÞ�ž�úÚöÚö¹íáfŸº­Ïmžš­¾WÞ×/üø¾ÿü3«>· Éàÿˆ ׯ<ñ#Á³ÜGrÚŠtÔŽI�•Ê; í T‚Xïô]EKEum#Å×k,ÍòÙ­a-%ÏN¤}¥)¥ñAÝY®’ŽªKtýl{ø ¾Ö:®YÂ\• þÌ•¶}SZÅõ¾‡“þØ?³ö�ûJüñ‡Ãkè-Fºö’k^Õnßì?é–÷hw«0æ+[©$“IÕHÝæi�òó lŸWà·ŠÙ�ƒž%äÏý‚üCŒ`cþ�ž0p?/IY ÿËÜOþKÿ”œÞÊ>zÿ#æMkW¼ñ³«kÚ‹FÚ†·©ßê÷Íb(šóRº–òèÇ$Gžg(€�‹…ÉÅ{táTáJå§Â7w|°ŠŠ»êì·4µ’]´û¶3*À(ýkkò³¸(¬~¯Gù_þ?þH¿i>ÿ‚ÿ £êô•ÿàsÿäƒÚO¿à¿È(ú½åøÿù ö“ïø/ò >¯Gù_þ?þH=¤ûþ ü‚�«ÑþWÿ�Ïÿ’i>ÿ‚ÿ £êô•ÿàsÿäƒÚO¿à¿È(ú½åøÿù ö“ïø/ò >¯Gù_þ?þH=¤ûþ ü‚�«ÑþWÿ�Ïÿ’i>ÿ‚ÿ £êô•ÿàsÿäƒÚO¿à¿È­;mœz~_¦{Ÿaœu¥õz_Êÿð9ÿòAí%ßð_ärú…Ø@FppOóéÔç#ŸÏòþ¯Gù_þ?þH9æúþ üŠžÑ¥ñV£:K,Ði–7½’1¶K‰&/åÙÁ)ÊÆXDÒ\Ê¡¤†ˆ‚9.bž.[¥JЄ}÷«|ó|«Ó›vû®›ltQNwrz-6Jî×íÐõ˜üáHÔ/ü#º<Øÿ–—v÷³÷®/yÜû´„×4¿™ýìéå�e÷!ÿðˆxOþ…ÿà“Mÿäj9¥üÒûØrDzû�Âá/úü;ÿ‚M3ÿ‘¨æ—óKïaËËîAÿ„¿èWðïþ 4ÏþF£š_Í/½‡,{/¹ü!þÿ¡_ÿø$Ó?ùŽi4¾ö±ì¾äðˆxKþ…ÿà“Mÿäj9¥üÒûØYv_røCü%ÿB¿‡ðI¦ò5Òþi}ì9cÙ}È?áð—ý þÿÁ&™ÿÈÔsKù¥÷°å]—܃þÿ ЯáßüiŸü�Kš_Ìþö±ì¾äð‡øKþ…ÿà“Lÿäj|Òþi}ì9cÙ}È?áð—ý ÞÿÁ&™ÿÈ´sKù¥÷°å]—Ü„>ð‰ëá_®‡¦ò-Òþi}ì9We÷!¿ð†x<õ🆿ðE¥ÿò-Òþi}ì,»/¹|àÓ×Â^?]JÿäJ\Òîþö]—܆ø(õð…Ž}|?¤Ÿý´£š_Ìþö±ì¾ä=<àØ±åøKÃ1àälÐt¤Áõm>ôùçksJݹ�¿0å�ò¯¹Â'ál<7¡'ûQé6¸÷WŽtoFV ;G4¿™ýì,»/¸à|SáñáÈ“TÒüçÓ|ØmîìÞV•¬ÚwAq Ó¹•­ÞWKya•ähÞHd‰’%•F°­%§+¨ú$â›ò¼š�Þ×ÞcZ.1r„Ú·¸œSjû§&¢­»»Z麜’mýć�1º ~^gNýr=úV¾Ö¯ýTÿÀèÿòÃ�ÚÖÿ ZŸø2‡ÿ-:Hâ·˜´’i±Èí‚Ò2Zb0 -¿<¤–?^MrTÃP«'R¦YNs–²”£…r“ï&çvüÞ§L.¬ÝJ¹M:•$ï)Ê8G)>ò“�Ûóz–þÇkÿ@˜¿ï‹_þ.§êx_úÑÿÁxOþLŸ¨àÿèMGÿàÿù2Ú¼Š­£ª¨ ª¯ À 08ºã9Å(Ç 8Æ)F1Œ¨%•’IU²Ih’Ñ#¶5*B1Œpu#¥Æ3èÆ)YF)UI$•’Z%¢Í—þ}¤ÿ¿�ñʯkWþ�ªàt?ùhýµoú«ÿƒ0ÿü´<ÙçÚOûùÿ£ÚÕÿ jŸøþZÚ·ýÕÿÁ˜þZl¿óí'ýüƒÿŽQíjÿÐ5Oü‡ÿ-m[þ�jÿàÌ?ÿ-6_ùö“þþAÿÇ(öµè§þCÿ–‡¶­ÿ@µðfÿ–‡›/üûIÿ ÿã”{Z¿ô Sÿ¡ÿËCÛVÿ Z¿ø3ÿËCÍ—þ}¤ÿ¿�ñÊ=­_ú©ÿ�Ðÿå¡í«Ð-_ü‡ÿå£o¿ãÊóþ½n?ôS×]/âÒÿ¯�ÿÒ‘¼¾…þGñaÿøÈÙûþÈÖ¥ÿ©¾±ùðÏjþ·ðAÿÂ6sÿc:ú‰Hü�?ß°_ö /OãOsùæBë�qž¼ã“÷sÇN£Û¿sŽëÓü��×õ¶ß‘è~ð¹â;I5V“KÐ<; ¯ ÇŠ‡×—õ§õÓô9ú~�yý?. psEÿ¯ë@þ¿¯ëü„î=?ÎÓž¿ÖŸü8[úþ¶üÅÏ=1ùóé�onOz?§Ð?¯ëúýzþ#ÿ­ž=sÛ‘œQý_×Üœ<{sÇ<ôëŸñ4~¡ý0Ï#ÿ­ÁžÞüOz?¯ëÎÁý_€™çg®?Ïq�Óµòòëúò óÓ¿Óëë“ëÇèþ¿¯ëósïÇóã·çœô£úþ»õýw¸gÿ¯éÛ¨üq߃ùŸ×ôÀPx=³Ž=yõéŒuæ¥ÿ_€~¢ç2N0sõù{ž¼ƒžppKÖÿÒܵýjV�cž{àž3Êœ#=202Y«&¿ëB“ÿ;}öþ¯kºðCÚÛàŸìáñ ㇂þ3øÇNøiñ‡Køy7†<]â[˜´ï Ûê^¸ñ¨¹Ò5­ny¦‹&£mã$žÂÿSx4²t»›k›ëk‰láºüSÆ>ÍóÌM�ʰ•qÏ*ža N WéãV Æ­*Nu£NX7Æ’•Uí ã ENPûž Í0y}|m eXÐX¸áÝ*µ�%*¿4'6í%Zñr´}Ö›MÆÿÓK~Üÿ±pàþ×?³.ýWo…ù<œ qœœçƒØt5üõþªqWýEÿ†<Ïÿ™OÑÿ¶2�úeßø]…ÿå¤'öçý‹�OÚçöf8ÿªïðÀñÁÏü�Ý3ÏëKýUâŸú&x‡ÿ ™Ÿÿ2�û_)ÿ¡¦]ÿ…¸oþZ1¿n�ظÿÍÜþÌ �Ïü_o…àþ?ñTduäöï쪼QÿDÏÿá“3ÿæPþ×Êèi—ávÿ–‰ÿ Ïûuÿ†¹ý™±ïñÛá~;wÿ„§¯C×ô9+ýUâ�ú&x‡ÿ ™Ÿÿ2‡ö¾SÿCL»ÿ pßü´_øn�Ø¿·ísû3ã¿ü_o…ütÎOü%y÷9ú?õWŠè™âü2füÊÚùOý rïü-ÃòÑíÏûísû3g�ù®ß Ï8éÿ#Gž(ÀéùxȧþªñGý\Cÿ†LÏÿ™Cû_)ÿ¡¦]ÿ…¸_þZ'ü7Gì]Çüe×ìÊ;ÿÉvø`2{ŸdŸQœõ¥þªñGý\Cÿ†\Ïÿ™Cû_)ÿ¡¦]ÿ…¸oþZ/ü7?ì_ßöºý™‡±øíð¿ßqçÅíÁ?N;?õ[Š?èšâü2füÊÛOý rïü.ÃòÐÿ†èý‹Æsû\þÌÀûüvø`N:ò?á)ÏNzu&—ú«ÅôMqþ3?þeí|§þ†¹wþa¿ùhÃsþÆ‘û\~̼cŸø^ß Èí�ùšb§#­ê¯Ñ3Ä?ødÌÿù”?µòŸúeßø[†ÿå¡ÿ ÑûÑÜþÌÜdÿ Ûá�¿ý ¹Á錀hÿUx£þ‰®"ÿÃ&iÿÌ¡ý¯”ÿÐ×.ÿÂì6¿ùTQût~ÅßøkŸÙ—ÿ·Âüvïÿ G\~ßRªÜQÿDÏá“4ÿæPþ×Êèk—ávÿ–’/íËûý­ÿfcÐññÛá~;ÈÐ9ÏåÏÿÕ^)ÿ¢kˆ¾Y&gÿÌ¡ý±”ÿÐÓ.ÿÂÜ7ÿ-qûw~ÅÖ¶ó\Ëû[~ÍÒC<²-·Æß‡7³•UX­-òHªèr¬¡�ùuð§&×ú¯Äº;;d³_zÁ´üšv}Õÿµò—ÿ3l¯ÿ?þ\?þKö4ÿ£½ý–?ñ">ûŸú½ü�ê¯Ñ/Ä¿ø`ÍÿùŒÚÙOý r¿ü8àÿùpŸðÚ± ÿ›½ý–?ñ">óeGú©Å_ôKq/þ3þcö¾QÿCl¯ÿ8?þ^/ü6—ìi×þ÷öXǯü4GÁÿþl¨ÿU8«þ‰n%ÿÃoÿÌaý¯”ÐÛ+ÿÃŽÿ—ˆ?m/ØÐœÚ÷öX'Ð~щü‡Œ¨ÿU8«þ‰n%ÿÃoÿÌaý¯”ÐÛ+ÿÃŽÿ—ŠmØÔg?µçì²1×?´?Áþ>¿ñYQþªqWýÜKÿ† ßÿ˜Ãû_(ÿ¡¶Wÿ‡ÿ/øm/Ø×8ÿ†¼ý–séÿ ð?—ü&TªœUÿD·ÿáƒ7ÿæ0þ×Ê?èm•ÿáÇÿËÃþKö4ÿ£½ý–?ñ">öëÿ3—j?ÕN*ÿ¢[‰ðÁ›ÿókåô6ÊÿðãƒÿåâÃi~ÆŸôw¿²Ç§üœGÁò9QþªqWýÜKÿ† ßÿ˜Ãû_(ÿ¡¶Wÿ‡ÿ/?mØÙŽö»ý–‰ë�ûCü'ò2£ýTâ¯ú%¸—ÿüßÿ˜Ãû_(ÿ¡¶Wÿ‡ÿ/þÚ_±ªœÚóöXÐþÑÁý|eGú©Å_ôKq/þ3þcí|£þ†Ù_þpü¼Oøm?ØÏþŽûöXÿĉø=ÿÍ•ê§Ñ-Ä¿ø�æÿüÆÚùGý ²¿ü8àÿùx§öÑý�@Éý¯?e�=OíðŸü&TªœUÿD·ÿáƒ7ÿæ0þ×Ê?èm•ÿáÇÿËÄÿ†ÓýŒÿèï¿e~zÆDüÿæÊ�õSŠ¿è–â_ü0fÿüÆÚùGý ²¿ü8àÿùxŸðÚŸ±Ÿý÷ì¯ÿ‰ð{ÿ›:?ÕN*ÿ¢[‰ðÁ›ÿókåô6ÊÿðãƒÿåâÿÃiþƇ§í{û,û¸�ƒßüÙQþªqWýÜKÿ† ßÿ˜Ãû_(ÿ¡¶Wÿ‡ÿ/ûiþÆ€àþ׿²À>‡öˆø=ŸýL¨ÿU8¯þ‰n&ÿÄ7ÿæ0þ×Ê?èm•ÿáÇÿËϘÿmOÛ[öAÙö›ÒtŸÚwà'еÏ|ø·à øwÁ| ãŸk&ñ¿€µÿ øwO±ð÷„uÝgY™.u�^Ê+»Õ²û—hÓj:�Í¥…µÅÌEÂ\%Å?ëOT©Ã™æŽ<Êq¸ŠøÜ«‚ÃÒÃ`±ø|V"¤ñºhÇ–�¸ÁÏž¬’§J3©(Åù¹Æq”ÿdæQŽg€«:¸ e tèc0õêέ|=JTãtjNnóœS—/,å'¦×ðŠМg$þ_BH=Ï^×ö¯üø?�øe…=:ñïÈ'�ÓŒrq‘ÐsÆDÿ¯?ë_�[úþ¿®ÁéëéŽz;®~¾¸¿óéýXD¿êðn‘þPdŒôÇ|ä�Àäc÷×üë°·þ¿à�e�ŒzLK{{‰/d‚så0K‘¿n=¢å°i¤’×úþ¿-öÿ‡ïýuô+I,—24³?^ý‡]¡Fxp=qÉ'š«ÿ_åÿøÓN£KgŽÀãñë�O~}9©ß¸¯òþ¿¯ÐØ´ŠK�6xãs:œq°žXŽ˜ï�ËŠ}?¯/ê߈'ßúþ½H?³/ç�úù‘Ÿ§;�¯ò¡6UÓ4Ûå!„@0$çÌ@F9ëÇ&…§áý~¥»�5õÚ�EuÄs¡V/R’N=3ÈÈÇ Ïõêyÿ_×üŒä§^‡·ò†¥?¼»_Öæƒ,:´" †]Æ·¹é¿¯É&;±Ž>«ÎA§¯“#m¯ë©ÈÜÛMo#E2”’2r <ñü'�ËÝXd¾¢£oR“*ô=¹#Ž>‡�~þã¦(¿¨~@úž˜N¸ëôçó¢ãþ¿¯ëpP8${~‰éÉïŸÄz!í�qŒðôöÎCøSëúü†qžØã¯×ßžŸÓ“Š/ýÃúþ¾îÁ�qÎ9çÐqù}:~\?¯ëó$DÝ–bBç¦Xöú§ò¢ÿ¨‰Kg§°ä¼ôôïß’~€ÄÏÔúq�~œtÏ}z`Q þ¿¯é�Î~¾þŸB:ö'è1Eÿ¯ë¨Ã2PX|ÜGs‚yëßóêx¢ý¯ëðòQ˜’K“ÉÏç¶G¶G~Þ¹/þAÐ3ë×§'õœŸaŽž´ @—<ý>;qÓ Ñ{ösœžž¸Ï×áè=E(ËÏ=zþœäçØd‚à‹Qì�¯$ýâ;dôö>Ýñìïa5ëúþ½4‘ܯð‚;qøžÄúú~A7è+_õ_×ù�ó‰#å¹Ë\�× ¢þŸ×å [Ô<æÇÝ—¾=N=Ȣ㷟åýWæ›È'ß#ÛÔ�_®y£üÉ·›æú¨ô<Ìúúg¯§_Ðvþ¿¯é 2Œ¦1ïëÉ ñúzÑéÏËúþ¿ÈsÉ8_\ñë�Øã¹Èëß±¿ëý_ ?ÄŽY·|«€£óoäxÆ­èƒ8äýx9çõþ¹ó ×õýy‹žÜž£? ÿ�ê?®!P?.GøsŒ~=2)Ü<õàóééõ‘÷9Å?˜ü9Aéè2=è¿õýn×õø€=yÀõïŽÎGNÝèþ¿=sœg¾ ãñéÔ}h¸^AïÇ=¸ôç�çî:b‹ú€�};ò0>�q×¾8?�×õý1ÿ_×õ¸¹û†zr{þ£Ñ\_×ô€ô'Ž–==¸¡ü)Œ8Ïlq×ëïÏOéÉÅþ¿áƒúþ¾îÁ�qÎ9çÐqù}:~\?¯ëó¹äúsÛŸOÿBýEý�gÓŽ‡¸yéØ~}Oпõýu�gê}8Ç¿N:g€>½0(¿�_×ôÀÿ?O¡�'Øb‹ÿ_×P¯\ƒŒ“ë힣ñ¢ÿ×a_×õ÷ õÏLúsøŽ§Ï^Þ¹.>‚çׯNOê=9>Ã=hþ\óõüøíÇLƒEïØÎrzzã?\‡ õg®xǧ¯\zú÷çØd‚áýz†AúwÇNOé׿lã“Ápþ¿¯ëòÐÏ\óŒvàwôÏéÓÔQÔAžG_\�å�¯ûœc¡p œdgòó�|óîsíEÇýt>¿^ùÝŽ;œúçš?¯é?>˜èz�y>½qëéÅçŒÿžpyÈ=ûýh¿ô‡þ_×õþAÎ:�žœþÿ¿ãÛüþX¯ðC×úþ¾óý/Âôþ¿¯ësàx[ÅŸí‹á�êÚ©wðßáìãã-_Âú¶JhëñKÅþ*F·c „2�Wþ-dÊèÇ캅´‰�Šÿ �Œå�S”[¥K 7ÓÚÎv’õöi|™õ8IEaÜSJu+EI}®HÆé¿.w§šzêy§ìEák¯ƒ:gÆýj(5_ŠŸ¦Õ|yãß\ÇÚ­éÔu{¸ô}Þì“Úx@ÑìôÛ+ [ i žh"_4ùjºÓçzÎ¥å'ë²ôJÉt=ÊzO•|0²KÑnüÛ¹ÏþÜÞ±�á¥ñ‹IŽßLø—ðJçKñß�¼U š•”šf­f5Mâæ0—W>×ô«›ë-GIy…�̲ÛÜ\C/ÙÂ7‡'zÞÉë ·„ãÑÝ=}bìïÒǨ•©ó­%NÒ‹ígªô}WÞfhÞñ‡íQâ?é:ݧ€>&|ðÅÿ‰5` û ÇÄ_x•¬tkIÊ:»êKàÍFEÑH ½®<ô"?-�œ%€T¥$ëQÅMB:ÝQ�;ɯîûD¾óÝÂBKêF6§R„y¥¥½¬ghüùáò~ã}Ðçßëß�åõü«à±½OªÃtùÆçíóák_~Ù´k(ÄV÷^.¶ñAEÚí9ðþ�ã[Ö–¼¼ñ ïŽ0XåS•ïÇÑ?>ÄqÑãÂÜÃ7R­ †¾H¤îß±áŒß2á¬:»Iû¸|¢”o®Ú9/yÿ˜ž7e”²ŸxÓ F*0©™ÒÌZV·´Î08<Þ³Vmk[7óÕ-—ÊqGÔdŸÓôÏ<äç8æ¿¢âõ?*.)ãð¿Ïéü�X?Ô(PúÖ×ågpP@xõÇíðbÓâ|(¹ø‹áÈ~!É}m¦'†âQxu+Ëxîmtï?Éû¿ž)¢Y±róH–Â/´ºÄ~*¯ˆÜ G‰cÁõx›,‡ʽ,*Ê¥V~Ýâ«S�ZXoiìþ®±!8rPu•W9F’‡µj‹."É!™,¢Y–9“©K äùý¬â§ \ܾÏÚIIZüÎMBÜÎǰ×ÚžÑÉxçÇ^øiá][ÆÞ9×-<;á}æÔõkÅžH­Ö{ˆ­-ãŽÞÒ‹Ë»››©á¶µ´³·¸ºº¸–8-á’WU>>Ÿäü/”ã3ÜÿG-ÊpŒñXÊʤ£MT© 4ãtaRµjµjÔ…*ThÓ©Z­IÆá)I#�˜`ò¼%lv>¼0ØL\ÿ‡…þÇÿôW¿òÀø¡ÿÌU~QÿàÇý_ù®ñ_ÿ8Ï“ÿˆ�ÁŸô9ÿÌvkÿÌ!ÿ ý�ÿè¯å�ñCÿ˜ª?âcüÿ¢Ëÿ5Þ+ÿçÄGàÏúÿæ;5ÿæÿ‡…þÇÿôW¿òÀø¡ÿÌUñ1þ ÑeÿšïÿóŒ?â#ðgýóšÿóÃÂÿcÿú+ßù`|Pÿæ*�ø˜ÿ?è²ÿÍwŠÿùÆñø3þ‡?ùŽÍù„?áá±ÿýïü°>(óGüLƒôYæ»ÅüãøˆüÿCŸüÇf¿üÂgÝÿÁB¿d-‡ºúx â_lø/¶?�Î9¦¾‘Þ ½¸Ëÿ5î*ÿçÿâ#pgýóšÿó ÁêßðPÙ †Ùñg=OüˆŸÆ?Ð`p;äc­¯¤Gƒ²øxÂÿ÷oñJüòDi89ÞÙÇ—ü‹óO×}™û-üMð_Å߇z��ü¬ÿoør÷Åš��¾§ý�«ifI´í?H·º‡ìšÕŽ�¨ ‚1A’Ùcl–‰�NãöY?ä|_�§�ðö;ûC,­:”ib~­ŒÂsTÃÍÓ­cŽÃá±䨜o*J2Þ.KSìò\Ï›àa�Ë«ýc :•!¾Êµ+Êœ¹f¹+Ó¥QZJ×pIî›GÒUê¨P@P@P@P@Æ|DœZx#Ä×dFßdÒ§ºi<¨·[í™L““É@È —Ë( á® Χ±„êµuJ2¨Õí~DåkëkÛ{;â**8zõšæT©T¨Õíu¹5~—µ¯Ðø7ö|ý§4/ŒŸ>!ø'G6Eà›MæÏTÓ...ìµf¹¹Ôm5¦µ¼š;o¶Ùé—1ipÃ}•´7oy9·ZÅowuÁ’q 3ŒN7Q¥õhÒ�7ºžÑJS�GÌãhISI¨¤ùÞé&þ;‡¸¦–}�Ìp°¥ K ¦ãQÔöªr© ϙšq§%I)F)IÍÚé)Kë—›TûL‚ÄHÁc[ëk}«´Ü�4lw%NìäY”óEŒ¬©c! JK’Æá¨rÇ•5S©ZœÔµ»m;ÞéÚÇ.k<Ýc«*8êp¤¤½�8ãð¸wÙ5S©Z”Ôú¶âïºm4]kôÑÿƒ;OþI®iœÐrÿæÿšO7Úgô0_øwÁóXyšÇüþ�üÚòMÓ8ÿ åÿ‡Lÿ4‡´Îÿè`¿ðï‚ÿæ°ó5�ùýø3´ÿäš=¦qÿAËÿ˜?þii�ÿÐÁáßÿÍdéˆdPñË4ˆs†KÛvSŽg àðy®ˆQâ*‘S§VµH;ÚpÇaçggiF»NÍYë¹ÑOÄÕb§Jµz�w´éæyÅÙÙÚQÄ´ìÕ�žúû7‰?½qÿ�pÿñꯪñ/ób?ð²�ÿ//ê|Uüø¯ü.¡ÿÍöozãÿáÿãÔ}W‰›ÿ…”ùx}OŠ¿Ÿÿ…Ô?ù >ÍâOï\à\?üz�ªñ/ób?ð²�ÿ/©ñWóâ¿ðº‡ÿ4•¡.5,åógYWîu,'î�ÄŽzdô9M<Â� ¬ÂnSu/MJq©8ÆÚóN.I¦þÌÚ×kÙ}6MK2¥‡¨³)¹Tu/N3œjÔŒ,¯ÍR.I§/…s7=®’µ}ÿWŸõëqÿ¢ž½š_Å¥ÿ_!ÿ¥#Ö—Ã/ð¿Èþ4ÿàá}K¾ý ~Þë>#²Ð¬mþßÂñ-½Æ§­Ý–ñ¶°äéšL(fò† K¨êZM™$Æ—m(1×õ¯‚M¬›8J.Mæ�ëd¿Ù)nÿÉ7ä~AÇvúö îßì’îßñ§²ÿ6½Oç›Xºð»ÅgkáÝ+R€[4†ëWÖuç¾ÕY¶ˆÙtÛ8!°Ò �oËh’ês«1ó5IÓ _¹ÓR½äӾъÑkÝûÒõÑ[¢>µovýu{¿–Éuëú™hÍò‚Ä�Ñrß.~𜠞ÊsëÇ5Ô¿§¡“ÿ‚YSÓ© ô wœŽ¸Ç{ a³þ´&]>×õò%öã'é�lp û {œ 󊧯õý~‚ü¿¯¸RN{ò3žœ�ˆÁÈ#žßì�B·õý|¿1/ëóþ¾CxÁü¿Gãž{`d~.ÿ×õ¿@ÿ†ý¯Ä@zó�ëßÿœŽ�»Óþ¿=sœg¾ ãñéÔ}h¸^AïÇ=¸ôç�çî:b‹ú€�};ò0>�q×¾8?�×õý1ÿ_×õ¸¹û†zr{þ£Ñ\_×ô€ô'Ž–==¸¡ü)Œ8Ïlq×ëïÏOéÉÅþ¿áƒúþ¾îÁ�qÎ9çÐqù}:~\?¯ëó¹äúsÛŸOÿBýEý�gÓŽ‡¸yéØ~}Oпõýu�gê}8Ç¿N:g€>½0(¿�_×ôÀÿ?O¡�'Øb‹ÿ_×P¯\ƒŒ“ë힣ñ¢ÿ×a_×õ÷Ï¿LóÇ û�lçƒÛ×)÷¿×õÿ¶ãØõå²NÜp}óÐ ’GŒõ'?øíý^E­;^]ÿà•\ã$|¬8ln ðr8²3ÁRyÄÿ_×õØùoçßò>óÿ‚ÿÁ?üyû~üCñW†|?â­?áïƒ<¤iú§Žüy¨ix�´™5é/àðÎ�¦xr KFm_WÖçÒuI¡ŠãZÑì­tÝ'T»–ù® ³Ó¯þŽ8ÛÁx<5z¸Yã±xêµ)àðQª°ê¢¡ìÞ"µ\C§[ÙR¢ªÒMÆ�YÎ¥ZqPås©OèrжyZ¬!V4(ÐŒe^»ƒ¨âês{(Fš”9å7´œáI¹6’—ì1ÿƒlíüÞ¥ÀôÇìÙÇ~?âÿäsÔç&¿)~;TóIÃÿ ó�ô>¹xÿ3‰á¹óyÿƒkíüÞµÀç8³\@gžÃö€©è0:úäCñÒ«ÿšRø—ÿ8Çþ Gþ‡ÿÃrÿæñ�ÿÖZ7_ÛZã°ãöjŒqß§í'9Î;ÒÿˆçSþ‰Jø—ÿ9¸+þfòÿÃrÿæñâÛ>ýµ®AýšãàqÆíýD�»€üG*ŸôJSÿÃü¿ùÆê èo/ü7/þoÿÁµ–§¯í±qƒ×þ1ª.F0G?´ úýy9 Är©ÿD¤?ðÿ/þrú…úËÿ Ëÿ›Å?ðmm¡Îmkƒœrf´$`¯?´ àäç=EñªÑ)ü?Ëÿœ�þ Çþ†òÿÃrÿæðÿˆk-9ÿŒÖ¸éÿF×$gæ9ý ‰''×8d ‚Är©ÿD¤?ðÿ/þq‡úƒúËÿ Ëÿ›ÁàÚÛU9_Û^àgãök�dçþn ž¸ç Äàƒþ#•Oú%!ÿ‡ùó�?ÔÐÞ_øn_üÞ ÿƒk-@#þ^çÈök��F?ã »ÇÔÑÿʧý�ÿÃü¿ùÆê ?èo/ü7/þoþ!¬´Îáµ® çþª,ðAê?hÐ.zƒŠ?â9Tÿ¢RŸþåÿÎ@ÿPaÿCyá¹óxŸñ e®I¶ÅÀ>ß³ZqÆ?ã óƒõéÇN(ÿˆåSþ‰Jø—ÿ8ÃýB�ý ßþ—ÿ7Š?àÚÛN3ûkÜœ�øÆÈǨãö�éù~\SÿˆçSþ‰Háþ_üãÔ?ÔÿÐÞ_øn_üÞ4ÿÁµv‡þo^ã=¿ãaÚ:cåÿ†€ôó“ÜÒÿˆåSþ‰Háþ_üãõ?ô7—þ—ÿ7‹ÿÖÛÑì\öÿ›jˆp=¿á qÇcØ€G Qÿʧý�ÿÃü¿ùÈê?èo/ü7/þoÁµ¶c§í«qøþÍQtç#�ÚrG €:åÿÄs«ÿD¤ý×åÿÎ0ÿPcÿCyá¹óy(ÿƒl­GOÛVà{�Ù® @ù²8ý qÔõÆ@Èèi¯*/ù¥!ÿ‡ùóŒ_ê?èq/ü7/þo+ÝÿÁ¶¦;YäÓÿlÿµ_E�emyû;› I®B“ W7�|tÔeµ�äI$£RTòÙa+ã*N´\jP§„ö«°N^ö¥ П#œ$é¹Sœàã'𘼳…Ìe–N*X•ZcJñ©*ÜŽƒ‹i>Z±© G™&”—2‹M»^ÿƒs¼O{ éW^+ý«ômÄ3Ù[ˬèÚÁ›ŸiZmü°Æ×6v:õßÄÿ \j¶Öó…/dÐtÃr©ç}’0Æ¿�WñâœkTXn©Z‚œ•*µ³…‡«R µ΄2ÌDiÍ«7^ª‹v畹ŸÚÓðþnusH£ŠçŒ0n¤c.©Mâi¹¤ôRp�ÿ• ÿƒp¥eþ<Œ}ïÙùÎq“œ�¹ÉÎH$®rJãd¼y’ÿšN7ÿ±óÿç)OÃëëý¯¯ý€÷èƒþ ½›ŸøÌˆ½¿ãðÿ…ÚsŽÞÜSÿˆõ/ú$×þŸÿ9Eÿûþ¦ÿùaÿß àÛÙÎ?ã2"ÀÇðÏ�ϯüÖß®=8ëŠ?â=Kþ‰Eÿ‡çÿÎPÿˆ{ÿSü°ÿïÒEÿƒp&E ~Øñî?Çÿ üý8Æü.Ì c·ô¿â=Oþ‰Eÿ‡çÿÎPÿˆ}ÿSü°ÿïÑ¿ñ üÿôy)ƒ×þ1ùùüávtëÇOÊ�ø�Rÿ¢QáûÿÀ¡ÿûþ¦ÿùaÿß¡ÿßÏÛöÈŒt<~Ï¯ÛØ|m³ù“Oþ#Ô¿è”_ø~ÿð(Ä>ÿ©¿þX÷è¿ñÇýDø�¬:tÿšÙÛ¶1ù`ÿê_ôJGÿ¿þø‡ßõ7ÿËþýÿÁ¸óÿ‘8ÿ›}~£<ññ´dòFOn˜§ÿêôJGÿÏÿœ¡ÿûþ¦ÿùaÿߤÉÿâÏŸ¶4JçþZÃ?9!sœ(ÿ…ÙòýsïŠ?â=Oþ‰Eÿ‡çÿÎPÿˆzÿèoÿ–ýúUÿˆo.sûeFIêáŸ9õÉøÚyÏãÉ£þ#Ô¿è“�þŸÿ9Cþ!ïýMÿòÃÿ¿G§ü}2�ÇöÈFÿ©¿þX÷è¿ñ ýÁëûdÄz;0Î?î¶÷õü;Ñÿî_ôI¯ü??þr‡üCßú›ÿå‡ÿ~Ÿ þÝÿðGˆ¿±w¯ø]Z?Åm#〴�OKÓÓ‚üWÁq^f²ŠùeL«Z�Z˜4±kGì)ʵjn¢Âá%J¬hÂub�)BQ§5í#>HÏÃÏ8F¾Q…xÈb¡‹¡B5Ÿ±t'KžJ’�µª¥9F ©))I>V¹¤¿U²:œ‡Ï8ÆNp‹¾NzœWëIŸ!ªþ¿Ëúdá‰ê9`íÃà÷Ç×¹Ï8§ý~¿ˆšþ´þ·$¡K;axRNæàqÎâsÇNµiÙo¯o™-_×õèu¶Qi-õàó/d‚Üóåt žHó1Œ·ðd…ÜÇ"–Šÿ×õù{é²¶å9&–áÚYŸ9ïžp¨2pê©$ÔÞÿ¯ü¿à‘—ϦAÿÖãÓ·|ÞŸ×è†õý|céø‘ôæ“Óúü:’Õ¿¯ÏîýMˆX®•pT°o=©§ˆô?àŸ1jgyÒä1ý¾sßë×§<óÓ4®R,Û­ÅÄ�I0y?;Û¯$Ï_~äb©?›Óúþ¿¯ ÕuT±�¬lä/rF'¸ÜO”1‚‘œà9äÿ,ò?�;SvVêJ�õwôß™'öU×]ÐqÏúÁúüµ<¬w_×ëý|‡ .èwÃÁÈ"\wÉ#Ž¿¯J¤˜]~»_Õ‹w:cê¾]Á�n¢¹¸FÝ‘Ù%¤ðÝÇP2F®·šþ¿à Ñ”‘ãb7Dì„«¥•ˆ8#¨8ãFëQý|Êü¿A ÇåÏ=ð?_dNäôè=;ãžÝ¸ÏsGõý�WýÏâ}=?ú߈ãÖ˜~ŸÓ½„$åý}¿__Éõý_ð$QümÀO›Øvχþ4Ä?ÌÉög p>£§¿8ü)Û@zÿ_×üŵµÍõÄvpMswu4vöÖÐ#Í<óLûbŠ�’I•QUK3ŽMrã1˜L¿ ‰Çã±40x, ¸œ^/V0øl=:•«×­QÆ�:T¡Nsœ”cÛi# N'ƒÃ×ÅâëÒÃapÔ§_ˆ¯8Ò£B�(¹Ô«V¤Ú…:tá)JM(Å6ÚGKãêžÕ!ѵ™´çÔŸN´Ô.­´û¿µ¶˜÷¾a]?P"8ÒF(ãK fh¼© –)åIU‡Êp/äþ!äøŒÿ Ãæ´òšy®7,Âbó< ÀÃ6ŽÙ)f™\eV¤ëåUçRThb*Æ…g[‰£[ F¥Dð8O‹2Þ3ËkfùE|2èf¬�Â}R9ŒpœŠXü]Iζ¬ç*tjÔ�*®­*ԪХ:RF.“ý”5M0k¯|š3j_Úï¦,/©G¥µÌCP’ÁnÑÚù-<ÖµIñNJB__YÕTª{_ÙÏØªœÊ›«Êýš¨ãï(sò©rûÜ·¶§ÔÓžüÜœË�ÂÜÜ—÷¹SÓ›•6¯¥ÏÔ}wþ »aiÿ*ðßìO¤øÿVÔ¾øª/xÏJø¾úm¤7W?u/†+ñCXñªÛH±i‰ý—¦ZëšhyJX¶¡¦˜™ÎõÏåôäT㇚6¾¥û/ø&~šफ़(ý‰u�ˆz¶�ð³Â^»ãÝsã*éú|÷6_ 4ï…ƒâe�Œd·�ŸJt¼[Í#C–hžK(ïïÉVeŒƒœüI©ÿß Æ”rúU3L]Z ?´©Ï6©š<¶¦ IÚªpä­]&”Ü!­®\xb?ë5\’x™Ã F11Š1n88á~µö^ç½Í n׊”�”~~ô¯íCcâ¿~Ï¿ 5|9ð÷ˆ¦ðøñŸŠüQà?‡ºêºÒôøH<{â_ h:ŸŠ%±’Á¯´�òö{ u /#´µ¿³š_ªÎøß†øb¦ ŸætðÙŽ#±SÂáqÙ…gv­«à0تô°ªjjkB¨©ÍAÊPš^F"ÌóHÕ­—áeW N«§í«UÃáéó=cWV�9UiÇšrqr\É)&üúóöTý£¬>9¯ìÑyðgÇ�üw}Gû6†gD™¼Es'Ù¤¾[ëDŒµ�Þƒ&›º¼^&µ»—Óè¨u¨uWÒÿÓ+¾Sõ2?õ’ÆäJŸ´y—·_WŠæPösnÓ…uQªO (,B¬ý‹¤ªû‡<²œÊ8ÿìÉ`± åʰÜ�Õzss+{²¦âœÕU'MÃßçäÕz/ÇïØö·ý˜¼/kãŒßo|=à»�]<;'‹4OøÇÞÓÆ¤hÂN1§'(Ò¼¥&ª¸ÔºPnêÿøönøßñ3ã¯û?øCÀWÚ�Å¿ÝxÎÇÄ¿Õ4Í \ü;‹T›Æ©­êþ%Õ´i áÅÒ5¿ŸPÕ­àY­¾Í ’ÜMRý–;‰2L·'¥Ÿc1ð§”b!ƒ©‡ÅÓ¥_«Ç0t£‚t(á©VÄVúË­O’4éJ\²æiE6¼L>Y�Åcg—Рå�§*ê¥J�7Máù�uRug pö\’æršWVM»'ÖþÆ4ŸÚ{ö£ø=ð_ñ¡á}#â_‰ntïhÖö—Ú†›¾‹ªêŸh²‚å¾Ç;´šrE‰ÆRGu' k“Œ³êÜ3þ}‡¡OW-ÃF½:¥:tê¹V¥K–r�¿j�é­Ò6É2øf¹¦/©Rt¡ŠªéʤTe(%NsM'£Ö=tiž�ûH|9ý‰¼ˆ3=Ëøk ”â0+™fa™bqÊUiS­F3¡‰ÀÑ¢£É){WÒ”d’‚žçNe†Èè*”0ŒÎ¶2�wELJÂÒõJq©KRwæIÂðI­egcЮÿà‘ŸðQkOuû3x’9|%ÅΣ¥¯‹¾˯ê6¶š|Z�Íß„<=�$Öü{o¼ñBÒø"ÃÄ!õ&“ “Tµ»³ƒ‚-xyRXXljpíbåÓ«õLÉP§)Ôt£^"X%C)J2vÇTõNÕ]©J—Càþ#�µo+©z)¹GÛa]I%vèÓöüø„“µèF¢ç÷椗ŸÝÁ5¿n;/„7ßï?g¯Û|<Ò¼6Þ1Õ&›Sðœ^/Òü$¶ÿl>'Ô~¿ˆWâež‚,VMEµK�Çk— Ú¬Ò&�¹®èø‘ÁÍá‘È0²Ì*â>§J*–-àêbܹ>­O2XìÉ×çµ5J8·7UªI:�”ç— ç±ÁËòê« ^ÚmÊ—¶…s{Ya}§Ö•>[Ë™ÑåQNnÑW8ïÙÓöýªjÝ/_ñÀß„š§Šü-áw{moÆ–·á_ø6×QHá”èéâßk¾ðíÞ´VîȾ“g©Ü_[G}gsyoog:\Woñ¿ p­Z|ó6¥„Åb’• *¬v2tÛ’öÏ €¡‰ÄB�ã;U�8Ó“„ã Jqå0˲Û6…J˜ ëR¥îδêR¡B2I>Omˆ©J›ž±¼#'%ÍÒM3Ôü)û|nøKñóö_ðßíAû5|A¸ð—ÆßŠšŸ„ô?†–~,ðŸ„|gñDxÄúW‡Ã,þÚß-<%ã/øÃàÇí} ü!ð/‚u�YkÃÁ¾ ×5OGyá_]ØÛËiâoø}, Òfñ•𴺸´žæ´Ç:ÊÜx^&ÍÖŽ Èç‹Áã°yÏ×ͱØÚ8YÐúæ2…*¬,'%<6¿<ªª‡4c8Åò¸´mW+ÂegxøÑ­B¶ 8§ƒÃÐ�hÔT(Îu¥UÅ8Õ©NÊ>ÑJͦÕÓ»ñ¯Øëö]Ði�?ö®½×|S«øa¿gŸÙâÿí£¦“eex¾"ÖþA¥Kcá½LÞ�mt½Hê2 «»Oô¨DiäŽZ½Ž/âzü5S…aC Gþ°qfQõ�YÎW£™Jªž&—'ÅVŸ³\�Ÿ¸ï®ÇM•SÌã›JugKû;'ÆfTù#í*a”iK›hK›Þ”u] _²OìÏ¡þѺGíW©k^'Õ¼7'ì÷û)|Ný¡4hô«K;¤ñ³à+­ OjféƒZ隀Ö$k›«\ÝFaA!›ÅœK_‡jðµ:8jX•ŸñNYÃõ�YÎG òž"—/ÅVŸ±\±Ÿ¸Ówè,£+§™C5•J³¦ò짘ÁA&ªTÃÊš�9ßhÉOWyYXÐøÿïý²hÿÛüGøEðWR×<q¤è^$×|Qàoiþ,Õm^ò+�3Á-ñÄþ›Æ—�Üi÷Ö“Gáhµaý•ÕŒ­Ü2@#<ñ ƒøwòìÛ9¥CNœj×ÃPÂã±õ0”¤ ãSõ 6)` ãRœâñN—59ÆqN H¬gY•âpx)N„¤áN¥J´0ñ­%{ƇÖ*ÒuÚq”_²S´¢âõMaàoÙ;ö�ø“ñ»Pýœ|ðoÆú¿ÆÝïP´×¾I¦eêÞ:T¶ðj¾(¹ÖeÓô¯ h¶“ÝÙG.½¯jv‰»PÓTjê6>¥Žâ¾˲Z|EŒÎ0TrZЧ:õSÚÒÄûU)S†4UJ¸šÒQ›T(S©^Ôê~ï÷såå¡”fXœt²Ú:óÇBR�L?/$ér4¥*®n1¥ÜW´œ£Nó�½ïFþ½ñWþ ³ûküðÇŽ¼sñàv¥£xᾑ£ëÞ+ñµ—‹~ø‡Âvú^»¯?†´étÍ{þ+ÕlÆöæ×àkx©�Êx[ŒóÌÆŽŒÉ¸ó3጗uðôñX|-\$1¨Âº…jXJØÌD«ÔöTêÊ”(«Tœ#? ‡ ÐÆf¹& :´hãx šã«9S©*UjÃwJp¼'Ziªqç”c9Mû±“^1ðCþ ‰ãÏé¿¶·Ã¯ˆ?üUqûD|øeðËżáøS\]STñߎ¥Ð¡“Y›Ã—ˆ4;ËIôX%ºž õ�?û!ž÷U–Î&eös¿08jœ˜eù†Y4š‹g¡~Ã?³¿Ú6oÚ#\øÇãOx'Àß³çÀm{ãv¯sðãCÐ �Çgùí –ŒsõðøjSÄP¯R'S N­D”éF2µ9Ú-¾VÑÑ‘exLËûJ¦6¾"… ¿S7†§N¥YF�HFQŒjÊøfÚ¼£ªµìtÿdO‚ßðÌ2~×ß²—ů|Bø_áÏŠ–_>$xOâç�4�|Aðgˆu}=oDÕàx“Ä~ñ‡õ%x­´ûÔ¾°º¼µW‚xÒúk>\—‹s¯õ™p—å8 ¿3ÄesÍòì^SŽ«ŽËñ˜z5ÝÔZÄa°øŒ>"•œÒ© ÂiŸ)ëŽÉð_ÙÛ9N3ˆÂÓÅlj¥ŒÃ†"�IÞ^έJU)É5Ë.h¶®šæåÂÐÿà—Ÿ·§ˆþÛ|QÒ?g_OáËýþÍ/KŸ\ð]‡Ä _ÃKÎ5í#áUÿ‰m¾&êzl‘"Ik5Ÿ„¦}Fá—MŽò’H÷¯âwá³e•x‡ E:ÿU«V41³ÀRÄÝGØUÍ)ᥖS¨›jjxµìÚq¨á+'ø[?©†X¨eµ]9Sö°ƒ�â'JßĆÕX©ÆÖqq¢ù“N<Êç–|ý‰joÚ7Ã’ø»à¯ÁíwÇžµñÙøk¨jº~©á›4®€þ)šÏ]Mk[Ó'Ðt»]6½¾ñFµ�…¬ Gi{­[ÞË»z™×ð¿b9Íè`q2ÀÿhÓ¥R–&r­„öë Ðt(UŽ"¬ë¾Hahº˜ªšÎeä¹09k™Su°89צ«ýVSŒ©EB·³ö­TS©N šUf£J:)MI¤g~Ñ?±÷í!û)jþÒ>;|0Ôüþ0·šëÂŦ©áïx_Å0ÛÊ�ܦ�âßêÞ!ðÖ£}je¶kÍ& Lêú|W¶RjÂòØË§qqMEl�3¥Œúœ£])ÒÄa18W$Ü]|&6ŽN´”*Ê—²¨á5Nrä•£1ɳ<¦t¡�ÂÊ�¶NTf§Jµ*©5gV„êR”•Ó”ù¢¥(®efÔà–ÿ·Ö‘ðæŠz�ìÛâÛo Ùøro_iÒk> oˆ:† ]ókWÿ “ÄÏñJÊÎ(Ã<ÆçÁÑÍon"Š�äñéøŸÀu³åtø� ¦&NÑ£O5xe•ÎmÙ.\cRnÑm¦—t¸W?†⥖VT£IÖ”yèýb4Öó–Ux¨­ïz7Kt·~ð;ö ý­ÿi?Ú|Bø#ðgYñï‚o#ÓõÏ YXØø«Hðàñn¥i¬&±â:ïDÓ¬ô!»“ĵµŸ‡ÚæêËJ‹T“X¿³°Ÿ¿;ã¾áÌdòüë8£€ÆÃO0ú½J¹ÎxZ؇„§:.ޤ+Ô�u(¬=)O£Õt•(NqçÀd¾gEb08)â(J¼°ÞÖ5(¨Æ¬)ûi©óÔ‹§Ó³ö“J�Ü`§Ï(Åýñþ {ñgÁß°çÁÛGk+ãßøÇÇŸ¼7s¯|;°±ðÃëiìï>x�L¹“Æ#Uñ=ÏŒ<1{o¬^øLÒî¼A Oq™ªé–Z‚µµ|ö]ânUŒã|ï„+Z�Ôq<[ˆŽ0©<~a(Ά¬~¨éa£ƒÄÂTaˆ«R41‹©J¤éµ#ÒÄp¶.ŽE�Îaïýb�lF&“©†Œpøx´ðõ"ý·=gZ””Ý8FU)¶¡8ÆWGåǯ|süºŸ^œqžÕúqò¿×Ëú@Iüxÿõþ¿ýn”ßø_טë×ÝÿŸÏóúü@þÇÔ÷çôëÍù|¿¯�~½?ýXüq@_×õçèzs×§ùÏNý³Ò€Osüþ¿þ¬P¿›°p¿=ûÿ>ëÍýoýL=ëùÿú½¿Júÿ?Ÿà/œþŸ¨äëŒòs�Náý^_€„ŽÜ}séÐLzôâ�yx꯱éÛŸ ÅýL:ÿ!õÿõä þ¸Åý_pg<÷Ç~?ãôöí@_ð?àǯ^9'üúðEývþ¿€O°ävéúþ_žhëËúê'úœï~¾ƒÓõÿ2Lqè±ïþ={ý4ò=¸9íüñÛ·Û4õòþ¿AÙäãñÏlz÷Æ{u=ù¥ý^ƒþ¿¯ëæ¬5�ƒÛóçžG|�9É×€{‚þ¿þF|ÄÉã AÉõÿÀ°NG�¹À¬*Gü¿Oëñ>Òÿ‚gøÖËÀ·§ìÕ¯ê¬×¾7¼ðjÈåB}«â?…¼AðóOV.®ûÿ[F ‚ß)FýàþzúNdÕóïüGÀЃ©RŽKK8i&ß²áìËŸâåiû´2Ê’µíeªjéþŸá>ž[â? âj5Ï0ží¤¹óL&',§«M+ÔÅÁ/Ín¿¹ ì|Ý:gëè{ÿ�‚¸ßµóþ»éf¡ò'í]ñ‹Hø5ð“Äš¤¡õxžÎëÁß <#b�u®xÓǾ!µ“Oðþ‡£éÐÇquxÍ{qÍù‚Ú³XÅ<­Žb‚_‹ÍjÆ•97¬§xSŠø¥7¢Q]uÝÙéøý.sŠû1÷§.‘ŠÝ·Ó­¼Ì¿€¿/¾| øYðÛVš;�_Â> Ñt­fHImý²-VãWŽÖE$Kk¥=Ô6³|¦kx┪ |¦".�(Áï¤ým­»ëò=ê2ç›’Ùɵéò׿r¿´_€¯¾(|ø¡ðÿK(5ox3]Óta,«/­9'Ñâžg!a·—S†Ò+‰X튑Îà6×ÍW¨©Ö…G´fœºé} ÿÞÍ8óÓ”ò‹Kµí§Ëeèy—ÀOŠšOÅ_†:ô %—Š<5ceáoˆ>¿Š[=oÂ~4Ѭá³Öô�WO¸H®m™o –k)%…îÑÒEÚâháùLÚŒ¨ÕšÛ�)«8Î ·&´Û~Íö_UT§m(Ú"ôq’²j]z]y…Ÿ›Ûž?Çë_�ûGÓaº|�åWãÿ‚4?Ú?öÍý¨u¹õÛ› ø³Að¼m¥Gm1º»ðæ…‚® –thÂ[Kàˈä e”2˶2eÿy~Œ˜ Oý|(ËjÐq­‹Èq9Ó…nhÊø�5Çq%+Æ÷\ô³šr�ÚjN)¾Xÿ˜8f´óO8ËFQ©f�˹¢ýÞl›„Ê'f·jx)&öæMÝ­L«oØËÁîüU¾%¨3“×½¿×ž ýÏûÿ>(ýóÿ3òlû#áŸhƒÃ>(ñ/†ÅÁ¼_ëúΈ.Ì~I¹þÊÔn,EÁˆ<‚#2Û‰<¯2M…ʇln?QB§¶£F­¹]ZTêrÞü¼ðRµô½¯kõ6½Ò}Ò‡ü9ƒZ€PúÖ×ågpP@|ûxjûö–‡ö‡ÿ…ƒ¬Â#ñ¶Ÿãæðrè–n]Óç·¾H—ÄP šdº•´sÉltg¸Í%ª^+¹OçLGÑß+Äx¥¿ÖLtsì7<‘`(µ,à Rž"0Y“ÄÞ8Yâ©F¤©}FU}“•×Mª±üò§‡ØZœP¸“ûF²¶:ž`ð^ÂøŠr�D¾³í4¤êEIÇØ9rÞ w´—ßÕý~†y—Æ…^ø×ðïÄ_ ¼ho£ðÿˆ"´7z]ÌVzžŸq¦ß[jv:……ÕŽռW—–pË‹‹k‹i¢[ÜÁ5¼²Æß-Ƽ%“ñÏ f|3žºðËsRukaj†+ S ^–.†&…Z”êÓ…J5¨Â½¥R”à¥N­9Óœâü¬ë(Áç™n',Ç{E†Ä(9N”£ ´åJ¤jÓ©NrŒãBp‹÷£(µxÊ.-§ùëÿ¸ýœè©|Iÿ‡ÀŸüÈ×óWüJÇ…_ôYñþøsÿ�æßñ ø[þ‡9�þåßüÈðë�ÙÇþŠ—ÄŸü(| ÿÌ�ñ+ÑgÄ?øwáÏþtüB¾ÿ¡Îcÿ…ywÿ2ü:ãöqÿ¢¥ñ'ÿ ó#GüJÇ…_ôYñþøsÿ�ÿ¯…¿ès˜ÿá^]ÿÌ�ÿ¸ýœè©|Iÿ‡ÀŸüÈÑÿ±áWý|Cÿ‡~ÿç@Ä+áoúæ?øW—ó íÿgú*_¿ð¡ð'ÿ24ĬxUÿEŸÿá߇?ùÐñ ø[þ‡9�þåßüÈe^ÿÁ/¿gHÕ±ñ?âOÿ™ƒÀÞüñáqŽz{ëKè·áZÕqŸáÛ‡?ùÒ5ág /ùœf?øW—óÂjßðKß�&–ÛÇÿ®# í–=WÁÒFØë†O8Ç$6FpFs^�¢Ÿ‡µ!¸~#âšôÛ|µ)ãrJ�vvvœ2f��Ó³zèΪ~ðóŠ�<Ë5œ]ìã[(½öqÁÙùŸ¥±/Â?üø7uðÿÃ:ޱªi:�uëØ®õÙl¦ÔZ]JÏGº�$}>ËO¶)ŽV –ÊÁ0�†ãû ðn]ÀY-ʱ8ÜVWˆ…lÂt'‰sÅU•jŠRÃPÃRqŒ¥hZ’j6»“Ôý+†òl>C•ÓËpµ+U£N­j‘ž!ÂU[«>y&éœl›²÷S¶íî}}_H{ÇÃ?´î –ÿ¾ÙüR×>0øgöv›À®/õO‚Úׯï ^Üüb‡Yð4^°ñߊ¾É¦ø÷FÒ‡ƒ'ñ«ø+O}rËÂ~$ñÚµ¶»oyâ�7áÜ-�­{­í¶»_ñÿ‡>O]Oö‰ð׌¼qñCáO�?hÝCÂ^ø%ûÜø{ÁþÚê¾!ø½c¯|bø÷¢xÿEø�g«ø>ÛÅ�´ß†ú¯‡/õ«Ï 'ƒ¾$iqø[Zø¸Þ!ž ô{€zlí¼µOmÚíUاÿ /ûd‹IßFÿ„Ç_ñ~§£ø®O�>ºý�õã¡~Èri¿¾ø&=WáUÆ�á{ ï�:Ž�ð£Äßüo§x?Sñ7ÄýGã=瀬|oà94_-ï„5Ðv�ËK;ï¥õí®ž[2ŸˆÿioÚ‡Mm:O øûâ'Š~X|`ñÖ…àCû9]ÞüSøÿàí7³ž£ ^Éá›O„Ú_ÃíkLÐ~!øããoÃÝWÃÚD¿³oŠ~-i^Ò¼gð³ÆÖzg�97Š<}á½F…ÑxOâ´Á‹Ÿj�ðcÃöwø·ÀÒ´Ú›xŸã�×â¨�|PøHš‚t�gC@ME-<¬ûé¯^žŠÛ3“ñ ß´ÿÃ=_öˆ¿Ó>xÂß/µñÿ�|!¿ڥgOŠ_üFþ-øÝãhµ_ƒ:¦¿áø"ÊÓK×5mÅŸü#¡Áƒü á_Œ:g€ÏÄ/xz/ j¦$W^ªêëMï«ùzugªXxƒöŸñïìÕûuëÞ"ñ×ÄŸ øÌhÿ|)ð"/‡4ëßü;·ÐþZßéž.øwáã^´´Õ.¼;áÏ xvßIÖ¢Öõ½q‹Dãk=¯w¦û>Èþr|1ñþ c£ü1ý›5O‚Q~Ý~&Ô~þÖ~8ø…âÍ[Åž.ýª|WàÏÚOÀ? ÿe­7⯊~§†?h_x+ㆼ'â¯xS[øAàO‰šŸŒ¼gñ×RÕîþx£Sûdv°#orîüº¯+¦Ý¯¥úYÝtÜô³ü;ã—Á¿ø)OÆ?ˆž*ý¾þxûQøÃûü[ý—>|=ø£ûL|0‡? ÿhoè3xŸáO†<-àÝwÃðêò|:ø=ã+ â†�i¥=žƒãýUñ.·¥éºå‘–ܺœWºÕ¤�Òz¥Õú­<�¹üû.þÞ¯üïâB|-øóñãÂ?²·ìÙñgö@”êj/ڛƖŸ>Ù~Îú%ÿÅ_†¾ øWâë/ü$øÃ¨|Dñd¦?ˆ¼aã[ox+Ä"æûNŽó^ºš@ÜyÒæj[$¬îìîµVíÔùö¤ø—ÿZð¯Æ_ø)×ÿƒ~ÓÚ÷�ÿiŸˆ,ø{û>øûO_Šº­—ì¯mû=|&øEñWÇ^*øW §ìßÿûðWŽ.uß„ÿõß |ðæ¡â¿Ú§QøÁãÏ |1_üMœø£Gº´øq¡øÐY|5ñ¾©á½ÆV¾)ñ†îì´ëY# j-Úéë.«]¬¯uò?d?`Ÿ�ðSŽ¿~ÇûAx‹Lð7Â~È>ø©ñOA¶ýœ¼MáÛ_Œ?ücñ;ö”ð†ìôÏ|@Ðüâ…úòx Cø;ñcÇ^ —Â’Þ[ê0Ùé:N…áß øŽêÿQfrPIÛ~k-vVMí{ët~êPfy×ÅÍËÄ? ©�(ׄèNü•¡*S³³å© YôvnÏ£0Äц'_Vî�z5(ÔIÙòUƒ„ìú>Y;>�Sâ_€Ÿ³¿Â/ƒ7ÓëðÔºn³}¦¾“{¬]kÆ¥wu§MsixöÒG{}-”j×V6óo‚Ò7G´8��LåÙY•ÎU0XwN¬éºS«*µjJPrŒœ_<ÜW½»Æ)éØùü¯†ò|’¤ëeøWFµJN”ëJµj³�7(ÍŪ•%œ©Æ^ìÓ{6�«"´¹–âFM*ÞuwÈ”ÜÊNݶ;ÈUI äã%�Ì|œ~SZ¥<¢…hÊwUeˆ«SEy8ÃJ1o·³V{ÝêüœÇ/ÅUÆb*SÉpõá9ÝV–&´eSEï¸ÃF1m­b©Å®·øžÊé·xñ$·ÿÀ™ÿù`z×ön3þ„˜ü*¯ÿχû/ÿB 7þâ?ùätèšq� –ad(¦E[‹‚ªåFõÎäȸæ½úyZéÓu0j"êF8ŒL£¸®x§íµJWIõJçÑÒáü­Ó¦êà”*¸AÔ„q8©F5Sœc/oªŒ®“ê•Çÿaéóëÿ‘î?øõ_öUÿ@¿ù_ÿË�?ÕìŸþ€ÿòãÿËÍ {xmbÀ‚8Ô’,ܱÉ%˜³O©>�¯C‡£…¤¨Ð‚§N-µÊZÉÝ·)¹I¶û·¦‹D‘éa°Ô0”£CMS¥&¢¥)k'vܧ)I¶ßVô²Z$‰«sp € «}ÿWŸõëqÿ¢ž´¥üZ_õòúR¾…þGñcÿœ~Ðß³ùÿª3©ãêéä�wq‚sƒÐõãÜòæ×ü6Ÿ×b´„²I=¹=°nÓØƒŒƒ�sЈ“þ¿¯òиï¯éýW?¨ø6àæ×öÓç�´~ͼw�ö€‘’Aldö=»×ó—�?Åá/ú÷ÄúVD~—á÷Áœ‹-ü³úy¯çãô`  :ž£g£éº†­¨Ì¶ú~—cw¨ß\6vÁgc—7369Û1;œs…­°ØzؼN ‡ƒ©_^–…5¼ëV©tà¼å9F+ÔâÌqøL«/Çf˜úª†-Áâ±øÚò¿-&„ñв¶¶§Fœæí­‘ð†ÿà Öüwi _xûI𞧪C¦Yø‘õ˜®5asp¶öÚ†§£-‚C³4‰%ä6º¥ÌÖP‡xšýÔFß¾f^æ8,ж>†wCšá°ÓÄÖË£ƒ•<=GN›©W†Æ:îs¨”\hή”+NÊJ‚|Ëøg‡¾�?œq¶#Æðf3+á|Ç2£–á8‚yµ:øü:ÄWŽ�Ìr˜àaF–Rœjb©a³,E\%9S–6QTÝ_Ú‹þ ¡þÏž?ÿ…k¡xOx‹KµÓ¯|S5νÿö�£�RÒFÇK·tÒu{‹ÝF}2æÒþiL0YÙÁyf¯§{˜,ÿ–³N!§—â>­Nƒ¯R*2ªÝOgs%(Å>I¹IÅ©7d¢¤¾'t¿Qñ{é/—øgÄ¿ê¦]òâ,Ó G ˆÎ'W1þÌÂà~¹F¬>”£‚ÆÔÄbªa*ÑÄÔ›…:)× ¢ñ%V�®þ|bðßÇ�†ºį Ãwgc¬ «{­.ÿË7ÚF«§\Éi¨é·/1Jaž?2Þâ<%Õœ¶×!"2˜“×Àã)cðÔñ4“Q�ÓŒ¾(N.Ò‹¶ŽÍhúŧ¥ì~Ûá÷å^"ð¦[ÅyE:Ô0øåZ�l&'—ë,f¬¨b°µe Â~Τy©Õ…£Z„éU僛„}n»µ ( € ( € (øÕýµIð_ À´‡ì62[ó&~Ïdõ=ãó×8¯é¾ñ¥±‹þ¤gÿ©yïõÿü¯6_ñ›Ñÿ°ü“ÿLà?«ÿ‘ý‰BùÎAúŽƒ°qëÓ·æCõBüd•ÇçП¦?s“@>0ñ§„~øgVñŸŽüM¡ø?Âz±¼Ö|Eâ=NÓHÑôÛ}é=Õýô°ÛÄešH­íã/æÜ\˼)%Ä©sbñx\®/ˆ£„ÂÐ�5\F"¤)R§¤œ§6¢¯&£{ÊMF)ɤýl‹ Îø£6Ád<9”ææu™Uö ¯*ÂWÇc±Uye9FŽ •f¡N3«VJ<”©BujJ4á)/Ä_�_ð^o�> Õo´oƒ? <_ñˆÙO-·ü$º¶«oðã·Å•nôsu¥x“Ä·¶m…eþÓðî�4€�¨«¶Vü{8ñ¯%ÂU�£-ÅfÜ�ÇëjÇ/ÃN×\ô¹©b1‡_ÞP ßdµ?ÐNýœ>"ç¸<>?�8¿$ào¬S…_ìœ §g8u$›¡ŽTq¹VS‡®®Óú¦i™ÓŽ—“w‚ùëDÿƒƒõÅ¿OøHÿeí*m-Ÿâ­Ýµü“÷Ð_xîÞéÐË&6k)ã΋­x4|t­Î¾±Ãt�6õö9œ£4»®|£&»{—î�Ó³Ù“—¼4¿²¼^ÆSÆ(Þ?ÚB®¤—Ù—Õ¸Š�Z1“ûkÛ¸ϹŸ«²�üãö`ý¬¯­¼/á½{PðÄ›’ßáßÄXìt�_X—pð¶§i}}¡ø”’®ÑØÙ_ǯQ®&Ñ-áÇéœ3â/q<ã†Ãמ0–‘ÀcÔ)Uªÿê¤g:8�(B¢¯eÍ*1ZŸÆ¾3}<]ð[W8ÍrÜ7ð¥+ʯp¼±ìÑçJØ|>c”«8©bkᥖª’T©æj5ú_x0…P@P@ùsÿŸ8ÿ‚lþÑGÒ_ƒþßó]~Wè^ÉÃþ¹§þ©33渻þIìÃþå?õ7  a½^9ÏR9²GNƒ×Ç8þÍ‹?—õý}ŤÈÚ£s;¿3n#€0[9½0Ft¿õýkæMôþ¿®ÿ…÷¹Ýé7Øâ—)^2þâ)B@Ä»‰$rOTçn[8¸«ký}Ö"Nÿ/ëúóü5…å̦i®-Ù�÷ÜÉ uà©Ïziõ$ŒéWþZÛ`r�׎§�Lþ¿Br±¦•·óüÀi$Ûc"^Ôà�Çõ¡'·õè;¯?Ãå e\D¶ÞçÍׯ é€3Oä/¿î'œ¥¥�´2¤“Ë v¶á©œt$¨÷8ȞĴP¶‚K‰8Ç=Éè99çÔö=:࡯˹.§©E¦ÆÖV,å†'˜u‹¶Õ8ûÀöpuùù ´´[ù +ÿ_×õ¾ÇI'q$’rIä’NI'¹Ï­A_ׯõÿ Ž”9ÀÉàûÿ>~¿‰ë�Š Z;t,ÛC-Ì«y9ä¶[j¯$’FÔô-~ñ·ýzýÄZ¦©¬m§iòdŸ–æäKdÉ‚ äaˆá~èç&©¾�{ÿ]BÍïò_ÕŽ]3�Üþ|÷ëÓÓ�SúÅÇn ÏžN9õÿ×'Ò€þ¿¯é‘çéì9öïŒqøc�^ �úßúÿ ÈïÁü?Ÿ¶{�ýiùÿ_äàúç={óŒúb—_ëúþº´þ¿¯ë©ìžð�…þ ø\èš):WÅ (ÞÞC Ýë›Ø’qkj'“ìúv«aX¢†!OFyÌ«,÷oàÜmÇ;þŸ`³3 nŸ|7 a«ÓþíJÕ!Ó0_ð‡ó_ð¡ã^aÿ1Yg…Yn+þžaqœsŒÃTÿ·*ÐÈèU‡÷gRqéŒ_ð•óåÝåÅÕÌ÷×·]]ÝM%ÅÅÅÄ�,óÏ+4’Í4¯—’I]‹;±,X’yéýAƒÁá2ü&€ÃPÁà°t)a°˜L5(PÃá°ô`©Ñ¡B�5R¥NP„!Å$´?{Âápø,= &…,6 J� >…8Ò£F�(¨R¥Jœ�:p‚Q„b’I[eb‰bNO$ÿ‘Æxvü0+¢æÿŸ]|�éºßÇþ“þ ½áÿø(\ú�”Ÿ<1ûøŸþ «˜™\ƒÇ—_l|%áŸCvþQ“^´ø©ëÚåÅÔÞn –7f-óˆm®[ùªX JñáüiÍeX®3Ãx�)Ùª2ÀG/ž/„pWµ çt¨QŒ#jn¤/hÞQ_§*ô¿Õª|Dä¾¹K$«ÃI^õ!âU“ëQ`gRm»Ë•Û[&Zñ—Ä=ßþ ³qÿ ¶¿±‹â×Å/سÀ¿ðMÃI"Ôî|g¥üHñ†>#x¢âxØ‹}gWø7á+MVÎâÉ£ ¼ì¶V¹…g—â%â4xTæò¬¯Œ±Þ"§téGW.Ãbrì,bþ*4³Œ\éN3½œ›¼Ÿ+*¶&šá§Ä*Qúæ/%ÃðÕ¬ÔåZš´±5[[Nx*1œ\m¢[]¥�ðgLðOíKÿãý�>|1ý�´ÿÛGÄŸ5�‹ø¯ð–Ãö�ñÁü2ñ?Œü]&½£xþ÷ÂþÕô«x{Ç:|÷?dñf¤² Ü¥î�e;›Ï}�Lâ®7†I¤øçAÔ.|È5}kÄÚ–½àk)4¦·kc[’Î (~“%Äḧ�ø_‡ã|ËŒ19*Æc~·€á,W�Ëpµðî•L6m˜ª¸ôã�þ 5:Ùªª\ôh)ÊoËÆÓ©”äY­*™&¥Žt({FqˆÅ×ÅU§QJ50xgôäðöç�YT¡rÎ£ŠŠûö´œ|jø_ãÙöpñ¯Ã/ÛÆ?²¿ìáãÝrÊSZ¿ígðGõ¦½ø%á?\KžÖ¼?,š¦¯'†­Þ(|Ucwumq<º&±âûŸüW '’æxN-â*̸?ÅE€¡5Ìép¦u‰Ìh¨gX¼,T–&Ž!*T–&I¼,ãF*µ$qînþ»…­“åµ9­•e¸‰ÇE<ßK >l *®ÞÎtï9ºI¥V2i·Nu�?ÇŸë¾0ø[ÿ—ý޼K¢\j¾ñïÃÏÛ¿â¶³¥Ý42Øk>ñg…tÙï-%{{˜ÒkMKHÕìc2[ܯ Í»C<@«¥~»‚£„Í6¼ëa8G&«*8Œ6}‹œ]œgJµ(¹GF“R„ã³Z5f�±ÿk¿|+ø]ðãwü/á}þ‘aãø*wÂo‡ üá­.I.n¾^kvÓÉûjÚ¼¦;f�cÂzW†ou(¦ycñN½s I­åt‡ä8K šfyöIáþgN¬ð^湆e�ÄÔJ0Ì!FQ\$¯+?cŠ«‰…6’xZWRJþÖqW …ËñÜE…”#_Šð˜|- pwxiM7�«Ù}º0¥)&íV£z§eùmÿ‹cÿý””òÄìr?â�ñ)ü¹üÈç×ôÿäÝqWý‹áÿ©˜cå8CþJ\£þÂ_þ™ª}'ÿø{ûkCswâ��ß²GÂoƒô�7áï‰Þø;ð¯á÷ˆ"ÃçiÊ®;(Â`°�Ç·O‡Áa0õ*9Îjš©V‹ö•HÞOŸyZRÔúö˜ñg‰—þ&ðdÉ®êi&—ûH~Ë^ÓZ;¹cû†uü/²Õt;@Œ«™©ÚëÚäZ…¤ab¼þ×ÔÞád’öååð¸k †Gœd] MUáî'ÅÔ¼SçÄÒÆfs¥^Z{Õ)Ê…NoX{J6PŠ^†gV¯üDŠ-T’pÌrªQ×á¥:8HΚíª“æK~y^üÌ©û ëúö»ÿ÷ø¯¯«êðx¯ã/íŸáoG=ÔÅ5Ÿ ØéZÃA¾PÊ%Òl�¡}†Ç‹k1£é«mken#®8ÃСà6U*4iÓxLŸƒq8f ¯GR®XªW¦í¥ZŸX¯ÏS⟶«Ìß<®²*•*xƒ‹Sœ¤«csºU(ÃËN]ཛྷ9VË’6µ´ó+/„Ÿÿmïø%Çì¡ð«öD[ø»ömø�ñÅÿhß�:?‰t}'ÅÚΩãïÅ®ü6ø­ý…¬êZRx�EÑü?{ Cª+Í5•߈ot�29áÑõV²ôªfùgxŸÅy§s`ðœG—d‹‡sʸjµp”i`0ކc•{z4ª¼5j؈C*VŒjG µ\eZ—?,px¬ó…rœ&QjõòÌN=æXU„+NxŠªxl_³œáí! nTÔµqu!u ÛìÏx+Ç u�ø7wáÿÄÏé>4ñ׃~3|nð׈õ=ÄÖÞ0°Ònô�ŒŸ¬¢ð'ü$67wö×ß ¬â¶øq«&Ÿ{u§Xj¾½Ól'’ÎÒ?‡Æàs?H,~[„«‚Àã2|—‡¥_ ,J±«“æóxï«Î4êBœå,Æ“©Ô©K •"§9#Û«C†Ÿ‡X|UhWÄPÆã©U�:ª´`á�Á¯aí"åK ’ÃMFN1�F/–(øÓâÎOìGÿZÿ´™èøëÿC_�ºÿQÓð¯±Ê¿äµð·þ͵oýEÁž6/þD|Yÿe—Œhãiøƒ�Jôa‹ñ‡pÓ­…­<>*”kÇJU0øŠmU¡^š›•Ðjtª(Î-J(åàÊ®„øŠ´cNn� fUT+B5)MÓtf£Vœ—-JrjÓ„—,¢Üd¬ÏtýŒÿk¿þÐ à£~ñÂ�Ù·ÀVzOü³öƒñ Z§ÁŸ€žøSâ+»˜?áÓOÔµï iÖw×ú+Å©Ëq.“<�i%õ½…ã'�g ŒxO �f~âèf¼GŽ�_¸ég9î?5ÃÂ2úÍWR� UIÂ�dé(ª±Jjœ´Ùß’æõ³ /Q©ƒËpñ‡f9°Y~ RM{(òÊtcJ M·§2‹Ý#éÙ|á_ÚÓöUý�uOƒŸ±�í«¢ü0øá/„ž-�Jý©üKðWRøñkÃæ Çâßèî•§ØGãmZÉüYmãû«t¼ÖtØ"»Õ%µÓãÐMÏ̬f+…8£ŽégkSƒ+fyö/6Â:¼/†ÎiçyV#š¦ á1µèU©7‚¥?ªK8Q©' JU~_MÐ¥›å�'¿âiÅR£Vµ*roó<åÔj`hfø¬³ƒÂTÂã*U¥‰žrxœ,1•éáœë×¥*xyßFéIóΔ—ƒ|$ýš?h¯Ù{þ iÿ5ð‡í$ º×ô_�Ú÷†~ ^x³B×|Qᘡø“ŸªüAÕü?¡êº´^Ó|pñØhú,×rÛÞøŸþ»û¶¶:~•¥ÝÝû¹·p÷øŸá®/ RÆG[;¡‰Î¡„¯C ‰o-u)`(â+Ò¤ñu0IÔ­YEJo®Ó‡7´«V0àÁ噎UÂÜOG0µR”°.´'V’XžYâ'Nœæ¨Æ»Q„³«ì$í˹}á_èÿ‚¤ÿÁ|Aâ�oLðþ�ÿËø/¡.£«]ÅefÚÏŠ¾þÒðöœ.'u�nukZV‘c03ßßÚÛ¡/2׃‰Ââ1~øÍG F¥z«Ä¬â¿³¥9û,.mجENX¦ùháèÕ­Qýštå'¢= UiÑâ® �YÆœ `©óM¨®z¸<Ê•8Ýéz•'Eu”’[Ÿüø?ñ¯ö\ø/ÿsðÄïê_ >!Çû6ü9º};ûWH¼¼OøÏâ6£§]CÃÚ–©`ÖšÖ�w}jâÃ!¶¹•]P¸'ìóüã$âœçÂLnWˆ¥™e*¾Ê´!õŒ]N¥�.œ°¸ŸìÜ4¹yá'ìë⥩S”ãiÂRZJögƒ|8žî÷þ£ûJ隌×6~ýµ~jzœó<–úMþ­àË; JêÂ6m�É}h<›ƒ *�äo%«×Ì£~3ðåHF0©ˆàÌÖ•yE%*°¥ŒœéÆm+ÉBoš7w[.ǹpFgÛTó¼$ ›mBS£ÉÅtrŽ�üËßðI/Åàm þ 'ãü)á/Cá¯ØKâ±/ƒ¼{§^êþ ñ2Yx§ÂS>�â}3NÔ´kûíü)‚þÞÏVÓ®e…ØCynø‘cÅ|+ÇWðû ^/ñÛ R¥*ЧZžôå:U"¤•á%tWÕT)ñgJ�e�âfèâ#)ЫËV“ä«Ê”%´”g×ÚL÷ïÚïâ^�ãïØûö+øãð+À>ðìSÅmçöŸøðŸÂ6zXðŸíCák¡/ˆÆZš�ícEño‚n¥·ø|šö ×L}$jW2ÜêšXx'–ÖÀqo䙿?Žã7•×� çÙ®.u~µÃ8¨[°tßîèÖÂc`¥˜:ï:ª¯³ŒcJ»©èæø¨b2l“€Ãáèd‹šeøJQ�±Í)?Þ:Òø§ Ô°ê¤ì áÎÛ•>_Ò¯Š¾“Æÿ¶f�ûd|+ý�þüNðGüQ< û|x—öæñçÃÿƒÚ†<9á}:xîüiáí.ãX²ðN“áCeyáx?ê6ú„QÝÇ{ ÞÛkWñÉùÆWŠX.­Áù§fn7ý³+Çp&‚0üÞ¾'Š© z±£^E/pÌð�½¯ì û'~É_ÿn™tÛoÍÿøaûDè¿/µ}+Æž!øCð;Âv:uŸ‹<_â;A¿×`Ñ´íVæâóP¶ð{¾ýrmRñN“POÅ¥Þ.Rã¾*â¼ß�ÕI`W‡¹ŸVÎaF® ›çx©Ôž ‡©^� V©J1…9cµJ ÔTÞÔš)pþQ”`óÞU]ñ1† S…j˜< ÅV­R4åQB3nRT~Û›÷\½¯/qáÙ_ö§ð·ü+ķ׋¼o é¿²e‡Å¿|q¼ý«n>)øV÷áî½û>ê¬Ú†4ë«/KªÞ}·ÂRé¿-ü#o§K—$Û[ÛM¤YØOuÅ‹âŽÅxa‡à<& ½N+©”àòHp´r¼T3 ý8Ò�|UHÏ ©C“ªf2ÅÊ¢uSs”£Zu#Š9NkKŠªgõ«Â9Lq•±ÒÍž*Œ°Õ2ù9¸R‹�W9^‹ŽQQjI'þZøßñ OÕÿà‘?xãÚ€þ¿È?È{ŸÀÑq_×Ýýj럠ÿ=Æ~ÝzM?¯ë œrG¯<¹ü?åÆh¸Åõ9éï‘þsëÇëEÅý~zVûƒŽùöõä?ñç4\-ýÁþ—`äŒ~£Ž—âæÿŸåÎ?_ëÅ—õòþ½|“9¼ñè;ô÷ïÓ¦9=AÛËúÿƒýt¯¿Nœzž>‡ðãÖ�¼?¯êßÖ�þxäzç?ÏôÉ¢âþ¿¯óó8ëÇ_~ŸËëÓ·ÐõýwOè;ãùúŽžœt õ·õý1s‘ŸÓ< þ<óü¨¿õþbsÓéùûçüƒEÂÛR õüóŽçêyÏõÁø¾ÿëOÀ~sÐcžÞ£¯ÿ«ŸÃ4‡ý_×à4Ÿ”gF0:îõ$�Øç'¯r Oúþ¿!Ûúþ¿®Å)@ÇN n> ç¦zôÇa��k¯ëÓúþ‘qïçý_æP³Ôu-TÓµ­&ò[ WG¿²Ôô»ëf qe¨X\Gweyœ�5½Ì1ÏrVTRÀ�Exù†ŽÂâpXº0¯…ÅЭ†ÄШ¯ Ô1åJ½®°©NR§%ü­«÷íÃW«‡­GF£¥Z…XV£R?*Ó’�9ÅÛIBIIzÛŸÝÿìmûNè?µ·ìïà‹mÍŸü$rØÅ |GÑ­~CáïˆZEµ¼~"ÓÌæ†ÎòI!Öô`Kyš«§HÍæ™?çûÇo ñþøƒžp¦&�oìèÖž?‡1•uY‡âêTy}u5¤êÑŒg‚Æ5n\v¹T[ÿN¼6âì/pÆ]�Q�?­:qÃf¸xiõ\ÒŒ!õªN/X£qÄP½ï‡¯IÞ÷Iÿ¿g�üwÿ„Bï_×ü}àïxRÔõOøÇá§‹n|âÍãZ°]7WK=V {µHµ $ŽÞà›c7”¦(¦Ž)îRoç\΄+r¹Jq•7' Ó“„•Õ�žº5¿æ�Ö0UeM4”Z�”£8ó'gu÷[Ÿ¿dÏŒ¾ ›Â^"øSñÏöÁø¡áû[ýBÛâ'�ßö“¼Ñümw¦\ÛĺN±à�gS³²ÐDúEÚ\K«é¬kÒÛA¦Oc*Mq_'‹§Èô�I.¼òæ×sß¡>e¬c­Ëzÿ_yÍ|&ý–>1ø²Oø�âŸÆ¿Ú×ᯇ®®ì!ø}à‰h«ÍoÆÖºl6ïý¥«ø×XÓm®ô!q«\¼iš6›oÆ�w6úœ×SùsŸÆV�5¥*3–·u)¦¼’Ùß½Ï[IÉûÓ©ÑFv¯Ü}Að·à_†> 'ŠæÑõïx»]ñ®£a©xŸÅŸ|K/мQ«Ë¤ØÿgiQ]j’[ZƒO±Ýoj*ÄÂ'•㎋ä3‡Fyšs”¦Ó”§.i;+%~Ém×¾–·‘~×ÿ´6ƒû2|ñoÄÍUâ›XŽÝ´_è¬c2øƒÆÚ¤3&‡`#w‹u•¬©.­­H¬d·ÐôÝJx"¸ºH-gúŸ|(Ìüdñ#àÜ gO/©Z9‡fRQÊøsVœ³; W YÑŸ³ª©Öƒ„�9ÚII'uÍEí8Ê-Å㈡ U ØzœÊ�js¥7Ë.Y¦Ÿ+ÖÏ].šèÓWOÉ¿áEøKþ‚>#ÿÀ½3ÿ•ùgüA.ÿ¡‡á^[ÿΓæÔì³þãÿðnÿ™Cþ_„¿è#â?ü Ó?ùQGüA.ÿ¡‡á^[ÿÎ�ÿS²Ïùÿ�ÿÁ¸þeøQ~ÿ �ˆÿð/LÿåEñ¸Wþ†Aÿ…yoÿ:CýNË?çþ?ÿáÿù”?áEøKþ‚>#ÿÀ½3ÿ•Äá_úqþå¿üéõ;,ÿŸøÿü‡ÿæPÿ…á/úø�ÿôÏþTQÿK…èaÄøU–ÿó¤?Ôì³þãÿðnÿ™L=Gào„‚9þÑñÆGü~i§8ìâSôç× #£^ pªÿ™‡áV]ÿΡÿ©ùgüÿÇàÜ?ÿ3ÑøgOðž›6™¦Iw$\Itò^J“JÓIqžbŠ•Dp¦8�|¹`X–{Ã|5—ð®_,·-ž*¥ âjb§Z 'mÕ̯�ÀáªJ�lέ:�·4=É8Ý]&ᇒNÝ/ttƒRÓ°?âg'Oî�þF¬¿´òïúÔÿÀÿ3keô6«ÿ€÷ ¿ÚZwýäÿ¾Gÿ#Qý§—ÐΧþ¿ù˜?µ²ÏúUÿÀ?ûÐ?´´ïú Éÿ|�þF£ûO.ÿ¡�Oüó0keŸô6«ÿ€÷ iißô“þùü�Göž]ÿC:Ÿøÿæ`þÖË?èmWÿÿï@þÒÓ¿è''ýò?ù�í<»þ†u?ðÿÌÁý­–ÐÚ¯þÿÞ�ý¥§ÐNOûäò5Úywý êà ÿ™ƒû[,ÿ¡µ_üÿ½ûKNÿ œŸ÷Èÿäj?´òïúÔÿÀÿ3ö¶YÿCj¿øÿz-Þ+¤/o{,ªÒTÅÁë‚ Ž9ŽEvaêRÅAÏ�«V)ò·dš{Ù§AIiªºÕlwáªQÆAÔÃcëU‚—,œ}’q–ö”eAIiªºWZ«’ßÇ•çýzÜ觯N—ñi×ÈéHï—Ã/ð¿Èþ+ÿàã?ù8oÙÿ·üY�Sž¹ÿŠßWã=8çßò?­üÿ‘.sÿcJú‹Kñ?ãÏ÷ìý‚KÿOLþycÉ?ð=@ÎqŸlœÇ\-~åuúŸÿ®� ¨GoÈœ�ŸÇÔŒsÀ­ãý_×èfÿ¯ë§áè‹ ó3ÉÁÀöÁPxéÈõÁÅiú[ü‰}ÿ¯ëåmõ&^z“޽1×osÏ'¡Î6Ž\Sþµóþºwè»ýý?¯éŠNN1�¦:ޏü~¿\šÖ»?Ì_×õÛ·Þ7<~£ñõ?�ï×¹À¿õè|ħ¾xïœúŸÃÓ½0wçÓÿž¸í߯4ŸÌ3žŸãëôôüsEÅoëúþ¾bÿŸóþyö ÏÓØsíßãðǼõ¿õþA‘߃ø?löÿúÓóþ¿È\ãÏÓüzQ}A_×õøLt÷õÈ?áŸJ?¯ëúû…Óúþ¿®»‰Ï§¯~¾þÜŽ�yÏÔ¸þl\÷ëôÿõ�ÀxéÇRâÿ€!<ä2sÛ׎ƒ¯ñè _çé�þ¿á�EÃóõò óÔñØp{zúÿœã�_ä(ç§·±Ïò=p9ýi?ëúþ¿Í¯ÃúüÆÈÆzdàñ×¹ê�Ž˜$KÛúþ¿R¿¯ëúûºÀäœüÀ(ëòޤsÓÐdpsŽIšÊWù_×åb—õý[ŸÔüo�²þÚ„tûOìÛ�ŒqåþÐ}FàñŒ WóŸ�õxOÊAÿ¥dgéž|Çø²ïËOUüþ~Šdëšö‰á�.ï[ñ­§hz=Š /5=Vò +ugXÓ͸¹xâV–FH¢MÛæ•Ò(ÕäuSÕ�Àcs,U,_„ÄcquÛ�6ŒëÖ¨Òr—-:q”šŒS”ånXA9I¨¦×—œçy?帬ã>Í06U‚‚ž+1ÌñtpX:””!í1‰Ó§T©(Ó¥nzµg tã)Î1~!ª~Ñ_³¶±¦ê:F£ñ/Â×:~©cw¦ßÛ´÷[.,ï ’Öê+lÙ`•ã%H8n }¶Ãϰxœ>/ÃY¥ø›eøü«0ñ†q ÏŠËñ¸yWÄò×Âc(O ‰£&°éòÕ£Rpm4í-ùí ~Ì? hCáïø('ü�ïÅïúéàoýV¾ ¯óÈ?äoŒõ¡ÿ¨ÔEô—ÿ“ÛÆßâáïýe2#õKþ Ûâ-²"x‹ÄúΙáýJñwŒ.u-cX½·Óôë(Ýš .nƒHÉaœ4’ºEiTýWÔ§G(U*Î4éµg)ÎJ1Šæ[·d»y½ì_£g—dÞ Ç3ͱØL·.Áçyå\V;ˆ¥…ÂáéªÔ#ÍV½iBœ“Œcy^S”aå$ŸÜ>ø£ðïâž�uªü;ñŸ‡¼ccc:ÚßË¡j0^=…Çh¡¿·F6O:Fò[‹¨bûDJÒÃæF7W¹‡Åa±QsÃV§Z1v“„“å}–ñ¿K¥uª? ¸o‹ø_Œ0Õ±œ/Ÿe™æQQÄÏ.ÅS¯,5Ys8CJ/ÚáåQFR¥í¡kçOš:�åtF“a¯hz¬÷º^µ¤êW6™ûU½†£gy=¶Æ~Ñ ¼ÒI$˜«‡~ðÅ6šÝ5~é¡Ô†Pn§¬é,QϬjºn“²y1M©ßZØE$»Yü¨äº–$y6+>Å%¶«60 ¦“{&ýÄ^†h®"Šx%Žx'�&†h]dŠh¤PñˈY$ŽD`èèJº�ÊH Ò%üfþÚäø/χqûHþÃ_‡üQ³ç¸ óÇbHúc†_üi|_ýˆ¸ÇÿRóÃòÌÛþKz?ö’ßÿàìJÊòAã®1øŒãÐç®qÉüÌ~¦÷.Éumeks{{q¥�¥¼·7WwR¥½­µ½º4³Ü\Ï+¬PÃ(òK,®±ÆŠÏ#*‚B”£Ês”aEÊR“QŒcyJRvJ)&ÛnÉjÍ(Ñ«ˆ«J… U+ׯRhÑ£ T«Z­I(S¥Jœ§R¥IÉB‚r”šŒSm#øçý°¿i¯ŒÿðSŸÚkEøðJ+ýGᵿŠoto„¾ ·žM.ÃħÅvuŠ>2k‰V!)Òmõ R �A<+áa-­½¬Z�Öµ.§ü�Å|E›ø‹ÄTr\�T©—Ç:9^-Ó…wMOÚfX¾f’~ÉT¨¥4– xÆ*¤«J§û±àg„œôGð“â'ˆÃax®®O‡Çñ®Vœq˜œ²8©ÑX^È•(9¸,m\.¥,4¥,ç8ä­V´°´pð©?àœ?ðNïÙjûÃý¨>&|0ø‘ñçÄðØKo¡üJñÆ•ám./ä[Úø[áÜúÝŒ×ú}Ýê>Ÿa©ø±uYµ»¸ØiöÚl³>—é?p Ï …â<Ç-Ì3¼Bƒ�ÃK EJo–1Ã`%Zp”Ó§ ˜¥UÖ’ýÜi¶é¯ãî?úTý( ½Ó<3ð©äº¸Ãggâ]_ êϨJš¬µzê’4`ª¹g›ð¿‡øL#©›e†�8óÅn-Îã b¿³0ø¼ÛŒ”hÓiN½|§0†m‚ŽQU'_ °ñrŠ“M¤ÿ?nOø&F‹ðÀ°þÕß±Ç�¥ø‘ð:ÚX|A¨Ã¤kö~!Õ¼cö¨ä±ñW…üa¡Üâ_ i׆8®n�¸x�Æœƒú¯qŽ.®e´”Ýâ8Ñ–&®WBS”Ú˳Jñ8üª—3ú·Õ³ #O …Â)þÆWëð°P@yÆ¿�?¿g/Éñã‡Äü7ðZjvz*kž!¸–8®õ�B;™¬´�:ÒÖ­CTÔî-ì¯nÒÃN´ººû�íãD-lîf‹JTjV—%(9ÊÍÙv[¶Þ‰jµov—Q7mÎ�Cø›ðïÄžð¿Ž4?ø[Pð��´{OxKÄQkzzi^"Ño­­ï-u*êiãK»y-î­¤cZ/9e�ÎÚ—Nq” á%(»J6w‹ZYöÍ|aûVþÎ_þ1x;ö~ñŸÆxwã/�…‡ü"^Ôu#·ª¾­q-¦�nJDöZ}æ»w–š Ž§wey®Ýì¶Ò`¼žX£}#‡­:r­r•(_ših­¿›IjÚM%½‚ënçÐuˆÂ€ ü¸ÿ‚ÐÊ6?h®ß½ø?Ó¯ü—_†Uú…ŽÜ}ÃÿâÍ?õI™7ÅßòOf÷)ÿ©¸cøGŒò|Îx\nfùŽ€¼–lþ;ºv¯ìÄõ_×õýzŸ‰tþ¿²±µ�K…nîÔIxÿê È&Œ’W¡ùèqòc`%Žkxé¾ý>FK[®Ýÿ­ öº™˜Ë øóm§*Izà� �q’A]Ã'9»ëmA­tvý¯Ì«{k%«ƒ¿Ì�Æb•U�äznÇ\r¹ìkþD=z_/ë_RŽöI{ç?áõéÛè�oëÐ׳f6‰$ý؇s�˜{ç·Ót§™WM¯ÔËÜqœŸ¦ã�ŸÇž•4ÿ¯óbÚ .¥TŒ“ÉÁÂŽä·`=“Áz‰íÿ ý_u½KQ‹KˆÙY6ë¶Ïœ`ù]2 õ�¼üƒ’wtWIi»ÝöWôßþæq…‹1'$±$“Ôž­îO>ü޾±ý_™×õØnx=¿úÿ‘úÔ�ŠÚþ?×õ±ÕÛ[Éu(Ž1ÏRÇQOñ€1Œ É€A×ÿ­‘žG'>ôâ3>ß_åøq‘Çå@ øþ™äqïÓ¯~œc¥ý ½èzלŸj g�Ž éþ=½}óÅïý[‡õýusŽœõï×¹úý;ãÐQq_×õ©=½ÍÅ•Ìv—Ú]ÛKÖ÷6Ò½¼ðM‡Žh'Œ¬‘I�É$d:2†VyñXL.? ˆÁc°Ø|n F¦„ÅQ§ˆÃbpõ¢áZ†"…XΕj5`Ü*R©Sœdã(´Ú2Äa°øº°¸ºqX\E9ѯ†ÄR…jèÔ‹�JU¨ÔŒ©Õ§R-ÆtçBQmI4Én.nngžöúy®ï.¤y渺–Iîn'•‹É=ÄÓ3É,²9,ï#3³nf$œÓÂap¸ .�Ãaðx<%x|. Fž …ÃÒ‚…*|=(•4¡Â�*pŒ!Æ)+%‡Ãað”(á°´(á°Øzp£‡ÃáéBŽ…qP§J�j4éÒ§£B1Œb’ŠIX¨X³džO·Øçœ??zß¡¿A2p}{ó�o_å×ßþ¿OaÛ8ö<þ´\÷ê:ôü}}ÿ©ïG�ÿ¯éÿ_¡bÖâêÖ_6Îyí§ÁQ-´¯�[ï(’"­´Ž=ªeÍZQŒ“é$¤´ÙÙ¦�7Si÷W_×ä9@�zå�ÇOLtªýý_‘%ÅÝÕÛ#Ý\ÏrñÆ‘F÷É1Ž$$¬H]‰Hбڊv©fÚ2iF1…Ôc¦ùšŠµßv–íõ}l6Ûݶ֚¶ì»ZÉã×9Æ?<ž>´À^1þ÷#ÓÓ×8u ¶?lŸÚ‹Âÿ¢øà…ž×¼ ðOöpø5¡|1ð†"xÿX�KgÒ`×¼sâ#Þ©-–Úi¶WˆÝ¾Ímñ|Ã8¬…çØüÓCœñq_2ÇâpðœiB„u—à(º©U• ð¤§ð:“Œn—4½¼ç4¥˜, J¥ [‚§…ÃÒ©(¹9¿ˆŸ+åU1,ç˺Œ[ì¾'Ïã‚xý9÷ÇOÇÿhx—õØ‘Xck ®¾0zôöä cßšÝVÿ™6ѳin$ž:zuã©çê@áÿŸõýmØ›ë·ü?õèT–mß"ð�úüÀg‡ê=N3EÊK«ûº Íų³ÛO-¼Œ¯<4NÑÈ6ÉhÈmŒ8eÉ 3‘ÔTµ+J*JéÚI4šÙëÕ?Ðiµªm=»h÷ûÈ2;Ÿ§?®{~YÏ4ÃúüEÏúþz÷÷ã©îþ9éØ{wéלôÈ ä} ögß'�Î�ÿ_×õØ–‹‹7ȸ–:¶›É•ãó`“ýd2„eß ˜HØ2>å8¤ãZñR³RWW´–Í^öjú=Ö¡¯FÕÓO[]vÑíäDÎ= íøý Ȧš‰¯d{ëù朱¥žF–iÙT")y vQªb@Qµpc«F*1_f)E+êì•–îîËÏpm·«»êÛ×ï$ÆB¢à"/Dã�œúöiü¿ÈV$™±ågŸÜF3øßé‘Î=9¡ëÈM__ëúÜFU¸@’®¼E&:gø<•$ 2{)oú}õØÊ‘7duÚÆþ\¦pG_NÂF7ñý3Èãß§^ý8ÇJý"As:BÖé<«o#¤�•ÖØòD#2™IùHRå‹jN)É&“²ºOt�¯gåóÝ­wg«WÓü®}—¡þÒþÒÿ`/þÉ2è> “ƾ)ý§|3ñÂÏÄ‘�7þ{oèŸ¥ð…Æ“rÍ|º·öÌ·Ò ˜DZt¶&Ô2éfÄGã«ðæ*§`¸­W솱9$ðÏÚ}juëcÖ.5cî{/c.Y^¢Ÿ>ж§³O2¥ ‚¾PéÔuªæt±Ê¯»ì•:xwEÁûÜüîNêÑå·[è|k=ÅÅÔ­=ÌòÜO&ß2iäy¦}ª¨»ä‘™Û ª‹¸�ªŽìRŒW,b£²K•+»è•­®½.ÏÝ»»·Ýݾ޺k«“Ú5ÌæÕ$óVØË'Ù–b–ÞZɆqæÝ‚Fì“–<Î|±æjÜé.f¯{9om—·Ü=mk»'t®í~þº²¿áôü}�õì¥;“ýy~¿§ǯ<ñùöÍÐ2p}{ó�o_å×ßþ¿OaÛ8ö<þ´\÷ê:ôü}}ÿ©ïG�ÿ¯éÿ_ zÿõ¸êN8ü8îN(�}»ŽŸL�éÛµ&}ý9íïÓíêGjý_֢Ǯr3Œ~xÿ<}hxÇøgÜ�OO\àqÖ€ ž�{ûã·n1ëý1@ÇéϾ:~8÷ù]ƒ·à8ê8>¿‡ùæ�‹‘ÜúúztýzãñÀà€ýyäõéþýGAÓ4 äàã®zúøü{ž¹£úþ¿®À&GsôçõÏoË9æ€þ¿sÀþ€ž½Ç=øê@û€‡NzvÝúuç=29Ÿ_Ã=€÷Éãó ×õýv ã©öãŸ^ßç9 7éÏà`éŸÄç¢þ¿¯Ô?¯ø"ƒ�}Ow|¼}îÏÏ©4Ÿõø‚þ¾_äA'Löã'ÔþG�:g¡=jeý[úE-õØÊ¸� ñž£‘ÜuêG§œôê+ޤ76‹ÛËÌú§ö6ý²¾&þÅŸäñŸƒ=ž ŽÓLø…ðûQº¹·ÑüY¤[Üy±K °—þÊñ>’ìø{Ä"Öñô×¼½¶¹³Ô4«ýON»ü'Ç/øgÆÞþÅÎe,»6Ëå[üC†£N¦3(ÆT§É8NäúÞW‹q¢³»ÚÑŽ"4hÔ§[‹Ãá±4GðëÄ\ßÃÌçûC/K‚Å*tsLªµIÃŽÃÂ\ÊQ”oìq”/?ªâù*{R¤'N­ µiOúîý�?lŸ€_µ�‡WZøQãYµ¸b®ü?×Z #Ǿ—ËŽIWQðü“É%ÝŠ™"×´iµO\ʳAo©½ÝµÝ½¿øyã‚"ø?™OÆheõ&ã—ñ_˜ÎÌáÏ(ÃêÙ”iÆq—šY~:LÊ”*TÂF�Z5*¢üâ/ qÞ5òÆœ±PŠx¬§á‡Ípr²rUp’“•JII%ŠÃJ¾ræ„kº�©{Ž¡ßñú¯ÿª¿�ñ½~gën‡}žzu÷þ¸ãŸ§æM|Ž7¯Ïúùt>ƒ ÓOëúüÏ‹i¯Ûà?ì½£\ß|Nñ�”~ kSs¤ü?Ñ%·Õ %Ùý_‡¾ ø‡âæa / äuå—{oeŒâ<|já8{.·ñ#1•9Ƶh-~§�†++§3�伎)ñ…x *ÙæcMb½Ÿ= « (WÍ1Wø}–J.“Óë‰QÃ+YÕR²Éíkû[|Dý¯¾"§‹ü[z†tXî´ÿxOºžãKðÆ•qqæÉ,²K°j~"ÔÂ[w]6Ö§Pkk[{{[6ËOÓíدüá8bY6Jå˜ç”éb¸‹ˆñTiSÆæøÊT¹!FÏ •aª²ì¹U¬°Êµj•kb1xŒN&·ðWˆÞ#g>#gÌ3& ”rœ¦�IË�ÃÎ|Ò”œšöøÚéCëx· n³§N§J…*4iüå§Ü]ر’ÎêæÒFP¬öÓKnì½p^'RFy环Ûy#%f“Kù•ÿ3óÇgÓõ7Ó]×—þcZ¿á©^O¾öǯSÖ­R§ÿ>áÿ€Gü„’ìQ9ïÉ=O\œòrzóÔþ}kPbP  õ­¯ÊÎà ¬>³Gù¥ÿ€Oÿ‘/ÙÏ·â¿Ì(úÍæ—þ?þD=œû~+üÂ�¬ÑþiàÿäCÙÏ·â¿Ì(úÍæ—þ?þD=œû~+üÂ�¬ÑþiàÿäCÙÏ·â¿Ì(úÍæ—þ?þD=œû~+üÂ�¬ÑþiàÿäCÙÏ·â¿Ì(úÍæ—þ?þD=œû~+üÂ�¬ÑþiàÿäCÙÏ·â¿Ì(úÍ/æ—þ?þD=œû~+üÌ-Kî? þcœŽ}ŽãÔŒ QõŠ]åÿ€Oÿ‘g//½Eâ2J?Ž£®xýxã×·©xŠMï/üüˆÝ9i·Þ�Qøÿ"¦±ÿcM÷þš´_§ùõ¯/%:®QÛ–;¦ºvg]Ô,û³Öõ+™íâ†;A¼½¹ŽÒ×Ï aGd’y¦‘‘¤[k8.n„ $Fá¡âh|ß99͈?³o{ø‡WË‚ú¢1Ó,ÇXžhù~æý™{ÿC±ÿ~4þQÓù~æý™{ÿC±ÿ~4þQÑòüÿÌû2÷þ†cþühü££åùÿ˜ ÝYÞCest÷Ñ]Å<–÷3¥¼W)5¿”^ÞQi½´Ë$r4°²A Æ •dó·+¢%ûn§=ËèͧÙ[O%¤"Î 7¸¸žÝŠ]Ë<·ö×±ˆ’`ÐC 0DàÃ$ÒO*ÍP€Iý™{ÿC±ÿ~4þQÓù~æÆå4ê¨ò±X•£ðò´Œª\¬jt@]‚+1 ¥�š>_Ÿù’帩J)ÍÚ)´œšMµõm$Ý•ôMì?û2÷þ†cþühü££åùÿ™AýŸ¨ f‹]¿–P¬cKËm"KS&>O=-4Û+—‹v7¬7pHW!eC‚ÈßSž]>Æ[XãŽÿRš;Hb¸ÞÑ[\�+Þù¡|§œXCmy/–­ÚÚÝbYa �OìÛÞþ!ÕDzÁ €>€èŒ@ôË1ÇV'š>_Ÿù€f^ÿÐìß�ÿ”tþ_Ÿù€f^ÿÐìß�ÿ”t|¿?óþ̽ÿ¡‡Xÿ¿ÿ(èù~æÀ÷Vw�Ù\Ý=ôWqO%½ÌéoÊMoå·”ZAom2É�,,�Bñˆ%Y<íÊè€â~4jK£ü%ø�«½½åÚi^×µ&µÓ‹ Båltù®ZÞÄ£ÆâòaŽÔ¤‘·žÉµÔá†8‰Êž¼áÍÏ 5gO�š4äãËmy®—-ºØäÇÔ•,2¬Üéáq ©ëQʧ(¨[í¶—/÷¬~G~Ä>2øÉâÿ‰Ÿ5ŸøÅ^ð‡ˆt"ëÃo®i:´6rh•޾žš¾± wz¶«{g®ÜÝ^ÞHÒItlĵ³µ´´ƒç¸R¶mS�ž>†.kÑ¥:U1«È§Fn*�UyJQ¬äíº‡D’_œpV#<­˜æU3<.:–‡£R…\U:ê t*Ê*œ*×´§9¼¥+;?gv1Š?Pb¶s)]ü…™I’ X#œ�GÙ'À$’xqœ r£lÏ §�¯%•fo;º´*IS¨ì¯8¯ªWK™î•G¯Dô]¹¦3Çb$²|Ê­çwWVJ•Wʯ8¥‚®—7eQ뺋Ñm- Àÿ‰Fªxÿž­Û�úvé\T_ô'Íðl¿ùÜyßR_ô$Î?ðl¿ùØ/ÙýõOûúßü¯£ê‹þ„ù¯þ —ÿ;ƒêKþ„™Çþ —ÿ;ìƒþ€ú§ýýoþWÑõEÿB|×ÿËÿ�Áõ%ÿBLãÿËÿ�†Í¦…iqË,W¶ÎÄæ)%BÃóÏ̪}±‚}œ&C„ÄP�Z´ñ¸YÉÊôjU¦å6“× Y­W4"ü­fýÌà±8xV­K„œœ“£V­7(¤ÚO\4%i-W4"ü­fìÂ7aýûŸûùÿ®Ÿõkÿ?1_ø2Ÿÿ):ÿÕ\·þ~bÿðm/þPð�Ø~çþþGÿƨÿV°óóÿƒ)ÿò�ÿUrßùù‹ÿÁ´¿ù@Â7aýûŸûùÿ£ýZÀÏÌWþ §ÿÊCýUËçæ/ÿÒÿå�•…½‚2A¿çmÌÎÁ˜�0@gÔç5ê`p|¾œ©Ðç|ò攪IJM¥d®”U’Ù$·w¹ë`2ì6[NtðüíT—<çRJS“JÉ6£h­’ŠÝ·vÇßÇ•çýzÜ觯F—ñi×ÈéHí—Ã/ð¿Èþ+¿àã<ÃD~Ïùëÿ cR’?æxÖyÏOn{‘èkúÛÁùgö4§ÿ¨”�Çøóý÷ÿ`’ÿÓÓ?žHÏ Çn@=;üàdË ŸÜ¢ô> ô¾ÿ®Ý ‰Ž? ã'§ q€#¯©ÆwŽÝÌŸ§õý—¥¥Ï9ëŸLŒðpÇN§Ž8ëŠÒ=ÿ¯OëÏ©"ð1ž2G޽Ç<׌sÀ«o¿ßùþ¤µý~¿zóÆsõÿxs€={g¿RM úþ¿­LñïŸný>_B1ŒñÔãš?¯ó×óëåý~sÜã·Nßý|~^ƒ<±~�ŸÇ¨Éü~ŸQ’sŒu =ÎÐuþ½»÷ϽÒgÛëü¿28ü¨¿�éžGý:÷éÆ:PÒ8Æ;c³õä}=ûv_×õøõäôÆr?^¿_ÔzçŠúþº€ç9ë߯sõúwÇ ¢âþ¿¯ëQO^zð=\çžÙÏ8íùƒ°Ÿ‡Óñö?×°>”\_×�wëúqìzóÏŸlÑÐ}'׿8öõþ]p=ðëôö³�cÏë@‡Á'$d¦O¯¿¡äG“þ¿¯ëæ26xÁ}³Ø€FrAäv–>ÝuEVbFÆF9-Ðzc�ÔûÇPk'×úþ¿×õý‘ýBÿÁ¶d›oÛW'þ^?f¿§ú¯Úp=?¡é_Î~;ëW„ÿëÞÿ¥dgé~|Çø²ïËOÕøú)ñ§í³ðãÇ_þh©à›KÍhø{ÄÚÚ·‡4õyoµy,g³·¼³´LÉq¦I<€ZB¯pÐÞÏ4(æ§ö/¸�#áî#ƼêµÌ2ÿªasCP¡‡©ôëT£Z´½Úñ1„oVmSS£N”Tî¿‘¾˜žñ¯ø}“ð˜¼ÝäYïöži�`#*¸Ü„ðuð”1xL,/%ÿåeWÿ­Ü'ÿE?áë-ÿæ“ü»ÿˆQâ—ý^?ÿÄ;ˆ¿ùÜzÂ߀ÿu�øZ;xËÃoi®iWòø‹XÐ5]ÇD†Îö‰5'½Ômìâi-&žXek»©#ÛE$®«_?ÅuÁ˜<‡4•|ï'Ì£WŠ¡¿�ÂãkãgZŒéÇ 8j•¦£VRP�YÅR¥9Ô”b›>ëÃOü_͸߆©à¸7‹xzx\ë,ÆÕϳl�3ɰY=&2Ž"¦aÛþ �ð+ゾ!ø»Çþ0ð¿‰<á)üsáÈì|M¦Þè—ž!Õîu�*öÚK}#RŽÚôÚéPi÷ŽÚœ–«–í-m$—μòváœ2†"¶"µ*”(º.Ÿ-X¸J¤Üá%hJÒ´eï5k»+ÝÛßú'xyÇ9ç|Iže¯dµ2:¹\pù¶¾__3ÆÕÇ`ëÒ•,*4±ËO ^RÅÊŠ‡=hÑ£)ûJþÏòwþ yñËâÄÿø*,?²·ÆßÚ?Ç_²÷쥠�X[ëÞ¹Öì4±ÖþÚø­¼i¬Xéwþ ¹Öüq{7ƒ!ñ¬nôŸÙ#K(† /Z{ŸÖ04¡OõŠTa_ù��œ®§ËÊ›»V‚æ²ÖOÕÞ ëfì�Ò_ø%ÿì×û`|ø£®jíqðÏö¦ý„|Ioâ[o ÝØüLÖ¼qâK ¶·þñ‹dÚF±¡xsSx’=?ÅѼ{>ŒÑjÓêMkw}oc$\XúøjÔÒxyÐÅÇ•ÊðQO¤¢ÝÓ’ëá}-µÇ×[£à?ø!�<3ðãã·üƒâŒõ[} Â>ðÜÞ,ñ>³vH¶Òôø×Çš®­6ÐY’ÖÆÖy¶ i$*5geSךÆS¥‚„Uå7ËݸÁ%÷„~×õÜúÃÿðp½ÿмaâ=oñ'Åörðn SÆü?®_kž"ð¿‡ç6Þ(ñ�aà¦ð†�,Ö±‹“áíSǪ“ˆüO)JÅäê1Š–*š­%îÓi(Ê_ËåÌõûJöèsyh}‡ûÁ^<1ûY|.ý¦~0|Tøs¦|ð7ìѦx;Yñ¬ý‘¾|Úg㯋~ ü±ñ…ôï7ƒ¡ð†¯â_xRo èWw©á?E>§}¥]ëMtÚe‡†|8ö:¶§x-®çk#—ûo¬â*Õö£V«RqææQœ¹�¹£¢~êÝÊWIw9­d•Ý�ÝŸ OâŸhw>-Ó´�#Å7M„þ"Òt-Rë[ÑtÍj[X¤Ô´í'Z½Ó4K½_O²»im­5K�HŸP‚$»“L°iM¬^L¹yŸ+n7|­«6º6“i6·WvîÊ6é þ2¿m GüçÃÏÿW#û ã sàŸÙó¦yê8>¤ö¿¥¸eÿƘÅÿØ‹Œõ/<üË3où-©?ú�ÉôÎúû�ì:Ü’¼žÜÿ“è úô濚ú£è|;ÿ<ø‰¨|3ý„?h-kI�­õ-oÃ_€í¤�™\ÛüAñ.‹àÝgdŠÁ£dðöµ«Kƒ•tP¥XŠø�ñõ2î ÏkRn5+aéà¢Öü¸üE%mVÏØVªÓèìIýx_ ÅŸH¿ òüm8ÔÂ`3l_ÕŒ’qö¼1”ãóìâÓR‹Ìð(Ê/G;è™ù‹ÿø=¡É¤ürøõcou¯Ç«èÿ ¼5},jóééðx£Å‹lÌ„ÆÚÃê>I¤F#ÒÌCÏ"¿æþåT]<ç;œ#*ê­,·6®éASXœW+kOjêa“iÞÔí´�ÿ¯ÿiWæÆxwá¾VŽ[<;Œ³l<$ãOˆž&¦O’ʲR÷–8\êP‹\®xÅ6¹éÅÇó�öóý’?k{ŸÛ3ãÅïÂ߉ÿ[â?Ä�sÄñ_†¼-â_hÚï…µÝFYü%¥Úk:}Å•œ¾ðûi޽ѦžáÕÒ~ÌÒa²¼Ÿà8Û…¸¢\[›Jyne˜hf«à±X|6#J¶µG,-8Õ„%<=gBt[_WT¹Wî£ ?ê�£‡�ž Rð�iaøÃ„xQp¯ eùgd¹¶q”äØü»8˰°§�ã+àqšXŠðÍó5ŠÍ0øútê<Ñã}«oR½ ZÁKÿd¿Úå¾ ~Æ7zއâïŠvÿ ~é¾!ÙøJOÆ·^ñüo÷š–©™íÝí®¡¥�+ÇÅ1Cqg5×…Ô^^ÄÚŽ™öߨñ…ø§û#„eRŽ+2Ž[“SÀãá…�Ld°¸äâçR¢¤§)Æt•,;Ä¥(JXo~iÔ§Ïø¯Ñ7Ư—xóG ˜dœWŒkKÓ OáØ´OjšŸ‡5%[�6ËÅ [Ù ?R´µ¸¾²Òý­žÇP³¸¸û¯ 2<Ó/áìžs†«C ˜âœðØ e7û PTq*aê.jpÅ{°ä©Êp¥ÎâáR—ó7ÓËľ âÏ8Oáæs�Ìó~É#†Í¸£ ÄÓ­AfTóIæ^ ša[¥ŠÄd­Õ®ñ8Jõ©áëã^UŽ# ^�/ÆÏÙbÏPý‘?à¬úÃMúq£iŸ¼KðU‘ç–A¬ø3Æw×ÞðòjdÌò¬Z�‡5¶G8õ�>ÚlÈ VoÉxnáoèåôg/eO:Ädö»~× ‹œðôM¹�ªaëk¢«½yOîß«á¼núfY�ÃÓxì_‡YO)*p�Ôs쇇ͳIa5’§<.i—¦š”ð8š´ý×Q¥ûÿIý†\|[2ÛüCmøWDº{_ÜÈ—ð˜ÓSB7ZyÞmâOý¨D‚ÜB­-ã2×…Tœj:¾Ò§³ø9m'ðý©^úöد~‡Á´¿ü'À¿¶Ïüs^øñû@þÆ¢óÀý©¼!ðçÁ¾Ò~<ë:.­wâ¤ðˆ5}WÅÚ‹->ÛÉe‘§k) 6žúF¯§ëWÔ„²YÞhГ×C,.5Q£‰÷åBS”�Ò� Ö>üK×<9àhõ«¯Â/§kžýœuxô™|G}mg}â ›w½“íšÝí­½æ­tÓ_ÜÄ“Ü:�òÞe‰ÌTåÏ%V S·/3R¬¯Ê®–Ú%¢Ø%´}?Èýýµ|]û4YÿÁdeøïö`“Ç_µ™þ]èß!øÇâ? éÚ]õß�µ»__k ,¼9¥x¢çÀÚž’š­“>½¤Ç­¡·Òµ¸®´û(¸°Ñ¯ý›ˆ”+òS^Õ:~Î2mrÇ™)¶œy“³ÑÛu«·2Óú¹ïß¶OüoHø ñæçö_ýžgï~Ô¿4Id³ñn™á�JþÏOѵXôصi´ËÃ~ñ¯ˆ|_­évM+ø–Ú×NÒlü?$2[Éyym©Zéùa²ÇV�·­Z4)=bä“m^×nRŒb›øuw촸孒¹éŸðOø+?€ÿm�x‹à¯Œ~kß?h? Xê:•×Ãí{Q“WÓõËá-u¿ì]RïGðî©i¯h¯$Së>Ö´+;û;IâÆïX‚ÃV›OÏ—Ï ÕŒÕj2i)¥f›Õ]^I§ÒI´ú¥uv¥&~¹WžQùqÿ Ïü;göŠ 7Áå :’ß¾ sœzûÿ ä½È=sOýRæGÍñoü“ù‡ýÊÿênþ4ûh´È…ÝÒ‡¼týÄxGŽ727�Çø1Æ[v?³#¥›ßÌüIëý-†Ëp÷4’¾XžØÀ  ð£v3Ÿ\ �bú¶M¿¯ëñò$ О¼ã®pp7u€xÍZiٯ맡6ÿƒ÷ÿÃù–WêŠÖw=¬‡ï ?ĸù€äã§,9Ü„µ×ðþ¼È¯,ÚÕÇÍæC'0LUÆ3Ôd)‚}~ðã KVùþ¥«3ÿíCé@3÷¿ÄuëôÏ.ûÿ_×@ê¿®…+ky.¥Xâ\“ÔŽ€¤žÊ:œŒç¦N3*ý?¯?ëüÊmyùÿZµF-&²³!¯~þlåʽ·uÂÿ In¶Ý´ê$¯¾ÝõýtØâË1$³I99É$’I9ç=r{ç½g÷•oëþCþqè}oÇèNEeˆ’Nã¿ ÇB1××=ó@À:­OTŽÎ6ÓôæËtººK†Dp~÷<°ÈO¸‡q%[keýÁ%+êrª2KÃßÜÿ?×ŒŠ›ÿ_×õb…gì1“ßüG×=Lš?¯ëúü�=»÷ôÇ×ðíÛJ/óë_ëúù�ê¯ÿ_Ú‹…¿­‡Ý�ÀýsÏô<äzãè®×õò¸…‰öŸ¦}ýÿWøoÄÏøAà~_‡J?¯_éþ@é�QŸ¯ëù�ßñEÿ¯ëåÔ Fn ÙO©'F3ôõ§O˸;ÿÁþ»‘’Çæ=xÉü{cÝzð}é_ט_ׯõØL�n¿×ùcëNá÷ÿ_×õÐçß?�ãÿ×Ç~‡“úþ»Ø?!sÔs“ú§=ÏOOz./ëþQÏ�Øèyü‰ýOIâ�_Ö…€`t.G^¸ã§Aøzàvæ�Ø_×õè7$ž¼þõþB�ëúýúþ¿¯A}9ãôãñã={`þt0üÄ'¦:ñÇaÁý};ýNi\=z÷údõý¦h¿õùH}Oâ~œôë�ÿ_@?P?—^Øéõ$æ�Ãúþ¿«u«Üð£$äãÛðÇ>ç×ÐZïóëúèE$»†ÕáG~A9Ž:cŸÇ¥6þí½}@·_ëúd?LƒÛ§×�ÛÛž}j{‡õ×úþ´ ç×§ùÏÿ\Ñý_ÒëúõON¼wÇùägëEÀ3éÇ8ÿ?ç®p4ïýX>àÏoNÜó×üŽ}…þ¼€;ðOÿ[ÿ­Ž¹÷íHãqí×Ó×ðÀöúÓå­°pf›"xÅ)ô_l€ c¯;Zü?¯Ð_¡bIL‡  A�ª9ÀíÏ=zúw¤Ýßõý\dYäÿœÿœg§åÅ �vIš1€˜ò#å‘[<är8úqÔdâ÷þ—õÿ_×õýwåwÜ[ÊTN]ü´/\ŽOµ×C6òãíåFÔAµwŽy?^Ëü=>°Ýü½;~C·r¦}§N½zq×�ZWþ]?–}3Óóý]ÿ­Ãúþ¿¯Ô3þ�x—áÒ�ë×ú�˜'ëëßó¾9â‹ÿ_×˨ ŸOÿW'ϯéÓÔ' =2yõÿõu<ð}é\?¯ë×úìݯòÇÖ�Ãïþ¿¯ë¡Ï¾Çÿ¯Žý'õýw°~Bç¨ç'ô?N{žžžô\>_×ü0d};àþDÿõ¿ A¨™éÓùöǧåŸONK» 'ÔÈ~þž´¾A ¾œñúqøñž½°:l?1 鎼qØp_NÿSšWÏ^½þ™=_éš/ý~_ÒŸSøŸ§=:ãÿ×ÐÔå×¶:}I9§pþ¿¯êÝC§nÙëø~œôäúú+‡`úqïÏpÎ9>™éOúþ¿¯Kõýz‡Ó öéõàvöçŸZ]ÃúëýZsëÓüŒçÿ®hþ¿¯éõýz‡'§^;ãüò3õ¢àô㜟ó×8šwþ¬pg·§aÎyëþG>‹ÿ^@ø'ÿ­ÿÖÇ\ûö¤ñëŽAÇäØúÓ!r8Ï9þ¼ž�q�Û¯§e¯NÿðÁø<žýøÉœûã#< ÏCž(ßú_×õäŸ×ëúÛ¨Ž2XƒÁ9ÁÆqÉë–'ŽÇ­ÿ_ð®ãínŸ—åo"¼ˆ9�é׎p{ƒ•æ±”ÉÃÿÃú–Ÿõéùþ&dÐ=89çg¦OçÆ0=«št÷ïýy)wþ¾_Õˆìn5=QµÕô]BÿIÕtëˆî¬5=6îâÃP±¹„îŠêÎòÚHn-§�†èæ†D•ʸ8Ï™�Ëp™†¾…ÃãpXªS£‰ÂbèSÄaqfš�*ô+Ft«Sšv•:‘”$´i£« Н…­O†¯Wˆ£5R•z%J­*‘Ö3§Vœ£8N/U(ÉItg×Þÿ‚…~Û^µ†ÇFý¡|mwmB‡Šàðï�fX‚�Šn¼s¢xŽåÙ�®ó3ªíP@�ÿ=ñÑ#èíŪb3_ ¸~�ZµJ�$­›pÄ%94Ûö\5˜å£ÌÕÚŒmÉ´ù¥Ôò¯¼VɩƖ �sIBäŠÌiàs‰$´^þo„ÇÍÙh›•Õ–º+rßà¡¶ÏŒ4!kª~о4°Šâé-å“Â6þðÛDÖóoU¿ð.‰á»ØÃyhO—p„�Ü圷æüQôJúšØ¬[œbâÞ–)º5q û˜ª£ì”*N¢“å¡[óßÐôÓ›Ä^):eÈ–+ÝIN­a¦ø~ÈOûuÕÆ£r·qéi·ºÒ‚œ�ö[ùöGó7ÒoÆŒo„ü-€Áðó¥,⚘¼>Y‰« u¡”à°Q ñù£ÃÔS…\D^+‡ÀS­AÖ©SQUŽXzß‚(øuû7\ü4ýœþ9~Ö¿?l|Sý¤4?ø�5�ÙøÇz~€ÞñÕÿ…ä{»Ïø‡Lñ>ǃÃaãìèÂñ¤¥.i¹JO³ý·?jy<ðÏSŒã_k~·Õ5Kƒ¥øcuåûø‡ÄVms"� "¹¶³¶‹lJ‰ˆ”íÜY›ã8›Æ/ðTxbX^+ÆÑ–;†¨ãqn8l¹ûlT³|ã*ÒæÁJÒtpÔ)Ú<±µ4ùnäßù#ôÉÂÐðãéÇÜÁ4ÖAÃYM\ž9vU†r¯G ±9&_Ь¡Wñ8™{JõªT~Ò´ìäÔm’ý§ý†>"ø×â—ÀM?Åž>×®|Iâ¼OâK5;¨líækK+ˆÖ�µ¥¸XU˜)†9ù™�YxÄyßp6â }\Ë1ži™P–*¬(Ó›¥B¤#J´)R§h&Ò|—}[?;àì~/1Éiâqµ¥ˆ®ñˆ:’P‹q„’Š´#é~×>¬¾ÿ�¦‰ÿ]oÿô†JýŒú‡ºù˜¿ˆ ñ1=•pOÓœ]¤›Ñ&›ù m(ɽ’mú-Ï›ü+qØÇ˜½t'>½ˆëÏ=0;W_Ö(ÿÏÅ÷?ò8%ŠÃÿÏÈýÒýêÖ:fŸs#Ì÷W*ò¶YVD P]ð³º8-Æxc.',˱5ªWž+Ô—3P©ì—º¥FM+-¹�¶VVGƒŠÊ²Ì]z˜Š˜¼TgV\ÒP©ÔR´T¨NIYhœš[+-Dº6–l»è?Ž1ÿ¶õ‡ö&WÿAx¿üOÿ™Îì§þƒq¿ø2Ÿÿ3ÑÏmiË•�mÌÄ"…˜Œ“�Éîy¯z�l=:p§·�8F ÉÊRj1QNRjîM-[Ýê} *ØjTéÒ�[Æœ!N.\Ò“PŠŠr“W”šZ·»ÔÚ­ÿç¨ü›ü*þ³Cþ~/Çü�>µ‡ÿŸ‹î—ùÚ­ÿç¨ü›ü(úÍùø¿ò­aÿçâû¥þAö«ùê?&ÿ >³Cþ~/ÇüƒëXùø¾é�}ªßþz�É¿Â�¬ÐÿŸ‹ñÿ úÖþ~/º_äj·ÿž£òoð£ë4?çâüÈ>µ‡ÿŸ‹î—ùÚ­ÿç¨ü›ü(úÍùø¿ò­aÿçâû¥þCo¿ãÊóþ½n?ôS×]/âÒÿ¯�ÿÒ‘´¾…þGñ]ÿçþ#öÿ²1©wþg�_±÷Ç·µ[x#ÿ"lçþÆtÿõ‘ùÿ¿`¿ì_úvgóÇ?)ÀõëÇ¡ÈÏÓ¸ ׸Ƕ§Á?×ô-§§§Ec®3Œž}±ƒÎ1�ã·õøüÿ¯×^ÿ©`c¨$tÆ?®qÓ$ƒœZGúïЉ"Âãn2x ‘øŸ\ŒsØpNs}ü¿¯À:ëçýÃî!ǹϨìyüqÀé×Ó±éýÁ'ðî7={޾ zž™çëÎ3Fïúþ®13É?_Çüã=?,ŠwüýL\ãòÇ?Ïßñ‡Lœ&{wïé�¯áÛ¶>”_æÖ¿×õóÔÿ_þ¿µ [}§N½zq×�ZWþ]?–}3Óóý]ÿ­Ãúþ¿¯Ô3þ�x—áÒ�ë×ú�˜'ëëßó¾9â‹ÿ_×˨ ŸOÿW'ϯéÓÔ' =2yõÿõu<ð}é\?¯ë×úìݯòÇÖ�Ãïþ¿¯ë¡Ï¾Çÿ¯Žý'õýw°~Bç¨ç'ô?N{žžžô\>_×ü0 à:gסã®ÉÏËR߯õÿ×õùüˆœöàþã=»™>ƒ§%_úÿ€QQ‰äp:÷ ž:~œ ýqŽ1•îË_/êçõÿÙÇ¯í«ƒÇÚ?f¼zÝþÐù=A•üéã·ñxOüAÿ¥dgé~ü¿ø²ïËOõø ú!ùMÿqý§>/~Í?<+yðvîçÚßÄ ê^;¶³·»ŸÃl5öªÖºkÝÃqke­k¦Ù¡²¾x$šÚÊËT’ÈÁ|¶×PxÙÖ.¾ A¸J­NGQ$Ü‹••k'mv³³_Üß@ŸøÆO³Ì?ˆ4(æùo pÚÏ0|1[V…,ëW1Ã`c_)WÄåÙb¬ªb0Ñ© u±8œ1*®Ö¡Wóþ �ûaþÒž%ø�û@x³âÄïˆ|#ð§öZø¡ñ+þïx�Q¿Ðÿá"ðÖ§áMCIR&g†ÖúòÎ fÊÖXÐÌ–²ß´HR9qäå8ìTêâgVµZУƒ­W–sn<ðpqßDÚæKÊçöŸÓGèûàîOÂä<Á|%ÀÙÿøßÁ<ý­‘äøL&gý“œà³Ü&=§N1©_ ‡ÄU˱5á9{9W†T’”á•~ÁS¿l«Žþñ¿ˆþ,j¾'Ð5¿éqx—áÝ妘<uáÝCV¶ŠÿEÑtQj"ðûÃdæ-/TÓ%·Õ`š(¥¼¾¾^¥ß㱩*Òœe5ÏI¥ìÜ\•ãÛÝÓi+K»zß÷8ú}1>æÜ7“ð&%ÍrÞÇO&âì>#þ±ÑÍð˜ ÓÂæ9–bë¹æÑ©‰Š©�ÁciÕÀÔ§:�Ãá°®iaÿ£¿Ú7â÷Ä âï…t-fÿÚF�i¦¼-¦Ÿ²ÏªK}aô·’^ûD‘F÷ b�Ç*Û«ZHZ31‘«üÄúeý"<]á¯s.á^#͸7‡øw’ÔÃË&—Ô1Yæ#4ʰ¹¦#2¯˜F[«B�\dòºXz5ツòú²•)b]Y/ò_Á_8?3àü7fÙn:Ìs,F:55}b–žW O 3—±…IŠÅN¤éºÒŽ" MRPGÏßð¸þ*ÐÿâŸüÝñuü�ÿ!ã×ý¾;ÿăÿËØ?âpýþ¨ò'ÔŸ³Å_x£Äú¯…¼I©ÞxƒO]}ZÞòûl×zuŵå�¹V¼Ú²Ëmv·…Lw+G4P}ŸËFœ7÷_ÐkÇ¿xëŽ3îãLó1âì¢<3Šâ &ešrâsŸ‚̲Ü#§<Ç’5ë`qðÌ¥KS*8Š_ª{rÄÆ§à¾;ø¹E—çù& “ãiK/­†ÂÞ–F¾[š8kºp¯‡–INŒi©Ó©WÛsÉRqü“ÿ‚�~Õ¿³.•ûX蟳—íóûÚø‡àÙÓl®¼ûSé~#ÖâñÔ^Ö<4o.oü#eáßèž ŸMðß�¯'ÐdÓZ·{-AJÊÖ×úÜðø&ÏÁï|yÿ‚uÁVþ|5²»Õ£{{ˆVûF¸Ú�¥�ËêMÚ)×M½—ø5âOü\ð7‰æò5û_h¿ôkuêzN£¦ZøOÄw6©€ï‹w£øe/ )×lö/2‘ùï�Ù�'†ÎòiI*ñ¯G3£õ©J¥8áqŠÞÔeK ¥ÿ_£n§õí,àÌtsyÕyb]‹Tifì¥R‹¡Õ)Ö«dªK ¤¥VmÏÙÖ‡´“åMÿ3ý:<"ào ¼Lájå”2—ÅùñøîÊÔçC �§™TÀaqyvJ¤ð´s�z…ìV_ˆxZqugN?‰ÿ³¾£qûXÿÁ]4/ˆ^´š}Vý¢5ß‹V³™’ÇÁ~¿¾ñF‰w~ûUmÚ]7BÑì¼É+ê—¶öè ÓÅþ?�Ô—ø¥G‡‹tjçÕ³H»?s�œñ4e7§-éÑ¥ »^¤ã\’ßÞ(aix/ô$Ìxc5­ y† Âü»‚ªÁÍ)b3þ$ÃaòŒÂ†7“¨¡‹ÌqØŽHs8àðõjÊÔéÎQþ¨ÿm/ù3¯ÚËþÍ£ã¿þªßWõöýçÿ_ééÈŸàËÙú3ñçþ ¶ÿ“:øËÿg/¯ÿê­øU^ŽuþóKþ¼/ý9P˜lýOÊOø*å׈?c/ÛÇöÂÿ„JÚêÓFýµ?gK{XÚ6H­âÓ~#ø“Áÿð±.de$\ÿ|0ñœeBGsñÅ kw{‹�C/K„Ãso…­œ#.Oº5#ÿ€ŠZ7濯Èó¿ÚÓáωÿà™:øVÞÓ®¬ö’ÿ‚q†_ŒM§·ü'¾7ðEÿ‚¾$Ç`òhºí§„pÿ‚´ÿɈÿÁ¿ìÚÃý¿¿å>±?ýÛþ¬¯×.þE¯ZßúD ôýYâþ5ißðK_ø,í]ã�Ú—Â>.üf¸ø¿sáhz9ÕnO†¾(üMÒ>'x[ÆTw²[¶»¦Im¤Ÿ xŽ"úk­+\7¶’™tk«Y6�'�˰ñ¡(óRö|ÑnÞõ8:r‹¶Ï^hÝj­ÜWå“¿õs»ýˆµÛßÛËþ oâïÛCàß‚üGá_�Þ·Ôµ½sWÖ4ô°•â?ÿáLh–z´út×:L^(ñÖµ<ž( w·c@¶Õå�¯%Ó/odŒRXL®8j’ŒªÎÉ$ïÿ/}«júòÁ{·¶öÚéÖWéÿþ¹ëç�Ìø,¬Âø'í1]Û$øDBÿ´~9|5 yôb¯s_ xY§ä¹§þ©3#æø»þIìÃþå?õ7  ÞsÍ!’^X¯®çÎмŽ9<òkû!=S×õè~)¡a{Aœäçò?ñÐ�0vOúþ¿­ÈêOèrsǦ{�†HÇ8<ûÕ'oëúõ¸»†sëÓüŒçÿ®kTÓþ¿¯ÐŸëúõ5lo•TÙÝ�ö’`g?4,‰O\g’H<€rAwO¡¯�,v÷�ÆÊé?•äJÃ)oâÇ÷G,{òUNqG2LýCQ‹H„ØÙ÷ŒŸ0ÃÏN™?¼ ü©ƒ´ry"¥¾]·ý•÷Ûúü?¯^-‰f,I$œ’s“Ü’O|òNyëQù–c®=ºúzþßZ`p%Žã鎧#®:õô ?¯ëȶ B á¤<÷!3Øûó×®zqœ«ßúþµª¨8'ëÛ‘Ç9çóühÖcÎ8ðíü»ÿÀzœ{ú ŸÈ™ÏLãœuçè:óžÀgÓÔz~¿ç?ý~Ý:—ÿ€1ãåå‡<àvÿ?^ß…4’O'®O?Lã×õë@Ú[\ß\ÛÙY[Íuww4vö¶ÖèÓOq<¬(¡Š0^IØ*¢©fl`W63„Ëð˜œv;C‚ÁЫ‰Åâñ5aG†Ãу©V½zµaJ•(FSœç%Å6Ú0Äâpø<=|^.½,6 J¥|F"½HÒ£B�(¹Ô«V¤ÚŒ)ÓŒe)JM(¤ÛØéšú›é¶z�Õ®�v/LkÁ!];Qe�F�ešÚh¼©íåŠyRe5òœ ÇY?ˆY>#>È0ù¥<¦ži�Ë0˜¼Ïð0Í¡�öJYžWV¤ëåuçRT¨W«=gZ†&�l5”eç¸O‹2Þ3ËkfùEÂt3 V ˆÇá~©Æ8Of¥�ÀEÔœêåõe9S£V¤hÕuhÖ§V…)Ò”NO=9íÏàò3Ú¾Ìúƒ÷?ÅŸðNïØ[¿~~Èúçí/ûCøWãÏÅmáPð®¿{ðkÁ~(øIm⿌N�{àýQ¹Ò&ª©J–œéÔ•7zõçJŸ¼àÜ"ß<£v¢ìÏ3ñ÷ì�ûN|2øÍáÿÙïÆÿŽ‹xk2Éëçø,ãW'ÂÆo�”åF8GJ*S†.–"±jÊ2‹öéS­.xrÁóÆüµò|Ï �§—WÁV†6«Š£E%7[�µQ�7*uat×´§9AZW’åmzoÅ¿ø'í›ð6ÛÁ×ß~ I¤i~9ñÆ™ðÓAÖ´¯|5ñvƒÄ ^íl4ÿ x‹^ð‡Œµí½ÅÙò~,¾Ñ`VŽrÓªÚÜ´^nUâ'çrÅÃ.ÎZ¸,Lʽ¸Ë ]à)Gž¦/Cƒ¡[J1÷¯……ggFò�ú±|7œàUb°n¯^8XT†# VŸÖ&ùcF­J5ªBŒï¥«J }l�½3öÿÿ‚nüJý‡î|/¯]ý§Ä? |E£xÈøÎÿWð47Ð|KñW…uOë^O h~(Õü@Ö:(ÐõˆmüI&˜š%úY©‹Qi.í7€¼E˸Ö8ªåÃæxzØùýN�s„²Ü.*–Ž-âká©PS­íéJXeUצæïNЛ�WpÞ'#t§+ÔÂÔ†>ÚS ¤±5iN¤èû*ugS–ÎiUäör¶’»Ióÿ²×ì“ð—Çþ.þÖ_´§Ä¿ø àg¯xSáœ:WÂ_i^5ø�ãø®Øß KHõÝgFÐ|1¤hÖ3i·3jÚãÉkªËy.�g5½õ´qÞoÄüWšàsܧ…xs-Àã³¼ÓŠÌ�\×W—`ðXYrsÍÑ£Z¾&µj‘©JŠR¤ ªMJnåyF¾_ŒÍ³,N"† Z–C Fñ5«Õ\Ü«žp§J‹‹r¨í7'Ô’OÓt/Økönø•û^~ËŸ¾þÔ'âÁïÚ^ɯ&Öí´}Nø¹ðŽþÛGÔoï¼%ñ Â1ê7ú}ž»ÚZ½µË½•½ôsê[Ú2éBþÿͯÆÜE—p—g× ÿffü7>HÑ•jÕ2œÚœ«S§ ^_‹téÔ�¥%8¥9AÆœ¥;Õä‡M<‹-Äç^ š}k™®g5G„’„¥*XŠ*RŠ©tœ_º¤œ’�¹Í/’ÿkÏÙsÅß²Ÿí1ñ övÔ�߈î¼9âh<«ÚY³Íã�øŽ;}KÀÚöŸkiö„–ë]ѯìÍ…„—ki­ý¿GŠi§³r~¯„øŸ Å7€â \¸xbpò–2Œæ’ÁbðîTñÔ*J|­F…ju9gQAÊ�%V”fy9¾U[*ÌñtïQÓ¨• Åk^�KJ…H¨ßÞ© Fñ�í>h't}»ûXÿÁ=~~Ãfß þÑ?~*]èŸ~j~1øŸwð¿Â^×uß |BÓžßNŸÃÓüA¯x~ÃTÐlõù.¬.µ-[R´Ô~Íjn’\1´�âøW�ó¾7Ëø�Ãù^W ÙfoK–C3ÅâèPÅeõªGŠ©‡¡ˆ©J¼è(Ô�:TçOš\¼î+�û™·`r,F[K1Å⥠Vu±O F�IÒÄBÑt¨Æ¥Jq•5Rñrœ”¬¯Ë}=ûe~ʱìÓà?‡3øsâ÷í5≿g?†ß´— /YøqðÚËÁ�á?‰×:ˆðþ™ãýZËÆÒk&·og¢j¯©ZèZ^¿iosöàÔîâši ß„8«�x“˜G”ðÞ.É8‡1áÜÚ­Ç1ž3ëYdiûz¸SÁ*5¨Ju©*R¯V„åw*pj*Yç9NG–PÃ:xÌή'—a³,'†Ã*>Çåìሜk¹ÂiBnJœj$ùR“MÛÚüoÿçý†üñßág웯~Òß´?†¾;üdÐ~Márãàç‚|OðžÓÄß`Ó×Â:F«u¦øïFñcÃs«jiSK—mœ—ÜÜß-´sJ¾. Ä.6ÆdyŸPáÎÄäy=|ÑbèG7Æá³YᲉTxº´£S[ œiS•T�YJj.1‡3Hî¯Ã™~)©™æ4±øÊxGFoB®UÆ(ûMƼ+YÎJÑJ7MÊÊçäW�>ëß >;x³à?Œ®-Ä~ø§«ü,ñæ�7ÚìN© ø¦ jWš\ò$mqi$öòÜY¼ÑÅ#Âcóá…÷Æ¿¬`sz–G…Ï0q“Ãã²ÊY¦W%Oe_ M8UŠmFj2Qš‹’NömY¿�Ä`êaqÕpšö”1SÂÔp|Ñç§UÒ“ƒÒêé¸ÞÎÖºNèû7þ �ÿüºÿ‚||lð×�t¯j¾<øuãÏ[ø§Áž3Õ´ûM:öâûO½ŸFño‡/Ბí¥ êÙÞ¹¶QÒ|A¢‰ »ûPOŽðÓ�cÇÙ.'W K˜`q’Âã0tªN¤# �U°˜ŠniOÙ×§)ÁskíhV·¹ËkŠ8yðþ:•U•|>"‚«F¼â£&ã' Ôä¢íÍNJ2ÓNJ�ës[ãü¢ûàGü£à?í§ãjÐxçã‡Å=Ãv ÛO´�LÐüâ¯üCño…µûÍG{_I®kzo‚ôÝnM©k�â[HæT¾·•FY/ˆPÏ|Aø=¨þÉzïÁ+o„ß 5ÿéž&¾ðSxûâ}çƒüO¡øÏWҧ׬|U%¾Ÿj›-—ˆ¯â°yU$ÖuÇ…ïgù¬/fðÅøYƒyŽ7¥Åts©f¹–S oö~Y ^¶•XЩ…R©/Þ)á麉6¨ÑO‘z•rŒ¨ñeo«b0sÊ*`V R¼jʇÖ1R£V§R5ZŠ÷jK•Úó�›~ ðÏþ ¹ûjügøu£üTøyðTÖ<â;K‹ß\j>-ð…5¿ØÙnóï|àïx£CñoŠíRm®´ QƒPR¿Ùò]îP~‹4ñ‚ò|Æ®W˜gt©ã0ÒŒ1Q§…Çâ¨`ç;rËÂaka0“þhb+Ó•;?h¡cÍÂðÖwŒÃC‡ÀÊTj§*NUpô§]GyP£Z¬+V]¥NRû-ŸjúN£áícSð÷ˆ4MKB×´=J÷E×4MfÖëLÕô}[Lº’ÇRÒõM6ö/4ýKO½†{Kë+È"º´ºŠH.#IcteFµEUðõ)ס^œ+P¯F¤jÒ­J¬TéÕ¥RP©N¤$¥ ÂN3„”¢Úiž,éΜçN¤eN¥9J„âã8N-ÆPœd“Œ£$Ô¢Òi¦šº?U¿`¿ø&m¿í�ð_ãÄÝcÇ·^Ö4íkUøgû:èKgm=¿Æ�z7Ã|SÔ¼<×#í6öö~ÐtëÉ¥Ò⺻û úÄñÄòékm?åÜwâOúŸ�e9e¾ú5(ÒÌx‡êN2Ê2ZÙž+§�ŒcîÊRÄW©ª8Þ4bÚ�G%õY làq˜©â^¤g,6]XµŒÇC [* ½RTéÅ·åÊæÖ±³øàÇìëñ³öŠñg‰|ðsáæ·ãŸø;Âÿ�üAá�%¬mõ»? øZâÂË[žÛLÕ/lnõ]FÖóS°³‡ÃúLWÞ!Ô/.£µÓô»»�È>÷8â,› Âá±ÙÎaCƒÆbðøªªr¡,N&�Ê¥(T�*r…)Íâ*¸aéÂ.U*Â6g�‚ËqÙ�Z´0Xz˜ŠôhÔ¯R”9TÕ*N1›Qœ¢å%)E*pæ©&í6{7Æïø'gí§ðá·ü-ŸŠ_µÏ|8µšÖÛYÖôýÁ~, ÝÞ¼QZAãÍ#Â%×õÏÍ,·�âÍ;HŽ Ûë].y#Õeû ø™GˆœŸæ?Ù9^wF¾>JR£B¥ fbãܧ‚«‹ÃP£�IFrÿe©U¸S�X§Is�ØÞβü7×1X Óæ”ç”*ûKD«Â�Z“ Ûi~ö0JRPo™ò—>Á1¿no‹š'…‘i«êWVIká›ûÛO”Œ\¾’–n— ÇÄ® Ê«b°Øìö�,N WŠÂØâq4±# Ö_WÃ`ëV�*q©,M8O wʪ¹.UxnÏqp¥V†S¥^ŒqªÊ¶•)S›j¼«ZS“‹µ)J5zò%©ò·Å¾xÿ\ø]ñ�Á÷ÃïxvHÓUðÞ¿l°ÝGÄbkKËKˆdžÃUÒ¯ +6�«éWwÚN¥nËqcyq +×Ôe9ÆYžà(æyF6†?ˆMÒÄГ”[‹´á8ÉFtªÂ^íJUa ´ä¹g»£ÊÆ`±X Dð¸Ê0øŠ:ŠÍ]i(´Üe -c87 -bÚÔóLç¦qÎ:óôyÏ`3éëé¡éúÿœÿõûtê_þÀÃðãÿ¯øó޽²€?¯?§¯_þ½‡øsõéÓ×ó¢à�^ŸáíôüO¹ =9íÏàò3Ú€ ŽÀž½~½81ÐäzÓ$€qú~\äð=ýý¸R}sß¿¿×¿o¥ þ�™íŽžýzúœsŽ †�C�ǯl Œ?ýtÀ=O¿¨÷ã·ùãš@ÿÌÛ°Hãžý©€úú~^¿N¿Ò€Ý—søw?ãÓ!gñÐúgä}:b˜øs×üàèx ’;þ_Ó¿~¤öì(õýH2zzéïÛ·üi½ðsøwçמøõÏ4Çý_×Þ&z}óþ|ãŸÓ�H÷?áÓž§�ð÷Î)€™úqÔ}Çú~4€9>¹éÏå@ ž3ÈŽ~œ®}Gð(þ¿¯êàsü½:ƒý}Ç^´\Lrò}ú㑌w<ŒóèÆ8~×õ~ƒhè@Î1Ôò>Aé€='4·òô_©EÇ8Î}8ã�RsÇ8è=pq.7~Cæù?ëúûÈr8™ÇcÇ }G¿q‘Ÿ³þ¿à”¥ý}ß�Ëò#û1Î@ú’y�q’ ïÆû;úÿ[~ƒçôþ¿S•ñ�¸þÉ·Àþ&1à;Û]sÎ=Tqœg5ù—‹ÒáÌýްßwÔs#í8Wͱ þ¥Õ¿õ'y²AŽœç#�éß9õôôØýV啌t=HãÇÓú`öÈö4�{þÄ0Deø•;Eš(ü! sS,qN|NóD’]#•íáycRG†"À˜Ð��âÒÁ«»^»µôºö6mmuv—k¾æ5¾Î½ý:/#ïáôéÓ×§çùûú‘_2síÿýHüNø¡P|Kø‰G øëűC H±ÅQëú‚GQ  q  ˆ *¨  ~‡ƒmá0­¶ÛÃPm½[n”nÛêÙ׆?á_‘Â×AA@ë[_•�Á@øý­ÿÁLÉý÷ö…½™µ->’‘¡¼Ži~Ñ啼BÅÓãðâËh¼+Ìèe®¼ªTX›Õtéºé‘N|ñ�/½I%Λæ_èF[ô.áìwÑ’¯ŽãŒÒR’ÃÊ�?e/ØýLÿ=Ï›kŸŒ~0øû>|Aø±àOÃãoxV×J’ÃF»ŠþãN‰5-sMÒnµ�VÛJ’JçKÐío¥Õ/ಸµ‘­í\Í}§Ú­Åõ·�Ŷ+$ÈñÙž ±˜Œ4i8R’œ©¥Rµ:R«V4š©*tc7Rj‹å‹¼áiÇöO<;áï¼Zá.âž ©ÃY.{_ Vc‡ž–.¤°yf3C.ÀÖÇB¦ Ž;3¯†§�ÂÕÄÒ¯Ö¯O ‹®éak?_ðúOÚËþ…�ßøHxÇÿž~ÿo‰¿è&ÿÂ\_ÿ7ŸëüSÀ_úx�ÿ‰ÿô"ðúOÚËþ…�ßøHxÇÿžñø›þ�²oü%ÅÿóxÅ7üÿ¡ç‰ßø�pïÿB!ÿ¤ý¬¿èWøÿ„‡ŒùáÑÿo‰¿è&ÿÂ\_ÿ7‡üSÀ_úx�ÿ‰ÿô"ðúOÚËþ…�ßøHxÇÿžñø›þ�²oü%ÅÿóxÅ7üÿ¡ç‰ßø�pïÿB!ÿ¤ý¬¿èWøÿ„‡ŒùáÑÿo‰¿è&ÿÂ\_ÿ7‡üSÀ_úx�ÿ‰ÿô"fÞÁg¿j÷VVð¿Áx;|#ã õ=ÏÄ#ŸAœñôKÅ®&ó “íÿ@¸¯þn9ê~Î?⮳Ï~yÿ~œ$yþ±ÿ‰ý©®ðÏÁQ¸Ç…’�ïѤ˄¹eYK–JV–©Ù§fº§³ò?¿e/ÚÓá—ÁÏ�ÿ¿f�‹7á¶±iªZXé~.ñœ°øAÕµý µ®t©®ïÚ(4Ë=WM½²Õ¼#ªê70iúô2ͬ¢ký5_ó¯è)àÆ}ôqËü@áÿqùE㊳¼¾¾Žî8L>CÏ Ac³)Tú½IæTq±Ça0ô”¨aa)G븊ø¯eFücúZx{Çþ(C‚iaó.¡ÂøJø(g¼G:yn5Íñ3¡[…ÃáëFÁa¡J�'€Ì±Õ©G8¼•=, ó�ÿà ¿¾|3×|}ñOÃ_¶xïÇß~%x�Åz7Áÿ Aozº�â¯ÞøƒP:¿ˆ4oj‘éZ^…e¨}‹MžïF³Ÿ]ºéa§Çnº„Úwý ý|vËáî¾a¢ÿǽßý†5¯ý:]P ¯«?›_ø8ᧉSýŸ¾0[[]]xJ7Å?õk¨ÕšÓF×^ò×ÄZw'b—Ä6M­ý™�;LJgWØD>oN¯z=tkõýó¿éÓù„± ÅtéÕ«•Ùdª‘MÒÁãeV–?ª;Z2ÇÑxÅMß_¨I;>^n/NÔ¿iý/ö4ý�¥ý•?gK?ˆ¿.<ñ2øÎ~Û|H×þ‘ñOX:vŸá}[^²Ô|%à;ÍNG»¾¾Öõ;F»ž+[E¶¹´ŠÒf•û¼õ9¥eu§5¯§Þýãa±$a¼$ðF~ð,û=žGÄ0|aþ¬Óâ w ÿÆO�ú¾,Äã¨×ÊòZ؉:µëãq�YÆ� ”cJN^Cñçá…ÇÅø)wì½àÏ Qøë­è_u¿Ú²oÜÛ\èOÇ]Ï®|cÕá}7ÌÒ­'Ñ|%¢XêúäZ‹8õHn”Gý§5ÔUIÚœßÙ¼”/ü½š¾ÞGËq·Tâ�¤G†ùN^°uøÓ�à|g‰ÓÉjR©‚Âq–_RxÎ-ÅBXnl-*˜<¯CŒŽ÷1ÅB¢·Ö'R'õé\gú¦r‘tðçýŒ:¿þ›üMO¿§ê…ÛÕþ§WHgò½ÿø�¨è?¶Æ]& ü0Ô¢´ÿ…y²÷Ä_ ¾ø“X›ÏøSàk–ûfµ®xvÿT½òÚc¿Ú®åû5¬pZA²ÞcOê¿ ¾Œ¾ø…ÁY/ñ‡dùßfÿÚ?Ú9ž*œ¥ˆÄýC6ÇåxOhÓIû ‡�÷)Eƾ+}8>”Þñö}áׇ1ño ðgÿeÿcd9f>¥û[%˳ÜÇØR‹´~µšæxìm[o[R]OWø«Úëß þêz�„>µÌþPV†Þ¶¶‰WÄ:øXí­aÐÞÖrÂxãˆ;;„ÜîOüû~ÒÏ3¿>“ù¯†~å|”pvQÂ<5ŠË²ìðÎ{W S0þÐÄb¡Oœe˜Ìb¡*îU!CÛ{*sœÝ8GžWÿN>‰ü-“ý%<È|^ñ®�n:ñˆ±Ù­뉳L^%ãóe˜¯¨à•yS©7C F•É®gE6ì~ÏþÆŸgÿ…'cöm?JÓbÿ„‹ÄµÑ´­;F² ç×[-.ÚÒÑd~²H!!»1ýEô ã|óÄ2þ#â%–,ʯq_Ù>[‘àýŽF¹pN ƒ�KIûJªŠ©QÙÎRi‹ÜÜÆU¸…²øeyM<¿ІœêTН‰„åZ|Õe)ÞrŠm^Ë¡ô�÷ü…4Oúëÿ¤2WõáùsÝ|Ì/ˆÒ$>ñLÒnÅ£ÝÈåQä`ˆ¡›jF­#¶Â"³±áT±ŽhÃß“´aïIöŒuoMtJäÕœiÓœæíFS“×HÅ^OK½oDßc㯅ÿ|/âïx�º=Ìï­xBÛCºÖ­.b[ia‡_ƒiÇÈwû\.é¦O,°^[ÛORÙÌa1^@ïX,Ó�©ˆ¥…¨ç,2¤êÞ. Õ}§%”­'ü7{ÅZñþdx¸ç™×ÅPÁÕs©ƒTnhJUý§#Š•¦íì¤äœckÅê¤�¡àÖ®ígxRÚ-‘²ª™VF/ü[¾G@¸ÇÜç�ãææ3 Š©BžŸ$Q•XÕrš²|éÆq\²¿»dôÝÜñ3,ÿƒÆVÃÓÂÒä¦ÒŒªÂ«•EdùÓŒáYkÊ’znït·WÄwØèöÿ÷Äßüv¸¿ÖLýá¿ð ßü´àÿZsúÂÿàÿùp¿ð‘ßϵ¿ýñ7ÿ£ýdÇÿÐ>ÿ­ÿËCýiÌè ÿ‚ëÿòàÿ„Žûþ}­ÿøíë&?þ�ðßøoþZëNcÿ@¸oü_ÿ—ü$wßóíoÿ|MÿÇhÿY1ÿô†ÿÀ+òÐÿZsúÃàºÿü¸?á#¾ÿŸkûâoþ;GúÉ�ÿ |7þ[ÿ–‡úÓ˜ÿÐ.ÿ×ÿåÁÿ ÷üû[ÿßñÚ?ÖLýá¿ð ßü´?ÖœÇþ�pßø.¿ÿ.øHï¿çÚßþø›ÿŽÑþ²cÿè ÿ€Vÿå¡þ´æ?ô †ÿÁuÿùqÐiWÓ_ÂòMˆ«íVPÁc'hbNTðÜ‘Èï‘_C”ã«cèN¥j*“�NXÊ*J®ùT›w‹Ò^óZ®·GÒäÙ…|ÇR­z ‹…NHÊ J“|ªm»Åé-ZÕ[TÑjûþ<¯?ëÖãÿE={4¿‹Kþ¾CÿJG­/†_á‘üVÿÁÆŸòq³þAÁø1©Ž;ÿÅq¬}G쩂 Wõ¯‚_ò'Î?ìgOÿQiŸ�qßûö þÁ%ÿ§f¿Óý«“¯#åÆFsßãØs‘è8ëÞ´‹ï§ßýZÿ­ †}lgŽx<{`uëÖªÿד맯_ëÈi#œqž?.‡ŽùìA>”õþ¿¯é þúüƒŒ};r=z}yç¨94_ñ ÏüÿŸ^Þœb˜ »¯óøwú´€\ôéùz|Ÿ¯·¯JN9ÿõã·×ÜS¸ƒ$óôõÇþËŒ‘ŸÐƒ9éœs޼ý^sØ úz‚O×üçÿ¯Û§Rÿðþ‡ýÇœuí”ýyý=zÿõèÜ?߯Nž¿˜Í$zôÿo§â}ÍéÏnø‘žÔdvõëõéÀ鎇#Ö˜‘׌`óèsÈÀ÷õ#ð–Á_×ù‘>NϸÎsŽzý0G8àr*Gý] ÍÏ\qŽàäò@9=ÀÁôîGJÊ_×ÌÑÔGüdskûjãµÇìØ;ã"?Ú¦y§§Ò¿�|vþ/ ƒ?üò3ôŸþ ãüYwå�?§úüýá>$ü0ø}ñ‡Â§€~'øCCñ¿ƒõ…A¡köiwhòÄK[Þ[¿Ëqa¨Ù¹ólu; ­µ ÀžÎê ”8έUàéÖ„jB[ÆJëÉ®©®�Y§ªhú~ã^,ðûˆ0\SÁYþeÃ\A—¹}W3Êñ¡^0¨­[Z>õVɉÁb©ÖÂb©Þž"�JmÅü§ã�Ù»àoìáû%~ÔÁ?‡€l5¯�ÿnµ™4ãªjó[|=ñ8´þÕ×u«ÝO\Ôa²"ÂÚóQšÞÀ\Ü‹8 oã©…ÃápX¸áéF𖳕®Ü­Jvæ”›“µÝ®ô»¶çî|3㉞0xõà¦gâGæœSŠË¼Kà:tqk …ÁeôëqfJëýG+Ëpø,³ SéQxªØ|%:دcGë©ì©òÿÿ‘¿Â¿ö2húsµ¯�‡ÇñGóGý%ñüˆ3Ïûæú…\þÜ~:|Qð>;Ô‰~-ð>KÇ|5áŒ)åÙ½:Ñ©ƒÆqÖãðuç…Çåø¸Ã‰'m†ÄRš�HIÓÄP•UèצßÃq_ˆ^.ð†{ŽÈ3>(”±89AƵ»'t18zÐ�\>&‹–Z¥ÉVœ¢Üd”©ÔS¥4§NI{_„¼àÿAsoá=ÏFKÆW»’<÷7&=ÞZÏyy5ÅܱŽÌ1<æ(‹¹�»gúgÃï ¼9ð« �Áø™w ÓÌjS©�«†–+�ƺ<þ¬Ç1Äc3 ôpî­W‡ÃÔÅJ†ÕªèÓƒ©>oÌ8‹‹¸“‹*ЭÄ9¶'3–2ŽU*T()òóºXl5:8zs©ËiR4•JŠS”¹cfxãá×Ã@ðÿÄŸx7₳‹•ѱð¿ÆB9c3]Ùi÷hº­�Äö×Z¶›¯‰ô™-.™$Ó?’¸‡'Î|4âŠYž[Ï ÄN®W‰’”èVÃÏZ¹n.ÒWœ)ÉÑ« J2«MGIÆVtÿÞ/ <@ðûé“àž7ƒ¸ÇØTâJy^ÆÙ59RÃæY~k‡´p<_�óS’§C‰¥Oƒ¯N•Z8,\«eØW¢¥_ëÂ_Úãþ uûlk>ñïÇÏ|&ðík�m©X|_Óì °¼º±x ±¾;¼·°ð—Œô¨Ý¢‡K´ñc[ë@¦Ù´HìàIdýG+â� øÂ¶�àr¼yN5!šÂ ”,¡Ë�œa…ÅÒZ*qÅrÕŠ÷}ŠŠMÿñ¯‚Kÿ0¯ ømļiľÖž*¶Àøšõ1(âc:˜—[‡(UÄçY2QS©Œ¯’ª¸•¶Y„«Ô”#÷·í ãŸø'÷�ü okûCøçöqñoƒt‡þÐÒ!ñ‹|!«\ØNbHÌÞ]3R›_†î{uH<9‹›»aöwI`&3öÙî3�±Ø(Ç>Æd¬%'ÏIb1XZ²§+%|7³¨ëÆRŠQkïN>ëMh7øeÿI~â*µ¼0áï2\û«c§•䙿 –&šœ¥Éœ<^mJê¹TŒ³[Ò£[÷±”*{Çàgí·ÿ/ø_{ð²óöJý„|oðÿàî£ é~+ñž‰ ÉàÙ|Kcq8ú„tb³Õm´ßÇø›Ä^!Žø–ÚâóH¹Ó ´šæóSüGŒ|CËg–Ë…ø+ SQ:x¬]ñ”½úZ B¬i×J?X¯]*øˆÊt¥N1r•Oô›èýôMâúcCƯ¤f{W‰¸ë 8âòl‡0ÌaŸC)ÄR§|6c�æU'_W•Êu%”åy\§–e5iPÇQÅÔ­ 40Ÿ£¿ðG�Ø;^ý�<­|vøµ£É£üYø§£ÚéZ†¯àêžøxgƒT0jjØ–Ï_ñ}ü~¡ªér�?H°Ñô[KŸ³jskßáOWÈ0u³¬Ò“¥šfT£N†qµ\™Tå©ÖñS�:•i?z”)QŒ¹j:°�ò¿Ó›é–ø¥Ÿ`<:à¬tqÜÁØêØÌË6ÃTrÁñ*u0~Ó×¹_-É0Õ1X\2Ùãq8ì}j^× O‰«ûGªéZ^»¥êZ&·¦Øk6±ay¥júF«go¨iz®—¨[Éi¦êVqÍi}a}i4¶·–wQKoso,�ÍÆì§öÚi¦ÓM4Ó³Mjškfº3üÿ9Ï|:ø}ðÏL¹Ñ>xÁ¿ôkËù5[Í#ÁÑ<)¦]jrÛÛZK¨ÜØh66“ßÉiggm%ä±5ÃÛÚ[BÒà‰V¥9ÍÞr”Ý­yIÉÛµÛzjÀÈñ·Á¯„ï¬5Oˆÿ ~|@Ô´»v´Ó5xÂþ+¾Ó­cpÖ¶zî—qin× Ó´òG˜™Jï%©Æ¥H&¡RpOV£)E7ÝÙ %ñׄÿ$Óeø™ðÃáçÄItT»�G“Ç^ ð׋dÒc¿6í|škëúf Ö xÖ–­v¶¦!pm­ÌÁÌ1í#R¤/É9ÂûòÊQ½¶½š¸^,øuðûÇš ·…|sàOøÏÂösÚ\ÚxoÅžÑüúÑýký_pëótSÛŽ¸ã=1õíŽ2p@›=ðL“ú~\x9€^Ÿ×æI眑Ǡÿ�Z/ýuÜ0>¿Ÿ?úÇ=ð3@|Ä ç r1Ç÷îÏ_úþ¿­€nìòy'ž1Ôtþ‘רÚ|á üCð±Ñ42tŸŠZQ½¼†+Ë×68°/$âÒÔO'‘§êºu¾Ø¡†%….#ˆÏ;J’Ü\i¿ƒñ¿ñ‡†\^¸ƒˆÎ|!ÎV^¾ Mf\˜ªtðïŒxjY̲|ÏåZµjÒ«SRªÃa•ÑÃa³_ȸ«Š¸“�8•gͳ? óEƒÂÕ­…ÁÁcx;¡ /ŠtaíñÙf:½êÕ«UÔ�ÔT(*r§B†aÔijà&™ÒÏUøÇªÙôUå�Ã븇ûðÜx‚xý¨âC�øòaý¯ñÿð«ôŒÍæ7'ð?'ÆÿÓìaâVa‚­ÿnWÃpÞ¼?»RµHôǯøDù¿øPñ³0ÿ˜¬·Âœ·§ñ0¸Î:ÆajÿÛ•hdt*Ãû³©8ôÆ/øJùÒîòêþê{Ûˉ®îî¥–âææâFšâæiœÉ4ÒÉ!f’Gr]™Éf9Ïp?¨0x<&_„Ã`0j8<�,6 †¥ 8|6„:4(Ѧ£ T©Â1„!£¤’Hýï †Ãàðô0˜J°Ø\5*t0øzãJ� 4¢¡N•*pJ§%Æ)(¤’Dä2[®8ä~¼äç¡®“cúKÿ‚‰þÞ/ý—ÿjXü7øû-Þ|@ðïÀŸ�ZŸ†~:xÓàúx¿ãG‡5=Kᎉ-¾¥¤x›TñèÐ]èbC„Òøju²·6K�Ò3ÿ;x}Àø>%á|Dóó‰á�Äg™å,NG‚ÍÞ&ÄR¥™VR§[ J‚­(WjõÒÄÇžZ§+~‘ÄYõl¯5§6*xŠx ©cëàý¶6œ¥†ƒR…YÔäNS½'Ê´×SÅ>xoâ¿íÛÿͺøKðW›ÇŸ´W…k_|gý¤>?Štm#ÇŸô¯i†ãCøª-µmOL_ØhºÌÃO¿³’if¶Õ ŸSÉ-¾šÓ{XüNUÁ$G5Ï©GÃø®ÁäÜ;™¬-j¸¢®§-|¯š•:¿T�j+ÚSšŠŒ©ISæ´ª(ðáébóÞxL¾n¾cK7¯�̰¾Ö¯Œ†"7†.Ó”}´a7Ë(êÔÓ•®£y¾Õ¾%þÍöðIŸÙ‚ãâŸÁo þÜ¿¾ |dñ¡sñkÅ£\øsðKŸ®/að�Á�Šž+ð]—Šç´›ÇZmÊhv–rßMái®, ‡TÐt3£ëká–]ÄSñW‰£–g8® ΰ>œr¬'°Ì3¬V]<^q•á1³ÂÆqÀÔ‹¯)ÔäX¥ÉÒ¯_ÚÑ;å,NZ¸K+x¬÷ˆÆÔ“ÅÖö˜l ,K’£‚ÅU£Í}b/ÙÆ1»¥x¥*p䙯þÛ³ÝÇÃÿØÏãG�½BÚÕ�,GîêF›rSäq¨•—5åËô[Fø}ðÏÁ?ðQÿø%v¢>ü'øûVxµ&_Ïàûiežž/!2Ç Dlú3<6o”ãjpNQNºËüR£–ãpØš)F9EiÒ£O�'ºæUòØG$¢ùeˆz6ß>XZ¸ þÔŸ |K¬K5½Í—Âþü/Ók隢n“O·½ðŒ–>:Ѭ-‘·øšÎûZ»ÙXÝ][-ðæ'Á\!Â\i’àêâ¥�åÏ æXj)J3Ížk™ÔáluZ[T”1j¦´çoöiÓ£ ÎqŒ¿WÌ©aóÌç8É1Õ£I`q˜,Ó Vm§'Õ0±Í°ñŸÙR£Ë^_òõJnÑ‹kç/Š_µgƒ~1~Ç?i?hÖß´ø.7ûŧ¼¶/ìùð»à=¶Ÿ¡øB-(\:EðçÃñ[^éÖ¶‚‹ë‹Õµ²�&ŽÕ~‡,á|fQÅù�à«ÊYÍs(Oê%:ÙögžJ¥|[¬ä¬Þa]Ê%+¨FÓvr<ìVkG“a³*ôÒÁSãŒ4£AFñ†_…À(Š‚]0ÔÒ”R³“•¢¯býçì£ûRÜÿÁWcý¼!ñï…¬ÿdÑñ³NøèkñcÂÐ|0oÙæ ë+Ù¼u© ~Í £¯ð¿µQÛžÜ�é\Ù'ñ~�ö/âOýPÒ5Ç/sÄo|JŽ/‡ª|Aã�mw?Ÿj¾0øs©øsHÒü/ªk>ñ^µáÏê>#Ò5ÝKEºÖíõ¹<;¦Á©�Aï,Õ„¶×·Ñ•¼›„2 ºùƒT0\ÐY¦–1§OZ¦&• ^Ž'OZ…:Ñ£*1ÄT•?f£S–¢œ#ù·b¾»œæ›aÓ©^Íá*N¶R§Ò”èÕ�*2« ’ƒš›§.fãx´ßí÷‰uoÙsö,ðÿüÿà—ÄÿÚ3âÁß‹¿²ƒhŸ´ßÄŸøàì4Ï|Rø¼úO‹õ=Æšì~*Ф±¹Ñü)ö�Ág¤·ÁÚ¼W�‘{m�ŨQâ~4Äñþw•ðö_›åSíøo.Æã³w—ÔÂåyJ­„¥[Aák©Æ¶+—)9%õÊN à‘÷'•d”ø{ŠÌ±8 i~/ðþ‘â}.ëÄ7ii¤üMo kºæ’šÆ‰{‘©xeõËxç>žÂh¥x­õ‰�yøgŠ8s…øÏĪùó–ZñœC(aóš¸JõpÕc‡ƒ�\·ë4(Uö5 êÓĪkë©”¥E'®i•fy®IÃòô±*Ž\¥SÔáV£´1>ʤáÏ (J—:OÙ¸´ì¦ÏŽ?à­ÚÆ�§k?²/ÁMkƺ7ÄŽ?³Ïì³àÿ†?<]£k6þ&Š×Ç6úŽ¡©'�¯|O ÅÛkZ‡�¡º¸²¼žiÚa%ék˜íîå¹·‡ë¼*¥R¥,Îhàëeù.Äø¼Ë"ÂV£,3– TéÓxØaœaì)ã\#8ÅFÍCÝr‚ŒŸ�ųŒg”`§Zœv_•QÃcëBjªUÔ¥/`ê¦ùåA7Û½åªRm/ÈmÃëùñÓÿ¬sß5úÇõý™òsÉÀî{ŽÜvç¾}3Û¥þ¿¯ë` �©ëÆ9#§^ý8#®;Qý]@3éž{àr}>€zàútÉ::Œô矷ӑ�Ö�ëî3“ÇLL�zŸþ·¶=ƒ'^¸ãgÛ=yç=½ò3êz=?—\p=ÕÀPFG'ÛùŽsú`ƒƒúüOÇ�~¼�Ïö=9=h‰Æãß>žÛ³žsÏPÁ?^9ë‚1�Ë>üsLÏlä~¿_~zâ—õý}ÿðÀ&sõÆ1žàd r{c¿µ/o^„×Ó§Ôz?¯� ŸOlŸ^>½":t$ÑýLׯ=2sÓߎçç¿'9£úþ—  žqÎ>™?˜ã®}Ó¥˜'�Žùô'×·Qü³@ôîxúŒOÿ¯¦8â�ëúþ¬ÀLçŽÄ‘�qÜö$óÁÈëÔñL-�rO©##ž~¸=8'¿n”¿¯ëñ¹ð}F{�§õà{žœ€;'óÇb>=»~ÀNØ÷ã¡ö페é�¨8_×õëòÇ �ÔqÏ89úgw>ùü•ÿ¯éŒ'Žç¹íÔäõã'8ÏCŸz¡uê@ú~˜Æ@ލàóOúþ¯¸‚^8=@xä^‡ÔœúàKúý¯Ä_õý~öçê¼d^œŽH�Ë$å¯ëúùý?¯ëúB”s…÷8=z÷ÏÝ<ŒŽrFKGçý_ðD�ºÿ_×ôÉ\øF1Ï×°x#޽ê”V›Zî+³“ñ¬ñ(·8ë¨Ãéÿ>—|g»dþ¢¿/ñn+ý[Áiÿ3Ì7þ fZßkÀNùÆ&ÿô-­ÿ©X?ëô<¼!öëøt<ó߸Ð!�C6Òh�Ø\MºCjáÒx¯ïôå1Κ¦å–9Ù‘ ØÑ0�<~Fk—ÕÇ*Êtâé{KªŽI5SÙìãíɳ]wÐʤígk_{õô¹ôïü6wÂÿúøûÿ~ÿ榼�ì güýÃàuùI—±—xýïü�Îïkqx—ž)ñImˆÓ ‰¯h*’©gZœåÍJªtœù]ïJtê'ïÙ}ð`ð–±G ð•_H± 'KÑI;P*ä÷8æ²Å¤«4’K–:%e·‘óôêT«zµ'RWkš¤¥9Yl¯&Ý—MOXÔÿã÷ÿöŸÿQýr¹×_OÕÛ×ôfÅ!Ÿ~Ò¿°¿ìñûTË«ñ#Ã7ºŒ-­£²¶ñÿƒ/âÐ|\¶0çʲ¼¹šÏQÒu«hAÅ¢kú>ªÖ ]4÷µIfY>{:á|Ÿ=j¦6„¡ˆŒTc‹ÃMRÄr­£)8Î�X¯²ªÓ©É¯'-Ýÿ4㯠x+Ä)Gž`*ÑÌéÂ4¡œeu£ƒÌ•(ü4ªNT«á±P†ÔÖ3 ˆtUÕMJj^!ðSþ Aû)|ñNŸã7²ñ—ÄÝsGº†ÿFO‰:Æ“©hºV¡k2Ík}… hÓïç·dV�5Øõ‹T˜ ˆ­£™!x¹¸{„rþÌpù¾[‹Í!™a%)á1‹,=l,ç R”èÏ,Ó•)Μ¹¥5(NqjÒ±ò¼)ôxð÷…³ª§šç˜Ì-HÖÂÿmâ°õ°ØjЗ5:ÐÂ`°x5g +,ZÄÓR÷ãÉEÇô¾¨ýÔǾÿ�¦‰ÿ]oÿô†J÷_0ÑãÞïþÃ×þ�.¨×ÕœßÄï†>øÉà_ü5ø—á­;ž ñU‹iúÖ‰©Æ^ãÞ“[ÜÛÍ%ÅŽ£au7Úf§e,úmý½½õ�ÄPE*´Ü]Ó³G‹Ä|9’qnK˜p÷eô3LŸ3 èc0xˆ· ÆêP©Nqq©GF¤a[ˆ£8WÃׄ+Q© �Œ—âÿ‰¿àˆÑ-éÓ~~Ù?þü8ßp°xS²¹ñTV7rË=Æ›a¨i~4ðNŸ¡–yŠ}«Ã·’²97’^\4·2ì«÷„[ï·èÏäLÇès[êü3âßdÊâ�IO}D¶?pðŸÀÎð††"¦EG˜g˜êQ£˜qm*u³ô”•IapÑ¥N•  ÕJ£¡‡¦ªVp¢ñ˜Œ\èQœ>â¬ÏÙŽR.žÿ±‡WÿÓ‰©÷ôýP»z¿Ôêé ùGâWì?û-|_ñ®µñâ7›OøÏÄ_ÙßÛ:ܾ(ñÆœ÷¿Ù:M†…§î³ÑüM§éÐý›JÓ,mÙìáóY¼ÉÞY_ô\‹Å�xg*Âä™TÀåx/oõ\,rü¦º¥õœMl]{UÅ`+×—>#Z§¿V\®|±å‚ŒWäüMào…|a�ãx�‰8NŽg�f?Vúî:y¦y†•ªa(`p÷£ƒÌðøh{<&…ìèÙSSŸ5IJRÞÒ¿d_ÙÛDÒ4­Køqmk¤è¶fÃL´"ñ|¢ÖÐÜÜ]ù"iüA-Ä£íSÈye�oØËDUþZñÀ?ü{ãLOˆ~-p}/ã^ —b3ªÙ®}”ήªG Eàò ×*Ë—±Uj%R8HÕŸ7ï';+~óá×ñ„Ü+‚àŸ³pï åÕq5°yU:LÂ*bêºØ‰,VoC�Ÿ´¨Ü¹jbgÞÐQZÏàÿøcÀ:*x{Â:ZhúÄã=yί§·`E~áÿ¯ëðùÿý2Êãß±úõõÇŽƒÓ¸Åm–Ä_ÖÿðÅ…'ߨÆA ò;ô€ã8àÖ‘·R_Kÿ_—baÐŒt#Á€zàútÉ::Œô矷ӑ�Ö�ëî3“ÇLL�zŸþ·¶=ƒ'^¸ãgÛ=yç=½ò3êz=?—\p=ÕÀr�x'·þ¤sž ã‚B{kéý~¾—Ò8'¶F8ÏQótëÀØŒ‚rXK} èWaׂsè8éÏ®$}îã³—õþ×ù”¶þ¿¯øsú‡ÿƒmVÛöÓRÊ Ÿöm!NŽØþ?ï8)tŽ›”á'ù×ÇâðŸø8ƒÿJÈÿ¯¿åúO‡ÿqþ,»òÇŸÓîõþð¯ÀOÑÞŸÞŸã@ÌxwEñ§…üGàïB/4hdžµ»@û Ö‘¯i÷^¥lPÏgu4[°JîÎ8¨œ#R„•ã8Ê]ã$Ó_4ÏS#ÎsÎò~!Ê«}_4ȳL¿9Ëkòó{ ~W‹£�ÁÖåºæöxŠçËu~[€Ÿà…6^øÓ£x›Å?픜á…Âaà©P£íŒªÍEsÕªãiZu't ãJǘŸÞú‘ò¡½?¼(óûÃó ÌOï <Äþð ÌOï .õþð óûÂ�†ôþðüèÞŸÞ»—ÔŸóÒ€?Œ¯Û\Æßð_Ÿɽ6GûHþÛŸz„_‚ÿgÅrÎN?vË q’�‚Ïô¿ əūjò1ïÿAyã_…šï¦¶?,Ϳ䶥ÿaù/þ™À_î?±ˆÛ>¼äàå×±>õüÎ~¦ÍHÀÚ[Œ`tÇsÇ>�0}8šb8ω? ~übðf±ðûâ„´_ø7^€Á©èZå°¸¶“åaÍ´ÈÑÝéÚ•¡s.Ÿªé·š¦›pæÆîÚáUâÌ2ìm„«€Ì°´q˜Jñå©B´y¢ûJ-ZTêEëN­9F¥9ZPœd“>“„ø»‰¸>Àñ7gxþÏrÚŠ¦1Ëë{*°Õ9Ñ« )QÅak$¡‰Áb©VÂb©7GB­)Jðgãü+ÁÚÆ§u«þÏ¿ïüg;<‹àψúCx¢ÂÚI aŸâí"ãNÕml!ùb†ßSеëâ‡|ڼθ“ñ<ãÁ %Z’«‘fõ0�m¿ªfž&o¥¯MF/>á\trŒMhÅ%ÏŠÉ1Ô±X:¸ššÎup™Ž[†R÷ià¡îüç¡Á~=Üj?|søA¤i^jƒ{¡XøÏÄZ€‡�ò 3PÑü/leQ‚°ÿk„|�gLdø|ÎåRØŒç*¥Jëߣ ]zœ½_³�,4oÙ{[?æGêy�í,ðÚ–Ÿ(ðóŽ1ØÞFÖ1Äd9^Ú}˜ýs �Î*¨=o?¨¹G¥9_OÖ¿Ù#þ 7û5þËš®•ã{ÔÔ>1üTÒ‚KeãÚÙE£hZŠ…Î¡á/Û›�7GºWEšÎÿW¾ñ.·¦LM7Yµ,Õú‡ øaÃÜ7V–2j¦m™R³†/*4j/ùy…ÁÇš�)&¯ Õž"µ7­:±?мkúix¯ãÃøyaxƒ±ŽP¯‘põjóÇæ8VݰÙßUöX¼uá_ �Ãå9~.�£ŠÀÖI¨™£ó¯ÒäÈõ� �QùŠ£ó #Ô~b€ �QùБê??J£ó a‘ê?:2=Gæ(È= ˯ø,ó(ÿ‚mþÐಂó| T Ànoø^  ÈÉÚ¬Ø�'?Að­_�²ºæ—·OøDÌ¿à7Å¿òOãÿîWÿSpÇðŸçûøc±BŒ³e°�ÛE¿~Ä¥}Yʳ–ÜX’I,Í“’Äœ“׿'Ôçžk?ëúüJ‘ÏÔg¸úq�^¹éȆæÀÉÆ8'=¹Âç·oÂ�ëæµÇY®ÑéÀöç×Óš?¯êâßÓúÿ€FIêG<ø{Ž3œþcŒtŸóÓ¯¹yô>Ô_×_À ¹ÎyëørAôïŽ1ÆN}3Jÿ×—õýtשÎxç>¿çך={þ_×õÐzžüŸþ¶3�2)¿_ëúÿ‡î··áÏ<ñÛŽœsŠWþ¿áÿáÀ9=Ïæ2y8çž@¸ëÓ&‹€dñŒõã�r~¼QÐ6ÙÛ‚~ö8ޤòqÓéÁëɧù]ÿ¯ þ®4ž¹ëÏ#ߎ~¹úàNE+ÿ_×õÒÀ¾NOÔã×郂hþ¿¯Óó{{›‹ˆ/,îg´»¶•'¶º¶šK{›ycmñM ñ2K±¸’FC£(*Aæ¹ñX\.? ˆÁc°Ø|fF¦„Åѧ‰ÂâhUƒ…Zðõ£:U¨Õƒp©N¤% ÆRŒ“‹hdžÃâèVÂâèQÅa±§G†ÄR§Z…z5"áR•j5#*uiÔ‹q�9ÆQ”[RM0¹º¹½¸šòòâ{»»©¤žæêæY...&‘‹É<ÓJÍ$’ÈÌÏ$ŽÌîij¶hÂá0¸ 5  ‡Áàð”iá°¸L-x|6…(¨R¡‡¡F0¥F•8EB�:q�8E(Å$’ >„¡G „¡G †ÃÓ…>JhP£N*4éQ£N1§Jœ"”aF1ŒRŒRKHpOžO¿·^Äc×¶:s]×õoøcb|ˆ‡Pd#ýGϯ'‘ÀÉ£úôüÄ@NI'ðO¦AôãŸAŽàp3T2HgšÞDš d†hÈhå…Ú)c`>ò:�Êsœ²²ž¼ô¤Ò’i¤ÓÝ5t×�ôù0ÛUtü„fgbÎìY‰ff9ffÉ,Äýæ$ó’IÉ$’MR²VKÊÞ_ÕÉõ×­þïëÔšk»›� Ü\Ï2Á‘Ë,’,®à »0�ª‰µ€Œ •Ç›–1NNò²IÊOvì•ÛÞï[ŽíÚí»-.Û²ì®0Ÿ|ÿ–p®:zäÕ—à ÜzK$R$±ÈñË#¤‘³#Ç"ÈèêC#« «)O*AƳM;4ôiìÓÞéî»§§K ou£[>ÖôëØ_�ÙžBX±.ìI,NNçÉÉ%�%ŽIäŸZ¶ÚÚ|»Z/ ëý~$rKŸ�csÈÎ888Æ9=O¶)_×õØ=¿3ÿ×çñÁç­?ëúÔsîǶ3ï��¯$ÑýwLwý?¦I”ïýŸõ÷�/Ú&}”O/Ù¼ï?ìþkýŸÎ+³Îò‹„¾^#ó oÙ”ÜW"¦Ñæçq\Öåæ·½mí{_–úïkë¸îík»^ö¾—ÚöÚý/ØšÖ=¸¸vhÒ2J’�pWa2àãæƒ÷O¥hôz®Ýÿ¨›Û׿âZ¹ºšîVžâI%‘òKÊí#±ÀwbYÉÀù‹€: Qd—,RŠV´c¢K²Z/ÂÛ’Ûní»ýä õÏon=½ñÔQýoý+”�Ë]ÜÃÐCq4PÜ…[˜¢™ãŽp¥ö,È�²P…بpÁw$æ\c&œ£ãð¶“i½íuu{+Ú×[Ü«´šM¤÷WÑúú~£­ÉÉ#ÉÉ»…õ�ãÆéž_×§—]7ý:S»¼3’‘äC’BŒ�ìz³�^àgÔ–'û¯ý?˜XûOöý¨|!û,ø«ãþ¿ãø“Ä0|Zý•>1üÑ!ðÒi�6�âO‰ áåÒµ�TꚆž‹¢X�"àêÌÝj¼„[YO™ |WðÖ/‰ð¹ &#‡–UÅFy^X‡VÕ0ùwÖ=­^Ê�FëÏÚÇÙóòÓÒ\Õ#¥ýÌ�4£•UÌ*V§R¢ÅåXÌ.[Ʀ'ÙòN|ÒŠä�#æµåª´_O‰$¸žd†9f–T� @’Êî�!;ŠD¬H�3ÉD ä€kìÒŠri$Û¼šI6Õ•ßwÒûž+mèÛÓDŸO%Ù~Úµ'í=῎?c¯ xGHñ?‡õOÙÃözÓþø“RÕ$°‚-k]·×5MN}KÃÒiš…ÝÀÒžÚù`W¿[+Ço4Ikdøîá¼FK�âìV*¶Kˆ³ú™¶�5RN� Q§N4ñ ¥8GÚ©C™ªnpZZmžÎišSÇaòzTaVœòܾ8:’—*S¨§)9Sä“|–•½îW¾ˆøŸ'Œg¯ƒ“õãúŽ€×Ùlx¡ž‡¿¿ýºzöïɧù]ÿ¯ އ°àþCŸ®~¼u9¯ÿ ý]:|œŸ©Æ¯ÓÑý_§æp;þ½ŽzþdžAEÿ¯ëúÜçé‘Çn¾œûg4Ã_w§¨ây>øí×<=y#ô_Õ¿á€3Ÿ¯Nzõ~>þãŽM×�¯NƒéÁôãŸAî=èþ¾ð ôÿ8#ëלäñßýzõþX<öú�(¿õÿ ý\õçü·NǸíëG—äO<Ÿcìyÿ냎0N:ð_úþ¿¯Ì‘ôëÇ`2?Ç­ïýy¹ìqž9çÓœpF9=~˜¢ÿ×õýl<{~gÿ¯ÏãƒÏZ?¯ëPϸ#ØÏ¾>¼“GõÜ=1ßôü>™$ñÇ=1Š/ýuþŸÜÛŽÝz}úž8ÇçOÏúþ¿­À3×§Oæ1õÏáëš_×Üž�¸çü9íœ÷Ç<úS¿õþ×Þ�:�N{’éÔzõæ•ûÿ_×ptü/¨ú}z@£úþ¾_  O¯¡Ç¡ãúöät ?àzÿ_ÓÏ\ÿ.=³ß±Gõ¿åГØo©ç½ úr:«îþ¿¯!Øns�}ž}?Ž„çé®ÿÕ¿®úˆpϹÉéî}GSצxÁç¦*ÿÖ¿Òïùx9$ž¼uÿ8öÆ ôªZ ÿ_×ü7æJ§·â>¹xúØãœsŠOúÿ‡þ¿¯ëï&½}ûuÉÆ ==údÓV·ü?éØ_×áú+0Æ:ñ×'ëÁïü�Åh­ÿ Ûï'úþ¿”ñ¹Î‘m×þBuÇüû]õ÷ü3×$×åþ.É5�Óþg˜nÿô™ŸmÀ_ò8Äÿز·þ¥`Ï,ÿ?çó¯çCõ° € ( €?Ö¶¿+;‚€ ( € ( € (S?#}8Îx9éïßóì‘x�îH:cÐŒ}3ÈëŽÞŸŒ±½—¡ê?ÿäTÖ?ìi¾ÿÓ^‹^63øïü1üŽì?ð׫=OV"9ôK‡!a·ÖÌç8Oµéº–�oœ�%åí´ œd�2k™uôýQ«éýt1>#xNóÇ~ñ�ƒ4ÿë ¿ñG‡5mËÅ~¸º´Ö|?u¨ÙËm«§ÜXÞi·ñOg+¬»¬5=2ü¢ºÙjzuÑŠöRÑÜøŽÇö&ø·c¡ZéËûlüt“S†óÁí-ÚO¨é:h^ðÂi�„,|1áÏh–Úƒâ jÚÇW›PÐï´ÿYiðO£§‹®o5 ½z@®eü¨»{ûxÖóÀÐø>?Ú·âæ—||&ñoÂ];ÄÚg‰þ1xÓâüZ¾¸u=ûÇ\]k-‘�ƒY\jZ¦¤·s³2@²-¼5áøìl4æ·ðÄìÞ$ñ‰[¿KäH’@d“Àu$ö�”LŸ†ï›)oý³5Û;†]°ê¶Úŵ‹0 2yÓêVqá”i†ý¸8}ý?È]Ÿ�ÿ3æ_�Ÿ²†·ñ¿ÇxªÛãçÄ¿‡ºׂt/ ê?ü9"Ïàýbó@¼ø‡qk®ë]ÕòZÞË4îb½²KktÔgð÷…çÕ./áÑlláE©[¥ÿ¯øyû |d¸ðÞ�¥ÛþÙŸluûÄšF¥âhgñL¿Ú�¬iÖš~¸š=Ïĉ­-5û V+ýNââi¯ôµ·ñ­aáMÁ³éžÔü2þUýtÛoÇϽŸ þÆž3Ò¼yá_ˆ¾)ý§~*øã_ð®½â«Ømõ;ïØhZ—‡û¤çÿëëEñ=¨àU?ùÿjí‡ûêò"ÿ¥z[ÿßRñ4´ö¡ÿ�TÿäCý«¶ï©ÿȇúW¥¿ýõ'ÿGûOjøOþD?Ú»aþúŸüˆ¥z[ÿßRñ4´ö¡ÿ�TÿäCý«¶ï©ÿȇúW¥¿ýõ'ÿGûOjøOþD?Ú»aþúŸüˆ¥z[ÿßRñ4´ö¡ÿ�TÿäCý«¶ï©ÿȇúW¥¿ýõ'ÿGûOjøOþD?Ú»aþúŸüˆ¥z[ÿßRñ4´ö¡ÿ�TÿäCý«¶ï©ÿÈ�¾ÿ�+Ïúõ¸ÿÑO]t¿‹Kþ¾CÿJFÒøeþùÅügÿ'û?öÿ‹3©óÿs¾±Ç¶qëÏCÛ?ÖÞ È—9ÿ±¥?ýD¦~?ÇïØû—þž—cùá@:1Ç|`žI ŸLgñ¯Üßý™ðo_»úþ½K1œqüùú}3�lû€6_§õÿOõýyÿÃp>œ{öç§§\ŒcéZ.Ÿ‡éý?À‡½‰G|ä ãåp~orG4ÿ¯=7þ»lËúþ¿ cÉ.¼íÇQÁúŽ{:_×ÈVœ‚9ëôäƒØqžƒzt¢ûmÿú¿õ Ä¯SœñÎ}ϯ4ý{þ_×õÑ=O~?Ïÿ[È߯õýÃ÷ÛÛðçžxíŽGN9Å+ÿ_ðÿðàžçó<œsÏ Üué“EÀ2xÆzñÈ9?^?¨è g¡ïïÇnž½»òiþ_×ëÈã¡ì8?�ç럯NE+ÿÃ_×@ƒß'§êqƒëôÁÁ4_×éù€ÿ¯cž¿™'ƒÐQëúþ·ùúdqßÛ¯§>ÙÍðß×ÝéêøžO¾;uÏ�^Hǽ×õoø` çëÓž½G�¿¸ã“GõäëÓ úp}8çÐ{�z?¯¼ŒgÐþ@篜ääwÉéIþ?×üêã�˜¨cø{ÀÇ|ã¾w/Ó§õý}ã_×—áý|ÊÒ°\üÇsnϧ`F<äuàa}qYÉèü¾ÿëü¾e%¯õù/ëï×éÏÙ;ö×øãûxóRñ×ÁmkLF×ì"ÒüWá?XÜjþ ñnŸg<—:zkšU�ö•{ö�.êYæÓuM+SÓ5{»¿¶·Ô"³Ôõ;k¿�âžÉø« O šÓ©z•L.+ 8RÅá§8¨Ôö5' °å«ÅT¥R�ZSp„œéÓ”}œ§5Æå¥[(~ñ(Õ£U9Ѫ¢ïx©EÞ-¾YFqœS’O–rOô–_ø8¯öÌ�øU_²Ïø£þ0†õøçŽ£ñÇ©üâ^ pºÑfœDöÿ˜¬«ÿœÇÓ.7ÍŸüÂe¿ø+ÿÍ¥Sÿ~ÙÙçá_쳌œÿÅñƒ8Çü/>œõçq’3ŸüAÞ_ó4âü)Ê~ó'èWúëš¿ù…ËWýÂÅÿóh‡þ.ý³²ü*ÏÙg'þDïŒ];ãþ/‘#9ϰ0iÄáúqþå_üæúëšÿÐ.[ëì±üÚ4ÁÅÿ¶qÁÿ…Wû,ñÁÿŠ?ã9ÇÂóÎFsƒ×œt&�øƒ¼/ÿCN"ÿœ«·–Lë®mÿ@¹oþ Åóh«ÿ~Ù¼Ŭý–sÏ_|_Oü—>28èÝsŸCþ ï ÿÐÓˆð§*·þ©ƒýuÍè-íü,_ßþúñoí�Æ>þË9Çý ßÀ=ÿ…å’GV;Òÿˆ;Âÿô4âÿï9Wÿ9ƒýtÍ¿è-ÿÁX¿þmøˆ»öÎçþ-gì°qÏü‰ßxÎGü_?RA§ sGüAîÿ¡§ÿáNUÿÎa®™·ýå¿ø+ÿÍ¡ÿ~Ùƒþigì±Ðùþ/õÇLÿÂóœõùG|Óÿˆ;ÃþfœCÿ…9Wÿ9ÇþºfÖÿuËðV/ÿ›Cþ".ý³xð«?e�qÁÿ„;ãŸø^�ϹÎy=©Äá�úqþå_üæü½Eþºæßô –ôÞ–/ÿ›Dÿˆ‹¿lîâÖ~Ë<ƒÁß0sŽÿð½8å‡QÁú?âð¿ý 8‡ÿ ²¥ÿ¼oøpÿ]3oúËðV/ÿ›~á?â"ÿÛ8ÿÍ+ý–@âŽø¿Ç¡Áøçœ·©�øƒÜ/ÿC>!ÿœ«ôÉÃýtÍ¿è-ëÿ.±üÛý~�ü]ûgü*¿Ùhg‘Ÿü_èzÍrî{“Ó9ëGüAîÓþ8‡ÿ r¯þsÿVúéšÿÐ.[ÿ‚±¦7ú`?àâïÛ8nϯÙk?ö'|aÇ8럎yÀîÏl Qÿ{…ÿèiÄ=¿Þr¯þsÿ^Aþºæßô –ÿà¼_ŸýFÿ˜ø8¿öÍÿ‹Wû-Çþ(ï‹ù$ä Åó=8ÉÉ�ÁÈ£þ ÷ ÿÐÓˆ:ÌVUÿÎ{lë®mÿ@™oþ Åÿóoä*ÿÁÅ¿¶oý¿ÙhÜŸñ€ã<àø^`Ð í$’NüAÞÿ¡§ÿáNU÷ÿÈœ?×\×þ�rß•,gë�$Oø8³öÌ8ÿ‹Uû-’xÿ‘;âøç‘Î~9ŒÆrN±ÜOÝ?âp¿ý x‡ÿ r¯þsÿ^Bÿ]s_ú˯ÿ^±üÚLàâ_ÛBâÞXãøgû/ZË"[‹üYi fùVXÅׯ»›g‘IÜ©-´è[hh˜+-køZé¼Ïˆd–ñx¬­'äùru%&¼˜¥ÆÙ¶¶Âå«ÏÙbÛOç�kïGão�>5|Iø‡ñOXøÙâÏjš�Å-{Å)ã[ÏG:éÚ”^#‚ê;Û CO6ÚÅ¥®�%¥¢höÚj[Úi6öVVºtvÐÚAþ©ƒËòì[O)Ãá©G.§‡–8Y.zRÃÊ2�HTöŽN¯µR›­*Žr«)ÊSæ”›#[‰¯‰–2­YË:гª­*‰§[ròY((ò¨%’JËõÃÃ_ð_ïÛwÃÚ—£_h¼_w§ZÃk?ˆüKàŸ®»¬<*#û^£ÿÏÄ�èm‘ULßÙÚ5�³1b"�¾ZüÓàÿ Õ«R­){X¬·îÿ‘N¾¡þºföÿwË¿ðN'ÿšÇÿÄD¶®2~~Ì£“ÿ2OÅœ?x=r íƒÉÀ_ñx_þ†9ÿþeŸüéþ»úé›Ð>]ÿ‚±?üÖ7þ"%ýµ8ÿ‹yû2žŸð…|O¡Ïü.Sß²©Ç4ÿâð¿ý ¸ƒ×ëYoÿ:CýtÍÿè.óýÖ#ÿšÿ¯Í?â"_Û[þ-×ìÈIbüQ_q�Ðññ—#§N§·lŸñx_þ†]ÿ‚±?ü×åßK‰ÿþÚ§þißìÈ3Ûþ¯Š¢ó�ø¼Ø=OqÐóÒ�øƒ¼/ÿC ïþõ–ÿó¤?×Lßþ�òåÿp±?üÔñ/í¬ÿÙ�gŸ|QÈààÿÉeÀ<ýúäñx[þ†_ÿ‚q?üÖ¿á‰Wþý´‰ü=ý™‰$ÿ_ÅÇñxÎ Zðk…Ÿü̸ƒÿ ²ßþtÿ^ºøÛ7_ó—àœOÿ5ü�”¿koø*‡í?ûix3Køyñ)ü áOXj°kw¾øk¡ëz%—ˆõ;1�2Oâø«S½�Jw–âÊÂëM8ÝÈ·w6—7V–Z}o øÃÜ+Œž?,v/*n�:ù…je‡„ïíáðØZqu£9ʩȜ!(FuüŒÛˆ³,ÚŒpø�aJŒd¦éáá8*’_¨êT«&¡¼b¥}ZmE¯Ïˆ][êx#¡ÆÐIîGwûÙÍ~�Mß}tþ¿¯#æ^·]:—Ì÷°Nq�ŒôFì°Æû½3ZZß×õýnCVþ¶þ¿ÌÉ3¬Qòǯ…Ú~rHà ·½yk_éüÿáüº“}wõþ»—.ïbÓ!k[RíÔy³Ï<¯8=wú/ðŽXnÁ«¿.‰ß»þ¿¼¾¯EØå‹9bI<³1Énç$úœ÷9Ï>•7þ¿Ïúß¹BdŸäžä€:u½y¥~ÿ×õÜ€dŸ¯qõËñä ?¯ëúìÀ3ƒ!žÀ�æ:ä}§·¯â¿¯óþŸ˜ÌœœõúqíœóŽØ¥ýoý+Œ3Ûð㓜c¯O˧J/ý_–€ÎyëørAôïŽ1ÆN}3Eÿ¯/ëúè\ãŸOÓߑ×üäC õéþNOÿ[®2x£úþ¿­ç“Øó“ùóÏ<çŒu£úü‚ÁŸ¯·¯áØqŒþ>´¼çßêG_åωéØÐLà“Œõã¯ëßúÐ0,sŸçרúgú踿à†ϯÿ¯®3×ð ×õ¸¹î0{`ÿõ‡§:O~þ½ý}ÿ™8ǽ'£ÿ‡*ärIŸ•xQÛ¿Ÿ^{šC؇'§o¯óÇøq@…ôôÏùÝ?/j'áþ}Ï­?Ó·qíøþ\ŸZ¸Ý}‡®x<ÿúðP~Yþ¸à~cõñ@ÿ¯òê}z}=²yí“Þ�`„02ËÄc·9r?„{q×ÿÖ0Ÿáý~>£ä”ÈpxUátP8ãð=~�† NÁoëúÐnqÏ�®8ØííœÐ¬<Ÿç¶;ÿO¦Gi'TOoË1 ‹÷›ø@çŸ\Žyã’zŠ5ùnUôó+\Ýy˜Ž0RÆÑз_™³ÏCß¡äõW膗^¥LõéþNOÿ[®2x£úþ¿­3Ï'±ç'óçžyÏëGõùƒ?_o_ðãü}hyϿԎ¿Ëž?Ó° Òyõý ÿõÇ­!‹œž}Aúã�ÿ];€güúÿúúã= úþ·=ÆÏlþ°ôã¯ç@ ïß׿¯¿çŒP’:ßçŒ�§N(r8ü{ýy럧|zç…¿Ìö½ñ�{b€ ž?Ÿåǰü»ûŠýyzã‘éÇÿ«?J?\~ûqéÇ?‡l€s×Ûð÷ç�ÇÐz`Ïùüøü°G¸ AœãôÇ··õ8ý(õý_æ'éê?\þ½ ž�¾¼ÏáÅ/§¦Èöéù{P1?óëþ}h¹þ�»�oÇòäúÐÀvëì=sÁçÿ׃ú€òÈ÷õÇó¨'Šý—PëëÐãéí“ÈÇlžô?Éëúþ_Zí×ñüñùçüò{ñéÆ?\p>ƒ·æ@Lôÿ#¿ôý;I>ü‘�úžüç®=ÿ½š[úÿƒ°€àç‘´dvàûFyì ~Bvì?ÛÓïÔs’x=ý�'#Kóþ¿È?¯ëþpÀïØŒç3ŸÏžÜàþ¶þº‰þ_Õ‰T÷Ïøþ}==yϽ5ý_ðõþº_þ8ýsýOOÇŒz“œc"×BI?Ry9ç×�×ýjÖïä/ëúþ¿3•ñ·ü‚mÿì!ãþ�wƒùü¿ÅÏù&ð?ö<Ãêd}§ÈçÿbÚßú•ƒ<º¿�O×€=3á¿Â_|T›V‹Â°Ø2è‘ÙɨM¨^­œ1�A®VÒ$ýܲI$ÂÎ鯨ö*ÀûÝY£WäÅã¨`”g/Þ9(¨Ç™¾[s=ÒIsG­õÑoi”Ôm~§ªÿÃ!ü]þï†ðtÿüƒ\_Û˜ú}ÿ‚ÿûb}¬<þãæí_K½Ðõ]OEÔ¢j:>¡{¥ê Q îŸs%¥ÔBX™ã�G<2 ’6d|nF*A>´'�…H;¤c8»5xÉ)EÙꮚÑêh�Òkg©ŸT@ë[_•�Á@ ÍaË_þ~ÃÿÿÁ*ðþWÿ�Àhå¯ÿ?aÿ‚ÿà…áü¯ÿÿ€ÑË_þ~ÃÿÿÁ Ãù_þÿ9£–¿üý‡þ ÿ‚‡ò¿ü þsG-ùûüÿ/åøüæŽZÿóöø/þ^Êÿð/øÍµÿçì?ð_ü¼?•ÿà_ðš9kÿÏØà¿ø!x+ÿÀ¿à4r×ÿŸ°ÿÁðBðþWÿ�ÀhåÄÏØà¿ø!x+ÿÀ¿àZ˜ù[¨ëޤãž;wíÈ÷Å>Zÿóöø/ÿ¶áü¯ÿÿ€yˆÇË&y =úã¸ëŽ;ŽÇ=j\kÿÏØà¿þØmÂËÝøüԾȩ¬ØÓ}ÿ¦­¼¼R’¬ùš“厩[§k³®…¹4Ñ]žÑ40ÜE$G<#G,3"˱¸*ñɆGF†VX"¹�Ž^_øEà‘á—]6òFÅâíJÜÄW�/Ⱥ¶ôòÂ(^�E={~GæøOþ†?ü½5/þ\ѯoÃþ›á?úÿòôÔ¿ùsF½¿øo„ÿècÿËÓRÿåÍöü?à¿§[éñDÓiì³­ÁV{¿µI-ÆÀBy—³Íq4ë%bW™Ö%%c §€ƒS·Òmæ£:Ø0 ÛRŸI‘×,éo%յͣÍbïHè¬Îè�™‰Çó|'ÿCþ^š—ÿ.iëÛðÿ€æøOþ†?ü½5/þ\ѯoÃþ›á?úÿòôÔ¿ùsF½¿øX¶‹Ã7’¬0jƒQs’mÄ·ÚœRŒD¶3jw\'}“C"dÛ¹A¿Ò¤šn"’ ˆ£ž ‘£–‘eŠXÜxä�Ã#£C+¬ H^_øEà‘á—]6òFÅâíJÜÄW�/Ⱥ¶ôòÂ(^�E={~GæøOþ†?ü½5/þ\ѯoÃþ›á?úÿòôÔ¿ùsF½¿øo„ÿècÿËÓRÿåÍöü?࿦Á§GO§ºN—;Yï>×%ü·!ù—ÓMq4ë’±™Ö%%c §€ç¾!È“âoû\J¨|qÿüÅ-™ó¯…¾äc¾Ñ×�éózsè}«Ð0{¯ëúýpÒFTqÇ‘Œñ�ÇÓ±ö­2¥zóþ—§ê( € (  —ä ÂNµ¸É?õÉëJ:Õ¥ÿ_!ÿ¥!Ká—ø_äðq|ð¿íðÑdæ‚W—Ä3º8.¼wâ ”ç D¯ir€Onïë�bÿ±3‰}—šÅ/7%×ÉI}þ§ãÜv××ðKªÂ7oZÕ-øÇþþzuç?ÞÀ¿þ¾¸Ï_€þ¿­ÅÏq€sÛÿ¬=8ëùÐ{÷õïëïùãdއ·ùããéÓŠ\Ž?ÿ^zçéß¹Å!oÃó=‡¯|dØ '�çùqì?.þâ�^Až½ÆsŽ?—?JP{óœvÿлÀÝׯ‡×ú¹KM¿¯ÔÍ»“ïsòãÔ c<ñ€29ÉÁ®j³åþ¿®¦ÑWü¿¯ëÈö_†¾.Ö¾|øÍñÁ·­¡øòÇÆ¿<£ø¶Í ?iŸõ¯ŸêM—Z¥¨ËàM Õµ}.[MJ+yiÔp^ίüOô•ÀáxÇÄ|?âO2à¼Ç†üWâÜ놫U®²Œû6áLo†9VAó �Ãæù~—g8ˆe™…3áÈñgÿ-hÿ‰}ð+þŒ÷†¿ø…ðÿÿ0üEè½âÿüHsOþjøkÚþŽã7þ�òÖ�ø—ß¿èÏxkÿˆ_ÿóÄQñ'þ‹Þ/ÿć4ÿæ ÿ†±ý§ÿèá>3áÈñgÿ-hÿ‰}ð+þŒ÷†¿ø…ðÿÿ0üEè½âÿüHsOþjøkÚþŽã7þ�òÖ�ø—ß¿èÏxkÿˆ_ÿóÄQñ'þ‹Þ/ÿć4ÿæ ÿ†±ý§ÿèá>3áÈñgÿ-hÿ‰}ð+þŒ÷†¿ø…ðÿÿ0üEè½âÿüHsOþjøkÚþŽã7þ�òÖ�ø—ß¿èÏxkÿˆ_ÿóÄQñ'þ‹Þ/ÿć4ÿæ ÿ†±ý§ÿèá>3áÈñgÿ-hÿ‰}ð+þŒ÷†¿ø…ðÿÿ0üEè½âÿüHsOþjøkÚþŽã7þ�òÖ�ø—ß¿èÏxkÿˆ_ÿóÄQñ'þ‹Þ/ÿć4ÿæ ÿ†±ý§ÿèá>3áÈñgÿ-hÿ‰}ð+þŒ÷†¿ø…ðÿÿ0üEè½âÿüHsOþjøkÚþŽã7þ�òÖ�ø—ß¿èÏxkÿˆ_ÿóÄQñ'þ‹Þ/ÿć4ÿæ ÿ†±ý§ÿèá>3áÈñgÿ-hÿ‰}ð+þŒ÷†¿ø…ðÿÿ0üEè½âÿüHsOþjøkÚþŽã7þ�òÖ�ø—ß¿èÏxkÿˆ_ÿóÄQñ'þ‹Þ/ÿć4ÿæ ÿ†±ý§ÿèá>3áÈñgÿ-hÿ‰}ð+þŒ÷†¿ø…ðÿÿ0üEè½âÿüHsOþjøkÚþŽã7þ�òÖ�ø—ß¿èÏxkÿˆ_ÿóÄQñ'þ‹Þ/ÿć4ÿæ¡GícûOÿÑÂ|fÿÃ�âÏþZÑÿûàWýï ñ áÿþ`øŠ>$ÿÑ{Åÿø�æŸüÔ4þÖ¿´ìl¬ßþ.ÎäÃwãßÞÚÊXî,îõ ínaq•’ ˆ%‚T%$FRT̾�¾4Ô|#ðòŒŸÃ[ Ây6NKUR†' „¥ˆ¡VÒ§Z…XU§4¥ ÆI1¯|H½åÇ\UQu…ló0¯JièãR�jó¥RWR…HJM©&��[ÔtŸø«öÉøQáÝOHÓâÑ>&x—öaÕ5‚ÆÆÔG�a¨j~(Öe†ÊÑ 8®ÖÞÙR8‘Wí8W�8—!úø�Ä8\ï0¯Ä<ÂH|gY†"¦?3£OÃ>!ñ!àúøÌf%Ô­�Æeùoe­ŠÅJu±•h:ø‰N¥Y·ò™çäùŸÒ…òšù~žSÄù÷…8œÛ.ÂÒŽR\a•p–gŸÓÃТ£O ‡Åbólt¡BŠ�:ª©ÒQŒ"—!âÚóö”¶ñ&¿m£|bñ¯…ô‹mkS·Ó<9á-Zo øgD°‚öh­tÍ@ÑþɦiZmœ(�ÛZZ[ƈˆ o‘žFüÇ'ú<ø-�Ê2¼fqáß ñkŠË°8ŒÇ>â\ süÿ7ÆÖÃR©‰Ì3|ç4xœÃ1ÇbªÊUkâq5ç9ÎM.X(Â?wŽñOÄ>;CÅY¶S�£‹ÄRÂe™>&Y^W€ÃÓ­8ÒÂà2ü±Âá0Ô`”)Q£N1ŒV·“rxðØ_µ?ýÅü,õŸþI¯Gþ%ÃÀOú4>ÿâ5–ÿòƒ“þ"ωŸô]ñGþ1Ÿü°?á°¿jú8ŠÿøYë?ü“GüK‡€Ÿôh|?ÿÄk-ÿåÿgÄÏú.ø£ÿÏþXðØ_µ?ýÅü,õŸþI£þ%ÃÀOú4>ÿâ5–ÿò€ÿˆ³âgý|Qÿ‡Œgÿ,:�7ö‹ý¶µ�ë>,Ò~)ü|Ôü-áÁxƒÄš~­âËÍDÍo_ÚÚ½¿™§éæI®­£Eº¸‰™§Œw Ê_G£ì*BŒü'ðêªÿ”¸{*�J–M¾H:\ÒÑ=“Ù”¼Wñ9§%Çÿâ5–ÿò€ÿˆ³âgý|Qÿ‡Œgÿ,øl/ÚŸþŽâ¿þzÏÿ$Ñÿáà'ýÿñËù@ÄYñ3þ‹¾(ÿÃÆ3ÿ–ü6íOÿGñ_ÿ =gÿ’hÿ‰pðþ�‡ÿø�e¿ü ?â,ø™ÿEßáãÿËþ ö§ÿ£€ø¯ÿ…ž³ÿÉ4ĸx ÿF‡ÃÿüF²ßþPñ|Lÿ¢ïŠ?ðñŒÿå�ÿ …ûSÿÑÀ|WÿÂÏYÿäš?â\<ÿ£Cáÿþ#Yoÿ(ø‹>&ÑwÅøxÆòÀÿ†Âý©ÿèà>+ÿág¬ÿòMñ.Ñ¡ðÿÿ¬·ÿ”üEŸ?è»â�üÿâ5–ÿò€ÿˆ³âgý|Qÿ‡Œgÿ,=KÃ?>!üiøAñþ‹^,Õþ ËðÿÂþñ¯ƒuON5msúÍßÅ_x#P�LÖ®–MJÛJÕ4êQj:BÜÿgÜÝç_´êÆ9üÂ/á/Ž^ ÃÃŒ—Á¸.<θׄø¿*È!,¿'ϲ¼†œ_ÆuL~SBpËëfynyÃuLi,?×°øZ¸ü+}[V?g¹Ïxkâ$¸³0Äq'†rþÏ2ng%ŠÇå˜ÜGd9*8\uXËO‹Ë³œ\18%WêÕkC ˆ•?m‡„Ïž­&݆99èH c�Ç8œç¿Ò:5/oëúùþ'òãoǯõúöѵĈeŽ@fÀ8g× Žr wEß¶ÿÖ¿�„¼ÿ«š7W‘i±›[VßtÃKÁÙžüü goÞ<ã7{+-ú™Û_ëó9‚Ä’X’[$“’I'“ïÔÿ0O7/·õéÔ`ª–á@䜞Š3“ž˜ç½;m;Ãq}�ßPÿ]2`($}œI@@ÏJœ’jÔw¿õýlK–§?ya.™!ŠQ»vLR�ò:Ž¥sÐüß2õ㯇Քšeë‘èz|œp?Ãó3ê}3ïþÿ§Ó#°ÿ>˜`vþ}y¡œséøpr{ò:ÿœƒ@ʹ÷î??ñþTƒþüëú@#ß¹ôü?É ,ºsüúqÇÔŽŸ—=Áÿ^ŸÖ͆Gáþ#Œð1õü©\_×õÜLûŸË¿^3žüÓ¸_×ê.xöãžýóÇB¥jÕêÔq…:TáNs›QŒSm¤aŠÄáðXzø¼]zXl&�JøŒEz�¥F…Qs©V­IµS§å)I¤’»v:/x7Vð&­‰­Üi²j’iÖZ�Õ®�xoLkÏ0®›¨°Ž4‡Q…K4´ñg‚h§•%V¯“àn:Êøçölñ7‰¼7âO [xzÛâoÃèZ÷_¶¸ŸÄö�w¥èé†ÓP‡ÅÍž�áù£§igQ]rò 1þÃâgåøl¿™æðË¥™dX."Ãa±|T±Ëqï’„£= Ы]Ôç¦ðÔgS•:•=Ÿ±„ª/— çxЏŠx\Ĭ.>¾[V­*”•5ŠÃ®j‰º“„£O–ÒUf£OÞŒy¹Ú‰ÍüeøAáý#öcý‹ üaÔ>7躷ě¯i~-Ð~ÒÃÀ>ѵ­_]ðí÷„µ+ßøFïmï´ >µsnúL~*ŠQ©ZudùµzÜIÆ8lV—â°E<–µ,º8:¸Zù,n®.sÇc«Q¥F½ ñäþ2±6z�šüið^…7Œd–ÏEñ§Œ_Ãú·‚Âèúö�o©K¨éº~“¨jüFeÇØžÈxÃ9Æf˜!­—qf#&ʰT0XÌ p“ç¥?ì|eu„Ju°xE^¼±Ÿ½¡RTÔ>»R¥Ztãîáx~ži˜d¸*8LF] FQO‹¯R½C¬¹f¾»F›¬ÜaZ·³¦¨û•"¤åì!JOῊÿ°íMð†Ïã¹â†™ð·À×ð¥ÇÄmgIñ¯ÃÉámÇúÅö�à=oWÒü'ã{R†ÇÄ·ZuÜqOoksŒ–×k¨Ëj-¥uûL¯Ž¸g6žSG ˜ÿ´çK¾�\a†XšØP«Ž£J¦+ B›ž5"åJ2š”]5.hßÄÅä¦8ÉÔÃ~ëìž&p¯‡ªéC9B„çU§%®.Í&•Ÿ5¬Ï _�ÿ¿áJ7íþ’ƒ#â'ü*x|ks«hV°Þ|AþÁ_?‡4ÝçT‡Äz¬ðh,u›Í;GºÒíbYâú)âx“ÛþÚË?¶°)<ßêÚ�Uäá€öÿVXŠ•£IáéFUÿwT«“v僋LáúŽ+ê_Ú>ɬÖ>«íœáñžÑÒŒ½¤Ú‡¼å8-o$î�£¿dÏÙFøßàߊÿ>3üO_�ß³ÀŸøGí¾ üDO]x·Äšÿ‰üUx-|9ðïá¿…­ç±ÿ‹ucµ¯'–õl|3gwc«jÐÉgp�¾{Šx²¶K‹Êò<Ÿ-y×g~ÞX ½â#…ÃPÃa¡ÍˆÌ3L£?a…¥öR‡>&q�*MJ-¯G)Ê!Ž£‹Çc1K–`}šÄb=›«Vuj»SÃaé'iV{¶åËJ.3š³G¥øÃödý‰þ$|)ø‰ñ öKýª øv6?k¾øGâ=Å—žñF½§EÒÿ ©'ˆõe’¬;é,l5O7 Äœc—æ™~Šxc,iUaèç1[™á0†½Èf¸zØXb0Ô*9%õÛ¬=&¤æÜIÒé­–d¸œ&'”æµUl$}¤ðY¬(akb)­å„© ²§V¤lÿqüImIÆ2ø‡Çÿ>'ü.ðÏÂÿxóÂÓhøÍáYümðÏS—SÑ/ÓÅ>¶ÔKŸUŠßKÔ¯¯4È㿊Ksm­[é׬˽mZ"¾Ïœå¹ž'2Â`qJ¾#'Å,eIS­†ÄÊ ¤i9U§Tn KšŒªC§5ôÇþ ·ûPhŸ´gÀO€?~_ø>�&·³ðωô¯øÅÖ|-¦Ý �ë^ñ¦ƒâ}GÀÚÎ¥á? Ûßk~O.¶®4û4Ô½Õ´Û{¯6§ˆœ5[‡óÌ÷,Ì)âÖG†”ñ8j¸|nGR<¸*8œ|5½Tmjo øCÄý÷…¤�Mš SW¶ñzCi6){}z¶öZ}üö«†|Aȳîyþ#C/Ž …¯�Ƽq40Ùu|Lö1ÄâèP†):‘•:Rúª¬Ü!iÔ¦¤óNÇåù’ËéÑ©ˆuëU§�tÝ:•q0¥%ïºtgRTŸ+Sš©ÉÉÊVŒ[\ŸÇÿø'�í—û3ø)~$|fø'ªøoÀ1_Úi:‡ŠtOø#ÇÚ/‡5KÆ‚+];Å—¼Mâ„ð•ÝÕÍÕ••¸ñ Ò㸿½²°�å½»·‚N¼�ÄâLoö~QœÒ¯ŽtåVž¶�­ˆ¥'*˜XcðØgŠŒcÎOí\a ÎIB2’ÇùÎYCëÌ©ÐæP•hU£^å&¹cYáêÕöNí%í9S”£ï4ŽÇáßü«öùø§áÿ ø¯Á?³þ¡¨xkÇ> ðïÄk—Þ;ø] iž(ð׋-®¯|>Ú-׈k~(ñƒí./¼h—wO…4¯ZÛ\½œòx¿Ä~1ÔtxeÖîˆ#µÖõ;;©¦µ¼ŠÞ ^ÎàGïgœS�pîŽÎ3:8\>.q† Â5qUq“”TÒÂað”ñŒJp”dåF”ã(9I)ž S˜fuªaðxYÕ©A9V»…(QI´Ýj•¥N�'tÕ§4Û‹I6š:�‰Ÿ±'íUð·â×Ão�ž9øA¬h>?ø¿©iZG«¬øWQðïÄ;ýoS²Ò4øü/ãÝ+^½ðªQÔtë{É ñ7•¥BÆM]ìc»·wäÀq¯ f™VaœàsjU²ü¦�Z¹œýŽ*ž# 4çV£Å`jІ:•¡N¤ ¥†½_g5IMÆIkˆÈóL&/ �¯ƒœ1ÉBXóÒ•­©\&™k¨j¶ ¦k3Ç“â;[„Ôü7yªé„^ò.+áþ&–)dY•,ÇêTðUqR£N¼cJ9…*•°±”ªÒ§RtéTu(ź¸yEÓÄB•OpÏ0Ê3­Rxü,ðÞÚUãINPno 8³J“åRœTfÒ�H¾jrœ=ãꟃŸ±÷ìÝ£þË~ý¬¿kïŒ_<à¿‹ß¼Sð×ᇄ¾ü;Ѽe¯¼Þ "-Åž0×W?[“å°ÊèfÙ¾3FŽ/W †¥‚õOÜéR­j•jFœ"�Ò¦“©$¹£Ì®—’|Qý�§Ž>~Éß|5ûWø#Á u?ŽIãßjzŠÖ ô]>ßRñ,¾$Óõmr+{?ø=.Ó[ðö�{}«]"îËKF¹}>ÏÕË8½,—/Ìx§/Äp¾7™ÓÉ^N½n|ʵISì=JT\§†ÅÛž�z�…(ë Õj*¤ù1Y3úö# ”â)æ´hágŽUèÊ�>\4"¥QԌ撫Füµ)ÆR›ÒQ޼±ùçÀ~)üLð?ʼnðœºï‚¾èÚˆ~)kqjº’xSFñ&¡>“¢^Íc©êv:ž¨·º…´Öþ^…e©ÏnS͹ŠY$o�å™n7+Ëñ¸¥C�V­C,¢éW›ÅUÃÓ�ZÐS§Jté8S”ezÓ¥^Ñri¥çPÀâñ41Xš]J8(B¦*|Ð�²…I8B\²”e;É5î)µ¼’>±ðü§öüø™§x7Zð�ìó«]øâ€¼'ñ+Á~&ÔüiðÓþñ…¼wh÷¾6#ñŒ´½þzØ$ðx6kè¼_ioskwªèvwÜ·Ëã¼Oà\º¦.Ž+>¥ø v+.Æa©àóF'‰ÁO“í0ø|JßW¡+ÆX¸Áá'(ÊëNqq=Z+ŸâcFt²ùºxŒ=,M“­†§J¥*ñæ£ËR¥hÃÚMkì\•dšr‚Nç‰h¿±—íGâ‹~>ø ¥üñl¿þø_]ñ§�~Ý.�¦ø›Lðφ౺Ôõ;+-OP´ Y-µ]2ãH´ðãê÷þ"·¿µŸÃÖº¤SÆíìVãÃåXò®q…YFe‰¡ƒÁæö•0õ18‡8Ó§9Ó§?aiR©²Ä*PÃÊœÕyRqhâ†M™ÔÅâ0ÁUxÌ5*•«aß,jÆ•>W)%)/i¤¢à©ó:ŠQtÔî�@øËÿãýµ~|6“âçÅo�Zׇ¾ÙÏam®k–#ð?‹eð•ΤU,¡ñƇàßëúÿ�ÌÓËoh_ź^��Ͷ•q,z¤éfÜ9Gˆ\žæ+*Êóº8Œ|ã9Q£S�¬TiÝÎX*ؼ5 ÛEJia*ÖnœeV)Ó‹™ÑŒáÌë†x¼VtðéÅNq©B«¤ånU^jÔ©BîÊõ¡¥%i>R?�ðNoÛGö‘ð4~ü Õõÿ]ÞɦèÞ$Ö¼Mà_iþ(Ô"žki¬üß¼QáWñœðÝ[]ZJ¾�VXï­¦Ó™…ú}”¼ïÄáìk˳lê• l`ªVÃÑÃcqõ0ÔÚŒ”ñ‹†Å,q”f¾²é^U>Ì.Îs*?YÂ`gRƒ|°©R¥ ƒ©¬êæúÕ´{ ôš6nìwðÖ[—å¹®38ÂÒË3|E .]�N¥l."¶"3�%í¨B¤)AÆ•G:µÝ*4¹%ígŽz6g‰Äb°”0UgŠÁÓ�\NÚi“Œfù*J.rNQQ…59Ï™rFIÜûÃáü£ö•ñßÃïÚÖóÆ»ð_ÆÙâ_†7…>¿Š>OŒüYã}Ã~:×4 s^¸ñݾ›á�øGþxÛÁ~$‡Pºº}íö»'‡Réõí'UÒìþ#5ñ{‡p8þ޼q™N~³*جÅa³8Ë…ÁVÄ`¨×¡B8TÄû|njúq�´„(,CŠ¡V•Y{¸N Ì«áógV†3/xhRÃ{L+öÕkB�yÓ©Q×Q¥É†¯B¢“|®Söwö�œWäf¿¡ê~×u¿ kvëi­x{VÔt=ZÒ;«KÔ¶Õ4›Éì/íã½Óç»±¼Hn­å�nl®®m.DÖÓÍ $‡õZébhQÄÑ“�E*uéIÆpr§V p“„ãÅÊ2O–qŒã{J)Ý%RœéT�)«Nœ¥NI4í(ÉÆJé´Ò’zÅ´÷M­OÖï�Ÿ°Çìyðáå§„þ"þÑߎêÚîþö8#¤�Ë2n6âÜó0–+/áü³Ôx“ØÊ4ó °â,¹aê{:¹®2•hC°ôÓU§„„åŠq”!+ûSëq¹O€ÃªXŒÇK2žYO2£9aá,·í#Ï %ÁÊ»©'û¸Ö’T®›i[�ü{ÏŸ¯ù㎇=>Ÿ¬!ým¿õs¿ðLÛŸã�…¼㟆¿o5¯ü@Ñ^ðwŠoüqðÏÃ:¹iý¥y¢ÛÚÛê>(ñ¦�Ýö«cuiaáûÓm­Ýˆžú+§$—«ðù¯‰<’â±x,Ç;…f²¡‹ÂÓÁf8šÔeìáZS•<6´�RœeR¼9¨Å¾GSÚ5îá8c<ÇR£_ �”èâ!í(Õ•|5*u4 ’•JÐ\òš’�9Z£K™G–ìÑðwü›þ 㩼ck¡þÍ0µ¾ð>­¨è:ÆŸâ�gÁžÔ5 cJ°·Õu ØøÏÄÚ ÏŽÞßJ¹‡RûGƒ#×l§µ’ms4×V�Üg‹ñC€ð+ *ÜG„”1´©×¥S G�§N�YÊ•9⧃Ã׎š¬]>\c¡8É>h¥¸Õâ [YJ„åNq«:4%)Â*r�(Ö©M×´Z•è*‰«Y¶âŸÎ¿ ?eÚã‡Å�SàgÂÿ„¾,ñ/Å}]fø5­mô+ï ¿‡®ÿ³õÖñuçˆîtm+ÂQiZ–Ý2òãÄwú\êRA§4Ÿlž$÷óN'È2\®–u™f¸\6W]Q–¥*ðÅ,D}¥ªCµqN­?ÞB8zu[¦¥RÜ‘”—Ÿ„Êó n*X6µ\TÕJ6TåKÙ¾ZžÙÕp….I{²u%¥hÞîϬøýûþÔ_³¥á?ãgÂ�GÂPøöùôßëöšï„üWáê 41=–—ãëÚ÷…Úö3q ͧÜjðßÛFì÷6°¤sùr.3á®$§ŠžMšSÅ< Le PÅaqxh4Ú�\.… JƒåiT�)BMZ2“júãòLÓ,•%�ÂÊŠÄIÆŒÔéV£RJÊÑ­Fu)sj›‹škv•�¶¾/ÿÁ?l�€º~…©üWøâ¿ [x¯âU§Â Åöß ëº‡‹>"_Ù=õ‡‡|-¤xo[Ö5_5ìi-­¦«¢Yßh—:´ShpêO¬Ã-Šã”ñß瓯O+Ï0¸©aréfاɈ¡O —Â|“Äbªâ(Ò¥‡ämJt«N£IªÎš¢ÕGx̃8ÀFœ±x Ô•\JÂQÖ•IUÄJ<ѧJç9ÔºM)Â2ƒ’pRç¼N›â¿üCöàø%ðßVø±ñ#àF­£ø#Ñi÷-¼Óð‡Šµïx:ÞX&ŠY§ñ&‹¦Ãb$TÔZÎFž|¯Än Îs Y^_�Ò«ŒÄ:‘ÂB®…£Œ•)8Î8,V/ C ‹’’j1ÃÖ¨êZôÔ–¦¸¾ÎðXibñ8Â…%YÆ®¬è)$âëÒ£Vuh¦š»©¨ßÞ³>ôŽƒØs×ñüGèOÛ\ð¿­ÀË·~=G¯ãÿ­EÃúþ¿®á“Žþƒ¦p?—ûþ4g�ïÛðäý?ýYõ]¯é†{ÿ>‡óíÔŸ^8õ.×õçþbd~_¯|wÿ<ñ@Oð�zþ#êqÐ{<÷�Ûúþ¾ðÏ8è}ú~ óJáýyÿ]C8ïþpOæOǵ1_×§â&zžqþr?�Ç9\Ößðâ‚>¹üýÏ·å@¿ÈOäAãÙäúÀçéH§õ÷ÿZ8ãÓžGnGÓ'Û<ûRþ¿­Ãúíýy€éœ÷ïë×9þ÷±õsT…ý~?§ü8àAI�=Éϸ#ëùõw·õý^¢þŸô‡ƒŒdÿ>œqùtëéÏz@úúïØ‘xü{{c< ¯ëúÿ†'ú×úó&SþzvëÓŸ^3ŸsVžß! '€3�ž' 1Àèn8äöÍh¿_ëñ'úþ¾G-ãoùÛûê0Ÿü–»ÿ=8èIïù‹ŸòMàìy†ÿÔ ÌûNÿ‘Æ%ÿÔ¶·þ¥`Ï.¯çSõÀ ½¿bù©ß÷%ÿîÙ_5Ä_óÿsû€Â·Ùÿ·¿Cïjù£ñCâ¯ü•‰ö?xÃÿRF¿AÁ¹á?ì‡þš�Ù†?á_‘ÁWIA@ë[_•�Á@P@HPYˆUPI$€$’xI<@$ÛI&Ûi$•ÛoD’[·ÑÿÚúWýôÿü ¶ÿã•ÒŸüü‡þó:þ¡Žÿ ,_þVÿäû_Jÿ žŸÿ�¶ßür�iOþ~Cÿ�ù‡Ô1ßô‹ÿÂjßü€ké_ôÓÿð6ÛÿŽQí)ÿÏÈàqÿ0ú†;þ€±øM[ÿ�í}+þ‚zþÛñÊ=¥?ùùü?æPÇÐ/ÿ «òý­¥ÐOOÿÀÛoþ9G´§ÿ?!ÿ�ÇüÃêïúÅÿá5oþ@ÃÔu]/cÿÄÎÃ8#›ÛlÜ~ôéÐzæ�kKþ~Cÿ�ù‹êïúÅÿá=oþ@ò/jÚYGΧ§ž0@¼ƒŒäö“®{dçƒÍK©Oþ~Cÿ�ù”ð8Û/öš±¬~÷û6ij,:–¢¶×;íá²½Ôd€Ÿùçuök8þ+y¥A‚ÀŽbÍXãŽH¢�"Š5 ‘ƪˆŠ8 ˆ *¨µy÷Œ~*x+ÀÓ-¦»ªíD”i–0I{|±?Ý’dŒ­•‡ÌŸjš•~h–A_Ë~;}2¾�ÿG\u,“Ä^1’âšô(âáÂ<=—b³î!§ƒÄkKŽÃá"°yM°ýîføì\eÞà©â`›_cÜÄÜSMâ2¼úœe(ÑÚéq÷—Mñ‰4mjן—f¥¦XËž|½„1ùª|WŽÄÆU°<Æ8¼#׉©G‡r‰bcoŠ9wqO�a5÷}že–`jßÞö|�Iû3Ȱ´Z§‰â^Ã×_Å£ ™¾`¨Ëù^3(É󺾚ó`ñ¸š}9ù“н£x«LÖn§ÓU/´ÍjÒqu¡ë6réÚœvå‘>×IºÛTÓ„®¶íªè×:Ž”.·Z}·íQË wdÜS–g8ªùlaŽË3œ%%ˆÅdyή_™ÓÃÊQ‡ÖèB§64ËÕYƃÍr|Nc•¬W6ë¿Z§VŒ9³�—Q¥ŒrÃcrêõ*ž]ˆ†/:ÉJ_W«(Z¶ áU`s8Ls¡jÿVö…In]Z[^Àö×p¤ðÈ0É ÈÏfR0ÑȇæŽT+$l£+GÑž9€ ·:F�eq,’ýªìi·s—dšâ I.DìïÂö;#å6qq.͇i _çc£Š( �!‚(áŠ1¶8¢EŽ4Qü(ˆ¨öP!Ÿ:üiý¬>ü¹‹Lø�âõ�ÄS—1x[C´Ÿ[ñ¶•á¹»²³-2 Âÿ£KªÜX¥ÖsleUv_Ò8+Ân9ãúsÅpöNå—Sœ©Ë5ÇV§�Ë�XµÓ¥^³RÅT¦ßïc„§]ÒÚ§#qM]#Ƽ1ÿ$ý–|I«[i3ø›Ä>7N‘E©xŸÃ7–šJË#mD¹½ÓäÔÖÉ ¾êõ-ì¡S¾âæ(Õ�~Ï4ú6x©–á*bá–eÙ§²‹œðÙ^gF¶-Â*òtèb#…uä–Ô¨J¥y¿v�)ɤÎd}Ùmsm{moygqÝ¥Ü\ÚÝ[Kö×6ÓÆ²ÁqoÀ š¨&ç•Û”R]ÝÖ„Ëá~‡ÌÞÕtБæòŠÞ¿–{Ï<û€+ÖXzßóêqË*�m‘íúV¯¦_ôë~6ÿ=óØqøðs×4þ¯_þ}OÿdûH2:‘¬i˜éÖý?ç þ”þ­ˆÿŸSûƒÚCù�¿Ûgüÿ[ÿßb�«b?çÔþàö�þe÷‡öÆ™ÿ?Öÿ÷Ø£êØ�ùõ?¸=¤?™}áý±¦Ïõ¿ýö(ú¶#þ}Oîiæ_xliŸóýoÿ}Š>­ˆÿŸSûƒÚCù—ÞÛgüÿ[ÿßb�«b?çÔþàö�þe÷‡öÆ™ÿ?Öÿ÷Ø£êØ�ùõ?¸=¤?™}áý±¥Ž~Ýoÿ}çô'ð£ê¸�ùõ?¸=¤?™}çš|KøŸá?xGÄ>*ñN¿¦xcÁ¾Òîõ¯ø£\º�NÒô½&Â3=ÕÍÅÍÁA‰óýäÌVc‘äUo[+ʱXœU 4hξ.½HÒÃa¨ÅÔ©:³|±IF÷–º%¢ø›IiËŠÅR¥J¥IÎ4èÓ‹�Z³|±Œ#«m»Ywï²½ÏóÒÿ‚�þÖV¿¶oíYã?‹Z 7¶¾Ó¬4¯ü4·Ôà6Ú€ðO†�Ü–÷×°<²[�[Ôõß?’M>-b;•ç¶ši·¸†¥Âü=…Ë«8Ë9ÔÅãÝ9sCëXŽU(BV\Ñ£F�Ú©ºnkÝ’KðŒÿ3Y¶eWÕ¨Qéi/cNö”•Ýœç)ÎÝù^©Ÿ /úcÔv-žÜ’1Áàóƒšû$¶õï÷_ð¾—û¿UàOÐq’;õùG¡œV·íý—¯ù§ý^¿ÕÇ.8ïÜôà}olœq•7ý_Ö¤¯ëþ¿Ö×éÏPqÁsž¼öSž¸ÇBGý]­‡çý_×q¤Ž:ã×òíÀ϶FR úí÷ýߘ™ã©ëúõôëþqÍÔðàÿ�€�|t8çÓðÿ&˜¬ºsüúqÇÔŽŸ—=Áÿ^ŸÖ͆Gáþ#Œð1õü©\_×õÜLûŸË¿^3žüÓ¸_×ê.xöãžýóÇ·…Jε(Ê÷†' V‹«d§'(Jœ:¾,~Ê?>}§SÒ¡oøZ-òSG¶“ûFÆ‹jÚ*´÷0*(f{«)/¬Ò5ó.'¶,"¡p7Ž\#ÅÎŽ UpîuS– ˜U�Õ15—.1q§F¤¥&”hb#†ÄÎO–•*Ê.gõçx½Ã\Mì°˜º‹"ͧË„ÆÕ�Õ±I,9¨R¨äÚQ£^8zò“å¥Nª‹›ùz¿i?W ( €&šÞâßÊûDAç—yÑ<^u¼¹òç‹z¯™ ›[d©”|¬phº{z|À†€ ( € ?ÏøÐK–žÎ?ÏZ‰|¾×�Ñö†‘wÿÛû3(b7k¿°ºÔ|ß> ``žzõê9?�aª8ý ür…ÿæAô½_øø¾ÿßúGÙW�þ‘¾»ÌÛÀoü—‡x ~þù_Åò3x‹þú¿þœ.+ôü‡þDy7ýвïýC¢|Îeÿ#ý†â¿ôýC ½Sˆ(éoÙà…·í ñóÁ õI¦·ðåÌ÷šßŠæ¶�År|9 ZI©jvÒ©ß Î¬ÑA£Ár�šÎMAo68·*|¼çòܺ¾& :©F�Õ×µ¨ÔbÚê ››OâQåêmBŸµ«=µrôZ¿¿o™úÁÿ"øõðÇá‡Á”ý“~Á¢ZêÚ²hvšö…áØ­âÓ| á þ×Y†Æçì§Ë·×µ½CO°Qa&ûÃ¥>£¨êf¾Ó¤¾ùËñX¬wöÆ-ÍÂÑÓ©Q·™Ö¡©_ÝJDvövvó\Lä$q³*g8SŒ§RQ„ œ¥9ÉF1ŠÝÊRi$º¶ì†“m$›oD’»~ˆÖñ§Ã¿ˆ õ ]#â'�|cà-VúÉ5+-3ÆžÖ¼-¨^iÒÉ,1ê¶Zå��ÍÅ”“C4Iuoɱ¬…£`:´«'*UiÕŠvr§8Í'½›‹i=V›ƒ‹Ž’Mz¦¿3Ž«PƹáýkÃW°iÚþ™y¤_\èþñ·Ð´K¢ø³@ÓYE(Î3MÂJIJpmj¹©ÉÂqõŒã(¾Í46šßMù5u÷§s˜��øGõ¯ìøJ³/?áþØÿ„ûgÉo°m}‹ûGû3Ïû¿lûúW“÷¼ŸŸ¥.hórs.~^n[ëË{s[µô¿qÙÚý/kù˜ôÄihÚ6¯â-_Jðÿ‡ô­K]×µÝJÇFÑ4MÆëSÕõ�_SºŠËMÒ´­6Ê)ïu KP½žKHfº»ºš+{x¤–DB¥(Â2œä£§)JMF1ŒUܤݒI&ÛnÉjÆ“nËVôInÙ>©áíoE±ð楪é—V.ѧñ†n®#Ùµ¢[x‡^ð�ƧbÙ>m¬^$ðLj4g“Œ_i7‘c÷y*3ŒœÔZnœ”&—Ù“„f“óäœ%é$jÞjëÍ]¯Í5ò1ª„}-ðUü¿„µ›Žß ¾�ûëö‡ø@¤~ ã5ùÞnù|nú3>Þ ñßþ¸ïôøU<`_õKðÏþ¼ž <×G/qåÆ�_ê@'sŒí“ü=°½ð²r²¿õý~'òåekÞúz_þÝ>l�N„ÛÛ×EG›)ÁÛ¸sì;°z†#$ìA¤­ýHáwnÿÓÿ?ó9ÂÙ$’Xç%‰É$ä�O?‰êzÕÜ?§ø rÌÄ rÅŽ€£$ž€¤ñÔÝëïÔî4Ý6-&1yz¡®Ø 'Ê<ýÜÿËB>óŽ#I'D¹u–ýo"^¾Ÿ�®»QÜÉ=¥ô²›Œ('6ä*ó‘õëžH9õi‰«;_úý¦UŠh5 �ï'¤3¶:n9Ãp'0bféèôìÁèÿÏúÖç)}c6Ÿ1ŠQ¹O1È>ë¦x ã‚Þ^«î1™i§©kR‡ò ñ�lò}`sƒô©éý}ÿÖ‚äõÿÇni‹úûÿà ;rHÇ×ü•öûÿàÿ_Ò§Óé×ùz`z~G•ÇýKø qÛ>§×ÛÓëÛµ þ­ý^�ëþOoóýsÔò œwÏ·ãÿëõ˜Z€<};㯧ýq�Jú]CßüŸoäqéÜPÖŸ1{�sÁ<�§ùöÁê)�»wü=xôÏ=þ‚‹‡õýH^ Àï€yöïôïÈÇ¡ ?¯ëó=»ÁÞð¯Ä �C?ÙtŸ¶ÞC åìŸ`ñÅ�’K�ih.$û>ŸªéöøŠ¢G:Dn. ‹,÷gá C„¡K …ÃR§C‡¡N4¨Ñ¡J éR§Â�8¥Â)$’KB¿‡åÇCüûzý1ÑÔÛúÿ†þ¿àÿI_ðQoÛÏÆ_²ÿíQáÛ†ße‹¿øwà?À}SÃ?¼mðu|añ§Ãz¦§ðÃDš GGñ.«âÑmîô5�á<¾¸[uÈ—¤i?ž|?àŒ'pÆ"yŽwÄÐÀb3¼îž'$Áæï “â)SÌ«)S«‡¥AV”+Úõ퉋œµN6Výˆ³ÚÙfkN8lVñð8RÇVÁªØÚr– JgQÁ:{S½7Ê»ê|ÄŸ¼w©ÿÁ~-ø’ûÅÞ ›]ø¡ÿOÔOÄ]TjwQ^xÔkÿ³ç†¼W­Gâ9a’3ªÁªø–ÂÇ\¾‚èIÆ£ims$m$1‘ôŸÙø~3åXxah*o†Tÿ³é{(¸`ý†}ˆÂÑxtÓöR¥‡œèBQ³�9Ê)ÚLó>±^|‹©*ÕLWËëæw­í2úufª[ãR©6žŽI>‡Õ_³÷Äÿ†_þÿÁ¼ßþ1]éºoÃßøçþ ³¬ë%SHðõî·ñ‚øgĺ�ÄŠÑXØxkÅZ¶‰¯ÝêslƒLƒM}Bya†ÙæO™ÏrÜË6̼{˲ˆÔ©�Ä`¸Ñ£KZµáC)xŒNœV³ž# JµSW•ITTâ›’OÕÀbp¸Ã×Äq5JÙ-<·+¡€ÄÒÅpÕl# ,N'QЧO °•+Ó©oß9FôUZ�2|¯2Éó¬Vo›T§O+Œ1ÒÅbªb)N–g ôêªtéET”±¯Q´iÊ?bÏßqŒ¾6ý§¼M«ZÁà›z‘©j:_†¼CñGö¸¿Õ4]Bäi·òèßµÑQˆgRk„8n”¡N¦+6”é©>Y8b¥ÉÍüÜŠr³wjí­Ï¾¾x£Ã¾ý¿¿à…­7Ãú2ÿÁ;~érjš½ÜV6ê"ø}ñÇÃÚ%¬×S²Cšž·ªiÚe¯˜Ê¯wy{†ì×ÃcðÕñ| ãe 5•ë>?ÍjªT ç7N†?%¯ZJ1»j�U*JÉÚ“=ì=Ztsþ©Vq§õ{ )µ©T¡Ž§ÛÛšsŒVÚ´|oû&x?Dzÿíáñ+ö.ý¬<;wàþÜ~ ñÁ/蚆©¢jpÛÿÂѽ֢ø1ñÌé7ZÆ�ý³eãH`±ðåÜ×ך(ñ æ¢Âܪ‰~·Šqx$àŒ»Œ8_ v7‚ñ˜Lç ZëÓrþÌ…›à'ícJ§±ž Êxˆ¨Ê¾¯ ~õÛ^FUF¾YžârlÖ›ÃÑÏ(ÖÁV„§ %õ§5‚Ä.YN<ê²J“mJÒRÐðÿø)½Õ—Á+Ùçþ ïá�FËQÓ?d/‡ßkø©©iž{Øx‡ö‘øÂ-(õKojë%º{^Fy̳î<ÄÓ�:œY�åË)Ô²©‡áì§Ÿ–Óœ"ÜiÖ­(ׯ]Eµ6éOšI©𯅼Qy}e¦EsGSñEümaa`÷¤v·–VW¯¯ƒñ#(γl¿*ál>+ˆÖ"¥óà G†Ë²l*Q“¯‹Äâpф긷ìðÔÚ©:Š4œ¡9Å•¸g�Áâ1yµJYo³�û6´éUÄcj¶×³£J•W%×½VK–1nIJ1gØ_eÏŒŸ·wìUÿóñwì¯áÝ7â¢üø[ã‚ß4›xGFÕþx¢ÛÇ7:Ž›uâûëZ4Úf…«élÕ Öó=„\ÞßIimug5ÏÉeœK”pGñö‰«ÔËq™á3Œ¢¬ð˜ªÔ³,4°Q§RIáèÖU+Ò©ÉIÑÒr«')Ê3QõñY^3=Éx~®WN8¥ƒÂÖÁã!´¡<5U]Ê.´jN›�9ÇšjzÅE)IÅ5¸¾3Ãñ—ÂßðSË?|ŸöñLj¼AÿÓðGÂïü*øÁâíg@ð¯í!à{�&Þ×Å ~x—Aƒkx÷Å‹¦[j~ ººÕ4=2[->úî÷Q:rÝÚÜüfPòŒW†óÇfñÏpXz"ãs<6g”áiWÅpö65e,6g™a«ËLÚJž21§Z¢�HFý£„£îc2—*7—שS†èajáq•§N–cAÁ*¸\5Zkøõ¹T¨·:pj2r—-Óùwö�øAáÙéÿà�>-×´ÿ‰?²2/íQ¥kzïìMñ7ãÚüaðoÂï èþ:ðæ¥«ümðUÅã�WÂz»<7�k²ø‘çºÔà– ±§ß^j?Mù®/?^ ahÔËø«þ1Š´hq–[‘¼§™âk`qèäØÅì±XŠ”%F8t£š’ýä!OḚ̂”²ÿõv¬ã‰ÊáVžK‰ÇýnŽ”+Ó”ñÔ[÷©S›OŸÚÝËFŸ»'/rÒ¾x·àGüsö±ñÄ«� á,ÿ¶·Â¯ÚãAýˆ~4ëþ&ðì^ˆþ;ŸÃ·Þñ¦›â-Jôøy®,/gÑtûËØ­.ï¯õû]/N†òmB8¤ñjæ\óÂþÃåÑ­šÇƒ³>¯Æy= 6!âV]�Ž"ìL<éÃÛòέRsŒ!Buj8F›kºj¸+Íêb\0�:ÂæÔòLmJ´ý—Öqœ¨V�HÉû;ŸEÉ')TQŠnGÍ¿g_�°ìçÿñWí£imðÃÁŸ?f¿|økðÃÄ^/ðücøãâ{Ë!àx_ú¿«K¬AðêYnu+Ÿ˜ôÝ?_½Ô-.–?V’ÛèsΠɸëˆ8 Áó–eŒÊ8‹ �f9– ^�<£%ÃB]ÂbqèRT¥˜%qÃs5Rt!NQn¥%/7—cr »ˆ*çQXZ8̶¶ …©ZœåŒÆÕ”}…jTéÔ“šÃÝÉÕ²å�II4£;|ýÿ:ñW‰4ßÿÁ,ítýwV±·ðßü£ö{ñO‡âµ¾¹·�Eñ-Ýö¿λ¦,R/صiãðö†’_Á²á†‘§ƒ'ú,E}ï ðØj˜¿%R…)Ëâ}†®åÉÖÃBhTº|ô¢ñíxþú¦žû88š­XÑáu“Š§Ã¹}Zj2k’£•KÔ�¾¿gOÞZû‹]õ?íÁãÉÿìø7qÿ 6¸²xwâÏìO¢è².§uöV�¯i? µoGÓöH¢ÛMÖ¯|MâõM>¶·í®jÂî)Rúådù® Áá?âçú½ZùWV¬�8¿kZ…\Ò� ³º|ÕiC ‡�*�ß§ì)r´ázyåz¿ëî ûZ—†3$§ I§T†U#t„�ZŽqZKžwOšWú{º·Ã¯ˆòÁY¿e­#à·‡þ>|eÔÿoï|Rÿ†Ÿã·ð[ø½ðâËÅ—:a_ øŸÃ·:d¾(¸ðŠ-/üI}àë»ÿ±J5¤ÔÚÔ…‚ÏóXºy†xYÄÕsŠùQG�09göìrŠ9å§1–5/ˆÃb#Ua£ŽÃJxbátèºiû>{z”e‡Ä>,Êყ˜c'Ÿ×Å}Aã'€©‹Ã*®§V›ƒªðõTªJ‹—/¿Ínn[ñ> Ö5_†Ÿ¿à”_³ˆ~|+ýœï4ÏÛwá÷ÅoüÓiüøÕð¯F¿ñ†—¦jZ_�ìüAáÛ�'áÿ†|}y¬i¾+Ñtk/ˆZ�ÅÝæ›<’ø{N½·ÖRË®…*YŽ_â‡aóÜψ#Sƒqù]|Ú§`ò,Ÿ3­ %Z”ê`¥C¸üNªakVžœa ‘QÄT„¨¹ãRsÃb8W,©€ÂeÎ9ÞOƶ?…„ªÆ2…xԦᇧ^S�XB8‰¶âÛ§)ÛðÃþ !¯k~"ý¼l‹Í{VÔu›«?Úsã–…iq©ÝÜ^Ím¢xsâW‰4I·’wv‹NÑtm>ÇKÓ,Ьv–öÐ"C¨ý«€hÑÃðGÂ…*tc>ÉkÎ4ã)VÄeØzõêÉE+Ô­Zs©RoYÎr”›mŸÄ5'S=ÎIÊmfxÚiÉóZ±5aN úòÂŒb–‘I%±ú+ûè·MÏì°·ÿ²F¹ðkö±ð%ÏÄ}NÏâïì1ñKÂÞñÌ>½ºS�ñTð·Ä;ý"qáÏÛ[[¢êž Öô¨êòñ/a¼›M×.ôÏÏøâ¿G‰¹8ªŽoÂØèåô§•q®Y‰Æàž6jUp4±9}:±úÆR“öXÊ5eË88*”cSè²*yëÊù²™àóZ8âò1µ·–ËO»ðeõ–©{dÉfáàÎ-á~μJyüÞ[SÇ�'Š%Ó¾ëŠx‹!ãlgäÜ"êcóœeY•J´2üfý^ËpŸ×%Œ«Z…ª5Ëo få**2„j,2©àeYna‘QÎñ¹Ï&ˆÊñxe˜š5´q5Òö*ŒaR§¶½Ü½¶–Sºn>Ó–�íû4|ÿ‚ƒ|-ý�ümûé–?þ|.ý•~|ñGƒ<;㟠xmþ|rð¼ú„_æñg‡üEâçD—ÄŽšF¢¾4h%ŸÄvZ:�ÝËZ¦‰s¨_ñEÀyŸàøÊ¤òÜÏ3â|Ï7Ãbñ,V!gy.&0x…¯‡¡Z5–:´Þ™,<ëºq�3­k1ËqüA…Èk䱎' …Êð¸:´)×¥Oê8êN_XuiÔ©SÜ—¶µêF NVärûJOŒÖ?jßø(¹ð³â%—о!üÿ‚&ø÷ÀŸ¾2xR˜Çâ_�ÿ 4�ëþ4мOnës©_é7+¡i°ëðÜ4ÐßèLW,Ö)%|rÊqxc�(æy|ð¹~qã—åÚq¾"̪×ö:øi'p«Z£¡(ò¸W»�ï=—‹§<×?žªâ0\^†#BO÷™†ý¥hUZÊQ~Î*¢wR§dýÓóþ ‘á|oý•ਟ>Cо6üYøoðRð�¤Ö4½?_ñ’ø;âoˆu\é²ë—ö×-¥ZêWòÏx…^úßsn˜Wé#âðÙ/økžcÛÂäù^cžÓÇcU³¡ƒx¼·G ŠŒ*J>ÖTç(Áé YY5ÃTjãr¾'ÀaÒ«�Åá°ÃÑsŠ©[ØâjJ«‹œ£à¥&åö•õgÀ²ç€>§í‘ð{á�í7öü=³øÙ¢ø?âõ¾©¨Åi§iÐiÞ":Vµ¦kzÍ�×Ù¬´s©Ûÿfëz¼Ëmc§Iw~—±ÁÚîø—˜K„sldžù±9„òjؼ¥Ò¦çR¤ªaý­”hÊ<Ó­ì¥í(Òpr�NX89>SÀË(aÖq„Ãfv¥†Ž6qŠrQŒTjrN5'hÃ�rÎjVŒo+¥©ý*kÿ>'|zñgÆ?…ðRŸƒ? ¾~Ÿ5ÛŸþÌ´�ƒuÿ…_ ¥çÁïøYž÷ž"øJ©ö/øïBñÚõ;™c³‡W—ât6¯©¤(ê‚÷ìÖ–ð-Î ±ÅÈÝC6ï�èÑ|gâ•ogVYÖWFUS›¤²×/fä×ÁÍ9>]›wiôôséÏû…!Í.U�ÅÍFöJYKšÛsZ)_uoSØ?à¦_¼swûv~Ä^#»ñoˆ'×´�Ùãö5×4½^MRí¯¬5�Räkúž«kpeó!¿Ô5««�Jöí}uu+I;¹'Ü ÆXxáhF…\ÿ‹¨Õ¤©Ç’tiEЧJQI' tcp‹Ò1VŠG_â+Ë=Éj:µá—äó„ÜŸ2œŸ´”“¿Å)·&÷rwlûsã Œ¿¾0ÿÁkÿd?ƒºÆ‹áïÚã��¾øƒáφî¼C¦x2ÿã/„¼–¿Äo‡:½ª]ézaÖ$Ó5 ýFëB¹ÔmÛÅVšÕý½ÚM¤E¯]Y|nS5•å>q^mF¶#†ò\wC0ÄGS £Œu)eù…z¡V§±U! q¯rXYQ§(µYÐŒý¼d~µŒãL£8SÌñØŒ L=7R4eŒ£C–xŒ5:’”#ÏË)IÓr^ÕT’w‡´kä=gáç�¿cÿø'Ÿ³§íWuc¡üaø³û^ü&ñÿÀÏ€×~(мEã†Z†ž$ñ§ÄÍ[GÒ¯õ8ü#¤ø®ÎK¯ÛÁö¸®o®u8®E’ íRAõtqø>,ñq Fu²œ¯…3LužG _„Ì«âúž]J­XRxº¸Y¨b%.GF›�;ä¤�xjùG<»5q†3›á+àp2« •°´é¿ßâgÊ^ÆbåM+ÞNIòûÒg®|]øáà߇ŸðqhñçÇ¿¤ | ñ#AðÜþ#¼wð÷‚WWýŸ,|;àýOý2cc èÚŽuÝÄú•ìf´±¸Šÿ^º+(¹�¼¬«&ÅãüúŽG‡¾cŽË«â% <Äc=–}�é‡õý_ 'ÿƒþ>ŸOJ@Áþxç·\ýIhþ¿¯é‡@Ïÿ\L{óÇò=·üϹÿ9÷=ÙÈÇáÆ8èWõýkþCþ¿à[úÿ5§'ßœvžïÆAåÿ_×õù úùùÿÃÿÀµ¥ÕÄw3[ZÜÏ œi5ä°Á$±ÚÄÒ–[‰#B�FÒº ’RŠÎÊ»‹0ïµÝ·òôóþ¾béëïüº~Уñ ôÖ—ÿ‡ü5­y>§âK»»k4�'·€ÅiÖž£{vßh%–Ÿawu$O*DËÓnËfõ²Q×ó²^¬-¯Eëÿ?ÈéõáΗar¶þ6Ö#äžø³Â\}ÄY ¸�(ȱÙb²ê0ÃTÆCë™n3K0Ë¡Œ�<$³ ¶¶&ž; õ(ÆUh% F«§Š£üüÿÖÿk/ú>á_ãþw•øüBN&ÿ œ›ÿ ±üÀ¬ñRèGâwþ#ü;ÿÑpÖÿk/ú>á_ãþw”Ä$âoú É¿ð«ÿÌÿ ðþ„~'â?ÿýü9oö²ÿ¡£àwþþ1ÿçyGüBN&ÿ œ›ÿ ±üÀñRèGâwþ#ü;ÿÑpÖÿk/ú>á_ãþw”Ä$âoú É¿ð«ÿÌÿ ðþ„~'â?ÿýü9oö²ÿ¡£àwþþ1ÿçyGüBN&ÿ œ›ÿ ±üÀñRèGâwþ#ü;ÿÑq›yÿaý¬6ï|ã°ñwŒä?á^ãžzÕGÂ^&_ó“ÿáV+ÿ˜L*~ÑÏç¶GâoÏ áîÞ\\pÇü×ö§· ¿Äß°~_x»ß¹ðÎpÏB+XøUđߔáN+ÿ˜O/ûC¼ «ðä¾$ëß!Èü8¬þƒÿà–¿<_û=~ËQ|2ñÅÖƒyâ 3â'Œu ‹� ÞÞ_éM¬4«ËaÍþ�¥\´©…™^Í$#ȸcú?dø¬‹+¥—c%FuéÔ­RRÃÎs¥ËVnq´§Nœ®“×ÜV{]j›HŸ8ÅÏ3N5ኮ)ÆåÙF•,ç†Âã£W/ÁSÃWu(á1˜ê*©*n8™9A§(ÆWGè§ÿ¾ÿ°Äÿú�ë•Ÿª? íëú2Æ­ztÝ+SÔB †Ÿ{z#'Ckm$á  1�i>õókŸË…87‹x¦#ŠŸ pÎ}ŸÃ 6ãD²l«˜Æ„¤œZ�g†TÛM4¤Úiêveøe�Çà°nN ‹ÃaœÖ® ½hRrK¼yïò?—¿ø+ÏÅ_Ž¿ ÿaÚã×Á?ŒÇŸŠß ô»oˆ–þ+°ðσ¼_6·®§ž¡á›Ý;Ç:'ˆ4{}?V]R9úßN7öFÆìäŽ'™þQþ‹RÈüqúYpÎ Ç…x£CÅŒÿ6ÃñÎ3¼û+®³lΆ#2ŽyK�æv6UpSÂK†ÀÔtÜë’hÖº'Š4Ø!)gX\ǨࣘTÌ2¼ML¯…XŠ3§Vºœð~/繊â|J¸› Åø,nW‰Çb«PÃ`![&­AÒöj½l²ØySÄÊ£¥U£ÑŸ,´‹^ÓúàýšµëÝWÀ×Zuä�2è´–6Nç,–3ÛÁw¾OÌDIp#ÉÂBÑĸHÔõöLx�ÄgôuÎ8c>ÅUÇSðÛ�q\=Ãøšóu*QáÜÃ+Ëóœ&Vç&ç*yv;™C Í'8¸\ Zp�ãþ5eXlÐÆa¡o6ËáŠÅF*ÊXªUªáçZËDêÓ…;|U#:’¼¦Û÷ ïù hŸõÖÿÿHd¯õ üuî¾a¢ÿǽßý†5¯ý:]P ¯«9눓Wñý½µÃ3[øGÃöºä6…ßÉ›VñEî­¥Øê2D#Ï¤ØøwX¶´,åcþܹ�ÄfKi¡ø|E(fü{‡Ãb$å‡áƒ �ÑÂ9ÏØÕÍxŸ›ex,Æ¥% ×Êp<=œa°ŽS”aý·‰¨é:°ÃV£ôôg,¿…kV¤’­Ÿæµ²Ú•Ôcí)à2L6‰ÁÂwæ�,~+7ËëWJ)Ëû2ŒENU©ÔùNëþ 'û0Øb;ÿkÝhšÅî…sme¢Ÿ¥Î§ià-câJA¥ê~º×4MU/ºÖ|?s5Ž¡á¿Yéž$ÑÚúÙµ­GÖì`ŽÓóßp«’Ljájy—b0üEƒÄÓ“…G„ÃU§ý·–ªžÎ¢ž;É~½–VŒ©Õ¤¥^†2’Ž/„ÄPúάñ“Éåïàø‚�l£FKš ½jsþÍÆrsÁªÙneõ\m&§NmR©‡›t1Š5~‡¯·>dæ`ÿ�m#þ×ßú¯Oü…Ûü_«.x“Wðö½¯4Fq¢hº¦®`a¦ØÏxb��C°F3ÔWf[„y†c€À)û7�ÆápŠoU‰¯N�>Ïáç¾Ïm†,ÞøUñKö™ÕüñJÿ]ЖÞÞÿPñÄ댷÷Ö u ¼¸¸‡Á>µñŽ®lR)LzyÒü-&‰k ·Ø…íœn ÿT3~,áo p|?ÂÔ0÷R¦–ðþUƒÃGC©GØÓ§<ó5«—ä4«ÊPæÄ,VkmIÔöî…iÖ‹©�¯ú�D~ ýžtŸ„|]¦Oã�ˆÖ‚|?àÿ ø¯\ŽßÀþºñÏŠæÔ¦‰|?á+ÍKÄZœ7†t}s_:Ž¿­éñ‹«.ÚÿÂâ-P¢yO<ñÆ<-“â¡‘ðö ³ ã2Êp2©žfÔ²,¦hIæµz8l» ø¸éº÷4²[hZ¾�o©C¤«;3˜,5©Il Û µäV‘*Am/òŸÒŸ‡ðWåÙ® ”(Oˆr…‰Ì)ÓŠŒjãðxš˜iâÚŠKŸ‡ú´j´¯:”eVmά›¨ì~Žê?òÐ?ëúïÿM…1•Û×ôg/ñUÚ?†þ6‘1½<9©ºddn[v+‘‘‘�228î+JNÕiµºœùI?‚^Œüâðç‰5˜Ö<-™AÿS!'Ó?½8ù�$ôÈÈÁ5ôKS´>çþסå¸/?éjzî›â­uW Yœ?ñí'¡è<ðIèuÛÒ¯ëUžïÜÿÌ\‹ÏO?ø÷þ?ñU¦£¡ÙÛé yo¨Í{Ýíµ kM5`·ß ê ÷dk<§lF=»ž7RKã–Ö&£Rw¦šµ“Nî樂y�œRR|ÍÝ«Z6]tëÓúOhx·Ä'€¶98ÿ—i=O8ûFOL`Ôr9Äýj¯÷~ïø%r.ïðÿ ÿ„·Ä=ÖÄp?åÚL÷Ïü·ÿ8Áæ�­UþïÝÿ|‹Ïúù <[âîXãÞÞN0yÏïǧO|ö£ëU»÷ÁEçý|…ÿ„»_þí�N1ný~†|ÿž©õª¿Ýû¿à‹‘w‡ù§ŠõÒVÏœà‹y?øùã‘úçž(úÕ_îýÏüÇȼÿ¯‘r?kl+iÿ~¯ôÛ�oרúÕ^ÑûŸù‹‘w‡ùëZ«ýå·ÔDÝN{ù„uÇo­Z«Ú?sÿ1ò/3ø]ÿ‚˜þÕÿ´wÆÚã�Â߈?õMwáwÿ�ÿ¼!á/†úD¶Ú†t­'Á¾9Öô}ë:‹c¥ÛxƒY°´³…S]ñÖuXç3ˆ5�ŒcûWÃþÉ2ÞÈó\_BŽc’e˜ÌV6\õ±R­ŒÀЭ_’¥iNT)Nsw£‡öT­kÁµsðÞ"ͱø¼Çƒ­^«Ãaqت4hÙBŠ…ó…6ãNʤ’Š´êsTßT´?8t½ûVIÒ]-Ln#hïµÝK™Ü¨lÃmªjs\)ÜFè#•‚¬U†èQƒ}¾m'éf×à|äêFº•Þ·�9Ïnî1iz=z–õ k:U¯Û/m£[C"Åöˆ/´ëؼ×ÞU ØÝÜŒ¸Võà ú\V©}鯛ù´æíz”tô’[_±Ÿi§jâf²±»»KP¦á­mf¸XBÊ­3DŒ"Y68S!¶°‚i¥-ìÚô�‡9Ehä¢Þ×i^ÛÙ=ÿà�24NñȯŠJ²2ít à†s¹xÎpÀäq�Cóü?¯Äk¥µ^_ð?«1¬}‰äwsמœóúã­.þŸÖŸðýGýyþƒ ï�Ô“Œñ϶r1�lñÇB_Ö¿äð?¯ë« àC“Üdg�ÁÇ'Ç¡ÇUÛúþ¿«ù×õòóqÛ>§×ÛÓëÛµ0þ­ý^�ëþOoóýsÔò œwÏ·ãÿëõ˜Z€<};㯧ýq�Jú]CßüŸoäqéÜPÖŸ1{�sÁ<�§ùöÁê)�»wü=xôÏ=þ‚‹‡õýH\�ä>ÝþŸ‡aÐÐ×õù‰œ{~‡¯�¼3׊qßëSïarnÄâö®iŠ„Ž$ÆMT­�¥F<�Z´1nƒæxgZ­UþØú2e^+ø‘ÅØ> ázÚ™R­žãó�m,»†2§.G‰Xø)V§Zj§—eiÖXºªq¥B•8WÄÐüèý¤ÿa¿�¿³ Ä×¾3ð×ö÷�üãŸÄo �[ÂÎÂìþDwþ¼“z"[ëÖ–Q\ÏæG¦]j) Ê?©¾ŽM�>’Ô(à¸?ˆÿ°¸ÙQU1žñ[¡•ñ<`åZyT}µLá)òÎrÄdx¬e\5gS2Âåó« Oû7Žü#ã>œê昮e<Ü´³ÌµO—JîÑX‰rF¶¤®’†2•R\Ê„ë(¹ðcYð?‡>0ü(ñÄÝ#þ†Úįë?´²%ÿöß�ô¿iw¾,Ò>Ã$�¥ïö–ƒýŸÙh’çÎòZDXYb#Rxzð£.ZÒ£V4¥{rÔ”$¡+ëkI§{h~g”¢ä¯$仫ê¾ãõJñçÀírøö¸øë'Ç «oˆÞ Ö|+ýŸãý'Ç ÚÆãáoŨ<3­5³üð�Ä?€ßn~'ÂŽ²»ø:|a¥jz4ž(Ö|qà  hÿgñ%KVX 7Õ“£Îô¥JµÕzq¿Ö*RÅVö?Yk윔¹#N¬ùänœ•IójÚÖñøegð©B<Üžíö»qVGŸütñ—ÀKo�?~|/‡à½‡‹5~ʾ2ÖÆ?jº†­sáÝöˆÒ>&KðçÄN–*ø3g®xឯ¨xzoíkº¸Ò$ñZ6¸jx§‰ÂÖ¯õ—MCN7把œ°’£í£){F¤¡ˆq�h©éN3J\œÊn“ŒyozmÚÎöçRåv·X]EÛv´½¸ïˆ¾꿲o‰¼á½_áž¡â›}ö*Ô.F¹ ß?âžð�ƽâV›à�oYŠ}Fݼ3â=Oáä:LJt;ëh¬ô]s[¸³°“K“[’ÛJT«G “�e,Å.]){õ0ò£*‘�“ç„jòÎI·(Å7ÍËu'fÒq½©o¾ŠjVo³qº]ó;�†~È+cð¶_‚oðÍ­eÿšîóZÿ…Ûÿ jO‰ß ?á¥_âM¬�ðºÅñºÞÆ=B<Þ›áÝ×…Äþ4þ׸¬ë}~õ½ŸÖ}µñ»(ý[Ø{ÿSö-éíÝO«7ËûÎj§j|¨qö~íùywß››š<üßÝ·?•­mn|Uñ_ľñ§Ã߆%Ñ|7à�xýuωñw‡¼ aw¤X¯„t�øBõ‡Zž§§Ow{Ú´­¯x¿C}{Î:޹aáÛ uǽÕí®µ]GÑ¡ ´êÖ„§R¥.Z3§:­IûI{EZ)¤­ËN\¶´\Ú�¢ÔVRiÆ-$¥y&–ŠË—•úêÕúÛ]u?WQ@P¿ºsè¥g?ëïcG×Z<‡þÓöc‘ÿ /ì*£Ç?þÔÜñÉx�Æ)Êxãÿb¥ÆŸ÷zø¹ùŸkW_¤W‡ö6ð'ÿYîéýŸÎ(ÿ‘›Ä_öÕÿôáq_«d?ò#É¿ìU—êå³/ùãÿì7ÿ§êÉû3~Ï~&ý¥þ*é_<=pº]©·›YñGˆe�®`ðï†lf¶†ÿRkux¾Õtó]ÚØi¶fhëQ¼µŠYí­Ì×0éšfT²¼$ñ5W;º…*iÙÕ«$Üa}l¬œ¥+;F-¤Ý“ç£JU¦ ´êßd·’^lþ—~þÃß²ïÃm×D´ø=à¿Ï¼qÞëß4 /ÆúÞ§p©¶kÉîøÃ]ðE–­c:ì¸Ón¬ôËŸ*ÆÂåK˜tìg�Ty’¶3ZCˆ³HÒtjեІŽ?[£N¼¡%´”¦¯).ާ=» áhßš*P}y$ãuÛÉzXõ-öPýš|7¦�/OøðÆê ˹¹ñ„tj×à�ÎÚž¹âkm_YÔ¤‘É’Yo¯®I¤v.Ä×%Lß4«.ycñIÞéS­:0�ø)Òp„RÙ(ÅYhZ¡F*Êœ>qRoÕÊíüÙø÷ÿ2ýžÿf„–:·ðúk_üQÖî–oøVº rÜèºï‡ÞY!»×äÓL­ƒÖÊtò¬f¶k}7Whn¬m4™n º¿²ûNÌs\dªSħˆÂSVúÕK*”êZêš�¯_™k$ï(]IÍ&£. e*0³�»7öÍw·ÙòèíµîÏÎÿÙÇ>øgûB|!ñ÷Œ¯'Óü-á_é¶½}ke>£=ž›¬.nc±µV¹»hQüú´Ò+³�§êñ´§[ ˆ¥M':”¥¦ÒNMh®ôWîô8鵯OdÓg×¾8üøWðãKø7ᯉºµßŒ ƒã&½á?ÚQ|­iúgÀÿ|JÔ¿gÛhG�tye¼ñä‘êø7ã� xƒÆV&“®h׿m¯¼1¡¼Þ¾Õ5þ ¸lMzÏ:1TÛÃÆ¦ÚżM:1Å?ÞÉ%KÝ«ˆ¥8Sr”d¨59{ê1Ò3Œcʤïï5;|N ßXŦ÷\Ú-.ýÛö¼ý›#ñˆu]C›Å·:LÞðn“â ~hVW_toŠ_ þü$ý²~&êzy�®‰¬xŸÂ |O{àM.ö{½EjN\ÒHU!mu\�Š§Ë¢qprwéÍi;­]ìöG†þÔ<5ñádµøË¬|iÖ¡øéâˆz6µ¨ü;Eáï‡Zdž­ôŸx=ØV¡Oo?—à="Kï‡ÞŽñ¬ü©ßYÞêržœt«º¯<~­ RŠ«í9êÆnS©¦�™?âJÕjZõRiRiÇ—™Éó¹'ËkFÖKåÛeÐ÷½gö½ø%׉õ¨¼Awâ�;Xñ�Ši÷wð�;Qµ“Å:øg£Ýiþ‚ëÂz¼áø�⠡≠²‹–8 M¡E F�8b«*ͼuO¬áªN»KTù)V’sjqöÞÆ ’ì·R»¶›nåþåšQûÜVš;s=OŸ¼#ûUéÖŸ´wì1ñÿÅú߉5?|¹øqwñïÅÖ–(|gâ¹|ûCxûÄ7W:‡Ÿe7Œµ¹>^ø+‡UÔïVïS·Ó Ñu+é>Ç-ÃuTÀÉá3<-8ÁC«,-6ÿwOÚa)A$¬ýœ~²ªO–*ÑmÊ+[ª.z3wn¼ï«´äþo’Êýz�-÷íibtŸ |0ñ�õŸ‰ ­ÿgïÚcÁÿÓPѵìÿˆŸ¼iã¿Ú3âÂß^Á«Ç¹{=Ÿ‹¼Gð‡ÄºGˆ5!­àÛɼHÖka-ïˆâÔe`]çZ£F³Å`êQ´•èáéÓÂR¯M8Þ):p¯ E{µ…ïhYûM¢Û”y&¥§Å&æâõ×w}Ö¾w±ûlþÑ¿þ3øvkO†ÖmoªüY¾ñ¿�t;Ÿ ø�MÖ>|.m+Z²³øCa{¨kíá hŸhÕ47áïÃ[ð/á /ÄGˆ´Këý[C¿Yv‡�ë7îÐTêITƒŽ&·4[Ä4¡í'+F_½­(Õýä¡(I(Ég /w¬®•�á}Ýì–«H¦´½Ö¨ù«àÒ³üý­UFIøWðìüHŸƒßÈrG~•ñùßüž¿£Gýœ:ÿ×âyô8?ù7>0Ù/Ã_úò80óM>õl¡Û¶geÃÉ×gp1€Ä`¨ Œ‘œW÷¶ ÙEnÿàv?—kk}ÿ¯ø?ÞkÄÄ®âI'$“ëÉ<÷>üúc¦=¨mý=Î)oý]®²Ìʈ 3*Œ’Äô'žç9íWýy“Ý�Λ¦Ã¤Ä/o@{¶Š¾Q |«“ƒ)ÉÜLjÆqÈ$ê—*»Ýìˆnú-¿à~E{‹©'�É!�Euûª¼ŽyÎzžN7}zþ@—Ýý~צ…‘ÿ‰u÷'±çvç’IÎyõ8ãžE5ð°{¯ë«þ¿àààúœvõëŸZ�ÿ¯ëúЦ¯ëüü¾ölE5¾£Øo¹'ýLÜVƆÇß\Œwòœe­t&N±þ·9-BÆk ÌR†+ŸÝ˃¶UõSÐ7MËÉSÔw0Õž¥«?ëúûÿ¥K9#ŽsÎ?ÏN=qÛŽè „+Ç.Ã8ôé€~™ç±Ç4 wåý_2ŽHôÿ=?úÜý*oý~%_×pÏLç?§õç#ÿ­Š/ý_py_×üsÐw9ý}ºzvæ�~¿Öâg>ü~½Oõÿ ý_€g¯â;àgçõç¹ëúþ¿ÿ€ëÓ�ÿW¿.~´\_ôÃ?ÐýéÏáéÏ4\aŒœ}?ý~ž‡ô~×õþaý_×ü 7l±÷ÿ=?RyéŠ/¨Ÿà>ÞîæÎæ Ë;‰í.í¥K‹k«Ye‚âÞx˜ß\Öÿ×õ÷_×õæþ9÷<öúz�Ï=qGõý]A‡ùÿóôhþ¿ÌëžNãÐ{zý:Ñq_Õ‰#MÇž{ÏéׯO¥¿úóþ·&šòia†Ù¦™í­¼Ï³Âò;Ešáæòc,R/5Ài6*ùŒ6H•¢›’ŒT¥ni$“—.‹™îùVŠ÷·AÝÙ&ô[-×Ét¿õr¯ÿ«>˜ÿëuü}iù•ÀŸðÏ·=}ýÿýÃU~ž~Ο´¯ÃŽ<¬üFоß_ø¿Cð~�ucfú—�4Í2í¼u¨^_K[izŠŸLñÃÀ³Ü4ºD-­ÌO4-ójµð¾×'Ú¬Ÿ4ZMz¹.7 —fXlv*„ñÂÊU¡F+š¼c/a)JMZ4êòÔoWx$“»G�øÿÇ^&øŸã¯üHñ¦¥&¯âÿx£^ñ�‰õII¨kþ$Õ.µ}Vì‚ͱf½»™Ò0Å"B#L*=Ì –à°yvš¥…Àáha0ԖС‡§T£çhA&÷“×s‚½z¸ªõ±5¥ÏZ½Z•ªIýª•dç7n—“zvô9þ?çëÛ׿Һ¯ú˜ÿ]ÿ¯Bi®f¸`÷Í;ª,jóÈò¿–ƒ›�˜…QòªôQ€8¤’Ž‘ŠŠÞÉ$®õoN¯ñm½]öÕþ—×OQ±Í,>`ŠY"Fa˜Fí–"ÊÆ)àcè;ã±ç¯¿Cúþ¿¯�_¯õ±fêîâòfžæin%}»¥žWšBB&é™›j* ÜÇ èQŠQŠQŠÚ1I%»ÙhµwÓ®¬»Õ¶ûêö]ß—äWÏùÏåôü¸§pîK5Ä÷?´M4þLKo›#¹†óåÃòÞ\1î;"RIm dåE(ß•%wyr¤¯'»vµÛîõ}FÛ{¶ì’Zô[%~‹·¨F›÷@TÎæé´.¸Ç<`qŒÕ/2¯ëúÔŠi÷ü‰òĸÀÉä“ïíé×¶ïý_Õƒóþ¿¯¸†9d…ÒX�ã’'Y#‘¤‘È�¹$GR]C+ ‘�A¤ìÓM&ši¦´ièÖº4úôíf�­ª¶�O>ž^‚É#Êï,²<²Êí$’ÈÌï#¹,ï#¶YÙØ³31,NI9&…d’VI+$´I-’Z%e¢í°^ïWv÷êß{ÿLfHôÿ=?úÜý(¿õø‡õýw&†â{g2[Ï4hËÃ#ÄÆ7!ñ¯ÄßÙƒãGÀÝ& 4ÜXx‡â^—¦Øi:¾£ý§aö5„–Nú�µyï¶2}šÒvÜ£N3áÜWá2l>½ Ëx“'Ϊ¼G´å©C.©RuiSöp›öÕ׳æQ…Óæ”IÉ3:9]lmZ´êTXœ³�ЧËxÔÄÆ1„åÍ(û‰§Ík˲gÆOq<�ÃÏ3Áo¼ÛÂò»Ån&mòù1–Ù‘Ài6*ïl3y¯¯J)¹(¥)[™Ù^VÚî×vZ+ísÆ»vZÙ^ɻ﫲ÔX®nmÖd·¹ž¸�¡�a–HÖh˜h¦Ê%‰� £åNH+‚i8ÆM9F-ÅÞ.I7Ý]höÕY®ãM«Ùµ}›Wîž¿‡ô Üzu'ßúû3Ï9ª$r+Hë)wc…U’O ýsíÏý·_ëúô;-6Æ"¾aV¼•Iã å ä…=�#–“�>Z´­ëÛúýwùÝúh¿¯êáªK{­ZAÞÝÍ›æ,t×SÍmn$‘žO²Àìb·2;;·•,¬Ç~X’sTé©N¤!RmsÊ1Š”ÚÛšI^M%e{éb¹¥e)8¯…6ÚWzÙ7e®ö^gr29ž‡éÜsïŸJ?¯ëúê0ÿ?áþ~ƒ­×ù€}sÁéÜzo_§Z./ëú°ªìŒ¬¬ÈÊÀ«)ÚêÀ‚0äÔrÇ>Ío£¾Á¯Mÿ¯?ëqòÏ,ò<×I<Ò¶é%™ÚY$¿Ò‹�úõùóõíëßéEÿQ]ÿ¯ArÇOê=ýo^Gj.ðã·¨éýòúÑqÿÀ ÜöõÆùôþ½ëúþ¾AýZÿ–¡ŸÇù¾Ÿäõ=¨ŸÌ3þsù}?.(¸wç#רÿŸlõýKÿH?¯ëúîêxãô?¨ÇÓÒ‹ÿ_×pïý^zj�LzcžOn¾ÞƒõÛúÿ†:¯ xNëÅw70ìø[B¶±Ž9ïux�JÐ-aŽI<´û#Oâÿ�³}ŽxGTµð—Í4?lûOˆµSWÒíz6›ù­m¯F‰NݾëÿókÄþ!x¦Å´�gÅš³èláÿáÓä�C𪺾ðñx_D‹NÐ!u$htÄ1¢,i„�µÇUæÞ_ø»üwÛë§m—Ü´¿Èá`w?çOþ¶‰éý}ûüÈ×Ëúò$SíÓÛ¿SôÇÓž8ã&Åÿ ¯àL½ý9Óß×úþ=í~Ÿ×Q=ÿ¯ëþ:Ÿ^ßþ¯§Ó¿«]-ýnÈ×õý~g/ãOùÛóÿ1N=Ù®ÿ_^=û׿-ÿÉ7�ÿ±ÞÿP3#íx þGŸûÖÿÔ¬æüì~¶P@PúÖ×ågpP@Pv¯ýΗo¥]¥†¥5¬ÑÙ^ß½±ñ´ã‰…j˜zÐÃÔTkÊœ£J¬£Ì©Í«FMk{?'mìígß•VÀá³, |Ï ,n_GJ¦3 ºrÄaã4êRŒÓ‹NQºø£‡š7æ^!ÿOÆú¬ð.ûÿ•ò_ÙHÕ’“¦ê5T’=ëàGüŠºÇý�WßúkѽkŸüwþþG�‡þõgªjñûáßû Oÿ¨þ¹\˯§ê�{zþŒ»g£c{§ÌXC}isg)C‡\ÂðHTö`®vžÇâq&E„âŽÏøg*�ÀñKšäXÙÑ—-há3| |¿*Rû5#G7N]$“:p˜™àñXl]$�L."Ž&š–±s¡R5`¤º®h«ùÎü#öPøëûA~Ë_ÿeo†:§Ã¯ x·â}½Ÿ…uüP‹ÅGðø)ï’ûSÔôðµµÕôšÕÃÙX "[›[­24’ño iãX×þS<;Ë×Зé[—c|yáž2«SÃ,Ã1Ì2z<)G/¤¸›éUÁä™ÖžÏ „Çð¶a„ÄWÄÊ®O¾Ï 9ÐÄÐÆP§ý›šVÿˆ�Á•aÃx¼Y½*t«Ë*¯ê‘ºž#R8u9ÓÆRœcÅÁÆó\Е9>ËöSø1qðgá†ôü8ýž¾üM¹´Ùñ/Ù›Àïà�†šÎ¥e¨C£]éVWÖV¾ ºeÐå²û\šã\\.­6¨m\ZK?�øÉÇqñŽs,nKÄþ(qG G°ñ[?\CŘ:8¬>XÜ6"¦½|ºšžf±ÂÓË£Ë «ˆŒÏ¥È²ç–eÔ©â0y>Èþ¸òl7Õ°Sp”Õ9ÅN1ªíG—�Õ½¦çÊùZ?iþø7Qð‡‚IÕà{]K]¿}ZK9T¤öv­öp\F@1Ü4pµÌ‘7ï! ËñËÿÑ÷ìÔðŠ|ú>J|s—â2n+ñ‰1kŠÈq°•Ã"Ê*å¹vW‘eù¦qSÂfup¸ ¹¶+ UýgÒŽG ˜a1xj_Êž,ñ&ˆxžÙuX×ÁeXHåðÄÓ|Ô±5ÕZµ±5hÍ;NŒgQP„×¹SØÊ­9N”á7ê÷ßòÑ?ë­ÿþ�É_èYù{Ý|ÃEÿ�{¿û k_útº _VsZäÉáÏ[xšä˜tM[I�úþ¡ÁM&âÆú{Ï êyŒ­¾”$Õuû-BúWh¬îot©'Ž;·Þ[|&wZ;ĸn%Ä·G%Írª|;Ÿf‹†U_�¯Œá¬ÃÝ7>Tªf¹ö �«9QÂb±ÙUJôéà~½ŒÃ}N[NYÆM[&¢•LË�žo•áuRÇRÄá©aóœ%¥z¸ç U‰Âa¡ÔÄQÃc¡JsÄýW[ÂtïÙƒÀ^6Þø1û5Ϧé·P^è7w ,´{ý Ûß|9Õ,¦D±µÕm®î­o~|)½·¸ÓäÐ-âŸá§€ZÎÊÎ? h §g^~-Q­(åÙ§ç8 ­}[˜á³ì£G Ô”>·G/Åf¸ÛãV¬ªb0ÒȰõ¥V~ˆ„Ú(ð-HEâð|K—â`­[ „­•ãðÕj¦¹½…LU #Kš1P¥Z9�Zj1SÄU”nú­áæ�à½7[ø{á˵ï�|KgâOéÞðþŸá�7JÒ®“KÓuýcPKYou›PÐt(¼; \kZ†©¨ÜËi¦iöEt=ïû/ÃÍ(çØÊ8žÍxŠ—ç\I�Ëjæx\]‡Éòîሢ³™ªPÄf8ü60Âa±ø›ûO˜cs ã¥A< 6Ä`}<L³ R�ಪ™]“áñ°ÁWÄâëf¼ïˆ�.‡<©apÕªá1°¸œÇêxl& —QµV±Xœ ,WÑ5úÙðg3ü{iö¾ÿÐõzä.ßâýY««é–ÚÖ“©è×��ž­§^é—ANÛ_ÛKk8SÙŒR¶c[á150X¼.2�•l&"†&“z¥R…HÕ…×UÍqŸÉ?ÅŸ†>ýžþ%k~ ׯ§£jú=ÍÊéZÕ›\ØE¯hS¼±XëšEÜ.¦m?TµºÅ35¼ßiÓ¯w–·0Gþ¸ð—d!ðÎ;À}WƒÆS¤ñx*Ê–"X |# ×Àã(Î-C…«³”©g‰¢åF­*’Íèu¿¾%ø/ÅžøaáO‡: >Òlt™¼_ã�&η´‹> ·Ó´5„0G�Lð¦�s¡Á³Çhš½ô âF˜‚xg;Ê3^(Íx“<Ï_ £"ÅÖ¨ªÖ� `*bs ¶5ês6ñ’ÄæØÊXé¸ÂU¥ƒ¡9'‡ÒßÓ?n¿àœ¿üMðƒà�æ£ã++�'ĵáâ�¢^C5µþ‘¡Å§[XhÖú•¬Û^ÛP¹ y©KÇÖö÷¶¶÷(—0Ë}#¸ß,ã8£‡É«ÓÅåü9€y_×hÎhbñÒÄÕ¯�©†« Ʀ“•4*FR…J”*Ô¥)Rœ%*ŽÇÝZ�ü„túþ»ÿÓF¡_Ï¥võýÌüS¾øÑOjCó�…]?âCüqüÑ3ø%èÏÎÏ Ø©Uã‚äüï;A'�¦ çW¸—õý|�?_×ï=wMÓƒ"| ‚9Á îŽ�pz�9]Y:–¯|'a©jZ6©t·&ëB’íìDW2Åoæ^@¶ó˜lwF€Eæ°ïÁÛ#«Ò“JQV´­}/³¾�¡. RŒ�ïÚϺ³¿s_û9qž¿×Ó¾3ƒŽy<ŒÔŒUÓ†~ïxÎz€1Û¦Iü@ìáÇËÔc° uÏ ÁäwÈÀÀÆÀi žŸ˜?\ó“Ç—°  ÓMNÊ2=zç¯ùãq�E‚̹�èW§·ëÏ·]ßãE‡büVxlm{wãéô$Jv�óÀý¶P¯í›û\/�ÚsãçàGÅ_Häg¡íÜŽõýûÁ±ÿŒC…?ì›ÈÿõW…þ»ŸÏ9Ûÿ…œÛþÆxý¿ì*¯õþzŸ1ç§L÷L{u8ÇçÛémn½O.÷¿˜â9 Žä1ƒÇá�QœçÚ�·ÛåÛúþµŸ‡õù—,µGL•§Óoï,&'[™í%;y{y#b³Ž~S’£4îÖͯ4Ú¾þ}HqŒôœT—i$×Üô7/¼mâýNÂ]3Tñ>·ªiò¬Höºž£s¨Â©‘Ê‹Û^sÇŒ2ˆZ=¿2ƒ‡}ÍÎMYɵٻõ[^öþ¾j4(ÆJP¥I7¬b¢üîã¾—]o¹•¤j°éW-s>�¤ë°É Àö:ÔwæÛ "9•MÔtËØ§_(¢Ë ÜL‘É"õl‰Œ­ºOM�íøYßÑü‡8¹«)Îßš·ê¬Ôá5mviì»XܼÖ|}kr¿ð…O¤j ¢Î} Ä÷ë§CtQ¼§¹ÓõûO]ÝZ¬˜ó-ãÕígdÎË´aÃrƒOÜåm}™èŸ¤”�¾kԈ²’ýúœoï*”£ÌÒµÒ•7M'æà×÷w¿;¤YY_ÞÇk¨k6Z¼‹!:•ý¶¥uiªæ5š-"ÇQÔ9ã}½•ÁO½å‘Ö›ÖJ+»½»ôMë·SYÉÆ7ŒI$\Tš¿G9F7õ’:{�‡Ú¿‘-Þ“©xgĶÐE$ò¾…â:[´‚ß$Ï¡êéþ"HÑ;»éF¨Åö�Z8;]8ÉvKoð»Kðîb±ºŒãV“nÉT§%½-Ïj^–Ÿs…ÏAÜçõöééÛšÌßõþ·9÷ãõê¯øP?ëúü=ß8ÿ?¯=Ëÿ_×õø‡üÏ^œú¸íùsõ¢âûÿ¦þ‡è?NNy¢ãùÿŸ_OO~Â�Ãúþ¿Ì?¯ëúÿ€n=:“ïý}¿™çœÐ Ïùçüþ?NÔúþ—ü0g‚GéíÏÁçÛòéGõýX?¯ëþPÎüÿAÓ>ß\Ñý_p_×õæþ9÷<öúz�Ï=qGõý]A‡ùÿóôhþ¿ÌëžNãÐ{zý:Ñq_Õƒ<®=ùק¸¤Ý“ôíýoýw9­L€­Üzƒß?¯æ¼¼VÏæuÒéøÝ_æ�DðŸü›OÇ|ó�Œ¿³xÿËOö“ÿ'Ôó_Æ~2ÉùðgþÍ¯Ž¿úÐxBxsÿ&ÓÄ?û+¼4ÿÕ_‰G¦þÅÿò:x»þÅx¿ôëi_Ø_Dÿù*øŸþÉê_ú²ÃÅ_M_ù"¸CþÊŠ¿ú©ÅŸ£UýÚœr_}€ Ô‘OîÂõfÇLtÇ÷³ÆÞ¹Èù�égâoƒþxEŸÄ`À`¸“+â5|·'àz’‡öŸf°‚©BŽ[ÿ/°UÑÅâ3ú|ŸØ‰RÄÓ¨ñ²Ááñ×C¢OŒKï²Îð¯ W.ÂeÓÃfmÇøºeÃÜõ*ºu³,Ò¤\#‹Æã# Ø|›‡éTXÌóÑŠ£�¡˜cð_¨²OÅ_‡þ#ð¬ Ó,àðï�4øMα§Í(y|G" ³k–7r’ð�:Àæ]*Ï™TU=Ç©]3øÔ<5o㿌¾øC¥ÝêÖ¾2ø•sᯅú,I(¾Ô­üEâ‡Òü¥ÇÑ »Èï4ËDK†‰¤ 1¸×ý¶ð[â?ð›ãYÓ|WC…r'ŵiÊ”©>!¥”a·§NXÜJ›Ì£Š”eG÷N6týÎSüŠÍ¾£<ß3þÉRYdó,oöld¤¤°2ÅTúš’Ÿ¾¤°îšj~ò·?S¼iÿÜý‘~ø£Äß³ç�¿à¤¿<5û[x?FÔľÖþx—Gý�tOé6_j? uÚT×í!ƒV‡Ë[fñžKµLèé_Û»ì!ê§›ãëBªyEYà*IrN5á,\©IÙWXUxõäö—å÷¹¹u|î…8·]*‰jœZ…×ÙçïçmôßCå�?ðM/Û'ö�ð ·Äß…Ÿ ôÛïkÞ«áŸë%ø‹ð×ÀÉñ'ĺ$׺ž…ðÊ߯~-Ðî|}ykyiw`Óøj-CLmFÖëNKö¾µ¸·‹·œeøJ¾Æ½fªF1�H•j¾Æ³Œ«:p’¤šiÚv•šv³LÎ*ÍsF*ÍÙ7(®fºFí_äPøÿãý°ÿhƒãWøð™ôûO‡Þ6—á�Š5‰*ðwÂm:ÏâŒ7-e'Ãk¯‰:÷†SñôWˆÖ·^Ó~Õ©iÓ´1ê‘Y5ͨ™âs|ÙûZ÷uiûh*0©]º¿¶jŒgjVÕMÙI_–övP¡Vw´mgÊùš�½ü¾óW—‘/Ã?ø&çí›ñSÆßü¡ü½ðöµðöÛKø¿}ñÄ~øgá�êÚƒÑô­gž9×4/ ¾¡¯y�M¡[iú�ëj¶7v𵙓H¹†ýŠÙ¾_B� ²Ä)Çœ°êŒ'Zub¾)F�8ÊvŽ¼Í¥ÊÓ‹÷“Adä”láñs5¯²m´µéÜúáŸü»âf�âOÚ;Áÿµ†‹â�ƒþ%ø_ÿçøÝûrü8ÑôMsÁzÅ׈¥øm«iš‡4¿}†oG§èz¦¦uë}[OY4¿l±µ¹³¹‚Òæ)îy+gte %L ¡ˆ…lÛ –Ö”£R* ´e)Êä¼’åq~ôui¦Õ–‘ÃÉ9ª‰ÅÆŒêÅ&µå²Iï¦÷êxf›ÿÆý¶5ƒ�üpÓþ � Ýü?“âÖ�áõñÇÃáñOTøS‡“âF™ð|ø§þm÷„U9ÓPƒÂÍ-Å”±j–¶ÓéRÇ|ÝRÎrèâ>¬ñš«ìý•_aÿóæXŽObªt³�“÷[RÐ�aUÇŸ—N^k]s8ÿ7-ù­òöý�>~ÔÖ¿´g‰>)|dÖþ xöqø;'Æëþøp¿µMCJ¶×¬4k» ]ø»Áî&�/…ÔrG}pÒüŸ³�þj,ÏWð�¡‡Ž"®/õxFu}ŒTœ\“röu7µ¶]î©Æ§;”œT#ÌÚ\Ú^Û]biŸðJ‡RAñ#ƶ¼CñàÝÏü[ö†ý»~xÏHð\ |O®k¿ußè1øâ7�|KqâÙô�(Ýk{¯¯4ma޳Áq¢ê¶ÑÅ8n g•¯F›ÂÂŽ!gL³NU=´#Lg/iF¬5)Z:)GÝûQwFŸW�¼ùÜ£ì'VÜ­¸´­$尿7è|ãðÛþ ÿø³àÿøÓÁ?¬îì~'hš_‹<¢êß~økÆz¿‚5“·MñáðOˆüg¥ø¢ËÁ·LöÆ=vûK·¶k{ë-@Ķqx:ëgÙ] •iÔÄ4èÊP©(Ñ­:q©Š—´…7Qkî©7t×Å¡ÃV’MGâI¥Íìövnöó·à|ù®þÄß´§‡¦ýŸ!¼ø|—mûSx«]ðGÀÇѹ{ƒªèþ.Ôìt�B×Ä�¤½³Oö™BÚG4ñõG1ÁÍbíVßR„jby¡8û:s¦êÂ~ôW4eN.IÚö¶ä:S\šµ 4îÓåkM¬ôÔùïâ·ÃÏü$ø�ão…¾8µ±±ñŸÃÏëž ñnŸ§kN¿g§x�Ú„úVµ¦Å¬èWºŽ�¨?Qµ¸³šãN¾ºµià�G3…&¶…XW£N½6Ý:Ð�JmÆQn\Ñn2Q’ºiÙ¤ìÄâã'¼]�µ³O]vÐ÷ý#ö÷ý˜øW2ÿ‘Ž?þÃq_ú~¡ûaÿjÑ´óoñïÄ-¾¬“|>Ñ¢�¶–·ÓäO_\Ee[˘íž}ŕͅ¶À¥Ëñ´å|¾ŸØ¶&mw—îb¯þ{‰ùàýëë¼ÿÐý¯ƒ= €?“Ûß\ÖõßÚßãDšì“´ºg‰!ÐôØe.×DÒ4« M";hؑ٬wÄF&žò{¬¸voØ8z�:y>SI)Ru$×Z“œœÛ}Z~î»$–Èðñ-ºõ/ÑÙz$­øj|^É�úÿûMÁ.!øû ü&ý¨ì>$^x£â†¡¦ü%ñ/Çÿ„gO±Š/„øý¤ø�YøI¬Íy¿lߨÿcYh:¥¥â¼É®jD�[A—ðpyÓÅfuðNŠ…ëà ^ïý¢¦P�xÛm9œ¢Öœ««gLèrR�NkËÝs�ò©ÝÅþõg ðóþ÷ûjüLð—ÃøBøWa¢ükð.�㟄 â¯�_<'ªüJMzÎçPÓü+á-_×luMGÆ"ÊÝ.¯´¦µ†×L‚òÆ]GQµK”a¥\ÿ.£Rµ9Ê»–¬©b90õjF�+IÔ©(EÅS»²•Ûvv‹°£†«%”m$œo(®kôI»ßÈâþÁ.?kŸ‹~ ñ_ÄøÀž øñgÅþ#kÿ~'x3á}‡Ãïˆ^ ´Óg×tIâÝSOû•y¬iz%«@.å½Ö¯VÒÞH/'¶Ö¾u€¡RœêÕ©V„14aB�Jέ*�¨ÊŸ$]ôŒ¤ïkE]áêI7d”dá')(ÚJ×NïÍ/SæÿÚö_øÑû,ü_»øñÇ«à¿ÛǤ^Û¤º–Ÿ©h:¾‡¯“ý�âmÄz]ÅÞ“«øvü,Á5++‰RÞâÖÿO½K]ON¿²¶ëÂcpøÜ:Äá§í)>dôjQ”~(JJQšþVµM5x´ÜNœ©Ë’jÏOK=�Ö–?K?lïø&ïì¿û!è>xŸö‘ø±¢þÓ¿ üáOX'�þÞè_³÷í w¯èÚvµ©økàŽ´‹½gY¼ºÐVòëH“Zñ=�¦�uâ.ëIš]>H¯åÓ<|¿7ÆãåJ´0t%‚­Rt߲ĩb°Š2qŒñT¤£¥e.X7% )k¢{Õ¡Nš”\äªE'¬- Ý^ÐjïMUÞ—Ó¹ÈþÕðH‹üIû$x+á'ˆ¼7ñ߯ߴïÂÿ†z¼>ð—Œ|©ø–Ó⇋ô¯ëž%´ðÖ™£ø†ò]oঅ¤øfmCOøãpm<}g©wsªÚÛi³Ìº`³ê˜cêW„ðÔðU«GÚT§V0tiʃœ¥£‰”¦“Ã+ÔMÅ(¶Ðªa¥ME©º‘‹²jüÍ6íg¬R_Ç„|dÿ‚b~Õÿ£ðEþ¿¢xžñÏÄ}àõ¿Œ¾üNðoÄ øc⦽}Ÿaà?ê~Ôï_ÁºóÍ4M�nÚÚÂEfŽÚúâêíâéÃç8O´Q•Zs¥FX‡N½”g:WuiFq^Ò?ám÷IY‘*#fùZrQ¼d¤”ŸGm™Ôx«þ ûoø7âë¾ð¤?ñ^�ãïÉkįO£ø7À? %Ñ—Å_~#x…5Ÿìoø.5í.óOÔüIycqªÁyh–3ÝêeµìC>ËjP©‰�YºTåJ�ý�Nj•ksrR£^jµ/'&¢Ó»²m7†ª¤ â®Ó²QµÜ�ì–«sç/Ú_ö=øÓû)Ià[¯‰¶žÕ|%ñCJÔõŸ†¿~xïÂÿþxîËB»ƒO×LJ£ÿ&çÆû%¸kÿ^G3£°Ú2y>¹$ƒÏ>„÷ïÓµy`Þ‹þõýu?—ë¯]ÒÜÚ ÌB…’x3œž:sÈ8Í{´ÞŸ×ëæp=ÎóMÓ¡Òb·Ê¯vÃ0ÃòŸ(ž�Güôƶqàs’zåW{ôõþ¯åäfÝôéù•înä¸�É!Éçj‚JF¹û g�süG“š—&ßõý!_Ó*ƒøóëëÓŸ¯·îUÍ«/ù_ägŸ§;G×�þ¿j¤ýÖ)n½çÓúÜÇÏSÇ éýF>ž•7þ¿®åwþ¿¯=5œçÇÐt¼Ó†€þ¿?¿Ì3ùã#ç·à?Z?¯ëÔ?¯ëúòAx<‚8nAéœc�xãÞ€þŸëA3úÿœ~�΀þ¿È'�\~€àý1ÓÛ¿j“!p;à�\qù�ž}‰ü@×oëþry8ã?ç#§OÇŒb€ü´ÿ‡ ÿõ�õôü?<õ ?¯ŸA3žsïÇùóÏNôõÿ /ëÛŽs“Ÿþ·~;w£úÿ€×üŸ×Ì3ÿ×öã_×õýl/¨ÿëþ_Ëõæ‹…¿á® ?ÈžO§=}‡a@_?ËúìHªÞøÛØuÝÔ`,â…¾¿×Èy…½€á@ÎéŸOsϧ*šëý] Ûççÿ 8ûúôý>ÝøïSø&{sßéøýL¿CGõè×ù’"îÉ8U^Yˆì8Rýtÿàü½?®ž¬d³ùí�zrHÎY�~€ýyäôW¿õù}ålò3ëéíÏ©Àõ zþ¿×ËõÔP~Ÿ‡Pzœ{gÿ®m?¯»æ&@ìN?\ú~ò§ývþ¿Ëä×߯õ÷ ×üþgéž:wϽ&×Ì3Ž3Ï?ýnsùš.gÓœÿ,�~}x¦= ý~˜góÆF?ÏoÀ~´_ר_×õä/ÿ[õ?Oð÷ ?¯?ëOò þ¿ç‡#ó ?¯ò¼Ð ™÷ïÓßùtÿ9 ?¯Óú¸¹ôíõãòqŽ{žMþ?ýn;zý{w£úþº‡õý/ ÏL÷öÿ?äu£úÿ†ëúõ ý?®}xïþÜÐï}8ü=/Ã×Û¾(þ¿¯ò—õý[ ê?úÿ—òýy¢áoøkˆòç“éÏ_aØP×Ïòþ»9ç×ñàñÿÖéü¨ëúÔOçøþyéïý(ê÷ÇúÝ}»ñÞ€/éz^©­ßA¥èºn¡«êwlÉk§ivw÷×.ª\¬v‘Kq3*«6Ø‘ˆ ÌF¨m%vÒ^z[ï ^É¿ÏÏo‘Ùø«á—‰ü§­×‹‰¢jOt–ËáYõí*çÆ©ûJIs¨øsOº»Ô4H šÕáš=y4»Ã$�ù6³G'š%N2Ñ]¯æ³åé³z?•ÐÚ¶ö¿këëåóhÍðž¹á}ûBã_ðU¿Œï\Z�"ßT×µ�+A²(nõµKI¦ëZ»NM ¶û'‰tXí+¡4wíuØ’MÚÒåZÞÉ6ûZ÷KÏG V_fÿ;zõOñ5¼AñKĺî—sáèm¼7ᯠ^<?‡ü%á}@³¸û4Éun5 ë[F×µ£oqrÃ6½«ê—´q6Ø£U"�õo¼¤Û^�É/Ä�º%Ù$¾þ¯Nÿyç óÛƒÛ�¨=/òh_/ëîùŽÎ8Á8Àüý3ÛhôÎ:äRþ»ëúØ¿¤éz†¹ªiº.“i-þ«¬jz^™ckÍBþâ;KKXC[‹©c…!w¿ÍŽHãÌsQ—cólÏO–åx,Vc˜c+6©ap8*18¼MWÚ§B…*•fÒmFÉìÅI¨­\šI-ÛoEónÝ׿ ÿÁ"üQ{ é÷ž1øÑ¥xg_žšÿCÑü7Šm4éeͯöÔÞ/ð໚Ds¼h·ó„‚Þ{˜BO/ù‹Ä´ë‡°¹Æ7 ¾æ\A’P­:X<ã4âú\9ŠÇSƒåXŸìš\1ž¼-*Í9Ñ…\s¯ìœj4*¹Ñ§ê¼¦qŠu+F2ëÁÉ.ë™Ê7û­çÔÖø$_—Àý ÷qŒ¨Áôÿ¢–A9Ç®}ú×/Únê%ÿFß÷’o×·ú‚¼Î:˜?gÿ/ooîZÿù3*?ügÊéñøœr1ð¯úŸø¹?^F+Ò¥ûJ½¥¿ãK[¿ülkÛÿ45ÿ pÔ|—ëøyù•_þ P"Ïü_�ß÷K±ß¿ü\Cø`�~ÕèÒý£Ž§üÙ»_þ®ÿ÷ÆGLb…ÿwûzÞ¿`¬ßðK�/?ñ}3ÿtËÆ1ÿ5Ÿæ1À¯J—ís·üiûÞ@¿þù(á©›ò_ýžÿ÷ÝÿéÓ9Ý{þ eý©i¯ü/o#˸IËÿ°ówŽhÂíÿ…‡ós»qÆÐ6œ’<Ž)úo>-Ëheÿñ ³ýŽ:ž7Û®Ÿ[æöt14=Ÿ³ÿT°Ö¿Ö9¹ùݹ9y_74{2^<þÀÆUÅÿe}oŸ ?÷”î§À~Óþf¶ÿ¹ÿîÚ:#ô¸æÿ›}oûºÿüZ)¿ü&ã³�ú­8ÿÞM]Ôü6u-ÿ 6¿ýK¯ÿ»Èé‡ÒÛþhÝÓý÷ �ÿËÙÿ6½Ÿû­˜ÿÞHkºŸ…^ÓþgÖÿº]ÿ÷¢Ž˜})ùÿæ„·ýÜ÷ÿßyþ «³þmo?÷[±ÿ¼ˆ×}?\ÿ梷ýÒ/ÿ½4tÇé?Íÿ4=¿îåÿñ|¨ÿð^ Ÿójùÿºáÿâ€×u?=§üÔöÿº-ÿ÷¬Žˆ}%ù¿æ‰·ýÜŸþE7ÿ‚õlÏübžî¹cÿxñ®ê~º–ÿŒ®×ÿ©ÿ÷²Ž˜}$9¿æŒ·ýÜ_þ*¿üÐ'üÚ†qÿU×ÿÄåwSú;9ÿÍ_oû·ÿü6ލý!ù¿æ�·ýÜþ,øsþ Ëá [Äzf›ã¯Ù×Xðw†/.áƒTñ&‡ñ6_iM*F÷Ãó|>ð©Ôa¶F’yâ·ÕÒèÇ%µ½Ä®±�ú8ãéàëUËx¢†;JTp˜Œ¦Xuå¶©ýifxÏe)´£J‹…Ýç(E6z™�8LF&•A–ç3ÀNr„ªTËëãpõq •}œ#Vx:´'V ÙÔrƒq~¦[›ç=IUʳv]9¤ª<&­Q+¤ªÆœã ‰]òªŠI=U𹙦~Õ_°Nƒ®ë¶p|SøCáÍ´Zð×Gü#×~¸‹â/�þbæãÄV#O•þ ü=ñg‡"e–6¸{M6þ&—Hñ†oõ†àÿ£ÑÛ€sŠA xq‘ç¸J�«�Î0Ü+•ÕÌòêÔù¹+å¸ÜV¾#-¯ïÉJ¾¦¬âÔg9EE/GżU™P–ŸfØŒ5DãR„ñ••±v|µiÂQ…XìÔj)$öW¹ôÿÃO‹_¾0é:Ö¹ðÓÅ6>-Ò|;âßø[½°†úôïx?TŸFñ‡:ßÚÚKö­6þÝ•™íî­e´Ôl¦¹Ó¯¬®®?w>m¦·:Ûïù hŸõÖÿÿHd —ºù†‹ÿ÷öÖ¿ôéu@.¾¬ùâÛöÐý”/tË}Mþ<ü6²Óï´ SÄÐ�{]‡ÃòIá½#P¿Ò5-f[-}4븴¸µ-:çOK¹íã‚îêK-ZwÕ4żRŒeBIJ2N2Œ’q”Z³‹Né¦�šz5£4JqiÆêQi§f¤¬ÓMjšvwZ¦r‘üý‰e’k/‹? ì ÷6vv–?ŠÆ‡Õö¥e¥Þéö–:v•wcow©ZjÚT¶Vö¶òÝ_}®�&”º¯Å¿¸)Z8|ƒ —R[a²Š¸Ì—�’rX<§‚Â)µÍ5ENV¼›zŸF¸·‰^µsJø¹½ëfðù–!«·gˆÇÑÄ×qM»EÔåŽÉ$nêÿµWì›ð–]_E¾ø�àÿ ÚéŸƱw¦hú´žŽûâΕªkÞ¹¹ñ>‹¢ÜønîoxC¿ñÍÿö´çNðôvÞ!ñ ú~“¨i÷×_A”dy6A†–$ʲü£ :³ÄU¡—`è`éÖÄÔQUq5Õ pöøª¼±u±5¹ëÖiJ­IKSÈÇæ9–mYbs,n/^4Õ(UÆb*b'NŒä£MÕœ½•|ÍS£O–•4ùa­VøEñ»áŸÇmZñÂß]x�Fð÷ˆî<'«^\økÅ~þ ´Ó4­^ëOŽhzÕïÙì5½5溱†æÊ;‰¥±{‘g{moêœ-5¹ØÁÿÚGý‡/¿ô=^ŸùÛü_«:jC>4øÑñÿö">!×¾||ñ—“âO|š¾�ñJ]ú,¶øâûË‹;ígJû*FÄ1ÈÇ$cÇ#òàûgžÆ�iOþ~Cÿ�ù…Ÿg÷0û:ôôéÏÐôçëî{JÏü ?æòsd çõ÷üõ ?¯ë­Æg‰è?Î{`zgÎE/ë°}ß×üëQzõõþYÉõÆAϾN;Ò¿¯ë×üû Î8Ï<ÿõý¹ÏæiÜF†•ª]è×öú•ˆ´k›7Ë[í;OÕ­f‰à‘n4ÝVÚ÷N»GŠW]ͤè(‘QÕ¦Óº¶�Òkîi­|ýI”c8¸ËšÏwJÑÝZPq’Õ^é§ç¹ÖKâ� jкë~°¶¼(JjžÔ.|=;Í´ìk­2í5½¢ó9’-7JÒ2Ÿ$rÅ´|ÑûÁ¸ßÎÚÇîKCeV rW“�òVЍ­å%ÉRöÒó”ýGMÓçÕo­ôûg³Žâå™"}BþËK´Þ¤ 5þ£=­•¾ý…#k‹ˆQ¤dMû�j»²¶½ÚKïn߉´¤¡&¤ÒÕòÆR–ý#äûè¶Ø½®xo_ðÔñÛkÚEþ–ó/™n×vï½ä<…žÆèm}lØo.êÒiíä˜äaÍ7EûÉ­=.Ÿg³^Ÿ"iÔ§Q^œã%{;5tûJ;Åꮤ“îŒ,ñϱè}ð~‡··z“AsÓ·Q޽¿OèM×õý~Aý_×A3ïŽ3þr:tüxÇzþü8¹ÿëëéø~yë@_>‚g<çß�òçž�èëþ_×·ç'?ýnüvïGõÿ?¯ø?¯˜gÿ¯íÆxä~Àüñ@[úþ¿«úŸÏðņÝ?á¿®áŸn}ÎóëÍúOž8ÈïÓߎ�~¸ëIíòëôþ¿CœÕ>ëc žãëØuà}pO­yx¯…íý_‰×GF¿¯éÿ‘èžãöhøïÓþK/ìßÓþÅOÚSëùŽ=:þ3ñ“þOσ?öm|uÿÖƒÀ£úïù6~!Ù]á§þªüJ=;ö/ÿ‘ÓÅßö+Åÿ§[JþÃú'ÿÉWÄÿöORÿÕ–þ*újÿÉÂöTUÿÕN,ý¹¹ŽÚ2ï×¢¨êÇÐz{“Ð{àÞ~�?Hú;p6'Œ8Ãíñ•ý®†xg Zœs~'Í£MJ,'c…£Í ¹žeRÃåØgÏ%WS …Äþô=úx­ôÎñ[ῆø/ªe¸G‡ÇñÏãðõ§Ã¼ ÃÓªáS2ÌêSåúÎ?©Õ¡‘ätjCœãbéS–C�Ár·q!–SÛ�ÑQG8ÞO'©5ÿ2þ5xÕÇ>=ñÖ?Žxçñªîxl£(Ãʢʸw)U%<6O“á¥)*Xj\ÜÕ«>lN?*˜¼]JµêÊGýÓ}¾‹Þý¼(Ê<*ð«(Ž/ÁÆÞ#â,d(ˈ8ψeFñÜIĘèB߈pPÃáã˂ʰQ£—eôha(B„ø»öžðÿÂýN� j7¿Œô‹•žÆMóÈ·Ò¯íÛ)%αôG‰Æ$·³K©Iop! Äz|%ôgÏüMËjÑ⬿”p~k†•d3Ì·Äæxñ\ÐÃey'(UƒR§ˆÅË M{•è:Î1Oñߤ/Ó‹ÁŸ 𙿠åtèx©Å3§[‹È²œMÃx*ÍJ)g¼@£ˆÃ©Ðšj¦ *¥˜ãi׃¡ˆþϨ½µ?˜>?þØ?iY¡‹âo�®®<=hн—ƒ4H×Dð•¼Ðª„¼›G²+§¨ï (Ô5w¿»�å–;9-mJ[§ôï€ÿDŸ~ŽT«UðÛ‚ð¸|ÿªÃÅùÌåœñUz5¥'<Û¥S,˹i<¿)† ^©ÔÅÓÄâT±ÿø÷Å>.ñZ®s�ú¶Y,Dëa8.uhdø(¹¹R„hÎ¥ZعÑO–œÂ¶+•íY'ʼá_ÄMsáÄÿ‡<0¶¯â_…þ=ðÄO%ôo-‹ëž ñ�â]%o"�ã’KV¿Ó-ÅÄi$nð—Uu$0þ�¯J5èÖ¡;òV¥R”í¿-H8JÞvnÇçQ“Œ£%¼Z’õNèþ‹<ÿ.ý‹~ü\ø¡û_ü1ø±ûNøSøÉâ}gã7ÄŸØ4|8ð-׃1ð¯Æ½/Æ¿ øÂ–¾Ô›Å>? ünu+Xt]KXÖ-äÒZ8-5$‘ÊÅ¥uO.Ìp•qðÀÒÃb(f4iRçÄV•9áåOð÷¨¹'í©Ùó(ÅónŸ÷¡U¥8Óu%8Ê”¥+F)©^\Új¹_Mt$ø�ûrþÇ_·Ÿ��¬ÜÝK¦iÖº}¥ÝÌ×s[Is{4¯ž/)‚§—RÀQ§J|ß Ž¬¹¬Ü){Oi7)7*•5ŠI¶ÚVNȨVw«*’mÊ„éÇÕÚÊËD·>øøgû}Á<5¯Ú‹öVý¿þ)|Mý¢| ñ£á7Âo|,ñŸÀ? |8µÖ<¿áOêŸnêN§{~޲ѮµÝJúáb¾{k­R7òëey´pXÜ®…%\=zõ+ÓÅT¬ãQÆu#US•.Oã)E/h䢒Òí#XÖ¢êS­)MJ1QpQºº\·æ¿ÂÓÚ×!ý„j¿x#ö4ý±þ=xÿÃ7š¾›û!~Ð ø»ûø³Tu´²O�´¿ƒþ"|7‹À�§´ðÞk–zRjÚ'Å-cD²I¢ˆn¼Euy¦½¶Ÿö×™àgS0Ë𴦣,~8|ÆÕýWR�gVöj.\²£;si�ÝŠU§VmnTŸ÷ê)FÞ{©[¦¬þfu{Û½JêóPÔ.î/ïï®.//o¯'–êîöîæVžæêêævyî.n&wšyæw–Y]ä‘™˜µ}\’ŠQI$’I%d’Ñ$–‰%¢±Ä}Y¤øÏÙ�Ÿù™¿aLqŸø ~ä°ÜŽq‘ÆM~1OþP»Çû}-ÿõ´ñpûjŸò‘>ØÛÀ¯ýg¸ùÛÅò3x‹þú¿þœ.+õ|‡þDy7ýвïýC¢|®eÿ#ý†â¿ôýCõ7þ ñ2ÛÃ_|sðÒúxà‹â_…-¯´¿2DSsâO{{”(ä’]Zñãye›n�Ìl¿<^'a]\ TUÞ³Œìž”ë¨ÅÉù*�¦µþmû¼ íRPn7^n=>æßÈþ‰kócÕ (ñçþ UûØx×Oñí-ágGðþ½á�}«â—¬Èö–>'Ò´+A Ž¥¦]Ão;/Š¡µŽ×FŠÂåE¾·o›moqg}j±êŸiÂùܨJžWZœêS«VØiÃYR�GyBQm~å»ÍÉkäÚ”]áÁ‹Ã©'Z-&—¾žÒKf¿½ÓÏMžÿ‰_ás|eøZ߯5 ƒ°ø÷Â×_&Ò4û�SU“À–zť׊,´Ë9a¹›PÔ´xnôë#±ù77QNÌ&¯¿Äûo«×ú²O즨ó5ûW ÛwVR³wè¬y°åæ�?ÃuÍn××ð?~|mÿjýŽ¿h/þÜ~ø…û8ê ü ûYü6Ô¼ qñ¯KñçÄoø‹U»øMoä~Ì:ιðgTºÔ~øE¼3.Ÿ¥jrÇà}*Úê].u&¸¾¼»ùjya„§–Ô£‹Uêàk*« *TiB*»¾21ÄE*µ9îãûÉ>em’]�JnªpåU#n{É·Ëü6áð«o¦Ç ü]Ô¿aÏ x7þùñ'ö¢ø§ñËá׋þ þÇ¿~(xAømà-;ƺ'Å@ñ5ö±¦xNÏS—]Òî|â»è½ö¹{e{¥jš¥miΗ`—ÑeAfS«ŸÑÁQÃU§ˆÇâhÎUªÊœ¨ÊpQuQ~ÖÒ)©FJö’v½’XiT”âãN2J*êI;¥{èî·ÚÄž?ø¿û5~׿ðN_Œ_ÿi/üPø ðóã�üçâ'Œü¯|>ð¦™ñûÁúŒ¿4‹­Lñï„#Õ¼>ž#Óeð:jÖ:�þ…x5;O¶—­Cöžº��éKŒÀfØz8QÅVÃd4iÔ�YÊ’¨¾³%9R©Ë.Gí9ZRVtïš¡RŒåQÊž%´â”­î+]]]Z÷¶·? ¿à£ßµ/Â�ÚOâ×Áë‚:W‹Ÿà·ìÓû<|-ý™~ë_$Ž/|AðßÃÖ¦>/ñ<6RÈ4©õ»�râÞÖÂÕá°µ·½k]"êöm#O÷²Œ| CÄÊŸÖ1˜ºØÊ±£ü*S­Ê½œ/ñ(¨¦Ýµm«É.gÏ^¤g(ò'ÉFæÝ¨ßWëøm�Ðßþߟ±Ç„dïÚá7€~1þÕŸüñŸà]‡Ão„Ÿ±ÿíá½Æ>ý˜~"�:ÊÙ~#èßõ]rõ§°ð]ÙÔoü¢ø/ÃÚB,âÚû(±a}¢ùPÊó ˜ì-z¸|¦ëWÇá'*sÆÑ»~ÆXhÅYÔVU%RrÒöoU-�jJœãTš”9cNi5N_Ì¥åÑ%ëÒÙ^ÿ‚“þÌ ø©ÿÖý¨`o‰Z׎¿fÙ[Á±GÇO‚‡ÂšdGÀ>ðÄ¿ê¾üK‹Äím}­ËsãX5/Âw:V™5ͤ"Úç[Ñg’i!u2ŒmJÆ ÷1¥ŒÆÔÌpØŸhÛö³«F¢¡V�%ÔmM§5&“ÕFHJ½5*=æéÓT§tJKš2¾úí§ª<ÿCýªbÙCà„Ÿ?fψ?þ8Ùüfý§ÿgoŒÿüuñ᥇ÃÛ/†þxÛJñ•�†<; ÛëúÝ÷‰> \ßY´:εeö ÿLmeåºÃºË™c±ZÆRÃáž‹ÃÐ¥F³ªëUÄÓ•79ÉÆ*’wŒ]䞯¨½¥*pä¦å>yÂRr�¹c{%wyw{?Âïø)ÀÏÁD?oŒ:ññE×À�Ûÿ< £øàü:ð·�¼IàÖõRðO‹õ_…? φ|c hÓé+o¯x#WK˜îôãoö{{¿°®�wò|ML§,ÃÇ‘brùÒ«*^Út¡W•IT§ô­:s’•ãR6³½Ú½Ó�x*ÕdïÉQ4Ÿ*m^Ön/F•µGÍ¿ðQŸÚ÷áçÆŸüøðŸâ狾1øcádþ0ñW‰üO{û<| ý˜¾ËãÜAKð¯á'¯é^)ðíªé0âËŸøçÅ+®ëOæ™e¦¥«IsÙ”`*áªâq5èSÃβ§Abñ8ÊÊœ.ÿ^½IBo™ûŠ�(rÆé·}3¯R2P„dä£vß$)Æïùcu¦÷nçäí{‡9ôWÂOù"ßµÏý’¯‡_úÑkó|÷þOWÑ£þÎë�ñ8úœü›¯?ì–á¯ýyxÖŠ¼µE,NÅX“À¹'¦c�ØW÷– eæ/×ëóüÏlÑôøt›q}|®�G“ cÜ¿p†QÑŸn"Px%¾†’Q�Þç›6Û²Ù^¡ÍÌ·2$?1áTgj/LÞäç$õÍ\�õdÚÛoÜ®}ýúÇŸnüw©bþ¼ÄÝÛžüg�Çèz`õú.A¦(–Êî2Â0Ìr2m8ÈÏNäŸZÒ6iüµþ¿!½ÖŸ×õ Ïì¸óÿñß?‰é)î þ'Ž_?ëúûÂÿÝÿ‚ ÒãÈÿO‡þù_Nå©8¸ã­«¿ëÔ9Ÿo?ÈzéѯKÈ7zàqÿ‘>§¯§§'*þe×úÜ/äÿ¯–Þ…é,â¼²kk©VåWîL€+ÆÀpÀå¾dIÆW†«]Y»ùíoëòõÓúõþ¿Ìó¦µUžXÄ«,19_=~ã…êSŸ^23’ 'µïçÐÑkm?ÌÏÈ#=sÁì–y#¿8ë#þ¿¯ë°ä‡×ë“€9=F:§J3ÛüAÉéœ{cüó@ltz^›DÔ5‹|“onqºå†,ùaïÏߺð×ÕíÑwÿ€Kì¾o·üøccU³·Ô$xURÈ•~Îë„I—ËÜ |pÝ„n000zUI]ùôóÐKE}Ó8‰"x�â‘JÈ„««uF^£ÔóžF1Øæ²+úþ¿ ÉQþÑïùõí× ç¹´úþ¿®Ã $ó‚zàqÛüþtƒùtî{÷#òÿ €»sÇLc�óßž‡€, 9ý:wúñž�±ëì(žã ùþ_LòhÏCùdŸ§¸ïŒî=€ Ïuú~GŒðO_nÁ­@V“9¯L`zvzsšè¶õý]Fç·æsÓñ$ýÜtüGNPÀûŽÝ?½1ןñ8¡¡mèJƒvIÈd‘Ôøö¯9Ç9(¯29eÝ•_•ýãÓ$úœ~zÓo¶Áb÷ëùœƒÎ:ƒÇ©ÇCèi…çßžß^§ž?>=:d ýF0= ëŒw$qÇN�P^˜'qôíî1ÓÃú·õÿ2@HÏ\ð{åžHïÎ:�ý_×`9ȯ×'rzŒt?N”g·øƒ“Ó8öÇùæ€ØPÃ={Ÿò=?_Ï€ ß×õý[¨�¿¨ ×çßòÇ aÆ>£'=¸ÉÀ>§œóÚ€xç¯qž¼ã¯Øäsš|hòȱ Þîp¨£ïÈíÓ©'8îz7©‚tˆ·¾Ùo¤B¡9èHár9n¬x/½HnþŸ×õ¶†l“<¬Îå™Éå�¶Ó �Æ8àC¹JÖ/ig7‹þãôïòž¼g§lzû ¨ïò¶(É÷ߎŒÝÆpÿž>™äÔ÷ü¿È|3É‹$d‚BNddÈ!ºGPF2 Ù�¥¿¯—™fòÖ-F#uj¡.ý|#øÏRÝXž‡#wš«âÕnFÎÝg'‘ŽA9Èç<„gÔtÏA�jK=¿3žŸ‰'îã§â:rqۧ猞02?—Ò€Ÿð>ýAéôëÛ�Zúý®áÏדÏ_Ãc‘×�^8¢áýX2 ¨ç`Ó<ŸnxüM‘�Nx<øG?§'š\óÇ>¿×’:}?È _×õÿLòy9çÓéíß;õÇ4 3ÜôüÀž¾ßÈëúó;¿ ü8ñgŒìïõ}.ÎÒÏÚDÑìø¯_Ôl4 éSJžlv×:Ϋqkk.¢ðþú Á¯u«Õùltë§d�¦SQÑêÞÑZ·ò_žÃJú¥§}¿Ór_hžЬ`±ðÿŒ¯¼iâD¿Æ¥¦èé^ŠÀ[¸dÑïõ™­¼K¬]›Â™¸½ðÞ�iþJÞ™c•rní(ÇÍÞWó¶‰|Ûe³¿ËOóüŒmÆÞ.ðþ“ªèZ‰5½I×&Ölt�FçO‹T!‹Pû$‘µÝ²g+o;½¾ý²˜w…pÜbÚm&Ö×W°]÷ÿƒêsóíŒϾ_¯¨Ažý3�yÇPxõ8è} ay÷ç·×©ç�Ï€ON™@ƒÐŸOsŽ?Nƒ¨‡¯òì==ÇoqŠWŸéýV=³öi?ñ‘ß:‘ÿ ·áVIò=èã¿ló×½~Kã÷ü˜�üü$ñ#ÿXìäß þõ†òÄQòÚ¤Èþº.õÏoÏÛÛõ$â¿æ[ ´>š»ÜÄ�ºÿ/èxöúûW¿†Žß×õø"[þ×õù· ןnxüx9¸üºWÐa£±âb%¹‰pzý{ŸÔý¿Ðᣱáâ%»¿õý™‰9<þçéÁôç­};y&"[¿/ëú¹‹;œõÇ|tüzñ_A†ŽÇ‡ˆ–æ%Áëë�Ï<ŽýsÿÖ¯ ÃGcÄÄKëOêÆ%ÃOóÎ~�:õëè0ÑØñ1ÜŸ=ÏN¿þ¾­}:#ÃÄKsá¹?OÏ·¦=;~ôhìx˜‡¿õÿÄ�°Iõÿ?\tëïëÏÐa£·—õ÷ž"[˜— ן×óÿëþkè0ÑØñ1ÜŸn¾œûäóÿׯ ÃGo‘áâÿÖÿ×õ¥±gaÏâÏ×üšú 4vû¿¯¸ðñÜÆœõöÿ?O^õïáã·ŸõýhrS×^ìȘõÿ?Oþ¿J÷0ñØôi-Œ‰›üûÿõÿÏ·¹‡ŽßבéQZ®Ÿ×õ÷S7ùïÏo¯ë^î;|™éÒF<ç¨ëþÏùÍ{˜xìz–ÆLçôÉüÏQüó^æ;hz4‘‘1ÿ>Õîaã·õ¯ü;=J+NßædÌzúþçüš÷0ñÛúò=Kcfÿ?ÏÒ½ìŤ«4’K–:%e·‘õ”é«ë«=cT†f[+«xÌòéשx R¦�­îlnR2Ä)™mo'–b«$ñÇÁÌû¿ÄÇÔ?fßÙ3V—V¸Õg€zœúþ§µ®Í¨|ðäºÖ³ؼ­[V’çÃ>¥©Çý›§yw÷†k¤û–ÙGÙ`ØYö3ï/Äõ�hþðtzÌ^ðÿ‡<+ˆüG¬øÃÄ1øsÃözzï‹|Gsößø§YM2ÆÕuOë·Ÿézη|'ÔõKŸßß]O/ÍEŸa^ýÿj9´µiáŠu³Óã�¾Ó<[ ‹«”X’;d�#’hb·2É-ʧÙÙä‚8%•ÒåaBꈕíì>Ýa¨ÂÍgysy<2½¬—6—0_“=ÕµÑH¤†i§‡È¹Ú·6Þ[Äfo´ÇÜ6ü϶ýžÿe«=ÿÖŸþZø{T¶žÏSÐm¾ø& Q³ºÔ,uk«[ý./ ­�ݵΫ¦iºœð\A$Sj}�ìŠ×6–òFYö3îÿ®‰û6þÉÞÔ´}gó×ÀêÞÔìu½RÐþøI¾Ñu­*-ßKÖt«› [ͧêú]¿‡´}3Sµx¯´ø4m29áŠÆÙc,û™÷‰£ªüý˜õß·ÿmü ø+¬jiZ§ý«ðŸÁš‡öŽƒ¦ø~/ éÚ%ÿÚü;7Û4‹ Á†¬´Û�2Î×ÃðÅ£A ztil >Âæ}ßâz‡ôø4kÁžÐô *éëR OŽ;íºßÈSø%èÏ�¼-o� >T9ÏO—¨ÜAÊ�ÎîGÌ{{œ”íü8àÿ#Ïr–žóûßùžË¦Z‚¹(ÇÝëÇmØúð1Ô €Õ*TÿçÜ?ðÿ�œ¥üÒûÙÒ‹U`8ê=}O# ý@äÍû:óîø È\Òþg÷±~È;O¨8p8úô'éG³§ÿ>áÿ€Güƒš_Ìþö8Ú®:9Ï_Lg>½Àõ${Qìéÿϸàÿ æ}ßÞÄû(ùyc8þ zŽ>ãQìéÿϸà1ÿ æ—ó?½‡ÙTg�‘ÏÝï‚'·¯=y÷ ötÿçÜ?ðÿ�sKùŸÞÇ‹^HÚ:£�nÞùå…RŒcðÅFûÙ%ù ¶÷mú’‹PJíïõÏ`:{Ž:~Œ –ß'§pxÎ0xèO°zdÐùÆ~ÜhGí­û` ~Ô´#d|Xñh<ãœóíŽ{ |¿ãá?û&²'û¥áOçlí·�fëþ¦y‚ÿ˺¿‘ò¶9Ç>£© ؇Ðûç¹5ôló’ôËËÐãœôàóž§ž¹o Ífúÿ_×R—Oë¯õ§™{ã>¿6rqÔ}sÁã¶*_åqÿÁ#n ï’x×9ÈÆ3Ÿ|Û�L¿Oëúþº×õýhCž™úu·ޏü¹8 }¯ëúBŒr3Û�þc·¿›Œ÷Ü�zøp$g¹ÇUøõù 9ȯ×'rzŒt?N”À3ÛüAÉéœ{cüó@l(až½ÏùŸ¯çÀoëúþ­ÔNßÔëŒsïùcŒÐ3¤Ò|_âMÊãMÓµk”Ò¯þ×£ÝurèÊÒM£jQÝi’͇b—jÓDNèäF;ª”åÒz>�Xÿà/G÷N�*�JP\Éé5xÍ[´âÔí¦ÉÛî3t{}6ïQ¶·Ö59´�:fuŸRƒO:£ÚŸ.O%ÞÅ.ìÞhLþZNÐÊÓÃnÒO½Ô±­´©Y´›²ïkþ_?×b¦ä¢Ü"§-Ô\¹/ª½¤Ô¬íµÕ›I7ªè5_k6sêö/eâ_[°Y5ÿJú†ŸòD_Úp40êz’•"8uË :YxxRX�$z”$—2´£üÑw_>±ÿ·’3…xI¨Kš•Gµ:‹–Oü 7¥ýÉJÝmc�˧sß¹—ù À·nxïéŒqþ{óÐð„?§Nÿ^3Ó¶=}…/áÓÜd?ËéžMè,“ô÷ñ€=ǰ¸cÆ8#Û߃Æx=ÿ• ŸOóŽƒß§¯NhÙà�×=:žäýÜtÏsŽô˜/òþ¿¯?Ÿ7ªýÆãt㎸݌`gz�ÓŠòñ[?KÿW:¨ï÷‰á!ÿÑñßßã/ìßÏáý¥;޽¹â¿�øG�ågˆ�(ãóÁ¹–MÄÜWǼKVŒ(⸗‹óì·<¯W*pTébñtiey\hà²,¶®…4þø…ñãÆÞ=óì…Ïü#ú›—ûJ•ÐÏþJÿ举ÏñÄ<‹6àý“pÜ{ðÿÀ¾ àOa�xoíüþ•¥ý±šR„Õ ½e—`}ü>ßb¯ïñ‘Õ}mÅò¯à_~šž0xØñ™DsÀüˆr¦¸O†±©ø¯Yðµæ£§I–m?S}"òÕu+!!Çi|·Et‘]E\é…|6OB•x'u°ŒÒ}×2v}.¬í¦ÅFrƒ¼$âû¦×ärÞ;ñÿ޾(ø³Xñçįx£â�¼C:]k¾.ñž½©ø—ÄšÄñA¬2j:Ö±uy¨^-`‚ÖÜOpâÞÖ-¡ 1ƺR¥J…8Ò£N©ÁZ4éÆ0„Uï¤b’Wm·¦­¶õnM¹6ÛÝ·vþg#V  € î‡ÄÿˆãáÁø=ÿ ß‹¿áT/�Ûá¸ñ©ÿAñºém¡¯‹O†>ÓýŽ|Dº;¾˜º¹³7ÂÅšØMå1SŸ±£í¾±ì©ûgì½·,}§³ææö|öæäæ÷¹okêW4¹ynùoÍË}/k^Ýìy½ßÝ?O×ÛùŸ_äLHúÓHý¾?f>ßñS~½9ëà�œvÇ®yÈÈí_‹Sÿ”/ñÃþÄK�ým|[î}µOùHŸ?ìmàOþ³Ü ê|íâ�ù¼EÿaÝ_ÿNúÆCÿ"<›þÅYwþ¡Ñ>W2ÿ‘Ž?þÃq_ú~¡wÀþ3ñïøkÇ~½:ˆü'­Xkº=Ö ¢^i÷ ¹‚ R8­ìücác:ɨøOÄB,Ýi÷Q�²Éc;¬—6¥å¬:��I@Šê+ËK_Ç3L¶¾WŠž²n ¹P«kFµ+é%ÑIh§ ÞÓTâß¹F¬kAJ;ý¨õ‹íéÙõG«ø�Ç~ðs[§‹¼eáO ½à&Ñ"|E±ðV›ã¿ø“ÅÚÃ� XøÀVzþ«u©[øCÁšdÓÜiþðüW2:éš%œ÷WÛéöÁ-ây¤e@XÖtèÒ¤êJ•8Su¦êÕqŠN¥G£œíñI¤®Þ£r”­vß*²»Ùv^A/ň“|5µø7/�|Hÿ l¼g7ÄK_‡­ªÝÂ%Žî4qáùü\š'™öâ404†Õ Fïû8}�H!ù(ö4•gˆöpöuyW´t”¹Õ>mù9½î]¯¨ù¥ËËwË~n^—µ¯nöÐá+BB€ ( € ú/áfø/û\˜ü+ørޤÿÃF|àuë_œgŸòz¾�öpxëÿ\‰çÔà¿äÝxÁÿd· ëÇàÊðµ„Z\ {{†¹e>TDòÉP¼¬ŸSŠ�· 3õÎ8ÇQíÜc°=yÎ9ÉÛ²Ïön }ÆÙ®}�QœóÅi†@dgê3œóŽ þ<¡¤Vÿw§õø�ÎÏRǶxõÎýY=:dËV6oxù9H”�1ú�áN9lcØpN¥ëaÝ[ôþ¼Èõ-MZÂÁ„v±ü—§Y?½g8e#!ßÌà (;“’Ùm×þê$º½û_ðNiä ƒ©ù@ÎbO¯Lœ‘ïî‘E þ`úuïÈêOl`õ¬¿_ëúïÜaž�Éý0yÏ<¯=sNÿ×õòþ·gC¦i‘¤cP¿R 6Öç®\d†eãC÷�û9 q]e·Eßþ-ôEÛ‹™.$/!À*&ÔA÷UW u©ï’hæ»×å½—‘ BΠOÛ$ÇDr;)}çŽúý·ù_¡QÛúîG<1ê‘…r©¨ ÄS· :ŽDRöÞyØüðr3•ñi׿'ú iéýLä%Ib‘ã•$V*èàä7§ òú1‘ÍG¯¸²<õà~}�<~qÎ2;Œ=~™ôÉ<êOn8éšLôÏ#õúýx¡ùþõçéêxÏ\çùQþB=ðzñס÷Æqúœýr|Àr®pI cúsÉàp8äûsGõý~¨›?tñíÆzúôéßžÿSšêÀ#+.7)Pã+�AÆLcéÐç®(ÿ‡¼qëß?—>Ý1è=;~}Oëžsì8£úþ´þ¿&'\ôÉïŽCÇåÉ<Ñëó{õ?™çÔçŒã�NßZ.ûr?ÄŽÿˆ^HÍ1ýšãÈûW”þFá›��·¦O=tÈÇZ:_§ëúüƒM† csdŒ‚=Ï==xêxϵ×õý~ #1c“Û8GOåÆGcôþ´CON{äžä`ÿÖÏéÍ× ƒ#ùò=Ç'Ô‘ž”¿/Ãúéÿ K“…–ôÎ ?N?N '§—õ¯˜’]ØEá9À'ÔûƒŒ~Ž´¯ý_×èX‹Œsן§<ñýqÛŽ¸Êþ¿¯ÌÏùàvãÔýOÓ�Oúþ¿¯˜ÅPIã§ãÓ©ü{ž=ø¡keý &Ú1ŽØàýr=F@™ãŒǶqùýëúüÏ_^OòìF?^½‰§äãI%uŽ4.îv…’Ì{ ƒŒu= ÍæS 0èðï`²ßJ½3Ä`ó…ÇDÃî“ .Ú÷}_õýÃ�Ýý É$yY�س7%�'� ì0 Ôß«<ôÏ?Ïëõüþ¹èÍ=,ÿ¥¯|+ŸqÇ'Œõü•8ïòÿ!·uóúmÙf`ŠrÇn\t$ãœ~Ÿý|Ž2cºý—wÇÊ�ÿX;ŽzñÐtÉöÅ²íø‡2%†Æþ±ì ?Û#Ÿ”äô;G^G9ä‰Il�´ÆêÚhš'¼EXfD/2dáTA( xÁnãwW%¥íg×忯ê$únŽOŽ={çòàgÛ¦= ¨(8$v>üúŸ×<çØqGõýiý~LN¹é“ßþ‡�Ë’y¢ÿ׿÷ê3Ï©ÏÇ�¾´\öä‰ÿ>¼‘š>bŸÏ§ÿ¯·Ðû~4_×õþC»êFAüyéøñÔûg°oájž.†ÿQŽ�áßhï k&ñ>­™¤Ø=ÊJðA \ëÕü±Á4°hþÒµ�^Xã’XìLË*Kš�·mì’×~½›v@•û/R_¹²Ó¡Ò|%ÿ .»«Åx“_øËW{MLº·HeGÓôC ýÜí<‰2믈^öî8!·¢³ÜA!vï+%­¢µkÖZ}É[Ì4éWþZþ#ƒÝÆÜœX ž ÆH< ñ“´g€)ÿ[_ט„Ïr}þœ}sŽ˜ãüô÷ÇqÛÇ:ažzý0Zü›ÇÏù1>5yøKâ7þ±ùÏáýjm†ÿyÃÿ×ú_úr'õÉpÞ¿Lÿž¿SÇ÷ÿ™Ü4uG¿ˆ{˜“·'ñôéþzþ�«è0ÑØñ1 éüà{]^ÙÞxã¾ š ,"³&“R�ûZ{é'ˆC`4û ÒÏnÑGçùÞPiƒËß—Ùú?pÞˆj×£_ˆrl†tžo,\^6¦&u#Ɇú®yRp‡´öœŸÅ§ËÍyróàðóÔ§<Ç€qtÕ?®:«ÛJ£”yiªTª]Å¥ÍÍËñÆ×ÖÚ¿> /Ã&¼±¼ø‡à½Ķ7öz}ׄ´6Öd×b’ö!&†¶Q—¼t±ð•x*‘›…l%*|ª§&•G'í!dï§.Ãë'ö”§šåجe:´éO†x‰b¢ê¥%.YÑ„,“ŽÒoÞ�“Ôð˯ø†6Øú²Žo¢Ó>™zêsÂn!Ó´ýº[pgŠÓ™ä‡2$e9¯3–ãâÒ–í£†å–´_Ö'i =œöÒ‚ç�+{IGÞQkSâ1Lbvx\Bn²¡gBª~ÞQs�8ÿP¼£Oã”o$šÔæŽ�©\ß�.ÛO¾¸Õ<Ù þÍ‚Òâ[ÿ>ßÌkˆ~Ȉ×l9 ÈcߎMáv±Þ ^u–*Ê¿4 èFœÝe8_žš�?49eÍ[ÆÎû3çêѯR³ÃÓ£Zuù¥as•nx_ž>ÉEÏš<²æ\·��öfu—‡üA®\Oi¢èZƱwl \Úézmî¡qn¡¶nž He–!¼ÌŠ 6TóÅ}ŠÄNTðølEyÃã…5*Ê önq„dãiiªZé¹ä¬79ÓÂa1Xª´ÿ‰O‡­^¤v|ð¥J*þï¼–ºÂß„*øÃãaàMÛiº¯Ùu[««�fF+ ?û*Öâêhu²±½¸´žf¶’ÖÝ$¶ùï @Å 3/×ä./8Ç,ZUT*Êr®ªªtýŒe)F§%9Ê|®¼~;EÛPáþ̸¯8þÅÀû<>'Ùâ*T©‹�xСõju*NÝ5ªSœÝ9S§SÖ«Pv»kÈï´=n×Q‹G¹Ñµk}ZsÃ¥O§^C©LÓñÃe$+s!›¤A"&SÂdõ­ ‘¥:5cUòÚœ©ÍTwøm”�úi¯CáñxLmþ�Gh©Ï‘;s¨IÁ=¹¾þ{ž=l¿1ž¦aO�ž“婎†¼°”åÌ£iâT5)(ÚSNòKv‘Ý~Ñ¿cøñGVøuˆÄÑéºg‡µÕ¤ÓHy·tK-Y¢k%¿Ô•>Ê×f'Ú›Í ælˆ¶Áôó¬%wCŸ�F0—7//Å;ZòÚöß_+�þ%ð„xŠ1|9 ÂYœpø\¿±rÃ,¥õì cƒ¡F"ÞÍÕtù½«çQRå�ùJþ%øaðoà¿Å PÔ¼Iªü^Õ|}¥Eàí;@ž{­1¼¬f -.­.ï.uV¿�ZæH†™jm+¾uRõíáèZ�*‹W7/vÛr¾^úßÐàÎ8 ‡à¾ â¬#™ã8ËÄ8HdØl¾u+ažEŒú²•*´kV«‹xˆ§VPXZ^Å&¹¦—1à3øgÄ¿Û/áÏøGµßøHPº>ƒý‘ý²�Mq*¶—ö¶©Ši¤ )´�„RÃÛÃFÖ¾�ÿ¯‘ù}|¯5xç–fæÚQrO/úž'ëɤ“Â{?nœ`œä�;Æ É«&ÎfßLÔõKøô½3N¿Ôu9šHáÓ¬m.//åxc’I’;Kxä¸wŠ(¤’EXÉHãwp í’M´—W²í»ó9px$è_¾øëû7Vñψ-mï#¹ÕRÞÚòîÎÞ;ÍgAÓìí4û[í9¯õ=CTŠ4ŸS°¶³µÔ&k¤´ö1ÙÊËjPÃQÂÔÆã+®haéɦ¡wÛŒ*I¹8Ë–1�í 98«_/ <"«ÇYnkÄy®ƒáNɪ}_œciÓ«˜¥N�Z´©Æ®+F•:ëáÝlM|Db§ˆ£N�:óu,Ú�öñGÀkŸ†Z§‚¼g¥|lðÆ+»m+À1ðµ’Z®¥®ßgÓ4y!·Õ5½-εäSø~þÇ]»ƒWŽÛQ*ÈY•—Úȳú9‚ÅÃBx F.¦&�i_’”y¹ê]œíMÆÕ#*iÁ¸ë.c³��ÑÆœ#O*¯âGKŒªà¥�¥ÃžÂ¼T$Ü}«Ì>tOŸ ®Q„c9F…HÅÈøoÀŸ±7Äox ö–ñ­æµ øNëö^>!·ñ×…õ„¾¸Õ¯5/ iúíö­¦é“éðÜiæheÐnìÖY®ÞIž7I '̯º­Å83!ÂF�lLx�ÐxLE.HÓŒ+Ô£ u*)µ;5Z2²�ÒM5}ϲO ³œÏ*ãLʦ' —Ôàg‹§šà1*¬ñ+àibªb(Ñ�Η4e„©MJS唚i¸êf_~Å^2ðÿì¿íKñÆ>øuá½rcoà/kÖšÔž3ñãÝÆÍ¡>�cogä[ÛëÂËë‹É‘Ãörx‰ÿâY-¬“úøn-ÂWâ?õk„ÄcñW67BtV¡¥eVrŸ4�(BqŠmך ¿x¤—t|7Ìpœ6Íó QƒÅK—+˱Tñ1ÌÜÓú³ÃÒ�>XãR­)T’_U¦ñ�÷ƒ—Ìžø3ñO⦕ãMoáß‚u¯é_ô”×|o¥G �xoH’ÛS¼KýHË4E kmS˜ÖFÙe9#*ûŒFq•eUp4sm%\Ư°ÀÓªÚxšªT éÓ´]ä¥Z”u²¼âxy?ç9Í~#*ËñÚ9]‰Ì*PQqÂPq­5R­åG—ZJÉ»S–›53uüÉú~¿•}~;|¿¯ÌÆŠ×úþ»™37óíÿׯs�N’ØçïÛ!±ï×±äg=±õÇ|ŽqëÒŽ‹úôó=j Uéý^göoû7üAÒ,ÿe_ÙªÊKME¥¶ýŸ~ ÛHÑÇjÑ´�|9ðä.SuÐb¬ë‘”VÚFW©l“Gž,ÔUVp‹&cÓte9¼‹ƒÛæ'y¯ÎñºWá�ä}–JT“_Í-Ïr¿¼û`‰î&’X­í­ã <÷¸HÓqâ8×&Iå ˆmã–b¬# òuMmÆæºÒ 'Ÿ%l.îÄ~‹öƒ¨ÙyØþÿÙ`Ý×Ë^” _/ëæ;ÊÖçÿLÿÁE×ÿ.è¿Òÿ‚V³ÿ?úgþ .¿ùw@ký/ø!åk?óÿ¦à¢ëÿ—t¿Òÿ‚÷W+t,oã€LðÉ5µÅ³0†é!hÖp`”™mgˆÍ0™nQâq$w Ë4P€F×W÷W7X%´0ZºÅ5õØyÖIö $‚ÚÒ `i*ñ¬³ÉuY‹Â‘Jc‘�O+YÿŸý3ÿ_ü» 5þ—üòµŸùÿÓ?ðQuÿ˺_éÁ+YÿŸý3ÿ_ü» 5þ—ü­ýµ2oÓïö†&Ú;iôùdÀÈÜK}}~Ê’Ä‘»xW.j>MN§E¨@’\ •·� G4Ó]2G KùŽs&²¬¯6Õ‰ð b&¸êît«vnL)cyx±çøÑÔ,Løéæ}’ßw_):Pÿ_ðã¼­gþôÏü]òî€×ú_ðCÊÖçÿLÿÁE×ÿ.è ¥ÿ<­gþôÏü]òî€×ú_ðFAyuâXjDhdšÒòظ·¹òð¼R–{k”YT‡Í¸Y¡ó^9I·™Tâ0Ï�|T}ì~j*éÿŸøãù¢gðKÑŸ'øZÉÛÉ(@Ç8þ1õçà Š÷�;©í:\#\Ž3· g°Æ8à`�œÉÈ­ {—/õ�'MÔ´m&òwŽÿÄÝÅ¥À–÷ ÞÆ¸¹ $Q4p,q:�Ó´aË ¹ åiEµ)%¤m}V—ÑH—8ÆQ‹zÎê*Ï[+¿O™³ä/bsž¼þ@ç·¯Ë2P¢϶0áÁü§^Ù 0/ãøñÆ_éžzЖ%‘Ï>žÄý:öœf€äw#ž™ôϹÏp~¹ÈäŽ;søãñ#Ó=°{šQÒ?ÄqôÎ>�èüßnù=�Û=á©h“Î?âìø¸úçhãqÜŽ‡ýàÏù#¸Oþɬ‰ÿæ/ ;gò:Íÿìi�ÿÔªÇÊ�ŽÜ‘Éà{û}úç¾…½–ÿ×õ×îÜóýHsב׌~úœc©ÉÆaýÃþµì@ÍéÇ~öàg$ñ×·⥯ëúòè¿þ¿­ˆI?—ù>ù#¯Š_׿'¯=†?�ïyÆ3“ß<`Íþÿòþ½>Cz`à{®}q’sœ˜#ŽüTÿ_ðà7# ÇNøôýïþî:‘Kõþ¿á½F&zw$gôÁç<ð>¼õÍUÿ¯ëåýn©íŸcØöàtíØþT_úùÿ_ð?Àpp~‡ž:vñÎI¥ýuû´Ó�¦xã±íœ~Cúþ¿s×דü»�ׯbiùdú3’{r=¾ƒœRÿ?¸e«Kûí=æ’ÆîêÊK‹k‹)ÞÒæ[gšÊò&†êÒV…ÐËku471h牚9‘±M6µM««i¦�F´éÝlÉ”c+)EJÍ4šNÍ;§ªÑ§ª{¦^Ñ!Ñ.¯Lõýö—e,õ õ¶»%|—¹²{›GšÌ€ëqöyÅÄ@‰¡ŠàÆ`•®[ûÍ¥Ý+Ûåu§ãªÑìLÜÔoN1œ“øe'®©JÎϵ՞֦ͭ¿àÝWB¶�UY-5¿ Ü\[?hr½æ‹qq³Í[Yex`¹Òõ&€yÇIÖmtýUaýëYˆˆ�Ԡ⯣‹vRZžßÝ~NÒò&�hT|¶p¨•åJiFiwJíN7ÓžP¾œ×9?ÔŸ§©ã=p{ŸåQþF¢ç¾^:ô>øÎ?SŸ®O˜§=‡ê9ëÀàtÉö¢à'^sþyõúO#ƒõWþ½Fúsì3Û¯ÇÓ¥1#o¿§û!è)=WõÿQ£PL©ÈìÙïÏb?sè¯;®žçM-ÏSøS�â�†Ÿ>Ïâ¿ xKÅ&ñ?Â�øZçÆÚ凅|7­Âkñ'CÖ|?'‰õ‰ít-UžÛâ<¾�6·{a§]C¢êfñ/&´ŽO㯤_žåúOx7ágŠ¿g¿´jšdÆf8(d\YÇÜ5ãG²Ë±ÕhÔþÅÆx§�q¶w•`3:¸J¸œ?Ö2Ê\OƒÃfO ^½b0ø…J­H¨ÉüÖmÆY&ÆŒ‡Šð˜‰fy g¹âðÔêGûGÁ9eØìNˆQ«ì±“Éqpjµ*u%J­)Nm£«ñìùq©ëúÞ§áߌ߳^± j:®¡£ê·_´¯ \ßi·wRÜÙÜÝxwž(Ñ|I¢\¼!¸Ó5�.ÊúÎmðËÚÿ;Ê|Vž[•e¹~yágŽYfq�Àa0yž‡ƒ~ çØ|&; B�M>wùi‘æ¸xÕ„½†?+Ì1XLM.Z´êZN1û\wÒÅãqx¬»�¼6Æ`18šõðxª¾ p®WV¾µIT¥R®]›f˜,ËUÂQö˜ln�z3¼' xGöt×G_‹?³úþÔŸ‡þïµßÿ—,[øyã·þ(oú9¿ÔLOýžÿâÎà_þ~�†>|JðN ú¯ƒ?h?€~Õ$…­_RðÇí�ðg@ÔÝÙ]íÞóJø�ipг¢3Bd(ÌŠJ’ Œjø¿’×�% üq­ ß–¯€~+Ô�×^Yð‹WWÞ×*< ‹‹¼x·ÃX¾ññ?�“ü3Ó7Vøã-P¹Õõß�߳޵ªÞ8’óSÕ¿k/�úŽ¡w P¡îoo>!Ms;… ¡¥•˜(8®1eâ¡OïáéCÀ_#ä£I|�Ÿâ›»âß êß‰Ü ßßýºtzÃß‹þÒî´O þÒÿ<;¢ß ÷Hпlß„ZF—x²äÊ.¬4ÿ‰vö—NL‚hœ?;³YTñs"«5R¯†¾7UœmË:žø«9ÆÛZRáÕºYè5ÀøÈ«..ðÕ'ÑxŸÀÉ?’Ϭqðκçý¯Ùƒÿ“à7ÿ7µ¿üFl¯þ�ø¡¼YÿèH_ê'þŠÏ ?ñfð7ÿ?Dÿ†uÖÿè­~Ìø”Ÿ¿ù½£þ#6WÿF÷Ç_üPÞ,ÿô$ê'þŠÏ ?ñfð7ÿ?Eÿ†t×?è¬þÌôÿŒ¤ø ÿÍíñ²¿ú7¾:ÿâ†ñgÿ¡!¨˜Ÿú+<3ÿÅ�À¿üýøgMsþŠÏìÁÿ‰Iðÿ›Ú?â3eôo|uÿÅ âÏÿBCÿPñ?ôVxiÿ‹7�¿ùúöu×O‹?³ú~ÔŸ¿ù½£þ#6WÿF÷Ç_üPÞ,ÿô$ê&'þŠÏ ÿñgp/ÿ?Dÿ†uÖÿè­~Ëÿø”Ÿ¿ù½£þ#6WÿF÷Ç_üPÞ,ÿô$ê&'þŠÏ ?ñfð/ÿ?Cþ×[ÿ¢µû0âR|ÿæö�øŒÙ_ýßñCx³ÿÐ�¿ÔLOýžÿâÎà_þ~‡ü3®·ÿEgö`ÿĤø ÿÍíñ²¿ú7¾:ÿâ‡ñgÿ¡!ÿ¨˜Ÿú+<4ÿÅ›À¿üý~Κë/ÅŸÙ�� ý¨þúxö�øŒ¹_ýßñCx³ÿÐ�¨˜Ÿú+<4ÿÅ›À¿üýû:kƒ¯ÅŸÙ€}jO€ÃÿwÚ?â2åôo|uÿÅ âÏÿBAþ¢bè¬ðÏÿoÿóô?á�uÏú+?³þ%'ÀoþohÿˆÍ•ÿѽñ×ÿ7‹?ý ú‰‰ÿ¢³ÃOüY¼ ÿÏÑëû8ëîB§ÅoÙ�É ¿µÀv$ž€ãÂI9­5ã&ZöðïÇwéà/‹Oÿ}!¨¸…¿øgÿ‹;�ùúzF•ák‚_ ~5Yø§Ç? ¼A⊂üá_ ü9ñ߆þ$Ý‘¤üIð§�u]{XÔ<¬èº&�gká§Ao¨j0ê—÷Ú¤ZX½¥­ÍÂöp�L÷Äϼ%βžãü‡‡|8͸·‰¸‡<㮠ϸ…J™¯ñ/ey6Q�âœWšæøìV+‰ÿ´+b08¹v –׎' N#B||@ò¾à.9˱¼IÂù¦mŸ�'ʲÞâ ³‰jÆ8(Éø‡˜c±9.#�Àa¨Ðɾ«N–'OˆÄbé:4%F•Z‘ð;#w;‰$ŠN›ªŒt^ ç’A ×§Oô e{ÝÛNß׿,Ö¶»DpÍ´~î_ïå¸$`ÔrOlçß×µOn½¿#ŽV¿BO&_ùã/Ô#ç¯û ñÉõ'ž•Öß×õæN‚ˆæùrzýÆ8ã=¹ÇLqßž2 µÁ«þƒü©{E/älu>ÝG�9ÀÍ-{Vþ¿­¤Ú‚6ƒK»i�C)Â)Ê“÷@#¿'=�À<®i{±~}þïø?Ó‰�£Õ�Ðc vÏÔŸaÅMí×ðþ¿­†\±²–òBÙ+ ÞHsƒÜ¢ä�˜ŽI N8Å6×mßü0„Ôu‘[NÓÎËXÆÉî#<ÉÎ8›©]Ã&ã¿�>O¾å+éÝü¿_Ĥº½ÎvEvU "Ÿº?RÄœäƒß#¯SÍFºYzi÷F!�Ÿ¸FôÇn{óß>ØïNþ_×õýw^_×õègý=¿^3ë×üŽ•�ÿ«úý噦Ƒ CQ\@2míÎ7\¾z²Ä#ƒÈ³“ò`5Å-Úô]ÿ¯ëÎ[è¾o·õýyX¸»’æMîFÊ‘Ž4ì¨;q×ש¦õý?±sÀõÆ>¸\ú�¯©þ¿¯é“crõ¬ËyËsæm�q�”/úµé•$rI=«GkõûÁ_È�NœH ·¥‰ãÉ=GEÎAüzt¤­çý|½ ×È¥âW² aΠª»É(]bì·,Îüü¸ù†3�¸NÚoÓÏÌ#—õ±Èç{qŽFsÜ÷ý:uÅg¿õÜ ü?.Üþ9Ï©ÿ OOñÿ=¨þ¿­{¹ô?Ó§N{ÿž:QýÀ꽯¯¦=¿¯‹€Ïq�Ìú÷éíGùü€¿mlª¢{…Êã÷Q7Yàî`z ÉÈ gÜ}æ´W%þ}Ñ-ôüË̽rc™V9pF¬Žú·ädz«p þXÆi·òÿ†vþ¿¯¼Äš'�ö>u`xe=Op>Ô�ûEœô?äwþ¹ôŸõ蟧ùúc¯þ¹£úù€g9ç¹Ï¯LýOçõÅÒþ¿@7t�'ídÝ]1ŠÂ/šGc´ÌWªFHår0í×¢�›•¨Æú½_éÝ´êuòÞZ­”� Œ®ÖíÜ î U@àü¡º–ômÃ�y•—gЛ;ùîqÚ¶–Öen-ØÍc/1H9ò²Iø�•°2ÍÅe(Û^ŸÖû–�ýLLõÈ>½{ž‡§ëŽGJ‘‡§?�>ßËôü²}À9FìœáSÐüuÇ_^™£þg ¼ äçÔœgœôíК/ý_� 'ž8ÇŽ½~�:Qëúþ»€g�þ}øÿðþ¿¦J0 ƒêyç>Ÿ‡Lc�Ï^[}õýlKaž ã¿\gÔ�>‹úòþ´ÿ0{/�‡ ÁëØ÷ë×üɤû?“íä4ïýnDAŸþ¬úãðúã¥-Wü?¯ß¸ÄÏ={ôßçÓÿ¯Gùÿ^`=98Ç×úžxúàb�ëúþ˜8>˜³ÿëÏ<ÿ…Öÿ×po+¬q©ws€£¿~p{s’q�É#±«üû�ÔÃ:<˜,·Ò/ÔF`z„ÄzÈÃŽ˪÷WŸNä^ïÈÌ’W•ÚI vcÎr:ñÛ € Fïúëùÿ]D3ðü»søþgééKúþ¿­@OO_þµ×õ¯`4´£þ–¸?ÀþÝÿŸ§J¨o÷ƒ*¼²olHü;zœwÿõ½ª\�ßϮš¢Y3÷Üž�ºúõ4s>ìeÛH&¸bòHé »³°í’'�â<sÞ¢›Ý»zöþµ%»z”uMPN>ÍjJZ¡Á<æR={ìÏÝ–<¶8JWÑmß¿õýn u{˜¹éÛ§?_óøûÔoý}úÏCþGë‘ïCþ½3ôÿ?Luïÿ×4_0 ç<÷9õ韩üþ¸£ú_×èŸ~8Ï¿¯§¡éš?®Àužð?‰üs5�†ôÓt,¡[½[S¹žßMÐô ?̶©âwP–ÛIдÈܪ=þ©ykndd†7’i7R’ŽïÑkwÙ%«»í¨ÒoúÛͳ{ÅZgßiØú6·¨xãŬð5ÿˆôàt�hæ)íZn‰kdÚ犚\*ÿoÝ� ÚE†[='R‰âÔ)'&îÒŒWG¬Ÿ›è½5~›·«ü?¯¸ó\õÈ>½{ž‡§ëŽGJ¡§?�>ßËôü²}Àü¿!×>øãüö£þã�¦}ÿLþ¼wïGõý^ )<ñÀö�9¥°ÏmýšOüdgÀs�� °îzÐsïù}OQ�Ê<{ÿ“ãGŸ„Þ#ëœùëýlk‡ÿx¡ÿ_©éq?­ùÛ®OéÛüþ5ÿ4˜hí§õý\öqÜÅ�±»üžçôü?*ú4ocÄÄKq|>â¤ðÿ¶¹¤�üŸ·ÿ>õõÙ áS,ÿ±†ÿR)že9µá¿ì"�þ��î_˜ÿÃXkŸö%|Jñf­ûdxSÀºž°Á¾ø­àYô�;{[{K{ù,´Ô7ÒK"êâöæ]ZðI5ÍÄ›¾Ð#P�Ão¤gÜCšb¼YÀdØœ_ü$åÜK“O ƒTéS¥N´¨aӮ䠪T­RXªÊS©RWöŠ)F1„aêç™Þ>¿‰~U_ÿ ¸,ÿ)– ¡NáZT¨/jä£í'RoQ9Noã²J1Š�œ|#Òµ8¿o[ø$°ºIlþ#|WÔ.Ñ¡qök ì<[-½ìÇcµ¸KË3mpÄEqö»Q È×0‡Ã†0µáâæ&2£QJžyÄUª'¹)Nžc(U“éNj­7 ¿v~ÒŸ#|ñ¿Îpí Bñ‚¬ŠT³¾!­Q8?rŒ¨fR…Y=£Nj¥>I¿v~ÖŸ+nq¼> Úø_á§Ä/kZ§Ä�ƒú^³ñ›S½°øéà}õ]6]Rg�þïý•íµi-­á´“RŠÏGºÜ\IöXî=SÙȳ8`ò|Ó ˆ«›dTqC^­.$˰îµVŒZú†/‘¼¡ÁÕ�:¼œš—$TÕ~,›<§—äމϸ[Šâªõhq†Q„–&ƒÄF�ö^?Ùºx™S„)ºð¥…©ÍS™ó{8*±ÄzW€o~$i¶w†ÿá#ñ&‡¬/�>6»ˆ|cw¡éÿ|7…õÙ<5â wGžiYuŸµéÍæÄá#ŽKY-áXü¶o«Ë%šQã\3Åb°õþ¿“ªë‚§<=<Ë °µÞˆ¡)6«óÓ|ÑvIÓƒŠJÍúù-lÿ âÞ_õü~³®xÈ㲪5pt3̾n2Y~;…œ¤Ö+Úáß4ZQŒ¨ÓpŠŠ‹~Gû.x®ëÄ^ý£þ+xÓÆþ%?¼9á é6>;_ü'3ð§…u ½Rß]Ôt-*òêÞyž-ãŠêù.ûÖ%»û�๞ÄOC<̱˜¼D³ 8|-(c?­â°øyʤkN”'%&ÒŠR’kÙEswRøï óJ˜ü»Ä.'ÍóœÇýaËò̯ C;X_í¬ß,Ë1q4ñ¸ŒµJsœ¡ q�ZÊkꔢªíxT¯ã¯øÇŸ³¶µ¥x“Ç¿~0ÚX|@ðƒø_âg‹þ^i6ž »ºÖ´«_é>6}CRŽhïü1w{2XßߊqhËßèqÅëˆÅeS…\^?1QÅPt1¸œ¦°ò•H*ÔÞ!ÎióRr|’•Ó¶�ÝK‡>Îr óÃìf1Ï8«‹iPÏò‡–ñ&mÃu°”²jµ1¸JY¦¦tñˆÉWË*ÖœhW¯xÔöN1Ÿî£ŸÚcâ÷ÇφŸ´]‡ÂŸ…í}áÿhpx?EøgðßEÓ">ñn…¤éêmn´Ó ZøžÓWÔnµ-.ôÜ´ñÃåKiæCsi$ãÓÆbq¸|Áap÷¥‡§0ÃaáìjSpŽñÚ¢”œ Û½­m¹åø�Åü{Ã^"aøW…Ý|G‚§”`xk†ðXh¼§6Àâ0˜uì«aœÒ–/W…®ê9¨òÎ�4*Q”Ïÿ‚�ŸµG�bG·Cð8òã9�1á lC¶<¢‘µ>Dù@;W�;qѾ>§øiz/ÝÄü×é%îø«�«FÀdk–/Ý�ü#àýØéulŸ,tè¶=;Uø—ñ[á‡üóöÖ¾Ý_øyu|KÒý§ü}Ú>4x{â–¹§ézåÔ¶^%ø…ð‡J[³¨�VM±K}jË8Ð­ïæµ“6úËêip³ë2]j¥¹Þ=ãkùôÖìåÏxÏ8Àð/‚Þ+q }§åÜ[˜a°˜ú´éaóN$àÌ"¬ñ?\•¡:ôZ¨²úx‰Ò—î±²ÅF¢ž:Uq?Œ|¥~Í,ý¥ÿkoM h>.ð–’ÿ³V¡j–É ÇŠhKK­BÿWÑ_*)< e»qmmm!Œè³˜Är.èS¾‡ïýŽ­¦ÝeýÚOiyIò­Vþ‡Ðf¹à çÄï²ÉÁeùÎSƒŸ†8Š*’…LÓÄZUq8Œf[’ÈhÓÇÔ¥J”œ^|ª2W„8¿e/…þøÏñóÁÞø…â]ÁÒÏ®x–úúþßOû}†‰i6§&�š…ì‘ÃÚäÑEa%ÃÈ%Š ‹‰ Ýp‘+} zµ0ØYÔ¥:‰(Á$åg&¢¥dµQWvîµÒçàp¶SÆ¡™a¼AÉs:ø\[Q¯„ÁaóÓ^­hI¹Á`¨fxâ)µz2«SŒ$¹MÿþÏÿoà­þø»gàï¿Âÿ#D×á<ŠÑÛÃv•¦|$o êZMƬ¥m Ôo5ëK»£É)Ô¥�TŽõm_N—Îa³l®WË牠±ÍÕ¢°Ž_¿�IæX…EOâp�)F~Ñ/f�7nuc×Ì8?Šj}"°|GO-Ç<‡“ ‹Y´i·€£‡¡ÃŸÙÕðÓÄ+S…j¸ºu)}ZRu䫪¾ÍЗ1Ó|ñ�Ãy5ø*¯Œ|}ð†½mã/ÙsXðn‘¥|:>²Ú€ï/mažK}BÖÜ�üQQIa¨O¬¶ßه—V¶Sh¶k}ú…ŒûS#ÅQ–‰)bêÕÇýb|Õñ°„šR§)jÖ¶ªS‹’—´úÌe5ZnŸxë‚ÌóäQ—⡘pN#.ÃÐÊ>¥O“ •Ô©ÉÆ¬!¢xÕºUer‡±úŒáNXzj¯ÔðNψŸ²6«ðãü^ø'â¯Þø+àO…ᣮµ jöå>* _xÑuŸì¥ñޤšgö„Úw‹Þ?³'†¼±­ÚªùB%~ˆwÒϸy㳬."Ü÷þ®F�EåNXܱx†°tÝ_fª`ÓæúÍý„÷»çû¿ sN­ÃeŸâ¨`¸_ƒéÂJ�Hc«WÄað*¶]QªXüNm^®¦`êeXL£W ^7˾~Ò Ö|k¢øÃZ§í+û>xóÅWz®›ðóõN…â|6ø­â->&½Ô¼9câÏx›Æ÷qøŠÇOŠK¨<'¢|RðWŠ Yà½×lí.ô‰xðÙ¦¥zxzSÍrÜEg8a©fôêÕÂã*ÅsN”kU«ˆ’«¦Õxº•Ô½•H§ïç<šár¼VmŽ¡Àüc”åôðõóœo‡ø¼<áìi*T1µrì*§,ZÒ�9æ8¬ƒ4ÀIÂt¾½„«Rž&? ^ ñjxÃHžîm:mZÒuKïøŸÃ÷S$÷:ˆ4ÆAwfgDˆ]ØÝÛÍg¬è:‘‚Øk^Õ4mn;[hµáO¤ÃÖöðmÅÓ© Ê•ZMÝÓ© ã}9£$ãRœì½¥)Â¥’•�Çs\¹å¸˜S�hâ°¸Š±˜ e8¸Cƒ®›§UA¹{:´ç˜\]zŸUÇañ8WRr¡)=‹ïù hŸõÖÿÿHd­Ï1î¾a¢ÿǽßý†5¯ý:]P ¯«8?ˆ^'ñ4:¯†üà%Ó£ñ�‹£Õ5)u½fÞkÍ'Á¾ ðüšd!ñMÆŸÖŸÛZ ½ÖôMÞû}“jž®uk‡—Cðîe8,¨c3\ÕÖyvУ6q§ˆÌs\kK �…YF§Õ¨{<6'ŒÅû*Š�  b±x[øY¾;ø,§)TVc˜*õ¥‰ÄÂU0ùn]„tc‹ÇNŒeOë5ý®' …Á`ý­'Z¾!â&å…ÁâÒòi ¼-©Eañâ§Æ�gÄ6öqkþ³mñGâׇí4 æyáµñ'Ž´ïƒ:�ƒ¾xÃ2Ígw :æ¯áÿ èrE§ê×-pöšF³ueî`±yæ2”ªe9'a°’©,><�"Åψ„c)á2ÚÜEG1ÍóÂañêtð\Ô²ìÓ �£[™Â¦½Y¬e‡ÃS«Š¢°“¥€ÄÐÃOKGèÏÕ:˜þ¯‚•\u\Ó Æbpø •1¼µs<«�¯C•Ξ'F–b1Uia+¼d*ãðÕñPÆÖÌ+`£Z_¯”>´æ`ìÚ@ÀÀ×/p;pú¾?.Þ” ·¯êΔ�$€$’p’Ià:šy?ˆ¾"x#@—~>ø“á?išª ´; gź'…çÕl c ü—ú�å•뛤O:+}2[_²Åº+©.&ó +/Œ_o.­ì¼?ñëá캭ܩ�¤_ü=â/.‡•lºmÿˆ5¸ó\hì…½äˆÌ°\C!YØt›ù¯"¸Šî%ƒPÓîZÊú8ËaSÅqlÍó5µÝ´ð\Ä³Ãæµ´¬g‚Zf£ÿ!þ¿®ÿôѨP½FaüEÿ‘ÅöºÿÐE]/âSÿ4Lþ z3åŸ ±á}p8¡À9êyç×½{Ñ_×Þy«V{f’¿ É$}Çc®9‘ÏæMh"–½,±ø›Á0Ç}­ÛGsq¬‰­tÝ5.´»á”n©­Ý³nÓÒ –³uI<é|ˆöyÑi¹*iedìÖ¿euo®Ö_q”Û礯5w+¨Æñz}§Ó˾¾§m±{ûôãüÇߦ35 ‹ÿêãüþ Ë_OóþzûúPþ·×=óþ>¤Ð°õ¿oðçõ `÷ÿ?áŽ(þ¿¯Po¿¯ë×®>¾ôXónýºˆÿ†Ùý±µ7íÇsÿkÅÀúŸÏ¶3_èÉŸöLä_ú«Âÿ_ðÇó¶wÿ#¬ßþƘÿýKª|¢ìsØø£¡ÉëŽ=3Göo—àZóü@øxsˆÀӑׯNGÝéÓÒ�ìßîþ×üúטÂ=�à�ȧ¿üû‘Göo÷WÜ¿¯-ë>bÿÂ;Ôlý@çý“ÇÍŽéÀêhþÍþïÊß×ôÃë^}¯ëïè'ü#£��ø çßÏAÇNœŠ?³|¿-ë>`<=Ü!É_§`ŽN}¹ÿ³WòÿOMCë>aÿ÷?w'go˜'®O¸ÇíÙï¤á‡õ•Þÿ×õóáò wÁc;�Sž—¿J?³Ÿòÿ]:Ö|Äÿc‘ŽŠ8äç× ûç=¸ÅÙïùúϘÂ=Ó þzúóòžA>ƒž”g¿åü>_×ä?¬ùÿ_×aF€@û§<ûtéÏ~sïí‚(þÎËøm×úü…õŸ?ëúþ´áóÇÊ<s×#±�Ät=¨þÏËømøO@úÊïýuxx“÷3øz÷èÔg¿åþ¿¯Ì>³çøÿ^AÿùÁÎ8È=HÎ9÷<ƒŒ{ó“û;ËúüºkêYóþ¿¯ë¨Âc—í!®}x9>ló߸ç“ëÃþÎ}µô²Ð>²»ÿ_‘9м€Uon€éôÇN™é�޼œ7—5ö¯ëo˜}gÏÏúܯÿû�§¹�õŸ?ë «áÖ$(BX‘€%�¶$¶>÷å�g¾‘û¿¯.–ó¬ùÿ_×ôÎßJð¤zb-ÝÚ¸8Ùpž@\�õ˜ûÎs·¢“‚[²Ž_É«Zÿ_äcÁ„v±ü— �Òöhâ`yR>üƒ–#äáÛ––[-ÿÒëmz~‡7çà�ƒ Û³±ç=FO_êNIÎÿ×KmýÃnàÉ’ ({õdïƒÏaÐçØžå¿ëò·õÿdŠvÇ.ÞHTýXdõÏ=ÿ§J·ß_ók縿CWEѼÄ[ûÅýÂ�ÐÂä'žãî3*«GCÃõû¼1ßW·Eßþ¤ú/ëæ‹÷6÷·R™$0Ò8Öâ-±§UPؾ§'ÐUjï{X­×ÖÄ#L»?tDp2vË I<œ‚O  rh·§Þ>eý_úþ¾C—N¸L#=O�=z6xqþ¬ïЛê%ë¬÷r‰“qDR �쪫òz䃌g=³œÒoÞÓ­…oëüĹ»�F‹jí“S‘8 ¶HßÄÃ$N~Uú6’·o6ÿø#³—§çÿãÞFvw‘‹;�ÌìIbÇ’ÎO-Ÿ\û{V×õêia„ã¯?àsŽÝ:þ~� ……íÛŽ¹úgÓŸåŠ?>ÿ×Qôî@é@~_×õý1ê3ŒöÉúç8#®@O^þô…²0§œð1ž¸ñÓðÏ9 >_on¨«qp¿)ÿUC!ôùÃuäpÔ—WýÀëo¿úÿ2W™¥r\õùF:(ì£8ã“Àü[DµÛ¡4Ù&#ƒþ¦>Ç¿l�q�ëIÿ�º|ÿ¯ëQ¸¡†e;@ýÛà“r¤òÃ=Iä<˜ÖŸ×õýw2¦ŠH\Æã§øXg9£‘œäŒàò*J!ñùž8ïž}F1ÓÒ‹ŒÝÒt“y›«£äXC–‘ÉÇšWøõŸ¼ã$2Äâ£êô_×ôÉnÞ¿‘§}öŒC ˜¬âc�FÐB’2ÀwÇÝž§$·+í¢[¾÷ŸÞXœÿÄšËþ»Ëß8Á“ëÏ éÛŽ2?�z�|^Vÿ" ;Ñh.Mg0ı¶a¿‰{‚$àŽØÁ¢2èö)«í¹“ªéFËmŹ2ØJG•*�Û3ÂÇ&:¡\çv0pÀÒ’·š¨'}:˜ÃžN©öã¦3ÓÔútéRWõ Ïp21ïÀéžÞù “ýÒúX=~_× ™ëÛžŸŸò?§µ&xöõÏ\ `g¯?ŸJ8s�ëïùsíÐ{ {Œ“p^rLgŽIþ½jºYü€¶:wýq×èxúö8Î*IØñþ½;`~TÞȧ²ù~CsÇÀý{÷üøÆxÁ ‘x#¯®=3ÛØgùŽhßôÿ"“¹ à’ùϰã¿óè0)= ž¿ÈsÛÛ×'é�Τ×àúúýzcèhñFó:dzÈäP9'Û¶É'�~´zÇ]miý™o½!k‹É2¨YcÿgŒ•QžNA�ôÂŽ5K—[]ù_üˆz¿/ÌÌxo¤v’X'fc’Lmù‘Œ`pÀãÓ ¦ú;ÿ_˜;tkA ­Èëo1ÿ¶mß8ço×óôè­.ÌBý’ïþ}åãÖ6ôŸ—ŸåŠ9_g÷�öK¯ù÷Ÿ¿ü³÷#éÜ�ÐQgÙýÁù_×ôÍ :Þhf3L�G„™\猀{Á>Ý{ÕE5vô@ÿ¯ëüŒ†9f ýæ-ÀÆrIútü=ù¬Ûùwþ¿È½gjn÷ù Lï~€…ûÁIàu8ÀúÓQ»×n¯þü·÷ÿ_æTÔõ10û%¯îíSå%xóˆàr@;:�9ÝÕ» %+Ù-�%ש‰‘ŸN_|wþãŒòjnWõýL\óúcŸ¦¯Ôš3ŸË§ãÐý8ëÏ>Ôƒž?3ÁçóϨÆ:zQp ÿõÆzcŸÇžx­z¦¥ð×þ?Ë«|@Õÿá×u>+¿ x;1¨x·QK ’Úê~!±76‰àíkgûEµÆ¯!Öõ8ÞÖm'Ã÷ºdïª[Ï=ߺ¯må²^�ߦ�ÚØvï¿n¿>Ëñò<Å.'Ž)¡Ži£Šà ¸‰$eŠaù‘‰Q[l¾[€ñ‡Rù\š¡géÏ9õÿëã“ù{Бôc§Þ¼çó4™éÓüý; rO§Ò€Oóãß�Ó=¿’3þÈç¯lz~ÈþžÔ™ãÛ×=ýp1�ž¼þ}(g~™ÿ#òíô bÿŸþ¶zrzŒýh c§×~‡�¯cŒâ€zÿSýzvÀ4¹Àçw<ž}úçüàö4¯èŸ×¡í³QÇíðþk_ÂÌŸ§Žt.ž�Çòç¿)ñç_|gÿ³Qâ/þ²Á­ãÑôöŸÝÏúÝœõ=|UønuÁá/5•§‰/[S×4»Í+EÖ´�CPfçÒu­6ûO‚ërÆMÅ¥½¼¬!‚6cǹ/gYWÖ éÓÆTu±4gG_V³wuôªR„î•åN1“QŠo–1GÈåÜiÄ™×Y˜º4ñõ]|^¶‹ÂÖ®ß7¶x\^µUº‹ç§I¨B-¸Â1\¾£ñ¯â•ßÄ+oŠÓøÏUoX¾l¼@¢Õ%³ˆC5°²µ²[q¦Á¦ýžââݴIJoqÊ4¹e(û(ÁS´¤œlÙóø¾0âJ™õ>&–o‰yÝzåìԨǒtý•**W†ÙÔ©†TU Î.�¥$Û7íñ–?ˆoñV߯×~;’Á4«�gNÒ<=¦Ã{§!R,uÃH·Ð5W‘Yá¿Òîâh¡šq,ÑFëô43¬ÒXïí­Ê8ÉAS•hR¡MNš×’t©Ò�ÆömJ›æiIݤÎþ ñ|3÷Äôóš”s·Aajc(apxVÃŦ¨×ÁÑÂSÀâ)I¨Êp¯…¨ªN0œÔ§És_~=üWø·ia¦øëÅ“jZ6—9ºÓ´ ;Hðþ�mvVU7ÃGðýŽ™§Í¶âáEýͼב¥ÄñG:E+!ö§™c±êœqUÜéÃXRŒ)Ѥ¥¯½ìèÂæÕûÍ9jìììxWÇ|UÅ”¨a³¼ÖxŒn¦C„À`)ÕjkÛýO‡Ãaç^Õ*%^­9ÕŒjN1š„¥«¦þ×_´O‡üoàM+â^§oáû>m'Ly4í ë^Òt»ˆ„c¤ø¦ïKŸÄºd n©·Øµhd²·Š+{·†Ñ~ƒ ™c£F4"\‘�$o9Æ/KF£‹©k$”½Ô¬¬’¼EËòxdXN&ÅSÀPÃÔÂa¥,>®? †©NT0™­l-LÏ M*t½Ž.¡N0…S„#á¾$xÏâ·Š/#«ƒÊr•�XLµà2¬F Ç2Äýo±tq8Ë0SÄsT¤ñÏ,#�Eƒ–Tš—˜ü\øÏñ;㈠ñ'Äÿ^x£U´µ]?N3C§éºv™dÙtÝ+JµÓô�>'s¾áí­!’åÔKw,Ò(�{¸híÒçÇqqWf”ó>+Î+fغ4– Ï 6 „¡ÍÍì°¸<%,6 JÒ¨éQ„ªÉ)Ö�I®cèÛâf�Þ ýŸÿgŸxÖÇÇ>ø5ð÷OŸÄ~ Ñõx5ÝTøƒâ8#¹ÕlôýZÎ{‹CJðµ¦Í/Eû,’.Ÿíæ˜òÉ%³¬^¦“æ«ZQqu%h¦¬Ô#¶ŽÖrëè™ú׋¼Kƒy/‡žd¹Ý ÷,à®ÃO2ÌpXÈcðx®"̩Ʈ.ŽF¥JŒ&UJØL²”–�zØYNR¤Ô??§n¹ô?�åƒßŸ¯­}6;Y_ðçâô–ßçýjzWß�Ÿ~è_<5ðãÅðŽèŸt˜4?ÙaxkWþÜÒílõ»-~Ó®èÚ�Þ™²ÓÄzÌ^~�>Ÿpßlóf’ÞÑàô~¡…ÅÏ5Öm-¾Åc.¤ÖðYé¶…ƒ½¾—¤éÐYiT3H¢k„Ó¬m–æ|ÏqæM—>þU–à²ê~LJ§‡§'Í% ¹N[^s“”æÒÑ9IÙh´:³þ*â>/ÆÃ0âLÛ›b©Óö4§ˆp…:·pÃá¨B–IsN4(ÓU'ïÏšZž£mûz~×Úg‚áå‡Ç_Ûx^.=Ý-ë¶Úl1"¶µñ‹é-ão&Xbšß]Žâ8UbIDjoO„¸v®+ë“ʰò®ê{FÛ«ì¥6ùœ¥†UWníJ“M»Ú÷>× âLjԲ¨äÔø¯2†#…‚K ñp¡¨Bó'‡y”9`¹c(bã8Å(©$¬xׂ?h¿ŒŸ < ñ#á·�üdÚ7‚þ-Ø\é¿´‡Ð|1«?ˆ¬®ôÛÝ&â&Õ5­QÖ4Æ—OÔo 3hÚ†�p Æu•n)Séêä9VcŒËñøÌ'µÅå“�L U[IPœjB¤Z§J´)TJtã+U…Hék8¶ŸKÅÜE’åyÆM–f?VËsúR£›áž]âéÎ�L<âëâpÕ±\©U©,5Z2÷¹¹¹Ò’]ö§øïá?ƒš÷ìÿ£øåOÁï¶¢Ú§‚u� x/Ķ;õW†{ÆÓoüIáÝ[YЛí�GªZ6‡©éÇNÖƒëzyµÕå–õý_õ_$ÅæØ|ö¶ þ°ÞÏÙc(ⱘiþé5R|E*5×$�9ûjuJ?¹©ÏE(/W/ãN&Ápþ#…°ù•ò [ªëe¸Œ]Œ§zî2¨èÕÅá+â0߼Э«U¥ì±ÄÒä¯)U:EªêVÝCe¨ÞÙC{Žò+K¹í㻌,Š#¹HdEž0²Ì¡e¡e‘q‡jûjT)Tpu)Ârƒ¼á8?wXÝ>W¢ÚÏEØòðõjÓR�:•!‰)Ɣ՞“QiIZRZÝYË»9¹�_óþ•};_×Ì‰�óÏä{×¹‡‰éRG?~pöõì{vÀéŸLׯN:/ëúþ¶=j úéòô?·OÙbÊÚÏöGý™…¬KÚ¿gσ·É3\Ü|6ðÓK+’[,ä �º E �ó3�ÿäºãOû+8�ÿWÃûŸ…\-ÃvV¾C”7æÿ³°×gÜŸøð¦±ÿcM÷þš´ZüëüwþþGÖáÿ†½Y꺟ü~øwþÃÿê?®W2ëéú£^Þ¿£9‹n¿¬ü,ø—£øQ¤Oêßüe¦øiâdIW_¾ðæ¥k£´o!¤‹¨ËlQ¤!€,Bƒ\¸ÈT©ƒÅÂ�ý´ðÕáJÛûIR’…¯¥ùš=ž¯ƒÂçù'0Ià0ùÆY_¤›‹ÁÒÆÐ©‰RQ÷štc;¥«Z-OÇÛÄ^kž8ø9®x&-ZO|Dý—×Âíô­aü).¿wñ[á/�¾/ü&ð_ˆ&¾´‡Ã?þ4þÌ6µáO¥ÅÅŽ£â4ÝsÃz5ÿö…ËD~#ˆyªWÀÔ麜¥QË£ Ž‹©)c0Uñ¸:\’¥ŒÇå0©G›Rª¡R”%ÌìKxIìð™WásIaã™ä¼xó-ž# Â8:tx{ˆ²¾â,ÓU%ŽáþãÌN0ÍÜ!V†uð˜ìU/c#â�Oá'�;øê[ÉVÕu_‚“Ãw l²Ê_¾1ø¨Þ4–̺(™tñâß=ý²ÌUšóLó‘7Âïô­*¼/–Fšst8—5XÈ©¸Å,v]‘¬µTIû®¯Ô3UJn7µ:Ü­ÚI|Ô[¥Åy›¨Ô~Ê^ N Ro™g¯3tÛ^ò¥õü¥Õ‚“W©C™+Å¿øWw¯x_ÁZkÖá»ñ~—¤ø‡OÕ~xWNø…añ*ãVðÖ”òkÞ(ñ¯à­kZÐüa¯:yúÚüLÔôŸh¦ê×ÃÚŠõ}EŠý‚²š3�ªtO9È3¬ViJ¸bñPÄåx™Õ¯ÊrÉð5›§S· Îð^K—á±<OŠÄa!ˆ¯™©gùœóÜN".§Öñ5pXü < z´%B•J9œ)Ñ¡({:y–.ŒHç}ŸRÒþ~Ð>½²—C¿²ñ‡¼1á� ÜÜéÒCá¯xÓá�Á«í'Ã:,Zuåî�¦yŸ¼_4š^—ể iú¾¥äxj8lÆú¾§™ÃÀ3Ü~8Íéäηgx:3£K8yNežÑÌsz‘x<Y,FW—º¸‰ÖÁajJ”%í¨Ó÷¢¾w?–û�heØZ¹vy�<6K•âjS©<¶®i—ä•0m'F.Œ%O4ǨP… MjQ­8ª’åoï ø£îÎføöÒ?ì9}ÿ¡êôÿÈ]¿Åú³SYŽYt�V(äÓo£„&C™^ÖUŒ.9Ü\�¸ç8Ç4†~2ÿÁG%{‰ÿ µG†[ß \|.‚Ú÷K‰Y¢ñþßÕç‡M� �dŠäêè‚]47¶¯ý§&›kvùíáai&£¤i^Óµ½'Pº×4¹.n56[›½rÒKØCè÷v¶6kc¨ %º OÊf–ñ­&‹FÐÐú›´(úî²Ñ`¬vz=¼åHÀ¼S©Nèà%w6rò¤‡¨Å;Qÿ�Ž�ÿ_×úhÔ(Þ¿£0þ"ÿÈ�â�û]è"®—ñ)ÿŽ?úR&½òß…€òÓýÕü28÷àäc±ãŒsï­Ï9n{^“÷±àcýÉ3Ïà*É:¡Ð}-P@Pù´~ÝGþ3oöÅí�ÚŸö„üÏÅ¿LÐ×úÁ¯þ0îÿ²k"ÿÕ^þwοäs›ÿØÓÿ©UO“Øœ~œ�ÇŽ8Î9ÏC×µ}ֿבçkù1ÀúôuþC>£€=¹¬Ûér¿¯ëþù‘×·\ã>ýýñÓ§­KÜ{[1„ú¾ý{:ƒÆSÛ¥¿ëúüFº ã$€xÏþqŽœÏ^ýSÖÿ×õê1™ÇRy'<ûç9÷ü1×úŒ\ñ×®r~™õàëÐç—õ`Ôöíÿêgÿ¯Ð`SÉëü‡=½½r~˜àúüOÿ_¯L} üñü¿Lý(Ïn�»qÏÔþü½@8Îxé�êO¨éÎ}½¨ 8ëÏøã·N¿Ÿ§Báa{vã®~™ôÇçùb€Ï¿õÇÔ};�:P—õýL3Œüþ§ƒíÁ׌ûÐþ¿­Í­GÄZÆ­a¦iº•ë_[èé$:kÜ÷¶Ö²âÁu'ˆß¾Ÿo’ÖÂK§²´’k‰-a‰®%/NnI&ïË{w·kïnÊö],DiB”£=efÔ[þgò©?µ$®ÒWzï‡õ{ /LÖ§µÝ¤êÂE³Ôm¥†îÓí³¬¶Û<±Ùêpª ¥Ó.Œ7Éo$7-†h�Ç$¤ö{=×¥ÖÍuO[kµ‚5!)N ûð·4ZiÙý¤žñmÙJ7�î¯u¦&{§ù'ïÆ§ÖJ Œúp:ûã¸÷÷g“EÇý_Ó_^?@zr¤úÒlõ Ö²1Û#¶G_¡Ç^–®;”¤¶ß‘‚yqÆGq×Ôc°íÎ+SLµ+_×ù”žÅOðúô<ãòçÜvÏ5ƒÃ§ÐÑT·õý]ˆ¿³G'iïž; œgŸÓŒg¨¨ú´{"•_=¿¯ëК¿Ü÷õÆ3ëžGnƒœv>­Áí_pþÍ\ðƒñäz=:àã >´}V?å¸{_?øëúÔ?³Wû¸ qÏNôÈêIæ�ª®ß˜{]õ×úþ¿à ýœ½vŒòsøÿB2sžFyÍU�—â×Ì_ìÐz¨ã#Žzzöïמ§®ªÇ°{WýoÐ?³ÆsŒg±8Ïb§nô}UvüÃÚù‰ýš¸_”tàñë鯩Ï~ý(úªìÕ÷éªùG<Œ�~=½ ÏŸz>ª»~aí_{éýn ÓG?(ãŽ?,~,=AÁôæ�ªÇ°{Wßúþ˜§M^Ëœò8çÐóÔ~¤c(ú¬{µb�5;&9÷?SŒv }¨úªì×úþ¿¿Ù«ÝHÉÏë×°þ\ŒãÒúªìƒÚùù_Òi«ÇËõãüp??¯µ?ªÇ·æ×ÌpÓ†AÀœdò;Ç óž¼œt}Uvkþ_×êN¶# 3ŽÀw¡þ IöÇ,0E¬2]?­Eí^ÿ×éþB›!ƒ�ÇzçR:ݺuÁ¡Ðòßúíÿ Ô•S×þåòeWÓ”çå眜x g8ëÏ9¬¥†]¿¯ëúFŠ«¿õý^EFÒÔŸ»ŽØÆ1×±'¹ÆsÇqÎ+'„O§Rý³ü<ÿ2?ìµä”úqŒú’1È÷È=¾‹êˆ=³þ¿­ÿÈ” r€÷éÇ·@Ÿ‘Ò�ª.Ì=·Ÿô…Jú.qžG3Ïñ�ð#4}QvüÛ>ïOëôüDþÊ|¸«îyÞçŒè1GÕoÁÿ_x{gëý~�(p6ò3ÆÑœògŽq×±9ïGÕoÀ=³þ¿¯ºÂ %1Ðr}'¨ãóø4}QvîÙ÷×õÓÌwöRð6‚NG >œ6åŒ�hú¢ìÙ÷û÷þ¿!”¤ýÓ“�8ï�p=òcÑõEÛþ¡íŸÆß×a?²—®ÞÀôüǺñÀך>¨»¶õþ¿¯ø7ºB’T ÏLøg§ãõ8àóGÕ`öÏ¿ãëúÜ”é©(‹ó‘†$gç ò2õ§õ5ÛúüEí�÷Ó§ôº�e›rr:€y#ø³Ïc× àõ¥õEÙ]¿¯øÛ1•’ª©’ÇTsŸás“è9 ž§Õg÷_È=³þ¿®ˆëì<9™Û/W7$.<cÈÎÁ‚Ù��¼ßu g’tX$µi]í¡»nÉ¿7ýL­%¡�üÉž¡GÝŒF9ç댓ۊ¥…WÚÉy Ô}ÿáÿOòÐÔÓØL%ŒeN<ÈÉ‘rN¡?0éÀ#­tÓ£ÊÕ‘”çëú¹ÕϧÃuÛì‚34 ƒÜ…ÄüËÎà7.Iç­CK¯Ÿõý~& ô}úoêd†ÀççëÔDZ9ïÉäÕm§õýt×õ·ù‚œ‘ßœc§9¦{~#$gÚÊèÿ{]ÿ_oëöqéýöÁü°};{SooB!×úþ¼ŒL…¦HëŸè1Žzóùô¥r·ê^°±’ñòIHTæIç´gqëýÕê} µÂNËð_ÖáªjˆPéú{yv±å.'Cƒ!Ï1DÕÁùòWîgzrè´]X’ê÷éý~‡2òQ„*ñÎ:ŸPOçØòMCqV£'�ëþG°í@ÉDž_Ns÷—<œóØôõãìh¸oþ~dÈ�‘Ê6ð9ꤰ#ÓãÛžµ_×åa ªHó?ž¡í¥ßþY¬yùLC�?…‡,G8gÖÍ[Õ½®¾dwv¢³ÂÆ[I‰1ÈÊžs •׸8Î8èjd»l ¿ëúØ›M?¼¸ÿ¯®>‘Ÿ|ÿŽ=8ª]¿¯ëúc–‹æ¿¯ëõ(¨f`ª˜� rrqŒ¹ÎÆ:Œb�Ôvü ÷1èÑl%Õ%^œ2Z#Œ†9ë1 gП”é¾_V¾ïëúó›_ü:|ÿ®§ òI+³ÊÌîä³3KÉÉÎIÏÔŸLu‹—·ÈgO^¿ãøwì1Ï~„õù_†âçñ¾ƒŽž�‰ôêhõý]Dè?Ͻ:wã¯åŠ¿—õÿ 8 òsŽäþ_™Ïø_×õ¯õøƒ6z:z8ê{qÀõé�>×õ¡£mn¨¢âà|¹ÌQƒ!ØuÙÜ7c?wŠkM_Éw×O%òü<¯+—r2z÷@'Ž8Ç-ƒžõIÜv¶�qÔzuϨëüý=²x¦×Oëô.K3§”ªÄ~ê3Ó×ׯ_¨äçÖ†ßGýkúßúþ˜å–@¦Y¤e‰zðbpv§©'ðO å&ívô··õýHȺ¹k©7ž~T^p£Œóê~\’F}† Kwe¥ek~]mý~F¦‘¤}¬›«²`°„“$‡f*rQ]§øÜ¸Ÿ?+Q�õ{)[E«×ÈпÔEÁH Q œ ¢PT0P0Yxéü#QÎKS‡arõë×úêgÿ3ýp}Iì:cŠ€íÿ ý[›Sœhö]ÿ/?÷óöãÓ×Ú¯ì/먖ýôÛ©� ÇLÿŸOéî=F ³FÊûÉ ‰­%ÊÉBú²ƒÀ<ç£ Ѝ½ïªWÕh×õ÷Z™Z¶–ÖDOlÆk H1J>b„�¹&07ŠN3Ž›ƒ M[Ó§õý›‹¿“êaçÔ~ð:v8ïÛóRWõývØ3õî3ÿëãœvüOZýÃuFîãùç>ž¼;u¡j_×õÔ��£ ÆG×ÜóÛ?AŒ¥Zþ¿¯ëÈ?®¿×õ¹=Aç“Øú3ëÉç'­0þ¿¯�àÜ`ã�‘è}Híùöê)4K_çý_ðd$‘ƒßÓ?Lý;ûôÏZ: {.úi×úÿ‡œzûþGëÆ3�çÖ¤V}¿ËúëýhŸn¼cƒïÓ¯R;P~wô‚yèx?ýo¯éŽï}>çý~'ý_ð|ˆˆÇcƒ×¡ÆzçÓòü*Y[�GT�Y݈P r{sø@°Q¿Ì[|¿¯ó:hc‹H‹sm–öAŒ ªA8Ây¸g#Œq¢´}IßÒß×ü7Bô—ÝÀ&³•’D¼·Â“З#9àó¸tŽn÷Ùú¯ò¬ìþÿ¿úf?ö�ðãÏqƒýÔr{mÇ~ÿ~†nû²¹WoëúûíÜQ©^޳¹É—ŽO��‰ôêh»èج­ý_ðY¥cw<‘^3Ê\Çä$/ÊÁd9àã¡Ï¡ô¢2~õÞÉ‹wÛúÿ†3ÿ´oéø*u?ð×'Û# O4»‹úþ¿ËþŠ[»‰—l“;/¡!w8m¸Ž™ÈöèJm½ØÀþ¿BÅ�›\±w>\I‘ÉÛœ � ãÆOEû{¾‹¨—æUÔµ10û-¯Élœ¼y¸ìI1‚2½äÆ[®)J]‹úe¥Õêÿ¯Çî1xê=:çÔuþ~žÙž¼=9 6þ½E–GòëÏAùvJúê!=G^OcÇ×דÏ=h¿×õ°Ÿ^:g>¤vÿëcŠÿý_ðL’p{úÃòïïùŠùÿ_×â;9¼c9çó<ñŽ™ãß­/ëúþ�ÿÚ¿fßÚ/à§ü.¿…ŸCÿÖ…ƒßžO|ç'Ø~SãÇü˜ï¿ìÔøˆ¿óPÎ ¥üZ_õòúRþ¿CúÚ¸=Ï'õíØ…ͦ;_Öçn"[ýß×õèb\7ëß¿{ÿúÍ}?×õòÝkè0ÑÛ¯õÿðñÜúâ7ÃM\µý�ué0é0üZÐì|3¤×wVÇÇZ^¹‡®Þ±¹šæH÷Z„?èâE‰"´c³9ý¿8áœ6‡‡X܇ 8¯/ÃåØŠt¥V­7žá1°Àãë¿k:²§í*â ýš’„cE¸Æêmû™æM†ÅCƒëåT#‡Yþ– ¬a)ÎÚ”1QÂâª>yÎQR�hû©¨¨ÓvWægQûJ|ðM¿‹>ÁðƒO[ƺæ³ðÒá žîõá2ðÏ‹‡‡/nn$ºšå„÷s^í�dÉ Í¾�öˆ …|Ʋã~É©f|7ê8<Ó‹È'N­Uý«—fP­Rr«9µ:²«ei¨T…xB:¶øë†rÈæ?£ì°Ù¦/‘MBU*¯í<b°Ug79MóÔ•[+IFp£ÏGÞo‡ñÿÁMÇ_þ"øGá„:�>ü.²Šx£^Ôo—CÑ“F†+MoRÕo® äÒj—ZÏö�­�„%>Ò,Ñmá‚êhuÌ8c ™qVq—äTð™^Q‘S…$ø2ãS×ü;á={Â^´{£ã/_ÙZÜÛYi÷‹o¤Az· ~ Ë}%­õ­¼´ký'…§–`ébkf89ÔÄa°˜Œ. \Ä}bpŒ£ [òÒSæöšªŽ3Œb¹nù¸›Ãš¼?”RÌñ|C”TÄã°f7+Éi:ŸÚù‹Ì+Ñ¥R�+÷•<$+*Ž¿¼«Ê�jp„\9¥~ÙMTÐü#â�Œß ´‹z°Óî`ø[©^ê/s—ÐCyc¢j¾!·²ŸFÓµýBb†ÓNºÅ­ô÷ËewouÄžít'K‰Ì°³¨Kû>S›”yÒ”iT¬¢éB´“J0—»6ãË9FJO*þË ŠÁeY—p¾ŠñW©O†q5±¤e^­CŠÌ)Ñž ŽÄBQ…=_ÝW�Jq£^­:°©/uñWÃO…¿ðÖµÄZ·Ã_k^øeð_ˆ>ðU¬w^Г\Ðü ðóTEŠÛÃ3iŸg[ù®o’çÈS¾MBæäÆ÷/¾¾²X<γ•,-)RÂàV"•§Jš© >zF—"\ÎR½ºÉ»]ÜúìÛ†ø[þ"§‹QÅðÞ]�˸g€çÄvKJ5rì Ç`r>Å%YdðÜŠ¼êWU9½,EJœ®£æ>pñ?ƒ¾üRý›þ&|cÐþ‚~%ø_âéöréº÷‰5/ xþÛĺ¤Zmæ“ooâi.^kCŽå5‡Ó'y<©,ÅÒ¬3–ƒJT°øœ\L0¿T� ÓŠä�ISª¦ù\mQ»J»q}“ÜüÃ6Éø_Š|6â~2Àð‹àœË…³ £FXl~e‰Ê¸‚–gŠŽ¶�<ÊU\1¸ÔXŠ� 6ù%EVJ�KÓ󿌱öµðŽÛO‚ÿâ?‚uïx–ïÂVþ øy£Í3xÏÄðx Åoý£“+‡Óì-µ9¿²­æºbÚ�ݵé†8`·ÍêÇèYJ¤%'ËËñIK­º$ôMîïd|—ø9Žá XzxŽ%Èó ç3­”RÈøs9¼ï5†láOë1ÂNIá°ô±Sú¥)Õmâ«R®éƦ¥;çö i5ãð;?| ‹ã¿ÙË/Âss®6u/²›Ôðáñ˜ÓŽ€~"pd<@öw\ êãÝñ^É×YcÎÖû9fŽšåxD¥jÖƒ©ìß¶<‹á÷ì¿uâ_x«â7Ä߈žø%ào xå¾^jž+Ò¼A«ê—^>ŠØ]Ýhš…eqs�:Ü—Ôn¦š%¶e“ɵ춾Å)r¸Æ0s“�2I¥î÷»ó>/…¼(­šdÙ¿ñOå¼ �åA.­ŠÍð™Ž3[ˆaMV­—RËòú*ÿ³R»ÄÕ�H*MI(N4ëΔ©ûxúóãdÿ-¼[àK�:ÓÀR|Xºø™o«Ésà¸>A¼þ,Ýoš«„¹q¦�0Y ³~É#˜ô‚Ú²úÔ±P…UÂmºŠ’§Ëï:¯hêíªÖ÷Û»Ðö¨x)ŸÔãið}<ß!«‡¥�K‹*ñ=,dªä‘áxAJy½éÂX§ËQ¬7Õ}‚«õ†¥'#úÚó¯Œß³½ŸÃÏè|ñ_Á_¾kž"¹ð„š÷†"ÔômODñE½ƒjcKÖ¼3¯CoªÚ%ÖŸ×6—гBéûHµû^Ÿößs‰ujÊ…JhVŒEÚQ”/nhÎë³i5¾º^ÎܼSáåÉpM’qVMÅü=ŽÌ*e2Çe�Äàñ8,Î�¬ýW–ãáOJ5pñ�JURœŠöŠŸµÃûnáÁ-Wâ·„þ3x³O×4ý&ßà×�OŽõ;KËk‰æÖ­ߨþÃ`ð½Æá¿Ì¸,qŒ×·,\0µpT¥ Mã+û8´”¯y_ué©— pv'‰r¾,Í(c(a©ðžKý³ˆ¥V'<]/kì½… !RúóOݱGÀÿuo|øãñžÏ^Ó´ý3àxðö®‹sms-þ¹ÿ æ»>‡iýŸqöÿ`–=ÏÚAó#`±aº{ 6;.ÀÊœ¥<Áâ9*&”iýZš¨ù“Õó'em™èä‰Î¸S‹¸ª–2… ?ÿc}g R�IVÆlc'ƒ¥ì'rŸ±”çΟ4]£©ïzgì{soà¯ø£ãׯügø“à›oøá¼5ÿ¶j:.§iw¢AªøÂÞż3¢jº¢i·)„³Ü´n�CÊÇh¨ñD`ñ¨åXìV]ƒÄ¼.+KÙr¤%Õtðò—¶«Ni¹%nˆýàåYSʰy‡ðöUÅæUO8ʸk±Ž­l."�Z˜Xb3(Rx .#£)ÍÅ«'#Å~~ɺÏ�|)ã‰~ øCàW¯x¥ü ªxÓÆñ꺣ê¾8Ž)¦¸ð·„´Úß^ø›S±‚¸ÔVÆTHm·MlobÛéq\AO ˆÂàp8,No˜â°ëO …téû<+i,F&µyFzrmFé·-%ÉÍo3†ü=ÄæY~c�çY¶_ÂÙW�yU|Ë3XŠÎ¾i)O—á0têկף¹ÖT¤”aïCÚrTP·âߨ›Åz7�>èšÄxóá·íâm#à ¾1xMµ ¿ K¨_ë6Z&¡c¯iW0[k&¹ ÜÞ¤šŽ‹qJ&·Žáµ-ZÇMô°<[†©‚ΫVÁbðxüƒ W�Êñ*Ä*tèε9Ñ©*UhÖŒ…dí{7 Ò�Ogá®; šp¶ ›e¹®MÅøÊ,Ÿˆr÷V¦ Ujâ)áªÒÅPœ!ˆÃbp³¨�l4Ó•” §íi×¥G ×ÿàž>.¶øÕà�Ùïÿ~øÇâ·‹<_ã} XðÝN~xÂO­[øŸÆ³C Ìšlºç‡­®õh|;µÎ§bñÛéW ú¥ÃÛ[õàøû ý��Ïñ9Fk„Êð˜Lz8ŠÔ¢¾¿_5FXlrЍ¨â% O)FœÓ•XÚ”y¥îÕð§GˆrîÂçùa�ãqù–„ÃWœ¿²ð¸ o fbÔféK…�JñÂB­I¨P›u¦á(øÅû$èÞ øa¬ü]ø[û@|2øïàÿø¢ÏÁþ;�Âöºÿ‡È©¬uÿ‘¦÷¯ó Ñ{ŸZüçüwþþGÖaÿ†½Yꚟü~øwþÃÿê?®W2ëéú£^Þ¿£6) ù{â7ÀÈu¯ëÞÿ„áßÅ¿ƒþ(Ô%ÕµŸƒŸK+m'T¾Ô¥ÕµMOÁž":oˆm!…õfÖ4ï êš%¨ÓõË»©´øsGZE�“ŠËÕJU0ÿWÂãp5¤çSмT')¹Ît*òÕŠNmÎ4gN<µ$Ü+Ò‡,#÷¹/Ë �Âf¿ÚÙ×q&Œpøn&ÈÜjÔÄaéPŽC3Á{|IIPŒpÕñô1U=¶�8âr¼n'ÚâjùÂÿÙKÂÿ uÙõÏ‚Ÿ< ð_Ä×Údš%ÇÅ¿ˆ.Õ¾/üJðÖ•2¡›Kð&›ªê>+Xô«˜Úh¬ÿ|3¢Ù^-•õ÷„x;L×­|e§ü)øq§Y=Ž«ãÛí ÒüuãÍ~×EðÝ–µ«h¶šf‹ÿþ‡§ø}mt=[F±ÖnüMâ‹�3ÂëáŽÃ?„iU§…Ìs|ã0¯…ž_[<ͪÔ�J9]W9WË2¼$ñº˜z™ÖÄ}o[ç‰Ãâ*a¡‚ÁB¶5ã{0jµ¨ÕÇ`2œ£/Ãâiæ2,ªœ*S­šRäT3<Ó6ž"¾4¨<&ŽSÂâhSÅTÆã§K°?G×È`s0Ƕ‘ÿaËïýW§þBíþ/Õ�5!œüVº–‘˜tø Ô4½Ò<6’Ü›[Ý=]ƒ K6hd¶º³Vgû<7Ù@·ŠY X!€v»Öfù-ô¤µb7�ä&8³€ °k©.Yyc Kd®Qr…·(­:ÄX[˜Œ¯s<²Ésww(U–êêR “: ŠX¡‰Ë{xá·�÷q-VÔä# ×õßþš5 ·¯èÌ?ˆ¿ò#x£þÁ_ú«¥üJã�þ”‰ŸÁ/F|µá|ykžØüryÁÁôÐûô>úÜó–èöÝ#ˆ×$çƒè3דõÆF{tɲN¤tJZ( € (¥ýýŽ—cy©êw–šv›§Z\_ê…ýÄ6v66p½ÅÝååÝÃÇ­¥¬É=ÅÄò$0B�$ލ¬Âá Ôœ)Ó„ªT©(Â�8EÎsœÚŒaÅ9JR“J1I¶ÚI\R”c)5Å9JRiF1Jí¶ôI-[z%«?Íö­ñ¿‡þ%~Ô_´—Äo ^hxWâÇ¿Œ>5ðΡå˾Ðãß>ßçó˜_çýÁŽ=1ßÛ>ùöü=8 6ügÐñÛ§?Ÿc 1@ƒÛóÆ9È=>£®}=hé_ ¼÷éסøãÓ§r}1ÔëúýDéë×üý†9ïЃþ¿/ëðÜ\à~#×ÐqÓÓ±>�Mþ¿¯ë¨�ùã×§Nüuü±@÷òþ¿á€œ§±ãϹϡõýkøÉÆ?ÄòGNxã€}? �óþ¿­u8¿<ÿž¿çØù7†¼U¨xrK˜Ò+mOGÔ”E¬ø{SY'ÑõxU$D76é$o娖GÓuK9 Ôôé‹Keu yÔfâßX¿Š/á~«£]%£�ôfUiF¥�ÜgaRçƒòm;§oz rIi%±‘ª>›%ýÔº<–škÈ^ÒÚúæ+Ë»x™Aò¦º†ÞÖ;ƒïU™m­üÔ Í¹e µwÊš]wz²r.ê)M§/´â­æ“m«®—kÌÏÏn#·®=©œÒ+úþ¼Ã<àäûtë‚aq¯¶{uôöÏL c9Ç=èå_×õýzüÿ_ø?×AJ'Qׇ ç§NùÆ3èOr ¿ŸãýtËBpNx8ì~¹üyœÑÊ»~+úþºßùÿZâ8ÆÑËŸ¼zœNÿ^¼•3þ·!Ù^sùsÆOçŽã=ÈÎhåAwýÃõÿ1D@°URK *回€In:½=ß*íývóûÂþ?ÓËþëìtëm*1{z®X~î>¾^Fàª8ýç8-Ê 8÷ÑB1Wk^‹Oêä97¢Û¿ËñüŒû™ZêV’NùÚƒ€‹Á £'ç<çR²z÷þ»ÿO𥥺ÿ[²ª>ü� úqÏr:Óå]¿ ¿õý^»’  tÉöïϦ3ÇqÇ$z€¥�úÿ_ðKÖ7òÙJ%Œås‰#$…uÇ£ ’§)ìAÅ Ûõ!¤ýVÝÿ¯ÀÖ½´Šö#}a–ÎLÐàoVÀ%•Gñ�âP~o¼¹äSjú¯šþ¿à÷õ…¦Ÿ�õýn`†Žã#žqØûóŒwÍ$ÊZi¯õÿ s]8šßäÛ㞉ºçŒœvüÇ5Séé·õýz„uO×ü­oÄ£a`÷®OÜ�?ÖHxú„'‚Øê0‚ À¡kéý_ÍÉòúô_×auMV?,éúsyV¨6OqÿZ@ù¢‰‡Ulþññó�•ÎòR迯O×ðZÝï§ËOë±Ì;çä 2Áã�Ç$žsלžI¨l¾½¯ø?‘ã§@©¿úØâ…¨tõýÁylqÆO§åŸ¦9÷éëA)7¯õýÃî ¦CÇü ‰è89϶8Ï“H­»_ÕËÖðý¤”VòíP“,¹Á�Žp‡õŽ1’AU/À[j÷ÒËþú¸Üÿõ±êyÓ¯â)ÿ[ù ¿gx`Ü’5¼¼M xæ@Ú뜫 G$u =÷h›u]:þ~véýXÖ¶³hå–[rÓ[Ïet!qÔ9OõN;H1À8,FGqNÖnÚ¦Ÿü7ôÉÕýJw1è‘`m“T•NC-š·ñ0ÁV�öSŒõÈP¦ùWwù¬¼¢¿øGò<²4’1wrY™�,OrO?çŒ T_üÊCrzçÐõÿÎzÑú�°g‘é�¡ÿõöÿ9'pþ¿¯Ð í�ËБ�o©#Ó=(…Q“Î01þzýsœâ‹ÿ_×è?ëô˜ž1øsøvþ½úpzÞÝDóýÞ±EÈ2ŽXvAôù²:¯V´Õÿ^b}—N«eýoähË0u¬qH¸ïL´_ì“»§÷Nò4Û륿/ÄIt¿ü5ý~¥u¸†`ƒ’ÜÁçƒß?§®;i»þ¿¯¸’I‘$‘V0¬W%p?¡?ίý_ðzzŠÚk¿ôûÆÞ¸�¶Ä¸Î7``GÈìñŒg¯\;õíýÃ/À6ÙkýVÒìι¹k†"Lˆ“¢…¡8ê{çXr»¿áý^ƒIº>“öÌÝ]Ÿ&Â.]Ûåóˆ<¢’F<3ö *䜇}ôKñþ¿¯$Ý´_{[úþº—õ Gí;mí×ɲ‡ JÝ· 3�þê玼¶MS}¿¯êÁm^æ_CØãù~™ëøôàf‹�úþ¿« ëøsëëèŸéSý_×êK[¿—ü1Ó$ðC¤Ù™í…Ê´²…BÛB�Ïó}ÖÏ#ñªOÝWîN·ÓM?&TþÐÓ†q¥'ýÿoþ7íÒ—4{½ÿßoÓ�ÙQžÃ÷í×ð�ŸóÖŽhíoëþõ©IKù¿ëüÍ+»ËK5¾Ñibà7—c¼¹“pþ, òÆNY€ÊqŒ¾©´–«~Ÿðÿ×äJMËG¶îßÕÿÌóf`N@ È'°õürN:ž+#_ëúù  ·¦:{ñø}x?§Zº^`<°(ëߦAí��×òú¥n�?­Åý_×êGøûŸ¯ùô?ãUpþº];†GÐr=Ç=ûž?¯r_çÜ?¯ë×pÓ±Ïø^=3ÓVþ¿Pßúþ¿®¤¡€UŽ=ÿösùûÒmþÖ Ãw<ã¿^Ô®ûþÝÜ7olç‘ý0?¨¢ïúô ¿ëów$lsøg_«¿õý[¯k¾Ÿ×à1VI¤TEfg8E_\ô»d’}ÉÅ+Ý�þèt‘Ç“ã‰/%¹ ô�w<LÃøWŸåý^S«~Kúþ¿áŒ§‘åròÎÜ’N=Àv€ ¯§õý^CD–÷2ÛH²ÄØa€A0ôaÜcñà‚3T´°5ëcRxbÔ#û]¨ 0žÜ}æ<ä�×qíÀ?ÛûÏtûõDݧgòþ¿à鹊z•#Ó¡ê8=‡¹#Ó=)L«|Í}3ýN #ìÿû,¿‡×?ýpï¿øXšÕz£3$úóÛùv?ç·“¯ü?õý\¿gdn ‘ÉŽÞ<—�‚3·•yÀÀÉfàëÚ¢¯«Ñ-ßõùƒþ¿¯ëЫ©jK(û%§Éjƒi+Ç�·Ž§gËýæíD§{%²üJŒ{˜½ÿÈö>ÿáPWõùÿ^BðAÁç=¿¨ôèOó/ý_׿×çÐ@~§üöçß�j/ý_×�_1=:÷úoO_®qEÿ¯ëúô dp22B‚@'Ÿ”�  %Gd ÈõoüC³]_|:Óî¼/ày¼�í‰n¥‚_øîêÝâ•/¼e©Z…�¬bº….´Ÿ X8Ð4VHe#VÖ#›^»„ŸÅ-eøGÉ/N»±ß¢ÙZÿ—ç«<§¡ìqü¿Lõüzp3Wq_×õa ÿ?^¿NßçŠ/ý_×âðÂûcœz9ý}qGõýz‡õ÷[ œ“þ}±þ\?¯ëAN?�ÃôëÛ©£úþ¿¯Ä¿oóéÇ\þGÛŠ7 }ß×õÜ3Ó§n�zqôúŽ�;P×õò žøôsÇáüú{u¥pOþ·~˜Ó§ÐÓ¿õý]@8õ÷?Qþ{ñ¢á÷þ×Ná‘ô�qÏ~ç�ëÇ—ù÷õýzîúv9ÿëǦzb�êß×ê=ÿ¯ëúꎜàãòþ¼g××_úÿ‡ëïþ¿]GqžxÈϸã×®?Ç™¿õý>ƒþº[ÿ[žÓû6øÈ¯€}8øÕð³Ó>:Ð�~ÇÓ¯~¢¿,ñÛþLŒ‹þ­WˆúÈfåSÒ¤?Çý)Ö½ÃO\ƒŸë_óu†Žß×õýt7ÄKëúûŒ[ƒ×¿ùÇn¿ÓŠú 4v•ô8híò< ø«Yø�àm+T¾±µ¹ñº¿ƒ5›Û‹o´#MÞ»½<ïBYžGŠÃÖ£‰XL§*çö5aR1«‡©V¤èÍÁÉBkNh;J7WZž‰þÌq8,ÏG˜Ê—åî•: ‚¥“Â�LM\Z•\'$£sÆíÓ¤ªÕïµ�Œ>Ðÿj�Û3ÇÞø‘á_·~Î:Œ?øyý“aá›ów5†µ®G¬é“Co¦XµåÌ—¶7ßf’H&Œ{ëF9Æuˆ¥‰£iåöÃÕ�Zn3«>–4åÌã9©ÁÚ*îñjÚ3ׯñ†Q�ñGÆLû-âL¦—¶ðçÍ(æx ÐÆg42ú¦,®êÏ�ÇG†œiáh:ÕeZ�J~ÊR„â¿2¾%|xøÁñbÖÖÃâ'Ä/x§M±˜]Zé—ׂ-*+¥G�nΗg­„—±Ç,±Ey-»ÜÅ ²Ç«Ò+sljĨªõ§Q't›´oß•$¯¾¶½›¶çò×qïñe*X~"â,Ë4ÃPŸµ¥…¯_“ Ê2Š­õZ*–U£ Ê­:r©ÎqŒ”g$þŽý¤¾.x[Fý±üñWÃÚ¶�ãx.?ƒZÜòøwUÓu»¿øF,ô‹­WM¶¾³žêÊ=B&¶¸·Á“̱¿ÚÒ*J˜¯¥r‹ÄÆqqšJž±i­ºMuVÚûŸâå88{‹rì^=˲EÁXê“Ëqxlu Ë*£ƒ­‹ÂÓ¯B¥ZÄÁÓ©NÜÜÔ+ÙÉ)FÇÖ^ ø“gyñUø« |wýŒ4/…w^3ÓsŠÎ©b\cí^"ž"¤-Šj8–ð§Ëþ&ëþ)µøÑ¬xsã×Â+øÛâž©âï|ý£|=áÝá?ÄMTš[Óâ­>ãU¼Ô,ôïKtR=KúeÝœ‰ee]j·°Ùé’Gè¨/sš�F”lªQ»œ_k.–êÖý5gå~qFc›ÑãŒv[âÐÍ3î-Åç9¯ø“–eØâL.¤ëÿkáªbëbha³Z•œaŠËp•¨Ê4hSuquáC 8èêß¼'û\éw~5øGàäÿ ­-¼EâïZÇâ���ñžéµ¿ Aq­3XÃð¯T‚+!6§qe§Ùjp¤«gm2y–~�(Vžûl<ñ ÚÝS“å¯ìVÒ\ºº±w²ºmu{?B¦'‚²Ÿ0•x'�2Ž«S„èÓÌsl’”sN|iV-ãòšU1�Ї â¡ xš”káèbaª4¦¹¨ùÿíymðÀüðÞ§âk¿Ù¾ãö˜¹øƒ,-7ìÃosáíGá¤z=ÏÚuYèÓÂ5kâ;�{ìòZÏomm¨\Ù=�†-ƒY[o_(Uþ·8Â8Å‚ö:¬lZ’¯Î¬©9.wî›qN÷û7äñJ� >˱9•_çâELúq”ü3¯N¦_ˆáÈá*{LN{K?ìêy�Lw$©T§Nž"¥G’<«©ùOìSâ߇ðŸ�¿ > øÛGøooñÏàö¥à�x×Ä’‹o i(Žö+­./êV3MºM$Ú…Ô�ZÆ–¯ OÅŸg3¡ˆ¶‡¡Jv1�hÕÃÇYµ>¯4ÜëÕp§MÅÎ3�>o`Ó¼à/€±Ÿí‡àkã÷Àÿ|Lø€~Üé¾ø{ãÝ?Ä;ôÏøâ ˜[L½•4ãâ Vh.u[íWJЭïäðþ—ea{ªKÔÒ(v…\NcŸdXšynaG †úò�|NTí*˜wΗ2¥Ô# ÔqUg)F òë÷¸,£&à¿ ©C-ÈóšëáðY¼*AáëIPúî"Q©‰­‰Ãá)Ö– J�\D¡õ…zçÃ-_Á^/ðŸÂ‹/ŠŸ?e?�¿³vŸà‹ /iÿâÒ|qðµû>ø�àÃüð‡‹ü ñ«Åþ0øwíW hw> ñ×ÂÝn[ÑbÐëÞ$Óo4�âž. ŽHn„77v*m­„ÐÏ{6“ífyF.–qC8ÇasŒN•á°¸×õªÇ„Ì)(ó^� Æ­lù]œoÏÞ•š‚©ÇÁÜO”âxCÂ9aÂÙva•q6c˜äðãÌ&yni‘b¥Wظⱴjað¹Å8§òÎ¥/rñ�Yaéøïã}¶‘ñ“ö(øqâ¯�߳߉´ßüsð_Äψq|ðo…¼ð‡á]òø’ÂÝ•>$iÚœ:/ˆ¼Ý.çQ½ñDãKÑl´y¬¢’öâáØ=,¿&�\£‹ñølŸ<¡S’ã2ì ÍqXœ^i™Aáç%ÿ ó¦ëPµHÓ†>ҴꩵÅ/{³0âHÐâ2|wð–:Ž]Ĺvs›G†²ì]�duV2”mâ�há±|Ô'V®:^ÃO*qu%6ï�-üiá¹ÿà£|iÇËŸƒÚ¡ûBü`Ô¼7ñÛ¶ö>2Ót›]KÅ*ÿ„oRíãIÕ¼¯ÚÜZiW—RM} ÉáíM彂çC75÷‘ÀâW‡˜ÈaœW§�e4ñ9*SÁÔ­*xl/Ö)ÿÚÒÆP’�XE(WXŠJ0”kò%G„ŸŠù¶c%–G†«ÅYýl'à£KFŒ+cq¿T¬¿yì+à1Pœ(ÎnUpÒÂÖnqžÈ÷ßÚîïá®±û:øçXøÝâoØûÆ?´äÞ/ð¤Ÿüoû(êzuçˆüw¥>¨Ž5ÏŒV¾†×I[+Í înôkëÛ;;éõ"Ù,íE«yüO4£Ä¸ 9Œp\.°xµœàx²•Ha°U+à(dÓĹUu!ˆQ…hSœá<ÒsŸ7»öüa,«Ã9…|ÿÀøî-xìÉs ­Jx¬Æ‹¬¿´1ä0±…IáÜçB¥JtêJ·,8r{ߊs¶3“þrxôþ•ý ‡ŽÇã”–ß×õùþ&LÌ:÷0ñ=*KoëþÏß½þ˜íœqþ:õiGE¦Ÿ×õýkëPŽ«É_×ô¹ ïÚûö¯ðêŸ øö ý¡ô/x{þ$z�£|jø•¦hº&�¤�°izF‘¥Xø– 7KÓl ‚ËOÓìíá´²´†+kx’Ñã9Ï ð½|Ï1¯ˆá¼‚¾"¾;Z½zÙ6]RµjÕq'V­Z³Ã9Ô«R¤œêNrsœ›”›m³öü«6ÍiåÙ}:yža tðXXS§ n"0§P§Â�UÂ1J1ŠI%d´±ý°Á¼{㟉_ðOíÅ_>ÝøìÙ©ü=Ó~&Ùø«Â:Š'ÅõFðv³ák zÎëÅþ¿›EÓõ-VÂhÞiVZ­…¿Ú´››”Ôa2=°¶�­}vò>+{_ø*߆ôÿÞjzïìÕãH¼!àp�}áÖÓü9rîy£Ö¾^ÿÁDnõOê¿4?ÙKðóxsU¹ñ—…|føM¯hvž!¸Ó¼eà¯ø^ßìÚ¯…,¼ ã{M;ÅW‹'ð‡†µ[ë^<»ð6§¬xYô›m7OÓ´ÝDiž"òR]#[òôOËïÙüºŸiÞŒêš(•mAÈîZ.G]¡ä�IèÐXd#ªù†Œ‚ð‚5}`�x >£pêHê7#+¯ª²°È Ð ¯©¯@ÏÌà¯ø*™ðãŧ|Yøcâk­Å ïŠ"ÓüYa£j7¶pOá}"ëNðßÁ¯‡'^¾ÑuÙukKŸÛêZ“¨xF/ ‰þ�Zx‹P×BýÎÏúù¿»ñ>Éø¤ü~Ò¬¼X>=ø—Â^"¿¹×Òo Ÿ *k=(X—Á^? øEìt«­DI>‡áíNkúŸ™o¬üDñ”ÓÅqdí¥¾g»P#—·e6z4™ZºecÀ+,š¨ˆäãýat ýâêK_ùÛ×õ8�ŽGÅÝoÀ’Ø|ñ%Ÿ…¼fú¶•#j—7:5…Çö$S–Õ-´ÍKÄ^ø£ éÚ„ËäŸ?Tðˆ¡žÊ;Ë tÒ¯ï-5Ý-­}v>N°ðïüÿI³ŽñöPñEå÷ÅÿÝê—¾'𿎬#Ñþ kXIá{ [xZ-,Iâ‰t«�F×QÓ¼Lu_ì¹4Ëk¥ñŸˆeÔžÞÌþ¾E{�žß�õýu$ø�áoø)=Ö£â~üIø ag©x{À–zT~$ÓîáµÑ5ë�†Þ*ðßÄ}kHÓcð&¿lÚgÄ}Wÿü)¥x‹Å5±Õ­¼#gà�FçKÓ5iþ0ø\Ú‰4¿ øþï A­�jóâ—Š5o ø¯Qñ�‡ü=á mÛFøR<)áKß .�¨Ùj:ÌÚŽ°Ú¤w:�¬²]­¢×¯Ýþg¿êê:‘yxäpƒJ½BÇÑCÈŠXðÑs–‚íýtg�þÙZž¥¢~ɴγ£jÚN¯¤|ø«©éZ®™w=†¥¦jV Ö®¬u >úÖH®lאַ¢ŠæÒîÚX§·ž8æ†D‘‡³Ã”éÖâŠ�jp«J®s–S«J¤c:u)ÏB3§RN3„âÜg'E´ÓLáÌå(eØùÂR„á‚ÅJ‹q”e3q”d¬ã$Òi¦šjèÿ8�;ö×ý²" å~ÖŸ´Ìîüxø§Àãø|T:qÓ®qšþý£Â"ìß pãõÈòÏþeþ¾góÌóœá^Ù®d¿î¿÷/õc¬¶ý¸ÿm4'íûQ(ÿgãÿÅ…äžr‹Aü1øãèÃx?¯ pÖÝr­ÿî¯õùóK;κfùŸþâÿùoõùhÃt~Û9þö¥à`�øh/‹=qÀñWóŸ_ê+UÁœoù$¸gÿ 9Wÿ2ý·�Ðß4ÿÆ/ÿ—nŸÛc?òxŸµ7©ÿŒƒø³Œá]ùsÜ{ÓÿS8;þ‰>ÿÃWÿÌ�ý·�Ðß4ÿÆ/ÿ— ÿ†éý¶èðÿjlq�øÈ?‹_‰ÿ‘»ô8â—ú™ÁßôIpÏþr¯þeþ¾ðþÛοèošáÃÿ˃þ§öÚÀÿŒÃý©³×þN â×nâ®ö< cë“KýLàßú$øgå�å_üÊ?í¼ëþ‡§þâÿùhÃûu~Û#'þö§ëÿGñkúx¸z>”¿ÔÞÿ¢O†ðÕÿó(ÿ¶ó¯úæø_‹ýj�?·Wí³ÿG‹ûSúÉÁüZþž.ïßñ4¿ÔÞÿ¢O†¿ðÅ•ÿó/õê :οèošáÃÿËFÛ«öÛÿ£Åý©ÇýÜÅ¿Oûzÿ#žÜ|ÁÝ8S†¼ßöWø²�ûk:ÿ¡¾iÿ…ø¿þ]ýlqþ6ý¬?j?‰¼ðŸÄOÚKãç�|-¨„‡†¼iñ‹â'Št åFIot]sÄWÚuÈY$_:Þ@®ŠÃ €×F†¸o^8œä˜E;û|-ùcŽ™ã®8úÿ\kØlâ^„LßLý}:`ÝñïØô†ÿ¯_ëúëV"$`àýG¿ùôã¿=j_õý_ ¶¿ŸOëóù‘–ÏëøséÜ‘ŸóÉEXfìôìOƒóÇ<}{&ãùKúþº4ÓgÜuúôÉéÔ °üñÇåúcœzsúT¶?Ÿõÿ&ïþ·×9ýzôî(þ¿ëñè>ýDÎ}áü¸×4ïê/Óúü?«>ÿ¦:þ]½zóEÃúzzõÿ?—¿p3GõÿóÓü„ïÐtúÃüþ~ô®äõÏ ÿëÿœõ§ú‡`Ï#ÓCÿëíþrNáý_ Û—¡#ßRG¦zP+ Óôÿ?ãœÿ�êã$úzöþ^¿ç·õÿ?¯ëúê‰ÿ–zž�º×âúþ¿8üÿýG¿åÇô¢áýZ ßü�cïþõùÿ^Eí7P›K¾µÔmÕ糕fD½´µÔ-¯T¸²½†{K¨X­𺺟»œjN-=.ŸTšû�î½oú“8©ÅÆW³V÷dâþN6i®�?Àíu½#EÖôy¼_á4�OK3ñO„šáä“@šæXíáÔôI.¥’ëQðÅí̱Á™,úއw,Z~£-ÌSYê7w%.xYZÜðþ_8ÝÝÁ½;Å´¥}Âœç ª5o'+ºU¬­RÊî3IZ5b“zZ3Kš)YÆ>wé׿ÐûzzýsŠÎÿ×õýz: Ÿ§åýË ö4�zúùäýÿ "‹‡èc�åúg¯ãÓ�š.×õýXBÏׯӷùâ‹ÿ_×õø‡ü0¾ØÇ§„Ž_\Qý^¡ý}ßÖÂgäÿŸl…ëúÐS�ǧ_ðÆ}:öêhþ¿¯ëñïÛüúq×?‘öâ�Âßwõýw ôéÛ§^œ}>£§NÔõý|ƒ'¾=ñø>žÝi\Óÿ­ß¦ôéô4ïý_×P=}ÏÔžÇüh¸}ÿ‡õÓ¸d}#Üsß¹ãúñÇ%þ}Åý^»€>�ŽÃúñ鞘£ú·õú�ëúþº€#§88õÿëvÏóÅþ¿áÃúûÿ¯×Q3Ï>üžßçéEÃúþº Ÿþ¶=O#ú`uüEÖþ@Ï¡ü?—úæ‹ú‡éý~ÕƒŸÓ.Þ½y¢áý==zÿŸË߸£úÿ‡ù‡éþBwè:}aþ?zWrzçÐõÿÎzÓýC°g‘é�¡ÿõöÿ9'pþ¿¯Ð í�ËБ�o©#Ó=(„éúŸñÎÀ¿õq‹’}={/_óÛƒúÿ€×õýuÄ�Ë=?ÏNÝëñý_ˆœ~þ£ßòãúQpþ¿­ïþG±÷ÿ úüÿ¯!FÝÇ¿=¿¨ôèOó.׿;vÑ�ÉîzãÔðã3Ôÿ×õýy úþ¿¯‘zuïÉïùñëõÎ(¿õý^ƒÐrîbª£,Ä d’ÇîIÀ†;Qý]ÃÈëlláÒâ—€5ɺ‹†1œ`�ÉCüL8AÓÖ­.Uwkþ^_æÿ§ ßNˆ£su%̦I8ûŠ>ê)?ttÏ^IûÇÐqPäßù’èW'üýzý;ž)§oAÿà ø}8ô=ÿ úâ©;ëýtüÅý}ÂgäÿŸl…;‡õýh.qüºû{c>œžÝM/ëþúüDÕÿ¯ëü÷4,¯¥²”IÊ #?u×Ó§ 2v‘È=r R&Óþ¿¯ørZò5î­"¼�íö$àÍ0`âª9 KÙO3vz­®ßÕÄ�´õø•‹·ö^Ý[1Û¯™!�™ŽÕÎ2Ä×!z¶8%½mé¿ëðv¿®ˆÃÕ5högiÇe´yK‰ÐŒÊzâ8�òwç €>i”´²Ñy_×çIkÌ÷}=áÿ¦s À€«€‹Ñr{zûý¯=ê/ý^†Ÿ×õ¯�Þ>ƒ‘î9ïÜñýxõ7ýEý^»†};ÿ‡õãÓ=*›KEý^a¿õý]G"—8Ž <àÓ¶~½qÔÔî?ëï-ÁÚ ùvË“,§�ØûÊáÉ �ÏšZú~×�Ÿ¦½?¯êú�žíX !NÑ�ç9äzg’yëÅ7Ù~d´Öí¿êÿ×q?ŸCø�Cۨ㸩OÏÈ¿ëñû…PY‚¨$’Qœ’x ó’zs€sT×õ塯%ñÑ-Ú�5ýÈÆ[1Û)GO3=‚­�Ÿ—!‹ò®íþr§éý=ŽAä’Wi$f’GbÎìyf<å�'$úã�Ò³l»tÛúþ¼†ö9äûsú{ûŽŸ ?Ÿõ÷öóõéøRõøÿ_Ó çÿõF=ºþ½°)ŒP2zãëDZþ|3Ý õßÂ8ü瑞‡ŽÝsÖ˜_×O˺.ÛÀª¾|ミ*3ÖB;‘Ô&}¹÷Zîþîâwéó~DŽí#cϧ@è\Nüç½+¶4¬¿=?¯�±JÑÀC)û¬½pAã®yÈSR°5rg�r$‡˜É\‚AØ{ƒž£#åoN9ç'f¶¸¯¥žÿ×õoø({ƦYæ˜ì…$|ž2ç9 ƒø‰éÔ`ûô}[ÙZW²ïÛ·¯õèf\Ý5Ã|¿,kŸ.>Ê:�ïd·©â¥»ú}ÃKæÿ§ýljhúOÛ3uvL:|?3»|¾aL–D89Qœ;œªå¾íF7Õíù’åm7oõëþF†¡¨›­°@‚(@D£nà08é�ü)ÑGRXÓæ[l�FÛÝ·¿õýz™Yÿ>ÿOðäóÐPP¿�õçÐÿŸnô_úþ¿¯¸?¯ëò>Ÿç=O·õëèë¿õýlo\dhÖñ™¥ÆsÈýç#Ûúr)=#ý~v÷¥n˧ü?ü¯É'¤ž�ùÏãÓÂCú¿õýu6ã[}Ü_^�×/“kjvç$Yy9e¸ Û÷…@½#¬·è¼ÿ­ßO>­^Z-¯«8û»Éï®{‡Ë°Â¨ÎÄ^¢4£°ëœ³e‰5›“z¿ëлYYy_סŒþߟòëúw¡vþ¿áÃúþ¿¯Ðs>8_^O?ÏÔþ}1Ú›ÚËï ?ëúü·d‚Olã¹ëúcëïÀ¥ý_Ö¡oëúþ¿1Aïœc>¸ÿ'ÛñàU§ _Ö ~‡ò=½ÏaøcèM§�¿AÓ“Ô~_‡ëéš>àþ¼Ç“ò¯©Çlz÷Ééè{Ñý^Aÿúéý|Æ«ç×þ¿Qï�Ó„×Uó%®¨—¡õçØöê8ôÍ/1¥ývÔŒ•Â(,Ä€O°ç““ÔI8Å+·ý]ý_qÑEZTA›cÞÈ:�€ôÇL(#“€\ðSÅéÝ¿ëîþ»Š×ô3G•™Ü–f<“Æ{�ÇO@8ÀàT6Wõýy�ìsÉöçô÷÷?@>×ߨ^¿ç¯O©;ïÿ/ëñþ¿¦Moq%¼‹$gu•+ÈÚÃ#Ž ê0yô[_×Ü&¯¡«<ê›»Plfh88å€|ÝHÀÃÿ½œ½¿Þ¿Ëñ¼t{>¤zfDZ€9[œŒwÛ&zŒð:tÇ=é-ŸøX>–îˆl,šà™$>]ºç|„�œuU'§£œ| ç¨¢×þ¿®Â—âÿ¯Ì¯©êbaöKO’Õ0¤¨+æŸLŒþï=;·Þ<*e.‹áüÿ­JŠê÷ô1óÿüg9Î8ǵABçùg¶=~‡§Lzä�™ÿëtúŽ;ÿŽ)�pϧמ¾˜?OQÜÒâzw‚¼kªéW¾7ñ–£?‡>h׋aw©Ûà úψõ¯$]'„¼cpñE¨k³A$Sj“8Ò¼1§Nš®®ÎeÓtÝQ7gd¯'÷%ÝùvïÐiu{[/ësžñŸ‰,¼O¬-æ“á­'ÂZ-�•¶—£hzR ÛN³/äK«j¯7~!×.šY.5mrýR{Û™míôý62ÈJÊͶïvÿà~ múŸ/—õÔä³þ}þŸáÉç ¦!ëÏ¡ÿ>Ýè¿õý_p_×ä&}?ÎzŸoë×Ð×ëúØQ“þO?—þ¿QHðß×õ dñ϶õçñôëèÃúþ¿­õ ýzóÓÓ§|þ™úÑë _רƒÓ§Søä~øôWþ˜Zÿ_ÖÂçþ¯Ïùu?—zb>ž½yÿ?ä{P×PÝÐç°8õëøc_~çý]Gý_Ö¿ˆ¾ùÆ3ë�ò}¿þ¿­D'·=½{{žÃ�L~&�WüÅÏáŽOoþ··×Ó4_×�^×ô€‘ާ±Ü÷ç§¡ïú×õä?ëúþ¿QÜrO§CÇ?ädt_×õ½ÅÒÿ×oëÓ±í?³iÇíð �ú-? ~>8йç·^ãÎ9¯Ë™ôô÷íÍ{˜xíò=*HÈ�ºþ<þ_þ¯Ç­{¸xíýyž�%ó2gaÏ8ǯçþ{õ¯s¾ïÓúìzT–ÆDÍÁþYþ§Óús^æ;_ÖÇ¥Imý_wù™3~§ž;ŒŸóøàzû˜xíýZž•%ýÀ2'=}½ÿ?§O^:W»‡ŽÇ£Emý|ýÈÈœõÿ=±ÓÝ1ýkÜÃÇoëúÜô©/ë©•1ç×·®qéùqú×¹‡[z�%±Ïß‚—Ãüþœzô¡¢õþ½^‚Õyÿ_çøŸ$x˜ÿÄçYçÕ59ÁÿK”sõç�Œõç¯Ë³]1øåÑbñ+ÿ+Oð¿Í}ìýw-ÿqÁØ&ÿLÃúìw_ðnåÄÁ8´8¢•K_Œ?¢¸El´2=î—:$ƒª±†XÝG#)ï_ž6).=ƶšæÀe®-õK£uÝsE¯TÑýÀͫԶ˜ŒJvèý¥ÿ&ŸÌýÉ»´†öÝíç ±Œn7håŽXdY¡š)†ŽXfD–'åtSÈàþJ}�CìZ²ðºÖå›N¶yHìdh^Þ&oS)ì‹Ò�kßð²kô‹ÿ‘ÿòMgßð²kô‹ÿ‘ÿòMgßð²kô‹ÿ‘ÿòMgßð,Zؘek«›™/o K<‰K Èï¬1"¬QHñ¤’–ig™’?6gH`H�‘M§Kö‰.¬od±–}¦æ?&‹[™4žHdQ"\¤Q¤"X'ˆI¢ÜG7•ˆŸdÖ?è1þ #ÿäšgßð²kô‹ÿ‘ÿòMgßð²kô‹ÿ‘ÿòMgßða©J \ky,qii ¤Ì¤Un Nñ—„G:ðÐÍ€à >å×±µ{5°òV;XÒáŠÂ-ÖØ£[sS [jý¸æŠßö1ý«§žXà†/Ùßã’Í,‹Q"ø^,òHåQ@%�˜*�’@¯w…Ó—pêI¶óÜ¥$•Ûo‡I$µm½]O?6iey“m$°¶ÛÑ%õzš·Øÿ/Û&ázöêsÐvÏ×ëŠÿF(¶�æ¹úÿ_ðÿæt0±Ûœcã=qÇCÔu\`qÏCèÂ^½?¯ëCšKú×úE‚ÿç·¯¯çŽzô¶¿õr-÷Á ý=óïÉìOä:Óæ _×õf4¿wÿ¯ŸCú÷ÇL+ú~anÿÕ¿¯¿A7“ßcëŸÓ¡úsíK›Ì-ý_ÒXsÇ<ÿõ»óÐþXÎhæý?¯ëÔvþ¿¯ëï[=úž#Ç|þÏlžo˜íý[úЈ·^Ü�~¼zŽÝ:ý%ËçýZŽß×üë°Âß§ çß�ïÿ\Ô·ÿ Ð,DÍéëïëþHúûŒËo¯_?ëòèUŸÏúþ¿R&Søz÷ÇaŒ{ž•7þ¿¯ëòNÝ=?¯ëîOSœu霟ðôürMÇb2qÀÏnCŽœ{Œ{ðI©¿âWõoø?ÖÀǯaדŽùÎz@=}Ï-ýz^]dûäàž>½Á?w½iŸáÿ ßúê“ß?Ìô9ôôÇ=G4ƒÌ_§n¾zð{uädñÔþ»�úþº Ïlð;N¼òyë€sLAžGAÏþ¸õžœó@ì(Ïëô÷ÇõÇu ?¯ëú°v9äûsú{ûŽŸ ?ëïìçëÓð¤/ëñþ¿¦Î3ÿêŒ{t=ý{`Ssùúþ¹þŸÌÒ¿2ÏרãÓ§aÎM0þ¿¯ëÐ^œúñׯõç¡ã?–hþ¶Ÿäþ?ŸáÜgÒ�È_ÖÀ8Ÿø÷ã9ÎqÆ=© \ÿ,öǯÐôãé�\‚ò?ýnŸQÇñÅ1îôúó×Óéê;šBüNšÛÃWþ¼ñŸwozÚMÎÝsH�d]GJÓ¥h"²ÖÞ6]·:]ÅäíaqqnÏý›wöHïDCP³i-A¸¹&Ÿ+÷—T�­+u‹z]lí{]_'UF¬iÊ-s¯rzrÎJîP]¤¢¹’kÞWå¿+·5’yÇnŸ�ü½½8ö©5?çßéþžz @/ãýyô?çÛ½þ¿¯ëîëúü„ϧùÏSíýzúÃúïý[ 2Éçòãÿ×ê)þúþ´ ƒž9öÀþ¼þ>�}_×õ¾¡Ÿ¯^zztïŸÓ?Z/ýtëúõztà�ê�ïߊÿÓë_ëúØ\ãÿÕùÿ.§òïLBgÓׯ?çü�júêºö½ cëïÀ£üÿ¯ë¨ÿ¯ëú×ñß8Æ}qþO·ãÀ _×õ¨„öç·¯osØqé�ÄÒêÿ˜¹ü1ÉíÿÖöúúf�ëúòëÏúþ�€ŸÄûc×¾OO~ÿ£þ¿¯!ÿ_×õú‡ýÿÎ}G~Ÿ�8çù‹üúÇØöê8î)_ט_�Ü&{g�Ûúuç“Ï\š`ät÷ÿë�QééÏ4ÂŒþ¿Oqœ\qÇZúþ¿«cžO·?§¿¸éúóþ¾þÁþ~½? Bþ¿ëúaœã?þ¡ÈÇ·Cß×¶1‡?Ÿ¯ëŸéüÍ![ñ'üýzŽ=:väÓëúþ½éϯzÿ^z3ùf�ëa‰þOãùþÆ}(ü…ýl�ùÿ�~3œçcÚ�ÅÏòÏlzýN>˜õÈ/!3ÿÖéõ_ÿW­1ïý]ƒ9è}ùëéƒþ>¦�¬*åˆP ,@ NrxIç§Ö€:»;8ôȾÙv¸*Lqq”$A/ƒ†8Â/'®‰rê÷éýwóþœêôW·ÝýZ”..d¹s#·¨UÚ€œ€ãÉ1Ç8ÀÂm·¯õþBþ¿«çßúóïþ}»Ô‚vÛas‘ÇCý{û^¾€×rÿ®ÿ×õ°£?‡ãÏåÇÿ¯ÔP�¿Pÿ†þ¿­È9ãŸlëÏãé×ÓMÃúþ¿¯0Ïׯ==:wÏ韭þºõýzŠ8é‘Ûóüò?úÕ;ÿÁÿ.úÿ_Ò74o´‰üÈŽØîcŽ~\t.;ü äñ÷ª)ÞÝ·þ»�û=ÆëZ霽�“m„· N\÷Š"Üã ã–9UàêR蟫ýã j÷éý?ëôå çp d/¯×·ó÷àTo¿úþ¼Ä÷Î1Ÿ\“íøð(ëúÔB{sÛ×·¹ì8±øšú¿æ=Ac�À“Ðc=rxà~¾™£pù™fŒçj°ƒûÇÆ ž~U9'ó�úå²_×õåä&í­ÇÝÊÈ~Ì¡Dà£)G9îAç¾yëמÃ}:/ëúÿ†ܤ?úÇñö=ºŽ;�Æ„ÿÈvþ¾eÅË£,KîÝ1øö¿™�O¿ùÿ_ähKœœuôúS¿� …QDÓ€Aæ8Î2ç±nÛº’O¼Òë÷ ¿Ãüºy ŒYŽ=:às´¸±‚y͹Ÿ¨8à_nÜzuý*J_ðàN—~2098?^ëŠ óþ¿à–mÉ‹3;„ 6q‰:ü€wè9çà‚j“ëÓ¯õú’íýnQº»’åòp±‚v è<œ$ýÞHÇ›»òý+_—õrþ•¥ý«ý*äùVQdÈý »3¹Ž@Ș �¸>cÅE_W²í·ü1Ùý¶)ì‰Óíà�mø’ÒE9TLídPÄ qœ–íódV—¼}Õ{t2Õ=[ׯãåý/»ëGüƒ¬{õCùútíÆ¥G?÷Q|ŸÞc¿¶tÓ¬²O÷n~œqúЧ~ÁËæýn‹Âö#¦µïØm­À‡fÀSAÏBÙüpÜqÅ]ô½–öŸ2W~¿×èQþÙQÿ0Û>ßÁ×Û±ÛÓØÒæòErßí?¿úëúnï§¾t2lØ¢�~EÎ2N~c�ó£¦)6Ø$’ý_üºß™©A¢Û-õöéÁû-¯·�Ç“Ó�ìGîÆ1ºBGÞ{ô]nOÄÚ[uíòþ¿àq×—“ßNóÜ>çl຋Ùz(^Ç;‰å³’Õ›mîh’KE§õú*ç8Æ1Éý;zþ^Ÿí þ¿R@À ç¦Nz~'Û¯^ R þ¿¯ëî¹G=N~œñìF?>MÍÍiä'™þÈ=¸çõóôë�hæ z|ÿáÄó{ãüwÏùÿ 9¼—õó¿¯é[3à��ý8=3Ï©c“ÈéM|¶&ß×õ÷�ó >„ûö þsŒŠwÜÖŸ×â1˜ž¾¿‡\�^=G^”úþ¿¯Ðx@cëüúgÔóôÏ'š/÷ ü¿àì ß+ª¨.ÌÀ*Œr—¿o^�b÷c·õýV:£‹LŒ1K¹Ô =1× ƒówv`t«ò®ì[í¢¹œò<ŽZF%Üî$õ=p3×®1€;c¢÷õÞŸÖ£9xç=}xÀúg×ר€Öß×õ¿`ΩÇAøÃ†OC@·Ó�óžüÇü“EÁïýt$uuȸ¹ädŒÒþ¿¯ë¨Xí>x¸øâ'€üwöc}ÿW�<-âß± Fðøo\±Ö ¯˜AT7?bòC�BÜT�ÏËñÏ.2àž0á¬,"â®âúÛƒšÃne8¼³ëšiÍPú×µåM9(Y5t é§Ù§÷j—ü9ý?ø{ö³ý›üY¡éúõ—ÆŸ†ú\:…¼WNñ7Œ|?á�rÉä�${]GFÖõ+û[˜ ùRƒBÒ+yM¿Àœßèåã�fØÌ£áoãêà«Ô¢ñÙ ç9þSŠŒ'8C‚Í2¬+^�eR�ªFª„£í©R›pY×¼¶Mß²¹bÚ/ö}9ÇÇoƒdõø�à’qϦ·ý+L?‚^2+_Â_W¯ñRüò¯êç�^�g{R¨ý!&¿&cÏûC|ç~¸ÇÄ¿‘úk\ú~œW¹‡ðcÅõkøSâLvß�¸�oë•ÿ[ž=|>)í‡Ä;ö£Qÿí¬È›ö‚ø y_�¿Î}>$ø4ýƲIç�ÓÖ½Ì?ƒ¾-+_ÂïW¯ñ*·þc¾ ïl-­vÃVûa“7Çß�g;~4|'¾šÇÿ¯�j÷0þøª­Íá—ˆ+ü\Äkÿy¾G�_-ÌÝí—cŸ¦»ëÿ^ÿ«ù|wø"s�ŒŸ �^Ÿ<"{ñÓXü?÷0þx¡_Ã~=[oÁüB¿<»úØñëå9»½²¬Éú`qOò¤cÏñÏà©û¿>¿óP<%ôä _¯­{¸o |KV¿‡|t½xK?_ž^�¾I�»Û'Í_¦_Œ•#&�¿Žqñsá‰àò<{áSÿ¹nqþx¯sៈÊ×à5^¼+ž­¿îC¹ãWáþ w¶Gœ>ÖË1¿ü Ç›ãOÁãÓâÇÃS“ÔxëÂçùj¾ßþ±ÓÜÃøqâ m~ã%ëÃÚüð>‡�_†ø‘ß—‡óÇé”ãßþëýÆDßþ“ÇÅ/‡®?â·ðÉöãþ&�N+ÜÃø{Ç‘·7ñrõá¼å~x#ǯÂÜPïnÏÞ�2lÅÿî»þ·2'ø¿ðœçoÄ¯OøhõíÆ§ÿëý+ÝÃð«spwGׇ³eÛ¾ ñëð�»¥ÂüFý2LÍÿ7ů…‡§Ä¿‡çéã/sôÆ¥éøŠ÷0üÆ*ÜÜ%ÄË×"ÍWç„&~™hý?æÇ›â¯ÃÎ߈þ?OøxûvÔHê?Î+ÛÃðw+sp¿+wÉ3%çÿ@ÈòçÀühçÿ$‡[¿ú¿›ó!—7ņ‡§Ä?úx·@'ÿN\õ¯j‡ ñBµøo>^¹>b¿÷\é§Áf·á.'_÷AÍù�Ì›âoÜ|@ðAúx¯A>�¿>˜ë^Íâ8Úü?�¯\§¿:ðú|Æ ~âUë‘fŸ®Ë—âOóœx÷Á‡ƒÓÅ:Àô¿çüŒW±C‡sõkäyÂõË1‹ó z¸;‹Vü-ÄK×$Ìÿù”Ì—â7€ 8ñ׃ŽGoè½}8¾üúŽ3ž•ìÐÈs¥käù¢õËñk·zKúèzøKŠ•¯Ã<@¶ß&ÌU¿òØÉ›â€ÎqãoŸ§‰4nÿKßN�ø¯f†O›+se™ŠõÁbWçHï¥ÂœN­~Ï—®O˜/ÏfMãßžÆ^<ñ�éþW�¿úõìÐÊóÚø jõÂ×[zÃúò;éðÇ/ù§óÏžS�_û®eË㟞‹ü.zôñ’Oá‹ÃÛ�˱çÙ¡€Æ+sa1+mèU_œFŸ ñ µòåzåxåÿ¸ ¹¼màæéâÏ Ÿ¦½¥óù]÷éø}3ìPÂâ¯Bªõ§5ù£Ð§ÃÙòß$Í×®[�_û‡üŒÉ¼cáœx«Ã„óÓ\Ó?ù'Ž€}{s^Í SV¼$½b׿¼ÎêYx·É³Uë—ã?ùI—7‹|,s�x|޼k:qïŽ×9ÿµ†ÿ Šø6Ÿÿ$ðП¿è¸| ÿ×à¿þ]Qý›˜ÿÐ7ÿ kÿò°úÖþ‚(àÚü�ÃB|ÿ¢áðƒÿ_‚ÿùuGöncÿ@ßü%¯ÿÊÃëXoú¡ÿƒ©ÿòAÿ ðþ‹‡Âü9~ ÿåÕÙ¹�ýcð–¿ÿ+­a¿è"‡þ§ÿÉü4'À/ú.?ðåø/ÿ—Tfæ?ô�ÿÂZÿü¬>µ†ÿ Šø6Ÿÿ$ðПÿè¸| ÿ×à¿þ]Qý›˜ÿÐ7ÿ kÿò°úÖþ‚(àêü�ÃB|ÿ¢áðƒÿ_ƒ?ùuGöncÿ@ßü%¯ÿÊÃëXoú¡ÿƒ©ÿòAÿ ð þ‹‡Âü9~ ÿåÕÙ¹�ýcð–¿ÿ+­a¿è"‡þ §ÿÉü4'À?ú.?ðåø3ÿ—Tfæ?ô�ÿÂZÿü¬>µ†ÿ Šø:Ÿÿ$ðП¿è¸| ÿ×à¿þ]Qý›˜ÿÐ7ÿ kÿò°úÖþ‚(àÚü�ÃB|ÿ¢áðƒÿ_‚ÿùuGöncÿ@ßü%¯ÿÊÃëXoú¡ÿƒ©ÿòAÿ ðþ‹‡Âü9~ ÿåÕÙ¹�ýcð–¿ÿ+­a¿è"‡þ§ÿÉü4'À/ú.?ðåø/ÿ—Tfæ?ô�ÿÂZÿü¬>µ†ÿ Šø6Ÿÿ$W»ý£¿g« i¯/~;üµ´·C$÷üNðTpÃêÒHÚØU²O$€95PʳIÉFn>r“´c"Ro²J›mú âð‘MˇInÝji/›‘üÏÿÁjÿà±<_ð‡Å_²'ì¯ã ‰:‡Ä‡Hø¯ñCÂ׆ëÁš?„ãšÞö÷¾×­[ì¾(Ô|FcŠÃX½Ò¥ºÐí4vÔtù.î¯.¥·µýëÂ� sJy®‰xƒ < ½¶_€ÅSpÅ×Å+Æž"µ ¥<5,;½ZJ¬aZu•)Æ*œy§ù÷qVXJ¹^]Z8Š˜…ɉÄR—5t]œ©S©v¬ê¯v\�Â0r‹nM¨ÿ#¶£¡Ï·<ñÇ'îžsÏ¿«)+[úþ¾ãòIëý|ÞÆÌl1Æ;õïß¿t=õÀ»bôÿ‚ÌZ¿m¿àúÿ[™x=p8Î?ÃŽ3ÇcÓ­jž„ Þ}qÿêý¨Ç¥òþ¿¯Ì-ý|ÃyÇñöÀì:ûc "—7 Zÿ×õýX@Ý3‚y÷÷ïÐûúsŽhæó _€ÒøïÛ§ù9#}ÀÉ'ª¿õÿvþ¿¯ëQ›½Ç×Lr8<ö¤ßëúù†–ëÐqëǧo_ÄzsÕ6ÿ«ýã·â1›ÜŸÌ`ö<ò}‡±Ï57ÿ�ý~%Xac�sì=ÿ/^ß\œÒoúþ¿¯¼?­¿¯.¯Ð�w\Àý}>£7¿¯Ëðê0¶yéØ~Gßüã·tØÄ'žxõ'§~ÿ‰è$çTÿKúýCúü¿¯øq¹üG8÷ïÇOsš/ý}Áý_—ê!ãœ÷÷Èêzw#¨ã¥"¿¯ëúÿ€zÜŽzõÆ3ô½y<ÔÜ?ëç×°êsÓӨ란ôãÓÓÕÿ_×Þ+|¿®Ãz㎧úŒwô?�¢ã°g±ÈÏ>ýúž½yé�Ò€€r:ñÎzúñ�ôϯ¯±[_Öýƒ8§à? ~= ÜN?Î{ðòM¿õÐ\‘Ôq× ñÏ|Çõôí@ÿ­„Ï`yà}q�O§>þŸJ>¼ðyïôÏN¡ëƒÓšúü ž¸üÿù÷ãó@üzp¯·n=:Ð/éþ N—~2098?^ëŠçýÁ ‘øþýn�ùǯ4\_×õó Ÿn¹ã�éÛéôäñL?¯?ëæž§Ž:ñŸçôã½ý_Õúú½¨øoU¶Ö4¹#K»1Y&‰.mní§�༰¾µ—t7vÖÒIiyk0hî-å’6R!ÆNRŽëºVi«4×TÖ�u¹5)Ƭ% ß•õNÎ-kE­T¢í(¾�\�Z»Óoµ;Û½#M:6Ÿs/›–o$¿[è�,]ÍsKl“¨¸ßq¿“ ÅÅÔÈ×’i¶ÒåMÝ+Ý/+îÕö¾ËGÜ!FSŸ<££•¹\­³i]'mí£wi$ì³sŒc¿û~œqŸÆ¦åtýt“뎟NŸ�á×#éEÿ¯ëúý…çÿÇÛã±éØÐ ø$ôïõàð õî9÷ ?¯êÁéÈ—ù_ä'â3Ïùíß¡ëŸnhëúù ØôéÏòíëùzz�×ë ~$úu=מܞ¹€ ñ�߯¿¿õëØòh¯õ`ñãg?˜÷þ„úÿƒýj!=óÓ¡À=sïþqÚ�ŽÏ8ÿõqïø‘Æ9<�@­ý_{ÿ‡?�¡úö þsŒŠ.×õýzýúž½yé�Ò€€r:ñÎzúñ�ôϯ¯±[_Öýƒ8§à? ~= ÜN?Î{ðòM¿õÐ\‘Ôq× ñÏ|Çõôí@ÿ­„Ï`yà}q�O§>þŸJ>¼ðyïôÏN¡ëƒÓšúü ž¸üÿù÷ãó@üzp¯·n=:Ð/éþ N—~2098?^ëŠçýÁ ‘øþýn�ùǯ4\_×õó Ÿn¹ã�éÛéôäñL?¯?ëæ(•ÌB€¼±9è\±Àéõ¢à¿¯ëú¹ÓYZŧGö»  Á"pÅ è«É�›�£�œÖ‰r«½ú_™-·¢Ûúþ¿R�ÅÔ—R$#¸U죰^ß\àçð›¸í ÀqÓœœzûý8ïÇ­K%þ:kæ&O®:}:~?‡\�¥þ¿¯ëô,($ sôõïŒsŒ{zv4†ŸõØpü =;ýx<}{Ž{æ‘_×ùlÆ9§ù˜ç®;qǾ .sŸLc¸ÿ8êxõã“@_×õê[Š%EM’¿òÎ<}óŽ3ž~øïV„û/ëþê#HÛ‰ê>€Aøþ}Ï'ý_×èþ¿@ õú÷Wgªèÿ¯ëôÀÉüsøýç·çYšújâBøÿŸÑéÝ{ÞøôéÞµOÜù‘ÿ/>F6I wÎ1Ôœœ pFOlOAœR+úûÿ¯ø&ôqÁ£[‹ûàéÆmm22Ž\8ÎIÎ#\�U¤UÞïeý~}w–Šöêÿ­<¿’¼½žúv¸�·3tQ÷#\œ"�ª2=sÉ99¬›më¿õýX´¬´*�œcÛ9íߎþü¼Röp0«éƒë×§×§9ëšúù÷ù‘“ߟ|qôÎ0?ϨäLîOQÐãðéëׯ$ ñM;î×õÔasŸçØôàœö¥¶�ý^` ê?¯~céÓúPœýÜœpéŽÏ94Ûµ½áßúþ˜Üÿžç9ü‡±Ïã“T�Ãúþ¿!ã 77¶òãÔvÇ~Ô_îþ¿_×ê|®±¢–f ’L’pžMî>æüQŦD€’îEgîAÔ…ÈÁsÀÀ¤}HÖ^I_×—™œîò³;±f<ÿ>ç  qQröè{ôìúzg9 ?¯êá’:{qëøqŸçÎ}MþŸL~¾ƒ½ôÀÿ=qØóŽ=ðhsœúcÇùÇSǯš.×õýz—m- Á.í²åä< N¶èrØÂ�^•¤ußïþ¾â[·õù‘ê:�•E¥¯îíTaˆùL¤ì™ÿ¾þóz*”¯¢Ûóÿ�ývº½ÿ­Ì\ý~¾ý²}3ü³ô‚ƒ>ý}øÿ³o£ËmmªO§¬€ÝçÜ^E=­½ÜЫGóÁ�0?¥&}ñÐ{cçúýhçÜçùcŸÇ&€þ¿¯È3ßžÝ?Î8ǧåÈÉÇc×ê>§c®89'Œe_ׯüák_×q éœþ|çõÇùsGõÿÌ?¯ëúüEÏøè?À‡×¨ÏlÓ¸ éëÓ úã¶zž¼u'4ÿ¯ëúü7Î1Žøzôç߯Nx=sÍ;‹úþ¿­ºÎxúsœä~yÿ½�ÏלqüóUpkúþ¿­;� Ôþ�ùëô8æ�Ù?×õßÓÐv{gÿ¯Ô�AÏ=:gîÖƒ·qÇB?^2=sœûqÉâ®/?ëÊÿ�úÝõ�~1íùóÜИ[úþ¾ñÁÿ_À{õéœÏnxÍ;î+y_Ö¢†˜_Ãÿ×ÁϨÛüÂß×õý0ßõã¡ã8çý1Ï4ïäþ´ ÿ§^8‰ü‡çñÍ^Ÿ×õp·õý|Ãw¿×®sÈç§ÿXñÜQëúùÿ[–xéž9Éý>œã­õ×^Á`ÝÇ|ãŽÀz ÷ÇO2q‚\ÒÁ¿$àý1ì:~1Ç=èæþ¿­BÞŸ×`ßõÿõûvü? .+wé¸oõ=ýsÜóÈì>™=ºQÍý]Âß×õ÷‰æBAÆ:ûz`1Ô¸XPãôþ|{ã¯åšþ½?¯¸vü?¯ëQ7Ž1è3õëÇqß¡ö8ì_úÔ-ý_×AKöüóœöÀé×§^”\-ý^¢Ï<û‘Ç~3Ðz>¢áoëúþ»X]ß_©qÇLñøóïEÿ¯ëúb¶Ý×õýzü�ˆ ôžùãĶR_ð¯êåGŽ3‚3íÎíŽÇŒ€q‘Œg¯õ¡QþŸ—õýicx²Np:È98 žœãŒúyì9*Bë¯_ë±¼_õý]̹m}$\篧ÐäŽ êkŽt¯ÑÜÙKo"“Ùã�¬}qÏL‘ÇËŒ`íc=†qtoÓúü‹Sóþ¿¿bÇqÏOR2{’AÎ'§=�º?ÇþúØ~ÓúÓþêã~ÅÓ#°ùà2HǦzqš~ÇËúþ¿®¡í?釨²=ð§á�®;Œã9'±òþ¿¯ë±í-ýX—B×{û ã$óÇRwQì|¿=>àöŸå¸¿c Œ/P9Ç=ñøçñõÉ£ýy~£çÿ‡ë÷ÿ^B}ˆrldzާÔñÇ;³ž{n£Øi·çý]EÏý\_±ŒèyñŽ€ÿÈÆ=ç4½�¿¯ëú~ƒçþ¯ÿ ë¨ 1’qž1Üã8é’zt‡Œç<ŽzqŽsž˜ÅuBéýW1nÿ×ëþ€¤Ÿ^þ¼ààtä õÁî{)¯ëÏúÿƒ±Œµ¿õ¡q8ôã°˜>ØéÛ€2Fé�ÖŸ×õýzŽß’H=øÇ°èxñŽ9ê@ô«ÿ_Ö¤Ûúþ¿«‰¿‘×ÿ¬}»~ö§ëúÿ€+Áþ¿¯¸7ò3޾¹ï×§ãÛ>�(¿—õÿúc°›ýºóŒñøûuÀôÕ_Ó·È-ý]„ÓÛùýúÞ¼z+ù�/ëúþ´_}^ƒ§â|g¯QëÌ?ÔBÄþ#ñíׯÐóÚ•üýCüÿ…»óïŽ9ð·óàŽUÿ¯ëúùúþ¿®ãIÆ>§œ~�Ï®*oý_×Èvþ¯°ÂG×ü}1Ž¿—=¨ºº‰“מŸà·n˜¯¸[_טÌúàtsÛ:ãõþT7ý]Cúþ¼ÀŸËúõëÀüsŸ|ó…qÛúÓúüDüø÷Î=8ãÆü±H,;8Ô�\œq�N=:¯ëúõÿ€Ÿ‡~¹ãë�ÓŽ:ãÖ…ýŸŸôÆ7¨þ@tïØžy¦ ô=úvý=3œÐ×õpÉ=¸õü8Ïóç>¦€ ÿO¦?_AÞ€ ú`ž¸ìyÇø4¹Î}1Žãüã©ã׎Mý_ר‡ê#�aÛç·µ.QÏùõ'ðõöLý~¾ý²}3ü³ô3ï×ß�óÆ9úä P×â/ÀqœŸÃ `ý@#ÿ¯ßç¿=‡Ôÿ'އ¡þYõüh¸cÎ{÷÷ÿŸæ(F;ôýÉÏO§4± jvº>¯g}¥Zk–1´±_éWÀˆo,® –ÖîçÉix-æwÓïáãN¾KkØ3-ºƒQ’Œ“qRZÝ>©èíÙÙèÖÎÌŠ�u ãÊœž±œwŒ“N.Û5uiEé(·¹«âß Ç¡\YÞéw2ê^× {ÿ êÒ$i-Ū?—q§ê 4Vúæ�9û±hŽBL#ºƒ}…í”óÔãÊÓZÂJð}Z½šÞ‹ÒK¾«F™jºŠQ’Q«MòÕ‚½”žªQ¾ôæ½èJÚ­¼¤—#ŸLÿúóÐv÷Åfl.sÜd^¾ãŒ=:žÝ(¸_õÿLŸþ·n1úuà}> þœô÷ÿÛùb�ëúÿ Ž1è?§§¯òé@9Çë×'‘úôïÏ4õýz�=ù÷ÇLãüúŽ@nÞ¸ü:tÏ^O=ø¢à¿úþ¼ãüç¶(ëúóÔ^üÇÓ¦ô Ͼ:lcÿ_­Ãüûœÿ!ìsøäÐ×õù{ÿŸþ¶1ÀÇòäÏoÏ×�©8éþEzvüsǹã¦?/Zúþ¿­¼Ã¨þ@tïØžy Ð÷éØôô8Îs@_ÕÃ$töã×ðã?Ïœúš3ý>˜ý}z3é�þzã±ç{àÐç9ôÆ;�óާ�^94õý^¢©üŽ=‡lgžÞÔ¹ýG?çÔŸÃר3õúûöÉôÏòÏÐÏ¿_~?Ïçë�1@_ˆ½ÿÆpN ~€ƒõL�þ¿|žüöP±  ’HBääñÀIǯ< ÐKgi�Ú®°Ó°ÌqƒÊd9ÏÌÜ„wæÒQÕïýmýzîô[zg¸{‰ Èxçj‚p£®‘É>Ô¹¯¾¿ íbóé�l÷Æ:}9=è }Oùü3žÞüÒbhx>Ÿç9è;~•"z‹œúp}zûއSÛ8¤×ßýÁOÿ[·ý:ð;ð1Ü)¿·==ÿÄvþX¥ý_årº_×Þ^²³{§ʸó$=±ÎÔ8ûÇ®ã9lt:FïÓúê&íúÁ©êˆ#û� “Ì™%È81£óürg.Kà Ĥ¶[uþµÐ•¯Vú~§4ﻦBŽ€~…ºd“ßôÈÉ̱¡Iã·®?ž½y<÷âšv^ÿëúó‚?Ï=±HZ-?¯øqê éÇ¿8ÇútÀ£qþd‘©™‚.D`€ì:¹Áßž>‡ð,—߯ävÖÐéP¬÷ Ë.míºìÈáäˆ#'vJž›˜’5IEk¿DK¼´_Wú~…x®$žò)%bÎÓFsØ|ã€((}9�o0q²ôþ®K|ÅogÛ•"\äpA#œðxü>•W×òZ_×Pžµˆ‚>ØõÔfcµnÇîäÁ<ãîœg>Û… soñt}ý¯? Mǽ¯ªíéóïù˜ÚF�& æöõ™m‹»1ÃNAËs�€ç{à eTç%sŒ\�Þߟüå+h·:1¨¬·¶vv€Eg±  0oN1òƸçæ8§5ÚKnžð å²mîÿ«ùluI™øØ§™pmƒƒ†•lw#4›´Ÿãç·õ¸ÔSŠüʾ‘ÔGRÒ×plµÍºà2œ|î«‘†™#äË“€T£uÍšþºÿÄd×»/“8ìžAãò㯟§·½cý]ÿ«šOõõÿõtä /ÿ ýy�j(Â,½?�W=™½#¸ç¯LU-ßÝýtùˆF‘²Ýzè:;cðç©^úÿ_×õÔcAééÛðüÇ¡àóÖ©?ëúþ¿8=1úãŽãׯ¶}øªùŠÅˆÔmó%;c\sýóýÕÇ9ìqÛ?„úíýzþ$Ûúþ¿­Ê×-9Ç à"€tÉ÷#©ü©¿ªí÷vþ¿B­bþ›§ œÜÜ“œY29àÉ�áCÎx,²‚Ä⢯«Ûä&í¢ßò-ß_} ,�¬XXã^7mà1À轺òy{í²ÓåßÕ‚VשA[œO_Oðýj—ò¸Xv~‡�ÓùŸONÃ:“oëúó,[]Mi*Í me>ÅYOUaüJqÏ÷=2Õ4¤¹£ºÝ_×â ¸èöïúzŒ\� ÀÎMðcœí\;ŸaƒžÝi˽þ×Ïmöü¼ùž�n·÷à=Óƒö[RFàÝC¸ }æ+ˆÇc!­>UyoÑŸõÿo™òÇn¯ôþ¿áù+ËÙ¯§{‰Ø'*B¢ˆƒ�Rz±$Ö-·ëùy"ÒIY”nþ¼ôéëž}¿�l1KcåSŒuãûsŸ©ãÓžæß×ü5¿­gùÿ?QÇ\öëGõýzjž¿ý~zûuÇ<ñÜžqGõýkú€ãžŽyÿ=°9öê_ú`K¸8ÁëØã“þOlóÛ­;ßN½ÿ×áþaààŒtöC×üóèSÓúþ¿®À=ûz�Ÿþ±ëÎ=~¹ÁÈmíéý|¾@*€¼žÇ#§¡í‚sÇB@ÏåM]jþï×A7Ë"¢ÌÍ…UõÏOl{ýIÆi6Ûü¿¯òÿ 7#X´ØÁlIvã�D¨ïòŽ™à¹à`E-÷z’ÝÊ+;3ÈŘœ“è?^`0­K»þ¿¯À°ddv�ëùÿŸÈRùÿŸõý"Ã>‡�ný¨¿õý\ä`cëÎõë�LqØó“Gõþ@&O|~‡×ޝ§ǽ/ëúïý\Ÿëëÿêè3È_þúó奣NK±ÙrîxÈ^XÓ äôϰ¤¯éýÃ^ânÞ½ˆõ DJ>Ëkò[ ÚJðeÇNßs c€\‚O\åue¢_�ù|öëq%Õîcç§§oÃóþ‡ƒÏZŸêß×õø”ç¦?^ÝñÎB*>`¯OóÛØõúQp õÉôäõÇô´Kþúýï¾øøÏP¾›PÔ—ÃÞðÝ—öÏŒüWqm-Õ¶ƒ£‰£¶ˆCm#j:Þ¯{4:O‡tXå†]WU¸‚&šÖÍ/oí%ÊË»è´ÕÿÀëÛϨ—ɾ.Õ4=_Ä×¾УðÖƒþ�k¤é"ê{Ûˆìl-a±‚çQ»�ÛíZÅüvâûY¸·ŽÖÎ}Nâîk++;WŽÞ&¯m]õ×ç¯ü03›ŸÓ§¯¶9úþµ¥öÿ0 ý Àÿ>§ÓÐt)êùuõä�ÇÒ¿õpüÿžqôç?Ê�ëúþ½Cúþ¼Ã>øëŽ=�Áÿ Ž}éüÿ úÑëî¹xÀçüöÏ~ãùQý}ã çž<Ó×üý£úþ¿¤ÓëùsíþG§QKúòý?ÏùúŽ:ç·Z×õé¨zÿõùëí×óÇryÅ×õ¯èg¿ŽÜóþzŒ}º—þ˜ ž¿�nO9ôõíÏ·Z?¯ë§_ #?—·=;õÿ=‰ý_×Üö>½O¿8õÇLô<èŸÇž¼ íÜâ�?ÃõÏ=úó�åí�òzÑúÿ_ÕƒüÅÏ·>½}3Ó9ç�ìqÏeý~vû¶þ®N'òé�\÷#'��sœÑ{°ùÿ_ðÏlã�=Hë×óõÆ(þ¿¯È?¯éqÓ§¨éžž‡ÿ¯‘Í?먬.pÆ{u¯×¶=sM?ëúþ·ëúêç®Оüzc¯N8�ÿ¯ë^»‡�íÃÛSÉöÎàwÁý(¸Hüù÷¹?ç¦sŠw_×üá³þ'=øëõëÇ8#¹Ã¿õýuü‚ÚHPÞ�;p}ºŸðÆ}1NäÛúþ¿w޾‡žzzgƒÁö$üÿ×õúì=¿¯ëõbîÁÉéè2?È�¯=ÿ†þ¿¯ÄVù~îõöç¦>Ãòà`Šwóþ´þ¿^çõý_˜oÉÉ=¹ÿëÿ.Ý3ÐÑ0ù »€sŽžÿ‡ø~=¹üúôþ·ëü�_Ÿr~ ä}xúuÿÖ¿×à×Oëú¸›Ï±<ž0O¦G Æ(¿˜_Õ¿.Ú�ÄgŽ~¿§ÔðOzw¸Ï¿éÇ`qÜwϯ¥+ÿ_×¥ƒî þãúçƒÇòÇz/çù‡ëúþ»€~‡úŽ:~âýŸ è28Ç9I§cÉ÷Rözßúÿƒê.»úë÷�{têHzq�}søûš~Ï`æÈ#øs޹##ñ'¯g¶rhöwçó/ëú§Þ'‘œ‚Ó $rxêG^r:qØÍ_×ü8s‡é×éÏ^:Š àp9£ÙÿÁÓïùvoQ¾FÓ±êO~Fxã?CÙ¯ë_ÇÉ~�›úëýZg·>¸ç¦Ï#°\à{M/gùÿ—õäÝuþ¿ÏÐ>ÏÀÀÏ]¸þy’rÁÁÓö}}o§ùÛî¿�s_Ö¶õ#æû¼z`œp1Ÿ½Á瑜ñœŠ=šþ¾Zÿÿòëþù öqß'‘íÁéÜtî>§°£Ùÿ_ÒþºùÂù'œ÷ÆNqëì=z3ŒQìþëþ½º‹›ú_æ(€–çê1úàãÓ±ã¾sB¦¼üôóþ¿­›Öÿ×õ¡*ÃÀÜúõôÏ×=½�~Çõùþ[W'ŽOåÓ¹ç$dð1îsš/v13Î:@õÇ×üþBŸÏüÿ¯égÐñíßµþ¿«€¼Œ }yÁ½qéŽ;rhþ¿ÈÉï�ÐúñÁõôã÷¥ý]ÿ«€ý}ý]y‹ÿÃ^`&qïþzŸéþpÿ¯ëþÎ~¿¯·×òíÚ�ëúõþ·ÏON߇æ;ýž´Vþ¿¯Ä<ôÇëÛ¾9ÏèOåGÌõéþ{{>¿J.ž¹>œž¸þƒÖ�éÃ_ u>¿þ¾}qø}i_úþ¿à~>Ÿçðþ\Ž9§ÏðŸÓ§¯¶9úþµ/Òû˜~„àŸSéè:”õüºú�òGãŽi_ú¸ΡzlK7wMKÉ/ÒÃͲ-ì°Çm%ÚÁ»ÊQBÒãÌh£T' wvJîÉÞÝ.ÒW·}–Ÿ2yW7=—7//5•ùSo–þ®ý®;RÓoô{ë�7S¶–ÊúÕ‚Om:âHËF’Ær2¯±:M±±ŽX]%‰ž7 \¢âÚ•ÓVºëÞþ–ÛºÔ!8Î*p’”^ÍmÙüÕ¬ÖéÝ2Ž}i_úû†.G^09ÿ=³ß¸þT_xÃ9çŸÏtõÿ?@(þ¿¯étúþ\û‘éÔRþ¼¿@óþ~£Ž¹íÖŸõýzjž¿ý~zûuÇ<ñÜžqGõýkú™ïÁã·<ÿž£Ÿn¥ÿ¦ç¯ãÛ“Î}={síÖ�ëúé×ÈÈÏåíÁÏNýÏb_×õ÷½�¯_ÓïÎ=qÓ=úgñç¯È{w8£Ïðý@3Ϲã§ÓÛ縣õþ¿«dtü–À.x_×õùW2;ŸÿW¯á�­;ÜÏ8è ×_óù >çýH>‡�ný¨¿õý\ä`cëÎõë�LqØó“Gõþ@&O|~‡×ޝ§ǽ/ëúïý\Ÿëëÿêè3È_þúó3�óÔÿOó‡ý_ðà.sõý}¾¿—nÔ_ׯõ¸zzvü?1ßèx<õ£ú·õý~ ç¦?^ÝñÎB*>`¯OóÛØõúQp õÉôäõÇô´KþúýQÉd’q�ÔžõêN=:u¤¿¯ëþŠÒÕ,"W836' S#¢ÿ·Žñ´gdÖ‰òêõ×âÿáˆnút)Íq%Ä…Ÿè«ÎÔSØ sŽ¿_N•-·ýmm>_×R’±~„àŸSéè:”µg·Ϩÿ$~8¦ŸÝëý|Äçüó�§9þU_×õÿõëúó6^?úï¯éßÞ†¼ú «ÿ_×õêIžùëïùút©þ¿"EuãŸóÛ=û�åGõ÷�zÆÍîäDK̯Óhã�œå›Ó·$à i_Éuc½¿¯QÚž¤Š�abvBŸ,Ò§Ïñ$drrÖ9Æã•†K7$½Øí³kúZ~`–·{ÿ_Òÿ3›-ž™°ÿî8ëžÝjü?¯ó+úó|Ü~yÏ¿·\r;w'œQùVëúõê<¶À1‚qž9þXçÛRÿ+Œ–$vä“íœçóíÏ·Zþ—õn¢jÿס2�4ˆÐ¹‘ÕÉ8 ½IÉÆ=N³í{mæ#±´¶‡H…n.•Zñ”›{c�ÝŒòÎFpØäžƒIÈÙZ 7¿Eú¿ëÓS6Ü´[u~e gyäi%bîÍœœ`pà@ÀéÍ+ß^½†´ôlÒmñÿ=âéÓïŽ=ºÿž”–ëÍ®¿×áþE=ŸõÐÓ¼³»’êwX‘œ•aŽGŽzv>‹»²oúþ‘I-¯ëçÓRaz>D€ƒ�F8Æ9Èlä{cëÅ;7Óúè+®ä:–¨²¯Ùmq¬[Wä<Í£1ˆýÆà2p2*%;éçÓ§NÃJÞl«¦œßÛgþ{(ïù÷3íëìA꿯Ëúýi»Å“jç7ó“þÁçýÁÀÏ|�§œ·×Eú þº‘XßËe(u;£b‘– H3ÔuÆNÓŒŽ‡ š·ù_×�8¦¿&?WÒ"º‹ûOLV® 7d™‘@ÈqüHîËœŠ%ûÑù¥ý}è˜É¯v_õùœ¼QªþòN‡„LòÄ=ç·$Nríåý^¥¿ w,rǶ1ÔÛ�œ téøÐÝÿ¯>Ÿ×ê; ÏûYéè=ý¸?ËŽzÑýwû€\ŽãÜzéúu£úÿ†þ·X‘Nd”ì‰s‘�– Œ*úäž¾½=©=?_ëúõ°Ÿ–ì¯5ɘô!c õÔšê�¢@O¯éŽsž2=ý³ÍOõéýZbŵÌö³,Ð1Œd�ÀžP¨ûÃÔs“î4ìôÿ‡ t;�BÎÆÉ.g€G4Î&[L‚ÍpT|Øè ˜¶Üýß0âµn*7k}R²ßúÜ”›véúwy{=ôï<îYÙ°NÄQ’?*�Ø`“É$’Õ‹m»¿øn†ÉYYW-ì8ã�×§AÜ{cÔc+þoë wÇ¿N>½³�lúwç?˜äúqÿÖïÚ€ ’:qŒþG¨öî2(О¾ý_©#П¯9£_¸wO¯°?Ld?,ûâ�ëOø ¹<þG ‘Û¯=8ïÒ‹ÿ^ JqƒŒñ´ã×ú㟧{è÷Ûúù€¬@ÃÀc·~3ŸO×4ÚêßOëúùvƒt®%ˆ ÏQŸCÐäŸLäšWð?7#Hôøó�%܃  �ØéŽvä‘ܹÀQŒš´­ë÷ÿ_Ö¤îü‘Ý­å³#ÝÆÊÓ§˜¤äƒÀÊ0¬¹&xzŒ¦šzÿ_×]{íÓó¹P7¯lŸ©úúöÍ/Ôìõôéߎœ÷Æ}½}§úþ¿¯ø-; ‘×ñçéÐ{ä}8<ç€ký~¿"…<ždú÷õ#¦xÇÐþ¿à_ Ž;}@ç}sïÔô4_çú_pm-MÃs²ÿXäã�ŸºN=OAõêÒ¿¢ëý^BnÞ¤Z† ²²Û|–©òœeÀÇ8ÎÓ‘»9PßEýkÓæ ùÿk==¿·ùqÏZ_׸bäc¦=¸ôÓ­×ü0 Ï<ñê0:ÿ^¿‰éGõëúéÐÜ9Ç¿¹=yR}_cú¿ôÀ»e§j¤¯m¦Ù^êÛ^^<66³ÞL–Z}´··÷o #‹[+(&º»¸aå[ÛC-ÄΑFî¥×Wøÿ_w /ÿÂM® ÿÂ"5)ãðÛë/â t˜„q[ÜëÊ->;ëÖ‰{Ù-¬£0Ø%ܳæ‹­Aì"·“SÔéY^ýt×ËÊþ§`0ý;zûqÆxé×ÛšwëÆ89ôÜñžã4_wõäŸ\ë××OLúzb�0 ž?{zcœçŒ�nô_×õø¹'Üç¹÷è8íÎy9çÓ”Ÿç�Àóøw#¯§~õÿúü€@{ õÇ=;Ÿåè±ïGnßÒÏáÐ8ïÓ·qí�QŒŸð{~?p Hã·éÁç9ížÝ>™ä&qÓðéŽO§ýný¨É#§Ïäz�nã"� ëïÐuú’= úñÓš5û€7túûôÆ@ãòϾ(þ´ÿ‚ë“ÏåÈ$vê3ÓŽý(¿õê�ÃcŽ™þ¸þ}úQý_0w|uÛ¹÷'¸ÿ:_×õ` çרǸϧ¯óëFÀ(?§=?þ¾xç=hùïóGlpq×u ã¹#w?×õúéæ1r‹¨ÇÓ?—^½9'¡4iÓ¯õóù€q“ϱç·^ÙàûsÎOGëúþ¿Súþ¿¯1 8Ž;ç±éÏ_Óƒî(þ¿¤!AÏR9ãГœ÷Èœv#w§p ޽ÇPlu<ç·Áé‚(OP�O¸Ï Ï¦xêzséÈ4Óþ¾ïëôsü°{Ÿó푟q“Eôþ¿¯˜X\òyζxÈ'çñ88Í;íýyˆ\ôãŒtãž?N;ôÇaEÿëOëp·õ¨™Ï^£�û÷=z“Ðz;ÿ_×�[úù‹¿Ž£¿SמO=ŽN};û _åÿ úŽÈÆ3øþgŸ^:zñÉìsuþ¾_Ö‚·õÔMüsß§ä=ýáéè]iýw iúÿ]vqú�aÀç ã¿Nôïׯ@·õý_�níþd{sž­þ¿­ÿ¯P·õÓïÐ]ÜóÆ?^½sëÛØ{R¿ù¿ÏþP ÓéÏ®8Æs߯^Ý�ßúþ½úþ¶Ý9Î[¿çŽ˜àpOSÇ©È-ý_Ö€_¿à}0Nqíì9Æ>´\-ýiýl&ïBsÓŸlçŽ:ôÀ'¿pïýZŠÝ¿¯ëþ°o'¯l_^�½=±ëJÿ×õéýh;Ãÿà [ðôèœõãôϱä;ÿ_ð߯ü9oÐBØéý=qßߌv={R¿õþAo˜»‰íÛ p;öã§ñE_�Ÿõó°[·Ýý~ Xôè3Àç¿RxηcÇ9Ép·õý?ÓÌ<Μ÷�}1œ¸=sì(¿¯õýlþ¿¯êÂdœç·9?\tïϯähºùŸõÐvÿ†þ¿®Ãƒœ}8íŸñíœuã‡$ѧfåý~?€»FIÎzwSŒà`ûp{õ—ùÃÿÁ %ý/øðDÚ0éŒã�Oþ·^ž´YW¿ä¿ ëä0Ú¼äã ð@Ï_ÌŽzñ“ÀòüCúþ¿?Q0¤ߟAžAÏO®{Œç¨Z_ðëþ�z~wùŽ*1÷�ûÝOr~£¹ç® ?᯿ãø—êß×à7?Ÿ^Ýùã#Ó8ë‚q‚Ëk}ÿ0þ·ã¶è0AÇR>½ùziçä/ëúþµ#§oϯ¿$Œ÷çÓŠ×õåè×õ°o=Çéëõõížqœž�õý�?ø!¼’3ϯ®8ÆsÆG={v4îµ¶Ÿ×_òõýlºsœ·Ï1À<àž§�Rÿ�[úþ¿­¿9ü?s�ðã§­ ÀØMÞ„ç§óÏué€Oæÿ¯ëP·oÇa7äóè·~�¿\Jÿð­ÂÚ~¶þ¿¯˜¥½áIÎxÿ¹÷êz/óý?¯¸Ï=ùãŽÝyçñè:�Ìíåý_� À㜣¯ç×òúz×õý~ ÿk==¿·ùqÏZ?®ÿp ‘Ž˜öãÐuü?N´_ðÀ7<óǨÀëýzþ'¥Õÿ¯ë§@pçüzäõä}Iô}�êÿÓ=:úóŒñ×ñúç­Öÿ×õäXcžùÿ'žà�§\”Àþ•À=;zûqÆxé×Ûš.׌pséß9¹ã=Æhþ¾ïëÈ>¸ׯ®:ž™ôôÅ`<~ öôÇ9ÏþÝèþ¿¯ëðrO¹ÏsïÐqÛœòsϧ(CŸP±ñ_„Ô¯ ¶ñWƒ-ííôÙ®çXÛÄž’á"M$K3.¯á™îº\[Œ·~žæÊ0B±‚M›S§ï4§M+7öá†ýe‹¬4Ú üÊ2£[Ü‹tk¶ä¢¯ì«ZüöKHUJÓ{F¢RÄ“^važ¸ç§sü½ö=ë.Ý¿¤t†€ñÇ~�»�lzŒdÿƒÛñû€RG¿N9ÏlöéôÏ 3ŽŸ‡Lr}8ÿëwí@I8Æ#Ô{whO_~ƒ¯Ô‘èO׎œÑ¯Ü»§×ئ2–}ñGõ§ü\ž.A#·QžœwéEÿ¯P~ãtÏõÇóïÒ�ëúù€›»ã¨ÝϹ=ÇøÑÓúþ¿«g>½F8Æ}=ŸZ6AëíÏ~xëøäúç­?×úü€Lûv=Î8Æ{ø±úQýj¿¯˜}O#íÛùŸ¯OL‘Gêç¯äzñÓžà gÛרíý_×Ì#¯ãÏÓ ÷ÈúpyÏ×úý~@(9äóøã'׿©3Æ>‡õÿúùœqÛê8ãëŸ~ ç¡¢ÿ?Óúû€\óßž8íמƒ¨üÎÞ_×õùœ9Àê:þ}p?/§¡ý_×êŸö³ÓÐ{ûp—õ£úï÷¹é�n=_ÃôëGõÿ sÏŸ×�š/YZ½Ó÷XWd˜ùG_•BÇ�P'#[}ÿË×È‚MKSEŒØÙ�¯É4ª~÷÷•¯ÌFÿ‹¢äsD¤¶]?¯Ÿü9Q]_ü›-Ð�‡ÏàsíÛ½Gõý_™Bd‘ÓŒgò=G·q‘F€;vsõëßèOéŒsÕÿ_×õÜVÖì.@÷Éc�ËŒÿõºRþ¬¿1“ 2~í3Œõîs“ò€9<ôüg¡>ÿøpþ¿¯ëC²³µ‹G…nãôkl�Ý ã$îõlq�«–'¥ÊµÝôíøwþº™ünËHõ}üŒÉ®džVšVÜï‚O@8 œ(zf“×ç÷kl7v}Gßiÿ]”‚z÷9ëï۩Ϧ*¡ñ!=Ÿ¡>°@¿Ÿ¿Üý=>½OäMTŸ¼þ_’*/DŒàyêxÜçð=1Ðçÿ®t9Æ8íëõÆ¡ÈÏZ`'ã�޽ÿ>{ó€q�­)=1Éàž{�Ç#ާŽ3œç„Õp7qÐwàŽýI鎘ÆqÔS@(Ý#*¨É$PX�bp:ñÓŸr]°6"HìPaD—’à*…Î7pœ�IÀÉ‹V^¤¿ÀÞ´´]< Ëà%Ô$á�°Â@ùÛœŽ1œ/Ý^s‹øuz¾„|^êÑwïäi_K ò KÅß°ÆÛñ—ŠF_õˆs‘êGqõ ¶õ³ÛÓgßúÐvºß_êßÕ¼Î2þÆk ¶IûÈŸæ†a÷%LäèØå‡br8 Öm[úüFµZ|×bŸÿ¬�rëùý©Ì\€=G¡Ÿ\däûA§mƒÏSÀãñê{~_ŽI¤YfÖØÌK¿Ë gsœòó�ž¼c<ü¸Éô-+ú »‘ýø‘~Ím…·_”íÊù½0ƒ?0'ï7'µ9Jú-¿0Kï2³ßŒŽŸLr1œ`ãçô‘‰×‚~˜ïéŸÔsӃК Î!Ó¾^œc·Ó¥;ޝ·=zðz“Üg·Ô€!õÉÈúúààöëÓô pÖ/->ø,ø7H¸¶ºñÇ�t�:ÿâ¯g*Íÿ߆/<�WHøucr!GƒQÔì:×�%·šEÜ4Ÿ —ŽM?Äv—S»»Ùmæûÿ—Þ=½zÿ‘áùÿQÆz{úäãßß,V ûò}ú{={罨ÎP;箿â3œ÷LŸ¨ê=¿<àÿõÏ9Íÿ>ùÏ2xöÁô9Éíœñ@ yÎzLsž21Ô×§Jw3ý;ãõrGRG^¸¤ôç<ã®zwçÓ=qógœPÎNOçÐŽzôÀçðè9À3‚zwÇAÓç¦zÿ<ÐÉÏ9ö'·#Ÿ»�\õéÒ�î§#Ÿnsø˜èsÿ×:ãvõúã�Ðäg­0ñÀÇ^ÿŸ=ùÀ8ÇÖ€ž˜äðO=Çã‘ÇSÇÎsÂ>œõüß©ÆxéÓ§Q@ žäñÇa“Œ~]xÇn~¬ŸÇÓòüÉãž;“Á ¿n0AîüãíÉ4_úþ®»‚xîaéœÓ‘œzýËüÿ¯SÌ\Ž€Œñï‘õêxíèy÷.wgŒœu÷Aü}ù=}sGõåòaoó$w=ON§§\}yÇåEÿáþ_×êçž}²s×8éׯéÒ‹€›€ïŽGN�999#’yç®4ïýu¿êý?¯ëüÃw|ó�^9ädCœãð¥åý|€\�O?OB;ôè¹ãñ8ö.nÁ䞟ýn½1ž:œc¯j/Ó·õåp“Ž3ô'·ÓåÀà�zž=(¸X]ýóü³×õüû QOëúõ݃ß<Ž=OñÏëÎG¢è'$d�ޏéÁÈÏnqÜqõ4\Üq×ÓùvëÔ~�ðr ÿ_Õ¿¦ €÷\¹ãñ=xôÇlâ‹ÿ—ôü€q<ôôÉþXô_ÿ^K€ÍÜýOLsíÓxÁíÆsÁ¢ÿ×Oé¹Ï¶9Ç^¸ç¨ëõÔ¿¯—�H'ž½;d~…íÎÝx#žzõã¦1Ó±W žùôôÉÆ0qøïø— ž�øÈöãŽ:çƒÛŽO�úü¾ðëíŒ`uÇã�xî:_ÕÃúþ¿¯Äp9#Øç¿õçŒóïÀèýmý}Þ@4“Î/^rHôÈç8ç9… A ǘ'¯®zûöêséŠ`'zôý8ôúã''ØšwÀóÔðxôç©íù~9&� Î3ÿÖÈÇN?.3Ûš`/nÄþ^ƒô?x™íEÀ3ß# ñùr1’0}FÀ:ðOÓý3úŽzpz@9Ïä:wÀëÓŒvút qÁõöç¯^R{Œöú�>¹9_\Ýz~”ØsϯLút#¨õȵÿQÆz{úäãßß(,÷äûôöz÷Î={Pœ wÏ\þ=Äg9î™?QÔ{~yÁÿëžsšþ2}óž:dñíƒès“Û9â€óœô˜çŸ©Â~h®lõšgŠá"·£Ý5+­:Ioçf¤¼šó¶Q¨¥R¥;8ÊŸ+×íBKIǺæR‹ê¥}Õùþrr>„sצ?‡AÈ©5 à�ž�ñÐtÁ9éž¿Ï4rsÎ}‰íÈçîã×=zt¤»©ÈçÛœþ¦:ÿõÀ‡8ǽ~¸Àãô9ëLüp1׿çÏ~p1õ '¦9<ÏqøäqÔñÆsœð€O§=G¿wêqž:téÔPç¹£?à�x'éŽþ™ýG=8=  œçò;àuéÆ;}:P¸àúûsׯ©=Æ{}H`“Á;³Žü’qÆ>£ŒgÚ€7-¡ŽÊ?>|4§î/&s€¼¿æc÷y¡Í+-^份ÝÿসyÜ»ÿÀW*Œž'×'éUq¥b Üuëß=z={ôÉæ¥‰«íýÁù’ƒÔz箸þc9Ïyí£'ê:�oÏ8?ýsÎsH¯øpÉ÷Îxé“Ƕ¡ÎOlçŠSß=¦9ÏpqŽ ~½:SNÀþ�ñú‚9#¹zâ­»ef÷RpJ Æ÷ÏLó€Ï\|é{8üKúüAìÍ»ýæêêI’Kp�‚¡ÞUaµB倉‡PpAƒ¥�ºüË¥Êç]¿á¾õý~ЯO&[^¼2lsÛ˜:c¦?.H¥Êü¿¯ëüÙ{îÿ‚^±Óïìå ³[´M�ñù’áÇN3 3�@íƒò“N1’}-Õ]ÿ‘-§ßúþ¿«™^ Ñâ‰þÝ’0J‰a'hvv?4í1�Ó,§jE/y|ÿ¯ë­Š„¯dþÿ/ë×ü¹4Üí�G$ãŸaï“Ûé�LÍ?_êäLeÇð¢ð«Øs‘žO'ÿÖKßúþ¿¯˜[úþ¿ÎåÛ/?÷×»µNX·Ë¿TðqêÀðxcN*úô}:ô-]Þ™ŠÇòíãFƒ€@19ã8àryÍ6þîß×õr,þe }ÿŸSß�N‡¯r*KNÿ éÛ¯ùüåŸZWþµ‘Ï×�_óÏ\ÑëúÓúòü9úô¢ÿæþ¿®ƒ†Ou q×'8×<ãùô«Nÿ�ƒõ7!Š.½½ù¦lýžÜðáºd© ¹<¬`ò µzE]ïÑ_×Ì—®‹n§9yy=ìí4ï–#åQ÷Fpˆ½0é’rO99]ݲ”RÑ_ðJê3ÀüúãÓÜÜ{vÍ/ëüÀ”#°>R³\»(Î|ÿúóÁ#ŒáƒÓôõ >ý½óŸÔ�/OëäŸÇ<û¯ùíù&}ÿ q×·_åÜûä¿õý0@8瑞yü¹ÆpG·µ×õýw° Ïבôçòþ|ý{Ÿ×õêç>ÄíÇçùEÿ¯ëúü�aFæíŒùÀýHö?ÔëQ£tŒYˆ ¯áÁã©üsÖ�þzÿ_×ÌØ�É›w/  n ·€§ÌÄàq’µµ»¾š“{ù%ßo?ëþ ÐÙÚ&˜‚ò÷j‚Ñ@H"AÃ8ìØ=º}Ô皸®]^²};z�ÝöÛ_Ÿáoëî­$¯3´’6çc’p? 8ÃŒc§¥;ÿÁþ¾ïò Ú‘ÍÄcÖÞ ß<o^½(“×åý_€âÕ­ëú‘Ç,RÂÖwƒ}³}Óœ´tÎ@¨Î:õÉMlïoÉÿ]Á®«–¾§;}a-„¡çŠOš €ýÜ©Ô`ôÈÎ òAç�A©jßÖÿ0Ñí£Ý®Ì¤oóé’?—õéSþB±vÖØÎK±ÙrîNÐ~„ž¹' êpx¡+ï·õýz ;~6"¾¿(·¶-Ðà°Ïï<òFvtÆyln#µ[¥·oë¡I[W¿Aúf™ö²gœ˜¬Ó–rvù˜ªŽŸÄ‡ É< _^ŸŸç 7o7óþ¿Ìè¯ì-.•-cÙ ÂDØôVLãËlrËò�V挃NÏMéÚĦ÷ÝuØâeŽH$x¥]Žœ2°»Œõ9pAô¨õþ¿¯øbÖ¿×_ëî#ÏÛÿ¯Ÿÿ_ÈÒ¿õý_ˆÿ¯ëþ3ÇåÁúõ÷Îx4ê'ðޱká]‹[MTÖît;‰ü½CXŸOµZµö›dc-q¤èí5�ž¡¨—HSPÔmlà7Ç|-mmóÿ�ý~¡c—Ï¿ÿ¬÷ãÓ¡ëÜŠ.tí×üþòÏ­þµÿ#Ÿ¯¿çž¹¢ÿ×õ§õäõ¯Jß×õÐ\ñø�ëŽüçŸñéGü?õúõN}zûñõé�ßî ï×¶}»ð=¿�ÏZW ùÏ_§¸çƒøuOëüÿ¯0 ãÓüçüyÁ¢àzÿ<çõäEûgñÏ>Çëþ{~@ ŸÃuí×ùw>ù/ýLÐ9ägž.qœííGõý]ìsõä}9ü¿Ÿ?^çõýz€¹Ï±ûqùþ@Qëúþ¿ ÷út<ç§á׃ýAp§øþŸCÿ×õ ×_ëúùŠOëëÜ÷öÏùü‹ÿ_€ƒ'è=?þ=;ö(þ¿¦øô½¸Nÿ¥þ¿¯ëÈ4Û¯LÐ}3œõüû+ÿ_×õä?ëÌ\ÿ�³é�B8?¡ìKÿ^¾~_בýz^¡Ô wç'‘ߌçó�Ï¿õÛúþ»õ¯oëËô¶>¸Æ~™9ÀüG¿¦(¿èþ¿¯ø,\޽:{g߯®y}2H£úþ¾Aÿ Ô^Ãë×'žp{ö÷ë‘Ôÿ×Ë·oë°[óü¿à ÁõÁúl¦z~ƒEßõýl‡õÿLvõé×Ôõî9\>‡Ô¿åýÆÿ×@Î}¸ê}ºûõ'ëÐŒSºëDà~>�yÈ<ôþ˜ÈäQëõþ¿Ì?«_úì.FqùçÔç©éœQëúþ¼Âß×Èsž¸ôäd§¡Ï#ëš.õ·_~ç’x=¦Aöè_úýþ_L�^¸ü ÇAëÓ=yéEüÿ1 Ï_¦0zz_×±¢ÿ×õý}Áoëúþº‹Ï<`ûðGü@†I¢ë¸ÿ¯é‰’3�QžAçœsÐ÷ÇÔ{QëúïÿÖŸ×õqG8çñé×88ëÓsÁ8>„¸[úî¾sÜôã¿×¨'ðê_ÏüÂÞ]ÿ¯é�OOl8äŽz󎃑š.!=9àqÀÿ<žãØã4\×OêÿÖ�œã88üsŽOqþ<š/Ûúþº¶þ¿®ážÝrr;�Ç=~¾ß‘ëúÿ‡¾ÿëúù€o|qéþxíœqŸAÊ¿õúïØ?¯ëî€:äg’¡ãž£Ž½:â�ÿ¯ëaØLúç¦z�Ͼ¯=sÞ‹ÿ_×pþ¿¯ëQI?LÐÿö^Ý_×õ¯õÜ-ý_Ó àgè8ÆrëÛ¹íÇÐæ ?—¸'ܯg߯Z.þ¿¯ëó¯QÜõƒã'óÍþ¿¯1_×õø NÓíÏçŽqÆ}9Íþ¿«_pì´ÿ0Ý×óéÐý:d�ñ‘èh¿õývüƒúÿ‡œã¯cÔcè}GZ9…oÄ\‘ÇáÁïéùq�}òMuß'ž�ñÎqƒ‚çß‚þ _×õ �¿>~™9ü@ü±Š.ôü¿¯Qr:ôíׯ_QÉϦh¿õ÷Üwàäàç¨Éôãç®G$ÿ×꿯ø*ß×§ü8÷ä~}¸À8€¨îséÓœ8ëÓ­;�úþ¿¯óõÏLã sÓ¯øó×9äÑpþ¶“Üãÿ=zñÐR¿õýyl×ù ž3é��ê'ôîrüÁëúýA¼wãÜgÜAŒd~#ž´\Ÿë×Ôð}†;gš.ƒÓ< ¦yëøãÓ~aýn¿¡�ªêQ†ó…»Ç¤&’”'~Y®‹XÍ'Ë$¯mî�þÌŸTcZœ¥*uiÙT¦ì¯¢�94ªS“I´šJqvvœ"ík§ÆuëüóŸÔ�g~ÆÁŸÇ<û¯ùíù&}ÿ q×·_åÜûä¿õý0@8瑞yü¹ÆpG·µ×õýw° Ïבôçòþ|ý{Ÿ×õêç>ÄíÇçùEÿ¯ëúü3ßéÐ󜟇^õÀNŸãú}ÿ\sÖ�ÿ]¯ëæ)?¯¯sߨcI$C÷¿¼ªÝpyÜùË€pNjSû+æÿ¯ø`KvþF^¿Ï9ýGùVwì0Ïãž}�×üöü€>ÿ†8ëÛ¯òî}ò_úþ˜\’çž{˶yî(þ¿¯ë½€PKˆ·``ufóry£îçj�Ù5¢J*î×迯ëï#âÛïùH®/nÇÚ„Œ&È;�ôåÇM¤ôÄó4ïÔVÓúþ¿àõ4¦Š-F&ºµ@—(3sl§ïãþ[D8=ÀÚûפµ[õ_ªþ»÷téÓúÓïó1óþO¯a�ÏŸÊoý™{š×:vš: ÜçÛ-ýsœwôU?…]‰_¾_×ôаÆòºÅ—v#xêO@ë’Fäô©ßúþ¶)Ù+ôþ¿3Jîò L²_H Hã‘a®sÏ!€Èãçoámòéöº¾Ä%Í亙ÃË4—rI$œ� ëÔäçøŽy<ú ɾæˆÕô÷?‰ÿ?óÍ"l_Óä!h?鲟˷Óõ÷¦¾%òýI{?ë£-jlßÚ3(pˆ"ãŒÿõ�RÖOåú{\Í2ËÏïœíøÒnÌ!<É8ùßÓïñ§wù~#I^¦æ‹ÏpÍ)wò†äRÇnâq’3Î0çæœUÞ¿Ö¬Šš-:ÝÚÝÜ×Z„�ÊÃÊ·!bEQ�2Ç“—9 ·§15r·OøE$•ºÛòG=3³>Þ®pÀ?Ƴ{µÛD>ƒì£Yîa‰ó±¹lO|d犨«¿ë°ÞÏÔÓÔ¥e�[.T!`rOQÓŒqÐWÓúó%wë¯ù”–‘Ǧ9íϽKßúè.ztg#üã¿¥K'ôc‰ÇùúRëóþ¿#Eý}ÂŽqì3úf“)êG¦GåNàmè�G#K;¨g„¯–* gæÇvã'ž*£ßúîL¿¯¸ço.¦º�ä™÷6HøUAáTs…�û“JM¶Ç²±[ÿ¯úcÎ�ëñ_Ñ’v ØœÃ�§ÿ_êhìý?4tñF–ðm‰@Æ $rň±ã'òüªöJßÖÆrÜÃÔaŽ)‡–6‡Mävžp;øõ©’Õy«•tü¿àçŽ=OãÓ?çüqKþäŠïå¨g§åýi_—ù€£“õþ¾ž˜íGõý}Áý}Ã{Ÿl~¹ÿ?äÐúK’§$}@ÿ>þô_—ù‡OëÈk±Ï_âÇုSíFÿpo÷6kØ¢¥¼“�™@`¹À Lž}:¥¢¿_ò!êÒ7|?oæ£"‰.b$F_”O”œªñ†à ç�ÀÆM\5NOu·ÝqMê’Ñ[¡ÓI+™$rÎÿ1'žNxèà€R»½ú•ek·cO·É‘åçúØÔÔ4éŸù÷„ã¿ýz©oýw°/ëï±H $O=zw Þÿç'1ÿšGUò¿ásFÞ$»†{9Æø|¶‘3÷ãqÐÆßÃ×Ðþ§6µM?/Ô‰{®ë{£ŠŠ5i¼³�¾aN:àcã¯á�n+>«Ïüʧõþ~¥½VW‰b¶Œìˆ©,«�[€Ç<Žäw<öMÚÉl ¯­¿þfvŸ \^[à >[8 ÆG\g°=ñƒŽ„T­_Ýø�½>GM«9ŒÇk@B(ÀëÀ> c�Ó¿Z¾¶éÿˆõc5Va< ApAÉä{ñþ=©¿ÓüÿÈkf¼Æê(—ZZ]Ê«ö„À( H$ƒ�zû˜‚¤—-ú¯ó°Ö’·KÛó9yýœ÷çëÏåÿë¨þ¿"ûú¿ÃR{X–{«x�“\AÆà²J¨ÅI ädž Ž)tþ½EÿüÏhý¡æ{?ŠÞ*ðe¨[|1Ôõ‡^Ób]°éþð¾¥wiqÒmGV¼7ºö¿|@“S×õ]OPu�í"æ;'Õêþvÿ1þš~(ñ ôàtÎÏý*ž‚ïë`'¯óŽ¿×õÐ-ÓÏüÅãØgôÍ& SÔ�L�Ê�ÀAÓ>ôyÿZêð?ç×ëëHBÿõÿLcùÕ_ˆûúþŒAÓüý?ϽŸ —çÿ =~¦�?Ð_ð£ºáý~ xãÔþ=3þÇÿàþH;ùjéùZ_×åþ`(äý¯§¦;Qý_p_pÞçÛ®Ïù4>�Ò㺕÷8ü(Ûúôÿ0éýyIêqø`Ó=èÿ+‡ù\?Ãúõé—èåú ïï�×Ò�ÿ¯�—éqÌq� ýýt\?àþ x$véüž@9yÎ{ñþ]¿.”¶?Õ«Ù¶çñ*óÿ99:_²¿õý~ƒ_§õùqþ}ü¿z?¯À]ý�ÇcÓ�CÏÓü3œQÛÑþÿð'‘ô–qþzb�øÈù~¿×ÍŠ?ƒÐç�ÌñE÷òåü­ÿ×ÌCÁǹõî~¿ÏühýÌ@ žáWõãú}y ñCüïù\oüÆç�Àç9ãéþ?äQú[õÿ!~Œpäãžž§¯läöíGù¯È}¼ÄÏÿ´=úý?¯\Ž(þ¿Q.¾ƒ›��N@ñ!Ó¿è)/×õ ê4žýi½ý~6$nïŒã?P?‘çÖ�ëðoôþ¿ÄçŽÁAþŸóì=ÎP’�‡Ž8ïõà‘ýâ1O¯õØ?È?‹>øïÎy¥¶¿Ö£¶þOôoôz`~¼ÏПñ£úü…Óúóÿ!Oúçô¯Ð^ÜqÛ�¦ïÐþ€wæ•ÿ¯ÃõÉúç§lœqéÇJ/ý~? ÿàþtù¦׿Åî~™üÀÿÿãKúû�Ö¿‡õø Ï'êF;qÇãÓ¿|úš:|¿4¼ì+±÷þçúõ¦…þ_¥ÇgÝ?R;Ròýç=‡øãòíùt§³ùþ¨HN¬f۟Ĩ?Ïüääé~Êÿ×õú¿Oëòãüú?—ãïGõø ¿§õù€ä1Àôô?§øg8£·£üþà NHúË?çÓÃþ@ûú~7¡Ï™â‹ïåËøÿZÿ¯˜‡ƒ�sëÜýŸøÑúÿ˜>€A=¯ëÇôúòAâ‡ùßò¸ßù�Ï�ÎIã¿âýT~–ýÈ_£98ç„'©ëÛ9=»úèÿ5ø¡öó<þÐ÷ëõüþ½r8£úýDºúnA9Ä„?Nÿ ¤¿_Ô/¨Ðxp{õ¦ôõøØ‘»¾3Œý@þGŸZ?¯Á¿ÐKúüGž;øϰ÷9AþIþB8ã¿×‚GôˆÅ>¿×`ÿ þ,Tûã¿9æ–ÚÿZŽÛù?ѿРè=�úðO?BÆ�ëòOëÏü…øÿ?ÏëÓ©£·Ëó°í¯õÜ`=x“Ó�óþ}èè< ‘þî_~ß_Ç4Ä'Œ`rOèÿ?ãÍXú¿A{qÇn>›¿CúßšWþ¿ÔH'ëž�²qǧ(¿õøþƒÿƒøx?Oê þ¿�úåßôë¸ãÛghÿ>üuëKþä¿Ì?Í�$�õ#ÓÐÇ8''ß4ÃúüؽÏÓ?˜ãßüi_r×ðþ¿¹äýHÇn8üzwïŸSGO—惷�…v#àÏüÿ^´Ð¿Ëô¸ì�@íÓõ#·Ò•ƒü¿Aœç°ÿåÛòéOgóýP!§¨˜ þ$gùÿœœ´×õ÷O8ÿôv~�þ_Ÿü8€õúš@ÿC­Ö4=?ÂþÖ¡’宼@šû^Ç+ÄÖñ+T[+³*Â’ xŽé¼ÙgÝ')å¯ÉZÊ B”®ï56û{²²¶ŸæaN¤¥V¼V¤éòÙ;¾x©>mlìö²^w93ǧñéŸóþ8¬ÿàþHß¿–¡žŸ—õ¥ý~_æŽO×úúzcµ×õ÷õ÷ î}±úçüÿ“Cè.;©_s�Â�¿¯OóŸ×�„�>§†ý3Þ�ò¸•Ãü?§ÿ^—ù~�þ_ žþøýqý)ßúùù~—Çú×ÿ×EÃþê‚GnŸÌQÛä :¿ë¨ƒ¸¸Ïâ@?çüNOør­ù\ ççŽßçŸzŸ‡ê.þ¿æ�{ué팞�=(ÿ!ùù\2}zãô¡èÉOËô4ÀüG¿õæüþŸj:ÿ]Á‰œþCüþŸ©Ïl6¿¯“úÛî°€ý=zAþ4¿¯ëîý~"ƒÈìç¿?^/ÿ]?ëòWøjjiñ¡)�XÏ!}Àõÿ>´âºÿ]E»_×R)äwv,ÄíÎ`88ñŒþ'¹©»{ÿÃl /ëå©zp:g?çŽþ”=¿­€œ~¿Ì :ÿ_×@·O?ó9ǰÏéŸÊšzؤzd~Uwå=ÏzOkü¾õrdºúÏõõ¨a¤± y#BHûN:ã*8$pO\ÓZÿ^e·kúÿ™©ªÊÖ–ÑÁ#I +máˆ2?½œ±êOp å¢�º�µzö¿ârÀõúšÌ·ú þo÷\?¯ÄzŸÇ¦ÏøâŸüÉ-C=?/ëKúü¿Ìú€ç8÷ÿÔ_p–¿{ü6:?ÛÄEÅÛ(i ÿU»•C´¶à?½Û9àtÁÉ:Gfú¥§Í1K¢ï¹ÒÉ<¥åbÌÍ‚}è ô¢ïúù˜ÒÓúòÿ2 Hüñú/ø÷Í'ú¿BÌ3K‹,NU×�~£�}T÷ùóI6�×oÐ�òý mbÐÛ\"„{”-*¯XmËì[?7$Œç:K£î¿@‹wk¢ý°ëž4í;Ÿùìyõ.¹¡è—Ìkâ~…ÅÿAÒdº€<ƒi‘†â£ÌØ6tÛ€r:‚À§kBë{/ÎĽeg²þ¿CϦ•å‘ÚF,K6I'$äò}O=O'½fh»KÐÀàø‘þ?ç'2ÿ!Ûò¸ÿÙPK!¦bê…)1)1Bfile-manager-advanced/application/class_fma_pure_php_validator.phpnu„[µü¤init_parser(); } /** * Initialize PHP Parser */ private function init_parser() { // Load Composer autoloader $autoload_path = dirname( __FILE__ ) . '/library/vendor/autoload.php'; if ( file_exists( $autoload_path ) ) { require_once $autoload_path; } // Try to use nikic/php-parser if available if ( class_exists( 'PhpParser\\ParserFactory' ) ) { try { $factory = new \PhpParser\ParserFactory(); $this->parser = $factory->createForHostVersion(); } catch ( Exception $e ) { $this->parser = null; } } } /** * Validate PHP syntax using pure PHP methods */ public function validate_syntax( $php_code ) { $result = array( 'valid' => false, 'errors' => array(), 'message' => '', 'php_version' => 'PHP ' . PHP_VERSION, 'execution_time' => 0 ); $start_time = microtime( true ); try { // Method 1: Try nikic/php-parser if available if ( $this->parser !== null ) { $parser_result = $this->validate_with_parser( $php_code ); if ( $parser_result['valid'] || ! empty( $parser_result['errors'] ) ) { $result = $parser_result; $result['execution_time'] = round( ( microtime( true ) - $start_time ) * 1000, 2 ); return $result; } } // Method 2: Enhanced basic syntax check $result = $this->validate_with_enhanced_check( $php_code ); } catch ( Exception $e ) { // If all methods fail, fall back to basic check $result = $this->validate_with_enhanced_check( $php_code ); } $result['execution_time'] = round( ( microtime( true ) - $start_time ) * 1000, 2 ); return $result; } /** * Validate using nikic/php-parser */ private function validate_with_parser( $php_code ) { $result = array( 'valid' => false, 'errors' => array(), 'message' => '', 'php_version' => 'PHP ' . PHP_VERSION, 'execution_time' => 0 ); try { // Ensure code has proper PHP tags if ( strpos( $php_code, 'parser->parse( $php_code ); if ( $stmts === null ) { $result['valid'] = false; $result['message'] = 'PHP syntax errors found'; $result['errors'][] = array( 'type' => 'parse_error', 'message' => 'Unable to parse PHP code', 'file' => 'unknown', 'line' => 0, 'severity' => 'error' ); } else { $result['valid'] = true; $result['message'] = 'PHP syntax is valid'; $result['errors'] = array(); } } catch ( \PhpParser\Error $e ) { $result['valid'] = false; $result['message'] = 'PHP syntax errors found'; $result['errors'][] = array( 'type' => 'parse_error', 'message' => $e->getMessage(), 'file' => 'unknown', 'line' => $e->getStartLine(), 'severity' => 'error' ); } return $result; } /** * Enhanced basic syntax check without exec functions */ private function validate_with_enhanced_check( $php_code ) { $result = array( 'valid' => false, 'errors' => array(), 'message' => '', 'php_version' => 'PHP ' . PHP_VERSION, 'execution_time' => 0 ); // Ensure code has proper PHP tags if ( strpos( $php_code, ' 'syntax_error', 'message' => 'Invalid PHP syntax detected', 'file' => 'unknown', 'line' => 0, 'severity' => 'error' ); } else { // Method 2: Enhanced syntax analysis $syntax_errors = $this->analyze_syntax( $php_code ); $errors = array_merge( $errors, $syntax_errors ); } // Method 3: Try eval in safe way (last resort) if ( empty( $errors ) ) { $eval_errors = $this->safe_eval_check( $php_code ); $errors = array_merge( $errors, $eval_errors ); } if ( empty( $errors ) ) { $result['valid'] = true; $result['message'] = 'PHP syntax is valid'; $result['errors'] = array(); } else { $result['valid'] = false; $result['message'] = 'PHP syntax errors found'; $result['errors'] = $errors; } return $result; } /** * Enhanced syntax analysis */ private function analyze_syntax( $php_code ) { $errors = array(); $lines = explode( "\n", $php_code ); $line_number = 0; foreach ( $lines as $line ) { $line_number++; $trimmed = trim( $line ); // Skip empty lines and comments if ( empty( $trimmed ) || strpos( $trimmed, '//' ) === 0 || strpos( $trimmed, '#' ) === 0 || strpos( $trimmed, '/*' ) === 0 ) { continue; } // Check for unclosed strings if ( $this->has_unclosed_string( $line ) ) { $errors[] = array( 'type' => 'syntax_error', 'message' => 'Unclosed string', 'file' => 'unknown', 'line' => $line_number, 'severity' => 'error' ); } // Check for unclosed brackets if ( $this->has_unclosed_brackets( $line ) ) { $errors[] = array( 'type' => 'syntax_error', 'message' => 'Unclosed brackets', 'file' => 'unknown', 'line' => $line_number, 'severity' => 'error' ); } // Check for common syntax errors $common_errors = $this->check_common_syntax_errors( $line, $line_number ); $errors = array_merge( $errors, $common_errors ); } // Check overall bracket balance $bracket_balance = $this->check_bracket_balance( $php_code ); if ( $bracket_balance !== 0 ) { $errors[] = array( 'type' => 'syntax_error', 'message' => 'Unbalanced brackets', 'file' => 'unknown', 'line' => count( $lines ), 'severity' => 'error' ); } return $errors; } /** * Check common syntax errors */ private function check_common_syntax_errors( $line, $line_number ) { $errors = array(); $trimmed = trim( $line ); // Skip empty lines, comments, and PHP tags if ( empty( $trimmed ) || strpos( $trimmed, '//' ) === 0 || strpos( $trimmed, '#' ) === 0 || strpos( $trimmed, '/*' ) === 0 || strpos( $trimmed, '*/' ) === 0 || strpos( $trimmed, '' ) === 0 ) { return $errors; } // Skip control structures that don't need semicolons if ( preg_match( '/^(if|else|for|while|foreach|function|class|interface|trait|switch|case|default|try|catch|finally)\s*[\(:]?/', $trimmed ) || preg_match( '/^[\s]*[{}][\s]*$/', $trimmed ) || preg_match( '/^[\s]*\/\//', $trimmed ) || preg_match( '/^[\s]*\/\*/', $trimmed ) || preg_match( '/^[\s]*\*/', $trimmed ) ) { return $errors; } // Check for missing semicolons only on statements that should have them if ( preg_match( '/^[^=]*[^;{}]\s*$/', $trimmed ) && ! preg_match( '/^[\s]*[{}][\s]*$/', $trimmed ) && ! preg_match( '/^[\s]*\/\//', $trimmed ) && ! preg_match( '/^[\s]*\/\*/', $trimmed ) && ! preg_match( '/^[\s]*\*/', $trimmed ) ) { // More sophisticated check - only flag if it looks like a statement if ( preg_match( '/^(echo|print|return|break|continue|throw|include|require|unset|isset|empty)\s+/', $trimmed ) || preg_match( '/\$[a-zA-Z_][a-zA-Z0-9_]*\s*[=]/', $trimmed ) || preg_match( '/[a-zA-Z_][a-zA-Z0-9_]*\s*\(/', $trimmed ) || preg_match( '/^\s*(private|public|protected|var|const)\s+/', $trimmed ) ) { $errors[] = array( 'type' => 'syntax_error', 'message' => 'Missing semicolon', 'file' => 'unknown', 'line' => $line_number, 'severity' => 'error' ); } } // Check for unclosed parentheses $open_parens = substr_count( $line, '(' ); $close_parens = substr_count( $line, ')' ); if ( $open_parens !== $close_parens ) { $errors[] = array( 'type' => 'syntax_error', 'message' => 'Unclosed parentheses', 'file' => 'unknown', 'line' => $line_number, 'severity' => 'error' ); } return $errors; } /** * Safe eval check (last resort) */ private function safe_eval_check( $php_code ) { $errors = array(); // Only try eval if it's safe and enabled if ( function_exists( 'eval' ) && ! in_array( 'eval', explode( ',', ini_get( 'disable_functions' ) ) ) ) { // Create a safe wrapper $safe_code = ' 'eval_error', 'message' => $message, 'file' => 'unknown', 'line' => $line, 'severity' => 'error' ); return true; // Don't execute PHP internal error handler }); try { @eval( $safe_code ); } catch ( ParseError $e ) { $errors[] = array( 'type' => 'parse_error', 'message' => $e->getMessage(), 'file' => 'unknown', 'line' => $e->getLine(), 'severity' => 'error' ); } catch ( Error $e ) { $errors[] = array( 'type' => 'fatal_error', 'message' => $e->getMessage(), 'file' => 'unknown', 'line' => $e->getLine(), 'severity' => 'error' ); } ob_end_clean(); restore_error_handler(); } return $errors; } /** * Check if line has unclosed string */ private function has_unclosed_string( $line ) { $in_string = false; $string_char = ''; $escaped = false; for ( $i = 0; $i < strlen( $line ); $i++ ) { $char = $line[$i]; if ( $escaped ) { $escaped = false; continue; } if ( $char === '\\' ) { $escaped = true; continue; } if ( ( $char === '"' || $char === "'" ) && ! $in_string ) { $in_string = true; $string_char = $char; } elseif ( $char === $string_char && $in_string ) { $in_string = false; $string_char = ''; } } return $in_string; } /** * Check if line has unclosed brackets */ private function has_unclosed_brackets( $line ) { // Don't check single lines for bracket balance - this is handled globally return false; } /** * Check overall bracket balance */ private function check_bracket_balance( $code ) { $balance = 0; $in_string = false; $string_char = ''; $escaped = false; for ( $i = 0; $i < strlen( $code ); $i++ ) { $char = $code[$i]; if ( $escaped ) { $escaped = false; continue; } if ( $char === '\\' ) { $escaped = true; continue; } if ( ( $char === '"' || $char === "'" ) && ! $in_string ) { $in_string = true; $string_char = $char; } elseif ( $char === $string_char && $in_string ) { $in_string = false; $string_char = ''; } elseif ( ! $in_string ) { switch ( $char ) { case '{': case '(': case '[': $balance++; break; case '}': case ')': case ']': $balance--; break; } } } return $balance; } /** * Test if validation is available */ public function is_available() { try { $test_code = 'validate_syntax( $test_code ); return $result['valid']; } catch ( Exception $e ) { return false; } } /** * Get validator info */ public function get_validator_info() { return array( 'type' => 'Pure PHP Validator', 'parser_available' => $this->parser !== null, 'php_version' => PHP_VERSION, 'exec_functions_required' => false, 'features' => array( 'Enhanced syntax checking', 'No exec functions required', 'Multiple validation methods', 'Detailed error reporting' ) ); } } endif; PK! =“Š÷÷Ffile-manager-advanced/application/logs/filelogs/class-filelogmodel.phpnu„[µü¤prefix . 'fm_filelogs'; $sql = 'SHOW TABLES LIKE %s'; $prepared_sql = $wpdb->prepare( $sql, $table_name ); $table_exists = $wpdb->get_var( $prepared_sql ); if ( $table_exists !== $table_name ) { $charset = $wpdb->get_charset_collate(); $sql = 'CREATE TABLE IF NOT EXISTS %i ( `id` INT ( 11 ) NOT NULL AUTO_INCREMENT, `user_id` INT ( 11 ) NOT NULL, `action` VARCHAR ( 255 ) NOT NULL, `path` VARCHAR ( 255 ) NOT NULL, `type` VARCHAR ( 255 ) NOT NULL, `ip` VARCHAR ( 255 ) NOT NULL, `time` VARCHAR ( 255 ) NOT NULL, PRIMARY KEY ( `id` ) )' . $charset . ';'; $prepared_sql = $wpdb->prepare( $sql, $table_name ); require_once( ABSPATH . 'wp-admin/includes/upgrade.php' ); dbDelta( $prepared_sql ); } } /** * Get the client IP address. * * @since 2.8 * @return string */ private static function get_client_ip() { $ip_attrs = array( 'HTTP_CLIENT_IP', 'HTTP_X_FORWARDED_FOR', 'HTTP_X_FORWARDED', 'HTTP_FORWARDED_FOR', 'HTTP_FORWARDED', 'REMOTE_ADDR', ); $ip = '127.0.0.1'; foreach ( $ip_attrs as $ip_attr ) { if ( ! isset( $_SERVER[ $ip_attr ] ) ) continue; if ( empty( $_SERVER[ $ip_attr ] ) ) continue; $ip = sanitize_text_field( wp_unslash( $_SERVER[ $ip_attr ] ) ); } return apply_filters( 'afmp__get_client_ip', $ip, '127.0.0.1' === $ip ? 'localhost' : '' ); } /** * Insert a new file log entry. * * @since 2.8 * @param string $action Action performed (added, removed, renamed, etc.). * @param string $path Path of the file. * @param array $args Additional arguments (e.g., mime type). * * @return int */ public static function insert_item( $action, $path, $args ) { if ( empty( $path ) || ! is_string( $path ) ) { return 0; } if ( ! is_array( $args ) ) { $args = array(); } $filelog = new self(); $filelog->user_id = get_current_user_id(); $filelog->action = sanitize_text_field( $action ); // Column is VARCHAR(255); truncate to avoid DB warnings on deep paths. $filelog->path = substr( $path, 0, 255 ); $filelog->type = isset( $args['mime'] ) ? sanitize_text_field( $args['mime'] ) : ''; $filelog->ip = self::get_client_ip(); $filelog->time = current_time( 'timestamp' ); return $filelog->save(); } /** * Save the file log entry to the database. * * @since 2.8 * @return int */ public function save() { global $wpdb; $table_name = $wpdb->prefix . 'fm_filelogs'; $data = array( 'user_id' => $this->user_id, 'action' => $this->action, 'path' => $this->path, 'type' => $this->type, 'time' => $this->time, 'ip' => $this->ip ); $wpdb->insert( $table_name, $data ); $this->id = $wpdb->insert_id; return $this->id; } } endif;PK!`û=”ßß9file-manager-advanced/application/logs/class-filelogs.phpnu„[µü¤include_files(); } /** * Override options. * * @param array $opts Options. * @since 2.8 * * @return array */ public function opts_override( $opts ) { $opts['bind']['mkdir mkfile rename duplicate upload rm paste put'] = array( $this, 'write_log' ); return $opts; } /** * Write log. * * @param string $cmd Command. * @param array $result Result. * @param array $args Arguments. * @param \elFinder $elfinder elFinder instance. * @param \elFinderVolumeLocalFileSystem $volume Volume instance. * * @since 2.8 */ public function write_log( $cmd, $result, $args, $elfinder, $volume ) { if ( ! empty( $result['removed'] ) ) { foreach ( $result['removed'] as $file ) { $this->check_performed_action( $cmd, $elfinder, $file, 'removed' ); } } elseif ( ! empty( $result['added'] ) ) { foreach ( $result['added'] as $file ) { $this->check_performed_action( $cmd, $elfinder, $file ); } } elseif ( ! empty( $result['changed'] ) ) { foreach ( $result['changed'] as $file ) { $this->check_performed_action( $cmd, $elfinder, $file ); } } } /** * Check performed action. * * @since 2.8 * @param string $cmd Command. * @param \elFinder $elfinder elFinder instance. * @param array $file File data. * @param string $action Action performed (added, removed, etc.). */ private function check_performed_action( $cmd, $elfinder, $file, $action = '' ) { if ( ! is_array( $file ) ) { return; } if ( 'removed' === $action ) { $file_path = isset( $file['realpath'] ) ? $file['realpath'] : ''; } else { $file_path = ( ! empty( $file['hash'] ) && is_object( $elfinder ) ) ? $elfinder->realpath( $file['hash'] ) : ''; } if ( empty( $file_path ) || ! is_string( $file_path ) ) { return; } switch ( $cmd ) { case 'rename': FileLogModel::insert_item( 'renamed', $file_path, $file ); break; case 'duplicate': FileLogModel::insert_item( 'duplicated', $file_path, $file ); break; case 'upload': FileLogModel::insert_item( 'uploaded', $file_path, $file ); break; case 'mkdir': case 'mkfile': FileLogModel::insert_item( 'created', $file_path, $file ); break; case 'rm': FileLogModel::insert_item( 'deleted', $file_path, $file ); break; case 'paste': FileLogModel::insert_item( 'pasted', $file_path, $file ); break; case 'put': FileLogModel::insert_item( 'updated', $file_path, $file ); break; default: FileLogModel::insert_item( sprintf( 'Unknown: %s', $cmd ), $file_path, $file ); break; } } /** * Admin init. * * @since 2.8 */ public function admin_init() { FileLogModel::create_table(); } /** * Include required files. * * @since 2.8 */ private function include_files() { require_once plugin_dir_path( __FILE__ ) . 'filelogs/class-filelogmodel.php'; } /** * FileLogs get instance. * * @since 2.8 * @return FileLogs */ public static function get_instance() { if ( null === self::$instance ) { self::$instance = new FileLogs(); } return self::$instance; } } FileLogs::get_instance(); endif;PK!d›?v v Gfile-manager-advanced/application/library/codemirror/lib/codemirror.cssnu„[µü¤/* BASICS */ .CodeMirror { /* Set height, width, borders, and global font properties here */ font-family: monospace; height: inherit; color: black; } /* PADDING */ .CodeMirror-lines { padding: 4px 0; /* Vertical padding around content */ } .CodeMirror pre { padding: 0 4px; /* Horizontal padding of content */ } .CodeMirror-scrollbar-filler, .CodeMirror-gutter-filler { background-color: white; /* The little square between H and V scrollbars */ } /* GUTTER */ .CodeMirror-gutters { border-right: 1px solid #ddd; background-color: #f7f7f7; white-space: nowrap; } .CodeMirror-linenumbers {} .CodeMirror-linenumber { padding: 0 3px 0 5px; min-width: 20px; text-align: right; color: #999; white-space: nowrap; } .CodeMirror-guttermarker { color: black; } .CodeMirror-guttermarker-subtle { color: #999; } /* CURSOR */ .CodeMirror-cursor { border-left: 1px solid black; border-right: none; width: 0; } /* Shown when moving in bi-directional text */ .CodeMirror div.CodeMirror-secondarycursor { border-left: 1px solid silver; } .cm-fat-cursor .CodeMirror-cursor { width: auto; border: 0 !important; background: #7e7; } .cm-fat-cursor div.CodeMirror-cursors { z-index: 1; } .cm-animate-fat-cursor { width: auto; border: 0; -webkit-animation: blink 1.06s steps(1) infinite; -moz-animation: blink 1.06s steps(1) infinite; animation: blink 1.06s steps(1) infinite; background-color: #7e7; } @-moz-keyframes blink { 0% {} 50% { background-color: transparent; } 100% {} } @-webkit-keyframes blink { 0% {} 50% { background-color: transparent; } 100% {} } @keyframes blink { 0% {} 50% { background-color: transparent; } 100% {} } /* Can style cursor different in overwrite (non-insert) mode */ .CodeMirror-overwrite .CodeMirror-cursor {} .cm-tab { display: inline-block; text-decoration: inherit; } .CodeMirror-rulers { position: absolute; left: 0; right: 0; top: -50px; bottom: -20px; overflow: hidden; } .CodeMirror-ruler { border-left: 1px solid #ccc; top: 0; bottom: 0; position: absolute; } /* DEFAULT THEME */ .cm-s-default .cm-header {color: blue;} .cm-s-default .cm-quote {color: #090;} .cm-negative {color: #d44;} .cm-positive {color: #292;} .cm-header, .cm-strong {font-weight: bold;} .cm-em {font-style: italic;} .cm-link {text-decoration: underline;} .cm-strikethrough {text-decoration: line-through;} .cm-s-default .cm-keyword {color: #708;} .cm-s-default .cm-atom {color: #219;} .cm-s-default .cm-number {color: #164;} .cm-s-default .cm-def {color: #00f;} .cm-s-default .cm-variable, .cm-s-default .cm-punctuation, .cm-s-default .cm-property, .cm-s-default .cm-operator {} .cm-s-default .cm-variable-2 {color: #05a;} .cm-s-default .cm-variable-3 {color: #085;} .cm-s-default .cm-comment {color: #a50;} .cm-s-default .cm-string {color: #a11;} .cm-s-default .cm-string-2 {color: #f50;} .cm-s-default .cm-meta {color: #555;} .cm-s-default .cm-qualifier {color: #555;} .cm-s-default .cm-builtin {color: #30a;} .cm-s-default .cm-bracket {color: #997;} .cm-s-default .cm-tag {color: #170;} .cm-s-default .cm-attribute {color: #00c;} .cm-s-default .cm-hr {color: #999;} .cm-s-default .cm-link {color: #00c;} .cm-s-default .cm-error {color: #f00;} .cm-invalidchar {color: #f00;} .CodeMirror-composing { border-bottom: 2px solid; } /* Default styles for common addons */ div.CodeMirror span.CodeMirror-matchingbracket {color: #0f0;} div.CodeMirror span.CodeMirror-nonmatchingbracket {color: #f22;} .CodeMirror-matchingtag { background: rgba(255, 150, 0, .3); } .CodeMirror-activeline-background {background: #e8f2ff;} /* STOP */ /* The rest of this file contains styles related to the mechanics of the editor. You probably shouldn't touch them. */ .CodeMirror { position: relative; overflow: hidden; background: white; } .CodeMirror-scroll { overflow: scroll !important; /* Things will break if this is overridden */ /* 30px is the magic margin used to hide the element's real scrollbars */ /* See overflow: hidden in .CodeMirror */ margin-bottom: -30px; margin-right: -30px; padding-bottom: 30px; height: 100%; outline: none; /* Prevent dragging from highlighting the element */ position: relative; } .CodeMirror-sizer { position: relative; border-right: 30px solid transparent; } /* The fake, visible scrollbars. Used to force redraw during scrolling before actual scrolling happens, thus preventing shaking and flickering artifacts. */ .CodeMirror-vscrollbar, .CodeMirror-hscrollbar, .CodeMirror-scrollbar-filler, .CodeMirror-gutter-filler { position: absolute; z-index: 6; display: none; } .CodeMirror-vscrollbar { right: 0; top: 0; overflow-x: hidden; overflow-y: scroll; } .CodeMirror-hscrollbar { bottom: 0; left: 0; overflow-y: hidden; overflow-x: scroll; } .CodeMirror-scrollbar-filler { right: 0; bottom: 0; } .CodeMirror-gutter-filler { left: 0; bottom: 0; } .CodeMirror-gutters { position: absolute; left: 0; top: 0; min-height: 100%; z-index: 3; } .CodeMirror-gutter { white-space: normal; height: 100%; display: inline-block; vertical-align: top; margin-bottom: -30px; /* Hack to make IE7 behave */ *zoom:1; *display:inline; } .CodeMirror-gutter-wrapper { position: absolute; z-index: 4; background: none !important; border: none !important; } .CodeMirror-gutter-background { position: absolute; top: 0; bottom: 0; z-index: 4; } .CodeMirror-gutter-elt { position: absolute; cursor: default; z-index: 4; } .CodeMirror-gutter-wrapper { -webkit-user-select: none; -moz-user-select: none; user-select: none; } .CodeMirror-lines { cursor: text; min-height: 1px; /* prevents collapsing before first draw */ } .CodeMirror pre { /* Reset some styles that the rest of the page might have set */ -moz-border-radius: 0; -webkit-border-radius: 0; border-radius: 0; border-width: 0; background: transparent; font-family: inherit; font-size: inherit; margin: 0; white-space: pre; word-wrap: normal; line-height: inherit; color: inherit; z-index: 2; position: relative; overflow: visible; -webkit-tap-highlight-color: transparent; -webkit-font-variant-ligatures: none; font-variant-ligatures: none; } .CodeMirror-wrap pre { word-wrap: break-word; white-space: pre-wrap; word-break: normal; } .CodeMirror-linebackground { position: absolute; left: 0; right: 0; top: 0; bottom: 0; z-index: 0; } .CodeMirror-linewidget { position: relative; z-index: 2; overflow: auto; } .CodeMirror-widget {} .CodeMirror-code { outline: none; } /* Force content-box sizing for the elements where we expect it */ .CodeMirror-scroll, .CodeMirror-sizer, .CodeMirror-gutter, .CodeMirror-gutters, .CodeMirror-linenumber { -moz-box-sizing: content-box; box-sizing: content-box; } .CodeMirror-measure { position: absolute; width: 100%; height: 0; overflow: hidden; visibility: hidden; } .CodeMirror-cursor { position: absolute; pointer-events: none; } .CodeMirror-measure pre { position: static; } div.CodeMirror-cursors { visibility: hidden; position: relative; z-index: 3; } div.CodeMirror-dragcursors { visibility: visible; } .CodeMirror-focused div.CodeMirror-cursors { visibility: visible; } .CodeMirror-selected { background: #d9d9d9; } .CodeMirror-focused .CodeMirror-selected { background: #d7d4f0; } .CodeMirror-crosshair { cursor: crosshair; } .CodeMirror-line::selection, .CodeMirror-line > span::selection, .CodeMirror-line > span > span::selection { background: #d7d4f0; } .CodeMirror-line::-moz-selection, .CodeMirror-line > span::-moz-selection, .CodeMirror-line > span > span::-moz-selection { background: #d7d4f0; } .cm-searching { background: #ffa; background: rgba(255, 255, 0, .4); } /* IE7 hack to prevent it from returning funny offsetTops on the spans */ .CodeMirror span { *vertical-align: text-bottom; } /* Used to force a border model for a node */ .cm-force-border { padding-right: .1px; } @media print { /* Hide the cursor when printing */ .CodeMirror div.CodeMirror-cursors { visibility: hidden; } } /* See issue #2901 */ .cm-tab-wrap-hack:after { content: ''; } /* Help users use markselection to safely style text background */ span.CodeMirror-selectedtext { background: none; } PK!±õh=ÉrÉrFfile-manager-advanced/application/library/codemirror/lib/codemirror.jsnu„[µü¤// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE // This is CodeMirror (http://codemirror.net), a code editor // implemented in JavaScript on top of the browser's DOM. // // You can find some technical background for some of the code below // at http://marijnhaverbeke.nl/blog/#cm-internals . (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS module.exports = mod(); else if (typeof define == "function" && define.amd) // AMD return define([], mod); else // Plain browser env (this || window).CodeMirror = mod(); })(function() { "use strict"; // BROWSER SNIFFING // Kludges for bugs and behavior differences that can't be feature // detected are enabled based on userAgent etc sniffing. var userAgent = navigator.userAgent; var platform = navigator.platform; var gecko = /gecko\/\d/i.test(userAgent); var ie_upto10 = /MSIE \d/.test(userAgent); var ie_11up = /Trident\/(?:[7-9]|\d{2,})\..*rv:(\d+)/.exec(userAgent); var ie = ie_upto10 || ie_11up; var ie_version = ie && (ie_upto10 ? document.documentMode || 6 : ie_11up[1]); var webkit = /WebKit\//.test(userAgent); var qtwebkit = webkit && /Qt\/\d+\.\d+/.test(userAgent); var chrome = /Chrome\//.test(userAgent); var presto = /Opera\//.test(userAgent); var safari = /Apple Computer/.test(navigator.vendor); var mac_geMountainLion = /Mac OS X 1\d\D([8-9]|\d\d)\D/.test(userAgent); var phantom = /PhantomJS/.test(userAgent); var ios = /AppleWebKit/.test(userAgent) && /Mobile\/\w+/.test(userAgent); // This is woefully incomplete. Suggestions for alternative methods welcome. var mobile = ios || /Android|webOS|BlackBerry|Opera Mini|Opera Mobi|IEMobile/i.test(userAgent); var mac = ios || /Mac/.test(platform); var chromeOS = /\bCrOS\b/.test(userAgent); var windows = /win/i.test(platform); var presto_version = presto && userAgent.match(/Version\/(\d*\.\d*)/); if (presto_version) presto_version = Number(presto_version[1]); if (presto_version && presto_version >= 15) { presto = false; webkit = true; } // Some browsers use the wrong event properties to signal cmd/ctrl on OS X var flipCtrlCmd = mac && (qtwebkit || presto && (presto_version == null || presto_version < 12.11)); var captureRightClick = gecko || (ie && ie_version >= 9); // Optimize some code when these features are not used. var sawReadOnlySpans = false, sawCollapsedSpans = false; // EDITOR CONSTRUCTOR // A CodeMirror instance represents an editor. This is the object // that user code is usually dealing with. function CodeMirror(place, options) { if (!(this instanceof CodeMirror)) return new CodeMirror(place, options); this.options = options = options ? copyObj(options) : {}; // Determine effective options based on given values and defaults. copyObj(defaults, options, false); setGuttersForLineNumbers(options); var doc = options.value; if (typeof doc == "string") doc = new Doc(doc, options.mode, null, options.lineSeparator); this.doc = doc; var input = new CodeMirror.inputStyles[options.inputStyle](this); var display = this.display = new Display(place, doc, input); display.wrapper.CodeMirror = this; updateGutters(this); themeChanged(this); if (options.lineWrapping) this.display.wrapper.className += " CodeMirror-wrap"; if (options.autofocus && !mobile) display.input.focus(); initScrollbars(this); this.state = { keyMaps: [], // stores maps added by addKeyMap overlays: [], // highlighting overlays, as added by addOverlay modeGen: 0, // bumped when mode/overlay changes, used to invalidate highlighting info overwrite: false, delayingBlurEvent: false, focused: false, suppressEdits: false, // used to disable editing during key handlers when in readOnly mode pasteIncoming: false, cutIncoming: false, // help recognize paste/cut edits in input.poll selectingText: false, draggingText: false, highlight: new Delayed(), // stores highlight worker timeout keySeq: null, // Unfinished key sequence specialChars: null }; var cm = this; // Override magic textarea content restore that IE sometimes does // on our hidden textarea on reload if (ie && ie_version < 11) setTimeout(function() { cm.display.input.reset(true); }, 20); registerEventHandlers(this); ensureGlobalHandlers(); startOperation(this); this.curOp.forceUpdate = true; attachDoc(this, doc); if ((options.autofocus && !mobile) || cm.hasFocus()) setTimeout(bind(onFocus, this), 20); else onBlur(this); for (var opt in optionHandlers) if (optionHandlers.hasOwnProperty(opt)) optionHandlers[opt](this, options[opt], Init); maybeUpdateLineNumberWidth(this); if (options.finishInit) options.finishInit(this); for (var i = 0; i < initHooks.length; ++i) initHooks[i](this); endOperation(this); // Suppress optimizelegibility in Webkit, since it breaks text // measuring on line wrapping boundaries. if (webkit && options.lineWrapping && getComputedStyle(display.lineDiv).textRendering == "optimizelegibility") display.lineDiv.style.textRendering = "auto"; } // DISPLAY CONSTRUCTOR // The display handles the DOM integration, both for input reading // and content drawing. It holds references to DOM nodes and // display-related state. function Display(place, doc, input) { var d = this; this.input = input; // Covers bottom-right square when both scrollbars are present. d.scrollbarFiller = elt("div", null, "CodeMirror-scrollbar-filler"); d.scrollbarFiller.setAttribute("cm-not-content", "true"); // Covers bottom of gutter when coverGutterNextToScrollbar is on // and h scrollbar is present. d.gutterFiller = elt("div", null, "CodeMirror-gutter-filler"); d.gutterFiller.setAttribute("cm-not-content", "true"); // Will contain the actual code, positioned to cover the viewport. d.lineDiv = elt("div", null, "CodeMirror-code"); // Elements are added to these to represent selection and cursors. d.selectionDiv = elt("div", null, null, "position: relative; z-index: 1"); d.cursorDiv = elt("div", null, "CodeMirror-cursors"); // A visibility: hidden element used to find the size of things. d.measure = elt("div", null, "CodeMirror-measure"); // When lines outside of the viewport are measured, they are drawn in this. d.lineMeasure = elt("div", null, "CodeMirror-measure"); // Wraps everything that needs to exist inside the vertically-padded coordinate system d.lineSpace = elt("div", [d.measure, d.lineMeasure, d.selectionDiv, d.cursorDiv, d.lineDiv], null, "position: relative; outline: none"); // Moved around its parent to cover visible view. d.mover = elt("div", [elt("div", [d.lineSpace], "CodeMirror-lines")], null, "position: relative"); // Set to the height of the document, allowing scrolling. d.sizer = elt("div", [d.mover], "CodeMirror-sizer"); d.sizerWidth = null; // Behavior of elts with overflow: auto and padding is // inconsistent across browsers. This is used to ensure the // scrollable area is big enough. d.heightForcer = elt("div", null, null, "position: absolute; height: " + scrollerGap + "px; width: 1px;"); // Will contain the gutters, if any. d.gutters = elt("div", null, "CodeMirror-gutters"); d.lineGutter = null; // Actual scrollable element. d.scroller = elt("div", [d.sizer, d.heightForcer, d.gutters], "CodeMirror-scroll"); d.scroller.setAttribute("tabIndex", "-1"); // The element in which the editor lives. d.wrapper = elt("div", [d.scrollbarFiller, d.gutterFiller, d.scroller], "CodeMirror"); // Work around IE7 z-index bug (not perfect, hence IE7 not really being supported) if (ie && ie_version < 8) { d.gutters.style.zIndex = -1; d.scroller.style.paddingRight = 0; } if (!webkit && !(gecko && mobile)) d.scroller.draggable = true; if (place) { if (place.appendChild) place.appendChild(d.wrapper); else place(d.wrapper); } // Current rendered range (may be bigger than the view window). d.viewFrom = d.viewTo = doc.first; d.reportedViewFrom = d.reportedViewTo = doc.first; // Information about the rendered lines. d.view = []; d.renderedView = null; // Holds info about a single rendered line when it was rendered // for measurement, while not in view. d.externalMeasured = null; // Empty space (in pixels) above the view d.viewOffset = 0; d.lastWrapHeight = d.lastWrapWidth = 0; d.updateLineNumbers = null; d.nativeBarWidth = d.barHeight = d.barWidth = 0; d.scrollbarsClipped = false; // Used to only resize the line number gutter when necessary (when // the amount of lines crosses a boundary that makes its width change) d.lineNumWidth = d.lineNumInnerWidth = d.lineNumChars = null; // Set to true when a non-horizontal-scrolling line widget is // added. As an optimization, line widget aligning is skipped when // this is false. d.alignWidgets = false; d.cachedCharWidth = d.cachedTextHeight = d.cachedPaddingH = null; // Tracks the maximum line length so that the horizontal scrollbar // can be kept static when scrolling. d.maxLine = null; d.maxLineLength = 0; d.maxLineChanged = false; // Used for measuring wheel scrolling granularity d.wheelDX = d.wheelDY = d.wheelStartX = d.wheelStartY = null; // True when shift is held down. d.shift = false; // Used to track whether anything happened since the context menu // was opened. d.selForContextMenu = null; d.activeTouch = null; input.init(d); } // STATE UPDATES // Used to get the editor into a consistent state again when options change. function loadMode(cm) { cm.doc.mode = CodeMirror.getMode(cm.options, cm.doc.modeOption); resetModeState(cm); } function resetModeState(cm) { cm.doc.iter(function(line) { if (line.stateAfter) line.stateAfter = null; if (line.styles) line.styles = null; }); cm.doc.frontier = cm.doc.first; startWorker(cm, 100); cm.state.modeGen++; if (cm.curOp) regChange(cm); } function wrappingChanged(cm) { if (cm.options.lineWrapping) { addClass(cm.display.wrapper, "CodeMirror-wrap"); cm.display.sizer.style.minWidth = ""; cm.display.sizerWidth = null; } else { rmClass(cm.display.wrapper, "CodeMirror-wrap"); findMaxLine(cm); } estimateLineHeights(cm); regChange(cm); clearCaches(cm); setTimeout(function(){updateScrollbars(cm);}, 100); } // Returns a function that estimates the height of a line, to use as // first approximation until the line becomes visible (and is thus // properly measurable). function estimateHeight(cm) { var th = textHeight(cm.display), wrapping = cm.options.lineWrapping; var perLine = wrapping && Math.max(5, cm.display.scroller.clientWidth / charWidth(cm.display) - 3); return function(line) { if (lineIsHidden(cm.doc, line)) return 0; var widgetsHeight = 0; if (line.widgets) for (var i = 0; i < line.widgets.length; i++) { if (line.widgets[i].height) widgetsHeight += line.widgets[i].height; } if (wrapping) return widgetsHeight + (Math.ceil(line.text.length / perLine) || 1) * th; else return widgetsHeight + th; }; } function estimateLineHeights(cm) { var doc = cm.doc, est = estimateHeight(cm); doc.iter(function(line) { var estHeight = est(line); if (estHeight != line.height) updateLineHeight(line, estHeight); }); } function themeChanged(cm) { cm.display.wrapper.className = cm.display.wrapper.className.replace(/\s*cm-s-\S+/g, "") + cm.options.theme.replace(/(^|\s)\s*/g, " cm-s-"); clearCaches(cm); } function guttersChanged(cm) { updateGutters(cm); regChange(cm); setTimeout(function(){alignHorizontally(cm);}, 20); } // Rebuild the gutter elements, ensure the margin to the left of the // code matches their width. function updateGutters(cm) { var gutters = cm.display.gutters, specs = cm.options.gutters; removeChildren(gutters); for (var i = 0; i < specs.length; ++i) { var gutterClass = specs[i]; var gElt = gutters.appendChild(elt("div", null, "CodeMirror-gutter " + gutterClass)); if (gutterClass == "CodeMirror-linenumbers") { cm.display.lineGutter = gElt; gElt.style.width = (cm.display.lineNumWidth || 1) + "px"; } } gutters.style.display = i ? "" : "none"; updateGutterSpace(cm); } function updateGutterSpace(cm) { var width = cm.display.gutters.offsetWidth; cm.display.sizer.style.marginLeft = width + "px"; } // Compute the character length of a line, taking into account // collapsed ranges (see markText) that might hide parts, and join // other lines onto it. function lineLength(line) { if (line.height == 0) return 0; var len = line.text.length, merged, cur = line; while (merged = collapsedSpanAtStart(cur)) { var found = merged.find(0, true); cur = found.from.line; len += found.from.ch - found.to.ch; } cur = line; while (merged = collapsedSpanAtEnd(cur)) { var found = merged.find(0, true); len -= cur.text.length - found.from.ch; cur = found.to.line; len += cur.text.length - found.to.ch; } return len; } // Find the longest line in the document. function findMaxLine(cm) { var d = cm.display, doc = cm.doc; d.maxLine = getLine(doc, doc.first); d.maxLineLength = lineLength(d.maxLine); d.maxLineChanged = true; doc.iter(function(line) { var len = lineLength(line); if (len > d.maxLineLength) { d.maxLineLength = len; d.maxLine = line; } }); } // Make sure the gutters options contains the element // "CodeMirror-linenumbers" when the lineNumbers option is true. function setGuttersForLineNumbers(options) { var found = indexOf(options.gutters, "CodeMirror-linenumbers"); if (found == -1 && options.lineNumbers) { options.gutters = options.gutters.concat(["CodeMirror-linenumbers"]); } else if (found > -1 && !options.lineNumbers) { options.gutters = options.gutters.slice(0); options.gutters.splice(found, 1); } } // SCROLLBARS // Prepare DOM reads needed to update the scrollbars. Done in one // shot to minimize update/measure roundtrips. function measureForScrollbars(cm) { var d = cm.display, gutterW = d.gutters.offsetWidth; var docH = Math.round(cm.doc.height + paddingVert(cm.display)); return { clientHeight: d.scroller.clientHeight, viewHeight: d.wrapper.clientHeight, scrollWidth: d.scroller.scrollWidth, clientWidth: d.scroller.clientWidth, viewWidth: d.wrapper.clientWidth, barLeft: cm.options.fixedGutter ? gutterW : 0, docHeight: docH, scrollHeight: docH + scrollGap(cm) + d.barHeight, nativeBarWidth: d.nativeBarWidth, gutterWidth: gutterW }; } function NativeScrollbars(place, scroll, cm) { this.cm = cm; var vert = this.vert = elt("div", [elt("div", null, null, "min-width: 1px")], "CodeMirror-vscrollbar"); var horiz = this.horiz = elt("div", [elt("div", null, null, "height: 100%; min-height: 1px")], "CodeMirror-hscrollbar"); place(vert); place(horiz); on(vert, "scroll", function() { if (vert.clientHeight) scroll(vert.scrollTop, "vertical"); }); on(horiz, "scroll", function() { if (horiz.clientWidth) scroll(horiz.scrollLeft, "horizontal"); }); this.checkedZeroWidth = false; // Need to set a minimum width to see the scrollbar on IE7 (but must not set it on IE8). if (ie && ie_version < 8) this.horiz.style.minHeight = this.vert.style.minWidth = "18px"; } NativeScrollbars.prototype = copyObj({ update: function(measure) { var needsH = measure.scrollWidth > measure.clientWidth + 1; var needsV = measure.scrollHeight > measure.clientHeight + 1; var sWidth = measure.nativeBarWidth; if (needsV) { this.vert.style.display = "block"; this.vert.style.bottom = needsH ? sWidth + "px" : "0"; var totalHeight = measure.viewHeight - (needsH ? sWidth : 0); // A bug in IE8 can cause this value to be negative, so guard it. this.vert.firstChild.style.height = Math.max(0, measure.scrollHeight - measure.clientHeight + totalHeight) + "px"; } else { this.vert.style.display = ""; this.vert.firstChild.style.height = "0"; } if (needsH) { this.horiz.style.display = "block"; this.horiz.style.right = needsV ? sWidth + "px" : "0"; this.horiz.style.left = measure.barLeft + "px"; var totalWidth = measure.viewWidth - measure.barLeft - (needsV ? sWidth : 0); this.horiz.firstChild.style.width = (measure.scrollWidth - measure.clientWidth + totalWidth) + "px"; } else { this.horiz.style.display = ""; this.horiz.firstChild.style.width = "0"; } if (!this.checkedZeroWidth && measure.clientHeight > 0) { if (sWidth == 0) this.zeroWidthHack(); this.checkedZeroWidth = true; } return {right: needsV ? sWidth : 0, bottom: needsH ? sWidth : 0}; }, setScrollLeft: function(pos) { if (this.horiz.scrollLeft != pos) this.horiz.scrollLeft = pos; if (this.disableHoriz) this.enableZeroWidthBar(this.horiz, this.disableHoriz); }, setScrollTop: function(pos) { if (this.vert.scrollTop != pos) this.vert.scrollTop = pos; if (this.disableVert) this.enableZeroWidthBar(this.vert, this.disableVert); }, zeroWidthHack: function() { var w = mac && !mac_geMountainLion ? "12px" : "18px"; this.horiz.style.height = this.vert.style.width = w; this.horiz.style.pointerEvents = this.vert.style.pointerEvents = "none"; this.disableHoriz = new Delayed; this.disableVert = new Delayed; }, enableZeroWidthBar: function(bar, delay) { bar.style.pointerEvents = "auto"; function maybeDisable() { // To find out whether the scrollbar is still visible, we // check whether the element under the pixel in the bottom // left corner of the scrollbar box is the scrollbar box // itself (when the bar is still visible) or its filler child // (when the bar is hidden). If it is still visible, we keep // it enabled, if it's hidden, we disable pointer events. var box = bar.getBoundingClientRect(); var elt = document.elementFromPoint(box.left + 1, box.bottom - 1); if (elt != bar) bar.style.pointerEvents = "none"; else delay.set(1000, maybeDisable); } delay.set(1000, maybeDisable); }, clear: function() { var parent = this.horiz.parentNode; parent.removeChild(this.horiz); parent.removeChild(this.vert); } }, NativeScrollbars.prototype); function NullScrollbars() {} NullScrollbars.prototype = copyObj({ update: function() { return {bottom: 0, right: 0}; }, setScrollLeft: function() {}, setScrollTop: function() {}, clear: function() {} }, NullScrollbars.prototype); CodeMirror.scrollbarModel = {"native": NativeScrollbars, "null": NullScrollbars}; function initScrollbars(cm) { if (cm.display.scrollbars) { cm.display.scrollbars.clear(); if (cm.display.scrollbars.addClass) rmClass(cm.display.wrapper, cm.display.scrollbars.addClass); } cm.display.scrollbars = new CodeMirror.scrollbarModel[cm.options.scrollbarStyle](function(node) { cm.display.wrapper.insertBefore(node, cm.display.scrollbarFiller); // Prevent clicks in the scrollbars from killing focus on(node, "mousedown", function() { if (cm.state.focused) setTimeout(function() { cm.display.input.focus(); }, 0); }); node.setAttribute("cm-not-content", "true"); }, function(pos, axis) { if (axis == "horizontal") setScrollLeft(cm, pos); else setScrollTop(cm, pos); }, cm); if (cm.display.scrollbars.addClass) addClass(cm.display.wrapper, cm.display.scrollbars.addClass); } function updateScrollbars(cm, measure) { if (!measure) measure = measureForScrollbars(cm); var startWidth = cm.display.barWidth, startHeight = cm.display.barHeight; updateScrollbarsInner(cm, measure); for (var i = 0; i < 4 && startWidth != cm.display.barWidth || startHeight != cm.display.barHeight; i++) { if (startWidth != cm.display.barWidth && cm.options.lineWrapping) updateHeightsInViewport(cm); updateScrollbarsInner(cm, measureForScrollbars(cm)); startWidth = cm.display.barWidth; startHeight = cm.display.barHeight; } } // Re-synchronize the fake scrollbars with the actual size of the // content. function updateScrollbarsInner(cm, measure) { var d = cm.display; var sizes = d.scrollbars.update(measure); d.sizer.style.paddingRight = (d.barWidth = sizes.right) + "px"; d.sizer.style.paddingBottom = (d.barHeight = sizes.bottom) + "px"; d.heightForcer.style.borderBottom = sizes.bottom + "px solid transparent" if (sizes.right && sizes.bottom) { d.scrollbarFiller.style.display = "block"; d.scrollbarFiller.style.height = sizes.bottom + "px"; d.scrollbarFiller.style.width = sizes.right + "px"; } else d.scrollbarFiller.style.display = ""; if (sizes.bottom && cm.options.coverGutterNextToScrollbar && cm.options.fixedGutter) { d.gutterFiller.style.display = "block"; d.gutterFiller.style.height = sizes.bottom + "px"; d.gutterFiller.style.width = measure.gutterWidth + "px"; } else d.gutterFiller.style.display = ""; } // Compute the lines that are visible in a given viewport (defaults // the the current scroll position). viewport may contain top, // height, and ensure (see op.scrollToPos) properties. function visibleLines(display, doc, viewport) { var top = viewport && viewport.top != null ? Math.max(0, viewport.top) : display.scroller.scrollTop; top = Math.floor(top - paddingTop(display)); var bottom = viewport && viewport.bottom != null ? viewport.bottom : top + display.wrapper.clientHeight; var from = lineAtHeight(doc, top), to = lineAtHeight(doc, bottom); // Ensure is a {from: {line, ch}, to: {line, ch}} object, and // forces those lines into the viewport (if possible). if (viewport && viewport.ensure) { var ensureFrom = viewport.ensure.from.line, ensureTo = viewport.ensure.to.line; if (ensureFrom < from) { from = ensureFrom; to = lineAtHeight(doc, heightAtLine(getLine(doc, ensureFrom)) + display.wrapper.clientHeight); } else if (Math.min(ensureTo, doc.lastLine()) >= to) { from = lineAtHeight(doc, heightAtLine(getLine(doc, ensureTo)) - display.wrapper.clientHeight); to = ensureTo; } } return {from: from, to: Math.max(to, from + 1)}; } // LINE NUMBERS // Re-align line numbers and gutter marks to compensate for // horizontal scrolling. function alignHorizontally(cm) { var display = cm.display, view = display.view; if (!display.alignWidgets && (!display.gutters.firstChild || !cm.options.fixedGutter)) return; var comp = compensateForHScroll(display) - display.scroller.scrollLeft + cm.doc.scrollLeft; var gutterW = display.gutters.offsetWidth, left = comp + "px"; for (var i = 0; i < view.length; i++) if (!view[i].hidden) { if (cm.options.fixedGutter) { if (view[i].gutter) view[i].gutter.style.left = left; if (view[i].gutterBackground) view[i].gutterBackground.style.left = left; } var align = view[i].alignable; if (align) for (var j = 0; j < align.length; j++) align[j].style.left = left; } if (cm.options.fixedGutter) display.gutters.style.left = (comp + gutterW) + "px"; } // Used to ensure that the line number gutter is still the right // size for the current document size. Returns true when an update // is needed. function maybeUpdateLineNumberWidth(cm) { if (!cm.options.lineNumbers) return false; var doc = cm.doc, last = lineNumberFor(cm.options, doc.first + doc.size - 1), display = cm.display; if (last.length != display.lineNumChars) { var test = display.measure.appendChild(elt("div", [elt("div", last)], "CodeMirror-linenumber CodeMirror-gutter-elt")); var innerW = test.firstChild.offsetWidth, padding = test.offsetWidth - innerW; display.lineGutter.style.width = ""; display.lineNumInnerWidth = Math.max(innerW, display.lineGutter.offsetWidth - padding) + 1; display.lineNumWidth = display.lineNumInnerWidth + padding; display.lineNumChars = display.lineNumInnerWidth ? last.length : -1; display.lineGutter.style.width = display.lineNumWidth + "px"; updateGutterSpace(cm); return true; } return false; } function lineNumberFor(options, i) { return String(options.lineNumberFormatter(i + options.firstLineNumber)); } // Computes display.scroller.scrollLeft + display.gutters.offsetWidth, // but using getBoundingClientRect to get a sub-pixel-accurate // result. function compensateForHScroll(display) { return display.scroller.getBoundingClientRect().left - display.sizer.getBoundingClientRect().left; } // DISPLAY DRAWING function DisplayUpdate(cm, viewport, force) { var display = cm.display; this.viewport = viewport; // Store some values that we'll need later (but don't want to force a relayout for) this.visible = visibleLines(display, cm.doc, viewport); this.editorIsHidden = !display.wrapper.offsetWidth; this.wrapperHeight = display.wrapper.clientHeight; this.wrapperWidth = display.wrapper.clientWidth; this.oldDisplayWidth = displayWidth(cm); this.force = force; this.dims = getDimensions(cm); this.events = []; } DisplayUpdate.prototype.signal = function(emitter, type) { if (hasHandler(emitter, type)) this.events.push(arguments); }; DisplayUpdate.prototype.finish = function() { for (var i = 0; i < this.events.length; i++) signal.apply(null, this.events[i]); }; function maybeClipScrollbars(cm) { var display = cm.display; if (!display.scrollbarsClipped && display.scroller.offsetWidth) { display.nativeBarWidth = display.scroller.offsetWidth - display.scroller.clientWidth; display.heightForcer.style.height = scrollGap(cm) + "px"; display.sizer.style.marginBottom = -display.nativeBarWidth + "px"; display.sizer.style.borderRightWidth = scrollGap(cm) + "px"; display.scrollbarsClipped = true; } } // Does the actual updating of the line display. Bails out // (returning false) when there is nothing to be done and forced is // false. function updateDisplayIfNeeded(cm, update) { var display = cm.display, doc = cm.doc; if (update.editorIsHidden) { resetView(cm); return false; } // Bail out if the visible area is already rendered and nothing changed. if (!update.force && update.visible.from >= display.viewFrom && update.visible.to <= display.viewTo && (display.updateLineNumbers == null || display.updateLineNumbers >= display.viewTo) && display.renderedView == display.view && countDirtyView(cm) == 0) return false; if (maybeUpdateLineNumberWidth(cm)) { resetView(cm); update.dims = getDimensions(cm); } // Compute a suitable new viewport (from & to) var end = doc.first + doc.size; var from = Math.max(update.visible.from - cm.options.viewportMargin, doc.first); var to = Math.min(end, update.visible.to + cm.options.viewportMargin); if (display.viewFrom < from && from - display.viewFrom < 20) from = Math.max(doc.first, display.viewFrom); if (display.viewTo > to && display.viewTo - to < 20) to = Math.min(end, display.viewTo); if (sawCollapsedSpans) { from = visualLineNo(cm.doc, from); to = visualLineEndNo(cm.doc, to); } var different = from != display.viewFrom || to != display.viewTo || display.lastWrapHeight != update.wrapperHeight || display.lastWrapWidth != update.wrapperWidth; adjustView(cm, from, to); display.viewOffset = heightAtLine(getLine(cm.doc, display.viewFrom)); // Position the mover div to align with the current scroll position cm.display.mover.style.top = display.viewOffset + "px"; var toUpdate = countDirtyView(cm); if (!different && toUpdate == 0 && !update.force && display.renderedView == display.view && (display.updateLineNumbers == null || display.updateLineNumbers >= display.viewTo)) return false; // For big changes, we hide the enclosing element during the // update, since that speeds up the operations on most browsers. var focused = activeElt(); if (toUpdate > 4) display.lineDiv.style.display = "none"; patchDisplay(cm, display.updateLineNumbers, update.dims); if (toUpdate > 4) display.lineDiv.style.display = ""; display.renderedView = display.view; // There might have been a widget with a focused element that got // hidden or updated, if so re-focus it. if (focused && activeElt() != focused && focused.offsetHeight) focused.focus(); // Prevent selection and cursors from interfering with the scroll // width and height. removeChildren(display.cursorDiv); removeChildren(display.selectionDiv); display.gutters.style.height = display.sizer.style.minHeight = 0; if (different) { display.lastWrapHeight = update.wrapperHeight; display.lastWrapWidth = update.wrapperWidth; startWorker(cm, 400); } display.updateLineNumbers = null; return true; } function postUpdateDisplay(cm, update) { var viewport = update.viewport; for (var first = true;; first = false) { if (!first || !cm.options.lineWrapping || update.oldDisplayWidth == displayWidth(cm)) { // Clip forced viewport to actual scrollable area. if (viewport && viewport.top != null) viewport = {top: Math.min(cm.doc.height + paddingVert(cm.display) - displayHeight(cm), viewport.top)}; // Updated line heights might result in the drawn area not // actually covering the viewport. Keep looping until it does. update.visible = visibleLines(cm.display, cm.doc, viewport); if (update.visible.from >= cm.display.viewFrom && update.visible.to <= cm.display.viewTo) break; } if (!updateDisplayIfNeeded(cm, update)) break; updateHeightsInViewport(cm); var barMeasure = measureForScrollbars(cm); updateSelection(cm); updateScrollbars(cm, barMeasure); setDocumentHeight(cm, barMeasure); } update.signal(cm, "update", cm); if (cm.display.viewFrom != cm.display.reportedViewFrom || cm.display.viewTo != cm.display.reportedViewTo) { update.signal(cm, "viewportChange", cm, cm.display.viewFrom, cm.display.viewTo); cm.display.reportedViewFrom = cm.display.viewFrom; cm.display.reportedViewTo = cm.display.viewTo; } } function updateDisplaySimple(cm, viewport) { var update = new DisplayUpdate(cm, viewport); if (updateDisplayIfNeeded(cm, update)) { updateHeightsInViewport(cm); postUpdateDisplay(cm, update); var barMeasure = measureForScrollbars(cm); updateSelection(cm); updateScrollbars(cm, barMeasure); setDocumentHeight(cm, barMeasure); update.finish(); } } function setDocumentHeight(cm, measure) { cm.display.sizer.style.minHeight = measure.docHeight + "px"; cm.display.heightForcer.style.top = measure.docHeight + "px"; cm.display.gutters.style.height = (measure.docHeight + cm.display.barHeight + scrollGap(cm)) + "px"; } // Read the actual heights of the rendered lines, and update their // stored heights to match. function updateHeightsInViewport(cm) { var display = cm.display; var prevBottom = display.lineDiv.offsetTop; for (var i = 0; i < display.view.length; i++) { var cur = display.view[i], height; if (cur.hidden) continue; if (ie && ie_version < 8) { var bot = cur.node.offsetTop + cur.node.offsetHeight; height = bot - prevBottom; prevBottom = bot; } else { var box = cur.node.getBoundingClientRect(); height = box.bottom - box.top; } var diff = cur.line.height - height; if (height < 2) height = textHeight(display); if (diff > .001 || diff < -.001) { updateLineHeight(cur.line, height); updateWidgetHeight(cur.line); if (cur.rest) for (var j = 0; j < cur.rest.length; j++) updateWidgetHeight(cur.rest[j]); } } } // Read and store the height of line widgets associated with the // given line. function updateWidgetHeight(line) { if (line.widgets) for (var i = 0; i < line.widgets.length; ++i) line.widgets[i].height = line.widgets[i].node.parentNode.offsetHeight; } // Do a bulk-read of the DOM positions and sizes needed to draw the // view, so that we don't interleave reading and writing to the DOM. function getDimensions(cm) { var d = cm.display, left = {}, width = {}; var gutterLeft = d.gutters.clientLeft; for (var n = d.gutters.firstChild, i = 0; n; n = n.nextSibling, ++i) { left[cm.options.gutters[i]] = n.offsetLeft + n.clientLeft + gutterLeft; width[cm.options.gutters[i]] = n.clientWidth; } return {fixedPos: compensateForHScroll(d), gutterTotalWidth: d.gutters.offsetWidth, gutterLeft: left, gutterWidth: width, wrapperWidth: d.wrapper.clientWidth}; } // Sync the actual display DOM structure with display.view, removing // nodes for lines that are no longer in view, and creating the ones // that are not there yet, and updating the ones that are out of // date. function patchDisplay(cm, updateNumbersFrom, dims) { var display = cm.display, lineNumbers = cm.options.lineNumbers; var container = display.lineDiv, cur = container.firstChild; function rm(node) { var next = node.nextSibling; // Works around a throw-scroll bug in OS X Webkit if (webkit && mac && cm.display.currentWheelTarget == node) node.style.display = "none"; else node.parentNode.removeChild(node); return next; } var view = display.view, lineN = display.viewFrom; // Loop over the elements in the view, syncing cur (the DOM nodes // in display.lineDiv) with the view as we go. for (var i = 0; i < view.length; i++) { var lineView = view[i]; if (lineView.hidden) { } else if (!lineView.node || lineView.node.parentNode != container) { // Not drawn yet var node = buildLineElement(cm, lineView, lineN, dims); container.insertBefore(node, cur); } else { // Already drawn while (cur != lineView.node) cur = rm(cur); var updateNumber = lineNumbers && updateNumbersFrom != null && updateNumbersFrom <= lineN && lineView.lineNumber; if (lineView.changes) { if (indexOf(lineView.changes, "gutter") > -1) updateNumber = false; updateLineForChanges(cm, lineView, lineN, dims); } if (updateNumber) { removeChildren(lineView.lineNumber); lineView.lineNumber.appendChild(document.createTextNode(lineNumberFor(cm.options, lineN))); } cur = lineView.node.nextSibling; } lineN += lineView.size; } while (cur) cur = rm(cur); } // When an aspect of a line changes, a string is added to // lineView.changes. This updates the relevant part of the line's // DOM structure. function updateLineForChanges(cm, lineView, lineN, dims) { for (var j = 0; j < lineView.changes.length; j++) { var type = lineView.changes[j]; if (type == "text") updateLineText(cm, lineView); else if (type == "gutter") updateLineGutter(cm, lineView, lineN, dims); else if (type == "class") updateLineClasses(lineView); else if (type == "widget") updateLineWidgets(cm, lineView, dims); } lineView.changes = null; } // Lines with gutter elements, widgets or a background class need to // be wrapped, and have the extra elements added to the wrapper div function ensureLineWrapped(lineView) { if (lineView.node == lineView.text) { lineView.node = elt("div", null, null, "position: relative"); if (lineView.text.parentNode) lineView.text.parentNode.replaceChild(lineView.node, lineView.text); lineView.node.appendChild(lineView.text); if (ie && ie_version < 8) lineView.node.style.zIndex = 2; } return lineView.node; } function updateLineBackground(lineView) { var cls = lineView.bgClass ? lineView.bgClass + " " + (lineView.line.bgClass || "") : lineView.line.bgClass; if (cls) cls += " CodeMirror-linebackground"; if (lineView.background) { if (cls) lineView.background.className = cls; else { lineView.background.parentNode.removeChild(lineView.background); lineView.background = null; } } else if (cls) { var wrap = ensureLineWrapped(lineView); lineView.background = wrap.insertBefore(elt("div", null, cls), wrap.firstChild); } } // Wrapper around buildLineContent which will reuse the structure // in display.externalMeasured when possible. function getLineContent(cm, lineView) { var ext = cm.display.externalMeasured; if (ext && ext.line == lineView.line) { cm.display.externalMeasured = null; lineView.measure = ext.measure; return ext.built; } return buildLineContent(cm, lineView); } // Redraw the line's text. Interacts with the background and text // classes because the mode may output tokens that influence these // classes. function updateLineText(cm, lineView) { var cls = lineView.text.className; var built = getLineContent(cm, lineView); if (lineView.text == lineView.node) lineView.node = built.pre; lineView.text.parentNode.replaceChild(built.pre, lineView.text); lineView.text = built.pre; if (built.bgClass != lineView.bgClass || built.textClass != lineView.textClass) { lineView.bgClass = built.bgClass; lineView.textClass = built.textClass; updateLineClasses(lineView); } else if (cls) { lineView.text.className = cls; } } function updateLineClasses(lineView) { updateLineBackground(lineView); if (lineView.line.wrapClass) ensureLineWrapped(lineView).className = lineView.line.wrapClass; else if (lineView.node != lineView.text) lineView.node.className = ""; var textClass = lineView.textClass ? lineView.textClass + " " + (lineView.line.textClass || "") : lineView.line.textClass; lineView.text.className = textClass || ""; } function updateLineGutter(cm, lineView, lineN, dims) { if (lineView.gutter) { lineView.node.removeChild(lineView.gutter); lineView.gutter = null; } if (lineView.gutterBackground) { lineView.node.removeChild(lineView.gutterBackground); lineView.gutterBackground = null; } if (lineView.line.gutterClass) { var wrap = ensureLineWrapped(lineView); lineView.gutterBackground = elt("div", null, "CodeMirror-gutter-background " + lineView.line.gutterClass, "left: " + (cm.options.fixedGutter ? dims.fixedPos : -dims.gutterTotalWidth) + "px; width: " + dims.gutterTotalWidth + "px"); wrap.insertBefore(lineView.gutterBackground, lineView.text); } var markers = lineView.line.gutterMarkers; if (cm.options.lineNumbers || markers) { var wrap = ensureLineWrapped(lineView); var gutterWrap = lineView.gutter = elt("div", null, "CodeMirror-gutter-wrapper", "left: " + (cm.options.fixedGutter ? dims.fixedPos : -dims.gutterTotalWidth) + "px"); cm.display.input.setUneditable(gutterWrap); wrap.insertBefore(gutterWrap, lineView.text); if (lineView.line.gutterClass) gutterWrap.className += " " + lineView.line.gutterClass; if (cm.options.lineNumbers && (!markers || !markers["CodeMirror-linenumbers"])) lineView.lineNumber = gutterWrap.appendChild( elt("div", lineNumberFor(cm.options, lineN), "CodeMirror-linenumber CodeMirror-gutter-elt", "left: " + dims.gutterLeft["CodeMirror-linenumbers"] + "px; width: " + cm.display.lineNumInnerWidth + "px")); if (markers) for (var k = 0; k < cm.options.gutters.length; ++k) { var id = cm.options.gutters[k], found = markers.hasOwnProperty(id) && markers[id]; if (found) gutterWrap.appendChild(elt("div", [found], "CodeMirror-gutter-elt", "left: " + dims.gutterLeft[id] + "px; width: " + dims.gutterWidth[id] + "px")); } } } function updateLineWidgets(cm, lineView, dims) { if (lineView.alignable) lineView.alignable = null; for (var node = lineView.node.firstChild, next; node; node = next) { var next = node.nextSibling; if (node.className == "CodeMirror-linewidget") lineView.node.removeChild(node); } insertLineWidgets(cm, lineView, dims); } // Build a line's DOM representation from scratch function buildLineElement(cm, lineView, lineN, dims) { var built = getLineContent(cm, lineView); lineView.text = lineView.node = built.pre; if (built.bgClass) lineView.bgClass = built.bgClass; if (built.textClass) lineView.textClass = built.textClass; updateLineClasses(lineView); updateLineGutter(cm, lineView, lineN, dims); insertLineWidgets(cm, lineView, dims); return lineView.node; } // A lineView may contain multiple logical lines (when merged by // collapsed spans). The widgets for all of them need to be drawn. function insertLineWidgets(cm, lineView, dims) { insertLineWidgetsFor(cm, lineView.line, lineView, dims, true); if (lineView.rest) for (var i = 0; i < lineView.rest.length; i++) insertLineWidgetsFor(cm, lineView.rest[i], lineView, dims, false); } function insertLineWidgetsFor(cm, line, lineView, dims, allowAbove) { if (!line.widgets) return; var wrap = ensureLineWrapped(lineView); for (var i = 0, ws = line.widgets; i < ws.length; ++i) { var widget = ws[i], node = elt("div", [widget.node], "CodeMirror-linewidget"); if (!widget.handleMouseEvents) node.setAttribute("cm-ignore-events", "true"); positionLineWidget(widget, node, lineView, dims); cm.display.input.setUneditable(node); if (allowAbove && widget.above) wrap.insertBefore(node, lineView.gutter || lineView.text); else wrap.appendChild(node); signalLater(widget, "redraw"); } } function positionLineWidget(widget, node, lineView, dims) { if (widget.noHScroll) { (lineView.alignable || (lineView.alignable = [])).push(node); var width = dims.wrapperWidth; node.style.left = dims.fixedPos + "px"; if (!widget.coverGutter) { width -= dims.gutterTotalWidth; node.style.paddingLeft = dims.gutterTotalWidth + "px"; } node.style.width = width + "px"; } if (widget.coverGutter) { node.style.zIndex = 5; node.style.position = "relative"; if (!widget.noHScroll) node.style.marginLeft = -dims.gutterTotalWidth + "px"; } } // POSITION OBJECT // A Pos instance represents a position within the text. var Pos = CodeMirror.Pos = function(line, ch) { if (!(this instanceof Pos)) return new Pos(line, ch); this.line = line; this.ch = ch; }; // Compare two positions, return 0 if they are the same, a negative // number when a is less, and a positive number otherwise. var cmp = CodeMirror.cmpPos = function(a, b) { return a.line - b.line || a.ch - b.ch; }; function copyPos(x) {return Pos(x.line, x.ch);} function maxPos(a, b) { return cmp(a, b) < 0 ? b : a; } function minPos(a, b) { return cmp(a, b) < 0 ? a : b; } // INPUT HANDLING function ensureFocus(cm) { if (!cm.state.focused) { cm.display.input.focus(); onFocus(cm); } } // This will be set to a {lineWise: bool, text: [string]} object, so // that, when pasting, we know what kind of selections the copied // text was made out of. var lastCopied = null; function applyTextInput(cm, inserted, deleted, sel, origin) { var doc = cm.doc; cm.display.shift = false; if (!sel) sel = doc.sel; var paste = cm.state.pasteIncoming || origin == "paste"; var textLines = doc.splitLines(inserted), multiPaste = null // When pasing N lines into N selections, insert one line per selection if (paste && sel.ranges.length > 1) { if (lastCopied && lastCopied.text.join("\n") == inserted) { if (sel.ranges.length % lastCopied.text.length == 0) { multiPaste = []; for (var i = 0; i < lastCopied.text.length; i++) multiPaste.push(doc.splitLines(lastCopied.text[i])); } } else if (textLines.length == sel.ranges.length) { multiPaste = map(textLines, function(l) { return [l]; }); } } // Normal behavior is to insert the new text into every selection for (var i = sel.ranges.length - 1; i >= 0; i--) { var range = sel.ranges[i]; var from = range.from(), to = range.to(); if (range.empty()) { if (deleted && deleted > 0) // Handle deletion from = Pos(from.line, from.ch - deleted); else if (cm.state.overwrite && !paste) // Handle overwrite to = Pos(to.line, Math.min(getLine(doc, to.line).text.length, to.ch + lst(textLines).length)); else if (lastCopied && lastCopied.lineWise && lastCopied.text.join("\n") == inserted) from = to = Pos(from.line, 0) } var updateInput = cm.curOp.updateInput; var changeEvent = {from: from, to: to, text: multiPaste ? multiPaste[i % multiPaste.length] : textLines, origin: origin || (paste ? "paste" : cm.state.cutIncoming ? "cut" : "+input")}; makeChange(cm.doc, changeEvent); signalLater(cm, "inputRead", cm, changeEvent); } if (inserted && !paste) triggerElectric(cm, inserted); ensureCursorVisible(cm); cm.curOp.updateInput = updateInput; cm.curOp.typing = true; cm.state.pasteIncoming = cm.state.cutIncoming = false; } function handlePaste(e, cm) { var pasted = e.clipboardData && e.clipboardData.getData("Text"); if (pasted) { e.preventDefault(); if (!cm.isReadOnly() && !cm.options.disableInput) runInOp(cm, function() { applyTextInput(cm, pasted, 0, null, "paste"); }); return true; } } function triggerElectric(cm, inserted) { // When an 'electric' character is inserted, immediately trigger a reindent if (!cm.options.electricChars || !cm.options.smartIndent) return; var sel = cm.doc.sel; for (var i = sel.ranges.length - 1; i >= 0; i--) { var range = sel.ranges[i]; if (range.head.ch > 100 || (i && sel.ranges[i - 1].head.line == range.head.line)) continue; var mode = cm.getModeAt(range.head); var indented = false; if (mode.electricChars) { for (var j = 0; j < mode.electricChars.length; j++) if (inserted.indexOf(mode.electricChars.charAt(j)) > -1) { indented = indentLine(cm, range.head.line, "smart"); break; } } else if (mode.electricInput) { if (mode.electricInput.test(getLine(cm.doc, range.head.line).text.slice(0, range.head.ch))) indented = indentLine(cm, range.head.line, "smart"); } if (indented) signalLater(cm, "electricInput", cm, range.head.line); } } function copyableRanges(cm) { var text = [], ranges = []; for (var i = 0; i < cm.doc.sel.ranges.length; i++) { var line = cm.doc.sel.ranges[i].head.line; var lineRange = {anchor: Pos(line, 0), head: Pos(line + 1, 0)}; ranges.push(lineRange); text.push(cm.getRange(lineRange.anchor, lineRange.head)); } return {text: text, ranges: ranges}; } function disableBrowserMagic(field, spellcheck) { field.setAttribute("autocorrect", "off"); field.setAttribute("autocapitalize", "off"); field.setAttribute("spellcheck", !!spellcheck); } // TEXTAREA INPUT STYLE function TextareaInput(cm) { this.cm = cm; // See input.poll and input.reset this.prevInput = ""; // Flag that indicates whether we expect input to appear real soon // now (after some event like 'keypress' or 'input') and are // polling intensively. this.pollingFast = false; // Self-resetting timeout for the poller this.polling = new Delayed(); // Tracks when input.reset has punted to just putting a short // string into the textarea instead of the full selection. this.inaccurateSelection = false; // Used to work around IE issue with selection being forgotten when focus moves away from textarea this.hasSelection = false; this.composing = null; }; function hiddenTextarea() { var te = elt("textarea", null, null, "position: absolute; bottom: -1em; padding: 0; width: 1px; height: 1em; outline: none"); var div = elt("div", [te], null, "overflow: hidden; position: relative; width: 3px; height: 0px;"); // The textarea is kept positioned near the cursor to prevent the // fact that it'll be scrolled into view on input from scrolling // our fake cursor out of view. On webkit, when wrap=off, paste is // very slow. So make the area wide instead. if (webkit) te.style.width = "1000px"; else te.setAttribute("wrap", "off"); // If border: 0; -- iOS fails to open keyboard (issue #1287) if (ios) te.style.border = "1px solid black"; disableBrowserMagic(te); return div; } TextareaInput.prototype = copyObj({ init: function(display) { var input = this, cm = this.cm; // Wraps and hides input textarea var div = this.wrapper = hiddenTextarea(); // The semihidden textarea that is focused when the editor is // focused, and receives input. var te = this.textarea = div.firstChild; display.wrapper.insertBefore(div, display.wrapper.firstChild); // Needed to hide big blue blinking cursor on Mobile Safari (doesn't seem to work in iOS 8 anymore) if (ios) te.style.width = "0px"; on(te, "input", function() { if (ie && ie_version >= 9 && input.hasSelection) input.hasSelection = null; input.poll(); }); on(te, "paste", function(e) { if (signalDOMEvent(cm, e) || handlePaste(e, cm)) return cm.state.pasteIncoming = true; input.fastPoll(); }); function prepareCopyCut(e) { if (signalDOMEvent(cm, e)) return if (cm.somethingSelected()) { lastCopied = {lineWise: false, text: cm.getSelections()}; if (input.inaccurateSelection) { input.prevInput = ""; input.inaccurateSelection = false; te.value = lastCopied.text.join("\n"); selectInput(te); } } else if (!cm.options.lineWiseCopyCut) { return; } else { var ranges = copyableRanges(cm); lastCopied = {lineWise: true, text: ranges.text}; if (e.type == "cut") { cm.setSelections(ranges.ranges, null, sel_dontScroll); } else { input.prevInput = ""; te.value = ranges.text.join("\n"); selectInput(te); } } if (e.type == "cut") cm.state.cutIncoming = true; } on(te, "cut", prepareCopyCut); on(te, "copy", prepareCopyCut); on(display.scroller, "paste", function(e) { if (eventInWidget(display, e) || signalDOMEvent(cm, e)) return; cm.state.pasteIncoming = true; input.focus(); }); // Prevent normal selection in the editor (we handle our own) on(display.lineSpace, "selectstart", function(e) { if (!eventInWidget(display, e)) e_preventDefault(e); }); on(te, "compositionstart", function() { var start = cm.getCursor("from"); if (input.composing) input.composing.range.clear() input.composing = { start: start, range: cm.markText(start, cm.getCursor("to"), {className: "CodeMirror-composing"}) }; }); on(te, "compositionend", function() { if (input.composing) { input.poll(); input.composing.range.clear(); input.composing = null; } }); }, prepareSelection: function() { // Redraw the selection and/or cursor var cm = this.cm, display = cm.display, doc = cm.doc; var result = prepareSelection(cm); // Move the hidden textarea near the cursor to prevent scrolling artifacts if (cm.options.moveInputWithCursor) { var headPos = cursorCoords(cm, doc.sel.primary().head, "div"); var wrapOff = display.wrapper.getBoundingClientRect(), lineOff = display.lineDiv.getBoundingClientRect(); result.teTop = Math.max(0, Math.min(display.wrapper.clientHeight - 10, headPos.top + lineOff.top - wrapOff.top)); result.teLeft = Math.max(0, Math.min(display.wrapper.clientWidth - 10, headPos.left + lineOff.left - wrapOff.left)); } return result; }, showSelection: function(drawn) { var cm = this.cm, display = cm.display; removeChildrenAndAdd(display.cursorDiv, drawn.cursors); removeChildrenAndAdd(display.selectionDiv, drawn.selection); if (drawn.teTop != null) { this.wrapper.style.top = drawn.teTop + "px"; this.wrapper.style.left = drawn.teLeft + "px"; } }, // Reset the input to correspond to the selection (or to be empty, // when not typing and nothing is selected) reset: function(typing) { if (this.contextMenuPending) return; var minimal, selected, cm = this.cm, doc = cm.doc; if (cm.somethingSelected()) { this.prevInput = ""; var range = doc.sel.primary(); minimal = hasCopyEvent && (range.to().line - range.from().line > 100 || (selected = cm.getSelection()).length > 1000); var content = minimal ? "-" : selected || cm.getSelection(); this.textarea.value = content; if (cm.state.focused) selectInput(this.textarea); if (ie && ie_version >= 9) this.hasSelection = content; } else if (!typing) { this.prevInput = this.textarea.value = ""; if (ie && ie_version >= 9) this.hasSelection = null; } this.inaccurateSelection = minimal; }, getField: function() { return this.textarea; }, supportsTouch: function() { return false; }, focus: function() { if (this.cm.options.readOnly != "nocursor" && (!mobile || activeElt() != this.textarea)) { try { this.textarea.focus(); } catch (e) {} // IE8 will throw if the textarea is display: none or not in DOM } }, blur: function() { this.textarea.blur(); }, resetPosition: function() { this.wrapper.style.top = this.wrapper.style.left = 0; }, receivedFocus: function() { this.slowPoll(); }, // Poll for input changes, using the normal rate of polling. This // runs as long as the editor is focused. slowPoll: function() { var input = this; if (input.pollingFast) return; input.polling.set(this.cm.options.pollInterval, function() { input.poll(); if (input.cm.state.focused) input.slowPoll(); }); }, // When an event has just come in that is likely to add or change // something in the input textarea, we poll faster, to ensure that // the change appears on the screen quickly. fastPoll: function() { var missed = false, input = this; input.pollingFast = true; function p() { var changed = input.poll(); if (!changed && !missed) {missed = true; input.polling.set(60, p);} else {input.pollingFast = false; input.slowPoll();} } input.polling.set(20, p); }, // Read input from the textarea, and update the document to match. // When something is selected, it is present in the textarea, and // selected (unless it is huge, in which case a placeholder is // used). When nothing is selected, the cursor sits after previously // seen text (can be empty), which is stored in prevInput (we must // not reset the textarea when typing, because that breaks IME). poll: function() { var cm = this.cm, input = this.textarea, prevInput = this.prevInput; // Since this is called a *lot*, try to bail out as cheaply as // possible when it is clear that nothing happened. hasSelection // will be the case when there is a lot of text in the textarea, // in which case reading its value would be expensive. if (this.contextMenuPending || !cm.state.focused || (hasSelection(input) && !prevInput && !this.composing) || cm.isReadOnly() || cm.options.disableInput || cm.state.keySeq) return false; var text = input.value; // If nothing changed, bail. if (text == prevInput && !cm.somethingSelected()) return false; // Work around nonsensical selection resetting in IE9/10, and // inexplicable appearance of private area unicode characters on // some key combos in Mac (#2689). if (ie && ie_version >= 9 && this.hasSelection === text || mac && /[\uf700-\uf7ff]/.test(text)) { cm.display.input.reset(); return false; } if (cm.doc.sel == cm.display.selForContextMenu) { var first = text.charCodeAt(0); if (first == 0x200b && !prevInput) prevInput = "\u200b"; if (first == 0x21da) { this.reset(); return this.cm.execCommand("undo"); } } // Find the part of the input that is actually new var same = 0, l = Math.min(prevInput.length, text.length); while (same < l && prevInput.charCodeAt(same) == text.charCodeAt(same)) ++same; var self = this; runInOp(cm, function() { applyTextInput(cm, text.slice(same), prevInput.length - same, null, self.composing ? "*compose" : null); // Don't leave long text in the textarea, since it makes further polling slow if (text.length > 1000 || text.indexOf("\n") > -1) input.value = self.prevInput = ""; else self.prevInput = text; if (self.composing) { self.composing.range.clear(); self.composing.range = cm.markText(self.composing.start, cm.getCursor("to"), {className: "CodeMirror-composing"}); } }); return true; }, ensurePolled: function() { if (this.pollingFast && this.poll()) this.pollingFast = false; }, onKeyPress: function() { if (ie && ie_version >= 9) this.hasSelection = null; this.fastPoll(); }, onContextMenu: function(e) { var input = this, cm = input.cm, display = cm.display, te = input.textarea; var pos = posFromMouse(cm, e), scrollPos = display.scroller.scrollTop; if (!pos || presto) return; // Opera is difficult. // Reset the current text selection only if the click is done outside of the selection // and 'resetSelectionOnContextMenu' option is true. var reset = cm.options.resetSelectionOnContextMenu; if (reset && cm.doc.sel.contains(pos) == -1) operation(cm, setSelection)(cm.doc, simpleSelection(pos), sel_dontScroll); var oldCSS = te.style.cssText, oldWrapperCSS = input.wrapper.style.cssText; input.wrapper.style.cssText = "position: absolute" var wrapperBox = input.wrapper.getBoundingClientRect() te.style.cssText = "position: absolute; width: 30px; height: 30px; top: " + (e.clientY - wrapperBox.top - 5) + "px; left: " + (e.clientX - wrapperBox.left - 5) + "px; z-index: 1000; background: " + (ie ? "rgba(255, 255, 255, .05)" : "transparent") + "; outline: none; border-width: 0; outline: none; overflow: hidden; opacity: .05; filter: alpha(opacity=5);"; if (webkit) var oldScrollY = window.scrollY; // Work around Chrome issue (#2712) display.input.focus(); if (webkit) window.scrollTo(null, oldScrollY); display.input.reset(); // Adds "Select all" to context menu in FF if (!cm.somethingSelected()) te.value = input.prevInput = " "; input.contextMenuPending = true; display.selForContextMenu = cm.doc.sel; clearTimeout(display.detectingSelectAll); // Select-all will be greyed out if there's nothing to select, so // this adds a zero-width space so that we can later check whether // it got selected. function prepareSelectAllHack() { if (te.selectionStart != null) { var selected = cm.somethingSelected(); var extval = "\u200b" + (selected ? te.value : ""); te.value = "\u21da"; // Used to catch context-menu undo te.value = extval; input.prevInput = selected ? "" : "\u200b"; te.selectionStart = 1; te.selectionEnd = extval.length; // Re-set this, in case some other handler touched the // selection in the meantime. display.selForContextMenu = cm.doc.sel; } } function rehide() { input.contextMenuPending = false; input.wrapper.style.cssText = oldWrapperCSS te.style.cssText = oldCSS; if (ie && ie_version < 9) display.scrollbars.setScrollTop(display.scroller.scrollTop = scrollPos); // Try to detect the user choosing select-all if (te.selectionStart != null) { if (!ie || (ie && ie_version < 9)) prepareSelectAllHack(); var i = 0, poll = function() { if (display.selForContextMenu == cm.doc.sel && te.selectionStart == 0 && te.selectionEnd > 0 && input.prevInput == "\u200b") operation(cm, commands.selectAll)(cm); else if (i++ < 10) display.detectingSelectAll = setTimeout(poll, 500); else display.input.reset(); }; display.detectingSelectAll = setTimeout(poll, 200); } } if (ie && ie_version >= 9) prepareSelectAllHack(); if (captureRightClick) { e_stop(e); var mouseup = function() { off(window, "mouseup", mouseup); setTimeout(rehide, 20); }; on(window, "mouseup", mouseup); } else { setTimeout(rehide, 50); } }, readOnlyChanged: function(val) { if (!val) this.reset(); }, setUneditable: nothing, needsContentAttribute: false }, TextareaInput.prototype); // CONTENTEDITABLE INPUT STYLE function ContentEditableInput(cm) { this.cm = cm; this.lastAnchorNode = this.lastAnchorOffset = this.lastFocusNode = this.lastFocusOffset = null; this.polling = new Delayed(); this.gracePeriod = false; } ContentEditableInput.prototype = copyObj({ init: function(display) { var input = this, cm = input.cm; var div = input.div = display.lineDiv; disableBrowserMagic(div, cm.options.spellcheck); on(div, "paste", function(e) { if (signalDOMEvent(cm, e) || handlePaste(e, cm)) return // IE doesn't fire input events, so we schedule a read for the pasted content in this way if (ie_version <= 11) setTimeout(operation(cm, function() { if (!input.pollContent()) regChange(cm); }), 20) }) on(div, "compositionstart", function(e) { var data = e.data; input.composing = {sel: cm.doc.sel, data: data, startData: data}; if (!data) return; var prim = cm.doc.sel.primary(); var line = cm.getLine(prim.head.line); var found = line.indexOf(data, Math.max(0, prim.head.ch - data.length)); if (found > -1 && found <= prim.head.ch) input.composing.sel = simpleSelection(Pos(prim.head.line, found), Pos(prim.head.line, found + data.length)); }); on(div, "compositionupdate", function(e) { input.composing.data = e.data; }); on(div, "compositionend", function(e) { var ours = input.composing; if (!ours) return; if (e.data != ours.startData && !/\u200b/.test(e.data)) ours.data = e.data; // Need a small delay to prevent other code (input event, // selection polling) from doing damage when fired right after // compositionend. setTimeout(function() { if (!ours.handled) input.applyComposition(ours); if (input.composing == ours) input.composing = null; }, 50); }); on(div, "touchstart", function() { input.forceCompositionEnd(); }); on(div, "input", function() { if (input.composing) return; if (cm.isReadOnly() || !input.pollContent()) runInOp(input.cm, function() {regChange(cm);}); }); function onCopyCut(e) { if (signalDOMEvent(cm, e)) return if (cm.somethingSelected()) { lastCopied = {lineWise: false, text: cm.getSelections()}; if (e.type == "cut") cm.replaceSelection("", null, "cut"); } else if (!cm.options.lineWiseCopyCut) { return; } else { var ranges = copyableRanges(cm); lastCopied = {lineWise: true, text: ranges.text}; if (e.type == "cut") { cm.operation(function() { cm.setSelections(ranges.ranges, 0, sel_dontScroll); cm.replaceSelection("", null, "cut"); }); } } if (e.clipboardData) { e.clipboardData.clearData(); var content = lastCopied.text.join("\n") // iOS exposes the clipboard API, but seems to discard content inserted into it e.clipboardData.setData("Text", content); if (e.clipboardData.getData("Text") == content) { e.preventDefault(); return } } // Old-fashioned briefly-focus-a-textarea hack var kludge = hiddenTextarea(), te = kludge.firstChild; cm.display.lineSpace.insertBefore(kludge, cm.display.lineSpace.firstChild); te.value = lastCopied.text.join("\n"); var hadFocus = document.activeElement; selectInput(te); setTimeout(function() { cm.display.lineSpace.removeChild(kludge); hadFocus.focus(); if (hadFocus == div) input.showPrimarySelection() }, 50); } on(div, "copy", onCopyCut); on(div, "cut", onCopyCut); }, prepareSelection: function() { var result = prepareSelection(this.cm, false); result.focus = this.cm.state.focused; return result; }, showSelection: function(info, takeFocus) { if (!info || !this.cm.display.view.length) return; if (info.focus || takeFocus) this.showPrimarySelection(); this.showMultipleSelections(info); }, showPrimarySelection: function() { var sel = window.getSelection(), prim = this.cm.doc.sel.primary(); var curAnchor = domToPos(this.cm, sel.anchorNode, sel.anchorOffset); var curFocus = domToPos(this.cm, sel.focusNode, sel.focusOffset); if (curAnchor && !curAnchor.bad && curFocus && !curFocus.bad && cmp(minPos(curAnchor, curFocus), prim.from()) == 0 && cmp(maxPos(curAnchor, curFocus), prim.to()) == 0) return; var start = posToDOM(this.cm, prim.from()); var end = posToDOM(this.cm, prim.to()); if (!start && !end) return; var view = this.cm.display.view; var old = sel.rangeCount && sel.getRangeAt(0); if (!start) { start = {node: view[0].measure.map[2], offset: 0}; } else if (!end) { // FIXME dangerously hacky var measure = view[view.length - 1].measure; var map = measure.maps ? measure.maps[measure.maps.length - 1] : measure.map; end = {node: map[map.length - 1], offset: map[map.length - 2] - map[map.length - 3]}; } try { var rng = range(start.node, start.offset, end.offset, end.node); } catch(e) {} // Our model of the DOM might be outdated, in which case the range we try to set can be impossible if (rng) { if (!gecko && this.cm.state.focused) { sel.collapse(start.node, start.offset); if (!rng.collapsed) sel.addRange(rng); } else { sel.removeAllRanges(); sel.addRange(rng); } if (old && sel.anchorNode == null) sel.addRange(old); else if (gecko) this.startGracePeriod(); } this.rememberSelection(); }, startGracePeriod: function() { var input = this; clearTimeout(this.gracePeriod); this.gracePeriod = setTimeout(function() { input.gracePeriod = false; if (input.selectionChanged()) input.cm.operation(function() { input.cm.curOp.selectionChanged = true; }); }, 20); }, showMultipleSelections: function(info) { removeChildrenAndAdd(this.cm.display.cursorDiv, info.cursors); removeChildrenAndAdd(this.cm.display.selectionDiv, info.selection); }, rememberSelection: function() { var sel = window.getSelection(); this.lastAnchorNode = sel.anchorNode; this.lastAnchorOffset = sel.anchorOffset; this.lastFocusNode = sel.focusNode; this.lastFocusOffset = sel.focusOffset; }, selectionInEditor: function() { var sel = window.getSelection(); if (!sel.rangeCount) return false; var node = sel.getRangeAt(0).commonAncestorContainer; return contains(this.div, node); }, focus: function() { if (this.cm.options.readOnly != "nocursor") this.div.focus(); }, blur: function() { this.div.blur(); }, getField: function() { return this.div; }, supportsTouch: function() { return true; }, receivedFocus: function() { var input = this; if (this.selectionInEditor()) this.pollSelection(); else runInOp(this.cm, function() { input.cm.curOp.selectionChanged = true; }); function poll() { if (input.cm.state.focused) { input.pollSelection(); input.polling.set(input.cm.options.pollInterval, poll); } } this.polling.set(this.cm.options.pollInterval, poll); }, selectionChanged: function() { var sel = window.getSelection(); return sel.anchorNode != this.lastAnchorNode || sel.anchorOffset != this.lastAnchorOffset || sel.focusNode != this.lastFocusNode || sel.focusOffset != this.lastFocusOffset; }, pollSelection: function() { if (!this.composing && !this.gracePeriod && this.selectionChanged()) { var sel = window.getSelection(), cm = this.cm; this.rememberSelection(); var anchor = domToPos(cm, sel.anchorNode, sel.anchorOffset); var head = domToPos(cm, sel.focusNode, sel.focusOffset); if (anchor && head) runInOp(cm, function() { setSelection(cm.doc, simpleSelection(anchor, head), sel_dontScroll); if (anchor.bad || head.bad) cm.curOp.selectionChanged = true; }); } }, pollContent: function() { var cm = this.cm, display = cm.display, sel = cm.doc.sel.primary(); var from = sel.from(), to = sel.to(); if (from.line < display.viewFrom || to.line > display.viewTo - 1) return false; var fromIndex; if (from.line == display.viewFrom || (fromIndex = findViewIndex(cm, from.line)) == 0) { var fromLine = lineNo(display.view[0].line); var fromNode = display.view[0].node; } else { var fromLine = lineNo(display.view[fromIndex].line); var fromNode = display.view[fromIndex - 1].node.nextSibling; } var toIndex = findViewIndex(cm, to.line); if (toIndex == display.view.length - 1) { var toLine = display.viewTo - 1; var toNode = display.lineDiv.lastChild; } else { var toLine = lineNo(display.view[toIndex + 1].line) - 1; var toNode = display.view[toIndex + 1].node.previousSibling; } var newText = cm.doc.splitLines(domTextBetween(cm, fromNode, toNode, fromLine, toLine)); var oldText = getBetween(cm.doc, Pos(fromLine, 0), Pos(toLine, getLine(cm.doc, toLine).text.length)); while (newText.length > 1 && oldText.length > 1) { if (lst(newText) == lst(oldText)) { newText.pop(); oldText.pop(); toLine--; } else if (newText[0] == oldText[0]) { newText.shift(); oldText.shift(); fromLine++; } else break; } var cutFront = 0, cutEnd = 0; var newTop = newText[0], oldTop = oldText[0], maxCutFront = Math.min(newTop.length, oldTop.length); while (cutFront < maxCutFront && newTop.charCodeAt(cutFront) == oldTop.charCodeAt(cutFront)) ++cutFront; var newBot = lst(newText), oldBot = lst(oldText); var maxCutEnd = Math.min(newBot.length - (newText.length == 1 ? cutFront : 0), oldBot.length - (oldText.length == 1 ? cutFront : 0)); while (cutEnd < maxCutEnd && newBot.charCodeAt(newBot.length - cutEnd - 1) == oldBot.charCodeAt(oldBot.length - cutEnd - 1)) ++cutEnd; newText[newText.length - 1] = newBot.slice(0, newBot.length - cutEnd); newText[0] = newText[0].slice(cutFront); var chFrom = Pos(fromLine, cutFront); var chTo = Pos(toLine, oldText.length ? lst(oldText).length - cutEnd : 0); if (newText.length > 1 || newText[0] || cmp(chFrom, chTo)) { replaceRange(cm.doc, newText, chFrom, chTo, "+input"); return true; } }, ensurePolled: function() { this.forceCompositionEnd(); }, reset: function() { this.forceCompositionEnd(); }, forceCompositionEnd: function() { if (!this.composing || this.composing.handled) return; this.applyComposition(this.composing); this.composing.handled = true; this.div.blur(); this.div.focus(); }, applyComposition: function(composing) { if (this.cm.isReadOnly()) operation(this.cm, regChange)(this.cm) else if (composing.data && composing.data != composing.startData) operation(this.cm, applyTextInput)(this.cm, composing.data, 0, composing.sel); }, setUneditable: function(node) { node.contentEditable = "false" }, onKeyPress: function(e) { e.preventDefault(); if (!this.cm.isReadOnly()) operation(this.cm, applyTextInput)(this.cm, String.fromCharCode(e.charCode == null ? e.keyCode : e.charCode), 0); }, readOnlyChanged: function(val) { this.div.contentEditable = String(val != "nocursor") }, onContextMenu: nothing, resetPosition: nothing, needsContentAttribute: true }, ContentEditableInput.prototype); function posToDOM(cm, pos) { var view = findViewForLine(cm, pos.line); if (!view || view.hidden) return null; var line = getLine(cm.doc, pos.line); var info = mapFromLineView(view, line, pos.line); var order = getOrder(line), side = "left"; if (order) { var partPos = getBidiPartAt(order, pos.ch); side = partPos % 2 ? "right" : "left"; } var result = nodeAndOffsetInLineMap(info.map, pos.ch, side); result.offset = result.collapse == "right" ? result.end : result.start; return result; } function badPos(pos, bad) { if (bad) pos.bad = true; return pos; } function domToPos(cm, node, offset) { var lineNode; if (node == cm.display.lineDiv) { lineNode = cm.display.lineDiv.childNodes[offset]; if (!lineNode) return badPos(cm.clipPos(Pos(cm.display.viewTo - 1)), true); node = null; offset = 0; } else { for (lineNode = node;; lineNode = lineNode.parentNode) { if (!lineNode || lineNode == cm.display.lineDiv) return null; if (lineNode.parentNode && lineNode.parentNode == cm.display.lineDiv) break; } } for (var i = 0; i < cm.display.view.length; i++) { var lineView = cm.display.view[i]; if (lineView.node == lineNode) return locateNodeInLineView(lineView, node, offset); } } function locateNodeInLineView(lineView, node, offset) { var wrapper = lineView.text.firstChild, bad = false; if (!node || !contains(wrapper, node)) return badPos(Pos(lineNo(lineView.line), 0), true); if (node == wrapper) { bad = true; node = wrapper.childNodes[offset]; offset = 0; if (!node) { var line = lineView.rest ? lst(lineView.rest) : lineView.line; return badPos(Pos(lineNo(line), line.text.length), bad); } } var textNode = node.nodeType == 3 ? node : null, topNode = node; if (!textNode && node.childNodes.length == 1 && node.firstChild.nodeType == 3) { textNode = node.firstChild; if (offset) offset = textNode.nodeValue.length; } while (topNode.parentNode != wrapper) topNode = topNode.parentNode; var measure = lineView.measure, maps = measure.maps; function find(textNode, topNode, offset) { for (var i = -1; i < (maps ? maps.length : 0); i++) { var map = i < 0 ? measure.map : maps[i]; for (var j = 0; j < map.length; j += 3) { var curNode = map[j + 2]; if (curNode == textNode || curNode == topNode) { var line = lineNo(i < 0 ? lineView.line : lineView.rest[i]); var ch = map[j] + offset; if (offset < 0 || curNode != textNode) ch = map[j + (offset ? 1 : 0)]; return Pos(line, ch); } } } } var found = find(textNode, topNode, offset); if (found) return badPos(found, bad); // FIXME this is all really shaky. might handle the few cases it needs to handle, but likely to cause problems for (var after = topNode.nextSibling, dist = textNode ? textNode.nodeValue.length - offset : 0; after; after = after.nextSibling) { found = find(after, after.firstChild, 0); if (found) return badPos(Pos(found.line, found.ch - dist), bad); else dist += after.textContent.length; } for (var before = topNode.previousSibling, dist = offset; before; before = before.previousSibling) { found = find(before, before.firstChild, -1); if (found) return badPos(Pos(found.line, found.ch + dist), bad); else dist += before.textContent.length; } } function domTextBetween(cm, from, to, fromLine, toLine) { var text = "", closing = false, lineSep = cm.doc.lineSeparator(); function recognizeMarker(id) { return function(marker) { return marker.id == id; }; } function walk(node) { if (node.nodeType == 1) { var cmText = node.getAttribute("cm-text"); if (cmText != null) { if (cmText == "") cmText = node.textContent.replace(/\u200b/g, ""); text += cmText; return; } var markerID = node.getAttribute("cm-marker"), range; if (markerID) { var found = cm.findMarks(Pos(fromLine, 0), Pos(toLine + 1, 0), recognizeMarker(+markerID)); if (found.length && (range = found[0].find())) text += getBetween(cm.doc, range.from, range.to).join(lineSep); return; } if (node.getAttribute("contenteditable") == "false") return; for (var i = 0; i < node.childNodes.length; i++) walk(node.childNodes[i]); if (/^(pre|div|p)$/i.test(node.nodeName)) closing = true; } else if (node.nodeType == 3) { var val = node.nodeValue; if (!val) return; if (closing) { text += lineSep; closing = false; } text += val; } } for (;;) { walk(from); if (from == to) break; from = from.nextSibling; } return text; } CodeMirror.inputStyles = {"textarea": TextareaInput, "contenteditable": ContentEditableInput}; // SELECTION / CURSOR // Selection objects are immutable. A new one is created every time // the selection changes. A selection is one or more non-overlapping // (and non-touching) ranges, sorted, and an integer that indicates // which one is the primary selection (the one that's scrolled into // view, that getCursor returns, etc). function Selection(ranges, primIndex) { this.ranges = ranges; this.primIndex = primIndex; } Selection.prototype = { primary: function() { return this.ranges[this.primIndex]; }, equals: function(other) { if (other == this) return true; if (other.primIndex != this.primIndex || other.ranges.length != this.ranges.length) return false; for (var i = 0; i < this.ranges.length; i++) { var here = this.ranges[i], there = other.ranges[i]; if (cmp(here.anchor, there.anchor) != 0 || cmp(here.head, there.head) != 0) return false; } return true; }, deepCopy: function() { for (var out = [], i = 0; i < this.ranges.length; i++) out[i] = new Range(copyPos(this.ranges[i].anchor), copyPos(this.ranges[i].head)); return new Selection(out, this.primIndex); }, somethingSelected: function() { for (var i = 0; i < this.ranges.length; i++) if (!this.ranges[i].empty()) return true; return false; }, contains: function(pos, end) { if (!end) end = pos; for (var i = 0; i < this.ranges.length; i++) { var range = this.ranges[i]; if (cmp(end, range.from()) >= 0 && cmp(pos, range.to()) <= 0) return i; } return -1; } }; function Range(anchor, head) { this.anchor = anchor; this.head = head; } Range.prototype = { from: function() { return minPos(this.anchor, this.head); }, to: function() { return maxPos(this.anchor, this.head); }, empty: function() { return this.head.line == this.anchor.line && this.head.ch == this.anchor.ch; } }; // Take an unsorted, potentially overlapping set of ranges, and // build a selection out of it. 'Consumes' ranges array (modifying // it). function normalizeSelection(ranges, primIndex) { var prim = ranges[primIndex]; ranges.sort(function(a, b) { return cmp(a.from(), b.from()); }); primIndex = indexOf(ranges, prim); for (var i = 1; i < ranges.length; i++) { var cur = ranges[i], prev = ranges[i - 1]; if (cmp(prev.to(), cur.from()) >= 0) { var from = minPos(prev.from(), cur.from()), to = maxPos(prev.to(), cur.to()); var inv = prev.empty() ? cur.from() == cur.head : prev.from() == prev.head; if (i <= primIndex) --primIndex; ranges.splice(--i, 2, new Range(inv ? to : from, inv ? from : to)); } } return new Selection(ranges, primIndex); } function simpleSelection(anchor, head) { return new Selection([new Range(anchor, head || anchor)], 0); } // Most of the external API clips given positions to make sure they // actually exist within the document. function clipLine(doc, n) {return Math.max(doc.first, Math.min(n, doc.first + doc.size - 1));} function clipPos(doc, pos) { if (pos.line < doc.first) return Pos(doc.first, 0); var last = doc.first + doc.size - 1; if (pos.line > last) return Pos(last, getLine(doc, last).text.length); return clipToLen(pos, getLine(doc, pos.line).text.length); } function clipToLen(pos, linelen) { var ch = pos.ch; if (ch == null || ch > linelen) return Pos(pos.line, linelen); else if (ch < 0) return Pos(pos.line, 0); else return pos; } function isLine(doc, l) {return l >= doc.first && l < doc.first + doc.size;} function clipPosArray(doc, array) { for (var out = [], i = 0; i < array.length; i++) out[i] = clipPos(doc, array[i]); return out; } // SELECTION UPDATES // The 'scroll' parameter given to many of these indicated whether // the new cursor position should be scrolled into view after // modifying the selection. // If shift is held or the extend flag is set, extends a range to // include a given position (and optionally a second position). // Otherwise, simply returns the range between the given positions. // Used for cursor motion and such. function extendRange(doc, range, head, other) { if (doc.cm && doc.cm.display.shift || doc.extend) { var anchor = range.anchor; if (other) { var posBefore = cmp(head, anchor) < 0; if (posBefore != (cmp(other, anchor) < 0)) { anchor = head; head = other; } else if (posBefore != (cmp(head, other) < 0)) { head = other; } } return new Range(anchor, head); } else { return new Range(other || head, head); } } // Extend the primary selection range, discard the rest. function extendSelection(doc, head, other, options) { setSelection(doc, new Selection([extendRange(doc, doc.sel.primary(), head, other)], 0), options); } // Extend all selections (pos is an array of selections with length // equal the number of selections) function extendSelections(doc, heads, options) { for (var out = [], i = 0; i < doc.sel.ranges.length; i++) out[i] = extendRange(doc, doc.sel.ranges[i], heads[i], null); var newSel = normalizeSelection(out, doc.sel.primIndex); setSelection(doc, newSel, options); } // Updates a single range in the selection. function replaceOneSelection(doc, i, range, options) { var ranges = doc.sel.ranges.slice(0); ranges[i] = range; setSelection(doc, normalizeSelection(ranges, doc.sel.primIndex), options); } // Reset the selection to a single range. function setSimpleSelection(doc, anchor, head, options) { setSelection(doc, simpleSelection(anchor, head), options); } // Give beforeSelectionChange handlers a change to influence a // selection update. function filterSelectionChange(doc, sel, options) { var obj = { ranges: sel.ranges, update: function(ranges) { this.ranges = []; for (var i = 0; i < ranges.length; i++) this.ranges[i] = new Range(clipPos(doc, ranges[i].anchor), clipPos(doc, ranges[i].head)); }, origin: options && options.origin }; signal(doc, "beforeSelectionChange", doc, obj); if (doc.cm) signal(doc.cm, "beforeSelectionChange", doc.cm, obj); if (obj.ranges != sel.ranges) return normalizeSelection(obj.ranges, obj.ranges.length - 1); else return sel; } function setSelectionReplaceHistory(doc, sel, options) { var done = doc.history.done, last = lst(done); if (last && last.ranges) { done[done.length - 1] = sel; setSelectionNoUndo(doc, sel, options); } else { setSelection(doc, sel, options); } } // Set a new selection. function setSelection(doc, sel, options) { setSelectionNoUndo(doc, sel, options); addSelectionToHistory(doc, doc.sel, doc.cm ? doc.cm.curOp.id : NaN, options); } function setSelectionNoUndo(doc, sel, options) { if (hasHandler(doc, "beforeSelectionChange") || doc.cm && hasHandler(doc.cm, "beforeSelectionChange")) sel = filterSelectionChange(doc, sel, options); var bias = options && options.bias || (cmp(sel.primary().head, doc.sel.primary().head) < 0 ? -1 : 1); setSelectionInner(doc, skipAtomicInSelection(doc, sel, bias, true)); if (!(options && options.scroll === false) && doc.cm) ensureCursorVisible(doc.cm); } function setSelectionInner(doc, sel) { if (sel.equals(doc.sel)) return; doc.sel = sel; if (doc.cm) { doc.cm.curOp.updateInput = doc.cm.curOp.selectionChanged = true; signalCursorActivity(doc.cm); } signalLater(doc, "cursorActivity", doc); } // Verify that the selection does not partially select any atomic // marked ranges. function reCheckSelection(doc) { setSelectionInner(doc, skipAtomicInSelection(doc, doc.sel, null, false), sel_dontScroll); } // Return a selection that does not partially select any atomic // ranges. function skipAtomicInSelection(doc, sel, bias, mayClear) { var out; for (var i = 0; i < sel.ranges.length; i++) { var range = sel.ranges[i]; var old = sel.ranges.length == doc.sel.ranges.length && doc.sel.ranges[i]; var newAnchor = skipAtomic(doc, range.anchor, old && old.anchor, bias, mayClear); var newHead = skipAtomic(doc, range.head, old && old.head, bias, mayClear); if (out || newAnchor != range.anchor || newHead != range.head) { if (!out) out = sel.ranges.slice(0, i); out[i] = new Range(newAnchor, newHead); } } return out ? normalizeSelection(out, sel.primIndex) : sel; } function skipAtomicInner(doc, pos, oldPos, dir, mayClear) { var line = getLine(doc, pos.line); if (line.markedSpans) for (var i = 0; i < line.markedSpans.length; ++i) { var sp = line.markedSpans[i], m = sp.marker; if ((sp.from == null || (m.inclusiveLeft ? sp.from <= pos.ch : sp.from < pos.ch)) && (sp.to == null || (m.inclusiveRight ? sp.to >= pos.ch : sp.to > pos.ch))) { if (mayClear) { signal(m, "beforeCursorEnter"); if (m.explicitlyCleared) { if (!line.markedSpans) break; else {--i; continue;} } } if (!m.atomic) continue; if (oldPos) { var near = m.find(dir < 0 ? 1 : -1), diff; if (dir < 0 ? m.inclusiveRight : m.inclusiveLeft) near = movePos(doc, near, -dir, near && near.line == pos.line ? line : null); if (near && near.line == pos.line && (diff = cmp(near, oldPos)) && (dir < 0 ? diff < 0 : diff > 0)) return skipAtomicInner(doc, near, pos, dir, mayClear); } var far = m.find(dir < 0 ? -1 : 1); if (dir < 0 ? m.inclusiveLeft : m.inclusiveRight) far = movePos(doc, far, dir, far.line == pos.line ? line : null); return far ? skipAtomicInner(doc, far, pos, dir, mayClear) : null; } } return pos; } // Ensure a given position is not inside an atomic range. function skipAtomic(doc, pos, oldPos, bias, mayClear) { var dir = bias || 1; var found = skipAtomicInner(doc, pos, oldPos, dir, mayClear) || (!mayClear && skipAtomicInner(doc, pos, oldPos, dir, true)) || skipAtomicInner(doc, pos, oldPos, -dir, mayClear) || (!mayClear && skipAtomicInner(doc, pos, oldPos, -dir, true)); if (!found) { doc.cantEdit = true; return Pos(doc.first, 0); } return found; } function movePos(doc, pos, dir, line) { if (dir < 0 && pos.ch == 0) { if (pos.line > doc.first) return clipPos(doc, Pos(pos.line - 1)); else return null; } else if (dir > 0 && pos.ch == (line || getLine(doc, pos.line)).text.length) { if (pos.line < doc.first + doc.size - 1) return Pos(pos.line + 1, 0); else return null; } else { return new Pos(pos.line, pos.ch + dir); } } // SELECTION DRAWING function updateSelection(cm) { cm.display.input.showSelection(cm.display.input.prepareSelection()); } function prepareSelection(cm, primary) { var doc = cm.doc, result = {}; var curFragment = result.cursors = document.createDocumentFragment(); var selFragment = result.selection = document.createDocumentFragment(); for (var i = 0; i < doc.sel.ranges.length; i++) { if (primary === false && i == doc.sel.primIndex) continue; var range = doc.sel.ranges[i]; if (range.from().line >= cm.display.viewTo || range.to().line < cm.display.viewFrom) continue; var collapsed = range.empty(); if (collapsed || cm.options.showCursorWhenSelecting) drawSelectionCursor(cm, range.head, curFragment); if (!collapsed) drawSelectionRange(cm, range, selFragment); } return result; } // Draws a cursor for the given range function drawSelectionCursor(cm, head, output) { var pos = cursorCoords(cm, head, "div", null, null, !cm.options.singleCursorHeightPerLine); var cursor = output.appendChild(elt("div", "\u00a0", "CodeMirror-cursor")); cursor.style.left = pos.left + "px"; cursor.style.top = pos.top + "px"; cursor.style.height = Math.max(0, pos.bottom - pos.top) * cm.options.cursorHeight + "px"; if (pos.other) { // Secondary cursor, shown when on a 'jump' in bi-directional text var otherCursor = output.appendChild(elt("div", "\u00a0", "CodeMirror-cursor CodeMirror-secondarycursor")); otherCursor.style.display = ""; otherCursor.style.left = pos.other.left + "px"; otherCursor.style.top = pos.other.top + "px"; otherCursor.style.height = (pos.other.bottom - pos.other.top) * .85 + "px"; } } // Draws the given range as a highlighted selection function drawSelectionRange(cm, range, output) { var display = cm.display, doc = cm.doc; var fragment = document.createDocumentFragment(); var padding = paddingH(cm.display), leftSide = padding.left; var rightSide = Math.max(display.sizerWidth, displayWidth(cm) - display.sizer.offsetLeft) - padding.right; function add(left, top, width, bottom) { if (top < 0) top = 0; top = Math.round(top); bottom = Math.round(bottom); fragment.appendChild(elt("div", null, "CodeMirror-selected", "position: absolute; left: " + left + "px; top: " + top + "px; width: " + (width == null ? rightSide - left : width) + "px; height: " + (bottom - top) + "px")); } function drawForLine(line, fromArg, toArg) { var lineObj = getLine(doc, line); var lineLen = lineObj.text.length; var start, end; function coords(ch, bias) { return charCoords(cm, Pos(line, ch), "div", lineObj, bias); } iterateBidiSections(getOrder(lineObj), fromArg || 0, toArg == null ? lineLen : toArg, function(from, to, dir) { var leftPos = coords(from, "left"), rightPos, left, right; if (from == to) { rightPos = leftPos; left = right = leftPos.left; } else { rightPos = coords(to - 1, "right"); if (dir == "rtl") { var tmp = leftPos; leftPos = rightPos; rightPos = tmp; } left = leftPos.left; right = rightPos.right; } if (fromArg == null && from == 0) left = leftSide; if (rightPos.top - leftPos.top > 3) { // Different lines, draw top part add(left, leftPos.top, null, leftPos.bottom); left = leftSide; if (leftPos.bottom < rightPos.top) add(left, leftPos.bottom, null, rightPos.top); } if (toArg == null && to == lineLen) right = rightSide; if (!start || leftPos.top < start.top || leftPos.top == start.top && leftPos.left < start.left) start = leftPos; if (!end || rightPos.bottom > end.bottom || rightPos.bottom == end.bottom && rightPos.right > end.right) end = rightPos; if (left < leftSide + 1) left = leftSide; add(left, rightPos.top, right - left, rightPos.bottom); }); return {start: start, end: end}; } var sFrom = range.from(), sTo = range.to(); if (sFrom.line == sTo.line) { drawForLine(sFrom.line, sFrom.ch, sTo.ch); } else { var fromLine = getLine(doc, sFrom.line), toLine = getLine(doc, sTo.line); var singleVLine = visualLine(fromLine) == visualLine(toLine); var leftEnd = drawForLine(sFrom.line, sFrom.ch, singleVLine ? fromLine.text.length + 1 : null).end; var rightStart = drawForLine(sTo.line, singleVLine ? 0 : null, sTo.ch).start; if (singleVLine) { if (leftEnd.top < rightStart.top - 2) { add(leftEnd.right, leftEnd.top, null, leftEnd.bottom); add(leftSide, rightStart.top, rightStart.left, rightStart.bottom); } else { add(leftEnd.right, leftEnd.top, rightStart.left - leftEnd.right, leftEnd.bottom); } } if (leftEnd.bottom < rightStart.top) add(leftSide, leftEnd.bottom, null, rightStart.top); } output.appendChild(fragment); } // Cursor-blinking function restartBlink(cm) { if (!cm.state.focused) return; var display = cm.display; clearInterval(display.blinker); var on = true; display.cursorDiv.style.visibility = ""; if (cm.options.cursorBlinkRate > 0) display.blinker = setInterval(function() { display.cursorDiv.style.visibility = (on = !on) ? "" : "hidden"; }, cm.options.cursorBlinkRate); else if (cm.options.cursorBlinkRate < 0) display.cursorDiv.style.visibility = "hidden"; } // HIGHLIGHT WORKER function startWorker(cm, time) { if (cm.doc.mode.startState && cm.doc.frontier < cm.display.viewTo) cm.state.highlight.set(time, bind(highlightWorker, cm)); } function highlightWorker(cm) { var doc = cm.doc; if (doc.frontier < doc.first) doc.frontier = doc.first; if (doc.frontier >= cm.display.viewTo) return; var end = +new Date + cm.options.workTime; var state = copyState(doc.mode, getStateBefore(cm, doc.frontier)); var changedLines = []; doc.iter(doc.frontier, Math.min(doc.first + doc.size, cm.display.viewTo + 500), function(line) { if (doc.frontier >= cm.display.viewFrom) { // Visible var oldStyles = line.styles, tooLong = line.text.length > cm.options.maxHighlightLength; var highlighted = highlightLine(cm, line, tooLong ? copyState(doc.mode, state) : state, true); line.styles = highlighted.styles; var oldCls = line.styleClasses, newCls = highlighted.classes; if (newCls) line.styleClasses = newCls; else if (oldCls) line.styleClasses = null; var ischange = !oldStyles || oldStyles.length != line.styles.length || oldCls != newCls && (!oldCls || !newCls || oldCls.bgClass != newCls.bgClass || oldCls.textClass != newCls.textClass); for (var i = 0; !ischange && i < oldStyles.length; ++i) ischange = oldStyles[i] != line.styles[i]; if (ischange) changedLines.push(doc.frontier); line.stateAfter = tooLong ? state : copyState(doc.mode, state); } else { if (line.text.length <= cm.options.maxHighlightLength) processLine(cm, line.text, state); line.stateAfter = doc.frontier % 5 == 0 ? copyState(doc.mode, state) : null; } ++doc.frontier; if (+new Date > end) { startWorker(cm, cm.options.workDelay); return true; } }); if (changedLines.length) runInOp(cm, function() { for (var i = 0; i < changedLines.length; i++) regLineChange(cm, changedLines[i], "text"); }); } // Finds the line to start with when starting a parse. Tries to // find a line with a stateAfter, so that it can start with a // valid state. If that fails, it returns the line with the // smallest indentation, which tends to need the least context to // parse correctly. function findStartLine(cm, n, precise) { var minindent, minline, doc = cm.doc; var lim = precise ? -1 : n - (cm.doc.mode.innerMode ? 1000 : 100); for (var search = n; search > lim; --search) { if (search <= doc.first) return doc.first; var line = getLine(doc, search - 1); if (line.stateAfter && (!precise || search <= doc.frontier)) return search; var indented = countColumn(line.text, null, cm.options.tabSize); if (minline == null || minindent > indented) { minline = search - 1; minindent = indented; } } return minline; } function getStateBefore(cm, n, precise) { var doc = cm.doc, display = cm.display; if (!doc.mode.startState) return true; var pos = findStartLine(cm, n, precise), state = pos > doc.first && getLine(doc, pos-1).stateAfter; if (!state) state = startState(doc.mode); else state = copyState(doc.mode, state); doc.iter(pos, n, function(line) { processLine(cm, line.text, state); var save = pos == n - 1 || pos % 5 == 0 || pos >= display.viewFrom && pos < display.viewTo; line.stateAfter = save ? copyState(doc.mode, state) : null; ++pos; }); if (precise) doc.frontier = pos; return state; } // POSITION MEASUREMENT function paddingTop(display) {return display.lineSpace.offsetTop;} function paddingVert(display) {return display.mover.offsetHeight - display.lineSpace.offsetHeight;} function paddingH(display) { if (display.cachedPaddingH) return display.cachedPaddingH; var e = removeChildrenAndAdd(display.measure, elt("pre", "x")); var style = window.getComputedStyle ? window.getComputedStyle(e) : e.currentStyle; var data = {left: parseInt(style.paddingLeft), right: parseInt(style.paddingRight)}; if (!isNaN(data.left) && !isNaN(data.right)) display.cachedPaddingH = data; return data; } function scrollGap(cm) { return scrollerGap - cm.display.nativeBarWidth; } function displayWidth(cm) { return cm.display.scroller.clientWidth - scrollGap(cm) - cm.display.barWidth; } function displayHeight(cm) { return cm.display.scroller.clientHeight - scrollGap(cm) - cm.display.barHeight; } // Ensure the lineView.wrapping.heights array is populated. This is // an array of bottom offsets for the lines that make up a drawn // line. When lineWrapping is on, there might be more than one // height. function ensureLineHeights(cm, lineView, rect) { var wrapping = cm.options.lineWrapping; var curWidth = wrapping && displayWidth(cm); if (!lineView.measure.heights || wrapping && lineView.measure.width != curWidth) { var heights = lineView.measure.heights = []; if (wrapping) { lineView.measure.width = curWidth; var rects = lineView.text.firstChild.getClientRects(); for (var i = 0; i < rects.length - 1; i++) { var cur = rects[i], next = rects[i + 1]; if (Math.abs(cur.bottom - next.bottom) > 2) heights.push((cur.bottom + next.top) / 2 - rect.top); } } heights.push(rect.bottom - rect.top); } } // Find a line map (mapping character offsets to text nodes) and a // measurement cache for the given line number. (A line view might // contain multiple lines when collapsed ranges are present.) function mapFromLineView(lineView, line, lineN) { if (lineView.line == line) return {map: lineView.measure.map, cache: lineView.measure.cache}; for (var i = 0; i < lineView.rest.length; i++) if (lineView.rest[i] == line) return {map: lineView.measure.maps[i], cache: lineView.measure.caches[i]}; for (var i = 0; i < lineView.rest.length; i++) if (lineNo(lineView.rest[i]) > lineN) return {map: lineView.measure.maps[i], cache: lineView.measure.caches[i], before: true}; } // Render a line into the hidden node display.externalMeasured. Used // when measurement is needed for a line that's not in the viewport. function updateExternalMeasurement(cm, line) { line = visualLine(line); var lineN = lineNo(line); var view = cm.display.externalMeasured = new LineView(cm.doc, line, lineN); view.lineN = lineN; var built = view.built = buildLineContent(cm, view); view.text = built.pre; removeChildrenAndAdd(cm.display.lineMeasure, built.pre); return view; } // Get a {top, bottom, left, right} box (in line-local coordinates) // for a given character. function measureChar(cm, line, ch, bias) { return measureCharPrepared(cm, prepareMeasureForLine(cm, line), ch, bias); } // Find a line view that corresponds to the given line number. function findViewForLine(cm, lineN) { if (lineN >= cm.display.viewFrom && lineN < cm.display.viewTo) return cm.display.view[findViewIndex(cm, lineN)]; var ext = cm.display.externalMeasured; if (ext && lineN >= ext.lineN && lineN < ext.lineN + ext.size) return ext; } // Measurement can be split in two steps, the set-up work that // applies to the whole line, and the measurement of the actual // character. Functions like coordsChar, that need to do a lot of // measurements in a row, can thus ensure that the set-up work is // only done once. function prepareMeasureForLine(cm, line) { var lineN = lineNo(line); var view = findViewForLine(cm, lineN); if (view && !view.text) { view = null; } else if (view && view.changes) { updateLineForChanges(cm, view, lineN, getDimensions(cm)); cm.curOp.forceUpdate = true; } if (!view) view = updateExternalMeasurement(cm, line); var info = mapFromLineView(view, line, lineN); return { line: line, view: view, rect: null, map: info.map, cache: info.cache, before: info.before, hasHeights: false }; } // Given a prepared measurement object, measures the position of an // actual character (or fetches it from the cache). function measureCharPrepared(cm, prepared, ch, bias, varHeight) { if (prepared.before) ch = -1; var key = ch + (bias || ""), found; if (prepared.cache.hasOwnProperty(key)) { found = prepared.cache[key]; } else { if (!prepared.rect) prepared.rect = prepared.view.text.getBoundingClientRect(); if (!prepared.hasHeights) { ensureLineHeights(cm, prepared.view, prepared.rect); prepared.hasHeights = true; } found = measureCharInner(cm, prepared, ch, bias); if (!found.bogus) prepared.cache[key] = found; } return {left: found.left, right: found.right, top: varHeight ? found.rtop : found.top, bottom: varHeight ? found.rbottom : found.bottom}; } var nullRect = {left: 0, right: 0, top: 0, bottom: 0}; function nodeAndOffsetInLineMap(map, ch, bias) { var node, start, end, collapse; // First, search the line map for the text node corresponding to, // or closest to, the target character. for (var i = 0; i < map.length; i += 3) { var mStart = map[i], mEnd = map[i + 1]; if (ch < mStart) { start = 0; end = 1; collapse = "left"; } else if (ch < mEnd) { start = ch - mStart; end = start + 1; } else if (i == map.length - 3 || ch == mEnd && map[i + 3] > ch) { end = mEnd - mStart; start = end - 1; if (ch >= mEnd) collapse = "right"; } if (start != null) { node = map[i + 2]; if (mStart == mEnd && bias == (node.insertLeft ? "left" : "right")) collapse = bias; if (bias == "left" && start == 0) while (i && map[i - 2] == map[i - 3] && map[i - 1].insertLeft) { node = map[(i -= 3) + 2]; collapse = "left"; } if (bias == "right" && start == mEnd - mStart) while (i < map.length - 3 && map[i + 3] == map[i + 4] && !map[i + 5].insertLeft) { node = map[(i += 3) + 2]; collapse = "right"; } break; } } return {node: node, start: start, end: end, collapse: collapse, coverStart: mStart, coverEnd: mEnd}; } function getUsefulRect(rects, bias) { var rect = nullRect if (bias == "left") for (var i = 0; i < rects.length; i++) { if ((rect = rects[i]).left != rect.right) break } else for (var i = rects.length - 1; i >= 0; i--) { if ((rect = rects[i]).left != rect.right) break } return rect } function measureCharInner(cm, prepared, ch, bias) { var place = nodeAndOffsetInLineMap(prepared.map, ch, bias); var node = place.node, start = place.start, end = place.end, collapse = place.collapse; var rect; if (node.nodeType == 3) { // If it is a text node, use a range to retrieve the coordinates. for (var i = 0; i < 4; i++) { // Retry a maximum of 4 times when nonsense rectangles are returned while (start && isExtendingChar(prepared.line.text.charAt(place.coverStart + start))) --start; while (place.coverStart + end < place.coverEnd && isExtendingChar(prepared.line.text.charAt(place.coverStart + end))) ++end; if (ie && ie_version < 9 && start == 0 && end == place.coverEnd - place.coverStart) rect = node.parentNode.getBoundingClientRect(); else rect = getUsefulRect(range(node, start, end).getClientRects(), bias) if (rect.left || rect.right || start == 0) break; end = start; start = start - 1; collapse = "right"; } if (ie && ie_version < 11) rect = maybeUpdateRectForZooming(cm.display.measure, rect); } else { // If it is a widget, simply get the box for the whole widget. if (start > 0) collapse = bias = "right"; var rects; if (cm.options.lineWrapping && (rects = node.getClientRects()).length > 1) rect = rects[bias == "right" ? rects.length - 1 : 0]; else rect = node.getBoundingClientRect(); } if (ie && ie_version < 9 && !start && (!rect || !rect.left && !rect.right)) { var rSpan = node.parentNode.getClientRects()[0]; if (rSpan) rect = {left: rSpan.left, right: rSpan.left + charWidth(cm.display), top: rSpan.top, bottom: rSpan.bottom}; else rect = nullRect; } var rtop = rect.top - prepared.rect.top, rbot = rect.bottom - prepared.rect.top; var mid = (rtop + rbot) / 2; var heights = prepared.view.measure.heights; for (var i = 0; i < heights.length - 1; i++) if (mid < heights[i]) break; var top = i ? heights[i - 1] : 0, bot = heights[i]; var result = {left: (collapse == "right" ? rect.right : rect.left) - prepared.rect.left, right: (collapse == "left" ? rect.left : rect.right) - prepared.rect.left, top: top, bottom: bot}; if (!rect.left && !rect.right) result.bogus = true; if (!cm.options.singleCursorHeightPerLine) { result.rtop = rtop; result.rbottom = rbot; } return result; } // Work around problem with bounding client rects on ranges being // returned incorrectly when zoomed on IE10 and below. function maybeUpdateRectForZooming(measure, rect) { if (!window.screen || screen.logicalXDPI == null || screen.logicalXDPI == screen.deviceXDPI || !hasBadZoomedRects(measure)) return rect; var scaleX = screen.logicalXDPI / screen.deviceXDPI; var scaleY = screen.logicalYDPI / screen.deviceYDPI; return {left: rect.left * scaleX, right: rect.right * scaleX, top: rect.top * scaleY, bottom: rect.bottom * scaleY}; } function clearLineMeasurementCacheFor(lineView) { if (lineView.measure) { lineView.measure.cache = {}; lineView.measure.heights = null; if (lineView.rest) for (var i = 0; i < lineView.rest.length; i++) lineView.measure.caches[i] = {}; } } function clearLineMeasurementCache(cm) { cm.display.externalMeasure = null; removeChildren(cm.display.lineMeasure); for (var i = 0; i < cm.display.view.length; i++) clearLineMeasurementCacheFor(cm.display.view[i]); } function clearCaches(cm) { clearLineMeasurementCache(cm); cm.display.cachedCharWidth = cm.display.cachedTextHeight = cm.display.cachedPaddingH = null; if (!cm.options.lineWrapping) cm.display.maxLineChanged = true; cm.display.lineNumChars = null; } function pageScrollX() { return window.pageXOffset || (document.documentElement || document.body).scrollLeft; } function pageScrollY() { return window.pageYOffset || (document.documentElement || document.body).scrollTop; } // Converts a {top, bottom, left, right} box from line-local // coordinates into another coordinate system. Context may be one of // "line", "div" (display.lineDiv), "local"/null (editor), "window", // or "page". function intoCoordSystem(cm, lineObj, rect, context) { if (lineObj.widgets) for (var i = 0; i < lineObj.widgets.length; ++i) if (lineObj.widgets[i].above) { var size = widgetHeight(lineObj.widgets[i]); rect.top += size; rect.bottom += size; } if (context == "line") return rect; if (!context) context = "local"; var yOff = heightAtLine(lineObj); if (context == "local") yOff += paddingTop(cm.display); else yOff -= cm.display.viewOffset; if (context == "page" || context == "window") { var lOff = cm.display.lineSpace.getBoundingClientRect(); yOff += lOff.top + (context == "window" ? 0 : pageScrollY()); var xOff = lOff.left + (context == "window" ? 0 : pageScrollX()); rect.left += xOff; rect.right += xOff; } rect.top += yOff; rect.bottom += yOff; return rect; } // Coverts a box from "div" coords to another coordinate system. // Context may be "window", "page", "div", or "local"/null. function fromCoordSystem(cm, coords, context) { if (context == "div") return coords; var left = coords.left, top = coords.top; // First move into "page" coordinate system if (context == "page") { left -= pageScrollX(); top -= pageScrollY(); } else if (context == "local" || !context) { var localBox = cm.display.sizer.getBoundingClientRect(); left += localBox.left; top += localBox.top; } var lineSpaceBox = cm.display.lineSpace.getBoundingClientRect(); return {left: left - lineSpaceBox.left, top: top - lineSpaceBox.top}; } function charCoords(cm, pos, context, lineObj, bias) { if (!lineObj) lineObj = getLine(cm.doc, pos.line); return intoCoordSystem(cm, lineObj, measureChar(cm, lineObj, pos.ch, bias), context); } // Returns a box for a given cursor position, which may have an // 'other' property containing the position of the secondary cursor // on a bidi boundary. function cursorCoords(cm, pos, context, lineObj, preparedMeasure, varHeight) { lineObj = lineObj || getLine(cm.doc, pos.line); if (!preparedMeasure) preparedMeasure = prepareMeasureForLine(cm, lineObj); function get(ch, right) { var m = measureCharPrepared(cm, preparedMeasure, ch, right ? "right" : "left", varHeight); if (right) m.left = m.right; else m.right = m.left; return intoCoordSystem(cm, lineObj, m, context); } function getBidi(ch, partPos) { var part = order[partPos], right = part.level % 2; if (ch == bidiLeft(part) && partPos && part.level < order[partPos - 1].level) { part = order[--partPos]; ch = bidiRight(part) - (part.level % 2 ? 0 : 1); right = true; } else if (ch == bidiRight(part) && partPos < order.length - 1 && part.level < order[partPos + 1].level) { part = order[++partPos]; ch = bidiLeft(part) - part.level % 2; right = false; } if (right && ch == part.to && ch > part.from) return get(ch - 1); return get(ch, right); } var order = getOrder(lineObj), ch = pos.ch; if (!order) return get(ch); var partPos = getBidiPartAt(order, ch); var val = getBidi(ch, partPos); if (bidiOther != null) val.other = getBidi(ch, bidiOther); return val; } // Used to cheaply estimate the coordinates for a position. Used for // intermediate scroll updates. function estimateCoords(cm, pos) { var left = 0, pos = clipPos(cm.doc, pos); if (!cm.options.lineWrapping) left = charWidth(cm.display) * pos.ch; var lineObj = getLine(cm.doc, pos.line); var top = heightAtLine(lineObj) + paddingTop(cm.display); return {left: left, right: left, top: top, bottom: top + lineObj.height}; } // Positions returned by coordsChar contain some extra information. // xRel is the relative x position of the input coordinates compared // to the found position (so xRel > 0 means the coordinates are to // the right of the character position, for example). When outside // is true, that means the coordinates lie outside the line's // vertical range. function PosWithInfo(line, ch, outside, xRel) { var pos = Pos(line, ch); pos.xRel = xRel; if (outside) pos.outside = true; return pos; } // Compute the character position closest to the given coordinates. // Input must be lineSpace-local ("div" coordinate system). function coordsChar(cm, x, y) { var doc = cm.doc; y += cm.display.viewOffset; if (y < 0) return PosWithInfo(doc.first, 0, true, -1); var lineN = lineAtHeight(doc, y), last = doc.first + doc.size - 1; if (lineN > last) return PosWithInfo(doc.first + doc.size - 1, getLine(doc, last).text.length, true, 1); if (x < 0) x = 0; var lineObj = getLine(doc, lineN); for (;;) { var found = coordsCharInner(cm, lineObj, lineN, x, y); var merged = collapsedSpanAtEnd(lineObj); var mergedPos = merged && merged.find(0, true); if (merged && (found.ch > mergedPos.from.ch || found.ch == mergedPos.from.ch && found.xRel > 0)) lineN = lineNo(lineObj = mergedPos.to.line); else return found; } } function coordsCharInner(cm, lineObj, lineNo, x, y) { var innerOff = y - heightAtLine(lineObj); var wrongLine = false, adjust = 2 * cm.display.wrapper.clientWidth; var preparedMeasure = prepareMeasureForLine(cm, lineObj); function getX(ch) { var sp = cursorCoords(cm, Pos(lineNo, ch), "line", lineObj, preparedMeasure); wrongLine = true; if (innerOff > sp.bottom) return sp.left - adjust; else if (innerOff < sp.top) return sp.left + adjust; else wrongLine = false; return sp.left; } var bidi = getOrder(lineObj), dist = lineObj.text.length; var from = lineLeft(lineObj), to = lineRight(lineObj); var fromX = getX(from), fromOutside = wrongLine, toX = getX(to), toOutside = wrongLine; if (x > toX) return PosWithInfo(lineNo, to, toOutside, 1); // Do a binary search between these bounds. for (;;) { if (bidi ? to == from || to == moveVisually(lineObj, from, 1) : to - from <= 1) { var ch = x < fromX || x - fromX <= toX - x ? from : to; var outside = ch == from ? fromOutside : toOutside var xDiff = x - (ch == from ? fromX : toX); // This is a kludge to handle the case where the coordinates // are after a line-wrapped line. We should replace it with a // more general handling of cursor positions around line // breaks. (Issue #4078) if (toOutside && !bidi && !/\s/.test(lineObj.text.charAt(ch)) && xDiff > 0 && ch < lineObj.text.length && preparedMeasure.view.measure.heights.length > 1) { var charSize = measureCharPrepared(cm, preparedMeasure, ch, "right"); if (innerOff <= charSize.bottom && innerOff >= charSize.top && Math.abs(x - charSize.right) < xDiff) { outside = false ch++ xDiff = x - charSize.right } } while (isExtendingChar(lineObj.text.charAt(ch))) ++ch; var pos = PosWithInfo(lineNo, ch, outside, xDiff < -1 ? -1 : xDiff > 1 ? 1 : 0); return pos; } var step = Math.ceil(dist / 2), middle = from + step; if (bidi) { middle = from; for (var i = 0; i < step; ++i) middle = moveVisually(lineObj, middle, 1); } var middleX = getX(middle); if (middleX > x) {to = middle; toX = middleX; if (toOutside = wrongLine) toX += 1000; dist = step;} else {from = middle; fromX = middleX; fromOutside = wrongLine; dist -= step;} } } var measureText; // Compute the default text height. function textHeight(display) { if (display.cachedTextHeight != null) return display.cachedTextHeight; if (measureText == null) { measureText = elt("pre"); // Measure a bunch of lines, for browsers that compute // fractional heights. for (var i = 0; i < 49; ++i) { measureText.appendChild(document.createTextNode("x")); measureText.appendChild(elt("br")); } measureText.appendChild(document.createTextNode("x")); } removeChildrenAndAdd(display.measure, measureText); var height = measureText.offsetHeight / 50; if (height > 3) display.cachedTextHeight = height; removeChildren(display.measure); return height || 1; } // Compute the default character width. function charWidth(display) { if (display.cachedCharWidth != null) return display.cachedCharWidth; var anchor = elt("span", "xxxxxxxxxx"); var pre = elt("pre", [anchor]); removeChildrenAndAdd(display.measure, pre); var rect = anchor.getBoundingClientRect(), width = (rect.right - rect.left) / 10; if (width > 2) display.cachedCharWidth = width; return width || 10; } // OPERATIONS // Operations are used to wrap a series of changes to the editor // state in such a way that each change won't have to update the // cursor and display (which would be awkward, slow, and // error-prone). Instead, display updates are batched and then all // combined and executed at once. var operationGroup = null; var nextOpId = 0; // Start a new operation. function startOperation(cm) { cm.curOp = { cm: cm, viewChanged: false, // Flag that indicates that lines might need to be redrawn startHeight: cm.doc.height, // Used to detect need to update scrollbar forceUpdate: false, // Used to force a redraw updateInput: null, // Whether to reset the input textarea typing: false, // Whether this reset should be careful to leave existing text (for compositing) changeObjs: null, // Accumulated changes, for firing change events cursorActivityHandlers: null, // Set of handlers to fire cursorActivity on cursorActivityCalled: 0, // Tracks which cursorActivity handlers have been called already selectionChanged: false, // Whether the selection needs to be redrawn updateMaxLine: false, // Set when the widest line needs to be determined anew scrollLeft: null, scrollTop: null, // Intermediate scroll position, not pushed to DOM yet scrollToPos: null, // Used to scroll to a specific position focus: false, id: ++nextOpId // Unique ID }; if (operationGroup) { operationGroup.ops.push(cm.curOp); } else { cm.curOp.ownsGroup = operationGroup = { ops: [cm.curOp], delayedCallbacks: [] }; } } function fireCallbacksForOps(group) { // Calls delayed callbacks and cursorActivity handlers until no // new ones appear var callbacks = group.delayedCallbacks, i = 0; do { for (; i < callbacks.length; i++) callbacks[i].call(null); for (var j = 0; j < group.ops.length; j++) { var op = group.ops[j]; if (op.cursorActivityHandlers) while (op.cursorActivityCalled < op.cursorActivityHandlers.length) op.cursorActivityHandlers[op.cursorActivityCalled++].call(null, op.cm); } } while (i < callbacks.length); } // Finish an operation, updating the display and signalling delayed events function endOperation(cm) { var op = cm.curOp, group = op.ownsGroup; if (!group) return; try { fireCallbacksForOps(group); } finally { operationGroup = null; for (var i = 0; i < group.ops.length; i++) group.ops[i].cm.curOp = null; endOperations(group); } } // The DOM updates done when an operation finishes are batched so // that the minimum number of relayouts are required. function endOperations(group) { var ops = group.ops; for (var i = 0; i < ops.length; i++) // Read DOM endOperation_R1(ops[i]); for (var i = 0; i < ops.length; i++) // Write DOM (maybe) endOperation_W1(ops[i]); for (var i = 0; i < ops.length; i++) // Read DOM endOperation_R2(ops[i]); for (var i = 0; i < ops.length; i++) // Write DOM (maybe) endOperation_W2(ops[i]); for (var i = 0; i < ops.length; i++) // Read DOM endOperation_finish(ops[i]); } function endOperation_R1(op) { var cm = op.cm, display = cm.display; maybeClipScrollbars(cm); if (op.updateMaxLine) findMaxLine(cm); op.mustUpdate = op.viewChanged || op.forceUpdate || op.scrollTop != null || op.scrollToPos && (op.scrollToPos.from.line < display.viewFrom || op.scrollToPos.to.line >= display.viewTo) || display.maxLineChanged && cm.options.lineWrapping; op.update = op.mustUpdate && new DisplayUpdate(cm, op.mustUpdate && {top: op.scrollTop, ensure: op.scrollToPos}, op.forceUpdate); } function endOperation_W1(op) { op.updatedDisplay = op.mustUpdate && updateDisplayIfNeeded(op.cm, op.update); } function endOperation_R2(op) { var cm = op.cm, display = cm.display; if (op.updatedDisplay) updateHeightsInViewport(cm); op.barMeasure = measureForScrollbars(cm); // If the max line changed since it was last measured, measure it, // and ensure the document's width matches it. // updateDisplay_W2 will use these properties to do the actual resizing if (display.maxLineChanged && !cm.options.lineWrapping) { op.adjustWidthTo = measureChar(cm, display.maxLine, display.maxLine.text.length).left + 3; cm.display.sizerWidth = op.adjustWidthTo; op.barMeasure.scrollWidth = Math.max(display.scroller.clientWidth, display.sizer.offsetLeft + op.adjustWidthTo + scrollGap(cm) + cm.display.barWidth); op.maxScrollLeft = Math.max(0, display.sizer.offsetLeft + op.adjustWidthTo - displayWidth(cm)); } if (op.updatedDisplay || op.selectionChanged) op.preparedSelection = display.input.prepareSelection(op.focus); } function endOperation_W2(op) { var cm = op.cm; if (op.adjustWidthTo != null) { cm.display.sizer.style.minWidth = op.adjustWidthTo + "px"; if (op.maxScrollLeft < cm.doc.scrollLeft) setScrollLeft(cm, Math.min(cm.display.scroller.scrollLeft, op.maxScrollLeft), true); cm.display.maxLineChanged = false; } var takeFocus = op.focus && op.focus == activeElt() && (!document.hasFocus || document.hasFocus()) if (op.preparedSelection) cm.display.input.showSelection(op.preparedSelection, takeFocus); if (op.updatedDisplay || op.startHeight != cm.doc.height) updateScrollbars(cm, op.barMeasure); if (op.updatedDisplay) setDocumentHeight(cm, op.barMeasure); if (op.selectionChanged) restartBlink(cm); if (cm.state.focused && op.updateInput) cm.display.input.reset(op.typing); if (takeFocus) ensureFocus(op.cm); } function endOperation_finish(op) { var cm = op.cm, display = cm.display, doc = cm.doc; if (op.updatedDisplay) postUpdateDisplay(cm, op.update); // Abort mouse wheel delta measurement, when scrolling explicitly if (display.wheelStartX != null && (op.scrollTop != null || op.scrollLeft != null || op.scrollToPos)) display.wheelStartX = display.wheelStartY = null; // Propagate the scroll position to the actual DOM scroller if (op.scrollTop != null && (display.scroller.scrollTop != op.scrollTop || op.forceScroll)) { doc.scrollTop = Math.max(0, Math.min(display.scroller.scrollHeight - display.scroller.clientHeight, op.scrollTop)); display.scrollbars.setScrollTop(doc.scrollTop); display.scroller.scrollTop = doc.scrollTop; } if (op.scrollLeft != null && (display.scroller.scrollLeft != op.scrollLeft || op.forceScroll)) { doc.scrollLeft = Math.max(0, Math.min(display.scroller.scrollWidth - display.scroller.clientWidth, op.scrollLeft)); display.scrollbars.setScrollLeft(doc.scrollLeft); display.scroller.scrollLeft = doc.scrollLeft; alignHorizontally(cm); } // If we need to scroll a specific position into view, do so. if (op.scrollToPos) { var coords = scrollPosIntoView(cm, clipPos(doc, op.scrollToPos.from), clipPos(doc, op.scrollToPos.to), op.scrollToPos.margin); if (op.scrollToPos.isCursor && cm.state.focused) maybeScrollWindow(cm, coords); } // Fire events for markers that are hidden/unidden by editing or // undoing var hidden = op.maybeHiddenMarkers, unhidden = op.maybeUnhiddenMarkers; if (hidden) for (var i = 0; i < hidden.length; ++i) if (!hidden[i].lines.length) signal(hidden[i], "hide"); if (unhidden) for (var i = 0; i < unhidden.length; ++i) if (unhidden[i].lines.length) signal(unhidden[i], "unhide"); if (display.wrapper.offsetHeight) doc.scrollTop = cm.display.scroller.scrollTop; // Fire change events, and delayed event handlers if (op.changeObjs) signal(cm, "changes", cm, op.changeObjs); if (op.update) op.update.finish(); } // Run the given function in an operation function runInOp(cm, f) { if (cm.curOp) return f(); startOperation(cm); try { return f(); } finally { endOperation(cm); } } // Wraps a function in an operation. Returns the wrapped function. function operation(cm, f) { return function() { if (cm.curOp) return f.apply(cm, arguments); startOperation(cm); try { return f.apply(cm, arguments); } finally { endOperation(cm); } }; } // Used to add methods to editor and doc instances, wrapping them in // operations. function methodOp(f) { return function() { if (this.curOp) return f.apply(this, arguments); startOperation(this); try { return f.apply(this, arguments); } finally { endOperation(this); } }; } function docMethodOp(f) { return function() { var cm = this.cm; if (!cm || cm.curOp) return f.apply(this, arguments); startOperation(cm); try { return f.apply(this, arguments); } finally { endOperation(cm); } }; } // VIEW TRACKING // These objects are used to represent the visible (currently drawn) // part of the document. A LineView may correspond to multiple // logical lines, if those are connected by collapsed ranges. function LineView(doc, line, lineN) { // The starting line this.line = line; // Continuing lines, if any this.rest = visualLineContinued(line); // Number of logical lines in this visual line this.size = this.rest ? lineNo(lst(this.rest)) - lineN + 1 : 1; this.node = this.text = null; this.hidden = lineIsHidden(doc, line); } // Create a range of LineView objects for the given lines. function buildViewArray(cm, from, to) { var array = [], nextPos; for (var pos = from; pos < to; pos = nextPos) { var view = new LineView(cm.doc, getLine(cm.doc, pos), pos); nextPos = pos + view.size; array.push(view); } return array; } // Updates the display.view data structure for a given change to the // document. From and to are in pre-change coordinates. Lendiff is // the amount of lines added or subtracted by the change. This is // used for changes that span multiple lines, or change the way // lines are divided into visual lines. regLineChange (below) // registers single-line changes. function regChange(cm, from, to, lendiff) { if (from == null) from = cm.doc.first; if (to == null) to = cm.doc.first + cm.doc.size; if (!lendiff) lendiff = 0; var display = cm.display; if (lendiff && to < display.viewTo && (display.updateLineNumbers == null || display.updateLineNumbers > from)) display.updateLineNumbers = from; cm.curOp.viewChanged = true; if (from >= display.viewTo) { // Change after if (sawCollapsedSpans && visualLineNo(cm.doc, from) < display.viewTo) resetView(cm); } else if (to <= display.viewFrom) { // Change before if (sawCollapsedSpans && visualLineEndNo(cm.doc, to + lendiff) > display.viewFrom) { resetView(cm); } else { display.viewFrom += lendiff; display.viewTo += lendiff; } } else if (from <= display.viewFrom && to >= display.viewTo) { // Full overlap resetView(cm); } else if (from <= display.viewFrom) { // Top overlap var cut = viewCuttingPoint(cm, to, to + lendiff, 1); if (cut) { display.view = display.view.slice(cut.index); display.viewFrom = cut.lineN; display.viewTo += lendiff; } else { resetView(cm); } } else if (to >= display.viewTo) { // Bottom overlap var cut = viewCuttingPoint(cm, from, from, -1); if (cut) { display.view = display.view.slice(0, cut.index); display.viewTo = cut.lineN; } else { resetView(cm); } } else { // Gap in the middle var cutTop = viewCuttingPoint(cm, from, from, -1); var cutBot = viewCuttingPoint(cm, to, to + lendiff, 1); if (cutTop && cutBot) { display.view = display.view.slice(0, cutTop.index) .concat(buildViewArray(cm, cutTop.lineN, cutBot.lineN)) .concat(display.view.slice(cutBot.index)); display.viewTo += lendiff; } else { resetView(cm); } } var ext = display.externalMeasured; if (ext) { if (to < ext.lineN) ext.lineN += lendiff; else if (from < ext.lineN + ext.size) display.externalMeasured = null; } } // Register a change to a single line. Type must be one of "text", // "gutter", "class", "widget" function regLineChange(cm, line, type) { cm.curOp.viewChanged = true; var display = cm.display, ext = cm.display.externalMeasured; if (ext && line >= ext.lineN && line < ext.lineN + ext.size) display.externalMeasured = null; if (line < display.viewFrom || line >= display.viewTo) return; var lineView = display.view[findViewIndex(cm, line)]; if (lineView.node == null) return; var arr = lineView.changes || (lineView.changes = []); if (indexOf(arr, type) == -1) arr.push(type); } // Clear the view. function resetView(cm) { cm.display.viewFrom = cm.display.viewTo = cm.doc.first; cm.display.view = []; cm.display.viewOffset = 0; } // Find the view element corresponding to a given line. Return null // when the line isn't visible. function findViewIndex(cm, n) { if (n >= cm.display.viewTo) return null; n -= cm.display.viewFrom; if (n < 0) return null; var view = cm.display.view; for (var i = 0; i < view.length; i++) { n -= view[i].size; if (n < 0) return i; } } function viewCuttingPoint(cm, oldN, newN, dir) { var index = findViewIndex(cm, oldN), diff, view = cm.display.view; if (!sawCollapsedSpans || newN == cm.doc.first + cm.doc.size) return {index: index, lineN: newN}; for (var i = 0, n = cm.display.viewFrom; i < index; i++) n += view[i].size; if (n != oldN) { if (dir > 0) { if (index == view.length - 1) return null; diff = (n + view[index].size) - oldN; index++; } else { diff = n - oldN; } oldN += diff; newN += diff; } while (visualLineNo(cm.doc, newN) != newN) { if (index == (dir < 0 ? 0 : view.length - 1)) return null; newN += dir * view[index - (dir < 0 ? 1 : 0)].size; index += dir; } return {index: index, lineN: newN}; } // Force the view to cover a given range, adding empty view element // or clipping off existing ones as needed. function adjustView(cm, from, to) { var display = cm.display, view = display.view; if (view.length == 0 || from >= display.viewTo || to <= display.viewFrom) { display.view = buildViewArray(cm, from, to); display.viewFrom = from; } else { if (display.viewFrom > from) display.view = buildViewArray(cm, from, display.viewFrom).concat(display.view); else if (display.viewFrom < from) display.view = display.view.slice(findViewIndex(cm, from)); display.viewFrom = from; if (display.viewTo < to) display.view = display.view.concat(buildViewArray(cm, display.viewTo, to)); else if (display.viewTo > to) display.view = display.view.slice(0, findViewIndex(cm, to)); } display.viewTo = to; } // Count the number of lines in the view whose DOM representation is // out of date (or nonexistent). function countDirtyView(cm) { var view = cm.display.view, dirty = 0; for (var i = 0; i < view.length; i++) { var lineView = view[i]; if (!lineView.hidden && (!lineView.node || lineView.changes)) ++dirty; } return dirty; } // EVENT HANDLERS // Attach the necessary event handlers when initializing the editor function registerEventHandlers(cm) { var d = cm.display; on(d.scroller, "mousedown", operation(cm, onMouseDown)); // Older IE's will not fire a second mousedown for a double click if (ie && ie_version < 11) on(d.scroller, "dblclick", operation(cm, function(e) { if (signalDOMEvent(cm, e)) return; var pos = posFromMouse(cm, e); if (!pos || clickInGutter(cm, e) || eventInWidget(cm.display, e)) return; e_preventDefault(e); var word = cm.findWordAt(pos); extendSelection(cm.doc, word.anchor, word.head); })); else on(d.scroller, "dblclick", function(e) { signalDOMEvent(cm, e) || e_preventDefault(e); }); // Some browsers fire contextmenu *after* opening the menu, at // which point we can't mess with it anymore. Context menu is // handled in onMouseDown for these browsers. if (!captureRightClick) on(d.scroller, "contextmenu", function(e) {onContextMenu(cm, e);}); // Used to suppress mouse event handling when a touch happens var touchFinished, prevTouch = {end: 0}; function finishTouch() { if (d.activeTouch) { touchFinished = setTimeout(function() {d.activeTouch = null;}, 1000); prevTouch = d.activeTouch; prevTouch.end = +new Date; } }; function isMouseLikeTouchEvent(e) { if (e.touches.length != 1) return false; var touch = e.touches[0]; return touch.radiusX <= 1 && touch.radiusY <= 1; } function farAway(touch, other) { if (other.left == null) return true; var dx = other.left - touch.left, dy = other.top - touch.top; return dx * dx + dy * dy > 20 * 20; } on(d.scroller, "touchstart", function(e) { if (!signalDOMEvent(cm, e) && !isMouseLikeTouchEvent(e)) { clearTimeout(touchFinished); var now = +new Date; d.activeTouch = {start: now, moved: false, prev: now - prevTouch.end <= 300 ? prevTouch : null}; if (e.touches.length == 1) { d.activeTouch.left = e.touches[0].pageX; d.activeTouch.top = e.touches[0].pageY; } } }); on(d.scroller, "touchmove", function() { if (d.activeTouch) d.activeTouch.moved = true; }); on(d.scroller, "touchend", function(e) { var touch = d.activeTouch; if (touch && !eventInWidget(d, e) && touch.left != null && !touch.moved && new Date - touch.start < 300) { var pos = cm.coordsChar(d.activeTouch, "page"), range; if (!touch.prev || farAway(touch, touch.prev)) // Single tap range = new Range(pos, pos); else if (!touch.prev.prev || farAway(touch, touch.prev.prev)) // Double tap range = cm.findWordAt(pos); else // Triple tap range = new Range(Pos(pos.line, 0), clipPos(cm.doc, Pos(pos.line + 1, 0))); cm.setSelection(range.anchor, range.head); cm.focus(); e_preventDefault(e); } finishTouch(); }); on(d.scroller, "touchcancel", finishTouch); // Sync scrolling between fake scrollbars and real scrollable // area, ensure viewport is updated when scrolling. on(d.scroller, "scroll", function() { if (d.scroller.clientHeight) { setScrollTop(cm, d.scroller.scrollTop); setScrollLeft(cm, d.scroller.scrollLeft, true); signal(cm, "scroll", cm); } }); // Listen to wheel events in order to try and update the viewport on time. on(d.scroller, "mousewheel", function(e){onScrollWheel(cm, e);}); on(d.scroller, "DOMMouseScroll", function(e){onScrollWheel(cm, e);}); // Prevent wrapper from ever scrolling on(d.wrapper, "scroll", function() { d.wrapper.scrollTop = d.wrapper.scrollLeft = 0; }); d.dragFunctions = { enter: function(e) {if (!signalDOMEvent(cm, e)) e_stop(e);}, over: function(e) {if (!signalDOMEvent(cm, e)) { onDragOver(cm, e); e_stop(e); }}, start: function(e){onDragStart(cm, e);}, drop: operation(cm, onDrop), leave: function(e) {if (!signalDOMEvent(cm, e)) { clearDragCursor(cm); }} }; var inp = d.input.getField(); on(inp, "keyup", function(e) { onKeyUp.call(cm, e); }); on(inp, "keydown", operation(cm, onKeyDown)); on(inp, "keypress", operation(cm, onKeyPress)); on(inp, "focus", bind(onFocus, cm)); on(inp, "blur", bind(onBlur, cm)); } function dragDropChanged(cm, value, old) { var wasOn = old && old != CodeMirror.Init; if (!value != !wasOn) { var funcs = cm.display.dragFunctions; var toggle = value ? on : off; toggle(cm.display.scroller, "dragstart", funcs.start); toggle(cm.display.scroller, "dragenter", funcs.enter); toggle(cm.display.scroller, "dragover", funcs.over); toggle(cm.display.scroller, "dragleave", funcs.leave); toggle(cm.display.scroller, "drop", funcs.drop); } } // Called when the window resizes function onResize(cm) { var d = cm.display; if (d.lastWrapHeight == d.wrapper.clientHeight && d.lastWrapWidth == d.wrapper.clientWidth) return; // Might be a text scaling operation, clear size caches. d.cachedCharWidth = d.cachedTextHeight = d.cachedPaddingH = null; d.scrollbarsClipped = false; cm.setSize(); } // MOUSE EVENTS // Return true when the given mouse event happened in a widget function eventInWidget(display, e) { for (var n = e_target(e); n != display.wrapper; n = n.parentNode) { if (!n || (n.nodeType == 1 && n.getAttribute("cm-ignore-events") == "true") || (n.parentNode == display.sizer && n != display.mover)) return true; } } // Given a mouse event, find the corresponding position. If liberal // is false, it checks whether a gutter or scrollbar was clicked, // and returns null if it was. forRect is used by rectangular // selections, and tries to estimate a character position even for // coordinates beyond the right of the text. function posFromMouse(cm, e, liberal, forRect) { var display = cm.display; if (!liberal && e_target(e).getAttribute("cm-not-content") == "true") return null; var x, y, space = display.lineSpace.getBoundingClientRect(); // Fails unpredictably on IE[67] when mouse is dragged around quickly. try { x = e.clientX - space.left; y = e.clientY - space.top; } catch (e) { return null; } var coords = coordsChar(cm, x, y), line; if (forRect && coords.xRel == 1 && (line = getLine(cm.doc, coords.line).text).length == coords.ch) { var colDiff = countColumn(line, line.length, cm.options.tabSize) - line.length; coords = Pos(coords.line, Math.max(0, Math.round((x - paddingH(cm.display).left) / charWidth(cm.display)) - colDiff)); } return coords; } // A mouse down can be a single click, double click, triple click, // start of selection drag, start of text drag, new cursor // (ctrl-click), rectangle drag (alt-drag), or xwin // middle-click-paste. Or it might be a click on something we should // not interfere with, such as a scrollbar or widget. function onMouseDown(e) { var cm = this, display = cm.display; if (signalDOMEvent(cm, e) || display.activeTouch && display.input.supportsTouch()) return; display.shift = e.shiftKey; if (eventInWidget(display, e)) { if (!webkit) { // Briefly turn off draggability, to allow widgets to do // normal dragging things. display.scroller.draggable = false; setTimeout(function(){display.scroller.draggable = true;}, 100); } return; } if (clickInGutter(cm, e)) return; var start = posFromMouse(cm, e); window.focus(); switch (e_button(e)) { case 1: // #3261: make sure, that we're not starting a second selection if (cm.state.selectingText) cm.state.selectingText(e); else if (start) leftButtonDown(cm, e, start); else if (e_target(e) == display.scroller) e_preventDefault(e); break; case 2: if (webkit) cm.state.lastMiddleDown = +new Date; if (start) extendSelection(cm.doc, start); setTimeout(function() {display.input.focus();}, 20); e_preventDefault(e); break; case 3: if (captureRightClick) onContextMenu(cm, e); else delayBlurEvent(cm); break; } } var lastClick, lastDoubleClick; function leftButtonDown(cm, e, start) { if (ie) setTimeout(bind(ensureFocus, cm), 0); else cm.curOp.focus = activeElt(); var now = +new Date, type; if (lastDoubleClick && lastDoubleClick.time > now - 400 && cmp(lastDoubleClick.pos, start) == 0) { type = "triple"; } else if (lastClick && lastClick.time > now - 400 && cmp(lastClick.pos, start) == 0) { type = "double"; lastDoubleClick = {time: now, pos: start}; } else { type = "single"; lastClick = {time: now, pos: start}; } var sel = cm.doc.sel, modifier = mac ? e.metaKey : e.ctrlKey, contained; if (cm.options.dragDrop && dragAndDrop && !cm.isReadOnly() && type == "single" && (contained = sel.contains(start)) > -1 && (cmp((contained = sel.ranges[contained]).from(), start) < 0 || start.xRel > 0) && (cmp(contained.to(), start) > 0 || start.xRel < 0)) leftButtonStartDrag(cm, e, start, modifier); else leftButtonSelect(cm, e, start, type, modifier); } // Start a text drag. When it ends, see if any dragging actually // happen, and treat as a click if it didn't. function leftButtonStartDrag(cm, e, start, modifier) { var display = cm.display, startTime = +new Date; var dragEnd = operation(cm, function(e2) { if (webkit) display.scroller.draggable = false; cm.state.draggingText = false; off(document, "mouseup", dragEnd); off(display.scroller, "drop", dragEnd); if (Math.abs(e.clientX - e2.clientX) + Math.abs(e.clientY - e2.clientY) < 10) { e_preventDefault(e2); if (!modifier && +new Date - 200 < startTime) extendSelection(cm.doc, start); // Work around unexplainable focus problem in IE9 (#2127) and Chrome (#3081) if (webkit || ie && ie_version == 9) setTimeout(function() {document.body.focus(); display.input.focus();}, 20); else display.input.focus(); } }); // Let the drag handler handle this. if (webkit) display.scroller.draggable = true; cm.state.draggingText = dragEnd; dragEnd.copy = mac ? e.altKey : e.ctrlKey // IE's approach to draggable if (display.scroller.dragDrop) display.scroller.dragDrop(); on(document, "mouseup", dragEnd); on(display.scroller, "drop", dragEnd); } // Normal selection, as opposed to text dragging. function leftButtonSelect(cm, e, start, type, addNew) { var display = cm.display, doc = cm.doc; e_preventDefault(e); var ourRange, ourIndex, startSel = doc.sel, ranges = startSel.ranges; if (addNew && !e.shiftKey) { ourIndex = doc.sel.contains(start); if (ourIndex > -1) ourRange = ranges[ourIndex]; else ourRange = new Range(start, start); } else { ourRange = doc.sel.primary(); ourIndex = doc.sel.primIndex; } if (chromeOS ? e.shiftKey && e.metaKey : e.altKey) { type = "rect"; if (!addNew) ourRange = new Range(start, start); start = posFromMouse(cm, e, true, true); ourIndex = -1; } else if (type == "double") { var word = cm.findWordAt(start); if (cm.display.shift || doc.extend) ourRange = extendRange(doc, ourRange, word.anchor, word.head); else ourRange = word; } else if (type == "triple") { var line = new Range(Pos(start.line, 0), clipPos(doc, Pos(start.line + 1, 0))); if (cm.display.shift || doc.extend) ourRange = extendRange(doc, ourRange, line.anchor, line.head); else ourRange = line; } else { ourRange = extendRange(doc, ourRange, start); } if (!addNew) { ourIndex = 0; setSelection(doc, new Selection([ourRange], 0), sel_mouse); startSel = doc.sel; } else if (ourIndex == -1) { ourIndex = ranges.length; setSelection(doc, normalizeSelection(ranges.concat([ourRange]), ourIndex), {scroll: false, origin: "*mouse"}); } else if (ranges.length > 1 && ranges[ourIndex].empty() && type == "single" && !e.shiftKey) { setSelection(doc, normalizeSelection(ranges.slice(0, ourIndex).concat(ranges.slice(ourIndex + 1)), 0), {scroll: false, origin: "*mouse"}); startSel = doc.sel; } else { replaceOneSelection(doc, ourIndex, ourRange, sel_mouse); } var lastPos = start; function extendTo(pos) { if (cmp(lastPos, pos) == 0) return; lastPos = pos; if (type == "rect") { var ranges = [], tabSize = cm.options.tabSize; var startCol = countColumn(getLine(doc, start.line).text, start.ch, tabSize); var posCol = countColumn(getLine(doc, pos.line).text, pos.ch, tabSize); var left = Math.min(startCol, posCol), right = Math.max(startCol, posCol); for (var line = Math.min(start.line, pos.line), end = Math.min(cm.lastLine(), Math.max(start.line, pos.line)); line <= end; line++) { var text = getLine(doc, line).text, leftPos = findColumn(text, left, tabSize); if (left == right) ranges.push(new Range(Pos(line, leftPos), Pos(line, leftPos))); else if (text.length > leftPos) ranges.push(new Range(Pos(line, leftPos), Pos(line, findColumn(text, right, tabSize)))); } if (!ranges.length) ranges.push(new Range(start, start)); setSelection(doc, normalizeSelection(startSel.ranges.slice(0, ourIndex).concat(ranges), ourIndex), {origin: "*mouse", scroll: false}); cm.scrollIntoView(pos); } else { var oldRange = ourRange; var anchor = oldRange.anchor, head = pos; if (type != "single") { if (type == "double") var range = cm.findWordAt(pos); else var range = new Range(Pos(pos.line, 0), clipPos(doc, Pos(pos.line + 1, 0))); if (cmp(range.anchor, anchor) > 0) { head = range.head; anchor = minPos(oldRange.from(), range.anchor); } else { head = range.anchor; anchor = maxPos(oldRange.to(), range.head); } } var ranges = startSel.ranges.slice(0); ranges[ourIndex] = new Range(clipPos(doc, anchor), head); setSelection(doc, normalizeSelection(ranges, ourIndex), sel_mouse); } } var editorSize = display.wrapper.getBoundingClientRect(); // Used to ensure timeout re-tries don't fire when another extend // happened in the meantime (clearTimeout isn't reliable -- at // least on Chrome, the timeouts still happen even when cleared, // if the clear happens after their scheduled firing time). var counter = 0; function extend(e) { var curCount = ++counter; var cur = posFromMouse(cm, e, true, type == "rect"); if (!cur) return; if (cmp(cur, lastPos) != 0) { cm.curOp.focus = activeElt(); extendTo(cur); var visible = visibleLines(display, doc); if (cur.line >= visible.to || cur.line < visible.from) setTimeout(operation(cm, function(){if (counter == curCount) extend(e);}), 150); } else { var outside = e.clientY < editorSize.top ? -20 : e.clientY > editorSize.bottom ? 20 : 0; if (outside) setTimeout(operation(cm, function() { if (counter != curCount) return; display.scroller.scrollTop += outside; extend(e); }), 50); } } function done(e) { cm.state.selectingText = false; counter = Infinity; e_preventDefault(e); display.input.focus(); off(document, "mousemove", move); off(document, "mouseup", up); doc.history.lastSelOrigin = null; } var move = operation(cm, function(e) { if (!e_button(e)) done(e); else extend(e); }); var up = operation(cm, done); cm.state.selectingText = up; on(document, "mousemove", move); on(document, "mouseup", up); } // Determines whether an event happened in the gutter, and fires the // handlers for the corresponding event. function gutterEvent(cm, e, type, prevent) { try { var mX = e.clientX, mY = e.clientY; } catch(e) { return false; } if (mX >= Math.floor(cm.display.gutters.getBoundingClientRect().right)) return false; if (prevent) e_preventDefault(e); var display = cm.display; var lineBox = display.lineDiv.getBoundingClientRect(); if (mY > lineBox.bottom || !hasHandler(cm, type)) return e_defaultPrevented(e); mY -= lineBox.top - display.viewOffset; for (var i = 0; i < cm.options.gutters.length; ++i) { var g = display.gutters.childNodes[i]; if (g && g.getBoundingClientRect().right >= mX) { var line = lineAtHeight(cm.doc, mY); var gutter = cm.options.gutters[i]; signal(cm, type, cm, line, gutter, e); return e_defaultPrevented(e); } } } function clickInGutter(cm, e) { return gutterEvent(cm, e, "gutterClick", true); } // Kludge to work around strange IE behavior where it'll sometimes // re-fire a series of drag-related events right after the drop (#1551) var lastDrop = 0; function onDrop(e) { var cm = this; clearDragCursor(cm); if (signalDOMEvent(cm, e) || eventInWidget(cm.display, e)) return; e_preventDefault(e); if (ie) lastDrop = +new Date; var pos = posFromMouse(cm, e, true), files = e.dataTransfer.files; if (!pos || cm.isReadOnly()) return; // Might be a file drop, in which case we simply extract the text // and insert it. if (files && files.length && window.FileReader && window.File) { var n = files.length, text = Array(n), read = 0; var loadFile = function(file, i) { if (cm.options.allowDropFileTypes && indexOf(cm.options.allowDropFileTypes, file.type) == -1) return; var reader = new FileReader; reader.onload = operation(cm, function() { var content = reader.result; if (/[\x00-\x08\x0e-\x1f]{2}/.test(content)) content = ""; text[i] = content; if (++read == n) { pos = clipPos(cm.doc, pos); var change = {from: pos, to: pos, text: cm.doc.splitLines(text.join(cm.doc.lineSeparator())), origin: "paste"}; makeChange(cm.doc, change); setSelectionReplaceHistory(cm.doc, simpleSelection(pos, changeEnd(change))); } }); reader.readAsText(file); }; for (var i = 0; i < n; ++i) loadFile(files[i], i); } else { // Normal drop // Don't do a replace if the drop happened inside of the selected text. if (cm.state.draggingText && cm.doc.sel.contains(pos) > -1) { cm.state.draggingText(e); // Ensure the editor is re-focused setTimeout(function() {cm.display.input.focus();}, 20); return; } try { var text = e.dataTransfer.getData("Text"); if (text) { if (cm.state.draggingText && !cm.state.draggingText.copy) var selected = cm.listSelections(); setSelectionNoUndo(cm.doc, simpleSelection(pos, pos)); if (selected) for (var i = 0; i < selected.length; ++i) replaceRange(cm.doc, "", selected[i].anchor, selected[i].head, "drag"); cm.replaceSelection(text, "around", "paste"); cm.display.input.focus(); } } catch(e){} } } function onDragStart(cm, e) { if (ie && (!cm.state.draggingText || +new Date - lastDrop < 100)) { e_stop(e); return; } if (signalDOMEvent(cm, e) || eventInWidget(cm.display, e)) return; e.dataTransfer.setData("Text", cm.getSelection()); e.dataTransfer.effectAllowed = "copyMove" // Use dummy image instead of default browsers image. // Recent Safari (~6.0.2) have a tendency to segfault when this happens, so we don't do it there. if (e.dataTransfer.setDragImage && !safari) { var img = elt("img", null, null, "position: fixed; left: 0; top: 0;"); img.src = "data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw=="; if (presto) { img.width = img.height = 1; cm.display.wrapper.appendChild(img); // Force a relayout, or Opera won't use our image for some obscure reason img._top = img.offsetTop; } e.dataTransfer.setDragImage(img, 0, 0); if (presto) img.parentNode.removeChild(img); } } function onDragOver(cm, e) { var pos = posFromMouse(cm, e); if (!pos) return; var frag = document.createDocumentFragment(); drawSelectionCursor(cm, pos, frag); if (!cm.display.dragCursor) { cm.display.dragCursor = elt("div", null, "CodeMirror-cursors CodeMirror-dragcursors"); cm.display.lineSpace.insertBefore(cm.display.dragCursor, cm.display.cursorDiv); } removeChildrenAndAdd(cm.display.dragCursor, frag); } function clearDragCursor(cm) { if (cm.display.dragCursor) { cm.display.lineSpace.removeChild(cm.display.dragCursor); cm.display.dragCursor = null; } } // SCROLL EVENTS // Sync the scrollable area and scrollbars, ensure the viewport // covers the visible area. function setScrollTop(cm, val) { if (Math.abs(cm.doc.scrollTop - val) < 2) return; cm.doc.scrollTop = val; if (!gecko) updateDisplaySimple(cm, {top: val}); if (cm.display.scroller.scrollTop != val) cm.display.scroller.scrollTop = val; cm.display.scrollbars.setScrollTop(val); if (gecko) updateDisplaySimple(cm); startWorker(cm, 100); } // Sync scroller and scrollbar, ensure the gutter elements are // aligned. function setScrollLeft(cm, val, isScroller) { if (isScroller ? val == cm.doc.scrollLeft : Math.abs(cm.doc.scrollLeft - val) < 2) return; val = Math.min(val, cm.display.scroller.scrollWidth - cm.display.scroller.clientWidth); cm.doc.scrollLeft = val; alignHorizontally(cm); if (cm.display.scroller.scrollLeft != val) cm.display.scroller.scrollLeft = val; cm.display.scrollbars.setScrollLeft(val); } // Since the delta values reported on mouse wheel events are // unstandardized between browsers and even browser versions, and // generally horribly unpredictable, this code starts by measuring // the scroll effect that the first few mouse wheel events have, // and, from that, detects the way it can convert deltas to pixel // offsets afterwards. // // The reason we want to know the amount a wheel event will scroll // is that it gives us a chance to update the display before the // actual scrolling happens, reducing flickering. var wheelSamples = 0, wheelPixelsPerUnit = null; // Fill in a browser-detected starting value on browsers where we // know one. These don't have to be accurate -- the result of them // being wrong would just be a slight flicker on the first wheel // scroll (if it is large enough). if (ie) wheelPixelsPerUnit = -.53; else if (gecko) wheelPixelsPerUnit = 15; else if (chrome) wheelPixelsPerUnit = -.7; else if (safari) wheelPixelsPerUnit = -1/3; var wheelEventDelta = function(e) { var dx = e.wheelDeltaX, dy = e.wheelDeltaY; if (dx == null && e.detail && e.axis == e.HORIZONTAL_AXIS) dx = e.detail; if (dy == null && e.detail && e.axis == e.VERTICAL_AXIS) dy = e.detail; else if (dy == null) dy = e.wheelDelta; return {x: dx, y: dy}; }; CodeMirror.wheelEventPixels = function(e) { var delta = wheelEventDelta(e); delta.x *= wheelPixelsPerUnit; delta.y *= wheelPixelsPerUnit; return delta; }; function onScrollWheel(cm, e) { var delta = wheelEventDelta(e), dx = delta.x, dy = delta.y; var display = cm.display, scroll = display.scroller; // Quit if there's nothing to scroll here var canScrollX = scroll.scrollWidth > scroll.clientWidth; var canScrollY = scroll.scrollHeight > scroll.clientHeight; if (!(dx && canScrollX || dy && canScrollY)) return; // Webkit browsers on OS X abort momentum scrolls when the target // of the scroll event is removed from the scrollable element. // This hack (see related code in patchDisplay) makes sure the // element is kept around. if (dy && mac && webkit) { outer: for (var cur = e.target, view = display.view; cur != scroll; cur = cur.parentNode) { for (var i = 0; i < view.length; i++) { if (view[i].node == cur) { cm.display.currentWheelTarget = cur; break outer; } } } } // On some browsers, horizontal scrolling will cause redraws to // happen before the gutter has been realigned, causing it to // wriggle around in a most unseemly way. When we have an // estimated pixels/delta value, we just handle horizontal // scrolling entirely here. It'll be slightly off from native, but // better than glitching out. if (dx && !gecko && !presto && wheelPixelsPerUnit != null) { if (dy && canScrollY) setScrollTop(cm, Math.max(0, Math.min(scroll.scrollTop + dy * wheelPixelsPerUnit, scroll.scrollHeight - scroll.clientHeight))); setScrollLeft(cm, Math.max(0, Math.min(scroll.scrollLeft + dx * wheelPixelsPerUnit, scroll.scrollWidth - scroll.clientWidth))); // Only prevent default scrolling if vertical scrolling is // actually possible. Otherwise, it causes vertical scroll // jitter on OSX trackpads when deltaX is small and deltaY // is large (issue #3579) if (!dy || (dy && canScrollY)) e_preventDefault(e); display.wheelStartX = null; // Abort measurement, if in progress return; } // 'Project' the visible viewport to cover the area that is being // scrolled into view (if we know enough to estimate it). if (dy && wheelPixelsPerUnit != null) { var pixels = dy * wheelPixelsPerUnit; var top = cm.doc.scrollTop, bot = top + display.wrapper.clientHeight; if (pixels < 0) top = Math.max(0, top + pixels - 50); else bot = Math.min(cm.doc.height, bot + pixels + 50); updateDisplaySimple(cm, {top: top, bottom: bot}); } if (wheelSamples < 20) { if (display.wheelStartX == null) { display.wheelStartX = scroll.scrollLeft; display.wheelStartY = scroll.scrollTop; display.wheelDX = dx; display.wheelDY = dy; setTimeout(function() { if (display.wheelStartX == null) return; var movedX = scroll.scrollLeft - display.wheelStartX; var movedY = scroll.scrollTop - display.wheelStartY; var sample = (movedY && display.wheelDY && movedY / display.wheelDY) || (movedX && display.wheelDX && movedX / display.wheelDX); display.wheelStartX = display.wheelStartY = null; if (!sample) return; wheelPixelsPerUnit = (wheelPixelsPerUnit * wheelSamples + sample) / (wheelSamples + 1); ++wheelSamples; }, 200); } else { display.wheelDX += dx; display.wheelDY += dy; } } } // KEY EVENTS // Run a handler that was bound to a key. function doHandleBinding(cm, bound, dropShift) { if (typeof bound == "string") { bound = commands[bound]; if (!bound) return false; } // Ensure previous input has been read, so that the handler sees a // consistent view of the document cm.display.input.ensurePolled(); var prevShift = cm.display.shift, done = false; try { if (cm.isReadOnly()) cm.state.suppressEdits = true; if (dropShift) cm.display.shift = false; done = bound(cm) != Pass; } finally { cm.display.shift = prevShift; cm.state.suppressEdits = false; } return done; } function lookupKeyForEditor(cm, name, handle) { for (var i = 0; i < cm.state.keyMaps.length; i++) { var result = lookupKey(name, cm.state.keyMaps[i], handle, cm); if (result) return result; } return (cm.options.extraKeys && lookupKey(name, cm.options.extraKeys, handle, cm)) || lookupKey(name, cm.options.keyMap, handle, cm); } var stopSeq = new Delayed; function dispatchKey(cm, name, e, handle) { var seq = cm.state.keySeq; if (seq) { if (isModifierKey(name)) return "handled"; stopSeq.set(50, function() { if (cm.state.keySeq == seq) { cm.state.keySeq = null; cm.display.input.reset(); } }); name = seq + " " + name; } var result = lookupKeyForEditor(cm, name, handle); if (result == "multi") cm.state.keySeq = name; if (result == "handled") signalLater(cm, "keyHandled", cm, name, e); if (result == "handled" || result == "multi") { e_preventDefault(e); restartBlink(cm); } if (seq && !result && /\'$/.test(name)) { e_preventDefault(e); return true; } return !!result; } // Handle a key from the keydown event. function handleKeyBinding(cm, e) { var name = keyName(e, true); if (!name) return false; if (e.shiftKey && !cm.state.keySeq) { // First try to resolve full name (including 'Shift-'). Failing // that, see if there is a cursor-motion command (starting with // 'go') bound to the keyname without 'Shift-'. return dispatchKey(cm, "Shift-" + name, e, function(b) {return doHandleBinding(cm, b, true);}) || dispatchKey(cm, name, e, function(b) { if (typeof b == "string" ? /^go[A-Z]/.test(b) : b.motion) return doHandleBinding(cm, b); }); } else { return dispatchKey(cm, name, e, function(b) { return doHandleBinding(cm, b); }); } } // Handle a key from the keypress event function handleCharBinding(cm, e, ch) { return dispatchKey(cm, "'" + ch + "'", e, function(b) { return doHandleBinding(cm, b, true); }); } var lastStoppedKey = null; function onKeyDown(e) { var cm = this; cm.curOp.focus = activeElt(); if (signalDOMEvent(cm, e)) return; // IE does strange things with escape. if (ie && ie_version < 11 && e.keyCode == 27) e.returnValue = false; var code = e.keyCode; cm.display.shift = code == 16 || e.shiftKey; var handled = handleKeyBinding(cm, e); if (presto) { lastStoppedKey = handled ? code : null; // Opera has no cut event... we try to at least catch the key combo if (!handled && code == 88 && !hasCopyEvent && (mac ? e.metaKey : e.ctrlKey)) cm.replaceSelection("", null, "cut"); } // Turn mouse into crosshair when Alt is held on Mac. if (code == 18 && !/\bCodeMirror-crosshair\b/.test(cm.display.lineDiv.className)) showCrossHair(cm); } function showCrossHair(cm) { var lineDiv = cm.display.lineDiv; addClass(lineDiv, "CodeMirror-crosshair"); function up(e) { if (e.keyCode == 18 || !e.altKey) { rmClass(lineDiv, "CodeMirror-crosshair"); off(document, "keyup", up); off(document, "mouseover", up); } } on(document, "keyup", up); on(document, "mouseover", up); } function onKeyUp(e) { if (e.keyCode == 16) this.doc.sel.shift = false; signalDOMEvent(this, e); } function onKeyPress(e) { var cm = this; if (eventInWidget(cm.display, e) || signalDOMEvent(cm, e) || e.ctrlKey && !e.altKey || mac && e.metaKey) return; var keyCode = e.keyCode, charCode = e.charCode; if (presto && keyCode == lastStoppedKey) {lastStoppedKey = null; e_preventDefault(e); return;} if ((presto && (!e.which || e.which < 10)) && handleKeyBinding(cm, e)) return; var ch = String.fromCharCode(charCode == null ? keyCode : charCode); if (handleCharBinding(cm, e, ch)) return; cm.display.input.onKeyPress(e); } // FOCUS/BLUR EVENTS function delayBlurEvent(cm) { cm.state.delayingBlurEvent = true; setTimeout(function() { if (cm.state.delayingBlurEvent) { cm.state.delayingBlurEvent = false; onBlur(cm); } }, 100); } function onFocus(cm) { if (cm.state.delayingBlurEvent) cm.state.delayingBlurEvent = false; if (cm.options.readOnly == "nocursor") return; if (!cm.state.focused) { signal(cm, "focus", cm); cm.state.focused = true; addClass(cm.display.wrapper, "CodeMirror-focused"); // This test prevents this from firing when a context // menu is closed (since the input reset would kill the // select-all detection hack) if (!cm.curOp && cm.display.selForContextMenu != cm.doc.sel) { cm.display.input.reset(); if (webkit) setTimeout(function() { cm.display.input.reset(true); }, 20); // Issue #1730 } cm.display.input.receivedFocus(); } restartBlink(cm); } function onBlur(cm) { if (cm.state.delayingBlurEvent) return; if (cm.state.focused) { signal(cm, "blur", cm); cm.state.focused = false; rmClass(cm.display.wrapper, "CodeMirror-focused"); } clearInterval(cm.display.blinker); setTimeout(function() {if (!cm.state.focused) cm.display.shift = false;}, 150); } // CONTEXT MENU HANDLING // To make the context menu work, we need to briefly unhide the // textarea (making it as unobtrusive as possible) to let the // right-click take effect on it. function onContextMenu(cm, e) { if (eventInWidget(cm.display, e) || contextMenuInGutter(cm, e)) return; if (signalDOMEvent(cm, e, "contextmenu")) return; cm.display.input.onContextMenu(e); } function contextMenuInGutter(cm, e) { if (!hasHandler(cm, "gutterContextMenu")) return false; return gutterEvent(cm, e, "gutterContextMenu", false); } // UPDATING // Compute the position of the end of a change (its 'to' property // refers to the pre-change end). var changeEnd = CodeMirror.changeEnd = function(change) { if (!change.text) return change.to; return Pos(change.from.line + change.text.length - 1, lst(change.text).length + (change.text.length == 1 ? change.from.ch : 0)); }; // Adjust a position to refer to the post-change position of the // same text, or the end of the change if the change covers it. function adjustForChange(pos, change) { if (cmp(pos, change.from) < 0) return pos; if (cmp(pos, change.to) <= 0) return changeEnd(change); var line = pos.line + change.text.length - (change.to.line - change.from.line) - 1, ch = pos.ch; if (pos.line == change.to.line) ch += changeEnd(change).ch - change.to.ch; return Pos(line, ch); } function computeSelAfterChange(doc, change) { var out = []; for (var i = 0; i < doc.sel.ranges.length; i++) { var range = doc.sel.ranges[i]; out.push(new Range(adjustForChange(range.anchor, change), adjustForChange(range.head, change))); } return normalizeSelection(out, doc.sel.primIndex); } function offsetPos(pos, old, nw) { if (pos.line == old.line) return Pos(nw.line, pos.ch - old.ch + nw.ch); else return Pos(nw.line + (pos.line - old.line), pos.ch); } // Used by replaceSelections to allow moving the selection to the // start or around the replaced test. Hint may be "start" or "around". function computeReplacedSel(doc, changes, hint) { var out = []; var oldPrev = Pos(doc.first, 0), newPrev = oldPrev; for (var i = 0; i < changes.length; i++) { var change = changes[i]; var from = offsetPos(change.from, oldPrev, newPrev); var to = offsetPos(changeEnd(change), oldPrev, newPrev); oldPrev = change.to; newPrev = to; if (hint == "around") { var range = doc.sel.ranges[i], inv = cmp(range.head, range.anchor) < 0; out[i] = new Range(inv ? to : from, inv ? from : to); } else { out[i] = new Range(from, from); } } return new Selection(out, doc.sel.primIndex); } // Allow "beforeChange" event handlers to influence a change function filterChange(doc, change, update) { var obj = { canceled: false, from: change.from, to: change.to, text: change.text, origin: change.origin, cancel: function() { this.canceled = true; } }; if (update) obj.update = function(from, to, text, origin) { if (from) this.from = clipPos(doc, from); if (to) this.to = clipPos(doc, to); if (text) this.text = text; if (origin !== undefined) this.origin = origin; }; signal(doc, "beforeChange", doc, obj); if (doc.cm) signal(doc.cm, "beforeChange", doc.cm, obj); if (obj.canceled) return null; return {from: obj.from, to: obj.to, text: obj.text, origin: obj.origin}; } // Apply a change to a document, and add it to the document's // history, and propagating it to all linked documents. function makeChange(doc, change, ignoreReadOnly) { if (doc.cm) { if (!doc.cm.curOp) return operation(doc.cm, makeChange)(doc, change, ignoreReadOnly); if (doc.cm.state.suppressEdits) return; } if (hasHandler(doc, "beforeChange") || doc.cm && hasHandler(doc.cm, "beforeChange")) { change = filterChange(doc, change, true); if (!change) return; } // Possibly split or suppress the update based on the presence // of read-only spans in its range. var split = sawReadOnlySpans && !ignoreReadOnly && removeReadOnlyRanges(doc, change.from, change.to); if (split) { for (var i = split.length - 1; i >= 0; --i) makeChangeInner(doc, {from: split[i].from, to: split[i].to, text: i ? [""] : change.text}); } else { makeChangeInner(doc, change); } } function makeChangeInner(doc, change) { if (change.text.length == 1 && change.text[0] == "" && cmp(change.from, change.to) == 0) return; var selAfter = computeSelAfterChange(doc, change); addChangeToHistory(doc, change, selAfter, doc.cm ? doc.cm.curOp.id : NaN); makeChangeSingleDoc(doc, change, selAfter, stretchSpansOverChange(doc, change)); var rebased = []; linkedDocs(doc, function(doc, sharedHist) { if (!sharedHist && indexOf(rebased, doc.history) == -1) { rebaseHist(doc.history, change); rebased.push(doc.history); } makeChangeSingleDoc(doc, change, null, stretchSpansOverChange(doc, change)); }); } // Revert a change stored in a document's history. function makeChangeFromHistory(doc, type, allowSelectionOnly) { if (doc.cm && doc.cm.state.suppressEdits && !allowSelectionOnly) return; var hist = doc.history, event, selAfter = doc.sel; var source = type == "undo" ? hist.done : hist.undone, dest = type == "undo" ? hist.undone : hist.done; // Verify that there is a useable event (so that ctrl-z won't // needlessly clear selection events) for (var i = 0; i < source.length; i++) { event = source[i]; if (allowSelectionOnly ? event.ranges && !event.equals(doc.sel) : !event.ranges) break; } if (i == source.length) return; hist.lastOrigin = hist.lastSelOrigin = null; for (;;) { event = source.pop(); if (event.ranges) { pushSelectionToHistory(event, dest); if (allowSelectionOnly && !event.equals(doc.sel)) { setSelection(doc, event, {clearRedo: false}); return; } selAfter = event; } else break; } // Build up a reverse change object to add to the opposite history // stack (redo when undoing, and vice versa). var antiChanges = []; pushSelectionToHistory(selAfter, dest); dest.push({changes: antiChanges, generation: hist.generation}); hist.generation = event.generation || ++hist.maxGeneration; var filter = hasHandler(doc, "beforeChange") || doc.cm && hasHandler(doc.cm, "beforeChange"); for (var i = event.changes.length - 1; i >= 0; --i) { var change = event.changes[i]; change.origin = type; if (filter && !filterChange(doc, change, false)) { source.length = 0; return; } antiChanges.push(historyChangeFromChange(doc, change)); var after = i ? computeSelAfterChange(doc, change) : lst(source); makeChangeSingleDoc(doc, change, after, mergeOldSpans(doc, change)); if (!i && doc.cm) doc.cm.scrollIntoView({from: change.from, to: changeEnd(change)}); var rebased = []; // Propagate to the linked documents linkedDocs(doc, function(doc, sharedHist) { if (!sharedHist && indexOf(rebased, doc.history) == -1) { rebaseHist(doc.history, change); rebased.push(doc.history); } makeChangeSingleDoc(doc, change, null, mergeOldSpans(doc, change)); }); } } // Sub-views need their line numbers shifted when text is added // above or below them in the parent document. function shiftDoc(doc, distance) { if (distance == 0) return; doc.first += distance; doc.sel = new Selection(map(doc.sel.ranges, function(range) { return new Range(Pos(range.anchor.line + distance, range.anchor.ch), Pos(range.head.line + distance, range.head.ch)); }), doc.sel.primIndex); if (doc.cm) { regChange(doc.cm, doc.first, doc.first - distance, distance); for (var d = doc.cm.display, l = d.viewFrom; l < d.viewTo; l++) regLineChange(doc.cm, l, "gutter"); } } // More lower-level change function, handling only a single document // (not linked ones). function makeChangeSingleDoc(doc, change, selAfter, spans) { if (doc.cm && !doc.cm.curOp) return operation(doc.cm, makeChangeSingleDoc)(doc, change, selAfter, spans); if (change.to.line < doc.first) { shiftDoc(doc, change.text.length - 1 - (change.to.line - change.from.line)); return; } if (change.from.line > doc.lastLine()) return; // Clip the change to the size of this doc if (change.from.line < doc.first) { var shift = change.text.length - 1 - (doc.first - change.from.line); shiftDoc(doc, shift); change = {from: Pos(doc.first, 0), to: Pos(change.to.line + shift, change.to.ch), text: [lst(change.text)], origin: change.origin}; } var last = doc.lastLine(); if (change.to.line > last) { change = {from: change.from, to: Pos(last, getLine(doc, last).text.length), text: [change.text[0]], origin: change.origin}; } change.removed = getBetween(doc, change.from, change.to); if (!selAfter) selAfter = computeSelAfterChange(doc, change); if (doc.cm) makeChangeSingleDocInEditor(doc.cm, change, spans); else updateDoc(doc, change, spans); setSelectionNoUndo(doc, selAfter, sel_dontScroll); } // Handle the interaction of a change to a document with the editor // that this document is part of. function makeChangeSingleDocInEditor(cm, change, spans) { var doc = cm.doc, display = cm.display, from = change.from, to = change.to; var recomputeMaxLength = false, checkWidthStart = from.line; if (!cm.options.lineWrapping) { checkWidthStart = lineNo(visualLine(getLine(doc, from.line))); doc.iter(checkWidthStart, to.line + 1, function(line) { if (line == display.maxLine) { recomputeMaxLength = true; return true; } }); } if (doc.sel.contains(change.from, change.to) > -1) signalCursorActivity(cm); updateDoc(doc, change, spans, estimateHeight(cm)); if (!cm.options.lineWrapping) { doc.iter(checkWidthStart, from.line + change.text.length, function(line) { var len = lineLength(line); if (len > display.maxLineLength) { display.maxLine = line; display.maxLineLength = len; display.maxLineChanged = true; recomputeMaxLength = false; } }); if (recomputeMaxLength) cm.curOp.updateMaxLine = true; } // Adjust frontier, schedule worker doc.frontier = Math.min(doc.frontier, from.line); startWorker(cm, 400); var lendiff = change.text.length - (to.line - from.line) - 1; // Remember that these lines changed, for updating the display if (change.full) regChange(cm); else if (from.line == to.line && change.text.length == 1 && !isWholeLineUpdate(cm.doc, change)) regLineChange(cm, from.line, "text"); else regChange(cm, from.line, to.line + 1, lendiff); var changesHandler = hasHandler(cm, "changes"), changeHandler = hasHandler(cm, "change"); if (changeHandler || changesHandler) { var obj = { from: from, to: to, text: change.text, removed: change.removed, origin: change.origin }; if (changeHandler) signalLater(cm, "change", cm, obj); if (changesHandler) (cm.curOp.changeObjs || (cm.curOp.changeObjs = [])).push(obj); } cm.display.selForContextMenu = null; } function replaceRange(doc, code, from, to, origin) { if (!to) to = from; if (cmp(to, from) < 0) { var tmp = to; to = from; from = tmp; } if (typeof code == "string") code = doc.splitLines(code); makeChange(doc, {from: from, to: to, text: code, origin: origin}); } // SCROLLING THINGS INTO VIEW // If an editor sits on the top or bottom of the window, partially // scrolled out of view, this ensures that the cursor is visible. function maybeScrollWindow(cm, coords) { if (signalDOMEvent(cm, "scrollCursorIntoView")) return; var display = cm.display, box = display.sizer.getBoundingClientRect(), doScroll = null; if (coords.top + box.top < 0) doScroll = true; else if (coords.bottom + box.top > (window.innerHeight || document.documentElement.clientHeight)) doScroll = false; if (doScroll != null && !phantom) { var scrollNode = elt("div", "\u200b", null, "position: absolute; top: " + (coords.top - display.viewOffset - paddingTop(cm.display)) + "px; height: " + (coords.bottom - coords.top + scrollGap(cm) + display.barHeight) + "px; left: " + coords.left + "px; width: 2px;"); cm.display.lineSpace.appendChild(scrollNode); scrollNode.scrollIntoView(doScroll); cm.display.lineSpace.removeChild(scrollNode); } } // Scroll a given position into view (immediately), verifying that // it actually became visible (as line heights are accurately // measured, the position of something may 'drift' during drawing). function scrollPosIntoView(cm, pos, end, margin) { if (margin == null) margin = 0; for (var limit = 0; limit < 5; limit++) { var changed = false, coords = cursorCoords(cm, pos); var endCoords = !end || end == pos ? coords : cursorCoords(cm, end); var scrollPos = calculateScrollPos(cm, Math.min(coords.left, endCoords.left), Math.min(coords.top, endCoords.top) - margin, Math.max(coords.left, endCoords.left), Math.max(coords.bottom, endCoords.bottom) + margin); var startTop = cm.doc.scrollTop, startLeft = cm.doc.scrollLeft; if (scrollPos.scrollTop != null) { setScrollTop(cm, scrollPos.scrollTop); if (Math.abs(cm.doc.scrollTop - startTop) > 1) changed = true; } if (scrollPos.scrollLeft != null) { setScrollLeft(cm, scrollPos.scrollLeft); if (Math.abs(cm.doc.scrollLeft - startLeft) > 1) changed = true; } if (!changed) break; } return coords; } // Scroll a given set of coordinates into view (immediately). function scrollIntoView(cm, x1, y1, x2, y2) { var scrollPos = calculateScrollPos(cm, x1, y1, x2, y2); if (scrollPos.scrollTop != null) setScrollTop(cm, scrollPos.scrollTop); if (scrollPos.scrollLeft != null) setScrollLeft(cm, scrollPos.scrollLeft); } // Calculate a new scroll position needed to scroll the given // rectangle into view. Returns an object with scrollTop and // scrollLeft properties. When these are undefined, the // vertical/horizontal position does not need to be adjusted. function calculateScrollPos(cm, x1, y1, x2, y2) { var display = cm.display, snapMargin = textHeight(cm.display); if (y1 < 0) y1 = 0; var screentop = cm.curOp && cm.curOp.scrollTop != null ? cm.curOp.scrollTop : display.scroller.scrollTop; var screen = displayHeight(cm), result = {}; if (y2 - y1 > screen) y2 = y1 + screen; var docBottom = cm.doc.height + paddingVert(display); var atTop = y1 < snapMargin, atBottom = y2 > docBottom - snapMargin; if (y1 < screentop) { result.scrollTop = atTop ? 0 : y1; } else if (y2 > screentop + screen) { var newTop = Math.min(y1, (atBottom ? docBottom : y2) - screen); if (newTop != screentop) result.scrollTop = newTop; } var screenleft = cm.curOp && cm.curOp.scrollLeft != null ? cm.curOp.scrollLeft : display.scroller.scrollLeft; var screenw = displayWidth(cm) - (cm.options.fixedGutter ? display.gutters.offsetWidth : 0); var tooWide = x2 - x1 > screenw; if (tooWide) x2 = x1 + screenw; if (x1 < 10) result.scrollLeft = 0; else if (x1 < screenleft) result.scrollLeft = Math.max(0, x1 - (tooWide ? 0 : 10)); else if (x2 > screenw + screenleft - 3) result.scrollLeft = x2 + (tooWide ? 0 : 10) - screenw; return result; } // Store a relative adjustment to the scroll position in the current // operation (to be applied when the operation finishes). function addToScrollPos(cm, left, top) { if (left != null || top != null) resolveScrollToPos(cm); if (left != null) cm.curOp.scrollLeft = (cm.curOp.scrollLeft == null ? cm.doc.scrollLeft : cm.curOp.scrollLeft) + left; if (top != null) cm.curOp.scrollTop = (cm.curOp.scrollTop == null ? cm.doc.scrollTop : cm.curOp.scrollTop) + top; } // Make sure that at the end of the operation the current cursor is // shown. function ensureCursorVisible(cm) { resolveScrollToPos(cm); var cur = cm.getCursor(), from = cur, to = cur; if (!cm.options.lineWrapping) { from = cur.ch ? Pos(cur.line, cur.ch - 1) : cur; to = Pos(cur.line, cur.ch + 1); } cm.curOp.scrollToPos = {from: from, to: to, margin: cm.options.cursorScrollMargin, isCursor: true}; } // When an operation has its scrollToPos property set, and another // scroll action is applied before the end of the operation, this // 'simulates' scrolling that position into view in a cheap way, so // that the effect of intermediate scroll commands is not ignored. function resolveScrollToPos(cm) { var range = cm.curOp.scrollToPos; if (range) { cm.curOp.scrollToPos = null; var from = estimateCoords(cm, range.from), to = estimateCoords(cm, range.to); var sPos = calculateScrollPos(cm, Math.min(from.left, to.left), Math.min(from.top, to.top) - range.margin, Math.max(from.right, to.right), Math.max(from.bottom, to.bottom) + range.margin); cm.scrollTo(sPos.scrollLeft, sPos.scrollTop); } } // API UTILITIES // Indent the given line. The how parameter can be "smart", // "add"/null, "subtract", or "prev". When aggressive is false // (typically set to true for forced single-line indents), empty // lines are not indented, and places where the mode returns Pass // are left alone. function indentLine(cm, n, how, aggressive) { var doc = cm.doc, state; if (how == null) how = "add"; if (how == "smart") { // Fall back to "prev" when the mode doesn't have an indentation // method. if (!doc.mode.indent) how = "prev"; else state = getStateBefore(cm, n); } var tabSize = cm.options.tabSize; var line = getLine(doc, n), curSpace = countColumn(line.text, null, tabSize); if (line.stateAfter) line.stateAfter = null; var curSpaceString = line.text.match(/^\s*/)[0], indentation; if (!aggressive && !/\S/.test(line.text)) { indentation = 0; how = "not"; } else if (how == "smart") { indentation = doc.mode.indent(state, line.text.slice(curSpaceString.length), line.text); if (indentation == Pass || indentation > 150) { if (!aggressive) return; how = "prev"; } } if (how == "prev") { if (n > doc.first) indentation = countColumn(getLine(doc, n-1).text, null, tabSize); else indentation = 0; } else if (how == "add") { indentation = curSpace + cm.options.indentUnit; } else if (how == "subtract") { indentation = curSpace - cm.options.indentUnit; } else if (typeof how == "number") { indentation = curSpace + how; } indentation = Math.max(0, indentation); var indentString = "", pos = 0; if (cm.options.indentWithTabs) for (var i = Math.floor(indentation / tabSize); i; --i) {pos += tabSize; indentString += "\t";} if (pos < indentation) indentString += spaceStr(indentation - pos); if (indentString != curSpaceString) { replaceRange(doc, indentString, Pos(n, 0), Pos(n, curSpaceString.length), "+input"); line.stateAfter = null; return true; } else { // Ensure that, if the cursor was in the whitespace at the start // of the line, it is moved to the end of that space. for (var i = 0; i < doc.sel.ranges.length; i++) { var range = doc.sel.ranges[i]; if (range.head.line == n && range.head.ch < curSpaceString.length) { var pos = Pos(n, curSpaceString.length); replaceOneSelection(doc, i, new Range(pos, pos)); break; } } } } // Utility for applying a change to a line by handle or number, // returning the number and optionally registering the line as // changed. function changeLine(doc, handle, changeType, op) { var no = handle, line = handle; if (typeof handle == "number") line = getLine(doc, clipLine(doc, handle)); else no = lineNo(handle); if (no == null) return null; if (op(line, no) && doc.cm) regLineChange(doc.cm, no, changeType); return line; } // Helper for deleting text near the selection(s), used to implement // backspace, delete, and similar functionality. function deleteNearSelection(cm, compute) { var ranges = cm.doc.sel.ranges, kill = []; // Build up a set of ranges to kill first, merging overlapping // ranges. for (var i = 0; i < ranges.length; i++) { var toKill = compute(ranges[i]); while (kill.length && cmp(toKill.from, lst(kill).to) <= 0) { var replaced = kill.pop(); if (cmp(replaced.from, toKill.from) < 0) { toKill.from = replaced.from; break; } } kill.push(toKill); } // Next, remove those actual ranges. runInOp(cm, function() { for (var i = kill.length - 1; i >= 0; i--) replaceRange(cm.doc, "", kill[i].from, kill[i].to, "+delete"); ensureCursorVisible(cm); }); } // Used for horizontal relative motion. Dir is -1 or 1 (left or // right), unit can be "char", "column" (like char, but doesn't // cross line boundaries), "word" (across next word), or "group" (to // the start of next group of word or non-word-non-whitespace // chars). The visually param controls whether, in right-to-left // text, direction 1 means to move towards the next index in the // string, or towards the character to the right of the current // position. The resulting position will have a hitSide=true // property if it reached the end of the document. function findPosH(doc, pos, dir, unit, visually) { var line = pos.line, ch = pos.ch, origDir = dir; var lineObj = getLine(doc, line); function findNextLine() { var l = line + dir; if (l < doc.first || l >= doc.first + doc.size) return false line = l; return lineObj = getLine(doc, l); } function moveOnce(boundToLine) { var next = (visually ? moveVisually : moveLogically)(lineObj, ch, dir, true); if (next == null) { if (!boundToLine && findNextLine()) { if (visually) ch = (dir < 0 ? lineRight : lineLeft)(lineObj); else ch = dir < 0 ? lineObj.text.length : 0; } else return false } else ch = next; return true; } if (unit == "char") { moveOnce() } else if (unit == "column") { moveOnce(true) } else if (unit == "word" || unit == "group") { var sawType = null, group = unit == "group"; var helper = doc.cm && doc.cm.getHelper(pos, "wordChars"); for (var first = true;; first = false) { if (dir < 0 && !moveOnce(!first)) break; var cur = lineObj.text.charAt(ch) || "\n"; var type = isWordChar(cur, helper) ? "w" : group && cur == "\n" ? "n" : !group || /\s/.test(cur) ? null : "p"; if (group && !first && !type) type = "s"; if (sawType && sawType != type) { if (dir < 0) {dir = 1; moveOnce();} break; } if (type) sawType = type; if (dir > 0 && !moveOnce(!first)) break; } } var result = skipAtomic(doc, Pos(line, ch), pos, origDir, true); if (!cmp(pos, result)) result.hitSide = true; return result; } // For relative vertical movement. Dir may be -1 or 1. Unit can be // "page" or "line". The resulting position will have a hitSide=true // property if it reached the end of the document. function findPosV(cm, pos, dir, unit) { var doc = cm.doc, x = pos.left, y; if (unit == "page") { var pageSize = Math.min(cm.display.wrapper.clientHeight, window.innerHeight || document.documentElement.clientHeight); y = pos.top + dir * (pageSize - (dir < 0 ? 1.5 : .5) * textHeight(cm.display)); } else if (unit == "line") { y = dir > 0 ? pos.bottom + 3 : pos.top - 3; } for (;;) { var target = coordsChar(cm, x, y); if (!target.outside) break; if (dir < 0 ? y <= 0 : y >= doc.height) { target.hitSide = true; break; } y += dir * 5; } return target; } // EDITOR METHODS // The publicly visible API. Note that methodOp(f) means // 'wrap f in an operation, performed on its `this` parameter'. // This is not the complete set of editor methods. Most of the // methods defined on the Doc type are also injected into // CodeMirror.prototype, for backwards compatibility and // convenience. CodeMirror.prototype = { constructor: CodeMirror, focus: function(){window.focus(); this.display.input.focus();}, setOption: function(option, value) { var options = this.options, old = options[option]; if (options[option] == value && option != "mode") return; options[option] = value; if (optionHandlers.hasOwnProperty(option)) operation(this, optionHandlers[option])(this, value, old); }, getOption: function(option) {return this.options[option];}, getDoc: function() {return this.doc;}, addKeyMap: function(map, bottom) { this.state.keyMaps[bottom ? "push" : "unshift"](getKeyMap(map)); }, removeKeyMap: function(map) { var maps = this.state.keyMaps; for (var i = 0; i < maps.length; ++i) if (maps[i] == map || maps[i].name == map) { maps.splice(i, 1); return true; } }, addOverlay: methodOp(function(spec, options) { var mode = spec.token ? spec : CodeMirror.getMode(this.options, spec); if (mode.startState) throw new Error("Overlays may not be stateful."); insertSorted(this.state.overlays, {mode: mode, modeSpec: spec, opaque: options && options.opaque, priority: (options && options.priority) || 0}, function(overlay) { return overlay.priority }) this.state.modeGen++; regChange(this); }), removeOverlay: methodOp(function(spec) { var overlays = this.state.overlays; for (var i = 0; i < overlays.length; ++i) { var cur = overlays[i].modeSpec; if (cur == spec || typeof spec == "string" && cur.name == spec) { overlays.splice(i, 1); this.state.modeGen++; regChange(this); return; } } }), indentLine: methodOp(function(n, dir, aggressive) { if (typeof dir != "string" && typeof dir != "number") { if (dir == null) dir = this.options.smartIndent ? "smart" : "prev"; else dir = dir ? "add" : "subtract"; } if (isLine(this.doc, n)) indentLine(this, n, dir, aggressive); }), indentSelection: methodOp(function(how) { var ranges = this.doc.sel.ranges, end = -1; for (var i = 0; i < ranges.length; i++) { var range = ranges[i]; if (!range.empty()) { var from = range.from(), to = range.to(); var start = Math.max(end, from.line); end = Math.min(this.lastLine(), to.line - (to.ch ? 0 : 1)) + 1; for (var j = start; j < end; ++j) indentLine(this, j, how); var newRanges = this.doc.sel.ranges; if (from.ch == 0 && ranges.length == newRanges.length && newRanges[i].from().ch > 0) replaceOneSelection(this.doc, i, new Range(from, newRanges[i].to()), sel_dontScroll); } else if (range.head.line > end) { indentLine(this, range.head.line, how, true); end = range.head.line; if (i == this.doc.sel.primIndex) ensureCursorVisible(this); } } }), // Fetch the parser token for a given character. Useful for hacks // that want to inspect the mode state (say, for completion). getTokenAt: function(pos, precise) { return takeToken(this, pos, precise); }, getLineTokens: function(line, precise) { return takeToken(this, Pos(line), precise, true); }, getTokenTypeAt: function(pos) { pos = clipPos(this.doc, pos); var styles = getLineStyles(this, getLine(this.doc, pos.line)); var before = 0, after = (styles.length - 1) / 2, ch = pos.ch; var type; if (ch == 0) type = styles[2]; else for (;;) { var mid = (before + after) >> 1; if ((mid ? styles[mid * 2 - 1] : 0) >= ch) after = mid; else if (styles[mid * 2 + 1] < ch) before = mid + 1; else { type = styles[mid * 2 + 2]; break; } } var cut = type ? type.indexOf("cm-overlay ") : -1; return cut < 0 ? type : cut == 0 ? null : type.slice(0, cut - 1); }, getModeAt: function(pos) { var mode = this.doc.mode; if (!mode.innerMode) return mode; return CodeMirror.innerMode(mode, this.getTokenAt(pos).state).mode; }, getHelper: function(pos, type) { return this.getHelpers(pos, type)[0]; }, getHelpers: function(pos, type) { var found = []; if (!helpers.hasOwnProperty(type)) return found; var help = helpers[type], mode = this.getModeAt(pos); if (typeof mode[type] == "string") { if (help[mode[type]]) found.push(help[mode[type]]); } else if (mode[type]) { for (var i = 0; i < mode[type].length; i++) { var val = help[mode[type][i]]; if (val) found.push(val); } } else if (mode.helperType && help[mode.helperType]) { found.push(help[mode.helperType]); } else if (help[mode.name]) { found.push(help[mode.name]); } for (var i = 0; i < help._global.length; i++) { var cur = help._global[i]; if (cur.pred(mode, this) && indexOf(found, cur.val) == -1) found.push(cur.val); } return found; }, getStateAfter: function(line, precise) { var doc = this.doc; line = clipLine(doc, line == null ? doc.first + doc.size - 1: line); return getStateBefore(this, line + 1, precise); }, cursorCoords: function(start, mode) { var pos, range = this.doc.sel.primary(); if (start == null) pos = range.head; else if (typeof start == "object") pos = clipPos(this.doc, start); else pos = start ? range.from() : range.to(); return cursorCoords(this, pos, mode || "page"); }, charCoords: function(pos, mode) { return charCoords(this, clipPos(this.doc, pos), mode || "page"); }, coordsChar: function(coords, mode) { coords = fromCoordSystem(this, coords, mode || "page"); return coordsChar(this, coords.left, coords.top); }, lineAtHeight: function(height, mode) { height = fromCoordSystem(this, {top: height, left: 0}, mode || "page").top; return lineAtHeight(this.doc, height + this.display.viewOffset); }, heightAtLine: function(line, mode) { var end = false, lineObj; if (typeof line == "number") { var last = this.doc.first + this.doc.size - 1; if (line < this.doc.first) line = this.doc.first; else if (line > last) { line = last; end = true; } lineObj = getLine(this.doc, line); } else { lineObj = line; } return intoCoordSystem(this, lineObj, {top: 0, left: 0}, mode || "page").top + (end ? this.doc.height - heightAtLine(lineObj) : 0); }, defaultTextHeight: function() { return textHeight(this.display); }, defaultCharWidth: function() { return charWidth(this.display); }, setGutterMarker: methodOp(function(line, gutterID, value) { return changeLine(this.doc, line, "gutter", function(line) { var markers = line.gutterMarkers || (line.gutterMarkers = {}); markers[gutterID] = value; if (!value && isEmpty(markers)) line.gutterMarkers = null; return true; }); }), clearGutter: methodOp(function(gutterID) { var cm = this, doc = cm.doc, i = doc.first; doc.iter(function(line) { if (line.gutterMarkers && line.gutterMarkers[gutterID]) { line.gutterMarkers[gutterID] = null; regLineChange(cm, i, "gutter"); if (isEmpty(line.gutterMarkers)) line.gutterMarkers = null; } ++i; }); }), lineInfo: function(line) { if (typeof line == "number") { if (!isLine(this.doc, line)) return null; var n = line; line = getLine(this.doc, line); if (!line) return null; } else { var n = lineNo(line); if (n == null) return null; } return {line: n, handle: line, text: line.text, gutterMarkers: line.gutterMarkers, textClass: line.textClass, bgClass: line.bgClass, wrapClass: line.wrapClass, widgets: line.widgets}; }, getViewport: function() { return {from: this.display.viewFrom, to: this.display.viewTo};}, addWidget: function(pos, node, scroll, vert, horiz) { var display = this.display; pos = cursorCoords(this, clipPos(this.doc, pos)); var top = pos.bottom, left = pos.left; node.style.position = "absolute"; node.setAttribute("cm-ignore-events", "true"); this.display.input.setUneditable(node); display.sizer.appendChild(node); if (vert == "over") { top = pos.top; } else if (vert == "above" || vert == "near") { var vspace = Math.max(display.wrapper.clientHeight, this.doc.height), hspace = Math.max(display.sizer.clientWidth, display.lineSpace.clientWidth); // Default to positioning above (if specified and possible); otherwise default to positioning below if ((vert == 'above' || pos.bottom + node.offsetHeight > vspace) && pos.top > node.offsetHeight) top = pos.top - node.offsetHeight; else if (pos.bottom + node.offsetHeight <= vspace) top = pos.bottom; if (left + node.offsetWidth > hspace) left = hspace - node.offsetWidth; } node.style.top = top + "px"; node.style.left = node.style.right = ""; if (horiz == "right") { left = display.sizer.clientWidth - node.offsetWidth; node.style.right = "0px"; } else { if (horiz == "left") left = 0; else if (horiz == "middle") left = (display.sizer.clientWidth - node.offsetWidth) / 2; node.style.left = left + "px"; } if (scroll) scrollIntoView(this, left, top, left + node.offsetWidth, top + node.offsetHeight); }, triggerOnKeyDown: methodOp(onKeyDown), triggerOnKeyPress: methodOp(onKeyPress), triggerOnKeyUp: onKeyUp, execCommand: function(cmd) { if (commands.hasOwnProperty(cmd)) return commands[cmd].call(null, this); }, triggerElectric: methodOp(function(text) { triggerElectric(this, text); }), findPosH: function(from, amount, unit, visually) { var dir = 1; if (amount < 0) { dir = -1; amount = -amount; } for (var i = 0, cur = clipPos(this.doc, from); i < amount; ++i) { cur = findPosH(this.doc, cur, dir, unit, visually); if (cur.hitSide) break; } return cur; }, moveH: methodOp(function(dir, unit) { var cm = this; cm.extendSelectionsBy(function(range) { if (cm.display.shift || cm.doc.extend || range.empty()) return findPosH(cm.doc, range.head, dir, unit, cm.options.rtlMoveVisually); else return dir < 0 ? range.from() : range.to(); }, sel_move); }), deleteH: methodOp(function(dir, unit) { var sel = this.doc.sel, doc = this.doc; if (sel.somethingSelected()) doc.replaceSelection("", null, "+delete"); else deleteNearSelection(this, function(range) { var other = findPosH(doc, range.head, dir, unit, false); return dir < 0 ? {from: other, to: range.head} : {from: range.head, to: other}; }); }), findPosV: function(from, amount, unit, goalColumn) { var dir = 1, x = goalColumn; if (amount < 0) { dir = -1; amount = -amount; } for (var i = 0, cur = clipPos(this.doc, from); i < amount; ++i) { var coords = cursorCoords(this, cur, "div"); if (x == null) x = coords.left; else coords.left = x; cur = findPosV(this, coords, dir, unit); if (cur.hitSide) break; } return cur; }, moveV: methodOp(function(dir, unit) { var cm = this, doc = this.doc, goals = []; var collapse = !cm.display.shift && !doc.extend && doc.sel.somethingSelected(); doc.extendSelectionsBy(function(range) { if (collapse) return dir < 0 ? range.from() : range.to(); var headPos = cursorCoords(cm, range.head, "div"); if (range.goalColumn != null) headPos.left = range.goalColumn; goals.push(headPos.left); var pos = findPosV(cm, headPos, dir, unit); if (unit == "page" && range == doc.sel.primary()) addToScrollPos(cm, null, charCoords(cm, pos, "div").top - headPos.top); return pos; }, sel_move); if (goals.length) for (var i = 0; i < doc.sel.ranges.length; i++) doc.sel.ranges[i].goalColumn = goals[i]; }), // Find the word at the given position (as returned by coordsChar). findWordAt: function(pos) { var doc = this.doc, line = getLine(doc, pos.line).text; var start = pos.ch, end = pos.ch; if (line) { var helper = this.getHelper(pos, "wordChars"); if ((pos.xRel < 0 || end == line.length) && start) --start; else ++end; var startChar = line.charAt(start); var check = isWordChar(startChar, helper) ? function(ch) { return isWordChar(ch, helper); } : /\s/.test(startChar) ? function(ch) {return /\s/.test(ch);} : function(ch) {return !/\s/.test(ch) && !isWordChar(ch);}; while (start > 0 && check(line.charAt(start - 1))) --start; while (end < line.length && check(line.charAt(end))) ++end; } return new Range(Pos(pos.line, start), Pos(pos.line, end)); }, toggleOverwrite: function(value) { if (value != null && value == this.state.overwrite) return; if (this.state.overwrite = !this.state.overwrite) addClass(this.display.cursorDiv, "CodeMirror-overwrite"); else rmClass(this.display.cursorDiv, "CodeMirror-overwrite"); signal(this, "overwriteToggle", this, this.state.overwrite); }, hasFocus: function() { return this.display.input.getField() == activeElt(); }, isReadOnly: function() { return !!(this.options.readOnly || this.doc.cantEdit); }, scrollTo: methodOp(function(x, y) { if (x != null || y != null) resolveScrollToPos(this); if (x != null) this.curOp.scrollLeft = x; if (y != null) this.curOp.scrollTop = y; }), getScrollInfo: function() { var scroller = this.display.scroller; return {left: scroller.scrollLeft, top: scroller.scrollTop, height: scroller.scrollHeight - scrollGap(this) - this.display.barHeight, width: scroller.scrollWidth - scrollGap(this) - this.display.barWidth, clientHeight: displayHeight(this), clientWidth: displayWidth(this)}; }, scrollIntoView: methodOp(function(range, margin) { if (range == null) { range = {from: this.doc.sel.primary().head, to: null}; if (margin == null) margin = this.options.cursorScrollMargin; } else if (typeof range == "number") { range = {from: Pos(range, 0), to: null}; } else if (range.from == null) { range = {from: range, to: null}; } if (!range.to) range.to = range.from; range.margin = margin || 0; if (range.from.line != null) { resolveScrollToPos(this); this.curOp.scrollToPos = range; } else { var sPos = calculateScrollPos(this, Math.min(range.from.left, range.to.left), Math.min(range.from.top, range.to.top) - range.margin, Math.max(range.from.right, range.to.right), Math.max(range.from.bottom, range.to.bottom) + range.margin); this.scrollTo(sPos.scrollLeft, sPos.scrollTop); } }), setSize: methodOp(function(width, height) { var cm = this; function interpret(val) { return typeof val == "number" || /^\d+$/.test(String(val)) ? val + "px" : val; } if (width != null) cm.display.wrapper.style.width = interpret(width); if (height != null) cm.display.wrapper.style.height = interpret(height); if (cm.options.lineWrapping) clearLineMeasurementCache(this); var lineNo = cm.display.viewFrom; cm.doc.iter(lineNo, cm.display.viewTo, function(line) { if (line.widgets) for (var i = 0; i < line.widgets.length; i++) if (line.widgets[i].noHScroll) { regLineChange(cm, lineNo, "widget"); break; } ++lineNo; }); cm.curOp.forceUpdate = true; signal(cm, "refresh", this); }), operation: function(f){return runInOp(this, f);}, refresh: methodOp(function() { var oldHeight = this.display.cachedTextHeight; regChange(this); this.curOp.forceUpdate = true; clearCaches(this); this.scrollTo(this.doc.scrollLeft, this.doc.scrollTop); updateGutterSpace(this); if (oldHeight == null || Math.abs(oldHeight - textHeight(this.display)) > .5) estimateLineHeights(this); signal(this, "refresh", this); }), swapDoc: methodOp(function(doc) { var old = this.doc; old.cm = null; attachDoc(this, doc); clearCaches(this); this.display.input.reset(); this.scrollTo(doc.scrollLeft, doc.scrollTop); this.curOp.forceScroll = true; signalLater(this, "swapDoc", this, old); return old; }), getInputField: function(){return this.display.input.getField();}, getWrapperElement: function(){return this.display.wrapper;}, getScrollerElement: function(){return this.display.scroller;}, getGutterElement: function(){return this.display.gutters;} }; eventMixin(CodeMirror); // OPTION DEFAULTS // The default configuration options. var defaults = CodeMirror.defaults = {}; // Functions to run when options are changed. var optionHandlers = CodeMirror.optionHandlers = {}; function option(name, deflt, handle, notOnInit) { CodeMirror.defaults[name] = deflt; if (handle) optionHandlers[name] = notOnInit ? function(cm, val, old) {if (old != Init) handle(cm, val, old);} : handle; } // Passed to option handlers when there is no old value. var Init = CodeMirror.Init = {toString: function(){return "CodeMirror.Init";}}; // These two are, on init, called from the constructor because they // have to be initialized before the editor can start at all. option("value", "", function(cm, val) { cm.setValue(val); }, true); option("mode", null, function(cm, val) { cm.doc.modeOption = val; loadMode(cm); }, true); option("indentUnit", 2, loadMode, true); option("indentWithTabs", false); option("smartIndent", true); option("tabSize", 4, function(cm) { resetModeState(cm); clearCaches(cm); regChange(cm); }, true); option("lineSeparator", null, function(cm, val) { cm.doc.lineSep = val; if (!val) return; var newBreaks = [], lineNo = cm.doc.first; cm.doc.iter(function(line) { for (var pos = 0;;) { var found = line.text.indexOf(val, pos); if (found == -1) break; pos = found + val.length; newBreaks.push(Pos(lineNo, found)); } lineNo++; }); for (var i = newBreaks.length - 1; i >= 0; i--) replaceRange(cm.doc, val, newBreaks[i], Pos(newBreaks[i].line, newBreaks[i].ch + val.length)) }); option("specialChars", /[\u0000-\u001f\u007f\u00ad\u200b-\u200f\u2028\u2029\ufeff]/g, function(cm, val, old) { cm.state.specialChars = new RegExp(val.source + (val.test("\t") ? "" : "|\t"), "g"); if (old != CodeMirror.Init) cm.refresh(); }); option("specialCharPlaceholder", defaultSpecialCharPlaceholder, function(cm) {cm.refresh();}, true); option("electricChars", true); option("inputStyle", mobile ? "contenteditable" : "textarea", function() { throw new Error("inputStyle can not (yet) be changed in a running editor"); // FIXME }, true); option("spellcheck", false, function(cm, val) { cm.getInputField().spellcheck = val }, true); option("rtlMoveVisually", !windows); option("wholeLineUpdateBefore", true); option("theme", "default", function(cm) { themeChanged(cm); guttersChanged(cm); }, true); option("keyMap", "default", function(cm, val, old) { var next = getKeyMap(val); var prev = old != CodeMirror.Init && getKeyMap(old); if (prev && prev.detach) prev.detach(cm, next); if (next.attach) next.attach(cm, prev || null); }); option("extraKeys", null); option("lineWrapping", false, wrappingChanged, true); option("gutters", [], function(cm) { setGuttersForLineNumbers(cm.options); guttersChanged(cm); }, true); option("fixedGutter", true, function(cm, val) { cm.display.gutters.style.left = val ? compensateForHScroll(cm.display) + "px" : "0"; cm.refresh(); }, true); option("coverGutterNextToScrollbar", false, function(cm) {updateScrollbars(cm);}, true); option("scrollbarStyle", "native", function(cm) { initScrollbars(cm); updateScrollbars(cm); cm.display.scrollbars.setScrollTop(cm.doc.scrollTop); cm.display.scrollbars.setScrollLeft(cm.doc.scrollLeft); }, true); option("lineNumbers", false, function(cm) { setGuttersForLineNumbers(cm.options); guttersChanged(cm); }, true); option("firstLineNumber", 1, guttersChanged, true); option("lineNumberFormatter", function(integer) {return integer;}, guttersChanged, true); option("showCursorWhenSelecting", false, updateSelection, true); option("resetSelectionOnContextMenu", true); option("lineWiseCopyCut", true); option("readOnly", false, function(cm, val) { if (val == "nocursor") { onBlur(cm); cm.display.input.blur(); cm.display.disabled = true; } else { cm.display.disabled = false; } cm.display.input.readOnlyChanged(val) }); option("disableInput", false, function(cm, val) {if (!val) cm.display.input.reset();}, true); option("dragDrop", true, dragDropChanged); option("allowDropFileTypes", null); option("cursorBlinkRate", 530); option("cursorScrollMargin", 0); option("cursorHeight", 1, updateSelection, true); option("singleCursorHeightPerLine", true, updateSelection, true); option("workTime", 100); option("workDelay", 100); option("flattenSpans", true, resetModeState, true); option("addModeClass", false, resetModeState, true); option("pollInterval", 100); option("undoDepth", 200, function(cm, val){cm.doc.history.undoDepth = val;}); option("historyEventDelay", 1250); option("viewportMargin", 10, function(cm){cm.refresh();}, true); option("maxHighlightLength", 10000, resetModeState, true); option("moveInputWithCursor", true, function(cm, val) { if (!val) cm.display.input.resetPosition(); }); option("tabindex", null, function(cm, val) { cm.display.input.getField().tabIndex = val || ""; }); option("autofocus", null); // MODE DEFINITION AND QUERYING // Known modes, by name and by MIME var modes = CodeMirror.modes = {}, mimeModes = CodeMirror.mimeModes = {}; // Extra arguments are stored as the mode's dependencies, which is // used by (legacy) mechanisms like loadmode.js to automatically // load a mode. (Preferred mechanism is the require/define calls.) CodeMirror.defineMode = function(name, mode) { if (!CodeMirror.defaults.mode && name != "null") CodeMirror.defaults.mode = name; if (arguments.length > 2) mode.dependencies = Array.prototype.slice.call(arguments, 2); modes[name] = mode; }; CodeMirror.defineMIME = function(mime, spec) { mimeModes[mime] = spec; }; // Given a MIME type, a {name, ...options} config object, or a name // string, return a mode config object. CodeMirror.resolveMode = function(spec) { if (typeof spec == "string" && mimeModes.hasOwnProperty(spec)) { spec = mimeModes[spec]; } else if (spec && typeof spec.name == "string" && mimeModes.hasOwnProperty(spec.name)) { var found = mimeModes[spec.name]; if (typeof found == "string") found = {name: found}; spec = createObj(found, spec); spec.name = found.name; } else if (typeof spec == "string" && /^[\w\-]+\/[\w\-]+\+xml$/.test(spec)) { return CodeMirror.resolveMode("application/xml"); } else if (typeof spec == "string" && /^[\w\-]+\/[\w\-]+\+json$/.test(spec)) { return CodeMirror.resolveMode("application/json"); } if (typeof spec == "string") return {name: spec}; else return spec || {name: "null"}; }; // Given a mode spec (anything that resolveMode accepts), find and // initialize an actual mode object. CodeMirror.getMode = function(options, spec) { var spec = CodeMirror.resolveMode(spec); var mfactory = modes[spec.name]; if (!mfactory) return CodeMirror.getMode(options, "text/plain"); var modeObj = mfactory(options, spec); if (modeExtensions.hasOwnProperty(spec.name)) { var exts = modeExtensions[spec.name]; for (var prop in exts) { if (!exts.hasOwnProperty(prop)) continue; if (modeObj.hasOwnProperty(prop)) modeObj["_" + prop] = modeObj[prop]; modeObj[prop] = exts[prop]; } } modeObj.name = spec.name; if (spec.helperType) modeObj.helperType = spec.helperType; if (spec.modeProps) for (var prop in spec.modeProps) modeObj[prop] = spec.modeProps[prop]; return modeObj; }; // Minimal default mode. CodeMirror.defineMode("null", function() { return {token: function(stream) {stream.skipToEnd();}}; }); CodeMirror.defineMIME("text/plain", "null"); // This can be used to attach properties to mode objects from // outside the actual mode definition. var modeExtensions = CodeMirror.modeExtensions = {}; CodeMirror.extendMode = function(mode, properties) { var exts = modeExtensions.hasOwnProperty(mode) ? modeExtensions[mode] : (modeExtensions[mode] = {}); copyObj(properties, exts); }; // EXTENSIONS CodeMirror.defineExtension = function(name, func) { CodeMirror.prototype[name] = func; }; CodeMirror.defineDocExtension = function(name, func) { Doc.prototype[name] = func; }; CodeMirror.defineOption = option; var initHooks = []; CodeMirror.defineInitHook = function(f) {initHooks.push(f);}; var helpers = CodeMirror.helpers = {}; CodeMirror.registerHelper = function(type, name, value) { if (!helpers.hasOwnProperty(type)) helpers[type] = CodeMirror[type] = {_global: []}; helpers[type][name] = value; }; CodeMirror.registerGlobalHelper = function(type, name, predicate, value) { CodeMirror.registerHelper(type, name, value); helpers[type]._global.push({pred: predicate, val: value}); }; // MODE STATE HANDLING // Utility functions for working with state. Exported because nested // modes need to do this for their inner modes. var copyState = CodeMirror.copyState = function(mode, state) { if (state === true) return state; if (mode.copyState) return mode.copyState(state); var nstate = {}; for (var n in state) { var val = state[n]; if (val instanceof Array) val = val.concat([]); nstate[n] = val; } return nstate; }; var startState = CodeMirror.startState = function(mode, a1, a2) { return mode.startState ? mode.startState(a1, a2) : true; }; // Given a mode and a state (for that mode), find the inner mode and // state at the position that the state refers to. CodeMirror.innerMode = function(mode, state) { while (mode.innerMode) { var info = mode.innerMode(state); if (!info || info.mode == mode) break; state = info.state; mode = info.mode; } return info || {mode: mode, state: state}; }; // STANDARD COMMANDS // Commands are parameter-less actions that can be performed on an // editor, mostly used for keybindings. var commands = CodeMirror.commands = { selectAll: function(cm) {cm.setSelection(Pos(cm.firstLine(), 0), Pos(cm.lastLine()), sel_dontScroll);}, singleSelection: function(cm) { cm.setSelection(cm.getCursor("anchor"), cm.getCursor("head"), sel_dontScroll); }, killLine: function(cm) { deleteNearSelection(cm, function(range) { if (range.empty()) { var len = getLine(cm.doc, range.head.line).text.length; if (range.head.ch == len && range.head.line < cm.lastLine()) return {from: range.head, to: Pos(range.head.line + 1, 0)}; else return {from: range.head, to: Pos(range.head.line, len)}; } else { return {from: range.from(), to: range.to()}; } }); }, deleteLine: function(cm) { deleteNearSelection(cm, function(range) { return {from: Pos(range.from().line, 0), to: clipPos(cm.doc, Pos(range.to().line + 1, 0))}; }); }, delLineLeft: function(cm) { deleteNearSelection(cm, function(range) { return {from: Pos(range.from().line, 0), to: range.from()}; }); }, delWrappedLineLeft: function(cm) { deleteNearSelection(cm, function(range) { var top = cm.charCoords(range.head, "div").top + 5; var leftPos = cm.coordsChar({left: 0, top: top}, "div"); return {from: leftPos, to: range.from()}; }); }, delWrappedLineRight: function(cm) { deleteNearSelection(cm, function(range) { var top = cm.charCoords(range.head, "div").top + 5; var rightPos = cm.coordsChar({left: cm.display.lineDiv.offsetWidth + 100, top: top}, "div"); return {from: range.from(), to: rightPos }; }); }, undo: function(cm) {cm.undo();}, redo: function(cm) {cm.redo();}, undoSelection: function(cm) {cm.undoSelection();}, redoSelection: function(cm) {cm.redoSelection();}, goDocStart: function(cm) {cm.extendSelection(Pos(cm.firstLine(), 0));}, goDocEnd: function(cm) {cm.extendSelection(Pos(cm.lastLine()));}, goLineStart: function(cm) { cm.extendSelectionsBy(function(range) { return lineStart(cm, range.head.line); }, {origin: "+move", bias: 1}); }, goLineStartSmart: function(cm) { cm.extendSelectionsBy(function(range) { return lineStartSmart(cm, range.head); }, {origin: "+move", bias: 1}); }, goLineEnd: function(cm) { cm.extendSelectionsBy(function(range) { return lineEnd(cm, range.head.line); }, {origin: "+move", bias: -1}); }, goLineRight: function(cm) { cm.extendSelectionsBy(function(range) { var top = cm.charCoords(range.head, "div").top + 5; return cm.coordsChar({left: cm.display.lineDiv.offsetWidth + 100, top: top}, "div"); }, sel_move); }, goLineLeft: function(cm) { cm.extendSelectionsBy(function(range) { var top = cm.charCoords(range.head, "div").top + 5; return cm.coordsChar({left: 0, top: top}, "div"); }, sel_move); }, goLineLeftSmart: function(cm) { cm.extendSelectionsBy(function(range) { var top = cm.charCoords(range.head, "div").top + 5; var pos = cm.coordsChar({left: 0, top: top}, "div"); if (pos.ch < cm.getLine(pos.line).search(/\S/)) return lineStartSmart(cm, range.head); return pos; }, sel_move); }, goLineUp: function(cm) {cm.moveV(-1, "line");}, goLineDown: function(cm) {cm.moveV(1, "line");}, goPageUp: function(cm) {cm.moveV(-1, "page");}, goPageDown: function(cm) {cm.moveV(1, "page");}, goCharLeft: function(cm) {cm.moveH(-1, "char");}, goCharRight: function(cm) {cm.moveH(1, "char");}, goColumnLeft: function(cm) {cm.moveH(-1, "column");}, goColumnRight: function(cm) {cm.moveH(1, "column");}, goWordLeft: function(cm) {cm.moveH(-1, "word");}, goGroupRight: function(cm) {cm.moveH(1, "group");}, goGroupLeft: function(cm) {cm.moveH(-1, "group");}, goWordRight: function(cm) {cm.moveH(1, "word");}, delCharBefore: function(cm) {cm.deleteH(-1, "char");}, delCharAfter: function(cm) {cm.deleteH(1, "char");}, delWordBefore: function(cm) {cm.deleteH(-1, "word");}, delWordAfter: function(cm) {cm.deleteH(1, "word");}, delGroupBefore: function(cm) {cm.deleteH(-1, "group");}, delGroupAfter: function(cm) {cm.deleteH(1, "group");}, indentAuto: function(cm) {cm.indentSelection("smart");}, indentMore: function(cm) {cm.indentSelection("add");}, indentLess: function(cm) {cm.indentSelection("subtract");}, insertTab: function(cm) {cm.replaceSelection("\t");}, insertSoftTab: function(cm) { var spaces = [], ranges = cm.listSelections(), tabSize = cm.options.tabSize; for (var i = 0; i < ranges.length; i++) { var pos = ranges[i].from(); var col = countColumn(cm.getLine(pos.line), pos.ch, tabSize); spaces.push(spaceStr(tabSize - col % tabSize)); } cm.replaceSelections(spaces); }, defaultTab: function(cm) { if (cm.somethingSelected()) cm.indentSelection("add"); else cm.execCommand("insertTab"); }, transposeChars: function(cm) { runInOp(cm, function() { var ranges = cm.listSelections(), newSel = []; for (var i = 0; i < ranges.length; i++) { var cur = ranges[i].head, line = getLine(cm.doc, cur.line).text; if (line) { if (cur.ch == line.length) cur = new Pos(cur.line, cur.ch - 1); if (cur.ch > 0) { cur = new Pos(cur.line, cur.ch + 1); cm.replaceRange(line.charAt(cur.ch - 1) + line.charAt(cur.ch - 2), Pos(cur.line, cur.ch - 2), cur, "+transpose"); } else if (cur.line > cm.doc.first) { var prev = getLine(cm.doc, cur.line - 1).text; if (prev) cm.replaceRange(line.charAt(0) + cm.doc.lineSeparator() + prev.charAt(prev.length - 1), Pos(cur.line - 1, prev.length - 1), Pos(cur.line, 1), "+transpose"); } } newSel.push(new Range(cur, cur)); } cm.setSelections(newSel); }); }, newlineAndIndent: function(cm) { runInOp(cm, function() { var len = cm.listSelections().length; for (var i = 0; i < len; i++) { var range = cm.listSelections()[i]; cm.replaceRange(cm.doc.lineSeparator(), range.anchor, range.head, "+input"); cm.indentLine(range.from().line + 1, null, true); } ensureCursorVisible(cm); }); }, openLine: function(cm) {cm.replaceSelection("\n", "start")}, toggleOverwrite: function(cm) {cm.toggleOverwrite();} }; // STANDARD KEYMAPS var keyMap = CodeMirror.keyMap = {}; keyMap.basic = { "Left": "goCharLeft", "Right": "goCharRight", "Up": "goLineUp", "Down": "goLineDown", "End": "goLineEnd", "Home": "goLineStartSmart", "PageUp": "goPageUp", "PageDown": "goPageDown", "Delete": "delCharAfter", "Backspace": "delCharBefore", "Shift-Backspace": "delCharBefore", "Tab": "defaultTab", "Shift-Tab": "indentAuto", "Enter": "newlineAndIndent", "Insert": "toggleOverwrite", "Esc": "singleSelection" }; // Note that the save and find-related commands aren't defined by // default. User code or addons can define them. Unknown commands // are simply ignored. keyMap.pcDefault = { "Ctrl-A": "selectAll", "Ctrl-D": "deleteLine", "Ctrl-Z": "undo", "Shift-Ctrl-Z": "redo", "Ctrl-Y": "redo", "Ctrl-Home": "goDocStart", "Ctrl-End": "goDocEnd", "Ctrl-Up": "goLineUp", "Ctrl-Down": "goLineDown", "Ctrl-Left": "goGroupLeft", "Ctrl-Right": "goGroupRight", "Alt-Left": "goLineStart", "Alt-Right": "goLineEnd", "Ctrl-Backspace": "delGroupBefore", "Ctrl-Delete": "delGroupAfter", "Ctrl-S": "save", "Ctrl-F": "find", "Ctrl-G": "findNext", "Shift-Ctrl-G": "findPrev", "Shift-Ctrl-F": "replace", "Shift-Ctrl-R": "replaceAll", "Ctrl-[": "indentLess", "Ctrl-]": "indentMore", "Ctrl-U": "undoSelection", "Shift-Ctrl-U": "redoSelection", "Alt-U": "redoSelection", fallthrough: "basic" }; // Very basic readline/emacs-style bindings, which are standard on Mac. keyMap.emacsy = { "Ctrl-F": "goCharRight", "Ctrl-B": "goCharLeft", "Ctrl-P": "goLineUp", "Ctrl-N": "goLineDown", "Alt-F": "goWordRight", "Alt-B": "goWordLeft", "Ctrl-A": "goLineStart", "Ctrl-E": "goLineEnd", "Ctrl-V": "goPageDown", "Shift-Ctrl-V": "goPageUp", "Ctrl-D": "delCharAfter", "Ctrl-H": "delCharBefore", "Alt-D": "delWordAfter", "Alt-Backspace": "delWordBefore", "Ctrl-K": "killLine", "Ctrl-T": "transposeChars", "Ctrl-O": "openLine" }; keyMap.macDefault = { "Cmd-A": "selectAll", "Cmd-D": "deleteLine", "Cmd-Z": "undo", "Shift-Cmd-Z": "redo", "Cmd-Y": "redo", "Cmd-Home": "goDocStart", "Cmd-Up": "goDocStart", "Cmd-End": "goDocEnd", "Cmd-Down": "goDocEnd", "Alt-Left": "goGroupLeft", "Alt-Right": "goGroupRight", "Cmd-Left": "goLineLeft", "Cmd-Right": "goLineRight", "Alt-Backspace": "delGroupBefore", "Ctrl-Alt-Backspace": "delGroupAfter", "Alt-Delete": "delGroupAfter", "Cmd-S": "save", "Cmd-F": "find", "Cmd-G": "findNext", "Shift-Cmd-G": "findPrev", "Cmd-Alt-F": "replace", "Shift-Cmd-Alt-F": "replaceAll", "Cmd-[": "indentLess", "Cmd-]": "indentMore", "Cmd-Backspace": "delWrappedLineLeft", "Cmd-Delete": "delWrappedLineRight", "Cmd-U": "undoSelection", "Shift-Cmd-U": "redoSelection", "Ctrl-Up": "goDocStart", "Ctrl-Down": "goDocEnd", fallthrough: ["basic", "emacsy"] }; keyMap["default"] = mac ? keyMap.macDefault : keyMap.pcDefault; // KEYMAP DISPATCH function normalizeKeyName(name) { var parts = name.split(/-(?!$)/), name = parts[parts.length - 1]; var alt, ctrl, shift, cmd; for (var i = 0; i < parts.length - 1; i++) { var mod = parts[i]; if (/^(cmd|meta|m)$/i.test(mod)) cmd = true; else if (/^a(lt)?$/i.test(mod)) alt = true; else if (/^(c|ctrl|control)$/i.test(mod)) ctrl = true; else if (/^s(hift)$/i.test(mod)) shift = true; else throw new Error("Unrecognized modifier name: " + mod); } if (alt) name = "Alt-" + name; if (ctrl) name = "Ctrl-" + name; if (cmd) name = "Cmd-" + name; if (shift) name = "Shift-" + name; return name; } // This is a kludge to keep keymaps mostly working as raw objects // (backwards compatibility) while at the same time support features // like normalization and multi-stroke key bindings. It compiles a // new normalized keymap, and then updates the old object to reflect // this. CodeMirror.normalizeKeyMap = function(keymap) { var copy = {}; for (var keyname in keymap) if (keymap.hasOwnProperty(keyname)) { var value = keymap[keyname]; if (/^(name|fallthrough|(de|at)tach)$/.test(keyname)) continue; if (value == "...") { delete keymap[keyname]; continue; } var keys = map(keyname.split(" "), normalizeKeyName); for (var i = 0; i < keys.length; i++) { var val, name; if (i == keys.length - 1) { name = keys.join(" "); val = value; } else { name = keys.slice(0, i + 1).join(" "); val = "..."; } var prev = copy[name]; if (!prev) copy[name] = val; else if (prev != val) throw new Error("Inconsistent bindings for " + name); } delete keymap[keyname]; } for (var prop in copy) keymap[prop] = copy[prop]; return keymap; }; var lookupKey = CodeMirror.lookupKey = function(key, map, handle, context) { map = getKeyMap(map); var found = map.call ? map.call(key, context) : map[key]; if (found === false) return "nothing"; if (found === "...") return "multi"; if (found != null && handle(found)) return "handled"; if (map.fallthrough) { if (Object.prototype.toString.call(map.fallthrough) != "[object Array]") return lookupKey(key, map.fallthrough, handle, context); for (var i = 0; i < map.fallthrough.length; i++) { var result = lookupKey(key, map.fallthrough[i], handle, context); if (result) return result; } } }; // Modifier key presses don't count as 'real' key presses for the // purpose of keymap fallthrough. var isModifierKey = CodeMirror.isModifierKey = function(value) { var name = typeof value == "string" ? value : keyNames[value.keyCode]; return name == "Ctrl" || name == "Alt" || name == "Shift" || name == "Mod"; }; // Look up the name of a key as indicated by an event object. var keyName = CodeMirror.keyName = function(event, noShift) { if (presto && event.keyCode == 34 && event["char"]) return false; var base = keyNames[event.keyCode], name = base; if (name == null || event.altGraphKey) return false; if (event.altKey && base != "Alt") name = "Alt-" + name; if ((flipCtrlCmd ? event.metaKey : event.ctrlKey) && base != "Ctrl") name = "Ctrl-" + name; if ((flipCtrlCmd ? event.ctrlKey : event.metaKey) && base != "Cmd") name = "Cmd-" + name; if (!noShift && event.shiftKey && base != "Shift") name = "Shift-" + name; return name; }; function getKeyMap(val) { return typeof val == "string" ? keyMap[val] : val; } // FROMTEXTAREA CodeMirror.fromTextArea = function(textarea, options) { options = options ? copyObj(options) : {}; options.value = textarea.value; if (!options.tabindex && textarea.tabIndex) options.tabindex = textarea.tabIndex; if (!options.placeholder && textarea.placeholder) options.placeholder = textarea.placeholder; // Set autofocus to true if this textarea is focused, or if it has // autofocus and no other element is focused. if (options.autofocus == null) { var hasFocus = activeElt(); options.autofocus = hasFocus == textarea || textarea.getAttribute("autofocus") != null && hasFocus == document.body; } function save() {textarea.value = cm.getValue();} if (textarea.form) { on(textarea.form, "submit", save); // Deplorable hack to make the submit method do the right thing. if (!options.leaveSubmitMethodAlone) { var form = textarea.form, realSubmit = form.submit; try { var wrappedSubmit = form.submit = function() { save(); form.submit = realSubmit; form.submit(); form.submit = wrappedSubmit; }; } catch(e) {} } } options.finishInit = function(cm) { cm.save = save; cm.getTextArea = function() { return textarea; }; cm.toTextArea = function() { cm.toTextArea = isNaN; // Prevent this from being ran twice save(); textarea.parentNode.removeChild(cm.getWrapperElement()); textarea.style.display = ""; if (textarea.form) { off(textarea.form, "submit", save); if (typeof textarea.form.submit == "function") textarea.form.submit = realSubmit; } }; }; textarea.style.display = "none"; var cm = CodeMirror(function(node) { textarea.parentNode.insertBefore(node, textarea.nextSibling); }, options); return cm; }; // STRING STREAM // Fed to the mode parsers, provides helper functions to make // parsers more succinct. var StringStream = CodeMirror.StringStream = function(string, tabSize) { this.pos = this.start = 0; this.string = string; this.tabSize = tabSize || 8; this.lastColumnPos = this.lastColumnValue = 0; this.lineStart = 0; }; StringStream.prototype = { eol: function() {return this.pos >= this.string.length;}, sol: function() {return this.pos == this.lineStart;}, peek: function() {return this.string.charAt(this.pos) || undefined;}, next: function() { if (this.pos < this.string.length) return this.string.charAt(this.pos++); }, eat: function(match) { var ch = this.string.charAt(this.pos); if (typeof match == "string") var ok = ch == match; else var ok = ch && (match.test ? match.test(ch) : match(ch)); if (ok) {++this.pos; return ch;} }, eatWhile: function(match) { var start = this.pos; while (this.eat(match)){} return this.pos > start; }, eatSpace: function() { var start = this.pos; while (/[\s\u00a0]/.test(this.string.charAt(this.pos))) ++this.pos; return this.pos > start; }, skipToEnd: function() {this.pos = this.string.length;}, skipTo: function(ch) { var found = this.string.indexOf(ch, this.pos); if (found > -1) {this.pos = found; return true;} }, backUp: function(n) {this.pos -= n;}, column: function() { if (this.lastColumnPos < this.start) { this.lastColumnValue = countColumn(this.string, this.start, this.tabSize, this.lastColumnPos, this.lastColumnValue); this.lastColumnPos = this.start; } return this.lastColumnValue - (this.lineStart ? countColumn(this.string, this.lineStart, this.tabSize) : 0); }, indentation: function() { return countColumn(this.string, null, this.tabSize) - (this.lineStart ? countColumn(this.string, this.lineStart, this.tabSize) : 0); }, match: function(pattern, consume, caseInsensitive) { if (typeof pattern == "string") { var cased = function(str) {return caseInsensitive ? str.toLowerCase() : str;}; var substr = this.string.substr(this.pos, pattern.length); if (cased(substr) == cased(pattern)) { if (consume !== false) this.pos += pattern.length; return true; } } else { var match = this.string.slice(this.pos).match(pattern); if (match && match.index > 0) return null; if (match && consume !== false) this.pos += match[0].length; return match; } }, current: function(){return this.string.slice(this.start, this.pos);}, hideFirstChars: function(n, inner) { this.lineStart += n; try { return inner(); } finally { this.lineStart -= n; } } }; // TEXTMARKERS // Created with markText and setBookmark methods. A TextMarker is a // handle that can be used to clear or find a marked position in the // document. Line objects hold arrays (markedSpans) containing // {from, to, marker} object pointing to such marker objects, and // indicating that such a marker is present on that line. Multiple // lines may point to the same marker when it spans across lines. // The spans will have null for their from/to properties when the // marker continues beyond the start/end of the line. Markers have // links back to the lines they currently touch. var nextMarkerId = 0; var TextMarker = CodeMirror.TextMarker = function(doc, type) { this.lines = []; this.type = type; this.doc = doc; this.id = ++nextMarkerId; }; eventMixin(TextMarker); // Clear the marker. TextMarker.prototype.clear = function() { if (this.explicitlyCleared) return; var cm = this.doc.cm, withOp = cm && !cm.curOp; if (withOp) startOperation(cm); if (hasHandler(this, "clear")) { var found = this.find(); if (found) signalLater(this, "clear", found.from, found.to); } var min = null, max = null; for (var i = 0; i < this.lines.length; ++i) { var line = this.lines[i]; var span = getMarkedSpanFor(line.markedSpans, this); if (cm && !this.collapsed) regLineChange(cm, lineNo(line), "text"); else if (cm) { if (span.to != null) max = lineNo(line); if (span.from != null) min = lineNo(line); } line.markedSpans = removeMarkedSpan(line.markedSpans, span); if (span.from == null && this.collapsed && !lineIsHidden(this.doc, line) && cm) updateLineHeight(line, textHeight(cm.display)); } if (cm && this.collapsed && !cm.options.lineWrapping) for (var i = 0; i < this.lines.length; ++i) { var visual = visualLine(this.lines[i]), len = lineLength(visual); if (len > cm.display.maxLineLength) { cm.display.maxLine = visual; cm.display.maxLineLength = len; cm.display.maxLineChanged = true; } } if (min != null && cm && this.collapsed) regChange(cm, min, max + 1); this.lines.length = 0; this.explicitlyCleared = true; if (this.atomic && this.doc.cantEdit) { this.doc.cantEdit = false; if (cm) reCheckSelection(cm.doc); } if (cm) signalLater(cm, "markerCleared", cm, this); if (withOp) endOperation(cm); if (this.parent) this.parent.clear(); }; // Find the position of the marker in the document. Returns a {from, // to} object by default. Side can be passed to get a specific side // -- 0 (both), -1 (left), or 1 (right). When lineObj is true, the // Pos objects returned contain a line object, rather than a line // number (used to prevent looking up the same line twice). TextMarker.prototype.find = function(side, lineObj) { if (side == null && this.type == "bookmark") side = 1; var from, to; for (var i = 0; i < this.lines.length; ++i) { var line = this.lines[i]; var span = getMarkedSpanFor(line.markedSpans, this); if (span.from != null) { from = Pos(lineObj ? line : lineNo(line), span.from); if (side == -1) return from; } if (span.to != null) { to = Pos(lineObj ? line : lineNo(line), span.to); if (side == 1) return to; } } return from && {from: from, to: to}; }; // Signals that the marker's widget changed, and surrounding layout // should be recomputed. TextMarker.prototype.changed = function() { var pos = this.find(-1, true), widget = this, cm = this.doc.cm; if (!pos || !cm) return; runInOp(cm, function() { var line = pos.line, lineN = lineNo(pos.line); var view = findViewForLine(cm, lineN); if (view) { clearLineMeasurementCacheFor(view); cm.curOp.selectionChanged = cm.curOp.forceUpdate = true; } cm.curOp.updateMaxLine = true; if (!lineIsHidden(widget.doc, line) && widget.height != null) { var oldHeight = widget.height; widget.height = null; var dHeight = widgetHeight(widget) - oldHeight; if (dHeight) updateLineHeight(line, line.height + dHeight); } }); }; TextMarker.prototype.attachLine = function(line) { if (!this.lines.length && this.doc.cm) { var op = this.doc.cm.curOp; if (!op.maybeHiddenMarkers || indexOf(op.maybeHiddenMarkers, this) == -1) (op.maybeUnhiddenMarkers || (op.maybeUnhiddenMarkers = [])).push(this); } this.lines.push(line); }; TextMarker.prototype.detachLine = function(line) { this.lines.splice(indexOf(this.lines, line), 1); if (!this.lines.length && this.doc.cm) { var op = this.doc.cm.curOp; (op.maybeHiddenMarkers || (op.maybeHiddenMarkers = [])).push(this); } }; // Collapsed markers have unique ids, in order to be able to order // them, which is needed for uniquely determining an outer marker // when they overlap (they may nest, but not partially overlap). var nextMarkerId = 0; // Create a marker, wire it up to the right lines, and function markText(doc, from, to, options, type) { // Shared markers (across linked documents) are handled separately // (markTextShared will call out to this again, once per // document). if (options && options.shared) return markTextShared(doc, from, to, options, type); // Ensure we are in an operation. if (doc.cm && !doc.cm.curOp) return operation(doc.cm, markText)(doc, from, to, options, type); var marker = new TextMarker(doc, type), diff = cmp(from, to); if (options) copyObj(options, marker, false); // Don't connect empty markers unless clearWhenEmpty is false if (diff > 0 || diff == 0 && marker.clearWhenEmpty !== false) return marker; if (marker.replacedWith) { // Showing up as a widget implies collapsed (widget replaces text) marker.collapsed = true; marker.widgetNode = elt("span", [marker.replacedWith], "CodeMirror-widget"); if (!options.handleMouseEvents) marker.widgetNode.setAttribute("cm-ignore-events", "true"); if (options.insertLeft) marker.widgetNode.insertLeft = true; } if (marker.collapsed) { if (conflictingCollapsedRange(doc, from.line, from, to, marker) || from.line != to.line && conflictingCollapsedRange(doc, to.line, from, to, marker)) throw new Error("Inserting collapsed marker partially overlapping an existing one"); sawCollapsedSpans = true; } if (marker.addToHistory) addChangeToHistory(doc, {from: from, to: to, origin: "markText"}, doc.sel, NaN); var curLine = from.line, cm = doc.cm, updateMaxLine; doc.iter(curLine, to.line + 1, function(line) { if (cm && marker.collapsed && !cm.options.lineWrapping && visualLine(line) == cm.display.maxLine) updateMaxLine = true; if (marker.collapsed && curLine != from.line) updateLineHeight(line, 0); addMarkedSpan(line, new MarkedSpan(marker, curLine == from.line ? from.ch : null, curLine == to.line ? to.ch : null)); ++curLine; }); // lineIsHidden depends on the presence of the spans, so needs a second pass if (marker.collapsed) doc.iter(from.line, to.line + 1, function(line) { if (lineIsHidden(doc, line)) updateLineHeight(line, 0); }); if (marker.clearOnEnter) on(marker, "beforeCursorEnter", function() { marker.clear(); }); if (marker.readOnly) { sawReadOnlySpans = true; if (doc.history.done.length || doc.history.undone.length) doc.clearHistory(); } if (marker.collapsed) { marker.id = ++nextMarkerId; marker.atomic = true; } if (cm) { // Sync editor state if (updateMaxLine) cm.curOp.updateMaxLine = true; if (marker.collapsed) regChange(cm, from.line, to.line + 1); else if (marker.className || marker.title || marker.startStyle || marker.endStyle || marker.css) for (var i = from.line; i <= to.line; i++) regLineChange(cm, i, "text"); if (marker.atomic) reCheckSelection(cm.doc); signalLater(cm, "markerAdded", cm, marker); } return marker; } // SHARED TEXTMARKERS // A shared marker spans multiple linked documents. It is // implemented as a meta-marker-object controlling multiple normal // markers. var SharedTextMarker = CodeMirror.SharedTextMarker = function(markers, primary) { this.markers = markers; this.primary = primary; for (var i = 0; i < markers.length; ++i) markers[i].parent = this; }; eventMixin(SharedTextMarker); SharedTextMarker.prototype.clear = function() { if (this.explicitlyCleared) return; this.explicitlyCleared = true; for (var i = 0; i < this.markers.length; ++i) this.markers[i].clear(); signalLater(this, "clear"); }; SharedTextMarker.prototype.find = function(side, lineObj) { return this.primary.find(side, lineObj); }; function markTextShared(doc, from, to, options, type) { options = copyObj(options); options.shared = false; var markers = [markText(doc, from, to, options, type)], primary = markers[0]; var widget = options.widgetNode; linkedDocs(doc, function(doc) { if (widget) options.widgetNode = widget.cloneNode(true); markers.push(markText(doc, clipPos(doc, from), clipPos(doc, to), options, type)); for (var i = 0; i < doc.linked.length; ++i) if (doc.linked[i].isParent) return; primary = lst(markers); }); return new SharedTextMarker(markers, primary); } function findSharedMarkers(doc) { return doc.findMarks(Pos(doc.first, 0), doc.clipPos(Pos(doc.lastLine())), function(m) { return m.parent; }); } function copySharedMarkers(doc, markers) { for (var i = 0; i < markers.length; i++) { var marker = markers[i], pos = marker.find(); var mFrom = doc.clipPos(pos.from), mTo = doc.clipPos(pos.to); if (cmp(mFrom, mTo)) { var subMark = markText(doc, mFrom, mTo, marker.primary, marker.primary.type); marker.markers.push(subMark); subMark.parent = marker; } } } function detachSharedMarkers(markers) { for (var i = 0; i < markers.length; i++) { var marker = markers[i], linked = [marker.primary.doc];; linkedDocs(marker.primary.doc, function(d) { linked.push(d); }); for (var j = 0; j < marker.markers.length; j++) { var subMarker = marker.markers[j]; if (indexOf(linked, subMarker.doc) == -1) { subMarker.parent = null; marker.markers.splice(j--, 1); } } } } // TEXTMARKER SPANS function MarkedSpan(marker, from, to) { this.marker = marker; this.from = from; this.to = to; } // Search an array of spans for a span matching the given marker. function getMarkedSpanFor(spans, marker) { if (spans) for (var i = 0; i < spans.length; ++i) { var span = spans[i]; if (span.marker == marker) return span; } } // Remove a span from an array, returning undefined if no spans are // left (we don't store arrays for lines without spans). function removeMarkedSpan(spans, span) { for (var r, i = 0; i < spans.length; ++i) if (spans[i] != span) (r || (r = [])).push(spans[i]); return r; } // Add a span to a line. function addMarkedSpan(line, span) { line.markedSpans = line.markedSpans ? line.markedSpans.concat([span]) : [span]; span.marker.attachLine(line); } // Used for the algorithm that adjusts markers for a change in the // document. These functions cut an array of spans at a given // character position, returning an array of remaining chunks (or // undefined if nothing remains). function markedSpansBefore(old, startCh, isInsert) { if (old) for (var i = 0, nw; i < old.length; ++i) { var span = old[i], marker = span.marker; var startsBefore = span.from == null || (marker.inclusiveLeft ? span.from <= startCh : span.from < startCh); if (startsBefore || span.from == startCh && marker.type == "bookmark" && (!isInsert || !span.marker.insertLeft)) { var endsAfter = span.to == null || (marker.inclusiveRight ? span.to >= startCh : span.to > startCh); (nw || (nw = [])).push(new MarkedSpan(marker, span.from, endsAfter ? null : span.to)); } } return nw; } function markedSpansAfter(old, endCh, isInsert) { if (old) for (var i = 0, nw; i < old.length; ++i) { var span = old[i], marker = span.marker; var endsAfter = span.to == null || (marker.inclusiveRight ? span.to >= endCh : span.to > endCh); if (endsAfter || span.from == endCh && marker.type == "bookmark" && (!isInsert || span.marker.insertLeft)) { var startsBefore = span.from == null || (marker.inclusiveLeft ? span.from <= endCh : span.from < endCh); (nw || (nw = [])).push(new MarkedSpan(marker, startsBefore ? null : span.from - endCh, span.to == null ? null : span.to - endCh)); } } return nw; } // Given a change object, compute the new set of marker spans that // cover the line in which the change took place. Removes spans // entirely within the change, reconnects spans belonging to the // same marker that appear on both sides of the change, and cuts off // spans partially within the change. Returns an array of span // arrays with one element for each line in (after) the change. function stretchSpansOverChange(doc, change) { if (change.full) return null; var oldFirst = isLine(doc, change.from.line) && getLine(doc, change.from.line).markedSpans; var oldLast = isLine(doc, change.to.line) && getLine(doc, change.to.line).markedSpans; if (!oldFirst && !oldLast) return null; var startCh = change.from.ch, endCh = change.to.ch, isInsert = cmp(change.from, change.to) == 0; // Get the spans that 'stick out' on both sides var first = markedSpansBefore(oldFirst, startCh, isInsert); var last = markedSpansAfter(oldLast, endCh, isInsert); // Next, merge those two ends var sameLine = change.text.length == 1, offset = lst(change.text).length + (sameLine ? startCh : 0); if (first) { // Fix up .to properties of first for (var i = 0; i < first.length; ++i) { var span = first[i]; if (span.to == null) { var found = getMarkedSpanFor(last, span.marker); if (!found) span.to = startCh; else if (sameLine) span.to = found.to == null ? null : found.to + offset; } } } if (last) { // Fix up .from in last (or move them into first in case of sameLine) for (var i = 0; i < last.length; ++i) { var span = last[i]; if (span.to != null) span.to += offset; if (span.from == null) { var found = getMarkedSpanFor(first, span.marker); if (!found) { span.from = offset; if (sameLine) (first || (first = [])).push(span); } } else { span.from += offset; if (sameLine) (first || (first = [])).push(span); } } } // Make sure we didn't create any zero-length spans if (first) first = clearEmptySpans(first); if (last && last != first) last = clearEmptySpans(last); var newMarkers = [first]; if (!sameLine) { // Fill gap with whole-line-spans var gap = change.text.length - 2, gapMarkers; if (gap > 0 && first) for (var i = 0; i < first.length; ++i) if (first[i].to == null) (gapMarkers || (gapMarkers = [])).push(new MarkedSpan(first[i].marker, null, null)); for (var i = 0; i < gap; ++i) newMarkers.push(gapMarkers); newMarkers.push(last); } return newMarkers; } // Remove spans that are empty and don't have a clearWhenEmpty // option of false. function clearEmptySpans(spans) { for (var i = 0; i < spans.length; ++i) { var span = spans[i]; if (span.from != null && span.from == span.to && span.marker.clearWhenEmpty !== false) spans.splice(i--, 1); } if (!spans.length) return null; return spans; } // Used for un/re-doing changes from the history. Combines the // result of computing the existing spans with the set of spans that // existed in the history (so that deleting around a span and then // undoing brings back the span). function mergeOldSpans(doc, change) { var old = getOldSpans(doc, change); var stretched = stretchSpansOverChange(doc, change); if (!old) return stretched; if (!stretched) return old; for (var i = 0; i < old.length; ++i) { var oldCur = old[i], stretchCur = stretched[i]; if (oldCur && stretchCur) { spans: for (var j = 0; j < stretchCur.length; ++j) { var span = stretchCur[j]; for (var k = 0; k < oldCur.length; ++k) if (oldCur[k].marker == span.marker) continue spans; oldCur.push(span); } } else if (stretchCur) { old[i] = stretchCur; } } return old; } // Used to 'clip' out readOnly ranges when making a change. function removeReadOnlyRanges(doc, from, to) { var markers = null; doc.iter(from.line, to.line + 1, function(line) { if (line.markedSpans) for (var i = 0; i < line.markedSpans.length; ++i) { var mark = line.markedSpans[i].marker; if (mark.readOnly && (!markers || indexOf(markers, mark) == -1)) (markers || (markers = [])).push(mark); } }); if (!markers) return null; var parts = [{from: from, to: to}]; for (var i = 0; i < markers.length; ++i) { var mk = markers[i], m = mk.find(0); for (var j = 0; j < parts.length; ++j) { var p = parts[j]; if (cmp(p.to, m.from) < 0 || cmp(p.from, m.to) > 0) continue; var newParts = [j, 1], dfrom = cmp(p.from, m.from), dto = cmp(p.to, m.to); if (dfrom < 0 || !mk.inclusiveLeft && !dfrom) newParts.push({from: p.from, to: m.from}); if (dto > 0 || !mk.inclusiveRight && !dto) newParts.push({from: m.to, to: p.to}); parts.splice.apply(parts, newParts); j += newParts.length - 1; } } return parts; } // Connect or disconnect spans from a line. function detachMarkedSpans(line) { var spans = line.markedSpans; if (!spans) return; for (var i = 0; i < spans.length; ++i) spans[i].marker.detachLine(line); line.markedSpans = null; } function attachMarkedSpans(line, spans) { if (!spans) return; for (var i = 0; i < spans.length; ++i) spans[i].marker.attachLine(line); line.markedSpans = spans; } // Helpers used when computing which overlapping collapsed span // counts as the larger one. function extraLeft(marker) { return marker.inclusiveLeft ? -1 : 0; } function extraRight(marker) { return marker.inclusiveRight ? 1 : 0; } // Returns a number indicating which of two overlapping collapsed // spans is larger (and thus includes the other). Falls back to // comparing ids when the spans cover exactly the same range. function compareCollapsedMarkers(a, b) { var lenDiff = a.lines.length - b.lines.length; if (lenDiff != 0) return lenDiff; var aPos = a.find(), bPos = b.find(); var fromCmp = cmp(aPos.from, bPos.from) || extraLeft(a) - extraLeft(b); if (fromCmp) return -fromCmp; var toCmp = cmp(aPos.to, bPos.to) || extraRight(a) - extraRight(b); if (toCmp) return toCmp; return b.id - a.id; } // Find out whether a line ends or starts in a collapsed span. If // so, return the marker for that span. function collapsedSpanAtSide(line, start) { var sps = sawCollapsedSpans && line.markedSpans, found; if (sps) for (var sp, i = 0; i < sps.length; ++i) { sp = sps[i]; if (sp.marker.collapsed && (start ? sp.from : sp.to) == null && (!found || compareCollapsedMarkers(found, sp.marker) < 0)) found = sp.marker; } return found; } function collapsedSpanAtStart(line) { return collapsedSpanAtSide(line, true); } function collapsedSpanAtEnd(line) { return collapsedSpanAtSide(line, false); } // Test whether there exists a collapsed span that partially // overlaps (covers the start or end, but not both) of a new span. // Such overlap is not allowed. function conflictingCollapsedRange(doc, lineNo, from, to, marker) { var line = getLine(doc, lineNo); var sps = sawCollapsedSpans && line.markedSpans; if (sps) for (var i = 0; i < sps.length; ++i) { var sp = sps[i]; if (!sp.marker.collapsed) continue; var found = sp.marker.find(0); var fromCmp = cmp(found.from, from) || extraLeft(sp.marker) - extraLeft(marker); var toCmp = cmp(found.to, to) || extraRight(sp.marker) - extraRight(marker); if (fromCmp >= 0 && toCmp <= 0 || fromCmp <= 0 && toCmp >= 0) continue; if (fromCmp <= 0 && (sp.marker.inclusiveRight && marker.inclusiveLeft ? cmp(found.to, from) >= 0 : cmp(found.to, from) > 0) || fromCmp >= 0 && (sp.marker.inclusiveRight && marker.inclusiveLeft ? cmp(found.from, to) <= 0 : cmp(found.from, to) < 0)) return true; } } // A visual line is a line as drawn on the screen. Folding, for // example, can cause multiple logical lines to appear on the same // visual line. This finds the start of the visual line that the // given line is part of (usually that is the line itself). function visualLine(line) { var merged; while (merged = collapsedSpanAtStart(line)) line = merged.find(-1, true).line; return line; } // Returns an array of logical lines that continue the visual line // started by the argument, or undefined if there are no such lines. function visualLineContinued(line) { var merged, lines; while (merged = collapsedSpanAtEnd(line)) { line = merged.find(1, true).line; (lines || (lines = [])).push(line); } return lines; } // Get the line number of the start of the visual line that the // given line number is part of. function visualLineNo(doc, lineN) { var line = getLine(doc, lineN), vis = visualLine(line); if (line == vis) return lineN; return lineNo(vis); } // Get the line number of the start of the next visual line after // the given line. function visualLineEndNo(doc, lineN) { if (lineN > doc.lastLine()) return lineN; var line = getLine(doc, lineN), merged; if (!lineIsHidden(doc, line)) return lineN; while (merged = collapsedSpanAtEnd(line)) line = merged.find(1, true).line; return lineNo(line) + 1; } // Compute whether a line is hidden. Lines count as hidden when they // are part of a visual line that starts with another line, or when // they are entirely covered by collapsed, non-widget span. function lineIsHidden(doc, line) { var sps = sawCollapsedSpans && line.markedSpans; if (sps) for (var sp, i = 0; i < sps.length; ++i) { sp = sps[i]; if (!sp.marker.collapsed) continue; if (sp.from == null) return true; if (sp.marker.widgetNode) continue; if (sp.from == 0 && sp.marker.inclusiveLeft && lineIsHiddenInner(doc, line, sp)) return true; } } function lineIsHiddenInner(doc, line, span) { if (span.to == null) { var end = span.marker.find(1, true); return lineIsHiddenInner(doc, end.line, getMarkedSpanFor(end.line.markedSpans, span.marker)); } if (span.marker.inclusiveRight && span.to == line.text.length) return true; for (var sp, i = 0; i < line.markedSpans.length; ++i) { sp = line.markedSpans[i]; if (sp.marker.collapsed && !sp.marker.widgetNode && sp.from == span.to && (sp.to == null || sp.to != span.from) && (sp.marker.inclusiveLeft || span.marker.inclusiveRight) && lineIsHiddenInner(doc, line, sp)) return true; } } // LINE WIDGETS // Line widgets are block elements displayed above or below a line. var LineWidget = CodeMirror.LineWidget = function(doc, node, options) { if (options) for (var opt in options) if (options.hasOwnProperty(opt)) this[opt] = options[opt]; this.doc = doc; this.node = node; }; eventMixin(LineWidget); function adjustScrollWhenAboveVisible(cm, line, diff) { if (heightAtLine(line) < ((cm.curOp && cm.curOp.scrollTop) || cm.doc.scrollTop)) addToScrollPos(cm, null, diff); } LineWidget.prototype.clear = function() { var cm = this.doc.cm, ws = this.line.widgets, line = this.line, no = lineNo(line); if (no == null || !ws) return; for (var i = 0; i < ws.length; ++i) if (ws[i] == this) ws.splice(i--, 1); if (!ws.length) line.widgets = null; var height = widgetHeight(this); updateLineHeight(line, Math.max(0, line.height - height)); if (cm) runInOp(cm, function() { adjustScrollWhenAboveVisible(cm, line, -height); regLineChange(cm, no, "widget"); }); }; LineWidget.prototype.changed = function() { var oldH = this.height, cm = this.doc.cm, line = this.line; this.height = null; var diff = widgetHeight(this) - oldH; if (!diff) return; updateLineHeight(line, line.height + diff); if (cm) runInOp(cm, function() { cm.curOp.forceUpdate = true; adjustScrollWhenAboveVisible(cm, line, diff); }); }; function widgetHeight(widget) { if (widget.height != null) return widget.height; var cm = widget.doc.cm; if (!cm) return 0; if (!contains(document.body, widget.node)) { var parentStyle = "position: relative;"; if (widget.coverGutter) parentStyle += "margin-left: -" + cm.display.gutters.offsetWidth + "px;"; if (widget.noHScroll) parentStyle += "width: " + cm.display.wrapper.clientWidth + "px;"; removeChildrenAndAdd(cm.display.measure, elt("div", [widget.node], null, parentStyle)); } return widget.height = widget.node.parentNode.offsetHeight; } function addLineWidget(doc, handle, node, options) { var widget = new LineWidget(doc, node, options); var cm = doc.cm; if (cm && widget.noHScroll) cm.display.alignWidgets = true; changeLine(doc, handle, "widget", function(line) { var widgets = line.widgets || (line.widgets = []); if (widget.insertAt == null) widgets.push(widget); else widgets.splice(Math.min(widgets.length - 1, Math.max(0, widget.insertAt)), 0, widget); widget.line = line; if (cm && !lineIsHidden(doc, line)) { var aboveVisible = heightAtLine(line) < doc.scrollTop; updateLineHeight(line, line.height + widgetHeight(widget)); if (aboveVisible) addToScrollPos(cm, null, widget.height); cm.curOp.forceUpdate = true; } return true; }); return widget; } // LINE DATA STRUCTURE // Line objects. These hold state related to a line, including // highlighting info (the styles array). var Line = CodeMirror.Line = function(text, markedSpans, estimateHeight) { this.text = text; attachMarkedSpans(this, markedSpans); this.height = estimateHeight ? estimateHeight(this) : 1; }; eventMixin(Line); Line.prototype.lineNo = function() { return lineNo(this); }; // Change the content (text, markers) of a line. Automatically // invalidates cached information and tries to re-estimate the // line's height. function updateLine(line, text, markedSpans, estimateHeight) { line.text = text; if (line.stateAfter) line.stateAfter = null; if (line.styles) line.styles = null; if (line.order != null) line.order = null; detachMarkedSpans(line); attachMarkedSpans(line, markedSpans); var estHeight = estimateHeight ? estimateHeight(line) : 1; if (estHeight != line.height) updateLineHeight(line, estHeight); } // Detach a line from the document tree and its markers. function cleanUpLine(line) { line.parent = null; detachMarkedSpans(line); } function extractLineClasses(type, output) { if (type) for (;;) { var lineClass = type.match(/(?:^|\s+)line-(background-)?(\S+)/); if (!lineClass) break; type = type.slice(0, lineClass.index) + type.slice(lineClass.index + lineClass[0].length); var prop = lineClass[1] ? "bgClass" : "textClass"; if (output[prop] == null) output[prop] = lineClass[2]; else if (!(new RegExp("(?:^|\s)" + lineClass[2] + "(?:$|\s)")).test(output[prop])) output[prop] += " " + lineClass[2]; } return type; } function callBlankLine(mode, state) { if (mode.blankLine) return mode.blankLine(state); if (!mode.innerMode) return; var inner = CodeMirror.innerMode(mode, state); if (inner.mode.blankLine) return inner.mode.blankLine(inner.state); } function readToken(mode, stream, state, inner) { for (var i = 0; i < 10; i++) { if (inner) inner[0] = CodeMirror.innerMode(mode, state).mode; var style = mode.token(stream, state); if (stream.pos > stream.start) return style; } throw new Error("Mode " + mode.name + " failed to advance stream."); } // Utility for getTokenAt and getLineTokens function takeToken(cm, pos, precise, asArray) { function getObj(copy) { return {start: stream.start, end: stream.pos, string: stream.current(), type: style || null, state: copy ? copyState(doc.mode, state) : state}; } var doc = cm.doc, mode = doc.mode, style; pos = clipPos(doc, pos); var line = getLine(doc, pos.line), state = getStateBefore(cm, pos.line, precise); var stream = new StringStream(line.text, cm.options.tabSize), tokens; if (asArray) tokens = []; while ((asArray || stream.pos < pos.ch) && !stream.eol()) { stream.start = stream.pos; style = readToken(mode, stream, state); if (asArray) tokens.push(getObj(true)); } return asArray ? tokens : getObj(); } // Run the given mode's parser over a line, calling f for each token. function runMode(cm, text, mode, state, f, lineClasses, forceToEnd) { var flattenSpans = mode.flattenSpans; if (flattenSpans == null) flattenSpans = cm.options.flattenSpans; var curStart = 0, curStyle = null; var stream = new StringStream(text, cm.options.tabSize), style; var inner = cm.options.addModeClass && [null]; if (text == "") extractLineClasses(callBlankLine(mode, state), lineClasses); while (!stream.eol()) { if (stream.pos > cm.options.maxHighlightLength) { flattenSpans = false; if (forceToEnd) processLine(cm, text, state, stream.pos); stream.pos = text.length; style = null; } else { style = extractLineClasses(readToken(mode, stream, state, inner), lineClasses); } if (inner) { var mName = inner[0].name; if (mName) style = "m-" + (style ? mName + " " + style : mName); } if (!flattenSpans || curStyle != style) { while (curStart < stream.start) { curStart = Math.min(stream.start, curStart + 50000); f(curStart, curStyle); } curStyle = style; } stream.start = stream.pos; } while (curStart < stream.pos) { // Webkit seems to refuse to render text nodes longer than 57444 characters var pos = Math.min(stream.pos, curStart + 50000); f(pos, curStyle); curStart = pos; } } // Compute a style array (an array starting with a mode generation // -- for invalidation -- followed by pairs of end positions and // style strings), which is used to highlight the tokens on the // line. function highlightLine(cm, line, state, forceToEnd) { // A styles array always starts with a number identifying the // mode/overlays that it is based on (for easy invalidation). var st = [cm.state.modeGen], lineClasses = {}; // Compute the base array of styles runMode(cm, line.text, cm.doc.mode, state, function(end, style) { st.push(end, style); }, lineClasses, forceToEnd); // Run overlays, adjust style array. for (var o = 0; o < cm.state.overlays.length; ++o) { var overlay = cm.state.overlays[o], i = 1, at = 0; runMode(cm, line.text, overlay.mode, true, function(end, style) { var start = i; // Ensure there's a token end at the current position, and that i points at it while (at < end) { var i_end = st[i]; if (i_end > end) st.splice(i, 1, end, st[i+1], i_end); i += 2; at = Math.min(end, i_end); } if (!style) return; if (overlay.opaque) { st.splice(start, i - start, end, "cm-overlay " + style); i = start + 2; } else { for (; start < i; start += 2) { var cur = st[start+1]; st[start+1] = (cur ? cur + " " : "") + "cm-overlay " + style; } } }, lineClasses); } return {styles: st, classes: lineClasses.bgClass || lineClasses.textClass ? lineClasses : null}; } function getLineStyles(cm, line, updateFrontier) { if (!line.styles || line.styles[0] != cm.state.modeGen) { var state = getStateBefore(cm, lineNo(line)); var result = highlightLine(cm, line, line.text.length > cm.options.maxHighlightLength ? copyState(cm.doc.mode, state) : state); line.stateAfter = state; line.styles = result.styles; if (result.classes) line.styleClasses = result.classes; else if (line.styleClasses) line.styleClasses = null; if (updateFrontier === cm.doc.frontier) cm.doc.frontier++; } return line.styles; } // Lightweight form of highlight -- proceed over this line and // update state, but don't save a style array. Used for lines that // aren't currently visible. function processLine(cm, text, state, startAt) { var mode = cm.doc.mode; var stream = new StringStream(text, cm.options.tabSize); stream.start = stream.pos = startAt || 0; if (text == "") callBlankLine(mode, state); while (!stream.eol()) { readToken(mode, stream, state); stream.start = stream.pos; } } // Convert a style as returned by a mode (either null, or a string // containing one or more styles) to a CSS style. This is cached, // and also looks for line-wide styles. var styleToClassCache = {}, styleToClassCacheWithMode = {}; function interpretTokenStyle(style, options) { if (!style || /^\s*$/.test(style)) return null; var cache = options.addModeClass ? styleToClassCacheWithMode : styleToClassCache; return cache[style] || (cache[style] = style.replace(/\S+/g, "cm-$&")); } // Render the DOM representation of the text of a line. Also builds // up a 'line map', which points at the DOM nodes that represent // specific stretches of text, and is used by the measuring code. // The returned object contains the DOM node, this map, and // information about line-wide styles that were set by the mode. function buildLineContent(cm, lineView) { // The padding-right forces the element to have a 'border', which // is needed on Webkit to be able to get line-level bounding // rectangles for it (in measureChar). var content = elt("span", null, null, webkit ? "padding-right: .1px" : null); var builder = {pre: elt("pre", [content], "CodeMirror-line"), content: content, col: 0, pos: 0, cm: cm, trailingSpace: false, splitSpaces: (ie || webkit) && cm.getOption("lineWrapping")}; lineView.measure = {}; // Iterate over the logical lines that make up this visual line. for (var i = 0; i <= (lineView.rest ? lineView.rest.length : 0); i++) { var line = i ? lineView.rest[i - 1] : lineView.line, order; builder.pos = 0; builder.addToken = buildToken; // Optionally wire in some hacks into the token-rendering // algorithm, to deal with browser quirks. if (hasBadBidiRects(cm.display.measure) && (order = getOrder(line))) builder.addToken = buildTokenBadBidi(builder.addToken, order); builder.map = []; var allowFrontierUpdate = lineView != cm.display.externalMeasured && lineNo(line); insertLineContent(line, builder, getLineStyles(cm, line, allowFrontierUpdate)); if (line.styleClasses) { if (line.styleClasses.bgClass) builder.bgClass = joinClasses(line.styleClasses.bgClass, builder.bgClass || ""); if (line.styleClasses.textClass) builder.textClass = joinClasses(line.styleClasses.textClass, builder.textClass || ""); } // Ensure at least a single node is present, for measuring. if (builder.map.length == 0) builder.map.push(0, 0, builder.content.appendChild(zeroWidthElement(cm.display.measure))); // Store the map and a cache object for the current logical line if (i == 0) { lineView.measure.map = builder.map; lineView.measure.cache = {}; } else { (lineView.measure.maps || (lineView.measure.maps = [])).push(builder.map); (lineView.measure.caches || (lineView.measure.caches = [])).push({}); } } // See issue #2901 if (webkit) { var last = builder.content.lastChild if (/\bcm-tab\b/.test(last.className) || (last.querySelector && last.querySelector(".cm-tab"))) builder.content.className = "cm-tab-wrap-hack"; } signal(cm, "renderLine", cm, lineView.line, builder.pre); if (builder.pre.className) builder.textClass = joinClasses(builder.pre.className, builder.textClass || ""); return builder; } function defaultSpecialCharPlaceholder(ch) { var token = elt("span", "\u2022", "cm-invalidchar"); token.title = "\\u" + ch.charCodeAt(0).toString(16); token.setAttribute("aria-label", token.title); return token; } // Build up the DOM representation for a single token, and add it to // the line map. Takes care to render special characters separately. function buildToken(builder, text, style, startStyle, endStyle, title, css) { if (!text) return; var displayText = builder.splitSpaces ? splitSpaces(text, builder.trailingSpace) : text var special = builder.cm.state.specialChars, mustWrap = false; if (!special.test(text)) { builder.col += text.length; var content = document.createTextNode(displayText); builder.map.push(builder.pos, builder.pos + text.length, content); if (ie && ie_version < 9) mustWrap = true; builder.pos += text.length; } else { var content = document.createDocumentFragment(), pos = 0; while (true) { special.lastIndex = pos; var m = special.exec(text); var skipped = m ? m.index - pos : text.length - pos; if (skipped) { var txt = document.createTextNode(displayText.slice(pos, pos + skipped)); if (ie && ie_version < 9) content.appendChild(elt("span", [txt])); else content.appendChild(txt); builder.map.push(builder.pos, builder.pos + skipped, txt); builder.col += skipped; builder.pos += skipped; } if (!m) break; pos += skipped + 1; if (m[0] == "\t") { var tabSize = builder.cm.options.tabSize, tabWidth = tabSize - builder.col % tabSize; var txt = content.appendChild(elt("span", spaceStr(tabWidth), "cm-tab")); txt.setAttribute("role", "presentation"); txt.setAttribute("cm-text", "\t"); builder.col += tabWidth; } else if (m[0] == "\r" || m[0] == "\n") { var txt = content.appendChild(elt("span", m[0] == "\r" ? "\u240d" : "\u2424", "cm-invalidchar")); txt.setAttribute("cm-text", m[0]); builder.col += 1; } else { var txt = builder.cm.options.specialCharPlaceholder(m[0]); txt.setAttribute("cm-text", m[0]); if (ie && ie_version < 9) content.appendChild(elt("span", [txt])); else content.appendChild(txt); builder.col += 1; } builder.map.push(builder.pos, builder.pos + 1, txt); builder.pos++; } } builder.trailingSpace = displayText.charCodeAt(text.length - 1) == 32 if (style || startStyle || endStyle || mustWrap || css) { var fullStyle = style || ""; if (startStyle) fullStyle += startStyle; if (endStyle) fullStyle += endStyle; var token = elt("span", [content], fullStyle, css); if (title) token.title = title; return builder.content.appendChild(token); } builder.content.appendChild(content); } function splitSpaces(text, trailingBefore) { if (text.length > 1 && !/ /.test(text)) return text var spaceBefore = trailingBefore, result = "" for (var i = 0; i < text.length; i++) { var ch = text.charAt(i) if (ch == " " && spaceBefore && (i == text.length - 1 || text.charCodeAt(i + 1) == 32)) ch = "\u00a0" result += ch spaceBefore = ch == " " } return result } // Work around nonsense dimensions being reported for stretches of // right-to-left text. function buildTokenBadBidi(inner, order) { return function(builder, text, style, startStyle, endStyle, title, css) { style = style ? style + " cm-force-border" : "cm-force-border"; var start = builder.pos, end = start + text.length; for (;;) { // Find the part that overlaps with the start of this text for (var i = 0; i < order.length; i++) { var part = order[i]; if (part.to > start && part.from <= start) break; } if (part.to >= end) return inner(builder, text, style, startStyle, endStyle, title, css); inner(builder, text.slice(0, part.to - start), style, startStyle, null, title, css); startStyle = null; text = text.slice(part.to - start); start = part.to; } }; } function buildCollapsedSpan(builder, size, marker, ignoreWidget) { var widget = !ignoreWidget && marker.widgetNode; if (widget) builder.map.push(builder.pos, builder.pos + size, widget); if (!ignoreWidget && builder.cm.display.input.needsContentAttribute) { if (!widget) widget = builder.content.appendChild(document.createElement("span")); widget.setAttribute("cm-marker", marker.id); } if (widget) { builder.cm.display.input.setUneditable(widget); builder.content.appendChild(widget); } builder.pos += size; builder.trailingSpace = false } // Outputs a number of spans to make up a line, taking highlighting // and marked text into account. function insertLineContent(line, builder, styles) { var spans = line.markedSpans, allText = line.text, at = 0; if (!spans) { for (var i = 1; i < styles.length; i+=2) builder.addToken(builder, allText.slice(at, at = styles[i]), interpretTokenStyle(styles[i+1], builder.cm.options)); return; } var len = allText.length, pos = 0, i = 1, text = "", style, css; var nextChange = 0, spanStyle, spanEndStyle, spanStartStyle, title, collapsed; for (;;) { if (nextChange == pos) { // Update current marker set spanStyle = spanEndStyle = spanStartStyle = title = css = ""; collapsed = null; nextChange = Infinity; var foundBookmarks = [], endStyles for (var j = 0; j < spans.length; ++j) { var sp = spans[j], m = sp.marker; if (m.type == "bookmark" && sp.from == pos && m.widgetNode) { foundBookmarks.push(m); } else if (sp.from <= pos && (sp.to == null || sp.to > pos || m.collapsed && sp.to == pos && sp.from == pos)) { if (sp.to != null && sp.to != pos && nextChange > sp.to) { nextChange = sp.to; spanEndStyle = ""; } if (m.className) spanStyle += " " + m.className; if (m.css) css = (css ? css + ";" : "") + m.css; if (m.startStyle && sp.from == pos) spanStartStyle += " " + m.startStyle; if (m.endStyle && sp.to == nextChange) (endStyles || (endStyles = [])).push(m.endStyle, sp.to) if (m.title && !title) title = m.title; if (m.collapsed && (!collapsed || compareCollapsedMarkers(collapsed.marker, m) < 0)) collapsed = sp; } else if (sp.from > pos && nextChange > sp.from) { nextChange = sp.from; } } if (endStyles) for (var j = 0; j < endStyles.length; j += 2) if (endStyles[j + 1] == nextChange) spanEndStyle += " " + endStyles[j] if (!collapsed || collapsed.from == pos) for (var j = 0; j < foundBookmarks.length; ++j) buildCollapsedSpan(builder, 0, foundBookmarks[j]); if (collapsed && (collapsed.from || 0) == pos) { buildCollapsedSpan(builder, (collapsed.to == null ? len + 1 : collapsed.to) - pos, collapsed.marker, collapsed.from == null); if (collapsed.to == null) return; if (collapsed.to == pos) collapsed = false; } } if (pos >= len) break; var upto = Math.min(len, nextChange); while (true) { if (text) { var end = pos + text.length; if (!collapsed) { var tokenText = end > upto ? text.slice(0, upto - pos) : text; builder.addToken(builder, tokenText, style ? style + spanStyle : spanStyle, spanStartStyle, pos + tokenText.length == nextChange ? spanEndStyle : "", title, css); } if (end >= upto) {text = text.slice(upto - pos); pos = upto; break;} pos = end; spanStartStyle = ""; } text = allText.slice(at, at = styles[i++]); style = interpretTokenStyle(styles[i++], builder.cm.options); } } } // DOCUMENT DATA STRUCTURE // By default, updates that start and end at the beginning of a line // are treated specially, in order to make the association of line // widgets and marker elements with the text behave more intuitive. function isWholeLineUpdate(doc, change) { return change.from.ch == 0 && change.to.ch == 0 && lst(change.text) == "" && (!doc.cm || doc.cm.options.wholeLineUpdateBefore); } // Perform a change on the document data structure. function updateDoc(doc, change, markedSpans, estimateHeight) { function spansFor(n) {return markedSpans ? markedSpans[n] : null;} function update(line, text, spans) { updateLine(line, text, spans, estimateHeight); signalLater(line, "change", line, change); } function linesFor(start, end) { for (var i = start, result = []; i < end; ++i) result.push(new Line(text[i], spansFor(i), estimateHeight)); return result; } var from = change.from, to = change.to, text = change.text; var firstLine = getLine(doc, from.line), lastLine = getLine(doc, to.line); var lastText = lst(text), lastSpans = spansFor(text.length - 1), nlines = to.line - from.line; // Adjust the line structure if (change.full) { doc.insert(0, linesFor(0, text.length)); doc.remove(text.length, doc.size - text.length); } else if (isWholeLineUpdate(doc, change)) { // This is a whole-line replace. Treated specially to make // sure line objects move the way they are supposed to. var added = linesFor(0, text.length - 1); update(lastLine, lastLine.text, lastSpans); if (nlines) doc.remove(from.line, nlines); if (added.length) doc.insert(from.line, added); } else if (firstLine == lastLine) { if (text.length == 1) { update(firstLine, firstLine.text.slice(0, from.ch) + lastText + firstLine.text.slice(to.ch), lastSpans); } else { var added = linesFor(1, text.length - 1); added.push(new Line(lastText + firstLine.text.slice(to.ch), lastSpans, estimateHeight)); update(firstLine, firstLine.text.slice(0, from.ch) + text[0], spansFor(0)); doc.insert(from.line + 1, added); } } else if (text.length == 1) { update(firstLine, firstLine.text.slice(0, from.ch) + text[0] + lastLine.text.slice(to.ch), spansFor(0)); doc.remove(from.line + 1, nlines); } else { update(firstLine, firstLine.text.slice(0, from.ch) + text[0], spansFor(0)); update(lastLine, lastText + lastLine.text.slice(to.ch), lastSpans); var added = linesFor(1, text.length - 1); if (nlines > 1) doc.remove(from.line + 1, nlines - 1); doc.insert(from.line + 1, added); } signalLater(doc, "change", doc, change); } // The document is represented as a BTree consisting of leaves, with // chunk of lines in them, and branches, with up to ten leaves or // other branch nodes below them. The top node is always a branch // node, and is the document object itself (meaning it has // additional methods and properties). // // All nodes have parent links. The tree is used both to go from // line numbers to line objects, and to go from objects to numbers. // It also indexes by height, and is used to convert between height // and line object, and to find the total height of the document. // // See also http://marijnhaverbeke.nl/blog/codemirror-line-tree.html function LeafChunk(lines) { this.lines = lines; this.parent = null; for (var i = 0, height = 0; i < lines.length; ++i) { lines[i].parent = this; height += lines[i].height; } this.height = height; } LeafChunk.prototype = { chunkSize: function() { return this.lines.length; }, // Remove the n lines at offset 'at'. removeInner: function(at, n) { for (var i = at, e = at + n; i < e; ++i) { var line = this.lines[i]; this.height -= line.height; cleanUpLine(line); signalLater(line, "delete"); } this.lines.splice(at, n); }, // Helper used to collapse a small branch into a single leaf. collapse: function(lines) { lines.push.apply(lines, this.lines); }, // Insert the given array of lines at offset 'at', count them as // having the given height. insertInner: function(at, lines, height) { this.height += height; this.lines = this.lines.slice(0, at).concat(lines).concat(this.lines.slice(at)); for (var i = 0; i < lines.length; ++i) lines[i].parent = this; }, // Used to iterate over a part of the tree. iterN: function(at, n, op) { for (var e = at + n; at < e; ++at) if (op(this.lines[at])) return true; } }; function BranchChunk(children) { this.children = children; var size = 0, height = 0; for (var i = 0; i < children.length; ++i) { var ch = children[i]; size += ch.chunkSize(); height += ch.height; ch.parent = this; } this.size = size; this.height = height; this.parent = null; } BranchChunk.prototype = { chunkSize: function() { return this.size; }, removeInner: function(at, n) { this.size -= n; for (var i = 0; i < this.children.length; ++i) { var child = this.children[i], sz = child.chunkSize(); if (at < sz) { var rm = Math.min(n, sz - at), oldHeight = child.height; child.removeInner(at, rm); this.height -= oldHeight - child.height; if (sz == rm) { this.children.splice(i--, 1); child.parent = null; } if ((n -= rm) == 0) break; at = 0; } else at -= sz; } // If the result is smaller than 25 lines, ensure that it is a // single leaf node. if (this.size - n < 25 && (this.children.length > 1 || !(this.children[0] instanceof LeafChunk))) { var lines = []; this.collapse(lines); this.children = [new LeafChunk(lines)]; this.children[0].parent = this; } }, collapse: function(lines) { for (var i = 0; i < this.children.length; ++i) this.children[i].collapse(lines); }, insertInner: function(at, lines, height) { this.size += lines.length; this.height += height; for (var i = 0; i < this.children.length; ++i) { var child = this.children[i], sz = child.chunkSize(); if (at <= sz) { child.insertInner(at, lines, height); if (child.lines && child.lines.length > 50) { // To avoid memory thrashing when child.lines is huge (e.g. first view of a large file), it's never spliced. // Instead, small slices are taken. They're taken in order because sequential memory accesses are fastest. var remaining = child.lines.length % 25 + 25 for (var pos = remaining; pos < child.lines.length;) { var leaf = new LeafChunk(child.lines.slice(pos, pos += 25)); child.height -= leaf.height; this.children.splice(++i, 0, leaf); leaf.parent = this; } child.lines = child.lines.slice(0, remaining); this.maybeSpill(); } break; } at -= sz; } }, // When a node has grown, check whether it should be split. maybeSpill: function() { if (this.children.length <= 10) return; var me = this; do { var spilled = me.children.splice(me.children.length - 5, 5); var sibling = new BranchChunk(spilled); if (!me.parent) { // Become the parent node var copy = new BranchChunk(me.children); copy.parent = me; me.children = [copy, sibling]; me = copy; } else { me.size -= sibling.size; me.height -= sibling.height; var myIndex = indexOf(me.parent.children, me); me.parent.children.splice(myIndex + 1, 0, sibling); } sibling.parent = me.parent; } while (me.children.length > 10); me.parent.maybeSpill(); }, iterN: function(at, n, op) { for (var i = 0; i < this.children.length; ++i) { var child = this.children[i], sz = child.chunkSize(); if (at < sz) { var used = Math.min(n, sz - at); if (child.iterN(at, used, op)) return true; if ((n -= used) == 0) break; at = 0; } else at -= sz; } } }; var nextDocId = 0; var Doc = CodeMirror.Doc = function(text, mode, firstLine, lineSep) { if (!(this instanceof Doc)) return new Doc(text, mode, firstLine, lineSep); if (firstLine == null) firstLine = 0; BranchChunk.call(this, [new LeafChunk([new Line("", null)])]); this.first = firstLine; this.scrollTop = this.scrollLeft = 0; this.cantEdit = false; this.cleanGeneration = 1; this.frontier = firstLine; var start = Pos(firstLine, 0); this.sel = simpleSelection(start); this.history = new History(null); this.id = ++nextDocId; this.modeOption = mode; this.lineSep = lineSep; this.extend = false; if (typeof text == "string") text = this.splitLines(text); updateDoc(this, {from: start, to: start, text: text}); setSelection(this, simpleSelection(start), sel_dontScroll); }; Doc.prototype = createObj(BranchChunk.prototype, { constructor: Doc, // Iterate over the document. Supports two forms -- with only one // argument, it calls that for each line in the document. With // three, it iterates over the range given by the first two (with // the second being non-inclusive). iter: function(from, to, op) { if (op) this.iterN(from - this.first, to - from, op); else this.iterN(this.first, this.first + this.size, from); }, // Non-public interface for adding and removing lines. insert: function(at, lines) { var height = 0; for (var i = 0; i < lines.length; ++i) height += lines[i].height; this.insertInner(at - this.first, lines, height); }, remove: function(at, n) { this.removeInner(at - this.first, n); }, // From here, the methods are part of the public interface. Most // are also available from CodeMirror (editor) instances. getValue: function(lineSep) { var lines = getLines(this, this.first, this.first + this.size); if (lineSep === false) return lines; return lines.join(lineSep || this.lineSeparator()); }, setValue: docMethodOp(function(code) { var top = Pos(this.first, 0), last = this.first + this.size - 1; makeChange(this, {from: top, to: Pos(last, getLine(this, last).text.length), text: this.splitLines(code), origin: "setValue", full: true}, true); setSelection(this, simpleSelection(top)); }), replaceRange: function(code, from, to, origin) { from = clipPos(this, from); to = to ? clipPos(this, to) : from; replaceRange(this, code, from, to, origin); }, getRange: function(from, to, lineSep) { var lines = getBetween(this, clipPos(this, from), clipPos(this, to)); if (lineSep === false) return lines; return lines.join(lineSep || this.lineSeparator()); }, getLine: function(line) {var l = this.getLineHandle(line); return l && l.text;}, getLineHandle: function(line) {if (isLine(this, line)) return getLine(this, line);}, getLineNumber: function(line) {return lineNo(line);}, getLineHandleVisualStart: function(line) { if (typeof line == "number") line = getLine(this, line); return visualLine(line); }, lineCount: function() {return this.size;}, firstLine: function() {return this.first;}, lastLine: function() {return this.first + this.size - 1;}, clipPos: function(pos) {return clipPos(this, pos);}, getCursor: function(start) { var range = this.sel.primary(), pos; if (start == null || start == "head") pos = range.head; else if (start == "anchor") pos = range.anchor; else if (start == "end" || start == "to" || start === false) pos = range.to(); else pos = range.from(); return pos; }, listSelections: function() { return this.sel.ranges; }, somethingSelected: function() {return this.sel.somethingSelected();}, setCursor: docMethodOp(function(line, ch, options) { setSimpleSelection(this, clipPos(this, typeof line == "number" ? Pos(line, ch || 0) : line), null, options); }), setSelection: docMethodOp(function(anchor, head, options) { setSimpleSelection(this, clipPos(this, anchor), clipPos(this, head || anchor), options); }), extendSelection: docMethodOp(function(head, other, options) { extendSelection(this, clipPos(this, head), other && clipPos(this, other), options); }), extendSelections: docMethodOp(function(heads, options) { extendSelections(this, clipPosArray(this, heads), options); }), extendSelectionsBy: docMethodOp(function(f, options) { var heads = map(this.sel.ranges, f); extendSelections(this, clipPosArray(this, heads), options); }), setSelections: docMethodOp(function(ranges, primary, options) { if (!ranges.length) return; for (var i = 0, out = []; i < ranges.length; i++) out[i] = new Range(clipPos(this, ranges[i].anchor), clipPos(this, ranges[i].head)); if (primary == null) primary = Math.min(ranges.length - 1, this.sel.primIndex); setSelection(this, normalizeSelection(out, primary), options); }), addSelection: docMethodOp(function(anchor, head, options) { var ranges = this.sel.ranges.slice(0); ranges.push(new Range(clipPos(this, anchor), clipPos(this, head || anchor))); setSelection(this, normalizeSelection(ranges, ranges.length - 1), options); }), getSelection: function(lineSep) { var ranges = this.sel.ranges, lines; for (var i = 0; i < ranges.length; i++) { var sel = getBetween(this, ranges[i].from(), ranges[i].to()); lines = lines ? lines.concat(sel) : sel; } if (lineSep === false) return lines; else return lines.join(lineSep || this.lineSeparator()); }, getSelections: function(lineSep) { var parts = [], ranges = this.sel.ranges; for (var i = 0; i < ranges.length; i++) { var sel = getBetween(this, ranges[i].from(), ranges[i].to()); if (lineSep !== false) sel = sel.join(lineSep || this.lineSeparator()); parts[i] = sel; } return parts; }, replaceSelection: function(code, collapse, origin) { var dup = []; for (var i = 0; i < this.sel.ranges.length; i++) dup[i] = code; this.replaceSelections(dup, collapse, origin || "+input"); }, replaceSelections: docMethodOp(function(code, collapse, origin) { var changes = [], sel = this.sel; for (var i = 0; i < sel.ranges.length; i++) { var range = sel.ranges[i]; changes[i] = {from: range.from(), to: range.to(), text: this.splitLines(code[i]), origin: origin}; } var newSel = collapse && collapse != "end" && computeReplacedSel(this, changes, collapse); for (var i = changes.length - 1; i >= 0; i--) makeChange(this, changes[i]); if (newSel) setSelectionReplaceHistory(this, newSel); else if (this.cm) ensureCursorVisible(this.cm); }), undo: docMethodOp(function() {makeChangeFromHistory(this, "undo");}), redo: docMethodOp(function() {makeChangeFromHistory(this, "redo");}), undoSelection: docMethodOp(function() {makeChangeFromHistory(this, "undo", true);}), redoSelection: docMethodOp(function() {makeChangeFromHistory(this, "redo", true);}), setExtending: function(val) {this.extend = val;}, getExtending: function() {return this.extend;}, historySize: function() { var hist = this.history, done = 0, undone = 0; for (var i = 0; i < hist.done.length; i++) if (!hist.done[i].ranges) ++done; for (var i = 0; i < hist.undone.length; i++) if (!hist.undone[i].ranges) ++undone; return {undo: done, redo: undone}; }, clearHistory: function() {this.history = new History(this.history.maxGeneration);}, markClean: function() { this.cleanGeneration = this.changeGeneration(true); }, changeGeneration: function(forceSplit) { if (forceSplit) this.history.lastOp = this.history.lastSelOp = this.history.lastOrigin = null; return this.history.generation; }, isClean: function (gen) { return this.history.generation == (gen || this.cleanGeneration); }, getHistory: function() { return {done: copyHistoryArray(this.history.done), undone: copyHistoryArray(this.history.undone)}; }, setHistory: function(histData) { var hist = this.history = new History(this.history.maxGeneration); hist.done = copyHistoryArray(histData.done.slice(0), null, true); hist.undone = copyHistoryArray(histData.undone.slice(0), null, true); }, addLineClass: docMethodOp(function(handle, where, cls) { return changeLine(this, handle, where == "gutter" ? "gutter" : "class", function(line) { var prop = where == "text" ? "textClass" : where == "background" ? "bgClass" : where == "gutter" ? "gutterClass" : "wrapClass"; if (!line[prop]) line[prop] = cls; else if (classTest(cls).test(line[prop])) return false; else line[prop] += " " + cls; return true; }); }), removeLineClass: docMethodOp(function(handle, where, cls) { return changeLine(this, handle, where == "gutter" ? "gutter" : "class", function(line) { var prop = where == "text" ? "textClass" : where == "background" ? "bgClass" : where == "gutter" ? "gutterClass" : "wrapClass"; var cur = line[prop]; if (!cur) return false; else if (cls == null) line[prop] = null; else { var found = cur.match(classTest(cls)); if (!found) return false; var end = found.index + found[0].length; line[prop] = cur.slice(0, found.index) + (!found.index || end == cur.length ? "" : " ") + cur.slice(end) || null; } return true; }); }), addLineWidget: docMethodOp(function(handle, node, options) { return addLineWidget(this, handle, node, options); }), removeLineWidget: function(widget) { widget.clear(); }, markText: function(from, to, options) { return markText(this, clipPos(this, from), clipPos(this, to), options, options && options.type || "range"); }, setBookmark: function(pos, options) { var realOpts = {replacedWith: options && (options.nodeType == null ? options.widget : options), insertLeft: options && options.insertLeft, clearWhenEmpty: false, shared: options && options.shared, handleMouseEvents: options && options.handleMouseEvents}; pos = clipPos(this, pos); return markText(this, pos, pos, realOpts, "bookmark"); }, findMarksAt: function(pos) { pos = clipPos(this, pos); var markers = [], spans = getLine(this, pos.line).markedSpans; if (spans) for (var i = 0; i < spans.length; ++i) { var span = spans[i]; if ((span.from == null || span.from <= pos.ch) && (span.to == null || span.to >= pos.ch)) markers.push(span.marker.parent || span.marker); } return markers; }, findMarks: function(from, to, filter) { from = clipPos(this, from); to = clipPos(this, to); var found = [], lineNo = from.line; this.iter(from.line, to.line + 1, function(line) { var spans = line.markedSpans; if (spans) for (var i = 0; i < spans.length; i++) { var span = spans[i]; if (!(span.to != null && lineNo == from.line && from.ch >= span.to || span.from == null && lineNo != from.line || span.from != null && lineNo == to.line && span.from >= to.ch) && (!filter || filter(span.marker))) found.push(span.marker.parent || span.marker); } ++lineNo; }); return found; }, getAllMarks: function() { var markers = []; this.iter(function(line) { var sps = line.markedSpans; if (sps) for (var i = 0; i < sps.length; ++i) if (sps[i].from != null) markers.push(sps[i].marker); }); return markers; }, posFromIndex: function(off) { var ch, lineNo = this.first, sepSize = this.lineSeparator().length; this.iter(function(line) { var sz = line.text.length + sepSize; if (sz > off) { ch = off; return true; } off -= sz; ++lineNo; }); return clipPos(this, Pos(lineNo, ch)); }, indexFromPos: function (coords) { coords = clipPos(this, coords); var index = coords.ch; if (coords.line < this.first || coords.ch < 0) return 0; var sepSize = this.lineSeparator().length; this.iter(this.first, coords.line, function (line) { index += line.text.length + sepSize; }); return index; }, copy: function(copyHistory) { var doc = new Doc(getLines(this, this.first, this.first + this.size), this.modeOption, this.first, this.lineSep); doc.scrollTop = this.scrollTop; doc.scrollLeft = this.scrollLeft; doc.sel = this.sel; doc.extend = false; if (copyHistory) { doc.history.undoDepth = this.history.undoDepth; doc.setHistory(this.getHistory()); } return doc; }, linkedDoc: function(options) { if (!options) options = {}; var from = this.first, to = this.first + this.size; if (options.from != null && options.from > from) from = options.from; if (options.to != null && options.to < to) to = options.to; var copy = new Doc(getLines(this, from, to), options.mode || this.modeOption, from, this.lineSep); if (options.sharedHist) copy.history = this.history; (this.linked || (this.linked = [])).push({doc: copy, sharedHist: options.sharedHist}); copy.linked = [{doc: this, isParent: true, sharedHist: options.sharedHist}]; copySharedMarkers(copy, findSharedMarkers(this)); return copy; }, unlinkDoc: function(other) { if (other instanceof CodeMirror) other = other.doc; if (this.linked) for (var i = 0; i < this.linked.length; ++i) { var link = this.linked[i]; if (link.doc != other) continue; this.linked.splice(i, 1); other.unlinkDoc(this); detachSharedMarkers(findSharedMarkers(this)); break; } // If the histories were shared, split them again if (other.history == this.history) { var splitIds = [other.id]; linkedDocs(other, function(doc) {splitIds.push(doc.id);}, true); other.history = new History(null); other.history.done = copyHistoryArray(this.history.done, splitIds); other.history.undone = copyHistoryArray(this.history.undone, splitIds); } }, iterLinkedDocs: function(f) {linkedDocs(this, f);}, getMode: function() {return this.mode;}, getEditor: function() {return this.cm;}, splitLines: function(str) { if (this.lineSep) return str.split(this.lineSep); return splitLinesAuto(str); }, lineSeparator: function() { return this.lineSep || "\n"; } }); // Public alias. Doc.prototype.eachLine = Doc.prototype.iter; // Set up methods on CodeMirror's prototype to redirect to the editor's document. var dontDelegate = "iter insert remove copy getEditor constructor".split(" "); for (var prop in Doc.prototype) if (Doc.prototype.hasOwnProperty(prop) && indexOf(dontDelegate, prop) < 0) CodeMirror.prototype[prop] = (function(method) { return function() {return method.apply(this.doc, arguments);}; })(Doc.prototype[prop]); eventMixin(Doc); // Call f for all linked documents. function linkedDocs(doc, f, sharedHistOnly) { function propagate(doc, skip, sharedHist) { if (doc.linked) for (var i = 0; i < doc.linked.length; ++i) { var rel = doc.linked[i]; if (rel.doc == skip) continue; var shared = sharedHist && rel.sharedHist; if (sharedHistOnly && !shared) continue; f(rel.doc, shared); propagate(rel.doc, doc, shared); } } propagate(doc, null, true); } // Attach a document to an editor. function attachDoc(cm, doc) { if (doc.cm) throw new Error("This document is already in use."); cm.doc = doc; doc.cm = cm; estimateLineHeights(cm); loadMode(cm); if (!cm.options.lineWrapping) findMaxLine(cm); cm.options.mode = doc.modeOption; regChange(cm); } // LINE UTILITIES // Find the line object corresponding to the given line number. function getLine(doc, n) { n -= doc.first; if (n < 0 || n >= doc.size) throw new Error("There is no line " + (n + doc.first) + " in the document."); for (var chunk = doc; !chunk.lines;) { for (var i = 0;; ++i) { var child = chunk.children[i], sz = child.chunkSize(); if (n < sz) { chunk = child; break; } n -= sz; } } return chunk.lines[n]; } // Get the part of a document between two positions, as an array of // strings. function getBetween(doc, start, end) { var out = [], n = start.line; doc.iter(start.line, end.line + 1, function(line) { var text = line.text; if (n == end.line) text = text.slice(0, end.ch); if (n == start.line) text = text.slice(start.ch); out.push(text); ++n; }); return out; } // Get the lines between from and to, as array of strings. function getLines(doc, from, to) { var out = []; doc.iter(from, to, function(line) { out.push(line.text); }); return out; } // Update the height of a line, propagating the height change // upwards to parent nodes. function updateLineHeight(line, height) { var diff = height - line.height; if (diff) for (var n = line; n; n = n.parent) n.height += diff; } // Given a line object, find its line number by walking up through // its parent links. function lineNo(line) { if (line.parent == null) return null; var cur = line.parent, no = indexOf(cur.lines, line); for (var chunk = cur.parent; chunk; cur = chunk, chunk = chunk.parent) { for (var i = 0;; ++i) { if (chunk.children[i] == cur) break; no += chunk.children[i].chunkSize(); } } return no + cur.first; } // Find the line at the given vertical position, using the height // information in the document tree. function lineAtHeight(chunk, h) { var n = chunk.first; outer: do { for (var i = 0; i < chunk.children.length; ++i) { var child = chunk.children[i], ch = child.height; if (h < ch) { chunk = child; continue outer; } h -= ch; n += child.chunkSize(); } return n; } while (!chunk.lines); for (var i = 0; i < chunk.lines.length; ++i) { var line = chunk.lines[i], lh = line.height; if (h < lh) break; h -= lh; } return n + i; } // Find the height above the given line. function heightAtLine(lineObj) { lineObj = visualLine(lineObj); var h = 0, chunk = lineObj.parent; for (var i = 0; i < chunk.lines.length; ++i) { var line = chunk.lines[i]; if (line == lineObj) break; else h += line.height; } for (var p = chunk.parent; p; chunk = p, p = chunk.parent) { for (var i = 0; i < p.children.length; ++i) { var cur = p.children[i]; if (cur == chunk) break; else h += cur.height; } } return h; } // Get the bidi ordering for the given line (and cache it). Returns // false for lines that are fully left-to-right, and an array of // BidiSpan objects otherwise. function getOrder(line) { var order = line.order; if (order == null) order = line.order = bidiOrdering(line.text); return order; } // HISTORY function History(startGen) { // Arrays of change events and selections. Doing something adds an // event to done and clears undo. Undoing moves events from done // to undone, redoing moves them in the other direction. this.done = []; this.undone = []; this.undoDepth = Infinity; // Used to track when changes can be merged into a single undo // event this.lastModTime = this.lastSelTime = 0; this.lastOp = this.lastSelOp = null; this.lastOrigin = this.lastSelOrigin = null; // Used by the isClean() method this.generation = this.maxGeneration = startGen || 1; } // Create a history change event from an updateDoc-style change // object. function historyChangeFromChange(doc, change) { var histChange = {from: copyPos(change.from), to: changeEnd(change), text: getBetween(doc, change.from, change.to)}; attachLocalSpans(doc, histChange, change.from.line, change.to.line + 1); linkedDocs(doc, function(doc) {attachLocalSpans(doc, histChange, change.from.line, change.to.line + 1);}, true); return histChange; } // Pop all selection events off the end of a history array. Stop at // a change event. function clearSelectionEvents(array) { while (array.length) { var last = lst(array); if (last.ranges) array.pop(); else break; } } // Find the top change event in the history. Pop off selection // events that are in the way. function lastChangeEvent(hist, force) { if (force) { clearSelectionEvents(hist.done); return lst(hist.done); } else if (hist.done.length && !lst(hist.done).ranges) { return lst(hist.done); } else if (hist.done.length > 1 && !hist.done[hist.done.length - 2].ranges) { hist.done.pop(); return lst(hist.done); } } // Register a change in the history. Merges changes that are within // a single operation, or are close together with an origin that // allows merging (starting with "+") into a single event. function addChangeToHistory(doc, change, selAfter, opId) { var hist = doc.history; hist.undone.length = 0; var time = +new Date, cur; if ((hist.lastOp == opId || hist.lastOrigin == change.origin && change.origin && ((change.origin.charAt(0) == "+" && doc.cm && hist.lastModTime > time - doc.cm.options.historyEventDelay) || change.origin.charAt(0) == "*")) && (cur = lastChangeEvent(hist, hist.lastOp == opId))) { // Merge this change into the last event var last = lst(cur.changes); if (cmp(change.from, change.to) == 0 && cmp(change.from, last.to) == 0) { // Optimized case for simple insertion -- don't want to add // new changesets for every character typed last.to = changeEnd(change); } else { // Add new sub-event cur.changes.push(historyChangeFromChange(doc, change)); } } else { // Can not be merged, start a new event. var before = lst(hist.done); if (!before || !before.ranges) pushSelectionToHistory(doc.sel, hist.done); cur = {changes: [historyChangeFromChange(doc, change)], generation: hist.generation}; hist.done.push(cur); while (hist.done.length > hist.undoDepth) { hist.done.shift(); if (!hist.done[0].ranges) hist.done.shift(); } } hist.done.push(selAfter); hist.generation = ++hist.maxGeneration; hist.lastModTime = hist.lastSelTime = time; hist.lastOp = hist.lastSelOp = opId; hist.lastOrigin = hist.lastSelOrigin = change.origin; if (!last) signal(doc, "historyAdded"); } function selectionEventCanBeMerged(doc, origin, prev, sel) { var ch = origin.charAt(0); return ch == "*" || ch == "+" && prev.ranges.length == sel.ranges.length && prev.somethingSelected() == sel.somethingSelected() && new Date - doc.history.lastSelTime <= (doc.cm ? doc.cm.options.historyEventDelay : 500); } // Called whenever the selection changes, sets the new selection as // the pending selection in the history, and pushes the old pending // selection into the 'done' array when it was significantly // different (in number of selected ranges, emptiness, or time). function addSelectionToHistory(doc, sel, opId, options) { var hist = doc.history, origin = options && options.origin; // A new event is started when the previous origin does not match // the current, or the origins don't allow matching. Origins // starting with * are always merged, those starting with + are // merged when similar and close together in time. if (opId == hist.lastSelOp || (origin && hist.lastSelOrigin == origin && (hist.lastModTime == hist.lastSelTime && hist.lastOrigin == origin || selectionEventCanBeMerged(doc, origin, lst(hist.done), sel)))) hist.done[hist.done.length - 1] = sel; else pushSelectionToHistory(sel, hist.done); hist.lastSelTime = +new Date; hist.lastSelOrigin = origin; hist.lastSelOp = opId; if (options && options.clearRedo !== false) clearSelectionEvents(hist.undone); } function pushSelectionToHistory(sel, dest) { var top = lst(dest); if (!(top && top.ranges && top.equals(sel))) dest.push(sel); } // Used to store marked span information in the history. function attachLocalSpans(doc, change, from, to) { var existing = change["spans_" + doc.id], n = 0; doc.iter(Math.max(doc.first, from), Math.min(doc.first + doc.size, to), function(line) { if (line.markedSpans) (existing || (existing = change["spans_" + doc.id] = {}))[n] = line.markedSpans; ++n; }); } // When un/re-doing restores text containing marked spans, those // that have been explicitly cleared should not be restored. function removeClearedSpans(spans) { if (!spans) return null; for (var i = 0, out; i < spans.length; ++i) { if (spans[i].marker.explicitlyCleared) { if (!out) out = spans.slice(0, i); } else if (out) out.push(spans[i]); } return !out ? spans : out.length ? out : null; } // Retrieve and filter the old marked spans stored in a change event. function getOldSpans(doc, change) { var found = change["spans_" + doc.id]; if (!found) return null; for (var i = 0, nw = []; i < change.text.length; ++i) nw.push(removeClearedSpans(found[i])); return nw; } // Used both to provide a JSON-safe object in .getHistory, and, when // detaching a document, to split the history in two function copyHistoryArray(events, newGroup, instantiateSel) { for (var i = 0, copy = []; i < events.length; ++i) { var event = events[i]; if (event.ranges) { copy.push(instantiateSel ? Selection.prototype.deepCopy.call(event) : event); continue; } var changes = event.changes, newChanges = []; copy.push({changes: newChanges}); for (var j = 0; j < changes.length; ++j) { var change = changes[j], m; newChanges.push({from: change.from, to: change.to, text: change.text}); if (newGroup) for (var prop in change) if (m = prop.match(/^spans_(\d+)$/)) { if (indexOf(newGroup, Number(m[1])) > -1) { lst(newChanges)[prop] = change[prop]; delete change[prop]; } } } } return copy; } // Rebasing/resetting history to deal with externally-sourced changes function rebaseHistSelSingle(pos, from, to, diff) { if (to < pos.line) { pos.line += diff; } else if (from < pos.line) { pos.line = from; pos.ch = 0; } } // Tries to rebase an array of history events given a change in the // document. If the change touches the same lines as the event, the // event, and everything 'behind' it, is discarded. If the change is // before the event, the event's positions are updated. Uses a // copy-on-write scheme for the positions, to avoid having to // reallocate them all on every rebase, but also avoid problems with // shared position objects being unsafely updated. function rebaseHistArray(array, from, to, diff) { for (var i = 0; i < array.length; ++i) { var sub = array[i], ok = true; if (sub.ranges) { if (!sub.copied) { sub = array[i] = sub.deepCopy(); sub.copied = true; } for (var j = 0; j < sub.ranges.length; j++) { rebaseHistSelSingle(sub.ranges[j].anchor, from, to, diff); rebaseHistSelSingle(sub.ranges[j].head, from, to, diff); } continue; } for (var j = 0; j < sub.changes.length; ++j) { var cur = sub.changes[j]; if (to < cur.from.line) { cur.from = Pos(cur.from.line + diff, cur.from.ch); cur.to = Pos(cur.to.line + diff, cur.to.ch); } else if (from <= cur.to.line) { ok = false; break; } } if (!ok) { array.splice(0, i + 1); i = 0; } } } function rebaseHist(hist, change) { var from = change.from.line, to = change.to.line, diff = change.text.length - (to - from) - 1; rebaseHistArray(hist.done, from, to, diff); rebaseHistArray(hist.undone, from, to, diff); } // EVENT UTILITIES // Due to the fact that we still support jurassic IE versions, some // compatibility wrappers are needed. var e_preventDefault = CodeMirror.e_preventDefault = function(e) { if (e.preventDefault) e.preventDefault(); else e.returnValue = false; }; var e_stopPropagation = CodeMirror.e_stopPropagation = function(e) { if (e.stopPropagation) e.stopPropagation(); else e.cancelBubble = true; }; function e_defaultPrevented(e) { return e.defaultPrevented != null ? e.defaultPrevented : e.returnValue == false; } var e_stop = CodeMirror.e_stop = function(e) {e_preventDefault(e); e_stopPropagation(e);}; function e_target(e) {return e.target || e.srcElement;} function e_button(e) { var b = e.which; if (b == null) { if (e.button & 1) b = 1; else if (e.button & 2) b = 3; else if (e.button & 4) b = 2; } if (mac && e.ctrlKey && b == 1) b = 3; return b; } // EVENT HANDLING // Lightweight event framework. on/off also work on DOM nodes, // registering native DOM handlers. var on = CodeMirror.on = function(emitter, type, f) { if (emitter.addEventListener) emitter.addEventListener(type, f, false); else if (emitter.attachEvent) emitter.attachEvent("on" + type, f); else { var map = emitter._handlers || (emitter._handlers = {}); var arr = map[type] || (map[type] = []); arr.push(f); } }; var noHandlers = [] function getHandlers(emitter, type, copy) { var arr = emitter._handlers && emitter._handlers[type] if (copy) return arr && arr.length > 0 ? arr.slice() : noHandlers else return arr || noHandlers } var off = CodeMirror.off = function(emitter, type, f) { if (emitter.removeEventListener) emitter.removeEventListener(type, f, false); else if (emitter.detachEvent) emitter.detachEvent("on" + type, f); else { var handlers = getHandlers(emitter, type, false) for (var i = 0; i < handlers.length; ++i) if (handlers[i] == f) { handlers.splice(i, 1); break; } } }; var signal = CodeMirror.signal = function(emitter, type /*, values...*/) { var handlers = getHandlers(emitter, type, true) if (!handlers.length) return; var args = Array.prototype.slice.call(arguments, 2); for (var i = 0; i < handlers.length; ++i) handlers[i].apply(null, args); }; var orphanDelayedCallbacks = null; // Often, we want to signal events at a point where we are in the // middle of some work, but don't want the handler to start calling // other methods on the editor, which might be in an inconsistent // state or simply not expect any other events to happen. // signalLater looks whether there are any handlers, and schedules // them to be executed when the last operation ends, or, if no // operation is active, when a timeout fires. function signalLater(emitter, type /*, values...*/) { var arr = getHandlers(emitter, type, false) if (!arr.length) return; var args = Array.prototype.slice.call(arguments, 2), list; if (operationGroup) { list = operationGroup.delayedCallbacks; } else if (orphanDelayedCallbacks) { list = orphanDelayedCallbacks; } else { list = orphanDelayedCallbacks = []; setTimeout(fireOrphanDelayed, 0); } function bnd(f) {return function(){f.apply(null, args);};}; for (var i = 0; i < arr.length; ++i) list.push(bnd(arr[i])); } function fireOrphanDelayed() { var delayed = orphanDelayedCallbacks; orphanDelayedCallbacks = null; for (var i = 0; i < delayed.length; ++i) delayed[i](); } // The DOM events that CodeMirror handles can be overridden by // registering a (non-DOM) handler on the editor for the event name, // and preventDefault-ing the event in that handler. function signalDOMEvent(cm, e, override) { if (typeof e == "string") e = {type: e, preventDefault: function() { this.defaultPrevented = true; }}; signal(cm, override || e.type, cm, e); return e_defaultPrevented(e) || e.codemirrorIgnore; } function signalCursorActivity(cm) { var arr = cm._handlers && cm._handlers.cursorActivity; if (!arr) return; var set = cm.curOp.cursorActivityHandlers || (cm.curOp.cursorActivityHandlers = []); for (var i = 0; i < arr.length; ++i) if (indexOf(set, arr[i]) == -1) set.push(arr[i]); } function hasHandler(emitter, type) { return getHandlers(emitter, type).length > 0 } // Add on and off methods to a constructor's prototype, to make // registering events on such objects more convenient. function eventMixin(ctor) { ctor.prototype.on = function(type, f) {on(this, type, f);}; ctor.prototype.off = function(type, f) {off(this, type, f);}; } // MISC UTILITIES // Number of pixels added to scroller and sizer to hide scrollbar var scrollerGap = 30; // Returned or thrown by various protocols to signal 'I'm not // handling this'. var Pass = CodeMirror.Pass = {toString: function(){return "CodeMirror.Pass";}}; // Reused option objects for setSelection & friends var sel_dontScroll = {scroll: false}, sel_mouse = {origin: "*mouse"}, sel_move = {origin: "+move"}; function Delayed() {this.id = null;} Delayed.prototype.set = function(ms, f) { clearTimeout(this.id); this.id = setTimeout(f, ms); }; // Counts the column offset in a string, taking tabs into account. // Used mostly to find indentation. var countColumn = CodeMirror.countColumn = function(string, end, tabSize, startIndex, startValue) { if (end == null) { end = string.search(/[^\s\u00a0]/); if (end == -1) end = string.length; } for (var i = startIndex || 0, n = startValue || 0;;) { var nextTab = string.indexOf("\t", i); if (nextTab < 0 || nextTab >= end) return n + (end - i); n += nextTab - i; n += tabSize - (n % tabSize); i = nextTab + 1; } }; // The inverse of countColumn -- find the offset that corresponds to // a particular column. var findColumn = CodeMirror.findColumn = function(string, goal, tabSize) { for (var pos = 0, col = 0;;) { var nextTab = string.indexOf("\t", pos); if (nextTab == -1) nextTab = string.length; var skipped = nextTab - pos; if (nextTab == string.length || col + skipped >= goal) return pos + Math.min(skipped, goal - col); col += nextTab - pos; col += tabSize - (col % tabSize); pos = nextTab + 1; if (col >= goal) return pos; } } var spaceStrs = [""]; function spaceStr(n) { while (spaceStrs.length <= n) spaceStrs.push(lst(spaceStrs) + " "); return spaceStrs[n]; } function lst(arr) { return arr[arr.length-1]; } var selectInput = function(node) { node.select(); }; if (ios) // Mobile Safari apparently has a bug where select() is broken. selectInput = function(node) { node.selectionStart = 0; node.selectionEnd = node.value.length; }; else if (ie) // Suppress mysterious IE10 errors selectInput = function(node) { try { node.select(); } catch(_e) {} }; function indexOf(array, elt) { for (var i = 0; i < array.length; ++i) if (array[i] == elt) return i; return -1; } function map(array, f) { var out = []; for (var i = 0; i < array.length; i++) out[i] = f(array[i], i); return out; } function insertSorted(array, value, score) { var pos = 0, priority = score(value) while (pos < array.length && score(array[pos]) <= priority) pos++ array.splice(pos, 0, value) } function nothing() {} function createObj(base, props) { var inst; if (Object.create) { inst = Object.create(base); } else { nothing.prototype = base; inst = new nothing(); } if (props) copyObj(props, inst); return inst; }; function copyObj(obj, target, overwrite) { if (!target) target = {}; for (var prop in obj) if (obj.hasOwnProperty(prop) && (overwrite !== false || !target.hasOwnProperty(prop))) target[prop] = obj[prop]; return target; } function bind(f) { var args = Array.prototype.slice.call(arguments, 1); return function(){return f.apply(null, args);}; } var nonASCIISingleCaseWordChar = /[\u00df\u0587\u0590-\u05f4\u0600-\u06ff\u3040-\u309f\u30a0-\u30ff\u3400-\u4db5\u4e00-\u9fcc\uac00-\ud7af]/; var isWordCharBasic = CodeMirror.isWordChar = function(ch) { return /\w/.test(ch) || ch > "\x80" && (ch.toUpperCase() != ch.toLowerCase() || nonASCIISingleCaseWordChar.test(ch)); }; function isWordChar(ch, helper) { if (!helper) return isWordCharBasic(ch); if (helper.source.indexOf("\\w") > -1 && isWordCharBasic(ch)) return true; return helper.test(ch); } function isEmpty(obj) { for (var n in obj) if (obj.hasOwnProperty(n) && obj[n]) return false; return true; } // Extending unicode characters. A series of a non-extending char + // any number of extending chars is treated as a single unit as far // as editing and measuring is concerned. This is not fully correct, // since some scripts/fonts/browsers also treat other configurations // of code points as a group. var extendingChars = /[\u0300-\u036f\u0483-\u0489\u0591-\u05bd\u05bf\u05c1\u05c2\u05c4\u05c5\u05c7\u0610-\u061a\u064b-\u065e\u0670\u06d6-\u06dc\u06de-\u06e4\u06e7\u06e8\u06ea-\u06ed\u0711\u0730-\u074a\u07a6-\u07b0\u07eb-\u07f3\u0816-\u0819\u081b-\u0823\u0825-\u0827\u0829-\u082d\u0900-\u0902\u093c\u0941-\u0948\u094d\u0951-\u0955\u0962\u0963\u0981\u09bc\u09be\u09c1-\u09c4\u09cd\u09d7\u09e2\u09e3\u0a01\u0a02\u0a3c\u0a41\u0a42\u0a47\u0a48\u0a4b-\u0a4d\u0a51\u0a70\u0a71\u0a75\u0a81\u0a82\u0abc\u0ac1-\u0ac5\u0ac7\u0ac8\u0acd\u0ae2\u0ae3\u0b01\u0b3c\u0b3e\u0b3f\u0b41-\u0b44\u0b4d\u0b56\u0b57\u0b62\u0b63\u0b82\u0bbe\u0bc0\u0bcd\u0bd7\u0c3e-\u0c40\u0c46-\u0c48\u0c4a-\u0c4d\u0c55\u0c56\u0c62\u0c63\u0cbc\u0cbf\u0cc2\u0cc6\u0ccc\u0ccd\u0cd5\u0cd6\u0ce2\u0ce3\u0d3e\u0d41-\u0d44\u0d4d\u0d57\u0d62\u0d63\u0dca\u0dcf\u0dd2-\u0dd4\u0dd6\u0ddf\u0e31\u0e34-\u0e3a\u0e47-\u0e4e\u0eb1\u0eb4-\u0eb9\u0ebb\u0ebc\u0ec8-\u0ecd\u0f18\u0f19\u0f35\u0f37\u0f39\u0f71-\u0f7e\u0f80-\u0f84\u0f86\u0f87\u0f90-\u0f97\u0f99-\u0fbc\u0fc6\u102d-\u1030\u1032-\u1037\u1039\u103a\u103d\u103e\u1058\u1059\u105e-\u1060\u1071-\u1074\u1082\u1085\u1086\u108d\u109d\u135f\u1712-\u1714\u1732-\u1734\u1752\u1753\u1772\u1773\u17b7-\u17bd\u17c6\u17c9-\u17d3\u17dd\u180b-\u180d\u18a9\u1920-\u1922\u1927\u1928\u1932\u1939-\u193b\u1a17\u1a18\u1a56\u1a58-\u1a5e\u1a60\u1a62\u1a65-\u1a6c\u1a73-\u1a7c\u1a7f\u1b00-\u1b03\u1b34\u1b36-\u1b3a\u1b3c\u1b42\u1b6b-\u1b73\u1b80\u1b81\u1ba2-\u1ba5\u1ba8\u1ba9\u1c2c-\u1c33\u1c36\u1c37\u1cd0-\u1cd2\u1cd4-\u1ce0\u1ce2-\u1ce8\u1ced\u1dc0-\u1de6\u1dfd-\u1dff\u200c\u200d\u20d0-\u20f0\u2cef-\u2cf1\u2de0-\u2dff\u302a-\u302f\u3099\u309a\ua66f-\ua672\ua67c\ua67d\ua6f0\ua6f1\ua802\ua806\ua80b\ua825\ua826\ua8c4\ua8e0-\ua8f1\ua926-\ua92d\ua947-\ua951\ua980-\ua982\ua9b3\ua9b6-\ua9b9\ua9bc\uaa29-\uaa2e\uaa31\uaa32\uaa35\uaa36\uaa43\uaa4c\uaab0\uaab2-\uaab4\uaab7\uaab8\uaabe\uaabf\uaac1\uabe5\uabe8\uabed\udc00-\udfff\ufb1e\ufe00-\ufe0f\ufe20-\ufe26\uff9e\uff9f]/; function isExtendingChar(ch) { return ch.charCodeAt(0) >= 768 && extendingChars.test(ch); } // DOM UTILITIES function elt(tag, content, className, style) { var e = document.createElement(tag); if (className) e.className = className; if (style) e.style.cssText = style; if (typeof content == "string") e.appendChild(document.createTextNode(content)); else if (content) for (var i = 0; i < content.length; ++i) e.appendChild(content[i]); return e; } var range; if (document.createRange) range = function(node, start, end, endNode) { var r = document.createRange(); r.setEnd(endNode || node, end); r.setStart(node, start); return r; }; else range = function(node, start, end) { var r = document.body.createTextRange(); try { r.moveToElementText(node.parentNode); } catch(e) { return r; } r.collapse(true); r.moveEnd("character", end); r.moveStart("character", start); return r; }; function removeChildren(e) { for (var count = e.childNodes.length; count > 0; --count) e.removeChild(e.firstChild); return e; } function removeChildrenAndAdd(parent, e) { return removeChildren(parent).appendChild(e); } var contains = CodeMirror.contains = function(parent, child) { if (child.nodeType == 3) // Android browser always returns false when child is a textnode child = child.parentNode; if (parent.contains) return parent.contains(child); do { if (child.nodeType == 11) child = child.host; if (child == parent) return true; } while (child = child.parentNode); }; function activeElt() { var activeElement = document.activeElement; while (activeElement && activeElement.root && activeElement.root.activeElement) activeElement = activeElement.root.activeElement; return activeElement; } // Older versions of IE throws unspecified error when touching // document.activeElement in some cases (during loading, in iframe) if (ie && ie_version < 11) activeElt = function() { try { return document.activeElement; } catch(e) { return document.body; } }; function classTest(cls) { return new RegExp("(^|\\s)" + cls + "(?:$|\\s)\\s*"); } var rmClass = CodeMirror.rmClass = function(node, cls) { var current = node.className; var match = classTest(cls).exec(current); if (match) { var after = current.slice(match.index + match[0].length); node.className = current.slice(0, match.index) + (after ? match[1] + after : ""); } }; var addClass = CodeMirror.addClass = function(node, cls) { var current = node.className; if (!classTest(cls).test(current)) node.className += (current ? " " : "") + cls; }; function joinClasses(a, b) { var as = a.split(" "); for (var i = 0; i < as.length; i++) if (as[i] && !classTest(as[i]).test(b)) b += " " + as[i]; return b; } // WINDOW-WIDE EVENTS // These must be handled carefully, because naively registering a // handler for each editor will cause the editors to never be // garbage collected. function forEachCodeMirror(f) { if (!document.body.getElementsByClassName) return; var byClass = document.body.getElementsByClassName("CodeMirror"); for (var i = 0; i < byClass.length; i++) { var cm = byClass[i].CodeMirror; if (cm) f(cm); } } var globalsRegistered = false; function ensureGlobalHandlers() { if (globalsRegistered) return; registerGlobalHandlers(); globalsRegistered = true; } function registerGlobalHandlers() { // When the window resizes, we need to refresh active editors. var resizeTimer; on(window, "resize", function() { if (resizeTimer == null) resizeTimer = setTimeout(function() { resizeTimer = null; forEachCodeMirror(onResize); }, 100); }); // When the window loses focus, we want to show the editor as blurred on(window, "blur", function() { forEachCodeMirror(onBlur); }); } // FEATURE DETECTION // Detect drag-and-drop var dragAndDrop = function() { // There is *some* kind of drag-and-drop support in IE6-8, but I // couldn't get it to work yet. if (ie && ie_version < 9) return false; var div = elt('div'); return "draggable" in div || "dragDrop" in div; }(); var zwspSupported; function zeroWidthElement(measure) { if (zwspSupported == null) { var test = elt("span", "\u200b"); removeChildrenAndAdd(measure, elt("span", [test, document.createTextNode("x")])); if (measure.firstChild.offsetHeight != 0) zwspSupported = test.offsetWidth <= 1 && test.offsetHeight > 2 && !(ie && ie_version < 8); } var node = zwspSupported ? elt("span", "\u200b") : elt("span", "\u00a0", null, "display: inline-block; width: 1px; margin-right: -1px"); node.setAttribute("cm-text", ""); return node; } // Feature-detect IE's crummy client rect reporting for bidi text var badBidiRects; function hasBadBidiRects(measure) { if (badBidiRects != null) return badBidiRects; var txt = removeChildrenAndAdd(measure, document.createTextNode("A\u062eA")); var r0 = range(txt, 0, 1).getBoundingClientRect(); var r1 = range(txt, 1, 2).getBoundingClientRect(); removeChildren(measure); if (!r0 || r0.left == r0.right) return false; // Safari returns null in some cases (#2780) return badBidiRects = (r1.right - r0.right < 3); } // See if "".split is the broken IE version, if so, provide an // alternative way to split lines. var splitLinesAuto = CodeMirror.splitLines = "\n\nb".split(/\n/).length != 3 ? function(string) { var pos = 0, result = [], l = string.length; while (pos <= l) { var nl = string.indexOf("\n", pos); if (nl == -1) nl = string.length; var line = string.slice(pos, string.charAt(nl - 1) == "\r" ? nl - 1 : nl); var rt = line.indexOf("\r"); if (rt != -1) { result.push(line.slice(0, rt)); pos += rt + 1; } else { result.push(line); pos = nl + 1; } } return result; } : function(string){return string.split(/\r\n?|\n/);}; var hasSelection = window.getSelection ? function(te) { try { return te.selectionStart != te.selectionEnd; } catch(e) { return false; } } : function(te) { try {var range = te.ownerDocument.selection.createRange();} catch(e) {} if (!range || range.parentElement() != te) return false; return range.compareEndPoints("StartToEnd", range) != 0; }; var hasCopyEvent = (function() { var e = elt("div"); if ("oncopy" in e) return true; e.setAttribute("oncopy", "return;"); return typeof e.oncopy == "function"; })(); var badZoomedRects = null; function hasBadZoomedRects(measure) { if (badZoomedRects != null) return badZoomedRects; var node = removeChildrenAndAdd(measure, elt("span", "x")); var normal = node.getBoundingClientRect(); var fromRange = range(node, 0, 1).getBoundingClientRect(); return badZoomedRects = Math.abs(normal.left - fromRange.left) > 1; } // KEY NAMES var keyNames = CodeMirror.keyNames = { 3: "Enter", 8: "Backspace", 9: "Tab", 13: "Enter", 16: "Shift", 17: "Ctrl", 18: "Alt", 19: "Pause", 20: "CapsLock", 27: "Esc", 32: "Space", 33: "PageUp", 34: "PageDown", 35: "End", 36: "Home", 37: "Left", 38: "Up", 39: "Right", 40: "Down", 44: "PrintScrn", 45: "Insert", 46: "Delete", 59: ";", 61: "=", 91: "Mod", 92: "Mod", 93: "Mod", 106: "*", 107: "=", 109: "-", 110: ".", 111: "/", 127: "Delete", 173: "-", 186: ";", 187: "=", 188: ",", 189: "-", 190: ".", 191: "/", 192: "`", 219: "[", 220: "\\", 221: "]", 222: "'", 63232: "Up", 63233: "Down", 63234: "Left", 63235: "Right", 63272: "Delete", 63273: "Home", 63275: "End", 63276: "PageUp", 63277: "PageDown", 63302: "Insert" }; (function() { // Number keys for (var i = 0; i < 10; i++) keyNames[i + 48] = keyNames[i + 96] = String(i); // Alphabetic keys for (var i = 65; i <= 90; i++) keyNames[i] = String.fromCharCode(i); // Function keys for (var i = 1; i <= 12; i++) keyNames[i + 111] = keyNames[i + 63235] = "F" + i; })(); // BIDI HELPERS function iterateBidiSections(order, from, to, f) { if (!order) return f(from, to, "ltr"); var found = false; for (var i = 0; i < order.length; ++i) { var part = order[i]; if (part.from < to && part.to > from || from == to && part.to == from) { f(Math.max(part.from, from), Math.min(part.to, to), part.level == 1 ? "rtl" : "ltr"); found = true; } } if (!found) f(from, to, "ltr"); } function bidiLeft(part) { return part.level % 2 ? part.to : part.from; } function bidiRight(part) { return part.level % 2 ? part.from : part.to; } function lineLeft(line) { var order = getOrder(line); return order ? bidiLeft(order[0]) : 0; } function lineRight(line) { var order = getOrder(line); if (!order) return line.text.length; return bidiRight(lst(order)); } function lineStart(cm, lineN) { var line = getLine(cm.doc, lineN); var visual = visualLine(line); if (visual != line) lineN = lineNo(visual); var order = getOrder(visual); var ch = !order ? 0 : order[0].level % 2 ? lineRight(visual) : lineLeft(visual); return Pos(lineN, ch); } function lineEnd(cm, lineN) { var merged, line = getLine(cm.doc, lineN); while (merged = collapsedSpanAtEnd(line)) { line = merged.find(1, true).line; lineN = null; } var order = getOrder(line); var ch = !order ? line.text.length : order[0].level % 2 ? lineLeft(line) : lineRight(line); return Pos(lineN == null ? lineNo(line) : lineN, ch); } function lineStartSmart(cm, pos) { var start = lineStart(cm, pos.line); var line = getLine(cm.doc, start.line); var order = getOrder(line); if (!order || order[0].level == 0) { var firstNonWS = Math.max(0, line.text.search(/\S/)); var inWS = pos.line == start.line && pos.ch <= firstNonWS && pos.ch; return Pos(start.line, inWS ? 0 : firstNonWS); } return start; } function compareBidiLevel(order, a, b) { var linedir = order[0].level; if (a == linedir) return true; if (b == linedir) return false; return a < b; } var bidiOther; function getBidiPartAt(order, pos) { bidiOther = null; for (var i = 0, found; i < order.length; ++i) { var cur = order[i]; if (cur.from < pos && cur.to > pos) return i; if ((cur.from == pos || cur.to == pos)) { if (found == null) { found = i; } else if (compareBidiLevel(order, cur.level, order[found].level)) { if (cur.from != cur.to) bidiOther = found; return i; } else { if (cur.from != cur.to) bidiOther = i; return found; } } } return found; } function moveInLine(line, pos, dir, byUnit) { if (!byUnit) return pos + dir; do pos += dir; while (pos > 0 && isExtendingChar(line.text.charAt(pos))); return pos; } // This is needed in order to move 'visually' through bi-directional // text -- i.e., pressing left should make the cursor go left, even // when in RTL text. The tricky part is the 'jumps', where RTL and // LTR text touch each other. This often requires the cursor offset // to move more than one unit, in order to visually move one unit. function moveVisually(line, start, dir, byUnit) { var bidi = getOrder(line); if (!bidi) return moveLogically(line, start, dir, byUnit); var pos = getBidiPartAt(bidi, start), part = bidi[pos]; var target = moveInLine(line, start, part.level % 2 ? -dir : dir, byUnit); for (;;) { if (target > part.from && target < part.to) return target; if (target == part.from || target == part.to) { if (getBidiPartAt(bidi, target) == pos) return target; part = bidi[pos += dir]; return (dir > 0) == part.level % 2 ? part.to : part.from; } else { part = bidi[pos += dir]; if (!part) return null; if ((dir > 0) == part.level % 2) target = moveInLine(line, part.to, -1, byUnit); else target = moveInLine(line, part.from, 1, byUnit); } } } function moveLogically(line, start, dir, byUnit) { var target = start + dir; if (byUnit) while (target > 0 && isExtendingChar(line.text.charAt(target))) target += dir; return target < 0 || target > line.text.length ? null : target; } // Bidirectional ordering algorithm // See http://unicode.org/reports/tr9/tr9-13.html for the algorithm // that this (partially) implements. // One-char codes used for character types: // L (L): Left-to-Right // R (R): Right-to-Left // r (AL): Right-to-Left Arabic // 1 (EN): European Number // + (ES): European Number Separator // % (ET): European Number Terminator // n (AN): Arabic Number // , (CS): Common Number Separator // m (NSM): Non-Spacing Mark // b (BN): Boundary Neutral // s (B): Paragraph Separator // t (S): Segment Separator // w (WS): Whitespace // N (ON): Other Neutrals // Returns null if characters are ordered as they appear // (left-to-right), or an array of sections ({from, to, level} // objects) in the order in which they occur visually. var bidiOrdering = (function() { // Character types for codepoints 0 to 0xff var lowTypes = "bbbbbbbbbtstwsbbbbbbbbbbbbbbssstwNN%%%NNNNNN,N,N1111111111NNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNbbbbbbsbbbbbbbbbbbbbbbbbbbbbbbbbb,N%%%%NNNNLNNNNN%%11NLNNN1LNNNNNLLLLLLLLLLLLLLLLLLLLLLLNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLN"; // Character types for codepoints 0x600 to 0x6ff var arabicTypes = "rrrrrrrrrrrr,rNNmmmmmmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmmmmmmmmrrrrrrrnnnnnnnnnn%nnrrrmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmmmmmmmmmmmmmNmmmm"; function charType(code) { if (code <= 0xf7) return lowTypes.charAt(code); else if (0x590 <= code && code <= 0x5f4) return "R"; else if (0x600 <= code && code <= 0x6ed) return arabicTypes.charAt(code - 0x600); else if (0x6ee <= code && code <= 0x8ac) return "r"; else if (0x2000 <= code && code <= 0x200b) return "w"; else if (code == 0x200c) return "b"; else return "L"; } var bidiRE = /[\u0590-\u05f4\u0600-\u06ff\u0700-\u08ac]/; var isNeutral = /[stwN]/, isStrong = /[LRr]/, countsAsLeft = /[Lb1n]/, countsAsNum = /[1n]/; // Browsers seem to always treat the boundaries of block elements as being L. var outerType = "L"; function BidiSpan(level, from, to) { this.level = level; this.from = from; this.to = to; } return function(str) { if (!bidiRE.test(str)) return false; var len = str.length, types = []; for (var i = 0, type; i < len; ++i) types.push(type = charType(str.charCodeAt(i))); // W1. Examine each non-spacing mark (NSM) in the level run, and // change the type of the NSM to the type of the previous // character. If the NSM is at the start of the level run, it will // get the type of sor. for (var i = 0, prev = outerType; i < len; ++i) { var type = types[i]; if (type == "m") types[i] = prev; else prev = type; } // W2. Search backwards from each instance of a European number // until the first strong type (R, L, AL, or sor) is found. If an // AL is found, change the type of the European number to Arabic // number. // W3. Change all ALs to R. for (var i = 0, cur = outerType; i < len; ++i) { var type = types[i]; if (type == "1" && cur == "r") types[i] = "n"; else if (isStrong.test(type)) { cur = type; if (type == "r") types[i] = "R"; } } // W4. A single European separator between two European numbers // changes to a European number. A single common separator between // two numbers of the same type changes to that type. for (var i = 1, prev = types[0]; i < len - 1; ++i) { var type = types[i]; if (type == "+" && prev == "1" && types[i+1] == "1") types[i] = "1"; else if (type == "," && prev == types[i+1] && (prev == "1" || prev == "n")) types[i] = prev; prev = type; } // W5. A sequence of European terminators adjacent to European // numbers changes to all European numbers. // W6. Otherwise, separators and terminators change to Other // Neutral. for (var i = 0; i < len; ++i) { var type = types[i]; if (type == ",") types[i] = "N"; else if (type == "%") { for (var end = i + 1; end < len && types[end] == "%"; ++end) {} var replace = (i && types[i-1] == "!") || (end < len && types[end] == "1") ? "1" : "N"; for (var j = i; j < end; ++j) types[j] = replace; i = end - 1; } } // W7. Search backwards from each instance of a European number // until the first strong type (R, L, or sor) is found. If an L is // found, then change the type of the European number to L. for (var i = 0, cur = outerType; i < len; ++i) { var type = types[i]; if (cur == "L" && type == "1") types[i] = "L"; else if (isStrong.test(type)) cur = type; } // N1. A sequence of neutrals takes the direction of the // surrounding strong text if the text on both sides has the same // direction. European and Arabic numbers act as if they were R in // terms of their influence on neutrals. Start-of-level-run (sor) // and end-of-level-run (eor) are used at level run boundaries. // N2. Any remaining neutrals take the embedding direction. for (var i = 0; i < len; ++i) { if (isNeutral.test(types[i])) { for (var end = i + 1; end < len && isNeutral.test(types[end]); ++end) {} var before = (i ? types[i-1] : outerType) == "L"; var after = (end < len ? types[end] : outerType) == "L"; var replace = before || after ? "L" : "R"; for (var j = i; j < end; ++j) types[j] = replace; i = end - 1; } } // Here we depart from the documented algorithm, in order to avoid // building up an actual levels array. Since there are only three // levels (0, 1, 2) in an implementation that doesn't take // explicit embedding into account, we can build up the order on // the fly, without following the level-based algorithm. var order = [], m; for (var i = 0; i < len;) { if (countsAsLeft.test(types[i])) { var start = i; for (++i; i < len && countsAsLeft.test(types[i]); ++i) {} order.push(new BidiSpan(0, start, i)); } else { var pos = i, at = order.length; for (++i; i < len && types[i] != "L"; ++i) {} for (var j = pos; j < i;) { if (countsAsNum.test(types[j])) { if (pos < j) order.splice(at, 0, new BidiSpan(1, pos, j)); var nstart = j; for (++j; j < i && countsAsNum.test(types[j]); ++j) {} order.splice(at, 0, new BidiSpan(2, nstart, j)); pos = j; } else ++j; } if (pos < i) order.splice(at, 0, new BidiSpan(1, pos, i)); } } if (order[0].level == 1 && (m = str.match(/^\s+/))) { order[0].from = m[0].length; order.unshift(new BidiSpan(0, 0, m[0].length)); } if (lst(order).level == 1 && (m = str.match(/\s+$/))) { lst(order).to -= m[0].length; order.push(new BidiSpan(0, len - m[0].length, len)); } if (order[0].level == 2) order.unshift(new BidiSpan(1, order[0].to, order[0].to)); if (order[0].level != lst(order).level) order.push(new BidiSpan(order[0].level, len, len)); return order; }; })(); // THE END CodeMirror.version = "5.18.2"; return CodeMirror; }); PK!öµNfile-manager-advanced/application/library/codemirror/mode/modelica/modelica.jsnu„[µü¤// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE // Modelica support for CodeMirror, copyright (c) by Lennart Ochel (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); }) (function(CodeMirror) { "use strict"; CodeMirror.defineMode("modelica", function(config, parserConfig) { var indentUnit = config.indentUnit; var keywords = parserConfig.keywords || {}; var builtin = parserConfig.builtin || {}; var atoms = parserConfig.atoms || {}; var isSingleOperatorChar = /[;=\(:\),{}.*<>+\-\/^\[\]]/; var isDoubleOperatorChar = /(:=|<=|>=|==|<>|\.\+|\.\-|\.\*|\.\/|\.\^)/; var isDigit = /[0-9]/; var isNonDigit = /[_a-zA-Z]/; function tokenLineComment(stream, state) { stream.skipToEnd(); state.tokenize = null; return "comment"; } function tokenBlockComment(stream, state) { var maybeEnd = false, ch; while (ch = stream.next()) { if (maybeEnd && ch == "/") { state.tokenize = null; break; } maybeEnd = (ch == "*"); } return "comment"; } function tokenString(stream, state) { var escaped = false, ch; while ((ch = stream.next()) != null) { if (ch == '"' && !escaped) { state.tokenize = null; state.sol = false; break; } escaped = !escaped && ch == "\\"; } return "string"; } function tokenIdent(stream, state) { stream.eatWhile(isDigit); while (stream.eat(isDigit) || stream.eat(isNonDigit)) { } var cur = stream.current(); if(state.sol && (cur == "package" || cur == "model" || cur == "when" || cur == "connector")) state.level++; else if(state.sol && cur == "end" && state.level > 0) state.level--; state.tokenize = null; state.sol = false; if (keywords.propertyIsEnumerable(cur)) return "keyword"; else if (builtin.propertyIsEnumerable(cur)) return "builtin"; else if (atoms.propertyIsEnumerable(cur)) return "atom"; else return "variable"; } function tokenQIdent(stream, state) { while (stream.eat(/[^']/)) { } state.tokenize = null; state.sol = false; if(stream.eat("'")) return "variable"; else return "error"; } function tokenUnsignedNuber(stream, state) { stream.eatWhile(isDigit); if (stream.eat('.')) { stream.eatWhile(isDigit); } if (stream.eat('e') || stream.eat('E')) { if (!stream.eat('-')) stream.eat('+'); stream.eatWhile(isDigit); } state.tokenize = null; state.sol = false; return "number"; } // Interface return { startState: function() { return { tokenize: null, level: 0, sol: true }; }, token: function(stream, state) { if(state.tokenize != null) { return state.tokenize(stream, state); } if(stream.sol()) { state.sol = true; } // WHITESPACE if(stream.eatSpace()) { state.tokenize = null; return null; } var ch = stream.next(); // LINECOMMENT if(ch == '/' && stream.eat('/')) { state.tokenize = tokenLineComment; } // BLOCKCOMMENT else if(ch == '/' && stream.eat('*')) { state.tokenize = tokenBlockComment; } // TWO SYMBOL TOKENS else if(isDoubleOperatorChar.test(ch+stream.peek())) { stream.next(); state.tokenize = null; return "operator"; } // SINGLE SYMBOL TOKENS else if(isSingleOperatorChar.test(ch)) { state.tokenize = null; return "operator"; } // IDENT else if(isNonDigit.test(ch)) { state.tokenize = tokenIdent; } // Q-IDENT else if(ch == "'" && stream.peek() && stream.peek() != "'") { state.tokenize = tokenQIdent; } // STRING else if(ch == '"') { state.tokenize = tokenString; } // UNSIGNED_NUBER else if(isDigit.test(ch)) { state.tokenize = tokenUnsignedNuber; } // ERROR else { state.tokenize = null; return "error"; } return state.tokenize(stream, state); }, indent: function(state, textAfter) { if (state.tokenize != null) return CodeMirror.Pass; var level = state.level; if(/(algorithm)/.test(textAfter)) level--; if(/(equation)/.test(textAfter)) level--; if(/(initial algorithm)/.test(textAfter)) level--; if(/(initial equation)/.test(textAfter)) level--; if(/(end)/.test(textAfter)) level--; if(level > 0) return indentUnit*level; else return 0; }, blockCommentStart: "/*", blockCommentEnd: "*/", lineComment: "//" }; }); function words(str) { var obj = {}, words = str.split(" "); for (var i=0; i CodeMirror: Modelica mode

    Modelica mode

    Simple mode that tries to handle Modelica as well as it can.

    MIME types defined: text/x-modelica (Modlica code).

    PK!Ö÷ÅÚ•0•0Jfile-manager-advanced/application/library/codemirror/mode/python/python.jsnu„[µü¤// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; function wordRegexp(words) { return new RegExp("^((" + words.join(")|(") + "))\\b"); } var wordOperators = wordRegexp(["and", "or", "not", "is"]); var commonKeywords = ["as", "assert", "break", "class", "continue", "def", "del", "elif", "else", "except", "finally", "for", "from", "global", "if", "import", "lambda", "pass", "raise", "return", "try", "while", "with", "yield", "in"]; var commonBuiltins = ["abs", "all", "any", "bin", "bool", "bytearray", "callable", "chr", "classmethod", "compile", "complex", "delattr", "dict", "dir", "divmod", "enumerate", "eval", "filter", "float", "format", "frozenset", "getattr", "globals", "hasattr", "hash", "help", "hex", "id", "input", "int", "isinstance", "issubclass", "iter", "len", "list", "locals", "map", "max", "memoryview", "min", "next", "object", "oct", "open", "ord", "pow", "property", "range", "repr", "reversed", "round", "set", "setattr", "slice", "sorted", "staticmethod", "str", "sum", "super", "tuple", "type", "vars", "zip", "__import__", "NotImplemented", "Ellipsis", "__debug__"]; CodeMirror.registerHelper("hintWords", "python", commonKeywords.concat(commonBuiltins)); function top(state) { return state.scopes[state.scopes.length - 1]; } CodeMirror.defineMode("python", function(conf, parserConf) { var ERRORCLASS = "error"; var singleDelimiters = parserConf.singleDelimiters || /^[\(\)\[\]\{\}@,:`=;\.]/; var doubleOperators = parserConf.doubleOperators || /^([!<>]==|<>|<<|>>|\/\/|\*\*)/; var doubleDelimiters = parserConf.doubleDelimiters || /^(\+=|\-=|\*=|%=|\/=|&=|\|=|\^=)/; var tripleDelimiters = parserConf.tripleDelimiters || /^(\/\/=|>>=|<<=|\*\*=)/; var hangingIndent = parserConf.hangingIndent || conf.indentUnit; var myKeywords = commonKeywords, myBuiltins = commonBuiltins; if (parserConf.extra_keywords != undefined) myKeywords = myKeywords.concat(parserConf.extra_keywords); if (parserConf.extra_builtins != undefined) myBuiltins = myBuiltins.concat(parserConf.extra_builtins); var py3 = !(parserConf.version && Number(parserConf.version) < 3) if (py3) { // since http://legacy.python.org/dev/peps/pep-0465/ @ is also an operator var singleOperators = parserConf.singleOperators || /^[\+\-\*\/%&|\^~<>!@]/; var identifiers = parserConf.identifiers|| /^[_A-Za-z\u00A1-\uFFFF][_A-Za-z0-9\u00A1-\uFFFF]*/; myKeywords = myKeywords.concat(["nonlocal", "False", "True", "None", "async", "await"]); myBuiltins = myBuiltins.concat(["ascii", "bytes", "exec", "print"]); var stringPrefixes = new RegExp("^(([rbuf]|(br))?('{3}|\"{3}|['\"]))", "i"); } else { var singleOperators = parserConf.singleOperators || /^[\+\-\*\/%&|\^~<>!]/; var identifiers = parserConf.identifiers|| /^[_A-Za-z][_A-Za-z0-9]*/; myKeywords = myKeywords.concat(["exec", "print"]); myBuiltins = myBuiltins.concat(["apply", "basestring", "buffer", "cmp", "coerce", "execfile", "file", "intern", "long", "raw_input", "reduce", "reload", "unichr", "unicode", "xrange", "False", "True", "None"]); var stringPrefixes = new RegExp("^(([rub]|(ur)|(br))?('{3}|\"{3}|['\"]))", "i"); } var keywords = wordRegexp(myKeywords); var builtins = wordRegexp(myBuiltins); // tokenizers function tokenBase(stream, state) { if (stream.sol()) state.indent = stream.indentation() // Handle scope changes if (stream.sol() && top(state).type == "py") { var scopeOffset = top(state).offset; if (stream.eatSpace()) { var lineOffset = stream.indentation(); if (lineOffset > scopeOffset) pushPyScope(state); else if (lineOffset < scopeOffset && dedent(stream, state)) state.errorToken = true; return null; } else { var style = tokenBaseInner(stream, state); if (scopeOffset > 0 && dedent(stream, state)) style += " " + ERRORCLASS; return style; } } return tokenBaseInner(stream, state); } function tokenBaseInner(stream, state) { if (stream.eatSpace()) return null; var ch = stream.peek(); // Handle Comments if (ch == "#") { stream.skipToEnd(); return "comment"; } // Handle Number Literals if (stream.match(/^[0-9\.]/, false)) { var floatLiteral = false; // Floats if (stream.match(/^\d*\.\d+(e[\+\-]?\d+)?/i)) { floatLiteral = true; } if (stream.match(/^\d+\.\d*/)) { floatLiteral = true; } if (stream.match(/^\.\d+/)) { floatLiteral = true; } if (floatLiteral) { // Float literals may be "imaginary" stream.eat(/J/i); return "number"; } // Integers var intLiteral = false; // Hex if (stream.match(/^0x[0-9a-f]+/i)) intLiteral = true; // Binary if (stream.match(/^0b[01]+/i)) intLiteral = true; // Octal if (stream.match(/^0o[0-7]+/i)) intLiteral = true; // Decimal if (stream.match(/^[1-9]\d*(e[\+\-]?\d+)?/)) { // Decimal literals may be "imaginary" stream.eat(/J/i); // TODO - Can you have imaginary longs? intLiteral = true; } // Zero by itself with no other piece of number. if (stream.match(/^0(?![\dx])/i)) intLiteral = true; if (intLiteral) { // Integer literals may be "long" stream.eat(/L/i); return "number"; } } // Handle Strings if (stream.match(stringPrefixes)) { state.tokenize = tokenStringFactory(stream.current()); return state.tokenize(stream, state); } // Handle operators and Delimiters if (stream.match(tripleDelimiters) || stream.match(doubleDelimiters)) return "punctuation"; if (stream.match(doubleOperators) || stream.match(singleOperators)) return "operator"; if (stream.match(singleDelimiters)) return "punctuation"; if (state.lastToken == "." && stream.match(identifiers)) return "property"; if (stream.match(keywords) || stream.match(wordOperators)) return "keyword"; if (stream.match(builtins)) return "builtin"; if (stream.match(/^(self|cls)\b/)) return "variable-2"; if (stream.match(identifiers)) { if (state.lastToken == "def" || state.lastToken == "class") return "def"; return "variable"; } // Handle non-detected items stream.next(); return ERRORCLASS; } function tokenStringFactory(delimiter) { while ("rubf".indexOf(delimiter.charAt(0).toLowerCase()) >= 0) delimiter = delimiter.substr(1); var singleline = delimiter.length == 1; var OUTCLASS = "string"; function tokenString(stream, state) { while (!stream.eol()) { stream.eatWhile(/[^'"\\]/); if (stream.eat("\\")) { stream.next(); if (singleline && stream.eol()) return OUTCLASS; } else if (stream.match(delimiter)) { state.tokenize = tokenBase; return OUTCLASS; } else { stream.eat(/['"]/); } } if (singleline) { if (parserConf.singleLineStringErrors) return ERRORCLASS; else state.tokenize = tokenBase; } return OUTCLASS; } tokenString.isString = true; return tokenString; } function pushPyScope(state) { while (top(state).type != "py") state.scopes.pop() state.scopes.push({offset: top(state).offset + conf.indentUnit, type: "py", align: null}) } function pushBracketScope(stream, state, type) { var align = stream.match(/^([\s\[\{\(]|#.*)*$/, false) ? null : stream.column() + 1 state.scopes.push({offset: state.indent + hangingIndent, type: type, align: align}) } function dedent(stream, state) { var indented = stream.indentation(); while (state.scopes.length > 1 && top(state).offset > indented) { if (top(state).type != "py") return true; state.scopes.pop(); } return top(state).offset != indented; } function tokenLexer(stream, state) { if (stream.sol()) state.beginningOfLine = true; var style = state.tokenize(stream, state); var current = stream.current(); // Handle decorators if (state.beginningOfLine && current == "@") return stream.match(identifiers, false) ? "meta" : py3 ? "operator" : ERRORCLASS; if (/\S/.test(current)) state.beginningOfLine = false; if ((style == "variable" || style == "builtin") && state.lastToken == "meta") style = "meta"; // Handle scope changes. if (current == "pass" || current == "return") state.dedent += 1; if (current == "lambda") state.lambda = true; if (current == ":" && !state.lambda && top(state).type == "py") pushPyScope(state); var delimiter_index = current.length == 1 ? "[({".indexOf(current) : -1; if (delimiter_index != -1) pushBracketScope(stream, state, "])}".slice(delimiter_index, delimiter_index+1)); delimiter_index = "])}".indexOf(current); if (delimiter_index != -1) { if (top(state).type == current) state.indent = state.scopes.pop().offset - hangingIndent else return ERRORCLASS; } if (state.dedent > 0 && stream.eol() && top(state).type == "py") { if (state.scopes.length > 1) state.scopes.pop(); state.dedent -= 1; } return style; } var external = { startState: function(basecolumn) { return { tokenize: tokenBase, scopes: [{offset: basecolumn || 0, type: "py", align: null}], indent: basecolumn || 0, lastToken: null, lambda: false, dedent: 0 }; }, token: function(stream, state) { var addErr = state.errorToken; if (addErr) state.errorToken = false; var style = tokenLexer(stream, state); if (style && style != "comment") state.lastToken = (style == "keyword" || style == "punctuation") ? stream.current() : style; if (style == "punctuation") style = null; if (stream.eol() && state.lambda) state.lambda = false; return addErr ? style + " " + ERRORCLASS : style; }, indent: function(state, textAfter) { if (state.tokenize != tokenBase) return state.tokenize.isString ? CodeMirror.Pass : 0; var scope = top(state), closing = scope.type == textAfter.charAt(0) if (scope.align != null) return scope.align - (closing ? 1 : 0) else return scope.offset - (closing ? hangingIndent : 0) }, electricInput: /^\s*[\}\]\)]$/, closeBrackets: {triples: "'\""}, lineComment: "#", fold: "indent" }; return external; }); CodeMirror.defineMIME("text/x-python", "python"); var words = function(str) { return str.split(" "); }; CodeMirror.defineMIME("text/x-cython", { name: "python", extra_keywords: words("by cdef cimport cpdef ctypedef enum except"+ "extern gil include nogil property public"+ "readonly struct union DEF IF ELIF ELSE") }); }); PK!×ÿ>>Kfile-manager-advanced/application/library/codemirror/mode/python/index.htmlnu„[µü¤ CodeMirror: Python mode

    Python mode

    Cython mode

    Configuration Options for Python mode:

    • version - 2/3 - The version of Python to recognize. Default is 2.
    • singleLineStringErrors - true/false - If you have a single-line string that is not terminated at the end of the line, this will show subsequent lines as errors if true, otherwise it will consider the newline as the end of the string. Default is false.
    • hangingIndent - int - If you want to write long arguments to a function starting on a new line, how much that line should be indented. Defaults to one normal indentation unit.

    Advanced Configuration Options:

    Usefull for superset of python syntax like Enthought enaml, IPython magics and questionmark help

    • singleOperators - RegEx - Regular Expression for single operator matching, default :
      ^[\\+\\-\\*/%&|\\^~<>!]
      including
      @
      on Python 3
    • singleDelimiters - RegEx - Regular Expression for single delimiter matching, default :
      ^[\\(\\)\\[\\]\\{\\}@,:`=;\\.]
    • doubleOperators - RegEx - Regular Expression for double operators matching, default :
      ^((==)|(!=)|(<=)|(>=)|(<>)|(<<)|(>>)|(//)|(\\*\\*))
    • doubleDelimiters - RegEx - Regular Expression for double delimiters matching, default :
      ^((\\+=)|(\\-=)|(\\*=)|(%=)|(/=)|(&=)|(\\|=)|(\\^=))
    • tripleDelimiters - RegEx - Regular Expression for triple delimiters matching, default :
      ^((//=)|(>>=)|(<<=)|(\\*\\*=))
    • identifiers - RegEx - Regular Expression for identifier, default :
      ^[_A-Za-z][_A-Za-z0-9]*
      on Python 2 and
      ^[_A-Za-z\u00A1-\uFFFF][_A-Za-z0-9\u00A1-\uFFFF]*
      on Python 3.
    • extra_keywords - list of string - List of extra words ton consider as keywords
    • extra_builtins - list of string - List of extra words ton consider as builtins

    MIME types defined: text/x-python and text/x-cython.

    PK!TãÝ~““Hfile-manager-advanced/application/library/codemirror/mode/python/test.jsnu„[µü¤// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function() { var mode = CodeMirror.getMode({indentUnit: 4}, {name: "python", version: 3, singleLineStringErrors: false}); function MT(name) { test.mode(name, mode, Array.prototype.slice.call(arguments, 1)); } // Error, because "foobarhello" is neither a known type or property, but // property was expected (after "and"), and it should be in parentheses. MT("decoratorStartOfLine", "[meta @dec]", "[keyword def] [def function]():", " [keyword pass]"); MT("decoratorIndented", "[keyword class] [def Foo]:", " [meta @dec]", " [keyword def] [def function]():", " [keyword pass]"); MT("matmulWithSpace:", "[variable a] [operator @] [variable b]"); MT("matmulWithoutSpace:", "[variable a][operator @][variable b]"); MT("matmulSpaceBefore:", "[variable a] [operator @][variable b]"); MT("fValidStringPrefix", "[string f'this is a {formatted} string']"); MT("uValidStringPrefix", "[string u'this is an unicode string']"); })(); PK!k¬ÎÆs&s&Ofile-manager-advanced/application/library/codemirror/mode/livescript/index.htmlnu„[µü¤ CodeMirror: LiveScript mode

    LiveScript mode

    MIME types defined: text/x-livescript.

    The LiveScript mode was written by Kenneth Bentley.

    PK!Ü&à ôôRfile-manager-advanced/application/library/codemirror/mode/livescript/livescript.jsnu„[µü¤// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE /** * Link to the project's GitHub page: * https://github.com/duralog/CodeMirror */ (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMode('livescript', function(){ var tokenBase = function(stream, state) { var next_rule = state.next || "start"; if (next_rule) { state.next = state.next; var nr = Rules[next_rule]; if (nr.splice) { for (var i$ = 0; i$ < nr.length; ++i$) { var r = nr[i$]; if (r.regex && stream.match(r.regex)) { state.next = r.next || state.next; return r.token; } } stream.next(); return 'error'; } if (stream.match(r = Rules[next_rule])) { if (r.regex && stream.match(r.regex)) { state.next = r.next; return r.token; } else { stream.next(); return 'error'; } } } stream.next(); return 'error'; }; var external = { startState: function(){ return { next: 'start', lastToken: {style: null, indent: 0, content: ""} }; }, token: function(stream, state){ while (stream.pos == stream.start) var style = tokenBase(stream, state); state.lastToken = { style: style, indent: stream.indentation(), content: stream.current() }; return style.replace(/\./g, ' '); }, indent: function(state){ var indentation = state.lastToken.indent; if (state.lastToken.content.match(indenter)) { indentation += 2; } return indentation; } }; return external; }); var identifier = '(?![\\d\\s])[$\\w\\xAA-\\uFFDC](?:(?!\\s)[$\\w\\xAA-\\uFFDC]|-[A-Za-z])*'; var indenter = RegExp('(?:[({[=:]|[-~]>|\\b(?:e(?:lse|xport)|d(?:o|efault)|t(?:ry|hen)|finally|import(?:\\s*all)?|const|var|let|new|catch(?:\\s*' + identifier + ')?))\\s*$'); var keywordend = '(?![$\\w]|-[A-Za-z]|\\s*:(?![:=]))'; var stringfill = { token: 'string', regex: '.+' }; var Rules = { start: [ { token: 'comment.doc', regex: '/\\*', next: 'comment' }, { token: 'comment', regex: '#.*' }, { token: 'keyword', regex: '(?:t(?:h(?:is|row|en)|ry|ypeof!?)|c(?:on(?:tinue|st)|a(?:se|tch)|lass)|i(?:n(?:stanceof)?|mp(?:ort(?:\\s+all)?|lements)|[fs])|d(?:e(?:fault|lete|bugger)|o)|f(?:or(?:\\s+own)?|inally|unction)|s(?:uper|witch)|e(?:lse|x(?:tends|port)|val)|a(?:nd|rguments)|n(?:ew|ot)|un(?:less|til)|w(?:hile|ith)|o[fr]|return|break|let|var|loop)' + keywordend }, { token: 'constant.language', regex: '(?:true|false|yes|no|on|off|null|void|undefined)' + keywordend }, { token: 'invalid.illegal', regex: '(?:p(?:ackage|r(?:ivate|otected)|ublic)|i(?:mplements|nterface)|enum|static|yield)' + keywordend }, { token: 'language.support.class', regex: '(?:R(?:e(?:gExp|ferenceError)|angeError)|S(?:tring|yntaxError)|E(?:rror|valError)|Array|Boolean|Date|Function|Number|Object|TypeError|URIError)' + keywordend }, { token: 'language.support.function', regex: '(?:is(?:NaN|Finite)|parse(?:Int|Float)|Math|JSON|(?:en|de)codeURI(?:Component)?)' + keywordend }, { token: 'variable.language', regex: '(?:t(?:hat|il|o)|f(?:rom|allthrough)|it|by|e)' + keywordend }, { token: 'identifier', regex: identifier + '\\s*:(?![:=])' }, { token: 'variable', regex: identifier }, { token: 'keyword.operator', regex: '(?:\\.{3}|\\s+\\?)' }, { token: 'keyword.variable', regex: '(?:@+|::|\\.\\.)', next: 'key' }, { token: 'keyword.operator', regex: '\\.\\s*', next: 'key' }, { token: 'string', regex: '\\\\\\S[^\\s,;)}\\]]*' }, { token: 'string.doc', regex: '\'\'\'', next: 'qdoc' }, { token: 'string.doc', regex: '"""', next: 'qqdoc' }, { token: 'string', regex: '\'', next: 'qstring' }, { token: 'string', regex: '"', next: 'qqstring' }, { token: 'string', regex: '`', next: 'js' }, { token: 'string', regex: '<\\[', next: 'words' }, { token: 'string.regex', regex: '//', next: 'heregex' }, { token: 'string.regex', regex: '\\/(?:[^[\\/\\n\\\\]*(?:(?:\\\\.|\\[[^\\]\\n\\\\]*(?:\\\\.[^\\]\\n\\\\]*)*\\])[^[\\/\\n\\\\]*)*)\\/[gimy$]{0,4}', next: 'key' }, { token: 'constant.numeric', regex: '(?:0x[\\da-fA-F][\\da-fA-F_]*|(?:[2-9]|[12]\\d|3[0-6])r[\\da-zA-Z][\\da-zA-Z_]*|(?:\\d[\\d_]*(?:\\.\\d[\\d_]*)?|\\.\\d[\\d_]*)(?:e[+-]?\\d[\\d_]*)?[\\w$]*)' }, { token: 'lparen', regex: '[({[]' }, { token: 'rparen', regex: '[)}\\]]', next: 'key' }, { token: 'keyword.operator', regex: '\\S+' }, { token: 'text', regex: '\\s+' } ], heregex: [ { token: 'string.regex', regex: '.*?//[gimy$?]{0,4}', next: 'start' }, { token: 'string.regex', regex: '\\s*#{' }, { token: 'comment.regex', regex: '\\s+(?:#.*)?' }, { token: 'string.regex', regex: '\\S+' } ], key: [ { token: 'keyword.operator', regex: '[.?@!]+' }, { token: 'identifier', regex: identifier, next: 'start' }, { token: 'text', regex: '', next: 'start' } ], comment: [ { token: 'comment.doc', regex: '.*?\\*/', next: 'start' }, { token: 'comment.doc', regex: '.+' } ], qdoc: [ { token: 'string', regex: ".*?'''", next: 'key' }, stringfill ], qqdoc: [ { token: 'string', regex: '.*?"""', next: 'key' }, stringfill ], qstring: [ { token: 'string', regex: '[^\\\\\']*(?:\\\\.[^\\\\\']*)*\'', next: 'key' }, stringfill ], qqstring: [ { token: 'string', regex: '[^\\\\"]*(?:\\\\.[^\\\\"]*)*"', next: 'key' }, stringfill ], js: [ { token: 'string', regex: '[^\\\\`]*(?:\\\\.[^\\\\`]*)*`', next: 'key' }, stringfill ], words: [ { token: 'string', regex: '.*?\\]>', next: 'key' }, stringfill ] }; for (var idx in Rules) { var r = Rules[idx]; if (r.splice) { for (var i = 0, len = r.length; i < len; ++i) { var rr = r[i]; if (typeof rr.regex === 'string') { Rules[idx][i].regex = new RegExp('^' + rr.regex); } } } else if (typeof rr.regex === 'string') { Rules[idx].regex = new RegExp('^' + r.regex); } } CodeMirror.defineMIME('text/x-livescript', 'livescript'); }); PK!1»Hfile-manager-advanced/application/library/codemirror/mode/lua/index.htmlnu„[µü¤ CodeMirror: Lua mode

    Lua mode

    Loosely based on Franciszek Wawrzak's CodeMirror 1 mode. One configuration parameter is supported, specials, to which you can provide an array of strings to have those identifiers highlighted with the lua-special style.

    MIME types defined: text/x-lua.

    PK!‚‰þ)>>Dfile-manager-advanced/application/library/codemirror/mode/lua/lua.jsnu„[µü¤// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE // LUA mode. Ported to CodeMirror 2 from Franciszek Wawrzak's // CodeMirror 1 mode. // highlights keywords, strings, comments (no leveling supported! ("[==[")), tokens, basic indenting (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMode("lua", function(config, parserConfig) { var indentUnit = config.indentUnit; function prefixRE(words) { return new RegExp("^(?:" + words.join("|") + ")", "i"); } function wordRE(words) { return new RegExp("^(?:" + words.join("|") + ")$", "i"); } var specials = wordRE(parserConfig.specials || []); // long list of standard functions from lua manual var builtins = wordRE([ "_G","_VERSION","assert","collectgarbage","dofile","error","getfenv","getmetatable","ipairs","load", "loadfile","loadstring","module","next","pairs","pcall","print","rawequal","rawget","rawset","require", "select","setfenv","setmetatable","tonumber","tostring","type","unpack","xpcall", "coroutine.create","coroutine.resume","coroutine.running","coroutine.status","coroutine.wrap","coroutine.yield", "debug.debug","debug.getfenv","debug.gethook","debug.getinfo","debug.getlocal","debug.getmetatable", "debug.getregistry","debug.getupvalue","debug.setfenv","debug.sethook","debug.setlocal","debug.setmetatable", "debug.setupvalue","debug.traceback", "close","flush","lines","read","seek","setvbuf","write", "io.close","io.flush","io.input","io.lines","io.open","io.output","io.popen","io.read","io.stderr","io.stdin", "io.stdout","io.tmpfile","io.type","io.write", "math.abs","math.acos","math.asin","math.atan","math.atan2","math.ceil","math.cos","math.cosh","math.deg", "math.exp","math.floor","math.fmod","math.frexp","math.huge","math.ldexp","math.log","math.log10","math.max", "math.min","math.modf","math.pi","math.pow","math.rad","math.random","math.randomseed","math.sin","math.sinh", "math.sqrt","math.tan","math.tanh", "os.clock","os.date","os.difftime","os.execute","os.exit","os.getenv","os.remove","os.rename","os.setlocale", "os.time","os.tmpname", "package.cpath","package.loaded","package.loaders","package.loadlib","package.path","package.preload", "package.seeall", "string.byte","string.char","string.dump","string.find","string.format","string.gmatch","string.gsub", "string.len","string.lower","string.match","string.rep","string.reverse","string.sub","string.upper", "table.concat","table.insert","table.maxn","table.remove","table.sort" ]); var keywords = wordRE(["and","break","elseif","false","nil","not","or","return", "true","function", "end", "if", "then", "else", "do", "while", "repeat", "until", "for", "in", "local" ]); var indentTokens = wordRE(["function", "if","repeat","do", "\\(", "{"]); var dedentTokens = wordRE(["end", "until", "\\)", "}"]); var dedentPartial = prefixRE(["end", "until", "\\)", "}", "else", "elseif"]); function readBracket(stream) { var level = 0; while (stream.eat("=")) ++level; stream.eat("["); return level; } function normal(stream, state) { var ch = stream.next(); if (ch == "-" && stream.eat("-")) { if (stream.eat("[") && stream.eat("[")) return (state.cur = bracketed(readBracket(stream), "comment"))(stream, state); stream.skipToEnd(); return "comment"; } if (ch == "\"" || ch == "'") return (state.cur = string(ch))(stream, state); if (ch == "[" && /[\[=]/.test(stream.peek())) return (state.cur = bracketed(readBracket(stream), "string"))(stream, state); if (/\d/.test(ch)) { stream.eatWhile(/[\w.%]/); return "number"; } if (/[\w_]/.test(ch)) { stream.eatWhile(/[\w\\\-_.]/); return "variable"; } return null; } function bracketed(level, style) { return function(stream, state) { var curlev = null, ch; while ((ch = stream.next()) != null) { if (curlev == null) {if (ch == "]") curlev = 0;} else if (ch == "=") ++curlev; else if (ch == "]" && curlev == level) { state.cur = normal; break; } else curlev = null; } return style; }; } function string(quote) { return function(stream, state) { var escaped = false, ch; while ((ch = stream.next()) != null) { if (ch == quote && !escaped) break; escaped = !escaped && ch == "\\"; } if (!escaped) state.cur = normal; return "string"; }; } return { startState: function(basecol) { return {basecol: basecol || 0, indentDepth: 0, cur: normal}; }, token: function(stream, state) { if (stream.eatSpace()) return null; var style = state.cur(stream, state); var word = stream.current(); if (style == "variable") { if (keywords.test(word)) style = "keyword"; else if (builtins.test(word)) style = "builtin"; else if (specials.test(word)) style = "variable-2"; } if ((style != "comment") && (style != "string")){ if (indentTokens.test(word)) ++state.indentDepth; else if (dedentTokens.test(word)) --state.indentDepth; } return style; }, indent: function(state, textAfter) { var closing = dedentPartial.test(textAfter); return state.basecol + indentUnit * (state.indentDepth - (closing ? 1 : 0)); }, lineComment: "--", blockCommentStart: "--[[", blockCommentEnd: "]]" }; }); CodeMirror.defineMIME("text/x-lua", "lua"); }); PK!îÏw[Ù(Ù(Ffile-manager-advanced/application/library/codemirror/mode/ruby/ruby.jsnu„[µü¤// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMode("ruby", function(config) { function wordObj(words) { var o = {}; for (var i = 0, e = words.length; i < e; ++i) o[words[i]] = true; return o; } var keywords = wordObj([ "alias", "and", "BEGIN", "begin", "break", "case", "class", "def", "defined?", "do", "else", "elsif", "END", "end", "ensure", "false", "for", "if", "in", "module", "next", "not", "or", "redo", "rescue", "retry", "return", "self", "super", "then", "true", "undef", "unless", "until", "when", "while", "yield", "nil", "raise", "throw", "catch", "fail", "loop", "callcc", "caller", "lambda", "proc", "public", "protected", "private", "require", "load", "require_relative", "extend", "autoload", "__END__", "__FILE__", "__LINE__", "__dir__" ]); var indentWords = wordObj(["def", "class", "case", "for", "while", "until", "module", "then", "catch", "loop", "proc", "begin"]); var dedentWords = wordObj(["end", "until"]); var matching = {"[": "]", "{": "}", "(": ")"}; var curPunc; function chain(newtok, stream, state) { state.tokenize.push(newtok); return newtok(stream, state); } function tokenBase(stream, state) { if (stream.sol() && stream.match("=begin") && stream.eol()) { state.tokenize.push(readBlockComment); return "comment"; } if (stream.eatSpace()) return null; var ch = stream.next(), m; if (ch == "`" || ch == "'" || ch == '"') { return chain(readQuoted(ch, "string", ch == '"' || ch == "`"), stream, state); } else if (ch == "/") { var currentIndex = stream.current().length; if (stream.skipTo("/")) { var search_till = stream.current().length; stream.backUp(stream.current().length - currentIndex); var balance = 0; // balance brackets while (stream.current().length < search_till) { var chchr = stream.next(); if (chchr == "(") balance += 1; else if (chchr == ")") balance -= 1; if (balance < 0) break; } stream.backUp(stream.current().length - currentIndex); if (balance == 0) return chain(readQuoted(ch, "string-2", true), stream, state); } return "operator"; } else if (ch == "%") { var style = "string", embed = true; if (stream.eat("s")) style = "atom"; else if (stream.eat(/[WQ]/)) style = "string"; else if (stream.eat(/[r]/)) style = "string-2"; else if (stream.eat(/[wxq]/)) { style = "string"; embed = false; } var delim = stream.eat(/[^\w\s=]/); if (!delim) return "operator"; if (matching.propertyIsEnumerable(delim)) delim = matching[delim]; return chain(readQuoted(delim, style, embed, true), stream, state); } else if (ch == "#") { stream.skipToEnd(); return "comment"; } else if (ch == "<" && (m = stream.match(/^<-?[\`\"\']?([a-zA-Z_?]\w*)[\`\"\']?(?:;|$)/))) { return chain(readHereDoc(m[1]), stream, state); } else if (ch == "0") { if (stream.eat("x")) stream.eatWhile(/[\da-fA-F]/); else if (stream.eat("b")) stream.eatWhile(/[01]/); else stream.eatWhile(/[0-7]/); return "number"; } else if (/\d/.test(ch)) { stream.match(/^[\d_]*(?:\.[\d_]+)?(?:[eE][+\-]?[\d_]+)?/); return "number"; } else if (ch == "?") { while (stream.match(/^\\[CM]-/)) {} if (stream.eat("\\")) stream.eatWhile(/\w/); else stream.next(); return "string"; } else if (ch == ":") { if (stream.eat("'")) return chain(readQuoted("'", "atom", false), stream, state); if (stream.eat('"')) return chain(readQuoted('"', "atom", true), stream, state); // :> :>> :< :<< are valid symbols if (stream.eat(/[\<\>]/)) { stream.eat(/[\<\>]/); return "atom"; } // :+ :- :/ :* :| :& :! are valid symbols if (stream.eat(/[\+\-\*\/\&\|\:\!]/)) { return "atom"; } // Symbols can't start by a digit if (stream.eat(/[a-zA-Z$@_\xa1-\uffff]/)) { stream.eatWhile(/[\w$\xa1-\uffff]/); // Only one ? ! = is allowed and only as the last character stream.eat(/[\?\!\=]/); return "atom"; } return "operator"; } else if (ch == "@" && stream.match(/^@?[a-zA-Z_\xa1-\uffff]/)) { stream.eat("@"); stream.eatWhile(/[\w\xa1-\uffff]/); return "variable-2"; } else if (ch == "$") { if (stream.eat(/[a-zA-Z_]/)) { stream.eatWhile(/[\w]/); } else if (stream.eat(/\d/)) { stream.eat(/\d/); } else { stream.next(); // Must be a special global like $: or $! } return "variable-3"; } else if (/[a-zA-Z_\xa1-\uffff]/.test(ch)) { stream.eatWhile(/[\w\xa1-\uffff]/); stream.eat(/[\?\!]/); if (stream.eat(":")) return "atom"; return "ident"; } else if (ch == "|" && (state.varList || state.lastTok == "{" || state.lastTok == "do")) { curPunc = "|"; return null; } else if (/[\(\)\[\]{}\\;]/.test(ch)) { curPunc = ch; return null; } else if (ch == "-" && stream.eat(">")) { return "arrow"; } else if (/[=+\-\/*:\.^%<>~|]/.test(ch)) { var more = stream.eatWhile(/[=+\-\/*:\.^%<>~|]/); if (ch == "." && !more) curPunc = "."; return "operator"; } else { return null; } } function tokenBaseUntilBrace(depth) { if (!depth) depth = 1; return function(stream, state) { if (stream.peek() == "}") { if (depth == 1) { state.tokenize.pop(); return state.tokenize[state.tokenize.length-1](stream, state); } else { state.tokenize[state.tokenize.length - 1] = tokenBaseUntilBrace(depth - 1); } } else if (stream.peek() == "{") { state.tokenize[state.tokenize.length - 1] = tokenBaseUntilBrace(depth + 1); } return tokenBase(stream, state); }; } function tokenBaseOnce() { var alreadyCalled = false; return function(stream, state) { if (alreadyCalled) { state.tokenize.pop(); return state.tokenize[state.tokenize.length-1](stream, state); } alreadyCalled = true; return tokenBase(stream, state); }; } function readQuoted(quote, style, embed, unescaped) { return function(stream, state) { var escaped = false, ch; if (state.context.type === 'read-quoted-paused') { state.context = state.context.prev; stream.eat("}"); } while ((ch = stream.next()) != null) { if (ch == quote && (unescaped || !escaped)) { state.tokenize.pop(); break; } if (embed && ch == "#" && !escaped) { if (stream.eat("{")) { if (quote == "}") { state.context = {prev: state.context, type: 'read-quoted-paused'}; } state.tokenize.push(tokenBaseUntilBrace()); break; } else if (/[@\$]/.test(stream.peek())) { state.tokenize.push(tokenBaseOnce()); break; } } escaped = !escaped && ch == "\\"; } return style; }; } function readHereDoc(phrase) { return function(stream, state) { if (stream.match(phrase)) state.tokenize.pop(); else stream.skipToEnd(); return "string"; }; } function readBlockComment(stream, state) { if (stream.sol() && stream.match("=end") && stream.eol()) state.tokenize.pop(); stream.skipToEnd(); return "comment"; } return { startState: function() { return {tokenize: [tokenBase], indented: 0, context: {type: "top", indented: -config.indentUnit}, continuedLine: false, lastTok: null, varList: false}; }, token: function(stream, state) { curPunc = null; if (stream.sol()) state.indented = stream.indentation(); var style = state.tokenize[state.tokenize.length-1](stream, state), kwtype; var thisTok = curPunc; if (style == "ident") { var word = stream.current(); style = state.lastTok == "." ? "property" : keywords.propertyIsEnumerable(stream.current()) ? "keyword" : /^[A-Z]/.test(word) ? "tag" : (state.lastTok == "def" || state.lastTok == "class" || state.varList) ? "def" : "variable"; if (style == "keyword") { thisTok = word; if (indentWords.propertyIsEnumerable(word)) kwtype = "indent"; else if (dedentWords.propertyIsEnumerable(word)) kwtype = "dedent"; else if ((word == "if" || word == "unless") && stream.column() == stream.indentation()) kwtype = "indent"; else if (word == "do" && state.context.indented < state.indented) kwtype = "indent"; } } if (curPunc || (style && style != "comment")) state.lastTok = thisTok; if (curPunc == "|") state.varList = !state.varList; if (kwtype == "indent" || /[\(\[\{]/.test(curPunc)) state.context = {prev: state.context, type: curPunc || style, indented: state.indented}; else if ((kwtype == "dedent" || /[\)\]\}]/.test(curPunc)) && state.context.prev) state.context = state.context.prev; if (stream.eol()) state.continuedLine = (curPunc == "\\" || style == "operator"); return style; }, indent: function(state, textAfter) { if (state.tokenize[state.tokenize.length-1] != tokenBase) return 0; var firstChar = textAfter && textAfter.charAt(0); var ct = state.context; var closing = ct.type == matching[firstChar] || ct.type == "keyword" && /^(?:end|until|else|elsif|when|rescue)\b/.test(textAfter); return ct.indented + (closing ? 0 : config.indentUnit) + (state.continuedLine ? config.indentUnit : 0); }, electricInput: /^\s*(?:end|rescue|\})$/, lineComment: "#" }; }); CodeMirror.defineMIME("text/x-ruby", "ruby"); }); PK!)ø“5uuIfile-manager-advanced/application/library/codemirror/mode/ruby/index.htmlnu„[µü¤ CodeMirror: Ruby mode

    Ruby mode

    MIME types defined: text/x-ruby.

    Development of the CodeMirror Ruby mode was kindly sponsored by Ubalo.

    PK! AˆÖÖFfile-manager-advanced/application/library/codemirror/mode/ruby/test.jsnu„[µü¤// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function() { var mode = CodeMirror.getMode({indentUnit: 2}, "ruby"); function MT(name) { test.mode(name, mode, Array.prototype.slice.call(arguments, 1)); } MT("divide_equal_operator", "[variable bar] [operator /=] [variable foo]"); MT("divide_equal_operator_no_spacing", "[variable foo][operator /=][number 42]"); })(); PK!á|‚rrFfile-manager-advanced/application/library/codemirror/mode/diff/diff.jsnu„[µü¤// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMode("diff", function() { var TOKEN_NAMES = { '+': 'positive', '-': 'negative', '@': 'meta' }; return { token: function(stream) { var tw_pos = stream.string.search(/[\t ]+?$/); if (!stream.sol() || tw_pos === 0) { stream.skipToEnd(); return ("error " + ( TOKEN_NAMES[stream.string.charAt(0)] || '')).replace(/ $/, ''); } var token_name = TOKEN_NAMES[stream.peek()] || stream.skipToEnd(); if (tw_pos === -1) { stream.skipToEnd(); } else { stream.pos = tw_pos; } return token_name; } }; }); CodeMirror.defineMIME("text/x-diff", "diff"); }); PK! `I99Ifile-manager-advanced/application/library/codemirror/mode/diff/index.htmlnu„[µü¤ CodeMirror: Diff mode

    Diff mode

    MIME types defined: text/x-diff.

    PK!œ‹‹‹ôô^file-manager-advanced/application/library/codemirror/mode/yaml-frontmatter/yaml-frontmatter.jsnu„[µü¤// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function (mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror"), require("../yaml/yaml")) else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror", "../yaml/yaml"], mod) else // Plain browser env mod(CodeMirror) })(function (CodeMirror) { var START = 0, FRONTMATTER = 1, BODY = 2 // a mixed mode for Markdown text with an optional YAML front matter CodeMirror.defineMode("yaml-frontmatter", function (config, parserConfig) { var yamlMode = CodeMirror.getMode(config, "yaml") var innerMode = CodeMirror.getMode(config, parserConfig && parserConfig.base || "gfm") function curMode(state) { return state.state == BODY ? innerMode : yamlMode } return { startState: function () { return { state: START, inner: CodeMirror.startState(yamlMode) } }, copyState: function (state) { return { state: state.state, inner: CodeMirror.copyState(curMode(state), state.inner) } }, token: function (stream, state) { if (state.state == START) { if (stream.match(/---/, false)) { state.state = FRONTMATTER return yamlMode.token(stream, state.inner) } else { state.state = BODY state.inner = CodeMirror.startState(innerMode) return innerMode.token(stream, state.inner) } } else if (state.state == FRONTMATTER) { var end = stream.sol() && stream.match(/---/, false) var style = yamlMode.token(stream, state.inner) if (end) { state.state = BODY state.inner = CodeMirror.startState(innerMode) } return style } else { return innerMode.token(stream, state.inner) } }, innerMode: function (state) { return {mode: curMode(state), state: state.inner} }, blankLine: function (state) { var mode = curMode(state) if (mode.blankLine) return mode.blankLine(state.inner) } } }) }); PK!Ÿ:Ù Ufile-manager-advanced/application/library/codemirror/mode/yaml-frontmatter/index.htmlnu„[µü¤ CodeMirror: YAML front matter mode

    YAML front matter mode

    Defines a mode that parses a YAML frontmatter at the start of a file, switching to a base mode at the end of that. Takes a mode configuration option base to configure the base mode, which defaults to "gfm".

    PK!˜‹=òú ú Kfile-manager-advanced/application/library/codemirror/mode/scheme/index.htmlnu„[µü¤ CodeMirror: Scheme mode

    Scheme mode

    MIME types defined: text/x-scheme.

    PK!󾡆44Jfile-manager-advanced/application/library/codemirror/mode/scheme/scheme.jsnu„[µü¤// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE /** * Author: Koh Zi Han, based on implementation by Koh Zi Chun */ (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMode("scheme", function () { var BUILTIN = "builtin", COMMENT = "comment", STRING = "string", ATOM = "atom", NUMBER = "number", BRACKET = "bracket"; var INDENT_WORD_SKIP = 2; function makeKeywords(str) { var obj = {}, words = str.split(" "); for (var i = 0; i < words.length; ++i) obj[words[i]] = true; return obj; } var keywords = makeKeywords("λ case-lambda call/cc class define-class exit-handler field import inherit init-field interface let*-values let-values let/ec mixin opt-lambda override protect provide public rename require require-for-syntax syntax syntax-case syntax-error unit/sig unless when with-syntax and begin call-with-current-continuation call-with-input-file call-with-output-file case cond define define-syntax delay do dynamic-wind else for-each if lambda let let* let-syntax letrec letrec-syntax map or syntax-rules abs acos angle append apply asin assoc assq assv atan boolean? caar cadr call-with-input-file call-with-output-file call-with-values car cdddar cddddr cdr ceiling char->integer char-alphabetic? char-ci<=? char-ci=? char-ci>? char-downcase char-lower-case? char-numeric? char-ready? char-upcase char-upper-case? char-whitespace? char<=? char=? char>? char? close-input-port close-output-port complex? cons cos current-input-port current-output-port denominator display eof-object? eq? equal? eqv? eval even? exact->inexact exact? exp expt #f floor force gcd imag-part inexact->exact inexact? input-port? integer->char integer? interaction-environment lcm length list list->string list->vector list-ref list-tail list? load log magnitude make-polar make-rectangular make-string make-vector max member memq memv min modulo negative? newline not null-environment null? number->string number? numerator odd? open-input-file open-output-file output-port? pair? peek-char port? positive? procedure? quasiquote quote quotient rational? rationalize read read-char real-part real? remainder reverse round scheme-report-environment set! set-car! set-cdr! sin sqrt string string->list string->number string->symbol string-append string-ci<=? string-ci=? string-ci>? string-copy string-fill! string-length string-ref string-set! string<=? string=? string>? string? substring symbol->string symbol? #t tan transcript-off transcript-on truncate values vector vector->list vector-fill! vector-length vector-ref vector-set! with-input-from-file with-output-to-file write write-char zero?"); var indentKeys = makeKeywords("define let letrec let* lambda"); function stateStack(indent, type, prev) { // represents a state stack object this.indent = indent; this.type = type; this.prev = prev; } function pushStack(state, indent, type) { state.indentStack = new stateStack(indent, type, state.indentStack); } function popStack(state) { state.indentStack = state.indentStack.prev; } var binaryMatcher = new RegExp(/^(?:[-+]i|[-+][01]+#*(?:\/[01]+#*)?i|[-+]?[01]+#*(?:\/[01]+#*)?@[-+]?[01]+#*(?:\/[01]+#*)?|[-+]?[01]+#*(?:\/[01]+#*)?[-+](?:[01]+#*(?:\/[01]+#*)?)?i|[-+]?[01]+#*(?:\/[01]+#*)?)(?=[()\s;"]|$)/i); var octalMatcher = new RegExp(/^(?:[-+]i|[-+][0-7]+#*(?:\/[0-7]+#*)?i|[-+]?[0-7]+#*(?:\/[0-7]+#*)?@[-+]?[0-7]+#*(?:\/[0-7]+#*)?|[-+]?[0-7]+#*(?:\/[0-7]+#*)?[-+](?:[0-7]+#*(?:\/[0-7]+#*)?)?i|[-+]?[0-7]+#*(?:\/[0-7]+#*)?)(?=[()\s;"]|$)/i); var hexMatcher = new RegExp(/^(?:[-+]i|[-+][\da-f]+#*(?:\/[\da-f]+#*)?i|[-+]?[\da-f]+#*(?:\/[\da-f]+#*)?@[-+]?[\da-f]+#*(?:\/[\da-f]+#*)?|[-+]?[\da-f]+#*(?:\/[\da-f]+#*)?[-+](?:[\da-f]+#*(?:\/[\da-f]+#*)?)?i|[-+]?[\da-f]+#*(?:\/[\da-f]+#*)?)(?=[()\s;"]|$)/i); var decimalMatcher = new RegExp(/^(?:[-+]i|[-+](?:(?:(?:\d+#+\.?#*|\d+\.\d*#*|\.\d+#*|\d+)(?:[esfdl][-+]?\d+)?)|\d+#*\/\d+#*)i|[-+]?(?:(?:(?:\d+#+\.?#*|\d+\.\d*#*|\.\d+#*|\d+)(?:[esfdl][-+]?\d+)?)|\d+#*\/\d+#*)@[-+]?(?:(?:(?:\d+#+\.?#*|\d+\.\d*#*|\.\d+#*|\d+)(?:[esfdl][-+]?\d+)?)|\d+#*\/\d+#*)|[-+]?(?:(?:(?:\d+#+\.?#*|\d+\.\d*#*|\.\d+#*|\d+)(?:[esfdl][-+]?\d+)?)|\d+#*\/\d+#*)[-+](?:(?:(?:\d+#+\.?#*|\d+\.\d*#*|\.\d+#*|\d+)(?:[esfdl][-+]?\d+)?)|\d+#*\/\d+#*)?i|(?:(?:(?:\d+#+\.?#*|\d+\.\d*#*|\.\d+#*|\d+)(?:[esfdl][-+]?\d+)?)|\d+#*\/\d+#*))(?=[()\s;"]|$)/i); function isBinaryNumber (stream) { return stream.match(binaryMatcher); } function isOctalNumber (stream) { return stream.match(octalMatcher); } function isDecimalNumber (stream, backup) { if (backup === true) { stream.backUp(1); } return stream.match(decimalMatcher); } function isHexNumber (stream) { return stream.match(hexMatcher); } return { startState: function () { return { indentStack: null, indentation: 0, mode: false, sExprComment: false }; }, token: function (stream, state) { if (state.indentStack == null && stream.sol()) { // update indentation, but only if indentStack is empty state.indentation = stream.indentation(); } // skip spaces if (stream.eatSpace()) { return null; } var returnType = null; switch(state.mode){ case "string": // multi-line string parsing mode var next, escaped = false; while ((next = stream.next()) != null) { if (next == "\"" && !escaped) { state.mode = false; break; } escaped = !escaped && next == "\\"; } returnType = STRING; // continue on in scheme-string mode break; case "comment": // comment parsing mode var next, maybeEnd = false; while ((next = stream.next()) != null) { if (next == "#" && maybeEnd) { state.mode = false; break; } maybeEnd = (next == "|"); } returnType = COMMENT; break; case "s-expr-comment": // s-expr commenting mode state.mode = false; if(stream.peek() == "(" || stream.peek() == "["){ // actually start scheme s-expr commenting mode state.sExprComment = 0; }else{ // if not we just comment the entire of the next token stream.eatWhile(/[^/s]/); // eat non spaces returnType = COMMENT; break; } default: // default parsing mode var ch = stream.next(); if (ch == "\"") { state.mode = "string"; returnType = STRING; } else if (ch == "'") { returnType = ATOM; } else if (ch == '#') { if (stream.eat("|")) { // Multi-line comment state.mode = "comment"; // toggle to comment mode returnType = COMMENT; } else if (stream.eat(/[tf]/i)) { // #t/#f (atom) returnType = ATOM; } else if (stream.eat(';')) { // S-Expr comment state.mode = "s-expr-comment"; returnType = COMMENT; } else { var numTest = null, hasExactness = false, hasRadix = true; if (stream.eat(/[ei]/i)) { hasExactness = true; } else { stream.backUp(1); // must be radix specifier } if (stream.match(/^#b/i)) { numTest = isBinaryNumber; } else if (stream.match(/^#o/i)) { numTest = isOctalNumber; } else if (stream.match(/^#x/i)) { numTest = isHexNumber; } else if (stream.match(/^#d/i)) { numTest = isDecimalNumber; } else if (stream.match(/^[-+0-9.]/, false)) { hasRadix = false; numTest = isDecimalNumber; // re-consume the intial # if all matches failed } else if (!hasExactness) { stream.eat('#'); } if (numTest != null) { if (hasRadix && !hasExactness) { // consume optional exactness after radix stream.match(/^#[ei]/i); } if (numTest(stream)) returnType = NUMBER; } } } else if (/^[-+0-9.]/.test(ch) && isDecimalNumber(stream, true)) { // match non-prefixed number, must be decimal returnType = NUMBER; } else if (ch == ";") { // comment stream.skipToEnd(); // rest of the line is a comment returnType = COMMENT; } else if (ch == "(" || ch == "[") { var keyWord = ''; var indentTemp = stream.column(), letter; /** Either (indent-word .. (non-indent-word .. (;something else, bracket, etc. */ while ((letter = stream.eat(/[^\s\(\[\;\)\]]/)) != null) { keyWord += letter; } if (keyWord.length > 0 && indentKeys.propertyIsEnumerable(keyWord)) { // indent-word pushStack(state, indentTemp + INDENT_WORD_SKIP, ch); } else { // non-indent word // we continue eating the spaces stream.eatSpace(); if (stream.eol() || stream.peek() == ";") { // nothing significant after // we restart indentation 1 space after pushStack(state, indentTemp + 1, ch); } else { pushStack(state, indentTemp + stream.current().length, ch); // else we match } } stream.backUp(stream.current().length - 1); // undo all the eating if(typeof state.sExprComment == "number") state.sExprComment++; returnType = BRACKET; } else if (ch == ")" || ch == "]") { returnType = BRACKET; if (state.indentStack != null && state.indentStack.type == (ch == ")" ? "(" : "[")) { popStack(state); if(typeof state.sExprComment == "number"){ if(--state.sExprComment == 0){ returnType = COMMENT; // final closing bracket state.sExprComment = false; // turn off s-expr commenting mode } } } } else { stream.eatWhile(/[\w\$_\-!$%&*+\.\/:<=>?@\^~]/); if (keywords && keywords.propertyIsEnumerable(stream.current())) { returnType = BUILTIN; } else returnType = "variable"; } } return (typeof state.sExprComment == "number") ? COMMENT : returnType; }, indent: function (state) { if (state.indentStack == null) return state.indentation; return state.indentStack.indent; }, closeBrackets: {pairs: "()[]{}\"\""}, lineComment: ";;" }; }); CodeMirror.defineMIME("text/x-scheme", "scheme"); }); PK!A>mÃÃHfile-manager-advanced/application/library/codemirror/mode/pig/index.htmlnu„[µü¤ CodeMirror: Pig Latin mode

    Pig Latin mode

    Simple mode that handles Pig Latin language.

    MIME type defined: text/x-pig (PIG code)

    PK!ÄÄba²²Dfile-manager-advanced/application/library/codemirror/mode/pig/pig.jsnu„[µü¤// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE /* * Pig Latin Mode for CodeMirror 2 * @author Prasanth Jayachandran * @link https://github.com/prasanthj/pig-codemirror-2 * This implementation is adapted from PL/SQL mode in CodeMirror 2. */ (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMode("pig", function(_config, parserConfig) { var keywords = parserConfig.keywords, builtins = parserConfig.builtins, types = parserConfig.types, multiLineStrings = parserConfig.multiLineStrings; var isOperatorChar = /[*+\-%<>=&?:\/!|]/; function chain(stream, state, f) { state.tokenize = f; return f(stream, state); } function tokenComment(stream, state) { var isEnd = false; var ch; while(ch = stream.next()) { if(ch == "/" && isEnd) { state.tokenize = tokenBase; break; } isEnd = (ch == "*"); } return "comment"; } function tokenString(quote) { return function(stream, state) { var escaped = false, next, end = false; while((next = stream.next()) != null) { if (next == quote && !escaped) { end = true; break; } escaped = !escaped && next == "\\"; } if (end || !(escaped || multiLineStrings)) state.tokenize = tokenBase; return "error"; }; } function tokenBase(stream, state) { var ch = stream.next(); // is a start of string? if (ch == '"' || ch == "'") return chain(stream, state, tokenString(ch)); // is it one of the special chars else if(/[\[\]{}\(\),;\.]/.test(ch)) return null; // is it a number? else if(/\d/.test(ch)) { stream.eatWhile(/[\w\.]/); return "number"; } // multi line comment or operator else if (ch == "/") { if (stream.eat("*")) { return chain(stream, state, tokenComment); } else { stream.eatWhile(isOperatorChar); return "operator"; } } // single line comment or operator else if (ch=="-") { if(stream.eat("-")){ stream.skipToEnd(); return "comment"; } else { stream.eatWhile(isOperatorChar); return "operator"; } } // is it an operator else if (isOperatorChar.test(ch)) { stream.eatWhile(isOperatorChar); return "operator"; } else { // get the while word stream.eatWhile(/[\w\$_]/); // is it one of the listed keywords? if (keywords && keywords.propertyIsEnumerable(stream.current().toUpperCase())) { //keywords can be used as variables like flatten(group), group.$0 etc.. if (!stream.eat(")") && !stream.eat(".")) return "keyword"; } // is it one of the builtin functions? if (builtins && builtins.propertyIsEnumerable(stream.current().toUpperCase())) return "variable-2"; // is it one of the listed types? if (types && types.propertyIsEnumerable(stream.current().toUpperCase())) return "variable-3"; // default is a 'variable' return "variable"; } } // Interface return { startState: function() { return { tokenize: tokenBase, startOfLine: true }; }, token: function(stream, state) { if(stream.eatSpace()) return null; var style = state.tokenize(stream, state); return style; } }; }); (function() { function keywords(str) { var obj = {}, words = str.split(" "); for (var i = 0; i < words.length; ++i) obj[words[i]] = true; return obj; } // builtin funcs taken from trunk revision 1303237 var pBuiltins = "ABS ACOS ARITY ASIN ATAN AVG BAGSIZE BINSTORAGE BLOOM BUILDBLOOM CBRT CEIL " + "CONCAT COR COS COSH COUNT COUNT_STAR COV CONSTANTSIZE CUBEDIMENSIONS DIFF DISTINCT DOUBLEABS " + "DOUBLEAVG DOUBLEBASE DOUBLEMAX DOUBLEMIN DOUBLEROUND DOUBLESUM EXP FLOOR FLOATABS FLOATAVG " + "FLOATMAX FLOATMIN FLOATROUND FLOATSUM GENERICINVOKER INDEXOF INTABS INTAVG INTMAX INTMIN " + "INTSUM INVOKEFORDOUBLE INVOKEFORFLOAT INVOKEFORINT INVOKEFORLONG INVOKEFORSTRING INVOKER " + "ISEMPTY JSONLOADER JSONMETADATA JSONSTORAGE LAST_INDEX_OF LCFIRST LOG LOG10 LOWER LONGABS " + "LONGAVG LONGMAX LONGMIN LONGSUM MAX MIN MAPSIZE MONITOREDUDF NONDETERMINISTIC OUTPUTSCHEMA " + "PIGSTORAGE PIGSTREAMING RANDOM REGEX_EXTRACT REGEX_EXTRACT_ALL REPLACE ROUND SIN SINH SIZE " + "SQRT STRSPLIT SUBSTRING SUM STRINGCONCAT STRINGMAX STRINGMIN STRINGSIZE TAN TANH TOBAG " + "TOKENIZE TOMAP TOP TOTUPLE TRIM TEXTLOADER TUPLESIZE UCFIRST UPPER UTF8STORAGECONVERTER "; // taken from QueryLexer.g var pKeywords = "VOID IMPORT RETURNS DEFINE LOAD FILTER FOREACH ORDER CUBE DISTINCT COGROUP " + "JOIN CROSS UNION SPLIT INTO IF OTHERWISE ALL AS BY USING INNER OUTER ONSCHEMA PARALLEL " + "PARTITION GROUP AND OR NOT GENERATE FLATTEN ASC DESC IS STREAM THROUGH STORE MAPREDUCE " + "SHIP CACHE INPUT OUTPUT STDERROR STDIN STDOUT LIMIT SAMPLE LEFT RIGHT FULL EQ GT LT GTE LTE " + "NEQ MATCHES TRUE FALSE DUMP"; // data types var pTypes = "BOOLEAN INT LONG FLOAT DOUBLE CHARARRAY BYTEARRAY BAG TUPLE MAP "; CodeMirror.defineMIME("text/x-pig", { name: "pig", builtins: keywords(pBuiltins), keywords: keywords(pKeywords), types: keywords(pTypes) }); CodeMirror.registerHelper("hintWords", "pig", (pBuiltins + pTypes + pKeywords).split(" ")); }()); }); PK!ÒžŽm¼ ¼ Kfile-manager-advanced/application/library/codemirror/mode/puppet/index.htmlnu„[µü¤ CodeMirror: Puppet mode

    Puppet mode

    MIME types defined: text/x-puppet.

    PK!xæ���Jfile-manager-advanced/application/library/codemirror/mode/puppet/puppet.jsnu„[µü¤// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMode("puppet", function () { // Stores the words from the define method var words = {}; // Taken, mostly, from the Puppet official variable standards regex var variable_regex = /({)?([a-z][a-z0-9_]*)?((::[a-z][a-z0-9_]*)*::)?[a-zA-Z0-9_]+(})?/; // Takes a string of words separated by spaces and adds them as // keys with the value of the first argument 'style' function define(style, string) { var split = string.split(' '); for (var i = 0; i < split.length; i++) { words[split[i]] = style; } } // Takes commonly known puppet types/words and classifies them to a style define('keyword', 'class define site node include import inherits'); define('keyword', 'case if else in and elsif default or'); define('atom', 'false true running present absent file directory undef'); define('builtin', 'action augeas burst chain computer cron destination dport exec ' + 'file filebucket group host icmp iniface interface jump k5login limit log_level ' + 'log_prefix macauthorization mailalias maillist mcx mount nagios_command ' + 'nagios_contact nagios_contactgroup nagios_host nagios_hostdependency ' + 'nagios_hostescalation nagios_hostextinfo nagios_hostgroup nagios_service ' + 'nagios_servicedependency nagios_serviceescalation nagios_serviceextinfo ' + 'nagios_servicegroup nagios_timeperiod name notify outiface package proto reject ' + 'resources router schedule scheduled_task selboolean selmodule service source ' + 'sport ssh_authorized_key sshkey stage state table tidy todest toports tosource ' + 'user vlan yumrepo zfs zone zpool'); // After finding a start of a string ('|") this function attempts to find the end; // If a variable is encountered along the way, we display it differently when it // is encapsulated in a double-quoted string. function tokenString(stream, state) { var current, prev, found_var = false; while (!stream.eol() && (current = stream.next()) != state.pending) { if (current === '$' && prev != '\\' && state.pending == '"') { found_var = true; break; } prev = current; } if (found_var) { stream.backUp(1); } if (current == state.pending) { state.continueString = false; } else { state.continueString = true; } return "string"; } // Main function function tokenize(stream, state) { // Matches one whole word var word = stream.match(/[\w]+/, false); // Matches attributes (i.e. ensure => present ; 'ensure' would be matched) var attribute = stream.match(/(\s+)?\w+\s+=>.*/, false); // Matches non-builtin resource declarations // (i.e. "apache::vhost {" or "mycustomclasss {" would be matched) var resource = stream.match(/(\s+)?[\w:_]+(\s+)?{/, false); // Matches virtual and exported resources (i.e. @@user { ; and the like) var special_resource = stream.match(/(\s+)?[@]{1,2}[\w:_]+(\s+)?{/, false); // Finally advance the stream var ch = stream.next(); // Have we found a variable? if (ch === '$') { if (stream.match(variable_regex)) { // If so, and its in a string, assign it a different color return state.continueString ? 'variable-2' : 'variable'; } // Otherwise return an invalid variable return "error"; } // Should we still be looking for the end of a string? if (state.continueString) { // If so, go through the loop again stream.backUp(1); return tokenString(stream, state); } // Are we in a definition (class, node, define)? if (state.inDefinition) { // If so, return def (i.e. for 'class myclass {' ; 'myclass' would be matched) if (stream.match(/(\s+)?[\w:_]+(\s+)?/)) { return 'def'; } // Match the rest it the next time around stream.match(/\s+{/); state.inDefinition = false; } // Are we in an 'include' statement? if (state.inInclude) { // Match and return the included class stream.match(/(\s+)?\S+(\s+)?/); state.inInclude = false; return 'def'; } // Do we just have a function on our hands? // In 'ensure_resource("myclass")', 'ensure_resource' is matched if (stream.match(/(\s+)?\w+\(/)) { stream.backUp(1); return 'def'; } // Have we matched the prior attribute regex? if (attribute) { stream.match(/(\s+)?\w+/); return 'tag'; } // Do we have Puppet specific words? if (word && words.hasOwnProperty(word)) { // Negates the initial next() stream.backUp(1); // rs move the stream stream.match(/[\w]+/); // We want to process these words differently // do to the importance they have in Puppet if (stream.match(/\s+\S+\s+{/, false)) { state.inDefinition = true; } if (word == 'include') { state.inInclude = true; } // Returns their value as state in the prior define methods return words[word]; } // Is there a match on a reference? if (/(^|\s+)[A-Z][\w:_]+/.test(word)) { // Negate the next() stream.backUp(1); // Match the full reference stream.match(/(^|\s+)[A-Z][\w:_]+/); return 'def'; } // Have we matched the prior resource regex? if (resource) { stream.match(/(\s+)?[\w:_]+/); return 'def'; } // Have we matched the prior special_resource regex? if (special_resource) { stream.match(/(\s+)?[@]{1,2}/); return 'special'; } // Match all the comments. All of them. if (ch == "#") { stream.skipToEnd(); return "comment"; } // Have we found a string? if (ch == "'" || ch == '"') { // Store the type (single or double) state.pending = ch; // Perform the looping function to find the end return tokenString(stream, state); } // Match all the brackets if (ch == '{' || ch == '}') { return 'bracket'; } // Match characters that we are going to assume // are trying to be regex if (ch == '/') { stream.match(/.*?\//); return 'variable-3'; } // Match all the numbers if (ch.match(/[0-9]/)) { stream.eatWhile(/[0-9]+/); return 'number'; } // Match the '=' and '=>' operators if (ch == '=') { if (stream.peek() == '>') { stream.next(); } return "operator"; } // Keep advancing through all the rest stream.eatWhile(/[\w-]/); // Return a blank line for everything else return null; } // Start it all return { startState: function () { var state = {}; state.inDefinition = false; state.inInclude = false; state.continueString = false; state.pending = false; return state; }, token: function (stream, state) { // Strip the spaces, but regex will account for them eitherway if (stream.eatSpace()) return null; // Go through the main process return tokenize(stream, state); } }; }); CodeMirror.defineMIME("text/x-puppet", "puppet"); }); PK!,¹Û[[Ifile-manager-advanced/application/library/codemirror/mode/dart/index.htmlnu„[µü¤ CodeMirror: Dart mode

    Dart mode

    PK! F³úúFfile-manager-advanced/application/library/codemirror/mode/dart/dart.jsnu„[µü¤// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror"), require("../clike/clike")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror", "../clike/clike"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; var keywords = ("this super static final const abstract class extends external factory " + "implements get native operator set typedef with enum throw rethrow " + "assert break case continue default in return new deferred async await " + "try catch finally do else for if switch while import library export " + "part of show hide is as").split(" "); var blockKeywords = "try catch finally do else for if switch while".split(" "); var atoms = "true false null".split(" "); var builtins = "void bool num int double dynamic var String".split(" "); function set(words) { var obj = {}; for (var i = 0; i < words.length; ++i) obj[words[i]] = true; return obj; } function pushInterpolationStack(state) { (state.interpolationStack || (state.interpolationStack = [])).push(state.tokenize); } function popInterpolationStack(state) { return (state.interpolationStack || (state.interpolationStack = [])).pop(); } function sizeInterpolationStack(state) { return state.interpolationStack ? state.interpolationStack.length : 0; } CodeMirror.defineMIME("application/dart", { name: "clike", keywords: set(keywords), blockKeywords: set(blockKeywords), builtin: set(builtins), atoms: set(atoms), hooks: { "@": function(stream) { stream.eatWhile(/[\w\$_\.]/); return "meta"; }, // custom string handling to deal with triple-quoted strings and string interpolation "'": function(stream, state) { return tokenString("'", stream, state, false); }, "\"": function(stream, state) { return tokenString("\"", stream, state, false); }, "r": function(stream, state) { var peek = stream.peek(); if (peek == "'" || peek == "\"") { return tokenString(stream.next(), stream, state, true); } return false; }, "}": function(_stream, state) { // "}" is end of interpolation, if interpolation stack is non-empty if (sizeInterpolationStack(state) > 0) { state.tokenize = popInterpolationStack(state); return null; } return false; }, "/": function(stream, state) { if (!stream.eat("*")) return false state.tokenize = tokenNestedComment(1) return state.tokenize(stream, state) } } }); function tokenString(quote, stream, state, raw) { var tripleQuoted = false; if (stream.eat(quote)) { if (stream.eat(quote)) tripleQuoted = true; else return "string"; //empty string } function tokenStringHelper(stream, state) { var escaped = false; while (!stream.eol()) { if (!raw && !escaped && stream.peek() == "$") { pushInterpolationStack(state); state.tokenize = tokenInterpolation; return "string"; } var next = stream.next(); if (next == quote && !escaped && (!tripleQuoted || stream.match(quote + quote))) { state.tokenize = null; break; } escaped = !raw && !escaped && next == "\\"; } return "string"; } state.tokenize = tokenStringHelper; return tokenStringHelper(stream, state); } function tokenInterpolation(stream, state) { stream.eat("$"); if (stream.eat("{")) { // let clike handle the content of ${...}, // we take over again when "}" appears (see hooks). state.tokenize = null; } else { state.tokenize = tokenInterpolationIdentifier; } return null; } function tokenInterpolationIdentifier(stream, state) { stream.eatWhile(/[\w_]/); state.tokenize = popInterpolationStack(state); return "variable"; } function tokenNestedComment(depth) { return function (stream, state) { var ch while (ch = stream.next()) { if (ch == "*" && stream.eat("/")) { if (depth == 1) { state.tokenize = null break } else { state.tokenize = tokenNestedComment(depth - 1) return state.tokenize(stream, state) } } else if (ch == "/" && stream.eat("*")) { state.tokenize = tokenNestedComment(depth + 1) return state.tokenize(stream, state) } } return "comment" } } CodeMirror.registerHelper("hintWords", "application/dart", keywords.concat(atoms).concat(builtins)); // This is needed to make loading through meta.js work. CodeMirror.defineMode("dart", function(conf) { return CodeMirror.getMode(conf, "application/dart"); }, "clike"); }); PK!œè�y'y'Jfile-manager-advanced/application/library/codemirror/mode/clike/index.htmlnu„[µü¤ CodeMirror: C-like mode

    C-like mode

    C++ example

    Objective-C example

    Java example

    Scala example

    Kotlin mode

    Ceylon mode

    Simple mode that tries to handle C-like languages as well as it can. Takes two configuration parameters: keywords, an object whose property names are the keywords in the language, and useCPP, which determines whether C preprocessor directives are recognized.

    MIME types defined: text/x-csrc (C), text/x-c++src (C++), text/x-java (Java), text/x-csharp (C#), text/x-objectivec (Objective-C), text/x-scala (Scala), text/x-vertex x-shader/x-fragment (shader programs), text/x-squirrel (Squirrel) and text/x-ceylon (Ceylon)

    PK!"­ xxHfile-manager-advanced/application/library/codemirror/mode/clike/clike.jsnu„[µü¤// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; function Context(indented, column, type, info, align, prev) { this.indented = indented; this.column = column; this.type = type; this.info = info; this.align = align; this.prev = prev; } function pushContext(state, col, type, info) { var indent = state.indented; if (state.context && state.context.type != "statement" && type != "statement") indent = state.context.indented; return state.context = new Context(indent, col, type, info, null, state.context); } function popContext(state) { var t = state.context.type; if (t == ")" || t == "]" || t == "}") state.indented = state.context.indented; return state.context = state.context.prev; } function typeBefore(stream, state, pos) { if (state.prevToken == "variable" || state.prevToken == "variable-3") return true; if (/\S(?:[^- ]>|[*\]])\s*$|\*$/.test(stream.string.slice(0, pos))) return true; if (state.typeAtEndOfLine && stream.column() == stream.indentation()) return true; } function isTopScope(context) { for (;;) { if (!context || context.type == "top") return true; if (context.type == "}" && context.prev.info != "namespace") return false; context = context.prev; } } CodeMirror.defineMode("clike", function(config, parserConfig) { var indentUnit = config.indentUnit, statementIndentUnit = parserConfig.statementIndentUnit || indentUnit, dontAlignCalls = parserConfig.dontAlignCalls, keywords = parserConfig.keywords || {}, types = parserConfig.types || {}, builtin = parserConfig.builtin || {}, blockKeywords = parserConfig.blockKeywords || {}, defKeywords = parserConfig.defKeywords || {}, atoms = parserConfig.atoms || {}, hooks = parserConfig.hooks || {}, multiLineStrings = parserConfig.multiLineStrings, indentStatements = parserConfig.indentStatements !== false, indentSwitch = parserConfig.indentSwitch !== false, namespaceSeparator = parserConfig.namespaceSeparator, isPunctuationChar = parserConfig.isPunctuationChar || /[\[\]{}\(\),;\:\.]/, numberStart = parserConfig.numberStart || /[\d\.]/, number = parserConfig.number || /^(?:0x[a-f\d]+|0b[01]+|(?:\d+\.?\d*|\.\d+)(?:e[-+]?\d+)?)(u|ll?|l|f)?/i, isOperatorChar = parserConfig.isOperatorChar || /[+\-*&%=<>!?|\/]/, endStatement = parserConfig.endStatement || /^[;:,]$/; var curPunc, isDefKeyword; function tokenBase(stream, state) { var ch = stream.next(); if (hooks[ch]) { var result = hooks[ch](stream, state); if (result !== false) return result; } if (ch == '"' || ch == "'") { state.tokenize = tokenString(ch); return state.tokenize(stream, state); } if (isPunctuationChar.test(ch)) { curPunc = ch; return null; } if (numberStart.test(ch)) { stream.backUp(1) if (stream.match(number)) return "number" stream.next() } if (ch == "/") { if (stream.eat("*")) { state.tokenize = tokenComment; return tokenComment(stream, state); } if (stream.eat("/")) { stream.skipToEnd(); return "comment"; } } if (isOperatorChar.test(ch)) { while (!stream.match(/^\/[\/*]/, false) && stream.eat(isOperatorChar)) {} return "operator"; } stream.eatWhile(/[\w\$_\xa1-\uffff]/); if (namespaceSeparator) while (stream.match(namespaceSeparator)) stream.eatWhile(/[\w\$_\xa1-\uffff]/); var cur = stream.current(); if (contains(keywords, cur)) { if (contains(blockKeywords, cur)) curPunc = "newstatement"; if (contains(defKeywords, cur)) isDefKeyword = true; return "keyword"; } if (contains(types, cur)) return "variable-3"; if (contains(builtin, cur)) { if (contains(blockKeywords, cur)) curPunc = "newstatement"; return "builtin"; } if (contains(atoms, cur)) return "atom"; return "variable"; } function tokenString(quote) { return function(stream, state) { var escaped = false, next, end = false; while ((next = stream.next()) != null) { if (next == quote && !escaped) {end = true; break;} escaped = !escaped && next == "\\"; } if (end || !(escaped || multiLineStrings)) state.tokenize = null; return "string"; }; } function tokenComment(stream, state) { var maybeEnd = false, ch; while (ch = stream.next()) { if (ch == "/" && maybeEnd) { state.tokenize = null; break; } maybeEnd = (ch == "*"); } return "comment"; } function maybeEOL(stream, state) { if (parserConfig.typeFirstDefinitions && stream.eol() && isTopScope(state.context)) state.typeAtEndOfLine = typeBefore(stream, state, stream.pos) } // Interface return { startState: function(basecolumn) { return { tokenize: null, context: new Context((basecolumn || 0) - indentUnit, 0, "top", null, false), indented: 0, startOfLine: true, prevToken: null }; }, token: function(stream, state) { var ctx = state.context; if (stream.sol()) { if (ctx.align == null) ctx.align = false; state.indented = stream.indentation(); state.startOfLine = true; } if (stream.eatSpace()) { maybeEOL(stream, state); return null; } curPunc = isDefKeyword = null; var style = (state.tokenize || tokenBase)(stream, state); if (style == "comment" || style == "meta") return style; if (ctx.align == null) ctx.align = true; if (endStatement.test(curPunc)) while (state.context.type == "statement") popContext(state); else if (curPunc == "{") pushContext(state, stream.column(), "}"); else if (curPunc == "[") pushContext(state, stream.column(), "]"); else if (curPunc == "(") pushContext(state, stream.column(), ")"); else if (curPunc == "}") { while (ctx.type == "statement") ctx = popContext(state); if (ctx.type == "}") ctx = popContext(state); while (ctx.type == "statement") ctx = popContext(state); } else if (curPunc == ctx.type) popContext(state); else if (indentStatements && (((ctx.type == "}" || ctx.type == "top") && curPunc != ";") || (ctx.type == "statement" && curPunc == "newstatement"))) { pushContext(state, stream.column(), "statement", stream.current()); } if (style == "variable" && ((state.prevToken == "def" || (parserConfig.typeFirstDefinitions && typeBefore(stream, state, stream.start) && isTopScope(state.context) && stream.match(/^\s*\(/, false))))) style = "def"; if (hooks.token) { var result = hooks.token(stream, state, style); if (result !== undefined) style = result; } if (style == "def" && parserConfig.styleDefs === false) style = "variable"; state.startOfLine = false; state.prevToken = isDefKeyword ? "def" : style || curPunc; maybeEOL(stream, state); return style; }, indent: function(state, textAfter) { if (state.tokenize != tokenBase && state.tokenize != null || state.typeAtEndOfLine) return CodeMirror.Pass; var ctx = state.context, firstChar = textAfter && textAfter.charAt(0); if (ctx.type == "statement" && firstChar == "}") ctx = ctx.prev; if (parserConfig.dontIndentStatements) while (ctx.type == "statement" && parserConfig.dontIndentStatements.test(ctx.info)) ctx = ctx.prev if (hooks.indent) { var hook = hooks.indent(state, ctx, textAfter); if (typeof hook == "number") return hook } var closing = firstChar == ctx.type; var switchBlock = ctx.prev && ctx.prev.info == "switch"; if (parserConfig.allmanIndentation && /[{(]/.test(firstChar)) { while (ctx.type != "top" && ctx.type != "}") ctx = ctx.prev return ctx.indented } if (ctx.type == "statement") return ctx.indented + (firstChar == "{" ? 0 : statementIndentUnit); if (ctx.align && (!dontAlignCalls || ctx.type != ")")) return ctx.column + (closing ? 0 : 1); if (ctx.type == ")" && !closing) return ctx.indented + statementIndentUnit; return ctx.indented + (closing ? 0 : indentUnit) + (!closing && switchBlock && !/^(?:case|default)\b/.test(textAfter) ? indentUnit : 0); }, electricInput: indentSwitch ? /^\s*(?:case .*?:|default:|\{\}?|\})$/ : /^\s*[{}]$/, blockCommentStart: "/*", blockCommentEnd: "*/", lineComment: "//", fold: "brace" }; }); function words(str) { var obj = {}, words = str.split(" "); for (var i = 0; i < words.length; ++i) obj[words[i]] = true; return obj; } function contains(words, word) { if (typeof words === "function") { return words(word); } else { return words.propertyIsEnumerable(word); } } var cKeywords = "auto if break case register continue return default do sizeof " + "static else struct switch extern typedef union for goto while enum const volatile"; var cTypes = "int long char short double float unsigned signed void size_t ptrdiff_t"; function cppHook(stream, state) { if (!state.startOfLine) return false for (var ch, next = null; ch = stream.peek();) { if (ch == "\\" && stream.match(/^.$/)) { next = cppHook break } else if (ch == "/" && stream.match(/^\/[\/\*]/, false)) { break } stream.next() } state.tokenize = next return "meta" } function pointerHook(_stream, state) { if (state.prevToken == "variable-3") return "variable-3"; return false; } function cpp14Literal(stream) { stream.eatWhile(/[\w\.']/); return "number"; } function cpp11StringHook(stream, state) { stream.backUp(1); // Raw strings. if (stream.match(/(R|u8R|uR|UR|LR)/)) { var match = stream.match(/"([^\s\\()]{0,16})\(/); if (!match) { return false; } state.cpp11RawStringDelim = match[1]; state.tokenize = tokenRawString; return tokenRawString(stream, state); } // Unicode strings/chars. if (stream.match(/(u8|u|U|L)/)) { if (stream.match(/["']/, /* eat */ false)) { return "string"; } return false; } // Ignore this hook. stream.next(); return false; } function cppLooksLikeConstructor(word) { var lastTwo = /(\w+)::(\w+)$/.exec(word); return lastTwo && lastTwo[1] == lastTwo[2]; } // C#-style strings where "" escapes a quote. function tokenAtString(stream, state) { var next; while ((next = stream.next()) != null) { if (next == '"' && !stream.eat('"')) { state.tokenize = null; break; } } return "string"; } // C++11 raw string literal is "( anything )", where // can be a string up to 16 characters long. function tokenRawString(stream, state) { // Escape characters that have special regex meanings. var delim = state.cpp11RawStringDelim.replace(/[^\w\s]/g, '\\$&'); var match = stream.match(new RegExp(".*?\\)" + delim + '"')); if (match) state.tokenize = null; else stream.skipToEnd(); return "string"; } function def(mimes, mode) { if (typeof mimes == "string") mimes = [mimes]; var words = []; function add(obj) { if (obj) for (var prop in obj) if (obj.hasOwnProperty(prop)) words.push(prop); } add(mode.keywords); add(mode.types); add(mode.builtin); add(mode.atoms); if (words.length) { mode.helperType = mimes[0]; CodeMirror.registerHelper("hintWords", mimes[0], words); } for (var i = 0; i < mimes.length; ++i) CodeMirror.defineMIME(mimes[i], mode); } def(["text/x-csrc", "text/x-c", "text/x-chdr"], { name: "clike", keywords: words(cKeywords), types: words(cTypes + " bool _Complex _Bool float_t double_t intptr_t intmax_t " + "int8_t int16_t int32_t int64_t uintptr_t uintmax_t uint8_t uint16_t " + "uint32_t uint64_t"), blockKeywords: words("case do else for if switch while struct"), defKeywords: words("struct"), typeFirstDefinitions: true, atoms: words("null true false"), hooks: {"#": cppHook, "*": pointerHook}, modeProps: {fold: ["brace", "include"]} }); def(["text/x-c++src", "text/x-c++hdr"], { name: "clike", keywords: words(cKeywords + " asm dynamic_cast namespace reinterpret_cast try explicit new " + "static_cast typeid catch operator template typename class friend private " + "this using const_cast inline public throw virtual delete mutable protected " + "alignas alignof constexpr decltype nullptr noexcept thread_local final " + "static_assert override"), types: words(cTypes + " bool wchar_t"), blockKeywords: words("catch class do else finally for if struct switch try while"), defKeywords: words("class namespace struct enum union"), typeFirstDefinitions: true, atoms: words("true false null"), dontIndentStatements: /^template$/, hooks: { "#": cppHook, "*": pointerHook, "u": cpp11StringHook, "U": cpp11StringHook, "L": cpp11StringHook, "R": cpp11StringHook, "0": cpp14Literal, "1": cpp14Literal, "2": cpp14Literal, "3": cpp14Literal, "4": cpp14Literal, "5": cpp14Literal, "6": cpp14Literal, "7": cpp14Literal, "8": cpp14Literal, "9": cpp14Literal, token: function(stream, state, style) { if (style == "variable" && stream.peek() == "(" && (state.prevToken == ";" || state.prevToken == null || state.prevToken == "}") && cppLooksLikeConstructor(stream.current())) return "def"; } }, namespaceSeparator: "::", modeProps: {fold: ["brace", "include"]} }); def("text/x-java", { name: "clike", keywords: words("abstract assert break case catch class const continue default " + "do else enum extends final finally float for goto if implements import " + "instanceof interface native new package private protected public " + "return static strictfp super switch synchronized this throw throws transient " + "try volatile while"), types: words("byte short int long float double boolean char void Boolean Byte Character Double Float " + "Integer Long Number Object Short String StringBuffer StringBuilder Void"), blockKeywords: words("catch class do else finally for if switch try while"), defKeywords: words("class interface package enum"), typeFirstDefinitions: true, atoms: words("true false null"), endStatement: /^[;:]$/, number: /^(?:0x[a-f\d_]+|0b[01_]+|(?:[\d_]+\.?\d*|\.\d+)(?:e[-+]?[\d_]+)?)(u|ll?|l|f)?/i, hooks: { "@": function(stream) { stream.eatWhile(/[\w\$_]/); return "meta"; } }, modeProps: {fold: ["brace", "import"]} }); def("text/x-csharp", { name: "clike", keywords: words("abstract as async await base break case catch checked class const continue" + " default delegate do else enum event explicit extern finally fixed for" + " foreach goto if implicit in interface internal is lock namespace new" + " operator out override params private protected public readonly ref return sealed" + " sizeof stackalloc static struct switch this throw try typeof unchecked" + " unsafe using virtual void volatile while add alias ascending descending dynamic from get" + " global group into join let orderby partial remove select set value var yield"), types: words("Action Boolean Byte Char DateTime DateTimeOffset Decimal Double Func" + " Guid Int16 Int32 Int64 Object SByte Single String Task TimeSpan UInt16 UInt32" + " UInt64 bool byte char decimal double short int long object" + " sbyte float string ushort uint ulong"), blockKeywords: words("catch class do else finally for foreach if struct switch try while"), defKeywords: words("class interface namespace struct var"), typeFirstDefinitions: true, atoms: words("true false null"), hooks: { "@": function(stream, state) { if (stream.eat('"')) { state.tokenize = tokenAtString; return tokenAtString(stream, state); } stream.eatWhile(/[\w\$_]/); return "meta"; } } }); function tokenTripleString(stream, state) { var escaped = false; while (!stream.eol()) { if (!escaped && stream.match('"""')) { state.tokenize = null; break; } escaped = stream.next() == "\\" && !escaped; } return "string"; } def("text/x-scala", { name: "clike", keywords: words( /* scala */ "abstract case catch class def do else extends final finally for forSome if " + "implicit import lazy match new null object override package private protected return " + "sealed super this throw trait try type val var while with yield _ : = => <- <: " + "<% >: # @ " + /* package scala */ "assert assume require print println printf readLine readBoolean readByte readShort " + "readChar readInt readLong readFloat readDouble " + ":: #:: " ), types: words( "AnyVal App Application Array BufferedIterator BigDecimal BigInt Char Console Either " + "Enumeration Equiv Error Exception Fractional Function IndexedSeq Int Integral Iterable " + "Iterator List Map Numeric Nil NotNull Option Ordered Ordering PartialFunction PartialOrdering " + "Product Proxy Range Responder Seq Serializable Set Specializable Stream StringBuilder " + "StringContext Symbol Throwable Traversable TraversableOnce Tuple Unit Vector " + /* package java.lang */ "Boolean Byte Character CharSequence Class ClassLoader Cloneable Comparable " + "Compiler Double Exception Float Integer Long Math Number Object Package Pair Process " + "Runtime Runnable SecurityManager Short StackTraceElement StrictMath String " + "StringBuffer System Thread ThreadGroup ThreadLocal Throwable Triple Void" ), multiLineStrings: true, blockKeywords: words("catch class do else finally for forSome if match switch try while"), defKeywords: words("class def object package trait type val var"), atoms: words("true false null"), indentStatements: false, indentSwitch: false, hooks: { "@": function(stream) { stream.eatWhile(/[\w\$_]/); return "meta"; }, '"': function(stream, state) { if (!stream.match('""')) return false; state.tokenize = tokenTripleString; return state.tokenize(stream, state); }, "'": function(stream) { stream.eatWhile(/[\w\$_\xa1-\uffff]/); return "atom"; }, "=": function(stream, state) { var cx = state.context if (cx.type == "}" && cx.align && stream.eat(">")) { state.context = new Context(cx.indented, cx.column, cx.type, cx.info, null, cx.prev) return "operator" } else { return false } } }, modeProps: {closeBrackets: {triples: '"'}} }); function tokenKotlinString(tripleString){ return function (stream, state) { var escaped = false, next, end = false; while (!stream.eol()) { if (!tripleString && !escaped && stream.match('"') ) {end = true; break;} if (tripleString && stream.match('"""')) {end = true; break;} next = stream.next(); if(!escaped && next == "$" && stream.match('{')) stream.skipTo("}"); escaped = !escaped && next == "\\" && !tripleString; } if (end || !tripleString) state.tokenize = null; return "string"; } } def("text/x-kotlin", { name: "clike", keywords: words( /*keywords*/ "package as typealias class interface this super val " + "var fun for is in This throw return " + "break continue object if else while do try when !in !is as? " + /*soft keywords*/ "file import where by get set abstract enum open inner override private public internal " + "protected catch finally out final vararg reified dynamic companion constructor init " + "sealed field property receiver param sparam lateinit data inline noinline tailrec " + "external annotation crossinline const operator infix" ), types: words( /* package java.lang */ "Boolean Byte Character CharSequence Class ClassLoader Cloneable Comparable " + "Compiler Double Exception Float Integer Long Math Number Object Package Pair Process " + "Runtime Runnable SecurityManager Short StackTraceElement StrictMath String " + "StringBuffer System Thread ThreadGroup ThreadLocal Throwable Triple Void" ), intendSwitch: false, indentStatements: false, multiLineStrings: true, blockKeywords: words("catch class do else finally for if where try while enum"), defKeywords: words("class val var object package interface fun"), atoms: words("true false null this"), hooks: { '"': function(stream, state) { state.tokenize = tokenKotlinString(stream.match('""')); return state.tokenize(stream, state); } }, modeProps: {closeBrackets: {triples: '"'}} }); def(["x-shader/x-vertex", "x-shader/x-fragment"], { name: "clike", keywords: words("sampler1D sampler2D sampler3D samplerCube " + "sampler1DShadow sampler2DShadow " + "const attribute uniform varying " + "break continue discard return " + "for while do if else struct " + "in out inout"), types: words("float int bool void " + "vec2 vec3 vec4 ivec2 ivec3 ivec4 bvec2 bvec3 bvec4 " + "mat2 mat3 mat4"), blockKeywords: words("for while do if else struct"), builtin: words("radians degrees sin cos tan asin acos atan " + "pow exp log exp2 sqrt inversesqrt " + "abs sign floor ceil fract mod min max clamp mix step smoothstep " + "length distance dot cross normalize ftransform faceforward " + "reflect refract matrixCompMult " + "lessThan lessThanEqual greaterThan greaterThanEqual " + "equal notEqual any all not " + "texture1D texture1DProj texture1DLod texture1DProjLod " + "texture2D texture2DProj texture2DLod texture2DProjLod " + "texture3D texture3DProj texture3DLod texture3DProjLod " + "textureCube textureCubeLod " + "shadow1D shadow2D shadow1DProj shadow2DProj " + "shadow1DLod shadow2DLod shadow1DProjLod shadow2DProjLod " + "dFdx dFdy fwidth " + "noise1 noise2 noise3 noise4"), atoms: words("true false " + "gl_FragColor gl_SecondaryColor gl_Normal gl_Vertex " + "gl_MultiTexCoord0 gl_MultiTexCoord1 gl_MultiTexCoord2 gl_MultiTexCoord3 " + "gl_MultiTexCoord4 gl_MultiTexCoord5 gl_MultiTexCoord6 gl_MultiTexCoord7 " + "gl_FogCoord gl_PointCoord " + "gl_Position gl_PointSize gl_ClipVertex " + "gl_FrontColor gl_BackColor gl_FrontSecondaryColor gl_BackSecondaryColor " + "gl_TexCoord gl_FogFragCoord " + "gl_FragCoord gl_FrontFacing " + "gl_FragData gl_FragDepth " + "gl_ModelViewMatrix gl_ProjectionMatrix gl_ModelViewProjectionMatrix " + "gl_TextureMatrix gl_NormalMatrix gl_ModelViewMatrixInverse " + "gl_ProjectionMatrixInverse gl_ModelViewProjectionMatrixInverse " + "gl_TexureMatrixTranspose gl_ModelViewMatrixInverseTranspose " + "gl_ProjectionMatrixInverseTranspose " + "gl_ModelViewProjectionMatrixInverseTranspose " + "gl_TextureMatrixInverseTranspose " + "gl_NormalScale gl_DepthRange gl_ClipPlane " + "gl_Point gl_FrontMaterial gl_BackMaterial gl_LightSource gl_LightModel " + "gl_FrontLightModelProduct gl_BackLightModelProduct " + "gl_TextureColor gl_EyePlaneS gl_EyePlaneT gl_EyePlaneR gl_EyePlaneQ " + "gl_FogParameters " + "gl_MaxLights gl_MaxClipPlanes gl_MaxTextureUnits gl_MaxTextureCoords " + "gl_MaxVertexAttribs gl_MaxVertexUniformComponents gl_MaxVaryingFloats " + "gl_MaxVertexTextureImageUnits gl_MaxTextureImageUnits " + "gl_MaxFragmentUniformComponents gl_MaxCombineTextureImageUnits " + "gl_MaxDrawBuffers"), indentSwitch: false, hooks: {"#": cppHook}, modeProps: {fold: ["brace", "include"]} }); def("text/x-nesc", { name: "clike", keywords: words(cKeywords + "as atomic async call command component components configuration event generic " + "implementation includes interface module new norace nx_struct nx_union post provides " + "signal task uses abstract extends"), types: words(cTypes), blockKeywords: words("case do else for if switch while struct"), atoms: words("null true false"), hooks: {"#": cppHook}, modeProps: {fold: ["brace", "include"]} }); def("text/x-objectivec", { name: "clike", keywords: words(cKeywords + "inline restrict _Bool _Complex _Imaginary BOOL Class bycopy byref id IMP in " + "inout nil oneway out Protocol SEL self super atomic nonatomic retain copy readwrite readonly"), types: words(cTypes), atoms: words("YES NO NULL NILL ON OFF true false"), hooks: { "@": function(stream) { stream.eatWhile(/[\w\$]/); return "keyword"; }, "#": cppHook, indent: function(_state, ctx, textAfter) { if (ctx.type == "statement" && /^@\w/.test(textAfter)) return ctx.indented } }, modeProps: {fold: "brace"} }); def("text/x-squirrel", { name: "clike", keywords: words("base break clone continue const default delete enum extends function in class" + " foreach local resume return this throw typeof yield constructor instanceof static"), types: words(cTypes), blockKeywords: words("case catch class else for foreach if switch try while"), defKeywords: words("function local class"), typeFirstDefinitions: true, atoms: words("true false null"), hooks: {"#": cppHook}, modeProps: {fold: ["brace", "include"]} }); // Ceylon Strings need to deal with interpolation var stringTokenizer = null; function tokenCeylonString(type) { return function(stream, state) { var escaped = false, next, end = false; while (!stream.eol()) { if (!escaped && stream.match('"') && (type == "single" || stream.match('""'))) { end = true; break; } if (!escaped && stream.match('``')) { stringTokenizer = tokenCeylonString(type); end = true; break; } next = stream.next(); escaped = type == "single" && !escaped && next == "\\"; } if (end) state.tokenize = null; return "string"; } } def("text/x-ceylon", { name: "clike", keywords: words("abstracts alias assembly assert assign break case catch class continue dynamic else" + " exists extends finally for function given if import in interface is let module new" + " nonempty object of out outer package return satisfies super switch then this throw" + " try value void while"), types: function(word) { // In Ceylon all identifiers that start with an uppercase are types var first = word.charAt(0); return (first === first.toUpperCase() && first !== first.toLowerCase()); }, blockKeywords: words("case catch class dynamic else finally for function if interface module new object switch try while"), defKeywords: words("class dynamic function interface module object package value"), builtin: words("abstract actual aliased annotation by default deprecated doc final formal late license" + " native optional sealed see serializable shared suppressWarnings tagged throws variable"), isPunctuationChar: /[\[\]{}\(\),;\:\.`]/, isOperatorChar: /[+\-*&%=<>!?|^~:\/]/, numberStart: /[\d#$]/, number: /^(?:#[\da-fA-F_]+|\$[01_]+|[\d_]+[kMGTPmunpf]?|[\d_]+\.[\d_]+(?:[eE][-+]?\d+|[kMGTPmunpf]|)|)/i, multiLineStrings: true, typeFirstDefinitions: true, atoms: words("true false null larger smaller equal empty finished"), indentSwitch: false, styleDefs: false, hooks: { "@": function(stream) { stream.eatWhile(/[\w\$_]/); return "meta"; }, '"': function(stream, state) { state.tokenize = tokenCeylonString(stream.match('""') ? "triple" : "single"); return state.tokenize(stream, state); }, '`': function(stream, state) { if (!stringTokenizer || !stream.match('`')) return false; state.tokenize = stringTokenizer; stringTokenizer = null; return state.tokenize(stream, state); }, "'": function(stream) { stream.eatWhile(/[\w\$_\xa1-\uffff]/); return "atom"; }, token: function(_stream, state, style) { if ((style == "variable" || style == "variable-3") && state.prevToken == ".") { return "variable-2"; } } }, modeProps: { fold: ["brace", "import"], closeBrackets: {triples: '"'} } }); }); PK!¸G=÷fofoJfile-manager-advanced/application/library/codemirror/mode/clike/scala.htmlnu„[µü¤ CodeMirror: Scala mode

    Scala mode

    PK!2dê��Gfile-manager-advanced/application/library/codemirror/mode/clike/test.jsnu„[µü¤// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function() { var mode = CodeMirror.getMode({indentUnit: 2}, "text/x-c"); function MT(name) { test.mode(name, mode, Array.prototype.slice.call(arguments, 1)); } MT("indent", "[variable-3 void] [def foo]([variable-3 void*] [variable a], [variable-3 int] [variable b]) {", " [variable-3 int] [variable c] [operator =] [variable b] [operator +]", " [number 1];", " [keyword return] [operator *][variable a];", "}"); MT("indent_switch", "[keyword switch] ([variable x]) {", " [keyword case] [number 10]:", " [keyword return] [number 20];", " [keyword default]:", " [variable printf]([string \"foo %c\"], [variable x]);", "}"); MT("def", "[variable-3 void] [def foo]() {}", "[keyword struct] [def bar]{}", "[variable-3 int] [variable-3 *][def baz]() {}"); MT("def_new_line", "::[variable std]::[variable SomeTerribleType][operator <][variable T][operator >]", "[def SomeLongMethodNameThatDoesntFitIntoOneLine]([keyword const] [variable MyType][operator &] [variable param]) {}") MT("double_block", "[keyword for] (;;)", " [keyword for] (;;)", " [variable x][operator ++];", "[keyword return];"); MT("preprocessor", "[meta #define FOO 3]", "[variable-3 int] [variable foo];", "[meta #define BAR\\]", "[meta 4]", "[variable-3 unsigned] [variable-3 int] [variable bar] [operator =] [number 8];", "[meta #include ][comment // comment]") var mode_cpp = CodeMirror.getMode({indentUnit: 2}, "text/x-c++src"); function MTCPP(name) { test.mode(name, mode_cpp, Array.prototype.slice.call(arguments, 1)); } MTCPP("cpp14_literal", "[number 10'000];", "[number 0b10'000];", "[number 0x10'000];", "[string '100000'];"); })(); PK!W²ñ™ÖÖPfile-manager-advanced/application/library/codemirror/mode/htmlmixed/htmlmixed.jsnu„[µü¤// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror"), require("../xml/xml"), require("../javascript/javascript"), require("../css/css")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror", "../xml/xml", "../javascript/javascript", "../css/css"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; var defaultTags = { script: [ ["lang", /(javascript|babel)/i, "javascript"], ["type", /^(?:text|application)\/(?:x-)?(?:java|ecma)script$|^$/i, "javascript"], ["type", /./, "text/plain"], [null, null, "javascript"] ], style: [ ["lang", /^css$/i, "css"], ["type", /^(text\/)?(x-)?(stylesheet|css)$/i, "css"], ["type", /./, "text/plain"], [null, null, "css"] ] }; function maybeBackup(stream, pat, style) { var cur = stream.current(), close = cur.search(pat); if (close > -1) { stream.backUp(cur.length - close); } else if (cur.match(/<\/?$/)) { stream.backUp(cur.length); if (!stream.match(pat, false)) stream.match(cur); } return style; } var attrRegexpCache = {}; function getAttrRegexp(attr) { var regexp = attrRegexpCache[attr]; if (regexp) return regexp; return attrRegexpCache[attr] = new RegExp("\\s+" + attr + "\\s*=\\s*('|\")?([^'\"]+)('|\")?\\s*"); } function getAttrValue(text, attr) { var match = text.match(getAttrRegexp(attr)) return match ? /^\s*(.*?)\s*$/.exec(match[2])[1] : "" } function getTagRegexp(tagName, anchored) { return new RegExp((anchored ? "^" : "") + "<\/\s*" + tagName + "\s*>", "i"); } function addTags(from, to) { for (var tag in from) { var dest = to[tag] || (to[tag] = []); var source = from[tag]; for (var i = source.length - 1; i >= 0; i--) dest.unshift(source[i]) } } function findMatchingMode(tagInfo, tagText) { for (var i = 0; i < tagInfo.length; i++) { var spec = tagInfo[i]; if (!spec[0] || spec[1].test(getAttrValue(tagText, spec[0]))) return spec[2]; } } CodeMirror.defineMode("htmlmixed", function (config, parserConfig) { var htmlMode = CodeMirror.getMode(config, { name: "xml", htmlMode: true, multilineTagIndentFactor: parserConfig.multilineTagIndentFactor, multilineTagIndentPastTag: parserConfig.multilineTagIndentPastTag }); var tags = {}; var configTags = parserConfig && parserConfig.tags, configScript = parserConfig && parserConfig.scriptTypes; addTags(defaultTags, tags); if (configTags) addTags(configTags, tags); if (configScript) for (var i = configScript.length - 1; i >= 0; i--) tags.script.unshift(["type", configScript[i].matches, configScript[i].mode]) function html(stream, state) { var style = htmlMode.token(stream, state.htmlState), tag = /\btag\b/.test(style), tagName if (tag && !/[<>\s\/]/.test(stream.current()) && (tagName = state.htmlState.tagName && state.htmlState.tagName.toLowerCase()) && tags.hasOwnProperty(tagName)) { state.inTag = tagName + " " } else if (state.inTag && tag && />$/.test(stream.current())) { var inTag = /^([\S]+) (.*)/.exec(state.inTag) state.inTag = null var modeSpec = stream.current() == ">" && findMatchingMode(tags[inTag[1]], inTag[2]) var mode = CodeMirror.getMode(config, modeSpec) var endTagA = getTagRegexp(inTag[1], true), endTag = getTagRegexp(inTag[1], false); state.token = function (stream, state) { if (stream.match(endTagA, false)) { state.token = html; state.localState = state.localMode = null; return null; } return maybeBackup(stream, endTag, state.localMode.token(stream, state.localState)); }; state.localMode = mode; state.localState = CodeMirror.startState(mode, htmlMode.indent(state.htmlState, "")); } else if (state.inTag) { state.inTag += stream.current() if (stream.eol()) state.inTag += " " } return style; }; return { startState: function () { var state = CodeMirror.startState(htmlMode); return {token: html, inTag: null, localMode: null, localState: null, htmlState: state}; }, copyState: function (state) { var local; if (state.localState) { local = CodeMirror.copyState(state.localMode, state.localState); } return {token: state.token, inTag: state.inTag, localMode: state.localMode, localState: local, htmlState: CodeMirror.copyState(htmlMode, state.htmlState)}; }, token: function (stream, state) { return state.token(stream, state); }, indent: function (state, textAfter) { if (!state.localMode || /^\s*<\//.test(textAfter)) return htmlMode.indent(state.htmlState, textAfter); else if (state.localMode.indent) return state.localMode.indent(state.localState, textAfter); else return CodeMirror.Pass; }, innerMode: function (state) { return {state: state.localState || state.htmlState, mode: state.localMode || htmlMode}; } }; }, "xml", "javascript", "css"); CodeMirror.defineMIME("text/html", "htmlmixed"); }); PK!!/gú ú Nfile-manager-advanced/application/library/codemirror/mode/htmlmixed/index.htmlnu„[µü¤ CodeMirror: HTML mixed mode

    HTML mixed mode

    The HTML mixed mode depends on the XML, JavaScript, and CSS modes.

    It takes an optional mode configuration option, scriptTypes, which can be used to add custom behavior for specific <script type="..."> tags. If given, it should hold an array of {matches, mode} objects, where matches is a string or regexp that matches the script type, and mode is either null, for script types that should stay in HTML mode, or a mode spec corresponding to the mode that should be used for the script.

    MIME types defined: text/html (redefined, only takes effect if you load this parser after the XML parser).

    PK!r#*BMMMfile-manager-advanced/application/library/codemirror/mode/ntriples/index.htmlnu„[µü¤ CodeMirror: NTriples mode

    NTriples mode

    MIME types defined: text/n-triples.

    PK!¦¯•óóNfile-manager-advanced/application/library/codemirror/mode/ntriples/ntriples.jsnu„[µü¤// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE /********************************************************** * This script provides syntax highlighting support for * the Ntriples format. * Ntriples format specification: * http://www.w3.org/TR/rdf-testcases/#ntriples ***********************************************************/ /* The following expression defines the defined ASF grammar transitions. pre_subject -> { ( writing_subject_uri | writing_bnode_uri ) -> pre_predicate -> writing_predicate_uri -> pre_object -> writing_object_uri | writing_object_bnode | ( writing_object_literal -> writing_literal_lang | writing_literal_type ) -> post_object -> BEGIN } otherwise { -> ERROR } */ (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMode("ntriples", function() { var Location = { PRE_SUBJECT : 0, WRITING_SUB_URI : 1, WRITING_BNODE_URI : 2, PRE_PRED : 3, WRITING_PRED_URI : 4, PRE_OBJ : 5, WRITING_OBJ_URI : 6, WRITING_OBJ_BNODE : 7, WRITING_OBJ_LITERAL : 8, WRITING_LIT_LANG : 9, WRITING_LIT_TYPE : 10, POST_OBJ : 11, ERROR : 12 }; function transitState(currState, c) { var currLocation = currState.location; var ret; // Opening. if (currLocation == Location.PRE_SUBJECT && c == '<') ret = Location.WRITING_SUB_URI; else if(currLocation == Location.PRE_SUBJECT && c == '_') ret = Location.WRITING_BNODE_URI; else if(currLocation == Location.PRE_PRED && c == '<') ret = Location.WRITING_PRED_URI; else if(currLocation == Location.PRE_OBJ && c == '<') ret = Location.WRITING_OBJ_URI; else if(currLocation == Location.PRE_OBJ && c == '_') ret = Location.WRITING_OBJ_BNODE; else if(currLocation == Location.PRE_OBJ && c == '"') ret = Location.WRITING_OBJ_LITERAL; // Closing. else if(currLocation == Location.WRITING_SUB_URI && c == '>') ret = Location.PRE_PRED; else if(currLocation == Location.WRITING_BNODE_URI && c == ' ') ret = Location.PRE_PRED; else if(currLocation == Location.WRITING_PRED_URI && c == '>') ret = Location.PRE_OBJ; else if(currLocation == Location.WRITING_OBJ_URI && c == '>') ret = Location.POST_OBJ; else if(currLocation == Location.WRITING_OBJ_BNODE && c == ' ') ret = Location.POST_OBJ; else if(currLocation == Location.WRITING_OBJ_LITERAL && c == '"') ret = Location.POST_OBJ; else if(currLocation == Location.WRITING_LIT_LANG && c == ' ') ret = Location.POST_OBJ; else if(currLocation == Location.WRITING_LIT_TYPE && c == '>') ret = Location.POST_OBJ; // Closing typed and language literal. else if(currLocation == Location.WRITING_OBJ_LITERAL && c == '@') ret = Location.WRITING_LIT_LANG; else if(currLocation == Location.WRITING_OBJ_LITERAL && c == '^') ret = Location.WRITING_LIT_TYPE; // Spaces. else if( c == ' ' && ( currLocation == Location.PRE_SUBJECT || currLocation == Location.PRE_PRED || currLocation == Location.PRE_OBJ || currLocation == Location.POST_OBJ ) ) ret = currLocation; // Reset. else if(currLocation == Location.POST_OBJ && c == '.') ret = Location.PRE_SUBJECT; // Error else ret = Location.ERROR; currState.location=ret; } return { startState: function() { return { location : Location.PRE_SUBJECT, uris : [], anchors : [], bnodes : [], langs : [], types : [] }; }, token: function(stream, state) { var ch = stream.next(); if(ch == '<') { transitState(state, ch); var parsedURI = ''; stream.eatWhile( function(c) { if( c != '#' && c != '>' ) { parsedURI += c; return true; } return false;} ); state.uris.push(parsedURI); if( stream.match('#', false) ) return 'variable'; stream.next(); transitState(state, '>'); return 'variable'; } if(ch == '#') { var parsedAnchor = ''; stream.eatWhile(function(c) { if(c != '>' && c != ' ') { parsedAnchor+= c; return true; } return false;}); state.anchors.push(parsedAnchor); return 'variable-2'; } if(ch == '>') { transitState(state, '>'); return 'variable'; } if(ch == '_') { transitState(state, ch); var parsedBNode = ''; stream.eatWhile(function(c) { if( c != ' ' ) { parsedBNode += c; return true; } return false;}); state.bnodes.push(parsedBNode); stream.next(); transitState(state, ' '); return 'builtin'; } if(ch == '"') { transitState(state, ch); stream.eatWhile( function(c) { return c != '"'; } ); stream.next(); if( stream.peek() != '@' && stream.peek() != '^' ) { transitState(state, '"'); } return 'string'; } if( ch == '@' ) { transitState(state, '@'); var parsedLang = ''; stream.eatWhile(function(c) { if( c != ' ' ) { parsedLang += c; return true; } return false;}); state.langs.push(parsedLang); stream.next(); transitState(state, ' '); return 'string-2'; } if( ch == '^' ) { stream.next(); transitState(state, '^'); var parsedType = ''; stream.eatWhile(function(c) { if( c != '>' ) { parsedType += c; return true; } return false;} ); state.types.push(parsedType); stream.next(); transitState(state, '>'); return 'variable'; } if( ch == ' ' ) { transitState(state, ch); } if( ch == '.' ) { transitState(state, ch); } } }; }); CodeMirror.defineMIME("text/n-triples", "ntriples"); }); PK!̃òqh h Ifile-manager-advanced/application/library/codemirror/mode/slim/index.htmlnu„[µü¤ CodeMirror: SLIM mode

    SLIM mode

    MIME types defined: application/x-slim.

    Parsing/Highlighting Tests: normal, verbose.

    PK!ü <: : Ffile-manager-advanced/application/library/codemirror/mode/slim/test.jsnu„[µü¤// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE // Slim Highlighting for CodeMirror copyright (c) HicknHack Software Gmbh (function() { var mode = CodeMirror.getMode({tabSize: 4, indentUnit: 2}, "slim"); function MT(name) { test.mode(name, mode, Array.prototype.slice.call(arguments, 1)); } // Requires at least one media query MT("elementName", "[tag h1] Hey There"); MT("oneElementPerLine", "[tag h1] Hey There .h2"); MT("idShortcut", "[attribute&def #test] Hey There"); MT("tagWithIdShortcuts", "[tag h1][attribute&def #test] Hey There"); MT("classShortcut", "[attribute&qualifier .hello] Hey There"); MT("tagWithIdAndClassShortcuts", "[tag h1][attribute&def #test][attribute&qualifier .hello] Hey There"); MT("docType", "[keyword doctype] xml"); MT("comment", "[comment / Hello WORLD]"); MT("notComment", "[tag h1] This is not a / comment "); MT("attributes", "[tag a]([attribute title]=[string \"test\"]) [attribute href]=[string \"link\"]}"); MT("multiLineAttributes", "[tag a]([attribute title]=[string \"test\"]", " ) [attribute href]=[string \"link\"]}"); MT("htmlCode", "[tag&bracket <][tag h1][tag&bracket >]Title[tag&bracket ]"); MT("rubyBlock", "[operator&special =][variable-2 @item]"); MT("selectorRubyBlock", "[tag a][attribute&qualifier .test][operator&special =] [variable-2 @item]"); MT("nestedRubyBlock", "[tag a]", " [operator&special =][variable puts] [string \"test\"]"); MT("multilinePlaintext", "[tag p]", " | Hello,", " World"); MT("multilineRuby", "[tag p]", " [comment /# this is a comment]", " [comment and this is a comment too]", " | Date/Time", " [operator&special -] [variable now] [operator =] [tag DateTime][operator .][property now]", " [tag strong][operator&special =] [variable now]", " [operator&special -] [keyword if] [variable now] [operator >] [tag DateTime][operator .][property parse]([string \"December 31, 2006\"])", " [operator&special =][string \"Happy\"]", " [operator&special =][string \"Belated\"]", " [operator&special =][string \"Birthday\"]"); MT("multilineComment", "[comment /]", " [comment Multiline]", " [comment Comment]"); MT("hamlAfterRubyTag", "[attribute&qualifier .block]", " [tag strong][operator&special =] [variable now]", " [attribute&qualifier .test]", " [operator&special =][variable now]", " [attribute&qualifier .right]"); MT("stretchedRuby", "[operator&special =] [variable puts] [string \"Hello\"],", " [string \"World\"]"); MT("interpolationInHashAttribute", "[tag div]{[attribute id] = [string \"]#{[variable test]}[string _]#{[variable ting]}[string \"]} test"); MT("interpolationInHTMLAttribute", "[tag div]([attribute title]=[string \"]#{[variable test]}[string _]#{[variable ting]()}[string \"]) Test"); })(); PK!›�IßjFjFFfile-manager-advanced/application/library/codemirror/mode/slim/slim.jsnu„[µü¤// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE // Slim Highlighting for CodeMirror copyright (c) HicknHack Software Gmbh (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror"), require("../htmlmixed/htmlmixed"), require("../ruby/ruby")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror", "../htmlmixed/htmlmixed", "../ruby/ruby"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMode("slim", function(config) { var htmlMode = CodeMirror.getMode(config, {name: "htmlmixed"}); var rubyMode = CodeMirror.getMode(config, "ruby"); var modes = { html: htmlMode, ruby: rubyMode }; var embedded = { ruby: "ruby", javascript: "javascript", css: "text/css", sass: "text/x-sass", scss: "text/x-scss", less: "text/x-less", styl: "text/x-styl", // no highlighting so far coffee: "coffeescript", asciidoc: "text/x-asciidoc", markdown: "text/x-markdown", textile: "text/x-textile", // no highlighting so far creole: "text/x-creole", // no highlighting so far wiki: "text/x-wiki", // no highlighting so far mediawiki: "text/x-mediawiki", // no highlighting so far rdoc: "text/x-rdoc", // no highlighting so far builder: "text/x-builder", // no highlighting so far nokogiri: "text/x-nokogiri", // no highlighting so far erb: "application/x-erb" }; var embeddedRegexp = function(map){ var arr = []; for(var key in map) arr.push(key); return new RegExp("^("+arr.join('|')+"):"); }(embedded); var styleMap = { "commentLine": "comment", "slimSwitch": "operator special", "slimTag": "tag", "slimId": "attribute def", "slimClass": "attribute qualifier", "slimAttribute": "attribute", "slimSubmode": "keyword special", "closeAttributeTag": null, "slimDoctype": null, "lineContinuation": null }; var closing = { "{": "}", "[": "]", "(": ")" }; var nameStartChar = "_a-zA-Z\xC0-\xD6\xD8-\xF6\xF8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD"; var nameChar = nameStartChar + "\\-0-9\xB7\u0300-\u036F\u203F-\u2040"; var nameRegexp = new RegExp("^[:"+nameStartChar+"](?::["+nameChar+"]|["+nameChar+"]*)"); var attributeNameRegexp = new RegExp("^[:"+nameStartChar+"][:\\."+nameChar+"]*(?=\\s*=)"); var wrappedAttributeNameRegexp = new RegExp("^[:"+nameStartChar+"][:\\."+nameChar+"]*"); var classNameRegexp = /^\.-?[_a-zA-Z]+[\w\-]*/; var classIdRegexp = /^#[_a-zA-Z]+[\w\-]*/; function backup(pos, tokenize, style) { var restore = function(stream, state) { state.tokenize = tokenize; if (stream.pos < pos) { stream.pos = pos; return style; } return state.tokenize(stream, state); }; return function(stream, state) { state.tokenize = restore; return tokenize(stream, state); }; } function maybeBackup(stream, state, pat, offset, style) { var cur = stream.current(); var idx = cur.search(pat); if (idx > -1) { state.tokenize = backup(stream.pos, state.tokenize, style); stream.backUp(cur.length - idx - offset); } return style; } function continueLine(state, column) { state.stack = { parent: state.stack, style: "continuation", indented: column, tokenize: state.line }; state.line = state.tokenize; } function finishContinue(state) { if (state.line == state.tokenize) { state.line = state.stack.tokenize; state.stack = state.stack.parent; } } function lineContinuable(column, tokenize) { return function(stream, state) { finishContinue(state); if (stream.match(/^\\$/)) { continueLine(state, column); return "lineContinuation"; } var style = tokenize(stream, state); if (stream.eol() && stream.current().match(/(?:^|[^\\])(?:\\\\)*\\$/)) { stream.backUp(1); } return style; }; } function commaContinuable(column, tokenize) { return function(stream, state) { finishContinue(state); var style = tokenize(stream, state); if (stream.eol() && stream.current().match(/,$/)) { continueLine(state, column); } return style; }; } function rubyInQuote(endQuote, tokenize) { // TODO: add multi line support return function(stream, state) { var ch = stream.peek(); if (ch == endQuote && state.rubyState.tokenize.length == 1) { // step out of ruby context as it seems to complete processing all the braces stream.next(); state.tokenize = tokenize; return "closeAttributeTag"; } else { return ruby(stream, state); } }; } function startRubySplat(tokenize) { var rubyState; var runSplat = function(stream, state) { if (state.rubyState.tokenize.length == 1 && !state.rubyState.context.prev) { stream.backUp(1); if (stream.eatSpace()) { state.rubyState = rubyState; state.tokenize = tokenize; return tokenize(stream, state); } stream.next(); } return ruby(stream, state); }; return function(stream, state) { rubyState = state.rubyState; state.rubyState = CodeMirror.startState(rubyMode); state.tokenize = runSplat; return ruby(stream, state); }; } function ruby(stream, state) { return rubyMode.token(stream, state.rubyState); } function htmlLine(stream, state) { if (stream.match(/^\\$/)) { return "lineContinuation"; } return html(stream, state); } function html(stream, state) { if (stream.match(/^#\{/)) { state.tokenize = rubyInQuote("}", state.tokenize); return null; } return maybeBackup(stream, state, /[^\\]#\{/, 1, htmlMode.token(stream, state.htmlState)); } function startHtmlLine(lastTokenize) { return function(stream, state) { var style = htmlLine(stream, state); if (stream.eol()) state.tokenize = lastTokenize; return style; }; } function startHtmlMode(stream, state, offset) { state.stack = { parent: state.stack, style: "html", indented: stream.column() + offset, // pipe + space tokenize: state.line }; state.line = state.tokenize = html; return null; } function comment(stream, state) { stream.skipToEnd(); return state.stack.style; } function commentMode(stream, state) { state.stack = { parent: state.stack, style: "comment", indented: state.indented + 1, tokenize: state.line }; state.line = comment; return comment(stream, state); } function attributeWrapper(stream, state) { if (stream.eat(state.stack.endQuote)) { state.line = state.stack.line; state.tokenize = state.stack.tokenize; state.stack = state.stack.parent; return null; } if (stream.match(wrappedAttributeNameRegexp)) { state.tokenize = attributeWrapperAssign; return "slimAttribute"; } stream.next(); return null; } function attributeWrapperAssign(stream, state) { if (stream.match(/^==?/)) { state.tokenize = attributeWrapperValue; return null; } return attributeWrapper(stream, state); } function attributeWrapperValue(stream, state) { var ch = stream.peek(); if (ch == '"' || ch == "\'") { state.tokenize = readQuoted(ch, "string", true, false, attributeWrapper); stream.next(); return state.tokenize(stream, state); } if (ch == '[') { return startRubySplat(attributeWrapper)(stream, state); } if (stream.match(/^(true|false|nil)\b/)) { state.tokenize = attributeWrapper; return "keyword"; } return startRubySplat(attributeWrapper)(stream, state); } function startAttributeWrapperMode(state, endQuote, tokenize) { state.stack = { parent: state.stack, style: "wrapper", indented: state.indented + 1, tokenize: tokenize, line: state.line, endQuote: endQuote }; state.line = state.tokenize = attributeWrapper; return null; } function sub(stream, state) { if (stream.match(/^#\{/)) { state.tokenize = rubyInQuote("}", state.tokenize); return null; } var subStream = new CodeMirror.StringStream(stream.string.slice(state.stack.indented), stream.tabSize); subStream.pos = stream.pos - state.stack.indented; subStream.start = stream.start - state.stack.indented; subStream.lastColumnPos = stream.lastColumnPos - state.stack.indented; subStream.lastColumnValue = stream.lastColumnValue - state.stack.indented; var style = state.subMode.token(subStream, state.subState); stream.pos = subStream.pos + state.stack.indented; return style; } function firstSub(stream, state) { state.stack.indented = stream.column(); state.line = state.tokenize = sub; return state.tokenize(stream, state); } function createMode(mode) { var query = embedded[mode]; var spec = CodeMirror.mimeModes[query]; if (spec) { return CodeMirror.getMode(config, spec); } var factory = CodeMirror.modes[query]; if (factory) { return factory(config, {name: query}); } return CodeMirror.getMode(config, "null"); } function getMode(mode) { if (!modes.hasOwnProperty(mode)) { return modes[mode] = createMode(mode); } return modes[mode]; } function startSubMode(mode, state) { var subMode = getMode(mode); var subState = CodeMirror.startState(subMode); state.subMode = subMode; state.subState = subState; state.stack = { parent: state.stack, style: "sub", indented: state.indented + 1, tokenize: state.line }; state.line = state.tokenize = firstSub; return "slimSubmode"; } function doctypeLine(stream, _state) { stream.skipToEnd(); return "slimDoctype"; } function startLine(stream, state) { var ch = stream.peek(); if (ch == '<') { return (state.tokenize = startHtmlLine(state.tokenize))(stream, state); } if (stream.match(/^[|']/)) { return startHtmlMode(stream, state, 1); } if (stream.match(/^\/(!|\[\w+])?/)) { return commentMode(stream, state); } if (stream.match(/^(-|==?[<>]?)/)) { state.tokenize = lineContinuable(stream.column(), commaContinuable(stream.column(), ruby)); return "slimSwitch"; } if (stream.match(/^doctype\b/)) { state.tokenize = doctypeLine; return "keyword"; } var m = stream.match(embeddedRegexp); if (m) { return startSubMode(m[1], state); } return slimTag(stream, state); } function slim(stream, state) { if (state.startOfLine) { return startLine(stream, state); } return slimTag(stream, state); } function slimTag(stream, state) { if (stream.eat('*')) { state.tokenize = startRubySplat(slimTagExtras); return null; } if (stream.match(nameRegexp)) { state.tokenize = slimTagExtras; return "slimTag"; } return slimClass(stream, state); } function slimTagExtras(stream, state) { if (stream.match(/^(<>?|> state.indented && state.last != "slimSubmode") { state.line = state.tokenize = state.stack.tokenize; state.stack = state.stack.parent; state.subMode = null; state.subState = null; } } if (stream.eatSpace()) return null; var style = state.tokenize(stream, state); state.startOfLine = false; if (style) state.last = style; return styleMap.hasOwnProperty(style) ? styleMap[style] : style; }, blankLine: function(state) { if (state.subMode && state.subMode.blankLine) { return state.subMode.blankLine(state.subState); } }, innerMode: function(state) { if (state.subMode) return {state: state.subState, mode: state.subMode}; return {state: state, mode: mode}; } //indent: function(state) { // return state.indented; //} }; return mode; }, "htmlmixed", "ruby"); CodeMirror.defineMIME("text/x-slim", "slim"); CodeMirror.defineMIME("application/x-slim", "slim"); }); PK!y·ÌæUUIfile-manager-advanced/application/library/codemirror/mode/solr/index.htmlnu„[µü¤ CodeMirror: Solr mode

    Solr mode

    MIME types defined: text/x-solr.

    PK!KÌ5�v v Ffile-manager-advanced/application/library/codemirror/mode/solr/solr.jsnu„[µü¤// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMode("solr", function() { "use strict"; var isStringChar = /[^\s\|\!\+\-\*\?\~\^\&\:\(\)\[\]\{\}\^\"\\]/; var isOperatorChar = /[\|\!\+\-\*\?\~\^\&]/; var isOperatorString = /^(OR|AND|NOT|TO)$/i; function isNumber(word) { return parseFloat(word, 10).toString() === word; } function tokenString(quote) { return function(stream, state) { var escaped = false, next; while ((next = stream.next()) != null) { if (next == quote && !escaped) break; escaped = !escaped && next == "\\"; } if (!escaped) state.tokenize = tokenBase; return "string"; }; } function tokenOperator(operator) { return function(stream, state) { var style = "operator"; if (operator == "+") style += " positive"; else if (operator == "-") style += " negative"; else if (operator == "|") stream.eat(/\|/); else if (operator == "&") stream.eat(/\&/); else if (operator == "^") style += " boost"; state.tokenize = tokenBase; return style; }; } function tokenWord(ch) { return function(stream, state) { var word = ch; while ((ch = stream.peek()) && ch.match(isStringChar) != null) { word += stream.next(); } state.tokenize = tokenBase; if (isOperatorString.test(word)) return "operator"; else if (isNumber(word)) return "number"; else if (stream.peek() == ":") return "field"; else return "string"; }; } function tokenBase(stream, state) { var ch = stream.next(); if (ch == '"') state.tokenize = tokenString(ch); else if (isOperatorChar.test(ch)) state.tokenize = tokenOperator(ch); else if (isStringChar.test(ch)) state.tokenize = tokenWord(ch); return (state.tokenize != tokenBase) ? state.tokenize(stream, state) : null; } return { startState: function() { return { tokenize: tokenBase }; }, token: function(stream, state) { if (stream.eatSpace()) return null; return state.tokenize(stream, state); } }; }); CodeMirror.defineMIME("text/x-solr", "solr"); }); PK!õüî!î!Lfile-manager-advanced/application/library/codemirror/mode/fortran/fortran.jsnu„[µü¤// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMode("fortran", function() { function words(array) { var keys = {}; for (var i = 0; i < array.length; ++i) { keys[array[i]] = true; } return keys; } var keywords = words([ "abstract", "accept", "allocatable", "allocate", "array", "assign", "asynchronous", "backspace", "bind", "block", "byte", "call", "case", "class", "close", "common", "contains", "continue", "cycle", "data", "deallocate", "decode", "deferred", "dimension", "do", "elemental", "else", "encode", "end", "endif", "entry", "enumerator", "equivalence", "exit", "external", "extrinsic", "final", "forall", "format", "function", "generic", "go", "goto", "if", "implicit", "import", "include", "inquire", "intent", "interface", "intrinsic", "module", "namelist", "non_intrinsic", "non_overridable", "none", "nopass", "nullify", "open", "optional", "options", "parameter", "pass", "pause", "pointer", "print", "private", "program", "protected", "public", "pure", "read", "recursive", "result", "return", "rewind", "save", "select", "sequence", "stop", "subroutine", "target", "then", "to", "type", "use", "value", "volatile", "where", "while", "write"]); var builtins = words(["abort", "abs", "access", "achar", "acos", "adjustl", "adjustr", "aimag", "aint", "alarm", "all", "allocated", "alog", "amax", "amin", "amod", "and", "anint", "any", "asin", "associated", "atan", "besj", "besjn", "besy", "besyn", "bit_size", "btest", "cabs", "ccos", "ceiling", "cexp", "char", "chdir", "chmod", "clog", "cmplx", "command_argument_count", "complex", "conjg", "cos", "cosh", "count", "cpu_time", "cshift", "csin", "csqrt", "ctime", "c_funloc", "c_loc", "c_associated", "c_null_ptr", "c_null_funptr", "c_f_pointer", "c_null_char", "c_alert", "c_backspace", "c_form_feed", "c_new_line", "c_carriage_return", "c_horizontal_tab", "c_vertical_tab", "dabs", "dacos", "dasin", "datan", "date_and_time", "dbesj", "dbesj", "dbesjn", "dbesy", "dbesy", "dbesyn", "dble", "dcos", "dcosh", "ddim", "derf", "derfc", "dexp", "digits", "dim", "dint", "dlog", "dlog", "dmax", "dmin", "dmod", "dnint", "dot_product", "dprod", "dsign", "dsinh", "dsin", "dsqrt", "dtanh", "dtan", "dtime", "eoshift", "epsilon", "erf", "erfc", "etime", "exit", "exp", "exponent", "extends_type_of", "fdate", "fget", "fgetc", "float", "floor", "flush", "fnum", "fputc", "fput", "fraction", "fseek", "fstat", "ftell", "gerror", "getarg", "get_command", "get_command_argument", "get_environment_variable", "getcwd", "getenv", "getgid", "getlog", "getpid", "getuid", "gmtime", "hostnm", "huge", "iabs", "iachar", "iand", "iargc", "ibclr", "ibits", "ibset", "ichar", "idate", "idim", "idint", "idnint", "ieor", "ierrno", "ifix", "imag", "imagpart", "index", "int", "ior", "irand", "isatty", "ishft", "ishftc", "isign", "iso_c_binding", "is_iostat_end", "is_iostat_eor", "itime", "kill", "kind", "lbound", "len", "len_trim", "lge", "lgt", "link", "lle", "llt", "lnblnk", "loc", "log", "logical", "long", "lshift", "lstat", "ltime", "matmul", "max", "maxexponent", "maxloc", "maxval", "mclock", "merge", "move_alloc", "min", "minexponent", "minloc", "minval", "mod", "modulo", "mvbits", "nearest", "new_line", "nint", "not", "or", "pack", "perror", "precision", "present", "product", "radix", "rand", "random_number", "random_seed", "range", "real", "realpart", "rename", "repeat", "reshape", "rrspacing", "rshift", "same_type_as", "scale", "scan", "second", "selected_int_kind", "selected_real_kind", "set_exponent", "shape", "short", "sign", "signal", "sinh", "sin", "sleep", "sngl", "spacing", "spread", "sqrt", "srand", "stat", "sum", "symlnk", "system", "system_clock", "tan", "tanh", "time", "tiny", "transfer", "transpose", "trim", "ttynam", "ubound", "umask", "unlink", "unpack", "verify", "xor", "zabs", "zcos", "zexp", "zlog", "zsin", "zsqrt"]); var dataTypes = words(["c_bool", "c_char", "c_double", "c_double_complex", "c_float", "c_float_complex", "c_funptr", "c_int", "c_int16_t", "c_int32_t", "c_int64_t", "c_int8_t", "c_int_fast16_t", "c_int_fast32_t", "c_int_fast64_t", "c_int_fast8_t", "c_int_least16_t", "c_int_least32_t", "c_int_least64_t", "c_int_least8_t", "c_intmax_t", "c_intptr_t", "c_long", "c_long_double", "c_long_double_complex", "c_long_long", "c_ptr", "c_short", "c_signed_char", "c_size_t", "character", "complex", "double", "integer", "logical", "real"]); var isOperatorChar = /[+\-*&=<>\/\:]/; var litOperator = new RegExp("(\.and\.|\.or\.|\.eq\.|\.lt\.|\.le\.|\.gt\.|\.ge\.|\.ne\.|\.not\.|\.eqv\.|\.neqv\.)", "i"); function tokenBase(stream, state) { if (stream.match(litOperator)){ return 'operator'; } var ch = stream.next(); if (ch == "!") { stream.skipToEnd(); return "comment"; } if (ch == '"' || ch == "'") { state.tokenize = tokenString(ch); return state.tokenize(stream, state); } if (/[\[\]\(\),]/.test(ch)) { return null; } if (/\d/.test(ch)) { stream.eatWhile(/[\w\.]/); return "number"; } if (isOperatorChar.test(ch)) { stream.eatWhile(isOperatorChar); return "operator"; } stream.eatWhile(/[\w\$_]/); var word = stream.current().toLowerCase(); if (keywords.hasOwnProperty(word)){ return 'keyword'; } if (builtins.hasOwnProperty(word) || dataTypes.hasOwnProperty(word)) { return 'builtin'; } return "variable"; } function tokenString(quote) { return function(stream, state) { var escaped = false, next, end = false; while ((next = stream.next()) != null) { if (next == quote && !escaped) { end = true; break; } escaped = !escaped && next == "\\"; } if (end || !escaped) state.tokenize = null; return "string"; }; } // Interface return { startState: function() { return {tokenize: null}; }, token: function(stream, state) { if (stream.eatSpace()) return null; var style = (state.tokenize || tokenBase)(stream, state); if (style == "comment" || style == "meta") return style; return style; } }; }); CodeMirror.defineMIME("text/x-fortran", "fortran"); }); PK!‡êE¼ ¼ Lfile-manager-advanced/application/library/codemirror/mode/fortran/index.htmlnu„[µü¤ CodeMirror: Fortran mode

    Fortran mode

    MIME types defined: text/x-fortran.

    PK!}½��Hfile-manager-advanced/application/library/codemirror/mode/ecl/index.htmlnu„[µü¤ CodeMirror: ECL mode

    ECL mode

    Based on CodeMirror's clike mode. For more information see HPCC Systems web site.

    MIME types defined: text/x-ecl.

    PK!-‚µ‹"‹"Dfile-manager-advanced/application/library/codemirror/mode/ecl/ecl.jsnu„[µü¤// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMode("ecl", function(config) { function words(str) { var obj = {}, words = str.split(" "); for (var i = 0; i < words.length; ++i) obj[words[i]] = true; return obj; } function metaHook(stream, state) { if (!state.startOfLine) return false; stream.skipToEnd(); return "meta"; } var indentUnit = config.indentUnit; var keyword = words("abs acos allnodes ascii asin asstring atan atan2 ave case choose choosen choosesets clustersize combine correlation cos cosh count covariance cron dataset dedup define denormalize distribute distributed distribution ebcdic enth error evaluate event eventextra eventname exists exp failcode failmessage fetch fromunicode getisvalid global graph group hash hash32 hash64 hashcrc hashmd5 having if index intformat isvalid iterate join keyunicode length library limit ln local log loop map matched matchlength matchposition matchtext matchunicode max merge mergejoin min nolocal nonempty normalize parse pipe power preload process project pull random range rank ranked realformat recordof regexfind regexreplace regroup rejected rollup round roundup row rowdiff sample set sin sinh sizeof soapcall sort sorted sqrt stepped stored sum table tan tanh thisnode topn tounicode transfer trim truncate typeof ungroup unicodeorder variance which workunit xmldecode xmlencode xmltext xmlunicode"); var variable = words("apply assert build buildindex evaluate fail keydiff keypatch loadxml nothor notify output parallel sequential soapcall wait"); var variable_2 = words("__compressed__ all and any as atmost before beginc++ best between case const counter csv descend encrypt end endc++ endmacro except exclusive expire export extend false few first flat from full function group header heading hole ifblock import in interface joined keep keyed last left limit load local locale lookup macro many maxcount maxlength min skew module named nocase noroot noscan nosort not of only opt or outer overwrite packed partition penalty physicallength pipe quote record relationship repeat return right scan self separator service shared skew skip sql store terminator thor threshold token transform trim true type unicodeorder unsorted validate virtual whole wild within xml xpath"); var variable_3 = words("ascii big_endian boolean data decimal ebcdic integer pattern qstring real record rule set of string token udecimal unicode unsigned varstring varunicode"); var builtin = words("checkpoint deprecated failcode failmessage failure global independent onwarning persist priority recovery stored success wait when"); var blockKeywords = words("catch class do else finally for if switch try while"); var atoms = words("true false null"); var hooks = {"#": metaHook}; var isOperatorChar = /[+\-*&%=<>!?|\/]/; var curPunc; function tokenBase(stream, state) { var ch = stream.next(); if (hooks[ch]) { var result = hooks[ch](stream, state); if (result !== false) return result; } if (ch == '"' || ch == "'") { state.tokenize = tokenString(ch); return state.tokenize(stream, state); } if (/[\[\]{}\(\),;\:\.]/.test(ch)) { curPunc = ch; return null; } if (/\d/.test(ch)) { stream.eatWhile(/[\w\.]/); return "number"; } if (ch == "/") { if (stream.eat("*")) { state.tokenize = tokenComment; return tokenComment(stream, state); } if (stream.eat("/")) { stream.skipToEnd(); return "comment"; } } if (isOperatorChar.test(ch)) { stream.eatWhile(isOperatorChar); return "operator"; } stream.eatWhile(/[\w\$_]/); var cur = stream.current().toLowerCase(); if (keyword.propertyIsEnumerable(cur)) { if (blockKeywords.propertyIsEnumerable(cur)) curPunc = "newstatement"; return "keyword"; } else if (variable.propertyIsEnumerable(cur)) { if (blockKeywords.propertyIsEnumerable(cur)) curPunc = "newstatement"; return "variable"; } else if (variable_2.propertyIsEnumerable(cur)) { if (blockKeywords.propertyIsEnumerable(cur)) curPunc = "newstatement"; return "variable-2"; } else if (variable_3.propertyIsEnumerable(cur)) { if (blockKeywords.propertyIsEnumerable(cur)) curPunc = "newstatement"; return "variable-3"; } else if (builtin.propertyIsEnumerable(cur)) { if (blockKeywords.propertyIsEnumerable(cur)) curPunc = "newstatement"; return "builtin"; } else { //Data types are of from KEYWORD## var i = cur.length - 1; while(i >= 0 && (!isNaN(cur[i]) || cur[i] == '_')) --i; if (i > 0) { var cur2 = cur.substr(0, i + 1); if (variable_3.propertyIsEnumerable(cur2)) { if (blockKeywords.propertyIsEnumerable(cur2)) curPunc = "newstatement"; return "variable-3"; } } } if (atoms.propertyIsEnumerable(cur)) return "atom"; return null; } function tokenString(quote) { return function(stream, state) { var escaped = false, next, end = false; while ((next = stream.next()) != null) { if (next == quote && !escaped) {end = true; break;} escaped = !escaped && next == "\\"; } if (end || !escaped) state.tokenize = tokenBase; return "string"; }; } function tokenComment(stream, state) { var maybeEnd = false, ch; while (ch = stream.next()) { if (ch == "/" && maybeEnd) { state.tokenize = tokenBase; break; } maybeEnd = (ch == "*"); } return "comment"; } function Context(indented, column, type, align, prev) { this.indented = indented; this.column = column; this.type = type; this.align = align; this.prev = prev; } function pushContext(state, col, type) { return state.context = new Context(state.indented, col, type, null, state.context); } function popContext(state) { var t = state.context.type; if (t == ")" || t == "]" || t == "}") state.indented = state.context.indented; return state.context = state.context.prev; } // Interface return { startState: function(basecolumn) { return { tokenize: null, context: new Context((basecolumn || 0) - indentUnit, 0, "top", false), indented: 0, startOfLine: true }; }, token: function(stream, state) { var ctx = state.context; if (stream.sol()) { if (ctx.align == null) ctx.align = false; state.indented = stream.indentation(); state.startOfLine = true; } if (stream.eatSpace()) return null; curPunc = null; var style = (state.tokenize || tokenBase)(stream, state); if (style == "comment" || style == "meta") return style; if (ctx.align == null) ctx.align = true; if ((curPunc == ";" || curPunc == ":") && ctx.type == "statement") popContext(state); else if (curPunc == "{") pushContext(state, stream.column(), "}"); else if (curPunc == "[") pushContext(state, stream.column(), "]"); else if (curPunc == "(") pushContext(state, stream.column(), ")"); else if (curPunc == "}") { while (ctx.type == "statement") ctx = popContext(state); if (ctx.type == "}") ctx = popContext(state); while (ctx.type == "statement") ctx = popContext(state); } else if (curPunc == ctx.type) popContext(state); else if (ctx.type == "}" || ctx.type == "top" || (ctx.type == "statement" && curPunc == "newstatement")) pushContext(state, stream.column(), "statement"); state.startOfLine = false; return style; }, indent: function(state, textAfter) { if (state.tokenize != tokenBase && state.tokenize != null) return 0; var ctx = state.context, firstChar = textAfter && textAfter.charAt(0); if (ctx.type == "statement" && firstChar == "}") ctx = ctx.prev; var closing = firstChar == ctx.type; if (ctx.type == "statement") return ctx.indented + (firstChar == "{" ? 0 : indentUnit); else if (ctx.align) return ctx.column + (closing ? 0 : 1); else return ctx.indented + (closing ? 0 : indentUnit); }, electricChars: "{}" }; }); CodeMirror.defineMIME("text/x-ecl", "ecl"); }); PK![£K‚W‚WQfile-manager-advanced/application/library/codemirror/mode/coffeescript/index.htmlnu„[µü¤ CodeMirror: CoffeeScript mode

    CoffeeScript mode

    MIME types defined: text/x-coffeescript.

    The CoffeeScript mode was written by Jeff Pickhardt.

    PK!øŠ-Xœ&œ&Vfile-manager-advanced/application/library/codemirror/mode/coffeescript/coffeescript.jsnu„[µü¤// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE /** * Link to the project's GitHub page: * https://github.com/pickhardt/coffeescript-codemirror-mode */ (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMode("coffeescript", function(conf, parserConf) { var ERRORCLASS = "error"; function wordRegexp(words) { return new RegExp("^((" + words.join(")|(") + "))\\b"); } var operators = /^(?:->|=>|\+[+=]?|-[\-=]?|\*[\*=]?|\/[\/=]?|[=!]=|<[><]?=?|>>?=?|%=?|&=?|\|=?|\^=?|\~|!|\?|(or|and|\|\||&&|\?)=)/; var delimiters = /^(?:[()\[\]{},:`=;]|\.\.?\.?)/; var identifiers = /^[_A-Za-z$][_A-Za-z$0-9]*/; var atProp = /^@[_A-Za-z$][_A-Za-z$0-9]*/; var wordOperators = wordRegexp(["and", "or", "not", "is", "isnt", "in", "instanceof", "typeof"]); var indentKeywords = ["for", "while", "loop", "if", "unless", "else", "switch", "try", "catch", "finally", "class"]; var commonKeywords = ["break", "by", "continue", "debugger", "delete", "do", "in", "of", "new", "return", "then", "this", "@", "throw", "when", "until", "extends"]; var keywords = wordRegexp(indentKeywords.concat(commonKeywords)); indentKeywords = wordRegexp(indentKeywords); var stringPrefixes = /^('{3}|\"{3}|['\"])/; var regexPrefixes = /^(\/{3}|\/)/; var commonConstants = ["Infinity", "NaN", "undefined", "null", "true", "false", "on", "off", "yes", "no"]; var constants = wordRegexp(commonConstants); // Tokenizers function tokenBase(stream, state) { // Handle scope changes if (stream.sol()) { if (state.scope.align === null) state.scope.align = false; var scopeOffset = state.scope.offset; if (stream.eatSpace()) { var lineOffset = stream.indentation(); if (lineOffset > scopeOffset && state.scope.type == "coffee") { return "indent"; } else if (lineOffset < scopeOffset) { return "dedent"; } return null; } else { if (scopeOffset > 0) { dedent(stream, state); } } } if (stream.eatSpace()) { return null; } var ch = stream.peek(); // Handle docco title comment (single line) if (stream.match("####")) { stream.skipToEnd(); return "comment"; } // Handle multi line comments if (stream.match("###")) { state.tokenize = longComment; return state.tokenize(stream, state); } // Single line comment if (ch === "#") { stream.skipToEnd(); return "comment"; } // Handle number literals if (stream.match(/^-?[0-9\.]/, false)) { var floatLiteral = false; // Floats if (stream.match(/^-?\d*\.\d+(e[\+\-]?\d+)?/i)) { floatLiteral = true; } if (stream.match(/^-?\d+\.\d*/)) { floatLiteral = true; } if (stream.match(/^-?\.\d+/)) { floatLiteral = true; } if (floatLiteral) { // prevent from getting extra . on 1.. if (stream.peek() == "."){ stream.backUp(1); } return "number"; } // Integers var intLiteral = false; // Hex if (stream.match(/^-?0x[0-9a-f]+/i)) { intLiteral = true; } // Decimal if (stream.match(/^-?[1-9]\d*(e[\+\-]?\d+)?/)) { intLiteral = true; } // Zero by itself with no other piece of number. if (stream.match(/^-?0(?![\dx])/i)) { intLiteral = true; } if (intLiteral) { return "number"; } } // Handle strings if (stream.match(stringPrefixes)) { state.tokenize = tokenFactory(stream.current(), false, "string"); return state.tokenize(stream, state); } // Handle regex literals if (stream.match(regexPrefixes)) { if (stream.current() != "/" || stream.match(/^.*\//, false)) { // prevent highlight of division state.tokenize = tokenFactory(stream.current(), true, "string-2"); return state.tokenize(stream, state); } else { stream.backUp(1); } } // Handle operators and delimiters if (stream.match(operators) || stream.match(wordOperators)) { return "operator"; } if (stream.match(delimiters)) { return "punctuation"; } if (stream.match(constants)) { return "atom"; } if (stream.match(atProp) || state.prop && stream.match(identifiers)) { return "property"; } if (stream.match(keywords)) { return "keyword"; } if (stream.match(identifiers)) { return "variable"; } // Handle non-detected items stream.next(); return ERRORCLASS; } function tokenFactory(delimiter, singleline, outclass) { return function(stream, state) { while (!stream.eol()) { stream.eatWhile(/[^'"\/\\]/); if (stream.eat("\\")) { stream.next(); if (singleline && stream.eol()) { return outclass; } } else if (stream.match(delimiter)) { state.tokenize = tokenBase; return outclass; } else { stream.eat(/['"\/]/); } } if (singleline) { if (parserConf.singleLineStringErrors) { outclass = ERRORCLASS; } else { state.tokenize = tokenBase; } } return outclass; }; } function longComment(stream, state) { while (!stream.eol()) { stream.eatWhile(/[^#]/); if (stream.match("###")) { state.tokenize = tokenBase; break; } stream.eatWhile("#"); } return "comment"; } function indent(stream, state, type) { type = type || "coffee"; var offset = 0, align = false, alignOffset = null; for (var scope = state.scope; scope; scope = scope.prev) { if (scope.type === "coffee" || scope.type == "}") { offset = scope.offset + conf.indentUnit; break; } } if (type !== "coffee") { align = null; alignOffset = stream.column() + stream.current().length; } else if (state.scope.align) { state.scope.align = false; } state.scope = { offset: offset, type: type, prev: state.scope, align: align, alignOffset: alignOffset }; } function dedent(stream, state) { if (!state.scope.prev) return; if (state.scope.type === "coffee") { var _indent = stream.indentation(); var matched = false; for (var scope = state.scope; scope; scope = scope.prev) { if (_indent === scope.offset) { matched = true; break; } } if (!matched) { return true; } while (state.scope.prev && state.scope.offset !== _indent) { state.scope = state.scope.prev; } return false; } else { state.scope = state.scope.prev; return false; } } function tokenLexer(stream, state) { var style = state.tokenize(stream, state); var current = stream.current(); // Handle scope changes. if (current === "return") { state.dedent = true; } if (((current === "->" || current === "=>") && stream.eol()) || style === "indent") { indent(stream, state); } var delimiter_index = "[({".indexOf(current); if (delimiter_index !== -1) { indent(stream, state, "])}".slice(delimiter_index, delimiter_index+1)); } if (indentKeywords.exec(current)){ indent(stream, state); } if (current == "then"){ dedent(stream, state); } if (style === "dedent") { if (dedent(stream, state)) { return ERRORCLASS; } } delimiter_index = "])}".indexOf(current); if (delimiter_index !== -1) { while (state.scope.type == "coffee" && state.scope.prev) state.scope = state.scope.prev; if (state.scope.type == current) state.scope = state.scope.prev; } if (state.dedent && stream.eol()) { if (state.scope.type == "coffee" && state.scope.prev) state.scope = state.scope.prev; state.dedent = false; } return style; } var external = { startState: function(basecolumn) { return { tokenize: tokenBase, scope: {offset:basecolumn || 0, type:"coffee", prev: null, align: false}, prop: false, dedent: 0 }; }, token: function(stream, state) { var fillAlign = state.scope.align === null && state.scope; if (fillAlign && stream.sol()) fillAlign.align = false; var style = tokenLexer(stream, state); if (style && style != "comment") { if (fillAlign) fillAlign.align = true; state.prop = style == "punctuation" && stream.current() == "." } return style; }, indent: function(state, text) { if (state.tokenize != tokenBase) return 0; var scope = state.scope; var closer = text && "])}".indexOf(text.charAt(0)) > -1; if (closer) while (scope.type == "coffee" && scope.prev) scope = scope.prev; var closes = closer && scope.type === text.charAt(0); if (scope.align) return scope.alignOffset - (closes ? 1 : 0); else return (closes ? scope.prev : scope).offset; }, lineComment: "#", fold: "indent" }; return external; }); CodeMirror.defineMIME("text/x-coffeescript", "coffeescript"); CodeMirror.defineMIME("text/coffeescript", "coffeescript"); }); PK!ñ¾úC C Tfile-manager-advanced/application/library/codemirror/mode/spreadsheet/spreadsheet.jsnu„[µü¤// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMode("spreadsheet", function () { return { startState: function () { return { stringType: null, stack: [] }; }, token: function (stream, state) { if (!stream) return; //check for state changes if (state.stack.length === 0) { //strings if ((stream.peek() == '"') || (stream.peek() == "'")) { state.stringType = stream.peek(); stream.next(); // Skip quote state.stack.unshift("string"); } } //return state //stack has switch (state.stack[0]) { case "string": while (state.stack[0] === "string" && !stream.eol()) { if (stream.peek() === state.stringType) { stream.next(); // Skip quote state.stack.shift(); // Clear flag } else if (stream.peek() === "\\") { stream.next(); stream.next(); } else { stream.match(/^.[^\\\"\']*/); } } return "string"; case "characterClass": while (state.stack[0] === "characterClass" && !stream.eol()) { if (!(stream.match(/^[^\]\\]+/) || stream.match(/^\\./))) state.stack.shift(); } return "operator"; } var peek = stream.peek(); //no stack switch (peek) { case "[": stream.next(); state.stack.unshift("characterClass"); return "bracket"; case ":": stream.next(); return "operator"; case "\\": if (stream.match(/\\[a-z]+/)) return "string-2"; else { stream.next(); return "atom"; } case ".": case ",": case ";": case "*": case "-": case "+": case "^": case "<": case "/": case "=": stream.next(); return "atom"; case "$": stream.next(); return "builtin"; } if (stream.match(/\d+/)) { if (stream.match(/^\w+/)) return "error"; return "number"; } else if (stream.match(/^[a-zA-Z_]\w*/)) { if (stream.match(/(?=[\(.])/, false)) return "keyword"; return "variable-2"; } else if (["[", "]", "(", ")", "{", "}"].indexOf(peek) != -1) { stream.next(); return "bracket"; } else if (!stream.eatSpace()) { stream.next(); } return null; } }; }); CodeMirror.defineMIME("text/x-spreadsheet", "spreadsheet"); }); PK!ŒÚÚppPfile-manager-advanced/application/library/codemirror/mode/spreadsheet/index.htmlnu„[µü¤ CodeMirror: Spreadsheet mode

    Spreadsheet mode

    MIME types defined: text/x-spreadsheet.

    The Spreadsheet Mode

    Created by Robert Plummer

    PK!�½h£ZZIfile-manager-advanced/application/library/codemirror/mode/twig/index.htmlnu„[µü¤ CodeMirror: Twig mode

    Twig mode

    PK!ƒÈ.ÍÚÚFfile-manager-advanced/application/library/codemirror/mode/twig/twig.jsnu„[µü¤// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror"), require("../../addon/mode/multiplex")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror", "../../addon/mode/multiplex"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMode("twig:inner", function() { var keywords = ["and", "as", "autoescape", "endautoescape", "block", "do", "endblock", "else", "elseif", "extends", "for", "endfor", "embed", "endembed", "filter", "endfilter", "flush", "from", "if", "endif", "in", "is", "include", "import", "not", "or", "set", "spaceless", "endspaceless", "with", "endwith", "trans", "endtrans", "blocktrans", "endblocktrans", "macro", "endmacro", "use", "verbatim", "endverbatim"], operator = /^[+\-*&%=<>!?|~^]/, sign = /^[:\[\(\{]/, atom = ["true", "false", "null", "empty", "defined", "divisibleby", "divisible by", "even", "odd", "iterable", "sameas", "same as"], number = /^(\d[+\-\*\/])?\d+(\.\d+)?/; keywords = new RegExp("((" + keywords.join(")|(") + "))\\b"); atom = new RegExp("((" + atom.join(")|(") + "))\\b"); function tokenBase (stream, state) { var ch = stream.peek(); //Comment if (state.incomment) { if (!stream.skipTo("#}")) { stream.skipToEnd(); } else { stream.eatWhile(/\#|}/); state.incomment = false; } return "comment"; //Tag } else if (state.intag) { //After operator if (state.operator) { state.operator = false; if (stream.match(atom)) { return "atom"; } if (stream.match(number)) { return "number"; } } //After sign if (state.sign) { state.sign = false; if (stream.match(atom)) { return "atom"; } if (stream.match(number)) { return "number"; } } if (state.instring) { if (ch == state.instring) { state.instring = false; } stream.next(); return "string"; } else if (ch == "'" || ch == '"') { state.instring = ch; stream.next(); return "string"; } else if (stream.match(state.intag + "}") || stream.eat("-") && stream.match(state.intag + "}")) { state.intag = false; return "tag"; } else if (stream.match(operator)) { state.operator = true; return "operator"; } else if (stream.match(sign)) { state.sign = true; } else { if (stream.eat(" ") || stream.sol()) { if (stream.match(keywords)) { return "keyword"; } if (stream.match(atom)) { return "atom"; } if (stream.match(number)) { return "number"; } if (stream.sol()) { stream.next(); } } else { stream.next(); } } return "variable"; } else if (stream.eat("{")) { if (ch = stream.eat("#")) { state.incomment = true; if (!stream.skipTo("#}")) { stream.skipToEnd(); } else { stream.eatWhile(/\#|}/); state.incomment = false; } return "comment"; //Open tag } else if (ch = stream.eat(/\{|%/)) { //Cache close tag state.intag = ch; if (ch == "{") { state.intag = "}"; } stream.eat("-"); return "tag"; } } stream.next(); }; return { startState: function () { return {}; }, token: function (stream, state) { return tokenBase(stream, state); } }; }); CodeMirror.defineMode("twig", function(config, parserConfig) { var twigInner = CodeMirror.getMode(config, "twig:inner"); if (!parserConfig || !parserConfig.base) return twigInner; return CodeMirror.multiplexingMode( CodeMirror.getMode(config, parserConfig.base), { open: /\{[{#%]/, close: /[}#%]\}/, mode: twigInner, parseDelimiters: true } ); }); CodeMirror.defineMIME("text/x-twig", "twig"); }); PK!пþ ‹D‹DDfile-manager-advanced/application/library/codemirror/mode/rst/rst.jsnu„[µü¤// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror"), require("../python/python"), require("../stex/stex"), require("../../addon/mode/overlay")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror", "../python/python", "../stex/stex", "../../addon/mode/overlay"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMode('rst', function (config, options) { var rx_strong = /^\*\*[^\*\s](?:[^\*]*[^\*\s])?\*\*/; var rx_emphasis = /^\*[^\*\s](?:[^\*]*[^\*\s])?\*/; var rx_literal = /^``[^`\s](?:[^`]*[^`\s])``/; var rx_number = /^(?:[\d]+(?:[\.,]\d+)*)/; var rx_positive = /^(?:\s\+[\d]+(?:[\.,]\d+)*)/; var rx_negative = /^(?:\s\-[\d]+(?:[\.,]\d+)*)/; var rx_uri_protocol = "[Hh][Tt][Tt][Pp][Ss]?://"; var rx_uri_domain = "(?:[\\d\\w.-]+)\\.(?:\\w{2,6})"; var rx_uri_path = "(?:/[\\d\\w\\#\\%\\&\\-\\.\\,\\/\\:\\=\\?\\~]+)*"; var rx_uri = new RegExp("^" + rx_uri_protocol + rx_uri_domain + rx_uri_path); var overlay = { token: function (stream) { if (stream.match(rx_strong) && stream.match (/\W+|$/, false)) return 'strong'; if (stream.match(rx_emphasis) && stream.match (/\W+|$/, false)) return 'em'; if (stream.match(rx_literal) && stream.match (/\W+|$/, false)) return 'string-2'; if (stream.match(rx_number)) return 'number'; if (stream.match(rx_positive)) return 'positive'; if (stream.match(rx_negative)) return 'negative'; if (stream.match(rx_uri)) return 'link'; while (stream.next() != null) { if (stream.match(rx_strong, false)) break; if (stream.match(rx_emphasis, false)) break; if (stream.match(rx_literal, false)) break; if (stream.match(rx_number, false)) break; if (stream.match(rx_positive, false)) break; if (stream.match(rx_negative, false)) break; if (stream.match(rx_uri, false)) break; } return null; } }; var mode = CodeMirror.getMode( config, options.backdrop || 'rst-base' ); return CodeMirror.overlayMode(mode, overlay, true); // combine }, 'python', 'stex'); /////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////// CodeMirror.defineMode('rst-base', function (config) { /////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////// function format(string) { var args = Array.prototype.slice.call(arguments, 1); return string.replace(/{(\d+)}/g, function (match, n) { return typeof args[n] != 'undefined' ? args[n] : match; }); } /////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////// var mode_python = CodeMirror.getMode(config, 'python'); var mode_stex = CodeMirror.getMode(config, 'stex'); /////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////// var SEPA = "\\s+"; var TAIL = "(?:\\s*|\\W|$)", rx_TAIL = new RegExp(format('^{0}', TAIL)); var NAME = "(?:[^\\W\\d_](?:[\\w!\"#$%&'()\\*\\+,\\-\\.\/:;<=>\\?]*[^\\W_])?)", rx_NAME = new RegExp(format('^{0}', NAME)); var NAME_WWS = "(?:[^\\W\\d_](?:[\\w\\s!\"#$%&'()\\*\\+,\\-\\.\/:;<=>\\?]*[^\\W_])?)"; var REF_NAME = format('(?:{0}|`{1}`)', NAME, NAME_WWS); var TEXT1 = "(?:[^\\s\\|](?:[^\\|]*[^\\s\\|])?)"; var TEXT2 = "(?:[^\\`]+)", rx_TEXT2 = new RegExp(format('^{0}', TEXT2)); var rx_section = new RegExp( "^([!'#$%&\"()*+,-./:;<=>?@\\[\\\\\\]^_`{|}~])\\1{3,}\\s*$"); var rx_explicit = new RegExp( format('^\\.\\.{0}', SEPA)); var rx_link = new RegExp( format('^_{0}:{1}|^__:{1}', REF_NAME, TAIL)); var rx_directive = new RegExp( format('^{0}::{1}', REF_NAME, TAIL)); var rx_substitution = new RegExp( format('^\\|{0}\\|{1}{2}::{3}', TEXT1, SEPA, REF_NAME, TAIL)); var rx_footnote = new RegExp( format('^\\[(?:\\d+|#{0}?|\\*)]{1}', REF_NAME, TAIL)); var rx_citation = new RegExp( format('^\\[{0}\\]{1}', REF_NAME, TAIL)); var rx_substitution_ref = new RegExp( format('^\\|{0}\\|', TEXT1)); var rx_footnote_ref = new RegExp( format('^\\[(?:\\d+|#{0}?|\\*)]_', REF_NAME)); var rx_citation_ref = new RegExp( format('^\\[{0}\\]_', REF_NAME)); var rx_link_ref1 = new RegExp( format('^{0}__?', REF_NAME)); var rx_link_ref2 = new RegExp( format('^`{0}`_', TEXT2)); var rx_role_pre = new RegExp( format('^:{0}:`{1}`{2}', NAME, TEXT2, TAIL)); var rx_role_suf = new RegExp( format('^`{1}`:{0}:{2}', NAME, TEXT2, TAIL)); var rx_role = new RegExp( format('^:{0}:{1}', NAME, TAIL)); var rx_directive_name = new RegExp(format('^{0}', REF_NAME)); var rx_directive_tail = new RegExp(format('^::{0}', TAIL)); var rx_substitution_text = new RegExp(format('^\\|{0}\\|', TEXT1)); var rx_substitution_sepa = new RegExp(format('^{0}', SEPA)); var rx_substitution_name = new RegExp(format('^{0}', REF_NAME)); var rx_substitution_tail = new RegExp(format('^::{0}', TAIL)); var rx_link_head = new RegExp("^_"); var rx_link_name = new RegExp(format('^{0}|_', REF_NAME)); var rx_link_tail = new RegExp(format('^:{0}', TAIL)); var rx_verbatim = new RegExp('^::\\s*$'); var rx_examples = new RegExp('^\\s+(?:>>>|In \\[\\d+\\]:)\\s'); /////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////// function to_normal(stream, state) { var token = null; if (stream.sol() && stream.match(rx_examples, false)) { change(state, to_mode, { mode: mode_python, local: CodeMirror.startState(mode_python) }); } else if (stream.sol() && stream.match(rx_explicit)) { change(state, to_explicit); token = 'meta'; } else if (stream.sol() && stream.match(rx_section)) { change(state, to_normal); token = 'header'; } else if (phase(state) == rx_role_pre || stream.match(rx_role_pre, false)) { switch (stage(state)) { case 0: change(state, to_normal, context(rx_role_pre, 1)); stream.match(/^:/); token = 'meta'; break; case 1: change(state, to_normal, context(rx_role_pre, 2)); stream.match(rx_NAME); token = 'keyword'; if (stream.current().match(/^(?:math|latex)/)) { state.tmp_stex = true; } break; case 2: change(state, to_normal, context(rx_role_pre, 3)); stream.match(/^:`/); token = 'meta'; break; case 3: if (state.tmp_stex) { state.tmp_stex = undefined; state.tmp = { mode: mode_stex, local: CodeMirror.startState(mode_stex) }; } if (state.tmp) { if (stream.peek() == '`') { change(state, to_normal, context(rx_role_pre, 4)); state.tmp = undefined; break; } token = state.tmp.mode.token(stream, state.tmp.local); break; } change(state, to_normal, context(rx_role_pre, 4)); stream.match(rx_TEXT2); token = 'string'; break; case 4: change(state, to_normal, context(rx_role_pre, 5)); stream.match(/^`/); token = 'meta'; break; case 5: change(state, to_normal, context(rx_role_pre, 6)); stream.match(rx_TAIL); break; default: change(state, to_normal); } } else if (phase(state) == rx_role_suf || stream.match(rx_role_suf, false)) { switch (stage(state)) { case 0: change(state, to_normal, context(rx_role_suf, 1)); stream.match(/^`/); token = 'meta'; break; case 1: change(state, to_normal, context(rx_role_suf, 2)); stream.match(rx_TEXT2); token = 'string'; break; case 2: change(state, to_normal, context(rx_role_suf, 3)); stream.match(/^`:/); token = 'meta'; break; case 3: change(state, to_normal, context(rx_role_suf, 4)); stream.match(rx_NAME); token = 'keyword'; break; case 4: change(state, to_normal, context(rx_role_suf, 5)); stream.match(/^:/); token = 'meta'; break; case 5: change(state, to_normal, context(rx_role_suf, 6)); stream.match(rx_TAIL); break; default: change(state, to_normal); } } else if (phase(state) == rx_role || stream.match(rx_role, false)) { switch (stage(state)) { case 0: change(state, to_normal, context(rx_role, 1)); stream.match(/^:/); token = 'meta'; break; case 1: change(state, to_normal, context(rx_role, 2)); stream.match(rx_NAME); token = 'keyword'; break; case 2: change(state, to_normal, context(rx_role, 3)); stream.match(/^:/); token = 'meta'; break; case 3: change(state, to_normal, context(rx_role, 4)); stream.match(rx_TAIL); break; default: change(state, to_normal); } } else if (phase(state) == rx_substitution_ref || stream.match(rx_substitution_ref, false)) { switch (stage(state)) { case 0: change(state, to_normal, context(rx_substitution_ref, 1)); stream.match(rx_substitution_text); token = 'variable-2'; break; case 1: change(state, to_normal, context(rx_substitution_ref, 2)); if (stream.match(/^_?_?/)) token = 'link'; break; default: change(state, to_normal); } } else if (stream.match(rx_footnote_ref)) { change(state, to_normal); token = 'quote'; } else if (stream.match(rx_citation_ref)) { change(state, to_normal); token = 'quote'; } else if (stream.match(rx_link_ref1)) { change(state, to_normal); if (!stream.peek() || stream.peek().match(/^\W$/)) { token = 'link'; } } else if (phase(state) == rx_link_ref2 || stream.match(rx_link_ref2, false)) { switch (stage(state)) { case 0: if (!stream.peek() || stream.peek().match(/^\W$/)) { change(state, to_normal, context(rx_link_ref2, 1)); } else { stream.match(rx_link_ref2); } break; case 1: change(state, to_normal, context(rx_link_ref2, 2)); stream.match(/^`/); token = 'link'; break; case 2: change(state, to_normal, context(rx_link_ref2, 3)); stream.match(rx_TEXT2); break; case 3: change(state, to_normal, context(rx_link_ref2, 4)); stream.match(/^`_/); token = 'link'; break; default: change(state, to_normal); } } else if (stream.match(rx_verbatim)) { change(state, to_verbatim); } else { if (stream.next()) change(state, to_normal); } return token; } /////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////// function to_explicit(stream, state) { var token = null; if (phase(state) == rx_substitution || stream.match(rx_substitution, false)) { switch (stage(state)) { case 0: change(state, to_explicit, context(rx_substitution, 1)); stream.match(rx_substitution_text); token = 'variable-2'; break; case 1: change(state, to_explicit, context(rx_substitution, 2)); stream.match(rx_substitution_sepa); break; case 2: change(state, to_explicit, context(rx_substitution, 3)); stream.match(rx_substitution_name); token = 'keyword'; break; case 3: change(state, to_explicit, context(rx_substitution, 4)); stream.match(rx_substitution_tail); token = 'meta'; break; default: change(state, to_normal); } } else if (phase(state) == rx_directive || stream.match(rx_directive, false)) { switch (stage(state)) { case 0: change(state, to_explicit, context(rx_directive, 1)); stream.match(rx_directive_name); token = 'keyword'; if (stream.current().match(/^(?:math|latex)/)) state.tmp_stex = true; else if (stream.current().match(/^python/)) state.tmp_py = true; break; case 1: change(state, to_explicit, context(rx_directive, 2)); stream.match(rx_directive_tail); token = 'meta'; if (stream.match(/^latex\s*$/) || state.tmp_stex) { state.tmp_stex = undefined; change(state, to_mode, { mode: mode_stex, local: CodeMirror.startState(mode_stex) }); } break; case 2: change(state, to_explicit, context(rx_directive, 3)); if (stream.match(/^python\s*$/) || state.tmp_py) { state.tmp_py = undefined; change(state, to_mode, { mode: mode_python, local: CodeMirror.startState(mode_python) }); } break; default: change(state, to_normal); } } else if (phase(state) == rx_link || stream.match(rx_link, false)) { switch (stage(state)) { case 0: change(state, to_explicit, context(rx_link, 1)); stream.match(rx_link_head); stream.match(rx_link_name); token = 'link'; break; case 1: change(state, to_explicit, context(rx_link, 2)); stream.match(rx_link_tail); token = 'meta'; break; default: change(state, to_normal); } } else if (stream.match(rx_footnote)) { change(state, to_normal); token = 'quote'; } else if (stream.match(rx_citation)) { change(state, to_normal); token = 'quote'; } else { stream.eatSpace(); if (stream.eol()) { change(state, to_normal); } else { stream.skipToEnd(); change(state, to_comment); token = 'comment'; } } return token; } /////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////// function to_comment(stream, state) { return as_block(stream, state, 'comment'); } function to_verbatim(stream, state) { return as_block(stream, state, 'meta'); } function as_block(stream, state, token) { if (stream.eol() || stream.eatSpace()) { stream.skipToEnd(); return token; } else { change(state, to_normal); return null; } } /////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////// function to_mode(stream, state) { if (state.ctx.mode && state.ctx.local) { if (stream.sol()) { if (!stream.eatSpace()) change(state, to_normal); return null; } return state.ctx.mode.token(stream, state.ctx.local); } change(state, to_normal); return null; } /////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////// function context(phase, stage, mode, local) { return {phase: phase, stage: stage, mode: mode, local: local}; } function change(state, tok, ctx) { state.tok = tok; state.ctx = ctx || {}; } function stage(state) { return state.ctx.stage || 0; } function phase(state) { return state.ctx.phase; } /////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////// return { startState: function () { return {tok: to_normal, ctx: context(undefined, 0)}; }, copyState: function (state) { var ctx = state.ctx, tmp = state.tmp; if (ctx.local) ctx = {mode: ctx.mode, local: CodeMirror.copyState(ctx.mode, ctx.local)}; if (tmp) tmp = {mode: tmp.mode, local: CodeMirror.copyState(tmp.mode, tmp.local)}; return {tok: state.tok, ctx: ctx, tmp: tmp}; }, innerMode: function (state) { return state.tmp ? {state: state.tmp.local, mode: state.tmp.mode} : state.ctx.mode ? {state: state.ctx.local, mode: state.ctx.mode} : null; }, token: function (stream, state) { return state.tok(stream, state); } }; }, 'python', 'stex'); /////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////// CodeMirror.defineMIME('text/x-rst', 'rst'); /////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////// }); PK!Q8�>iEiEHfile-manager-advanced/application/library/codemirror/mode/rst/index.htmlnu„[µü¤ CodeMirror: reStructuredText mode

    reStructuredText mode

    The python mode will be used for highlighting blocks containing Python/IPython terminal sessions: blocks starting with >>> (for Python) or In [num]: (for IPython). Further, the stex mode will be used for highlighting blocks containing LaTex code.

    MIME types defined: text/x-rst.

    PK!Édˆ'¾¾Kfile-manager-advanced/application/library/codemirror/mode/turtle/index.htmlnu„[µü¤ CodeMirror: Turtle mode

    Turtle mode

    MIME types defined: text/turtle.

    PK!ÄTññJfile-manager-advanced/application/library/codemirror/mode/turtle/turtle.jsnu„[µü¤// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMode("turtle", function(config) { var indentUnit = config.indentUnit; var curPunc; function wordRegexp(words) { return new RegExp("^(?:" + words.join("|") + ")$", "i"); } var ops = wordRegexp([]); var keywords = wordRegexp(["@prefix", "@base", "a"]); var operatorChars = /[*+\-<>=&|]/; function tokenBase(stream, state) { var ch = stream.next(); curPunc = null; if (ch == "<" && !stream.match(/^[\s\u00a0=]/, false)) { stream.match(/^[^\s\u00a0>]*>?/); return "atom"; } else if (ch == "\"" || ch == "'") { state.tokenize = tokenLiteral(ch); return state.tokenize(stream, state); } else if (/[{}\(\),\.;\[\]]/.test(ch)) { curPunc = ch; return null; } else if (ch == "#") { stream.skipToEnd(); return "comment"; } else if (operatorChars.test(ch)) { stream.eatWhile(operatorChars); return null; } else if (ch == ":") { return "operator"; } else { stream.eatWhile(/[_\w\d]/); if(stream.peek() == ":") { return "variable-3"; } else { var word = stream.current(); if(keywords.test(word)) { return "meta"; } if(ch >= "A" && ch <= "Z") { return "comment"; } else { return "keyword"; } } var word = stream.current(); if (ops.test(word)) return null; else if (keywords.test(word)) return "meta"; else return "variable"; } } function tokenLiteral(quote) { return function(stream, state) { var escaped = false, ch; while ((ch = stream.next()) != null) { if (ch == quote && !escaped) { state.tokenize = tokenBase; break; } escaped = !escaped && ch == "\\"; } return "string"; }; } function pushContext(state, type, col) { state.context = {prev: state.context, indent: state.indent, col: col, type: type}; } function popContext(state) { state.indent = state.context.indent; state.context = state.context.prev; } return { startState: function() { return {tokenize: tokenBase, context: null, indent: 0, col: 0}; }, token: function(stream, state) { if (stream.sol()) { if (state.context && state.context.align == null) state.context.align = false; state.indent = stream.indentation(); } if (stream.eatSpace()) return null; var style = state.tokenize(stream, state); if (style != "comment" && state.context && state.context.align == null && state.context.type != "pattern") { state.context.align = true; } if (curPunc == "(") pushContext(state, ")", stream.column()); else if (curPunc == "[") pushContext(state, "]", stream.column()); else if (curPunc == "{") pushContext(state, "}", stream.column()); else if (/[\]\}\)]/.test(curPunc)) { while (state.context && state.context.type == "pattern") popContext(state); if (state.context && curPunc == state.context.type) popContext(state); } else if (curPunc == "." && state.context && state.context.type == "pattern") popContext(state); else if (/atom|string|variable/.test(style) && state.context) { if (/[\}\]]/.test(state.context.type)) pushContext(state, "pattern", stream.column()); else if (state.context.type == "pattern" && !state.context.align) { state.context.align = true; state.context.col = stream.column(); } } return style; }, indent: function(state, textAfter) { var firstChar = textAfter && textAfter.charAt(0); var context = state.context; if (/[\]\}]/.test(firstChar)) while (context && context.type == "pattern") context = context.prev; var closing = context && firstChar == context.type; if (!context) return 0; else if (context.type == "pattern") return context.col; else if (context.align) return context.col + (closing ? 0 : 1); else return context.indent + (closing ? 0 : indentUnit); }, lineComment: "#" }; }); CodeMirror.defineMIME("text/turtle", "turtle"); }); PK!Ç«VÚDfile-manager-advanced/application/library/codemirror/mode/gfm/gfm.jsnu„[µü¤// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror"), require("../markdown/markdown"), require("../../addon/mode/overlay")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror", "../markdown/markdown", "../../addon/mode/overlay"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; var urlRE = /^((?:(?:aaas?|about|acap|adiumxtra|af[ps]|aim|apt|attachment|aw|beshare|bitcoin|bolo|callto|cap|chrome(?:-extension)?|cid|coap|com-eventbrite-attendee|content|crid|cvs|data|dav|dict|dlna-(?:playcontainer|playsingle)|dns|doi|dtn|dvb|ed2k|facetime|feed|file|finger|fish|ftp|geo|gg|git|gizmoproject|go|gopher|gtalk|h323|hcp|https?|iax|icap|icon|im|imap|info|ipn|ipp|irc[6s]?|iris(?:\.beep|\.lwz|\.xpc|\.xpcs)?|itms|jar|javascript|jms|keyparc|lastfm|ldaps?|magnet|mailto|maps|market|message|mid|mms|ms-help|msnim|msrps?|mtqp|mumble|mupdate|mvn|news|nfs|nih?|nntp|notes|oid|opaquelocktoken|palm|paparazzi|platform|pop|pres|proxy|psyc|query|res(?:ource)?|rmi|rsync|rtmp|rtsp|secondlife|service|session|sftp|sgn|shttp|sieve|sips?|skype|sm[bs]|snmp|soap\.beeps?|soldat|spotify|ssh|steam|svn|tag|teamspeak|tel(?:net)?|tftp|things|thismessage|tip|tn3270|tv|udp|unreal|urn|ut2004|vemmi|ventrilo|view-source|webcal|wss?|wtai|wyciwyg|xcon(?:-userid)?|xfire|xmlrpc\.beeps?|xmpp|xri|ymsgr|z39\.50[rs]?):(?:\/{1,3}|[a-z0-9%])|www\d{0,3}[.]|[a-z0-9.\-]+[.][a-z]{2,4}\/)(?:[^\s()<>]|\([^\s()<>]*\))+(?:\([^\s()<>]*\)|[^\s`*!()\[\]{};:'".,<>?«»“â€�‘’]))/i CodeMirror.defineMode("gfm", function(config, modeConfig) { var codeDepth = 0; function blankLine(state) { state.code = false; return null; } var gfmOverlay = { startState: function() { return { code: false, codeBlock: false, ateSpace: false }; }, copyState: function(s) { return { code: s.code, codeBlock: s.codeBlock, ateSpace: s.ateSpace }; }, token: function(stream, state) { state.combineTokens = null; // Hack to prevent formatting override inside code blocks (block and inline) if (state.codeBlock) { if (stream.match(/^```+/)) { state.codeBlock = false; return null; } stream.skipToEnd(); return null; } if (stream.sol()) { state.code = false; } if (stream.sol() && stream.match(/^```+/)) { stream.skipToEnd(); state.codeBlock = true; return null; } // If this block is changed, it may need to be updated in Markdown mode if (stream.peek() === '`') { stream.next(); var before = stream.pos; stream.eatWhile('`'); var difference = 1 + stream.pos - before; if (!state.code) { codeDepth = difference; state.code = true; } else { if (difference === codeDepth) { // Must be exact state.code = false; } } return null; } else if (state.code) { stream.next(); return null; } // Check if space. If so, links can be formatted later on if (stream.eatSpace()) { state.ateSpace = true; return null; } if (stream.sol() || state.ateSpace) { state.ateSpace = false; if (modeConfig.gitHubSpice !== false) { if(stream.match(/^(?:[a-zA-Z0-9\-_]+\/)?(?:[a-zA-Z0-9\-_]+@)?(?:[a-f0-9]{7,40}\b)/)) { // User/Project@SHA // User@SHA // SHA state.combineTokens = true; return "link"; } else if (stream.match(/^(?:[a-zA-Z0-9\-_]+\/)?(?:[a-zA-Z0-9\-_]+)?#[0-9]+\b/)) { // User/Project#Num // User#Num // #Num state.combineTokens = true; return "link"; } } } if (stream.match(urlRE) && stream.string.slice(stream.start - 2, stream.start) != "](" && (stream.start == 0 || /\W/.test(stream.string.charAt(stream.start - 1)))) { // URLs // Taken from http://daringfireball.net/2010/07/improved_regex_for_matching_urls // And then (issue #1160) simplified to make it not crash the Chrome Regexp engine // And then limited url schemes to the CommonMark list, so foo:bar isn't matched as a URL state.combineTokens = true; return "link"; } stream.next(); return null; }, blankLine: blankLine }; var markdownConfig = { underscoresBreakWords: false, taskLists: true, fencedCodeBlocks: '```', strikethrough: true }; for (var attr in modeConfig) { markdownConfig[attr] = modeConfig[attr]; } markdownConfig.name = "markdown"; return CodeMirror.overlayMode(CodeMirror.getMode(config, markdownConfig), gfmOverlay); }, "markdown"); CodeMirror.defineMIME("text/x-gfm", "gfm"); }); PK!ñY=  Hfile-manager-advanced/application/library/codemirror/mode/gfm/index.htmlnu„[µü¤ CodeMirror: GFM mode

    GFM mode

    Optionally depends on other modes for properly highlighted code blocks.

    Parsing/Highlighting Tests: normal, verbose.

    PK!›Ú””Efile-manager-advanced/application/library/codemirror/mode/gfm/test.jsnu„[µü¤// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function() { var mode = CodeMirror.getMode({tabSize: 4}, "gfm"); function MT(name) { test.mode(name, mode, Array.prototype.slice.call(arguments, 1)); } var modeHighlightFormatting = CodeMirror.getMode({tabSize: 4}, {name: "gfm", highlightFormatting: true}); function FT(name) { test.mode(name, modeHighlightFormatting, Array.prototype.slice.call(arguments, 1)); } FT("codeBackticks", "[comment&formatting&formatting-code `][comment foo][comment&formatting&formatting-code `]"); FT("doubleBackticks", "[comment&formatting&formatting-code ``][comment foo ` bar][comment&formatting&formatting-code ``]"); FT("codeBlock", "[comment&formatting&formatting-code-block ```css]", "[tag foo]", "[comment&formatting&formatting-code-block ```]"); FT("taskList", "[variable-2&formatting&formatting-list&formatting-list-ul - ][meta&formatting&formatting-task [ ]]][variable-2 foo]", "[variable-2&formatting&formatting-list&formatting-list-ul - ][property&formatting&formatting-task [x]]][variable-2 foo]"); FT("formatting_strikethrough", "[strikethrough&formatting&formatting-strikethrough ~~][strikethrough foo][strikethrough&formatting&formatting-strikethrough ~~]"); FT("formatting_strikethrough", "foo [strikethrough&formatting&formatting-strikethrough ~~][strikethrough bar][strikethrough&formatting&formatting-strikethrough ~~]"); MT("emInWordAsterisk", "foo[em *bar*]hello"); MT("emInWordUnderscore", "foo_bar_hello"); MT("emStrongUnderscore", "[strong __][em&strong _foo__][em _] bar"); MT("fencedCodeBlocks", "[comment ```]", "[comment foo]", "", "[comment ```]", "bar"); MT("fencedCodeBlockModeSwitching", "[comment ```javascript]", "[variable foo]", "", "[comment ```]", "bar"); MT("fencedCodeBlockModeSwitchingObjc", "[comment ```objective-c]", "[keyword @property] [variable NSString] [operator *] [variable foo];", "[comment ```]", "bar"); MT("fencedCodeBlocksNoTildes", "~~~", "foo", "~~~"); MT("taskListAsterisk", "[variable-2 * []] foo]", // Invalid; must have space or x between [] "[variable-2 * [ ]]bar]", // Invalid; must have space after ] "[variable-2 * [x]]hello]", // Invalid; must have space after ] "[variable-2 * ][meta [ ]]][variable-2 [world]]]", // Valid; tests reference style links " [variable-3 * ][property [x]]][variable-3 foo]"); // Valid; can be nested MT("taskListPlus", "[variable-2 + []] foo]", // Invalid; must have space or x between [] "[variable-2 + [ ]]bar]", // Invalid; must have space after ] "[variable-2 + [x]]hello]", // Invalid; must have space after ] "[variable-2 + ][meta [ ]]][variable-2 [world]]]", // Valid; tests reference style links " [variable-3 + ][property [x]]][variable-3 foo]"); // Valid; can be nested MT("taskListDash", "[variable-2 - []] foo]", // Invalid; must have space or x between [] "[variable-2 - [ ]]bar]", // Invalid; must have space after ] "[variable-2 - [x]]hello]", // Invalid; must have space after ] "[variable-2 - ][meta [ ]]][variable-2 [world]]]", // Valid; tests reference style links " [variable-3 - ][property [x]]][variable-3 foo]"); // Valid; can be nested MT("taskListNumber", "[variable-2 1. []] foo]", // Invalid; must have space or x between [] "[variable-2 2. [ ]]bar]", // Invalid; must have space after ] "[variable-2 3. [x]]hello]", // Invalid; must have space after ] "[variable-2 4. ][meta [ ]]][variable-2 [world]]]", // Valid; tests reference style links " [variable-3 1. ][property [x]]][variable-3 foo]"); // Valid; can be nested MT("SHA", "foo [link be6a8cc1c1ecfe9489fb51e4869af15a13fc2cd2] bar"); MT("SHAEmphasis", "[em *foo ][em&link be6a8cc1c1ecfe9489fb51e4869af15a13fc2cd2][em *]"); MT("shortSHA", "foo [link be6a8cc] bar"); MT("tooShortSHA", "foo be6a8c bar"); MT("longSHA", "foo be6a8cc1c1ecfe9489fb51e4869af15a13fc2cd22 bar"); MT("badSHA", "foo be6a8cc1c1ecfe9489fb51e4869af15a13fc2cg2 bar"); MT("userSHA", "foo [link bar@be6a8cc1c1ecfe9489fb51e4869af15a13fc2cd2] hello"); MT("userSHAEmphasis", "[em *foo ][em&link bar@be6a8cc1c1ecfe9489fb51e4869af15a13fc2cd2][em *]"); MT("userProjectSHA", "foo [link bar/hello@be6a8cc1c1ecfe9489fb51e4869af15a13fc2cd2] world"); MT("userProjectSHAEmphasis", "[em *foo ][em&link bar/hello@be6a8cc1c1ecfe9489fb51e4869af15a13fc2cd2][em *]"); MT("num", "foo [link #1] bar"); MT("numEmphasis", "[em *foo ][em&link #1][em *]"); MT("badNum", "foo #1bar hello"); MT("userNum", "foo [link bar#1] hello"); MT("userNumEmphasis", "[em *foo ][em&link bar#1][em *]"); MT("userProjectNum", "foo [link bar/hello#1] world"); MT("userProjectNumEmphasis", "[em *foo ][em&link bar/hello#1][em *]"); MT("vanillaLink", "foo [link http://www.example.com/] bar"); MT("vanillaLinkNoScheme", "foo [link www.example.com] bar"); MT("vanillaLinkHttps", "foo [link https://www.example.com/] bar"); MT("vanillaLinkDataSchema", "foo [link data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO9TXL0Y4OHwAAAABJRU5ErkJggg==] bar"); MT("vanillaLinkPunctuation", "foo [link http://www.example.com/]. bar"); MT("vanillaLinkExtension", "foo [link http://www.example.com/index.html] bar"); MT("vanillaLinkEmphasis", "foo [em *][em&link http://www.example.com/index.html][em *] bar"); MT("notALink", "foo asfd:asdf bar"); MT("notALink", "[comment ```css]", "[tag foo] {[property color]:[keyword black];}", "[comment ```][link http://www.example.com/]"); MT("notALink", "[comment ``foo `bar` http://www.example.com/``] hello"); MT("notALink", "[comment `foo]", "[comment&link http://www.example.com/]", "[comment `] foo", "", "[link http://www.example.com/]"); MT("headerCodeBlockGithub", "[header&header-1 # heading]", "", "[comment ```]", "[comment code]", "[comment ```]", "", "Commit: [link be6a8cc1c1ecfe9489fb51e4869af15a13fc2cd2]", "Issue: [link #1]", "Link: [link http://www.example.com/]"); MT("strikethrough", "[strikethrough ~~foo~~]"); MT("strikethroughWithStartingSpace", "~~ foo~~"); MT("strikethroughUnclosedStrayTildes", "[strikethrough ~~foo~~~]"); MT("strikethroughUnclosedStrayTildes", "[strikethrough ~~foo ~~]"); MT("strikethroughUnclosedStrayTildes", "[strikethrough ~~foo ~~ bar]"); MT("strikethroughUnclosedStrayTildes", "[strikethrough ~~foo ~~ bar~~]hello"); MT("strikethroughOneLetter", "[strikethrough ~~a~~]"); MT("strikethroughWrapped", "[strikethrough ~~foo]", "[strikethrough foo~~]"); MT("strikethroughParagraph", "[strikethrough ~~foo]", "", "foo[strikethrough ~~bar]"); MT("strikethroughEm", "[strikethrough ~~foo][em&strikethrough *bar*][strikethrough ~~]"); MT("strikethroughEm", "[em *][em&strikethrough ~~foo~~][em *]"); MT("strikethroughStrong", "[strikethrough ~~][strong&strikethrough **foo**][strikethrough ~~]"); MT("strikethroughStrong", "[strong **][strong&strikethrough ~~foo~~][strong **]"); })(); PK!!žôÁAABfile-manager-advanced/application/library/codemirror/mode/go/go.jsnu„[µü¤// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMode("go", function(config) { var indentUnit = config.indentUnit; var keywords = { "break":true, "case":true, "chan":true, "const":true, "continue":true, "default":true, "defer":true, "else":true, "fallthrough":true, "for":true, "func":true, "go":true, "goto":true, "if":true, "import":true, "interface":true, "map":true, "package":true, "range":true, "return":true, "select":true, "struct":true, "switch":true, "type":true, "var":true, "bool":true, "byte":true, "complex64":true, "complex128":true, "float32":true, "float64":true, "int8":true, "int16":true, "int32":true, "int64":true, "string":true, "uint8":true, "uint16":true, "uint32":true, "uint64":true, "int":true, "uint":true, "uintptr":true, "error": true }; var atoms = { "true":true, "false":true, "iota":true, "nil":true, "append":true, "cap":true, "close":true, "complex":true, "copy":true, "imag":true, "len":true, "make":true, "new":true, "panic":true, "print":true, "println":true, "real":true, "recover":true }; var isOperatorChar = /[+\-*&^%:=<>!|\/]/; var curPunc; function tokenBase(stream, state) { var ch = stream.next(); if (ch == '"' || ch == "'" || ch == "`") { state.tokenize = tokenString(ch); return state.tokenize(stream, state); } if (/[\d\.]/.test(ch)) { if (ch == ".") { stream.match(/^[0-9]+([eE][\-+]?[0-9]+)?/); } else if (ch == "0") { stream.match(/^[xX][0-9a-fA-F]+/) || stream.match(/^0[0-7]+/); } else { stream.match(/^[0-9]*\.?[0-9]*([eE][\-+]?[0-9]+)?/); } return "number"; } if (/[\[\]{}\(\),;\:\.]/.test(ch)) { curPunc = ch; return null; } if (ch == "/") { if (stream.eat("*")) { state.tokenize = tokenComment; return tokenComment(stream, state); } if (stream.eat("/")) { stream.skipToEnd(); return "comment"; } } if (isOperatorChar.test(ch)) { stream.eatWhile(isOperatorChar); return "operator"; } stream.eatWhile(/[\w\$_\xa1-\uffff]/); var cur = stream.current(); if (keywords.propertyIsEnumerable(cur)) { if (cur == "case" || cur == "default") curPunc = "case"; return "keyword"; } if (atoms.propertyIsEnumerable(cur)) return "atom"; return "variable"; } function tokenString(quote) { return function(stream, state) { var escaped = false, next, end = false; while ((next = stream.next()) != null) { if (next == quote && !escaped) {end = true; break;} escaped = !escaped && quote != "`" && next == "\\"; } if (end || !(escaped || quote == "`")) state.tokenize = tokenBase; return "string"; }; } function tokenComment(stream, state) { var maybeEnd = false, ch; while (ch = stream.next()) { if (ch == "/" && maybeEnd) { state.tokenize = tokenBase; break; } maybeEnd = (ch == "*"); } return "comment"; } function Context(indented, column, type, align, prev) { this.indented = indented; this.column = column; this.type = type; this.align = align; this.prev = prev; } function pushContext(state, col, type) { return state.context = new Context(state.indented, col, type, null, state.context); } function popContext(state) { if (!state.context.prev) return; var t = state.context.type; if (t == ")" || t == "]" || t == "}") state.indented = state.context.indented; return state.context = state.context.prev; } // Interface return { startState: function(basecolumn) { return { tokenize: null, context: new Context((basecolumn || 0) - indentUnit, 0, "top", false), indented: 0, startOfLine: true }; }, token: function(stream, state) { var ctx = state.context; if (stream.sol()) { if (ctx.align == null) ctx.align = false; state.indented = stream.indentation(); state.startOfLine = true; if (ctx.type == "case") ctx.type = "}"; } if (stream.eatSpace()) return null; curPunc = null; var style = (state.tokenize || tokenBase)(stream, state); if (style == "comment") return style; if (ctx.align == null) ctx.align = true; if (curPunc == "{") pushContext(state, stream.column(), "}"); else if (curPunc == "[") pushContext(state, stream.column(), "]"); else if (curPunc == "(") pushContext(state, stream.column(), ")"); else if (curPunc == "case") ctx.type = "case"; else if (curPunc == "}" && ctx.type == "}") ctx = popContext(state); else if (curPunc == ctx.type) popContext(state); state.startOfLine = false; return style; }, indent: function(state, textAfter) { if (state.tokenize != tokenBase && state.tokenize != null) return 0; var ctx = state.context, firstChar = textAfter && textAfter.charAt(0); if (ctx.type == "case" && /^(?:case|default)\b/.test(textAfter)) { state.context.type = "}"; return ctx.indented; } var closing = firstChar == ctx.type; if (ctx.align) return ctx.column + (closing ? 0 : 1); else return ctx.indented + (closing ? 0 : indentUnit); }, electricChars: "{}):", fold: "brace", blockCommentStart: "/*", blockCommentEnd: "*/", lineComment: "//" }; }); CodeMirror.defineMIME("text/x-go", "go"); }); PK!P.™õ~~Gfile-manager-advanced/application/library/codemirror/mode/go/index.htmlnu„[µü¤ CodeMirror: Go mode

    Go mode

    MIME type: text/x-go

    PK!.ðÐð¶"¶"Dfile-manager-advanced/application/library/codemirror/mode/gas/gas.jsnu„[µü¤// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMode("gas", function(_config, parserConfig) { 'use strict'; // If an architecture is specified, its initialization function may // populate this array with custom parsing functions which will be // tried in the event that the standard functions do not find a match. var custom = []; // The symbol used to start a line comment changes based on the target // architecture. // If no architecture is pased in "parserConfig" then only multiline // comments will have syntax support. var lineCommentStartSymbol = ""; // These directives are architecture independent. // Machine specific directives should go in their respective // architecture initialization function. // Reference: // http://sourceware.org/binutils/docs/as/Pseudo-Ops.html#Pseudo-Ops var directives = { ".abort" : "builtin", ".align" : "builtin", ".altmacro" : "builtin", ".ascii" : "builtin", ".asciz" : "builtin", ".balign" : "builtin", ".balignw" : "builtin", ".balignl" : "builtin", ".bundle_align_mode" : "builtin", ".bundle_lock" : "builtin", ".bundle_unlock" : "builtin", ".byte" : "builtin", ".cfi_startproc" : "builtin", ".comm" : "builtin", ".data" : "builtin", ".def" : "builtin", ".desc" : "builtin", ".dim" : "builtin", ".double" : "builtin", ".eject" : "builtin", ".else" : "builtin", ".elseif" : "builtin", ".end" : "builtin", ".endef" : "builtin", ".endfunc" : "builtin", ".endif" : "builtin", ".equ" : "builtin", ".equiv" : "builtin", ".eqv" : "builtin", ".err" : "builtin", ".error" : "builtin", ".exitm" : "builtin", ".extern" : "builtin", ".fail" : "builtin", ".file" : "builtin", ".fill" : "builtin", ".float" : "builtin", ".func" : "builtin", ".global" : "builtin", ".gnu_attribute" : "builtin", ".hidden" : "builtin", ".hword" : "builtin", ".ident" : "builtin", ".if" : "builtin", ".incbin" : "builtin", ".include" : "builtin", ".int" : "builtin", ".internal" : "builtin", ".irp" : "builtin", ".irpc" : "builtin", ".lcomm" : "builtin", ".lflags" : "builtin", ".line" : "builtin", ".linkonce" : "builtin", ".list" : "builtin", ".ln" : "builtin", ".loc" : "builtin", ".loc_mark_labels" : "builtin", ".local" : "builtin", ".long" : "builtin", ".macro" : "builtin", ".mri" : "builtin", ".noaltmacro" : "builtin", ".nolist" : "builtin", ".octa" : "builtin", ".offset" : "builtin", ".org" : "builtin", ".p2align" : "builtin", ".popsection" : "builtin", ".previous" : "builtin", ".print" : "builtin", ".protected" : "builtin", ".psize" : "builtin", ".purgem" : "builtin", ".pushsection" : "builtin", ".quad" : "builtin", ".reloc" : "builtin", ".rept" : "builtin", ".sbttl" : "builtin", ".scl" : "builtin", ".section" : "builtin", ".set" : "builtin", ".short" : "builtin", ".single" : "builtin", ".size" : "builtin", ".skip" : "builtin", ".sleb128" : "builtin", ".space" : "builtin", ".stab" : "builtin", ".string" : "builtin", ".struct" : "builtin", ".subsection" : "builtin", ".symver" : "builtin", ".tag" : "builtin", ".text" : "builtin", ".title" : "builtin", ".type" : "builtin", ".uleb128" : "builtin", ".val" : "builtin", ".version" : "builtin", ".vtable_entry" : "builtin", ".vtable_inherit" : "builtin", ".warning" : "builtin", ".weak" : "builtin", ".weakref" : "builtin", ".word" : "builtin" }; var registers = {}; function x86(_parserConfig) { lineCommentStartSymbol = "#"; registers.ax = "variable"; registers.eax = "variable-2"; registers.rax = "variable-3"; registers.bx = "variable"; registers.ebx = "variable-2"; registers.rbx = "variable-3"; registers.cx = "variable"; registers.ecx = "variable-2"; registers.rcx = "variable-3"; registers.dx = "variable"; registers.edx = "variable-2"; registers.rdx = "variable-3"; registers.si = "variable"; registers.esi = "variable-2"; registers.rsi = "variable-3"; registers.di = "variable"; registers.edi = "variable-2"; registers.rdi = "variable-3"; registers.sp = "variable"; registers.esp = "variable-2"; registers.rsp = "variable-3"; registers.bp = "variable"; registers.ebp = "variable-2"; registers.rbp = "variable-3"; registers.ip = "variable"; registers.eip = "variable-2"; registers.rip = "variable-3"; registers.cs = "keyword"; registers.ds = "keyword"; registers.ss = "keyword"; registers.es = "keyword"; registers.fs = "keyword"; registers.gs = "keyword"; } function armv6(_parserConfig) { // Reference: // http://infocenter.arm.com/help/topic/com.arm.doc.qrc0001l/QRC0001_UAL.pdf // http://infocenter.arm.com/help/topic/com.arm.doc.ddi0301h/DDI0301H_arm1176jzfs_r0p7_trm.pdf lineCommentStartSymbol = "@"; directives.syntax = "builtin"; registers.r0 = "variable"; registers.r1 = "variable"; registers.r2 = "variable"; registers.r3 = "variable"; registers.r4 = "variable"; registers.r5 = "variable"; registers.r6 = "variable"; registers.r7 = "variable"; registers.r8 = "variable"; registers.r9 = "variable"; registers.r10 = "variable"; registers.r11 = "variable"; registers.r12 = "variable"; registers.sp = "variable-2"; registers.lr = "variable-2"; registers.pc = "variable-2"; registers.r13 = registers.sp; registers.r14 = registers.lr; registers.r15 = registers.pc; custom.push(function(ch, stream) { if (ch === '#') { stream.eatWhile(/\w/); return "number"; } }); } var arch = (parserConfig.architecture || "x86").toLowerCase(); if (arch === "x86") { x86(parserConfig); } else if (arch === "arm" || arch === "armv6") { armv6(parserConfig); } function nextUntilUnescaped(stream, end) { var escaped = false, next; while ((next = stream.next()) != null) { if (next === end && !escaped) { return false; } escaped = !escaped && next === "\\"; } return escaped; } function clikeComment(stream, state) { var maybeEnd = false, ch; while ((ch = stream.next()) != null) { if (ch === "/" && maybeEnd) { state.tokenize = null; break; } maybeEnd = (ch === "*"); } return "comment"; } return { startState: function() { return { tokenize: null }; }, token: function(stream, state) { if (state.tokenize) { return state.tokenize(stream, state); } if (stream.eatSpace()) { return null; } var style, cur, ch = stream.next(); if (ch === "/") { if (stream.eat("*")) { state.tokenize = clikeComment; return clikeComment(stream, state); } } if (ch === lineCommentStartSymbol) { stream.skipToEnd(); return "comment"; } if (ch === '"') { nextUntilUnescaped(stream, '"'); return "string"; } if (ch === '.') { stream.eatWhile(/\w/); cur = stream.current().toLowerCase(); style = directives[cur]; return style || null; } if (ch === '=') { stream.eatWhile(/\w/); return "tag"; } if (ch === '{') { return "braket"; } if (ch === '}') { return "braket"; } if (/\d/.test(ch)) { if (ch === "0" && stream.eat("x")) { stream.eatWhile(/[0-9a-fA-F]/); return "number"; } stream.eatWhile(/\d/); return "number"; } if (/\w/.test(ch)) { stream.eatWhile(/\w/); if (stream.eat(":")) { return 'tag'; } cur = stream.current().toLowerCase(); style = registers[cur]; return style || null; } for (var i = 0; i < custom.length; i++) { style = custom[i](ch, stream, state); if (style) { return style; } } }, lineComment: lineCommentStartSymbol, blockCommentStart: "/*", blockCommentEnd: "*/" }; }); }); PK!aéÔ#00Hfile-manager-advanced/application/library/codemirror/mode/gas/index.htmlnu„[µü¤ CodeMirror: Gas mode

    Gas mode

    Handles AT&T assembler syntax (more specifically this handles the GNU Assembler (gas) syntax.) It takes a single optional configuration parameter: architecture, which can be one of "ARM", "ARMv6" or "x86". Including the parameter adds syntax for the registers and special directives for the supplied architecture.

    MIME types defined: text/x-gas

    PK!TY)OqqJfile-manager-advanced/application/library/codemirror/mode/troff/index.htmlnu„[µü¤ CodeMirror: troff mode

    troff

    MIME types defined: troff.

    PK!ù£ ÿX X Hfile-manager-advanced/application/library/codemirror/mode/troff/troff.jsnu„[µü¤// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) define(["../../lib/codemirror"], mod); else mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMode('troff', function() { var words = {}; function tokenBase(stream) { if (stream.eatSpace()) return null; var sol = stream.sol(); var ch = stream.next(); if (ch === '\\') { if (stream.match('fB') || stream.match('fR') || stream.match('fI') || stream.match('u') || stream.match('d') || stream.match('%') || stream.match('&')) { return 'string'; } if (stream.match('m[')) { stream.skipTo(']'); stream.next(); return 'string'; } if (stream.match('s+') || stream.match('s-')) { stream.eatWhile(/[\d-]/); return 'string'; } if (stream.match('\(') || stream.match('*\(')) { stream.eatWhile(/[\w-]/); return 'string'; } return 'string'; } if (sol && (ch === '.' || ch === '\'')) { if (stream.eat('\\') && stream.eat('\"')) { stream.skipToEnd(); return 'comment'; } } if (sol && ch === '.') { if (stream.match('B ') || stream.match('I ') || stream.match('R ')) { return 'attribute'; } if (stream.match('TH ') || stream.match('SH ') || stream.match('SS ') || stream.match('HP ')) { stream.skipToEnd(); return 'quote'; } if ((stream.match(/[A-Z]/) && stream.match(/[A-Z]/)) || (stream.match(/[a-z]/) && stream.match(/[a-z]/))) { return 'attribute'; } } stream.eatWhile(/[\w-]/); var cur = stream.current(); return words.hasOwnProperty(cur) ? words[cur] : null; } function tokenize(stream, state) { return (state.tokens[0] || tokenBase) (stream, state); }; return { startState: function() {return {tokens:[]};}, token: function(stream, state) { return tokenize(stream, state); } }; }); CodeMirror.defineMIME('text/troff', 'troff'); CodeMirror.defineMIME('text/x-troff', 'troff'); CodeMirror.defineMIME('application/x-troff', 'troff'); }); PK!°Œ >®&®&Hfile-manager-advanced/application/library/codemirror/mode/dylan/dylan.jsnu„[µü¤// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMode("dylan", function(_config) { // Words var words = { // Words that introduce unnamed definitions like "define interface" unnamedDefinition: ["interface"], // Words that introduce simple named definitions like "define library" namedDefinition: ["module", "library", "macro", "C-struct", "C-union", "C-function", "C-callable-wrapper" ], // Words that introduce type definitions like "define class". // These are also parameterized like "define method" and are // appended to otherParameterizedDefinitionWords typeParameterizedDefinition: ["class", "C-subtype", "C-mapped-subtype"], // Words that introduce trickier definitions like "define method". // These require special definitions to be added to startExpressions otherParameterizedDefinition: ["method", "function", "C-variable", "C-address" ], // Words that introduce module constant definitions. // These must also be simple definitions and are // appended to otherSimpleDefinitionWords constantSimpleDefinition: ["constant"], // Words that introduce module variable definitions. // These must also be simple definitions and are // appended to otherSimpleDefinitionWords variableSimpleDefinition: ["variable"], // Other words that introduce simple definitions // (without implicit bodies). otherSimpleDefinition: ["generic", "domain", "C-pointer-type", "table" ], // Words that begin statements with implicit bodies. statement: ["if", "block", "begin", "method", "case", "for", "select", "when", "unless", "until", "while", "iterate", "profiling", "dynamic-bind" ], // Patterns that act as separators in compound statements. // This may include any general pattern that must be indented // specially. separator: ["finally", "exception", "cleanup", "else", "elseif", "afterwards" ], // Keywords that do not require special indentation handling, // but which should be highlighted other: ["above", "below", "by", "from", "handler", "in", "instance", "let", "local", "otherwise", "slot", "subclass", "then", "to", "keyed-by", "virtual" ], // Condition signaling function calls signalingCalls: ["signal", "error", "cerror", "break", "check-type", "abort" ] }; words["otherDefinition"] = words["unnamedDefinition"] .concat(words["namedDefinition"]) .concat(words["otherParameterizedDefinition"]); words["definition"] = words["typeParameterizedDefinition"] .concat(words["otherDefinition"]); words["parameterizedDefinition"] = words["typeParameterizedDefinition"] .concat(words["otherParameterizedDefinition"]); words["simpleDefinition"] = words["constantSimpleDefinition"] .concat(words["variableSimpleDefinition"]) .concat(words["otherSimpleDefinition"]); words["keyword"] = words["statement"] .concat(words["separator"]) .concat(words["other"]); // Patterns var symbolPattern = "[-_a-zA-Z?!*@<>$%]+"; var symbol = new RegExp("^" + symbolPattern); var patterns = { // Symbols with special syntax symbolKeyword: symbolPattern + ":", symbolClass: "<" + symbolPattern + ">", symbolGlobal: "\\*" + symbolPattern + "\\*", symbolConstant: "\\$" + symbolPattern }; var patternStyles = { symbolKeyword: "atom", symbolClass: "tag", symbolGlobal: "variable-2", symbolConstant: "variable-3" }; // Compile all patterns to regular expressions for (var patternName in patterns) if (patterns.hasOwnProperty(patternName)) patterns[patternName] = new RegExp("^" + patterns[patternName]); // Names beginning "with-" and "without-" are commonly // used as statement macro patterns["keyword"] = [/^with(?:out)?-[-_a-zA-Z?!*@<>$%]+/]; var styles = {}; styles["keyword"] = "keyword"; styles["definition"] = "def"; styles["simpleDefinition"] = "def"; styles["signalingCalls"] = "builtin"; // protected words lookup table var wordLookup = {}; var styleLookup = {}; [ "keyword", "definition", "simpleDefinition", "signalingCalls" ].forEach(function(type) { words[type].forEach(function(word) { wordLookup[word] = type; styleLookup[word] = styles[type]; }); }); function chain(stream, state, f) { state.tokenize = f; return f(stream, state); } function tokenBase(stream, state) { // String var ch = stream.peek(); if (ch == "'" || ch == '"') { stream.next(); return chain(stream, state, tokenString(ch, "string")); } // Comment else if (ch == "/") { stream.next(); if (stream.eat("*")) { return chain(stream, state, tokenComment); } else if (stream.eat("/")) { stream.skipToEnd(); return "comment"; } stream.backUp(1); } // Decimal else if (/[+\-\d\.]/.test(ch)) { if (stream.match(/^[+-]?[0-9]*\.[0-9]*([esdx][+-]?[0-9]+)?/i) || stream.match(/^[+-]?[0-9]+([esdx][+-]?[0-9]+)/i) || stream.match(/^[+-]?\d+/)) { return "number"; } } // Hash else if (ch == "#") { stream.next(); // Symbol with string syntax ch = stream.peek(); if (ch == '"') { stream.next(); return chain(stream, state, tokenString('"', "string")); } // Binary number else if (ch == "b") { stream.next(); stream.eatWhile(/[01]/); return "number"; } // Hex number else if (ch == "x") { stream.next(); stream.eatWhile(/[\da-f]/i); return "number"; } // Octal number else if (ch == "o") { stream.next(); stream.eatWhile(/[0-7]/); return "number"; } // Token concatenation in macros else if (ch == '#') { stream.next(); return "punctuation"; } // Sequence literals else if ((ch == '[') || (ch == '(')) { stream.next(); return "bracket"; // Hash symbol } else if (stream.match(/f|t|all-keys|include|key|next|rest/i)) { return "atom"; } else { stream.eatWhile(/[-a-zA-Z]/); return "error"; } } else if (ch == "~") { stream.next(); ch = stream.peek(); if (ch == "=") { stream.next(); ch = stream.peek(); if (ch == "=") { stream.next(); return "operator"; } return "operator"; } return "operator"; } else if (ch == ":") { stream.next(); ch = stream.peek(); if (ch == "=") { stream.next(); return "operator"; } else if (ch == ":") { stream.next(); return "punctuation"; } } else if ("[](){}".indexOf(ch) != -1) { stream.next(); return "bracket"; } else if (".,".indexOf(ch) != -1) { stream.next(); return "punctuation"; } else if (stream.match("end")) { return "keyword"; } for (var name in patterns) { if (patterns.hasOwnProperty(name)) { var pattern = patterns[name]; if ((pattern instanceof Array && pattern.some(function(p) { return stream.match(p); })) || stream.match(pattern)) return patternStyles[name]; } } if (/[+\-*\/^=<>&|]/.test(ch)) { stream.next(); return "operator"; } if (stream.match("define")) { return "def"; } else { stream.eatWhile(/[\w\-]/); // Keyword if (wordLookup[stream.current()]) { return styleLookup[stream.current()]; } else if (stream.current().match(symbol)) { return "variable"; } else { stream.next(); return "variable-2"; } } } function tokenComment(stream, state) { var maybeEnd = false, maybeNested = false, nestedCount = 0, ch; while ((ch = stream.next())) { if (ch == "/" && maybeEnd) { if (nestedCount > 0) { nestedCount--; } else { state.tokenize = tokenBase; break; } } else if (ch == "*" && maybeNested) { nestedCount++; } maybeEnd = (ch == "*"); maybeNested = (ch == "/"); } return "comment"; } function tokenString(quote, style) { return function(stream, state) { var escaped = false, next, end = false; while ((next = stream.next()) != null) { if (next == quote && !escaped) { end = true; break; } escaped = !escaped && next == "\\"; } if (end || !escaped) { state.tokenize = tokenBase; } return style; }; } // Interface return { startState: function() { return { tokenize: tokenBase, currentIndent: 0 }; }, token: function(stream, state) { if (stream.eatSpace()) return null; var style = state.tokenize(stream, state); return style; }, blockCommentStart: "/*", blockCommentEnd: "*/" }; }); CodeMirror.defineMIME("text/x-dylan", "dylan"); }); PK!I�œè2è2Jfile-manager-advanced/application/library/codemirror/mode/dylan/index.htmlnu„[µü¤ CodeMirror: Dylan mode

    Dylan mode

    MIME types defined: text/x-dylan.

    PK!eÎÛ² ² Gfile-manager-advanced/application/library/codemirror/mode/dylan/test.jsnu„[µü¤// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function() { var mode = CodeMirror.getMode({indentUnit: 2}, "dylan"); function MT(name) { test.mode(name, mode, Array.prototype.slice.call(arguments, 1)); } MT('comments', '[comment // This is a line comment]', '[comment /* This is a block comment */]', '[comment /* This is a multi]', '[comment line comment]', '[comment */]', '[comment /* And this is a /*]', '[comment /* nested */ comment */]'); MT('unary_operators', '[operator -][variable a]', '[operator -] [variable a]', '[operator ~][variable a]', '[operator ~] [variable a]'); MT('binary_operators', '[variable a] [operator +] [variable b]', '[variable a] [operator -] [variable b]', '[variable a] [operator *] [variable b]', '[variable a] [operator /] [variable b]', '[variable a] [operator ^] [variable b]', '[variable a] [operator =] [variable b]', '[variable a] [operator ==] [variable b]', '[variable a] [operator ~=] [variable b]', '[variable a] [operator ~==] [variable b]', '[variable a] [operator <] [variable b]', '[variable a] [operator <=] [variable b]', '[variable a] [operator >] [variable b]', '[variable a] [operator >=] [variable b]', '[variable a] [operator &] [variable b]', '[variable a] [operator |] [variable b]', '[variable a] [operator :=] [variable b]'); MT('integers', '[number 1]', '[number 123]', '[number -123]', '[number +456]', '[number #b010]', '[number #o073]', '[number #xabcDEF123]'); MT('floats', '[number .3]', '[number -1.]', '[number -2.335]', '[number +3.78d1]', '[number 3.78s-1]', '[number -3.32e+5]'); MT('characters_and_strings', "[string 'a']", "[string '\\\\'']", '[string ""]', '[string "a"]', '[string "abc def"]', '[string "More escaped characters: \\\\\\\\ \\\\a \\\\b \\\\e \\\\f \\\\n \\\\r \\\\t \\\\0 ..."]'); MT('brackets', '[bracket #[[]]]', '[bracket #()]', '[bracket #(][number 1][bracket )]', '[bracket [[][number 1][punctuation ,] [number 3][bracket ]]]', '[bracket ()]', '[bracket {}]', '[keyword if] [bracket (][variable foo][bracket )]', '[bracket (][number 1][bracket )]', '[bracket [[][number 1][bracket ]]]'); MT('hash_words', '[punctuation ##]', '[atom #f]', '[atom #F]', '[atom #t]', '[atom #T]', '[atom #all-keys]', '[atom #include]', '[atom #key]', '[atom #next]', '[atom #rest]', '[string #"foo"]', '[error #invalid]'); })(); PK!" NŽ3Ž3Kfile-manager-advanced/application/library/codemirror/mode/eiffel/index.htmlnu„[µü¤ CodeMirror: Eiffel mode

    Eiffel mode

    MIME types defined: text/x-eiffel.

    Created by YNH.

    PK!4¹÷  Jfile-manager-advanced/application/library/codemirror/mode/eiffel/eiffel.jsnu„[µü¤// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMode("eiffel", function() { function wordObj(words) { var o = {}; for (var i = 0, e = words.length; i < e; ++i) o[words[i]] = true; return o; } var keywords = wordObj([ 'note', 'across', 'when', 'variant', 'until', 'unique', 'undefine', 'then', 'strip', 'select', 'retry', 'rescue', 'require', 'rename', 'reference', 'redefine', 'prefix', 'once', 'old', 'obsolete', 'loop', 'local', 'like', 'is', 'inspect', 'infix', 'include', 'if', 'frozen', 'from', 'external', 'export', 'ensure', 'end', 'elseif', 'else', 'do', 'creation', 'create', 'check', 'alias', 'agent', 'separate', 'invariant', 'inherit', 'indexing', 'feature', 'expanded', 'deferred', 'class', 'Void', 'True', 'Result', 'Precursor', 'False', 'Current', 'create', 'attached', 'detachable', 'as', 'and', 'implies', 'not', 'or' ]); var operators = wordObj([":=", "and then","and", "or","<<",">>"]); function chain(newtok, stream, state) { state.tokenize.push(newtok); return newtok(stream, state); } function tokenBase(stream, state) { if (stream.eatSpace()) return null; var ch = stream.next(); if (ch == '"'||ch == "'") { return chain(readQuoted(ch, "string"), stream, state); } else if (ch == "-"&&stream.eat("-")) { stream.skipToEnd(); return "comment"; } else if (ch == ":"&&stream.eat("=")) { return "operator"; } else if (/[0-9]/.test(ch)) { stream.eatWhile(/[xXbBCc0-9\.]/); stream.eat(/[\?\!]/); return "ident"; } else if (/[a-zA-Z_0-9]/.test(ch)) { stream.eatWhile(/[a-zA-Z_0-9]/); stream.eat(/[\?\!]/); return "ident"; } else if (/[=+\-\/*^%<>~]/.test(ch)) { stream.eatWhile(/[=+\-\/*^%<>~]/); return "operator"; } else { return null; } } function readQuoted(quote, style, unescaped) { return function(stream, state) { var escaped = false, ch; while ((ch = stream.next()) != null) { if (ch == quote && (unescaped || !escaped)) { state.tokenize.pop(); break; } escaped = !escaped && ch == "%"; } return style; }; } return { startState: function() { return {tokenize: [tokenBase]}; }, token: function(stream, state) { var style = state.tokenize[state.tokenize.length-1](stream, state); if (style == "ident") { var word = stream.current(); style = keywords.propertyIsEnumerable(stream.current()) ? "keyword" : operators.propertyIsEnumerable(stream.current()) ? "operator" : /^[A-Z][A-Z_0-9]*$/g.test(word) ? "tag" : /^0[bB][0-1]+$/g.test(word) ? "number" : /^0[cC][0-7]+$/g.test(word) ? "number" : /^0[xX][a-fA-F0-9]+$/g.test(word) ? "number" : /^([0-9]+\.[0-9]*)|([0-9]*\.[0-9]+)$/g.test(word) ? "number" : /^[0-9]+$/g.test(word) ? "number" : "variable"; } return style; }, lineComment: "--" }; }); CodeMirror.defineMIME("text/x-eiffel", "eiffel"); }); PK! 'C>!>!Rfile-manager-advanced/application/library/codemirror/mode/tiddlywiki/tiddlywiki.jsnu„[µü¤// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE /*** |''Name''|tiddlywiki.js| |''Description''|Enables TiddlyWikiy syntax highlighting using CodeMirror| |''Author''|PMario| |''Version''|0.1.7| |''Status''|''stable''| |''Source''|[[GitHub|https://github.com/pmario/CodeMirror2/blob/tw-syntax/mode/tiddlywiki]]| |''Documentation''|http://codemirror.tiddlyspace.com/| |''License''|[[MIT License|http://www.opensource.org/licenses/mit-license.php]]| |''CoreVersion''|2.5.0| |''Requires''|codemirror.js| |''Keywords''|syntax highlighting color code mirror codemirror| ! Info CoreVersion parameter is needed for TiddlyWiki only! ***/ (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMode("tiddlywiki", function () { // Tokenizer var textwords = {}; var keywords = { "allTags": true, "closeAll": true, "list": true, "newJournal": true, "newTiddler": true, "permaview": true, "saveChanges": true, "search": true, "slider": true, "tabs": true, "tag": true, "tagging": true, "tags": true, "tiddler": true, "timeline": true, "today": true, "version": true, "option": true, "with": true, "filter": true }; var isSpaceName = /[\w_\-]/i, reHR = /^\-\-\-\-+$/, //
    reWikiCommentStart = /^\/\*\*\*$/, // /*** reWikiCommentStop = /^\*\*\*\/$/, // ***/ reBlockQuote = /^<<<$/, reJsCodeStart = /^\/\/\{\{\{$/, // //{{{ js block start reJsCodeStop = /^\/\/\}\}\}$/, // //}}} js stop reXmlCodeStart = /^$/, // xml block start reXmlCodeStop = /^$/, // xml stop reCodeBlockStart = /^\{\{\{$/, // {{{ TW text div block start reCodeBlockStop = /^\}\}\}$/, // }}} TW text stop reUntilCodeStop = /.*?\}\}\}/; function chain(stream, state, f) { state.tokenize = f; return f(stream, state); } function tokenBase(stream, state) { var sol = stream.sol(), ch = stream.peek(); state.block = false; // indicates the start of a code block. // check start of blocks if (sol && /[<\/\*{}\-]/.test(ch)) { if (stream.match(reCodeBlockStart)) { state.block = true; return chain(stream, state, twTokenCode); } if (stream.match(reBlockQuote)) return 'quote'; if (stream.match(reWikiCommentStart) || stream.match(reWikiCommentStop)) return 'comment'; if (stream.match(reJsCodeStart) || stream.match(reJsCodeStop) || stream.match(reXmlCodeStart) || stream.match(reXmlCodeStop)) return 'comment'; if (stream.match(reHR)) return 'hr'; } stream.next(); if (sol && /[\/\*!#;:>|]/.test(ch)) { if (ch == "!") { // tw header stream.skipToEnd(); return "header"; } if (ch == "*") { // tw list stream.eatWhile('*'); return "comment"; } if (ch == "#") { // tw numbered list stream.eatWhile('#'); return "comment"; } if (ch == ";") { // definition list, term stream.eatWhile(';'); return "comment"; } if (ch == ":") { // definition list, description stream.eatWhile(':'); return "comment"; } if (ch == ">") { // single line quote stream.eatWhile(">"); return "quote"; } if (ch == '|') return 'header'; } if (ch == '{' && stream.match(/\{\{/)) return chain(stream, state, twTokenCode); // rudimentary html:// file:// link matching. TW knows much more ... if (/[hf]/i.test(ch) && /[ti]/i.test(stream.peek()) && stream.match(/\b(ttps?|tp|ile):\/\/[\-A-Z0-9+&@#\/%?=~_|$!:,.;]*[A-Z0-9+&@#\/%=~_|$]/i)) return "link"; // just a little string indicator, don't want to have the whole string covered if (ch == '"') return 'string'; if (ch == '~') // _no_ CamelCase indicator should be bold return 'brace'; if (/[\[\]]/.test(ch) && stream.match(ch)) // check for [[..]] return 'brace'; if (ch == "@") { // check for space link. TODO fix @@...@@ highlighting stream.eatWhile(isSpaceName); return "link"; } if (/\d/.test(ch)) { // numbers stream.eatWhile(/\d/); return "number"; } if (ch == "/") { // tw invisible comment if (stream.eat("%")) { return chain(stream, state, twTokenComment); } else if (stream.eat("/")) { // return chain(stream, state, twTokenEm); } } if (ch == "_" && stream.eat("_")) // tw underline return chain(stream, state, twTokenUnderline); // strikethrough and mdash handling if (ch == "-" && stream.eat("-")) { // if strikethrough looks ugly, change CSS. if (stream.peek() != ' ') return chain(stream, state, twTokenStrike); // mdash if (stream.peek() == ' ') return 'brace'; } if (ch == "'" && stream.eat("'")) // tw bold return chain(stream, state, twTokenStrong); if (ch == "<" && stream.eat("<")) // tw macro return chain(stream, state, twTokenMacro); // core macro handling stream.eatWhile(/[\w\$_]/); return textwords.propertyIsEnumerable(stream.current()) ? "keyword" : null } // tw invisible comment function twTokenComment(stream, state) { var maybeEnd = false, ch; while (ch = stream.next()) { if (ch == "/" && maybeEnd) { state.tokenize = tokenBase; break; } maybeEnd = (ch == "%"); } return "comment"; } // tw strong / bold function twTokenStrong(stream, state) { var maybeEnd = false, ch; while (ch = stream.next()) { if (ch == "'" && maybeEnd) { state.tokenize = tokenBase; break; } maybeEnd = (ch == "'"); } return "strong"; } // tw code function twTokenCode(stream, state) { var sb = state.block; if (sb && stream.current()) { return "comment"; } if (!sb && stream.match(reUntilCodeStop)) { state.tokenize = tokenBase; return "comment"; } if (sb && stream.sol() && stream.match(reCodeBlockStop)) { state.tokenize = tokenBase; return "comment"; } stream.next(); return "comment"; } // tw em / italic function twTokenEm(stream, state) { var maybeEnd = false, ch; while (ch = stream.next()) { if (ch == "/" && maybeEnd) { state.tokenize = tokenBase; break; } maybeEnd = (ch == "/"); } return "em"; } // tw underlined text function twTokenUnderline(stream, state) { var maybeEnd = false, ch; while (ch = stream.next()) { if (ch == "_" && maybeEnd) { state.tokenize = tokenBase; break; } maybeEnd = (ch == "_"); } return "underlined"; } // tw strike through text looks ugly // change CSS if needed function twTokenStrike(stream, state) { var maybeEnd = false, ch; while (ch = stream.next()) { if (ch == "-" && maybeEnd) { state.tokenize = tokenBase; break; } maybeEnd = (ch == "-"); } return "strikethrough"; } // macro function twTokenMacro(stream, state) { if (stream.current() == '<<') { return 'macro'; } var ch = stream.next(); if (!ch) { state.tokenize = tokenBase; return null; } if (ch == ">") { if (stream.peek() == '>') { stream.next(); state.tokenize = tokenBase; return "macro"; } } stream.eatWhile(/[\w\$_]/); return keywords.propertyIsEnumerable(stream.current()) ? "keyword" : null } // Interface return { startState: function () { return {tokenize: tokenBase}; }, token: function (stream, state) { if (stream.eatSpace()) return null; var style = state.tokenize(stream, state); return style; } }; }); CodeMirror.defineMIME("text/x-tiddlywiki", "tiddlywiki"); }); PK!¦FããOfile-manager-advanced/application/library/codemirror/mode/tiddlywiki/index.htmlnu„[µü¤ CodeMirror: TiddlyWiki mode

    TiddlyWiki mode

    TiddlyWiki mode supports a single configuration.

    MIME types defined: text/x-tiddlywiki.

    PK!jÃíÜÜSfile-manager-advanced/application/library/codemirror/mode/tiddlywiki/tiddlywiki.cssnu„[µü¤span.cm-underlined { text-decoration: underline; } span.cm-strikethrough { text-decoration: line-through; } span.cm-brace { color: #170; font-weight: bold; } span.cm-table { color: blue; font-weight: bold; } PK!Y_xF( ( Hfile-manager-advanced/application/library/codemirror/mode/cmake/cmake.jsnu„[µü¤// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) define(["../../lib/codemirror"], mod); else mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMode("cmake", function () { var variable_regex = /({)?[a-zA-Z0-9_]+(})?/; function tokenString(stream, state) { var current, prev, found_var = false; while (!stream.eol() && (current = stream.next()) != state.pending) { if (current === '$' && prev != '\\' && state.pending == '"') { found_var = true; break; } prev = current; } if (found_var) { stream.backUp(1); } if (current == state.pending) { state.continueString = false; } else { state.continueString = true; } return "string"; } function tokenize(stream, state) { var ch = stream.next(); // Have we found a variable? if (ch === '$') { if (stream.match(variable_regex)) { return 'variable-2'; } return 'variable'; } // Should we still be looking for the end of a string? if (state.continueString) { // If so, go through the loop again stream.backUp(1); return tokenString(stream, state); } // Do we just have a function on our hands? // In 'cmake_minimum_required (VERSION 2.8.8)', 'cmake_minimum_required' is matched if (stream.match(/(\s+)?\w+\(/) || stream.match(/(\s+)?\w+\ \(/)) { stream.backUp(1); return 'def'; } if (ch == "#") { stream.skipToEnd(); return "comment"; } // Have we found a string? if (ch == "'" || ch == '"') { // Store the type (single or double) state.pending = ch; // Perform the looping function to find the end return tokenString(stream, state); } if (ch == '(' || ch == ')') { return 'bracket'; } if (ch.match(/[0-9]/)) { return 'number'; } stream.eatWhile(/[\w-]/); return null; } return { startState: function () { var state = {}; state.inDefinition = false; state.inInclude = false; state.continueString = false; state.pending = false; return state; }, token: function (stream, state) { if (stream.eatSpace()) return null; return tokenize(stream, state); } }; }); CodeMirror.defineMIME("text/x-cmake", "cmake"); }); PK!€b~Ü88Jfile-manager-advanced/application/library/codemirror/mode/cmake/index.htmlnu„[µü¤ CodeMirror: CMake mode

    CMake mode

    MIME types defined: text/x-cmake.

    PK!âæÊ½*!*!Ffile-manager-advanced/application/library/codemirror/mode/tiki/tiki.jsnu„[µü¤// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMode('tiki', function(config) { function inBlock(style, terminator, returnTokenizer) { return function(stream, state) { while (!stream.eol()) { if (stream.match(terminator)) { state.tokenize = inText; break; } stream.next(); } if (returnTokenizer) state.tokenize = returnTokenizer; return style; }; } function inLine(style) { return function(stream, state) { while(!stream.eol()) { stream.next(); } state.tokenize = inText; return style; }; } function inText(stream, state) { function chain(parser) { state.tokenize = parser; return parser(stream, state); } var sol = stream.sol(); var ch = stream.next(); //non start of line switch (ch) { //switch is generally much faster than if, so it is used here case "{": //plugin stream.eat("/"); stream.eatSpace(); stream.eatWhile(/[^\s\u00a0=\"\'\/?(}]/); state.tokenize = inPlugin; return "tag"; case "_": //bold if (stream.eat("_")) return chain(inBlock("strong", "__", inText)); break; case "'": //italics if (stream.eat("'")) return chain(inBlock("em", "''", inText)); break; case "(":// Wiki Link if (stream.eat("(")) return chain(inBlock("variable-2", "))", inText)); break; case "[":// Weblink return chain(inBlock("variable-3", "]", inText)); break; case "|": //table if (stream.eat("|")) return chain(inBlock("comment", "||")); break; case "-": if (stream.eat("=")) {//titleBar return chain(inBlock("header string", "=-", inText)); } else if (stream.eat("-")) {//deleted return chain(inBlock("error tw-deleted", "--", inText)); } break; case "=": //underline if (stream.match("==")) return chain(inBlock("tw-underline", "===", inText)); break; case ":": if (stream.eat(":")) return chain(inBlock("comment", "::")); break; case "^": //box return chain(inBlock("tw-box", "^")); break; case "~": //np if (stream.match("np~")) return chain(inBlock("meta", "~/np~")); break; } //start of line types if (sol) { switch (ch) { case "!": //header at start of line if (stream.match('!!!!!')) { return chain(inLine("header string")); } else if (stream.match('!!!!')) { return chain(inLine("header string")); } else if (stream.match('!!!')) { return chain(inLine("header string")); } else if (stream.match('!!')) { return chain(inLine("header string")); } else { return chain(inLine("header string")); } break; case "*": //unordered list line item, or
  • at start of line case "#": //ordered list line item, or
  • at start of line case "+": //ordered list line item, or
  • at start of line return chain(inLine("tw-listitem bracket")); break; } } //stream.eatWhile(/[&{]/); was eating up plugins, turned off to act less like html and more like tiki return null; } var indentUnit = config.indentUnit; // Return variables for tokenizers var pluginName, type; function inPlugin(stream, state) { var ch = stream.next(); var peek = stream.peek(); if (ch == "}") { state.tokenize = inText; //type = ch == ")" ? "endPlugin" : "selfclosePlugin"; inPlugin return "tag"; } else if (ch == "(" || ch == ")") { return "bracket"; } else if (ch == "=") { type = "equals"; if (peek == ">") { ch = stream.next(); peek = stream.peek(); } //here we detect values directly after equal character with no quotes if (!/[\'\"]/.test(peek)) { state.tokenize = inAttributeNoQuote(); } //end detect values return "operator"; } else if (/[\'\"]/.test(ch)) { state.tokenize = inAttribute(ch); return state.tokenize(stream, state); } else { stream.eatWhile(/[^\s\u00a0=\"\'\/?]/); return "keyword"; } } function inAttribute(quote) { return function(stream, state) { while (!stream.eol()) { if (stream.next() == quote) { state.tokenize = inPlugin; break; } } return "string"; }; } function inAttributeNoQuote() { return function(stream, state) { while (!stream.eol()) { var ch = stream.next(); var peek = stream.peek(); if (ch == " " || ch == "," || /[ )}]/.test(peek)) { state.tokenize = inPlugin; break; } } return "string"; }; } var curState, setStyle; function pass() { for (var i = arguments.length - 1; i >= 0; i--) curState.cc.push(arguments[i]); } function cont() { pass.apply(null, arguments); return true; } function pushContext(pluginName, startOfLine) { var noIndent = curState.context && curState.context.noIndent; curState.context = { prev: curState.context, pluginName: pluginName, indent: curState.indented, startOfLine: startOfLine, noIndent: noIndent }; } function popContext() { if (curState.context) curState.context = curState.context.prev; } function element(type) { if (type == "openPlugin") {curState.pluginName = pluginName; return cont(attributes, endplugin(curState.startOfLine));} else if (type == "closePlugin") { var err = false; if (curState.context) { err = curState.context.pluginName != pluginName; popContext(); } else { err = true; } if (err) setStyle = "error"; return cont(endcloseplugin(err)); } else if (type == "string") { if (!curState.context || curState.context.name != "!cdata") pushContext("!cdata"); if (curState.tokenize == inText) popContext(); return cont(); } else return cont(); } function endplugin(startOfLine) { return function(type) { if ( type == "selfclosePlugin" || type == "endPlugin" ) return cont(); if (type == "endPlugin") {pushContext(curState.pluginName, startOfLine); return cont();} return cont(); }; } function endcloseplugin(err) { return function(type) { if (err) setStyle = "error"; if (type == "endPlugin") return cont(); return pass(); }; } function attributes(type) { if (type == "keyword") {setStyle = "attribute"; return cont(attributes);} if (type == "equals") return cont(attvalue, attributes); return pass(); } function attvalue(type) { if (type == "keyword") {setStyle = "string"; return cont();} if (type == "string") return cont(attvaluemaybe); return pass(); } function attvaluemaybe(type) { if (type == "string") return cont(attvaluemaybe); else return pass(); } return { startState: function() { return {tokenize: inText, cc: [], indented: 0, startOfLine: true, pluginName: null, context: null}; }, token: function(stream, state) { if (stream.sol()) { state.startOfLine = true; state.indented = stream.indentation(); } if (stream.eatSpace()) return null; setStyle = type = pluginName = null; var style = state.tokenize(stream, state); if ((style || type) && style != "comment") { curState = state; while (true) { var comb = state.cc.pop() || element; if (comb(type || style)) break; } } state.startOfLine = false; return setStyle || style; }, indent: function(state, textAfter) { var context = state.context; if (context && context.noIndent) return 0; if (context && /^{\//.test(textAfter)) context = context.prev; while (context && !context.startOfLine) context = context.prev; if (context) return context.indent + indentUnit; else return 0; }, electricChars: "/" }; }); CodeMirror.defineMIME("text/tiki", "tiki"); }); PK!ô‚o··Gfile-manager-advanced/application/library/codemirror/mode/tiki/tiki.cssnu„[µü¤.cm-tw-syntaxerror { color: #FFF; background-color: #900; } .cm-tw-deleted { text-decoration: line-through; } .cm-tw-header5 { font-weight: bold; } .cm-tw-listitem:first-child { /*Added first child to fix duplicate padding when highlighting*/ padding-left: 10px; } .cm-tw-box { border-top-width: 0px !important; border-style: solid; border-width: 1px; border-color: inherit; } .cm-tw-underline { text-decoration: underline; }PK!ÿ!?âÑÑIfile-manager-advanced/application/library/codemirror/mode/tiki/index.htmlnu„[µü¤ CodeMirror: Tiki wiki mode

    Tiki wiki mode

    PK!®dÙW��Mfile-manager-advanced/application/library/codemirror/mode/protobuf/index.htmlnu„[µü¤ CodeMirror: ProtoBuf mode

    ProtoBuf mode

    MIME types defined: text/x-protobuf.

    PK!%s+~AANfile-manager-advanced/application/library/codemirror/mode/protobuf/protobuf.jsnu„[µü¤// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; function wordRegexp(words) { return new RegExp("^((" + words.join(")|(") + "))\\b", "i"); }; var keywordArray = [ "package", "message", "import", "syntax", "required", "optional", "repeated", "reserved", "default", "extensions", "packed", "bool", "bytes", "double", "enum", "float", "string", "int32", "int64", "uint32", "uint64", "sint32", "sint64", "fixed32", "fixed64", "sfixed32", "sfixed64" ]; var keywords = wordRegexp(keywordArray); CodeMirror.registerHelper("hintWords", "protobuf", keywordArray); var identifiers = new RegExp("^[_A-Za-z\xa1-\uffff][_A-Za-z0-9\xa1-\uffff]*"); function tokenBase(stream) { // whitespaces if (stream.eatSpace()) return null; // Handle one line Comments if (stream.match("//")) { stream.skipToEnd(); return "comment"; } // Handle Number Literals if (stream.match(/^[0-9\.+-]/, false)) { if (stream.match(/^[+-]?0x[0-9a-fA-F]+/)) return "number"; if (stream.match(/^[+-]?\d*\.\d+([EeDd][+-]?\d+)?/)) return "number"; if (stream.match(/^[+-]?\d+([EeDd][+-]?\d+)?/)) return "number"; } // Handle Strings if (stream.match(/^"([^"]|(""))*"/)) { return "string"; } if (stream.match(/^'([^']|(''))*'/)) { return "string"; } // Handle words if (stream.match(keywords)) { return "keyword"; } if (stream.match(identifiers)) { return "variable"; } ; // Handle non-detected items stream.next(); return null; }; CodeMirror.defineMode("protobuf", function() { return {token: tokenBase}; }); CodeMirror.defineMIME("text/x-protobuf", "protobuf"); }); PK!~›3�ííKfile-manager-advanced/application/library/codemirror/mode/sparql/index.htmlnu„[µü¤ CodeMirror: SPARQL mode

    SPARQL mode

    MIME types defined: application/sparql-query.

    PK!Cgl¼¿¿Jfile-manager-advanced/application/library/codemirror/mode/sparql/sparql.jsnu„[µü¤// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMode("sparql", function(config) { var indentUnit = config.indentUnit; var curPunc; function wordRegexp(words) { return new RegExp("^(?:" + words.join("|") + ")$", "i"); } var ops = wordRegexp(["str", "lang", "langmatches", "datatype", "bound", "sameterm", "isiri", "isuri", "iri", "uri", "bnode", "count", "sum", "min", "max", "avg", "sample", "group_concat", "rand", "abs", "ceil", "floor", "round", "concat", "substr", "strlen", "replace", "ucase", "lcase", "encode_for_uri", "contains", "strstarts", "strends", "strbefore", "strafter", "year", "month", "day", "hours", "minutes", "seconds", "timezone", "tz", "now", "uuid", "struuid", "md5", "sha1", "sha256", "sha384", "sha512", "coalesce", "if", "strlang", "strdt", "isnumeric", "regex", "exists", "isblank", "isliteral", "a", "bind"]); var keywords = wordRegexp(["base", "prefix", "select", "distinct", "reduced", "construct", "describe", "ask", "from", "named", "where", "order", "limit", "offset", "filter", "optional", "graph", "by", "asc", "desc", "as", "having", "undef", "values", "group", "minus", "in", "not", "service", "silent", "using", "insert", "delete", "union", "true", "false", "with", "data", "copy", "to", "move", "add", "create", "drop", "clear", "load"]); var operatorChars = /[*+\-<>=&|\^\/!\?]/; function tokenBase(stream, state) { var ch = stream.next(); curPunc = null; if (ch == "$" || ch == "?") { if(ch == "?" && stream.match(/\s/, false)){ return "operator"; } stream.match(/^[\w\d]*/); return "variable-2"; } else if (ch == "<" && !stream.match(/^[\s\u00a0=]/, false)) { stream.match(/^[^\s\u00a0>]*>?/); return "atom"; } else if (ch == "\"" || ch == "'") { state.tokenize = tokenLiteral(ch); return state.tokenize(stream, state); } else if (/[{}\(\),\.;\[\]]/.test(ch)) { curPunc = ch; return "bracket"; } else if (ch == "#") { stream.skipToEnd(); return "comment"; } else if (operatorChars.test(ch)) { stream.eatWhile(operatorChars); return "operator"; } else if (ch == ":") { stream.eatWhile(/[\w\d\._\-]/); return "atom"; } else if (ch == "@") { stream.eatWhile(/[a-z\d\-]/i); return "meta"; } else { stream.eatWhile(/[_\w\d]/); if (stream.eat(":")) { stream.eatWhile(/[\w\d_\-]/); return "atom"; } var word = stream.current(); if (ops.test(word)) return "builtin"; else if (keywords.test(word)) return "keyword"; else return "variable"; } } function tokenLiteral(quote) { return function(stream, state) { var escaped = false, ch; while ((ch = stream.next()) != null) { if (ch == quote && !escaped) { state.tokenize = tokenBase; break; } escaped = !escaped && ch == "\\"; } return "string"; }; } function pushContext(state, type, col) { state.context = {prev: state.context, indent: state.indent, col: col, type: type}; } function popContext(state) { state.indent = state.context.indent; state.context = state.context.prev; } return { startState: function() { return {tokenize: tokenBase, context: null, indent: 0, col: 0}; }, token: function(stream, state) { if (stream.sol()) { if (state.context && state.context.align == null) state.context.align = false; state.indent = stream.indentation(); } if (stream.eatSpace()) return null; var style = state.tokenize(stream, state); if (style != "comment" && state.context && state.context.align == null && state.context.type != "pattern") { state.context.align = true; } if (curPunc == "(") pushContext(state, ")", stream.column()); else if (curPunc == "[") pushContext(state, "]", stream.column()); else if (curPunc == "{") pushContext(state, "}", stream.column()); else if (/[\]\}\)]/.test(curPunc)) { while (state.context && state.context.type == "pattern") popContext(state); if (state.context && curPunc == state.context.type) { popContext(state); if (curPunc == "}" && state.context && state.context.type == "pattern") popContext(state); } } else if (curPunc == "." && state.context && state.context.type == "pattern") popContext(state); else if (/atom|string|variable/.test(style) && state.context) { if (/[\}\]]/.test(state.context.type)) pushContext(state, "pattern", stream.column()); else if (state.context.type == "pattern" && !state.context.align) { state.context.align = true; state.context.col = stream.column(); } } return style; }, indent: function(state, textAfter) { var firstChar = textAfter && textAfter.charAt(0); var context = state.context; if (/[\]\}]/.test(firstChar)) while (context && context.type == "pattern") context = context.prev; var closing = context && firstChar == context.type; if (!context) return 0; else if (context.type == "pattern") return context.col; else if (context.align) return context.col + (closing ? 0 : 1); else return context.indent + (closing ? 0 : indentUnit); }, lineComment: "#" }; }); CodeMirror.defineMIME("application/sparql-query", "sparql"); }); PK!5C�ììTfile-manager-advanced/application/library/codemirror/mode/mathematica/mathematica.jsnu„[µü¤// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE // Mathematica mode copyright (c) 2015 by Calin Barbat // Based on code by Patrick Scheibe (halirutan) // See: https://github.com/halirutan/Mathematica-Source-Highlighting/tree/master/src/lang-mma.js (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMode('mathematica', function(_config, _parserConfig) { // used pattern building blocks var Identifier = '[a-zA-Z\\$][a-zA-Z0-9\\$]*'; var pBase = "(?:\\d+)"; var pFloat = "(?:\\.\\d+|\\d+\\.\\d*|\\d+)"; var pFloatBase = "(?:\\.\\w+|\\w+\\.\\w*|\\w+)"; var pPrecision = "(?:`(?:`?"+pFloat+")?)"; // regular expressions var reBaseForm = new RegExp('(?:'+pBase+'(?:\\^\\^'+pFloatBase+pPrecision+'?(?:\\*\\^[+-]?\\d+)?))'); var reFloatForm = new RegExp('(?:' + pFloat + pPrecision + '?(?:\\*\\^[+-]?\\d+)?)'); var reIdInContext = new RegExp('(?:`?)(?:' + Identifier + ')(?:`(?:' + Identifier + '))*(?:`?)'); function tokenBase(stream, state) { var ch; // get next character ch = stream.next(); // string if (ch === '"') { state.tokenize = tokenString; return state.tokenize(stream, state); } // comment if (ch === '(') { if (stream.eat('*')) { state.commentLevel++; state.tokenize = tokenComment; return state.tokenize(stream, state); } } // go back one character stream.backUp(1); // look for numbers // Numbers in a baseform if (stream.match(reBaseForm, true, false)) { return 'number'; } // Mathematica numbers. Floats (1.2, .2, 1.) can have optionally a precision (`float) or an accuracy definition // (``float). Note: while 1.2` is possible 1.2`` is not. At the end an exponent (float*^+12) can follow. if (stream.match(reFloatForm, true, false)) { return 'number'; } /* In[23] and Out[34] */ if (stream.match(/(?:In|Out)\[[0-9]*\]/, true, false)) { return 'atom'; } // usage if (stream.match(/([a-zA-Z\$]+(?:`?[a-zA-Z0-9\$])*::usage)/, true, false)) { return 'meta'; } // message if (stream.match(/([a-zA-Z\$]+(?:`?[a-zA-Z0-9\$])*::[a-zA-Z\$][a-zA-Z0-9\$]*):?/, true, false)) { return 'string-2'; } // this makes a look-ahead match for something like variable:{_Integer} // the match is then forwarded to the mma-patterns tokenizer. if (stream.match(/([a-zA-Z\$][a-zA-Z0-9\$]*\s*:)(?:(?:[a-zA-Z\$][a-zA-Z0-9\$]*)|(?:[^:=>~@\^\&\*\)\[\]'\?,\|])).*/, true, false)) { return 'variable-2'; } // catch variables which are used together with Blank (_), BlankSequence (__) or BlankNullSequence (___) // Cannot start with a number, but can have numbers at any other position. Examples // blub__Integer, a1_, b34_Integer32 if (stream.match(/[a-zA-Z\$][a-zA-Z0-9\$]*_+[a-zA-Z\$][a-zA-Z0-9\$]*/, true, false)) { return 'variable-2'; } if (stream.match(/[a-zA-Z\$][a-zA-Z0-9\$]*_+/, true, false)) { return 'variable-2'; } if (stream.match(/_+[a-zA-Z\$][a-zA-Z0-9\$]*/, true, false)) { return 'variable-2'; } // Named characters in Mathematica, like \[Gamma]. if (stream.match(/\\\[[a-zA-Z\$][a-zA-Z0-9\$]*\]/, true, false)) { return 'variable-3'; } // Match all braces separately if (stream.match(/(?:\[|\]|{|}|\(|\))/, true, false)) { return 'bracket'; } // Catch Slots (#, ##, #3, ##9 and the V10 named slots #name). I have never seen someone using more than one digit after #, so we match // only one. if (stream.match(/(?:#[a-zA-Z\$][a-zA-Z0-9\$]*|#+[0-9]?)/, true, false)) { return 'variable-2'; } // Literals like variables, keywords, functions if (stream.match(reIdInContext, true, false)) { return 'keyword'; } // operators. Note that operators like @@ or /; are matched separately for each symbol. if (stream.match(/(?:\\|\+|\-|\*|\/|,|;|\.|:|@|~|=|>|<|&|\||_|`|'|\^|\?|!|%)/, true, false)) { return 'operator'; } // everything else is an error stream.next(); // advance the stream. return 'error'; } function tokenString(stream, state) { var next, end = false, escaped = false; while ((next = stream.next()) != null) { if (next === '"' && !escaped) { end = true; break; } escaped = !escaped && next === '\\'; } if (end && !escaped) { state.tokenize = tokenBase; } return 'string'; }; function tokenComment(stream, state) { var prev, next; while(state.commentLevel > 0 && (next = stream.next()) != null) { if (prev === '(' && next === '*') state.commentLevel++; if (prev === '*' && next === ')') state.commentLevel--; prev = next; } if (state.commentLevel <= 0) { state.tokenize = tokenBase; } return 'comment'; } return { startState: function() {return {tokenize: tokenBase, commentLevel: 0};}, token: function(stream, state) { if (stream.eatSpace()) return null; return state.tokenize(stream, state); }, blockCommentStart: "(*", blockCommentEnd: "*)" }; }); CodeMirror.defineMIME('text/x-mathematica', { name: 'mathematica' }); }); PK!ÈgwŒÎÎPfile-manager-advanced/application/library/codemirror/mode/mathematica/index.htmlnu„[µü¤ CodeMirror: Mathematica mode

    Mathematica mode

    MIME types defined: text/x-mathematica (Mathematica).

    PK!ZìÕùooJfile-manager-advanced/application/library/codemirror/mode/octave/octave.jsnu„[µü¤// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMode("octave", function() { function wordRegexp(words) { return new RegExp("^((" + words.join(")|(") + "))\\b"); } var singleOperators = new RegExp("^[\\+\\-\\*/&|\\^~<>!@'\\\\]"); var singleDelimiters = new RegExp('^[\\(\\[\\{\\},:=;]'); var doubleOperators = new RegExp("^((==)|(~=)|(<=)|(>=)|(<<)|(>>)|(\\.[\\+\\-\\*/\\^\\\\]))"); var doubleDelimiters = new RegExp("^((!=)|(\\+=)|(\\-=)|(\\*=)|(/=)|(&=)|(\\|=)|(\\^=))"); var tripleDelimiters = new RegExp("^((>>=)|(<<=))"); var expressionEnd = new RegExp("^[\\]\\)]"); var identifiers = new RegExp("^[_A-Za-z\xa1-\uffff][_A-Za-z0-9\xa1-\uffff]*"); var builtins = wordRegexp([ 'error', 'eval', 'function', 'abs', 'acos', 'atan', 'asin', 'cos', 'cosh', 'exp', 'log', 'prod', 'sum', 'log10', 'max', 'min', 'sign', 'sin', 'sinh', 'sqrt', 'tan', 'reshape', 'break', 'zeros', 'default', 'margin', 'round', 'ones', 'rand', 'syn', 'ceil', 'floor', 'size', 'clear', 'zeros', 'eye', 'mean', 'std', 'cov', 'det', 'eig', 'inv', 'norm', 'rank', 'trace', 'expm', 'logm', 'sqrtm', 'linspace', 'plot', 'title', 'xlabel', 'ylabel', 'legend', 'text', 'grid', 'meshgrid', 'mesh', 'num2str', 'fft', 'ifft', 'arrayfun', 'cellfun', 'input', 'fliplr', 'flipud', 'ismember' ]); var keywords = wordRegexp([ 'return', 'case', 'switch', 'else', 'elseif', 'end', 'endif', 'endfunction', 'if', 'otherwise', 'do', 'for', 'while', 'try', 'catch', 'classdef', 'properties', 'events', 'methods', 'global', 'persistent', 'endfor', 'endwhile', 'printf', 'sprintf', 'disp', 'until', 'continue', 'pkg' ]); // tokenizers function tokenTranspose(stream, state) { if (!stream.sol() && stream.peek() === '\'') { stream.next(); state.tokenize = tokenBase; return 'operator'; } state.tokenize = tokenBase; return tokenBase(stream, state); } function tokenComment(stream, state) { if (stream.match(/^.*%}/)) { state.tokenize = tokenBase; return 'comment'; }; stream.skipToEnd(); return 'comment'; } function tokenBase(stream, state) { // whitespaces if (stream.eatSpace()) return null; // Handle one line Comments if (stream.match('%{')){ state.tokenize = tokenComment; stream.skipToEnd(); return 'comment'; } if (stream.match(/^[%#]/)){ stream.skipToEnd(); return 'comment'; } // Handle Number Literals if (stream.match(/^[0-9\.+-]/, false)) { if (stream.match(/^[+-]?0x[0-9a-fA-F]+[ij]?/)) { stream.tokenize = tokenBase; return 'number'; }; if (stream.match(/^[+-]?\d*\.\d+([EeDd][+-]?\d+)?[ij]?/)) { return 'number'; }; if (stream.match(/^[+-]?\d+([EeDd][+-]?\d+)?[ij]?/)) { return 'number'; }; } if (stream.match(wordRegexp(['nan','NaN','inf','Inf']))) { return 'number'; }; // Handle Strings if (stream.match(/^"([^"]|(""))*"/)) { return 'string'; } ; if (stream.match(/^'([^']|(''))*'/)) { return 'string'; } ; // Handle words if (stream.match(keywords)) { return 'keyword'; } ; if (stream.match(builtins)) { return 'builtin'; } ; if (stream.match(identifiers)) { return 'variable'; } ; if (stream.match(singleOperators) || stream.match(doubleOperators)) { return 'operator'; }; if (stream.match(singleDelimiters) || stream.match(doubleDelimiters) || stream.match(tripleDelimiters)) { return null; }; if (stream.match(expressionEnd)) { state.tokenize = tokenTranspose; return null; }; // Handle non-detected items stream.next(); return 'error'; }; return { startState: function() { return { tokenize: tokenBase }; }, token: function(stream, state) { var style = state.tokenize(stream, state); if (style === 'number' || style === 'variable'){ state.tokenize = tokenTranspose; } return style; } }; }); CodeMirror.defineMIME("text/x-octave", "octave"); }); PK!dÑV#  Kfile-manager-advanced/application/library/codemirror/mode/octave/index.htmlnu„[µü¤ CodeMirror: Octave mode

    Octave mode

    MIME types defined: text/x-octave.

    PK!h17$%%Jfile-manager-advanced/application/library/codemirror/mode/swift/index.htmlnu„[µü¤ CodeMirror: Swift mode

    Swift mode

    A simple mode for Swift

    MIME types defined: text/x-swift (Swift code)

    PK!§l+¾Hfile-manager-advanced/application/library/codemirror/mode/swift/swift.jsnu„[µü¤// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE // Swift mode created by Michael Kaminsky https://github.com/mkaminsky11 (function(mod) { if (typeof exports == "object" && typeof module == "object") mod(require("../../lib/codemirror")) else if (typeof define == "function" && define.amd) define(["../../lib/codemirror"], mod) else mod(CodeMirror) })(function(CodeMirror) { "use strict" function wordSet(words) { var set = {} for (var i = 0; i < words.length; i++) set[words[i]] = true return set } var keywords = wordSet(["var","let","class","deinit","enum","extension","func","import","init","protocol", "static","struct","subscript","typealias","as","dynamicType","is","new","super", "self","Self","Type","__COLUMN__","__FILE__","__FUNCTION__","__LINE__","break","case", "continue","default","do","else","fallthrough","if","in","for","return","switch", "where","while","associativity","didSet","get","infix","inout","left","mutating", "none","nonmutating","operator","override","postfix","precedence","prefix","right", "set","unowned","weak","willSet"]) var definingKeywords = wordSet(["var","let","class","enum","extension","func","import","protocol","struct", "typealias","dynamicType","for"]) var atoms = wordSet(["Infinity","NaN","undefined","null","true","false","on","off","yes","no","nil","null", "this","super"]) var types = wordSet(["String","bool","int","string","double","Double","Int","Float","float","public", "private","extension"]) var operators = "+-/*%=|&<>#" var punc = ";,.(){}[]" var number = /^-?(?:(?:[\d_]+\.[_\d]*|\.[_\d]+|0o[0-7_\.]+|0b[01_\.]+)(?:e-?[\d_]+)?|0x[\d_a-f\.]+(?:p-?[\d_]+)?)/i var identifier = /^[_A-Za-z$][_A-Za-z$0-9]*/ var property = /^[@\.][_A-Za-z$][_A-Za-z$0-9]*/ var regexp = /^\/(?!\s)(?:\/\/)?(?:\\.|[^\/])+\// function tokenBase(stream, state, prev) { if (stream.sol()) state.indented = stream.indentation() if (stream.eatSpace()) return null var ch = stream.peek() if (ch == "/") { if (stream.match("//")) { stream.skipToEnd() return "comment" } if (stream.match("/*")) { state.tokenize.push(tokenComment) return tokenComment(stream, state) } if (stream.match(regexp)) return "string-2" } if (operators.indexOf(ch) > -1) { stream.next() return "operator" } if (punc.indexOf(ch) > -1) { stream.next() stream.match("..") return "punctuation" } if (ch == '"' || ch == "'") { stream.next() var tokenize = tokenString(ch) state.tokenize.push(tokenize) return tokenize(stream, state) } if (stream.match(number)) return "number" if (stream.match(property)) return "property" if (stream.match(identifier)) { var ident = stream.current() if (keywords.hasOwnProperty(ident)) { if (definingKeywords.hasOwnProperty(ident)) state.prev = "define" return "keyword" } if (types.hasOwnProperty(ident)) return "variable-2" if (atoms.hasOwnProperty(ident)) return "atom" if (prev == "define") return "def" return "variable" } stream.next() return null } function tokenUntilClosingParen() { var depth = 0 return function(stream, state, prev) { var inner = tokenBase(stream, state, prev) if (inner == "punctuation") { if (stream.current() == "(") ++depth else if (stream.current() == ")") { if (depth == 0) { stream.backUp(1) state.tokenize.pop() return state.tokenize[state.tokenize.length - 1](stream, state) } else --depth } } return inner } } function tokenString(quote) { return function(stream, state) { var ch, escaped = false while (ch = stream.next()) { if (escaped) { if (ch == "(") { state.tokenize.push(tokenUntilClosingParen()) return "string" } escaped = false } else if (ch == quote) { break } else { escaped = ch == "\\" } } state.tokenize.pop() return "string" } } function tokenComment(stream, state) { stream.match(/^(?:[^*]|\*(?!\/))*/) if (stream.match("*/")) state.tokenize.pop() return "comment" } function Context(prev, align, indented) { this.prev = prev this.align = align this.indented = indented } function pushContext(state, stream) { var align = stream.match(/^\s*($|\/[\/\*])/, false) ? null : stream.column() + 1 state.context = new Context(state.context, align, state.indented) } function popContext(state) { if (state.context) { state.indented = state.context.indented state.context = state.context.prev } } CodeMirror.defineMode("swift", function(config) { return { startState: function() { return { prev: null, context: null, indented: 0, tokenize: [] } }, token: function(stream, state) { var prev = state.prev state.prev = null var tokenize = state.tokenize[state.tokenize.length - 1] || tokenBase var style = tokenize(stream, state, prev) if (!style || style == "comment") state.prev = prev else if (!state.prev) state.prev = style if (style == "punctuation") { var bracket = /[\(\[\{]|([\]\)\}])/.exec(stream.current()) if (bracket) (bracket[1] ? popContext : pushContext)(state, stream) } return style }, indent: function(state, textAfter) { var cx = state.context if (!cx) return 0 var closing = /^[\]\}\)]/.test(textAfter) if (cx.align != null) return cx.align - (closing ? 1 : 0) return cx.indented + (closing ? 0 : config.indentUnit) }, electricInput: /^\s*[\)\}\]]$/, lineComment: "//", blockCommentStart: "/*", blockCommentEnd: "*/" } }) CodeMirror.defineMIME("text/x-swift","swift") }); PK!1yIfile-manager-advanced/application/library/codemirror/mode/haml/index.htmlnu„[µü¤ CodeMirror: HAML mode

    HAML mode

    MIME types defined: text/x-haml.

    Parsing/Highlighting Tests: normal, verbose.

    PK!ÚQ#  Ffile-manager-advanced/application/library/codemirror/mode/haml/test.jsnu„[µü¤// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function() { var mode = CodeMirror.getMode({tabSize: 4, indentUnit: 2}, "haml"); function MT(name) { test.mode(name, mode, Array.prototype.slice.call(arguments, 1)); } // Requires at least one media query MT("elementName", "[tag %h1] Hey There"); MT("oneElementPerLine", "[tag %h1] Hey There %h2"); MT("idSelector", "[tag %h1][attribute #test] Hey There"); MT("classSelector", "[tag %h1][attribute .hello] Hey There"); MT("docType", "[tag !!! XML]"); MT("comment", "[comment / Hello WORLD]"); MT("notComment", "[tag %h1] This is not a / comment "); MT("attributes", "[tag %a]([variable title][operator =][string \"test\"]){[atom :title] [operator =>] [string \"test\"]}"); MT("htmlCode", "[tag&bracket <][tag h1][tag&bracket >]Title[tag&bracket ]"); MT("rubyBlock", "[operator =][variable-2 @item]"); MT("selectorRubyBlock", "[tag %a.selector=] [variable-2 @item]"); MT("nestedRubyBlock", "[tag %a]", " [operator =][variable puts] [string \"test\"]"); MT("multilinePlaintext", "[tag %p]", " Hello,", " World"); MT("multilineRuby", "[tag %p]", " [comment -# this is a comment]", " [comment and this is a comment too]", " Date/Time", " [operator -] [variable now] [operator =] [tag DateTime][operator .][property now]", " [tag %strong=] [variable now]", " [operator -] [keyword if] [variable now] [operator >] [tag DateTime][operator .][property parse]([string \"December 31, 2006\"])", " [operator =][string \"Happy\"]", " [operator =][string \"Belated\"]", " [operator =][string \"Birthday\"]"); MT("multilineComment", "[comment /]", " [comment Multiline]", " [comment Comment]"); MT("hamlComment", "[comment -# this is a comment]"); MT("multilineHamlComment", "[comment -# this is a comment]", " [comment and this is a comment too]"); MT("multilineHTMLComment", "[comment ]"); MT("hamlAfterRubyTag", "[attribute .block]", " [tag %strong=] [variable now]", " [attribute .test]", " [operator =][variable now]", " [attribute .right]"); MT("stretchedRuby", "[operator =] [variable puts] [string \"Hello\"],", " [string \"World\"]"); MT("interpolationInHashAttribute", //"[tag %div]{[atom :id] [operator =>] [string \"#{][variable test][string }_#{][variable ting][string }\"]} test"); "[tag %div]{[atom :id] [operator =>] [string \"#{][variable test][string }_#{][variable ting][string }\"]} test"); MT("interpolationInHTMLAttribute", "[tag %div]([variable title][operator =][string \"#{][variable test][string }_#{][variable ting]()[string }\"]) Test"); })(); PK!¬t+ééFfile-manager-advanced/application/library/codemirror/mode/haml/haml.jsnu„[µü¤// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror"), require("../htmlmixed/htmlmixed"), require("../ruby/ruby")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror", "../htmlmixed/htmlmixed", "../ruby/ruby"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; // full haml mode. This handled embedded ruby and html fragments too CodeMirror.defineMode("haml", function(config) { var htmlMode = CodeMirror.getMode(config, {name: "htmlmixed"}); var rubyMode = CodeMirror.getMode(config, "ruby"); function rubyInQuote(endQuote) { return function(stream, state) { var ch = stream.peek(); if (ch == endQuote && state.rubyState.tokenize.length == 1) { // step out of ruby context as it seems to complete processing all the braces stream.next(); state.tokenize = html; return "closeAttributeTag"; } else { return ruby(stream, state); } }; } function ruby(stream, state) { if (stream.match("-#")) { stream.skipToEnd(); return "comment"; } return rubyMode.token(stream, state.rubyState); } function html(stream, state) { var ch = stream.peek(); // handle haml declarations. All declarations that cant be handled here // will be passed to html mode if (state.previousToken.style == "comment" ) { if (state.indented > state.previousToken.indented) { stream.skipToEnd(); return "commentLine"; } } if (state.startOfLine) { if (ch == "!" && stream.match("!!")) { stream.skipToEnd(); return "tag"; } else if (stream.match(/^%[\w:#\.]+=/)) { state.tokenize = ruby; return "hamlTag"; } else if (stream.match(/^%[\w:]+/)) { return "hamlTag"; } else if (ch == "/" ) { stream.skipToEnd(); return "comment"; } } if (state.startOfLine || state.previousToken.style == "hamlTag") { if ( ch == "#" || ch == ".") { stream.match(/[\w-#\.]*/); return "hamlAttribute"; } } // donot handle --> as valid ruby, make it HTML close comment instead if (state.startOfLine && !stream.match("-->", false) && (ch == "=" || ch == "-" )) { state.tokenize = ruby; return state.tokenize(stream, state); } if (state.previousToken.style == "hamlTag" || state.previousToken.style == "closeAttributeTag" || state.previousToken.style == "hamlAttribute") { if (ch == "(") { state.tokenize = rubyInQuote(")"); return state.tokenize(stream, state); } else if (ch == "{") { if (!stream.match(/^\{%.*/)) { state.tokenize = rubyInQuote("}"); return state.tokenize(stream, state); } } } return htmlMode.token(stream, state.htmlState); } return { // default to html mode startState: function() { var htmlState = CodeMirror.startState(htmlMode); var rubyState = CodeMirror.startState(rubyMode); return { htmlState: htmlState, rubyState: rubyState, indented: 0, previousToken: { style: null, indented: 0}, tokenize: html }; }, copyState: function(state) { return { htmlState : CodeMirror.copyState(htmlMode, state.htmlState), rubyState: CodeMirror.copyState(rubyMode, state.rubyState), indented: state.indented, previousToken: state.previousToken, tokenize: state.tokenize }; }, token: function(stream, state) { if (stream.sol()) { state.indented = stream.indentation(); state.startOfLine = true; } if (stream.eatSpace()) return null; var style = state.tokenize(stream, state); state.startOfLine = false; // dont record comment line as we only want to measure comment line with // the opening comment block if (style && style != "commentLine") { state.previousToken = { style: style, indented: state.indented }; } // if current state is ruby and the previous token is not `,` reset the // tokenize to html if (stream.eol() && state.tokenize == ruby) { stream.backUp(1); var ch = stream.peek(); stream.next(); if (ch && ch != ",") { state.tokenize = html; } } // reprocess some of the specific style tag when finish setting previousToken if (style == "hamlTag") { style = "tag"; } else if (style == "commentLine") { style = "comment"; } else if (style == "hamlAttribute") { style = "attribute"; } else if (style == "closeAttributeTag") { style = null; } return style; } }; }, "htmlmixed", "ruby"); CodeMirror.defineMIME("text/x-haml", "haml"); }); PK!ãd‘L‰‰Vfile-manager-advanced/application/library/codemirror/mode/htmlembedded/htmlembedded.jsnu„[µü¤// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror"), require("../htmlmixed/htmlmixed"), require("../../addon/mode/multiplex")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror", "../htmlmixed/htmlmixed", "../../addon/mode/multiplex"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMode("htmlembedded", function(config, parserConfig) { return CodeMirror.multiplexingMode(CodeMirror.getMode(config, "htmlmixed"), { open: parserConfig.open || parserConfig.scriptStartRegex || "<%", close: parserConfig.close || parserConfig.scriptEndRegex || "%>", mode: CodeMirror.getMode(config, parserConfig.scriptingModeSpec) }); }, "htmlmixed"); CodeMirror.defineMIME("application/x-ejs", {name: "htmlembedded", scriptingModeSpec:"javascript"}); CodeMirror.defineMIME("application/x-aspx", {name: "htmlembedded", scriptingModeSpec:"text/x-csharp"}); CodeMirror.defineMIME("application/x-jsp", {name: "htmlembedded", scriptingModeSpec:"text/x-java"}); CodeMirror.defineMIME("application/x-erb", {name: "htmlembedded", scriptingModeSpec:"ruby"}); }); PK!½†Qª&&Qfile-manager-advanced/application/library/codemirror/mode/htmlembedded/index.htmlnu„[µü¤ CodeMirror: Html Embedded Scripts mode

    Html Embedded Scripts mode

    Mode for html embedded scripts like JSP and ASP.NET. Depends on multiplex and HtmlMixed which in turn depends on JavaScript, CSS and XML.
    Other dependencies include those of the scripting language chosen.

    MIME types defined: application/x-aspx (ASP.NET), application/x-ejs (Embedded Javascript), application/x-jsp (JavaServer Pages) and application/x-erb

    PK!¢vûÍÉ3É3Lfile-manager-advanced/application/library/codemirror/mode/gherkin/gherkin.jsnu„[µü¤// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE /* Gherkin mode - http://www.cukes.info/ Report bugs/issues here: https://github.com/codemirror/CodeMirror/issues */ // Following Objs from Brackets implementation: https://github.com/tregusti/brackets-gherkin/blob/master/main.js //var Quotes = { // SINGLE: 1, // DOUBLE: 2 //}; //var regex = { // keywords: /(Feature| {2}(Scenario|In order to|As|I)| {4}(Given|When|Then|And))/ //}; (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMode("gherkin", function () { return { startState: function () { return { lineNumber: 0, tableHeaderLine: false, allowFeature: true, allowBackground: false, allowScenario: false, allowSteps: false, allowPlaceholders: false, allowMultilineArgument: false, inMultilineString: false, inMultilineTable: false, inKeywordLine: false }; }, token: function (stream, state) { if (stream.sol()) { state.lineNumber++; state.inKeywordLine = false; if (state.inMultilineTable) { state.tableHeaderLine = false; if (!stream.match(/\s*\|/, false)) { state.allowMultilineArgument = false; state.inMultilineTable = false; } } } stream.eatSpace(); if (state.allowMultilineArgument) { // STRING if (state.inMultilineString) { if (stream.match('"""')) { state.inMultilineString = false; state.allowMultilineArgument = false; } else { stream.match(/.*/); } return "string"; } // TABLE if (state.inMultilineTable) { if (stream.match(/\|\s*/)) { return "bracket"; } else { stream.match(/[^\|]*/); return state.tableHeaderLine ? "header" : "string"; } } // DETECT START if (stream.match('"""')) { // String state.inMultilineString = true; return "string"; } else if (stream.match("|")) { // Table state.inMultilineTable = true; state.tableHeaderLine = true; return "bracket"; } } // LINE COMMENT if (stream.match(/#.*/)) { return "comment"; // TAG } else if (!state.inKeywordLine && stream.match(/@\S+/)) { return "tag"; // FEATURE } else if (!state.inKeywordLine && state.allowFeature && stream.match(/(機能|功能|フィーãƒ�ャ|기능|โครงหลัà¸�|ความสามารถ|ความต้องà¸�ารทางธุรà¸�ิจ|ಹೆಚà³�ಚಳ|à°—à±�ణమà±�|ਮà©�ਹਾਂਦਰਾ|ਨਕਸ਼ ਨà©�ਹਾਰ|ਖਾਸੀਅਤ|रूप लेख|ÙˆÙ�یژگی|خاصية|תכונה|Функціонал|ФункциÑ�|ФункционалноÑ�Ñ‚|Функционал|Үзенчәлеклелек|СвойÑ�тво|ОÑ�обина|Мөмкинлек|МогућноÑ�Ñ‚|ΛειτουÏ�γία|Δυνατότητα|WÅ‚aÅ›ciwość|VlastnosÅ¥|Trajto|Tính năng|SavybÄ—|Pretty much|Požiadavka|Požadavek|Potrzeba biznesowa|Özellik|Osobina|Ominaisuus|Omadus|OH HAI|Mogućnost|Mogucnost|JellemzÅ‘|Hwæt|Hwaet|Funzionalità|Funktionalitéit|Funktionalität|Funkcja|Funkcionalnost|FunkcionalitÄ�te|Funkcia|Fungsi|Functionaliteit|FuncÈ›ionalitate|FuncÅ£ionalitate|Functionalitate|Funcionalitat|Funcionalidade|Fonctionnalité|Fitur|FÄ«Ä�a|Feature|Eiginleiki|Egenskap|Egenskab|Característica|Caracteristica|Business Need|Aspekt|Arwedd|Ahoy matey!|Ability):/)) { state.allowScenario = true; state.allowBackground = true; state.allowPlaceholders = false; state.allowSteps = false; state.allowMultilineArgument = false; state.inKeywordLine = true; return "keyword"; // BACKGROUND } else if (!state.inKeywordLine && state.allowBackground && stream.match(/(背景|ë°°ê²½|à¹�นวคิด|ಹಿನà³�ನೆಲೆ|నేపథà±�యం|ਪਿਛੋਕੜ|पृषà¥�ठभूमि|زمینه|الخلÙ�ية|רקע|Тарих|ПредыÑ�ториÑ�|ПредиÑ�ториÑ�|Позадина|Передумова|ОÑ�нова|КонтекÑ�Ñ‚|Кереш|ΥπόβαθÏ�ο|ZaÅ‚ożenia|Yo\-ho\-ho|Tausta|Taust|SituÄ�cija|Rerefons|Pozadina|Pozadie|Pozadí|Osnova|Latar Belakang|Kontext|Konteksts|Kontekstas|Kontekst|Háttér|Hannergrond|Grundlage|GeçmiÅŸ|Fundo|Fono|First off|Dis is what went down|Dasar|Contexto|Contexte|Context|Contesto|Cenário de Fundo|Cenario de Fundo|Cefndir|Bối cảnh|Bakgrunnur|Bakgrunn|Bakgrund|Baggrund|Background|B4|Antecedents|Antecedentes|Ær|Aer|Achtergrond):/)) { state.allowPlaceholders = false; state.allowSteps = true; state.allowBackground = false; state.allowMultilineArgument = false; state.inKeywordLine = true; return "keyword"; // SCENARIO OUTLINE } else if (!state.inKeywordLine && state.allowScenario && stream.match(/(場景大綱|场景大纲|劇本大綱|剧本大纲|テンプレ|シナリオテンプレート|シナリオテンプレ|シナリオアウトライン|시나리오 개요|สรุปเหตุà¸�ารณ์|โครงสร้างของเหตุà¸�ารณ์|ವಿವರಣೆ|కథనం|ਪਟਕਥਾ ਰੂਪ ਰੇਖਾ|ਪਟਕਥਾ ਢਾਂਚਾ|परिदृशà¥�य रूपरेखा|سيناريو مخطط|الگوی سناریو|תבנית תרחיש|Сценарийның төзелеше|Сценарий Ñ�труктураÑ�и|Структура Ñ�ценарію|Структура Ñ�ценариÑ�|Структура Ñ�ценарија|Скица|Рамка на Ñ�ценарий|Концепт|ΠεÏ�ιγÏ�αφή ΣεναÏ�ίου|Wharrimean is|Template Situai|Template Senario|Template Keadaan|Tapausaihio|Szenariogrundriss|Szablon scenariusza|Swa hwær swa|Swa hwaer swa|Struktura scenarija|Structură scenariu|Structura scenariu|Skica|Skenario konsep|Shiver me timbers|Senaryo taslağı|Schema dello scenario|Scenariomall|Scenariomal|Scenario Template|Scenario Outline|Scenario Amlinellol|ScenÄ�rijs pÄ“c parauga|Scenarijaus Å¡ablonas|Reckon it's like|Raamstsenaarium|Plang vum Szenario|Plan du Scénario|Plan du scénario|Osnova scénáře|Osnova Scenára|NáÄ�rt Scenáru|NáÄ�rt Scénáře|NáÄ�rt Scenára|MISHUN SRSLY|Menggariskan Senario|Lýsing Dæma|Lýsing Atburðarásar|Konturo de la scenaro|Koncept|Khung tình huống|Khung kịch bản|Forgatókönyv vázlat|Esquema do Cenário|Esquema do Cenario|Esquema del escenario|Esquema de l'escenari|Esbozo do escenario|Delineação do Cenário|Delineacao do Cenario|All y'all|Abstrakt Scenario|Abstract Scenario):/)) { state.allowPlaceholders = true; state.allowSteps = true; state.allowMultilineArgument = false; state.inKeywordLine = true; return "keyword"; // EXAMPLES } else if (state.allowScenario && stream.match(/(例å­�|例|サンプル|예|ชุดของเหตุà¸�ารณ์|ชุดของตัวอย่าง|ಉದಾಹರಣೆಗಳà³�|ఉదాహరణలà±�|ਉਦਾਹਰਨਾਂ|उदाहरण|نمونه ها|امثلة|דוגמ×�ות|Үрнәкләр|Сценарији|Примеры|Примери|Приклади|МиÑ�оллар|МиÑ�аллар|ΣενάÏ�ια|ΠαÏ�αδείγματα|You'll wanna|Voorbeelden|Variantai|Tapaukset|Se þe|Se the|Se ðe|Scenarios|Scenariji|Scenarijai|PrzykÅ‚ady|Primjeri|Primeri|Příklady|Príklady|PiemÄ“ri|Példák|Pavyzdžiai|Paraugs|Örnekler|Juhtumid|Exemplos|Exemples|Exemple|Exempel|EXAMPLZ|Examples|Esempi|Enghreifftiau|Ekzemploj|Eksempler|Ejemplos|Dữ liệu|Dead men tell no tales|Dæmi|Contoh|Cenários|Cenarios|Beispiller|Beispiele|Atburðarásir):/)) { state.allowPlaceholders = false; state.allowSteps = true; state.allowBackground = false; state.allowMultilineArgument = true; return "keyword"; // SCENARIO } else if (!state.inKeywordLine && state.allowScenario && stream.match(/(場景|场景|劇本|剧本|シナリオ|시나리오|เหตุà¸�ารณ์|ಕಥಾಸಾರಾಂಶ|సనà±�నివేశం|ਪਟਕਥਾ|परिदृशà¥�य|سيناريو|سناریو|תרחיש|Сценарій|Сценарио|Сценарий|Пример|ΣενάÏ�ιο|Tình huống|The thing of it is|Tapaus|Szenario|Swa|Stsenaarium|Skenario|Situai|Senaryo|Senario|Scenaro|Scenariusz|Scenariu|Scénario|Scenario|Scenarijus|ScenÄ�rijs|Scenarij|Scenarie|Scénář|Scenár|Primer|MISHUN|Kịch bản|Keadaan|Heave to|Forgatókönyv|Escenario|Escenari|Cenário|Cenario|Awww, look mate|Atburðarás):/)) { state.allowPlaceholders = false; state.allowSteps = true; state.allowBackground = false; state.allowMultilineArgument = false; state.inKeywordLine = true; return "keyword"; // STEPS } else if (!state.inKeywordLine && state.allowSteps && stream.match(/(那麼|那么|而且|ç•¶|当|并且|å�Œæ™‚|å�Œæ—¶|å‰�æ��|å�‡è®¾|å�‡è¨­|å�‡å®š|å�‡å¦‚|但是|但ã�—|並且|ã‚‚ã�—|ã�ªã‚‰ã�°|ã�Ÿã� ã�—|ã�—ã�‹ã�—|ã�‹ã�¤|하지만|ì¡°ê±´|먼저|ë§Œì�¼|만약|단|그리고|그러면|à¹�ละ |เมื่อ |à¹�ต่ |ดังนั้น |à¸�ำหนดให้ |ಸà³�ಥಿತಿಯನà³�ನà³� |ಮತà³�ತà³� |ನೀಡಿದ |ನಂತರ |ಆದರೆ |మరియà±� |చెపà±�పబడినది |కాని |à°ˆ పరిసà±�థితిలో |à°…à°ªà±�à°ªà±�à°¡à±� |ਪਰ |ਤਦ |ਜੇਕਰ |ਜਿਵੇਂ ਕਿ |ਜਦੋਂ |ਅਤੇ |यदि |परनà¥�तà¥� |पर |तब |तदा |तथा |जब |चूंकि |किनà¥�तà¥� |कदा |और |अगर |Ùˆ |هنگامی |متى |لكن |عندما |ثم |بÙ�رض |با Ù�رض |اما |اذاً |آنگاه |×›×�שר |וג×� |בהינתן |×�×–×™ |×�×– |×�בל |Якщо |Һәм |Унда |Тоді |Тогда |То |Также |Та |ПуÑ�ть |ПрипуÑ�тимо, що |ПрипуÑ�тимо |Онда |Ð�о |Ð�ехай |Ð�әтиҗәдә |Лекин |Ләкин |Коли |Когда |Когато |Када |Кад |К тому же |І |И |Задато |Задати |Задате |ЕÑ�ли |ДопуÑ�тим |Дано |Дадено |Ð’Ó™ |Ва |Бирок |Әмма |Әйтик |Әгәр |Ð�ммо |Ð�ли |Ð�ле |Ð�гар |Ð� також |Ð� |Τότε |Όταν |Και |Δεδομένου |Αλλά |Þurh |Þegar |Þa þe |Þá |Þa |Zatati |ZakÅ‚adajÄ…c |Zadato |Zadate |Zadano |Zadani |Zadan |Za pÅ™edpokladu |Za predpokladu |Youse know when youse got |Youse know like when |Yna |Yeah nah |Y'know |Y |Wun |Wtedy |When y'all |When |Wenn |WEN |wann |Ve |Và |Und |Un |ugeholl |Too right |Thurh |Thì |Then y'all |Then |Tha the |Tha |Tetapi |Tapi |Tak |Tada |Tad |Stel |Soit |Siis |Și |Åži |Si |Sed |Se |SÃ¥ |Quando |Quand |Quan |Pryd |Potom |Pokud |Pokiaľ |Però |Pero |Pak |Oraz |Onda |Ond |Oletetaan |Og |Och |O zaman |Niin |Nhưng |När |NÃ¥r |Mutta |Men |Mas |Maka |Majd |MajÄ…c |Mais |Maar |mä |Ma |Lorsque |Lorsqu'|Logo |Let go and haul |Kun |Kuid |Kui |Kiedy |Khi |Ketika |Kemudian |KeÄ� |Když |Kaj |Kai |Kada |Kad |Jeżeli |JeÅ›li |Ja |It's just unbelievable |Ir |I CAN HAZ |I |Ha |Givun |Givet |Given y'all |Given |Gitt |Gegeven |Gegeben seien |Gegeben sei |Gdy |Gangway! |Fakat |Étant donnés |Etant donnés |Étant données |Etant données |Étant donnée |Etant donnée |Étant donné |Etant donné |Et |És |Entonces |Entón |Então |Entao |En |EÄŸer ki |Ef |Eeldades |E |Ã�urh |Duota |Dun |Donitaĵo |Donat |Donada |Do |Diyelim ki |Diberi |Dengan |Den youse gotta |DEN |De |Dato |DaÈ›i fiind |DaÅ£i fiind |Dati fiind |Dati |Date fiind |Date |Data |Dat fiind |Dar |Dann |dann |Dan |Dados |Dado |Dadas |Dada |Ã�a ðe |Ã�a |Cuando |Cho |Cando |Când |Cand |Cal |But y'all |But at the end of the day I reckon |BUT |But |Buh |Blimey! |Biết |Bet |Bagi |Aye |awer |Avast! |Atunci |Atesa |Atès |Apabila |Anrhegedig a |Angenommen |And y'all |And |AN |An |an |Amikor |Amennyiben |Ama |Als |Alors |Allora |Ali |Aleshores |Ale |Akkor |Ak |Adott |Ac |Aber |A zároveň |A tiež |A taktiež |A také |A |a |7 |\* )/)) { state.inStep = true; state.allowPlaceholders = true; state.allowMultilineArgument = true; state.inKeywordLine = true; return "keyword"; // INLINE STRING } else if (stream.match(/"[^"]*"?/)) { return "string"; // PLACEHOLDER } else if (state.allowPlaceholders && stream.match(/<[^>]*>?/)) { return "variable"; // Fall through } else { stream.next(); stream.eatWhile(/[^@"<#]/); return null; } } }; }); CodeMirror.defineMIME("text/x-feature", "gherkin"); }); PK!)NÇLfile-manager-advanced/application/library/codemirror/mode/gherkin/index.htmlnu„[µü¤ CodeMirror: Gherkin mode

    Gherkin mode

    MIME types defined: text/x-feature.

    PK! ¯á‡mmGfile-manager-advanced/application/library/codemirror/mode/oz/index.htmlnu„[µü¤ CodeMirror: Oz mode

    Oz mode

    MIME type defined: text/x-oz.

    PK!ƒÝ]®Bfile-manager-advanced/application/library/codemirror/mode/oz/oz.jsnu„[µü¤// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMode("oz", function (conf) { function wordRegexp(words) { return new RegExp("^((" + words.join(")|(") + "))\\b"); } var singleOperators = /[\^@!\|<>#~\.\*\-\+\\/,=]/; var doubleOperators = /(<-)|(:=)|(=<)|(>=)|(<=)|(<:)|(>:)|(=:)|(\\=)|(\\=:)|(!!)|(==)|(::)/; var tripleOperators = /(:::)|(\.\.\.)|(=<:)|(>=:)/; var middle = ["in", "then", "else", "of", "elseof", "elsecase", "elseif", "catch", "finally", "with", "require", "prepare", "import", "export", "define", "do"]; var end = ["end"]; var atoms = wordRegexp(["true", "false", "nil", "unit"]); var commonKeywords = wordRegexp(["andthen", "at", "attr", "declare", "feat", "from", "lex", "mod", "mode", "orelse", "parser", "prod", "prop", "scanner", "self", "syn", "token"]); var openingKeywords = wordRegexp(["local", "proc", "fun", "case", "class", "if", "cond", "or", "dis", "choice", "not", "thread", "try", "raise", "lock", "for", "suchthat", "meth", "functor"]); var middleKeywords = wordRegexp(middle); var endKeywords = wordRegexp(end); // Tokenizers function tokenBase(stream, state) { if (stream.eatSpace()) { return null; } // Brackets if(stream.match(/[{}]/)) { return "bracket"; } // Special [] keyword if (stream.match(/(\[])/)) { return "keyword" } // Operators if (stream.match(tripleOperators) || stream.match(doubleOperators)) { return "operator"; } // Atoms if(stream.match(atoms)) { return 'atom'; } // Opening keywords var matched = stream.match(openingKeywords); if (matched) { if (!state.doInCurrentLine) state.currentIndent++; else state.doInCurrentLine = false; // Special matching for signatures if(matched[0] == "proc" || matched[0] == "fun") state.tokenize = tokenFunProc; else if(matched[0] == "class") state.tokenize = tokenClass; else if(matched[0] == "meth") state.tokenize = tokenMeth; return 'keyword'; } // Middle and other keywords if (stream.match(middleKeywords) || stream.match(commonKeywords)) { return "keyword" } // End keywords if (stream.match(endKeywords)) { state.currentIndent--; return 'keyword'; } // Eat the next char for next comparisons var ch = stream.next(); // Strings if (ch == '"' || ch == "'") { state.tokenize = tokenString(ch); return state.tokenize(stream, state); } // Numbers if (/[~\d]/.test(ch)) { if (ch == "~") { if(! /^[0-9]/.test(stream.peek())) return null; else if (( stream.next() == "0" && stream.match(/^[xX][0-9a-fA-F]+/)) || stream.match(/^[0-9]*(\.[0-9]+)?([eE][~+]?[0-9]+)?/)) return "number"; } if ((ch == "0" && stream.match(/^[xX][0-9a-fA-F]+/)) || stream.match(/^[0-9]*(\.[0-9]+)?([eE][~+]?[0-9]+)?/)) return "number"; return null; } // Comments if (ch == "%") { stream.skipToEnd(); return 'comment'; } else if (ch == "/") { if (stream.eat("*")) { state.tokenize = tokenComment; return tokenComment(stream, state); } } // Single operators if(singleOperators.test(ch)) { return "operator"; } // If nothing match, we skip the entire alphanumerical block stream.eatWhile(/\w/); return "variable"; } function tokenClass(stream, state) { if (stream.eatSpace()) { return null; } stream.match(/([A-Z][A-Za-z0-9_]*)|(`.+`)/); state.tokenize = tokenBase; return "variable-3" } function tokenMeth(stream, state) { if (stream.eatSpace()) { return null; } stream.match(/([a-zA-Z][A-Za-z0-9_]*)|(`.+`)/); state.tokenize = tokenBase; return "def" } function tokenFunProc(stream, state) { if (stream.eatSpace()) { return null; } if(!state.hasPassedFirstStage && stream.eat("{")) { state.hasPassedFirstStage = true; return "bracket"; } else if(state.hasPassedFirstStage) { stream.match(/([A-Z][A-Za-z0-9_]*)|(`.+`)|\$/); state.hasPassedFirstStage = false; state.tokenize = tokenBase; return "def" } else { state.tokenize = tokenBase; return null; } } function tokenComment(stream, state) { var maybeEnd = false, ch; while (ch = stream.next()) { if (ch == "/" && maybeEnd) { state.tokenize = tokenBase; break; } maybeEnd = (ch == "*"); } return "comment"; } function tokenString(quote) { return function (stream, state) { var escaped = false, next, end = false; while ((next = stream.next()) != null) { if (next == quote && !escaped) { end = true; break; } escaped = !escaped && next == "\\"; } if (end || !escaped) state.tokenize = tokenBase; return "string"; }; } function buildElectricInputRegEx() { // Reindentation should occur on [] or on a match of any of // the block closing keywords, at the end of a line. var allClosings = middle.concat(end); return new RegExp("[\\[\\]]|(" + allClosings.join("|") + ")$"); } return { startState: function () { return { tokenize: tokenBase, currentIndent: 0, doInCurrentLine: false, hasPassedFirstStage: false }; }, token: function (stream, state) { if (stream.sol()) state.doInCurrentLine = 0; return state.tokenize(stream, state); }, indent: function (state, textAfter) { var trueText = textAfter.replace(/^\s+|\s+$/g, ''); if (trueText.match(endKeywords) || trueText.match(middleKeywords) || trueText.match(/(\[])/)) return conf.indentUnit * (state.currentIndent - 1); if (state.currentIndent < 0) return 0; return state.currentIndent * conf.indentUnit; }, fold: "indent", electricInput: buildElectricInputRegEx(), lineComment: "%", blockCommentStart: "/*", blockCommentEnd: "*/" }; }); CodeMirror.defineMIME("text/x-oz", "oz"); }); PK!¥†ªë ë Ffile-manager-advanced/application/library/codemirror/mode/http/http.jsnu„[µü¤// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMode("http", function() { function failFirstLine(stream, state) { stream.skipToEnd(); state.cur = header; return "error"; } function start(stream, state) { if (stream.match(/^HTTP\/\d\.\d/)) { state.cur = responseStatusCode; return "keyword"; } else if (stream.match(/^[A-Z]+/) && /[ \t]/.test(stream.peek())) { state.cur = requestPath; return "keyword"; } else { return failFirstLine(stream, state); } } function responseStatusCode(stream, state) { var code = stream.match(/^\d+/); if (!code) return failFirstLine(stream, state); state.cur = responseStatusText; var status = Number(code[0]); if (status >= 100 && status < 200) { return "positive informational"; } else if (status >= 200 && status < 300) { return "positive success"; } else if (status >= 300 && status < 400) { return "positive redirect"; } else if (status >= 400 && status < 500) { return "negative client-error"; } else if (status >= 500 && status < 600) { return "negative server-error"; } else { return "error"; } } function responseStatusText(stream, state) { stream.skipToEnd(); state.cur = header; return null; } function requestPath(stream, state) { stream.eatWhile(/\S/); state.cur = requestProtocol; return "string-2"; } function requestProtocol(stream, state) { if (stream.match(/^HTTP\/\d\.\d$/)) { state.cur = header; return "keyword"; } else { return failFirstLine(stream, state); } } function header(stream) { if (stream.sol() && !stream.eat(/[ \t]/)) { if (stream.match(/^.*?:/)) { return "atom"; } else { stream.skipToEnd(); return "error"; } } else { stream.skipToEnd(); return "string"; } } function body(stream) { stream.skipToEnd(); return null; } return { token: function(stream, state) { var cur = state.cur; if (cur != header && cur != body && stream.eatSpace()) return null; return cur(stream, state); }, blankLine: function(state) { state.cur = body; }, startState: function() { return {cur: start}; } }; }); CodeMirror.defineMIME("message/http", "http"); }); PK!82/qqIfile-manager-advanced/application/library/codemirror/mode/http/index.htmlnu„[µü¤ CodeMirror: HTTP mode

    HTTP mode

    MIME types defined: message/http.

    PK!£…ðÀIfile-manager-advanced/application/library/codemirror/mode/perl/index.htmlnu„[µü¤ CodeMirror: Perl mode

    Perl mode

    MIME types defined: text/x-perl.

    PK!Î) ÂGÛGÛFfile-manager-advanced/application/library/codemirror/mode/perl/perl.jsnu„[µü¤// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE // CodeMirror2 mode/perl/perl.js (text/x-perl) beta 0.10 (2011-11-08) // This is a part of CodeMirror from https://github.com/sabaca/CodeMirror_mode_perl (mail@sabaca.com) (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMode("perl",function(){ // http://perldoc.perl.org var PERL={ // null - magic touch // 1 - keyword // 2 - def // 3 - atom // 4 - operator // 5 - variable-2 (predefined) // [x,y] - x=1,2,3; y=must be defined if x{...} // PERL operators '->' : 4, '++' : 4, '--' : 4, '**' : 4, // ! ~ \ and unary + and - '=~' : 4, '!~' : 4, '*' : 4, '/' : 4, '%' : 4, 'x' : 4, '+' : 4, '-' : 4, '.' : 4, '<<' : 4, '>>' : 4, // named unary operators '<' : 4, '>' : 4, '<=' : 4, '>=' : 4, 'lt' : 4, 'gt' : 4, 'le' : 4, 'ge' : 4, '==' : 4, '!=' : 4, '<=>' : 4, 'eq' : 4, 'ne' : 4, 'cmp' : 4, '~~' : 4, '&' : 4, '|' : 4, '^' : 4, '&&' : 4, '||' : 4, '//' : 4, '..' : 4, '...' : 4, '?' : 4, ':' : 4, '=' : 4, '+=' : 4, '-=' : 4, '*=' : 4, // etc. ??? ',' : 4, '=>' : 4, '::' : 4, // list operators (rightward) 'not' : 4, 'and' : 4, 'or' : 4, 'xor' : 4, // PERL predefined variables (I know, what this is a paranoid idea, but may be needed for people, who learn PERL, and for me as well, ...and may be for you?;) 'BEGIN' : [5,1], 'END' : [5,1], 'PRINT' : [5,1], 'PRINTF' : [5,1], 'GETC' : [5,1], 'READ' : [5,1], 'READLINE' : [5,1], 'DESTROY' : [5,1], 'TIE' : [5,1], 'TIEHANDLE' : [5,1], 'UNTIE' : [5,1], 'STDIN' : 5, 'STDIN_TOP' : 5, 'STDOUT' : 5, 'STDOUT_TOP' : 5, 'STDERR' : 5, 'STDERR_TOP' : 5, '$ARG' : 5, '$_' : 5, '@ARG' : 5, '@_' : 5, '$LIST_SEPARATOR' : 5, '$"' : 5, '$PROCESS_ID' : 5, '$PID' : 5, '$$' : 5, '$REAL_GROUP_ID' : 5, '$GID' : 5, '$(' : 5, '$EFFECTIVE_GROUP_ID' : 5, '$EGID' : 5, '$)' : 5, '$PROGRAM_NAME' : 5, '$0' : 5, '$SUBSCRIPT_SEPARATOR' : 5, '$SUBSEP' : 5, '$;' : 5, '$REAL_USER_ID' : 5, '$UID' : 5, '$<' : 5, '$EFFECTIVE_USER_ID' : 5, '$EUID' : 5, '$>' : 5, '$a' : 5, '$b' : 5, '$COMPILING' : 5, '$^C' : 5, '$DEBUGGING' : 5, '$^D' : 5, '${^ENCODING}' : 5, '$ENV' : 5, '%ENV' : 5, '$SYSTEM_FD_MAX' : 5, '$^F' : 5, '@F' : 5, '${^GLOBAL_PHASE}' : 5, '$^H' : 5, '%^H' : 5, '@INC' : 5, '%INC' : 5, '$INPLACE_EDIT' : 5, '$^I' : 5, '$^M' : 5, '$OSNAME' : 5, '$^O' : 5, '${^OPEN}' : 5, '$PERLDB' : 5, '$^P' : 5, '$SIG' : 5, '%SIG' : 5, '$BASETIME' : 5, '$^T' : 5, '${^TAINT}' : 5, '${^UNICODE}' : 5, '${^UTF8CACHE}' : 5, '${^UTF8LOCALE}' : 5, '$PERL_VERSION' : 5, '$^V' : 5, '${^WIN32_SLOPPY_STAT}' : 5, '$EXECUTABLE_NAME' : 5, '$^X' : 5, '$1' : 5, // - regexp $1, $2... '$MATCH' : 5, '$&' : 5, '${^MATCH}' : 5, '$PREMATCH' : 5, '$`' : 5, '${^PREMATCH}' : 5, '$POSTMATCH' : 5, "$'" : 5, '${^POSTMATCH}' : 5, '$LAST_PAREN_MATCH' : 5, '$+' : 5, '$LAST_SUBMATCH_RESULT' : 5, '$^N' : 5, '@LAST_MATCH_END' : 5, '@+' : 5, '%LAST_PAREN_MATCH' : 5, '%+' : 5, '@LAST_MATCH_START' : 5, '@-' : 5, '%LAST_MATCH_START' : 5, '%-' : 5, '$LAST_REGEXP_CODE_RESULT' : 5, '$^R' : 5, '${^RE_DEBUG_FLAGS}' : 5, '${^RE_TRIE_MAXBUF}' : 5, '$ARGV' : 5, '@ARGV' : 5, 'ARGV' : 5, 'ARGVOUT' : 5, '$OUTPUT_FIELD_SEPARATOR' : 5, '$OFS' : 5, '$,' : 5, '$INPUT_LINE_NUMBER' : 5, '$NR' : 5, '$.' : 5, '$INPUT_RECORD_SEPARATOR' : 5, '$RS' : 5, '$/' : 5, '$OUTPUT_RECORD_SEPARATOR' : 5, '$ORS' : 5, '$\\' : 5, '$OUTPUT_AUTOFLUSH' : 5, '$|' : 5, '$ACCUMULATOR' : 5, '$^A' : 5, '$FORMAT_FORMFEED' : 5, '$^L' : 5, '$FORMAT_PAGE_NUMBER' : 5, '$%' : 5, '$FORMAT_LINES_LEFT' : 5, '$-' : 5, '$FORMAT_LINE_BREAK_CHARACTERS' : 5, '$:' : 5, '$FORMAT_LINES_PER_PAGE' : 5, '$=' : 5, '$FORMAT_TOP_NAME' : 5, '$^' : 5, '$FORMAT_NAME' : 5, '$~' : 5, '${^CHILD_ERROR_NATIVE}' : 5, '$EXTENDED_OS_ERROR' : 5, '$^E' : 5, '$EXCEPTIONS_BEING_CAUGHT' : 5, '$^S' : 5, '$WARNING' : 5, '$^W' : 5, '${^WARNING_BITS}' : 5, '$OS_ERROR' : 5, '$ERRNO' : 5, '$!' : 5, '%OS_ERROR' : 5, '%ERRNO' : 5, '%!' : 5, '$CHILD_ERROR' : 5, '$?' : 5, '$EVAL_ERROR' : 5, '$@' : 5, '$OFMT' : 5, '$#' : 5, '$*' : 5, '$ARRAY_BASE' : 5, '$[' : 5, '$OLD_PERL_VERSION' : 5, '$]' : 5, // PERL blocks 'if' :[1,1], elsif :[1,1], 'else' :[1,1], 'while' :[1,1], unless :[1,1], 'for' :[1,1], foreach :[1,1], // PERL functions 'abs' :1, // - absolute value function accept :1, // - accept an incoming socket connect alarm :1, // - schedule a SIGALRM 'atan2' :1, // - arctangent of Y/X in the range -PI to PI bind :1, // - binds an address to a socket binmode :1, // - prepare binary files for I/O bless :1, // - create an object bootstrap :1, // 'break' :1, // - break out of a "given" block caller :1, // - get context of the current subroutine call chdir :1, // - change your current working directory chmod :1, // - changes the permissions on a list of files chomp :1, // - remove a trailing record separator from a string chop :1, // - remove the last character from a string chown :1, // - change the ownership on a list of files chr :1, // - get character this number represents chroot :1, // - make directory new root for path lookups close :1, // - close file (or pipe or socket) handle closedir :1, // - close directory handle connect :1, // - connect to a remote socket 'continue' :[1,1], // - optional trailing block in a while or foreach 'cos' :1, // - cosine function crypt :1, // - one-way passwd-style encryption dbmclose :1, // - breaks binding on a tied dbm file dbmopen :1, // - create binding on a tied dbm file 'default' :1, // defined :1, // - test whether a value, variable, or function is defined 'delete' :1, // - deletes a value from a hash die :1, // - raise an exception or bail out 'do' :1, // - turn a BLOCK into a TERM dump :1, // - create an immediate core dump each :1, // - retrieve the next key/value pair from a hash endgrent :1, // - be done using group file endhostent :1, // - be done using hosts file endnetent :1, // - be done using networks file endprotoent :1, // - be done using protocols file endpwent :1, // - be done using passwd file endservent :1, // - be done using services file eof :1, // - test a filehandle for its end 'eval' :1, // - catch exceptions or compile and run code 'exec' :1, // - abandon this program to run another exists :1, // - test whether a hash key is present exit :1, // - terminate this program 'exp' :1, // - raise I to a power fcntl :1, // - file control system call fileno :1, // - return file descriptor from filehandle flock :1, // - lock an entire file with an advisory lock fork :1, // - create a new process just like this one format :1, // - declare a picture format with use by the write() function formline :1, // - internal function used for formats getc :1, // - get the next character from the filehandle getgrent :1, // - get next group record getgrgid :1, // - get group record given group user ID getgrnam :1, // - get group record given group name gethostbyaddr :1, // - get host record given its address gethostbyname :1, // - get host record given name gethostent :1, // - get next hosts record getlogin :1, // - return who logged in at this tty getnetbyaddr :1, // - get network record given its address getnetbyname :1, // - get networks record given name getnetent :1, // - get next networks record getpeername :1, // - find the other end of a socket connection getpgrp :1, // - get process group getppid :1, // - get parent process ID getpriority :1, // - get current nice value getprotobyname :1, // - get protocol record given name getprotobynumber :1, // - get protocol record numeric protocol getprotoent :1, // - get next protocols record getpwent :1, // - get next passwd record getpwnam :1, // - get passwd record given user login name getpwuid :1, // - get passwd record given user ID getservbyname :1, // - get services record given its name getservbyport :1, // - get services record given numeric port getservent :1, // - get next services record getsockname :1, // - retrieve the sockaddr for a given socket getsockopt :1, // - get socket options on a given socket given :1, // glob :1, // - expand filenames using wildcards gmtime :1, // - convert UNIX time into record or string using Greenwich time 'goto' :1, // - create spaghetti code grep :1, // - locate elements in a list test true against a given criterion hex :1, // - convert a string to a hexadecimal number 'import' :1, // - patch a module's namespace into your own index :1, // - find a substring within a string 'int' :1, // - get the integer portion of a number ioctl :1, // - system-dependent device control system call 'join' :1, // - join a list into a string using a separator keys :1, // - retrieve list of indices from a hash kill :1, // - send a signal to a process or process group last :1, // - exit a block prematurely lc :1, // - return lower-case version of a string lcfirst :1, // - return a string with just the next letter in lower case length :1, // - return the number of bytes in a string 'link' :1, // - create a hard link in the filesytem listen :1, // - register your socket as a server local : 2, // - create a temporary value for a global variable (dynamic scoping) localtime :1, // - convert UNIX time into record or string using local time lock :1, // - get a thread lock on a variable, subroutine, or method 'log' :1, // - retrieve the natural logarithm for a number lstat :1, // - stat a symbolic link m :null, // - match a string with a regular expression pattern map :1, // - apply a change to a list to get back a new list with the changes mkdir :1, // - create a directory msgctl :1, // - SysV IPC message control operations msgget :1, // - get SysV IPC message queue msgrcv :1, // - receive a SysV IPC message from a message queue msgsnd :1, // - send a SysV IPC message to a message queue my : 2, // - declare and assign a local variable (lexical scoping) 'new' :1, // next :1, // - iterate a block prematurely no :1, // - unimport some module symbols or semantics at compile time oct :1, // - convert a string to an octal number open :1, // - open a file, pipe, or descriptor opendir :1, // - open a directory ord :1, // - find a character's numeric representation our : 2, // - declare and assign a package variable (lexical scoping) pack :1, // - convert a list into a binary representation 'package' :1, // - declare a separate global namespace pipe :1, // - open a pair of connected filehandles pop :1, // - remove the last element from an array and return it pos :1, // - find or set the offset for the last/next m//g search print :1, // - output a list to a filehandle printf :1, // - output a formatted list to a filehandle prototype :1, // - get the prototype (if any) of a subroutine push :1, // - append one or more elements to an array q :null, // - singly quote a string qq :null, // - doubly quote a string qr :null, // - Compile pattern quotemeta :null, // - quote regular expression magic characters qw :null, // - quote a list of words qx :null, // - backquote quote a string rand :1, // - retrieve the next pseudorandom number read :1, // - fixed-length buffered input from a filehandle readdir :1, // - get a directory from a directory handle readline :1, // - fetch a record from a file readlink :1, // - determine where a symbolic link is pointing readpipe :1, // - execute a system command and collect standard output recv :1, // - receive a message over a Socket redo :1, // - start this loop iteration over again ref :1, // - find out the type of thing being referenced rename :1, // - change a filename require :1, // - load in external functions from a library at runtime reset :1, // - clear all variables of a given name 'return' :1, // - get out of a function early reverse :1, // - flip a string or a list rewinddir :1, // - reset directory handle rindex :1, // - right-to-left substring search rmdir :1, // - remove a directory s :null, // - replace a pattern with a string say :1, // - print with newline scalar :1, // - force a scalar context seek :1, // - reposition file pointer for random-access I/O seekdir :1, // - reposition directory pointer select :1, // - reset default output or do I/O multiplexing semctl :1, // - SysV semaphore control operations semget :1, // - get set of SysV semaphores semop :1, // - SysV semaphore operations send :1, // - send a message over a socket setgrent :1, // - prepare group file for use sethostent :1, // - prepare hosts file for use setnetent :1, // - prepare networks file for use setpgrp :1, // - set the process group of a process setpriority :1, // - set a process's nice value setprotoent :1, // - prepare protocols file for use setpwent :1, // - prepare passwd file for use setservent :1, // - prepare services file for use setsockopt :1, // - set some socket options shift :1, // - remove the first element of an array, and return it shmctl :1, // - SysV shared memory operations shmget :1, // - get SysV shared memory segment identifier shmread :1, // - read SysV shared memory shmwrite :1, // - write SysV shared memory shutdown :1, // - close down just half of a socket connection 'sin' :1, // - return the sine of a number sleep :1, // - block for some number of seconds socket :1, // - create a socket socketpair :1, // - create a pair of sockets 'sort' :1, // - sort a list of values splice :1, // - add or remove elements anywhere in an array 'split' :1, // - split up a string using a regexp delimiter sprintf :1, // - formatted print into a string 'sqrt' :1, // - square root function srand :1, // - seed the random number generator stat :1, // - get a file's status information state :1, // - declare and assign a state variable (persistent lexical scoping) study :1, // - optimize input data for repeated searches 'sub' :1, // - declare a subroutine, possibly anonymously 'substr' :1, // - get or alter a portion of a stirng symlink :1, // - create a symbolic link to a file syscall :1, // - execute an arbitrary system call sysopen :1, // - open a file, pipe, or descriptor sysread :1, // - fixed-length unbuffered input from a filehandle sysseek :1, // - position I/O pointer on handle used with sysread and syswrite system :1, // - run a separate program syswrite :1, // - fixed-length unbuffered output to a filehandle tell :1, // - get current seekpointer on a filehandle telldir :1, // - get current seekpointer on a directory handle tie :1, // - bind a variable to an object class tied :1, // - get a reference to the object underlying a tied variable time :1, // - return number of seconds since 1970 times :1, // - return elapsed time for self and child processes tr :null, // - transliterate a string truncate :1, // - shorten a file uc :1, // - return upper-case version of a string ucfirst :1, // - return a string with just the next letter in upper case umask :1, // - set file creation mode mask undef :1, // - remove a variable or function definition unlink :1, // - remove one link to a file unpack :1, // - convert binary structure into normal perl variables unshift :1, // - prepend more elements to the beginning of a list untie :1, // - break a tie binding to a variable use :1, // - load in a module at compile time utime :1, // - set a file's last access and modify times values :1, // - return a list of the values in a hash vec :1, // - test or set particular bits in a string wait :1, // - wait for any child process to die waitpid :1, // - wait for a particular child process to die wantarray :1, // - get void vs scalar vs list context of current subroutine call warn :1, // - print debugging info when :1, // write :1, // - print a picture record y :null}; // - transliterate a string var RXstyle="string-2"; var RXmodifiers=/[goseximacplud]/; // NOTE: "m", "s", "y" and "tr" need to correct real modifiers for each regexp type function tokenChain(stream,state,chain,style,tail){ // NOTE: chain.length > 2 is not working now (it's for s[...][...]geos;) state.chain=null; // 12 3tail state.style=null; state.tail=null; state.tokenize=function(stream,state){ var e=false,c,i=0; while(c=stream.next()){ if(c===chain[i]&&!e){ if(chain[++i]!==undefined){ state.chain=chain[i]; state.style=style; state.tail=tail;} else if(tail) stream.eatWhile(tail); state.tokenize=tokenPerl; return style;} e=!e&&c=="\\";} return style;}; return state.tokenize(stream,state);} function tokenSOMETHING(stream,state,string){ state.tokenize=function(stream,state){ if(stream.string==string) state.tokenize=tokenPerl; stream.skipToEnd(); return "string";}; return state.tokenize(stream,state);} function tokenPerl(stream,state){ if(stream.eatSpace()) return null; if(state.chain) return tokenChain(stream,state,state.chain,state.style,state.tail); if(stream.match(/^\-?[\d\.]/,false)) if(stream.match(/^(\-?(\d*\.\d+(e[+-]?\d+)?|\d+\.\d*)|0x[\da-fA-F]+|0b[01]+|\d+(e[+-]?\d+)?)/)) return 'number'; if(stream.match(/^<<(?=\w)/)){ // NOTE: <"],RXstyle,RXmodifiers);} if(/[\^'"!~\/]/.test(c)){ eatSuffix(stream, 1); return tokenChain(stream,state,[stream.eat(c)],RXstyle,RXmodifiers);}} else if(c=="q"){ c=look(stream, 1); if(c=="("){ eatSuffix(stream, 2); return tokenChain(stream,state,[")"],"string");} if(c=="["){ eatSuffix(stream, 2); return tokenChain(stream,state,["]"],"string");} if(c=="{"){ eatSuffix(stream, 2); return tokenChain(stream,state,["}"],"string");} if(c=="<"){ eatSuffix(stream, 2); return tokenChain(stream,state,[">"],"string");} if(/[\^'"!~\/]/.test(c)){ eatSuffix(stream, 1); return tokenChain(stream,state,[stream.eat(c)],"string");}} else if(c=="w"){ c=look(stream, 1); if(c=="("){ eatSuffix(stream, 2); return tokenChain(stream,state,[")"],"bracket");} if(c=="["){ eatSuffix(stream, 2); return tokenChain(stream,state,["]"],"bracket");} if(c=="{"){ eatSuffix(stream, 2); return tokenChain(stream,state,["}"],"bracket");} if(c=="<"){ eatSuffix(stream, 2); return tokenChain(stream,state,[">"],"bracket");} if(/[\^'"!~\/]/.test(c)){ eatSuffix(stream, 1); return tokenChain(stream,state,[stream.eat(c)],"bracket");}} else if(c=="r"){ c=look(stream, 1); if(c=="("){ eatSuffix(stream, 2); return tokenChain(stream,state,[")"],RXstyle,RXmodifiers);} if(c=="["){ eatSuffix(stream, 2); return tokenChain(stream,state,["]"],RXstyle,RXmodifiers);} if(c=="{"){ eatSuffix(stream, 2); return tokenChain(stream,state,["}"],RXstyle,RXmodifiers);} if(c=="<"){ eatSuffix(stream, 2); return tokenChain(stream,state,[">"],RXstyle,RXmodifiers);} if(/[\^'"!~\/]/.test(c)){ eatSuffix(stream, 1); return tokenChain(stream,state,[stream.eat(c)],RXstyle,RXmodifiers);}} else if(/[\^'"!~\/(\[{<]/.test(c)){ if(c=="("){ eatSuffix(stream, 1); return tokenChain(stream,state,[")"],"string");} if(c=="["){ eatSuffix(stream, 1); return tokenChain(stream,state,["]"],"string");} if(c=="{"){ eatSuffix(stream, 1); return tokenChain(stream,state,["}"],"string");} if(c=="<"){ eatSuffix(stream, 1); return tokenChain(stream,state,[">"],"string");} if(/[\^'"!~\/]/.test(c)){ return tokenChain(stream,state,[stream.eat(c)],"string");}}}} if(ch=="m"){ var c=look(stream, -2); if(!(c&&/\w/.test(c))){ c=stream.eat(/[(\[{<\^'"!~\/]/); if(c){ if(/[\^'"!~\/]/.test(c)){ return tokenChain(stream,state,[c],RXstyle,RXmodifiers);} if(c=="("){ return tokenChain(stream,state,[")"],RXstyle,RXmodifiers);} if(c=="["){ return tokenChain(stream,state,["]"],RXstyle,RXmodifiers);} if(c=="{"){ return tokenChain(stream,state,["}"],RXstyle,RXmodifiers);} if(c=="<"){ return tokenChain(stream,state,[">"],RXstyle,RXmodifiers);}}}} if(ch=="s"){ var c=/[\/>\]})\w]/.test(look(stream, -2)); if(!c){ c=stream.eat(/[(\[{<\^'"!~\/]/); if(c){ if(c=="[") return tokenChain(stream,state,["]","]"],RXstyle,RXmodifiers); if(c=="{") return tokenChain(stream,state,["}","}"],RXstyle,RXmodifiers); if(c=="<") return tokenChain(stream,state,[">",">"],RXstyle,RXmodifiers); if(c=="(") return tokenChain(stream,state,[")",")"],RXstyle,RXmodifiers); return tokenChain(stream,state,[c,c],RXstyle,RXmodifiers);}}} if(ch=="y"){ var c=/[\/>\]})\w]/.test(look(stream, -2)); if(!c){ c=stream.eat(/[(\[{<\^'"!~\/]/); if(c){ if(c=="[") return tokenChain(stream,state,["]","]"],RXstyle,RXmodifiers); if(c=="{") return tokenChain(stream,state,["}","}"],RXstyle,RXmodifiers); if(c=="<") return tokenChain(stream,state,[">",">"],RXstyle,RXmodifiers); if(c=="(") return tokenChain(stream,state,[")",")"],RXstyle,RXmodifiers); return tokenChain(stream,state,[c,c],RXstyle,RXmodifiers);}}} if(ch=="t"){ var c=/[\/>\]})\w]/.test(look(stream, -2)); if(!c){ c=stream.eat("r");if(c){ c=stream.eat(/[(\[{<\^'"!~\/]/); if(c){ if(c=="[") return tokenChain(stream,state,["]","]"],RXstyle,RXmodifiers); if(c=="{") return tokenChain(stream,state,["}","}"],RXstyle,RXmodifiers); if(c=="<") return tokenChain(stream,state,[">",">"],RXstyle,RXmodifiers); if(c=="(") return tokenChain(stream,state,[")",")"],RXstyle,RXmodifiers); return tokenChain(stream,state,[c,c],RXstyle,RXmodifiers);}}}} if(ch=="`"){ return tokenChain(stream,state,[ch],"variable-2");} if(ch=="/"){ if(!/~\s*$/.test(prefix(stream))) return "operator"; else return tokenChain(stream,state,[ch],RXstyle,RXmodifiers);} if(ch=="$"){ var p=stream.pos; if(stream.eatWhile(/\d/)||stream.eat("{")&&stream.eatWhile(/\d/)&&stream.eat("}")) return "variable-2"; else stream.pos=p;} if(/[$@%]/.test(ch)){ var p=stream.pos; if(stream.eat("^")&&stream.eat(/[A-Z]/)||!/[@$%&]/.test(look(stream, -2))&&stream.eat(/[=|\\\-#?@;:&`~\^!\[\]*'"$+.,\/<>()]/)){ var c=stream.current(); if(PERL[c]) return "variable-2";} stream.pos=p;} if(/[$@%&]/.test(ch)){ if(stream.eatWhile(/[\w$\[\]]/)||stream.eat("{")&&stream.eatWhile(/[\w$\[\]]/)&&stream.eat("}")){ var c=stream.current(); if(PERL[c]) return "variable-2"; else return "variable";}} if(ch=="#"){ if(look(stream, -2)!="$"){ stream.skipToEnd(); return "comment";}} if(/[:+\-\^*$&%@=<>!?|\/~\.]/.test(ch)){ var p=stream.pos; stream.eatWhile(/[:+\-\^*$&%@=<>!?|\/~\.]/); if(PERL[stream.current()]) return "operator"; else stream.pos=p;} if(ch=="_"){ if(stream.pos==1){ if(suffix(stream, 6)=="_END__"){ return tokenChain(stream,state,['\0'],"comment");} else if(suffix(stream, 7)=="_DATA__"){ return tokenChain(stream,state,['\0'],"variable-2");} else if(suffix(stream, 7)=="_C__"){ return tokenChain(stream,state,['\0'],"string");}}} if(/\w/.test(ch)){ var p=stream.pos; if(look(stream, -2)=="{"&&(look(stream, 0)=="}"||stream.eatWhile(/\w/)&&look(stream, 0)=="}")) return "string"; else stream.pos=p;} if(/[A-Z]/.test(ch)){ var l=look(stream, -2); var p=stream.pos; stream.eatWhile(/[A-Z_]/); if(/[\da-z]/.test(look(stream, 0))){ stream.pos=p;} else{ var c=PERL[stream.current()]; if(!c) return "meta"; if(c[1]) c=c[0]; if(l!=":"){ if(c==1) return "keyword"; else if(c==2) return "def"; else if(c==3) return "atom"; else if(c==4) return "operator"; else if(c==5) return "variable-2"; else return "meta";} else return "meta";}} if(/[a-zA-Z_]/.test(ch)){ var l=look(stream, -2); stream.eatWhile(/\w/); var c=PERL[stream.current()]; if(!c) return "meta"; if(c[1]) c=c[0]; if(l!=":"){ if(c==1) return "keyword"; else if(c==2) return "def"; else if(c==3) return "atom"; else if(c==4) return "operator"; else if(c==5) return "variable-2"; else return "meta";} else return "meta";} return null;} return { startState: function() { return { tokenize: tokenPerl, chain: null, style: null, tail: null }; }, token: function(stream, state) { return (state.tokenize || tokenPerl)(stream, state); }, lineComment: '#' }; }); CodeMirror.registerHelper("wordChars", "perl", /[\w$]/); CodeMirror.defineMIME("text/x-perl", "perl"); // it's like "peek", but need for look-ahead or look-behind if index < 0 function look(stream, c){ return stream.string.charAt(stream.pos+(c||0)); } // return a part of prefix of current stream from current position function prefix(stream, c){ if(c){ var x=stream.pos-c; return stream.string.substr((x>=0?x:0),c);} else{ return stream.string.substr(0,stream.pos-1); } } // return a part of suffix of current stream from current position function suffix(stream, c){ var y=stream.string.length; var x=y-stream.pos+1; return stream.string.substr(stream.pos,(c&&c=(y=stream.string.length-1)) stream.pos=y; else stream.pos=x; } }); PK!^ÝT*’’Lfile-manager-advanced/application/library/codemirror/mode/haskell/index.htmlnu„[µü¤ CodeMirror: Haskell mode

    Haskell mode

    MIME types defined: text/x-haskell.

    PK!ŸÆÁ#¥¥Lfile-manager-advanced/application/library/codemirror/mode/haskell/haskell.jsnu„[µü¤// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMode("haskell", function(_config, modeConfig) { function switchState(source, setState, f) { setState(f); return f(source, setState); } // These should all be Unicode extended, as per the Haskell 2010 report var smallRE = /[a-z_]/; var largeRE = /[A-Z]/; var digitRE = /\d/; var hexitRE = /[0-9A-Fa-f]/; var octitRE = /[0-7]/; var idRE = /[a-z_A-Z0-9'\xa1-\uffff]/; var symbolRE = /[-!#$%&*+.\/<=>?@\\^|~:]/; var specialRE = /[(),;[\]`{}]/; var whiteCharRE = /[ \t\v\f]/; // newlines are handled in tokenizer function normal(source, setState) { if (source.eatWhile(whiteCharRE)) { return null; } var ch = source.next(); if (specialRE.test(ch)) { if (ch == '{' && source.eat('-')) { var t = "comment"; if (source.eat('#')) { t = "meta"; } return switchState(source, setState, ncomment(t, 1)); } return null; } if (ch == '\'') { if (source.eat('\\')) { source.next(); // should handle other escapes here } else { source.next(); } if (source.eat('\'')) { return "string"; } return "error"; } if (ch == '"') { return switchState(source, setState, stringLiteral); } if (largeRE.test(ch)) { source.eatWhile(idRE); if (source.eat('.')) { return "qualifier"; } return "variable-2"; } if (smallRE.test(ch)) { source.eatWhile(idRE); return "variable"; } if (digitRE.test(ch)) { if (ch == '0') { if (source.eat(/[xX]/)) { source.eatWhile(hexitRE); // should require at least 1 return "integer"; } if (source.eat(/[oO]/)) { source.eatWhile(octitRE); // should require at least 1 return "number"; } } source.eatWhile(digitRE); var t = "number"; if (source.match(/^\.\d+/)) { t = "number"; } if (source.eat(/[eE]/)) { t = "number"; source.eat(/[-+]/); source.eatWhile(digitRE); // should require at least 1 } return t; } if (ch == "." && source.eat(".")) return "keyword"; if (symbolRE.test(ch)) { if (ch == '-' && source.eat(/-/)) { source.eatWhile(/-/); if (!source.eat(symbolRE)) { source.skipToEnd(); return "comment"; } } var t = "variable"; if (ch == ':') { t = "variable-2"; } source.eatWhile(symbolRE); return t; } return "error"; } function ncomment(type, nest) { if (nest == 0) { return normal; } return function(source, setState) { var currNest = nest; while (!source.eol()) { var ch = source.next(); if (ch == '{' && source.eat('-')) { ++currNest; } else if (ch == '-' && source.eat('}')) { --currNest; if (currNest == 0) { setState(normal); return type; } } } setState(ncomment(type, currNest)); return type; }; } function stringLiteral(source, setState) { while (!source.eol()) { var ch = source.next(); if (ch == '"') { setState(normal); return "string"; } if (ch == '\\') { if (source.eol() || source.eat(whiteCharRE)) { setState(stringGap); return "string"; } if (source.eat('&')) { } else { source.next(); // should handle other escapes here } } } setState(normal); return "error"; } function stringGap(source, setState) { if (source.eat('\\')) { return switchState(source, setState, stringLiteral); } source.next(); setState(normal); return "error"; } var wellKnownWords = (function() { var wkw = {}; function setType(t) { return function () { for (var i = 0; i < arguments.length; i++) wkw[arguments[i]] = t; }; } setType("keyword")( "case", "class", "data", "default", "deriving", "do", "else", "foreign", "if", "import", "in", "infix", "infixl", "infixr", "instance", "let", "module", "newtype", "of", "then", "type", "where", "_"); setType("keyword")( "\.\.", ":", "::", "=", "\\", "\"", "<-", "->", "@", "~", "=>"); setType("builtin")( "!!", "$!", "$", "&&", "+", "++", "-", ".", "/", "/=", "<", "<=", "=<<", "==", ">", ">=", ">>", ">>=", "^", "^^", "||", "*", "**"); setType("builtin")( "Bool", "Bounded", "Char", "Double", "EQ", "Either", "Enum", "Eq", "False", "FilePath", "Float", "Floating", "Fractional", "Functor", "GT", "IO", "IOError", "Int", "Integer", "Integral", "Just", "LT", "Left", "Maybe", "Monad", "Nothing", "Num", "Ord", "Ordering", "Rational", "Read", "ReadS", "Real", "RealFloat", "RealFrac", "Right", "Show", "ShowS", "String", "True"); setType("builtin")( "abs", "acos", "acosh", "all", "and", "any", "appendFile", "asTypeOf", "asin", "asinh", "atan", "atan2", "atanh", "break", "catch", "ceiling", "compare", "concat", "concatMap", "const", "cos", "cosh", "curry", "cycle", "decodeFloat", "div", "divMod", "drop", "dropWhile", "either", "elem", "encodeFloat", "enumFrom", "enumFromThen", "enumFromThenTo", "enumFromTo", "error", "even", "exp", "exponent", "fail", "filter", "flip", "floatDigits", "floatRadix", "floatRange", "floor", "fmap", "foldl", "foldl1", "foldr", "foldr1", "fromEnum", "fromInteger", "fromIntegral", "fromRational", "fst", "gcd", "getChar", "getContents", "getLine", "head", "id", "init", "interact", "ioError", "isDenormalized", "isIEEE", "isInfinite", "isNaN", "isNegativeZero", "iterate", "last", "lcm", "length", "lex", "lines", "log", "logBase", "lookup", "map", "mapM", "mapM_", "max", "maxBound", "maximum", "maybe", "min", "minBound", "minimum", "mod", "negate", "not", "notElem", "null", "odd", "or", "otherwise", "pi", "pred", "print", "product", "properFraction", "putChar", "putStr", "putStrLn", "quot", "quotRem", "read", "readFile", "readIO", "readList", "readLn", "readParen", "reads", "readsPrec", "realToFrac", "recip", "rem", "repeat", "replicate", "return", "reverse", "round", "scaleFloat", "scanl", "scanl1", "scanr", "scanr1", "seq", "sequence", "sequence_", "show", "showChar", "showList", "showParen", "showString", "shows", "showsPrec", "significand", "signum", "sin", "sinh", "snd", "span", "splitAt", "sqrt", "subtract", "succ", "sum", "tail", "take", "takeWhile", "tan", "tanh", "toEnum", "toInteger", "toRational", "truncate", "uncurry", "undefined", "unlines", "until", "unwords", "unzip", "unzip3", "userError", "words", "writeFile", "zip", "zip3", "zipWith", "zipWith3"); var override = modeConfig.overrideKeywords; if (override) for (var word in override) if (override.hasOwnProperty(word)) wkw[word] = override[word]; return wkw; })(); return { startState: function () { return { f: normal }; }, copyState: function (s) { return { f: s.f }; }, token: function(stream, state) { var t = state.f(stream, function(s) { state.f = s; }); var w = stream.current(); return wellKnownWords.hasOwnProperty(w) ? wellKnownWords[w] : t; }, blockCommentStart: "{-", blockCommentEnd: "-}", lineComment: "--" }; }); CodeMirror.defineMIME("text/x-haskell", "haskell"); }); PK!‘*ìèèKfile-manager-advanced/application/library/codemirror/mode/factor/index.htmlnu„[µü¤ CodeMirror: Factor mode

    Factor mode

    Simple mode that handles Factor Syntax (Factor on WikiPedia).

    MIME types defined: text/x-factor.

    PK!ìÂÂg g Jfile-manager-advanced/application/library/codemirror/mode/factor/factor.jsnu„[µü¤// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE // Factor syntax highlight - simple mode // // by Dimage Sapelkin (https://github.com/kerabromsmu) (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror"), require("../../addon/mode/simple")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror", "../../addon/mode/simple"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineSimpleMode("factor", { // The start state contains the rules that are intially used start: [ // comments {regex: /#?!.*/, token: "comment"}, // strings """, multiline --> state {regex: /"""/, token: "string", next: "string3"}, {regex: /"/, token: "string", next: "string"}, // numbers: dec, hex, unicode, bin, fractional, complex {regex: /(?:[+-]?)(?:0x[\d,a-f]+)|(?:0o[0-7]+)|(?:0b[0,1]+)|(?:\d+.?\d*)/, token: "number"}, //{regex: /[+-]?/} //fractional // definition: defining word, defined word, etc {regex: /(\:)(\s+)(\S+)(\s+)(\()/, token: ["keyword", null, "def", null, "keyword"], next: "stack"}, // vocabulary using --> state {regex: /USING\:/, token: "keyword", next: "vocabulary"}, // vocabulary definition/use {regex: /(USE\:|IN\:)(\s+)(\S+)/, token: ["keyword", null, "variable-2"]}, // {regex: /<\S+>/, token: "builtin"}, // "keywords", incl. ; t f . [ ] { } defining words {regex: /;|t|f|if|\.|\[|\]|\{|\}|MAIN:/, token: "keyword"}, // any id (?) {regex: /\S+/, token: "variable"}, { regex: /./, token: null } ], vocabulary: [ {regex: /;/, token: "keyword", next: "start"}, {regex: /\S+/, token: "variable-2"}, { regex: /./, token: null } ], string: [ {regex: /(?:[^\\]|\\.)*?"/, token: "string", next: "start"}, {regex: /.*/, token: "string"} ], string3: [ {regex: /(?:[^\\]|\\.)*?"""/, token: "string", next: "start"}, {regex: /.*/, token: "string"} ], stack: [ {regex: /\)/, token: "meta", next: "start"}, {regex: /--/, token: "meta"}, {regex: /\S+/, token: "variable-3"}, { regex: /./, token: null } ], // The meta property contains global information about the mode. It // can contain properties like lineComment, which are supported by // all modes, and also directives like dontIndentStates, which are // specific to simple modes. meta: { dontIndentStates: ["start", "vocabulary", "string", "string3", "stack"], lineComment: [ "!", "#!" ] } }); CodeMirror.defineMIME("text/x-factor", "factor"); }); PK!bFšz˜˜Jfile-manager-advanced/application/library/codemirror/mode/webidl/webidl.jsnu„[µü¤// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; function wordRegexp(words) { return new RegExp("^((" + words.join(")|(") + "))\\b"); }; var builtinArray = [ "Clamp", "Constructor", "EnforceRange", "Exposed", "ImplicitThis", "Global", "PrimaryGlobal", "LegacyArrayClass", "LegacyUnenumerableNamedProperties", "LenientThis", "NamedConstructor", "NewObject", "NoInterfaceObject", "OverrideBuiltins", "PutForwards", "Replaceable", "SameObject", "TreatNonObjectAsNull", "TreatNullAs", "EmptyString", "Unforgeable", "Unscopeable" ]; var builtins = wordRegexp(builtinArray); var typeArray = [ "unsigned", "short", "long", // UnsignedIntegerType "unrestricted", "float", "double", // UnrestrictedFloatType "boolean", "byte", "octet", // Rest of PrimitiveType "Promise", // PromiseType "ArrayBuffer", "DataView", "Int8Array", "Int16Array", "Int32Array", "Uint8Array", "Uint16Array", "Uint32Array", "Uint8ClampedArray", "Float32Array", "Float64Array", // BufferRelatedType "ByteString", "DOMString", "USVString", "sequence", "object", "RegExp", "Error", "DOMException", "FrozenArray", // Rest of NonAnyType "any", // Rest of SingleType "void" // Rest of ReturnType ]; var types = wordRegexp(typeArray); var keywordArray = [ "attribute", "callback", "const", "deleter", "dictionary", "enum", "getter", "implements", "inherit", "interface", "iterable", "legacycaller", "maplike", "partial", "required", "serializer", "setlike", "setter", "static", "stringifier", "typedef", // ArgumentNameKeyword except // "unrestricted" "optional", "readonly", "or" ]; var keywords = wordRegexp(keywordArray); var atomArray = [ "true", "false", // BooleanLiteral "Infinity", "NaN", // FloatLiteral "null" // Rest of ConstValue ]; var atoms = wordRegexp(atomArray); CodeMirror.registerHelper("hintWords", "webidl", builtinArray.concat(typeArray).concat(keywordArray).concat(atomArray)); var startDefArray = ["callback", "dictionary", "enum", "interface"]; var startDefs = wordRegexp(startDefArray); var endDefArray = ["typedef"]; var endDefs = wordRegexp(endDefArray); var singleOperators = /^[:<=>?]/; var integers = /^-?([1-9][0-9]*|0[Xx][0-9A-Fa-f]+|0[0-7]*)/; var floats = /^-?(([0-9]+\.[0-9]*|[0-9]*\.[0-9]+)([Ee][+-]?[0-9]+)?|[0-9]+[Ee][+-]?[0-9]+)/; var identifiers = /^_?[A-Za-z][0-9A-Z_a-z-]*/; var identifiersEnd = /^_?[A-Za-z][0-9A-Z_a-z-]*(?=\s*;)/; var strings = /^"[^"]*"/; var multilineComments = /^\/\*.*?\*\//; var multilineCommentsStart = /^\/\*.*/; var multilineCommentsEnd = /^.*?\*\//; function readToken(stream, state) { // whitespace if (stream.eatSpace()) return null; // comment if (state.inComment) { if (stream.match(multilineCommentsEnd)) { state.inComment = false; return "comment"; } stream.skipToEnd(); return "comment"; } if (stream.match("//")) { stream.skipToEnd(); return "comment"; } if (stream.match(multilineComments)) return "comment"; if (stream.match(multilineCommentsStart)) { state.inComment = true; return "comment"; } // integer and float if (stream.match(/^-?[0-9\.]/, false)) { if (stream.match(integers) || stream.match(floats)) return "number"; } // string if (stream.match(strings)) return "string"; // identifier if (state.startDef && stream.match(identifiers)) return "def"; if (state.endDef && stream.match(identifiersEnd)) { state.endDef = false; return "def"; } if (stream.match(keywords)) return "keyword"; if (stream.match(types)) { var lastToken = state.lastToken; var nextToken = (stream.match(/^\s*(.+?)\b/, false) || [])[1]; if (lastToken === ":" || lastToken === "implements" || nextToken === "implements" || nextToken === "=") { // Used as identifier return "builtin"; } else { // Used as type return "variable-3"; } } if (stream.match(builtins)) return "builtin"; if (stream.match(atoms)) return "atom"; if (stream.match(identifiers)) return "variable"; // other if (stream.match(singleOperators)) return "operator"; // unrecognized stream.next(); return null; }; CodeMirror.defineMode("webidl", function() { return { startState: function() { return { // Is in multiline comment inComment: false, // Last non-whitespace, matched token lastToken: "", // Next token is a definition startDef: false, // Last token of the statement is a definition endDef: false }; }, token: function(stream, state) { var style = readToken(stream, state); if (style) { var cur = stream.current(); state.lastToken = cur; if (style === "keyword") { state.startDef = startDefs.test(cur); state.endDef = state.endDef || endDefs.test(cur); } else { state.startDef = false; } } return style; } }; }); CodeMirror.defineMIME("text/x-webidl", "webidl"); }); PK!ÎK4{{Kfile-manager-advanced/application/library/codemirror/mode/webidl/index.htmlnu„[µü¤ CodeMirror: Web IDL mode

    Web IDL mode

    MIME type defined: text/x-webidl.

    PK!»’?IˆˆRfile-manager-advanced/application/library/codemirror/mode/commonlisp/commonlisp.jsnu„[µü¤// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMode("commonlisp", function (config) { var specialForm = /^(block|let*|return-from|catch|load-time-value|setq|eval-when|locally|symbol-macrolet|flet|macrolet|tagbody|function|multiple-value-call|the|go|multiple-value-prog1|throw|if|progn|unwind-protect|labels|progv|let|quote)$/; var assumeBody = /^with|^def|^do|^prog|case$|^cond$|bind$|when$|unless$/; var numLiteral = /^(?:[+\-]?(?:\d+|\d*\.\d+)(?:[efd][+\-]?\d+)?|[+\-]?\d+(?:\/[+\-]?\d+)?|#b[+\-]?[01]+|#o[+\-]?[0-7]+|#x[+\-]?[\da-f]+)/; var symbol = /[^\s'`,@()\[\]";]/; var type; function readSym(stream) { var ch; while (ch = stream.next()) { if (ch == "\\") stream.next(); else if (!symbol.test(ch)) { stream.backUp(1); break; } } return stream.current(); } function base(stream, state) { if (stream.eatSpace()) {type = "ws"; return null;} if (stream.match(numLiteral)) return "number"; var ch = stream.next(); if (ch == "\\") ch = stream.next(); if (ch == '"') return (state.tokenize = inString)(stream, state); else if (ch == "(") { type = "open"; return "bracket"; } else if (ch == ")" || ch == "]") { type = "close"; return "bracket"; } else if (ch == ";") { stream.skipToEnd(); type = "ws"; return "comment"; } else if (/['`,@]/.test(ch)) return null; else if (ch == "|") { if (stream.skipTo("|")) { stream.next(); return "symbol"; } else { stream.skipToEnd(); return "error"; } } else if (ch == "#") { var ch = stream.next(); if (ch == "[") { type = "open"; return "bracket"; } else if (/[+\-=\.']/.test(ch)) return null; else if (/\d/.test(ch) && stream.match(/^\d*#/)) return null; else if (ch == "|") return (state.tokenize = inComment)(stream, state); else if (ch == ":") { readSym(stream); return "meta"; } else return "error"; } else { var name = readSym(stream); if (name == ".") return null; type = "symbol"; if (name == "nil" || name == "t" || name.charAt(0) == ":") return "atom"; if (state.lastType == "open" && (specialForm.test(name) || assumeBody.test(name))) return "keyword"; if (name.charAt(0) == "&") return "variable-2"; return "variable"; } } function inString(stream, state) { var escaped = false, next; while (next = stream.next()) { if (next == '"' && !escaped) { state.tokenize = base; break; } escaped = !escaped && next == "\\"; } return "string"; } function inComment(stream, state) { var next, last; while (next = stream.next()) { if (next == "#" && last == "|") { state.tokenize = base; break; } last = next; } type = "ws"; return "comment"; } return { startState: function () { return {ctx: {prev: null, start: 0, indentTo: 0}, lastType: null, tokenize: base}; }, token: function (stream, state) { if (stream.sol() && typeof state.ctx.indentTo != "number") state.ctx.indentTo = state.ctx.start + 1; type = null; var style = state.tokenize(stream, state); if (type != "ws") { if (state.ctx.indentTo == null) { if (type == "symbol" && assumeBody.test(stream.current())) state.ctx.indentTo = state.ctx.start + config.indentUnit; else state.ctx.indentTo = "next"; } else if (state.ctx.indentTo == "next") { state.ctx.indentTo = stream.column(); } state.lastType = type; } if (type == "open") state.ctx = {prev: state.ctx, start: stream.column(), indentTo: null}; else if (type == "close") state.ctx = state.ctx.prev || state.ctx; return style; }, indent: function (state, _textAfter) { var i = state.ctx.indentTo; return typeof i == "number" ? i : state.ctx.start + 1; }, closeBrackets: {pairs: "()[]{}\"\""}, lineComment: ";;", blockCommentStart: "#|", blockCommentEnd: "|#" }; }); CodeMirror.defineMIME("text/x-common-lisp", "commonlisp"); }); PK!zÿ\##Ofile-manager-advanced/application/library/codemirror/mode/commonlisp/index.htmlnu„[µü¤ CodeMirror: Common Lisp mode

    Common Lisp mode

    MIME types defined: text/x-common-lisp.

    PK!Ž©�Ø…>…>Lfile-manager-advanced/application/library/codemirror/mode/clojure/clojure.jsnu„[µü¤// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE /** * Author: Hans Engel * Branched from CodeMirror's Scheme mode (by Koh Zi Han, based on implementation by Koh Zi Chun) */ (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMode("clojure", function (options) { var BUILTIN = "builtin", COMMENT = "comment", STRING = "string", CHARACTER = "string-2", ATOM = "atom", NUMBER = "number", BRACKET = "bracket", KEYWORD = "keyword", VAR = "variable"; var INDENT_WORD_SKIP = options.indentUnit || 2; var NORMAL_INDENT_UNIT = options.indentUnit || 2; function makeKeywords(str) { var obj = {}, words = str.split(" "); for (var i = 0; i < words.length; ++i) obj[words[i]] = true; return obj; } var atoms = makeKeywords("true false nil"); var keywords = makeKeywords( "defn defn- def def- defonce defmulti defmethod defmacro defstruct deftype defprotocol defrecord defproject deftest " + "slice defalias defhinted defmacro- defn-memo defnk defnk defonce- defunbound defunbound- defvar defvar- let letfn " + "do case cond condp for loop recur when when-not when-let when-first if if-let if-not . .. -> ->> doto and or dosync " + "doseq dotimes dorun doall load import unimport ns in-ns refer try catch finally throw with-open with-local-vars " + "binding gen-class gen-and-load-class gen-and-save-class handler-case handle"); var builtins = makeKeywords( "* *' *1 *2 *3 *agent* *allow-unresolved-vars* *assert* *clojure-version* *command-line-args* *compile-files* " + "*compile-path* *compiler-options* *data-readers* *e *err* *file* *flush-on-newline* *fn-loader* *in* " + "*math-context* *ns* *out* *print-dup* *print-length* *print-level* *print-meta* *print-readably* *read-eval* " + "*source-path* *unchecked-math* *use-context-classloader* *verbose-defrecords* *warn-on-reflection* + +' - -' -> " + "->> ->ArrayChunk ->Vec ->VecNode ->VecSeq -cache-protocol-fn -reset-methods .. / < <= = == > >= EMPTY-NODE accessor " + "aclone add-classpath add-watch agent agent-error agent-errors aget alength alias all-ns alter alter-meta! " + "alter-var-root amap ancestors and apply areduce array-map aset aset-boolean aset-byte aset-char aset-double " + "aset-float aset-int aset-long aset-short assert assoc assoc! assoc-in associative? atom await await-for await1 " + "bases bean bigdec bigint biginteger binding bit-and bit-and-not bit-clear bit-flip bit-not bit-or bit-set " + "bit-shift-left bit-shift-right bit-test bit-xor boolean boolean-array booleans bound-fn bound-fn* bound? butlast " + "byte byte-array bytes case cat cast char char-array char-escape-string char-name-string char? chars chunk chunk-append " + "chunk-buffer chunk-cons chunk-first chunk-next chunk-rest chunked-seq? class class? clear-agent-errors " + "clojure-version coll? comment commute comp comparator compare compare-and-set! compile complement completing concat cond condp " + "conj conj! cons constantly construct-proxy contains? count counted? create-ns create-struct cycle dec dec' decimal? " + "declare dedupe default-data-readers definline definterface defmacro defmethod defmulti defn defn- defonce defprotocol " + "defrecord defstruct deftype delay delay? deliver denominator deref derive descendants destructure disj disj! dissoc " + "dissoc! distinct distinct? doall dorun doseq dosync dotimes doto double double-array doubles drop drop-last " + "drop-while eduction empty empty? ensure enumeration-seq error-handler error-mode eval even? every-pred every? ex-data ex-info " + "extend extend-protocol extend-type extenders extends? false? ffirst file-seq filter filterv find find-keyword " + "find-ns find-protocol-impl find-protocol-method find-var first flatten float float-array float? floats flush fn fn? " + "fnext fnil for force format frequencies future future-call future-cancel future-cancelled? future-done? future? " + "gen-class gen-interface gensym get get-in get-method get-proxy-class get-thread-bindings get-validator group-by hash " + "hash-combine hash-map hash-set identical? identity if-let if-not ifn? import in-ns inc inc' init-proxy instance? " + "int int-array integer? interleave intern interpose into into-array ints io! isa? iterate iterator-seq juxt keep " + "keep-indexed key keys keyword keyword? last lazy-cat lazy-seq let letfn line-seq list list* list? load load-file " + "load-reader load-string loaded-libs locking long long-array longs loop macroexpand macroexpand-1 make-array " + "make-hierarchy map map-indexed map? mapcat mapv max max-key memfn memoize merge merge-with meta method-sig methods " + "min min-key mod munge name namespace namespace-munge neg? newline next nfirst nil? nnext not not-any? not-empty " + "not-every? not= ns ns-aliases ns-imports ns-interns ns-map ns-name ns-publics ns-refers ns-resolve ns-unalias " + "ns-unmap nth nthnext nthrest num number? numerator object-array odd? or parents partial partition partition-all " + "partition-by pcalls peek persistent! pmap pop pop! pop-thread-bindings pos? pr pr-str prefer-method prefers " + "primitives-classnames print print-ctor print-dup print-method print-simple print-str printf println println-str " + "prn prn-str promise proxy proxy-call-with-super proxy-mappings proxy-name proxy-super push-thread-bindings pvalues " + "quot rand rand-int rand-nth random-sample range ratio? rational? rationalize re-find re-groups re-matcher re-matches re-pattern " + "re-seq read read-line read-string realized? reduce reduce-kv reductions ref ref-history-count ref-max-history " + "ref-min-history ref-set refer refer-clojure reify release-pending-sends rem remove remove-all-methods " + "remove-method remove-ns remove-watch repeat repeatedly replace replicate require reset! reset-meta! resolve rest " + "restart-agent resultset-seq reverse reversible? rseq rsubseq satisfies? second select-keys send send-off seq seq? " + "seque sequence sequential? set set-error-handler! set-error-mode! set-validator! set? short short-array shorts " + "shuffle shutdown-agents slurp some some-fn sort sort-by sorted-map sorted-map-by sorted-set sorted-set-by sorted? " + "special-symbol? spit split-at split-with str string? struct struct-map subs subseq subvec supers swap! symbol " + "symbol? sync take take-last take-nth take-while test the-ns thread-bound? time to-array to-array-2d trampoline transduce " + "transient tree-seq true? type unchecked-add unchecked-add-int unchecked-byte unchecked-char unchecked-dec " + "unchecked-dec-int unchecked-divide-int unchecked-double unchecked-float unchecked-inc unchecked-inc-int " + "unchecked-int unchecked-long unchecked-multiply unchecked-multiply-int unchecked-negate unchecked-negate-int "+ "unchecked-remainder-int unchecked-short unchecked-subtract unchecked-subtract-int underive unquote " + "unquote-splicing update update-in update-proxy use val vals var-get var-set var? vary-meta vec vector vector-of " + "vector? volatile! volatile? vreset! vswap! when when-first when-let when-not while with-bindings with-bindings* with-in-str with-loading-context " + "with-local-vars with-meta with-open with-out-str with-precision with-redefs with-redefs-fn xml-seq zero? zipmap " + "*default-data-reader-fn* as-> cond-> cond->> reduced reduced? send-via set-agent-send-executor! " + "set-agent-send-off-executor! some-> some->>"); var indentKeys = makeKeywords( // Built-ins "ns fn def defn defmethod bound-fn if if-not case condp when while when-not when-first do future comment doto " + "locking proxy with-open with-precision reify deftype defrecord defprotocol extend extend-protocol extend-type " + "try catch " + // Binding forms "let letfn binding loop for doseq dotimes when-let if-let " + // Data structures "defstruct struct-map assoc " + // clojure.test "testing deftest " + // contrib "handler-case handle dotrace deftrace"); var tests = { digit: /\d/, digit_or_colon: /[\d:]/, hex: /[0-9a-f]/i, sign: /[+-]/, exponent: /e/i, keyword_char: /[^\s\(\[\;\)\]]/, symbol: /[\w*+!\-\._?:<>\/\xa1-\uffff]/, block_indent: /^(?:def|with)[^\/]+$|\/(?:def|with)/ }; function stateStack(indent, type, prev) { // represents a state stack object this.indent = indent; this.type = type; this.prev = prev; } function pushStack(state, indent, type) { state.indentStack = new stateStack(indent, type, state.indentStack); } function popStack(state) { state.indentStack = state.indentStack.prev; } function isNumber(ch, stream){ // hex if ( ch === '0' && stream.eat(/x/i) ) { stream.eatWhile(tests.hex); return true; } // leading sign if ( ( ch == '+' || ch == '-' ) && ( tests.digit.test(stream.peek()) ) ) { stream.eat(tests.sign); ch = stream.next(); } if ( tests.digit.test(ch) ) { stream.eat(ch); stream.eatWhile(tests.digit); if ( '.' == stream.peek() ) { stream.eat('.'); stream.eatWhile(tests.digit); } else if ('/' == stream.peek() ) { stream.eat('/'); stream.eatWhile(tests.digit); } if ( stream.eat(tests.exponent) ) { stream.eat(tests.sign); stream.eatWhile(tests.digit); } return true; } return false; } // Eat character that starts after backslash \ function eatCharacter(stream) { var first = stream.next(); // Read special literals: backspace, newline, space, return. // Just read all lowercase letters. if (first && first.match(/[a-z]/) && stream.match(/[a-z]+/, true)) { return; } // Read unicode character: \u1000 \uA0a1 if (first === "u") { stream.match(/[0-9a-z]{4}/i, true); } } return { startState: function () { return { indentStack: null, indentation: 0, mode: false }; }, token: function (stream, state) { if (state.indentStack == null && stream.sol()) { // update indentation, but only if indentStack is empty state.indentation = stream.indentation(); } // skip spaces if (state.mode != "string" && stream.eatSpace()) { return null; } var returnType = null; switch(state.mode){ case "string": // multi-line string parsing mode var next, escaped = false; while ((next = stream.next()) != null) { if (next == "\"" && !escaped) { state.mode = false; break; } escaped = !escaped && next == "\\"; } returnType = STRING; // continue on in string mode break; default: // default parsing mode var ch = stream.next(); if (ch == "\"") { state.mode = "string"; returnType = STRING; } else if (ch == "\\") { eatCharacter(stream); returnType = CHARACTER; } else if (ch == "'" && !( tests.digit_or_colon.test(stream.peek()) )) { returnType = ATOM; } else if (ch == ";") { // comment stream.skipToEnd(); // rest of the line is a comment returnType = COMMENT; } else if (isNumber(ch,stream)){ returnType = NUMBER; } else if (ch == "(" || ch == "[" || ch == "{" ) { var keyWord = '', indentTemp = stream.column(), letter; /** Either (indent-word .. (non-indent-word .. (;something else, bracket, etc. */ if (ch == "(") while ((letter = stream.eat(tests.keyword_char)) != null) { keyWord += letter; } if (keyWord.length > 0 && (indentKeys.propertyIsEnumerable(keyWord) || tests.block_indent.test(keyWord))) { // indent-word pushStack(state, indentTemp + INDENT_WORD_SKIP, ch); } else { // non-indent word // we continue eating the spaces stream.eatSpace(); if (stream.eol() || stream.peek() == ";") { // nothing significant after // we restart indentation the user defined spaces after pushStack(state, indentTemp + NORMAL_INDENT_UNIT, ch); } else { pushStack(state, indentTemp + stream.current().length, ch); // else we match } } stream.backUp(stream.current().length - 1); // undo all the eating returnType = BRACKET; } else if (ch == ")" || ch == "]" || ch == "}") { returnType = BRACKET; if (state.indentStack != null && state.indentStack.type == (ch == ")" ? "(" : (ch == "]" ? "[" :"{"))) { popStack(state); } } else if ( ch == ":" ) { stream.eatWhile(tests.symbol); return ATOM; } else { stream.eatWhile(tests.symbol); if (keywords && keywords.propertyIsEnumerable(stream.current())) { returnType = KEYWORD; } else if (builtins && builtins.propertyIsEnumerable(stream.current())) { returnType = BUILTIN; } else if (atoms && atoms.propertyIsEnumerable(stream.current())) { returnType = ATOM; } else { returnType = VAR; } } } return returnType; }, indent: function (state) { if (state.indentStack == null) return state.indentation; return state.indentStack.indent; }, closeBrackets: {pairs: "()[]{}\"\""}, lineComment: ";;" }; }); CodeMirror.defineMIME("text/x-clojure", "clojure"); CodeMirror.defineMIME("text/x-clojurescript", "clojure"); CodeMirror.defineMIME("application/edn", "clojure"); }); PK!æË# ö ö Lfile-manager-advanced/application/library/codemirror/mode/clojure/index.htmlnu„[µü¤ CodeMirror: Clojure mode

    Clojure mode

    MIME types defined: text/x-clojure.

    PK!¦Ö`……Kfile-manager-advanced/application/library/codemirror/mode/smarty/index.htmlnu„[µü¤ CodeMirror: Smarty mode

    Smarty mode

    Mode for Smarty version 2 or 3, which allows for custom delimiter tags.

    Several configuration parameters are supported:

    • leftDelimiter and rightDelimiter, which should be strings that determine where the Smarty syntax starts and ends.
    • version, which should be 2 or 3.
    • baseMode, which can be a mode spec like "text/html" to set a different background mode.

    MIME types defined: text/x-smarty

    Smarty 2, custom delimiters

    Smarty 3

    PK!È9Íô¬¬Jfile-manager-advanced/application/library/codemirror/mode/smarty/smarty.jsnu„[µü¤// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE /** * Smarty 2 and 3 mode. */ (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMode("smarty", function(config, parserConf) { var rightDelimiter = parserConf.rightDelimiter || "}"; var leftDelimiter = parserConf.leftDelimiter || "{"; var version = parserConf.version || 2; var baseMode = CodeMirror.getMode(config, parserConf.baseMode || "null"); var keyFunctions = ["debug", "extends", "function", "include", "literal"]; var regs = { operatorChars: /[+\-*&%=<>!?]/, validIdentifier: /[a-zA-Z0-9_]/, stringChar: /['"]/ }; var last; function cont(style, lastType) { last = lastType; return style; } function chain(stream, state, parser) { state.tokenize = parser; return parser(stream, state); } // Smarty 3 allows { and } surrounded by whitespace to NOT slip into Smarty mode function doesNotCount(stream, pos) { if (pos == null) pos = stream.pos; return version === 3 && leftDelimiter == "{" && (pos == stream.string.length || /\s/.test(stream.string.charAt(pos))); } function tokenTop(stream, state) { var string = stream.string; for (var scan = stream.pos;;) { var nextMatch = string.indexOf(leftDelimiter, scan); scan = nextMatch + leftDelimiter.length; if (nextMatch == -1 || !doesNotCount(stream, nextMatch + leftDelimiter.length)) break; } if (nextMatch == stream.pos) { stream.match(leftDelimiter); if (stream.eat("*")) { return chain(stream, state, tokenBlock("comment", "*" + rightDelimiter)); } else { state.depth++; state.tokenize = tokenSmarty; last = "startTag"; return "tag"; } } if (nextMatch > -1) stream.string = string.slice(0, nextMatch); var token = baseMode.token(stream, state.base); if (nextMatch > -1) stream.string = string; return token; } // parsing Smarty content function tokenSmarty(stream, state) { if (stream.match(rightDelimiter, true)) { if (version === 3) { state.depth--; if (state.depth <= 0) { state.tokenize = tokenTop; } } else { state.tokenize = tokenTop; } return cont("tag", null); } if (stream.match(leftDelimiter, true)) { state.depth++; return cont("tag", "startTag"); } var ch = stream.next(); if (ch == "$") { stream.eatWhile(regs.validIdentifier); return cont("variable-2", "variable"); } else if (ch == "|") { return cont("operator", "pipe"); } else if (ch == ".") { return cont("operator", "property"); } else if (regs.stringChar.test(ch)) { state.tokenize = tokenAttribute(ch); return cont("string", "string"); } else if (regs.operatorChars.test(ch)) { stream.eatWhile(regs.operatorChars); return cont("operator", "operator"); } else if (ch == "[" || ch == "]") { return cont("bracket", "bracket"); } else if (ch == "(" || ch == ")") { return cont("bracket", "operator"); } else if (/\d/.test(ch)) { stream.eatWhile(/\d/); return cont("number", "number"); } else { if (state.last == "variable") { if (ch == "@") { stream.eatWhile(regs.validIdentifier); return cont("property", "property"); } else if (ch == "|") { stream.eatWhile(regs.validIdentifier); return cont("qualifier", "modifier"); } } else if (state.last == "pipe") { stream.eatWhile(regs.validIdentifier); return cont("qualifier", "modifier"); } else if (state.last == "whitespace") { stream.eatWhile(regs.validIdentifier); return cont("attribute", "modifier"); } if (state.last == "property") { stream.eatWhile(regs.validIdentifier); return cont("property", null); } else if (/\s/.test(ch)) { last = "whitespace"; return null; } var str = ""; if (ch != "/") { str += ch; } var c = null; while (c = stream.eat(regs.validIdentifier)) { str += c; } for (var i=0, j=keyFunctions.length; i=\\'\\[\\]]"); var doubleOperators = new RegExp("^(('=)|(<=)|(>=)|('>)|('<)|([[)|(]])|(^$))"); var singleDelimiters = new RegExp("^[\\.,:]"); var brackets = new RegExp("[()]"); var identifiers = new RegExp("^[%A-Za-z][A-Za-z0-9]*"); var commandKeywords = ["break","close","do","else","for","goto", "halt", "hang", "if", "job","kill","lock","merge","new","open", "quit", "read", "set", "tcommit", "trollback", "tstart", "use", "view", "write", "xecute", "b","c","d","e","f","g", "h", "i", "j","k","l","m","n","o", "q", "r", "s", "tc", "tro", "ts", "u", "v", "w", "x"]; // The following list includes instrinsic functions _and_ special variables var intrinsicFuncsWords = ["\\$ascii", "\\$char", "\\$data", "\\$ecode", "\\$estack", "\\$etrap", "\\$extract", "\\$find", "\\$fnumber", "\\$get", "\\$horolog", "\\$io", "\\$increment", "\\$job", "\\$justify", "\\$length", "\\$name", "\\$next", "\\$order", "\\$piece", "\\$qlength", "\\$qsubscript", "\\$query", "\\$quit", "\\$random", "\\$reverse", "\\$select", "\\$stack", "\\$test", "\\$text", "\\$translate", "\\$view", "\\$x", "\\$y", "\\$a", "\\$c", "\\$d", "\\$e", "\\$ec", "\\$es", "\\$et", "\\$f", "\\$fn", "\\$g", "\\$h", "\\$i", "\\$j", "\\$l", "\\$n", "\\$na", "\\$o", "\\$p", "\\$q", "\\$ql", "\\$qs", "\\$r", "\\$re", "\\$s", "\\$st", "\\$t", "\\$tr", "\\$v", "\\$z"]; var intrinsicFuncs = wordRegexp(intrinsicFuncsWords); var command = wordRegexp(commandKeywords); function tokenBase(stream, state) { if (stream.sol()) { state.label = true; state.commandMode = 0; } // The character has meaning in MUMPS. Ignoring consecutive // spaces would interfere with interpreting whether the next non-space // character belongs to the command or argument context. // Examine each character and update a mode variable whose interpretation is: // >0 => command 0 => argument <0 => command post-conditional var ch = stream.peek(); if (ch == " " || ch == "\t") { // Pre-process state.label = false; if (state.commandMode == 0) state.commandMode = 1; else if ((state.commandMode < 0) || (state.commandMode == 2)) state.commandMode = 0; } else if ((ch != ".") && (state.commandMode > 0)) { if (ch == ":") state.commandMode = -1; // SIS - Command post-conditional else state.commandMode = 2; } // Do not color parameter list as line tag if ((ch === "(") || (ch === "\u0009")) state.label = false; // MUMPS comment starts with ";" if (ch === ";") { stream.skipToEnd(); return "comment"; } // Number Literals // SIS/RLM - MUMPS permits canonic number followed by concatenate operator if (stream.match(/^[-+]?\d+(\.\d+)?([eE][-+]?\d+)?/)) return "number"; // Handle Strings if (ch == '"') { if (stream.skipTo('"')) { stream.next(); return "string"; } else { stream.skipToEnd(); return "error"; } } // Handle operators and Delimiters if (stream.match(doubleOperators) || stream.match(singleOperators)) return "operator"; // Prevents leading "." in DO block from falling through to error if (stream.match(singleDelimiters)) return null; if (brackets.test(ch)) { stream.next(); return "bracket"; } if (state.commandMode > 0 && stream.match(command)) return "variable-2"; if (stream.match(intrinsicFuncs)) return "builtin"; if (stream.match(identifiers)) return "variable"; // Detect dollar-sign when not a documented intrinsic function // "^" may introduce a GVN or SSVN - Color same as function if (ch === "$" || ch === "^") { stream.next(); return "builtin"; } // MUMPS Indirection if (ch === "@") { stream.next(); return "string-2"; } if (/[\w%]/.test(ch)) { stream.eatWhile(/[\w%]/); return "variable"; } // Handle non-detected items stream.next(); return "error"; } return { startState: function() { return { label: false, commandMode: 0 }; }, token: function(stream, state) { var style = tokenBase(stream, state); if (state.label) return "tag"; return style; } }; }); CodeMirror.defineMIME("text/x-mumps", "mumps"); }); PK! ¨0 0 Jfile-manager-advanced/application/library/codemirror/mode/mumps/index.htmlnu„[µü¤ CodeMirror: MUMPS mode

    MUMPS mode

    PK!){Æ8®>®>Dfile-manager-advanced/application/library/codemirror/mode/pug/pug.jsnu„[µü¤// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror"), require("../javascript/javascript"), require("../css/css"), require("../htmlmixed/htmlmixed")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror", "../javascript/javascript", "../css/css", "../htmlmixed/htmlmixed"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMode("pug", function (config) { // token types var KEYWORD = 'keyword'; var DOCTYPE = 'meta'; var ID = 'builtin'; var CLASS = 'qualifier'; var ATTRS_NEST = { '{': '}', '(': ')', '[': ']' }; var jsMode = CodeMirror.getMode(config, 'javascript'); function State() { this.javaScriptLine = false; this.javaScriptLineExcludesColon = false; this.javaScriptArguments = false; this.javaScriptArgumentsDepth = 0; this.isInterpolating = false; this.interpolationNesting = 0; this.jsState = CodeMirror.startState(jsMode); this.restOfLine = ''; this.isIncludeFiltered = false; this.isEach = false; this.lastTag = ''; this.scriptType = ''; // Attributes Mode this.isAttrs = false; this.attrsNest = []; this.inAttributeName = true; this.attributeIsType = false; this.attrValue = ''; // Indented Mode this.indentOf = Infinity; this.indentToken = ''; this.innerMode = null; this.innerState = null; this.innerModeForLine = false; } /** * Safely copy a state * * @return {State} */ State.prototype.copy = function () { var res = new State(); res.javaScriptLine = this.javaScriptLine; res.javaScriptLineExcludesColon = this.javaScriptLineExcludesColon; res.javaScriptArguments = this.javaScriptArguments; res.javaScriptArgumentsDepth = this.javaScriptArgumentsDepth; res.isInterpolating = this.isInterpolating; res.interpolationNesting = this.interpolationNesting; res.jsState = CodeMirror.copyState(jsMode, this.jsState); res.innerMode = this.innerMode; if (this.innerMode && this.innerState) { res.innerState = CodeMirror.copyState(this.innerMode, this.innerState); } res.restOfLine = this.restOfLine; res.isIncludeFiltered = this.isIncludeFiltered; res.isEach = this.isEach; res.lastTag = this.lastTag; res.scriptType = this.scriptType; res.isAttrs = this.isAttrs; res.attrsNest = this.attrsNest.slice(); res.inAttributeName = this.inAttributeName; res.attributeIsType = this.attributeIsType; res.attrValue = this.attrValue; res.indentOf = this.indentOf; res.indentToken = this.indentToken; res.innerModeForLine = this.innerModeForLine; return res; }; function javaScript(stream, state) { if (stream.sol()) { // if javaScriptLine was set at end of line, ignore it state.javaScriptLine = false; state.javaScriptLineExcludesColon = false; } if (state.javaScriptLine) { if (state.javaScriptLineExcludesColon && stream.peek() === ':') { state.javaScriptLine = false; state.javaScriptLineExcludesColon = false; return; } var tok = jsMode.token(stream, state.jsState); if (stream.eol()) state.javaScriptLine = false; return tok || true; } } function javaScriptArguments(stream, state) { if (state.javaScriptArguments) { if (state.javaScriptArgumentsDepth === 0 && stream.peek() !== '(') { state.javaScriptArguments = false; return; } if (stream.peek() === '(') { state.javaScriptArgumentsDepth++; } else if (stream.peek() === ')') { state.javaScriptArgumentsDepth--; } if (state.javaScriptArgumentsDepth === 0) { state.javaScriptArguments = false; return; } var tok = jsMode.token(stream, state.jsState); return tok || true; } } function yieldStatement(stream) { if (stream.match(/^yield\b/)) { return 'keyword'; } } function doctype(stream) { if (stream.match(/^(?:doctype) *([^\n]+)?/)) { return DOCTYPE; } } function interpolation(stream, state) { if (stream.match('#{')) { state.isInterpolating = true; state.interpolationNesting = 0; return 'punctuation'; } } function interpolationContinued(stream, state) { if (state.isInterpolating) { if (stream.peek() === '}') { state.interpolationNesting--; if (state.interpolationNesting < 0) { stream.next(); state.isInterpolating = false; return 'punctuation'; } } else if (stream.peek() === '{') { state.interpolationNesting++; } return jsMode.token(stream, state.jsState) || true; } } function caseStatement(stream, state) { if (stream.match(/^case\b/)) { state.javaScriptLine = true; return KEYWORD; } } function when(stream, state) { if (stream.match(/^when\b/)) { state.javaScriptLine = true; state.javaScriptLineExcludesColon = true; return KEYWORD; } } function defaultStatement(stream) { if (stream.match(/^default\b/)) { return KEYWORD; } } function extendsStatement(stream, state) { if (stream.match(/^extends?\b/)) { state.restOfLine = 'string'; return KEYWORD; } } function append(stream, state) { if (stream.match(/^append\b/)) { state.restOfLine = 'variable'; return KEYWORD; } } function prepend(stream, state) { if (stream.match(/^prepend\b/)) { state.restOfLine = 'variable'; return KEYWORD; } } function block(stream, state) { if (stream.match(/^block\b *(?:(prepend|append)\b)?/)) { state.restOfLine = 'variable'; return KEYWORD; } } function include(stream, state) { if (stream.match(/^include\b/)) { state.restOfLine = 'string'; return KEYWORD; } } function includeFiltered(stream, state) { if (stream.match(/^include:([a-zA-Z0-9\-]+)/, false) && stream.match('include')) { state.isIncludeFiltered = true; return KEYWORD; } } function includeFilteredContinued(stream, state) { if (state.isIncludeFiltered) { var tok = filter(stream, state); state.isIncludeFiltered = false; state.restOfLine = 'string'; return tok; } } function mixin(stream, state) { if (stream.match(/^mixin\b/)) { state.javaScriptLine = true; return KEYWORD; } } function call(stream, state) { if (stream.match(/^\+([-\w]+)/)) { if (!stream.match(/^\( *[-\w]+ *=/, false)) { state.javaScriptArguments = true; state.javaScriptArgumentsDepth = 0; } return 'variable'; } if (stream.match(/^\+#{/, false)) { stream.next(); state.mixinCallAfter = true; return interpolation(stream, state); } } function callArguments(stream, state) { if (state.mixinCallAfter) { state.mixinCallAfter = false; if (!stream.match(/^\( *[-\w]+ *=/, false)) { state.javaScriptArguments = true; state.javaScriptArgumentsDepth = 0; } return true; } } function conditional(stream, state) { if (stream.match(/^(if|unless|else if|else)\b/)) { state.javaScriptLine = true; return KEYWORD; } } function each(stream, state) { if (stream.match(/^(- *)?(each|for)\b/)) { state.isEach = true; return KEYWORD; } } function eachContinued(stream, state) { if (state.isEach) { if (stream.match(/^ in\b/)) { state.javaScriptLine = true; state.isEach = false; return KEYWORD; } else if (stream.sol() || stream.eol()) { state.isEach = false; } else if (stream.next()) { while (!stream.match(/^ in\b/, false) && stream.next()); return 'variable'; } } } function whileStatement(stream, state) { if (stream.match(/^while\b/)) { state.javaScriptLine = true; return KEYWORD; } } function tag(stream, state) { var captures; if (captures = stream.match(/^(\w(?:[-:\w]*\w)?)\/?/)) { state.lastTag = captures[1].toLowerCase(); if (state.lastTag === 'script') { state.scriptType = 'application/javascript'; } return 'tag'; } } function filter(stream, state) { if (stream.match(/^:([\w\-]+)/)) { var innerMode; if (config && config.innerModes) { innerMode = config.innerModes(stream.current().substring(1)); } if (!innerMode) { innerMode = stream.current().substring(1); } if (typeof innerMode === 'string') { innerMode = CodeMirror.getMode(config, innerMode); } setInnerMode(stream, state, innerMode); return 'atom'; } } function code(stream, state) { if (stream.match(/^(!?=|-)/)) { state.javaScriptLine = true; return 'punctuation'; } } function id(stream) { if (stream.match(/^#([\w-]+)/)) { return ID; } } function className(stream) { if (stream.match(/^\.([\w-]+)/)) { return CLASS; } } function attrs(stream, state) { if (stream.peek() == '(') { stream.next(); state.isAttrs = true; state.attrsNest = []; state.inAttributeName = true; state.attrValue = ''; state.attributeIsType = false; return 'punctuation'; } } function attrsContinued(stream, state) { if (state.isAttrs) { if (ATTRS_NEST[stream.peek()]) { state.attrsNest.push(ATTRS_NEST[stream.peek()]); } if (state.attrsNest[state.attrsNest.length - 1] === stream.peek()) { state.attrsNest.pop(); } else if (stream.eat(')')) { state.isAttrs = false; return 'punctuation'; } if (state.inAttributeName && stream.match(/^[^=,\)!]+/)) { if (stream.peek() === '=' || stream.peek() === '!') { state.inAttributeName = false; state.jsState = CodeMirror.startState(jsMode); if (state.lastTag === 'script' && stream.current().trim().toLowerCase() === 'type') { state.attributeIsType = true; } else { state.attributeIsType = false; } } return 'attribute'; } var tok = jsMode.token(stream, state.jsState); if (state.attributeIsType && tok === 'string') { state.scriptType = stream.current().toString(); } if (state.attrsNest.length === 0 && (tok === 'string' || tok === 'variable' || tok === 'keyword')) { try { Function('', 'var x ' + state.attrValue.replace(/,\s*$/, '').replace(/^!/, '')); state.inAttributeName = true; state.attrValue = ''; stream.backUp(stream.current().length); return attrsContinued(stream, state); } catch (ex) { //not the end of an attribute } } state.attrValue += stream.current(); return tok || true; } } function attributesBlock(stream, state) { if (stream.match(/^&attributes\b/)) { state.javaScriptArguments = true; state.javaScriptArgumentsDepth = 0; return 'keyword'; } } function indent(stream) { if (stream.sol() && stream.eatSpace()) { return 'indent'; } } function comment(stream, state) { if (stream.match(/^ *\/\/(-)?([^\n]*)/)) { state.indentOf = stream.indentation(); state.indentToken = 'comment'; return 'comment'; } } function colon(stream) { if (stream.match(/^: */)) { return 'colon'; } } function text(stream, state) { if (stream.match(/^(?:\| ?| )([^\n]+)/)) { return 'string'; } if (stream.match(/^(<[^\n]*)/, false)) { // html string setInnerMode(stream, state, 'htmlmixed'); state.innerModeForLine = true; return innerMode(stream, state, true); } } function dot(stream, state) { if (stream.eat('.')) { var innerMode = null; if (state.lastTag === 'script' && state.scriptType.toLowerCase().indexOf('javascript') != -1) { innerMode = state.scriptType.toLowerCase().replace(/"|'/g, ''); } else if (state.lastTag === 'style') { innerMode = 'css'; } setInnerMode(stream, state, innerMode); return 'dot'; } } function fail(stream) { stream.next(); return null; } function setInnerMode(stream, state, mode) { mode = CodeMirror.mimeModes[mode] || mode; mode = config.innerModes ? config.innerModes(mode) || mode : mode; mode = CodeMirror.mimeModes[mode] || mode; mode = CodeMirror.getMode(config, mode); state.indentOf = stream.indentation(); if (mode && mode.name !== 'null') { state.innerMode = mode; } else { state.indentToken = 'string'; } } function innerMode(stream, state, force) { if (stream.indentation() > state.indentOf || (state.innerModeForLine && !stream.sol()) || force) { if (state.innerMode) { if (!state.innerState) { state.innerState = state.innerMode.startState ? CodeMirror.startState(state.innerMode, stream.indentation()) : {}; } return stream.hideFirstChars(state.indentOf + 2, function () { return state.innerMode.token(stream, state.innerState) || true; }); } else { stream.skipToEnd(); return state.indentToken; } } else if (stream.sol()) { state.indentOf = Infinity; state.indentToken = null; state.innerMode = null; state.innerState = null; } } function restOfLine(stream, state) { if (stream.sol()) { // if restOfLine was set at end of line, ignore it state.restOfLine = ''; } if (state.restOfLine) { stream.skipToEnd(); var tok = state.restOfLine; state.restOfLine = ''; return tok; } } function startState() { return new State(); } function copyState(state) { return state.copy(); } /** * Get the next token in the stream * * @param {Stream} stream * @param {State} state */ function nextToken(stream, state) { var tok = innerMode(stream, state) || restOfLine(stream, state) || interpolationContinued(stream, state) || includeFilteredContinued(stream, state) || eachContinued(stream, state) || attrsContinued(stream, state) || javaScript(stream, state) || javaScriptArguments(stream, state) || callArguments(stream, state) || yieldStatement(stream, state) || doctype(stream, state) || interpolation(stream, state) || caseStatement(stream, state) || when(stream, state) || defaultStatement(stream, state) || extendsStatement(stream, state) || append(stream, state) || prepend(stream, state) || block(stream, state) || include(stream, state) || includeFiltered(stream, state) || mixin(stream, state) || call(stream, state) || conditional(stream, state) || each(stream, state) || whileStatement(stream, state) || tag(stream, state) || filter(stream, state) || code(stream, state) || id(stream, state) || className(stream, state) || attrs(stream, state) || attributesBlock(stream, state) || indent(stream, state) || text(stream, state) || comment(stream, state) || colon(stream, state) || dot(stream, state) || fail(stream, state); return tok === true ? null : tok; } return { startState: startState, copyState: copyState, token: nextToken }; }, 'javascript', 'css', 'htmlmixed'); CodeMirror.defineMIME('text/x-pug', 'pug'); CodeMirror.defineMIME('text/x-jade', 'pug'); }); PK!M‚[¹ ¹ Hfile-manager-advanced/application/library/codemirror/mode/pug/index.htmlnu„[µü¤ CodeMirror: Pug Templating Mode

    Pug Templating Mode

    The Pug Templating Mode

    Created by Forbes Lindesay. Managed as part of a Brackets extension at https://github.com/ForbesLindesay/jade-brackets.

    MIME type defined: text/x-pug, text/x-jade.

    PK!-ƒŽ(ï ï Jfile-manager-advanced/application/library/codemirror/mode/pascal/pascal.jsnu„[µü¤// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMode("pascal", function() { function words(str) { var obj = {}, words = str.split(" "); for (var i = 0; i < words.length; ++i) obj[words[i]] = true; return obj; } var keywords = words("and array begin case const div do downto else end file for forward integer " + "boolean char function goto if in label mod nil not of or packed procedure " + "program record repeat set string then to type until var while with"); var atoms = {"null": true}; var isOperatorChar = /[+\-*&%=<>!?|\/]/; function tokenBase(stream, state) { var ch = stream.next(); if (ch == "#" && state.startOfLine) { stream.skipToEnd(); return "meta"; } if (ch == '"' || ch == "'") { state.tokenize = tokenString(ch); return state.tokenize(stream, state); } if (ch == "(" && stream.eat("*")) { state.tokenize = tokenComment; return tokenComment(stream, state); } if (/[\[\]{}\(\),;\:\.]/.test(ch)) { return null; } if (/\d/.test(ch)) { stream.eatWhile(/[\w\.]/); return "number"; } if (ch == "/") { if (stream.eat("/")) { stream.skipToEnd(); return "comment"; } } if (isOperatorChar.test(ch)) { stream.eatWhile(isOperatorChar); return "operator"; } stream.eatWhile(/[\w\$_]/); var cur = stream.current(); if (keywords.propertyIsEnumerable(cur)) return "keyword"; if (atoms.propertyIsEnumerable(cur)) return "atom"; return "variable"; } function tokenString(quote) { return function(stream, state) { var escaped = false, next, end = false; while ((next = stream.next()) != null) { if (next == quote && !escaped) {end = true; break;} escaped = !escaped && next == "\\"; } if (end || !escaped) state.tokenize = null; return "string"; }; } function tokenComment(stream, state) { var maybeEnd = false, ch; while (ch = stream.next()) { if (ch == ")" && maybeEnd) { state.tokenize = null; break; } maybeEnd = (ch == "*"); } return "comment"; } // Interface return { startState: function() { return {tokenize: null}; }, token: function(stream, state) { if (stream.eatSpace()) return null; var style = (state.tokenize || tokenBase)(stream, state); if (style == "comment" || style == "meta") return style; return style; }, electricChars: "{}" }; }); CodeMirror.defineMIME("text/x-pascal", "pascal"); }); PK!P„AŒ  Kfile-manager-advanced/application/library/codemirror/mode/pascal/index.htmlnu„[µü¤ CodeMirror: Pascal mode

    Pascal mode

    MIME types defined: text/x-pascal.

    PK!ÀÍH„„Pfile-manager-advanced/application/library/codemirror/mode/rpm/changes/index.htmlnu„[µü¤ CodeMirror: RPM changes mode

    RPM changes mode

    MIME types defined: text/x-rpm-changes.

    PK!ŒŸkŒHfile-manager-advanced/application/library/codemirror/mode/rpm/index.htmlnu„[µü¤ CodeMirror: RPM changes mode

    RPM changes mode

    RPM spec mode

    MIME types defined: text/x-rpm-spec, text/x-rpm-changes.

    PK!Ï âÀ¿¿Dfile-manager-advanced/application/library/codemirror/mode/rpm/rpm.jsnu„[µü¤// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMode("rpm-changes", function() { var headerSeperator = /^-+$/; var headerLine = /^(Mon|Tue|Wed|Thu|Fri|Sat|Sun) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) ?\d{1,2} \d{2}:\d{2}(:\d{2})? [A-Z]{3,4} \d{4} - /; var simpleEmail = /^[\w+.-]+@[\w.-]+/; return { token: function(stream) { if (stream.sol()) { if (stream.match(headerSeperator)) { return 'tag'; } if (stream.match(headerLine)) { return 'tag'; } } if (stream.match(simpleEmail)) { return 'string'; } stream.next(); return null; } }; }); CodeMirror.defineMIME("text/x-rpm-changes", "rpm-changes"); // Quick and dirty spec file highlighting CodeMirror.defineMode("rpm-spec", function() { var arch = /^(i386|i586|i686|x86_64|ppc64le|ppc64|ppc|ia64|s390x|s390|sparc64|sparcv9|sparc|noarch|alphaev6|alpha|hppa|mipsel)/; var preamble = /^[a-zA-Z0-9()]+:/; var section = /^%(debug_package|package|description|prep|build|install|files|clean|changelog|preinstall|preun|postinstall|postun|pretrans|posttrans|pre|post|triggerin|triggerun|verifyscript|check|triggerpostun|triggerprein|trigger)/; var control_flow_complex = /^%(ifnarch|ifarch|if)/; // rpm control flow macros var control_flow_simple = /^%(else|endif)/; // rpm control flow macros var operators = /^(\!|\?|\<\=|\<|\>\=|\>|\=\=|\&\&|\|\|)/; // operators in control flow macros return { startState: function () { return { controlFlow: false, macroParameters: false, section: false }; }, token: function (stream, state) { var ch = stream.peek(); if (ch == "#") { stream.skipToEnd(); return "comment"; } if (stream.sol()) { if (stream.match(preamble)) { return "header"; } if (stream.match(section)) { return "atom"; } } if (stream.match(/^\$\w+/)) { return "def"; } // Variables like '$RPM_BUILD_ROOT' if (stream.match(/^\$\{\w+\}/)) { return "def"; } // Variables like '${RPM_BUILD_ROOT}' if (stream.match(control_flow_simple)) { return "keyword"; } if (stream.match(control_flow_complex)) { state.controlFlow = true; return "keyword"; } if (state.controlFlow) { if (stream.match(operators)) { return "operator"; } if (stream.match(/^(\d+)/)) { return "number"; } if (stream.eol()) { state.controlFlow = false; } } if (stream.match(arch)) { if (stream.eol()) { state.controlFlow = false; } return "number"; } // Macros like '%make_install' or '%attr(0775,root,root)' if (stream.match(/^%[\w]+/)) { if (stream.match(/^\(/)) { state.macroParameters = true; } return "keyword"; } if (state.macroParameters) { if (stream.match(/^\d+/)) { return "number";} if (stream.match(/^\)/)) { state.macroParameters = false; return "keyword"; } } // Macros like '%{defined fedora}' if (stream.match(/^%\{\??[\w \-\:\!]+\}/)) { if (stream.eol()) { state.controlFlow = false; } return "def"; } //TODO: Include bash script sub-parser (CodeMirror supports that) stream.next(); return null; } }; }); CodeMirror.defineMIME("text/x-rpm-spec", "rpm-spec"); }); PK!+½*°ÛÛKfile-manager-advanced/application/library/codemirror/mode/jinja2/index.htmlnu„[µü¤ CodeMirror: Jinja2 mode

    Jinja2 mode

    PK!J»B¼¼Jfile-manager-advanced/application/library/codemirror/mode/jinja2/jinja2.jsnu„[µü¤// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMode("jinja2", function() { var keywords = ["and", "as", "block", "endblock", "by", "cycle", "debug", "else", "elif", "extends", "filter", "endfilter", "firstof", "for", "endfor", "if", "endif", "ifchanged", "endifchanged", "ifequal", "endifequal", "ifnotequal", "endifnotequal", "in", "include", "load", "not", "now", "or", "parsed", "regroup", "reversed", "spaceless", "endspaceless", "ssi", "templatetag", "openblock", "closeblock", "openvariable", "closevariable", "openbrace", "closebrace", "opencomment", "closecomment", "widthratio", "url", "with", "endwith", "get_current_language", "trans", "endtrans", "noop", "blocktrans", "endblocktrans", "get_available_languages", "get_current_language_bidi", "plural"], operator = /^[+\-*&%=<>!?|~^]/, sign = /^[:\[\(\{]/, atom = ["true", "false"], number = /^(\d[+\-\*\/])?\d+(\.\d+)?/; keywords = new RegExp("((" + keywords.join(")|(") + "))\\b"); atom = new RegExp("((" + atom.join(")|(") + "))\\b"); function tokenBase (stream, state) { var ch = stream.peek(); //Comment if (state.incomment) { if(!stream.skipTo("#}")) { stream.skipToEnd(); } else { stream.eatWhile(/\#|}/); state.incomment = false; } return "comment"; //Tag } else if (state.intag) { //After operator if(state.operator) { state.operator = false; if(stream.match(atom)) { return "atom"; } if(stream.match(number)) { return "number"; } } //After sign if(state.sign) { state.sign = false; if(stream.match(atom)) { return "atom"; } if(stream.match(number)) { return "number"; } } if(state.instring) { if(ch == state.instring) { state.instring = false; } stream.next(); return "string"; } else if(ch == "'" || ch == '"') { state.instring = ch; stream.next(); return "string"; } else if(stream.match(state.intag + "}") || stream.eat("-") && stream.match(state.intag + "}")) { state.intag = false; return "tag"; } else if(stream.match(operator)) { state.operator = true; return "operator"; } else if(stream.match(sign)) { state.sign = true; } else { if(stream.eat(" ") || stream.sol()) { if(stream.match(keywords)) { return "keyword"; } if(stream.match(atom)) { return "atom"; } if(stream.match(number)) { return "number"; } if(stream.sol()) { stream.next(); } } else { stream.next(); } } return "variable"; } else if (stream.eat("{")) { if (ch = stream.eat("#")) { state.incomment = true; if(!stream.skipTo("#}")) { stream.skipToEnd(); } else { stream.eatWhile(/\#|}/); state.incomment = false; } return "comment"; //Open tag } else if (ch = stream.eat(/\{|%/)) { //Cache close tag state.intag = ch; if(ch == "{") { state.intag = "}"; } stream.eat("-"); return "tag"; } } stream.next(); }; return { startState: function () { return {tokenize: tokenBase}; }, token: function (stream, state) { return state.tokenize(stream, state); } }; }); }); PK!n„°žÀ À Lfile-manager-advanced/application/library/codemirror/mode/tornado/tornado.jsnu„[µü¤// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror"), require("../htmlmixed/htmlmixed"), require("../../addon/mode/overlay")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror", "../htmlmixed/htmlmixed", "../../addon/mode/overlay"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMode("tornado:inner", function() { var keywords = ["and","as","assert","autoescape","block","break","class","comment","context", "continue","datetime","def","del","elif","else","end","escape","except", "exec","extends","false","finally","for","from","global","if","import","in", "include","is","json_encode","lambda","length","linkify","load","module", "none","not","or","pass","print","put","raise","raw","return","self","set", "squeeze","super","true","try","url_escape","while","with","without","xhtml_escape","yield"]; keywords = new RegExp("^((" + keywords.join(")|(") + "))\\b"); function tokenBase (stream, state) { stream.eatWhile(/[^\{]/); var ch = stream.next(); if (ch == "{") { if (ch = stream.eat(/\{|%|#/)) { state.tokenize = inTag(ch); return "tag"; } } } function inTag (close) { if (close == "{") { close = "}"; } return function (stream, state) { var ch = stream.next(); if ((ch == close) && stream.eat("}")) { state.tokenize = tokenBase; return "tag"; } if (stream.match(keywords)) { return "keyword"; } return close == "#" ? "comment" : "string"; }; } return { startState: function () { return {tokenize: tokenBase}; }, token: function (stream, state) { return state.tokenize(stream, state); } }; }); CodeMirror.defineMode("tornado", function(config) { var htmlBase = CodeMirror.getMode(config, "text/html"); var tornadoInner = CodeMirror.getMode(config, "tornado:inner"); return CodeMirror.overlayMode(htmlBase, tornadoInner); }); CodeMirror.defineMIME("text/x-tornado", "tornado"); }); PK!ÈUOÊ  Lfile-manager-advanced/application/library/codemirror/mode/tornado/index.htmlnu„[µü¤ CodeMirror: Tornado template mode

    Tornado template mode

    Mode for HTML with embedded Tornado template markup.

    MIME types defined: text/x-tornado

    PK!ŠRÄÐÐHfile-manager-advanced/application/library/codemirror/mode/php/index.htmlnu„[µü¤ CodeMirror: PHP mode

    PHP mode

    Simple HTML/PHP mode based on the C-like mode. Depends on XML, JavaScript, CSS, HTMLMixed, and C-like modes.

    MIME types defined: application/x-httpd-php (HTML with PHP code), text/x-php (plain, non-wrapped PHP code).

    PK!@7¹a0G0GDfile-manager-advanced/application/library/codemirror/mode/php/php.jsnu„[µü¤// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror"), require("../htmlmixed/htmlmixed"), require("../clike/clike")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror", "../htmlmixed/htmlmixed", "../clike/clike"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; function keywords(str) { var obj = {}, words = str.split(" "); for (var i = 0; i < words.length; ++i) obj[words[i]] = true; return obj; } // Helper for phpString function matchSequence(list, end, escapes) { if (list.length == 0) return phpString(end); return function (stream, state) { var patterns = list[0]; for (var i = 0; i < patterns.length; i++) if (stream.match(patterns[i][0])) { state.tokenize = matchSequence(list.slice(1), end); return patterns[i][1]; } state.tokenize = phpString(end, escapes); return "string"; }; } function phpString(closing, escapes) { return function(stream, state) { return phpString_(stream, state, closing, escapes); }; } function phpString_(stream, state, closing, escapes) { // "Complex" syntax if (escapes !== false && stream.match("${", false) || stream.match("{$", false)) { state.tokenize = null; return "string"; } // Simple syntax if (escapes !== false && stream.match(/^\$[a-zA-Z_][a-zA-Z0-9_]*/)) { // After the variable name there may appear array or object operator. if (stream.match("[", false)) { // Match array operator state.tokenize = matchSequence([ [["[", null]], [[/\d[\w\.]*/, "number"], [/\$[a-zA-Z_][a-zA-Z0-9_]*/, "variable-2"], [/[\w\$]+/, "variable"]], [["]", null]] ], closing, escapes); } if (stream.match(/\-\>\w/, false)) { // Match object operator state.tokenize = matchSequence([ [["->", null]], [[/[\w]+/, "variable"]] ], closing, escapes); } return "variable-2"; } var escaped = false; // Normal string while (!stream.eol() && (escaped || escapes === false || (!stream.match("{$", false) && !stream.match(/^(\$[a-zA-Z_][a-zA-Z0-9_]*|\$\{)/, false)))) { if (!escaped && stream.match(closing)) { state.tokenize = null; state.tokStack.pop(); state.tokStack.pop(); break; } escaped = stream.next() == "\\" && !escaped; } return "string"; } var phpKeywords = "abstract and array as break case catch class clone const continue declare default " + "do else elseif enddeclare endfor endforeach endif endswitch endwhile extends final " + "for foreach function global goto if implements interface instanceof namespace " + "new or private protected public static switch throw trait try use var while xor " + "die echo empty exit eval include include_once isset list require require_once return " + "print unset __halt_compiler self static parent yield insteadof finally"; var phpAtoms = "true false null TRUE FALSE NULL __CLASS__ __DIR__ __FILE__ __LINE__ __METHOD__ __FUNCTION__ __NAMESPACE__ __TRAIT__"; var phpBuiltin = "func_num_args func_get_arg func_get_args strlen strcmp strncmp strcasecmp strncasecmp each error_reporting define defined trigger_error user_error set_error_handler restore_error_handler get_declared_classes get_loaded_extensions extension_loaded get_extension_funcs debug_backtrace constant bin2hex hex2bin sleep usleep time mktime gmmktime strftime gmstrftime strtotime date gmdate getdate localtime checkdate flush wordwrap htmlspecialchars htmlentities html_entity_decode md5 md5_file crc32 getimagesize image_type_to_mime_type phpinfo phpversion phpcredits strnatcmp strnatcasecmp substr_count strspn strcspn strtok strtoupper strtolower strpos strrpos strrev hebrev hebrevc nl2br basename dirname pathinfo stripslashes stripcslashes strstr stristr strrchr str_shuffle str_word_count strcoll substr substr_replace quotemeta ucfirst ucwords strtr addslashes addcslashes rtrim str_replace str_repeat count_chars chunk_split trim ltrim strip_tags similar_text explode implode setlocale localeconv parse_str str_pad chop strchr sprintf printf vprintf vsprintf sscanf fscanf parse_url urlencode urldecode rawurlencode rawurldecode readlink linkinfo link unlink exec system escapeshellcmd escapeshellarg passthru shell_exec proc_open proc_close rand srand getrandmax mt_rand mt_srand mt_getrandmax base64_decode base64_encode abs ceil floor round is_finite is_nan is_infinite bindec hexdec octdec decbin decoct dechex base_convert number_format fmod ip2long long2ip getenv putenv getopt microtime gettimeofday getrusage uniqid quoted_printable_decode set_time_limit get_cfg_var magic_quotes_runtime set_magic_quotes_runtime get_magic_quotes_gpc get_magic_quotes_runtime import_request_variables error_log serialize unserialize memory_get_usage var_dump var_export debug_zval_dump print_r highlight_file show_source highlight_string ini_get ini_get_all ini_set ini_alter ini_restore get_include_path set_include_path restore_include_path setcookie header headers_sent connection_aborted connection_status ignore_user_abort parse_ini_file is_uploaded_file move_uploaded_file intval floatval doubleval strval gettype settype is_null is_resource is_bool is_long is_float is_int is_integer is_double is_real is_numeric is_string is_array is_object is_scalar ereg ereg_replace eregi eregi_replace split spliti join sql_regcase dl pclose popen readfile rewind rmdir umask fclose feof fgetc fgets fgetss fread fopen fpassthru ftruncate fstat fseek ftell fflush fwrite fputs mkdir rename copy tempnam tmpfile file file_get_contents file_put_contents stream_select stream_context_create stream_context_set_params stream_context_set_option stream_context_get_options stream_filter_prepend stream_filter_append fgetcsv flock get_meta_tags stream_set_write_buffer set_file_buffer set_socket_blocking stream_set_blocking socket_set_blocking stream_get_meta_data stream_register_wrapper stream_wrapper_register stream_set_timeout socket_set_timeout socket_get_status realpath fnmatch fsockopen pfsockopen pack unpack get_browser crypt opendir closedir chdir getcwd rewinddir readdir dir glob fileatime filectime filegroup fileinode filemtime fileowner fileperms filesize filetype file_exists is_writable is_writeable is_readable is_executable is_file is_dir is_link stat lstat chown touch clearstatcache mail ob_start ob_flush ob_clean ob_end_flush ob_end_clean ob_get_flush ob_get_clean ob_get_length ob_get_level ob_get_status ob_get_contents ob_implicit_flush ob_list_handlers ksort krsort natsort natcasesort asort arsort sort rsort usort uasort uksort shuffle array_walk count end prev next reset current key min max in_array array_search extract compact array_fill range array_multisort array_push array_pop array_shift array_unshift array_splice array_slice array_merge array_merge_recursive array_keys array_values array_count_values array_reverse array_reduce array_pad array_flip array_change_key_case array_rand array_unique array_intersect array_intersect_assoc array_diff array_diff_assoc array_sum array_filter array_map array_chunk array_key_exists array_intersect_key array_combine array_column pos sizeof key_exists assert assert_options version_compare ftok str_rot13 aggregate session_name session_module_name session_save_path session_id session_regenerate_id session_decode session_register session_unregister session_is_registered session_encode session_start session_destroy session_unset session_set_save_handler session_cache_limiter session_cache_expire session_set_cookie_params session_get_cookie_params session_write_close preg_match preg_match_all preg_replace preg_replace_callback preg_split preg_quote preg_grep overload ctype_alnum ctype_alpha ctype_cntrl ctype_digit ctype_lower ctype_graph ctype_print ctype_punct ctype_space ctype_upper ctype_xdigit virtual apache_request_headers apache_note apache_lookup_uri apache_child_terminate apache_setenv apache_response_headers apache_get_version getallheaders mysql_connect mysql_pconnect mysql_close mysql_select_db mysql_create_db mysql_drop_db mysql_query mysql_unbuffered_query mysql_db_query mysql_list_dbs mysql_list_tables mysql_list_fields mysql_list_processes mysql_error mysql_errno mysql_affected_rows mysql_insert_id mysql_result mysql_num_rows mysql_num_fields mysql_fetch_row mysql_fetch_array mysql_fetch_assoc mysql_fetch_object mysql_data_seek mysql_fetch_lengths mysql_fetch_field mysql_field_seek mysql_free_result mysql_field_name mysql_field_table mysql_field_len mysql_field_type mysql_field_flags mysql_escape_string mysql_real_escape_string mysql_stat mysql_thread_id mysql_client_encoding mysql_get_client_info mysql_get_host_info mysql_get_proto_info mysql_get_server_info mysql_info mysql mysql_fieldname mysql_fieldtable mysql_fieldlen mysql_fieldtype mysql_fieldflags mysql_selectdb mysql_createdb mysql_dropdb mysql_freeresult mysql_numfields mysql_numrows mysql_listdbs mysql_listtables mysql_listfields mysql_db_name mysql_dbname mysql_tablename mysql_table_name pg_connect pg_pconnect pg_close pg_connection_status pg_connection_busy pg_connection_reset pg_host pg_dbname pg_port pg_tty pg_options pg_ping pg_query pg_send_query pg_cancel_query pg_fetch_result pg_fetch_row pg_fetch_assoc pg_fetch_array pg_fetch_object pg_fetch_all pg_affected_rows pg_get_result pg_result_seek pg_result_status pg_free_result pg_last_oid pg_num_rows pg_num_fields pg_field_name pg_field_num pg_field_size pg_field_type pg_field_prtlen pg_field_is_null pg_get_notify pg_get_pid pg_result_error pg_last_error pg_last_notice pg_put_line pg_end_copy pg_copy_to pg_copy_from pg_trace pg_untrace pg_lo_create pg_lo_unlink pg_lo_open pg_lo_close pg_lo_read pg_lo_write pg_lo_read_all pg_lo_import pg_lo_export pg_lo_seek pg_lo_tell pg_escape_string pg_escape_bytea pg_unescape_bytea pg_client_encoding pg_set_client_encoding pg_meta_data pg_convert pg_insert pg_update pg_delete pg_select pg_exec pg_getlastoid pg_cmdtuples pg_errormessage pg_numrows pg_numfields pg_fieldname pg_fieldsize pg_fieldtype pg_fieldnum pg_fieldprtlen pg_fieldisnull pg_freeresult pg_result pg_loreadall pg_locreate pg_lounlink pg_loopen pg_loclose pg_loread pg_lowrite pg_loimport pg_loexport http_response_code get_declared_traits getimagesizefromstring socket_import_stream stream_set_chunk_size trait_exists header_register_callback class_uses session_status session_register_shutdown echo print global static exit array empty eval isset unset die include require include_once require_once json_decode json_encode json_last_error json_last_error_msg curl_close curl_copy_handle curl_errno curl_error curl_escape curl_exec curl_file_create curl_getinfo curl_init curl_multi_add_handle curl_multi_close curl_multi_exec curl_multi_getcontent curl_multi_info_read curl_multi_init curl_multi_remove_handle curl_multi_select curl_multi_setopt curl_multi_strerror curl_pause curl_reset curl_setopt_array curl_setopt curl_share_close curl_share_init curl_share_setopt curl_strerror curl_unescape curl_version mysqli_affected_rows mysqli_autocommit mysqli_change_user mysqli_character_set_name mysqli_close mysqli_commit mysqli_connect_errno mysqli_connect_error mysqli_connect mysqli_data_seek mysqli_debug mysqli_dump_debug_info mysqli_errno mysqli_error_list mysqli_error mysqli_fetch_all mysqli_fetch_array mysqli_fetch_assoc mysqli_fetch_field_direct mysqli_fetch_field mysqli_fetch_fields mysqli_fetch_lengths mysqli_fetch_object mysqli_fetch_row mysqli_field_count mysqli_field_seek mysqli_field_tell mysqli_free_result mysqli_get_charset mysqli_get_client_info mysqli_get_client_stats mysqli_get_client_version mysqli_get_connection_stats mysqli_get_host_info mysqli_get_proto_info mysqli_get_server_info mysqli_get_server_version mysqli_info mysqli_init mysqli_insert_id mysqli_kill mysqli_more_results mysqli_multi_query mysqli_next_result mysqli_num_fields mysqli_num_rows mysqli_options mysqli_ping mysqli_prepare mysqli_query mysqli_real_connect mysqli_real_escape_string mysqli_real_query mysqli_reap_async_query mysqli_refresh mysqli_rollback mysqli_select_db mysqli_set_charset mysqli_set_local_infile_default mysqli_set_local_infile_handler mysqli_sqlstate mysqli_ssl_set mysqli_stat mysqli_stmt_init mysqli_store_result mysqli_thread_id mysqli_thread_safe mysqli_use_result mysqli_warning_count"; CodeMirror.registerHelper("hintWords", "php", [phpKeywords, phpAtoms, phpBuiltin].join(" ").split(" ")); CodeMirror.registerHelper("wordChars", "php", /[\w$]/); var phpConfig = { name: "clike", helperType: "php", keywords: keywords(phpKeywords), blockKeywords: keywords("catch do else elseif for foreach if switch try while finally"), defKeywords: keywords("class function interface namespace trait"), atoms: keywords(phpAtoms), builtin: keywords(phpBuiltin), multiLineStrings: true, hooks: { "$": function(stream) { stream.eatWhile(/[\w\$_]/); return "variable-2"; }, "<": function(stream, state) { var before; if (before = stream.match(/<<\s*/)) { var quoted = stream.eat(/['"]/); stream.eatWhile(/[\w\.]/); var delim = stream.current().slice(before[0].length + (quoted ? 2 : 1)); if (quoted) stream.eat(quoted); if (delim) { (state.tokStack || (state.tokStack = [])).push(delim, 0); state.tokenize = phpString(delim, quoted != "'"); return "string"; } } return false; }, "#": function(stream) { while (!stream.eol() && !stream.match("?>", false)) stream.next(); return "comment"; }, "/": function(stream) { if (stream.eat("/")) { while (!stream.eol() && !stream.match("?>", false)) stream.next(); return "comment"; } return false; }, '"': function(_stream, state) { (state.tokStack || (state.tokStack = [])).push('"', 0); state.tokenize = phpString('"'); return "string"; }, "{": function(_stream, state) { if (state.tokStack && state.tokStack.length) state.tokStack[state.tokStack.length - 1]++; return false; }, "}": function(_stream, state) { if (state.tokStack && state.tokStack.length > 0 && !--state.tokStack[state.tokStack.length - 1]) { state.tokenize = phpString(state.tokStack[state.tokStack.length - 2]); } return false; } } }; CodeMirror.defineMode("php", function(config, parserConfig) { var htmlMode = CodeMirror.getMode(config, "text/html"); var phpMode = CodeMirror.getMode(config, phpConfig); function dispatch(stream, state) { var isPHP = state.curMode == phpMode; if (stream.sol() && state.pending && state.pending != '"' && state.pending != "'") state.pending = null; if (!isPHP) { if (stream.match(/^<\?\w*/)) { state.curMode = phpMode; if (!state.php) state.php = CodeMirror.startState(phpMode, htmlMode.indent(state.html, "")) state.curState = state.php; return "meta"; } if (state.pending == '"' || state.pending == "'") { while (!stream.eol() && stream.next() != state.pending) {} var style = "string"; } else if (state.pending && stream.pos < state.pending.end) { stream.pos = state.pending.end; var style = state.pending.style; } else { var style = htmlMode.token(stream, state.curState); } if (state.pending) state.pending = null; var cur = stream.current(), openPHP = cur.search(/<\?/), m; if (openPHP != -1) { if (style == "string" && (m = cur.match(/[\'\"]$/)) && !/\?>/.test(cur)) state.pending = m[0]; else state.pending = {end: stream.pos, style: style}; stream.backUp(cur.length - openPHP); } return style; } else if (isPHP && state.php.tokenize == null && stream.match("?>")) { state.curMode = htmlMode; state.curState = state.html; if (!state.php.context.prev) state.php = null; return "meta"; } else { return phpMode.token(stream, state.curState); } } return { startState: function() { var html = CodeMirror.startState(htmlMode) var php = parserConfig.startOpen ? CodeMirror.startState(phpMode) : null return {html: html, php: php, curMode: parserConfig.startOpen ? phpMode : htmlMode, curState: parserConfig.startOpen ? php : html, pending: null}; }, copyState: function(state) { var html = state.html, htmlNew = CodeMirror.copyState(htmlMode, html), php = state.php, phpNew = php && CodeMirror.copyState(phpMode, php), cur; if (state.curMode == htmlMode) cur = htmlNew; else cur = phpNew; return {html: htmlNew, php: phpNew, curMode: state.curMode, curState: cur, pending: state.pending}; }, token: dispatch, indent: function(state, textAfter) { if ((state.curMode != phpMode && /^\s*<\//.test(textAfter)) || (state.curMode == phpMode && /^\?>/.test(textAfter))) return htmlMode.indent(state.html, textAfter); return state.curMode.indent(state.curState, textAfter); }, blockCommentStart: "/*", blockCommentEnd: "*/", lineComment: "//", innerMode: function(state) { return {state: state.curState, mode: state.curMode}; } }; }, "htmlmixed", "clike"); CodeMirror.defineMIME("application/x-httpd-php", "php"); CodeMirror.defineMIME("application/x-httpd-php-open", {name: "php", startOpen: true}); CodeMirror.defineMIME("text/x-php", phpConfig); }); PK!ŸãÜííEfile-manager-advanced/application/library/codemirror/mode/php/test.jsnu„[µü¤// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function() { var mode = CodeMirror.getMode({indentUnit: 2}, "php"); function MT(name) { test.mode(name, mode, Array.prototype.slice.call(arguments, 1)); } MT('simple_test', '[meta ]'); MT('variable_interpolation_non_alphanumeric', '[meta $/$\\$}$\\\"$:$;$?$|$[[$]]$+$=aaa"]', '[meta ?>]'); MT('variable_interpolation_digits', '[meta ]'); MT('variable_interpolation_simple_syntax_1', '[meta ]'); MT('variable_interpolation_simple_syntax_2', '[meta ]'); MT('variable_interpolation_simple_syntax_3', '[meta [variable aaaaa][string .aaaaaa"];', '[keyword echo] [string "aaa][variable-2 $aaaa][string ->][variable-2 $aaaaa][string .aaaaaa"];', '[keyword echo] [string "aaa][variable-2 $aaaa]->[variable aaaaa][string [[2]].aaaaaa"];', '[keyword echo] [string "aaa][variable-2 $aaaa]->[variable aaaaa][string ->aaaa2.aaaaaa"];', '[meta ?>]'); MT('variable_interpolation_escaping', '[meta aaa.aaa"];', '[keyword echo] [string "aaa\\$aaaa[[2]]aaa.aaa"];', '[keyword echo] [string "aaa\\$aaaa[[asd]]aaa.aaa"];', '[keyword echo] [string "aaa{\\$aaaa->aaa.aaa"];', '[keyword echo] [string "aaa{\\$aaaa[[2]]aaa.aaa"];', '[keyword echo] [string "aaa{\\aaaaa[[asd]]aaa.aaa"];', '[keyword echo] [string "aaa\\${aaaa->aaa.aaa"];', '[keyword echo] [string "aaa\\${aaaa[[2]]aaa.aaa"];', '[keyword echo] [string "aaa\\${aaaa[[asd]]aaa.aaa"];', '[meta ?>]'); MT('variable_interpolation_complex_syntax_1', '[meta aaa.aaa"];', '[keyword echo] [string "aaa][variable-2 $]{[variable-2 $aaaa]}[string ->aaa.aaa"];', '[keyword echo] [string "aaa][variable-2 $]{[variable-2 $aaaa][[',' [number 42]',']]}[string ->aaa.aaa"];', '[keyword echo] [string "aaa][variable-2 $]{[variable aaaa][meta ?>]aaaaaa'); MT('variable_interpolation_complex_syntax_2', '[meta } $aaaaaa.aaa"];', '[keyword echo] [string "][variable-2 $]{[variable aaa][comment /*}?>*/][[',' [string "aaa][variable-2 $aaa][string {}][variable-2 $]{[variable aaa]}[string "]',']]}[string ->aaa.aaa"];', '[keyword echo] [string "][variable-2 $]{[variable aaa][comment /*} } $aaa } */]}[string ->aaa.aaa"];'); function build_recursive_monsters(nt, t, n){ var monsters = [t]; for (var i = 1; i <= n; ++i) monsters[i] = nt.join(monsters[i - 1]); return monsters; } var m1 = build_recursive_monsters( ['[string "][variable-2 $]{[variable aaa] [operator +] ', '}[string "]'], '[comment /* }?>} */] [string "aaa][variable-2 $aaa][string .aaa"]', 10 ); MT('variable_interpolation_complex_syntax_3_1', '[meta ]'); var m2 = build_recursive_monsters( ['[string "a][variable-2 $]{[variable aaa] [operator +] ', ' [operator +] ', '}[string .a"]'], '[comment /* }?>{{ */] [string "a?>}{{aa][variable-2 $aaa][string .a}a?>a"]', 5 ); MT('variable_interpolation_complex_syntax_3_2', '[meta ]'); function build_recursive_monsters_2(mf1, mf2, nt, t, n){ var monsters = [t]; for (var i = 1; i <= n; ++i) monsters[i] = nt[0] + mf1[i - 1] + nt[1] + mf2[i - 1] + nt[2] + monsters[i - 1] + nt[3]; return monsters; } var m3 = build_recursive_monsters_2( m1, m2, ['[string "a][variable-2 $]{[variable aaa] [operator +] ', ' [operator +] ', ' [operator +] ', '}[string .a"]'], '[comment /* }?>{{ */] [string "a?>}{{aa][variable-2 $aaa][string .a}a?>a"]', 4 ); MT('variable_interpolation_complex_syntax_3_3', '[meta ]'); MT("variable_interpolation_heredoc", "[meta CodeMirror: Forth mode

    Forth mode

    Simple mode that handle Forth-Syntax (Forth on WikiPedia).

    MIME types defined: text/x-forth.

    PK!¼Uô»nnHfile-manager-advanced/application/library/codemirror/mode/forth/forth.jsnu„[µü¤// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE // Author: Aliaksei Chapyzhenka (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; function toWordList(words) { var ret = []; words.split(' ').forEach(function(e){ ret.push({name: e}); }); return ret; } var coreWordList = toWordList( 'INVERT AND OR XOR\ 2* 2/ LSHIFT RSHIFT\ 0= = 0< < > U< MIN MAX\ 2DROP 2DUP 2OVER 2SWAP ?DUP DEPTH DROP DUP OVER ROT SWAP\ >R R> R@\ + - 1+ 1- ABS NEGATE\ S>D * M* UM*\ FM/MOD SM/REM UM/MOD */ */MOD / /MOD MOD\ HERE , @ ! CELL+ CELLS C, C@ C! CHARS 2@ 2!\ ALIGN ALIGNED +! ALLOT\ CHAR [CHAR] [ ] BL\ FIND EXECUTE IMMEDIATE COUNT LITERAL STATE\ ; DOES> >BODY\ EVALUATE\ SOURCE >IN\ <# # #S #> HOLD SIGN BASE >NUMBER HEX DECIMAL\ FILL MOVE\ . CR EMIT SPACE SPACES TYPE U. .R U.R\ ACCEPT\ TRUE FALSE\ <> U> 0<> 0>\ NIP TUCK ROLL PICK\ 2>R 2R@ 2R>\ WITHIN UNUSED MARKER\ I J\ TO\ COMPILE, [COMPILE]\ SAVE-INPUT RESTORE-INPUT\ PAD ERASE\ 2LITERAL DNEGATE\ D- D+ D0< D0= D2* D2/ D< D= DMAX DMIN D>S DABS\ M+ M*/ D. D.R 2ROT DU<\ CATCH THROW\ FREE RESIZE ALLOCATE\ CS-PICK CS-ROLL\ GET-CURRENT SET-CURRENT FORTH-WORDLIST GET-ORDER SET-ORDER\ PREVIOUS SEARCH-WORDLIST WORDLIST FIND ALSO ONLY FORTH DEFINITIONS ORDER\ -TRAILING /STRING SEARCH COMPARE CMOVE CMOVE> BLANK SLITERAL'); var immediateWordList = toWordList('IF ELSE THEN BEGIN WHILE REPEAT UNTIL RECURSE [IF] [ELSE] [THEN] ?DO DO LOOP +LOOP UNLOOP LEAVE EXIT AGAIN CASE OF ENDOF ENDCASE'); CodeMirror.defineMode('forth', function() { function searchWordList (wordList, word) { var i; for (i = wordList.length - 1; i >= 0; i--) { if (wordList[i].name === word.toUpperCase()) { return wordList[i]; } } return undefined; } return { startState: function() { return { state: '', base: 10, coreWordList: coreWordList, immediateWordList: immediateWordList, wordList: [] }; }, token: function (stream, stt) { var mat; if (stream.eatSpace()) { return null; } if (stt.state === '') { // interpretation if (stream.match(/^(\]|:NONAME)(\s|$)/i)) { stt.state = ' compilation'; return 'builtin compilation'; } mat = stream.match(/^(\:)\s+(\S+)(\s|$)+/); if (mat) { stt.wordList.push({name: mat[2].toUpperCase()}); stt.state = ' compilation'; return 'def' + stt.state; } mat = stream.match(/^(VARIABLE|2VARIABLE|CONSTANT|2CONSTANT|CREATE|POSTPONE|VALUE|WORD)\s+(\S+)(\s|$)+/i); if (mat) { stt.wordList.push({name: mat[2].toUpperCase()}); return 'def' + stt.state; } mat = stream.match(/^(\'|\[\'\])\s+(\S+)(\s|$)+/); if (mat) { return 'builtin' + stt.state; } } else { // compilation // ; [ if (stream.match(/^(\;|\[)(\s)/)) { stt.state = ''; stream.backUp(1); return 'builtin compilation'; } if (stream.match(/^(\;|\[)($)/)) { stt.state = ''; return 'builtin compilation'; } if (stream.match(/^(POSTPONE)\s+\S+(\s|$)+/)) { return 'builtin'; } } // dynamic wordlist mat = stream.match(/^(\S+)(\s+|$)/); if (mat) { if (searchWordList(stt.wordList, mat[1]) !== undefined) { return 'variable' + stt.state; } // comments if (mat[1] === '\\') { stream.skipToEnd(); return 'comment' + stt.state; } // core words if (searchWordList(stt.coreWordList, mat[1]) !== undefined) { return 'builtin' + stt.state; } if (searchWordList(stt.immediateWordList, mat[1]) !== undefined) { return 'keyword' + stt.state; } if (mat[1] === '(') { stream.eatWhile(function (s) { return s !== ')'; }); stream.eat(')'); return 'comment' + stt.state; } // // strings if (mat[1] === '.(') { stream.eatWhile(function (s) { return s !== ')'; }); stream.eat(')'); return 'string' + stt.state; } if (mat[1] === 'S"' || mat[1] === '."' || mat[1] === 'C"') { stream.eatWhile(function (s) { return s !== '"'; }); stream.eat('"'); return 'string' + stt.state; } // numbers if (mat[1] - 0xfffffffff) { return 'number' + stt.state; } // if (mat[1].match(/^[-+]?[0-9]+\.[0-9]*/)) { // return 'number' + stt.state; // } return 'atom' + stt.state; } } }; }); CodeMirror.defineMIME("text/x-forth", "forth"); }); PK!á9F£66Lfile-manager-advanced/application/library/codemirror/mode/textile/textile.jsnu„[µü¤// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") { // CommonJS mod(require("../../lib/codemirror")); } else if (typeof define == "function" && define.amd) { // AMD define(["../../lib/codemirror"], mod); } else { // Plain browser env mod(CodeMirror); } })(function(CodeMirror) { "use strict"; var TOKEN_STYLES = { addition: "positive", attributes: "attribute", bold: "strong", cite: "keyword", code: "atom", definitionList: "number", deletion: "negative", div: "punctuation", em: "em", footnote: "variable", footCite: "qualifier", header: "header", html: "comment", image: "string", italic: "em", link: "link", linkDefinition: "link", list1: "variable-2", list2: "variable-3", list3: "keyword", notextile: "string-2", pre: "operator", p: "property", quote: "bracket", span: "quote", specialChar: "tag", strong: "strong", sub: "builtin", sup: "builtin", table: "variable-3", tableHeading: "operator" }; function startNewLine(stream, state) { state.mode = Modes.newLayout; state.tableHeading = false; if (state.layoutType === "definitionList" && state.spanningLayout && stream.match(RE("definitionListEnd"), false)) state.spanningLayout = false; } function handlePhraseModifier(stream, state, ch) { if (ch === "_") { if (stream.eat("_")) return togglePhraseModifier(stream, state, "italic", /__/, 2); else return togglePhraseModifier(stream, state, "em", /_/, 1); } if (ch === "*") { if (stream.eat("*")) { return togglePhraseModifier(stream, state, "bold", /\*\*/, 2); } return togglePhraseModifier(stream, state, "strong", /\*/, 1); } if (ch === "[") { if (stream.match(/\d+\]/)) state.footCite = true; return tokenStyles(state); } if (ch === "(") { var spec = stream.match(/^(r|tm|c)\)/); if (spec) return tokenStylesWith(state, TOKEN_STYLES.specialChar); } if (ch === "<" && stream.match(/(\w+)[^>]+>[^<]+<\/\1>/)) return tokenStylesWith(state, TOKEN_STYLES.html); if (ch === "?" && stream.eat("?")) return togglePhraseModifier(stream, state, "cite", /\?\?/, 2); if (ch === "=" && stream.eat("=")) return togglePhraseModifier(stream, state, "notextile", /==/, 2); if (ch === "-" && !stream.eat("-")) return togglePhraseModifier(stream, state, "deletion", /-/, 1); if (ch === "+") return togglePhraseModifier(stream, state, "addition", /\+/, 1); if (ch === "~") return togglePhraseModifier(stream, state, "sub", /~/, 1); if (ch === "^") return togglePhraseModifier(stream, state, "sup", /\^/, 1); if (ch === "%") return togglePhraseModifier(stream, state, "span", /%/, 1); if (ch === "@") return togglePhraseModifier(stream, state, "code", /@/, 1); if (ch === "!") { var type = togglePhraseModifier(stream, state, "image", /(?:\([^\)]+\))?!/, 1); stream.match(/^:\S+/); // optional Url portion return type; } return tokenStyles(state); } function togglePhraseModifier(stream, state, phraseModifier, closeRE, openSize) { var charBefore = stream.pos > openSize ? stream.string.charAt(stream.pos - openSize - 1) : null; var charAfter = stream.peek(); if (state[phraseModifier]) { if ((!charAfter || /\W/.test(charAfter)) && charBefore && /\S/.test(charBefore)) { var type = tokenStyles(state); state[phraseModifier] = false; return type; } } else if ((!charBefore || /\W/.test(charBefore)) && charAfter && /\S/.test(charAfter) && stream.match(new RegExp("^.*\\S" + closeRE.source + "(?:\\W|$)"), false)) { state[phraseModifier] = true; state.mode = Modes.attributes; } return tokenStyles(state); }; function tokenStyles(state) { var disabled = textileDisabled(state); if (disabled) return disabled; var styles = []; if (state.layoutType) styles.push(TOKEN_STYLES[state.layoutType]); styles = styles.concat(activeStyles( state, "addition", "bold", "cite", "code", "deletion", "em", "footCite", "image", "italic", "link", "span", "strong", "sub", "sup", "table", "tableHeading")); if (state.layoutType === "header") styles.push(TOKEN_STYLES.header + "-" + state.header); return styles.length ? styles.join(" ") : null; } function textileDisabled(state) { var type = state.layoutType; switch(type) { case "notextile": case "code": case "pre": return TOKEN_STYLES[type]; default: if (state.notextile) return TOKEN_STYLES.notextile + (type ? (" " + TOKEN_STYLES[type]) : ""); return null; } } function tokenStylesWith(state, extraStyles) { var disabled = textileDisabled(state); if (disabled) return disabled; var type = tokenStyles(state); if (extraStyles) return type ? (type + " " + extraStyles) : extraStyles; else return type; } function activeStyles(state) { var styles = []; for (var i = 1; i < arguments.length; ++i) { if (state[arguments[i]]) styles.push(TOKEN_STYLES[arguments[i]]); } return styles; } function blankLine(state) { var spanningLayout = state.spanningLayout, type = state.layoutType; for (var key in state) if (state.hasOwnProperty(key)) delete state[key]; state.mode = Modes.newLayout; if (spanningLayout) { state.layoutType = type; state.spanningLayout = true; } } var REs = { cache: {}, single: { bc: "bc", bq: "bq", definitionList: /- [^(?::=)]+:=+/, definitionListEnd: /.*=:\s*$/, div: "div", drawTable: /\|.*\|/, foot: /fn\d+/, header: /h[1-6]/, html: /\s*<(?:\/)?(\w+)(?:[^>]+)?>(?:[^<]+<\/\1>)?/, link: /[^"]+":\S/, linkDefinition: /\[[^\s\]]+\]\S+/, list: /(?:#+|\*+)/, notextile: "notextile", para: "p", pre: "pre", table: "table", tableCellAttributes: /[\/\\]\d+/, tableHeading: /\|_\./, tableText: /[^"_\*\[\(\?\+~\^%@|-]+/, text: /[^!"_=\*\[\(<\?\+~\^%@-]+/ }, attributes: { align: /(?:<>|<|>|=)/, selector: /\([^\(][^\)]+\)/, lang: /\[[^\[\]]+\]/, pad: /(?:\(+|\)+){1,2}/, css: /\{[^\}]+\}/ }, createRe: function(name) { switch (name) { case "drawTable": return REs.makeRe("^", REs.single.drawTable, "$"); case "html": return REs.makeRe("^", REs.single.html, "(?:", REs.single.html, ")*", "$"); case "linkDefinition": return REs.makeRe("^", REs.single.linkDefinition, "$"); case "listLayout": return REs.makeRe("^", REs.single.list, RE("allAttributes"), "*\\s+"); case "tableCellAttributes": return REs.makeRe("^", REs.choiceRe(REs.single.tableCellAttributes, RE("allAttributes")), "+\\."); case "type": return REs.makeRe("^", RE("allTypes")); case "typeLayout": return REs.makeRe("^", RE("allTypes"), RE("allAttributes"), "*\\.\\.?", "(\\s+|$)"); case "attributes": return REs.makeRe("^", RE("allAttributes"), "+"); case "allTypes": return REs.choiceRe(REs.single.div, REs.single.foot, REs.single.header, REs.single.bc, REs.single.bq, REs.single.notextile, REs.single.pre, REs.single.table, REs.single.para); case "allAttributes": return REs.choiceRe(REs.attributes.selector, REs.attributes.css, REs.attributes.lang, REs.attributes.align, REs.attributes.pad); default: return REs.makeRe("^", REs.single[name]); } }, makeRe: function() { var pattern = ""; for (var i = 0; i < arguments.length; ++i) { var arg = arguments[i]; pattern += (typeof arg === "string") ? arg : arg.source; } return new RegExp(pattern); }, choiceRe: function() { var parts = [arguments[0]]; for (var i = 1; i < arguments.length; ++i) { parts[i * 2 - 1] = "|"; parts[i * 2] = arguments[i]; } parts.unshift("(?:"); parts.push(")"); return REs.makeRe.apply(null, parts); } }; function RE(name) { return (REs.cache[name] || (REs.cache[name] = REs.createRe(name))); } var Modes = { newLayout: function(stream, state) { if (stream.match(RE("typeLayout"), false)) { state.spanningLayout = false; return (state.mode = Modes.blockType)(stream, state); } var newMode; if (!textileDisabled(state)) { if (stream.match(RE("listLayout"), false)) newMode = Modes.list; else if (stream.match(RE("drawTable"), false)) newMode = Modes.table; else if (stream.match(RE("linkDefinition"), false)) newMode = Modes.linkDefinition; else if (stream.match(RE("definitionList"))) newMode = Modes.definitionList; else if (stream.match(RE("html"), false)) newMode = Modes.html; } return (state.mode = (newMode || Modes.text))(stream, state); }, blockType: function(stream, state) { var match, type; state.layoutType = null; if (match = stream.match(RE("type"))) type = match[0]; else return (state.mode = Modes.text)(stream, state); if (match = type.match(RE("header"))) { state.layoutType = "header"; state.header = parseInt(match[0][1]); } else if (type.match(RE("bq"))) { state.layoutType = "quote"; } else if (type.match(RE("bc"))) { state.layoutType = "code"; } else if (type.match(RE("foot"))) { state.layoutType = "footnote"; } else if (type.match(RE("notextile"))) { state.layoutType = "notextile"; } else if (type.match(RE("pre"))) { state.layoutType = "pre"; } else if (type.match(RE("div"))) { state.layoutType = "div"; } else if (type.match(RE("table"))) { state.layoutType = "table"; } state.mode = Modes.attributes; return tokenStyles(state); }, text: function(stream, state) { if (stream.match(RE("text"))) return tokenStyles(state); var ch = stream.next(); if (ch === '"') return (state.mode = Modes.link)(stream, state); return handlePhraseModifier(stream, state, ch); }, attributes: function(stream, state) { state.mode = Modes.layoutLength; if (stream.match(RE("attributes"))) return tokenStylesWith(state, TOKEN_STYLES.attributes); else return tokenStyles(state); }, layoutLength: function(stream, state) { if (stream.eat(".") && stream.eat(".")) state.spanningLayout = true; state.mode = Modes.text; return tokenStyles(state); }, list: function(stream, state) { var match = stream.match(RE("list")); state.listDepth = match[0].length; var listMod = (state.listDepth - 1) % 3; if (!listMod) state.layoutType = "list1"; else if (listMod === 1) state.layoutType = "list2"; else state.layoutType = "list3"; state.mode = Modes.attributes; return tokenStyles(state); }, link: function(stream, state) { state.mode = Modes.text; if (stream.match(RE("link"))) { stream.match(/\S+/); return tokenStylesWith(state, TOKEN_STYLES.link); } return tokenStyles(state); }, linkDefinition: function(stream, state) { stream.skipToEnd(); return tokenStylesWith(state, TOKEN_STYLES.linkDefinition); }, definitionList: function(stream, state) { stream.match(RE("definitionList")); state.layoutType = "definitionList"; if (stream.match(/\s*$/)) state.spanningLayout = true; else state.mode = Modes.attributes; return tokenStyles(state); }, html: function(stream, state) { stream.skipToEnd(); return tokenStylesWith(state, TOKEN_STYLES.html); }, table: function(stream, state) { state.layoutType = "table"; return (state.mode = Modes.tableCell)(stream, state); }, tableCell: function(stream, state) { if (stream.match(RE("tableHeading"))) state.tableHeading = true; else stream.eat("|"); state.mode = Modes.tableCellAttributes; return tokenStyles(state); }, tableCellAttributes: function(stream, state) { state.mode = Modes.tableText; if (stream.match(RE("tableCellAttributes"))) return tokenStylesWith(state, TOKEN_STYLES.attributes); else return tokenStyles(state); }, tableText: function(stream, state) { if (stream.match(RE("tableText"))) return tokenStyles(state); if (stream.peek() === "|") { // end of cell state.mode = Modes.tableCell; return tokenStyles(state); } return handlePhraseModifier(stream, state, stream.next()); } }; CodeMirror.defineMode("textile", function() { return { startState: function() { return { mode: Modes.newLayout }; }, token: function(stream, state) { if (stream.sol()) startNewLine(stream, state); return state.mode(stream, state); }, blankLine: blankLine }; }); CodeMirror.defineMIME("text/x-textile", "textile"); }); PK!±û²ûûLfile-manager-advanced/application/library/codemirror/mode/textile/index.htmlnu„[µü¤ CodeMirror: Textile mode

    Textile mode

    MIME types defined: text/x-textile.

    Parsing/Highlighting Tests: normal, verbose.

    PK! ¶­Ý$Ý$Ifile-manager-advanced/application/library/codemirror/mode/textile/test.jsnu„[µü¤// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function() { var mode = CodeMirror.getMode({tabSize: 4}, 'textile'); function MT(name) { test.mode(name, mode, Array.prototype.slice.call(arguments, 1)); } MT('simpleParagraphs', 'Some text.', '', 'Some more text.'); /* * Phrase Modifiers */ MT('em', 'foo [em _bar_]'); MT('emBoogus', 'code_mirror'); MT('strong', 'foo [strong *bar*]'); MT('strongBogus', '3 * 3 = 9'); MT('italic', 'foo [em __bar__]'); MT('italicBogus', 'code__mirror'); MT('bold', 'foo [strong **bar**]'); MT('boldBogus', '3 ** 3 = 27'); MT('simpleLink', '[link "CodeMirror":http://codemirror.net]'); MT('referenceLink', '[link "CodeMirror":code_mirror]', 'Normal Text.', '[link [[code_mirror]]http://codemirror.net]'); MT('footCite', 'foo bar[qualifier [[1]]]'); MT('footCiteBogus', 'foo bar[[1a2]]'); MT('special-characters', 'Registered [tag (r)], ' + 'Trademark [tag (tm)], and ' + 'Copyright [tag (c)] 2008'); MT('cite', "A book is [keyword ??The Count of Monte Cristo??] by Dumas."); MT('additionAndDeletion', 'The news networks declared [negative -Al Gore-] ' + '[positive +George W. Bush+] the winner in Florida.'); MT('subAndSup', 'f(x, n) = log [builtin ~4~] x [builtin ^n^]'); MT('spanAndCode', 'A [quote %span element%] and [atom @code element@]'); MT('spanBogus', 'Percentage 25% is not a span.'); MT('citeBogus', 'Question? is not a citation.'); MT('codeBogus', 'user@example.com'); MT('subBogus', '~username'); MT('supBogus', 'foo ^ bar'); MT('deletionBogus', '3 - 3 = 0'); MT('additionBogus', '3 + 3 = 6'); MT('image', 'An image: [string !http://www.example.com/image.png!]'); MT('imageWithAltText', 'An image: [string !http://www.example.com/image.png (Alt Text)!]'); MT('imageWithUrl', 'An image: [string !http://www.example.com/image.png!:http://www.example.com/]'); /* * Headers */ MT('h1', '[header&header-1 h1. foo]'); MT('h2', '[header&header-2 h2. foo]'); MT('h3', '[header&header-3 h3. foo]'); MT('h4', '[header&header-4 h4. foo]'); MT('h5', '[header&header-5 h5. foo]'); MT('h6', '[header&header-6 h6. foo]'); MT('h7Bogus', 'h7. foo'); MT('multipleHeaders', '[header&header-1 h1. Heading 1]', '', 'Some text.', '', '[header&header-2 h2. Heading 2]', '', 'More text.'); MT('h1inline', '[header&header-1 h1. foo ][header&header-1&em _bar_][header&header-1 baz]'); /* * Lists */ MT('ul', 'foo', 'bar', '', '[variable-2 * foo]', '[variable-2 * bar]'); MT('ulNoBlank', 'foo', 'bar', '[variable-2 * foo]', '[variable-2 * bar]'); MT('ol', 'foo', 'bar', '', '[variable-2 # foo]', '[variable-2 # bar]'); MT('olNoBlank', 'foo', 'bar', '[variable-2 # foo]', '[variable-2 # bar]'); MT('ulFormatting', '[variable-2 * ][variable-2&em _foo_][variable-2 bar]', '[variable-2 * ][variable-2&strong *][variable-2&em&strong _foo_]' + '[variable-2&strong *][variable-2 bar]', '[variable-2 * ][variable-2&strong *foo*][variable-2 bar]'); MT('olFormatting', '[variable-2 # ][variable-2&em _foo_][variable-2 bar]', '[variable-2 # ][variable-2&strong *][variable-2&em&strong _foo_]' + '[variable-2&strong *][variable-2 bar]', '[variable-2 # ][variable-2&strong *foo*][variable-2 bar]'); MT('ulNested', '[variable-2 * foo]', '[variable-3 ** bar]', '[keyword *** bar]', '[variable-2 **** bar]', '[variable-3 ** bar]'); MT('olNested', '[variable-2 # foo]', '[variable-3 ## bar]', '[keyword ### bar]', '[variable-2 #### bar]', '[variable-3 ## bar]'); MT('ulNestedWithOl', '[variable-2 * foo]', '[variable-3 ## bar]', '[keyword *** bar]', '[variable-2 #### bar]', '[variable-3 ** bar]'); MT('olNestedWithUl', '[variable-2 # foo]', '[variable-3 ** bar]', '[keyword ### bar]', '[variable-2 **** bar]', '[variable-3 ## bar]'); MT('definitionList', '[number - coffee := Hot ][number&em _and_][number black]', '', 'Normal text.'); MT('definitionListSpan', '[number - coffee :=]', '', '[number Hot ][number&em _and_][number black =:]', '', 'Normal text.'); MT('boo', '[number - dog := woof woof]', '[number - cat := meow meow]', '[number - whale :=]', '[number Whale noises.]', '', '[number Also, ][number&em _splashing_][number . =:]'); /* * Attributes */ MT('divWithAttribute', '[punctuation div][punctuation&attribute (#my-id)][punctuation . foo bar]'); MT('divWithAttributeAnd2emRightPadding', '[punctuation div][punctuation&attribute (#my-id)((][punctuation . foo bar]'); MT('divWithClassAndId', '[punctuation div][punctuation&attribute (my-class#my-id)][punctuation . foo bar]'); MT('paragraphWithCss', 'p[attribute {color:red;}]. foo bar'); MT('paragraphNestedStyles', 'p. [strong *foo ][strong&em _bar_][strong *]'); MT('paragraphWithLanguage', 'p[attribute [[fr]]]. Parlez-vous français?'); MT('paragraphLeftAlign', 'p[attribute <]. Left'); MT('paragraphRightAlign', 'p[attribute >]. Right'); MT('paragraphRightAlign', 'p[attribute =]. Center'); MT('paragraphJustified', 'p[attribute <>]. Justified'); MT('paragraphWithLeftIndent1em', 'p[attribute (]. Left'); MT('paragraphWithRightIndent1em', 'p[attribute )]. Right'); MT('paragraphWithLeftIndent2em', 'p[attribute ((]. Left'); MT('paragraphWithRightIndent2em', 'p[attribute ))]. Right'); MT('paragraphWithLeftIndent3emRightIndent2em', 'p[attribute ((())]. Right'); MT('divFormatting', '[punctuation div. ][punctuation&strong *foo ]' + '[punctuation&strong&em _bar_][punctuation&strong *]'); MT('phraseModifierAttributes', 'p[attribute (my-class)]. This is a paragraph that has a class and' + ' this [em _][em&attribute (#special-phrase)][em emphasized phrase_]' + ' has an id.'); MT('linkWithClass', '[link "(my-class). This is a link with class":http://redcloth.org]'); /* * Layouts */ MT('paragraphLayouts', 'p. This is one paragraph.', '', 'p. This is another.'); MT('div', '[punctuation div. foo bar]'); MT('pre', '[operator pre. Text]'); MT('bq.', '[bracket bq. foo bar]', '', 'Normal text.'); MT('footnote', '[variable fn123. foo ][variable&strong *bar*]'); /* * Spanning Layouts */ MT('bq..ThenParagraph', '[bracket bq.. foo bar]', '', '[bracket More quote.]', 'p. Normal Text'); MT('bq..ThenH1', '[bracket bq.. foo bar]', '', '[bracket More quote.]', '[header&header-1 h1. Header Text]'); MT('bc..ThenParagraph', '[atom bc.. # Some ruby code]', '[atom obj = {foo: :bar}]', '[atom puts obj]', '', '[atom obj[[:love]] = "*love*"]', '[atom puts obj.love.upcase]', '', 'p. Normal text.'); MT('fn1..ThenParagraph', '[variable fn1.. foo bar]', '', '[variable More.]', 'p. Normal Text'); MT('pre..ThenParagraph', '[operator pre.. foo bar]', '', '[operator More.]', 'p. Normal Text'); /* * Tables */ MT('table', '[variable-3&operator |_. name |_. age|]', '[variable-3 |][variable-3&strong *Walter*][variable-3 | 5 |]', '[variable-3 |Florence| 6 |]', '', 'p. Normal text.'); MT('tableWithAttributes', '[variable-3&operator |_. name |_. age|]', '[variable-3 |][variable-3&attribute /2.][variable-3 Jim |]', '[variable-3 |][variable-3&attribute \\2{color: red}.][variable-3 Sam |]'); /* * HTML */ MT('html', '[comment
    ]', '[comment
    ]', '', '[header&header-1 h1. Welcome]', '', '[variable-2 * Item one]', '[variable-2 * Item two]', '', '[comment Example]', '', '[comment
    ]', '[comment
    ]'); MT('inlineHtml', 'I can use HTML directly in my [comment Textile].'); /* * No-Textile */ MT('notextile', '[string-2 notextile. *No* formatting]'); MT('notextileInline', 'Use [string-2 ==*asterisks*==] for [strong *strong*] text.'); MT('notextileWithPre', '[operator pre. *No* formatting]'); MT('notextileWithSpanningPre', '[operator pre.. *No* formatting]', '', '[operator *No* formatting]'); /* Only toggling phrases between non-word chars. */ MT('phrase-in-word', 'foo_bar_baz'); MT('phrase-non-word', '[negative -x-] aaa-bbb ccc-ddd [negative -eee-] fff [negative -ggg-]'); MT('phrase-lone-dash', 'foo - bar - baz'); })(); PK!7Ñâß  Ifile-manager-advanced/application/library/codemirror/mode/haxe/index.htmlnu„[µü¤ CodeMirror: Haxe mode

    Haxe mode

    Hxml mode:

    MIME types defined: text/x-haxe, text/x-hxml.

    PK!š¹�Ì D DFfile-manager-advanced/application/library/codemirror/mode/haxe/haxe.jsnu„[µü¤// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMode("haxe", function(config, parserConfig) { var indentUnit = config.indentUnit; // Tokenizer function kw(type) {return {type: type, style: "keyword"};} var A = kw("keyword a"), B = kw("keyword b"), C = kw("keyword c"); var operator = kw("operator"), atom = {type: "atom", style: "atom"}, attribute = {type:"attribute", style: "attribute"}; var type = kw("typedef"); var keywords = { "if": A, "while": A, "else": B, "do": B, "try": B, "return": C, "break": C, "continue": C, "new": C, "throw": C, "var": kw("var"), "inline":attribute, "static": attribute, "using":kw("import"), "public": attribute, "private": attribute, "cast": kw("cast"), "import": kw("import"), "macro": kw("macro"), "function": kw("function"), "catch": kw("catch"), "untyped": kw("untyped"), "callback": kw("cb"), "for": kw("for"), "switch": kw("switch"), "case": kw("case"), "default": kw("default"), "in": operator, "never": kw("property_access"), "trace":kw("trace"), "class": type, "abstract":type, "enum":type, "interface":type, "typedef":type, "extends":type, "implements":type, "dynamic":type, "true": atom, "false": atom, "null": atom }; var isOperatorChar = /[+\-*&%=<>!?|]/; function chain(stream, state, f) { state.tokenize = f; return f(stream, state); } function toUnescaped(stream, end) { var escaped = false, next; while ((next = stream.next()) != null) { if (next == end && !escaped) return true; escaped = !escaped && next == "\\"; } } // Used as scratch variables to communicate multiple values without // consing up tons of objects. var type, content; function ret(tp, style, cont) { type = tp; content = cont; return style; } function haxeTokenBase(stream, state) { var ch = stream.next(); if (ch == '"' || ch == "'") { return chain(stream, state, haxeTokenString(ch)); } else if (/[\[\]{}\(\),;\:\.]/.test(ch)) { return ret(ch); } else if (ch == "0" && stream.eat(/x/i)) { stream.eatWhile(/[\da-f]/i); return ret("number", "number"); } else if (/\d/.test(ch) || ch == "-" && stream.eat(/\d/)) { stream.match(/^\d*(?:\.\d*(?!\.))?(?:[eE][+\-]?\d+)?/); return ret("number", "number"); } else if (state.reAllowed && (ch == "~" && stream.eat(/\//))) { toUnescaped(stream, "/"); stream.eatWhile(/[gimsu]/); return ret("regexp", "string-2"); } else if (ch == "/") { if (stream.eat("*")) { return chain(stream, state, haxeTokenComment); } else if (stream.eat("/")) { stream.skipToEnd(); return ret("comment", "comment"); } else { stream.eatWhile(isOperatorChar); return ret("operator", null, stream.current()); } } else if (ch == "#") { stream.skipToEnd(); return ret("conditional", "meta"); } else if (ch == "@") { stream.eat(/:/); stream.eatWhile(/[\w_]/); return ret ("metadata", "meta"); } else if (isOperatorChar.test(ch)) { stream.eatWhile(isOperatorChar); return ret("operator", null, stream.current()); } else { var word; if(/[A-Z]/.test(ch)) { stream.eatWhile(/[\w_<>]/); word = stream.current(); return ret("type", "variable-3", word); } else { stream.eatWhile(/[\w_]/); var word = stream.current(), known = keywords.propertyIsEnumerable(word) && keywords[word]; return (known && state.kwAllowed) ? ret(known.type, known.style, word) : ret("variable", "variable", word); } } } function haxeTokenString(quote) { return function(stream, state) { if (toUnescaped(stream, quote)) state.tokenize = haxeTokenBase; return ret("string", "string"); }; } function haxeTokenComment(stream, state) { var maybeEnd = false, ch; while (ch = stream.next()) { if (ch == "/" && maybeEnd) { state.tokenize = haxeTokenBase; break; } maybeEnd = (ch == "*"); } return ret("comment", "comment"); } // Parser var atomicTypes = {"atom": true, "number": true, "variable": true, "string": true, "regexp": true}; function HaxeLexical(indented, column, type, align, prev, info) { this.indented = indented; this.column = column; this.type = type; this.prev = prev; this.info = info; if (align != null) this.align = align; } function inScope(state, varname) { for (var v = state.localVars; v; v = v.next) if (v.name == varname) return true; } function parseHaxe(state, style, type, content, stream) { var cc = state.cc; // Communicate our context to the combinators. // (Less wasteful than consing up a hundred closures on every call.) cx.state = state; cx.stream = stream; cx.marked = null, cx.cc = cc; if (!state.lexical.hasOwnProperty("align")) state.lexical.align = true; while(true) { var combinator = cc.length ? cc.pop() : statement; if (combinator(type, content)) { while(cc.length && cc[cc.length - 1].lex) cc.pop()(); if (cx.marked) return cx.marked; if (type == "variable" && inScope(state, content)) return "variable-2"; if (type == "variable" && imported(state, content)) return "variable-3"; return style; } } } function imported(state, typename) { if (/[a-z]/.test(typename.charAt(0))) return false; var len = state.importedtypes.length; for (var i = 0; i= 0; i--) cx.cc.push(arguments[i]); } function cont() { pass.apply(null, arguments); return true; } function inList(name, list) { for (var v = list; v; v = v.next) if (v.name == name) return true; return false; } function register(varname) { var state = cx.state; if (state.context) { cx.marked = "def"; if (inList(varname, state.localVars)) return; state.localVars = {name: varname, next: state.localVars}; } else if (state.globalVars) { if (inList(varname, state.globalVars)) return; state.globalVars = {name: varname, next: state.globalVars}; } } // Combinators var defaultVars = {name: "this", next: null}; function pushcontext() { if (!cx.state.context) cx.state.localVars = defaultVars; cx.state.context = {prev: cx.state.context, vars: cx.state.localVars}; } function popcontext() { cx.state.localVars = cx.state.context.vars; cx.state.context = cx.state.context.prev; } popcontext.lex = true; function pushlex(type, info) { var result = function() { var state = cx.state; state.lexical = new HaxeLexical(state.indented, cx.stream.column(), type, null, state.lexical, info); }; result.lex = true; return result; } function poplex() { var state = cx.state; if (state.lexical.prev) { if (state.lexical.type == ")") state.indented = state.lexical.indented; state.lexical = state.lexical.prev; } } poplex.lex = true; function expect(wanted) { function f(type) { if (type == wanted) return cont(); else if (wanted == ";") return pass(); else return cont(f); } return f; } function statement(type) { if (type == "@") return cont(metadef); if (type == "var") return cont(pushlex("vardef"), vardef1, expect(";"), poplex); if (type == "keyword a") return cont(pushlex("form"), expression, statement, poplex); if (type == "keyword b") return cont(pushlex("form"), statement, poplex); if (type == "{") return cont(pushlex("}"), pushcontext, block, poplex, popcontext); if (type == ";") return cont(); if (type == "attribute") return cont(maybeattribute); if (type == "function") return cont(functiondef); if (type == "for") return cont(pushlex("form"), expect("("), pushlex(")"), forspec1, expect(")"), poplex, statement, poplex); if (type == "variable") return cont(pushlex("stat"), maybelabel); if (type == "switch") return cont(pushlex("form"), expression, pushlex("}", "switch"), expect("{"), block, poplex, poplex); if (type == "case") return cont(expression, expect(":")); if (type == "default") return cont(expect(":")); if (type == "catch") return cont(pushlex("form"), pushcontext, expect("("), funarg, expect(")"), statement, poplex, popcontext); if (type == "import") return cont(importdef, expect(";")); if (type == "typedef") return cont(typedef); return pass(pushlex("stat"), expression, expect(";"), poplex); } function expression(type) { if (atomicTypes.hasOwnProperty(type)) return cont(maybeoperator); if (type == "type" ) return cont(maybeoperator); if (type == "function") return cont(functiondef); if (type == "keyword c") return cont(maybeexpression); if (type == "(") return cont(pushlex(")"), maybeexpression, expect(")"), poplex, maybeoperator); if (type == "operator") return cont(expression); if (type == "[") return cont(pushlex("]"), commasep(maybeexpression, "]"), poplex, maybeoperator); if (type == "{") return cont(pushlex("}"), commasep(objprop, "}"), poplex, maybeoperator); return cont(); } function maybeexpression(type) { if (type.match(/[;\}\)\],]/)) return pass(); return pass(expression); } function maybeoperator(type, value) { if (type == "operator" && /\+\+|--/.test(value)) return cont(maybeoperator); if (type == "operator" || type == ":") return cont(expression); if (type == ";") return; if (type == "(") return cont(pushlex(")"), commasep(expression, ")"), poplex, maybeoperator); if (type == ".") return cont(property, maybeoperator); if (type == "[") return cont(pushlex("]"), expression, expect("]"), poplex, maybeoperator); } function maybeattribute(type) { if (type == "attribute") return cont(maybeattribute); if (type == "function") return cont(functiondef); if (type == "var") return cont(vardef1); } function metadef(type) { if(type == ":") return cont(metadef); if(type == "variable") return cont(metadef); if(type == "(") return cont(pushlex(")"), commasep(metaargs, ")"), poplex, statement); } function metaargs(type) { if(type == "variable") return cont(); } function importdef (type, value) { if(type == "variable" && /[A-Z]/.test(value.charAt(0))) { registerimport(value); return cont(); } else if(type == "variable" || type == "property" || type == "." || value == "*") return cont(importdef); } function typedef (type, value) { if(type == "variable" && /[A-Z]/.test(value.charAt(0))) { registerimport(value); return cont(); } else if (type == "type" && /[A-Z]/.test(value.charAt(0))) { return cont(); } } function maybelabel(type) { if (type == ":") return cont(poplex, statement); return pass(maybeoperator, expect(";"), poplex); } function property(type) { if (type == "variable") {cx.marked = "property"; return cont();} } function objprop(type) { if (type == "variable") cx.marked = "property"; if (atomicTypes.hasOwnProperty(type)) return cont(expect(":"), expression); } function commasep(what, end) { function proceed(type) { if (type == ",") return cont(what, proceed); if (type == end) return cont(); return cont(expect(end)); } return function(type) { if (type == end) return cont(); else return pass(what, proceed); }; } function block(type) { if (type == "}") return cont(); return pass(statement, block); } function vardef1(type, value) { if (type == "variable"){register(value); return cont(typeuse, vardef2);} return cont(); } function vardef2(type, value) { if (value == "=") return cont(expression, vardef2); if (type == ",") return cont(vardef1); } function forspec1(type, value) { if (type == "variable") { register(value); return cont(forin, expression) } else { return pass() } } function forin(_type, value) { if (value == "in") return cont(); } function functiondef(type, value) { //function names starting with upper-case letters are recognised as types, so cludging them together here. if (type == "variable" || type == "type") {register(value); return cont(functiondef);} if (value == "new") return cont(functiondef); if (type == "(") return cont(pushlex(")"), pushcontext, commasep(funarg, ")"), poplex, typeuse, statement, popcontext); } function typeuse(type) { if(type == ":") return cont(typestring); } function typestring(type) { if(type == "type") return cont(); if(type == "variable") return cont(); if(type == "{") return cont(pushlex("}"), commasep(typeprop, "}"), poplex); } function typeprop(type) { if(type == "variable") return cont(typeuse); } function funarg(type, value) { if (type == "variable") {register(value); return cont(typeuse);} } // Interface return { startState: function(basecolumn) { var defaulttypes = ["Int", "Float", "String", "Void", "Std", "Bool", "Dynamic", "Array"]; var state = { tokenize: haxeTokenBase, reAllowed: true, kwAllowed: true, cc: [], lexical: new HaxeLexical((basecolumn || 0) - indentUnit, 0, "block", false), localVars: parserConfig.localVars, importedtypes: defaulttypes, context: parserConfig.localVars && {vars: parserConfig.localVars}, indented: 0 }; if (parserConfig.globalVars && typeof parserConfig.globalVars == "object") state.globalVars = parserConfig.globalVars; return state; }, token: function(stream, state) { if (stream.sol()) { if (!state.lexical.hasOwnProperty("align")) state.lexical.align = false; state.indented = stream.indentation(); } if (stream.eatSpace()) return null; var style = state.tokenize(stream, state); if (type == "comment") return style; state.reAllowed = !!(type == "operator" || type == "keyword c" || type.match(/^[\[{}\(,;:]$/)); state.kwAllowed = type != '.'; return parseHaxe(state, style, type, content, stream); }, indent: function(state, textAfter) { if (state.tokenize != haxeTokenBase) return 0; var firstChar = textAfter && textAfter.charAt(0), lexical = state.lexical; if (lexical.type == "stat" && firstChar == "}") lexical = lexical.prev; var type = lexical.type, closing = firstChar == type; if (type == "vardef") return lexical.indented + 4; else if (type == "form" && firstChar == "{") return lexical.indented; else if (type == "stat" || type == "form") return lexical.indented + indentUnit; else if (lexical.info == "switch" && !closing) return lexical.indented + (/^(?:case|default)\b/.test(textAfter) ? indentUnit : 2 * indentUnit); else if (lexical.align) return lexical.column + (closing ? 0 : 1); else return lexical.indented + (closing ? 0 : indentUnit); }, electricChars: "{}", blockCommentStart: "/*", blockCommentEnd: "*/", lineComment: "//" }; }); CodeMirror.defineMIME("text/x-haxe", "haxe"); CodeMirror.defineMode("hxml", function () { return { startState: function () { return { define: false, inString: false }; }, token: function (stream, state) { var ch = stream.peek(); var sol = stream.sol(); ///* comments */ if (ch == "#") { stream.skipToEnd(); return "comment"; } if (sol && ch == "-") { var style = "variable-2"; stream.eat(/-/); if (stream.peek() == "-") { stream.eat(/-/); style = "keyword a"; } if (stream.peek() == "D") { stream.eat(/[D]/); style = "keyword c"; state.define = true; } stream.eatWhile(/[A-Z]/i); return style; } var ch = stream.peek(); if (state.inString == false && ch == "'") { state.inString = true; ch = stream.next(); } if (state.inString == true) { if (stream.skipTo("'")) { } else { stream.skipToEnd(); } if (stream.peek() == "'") { stream.next(); state.inString = false; } return "string"; } stream.next(); return null; }, lineComment: "#" }; }); CodeMirror.defineMIME("text/x-hxml", "hxml"); }); PK!„@û  Ifile-manager-advanced/application/library/codemirror/mode/mbox/index.htmlnu„[µü¤ CodeMirror: mbox mode

    mbox mode

    MIME types defined: application/mbox.

    PK!kŒìmAAFfile-manager-advanced/application/library/codemirror/mode/mbox/mbox.jsnu„[µü¤// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; var rfc2822 = [ "From", "Sender", "Reply-To", "To", "Cc", "Bcc", "Message-ID", "In-Reply-To", "References", "Resent-From", "Resent-Sender", "Resent-To", "Resent-Cc", "Resent-Bcc", "Resent-Message-ID", "Return-Path", "Received" ]; var rfc2822NoEmail = [ "Date", "Subject", "Comments", "Keywords", "Resent-Date" ]; CodeMirror.registerHelper("hintWords", "mbox", rfc2822.concat(rfc2822NoEmail)); var whitespace = /^[ \t]/; var separator = /^From /; // See RFC 4155 var rfc2822Header = new RegExp("^(" + rfc2822.join("|") + "): "); var rfc2822HeaderNoEmail = new RegExp("^(" + rfc2822NoEmail.join("|") + "): "); var header = /^[^:]+:/; // Optional fields defined in RFC 2822 var email = /^[^ ]+@[^ ]+/; var untilEmail = /^.*?(?=[^ ]+?@[^ ]+)/; var bracketedEmail = /^<.*?>/; var untilBracketedEmail = /^.*?(?=<.*>)/; function styleForHeader(header) { if (header === "Subject") return "header"; return "string"; } function readToken(stream, state) { if (stream.sol()) { // From last line state.inSeparator = false; if (state.inHeader && stream.match(whitespace)) { // Header folding return null; } else { state.inHeader = false; state.header = null; } if (stream.match(separator)) { state.inHeaders = true; state.inSeparator = true; return "atom"; } var match; var emailPermitted = false; if ((match = stream.match(rfc2822HeaderNoEmail)) || (emailPermitted = true) && (match = stream.match(rfc2822Header))) { state.inHeaders = true; state.inHeader = true; state.emailPermitted = emailPermitted; state.header = match[1]; return "atom"; } // Use vim's heuristics: recognize custom headers only if the line is in a // block of legitimate headers. if (state.inHeaders && (match = stream.match(header))) { state.inHeader = true; state.emailPermitted = true; state.header = match[1]; return "atom"; } state.inHeaders = false; stream.skipToEnd(); return null; } if (state.inSeparator) { if (stream.match(email)) return "link"; if (stream.match(untilEmail)) return "atom"; stream.skipToEnd(); return "atom"; } if (state.inHeader) { var style = styleForHeader(state.header); if (state.emailPermitted) { if (stream.match(bracketedEmail)) return style + " link"; if (stream.match(untilBracketedEmail)) return style; } stream.skipToEnd(); return style; } stream.skipToEnd(); return null; }; CodeMirror.defineMode("mbox", function() { return { startState: function() { return { // Is in a mbox separator inSeparator: false, // Is in a mail header inHeader: false, // If bracketed email is permitted. Only applicable when inHeader emailPermitted: false, // Name of current header header: null, // Is in a region of mail headers inHeaders: false }; }, token: readToken, blankLine: function(state) { state.inHeaders = state.inSeparator = state.inHeader = false; } }; }); CodeMirror.defineMIME("application/mbox", "mbox"); }); PK!]*2ëÄ Ä Gfile-manager-advanced/application/library/codemirror/mode/vb/index.htmlnu„[µü¤ CodeMirror: VB.NET mode

    VB.NET mode

    
      

    MIME type defined: text/x-vb.

    PK!V¯�«F"F"Bfile-manager-advanced/application/library/codemirror/mode/vb/vb.jsnu„[µü¤// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMode("vb", function(conf, parserConf) { var ERRORCLASS = 'error'; function wordRegexp(words) { return new RegExp("^((" + words.join(")|(") + "))\\b", "i"); } var singleOperators = new RegExp("^[\\+\\-\\*/%&\\\\|\\^~<>!]"); var singleDelimiters = new RegExp('^[\\(\\)\\[\\]\\{\\}@,:`=;\\.]'); var doubleOperators = new RegExp("^((==)|(<>)|(<=)|(>=)|(<>)|(<<)|(>>)|(//)|(\\*\\*))"); var doubleDelimiters = new RegExp("^((\\+=)|(\\-=)|(\\*=)|(%=)|(/=)|(&=)|(\\|=)|(\\^=))"); var tripleDelimiters = new RegExp("^((//=)|(>>=)|(<<=)|(\\*\\*=))"); var identifiers = new RegExp("^[_A-Za-z][_A-Za-z0-9]*"); var openingKeywords = ['class','module', 'sub','enum','select','while','if','function', 'get','set','property', 'try']; var middleKeywords = ['else','elseif','case', 'catch']; var endKeywords = ['next','loop']; var operatorKeywords = ['and', 'or', 'not', 'xor', 'in']; var wordOperators = wordRegexp(operatorKeywords); var commonKeywords = ['as', 'dim', 'break', 'continue','optional', 'then', 'until', 'goto', 'byval','byref','new','handles','property', 'return', 'const','private', 'protected', 'friend', 'public', 'shared', 'static', 'true','false']; var commontypes = ['integer','string','double','decimal','boolean','short','char', 'float','single']; var keywords = wordRegexp(commonKeywords); var types = wordRegexp(commontypes); var stringPrefixes = '"'; var opening = wordRegexp(openingKeywords); var middle = wordRegexp(middleKeywords); var closing = wordRegexp(endKeywords); var doubleClosing = wordRegexp(['end']); var doOpening = wordRegexp(['do']); var indentInfo = null; CodeMirror.registerHelper("hintWords", "vb", openingKeywords.concat(middleKeywords).concat(endKeywords) .concat(operatorKeywords).concat(commonKeywords).concat(commontypes)); function indent(_stream, state) { state.currentIndent++; } function dedent(_stream, state) { state.currentIndent--; } // tokenizers function tokenBase(stream, state) { if (stream.eatSpace()) { return null; } var ch = stream.peek(); // Handle Comments if (ch === "'") { stream.skipToEnd(); return 'comment'; } // Handle Number Literals if (stream.match(/^((&H)|(&O))?[0-9\.a-f]/i, false)) { var floatLiteral = false; // Floats if (stream.match(/^\d*\.\d+F?/i)) { floatLiteral = true; } else if (stream.match(/^\d+\.\d*F?/)) { floatLiteral = true; } else if (stream.match(/^\.\d+F?/)) { floatLiteral = true; } if (floatLiteral) { // Float literals may be "imaginary" stream.eat(/J/i); return 'number'; } // Integers var intLiteral = false; // Hex if (stream.match(/^&H[0-9a-f]+/i)) { intLiteral = true; } // Octal else if (stream.match(/^&O[0-7]+/i)) { intLiteral = true; } // Decimal else if (stream.match(/^[1-9]\d*F?/)) { // Decimal literals may be "imaginary" stream.eat(/J/i); // TODO - Can you have imaginary longs? intLiteral = true; } // Zero by itself with no other piece of number. else if (stream.match(/^0(?![\dx])/i)) { intLiteral = true; } if (intLiteral) { // Integer literals may be "long" stream.eat(/L/i); return 'number'; } } // Handle Strings if (stream.match(stringPrefixes)) { state.tokenize = tokenStringFactory(stream.current()); return state.tokenize(stream, state); } // Handle operators and Delimiters if (stream.match(tripleDelimiters) || stream.match(doubleDelimiters)) { return null; } if (stream.match(doubleOperators) || stream.match(singleOperators) || stream.match(wordOperators)) { return 'operator'; } if (stream.match(singleDelimiters)) { return null; } if (stream.match(doOpening)) { indent(stream,state); state.doInCurrentLine = true; return 'keyword'; } if (stream.match(opening)) { if (! state.doInCurrentLine) indent(stream,state); else state.doInCurrentLine = false; return 'keyword'; } if (stream.match(middle)) { return 'keyword'; } if (stream.match(doubleClosing)) { dedent(stream,state); dedent(stream,state); return 'keyword'; } if (stream.match(closing)) { dedent(stream,state); return 'keyword'; } if (stream.match(types)) { return 'keyword'; } if (stream.match(keywords)) { return 'keyword'; } if (stream.match(identifiers)) { return 'variable'; } // Handle non-detected items stream.next(); return ERRORCLASS; } function tokenStringFactory(delimiter) { var singleline = delimiter.length == 1; var OUTCLASS = 'string'; return function(stream, state) { while (!stream.eol()) { stream.eatWhile(/[^'"]/); if (stream.match(delimiter)) { state.tokenize = tokenBase; return OUTCLASS; } else { stream.eat(/['"]/); } } if (singleline) { if (parserConf.singleLineStringErrors) { return ERRORCLASS; } else { state.tokenize = tokenBase; } } return OUTCLASS; }; } function tokenLexer(stream, state) { var style = state.tokenize(stream, state); var current = stream.current(); // Handle '.' connected identifiers if (current === '.') { style = state.tokenize(stream, state); current = stream.current(); if (style === 'variable') { return 'variable'; } else { return ERRORCLASS; } } var delimiter_index = '[({'.indexOf(current); if (delimiter_index !== -1) { indent(stream, state ); } if (indentInfo === 'dedent') { if (dedent(stream, state)) { return ERRORCLASS; } } delimiter_index = '])}'.indexOf(current); if (delimiter_index !== -1) { if (dedent(stream, state)) { return ERRORCLASS; } } return style; } var external = { electricChars:"dDpPtTfFeE ", startState: function() { return { tokenize: tokenBase, lastToken: null, currentIndent: 0, nextLineIndent: 0, doInCurrentLine: false }; }, token: function(stream, state) { if (stream.sol()) { state.currentIndent += state.nextLineIndent; state.nextLineIndent = 0; state.doInCurrentLine = 0; } var style = tokenLexer(stream, state); state.lastToken = {style:style, content: stream.current()}; return style; }, indent: function(state, textAfter) { var trueText = textAfter.replace(/^\s+|\s+$/g, '') ; if (trueText.match(closing) || trueText.match(doubleClosing) || trueText.match(middle)) return conf.indentUnit*(state.currentIndent-1); if(state.currentIndent < 0) return 0; return state.currentIndent * conf.indentUnit; }, lineComment: "'" }; return external; }); CodeMirror.defineMIME("text/x-vb", "vb"); }); PK!M*$j«'«'Ffile-manager-advanced/application/library/codemirror/mode/ttcn/ttcn.jsnu„[µü¤// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMode("ttcn", function(config, parserConfig) { var indentUnit = config.indentUnit, keywords = parserConfig.keywords || {}, builtin = parserConfig.builtin || {}, timerOps = parserConfig.timerOps || {}, portOps = parserConfig.portOps || {}, configOps = parserConfig.configOps || {}, verdictOps = parserConfig.verdictOps || {}, sutOps = parserConfig.sutOps || {}, functionOps = parserConfig.functionOps || {}, verdictConsts = parserConfig.verdictConsts || {}, booleanConsts = parserConfig.booleanConsts || {}, otherConsts = parserConfig.otherConsts || {}, types = parserConfig.types || {}, visibilityModifiers = parserConfig.visibilityModifiers || {}, templateMatch = parserConfig.templateMatch || {}, multiLineStrings = parserConfig.multiLineStrings, indentStatements = parserConfig.indentStatements !== false; var isOperatorChar = /[+\-*&@=<>!\/]/; var curPunc; function tokenBase(stream, state) { var ch = stream.next(); if (ch == '"' || ch == "'") { state.tokenize = tokenString(ch); return state.tokenize(stream, state); } if (/[\[\]{}\(\),;\\:\?\.]/.test(ch)) { curPunc = ch; return "punctuation"; } if (ch == "#"){ stream.skipToEnd(); return "atom preprocessor"; } if (ch == "%"){ stream.eatWhile(/\b/); return "atom ttcn3Macros"; } if (/\d/.test(ch)) { stream.eatWhile(/[\w\.]/); return "number"; } if (ch == "/") { if (stream.eat("*")) { state.tokenize = tokenComment; return tokenComment(stream, state); } if (stream.eat("/")) { stream.skipToEnd(); return "comment"; } } if (isOperatorChar.test(ch)) { if(ch == "@"){ if(stream.match("try") || stream.match("catch") || stream.match("lazy")){ return "keyword"; } } stream.eatWhile(isOperatorChar); return "operator"; } stream.eatWhile(/[\w\$_\xa1-\uffff]/); var cur = stream.current(); if (keywords.propertyIsEnumerable(cur)) return "keyword"; if (builtin.propertyIsEnumerable(cur)) return "builtin"; if (timerOps.propertyIsEnumerable(cur)) return "def timerOps"; if (configOps.propertyIsEnumerable(cur)) return "def configOps"; if (verdictOps.propertyIsEnumerable(cur)) return "def verdictOps"; if (portOps.propertyIsEnumerable(cur)) return "def portOps"; if (sutOps.propertyIsEnumerable(cur)) return "def sutOps"; if (functionOps.propertyIsEnumerable(cur)) return "def functionOps"; if (verdictConsts.propertyIsEnumerable(cur)) return "string verdictConsts"; if (booleanConsts.propertyIsEnumerable(cur)) return "string booleanConsts"; if (otherConsts.propertyIsEnumerable(cur)) return "string otherConsts"; if (types.propertyIsEnumerable(cur)) return "builtin types"; if (visibilityModifiers.propertyIsEnumerable(cur)) return "builtin visibilityModifiers"; if (templateMatch.propertyIsEnumerable(cur)) return "atom templateMatch"; return "variable"; } function tokenString(quote) { return function(stream, state) { var escaped = false, next, end = false; while ((next = stream.next()) != null) { if (next == quote && !escaped){ var afterQuote = stream.peek(); //look if the character after the quote is like the B in '10100010'B if (afterQuote){ afterQuote = afterQuote.toLowerCase(); if(afterQuote == "b" || afterQuote == "h" || afterQuote == "o") stream.next(); } end = true; break; } escaped = !escaped && next == "\\"; } if (end || !(escaped || multiLineStrings)) state.tokenize = null; return "string"; }; } function tokenComment(stream, state) { var maybeEnd = false, ch; while (ch = stream.next()) { if (ch == "/" && maybeEnd) { state.tokenize = null; break; } maybeEnd = (ch == "*"); } return "comment"; } function Context(indented, column, type, align, prev) { this.indented = indented; this.column = column; this.type = type; this.align = align; this.prev = prev; } function pushContext(state, col, type) { var indent = state.indented; if (state.context && state.context.type == "statement") indent = state.context.indented; return state.context = new Context(indent, col, type, null, state.context); } function popContext(state) { var t = state.context.type; if (t == ")" || t == "]" || t == "}") state.indented = state.context.indented; return state.context = state.context.prev; } //Interface return { startState: function(basecolumn) { return { tokenize: null, context: new Context((basecolumn || 0) - indentUnit, 0, "top", false), indented: 0, startOfLine: true }; }, token: function(stream, state) { var ctx = state.context; if (stream.sol()) { if (ctx.align == null) ctx.align = false; state.indented = stream.indentation(); state.startOfLine = true; } if (stream.eatSpace()) return null; curPunc = null; var style = (state.tokenize || tokenBase)(stream, state); if (style == "comment") return style; if (ctx.align == null) ctx.align = true; if ((curPunc == ";" || curPunc == ":" || curPunc == ",") && ctx.type == "statement"){ popContext(state); } else if (curPunc == "{") pushContext(state, stream.column(), "}"); else if (curPunc == "[") pushContext(state, stream.column(), "]"); else if (curPunc == "(") pushContext(state, stream.column(), ")"); else if (curPunc == "}") { while (ctx.type == "statement") ctx = popContext(state); if (ctx.type == "}") ctx = popContext(state); while (ctx.type == "statement") ctx = popContext(state); } else if (curPunc == ctx.type) popContext(state); else if (indentStatements && (((ctx.type == "}" || ctx.type == "top") && curPunc != ';') || (ctx.type == "statement" && curPunc == "newstatement"))) pushContext(state, stream.column(), "statement"); state.startOfLine = false; return style; }, electricChars: "{}", blockCommentStart: "/*", blockCommentEnd: "*/", lineComment: "//", fold: "brace" }; }); function words(str) { var obj = {}, words = str.split(" "); for (var i = 0; i < words.length; ++i) obj[words[i]] = true; return obj; } function def(mimes, mode) { if (typeof mimes == "string") mimes = [mimes]; var words = []; function add(obj) { if (obj) for (var prop in obj) if (obj.hasOwnProperty(prop)) words.push(prop); } add(mode.keywords); add(mode.builtin); add(mode.timerOps); add(mode.portOps); if (words.length) { mode.helperType = mimes[0]; CodeMirror.registerHelper("hintWords", mimes[0], words); } for (var i = 0; i < mimes.length; ++i) CodeMirror.defineMIME(mimes[i], mode); } def(["text/x-ttcn", "text/x-ttcn3", "text/x-ttcnpp"], { name: "ttcn", keywords: words("activate address alive all alt altstep and and4b any" + " break case component const continue control deactivate" + " display do else encode enumerated except exception" + " execute extends extension external for from function" + " goto group if import in infinity inout interleave" + " label language length log match message mixed mod" + " modifies module modulepar mtc noblock not not4b nowait" + " of on optional or or4b out override param pattern port" + " procedure record recursive rem repeat return runs select" + " self sender set signature system template testcase to" + " type union value valueof var variant while with xor xor4b"), builtin: words("bit2hex bit2int bit2oct bit2str char2int char2oct encvalue" + " decomp decvalue float2int float2str hex2bit hex2int" + " hex2oct hex2str int2bit int2char int2float int2hex" + " int2oct int2str int2unichar isbound ischosen ispresent" + " isvalue lengthof log2str oct2bit oct2char oct2hex oct2int" + " oct2str regexp replace rnd sizeof str2bit str2float" + " str2hex str2int str2oct substr unichar2int unichar2char" + " enum2int"), types: words("anytype bitstring boolean char charstring default float" + " hexstring integer objid octetstring universal verdicttype timer"), timerOps: words("read running start stop timeout"), portOps: words("call catch check clear getcall getreply halt raise receive" + " reply send trigger"), configOps: words("create connect disconnect done kill killed map unmap"), verdictOps: words("getverdict setverdict"), sutOps: words("action"), functionOps: words("apply derefers refers"), verdictConsts: words("error fail inconc none pass"), booleanConsts: words("true false"), otherConsts: words("null NULL omit"), visibilityModifiers: words("private public friend"), templateMatch: words("complement ifpresent subset superset permutation"), multiLineStrings: true }); }); PK!û–¤¢ ¢ Ifile-manager-advanced/application/library/codemirror/mode/ttcn/index.htmlnu„[µü¤ CodeMirror: TTCN mode

    TTCN example


    Language: Testing and Test Control Notation (TTCN)

    MIME types defined: text/x-ttcn, text/x-ttcn3, text/x-ttcnpp.


    The development of this mode has been sponsored by Ericsson .

    Coded by Asmelash Tsegay Gebretsadkan

    PK!:™… é>é>Dfile-manager-advanced/application/library/codemirror/mode/sas/sas.jsnu„[µü¤// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE // SAS mode copyright (c) 2016 Jared Dean, SAS Institute // Created by Jared Dean // TODO // indent and de-indent // identify macro variables //Definitions // comment -- text withing * ; or /* */ // keyword -- SAS language variable // variable -- macro variables starts with '&' or variable formats // variable-2 -- DATA Step, proc, or macro names // string -- text within ' ' or " " // operator -- numeric operator + / - * ** le eq ge ... and so on // builtin -- proc %macro data run mend // atom // def (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMode("sas", function () { var words = {}; var isDoubleOperatorSym = { eq: 'operator', lt: 'operator', le: 'operator', gt: 'operator', ge: 'operator', "in": 'operator', ne: 'operator', or: 'operator' }; var isDoubleOperatorChar = /(<=|>=|!=|<>)/; var isSingleOperatorChar = /[=\(:\),{}.*<>+\-\/^\[\]]/; // Takes a string of words separated by spaces and adds them as // keys with the value of the first argument 'style' function define(style, string, context) { if (context) { var split = string.split(' '); for (var i = 0; i < split.length; i++) { words[split[i]] = {style: style, state: context}; } } } //datastep define('def', 'stack pgm view source debug nesting nolist', ['inDataStep']); define('def', 'if while until for do do; end end; then else cancel', ['inDataStep']); define('def', 'label format _n_ _error_', ['inDataStep']); define('def', 'ALTER BUFNO BUFSIZE CNTLLEV COMPRESS DLDMGACTION ENCRYPT ENCRYPTKEY EXTENDOBSCOUNTER GENMAX GENNUM INDEX LABEL OBSBUF OUTREP PW PWREQ READ REPEMPTY REPLACE REUSE ROLE SORTEDBY SPILL TOBSNO TYPE WRITE FILECLOSE FIRSTOBS IN OBS POINTOBS WHERE WHEREUP IDXNAME IDXWHERE DROP KEEP RENAME', ['inDataStep']); define('def', 'filevar finfo finv fipname fipnamel fipstate first firstobs floor', ['inDataStep']); define('def', 'varfmt varinfmt varlabel varlen varname varnum varray varrayx vartype verify vformat vformatd vformatdx vformatn vformatnx vformatw vformatwx vformatx vinarray vinarrayx vinformat vinformatd vinformatdx vinformatn vinformatnx vinformatw vinformatwx vinformatx vlabel vlabelx vlength vlengthx vname vnamex vnferr vtype vtypex weekday', ['inDataStep']); define('def', 'zipfips zipname zipnamel zipstate', ['inDataStep']); define('def', 'put putc putn', ['inDataStep']); define('builtin', 'data run', ['inDataStep']); //proc define('def', 'data', ['inProc']); // flow control for macros define('def', '%if %end %end; %else %else; %do %do; %then', ['inMacro']); //everywhere define('builtin', 'proc run; quit; libname filename %macro %mend option options', ['ALL']); define('def', 'footnote title libname ods', ['ALL']); define('def', '%let %put %global %sysfunc %eval ', ['ALL']); // automatic macro variables http://support.sas.com/documentation/cdl/en/mcrolref/61885/HTML/default/viewer.htm#a003167023.htm define('variable', '&sysbuffr &syscc &syscharwidth &syscmd &sysdate &sysdate9 &sysday &sysdevic &sysdmg &sysdsn &sysencoding &sysenv &syserr &syserrortext &sysfilrc &syshostname &sysindex &sysinfo &sysjobid &syslast &syslckrc &syslibrc &syslogapplname &sysmacroname &sysmenv &sysmsg &sysncpu &sysodspath &sysparm &syspbuff &sysprocessid &sysprocessname &sysprocname &sysrc &sysscp &sysscpl &sysscpl &syssite &sysstartid &sysstartname &systcpiphostname &systime &sysuserid &sysver &sysvlong &sysvlong4 &syswarningtext', ['ALL']); //footnote[1-9]? title[1-9]? //options statement define('def', 'source2 nosource2 page pageno pagesize', ['ALL']); //proc and datastep define('def', '_all_ _character_ _cmd_ _freq_ _i_ _infile_ _last_ _msg_ _null_ _numeric_ _temporary_ _type_ abort abs addr adjrsq airy alpha alter altlog altprint and arcos array arsin as atan attrc attrib attrn authserver autoexec awscontrol awsdef awsmenu awsmenumerge awstitle backward band base betainv between blocksize blshift bnot bor brshift bufno bufsize bxor by byerr byline byte calculated call cards cards4 catcache cbufno cdf ceil center cexist change chisq cinv class cleanup close cnonct cntllev coalesce codegen col collate collin column comamid comaux1 comaux2 comdef compbl compound compress config continue convert cos cosh cpuid create cross crosstab css curobs cv daccdb daccdbsl daccsl daccsyd dacctab dairy datalines datalines4 datejul datepart datetime day dbcslang dbcstype dclose ddm delete delimiter depdb depdbsl depsl depsyd deptab dequote descending descript design= device dflang dhms dif digamma dim dinfo display distinct dkricond dkrocond dlm dnum do dopen doptname doptnum dread drop dropnote dsname dsnferr echo else emaildlg emailid emailpw emailserver emailsys encrypt end endsas engine eof eov erf erfc error errorcheck errors exist exp fappend fclose fcol fdelete feedback fetch fetchobs fexist fget file fileclose fileexist filefmt filename fileref fmterr fmtsearch fnonct fnote font fontalias fopen foptname foptnum force formatted formchar formdelim formdlim forward fpoint fpos fput fread frewind frlen from fsep fuzz fwrite gaminv gamma getoption getvarc getvarn go goto group gwindow hbar hbound helpenv helploc hms honorappearance hosthelp hostprint hour hpct html hvar ibessel ibr id if index indexc indexw initcmd initstmt inner input inputc inputn inr insert int intck intnx into intrr invaliddata irr is jbessel join juldate keep kentb kurtosis label lag last lbound leave left length levels lgamma lib library libref line linesize link list log log10 log2 logpdf logpmf logsdf lostcard lowcase lrecl ls macro macrogen maps mautosource max maxdec maxr mdy mean measures median memtype merge merror min minute missing missover mlogic mod mode model modify month mopen mort mprint mrecall msglevel msymtabmax mvarsize myy n nest netpv new news nmiss no nobatch nobs nocaps nocardimage nocenter nocharcode nocmdmac nocol nocum nodate nodbcs nodetails nodmr nodms nodmsbatch nodup nodupkey noduplicates noechoauto noequals noerrorabend noexitwindows nofullstimer noicon noimplmac noint nolist noloadlist nomiss nomlogic nomprint nomrecall nomsgcase nomstored nomultenvappl nonotes nonumber noobs noovp nopad nopercent noprint noprintinit normal norow norsasuser nosetinit nosplash nosymbolgen note notes notitle notitles notsorted noverbose noxsync noxwait npv null number numkeys nummousekeys nway obs on open order ordinal otherwise out outer outp= output over ovp p(1 5 10 25 50 75 90 95 99) pad pad2 paired parm parmcards path pathdll pathname pdf peek peekc pfkey pmf point poisson poke position printer probbeta probbnml probchi probf probgam probhypr probit probnegb probnorm probsig probt procleave prt ps pw pwreq qtr quote r ranbin rancau ranexp rangam range ranks rannor ranpoi rantbl rantri ranuni read recfm register regr remote remove rename repeat replace resolve retain return reuse reverse rewind right round rsquare rtf rtrace rtraceloc s s2 samploc sasautos sascontrol sasfrscr sasmsg sasmstore sasscript sasuser saving scan sdf second select selection separated seq serror set setcomm setot sign simple sin sinh siteinfo skewness skip sle sls sortedby sortpgm sortseq sortsize soundex spedis splashlocation split spool sqrt start std stderr stdin stfips stimer stname stnamel stop stopover subgroup subpopn substr sum sumwgt symbol symbolgen symget symput sysget sysin sysleave sysmsg sysparm sysprint sysprintfont sysprod sysrc system t table tables tan tanh tapeclose tbufsize terminal test then timepart tinv tnonct to today tol tooldef totper transformout translate trantab tranwrd trigamma trim trimn trunc truncover type unformatted uniform union until upcase update user usericon uss validate value var weight when where while wincharset window work workinit workterm write wsum xsync xwait yearcutoff yes yyq min max', ['inDataStep', 'inProc']); define('operator', 'and not ', ['inDataStep', 'inProc']); // Main function function tokenize(stream, state) { // Finally advance the stream var ch = stream.next(); // BLOCKCOMMENT if (ch === '/' && stream.eat('*')) { state.continueComment = true; return "comment"; } else if (state.continueComment === true) { // in comment block //comment ends at the beginning of the line if (ch === '*' && stream.peek() === '/') { stream.next(); state.continueComment = false; } else if (stream.skipTo('*')) { //comment is potentially later in line stream.skipTo('*'); stream.next(); if (stream.eat('/')) state.continueComment = false; } else { stream.skipToEnd(); } return "comment"; } // DoubleOperator match var doubleOperator = ch + stream.peek(); // Match all line comments. var myString = stream.string; var myRegexp = /(?:^\s*|[;]\s*)(\*.*?);/ig; var match = myRegexp.exec(myString); if (match !== null) { if (match.index === 0 && (stream.column() !== (match.index + match[0].length - 1))) { stream.backUp(stream.column()); stream.skipTo(';'); stream.next(); return 'comment'; } else if (match.index + 1 < stream.column() && stream.column() < match.index + match[0].length - 1) { // the ';' triggers the match so move one past it to start // the comment block that is why match.index+1 stream.backUp(stream.column() - match.index - 1); stream.skipTo(';'); stream.next(); return 'comment'; } } else if ((ch === '"' || ch === "'") && !state.continueString) { state.continueString = ch return "string" } else if (state.continueString) { if (state.continueString == ch) { state.continueString = null; } else if (stream.skipTo(state.continueString)) { // quote found on this line stream.next(); state.continueString = null; } else { stream.skipToEnd(); } return "string"; } else if (state.continueString !== null && stream.eol()) { stream.skipTo(state.continueString) || stream.skipToEnd(); return "string"; } else if (/[\d\.]/.test(ch)) { //find numbers if (ch === ".") stream.match(/^[0-9]+([eE][\-+]?[0-9]+)?/); else if (ch === "0") stream.match(/^[xX][0-9a-fA-F]+/) || stream.match(/^0[0-7]+/); else stream.match(/^[0-9]*\.?[0-9]*([eE][\-+]?[0-9]+)?/); return "number"; } else if (isDoubleOperatorChar.test(ch + stream.peek())) { // TWO SYMBOL TOKENS stream.next(); return "operator"; } else if (isDoubleOperatorSym.hasOwnProperty(doubleOperator)) { stream.next(); if (stream.peek() === ' ') return isDoubleOperatorSym[doubleOperator.toLowerCase()]; } else if (isSingleOperatorChar.test(ch)) { // SINGLE SYMBOL TOKENS return "operator"; } // Matches one whole word -- even if the word is a character var word; if (stream.match(/[%&;\w]+/, false) != null) { word = ch + stream.match(/[%&;\w]+/, true); if (/&/.test(word)) return 'variable' } else { word = ch; } // the word after DATA PROC or MACRO if (state.nextword) { stream.match(/[\w]+/); // match memname.libname if (stream.peek() === '.') stream.skipTo(' '); state.nextword = false; return 'variable-2'; } word = word.toLowerCase() // Are we in a DATA Step? if (state.inDataStep) { if (word === 'run;' || stream.match(/run\s;/)) { state.inDataStep = false; return 'builtin'; } // variable formats if ((word) && stream.next() === '.') { //either a format or libname.memname if (/\w/.test(stream.peek())) return 'variable-2'; else return 'variable'; } // do we have a DATA Step keyword if (word && words.hasOwnProperty(word) && (words[word].state.indexOf("inDataStep") !== -1 || words[word].state.indexOf("ALL") !== -1)) { //backup to the start of the word if (stream.start < stream.pos) stream.backUp(stream.pos - stream.start); //advance the length of the word and return for (var i = 0; i < word.length; ++i) stream.next(); return words[word].style; } } // Are we in an Proc statement? if (state.inProc) { if (word === 'run;' || word === 'quit;') { state.inProc = false; return 'builtin'; } // do we have a proc keyword if (word && words.hasOwnProperty(word) && (words[word].state.indexOf("inProc") !== -1 || words[word].state.indexOf("ALL") !== -1)) { stream.match(/[\w]+/); return words[word].style; } } // Are we in a Macro statement? if (state.inMacro) { if (word === '%mend') { if (stream.peek() === ';') stream.next(); state.inMacro = false; return 'builtin'; } if (word && words.hasOwnProperty(word) && (words[word].state.indexOf("inMacro") !== -1 || words[word].state.indexOf("ALL") !== -1)) { stream.match(/[\w]+/); return words[word].style; } return 'atom'; } // Do we have Keywords specific words? if (word && words.hasOwnProperty(word)) { // Negates the initial next() stream.backUp(1); // Actually move the stream stream.match(/[\w]+/); if (word === 'data' && /=/.test(stream.peek()) === false) { state.inDataStep = true; state.nextword = true; return 'builtin'; } if (word === 'proc') { state.inProc = true; state.nextword = true; return 'builtin'; } if (word === '%macro') { state.inMacro = true; state.nextword = true; return 'builtin'; } if (/title[1-9]/.test(word)) return 'def'; if (word === 'footnote') { stream.eat(/[1-9]/); return 'def'; } // Returns their value as state in the prior define methods if (state.inDataStep === true && words[word].state.indexOf("inDataStep") !== -1) return words[word].style; if (state.inProc === true && words[word].state.indexOf("inProc") !== -1) return words[word].style; if (state.inMacro === true && words[word].state.indexOf("inMacro") !== -1) return words[word].style; if (words[word].state.indexOf("ALL") !== -1) return words[word].style; return null; } // Unrecognized syntax return null; } return { startState: function () { return { inDataStep: false, inProc: false, inMacro: false, nextword: false, continueString: null, continueComment: false }; }, token: function (stream, state) { // Strip the spaces, but regex will account for them either way if (stream.eatSpace()) return null; // Go through the main process return tokenize(stream, state); }, blockCommentStart: "/*", blockCommentEnd: "*/" }; }); CodeMirror.defineMIME("text/x-sas", "sas"); }); PK!“F(œ>>Hfile-manager-advanced/application/library/codemirror/mode/sas/index.htmlnu„[µü¤ CodeMirror: SAS mode

    SAS mode

    MIME types defined: text/x-sas.

    PK!Æ”uk†8†8Jfile-manager-advanced/application/library/codemirror/mode/xquery/xquery.jsnu„[µü¤// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMode("xquery", function() { // The keywords object is set to the result of this self executing // function. Each keyword is a property of the keywords object whose // value is {type: atype, style: astyle} var keywords = function(){ // convenience functions used to build keywords object function kw(type) {return {type: type, style: "keyword"};} var A = kw("keyword a") , B = kw("keyword b") , C = kw("keyword c") , operator = kw("operator") , atom = {type: "atom", style: "atom"} , punctuation = {type: "punctuation", style: null} , qualifier = {type: "axis_specifier", style: "qualifier"}; // kwObj is what is return from this function at the end var kwObj = { 'if': A, 'switch': A, 'while': A, 'for': A, 'else': B, 'then': B, 'try': B, 'finally': B, 'catch': B, 'element': C, 'attribute': C, 'let': C, 'implements': C, 'import': C, 'module': C, 'namespace': C, 'return': C, 'super': C, 'this': C, 'throws': C, 'where': C, 'private': C, ',': punctuation, 'null': atom, 'fn:false()': atom, 'fn:true()': atom }; // a list of 'basic' keywords. For each add a property to kwObj with the value of // {type: basic[i], style: "keyword"} e.g. 'after' --> {type: "after", style: "keyword"} var basic = ['after','ancestor','ancestor-or-self','and','as','ascending','assert','attribute','before', 'by','case','cast','child','comment','declare','default','define','descendant','descendant-or-self', 'descending','document','document-node','element','else','eq','every','except','external','following', 'following-sibling','follows','for','function','if','import','in','instance','intersect','item', 'let','module','namespace','node','node','of','only','or','order','parent','precedes','preceding', 'preceding-sibling','processing-instruction','ref','return','returns','satisfies','schema','schema-element', 'self','some','sortby','stable','text','then','to','treat','typeswitch','union','variable','version','where', 'xquery', 'empty-sequence']; for(var i=0, l=basic.length; i < l; i++) { kwObj[basic[i]] = kw(basic[i]);}; // a list of types. For each add a property to kwObj with the value of // {type: "atom", style: "atom"} var types = ['xs:string', 'xs:float', 'xs:decimal', 'xs:double', 'xs:integer', 'xs:boolean', 'xs:date', 'xs:dateTime', 'xs:time', 'xs:duration', 'xs:dayTimeDuration', 'xs:time', 'xs:yearMonthDuration', 'numeric', 'xs:hexBinary', 'xs:base64Binary', 'xs:anyURI', 'xs:QName', 'xs:byte','xs:boolean','xs:anyURI','xf:yearMonthDuration']; for(var i=0, l=types.length; i < l; i++) { kwObj[types[i]] = atom;}; // each operator will add a property to kwObj with value of {type: "operator", style: "keyword"} var operators = ['eq', 'ne', 'lt', 'le', 'gt', 'ge', ':=', '=', '>', '>=', '<', '<=', '.', '|', '?', 'and', 'or', 'div', 'idiv', 'mod', '*', '/', '+', '-']; for(var i=0, l=operators.length; i < l; i++) { kwObj[operators[i]] = operator;}; // each axis_specifiers will add a property to kwObj with value of {type: "axis_specifier", style: "qualifier"} var axis_specifiers = ["self::", "attribute::", "child::", "descendant::", "descendant-or-self::", "parent::", "ancestor::", "ancestor-or-self::", "following::", "preceding::", "following-sibling::", "preceding-sibling::"]; for(var i=0, l=axis_specifiers.length; i < l; i++) { kwObj[axis_specifiers[i]] = qualifier; }; return kwObj; }(); function chain(stream, state, f) { state.tokenize = f; return f(stream, state); } // the primary mode tokenizer function tokenBase(stream, state) { var ch = stream.next(), mightBeFunction = false, isEQName = isEQNameAhead(stream); // an XML tag (if not in some sub, chained tokenizer) if (ch == "<") { if(stream.match("!--", true)) return chain(stream, state, tokenXMLComment); if(stream.match("![CDATA", false)) { state.tokenize = tokenCDATA; return "tag"; } if(stream.match("?", false)) { return chain(stream, state, tokenPreProcessing); } var isclose = stream.eat("/"); stream.eatSpace(); var tagName = "", c; while ((c = stream.eat(/[^\s\u00a0=<>\"\'\/?]/))) tagName += c; return chain(stream, state, tokenTag(tagName, isclose)); } // start code block else if(ch == "{") { pushStateStack(state,{ type: "codeblock"}); return null; } // end code block else if(ch == "}") { popStateStack(state); return null; } // if we're in an XML block else if(isInXmlBlock(state)) { if(ch == ">") return "tag"; else if(ch == "/" && stream.eat(">")) { popStateStack(state); return "tag"; } else return "variable"; } // if a number else if (/\d/.test(ch)) { stream.match(/^\d*(?:\.\d*)?(?:E[+\-]?\d+)?/); return "atom"; } // comment start else if (ch === "(" && stream.eat(":")) { pushStateStack(state, { type: "comment"}); return chain(stream, state, tokenComment); } // quoted string else if ( !isEQName && (ch === '"' || ch === "'")) return chain(stream, state, tokenString(ch)); // variable else if(ch === "$") { return chain(stream, state, tokenVariable); } // assignment else if(ch ===":" && stream.eat("=")) { return "keyword"; } // open paren else if(ch === "(") { pushStateStack(state, { type: "paren"}); return null; } // close paren else if(ch === ")") { popStateStack(state); return null; } // open paren else if(ch === "[") { pushStateStack(state, { type: "bracket"}); return null; } // close paren else if(ch === "]") { popStateStack(state); return null; } else { var known = keywords.propertyIsEnumerable(ch) && keywords[ch]; // if there's a EQName ahead, consume the rest of the string portion, it's likely a function if(isEQName && ch === '\"') while(stream.next() !== '"'){} if(isEQName && ch === '\'') while(stream.next() !== '\''){} // gobble up a word if the character is not known if(!known) stream.eatWhile(/[\w\$_-]/); // gobble a colon in the case that is a lib func type call fn:doc var foundColon = stream.eat(":"); // if there's not a second colon, gobble another word. Otherwise, it's probably an axis specifier // which should get matched as a keyword if(!stream.eat(":") && foundColon) { stream.eatWhile(/[\w\$_-]/); } // if the next non whitespace character is an open paren, this is probably a function (if not a keyword of other sort) if(stream.match(/^[ \t]*\(/, false)) { mightBeFunction = true; } // is the word a keyword? var word = stream.current(); known = keywords.propertyIsEnumerable(word) && keywords[word]; // if we think it's a function call but not yet known, // set style to variable for now for lack of something better if(mightBeFunction && !known) known = {type: "function_call", style: "variable def"}; // if the previous word was element, attribute, axis specifier, this word should be the name of that if(isInXmlConstructor(state)) { popStateStack(state); return "variable"; } // as previously checked, if the word is element,attribute, axis specifier, call it an "xmlconstructor" and // push the stack so we know to look for it on the next word if(word == "element" || word == "attribute" || known.type == "axis_specifier") pushStateStack(state, {type: "xmlconstructor"}); // if the word is known, return the details of that else just call this a generic 'word' return known ? known.style : "variable"; } } // handle comments, including nested function tokenComment(stream, state) { var maybeEnd = false, maybeNested = false, nestedCount = 0, ch; while (ch = stream.next()) { if (ch == ")" && maybeEnd) { if(nestedCount > 0) nestedCount--; else { popStateStack(state); break; } } else if(ch == ":" && maybeNested) { nestedCount++; } maybeEnd = (ch == ":"); maybeNested = (ch == "("); } return "comment"; } // tokenizer for string literals // optionally pass a tokenizer function to set state.tokenize back to when finished function tokenString(quote, f) { return function(stream, state) { var ch; if(isInString(state) && stream.current() == quote) { popStateStack(state); if(f) state.tokenize = f; return "string"; } pushStateStack(state, { type: "string", name: quote, tokenize: tokenString(quote, f) }); // if we're in a string and in an XML block, allow an embedded code block if(stream.match("{", false) && isInXmlAttributeBlock(state)) { state.tokenize = tokenBase; return "string"; } while (ch = stream.next()) { if (ch == quote) { popStateStack(state); if(f) state.tokenize = f; break; } else { // if we're in a string and in an XML block, allow an embedded code block in an attribute if(stream.match("{", false) && isInXmlAttributeBlock(state)) { state.tokenize = tokenBase; return "string"; } } } return "string"; }; } // tokenizer for variables function tokenVariable(stream, state) { var isVariableChar = /[\w\$_-]/; // a variable may start with a quoted EQName so if the next character is quote, consume to the next quote if(stream.eat("\"")) { while(stream.next() !== '\"'){}; stream.eat(":"); } else { stream.eatWhile(isVariableChar); if(!stream.match(":=", false)) stream.eat(":"); } stream.eatWhile(isVariableChar); state.tokenize = tokenBase; return "variable"; } // tokenizer for XML tags function tokenTag(name, isclose) { return function(stream, state) { stream.eatSpace(); if(isclose && stream.eat(">")) { popStateStack(state); state.tokenize = tokenBase; return "tag"; } // self closing tag without attributes? if(!stream.eat("/")) pushStateStack(state, { type: "tag", name: name, tokenize: tokenBase}); if(!stream.eat(">")) { state.tokenize = tokenAttribute; return "tag"; } else { state.tokenize = tokenBase; } return "tag"; }; } // tokenizer for XML attributes function tokenAttribute(stream, state) { var ch = stream.next(); if(ch == "/" && stream.eat(">")) { if(isInXmlAttributeBlock(state)) popStateStack(state); if(isInXmlBlock(state)) popStateStack(state); return "tag"; } if(ch == ">") { if(isInXmlAttributeBlock(state)) popStateStack(state); return "tag"; } if(ch == "=") return null; // quoted string if (ch == '"' || ch == "'") return chain(stream, state, tokenString(ch, tokenAttribute)); if(!isInXmlAttributeBlock(state)) pushStateStack(state, { type: "attribute", tokenize: tokenAttribute}); stream.eat(/[a-zA-Z_:]/); stream.eatWhile(/[-a-zA-Z0-9_:.]/); stream.eatSpace(); // the case where the attribute has not value and the tag was closed if(stream.match(">", false) || stream.match("/", false)) { popStateStack(state); state.tokenize = tokenBase; } return "attribute"; } // handle comments, including nested function tokenXMLComment(stream, state) { var ch; while (ch = stream.next()) { if (ch == "-" && stream.match("->", true)) { state.tokenize = tokenBase; return "comment"; } } } // handle CDATA function tokenCDATA(stream, state) { var ch; while (ch = stream.next()) { if (ch == "]" && stream.match("]", true)) { state.tokenize = tokenBase; return "comment"; } } } // handle preprocessing instructions function tokenPreProcessing(stream, state) { var ch; while (ch = stream.next()) { if (ch == "?" && stream.match(">", true)) { state.tokenize = tokenBase; return "comment meta"; } } } // functions to test the current context of the state function isInXmlBlock(state) { return isIn(state, "tag"); } function isInXmlAttributeBlock(state) { return isIn(state, "attribute"); } function isInXmlConstructor(state) { return isIn(state, "xmlconstructor"); } function isInString(state) { return isIn(state, "string"); } function isEQNameAhead(stream) { // assume we've already eaten a quote (") if(stream.current() === '"') return stream.match(/^[^\"]+\"\:/, false); else if(stream.current() === '\'') return stream.match(/^[^\"]+\'\:/, false); else return false; } function isIn(state, type) { return (state.stack.length && state.stack[state.stack.length - 1].type == type); } function pushStateStack(state, newState) { state.stack.push(newState); } function popStateStack(state) { state.stack.pop(); var reinstateTokenize = state.stack.length && state.stack[state.stack.length-1].tokenize; state.tokenize = reinstateTokenize || tokenBase; } // the interface for the mode API return { startState: function() { return { tokenize: tokenBase, cc: [], stack: [] }; }, token: function(stream, state) { if (stream.eatSpace()) return null; var style = state.tokenize(stream, state); return style; }, blockCommentStart: "(:", blockCommentEnd: ":)" }; }); CodeMirror.defineMIME("application/xquery", "xquery"); }); PK!�Ρ!¡!Kfile-manager-advanced/application/library/codemirror/mode/xquery/index.htmlnu„[µü¤ CodeMirror: XQuery mode

    XQuery mode

    MIME types defined: application/xquery.

    Development of the CodeMirror XQuery mode was sponsored by MarkLogic and developed by Mike Brevoort.

    PK!BÚbôôHfile-manager-advanced/application/library/codemirror/mode/xquery/test.jsnu„[µü¤// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE // Don't take these too seriously -- the expected results appear to be // based on the results of actual runs without any serious manual // verification. If a change you made causes them to fail, the test is // as likely to wrong as the code. (function() { var mode = CodeMirror.getMode({tabSize: 4}, "xquery"); function MT(name) { test.mode(name, mode, Array.prototype.slice.call(arguments, 1)); } MT("eviltest", "[keyword xquery] [keyword version] [variable "1][keyword .][atom 0][keyword -][variable ml"][def&variable ;] [comment (: this is : a \"comment\" :)]", " [keyword let] [variable $let] [keyword :=] [variable <x] [variable attr][keyword =][variable "value">"test"<func>][def&variable ;function]() [variable $var] {[keyword function]()} {[variable $var]}[variable <][keyword /][variable func><][keyword /][variable x>]", " [keyword let] [variable $joe][keyword :=][atom 1]", " [keyword return] [keyword element] [variable element] {", " [keyword attribute] [variable attribute] { [atom 1] },", " [keyword element] [variable test] { [variable 'a'] }, [keyword attribute] [variable foo] { [variable "bar"] },", " [def&variable fn:doc]()[[ [variable foo][keyword /][variable @bar] [keyword eq] [variable $let] ]],", " [keyword //][variable x] } [comment (: a more 'evil' test :)]", " [comment (: Modified Blakeley example (: with nested comment :) ... :)]", " [keyword declare] [keyword private] [keyword function] [def&variable local:declare]() {()}[variable ;]", " [keyword declare] [keyword private] [keyword function] [def&variable local:private]() {()}[variable ;]", " [keyword declare] [keyword private] [keyword function] [def&variable local:function]() {()}[variable ;]", " [keyword declare] [keyword private] [keyword function] [def&variable local:local]() {()}[variable ;]", " [keyword let] [variable $let] [keyword :=] [variable <let>let] [variable $let] [keyword :=] [variable "let"<][keyword /let][variable >]", " [keyword return] [keyword element] [variable element] {", " [keyword attribute] [variable attribute] { [keyword try] { [def&variable xdmp:version]() } [keyword catch]([variable $e]) { [def&variable xdmp:log]([variable $e]) } },", " [keyword attribute] [variable fn:doc] { [variable "bar"] [variable castable] [keyword as] [atom xs:string] },", " [keyword element] [variable text] { [keyword text] { [variable "text"] } },", " [def&variable fn:doc]()[[ [qualifier child::][variable eq][keyword /]([variable @bar] [keyword |] [qualifier attribute::][variable attribute]) [keyword eq] [variable $let] ]],", " [keyword //][variable fn:doc]", " }"); MT("testEmptySequenceKeyword", "[string \"foo\"] [keyword instance] [keyword of] [keyword empty-sequence]()"); MT("testMultiAttr", "[tag

    ][variable hello] [variable world][tag

    ]"); MT("test namespaced variable", "[keyword declare] [keyword namespace] [variable e] [keyword =] [string \"http://example.com/ANamespace\"][variable ;declare] [keyword variable] [variable $e:exampleComThisVarIsNotRecognized] [keyword as] [keyword element]([keyword *]) [variable external;]"); MT("test EQName variable", "[keyword declare] [keyword variable] [variable $\"http://www.example.com/ns/my\":var] [keyword :=] [atom 12][variable ;]", "[tag ]{[variable $\"http://www.example.com/ns/my\":var]}[tag ]"); MT("test EQName function", "[keyword declare] [keyword function] [def&variable \"http://www.example.com/ns/my\":fn] ([variable $a] [keyword as] [atom xs:integer]) [keyword as] [atom xs:integer] {", " [variable $a] [keyword +] [atom 2]", "}[variable ;]", "[tag ]{[def&variable \"http://www.example.com/ns/my\":fn]([atom 12])}[tag ]"); MT("test EQName function with single quotes", "[keyword declare] [keyword function] [def&variable 'http://www.example.com/ns/my':fn] ([variable $a] [keyword as] [atom xs:integer]) [keyword as] [atom xs:integer] {", " [variable $a] [keyword +] [atom 2]", "}[variable ;]", "[tag ]{[def&variable 'http://www.example.com/ns/my':fn]([atom 12])}[tag ]"); MT("testProcessingInstructions", "[def&variable data]([comment&meta ]) [keyword instance] [keyword of] [atom xs:string]"); MT("testQuoteEscapeDouble", "[keyword let] [variable $rootfolder] [keyword :=] [string \"c:\\builds\\winnt\\HEAD\\qa\\scripts\\\"]", "[keyword let] [variable $keysfolder] [keyword :=] [def&variable concat]([variable $rootfolder], [string \"keys\\\"])"); })(); PK!:^Tñ¥I¥IJfile-manager-advanced/application/library/codemirror/mode/erlang/erlang.jsnu„[µü¤// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE /*jshint unused:true, eqnull:true, curly:true, bitwise:true */ /*jshint undef:true, latedef:true, trailing:true */ /*global CodeMirror:true */ // erlang mode. // tokenizer -> token types -> CodeMirror styles // tokenizer maintains a parse stack // indenter uses the parse stack // TODO indenter: // bit syntax // old guard/bif/conversion clashes (e.g. "float/1") // type/spec/opaque (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMIME("text/x-erlang", "erlang"); CodeMirror.defineMode("erlang", function(cmCfg) { "use strict"; ///////////////////////////////////////////////////////////////////////////// // constants var typeWords = [ "-type", "-spec", "-export_type", "-opaque"]; var keywordWords = [ "after","begin","catch","case","cond","end","fun","if", "let","of","query","receive","try","when"]; var separatorRE = /[\->,;]/; var separatorWords = [ "->",";",","]; var operatorAtomWords = [ "and","andalso","band","bnot","bor","bsl","bsr","bxor", "div","not","or","orelse","rem","xor"]; var operatorSymbolRE = /[\+\-\*\/<>=\|:!]/; var operatorSymbolWords = [ "=","+","-","*","/",">",">=","<","=<","=:=","==","=/=","/=","||","<-","!"]; var openParenRE = /[<\(\[\{]/; var openParenWords = [ "<<","(","[","{"]; var closeParenRE = /[>\)\]\}]/; var closeParenWords = [ "}","]",")",">>"]; var guardWords = [ "is_atom","is_binary","is_bitstring","is_boolean","is_float", "is_function","is_integer","is_list","is_number","is_pid", "is_port","is_record","is_reference","is_tuple", "atom","binary","bitstring","boolean","function","integer","list", "number","pid","port","record","reference","tuple"]; var bifWords = [ "abs","adler32","adler32_combine","alive","apply","atom_to_binary", "atom_to_list","binary_to_atom","binary_to_existing_atom", "binary_to_list","binary_to_term","bit_size","bitstring_to_list", "byte_size","check_process_code","contact_binary","crc32", "crc32_combine","date","decode_packet","delete_module", "disconnect_node","element","erase","exit","float","float_to_list", "garbage_collect","get","get_keys","group_leader","halt","hd", "integer_to_list","internal_bif","iolist_size","iolist_to_binary", "is_alive","is_atom","is_binary","is_bitstring","is_boolean", "is_float","is_function","is_integer","is_list","is_number","is_pid", "is_port","is_process_alive","is_record","is_reference","is_tuple", "length","link","list_to_atom","list_to_binary","list_to_bitstring", "list_to_existing_atom","list_to_float","list_to_integer", "list_to_pid","list_to_tuple","load_module","make_ref","module_loaded", "monitor_node","node","node_link","node_unlink","nodes","notalive", "now","open_port","pid_to_list","port_close","port_command", "port_connect","port_control","pre_loaded","process_flag", "process_info","processes","purge_module","put","register", "registered","round","self","setelement","size","spawn","spawn_link", "spawn_monitor","spawn_opt","split_binary","statistics", "term_to_binary","time","throw","tl","trunc","tuple_size", "tuple_to_list","unlink","unregister","whereis"]; // upper case: [A-Z] [Ø-Þ] [À-Ö] // lower case: [a-z] [ß-ö] [ø-ÿ] var anumRE = /[\w@Ø-ÞÀ-Öß-öø-ÿ]/; var escapesRE = /[0-7]{1,3}|[bdefnrstv\\"']|\^[a-zA-Z]|x[0-9a-zA-Z]{2}|x{[0-9a-zA-Z]+}/; ///////////////////////////////////////////////////////////////////////////// // tokenizer function tokenizer(stream,state) { // in multi-line string if (state.in_string) { state.in_string = (!doubleQuote(stream)); return rval(state,stream,"string"); } // in multi-line atom if (state.in_atom) { state.in_atom = (!singleQuote(stream)); return rval(state,stream,"atom"); } // whitespace if (stream.eatSpace()) { return rval(state,stream,"whitespace"); } // attributes and type specs if (!peekToken(state) && stream.match(/-\s*[a-zß-öø-ÿ][\wØ-ÞÀ-Öß-öø-ÿ]*/)) { if (is_member(stream.current(),typeWords)) { return rval(state,stream,"type"); }else{ return rval(state,stream,"attribute"); } } var ch = stream.next(); // comment if (ch == '%') { stream.skipToEnd(); return rval(state,stream,"comment"); } // colon if (ch == ":") { return rval(state,stream,"colon"); } // macro if (ch == '?') { stream.eatSpace(); stream.eatWhile(anumRE); return rval(state,stream,"macro"); } // record if (ch == "#") { stream.eatSpace(); stream.eatWhile(anumRE); return rval(state,stream,"record"); } // dollar escape if (ch == "$") { if (stream.next() == "\\" && !stream.match(escapesRE)) { return rval(state,stream,"error"); } return rval(state,stream,"number"); } // dot if (ch == ".") { return rval(state,stream,"dot"); } // quoted atom if (ch == '\'') { if (!(state.in_atom = (!singleQuote(stream)))) { if (stream.match(/\s*\/\s*[0-9]/,false)) { stream.match(/\s*\/\s*[0-9]/,true); return rval(state,stream,"fun"); // 'f'/0 style fun } if (stream.match(/\s*\(/,false) || stream.match(/\s*:/,false)) { return rval(state,stream,"function"); } } return rval(state,stream,"atom"); } // string if (ch == '"') { state.in_string = (!doubleQuote(stream)); return rval(state,stream,"string"); } // variable if (/[A-Z_Ø-ÞÀ-Ö]/.test(ch)) { stream.eatWhile(anumRE); return rval(state,stream,"variable"); } // atom/keyword/BIF/function if (/[a-z_ß-öø-ÿ]/.test(ch)) { stream.eatWhile(anumRE); if (stream.match(/\s*\/\s*[0-9]/,false)) { stream.match(/\s*\/\s*[0-9]/,true); return rval(state,stream,"fun"); // f/0 style fun } var w = stream.current(); if (is_member(w,keywordWords)) { return rval(state,stream,"keyword"); }else if (is_member(w,operatorAtomWords)) { return rval(state,stream,"operator"); }else if (stream.match(/\s*\(/,false)) { // 'put' and 'erlang:put' are bifs, 'foo:put' is not if (is_member(w,bifWords) && ((peekToken(state).token != ":") || (peekToken(state,2).token == "erlang"))) { return rval(state,stream,"builtin"); }else if (is_member(w,guardWords)) { return rval(state,stream,"guard"); }else{ return rval(state,stream,"function"); } }else if (lookahead(stream) == ":") { if (w == "erlang") { return rval(state,stream,"builtin"); } else { return rval(state,stream,"function"); } }else if (is_member(w,["true","false"])) { return rval(state,stream,"boolean"); }else{ return rval(state,stream,"atom"); } } // number var digitRE = /[0-9]/; var radixRE = /[0-9a-zA-Z]/; // 36#zZ style int if (digitRE.test(ch)) { stream.eatWhile(digitRE); if (stream.eat('#')) { // 36#aZ style integer if (!stream.eatWhile(radixRE)) { stream.backUp(1); //"36#" - syntax error } } else if (stream.eat('.')) { // float if (!stream.eatWhile(digitRE)) { stream.backUp(1); // "3." - probably end of function } else { if (stream.eat(/[eE]/)) { // float with exponent if (stream.eat(/[-+]/)) { if (!stream.eatWhile(digitRE)) { stream.backUp(2); // "2e-" - syntax error } } else { if (!stream.eatWhile(digitRE)) { stream.backUp(1); // "2e" - syntax error } } } } } return rval(state,stream,"number"); // normal integer } // open parens if (nongreedy(stream,openParenRE,openParenWords)) { return rval(state,stream,"open_paren"); } // close parens if (nongreedy(stream,closeParenRE,closeParenWords)) { return rval(state,stream,"close_paren"); } // separators if (greedy(stream,separatorRE,separatorWords)) { return rval(state,stream,"separator"); } // operators if (greedy(stream,operatorSymbolRE,operatorSymbolWords)) { return rval(state,stream,"operator"); } return rval(state,stream,null); } ///////////////////////////////////////////////////////////////////////////// // utilities function nongreedy(stream,re,words) { if (stream.current().length == 1 && re.test(stream.current())) { stream.backUp(1); while (re.test(stream.peek())) { stream.next(); if (is_member(stream.current(),words)) { return true; } } stream.backUp(stream.current().length-1); } return false; } function greedy(stream,re,words) { if (stream.current().length == 1 && re.test(stream.current())) { while (re.test(stream.peek())) { stream.next(); } while (0 < stream.current().length) { if (is_member(stream.current(),words)) { return true; }else{ stream.backUp(1); } } stream.next(); } return false; } function doubleQuote(stream) { return quote(stream, '"', '\\'); } function singleQuote(stream) { return quote(stream,'\'','\\'); } function quote(stream,quoteChar,escapeChar) { while (!stream.eol()) { var ch = stream.next(); if (ch == quoteChar) { return true; }else if (ch == escapeChar) { stream.next(); } } return false; } function lookahead(stream) { var m = stream.match(/([\n\s]+|%[^\n]*\n)*(.)/,false); return m ? m.pop() : ""; } function is_member(element,list) { return (-1 < list.indexOf(element)); } function rval(state,stream,type) { // parse stack pushToken(state,realToken(type,stream)); // map erlang token type to CodeMirror style class // erlang -> CodeMirror tag switch (type) { case "atom": return "atom"; case "attribute": return "attribute"; case "boolean": return "atom"; case "builtin": return "builtin"; case "close_paren": return null; case "colon": return null; case "comment": return "comment"; case "dot": return null; case "error": return "error"; case "fun": return "meta"; case "function": return "tag"; case "guard": return "property"; case "keyword": return "keyword"; case "macro": return "variable-2"; case "number": return "number"; case "open_paren": return null; case "operator": return "operator"; case "record": return "bracket"; case "separator": return null; case "string": return "string"; case "type": return "def"; case "variable": return "variable"; default: return null; } } function aToken(tok,col,ind,typ) { return {token: tok, column: col, indent: ind, type: typ}; } function realToken(type,stream) { return aToken(stream.current(), stream.column(), stream.indentation(), type); } function fakeToken(type) { return aToken(type,0,0,type); } function peekToken(state,depth) { var len = state.tokenStack.length; var dep = (depth ? depth : 1); if (len < dep) { return false; }else{ return state.tokenStack[len-dep]; } } function pushToken(state,token) { if (!(token.type == "comment" || token.type == "whitespace")) { state.tokenStack = maybe_drop_pre(state.tokenStack,token); state.tokenStack = maybe_drop_post(state.tokenStack); } } function maybe_drop_pre(s,token) { var last = s.length-1; if (0 < last && s[last].type === "record" && token.type === "dot") { s.pop(); }else if (0 < last && s[last].type === "group") { s.pop(); s.push(token); }else{ s.push(token); } return s; } function maybe_drop_post(s) { var last = s.length-1; if (s[last].type === "dot") { return []; } if (s[last].type === "fun" && s[last-1].token === "fun") { return s.slice(0,last-1); } switch (s[s.length-1].token) { case "}": return d(s,{g:["{"]}); case "]": return d(s,{i:["["]}); case ")": return d(s,{i:["("]}); case ">>": return d(s,{i:["<<"]}); case "end": return d(s,{i:["begin","case","fun","if","receive","try"]}); case ",": return d(s,{e:["begin","try","when","->", ",","(","[","{","<<"]}); case "->": return d(s,{r:["when"], m:["try","if","case","receive"]}); case ";": return d(s,{E:["case","fun","if","receive","try","when"]}); case "catch":return d(s,{e:["try"]}); case "of": return d(s,{e:["case"]}); case "after":return d(s,{e:["receive","try"]}); default: return s; } } function d(stack,tt) { // stack is a stack of Token objects. // tt is an object; {type:tokens} // type is a char, tokens is a list of token strings. // The function returns (possibly truncated) stack. // It will descend the stack, looking for a Token such that Token.token // is a member of tokens. If it does not find that, it will normally (but // see "E" below) return stack. If it does find a match, it will remove // all the Tokens between the top and the matched Token. // If type is "m", that is all it does. // If type is "i", it will also remove the matched Token and the top Token. // If type is "g", like "i", but add a fake "group" token at the top. // If type is "r", it will remove the matched Token, but not the top Token. // If type is "e", it will keep the matched Token but not the top Token. // If type is "E", it behaves as for type "e", except if there is no match, // in which case it will return an empty stack. for (var type in tt) { var len = stack.length-1; var tokens = tt[type]; for (var i = len-1; -1 < i ; i--) { if (is_member(stack[i].token,tokens)) { var ss = stack.slice(0,i); switch (type) { case "m": return ss.concat(stack[i]).concat(stack[len]); case "r": return ss.concat(stack[len]); case "i": return ss; case "g": return ss.concat(fakeToken("group")); case "E": return ss.concat(stack[i]); case "e": return ss.concat(stack[i]); } } } } return (type == "E" ? [] : stack); } ///////////////////////////////////////////////////////////////////////////// // indenter function indenter(state,textAfter) { var t; var unit = cmCfg.indentUnit; var wordAfter = wordafter(textAfter); var currT = peekToken(state,1); var prevT = peekToken(state,2); if (state.in_string || state.in_atom) { return CodeMirror.Pass; }else if (!prevT) { return 0; }else if (currT.token == "when") { return currT.column+unit; }else if (wordAfter === "when" && prevT.type === "function") { return prevT.indent+unit; }else if (wordAfter === "(" && currT.token === "fun") { return currT.column+3; }else if (wordAfter === "catch" && (t = getToken(state,["try"]))) { return t.column; }else if (is_member(wordAfter,["end","after","of"])) { t = getToken(state,["begin","case","fun","if","receive","try"]); return t ? t.column : CodeMirror.Pass; }else if (is_member(wordAfter,closeParenWords)) { t = getToken(state,openParenWords); return t ? t.column : CodeMirror.Pass; }else if (is_member(currT.token,[",","|","||"]) || is_member(wordAfter,[",","|","||"])) { t = postcommaToken(state); return t ? t.column+t.token.length : unit; }else if (currT.token == "->") { if (is_member(prevT.token, ["receive","case","if","try"])) { return prevT.column+unit+unit; }else{ return prevT.column+unit; } }else if (is_member(currT.token,openParenWords)) { return currT.column+currT.token.length; }else{ t = defaultToken(state); return truthy(t) ? t.column+unit : 0; } } function wordafter(str) { var m = str.match(/,|[a-z]+|\}|\]|\)|>>|\|+|\(/); return truthy(m) && (m.index === 0) ? m[0] : ""; } function postcommaToken(state) { var objs = state.tokenStack.slice(0,-1); var i = getTokenIndex(objs,"type",["open_paren"]); return truthy(objs[i]) ? objs[i] : false; } function defaultToken(state) { var objs = state.tokenStack; var stop = getTokenIndex(objs,"type",["open_paren","separator","keyword"]); var oper = getTokenIndex(objs,"type",["operator"]); if (truthy(stop) && truthy(oper) && stop < oper) { return objs[stop+1]; } else if (truthy(stop)) { return objs[stop]; } else { return false; } } function getToken(state,tokens) { var objs = state.tokenStack; var i = getTokenIndex(objs,"token",tokens); return truthy(objs[i]) ? objs[i] : false; } function getTokenIndex(objs,propname,propvals) { for (var i = objs.length-1; -1 < i ; i--) { if (is_member(objs[i][propname],propvals)) { return i; } } return false; } function truthy(x) { return (x !== false) && (x != null); } ///////////////////////////////////////////////////////////////////////////// // this object defines the mode return { startState: function() { return {tokenStack: [], in_string: false, in_atom: false}; }, token: function(stream, state) { return tokenizer(stream, state); }, indent: function(state, textAfter) { return indenter(state,textAfter); }, lineComment: "%" }; }); }); PK!tX‡uxxKfile-manager-advanced/application/library/codemirror/mode/erlang/index.htmlnu„[µü¤ CodeMirror: Erlang mode

    Erlang mode

    MIME types defined: text/x-erlang.

    PK!‰šúú77Hfile-manager-advanced/application/library/codemirror/mode/asn.1/asn.1.jsnu„[µü¤// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMode("asn.1", function(config, parserConfig) { var indentUnit = config.indentUnit, keywords = parserConfig.keywords || {}, cmipVerbs = parserConfig.cmipVerbs || {}, compareTypes = parserConfig.compareTypes || {}, status = parserConfig.status || {}, tags = parserConfig.tags || {}, storage = parserConfig.storage || {}, modifier = parserConfig.modifier || {}, accessTypes = parserConfig.accessTypes|| {}, multiLineStrings = parserConfig.multiLineStrings, indentStatements = parserConfig.indentStatements !== false; var isOperatorChar = /[\|\^]/; var curPunc; function tokenBase(stream, state) { var ch = stream.next(); if (ch == '"' || ch == "'") { state.tokenize = tokenString(ch); return state.tokenize(stream, state); } if (/[\[\]\(\){}:=,;]/.test(ch)) { curPunc = ch; return "punctuation"; } if (ch == "-"){ if (stream.eat("-")) { stream.skipToEnd(); return "comment"; } } if (/\d/.test(ch)) { stream.eatWhile(/[\w\.]/); return "number"; } if (isOperatorChar.test(ch)) { stream.eatWhile(isOperatorChar); return "operator"; } stream.eatWhile(/[\w\-]/); var cur = stream.current(); if (keywords.propertyIsEnumerable(cur)) return "keyword"; if (cmipVerbs.propertyIsEnumerable(cur)) return "variable cmipVerbs"; if (compareTypes.propertyIsEnumerable(cur)) return "atom compareTypes"; if (status.propertyIsEnumerable(cur)) return "comment status"; if (tags.propertyIsEnumerable(cur)) return "variable-3 tags"; if (storage.propertyIsEnumerable(cur)) return "builtin storage"; if (modifier.propertyIsEnumerable(cur)) return "string-2 modifier"; if (accessTypes.propertyIsEnumerable(cur)) return "atom accessTypes"; return "variable"; } function tokenString(quote) { return function(stream, state) { var escaped = false, next, end = false; while ((next = stream.next()) != null) { if (next == quote && !escaped){ var afterNext = stream.peek(); //look if the character if the quote is like the B in '10100010'B if (afterNext){ afterNext = afterNext.toLowerCase(); if(afterNext == "b" || afterNext == "h" || afterNext == "o") stream.next(); } end = true; break; } escaped = !escaped && next == "\\"; } if (end || !(escaped || multiLineStrings)) state.tokenize = null; return "string"; }; } function Context(indented, column, type, align, prev) { this.indented = indented; this.column = column; this.type = type; this.align = align; this.prev = prev; } function pushContext(state, col, type) { var indent = state.indented; if (state.context && state.context.type == "statement") indent = state.context.indented; return state.context = new Context(indent, col, type, null, state.context); } function popContext(state) { var t = state.context.type; if (t == ")" || t == "]" || t == "}") state.indented = state.context.indented; return state.context = state.context.prev; } //Interface return { startState: function(basecolumn) { return { tokenize: null, context: new Context((basecolumn || 0) - indentUnit, 0, "top", false), indented: 0, startOfLine: true }; }, token: function(stream, state) { var ctx = state.context; if (stream.sol()) { if (ctx.align == null) ctx.align = false; state.indented = stream.indentation(); state.startOfLine = true; } if (stream.eatSpace()) return null; curPunc = null; var style = (state.tokenize || tokenBase)(stream, state); if (style == "comment") return style; if (ctx.align == null) ctx.align = true; if ((curPunc == ";" || curPunc == ":" || curPunc == ",") && ctx.type == "statement"){ popContext(state); } else if (curPunc == "{") pushContext(state, stream.column(), "}"); else if (curPunc == "[") pushContext(state, stream.column(), "]"); else if (curPunc == "(") pushContext(state, stream.column(), ")"); else if (curPunc == "}") { while (ctx.type == "statement") ctx = popContext(state); if (ctx.type == "}") ctx = popContext(state); while (ctx.type == "statement") ctx = popContext(state); } else if (curPunc == ctx.type) popContext(state); else if (indentStatements && (((ctx.type == "}" || ctx.type == "top") && curPunc != ';') || (ctx.type == "statement" && curPunc == "newstatement"))) pushContext(state, stream.column(), "statement"); state.startOfLine = false; return style; }, electricChars: "{}", lineComment: "--", fold: "brace" }; }); function words(str) { var obj = {}, words = str.split(" "); for (var i = 0; i < words.length; ++i) obj[words[i]] = true; return obj; } CodeMirror.defineMIME("text/x-ttcn-asn", { name: "asn.1", keywords: words("DEFINITIONS OBJECTS IF DERIVED INFORMATION ACTION" + " REPLY ANY NAMED CHARACTERIZED BEHAVIOUR REGISTERED" + " WITH AS IDENTIFIED CONSTRAINED BY PRESENT BEGIN" + " IMPORTS FROM UNITS SYNTAX MIN-ACCESS MAX-ACCESS" + " MINACCESS MAXACCESS REVISION STATUS DESCRIPTION" + " SEQUENCE SET COMPONENTS OF CHOICE DistinguishedName" + " ENUMERATED SIZE MODULE END INDEX AUGMENTS EXTENSIBILITY" + " IMPLIED EXPORTS"), cmipVerbs: words("ACTIONS ADD GET NOTIFICATIONS REPLACE REMOVE"), compareTypes: words("OPTIONAL DEFAULT MANAGED MODULE-TYPE MODULE_IDENTITY" + " MODULE-COMPLIANCE OBJECT-TYPE OBJECT-IDENTITY" + " OBJECT-COMPLIANCE MODE CONFIRMED CONDITIONAL" + " SUBORDINATE SUPERIOR CLASS TRUE FALSE NULL" + " TEXTUAL-CONVENTION"), status: words("current deprecated mandatory obsolete"), tags: words("APPLICATION AUTOMATIC EXPLICIT IMPLICIT PRIVATE TAGS" + " UNIVERSAL"), storage: words("BOOLEAN INTEGER OBJECT IDENTIFIER BIT OCTET STRING" + " UTCTime InterfaceIndex IANAifType CMIP-Attribute" + " REAL PACKAGE PACKAGES IpAddress PhysAddress" + " NetworkAddress BITS BMPString TimeStamp TimeTicks" + " TruthValue RowStatus DisplayString GeneralString" + " GraphicString IA5String NumericString" + " PrintableString SnmpAdminAtring TeletexString" + " UTF8String VideotexString VisibleString StringStore" + " ISO646String T61String UniversalString Unsigned32" + " Integer32 Gauge Gauge32 Counter Counter32 Counter64"), modifier: words("ATTRIBUTE ATTRIBUTES MANDATORY-GROUP MANDATORY-GROUPS" + " GROUP GROUPS ELEMENTS EQUALITY ORDERING SUBSTRINGS" + " DEFINED"), accessTypes: words("not-accessible accessible-for-notify read-only" + " read-create read-write"), multiLineStrings: true }); }); PK!bå9g®®Jfile-manager-advanced/application/library/codemirror/mode/asn.1/index.htmlnu„[µü¤ CodeMirror: ASN.1 mode

    ASN.1 example


    Language: Abstract Syntax Notation One (ASN.1)

    MIME types defined: text/x-ttcn-asn


    The development of this mode has been sponsored by Ericsson .

    Coded by Asmelash Tsegay Gebretsadkan

    PK!IóŒ Dfile-manager-advanced/application/library/codemirror/mode/index.htmlnu„[µü¤ CodeMirror: Language Modes

    Language modes

    This is a list of every mode in the distribution. Each mode lives in a subdirectory of the mode/ directory, and typically defines a single JavaScript file that implements the mode. Loading such file will make the language available to CodeMirror, through the mode option.

    PK!±·hï¨ ¨ Kfile-manager-advanced/application/library/codemirror/mode/stylus/index.htmlnu„[µü¤ CodeMirror: Stylus mode

    Stylus mode

    MIME types defined: text/x-styl.

    Created by Dmitry Kiselyov

    PK!ê²;ˆ¤ˆ¤Jfile-manager-advanced/application/library/codemirror/mode/stylus/stylus.jsnu„[µü¤// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE // Stylus mode created by Dmitry Kiselyov http://git.io/AaRB (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMode("stylus", function(config) { var indentUnit = config.indentUnit, tagKeywords = keySet(tagKeywords_), tagVariablesRegexp = /^(a|b|i|s|col|em)$/i, propertyKeywords = keySet(propertyKeywords_), nonStandardPropertyKeywords = keySet(nonStandardPropertyKeywords_), valueKeywords = keySet(valueKeywords_), colorKeywords = keySet(colorKeywords_), documentTypes = keySet(documentTypes_), documentTypesRegexp = wordRegexp(documentTypes_), mediaFeatures = keySet(mediaFeatures_), mediaTypes = keySet(mediaTypes_), fontProperties = keySet(fontProperties_), operatorsRegexp = /^\s*([.]{2,3}|&&|\|\||\*\*|[?!=:]?=|[-+*\/%<>]=?|\?:|\~)/, wordOperatorKeywordsRegexp = wordRegexp(wordOperatorKeywords_), blockKeywords = keySet(blockKeywords_), vendorPrefixesRegexp = new RegExp(/^\-(moz|ms|o|webkit)-/i), commonAtoms = keySet(commonAtoms_), firstWordMatch = "", states = {}, ch, style, type, override; /** * Tokenizers */ function tokenBase(stream, state) { firstWordMatch = stream.string.match(/(^[\w-]+\s*=\s*$)|(^\s*[\w-]+\s*=\s*[\w-])|(^\s*(\.|#|@|\$|\&|\[|\d|\+|::?|\{|\>|~|\/)?\s*[\w-]*([a-z0-9-]|\*|\/\*)(\(|,)?)/); state.context.line.firstWord = firstWordMatch ? firstWordMatch[0].replace(/^\s*/, "") : ""; state.context.line.indent = stream.indentation(); ch = stream.peek(); // Line comment if (stream.match("//")) { stream.skipToEnd(); return ["comment", "comment"]; } // Block comment if (stream.match("/*")) { state.tokenize = tokenCComment; return tokenCComment(stream, state); } // String if (ch == "\"" || ch == "'") { stream.next(); state.tokenize = tokenString(ch); return state.tokenize(stream, state); } // Def if (ch == "@") { stream.next(); stream.eatWhile(/[\w\\-]/); return ["def", stream.current()]; } // ID selector or Hex color if (ch == "#") { stream.next(); // Hex color if (stream.match(/^[0-9a-f]{6}|[0-9a-f]{3}/i)) { return ["atom", "atom"]; } // ID selector if (stream.match(/^[a-z][\w-]*/i)) { return ["builtin", "hash"]; } } // Vendor prefixes if (stream.match(vendorPrefixesRegexp)) { return ["meta", "vendor-prefixes"]; } // Numbers if (stream.match(/^-?[0-9]?\.?[0-9]/)) { stream.eatWhile(/[a-z%]/i); return ["number", "unit"]; } // !important|optional if (ch == "!") { stream.next(); return [stream.match(/^(important|optional)/i) ? "keyword": "operator", "important"]; } // Class if (ch == "." && stream.match(/^\.[a-z][\w-]*/i)) { return ["qualifier", "qualifier"]; } // url url-prefix domain regexp if (stream.match(documentTypesRegexp)) { if (stream.peek() == "(") state.tokenize = tokenParenthesized; return ["property", "word"]; } // Mixins / Functions if (stream.match(/^[a-z][\w-]*\(/i)) { stream.backUp(1); return ["keyword", "mixin"]; } // Block mixins if (stream.match(/^(\+|-)[a-z][\w-]*\(/i)) { stream.backUp(1); return ["keyword", "block-mixin"]; } // Parent Reference BEM naming if (stream.string.match(/^\s*&/) && stream.match(/^[-_]+[a-z][\w-]*/)) { return ["qualifier", "qualifier"]; } // / Root Reference & Parent Reference if (stream.match(/^(\/|&)(-|_|:|\.|#|[a-z])/)) { stream.backUp(1); return ["variable-3", "reference"]; } if (stream.match(/^&{1}\s*$/)) { return ["variable-3", "reference"]; } // Word operator if (stream.match(wordOperatorKeywordsRegexp)) { return ["operator", "operator"]; } // Word if (stream.match(/^\$?[-_]*[a-z0-9]+[\w-]*/i)) { // Variable if (stream.match(/^(\.|\[)[\w-\'\"\]]+/i, false)) { if (!wordIsTag(stream.current())) { stream.match(/\./); return ["variable-2", "variable-name"]; } } return ["variable-2", "word"]; } // Operators if (stream.match(operatorsRegexp)) { return ["operator", stream.current()]; } // Delimiters if (/[:;,{}\[\]\(\)]/.test(ch)) { stream.next(); return [null, ch]; } // Non-detected items stream.next(); return [null, null]; } /** * Token comment */ function tokenCComment(stream, state) { var maybeEnd = false, ch; while ((ch = stream.next()) != null) { if (maybeEnd && ch == "/") { state.tokenize = null; break; } maybeEnd = (ch == "*"); } return ["comment", "comment"]; } /** * Token string */ function tokenString(quote) { return function(stream, state) { var escaped = false, ch; while ((ch = stream.next()) != null) { if (ch == quote && !escaped) { if (quote == ")") stream.backUp(1); break; } escaped = !escaped && ch == "\\"; } if (ch == quote || !escaped && quote != ")") state.tokenize = null; return ["string", "string"]; }; } /** * Token parenthesized */ function tokenParenthesized(stream, state) { stream.next(); // Must be "(" if (!stream.match(/\s*[\"\')]/, false)) state.tokenize = tokenString(")"); else state.tokenize = null; return [null, "("]; } /** * Context management */ function Context(type, indent, prev, line) { this.type = type; this.indent = indent; this.prev = prev; this.line = line || {firstWord: "", indent: 0}; } function pushContext(state, stream, type, indent) { indent = indent >= 0 ? indent : indentUnit; state.context = new Context(type, stream.indentation() + indent, state.context); return type; } function popContext(state, currentIndent) { var contextIndent = state.context.indent - indentUnit; currentIndent = currentIndent || false; state.context = state.context.prev; if (currentIndent) state.context.indent = contextIndent; return state.context.type; } function pass(type, stream, state) { return states[state.context.type](type, stream, state); } function popAndPass(type, stream, state, n) { for (var i = n || 1; i > 0; i--) state.context = state.context.prev; return pass(type, stream, state); } /** * Parser */ function wordIsTag(word) { return word.toLowerCase() in tagKeywords; } function wordIsProperty(word) { word = word.toLowerCase(); return word in propertyKeywords || word in fontProperties; } function wordIsBlock(word) { return word.toLowerCase() in blockKeywords; } function wordIsVendorPrefix(word) { return word.toLowerCase().match(vendorPrefixesRegexp); } function wordAsValue(word) { var wordLC = word.toLowerCase(); var override = "variable-2"; if (wordIsTag(word)) override = "tag"; else if (wordIsBlock(word)) override = "block-keyword"; else if (wordIsProperty(word)) override = "property"; else if (wordLC in valueKeywords || wordLC in commonAtoms) override = "atom"; else if (wordLC == "return" || wordLC in colorKeywords) override = "keyword"; // Font family else if (word.match(/^[A-Z]/)) override = "string"; return override; } function typeIsBlock(type, stream) { return ((endOfLine(stream) && (type == "{" || type == "]" || type == "hash" || type == "qualifier")) || type == "block-mixin"); } function typeIsInterpolation(type, stream) { return type == "{" && stream.match(/^\s*\$?[\w-]+/i, false); } function typeIsPseudo(type, stream) { return type == ":" && stream.match(/^[a-z-]+/, false); } function startOfLine(stream) { return stream.sol() || stream.string.match(new RegExp("^\\s*" + escapeRegExp(stream.current()))); } function endOfLine(stream) { return stream.eol() || stream.match(/^\s*$/, false); } function firstWordOfLine(line) { var re = /^\s*[-_]*[a-z0-9]+[\w-]*/i; var result = typeof line == "string" ? line.match(re) : line.string.match(re); return result ? result[0].replace(/^\s*/, "") : ""; } /** * Block */ states.block = function(type, stream, state) { if ((type == "comment" && startOfLine(stream)) || (type == "," && endOfLine(stream)) || type == "mixin") { return pushContext(state, stream, "block", 0); } if (typeIsInterpolation(type, stream)) { return pushContext(state, stream, "interpolation"); } if (endOfLine(stream) && type == "]") { if (!/^\s*(\.|#|:|\[|\*|&)/.test(stream.string) && !wordIsTag(firstWordOfLine(stream))) { return pushContext(state, stream, "block", 0); } } if (typeIsBlock(type, stream, state)) { return pushContext(state, stream, "block"); } if (type == "}" && endOfLine(stream)) { return pushContext(state, stream, "block", 0); } if (type == "variable-name") { if (stream.string.match(/^\s?\$[\w-\.\[\]\'\"]+$/) || wordIsBlock(firstWordOfLine(stream))) { return pushContext(state, stream, "variableName"); } else { return pushContext(state, stream, "variableName", 0); } } if (type == "=") { if (!endOfLine(stream) && !wordIsBlock(firstWordOfLine(stream))) { return pushContext(state, stream, "block", 0); } return pushContext(state, stream, "block"); } if (type == "*") { if (endOfLine(stream) || stream.match(/\s*(,|\.|#|\[|:|{)/,false)) { override = "tag"; return pushContext(state, stream, "block"); } } if (typeIsPseudo(type, stream)) { return pushContext(state, stream, "pseudo"); } if (/@(font-face|media|supports|(-moz-)?document)/.test(type)) { return pushContext(state, stream, endOfLine(stream) ? "block" : "atBlock"); } if (/@(-(moz|ms|o|webkit)-)?keyframes$/.test(type)) { return pushContext(state, stream, "keyframes"); } if (/@extends?/.test(type)) { return pushContext(state, stream, "extend", 0); } if (type && type.charAt(0) == "@") { // Property Lookup if (stream.indentation() > 0 && wordIsProperty(stream.current().slice(1))) { override = "variable-2"; return "block"; } if (/(@import|@require|@charset)/.test(type)) { return pushContext(state, stream, "block", 0); } return pushContext(state, stream, "block"); } if (type == "reference" && endOfLine(stream)) { return pushContext(state, stream, "block"); } if (type == "(") { return pushContext(state, stream, "parens"); } if (type == "vendor-prefixes") { return pushContext(state, stream, "vendorPrefixes"); } if (type == "word") { var word = stream.current(); override = wordAsValue(word); if (override == "property") { if (startOfLine(stream)) { return pushContext(state, stream, "block", 0); } else { override = "atom"; return "block"; } } if (override == "tag") { // tag is a css value if (/embed|menu|pre|progress|sub|table/.test(word)) { if (wordIsProperty(firstWordOfLine(stream))) { override = "atom"; return "block"; } } // tag is an attribute if (stream.string.match(new RegExp("\\[\\s*" + word + "|" + word +"\\s*\\]"))) { override = "atom"; return "block"; } // tag is a variable if (tagVariablesRegexp.test(word)) { if ((startOfLine(stream) && stream.string.match(/=/)) || (!startOfLine(stream) && !stream.string.match(/^(\s*\.|#|\&|\[|\/|>|\*)/) && !wordIsTag(firstWordOfLine(stream)))) { override = "variable-2"; if (wordIsBlock(firstWordOfLine(stream))) return "block"; return pushContext(state, stream, "block", 0); } } if (endOfLine(stream)) return pushContext(state, stream, "block"); } if (override == "block-keyword") { override = "keyword"; // Postfix conditionals if (stream.current(/(if|unless)/) && !startOfLine(stream)) { return "block"; } return pushContext(state, stream, "block"); } if (word == "return") return pushContext(state, stream, "block", 0); // Placeholder selector if (override == "variable-2" && stream.string.match(/^\s?\$[\w-\.\[\]\'\"]+$/)) { return pushContext(state, stream, "block"); } } return state.context.type; }; /** * Parens */ states.parens = function(type, stream, state) { if (type == "(") return pushContext(state, stream, "parens"); if (type == ")") { if (state.context.prev.type == "parens") { return popContext(state); } if ((stream.string.match(/^[a-z][\w-]*\(/i) && endOfLine(stream)) || wordIsBlock(firstWordOfLine(stream)) || /(\.|#|:|\[|\*|&|>|~|\+|\/)/.test(firstWordOfLine(stream)) || (!stream.string.match(/^-?[a-z][\w-\.\[\]\'\"]*\s*=/) && wordIsTag(firstWordOfLine(stream)))) { return pushContext(state, stream, "block"); } if (stream.string.match(/^[\$-]?[a-z][\w-\.\[\]\'\"]*\s*=/) || stream.string.match(/^\s*(\(|\)|[0-9])/) || stream.string.match(/^\s+[a-z][\w-]*\(/i) || stream.string.match(/^\s+[\$-]?[a-z]/i)) { return pushContext(state, stream, "block", 0); } if (endOfLine(stream)) return pushContext(state, stream, "block"); else return pushContext(state, stream, "block", 0); } if (type && type.charAt(0) == "@" && wordIsProperty(stream.current().slice(1))) { override = "variable-2"; } if (type == "word") { var word = stream.current(); override = wordAsValue(word); if (override == "tag" && tagVariablesRegexp.test(word)) { override = "variable-2"; } if (override == "property" || word == "to") override = "atom"; } if (type == "variable-name") { return pushContext(state, stream, "variableName"); } if (typeIsPseudo(type, stream)) { return pushContext(state, stream, "pseudo"); } return state.context.type; }; /** * Vendor prefixes */ states.vendorPrefixes = function(type, stream, state) { if (type == "word") { override = "property"; return pushContext(state, stream, "block", 0); } return popContext(state); }; /** * Pseudo */ states.pseudo = function(type, stream, state) { if (!wordIsProperty(firstWordOfLine(stream.string))) { stream.match(/^[a-z-]+/); override = "variable-3"; if (endOfLine(stream)) return pushContext(state, stream, "block"); return popContext(state); } return popAndPass(type, stream, state); }; /** * atBlock */ states.atBlock = function(type, stream, state) { if (type == "(") return pushContext(state, stream, "atBlock_parens"); if (typeIsBlock(type, stream, state)) { return pushContext(state, stream, "block"); } if (typeIsInterpolation(type, stream)) { return pushContext(state, stream, "interpolation"); } if (type == "word") { var word = stream.current().toLowerCase(); if (/^(only|not|and|or)$/.test(word)) override = "keyword"; else if (documentTypes.hasOwnProperty(word)) override = "tag"; else if (mediaTypes.hasOwnProperty(word)) override = "attribute"; else if (mediaFeatures.hasOwnProperty(word)) override = "property"; else if (nonStandardPropertyKeywords.hasOwnProperty(word)) override = "string-2"; else override = wordAsValue(stream.current()); if (override == "tag" && endOfLine(stream)) { return pushContext(state, stream, "block"); } } if (type == "operator" && /^(not|and|or)$/.test(stream.current())) { override = "keyword"; } return state.context.type; }; states.atBlock_parens = function(type, stream, state) { if (type == "{" || type == "}") return state.context.type; if (type == ")") { if (endOfLine(stream)) return pushContext(state, stream, "block"); else return pushContext(state, stream, "atBlock"); } if (type == "word") { var word = stream.current().toLowerCase(); override = wordAsValue(word); if (/^(max|min)/.test(word)) override = "property"; if (override == "tag") { tagVariablesRegexp.test(word) ? override = "variable-2" : override = "atom"; } return state.context.type; } return states.atBlock(type, stream, state); }; /** * Keyframes */ states.keyframes = function(type, stream, state) { if (stream.indentation() == "0" && ((type == "}" && startOfLine(stream)) || type == "]" || type == "hash" || type == "qualifier" || wordIsTag(stream.current()))) { return popAndPass(type, stream, state); } if (type == "{") return pushContext(state, stream, "keyframes"); if (type == "}") { if (startOfLine(stream)) return popContext(state, true); else return pushContext(state, stream, "keyframes"); } if (type == "unit" && /^[0-9]+\%$/.test(stream.current())) { return pushContext(state, stream, "keyframes"); } if (type == "word") { override = wordAsValue(stream.current()); if (override == "block-keyword") { override = "keyword"; return pushContext(state, stream, "keyframes"); } } if (/@(font-face|media|supports|(-moz-)?document)/.test(type)) { return pushContext(state, stream, endOfLine(stream) ? "block" : "atBlock"); } if (type == "mixin") { return pushContext(state, stream, "block", 0); } return state.context.type; }; /** * Interpolation */ states.interpolation = function(type, stream, state) { if (type == "{") popContext(state) && pushContext(state, stream, "block"); if (type == "}") { if (stream.string.match(/^\s*(\.|#|:|\[|\*|&|>|~|\+|\/)/i) || (stream.string.match(/^\s*[a-z]/i) && wordIsTag(firstWordOfLine(stream)))) { return pushContext(state, stream, "block"); } if (!stream.string.match(/^(\{|\s*\&)/) || stream.match(/\s*[\w-]/,false)) { return pushContext(state, stream, "block", 0); } return pushContext(state, stream, "block"); } if (type == "variable-name") { return pushContext(state, stream, "variableName", 0); } if (type == "word") { override = wordAsValue(stream.current()); if (override == "tag") override = "atom"; } return state.context.type; }; /** * Extend/s */ states.extend = function(type, stream, state) { if (type == "[" || type == "=") return "extend"; if (type == "]") return popContext(state); if (type == "word") { override = wordAsValue(stream.current()); return "extend"; } return popContext(state); }; /** * Variable name */ states.variableName = function(type, stream, state) { if (type == "string" || type == "[" || type == "]" || stream.current().match(/^(\.|\$)/)) { if (stream.current().match(/^\.[\w-]+/i)) override = "variable-2"; return "variableName"; } return popAndPass(type, stream, state); }; return { startState: function(base) { return { tokenize: null, state: "block", context: new Context("block", base || 0, null) }; }, token: function(stream, state) { if (!state.tokenize && stream.eatSpace()) return null; style = (state.tokenize || tokenBase)(stream, state); if (style && typeof style == "object") { type = style[1]; style = style[0]; } override = style; state.state = states[state.state](type, stream, state); return override; }, indent: function(state, textAfter, line) { var cx = state.context, ch = textAfter && textAfter.charAt(0), indent = cx.indent, lineFirstWord = firstWordOfLine(textAfter), lineIndent = line.length - line.replace(/^\s*/, "").length, prevLineFirstWord = state.context.prev ? state.context.prev.line.firstWord : "", prevLineIndent = state.context.prev ? state.context.prev.line.indent : lineIndent; if (cx.prev && (ch == "}" && (cx.type == "block" || cx.type == "atBlock" || cx.type == "keyframes") || ch == ")" && (cx.type == "parens" || cx.type == "atBlock_parens") || ch == "{" && (cx.type == "at"))) { indent = cx.indent - indentUnit; cx = cx.prev; } else if (!(/(\})/.test(ch))) { if (/@|\$|\d/.test(ch) || /^\{/.test(textAfter) || /^\s*\/(\/|\*)/.test(textAfter) || /^\s*\/\*/.test(prevLineFirstWord) || /^\s*[\w-\.\[\]\'\"]+\s*(\?|:|\+)?=/i.test(textAfter) || /^(\+|-)?[a-z][\w-]*\(/i.test(textAfter) || /^return/.test(textAfter) || wordIsBlock(lineFirstWord)) { indent = lineIndent; } else if (/(\.|#|:|\[|\*|&|>|~|\+|\/)/.test(ch) || wordIsTag(lineFirstWord)) { if (/\,\s*$/.test(prevLineFirstWord)) { indent = prevLineIndent; } else if (/^\s+/.test(line) && (/(\.|#|:|\[|\*|&|>|~|\+|\/)/.test(prevLineFirstWord) || wordIsTag(prevLineFirstWord))) { indent = lineIndent <= prevLineIndent ? prevLineIndent : prevLineIndent + indentUnit; } else { indent = lineIndent; } } else if (!/,\s*$/.test(line) && (wordIsVendorPrefix(lineFirstWord) || wordIsProperty(lineFirstWord))) { if (wordIsBlock(prevLineFirstWord)) { indent = lineIndent <= prevLineIndent ? prevLineIndent : prevLineIndent + indentUnit; } else if (/^\{/.test(prevLineFirstWord)) { indent = lineIndent <= prevLineIndent ? lineIndent : prevLineIndent + indentUnit; } else if (wordIsVendorPrefix(prevLineFirstWord) || wordIsProperty(prevLineFirstWord)) { indent = lineIndent >= prevLineIndent ? prevLineIndent : lineIndent; } else if (/^(\.|#|:|\[|\*|&|@|\+|\-|>|~|\/)/.test(prevLineFirstWord) || /=\s*$/.test(prevLineFirstWord) || wordIsTag(prevLineFirstWord) || /^\$[\w-\.\[\]\'\"]/.test(prevLineFirstWord)) { indent = prevLineIndent + indentUnit; } else { indent = lineIndent; } } } return indent; }, electricChars: "}", lineComment: "//", fold: "indent" }; }); // developer.mozilla.org/en-US/docs/Web/HTML/Element var tagKeywords_ = ["a","abbr","address","area","article","aside","audio", "b", "base","bdi", "bdo","bgsound","blockquote","body","br","button","canvas","caption","cite", "code","col","colgroup","data","datalist","dd","del","details","dfn","div", "dl","dt","em","embed","fieldset","figcaption","figure","footer","form","h1", "h2","h3","h4","h5","h6","head","header","hgroup","hr","html","i","iframe", "img","input","ins","kbd","keygen","label","legend","li","link","main","map", "mark","marquee","menu","menuitem","meta","meter","nav","nobr","noframes", "noscript","object","ol","optgroup","option","output","p","param","pre", "progress","q","rp","rt","ruby","s","samp","script","section","select", "small","source","span","strong","style","sub","summary","sup","table","tbody","td","textarea","tfoot","th","thead","time","tr","track", "u","ul","var","video"]; // github.com/codemirror/CodeMirror/blob/master/mode/css/css.js var documentTypes_ = ["domain", "regexp", "url", "url-prefix"]; var mediaTypes_ = ["all","aural","braille","handheld","print","projection","screen","tty","tv","embossed"]; var mediaFeatures_ = ["width","min-width","max-width","height","min-height","max-height","device-width","min-device-width","max-device-width","device-height","min-device-height","max-device-height","aspect-ratio","min-aspect-ratio","max-aspect-ratio","device-aspect-ratio","min-device-aspect-ratio","max-device-aspect-ratio","color","min-color","max-color","color-index","min-color-index","max-color-index","monochrome","min-monochrome","max-monochrome","resolution","min-resolution","max-resolution","scan","grid"]; var propertyKeywords_ = ["align-content","align-items","align-self","alignment-adjust","alignment-baseline","anchor-point","animation","animation-delay","animation-direction","animation-duration","animation-fill-mode","animation-iteration-count","animation-name","animation-play-state","animation-timing-function","appearance","azimuth","backface-visibility","background","background-attachment","background-clip","background-color","background-image","background-origin","background-position","background-repeat","background-size","baseline-shift","binding","bleed","bookmark-label","bookmark-level","bookmark-state","bookmark-target","border","border-bottom","border-bottom-color","border-bottom-left-radius","border-bottom-right-radius","border-bottom-style","border-bottom-width","border-collapse","border-color","border-image","border-image-outset","border-image-repeat","border-image-slice","border-image-source","border-image-width","border-left","border-left-color","border-left-style","border-left-width","border-radius","border-right","border-right-color","border-right-style","border-right-width","border-spacing","border-style","border-top","border-top-color","border-top-left-radius","border-top-right-radius","border-top-style","border-top-width","border-width","bottom","box-decoration-break","box-shadow","box-sizing","break-after","break-before","break-inside","caption-side","clear","clip","color","color-profile","column-count","column-fill","column-gap","column-rule","column-rule-color","column-rule-style","column-rule-width","column-span","column-width","columns","content","counter-increment","counter-reset","crop","cue","cue-after","cue-before","cursor","direction","display","dominant-baseline","drop-initial-after-adjust","drop-initial-after-align","drop-initial-before-adjust","drop-initial-before-align","drop-initial-size","drop-initial-value","elevation","empty-cells","fit","fit-position","flex","flex-basis","flex-direction","flex-flow","flex-grow","flex-shrink","flex-wrap","float","float-offset","flow-from","flow-into","font","font-feature-settings","font-family","font-kerning","font-language-override","font-size","font-size-adjust","font-stretch","font-style","font-synthesis","font-variant","font-variant-alternates","font-variant-caps","font-variant-east-asian","font-variant-ligatures","font-variant-numeric","font-variant-position","font-weight","grid","grid-area","grid-auto-columns","grid-auto-flow","grid-auto-position","grid-auto-rows","grid-column","grid-column-end","grid-column-start","grid-row","grid-row-end","grid-row-start","grid-template","grid-template-areas","grid-template-columns","grid-template-rows","hanging-punctuation","height","hyphens","icon","image-orientation","image-rendering","image-resolution","inline-box-align","justify-content","left","letter-spacing","line-break","line-height","line-stacking","line-stacking-ruby","line-stacking-shift","line-stacking-strategy","list-style","list-style-image","list-style-position","list-style-type","margin","margin-bottom","margin-left","margin-right","margin-top","marker-offset","marks","marquee-direction","marquee-loop","marquee-play-count","marquee-speed","marquee-style","max-height","max-width","min-height","min-width","move-to","nav-down","nav-index","nav-left","nav-right","nav-up","object-fit","object-position","opacity","order","orphans","outline","outline-color","outline-offset","outline-style","outline-width","overflow","overflow-style","overflow-wrap","overflow-x","overflow-y","padding","padding-bottom","padding-left","padding-right","padding-top","page","page-break-after","page-break-before","page-break-inside","page-policy","pause","pause-after","pause-before","perspective","perspective-origin","pitch","pitch-range","play-during","position","presentation-level","punctuation-trim","quotes","region-break-after","region-break-before","region-break-inside","region-fragment","rendering-intent","resize","rest","rest-after","rest-before","richness","right","rotation","rotation-point","ruby-align","ruby-overhang","ruby-position","ruby-span","shape-image-threshold","shape-inside","shape-margin","shape-outside","size","speak","speak-as","speak-header","speak-numeral","speak-punctuation","speech-rate","stress","string-set","tab-size","table-layout","target","target-name","target-new","target-position","text-align","text-align-last","text-decoration","text-decoration-color","text-decoration-line","text-decoration-skip","text-decoration-style","text-emphasis","text-emphasis-color","text-emphasis-position","text-emphasis-style","text-height","text-indent","text-justify","text-outline","text-overflow","text-shadow","text-size-adjust","text-space-collapse","text-transform","text-underline-position","text-wrap","top","transform","transform-origin","transform-style","transition","transition-delay","transition-duration","transition-property","transition-timing-function","unicode-bidi","vertical-align","visibility","voice-balance","voice-duration","voice-family","voice-pitch","voice-range","voice-rate","voice-stress","voice-volume","volume","white-space","widows","width","word-break","word-spacing","word-wrap","z-index","clip-path","clip-rule","mask","enable-background","filter","flood-color","flood-opacity","lighting-color","stop-color","stop-opacity","pointer-events","color-interpolation","color-interpolation-filters","color-rendering","fill","fill-opacity","fill-rule","image-rendering","marker","marker-end","marker-mid","marker-start","shape-rendering","stroke","stroke-dasharray","stroke-dashoffset","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke-width","text-rendering","baseline-shift","dominant-baseline","glyph-orientation-horizontal","glyph-orientation-vertical","text-anchor","writing-mode","font-smoothing","osx-font-smoothing"]; var nonStandardPropertyKeywords_ = ["scrollbar-arrow-color","scrollbar-base-color","scrollbar-dark-shadow-color","scrollbar-face-color","scrollbar-highlight-color","scrollbar-shadow-color","scrollbar-3d-light-color","scrollbar-track-color","shape-inside","searchfield-cancel-button","searchfield-decoration","searchfield-results-button","searchfield-results-decoration","zoom"]; var fontProperties_ = ["font-family","src","unicode-range","font-variant","font-feature-settings","font-stretch","font-weight","font-style"]; var colorKeywords_ = ["aliceblue","antiquewhite","aqua","aquamarine","azure","beige","bisque","black","blanchedalmond","blue","blueviolet","brown","burlywood","cadetblue","chartreuse","chocolate","coral","cornflowerblue","cornsilk","crimson","cyan","darkblue","darkcyan","darkgoldenrod","darkgray","darkgreen","darkkhaki","darkmagenta","darkolivegreen","darkorange","darkorchid","darkred","darksalmon","darkseagreen","darkslateblue","darkslategray","darkturquoise","darkviolet","deeppink","deepskyblue","dimgray","dodgerblue","firebrick","floralwhite","forestgreen","fuchsia","gainsboro","ghostwhite","gold","goldenrod","gray","grey","green","greenyellow","honeydew","hotpink","indianred","indigo","ivory","khaki","lavender","lavenderblush","lawngreen","lemonchiffon","lightblue","lightcoral","lightcyan","lightgoldenrodyellow","lightgray","lightgreen","lightpink","lightsalmon","lightseagreen","lightskyblue","lightslategray","lightsteelblue","lightyellow","lime","limegreen","linen","magenta","maroon","mediumaquamarine","mediumblue","mediumorchid","mediumpurple","mediumseagreen","mediumslateblue","mediumspringgreen","mediumturquoise","mediumvioletred","midnightblue","mintcream","mistyrose","moccasin","navajowhite","navy","oldlace","olive","olivedrab","orange","orangered","orchid","palegoldenrod","palegreen","paleturquoise","palevioletred","papayawhip","peachpuff","peru","pink","plum","powderblue","purple","rebeccapurple","red","rosybrown","royalblue","saddlebrown","salmon","sandybrown","seagreen","seashell","sienna","silver","skyblue","slateblue","slategray","snow","springgreen","steelblue","tan","teal","thistle","tomato","turquoise","violet","wheat","white","whitesmoke","yellow","yellowgreen"]; var valueKeywords_ = ["above","absolute","activeborder","additive","activecaption","afar","after-white-space","ahead","alias","all","all-scroll","alphabetic","alternate","always","amharic","amharic-abegede","antialiased","appworkspace","arabic-indic","armenian","asterisks","attr","auto","avoid","avoid-column","avoid-page","avoid-region","background","backwards","baseline","below","bidi-override","binary","bengali","blink","block","block-axis","bold","bolder","border","border-box","both","bottom","break","break-all","break-word","bullets","button","button-bevel","buttonface","buttonhighlight","buttonshadow","buttontext","calc","cambodian","capitalize","caps-lock-indicator","caption","captiontext","caret","cell","center","checkbox","circle","cjk-decimal","cjk-earthly-branch","cjk-heavenly-stem","cjk-ideographic","clear","clip","close-quote","col-resize","collapse","column","compact","condensed","contain","content","content-box","context-menu","continuous","copy","counter","counters","cover","crop","cross","crosshair","currentcolor","cursive","cyclic","dashed","decimal","decimal-leading-zero","default","default-button","destination-atop","destination-in","destination-out","destination-over","devanagari","disc","discard","disclosure-closed","disclosure-open","document","dot-dash","dot-dot-dash","dotted","double","down","e-resize","ease","ease-in","ease-in-out","ease-out","element","ellipse","ellipsis","embed","end","ethiopic","ethiopic-abegede","ethiopic-abegede-am-et","ethiopic-abegede-gez","ethiopic-abegede-ti-er","ethiopic-abegede-ti-et","ethiopic-halehame-aa-er","ethiopic-halehame-aa-et","ethiopic-halehame-am-et","ethiopic-halehame-gez","ethiopic-halehame-om-et","ethiopic-halehame-sid-et","ethiopic-halehame-so-et","ethiopic-halehame-ti-er","ethiopic-halehame-ti-et","ethiopic-halehame-tig","ethiopic-numeric","ew-resize","expanded","extends","extra-condensed","extra-expanded","fantasy","fast","fill","fixed","flat","flex","footnotes","forwards","from","geometricPrecision","georgian","graytext","groove","gujarati","gurmukhi","hand","hangul","hangul-consonant","hebrew","help","hidden","hide","higher","highlight","highlighttext","hiragana","hiragana-iroha","horizontal","hsl","hsla","icon","ignore","inactiveborder","inactivecaption","inactivecaptiontext","infinite","infobackground","infotext","inherit","initial","inline","inline-axis","inline-block","inline-flex","inline-table","inset","inside","intrinsic","invert","italic","japanese-formal","japanese-informal","justify","kannada","katakana","katakana-iroha","keep-all","khmer","korean-hangul-formal","korean-hanja-formal","korean-hanja-informal","landscape","lao","large","larger","left","level","lighter","line-through","linear","linear-gradient","lines","list-item","listbox","listitem","local","logical","loud","lower","lower-alpha","lower-armenian","lower-greek","lower-hexadecimal","lower-latin","lower-norwegian","lower-roman","lowercase","ltr","malayalam","match","matrix","matrix3d","media-controls-background","media-current-time-display","media-fullscreen-button","media-mute-button","media-play-button","media-return-to-realtime-button","media-rewind-button","media-seek-back-button","media-seek-forward-button","media-slider","media-sliderthumb","media-time-remaining-display","media-volume-slider","media-volume-slider-container","media-volume-sliderthumb","medium","menu","menulist","menulist-button","menulist-text","menulist-textfield","menutext","message-box","middle","min-intrinsic","mix","mongolian","monospace","move","multiple","myanmar","n-resize","narrower","ne-resize","nesw-resize","no-close-quote","no-drop","no-open-quote","no-repeat","none","normal","not-allowed","nowrap","ns-resize","numbers","numeric","nw-resize","nwse-resize","oblique","octal","open-quote","optimizeLegibility","optimizeSpeed","oriya","oromo","outset","outside","outside-shape","overlay","overline","padding","padding-box","painted","page","paused","persian","perspective","plus-darker","plus-lighter","pointer","polygon","portrait","pre","pre-line","pre-wrap","preserve-3d","progress","push-button","radial-gradient","radio","read-only","read-write","read-write-plaintext-only","rectangle","region","relative","repeat","repeating-linear-gradient","repeating-radial-gradient","repeat-x","repeat-y","reset","reverse","rgb","rgba","ridge","right","rotate","rotate3d","rotateX","rotateY","rotateZ","round","row-resize","rtl","run-in","running","s-resize","sans-serif","scale","scale3d","scaleX","scaleY","scaleZ","scroll","scrollbar","se-resize","searchfield","searchfield-cancel-button","searchfield-decoration","searchfield-results-button","searchfield-results-decoration","semi-condensed","semi-expanded","separate","serif","show","sidama","simp-chinese-formal","simp-chinese-informal","single","skew","skewX","skewY","skip-white-space","slide","slider-horizontal","slider-vertical","sliderthumb-horizontal","sliderthumb-vertical","slow","small","small-caps","small-caption","smaller","solid","somali","source-atop","source-in","source-out","source-over","space","spell-out","square","square-button","start","static","status-bar","stretch","stroke","sub","subpixel-antialiased","super","sw-resize","symbolic","symbols","table","table-caption","table-cell","table-column","table-column-group","table-footer-group","table-header-group","table-row","table-row-group","tamil","telugu","text","text-bottom","text-top","textarea","textfield","thai","thick","thin","threeddarkshadow","threedface","threedhighlight","threedlightshadow","threedshadow","tibetan","tigre","tigrinya-er","tigrinya-er-abegede","tigrinya-et","tigrinya-et-abegede","to","top","trad-chinese-formal","trad-chinese-informal","translate","translate3d","translateX","translateY","translateZ","transparent","ultra-condensed","ultra-expanded","underline","up","upper-alpha","upper-armenian","upper-greek","upper-hexadecimal","upper-latin","upper-norwegian","upper-roman","uppercase","urdu","url","var","vertical","vertical-text","visible","visibleFill","visiblePainted","visibleStroke","visual","w-resize","wait","wave","wider","window","windowframe","windowtext","words","x-large","x-small","xor","xx-large","xx-small","bicubic","optimizespeed","grayscale","row","row-reverse","wrap","wrap-reverse","column-reverse","flex-start","flex-end","space-between","space-around"]; var wordOperatorKeywords_ = ["in","and","or","not","is not","is a","is","isnt","defined","if unless"], blockKeywords_ = ["for","if","else","unless", "from", "to"], commonAtoms_ = ["null","true","false","href","title","type","not-allowed","readonly","disabled"], commonDef_ = ["@font-face", "@keyframes", "@media", "@viewport", "@page", "@host", "@supports", "@block", "@css"]; var hintWords = tagKeywords_.concat(documentTypes_,mediaTypes_,mediaFeatures_, propertyKeywords_,nonStandardPropertyKeywords_, colorKeywords_,valueKeywords_,fontProperties_, wordOperatorKeywords_,blockKeywords_, commonAtoms_,commonDef_); function wordRegexp(words) { words = words.sort(function(a,b){return b > a;}); return new RegExp("^((" + words.join(")|(") + "))\\b"); } function keySet(array) { var keys = {}; for (var i = 0; i < array.length; ++i) keys[array[i]] = true; return keys; } function escapeRegExp(text) { return text.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&"); } CodeMirror.registerHelper("hintWords", "stylus", hintWords); CodeMirror.defineMIME("text/x-styl", "stylus"); }); PK!Ö~Ê  Nfile-manager-advanced/application/library/codemirror/mode/asterisk/asterisk.jsnu„[µü¤// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE /* * ===================================================================================== * * Filename: mode/asterisk/asterisk.js * * Description: CodeMirror mode for Asterisk dialplan * * Created: 05/17/2012 09:20:25 PM * Revision: none * * Author: Stas Kobzar (stas@modulis.ca), * Company: Modulis.ca Inc. * * ===================================================================================== */ (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMode("asterisk", function() { var atoms = ["exten", "same", "include","ignorepat","switch"], dpcmd = ["#include","#exec"], apps = [ "addqueuemember","adsiprog","aelsub","agentlogin","agentmonitoroutgoing","agi", "alarmreceiver","amd","answer","authenticate","background","backgrounddetect", "bridge","busy","callcompletioncancel","callcompletionrequest","celgenuserevent", "changemonitor","chanisavail","channelredirect","chanspy","clearhash","confbridge", "congestion","continuewhile","controlplayback","dahdiacceptr2call","dahdibarge", "dahdiras","dahdiscan","dahdisendcallreroutingfacility","dahdisendkeypadfacility", "datetime","dbdel","dbdeltree","deadagi","dial","dictate","directory","disa", "dumpchan","eagi","echo","endwhile","exec","execif","execiftime","exitwhile","extenspy", "externalivr","festival","flash","followme","forkcdr","getcpeid","gosub","gosubif", "goto","gotoif","gotoiftime","hangup","iax2provision","ices","importvar","incomplete", "ivrdemo","jabberjoin","jabberleave","jabbersend","jabbersendgroup","jabberstatus", "jack","log","macro","macroexclusive","macroexit","macroif","mailboxexists","meetme", "meetmeadmin","meetmechanneladmin","meetmecount","milliwatt","minivmaccmess","minivmdelete", "minivmgreet","minivmmwi","minivmnotify","minivmrecord","mixmonitor","monitor","morsecode", "mp3player","mset","musiconhold","nbscat","nocdr","noop","odbc","odbc","odbcfinish", "originate","ospauth","ospfinish","osplookup","ospnext","page","park","parkandannounce", "parkedcall","pausemonitor","pausequeuemember","pickup","pickupchan","playback","playtones", "privacymanager","proceeding","progress","queue","queuelog","raiseexception","read","readexten", "readfile","receivefax","receivefax","receivefax","record","removequeuemember", "resetcdr","retrydial","return","ringing","sayalpha","saycountedadj","saycountednoun", "saycountpl","saydigits","saynumber","sayphonetic","sayunixtime","senddtmf","sendfax", "sendfax","sendfax","sendimage","sendtext","sendurl","set","setamaflags", "setcallerpres","setmusiconhold","sipaddheader","sipdtmfmode","sipremoveheader","skel", "slastation","slatrunk","sms","softhangup","speechactivategrammar","speechbackground", "speechcreate","speechdeactivategrammar","speechdestroy","speechloadgrammar","speechprocessingsound", "speechstart","speechunloadgrammar","stackpop","startmusiconhold","stopmixmonitor","stopmonitor", "stopmusiconhold","stopplaytones","system","testclient","testserver","transfer","tryexec", "trysystem","unpausemonitor","unpausequeuemember","userevent","verbose","vmauthenticate", "vmsayname","voicemail","voicemailmain","wait","waitexten","waitfornoise","waitforring", "waitforsilence","waitmusiconhold","waituntil","while","zapateller" ]; function basicToken(stream,state){ var cur = ''; var ch = stream.next(); // comment if(ch == ";") { stream.skipToEnd(); return "comment"; } // context if(ch == '[') { stream.skipTo(']'); stream.eat(']'); return "header"; } // string if(ch == '"') { stream.skipTo('"'); return "string"; } if(ch == "'") { stream.skipTo("'"); return "string-2"; } // dialplan commands if(ch == '#') { stream.eatWhile(/\w/); cur = stream.current(); if(dpcmd.indexOf(cur) !== -1) { stream.skipToEnd(); return "strong"; } } // application args if(ch == '$'){ var ch1 = stream.peek(); if(ch1 == '{'){ stream.skipTo('}'); stream.eat('}'); return "variable-3"; } } // extension stream.eatWhile(/\w/); cur = stream.current(); if(atoms.indexOf(cur) !== -1) { state.extenStart = true; switch(cur) { case 'same': state.extenSame = true; break; case 'include': case 'switch': case 'ignorepat': state.extenInclude = true;break; default:break; } return "atom"; } } return { startState: function() { return { extenStart: false, extenSame: false, extenInclude: false, extenExten: false, extenPriority: false, extenApplication: false }; }, token: function(stream, state) { var cur = ''; if(stream.eatSpace()) return null; // extension started if(state.extenStart){ stream.eatWhile(/[^\s]/); cur = stream.current(); if(/^=>?$/.test(cur)){ state.extenExten = true; state.extenStart = false; return "strong"; } else { state.extenStart = false; stream.skipToEnd(); return "error"; } } else if(state.extenExten) { // set exten and priority state.extenExten = false; state.extenPriority = true; stream.eatWhile(/[^,]/); if(state.extenInclude) { stream.skipToEnd(); state.extenPriority = false; state.extenInclude = false; } if(state.extenSame) { state.extenPriority = false; state.extenSame = false; state.extenApplication = true; } return "tag"; } else if(state.extenPriority) { state.extenPriority = false; state.extenApplication = true; stream.next(); // get comma if(state.extenSame) return null; stream.eatWhile(/[^,]/); return "number"; } else if(state.extenApplication) { stream.eatWhile(/,/); cur = stream.current(); if(cur === ',') return null; stream.eatWhile(/\w/); cur = stream.current().toLowerCase(); state.extenApplication = false; if(apps.indexOf(cur) !== -1){ return "def strong"; } } else{ return basicToken(stream,state); } return null; } }; }); CodeMirror.defineMIME("text/x-asterisk", "asterisk"); }); PK!t[ïïMfile-manager-advanced/application/library/codemirror/mode/asterisk/index.htmlnu„[µü¤ CodeMirror: Asterisk dialplan mode

    Asterisk dialplan mode

    MIME types defined: text/x-asterisk.

    PK!ÑãðÞÐÐFfile-manager-advanced/application/library/codemirror/mode/nsis/nsis.jsnu„[µü¤// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE // Author: Jan T. Sott (http://github.com/idleberg) (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror"), require("../../addon/mode/simple")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror", "../../addon/mode/simple"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineSimpleMode("nsis",{ start:[ // Numbers {regex: /(?:[+-]?)(?:0x[\d,a-f]+)|(?:0o[0-7]+)|(?:0b[0,1]+)|(?:\d+.?\d*)/, token: "number"}, // Strings { regex: /"(?:[^\\"]|\\.)*"?/, token: "string" }, { regex: /'(?:[^\\']|\\.)*'?/, token: "string" }, { regex: /`(?:[^\\`]|\\.)*`?/, token: "string" }, // Compile Time Commands {regex: /(?:\!(include|addincludedir|addplugindir|appendfile|cd|delfile|echo|error|execute|packhdr|finalize|getdllversion|system|tempfile|warning|verbose|define|undef|insertmacro|makensis|searchparse|searchreplace))\b/, token: "keyword"}, // Conditional Compilation {regex: /(?:\!(if(?:n?def)?|ifmacron?def|macro))\b/, token: "keyword", indent: true}, {regex: /(?:\!(else|endif|macroend))\b/, token: "keyword", dedent: true}, // Runtime Commands {regex: /\b(?:Abort|AddBrandingImage|AddSize|AllowRootDirInstall|AllowSkipFiles|AutoCloseWindow|BGFont|BGGradient|BrandingText|BringToFront|Call|CallInstDLL|Caption|ChangeUI|CheckBitmap|ClearErrors|CompletedText|ComponentText|CopyFiles|CRCCheck|CreateDirectory|CreateFont|CreateShortCut|Delete|DeleteINISec|DeleteINIStr|DeleteRegKey|DeleteRegValue|DetailPrint|DetailsButtonText|DirText|DirVar|DirVerify|EnableWindow|EnumRegKey|EnumRegValue|Exch|Exec|ExecShell|ExecWait|ExpandEnvStrings|File|FileBufSize|FileClose|FileErrorText|FileOpen|FileRead|FileReadByte|FileReadUTF16LE|FileReadWord|FileWriteUTF16LE|FileSeek|FileWrite|FileWriteByte|FileWriteWord|FindClose|FindFirst|FindNext|FindWindow|FlushINI|GetCurInstType|GetCurrentAddress|GetDlgItem|GetDLLVersion|GetDLLVersionLocal|GetErrorLevel|GetFileTime|GetFileTimeLocal|GetFullPathName|GetFunctionAddress|GetInstDirError|GetLabelAddress|GetTempFileName|Goto|HideWindow|Icon|IfAbort|IfErrors|IfFileExists|IfRebootFlag|IfSilent|InitPluginsDir|InstallButtonText|InstallColors|InstallDir|InstallDirRegKey|InstProgressFlags|InstType|InstTypeGetText|InstTypeSetText|IntCmp|IntCmpU|IntFmt|IntOp|IsWindow|LangString|LicenseBkColor|LicenseData|LicenseForceSelection|LicenseLangString|LicenseText|LoadLanguageFile|LockWindow|LogSet|LogText|ManifestDPIAware|ManifestSupportedOS|MessageBox|MiscButtonText|Name|Nop|OutFile|Page|PageCallbacks|Pop|Push|Quit|ReadEnvStr|ReadINIStr|ReadRegDWORD|ReadRegStr|Reboot|RegDLL|Rename|RequestExecutionLevel|ReserveFile|Return|RMDir|SearchPath|SectionGetFlags|SectionGetInstTypes|SectionGetSize|SectionGetText|SectionIn|SectionSetFlags|SectionSetInstTypes|SectionSetSize|SectionSetText|SendMessage|SetAutoClose|SetBrandingImage|SetCompress|SetCompressor|SetCompressorDictSize|SetCtlColors|SetCurInstType|SetDatablockOptimize|SetDateSave|SetDetailsPrint|SetDetailsView|SetErrorLevel|SetErrors|SetFileAttributes|SetFont|SetOutPath|SetOverwrite|SetPluginUnload|SetRebootFlag|SetRegView|SetShellVarContext|SetSilent|ShowInstDetails|ShowUninstDetails|ShowWindow|SilentInstall|SilentUnInstall|Sleep|SpaceTexts|StrCmp|StrCmpS|StrCpy|StrLen|SubCaption|Unicode|UninstallButtonText|UninstallCaption|UninstallIcon|UninstallSubCaption|UninstallText|UninstPage|UnRegDLL|Var|VIAddVersionKey|VIFileVersion|VIProductVersion|WindowIcon|WriteINIStr|WriteRegBin|WriteRegDWORD|WriteRegExpandStr|WriteRegStr|WriteUninstaller|XPStyle)\b/, token: "keyword"}, {regex: /\b(?:Function|PageEx|Section(?:Group)?)\b/, token: "keyword", indent: true}, {regex: /\b(?:(Function|PageEx|Section(?:Group)?)End)\b/, token: "keyword", dedent: true}, // Command Options {regex: /\b(?:ARCHIVE|FILE_ATTRIBUTE_ARCHIVE|FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_NORMAL|FILE_ATTRIBUTE_OFFLINE|FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_TEMPORARY|HIDDEN|HKCC|HKCR|HKCU|HKDD|HKEY_CLASSES_ROOT|HKEY_CURRENT_CONFIG|HKEY_CURRENT_USER|HKEY_DYN_DATA|HKEY_LOCAL_MACHINE|HKEY_PERFORMANCE_DATA|HKEY_USERS|HKLM|HKPD|HKU|IDABORT|IDCANCEL|IDD_DIR|IDD_INST|IDD_INSTFILES|IDD_LICENSE|IDD_SELCOM|IDD_UNINST|IDD_VERIFY|IDIGNORE|IDNO|IDOK|IDRETRY|IDYES|MB_ABORTRETRYIGNORE|MB_DEFBUTTON1|MB_DEFBUTTON2|MB_DEFBUTTON3|MB_DEFBUTTON4|MB_ICONEXCLAMATION|MB_ICONINFORMATION|MB_ICONQUESTION|MB_ICONSTOP|MB_OK|MB_OKCANCEL|MB_RETRYCANCEL|MB_RIGHT|MB_RTLREADING|MB_SETFOREGROUND|MB_TOPMOST|MB_USERICON|MB_YESNO|MB_YESNOCANCEL|NORMAL|OFFLINE|READONLY|SHCTX|SHELL_CONTEXT|SW_HIDE|SW_SHOWDEFAULT|SW_SHOWMAXIMIZED|SW_SHOWMINIMIZED|SW_SHOWNORMAL|SYSTEM|TEMPORARY)\b/, token: "atom"}, {regex: /\b(?:admin|all|auto|both|bottom|bzip2|components|current|custom|directory|force|hide|highest|ifdiff|ifnewer|instfiles|lastused|leave|left|license|listonly|lzma|nevershow|none|normal|notset|right|show|silent|silentlog|textonly|top|try|un\.components|un\.custom|un\.directory|un\.instfiles|un\.license|uninstConfirm|user|Win10|Win7|Win8|WinVista|zlib)\b/, token: "builtin"}, // LogicLib.nsh {regex: /\$\{(?:And(?:If(?:Not)?|Unless)|Break|Case(?:Else)?|Continue|Default|Do(?:Until|While)?|Else(?:If(?:Not)?|Unless)?|End(?:If|Select|Switch)|Exit(?:Do|For|While)|For(?:Each)?|If(?:Cmd|Not(?:Then)?|Then)?|Loop(?:Until|While)?|Or(?:If(?:Not)?|Unless)|Select|Switch|Unless|While)\}/, token: "variable-2", indent: true}, // FileFunc.nsh {regex: /\$\{(?:BannerTrimPath|DirState|DriveSpace|Get(BaseName|Drives|ExeName|ExePath|FileAttributes|FileExt|FileName|FileVersion|Options|OptionsS|Parameters|Parent|Root|Size|Time)|Locate|RefreshShellIcons)\}/, token: "variable-2", dedent: true}, // Memento.nsh {regex: /\$\{(?:Memento(?:Section(?:Done|End|Restore|Save)?|UnselectedSection))\}/, token: "variable-2", dedent: true}, // TextFunc.nsh {regex: /\$\{(?:Config(?:Read|ReadS|Write|WriteS)|File(?:Join|ReadFromEnd|Recode)|Line(?:Find|Read|Sum)|Text(?:Compare|CompareS)|TrimNewLines)\}/, token: "variable-2", dedent: true}, // WinVer.nsh {regex: /\$\{(?:(?:At(?:Least|Most)|Is)(?:ServicePack|Win(?:7|8|10|95|98|200(?:0|3|8(?:R2)?)|ME|NT4|Vista|XP))|Is(?:NT|Server))\}/, token: "variable", dedent: true}, // WordFunc.nsh {regex: /\$\{(?:StrFilterS?|Version(?:Compare|Convert)|Word(?:AddS?|Find(?:(?:2|3)X)?S?|InsertS?|ReplaceS?))\}/, token: "variable-2", dedent: true}, // x64.nsh {regex: /\$\{(?:RunningX64)\}/, token: "variable", dedent: true}, {regex: /\$\{(?:Disable|Enable)X64FSRedirection\}/, token: "variable-2", dedent: true}, // Line Comment {regex: /(#|;).*/, token: "comment"}, // Block Comment {regex: /\/\*/, token: "comment", next: "comment"}, // Operator {regex: /[-+\/*=<>!]+/, token: "operator"}, // Variable {regex: /\$[\w]+/, token: "variable"}, // Constant {regex: /\${[\w]+}/,token: "variable-2"}, // Language String {regex: /\$\([\w]+\)/,token: "variable-3"} ], comment: [ {regex: /.*?\*\//, token: "comment", next: "start"}, {regex: /.*/, token: "comment"} ], meta: { electricInput: /^\s*((Function|PageEx|Section|Section(Group)?)End|(\!(endif|macroend))|\$\{(End(If|Unless|While)|Loop(Until)|Next)\})$/, blockCommentStart: "/*", blockCommentEnd: "*/", lineComment: ["#", ";"] } }); CodeMirror.defineMIME("text/x-nsis", "nsis"); }); PK!g=ŒääIfile-manager-advanced/application/library/codemirror/mode/nsis/index.htmlnu„[µü¤ CodeMirror: NSIS mode

    NSIS mode

    MIME types defined: text/x-nsis.

    PK!Š×rOfile-manager-advanced/application/library/codemirror/mode/properties/index.htmlnu„[µü¤ CodeMirror: Properties files mode

    Properties files mode

    MIME types defined: text/x-properties, text/x-ini.

    PK!Ûíw"{{Rfile-manager-advanced/application/library/codemirror/mode/properties/properties.jsnu„[µü¤// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMode("properties", function() { return { token: function(stream, state) { var sol = stream.sol() || state.afterSection; var eol = stream.eol(); state.afterSection = false; if (sol) { if (state.nextMultiline) { state.inMultiline = true; state.nextMultiline = false; } else { state.position = "def"; } } if (eol && ! state.nextMultiline) { state.inMultiline = false; state.position = "def"; } if (sol) { while(stream.eatSpace()) {} } var ch = stream.next(); if (sol && (ch === "#" || ch === "!" || ch === ";")) { state.position = "comment"; stream.skipToEnd(); return "comment"; } else if (sol && ch === "[") { state.afterSection = true; stream.skipTo("]"); stream.eat("]"); return "header"; } else if (ch === "=" || ch === ":") { state.position = "quote"; return null; } else if (ch === "\\" && state.position === "quote") { if (stream.eol()) { // end of line? // Multiline value state.nextMultiline = true; } } return state.position; }, startState: function() { return { position : "def", // Current position, "def", "quote" or "comment" nextMultiline : false, // Is the next line multiline value inMultiline : false, // Is the current line a multiline value afterSection : false // Did we just open a section }; } }; }); CodeMirror.defineMIME("text/x-properties", "properties"); CodeMirror.defineMIME("text/x-ini", "properties"); }); PK!\½�ô””Jfile-manager-advanced/application/library/codemirror/mode/cobol/index.htmlnu„[µü¤ CodeMirror: COBOL mode

    COBOL mode

    Select Theme Select Font Size

    PK!2Ðäc0(0(Hfile-manager-advanced/application/library/codemirror/mode/cobol/cobol.jsnu„[µü¤// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE /** * Author: Gautam Mehta * Branched from CodeMirror's Scheme mode */ (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMode("cobol", function () { var BUILTIN = "builtin", COMMENT = "comment", STRING = "string", ATOM = "atom", NUMBER = "number", KEYWORD = "keyword", MODTAG = "header", COBOLLINENUM = "def", PERIOD = "link"; function makeKeywords(str) { var obj = {}, words = str.split(" "); for (var i = 0; i < words.length; ++i) obj[words[i]] = true; return obj; } var atoms = makeKeywords("TRUE FALSE ZEROES ZEROS ZERO SPACES SPACE LOW-VALUE LOW-VALUES "); var keywords = makeKeywords( "ACCEPT ACCESS ACQUIRE ADD ADDRESS " + "ADVANCING AFTER ALIAS ALL ALPHABET " + "ALPHABETIC ALPHABETIC-LOWER ALPHABETIC-UPPER ALPHANUMERIC ALPHANUMERIC-EDITED " + "ALSO ALTER ALTERNATE AND ANY " + "ARE AREA AREAS ARITHMETIC ASCENDING " + "ASSIGN AT ATTRIBUTE AUTHOR AUTO " + "AUTO-SKIP AUTOMATIC B-AND B-EXOR B-LESS " + "B-NOT B-OR BACKGROUND-COLOR BACKGROUND-COLOUR BEEP " + "BEFORE BELL BINARY BIT BITS " + "BLANK BLINK BLOCK BOOLEAN BOTTOM " + "BY CALL CANCEL CD CF " + "CH CHARACTER CHARACTERS CLASS CLOCK-UNITS " + "CLOSE COBOL CODE CODE-SET COL " + "COLLATING COLUMN COMMA COMMIT COMMITMENT " + "COMMON COMMUNICATION COMP COMP-0 COMP-1 " + "COMP-2 COMP-3 COMP-4 COMP-5 COMP-6 " + "COMP-7 COMP-8 COMP-9 COMPUTATIONAL COMPUTATIONAL-0 " + "COMPUTATIONAL-1 COMPUTATIONAL-2 COMPUTATIONAL-3 COMPUTATIONAL-4 COMPUTATIONAL-5 " + "COMPUTATIONAL-6 COMPUTATIONAL-7 COMPUTATIONAL-8 COMPUTATIONAL-9 COMPUTE " + "CONFIGURATION CONNECT CONSOLE CONTAINED CONTAINS " + "CONTENT CONTINUE CONTROL CONTROL-AREA CONTROLS " + "CONVERTING COPY CORR CORRESPONDING COUNT " + "CRT CRT-UNDER CURRENCY CURRENT CURSOR " + "DATA DATE DATE-COMPILED DATE-WRITTEN DAY " + "DAY-OF-WEEK DB DB-ACCESS-CONTROL-KEY DB-DATA-NAME DB-EXCEPTION " + "DB-FORMAT-NAME DB-RECORD-NAME DB-SET-NAME DB-STATUS DBCS " + "DBCS-EDITED DE DEBUG-CONTENTS DEBUG-ITEM DEBUG-LINE " + "DEBUG-NAME DEBUG-SUB-1 DEBUG-SUB-2 DEBUG-SUB-3 DEBUGGING " + "DECIMAL-POINT DECLARATIVES DEFAULT DELETE DELIMITED " + "DELIMITER DEPENDING DESCENDING DESCRIBED DESTINATION " + "DETAIL DISABLE DISCONNECT DISPLAY DISPLAY-1 " + "DISPLAY-2 DISPLAY-3 DISPLAY-4 DISPLAY-5 DISPLAY-6 " + "DISPLAY-7 DISPLAY-8 DISPLAY-9 DIVIDE DIVISION " + "DOWN DROP DUPLICATE DUPLICATES DYNAMIC " + "EBCDIC EGI EJECT ELSE EMI " + "EMPTY EMPTY-CHECK ENABLE END END. END-ACCEPT END-ACCEPT. " + "END-ADD END-CALL END-COMPUTE END-DELETE END-DISPLAY " + "END-DIVIDE END-EVALUATE END-IF END-INVOKE END-MULTIPLY " + "END-OF-PAGE END-PERFORM END-READ END-RECEIVE END-RETURN " + "END-REWRITE END-SEARCH END-START END-STRING END-SUBTRACT " + "END-UNSTRING END-WRITE END-XML ENTER ENTRY " + "ENVIRONMENT EOP EQUAL EQUALS ERASE " + "ERROR ESI EVALUATE EVERY EXCEEDS " + "EXCEPTION EXCLUSIVE EXIT EXTEND EXTERNAL " + "EXTERNALLY-DESCRIBED-KEY FD FETCH FILE FILE-CONTROL " + "FILE-STREAM FILES FILLER FINAL FIND " + "FINISH FIRST FOOTING FOR FOREGROUND-COLOR " + "FOREGROUND-COLOUR FORMAT FREE FROM FULL " + "FUNCTION GENERATE GET GIVING GLOBAL " + "GO GOBACK GREATER GROUP HEADING " + "HIGH-VALUE HIGH-VALUES HIGHLIGHT I-O I-O-CONTROL " + "ID IDENTIFICATION IF IN INDEX " + "INDEX-1 INDEX-2 INDEX-3 INDEX-4 INDEX-5 " + "INDEX-6 INDEX-7 INDEX-8 INDEX-9 INDEXED " + "INDIC INDICATE INDICATOR INDICATORS INITIAL " + "INITIALIZE INITIATE INPUT INPUT-OUTPUT INSPECT " + "INSTALLATION INTO INVALID INVOKE IS " + "JUST JUSTIFIED KANJI KEEP KEY " + "LABEL LAST LD LEADING LEFT " + "LEFT-JUSTIFY LENGTH LENGTH-CHECK LESS LIBRARY " + "LIKE LIMIT LIMITS LINAGE LINAGE-COUNTER " + "LINE LINE-COUNTER LINES LINKAGE LOCAL-STORAGE " + "LOCALE LOCALLY LOCK " + "MEMBER MEMORY MERGE MESSAGE METACLASS " + "MODE MODIFIED MODIFY MODULES MOVE " + "MULTIPLE MULTIPLY NATIONAL NATIVE NEGATIVE " + "NEXT NO NO-ECHO NONE NOT " + "NULL NULL-KEY-MAP NULL-MAP NULLS NUMBER " + "NUMERIC NUMERIC-EDITED OBJECT OBJECT-COMPUTER OCCURS " + "OF OFF OMITTED ON ONLY " + "OPEN OPTIONAL OR ORDER ORGANIZATION " + "OTHER OUTPUT OVERFLOW OWNER PACKED-DECIMAL " + "PADDING PAGE PAGE-COUNTER PARSE PERFORM " + "PF PH PIC PICTURE PLUS " + "POINTER POSITION POSITIVE PREFIX PRESENT " + "PRINTING PRIOR PROCEDURE PROCEDURE-POINTER PROCEDURES " + "PROCEED PROCESS PROCESSING PROGRAM PROGRAM-ID " + "PROMPT PROTECTED PURGE QUEUE QUOTE " + "QUOTES RANDOM RD READ READY " + "REALM RECEIVE RECONNECT RECORD RECORD-NAME " + "RECORDS RECURSIVE REDEFINES REEL REFERENCE " + "REFERENCE-MONITOR REFERENCES RELATION RELATIVE RELEASE " + "REMAINDER REMOVAL RENAMES REPEATED REPLACE " + "REPLACING REPORT REPORTING REPORTS REPOSITORY " + "REQUIRED RERUN RESERVE RESET RETAINING " + "RETRIEVAL RETURN RETURN-CODE RETURNING REVERSE-VIDEO " + "REVERSED REWIND REWRITE RF RH " + "RIGHT RIGHT-JUSTIFY ROLLBACK ROLLING ROUNDED " + "RUN SAME SCREEN SD SEARCH " + "SECTION SECURE SECURITY SEGMENT SEGMENT-LIMIT " + "SELECT SEND SENTENCE SEPARATE SEQUENCE " + "SEQUENTIAL SET SHARED SIGN SIZE " + "SKIP1 SKIP2 SKIP3 SORT SORT-MERGE " + "SORT-RETURN SOURCE SOURCE-COMPUTER SPACE-FILL " + "SPECIAL-NAMES STANDARD STANDARD-1 STANDARD-2 " + "START STARTING STATUS STOP STORE " + "STRING SUB-QUEUE-1 SUB-QUEUE-2 SUB-QUEUE-3 SUB-SCHEMA " + "SUBFILE SUBSTITUTE SUBTRACT SUM SUPPRESS " + "SYMBOLIC SYNC SYNCHRONIZED SYSIN SYSOUT " + "TABLE TALLYING TAPE TENANT TERMINAL " + "TERMINATE TEST TEXT THAN THEN " + "THROUGH THRU TIME TIMES TITLE " + "TO TOP TRAILING TRAILING-SIGN TRANSACTION " + "TYPE TYPEDEF UNDERLINE UNEQUAL UNIT " + "UNSTRING UNTIL UP UPDATE UPON " + "USAGE USAGE-MODE USE USING VALID " + "VALIDATE VALUE VALUES VARYING VLR " + "WAIT WHEN WHEN-COMPILED WITH WITHIN " + "WORDS WORKING-STORAGE WRITE XML XML-CODE " + "XML-EVENT XML-NTEXT XML-TEXT ZERO ZERO-FILL " ); var builtins = makeKeywords("- * ** / + < <= = > >= "); var tests = { digit: /\d/, digit_or_colon: /[\d:]/, hex: /[0-9a-f]/i, sign: /[+-]/, exponent: /e/i, keyword_char: /[^\s\(\[\;\)\]]/, symbol: /[\w*+\-]/ }; function isNumber(ch, stream){ // hex if ( ch === '0' && stream.eat(/x/i) ) { stream.eatWhile(tests.hex); return true; } // leading sign if ( ( ch == '+' || ch == '-' ) && ( tests.digit.test(stream.peek()) ) ) { stream.eat(tests.sign); ch = stream.next(); } if ( tests.digit.test(ch) ) { stream.eat(ch); stream.eatWhile(tests.digit); if ( '.' == stream.peek()) { stream.eat('.'); stream.eatWhile(tests.digit); } if ( stream.eat(tests.exponent) ) { stream.eat(tests.sign); stream.eatWhile(tests.digit); } return true; } return false; } return { startState: function () { return { indentStack: null, indentation: 0, mode: false }; }, token: function (stream, state) { if (state.indentStack == null && stream.sol()) { // update indentation, but only if indentStack is empty state.indentation = 6 ; //stream.indentation(); } // skip spaces if (stream.eatSpace()) { return null; } var returnType = null; switch(state.mode){ case "string": // multi-line string parsing mode var next = false; while ((next = stream.next()) != null) { if (next == "\"" || next == "\'") { state.mode = false; break; } } returnType = STRING; // continue on in string mode break; default: // default parsing mode var ch = stream.next(); var col = stream.column(); if (col >= 0 && col <= 5) { returnType = COBOLLINENUM; } else if (col >= 72 && col <= 79) { stream.skipToEnd(); returnType = MODTAG; } else if (ch == "*" && col == 6) { // comment stream.skipToEnd(); // rest of the line is a comment returnType = COMMENT; } else if (ch == "\"" || ch == "\'") { state.mode = "string"; returnType = STRING; } else if (ch == "'" && !( tests.digit_or_colon.test(stream.peek()) )) { returnType = ATOM; } else if (ch == ".") { returnType = PERIOD; } else if (isNumber(ch,stream)){ returnType = NUMBER; } else { if (stream.current().match(tests.symbol)) { while (col < 71) { if (stream.eat(tests.symbol) === undefined) { break; } else { col++; } } } if (keywords && keywords.propertyIsEnumerable(stream.current().toUpperCase())) { returnType = KEYWORD; } else if (builtins && builtins.propertyIsEnumerable(stream.current().toUpperCase())) { returnType = BUILTIN; } else if (atoms && atoms.propertyIsEnumerable(stream.current().toUpperCase())) { returnType = ATOM; } else returnType = null; } } return returnType; }, indent: function (state) { if (state.indentStack == null) return state.indentation; return state.indentStack.indent; } }; }); CodeMirror.defineMIME("text/x-cobol", "cobol"); }); PK!_�S€€Jfile-manager-advanced/application/library/codemirror/mode/yacas/index.htmlnu„[µü¤ CodeMirror: yacas mode

    yacas mode

    MIME types defined: text/x-yacas (yacas).

    PK!¼¸ N00Hfile-manager-advanced/application/library/codemirror/mode/yacas/yacas.jsnu„[µü¤// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE // Yacas mode copyright (c) 2015 by Grzegorz Mazur // Loosely based on mathematica mode by Calin Barbat (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMode('yacas', function(_config, _parserConfig) { function words(str) { var obj = {}, words = str.split(" "); for (var i = 0; i < words.length; ++i) obj[words[i]] = true; return obj; } var bodiedOps = words("Assert BackQuote D Defun Deriv For ForEach FromFile " + "FromString Function Integrate InverseTaylor Limit " + "LocalSymbols Macro MacroRule MacroRulePattern " + "NIntegrate Rule RulePattern Subst TD TExplicitSum " + "TSum Taylor Taylor1 Taylor2 Taylor3 ToFile " + "ToStdout ToString TraceRule Until While"); // patterns var pFloatForm = "(?:(?:\\.\\d+|\\d+\\.\\d*|\\d+)(?:[eE][+-]?\\d+)?)"; var pIdentifier = "(?:[a-zA-Z\\$'][a-zA-Z0-9\\$']*)"; // regular expressions var reFloatForm = new RegExp(pFloatForm); var reIdentifier = new RegExp(pIdentifier); var rePattern = new RegExp(pIdentifier + "?_" + pIdentifier); var reFunctionLike = new RegExp(pIdentifier + "\\s*\\("); function tokenBase(stream, state) { var ch; // get next character ch = stream.next(); // string if (ch === '"') { state.tokenize = tokenString; return state.tokenize(stream, state); } // comment if (ch === '/') { if (stream.eat('*')) { state.tokenize = tokenComment; return state.tokenize(stream, state); } if (stream.eat("/")) { stream.skipToEnd(); return "comment"; } } // go back one character stream.backUp(1); // update scope info var m = stream.match(/^(\w+)\s*\(/, false); if (m !== null && bodiedOps.hasOwnProperty(m[1])) state.scopes.push('bodied'); var scope = currentScope(state); if (scope === 'bodied' && ch === '[') state.scopes.pop(); if (ch === '[' || ch === '{' || ch === '(') state.scopes.push(ch); scope = currentScope(state); if (scope === '[' && ch === ']' || scope === '{' && ch === '}' || scope === '(' && ch === ')') state.scopes.pop(); if (ch === ';') { while (scope === 'bodied') { state.scopes.pop(); scope = currentScope(state); } } // look for ordered rules if (stream.match(/\d+ *#/, true, false)) { return 'qualifier'; } // look for numbers if (stream.match(reFloatForm, true, false)) { return 'number'; } // look for placeholders if (stream.match(rePattern, true, false)) { return 'variable-3'; } // match all braces separately if (stream.match(/(?:\[|\]|{|}|\(|\))/, true, false)) { return 'bracket'; } // literals looking like function calls if (stream.match(reFunctionLike, true, false)) { stream.backUp(1); return 'variable'; } // all other identifiers if (stream.match(reIdentifier, true, false)) { return 'variable-2'; } // operators; note that operators like @@ or /; are matched separately for each symbol. if (stream.match(/(?:\\|\+|\-|\*|\/|,|;|\.|:|@|~|=|>|<|&|\||_|`|'|\^|\?|!|%)/, true, false)) { return 'operator'; } // everything else is an error return 'error'; } function tokenString(stream, state) { var next, end = false, escaped = false; while ((next = stream.next()) != null) { if (next === '"' && !escaped) { end = true; break; } escaped = !escaped && next === '\\'; } if (end && !escaped) { state.tokenize = tokenBase; } return 'string'; }; function tokenComment(stream, state) { var prev, next; while((next = stream.next()) != null) { if (prev === '*' && next === '/') { state.tokenize = tokenBase; break; } prev = next; } return 'comment'; } function currentScope(state) { var scope = null; if (state.scopes.length > 0) scope = state.scopes[state.scopes.length - 1]; return scope; } return { startState: function() { return { tokenize: tokenBase, scopes: [] }; }, token: function(stream, state) { if (stream.eatSpace()) return null; return state.tokenize(stream, state); }, indent: function(state, textAfter) { if (state.tokenize !== tokenBase && state.tokenize !== null) return CodeMirror.Pass; var delta = 0; if (textAfter === ']' || textAfter === '];' || textAfter === '}' || textAfter === '};' || textAfter === ');') delta = -1; return (state.scopes.length + delta) * _config.indentUnit; }, electricChars: "{}[]();", blockCommentStart: "/*", blockCommentEnd: "*/", lineComment: "//" }; }); CodeMirror.defineMIME('text/x-yacas', { name: 'yacas' }); }); PK!¡Sµ““Hfile-manager-advanced/application/library/codemirror/mode/soy/index.htmlnu„[µü¤ CodeMirror: Soy (Closure Template) mode

    Soy (Closure Template) mode

    A mode for Closure Templates (Soy).

    MIME type defined: text/x-soy.

    PK!úQ ðÍÍDfile-manager-advanced/application/library/codemirror/mode/soy/soy.jsnu„[µü¤// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror"), require("../htmlmixed/htmlmixed")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror", "../htmlmixed/htmlmixed"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; var indentingTags = ["template", "literal", "msg", "fallbackmsg", "let", "if", "elseif", "else", "switch", "case", "default", "foreach", "ifempty", "for", "call", "param", "deltemplate", "delcall", "log"]; CodeMirror.defineMode("soy", function(config) { var textMode = CodeMirror.getMode(config, "text/plain"); var modes = { html: CodeMirror.getMode(config, {name: "text/html", multilineTagIndentFactor: 2, multilineTagIndentPastTag: false}), attributes: textMode, text: textMode, uri: textMode, css: CodeMirror.getMode(config, "text/css"), js: CodeMirror.getMode(config, {name: "text/javascript", statementIndent: 2 * config.indentUnit}) }; function last(array) { return array[array.length - 1]; } function tokenUntil(stream, state, untilRegExp) { var oldString = stream.string; var match = untilRegExp.exec(oldString.substr(stream.pos)); if (match) { // We don't use backUp because it backs up just the position, not the state. // This uses an undocumented API. stream.string = oldString.substr(0, stream.pos + match.index); } var result = stream.hideFirstChars(state.indent, function() { return state.localMode.token(stream, state.localState); }); stream.string = oldString; return result; } return { startState: function() { return { kind: [], kindTag: [], soyState: [], indent: 0, localMode: modes.html, localState: CodeMirror.startState(modes.html) }; }, copyState: function(state) { return { tag: state.tag, // Last seen Soy tag. kind: state.kind.concat([]), // Values of kind="" attributes. kindTag: state.kindTag.concat([]), // Opened tags with kind="" attributes. soyState: state.soyState.concat([]), indent: state.indent, // Indentation of the following line. localMode: state.localMode, localState: CodeMirror.copyState(state.localMode, state.localState) }; }, token: function(stream, state) { var match; switch (last(state.soyState)) { case "comment": if (stream.match(/^.*?\*\//)) { state.soyState.pop(); } else { stream.skipToEnd(); } return "comment"; case "variable": if (stream.match(/^}/)) { state.indent -= 2 * config.indentUnit; state.soyState.pop(); return "variable-2"; } stream.next(); return null; case "tag": if (stream.match(/^\/?}/)) { if (state.tag == "/template" || state.tag == "/deltemplate") state.indent = 0; else state.indent -= (stream.current() == "/}" || indentingTags.indexOf(state.tag) == -1 ? 2 : 1) * config.indentUnit; state.soyState.pop(); return "keyword"; } else if (stream.match(/^([\w?]+)(?==)/)) { if (stream.current() == "kind" && (match = stream.match(/^="([^"]+)/, false))) { var kind = match[1]; state.kind.push(kind); state.kindTag.push(state.tag); state.localMode = modes[kind] || modes.html; state.localState = CodeMirror.startState(state.localMode); } return "attribute"; } else if (stream.match(/^"/)) { state.soyState.push("string"); return "string"; } stream.next(); return null; case "literal": if (stream.match(/^(?=\{\/literal})/)) { state.indent -= config.indentUnit; state.soyState.pop(); return this.token(stream, state); } return tokenUntil(stream, state, /\{\/literal}/); case "string": var match = stream.match(/^.*?("|\\[\s\S])/); if (!match) { stream.skipToEnd(); } else if (match[1] == "\"") { state.soyState.pop(); } return "string"; } if (stream.match(/^\/\*/)) { state.soyState.push("comment"); return "comment"; } else if (stream.match(stream.sol() ? /^\s*\/\/.*/ : /^\s+\/\/.*/)) { return "comment"; } else if (stream.match(/^\{\$[\w?]*/)) { state.indent += 2 * config.indentUnit; state.soyState.push("variable"); return "variable-2"; } else if (stream.match(/^\{literal}/)) { state.indent += config.indentUnit; state.soyState.push("literal"); return "keyword"; } else if (match = stream.match(/^\{([\/@\\]?[\w?]*)/)) { if (match[1] != "/switch") state.indent += (/^(\/|(else|elseif|case|default)$)/.test(match[1]) && state.tag != "switch" ? 1 : 2) * config.indentUnit; state.tag = match[1]; if (state.tag == "/" + last(state.kindTag)) { // We found the tag that opened the current kind="". state.kind.pop(); state.kindTag.pop(); state.localMode = modes[last(state.kind)] || modes.html; state.localState = CodeMirror.startState(state.localMode); } state.soyState.push("tag"); return "keyword"; } return tokenUntil(stream, state, /\{|\s+\/\/|\/\*/); }, indent: function(state, textAfter) { var indent = state.indent, top = last(state.soyState); if (top == "comment") return CodeMirror.Pass; if (top == "literal") { if (/^\{\/literal}/.test(textAfter)) indent -= config.indentUnit; } else { if (/^\s*\{\/(template|deltemplate)\b/.test(textAfter)) return 0; if (/^\{(\/|(fallbackmsg|elseif|else|ifempty)\b)/.test(textAfter)) indent -= config.indentUnit; if (state.tag != "switch" && /^\{(case|default)\b/.test(textAfter)) indent -= config.indentUnit; if (/^\{\/switch\b/.test(textAfter)) indent -= config.indentUnit; } if (indent && state.localMode.indent) indent += state.localMode.indent(state.localState, textAfter); return indent; }, innerMode: function(state) { if (state.soyState.length && last(state.soyState) != "literal") return null; else return {state: state.localState, mode: state.localMode}; }, electricInput: /^\s*\{(\/|\/template|\/deltemplate|\/switch|fallbackmsg|elseif|else|case|default|ifempty|\/literal\})$/, lineComment: "//", blockCommentStart: "/*", blockCommentEnd: "*/", blockCommentContinue: " * ", fold: "indent" }; }, "htmlmixed"); CodeMirror.registerHelper("hintWords", "soy", indentingTags.concat( ["delpackage", "namespace", "alias", "print", "css", "debugger"])); CodeMirror.defineMIME("text/x-soy", "soy"); }); PK!¯*xs±±Nfile-manager-advanced/application/library/codemirror/mode/ttcn-cfg/ttcn-cfg.jsnu„[µü¤// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMode("ttcn-cfg", function(config, parserConfig) { var indentUnit = config.indentUnit, keywords = parserConfig.keywords || {}, fileNCtrlMaskOptions = parserConfig.fileNCtrlMaskOptions || {}, externalCommands = parserConfig.externalCommands || {}, multiLineStrings = parserConfig.multiLineStrings, indentStatements = parserConfig.indentStatements !== false; var isOperatorChar = /[\|]/; var curPunc; function tokenBase(stream, state) { var ch = stream.next(); if (ch == '"' || ch == "'") { state.tokenize = tokenString(ch); return state.tokenize(stream, state); } if (/[:=]/.test(ch)) { curPunc = ch; return "punctuation"; } if (ch == "#"){ stream.skipToEnd(); return "comment"; } if (/\d/.test(ch)) { stream.eatWhile(/[\w\.]/); return "number"; } if (isOperatorChar.test(ch)) { stream.eatWhile(isOperatorChar); return "operator"; } if (ch == "["){ stream.eatWhile(/[\w_\]]/); return "number sectionTitle"; } stream.eatWhile(/[\w\$_]/); var cur = stream.current(); if (keywords.propertyIsEnumerable(cur)) return "keyword"; if (fileNCtrlMaskOptions.propertyIsEnumerable(cur)) return "negative fileNCtrlMaskOptions"; if (externalCommands.propertyIsEnumerable(cur)) return "negative externalCommands"; return "variable"; } function tokenString(quote) { return function(stream, state) { var escaped = false, next, end = false; while ((next = stream.next()) != null) { if (next == quote && !escaped){ var afterNext = stream.peek(); //look if the character if the quote is like the B in '10100010'B if (afterNext){ afterNext = afterNext.toLowerCase(); if(afterNext == "b" || afterNext == "h" || afterNext == "o") stream.next(); } end = true; break; } escaped = !escaped && next == "\\"; } if (end || !(escaped || multiLineStrings)) state.tokenize = null; return "string"; }; } function Context(indented, column, type, align, prev) { this.indented = indented; this.column = column; this.type = type; this.align = align; this.prev = prev; } function pushContext(state, col, type) { var indent = state.indented; if (state.context && state.context.type == "statement") indent = state.context.indented; return state.context = new Context(indent, col, type, null, state.context); } function popContext(state) { var t = state.context.type; if (t == ")" || t == "]" || t == "}") state.indented = state.context.indented; return state.context = state.context.prev; } //Interface return { startState: function(basecolumn) { return { tokenize: null, context: new Context((basecolumn || 0) - indentUnit, 0, "top", false), indented: 0, startOfLine: true }; }, token: function(stream, state) { var ctx = state.context; if (stream.sol()) { if (ctx.align == null) ctx.align = false; state.indented = stream.indentation(); state.startOfLine = true; } if (stream.eatSpace()) return null; curPunc = null; var style = (state.tokenize || tokenBase)(stream, state); if (style == "comment") return style; if (ctx.align == null) ctx.align = true; if ((curPunc == ";" || curPunc == ":" || curPunc == ",") && ctx.type == "statement"){ popContext(state); } else if (curPunc == "{") pushContext(state, stream.column(), "}"); else if (curPunc == "[") pushContext(state, stream.column(), "]"); else if (curPunc == "(") pushContext(state, stream.column(), ")"); else if (curPunc == "}") { while (ctx.type == "statement") ctx = popContext(state); if (ctx.type == "}") ctx = popContext(state); while (ctx.type == "statement") ctx = popContext(state); } else if (curPunc == ctx.type) popContext(state); else if (indentStatements && (((ctx.type == "}" || ctx.type == "top") && curPunc != ';') || (ctx.type == "statement" && curPunc == "newstatement"))) pushContext(state, stream.column(), "statement"); state.startOfLine = false; return style; }, electricChars: "{}", lineComment: "#", fold: "brace" }; }); function words(str) { var obj = {}, words = str.split(" "); for (var i = 0; i < words.length; ++i) obj[words[i]] = true; return obj; } CodeMirror.defineMIME("text/x-ttcn-cfg", { name: "ttcn-cfg", keywords: words("Yes No LogFile FileMask ConsoleMask AppendFile" + " TimeStampFormat LogEventTypes SourceInfoFormat" + " LogEntityName LogSourceInfo DiskFullAction" + " LogFileNumber LogFileSize MatchingHints Detailed" + " Compact SubCategories Stack Single None Seconds" + " DateTime Time Stop Error Retry Delete TCPPort KillTimer" + " NumHCs UnixSocketsEnabled LocalAddress"), fileNCtrlMaskOptions: words("TTCN_EXECUTOR TTCN_ERROR TTCN_WARNING" + " TTCN_PORTEVENT TTCN_TIMEROP TTCN_VERDICTOP" + " TTCN_DEFAULTOP TTCN_TESTCASE TTCN_ACTION" + " TTCN_USER TTCN_FUNCTION TTCN_STATISTICS" + " TTCN_PARALLEL TTCN_MATCHING TTCN_DEBUG" + " EXECUTOR ERROR WARNING PORTEVENT TIMEROP" + " VERDICTOP DEFAULTOP TESTCASE ACTION USER" + " FUNCTION STATISTICS PARALLEL MATCHING DEBUG" + " LOG_ALL LOG_NOTHING ACTION_UNQUALIFIED" + " DEBUG_ENCDEC DEBUG_TESTPORT" + " DEBUG_UNQUALIFIED DEFAULTOP_ACTIVATE" + " DEFAULTOP_DEACTIVATE DEFAULTOP_EXIT" + " DEFAULTOP_UNQUALIFIED ERROR_UNQUALIFIED" + " EXECUTOR_COMPONENT EXECUTOR_CONFIGDATA" + " EXECUTOR_EXTCOMMAND EXECUTOR_LOGOPTIONS" + " EXECUTOR_RUNTIME EXECUTOR_UNQUALIFIED" + " FUNCTION_RND FUNCTION_UNQUALIFIED" + " MATCHING_DONE MATCHING_MCSUCCESS" + " MATCHING_MCUNSUCC MATCHING_MMSUCCESS" + " MATCHING_MMUNSUCC MATCHING_PCSUCCESS" + " MATCHING_PCUNSUCC MATCHING_PMSUCCESS" + " MATCHING_PMUNSUCC MATCHING_PROBLEM" + " MATCHING_TIMEOUT MATCHING_UNQUALIFIED" + " PARALLEL_PORTCONN PARALLEL_PORTMAP" + " PARALLEL_PTC PARALLEL_UNQUALIFIED" + " PORTEVENT_DUALRECV PORTEVENT_DUALSEND" + " PORTEVENT_MCRECV PORTEVENT_MCSEND" + " PORTEVENT_MMRECV PORTEVENT_MMSEND" + " PORTEVENT_MQUEUE PORTEVENT_PCIN" + " PORTEVENT_PCOUT PORTEVENT_PMIN" + " PORTEVENT_PMOUT PORTEVENT_PQUEUE" + " PORTEVENT_STATE PORTEVENT_UNQUALIFIED" + " STATISTICS_UNQUALIFIED STATISTICS_VERDICT" + " TESTCASE_FINISH TESTCASE_START" + " TESTCASE_UNQUALIFIED TIMEROP_GUARD" + " TIMEROP_READ TIMEROP_START TIMEROP_STOP" + " TIMEROP_TIMEOUT TIMEROP_UNQUALIFIED" + " USER_UNQUALIFIED VERDICTOP_FINAL" + " VERDICTOP_GETVERDICT VERDICTOP_SETVERDICT" + " VERDICTOP_UNQUALIFIED WARNING_UNQUALIFIED"), externalCommands: words("BeginControlPart EndControlPart BeginTestCase" + " EndTestCase"), multiLineStrings: true }); });PK!ëw�&Mfile-manager-advanced/application/library/codemirror/mode/ttcn-cfg/index.htmlnu„[µü¤ CodeMirror: TTCN-CFG mode

    TTCN-CFG example


    Language: Testing and Test Control Notation - Configuration files (TTCN-CFG)

    MIME types defined: text/x-ttcn-cfg.


    The development of this mode has been sponsored by Ericsson .

    Coded by Asmelash Tsegay Gebretsadkan

    PK!jÜiƒƒHfile-manager-advanced/application/library/codemirror/mode/apl/index.htmlnu„[µü¤ CodeMirror: APL mode

    APL mode

    Simple mode that tries to handle APL as well as it can.

    It attempts to label functions/operators based upon monadic/dyadic usage (but this is far from fully fleshed out). This means there are meaningful classnames so hover states can have popups etc.

    MIME types defined: text/apl (APL code)

    PK!êëÕ€€Dfile-manager-advanced/application/library/codemirror/mode/apl/apl.jsnu„[µü¤// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMode("apl", function() { var builtInOps = { ".": "innerProduct", "\\": "scan", "/": "reduce", "⌿": "reduce1Axis", "â�€": "scan1Axis", "¨": "each", "â�£": "power" }; var builtInFuncs = { "+": ["conjugate", "add"], "−": ["negate", "subtract"], "×": ["signOf", "multiply"], "÷": ["reciprocal", "divide"], "⌈": ["ceiling", "greaterOf"], "⌊": ["floor", "lesserOf"], "∣": ["absolute", "residue"], "â�³": ["indexGenerate", "indexOf"], "?": ["roll", "deal"], "⋆": ["exponentiate", "toThePowerOf"], "â�Ÿ": ["naturalLog", "logToTheBase"], "â—‹": ["piTimes", "circularFuncs"], "!": ["factorial", "binomial"], "⌹": ["matrixInverse", "matrixDivide"], "<": [null, "lessThan"], "≤": [null, "lessThanOrEqual"], "=": [null, "equals"], ">": [null, "greaterThan"], "≥": [null, "greaterThanOrEqual"], "≠": [null, "notEqual"], "≡": ["depth", "match"], "≢": [null, "notMatch"], "∈": ["enlist", "membership"], "â�·": [null, "find"], "∪": ["unique", "union"], "∩": [null, "intersection"], "∼": ["not", "without"], "∨": [null, "or"], "∧": [null, "and"], "â�±": [null, "nor"], "â�²": [null, "nand"], "â�´": ["shapeOf", "reshape"], ",": ["ravel", "catenate"], "â�ª": [null, "firstAxisCatenate"], "⌽": ["reverse", "rotate"], "⊖": ["axis1Reverse", "axis1Rotate"], "â�‰": ["transpose", null], "↑": ["first", "take"], "↓": [null, "drop"], "⊂": ["enclose", "partitionWithAxis"], "⊃": ["diclose", "pick"], "⌷": [null, "index"], "â�‹": ["gradeUp", null], "â�’": ["gradeDown", null], "⊤": ["encode", null], "⊥": ["decode", null], "â�•": ["format", "formatByExample"], "â�Ž": ["execute", null], "⊣": ["stop", "left"], "⊢": ["pass", "right"] }; var isOperator = /[\.\/⌿â�€Â¨â�£]/; var isNiladic = /â�¬/; var isFunction = /[\+−×÷⌈⌊∣â�³\?⋆â�Ÿâ—‹!⌹<≤=>≥≠≡≢∈â�·âˆªâˆ©âˆ¼âˆ¨âˆ§â�±â�²â�´,â�ªâŒ½âŠ–â�‰â†‘↓⊂⊃⌷â�‹â�’⊤⊥â�•â�ŽâŠ£âŠ¢]/; var isArrow = /â†�/; var isComment = /[â��#].*$/; var stringEater = function(type) { var prev; prev = false; return function(c) { prev = c; if (c === type) { return prev === "\\"; } return true; }; }; return { startState: function() { return { prev: false, func: false, op: false, string: false, escape: false }; }, token: function(stream, state) { var ch, funcName; if (stream.eatSpace()) { return null; } ch = stream.next(); if (ch === '"' || ch === "'") { stream.eatWhile(stringEater(ch)); stream.next(); state.prev = true; return "string"; } if (/[\[{\(]/.test(ch)) { state.prev = false; return null; } if (/[\]}\)]/.test(ch)) { state.prev = true; return null; } if (isNiladic.test(ch)) { state.prev = false; return "niladic"; } if (/[¯\d]/.test(ch)) { if (state.func) { state.func = false; state.prev = false; } else { state.prev = true; } stream.eatWhile(/[\w\.]/); return "number"; } if (isOperator.test(ch)) { return "operator apl-" + builtInOps[ch]; } if (isArrow.test(ch)) { return "apl-arrow"; } if (isFunction.test(ch)) { funcName = "apl-"; if (builtInFuncs[ch] != null) { if (state.prev) { funcName += builtInFuncs[ch][1]; } else { funcName += builtInFuncs[ch][0]; } } state.func = true; state.prev = false; return "function " + funcName; } if (isComment.test(ch)) { stream.skipToEnd(); return "comment"; } if (ch === "∘" && stream.peek() === ".") { stream.next(); return "function jot-dot"; } stream.eatWhile(/[\w\$_]/); state.prev = true; return "keyword"; } }; }); CodeMirror.defineMIME("text/apl", "apl"); }); PK!¢N‹+'2'2Rfile-manager-advanced/application/library/codemirror/mode/powershell/powershell.jsnu„[µü¤// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { 'use strict'; if (typeof exports == 'object' && typeof module == 'object') // CommonJS mod(require('codemirror')); else if (typeof define == 'function' && define.amd) // AMD define(['codemirror'], mod); else // Plain browser env mod(window.CodeMirror); })(function(CodeMirror) { 'use strict'; CodeMirror.defineMode('powershell', function() { function buildRegexp(patterns, options) { options = options || {}; var prefix = options.prefix !== undefined ? options.prefix : '^'; var suffix = options.suffix !== undefined ? options.suffix : '\\b'; for (var i = 0; i < patterns.length; i++) { if (patterns[i] instanceof RegExp) { patterns[i] = patterns[i].source; } else { patterns[i] = patterns[i].replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&'); } } return new RegExp(prefix + '(' + patterns.join('|') + ')' + suffix, 'i'); } var notCharacterOrDash = '(?=[^A-Za-z\\d\\-_]|$)'; var varNames = /[\w\-:]/ var keywords = buildRegexp([ /begin|break|catch|continue|data|default|do|dynamicparam/, /else|elseif|end|exit|filter|finally|for|foreach|from|function|if|in/, /param|process|return|switch|throw|trap|try|until|where|while/ ], { suffix: notCharacterOrDash }); var punctuation = /[\[\]{},;`\.]|@[({]/; var wordOperators = buildRegexp([ 'f', /b?not/, /[ic]?split/, 'join', /is(not)?/, 'as', /[ic]?(eq|ne|[gl][te])/, /[ic]?(not)?(like|match|contains)/, /[ic]?replace/, /b?(and|or|xor)/ ], { prefix: '-' }); var symbolOperators = /[+\-*\/%]=|\+\+|--|\.\.|[+\-*&^%:=!|\/]|<(?!#)|(?!#)>/; var operators = buildRegexp([wordOperators, symbolOperators], { suffix: '' }); var numbers = /^((0x[\da-f]+)|((\d+\.\d+|\d\.|\.\d+|\d+)(e[\+\-]?\d+)?))[ld]?([kmgtp]b)?/i; var identifiers = /^[A-Za-z\_][A-Za-z\-\_\d]*\b/; var symbolBuiltins = /[A-Z]:|%|\?/i; var namedBuiltins = buildRegexp([ /Add-(Computer|Content|History|Member|PSSnapin|Type)/, /Checkpoint-Computer/, /Clear-(Content|EventLog|History|Host|Item(Property)?|Variable)/, /Compare-Object/, /Complete-Transaction/, /Connect-PSSession/, /ConvertFrom-(Csv|Json|SecureString|StringData)/, /Convert-Path/, /ConvertTo-(Csv|Html|Json|SecureString|Xml)/, /Copy-Item(Property)?/, /Debug-Process/, /Disable-(ComputerRestore|PSBreakpoint|PSRemoting|PSSessionConfiguration)/, /Disconnect-PSSession/, /Enable-(ComputerRestore|PSBreakpoint|PSRemoting|PSSessionConfiguration)/, /(Enter|Exit)-PSSession/, /Export-(Alias|Clixml|Console|Counter|Csv|FormatData|ModuleMember|PSSession)/, /ForEach-Object/, /Format-(Custom|List|Table|Wide)/, new RegExp('Get-(Acl|Alias|AuthenticodeSignature|ChildItem|Command|ComputerRestorePoint|Content|ControlPanelItem|Counter|Credential' + '|Culture|Date|Event|EventLog|EventSubscriber|ExecutionPolicy|FormatData|Help|History|Host|HotFix|Item|ItemProperty|Job' + '|Location|Member|Module|PfxCertificate|Process|PSBreakpoint|PSCallStack|PSDrive|PSProvider|PSSession|PSSessionConfiguration' + '|PSSnapin|Random|Service|TraceSource|Transaction|TypeData|UICulture|Unique|Variable|Verb|WinEvent|WmiObject)'), /Group-Object/, /Import-(Alias|Clixml|Counter|Csv|LocalizedData|Module|PSSession)/, /ImportSystemModules/, /Invoke-(Command|Expression|History|Item|RestMethod|WebRequest|WmiMethod)/, /Join-Path/, /Limit-EventLog/, /Measure-(Command|Object)/, /Move-Item(Property)?/, new RegExp('New-(Alias|Event|EventLog|Item(Property)?|Module|ModuleManifest|Object|PSDrive|PSSession|PSSessionConfigurationFile' + '|PSSessionOption|PSTransportOption|Service|TimeSpan|Variable|WebServiceProxy|WinEvent)'), /Out-(Default|File|GridView|Host|Null|Printer|String)/, /Pause/, /(Pop|Push)-Location/, /Read-Host/, /Receive-(Job|PSSession)/, /Register-(EngineEvent|ObjectEvent|PSSessionConfiguration|WmiEvent)/, /Remove-(Computer|Event|EventLog|Item(Property)?|Job|Module|PSBreakpoint|PSDrive|PSSession|PSSnapin|TypeData|Variable|WmiObject)/, /Rename-(Computer|Item(Property)?)/, /Reset-ComputerMachinePassword/, /Resolve-Path/, /Restart-(Computer|Service)/, /Restore-Computer/, /Resume-(Job|Service)/, /Save-Help/, /Select-(Object|String|Xml)/, /Send-MailMessage/, new RegExp('Set-(Acl|Alias|AuthenticodeSignature|Content|Date|ExecutionPolicy|Item(Property)?|Location|PSBreakpoint|PSDebug' + '|PSSessionConfiguration|Service|StrictMode|TraceSource|Variable|WmiInstance)'), /Show-(Command|ControlPanelItem|EventLog)/, /Sort-Object/, /Split-Path/, /Start-(Job|Process|Service|Sleep|Transaction|Transcript)/, /Stop-(Computer|Job|Process|Service|Transcript)/, /Suspend-(Job|Service)/, /TabExpansion2/, /Tee-Object/, /Test-(ComputerSecureChannel|Connection|ModuleManifest|Path|PSSessionConfigurationFile)/, /Trace-Command/, /Unblock-File/, /Undo-Transaction/, /Unregister-(Event|PSSessionConfiguration)/, /Update-(FormatData|Help|List|TypeData)/, /Use-Transaction/, /Wait-(Event|Job|Process)/, /Where-Object/, /Write-(Debug|Error|EventLog|Host|Output|Progress|Verbose|Warning)/, /cd|help|mkdir|more|oss|prompt/, /ac|asnp|cat|cd|chdir|clc|clear|clhy|cli|clp|cls|clv|cnsn|compare|copy|cp|cpi|cpp|cvpa|dbp|del|diff|dir|dnsn|ebp/, /echo|epal|epcsv|epsn|erase|etsn|exsn|fc|fl|foreach|ft|fw|gal|gbp|gc|gci|gcm|gcs|gdr|ghy|gi|gjb|gl|gm|gmo|gp|gps/, /group|gsn|gsnp|gsv|gu|gv|gwmi|h|history|icm|iex|ihy|ii|ipal|ipcsv|ipmo|ipsn|irm|ise|iwmi|iwr|kill|lp|ls|man|md/, /measure|mi|mount|move|mp|mv|nal|ndr|ni|nmo|npssc|nsn|nv|ogv|oh|popd|ps|pushd|pwd|r|rbp|rcjb|rcsn|rd|rdr|ren|ri/, /rjb|rm|rmdir|rmo|rni|rnp|rp|rsn|rsnp|rujb|rv|rvpa|rwmi|sajb|sal|saps|sasv|sbp|sc|select|set|shcm|si|sl|sleep|sls/, /sort|sp|spjb|spps|spsv|start|sujb|sv|swmi|tee|trcm|type|where|wjb|write/ ], { prefix: '', suffix: '' }); var variableBuiltins = buildRegexp([ /[$?^_]|Args|ConfirmPreference|ConsoleFileName|DebugPreference|Error|ErrorActionPreference|ErrorView|ExecutionContext/, /FormatEnumerationLimit|Home|Host|Input|MaximumAliasCount|MaximumDriveCount|MaximumErrorCount|MaximumFunctionCount/, /MaximumHistoryCount|MaximumVariableCount|MyInvocation|NestedPromptLevel|OutputEncoding|Pid|Profile|ProgressPreference/, /PSBoundParameters|PSCommandPath|PSCulture|PSDefaultParameterValues|PSEmailServer|PSHome|PSScriptRoot|PSSessionApplicationName/, /PSSessionConfigurationName|PSSessionOption|PSUICulture|PSVersionTable|Pwd|ShellId|StackTrace|VerbosePreference/, /WarningPreference|WhatIfPreference/, /Event|EventArgs|EventSubscriber|Sender/, /Matches|Ofs|ForEach|LastExitCode|PSCmdlet|PSItem|PSSenderInfo|This/, /true|false|null/ ], { prefix: '\\$', suffix: '' }); var builtins = buildRegexp([symbolBuiltins, namedBuiltins, variableBuiltins], { suffix: notCharacterOrDash }); var grammar = { keyword: keywords, number: numbers, operator: operators, builtin: builtins, punctuation: punctuation, identifier: identifiers }; // tokenizers function tokenBase(stream, state) { // Handle Comments //var ch = stream.peek(); var parent = state.returnStack[state.returnStack.length - 1]; if (parent && parent.shouldReturnFrom(state)) { state.tokenize = parent.tokenize; state.returnStack.pop(); return state.tokenize(stream, state); } if (stream.eatSpace()) { return null; } if (stream.eat('(')) { state.bracketNesting += 1; return 'punctuation'; } if (stream.eat(')')) { state.bracketNesting -= 1; return 'punctuation'; } for (var key in grammar) { if (stream.match(grammar[key])) { return key; } } var ch = stream.next(); // single-quote string if (ch === "'") { return tokenSingleQuoteString(stream, state); } if (ch === '$') { return tokenVariable(stream, state); } // double-quote string if (ch === '"') { return tokenDoubleQuoteString(stream, state); } if (ch === '<' && stream.eat('#')) { state.tokenize = tokenComment; return tokenComment(stream, state); } if (ch === '#') { stream.skipToEnd(); return 'comment'; } if (ch === '@') { var quoteMatch = stream.eat(/["']/); if (quoteMatch && stream.eol()) { state.tokenize = tokenMultiString; state.startQuote = quoteMatch[0]; return tokenMultiString(stream, state); } else if (stream.peek().match(/[({]/)) { return 'punctuation'; } else if (stream.peek().match(varNames)) { // splatted variable return tokenVariable(stream, state); } } return 'error'; } function tokenSingleQuoteString(stream, state) { var ch; while ((ch = stream.peek()) != null) { stream.next(); if (ch === "'" && !stream.eat("'")) { state.tokenize = tokenBase; return 'string'; } } return 'error'; } function tokenDoubleQuoteString(stream, state) { var ch; while ((ch = stream.peek()) != null) { if (ch === '$') { state.tokenize = tokenStringInterpolation; return 'string'; } stream.next(); if (ch === '`') { stream.next(); continue; } if (ch === '"' && !stream.eat('"')) { state.tokenize = tokenBase; return 'string'; } } return 'error'; } function tokenStringInterpolation(stream, state) { return tokenInterpolation(stream, state, tokenDoubleQuoteString); } function tokenMultiStringReturn(stream, state) { state.tokenize = tokenMultiString; state.startQuote = '"' return tokenMultiString(stream, state); } function tokenHereStringInterpolation(stream, state) { return tokenInterpolation(stream, state, tokenMultiStringReturn); } function tokenInterpolation(stream, state, parentTokenize) { if (stream.match('$(')) { var savedBracketNesting = state.bracketNesting; state.returnStack.push({ /*jshint loopfunc:true */ shouldReturnFrom: function(state) { return state.bracketNesting === savedBracketNesting; }, tokenize: parentTokenize }); state.tokenize = tokenBase; state.bracketNesting += 1; return 'punctuation'; } else { stream.next(); state.returnStack.push({ shouldReturnFrom: function() { return true; }, tokenize: parentTokenize }); state.tokenize = tokenVariable; return state.tokenize(stream, state); } } function tokenComment(stream, state) { var maybeEnd = false, ch; while ((ch = stream.next()) != null) { if (maybeEnd && ch == '>') { state.tokenize = tokenBase; break; } maybeEnd = (ch === '#'); } return 'comment'; } function tokenVariable(stream, state) { var ch = stream.peek(); if (stream.eat('{')) { state.tokenize = tokenVariableWithBraces; return tokenVariableWithBraces(stream, state); } else if (ch != undefined && ch.match(varNames)) { stream.eatWhile(varNames); state.tokenize = tokenBase; return 'variable-2'; } else { state.tokenize = tokenBase; return 'error'; } } function tokenVariableWithBraces(stream, state) { var ch; while ((ch = stream.next()) != null) { if (ch === '}') { state.tokenize = tokenBase; break; } } return 'variable-2'; } function tokenMultiString(stream, state) { var quote = state.startQuote; if (stream.sol() && stream.match(new RegExp(quote + '@'))) { state.tokenize = tokenBase; } else if (quote === '"') { while (!stream.eol()) { var ch = stream.peek(); if (ch === '$') { state.tokenize = tokenHereStringInterpolation; return 'string'; } stream.next(); if (ch === '`') { stream.next(); } } } else { stream.skipToEnd(); } return 'string'; } var external = { startState: function() { return { returnStack: [], bracketNesting: 0, tokenize: tokenBase }; }, token: function(stream, state) { return state.tokenize(stream, state); }, blockCommentStart: '<#', blockCommentEnd: '#>', lineComment: '#', fold: 'brace' }; return external; }); CodeMirror.defineMIME('application/x-powershell', 'powershell'); }); PK!GúœvÌÌOfile-manager-advanced/application/library/codemirror/mode/powershell/index.htmlnu„[µü¤ CodeMirror: Powershell mode

    PowerShell mode

    MIME types defined: application/x-powershell.

    PK!¦°Xr; ; Lfile-manager-advanced/application/library/codemirror/mode/powershell/test.jsnu„[µü¤// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function() { var mode = CodeMirror.getMode({indentUnit: 2}, "powershell"); function MT(name) { test.mode(name, mode, Array.prototype.slice.call(arguments, 1)); } MT('comment', '[number 1][comment # A]'); MT('comment_multiline', '[number 1][comment <#]', '[comment ABC]', '[comment #>][number 2]'); [ '0', '1234', '12kb', '12mb', '12Gb', '12Tb', '12PB', '12L', '12D', '12lkb', '12dtb', '1.234', '1.234e56', '1.', '1.e2', '.2', '.2e34', '1.2MB', '1.kb', '.1dTB', '1.e1gb', '.2', '.2e34', '0x1', '0xabcdef', '0x3tb', '0xelmb' ].forEach(function(number) { MT("number_" + number, "[number " + number + "]"); }); MT('string_literal_escaping', "[string 'a''']"); MT('string_literal_variable', "[string 'a $x']"); MT('string_escaping_1', '[string "a `""]'); MT('string_escaping_2', '[string "a """]'); MT('string_variable_escaping', '[string "a `$x"]'); MT('string_variable', '[string "a ][variable-2 $x][string b"]'); MT('string_variable_spaces', '[string "a ][variable-2 ${x y}][string b"]'); MT('string_expression', '[string "a ][punctuation $(][variable-2 $x][operator +][number 3][punctuation )][string b"]'); MT('string_expression_nested', '[string "A][punctuation $(][string "a][punctuation $(][string "w"][punctuation )][string b"][punctuation )][string B"]'); MT('string_heredoc', '[string @"]', '[string abc]', '[string "@]'); MT('string_heredoc_quotes', '[string @"]', '[string abc "\']', '[string "@]'); MT('string_heredoc_variable', '[string @"]', '[string a ][variable-2 $x][string b]', '[string "@]'); MT('string_heredoc_nested_string', '[string @"]', '[string a][punctuation $(][string "w"][punctuation )][string b]', '[string "@]'); MT('string_heredoc_literal_quotes', "[string @']", '[string abc "\']', "[string '@]"); MT('array', "[punctuation @(][string 'a'][punctuation ,][string 'b'][punctuation )]"); MT('hash', "[punctuation @{][string 'key'][operator :][string 'value'][punctuation }]"); MT('variable', "[variable-2 $test]"); MT('variable_global', "[variable-2 $global:test]"); MT('variable_spaces', "[variable-2 ${test test}]"); MT('operator_splat', "[variable-2 @x]"); MT('variable_builtin', "[builtin $ErrorActionPreference]"); MT('variable_builtin_symbols', "[builtin $$]"); MT('operator', "[operator +]"); MT('operator_unary', "[operator +][number 3]"); MT('operator_long', "[operator -match]"); [ '(', ')', '[[', ']]', '{', '}', ',', '`', ';', '.' ].forEach(function(punctuation) { MT("punctuation_" + punctuation.replace(/^[\[\]]/,''), "[punctuation " + punctuation + "]"); }); MT('keyword', "[keyword if]"); MT('call_builtin', "[builtin Get-ChildItem]"); })(); PK!x  º  Hfile-manager-advanced/application/library/codemirror/mode/fcl/index.htmlnu„[µü¤ CodeMirror: FCL mode

    FCL mode

    MIME type: text/x-fcl

    PK!ŒÑE&__Dfile-manager-advanced/application/library/codemirror/mode/fcl/fcl.jsnu„[µü¤// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMode("fcl", function(config) { var indentUnit = config.indentUnit; var keywords = { "term": true, "method": true, "accu": true, "rule": true, "then": true, "is": true, "and": true, "or": true, "if": true, "default": true }; var start_blocks = { "var_input": true, "var_output": true, "fuzzify": true, "defuzzify": true, "function_block": true, "ruleblock": true }; var end_blocks = { "end_ruleblock": true, "end_defuzzify": true, "end_function_block": true, "end_fuzzify": true, "end_var": true }; var atoms = { "true": true, "false": true, "nan": true, "real": true, "min": true, "max": true, "cog": true, "cogs": true }; var isOperatorChar = /[+\-*&^%:=<>!|\/]/; function tokenBase(stream, state) { var ch = stream.next(); if (/[\d\.]/.test(ch)) { if (ch == ".") { stream.match(/^[0-9]+([eE][\-+]?[0-9]+)?/); } else if (ch == "0") { stream.match(/^[xX][0-9a-fA-F]+/) || stream.match(/^0[0-7]+/); } else { stream.match(/^[0-9]*\.?[0-9]*([eE][\-+]?[0-9]+)?/); } return "number"; } if (ch == "/" || ch == "(") { if (stream.eat("*")) { state.tokenize = tokenComment; return tokenComment(stream, state); } if (stream.eat("/")) { stream.skipToEnd(); return "comment"; } } if (isOperatorChar.test(ch)) { stream.eatWhile(isOperatorChar); return "operator"; } stream.eatWhile(/[\w\$_\xa1-\uffff]/); var cur = stream.current().toLowerCase(); if (keywords.propertyIsEnumerable(cur) || start_blocks.propertyIsEnumerable(cur) || end_blocks.propertyIsEnumerable(cur)) { return "keyword"; } if (atoms.propertyIsEnumerable(cur)) return "atom"; return "variable"; } function tokenComment(stream, state) { var maybeEnd = false, ch; while (ch = stream.next()) { if ((ch == "/" || ch == ")") && maybeEnd) { state.tokenize = tokenBase; break; } maybeEnd = (ch == "*"); } return "comment"; } function Context(indented, column, type, align, prev) { this.indented = indented; this.column = column; this.type = type; this.align = align; this.prev = prev; } function pushContext(state, col, type) { return state.context = new Context(state.indented, col, type, null, state.context); } function popContext(state) { if (!state.context.prev) return; var t = state.context.type; if (t == "end_block") state.indented = state.context.indented; return state.context = state.context.prev; } // Interface return { startState: function(basecolumn) { return { tokenize: null, context: new Context((basecolumn || 0) - indentUnit, 0, "top", false), indented: 0, startOfLine: true }; }, token: function(stream, state) { var ctx = state.context; if (stream.sol()) { if (ctx.align == null) ctx.align = false; state.indented = stream.indentation(); state.startOfLine = true; } if (stream.eatSpace()) return null; var style = (state.tokenize || tokenBase)(stream, state); if (style == "comment") return style; if (ctx.align == null) ctx.align = true; var cur = stream.current().toLowerCase(); if (start_blocks.propertyIsEnumerable(cur)) pushContext(state, stream.column(), "end_block"); else if (end_blocks.propertyIsEnumerable(cur)) popContext(state); state.startOfLine = false; return style; }, indent: function(state, textAfter) { if (state.tokenize != tokenBase && state.tokenize != null) return 0; var ctx = state.context; var closing = end_blocks.propertyIsEnumerable(textAfter); if (ctx.align) return ctx.column + (closing ? 0 : 1); else return ctx.indented + (closing ? 0 : indentUnit); }, electricChars: "ryk", fold: "brace", blockCommentStart: "(*", blockCommentEnd: "*)", lineComment: "//" }; }); CodeMirror.defineMIME("text/x-fcl", "fcl"); }); PK!\ôèÂ22Ifile-manager-advanced/application/library/codemirror/mode/yaml/index.htmlnu„[µü¤ CodeMirror: YAML mode

    YAML mode

    MIME types defined: text/x-yaml.

    PK! A3AAFfile-manager-advanced/application/library/codemirror/mode/yaml/yaml.jsnu„[µü¤// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMode("yaml", function() { var cons = ['true', 'false', 'on', 'off', 'yes', 'no']; var keywordRegex = new RegExp("\\b(("+cons.join(")|(")+"))$", 'i'); return { token: function(stream, state) { var ch = stream.peek(); var esc = state.escaped; state.escaped = false; /* comments */ if (ch == "#" && (stream.pos == 0 || /\s/.test(stream.string.charAt(stream.pos - 1)))) { stream.skipToEnd(); return "comment"; } if (stream.match(/^('([^']|\\.)*'?|"([^"]|\\.)*"?)/)) return "string"; if (state.literal && stream.indentation() > state.keyCol) { stream.skipToEnd(); return "string"; } else if (state.literal) { state.literal = false; } if (stream.sol()) { state.keyCol = 0; state.pair = false; state.pairStart = false; /* document start */ if(stream.match(/---/)) { return "def"; } /* document end */ if (stream.match(/\.\.\./)) { return "def"; } /* array list item */ if (stream.match(/\s*-\s+/)) { return 'meta'; } } /* inline pairs/lists */ if (stream.match(/^(\{|\}|\[|\])/)) { if (ch == '{') state.inlinePairs++; else if (ch == '}') state.inlinePairs--; else if (ch == '[') state.inlineList++; else state.inlineList--; return 'meta'; } /* list seperator */ if (state.inlineList > 0 && !esc && ch == ',') { stream.next(); return 'meta'; } /* pairs seperator */ if (state.inlinePairs > 0 && !esc && ch == ',') { state.keyCol = 0; state.pair = false; state.pairStart = false; stream.next(); return 'meta'; } /* start of value of a pair */ if (state.pairStart) { /* block literals */ if (stream.match(/^\s*(\||\>)\s*/)) { state.literal = true; return 'meta'; }; /* references */ if (stream.match(/^\s*(\&|\*)[a-z0-9\._-]+\b/i)) { return 'variable-2'; } /* numbers */ if (state.inlinePairs == 0 && stream.match(/^\s*-?[0-9\.\,]+\s?$/)) { return 'number'; } if (state.inlinePairs > 0 && stream.match(/^\s*-?[0-9\.\,]+\s?(?=(,|}))/)) { return 'number'; } /* keywords */ if (stream.match(keywordRegex)) { return 'keyword'; } } /* pairs (associative arrays) -> key */ if (!state.pair && stream.match(/^\s*(?:[,\[\]{}&*!|>'"%@`][^\s'":]|[^,\[\]{}#&*!|>'"%@`])[^#]*?(?=\s*:($|\s))/)) { state.pair = true; state.keyCol = stream.indentation(); return "atom"; } if (state.pair && stream.match(/^:\s*/)) { state.pairStart = true; return 'meta'; } /* nothing found, continue */ state.pairStart = false; state.escaped = (ch == '\\'); stream.next(); return null; }, startState: function() { return { pair: false, pairStart: false, keyCol: 0, inlinePairs: 0, inlineList: 0, literal: false, escaped: false }; } }; }); CodeMirror.defineMIME("text/x-yaml", "yaml"); }); PK!×wÌj j Hfile-manager-advanced/application/library/codemirror/mode/jsx/index.htmlnu„[µü¤ CodeMirror: JSX mode

    JSX mode

    JSX Mode for React's JavaScript syntax extension.

    MIME types defined: text/jsx, text/typescript-jsx.

    PK![GÒ– – Efile-manager-advanced/application/library/codemirror/mode/jsx/test.jsnu„[µü¤// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function() { var mode = CodeMirror.getMode({indentUnit: 2}, "jsx") function MT(name) { test.mode(name, mode, Array.prototype.slice.call(arguments, 1)) } MT("selfclose", "[keyword var] [def x] [operator =] [bracket&tag <] [tag foo] [bracket&tag />] [operator +] [number 1];") MT("openclose", "([bracket&tag <][tag foo][bracket&tag >]hello [atom &][bracket&tag ][operator ++])") MT("attr", "([bracket&tag <][tag foo] [attribute abc]=[string 'value'][bracket&tag >]hello [atom &][bracket&tag ][operator ++])") MT("braced_attr", "([bracket&tag <][tag foo] [attribute abc]={[number 10]}[bracket&tag >]hello [atom &][bracket&tag ][operator ++])") MT("braced_text", "([bracket&tag <][tag foo][bracket&tag >]hello {[number 10]} [atom &][bracket&tag ][operator ++])") MT("nested_tag", "([bracket&tag <][tag foo][bracket&tag ><][tag bar][bracket&tag >][operator ++])") MT("nested_jsx", "[keyword return] (", " [bracket&tag <][tag foo][bracket&tag >]", " say {[number 1] [operator +] [bracket&tag <][tag bar] [attribute attr]={[number 10]}[bracket&tag />]}!", " [bracket&tag ][operator ++]", ")") MT("preserve_js_context", "[variable x] [operator =] [string-2 `quasi${][bracket&tag <][tag foo][bracket&tag />][string-2 }quoted`]") MT("line_comment", "([bracket&tag <][tag foo] [comment // hello]", " [bracket&tag >][operator ++])") MT("line_comment_not_in_tag", "([bracket&tag <][tag foo][bracket&tag >] // hello", " [bracket&tag ][operator ++])") MT("block_comment", "([bracket&tag <][tag foo] [comment /* hello]", "[comment line 2]", "[comment line 3 */] [bracket&tag >][operator ++])") MT("block_comment_not_in_tag", "([bracket&tag <][tag foo][bracket&tag >]/* hello", " line 2", " line 3 */ [bracket&tag ][operator ++])") MT("missing_attr", "([bracket&tag <][tag foo] [attribute selected][bracket&tag />][operator ++])") MT("indent_js", "([bracket&tag <][tag foo][bracket&tag >]", " [bracket&tag <][tag bar] [attribute baz]={[keyword function]() {", " [keyword return] [number 10]", " }}[bracket&tag />]", " [bracket&tag ])") MT("spread", "([bracket&tag <][tag foo] [attribute bar]={[meta ...][variable baz] [operator /][number 2]}[bracket&tag />])") MT("tag_attribute", "([bracket&tag <][tag foo] [attribute bar]=[bracket&tag <][tag foo][bracket&tag />/>][operator ++])") })() PK!Ø?RyKKDfile-manager-advanced/application/library/codemirror/mode/jsx/jsx.jsnu„[µü¤// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror"), require("../xml/xml"), require("../javascript/javascript")) else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror", "../xml/xml", "../javascript/javascript"], mod) else // Plain browser env mod(CodeMirror) })(function(CodeMirror) { "use strict" // Depth means the amount of open braces in JS context, in XML // context 0 means not in tag, 1 means in tag, and 2 means in tag // and js block comment. function Context(state, mode, depth, prev) { this.state = state; this.mode = mode; this.depth = depth; this.prev = prev } function copyContext(context) { return new Context(CodeMirror.copyState(context.mode, context.state), context.mode, context.depth, context.prev && copyContext(context.prev)) } CodeMirror.defineMode("jsx", function(config, modeConfig) { var xmlMode = CodeMirror.getMode(config, {name: "xml", allowMissing: true, multilineTagIndentPastTag: false}) var jsMode = CodeMirror.getMode(config, modeConfig && modeConfig.base || "javascript") function flatXMLIndent(state) { var tagName = state.tagName state.tagName = null var result = xmlMode.indent(state, "") state.tagName = tagName return result } function token(stream, state) { if (state.context.mode == xmlMode) return xmlToken(stream, state, state.context) else return jsToken(stream, state, state.context) } function xmlToken(stream, state, cx) { if (cx.depth == 2) { // Inside a JS /* */ comment if (stream.match(/^.*?\*\//)) cx.depth = 1 else stream.skipToEnd() return "comment" } if (stream.peek() == "{") { xmlMode.skipAttribute(cx.state) var indent = flatXMLIndent(cx.state), xmlContext = cx.state.context // If JS starts on same line as tag if (xmlContext && stream.match(/^[^>]*>\s*$/, false)) { while (xmlContext.prev && !xmlContext.startOfLine) xmlContext = xmlContext.prev // If tag starts the line, use XML indentation level if (xmlContext.startOfLine) indent -= config.indentUnit // Else use JS indentation level else if (cx.prev.state.lexical) indent = cx.prev.state.lexical.indented // Else if inside of tag } else if (cx.depth == 1) { indent += config.indentUnit } state.context = new Context(CodeMirror.startState(jsMode, indent), jsMode, 0, state.context) return null } if (cx.depth == 1) { // Inside of tag if (stream.peek() == "<") { // Tag inside of tag xmlMode.skipAttribute(cx.state) state.context = new Context(CodeMirror.startState(xmlMode, flatXMLIndent(cx.state)), xmlMode, 0, state.context) return null } else if (stream.match("//")) { stream.skipToEnd() return "comment" } else if (stream.match("/*")) { cx.depth = 2 return token(stream, state) } } var style = xmlMode.token(stream, cx.state), cur = stream.current(), stop if (/\btag\b/.test(style)) { if (/>$/.test(cur)) { if (cx.state.context) cx.depth = 0 else state.context = state.context.prev } else if (/^ -1) { stream.backUp(cur.length - stop) } return style } function jsToken(stream, state, cx) { if (stream.peek() == "<" && jsMode.expressionAllowed(stream, cx.state)) { jsMode.skipExpression(cx.state) state.context = new Context(CodeMirror.startState(xmlMode, jsMode.indent(cx.state, "")), xmlMode, 0, state.context) return null } var style = jsMode.token(stream, cx.state) if (!style && cx.depth != null) { var cur = stream.current() if (cur == "{") { cx.depth++ } else if (cur == "}") { if (--cx.depth == 0) state.context = state.context.prev } } return style } return { startState: function() { return {context: new Context(CodeMirror.startState(jsMode), jsMode)} }, copyState: function(state) { return {context: copyContext(state.context)} }, token: token, indent: function(state, textAfter, fullLine) { return state.context.mode.indent(state.context.state, textAfter, fullLine) }, innerMode: function(state) { return state.context } } }, "xml", "javascript") CodeMirror.defineMIME("text/jsx", "jsx") CodeMirror.defineMIME("text/typescript-jsx", {name: "jsx", base: {name: "javascript", typescript: true}}) }); PK!µ·?Ž´'´'Hfile-manager-advanced/application/library/codemirror/mode/nginx/nginx.jsnu„[µü¤// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMode("nginx", function(config) { function words(str) { var obj = {}, words = str.split(" "); for (var i = 0; i < words.length; ++i) obj[words[i]] = true; return obj; } var keywords = words( /* ngxDirectiveControl */ "break return rewrite set" + /* ngxDirective */ " accept_mutex accept_mutex_delay access_log add_after_body add_before_body add_header addition_types aio alias allow ancient_browser ancient_browser_value auth_basic auth_basic_user_file auth_http auth_http_header auth_http_timeout autoindex autoindex_exact_size autoindex_localtime charset charset_types client_body_buffer_size client_body_in_file_only client_body_in_single_buffer client_body_temp_path client_body_timeout client_header_buffer_size client_header_timeout client_max_body_size connection_pool_size create_full_put_path daemon dav_access dav_methods debug_connection debug_points default_type degradation degrade deny devpoll_changes devpoll_events directio directio_alignment empty_gif env epoll_events error_log eventport_events expires fastcgi_bind fastcgi_buffer_size fastcgi_buffers fastcgi_busy_buffers_size fastcgi_cache fastcgi_cache_key fastcgi_cache_methods fastcgi_cache_min_uses fastcgi_cache_path fastcgi_cache_use_stale fastcgi_cache_valid fastcgi_catch_stderr fastcgi_connect_timeout fastcgi_hide_header fastcgi_ignore_client_abort fastcgi_ignore_headers fastcgi_index fastcgi_intercept_errors fastcgi_max_temp_file_size fastcgi_next_upstream fastcgi_param fastcgi_pass_header fastcgi_pass_request_body fastcgi_pass_request_headers fastcgi_read_timeout fastcgi_send_lowat fastcgi_send_timeout fastcgi_split_path_info fastcgi_store fastcgi_store_access fastcgi_temp_file_write_size fastcgi_temp_path fastcgi_upstream_fail_timeout fastcgi_upstream_max_fails flv geoip_city geoip_country google_perftools_profiles gzip gzip_buffers gzip_comp_level gzip_disable gzip_hash gzip_http_version gzip_min_length gzip_no_buffer gzip_proxied gzip_static gzip_types gzip_vary gzip_window if_modified_since ignore_invalid_headers image_filter image_filter_buffer image_filter_jpeg_quality image_filter_transparency imap_auth imap_capabilities imap_client_buffer index ip_hash keepalive_requests keepalive_timeout kqueue_changes kqueue_events large_client_header_buffers limit_conn limit_conn_log_level limit_rate limit_rate_after limit_req limit_req_log_level limit_req_zone limit_zone lingering_time lingering_timeout lock_file log_format log_not_found log_subrequest map_hash_bucket_size map_hash_max_size master_process memcached_bind memcached_buffer_size memcached_connect_timeout memcached_next_upstream memcached_read_timeout memcached_send_timeout memcached_upstream_fail_timeout memcached_upstream_max_fails merge_slashes min_delete_depth modern_browser modern_browser_value msie_padding msie_refresh multi_accept open_file_cache open_file_cache_errors open_file_cache_events open_file_cache_min_uses open_file_cache_valid open_log_file_cache output_buffers override_charset perl perl_modules perl_require perl_set pid pop3_auth pop3_capabilities port_in_redirect postpone_gzipping postpone_output protocol proxy proxy_bind proxy_buffer proxy_buffer_size proxy_buffering proxy_buffers proxy_busy_buffers_size proxy_cache proxy_cache_key proxy_cache_methods proxy_cache_min_uses proxy_cache_path proxy_cache_use_stale proxy_cache_valid proxy_connect_timeout proxy_headers_hash_bucket_size proxy_headers_hash_max_size proxy_hide_header proxy_ignore_client_abort proxy_ignore_headers proxy_intercept_errors proxy_max_temp_file_size proxy_method proxy_next_upstream proxy_pass_error_message proxy_pass_header proxy_pass_request_body proxy_pass_request_headers proxy_read_timeout proxy_redirect proxy_send_lowat proxy_send_timeout proxy_set_body proxy_set_header proxy_ssl_session_reuse proxy_store proxy_store_access proxy_temp_file_write_size proxy_temp_path proxy_timeout proxy_upstream_fail_timeout proxy_upstream_max_fails random_index read_ahead real_ip_header recursive_error_pages request_pool_size reset_timedout_connection resolver resolver_timeout rewrite_log rtsig_overflow_events rtsig_overflow_test rtsig_overflow_threshold rtsig_signo satisfy secure_link_secret send_lowat send_timeout sendfile sendfile_max_chunk server_name_in_redirect server_names_hash_bucket_size server_names_hash_max_size server_tokens set_real_ip_from smtp_auth smtp_capabilities smtp_client_buffer smtp_greeting_delay so_keepalive source_charset ssi ssi_ignore_recycled_buffers ssi_min_file_chunk ssi_silent_errors ssi_types ssi_value_length ssl ssl_certificate ssl_certificate_key ssl_ciphers ssl_client_certificate ssl_crl ssl_dhparam ssl_engine ssl_prefer_server_ciphers ssl_protocols ssl_session_cache ssl_session_timeout ssl_verify_client ssl_verify_depth starttls stub_status sub_filter sub_filter_once sub_filter_types tcp_nodelay tcp_nopush thread_stack_size timeout timer_resolution types_hash_bucket_size types_hash_max_size underscores_in_headers uninitialized_variable_warn use user userid userid_domain userid_expires userid_mark userid_name userid_p3p userid_path userid_service valid_referers variables_hash_bucket_size variables_hash_max_size worker_connections worker_cpu_affinity worker_priority worker_processes worker_rlimit_core worker_rlimit_nofile worker_rlimit_sigpending worker_threads working_directory xclient xml_entities xslt_stylesheet xslt_typesdrew@li229-23" ); var keywords_block = words( /* ngxDirectiveBlock */ "http mail events server types location upstream charset_map limit_except if geo map" ); var keywords_important = words( /* ngxDirectiveImportant */ "include root server server_name listen internal proxy_pass memcached_pass fastcgi_pass try_files" ); var indentUnit = config.indentUnit, type; function ret(style, tp) {type = tp; return style;} function tokenBase(stream, state) { stream.eatWhile(/[\w\$_]/); var cur = stream.current(); if (keywords.propertyIsEnumerable(cur)) { return "keyword"; } else if (keywords_block.propertyIsEnumerable(cur)) { return "variable-2"; } else if (keywords_important.propertyIsEnumerable(cur)) { return "string-2"; } /**/ var ch = stream.next(); if (ch == "@") {stream.eatWhile(/[\w\\\-]/); return ret("meta", stream.current());} else if (ch == "/" && stream.eat("*")) { state.tokenize = tokenCComment; return tokenCComment(stream, state); } else if (ch == "<" && stream.eat("!")) { state.tokenize = tokenSGMLComment; return tokenSGMLComment(stream, state); } else if (ch == "=") ret(null, "compare"); else if ((ch == "~" || ch == "|") && stream.eat("=")) return ret(null, "compare"); else if (ch == "\"" || ch == "'") { state.tokenize = tokenString(ch); return state.tokenize(stream, state); } else if (ch == "#") { stream.skipToEnd(); return ret("comment", "comment"); } else if (ch == "!") { stream.match(/^\s*\w*/); return ret("keyword", "important"); } else if (/\d/.test(ch)) { stream.eatWhile(/[\w.%]/); return ret("number", "unit"); } else if (/[,.+>*\/]/.test(ch)) { return ret(null, "select-op"); } else if (/[;{}:\[\]]/.test(ch)) { return ret(null, ch); } else { stream.eatWhile(/[\w\\\-]/); return ret("variable", "variable"); } } function tokenCComment(stream, state) { var maybeEnd = false, ch; while ((ch = stream.next()) != null) { if (maybeEnd && ch == "/") { state.tokenize = tokenBase; break; } maybeEnd = (ch == "*"); } return ret("comment", "comment"); } function tokenSGMLComment(stream, state) { var dashes = 0, ch; while ((ch = stream.next()) != null) { if (dashes >= 2 && ch == ">") { state.tokenize = tokenBase; break; } dashes = (ch == "-") ? dashes + 1 : 0; } return ret("comment", "comment"); } function tokenString(quote) { return function(stream, state) { var escaped = false, ch; while ((ch = stream.next()) != null) { if (ch == quote && !escaped) break; escaped = !escaped && ch == "\\"; } if (!escaped) state.tokenize = tokenBase; return ret("string", "string"); }; } return { startState: function(base) { return {tokenize: tokenBase, baseIndent: base || 0, stack: []}; }, token: function(stream, state) { if (stream.eatSpace()) return null; type = null; var style = state.tokenize(stream, state); var context = state.stack[state.stack.length-1]; if (type == "hash" && context == "rule") style = "atom"; else if (style == "variable") { if (context == "rule") style = "number"; else if (!context || context == "@media{") style = "tag"; } if (context == "rule" && /^[\{\};]$/.test(type)) state.stack.pop(); if (type == "{") { if (context == "@media") state.stack[state.stack.length-1] = "@media{"; else state.stack.push("{"); } else if (type == "}") state.stack.pop(); else if (type == "@media") state.stack.push("@media"); else if (context == "{" && type != "comment") state.stack.push("rule"); return style; }, indent: function(state, textAfter) { var n = state.stack.length; if (/^\}/.test(textAfter)) n -= state.stack[state.stack.length-1] == "rule" ? 2 : 1; return state.baseIndent + n * indentUnit; }, electricChars: "}" }; }); CodeMirror.defineMIME("text/x-nginx-conf", "nginx"); }); PK! àÚ�wwJfile-manager-advanced/application/library/codemirror/mode/nginx/index.htmlnu„[µü¤ CodeMirror: NGINX mode

    NGINX mode

    MIME types defined: text/nginx.

    PK!û+„L$$Ifile-manager-advanced/application/library/codemirror/mode/stex/index.htmlnu„[µü¤ CodeMirror: sTeX mode

    sTeX mode

    MIME types defined: text/x-stex.

    Parsing/Highlighting Tests: normal, verbose.

    PK!RïÙ‘" " Ffile-manager-advanced/application/library/codemirror/mode/stex/test.jsnu„[µü¤// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function() { var mode = CodeMirror.getMode({tabSize: 4}, "stex"); function MT(name) { test.mode(name, mode, Array.prototype.slice.call(arguments, 1)); } MT("word", "foo"); MT("twoWords", "foo bar"); MT("beginEndDocument", "[tag \\begin][bracket {][atom document][bracket }]", "[tag \\end][bracket {][atom document][bracket }]"); MT("beginEndEquation", "[tag \\begin][bracket {][atom equation][bracket }]", " E=mc^2", "[tag \\end][bracket {][atom equation][bracket }]"); MT("beginModule", "[tag \\begin][bracket {][atom module][bracket }[[]]]"); MT("beginModuleId", "[tag \\begin][bracket {][atom module][bracket }[[]id=bbt-size[bracket ]]]"); MT("importModule", "[tag \\importmodule][bracket [[][string b-b-t][bracket ]]{][builtin b-b-t][bracket }]"); MT("importModulePath", "[tag \\importmodule][bracket [[][tag \\KWARCslides][bracket {][string dmath/en/cardinality][bracket }]]{][builtin card][bracket }]"); MT("psForPDF", "[tag \\PSforPDF][bracket [[][atom 1][bracket ]]{]#1[bracket }]"); MT("comment", "[comment % foo]"); MT("tagComment", "[tag \\item][comment % bar]"); MT("commentTag", " [comment % \\item]"); MT("commentLineBreak", "[comment %]", "foo"); MT("tagErrorCurly", "[tag \\begin][error }][bracket {]"); MT("tagErrorSquare", "[tag \\item][error ]]][bracket {]"); MT("commentCurly", "[comment % }]"); MT("tagHash", "the [tag \\#] key"); MT("tagNumber", "a [tag \\$][atom 5] stetson"); MT("tagPercent", "[atom 100][tag \\%] beef"); MT("tagAmpersand", "L [tag \\&] N"); MT("tagUnderscore", "foo[tag \\_]bar"); MT("tagBracketOpen", "[tag \\emph][bracket {][tag \\{][bracket }]"); MT("tagBracketClose", "[tag \\emph][bracket {][tag \\}][bracket }]"); MT("tagLetterNumber", "section [tag \\S][atom 1]"); MT("textTagNumber", "para [tag \\P][atom 2]"); MT("thinspace", "x[tag \\,]y"); MT("thickspace", "x[tag \\;]y"); MT("negativeThinspace", "x[tag \\!]y"); MT("periodNotSentence", "J.\\ L.\\ is"); MT("periodSentence", "X[tag \\@]. The"); MT("italicCorrection", "[bracket {][tag \\em] If[tag \\/][bracket }] I"); MT("tagBracket", "[tag \\newcommand][bracket {][tag \\pop][bracket }]"); MT("inlineMathTagFollowedByNumber", "[keyword $][tag \\pi][number 2][keyword $]"); MT("inlineMath", "[keyword $][number 3][variable-2 x][tag ^][number 2.45]-[tag \\sqrt][bracket {][tag \\$\\alpha][bracket }] = [number 2][keyword $] other text"); MT("displayMath", "More [keyword $$]\t[variable-2 S][tag ^][variable-2 n][tag \\sum] [variable-2 i][keyword $$] other text"); MT("mathWithComment", "[keyword $][variable-2 x] [comment % $]", "[variable-2 y][keyword $] other text"); MT("lineBreakArgument", "[tag \\\\][bracket [[][atom 1cm][bracket ]]]"); })(); PK!˜+[uFfile-manager-advanced/application/library/codemirror/mode/stex/stex.jsnu„[µü¤// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE /* * Author: Constantin Jucovschi (c.jucovschi@jacobs-university.de) * Licence: MIT */ (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMode("stex", function() { "use strict"; function pushCommand(state, command) { state.cmdState.push(command); } function peekCommand(state) { if (state.cmdState.length > 0) { return state.cmdState[state.cmdState.length - 1]; } else { return null; } } function popCommand(state) { var plug = state.cmdState.pop(); if (plug) { plug.closeBracket(); } } // returns the non-default plugin closest to the end of the list function getMostPowerful(state) { var context = state.cmdState; for (var i = context.length - 1; i >= 0; i--) { var plug = context[i]; if (plug.name == "DEFAULT") { continue; } return plug; } return { styleIdentifier: function() { return null; } }; } function addPluginPattern(pluginName, cmdStyle, styles) { return function () { this.name = pluginName; this.bracketNo = 0; this.style = cmdStyle; this.styles = styles; this.argument = null; // \begin and \end have arguments that follow. These are stored in the plugin this.styleIdentifier = function() { return this.styles[this.bracketNo - 1] || null; }; this.openBracket = function() { this.bracketNo++; return "bracket"; }; this.closeBracket = function() {}; }; } var plugins = {}; plugins["importmodule"] = addPluginPattern("importmodule", "tag", ["string", "builtin"]); plugins["documentclass"] = addPluginPattern("documentclass", "tag", ["", "atom"]); plugins["usepackage"] = addPluginPattern("usepackage", "tag", ["atom"]); plugins["begin"] = addPluginPattern("begin", "tag", ["atom"]); plugins["end"] = addPluginPattern("end", "tag", ["atom"]); plugins["DEFAULT"] = function () { this.name = "DEFAULT"; this.style = "tag"; this.styleIdentifier = this.openBracket = this.closeBracket = function() {}; }; function setState(state, f) { state.f = f; } // called when in a normal (no environment) context function normal(source, state) { var plug; // Do we look like '\command' ? If so, attempt to apply the plugin 'command' if (source.match(/^\\[a-zA-Z@]+/)) { var cmdName = source.current().slice(1); plug = plugins[cmdName] || plugins["DEFAULT"]; plug = new plug(); pushCommand(state, plug); setState(state, beginParams); return plug.style; } // escape characters if (source.match(/^\\[$&%#{}_]/)) { return "tag"; } // white space control characters if (source.match(/^\\[,;!\/\\]/)) { return "tag"; } // find if we're starting various math modes if (source.match("\\[")) { setState(state, function(source, state){ return inMathMode(source, state, "\\]"); }); return "keyword"; } if (source.match("$$")) { setState(state, function(source, state){ return inMathMode(source, state, "$$"); }); return "keyword"; } if (source.match("$")) { setState(state, function(source, state){ return inMathMode(source, state, "$"); }); return "keyword"; } var ch = source.next(); if (ch == "%") { source.skipToEnd(); return "comment"; } else if (ch == '}' || ch == ']') { plug = peekCommand(state); if (plug) { plug.closeBracket(ch); setState(state, beginParams); } else { return "error"; } return "bracket"; } else if (ch == '{' || ch == '[') { plug = plugins["DEFAULT"]; plug = new plug(); pushCommand(state, plug); return "bracket"; } else if (/\d/.test(ch)) { source.eatWhile(/[\w.%]/); return "atom"; } else { source.eatWhile(/[\w\-_]/); plug = getMostPowerful(state); if (plug.name == 'begin') { plug.argument = source.current(); } return plug.styleIdentifier(); } } function inMathMode(source, state, endModeSeq) { if (source.eatSpace()) { return null; } if (source.match(endModeSeq)) { setState(state, normal); return "keyword"; } if (source.match(/^\\[a-zA-Z@]+/)) { return "tag"; } if (source.match(/^[a-zA-Z]+/)) { return "variable-2"; } // escape characters if (source.match(/^\\[$&%#{}_]/)) { return "tag"; } // white space control characters if (source.match(/^\\[,;!\/]/)) { return "tag"; } // special math-mode characters if (source.match(/^[\^_&]/)) { return "tag"; } // non-special characters if (source.match(/^[+\-<>|=,\/@!*:;'"`~#?]/)) { return null; } if (source.match(/^(\d+\.\d*|\d*\.\d+|\d+)/)) { return "number"; } var ch = source.next(); if (ch == "{" || ch == "}" || ch == "[" || ch == "]" || ch == "(" || ch == ")") { return "bracket"; } if (ch == "%") { source.skipToEnd(); return "comment"; } return "error"; } function beginParams(source, state) { var ch = source.peek(), lastPlug; if (ch == '{' || ch == '[') { lastPlug = peekCommand(state); lastPlug.openBracket(ch); source.eat(ch); setState(state, normal); return "bracket"; } if (/[ \t\r]/.test(ch)) { source.eat(ch); return null; } setState(state, normal); popCommand(state); return normal(source, state); } return { startState: function() { return { cmdState: [], f: normal }; }, copyState: function(s) { return { cmdState: s.cmdState.slice(), f: s.f }; }, token: function(stream, state) { return state.f(stream, state); }, blankLine: function(state) { state.f = normal; state.cmdState.length = 0; }, lineComment: "%" }; }); CodeMirror.defineMIME("text/x-stex", "stex"); CodeMirror.defineMIME("text/x-latex", "stex"); }); PK!G[ÔííMfile-manager-advanced/application/library/codemirror/mode/vbscript/index.htmlnu„[µü¤ CodeMirror: VBScript mode

    VBScript mode

    MIME types defined: text/vbscript.

    PK!.²¬Uá5á5Nfile-manager-advanced/application/library/codemirror/mode/vbscript/vbscript.jsnu„[µü¤// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE /* For extra ASP classic objects, initialize CodeMirror instance with this option: isASP: true E.G.: var editor = CodeMirror.fromTextArea(document.getElementById("code"), { lineNumbers: true, isASP: true }); */ (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMode("vbscript", function(conf, parserConf) { var ERRORCLASS = 'error'; function wordRegexp(words) { return new RegExp("^((" + words.join(")|(") + "))\\b", "i"); } var singleOperators = new RegExp("^[\\+\\-\\*/&\\\\\\^<>=]"); var doubleOperators = new RegExp("^((<>)|(<=)|(>=))"); var singleDelimiters = new RegExp('^[\\.,]'); var brakets = new RegExp('^[\\(\\)]'); var identifiers = new RegExp("^[A-Za-z][_A-Za-z0-9]*"); var openingKeywords = ['class','sub','select','while','if','function', 'property', 'with', 'for']; var middleKeywords = ['else','elseif','case']; var endKeywords = ['next','loop','wend']; var wordOperators = wordRegexp(['and', 'or', 'not', 'xor', 'is', 'mod', 'eqv', 'imp']); var commonkeywords = ['dim', 'redim', 'then', 'until', 'randomize', 'byval','byref','new','property', 'exit', 'in', 'const','private', 'public', 'get','set','let', 'stop', 'on error resume next', 'on error goto 0', 'option explicit', 'call', 'me']; //This list was from: http://msdn.microsoft.com/en-us/library/f8tbc79x(v=vs.84).aspx var atomWords = ['true', 'false', 'nothing', 'empty', 'null']; //This list was from: http://msdn.microsoft.com/en-us/library/3ca8tfek(v=vs.84).aspx var builtinFuncsWords = ['abs', 'array', 'asc', 'atn', 'cbool', 'cbyte', 'ccur', 'cdate', 'cdbl', 'chr', 'cint', 'clng', 'cos', 'csng', 'cstr', 'date', 'dateadd', 'datediff', 'datepart', 'dateserial', 'datevalue', 'day', 'escape', 'eval', 'execute', 'exp', 'filter', 'formatcurrency', 'formatdatetime', 'formatnumber', 'formatpercent', 'getlocale', 'getobject', 'getref', 'hex', 'hour', 'inputbox', 'instr', 'instrrev', 'int', 'fix', 'isarray', 'isdate', 'isempty', 'isnull', 'isnumeric', 'isobject', 'join', 'lbound', 'lcase', 'left', 'len', 'loadpicture', 'log', 'ltrim', 'rtrim', 'trim', 'maths', 'mid', 'minute', 'month', 'monthname', 'msgbox', 'now', 'oct', 'replace', 'rgb', 'right', 'rnd', 'round', 'scriptengine', 'scriptenginebuildversion', 'scriptenginemajorversion', 'scriptengineminorversion', 'second', 'setlocale', 'sgn', 'sin', 'space', 'split', 'sqr', 'strcomp', 'string', 'strreverse', 'tan', 'time', 'timer', 'timeserial', 'timevalue', 'typename', 'ubound', 'ucase', 'unescape', 'vartype', 'weekday', 'weekdayname', 'year']; //This list was from: http://msdn.microsoft.com/en-us/library/ydz4cfk3(v=vs.84).aspx var builtinConsts = ['vbBlack', 'vbRed', 'vbGreen', 'vbYellow', 'vbBlue', 'vbMagenta', 'vbCyan', 'vbWhite', 'vbBinaryCompare', 'vbTextCompare', 'vbSunday', 'vbMonday', 'vbTuesday', 'vbWednesday', 'vbThursday', 'vbFriday', 'vbSaturday', 'vbUseSystemDayOfWeek', 'vbFirstJan1', 'vbFirstFourDays', 'vbFirstFullWeek', 'vbGeneralDate', 'vbLongDate', 'vbShortDate', 'vbLongTime', 'vbShortTime', 'vbObjectError', 'vbOKOnly', 'vbOKCancel', 'vbAbortRetryIgnore', 'vbYesNoCancel', 'vbYesNo', 'vbRetryCancel', 'vbCritical', 'vbQuestion', 'vbExclamation', 'vbInformation', 'vbDefaultButton1', 'vbDefaultButton2', 'vbDefaultButton3', 'vbDefaultButton4', 'vbApplicationModal', 'vbSystemModal', 'vbOK', 'vbCancel', 'vbAbort', 'vbRetry', 'vbIgnore', 'vbYes', 'vbNo', 'vbCr', 'VbCrLf', 'vbFormFeed', 'vbLf', 'vbNewLine', 'vbNullChar', 'vbNullString', 'vbTab', 'vbVerticalTab', 'vbUseDefault', 'vbTrue', 'vbFalse', 'vbEmpty', 'vbNull', 'vbInteger', 'vbLong', 'vbSingle', 'vbDouble', 'vbCurrency', 'vbDate', 'vbString', 'vbObject', 'vbError', 'vbBoolean', 'vbVariant', 'vbDataObject', 'vbDecimal', 'vbByte', 'vbArray']; //This list was from: http://msdn.microsoft.com/en-us/library/hkc375ea(v=vs.84).aspx var builtinObjsWords = ['WScript', 'err', 'debug', 'RegExp']; var knownProperties = ['description', 'firstindex', 'global', 'helpcontext', 'helpfile', 'ignorecase', 'length', 'number', 'pattern', 'source', 'value', 'count']; var knownMethods = ['clear', 'execute', 'raise', 'replace', 'test', 'write', 'writeline', 'close', 'open', 'state', 'eof', 'update', 'addnew', 'end', 'createobject', 'quit']; var aspBuiltinObjsWords = ['server', 'response', 'request', 'session', 'application']; var aspKnownProperties = ['buffer', 'cachecontrol', 'charset', 'contenttype', 'expires', 'expiresabsolute', 'isclientconnected', 'pics', 'status', //response 'clientcertificate', 'cookies', 'form', 'querystring', 'servervariables', 'totalbytes', //request 'contents', 'staticobjects', //application 'codepage', 'lcid', 'sessionid', 'timeout', //session 'scripttimeout']; //server var aspKnownMethods = ['addheader', 'appendtolog', 'binarywrite', 'end', 'flush', 'redirect', //response 'binaryread', //request 'remove', 'removeall', 'lock', 'unlock', //application 'abandon', //session 'getlasterror', 'htmlencode', 'mappath', 'transfer', 'urlencode']; //server var knownWords = knownMethods.concat(knownProperties); builtinObjsWords = builtinObjsWords.concat(builtinConsts); if (conf.isASP){ builtinObjsWords = builtinObjsWords.concat(aspBuiltinObjsWords); knownWords = knownWords.concat(aspKnownMethods, aspKnownProperties); }; var keywords = wordRegexp(commonkeywords); var atoms = wordRegexp(atomWords); var builtinFuncs = wordRegexp(builtinFuncsWords); var builtinObjs = wordRegexp(builtinObjsWords); var known = wordRegexp(knownWords); var stringPrefixes = '"'; var opening = wordRegexp(openingKeywords); var middle = wordRegexp(middleKeywords); var closing = wordRegexp(endKeywords); var doubleClosing = wordRegexp(['end']); var doOpening = wordRegexp(['do']); var noIndentWords = wordRegexp(['on error resume next', 'exit']); var comment = wordRegexp(['rem']); function indent(_stream, state) { state.currentIndent++; } function dedent(_stream, state) { state.currentIndent--; } // tokenizers function tokenBase(stream, state) { if (stream.eatSpace()) { return 'space'; //return null; } var ch = stream.peek(); // Handle Comments if (ch === "'") { stream.skipToEnd(); return 'comment'; } if (stream.match(comment)){ stream.skipToEnd(); return 'comment'; } // Handle Number Literals if (stream.match(/^((&H)|(&O))?[0-9\.]/i, false) && !stream.match(/^((&H)|(&O))?[0-9\.]+[a-z_]/i, false)) { var floatLiteral = false; // Floats if (stream.match(/^\d*\.\d+/i)) { floatLiteral = true; } else if (stream.match(/^\d+\.\d*/)) { floatLiteral = true; } else if (stream.match(/^\.\d+/)) { floatLiteral = true; } if (floatLiteral) { // Float literals may be "imaginary" stream.eat(/J/i); return 'number'; } // Integers var intLiteral = false; // Hex if (stream.match(/^&H[0-9a-f]+/i)) { intLiteral = true; } // Octal else if (stream.match(/^&O[0-7]+/i)) { intLiteral = true; } // Decimal else if (stream.match(/^[1-9]\d*F?/)) { // Decimal literals may be "imaginary" stream.eat(/J/i); // TODO - Can you have imaginary longs? intLiteral = true; } // Zero by itself with no other piece of number. else if (stream.match(/^0(?![\dx])/i)) { intLiteral = true; } if (intLiteral) { // Integer literals may be "long" stream.eat(/L/i); return 'number'; } } // Handle Strings if (stream.match(stringPrefixes)) { state.tokenize = tokenStringFactory(stream.current()); return state.tokenize(stream, state); } // Handle operators and Delimiters if (stream.match(doubleOperators) || stream.match(singleOperators) || stream.match(wordOperators)) { return 'operator'; } if (stream.match(singleDelimiters)) { return null; } if (stream.match(brakets)) { return "bracket"; } if (stream.match(noIndentWords)) { state.doInCurrentLine = true; return 'keyword'; } if (stream.match(doOpening)) { indent(stream,state); state.doInCurrentLine = true; return 'keyword'; } if (stream.match(opening)) { if (! state.doInCurrentLine) indent(stream,state); else state.doInCurrentLine = false; return 'keyword'; } if (stream.match(middle)) { return 'keyword'; } if (stream.match(doubleClosing)) { dedent(stream,state); dedent(stream,state); return 'keyword'; } if (stream.match(closing)) { if (! state.doInCurrentLine) dedent(stream,state); else state.doInCurrentLine = false; return 'keyword'; } if (stream.match(keywords)) { return 'keyword'; } if (stream.match(atoms)) { return 'atom'; } if (stream.match(known)) { return 'variable-2'; } if (stream.match(builtinFuncs)) { return 'builtin'; } if (stream.match(builtinObjs)){ return 'variable-2'; } if (stream.match(identifiers)) { return 'variable'; } // Handle non-detected items stream.next(); return ERRORCLASS; } function tokenStringFactory(delimiter) { var singleline = delimiter.length == 1; var OUTCLASS = 'string'; return function(stream, state) { while (!stream.eol()) { stream.eatWhile(/[^'"]/); if (stream.match(delimiter)) { state.tokenize = tokenBase; return OUTCLASS; } else { stream.eat(/['"]/); } } if (singleline) { if (parserConf.singleLineStringErrors) { return ERRORCLASS; } else { state.tokenize = tokenBase; } } return OUTCLASS; }; } function tokenLexer(stream, state) { var style = state.tokenize(stream, state); var current = stream.current(); // Handle '.' connected identifiers if (current === '.') { style = state.tokenize(stream, state); current = stream.current(); if (style && (style.substr(0, 8) === 'variable' || style==='builtin' || style==='keyword')){//|| knownWords.indexOf(current.substring(1)) > -1) { if (style === 'builtin' || style === 'keyword') style='variable'; if (knownWords.indexOf(current.substr(1)) > -1) style='variable-2'; return style; } else { return ERRORCLASS; } } return style; } var external = { electricChars:"dDpPtTfFeE ", startState: function() { return { tokenize: tokenBase, lastToken: null, currentIndent: 0, nextLineIndent: 0, doInCurrentLine: false, ignoreKeyword: false }; }, token: function(stream, state) { if (stream.sol()) { state.currentIndent += state.nextLineIndent; state.nextLineIndent = 0; state.doInCurrentLine = 0; } var style = tokenLexer(stream, state); state.lastToken = {style:style, content: stream.current()}; if (style==='space') style=null; return style; }, indent: function(state, textAfter) { var trueText = textAfter.replace(/^\s+|\s+$/g, '') ; if (trueText.match(closing) || trueText.match(doubleClosing) || trueText.match(middle)) return conf.indentUnit*(state.currentIndent-1); if(state.currentIndent < 0) return 0; return state.currentIndent * conf.indentUnit; } }; return external; }); CodeMirror.defineMIME("text/vbscript", "vbscript"); }); PK!C í€  Ofile-manager-advanced/application/library/codemirror/mode/asciiarmor/index.htmlnu„[µü¤ CodeMirror: ASCII Armor (PGP) mode

    ASCII Armor (PGP) mode

    MIME types defined: application/pgp, application/pgp-keys, application/pgp-signature

    PK!¡I×XJ J Rfile-manager-advanced/application/library/codemirror/mode/asciiarmor/asciiarmor.jsnu„[µü¤// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; function errorIfNotEmpty(stream) { var nonWS = stream.match(/^\s*\S/); stream.skipToEnd(); return nonWS ? "error" : null; } CodeMirror.defineMode("asciiarmor", function() { return { token: function(stream, state) { var m; if (state.state == "top") { if (stream.sol() && (m = stream.match(/^-----BEGIN (.*)?-----\s*$/))) { state.state = "headers"; state.type = m[1]; return "tag"; } return errorIfNotEmpty(stream); } else if (state.state == "headers") { if (stream.sol() && stream.match(/^\w+:/)) { state.state = "header"; return "atom"; } else { var result = errorIfNotEmpty(stream); if (result) state.state = "body"; return result; } } else if (state.state == "header") { stream.skipToEnd(); state.state = "headers"; return "string"; } else if (state.state == "body") { if (stream.sol() && (m = stream.match(/^-----END (.*)?-----\s*$/))) { if (m[1] != state.type) return "error"; state.state = "end"; return "tag"; } else { if (stream.eatWhile(/[A-Za-z0-9+\/=]/)) { return null; } else { stream.next(); return "error"; } } } else if (state.state == "end") { return errorIfNotEmpty(stream); } }, blankLine: function(state) { if (state.state == "headers") state.state = "body"; }, startState: function() { return {state: "top", type: null}; } }; }); CodeMirror.defineMIME("application/pgp", "asciiarmor"); CodeMirror.defineMIME("application/pgp-keys", "asciiarmor"); CodeMirror.defineMIME("application/pgp-signature", "asciiarmor"); }); PK!ª÷.{™™Hfile-manager-advanced/application/library/codemirror/mode/tcl/index.htmlnu„[µü¤ CodeMirror: Tcl mode

    Tcl mode

    MIME types defined: text/x-tcl.

    PK!ã Â88Dfile-manager-advanced/application/library/codemirror/mode/tcl/tcl.jsnu„[µü¤// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE //tcl mode by Ford_Lawnmower :: Based on Velocity mode by Steve O'Hara (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMode("tcl", function() { function parseWords(str) { var obj = {}, words = str.split(" "); for (var i = 0; i < words.length; ++i) obj[words[i]] = true; return obj; } var keywords = parseWords("Tcl safe after append array auto_execok auto_import auto_load " + "auto_mkindex auto_mkindex_old auto_qualify auto_reset bgerror " + "binary break catch cd close concat continue dde eof encoding error " + "eval exec exit expr fblocked fconfigure fcopy file fileevent filename " + "filename flush for foreach format gets glob global history http if " + "incr info interp join lappend lindex linsert list llength load lrange " + "lreplace lsearch lset lsort memory msgcat namespace open package parray " + "pid pkg::create pkg_mkIndex proc puts pwd re_syntax read regex regexp " + "registry regsub rename resource return scan seek set socket source split " + "string subst switch tcl_endOfWord tcl_findLibrary tcl_startOfNextWord " + "tcl_wordBreakAfter tcl_startOfPreviousWord tcl_wordBreakBefore tcltest " + "tclvars tell time trace unknown unset update uplevel upvar variable " + "vwait"); var functions = parseWords("if elseif else and not or eq ne in ni for foreach while switch"); var isOperatorChar = /[+\-*&%=<>!?^\/\|]/; function chain(stream, state, f) { state.tokenize = f; return f(stream, state); } function tokenBase(stream, state) { var beforeParams = state.beforeParams; state.beforeParams = false; var ch = stream.next(); if ((ch == '"' || ch == "'") && state.inParams) { return chain(stream, state, tokenString(ch)); } else if (/[\[\]{}\(\),;\.]/.test(ch)) { if (ch == "(" && beforeParams) state.inParams = true; else if (ch == ")") state.inParams = false; return null; } else if (/\d/.test(ch)) { stream.eatWhile(/[\w\.]/); return "number"; } else if (ch == "#") { if (stream.eat("*")) return chain(stream, state, tokenComment); if (ch == "#" && stream.match(/ *\[ *\[/)) return chain(stream, state, tokenUnparsed); stream.skipToEnd(); return "comment"; } else if (ch == '"') { stream.skipTo(/"/); return "comment"; } else if (ch == "$") { stream.eatWhile(/[$_a-z0-9A-Z\.{:]/); stream.eatWhile(/}/); state.beforeParams = true; return "builtin"; } else if (isOperatorChar.test(ch)) { stream.eatWhile(isOperatorChar); return "comment"; } else { stream.eatWhile(/[\w\$_{}\xa1-\uffff]/); var word = stream.current().toLowerCase(); if (keywords && keywords.propertyIsEnumerable(word)) return "keyword"; if (functions && functions.propertyIsEnumerable(word)) { state.beforeParams = true; return "keyword"; } return null; } } function tokenString(quote) { return function(stream, state) { var escaped = false, next, end = false; while ((next = stream.next()) != null) { if (next == quote && !escaped) { end = true; break; } escaped = !escaped && next == "\\"; } if (end) state.tokenize = tokenBase; return "string"; }; } function tokenComment(stream, state) { var maybeEnd = false, ch; while (ch = stream.next()) { if (ch == "#" && maybeEnd) { state.tokenize = tokenBase; break; } maybeEnd = (ch == "*"); } return "comment"; } function tokenUnparsed(stream, state) { var maybeEnd = 0, ch; while (ch = stream.next()) { if (ch == "#" && maybeEnd == 2) { state.tokenize = tokenBase; break; } if (ch == "]") maybeEnd++; else if (ch != " ") maybeEnd = 0; } return "meta"; } return { startState: function() { return { tokenize: tokenBase, beforeParams: false, inParams: false }; }, token: function(stream, state) { if (stream.eatSpace()) return null; return state.tokenize(stream, state); } }; }); CodeMirror.defineMIME("text/x-tcl", "tcl"); }); PK!‹Vâ):):Dfile-manager-advanced/application/library/codemirror/mode/idl/idl.jsnu„[µü¤// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; function wordRegexp(words) { return new RegExp('^((' + words.join(')|(') + '))\\b', 'i'); }; var builtinArray = [ 'a_correlate', 'abs', 'acos', 'adapt_hist_equal', 'alog', 'alog2', 'alog10', 'amoeba', 'annotate', 'app_user_dir', 'app_user_dir_query', 'arg_present', 'array_equal', 'array_indices', 'arrow', 'ascii_template', 'asin', 'assoc', 'atan', 'axis', 'axis', 'bandpass_filter', 'bandreject_filter', 'barplot', 'bar_plot', 'beseli', 'beselj', 'beselk', 'besely', 'beta', 'biginteger', 'bilinear', 'bin_date', 'binary_template', 'bindgen', 'binomial', 'bit_ffs', 'bit_population', 'blas_axpy', 'blk_con', 'boolarr', 'boolean', 'boxplot', 'box_cursor', 'breakpoint', 'broyden', 'bubbleplot', 'butterworth', 'bytarr', 'byte', 'byteorder', 'bytscl', 'c_correlate', 'calendar', 'caldat', 'call_external', 'call_function', 'call_method', 'call_procedure', 'canny', 'catch', 'cd', 'cdf', 'ceil', 'chebyshev', 'check_math', 'chisqr_cvf', 'chisqr_pdf', 'choldc', 'cholsol', 'cindgen', 'cir_3pnt', 'clipboard', 'close', 'clust_wts', 'cluster', 'cluster_tree', 'cmyk_convert', 'code_coverage', 'color_convert', 'color_exchange', 'color_quan', 'color_range_map', 'colorbar', 'colorize_sample', 'colormap_applicable', 'colormap_gradient', 'colormap_rotation', 'colortable', 'comfit', 'command_line_args', 'common', 'compile_opt', 'complex', 'complexarr', 'complexround', 'compute_mesh_normals', 'cond', 'congrid', 'conj', 'constrained_min', 'contour', 'contour', 'convert_coord', 'convol', 'convol_fft', 'coord2to3', 'copy_lun', 'correlate', 'cos', 'cosh', 'cpu', 'cramer', 'createboxplotdata', 'create_cursor', 'create_struct', 'create_view', 'crossp', 'crvlength', 'ct_luminance', 'cti_test', 'cursor', 'curvefit', 'cv_coord', 'cvttobm', 'cw_animate', 'cw_animate_getp', 'cw_animate_load', 'cw_animate_run', 'cw_arcball', 'cw_bgroup', 'cw_clr_index', 'cw_colorsel', 'cw_defroi', 'cw_field', 'cw_filesel', 'cw_form', 'cw_fslider', 'cw_light_editor', 'cw_light_editor_get', 'cw_light_editor_set', 'cw_orient', 'cw_palette_editor', 'cw_palette_editor_get', 'cw_palette_editor_set', 'cw_pdmenu', 'cw_rgbslider', 'cw_tmpl', 'cw_zoom', 'db_exists', 'dblarr', 'dcindgen', 'dcomplex', 'dcomplexarr', 'define_key', 'define_msgblk', 'define_msgblk_from_file', 'defroi', 'defsysv', 'delvar', 'dendro_plot', 'dendrogram', 'deriv', 'derivsig', 'determ', 'device', 'dfpmin', 'diag_matrix', 'dialog_dbconnect', 'dialog_message', 'dialog_pickfile', 'dialog_printersetup', 'dialog_printjob', 'dialog_read_image', 'dialog_write_image', 'dictionary', 'digital_filter', 'dilate', 'dindgen', 'dissolve', 'dist', 'distance_measure', 'dlm_load', 'dlm_register', 'doc_library', 'double', 'draw_roi', 'edge_dog', 'efont', 'eigenql', 'eigenvec', 'ellipse', 'elmhes', 'emboss', 'empty', 'enable_sysrtn', 'eof', 'eos', 'erase', 'erf', 'erfc', 'erfcx', 'erode', 'errorplot', 'errplot', 'estimator_filter', 'execute', 'exit', 'exp', 'expand', 'expand_path', 'expint', 'extrac', 'extract_slice', 'f_cvf', 'f_pdf', 'factorial', 'fft', 'file_basename', 'file_chmod', 'file_copy', 'file_delete', 'file_dirname', 'file_expand_path', 'file_gunzip', 'file_gzip', 'file_info', 'file_lines', 'file_link', 'file_mkdir', 'file_move', 'file_poll_input', 'file_readlink', 'file_same', 'file_search', 'file_tar', 'file_test', 'file_untar', 'file_unzip', 'file_which', 'file_zip', 'filepath', 'findgen', 'finite', 'fix', 'flick', 'float', 'floor', 'flow3', 'fltarr', 'flush', 'format_axis_values', 'forward_function', 'free_lun', 'fstat', 'fulstr', 'funct', 'function', 'fv_test', 'fx_root', 'fz_roots', 'gamma', 'gamma_ct', 'gauss_cvf', 'gauss_pdf', 'gauss_smooth', 'gauss2dfit', 'gaussfit', 'gaussian_function', 'gaussint', 'get_drive_list', 'get_dxf_objects', 'get_kbrd', 'get_login_info', 'get_lun', 'get_screen_size', 'getenv', 'getwindows', 'greg2jul', 'grib', 'grid_input', 'grid_tps', 'grid3', 'griddata', 'gs_iter', 'h_eq_ct', 'h_eq_int', 'hanning', 'hash', 'hdf', 'hdf5', 'heap_free', 'heap_gc', 'heap_nosave', 'heap_refcount', 'heap_save', 'help', 'hilbert', 'hist_2d', 'hist_equal', 'histogram', 'hls', 'hough', 'hqr', 'hsv', 'i18n_multibytetoutf8', 'i18n_multibytetowidechar', 'i18n_utf8tomultibyte', 'i18n_widechartomultibyte', 'ibeta', 'icontour', 'iconvertcoord', 'idelete', 'identity', 'idl_base64', 'idl_container', 'idl_validname', 'idlexbr_assistant', 'idlitsys_createtool', 'idlunit', 'iellipse', 'igamma', 'igetcurrent', 'igetdata', 'igetid', 'igetproperty', 'iimage', 'image', 'image_cont', 'image_statistics', 'image_threshold', 'imaginary', 'imap', 'indgen', 'int_2d', 'int_3d', 'int_tabulated', 'intarr', 'interpol', 'interpolate', 'interval_volume', 'invert', 'ioctl', 'iopen', 'ir_filter', 'iplot', 'ipolygon', 'ipolyline', 'iputdata', 'iregister', 'ireset', 'iresolve', 'irotate', 'isa', 'isave', 'iscale', 'isetcurrent', 'isetproperty', 'ishft', 'isocontour', 'isosurface', 'isurface', 'itext', 'itranslate', 'ivector', 'ivolume', 'izoom', 'journal', 'json_parse', 'json_serialize', 'jul2greg', 'julday', 'keyword_set', 'krig2d', 'kurtosis', 'kw_test', 'l64indgen', 'la_choldc', 'la_cholmprove', 'la_cholsol', 'la_determ', 'la_eigenproblem', 'la_eigenql', 'la_eigenvec', 'la_elmhes', 'la_gm_linear_model', 'la_hqr', 'la_invert', 'la_least_square_equality', 'la_least_squares', 'la_linear_equation', 'la_ludc', 'la_lumprove', 'la_lusol', 'la_svd', 'la_tridc', 'la_trimprove', 'la_triql', 'la_trired', 'la_trisol', 'label_date', 'label_region', 'ladfit', 'laguerre', 'lambda', 'lambdap', 'lambertw', 'laplacian', 'least_squares_filter', 'leefilt', 'legend', 'legendre', 'linbcg', 'lindgen', 'linfit', 'linkimage', 'list', 'll_arc_distance', 'lmfit', 'lmgr', 'lngamma', 'lnp_test', 'loadct', 'locale_get', 'logical_and', 'logical_or', 'logical_true', 'lon64arr', 'lonarr', 'long', 'long64', 'lsode', 'lu_complex', 'ludc', 'lumprove', 'lusol', 'm_correlate', 'machar', 'make_array', 'make_dll', 'make_rt', 'map', 'mapcontinents', 'mapgrid', 'map_2points', 'map_continents', 'map_grid', 'map_image', 'map_patch', 'map_proj_forward', 'map_proj_image', 'map_proj_info', 'map_proj_init', 'map_proj_inverse', 'map_set', 'matrix_multiply', 'matrix_power', 'max', 'md_test', 'mean', 'meanabsdev', 'mean_filter', 'median', 'memory', 'mesh_clip', 'mesh_decimate', 'mesh_issolid', 'mesh_merge', 'mesh_numtriangles', 'mesh_obj', 'mesh_smooth', 'mesh_surfacearea', 'mesh_validate', 'mesh_volume', 'message', 'min', 'min_curve_surf', 'mk_html_help', 'modifyct', 'moment', 'morph_close', 'morph_distance', 'morph_gradient', 'morph_hitormiss', 'morph_open', 'morph_thin', 'morph_tophat', 'multi', 'n_elements', 'n_params', 'n_tags', 'ncdf', 'newton', 'noise_hurl', 'noise_pick', 'noise_scatter', 'noise_slur', 'norm', 'obj_class', 'obj_destroy', 'obj_hasmethod', 'obj_isa', 'obj_new', 'obj_valid', 'objarr', 'on_error', 'on_ioerror', 'online_help', 'openr', 'openu', 'openw', 'oplot', 'oploterr', 'orderedhash', 'p_correlate', 'parse_url', 'particle_trace', 'path_cache', 'path_sep', 'pcomp', 'plot', 'plot3d', 'plot', 'plot_3dbox', 'plot_field', 'ploterr', 'plots', 'polar_contour', 'polar_surface', 'polyfill', 'polyshade', 'pnt_line', 'point_lun', 'polarplot', 'poly', 'poly_2d', 'poly_area', 'poly_fit', 'polyfillv', 'polygon', 'polyline', 'polywarp', 'popd', 'powell', 'pref_commit', 'pref_get', 'pref_set', 'prewitt', 'primes', 'print', 'printf', 'printd', 'pro', 'product', 'profile', 'profiler', 'profiles', 'project_vol', 'ps_show_fonts', 'psafm', 'pseudo', 'ptr_free', 'ptr_new', 'ptr_valid', 'ptrarr', 'pushd', 'qgrid3', 'qhull', 'qromb', 'qromo', 'qsimp', 'query_*', 'query_ascii', 'query_bmp', 'query_csv', 'query_dicom', 'query_gif', 'query_image', 'query_jpeg', 'query_jpeg2000', 'query_mrsid', 'query_pict', 'query_png', 'query_ppm', 'query_srf', 'query_tiff', 'query_video', 'query_wav', 'r_correlate', 'r_test', 'radon', 'randomn', 'randomu', 'ranks', 'rdpix', 'read', 'readf', 'read_ascii', 'read_binary', 'read_bmp', 'read_csv', 'read_dicom', 'read_gif', 'read_image', 'read_interfile', 'read_jpeg', 'read_jpeg2000', 'read_mrsid', 'read_pict', 'read_png', 'read_ppm', 'read_spr', 'read_srf', 'read_sylk', 'read_tiff', 'read_video', 'read_wav', 'read_wave', 'read_x11_bitmap', 'read_xwd', 'reads', 'readu', 'real_part', 'rebin', 'recall_commands', 'recon3', 'reduce_colors', 'reform', 'region_grow', 'register_cursor', 'regress', 'replicate', 'replicate_inplace', 'resolve_all', 'resolve_routine', 'restore', 'retall', 'return', 'reverse', 'rk4', 'roberts', 'rot', 'rotate', 'round', 'routine_filepath', 'routine_info', 'rs_test', 's_test', 'save', 'savgol', 'scale3', 'scale3d', 'scatterplot', 'scatterplot3d', 'scope_level', 'scope_traceback', 'scope_varfetch', 'scope_varname', 'search2d', 'search3d', 'sem_create', 'sem_delete', 'sem_lock', 'sem_release', 'set_plot', 'set_shading', 'setenv', 'sfit', 'shade_surf', 'shade_surf_irr', 'shade_volume', 'shift', 'shift_diff', 'shmdebug', 'shmmap', 'shmunmap', 'shmvar', 'show3', 'showfont', 'signum', 'simplex', 'sin', 'sindgen', 'sinh', 'size', 'skewness', 'skip_lun', 'slicer3', 'slide_image', 'smooth', 'sobel', 'socket', 'sort', 'spawn', 'sph_4pnt', 'sph_scat', 'spher_harm', 'spl_init', 'spl_interp', 'spline', 'spline_p', 'sprsab', 'sprsax', 'sprsin', 'sprstp', 'sqrt', 'standardize', 'stddev', 'stop', 'strarr', 'strcmp', 'strcompress', 'streamline', 'streamline', 'stregex', 'stretch', 'string', 'strjoin', 'strlen', 'strlowcase', 'strmatch', 'strmessage', 'strmid', 'strpos', 'strput', 'strsplit', 'strtrim', 'struct_assign', 'struct_hide', 'strupcase', 'surface', 'surface', 'surfr', 'svdc', 'svdfit', 'svsol', 'swap_endian', 'swap_endian_inplace', 'symbol', 'systime', 't_cvf', 't_pdf', 't3d', 'tag_names', 'tan', 'tanh', 'tek_color', 'temporary', 'terminal_size', 'tetra_clip', 'tetra_surface', 'tetra_volume', 'text', 'thin', 'thread', 'threed', 'tic', 'time_test2', 'timegen', 'timer', 'timestamp', 'timestamptovalues', 'tm_test', 'toc', 'total', 'trace', 'transpose', 'tri_surf', 'triangulate', 'trigrid', 'triql', 'trired', 'trisol', 'truncate_lun', 'ts_coef', 'ts_diff', 'ts_fcast', 'ts_smooth', 'tv', 'tvcrs', 'tvlct', 'tvrd', 'tvscl', 'typename', 'uindgen', 'uint', 'uintarr', 'ul64indgen', 'ulindgen', 'ulon64arr', 'ulonarr', 'ulong', 'ulong64', 'uniq', 'unsharp_mask', 'usersym', 'value_locate', 'variance', 'vector', 'vector_field', 'vel', 'velovect', 'vert_t3d', 'voigt', 'volume', 'voronoi', 'voxel_proj', 'wait', 'warp_tri', 'watershed', 'wdelete', 'wf_draw', 'where', 'widget_base', 'widget_button', 'widget_combobox', 'widget_control', 'widget_displaycontextmenu', 'widget_draw', 'widget_droplist', 'widget_event', 'widget_info', 'widget_label', 'widget_list', 'widget_propertysheet', 'widget_slider', 'widget_tab', 'widget_table', 'widget_text', 'widget_tree', 'widget_tree_move', 'widget_window', 'wiener_filter', 'window', 'window', 'write_bmp', 'write_csv', 'write_gif', 'write_image', 'write_jpeg', 'write_jpeg2000', 'write_nrif', 'write_pict', 'write_png', 'write_ppm', 'write_spr', 'write_srf', 'write_sylk', 'write_tiff', 'write_video', 'write_wav', 'write_wave', 'writeu', 'wset', 'wshow', 'wtn', 'wv_applet', 'wv_cwt', 'wv_cw_wavelet', 'wv_denoise', 'wv_dwt', 'wv_fn_coiflet', 'wv_fn_daubechies', 'wv_fn_gaussian', 'wv_fn_haar', 'wv_fn_morlet', 'wv_fn_paul', 'wv_fn_symlet', 'wv_import_data', 'wv_import_wavelet', 'wv_plot3d_wps', 'wv_plot_multires', 'wv_pwt', 'wv_tool_denoise', 'xbm_edit', 'xdisplayfile', 'xdxf', 'xfont', 'xinteranimate', 'xloadct', 'xmanager', 'xmng_tmpl', 'xmtool', 'xobjview', 'xobjview_rotate', 'xobjview_write_image', 'xpalette', 'xpcolor', 'xplot3d', 'xregistered', 'xroi', 'xsq_test', 'xsurface', 'xvaredit', 'xvolume', 'xvolume_rotate', 'xvolume_write_image', 'xyouts', 'zlib_compress', 'zlib_uncompress', 'zoom', 'zoom_24' ]; var builtins = wordRegexp(builtinArray); var keywordArray = [ 'begin', 'end', 'endcase', 'endfor', 'endwhile', 'endif', 'endrep', 'endforeach', 'break', 'case', 'continue', 'for', 'foreach', 'goto', 'if', 'then', 'else', 'repeat', 'until', 'switch', 'while', 'do', 'pro', 'function' ]; var keywords = wordRegexp(keywordArray); CodeMirror.registerHelper("hintWords", "idl", builtinArray.concat(keywordArray)); var identifiers = new RegExp('^[_a-z\xa1-\uffff][_a-z0-9\xa1-\uffff]*', 'i'); var singleOperators = /[+\-*&=<>\/@#~$]/; var boolOperators = new RegExp('(and|or|eq|lt|le|gt|ge|ne|not)', 'i'); function tokenBase(stream) { // whitespaces if (stream.eatSpace()) return null; // Handle one line Comments if (stream.match(';')) { stream.skipToEnd(); return 'comment'; } // Handle Number Literals if (stream.match(/^[0-9\.+-]/, false)) { if (stream.match(/^[+-]?0x[0-9a-fA-F]+/)) return 'number'; if (stream.match(/^[+-]?\d*\.\d+([EeDd][+-]?\d+)?/)) return 'number'; if (stream.match(/^[+-]?\d+([EeDd][+-]?\d+)?/)) return 'number'; } // Handle Strings if (stream.match(/^"([^"]|(""))*"/)) { return 'string'; } if (stream.match(/^'([^']|(''))*'/)) { return 'string'; } // Handle words if (stream.match(keywords)) { return 'keyword'; } if (stream.match(builtins)) { return 'builtin'; } if (stream.match(identifiers)) { return 'variable'; } if (stream.match(singleOperators) || stream.match(boolOperators)) { return 'operator'; } // Handle non-detected items stream.next(); return null; }; CodeMirror.defineMode('idl', function() { return { token: function(stream) { return tokenBase(stream); } }; }); CodeMirror.defineMIME('text/x-idl', 'idl'); }); PK!MŒ¹:aaHfile-manager-advanced/application/library/codemirror/mode/idl/index.htmlnu„[µü¤ CodeMirror: IDL mode

    IDL mode

    MIME types defined: text/x-idl.

    PK!ˆùÞ¼¼Ffile-manager-advanced/application/library/codemirror/mode/d/index.htmlnu„[µü¤ CodeMirror: D mode

    D mode

    Simple mode that handle D-Syntax (DLang Homepage).

    MIME types defined: text/x-d .

    PK!F[@ŽŽ@file-manager-advanced/application/library/codemirror/mode/d/d.jsnu„[µü¤// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMode("d", function(config, parserConfig) { var indentUnit = config.indentUnit, statementIndentUnit = parserConfig.statementIndentUnit || indentUnit, keywords = parserConfig.keywords || {}, builtin = parserConfig.builtin || {}, blockKeywords = parserConfig.blockKeywords || {}, atoms = parserConfig.atoms || {}, hooks = parserConfig.hooks || {}, multiLineStrings = parserConfig.multiLineStrings; var isOperatorChar = /[+\-*&%=<>!?|\/]/; var curPunc; function tokenBase(stream, state) { var ch = stream.next(); if (hooks[ch]) { var result = hooks[ch](stream, state); if (result !== false) return result; } if (ch == '"' || ch == "'" || ch == "`") { state.tokenize = tokenString(ch); return state.tokenize(stream, state); } if (/[\[\]{}\(\),;\:\.]/.test(ch)) { curPunc = ch; return null; } if (/\d/.test(ch)) { stream.eatWhile(/[\w\.]/); return "number"; } if (ch == "/") { if (stream.eat("+")) { state.tokenize = tokenComment; return tokenNestedComment(stream, state); } if (stream.eat("*")) { state.tokenize = tokenComment; return tokenComment(stream, state); } if (stream.eat("/")) { stream.skipToEnd(); return "comment"; } } if (isOperatorChar.test(ch)) { stream.eatWhile(isOperatorChar); return "operator"; } stream.eatWhile(/[\w\$_\xa1-\uffff]/); var cur = stream.current(); if (keywords.propertyIsEnumerable(cur)) { if (blockKeywords.propertyIsEnumerable(cur)) curPunc = "newstatement"; return "keyword"; } if (builtin.propertyIsEnumerable(cur)) { if (blockKeywords.propertyIsEnumerable(cur)) curPunc = "newstatement"; return "builtin"; } if (atoms.propertyIsEnumerable(cur)) return "atom"; return "variable"; } function tokenString(quote) { return function(stream, state) { var escaped = false, next, end = false; while ((next = stream.next()) != null) { if (next == quote && !escaped) {end = true; break;} escaped = !escaped && next == "\\"; } if (end || !(escaped || multiLineStrings)) state.tokenize = null; return "string"; }; } function tokenComment(stream, state) { var maybeEnd = false, ch; while (ch = stream.next()) { if (ch == "/" && maybeEnd) { state.tokenize = null; break; } maybeEnd = (ch == "*"); } return "comment"; } function tokenNestedComment(stream, state) { var maybeEnd = false, ch; while (ch = stream.next()) { if (ch == "/" && maybeEnd) { state.tokenize = null; break; } maybeEnd = (ch == "+"); } return "comment"; } function Context(indented, column, type, align, prev) { this.indented = indented; this.column = column; this.type = type; this.align = align; this.prev = prev; } function pushContext(state, col, type) { var indent = state.indented; if (state.context && state.context.type == "statement") indent = state.context.indented; return state.context = new Context(indent, col, type, null, state.context); } function popContext(state) { var t = state.context.type; if (t == ")" || t == "]" || t == "}") state.indented = state.context.indented; return state.context = state.context.prev; } // Interface return { startState: function(basecolumn) { return { tokenize: null, context: new Context((basecolumn || 0) - indentUnit, 0, "top", false), indented: 0, startOfLine: true }; }, token: function(stream, state) { var ctx = state.context; if (stream.sol()) { if (ctx.align == null) ctx.align = false; state.indented = stream.indentation(); state.startOfLine = true; } if (stream.eatSpace()) return null; curPunc = null; var style = (state.tokenize || tokenBase)(stream, state); if (style == "comment" || style == "meta") return style; if (ctx.align == null) ctx.align = true; if ((curPunc == ";" || curPunc == ":" || curPunc == ",") && ctx.type == "statement") popContext(state); else if (curPunc == "{") pushContext(state, stream.column(), "}"); else if (curPunc == "[") pushContext(state, stream.column(), "]"); else if (curPunc == "(") pushContext(state, stream.column(), ")"); else if (curPunc == "}") { while (ctx.type == "statement") ctx = popContext(state); if (ctx.type == "}") ctx = popContext(state); while (ctx.type == "statement") ctx = popContext(state); } else if (curPunc == ctx.type) popContext(state); else if (((ctx.type == "}" || ctx.type == "top") && curPunc != ';') || (ctx.type == "statement" && curPunc == "newstatement")) pushContext(state, stream.column(), "statement"); state.startOfLine = false; return style; }, indent: function(state, textAfter) { if (state.tokenize != tokenBase && state.tokenize != null) return CodeMirror.Pass; var ctx = state.context, firstChar = textAfter && textAfter.charAt(0); if (ctx.type == "statement" && firstChar == "}") ctx = ctx.prev; var closing = firstChar == ctx.type; if (ctx.type == "statement") return ctx.indented + (firstChar == "{" ? 0 : statementIndentUnit); else if (ctx.align) return ctx.column + (closing ? 0 : 1); else return ctx.indented + (closing ? 0 : indentUnit); }, electricChars: "{}" }; }); function words(str) { var obj = {}, words = str.split(" "); for (var i = 0; i < words.length; ++i) obj[words[i]] = true; return obj; } var blockKeywords = "body catch class do else enum for foreach foreach_reverse if in interface mixin " + "out scope struct switch try union unittest version while with"; CodeMirror.defineMIME("text/x-d", { name: "d", keywords: words("abstract alias align asm assert auto break case cast cdouble cent cfloat const continue " + "debug default delegate delete deprecated export extern final finally function goto immutable " + "import inout invariant is lazy macro module new nothrow override package pragma private " + "protected public pure ref return shared short static super synchronized template this " + "throw typedef typeid typeof volatile __FILE__ __LINE__ __gshared __traits __vector __parameters " + blockKeywords), blockKeywords: words(blockKeywords), builtin: words("bool byte char creal dchar double float idouble ifloat int ireal long real short ubyte " + "ucent uint ulong ushort wchar wstring void size_t sizediff_t"), atoms: words("exit failure success true false null"), hooks: { "@": function(stream, _state) { stream.eatWhile(/[\w\$_]/); return "meta"; } } }); }); PK!’u*vKfile-manager-advanced/application/library/codemirror/mode/django/index.htmlnu„[µü¤ CodeMirror: Django template mode

    Django template mode

    Mode for HTML with embedded Django template markup.

    MIME types defined: text/x-django

    PK!Rû$œ..Jfile-manager-advanced/application/library/codemirror/mode/django/django.jsnu„[µü¤// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror"), require("../htmlmixed/htmlmixed"), require("../../addon/mode/overlay")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror", "../htmlmixed/htmlmixed", "../../addon/mode/overlay"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMode("django:inner", function() { var keywords = ["block", "endblock", "for", "endfor", "true", "false", "filter", "endfilter", "loop", "none", "self", "super", "if", "elif", "endif", "as", "else", "import", "with", "endwith", "without", "context", "ifequal", "endifequal", "ifnotequal", "endifnotequal", "extends", "include", "load", "comment", "endcomment", "empty", "url", "static", "trans", "blocktrans", "endblocktrans", "now", "regroup", "lorem", "ifchanged", "endifchanged", "firstof", "debug", "cycle", "csrf_token", "autoescape", "endautoescape", "spaceless", "endspaceless", "ssi", "templatetag", "verbatim", "endverbatim", "widthratio"], filters = ["add", "addslashes", "capfirst", "center", "cut", "date", "default", "default_if_none", "dictsort", "dictsortreversed", "divisibleby", "escape", "escapejs", "filesizeformat", "first", "floatformat", "force_escape", "get_digit", "iriencode", "join", "last", "length", "length_is", "linebreaks", "linebreaksbr", "linenumbers", "ljust", "lower", "make_list", "phone2numeric", "pluralize", "pprint", "random", "removetags", "rjust", "safe", "safeseq", "slice", "slugify", "stringformat", "striptags", "time", "timesince", "timeuntil", "title", "truncatechars", "truncatechars_html", "truncatewords", "truncatewords_html", "unordered_list", "upper", "urlencode", "urlize", "urlizetrunc", "wordcount", "wordwrap", "yesno"], operators = ["==", "!=", "<", ">", "<=", ">="], wordOperators = ["in", "not", "or", "and"]; keywords = new RegExp("^\\b(" + keywords.join("|") + ")\\b"); filters = new RegExp("^\\b(" + filters.join("|") + ")\\b"); operators = new RegExp("^\\b(" + operators.join("|") + ")\\b"); wordOperators = new RegExp("^\\b(" + wordOperators.join("|") + ")\\b"); // We have to return "null" instead of null, in order to avoid string // styling as the default, when using Django templates inside HTML // element attributes function tokenBase (stream, state) { // Attempt to identify a variable, template or comment tag respectively if (stream.match("{{")) { state.tokenize = inVariable; return "tag"; } else if (stream.match("{%")) { state.tokenize = inTag; return "tag"; } else if (stream.match("{#")) { state.tokenize = inComment; return "comment"; } // Ignore completely any stream series that do not match the // Django template opening tags. while (stream.next() != null && !stream.match(/\{[{%#]/, false)) {} return null; } // A string can be included in either single or double quotes (this is // the delimiter). Mark everything as a string until the start delimiter // occurs again. function inString (delimiter, previousTokenizer) { return function (stream, state) { if (!state.escapeNext && stream.eat(delimiter)) { state.tokenize = previousTokenizer; } else { if (state.escapeNext) { state.escapeNext = false; } var ch = stream.next(); // Take into account the backslash for escaping characters, such as // the string delimiter. if (ch == "\\") { state.escapeNext = true; } } return "string"; }; } // Apply Django template variable syntax highlighting function inVariable (stream, state) { // Attempt to match a dot that precedes a property if (state.waitDot) { state.waitDot = false; if (stream.peek() != ".") { return "null"; } // Dot followed by a non-word character should be considered an error. if (stream.match(/\.\W+/)) { return "error"; } else if (stream.eat(".")) { state.waitProperty = true; return "null"; } else { throw Error ("Unexpected error while waiting for property."); } } // Attempt to match a pipe that precedes a filter if (state.waitPipe) { state.waitPipe = false; if (stream.peek() != "|") { return "null"; } // Pipe followed by a non-word character should be considered an error. if (stream.match(/\.\W+/)) { return "error"; } else if (stream.eat("|")) { state.waitFilter = true; return "null"; } else { throw Error ("Unexpected error while waiting for filter."); } } // Highlight properties if (state.waitProperty) { state.waitProperty = false; if (stream.match(/\b(\w+)\b/)) { state.waitDot = true; // A property can be followed by another property state.waitPipe = true; // A property can be followed by a filter return "property"; } } // Highlight filters if (state.waitFilter) { state.waitFilter = false; if (stream.match(filters)) { return "variable-2"; } } // Ignore all white spaces if (stream.eatSpace()) { state.waitProperty = false; return "null"; } // Identify numbers if (stream.match(/\b\d+(\.\d+)?\b/)) { return "number"; } // Identify strings if (stream.match("'")) { state.tokenize = inString("'", state.tokenize); return "string"; } else if (stream.match('"')) { state.tokenize = inString('"', state.tokenize); return "string"; } // Attempt to find the variable if (stream.match(/\b(\w+)\b/) && !state.foundVariable) { state.waitDot = true; state.waitPipe = true; // A property can be followed by a filter return "variable"; } // If found closing tag reset if (stream.match("}}")) { state.waitProperty = null; state.waitFilter = null; state.waitDot = null; state.waitPipe = null; state.tokenize = tokenBase; return "tag"; } // If nothing was found, advance to the next character stream.next(); return "null"; } function inTag (stream, state) { // Attempt to match a dot that precedes a property if (state.waitDot) { state.waitDot = false; if (stream.peek() != ".") { return "null"; } // Dot followed by a non-word character should be considered an error. if (stream.match(/\.\W+/)) { return "error"; } else if (stream.eat(".")) { state.waitProperty = true; return "null"; } else { throw Error ("Unexpected error while waiting for property."); } } // Attempt to match a pipe that precedes a filter if (state.waitPipe) { state.waitPipe = false; if (stream.peek() != "|") { return "null"; } // Pipe followed by a non-word character should be considered an error. if (stream.match(/\.\W+/)) { return "error"; } else if (stream.eat("|")) { state.waitFilter = true; return "null"; } else { throw Error ("Unexpected error while waiting for filter."); } } // Highlight properties if (state.waitProperty) { state.waitProperty = false; if (stream.match(/\b(\w+)\b/)) { state.waitDot = true; // A property can be followed by another property state.waitPipe = true; // A property can be followed by a filter return "property"; } } // Highlight filters if (state.waitFilter) { state.waitFilter = false; if (stream.match(filters)) { return "variable-2"; } } // Ignore all white spaces if (stream.eatSpace()) { state.waitProperty = false; return "null"; } // Identify numbers if (stream.match(/\b\d+(\.\d+)?\b/)) { return "number"; } // Identify strings if (stream.match("'")) { state.tokenize = inString("'", state.tokenize); return "string"; } else if (stream.match('"')) { state.tokenize = inString('"', state.tokenize); return "string"; } // Attempt to match an operator if (stream.match(operators)) { return "operator"; } // Attempt to match a word operator if (stream.match(wordOperators)) { return "keyword"; } // Attempt to match a keyword var keywordMatch = stream.match(keywords); if (keywordMatch) { if (keywordMatch[0] == "comment") { state.blockCommentTag = true; } return "keyword"; } // Attempt to match a variable if (stream.match(/\b(\w+)\b/)) { state.waitDot = true; state.waitPipe = true; // A property can be followed by a filter return "variable"; } // If found closing tag reset if (stream.match("%}")) { state.waitProperty = null; state.waitFilter = null; state.waitDot = null; state.waitPipe = null; // If the tag that closes is a block comment tag, we want to mark the // following code as comment, until the tag closes. if (state.blockCommentTag) { state.blockCommentTag = false; // Release the "lock" state.tokenize = inBlockComment; } else { state.tokenize = tokenBase; } return "tag"; } // If nothing was found, advance to the next character stream.next(); return "null"; } // Mark everything as comment inside the tag and the tag itself. function inComment (stream, state) { if (stream.match(/^.*?#\}/)) state.tokenize = tokenBase else stream.skipToEnd() return "comment"; } // Mark everything as a comment until the `blockcomment` tag closes. function inBlockComment (stream, state) { if (stream.match(/\{%\s*endcomment\s*%\}/, false)) { state.tokenize = inTag; stream.match("{%"); return "tag"; } else { stream.next(); return "comment"; } } return { startState: function () { return {tokenize: tokenBase}; }, token: function (stream, state) { return state.tokenize(stream, state); }, blockCommentStart: "{% comment %}", blockCommentEnd: "{% endcomment %}" }; }); CodeMirror.defineMode("django", function(config) { var htmlBase = CodeMirror.getMode(config, "text/html"); var djangoInner = CodeMirror.getMode(config, "django:inner"); return CodeMirror.overlayMode(htmlBase, djangoInner); }); CodeMirror.defineMIME("text/x-django", "django"); }); PK!ãuóS  Dfile-manager-advanced/application/library/codemirror/mode/vue/vue.jsnu„[µü¤// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function (mod) { "use strict"; if (typeof exports === "object" && typeof module === "object") {// CommonJS mod(require("../../lib/codemirror"), require("../../addon/mode/overlay"), require("../xml/xml"), require("../javascript/javascript"), require("../coffeescript/coffeescript"), require("../css/css"), require("../sass/sass"), require("../stylus/stylus"), require("../pug/pug"), require("../handlebars/handlebars")); } else if (typeof define === "function" && define.amd) { // AMD define(["../../lib/codemirror", "../../addon/mode/overlay", "../xml/xml", "../javascript/javascript", "../coffeescript/coffeescript", "../css/css", "../sass/sass", "../stylus/stylus", "../pug/pug", "../handlebars/handlebars"], mod); } else { // Plain browser env mod(CodeMirror); } })(function (CodeMirror) { var tagLanguages = { script: [ ["lang", /coffee(script)?/, "coffeescript"], ["type", /^(?:text|application)\/(?:x-)?coffee(?:script)?$/, "coffeescript"] ], style: [ ["lang", /^stylus$/i, "stylus"], ["lang", /^sass$/i, "sass"], ["type", /^(text\/)?(x-)?styl(us)?$/i, "stylus"], ["type", /^text\/sass/i, "sass"] ], template: [ ["lang", /^vue-template$/i, "vue"], ["lang", /^pug$/i, "pug"], ["lang", /^handlebars$/i, "handlebars"], ["type", /^(text\/)?(x-)?pug$/i, "pug"], ["type", /^text\/x-handlebars-template$/i, "handlebars"], [null, null, "vue-template"] ] }; CodeMirror.defineMode("vue-template", function (config, parserConfig) { var mustacheOverlay = { token: function (stream) { if (stream.match(/^\{\{.*?\}\}/)) return "meta mustache"; while (stream.next() && !stream.match("{{", false)) {} return null; } }; return CodeMirror.overlayMode(CodeMirror.getMode(config, parserConfig.backdrop || "text/html"), mustacheOverlay); }); CodeMirror.defineMode("vue", function (config) { return CodeMirror.getMode(config, {name: "htmlmixed", tags: tagLanguages}); }, "htmlmixed", "xml", "javascript", "coffeescript", "css", "sass", "stylus", "pug", "handlebars"); CodeMirror.defineMIME("script/x-vue", "vue"); }); PK!†ÝáHfile-manager-advanced/application/library/codemirror/mode/vue/index.htmlnu„[µü¤ CodeMirror: Vue.js mode

    Vue.js mode

    MIME types defined: text/x-vue

    PK!†æÏŽººNfile-manager-advanced/application/library/codemirror/mode/velocity/velocity.jsnu„[µü¤// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMode("velocity", function() { function parseWords(str) { var obj = {}, words = str.split(" "); for (var i = 0; i < words.length; ++i) obj[words[i]] = true; return obj; } var keywords = parseWords("#end #else #break #stop #[[ #]] " + "#{end} #{else} #{break} #{stop}"); var functions = parseWords("#if #elseif #foreach #set #include #parse #macro #define #evaluate " + "#{if} #{elseif} #{foreach} #{set} #{include} #{parse} #{macro} #{define} #{evaluate}"); var specials = parseWords("$foreach.count $foreach.hasNext $foreach.first $foreach.last $foreach.topmost $foreach.parent.count $foreach.parent.hasNext $foreach.parent.first $foreach.parent.last $foreach.parent $velocityCount $!bodyContent $bodyContent"); var isOperatorChar = /[+\-*&%=<>!?:\/|]/; function chain(stream, state, f) { state.tokenize = f; return f(stream, state); } function tokenBase(stream, state) { var beforeParams = state.beforeParams; state.beforeParams = false; var ch = stream.next(); // start of unparsed string? if ((ch == "'") && !state.inString && state.inParams) { state.lastTokenWasBuiltin = false; return chain(stream, state, tokenString(ch)); } // start of parsed string? else if ((ch == '"')) { state.lastTokenWasBuiltin = false; if (state.inString) { state.inString = false; return "string"; } else if (state.inParams) return chain(stream, state, tokenString(ch)); } // is it one of the special signs []{}().,;? Seperator? else if (/[\[\]{}\(\),;\.]/.test(ch)) { if (ch == "(" && beforeParams) state.inParams = true; else if (ch == ")") { state.inParams = false; state.lastTokenWasBuiltin = true; } return null; } // start of a number value? else if (/\d/.test(ch)) { state.lastTokenWasBuiltin = false; stream.eatWhile(/[\w\.]/); return "number"; } // multi line comment? else if (ch == "#" && stream.eat("*")) { state.lastTokenWasBuiltin = false; return chain(stream, state, tokenComment); } // unparsed content? else if (ch == "#" && stream.match(/ *\[ *\[/)) { state.lastTokenWasBuiltin = false; return chain(stream, state, tokenUnparsed); } // single line comment? else if (ch == "#" && stream.eat("#")) { state.lastTokenWasBuiltin = false; stream.skipToEnd(); return "comment"; } // variable? else if (ch == "$") { stream.eatWhile(/[\w\d\$_\.{}]/); // is it one of the specials? if (specials && specials.propertyIsEnumerable(stream.current())) { return "keyword"; } else { state.lastTokenWasBuiltin = true; state.beforeParams = true; return "builtin"; } } // is it a operator? else if (isOperatorChar.test(ch)) { state.lastTokenWasBuiltin = false; stream.eatWhile(isOperatorChar); return "operator"; } else { // get the whole word stream.eatWhile(/[\w\$_{}@]/); var word = stream.current(); // is it one of the listed keywords? if (keywords && keywords.propertyIsEnumerable(word)) return "keyword"; // is it one of the listed functions? if (functions && functions.propertyIsEnumerable(word) || (stream.current().match(/^#@?[a-z0-9_]+ *$/i) && stream.peek()=="(") && !(functions && functions.propertyIsEnumerable(word.toLowerCase()))) { state.beforeParams = true; state.lastTokenWasBuiltin = false; return "keyword"; } if (state.inString) { state.lastTokenWasBuiltin = false; return "string"; } if (stream.pos > word.length && stream.string.charAt(stream.pos-word.length-1)=="." && state.lastTokenWasBuiltin) return "builtin"; // default: just a "word" state.lastTokenWasBuiltin = false; return null; } } function tokenString(quote) { return function(stream, state) { var escaped = false, next, end = false; while ((next = stream.next()) != null) { if ((next == quote) && !escaped) { end = true; break; } if (quote=='"' && stream.peek() == '$' && !escaped) { state.inString = true; end = true; break; } escaped = !escaped && next == "\\"; } if (end) state.tokenize = tokenBase; return "string"; }; } function tokenComment(stream, state) { var maybeEnd = false, ch; while (ch = stream.next()) { if (ch == "#" && maybeEnd) { state.tokenize = tokenBase; break; } maybeEnd = (ch == "*"); } return "comment"; } function tokenUnparsed(stream, state) { var maybeEnd = 0, ch; while (ch = stream.next()) { if (ch == "#" && maybeEnd == 2) { state.tokenize = tokenBase; break; } if (ch == "]") maybeEnd++; else if (ch != " ") maybeEnd = 0; } return "meta"; } // Interface return { startState: function() { return { tokenize: tokenBase, beforeParams: false, inParams: false, inString: false, lastTokenWasBuiltin: false }; }, token: function(stream, state) { if (stream.eatSpace()) return null; return state.tokenize(stream, state); }, blockCommentStart: "#*", blockCommentEnd: "*#", lineComment: "##", fold: "velocity" }; }); CodeMirror.defineMIME("text/velocity", "velocity"); }); PK!ïB™Rä ä Mfile-manager-advanced/application/library/codemirror/mode/velocity/index.htmlnu„[µü¤ CodeMirror: Velocity mode

    Velocity mode

    MIME types defined: text/velocity.

    PK!W=n Nfile-manager-advanced/application/library/codemirror/mode/brainfuck/index.htmlnu„[µü¤ CodeMirror: Brainfuck mode

    Brainfuck mode

    A mode for Brainfuck

    MIME types defined: text/x-brainfuck

    PK!°w ~~Pfile-manager-advanced/application/library/codemirror/mode/brainfuck/brainfuck.jsnu„[µü¤// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE // Brainfuck mode created by Michael Kaminsky https://github.com/mkaminsky11 (function(mod) { if (typeof exports == "object" && typeof module == "object") mod(require("../../lib/codemirror")) else if (typeof define == "function" && define.amd) define(["../../lib/codemirror"], mod) else mod(CodeMirror) })(function(CodeMirror) { "use strict" var reserve = "><+-.,[]".split(""); /* comments can be either: placed behind lines +++ this is a comment where reserved characters cannot be used or in a loop [ this is ok to use [ ] and stuff ] or preceded by # */ CodeMirror.defineMode("brainfuck", function() { return { startState: function() { return { commentLine: false, left: 0, right: 0, commentLoop: false } }, token: function(stream, state) { if (stream.eatSpace()) return null if(stream.sol()){ state.commentLine = false; } var ch = stream.next().toString(); if(reserve.indexOf(ch) !== -1){ if(state.commentLine === true){ if(stream.eol()){ state.commentLine = false; } return "comment"; } if(ch === "]" || ch === "["){ if(ch === "["){ state.left++; } else{ state.right++; } return "bracket"; } else if(ch === "+" || ch === "-"){ return "keyword"; } else if(ch === "<" || ch === ">"){ return "atom"; } else if(ch === "." || ch === ","){ return "def"; } } else{ state.commentLine = true; if(stream.eol()){ state.commentLine = false; } return "comment"; } if(stream.eol()){ state.commentLine = false; } } }; }); CodeMirror.defineMIME("text/x-brainfuck","brainfuck") }); PK!ƒ™ûP¥$¥$Ufile-manager-advanced/application/library/codemirror/mode/haskell-literate/index.htmlnu„[µü¤ CodeMirror: Haskell-literate mode

    Haskell literate mode

    MIME types defined: text/x-literate-haskell.

    Parser configuration parameters recognized: base to set the base mode (defaults to "haskell").

    PK!ö%WUnn^file-manager-advanced/application/library/codemirror/mode/haskell-literate/haskell-literate.jsnu„[µü¤// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function (mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror"), require("../haskell/haskell")) else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror", "../haskell/haskell"], mod) else // Plain browser env mod(CodeMirror) })(function (CodeMirror) { "use strict" CodeMirror.defineMode("haskell-literate", function (config, parserConfig) { var baseMode = CodeMirror.getMode(config, (parserConfig && parserConfig.base) || "haskell") return { startState: function () { return { inCode: false, baseState: CodeMirror.startState(baseMode) } }, token: function (stream, state) { if (stream.sol()) { if (state.inCode = stream.eat(">")) return "meta" } if (state.inCode) { return baseMode.token(stream, state.baseState) } else { stream.skipToEnd() return "comment" } }, innerMode: function (state) { return state.inCode ? {state: state.baseState, mode: baseMode} : null } } }, "haskell") CodeMirror.defineMIME("text/x-literate-haskell", "haskell-literate") }); PK!xüH·ÛÛOfile-manager-advanced/application/library/codemirror/mode/dockerfile/index.htmlnu„[µü¤ CodeMirror: Dockerfile mode

    Dockerfile mode

    Dockerfile syntax highlighting for CodeMirror. Depends on the simplemode addon.

    MIME types defined: text/x-dockerfile

    PK!…«3­­Rfile-manager-advanced/application/library/codemirror/mode/dockerfile/dockerfile.jsnu„[µü¤// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror"), require("../../addon/mode/simple")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror", "../../addon/mode/simple"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; // Collect all Dockerfile directives var instructions = ["from", "maintainer", "run", "cmd", "expose", "env", "add", "copy", "entrypoint", "volume", "user", "workdir", "onbuild"], instructionRegex = "(" + instructions.join('|') + ")", instructionOnlyLine = new RegExp(instructionRegex + "\\s*$", "i"), instructionWithArguments = new RegExp(instructionRegex + "(\\s+)", "i"); CodeMirror.defineSimpleMode("dockerfile", { start: [ // Block comment: This is a line starting with a comment { regex: /#.*$/, token: "comment" }, // Highlight an instruction without any arguments (for convenience) { regex: instructionOnlyLine, token: "variable-2" }, // Highlight an instruction followed by arguments { regex: instructionWithArguments, token: ["variable-2", null], next: "arguments" }, { regex: /./, token: null } ], arguments: [ { // Line comment without instruction arguments is an error regex: /#.*$/, token: "error", next: "start" }, { regex: /[^#]+\\$/, token: null }, { // Match everything except for the inline comment regex: /[^#]+/, token: null, next: "start" }, { regex: /$/, token: null, next: "start" }, // Fail safe return to start { token: null, next: "start" } ], meta: { lineComment: "#" } }); CodeMirror.defineMIME("text/x-dockerfile", "dockerfile"); }); PK!YÐjù ù Hfile-manager-advanced/application/library/codemirror/mode/pegjs/pegjs.jsnu„[µü¤// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror"), require("../javascript/javascript")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror", "../javascript/javascript"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMode("pegjs", function (config) { var jsMode = CodeMirror.getMode(config, "javascript"); function identifier(stream) { return stream.match(/^[a-zA-Z_][a-zA-Z0-9_]*/); } return { startState: function () { return { inString: false, stringType: null, inComment: false, inCharacterClass: false, braced: 0, lhs: true, localState: null }; }, token: function (stream, state) { if (stream) //check for state changes if (!state.inString && !state.inComment && ((stream.peek() == '"') || (stream.peek() == "'"))) { state.stringType = stream.peek(); stream.next(); // Skip quote state.inString = true; // Update state } if (!state.inString && !state.inComment && stream.match(/^\/\*/)) { state.inComment = true; } //return state if (state.inString) { while (state.inString && !stream.eol()) { if (stream.peek() === state.stringType) { stream.next(); // Skip quote state.inString = false; // Clear flag } else if (stream.peek() === '\\') { stream.next(); stream.next(); } else { stream.match(/^.[^\\\"\']*/); } } return state.lhs ? "property string" : "string"; // Token style } else if (state.inComment) { while (state.inComment && !stream.eol()) { if (stream.match(/\*\//)) { state.inComment = false; // Clear flag } else { stream.match(/^.[^\*]*/); } } return "comment"; } else if (state.inCharacterClass) { while (state.inCharacterClass && !stream.eol()) { if (!(stream.match(/^[^\]\\]+/) || stream.match(/^\\./))) { state.inCharacterClass = false; } } } else if (stream.peek() === '[') { stream.next(); state.inCharacterClass = true; return 'bracket'; } else if (stream.match(/^\/\//)) { stream.skipToEnd(); return "comment"; } else if (state.braced || stream.peek() === '{') { if (state.localState === null) { state.localState = CodeMirror.startState(jsMode); } var token = jsMode.token(stream, state.localState); var text = stream.current(); if (!token) { for (var i = 0; i < text.length; i++) { if (text[i] === '{') { state.braced++; } else if (text[i] === '}') { state.braced--; } }; } return token; } else if (identifier(stream)) { if (stream.peek() === ':') { return 'variable'; } return 'variable-2'; } else if (['[', ']', '(', ')'].indexOf(stream.peek()) != -1) { stream.next(); return 'bracket'; } else if (!stream.eatSpace()) { stream.next(); } return null; } }; }, "javascript"); }); PK!Æ9 ¬bbJfile-manager-advanced/application/library/codemirror/mode/pegjs/index.htmlnu„[µü¤ CodeMirror: PEG.js Mode

    PEG.js Mode

    The PEG.js Mode

    Created by Forbes Lindesay.

    PK!û³ô!×8×8Afile-manager-advanced/application/library/codemirror/mode/meta.jsnu„[µü¤// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.modeInfo = [ {name: "APL", mime: "text/apl", mode: "apl", ext: ["dyalog", "apl"]}, {name: "PGP", mimes: ["application/pgp", "application/pgp-keys", "application/pgp-signature"], mode: "asciiarmor", ext: ["pgp"]}, {name: "ASN.1", mime: "text/x-ttcn-asn", mode: "asn.1", ext: ["asn", "asn1"]}, {name: "Asterisk", mime: "text/x-asterisk", mode: "asterisk", file: /^extensions\.conf$/i}, {name: "Brainfuck", mime: "text/x-brainfuck", mode: "brainfuck", ext: ["b", "bf"]}, {name: "C", mime: "text/x-csrc", mode: "clike", ext: ["c", "h"]}, {name: "C++", mime: "text/x-c++src", mode: "clike", ext: ["cpp", "c++", "cc", "cxx", "hpp", "h++", "hh", "hxx"], alias: ["cpp"]}, {name: "Cobol", mime: "text/x-cobol", mode: "cobol", ext: ["cob", "cpy"]}, {name: "C#", mime: "text/x-csharp", mode: "clike", ext: ["cs"], alias: ["csharp"]}, {name: "Clojure", mime: "text/x-clojure", mode: "clojure", ext: ["clj", "cljc", "cljx"]}, {name: "ClojureScript", mime: "text/x-clojurescript", mode: "clojure", ext: ["cljs"]}, {name: "Closure Stylesheets (GSS)", mime: "text/x-gss", mode: "css", ext: ["gss"]}, {name: "CMake", mime: "text/x-cmake", mode: "cmake", ext: ["cmake", "cmake.in"], file: /^CMakeLists.txt$/}, {name: "CoffeeScript", mime: "text/x-coffeescript", mode: "coffeescript", ext: ["coffee"], alias: ["coffee", "coffee-script"]}, {name: "Common Lisp", mime: "text/x-common-lisp", mode: "commonlisp", ext: ["cl", "lisp", "el"], alias: ["lisp"]}, {name: "Cypher", mime: "application/x-cypher-query", mode: "cypher", ext: ["cyp", "cypher"]}, {name: "Cython", mime: "text/x-cython", mode: "python", ext: ["pyx", "pxd", "pxi"]}, {name: "Crystal", mime: "text/x-crystal", mode: "crystal", ext: ["cr"]}, {name: "CSS", mime: "text/css", mode: "css", ext: ["css"]}, {name: "CQL", mime: "text/x-cassandra", mode: "sql", ext: ["cql"]}, {name: "D", mime: "text/x-d", mode: "d", ext: ["d"]}, {name: "Dart", mimes: ["application/dart", "text/x-dart"], mode: "dart", ext: ["dart"]}, {name: "diff", mime: "text/x-diff", mode: "diff", ext: ["diff", "patch"]}, {name: "Django", mime: "text/x-django", mode: "django"}, {name: "Dockerfile", mime: "text/x-dockerfile", mode: "dockerfile", file: /^Dockerfile$/}, {name: "DTD", mime: "application/xml-dtd", mode: "dtd", ext: ["dtd"]}, {name: "Dylan", mime: "text/x-dylan", mode: "dylan", ext: ["dylan", "dyl", "intr"]}, {name: "EBNF", mime: "text/x-ebnf", mode: "ebnf"}, {name: "ECL", mime: "text/x-ecl", mode: "ecl", ext: ["ecl"]}, {name: "edn", mime: "application/edn", mode: "clojure", ext: ["edn"]}, {name: "Eiffel", mime: "text/x-eiffel", mode: "eiffel", ext: ["e"]}, {name: "Elm", mime: "text/x-elm", mode: "elm", ext: ["elm"]}, {name: "Embedded Javascript", mime: "application/x-ejs", mode: "htmlembedded", ext: ["ejs"]}, {name: "Embedded Ruby", mime: "application/x-erb", mode: "htmlembedded", ext: ["erb"]}, {name: "Erlang", mime: "text/x-erlang", mode: "erlang", ext: ["erl"]}, {name: "Factor", mime: "text/x-factor", mode: "factor", ext: ["factor"]}, {name: "FCL", mime: "text/x-fcl", mode: "fcl"}, {name: "Forth", mime: "text/x-forth", mode: "forth", ext: ["forth", "fth", "4th"]}, {name: "Fortran", mime: "text/x-fortran", mode: "fortran", ext: ["f", "for", "f77", "f90"]}, {name: "F#", mime: "text/x-fsharp", mode: "mllike", ext: ["fs"], alias: ["fsharp"]}, {name: "Gas", mime: "text/x-gas", mode: "gas", ext: ["s"]}, {name: "Gherkin", mime: "text/x-feature", mode: "gherkin", ext: ["feature"]}, {name: "GitHub Flavored Markdown", mime: "text/x-gfm", mode: "gfm", file: /^(readme|contributing|history).md$/i}, {name: "Go", mime: "text/x-go", mode: "go", ext: ["go"]}, {name: "Groovy", mime: "text/x-groovy", mode: "groovy", ext: ["groovy", "gradle"]}, {name: "HAML", mime: "text/x-haml", mode: "haml", ext: ["haml"]}, {name: "Haskell", mime: "text/x-haskell", mode: "haskell", ext: ["hs"]}, {name: "Haskell (Literate)", mime: "text/x-literate-haskell", mode: "haskell-literate", ext: ["lhs"]}, {name: "Haxe", mime: "text/x-haxe", mode: "haxe", ext: ["hx"]}, {name: "HXML", mime: "text/x-hxml", mode: "haxe", ext: ["hxml"]}, {name: "ASP.NET", mime: "application/x-aspx", mode: "htmlembedded", ext: ["aspx"], alias: ["asp", "aspx"]}, {name: "HTML", mime: "text/html", mode: "htmlmixed", ext: ["html", "htm"], alias: ["xhtml"]}, {name: "HTTP", mime: "message/http", mode: "http"}, {name: "IDL", mime: "text/x-idl", mode: "idl", ext: ["pro"]}, {name: "Pug", mime: "text/x-pug", mode: "pug", ext: ["jade", "pug"], alias: ["jade"]}, {name: "Java", mime: "text/x-java", mode: "clike", ext: ["java"]}, {name: "Java Server Pages", mime: "application/x-jsp", mode: "htmlembedded", ext: ["jsp"], alias: ["jsp"]}, {name: "JavaScript", mimes: ["text/javascript", "text/ecmascript", "application/javascript", "application/x-javascript", "application/ecmascript"], mode: "javascript", ext: ["js"], alias: ["ecmascript", "js", "node"]}, {name: "JSON", mimes: ["application/json", "application/x-json"], mode: "javascript", ext: ["json", "map"], alias: ["json5"]}, {name: "JSON-LD", mime: "application/ld+json", mode: "javascript", ext: ["jsonld"], alias: ["jsonld"]}, {name: "JSX", mime: "text/jsx", mode: "jsx", ext: ["jsx"]}, {name: "Jinja2", mime: "null", mode: "jinja2"}, {name: "Julia", mime: "text/x-julia", mode: "julia", ext: ["jl"]}, {name: "Kotlin", mime: "text/x-kotlin", mode: "clike", ext: ["kt"]}, {name: "LESS", mime: "text/x-less", mode: "css", ext: ["less"]}, {name: "LiveScript", mime: "text/x-livescript", mode: "livescript", ext: ["ls"], alias: ["ls"]}, {name: "Lua", mime: "text/x-lua", mode: "lua", ext: ["lua"]}, {name: "Markdown", mime: "text/x-markdown", mode: "markdown", ext: ["markdown", "md", "mkd"]}, {name: "mIRC", mime: "text/mirc", mode: "mirc"}, {name: "MariaDB SQL", mime: "text/x-mariadb", mode: "sql"}, {name: "Mathematica", mime: "text/x-mathematica", mode: "mathematica", ext: ["m", "nb"]}, {name: "Modelica", mime: "text/x-modelica", mode: "modelica", ext: ["mo"]}, {name: "MUMPS", mime: "text/x-mumps", mode: "mumps", ext: ["mps"]}, {name: "MS SQL", mime: "text/x-mssql", mode: "sql"}, {name: "mbox", mime: "application/mbox", mode: "mbox", ext: ["mbox"]}, {name: "MySQL", mime: "text/x-mysql", mode: "sql"}, {name: "Nginx", mime: "text/x-nginx-conf", mode: "nginx", file: /nginx.*\.conf$/i}, {name: "NSIS", mime: "text/x-nsis", mode: "nsis", ext: ["nsh", "nsi"]}, {name: "NTriples", mime: "text/n-triples", mode: "ntriples", ext: ["nt"]}, {name: "Objective C", mime: "text/x-objectivec", mode: "clike", ext: ["m", "mm"], alias: ["objective-c", "objc"]}, {name: "OCaml", mime: "text/x-ocaml", mode: "mllike", ext: ["ml", "mli", "mll", "mly"]}, {name: "Octave", mime: "text/x-octave", mode: "octave", ext: ["m"]}, {name: "Oz", mime: "text/x-oz", mode: "oz", ext: ["oz"]}, {name: "Pascal", mime: "text/x-pascal", mode: "pascal", ext: ["p", "pas"]}, {name: "PEG.js", mime: "null", mode: "pegjs", ext: ["jsonld"]}, {name: "Perl", mime: "text/x-perl", mode: "perl", ext: ["pl", "pm"]}, {name: "PHP", mime: "application/x-httpd-php", mode: "php", ext: ["php", "php3", "php4", "php5", "phtml"]}, {name: "Pig", mime: "text/x-pig", mode: "pig", ext: ["pig"]}, {name: "Plain Text", mime: "text/plain", mode: "null", ext: ["txt", "text", "conf", "def", "list", "log"]}, {name: "PLSQL", mime: "text/x-plsql", mode: "sql", ext: ["pls"]}, {name: "PowerShell", mime: "application/x-powershell", mode: "powershell", ext: ["ps1", "psd1", "psm1"]}, {name: "Properties files", mime: "text/x-properties", mode: "properties", ext: ["properties", "ini", "in"], alias: ["ini", "properties"]}, {name: "ProtoBuf", mime: "text/x-protobuf", mode: "protobuf", ext: ["proto"]}, {name: "Python", mime: "text/x-python", mode: "python", ext: ["BUILD", "bzl", "py", "pyw"], file: /^(BUCK|BUILD)$/}, {name: "Puppet", mime: "text/x-puppet", mode: "puppet", ext: ["pp"]}, {name: "Q", mime: "text/x-q", mode: "q", ext: ["q"]}, {name: "R", mime: "text/x-rsrc", mode: "r", ext: ["r"], alias: ["rscript"]}, {name: "reStructuredText", mime: "text/x-rst", mode: "rst", ext: ["rst"], alias: ["rst"]}, {name: "RPM Changes", mime: "text/x-rpm-changes", mode: "rpm"}, {name: "RPM Spec", mime: "text/x-rpm-spec", mode: "rpm", ext: ["spec"]}, {name: "Ruby", mime: "text/x-ruby", mode: "ruby", ext: ["rb"], alias: ["jruby", "macruby", "rake", "rb", "rbx"]}, {name: "Rust", mime: "text/x-rustsrc", mode: "rust", ext: ["rs"]}, {name: "SAS", mime: "text/x-sas", mode: "sas", ext: ["sas"]}, {name: "Sass", mime: "text/x-sass", mode: "sass", ext: ["sass"]}, {name: "Scala", mime: "text/x-scala", mode: "clike", ext: ["scala"]}, {name: "Scheme", mime: "text/x-scheme", mode: "scheme", ext: ["scm", "ss"]}, {name: "SCSS", mime: "text/x-scss", mode: "css", ext: ["scss"]}, {name: "Shell", mime: "text/x-sh", mode: "shell", ext: ["sh", "ksh", "bash"], alias: ["bash", "sh", "zsh"], file: /^PKGBUILD$/}, {name: "Sieve", mime: "application/sieve", mode: "sieve", ext: ["siv", "sieve"]}, {name: "Slim", mimes: ["text/x-slim", "application/x-slim"], mode: "slim", ext: ["slim"]}, {name: "Smalltalk", mime: "text/x-stsrc", mode: "smalltalk", ext: ["st"]}, {name: "Smarty", mime: "text/x-smarty", mode: "smarty", ext: ["tpl"]}, {name: "Solr", mime: "text/x-solr", mode: "solr"}, {name: "Soy", mime: "text/x-soy", mode: "soy", ext: ["soy"], alias: ["closure template"]}, {name: "SPARQL", mime: "application/sparql-query", mode: "sparql", ext: ["rq", "sparql"], alias: ["sparul"]}, {name: "Spreadsheet", mime: "text/x-spreadsheet", mode: "spreadsheet", alias: ["excel", "formula"]}, {name: "SQL", mime: "text/x-sql", mode: "sql", ext: ["sql"]}, {name: "Squirrel", mime: "text/x-squirrel", mode: "clike", ext: ["nut"]}, {name: "Swift", mime: "text/x-swift", mode: "swift", ext: ["swift"]}, {name: "sTeX", mime: "text/x-stex", mode: "stex"}, {name: "LaTeX", mime: "text/x-latex", mode: "stex", ext: ["text", "ltx"], alias: ["tex"]}, {name: "SystemVerilog", mime: "text/x-systemverilog", mode: "verilog", ext: ["v"]}, {name: "Tcl", mime: "text/x-tcl", mode: "tcl", ext: ["tcl"]}, {name: "Textile", mime: "text/x-textile", mode: "textile", ext: ["textile"]}, {name: "TiddlyWiki ", mime: "text/x-tiddlywiki", mode: "tiddlywiki"}, {name: "Tiki wiki", mime: "text/tiki", mode: "tiki"}, {name: "TOML", mime: "text/x-toml", mode: "toml", ext: ["toml"]}, {name: "Tornado", mime: "text/x-tornado", mode: "tornado"}, {name: "troff", mime: "text/troff", mode: "troff", ext: ["1", "2", "3", "4", "5", "6", "7", "8", "9"]}, {name: "TTCN", mime: "text/x-ttcn", mode: "ttcn", ext: ["ttcn", "ttcn3", "ttcnpp"]}, {name: "TTCN_CFG", mime: "text/x-ttcn-cfg", mode: "ttcn-cfg", ext: ["cfg"]}, {name: "Turtle", mime: "text/turtle", mode: "turtle", ext: ["ttl"]}, {name: "TypeScript", mime: "application/typescript", mode: "javascript", ext: ["ts"], alias: ["ts"]}, {name: "Twig", mime: "text/x-twig", mode: "twig"}, {name: "Web IDL", mime: "text/x-webidl", mode: "webidl", ext: ["webidl"]}, {name: "VB.NET", mime: "text/x-vb", mode: "vb", ext: ["vb"]}, {name: "VBScript", mime: "text/vbscript", mode: "vbscript", ext: ["vbs"]}, {name: "Velocity", mime: "text/velocity", mode: "velocity", ext: ["vtl"]}, {name: "Verilog", mime: "text/x-verilog", mode: "verilog", ext: ["v"]}, {name: "VHDL", mime: "text/x-vhdl", mode: "vhdl", ext: ["vhd", "vhdl"]}, {name: "XML", mimes: ["application/xml", "text/xml"], mode: "xml", ext: ["xml", "xsl", "xsd"], alias: ["rss", "wsdl", "xsd"]}, {name: "XQuery", mime: "application/xquery", mode: "xquery", ext: ["xy", "xquery"]}, {name: "Yacas", mime: "text/x-yacas", mode: "yacas", ext: ["ys"]}, {name: "YAML", mime: "text/x-yaml", mode: "yaml", ext: ["yaml", "yml"], alias: ["yml"]}, {name: "Z80", mime: "text/x-z80", mode: "z80", ext: ["z80"]}, {name: "mscgen", mime: "text/x-mscgen", mode: "mscgen", ext: ["mscgen", "mscin", "msc"]}, {name: "xu", mime: "text/x-xu", mode: "mscgen", ext: ["xu"]}, {name: "msgenny", mime: "text/x-msgenny", mode: "mscgen", ext: ["msgenny"]} ]; // Ensure all modes have a mime property for backwards compatibility for (var i = 0; i < CodeMirror.modeInfo.length; i++) { var info = CodeMirror.modeInfo[i]; if (info.mimes) info.mime = info.mimes[0]; } CodeMirror.findModeByMIME = function(mime) { mime = mime.toLowerCase(); for (var i = 0; i < CodeMirror.modeInfo.length; i++) { var info = CodeMirror.modeInfo[i]; if (info.mime == mime) return info; if (info.mimes) for (var j = 0; j < info.mimes.length; j++) if (info.mimes[j] == mime) return info; } }; CodeMirror.findModeByExtension = function(ext) { for (var i = 0; i < CodeMirror.modeInfo.length; i++) { var info = CodeMirror.modeInfo[i]; if (info.ext) for (var j = 0; j < info.ext.length; j++) if (info.ext[j] == ext) return info; } }; CodeMirror.findModeByFileName = function(filename) { for (var i = 0; i < CodeMirror.modeInfo.length; i++) { var info = CodeMirror.modeInfo[i]; if (info.file && info.file.test(filename)) return info; } var dot = filename.lastIndexOf("."); var ext = dot > -1 && filename.substring(dot + 1, filename.length); if (ext) return CodeMirror.findModeByExtension(ext); }; CodeMirror.findModeByName = function(name) { name = name.toLowerCase(); for (var i = 0; i < CodeMirror.modeInfo.length; i++) { var info = CodeMirror.modeInfo[i]; if (info.name.toLowerCase() == name) return info; if (info.alias) for (var j = 0; j < info.alias.length; j++) if (info.alias[j].toLowerCase() == name) return info; } }; }); PK!ݺºç½½Hfile-manager-advanced/application/library/codemirror/mode/sieve/sieve.jsnu„[µü¤// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMode("sieve", function(config) { function words(str) { var obj = {}, words = str.split(" "); for (var i = 0; i < words.length; ++i) obj[words[i]] = true; return obj; } var keywords = words("if elsif else stop require"); var atoms = words("true false not"); var indentUnit = config.indentUnit; function tokenBase(stream, state) { var ch = stream.next(); if (ch == "/" && stream.eat("*")) { state.tokenize = tokenCComment; return tokenCComment(stream, state); } if (ch === '#') { stream.skipToEnd(); return "comment"; } if (ch == "\"") { state.tokenize = tokenString(ch); return state.tokenize(stream, state); } if (ch == "(") { state._indent.push("("); // add virtual angel wings so that editor behaves... // ...more sane incase of broken brackets state._indent.push("{"); return null; } if (ch === "{") { state._indent.push("{"); return null; } if (ch == ")") { state._indent.pop(); state._indent.pop(); } if (ch === "}") { state._indent.pop(); return null; } if (ch == ",") return null; if (ch == ";") return null; if (/[{}\(\),;]/.test(ch)) return null; // 1*DIGIT "K" / "M" / "G" if (/\d/.test(ch)) { stream.eatWhile(/[\d]/); stream.eat(/[KkMmGg]/); return "number"; } // ":" (ALPHA / "_") *(ALPHA / DIGIT / "_") if (ch == ":") { stream.eatWhile(/[a-zA-Z_]/); stream.eatWhile(/[a-zA-Z0-9_]/); return "operator"; } stream.eatWhile(/\w/); var cur = stream.current(); // "text:" *(SP / HTAB) (hash-comment / CRLF) // *(multiline-literal / multiline-dotstart) // "." CRLF if ((cur == "text") && stream.eat(":")) { state.tokenize = tokenMultiLineString; return "string"; } if (keywords.propertyIsEnumerable(cur)) return "keyword"; if (atoms.propertyIsEnumerable(cur)) return "atom"; return null; } function tokenMultiLineString(stream, state) { state._multiLineString = true; // the first line is special it may contain a comment if (!stream.sol()) { stream.eatSpace(); if (stream.peek() == "#") { stream.skipToEnd(); return "comment"; } stream.skipToEnd(); return "string"; } if ((stream.next() == ".") && (stream.eol())) { state._multiLineString = false; state.tokenize = tokenBase; } return "string"; } function tokenCComment(stream, state) { var maybeEnd = false, ch; while ((ch = stream.next()) != null) { if (maybeEnd && ch == "/") { state.tokenize = tokenBase; break; } maybeEnd = (ch == "*"); } return "comment"; } function tokenString(quote) { return function(stream, state) { var escaped = false, ch; while ((ch = stream.next()) != null) { if (ch == quote && !escaped) break; escaped = !escaped && ch == "\\"; } if (!escaped) state.tokenize = tokenBase; return "string"; }; } return { startState: function(base) { return {tokenize: tokenBase, baseIndent: base || 0, _indent: []}; }, token: function(stream, state) { if (stream.eatSpace()) return null; return (state.tokenize || tokenBase)(stream, state);; }, indent: function(state, _textAfter) { var length = state._indent.length; if (_textAfter && (_textAfter[0] == "}")) length--; if (length <0) length = 0; return length * indentUnit; }, electricChars: "}" }; }); CodeMirror.defineMIME("application/sieve", "sieve"); }); PK!æë®²  Jfile-manager-advanced/application/library/codemirror/mode/sieve/index.htmlnu„[µü¤ CodeMirror: Sieve (RFC5228) mode

    Sieve (RFC5228) mode

    MIME types defined: application/sieve.

    PK!é3ÜÅÅFfile-manager-advanced/application/library/codemirror/mode/ebnf/ebnf.jsnu„[µü¤// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMode("ebnf", function (config) { var commentType = {slash: 0, parenthesis: 1}; var stateType = {comment: 0, _string: 1, characterClass: 2}; var bracesMode = null; if (config.bracesMode) bracesMode = CodeMirror.getMode(config, config.bracesMode); return { startState: function () { return { stringType: null, commentType: null, braced: 0, lhs: true, localState: null, stack: [], inDefinition: false }; }, token: function (stream, state) { if (!stream) return; //check for state changes if (state.stack.length === 0) { //strings if ((stream.peek() == '"') || (stream.peek() == "'")) { state.stringType = stream.peek(); stream.next(); // Skip quote state.stack.unshift(stateType._string); } else if (stream.match(/^\/\*/)) { //comments starting with /* state.stack.unshift(stateType.comment); state.commentType = commentType.slash; } else if (stream.match(/^\(\*/)) { //comments starting with (* state.stack.unshift(stateType.comment); state.commentType = commentType.parenthesis; } } //return state //stack has switch (state.stack[0]) { case stateType._string: while (state.stack[0] === stateType._string && !stream.eol()) { if (stream.peek() === state.stringType) { stream.next(); // Skip quote state.stack.shift(); // Clear flag } else if (stream.peek() === "\\") { stream.next(); stream.next(); } else { stream.match(/^.[^\\\"\']*/); } } return state.lhs ? "property string" : "string"; // Token style case stateType.comment: while (state.stack[0] === stateType.comment && !stream.eol()) { if (state.commentType === commentType.slash && stream.match(/\*\//)) { state.stack.shift(); // Clear flag state.commentType = null; } else if (state.commentType === commentType.parenthesis && stream.match(/\*\)/)) { state.stack.shift(); // Clear flag state.commentType = null; } else { stream.match(/^.[^\*]*/); } } return "comment"; case stateType.characterClass: while (state.stack[0] === stateType.characterClass && !stream.eol()) { if (!(stream.match(/^[^\]\\]+/) || stream.match(/^\\./))) { state.stack.shift(); } } return "operator"; } var peek = stream.peek(); if (bracesMode !== null && (state.braced || peek === "{")) { if (state.localState === null) state.localState = CodeMirror.startState(bracesMode); var token = bracesMode.token(stream, state.localState), text = stream.current(); if (!token) { for (var i = 0; i < text.length; i++) { if (text[i] === "{") { if (state.braced === 0) { token = "matchingbracket"; } state.braced++; } else if (text[i] === "}") { state.braced--; if (state.braced === 0) { token = "matchingbracket"; } } } } return token; } //no stack switch (peek) { case "[": stream.next(); state.stack.unshift(stateType.characterClass); return "bracket"; case ":": case "|": case ";": stream.next(); return "operator"; case "%": if (stream.match("%%")) { return "header"; } else if (stream.match(/[%][A-Za-z]+/)) { return "keyword"; } else if (stream.match(/[%][}]/)) { return "matchingbracket"; } break; case "/": if (stream.match(/[\/][A-Za-z]+/)) { return "keyword"; } case "\\": if (stream.match(/[\][a-z]+/)) { return "string-2"; } case ".": if (stream.match(".")) { return "atom"; } case "*": case "-": case "+": case "^": if (stream.match(peek)) { return "atom"; } case "$": if (stream.match("$$")) { return "builtin"; } else if (stream.match(/[$][0-9]+/)) { return "variable-3"; } case "<": if (stream.match(/<<[a-zA-Z_]+>>/)) { return "builtin"; } } if (stream.match(/^\/\//)) { stream.skipToEnd(); return "comment"; } else if (stream.match(/return/)) { return "operator"; } else if (stream.match(/^[a-zA-Z_][a-zA-Z0-9_]*/)) { if (stream.match(/(?=[\(.])/)) { return "variable"; } else if (stream.match(/(?=[\s\n]*[:=])/)) { return "def"; } return "variable-2"; } else if (["[", "]", "(", ")"].indexOf(stream.peek()) != -1) { stream.next(); return "bracket"; } else if (!stream.eatSpace()) { stream.next(); } return null; } }; }); CodeMirror.defineMIME("text/x-ebnf", "ebnf"); }); PK!©|H·’ ’ Ifile-manager-advanced/application/library/codemirror/mode/ebnf/index.htmlnu„[µü¤ CodeMirror: EBNF Mode

    EBNF Mode (bracesMode setting = "javascript")

    The EBNF Mode

    Created by Robert Plummer

    PK!d¶ïppNfile-manager-advanced/application/library/codemirror/mode/smalltalk/index.htmlnu„[µü¤ CodeMirror: Smalltalk mode

    Smalltalk mode

    Simple Smalltalk mode.

    MIME types defined: text/x-stsrc.

    PK!¯ÌØ¿¿Pfile-manager-advanced/application/library/codemirror/mode/smalltalk/smalltalk.jsnu„[µü¤// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMode('smalltalk', function(config) { var specialChars = /[+\-\/\\*~<>=@%|&?!.,:;^]/; var keywords = /true|false|nil|self|super|thisContext/; var Context = function(tokenizer, parent) { this.next = tokenizer; this.parent = parent; }; var Token = function(name, context, eos) { this.name = name; this.context = context; this.eos = eos; }; var State = function() { this.context = new Context(next, null); this.expectVariable = true; this.indentation = 0; this.userIndentationDelta = 0; }; State.prototype.userIndent = function(indentation) { this.userIndentationDelta = indentation > 0 ? (indentation / config.indentUnit - this.indentation) : 0; }; var next = function(stream, context, state) { var token = new Token(null, context, false); var aChar = stream.next(); if (aChar === '"') { token = nextComment(stream, new Context(nextComment, context)); } else if (aChar === '\'') { token = nextString(stream, new Context(nextString, context)); } else if (aChar === '#') { if (stream.peek() === '\'') { stream.next(); token = nextSymbol(stream, new Context(nextSymbol, context)); } else { if (stream.eatWhile(/[^\s.{}\[\]()]/)) token.name = 'string-2'; else token.name = 'meta'; } } else if (aChar === '$') { if (stream.next() === '<') { stream.eatWhile(/[^\s>]/); stream.next(); } token.name = 'string-2'; } else if (aChar === '|' && state.expectVariable) { token.context = new Context(nextTemporaries, context); } else if (/[\[\]{}()]/.test(aChar)) { token.name = 'bracket'; token.eos = /[\[{(]/.test(aChar); if (aChar === '[') { state.indentation++; } else if (aChar === ']') { state.indentation = Math.max(0, state.indentation - 1); } } else if (specialChars.test(aChar)) { stream.eatWhile(specialChars); token.name = 'operator'; token.eos = aChar !== ';'; // ; cascaded message expression } else if (/\d/.test(aChar)) { stream.eatWhile(/[\w\d]/); token.name = 'number'; } else if (/[\w_]/.test(aChar)) { stream.eatWhile(/[\w\d_]/); token.name = state.expectVariable ? (keywords.test(stream.current()) ? 'keyword' : 'variable') : null; } else { token.eos = state.expectVariable; } return token; }; var nextComment = function(stream, context) { stream.eatWhile(/[^"]/); return new Token('comment', stream.eat('"') ? context.parent : context, true); }; var nextString = function(stream, context) { stream.eatWhile(/[^']/); return new Token('string', stream.eat('\'') ? context.parent : context, false); }; var nextSymbol = function(stream, context) { stream.eatWhile(/[^']/); return new Token('string-2', stream.eat('\'') ? context.parent : context, false); }; var nextTemporaries = function(stream, context) { var token = new Token(null, context, false); var aChar = stream.next(); if (aChar === '|') { token.context = context.parent; token.eos = true; } else { stream.eatWhile(/[^|]/); token.name = 'variable'; } return token; }; return { startState: function() { return new State; }, token: function(stream, state) { state.userIndent(stream.indentation()); if (stream.eatSpace()) { return null; } var token = state.context.next(stream, state.context, state); state.context = token.context; state.expectVariable = token.eos; return token.name; }, blankLine: function(state) { state.userIndent(0); }, indent: function(state, textAfter) { var i = state.context.next === next && textAfter && textAfter.charAt(0) === ']' ? -1 : state.userIndentationDelta; return (state.indentation + i) * config.indentUnit; }, electricChars: ']' }; }); CodeMirror.defineMIME('text/x-stsrc', {name: 'smalltalk'}); }); PK!,²ÞÙ””Ofile-manager-advanced/application/library/codemirror/mode/handlebars/index.htmlnu„[µü¤ CodeMirror: Handlebars mode

    Handlebars

    Handlebars syntax highlighting for CodeMirror.

    MIME types defined: text/x-handlebars-template

    Supported options: base to set the mode to wrap. For example, use

    mode: {name: "handlebars", base: "text/html"}

    to highlight an HTML template.

    PK!½×â{||Rfile-manager-advanced/application/library/codemirror/mode/handlebars/handlebars.jsnu„[µü¤// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror"), require("../../addon/mode/simple"), require("../../addon/mode/multiplex")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror", "../../addon/mode/simple", "../../addon/mode/multiplex"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineSimpleMode("handlebars-tags", { start: [ { regex: /\{\{!--/, push: "dash_comment", token: "comment" }, { regex: /\{\{!/, push: "comment", token: "comment" }, { regex: /\{\{/, push: "handlebars", token: "tag" } ], handlebars: [ { regex: /\}\}/, pop: true, token: "tag" }, // Double and single quotes { regex: /"(?:[^\\"]|\\.)*"?/, token: "string" }, { regex: /'(?:[^\\']|\\.)*'?/, token: "string" }, // Handlebars keywords { regex: />|[#\/]([A-Za-z_]\w*)/, token: "keyword" }, { regex: /(?:else|this)\b/, token: "keyword" }, // Numeral { regex: /\d+/i, token: "number" }, // Atoms like = and . { regex: /=|~|@|true|false/, token: "atom" }, // Paths { regex: /(?:\.\.\/)*(?:[A-Za-z_][\w\.]*)+/, token: "variable-2" } ], dash_comment: [ { regex: /--\}\}/, pop: true, token: "comment" }, // Commented code { regex: /./, token: "comment"} ], comment: [ { regex: /\}\}/, pop: true, token: "comment" }, { regex: /./, token: "comment" } ] }); CodeMirror.defineMode("handlebars", function(config, parserConfig) { var handlebars = CodeMirror.getMode(config, "handlebars-tags"); if (!parserConfig || !parserConfig.base) return handlebars; return CodeMirror.multiplexingMode( CodeMirror.getMode(config, parserConfig.base), {open: "{{", close: "}}", mode: handlebars, parseDelimiters: true} ); }); CodeMirror.defineMIME("text/x-handlebars-template", "handlebars"); }); PK! ú¤üüIfile-manager-advanced/application/library/codemirror/mode/rust/index.htmlnu„[µü¤ CodeMirror: Rust mode

    Rust mode

    MIME types defined: text/x-rustsrc.

    PK!gŒ�¸Ñ Ñ Ffile-manager-advanced/application/library/codemirror/mode/rust/rust.jsnu„[µü¤// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror"), require("../../addon/mode/simple")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror", "../../addon/mode/simple"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineSimpleMode("rust",{ start: [ // string and byte string {regex: /b?"/, token: "string", next: "string"}, // raw string and raw byte string {regex: /b?r"/, token: "string", next: "string_raw"}, {regex: /b?r#+"/, token: "string", next: "string_raw_hash"}, // character {regex: /'(?:[^'\\]|\\(?:[nrt0'"]|x[\da-fA-F]{2}|u\{[\da-fA-F]{6}\}))'/, token: "string-2"}, // byte {regex: /b'(?:[^']|\\(?:['\\nrt0]|x[\da-fA-F]{2}))'/, token: "string-2"}, {regex: /(?:(?:[0-9][0-9_]*)(?:(?:[Ee][+-]?[0-9_]+)|\.[0-9_]+(?:[Ee][+-]?[0-9_]+)?)(?:f32|f64)?)|(?:0(?:b[01_]+|(?:o[0-7_]+)|(?:x[0-9a-fA-F_]+))|(?:[0-9][0-9_]*))(?:u8|u16|u32|u64|i8|i16|i32|i64|isize|usize)?/, token: "number"}, {regex: /(let(?:\s+mut)?|fn|enum|mod|struct|type)(\s+)([a-zA-Z_][a-zA-Z0-9_]*)/, token: ["keyword", null, "def"]}, {regex: /(?:abstract|alignof|as|box|break|continue|const|crate|do|else|enum|extern|fn|for|final|if|impl|in|loop|macro|match|mod|move|offsetof|override|priv|proc|pub|pure|ref|return|self|sizeof|static|struct|super|trait|type|typeof|unsafe|unsized|use|virtual|where|while|yield)\b/, token: "keyword"}, {regex: /\b(?:Self|isize|usize|char|bool|u8|u16|u32|u64|f16|f32|f64|i8|i16|i32|i64|str|Option)\b/, token: "atom"}, {regex: /\b(?:true|false|Some|None|Ok|Err)\b/, token: "builtin"}, {regex: /\b(fn)(\s+)([a-zA-Z_][a-zA-Z0-9_]*)/, token: ["keyword", null ,"def"]}, {regex: /#!?\[.*\]/, token: "meta"}, {regex: /\/\/.*/, token: "comment"}, {regex: /\/\*/, token: "comment", next: "comment"}, {regex: /[-+\/*=<>!]+/, token: "operator"}, {regex: /[a-zA-Z_]\w*!/,token: "variable-3"}, {regex: /[a-zA-Z_]\w*/, token: "variable"}, {regex: /[\{\[\(]/, indent: true}, {regex: /[\}\]\)]/, dedent: true} ], string: [ {regex: /"/, token: "string", next: "start"}, {regex: /(?:[^\\"]|\\(?:.|$))*/, token: "string"} ], string_raw: [ {regex: /"/, token: "string", next: "start"}, {regex: /[^"]*/, token: "string"} ], string_raw_hash: [ {regex: /"#+/, token: "string", next: "start"}, {regex: /(?:[^"]|"(?!#))*/, token: "string"} ], comment: [ {regex: /.*?\*\//, token: "comment", next: "start"}, {regex: /.*/, token: "comment"} ], meta: { dontIndentStates: ["comment"], electricInput: /^\s*\}$/, blockCommentStart: "/*", blockCommentEnd: "*/", lineComment: "//", fold: "brace" } }); CodeMirror.defineMIME("text/x-rustsrc", "rust"); }); PK!sÙ£3ààFfile-manager-advanced/application/library/codemirror/mode/rust/test.jsnu„[µü¤// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function() { var mode = CodeMirror.getMode({indentUnit: 4}, "rust"); function MT(name) {test.mode(name, mode, Array.prototype.slice.call(arguments, 1));} MT('integer_test', '[number 123i32]', '[number 123u32]', '[number 123_u32]', '[number 0xff_u8]', '[number 0o70_i16]', '[number 0b1111_1111_1001_0000_i32]', '[number 0usize]'); MT('float_test', '[number 123.0f64]', '[number 0.1f64]', '[number 0.1f32]', '[number 12E+99_f64]'); MT('string-literals-test', '[string "foo"]', '[string r"foo"]', '[string "\\"foo\\""]', '[string r#""foo""#]', '[string "foo #\\"# bar"]', '[string b"foo"]', '[string br"foo"]', '[string b"\\"foo\\""]', '[string br#""foo""#]', '[string br##"foo #" bar"##]', "[string-2 'h']", "[string-2 b'h']"); })(); PK!ýý¤ Hfile-manager-advanced/application/library/codemirror/mode/dtd/index.htmlnu„[µü¤ CodeMirror: DTD mode

    DTD mode

    MIME types defined: application/xml-dtd.

    PK!†(ÆÅÎÎDfile-manager-advanced/application/library/codemirror/mode/dtd/dtd.jsnu„[µü¤// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE /* DTD mode Ported to CodeMirror by Peter Kroon Report bugs/issues here: https://github.com/codemirror/CodeMirror/issues GitHub: @peterkroon */ (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMode("dtd", function(config) { var indentUnit = config.indentUnit, type; function ret(style, tp) {type = tp; return style;} function tokenBase(stream, state) { var ch = stream.next(); if (ch == "<" && stream.eat("!") ) { if (stream.eatWhile(/[\-]/)) { state.tokenize = tokenSGMLComment; return tokenSGMLComment(stream, state); } else if (stream.eatWhile(/[\w]/)) return ret("keyword", "doindent"); } else if (ch == "<" && stream.eat("?")) { //xml declaration state.tokenize = inBlock("meta", "?>"); return ret("meta", ch); } else if (ch == "#" && stream.eatWhile(/[\w]/)) return ret("atom", "tag"); else if (ch == "|") return ret("keyword", "seperator"); else if (ch.match(/[\(\)\[\]\-\.,\+\?>]/)) return ret(null, ch);//if(ch === ">") return ret(null, "endtag"); else else if (ch.match(/[\[\]]/)) return ret("rule", ch); else if (ch == "\"" || ch == "'") { state.tokenize = tokenString(ch); return state.tokenize(stream, state); } else if (stream.eatWhile(/[a-zA-Z\?\+\d]/)) { var sc = stream.current(); if( sc.substr(sc.length-1,sc.length).match(/\?|\+/) !== null )stream.backUp(1); return ret("tag", "tag"); } else if (ch == "%" || ch == "*" ) return ret("number", "number"); else { stream.eatWhile(/[\w\\\-_%.{,]/); return ret(null, null); } } function tokenSGMLComment(stream, state) { var dashes = 0, ch; while ((ch = stream.next()) != null) { if (dashes >= 2 && ch == ">") { state.tokenize = tokenBase; break; } dashes = (ch == "-") ? dashes + 1 : 0; } return ret("comment", "comment"); } function tokenString(quote) { return function(stream, state) { var escaped = false, ch; while ((ch = stream.next()) != null) { if (ch == quote && !escaped) { state.tokenize = tokenBase; break; } escaped = !escaped && ch == "\\"; } return ret("string", "tag"); }; } function inBlock(style, terminator) { return function(stream, state) { while (!stream.eol()) { if (stream.match(terminator)) { state.tokenize = tokenBase; break; } stream.next(); } return style; }; } return { startState: function(base) { return {tokenize: tokenBase, baseIndent: base || 0, stack: []}; }, token: function(stream, state) { if (stream.eatSpace()) return null; var style = state.tokenize(stream, state); var context = state.stack[state.stack.length-1]; if (stream.current() == "[" || type === "doindent" || type == "[") state.stack.push("rule"); else if (type === "endtag") state.stack[state.stack.length-1] = "endtag"; else if (stream.current() == "]" || type == "]" || (type == ">" && context == "rule")) state.stack.pop(); else if (type == "[") state.stack.push("["); return style; }, indent: function(state, textAfter) { var n = state.stack.length; if( textAfter.match(/\]\s+|\]/) )n=n-1; else if(textAfter.substr(textAfter.length-1, textAfter.length) === ">"){ if(textAfter.substr(0,1) === "<") {} else if( type == "doindent" && textAfter.length > 1 ) {} else if( type == "doindent")n--; else if( type == ">" && textAfter.length > 1) {} else if( type == "tag" && textAfter !== ">") {} else if( type == "tag" && state.stack[state.stack.length-1] == "rule")n--; else if( type == "tag")n++; else if( textAfter === ">" && state.stack[state.stack.length-1] == "rule" && type === ">")n--; else if( textAfter === ">" && state.stack[state.stack.length-1] == "rule") {} else if( textAfter.substr(0,1) !== "<" && textAfter.substr(0,1) === ">" )n=n-1; else if( textAfter === ">") {} else n=n-1; //over rule them all if(type == null || type == "]")n--; } return state.baseIndent + n * indentUnit; }, electricChars: "]>" }; }); CodeMirror.defineMIME("application/xml-dtd", "dtd"); }); PK!D[þ/TTKfile-manager-advanced/application/library/codemirror/mode/mllike/index.htmlnu„[µü¤ CodeMirror: ML-like mode

    OCaml mode

    F# mode

    MIME types defined: text/x-ocaml (OCaml) and text/x-fsharp (F#).

    PK!»Q”NššJfile-manager-advanced/application/library/codemirror/mode/mllike/mllike.jsnu„[µü¤// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMode('mllike', function(_config, parserConfig) { var words = { 'let': 'keyword', 'rec': 'keyword', 'in': 'keyword', 'of': 'keyword', 'and': 'keyword', 'if': 'keyword', 'then': 'keyword', 'else': 'keyword', 'for': 'keyword', 'to': 'keyword', 'while': 'keyword', 'do': 'keyword', 'done': 'keyword', 'fun': 'keyword', 'function': 'keyword', 'val': 'keyword', 'type': 'keyword', 'mutable': 'keyword', 'match': 'keyword', 'with': 'keyword', 'try': 'keyword', 'open': 'builtin', 'ignore': 'builtin', 'begin': 'keyword', 'end': 'keyword' }; var extraWords = parserConfig.extraWords || {}; for (var prop in extraWords) { if (extraWords.hasOwnProperty(prop)) { words[prop] = parserConfig.extraWords[prop]; } } function tokenBase(stream, state) { var ch = stream.next(); if (ch === '"') { state.tokenize = tokenString; return state.tokenize(stream, state); } if (ch === '(') { if (stream.eat('*')) { state.commentLevel++; state.tokenize = tokenComment; return state.tokenize(stream, state); } } if (ch === '~') { stream.eatWhile(/\w/); return 'variable-2'; } if (ch === '`') { stream.eatWhile(/\w/); return 'quote'; } if (ch === '/' && parserConfig.slashComments && stream.eat('/')) { stream.skipToEnd(); return 'comment'; } if (/\d/.test(ch)) { stream.eatWhile(/[\d]/); if (stream.eat('.')) { stream.eatWhile(/[\d]/); } return 'number'; } if ( /[+\-*&%=<>!?|]/.test(ch)) { return 'operator'; } stream.eatWhile(/\w/); var cur = stream.current(); return words.hasOwnProperty(cur) ? words[cur] : 'variable'; } function tokenString(stream, state) { var next, end = false, escaped = false; while ((next = stream.next()) != null) { if (next === '"' && !escaped) { end = true; break; } escaped = !escaped && next === '\\'; } if (end && !escaped) { state.tokenize = tokenBase; } return 'string'; }; function tokenComment(stream, state) { var prev, next; while(state.commentLevel > 0 && (next = stream.next()) != null) { if (prev === '(' && next === '*') state.commentLevel++; if (prev === '*' && next === ')') state.commentLevel--; prev = next; } if (state.commentLevel <= 0) { state.tokenize = tokenBase; } return 'comment'; } return { startState: function() {return {tokenize: tokenBase, commentLevel: 0};}, token: function(stream, state) { if (stream.eatSpace()) return null; return state.tokenize(stream, state); }, blockCommentStart: "(*", blockCommentEnd: "*)", lineComment: parserConfig.slashComments ? "//" : null }; }); CodeMirror.defineMIME('text/x-ocaml', { name: 'mllike', extraWords: { 'succ': 'keyword', 'trace': 'builtin', 'exit': 'builtin', 'print_string': 'builtin', 'print_endline': 'builtin', 'true': 'atom', 'false': 'atom', 'raise': 'keyword' } }); CodeMirror.defineMIME('text/x-fsharp', { name: 'mllike', extraWords: { 'abstract': 'keyword', 'as': 'keyword', 'assert': 'keyword', 'base': 'keyword', 'class': 'keyword', 'default': 'keyword', 'delegate': 'keyword', 'downcast': 'keyword', 'downto': 'keyword', 'elif': 'keyword', 'exception': 'keyword', 'extern': 'keyword', 'finally': 'keyword', 'global': 'keyword', 'inherit': 'keyword', 'inline': 'keyword', 'interface': 'keyword', 'internal': 'keyword', 'lazy': 'keyword', 'let!': 'keyword', 'member' : 'keyword', 'module': 'keyword', 'namespace': 'keyword', 'new': 'keyword', 'null': 'keyword', 'override': 'keyword', 'private': 'keyword', 'public': 'keyword', 'return': 'keyword', 'return!': 'keyword', 'select': 'keyword', 'static': 'keyword', 'struct': 'keyword', 'upcast': 'keyword', 'use': 'keyword', 'use!': 'keyword', 'val': 'keyword', 'when': 'keyword', 'yield': 'keyword', 'yield!': 'keyword', 'List': 'builtin', 'Seq': 'builtin', 'Map': 'builtin', 'Set': 'builtin', 'int': 'builtin', 'string': 'builtin', 'raise': 'builtin', 'failwith': 'builtin', 'not': 'builtin', 'true': 'builtin', 'false': 'builtin' }, slashComments: true }); }); PK!©\bÌÌIfile-manager-advanced/application/library/codemirror/mode/css/gss_test.jsnu„[µü¤// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function() { "use strict"; var mode = CodeMirror.getMode({indentUnit: 2}, "text/x-gss"); function MT(name) { test.mode(name, mode, Array.prototype.slice.call(arguments, 1), "gss"); } MT("atComponent", "[def @component] {", "[tag foo] {", " [property color]: [keyword black];", "}", "}"); })(); PK!�§Ë]‘]‘Dfile-manager-advanced/application/library/codemirror/mode/css/css.jsnu„[µü¤// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMode("css", function(config, parserConfig) { var inline = parserConfig.inline if (!parserConfig.propertyKeywords) parserConfig = CodeMirror.resolveMode("text/css"); var indentUnit = config.indentUnit, tokenHooks = parserConfig.tokenHooks, documentTypes = parserConfig.documentTypes || {}, mediaTypes = parserConfig.mediaTypes || {}, mediaFeatures = parserConfig.mediaFeatures || {}, mediaValueKeywords = parserConfig.mediaValueKeywords || {}, propertyKeywords = parserConfig.propertyKeywords || {}, nonStandardPropertyKeywords = parserConfig.nonStandardPropertyKeywords || {}, fontProperties = parserConfig.fontProperties || {}, counterDescriptors = parserConfig.counterDescriptors || {}, colorKeywords = parserConfig.colorKeywords || {}, valueKeywords = parserConfig.valueKeywords || {}, allowNested = parserConfig.allowNested, supportsAtComponent = parserConfig.supportsAtComponent === true; var type, override; function ret(style, tp) { type = tp; return style; } // Tokenizers function tokenBase(stream, state) { var ch = stream.next(); if (tokenHooks[ch]) { var result = tokenHooks[ch](stream, state); if (result !== false) return result; } if (ch == "@") { stream.eatWhile(/[\w\\\-]/); return ret("def", stream.current()); } else if (ch == "=" || (ch == "~" || ch == "|") && stream.eat("=")) { return ret(null, "compare"); } else if (ch == "\"" || ch == "'") { state.tokenize = tokenString(ch); return state.tokenize(stream, state); } else if (ch == "#") { stream.eatWhile(/[\w\\\-]/); return ret("atom", "hash"); } else if (ch == "!") { stream.match(/^\s*\w*/); return ret("keyword", "important"); } else if (/\d/.test(ch) || ch == "." && stream.eat(/\d/)) { stream.eatWhile(/[\w.%]/); return ret("number", "unit"); } else if (ch === "-") { if (/[\d.]/.test(stream.peek())) { stream.eatWhile(/[\w.%]/); return ret("number", "unit"); } else if (stream.match(/^-[\w\\\-]+/)) { stream.eatWhile(/[\w\\\-]/); if (stream.match(/^\s*:/, false)) return ret("variable-2", "variable-definition"); return ret("variable-2", "variable"); } else if (stream.match(/^\w+-/)) { return ret("meta", "meta"); } } else if (/[,+>*\/]/.test(ch)) { return ret(null, "select-op"); } else if (ch == "." && stream.match(/^-?[_a-z][_a-z0-9-]*/i)) { return ret("qualifier", "qualifier"); } else if (/[:;{}\[\]\(\)]/.test(ch)) { return ret(null, ch); } else if ((ch == "u" && stream.match(/rl(-prefix)?\(/)) || (ch == "d" && stream.match("omain(")) || (ch == "r" && stream.match("egexp("))) { stream.backUp(1); state.tokenize = tokenParenthesized; return ret("property", "word"); } else if (/[\w\\\-]/.test(ch)) { stream.eatWhile(/[\w\\\-]/); return ret("property", "word"); } else { return ret(null, null); } } function tokenString(quote) { return function(stream, state) { var escaped = false, ch; while ((ch = stream.next()) != null) { if (ch == quote && !escaped) { if (quote == ")") stream.backUp(1); break; } escaped = !escaped && ch == "\\"; } if (ch == quote || !escaped && quote != ")") state.tokenize = null; return ret("string", "string"); }; } function tokenParenthesized(stream, state) { stream.next(); // Must be '(' if (!stream.match(/\s*[\"\')]/, false)) state.tokenize = tokenString(")"); else state.tokenize = null; return ret(null, "("); } // Context management function Context(type, indent, prev) { this.type = type; this.indent = indent; this.prev = prev; } function pushContext(state, stream, type, indent) { state.context = new Context(type, stream.indentation() + (indent === false ? 0 : indentUnit), state.context); return type; } function popContext(state) { if (state.context.prev) state.context = state.context.prev; return state.context.type; } function pass(type, stream, state) { return states[state.context.type](type, stream, state); } function popAndPass(type, stream, state, n) { for (var i = n || 1; i > 0; i--) state.context = state.context.prev; return pass(type, stream, state); } // Parser function wordAsValue(stream) { var word = stream.current().toLowerCase(); if (valueKeywords.hasOwnProperty(word)) override = "atom"; else if (colorKeywords.hasOwnProperty(word)) override = "keyword"; else override = "variable"; } var states = {}; states.top = function(type, stream, state) { if (type == "{") { return pushContext(state, stream, "block"); } else if (type == "}" && state.context.prev) { return popContext(state); } else if (supportsAtComponent && /@component/.test(type)) { return pushContext(state, stream, "atComponentBlock"); } else if (/^@(-moz-)?document$/.test(type)) { return pushContext(state, stream, "documentTypes"); } else if (/^@(media|supports|(-moz-)?document|import)$/.test(type)) { return pushContext(state, stream, "atBlock"); } else if (/^@(font-face|counter-style)/.test(type)) { state.stateArg = type; return "restricted_atBlock_before"; } else if (/^@(-(moz|ms|o|webkit)-)?keyframes$/.test(type)) { return "keyframes"; } else if (type && type.charAt(0) == "@") { return pushContext(state, stream, "at"); } else if (type == "hash") { override = "builtin"; } else if (type == "word") { override = "tag"; } else if (type == "variable-definition") { return "maybeprop"; } else if (type == "interpolation") { return pushContext(state, stream, "interpolation"); } else if (type == ":") { return "pseudo"; } else if (allowNested && type == "(") { return pushContext(state, stream, "parens"); } return state.context.type; }; states.block = function(type, stream, state) { if (type == "word") { var word = stream.current().toLowerCase(); if (propertyKeywords.hasOwnProperty(word)) { override = "property"; return "maybeprop"; } else if (nonStandardPropertyKeywords.hasOwnProperty(word)) { override = "string-2"; return "maybeprop"; } else if (allowNested) { override = stream.match(/^\s*:(?:\s|$)/, false) ? "property" : "tag"; return "block"; } else { override += " error"; return "maybeprop"; } } else if (type == "meta") { return "block"; } else if (!allowNested && (type == "hash" || type == "qualifier")) { override = "error"; return "block"; } else { return states.top(type, stream, state); } }; states.maybeprop = function(type, stream, state) { if (type == ":") return pushContext(state, stream, "prop"); return pass(type, stream, state); }; states.prop = function(type, stream, state) { if (type == ";") return popContext(state); if (type == "{" && allowNested) return pushContext(state, stream, "propBlock"); if (type == "}" || type == "{") return popAndPass(type, stream, state); if (type == "(") return pushContext(state, stream, "parens"); if (type == "hash" && !/^#([0-9a-fA-f]{3,4}|[0-9a-fA-f]{6}|[0-9a-fA-f]{8})$/.test(stream.current())) { override += " error"; } else if (type == "word") { wordAsValue(stream); } else if (type == "interpolation") { return pushContext(state, stream, "interpolation"); } return "prop"; }; states.propBlock = function(type, _stream, state) { if (type == "}") return popContext(state); if (type == "word") { override = "property"; return "maybeprop"; } return state.context.type; }; states.parens = function(type, stream, state) { if (type == "{" || type == "}") return popAndPass(type, stream, state); if (type == ")") return popContext(state); if (type == "(") return pushContext(state, stream, "parens"); if (type == "interpolation") return pushContext(state, stream, "interpolation"); if (type == "word") wordAsValue(stream); return "parens"; }; states.pseudo = function(type, stream, state) { if (type == "word") { override = "variable-3"; return state.context.type; } return pass(type, stream, state); }; states.documentTypes = function(type, stream, state) { if (type == "word" && documentTypes.hasOwnProperty(stream.current())) { override = "tag"; return state.context.type; } else { return states.atBlock(type, stream, state); } }; states.atBlock = function(type, stream, state) { if (type == "(") return pushContext(state, stream, "atBlock_parens"); if (type == "}" || type == ";") return popAndPass(type, stream, state); if (type == "{") return popContext(state) && pushContext(state, stream, allowNested ? "block" : "top"); if (type == "interpolation") return pushContext(state, stream, "interpolation"); if (type == "word") { var word = stream.current().toLowerCase(); if (word == "only" || word == "not" || word == "and" || word == "or") override = "keyword"; else if (mediaTypes.hasOwnProperty(word)) override = "attribute"; else if (mediaFeatures.hasOwnProperty(word)) override = "property"; else if (mediaValueKeywords.hasOwnProperty(word)) override = "keyword"; else if (propertyKeywords.hasOwnProperty(word)) override = "property"; else if (nonStandardPropertyKeywords.hasOwnProperty(word)) override = "string-2"; else if (valueKeywords.hasOwnProperty(word)) override = "atom"; else if (colorKeywords.hasOwnProperty(word)) override = "keyword"; else override = "error"; } return state.context.type; }; states.atComponentBlock = function(type, stream, state) { if (type == "}") return popAndPass(type, stream, state); if (type == "{") return popContext(state) && pushContext(state, stream, allowNested ? "block" : "top", false); if (type == "word") override = "error"; return state.context.type; }; states.atBlock_parens = function(type, stream, state) { if (type == ")") return popContext(state); if (type == "{" || type == "}") return popAndPass(type, stream, state, 2); return states.atBlock(type, stream, state); }; states.restricted_atBlock_before = function(type, stream, state) { if (type == "{") return pushContext(state, stream, "restricted_atBlock"); if (type == "word" && state.stateArg == "@counter-style") { override = "variable"; return "restricted_atBlock_before"; } return pass(type, stream, state); }; states.restricted_atBlock = function(type, stream, state) { if (type == "}") { state.stateArg = null; return popContext(state); } if (type == "word") { if ((state.stateArg == "@font-face" && !fontProperties.hasOwnProperty(stream.current().toLowerCase())) || (state.stateArg == "@counter-style" && !counterDescriptors.hasOwnProperty(stream.current().toLowerCase()))) override = "error"; else override = "property"; return "maybeprop"; } return "restricted_atBlock"; }; states.keyframes = function(type, stream, state) { if (type == "word") { override = "variable"; return "keyframes"; } if (type == "{") return pushContext(state, stream, "top"); return pass(type, stream, state); }; states.at = function(type, stream, state) { if (type == ";") return popContext(state); if (type == "{" || type == "}") return popAndPass(type, stream, state); if (type == "word") override = "tag"; else if (type == "hash") override = "builtin"; return "at"; }; states.interpolation = function(type, stream, state) { if (type == "}") return popContext(state); if (type == "{" || type == ";") return popAndPass(type, stream, state); if (type == "word") override = "variable"; else if (type != "variable" && type != "(" && type != ")") override = "error"; return "interpolation"; }; return { startState: function(base) { return {tokenize: null, state: inline ? "block" : "top", stateArg: null, context: new Context(inline ? "block" : "top", base || 0, null)}; }, token: function(stream, state) { if (!state.tokenize && stream.eatSpace()) return null; var style = (state.tokenize || tokenBase)(stream, state); if (style && typeof style == "object") { type = style[1]; style = style[0]; } override = style; state.state = states[state.state](type, stream, state); return override; }, indent: function(state, textAfter) { var cx = state.context, ch = textAfter && textAfter.charAt(0); var indent = cx.indent; if (cx.type == "prop" && (ch == "}" || ch == ")")) cx = cx.prev; if (cx.prev) { if (ch == "}" && (cx.type == "block" || cx.type == "top" || cx.type == "interpolation" || cx.type == "restricted_atBlock")) { // Resume indentation from parent context. cx = cx.prev; indent = cx.indent; } else if (ch == ")" && (cx.type == "parens" || cx.type == "atBlock_parens") || ch == "{" && (cx.type == "at" || cx.type == "atBlock")) { // Dedent relative to current context. indent = Math.max(0, cx.indent - indentUnit); cx = cx.prev; } } return indent; }, electricChars: "}", blockCommentStart: "/*", blockCommentEnd: "*/", fold: "brace" }; }); function keySet(array) { var keys = {}; for (var i = 0; i < array.length; ++i) { keys[array[i]] = true; } return keys; } var documentTypes_ = [ "domain", "regexp", "url", "url-prefix" ], documentTypes = keySet(documentTypes_); var mediaTypes_ = [ "all", "aural", "braille", "handheld", "print", "projection", "screen", "tty", "tv", "embossed" ], mediaTypes = keySet(mediaTypes_); var mediaFeatures_ = [ "width", "min-width", "max-width", "height", "min-height", "max-height", "device-width", "min-device-width", "max-device-width", "device-height", "min-device-height", "max-device-height", "aspect-ratio", "min-aspect-ratio", "max-aspect-ratio", "device-aspect-ratio", "min-device-aspect-ratio", "max-device-aspect-ratio", "color", "min-color", "max-color", "color-index", "min-color-index", "max-color-index", "monochrome", "min-monochrome", "max-monochrome", "resolution", "min-resolution", "max-resolution", "scan", "grid", "orientation", "device-pixel-ratio", "min-device-pixel-ratio", "max-device-pixel-ratio", "pointer", "any-pointer", "hover", "any-hover" ], mediaFeatures = keySet(mediaFeatures_); var mediaValueKeywords_ = [ "landscape", "portrait", "none", "coarse", "fine", "on-demand", "hover", "interlace", "progressive" ], mediaValueKeywords = keySet(mediaValueKeywords_); var propertyKeywords_ = [ "align-content", "align-items", "align-self", "alignment-adjust", "alignment-baseline", "anchor-point", "animation", "animation-delay", "animation-direction", "animation-duration", "animation-fill-mode", "animation-iteration-count", "animation-name", "animation-play-state", "animation-timing-function", "appearance", "azimuth", "backface-visibility", "background", "background-attachment", "background-blend-mode", "background-clip", "background-color", "background-image", "background-origin", "background-position", "background-repeat", "background-size", "baseline-shift", "binding", "bleed", "bookmark-label", "bookmark-level", "bookmark-state", "bookmark-target", "border", "border-bottom", "border-bottom-color", "border-bottom-left-radius", "border-bottom-right-radius", "border-bottom-style", "border-bottom-width", "border-collapse", "border-color", "border-image", "border-image-outset", "border-image-repeat", "border-image-slice", "border-image-source", "border-image-width", "border-left", "border-left-color", "border-left-style", "border-left-width", "border-radius", "border-right", "border-right-color", "border-right-style", "border-right-width", "border-spacing", "border-style", "border-top", "border-top-color", "border-top-left-radius", "border-top-right-radius", "border-top-style", "border-top-width", "border-width", "bottom", "box-decoration-break", "box-shadow", "box-sizing", "break-after", "break-before", "break-inside", "caption-side", "clear", "clip", "color", "color-profile", "column-count", "column-fill", "column-gap", "column-rule", "column-rule-color", "column-rule-style", "column-rule-width", "column-span", "column-width", "columns", "content", "counter-increment", "counter-reset", "crop", "cue", "cue-after", "cue-before", "cursor", "direction", "display", "dominant-baseline", "drop-initial-after-adjust", "drop-initial-after-align", "drop-initial-before-adjust", "drop-initial-before-align", "drop-initial-size", "drop-initial-value", "elevation", "empty-cells", "fit", "fit-position", "flex", "flex-basis", "flex-direction", "flex-flow", "flex-grow", "flex-shrink", "flex-wrap", "float", "float-offset", "flow-from", "flow-into", "font", "font-feature-settings", "font-family", "font-kerning", "font-language-override", "font-size", "font-size-adjust", "font-stretch", "font-style", "font-synthesis", "font-variant", "font-variant-alternates", "font-variant-caps", "font-variant-east-asian", "font-variant-ligatures", "font-variant-numeric", "font-variant-position", "font-weight", "grid", "grid-area", "grid-auto-columns", "grid-auto-flow", "grid-auto-rows", "grid-column", "grid-column-end", "grid-column-gap", "grid-column-start", "grid-gap", "grid-row", "grid-row-end", "grid-row-gap", "grid-row-start", "grid-template", "grid-template-areas", "grid-template-columns", "grid-template-rows", "hanging-punctuation", "height", "hyphens", "icon", "image-orientation", "image-rendering", "image-resolution", "inline-box-align", "justify-content", "left", "letter-spacing", "line-break", "line-height", "line-stacking", "line-stacking-ruby", "line-stacking-shift", "line-stacking-strategy", "list-style", "list-style-image", "list-style-position", "list-style-type", "margin", "margin-bottom", "margin-left", "margin-right", "margin-top", "marker-offset", "marks", "marquee-direction", "marquee-loop", "marquee-play-count", "marquee-speed", "marquee-style", "max-height", "max-width", "min-height", "min-width", "move-to", "nav-down", "nav-index", "nav-left", "nav-right", "nav-up", "object-fit", "object-position", "opacity", "order", "orphans", "outline", "outline-color", "outline-offset", "outline-style", "outline-width", "overflow", "overflow-style", "overflow-wrap", "overflow-x", "overflow-y", "padding", "padding-bottom", "padding-left", "padding-right", "padding-top", "page", "page-break-after", "page-break-before", "page-break-inside", "page-policy", "pause", "pause-after", "pause-before", "perspective", "perspective-origin", "pitch", "pitch-range", "play-during", "position", "presentation-level", "punctuation-trim", "quotes", "region-break-after", "region-break-before", "region-break-inside", "region-fragment", "rendering-intent", "resize", "rest", "rest-after", "rest-before", "richness", "right", "rotation", "rotation-point", "ruby-align", "ruby-overhang", "ruby-position", "ruby-span", "shape-image-threshold", "shape-inside", "shape-margin", "shape-outside", "size", "speak", "speak-as", "speak-header", "speak-numeral", "speak-punctuation", "speech-rate", "stress", "string-set", "tab-size", "table-layout", "target", "target-name", "target-new", "target-position", "text-align", "text-align-last", "text-decoration", "text-decoration-color", "text-decoration-line", "text-decoration-skip", "text-decoration-style", "text-emphasis", "text-emphasis-color", "text-emphasis-position", "text-emphasis-style", "text-height", "text-indent", "text-justify", "text-outline", "text-overflow", "text-shadow", "text-size-adjust", "text-space-collapse", "text-transform", "text-underline-position", "text-wrap", "top", "transform", "transform-origin", "transform-style", "transition", "transition-delay", "transition-duration", "transition-property", "transition-timing-function", "unicode-bidi", "vertical-align", "visibility", "voice-balance", "voice-duration", "voice-family", "voice-pitch", "voice-range", "voice-rate", "voice-stress", "voice-volume", "volume", "white-space", "widows", "width", "word-break", "word-spacing", "word-wrap", "z-index", // SVG-specific "clip-path", "clip-rule", "mask", "enable-background", "filter", "flood-color", "flood-opacity", "lighting-color", "stop-color", "stop-opacity", "pointer-events", "color-interpolation", "color-interpolation-filters", "color-rendering", "fill", "fill-opacity", "fill-rule", "image-rendering", "marker", "marker-end", "marker-mid", "marker-start", "shape-rendering", "stroke", "stroke-dasharray", "stroke-dashoffset", "stroke-linecap", "stroke-linejoin", "stroke-miterlimit", "stroke-opacity", "stroke-width", "text-rendering", "baseline-shift", "dominant-baseline", "glyph-orientation-horizontal", "glyph-orientation-vertical", "text-anchor", "writing-mode" ], propertyKeywords = keySet(propertyKeywords_); var nonStandardPropertyKeywords_ = [ "scrollbar-arrow-color", "scrollbar-base-color", "scrollbar-dark-shadow-color", "scrollbar-face-color", "scrollbar-highlight-color", "scrollbar-shadow-color", "scrollbar-3d-light-color", "scrollbar-track-color", "shape-inside", "searchfield-cancel-button", "searchfield-decoration", "searchfield-results-button", "searchfield-results-decoration", "zoom" ], nonStandardPropertyKeywords = keySet(nonStandardPropertyKeywords_); var fontProperties_ = [ "font-family", "src", "unicode-range", "font-variant", "font-feature-settings", "font-stretch", "font-weight", "font-style" ], fontProperties = keySet(fontProperties_); var counterDescriptors_ = [ "additive-symbols", "fallback", "negative", "pad", "prefix", "range", "speak-as", "suffix", "symbols", "system" ], counterDescriptors = keySet(counterDescriptors_); var colorKeywords_ = [ "aliceblue", "antiquewhite", "aqua", "aquamarine", "azure", "beige", "bisque", "black", "blanchedalmond", "blue", "blueviolet", "brown", "burlywood", "cadetblue", "chartreuse", "chocolate", "coral", "cornflowerblue", "cornsilk", "crimson", "cyan", "darkblue", "darkcyan", "darkgoldenrod", "darkgray", "darkgreen", "darkkhaki", "darkmagenta", "darkolivegreen", "darkorange", "darkorchid", "darkred", "darksalmon", "darkseagreen", "darkslateblue", "darkslategray", "darkturquoise", "darkviolet", "deeppink", "deepskyblue", "dimgray", "dodgerblue", "firebrick", "floralwhite", "forestgreen", "fuchsia", "gainsboro", "ghostwhite", "gold", "goldenrod", "gray", "grey", "green", "greenyellow", "honeydew", "hotpink", "indianred", "indigo", "ivory", "khaki", "lavender", "lavenderblush", "lawngreen", "lemonchiffon", "lightblue", "lightcoral", "lightcyan", "lightgoldenrodyellow", "lightgray", "lightgreen", "lightpink", "lightsalmon", "lightseagreen", "lightskyblue", "lightslategray", "lightsteelblue", "lightyellow", "lime", "limegreen", "linen", "magenta", "maroon", "mediumaquamarine", "mediumblue", "mediumorchid", "mediumpurple", "mediumseagreen", "mediumslateblue", "mediumspringgreen", "mediumturquoise", "mediumvioletred", "midnightblue", "mintcream", "mistyrose", "moccasin", "navajowhite", "navy", "oldlace", "olive", "olivedrab", "orange", "orangered", "orchid", "palegoldenrod", "palegreen", "paleturquoise", "palevioletred", "papayawhip", "peachpuff", "peru", "pink", "plum", "powderblue", "purple", "rebeccapurple", "red", "rosybrown", "royalblue", "saddlebrown", "salmon", "sandybrown", "seagreen", "seashell", "sienna", "silver", "skyblue", "slateblue", "slategray", "snow", "springgreen", "steelblue", "tan", "teal", "thistle", "tomato", "turquoise", "violet", "wheat", "white", "whitesmoke", "yellow", "yellowgreen" ], colorKeywords = keySet(colorKeywords_); var valueKeywords_ = [ "above", "absolute", "activeborder", "additive", "activecaption", "afar", "after-white-space", "ahead", "alias", "all", "all-scroll", "alphabetic", "alternate", "always", "amharic", "amharic-abegede", "antialiased", "appworkspace", "arabic-indic", "armenian", "asterisks", "attr", "auto", "avoid", "avoid-column", "avoid-page", "avoid-region", "background", "backwards", "baseline", "below", "bidi-override", "binary", "bengali", "blink", "block", "block-axis", "bold", "bolder", "border", "border-box", "both", "bottom", "break", "break-all", "break-word", "bullets", "button", "button-bevel", "buttonface", "buttonhighlight", "buttonshadow", "buttontext", "calc", "cambodian", "capitalize", "caps-lock-indicator", "caption", "captiontext", "caret", "cell", "center", "checkbox", "circle", "cjk-decimal", "cjk-earthly-branch", "cjk-heavenly-stem", "cjk-ideographic", "clear", "clip", "close-quote", "col-resize", "collapse", "color", "color-burn", "color-dodge", "column", "column-reverse", "compact", "condensed", "contain", "content", "content-box", "context-menu", "continuous", "copy", "counter", "counters", "cover", "crop", "cross", "crosshair", "currentcolor", "cursive", "cyclic", "darken", "dashed", "decimal", "decimal-leading-zero", "default", "default-button", "dense", "destination-atop", "destination-in", "destination-out", "destination-over", "devanagari", "difference", "disc", "discard", "disclosure-closed", "disclosure-open", "document", "dot-dash", "dot-dot-dash", "dotted", "double", "down", "e-resize", "ease", "ease-in", "ease-in-out", "ease-out", "element", "ellipse", "ellipsis", "embed", "end", "ethiopic", "ethiopic-abegede", "ethiopic-abegede-am-et", "ethiopic-abegede-gez", "ethiopic-abegede-ti-er", "ethiopic-abegede-ti-et", "ethiopic-halehame-aa-er", "ethiopic-halehame-aa-et", "ethiopic-halehame-am-et", "ethiopic-halehame-gez", "ethiopic-halehame-om-et", "ethiopic-halehame-sid-et", "ethiopic-halehame-so-et", "ethiopic-halehame-ti-er", "ethiopic-halehame-ti-et", "ethiopic-halehame-tig", "ethiopic-numeric", "ew-resize", "exclusion", "expanded", "extends", "extra-condensed", "extra-expanded", "fantasy", "fast", "fill", "fixed", "flat", "flex", "flex-end", "flex-start", "footnotes", "forwards", "from", "geometricPrecision", "georgian", "graytext", "grid", "groove", "gujarati", "gurmukhi", "hand", "hangul", "hangul-consonant", "hard-light", "hebrew", "help", "hidden", "hide", "higher", "highlight", "highlighttext", "hiragana", "hiragana-iroha", "horizontal", "hsl", "hsla", "hue", "icon", "ignore", "inactiveborder", "inactivecaption", "inactivecaptiontext", "infinite", "infobackground", "infotext", "inherit", "initial", "inline", "inline-axis", "inline-block", "inline-flex", "inline-grid", "inline-table", "inset", "inside", "intrinsic", "invert", "italic", "japanese-formal", "japanese-informal", "justify", "kannada", "katakana", "katakana-iroha", "keep-all", "khmer", "korean-hangul-formal", "korean-hanja-formal", "korean-hanja-informal", "landscape", "lao", "large", "larger", "left", "level", "lighter", "lighten", "line-through", "linear", "linear-gradient", "lines", "list-item", "listbox", "listitem", "local", "logical", "loud", "lower", "lower-alpha", "lower-armenian", "lower-greek", "lower-hexadecimal", "lower-latin", "lower-norwegian", "lower-roman", "lowercase", "ltr", "luminosity", "malayalam", "match", "matrix", "matrix3d", "media-controls-background", "media-current-time-display", "media-fullscreen-button", "media-mute-button", "media-play-button", "media-return-to-realtime-button", "media-rewind-button", "media-seek-back-button", "media-seek-forward-button", "media-slider", "media-sliderthumb", "media-time-remaining-display", "media-volume-slider", "media-volume-slider-container", "media-volume-sliderthumb", "medium", "menu", "menulist", "menulist-button", "menulist-text", "menulist-textfield", "menutext", "message-box", "middle", "min-intrinsic", "mix", "mongolian", "monospace", "move", "multiple", "multiply", "myanmar", "n-resize", "narrower", "ne-resize", "nesw-resize", "no-close-quote", "no-drop", "no-open-quote", "no-repeat", "none", "normal", "not-allowed", "nowrap", "ns-resize", "numbers", "numeric", "nw-resize", "nwse-resize", "oblique", "octal", "open-quote", "optimizeLegibility", "optimizeSpeed", "oriya", "oromo", "outset", "outside", "outside-shape", "overlay", "overline", "padding", "padding-box", "painted", "page", "paused", "persian", "perspective", "plus-darker", "plus-lighter", "pointer", "polygon", "portrait", "pre", "pre-line", "pre-wrap", "preserve-3d", "progress", "push-button", "radial-gradient", "radio", "read-only", "read-write", "read-write-plaintext-only", "rectangle", "region", "relative", "repeat", "repeating-linear-gradient", "repeating-radial-gradient", "repeat-x", "repeat-y", "reset", "reverse", "rgb", "rgba", "ridge", "right", "rotate", "rotate3d", "rotateX", "rotateY", "rotateZ", "round", "row", "row-resize", "row-reverse", "rtl", "run-in", "running", "s-resize", "sans-serif", "saturation", "scale", "scale3d", "scaleX", "scaleY", "scaleZ", "screen", "scroll", "scrollbar", "se-resize", "searchfield", "searchfield-cancel-button", "searchfield-decoration", "searchfield-results-button", "searchfield-results-decoration", "semi-condensed", "semi-expanded", "separate", "serif", "show", "sidama", "simp-chinese-formal", "simp-chinese-informal", "single", "skew", "skewX", "skewY", "skip-white-space", "slide", "slider-horizontal", "slider-vertical", "sliderthumb-horizontal", "sliderthumb-vertical", "slow", "small", "small-caps", "small-caption", "smaller", "soft-light", "solid", "somali", "source-atop", "source-in", "source-out", "source-over", "space", "space-around", "space-between", "spell-out", "square", "square-button", "start", "static", "status-bar", "stretch", "stroke", "sub", "subpixel-antialiased", "super", "sw-resize", "symbolic", "symbols", "table", "table-caption", "table-cell", "table-column", "table-column-group", "table-footer-group", "table-header-group", "table-row", "table-row-group", "tamil", "telugu", "text", "text-bottom", "text-top", "textarea", "textfield", "thai", "thick", "thin", "threeddarkshadow", "threedface", "threedhighlight", "threedlightshadow", "threedshadow", "tibetan", "tigre", "tigrinya-er", "tigrinya-er-abegede", "tigrinya-et", "tigrinya-et-abegede", "to", "top", "trad-chinese-formal", "trad-chinese-informal", "translate", "translate3d", "translateX", "translateY", "translateZ", "transparent", "ultra-condensed", "ultra-expanded", "underline", "up", "upper-alpha", "upper-armenian", "upper-greek", "upper-hexadecimal", "upper-latin", "upper-norwegian", "upper-roman", "uppercase", "urdu", "url", "var", "vertical", "vertical-text", "visible", "visibleFill", "visiblePainted", "visibleStroke", "visual", "w-resize", "wait", "wave", "wider", "window", "windowframe", "windowtext", "words", "wrap", "wrap-reverse", "x-large", "x-small", "xor", "xx-large", "xx-small" ], valueKeywords = keySet(valueKeywords_); var allWords = documentTypes_.concat(mediaTypes_).concat(mediaFeatures_).concat(mediaValueKeywords_) .concat(propertyKeywords_).concat(nonStandardPropertyKeywords_).concat(colorKeywords_) .concat(valueKeywords_); CodeMirror.registerHelper("hintWords", "css", allWords); function tokenCComment(stream, state) { var maybeEnd = false, ch; while ((ch = stream.next()) != null) { if (maybeEnd && ch == "/") { state.tokenize = null; break; } maybeEnd = (ch == "*"); } return ["comment", "comment"]; } CodeMirror.defineMIME("text/css", { documentTypes: documentTypes, mediaTypes: mediaTypes, mediaFeatures: mediaFeatures, mediaValueKeywords: mediaValueKeywords, propertyKeywords: propertyKeywords, nonStandardPropertyKeywords: nonStandardPropertyKeywords, fontProperties: fontProperties, counterDescriptors: counterDescriptors, colorKeywords: colorKeywords, valueKeywords: valueKeywords, tokenHooks: { "/": function(stream, state) { if (!stream.eat("*")) return false; state.tokenize = tokenCComment; return tokenCComment(stream, state); } }, name: "css" }); CodeMirror.defineMIME("text/x-scss", { mediaTypes: mediaTypes, mediaFeatures: mediaFeatures, mediaValueKeywords: mediaValueKeywords, propertyKeywords: propertyKeywords, nonStandardPropertyKeywords: nonStandardPropertyKeywords, colorKeywords: colorKeywords, valueKeywords: valueKeywords, fontProperties: fontProperties, allowNested: true, tokenHooks: { "/": function(stream, state) { if (stream.eat("/")) { stream.skipToEnd(); return ["comment", "comment"]; } else if (stream.eat("*")) { state.tokenize = tokenCComment; return tokenCComment(stream, state); } else { return ["operator", "operator"]; } }, ":": function(stream) { if (stream.match(/\s*\{/)) return [null, "{"]; return false; }, "$": function(stream) { stream.match(/^[\w-]+/); if (stream.match(/^\s*:/, false)) return ["variable-2", "variable-definition"]; return ["variable-2", "variable"]; }, "#": function(stream) { if (!stream.eat("{")) return false; return [null, "interpolation"]; } }, name: "css", helperType: "scss" }); CodeMirror.defineMIME("text/x-less", { mediaTypes: mediaTypes, mediaFeatures: mediaFeatures, mediaValueKeywords: mediaValueKeywords, propertyKeywords: propertyKeywords, nonStandardPropertyKeywords: nonStandardPropertyKeywords, colorKeywords: colorKeywords, valueKeywords: valueKeywords, fontProperties: fontProperties, allowNested: true, tokenHooks: { "/": function(stream, state) { if (stream.eat("/")) { stream.skipToEnd(); return ["comment", "comment"]; } else if (stream.eat("*")) { state.tokenize = tokenCComment; return tokenCComment(stream, state); } else { return ["operator", "operator"]; } }, "@": function(stream) { if (stream.eat("{")) return [null, "interpolation"]; if (stream.match(/^(charset|document|font-face|import|(-(moz|ms|o|webkit)-)?keyframes|media|namespace|page|supports)\b/, false)) return false; stream.eatWhile(/[\w\\\-]/); if (stream.match(/^\s*:/, false)) return ["variable-2", "variable-definition"]; return ["variable-2", "variable"]; }, "&": function() { return ["atom", "atom"]; } }, name: "css", helperType: "less" }); CodeMirror.defineMIME("text/x-gss", { documentTypes: documentTypes, mediaTypes: mediaTypes, mediaFeatures: mediaFeatures, propertyKeywords: propertyKeywords, nonStandardPropertyKeywords: nonStandardPropertyKeywords, fontProperties: fontProperties, counterDescriptors: counterDescriptors, colorKeywords: colorKeywords, valueKeywords: valueKeywords, supportsAtComponent: true, tokenHooks: { "/": function(stream, state) { if (!stream.eat("*")) return false; state.tokenize = tokenCComment; return tokenCComment(stream, state); } }, name: "css", helperType: "gss" }); }); PK!‘ÄóBÜ Ü Ffile-manager-advanced/application/library/codemirror/mode/css/gss.htmlnu„[µü¤ CodeMirror: Closure Stylesheets (GSS) mode

    Closure Stylesheets (GSS) mode

    A mode for Closure Stylesheets (GSS).

    MIME type defined: text/x-gss.

    Parsing/Highlighting Tests: normal, verbose.

    PK!…êð@ââGfile-manager-advanced/application/library/codemirror/mode/css/less.htmlnu„[µü¤ CodeMirror: LESS mode

    LESS mode

    The LESS mode is a sub-mode of the CSS mode (defined in css.js).

    Parsing/Highlighting Tests: normal, verbose.

    PK!TÞ.§¶ ¶ Gfile-manager-advanced/application/library/codemirror/mode/css/scss.htmlnu„[µü¤ CodeMirror: SCSS mode

    SCSS mode

    The SCSS mode is a sub-mode of the CSS mode (defined in css.js).

    Parsing/Highlighting Tests: normal, verbose.

    PK!#¨lÍ4 4 Jfile-manager-advanced/application/library/codemirror/mode/css/scss_test.jsnu„[µü¤// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function() { var mode = CodeMirror.getMode({indentUnit: 2}, "text/x-scss"); function MT(name) { test.mode(name, mode, Array.prototype.slice.call(arguments, 1), "scss"); } MT('url_with_quotation', "[tag foo] { [property background]:[atom url]([string test.jpg]) }"); MT('url_with_double_quotes', "[tag foo] { [property background]:[atom url]([string \"test.jpg\"]) }"); MT('url_with_single_quotes', "[tag foo] { [property background]:[atom url]([string \'test.jpg\']) }"); MT('string', "[def @import] [string \"compass/css3\"]"); MT('important_keyword', "[tag foo] { [property background]:[atom url]([string \'test.jpg\']) [keyword !important] }"); MT('variable', "[variable-2 $blue]:[atom #333]"); MT('variable_as_attribute', "[tag foo] { [property color]:[variable-2 $blue] }"); MT('numbers', "[tag foo] { [property padding]:[number 10px] [number 10] [number 10em] [number 8in] }"); MT('number_percentage', "[tag foo] { [property width]:[number 80%] }"); MT('selector', "[builtin #hello][qualifier .world]{}"); MT('singleline_comment', "[comment // this is a comment]"); MT('multiline_comment', "[comment /*foobar*/]"); MT('attribute_with_hyphen', "[tag foo] { [property font-size]:[number 10px] }"); MT('string_after_attribute', "[tag foo] { [property content]:[string \"::\"] }"); MT('directives', "[def @include] [qualifier .mixin]"); MT('basic_structure', "[tag p] { [property background]:[keyword red]; }"); MT('nested_structure', "[tag p] { [tag a] { [property color]:[keyword red]; } }"); MT('mixin', "[def @mixin] [tag table-base] {}"); MT('number_without_semicolon', "[tag p] {[property width]:[number 12]}", "[tag a] {[property color]:[keyword red];}"); MT('atom_in_nested_block', "[tag p] { [tag a] { [property color]:[atom #000]; } }"); MT('interpolation_in_property', "[tag foo] { #{[variable-2 $hello]}:[number 2]; }"); MT('interpolation_in_selector', "[tag foo]#{[variable-2 $hello]} { [property color]:[atom #000]; }"); MT('interpolation_error', "[tag foo]#{[variable foo]} { [property color]:[atom #000]; }"); MT("divide_operator", "[tag foo] { [property width]:[number 4] [operator /] [number 2] }"); MT('nested_structure_with_id_selector', "[tag p] { [builtin #hello] { [property color]:[keyword red]; } }"); MT('indent_mixin', "[def @mixin] [tag container] (", " [variable-2 $a]: [number 10],", " [variable-2 $b]: [number 10])", "{}"); MT('indent_nested', "[tag foo] {", " [tag bar] {", " }", "}"); MT('indent_parentheses', "[tag foo] {", " [property color]: [atom darken]([variable-2 $blue],", " [number 9%]);", "}"); MT('indent_vardef', "[variable-2 $name]:", " [string 'val'];", "[tag tag] {", " [tag inner] {", " [property margin]: [number 3px];", " }", "}"); })(); PK!ü#=xxHfile-manager-advanced/application/library/codemirror/mode/css/index.htmlnu„[µü¤ CodeMirror: CSS mode

    CSS mode

    MIME types defined: text/css, text/x-scss (demo), text/x-less (demo).

    Parsing/Highlighting Tests: normal, verbose.

    PK!…/7|��Efile-manager-advanced/application/library/codemirror/mode/css/test.jsnu„[µü¤// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function() { var mode = CodeMirror.getMode({indentUnit: 2}, "css"); function MT(name) { test.mode(name, mode, Array.prototype.slice.call(arguments, 1)); } // Error, because "foobarhello" is neither a known type or property, but // property was expected (after "and"), and it should be in parentheses. MT("atMediaUnknownType", "[def @media] [attribute screen] [keyword and] [error foobarhello] { }"); // Soft error, because "foobarhello" is not a known property or type. MT("atMediaUnknownProperty", "[def @media] [attribute screen] [keyword and] ([error foobarhello]) { }"); // Make sure nesting works with media queries MT("atMediaMaxWidthNested", "[def @media] [attribute screen] [keyword and] ([property max-width]: [number 25px]) { [tag foo] { } }"); MT("atMediaFeatureValueKeyword", "[def @media] ([property orientation]: [keyword landscape]) { }"); MT("atMediaUnknownFeatureValueKeyword", "[def @media] ([property orientation]: [error upsidedown]) { }"); MT("tagSelector", "[tag foo] { }"); MT("classSelector", "[qualifier .foo-bar_hello] { }"); MT("idSelector", "[builtin #foo] { [error #foo] }"); MT("tagSelectorUnclosed", "[tag foo] { [property margin]: [number 0] } [tag bar] { }"); MT("tagStringNoQuotes", "[tag foo] { [property font-family]: [variable hello] [variable world]; }"); MT("tagStringDouble", "[tag foo] { [property font-family]: [string \"hello world\"]; }"); MT("tagStringSingle", "[tag foo] { [property font-family]: [string 'hello world']; }"); MT("tagColorKeyword", "[tag foo] {", " [property color]: [keyword black];", " [property color]: [keyword navy];", " [property color]: [keyword yellow];", "}"); MT("tagColorHex3", "[tag foo] { [property background]: [atom #fff]; }"); MT("tagColorHex4", "[tag foo] { [property background]: [atom #ffff]; }"); MT("tagColorHex6", "[tag foo] { [property background]: [atom #ffffff]; }"); MT("tagColorHex8", "[tag foo] { [property background]: [atom #ffffffff]; }"); MT("tagColorHex5Invalid", "[tag foo] { [property background]: [atom&error #fffff]; }"); MT("tagColorHexInvalid", "[tag foo] { [property background]: [atom&error #ffg]; }"); MT("tagNegativeNumber", "[tag foo] { [property margin]: [number -5px]; }"); MT("tagPositiveNumber", "[tag foo] { [property padding]: [number 5px]; }"); MT("tagVendor", "[tag foo] { [meta -foo-][property box-sizing]: [meta -foo-][atom border-box]; }"); MT("tagBogusProperty", "[tag foo] { [property&error barhelloworld]: [number 0]; }"); MT("tagTwoProperties", "[tag foo] { [property margin]: [number 0]; [property padding]: [number 0]; }"); MT("tagTwoPropertiesURL", "[tag foo] { [property background]: [atom url]([string //example.com/foo.png]); [property padding]: [number 0]; }"); MT("indent_tagSelector", "[tag strong], [tag em] {", " [property background]: [atom rgba](", " [number 255], [number 255], [number 0], [number .2]", " );", "}"); MT("indent_atMedia", "[def @media] {", " [tag foo] {", " [property color]:", " [keyword yellow];", " }", "}"); MT("indent_comma", "[tag foo] {", " [property font-family]: [variable verdana],", " [atom sans-serif];", "}"); MT("indent_parentheses", "[tag foo]:[variable-3 before] {", " [property background]: [atom url](", "[string blahblah]", "[string etc]", "[string ]) [keyword !important];", "}"); MT("font_face", "[def @font-face] {", " [property font-family]: [string 'myfont'];", " [error nonsense]: [string 'abc'];", " [property src]: [atom url]([string http://blah]),", " [atom url]([string http://foo]);", "}"); MT("empty_url", "[def @import] [atom url]() [attribute screen];"); MT("parens", "[qualifier .foo] {", " [property background-image]: [variable fade]([atom #000], [number 20%]);", " [property border-image]: [atom linear-gradient](", " [atom to] [atom bottom],", " [variable fade]([atom #000], [number 20%]) [number 0%],", " [variable fade]([atom #000], [number 20%]) [number 100%]", " );", "}"); MT("css_variable", ":[variable-3 root] {", " [variable-2 --main-color]: [atom #06c];", "}", "[tag h1][builtin #foo] {", " [property color]: [atom var]([variable-2 --main-color]);", "}"); MT("supports", "[def @supports] ([keyword not] (([property text-align-last]: [atom justify]) [keyword or] ([meta -moz-][property text-align-last]: [atom justify])) {", " [property text-align-last]: [atom justify];", "}"); MT("document", "[def @document] [tag url]([string http://blah]),", " [tag url-prefix]([string https://]),", " [tag domain]([string blah.com]),", " [tag regexp]([string \".*blah.+\"]) {", " [builtin #id] {", " [property background-color]: [keyword white];", " }", " [tag foo] {", " [property font-family]: [variable Verdana], [atom sans-serif];", " }", "}"); MT("document_url", "[def @document] [tag url]([string http://blah]) { [qualifier .class] { } }"); MT("document_urlPrefix", "[def @document] [tag url-prefix]([string https://]) { [builtin #id] { } }"); MT("document_domain", "[def @document] [tag domain]([string blah.com]) { [tag foo] { } }"); MT("document_regexp", "[def @document] [tag regexp]([string \".*blah.+\"]) { [builtin #id] { } }"); MT("counter-style", "[def @counter-style] [variable binary] {", " [property system]: [atom numeric];", " [property symbols]: [number 0] [number 1];", " [property suffix]: [string \".\"];", " [property range]: [atom infinite];", " [property speak-as]: [atom numeric];", "}"); MT("counter-style-additive-symbols", "[def @counter-style] [variable simple-roman] {", " [property system]: [atom additive];", " [property additive-symbols]: [number 10] [variable X], [number 5] [variable V], [number 1] [variable I];", " [property range]: [number 1] [number 49];", "}"); MT("counter-style-use", "[tag ol][qualifier .roman] { [property list-style]: [variable simple-roman]; }"); MT("counter-style-symbols", "[tag ol] { [property list-style]: [atom symbols]([atom cyclic] [string \"*\"] [string \"\\2020\"] [string \"\\2021\"] [string \"\\A7\"]); }"); })(); PK!àÆÙOOJfile-manager-advanced/application/library/codemirror/mode/css/less_test.jsnu„[µü¤// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function() { "use strict"; var mode = CodeMirror.getMode({indentUnit: 2}, "text/x-less"); function MT(name) { test.mode(name, mode, Array.prototype.slice.call(arguments, 1), "less"); } MT("variable", "[variable-2 @base]: [atom #f04615];", "[qualifier .class] {", " [property width]: [variable percentage]([number 0.5]); [comment // returns `50%`]", " [property color]: [variable saturate]([variable-2 @base], [number 5%]);", "}"); MT("amp", "[qualifier .child], [qualifier .sibling] {", " [qualifier .parent] [atom &] {", " [property color]: [keyword black];", " }", " [atom &] + [atom &] {", " [property color]: [keyword red];", " }", "}"); MT("mixin", "[qualifier .mixin] ([variable dark]; [variable-2 @color]) {", " [property color]: [atom darken]([variable-2 @color], [number 10%]);", "}", "[qualifier .mixin] ([variable light]; [variable-2 @color]) {", " [property color]: [atom lighten]([variable-2 @color], [number 10%]);", "}", "[qualifier .mixin] ([variable-2 @_]; [variable-2 @color]) {", " [property display]: [atom block];", "}", "[variable-2 @switch]: [variable light];", "[qualifier .class] {", " [qualifier .mixin]([variable-2 @switch]; [atom #888]);", "}"); MT("nest", "[qualifier .one] {", " [def @media] ([property width]: [number 400px]) {", " [property font-size]: [number 1.2em];", " [def @media] [attribute print] [keyword and] [property color] {", " [property color]: [keyword blue];", " }", " }", "}"); MT("interpolation", ".@{[variable foo]} { [property font-weight]: [atom bold]; }"); })(); PK!#âDÛ¯ ¯ Hfile-manager-advanced/application/library/codemirror/mode/sql/index.htmlnu„[µü¤ CodeMirror: SQL Mode for CodeMirror

    SQL Mode for CodeMirror

    MIME types defined: text/x-sql, text/x-mysql, text/x-mariadb, text/x-cassandra, text/x-plsql, text/x-mssql, text/x-hive, text/x-pgsql, text/x-gql.

    PK!|8€çš…š…Dfile-manager-advanced/application/library/codemirror/mode/sql/sql.jsnu„[µü¤// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMode("sql", function(config, parserConfig) { "use strict"; var client = parserConfig.client || {}, atoms = parserConfig.atoms || {"false": true, "true": true, "null": true}, builtin = parserConfig.builtin || {}, keywords = parserConfig.keywords || {}, operatorChars = parserConfig.operatorChars || /^[*+\-%<>!=&|~^]/, support = parserConfig.support || {}, hooks = parserConfig.hooks || {}, dateSQL = parserConfig.dateSQL || {"date" : true, "time" : true, "timestamp" : true}; function tokenBase(stream, state) { var ch = stream.next(); // call hooks from the mime type if (hooks[ch]) { var result = hooks[ch](stream, state); if (result !== false) return result; } if (support.hexNumber == true && ((ch == "0" && stream.match(/^[xX][0-9a-fA-F]+/)) || (ch == "x" || ch == "X") && stream.match(/^'[0-9a-fA-F]+'/))) { // hex // ref: http://dev.mysql.com/doc/refman/5.5/en/hexadecimal-literals.html return "number"; } else if (support.binaryNumber == true && (((ch == "b" || ch == "B") && stream.match(/^'[01]+'/)) || (ch == "0" && stream.match(/^b[01]+/)))) { // bitstring // ref: http://dev.mysql.com/doc/refman/5.5/en/bit-field-literals.html return "number"; } else if (ch.charCodeAt(0) > 47 && ch.charCodeAt(0) < 58) { // numbers // ref: http://dev.mysql.com/doc/refman/5.5/en/number-literals.html stream.match(/^[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)?/); support.decimallessFloat == true && stream.eat('.'); return "number"; } else if (ch == "?" && (stream.eatSpace() || stream.eol() || stream.eat(";"))) { // placeholders return "variable-3"; } else if (ch == "'" || (ch == '"' && support.doubleQuote)) { // strings // ref: http://dev.mysql.com/doc/refman/5.5/en/string-literals.html state.tokenize = tokenLiteral(ch); return state.tokenize(stream, state); } else if ((((support.nCharCast == true && (ch == "n" || ch == "N")) || (support.charsetCast == true && ch == "_" && stream.match(/[a-z][a-z0-9]*/i))) && (stream.peek() == "'" || stream.peek() == '"'))) { // charset casting: _utf8'str', N'str', n'str' // ref: http://dev.mysql.com/doc/refman/5.5/en/string-literals.html return "keyword"; } else if (/^[\(\),\;\[\]]/.test(ch)) { // no highlighting return null; } else if (support.commentSlashSlash && ch == "/" && stream.eat("/")) { // 1-line comment stream.skipToEnd(); return "comment"; } else if ((support.commentHash && ch == "#") || (ch == "-" && stream.eat("-") && (!support.commentSpaceRequired || stream.eat(" ")))) { // 1-line comments // ref: https://kb.askmonty.org/en/comment-syntax/ stream.skipToEnd(); return "comment"; } else if (ch == "/" && stream.eat("*")) { // multi-line comments // ref: https://kb.askmonty.org/en/comment-syntax/ state.tokenize = tokenComment; return state.tokenize(stream, state); } else if (ch == ".") { // .1 for 0.1 if (support.zerolessFloat == true && stream.match(/^(?:\d+(?:e[+-]?\d+)?)/i)) { return "number"; } // .table_name (ODBC) // // ref: http://dev.mysql.com/doc/refman/5.6/en/identifier-qualifiers.html if (support.ODBCdotTable == true && stream.match(/^[a-zA-Z_]+/)) { return "variable-2"; } } else if (operatorChars.test(ch)) { // operators stream.eatWhile(operatorChars); return null; } else if (ch == '{' && (stream.match(/^( )*(d|D|t|T|ts|TS)( )*'[^']*'( )*}/) || stream.match(/^( )*(d|D|t|T|ts|TS)( )*"[^"]*"( )*}/))) { // dates (weird ODBC syntax) // ref: http://dev.mysql.com/doc/refman/5.5/en/date-and-time-literals.html return "number"; } else { stream.eatWhile(/^[_\w\d]/); var word = stream.current().toLowerCase(); // dates (standard SQL syntax) // ref: http://dev.mysql.com/doc/refman/5.5/en/date-and-time-literals.html if (dateSQL.hasOwnProperty(word) && (stream.match(/^( )+'[^']*'/) || stream.match(/^( )+"[^"]*"/))) return "number"; if (atoms.hasOwnProperty(word)) return "atom"; if (builtin.hasOwnProperty(word)) return "builtin"; if (keywords.hasOwnProperty(word)) return "keyword"; if (client.hasOwnProperty(word)) return "string-2"; return null; } } // 'string', with char specified in quote escaped by '\' function tokenLiteral(quote) { return function(stream, state) { var escaped = false, ch; while ((ch = stream.next()) != null) { if (ch == quote && !escaped) { state.tokenize = tokenBase; break; } escaped = !escaped && ch == "\\"; } return "string"; }; } function tokenComment(stream, state) { while (true) { if (stream.skipTo("*")) { stream.next(); if (stream.eat("/")) { state.tokenize = tokenBase; break; } } else { stream.skipToEnd(); break; } } return "comment"; } function pushContext(stream, state, type) { state.context = { prev: state.context, indent: stream.indentation(), col: stream.column(), type: type }; } function popContext(state) { state.indent = state.context.indent; state.context = state.context.prev; } return { startState: function() { return {tokenize: tokenBase, context: null}; }, token: function(stream, state) { if (stream.sol()) { if (state.context && state.context.align == null) state.context.align = false; } if (stream.eatSpace()) return null; var style = state.tokenize(stream, state); if (style == "comment") return style; if (state.context && state.context.align == null) state.context.align = true; var tok = stream.current(); if (tok == "(") pushContext(stream, state, ")"); else if (tok == "[") pushContext(stream, state, "]"); else if (state.context && state.context.type == tok) popContext(state); return style; }, indent: function(state, textAfter) { var cx = state.context; if (!cx) return CodeMirror.Pass; var closing = textAfter.charAt(0) == cx.type; if (cx.align) return cx.col + (closing ? 0 : 1); else return cx.indent + (closing ? 0 : config.indentUnit); }, blockCommentStart: "/*", blockCommentEnd: "*/", lineComment: support.commentSlashSlash ? "//" : support.commentHash ? "#" : null }; }); (function() { "use strict"; // `identifier` function hookIdentifier(stream) { // MySQL/MariaDB identifiers // ref: http://dev.mysql.com/doc/refman/5.6/en/identifier-qualifiers.html var ch; while ((ch = stream.next()) != null) { if (ch == "`" && !stream.eat("`")) return "variable-2"; } stream.backUp(stream.current().length - 1); return stream.eatWhile(/\w/) ? "variable-2" : null; } // variable token function hookVar(stream) { // variables // @@prefix.varName @varName // varName can be quoted with ` or ' or " // ref: http://dev.mysql.com/doc/refman/5.5/en/user-variables.html if (stream.eat("@")) { stream.match(/^session\./); stream.match(/^local\./); stream.match(/^global\./); } if (stream.eat("'")) { stream.match(/^.*'/); return "variable-2"; } else if (stream.eat('"')) { stream.match(/^.*"/); return "variable-2"; } else if (stream.eat("`")) { stream.match(/^.*`/); return "variable-2"; } else if (stream.match(/^[0-9a-zA-Z$\.\_]+/)) { return "variable-2"; } return null; }; // short client keyword token function hookClient(stream) { // \N means NULL // ref: http://dev.mysql.com/doc/refman/5.5/en/null-values.html if (stream.eat("N")) { return "atom"; } // \g, etc // ref: http://dev.mysql.com/doc/refman/5.5/en/mysql-commands.html return stream.match(/^[a-zA-Z.#!?]/) ? "variable-2" : null; } // these keywords are used by all SQL dialects (however, a mode can still overwrite it) var sqlKeywords = "alter and as asc between by count create delete desc distinct drop from group having in insert into is join like not on or order select set table union update values where limit "; // turn a space-separated list into an array function set(str) { var obj = {}, words = str.split(" "); for (var i = 0; i < words.length; ++i) obj[words[i]] = true; return obj; } // A generic SQL Mode. It's not a standard, it just try to support what is generally supported CodeMirror.defineMIME("text/x-sql", { name: "sql", keywords: set(sqlKeywords + "begin"), builtin: set("bool boolean bit blob enum long longblob longtext medium mediumblob mediumint mediumtext time timestamp tinyblob tinyint tinytext text bigint int int1 int2 int3 int4 int8 integer float float4 float8 double char varbinary varchar varcharacter precision real date datetime year unsigned signed decimal numeric"), atoms: set("false true null unknown"), operatorChars: /^[*+\-%<>!=]/, dateSQL: set("date time timestamp"), support: set("ODBCdotTable doubleQuote binaryNumber hexNumber") }); CodeMirror.defineMIME("text/x-mssql", { name: "sql", client: set("charset clear connect edit ego exit go help nopager notee nowarning pager print prompt quit rehash source status system tee"), keywords: set(sqlKeywords + "begin trigger proc view index for add constraint key primary foreign collate clustered nonclustered declare"), builtin: set("bigint numeric bit smallint decimal smallmoney int tinyint money float real char varchar text nchar nvarchar ntext binary varbinary image cursor timestamp hierarchyid uniqueidentifier sql_variant xml table "), atoms: set("false true null unknown"), operatorChars: /^[*+\-%<>!=]/, dateSQL: set("date datetimeoffset datetime2 smalldatetime datetime time"), hooks: { "@": hookVar } }); CodeMirror.defineMIME("text/x-mysql", { name: "sql", client: set("charset clear connect edit ego exit go help nopager notee nowarning pager print prompt quit rehash source status system tee"), keywords: set(sqlKeywords + "accessible action add after algorithm all analyze asensitive at authors auto_increment autocommit avg avg_row_length before binary binlog both btree cache call cascade cascaded case catalog_name chain change changed character check checkpoint checksum class_origin client_statistics close coalesce code collate collation collations column columns comment commit committed completion concurrent condition connection consistent constraint contains continue contributors convert cross current current_date current_time current_timestamp current_user cursor data database databases day_hour day_microsecond day_minute day_second deallocate dec declare default delay_key_write delayed delimiter des_key_file describe deterministic dev_pop dev_samp deviance diagnostics directory disable discard distinctrow div dual dumpfile each elseif enable enclosed end ends engine engines enum errors escape escaped even event events every execute exists exit explain extended fast fetch field fields first flush for force foreign found_rows full fulltext function general get global grant grants group group_concat handler hash help high_priority hosts hour_microsecond hour_minute hour_second if ignore ignore_server_ids import index index_statistics infile inner innodb inout insensitive insert_method install interval invoker isolation iterate key keys kill language last leading leave left level limit linear lines list load local localtime localtimestamp lock logs low_priority master master_heartbeat_period master_ssl_verify_server_cert masters match max max_rows maxvalue message_text middleint migrate min min_rows minute_microsecond minute_second mod mode modifies modify mutex mysql_errno natural next no no_write_to_binlog offline offset one online open optimize option optionally out outer outfile pack_keys parser partition partitions password phase plugin plugins prepare preserve prev primary privileges procedure processlist profile profiles purge query quick range read read_write reads real rebuild recover references regexp relaylog release remove rename reorganize repair repeatable replace require resignal restrict resume return returns revoke right rlike rollback rollup row row_format rtree savepoint schedule schema schema_name schemas second_microsecond security sensitive separator serializable server session share show signal slave slow smallint snapshot soname spatial specific sql sql_big_result sql_buffer_result sql_cache sql_calc_found_rows sql_no_cache sql_small_result sqlexception sqlstate sqlwarning ssl start starting starts status std stddev stddev_pop stddev_samp storage straight_join subclass_origin sum suspend table_name table_statistics tables tablespace temporary terminated to trailing transaction trigger triggers truncate uncommitted undo uninstall unique unlock upgrade usage use use_frm user user_resources user_statistics using utc_date utc_time utc_timestamp value variables varying view views warnings when while with work write xa xor year_month zerofill begin do then else loop repeat"), builtin: set("bool boolean bit blob decimal double float long longblob longtext medium mediumblob mediumint mediumtext time timestamp tinyblob tinyint tinytext text bigint int int1 int2 int3 int4 int8 integer float float4 float8 double char varbinary varchar varcharacter precision date datetime year unsigned signed numeric"), atoms: set("false true null unknown"), operatorChars: /^[*+\-%<>!=&|^]/, dateSQL: set("date time timestamp"), support: set("ODBCdotTable decimallessFloat zerolessFloat binaryNumber hexNumber doubleQuote nCharCast charsetCast commentHash commentSpaceRequired"), hooks: { "@": hookVar, "`": hookIdentifier, "\\": hookClient } }); CodeMirror.defineMIME("text/x-mariadb", { name: "sql", client: set("charset clear connect edit ego exit go help nopager notee nowarning pager print prompt quit rehash source status system tee"), keywords: set(sqlKeywords + "accessible action add after algorithm all always analyze asensitive at authors auto_increment autocommit avg avg_row_length before binary binlog both btree cache call cascade cascaded case catalog_name chain change changed character check checkpoint checksum class_origin client_statistics close coalesce code collate collation collations column columns comment commit committed completion concurrent condition connection consistent constraint contains continue contributors convert cross current current_date current_time current_timestamp current_user cursor data database databases day_hour day_microsecond day_minute day_second deallocate dec declare default delay_key_write delayed delimiter des_key_file describe deterministic dev_pop dev_samp deviance diagnostics directory disable discard distinctrow div dual dumpfile each elseif enable enclosed end ends engine engines enum errors escape escaped even event events every execute exists exit explain extended fast fetch field fields first flush for force foreign found_rows full fulltext function general generated get global grant grants group groupby_concat handler hard hash help high_priority hosts hour_microsecond hour_minute hour_second if ignore ignore_server_ids import index index_statistics infile inner innodb inout insensitive insert_method install interval invoker isolation iterate key keys kill language last leading leave left level limit linear lines list load local localtime localtimestamp lock logs low_priority master master_heartbeat_period master_ssl_verify_server_cert masters match max max_rows maxvalue message_text middleint migrate min min_rows minute_microsecond minute_second mod mode modifies modify mutex mysql_errno natural next no no_write_to_binlog offline offset one online open optimize option optionally out outer outfile pack_keys parser partition partitions password persistent phase plugin plugins prepare preserve prev primary privileges procedure processlist profile profiles purge query quick range read read_write reads real rebuild recover references regexp relaylog release remove rename reorganize repair repeatable replace require resignal restrict resume return returns revoke right rlike rollback rollup row row_format rtree savepoint schedule schema schema_name schemas second_microsecond security sensitive separator serializable server session share show shutdown signal slave slow smallint snapshot soft soname spatial specific sql sql_big_result sql_buffer_result sql_cache sql_calc_found_rows sql_no_cache sql_small_result sqlexception sqlstate sqlwarning ssl start starting starts status std stddev stddev_pop stddev_samp storage straight_join subclass_origin sum suspend table_name table_statistics tables tablespace temporary terminated to trailing transaction trigger triggers truncate uncommitted undo uninstall unique unlock upgrade usage use use_frm user user_resources user_statistics using utc_date utc_time utc_timestamp value variables varying view views virtual warnings when while with work write xa xor year_month zerofill begin do then else loop repeat"), builtin: set("bool boolean bit blob decimal double float long longblob longtext medium mediumblob mediumint mediumtext time timestamp tinyblob tinyint tinytext text bigint int int1 int2 int3 int4 int8 integer float float4 float8 double char varbinary varchar varcharacter precision date datetime year unsigned signed numeric"), atoms: set("false true null unknown"), operatorChars: /^[*+\-%<>!=&|^]/, dateSQL: set("date time timestamp"), support: set("ODBCdotTable decimallessFloat zerolessFloat binaryNumber hexNumber doubleQuote nCharCast charsetCast commentHash commentSpaceRequired"), hooks: { "@": hookVar, "`": hookIdentifier, "\\": hookClient } }); // the query language used by Apache Cassandra is called CQL, but this mime type // is called Cassandra to avoid confusion with Contextual Query Language CodeMirror.defineMIME("text/x-cassandra", { name: "sql", client: { }, keywords: set("add all allow alter and any apply as asc authorize batch begin by clustering columnfamily compact consistency count create custom delete desc distinct drop each_quorum exists filtering from grant if in index insert into key keyspace keyspaces level limit local_one local_quorum modify nan norecursive nosuperuser not of on one order password permission permissions primary quorum rename revoke schema select set storage superuser table three to token truncate ttl two type unlogged update use user users using values where with writetime"), builtin: set("ascii bigint blob boolean counter decimal double float frozen inet int list map static text timestamp timeuuid tuple uuid varchar varint"), atoms: set("false true infinity NaN"), operatorChars: /^[<>=]/, dateSQL: { }, support: set("commentSlashSlash decimallessFloat"), hooks: { } }); // this is based on Peter Raganitsch's 'plsql' mode CodeMirror.defineMIME("text/x-plsql", { name: "sql", client: set("appinfo arraysize autocommit autoprint autorecovery autotrace blockterminator break btitle cmdsep colsep compatibility compute concat copycommit copytypecheck define describe echo editfile embedded escape exec execute feedback flagger flush heading headsep instance linesize lno loboffset logsource long longchunksize markup native newpage numformat numwidth pagesize pause pno recsep recsepchar release repfooter repheader serveroutput shiftinout show showmode size spool sqlblanklines sqlcase sqlcode sqlcontinue sqlnumber sqlpluscompatibility sqlprefix sqlprompt sqlterminator suffix tab term termout time timing trimout trimspool ttitle underline verify version wrap"), keywords: set("abort accept access add all alter and any array arraylen as asc assert assign at attributes audit authorization avg base_table begin between binary_integer body boolean by case cast char char_base check close cluster clusters colauth column comment commit compress connect connected constant constraint crash create current currval cursor data_base database date dba deallocate debugoff debugon decimal declare default definition delay delete desc digits dispose distinct do drop else elseif elsif enable end entry escape exception exception_init exchange exclusive exists exit external fast fetch file for force form from function generic goto grant group having identified if immediate in increment index indexes indicator initial initrans insert interface intersect into is key level library like limited local lock log logging long loop master maxextents maxtrans member minextents minus mislabel mode modify multiset new next no noaudit nocompress nologging noparallel not nowait number_base object of off offline on online only open option or order out package parallel partition pctfree pctincrease pctused pls_integer positive positiven pragma primary prior private privileges procedure public raise range raw read rebuild record ref references refresh release rename replace resource restrict return returning returns reverse revoke rollback row rowid rowlabel rownum rows run savepoint schema segment select separate session set share snapshot some space split sql start statement storage subtype successful synonym tabauth table tables tablespace task terminate then to trigger truncate type union unique unlimited unrecoverable unusable update use using validate value values variable view views when whenever where while with work"), builtin: set("abs acos add_months ascii asin atan atan2 average bfile bfilename bigserial bit blob ceil character chartorowid chr clob concat convert cos cosh count dec decode deref dual dump dup_val_on_index empty error exp false float floor found glb greatest hextoraw initcap instr instrb int integer isopen last_day least length lengthb ln lower lpad ltrim lub make_ref max min mlslabel mod months_between natural naturaln nchar nclob new_time next_day nextval nls_charset_decl_len nls_charset_id nls_charset_name nls_initcap nls_lower nls_sort nls_upper nlssort no_data_found notfound null number numeric nvarchar2 nvl others power rawtohex real reftohex round rowcount rowidtochar rowtype rpad rtrim serial sign signtype sin sinh smallint soundex sqlcode sqlerrm sqrt stddev string substr substrb sum sysdate tan tanh to_char text to_date to_label to_multi_byte to_number to_single_byte translate true trunc uid unlogged upper user userenv varchar varchar2 variance varying vsize xml"), operatorChars: /^[*+\-%<>!=~]/, dateSQL: set("date time timestamp"), support: set("doubleQuote nCharCast zerolessFloat binaryNumber hexNumber") }); // Created to support specific hive keywords CodeMirror.defineMIME("text/x-hive", { name: "sql", keywords: set("select alter $elem$ $key$ $value$ add after all analyze and archive as asc before between binary both bucket buckets by cascade case cast change cluster clustered clusterstatus collection column columns comment compute concatenate continue create cross cursor data database databases dbproperties deferred delete delimited desc describe directory disable distinct distribute drop else enable end escaped exclusive exists explain export extended external false fetch fields fileformat first format formatted from full function functions grant group having hold_ddltime idxproperties if import in index indexes inpath inputdriver inputformat insert intersect into is items join keys lateral left like limit lines load local location lock locks mapjoin materialized minus msck no_drop nocompress not of offline on option or order out outer outputdriver outputformat overwrite partition partitioned partitions percent plus preserve procedure purge range rcfile read readonly reads rebuild recordreader recordwriter recover reduce regexp rename repair replace restrict revoke right rlike row schema schemas semi sequencefile serde serdeproperties set shared show show_database sort sorted ssl statistics stored streamtable table tables tablesample tblproperties temporary terminated textfile then tmp to touch transform trigger true unarchive undo union uniquejoin unlock update use using utc utc_tmestamp view when where while with"), builtin: set("bool boolean long timestamp tinyint smallint bigint int float double date datetime unsigned string array struct map uniontype"), atoms: set("false true null unknown"), operatorChars: /^[*+\-%<>!=]/, dateSQL: set("date timestamp"), support: set("ODBCdotTable doubleQuote binaryNumber hexNumber") }); CodeMirror.defineMIME("text/x-pgsql", { name: "sql", client: set("source"), // http://www.postgresql.org/docs/9.5/static/sql-keywords-appendix.html keywords: set(sqlKeywords + "a abort abs absent absolute access according action ada add admin after aggregate all allocate also always analyse analyze any are array array_agg array_max_cardinality asensitive assertion assignment asymmetric at atomic attribute attributes authorization avg backward base64 before begin begin_frame begin_partition bernoulli binary bit_length blob blocked bom both breadth c cache call called cardinality cascade cascaded case cast catalog catalog_name ceil ceiling chain characteristics characters character_length character_set_catalog character_set_name character_set_schema char_length check checkpoint class class_origin clob close cluster coalesce cobol collate collation collation_catalog collation_name collation_schema collect column columns column_name command_function command_function_code comment comments commit committed concurrently condition condition_number configuration conflict connect connection connection_name constraint constraints constraint_catalog constraint_name constraint_schema constructor contains content continue control conversion convert copy corr corresponding cost covar_pop covar_samp cross csv cube cume_dist current current_catalog current_date current_default_transform_group current_path current_role current_row current_schema current_time current_timestamp current_transform_group_for_type current_user cursor cursor_name cycle data database datalink datetime_interval_code datetime_interval_precision day db deallocate dec declare default defaults deferrable deferred defined definer degree delimiter delimiters dense_rank depth deref derived describe descriptor deterministic diagnostics dictionary disable discard disconnect dispatch dlnewcopy dlpreviouscopy dlurlcomplete dlurlcompleteonly dlurlcompletewrite dlurlpath dlurlpathonly dlurlpathwrite dlurlscheme dlurlserver dlvalue do document domain dynamic dynamic_function dynamic_function_code each element else empty enable encoding encrypted end end-exec end_frame end_partition enforced enum equals escape event every except exception exclude excluding exclusive exec execute exists exp explain expression extension external extract false family fetch file filter final first first_value flag float floor following for force foreign fortran forward found frame_row free freeze fs full function functions fusion g general generated get global go goto grant granted greatest grouping groups handler header hex hierarchy hold hour id identity if ignore ilike immediate immediately immutable implementation implicit import including increment indent index indexes indicator inherit inherits initially inline inner inout input insensitive instance instantiable instead integrity intersect intersection invoker isnull isolation k key key_member key_type label lag language large last last_value lateral lead leading leakproof least left length level library like_regex link listen ln load local localtime localtimestamp location locator lock locked logged lower m map mapping match matched materialized max maxvalue max_cardinality member merge message_length message_octet_length message_text method min minute minvalue mod mode modifies module month more move multiset mumps name names namespace national natural nchar nclob nesting new next nfc nfd nfkc nfkd nil no none normalize normalized nothing notify notnull nowait nth_value ntile null nullable nullif nulls number object occurrences_regex octets octet_length of off offset oids old only open operator option options ordering ordinality others out outer output over overlaps overlay overriding owned owner p pad parameter parameter_mode parameter_name parameter_ordinal_position parameter_specific_catalog parameter_specific_name parameter_specific_schema parser partial partition pascal passing passthrough password percent percentile_cont percentile_disc percent_rank period permission placing plans pli policy portion position position_regex power precedes preceding prepare prepared preserve primary prior privileges procedural procedure program public quote range rank read reads reassign recheck recovery recursive ref references referencing refresh regr_avgx regr_avgy regr_count regr_intercept regr_r2 regr_slope regr_sxx regr_sxy regr_syy reindex relative release rename repeatable replace replica requiring reset respect restart restore restrict result return returned_cardinality returned_length returned_octet_length returned_sqlstate returning returns revoke right role rollback rollup routine routine_catalog routine_name routine_schema row rows row_count row_number rule savepoint scale schema schema_name scope scope_catalog scope_name scope_schema scroll search second section security selective self sensitive sequence sequences serializable server server_name session session_user setof sets share show similar simple size skip snapshot some source space specific specifictype specific_name sql sqlcode sqlerror sqlexception sqlstate sqlwarning sqrt stable standalone start state statement static statistics stddev_pop stddev_samp stdin stdout storage strict strip structure style subclass_origin submultiset substring substring_regex succeeds sum symmetric sysid system system_time system_user t tables tablesample tablespace table_name temp template temporary then ties timezone_hour timezone_minute to token top_level_count trailing transaction transactions_committed transactions_rolled_back transaction_active transform transforms translate translate_regex translation treat trigger trigger_catalog trigger_name trigger_schema trim trim_array true truncate trusted type types uescape unbounded uncommitted under unencrypted unique unknown unlink unlisten unlogged unnamed unnest until untyped upper uri usage user user_defined_type_catalog user_defined_type_code user_defined_type_name user_defined_type_schema using vacuum valid validate validator value value_of varbinary variadic var_pop var_samp verbose version versioning view views volatile when whenever whitespace width_bucket window within work wrapper write xmlagg xmlattributes xmlbinary xmlcast xmlcomment xmlconcat xmldeclaration xmldocument xmlelement xmlexists xmlforest xmliterate xmlnamespaces xmlparse xmlpi xmlquery xmlroot xmlschema xmlserialize xmltable xmltext xmlvalidate year yes loop repeat"), // http://www.postgresql.org/docs/9.5/static/datatype.html builtin: set("bigint int8 bigserial serial8 bit varying varbit boolean bool box bytea character char varchar cidr circle date double precision float8 inet integer int int4 interval json jsonb line lseg macaddr money numeric decimal path pg_lsn point polygon real float4 smallint int2 smallserial serial2 serial serial4 text time without zone with timetz timestamp timestamptz tsquery tsvector txid_snapshot uuid xml"), atoms: set("false true null unknown"), operatorChars: /^[*+\-%<>!=&|^\/#@?~]/, dateSQL: set("date time timestamp"), support: set("ODBCdotTable decimallessFloat zerolessFloat binaryNumber hexNumber nCharCast charsetCast") }); // Google's SQL-like query language, GQL CodeMirror.defineMIME("text/x-gql", { name: "sql", keywords: set("ancestor and asc by contains desc descendant distinct from group has in is limit offset on order select superset where"), atoms: set("false true"), builtin: set("blob datetime first key __key__ string integer double boolean null"), operatorChars: /^[*+\-%<>!=]/ }); }()); }); /* How Properties of Mime Types are used by SQL Mode ================================================= keywords: A list of keywords you want to be highlighted. builtin: A list of builtin types you want to be highlighted (if you want types to be of class "builtin" instead of "keyword"). operatorChars: All characters that must be handled as operators. client: Commands parsed and executed by the client (not the server). support: A list of supported syntaxes which are not common, but are supported by more than 1 DBMS. * ODBCdotTable: .tableName * zerolessFloat: .1 * doubleQuote * nCharCast: N'string' * charsetCast: _utf8'string' * commentHash: use # char for comments * commentSlashSlash: use // for comments * commentSpaceRequired: require a space after -- for comments atoms: Keywords that must be highlighted as atoms,. Some DBMS's support more atoms than others: UNKNOWN, INFINITY, UNDERFLOW, NaN... dateSQL: Used for date/time SQL standard syntax, because not all DBMS's support same temporal types. */ PK!–u9##Ifile-manager-advanced/application/library/codemirror/mode/sass/index.htmlnu„[µü¤ CodeMirror: Sass mode

    Sass mode

    MIME types defined: text/x-sass.

    PK!2ƒK'K'Ffile-manager-advanced/application/library/codemirror/mode/sass/sass.jsnu„[µü¤// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMode("sass", function(config) { function tokenRegexp(words) { return new RegExp("^" + words.join("|")); } var keywords = ["true", "false", "null", "auto"]; var keywordsRegexp = new RegExp("^" + keywords.join("|")); var operators = ["\\(", "\\)", "=", ">", "<", "==", ">=", "<=", "\\+", "-", "\\!=", "/", "\\*", "%", "and", "or", "not", ";","\\{","\\}",":"]; var opRegexp = tokenRegexp(operators); var pseudoElementsRegexp = /^::?[a-zA-Z_][\w\-]*/; function urlTokens(stream, state) { var ch = stream.peek(); if (ch === ")") { stream.next(); state.tokenizer = tokenBase; return "operator"; } else if (ch === "(") { stream.next(); stream.eatSpace(); return "operator"; } else if (ch === "'" || ch === '"') { state.tokenizer = buildStringTokenizer(stream.next()); return "string"; } else { state.tokenizer = buildStringTokenizer(")", false); return "string"; } } function comment(indentation, multiLine) { return function(stream, state) { if (stream.sol() && stream.indentation() <= indentation) { state.tokenizer = tokenBase; return tokenBase(stream, state); } if (multiLine && stream.skipTo("*/")) { stream.next(); stream.next(); state.tokenizer = tokenBase; } else { stream.skipToEnd(); } return "comment"; }; } function buildStringTokenizer(quote, greedy) { if (greedy == null) { greedy = true; } function stringTokenizer(stream, state) { var nextChar = stream.next(); var peekChar = stream.peek(); var previousChar = stream.string.charAt(stream.pos-2); var endingString = ((nextChar !== "\\" && peekChar === quote) || (nextChar === quote && previousChar !== "\\")); if (endingString) { if (nextChar !== quote && greedy) { stream.next(); } state.tokenizer = tokenBase; return "string"; } else if (nextChar === "#" && peekChar === "{") { state.tokenizer = buildInterpolationTokenizer(stringTokenizer); stream.next(); return "operator"; } else { return "string"; } } return stringTokenizer; } function buildInterpolationTokenizer(currentTokenizer) { return function(stream, state) { if (stream.peek() === "}") { stream.next(); state.tokenizer = currentTokenizer; return "operator"; } else { return tokenBase(stream, state); } }; } function indent(state) { if (state.indentCount == 0) { state.indentCount++; var lastScopeOffset = state.scopes[0].offset; var currentOffset = lastScopeOffset + config.indentUnit; state.scopes.unshift({ offset:currentOffset }); } } function dedent(state) { if (state.scopes.length == 1) return; state.scopes.shift(); } function tokenBase(stream, state) { var ch = stream.peek(); // Comment if (stream.match("/*")) { state.tokenizer = comment(stream.indentation(), true); return state.tokenizer(stream, state); } if (stream.match("//")) { state.tokenizer = comment(stream.indentation(), false); return state.tokenizer(stream, state); } // Interpolation if (stream.match("#{")) { state.tokenizer = buildInterpolationTokenizer(tokenBase); return "operator"; } // Strings if (ch === '"' || ch === "'") { stream.next(); state.tokenizer = buildStringTokenizer(ch); return "string"; } if(!state.cursorHalf){// state.cursorHalf === 0 // first half i.e. before : for key-value pairs // including selectors if (ch === ".") { stream.next(); if (stream.match(/^[\w-]+/)) { indent(state); return "atom"; } else if (stream.peek() === "#") { indent(state); return "atom"; } } if (ch === "#") { stream.next(); // ID selectors if (stream.match(/^[\w-]+/)) { indent(state); return "atom"; } if (stream.peek() === "#") { indent(state); return "atom"; } } // Variables if (ch === "$") { stream.next(); stream.eatWhile(/[\w-]/); return "variable-2"; } // Numbers if (stream.match(/^-?[0-9\.]+/)) return "number"; // Units if (stream.match(/^(px|em|in)\b/)) return "unit"; if (stream.match(keywordsRegexp)) return "keyword"; if (stream.match(/^url/) && stream.peek() === "(") { state.tokenizer = urlTokens; return "atom"; } if (ch === "=") { // Match shortcut mixin definition if (stream.match(/^=[\w-]+/)) { indent(state); return "meta"; } } if (ch === "+") { // Match shortcut mixin definition if (stream.match(/^\+[\w-]+/)){ return "variable-3"; } } if(ch === "@"){ if(stream.match(/@extend/)){ if(!stream.match(/\s*[\w]/)) dedent(state); } } // Indent Directives if (stream.match(/^@(else if|if|media|else|for|each|while|mixin|function)/)) { indent(state); return "meta"; } // Other Directives if (ch === "@") { stream.next(); stream.eatWhile(/[\w-]/); return "meta"; } if (stream.eatWhile(/[\w-]/)){ if(stream.match(/ *: *[\w-\+\$#!\("']/,false)){ return "property"; } else if(stream.match(/ *:/,false)){ indent(state); state.cursorHalf = 1; return "atom"; } else if(stream.match(/ *,/,false)){ return "atom"; } else{ indent(state); return "atom"; } } if(ch === ":"){ if (stream.match(pseudoElementsRegexp)){ // could be a pseudo-element return "keyword"; } stream.next(); state.cursorHalf=1; return "operator"; } } // cursorHalf===0 ends here else{ if (ch === "#") { stream.next(); // Hex numbers if (stream.match(/[0-9a-fA-F]{6}|[0-9a-fA-F]{3}/)){ if(!stream.peek()){ state.cursorHalf = 0; } return "number"; } } // Numbers if (stream.match(/^-?[0-9\.]+/)){ if(!stream.peek()){ state.cursorHalf = 0; } return "number"; } // Units if (stream.match(/^(px|em|in)\b/)){ if(!stream.peek()){ state.cursorHalf = 0; } return "unit"; } if (stream.match(keywordsRegexp)){ if(!stream.peek()){ state.cursorHalf = 0; } return "keyword"; } if (stream.match(/^url/) && stream.peek() === "(") { state.tokenizer = urlTokens; if(!stream.peek()){ state.cursorHalf = 0; } return "atom"; } // Variables if (ch === "$") { stream.next(); stream.eatWhile(/[\w-]/); if(!stream.peek()){ state.cursorHalf = 0; } return "variable-3"; } // bang character for !important, !default, etc. if (ch === "!") { stream.next(); if(!stream.peek()){ state.cursorHalf = 0; } return stream.match(/^[\w]+/) ? "keyword": "operator"; } if (stream.match(opRegexp)){ if(!stream.peek()){ state.cursorHalf = 0; } return "operator"; } // attributes if (stream.eatWhile(/[\w-]/)) { if(!stream.peek()){ state.cursorHalf = 0; } return "attribute"; } //stream.eatSpace(); if(!stream.peek()){ state.cursorHalf = 0; return null; } } // else ends here if (stream.match(opRegexp)) return "operator"; // If we haven't returned by now, we move 1 character // and return an error stream.next(); return null; } function tokenLexer(stream, state) { if (stream.sol()) state.indentCount = 0; var style = state.tokenizer(stream, state); var current = stream.current(); if (current === "@return" || current === "}"){ dedent(state); } if (style !== null) { var startOfToken = stream.pos - current.length; var withCurrentIndent = startOfToken + (config.indentUnit * state.indentCount); var newScopes = []; for (var i = 0; i < state.scopes.length; i++) { var scope = state.scopes[i]; if (scope.offset <= withCurrentIndent) newScopes.push(scope); } state.scopes = newScopes; } return style; } return { startState: function() { return { tokenizer: tokenBase, scopes: [{offset: 0, type: "sass"}], indentCount: 0, cursorHalf: 0, // cursor half tells us if cursor lies after (1) // or before (0) colon (well... more or less) definedVars: [], definedMixins: [] }; }, token: function(stream, state) { var style = tokenLexer(stream, state); state.lastToken = { style: style, content: stream.current() }; return style; }, indent: function(state) { return state.scopes[0].offset; } }; }); CodeMirror.defineMIME("text/x-sass", "sass"); }); PK!î_Æ~J,J,Lfile-manager-advanced/application/library/codemirror/mode/crystal/crystal.jsnu„[µü¤// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMode("crystal", function(config) { function wordRegExp(words, end) { return new RegExp((end ? "" : "^") + "(?:" + words.join("|") + ")" + (end ? "$" : "\\b")); } function chain(tokenize, stream, state) { state.tokenize.push(tokenize); return tokenize(stream, state); } var operators = /^(?:[-+/%|&^]|\*\*?|[<>]{2})/; var conditionalOperators = /^(?:[=!]~|===|<=>|[<>=!]=?|[|&]{2}|~)/; var indexingOperators = /^(?:\[\][?=]?)/; var anotherOperators = /^(?:\.(?:\.{2})?|->|[?:])/; var idents = /^[a-z_\u009F-\uFFFF][a-zA-Z0-9_\u009F-\uFFFF]*/; var types = /^[A-Z_\u009F-\uFFFF][a-zA-Z0-9_\u009F-\uFFFF]*/; var keywords = wordRegExp([ "abstract", "alias", "as", "asm", "begin", "break", "case", "class", "def", "do", "else", "elsif", "end", "ensure", "enum", "extend", "for", "fun", "if", "ifdef", "include", "instance_sizeof", "lib", "macro", "module", "next", "of", "out", "pointerof", "private", "protected", "rescue", "return", "require", "sizeof", "struct", "super", "then", "type", "typeof", "union", "unless", "until", "when", "while", "with", "yield", "__DIR__", "__FILE__", "__LINE__" ]); var atomWords = wordRegExp(["true", "false", "nil", "self"]); var indentKeywordsArray = [ "def", "fun", "macro", "class", "module", "struct", "lib", "enum", "union", "if", "unless", "case", "while", "until", "begin", "then", "do", "for", "ifdef" ]; var indentKeywords = wordRegExp(indentKeywordsArray); var dedentKeywordsArray = [ "end", "else", "elsif", "rescue", "ensure" ]; var dedentKeywords = wordRegExp(dedentKeywordsArray); var dedentPunctualsArray = ["\\)", "\\}", "\\]"]; var dedentPunctuals = new RegExp("^(?:" + dedentPunctualsArray.join("|") + ")$"); var nextTokenizer = { "def": tokenFollowIdent, "fun": tokenFollowIdent, "macro": tokenMacroDef, "class": tokenFollowType, "module": tokenFollowType, "struct": tokenFollowType, "lib": tokenFollowType, "enum": tokenFollowType, "union": tokenFollowType }; var matching = {"[": "]", "{": "}", "(": ")", "<": ">"}; function tokenBase(stream, state) { if (stream.eatSpace()) { return null; } // Macros if (state.lastToken != "\\" && stream.match("{%", false)) { return chain(tokenMacro("%", "%"), stream, state); } if (state.lastToken != "\\" && stream.match("{{", false)) { return chain(tokenMacro("{", "}"), stream, state); } // Comments if (stream.peek() == "#") { stream.skipToEnd(); return "comment"; } // Variables and keywords var matched; if (stream.match(idents)) { stream.eat(/[?!]/); matched = stream.current(); if (stream.eat(":")) { return "atom"; } else if (state.lastToken == ".") { return "property"; } else if (keywords.test(matched)) { if (state.lastToken != "abstract" && indentKeywords.test(matched)) { if (!(matched == "fun" && state.blocks.indexOf("lib") >= 0)) { state.blocks.push(matched); state.currentIndent += 1; } } else if (dedentKeywords.test(matched)) { state.blocks.pop(); state.currentIndent -= 1; } if (nextTokenizer.hasOwnProperty(matched)) { state.tokenize.push(nextTokenizer[matched]); } return "keyword"; } else if (atomWords.test(matched)) { return "atom"; } return "variable"; } // Class variables and instance variables // or attributes if (stream.eat("@")) { if (stream.peek() == "[") { return chain(tokenNest("[", "]", "meta"), stream, state); } stream.eat("@"); stream.match(idents) || stream.match(types); return "variable-2"; } // Global variables if (stream.eat("$")) { stream.eat(/[0-9]+|\?/) || stream.match(idents) || stream.match(types); return "variable-3"; } // Constants and types if (stream.match(types)) { return "tag"; } // Symbols or ':' operator if (stream.eat(":")) { if (stream.eat("\"")) { return chain(tokenQuote("\"", "atom", false), stream, state); } else if (stream.match(idents) || stream.match(types) || stream.match(operators) || stream.match(conditionalOperators) || stream.match(indexingOperators)) { return "atom"; } stream.eat(":"); return "operator"; } // Strings if (stream.eat("\"")) { return chain(tokenQuote("\"", "string", true), stream, state); } // Strings or regexps or macro variables or '%' operator if (stream.peek() == "%") { var style = "string"; var embed = true; var delim; if (stream.match("%r")) { // Regexps style = "string-2"; delim = stream.next(); } else if (stream.match("%w")) { embed = false; delim = stream.next(); } else { if(delim = stream.match(/^%([^\w\s=])/)) { delim = delim[1]; } else if (stream.match(/^%[a-zA-Z0-9_\u009F-\uFFFF]*/)) { // Macro variables return "meta"; } else { // '%' operator return "operator"; } } if (matching.hasOwnProperty(delim)) { delim = matching[delim]; } return chain(tokenQuote(delim, style, embed), stream, state); } // Characters if (stream.eat("'")) { stream.match(/^(?:[^']|\\(?:[befnrtv0'"]|[0-7]{3}|u(?:[0-9a-fA-F]{4}|\{[0-9a-fA-F]{1,6}\})))/); stream.eat("'"); return "atom"; } // Numbers if (stream.eat("0")) { if (stream.eat("x")) { stream.match(/^[0-9a-fA-F]+/); } else if (stream.eat("o")) { stream.match(/^[0-7]+/); } else if (stream.eat("b")) { stream.match(/^[01]+/); } return "number"; } if (stream.eat(/\d/)) { stream.match(/^\d*(?:\.\d+)?(?:[eE][+-]?\d+)?/); return "number"; } // Operators if (stream.match(operators)) { stream.eat("="); // Operators can follow assign symbol. return "operator"; } if (stream.match(conditionalOperators) || stream.match(anotherOperators)) { return "operator"; } // Parens and braces if (matched = stream.match(/[({[]/, false)) { matched = matched[0]; return chain(tokenNest(matched, matching[matched], null), stream, state); } // Escapes if (stream.eat("\\")) { stream.next(); return "meta"; } stream.next(); return null; } function tokenNest(begin, end, style, started) { return function (stream, state) { if (!started && stream.match(begin)) { state.tokenize[state.tokenize.length - 1] = tokenNest(begin, end, style, true); state.currentIndent += 1; return style; } var nextStyle = tokenBase(stream, state); if (stream.current() === end) { state.tokenize.pop(); state.currentIndent -= 1; nextStyle = style; } return nextStyle; }; } function tokenMacro(begin, end, started) { return function (stream, state) { if (!started && stream.match("{" + begin)) { state.currentIndent += 1; state.tokenize[state.tokenize.length - 1] = tokenMacro(begin, end, true); return "meta"; } if (stream.match(end + "}")) { state.currentIndent -= 1; state.tokenize.pop(); return "meta"; } return tokenBase(stream, state); }; } function tokenMacroDef(stream, state) { if (stream.eatSpace()) { return null; } var matched; if (matched = stream.match(idents)) { if (matched == "def") { return "keyword"; } stream.eat(/[?!]/); } state.tokenize.pop(); return "def"; } function tokenFollowIdent(stream, state) { if (stream.eatSpace()) { return null; } if (stream.match(idents)) { stream.eat(/[!?]/); } else { stream.match(operators) || stream.match(conditionalOperators) || stream.match(indexingOperators); } state.tokenize.pop(); return "def"; } function tokenFollowType(stream, state) { if (stream.eatSpace()) { return null; } stream.match(types); state.tokenize.pop(); return "def"; } function tokenQuote(end, style, embed) { return function (stream, state) { var escaped = false; while (stream.peek()) { if (!escaped) { if (stream.match("{%", false)) { state.tokenize.push(tokenMacro("%", "%")); return style; } if (stream.match("{{", false)) { state.tokenize.push(tokenMacro("{", "}")); return style; } if (embed && stream.match("#{", false)) { state.tokenize.push(tokenNest("#{", "}", "meta")); return style; } var ch = stream.next(); if (ch == end) { state.tokenize.pop(); return style; } escaped = ch == "\\"; } else { stream.next(); escaped = false; } } return style; }; } return { startState: function () { return { tokenize: [tokenBase], currentIndent: 0, lastToken: null, blocks: [] }; }, token: function (stream, state) { var style = state.tokenize[state.tokenize.length - 1](stream, state); var token = stream.current(); if (style && style != "comment") { state.lastToken = token; } return style; }, indent: function (state, textAfter) { textAfter = textAfter.replace(/^\s*(?:\{%)?\s*|\s*(?:%\})?\s*$/g, ""); if (dedentKeywords.test(textAfter) || dedentPunctuals.test(textAfter)) { return config.indentUnit * (state.currentIndent - 1); } return config.indentUnit * state.currentIndent; }, fold: "indent", electricInput: wordRegExp(dedentPunctualsArray.concat(dedentKeywordsArray), true), lineComment: '#' }; }); CodeMirror.defineMIME("text/x-crystal", "crystal"); }); PK!ñšµg g Lfile-manager-advanced/application/library/codemirror/mode/crystal/index.htmlnu„[µü¤ CodeMirror: Crystal mode

    Crystal mode

    MIME types defined: text/x-crystal.

    PK!å åQ Q Ffile-manager-advanced/application/library/codemirror/mode/toml/toml.jsnu„[µü¤// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMode("toml", function () { return { startState: function () { return { inString: false, stringType: "", lhs: true, inArray: 0 }; }, token: function (stream, state) { //check for state changes if (!state.inString && ((stream.peek() == '"') || (stream.peek() == "'"))) { state.stringType = stream.peek(); stream.next(); // Skip quote state.inString = true; // Update state } if (stream.sol() && state.inArray === 0) { state.lhs = true; } //return state if (state.inString) { while (state.inString && !stream.eol()) { if (stream.peek() === state.stringType) { stream.next(); // Skip quote state.inString = false; // Clear flag } else if (stream.peek() === '\\') { stream.next(); stream.next(); } else { stream.match(/^.[^\\\"\']*/); } } return state.lhs ? "property string" : "string"; // Token style } else if (state.inArray && stream.peek() === ']') { stream.next(); state.inArray--; return 'bracket'; } else if (state.lhs && stream.peek() === '[' && stream.skipTo(']')) { stream.next();//skip closing ] // array of objects has an extra open & close [] if (stream.peek() === ']') stream.next(); return "atom"; } else if (stream.peek() === "#") { stream.skipToEnd(); return "comment"; } else if (stream.eatSpace()) { return null; } else if (state.lhs && stream.eatWhile(function (c) { return c != '=' && c != ' '; })) { return "property"; } else if (state.lhs && stream.peek() === "=") { stream.next(); state.lhs = false; return null; } else if (!state.lhs && stream.match(/^\d\d\d\d[\d\-\:\.T]*Z/)) { return 'atom'; //date } else if (!state.lhs && (stream.match('true') || stream.match('false'))) { return 'atom'; } else if (!state.lhs && stream.peek() === '[') { state.inArray++; stream.next(); return 'bracket'; } else if (!state.lhs && stream.match(/^\-?\d+(?:\.\d+)?/)) { return 'number'; } else if (!stream.eatSpace()) { stream.next(); } return null; } }; }); CodeMirror.defineMIME('text/x-toml', 'toml'); }); PK!«DV–00Ifile-manager-advanced/application/library/codemirror/mode/toml/index.htmlnu„[µü¤ CodeMirror: TOML Mode

    TOML Mode

    The TOML Mode

    Created by Forbes Lindesay.

    MIME type defined: text/x-toml.

    PK!\ŒÛ�p�pRfile-manager-advanced/application/library/codemirror/mode/javascript/javascript.jsnu„[µü¤// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; function expressionAllowed(stream, state, backUp) { return /^(?:operator|sof|keyword c|case|new|[\[{}\(,;:]|=>)$/.test(state.lastType) || (state.lastType == "quasi" && /\{\s*$/.test(stream.string.slice(0, stream.pos - (backUp || 0)))) } CodeMirror.defineMode("javascript", function(config, parserConfig) { var indentUnit = config.indentUnit; var statementIndent = parserConfig.statementIndent; var jsonldMode = parserConfig.jsonld; var jsonMode = parserConfig.json || jsonldMode; var isTS = parserConfig.typescript; var wordRE = parserConfig.wordCharacters || /[\w$\xa1-\uffff]/; // Tokenizer var keywords = function(){ function kw(type) {return {type: type, style: "keyword"};} var A = kw("keyword a"), B = kw("keyword b"), C = kw("keyword c"); var operator = kw("operator"), atom = {type: "atom", style: "atom"}; var jsKeywords = { "if": kw("if"), "while": A, "with": A, "else": B, "do": B, "try": B, "finally": B, "return": C, "break": C, "continue": C, "new": kw("new"), "delete": C, "throw": C, "debugger": C, "var": kw("var"), "const": kw("var"), "let": kw("var"), "function": kw("function"), "catch": kw("catch"), "for": kw("for"), "switch": kw("switch"), "case": kw("case"), "default": kw("default"), "in": operator, "typeof": operator, "instanceof": operator, "true": atom, "false": atom, "null": atom, "undefined": atom, "NaN": atom, "Infinity": atom, "this": kw("this"), "class": kw("class"), "super": kw("atom"), "yield": C, "export": kw("export"), "import": kw("import"), "extends": C, "await": C, "async": kw("async") }; // Extend the 'normal' keywords with the TypeScript language extensions if (isTS) { var type = {type: "variable", style: "variable-3"}; var tsKeywords = { // object-like things "interface": kw("class"), "implements": C, "namespace": C, "module": kw("module"), "enum": kw("module"), // scope modifiers "public": kw("modifier"), "private": kw("modifier"), "protected": kw("modifier"), "abstract": kw("modifier"), // operators "as": operator, // types "string": type, "number": type, "boolean": type, "any": type }; for (var attr in tsKeywords) { jsKeywords[attr] = tsKeywords[attr]; } } return jsKeywords; }(); var isOperatorChar = /[+\-*&%=<>!?|~^]/; var isJsonldKeyword = /^@(context|id|value|language|type|container|list|set|reverse|index|base|vocab|graph)"/; function readRegexp(stream) { var escaped = false, next, inSet = false; while ((next = stream.next()) != null) { if (!escaped) { if (next == "/" && !inSet) return; if (next == "[") inSet = true; else if (inSet && next == "]") inSet = false; } escaped = !escaped && next == "\\"; } } // Used as scratch variables to communicate multiple values without // consing up tons of objects. var type, content; function ret(tp, style, cont) { type = tp; content = cont; return style; } function tokenBase(stream, state) { var ch = stream.next(); if (ch == '"' || ch == "'") { state.tokenize = tokenString(ch); return state.tokenize(stream, state); } else if (ch == "." && stream.match(/^\d+(?:[eE][+\-]?\d+)?/)) { return ret("number", "number"); } else if (ch == "." && stream.match("..")) { return ret("spread", "meta"); } else if (/[\[\]{}\(\),;\:\.]/.test(ch)) { return ret(ch); } else if (ch == "=" && stream.eat(">")) { return ret("=>", "operator"); } else if (ch == "0" && stream.eat(/x/i)) { stream.eatWhile(/[\da-f]/i); return ret("number", "number"); } else if (ch == "0" && stream.eat(/o/i)) { stream.eatWhile(/[0-7]/i); return ret("number", "number"); } else if (ch == "0" && stream.eat(/b/i)) { stream.eatWhile(/[01]/i); return ret("number", "number"); } else if (/\d/.test(ch)) { stream.match(/^\d*(?:\.\d*)?(?:[eE][+\-]?\d+)?/); return ret("number", "number"); } else if (ch == "/") { if (stream.eat("*")) { state.tokenize = tokenComment; return tokenComment(stream, state); } else if (stream.eat("/")) { stream.skipToEnd(); return ret("comment", "comment"); } else if (expressionAllowed(stream, state, 1)) { readRegexp(stream); stream.match(/^\b(([gimyu])(?![gimyu]*\2))+\b/); return ret("regexp", "string-2"); } else { stream.eatWhile(isOperatorChar); return ret("operator", "operator", stream.current()); } } else if (ch == "`") { state.tokenize = tokenQuasi; return tokenQuasi(stream, state); } else if (ch == "#") { stream.skipToEnd(); return ret("error", "error"); } else if (isOperatorChar.test(ch)) { stream.eatWhile(isOperatorChar); return ret("operator", "operator", stream.current()); } else if (wordRE.test(ch)) { stream.eatWhile(wordRE); var word = stream.current(), known = keywords.propertyIsEnumerable(word) && keywords[word]; return (known && state.lastType != ".") ? ret(known.type, known.style, word) : ret("variable", "variable", word); } } function tokenString(quote) { return function(stream, state) { var escaped = false, next; if (jsonldMode && stream.peek() == "@" && stream.match(isJsonldKeyword)){ state.tokenize = tokenBase; return ret("jsonld-keyword", "meta"); } while ((next = stream.next()) != null) { if (next == quote && !escaped) break; escaped = !escaped && next == "\\"; } if (!escaped) state.tokenize = tokenBase; return ret("string", "string"); }; } function tokenComment(stream, state) { var maybeEnd = false, ch; while (ch = stream.next()) { if (ch == "/" && maybeEnd) { state.tokenize = tokenBase; break; } maybeEnd = (ch == "*"); } return ret("comment", "comment"); } function tokenQuasi(stream, state) { var escaped = false, next; while ((next = stream.next()) != null) { if (!escaped && (next == "`" || next == "$" && stream.eat("{"))) { state.tokenize = tokenBase; break; } escaped = !escaped && next == "\\"; } return ret("quasi", "string-2", stream.current()); } var brackets = "([{}])"; // This is a crude lookahead trick to try and notice that we're // parsing the argument patterns for a fat-arrow function before we // actually hit the arrow token. It only works if the arrow is on // the same line as the arguments and there's no strange noise // (comments) in between. Fallback is to only notice when we hit the // arrow, and not declare the arguments as locals for the arrow // body. function findFatArrow(stream, state) { if (state.fatArrowAt) state.fatArrowAt = null; var arrow = stream.string.indexOf("=>", stream.start); if (arrow < 0) return; var depth = 0, sawSomething = false; for (var pos = arrow - 1; pos >= 0; --pos) { var ch = stream.string.charAt(pos); var bracket = brackets.indexOf(ch); if (bracket >= 0 && bracket < 3) { if (!depth) { ++pos; break; } if (--depth == 0) { if (ch == "(") sawSomething = true; break; } } else if (bracket >= 3 && bracket < 6) { ++depth; } else if (wordRE.test(ch)) { sawSomething = true; } else if (/["'\/]/.test(ch)) { return; } else if (sawSomething && !depth) { ++pos; break; } } if (sawSomething && !depth) state.fatArrowAt = pos; } // Parser var atomicTypes = {"atom": true, "number": true, "variable": true, "string": true, "regexp": true, "this": true, "jsonld-keyword": true}; function JSLexical(indented, column, type, align, prev, info) { this.indented = indented; this.column = column; this.type = type; this.prev = prev; this.info = info; if (align != null) this.align = align; } function inScope(state, varname) { for (var v = state.localVars; v; v = v.next) if (v.name == varname) return true; for (var cx = state.context; cx; cx = cx.prev) { for (var v = cx.vars; v; v = v.next) if (v.name == varname) return true; } } function parseJS(state, style, type, content, stream) { var cc = state.cc; // Communicate our context to the combinators. // (Less wasteful than consing up a hundred closures on every call.) cx.state = state; cx.stream = stream; cx.marked = null, cx.cc = cc; cx.style = style; if (!state.lexical.hasOwnProperty("align")) state.lexical.align = true; while(true) { var combinator = cc.length ? cc.pop() : jsonMode ? expression : statement; if (combinator(type, content)) { while(cc.length && cc[cc.length - 1].lex) cc.pop()(); if (cx.marked) return cx.marked; if (type == "variable" && inScope(state, content)) return "variable-2"; return style; } } } // Combinator utils var cx = {state: null, column: null, marked: null, cc: null}; function pass() { for (var i = arguments.length - 1; i >= 0; i--) cx.cc.push(arguments[i]); } function cont() { pass.apply(null, arguments); return true; } function register(varname) { function inList(list) { for (var v = list; v; v = v.next) if (v.name == varname) return true; return false; } var state = cx.state; cx.marked = "def"; if (state.context) { if (inList(state.localVars)) return; state.localVars = {name: varname, next: state.localVars}; } else { if (inList(state.globalVars)) return; if (parserConfig.globalVars) state.globalVars = {name: varname, next: state.globalVars}; } } // Combinators var defaultVars = {name: "this", next: {name: "arguments"}}; function pushcontext() { cx.state.context = {prev: cx.state.context, vars: cx.state.localVars}; cx.state.localVars = defaultVars; } function popcontext() { cx.state.localVars = cx.state.context.vars; cx.state.context = cx.state.context.prev; } function pushlex(type, info) { var result = function() { var state = cx.state, indent = state.indented; if (state.lexical.type == "stat") indent = state.lexical.indented; else for (var outer = state.lexical; outer && outer.type == ")" && outer.align; outer = outer.prev) indent = outer.indented; state.lexical = new JSLexical(indent, cx.stream.column(), type, null, state.lexical, info); }; result.lex = true; return result; } function poplex() { var state = cx.state; if (state.lexical.prev) { if (state.lexical.type == ")") state.indented = state.lexical.indented; state.lexical = state.lexical.prev; } } poplex.lex = true; function expect(wanted) { function exp(type) { if (type == wanted) return cont(); else if (wanted == ";") return pass(); else return cont(exp); }; return exp; } function statement(type, value) { if (type == "var") return cont(pushlex("vardef", value.length), vardef, expect(";"), poplex); if (type == "keyword a") return cont(pushlex("form"), expression, statement, poplex); if (type == "keyword b") return cont(pushlex("form"), statement, poplex); if (type == "{") return cont(pushlex("}"), block, poplex); if (type == ";") return cont(); if (type == "if") { if (cx.state.lexical.info == "else" && cx.state.cc[cx.state.cc.length - 1] == poplex) cx.state.cc.pop()(); return cont(pushlex("form"), expression, statement, poplex, maybeelse); } if (type == "function") return cont(functiondef); if (type == "for") return cont(pushlex("form"), forspec, statement, poplex); if (type == "variable") return cont(pushlex("stat"), maybelabel); if (type == "switch") return cont(pushlex("form"), expression, pushlex("}", "switch"), expect("{"), block, poplex, poplex); if (type == "case") return cont(expression, expect(":")); if (type == "default") return cont(expect(":")); if (type == "catch") return cont(pushlex("form"), pushcontext, expect("("), funarg, expect(")"), statement, poplex, popcontext); if (type == "class") return cont(pushlex("form"), className, poplex); if (type == "export") return cont(pushlex("stat"), afterExport, poplex); if (type == "import") return cont(pushlex("stat"), afterImport, poplex); if (type == "module") return cont(pushlex("form"), pattern, pushlex("}"), expect("{"), block, poplex, poplex) if (type == "async") return cont(statement) return pass(pushlex("stat"), expression, expect(";"), poplex); } function expression(type) { return expressionInner(type, false); } function expressionNoComma(type) { return expressionInner(type, true); } function expressionInner(type, noComma) { if (cx.state.fatArrowAt == cx.stream.start) { var body = noComma ? arrowBodyNoComma : arrowBody; if (type == "(") return cont(pushcontext, pushlex(")"), commasep(pattern, ")"), poplex, expect("=>"), body, popcontext); else if (type == "variable") return pass(pushcontext, pattern, expect("=>"), body, popcontext); } var maybeop = noComma ? maybeoperatorNoComma : maybeoperatorComma; if (atomicTypes.hasOwnProperty(type)) return cont(maybeop); if (type == "function") return cont(functiondef, maybeop); if (type == "keyword c" || type == "async") return cont(noComma ? maybeexpressionNoComma : maybeexpression); if (type == "(") return cont(pushlex(")"), maybeexpression, expect(")"), poplex, maybeop); if (type == "operator" || type == "spread") return cont(noComma ? expressionNoComma : expression); if (type == "[") return cont(pushlex("]"), arrayLiteral, poplex, maybeop); if (type == "{") return contCommasep(objprop, "}", null, maybeop); if (type == "quasi") return pass(quasi, maybeop); if (type == "new") return cont(maybeTarget(noComma)); return cont(); } function maybeexpression(type) { if (type.match(/[;\}\)\],]/)) return pass(); return pass(expression); } function maybeexpressionNoComma(type) { if (type.match(/[;\}\)\],]/)) return pass(); return pass(expressionNoComma); } function maybeoperatorComma(type, value) { if (type == ",") return cont(expression); return maybeoperatorNoComma(type, value, false); } function maybeoperatorNoComma(type, value, noComma) { var me = noComma == false ? maybeoperatorComma : maybeoperatorNoComma; var expr = noComma == false ? expression : expressionNoComma; if (type == "=>") return cont(pushcontext, noComma ? arrowBodyNoComma : arrowBody, popcontext); if (type == "operator") { if (/\+\+|--/.test(value)) return cont(me); if (value == "?") return cont(expression, expect(":"), expr); return cont(expr); } if (type == "quasi") { return pass(quasi, me); } if (type == ";") return; if (type == "(") return contCommasep(expressionNoComma, ")", "call", me); if (type == ".") return cont(property, me); if (type == "[") return cont(pushlex("]"), maybeexpression, expect("]"), poplex, me); } function quasi(type, value) { if (type != "quasi") return pass(); if (value.slice(value.length - 2) != "${") return cont(quasi); return cont(expression, continueQuasi); } function continueQuasi(type) { if (type == "}") { cx.marked = "string-2"; cx.state.tokenize = tokenQuasi; return cont(quasi); } } function arrowBody(type) { findFatArrow(cx.stream, cx.state); return pass(type == "{" ? statement : expression); } function arrowBodyNoComma(type) { findFatArrow(cx.stream, cx.state); return pass(type == "{" ? statement : expressionNoComma); } function maybeTarget(noComma) { return function(type) { if (type == ".") return cont(noComma ? targetNoComma : target); else return pass(noComma ? expressionNoComma : expression); }; } function target(_, value) { if (value == "target") { cx.marked = "keyword"; return cont(maybeoperatorComma); } } function targetNoComma(_, value) { if (value == "target") { cx.marked = "keyword"; return cont(maybeoperatorNoComma); } } function maybelabel(type) { if (type == ":") return cont(poplex, statement); return pass(maybeoperatorComma, expect(";"), poplex); } function property(type) { if (type == "variable") {cx.marked = "property"; return cont();} } function objprop(type, value) { if (type == "async") { cx.marked = "property"; return cont(objprop); } else if (type == "variable" || cx.style == "keyword") { cx.marked = "property"; if (value == "get" || value == "set") return cont(getterSetter); return cont(afterprop); } else if (type == "number" || type == "string") { cx.marked = jsonldMode ? "property" : (cx.style + " property"); return cont(afterprop); } else if (type == "jsonld-keyword") { return cont(afterprop); } else if (type == "modifier") { return cont(objprop) } else if (type == "[") { return cont(expression, expect("]"), afterprop); } else if (type == "spread") { return cont(expression); } else if (type == ":") { return pass(afterprop) } } function getterSetter(type) { if (type != "variable") return pass(afterprop); cx.marked = "property"; return cont(functiondef); } function afterprop(type) { if (type == ":") return cont(expressionNoComma); if (type == "(") return pass(functiondef); } function commasep(what, end) { function proceed(type, value) { if (type == ",") { var lex = cx.state.lexical; if (lex.info == "call") lex.pos = (lex.pos || 0) + 1; return cont(function(type, value) { if (type == end || value == end) return pass() return pass(what) }, proceed); } if (type == end || value == end) return cont(); return cont(expect(end)); } return function(type, value) { if (type == end || value == end) return cont(); return pass(what, proceed); }; } function contCommasep(what, end, info) { for (var i = 3; i < arguments.length; i++) cx.cc.push(arguments[i]); return cont(pushlex(end, info), commasep(what, end), poplex); } function block(type) { if (type == "}") return cont(); return pass(statement, block); } function maybetype(type) { if (isTS && type == ":") return cont(typeexpr); } function maybedefault(_, value) { if (value == "=") return cont(expressionNoComma); } function typeexpr(type) { if (type == "variable") {cx.marked = "variable-3"; return cont(afterType);} if (type == "{") return cont(commasep(typeprop, "}")) if (type == "(") return cont(commasep(typearg, ")"), maybeReturnType) } function maybeReturnType(type) { if (type == "=>") return cont(typeexpr) } function typeprop(type) { if (type == "variable" || cx.style == "keyword") { cx.marked = "property" return cont(typeprop) } else if (type == ":") { return cont(typeexpr) } } function typearg(type) { if (type == "variable") return cont(typearg) else if (type == ":") return cont(typeexpr) } function afterType(type, value) { if (value == "<") return cont(commasep(typeexpr, ">"), afterType) if (type == "[") return cont(expect("]"), afterType) } function vardef() { return pass(pattern, maybetype, maybeAssign, vardefCont); } function pattern(type, value) { if (type == "modifier") return cont(pattern) if (type == "variable") { register(value); return cont(); } if (type == "spread") return cont(pattern); if (type == "[") return contCommasep(pattern, "]"); if (type == "{") return contCommasep(proppattern, "}"); } function proppattern(type, value) { if (type == "variable" && !cx.stream.match(/^\s*:/, false)) { register(value); return cont(maybeAssign); } if (type == "variable") cx.marked = "property"; if (type == "spread") return cont(pattern); if (type == "}") return pass(); return cont(expect(":"), pattern, maybeAssign); } function maybeAssign(_type, value) { if (value == "=") return cont(expressionNoComma); } function vardefCont(type) { if (type == ",") return cont(vardef); } function maybeelse(type, value) { if (type == "keyword b" && value == "else") return cont(pushlex("form", "else"), statement, poplex); } function forspec(type) { if (type == "(") return cont(pushlex(")"), forspec1, expect(")"), poplex); } function forspec1(type) { if (type == "var") return cont(vardef, expect(";"), forspec2); if (type == ";") return cont(forspec2); if (type == "variable") return cont(formaybeinof); return pass(expression, expect(";"), forspec2); } function formaybeinof(_type, value) { if (value == "in" || value == "of") { cx.marked = "keyword"; return cont(expression); } return cont(maybeoperatorComma, forspec2); } function forspec2(type, value) { if (type == ";") return cont(forspec3); if (value == "in" || value == "of") { cx.marked = "keyword"; return cont(expression); } return pass(expression, expect(";"), forspec3); } function forspec3(type) { if (type != ")") cont(expression); } function functiondef(type, value) { if (value == "*") {cx.marked = "keyword"; return cont(functiondef);} if (type == "variable") {register(value); return cont(functiondef);} if (type == "(") return cont(pushcontext, pushlex(")"), commasep(funarg, ")"), poplex, maybetype, statement, popcontext); } function funarg(type) { if (type == "spread") return cont(funarg); return pass(pattern, maybetype, maybedefault); } function className(type, value) { if (type == "variable") {register(value); return cont(classNameAfter);} } function classNameAfter(type, value) { if (value == "extends") return cont(isTS ? typeexpr : expression, classNameAfter); if (type == "{") return cont(pushlex("}"), classBody, poplex); } function classBody(type, value) { if (type == "variable" || cx.style == "keyword") { if (value == "static") { cx.marked = "keyword"; return cont(classBody); } cx.marked = "property"; if (value == "get" || value == "set") return cont(classGetterSetter, functiondef, classBody); return cont(functiondef, classBody); } if (value == "*") { cx.marked = "keyword"; return cont(classBody); } if (type == ";") return cont(classBody); if (type == "}") return cont(); } function classGetterSetter(type) { if (type != "variable") return pass(); cx.marked = "property"; return cont(); } function afterExport(_type, value) { if (value == "*") { cx.marked = "keyword"; return cont(maybeFrom, expect(";")); } if (value == "default") { cx.marked = "keyword"; return cont(expression, expect(";")); } return pass(statement); } function afterImport(type) { if (type == "string") return cont(); return pass(importSpec, maybeFrom); } function importSpec(type, value) { if (type == "{") return contCommasep(importSpec, "}"); if (type == "variable") register(value); if (value == "*") cx.marked = "keyword"; return cont(maybeAs); } function maybeAs(_type, value) { if (value == "as") { cx.marked = "keyword"; return cont(importSpec); } } function maybeFrom(_type, value) { if (value == "from") { cx.marked = "keyword"; return cont(expression); } } function arrayLiteral(type) { if (type == "]") return cont(); return pass(commasep(expressionNoComma, "]")); } function isContinuedStatement(state, textAfter) { return state.lastType == "operator" || state.lastType == "," || isOperatorChar.test(textAfter.charAt(0)) || /[,.]/.test(textAfter.charAt(0)); } // Interface return { startState: function(basecolumn) { var state = { tokenize: tokenBase, lastType: "sof", cc: [], lexical: new JSLexical((basecolumn || 0) - indentUnit, 0, "block", false), localVars: parserConfig.localVars, context: parserConfig.localVars && {vars: parserConfig.localVars}, indented: basecolumn || 0 }; if (parserConfig.globalVars && typeof parserConfig.globalVars == "object") state.globalVars = parserConfig.globalVars; return state; }, token: function(stream, state) { if (stream.sol()) { if (!state.lexical.hasOwnProperty("align")) state.lexical.align = false; state.indented = stream.indentation(); findFatArrow(stream, state); } if (state.tokenize != tokenComment && stream.eatSpace()) return null; var style = state.tokenize(stream, state); if (type == "comment") return style; state.lastType = type == "operator" && (content == "++" || content == "--") ? "incdec" : type; return parseJS(state, style, type, content, stream); }, indent: function(state, textAfter) { if (state.tokenize == tokenComment) return CodeMirror.Pass; if (state.tokenize != tokenBase) return 0; var firstChar = textAfter && textAfter.charAt(0), lexical = state.lexical; // Kludge to prevent 'maybelse' from blocking lexical scope pops if (!/^\s*else\b/.test(textAfter)) for (var i = state.cc.length - 1; i >= 0; --i) { var c = state.cc[i]; if (c == poplex) lexical = lexical.prev; else if (c != maybeelse) break; } if (lexical.type == "stat" && firstChar == "}") lexical = lexical.prev; if (statementIndent && lexical.type == ")" && lexical.prev.type == "stat") lexical = lexical.prev; var type = lexical.type, closing = firstChar == type; if (type == "vardef") return lexical.indented + (state.lastType == "operator" || state.lastType == "," ? lexical.info + 1 : 0); else if (type == "form" && firstChar == "{") return lexical.indented; else if (type == "form") return lexical.indented + indentUnit; else if (type == "stat") return lexical.indented + (isContinuedStatement(state, textAfter) ? statementIndent || indentUnit : 0); else if (lexical.info == "switch" && !closing && parserConfig.doubleIndentSwitch != false) return lexical.indented + (/^(?:case|default)\b/.test(textAfter) ? indentUnit : 2 * indentUnit); else if (lexical.align) return lexical.column + (closing ? 0 : 1); else return lexical.indented + (closing ? 0 : indentUnit); }, electricInput: /^\s*(?:case .*?:|default:|\{|\})$/, blockCommentStart: jsonMode ? null : "/*", blockCommentEnd: jsonMode ? null : "*/", lineComment: jsonMode ? null : "//", fold: "brace", closeBrackets: "()[]{}''\"\"``", helperType: jsonMode ? "json" : "javascript", jsonldMode: jsonldMode, jsonMode: jsonMode, expressionAllowed: expressionAllowed, skipExpression: function(state) { var top = state.cc[state.cc.length - 1] if (top == expression || top == expressionNoComma) state.cc.pop() } }; }); CodeMirror.registerHelper("wordChars", "javascript", /[\w$]/); CodeMirror.defineMIME("text/javascript", "javascript"); CodeMirror.defineMIME("text/ecmascript", "javascript"); CodeMirror.defineMIME("application/javascript", "javascript"); CodeMirror.defineMIME("application/x-javascript", "javascript"); CodeMirror.defineMIME("application/ecmascript", "javascript"); CodeMirror.defineMIME("application/json", {name: "javascript", json: true}); CodeMirror.defineMIME("application/x-json", {name: "javascript", json: true}); CodeMirror.defineMIME("application/ld+json", {name: "javascript", jsonld: true}); CodeMirror.defineMIME("text/typescript", { name: "javascript", typescript: true }); CodeMirror.defineMIME("application/typescript", { name: "javascript", typescript: true }); }); PK!ÍeÄ  Tfile-manager-advanced/application/library/codemirror/mode/javascript/typescript.htmlnu„[µü¤ CodeMirror: TypeScript mode

    TypeScript mode

    This is a specialization of the JavaScript mode.

    PK!M ¾aaOfile-manager-advanced/application/library/codemirror/mode/javascript/index.htmlnu„[µü¤ CodeMirror: JavaScript mode

    JavaScript mode

    JavaScript mode supports several configuration options:

    • json which will set the mode to expect JSON data rather than a JavaScript program.
    • jsonld which will set the mode to expect JSON-LD linked data rather than a JavaScript program (demo).
    • typescript which will activate additional syntax highlighting and some other things for TypeScript code (demo).
    • statementIndent which (given a number) will determine the amount of indentation to use for statements continued on a new line.
    • wordCharacters, a regexp that indicates which characters should be considered part of an identifier. Defaults to /[\w$]/, which does not handle non-ASCII identifiers. Can be set to something more elaborate to improve Unicode support.

    MIME types defined: text/javascript, application/json, application/ld+json, text/typescript, application/typescript.

    PK!Ú_—‘‘Lfile-manager-advanced/application/library/codemirror/mode/javascript/test.jsnu„[µü¤// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function() { var mode = CodeMirror.getMode({indentUnit: 2}, "javascript"); function MT(name) { test.mode(name, mode, Array.prototype.slice.call(arguments, 1)); } MT("locals", "[keyword function] [def foo]([def a], [def b]) { [keyword var] [def c] [operator =] [number 10]; [keyword return] [variable-2 a] [operator +] [variable-2 c] [operator +] [variable d]; }"); MT("comma-and-binop", "[keyword function](){ [keyword var] [def x] [operator =] [number 1] [operator +] [number 2], [def y]; }"); MT("destructuring", "([keyword function]([def a], [[[def b], [def c] ]]) {", " [keyword let] {[def d], [property foo]: [def c][operator =][number 10], [def x]} [operator =] [variable foo]([variable-2 a]);", " [[[variable-2 c], [variable y] ]] [operator =] [variable-2 c];", "})();"); MT("destructure_trailing_comma", "[keyword let] {[def a], [def b],} [operator =] [variable foo];", "[keyword let] [def c];"); // Parser still in good state? MT("class_body", "[keyword class] [def Foo] {", " [property constructor]() {}", " [property sayName]() {", " [keyword return] [string-2 `foo${][variable foo][string-2 }oo`];", " }", "}"); MT("class", "[keyword class] [def Point] [keyword extends] [variable SuperThing] {", " [property get] [property prop]() { [keyword return] [number 24]; }", " [property constructor]([def x], [def y]) {", " [keyword super]([string 'something']);", " [keyword this].[property x] [operator =] [variable-2 x];", " }", "}"); MT("import", "[keyword function] [def foo]() {", " [keyword import] [def $] [keyword from] [string 'jquery'];", " [keyword import] { [def encrypt], [def decrypt] } [keyword from] [string 'crypto'];", "}"); MT("import_trailing_comma", "[keyword import] {[def foo], [def bar],} [keyword from] [string 'baz']") MT("const", "[keyword function] [def f]() {", " [keyword const] [[ [def a], [def b] ]] [operator =] [[ [number 1], [number 2] ]];", "}"); MT("for/of", "[keyword for]([keyword let] [def of] [keyword of] [variable something]) {}"); MT("generator", "[keyword function*] [def repeat]([def n]) {", " [keyword for]([keyword var] [def i] [operator =] [number 0]; [variable-2 i] [operator <] [variable-2 n]; [operator ++][variable-2 i])", " [keyword yield] [variable-2 i];", "}"); MT("quotedStringAddition", "[keyword let] [def f] [operator =] [variable a] [operator +] [string 'fatarrow'] [operator +] [variable c];"); MT("quotedFatArrow", "[keyword let] [def f] [operator =] [variable a] [operator +] [string '=>'] [operator +] [variable c];"); MT("fatArrow", "[variable array].[property filter]([def a] [operator =>] [variable-2 a] [operator +] [number 1]);", "[variable a];", // No longer in scope "[keyword let] [def f] [operator =] ([[ [def a], [def b] ]], [def c]) [operator =>] [variable-2 a] [operator +] [variable-2 c];", "[variable c];"); MT("spread", "[keyword function] [def f]([def a], [meta ...][def b]) {", " [variable something]([variable-2 a], [meta ...][variable-2 b]);", "}"); MT("quasi", "[variable re][string-2 `fofdlakj${][variable x] [operator +] ([variable re][string-2 `foo`]) [operator +] [number 1][string-2 }fdsa`] [operator +] [number 2]"); MT("quasi_no_function", "[variable x] [operator =] [string-2 `fofdlakj${][variable x] [operator +] [string-2 `foo`] [operator +] [number 1][string-2 }fdsa`] [operator +] [number 2]"); MT("indent_statement", "[keyword var] [def x] [operator =] [number 10]", "[variable x] [operator +=] [variable y] [operator +]", " [atom Infinity]", "[keyword debugger];"); MT("indent_if", "[keyword if] ([number 1])", " [keyword break];", "[keyword else] [keyword if] ([number 2])", " [keyword continue];", "[keyword else]", " [number 10];", "[keyword if] ([number 1]) {", " [keyword break];", "} [keyword else] [keyword if] ([number 2]) {", " [keyword continue];", "} [keyword else] {", " [number 10];", "}"); MT("indent_for", "[keyword for] ([keyword var] [def i] [operator =] [number 0];", " [variable i] [operator <] [number 100];", " [variable i][operator ++])", " [variable doSomething]([variable i]);", "[keyword debugger];"); MT("indent_c_style", "[keyword function] [def foo]()", "{", " [keyword debugger];", "}"); MT("indent_else", "[keyword for] (;;)", " [keyword if] ([variable foo])", " [keyword if] ([variable bar])", " [number 1];", " [keyword else]", " [number 2];", " [keyword else]", " [number 3];"); MT("indent_funarg", "[variable foo]([number 10000],", " [keyword function]([def a]) {", " [keyword debugger];", "};"); MT("indent_below_if", "[keyword for] (;;)", " [keyword if] ([variable foo])", " [number 1];", "[number 2];"); MT("multilinestring", "[keyword var] [def x] [operator =] [string 'foo\\]", "[string bar'];"); MT("scary_regexp", "[string-2 /foo[[/]]bar/];"); MT("indent_strange_array", "[keyword var] [def x] [operator =] [[", " [number 1],,", " [number 2],", "]];", "[number 10];"); MT("param_default", "[keyword function] [def foo]([def x] [operator =] [string-2 `foo${][number 10][string-2 }bar`]) {", " [keyword return] [variable-2 x];", "}"); MT("new_target", "[keyword function] [def F]([def target]) {", " [keyword if] ([variable-2 target] [operator &&] [keyword new].[keyword target].[property name]) {", " [keyword return] [keyword new]", " .[keyword target];", " }", "}"); var ts_mode = CodeMirror.getMode({indentUnit: 2}, "application/typescript") function TS(name) { test.mode(name, ts_mode, Array.prototype.slice.call(arguments, 1)) } TS("extend_type", "[keyword class] [def Foo] [keyword extends] [variable-3 Some][operator <][variable-3 Type][operator >] {}") TS("arrow_type", "[keyword let] [def x]: ([variable arg]: [variable-3 Type]) [operator =>] [variable-3 ReturnType]") var jsonld_mode = CodeMirror.getMode( {indentUnit: 2}, {name: "javascript", jsonld: true} ); function LD(name) { test.mode(name, jsonld_mode, Array.prototype.slice.call(arguments, 1)); } LD("json_ld_keywords", '{', ' [meta "@context"]: {', ' [meta "@base"]: [string "http://example.com"],', ' [meta "@vocab"]: [string "http://xmlns.com/foaf/0.1/"],', ' [property "likesFlavor"]: {', ' [meta "@container"]: [meta "@list"]', ' [meta "@reverse"]: [string "@beFavoriteOf"]', ' },', ' [property "nick"]: { [meta "@container"]: [meta "@set"] },', ' [property "nick"]: { [meta "@container"]: [meta "@index"] }', ' },', ' [meta "@graph"]: [[ {', ' [meta "@id"]: [string "http://dbpedia.org/resource/John_Lennon"],', ' [property "name"]: [string "John Lennon"],', ' [property "modified"]: {', ' [meta "@value"]: [string "2010-05-29T14:17:39+02:00"],', ' [meta "@type"]: [string "http://www.w3.org/2001/XMLSchema#dateTime"]', ' }', ' } ]]', '}'); LD("json_ld_fake", '{', ' [property "@fake"]: [string "@fake"],', ' [property "@contextual"]: [string "@identifier"],', ' [property "user@domain.com"]: [string "@graphical"],', ' [property "@ID"]: [string "@@ID"]', '}'); })(); PK! 0›»ffQfile-manager-advanced/application/library/codemirror/mode/javascript/json-ld.htmlnu„[µü¤ CodeMirror: JSON-LD mode

    JSON-LD mode

    This is a specialization of the JavaScript mode.

    PK!@ ¦]11Dfile-manager-advanced/application/library/codemirror/mode/xml/xml.jsnu„[µü¤// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; var htmlConfig = { autoSelfClosers: {'area': true, 'base': true, 'br': true, 'col': true, 'command': true, 'embed': true, 'frame': true, 'hr': true, 'img': true, 'input': true, 'keygen': true, 'link': true, 'meta': true, 'param': true, 'source': true, 'track': true, 'wbr': true, 'menuitem': true}, implicitlyClosed: {'dd': true, 'li': true, 'optgroup': true, 'option': true, 'p': true, 'rp': true, 'rt': true, 'tbody': true, 'td': true, 'tfoot': true, 'th': true, 'tr': true}, contextGrabbers: { 'dd': {'dd': true, 'dt': true}, 'dt': {'dd': true, 'dt': true}, 'li': {'li': true}, 'option': {'option': true, 'optgroup': true}, 'optgroup': {'optgroup': true}, 'p': {'address': true, 'article': true, 'aside': true, 'blockquote': true, 'dir': true, 'div': true, 'dl': true, 'fieldset': true, 'footer': true, 'form': true, 'h1': true, 'h2': true, 'h3': true, 'h4': true, 'h5': true, 'h6': true, 'header': true, 'hgroup': true, 'hr': true, 'menu': true, 'nav': true, 'ol': true, 'p': true, 'pre': true, 'section': true, 'table': true, 'ul': true}, 'rp': {'rp': true, 'rt': true}, 'rt': {'rp': true, 'rt': true}, 'tbody': {'tbody': true, 'tfoot': true}, 'td': {'td': true, 'th': true}, 'tfoot': {'tbody': true}, 'th': {'td': true, 'th': true}, 'thead': {'tbody': true, 'tfoot': true}, 'tr': {'tr': true} }, doNotIndent: {"pre": true}, allowUnquoted: true, allowMissing: true, caseFold: true } var xmlConfig = { autoSelfClosers: {}, implicitlyClosed: {}, contextGrabbers: {}, doNotIndent: {}, allowUnquoted: false, allowMissing: false, caseFold: false } CodeMirror.defineMode("xml", function(editorConf, config_) { var indentUnit = editorConf.indentUnit var config = {} var defaults = config_.htmlMode ? htmlConfig : xmlConfig for (var prop in defaults) config[prop] = defaults[prop] for (var prop in config_) config[prop] = config_[prop] // Return variables for tokenizers var type, setStyle; function inText(stream, state) { function chain(parser) { state.tokenize = parser; return parser(stream, state); } var ch = stream.next(); if (ch == "<") { if (stream.eat("!")) { if (stream.eat("[")) { if (stream.match("CDATA[")) return chain(inBlock("atom", "]]>")); else return null; } else if (stream.match("--")) { return chain(inBlock("comment", "-->")); } else if (stream.match("DOCTYPE", true, true)) { stream.eatWhile(/[\w\._\-]/); return chain(doctype(1)); } else { return null; } } else if (stream.eat("?")) { stream.eatWhile(/[\w\._\-]/); state.tokenize = inBlock("meta", "?>"); return "meta"; } else { type = stream.eat("/") ? "closeTag" : "openTag"; state.tokenize = inTag; return "tag bracket"; } } else if (ch == "&") { var ok; if (stream.eat("#")) { if (stream.eat("x")) { ok = stream.eatWhile(/[a-fA-F\d]/) && stream.eat(";"); } else { ok = stream.eatWhile(/[\d]/) && stream.eat(";"); } } else { ok = stream.eatWhile(/[\w\.\-:]/) && stream.eat(";"); } return ok ? "atom" : "error"; } else { stream.eatWhile(/[^&<]/); return null; } } inText.isInText = true; function inTag(stream, state) { var ch = stream.next(); if (ch == ">" || (ch == "/" && stream.eat(">"))) { state.tokenize = inText; type = ch == ">" ? "endTag" : "selfcloseTag"; return "tag bracket"; } else if (ch == "=") { type = "equals"; return null; } else if (ch == "<") { state.tokenize = inText; state.state = baseState; state.tagName = state.tagStart = null; var next = state.tokenize(stream, state); return next ? next + " tag error" : "tag error"; } else if (/[\'\"]/.test(ch)) { state.tokenize = inAttribute(ch); state.stringStartCol = stream.column(); return state.tokenize(stream, state); } else { stream.match(/^[^\s\u00a0=<>\"\']*[^\s\u00a0=<>\"\'\/]/); return "word"; } } function inAttribute(quote) { var closure = function(stream, state) { while (!stream.eol()) { if (stream.next() == quote) { state.tokenize = inTag; break; } } return "string"; }; closure.isInAttribute = true; return closure; } function inBlock(style, terminator) { return function(stream, state) { while (!stream.eol()) { if (stream.match(terminator)) { state.tokenize = inText; break; } stream.next(); } return style; }; } function doctype(depth) { return function(stream, state) { var ch; while ((ch = stream.next()) != null) { if (ch == "<") { state.tokenize = doctype(depth + 1); return state.tokenize(stream, state); } else if (ch == ">") { if (depth == 1) { state.tokenize = inText; break; } else { state.tokenize = doctype(depth - 1); return state.tokenize(stream, state); } } } return "meta"; }; } function Context(state, tagName, startOfLine) { this.prev = state.context; this.tagName = tagName; this.indent = state.indented; this.startOfLine = startOfLine; if (config.doNotIndent.hasOwnProperty(tagName) || (state.context && state.context.noIndent)) this.noIndent = true; } function popContext(state) { if (state.context) state.context = state.context.prev; } function maybePopContext(state, nextTagName) { var parentTagName; while (true) { if (!state.context) { return; } parentTagName = state.context.tagName; if (!config.contextGrabbers.hasOwnProperty(parentTagName) || !config.contextGrabbers[parentTagName].hasOwnProperty(nextTagName)) { return; } popContext(state); } } function baseState(type, stream, state) { if (type == "openTag") { state.tagStart = stream.column(); return tagNameState; } else if (type == "closeTag") { return closeTagNameState; } else { return baseState; } } function tagNameState(type, stream, state) { if (type == "word") { state.tagName = stream.current(); setStyle = "tag"; return attrState; } else { setStyle = "error"; return tagNameState; } } function closeTagNameState(type, stream, state) { if (type == "word") { var tagName = stream.current(); if (state.context && state.context.tagName != tagName && config.implicitlyClosed.hasOwnProperty(state.context.tagName)) popContext(state); if ((state.context && state.context.tagName == tagName) || config.matchClosing === false) { setStyle = "tag"; return closeState; } else { setStyle = "tag error"; return closeStateErr; } } else { setStyle = "error"; return closeStateErr; } } function closeState(type, _stream, state) { if (type != "endTag") { setStyle = "error"; return closeState; } popContext(state); return baseState; } function closeStateErr(type, stream, state) { setStyle = "error"; return closeState(type, stream, state); } function attrState(type, _stream, state) { if (type == "word") { setStyle = "attribute"; return attrEqState; } else if (type == "endTag" || type == "selfcloseTag") { var tagName = state.tagName, tagStart = state.tagStart; state.tagName = state.tagStart = null; if (type == "selfcloseTag" || config.autoSelfClosers.hasOwnProperty(tagName)) { maybePopContext(state, tagName); } else { maybePopContext(state, tagName); state.context = new Context(state, tagName, tagStart == state.indented); } return baseState; } setStyle = "error"; return attrState; } function attrEqState(type, stream, state) { if (type == "equals") return attrValueState; if (!config.allowMissing) setStyle = "error"; return attrState(type, stream, state); } function attrValueState(type, stream, state) { if (type == "string") return attrContinuedState; if (type == "word" && config.allowUnquoted) {setStyle = "string"; return attrState;} setStyle = "error"; return attrState(type, stream, state); } function attrContinuedState(type, stream, state) { if (type == "string") return attrContinuedState; return attrState(type, stream, state); } return { startState: function(baseIndent) { var state = {tokenize: inText, state: baseState, indented: baseIndent || 0, tagName: null, tagStart: null, context: null} if (baseIndent != null) state.baseIndent = baseIndent return state }, token: function(stream, state) { if (!state.tagName && stream.sol()) state.indented = stream.indentation(); if (stream.eatSpace()) return null; type = null; var style = state.tokenize(stream, state); if ((style || type) && style != "comment") { setStyle = null; state.state = state.state(type || style, stream, state); if (setStyle) style = setStyle == "error" ? style + " error" : setStyle; } return style; }, indent: function(state, textAfter, fullLine) { var context = state.context; // Indent multi-line strings (e.g. css). if (state.tokenize.isInAttribute) { if (state.tagStart == state.indented) return state.stringStartCol + 1; else return state.indented + indentUnit; } if (context && context.noIndent) return CodeMirror.Pass; if (state.tokenize != inTag && state.tokenize != inText) return fullLine ? fullLine.match(/^(\s*)/)[0].length : 0; // Indent the starts of attribute names. if (state.tagName) { if (config.multilineTagIndentPastTag !== false) return state.tagStart + state.tagName.length + 2; else return state.tagStart + indentUnit * (config.multilineTagIndentFactor || 1); } if (config.alignCDATA && /$/, blockCommentStart: "", configuration: config.htmlMode ? "html" : "xml", helperType: config.htmlMode ? "html" : "xml", skipAttribute: function(state) { if (state.state == attrValueState) state.state = attrState } }; }); CodeMirror.defineMIME("text/xml", "xml"); CodeMirror.defineMIME("application/xml", "xml"); if (!CodeMirror.mimeModes.hasOwnProperty("text/html")) CodeMirror.defineMIME("text/html", {name: "xml", htmlMode: true}); }); PK!`F¯A{{Hfile-manager-advanced/application/library/codemirror/mode/xml/index.htmlnu„[µü¤ CodeMirror: XML mode

    XML mode

    The XML mode supports these configuration parameters:

    htmlMode (boolean)
    This switches the mode to parse HTML instead of XML. This means attributes do not have to be quoted, and some elements (such as br) do not require a closing tag.
    matchClosing (boolean)
    Controls whether the mode checks that close tags match the corresponding opening tag, and highlights mismatches as errors. Defaults to true.
    alignCDATA (boolean)
    Setting this to true will force the opening tag of CDATA blocks to not be indented.

    MIME types defined: application/xml, text/html.

    PK!­d—èÞÞEfile-manager-advanced/application/library/codemirror/mode/xml/test.jsnu„[µü¤// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function() { var mode = CodeMirror.getMode({indentUnit: 2}, "xml"), mname = "xml"; function MT(name) { test.mode(name, mode, Array.prototype.slice.call(arguments, 1), mname); } MT("matching", "[tag&bracket <][tag top][tag&bracket >]", " text", " [tag&bracket <][tag inner][tag&bracket />]", "[tag&bracket ]"); MT("nonmatching", "[tag&bracket <][tag top][tag&bracket >]", " [tag&bracket <][tag inner][tag&bracket />]", " [tag&bracket ]"); MT("doctype", "[meta ]", "[tag&bracket <][tag top][tag&bracket />]"); MT("cdata", "[tag&bracket <][tag top][tag&bracket >]", " [atom ]", "[tag&bracket ]"); // HTML tests mode = CodeMirror.getMode({indentUnit: 2}, "text/html"); MT("selfclose", "[tag&bracket <][tag html][tag&bracket >]", " [tag&bracket <][tag link] [attribute rel]=[string stylesheet] [attribute href]=[string \"/foobar\"][tag&bracket >]", "[tag&bracket ]"); MT("list", "[tag&bracket <][tag ol][tag&bracket >]", " [tag&bracket <][tag li][tag&bracket >]one", " [tag&bracket <][tag li][tag&bracket >]two", "[tag&bracket ]"); MT("valueless", "[tag&bracket <][tag input] [attribute type]=[string checkbox] [attribute checked][tag&bracket />]"); MT("pThenArticle", "[tag&bracket <][tag p][tag&bracket >]", " foo", "[tag&bracket <][tag article][tag&bracket >]bar"); })(); PK!ÖÐîH K KLfile-manager-advanced/application/library/codemirror/mode/verilog/verilog.jsnu„[µü¤// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMode("verilog", function(config, parserConfig) { var indentUnit = config.indentUnit, statementIndentUnit = parserConfig.statementIndentUnit || indentUnit, dontAlignCalls = parserConfig.dontAlignCalls, noIndentKeywords = parserConfig.noIndentKeywords || [], multiLineStrings = parserConfig.multiLineStrings, hooks = parserConfig.hooks || {}; function words(str) { var obj = {}, words = str.split(" "); for (var i = 0; i < words.length; ++i) obj[words[i]] = true; return obj; } /** * Keywords from IEEE 1800-2012 */ var keywords = words( "accept_on alias always always_comb always_ff always_latch and assert assign assume automatic before begin bind " + "bins binsof bit break buf bufif0 bufif1 byte case casex casez cell chandle checker class clocking cmos config " + "const constraint context continue cover covergroup coverpoint cross deassign default defparam design disable " + "dist do edge else end endcase endchecker endclass endclocking endconfig endfunction endgenerate endgroup " + "endinterface endmodule endpackage endprimitive endprogram endproperty endspecify endsequence endtable endtask " + "enum event eventually expect export extends extern final first_match for force foreach forever fork forkjoin " + "function generate genvar global highz0 highz1 if iff ifnone ignore_bins illegal_bins implements implies import " + "incdir include initial inout input inside instance int integer interconnect interface intersect join join_any " + "join_none large let liblist library local localparam logic longint macromodule matches medium modport module " + "nand negedge nettype new nexttime nmos nor noshowcancelled not notif0 notif1 null or output package packed " + "parameter pmos posedge primitive priority program property protected pull0 pull1 pulldown pullup " + "pulsestyle_ondetect pulsestyle_onevent pure rand randc randcase randsequence rcmos real realtime ref reg " + "reject_on release repeat restrict return rnmos rpmos rtran rtranif0 rtranif1 s_always s_eventually s_nexttime " + "s_until s_until_with scalared sequence shortint shortreal showcancelled signed small soft solve specify " + "specparam static string strong strong0 strong1 struct super supply0 supply1 sync_accept_on sync_reject_on " + "table tagged task this throughout time timeprecision timeunit tran tranif0 tranif1 tri tri0 tri1 triand trior " + "trireg type typedef union unique unique0 unsigned until until_with untyped use uwire var vectored virtual void " + "wait wait_order wand weak weak0 weak1 while wildcard wire with within wor xnor xor"); /** Operators from IEEE 1800-2012 unary_operator ::= + | - | ! | ~ | & | ~& | | | ~| | ^ | ~^ | ^~ binary_operator ::= + | - | * | / | % | == | != | === | !== | ==? | !=? | && | || | ** | < | <= | > | >= | & | | | ^ | ^~ | ~^ | >> | << | >>> | <<< | -> | <-> inc_or_dec_operator ::= ++ | -- unary_module_path_operator ::= ! | ~ | & | ~& | | | ~| | ^ | ~^ | ^~ binary_module_path_operator ::= == | != | && | || | & | | | ^ | ^~ | ~^ */ var isOperatorChar = /[\+\-\*\/!~&|^%=?:]/; var isBracketChar = /[\[\]{}()]/; var unsignedNumber = /\d[0-9_]*/; var decimalLiteral = /\d*\s*'s?d\s*\d[0-9_]*/i; var binaryLiteral = /\d*\s*'s?b\s*[xz01][xz01_]*/i; var octLiteral = /\d*\s*'s?o\s*[xz0-7][xz0-7_]*/i; var hexLiteral = /\d*\s*'s?h\s*[0-9a-fxz?][0-9a-fxz?_]*/i; var realLiteral = /(\d[\d_]*(\.\d[\d_]*)?E-?[\d_]+)|(\d[\d_]*\.\d[\d_]*)/i; var closingBracketOrWord = /^((\w+)|[)}\]])/; var closingBracket = /[)}\]]/; var curPunc; var curKeyword; // Block openings which are closed by a matching keyword in the form of ("end" + keyword) // E.g. "task" => "endtask" var blockKeywords = words( "case checker class clocking config function generate interface module package" + "primitive program property specify sequence table task" ); // Opening/closing pairs var openClose = {}; for (var keyword in blockKeywords) { openClose[keyword] = "end" + keyword; } openClose["begin"] = "end"; openClose["casex"] = "endcase"; openClose["casez"] = "endcase"; openClose["do" ] = "while"; openClose["fork" ] = "join;join_any;join_none"; openClose["covergroup"] = "endgroup"; for (var i in noIndentKeywords) { var keyword = noIndentKeywords[i]; if (openClose[keyword]) { openClose[keyword] = undefined; } } // Keywords which open statements that are ended with a semi-colon var statementKeywords = words("always always_comb always_ff always_latch assert assign assume else export for foreach forever if import initial repeat while"); function tokenBase(stream, state) { var ch = stream.peek(), style; if (hooks[ch] && (style = hooks[ch](stream, state)) != false) return style; if (hooks.tokenBase && (style = hooks.tokenBase(stream, state)) != false) return style; if (/[,;:\.]/.test(ch)) { curPunc = stream.next(); return null; } if (isBracketChar.test(ch)) { curPunc = stream.next(); return "bracket"; } // Macros (tick-defines) if (ch == '`') { stream.next(); if (stream.eatWhile(/[\w\$_]/)) { return "def"; } else { return null; } } // System calls if (ch == '$') { stream.next(); if (stream.eatWhile(/[\w\$_]/)) { return "meta"; } else { return null; } } // Time literals if (ch == '#') { stream.next(); stream.eatWhile(/[\d_.]/); return "def"; } // Strings if (ch == '"') { stream.next(); state.tokenize = tokenString(ch); return state.tokenize(stream, state); } // Comments if (ch == "/") { stream.next(); if (stream.eat("*")) { state.tokenize = tokenComment; return tokenComment(stream, state); } if (stream.eat("/")) { stream.skipToEnd(); return "comment"; } stream.backUp(1); } // Numeric literals if (stream.match(realLiteral) || stream.match(decimalLiteral) || stream.match(binaryLiteral) || stream.match(octLiteral) || stream.match(hexLiteral) || stream.match(unsignedNumber) || stream.match(realLiteral)) { return "number"; } // Operators if (stream.eatWhile(isOperatorChar)) { return "meta"; } // Keywords / plain variables if (stream.eatWhile(/[\w\$_]/)) { var cur = stream.current(); if (keywords[cur]) { if (openClose[cur]) { curPunc = "newblock"; } if (statementKeywords[cur]) { curPunc = "newstatement"; } curKeyword = cur; return "keyword"; } return "variable"; } stream.next(); return null; } function tokenString(quote) { return function(stream, state) { var escaped = false, next, end = false; while ((next = stream.next()) != null) { if (next == quote && !escaped) {end = true; break;} escaped = !escaped && next == "\\"; } if (end || !(escaped || multiLineStrings)) state.tokenize = tokenBase; return "string"; }; } function tokenComment(stream, state) { var maybeEnd = false, ch; while (ch = stream.next()) { if (ch == "/" && maybeEnd) { state.tokenize = tokenBase; break; } maybeEnd = (ch == "*"); } return "comment"; } function Context(indented, column, type, align, prev) { this.indented = indented; this.column = column; this.type = type; this.align = align; this.prev = prev; } function pushContext(state, col, type) { var indent = state.indented; var c = new Context(indent, col, type, null, state.context); return state.context = c; } function popContext(state) { var t = state.context.type; if (t == ")" || t == "]" || t == "}") { state.indented = state.context.indented; } return state.context = state.context.prev; } function isClosing(text, contextClosing) { if (text == contextClosing) { return true; } else { // contextClosing may be multiple keywords separated by ; var closingKeywords = contextClosing.split(";"); for (var i in closingKeywords) { if (text == closingKeywords[i]) { return true; } } return false; } } function buildElectricInputRegEx() { // Reindentation should occur on any bracket char: {}()[] // or on a match of any of the block closing keywords, at // the end of a line var allClosings = []; for (var i in openClose) { if (openClose[i]) { var closings = openClose[i].split(";"); for (var j in closings) { allClosings.push(closings[j]); } } } var re = new RegExp("[{}()\\[\\]]|(" + allClosings.join("|") + ")$"); return re; } // Interface return { // Regex to force current line to reindent electricInput: buildElectricInputRegEx(), startState: function(basecolumn) { var state = { tokenize: null, context: new Context((basecolumn || 0) - indentUnit, 0, "top", false), indented: 0, startOfLine: true }; if (hooks.startState) hooks.startState(state); return state; }, token: function(stream, state) { var ctx = state.context; if (stream.sol()) { if (ctx.align == null) ctx.align = false; state.indented = stream.indentation(); state.startOfLine = true; } if (hooks.token) hooks.token(stream, state); if (stream.eatSpace()) return null; curPunc = null; curKeyword = null; var style = (state.tokenize || tokenBase)(stream, state); if (style == "comment" || style == "meta" || style == "variable") return style; if (ctx.align == null) ctx.align = true; if (curPunc == ctx.type) { popContext(state); } else if ((curPunc == ";" && ctx.type == "statement") || (ctx.type && isClosing(curKeyword, ctx.type))) { ctx = popContext(state); while (ctx && ctx.type == "statement") ctx = popContext(state); } else if (curPunc == "{") { pushContext(state, stream.column(), "}"); } else if (curPunc == "[") { pushContext(state, stream.column(), "]"); } else if (curPunc == "(") { pushContext(state, stream.column(), ")"); } else if (ctx && ctx.type == "endcase" && curPunc == ":") { pushContext(state, stream.column(), "statement"); } else if (curPunc == "newstatement") { pushContext(state, stream.column(), "statement"); } else if (curPunc == "newblock") { if (curKeyword == "function" && ctx && (ctx.type == "statement" || ctx.type == "endgroup")) { // The 'function' keyword can appear in some other contexts where it actually does not // indicate a function (import/export DPI and covergroup definitions). // Do nothing in this case } else if (curKeyword == "task" && ctx && ctx.type == "statement") { // Same thing for task } else { var close = openClose[curKeyword]; pushContext(state, stream.column(), close); } } state.startOfLine = false; return style; }, indent: function(state, textAfter) { if (state.tokenize != tokenBase && state.tokenize != null) return CodeMirror.Pass; if (hooks.indent) { var fromHook = hooks.indent(state); if (fromHook >= 0) return fromHook; } var ctx = state.context, firstChar = textAfter && textAfter.charAt(0); if (ctx.type == "statement" && firstChar == "}") ctx = ctx.prev; var closing = false; var possibleClosing = textAfter.match(closingBracketOrWord); if (possibleClosing) closing = isClosing(possibleClosing[0], ctx.type); if (ctx.type == "statement") return ctx.indented + (firstChar == "{" ? 0 : statementIndentUnit); else if (closingBracket.test(ctx.type) && ctx.align && !dontAlignCalls) return ctx.column + (closing ? 0 : 1); else if (ctx.type == ")" && !closing) return ctx.indented + statementIndentUnit; else return ctx.indented + (closing ? 0 : indentUnit); }, blockCommentStart: "/*", blockCommentEnd: "*/", lineComment: "//" }; }); CodeMirror.defineMIME("text/x-verilog", { name: "verilog" }); CodeMirror.defineMIME("text/x-systemverilog", { name: "verilog" }); // TLVVerilog mode var tlvchScopePrefixes = { ">": "property", "->": "property", "-": "hr", "|": "link", "?$": "qualifier", "?*": "qualifier", "@-": "variable-3", "@": "variable-3", "?": "qualifier" }; function tlvGenIndent(stream, state) { var tlvindentUnit = 2; var rtnIndent = -1, indentUnitRq = 0, curIndent = stream.indentation(); switch (state.tlvCurCtlFlowChar) { case "\\": curIndent = 0; break; case "|": if (state.tlvPrevPrevCtlFlowChar == "@") { indentUnitRq = -2; //-2 new pipe rq after cur pipe break; } if (tlvchScopePrefixes[state.tlvPrevCtlFlowChar]) indentUnitRq = 1; // +1 new scope break; case "M": // m4 if (state.tlvPrevPrevCtlFlowChar == "@") { indentUnitRq = -2; //-2 new inst rq after pipe break; } if (tlvchScopePrefixes[state.tlvPrevCtlFlowChar]) indentUnitRq = 1; // +1 new scope break; case "@": if (state.tlvPrevCtlFlowChar == "S") indentUnitRq = -1; // new pipe stage after stmts if (state.tlvPrevCtlFlowChar == "|") indentUnitRq = 1; // 1st pipe stage break; case "S": if (state.tlvPrevCtlFlowChar == "@") indentUnitRq = 1; // flow in pipe stage if (tlvchScopePrefixes[state.tlvPrevCtlFlowChar]) indentUnitRq = 1; // +1 new scope break; } var statementIndentUnit = tlvindentUnit; rtnIndent = curIndent + (indentUnitRq*statementIndentUnit); return rtnIndent >= 0 ? rtnIndent : curIndent; } CodeMirror.defineMIME("text/x-tlv", { name: "verilog", hooks: { "\\": function(stream, state) { var vxIndent = 0, style = false; var curPunc = stream.string; if ((stream.sol()) && ((/\\SV/.test(stream.string)) || (/\\TLV/.test(stream.string)))) { curPunc = (/\\TLV_version/.test(stream.string)) ? "\\TLV_version" : stream.string; stream.skipToEnd(); if (curPunc == "\\SV" && state.vxCodeActive) {state.vxCodeActive = false;}; if ((/\\TLV/.test(curPunc) && !state.vxCodeActive) || (curPunc=="\\TLV_version" && state.vxCodeActive)) {state.vxCodeActive = true;}; style = "keyword"; state.tlvCurCtlFlowChar = state.tlvPrevPrevCtlFlowChar = state.tlvPrevCtlFlowChar = ""; if (state.vxCodeActive == true) { state.tlvCurCtlFlowChar = "\\"; vxIndent = tlvGenIndent(stream, state); } state.vxIndentRq = vxIndent; } return style; }, tokenBase: function(stream, state) { var vxIndent = 0, style = false; var tlvisOperatorChar = /[\[\]=:]/; var tlvkpScopePrefixs = { "**":"variable-2", "*":"variable-2", "$$":"variable", "$":"variable", "^^":"attribute", "^":"attribute"}; var ch = stream.peek(); var vxCurCtlFlowCharValueAtStart = state.tlvCurCtlFlowChar; if (state.vxCodeActive == true) { if (/[\[\]{}\(\);\:]/.test(ch)) { // bypass nesting and 1 char punc style = "meta"; stream.next(); } else if (ch == "/") { stream.next(); if (stream.eat("/")) { stream.skipToEnd(); style = "comment"; state.tlvCurCtlFlowChar = "S"; } else { stream.backUp(1); } } else if (ch == "@") { // pipeline stage style = tlvchScopePrefixes[ch]; state.tlvCurCtlFlowChar = "@"; stream.next(); stream.eatWhile(/[\w\$_]/); } else if (stream.match(/\b[mM]4+/, true)) { // match: function(pattern, consume, caseInsensitive) // m4 pre proc stream.skipTo("("); style = "def"; state.tlvCurCtlFlowChar = "M"; } else if (ch == "!" && stream.sol()) { // v stmt in tlv region // state.tlvCurCtlFlowChar = "S"; style = "comment"; stream.next(); } else if (tlvisOperatorChar.test(ch)) { // operators stream.eatWhile(tlvisOperatorChar); style = "operator"; } else if (ch == "#") { // phy hier state.tlvCurCtlFlowChar = (state.tlvCurCtlFlowChar == "") ? ch : state.tlvCurCtlFlowChar; stream.next(); stream.eatWhile(/[+-]\d/); style = "tag"; } else if (tlvkpScopePrefixs.propertyIsEnumerable(ch)) { // special TLV operators style = tlvkpScopePrefixs[ch]; state.tlvCurCtlFlowChar = state.tlvCurCtlFlowChar == "" ? "S" : state.tlvCurCtlFlowChar; // stmt stream.next(); stream.match(/[a-zA-Z_0-9]+/); } else if (style = tlvchScopePrefixes[ch] || false) { // special TLV operators state.tlvCurCtlFlowChar = state.tlvCurCtlFlowChar == "" ? ch : state.tlvCurCtlFlowChar; stream.next(); stream.match(/[a-zA-Z_0-9]+/); } if (state.tlvCurCtlFlowChar != vxCurCtlFlowCharValueAtStart) { // flow change vxIndent = tlvGenIndent(stream, state); state.vxIndentRq = vxIndent; } } return style; }, token: function(stream, state) { if (state.vxCodeActive == true && stream.sol() && state.tlvCurCtlFlowChar != "") { state.tlvPrevPrevCtlFlowChar = state.tlvPrevCtlFlowChar; state.tlvPrevCtlFlowChar = state.tlvCurCtlFlowChar; state.tlvCurCtlFlowChar = ""; } }, indent: function(state) { return (state.vxCodeActive == true) ? state.vxIndentRq : -1; }, startState: function(state) { state.tlvCurCtlFlowChar = ""; state.tlvPrevCtlFlowChar = ""; state.tlvPrevPrevCtlFlowChar = ""; state.vxCodeActive = true; state.vxIndentRq = 0; } } }); }); PK!ûò; ; Lfile-manager-advanced/application/library/codemirror/mode/verilog/index.htmlnu„[µü¤ CodeMirror: Verilog/SystemVerilog mode

    SystemVerilog mode

    Syntax highlighting and indentation for the Verilog and SystemVerilog languages (IEEE 1800).

    Configuration options:

    • noIndentKeywords - List of keywords which should not cause indentation to increase. E.g. ["package", "module"]. Default: None

    MIME types defined: text/x-verilog and text/x-systemverilog.

    PK!a”({yyIfile-manager-advanced/application/library/codemirror/mode/verilog/test.jsnu„[µü¤// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function() { var mode = CodeMirror.getMode({indentUnit: 4}, "verilog"); function MT(name) { test.mode(name, mode, Array.prototype.slice.call(arguments, 1)); } MT("binary_literals", "[number 1'b0]", "[number 1'b1]", "[number 1'bx]", "[number 1'bz]", "[number 1'bX]", "[number 1'bZ]", "[number 1'B0]", "[number 1'B1]", "[number 1'Bx]", "[number 1'Bz]", "[number 1'BX]", "[number 1'BZ]", "[number 1'b0]", "[number 1'b1]", "[number 2'b01]", "[number 2'bxz]", "[number 2'b11]", "[number 2'b10]", "[number 2'b1Z]", "[number 12'b0101_0101_0101]", "[number 1'b 0]", "[number 'b0101]" ); MT("octal_literals", "[number 3'o7]", "[number 3'O7]", "[number 3'so7]", "[number 3'SO7]" ); MT("decimal_literals", "[number 0]", "[number 1]", "[number 7]", "[number 123_456]", "[number 'd33]", "[number 8'd255]", "[number 8'D255]", "[number 8'sd255]", "[number 8'SD255]", "[number 32'd123]", "[number 32 'd123]", "[number 32 'd 123]" ); MT("hex_literals", "[number 4'h0]", "[number 4'ha]", "[number 4'hF]", "[number 4'hx]", "[number 4'hz]", "[number 4'hX]", "[number 4'hZ]", "[number 32'hdc78]", "[number 32'hDC78]", "[number 32 'hDC78]", "[number 32'h DC78]", "[number 32 'h DC78]", "[number 32'h44x7]", "[number 32'hFFF?]" ); MT("real_number_literals", "[number 1.2]", "[number 0.1]", "[number 2394.26331]", "[number 1.2E12]", "[number 1.2e12]", "[number 1.30e-2]", "[number 0.1e-0]", "[number 23E10]", "[number 29E-2]", "[number 236.123_763_e-12]" ); MT("operators", "[meta ^]" ); MT("keywords", "[keyword logic]", "[keyword logic] [variable foo]", "[keyword reg] [variable abc]" ); MT("variables", "[variable _leading_underscore]", "[variable _if]", "[number 12] [variable foo]", "[variable foo] [number 14]" ); MT("tick_defines", "[def `FOO]", "[def `foo]", "[def `FOO_bar]" ); MT("system_calls", "[meta $display]", "[meta $vpi_printf]" ); MT("line_comment", "[comment // Hello world]"); // Alignment tests MT("align_port_map_style1", /** * mod mod(.a(a), * .b(b) * ); */ "[variable mod] [variable mod][bracket (].[variable a][bracket (][variable a][bracket )],", " .[variable b][bracket (][variable b][bracket )]", " [bracket )];", "" ); MT("align_port_map_style2", /** * mod mod( * .a(a), * .b(b) * ); */ "[variable mod] [variable mod][bracket (]", " .[variable a][bracket (][variable a][bracket )],", " .[variable b][bracket (][variable b][bracket )]", "[bracket )];", "" ); // Indentation tests MT("indent_single_statement_if", "[keyword if] [bracket (][variable foo][bracket )]", " [keyword break];", "" ); MT("no_indent_after_single_line_if", "[keyword if] [bracket (][variable foo][bracket )] [keyword break];", "" ); MT("indent_after_if_begin_same_line", "[keyword if] [bracket (][variable foo][bracket )] [keyword begin]", " [keyword break];", " [keyword break];", "[keyword end]", "" ); MT("indent_after_if_begin_next_line", "[keyword if] [bracket (][variable foo][bracket )]", " [keyword begin]", " [keyword break];", " [keyword break];", " [keyword end]", "" ); MT("indent_single_statement_if_else", "[keyword if] [bracket (][variable foo][bracket )]", " [keyword break];", "[keyword else]", " [keyword break];", "" ); MT("indent_if_else_begin_same_line", "[keyword if] [bracket (][variable foo][bracket )] [keyword begin]", " [keyword break];", " [keyword break];", "[keyword end] [keyword else] [keyword begin]", " [keyword break];", " [keyword break];", "[keyword end]", "" ); MT("indent_if_else_begin_next_line", "[keyword if] [bracket (][variable foo][bracket )]", " [keyword begin]", " [keyword break];", " [keyword break];", " [keyword end]", "[keyword else]", " [keyword begin]", " [keyword break];", " [keyword break];", " [keyword end]", "" ); MT("indent_if_nested_without_begin", "[keyword if] [bracket (][variable foo][bracket )]", " [keyword if] [bracket (][variable foo][bracket )]", " [keyword if] [bracket (][variable foo][bracket )]", " [keyword break];", "" ); MT("indent_case", "[keyword case] [bracket (][variable state][bracket )]", " [variable FOO]:", " [keyword break];", " [variable BAR]:", " [keyword break];", "[keyword endcase]", "" ); MT("unindent_after_end_with_preceding_text", "[keyword begin]", " [keyword break]; [keyword end]", "" ); MT("export_function_one_line_does_not_indent", "[keyword export] [string \"DPI-C\"] [keyword function] [variable helloFromSV];", "" ); MT("export_task_one_line_does_not_indent", "[keyword export] [string \"DPI-C\"] [keyword task] [variable helloFromSV];", "" ); MT("export_function_two_lines_indents_properly", "[keyword export]", " [string \"DPI-C\"] [keyword function] [variable helloFromSV];", "" ); MT("export_task_two_lines_indents_properly", "[keyword export]", " [string \"DPI-C\"] [keyword task] [variable helloFromSV];", "" ); MT("import_function_one_line_does_not_indent", "[keyword import] [string \"DPI-C\"] [keyword function] [variable helloFromC];", "" ); MT("import_task_one_line_does_not_indent", "[keyword import] [string \"DPI-C\"] [keyword task] [variable helloFromC];", "" ); MT("import_package_single_line_does_not_indent", "[keyword import] [variable p]::[variable x];", "[keyword import] [variable p]::[variable y];", "" ); MT("covergroup_with_function_indents_properly", "[keyword covergroup] [variable cg] [keyword with] [keyword function] [variable sample][bracket (][keyword bit] [variable b][bracket )];", " [variable c] : [keyword coverpoint] [variable c];", "[keyword endgroup]: [variable cg]", "" ); })(); PK!¿G G Jfile-manager-advanced/application/library/codemirror/mode/julia/index.htmlnu„[µü¤ CodeMirror: Julia mode

    Julia mode

    MIME types defined: text/x-julia.

    PK!W»~¦,¦,Hfile-manager-advanced/application/library/codemirror/mode/julia/julia.jsnu„[µü¤// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMode("julia", function(_conf, parserConf) { var ERRORCLASS = 'error'; function wordRegexp(words, end) { if (typeof end === 'undefined') { end = "\\b"; } return new RegExp("^((" + words.join(")|(") + "))" + end); } var octChar = "\\\\[0-7]{1,3}"; var hexChar = "\\\\x[A-Fa-f0-9]{1,2}"; var specialChar = "\\\\[abfnrtv0%?'\"\\\\]"; var singleChar = "([^\\u0027\\u005C\\uD800-\\uDFFF]|[\\uD800-\\uDFFF][\\uDC00-\\uDFFF])"; var operators = parserConf.operators || /^\.?[|&^\\%*+\-<>!=\/]=?|\?|~|:|\$|\.[<>]|<<=?|>>>?=?|\.[<>=]=|->?|\/\/|\bin\b(?!\()|[\u2208\u2209](?!\()/; var delimiters = parserConf.delimiters || /^[;,()[\]{}]/; var identifiers = parserConf.identifiers || /^[_A-Za-z\u00A1-\uFFFF][\w\u00A1-\uFFFF]*!*/; var charsList = [octChar, hexChar, specialChar, singleChar]; var blockOpeners = ["begin", "function", "type", "immutable", "let", "macro", "for", "while", "quote", "if", "else", "elseif", "try", "finally", "catch", "do"]; var blockClosers = ["end", "else", "elseif", "catch", "finally"]; var keywordList = ['if', 'else', 'elseif', 'while', 'for', 'begin', 'let', 'end', 'do', 'try', 'catch', 'finally', 'return', 'break', 'continue', 'global', 'local', 'const', 'export', 'import', 'importall', 'using', 'function', 'macro', 'module', 'baremodule', 'type', 'immutable', 'quote', 'typealias', 'abstract', 'bitstype']; var builtinList = ['true', 'false', 'nothing', 'NaN', 'Inf']; //var stringPrefixes = new RegExp("^[br]?('|\")") var stringPrefixes = /^(`|"{3}|([brv]?"))/; var chars = wordRegexp(charsList, "'"); var keywords = wordRegexp(keywordList); var builtins = wordRegexp(builtinList); var openers = wordRegexp(blockOpeners); var closers = wordRegexp(blockClosers); var macro = /^@[_A-Za-z][\w]*/; var symbol = /^:[_A-Za-z\u00A1-\uFFFF][\w\u00A1-\uFFFF]*!*/; var typeAnnotation = /^::[^,;"{()=$\s]+({[^}]*}+)*/; function inArray(state) { var ch = currentScope(state); if (ch == '[') { return true; } return false; } function currentScope(state) { if (state.scopes.length == 0) { return null; } return state.scopes[state.scopes.length - 1]; } // tokenizers function tokenBase(stream, state) { // Handle multiline comments if (stream.match(/^#=/, false)) { state.tokenize = tokenComment; return state.tokenize(stream, state); } // Handle scope changes var leavingExpr = state.leavingExpr; if (stream.sol()) { leavingExpr = false; } state.leavingExpr = false; if (leavingExpr) { if (stream.match(/^'+/)) { return 'operator'; } } if (stream.match(/^\.{2,3}/)) { return 'operator'; } if (stream.eatSpace()) { return null; } var ch = stream.peek(); // Handle single line comments if (ch === '#') { stream.skipToEnd(); return 'comment'; } if (ch === '[') { state.scopes.push('['); } if (ch === '(') { state.scopes.push('('); } var scope = currentScope(state); if (scope == '[' && ch === ']') { state.scopes.pop(); state.leavingExpr = true; } if (scope == '(' && ch === ')') { state.scopes.pop(); state.leavingExpr = true; } var match; if (!inArray(state) && (match=stream.match(openers, false))) { state.scopes.push(match); } if (!inArray(state) && stream.match(closers, false)) { state.scopes.pop(); } if (inArray(state)) { if (state.lastToken == 'end' && stream.match(/^:/)) { return 'operator'; } if (stream.match(/^end/)) { return 'number'; } } if (stream.match(/^=>/)) { return 'operator'; } // Handle Number Literals if (stream.match(/^[0-9\.]/, false)) { var imMatcher = RegExp(/^im\b/); var numberLiteral = false; // Floats if (stream.match(/^\d*\.(?!\.)\d*([Eef][\+\-]?\d+)?/i)) { numberLiteral = true; } if (stream.match(/^\d+\.(?!\.)\d*/)) { numberLiteral = true; } if (stream.match(/^\.\d+/)) { numberLiteral = true; } if (stream.match(/^0x\.[0-9a-f]+p[\+\-]?\d+/i)) { numberLiteral = true; } // Integers if (stream.match(/^0x[0-9a-f]+/i)) { numberLiteral = true; } // Hex if (stream.match(/^0b[01]+/i)) { numberLiteral = true; } // Binary if (stream.match(/^0o[0-7]+/i)) { numberLiteral = true; } // Octal if (stream.match(/^[1-9]\d*(e[\+\-]?\d+)?/)) { numberLiteral = true; } // Decimal // Zero by itself with no other piece of number. if (stream.match(/^0(?![\dx])/i)) { numberLiteral = true; } if (numberLiteral) { // Integer literals may be "long" stream.match(imMatcher); state.leavingExpr = true; return 'number'; } } if (stream.match(/^<:/)) { return 'operator'; } if (stream.match(typeAnnotation)) { return 'builtin'; } // Handle symbols if (!leavingExpr && stream.match(symbol) || stream.match(/:\./)) { return 'builtin'; } // Handle parametric types if (stream.match(/^{[^}]*}(?=\()/)) { return 'builtin'; } // Handle operators and Delimiters if (stream.match(operators)) { return 'operator'; } // Handle Chars if (stream.match(/^'/)) { state.tokenize = tokenChar; return state.tokenize(stream, state); } // Handle Strings if (stream.match(stringPrefixes)) { state.tokenize = tokenStringFactory(stream.current()); return state.tokenize(stream, state); } if (stream.match(macro)) { return 'meta'; } if (stream.match(delimiters)) { return null; } if (stream.match(keywords)) { return 'keyword'; } if (stream.match(builtins)) { return 'builtin'; } var isDefinition = state.isDefinition || state.lastToken == 'function' || state.lastToken == 'macro' || state.lastToken == 'type' || state.lastToken == 'immutable'; if (stream.match(identifiers)) { if (isDefinition) { if (stream.peek() === '.') { state.isDefinition = true; return 'variable'; } state.isDefinition = false; return 'def'; } if (stream.match(/^({[^}]*})*\(/, false)) { return callOrDef(stream, state); } state.leavingExpr = true; return 'variable'; } // Handle non-detected items stream.next(); return ERRORCLASS; } function callOrDef(stream, state) { var match = stream.match(/^(\(\s*)/); if (match) { if (state.firstParenPos < 0) state.firstParenPos = state.scopes.length; state.scopes.push('('); state.charsAdvanced += match[1].length; } if (currentScope(state) == '(' && stream.match(/^\)/)) { state.scopes.pop(); state.charsAdvanced += 1; if (state.scopes.length <= state.firstParenPos) { var isDefinition = stream.match(/^\s*?=(?!=)/, false); stream.backUp(state.charsAdvanced); state.firstParenPos = -1; state.charsAdvanced = 0; if (isDefinition) return 'def'; return 'builtin'; } } // Unfortunately javascript does not support multiline strings, so we have // to undo anything done upto here if a function call or definition splits // over two or more lines. if (stream.match(/^$/g, false)) { stream.backUp(state.charsAdvanced); while (state.scopes.length > state.firstParenPos) state.scopes.pop(); state.firstParenPos = -1; state.charsAdvanced = 0; return 'builtin'; } state.charsAdvanced += stream.match(/^([^()]*)/)[1].length; return callOrDef(stream, state); } function tokenComment(stream, state) { if (stream.match(/^#=/)) { state.weakScopes++; } if (!stream.match(/.*?(?=(#=|=#))/)) { stream.skipToEnd(); } if (stream.match(/^=#/)) { state.weakScopes--; if (state.weakScopes == 0) state.tokenize = tokenBase; } return 'comment'; } function tokenChar(stream, state) { var isChar = false, match; if (stream.match(chars)) { isChar = true; } else if (match = stream.match(/\\u([a-f0-9]{1,4})(?=')/i)) { var value = parseInt(match[1], 16); if (value <= 55295 || value >= 57344) { // (U+0,U+D7FF), (U+E000,U+FFFF) isChar = true; stream.next(); } } else if (match = stream.match(/\\U([A-Fa-f0-9]{5,8})(?=')/)) { var value = parseInt(match[1], 16); if (value <= 1114111) { // U+10FFFF isChar = true; stream.next(); } } if (isChar) { state.leavingExpr = true; state.tokenize = tokenBase; return 'string'; } if (!stream.match(/^[^']+(?=')/)) { stream.skipToEnd(); } if (stream.match(/^'/)) { state.tokenize = tokenBase; } return ERRORCLASS; } function tokenStringFactory(delimiter) { while ('bruv'.indexOf(delimiter.charAt(0).toLowerCase()) >= 0) { delimiter = delimiter.substr(1); } var OUTCLASS = 'string'; function tokenString(stream, state) { while (!stream.eol()) { stream.eatWhile(/[^"\\]/); if (stream.eat('\\')) { stream.next(); } else if (stream.match(delimiter)) { state.tokenize = tokenBase; state.leavingExpr = true; return OUTCLASS; } else { stream.eat(/["]/); } } return OUTCLASS; } tokenString.isString = true; return tokenString; } var external = { startState: function() { return { tokenize: tokenBase, scopes: [], weakScopes: 0, lastToken: null, leavingExpr: false, isDefinition: false, charsAdvanced: 0, firstParenPos: -1 }; }, token: function(stream, state) { var style = state.tokenize(stream, state); var current = stream.current(); if (current && style) { state.lastToken = current; } // Handle '.' connected identifiers if (current === '.') { style = stream.match(identifiers, false) || stream.match(macro, false) || stream.match(/\(/, false) ? 'operator' : ERRORCLASS; } return style; }, indent: function(state, textAfter) { var delta = 0; if (textAfter == "]" || textAfter == ")" || textAfter == "end" || textAfter == "else" || textAfter == "elseif" || textAfter == "catch" || textAfter == "finally") { delta = -1; } return (state.scopes.length + delta) * _conf.indentUnit; }, electricInput: /(end|else(if)?|catch|finally)$/, lineComment: "#", fold: "indent" }; return external; }); CodeMirror.defineMIME("text/x-julia", "julia"); }); PK!(¿Èí……Jfile-manager-advanced/application/library/codemirror/mode/cypher/cypher.jsnu„[µü¤// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE // By the Neo4j Team and contributors. // https://github.com/neo4j-contrib/CodeMirror (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; var wordRegexp = function(words) { return new RegExp("^(?:" + words.join("|") + ")$", "i"); }; CodeMirror.defineMode("cypher", function(config) { var tokenBase = function(stream/*, state*/) { var ch = stream.next(); if (ch === "\"" || ch === "'") { stream.match(/.+?["']/); return "string"; } if (/[{}\(\),\.;\[\]]/.test(ch)) { curPunc = ch; return "node"; } else if (ch === "/" && stream.eat("/")) { stream.skipToEnd(); return "comment"; } else if (operatorChars.test(ch)) { stream.eatWhile(operatorChars); return null; } else { stream.eatWhile(/[_\w\d]/); if (stream.eat(":")) { stream.eatWhile(/[\w\d_\-]/); return "atom"; } var word = stream.current(); if (funcs.test(word)) return "builtin"; if (preds.test(word)) return "def"; if (keywords.test(word)) return "keyword"; return "variable"; } }; var pushContext = function(state, type, col) { return state.context = { prev: state.context, indent: state.indent, col: col, type: type }; }; var popContext = function(state) { state.indent = state.context.indent; return state.context = state.context.prev; }; var indentUnit = config.indentUnit; var curPunc; var funcs = wordRegexp(["abs", "acos", "allShortestPaths", "asin", "atan", "atan2", "avg", "ceil", "coalesce", "collect", "cos", "cot", "count", "degrees", "e", "endnode", "exp", "extract", "filter", "floor", "haversin", "head", "id", "keys", "labels", "last", "left", "length", "log", "log10", "lower", "ltrim", "max", "min", "node", "nodes", "percentileCont", "percentileDisc", "pi", "radians", "rand", "range", "reduce", "rel", "relationship", "relationships", "replace", "reverse", "right", "round", "rtrim", "shortestPath", "sign", "sin", "size", "split", "sqrt", "startnode", "stdev", "stdevp", "str", "substring", "sum", "tail", "tan", "timestamp", "toFloat", "toInt", "toString", "trim", "type", "upper"]); var preds = wordRegexp(["all", "and", "any", "contains", "exists", "has", "in", "none", "not", "or", "single", "xor"]); var keywords = wordRegexp(["as", "asc", "ascending", "assert", "by", "case", "commit", "constraint", "create", "csv", "cypher", "delete", "desc", "descending", "detach", "distinct", "drop", "else", "end", "ends", "explain", "false", "fieldterminator", "foreach", "from", "headers", "in", "index", "is", "join", "limit", "load", "match", "merge", "null", "on", "optional", "order", "periodic", "profile", "remove", "return", "scan", "set", "skip", "start", "starts", "then", "true", "union", "unique", "unwind", "using", "when", "where", "with"]); var operatorChars = /[*+\-<>=&|~%^]/; return { startState: function(/*base*/) { return { tokenize: tokenBase, context: null, indent: 0, col: 0 }; }, token: function(stream, state) { if (stream.sol()) { if (state.context && (state.context.align == null)) { state.context.align = false; } state.indent = stream.indentation(); } if (stream.eatSpace()) { return null; } var style = state.tokenize(stream, state); if (style !== "comment" && state.context && (state.context.align == null) && state.context.type !== "pattern") { state.context.align = true; } if (curPunc === "(") { pushContext(state, ")", stream.column()); } else if (curPunc === "[") { pushContext(state, "]", stream.column()); } else if (curPunc === "{") { pushContext(state, "}", stream.column()); } else if (/[\]\}\)]/.test(curPunc)) { while (state.context && state.context.type === "pattern") { popContext(state); } if (state.context && curPunc === state.context.type) { popContext(state); } } else if (curPunc === "." && state.context && state.context.type === "pattern") { popContext(state); } else if (/atom|string|variable/.test(style) && state.context) { if (/[\}\]]/.test(state.context.type)) { pushContext(state, "pattern", stream.column()); } else if (state.context.type === "pattern" && !state.context.align) { state.context.align = true; state.context.col = stream.column(); } } return style; }, indent: function(state, textAfter) { var firstChar = textAfter && textAfter.charAt(0); var context = state.context; if (/[\]\}]/.test(firstChar)) { while (context && context.type === "pattern") { context = context.prev; } } var closing = context && firstChar === context.type; if (!context) return 0; if (context.type === "keywords") return CodeMirror.commands.newlineAndIndent; if (context.align) return context.col + (closing ? 0 : 1); return context.indent + (closing ? 0 : indentUnit); } }; }); CodeMirror.modeExtensions["cypher"] = { autoFormatLineBreaks: function(text) { var i, lines, reProcessedPortion; var lines = text.split("\n"); var reProcessedPortion = /\s+\b(return|where|order by|match|with|skip|limit|create|delete|set)\b\s/g; for (var i = 0; i < lines.length; i++) lines[i] = lines[i].replace(reProcessedPortion, " \n$1 ").trim(); return lines.join("\n"); } }; CodeMirror.defineMIME("application/x-cypher-query", "cypher"); }); PK!ù£`TttKfile-manager-advanced/application/library/codemirror/mode/cypher/index.htmlnu„[µü¤ CodeMirror: Cypher Mode for CodeMirror

    Cypher Mode for CodeMirror

    MIME types defined: application/x-cypher-query

    PK!š5%ŒÆÆJfile-manager-advanced/application/library/codemirror/mode/groovy/groovy.jsnu„[µü¤// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMode("groovy", function(config) { function words(str) { var obj = {}, words = str.split(" "); for (var i = 0; i < words.length; ++i) obj[words[i]] = true; return obj; } var keywords = words( "abstract as assert boolean break byte case catch char class const continue def default " + "do double else enum extends final finally float for goto if implements import in " + "instanceof int interface long native new package private protected public return " + "short static strictfp super switch synchronized threadsafe throw throws transient " + "try void volatile while"); var blockKeywords = words("catch class do else finally for if switch try while enum interface def"); var standaloneKeywords = words("return break continue"); var atoms = words("null true false this"); var curPunc; function tokenBase(stream, state) { var ch = stream.next(); if (ch == '"' || ch == "'") { return startString(ch, stream, state); } if (/[\[\]{}\(\),;\:\.]/.test(ch)) { curPunc = ch; return null; } if (/\d/.test(ch)) { stream.eatWhile(/[\w\.]/); if (stream.eat(/eE/)) { stream.eat(/\+\-/); stream.eatWhile(/\d/); } return "number"; } if (ch == "/") { if (stream.eat("*")) { state.tokenize.push(tokenComment); return tokenComment(stream, state); } if (stream.eat("/")) { stream.skipToEnd(); return "comment"; } if (expectExpression(state.lastToken, false)) { return startString(ch, stream, state); } } if (ch == "-" && stream.eat(">")) { curPunc = "->"; return null; } if (/[+\-*&%=<>!?|\/~]/.test(ch)) { stream.eatWhile(/[+\-*&%=<>|~]/); return "operator"; } stream.eatWhile(/[\w\$_]/); if (ch == "@") { stream.eatWhile(/[\w\$_\.]/); return "meta"; } if (state.lastToken == ".") return "property"; if (stream.eat(":")) { curPunc = "proplabel"; return "property"; } var cur = stream.current(); if (atoms.propertyIsEnumerable(cur)) { return "atom"; } if (keywords.propertyIsEnumerable(cur)) { if (blockKeywords.propertyIsEnumerable(cur)) curPunc = "newstatement"; else if (standaloneKeywords.propertyIsEnumerable(cur)) curPunc = "standalone"; return "keyword"; } return "variable"; } tokenBase.isBase = true; function startString(quote, stream, state) { var tripleQuoted = false; if (quote != "/" && stream.eat(quote)) { if (stream.eat(quote)) tripleQuoted = true; else return "string"; } function t(stream, state) { var escaped = false, next, end = !tripleQuoted; while ((next = stream.next()) != null) { if (next == quote && !escaped) { if (!tripleQuoted) { break; } if (stream.match(quote + quote)) { end = true; break; } } if (quote == '"' && next == "$" && !escaped && stream.eat("{")) { state.tokenize.push(tokenBaseUntilBrace()); return "string"; } escaped = !escaped && next == "\\"; } if (end) state.tokenize.pop(); return "string"; } state.tokenize.push(t); return t(stream, state); } function tokenBaseUntilBrace() { var depth = 1; function t(stream, state) { if (stream.peek() == "}") { depth--; if (depth == 0) { state.tokenize.pop(); return state.tokenize[state.tokenize.length-1](stream, state); } } else if (stream.peek() == "{") { depth++; } return tokenBase(stream, state); } t.isBase = true; return t; } function tokenComment(stream, state) { var maybeEnd = false, ch; while (ch = stream.next()) { if (ch == "/" && maybeEnd) { state.tokenize.pop(); break; } maybeEnd = (ch == "*"); } return "comment"; } function expectExpression(last, newline) { return !last || last == "operator" || last == "->" || /[\.\[\{\(,;:]/.test(last) || last == "newstatement" || last == "keyword" || last == "proplabel" || (last == "standalone" && !newline); } function Context(indented, column, type, align, prev) { this.indented = indented; this.column = column; this.type = type; this.align = align; this.prev = prev; } function pushContext(state, col, type) { return state.context = new Context(state.indented, col, type, null, state.context); } function popContext(state) { var t = state.context.type; if (t == ")" || t == "]" || t == "}") state.indented = state.context.indented; return state.context = state.context.prev; } // Interface return { startState: function(basecolumn) { return { tokenize: [tokenBase], context: new Context((basecolumn || 0) - config.indentUnit, 0, "top", false), indented: 0, startOfLine: true, lastToken: null }; }, token: function(stream, state) { var ctx = state.context; if (stream.sol()) { if (ctx.align == null) ctx.align = false; state.indented = stream.indentation(); state.startOfLine = true; // Automatic semicolon insertion if (ctx.type == "statement" && !expectExpression(state.lastToken, true)) { popContext(state); ctx = state.context; } } if (stream.eatSpace()) return null; curPunc = null; var style = state.tokenize[state.tokenize.length-1](stream, state); if (style == "comment") return style; if (ctx.align == null) ctx.align = true; if ((curPunc == ";" || curPunc == ":") && ctx.type == "statement") popContext(state); // Handle indentation for {x -> \n ... } else if (curPunc == "->" && ctx.type == "statement" && ctx.prev.type == "}") { popContext(state); state.context.align = false; } else if (curPunc == "{") pushContext(state, stream.column(), "}"); else if (curPunc == "[") pushContext(state, stream.column(), "]"); else if (curPunc == "(") pushContext(state, stream.column(), ")"); else if (curPunc == "}") { while (ctx.type == "statement") ctx = popContext(state); if (ctx.type == "}") ctx = popContext(state); while (ctx.type == "statement") ctx = popContext(state); } else if (curPunc == ctx.type) popContext(state); else if (ctx.type == "}" || ctx.type == "top" || (ctx.type == "statement" && curPunc == "newstatement")) pushContext(state, stream.column(), "statement"); state.startOfLine = false; state.lastToken = curPunc || style; return style; }, indent: function(state, textAfter) { if (!state.tokenize[state.tokenize.length-1].isBase) return 0; var firstChar = textAfter && textAfter.charAt(0), ctx = state.context; if (ctx.type == "statement" && !expectExpression(state.lastToken, true)) ctx = ctx.prev; var closing = firstChar == ctx.type; if (ctx.type == "statement") return ctx.indented + (firstChar == "{" ? 0 : config.indentUnit); else if (ctx.align) return ctx.column + (closing ? 0 : 1); else return ctx.indented + (closing ? 0 : config.indentUnit); }, electricChars: "{}", closeBrackets: {triples: "'\""}, fold: "brace" }; }); CodeMirror.defineMIME("text/x-groovy", "groovy"); }); PK!¿¦j¦��Kfile-manager-advanced/application/library/codemirror/mode/groovy/index.htmlnu„[µü¤ CodeMirror: Groovy mode

    Groovy mode

    MIME types defined: text/x-groovy

    PK!ß'‰F°°Dfile-manager-advanced/application/library/codemirror/mode/elm/elm.jsnu„[µü¤// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMode("elm", function() { function switchState(source, setState, f) { setState(f); return f(source, setState); } // These should all be Unicode extended, as per the Haskell 2010 report var smallRE = /[a-z_]/; var largeRE = /[A-Z]/; var digitRE = /[0-9]/; var hexitRE = /[0-9A-Fa-f]/; var octitRE = /[0-7]/; var idRE = /[a-z_A-Z0-9\']/; var symbolRE = /[-!#$%&*+.\/<=>?@\\^|~:\u03BB\u2192]/; var specialRE = /[(),;[\]`{}]/; var whiteCharRE = /[ \t\v\f]/; // newlines are handled in tokenizer function normal() { return function (source, setState) { if (source.eatWhile(whiteCharRE)) { return null; } var ch = source.next(); if (specialRE.test(ch)) { if (ch == '{' && source.eat('-')) { var t = "comment"; if (source.eat('#')) t = "meta"; return switchState(source, setState, ncomment(t, 1)); } return null; } if (ch == '\'') { if (source.eat('\\')) source.next(); // should handle other escapes here else source.next(); if (source.eat('\'')) return "string"; return "error"; } if (ch == '"') { return switchState(source, setState, stringLiteral); } if (largeRE.test(ch)) { source.eatWhile(idRE); if (source.eat('.')) return "qualifier"; return "variable-2"; } if (smallRE.test(ch)) { var isDef = source.pos === 1; source.eatWhile(idRE); return isDef ? "variable-3" : "variable"; } if (digitRE.test(ch)) { if (ch == '0') { if (source.eat(/[xX]/)) { source.eatWhile(hexitRE); // should require at least 1 return "integer"; } if (source.eat(/[oO]/)) { source.eatWhile(octitRE); // should require at least 1 return "number"; } } source.eatWhile(digitRE); var t = "number"; if (source.eat('.')) { t = "number"; source.eatWhile(digitRE); // should require at least 1 } if (source.eat(/[eE]/)) { t = "number"; source.eat(/[-+]/); source.eatWhile(digitRE); // should require at least 1 } return t; } if (symbolRE.test(ch)) { if (ch == '-' && source.eat(/-/)) { source.eatWhile(/-/); if (!source.eat(symbolRE)) { source.skipToEnd(); return "comment"; } } source.eatWhile(symbolRE); return "builtin"; } return "error"; } } function ncomment(type, nest) { if (nest == 0) { return normal(); } return function(source, setState) { var currNest = nest; while (!source.eol()) { var ch = source.next(); if (ch == '{' && source.eat('-')) { ++currNest; } else if (ch == '-' && source.eat('}')) { --currNest; if (currNest == 0) { setState(normal()); return type; } } } setState(ncomment(type, currNest)); return type; } } function stringLiteral(source, setState) { while (!source.eol()) { var ch = source.next(); if (ch == '"') { setState(normal()); return "string"; } if (ch == '\\') { if (source.eol() || source.eat(whiteCharRE)) { setState(stringGap); return "string"; } if (!source.eat('&')) source.next(); // should handle other escapes here } } setState(normal()); return "error"; } function stringGap(source, setState) { if (source.eat('\\')) { return switchState(source, setState, stringLiteral); } source.next(); setState(normal()); return "error"; } var wellKnownWords = (function() { var wkw = {}; var keywords = [ "case", "of", "as", "if", "then", "else", "let", "in", "infix", "infixl", "infixr", "type", "alias", "input", "output", "foreign", "loopback", "module", "where", "import", "exposing", "_", "..", "|", ":", "=", "\\", "\"", "->", "<-" ]; for (var i = keywords.length; i--;) wkw[keywords[i]] = "keyword"; return wkw; })(); return { startState: function () { return { f: normal() }; }, copyState: function (s) { return { f: s.f }; }, token: function(stream, state) { var t = state.f(stream, function(s) { state.f = s; }); var w = stream.current(); return (wellKnownWords.hasOwnProperty(w)) ? wellKnownWords[w] : t; } }; }); CodeMirror.defineMIME("text/x-elm", "elm"); }); PK!…Î!hhHfile-manager-advanced/application/library/codemirror/mode/elm/index.htmlnu„[µü¤ CodeMirror: Elm mode

    Elm mode

    MIME types defined: text/x-elm.

    PK!P3Bcb'b'Ffile-manager-advanced/application/library/codemirror/mode/mirc/mirc.jsnu„[µü¤// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE //mIRC mode by Ford_Lawnmower :: Based on Velocity mode by Steve O'Hara (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMIME("text/mirc", "mirc"); CodeMirror.defineMode("mirc", function() { function parseWords(str) { var obj = {}, words = str.split(" "); for (var i = 0; i < words.length; ++i) obj[words[i]] = true; return obj; } var specials = parseWords("$! $$ $& $? $+ $abook $abs $active $activecid " + "$activewid $address $addtok $agent $agentname $agentstat $agentver " + "$alias $and $anick $ansi2mirc $aop $appactive $appstate $asc $asctime " + "$asin $atan $avoice $away $awaymsg $awaytime $banmask $base $bfind " + "$binoff $biton $bnick $bvar $bytes $calc $cb $cd $ceil $chan $chanmodes " + "$chantypes $chat $chr $cid $clevel $click $cmdbox $cmdline $cnick $color " + "$com $comcall $comchan $comerr $compact $compress $comval $cos $count " + "$cr $crc $creq $crlf $ctime $ctimer $ctrlenter $date $day $daylight " + "$dbuh $dbuw $dccignore $dccport $dde $ddename $debug $decode $decompress " + "$deltok $devent $dialog $did $didreg $didtok $didwm $disk $dlevel $dll " + "$dllcall $dname $dns $duration $ebeeps $editbox $emailaddr $encode $error " + "$eval $event $exist $feof $ferr $fgetc $file $filename $filtered $finddir " + "$finddirn $findfile $findfilen $findtok $fline $floor $fopen $fread $fserve " + "$fulladdress $fulldate $fullname $fullscreen $get $getdir $getdot $gettok $gmt " + "$group $halted $hash $height $hfind $hget $highlight $hnick $hotline " + "$hotlinepos $ial $ialchan $ibl $idle $iel $ifmatch $ignore $iif $iil " + "$inelipse $ini $inmidi $inpaste $inpoly $input $inrect $inroundrect " + "$insong $instok $int $inwave $ip $isalias $isbit $isdde $isdir $isfile " + "$isid $islower $istok $isupper $keychar $keyrpt $keyval $knick $lactive " + "$lactivecid $lactivewid $left $len $level $lf $line $lines $link $lock " + "$lock $locked $log $logstamp $logstampfmt $longfn $longip $lower $ltimer " + "$maddress $mask $matchkey $matchtok $md5 $me $menu $menubar $menucontext " + "$menutype $mid $middir $mircdir $mircexe $mircini $mklogfn $mnick $mode " + "$modefirst $modelast $modespl $mouse $msfile $network $newnick $nick $nofile " + "$nopath $noqt $not $notags $notify $null $numeric $numok $oline $onpoly " + "$opnick $or $ord $os $passivedcc $pic $play $pnick $port $portable $portfree " + "$pos $prefix $prop $protect $puttok $qt $query $rand $r $rawmsg $read $readomo " + "$readn $regex $regml $regsub $regsubex $remove $remtok $replace $replacex " + "$reptok $result $rgb $right $round $scid $scon $script $scriptdir $scriptline " + "$sdir $send $server $serverip $sfile $sha1 $shortfn $show $signal $sin " + "$site $sline $snick $snicks $snotify $sock $sockbr $sockerr $sockname " + "$sorttok $sound $sqrt $ssl $sreq $sslready $status $strip $str $stripped " + "$syle $submenu $switchbar $tan $target $ticks $time $timer $timestamp " + "$timestampfmt $timezone $tip $titlebar $toolbar $treebar $trust $ulevel " + "$ulist $upper $uptime $url $usermode $v1 $v2 $var $vcmd $vcmdstat $vcmdver " + "$version $vnick $vol $wid $width $wildsite $wildtok $window $wrap $xor"); var keywords = parseWords("abook ajinvite alias aline ame amsg anick aop auser autojoin avoice " + "away background ban bcopy beep bread break breplace bset btrunc bunset bwrite " + "channel clear clearall cline clipboard close cnick color comclose comopen " + "comreg continue copy creq ctcpreply ctcps dcc dccserver dde ddeserver " + "debug dec describe dialog did didtok disable disconnect dlevel dline dll " + "dns dqwindow drawcopy drawdot drawfill drawline drawpic drawrect drawreplace " + "drawrot drawsave drawscroll drawtext ebeeps echo editbox emailaddr enable " + "events exit fclose filter findtext finger firewall flash flist flood flush " + "flushini font fopen fseek fsend fserve fullname fwrite ghide gload gmove " + "gopts goto gplay gpoint gqreq groups gshow gsize gstop gtalk gunload hadd " + "halt haltdef hdec hdel help hfree hinc hload hmake hop hsave ial ialclear " + "ialmark identd if ignore iline inc invite iuser join kick linesep links list " + "load loadbuf localinfo log mdi me menubar mkdir mnick mode msg nick noop notice " + "notify omsg onotice part partall pdcc perform play playctrl pop protect pvoice " + "qme qmsg query queryn quit raw reload remini remote remove rename renwin " + "reseterror resetidle return rlevel rline rmdir run ruser save savebuf saveini " + "say scid scon server set showmirc signam sline sockaccept sockclose socklist " + "socklisten sockmark sockopen sockpause sockread sockrename sockudp sockwrite " + "sound speak splay sreq strip switchbar timer timestamp titlebar tnick tokenize " + "toolbar topic tray treebar ulist unload unset unsetall updatenl url uwho " + "var vcadd vcmd vcrem vol while whois window winhelp write writeint if isalnum " + "isalpha isaop isavoice isban ischan ishop isignore isin isincs isletter islower " + "isnotify isnum ison isop isprotect isreg isupper isvoice iswm iswmcs " + "elseif else goto menu nicklist status title icon size option text edit " + "button check radio box scroll list combo link tab item"); var functions = parseWords("if elseif else and not or eq ne in ni for foreach while switch"); var isOperatorChar = /[+\-*&%=<>!?^\/\|]/; function chain(stream, state, f) { state.tokenize = f; return f(stream, state); } function tokenBase(stream, state) { var beforeParams = state.beforeParams; state.beforeParams = false; var ch = stream.next(); if (/[\[\]{}\(\),\.]/.test(ch)) { if (ch == "(" && beforeParams) state.inParams = true; else if (ch == ")") state.inParams = false; return null; } else if (/\d/.test(ch)) { stream.eatWhile(/[\w\.]/); return "number"; } else if (ch == "\\") { stream.eat("\\"); stream.eat(/./); return "number"; } else if (ch == "/" && stream.eat("*")) { return chain(stream, state, tokenComment); } else if (ch == ";" && stream.match(/ *\( *\(/)) { return chain(stream, state, tokenUnparsed); } else if (ch == ";" && !state.inParams) { stream.skipToEnd(); return "comment"; } else if (ch == '"') { stream.eat(/"/); return "keyword"; } else if (ch == "$") { stream.eatWhile(/[$_a-z0-9A-Z\.:]/); if (specials && specials.propertyIsEnumerable(stream.current().toLowerCase())) { return "keyword"; } else { state.beforeParams = true; return "builtin"; } } else if (ch == "%") { stream.eatWhile(/[^,^\s^\(^\)]/); state.beforeParams = true; return "string"; } else if (isOperatorChar.test(ch)) { stream.eatWhile(isOperatorChar); return "operator"; } else { stream.eatWhile(/[\w\$_{}]/); var word = stream.current().toLowerCase(); if (keywords && keywords.propertyIsEnumerable(word)) return "keyword"; if (functions && functions.propertyIsEnumerable(word)) { state.beforeParams = true; return "keyword"; } return null; } } function tokenComment(stream, state) { var maybeEnd = false, ch; while (ch = stream.next()) { if (ch == "/" && maybeEnd) { state.tokenize = tokenBase; break; } maybeEnd = (ch == "*"); } return "comment"; } function tokenUnparsed(stream, state) { var maybeEnd = 0, ch; while (ch = stream.next()) { if (ch == ";" && maybeEnd == 2) { state.tokenize = tokenBase; break; } if (ch == ")") maybeEnd++; else if (ch != " ") maybeEnd = 0; } return "meta"; } return { startState: function() { return { tokenize: tokenBase, beforeParams: false, inParams: false }; }, token: function(stream, state) { if (stream.eatSpace()) return null; return state.tokenize(stream, state); } }; }); }); PK!Ö¼&I¦¦Ifile-manager-advanced/application/library/codemirror/mode/mirc/index.htmlnu„[µü¤ CodeMirror: mIRC mode

    mIRC mode

    MIME types defined: text/mirc.

    PK!sÄ2ÒÑÑJfile-manager-advanced/application/library/codemirror/mode/shell/index.htmlnu„[µü¤ CodeMirror: Shell mode

    Shell mode

    MIME types defined: text/x-sh.

    PK!Ei}ììGfile-manager-advanced/application/library/codemirror/mode/shell/test.jsnu„[µü¤// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function() { var mode = CodeMirror.getMode({}, "shell"); function MT(name) { test.mode(name, mode, Array.prototype.slice.call(arguments, 1)); } MT("var", "text [def $var] text"); MT("varBraces", "text[def ${var}]text"); MT("varVar", "text [def $a$b] text"); MT("varBracesVarBraces", "text[def ${a}${b}]text"); MT("singleQuotedVar", "[string 'text $var text']"); MT("singleQuotedVarBraces", "[string 'text ${var} text']"); MT("doubleQuotedVar", '[string "text ][def $var][string text"]'); MT("doubleQuotedVarBraces", '[string "text][def ${var}][string text"]'); MT("doubleQuotedVarPunct", '[string "text ][def $@][string text"]'); MT("doubleQuotedVarVar", '[string "][def $a$b][string "]'); MT("doubleQuotedVarBracesVarBraces", '[string "][def ${a}${b}][string "]'); MT("notAString", "text\\'text"); MT("escapes", "outside\\'\\\"\\`\\\\[string \"inside\\`\\'\\\"\\\\`\\$notAVar\"]outside\\$\\(notASubShell\\)"); MT("subshell", "[builtin echo] [quote $(whoami)] s log, stardate [quote `date`]."); MT("doubleQuotedSubshell", "[builtin echo] [string \"][quote $(whoami)][string 's log, stardate `date`.\"]"); MT("hashbang", "[meta #!/bin/bash]"); MT("comment", "text [comment # Blurb]"); MT("numbers", "[number 0] [number 1] [number 2]"); MT("keywords", "[keyword while] [atom true]; [keyword do]", " [builtin sleep] [number 3]", "[keyword done]"); MT("options", "[builtin ls] [attribute -l] [attribute --human-readable]"); MT("operator", "[def var][operator =]value"); })(); PK!—ÐÐHfile-manager-advanced/application/library/codemirror/mode/shell/shell.jsnu„[µü¤// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMode('shell', function() { var words = {}; function define(style, string) { var split = string.split(' '); for(var i = 0; i < split.length; i++) { words[split[i]] = style; } }; // Atoms define('atom', 'true false'); // Keywords define('keyword', 'if then do else elif while until for in esac fi fin ' + 'fil done exit set unset export function'); // Commands define('builtin', 'ab awk bash beep cat cc cd chown chmod chroot clear cp ' + 'curl cut diff echo find gawk gcc get git grep kill killall ln ls make ' + 'mkdir openssl mv nc node npm ping ps restart rm rmdir sed service sh ' + 'shopt shred source sort sleep ssh start stop su sudo tee telnet top ' + 'touch vi vim wall wc wget who write yes zsh'); function tokenBase(stream, state) { if (stream.eatSpace()) return null; var sol = stream.sol(); var ch = stream.next(); if (ch === '\\') { stream.next(); return null; } if (ch === '\'' || ch === '"' || ch === '`') { state.tokens.unshift(tokenString(ch)); return tokenize(stream, state); } if (ch === '#') { if (sol && stream.eat('!')) { stream.skipToEnd(); return 'meta'; // 'comment'? } stream.skipToEnd(); return 'comment'; } if (ch === '$') { state.tokens.unshift(tokenDollar); return tokenize(stream, state); } if (ch === '+' || ch === '=') { return 'operator'; } if (ch === '-') { stream.eat('-'); stream.eatWhile(/\w/); return 'attribute'; } if (/\d/.test(ch)) { stream.eatWhile(/\d/); if(stream.eol() || !/\w/.test(stream.peek())) { return 'number'; } } stream.eatWhile(/[\w-]/); var cur = stream.current(); if (stream.peek() === '=' && /\w+/.test(cur)) return 'def'; return words.hasOwnProperty(cur) ? words[cur] : null; } function tokenString(quote) { return function(stream, state) { var next, end = false, escaped = false; while ((next = stream.next()) != null) { if (next === quote && !escaped) { end = true; break; } if (next === '$' && !escaped && quote !== '\'') { escaped = true; stream.backUp(1); state.tokens.unshift(tokenDollar); break; } escaped = !escaped && next === '\\'; } if (end || !escaped) { state.tokens.shift(); } return (quote === '`' || quote === ')' ? 'quote' : 'string'); }; }; var tokenDollar = function(stream, state) { if (state.tokens.length > 1) stream.eat('$'); var ch = stream.next(), hungry = /\w/; if (ch === '{') hungry = /[^}]/; if (ch === '(') { state.tokens[0] = tokenString(')'); return tokenize(stream, state); } if (!/\d/.test(ch)) { stream.eatWhile(hungry); stream.eat('}'); } state.tokens.shift(); return 'def'; }; function tokenize(stream, state) { return (state.tokens[0] || tokenBase) (stream, state); }; return { startState: function() {return {tokens:[]};}, token: function(stream, state) { return tokenize(stream, state); }, lineComment: '#', fold: "brace" }; }); CodeMirror.defineMIME('text/x-sh', 'shell'); }); PK!Áö…‡ÙÙ@file-manager-advanced/application/library/codemirror/mode/q/q.jsnu„[µü¤// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMode("q",function(config){ var indentUnit=config.indentUnit, curPunc, keywords=buildRE(["abs","acos","aj","aj0","all","and","any","asc","asin","asof","atan","attr","avg","avgs","bin","by","ceiling","cols","cor","cos","count","cov","cross","csv","cut","delete","deltas","desc","dev","differ","distinct","div","do","each","ej","enlist","eval","except","exec","exit","exp","fby","fills","first","fkeys","flip","floor","from","get","getenv","group","gtime","hclose","hcount","hdel","hopen","hsym","iasc","idesc","if","ij","in","insert","inter","inv","key","keys","last","like","list","lj","load","log","lower","lsq","ltime","ltrim","mavg","max","maxs","mcount","md5","mdev","med","meta","min","mins","mmax","mmin","mmu","mod","msum","neg","next","not","null","or","over","parse","peach","pj","plist","prd","prds","prev","prior","rand","rank","ratios","raze","read0","read1","reciprocal","reverse","rload","rotate","rsave","rtrim","save","scan","select","set","setenv","show","signum","sin","sqrt","ss","ssr","string","sublist","sum","sums","sv","system","tables","tan","til","trim","txf","type","uj","ungroup","union","update","upper","upsert","value","var","view","views","vs","wavg","where","where","while","within","wj","wj1","wsum","xasc","xbar","xcol","xcols","xdesc","xexp","xgroup","xkey","xlog","xprev","xrank"]), E=/[|/&^!+:\\\-*%$=~#;@><,?_\'\"\[\(\]\)\s{}]/; function buildRE(w){return new RegExp("^("+w.join("|")+")$");} function tokenBase(stream,state){ var sol=stream.sol(),c=stream.next(); curPunc=null; if(sol) if(c=="/") return(state.tokenize=tokenLineComment)(stream,state); else if(c=="\\"){ if(stream.eol()||/\s/.test(stream.peek())) return stream.skipToEnd(),/^\\\s*$/.test(stream.current())?(state.tokenize=tokenCommentToEOF)(stream, state):state.tokenize=tokenBase,"comment"; else return state.tokenize=tokenBase,"builtin"; } if(/\s/.test(c)) return stream.peek()=="/"?(stream.skipToEnd(),"comment"):"whitespace"; if(c=='"') return(state.tokenize=tokenString)(stream,state); if(c=='`') return stream.eatWhile(/[A-Z|a-z|\d|_|:|\/|\.]/),"symbol"; if(("."==c&&/\d/.test(stream.peek()))||/\d/.test(c)){ var t=null; stream.backUp(1); if(stream.match(/^\d{4}\.\d{2}(m|\.\d{2}([D|T](\d{2}(:\d{2}(:\d{2}(\.\d{1,9})?)?)?)?)?)/) || stream.match(/^\d+D(\d{2}(:\d{2}(:\d{2}(\.\d{1,9})?)?)?)/) || stream.match(/^\d{2}:\d{2}(:\d{2}(\.\d{1,9})?)?/) || stream.match(/^\d+[ptuv]{1}/)) t="temporal"; else if(stream.match(/^0[NwW]{1}/) || stream.match(/^0x[\d|a-f|A-F]*/) || stream.match(/^[0|1]+[b]{1}/) || stream.match(/^\d+[chijn]{1}/) || stream.match(/-?\d*(\.\d*)?(e[+\-]?\d+)?(e|f)?/)) t="number"; return(t&&(!(c=stream.peek())||E.test(c)))?t:(stream.next(),"error"); } if(/[A-Z|a-z]|\./.test(c)) return stream.eatWhile(/[A-Z|a-z|\.|_|\d]/),keywords.test(stream.current())?"keyword":"variable"; if(/[|/&^!+:\\\-*%$=~#;@><\.,?_\']/.test(c)) return null; if(/[{}\(\[\]\)]/.test(c)) return null; return"error"; } function tokenLineComment(stream,state){ return stream.skipToEnd(),/\/\s*$/.test(stream.current())?(state.tokenize=tokenBlockComment)(stream,state):(state.tokenize=tokenBase),"comment"; } function tokenBlockComment(stream,state){ var f=stream.sol()&&stream.peek()=="\\"; stream.skipToEnd(); if(f&&/^\\\s*$/.test(stream.current())) state.tokenize=tokenBase; return"comment"; } function tokenCommentToEOF(stream){return stream.skipToEnd(),"comment";} function tokenString(stream,state){ var escaped=false,next,end=false; while((next=stream.next())){ if(next=="\""&&!escaped){end=true;break;} escaped=!escaped&&next=="\\"; } if(end)state.tokenize=tokenBase; return"string"; } function pushContext(state,type,col){state.context={prev:state.context,indent:state.indent,col:col,type:type};} function popContext(state){state.indent=state.context.indent;state.context=state.context.prev;} return{ startState:function(){ return{tokenize:tokenBase, context:null, indent:0, col:0}; }, token:function(stream,state){ if(stream.sol()){ if(state.context&&state.context.align==null) state.context.align=false; state.indent=stream.indentation(); } //if (stream.eatSpace()) return null; var style=state.tokenize(stream,state); if(style!="comment"&&state.context&&state.context.align==null&&state.context.type!="pattern"){ state.context.align=true; } if(curPunc=="(")pushContext(state,")",stream.column()); else if(curPunc=="[")pushContext(state,"]",stream.column()); else if(curPunc=="{")pushContext(state,"}",stream.column()); else if(/[\]\}\)]/.test(curPunc)){ while(state.context&&state.context.type=="pattern")popContext(state); if(state.context&&curPunc==state.context.type)popContext(state); } else if(curPunc=="."&&state.context&&state.context.type=="pattern")popContext(state); else if(/atom|string|variable/.test(style)&&state.context){ if(/[\}\]]/.test(state.context.type)) pushContext(state,"pattern",stream.column()); else if(state.context.type=="pattern"&&!state.context.align){ state.context.align=true; state.context.col=stream.column(); } } return style; }, indent:function(state,textAfter){ var firstChar=textAfter&&textAfter.charAt(0); var context=state.context; if(/[\]\}]/.test(firstChar)) while (context&&context.type=="pattern")context=context.prev; var closing=context&&firstChar==context.type; if(!context) return 0; else if(context.type=="pattern") return context.col; else if(context.align) return context.col+(closing?0:1); else return context.indent+(closing?0:indentUnit); } }; }); CodeMirror.defineMIME("text/x-q","q"); }); PK!ÓsÉ##Ffile-manager-advanced/application/library/codemirror/mode/q/index.htmlnu„[µü¤ CodeMirror: Q mode

    Q mode

    MIME type defined: text/x-q.

    PK!µÀŽ.ù ù Dfile-manager-advanced/application/library/codemirror/mode/z80/z80.jsnu„[µü¤// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMode('z80', function(_config, parserConfig) { var ez80 = parserConfig.ez80; var keywords1, keywords2; if (ez80) { keywords1 = /^(exx?|(ld|cp)([di]r?)?|[lp]ea|pop|push|ad[cd]|cpl|daa|dec|inc|neg|sbc|sub|and|bit|[cs]cf|x?or|res|set|r[lr]c?a?|r[lr]d|s[lr]a|srl|djnz|nop|[de]i|halt|im|in([di]mr?|ir?|irx|2r?)|ot(dmr?|[id]rx|imr?)|out(0?|[di]r?|[di]2r?)|tst(io)?|slp)(\.([sl]?i)?[sl])?\b/i; keywords2 = /^(((call|j[pr]|rst|ret[in]?)(\.([sl]?i)?[sl])?)|(rs|st)mix)\b/i; } else { keywords1 = /^(exx?|(ld|cp|in)([di]r?)?|pop|push|ad[cd]|cpl|daa|dec|inc|neg|sbc|sub|and|bit|[cs]cf|x?or|res|set|r[lr]c?a?|r[lr]d|s[lr]a|srl|djnz|nop|rst|[de]i|halt|im|ot[di]r|out[di]?)\b/i; keywords2 = /^(call|j[pr]|ret[in]?|b_?(call|jump))\b/i; } var variables1 = /^(af?|bc?|c|de?|e|hl?|l|i[xy]?|r|sp)\b/i; var variables2 = /^(n?[zc]|p[oe]?|m)\b/i; var errors = /^([hl][xy]|i[xy][hl]|slia|sll)\b/i; var numbers = /^([\da-f]+h|[0-7]+o|[01]+b|\d+d?)\b/i; return { startState: function() { return { context: 0 }; }, token: function(stream, state) { if (!stream.column()) state.context = 0; if (stream.eatSpace()) return null; var w; if (stream.eatWhile(/\w/)) { if (ez80 && stream.eat('.')) { stream.eatWhile(/\w/); } w = stream.current(); if (stream.indentation()) { if ((state.context == 1 || state.context == 4) && variables1.test(w)) { state.context = 4; return 'var2'; } if (state.context == 2 && variables2.test(w)) { state.context = 4; return 'var3'; } if (keywords1.test(w)) { state.context = 1; return 'keyword'; } else if (keywords2.test(w)) { state.context = 2; return 'keyword'; } else if (state.context == 4 && numbers.test(w)) { return 'number'; } if (errors.test(w)) return 'error'; } else if (stream.match(numbers)) { return 'number'; } else { return null; } } else if (stream.eat(';')) { stream.skipToEnd(); return 'comment'; } else if (stream.eat('"')) { while (w = stream.next()) { if (w == '"') break; if (w == '\\') stream.next(); } return 'string'; } else if (stream.eat('\'')) { if (stream.match(/\\?.'/)) return 'number'; } else if (stream.eat('.') || stream.sol() && stream.eat('#')) { state.context = 5; if (stream.eatWhile(/\w/)) return 'def'; } else if (stream.eat('$')) { if (stream.eatWhile(/[\da-f]/i)) return 'number'; } else if (stream.eat('%')) { if (stream.eatWhile(/[01]/)) return 'number'; } else { stream.next(); } return null; } }; }); CodeMirror.defineMIME("text/x-z80", "z80"); CodeMirror.defineMIME("text/x-ez80", { name: "z80", ez80: true }); }); PK!y+Þü~~Hfile-manager-advanced/application/library/codemirror/mode/z80/index.htmlnu„[µü¤ CodeMirror: Z80 assembly mode

    Z80 assembly mode

    MIME types defined: text/x-z80, text/x-ez80.

    PK!à³íªdªdNfile-manager-advanced/application/library/codemirror/mode/markdown/markdown.jsnu„[µü¤// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror"), require("../xml/xml"), require("../meta")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror", "../xml/xml", "../meta"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMode("markdown", function(cmCfg, modeCfg) { var htmlMode = CodeMirror.getMode(cmCfg, "text/html"); var htmlModeMissing = htmlMode.name == "null" function getMode(name) { if (CodeMirror.findModeByName) { var found = CodeMirror.findModeByName(name); if (found) name = found.mime || found.mimes[0]; } var mode = CodeMirror.getMode(cmCfg, name); return mode.name == "null" ? null : mode; } // Should characters that affect highlighting be highlighted separate? // Does not include characters that will be output (such as `1.` and `-` for lists) if (modeCfg.highlightFormatting === undefined) modeCfg.highlightFormatting = false; // Maximum number of nested blockquotes. Set to 0 for infinite nesting. // Excess `>` will emit `error` token. if (modeCfg.maxBlockquoteDepth === undefined) modeCfg.maxBlockquoteDepth = 0; // Should underscores in words open/close em/strong? if (modeCfg.underscoresBreakWords === undefined) modeCfg.underscoresBreakWords = true; // Use `fencedCodeBlocks` to configure fenced code blocks. false to // disable, string to specify a precise regexp that the fence should // match, and true to allow three or more backticks or tildes (as // per CommonMark). // Turn on task lists? ("- [ ] " and "- [x] ") if (modeCfg.taskLists === undefined) modeCfg.taskLists = false; // Turn on strikethrough syntax if (modeCfg.strikethrough === undefined) modeCfg.strikethrough = false; // Allow token types to be overridden by user-provided token types. if (modeCfg.tokenTypeOverrides === undefined) modeCfg.tokenTypeOverrides = {}; var tokenTypes = { header: "header", code: "comment", quote: "quote", list1: "variable-2", list2: "variable-3", list3: "keyword", hr: "hr", image: "image", imageAltText: "image-alt-text", imageMarker: "image-marker", formatting: "formatting", linkInline: "link", linkEmail: "link", linkText: "link", linkHref: "string", em: "em", strong: "strong", strikethrough: "strikethrough" }; for (var tokenType in tokenTypes) { if (tokenTypes.hasOwnProperty(tokenType) && modeCfg.tokenTypeOverrides[tokenType]) { tokenTypes[tokenType] = modeCfg.tokenTypeOverrides[tokenType]; } } var hrRE = /^([*\-_])(?:\s*\1){2,}\s*$/ , ulRE = /^[*\-+]\s+/ , olRE = /^[0-9]+([.)])\s+/ , taskListRE = /^\[(x| )\](?=\s)/ // Must follow ulRE or olRE , atxHeaderRE = modeCfg.allowAtxHeaderWithoutSpace ? /^(#+)/ : /^(#+)(?: |$)/ , setextHeaderRE = /^ *(?:\={1,}|-{1,})\s*$/ , textRE = /^[^#!\[\]*_\\<>` "'(~]+/ , fencedCodeRE = new RegExp("^(" + (modeCfg.fencedCodeBlocks === true ? "~~~+|```+" : modeCfg.fencedCodeBlocks) + ")[ \\t]*([\\w+#\-]*)"); function switchInline(stream, state, f) { state.f = state.inline = f; return f(stream, state); } function switchBlock(stream, state, f) { state.f = state.block = f; return f(stream, state); } function lineIsEmpty(line) { return !line || !/\S/.test(line.string) } // Blocks function blankLine(state) { // Reset linkTitle state state.linkTitle = false; // Reset EM state state.em = false; // Reset STRONG state state.strong = false; // Reset strikethrough state state.strikethrough = false; // Reset state.quote state.quote = 0; // Reset state.indentedCode state.indentedCode = false; if (htmlModeMissing && state.f == htmlBlock) { state.f = inlineNormal; state.block = blockNormal; } // Reset state.trailingSpace state.trailingSpace = 0; state.trailingSpaceNewLine = false; // Mark this line as blank state.prevLine = state.thisLine state.thisLine = null return null; } function blockNormal(stream, state) { var sol = stream.sol(); var prevLineIsList = state.list !== false, prevLineIsIndentedCode = state.indentedCode; state.indentedCode = false; if (prevLineIsList) { if (state.indentationDiff >= 0) { // Continued list if (state.indentationDiff < 4) { // Only adjust indentation if *not* a code block state.indentation -= state.indentationDiff; } state.list = null; } else if (state.indentation > 0) { state.list = null; } else { // No longer a list state.list = false; } } var match = null; if (state.indentationDiff >= 4) { stream.skipToEnd(); if (prevLineIsIndentedCode || lineIsEmpty(state.prevLine)) { state.indentation -= 4; state.indentedCode = true; return tokenTypes.code; } else { return null; } } else if (stream.eatSpace()) { return null; } else if ((match = stream.match(atxHeaderRE)) && match[1].length <= 6) { state.header = match[1].length; if (modeCfg.highlightFormatting) state.formatting = "header"; state.f = state.inline; return getType(state); } else if (!lineIsEmpty(state.prevLine) && !state.quote && !prevLineIsList && !prevLineIsIndentedCode && (match = stream.match(setextHeaderRE))) { state.header = match[0].charAt(0) == '=' ? 1 : 2; if (modeCfg.highlightFormatting) state.formatting = "header"; state.f = state.inline; return getType(state); } else if (stream.eat('>')) { state.quote = sol ? 1 : state.quote + 1; if (modeCfg.highlightFormatting) state.formatting = "quote"; stream.eatSpace(); return getType(state); } else if (stream.peek() === '[') { return switchInline(stream, state, footnoteLink); } else if (stream.match(hrRE, true)) { state.hr = true; return tokenTypes.hr; } else if ((lineIsEmpty(state.prevLine) || prevLineIsList) && (stream.match(ulRE, false) || stream.match(olRE, false))) { var listType = null; if (stream.match(ulRE, true)) { listType = 'ul'; } else { stream.match(olRE, true); listType = 'ol'; } state.indentation = stream.column() + stream.current().length; state.list = true; // While this list item's marker's indentation // is less than the deepest list item's content's indentation, // pop the deepest list item indentation off the stack. while (state.listStack && stream.column() < state.listStack[state.listStack.length - 1]) { state.listStack.pop(); } // Add this list item's content's indentation to the stack state.listStack.push(state.indentation); if (modeCfg.taskLists && stream.match(taskListRE, false)) { state.taskList = true; } state.f = state.inline; if (modeCfg.highlightFormatting) state.formatting = ["list", "list-" + listType]; return getType(state); } else if (modeCfg.fencedCodeBlocks && (match = stream.match(fencedCodeRE, true))) { state.fencedChars = match[1] // try switching mode state.localMode = getMode(match[2]); if (state.localMode) state.localState = CodeMirror.startState(state.localMode); state.f = state.block = local; if (modeCfg.highlightFormatting) state.formatting = "code-block"; state.code = -1 return getType(state); } return switchInline(stream, state, state.inline); } function htmlBlock(stream, state) { var style = htmlMode.token(stream, state.htmlState); if (!htmlModeMissing) { var inner = CodeMirror.innerMode(htmlMode, state.htmlState) if ((inner.mode.name == "xml" && inner.state.tagStart === null && (!inner.state.context && inner.state.tokenize.isInText)) || (state.md_inside && stream.current().indexOf(">") > -1)) { state.f = inlineNormal; state.block = blockNormal; state.htmlState = null; } } return style; } function local(stream, state) { if (state.fencedChars && stream.match(state.fencedChars, false)) { state.localMode = state.localState = null; state.f = state.block = leavingLocal; return null; } else if (state.localMode) { return state.localMode.token(stream, state.localState); } else { stream.skipToEnd(); return tokenTypes.code; } } function leavingLocal(stream, state) { stream.match(state.fencedChars); state.block = blockNormal; state.f = inlineNormal; state.fencedChars = null; if (modeCfg.highlightFormatting) state.formatting = "code-block"; state.code = 1 var returnType = getType(state); state.code = 0 return returnType; } // Inline function getType(state) { var styles = []; if (state.formatting) { styles.push(tokenTypes.formatting); if (typeof state.formatting === "string") state.formatting = [state.formatting]; for (var i = 0; i < state.formatting.length; i++) { styles.push(tokenTypes.formatting + "-" + state.formatting[i]); if (state.formatting[i] === "header") { styles.push(tokenTypes.formatting + "-" + state.formatting[i] + "-" + state.header); } // Add `formatting-quote` and `formatting-quote-#` for blockquotes // Add `error` instead if the maximum blockquote nesting depth is passed if (state.formatting[i] === "quote") { if (!modeCfg.maxBlockquoteDepth || modeCfg.maxBlockquoteDepth >= state.quote) { styles.push(tokenTypes.formatting + "-" + state.formatting[i] + "-" + state.quote); } else { styles.push("error"); } } } } if (state.taskOpen) { styles.push("meta"); return styles.length ? styles.join(' ') : null; } if (state.taskClosed) { styles.push("property"); return styles.length ? styles.join(' ') : null; } if (state.linkHref) { styles.push(tokenTypes.linkHref, "url"); } else { // Only apply inline styles to non-url text if (state.strong) { styles.push(tokenTypes.strong); } if (state.em) { styles.push(tokenTypes.em); } if (state.strikethrough) { styles.push(tokenTypes.strikethrough); } if (state.linkText) { styles.push(tokenTypes.linkText); } if (state.code) { styles.push(tokenTypes.code); } if (state.image) { styles.push(tokenTypes.image); } if (state.imageAltText) { styles.push(tokenTypes.imageAltText, "link"); } if (state.imageMarker) { styles.push(tokenTypes.imageMarker); } } if (state.header) { styles.push(tokenTypes.header, tokenTypes.header + "-" + state.header); } if (state.quote) { styles.push(tokenTypes.quote); // Add `quote-#` where the maximum for `#` is modeCfg.maxBlockquoteDepth if (!modeCfg.maxBlockquoteDepth || modeCfg.maxBlockquoteDepth >= state.quote) { styles.push(tokenTypes.quote + "-" + state.quote); } else { styles.push(tokenTypes.quote + "-" + modeCfg.maxBlockquoteDepth); } } if (state.list !== false) { var listMod = (state.listStack.length - 1) % 3; if (!listMod) { styles.push(tokenTypes.list1); } else if (listMod === 1) { styles.push(tokenTypes.list2); } else { styles.push(tokenTypes.list3); } } if (state.trailingSpaceNewLine) { styles.push("trailing-space-new-line"); } else if (state.trailingSpace) { styles.push("trailing-space-" + (state.trailingSpace % 2 ? "a" : "b")); } return styles.length ? styles.join(' ') : null; } function handleText(stream, state) { if (stream.match(textRE, true)) { return getType(state); } return undefined; } function inlineNormal(stream, state) { var style = state.text(stream, state); if (typeof style !== 'undefined') return style; if (state.list) { // List marker (*, +, -, 1., etc) state.list = null; return getType(state); } if (state.taskList) { var taskOpen = stream.match(taskListRE, true)[1] !== "x"; if (taskOpen) state.taskOpen = true; else state.taskClosed = true; if (modeCfg.highlightFormatting) state.formatting = "task"; state.taskList = false; return getType(state); } state.taskOpen = false; state.taskClosed = false; if (state.header && stream.match(/^#+$/, true)) { if (modeCfg.highlightFormatting) state.formatting = "header"; return getType(state); } // Get sol() value now, before character is consumed var sol = stream.sol(); var ch = stream.next(); // Matches link titles present on next line if (state.linkTitle) { state.linkTitle = false; var matchCh = ch; if (ch === '(') { matchCh = ')'; } matchCh = (matchCh+'').replace(/([.?*+^$[\]\\(){}|-])/g, "\\$1"); var regex = '^\\s*(?:[^' + matchCh + '\\\\]+|\\\\\\\\|\\\\.)' + matchCh; if (stream.match(new RegExp(regex), true)) { return tokenTypes.linkHref; } } // If this block is changed, it may need to be updated in GFM mode if (ch === '`') { var previousFormatting = state.formatting; if (modeCfg.highlightFormatting) state.formatting = "code"; stream.eatWhile('`'); var count = stream.current().length if (state.code == 0) { state.code = count return getType(state) } else if (count == state.code) { // Must be exact var t = getType(state) state.code = 0 return t } else { state.formatting = previousFormatting return getType(state) } } else if (state.code) { return getType(state); } if (ch === '\\') { stream.next(); if (modeCfg.highlightFormatting) { var type = getType(state); var formattingEscape = tokenTypes.formatting + "-escape"; return type ? type + " " + formattingEscape : formattingEscape; } } if (ch === '!' && stream.match(/\[[^\]]*\] ?(?:\(|\[)/, false)) { state.imageMarker = true; state.image = true; if (modeCfg.highlightFormatting) state.formatting = "image"; return getType(state); } if (ch === '[' && state.imageMarker) { state.imageMarker = false; state.imageAltText = true if (modeCfg.highlightFormatting) state.formatting = "image"; return getType(state); } if (ch === ']' && state.imageAltText) { if (modeCfg.highlightFormatting) state.formatting = "image"; var type = getType(state); state.imageAltText = false; state.image = false; state.inline = state.f = linkHref; return type; } if (ch === '[' && stream.match(/[^\]]*\](\(.*\)| ?\[.*?\])/, false) && !state.image) { state.linkText = true; if (modeCfg.highlightFormatting) state.formatting = "link"; return getType(state); } if (ch === ']' && state.linkText && stream.match(/\(.*?\)| ?\[.*?\]/, false)) { if (modeCfg.highlightFormatting) state.formatting = "link"; var type = getType(state); state.linkText = false; state.inline = state.f = linkHref; return type; } if (ch === '<' && stream.match(/^(https?|ftps?):\/\/(?:[^\\>]|\\.)+>/, false)) { state.f = state.inline = linkInline; if (modeCfg.highlightFormatting) state.formatting = "link"; var type = getType(state); if (type){ type += " "; } else { type = ""; } return type + tokenTypes.linkInline; } if (ch === '<' && stream.match(/^[^> \\]+@(?:[^\\>]|\\.)+>/, false)) { state.f = state.inline = linkInline; if (modeCfg.highlightFormatting) state.formatting = "link"; var type = getType(state); if (type){ type += " "; } else { type = ""; } return type + tokenTypes.linkEmail; } if (ch === '<' && stream.match(/^(!--|\w)/, false)) { var end = stream.string.indexOf(">", stream.pos); if (end != -1) { var atts = stream.string.substring(stream.start, end); if (/markdown\s*=\s*('|"){0,1}1('|"){0,1}/.test(atts)) state.md_inside = true; } stream.backUp(1); state.htmlState = CodeMirror.startState(htmlMode); return switchBlock(stream, state, htmlBlock); } if (ch === '<' && stream.match(/^\/\w*?>/)) { state.md_inside = false; return "tag"; } var ignoreUnderscore = false; if (!modeCfg.underscoresBreakWords) { if (ch === '_' && stream.peek() !== '_' && stream.match(/(\w)/, false)) { var prevPos = stream.pos - 2; if (prevPos >= 0) { var prevCh = stream.string.charAt(prevPos); if (prevCh !== '_' && prevCh.match(/(\w)/, false)) { ignoreUnderscore = true; } } } } if (ch === '*' || (ch === '_' && !ignoreUnderscore)) { if (sol && stream.peek() === ' ') { // Do nothing, surrounded by newline and space } else if (state.strong === ch && stream.eat(ch)) { // Remove STRONG if (modeCfg.highlightFormatting) state.formatting = "strong"; var t = getType(state); state.strong = false; return t; } else if (!state.strong && stream.eat(ch)) { // Add STRONG state.strong = ch; if (modeCfg.highlightFormatting) state.formatting = "strong"; return getType(state); } else if (state.em === ch) { // Remove EM if (modeCfg.highlightFormatting) state.formatting = "em"; var t = getType(state); state.em = false; return t; } else if (!state.em) { // Add EM state.em = ch; if (modeCfg.highlightFormatting) state.formatting = "em"; return getType(state); } } else if (ch === ' ') { if (stream.eat('*') || stream.eat('_')) { // Probably surrounded by spaces if (stream.peek() === ' ') { // Surrounded by spaces, ignore return getType(state); } else { // Not surrounded by spaces, back up pointer stream.backUp(1); } } } if (modeCfg.strikethrough) { if (ch === '~' && stream.eatWhile(ch)) { if (state.strikethrough) {// Remove strikethrough if (modeCfg.highlightFormatting) state.formatting = "strikethrough"; var t = getType(state); state.strikethrough = false; return t; } else if (stream.match(/^[^\s]/, false)) {// Add strikethrough state.strikethrough = true; if (modeCfg.highlightFormatting) state.formatting = "strikethrough"; return getType(state); } } else if (ch === ' ') { if (stream.match(/^~~/, true)) { // Probably surrounded by space if (stream.peek() === ' ') { // Surrounded by spaces, ignore return getType(state); } else { // Not surrounded by spaces, back up pointer stream.backUp(2); } } } } if (ch === ' ') { if (stream.match(/ +$/, false)) { state.trailingSpace++; } else if (state.trailingSpace) { state.trailingSpaceNewLine = true; } } return getType(state); } function linkInline(stream, state) { var ch = stream.next(); if (ch === ">") { state.f = state.inline = inlineNormal; if (modeCfg.highlightFormatting) state.formatting = "link"; var type = getType(state); if (type){ type += " "; } else { type = ""; } return type + tokenTypes.linkInline; } stream.match(/^[^>]+/, true); return tokenTypes.linkInline; } function linkHref(stream, state) { // Check if space, and return NULL if so (to avoid marking the space) if(stream.eatSpace()){ return null; } var ch = stream.next(); if (ch === '(' || ch === '[') { state.f = state.inline = getLinkHrefInside(ch === "(" ? ")" : "]", 0); if (modeCfg.highlightFormatting) state.formatting = "link-string"; state.linkHref = true; return getType(state); } return 'error'; } var linkRE = { ")": /^(?:[^\\\(\)]|\\.|\((?:[^\\\(\)]|\\.)*\))*?(?=\))/, "]": /^(?:[^\\\[\]]|\\.|\[(?:[^\\\[\\]]|\\.)*\])*?(?=\])/ } function getLinkHrefInside(endChar) { return function(stream, state) { var ch = stream.next(); if (ch === endChar) { state.f = state.inline = inlineNormal; if (modeCfg.highlightFormatting) state.formatting = "link-string"; var returnState = getType(state); state.linkHref = false; return returnState; } stream.match(linkRE[endChar]) state.linkHref = true; return getType(state); }; } function footnoteLink(stream, state) { if (stream.match(/^([^\]\\]|\\.)*\]:/, false)) { state.f = footnoteLinkInside; stream.next(); // Consume [ if (modeCfg.highlightFormatting) state.formatting = "link"; state.linkText = true; return getType(state); } return switchInline(stream, state, inlineNormal); } function footnoteLinkInside(stream, state) { if (stream.match(/^\]:/, true)) { state.f = state.inline = footnoteUrl; if (modeCfg.highlightFormatting) state.formatting = "link"; var returnType = getType(state); state.linkText = false; return returnType; } stream.match(/^([^\]\\]|\\.)+/, true); return tokenTypes.linkText; } function footnoteUrl(stream, state) { // Check if space, and return NULL if so (to avoid marking the space) if(stream.eatSpace()){ return null; } // Match URL stream.match(/^[^\s]+/, true); // Check for link title if (stream.peek() === undefined) { // End of line, set flag to check next line state.linkTitle = true; } else { // More content on line, check if link title stream.match(/^(?:\s+(?:"(?:[^"\\]|\\\\|\\.)+"|'(?:[^'\\]|\\\\|\\.)+'|\((?:[^)\\]|\\\\|\\.)+\)))?/, true); } state.f = state.inline = inlineNormal; return tokenTypes.linkHref + " url"; } var mode = { startState: function() { return { f: blockNormal, prevLine: null, thisLine: null, block: blockNormal, htmlState: null, indentation: 0, inline: inlineNormal, text: handleText, formatting: false, linkText: false, linkHref: false, linkTitle: false, code: 0, em: false, strong: false, header: 0, hr: false, taskList: false, list: false, listStack: [], quote: 0, trailingSpace: 0, trailingSpaceNewLine: false, strikethrough: false, fencedChars: null }; }, copyState: function(s) { return { f: s.f, prevLine: s.prevLine, thisLine: s.thisLine, block: s.block, htmlState: s.htmlState && CodeMirror.copyState(htmlMode, s.htmlState), indentation: s.indentation, localMode: s.localMode, localState: s.localMode ? CodeMirror.copyState(s.localMode, s.localState) : null, inline: s.inline, text: s.text, formatting: false, linkTitle: s.linkTitle, code: s.code, em: s.em, strong: s.strong, strikethrough: s.strikethrough, header: s.header, hr: s.hr, taskList: s.taskList, list: s.list, listStack: s.listStack.slice(0), quote: s.quote, indentedCode: s.indentedCode, trailingSpace: s.trailingSpace, trailingSpaceNewLine: s.trailingSpaceNewLine, md_inside: s.md_inside, fencedChars: s.fencedChars }; }, token: function(stream, state) { // Reset state.formatting state.formatting = false; if (stream != state.thisLine) { var forceBlankLine = state.header || state.hr; // Reset state.header and state.hr state.header = 0; state.hr = false; if (stream.match(/^\s*$/, true) || forceBlankLine) { blankLine(state); if (!forceBlankLine) return null state.prevLine = null } state.prevLine = state.thisLine state.thisLine = stream // Reset state.taskList state.taskList = false; // Reset state.trailingSpace state.trailingSpace = 0; state.trailingSpaceNewLine = false; state.f = state.block; var indentation = stream.match(/^\s*/, true)[0].replace(/\t/g, ' ').length; state.indentationDiff = Math.min(indentation - state.indentation, 4); state.indentation = state.indentation + state.indentationDiff; if (indentation > 0) return null; } return state.f(stream, state); }, innerMode: function(state) { if (state.block == htmlBlock) return {state: state.htmlState, mode: htmlMode}; if (state.localState) return {state: state.localState, mode: state.localMode}; return {state: state, mode: mode}; }, blankLine: blankLine, getType: getType, fold: "markdown" }; return mode; }, "xml"); CodeMirror.defineMIME("text/x-markdown", "markdown"); }); PK!—Áº�Í*Í*Mfile-manager-advanced/application/library/codemirror/mode/markdown/index.htmlnu„[µü¤ CodeMirror: Markdown mode

    Markdown mode

    You might want to use the Github-Flavored Markdown mode instead, which adds support for fenced code blocks and a few other things.

    Optionally depends on the XML mode for properly highlighted inline XML blocks.

    MIME types defined: text/x-markdown.

    Parsing/Highlighting Tests: normal, verbose.

    PK!N)ŸŠÞsÞsJfile-manager-advanced/application/library/codemirror/mode/markdown/test.jsnu„[µü¤// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function() { var mode = CodeMirror.getMode({tabSize: 4}, "markdown"); function MT(name) { test.mode(name, mode, Array.prototype.slice.call(arguments, 1)); } var modeHighlightFormatting = CodeMirror.getMode({tabSize: 4}, {name: "markdown", highlightFormatting: true}); function FT(name) { test.mode(name, modeHighlightFormatting, Array.prototype.slice.call(arguments, 1)); } var modeAtxNoSpace = CodeMirror.getMode({tabSize: 4}, {name: "markdown", allowAtxHeaderWithoutSpace: true}); function AtxNoSpaceTest(name) { test.mode(name, modeAtxNoSpace, Array.prototype.slice.call(arguments, 1)); } var modeFenced = CodeMirror.getMode({tabSize: 4}, {name: "markdown", fencedCodeBlocks: true}); function FencedTest(name) { test.mode(name, modeFenced, Array.prototype.slice.call(arguments, 1)); } var modeOverrideClasses = CodeMirror.getMode({tabsize: 4}, { name: "markdown", strikethrough: true, tokenTypeOverrides: { "header" : "override-header", "code" : "override-code", "quote" : "override-quote", "list1" : "override-list1", "list2" : "override-list2", "list3" : "override-list3", "hr" : "override-hr", "image" : "override-image", "imageAltText": "override-image-alt-text", "imageMarker": "override-image-marker", "linkInline" : "override-link-inline", "linkEmail" : "override-link-email", "linkText" : "override-link-text", "linkHref" : "override-link-href", "em" : "override-em", "strong" : "override-strong", "strikethrough" : "override-strikethrough" }}); function TokenTypeOverrideTest(name) { test.mode(name, modeOverrideClasses, Array.prototype.slice.call(arguments, 1)); } var modeFormattingOverride = CodeMirror.getMode({tabsize: 4}, { name: "markdown", highlightFormatting: true, tokenTypeOverrides: { "formatting" : "override-formatting" }}); function FormatTokenTypeOverrideTest(name) { test.mode(name, modeFormattingOverride, Array.prototype.slice.call(arguments, 1)); } FT("formatting_emAsterisk", "[em&formatting&formatting-em *][em foo][em&formatting&formatting-em *]"); FT("formatting_emUnderscore", "[em&formatting&formatting-em _][em foo][em&formatting&formatting-em _]"); FT("formatting_strongAsterisk", "[strong&formatting&formatting-strong **][strong foo][strong&formatting&formatting-strong **]"); FT("formatting_strongUnderscore", "[strong&formatting&formatting-strong __][strong foo][strong&formatting&formatting-strong __]"); FT("formatting_codeBackticks", "[comment&formatting&formatting-code `][comment foo][comment&formatting&formatting-code `]"); FT("formatting_doubleBackticks", "[comment&formatting&formatting-code ``][comment foo ` bar][comment&formatting&formatting-code ``]"); FT("formatting_atxHeader", "[header&header-1&formatting&formatting-header&formatting-header-1 # ][header&header-1 foo # bar ][header&header-1&formatting&formatting-header&formatting-header-1 #]"); FT("formatting_setextHeader", "foo", "[header&header-1&formatting&formatting-header&formatting-header-1 =]"); FT("formatting_blockquote", "[quote"e-1&formatting&formatting-quote&formatting-quote-1 > ][quote"e-1 foo]"); FT("formatting_list", "[variable-2&formatting&formatting-list&formatting-list-ul - ][variable-2 foo]"); FT("formatting_list", "[variable-2&formatting&formatting-list&formatting-list-ol 1. ][variable-2 foo]"); FT("formatting_link", "[link&formatting&formatting-link [][link foo][link&formatting&formatting-link ]]][string&formatting&formatting-link-string&url (][string&url http://example.com/][string&formatting&formatting-link-string&url )]"); FT("formatting_linkReference", "[link&formatting&formatting-link [][link foo][link&formatting&formatting-link ]]][string&formatting&formatting-link-string&url [][string&url bar][string&formatting&formatting-link-string&url ]]]", "[link&formatting&formatting-link [][link bar][link&formatting&formatting-link ]]:] [string&url http://example.com/]"); FT("formatting_linkWeb", "[link&formatting&formatting-link <][link http://example.com/][link&formatting&formatting-link >]"); FT("formatting_linkEmail", "[link&formatting&formatting-link <][link user@example.com][link&formatting&formatting-link >]"); FT("formatting_escape", "[formatting-escape \\*]"); FT("formatting_image", "[formatting&formatting-image&image&image-marker !][formatting&formatting-image&image&image-alt-text&link [[][image&image-alt-text&link alt text][formatting&formatting-image&image&image-alt-text&link ]]][formatting&formatting-link-string&string&url (][url&string http://link.to/image.jpg][formatting&formatting-link-string&string&url )]"); MT("plainText", "foo"); // Don't style single trailing space MT("trailingSpace1", "foo "); // Two or more trailing spaces should be styled with line break character MT("trailingSpace2", "foo[trailing-space-a ][trailing-space-new-line ]"); MT("trailingSpace3", "foo[trailing-space-a ][trailing-space-b ][trailing-space-new-line ]"); MT("trailingSpace4", "foo[trailing-space-a ][trailing-space-b ][trailing-space-a ][trailing-space-new-line ]"); // Code blocks using 4 spaces (regardless of CodeMirror.tabSize value) MT("codeBlocksUsing4Spaces", " [comment foo]"); // Code blocks using 4 spaces with internal indentation MT("codeBlocksUsing4SpacesIndentation", " [comment bar]", " [comment hello]", " [comment world]", " [comment foo]", "bar"); // Code blocks should end even after extra indented lines MT("codeBlocksWithTrailingIndentedLine", " [comment foo]", " [comment bar]", " [comment baz]", " ", "hello"); // Code blocks using 1 tab (regardless of CodeMirror.indentWithTabs value) MT("codeBlocksUsing1Tab", "\t[comment foo]"); // No code blocks directly after paragraph // http://spec.commonmark.org/0.19/#example-65 MT("noCodeBlocksAfterParagraph", "Foo", " Bar"); // Inline code using backticks MT("inlineCodeUsingBackticks", "foo [comment `bar`]"); // Block code using single backtick (shouldn't work) MT("blockCodeSingleBacktick", "[comment `]", "[comment foo]", "[comment `]"); // Unclosed backticks // Instead of simply marking as CODE, it would be nice to have an // incomplete flag for CODE, that is styled slightly different. MT("unclosedBackticks", "foo [comment `bar]"); // Per documentation: "To include a literal backtick character within a // code span, you can use multiple backticks as the opening and closing // delimiters" MT("doubleBackticks", "[comment ``foo ` bar``]"); // Tests based on Dingus // http://daringfireball.net/projects/markdown/dingus // // Multiple backticks within an inline code block MT("consecutiveBackticks", "[comment `foo```bar`]"); // Multiple backticks within an inline code block with a second code block MT("consecutiveBackticks", "[comment `foo```bar`] hello [comment `world`]"); // Unclosed with several different groups of backticks MT("unclosedBackticks", "[comment ``foo ``` bar` hello]"); // Closed with several different groups of backticks MT("closedBackticks", "[comment ``foo ``` bar` hello``] world"); // atx headers // http://daringfireball.net/projects/markdown/syntax#header MT("atxH1", "[header&header-1 # foo]"); MT("atxH2", "[header&header-2 ## foo]"); MT("atxH3", "[header&header-3 ### foo]"); MT("atxH4", "[header&header-4 #### foo]"); MT("atxH5", "[header&header-5 ##### foo]"); MT("atxH6", "[header&header-6 ###### foo]"); // http://spec.commonmark.org/0.19/#example-24 MT("noAtxH7", "####### foo"); // http://spec.commonmark.org/0.19/#example-25 MT("noAtxH1WithoutSpace", "#5 bolt"); // CommonMark requires a space after # but most parsers don't AtxNoSpaceTest("atxNoSpaceAllowed_H1NoSpace", "[header&header-1 #foo]"); AtxNoSpaceTest("atxNoSpaceAllowed_H4NoSpace", "[header&header-4 ####foo]"); AtxNoSpaceTest("atxNoSpaceAllowed_H1Space", "[header&header-1 # foo]"); // Inline styles should be parsed inside headers MT("atxH1inline", "[header&header-1 # foo ][header&header-1&em *bar*]"); // Setext headers - H1, H2 // Per documentation, "Any number of underlining =’s or -’s will work." // http://daringfireball.net/projects/markdown/syntax#header // Ideally, the text would be marked as `header` as well, but this is // not really feasible at the moment. So, instead, we're testing against // what works today, to avoid any regressions. // // Check if single underlining = works MT("setextH1", "foo", "[header&header-1 =]"); // Check if 3+ ='s work MT("setextH1", "foo", "[header&header-1 ===]"); // Check if single underlining - works MT("setextH2", "foo", "[header&header-2 -]"); // Check if 3+ -'s work MT("setextH2", "foo", "[header&header-2 ---]"); // http://spec.commonmark.org/0.19/#example-45 MT("setextH2AllowSpaces", "foo", " [header&header-2 ---- ]"); // http://spec.commonmark.org/0.19/#example-44 MT("noSetextAfterIndentedCodeBlock", " [comment foo]", "[hr ---]"); // http://spec.commonmark.org/0.19/#example-51 MT("noSetextAfterQuote", "[quote"e-1 > foo]", "[hr ---]"); MT("noSetextAfterList", "[variable-2 - foo]", "[hr ---]"); // Single-line blockquote with trailing space MT("blockquoteSpace", "[quote"e-1 > foo]"); // Single-line blockquote MT("blockquoteNoSpace", "[quote"e-1 >foo]"); // No blank line before blockquote MT("blockquoteNoBlankLine", "foo", "[quote"e-1 > bar]"); // Nested blockquote MT("blockquoteSpace", "[quote"e-1 > foo]", "[quote"e-1 >][quote"e-2 > foo]", "[quote"e-1 >][quote"e-2 >][quote"e-3 > foo]"); // Single-line blockquote followed by normal paragraph MT("blockquoteThenParagraph", "[quote"e-1 >foo]", "", "bar"); // Multi-line blockquote (lazy mode) MT("multiBlockquoteLazy", "[quote"e-1 >foo]", "[quote"e-1 bar]"); // Multi-line blockquote followed by normal paragraph (lazy mode) MT("multiBlockquoteLazyThenParagraph", "[quote"e-1 >foo]", "[quote"e-1 bar]", "", "hello"); // Multi-line blockquote (non-lazy mode) MT("multiBlockquote", "[quote"e-1 >foo]", "[quote"e-1 >bar]"); // Multi-line blockquote followed by normal paragraph (non-lazy mode) MT("multiBlockquoteThenParagraph", "[quote"e-1 >foo]", "[quote"e-1 >bar]", "", "hello"); // Header with leading space after continued blockquote (#3287, negative indentation) MT("headerAfterContinuedBlockquote", "[quote"e-1 > foo]", "[quote"e-1 bar]", "", " [header&header-1 # hello]"); // Check list types MT("listAsterisk", "foo", "bar", "", "[variable-2 * foo]", "[variable-2 * bar]"); MT("listPlus", "foo", "bar", "", "[variable-2 + foo]", "[variable-2 + bar]"); MT("listDash", "foo", "bar", "", "[variable-2 - foo]", "[variable-2 - bar]"); MT("listNumber", "foo", "bar", "", "[variable-2 1. foo]", "[variable-2 2. bar]"); // Lists require a preceding blank line (per Dingus) MT("listBogus", "foo", "1. bar", "2. hello"); // List after hr MT("listAfterHr", "[hr ---]", "[variable-2 - bar]"); // List after header MT("listAfterHeader", "[header&header-1 # foo]", "[variable-2 - bar]"); // hr after list MT("hrAfterList", "[variable-2 - foo]", "[hr -----]"); // Formatting in lists (*) MT("listAsteriskFormatting", "[variable-2 * ][variable-2&em *foo*][variable-2 bar]", "[variable-2 * ][variable-2&strong **foo**][variable-2 bar]", "[variable-2 * ][variable-2&strong **][variable-2&em&strong *foo**][variable-2&em *][variable-2 bar]", "[variable-2 * ][variable-2&comment `foo`][variable-2 bar]"); // Formatting in lists (+) MT("listPlusFormatting", "[variable-2 + ][variable-2&em *foo*][variable-2 bar]", "[variable-2 + ][variable-2&strong **foo**][variable-2 bar]", "[variable-2 + ][variable-2&strong **][variable-2&em&strong *foo**][variable-2&em *][variable-2 bar]", "[variable-2 + ][variable-2&comment `foo`][variable-2 bar]"); // Formatting in lists (-) MT("listDashFormatting", "[variable-2 - ][variable-2&em *foo*][variable-2 bar]", "[variable-2 - ][variable-2&strong **foo**][variable-2 bar]", "[variable-2 - ][variable-2&strong **][variable-2&em&strong *foo**][variable-2&em *][variable-2 bar]", "[variable-2 - ][variable-2&comment `foo`][variable-2 bar]"); // Formatting in lists (1.) MT("listNumberFormatting", "[variable-2 1. ][variable-2&em *foo*][variable-2 bar]", "[variable-2 2. ][variable-2&strong **foo**][variable-2 bar]", "[variable-2 3. ][variable-2&strong **][variable-2&em&strong *foo**][variable-2&em *][variable-2 bar]", "[variable-2 4. ][variable-2&comment `foo`][variable-2 bar]"); // Paragraph lists MT("listParagraph", "[variable-2 * foo]", "", "[variable-2 * bar]"); // Multi-paragraph lists // // 4 spaces MT("listMultiParagraph", "[variable-2 * foo]", "", "[variable-2 * bar]", "", " [variable-2 hello]"); // 4 spaces, extra blank lines (should still be list, per Dingus) MT("listMultiParagraphExtra", "[variable-2 * foo]", "", "[variable-2 * bar]", "", "", " [variable-2 hello]"); // 4 spaces, plus 1 space (should still be list, per Dingus) MT("listMultiParagraphExtraSpace", "[variable-2 * foo]", "", "[variable-2 * bar]", "", " [variable-2 hello]", "", " [variable-2 world]"); // 1 tab MT("listTab", "[variable-2 * foo]", "", "[variable-2 * bar]", "", "\t[variable-2 hello]"); // No indent MT("listNoIndent", "[variable-2 * foo]", "", "[variable-2 * bar]", "", "hello"); MT("listCommonMarkIndentationCode", "[variable-2 * Code blocks also affect]", " [variable-3 * The next level starts where the contents start.]", " [variable-3 * Anything less than that will keep the item on the same level.]", " [variable-3 * Each list item can indent the first level further and further.]", " [variable-3 * For the most part, this makes sense while writing a list.]", " [keyword * This means two items with same indentation can be different levels.]", " [keyword * Each level has an indent requirement that can change between items.]", " [keyword * A list item that meets this will be part of the next level.]", " [variable-3 * Otherwise, it will be part of the level where it does meet this.]", " [variable-2 * World]"); // Blockquote MT("blockquote", "[variable-2 * foo]", "", "[variable-2 * bar]", "", " [variable-2"e"e-1 > hello]"); // Code block MT("blockquoteCode", "[variable-2 * foo]", "", "[variable-2 * bar]", "", " [comment > hello]", "", " [variable-2 world]"); // Code block followed by text MT("blockquoteCodeText", "[variable-2 * foo]", "", " [variable-2 bar]", "", " [comment hello]", "", " [variable-2 world]"); // Nested list MT("listAsteriskNested", "[variable-2 * foo]", "", " [variable-3 * bar]"); MT("listPlusNested", "[variable-2 + foo]", "", " [variable-3 + bar]"); MT("listDashNested", "[variable-2 - foo]", "", " [variable-3 - bar]"); MT("listNumberNested", "[variable-2 1. foo]", "", " [variable-3 2. bar]"); MT("listMixed", "[variable-2 * foo]", "", " [variable-3 + bar]", "", " [keyword - hello]", "", " [variable-2 1. world]"); MT("listBlockquote", "[variable-2 * foo]", "", " [variable-3 + bar]", "", " [quote"e-1&variable-3 > hello]"); MT("listCode", "[variable-2 * foo]", "", " [variable-3 + bar]", "", " [comment hello]"); // Code with internal indentation MT("listCodeIndentation", "[variable-2 * foo]", "", " [comment bar]", " [comment hello]", " [comment world]", " [comment foo]", " [variable-2 bar]"); // List nesting edge cases MT("listNested", "[variable-2 * foo]", "", " [variable-3 * bar]", "", " [variable-3 hello]" ); MT("listNested", "[variable-2 * foo]", "", " [variable-3 * bar]", "", " [keyword * foo]" ); // Code followed by text MT("listCodeText", "[variable-2 * foo]", "", " [comment bar]", "", "hello"); // Following tests directly from official Markdown documentation // http://daringfireball.net/projects/markdown/syntax#hr MT("hrSpace", "[hr * * *]"); MT("hr", "[hr ***]"); MT("hrLong", "[hr *****]"); MT("hrSpaceDash", "[hr - - -]"); MT("hrDashLong", "[hr ---------------------------------------]"); //Images MT("Images", "[image&image-marker !][image&image-alt-text&link [[alt text]]][string&url (http://link.to/image.jpg)]") //Images with highlight alt text MT("imageEm", "[image&image-marker !][image&image-alt-text&link [[][image-alt-text&em&image&link *alt text*][image&image-alt-text&link ]]][string&url (http://link.to/image.jpg)]"); MT("imageStrong", "[image&image-marker !][image&image-alt-text&link [[][image-alt-text&strong&image&link **alt text**][image&image-alt-text&link ]]][string&url (http://link.to/image.jpg)]"); MT("imageEmStrong", "[image&image-marker !][image&image-alt-text&link [[][image-alt-text&image&strong&link **][image&image-alt-text&em&strong&link *alt text**][image&image-alt-text&em&link *][image&image-alt-text&link ]]][string&url (http://link.to/image.jpg)]"); // Inline link with title MT("linkTitle", "[link [[foo]]][string&url (http://example.com/ \"bar\")] hello"); // Inline link without title MT("linkNoTitle", "[link [[foo]]][string&url (http://example.com/)] bar"); // Inline link with image MT("linkImage", "[link [[][link&image&image-marker !][link&image&image-alt-text&link [[alt text]]][string&url (http://link.to/image.jpg)][link ]]][string&url (http://example.com/)] bar"); // Inline link with Em MT("linkEm", "[link [[][link&em *foo*][link ]]][string&url (http://example.com/)] bar"); // Inline link with Strong MT("linkStrong", "[link [[][link&strong **foo**][link ]]][string&url (http://example.com/)] bar"); // Inline link with EmStrong MT("linkEmStrong", "[link [[][link&strong **][link&em&strong *foo**][link&em *][link ]]][string&url (http://example.com/)] bar"); // Image with title MT("imageTitle", "[image&image-marker !][image&image-alt-text&link [[alt text]]][string&url (http://example.com/ \"bar\")] hello"); // Image without title MT("imageNoTitle", "[image&image-marker !][image&image-alt-text&link [[alt text]]][string&url (http://example.com/)] bar"); // Image with asterisks MT("imageAsterisks", "[image&image-marker !][image&image-alt-text&link [[ ][image&image-alt-text&em&link *alt text*][image&image-alt-text&link ]]][string&url (http://link.to/image.jpg)] bar"); // Not a link. Should be normal text due to square brackets being used // regularly in text, especially in quoted material, and no space is allowed // between square brackets and parentheses (per Dingus). MT("notALink", "[[foo]] (bar)"); // Reference-style links MT("linkReference", "[link [[foo]]][string&url [[bar]]] hello"); // Reference-style links with Em MT("linkReferenceEm", "[link [[][link&em *foo*][link ]]][string&url [[bar]]] hello"); // Reference-style links with Strong MT("linkReferenceStrong", "[link [[][link&strong **foo**][link ]]][string&url [[bar]]] hello"); // Reference-style links with EmStrong MT("linkReferenceEmStrong", "[link [[][link&strong **][link&em&strong *foo**][link&em *][link ]]][string&url [[bar]]] hello"); // Reference-style links with optional space separator (per documentation) // "You can optionally use a space to separate the sets of brackets" MT("linkReferenceSpace", "[link [[foo]]] [string&url [[bar]]] hello"); // Should only allow a single space ("...use *a* space...") MT("linkReferenceDoubleSpace", "[[foo]] [[bar]] hello"); // Reference-style links with implicit link name MT("linkImplicit", "[link [[foo]]][string&url [[]]] hello"); // @todo It would be nice if, at some point, the document was actually // checked to see if the referenced link exists // Link label, for reference-style links (taken from documentation) MT("labelNoTitle", "[link [[foo]]:] [string&url http://example.com/]"); MT("labelIndented", " [link [[foo]]:] [string&url http://example.com/]"); MT("labelSpaceTitle", "[link [[foo bar]]:] [string&url http://example.com/ \"hello\"]"); MT("labelDoubleTitle", "[link [[foo bar]]:] [string&url http://example.com/ \"hello\"] \"world\""); MT("labelTitleDoubleQuotes", "[link [[foo]]:] [string&url http://example.com/ \"bar\"]"); MT("labelTitleSingleQuotes", "[link [[foo]]:] [string&url http://example.com/ 'bar']"); MT("labelTitleParentheses", "[link [[foo]]:] [string&url http://example.com/ (bar)]"); MT("labelTitleInvalid", "[link [[foo]]:] [string&url http://example.com/] bar"); MT("labelLinkAngleBrackets", "[link [[foo]]:] [string&url \"bar\"]"); MT("labelTitleNextDoubleQuotes", "[link [[foo]]:] [string&url http://example.com/]", "[string \"bar\"] hello"); MT("labelTitleNextSingleQuotes", "[link [[foo]]:] [string&url http://example.com/]", "[string 'bar'] hello"); MT("labelTitleNextParentheses", "[link [[foo]]:] [string&url http://example.com/]", "[string (bar)] hello"); MT("labelTitleNextMixed", "[link [[foo]]:] [string&url http://example.com/]", "(bar\" hello"); MT("labelEscape", "[link [[foo \\]] ]]:] [string&url http://example.com/]"); MT("labelEscapeColon", "[link [[foo \\]]: bar]]:] [string&url http://example.com/]"); MT("labelEscapeEnd", "[[foo\\]]: http://example.com/"); MT("linkWeb", "[link ] foo"); MT("linkWebDouble", "[link ] foo [link ]"); MT("linkEmail", "[link ] foo"); MT("linkEmailDouble", "[link ] foo [link ]"); MT("emAsterisk", "[em *foo*] bar"); MT("emUnderscore", "[em _foo_] bar"); MT("emInWordAsterisk", "foo[em *bar*]hello"); MT("emInWordUnderscore", "foo[em _bar_]hello"); // Per documentation: "...surround an * or _ with spaces, it’ll be // treated as a literal asterisk or underscore." MT("emEscapedBySpaceIn", "foo [em _bar _ hello_] world"); MT("emEscapedBySpaceOut", "foo _ bar[em _hello_]world"); MT("emEscapedByNewline", "foo", "_ bar[em _hello_]world"); // Unclosed emphasis characters // Instead of simply marking as EM / STRONG, it would be nice to have an // incomplete flag for EM and STRONG, that is styled slightly different. MT("emIncompleteAsterisk", "foo [em *bar]"); MT("emIncompleteUnderscore", "foo [em _bar]"); MT("strongAsterisk", "[strong **foo**] bar"); MT("strongUnderscore", "[strong __foo__] bar"); MT("emStrongAsterisk", "[em *foo][em&strong **bar*][strong hello**] world"); MT("emStrongUnderscore", "[em _foo][em&strong __bar_][strong hello__] world"); // "...same character must be used to open and close an emphasis span."" MT("emStrongMixed", "[em _foo][em&strong **bar*hello__ world]"); MT("emStrongMixed", "[em *foo][em&strong __bar_hello** world]"); MT("linkWithNestedParens", "[link [[foo]]][string&url (bar(baz))]") // These characters should be escaped: // \ backslash // ` backtick // * asterisk // _ underscore // {} curly braces // [] square brackets // () parentheses // # hash mark // + plus sign // - minus sign (hyphen) // . dot // ! exclamation mark MT("escapeBacktick", "foo \\`bar\\`"); MT("doubleEscapeBacktick", "foo \\\\[comment `bar\\\\`]"); MT("escapeAsterisk", "foo \\*bar\\*"); MT("doubleEscapeAsterisk", "foo \\\\[em *bar\\\\*]"); MT("escapeUnderscore", "foo \\_bar\\_"); MT("doubleEscapeUnderscore", "foo \\\\[em _bar\\\\_]"); MT("escapeHash", "\\# foo"); MT("doubleEscapeHash", "\\\\# foo"); MT("escapeNewline", "\\", "[em *foo*]"); // Class override tests TokenTypeOverrideTest("overrideHeader1", "[override-header&override-header-1 # Foo]"); TokenTypeOverrideTest("overrideHeader2", "[override-header&override-header-2 ## Foo]"); TokenTypeOverrideTest("overrideHeader3", "[override-header&override-header-3 ### Foo]"); TokenTypeOverrideTest("overrideHeader4", "[override-header&override-header-4 #### Foo]"); TokenTypeOverrideTest("overrideHeader5", "[override-header&override-header-5 ##### Foo]"); TokenTypeOverrideTest("overrideHeader6", "[override-header&override-header-6 ###### Foo]"); TokenTypeOverrideTest("overrideCode", "[override-code `foo`]"); TokenTypeOverrideTest("overrideCodeBlock", "[override-code ```]", "[override-code foo]", "[override-code ```]"); TokenTypeOverrideTest("overrideQuote", "[override-quote&override-quote-1 > foo]", "[override-quote&override-quote-1 > bar]"); TokenTypeOverrideTest("overrideQuoteNested", "[override-quote&override-quote-1 > foo]", "[override-quote&override-quote-1 >][override-quote&override-quote-2 > bar]", "[override-quote&override-quote-1 >][override-quote&override-quote-2 >][override-quote&override-quote-3 > baz]"); TokenTypeOverrideTest("overrideLists", "[override-list1 - foo]", "", " [override-list2 + bar]", "", " [override-list3 * baz]", "", " [override-list1 1. qux]", "", " [override-list2 - quux]"); TokenTypeOverrideTest("overrideHr", "[override-hr * * *]"); TokenTypeOverrideTest("overrideImage", "[override-image&override-image-marker !][override-image&override-image-alt-text&link [[alt text]]][override-link-href&url (http://link.to/image.jpg)]"); TokenTypeOverrideTest("overrideLinkText", "[override-link-text [[foo]]][override-link-href&url (http://example.com)]"); TokenTypeOverrideTest("overrideLinkEmailAndInline", "[override-link-email <][override-link-inline foo@example.com>]"); TokenTypeOverrideTest("overrideEm", "[override-em *foo*]"); TokenTypeOverrideTest("overrideStrong", "[override-strong **foo**]"); TokenTypeOverrideTest("overrideStrikethrough", "[override-strikethrough ~~foo~~]"); FormatTokenTypeOverrideTest("overrideFormatting", "[override-formatting-escape \\*]"); // Tests to make sure GFM-specific things aren't getting through MT("taskList", "[variable-2 * [ ]] bar]"); MT("noFencedCodeBlocks", "~~~", "foo", "~~~"); FencedTest("fencedCodeBlocks", "[comment ```]", "[comment foo]", "[comment ```]", "bar"); FencedTest("fencedCodeBlocksMultipleChars", "[comment `````]", "[comment foo]", "[comment ```]", "[comment foo]", "[comment `````]", "bar"); FencedTest("fencedCodeBlocksTildes", "[comment ~~~]", "[comment foo]", "[comment ~~~]", "bar"); FencedTest("fencedCodeBlocksTildesMultipleChars", "[comment ~~~~~]", "[comment ~~~]", "[comment foo]", "[comment ~~~~~]", "bar"); FencedTest("fencedCodeBlocksMultipleChars", "[comment `````]", "[comment foo]", "[comment ```]", "[comment foo]", "[comment `````]", "bar"); FencedTest("fencedCodeBlocksMixed", "[comment ~~~]", "[comment ```]", "[comment foo]", "[comment ~~~]", "bar"); // Tests that require XML mode MT("xmlMode", "[tag&bracket <][tag div][tag&bracket >]", "*foo*", "[tag&bracket <][tag http://github.com][tag&bracket />]", "[tag&bracket ]", "[link ]"); MT("xmlModeWithMarkdownInside", "[tag&bracket <][tag div] [attribute markdown]=[string 1][tag&bracket >]", "[em *foo*]", "[link ]", "[tag ]", "[link ]", "[tag&bracket <][tag div][tag&bracket >]", "[tag&bracket ]"); })(); PK!³a®¶ ¶ Ifile-manager-advanced/application/library/codemirror/mode/vhdl/index.htmlnu„[µü¤ CodeMirror: VHDL mode

    VHDL mode

    Syntax highlighting and indentation for the VHDL language.

    Configuration options:

    • atoms - List of atom words. Default: "null"
    • hooks - List of meta hooks. Default: ["`", "$"]
    • multiLineStrings - Whether multi-line strings are accepted. Default: false

    MIME types defined: text/x-vhdl.

    PK!º?œ00Ffile-manager-advanced/application/library/codemirror/mode/vhdl/vhdl.jsnu„[µü¤// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE // Originally written by Alf Nielsen, re-written by Michael Zhou (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; function words(str) { var obj = {}, words = str.split(","); for (var i = 0; i < words.length; ++i) { var allCaps = words[i].toUpperCase(); var firstCap = words[i].charAt(0).toUpperCase() + words[i].slice(1); obj[words[i]] = true; obj[allCaps] = true; obj[firstCap] = true; } return obj; } function metaHook(stream) { stream.eatWhile(/[\w\$_]/); return "meta"; } CodeMirror.defineMode("vhdl", function(config, parserConfig) { var indentUnit = config.indentUnit, atoms = parserConfig.atoms || words("null"), hooks = parserConfig.hooks || {"`": metaHook, "$": metaHook}, multiLineStrings = parserConfig.multiLineStrings; var keywords = words("abs,access,after,alias,all,and,architecture,array,assert,attribute,begin,block," + "body,buffer,bus,case,component,configuration,constant,disconnect,downto,else,elsif,end,end block,end case," + "end component,end for,end generate,end if,end loop,end process,end record,end units,entity,exit,file,for," + "function,generate,generic,generic map,group,guarded,if,impure,in,inertial,inout,is,label,library,linkage," + "literal,loop,map,mod,nand,new,next,nor,null,of,on,open,or,others,out,package,package body,port,port map," + "postponed,procedure,process,pure,range,record,register,reject,rem,report,return,rol,ror,select,severity,signal," + "sla,sll,sra,srl,subtype,then,to,transport,type,unaffected,units,until,use,variable,wait,when,while,with,xnor,xor"); var blockKeywords = words("architecture,entity,begin,case,port,else,elsif,end,for,function,if"); var isOperatorChar = /[&|~> CodeMirror: R mode

    R mode

    MIME types defined: text/x-rsrc.

    Development of the CodeMirror R mode was kindly sponsored by Ubalo.

    PK!r]QÔ--@file-manager-advanced/application/library/codemirror/mode/r/r.jsnu„[µü¤// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.registerHelper("wordChars", "r", /[\w.]/); CodeMirror.defineMode("r", function(config) { function wordObj(str) { var words = str.split(" "), res = {}; for (var i = 0; i < words.length; ++i) res[words[i]] = true; return res; } var atoms = wordObj("NULL NA Inf NaN NA_integer_ NA_real_ NA_complex_ NA_character_"); var builtins = wordObj("list quote bquote eval return call parse deparse"); var keywords = wordObj("if else repeat while function for in next break"); var blockkeywords = wordObj("if else repeat while function for"); var opChars = /[+\-*\/^<>=!&|~$:]/; var curPunc; function tokenBase(stream, state) { curPunc = null; var ch = stream.next(); if (ch == "#") { stream.skipToEnd(); return "comment"; } else if (ch == "0" && stream.eat("x")) { stream.eatWhile(/[\da-f]/i); return "number"; } else if (ch == "." && stream.eat(/\d/)) { stream.match(/\d*(?:e[+\-]?\d+)?/); return "number"; } else if (/\d/.test(ch)) { stream.match(/\d*(?:\.\d+)?(?:e[+\-]\d+)?L?/); return "number"; } else if (ch == "'" || ch == '"') { state.tokenize = tokenString(ch); return "string"; } else if (ch == "." && stream.match(/.[.\d]+/)) { return "keyword"; } else if (/[\w\.]/.test(ch) && ch != "_") { stream.eatWhile(/[\w\.]/); var word = stream.current(); if (atoms.propertyIsEnumerable(word)) return "atom"; if (keywords.propertyIsEnumerable(word)) { // Block keywords start new blocks, except 'else if', which only starts // one new block for the 'if', no block for the 'else'. if (blockkeywords.propertyIsEnumerable(word) && !stream.match(/\s*if(\s+|$)/, false)) curPunc = "block"; return "keyword"; } if (builtins.propertyIsEnumerable(word)) return "builtin"; return "variable"; } else if (ch == "%") { if (stream.skipTo("%")) stream.next(); return "variable-2"; } else if (ch == "<" && stream.eat("-")) { return "arrow"; } else if (ch == "=" && state.ctx.argList) { return "arg-is"; } else if (opChars.test(ch)) { if (ch == "$") return "dollar"; stream.eatWhile(opChars); return "operator"; } else if (/[\(\){}\[\];]/.test(ch)) { curPunc = ch; if (ch == ";") return "semi"; return null; } else { return null; } } function tokenString(quote) { return function(stream, state) { if (stream.eat("\\")) { var ch = stream.next(); if (ch == "x") stream.match(/^[a-f0-9]{2}/i); else if ((ch == "u" || ch == "U") && stream.eat("{") && stream.skipTo("}")) stream.next(); else if (ch == "u") stream.match(/^[a-f0-9]{4}/i); else if (ch == "U") stream.match(/^[a-f0-9]{8}/i); else if (/[0-7]/.test(ch)) stream.match(/^[0-7]{1,2}/); return "string-2"; } else { var next; while ((next = stream.next()) != null) { if (next == quote) { state.tokenize = tokenBase; break; } if (next == "\\") { stream.backUp(1); break; } } return "string"; } }; } function push(state, type, stream) { state.ctx = {type: type, indent: state.indent, align: null, column: stream.column(), prev: state.ctx}; } function pop(state) { state.indent = state.ctx.indent; state.ctx = state.ctx.prev; } return { startState: function() { return {tokenize: tokenBase, ctx: {type: "top", indent: -config.indentUnit, align: false}, indent: 0, afterIdent: false}; }, token: function(stream, state) { if (stream.sol()) { if (state.ctx.align == null) state.ctx.align = false; state.indent = stream.indentation(); } if (stream.eatSpace()) return null; var style = state.tokenize(stream, state); if (style != "comment" && state.ctx.align == null) state.ctx.align = true; var ctype = state.ctx.type; if ((curPunc == ";" || curPunc == "{" || curPunc == "}") && ctype == "block") pop(state); if (curPunc == "{") push(state, "}", stream); else if (curPunc == "(") { push(state, ")", stream); if (state.afterIdent) state.ctx.argList = true; } else if (curPunc == "[") push(state, "]", stream); else if (curPunc == "block") push(state, "block", stream); else if (curPunc == ctype) pop(state); state.afterIdent = style == "variable" || style == "keyword"; return style; }, indent: function(state, textAfter) { if (state.tokenize != tokenBase) return 0; var firstChar = textAfter && textAfter.charAt(0), ctx = state.ctx, closing = firstChar == ctx.type; if (ctx.type == "block") return ctx.indent + (firstChar == "{" ? 0 : config.indentUnit); else if (ctx.align) return ctx.column + (closing ? 0 : 1); else return ctx.indent + (closing ? 0 : config.indentUnit); }, lineComment: "#" }; }); CodeMirror.defineMIME("text/x-rsrc", "r"); }); PK!Šþ¾{{Jfile-manager-advanced/application/library/codemirror/mode/mscgen/mscgen.jsnu„[µü¤// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE // mode(s) for the sequence chart dsl's mscgen, xù and msgenny // For more information on mscgen, see the site of the original author: // http://www.mcternan.me.uk/mscgen // // This mode for mscgen and the two derivative languages were // originally made for use in the mscgen_js interpreter // (https://sverweij.github.io/mscgen_js) (function(mod) { if ( typeof exports == "object" && typeof module == "object")// CommonJS mod(require("../../lib/codemirror")); else if ( typeof define == "function" && define.amd)// AMD define(["../../lib/codemirror"], mod); else// Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; var languages = { mscgen: { "keywords" : ["msc"], "options" : ["hscale", "width", "arcgradient", "wordwraparcs"], "attributes" : ["label", "idurl", "id", "url", "linecolor", "linecolour", "textcolor", "textcolour", "textbgcolor", "textbgcolour", "arclinecolor", "arclinecolour", "arctextcolor", "arctextcolour", "arctextbgcolor", "arctextbgcolour", "arcskip"], "brackets" : ["\\{", "\\}"], // [ and ] are brackets too, but these get handled in with lists "arcsWords" : ["note", "abox", "rbox", "box"], "arcsOthers" : ["\\|\\|\\|", "\\.\\.\\.", "---", "--", "<->", "==", "<<=>>", "<=>", "\\.\\.", "<<>>", "::", "<:>", "->", "=>>", "=>", ">>", ":>", "<-", "<<=", "<=", "<<", "<:", "x-", "-x"], "singlecomment" : ["//", "#"], "operators" : ["="] }, xu: { "keywords" : ["msc"], "options" : ["hscale", "width", "arcgradient", "wordwraparcs", "watermark"], "attributes" : ["label", "idurl", "id", "url", "linecolor", "linecolour", "textcolor", "textcolour", "textbgcolor", "textbgcolour", "arclinecolor", "arclinecolour", "arctextcolor", "arctextcolour", "arctextbgcolor", "arctextbgcolour", "arcskip"], "brackets" : ["\\{", "\\}"], // [ and ] are brackets too, but these get handled in with lists "arcsWords" : ["note", "abox", "rbox", "box", "alt", "else", "opt", "break", "par", "seq", "strict", "neg", "critical", "ignore", "consider", "assert", "loop", "ref", "exc"], "arcsOthers" : ["\\|\\|\\|", "\\.\\.\\.", "---", "--", "<->", "==", "<<=>>", "<=>", "\\.\\.", "<<>>", "::", "<:>", "->", "=>>", "=>", ">>", ":>", "<-", "<<=", "<=", "<<", "<:", "x-", "-x"], "singlecomment" : ["//", "#"], "operators" : ["="] }, msgenny: { "keywords" : null, "options" : ["hscale", "width", "arcgradient", "wordwraparcs", "watermark"], "attributes" : null, "brackets" : ["\\{", "\\}"], "arcsWords" : ["note", "abox", "rbox", "box", "alt", "else", "opt", "break", "par", "seq", "strict", "neg", "critical", "ignore", "consider", "assert", "loop", "ref", "exc"], "arcsOthers" : ["\\|\\|\\|", "\\.\\.\\.", "---", "--", "<->", "==", "<<=>>", "<=>", "\\.\\.", "<<>>", "::", "<:>", "->", "=>>", "=>", ">>", ":>", "<-", "<<=", "<=", "<<", "<:", "x-", "-x"], "singlecomment" : ["//", "#"], "operators" : ["="] } } CodeMirror.defineMode("mscgen", function(_, modeConfig) { var language = languages[modeConfig && modeConfig.language || "mscgen"] return { startState: startStateFn, copyState: copyStateFn, token: produceTokenFunction(language), lineComment : "#", blockCommentStart : "/*", blockCommentEnd : "*/" }; }); CodeMirror.defineMIME("text/x-mscgen", "mscgen"); CodeMirror.defineMIME("text/x-xu", {name: "mscgen", language: "xu"}); CodeMirror.defineMIME("text/x-msgenny", {name: "mscgen", language: "msgenny"}); function wordRegexpBoundary(pWords) { return new RegExp("\\b(" + pWords.join("|") + ")\\b", "i"); } function wordRegexp(pWords) { return new RegExp("(" + pWords.join("|") + ")", "i"); } function startStateFn() { return { inComment : false, inString : false, inAttributeList : false, inScript : false }; } function copyStateFn(pState) { return { inComment : pState.inComment, inString : pState.inString, inAttributeList : pState.inAttributeList, inScript : pState.inScript }; } function produceTokenFunction(pConfig) { return function(pStream, pState) { if (pStream.match(wordRegexp(pConfig.brackets), true, true)) { return "bracket"; } /* comments */ if (!pState.inComment) { if (pStream.match(/\/\*[^\*\/]*/, true, true)) { pState.inComment = true; return "comment"; } if (pStream.match(wordRegexp(pConfig.singlecomment), true, true)) { pStream.skipToEnd(); return "comment"; } } if (pState.inComment) { if (pStream.match(/[^\*\/]*\*\//, true, true)) pState.inComment = false; else pStream.skipToEnd(); return "comment"; } /* strings */ if (!pState.inString && pStream.match(/\"(\\\"|[^\"])*/, true, true)) { pState.inString = true; return "string"; } if (pState.inString) { if (pStream.match(/[^\"]*\"/, true, true)) pState.inString = false; else pStream.skipToEnd(); return "string"; } /* keywords & operators */ if (!!pConfig.keywords && pStream.match(wordRegexpBoundary(pConfig.keywords), true, true)) return "keyword"; if (pStream.match(wordRegexpBoundary(pConfig.options), true, true)) return "keyword"; if (pStream.match(wordRegexpBoundary(pConfig.arcsWords), true, true)) return "keyword"; if (pStream.match(wordRegexp(pConfig.arcsOthers), true, true)) return "keyword"; if (!!pConfig.operators && pStream.match(wordRegexp(pConfig.operators), true, true)) return "operator"; /* attribute lists */ if (!pConfig.inAttributeList && !!pConfig.attributes && pStream.match(/\[/, true, true)) { pConfig.inAttributeList = true; return "bracket"; } if (pConfig.inAttributeList) { if (pConfig.attributes !== null && pStream.match(wordRegexpBoundary(pConfig.attributes), true, true)) { return "attribute"; } if (pStream.match(/]/, true, true)) { pConfig.inAttributeList = false; return "bracket"; } } pStream.next(); return "base"; }; } }); PK!Ã/»_hhKfile-manager-advanced/application/library/codemirror/mode/mscgen/xu_test.jsnu„[µü¤// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function() { var mode = CodeMirror.getMode({indentUnit: 2}, "text/x-xu"); function MT(name) { test.mode(name, mode, Array.prototype.slice.call(arguments, 1), "xu"); } MT("empty chart", "[keyword msc][bracket {]", "[base ]", "[bracket }]" ); MT("comments", "[comment // a single line comment]", "[comment # another single line comment /* and */ ignored here]", "[comment /* A multi-line comment even though it contains]", "[comment msc keywords and \"quoted text\"*/]"); MT("strings", "[string \"// a string\"]", "[string \"a string running over]", "[string two lines\"]", "[string \"with \\\"escaped quote\"]" ); MT("xù/ msgenny keywords classify as 'keyword'", "[keyword watermark]", "[keyword alt]","[keyword loop]","[keyword opt]","[keyword ref]","[keyword else]","[keyword break]","[keyword par]","[keyword seq]","[keyword assert]" ); MT("mscgen options classify as keyword", "[keyword hscale]", "[keyword width]", "[keyword arcgradient]", "[keyword wordwraparcs]" ); MT("mscgen arcs classify as keyword", "[keyword note]","[keyword abox]","[keyword rbox]","[keyword box]", "[keyword |||...---]", "[keyword ..--==::]", "[keyword ->]", "[keyword <-]", "[keyword <->]", "[keyword =>]", "[keyword <=]", "[keyword <=>]", "[keyword =>>]", "[keyword <<=]", "[keyword <<=>>]", "[keyword >>]", "[keyword <<]", "[keyword <<>>]", "[keyword -x]", "[keyword x-]", "[keyword -X]", "[keyword X-]", "[keyword :>]", "[keyword <:]", "[keyword <:>]" ); MT("within an attribute list, attributes classify as attribute", "[bracket [[][attribute label]", "[attribute id]","[attribute url]","[attribute idurl]", "[attribute linecolor]","[attribute linecolour]","[attribute textcolor]","[attribute textcolour]","[attribute textbgcolor]","[attribute textbgcolour]", "[attribute arclinecolor]","[attribute arclinecolour]","[attribute arctextcolor]","[attribute arctextcolour]","[attribute arctextbgcolor]","[attribute arctextbgcolour]", "[attribute arcskip][bracket ]]]" ); MT("outside an attribute list, attributes classify as base", "[base label]", "[base id]","[base url]","[base idurl]", "[base linecolor]","[base linecolour]","[base textcolor]","[base textcolour]","[base textbgcolor]","[base textbgcolour]", "[base arclinecolor]","[base arclinecolour]","[base arctextcolor]","[base arctextcolour]","[base arctextbgcolor]","[base arctextbgcolour]", "[base arcskip]" ); MT("a typical program", "[comment # typical mscgen program]", "[keyword msc][base ][bracket {]", "[keyword wordwraparcs][operator =][string \"true\"][keyword hscale][operator =][string \"0.8\"][keyword arcgradient][operator =][base 30;]", "[base a][bracket [[][attribute label][operator =][string \"Entity A\"][bracket ]]][base ,]", "[base b][bracket [[][attribute label][operator =][string \"Entity B\"][bracket ]]][base ,]", "[base c][bracket [[][attribute label][operator =][string \"Entity C\"][bracket ]]][base ;]", "[base a ][keyword =>>][base b][bracket [[][attribute label][operator =][string \"Hello entity B\"][bracket ]]][base ;]", "[base a ][keyword <<][base b][bracket [[][attribute label][operator =][string \"Here's an answer dude!\"][bracket ]]][base ;]", "[base c ][keyword :>][base *][bracket [[][attribute label][operator =][string \"What about me?\"][base , ][attribute textcolor][operator =][base red][bracket ]]][base ;]", "[bracket }]" ); })(); PK!˜óž ××Kfile-manager-advanced/application/library/codemirror/mode/mscgen/index.htmlnu„[µü¤ CodeMirror: MscGen mode

    MscGen mode

    Xù mode

    MsGenny mode

    Simple mode for highlighting MscGen and two derived sequence chart languages.

    MIME types defined: text/x-mscgen text/x-xu text/x-msgenny

    PK!`S¬   Pfile-manager-advanced/application/library/codemirror/mode/mscgen/msgenny_test.jsnu„[µü¤// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function() { var mode = CodeMirror.getMode({indentUnit: 2}, "text/x-msgenny"); function MT(name) { test.mode(name, mode, Array.prototype.slice.call(arguments, 1), "msgenny"); } MT("comments", "[comment // a single line comment]", "[comment # another single line comment /* and */ ignored here]", "[comment /* A multi-line comment even though it contains]", "[comment msc keywords and \"quoted text\"*/]"); MT("strings", "[string \"// a string\"]", "[string \"a string running over]", "[string two lines\"]", "[string \"with \\\"escaped quote\"]" ); MT("xù/ msgenny keywords classify as 'keyword'", "[keyword watermark]", "[keyword alt]","[keyword loop]","[keyword opt]","[keyword ref]","[keyword else]","[keyword break]","[keyword par]","[keyword seq]","[keyword assert]" ); MT("mscgen options classify as keyword", "[keyword hscale]", "[keyword width]", "[keyword arcgradient]", "[keyword wordwraparcs]" ); MT("mscgen arcs classify as keyword", "[keyword note]","[keyword abox]","[keyword rbox]","[keyword box]", "[keyword |||...---]", "[keyword ..--==::]", "[keyword ->]", "[keyword <-]", "[keyword <->]", "[keyword =>]", "[keyword <=]", "[keyword <=>]", "[keyword =>>]", "[keyword <<=]", "[keyword <<=>>]", "[keyword >>]", "[keyword <<]", "[keyword <<>>]", "[keyword -x]", "[keyword x-]", "[keyword -X]", "[keyword X-]", "[keyword :>]", "[keyword <:]", "[keyword <:>]" ); MT("within an attribute list, mscgen/ xù attributes classify as base", "[base [[label]", "[base idurl id url]", "[base linecolor linecolour textcolor textcolour textbgcolor textbgcolour]", "[base arclinecolor arclinecolour arctextcolor arctextcolour arctextbgcolor arctextbgcolour]", "[base arcskip]]]" ); MT("outside an attribute list, mscgen/ xù attributes classify as base", "[base label]", "[base idurl id url]", "[base linecolor linecolour textcolor textcolour textbgcolor textbgcolour]", "[base arclinecolor arclinecolour arctextcolor arctextcolour arctextbgcolor arctextbgcolour]", "[base arcskip]" ); MT("a typical program", "[comment # typical msgenny program]", "[keyword wordwraparcs][operator =][string \"true\"][base , ][keyword hscale][operator =][string \"0.8\"][base , ][keyword arcgradient][operator =][base 30;]", "[base a : ][string \"Entity A\"][base ,]", "[base b : Entity B,]", "[base c : Entity C;]", "[base a ][keyword =>>][base b: ][string \"Hello entity B\"][base ;]", "[base a ][keyword alt][base c][bracket {]", "[base a ][keyword <<][base b: ][string \"Here's an answer dude!\"][base ;]", "[keyword ---][base : ][string \"sorry, won't march - comm glitch\"]", "[base a ][keyword x-][base b: ][string \"Here's an answer dude! (won't arrive...)\"][base ;]", "[bracket }]", "[base c ][keyword :>][base *: What about me?;]" ); })(); PK!jú¿ÿ ÿ Ofile-manager-advanced/application/library/codemirror/mode/mscgen/mscgen_test.jsnu„[µü¤// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function() { var mode = CodeMirror.getMode({indentUnit: 2}, "mscgen"); function MT(name) { test.mode(name, mode, Array.prototype.slice.call(arguments, 1)); } MT("empty chart", "[keyword msc][bracket {]", "[base ]", "[bracket }]" ); MT("comments", "[comment // a single line comment]", "[comment # another single line comment /* and */ ignored here]", "[comment /* A multi-line comment even though it contains]", "[comment msc keywords and \"quoted text\"*/]"); MT("strings", "[string \"// a string\"]", "[string \"a string running over]", "[string two lines\"]", "[string \"with \\\"escaped quote\"]" ); MT("xù/ msgenny keywords classify as 'base'", "[base watermark]", "[base alt loop opt ref else break par seq assert]" ); MT("mscgen options classify as keyword", "[keyword hscale]", "[keyword width]", "[keyword arcgradient]", "[keyword wordwraparcs]" ); MT("mscgen arcs classify as keyword", "[keyword note]","[keyword abox]","[keyword rbox]","[keyword box]", "[keyword |||...---]", "[keyword ..--==::]", "[keyword ->]", "[keyword <-]", "[keyword <->]", "[keyword =>]", "[keyword <=]", "[keyword <=>]", "[keyword =>>]", "[keyword <<=]", "[keyword <<=>>]", "[keyword >>]", "[keyword <<]", "[keyword <<>>]", "[keyword -x]", "[keyword x-]", "[keyword -X]", "[keyword X-]", "[keyword :>]", "[keyword <:]", "[keyword <:>]" ); MT("within an attribute list, attributes classify as attribute", "[bracket [[][attribute label]", "[attribute id]","[attribute url]","[attribute idurl]", "[attribute linecolor]","[attribute linecolour]","[attribute textcolor]","[attribute textcolour]","[attribute textbgcolor]","[attribute textbgcolour]", "[attribute arclinecolor]","[attribute arclinecolour]","[attribute arctextcolor]","[attribute arctextcolour]","[attribute arctextbgcolor]","[attribute arctextbgcolour]", "[attribute arcskip][bracket ]]]" ); MT("outside an attribute list, attributes classify as base", "[base label]", "[base id]","[base url]","[base idurl]", "[base linecolor]","[base linecolour]","[base textcolor]","[base textcolour]","[base textbgcolor]","[base textbgcolour]", "[base arclinecolor]","[base arclinecolour]","[base arctextcolor]","[base arctextcolour]","[base arctextbgcolor]","[base arctextbgcolour]", "[base arcskip]" ); MT("a typical program", "[comment # typical mscgen program]", "[keyword msc][base ][bracket {]", "[keyword wordwraparcs][operator =][string \"true\"][base , ][keyword hscale][operator =][string \"0.8\"][keyword arcgradient][operator =][base 30;]", "[base a][bracket [[][attribute label][operator =][string \"Entity A\"][bracket ]]][base ,]", "[base b][bracket [[][attribute label][operator =][string \"Entity B\"][bracket ]]][base ,]", "[base c][bracket [[][attribute label][operator =][string \"Entity C\"][bracket ]]][base ;]", "[base a ][keyword =>>][base b][bracket [[][attribute label][operator =][string \"Hello entity B\"][bracket ]]][base ;]", "[base a ][keyword <<][base b][bracket [[][attribute label][operator =][string \"Here's an answer dude!\"][bracket ]]][base ;]", "[base c ][keyword :>][base *][bracket [[][attribute label][operator =][string \"What about me?\"][base , ][attribute textcolor][operator =][base red][bracket ]]][base ;]", "[bracket }]" ); })(); PK!{N LLGfile-manager-advanced/application/library/codemirror/theme/mdn-like.cssnu„[µü¤/* MDN-LIKE Theme - Mozilla Ported to CodeMirror by Peter Kroon Report bugs/issues here: https://github.com/codemirror/CodeMirror/issues GitHub: @peterkroon The mdn-like theme is inspired on the displayed code examples at: https://developer.mozilla.org/en-US/docs/Web/CSS/animation */ .cm-s-mdn-like.CodeMirror { color: #999; background-color: #fff; } .cm-s-mdn-like div.CodeMirror-selected { background: #cfc; } .cm-s-mdn-like .CodeMirror-line::selection, .cm-s-mdn-like .CodeMirror-line > span::selection, .cm-s-mdn-like .CodeMirror-line > span > span::selection { background: #cfc; } .cm-s-mdn-like .CodeMirror-line::-moz-selection, .cm-s-mdn-like .CodeMirror-line > span::-moz-selection, .cm-s-mdn-like .CodeMirror-line > span > span::-moz-selection { background: #cfc; } .cm-s-mdn-like .CodeMirror-gutters { background: #f8f8f8; border-left: 6px solid rgba(0,83,159,0.65); color: #333; } .cm-s-mdn-like .CodeMirror-linenumber { color: #aaa; padding-left: 8px; } .cm-s-mdn-like .CodeMirror-cursor { border-left: 2px solid #222; } .cm-s-mdn-like .cm-keyword { color: #6262FF; } .cm-s-mdn-like .cm-atom { color: #F90; } .cm-s-mdn-like .cm-number { color: #ca7841; } .cm-s-mdn-like .cm-def { color: #8DA6CE; } .cm-s-mdn-like span.cm-variable-2, .cm-s-mdn-like span.cm-tag { color: #690; } .cm-s-mdn-like span.cm-variable-3, .cm-s-mdn-like span.cm-def, .cm-s-mdn-like span.cm-type { color: #07a; } .cm-s-mdn-like .cm-variable { color: #07a; } .cm-s-mdn-like .cm-property { color: #905; } .cm-s-mdn-like .cm-qualifier { color: #690; } .cm-s-mdn-like .cm-operator { color: #cda869; } .cm-s-mdn-like .cm-comment { color:#777; font-weight:normal; } .cm-s-mdn-like .cm-string { color:#07a; font-style:italic; } .cm-s-mdn-like .cm-string-2 { color:#bd6b18; } /*?*/ .cm-s-mdn-like .cm-meta { color: #000; } /*?*/ .cm-s-mdn-like .cm-builtin { color: #9B7536; } /*?*/ .cm-s-mdn-like .cm-tag { color: #997643; } .cm-s-mdn-like .cm-attribute { color: #d6bb6d; } /*?*/ .cm-s-mdn-like .cm-header { color: #FF6400; } .cm-s-mdn-like .cm-hr { color: #AEAEAE; } .cm-s-mdn-like .cm-link { color:#ad9361; font-style:italic; text-decoration:none; } .cm-s-mdn-like .cm-error { border-bottom: 1px solid red; } div.cm-s-mdn-like .CodeMirror-activeline-background { background: #efefff; } div.cm-s-mdn-like span.CodeMirror-matchingbracket { outline:1px solid grey; color: inherit; } .cm-s-mdn-like.CodeMirror { background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFcAAAAyCAYAAAAp8UeFAAAHvklEQVR42s2b63bcNgyEQZCSHCdt2vd/0tWF7I+Q6XgMXiTtuvU5Pl57ZQKkKHzEAOtF5KeIJBGJ8uvL599FRFREZhFx8DeXv8trn68RuGaC8TRfo3SNp9dlDDHedyLyTUTeRWStXKPZrjtpZxaRw5hPqozRs1N8/enzIiQRWcCgy4MUA0f+XWliDhyL8Lfyvx7ei/Ae3iQFHyw7U/59pQVIMEEPEz0G7XiwdRjzSfC3UTtz9vchIntxvry5iMgfIhJoEflOz2CQr3F5h/HfeFe+GTdLaKcu9L8LTeQb/R/7GgbsfKedyNdoHsN31uRPWrfZ5wsj/NzzRQHuToIdU3ahwnsKPxXCjJITuOsi7XLc7SG/v5GdALs7wf8JjTFiB5+QvTEfRyGOfX3Lrx8wxyQi3sNq46O7QahQiCsRFgqddjBouVEHOKDgXAQHD9gJCr5sMKkEdjwsarG/ww3BMHBU7OBjXnzdyY7SfCxf5/z6ATccrwlKuwC/jhznnPF4CgVzhhVf4xp2EixcBActO75iZ8/fM9zAs2OMzKdslgXWJ9XG8PQoOAMA5fGcsvORgv0doBXyHrCwfLJAOwo71QLNkb8n2Pl6EWiR7OCibtkPaz4Kc/0NNAze2gju3zOwekALDaCFPI5vjPFmgGY5AZqyGEvH1x7QfIb8YtxMnA/b+QQ0aQDAwc6JMFg8CbQZ4qoYEEHbRwNojuK3EHwd7VALSgq+MNDKzfT58T8qdpADrgW0GmgcAS1lhzztJmkAzcPNOQbsWEALBDSlMKUG0Eq4CLAQWvEVQ9WU57gZJwZtgPO3r9oBTQ9WO8TjqXINx8R0EYpiZEUWOF3FxkbJkgU9B2f41YBrIj5ZfsQa0M5kTgiAAqM3ShXLgu8XMqcrQBvJ0CL5pnTsfMB13oB8athpAq2XOQmcGmoACCLydx7nToa23ATaSIY2ichfOdPTGxlasXMLaL0MLZAOwAKIM+y8CmicobGdCcbbK9DzN+yYGVoNNI5iUKTMyYOjPse4A8SM1MmcXgU0toOq1yO/v8FOxlASyc7TgeYaAMBJHcY1CcCwGI/TK4AmDbDyKYBBtFUkRwto8gygiQEaByFgJ00BH2M8JWwQS1nafDXQCidWyOI8AcjDCSjCLk8ngObuAm3JAHAdubAmOaK06V8MNEsKPJOhobSprwQa6gD7DclRQdqcwL4zxqgBrQcabUiBLclRDKAlWp+etPkBaNMA0AKlrHwTdEByZAA4GM+SNluSY6wAzcMNewxmgig5Ks0nkrSpBvSaQHMdKTBAnLojOdYyGpQ254602ZILPdTD1hdlggdIm74jbTp8vDwF5ZYUeLWGJpWsh6XNyXgcYwVoJQTEhhTYkxzZjiU5npU2TaB979TQehlaAVq4kaGpiPwwwLkYUuBbQwocyQTv1tA0+1UFWoJF3iv1oq+qoSk8EQdJmwHkziIF7oOZk14EGitibAdjLYYK78H5vZOhtWpoI0ATGHs0Q8OMb4Ey+2bU2UYztCtA0wFAs7TplGLRVQCcqaFdGSPCeTI1QNIC52iWNzof6Uib7xjEp07mNNoUYmVosVItHrHzRlLgBn9LFyRHaQCtVUMbtTNhoXWiTOO9k/V8BdAc1Oq0ArSQs6/5SU0hckNy9NnXqQY0PGYo5dWJ7nINaN6o958FWin27aBaWRka1r5myvLOAm0j30eBJqCxHLReVclxhxOEN2JfDWjxBtAC7MIH1fVaGdoOp4qJYDgKtKPSFNID2gSnGldrCqkFZ+5UeQXQBIRrSwocbdZYQT/2LwRahBPBXoHrB8nxaGROST62DKUbQOMMzZIC9abkuELfQzQALWTnDNAm8KHWFOJgJ5+SHIvTPcmx1xQyZRhNL5Qci689aXMEaN/uNIWkEwDAvFpOZmgsBaaGnbs1NPa1Jm32gBZAIh1pCtG7TSH4aE0y1uVY4uqoFPisGlpP2rSA5qTecWn5agK6BzSpgAyD+wFaqhnYoSZ1Vwr8CmlTQbrcO3ZaX0NAEyMbYaAlyquFoLKK3SPby9CeVUPThrSJmkCAE0CrKUQadi4DrdSlWhmah0YL9z9vClH59YGbHx1J8VZTyAjQepJjmXwAKTDQI3omc3p1U4gDUf6RfcdYfrUp5ClAi2J3Ba6UOXGo+K+bQrjjssitG2SJzshaLwMtXgRagUNpYYoVkMSBLM+9GGiJZMvduG6DRZ4qc04DMPtQQxOjEtACmhO7K1AbNbQDEggZyJwscFpAGwENhoBeUwh3bWolhe8BTYVKxQEWrSUn/uhcM5KhvUu/+eQu0Lzhi+VrK0PrZZNDQKs9cpYUuFYgMVpD4/NxenJTiMCNqdUEUf1qZWjppLT5qSkkUZbCwkbZMSuVnu80hfSkzRbQeqCZSAh6huR4VtoM2gHAlLf72smuWgE+VV7XpE25Ab2WFDgyhnSuKbs4GuGzCjR+tIoUuMFg3kgcWKLTwRqanJQ2W00hAsenfaApRC42hbCvK1SlE0HtE9BGgneJO+ELamitD1YjjOYnNYVcraGhtKkW0EqVVeDx733I2NH581k1NNxNLG0i0IJ8/NjVaOZ0tYZ2Vtr0Xv7tPV3hkWp9EFkgS/J0vosngTaSoaG06WHi+xObQkaAdlbanP8B2+2l0f90LmUAAAAASUVORK5CYII=); } PK!BJ.®6 6 Kfile-manager-advanced/application/library/codemirror/theme/duotone-dark.cssnu„[µü¤/* Name: DuoTone-Dark Author: by Bram de Haan, adapted from DuoTone themes by Simurai (http://simurai.com/projects/2016/01/01/duotone-themes) CodeMirror template by Jan T. Sott (https://github.com/idleberg), adapted by Bram de Haan (https://github.com/atelierbram/) */ .cm-s-duotone-dark.CodeMirror { background: #2a2734; color: #6c6783; } .cm-s-duotone-dark div.CodeMirror-selected { background: #545167!important; } .cm-s-duotone-dark .CodeMirror-gutters { background: #2a2734; border-right: 0px; } .cm-s-duotone-dark .CodeMirror-linenumber { color: #545167; } /* begin cursor */ .cm-s-duotone-dark .CodeMirror-cursor { border-left: 1px solid #ffad5c; /* border-left: 1px solid #ffad5c80; */ border-right: .5em solid #ffad5c; /* border-right: .5em solid #ffad5c80; */ opacity: .5; } .cm-s-duotone-dark .CodeMirror-activeline-background { background: #363342; /* background: #36334280; */ opacity: .5;} .cm-s-duotone-dark .cm-fat-cursor .CodeMirror-cursor { background: #ffad5c; /* background: #ffad5c80; */ opacity: .5;} /* end cursor */ .cm-s-duotone-dark span.cm-atom, .cm-s-duotone-dark span.cm-number, .cm-s-duotone-dark span.cm-keyword, .cm-s-duotone-dark span.cm-variable, .cm-s-duotone-dark span.cm-attribute, .cm-s-duotone-dark span.cm-quote, .cm-s-duotone-dark span.cm-hr, .cm-s-duotone-dark span.cm-link { color: #ffcc99; } .cm-s-duotone-dark span.cm-property { color: #9a86fd; } .cm-s-duotone-dark span.cm-punctuation, .cm-s-duotone-dark span.cm-unit, .cm-s-duotone-dark span.cm-negative { color: #e09142; } .cm-s-duotone-dark span.cm-string { color: #ffb870; } .cm-s-duotone-dark span.cm-operator { color: #ffad5c; } .cm-s-duotone-dark span.cm-positive { color: #6a51e6; } .cm-s-duotone-dark span.cm-variable-2, .cm-s-duotone-dark span.cm-variable-3, .cm-s-duotone-dark span.cm-type, .cm-s-duotone-dark span.cm-string-2, .cm-s-duotone-dark span.cm-url { color: #7a63ee; } .cm-s-duotone-dark span.cm-def, .cm-s-duotone-dark span.cm-tag, .cm-s-duotone-dark span.cm-builtin, .cm-s-duotone-dark span.cm-qualifier, .cm-s-duotone-dark span.cm-header, .cm-s-duotone-dark span.cm-em { color: #eeebff; } .cm-s-duotone-dark span.cm-bracket, .cm-s-duotone-dark span.cm-comment { color: #a7a5b2; } /* using #f00 red for errors, don't think any of the colorscheme variables will stand out enough, ... maybe by giving it a background-color ... */ .cm-s-duotone-dark span.cm-error, .cm-s-duotone-dark span.cm-invalidchar { color: #f00; } .cm-s-duotone-dark span.cm-header { font-weight: normal; } .cm-s-duotone-dark .CodeMirror-matchingbracket { text-decoration: underline; color: #eeebff !important; } PK!q”úÍ~~Kfile-manager-advanced/application/library/codemirror/theme/gruvbox-dark.cssnu„[µü¤/* Name: gruvbox-dark Author: kRkk (https://github.com/krkk) Original gruvbox color scheme by Pavel Pertsev (https://github.com/morhetz/gruvbox) */ .cm-s-gruvbox-dark.CodeMirror, .cm-s-gruvbox-dark .CodeMirror-gutters { background-color: #282828; color: #bdae93; } .cm-s-gruvbox-dark .CodeMirror-gutters {background: #282828; border-right: 0px;} .cm-s-gruvbox-dark .CodeMirror-linenumber {color: #7c6f64;} .cm-s-gruvbox-dark .CodeMirror-cursor { border-left: 1px solid #ebdbb2; } .cm-s-gruvbox-dark.cm-fat-cursor .CodeMirror-cursor { background-color: #8e8d8875 !important; } .cm-s-gruvbox-dark .cm-animate-fat-cursor { background-color: #8e8d8875 !important; } .cm-s-gruvbox-dark div.CodeMirror-selected { background: #928374; } .cm-s-gruvbox-dark span.cm-meta { color: #83a598; } .cm-s-gruvbox-dark span.cm-comment { color: #928374; } .cm-s-gruvbox-dark span.cm-number, span.cm-atom { color: #d3869b; } .cm-s-gruvbox-dark span.cm-keyword { color: #f84934; } .cm-s-gruvbox-dark span.cm-variable { color: #ebdbb2; } .cm-s-gruvbox-dark span.cm-variable-2 { color: #ebdbb2; } .cm-s-gruvbox-dark span.cm-variable-3, .cm-s-gruvbox-dark span.cm-type { color: #fabd2f; } .cm-s-gruvbox-dark span.cm-operator { color: #ebdbb2; } .cm-s-gruvbox-dark span.cm-callee { color: #ebdbb2; } .cm-s-gruvbox-dark span.cm-def { color: #ebdbb2; } .cm-s-gruvbox-dark span.cm-property { color: #ebdbb2; } .cm-s-gruvbox-dark span.cm-string { color: #b8bb26; } .cm-s-gruvbox-dark span.cm-string-2 { color: #8ec07c; } .cm-s-gruvbox-dark span.cm-qualifier { color: #8ec07c; } .cm-s-gruvbox-dark span.cm-attribute { color: #8ec07c; } .cm-s-gruvbox-dark .CodeMirror-activeline-background { background: #3c3836; } .cm-s-gruvbox-dark .CodeMirror-matchingbracket { background: #928374; color:#282828 !important; } .cm-s-gruvbox-dark span.cm-builtin { color: #fe8019; } .cm-s-gruvbox-dark span.cm-tag { color: #fe8019; } PK!Ø´ˆttGfile-manager-advanced/application/library/codemirror/theme/twilight.cssnu„[µü¤.cm-s-twilight.CodeMirror { background: #141414; color: #f7f7f7; } /**/ .cm-s-twilight div.CodeMirror-selected { background: #323232; } /**/ .cm-s-twilight .CodeMirror-line::selection, .cm-s-twilight .CodeMirror-line > span::selection, .cm-s-twilight .CodeMirror-line > span > span::selection { background: rgba(50, 50, 50, 0.99); } .cm-s-twilight .CodeMirror-line::-moz-selection, .cm-s-twilight .CodeMirror-line > span::-moz-selection, .cm-s-twilight .CodeMirror-line > span > span::-moz-selection { background: rgba(50, 50, 50, 0.99); } .cm-s-twilight .CodeMirror-gutters { background: #222; border-right: 1px solid #aaa; } .cm-s-twilight .CodeMirror-guttermarker { color: white; } .cm-s-twilight .CodeMirror-guttermarker-subtle { color: #aaa; } .cm-s-twilight .CodeMirror-linenumber { color: #aaa; } .cm-s-twilight .CodeMirror-cursor { border-left: 1px solid white; } .cm-s-twilight .cm-keyword { color: #f9ee98; } /**/ .cm-s-twilight .cm-atom { color: #FC0; } .cm-s-twilight .cm-number { color: #ca7841; } /**/ .cm-s-twilight .cm-def { color: #8DA6CE; } .cm-s-twilight span.cm-variable-2, .cm-s-twilight span.cm-tag { color: #607392; } /**/ .cm-s-twilight span.cm-variable-3, .cm-s-twilight span.cm-def, .cm-s-twilight span.cm-type { color: #607392; } /**/ .cm-s-twilight .cm-operator { color: #cda869; } /**/ .cm-s-twilight .cm-comment { color:#777; font-style:italic; font-weight:normal; } /**/ .cm-s-twilight .cm-string { color:#8f9d6a; font-style:italic; } /**/ .cm-s-twilight .cm-string-2 { color:#bd6b18; } /*?*/ .cm-s-twilight .cm-meta { background-color:#141414; color:#f7f7f7; } /*?*/ .cm-s-twilight .cm-builtin { color: #cda869; } /*?*/ .cm-s-twilight .cm-tag { color: #997643; } /**/ .cm-s-twilight .cm-attribute { color: #d6bb6d; } /*?*/ .cm-s-twilight .cm-header { color: #FF6400; } .cm-s-twilight .cm-hr { color: #AEAEAE; } .cm-s-twilight .cm-link { color:#ad9361; font-style:italic; text-decoration:none; } /**/ .cm-s-twilight .cm-error { border-bottom: 1px solid red; } .cm-s-twilight .CodeMirror-activeline-background { background: #27282E; } .cm-s-twilight .CodeMirror-matchingbracket { outline:1px solid grey; color:white !important; } PK!“{„ÔÏÏGfile-manager-advanced/application/library/codemirror/theme/xq-light.cssnu„[µü¤/* Copyright (C) 2011 by MarkLogic Corporation Author: Mike Brevoort Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ .cm-s-xq-light span.cm-keyword { line-height: 1em; font-weight: bold; color: #5A5CAD; } .cm-s-xq-light span.cm-atom { color: #6C8CD5; } .cm-s-xq-light span.cm-number { color: #164; } .cm-s-xq-light span.cm-def { text-decoration:underline; } .cm-s-xq-light span.cm-variable { color: black; } .cm-s-xq-light span.cm-variable-2 { color:black; } .cm-s-xq-light span.cm-variable-3, .cm-s-xq-light span.cm-type { color: black; } .cm-s-xq-light span.cm-property {} .cm-s-xq-light span.cm-operator {} .cm-s-xq-light span.cm-comment { color: #0080FF; font-style: italic; } .cm-s-xq-light span.cm-string { color: red; } .cm-s-xq-light span.cm-meta { color: yellow; } .cm-s-xq-light span.cm-qualifier { color: grey; } .cm-s-xq-light span.cm-builtin { color: #7EA656; } .cm-s-xq-light span.cm-bracket { color: #cc7; } .cm-s-xq-light span.cm-tag { color: #3F7F7F; } .cm-s-xq-light span.cm-attribute { color: #7F007F; } .cm-s-xq-light span.cm-error { color: #f00; } .cm-s-xq-light .CodeMirror-activeline-background { background: #e8f2ff; } .cm-s-xq-light .CodeMirror-matchingbracket { outline:1px solid grey;color:black !important;background:yellow; } PK!:‹@Í  Gfile-manager-advanced/application/library/codemirror/theme/rubyblue.cssnu„[µü¤.cm-s-rubyblue.CodeMirror { background: #112435; color: white; } .cm-s-rubyblue div.CodeMirror-selected { background: #38566F; } .cm-s-rubyblue .CodeMirror-line::selection, .cm-s-rubyblue .CodeMirror-line > span::selection, .cm-s-rubyblue .CodeMirror-line > span > span::selection { background: rgba(56, 86, 111, 0.99); } .cm-s-rubyblue .CodeMirror-line::-moz-selection, .cm-s-rubyblue .CodeMirror-line > span::-moz-selection, .cm-s-rubyblue .CodeMirror-line > span > span::-moz-selection { background: rgba(56, 86, 111, 0.99); } .cm-s-rubyblue .CodeMirror-gutters { background: #1F4661; border-right: 7px solid #3E7087; } .cm-s-rubyblue .CodeMirror-guttermarker { color: white; } .cm-s-rubyblue .CodeMirror-guttermarker-subtle { color: #3E7087; } .cm-s-rubyblue .CodeMirror-linenumber { color: white; } .cm-s-rubyblue .CodeMirror-cursor { border-left: 1px solid white; } .cm-s-rubyblue span.cm-comment { color: #999; font-style:italic; line-height: 1em; } .cm-s-rubyblue span.cm-atom { color: #F4C20B; } .cm-s-rubyblue span.cm-number, .cm-s-rubyblue span.cm-attribute { color: #82C6E0; } .cm-s-rubyblue span.cm-keyword { color: #F0F; } .cm-s-rubyblue span.cm-string { color: #F08047; } .cm-s-rubyblue span.cm-meta { color: #F0F; } .cm-s-rubyblue span.cm-variable-2, .cm-s-rubyblue span.cm-tag { color: #7BD827; } .cm-s-rubyblue span.cm-variable-3, .cm-s-rubyblue span.cm-def, .cm-s-rubyblue span.cm-type { color: white; } .cm-s-rubyblue span.cm-bracket { color: #F0F; } .cm-s-rubyblue span.cm-link { color: #F4C20B; } .cm-s-rubyblue span.CodeMirror-matchingbracket { color:#F0F !important; } .cm-s-rubyblue span.cm-builtin, .cm-s-rubyblue span.cm-special { color: #FF9D00; } .cm-s-rubyblue span.cm-error { color: #AF2018; } .cm-s-rubyblue .CodeMirror-activeline-background { background: #173047; } PK!µßY4Ÿ Ÿ Lfile-manager-advanced/application/library/codemirror/theme/duotone-light.cssnu„[µü¤/* Name: DuoTone-Light Author: by Bram de Haan, adapted from DuoTone themes by Simurai (http://simurai.com/projects/2016/01/01/duotone-themes) CodeMirror template by Jan T. Sott (https://github.com/idleberg), adapted by Bram de Haan (https://github.com/atelierbram/) */ .cm-s-duotone-light.CodeMirror { background: #faf8f5; color: #b29762; } .cm-s-duotone-light div.CodeMirror-selected { background: #e3dcce !important; } .cm-s-duotone-light .CodeMirror-gutters { background: #faf8f5; border-right: 0px; } .cm-s-duotone-light .CodeMirror-linenumber { color: #cdc4b1; } /* begin cursor */ .cm-s-duotone-light .CodeMirror-cursor { border-left: 1px solid #93abdc; /* border-left: 1px solid #93abdc80; */ border-right: .5em solid #93abdc; /* border-right: .5em solid #93abdc80; */ opacity: .5; } .cm-s-duotone-light .CodeMirror-activeline-background { background: #e3dcce; /* background: #e3dcce80; */ opacity: .5; } .cm-s-duotone-light .cm-fat-cursor .CodeMirror-cursor { background: #93abdc; /* #93abdc80; */ opacity: .5; } /* end cursor */ .cm-s-duotone-light span.cm-atom, .cm-s-duotone-light span.cm-number, .cm-s-duotone-light span.cm-keyword, .cm-s-duotone-light span.cm-variable, .cm-s-duotone-light span.cm-attribute, .cm-s-duotone-light span.cm-quote, .cm-s-duotone-light-light span.cm-hr, .cm-s-duotone-light-light span.cm-link { color: #063289; } .cm-s-duotone-light span.cm-property { color: #b29762; } .cm-s-duotone-light span.cm-punctuation, .cm-s-duotone-light span.cm-unit, .cm-s-duotone-light span.cm-negative { color: #063289; } .cm-s-duotone-light span.cm-string, .cm-s-duotone-light span.cm-operator { color: #1659df; } .cm-s-duotone-light span.cm-positive { color: #896724; } .cm-s-duotone-light span.cm-variable-2, .cm-s-duotone-light span.cm-variable-3, .cm-s-duotone-light span.cm-type, .cm-s-duotone-light span.cm-string-2, .cm-s-duotone-light span.cm-url { color: #896724; } .cm-s-duotone-light span.cm-def, .cm-s-duotone-light span.cm-tag, .cm-s-duotone-light span.cm-builtin, .cm-s-duotone-light span.cm-qualifier, .cm-s-duotone-light span.cm-header, .cm-s-duotone-light span.cm-em { color: #2d2006; } .cm-s-duotone-light span.cm-bracket, .cm-s-duotone-light span.cm-comment { color: #6f6e6a; } /* using #f00 red for errors, don't think any of the colorscheme variables will stand out enough, ... maybe by giving it a background-color ... */ /* .cm-s-duotone-light span.cm-error { background: #896724; color: #728fcb; } */ .cm-s-duotone-light span.cm-error, .cm-s-duotone-light span.cm-invalidchar { color: #f00; } .cm-s-duotone-light span.cm-header { font-weight: normal; } .cm-s-duotone-light .CodeMirror-matchingbracket { text-decoration: underline; color: #faf8f5 !important; } PK!bš>¨  Kfile-manager-advanced/application/library/codemirror/theme/panda-syntax.cssnu„[µü¤/* Name: Panda Syntax Author: Siamak Mokhtari (http://github.com/siamak/) CodeMirror template by Siamak Mokhtari (https://github.com/siamak/atom-panda-syntax) */ .cm-s-panda-syntax { background: #292A2B; color: #E6E6E6; line-height: 1.5; font-family: 'Operator Mono', 'Source Code Pro', Menlo, Monaco, Consolas, Courier New, monospace; } .cm-s-panda-syntax .CodeMirror-cursor { border-color: #ff2c6d; } .cm-s-panda-syntax .CodeMirror-activeline-background { background: rgba(99, 123, 156, 0.1); } .cm-s-panda-syntax .CodeMirror-selected { background: #FFF; } .cm-s-panda-syntax .cm-comment { font-style: italic; color: #676B79; } .cm-s-panda-syntax .cm-operator { color: #f3f3f3; } .cm-s-panda-syntax .cm-string { color: #19F9D8; } .cm-s-panda-syntax .cm-string-2 { color: #FFB86C; } .cm-s-panda-syntax .cm-tag { color: #ff2c6d; } .cm-s-panda-syntax .cm-meta { color: #b084eb; } .cm-s-panda-syntax .cm-number { color: #FFB86C; } .cm-s-panda-syntax .cm-atom { color: #ff2c6d; } .cm-s-panda-syntax .cm-keyword { color: #FF75B5; } .cm-s-panda-syntax .cm-variable { color: #ffb86c; } .cm-s-panda-syntax .cm-variable-2 { color: #ff9ac1; } .cm-s-panda-syntax .cm-variable-3, .cm-s-panda-syntax .cm-type { color: #ff9ac1; } .cm-s-panda-syntax .cm-def { color: #e6e6e6; } .cm-s-panda-syntax .cm-property { color: #f3f3f3; } .cm-s-panda-syntax .cm-unit { color: #ffb86c; } .cm-s-panda-syntax .cm-attribute { color: #ffb86c; } .cm-s-panda-syntax .CodeMirror-matchingbracket { border-bottom: 1px dotted #19F9D8; padding-bottom: 2px; color: #e6e6e6; } .cm-s-panda-syntax .CodeMirror-gutters { background: #292a2b; border-right-color: rgba(255, 255, 255, 0.1); } .cm-s-panda-syntax .CodeMirror-linenumber { color: #e6e6e6; opacity: 0.6; } PK! &ÑIfile-manager-advanced/application/library/codemirror/theme/3024-night.cssnu„[µü¤/* Name: 3024 night Author: Jan T. Sott (http://github.com/idleberg) CodeMirror template by Jan T. Sott (https://github.com/idleberg/base16-codemirror) Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) */ .cm-s-3024-night.CodeMirror { background: #090300; color: #d6d5d4; } .cm-s-3024-night div.CodeMirror-selected { background: #3a3432; } .cm-s-3024-night .CodeMirror-line::selection, .cm-s-3024-night .CodeMirror-line > span::selection, .cm-s-3024-night .CodeMirror-line > span > span::selection { background: rgba(58, 52, 50, .99); } .cm-s-3024-night .CodeMirror-line::-moz-selection, .cm-s-3024-night .CodeMirror-line > span::-moz-selection, .cm-s-3024-night .CodeMirror-line > span > span::-moz-selection { background: rgba(58, 52, 50, .99); } .cm-s-3024-night .CodeMirror-gutters { background: #090300; border-right: 0px; } .cm-s-3024-night .CodeMirror-guttermarker { color: #db2d20; } .cm-s-3024-night .CodeMirror-guttermarker-subtle { color: #5c5855; } .cm-s-3024-night .CodeMirror-linenumber { color: #5c5855; } .cm-s-3024-night .CodeMirror-cursor { border-left: 1px solid #807d7c; } .cm-s-3024-night span.cm-comment { color: #cdab53; } .cm-s-3024-night span.cm-atom { color: #a16a94; } .cm-s-3024-night span.cm-number { color: #a16a94; } .cm-s-3024-night span.cm-property, .cm-s-3024-night span.cm-attribute { color: #01a252; } .cm-s-3024-night span.cm-keyword { color: #db2d20; } .cm-s-3024-night span.cm-string { color: #fded02; } .cm-s-3024-night span.cm-variable { color: #01a252; } .cm-s-3024-night span.cm-variable-2 { color: #01a0e4; } .cm-s-3024-night span.cm-def { color: #e8bbd0; } .cm-s-3024-night span.cm-bracket { color: #d6d5d4; } .cm-s-3024-night span.cm-tag { color: #db2d20; } .cm-s-3024-night span.cm-link { color: #a16a94; } .cm-s-3024-night span.cm-error { background: #db2d20; color: #807d7c; } .cm-s-3024-night .CodeMirror-activeline-background { background: #2F2F2F; } .cm-s-3024-night .CodeMirror-matchingbracket { text-decoration: underline; color: white !important; } PK!i'«((Cfile-manager-advanced/application/library/codemirror/theme/nord.cssnu„[µü¤/* Based on arcticicestudio's Nord theme */ /* https://github.com/arcticicestudio/nord */ .cm-s-nord.CodeMirror { background: #2e3440; color: #d8dee9; } .cm-s-nord div.CodeMirror-selected { background: #434c5e; } .cm-s-nord .CodeMirror-line::selection, .cm-s-nord .CodeMirror-line > span::selection, .cm-s-nord .CodeMirror-line > span > span::selection { background: #3b4252; } .cm-s-nord .CodeMirror-line::-moz-selection, .cm-s-nord .CodeMirror-line > span::-moz-selection, .cm-s-nord .CodeMirror-line > span > span::-moz-selection { background: #3b4252; } .cm-s-nord .CodeMirror-gutters { background: #2e3440; border-right: 0px; } .cm-s-nord .CodeMirror-guttermarker { color: #4c566a; } .cm-s-nord .CodeMirror-guttermarker-subtle { color: #4c566a; } .cm-s-nord .CodeMirror-linenumber { color: #4c566a; } .cm-s-nord .CodeMirror-cursor { border-left: 1px solid #f8f8f0; } .cm-s-nord span.cm-comment { color: #4c566a; } .cm-s-nord span.cm-atom { color: #b48ead; } .cm-s-nord span.cm-number { color: #b48ead; } .cm-s-nord span.cm-comment.cm-attribute { color: #97b757; } .cm-s-nord span.cm-comment.cm-def { color: #bc9262; } .cm-s-nord span.cm-comment.cm-tag { color: #bc6283; } .cm-s-nord span.cm-comment.cm-type { color: #5998a6; } .cm-s-nord span.cm-property, .cm-s-nord span.cm-attribute { color: #8FBCBB; } .cm-s-nord span.cm-keyword { color: #81A1C1; } .cm-s-nord span.cm-builtin { color: #81A1C1; } .cm-s-nord span.cm-string { color: #A3BE8C; } .cm-s-nord span.cm-variable { color: #d8dee9; } .cm-s-nord span.cm-variable-2 { color: #d8dee9; } .cm-s-nord span.cm-variable-3, .cm-s-nord span.cm-type { color: #d8dee9; } .cm-s-nord span.cm-def { color: #8FBCBB; } .cm-s-nord span.cm-bracket { color: #81A1C1; } .cm-s-nord span.cm-tag { color: #bf616a; } .cm-s-nord span.cm-header { color: #b48ead; } .cm-s-nord span.cm-link { color: #b48ead; } .cm-s-nord span.cm-error { background: #bf616a; color: #f8f8f0; } .cm-s-nord .CodeMirror-activeline-background { background: #3b4252; } .cm-s-nord .CodeMirror-matchingbracket { text-decoration: underline; color: white !important; } PK!÷”ÙÙÙCfile-manager-advanced/application/library/codemirror/theme/seti.cssnu„[µü¤/* Name: seti Author: Michael Kaminsky (http://github.com/mkaminsky11) Original seti color scheme by Jesse Weed (https://github.com/jesseweed/seti-syntax) */ .cm-s-seti.CodeMirror { background-color: #151718 !important; color: #CFD2D1 !important; border: none; } .cm-s-seti .CodeMirror-gutters { color: #404b53; background-color: #0E1112; border: none; } .cm-s-seti .CodeMirror-cursor { border-left: solid thin #f8f8f0; } .cm-s-seti .CodeMirror-linenumber { color: #6D8A88; } .cm-s-seti.CodeMirror-focused div.CodeMirror-selected { background: rgba(255, 255, 255, 0.10); } .cm-s-seti .CodeMirror-line::selection, .cm-s-seti .CodeMirror-line > span::selection, .cm-s-seti .CodeMirror-line > span > span::selection { background: rgba(255, 255, 255, 0.10); } .cm-s-seti .CodeMirror-line::-moz-selection, .cm-s-seti .CodeMirror-line > span::-moz-selection, .cm-s-seti .CodeMirror-line > span > span::-moz-selection { background: rgba(255, 255, 255, 0.10); } .cm-s-seti span.cm-comment { color: #41535b; } .cm-s-seti span.cm-string, .cm-s-seti span.cm-string-2 { color: #55b5db; } .cm-s-seti span.cm-number { color: #cd3f45; } .cm-s-seti span.cm-variable { color: #55b5db; } .cm-s-seti span.cm-variable-2 { color: #a074c4; } .cm-s-seti span.cm-def { color: #55b5db; } .cm-s-seti span.cm-keyword { color: #ff79c6; } .cm-s-seti span.cm-operator { color: #9fca56; } .cm-s-seti span.cm-keyword { color: #e6cd69; } .cm-s-seti span.cm-atom { color: #cd3f45; } .cm-s-seti span.cm-meta { color: #55b5db; } .cm-s-seti span.cm-tag { color: #55b5db; } .cm-s-seti span.cm-attribute { color: #9fca56; } .cm-s-seti span.cm-qualifier { color: #9fca56; } .cm-s-seti span.cm-property { color: #a074c4; } .cm-s-seti span.cm-variable-3, .cm-s-seti span.cm-type { color: #9fca56; } .cm-s-seti span.cm-builtin { color: #9fca56; } .cm-s-seti .CodeMirror-activeline-background { background: #101213; } .cm-s-seti .CodeMirror-matchingbracket { text-decoration: underline; color: white !important; } PK!JGúk k Qfile-manager-advanced/application/library/codemirror/theme/material-palenight.cssnu„[µü¤/* Name: material Author: Mattia Astorino (http://github.com/equinusocio) Website: https://material-theme.site/ */ .cm-s-material-palenight.CodeMirror { background-color: #292D3E; color: #A6ACCD; } .cm-s-material-palenight .CodeMirror-gutters { background: #292D3E; color: #676E95; border: none; } .cm-s-material-palenight .CodeMirror-guttermarker, .cm-s-material-palenight .CodeMirror-guttermarker-subtle, .cm-s-material-palenight .CodeMirror-linenumber { color: #676E95; } .cm-s-material-palenight .CodeMirror-cursor { border-left: 1px solid #FFCC00; } .cm-s-material-palenight.cm-fat-cursor .CodeMirror-cursor { background-color: #607c8b80 !important; } .cm-s-material-palenight .cm-animate-fat-cursor { background-color: #607c8b80 !important; } .cm-s-material-palenight div.CodeMirror-selected { background: rgba(113, 124, 180, 0.2); } .cm-s-material-palenight.CodeMirror-focused div.CodeMirror-selected { background: rgba(113, 124, 180, 0.2); } .cm-s-material-palenight .CodeMirror-line::selection, .cm-s-material-palenight .CodeMirror-line>span::selection, .cm-s-material-palenight .CodeMirror-line>span>span::selection { background: rgba(128, 203, 196, 0.2); } .cm-s-material-palenight .CodeMirror-line::-moz-selection, .cm-s-material-palenight .CodeMirror-line>span::-moz-selection, .cm-s-material-palenight .CodeMirror-line>span>span::-moz-selection { background: rgba(128, 203, 196, 0.2); } .cm-s-material-palenight .CodeMirror-activeline-background { background: rgba(0, 0, 0, 0.5); } .cm-s-material-palenight .cm-keyword { color: #C792EA; } .cm-s-material-palenight .cm-operator { color: #89DDFF; } .cm-s-material-palenight .cm-variable-2 { color: #EEFFFF; } .cm-s-material-palenight .cm-variable-3, .cm-s-material-palenight .cm-type { color: #f07178; } .cm-s-material-palenight .cm-builtin { color: #FFCB6B; } .cm-s-material-palenight .cm-atom { color: #F78C6C; } .cm-s-material-palenight .cm-number { color: #FF5370; } .cm-s-material-palenight .cm-def { color: #82AAFF; } .cm-s-material-palenight .cm-string { color: #C3E88D; } .cm-s-material-palenight .cm-string-2 { color: #f07178; } .cm-s-material-palenight .cm-comment { color: #676E95; } .cm-s-material-palenight .cm-variable { color: #f07178; } .cm-s-material-palenight .cm-tag { color: #FF5370; } .cm-s-material-palenight .cm-meta { color: #FFCB6B; } .cm-s-material-palenight .cm-attribute { color: #C792EA; } .cm-s-material-palenight .cm-property { color: #C792EA; } .cm-s-material-palenight .cm-qualifier { color: #DECB6B; } .cm-s-material-palenight .cm-variable-3, .cm-s-material-palenight .cm-type { color: #DECB6B; } .cm-s-material-palenight .cm-error { color: rgba(255, 255, 255, 1.0); background-color: #FF5370; } .cm-s-material-palenight .CodeMirror-matchingbracket { text-decoration: underline; color: white !important; } PK!˜[JÏ Ï Mfile-manager-advanced/application/library/codemirror/theme/material-ocean.cssnu„[µü¤/* Name: material Author: Mattia Astorino (http://github.com/equinusocio) Website: https://material-theme.site/ */ .cm-s-material-ocean.CodeMirror { background-color: #0F111A; color: #8F93A2; } .cm-s-material-ocean .CodeMirror-gutters { background: #0F111A; color: #464B5D; border: none; } .cm-s-material-ocean .CodeMirror-guttermarker, .cm-s-material-ocean .CodeMirror-guttermarker-subtle, .cm-s-material-ocean .CodeMirror-linenumber { color: #464B5D; } .cm-s-material-ocean .CodeMirror-cursor { border-left: 1px solid #FFCC00; } .cm-s-material-ocean.cm-fat-cursor .CodeMirror-cursor { background-color: #a2a8a175 !important; } .cm-s-material-ocean .cm-animate-fat-cursor { background-color: #a2a8a175 !important; } .cm-s-material-ocean div.CodeMirror-selected { background: rgba(113, 124, 180, 0.2); } .cm-s-material-ocean.CodeMirror-focused div.CodeMirror-selected { background: rgba(113, 124, 180, 0.2); } .cm-s-material-ocean .CodeMirror-line::selection, .cm-s-material-ocean .CodeMirror-line>span::selection, .cm-s-material-ocean .CodeMirror-line>span>span::selection { background: rgba(128, 203, 196, 0.2); } .cm-s-material-ocean .CodeMirror-line::-moz-selection, .cm-s-material-ocean .CodeMirror-line>span::-moz-selection, .cm-s-material-ocean .CodeMirror-line>span>span::-moz-selection { background: rgba(128, 203, 196, 0.2); } .cm-s-material-ocean .CodeMirror-activeline-background { background: rgba(0, 0, 0, 0.5); } .cm-s-material-ocean .cm-keyword { color: #C792EA; } .cm-s-material-ocean .cm-operator { color: #89DDFF; } .cm-s-material-ocean .cm-variable-2 { color: #EEFFFF; } .cm-s-material-ocean .cm-variable-3, .cm-s-material-ocean .cm-type { color: #f07178; } .cm-s-material-ocean .cm-builtin { color: #FFCB6B; } .cm-s-material-ocean .cm-atom { color: #F78C6C; } .cm-s-material-ocean .cm-number { color: #FF5370; } .cm-s-material-ocean .cm-def { color: #82AAFF; } .cm-s-material-ocean .cm-string { color: #C3E88D; } .cm-s-material-ocean .cm-string-2 { color: #f07178; } .cm-s-material-ocean .cm-comment { color: #464B5D; } .cm-s-material-ocean .cm-variable { color: #f07178; } .cm-s-material-ocean .cm-tag { color: #FF5370; } .cm-s-material-ocean .cm-meta { color: #FFCB6B; } .cm-s-material-ocean .cm-attribute { color: #C792EA; } .cm-s-material-ocean .cm-property { color: #C792EA; } .cm-s-material-ocean .cm-qualifier { color: #DECB6B; } .cm-s-material-ocean .cm-variable-3, .cm-s-material-ocean .cm-type { color: #DECB6B; } .cm-s-material-ocean .cm-error { color: rgba(255, 255, 255, 1.0); background-color: #FF5370; } .cm-s-material-ocean .CodeMirror-matchingbracket { text-decoration: underline; color: white !important; } PK!fÈòpê ê Ifile-manager-advanced/application/library/codemirror/theme/ayu-mirage.cssnu„[µü¤/* Based on https://github.com/dempfi/ayu */ .cm-s-ayu-mirage.CodeMirror { background: #1f2430; color: #cbccc6; } .cm-s-ayu-mirage div.CodeMirror-selected { background: #34455a; } .cm-s-ayu-mirage .CodeMirror-line::selection, .cm-s-ayu-mirage .CodeMirror-line > span::selection, .cm-s-ayu-mirage .CodeMirror-line > span > span::selection { background: #34455a; } .cm-s-ayu-mirage .CodeMirror-line::-moz-selection, .cm-s-ayu-mirage .CodeMirror-line > span::-moz-selection, .cm-s-ayu-mirage .CodeMirror-line > span > span::-moz-selection { background: rgba(25, 30, 42, 99); } .cm-s-ayu-mirage .CodeMirror-gutters { background: #1f2430; border-right: 0px; } .cm-s-ayu-mirage .CodeMirror-guttermarker { color: white; } .cm-s-ayu-mirage .CodeMirror-guttermarker-subtle { color: rgba(112, 122, 140, 66); } .cm-s-ayu-mirage .CodeMirror-linenumber { color: rgba(61, 66, 77, 99); } .cm-s-ayu-mirage .CodeMirror-cursor { border-left: 1px solid #ffcc66; } .cm-s-ayu-mirage.cm-fat-cursor .CodeMirror-cursor {background-color: #a2a8a175 !important;} .cm-s-ayu-mirage .cm-animate-fat-cursor { background-color: #a2a8a175 !important; } .cm-s-ayu-mirage span.cm-comment { color: #5c6773; font-style:italic; } .cm-s-ayu-mirage span.cm-atom { color: #ae81ff; } .cm-s-ayu-mirage span.cm-number { color: #ffcc66; } .cm-s-ayu-mirage span.cm-comment.cm-attribute { color: #ffd580; } .cm-s-ayu-mirage span.cm-comment.cm-def { color: #d4bfff; } .cm-s-ayu-mirage span.cm-comment.cm-tag { color: #5ccfe6; } .cm-s-ayu-mirage span.cm-comment.cm-type { color: #5998a6; } .cm-s-ayu-mirage span.cm-property { color: #f29e74; } .cm-s-ayu-mirage span.cm-attribute { color: #ffd580; } .cm-s-ayu-mirage span.cm-keyword { color: #ffa759; } .cm-s-ayu-mirage span.cm-builtin { color: #ffcc66; } .cm-s-ayu-mirage span.cm-string { color: #bae67e; } .cm-s-ayu-mirage span.cm-variable { color: #cbccc6; } .cm-s-ayu-mirage span.cm-variable-2 { color: #f28779; } .cm-s-ayu-mirage span.cm-variable-3 { color: #5ccfe6; } .cm-s-ayu-mirage span.cm-type { color: #ffa759; } .cm-s-ayu-mirage span.cm-def { color: #ffd580; } .cm-s-ayu-mirage span.cm-bracket { color: rgba(92, 207, 230, 80); } .cm-s-ayu-mirage span.cm-tag { color: #5ccfe6; } .cm-s-ayu-mirage span.cm-header { color: #bae67e; } .cm-s-ayu-mirage span.cm-link { color: #5ccfe6; } .cm-s-ayu-mirage span.cm-error { color: #ff3333; } .cm-s-ayu-mirage .CodeMirror-activeline-background { background: #191e2a; } .cm-s-ayu-mirage .CodeMirror-matchingbracket { text-decoration: underline; color: white !important; } PK!doí~ ~ Ffile-manager-advanced/application/library/codemirror/theme/darcula.cssnu„[µü¤/** Name: IntelliJ IDEA darcula theme From IntelliJ IDEA by JetBrains */ .cm-s-darcula { font-family: Consolas, Menlo, Monaco, 'Lucida Console', 'Liberation Mono', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Courier New', monospace, serif;} .cm-s-darcula.CodeMirror { background: #2B2B2B; color: #A9B7C6; } .cm-s-darcula span.cm-meta { color: #BBB529; } .cm-s-darcula span.cm-number { color: #6897BB; } .cm-s-darcula span.cm-keyword { color: #CC7832; line-height: 1em; font-weight: bold; } .cm-s-darcula span.cm-def { color: #A9B7C6; font-style: italic; } .cm-s-darcula span.cm-variable { color: #A9B7C6; } .cm-s-darcula span.cm-variable-2 { color: #A9B7C6; } .cm-s-darcula span.cm-variable-3 { color: #9876AA; } .cm-s-darcula span.cm-type { color: #AABBCC; font-weight: bold; } .cm-s-darcula span.cm-property { color: #FFC66D; } .cm-s-darcula span.cm-operator { color: #A9B7C6; } .cm-s-darcula span.cm-string { color: #6A8759; } .cm-s-darcula span.cm-string-2 { color: #6A8759; } .cm-s-darcula span.cm-comment { color: #61A151; font-style: italic; } .cm-s-darcula span.cm-link { color: #CC7832; } .cm-s-darcula span.cm-atom { color: #CC7832; } .cm-s-darcula span.cm-error { color: #BC3F3C; } .cm-s-darcula span.cm-tag { color: #629755; font-weight: bold; font-style: italic; text-decoration: underline; } .cm-s-darcula span.cm-attribute { color: #6897bb; } .cm-s-darcula span.cm-qualifier { color: #6A8759; } .cm-s-darcula span.cm-bracket { color: #A9B7C6; } .cm-s-darcula span.cm-builtin { color: #FF9E59; } .cm-s-darcula span.cm-special { color: #FF9E59; } .cm-s-darcula span.cm-matchhighlight { color: #FFFFFF; background-color: rgba(50, 89, 48, .7); font-weight: normal;} .cm-s-darcula span.cm-searching { color: #FFFFFF; background-color: rgba(61, 115, 59, .7); font-weight: normal;} .cm-s-darcula .CodeMirror-cursor { border-left: 1px solid #A9B7C6; } .cm-s-darcula .CodeMirror-activeline-background { background: #323232; } .cm-s-darcula .CodeMirror-gutters { background: #313335; border-right: 1px solid #313335; } .cm-s-darcula .CodeMirror-guttermarker { color: #FFEE80; } .cm-s-darcula .CodeMirror-guttermarker-subtle { color: #D0D0D0; } .cm-s-darcula .CodeMirrir-linenumber { color: #606366; } .cm-s-darcula .CodeMirror-matchingbracket { background-color: #3B514D; color: #FFEF28 !important; font-weight: bold; } .cm-s-darcula div.CodeMirror-selected { background: #214283; } .CodeMirror-hints.darcula { font-family: Menlo, Monaco, Consolas, 'Courier New', monospace; color: #9C9E9E; background-color: #3B3E3F !important; } .CodeMirror-hints.darcula .CodeMirror-hint-active { background-color: #494D4E !important; color: #9C9E9E !important; } PK!ÎÌ ±ƒƒFfile-manager-advanced/application/library/codemirror/theme/monokai.cssnu„[µü¤/* Based on Sublime Text's Monokai theme */ .cm-s-monokai.CodeMirror { background: #272822; color: #f8f8f2; } .cm-s-monokai div.CodeMirror-selected { background: #49483E; } .cm-s-monokai .CodeMirror-line::selection, .cm-s-monokai .CodeMirror-line > span::selection, .cm-s-monokai .CodeMirror-line > span > span::selection { background: rgba(73, 72, 62, .99); } .cm-s-monokai .CodeMirror-line::-moz-selection, .cm-s-monokai .CodeMirror-line > span::-moz-selection, .cm-s-monokai .CodeMirror-line > span > span::-moz-selection { background: rgba(73, 72, 62, .99); } .cm-s-monokai .CodeMirror-gutters { background: #272822; border-right: 0px; } .cm-s-monokai .CodeMirror-guttermarker { color: white; } .cm-s-monokai .CodeMirror-guttermarker-subtle { color: #d0d0d0; } .cm-s-monokai .CodeMirror-linenumber { color: #d0d0d0; } .cm-s-monokai .CodeMirror-cursor { border-left: 1px solid #f8f8f0; } .cm-s-monokai span.cm-comment { color: #75715e; } .cm-s-monokai span.cm-atom { color: #ae81ff; } .cm-s-monokai span.cm-number { color: #ae81ff; } .cm-s-monokai span.cm-comment.cm-attribute { color: #97b757; } .cm-s-monokai span.cm-comment.cm-def { color: #bc9262; } .cm-s-monokai span.cm-comment.cm-tag { color: #bc6283; } .cm-s-monokai span.cm-comment.cm-type { color: #5998a6; } .cm-s-monokai span.cm-property, .cm-s-monokai span.cm-attribute { color: #a6e22e; } .cm-s-monokai span.cm-keyword { color: #f92672; } .cm-s-monokai span.cm-builtin { color: #66d9ef; } .cm-s-monokai span.cm-string { color: #e6db74; } .cm-s-monokai span.cm-variable { color: #f8f8f2; } .cm-s-monokai span.cm-variable-2 { color: #9effff; } .cm-s-monokai span.cm-variable-3, .cm-s-monokai span.cm-type { color: #66d9ef; } .cm-s-monokai span.cm-def { color: #fd971f; } .cm-s-monokai span.cm-bracket { color: #f8f8f2; } .cm-s-monokai span.cm-tag { color: #f92672; } .cm-s-monokai span.cm-header { color: #ae81ff; } .cm-s-monokai span.cm-link { color: #ae81ff; } .cm-s-monokai span.cm-error { background: #f92672; color: #f8f8f0; } .cm-s-monokai .CodeMirror-activeline-background { background: #373831; } .cm-s-monokai .CodeMirror-matchingbracket { text-decoration: underline; color: white !important; } PK!u²±û/ / Nfile-manager-advanced/application/library/codemirror/theme/material-darker.cssnu„[µü¤/* Name: material Author: Mattia Astorino (http://github.com/equinusocio) Website: https://material-theme.site/ */ .cm-s-material-darker.CodeMirror { background-color: #212121; color: #EEFFFF; } .cm-s-material-darker .CodeMirror-gutters { background: #212121; color: #545454; border: none; } .cm-s-material-darker .CodeMirror-guttermarker, .cm-s-material-darker .CodeMirror-guttermarker-subtle, .cm-s-material-darker .CodeMirror-linenumber { color: #545454; } .cm-s-material-darker .CodeMirror-cursor { border-left: 1px solid #FFCC00; } .cm-s-material-darker div.CodeMirror-selected { background: rgba(97, 97, 97, 0.2); } .cm-s-material-darker.CodeMirror-focused div.CodeMirror-selected { background: rgba(97, 97, 97, 0.2); } .cm-s-material-darker .CodeMirror-line::selection, .cm-s-material-darker .CodeMirror-line>span::selection, .cm-s-material-darker .CodeMirror-line>span>span::selection { background: rgba(128, 203, 196, 0.2); } .cm-s-material-darker .CodeMirror-line::-moz-selection, .cm-s-material-darker .CodeMirror-line>span::-moz-selection, .cm-s-material-darker .CodeMirror-line>span>span::-moz-selection { background: rgba(128, 203, 196, 0.2); } .cm-s-material-darker .CodeMirror-activeline-background { background: rgba(0, 0, 0, 0.5); } .cm-s-material-darker .cm-keyword { color: #C792EA; } .cm-s-material-darker .cm-operator { color: #89DDFF; } .cm-s-material-darker .cm-variable-2 { color: #EEFFFF; } .cm-s-material-darker .cm-variable-3, .cm-s-material-darker .cm-type { color: #f07178; } .cm-s-material-darker .cm-builtin { color: #FFCB6B; } .cm-s-material-darker .cm-atom { color: #F78C6C; } .cm-s-material-darker .cm-number { color: #FF5370; } .cm-s-material-darker .cm-def { color: #82AAFF; } .cm-s-material-darker .cm-string { color: #C3E88D; } .cm-s-material-darker .cm-string-2 { color: #f07178; } .cm-s-material-darker .cm-comment { color: #545454; } .cm-s-material-darker .cm-variable { color: #f07178; } .cm-s-material-darker .cm-tag { color: #FF5370; } .cm-s-material-darker .cm-meta { color: #FFCB6B; } .cm-s-material-darker .cm-attribute { color: #C792EA; } .cm-s-material-darker .cm-property { color: #C792EA; } .cm-s-material-darker .cm-qualifier { color: #DECB6B; } .cm-s-material-darker .cm-variable-3, .cm-s-material-darker .cm-type { color: #DECB6B; } .cm-s-material-darker .cm-error { color: rgba(255, 255, 255, 1.0); background-color: #FF5370; } .cm-s-material-darker .CodeMirror-matchingbracket { text-decoration: underline; color: white !important; }PK!Q¦„ÙÙHfile-manager-advanced/application/library/codemirror/theme/solarized.cssnu„[µü¤/* Solarized theme for code-mirror http://ethanschoonover.com/solarized */ /* Solarized color palette http://ethanschoonover.com/solarized/img/solarized-palette.png */ .solarized.base03 { color: #002b36; } .solarized.base02 { color: #073642; } .solarized.base01 { color: #586e75; } .solarized.base00 { color: #657b83; } .solarized.base0 { color: #839496; } .solarized.base1 { color: #93a1a1; } .solarized.base2 { color: #eee8d5; } .solarized.base3 { color: #fdf6e3; } .solarized.solar-yellow { color: #b58900; } .solarized.solar-orange { color: #cb4b16; } .solarized.solar-red { color: #dc322f; } .solarized.solar-magenta { color: #d33682; } .solarized.solar-violet { color: #6c71c4; } .solarized.solar-blue { color: #268bd2; } .solarized.solar-cyan { color: #2aa198; } .solarized.solar-green { color: #859900; } /* Color scheme for code-mirror */ .cm-s-solarized { line-height: 1.45em; color-profile: sRGB; rendering-intent: auto; } .cm-s-solarized.cm-s-dark { color: #839496; background-color: #002b36; } .cm-s-solarized.cm-s-light { background-color: #fdf6e3; color: #657b83; } .cm-s-solarized .CodeMirror-widget { text-shadow: none; } .cm-s-solarized .cm-header { color: #586e75; } .cm-s-solarized .cm-quote { color: #93a1a1; } .cm-s-solarized .cm-keyword { color: #cb4b16; } .cm-s-solarized .cm-atom { color: #d33682; } .cm-s-solarized .cm-number { color: #d33682; } .cm-s-solarized .cm-def { color: #2aa198; } .cm-s-solarized .cm-variable { color: #839496; } .cm-s-solarized .cm-variable-2 { color: #b58900; } .cm-s-solarized .cm-variable-3, .cm-s-solarized .cm-type { color: #6c71c4; } .cm-s-solarized .cm-property { color: #2aa198; } .cm-s-solarized .cm-operator { color: #6c71c4; } .cm-s-solarized .cm-comment { color: #586e75; font-style:italic; } .cm-s-solarized .cm-string { color: #859900; } .cm-s-solarized .cm-string-2 { color: #b58900; } .cm-s-solarized .cm-meta { color: #859900; } .cm-s-solarized .cm-qualifier { color: #b58900; } .cm-s-solarized .cm-builtin { color: #d33682; } .cm-s-solarized .cm-bracket { color: #cb4b16; } .cm-s-solarized .CodeMirror-matchingbracket { color: #859900; } .cm-s-solarized .CodeMirror-nonmatchingbracket { color: #dc322f; } .cm-s-solarized .cm-tag { color: #93a1a1; } .cm-s-solarized .cm-attribute { color: #2aa198; } .cm-s-solarized .cm-hr { color: transparent; border-top: 1px solid #586e75; display: block; } .cm-s-solarized .cm-link { color: #93a1a1; cursor: pointer; } .cm-s-solarized .cm-special { color: #6c71c4; } .cm-s-solarized .cm-em { color: #999; text-decoration: underline; text-decoration-style: dotted; } .cm-s-solarized .cm-error, .cm-s-solarized .cm-invalidchar { color: #586e75; border-bottom: 1px dotted #dc322f; } .cm-s-solarized.cm-s-dark div.CodeMirror-selected { background: #073642; } .cm-s-solarized.cm-s-dark.CodeMirror ::selection { background: rgba(7, 54, 66, 0.99); } .cm-s-solarized.cm-s-dark .CodeMirror-line::-moz-selection, .cm-s-dark .CodeMirror-line > span::-moz-selection, .cm-s-dark .CodeMirror-line > span > span::-moz-selection { background: rgba(7, 54, 66, 0.99); } .cm-s-solarized.cm-s-light div.CodeMirror-selected { background: #eee8d5; } .cm-s-solarized.cm-s-light .CodeMirror-line::selection, .cm-s-light .CodeMirror-line > span::selection, .cm-s-light .CodeMirror-line > span > span::selection { background: #eee8d5; } .cm-s-solarized.cm-s-light .CodeMirror-line::-moz-selection, .cm-s-light .CodeMirror-line > span::-moz-selection, .cm-s-light .CodeMirror-line > span > span::-moz-selection { background: #eee8d5; } /* Editor styling */ /* Little shadow on the view-port of the buffer view */ .cm-s-solarized.CodeMirror { -moz-box-shadow: inset 7px 0 12px -6px #000; -webkit-box-shadow: inset 7px 0 12px -6px #000; box-shadow: inset 7px 0 12px -6px #000; } /* Remove gutter border */ .cm-s-solarized .CodeMirror-gutters { border-right: 0; } /* Gutter colors and line number styling based of color scheme (dark / light) */ /* Dark */ .cm-s-solarized.cm-s-dark .CodeMirror-gutters { background-color: #073642; } .cm-s-solarized.cm-s-dark .CodeMirror-linenumber { color: #586e75; } /* Light */ .cm-s-solarized.cm-s-light .CodeMirror-gutters { background-color: #eee8d5; } .cm-s-solarized.cm-s-light .CodeMirror-linenumber { color: #839496; } /* Common */ .cm-s-solarized .CodeMirror-linenumber { padding: 0 5px; } .cm-s-solarized .CodeMirror-guttermarker-subtle { color: #586e75; } .cm-s-solarized.cm-s-dark .CodeMirror-guttermarker { color: #ddd; } .cm-s-solarized.cm-s-light .CodeMirror-guttermarker { color: #cb4b16; } .cm-s-solarized .CodeMirror-gutter .CodeMirror-gutter-text { color: #586e75; } /* Cursor */ .cm-s-solarized .CodeMirror-cursor { border-left: 1px solid #819090; } /* Fat cursor */ .cm-s-solarized.cm-s-light.cm-fat-cursor .CodeMirror-cursor { background: #77ee77; } .cm-s-solarized.cm-s-light .cm-animate-fat-cursor { background-color: #77ee77; } .cm-s-solarized.cm-s-dark.cm-fat-cursor .CodeMirror-cursor { background: #586e75; } .cm-s-solarized.cm-s-dark .cm-animate-fat-cursor { background-color: #586e75; } /* Active line */ .cm-s-solarized.cm-s-dark .CodeMirror-activeline-background { background: rgba(255, 255, 255, 0.06); } .cm-s-solarized.cm-s-light .CodeMirror-activeline-background { background: rgba(0, 0, 0, 0.06); } PK! ÇaMïïCfile-manager-advanced/application/library/codemirror/theme/ssms.cssnu„[µü¤.cm-s-ssms span.cm-keyword { color: blue; } .cm-s-ssms span.cm-comment { color: darkgreen; } .cm-s-ssms span.cm-string { color: red; } .cm-s-ssms span.cm-def { color: black; } .cm-s-ssms span.cm-variable { color: black; } .cm-s-ssms span.cm-variable-2 { color: black; } .cm-s-ssms span.cm-atom { color: darkgray; } .cm-s-ssms .CodeMirror-linenumber { color: teal; } .cm-s-ssms .CodeMirror-activeline-background { background: #ffffff; } .cm-s-ssms span.cm-string-2 { color: #FF00FF; } .cm-s-ssms span.cm-operator, .cm-s-ssms span.cm-bracket, .cm-s-ssms span.cm-punctuation { color: darkgray; } .cm-s-ssms .CodeMirror-gutters { border-right: 3px solid #ffee62; background-color: #ffffff; } .cm-s-ssms div.CodeMirror-selected { background: #ADD6FF; } PK!�Ò‚A A Dfile-manager-advanced/application/library/codemirror/theme/moxer.cssnu„[µü¤/* Name: Moxer Theme Author: Mattia Astorino (http://github.com/equinusocio) Website: https://github.com/moxer-theme/moxer-code */ .cm-s-moxer.CodeMirror { background-color: #090A0F; color: #8E95B4; line-height: 1.8; } .cm-s-moxer .CodeMirror-gutters { background: #090A0F; color: #35394B; border: none; } .cm-s-moxer .CodeMirror-guttermarker, .cm-s-moxer .CodeMirror-guttermarker-subtle, .cm-s-moxer .CodeMirror-linenumber { color: #35394B; } .cm-s-moxer .CodeMirror-cursor { border-left: 1px solid #FFCC00; } .cm-s-moxer div.CodeMirror-selected { background: rgba(128, 203, 196, 0.2); } .cm-s-moxer.CodeMirror-focused div.CodeMirror-selected { background: #212431; } .cm-s-moxer .CodeMirror-line::selection, .cm-s-moxer .CodeMirror-line>span::selection, .cm-s-moxer .CodeMirror-line>span>span::selection { background: #212431; } .cm-s-moxer .CodeMirror-line::-moz-selection, .cm-s-moxer .CodeMirror-line>span::-moz-selection, .cm-s-moxer .CodeMirror-line>span>span::-moz-selection { background: #212431; } .cm-s-moxer .CodeMirror-activeline-background, .cm-s-moxer .CodeMirror-activeline-gutter .CodeMirror-linenumber { background: rgba(33, 36, 49, 0.5); } .cm-s-moxer .cm-keyword { color: #D46C6C; } .cm-s-moxer .cm-operator { color: #D46C6C; } .cm-s-moxer .cm-variable-2 { color: #81C5DA; } .cm-s-moxer .cm-variable-3, .cm-s-moxer .cm-type { color: #f07178; } .cm-s-moxer .cm-builtin { color: #FFCB6B; } .cm-s-moxer .cm-atom { color: #A99BE2; } .cm-s-moxer .cm-number { color: #7CA4C0; } .cm-s-moxer .cm-def { color: #F5DFA5; } .cm-s-moxer .CodeMirror-line .cm-def ~ .cm-def { color: #81C5DA; } .cm-s-moxer .cm-string { color: #B2E4AE; } .cm-s-moxer .cm-string-2 { color: #f07178; } .cm-s-moxer .cm-comment { color: #3F445A; } .cm-s-moxer .cm-variable { color: #8E95B4; } .cm-s-moxer .cm-tag { color: #FF5370; } .cm-s-moxer .cm-meta { color: #FFCB6B; } .cm-s-moxer .cm-attribute { color: #C792EA; } .cm-s-moxer .cm-property { color: #81C5DA; } .cm-s-moxer .cm-qualifier { color: #DECB6B; } .cm-s-moxer .cm-variable-3, .cm-s-moxer .cm-type { color: #DECB6B; } .cm-s-moxer .cm-error { color: rgba(255, 255, 255, 1.0); background-color: #FF5370; } .cm-s-moxer .CodeMirror-matchingbracket { text-decoration: underline; color: white !important; }PK!{œNÍ��Ifile-manager-advanced/application/library/codemirror/theme/colorforth.cssnu„[µü¤.cm-s-colorforth.CodeMirror { background: #000000; color: #f8f8f8; } .cm-s-colorforth .CodeMirror-gutters { background: #0a001f; border-right: 1px solid #aaa; } .cm-s-colorforth .CodeMirror-guttermarker { color: #FFBD40; } .cm-s-colorforth .CodeMirror-guttermarker-subtle { color: #78846f; } .cm-s-colorforth .CodeMirror-linenumber { color: #bababa; } .cm-s-colorforth .CodeMirror-cursor { border-left: 1px solid white; } .cm-s-colorforth span.cm-comment { color: #ededed; } .cm-s-colorforth span.cm-def { color: #ff1c1c; font-weight:bold; } .cm-s-colorforth span.cm-keyword { color: #ffd900; } .cm-s-colorforth span.cm-builtin { color: #00d95a; } .cm-s-colorforth span.cm-variable { color: #73ff00; } .cm-s-colorforth span.cm-string { color: #007bff; } .cm-s-colorforth span.cm-number { color: #00c4ff; } .cm-s-colorforth span.cm-atom { color: #606060; } .cm-s-colorforth span.cm-variable-2 { color: #EEE; } .cm-s-colorforth span.cm-variable-3, .cm-s-colorforth span.cm-type { color: #DDD; } .cm-s-colorforth span.cm-property {} .cm-s-colorforth span.cm-operator {} .cm-s-colorforth span.cm-meta { color: yellow; } .cm-s-colorforth span.cm-qualifier { color: #FFF700; } .cm-s-colorforth span.cm-bracket { color: #cc7; } .cm-s-colorforth span.cm-tag { color: #FFBD40; } .cm-s-colorforth span.cm-attribute { color: #FFF700; } .cm-s-colorforth span.cm-error { color: #f00; } .cm-s-colorforth div.CodeMirror-selected { background: #333d53; } .cm-s-colorforth span.cm-compilation { background: rgba(255, 255, 255, 0.12); } .cm-s-colorforth .CodeMirror-activeline-background { background: #253540; } PK!DeóÄEfile-manager-advanced/application/library/codemirror/theme/juejin.cssnu„[µü¤.cm-s-juejin.CodeMirror { background: #f8f9fa; } .cm-s-juejin .cm-header, .cm-s-juejin .cm-def { color: #1ba2f0; } .cm-s-juejin .cm-comment { color: #009e9d; } .cm-s-juejin .cm-quote, .cm-s-juejin .cm-link, .cm-s-juejin .cm-strong, .cm-s-juejin .cm-attribute { color: #fd7741; } .cm-s-juejin .cm-url, .cm-s-juejin .cm-keyword, .cm-s-juejin .cm-builtin { color: #bb51b8; } .cm-s-juejin .cm-hr { color: #909090; } .cm-s-juejin .cm-tag { color: #107000; } .cm-s-juejin .cm-variable-2 { color: #0050a0; } PK!øe¥ó  Dfile-manager-advanced/application/library/codemirror/theme/yonce.cssnu„[µü¤/* Name: yoncé Author: Thomas MacLean (http://github.com/thomasmaclean) Original yoncé color scheme by Mina Markham (https://github.com/minamarkham) */ .cm-s-yonce.CodeMirror { background: #1C1C1C; color: #d4d4d4; } /**/ .cm-s-yonce div.CodeMirror-selected { background: rgba(252, 69, 133, 0.478); } /**/ .cm-s-yonce .CodeMirror-selectedtext, .cm-s-yonce .CodeMirror-selected, .cm-s-yonce .CodeMirror-line::selection, .cm-s-yonce .CodeMirror-line > span::selection, .cm-s-yonce .CodeMirror-line > span > span::selection, .cm-s-yonce .CodeMirror-line::-moz-selection, .cm-s-yonce .CodeMirror-line > span::-moz-selection, .cm-s-yonce .CodeMirror-line > span > span::-moz-selection { background: rgba(252, 67, 132, 0.47); } .cm-s-yonce.CodeMirror pre { padding-left: 0px; } .cm-s-yonce .CodeMirror-gutters {background: #1C1C1C; border-right: 0px;} .cm-s-yonce .CodeMirror-linenumber {color: #777777; padding-right: 10px; } .cm-s-yonce .CodeMirror-activeline .CodeMirror-linenumber.CodeMirror-gutter-elt { background: #1C1C1C; color: #fc4384; } .cm-s-yonce .CodeMirror-linenumber { color: #777; } .cm-s-yonce .CodeMirror-cursor { border-left: 2px solid #FC4384; } .cm-s-yonce .cm-searching { background: rgba(243, 155, 53, .3) !important; outline: 1px solid #F39B35; } .cm-s-yonce .cm-searching.CodeMirror-selectedtext { background: rgba(243, 155, 53, .7) !important; color: white; } .cm-s-yonce .cm-keyword { color: #00A7AA; } /**/ .cm-s-yonce .cm-atom { color: #F39B35; } .cm-s-yonce .cm-number, .cm-s-yonce span.cm-type { color: #A06FCA; } /**/ .cm-s-yonce .cm-def { color: #98E342; } .cm-s-yonce .cm-property, .cm-s-yonce span.cm-variable { color: #D4D4D4; font-style: italic; } .cm-s-yonce span.cm-variable-2 { color: #da7dae; font-style: italic; } .cm-s-yonce span.cm-variable-3 { color: #A06FCA; } .cm-s-yonce .cm-type.cm-def { color: #FC4384; font-style: normal; text-decoration: underline; } .cm-s-yonce .cm-property.cm-def { color: #FC4384; font-style: normal; } .cm-s-yonce .cm-callee { color: #FC4384; font-style: normal; } .cm-s-yonce .cm-operator { color: #FC4384; } /**/ .cm-s-yonce .cm-qualifier, .cm-s-yonce .cm-tag { color: #FC4384; } .cm-s-yonce .cm-tag.cm-bracket { color: #D4D4D4; } .cm-s-yonce .cm-attribute { color: #A06FCA; } .cm-s-yonce .cm-comment { color:#696d70; font-style:italic; font-weight:normal; } /**/ .cm-s-yonce .cm-comment.cm-tag { color: #FC4384 } .cm-s-yonce .cm-comment.cm-attribute { color: #D4D4D4; } .cm-s-yonce .cm-string { color:#E6DB74; } /**/ .cm-s-yonce .cm-string-2 { color:#F39B35; } /*?*/ .cm-s-yonce .cm-meta { color: #D4D4D4; background: inherit; } .cm-s-yonce .cm-builtin { color: #FC4384; } /*?*/ .cm-s-yonce .cm-header { color: #da7dae; } .cm-s-yonce .cm-hr { color: #98E342; } .cm-s-yonce .cm-link { color:#696d70; font-style:italic; text-decoration:none; } /**/ .cm-s-yonce .cm-error { border-bottom: 1px solid #C42412; } .cm-s-yonce .CodeMirror-activeline-background { background: #272727; } .cm-s-yonce .CodeMirror-matchingbracket { outline:1px solid grey; color:#D4D4D4 !important; } PK!_`aŠ@@Bfile-manager-advanced/application/library/codemirror/theme/mbo.cssnu„[µü¤/****************************************************************/ /* Based on mbonaci's Brackets mbo theme */ /* https://github.com/mbonaci/global/blob/master/Mbo.tmTheme */ /* Create your own: http://tmtheme-editor.herokuapp.com */ /****************************************************************/ .cm-s-mbo.CodeMirror { background: #2c2c2c; color: #ffffec; } .cm-s-mbo div.CodeMirror-selected { background: #716C62; } .cm-s-mbo .CodeMirror-line::selection, .cm-s-mbo .CodeMirror-line > span::selection, .cm-s-mbo .CodeMirror-line > span > span::selection { background: rgba(113, 108, 98, .99); } .cm-s-mbo .CodeMirror-line::-moz-selection, .cm-s-mbo .CodeMirror-line > span::-moz-selection, .cm-s-mbo .CodeMirror-line > span > span::-moz-selection { background: rgba(113, 108, 98, .99); } .cm-s-mbo .CodeMirror-gutters { background: #4e4e4e; border-right: 0px; } .cm-s-mbo .CodeMirror-guttermarker { color: white; } .cm-s-mbo .CodeMirror-guttermarker-subtle { color: grey; } .cm-s-mbo .CodeMirror-linenumber { color: #dadada; } .cm-s-mbo .CodeMirror-cursor { border-left: 1px solid #ffffec; } .cm-s-mbo span.cm-comment { color: #95958a; } .cm-s-mbo span.cm-atom { color: #00a8c6; } .cm-s-mbo span.cm-number { color: #00a8c6; } .cm-s-mbo span.cm-property, .cm-s-mbo span.cm-attribute { color: #9ddfe9; } .cm-s-mbo span.cm-keyword { color: #ffb928; } .cm-s-mbo span.cm-string { color: #ffcf6c; } .cm-s-mbo span.cm-string.cm-property { color: #ffffec; } .cm-s-mbo span.cm-variable { color: #ffffec; } .cm-s-mbo span.cm-variable-2 { color: #00a8c6; } .cm-s-mbo span.cm-def { color: #ffffec; } .cm-s-mbo span.cm-bracket { color: #fffffc; font-weight: bold; } .cm-s-mbo span.cm-tag { color: #9ddfe9; } .cm-s-mbo span.cm-link { color: #f54b07; } .cm-s-mbo span.cm-error { border-bottom: #636363; color: #ffffec; } .cm-s-mbo span.cm-qualifier { color: #ffffec; } .cm-s-mbo .CodeMirror-activeline-background { background: #494b41; } .cm-s-mbo .CodeMirror-matchingbracket { color: #ffb928 !important; } .cm-s-mbo .CodeMirror-matchingtag { background: rgba(255, 255, 255, .37); } PK!U±°zzzFfile-manager-advanced/application/library/codemirror/theme/lucario.cssnu„[µü¤/* Name: lucario Author: Raphael Amorim Original Lucario color scheme (https://github.com/raphamorim/lucario) */ .cm-s-lucario.CodeMirror, .cm-s-lucario .CodeMirror-gutters { background-color: #2b3e50 !important; color: #f8f8f2 !important; border: none; } .cm-s-lucario .CodeMirror-gutters { color: #2b3e50; } .cm-s-lucario .CodeMirror-cursor { border-left: solid thin #E6C845; } .cm-s-lucario .CodeMirror-linenumber { color: #f8f8f2; } .cm-s-lucario .CodeMirror-selected { background: #243443; } .cm-s-lucario .CodeMirror-line::selection, .cm-s-lucario .CodeMirror-line > span::selection, .cm-s-lucario .CodeMirror-line > span > span::selection { background: #243443; } .cm-s-lucario .CodeMirror-line::-moz-selection, .cm-s-lucario .CodeMirror-line > span::-moz-selection, .cm-s-lucario .CodeMirror-line > span > span::-moz-selection { background: #243443; } .cm-s-lucario span.cm-comment { color: #5c98cd; } .cm-s-lucario span.cm-string, .cm-s-lucario span.cm-string-2 { color: #E6DB74; } .cm-s-lucario span.cm-number { color: #ca94ff; } .cm-s-lucario span.cm-variable { color: #f8f8f2; } .cm-s-lucario span.cm-variable-2 { color: #f8f8f2; } .cm-s-lucario span.cm-def { color: #72C05D; } .cm-s-lucario span.cm-operator { color: #66D9EF; } .cm-s-lucario span.cm-keyword { color: #ff6541; } .cm-s-lucario span.cm-atom { color: #bd93f9; } .cm-s-lucario span.cm-meta { color: #f8f8f2; } .cm-s-lucario span.cm-tag { color: #ff6541; } .cm-s-lucario span.cm-attribute { color: #66D9EF; } .cm-s-lucario span.cm-qualifier { color: #72C05D; } .cm-s-lucario span.cm-property { color: #f8f8f2; } .cm-s-lucario span.cm-builtin { color: #72C05D; } .cm-s-lucario span.cm-variable-3, .cm-s-lucario span.cm-type { color: #ffb86c; } .cm-s-lucario .CodeMirror-activeline-background { background: #243443; } .cm-s-lucario .CodeMirror-matchingbracket { text-decoration: underline; color: white !important; } PK!•ÅoÖ^^Jfile-manager-advanced/application/library/codemirror/theme/vibrant-ink.cssnu„[µü¤/* Taken from the popular Visual Studio Vibrant Ink Schema */ .cm-s-vibrant-ink.CodeMirror { background: black; color: white; } .cm-s-vibrant-ink div.CodeMirror-selected { background: #35493c; } .cm-s-vibrant-ink .CodeMirror-line::selection, .cm-s-vibrant-ink .CodeMirror-line > span::selection, .cm-s-vibrant-ink .CodeMirror-line > span > span::selection { background: rgba(53, 73, 60, 0.99); } .cm-s-vibrant-ink .CodeMirror-line::-moz-selection, .cm-s-vibrant-ink .CodeMirror-line > span::-moz-selection, .cm-s-vibrant-ink .CodeMirror-line > span > span::-moz-selection { background: rgba(53, 73, 60, 0.99); } .cm-s-vibrant-ink .CodeMirror-gutters { background: #002240; border-right: 1px solid #aaa; } .cm-s-vibrant-ink .CodeMirror-guttermarker { color: white; } .cm-s-vibrant-ink .CodeMirror-guttermarker-subtle { color: #d0d0d0; } .cm-s-vibrant-ink .CodeMirror-linenumber { color: #d0d0d0; } .cm-s-vibrant-ink .CodeMirror-cursor { border-left: 1px solid white; } .cm-s-vibrant-ink .cm-keyword { color: #CC7832; } .cm-s-vibrant-ink .cm-atom { color: #FC0; } .cm-s-vibrant-ink .cm-number { color: #FFEE98; } .cm-s-vibrant-ink .cm-def { color: #8DA6CE; } .cm-s-vibrant-ink span.cm-variable-2, .cm-s-vibrant span.cm-tag { color: #FFC66D; } .cm-s-vibrant-ink span.cm-variable-3, .cm-s-vibrant span.cm-def, .cm-s-vibrant span.cm-type { color: #FFC66D; } .cm-s-vibrant-ink .cm-operator { color: #888; } .cm-s-vibrant-ink .cm-comment { color: gray; font-weight: bold; } .cm-s-vibrant-ink .cm-string { color: #A5C25C; } .cm-s-vibrant-ink .cm-string-2 { color: red; } .cm-s-vibrant-ink .cm-meta { color: #D8FA3C; } .cm-s-vibrant-ink .cm-builtin { color: #8DA6CE; } .cm-s-vibrant-ink .cm-tag { color: #8DA6CE; } .cm-s-vibrant-ink .cm-attribute { color: #8DA6CE; } .cm-s-vibrant-ink .cm-header { color: #FF6400; } .cm-s-vibrant-ink .cm-hr { color: #AEAEAE; } .cm-s-vibrant-ink .cm-link { color: #5656F3; } .cm-s-vibrant-ink .cm-error { border-bottom: 1px solid red; } .cm-s-vibrant-ink .CodeMirror-activeline-background { background: #27282E; } .cm-s-vibrant-ink .CodeMirror-matchingbracket { outline:1px solid grey; color:white !important; } PK!œÀO´u u Gfile-manager-advanced/application/library/codemirror/theme/ayu-dark.cssnu„[µü¤/* Based on https://github.com/dempfi/ayu */ .cm-s-ayu-dark.CodeMirror { background: #0a0e14; color: #b3b1ad; } .cm-s-ayu-dark div.CodeMirror-selected { background: #273747; } .cm-s-ayu-dark .CodeMirror-line::selection, .cm-s-ayu-dark .CodeMirror-line > span::selection, .cm-s-ayu-dark .CodeMirror-line > span > span::selection { background: rgba(39, 55, 71, 99); } .cm-s-ayu-dark .CodeMirror-line::-moz-selection, .cm-s-ayu-dark .CodeMirror-line > span::-moz-selection, .cm-s-ayu-dark .CodeMirror-line > span > span::-moz-selection { background: rgba(39, 55, 71, 99); } .cm-s-ayu-dark .CodeMirror-gutters { background: #0a0e14; border-right: 0px; } .cm-s-ayu-dark .CodeMirror-guttermarker { color: white; } .cm-s-ayu-dark .CodeMirror-guttermarker-subtle { color: #3d424d; } .cm-s-ayu-dark .CodeMirror-linenumber { color: #3d424d; } .cm-s-ayu-dark .CodeMirror-cursor { border-left: 1px solid #e6b450; } .cm-s-ayu-dark.cm-fat-cursor .CodeMirror-cursor { background-color: #a2a8a175 !important; } .cm-s-ayu-dark .cm-animate-fat-cursor { background-color: #a2a8a175 !important; } .cm-s-ayu-dark span.cm-comment { color: #626a73; } .cm-s-ayu-dark span.cm-atom { color: #ae81ff; } .cm-s-ayu-dark span.cm-number { color: #e6b450; } .cm-s-ayu-dark span.cm-comment.cm-attribute { color: #ffb454; } .cm-s-ayu-dark span.cm-comment.cm-def { color: rgba(57, 186, 230, 80); } .cm-s-ayu-dark span.cm-comment.cm-tag { color: #39bae6; } .cm-s-ayu-dark span.cm-comment.cm-type { color: #5998a6; } .cm-s-ayu-dark span.cm-property, .cm-s-ayu-dark span.cm-attribute { color: #ffb454; } .cm-s-ayu-dark span.cm-keyword { color: #ff8f40; } .cm-s-ayu-dark span.cm-builtin { color: #e6b450; } .cm-s-ayu-dark span.cm-string { color: #c2d94c; } .cm-s-ayu-dark span.cm-variable { color: #b3b1ad; } .cm-s-ayu-dark span.cm-variable-2 { color: #f07178; } .cm-s-ayu-dark span.cm-variable-3 { color: #39bae6; } .cm-s-ayu-dark span.cm-type { color: #ff8f40; } .cm-s-ayu-dark span.cm-def { color: #ffee99; } .cm-s-ayu-dark span.cm-bracket { color: #f8f8f2; } .cm-s-ayu-dark span.cm-tag { color: rgba(57, 186, 230, 80); } .cm-s-ayu-dark span.cm-header { color: #c2d94c; } .cm-s-ayu-dark span.cm-link { color: #39bae6; } .cm-s-ayu-dark span.cm-error { color: #ff3333; } .cm-s-ayu-dark .CodeMirror-activeline-background { background: #01060e; } .cm-s-ayu-dark .CodeMirror-matchingbracket { text-decoration: underline; color: white !important; } PK!N Z””Ifile-manager-advanced/application/library/codemirror/theme/the-matrix.cssnu„[µü¤.cm-s-the-matrix.CodeMirror { background: #000000; color: #00FF00; } .cm-s-the-matrix div.CodeMirror-selected { background: #2D2D2D; } .cm-s-the-matrix .CodeMirror-line::selection, .cm-s-the-matrix .CodeMirror-line > span::selection, .cm-s-the-matrix .CodeMirror-line > span > span::selection { background: rgba(45, 45, 45, 0.99); } .cm-s-the-matrix .CodeMirror-line::-moz-selection, .cm-s-the-matrix .CodeMirror-line > span::-moz-selection, .cm-s-the-matrix .CodeMirror-line > span > span::-moz-selection { background: rgba(45, 45, 45, 0.99); } .cm-s-the-matrix .CodeMirror-gutters { background: #060; border-right: 2px solid #00FF00; } .cm-s-the-matrix .CodeMirror-guttermarker { color: #0f0; } .cm-s-the-matrix .CodeMirror-guttermarker-subtle { color: white; } .cm-s-the-matrix .CodeMirror-linenumber { color: #FFFFFF; } .cm-s-the-matrix .CodeMirror-cursor { border-left: 1px solid #00FF00; } .cm-s-the-matrix span.cm-keyword { color: #008803; font-weight: bold; } .cm-s-the-matrix span.cm-atom { color: #3FF; } .cm-s-the-matrix span.cm-number { color: #FFB94F; } .cm-s-the-matrix span.cm-def { color: #99C; } .cm-s-the-matrix span.cm-variable { color: #F6C; } .cm-s-the-matrix span.cm-variable-2 { color: #C6F; } .cm-s-the-matrix span.cm-variable-3, .cm-s-the-matrix span.cm-type { color: #96F; } .cm-s-the-matrix span.cm-property { color: #62FFA0; } .cm-s-the-matrix span.cm-operator { color: #999; } .cm-s-the-matrix span.cm-comment { color: #CCCCCC; } .cm-s-the-matrix span.cm-string { color: #39C; } .cm-s-the-matrix span.cm-meta { color: #C9F; } .cm-s-the-matrix span.cm-qualifier { color: #FFF700; } .cm-s-the-matrix span.cm-builtin { color: #30a; } .cm-s-the-matrix span.cm-bracket { color: #cc7; } .cm-s-the-matrix span.cm-tag { color: #FFBD40; } .cm-s-the-matrix span.cm-attribute { color: #FFF700; } .cm-s-the-matrix span.cm-error { color: #FF0000; } .cm-s-the-matrix .CodeMirror-activeline-background { background: #040; } PK! ùõM M Jfile-manager-advanced/application/library/codemirror/theme/lesser-dark.cssnu„[µü¤/* http://lesscss.org/ dark theme Ported to CodeMirror by Peter Kroon */ .cm-s-lesser-dark { line-height: 1.3em; } .cm-s-lesser-dark.CodeMirror { background: #262626; color: #EBEFE7; text-shadow: 0 -1px 1px #262626; } .cm-s-lesser-dark div.CodeMirror-selected { background: #45443B; } /* 33322B*/ .cm-s-lesser-dark .CodeMirror-line::selection, .cm-s-lesser-dark .CodeMirror-line > span::selection, .cm-s-lesser-dark .CodeMirror-line > span > span::selection { background: rgba(69, 68, 59, .99); } .cm-s-lesser-dark .CodeMirror-line::-moz-selection, .cm-s-lesser-dark .CodeMirror-line > span::-moz-selection, .cm-s-lesser-dark .CodeMirror-line > span > span::-moz-selection { background: rgba(69, 68, 59, .99); } .cm-s-lesser-dark .CodeMirror-cursor { border-left: 1px solid white; } .cm-s-lesser-dark pre { padding: 0 8px; }/*editable code holder*/ .cm-s-lesser-dark.CodeMirror span.CodeMirror-matchingbracket { color: #7EFC7E; }/*65FC65*/ .cm-s-lesser-dark .CodeMirror-gutters { background: #262626; border-right:1px solid #aaa; } .cm-s-lesser-dark .CodeMirror-guttermarker { color: #599eff; } .cm-s-lesser-dark .CodeMirror-guttermarker-subtle { color: #777; } .cm-s-lesser-dark .CodeMirror-linenumber { color: #777; } .cm-s-lesser-dark span.cm-header { color: #a0a; } .cm-s-lesser-dark span.cm-quote { color: #090; } .cm-s-lesser-dark span.cm-keyword { color: #599eff; } .cm-s-lesser-dark span.cm-atom { color: #C2B470; } .cm-s-lesser-dark span.cm-number { color: #B35E4D; } .cm-s-lesser-dark span.cm-def { color: white; } .cm-s-lesser-dark span.cm-variable { color:#D9BF8C; } .cm-s-lesser-dark span.cm-variable-2 { color: #669199; } .cm-s-lesser-dark span.cm-variable-3, .cm-s-lesser-dark span.cm-type { color: white; } .cm-s-lesser-dark span.cm-property { color: #92A75C; } .cm-s-lesser-dark span.cm-operator { color: #92A75C; } .cm-s-lesser-dark span.cm-comment { color: #666; } .cm-s-lesser-dark span.cm-string { color: #BCD279; } .cm-s-lesser-dark span.cm-string-2 { color: #f50; } .cm-s-lesser-dark span.cm-meta { color: #738C73; } .cm-s-lesser-dark span.cm-qualifier { color: #555; } .cm-s-lesser-dark span.cm-builtin { color: #ff9e59; } .cm-s-lesser-dark span.cm-bracket { color: #EBEFE7; } .cm-s-lesser-dark span.cm-tag { color: #669199; } .cm-s-lesser-dark span.cm-attribute { color: #81a4d5; } .cm-s-lesser-dark span.cm-hr { color: #999; } .cm-s-lesser-dark span.cm-link { color: #7070E6; } .cm-s-lesser-dark span.cm-error { color: #9d1e15; } .cm-s-lesser-dark .CodeMirror-activeline-background { background: #3C3A3A; } .cm-s-lesser-dark .CodeMirror-matchingbracket { outline:1px solid grey; color:white !important; } PK!µ½b爈Cfile-manager-advanced/application/library/codemirror/theme/idea.cssnu„[µü¤/** Name: IDEA default theme From IntelliJ IDEA by JetBrains */ .cm-s-idea span.cm-meta { color: #808000; } .cm-s-idea span.cm-number { color: #0000FF; } .cm-s-idea span.cm-keyword { line-height: 1em; font-weight: bold; color: #000080; } .cm-s-idea span.cm-atom { font-weight: bold; color: #000080; } .cm-s-idea span.cm-def { color: #000000; } .cm-s-idea span.cm-variable { color: black; } .cm-s-idea span.cm-variable-2 { color: black; } .cm-s-idea span.cm-variable-3, .cm-s-idea span.cm-type { color: black; } .cm-s-idea span.cm-property { color: black; } .cm-s-idea span.cm-operator { color: black; } .cm-s-idea span.cm-comment { color: #808080; } .cm-s-idea span.cm-string { color: #008000; } .cm-s-idea span.cm-string-2 { color: #008000; } .cm-s-idea span.cm-qualifier { color: #555; } .cm-s-idea span.cm-error { color: #FF0000; } .cm-s-idea span.cm-attribute { color: #0000FF; } .cm-s-idea span.cm-tag { color: #000080; } .cm-s-idea span.cm-link { color: #0000FF; } .cm-s-idea .CodeMirror-activeline-background { background: #FFFAE3; } .cm-s-idea span.cm-builtin { color: #30a; } .cm-s-idea span.cm-bracket { color: #cc7; } .cm-s-idea { font-family: Consolas, Menlo, Monaco, Lucida Console, Liberation Mono, DejaVu Sans Mono, Bitstream Vera Sans Mono, Courier New, monospace, serif;} .cm-s-idea .CodeMirror-matchingbracket { outline:1px solid grey; color:black !important; } .CodeMirror-hints.idea { font-family: Menlo, Monaco, Consolas, 'Courier New', monospace; color: #616569; background-color: #ebf3fd !important; } .CodeMirror-hints.idea .CodeMirror-hint-active { background-color: #a2b8c9 !important; color: #5c6065 !important; }PK! h*³³Bfile-manager-advanced/application/library/codemirror/theme/neo.cssnu„[µü¤/* neo theme for codemirror */ /* Color scheme */ .cm-s-neo.CodeMirror { background-color:#ffffff; color:#2e383c; line-height:1.4375; } .cm-s-neo .cm-comment { color:#75787b; } .cm-s-neo .cm-keyword, .cm-s-neo .cm-property { color:#1d75b3; } .cm-s-neo .cm-atom,.cm-s-neo .cm-number { color:#75438a; } .cm-s-neo .cm-node,.cm-s-neo .cm-tag { color:#9c3328; } .cm-s-neo .cm-string { color:#b35e14; } .cm-s-neo .cm-variable,.cm-s-neo .cm-qualifier { color:#047d65; } /* Editor styling */ .cm-s-neo pre { padding:0; } .cm-s-neo .CodeMirror-gutters { border:none; border-right:10px solid transparent; background-color:transparent; } .cm-s-neo .CodeMirror-linenumber { padding:0; color:#e0e2e5; } .cm-s-neo .CodeMirror-guttermarker { color: #1d75b3; } .cm-s-neo .CodeMirror-guttermarker-subtle { color: #e0e2e5; } .cm-s-neo .CodeMirror-cursor { width: auto; border: 0; background: rgba(155,157,162,0.37); z-index: 1; } PK!ýþ@@Gfile-manager-advanced/application/library/codemirror/theme/midnight.cssnu„[µü¤/* Based on the theme at http://bonsaiden.github.com/JavaScript-Garden */ /**/ .cm-s-midnight .CodeMirror-activeline-background { background: #253540; } .cm-s-midnight.CodeMirror { background: #0F192A; color: #D1EDFF; } .cm-s-midnight div.CodeMirror-selected { background: #314D67; } .cm-s-midnight .CodeMirror-line::selection, .cm-s-midnight .CodeMirror-line > span::selection, .cm-s-midnight .CodeMirror-line > span > span::selection { background: rgba(49, 77, 103, .99); } .cm-s-midnight .CodeMirror-line::-moz-selection, .cm-s-midnight .CodeMirror-line > span::-moz-selection, .cm-s-midnight .CodeMirror-line > span > span::-moz-selection { background: rgba(49, 77, 103, .99); } .cm-s-midnight .CodeMirror-gutters { background: #0F192A; border-right: 1px solid; } .cm-s-midnight .CodeMirror-guttermarker { color: white; } .cm-s-midnight .CodeMirror-guttermarker-subtle { color: #d0d0d0; } .cm-s-midnight .CodeMirror-linenumber { color: #D0D0D0; } .cm-s-midnight .CodeMirror-cursor { border-left: 1px solid #F8F8F0; } .cm-s-midnight span.cm-comment { color: #428BDD; } .cm-s-midnight span.cm-atom { color: #AE81FF; } .cm-s-midnight span.cm-number { color: #D1EDFF; } .cm-s-midnight span.cm-property, .cm-s-midnight span.cm-attribute { color: #A6E22E; } .cm-s-midnight span.cm-keyword { color: #E83737; } .cm-s-midnight span.cm-string { color: #1DC116; } .cm-s-midnight span.cm-variable { color: #FFAA3E; } .cm-s-midnight span.cm-variable-2 { color: #FFAA3E; } .cm-s-midnight span.cm-def { color: #4DD; } .cm-s-midnight span.cm-bracket { color: #D1EDFF; } .cm-s-midnight span.cm-tag { color: #449; } .cm-s-midnight span.cm-link { color: #AE81FF; } .cm-s-midnight span.cm-error { background: #F92672; color: #F8F8F0; } .cm-s-midnight .CodeMirror-matchingbracket { text-decoration: underline; color: white !important; } PK!Éž„ïEfile-manager-advanced/application/library/codemirror/theme/abbott.cssnu„[µü¤/* * abbott.css * A warm, dark theme for prose and code, with pastels and pretty greens. * * Ported from abbott.vim (https://github.com/bcat/abbott.vim) version 2.1. * Original design and CodeMirror port by Jonathan Rascher. * * This theme shares the following color palette with the Vim color scheme. * * Brown shades: * bistre: #231c14 * chocolate: #3c3022 * cocoa: #745d42 * vanilla_cream: #fef3b4 * * Red shades: * crimson: #d80450 * cinnabar: #f63f05 * * Green shades: * dark_olive: #273900 * forest_green: #24a507 * chartreuse: #a0ea00 * pastel_chartreuse: #d8ff84 * * Yellow shades: * marigold: #fbb32f * lemon_meringue: #fbec5d * * Blue shades: * cornflower_blue: #3f91f1 * periwinkle_blue: #8ccdf0 * * Magenta shades: * french_pink: #ec6c99 * lavender: #e6a2f3 * * Cyan shades: * zomp: #39a78d * seafoam_green: #00ff7f */ /* Style the UI: */ /* Equivalent to Vim's Normal group. */ .cm-s-abbott.CodeMirror { background: #231c14 /* bistre */; color: #d8ff84 /* pastel_chartreuse */; } /* Roughly equivalent to Vim's LineNr group. */ .cm-s-abbott .CodeMirror-gutters { background: #231c14 /* bistre */; border: none; } .cm-s-abbott .CodeMirror-linenumber { color: #fbec5d /* lemon_meringue */; } .cm-s-abbott .CodeMirror-guttermarker { color: #f63f05 /* cinnabar */; } /* Roughly equivalent to Vim's FoldColumn group. */ .cm-s-abbott .CodeMirror-guttermarker-subtle { color: #fbb32f /* marigold */; } /* * Roughly equivalent to Vim's CursorColumn group. (We use a brighter color * since Vim's cursorcolumn option highlights a whole column, whereas * CodeMirror's rule just highlights a thin line.) */ .cm-s-abbott .CodeMirror-ruler { border-color: #745d42 /* cocoa */; } /* Equivalent to Vim's Cursor group in insert mode. */ .cm-s-abbott .CodeMirror-cursor { border-color: #a0ea00 /* chartreuse */; } /* Equivalent to Vim's Cursor group in normal mode. */ .cm-s-abbott.cm-fat-cursor .CodeMirror-cursor, .cm-s-abbott .cm-animate-fat-cursor { /* * CodeMirror doesn't allow changing the foreground color of the character * under the cursor, so we can't use a reverse video effect for the cursor. * Instead, make it semitransparent. */ background: rgba(160, 234, 0, 0.5) /* chartreuse */; } .cm-s-abbott.cm-fat-cursor .CodeMirror-cursors { /* * Boost the z-index so the fat cursor shows up on top of text and * matchingbracket/matchingtag highlights. */ z-index: 3; } /* Equivalent to Vim's Cursor group in replace mode. */ .cm-s-abbott .CodeMirror-overwrite .CodeMirror-cursor { border-bottom: 1px solid #a0ea00 /* chartreuse */; border-left: none; width: auto; } /* Roughly equivalent to Vim's CursorIM group. */ .cm-s-abbott .CodeMirror-secondarycursor { border-color: #00ff7f /* seafoam_green */; } /* Roughly equivalent to Vim's Visual group. */ .cm-s-abbott .CodeMirror-selected, .cm-s-abbott.CodeMirror-focused .CodeMirror-selected { background: #273900 /* dark_olive */; } .cm-s-abbott .CodeMirror-line::selection, .cm-s-abbott .CodeMirror-line > span::selection, .cm-s-abbott .CodeMirror-line > span > span::selection { background: #273900 /* dark_olive */; } .cm-s-abbott .CodeMirror-line::-moz-selection, .cm-s-abbott .CodeMirror-line > span::-moz-selection, .cm-s-abbott .CodeMirror-line > span > span::-moz-selection { background: #273900 /* dark_olive */; } /* Roughly equivalent to Vim's SpecialKey group. */ .cm-s-abbott .cm-tab { color: #00ff7f /* seafoam_green */; } /* Equivalent to Vim's Search group. */ .cm-s-abbott .cm-searching { background: #fef3b4 /* vanilla_cream */ !important; color: #231c14 /* bistre */ !important; } /* Style syntax highlighting modes: */ /* Equivalent to Vim's Comment group. */ .cm-s-abbott span.cm-comment { color: #fbb32f /* marigold */; font-style: italic; } /* Equivalent to Vim's String group. */ .cm-s-abbott span.cm-string, .cm-s-abbott span.cm-string-2 { color: #e6a2f3 /* lavender */; } /* Equivalent to Vim's Constant group. */ .cm-s-abbott span.cm-number, .cm-s-abbott span.cm-string.cm-url { color: #f63f05 /* cinnabar */; } /* Roughly equivalent to Vim's SpecialKey group. */ .cm-s-abbott span.cm-invalidchar { color: #00ff7f /* seafoam_green */; } /* Equivalent to Vim's Special group. */ .cm-s-abbott span.cm-atom { color: #fef3b4 /* vanilla_cream */; } /* Equivalent to Vim's Delimiter group. */ .cm-s-abbott span.cm-bracket, .cm-s-abbott span.cm-punctuation { color: #fef3b4 /* vanilla_cream */; } /* Equivalent Vim's Operator group. */ .cm-s-abbott span.cm-operator { font-weight: bold; } /* Roughly equivalent to Vim's Identifier group. */ .cm-s-abbott span.cm-def, .cm-s-abbott span.cm-variable, .cm-s-abbott span.cm-variable-2, .cm-s-abbott span.cm-variable-3 { color: #8ccdf0 /* periwinkle_blue */; } /* Roughly equivalent to Vim's Function group. */ .cm-s-abbott span.cm-builtin, .cm-s-abbott span.cm-property, .cm-s-abbott span.cm-qualifier { color: #3f91f1 /* cornflower_blue */; } /* Equivalent to Vim's Type group. */ .cm-s-abbott span.cm-type { color: #24a507 /* forest_green */; } /* Equivalent to Vim's Keyword group. */ .cm-s-abbott span.cm-keyword { color: #d80450 /* crimson */; font-weight: bold; } /* Equivalent to Vim's PreProc group. */ .cm-s-abbott span.cm-meta { color: #ec6c99 /* french_pink */; } /* Equivalent to Vim's htmlTagName group (linked to Statement). */ .cm-s-abbott span.cm-tag { color: #d80450 /* crimson */; font-weight: bold; } /* Equivalent to Vim's htmlArg group (linked to Type). */ .cm-s-abbott span.cm-attribute { color: #24a507 /* forest_green */; } /* Equivalent to Vim's htmlH1, markdownH1, etc. groups (linked to Title). */ .cm-s-abbott span.cm-header { color: #d80450 /* crimson */; font-weight: bold; } /* Equivalent to Vim's markdownRule group (linked to PreProc). */ .cm-s-abbott span.cm-hr { color: #ec6c99 /* french_pink */; } /* Roughly equivalent to Vim's Underlined group. */ .cm-s-abbott span.cm-link { color: #e6a2f3 /* lavender */; } /* Equivalent to Vim's diffRemoved group. */ .cm-s-abbott span.cm-negative { background: #d80450 /* crimson */; color: #231c14 /* bistre */; } /* Equivalent to Vim's diffAdded group. */ .cm-s-abbott span.cm-positive { background: #a0ea00 /* chartreuse */; color: #231c14 /* bistre */; font-weight: bold; } /* Equivalent to Vim's Error group. */ .cm-s-abbott span.cm-error { background: #d80450 /* crimson */; color: #231c14 /* bistre */; } /* Style addons: */ /* Equivalent to Vim's MatchParen group. */ .cm-s-abbott span.CodeMirror-matchingbracket { background: #745d42 /* cocoa */ !important; color: #231c14 /* bistre */ !important; font-weight: bold; } /* * Roughly equivalent to Vim's Error group. (Vim doesn't seem to have a direct * equivalent in its own matchparen plugin, but many syntax highlighting plugins * mark mismatched brackets as Error.) */ .cm-s-abbott span.CodeMirror-nonmatchingbracket { background: #d80450 /* crimson */ !important; color: #231c14 /* bistre */ !important; } .cm-s-abbott .CodeMirror-matchingtag, .cm-s-abbott .cm-matchhighlight { outline: 1px solid #39a78d /* zomp */; } /* Equivalent to Vim's CursorLine group. */ .cm-s-abbott .CodeMirror-activeline-background, .cm-s-abbott .CodeMirror-activeline-gutter { background: #3c3022 /* chocolate */; } /* Equivalent to Vim's CursorLineNr group. */ .cm-s-abbott .CodeMirror-activeline-gutter .CodeMirror-linenumber { color: #d8ff84 /* pastel_chartreuse */; font-weight: bold; } /* Roughly equivalent to Vim's Folded group. */ .cm-s-abbott .CodeMirror-foldmarker { color: #f63f05 /* cinnabar */; text-shadow: none; } PK!JYÀêêIfile-manager-advanced/application/library/codemirror/theme/railscasts.cssnu„[µü¤/* Name: Railscasts Author: Ryan Bates (http://railscasts.com) CodeMirror template by Jan T. Sott (https://github.com/idleberg/base16-codemirror) Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) */ .cm-s-railscasts.CodeMirror {background: #2b2b2b; color: #f4f1ed;} .cm-s-railscasts div.CodeMirror-selected {background: #272935 !important;} .cm-s-railscasts .CodeMirror-gutters {background: #2b2b2b; border-right: 0px;} .cm-s-railscasts .CodeMirror-linenumber {color: #5a647e;} .cm-s-railscasts .CodeMirror-cursor {border-left: 1px solid #d4cfc9 !important;} .cm-s-railscasts span.cm-comment {color: #bc9458;} .cm-s-railscasts span.cm-atom {color: #b6b3eb;} .cm-s-railscasts span.cm-number {color: #b6b3eb;} .cm-s-railscasts span.cm-property, .cm-s-railscasts span.cm-attribute {color: #a5c261;} .cm-s-railscasts span.cm-keyword {color: #da4939;} .cm-s-railscasts span.cm-string {color: #ffc66d;} .cm-s-railscasts span.cm-variable {color: #a5c261;} .cm-s-railscasts span.cm-variable-2 {color: #6d9cbe;} .cm-s-railscasts span.cm-def {color: #cc7833;} .cm-s-railscasts span.cm-error {background: #da4939; color: #d4cfc9;} .cm-s-railscasts span.cm-bracket {color: #f4f1ed;} .cm-s-railscasts span.cm-tag {color: #da4939;} .cm-s-railscasts span.cm-link {color: #b6b3eb;} .cm-s-railscasts .CodeMirror-matchingbracket { text-decoration: underline; color: white !important;} .cm-s-railscasts .CodeMirror-activeline-background { background: #303040; } PK!‘iÝÑÑFfile-manager-advanced/application/library/codemirror/theme/zenburn.cssnu„[µü¤/** * " * Using Zenburn color palette from the Emacs Zenburn Theme * https://github.com/bbatsov/zenburn-emacs/blob/master/zenburn-theme.el * * Also using parts of https://github.com/xavi/coderay-lighttable-theme * " * From: https://github.com/wisenomad/zenburn-lighttable-theme/blob/master/zenburn.css */ .cm-s-zenburn .CodeMirror-gutters { background: #3f3f3f !important; } .cm-s-zenburn .CodeMirror-foldgutter-open, .CodeMirror-foldgutter-folded { color: #999; } .cm-s-zenburn .CodeMirror-cursor { border-left: 1px solid white; } .cm-s-zenburn.CodeMirror { background-color: #3f3f3f; color: #dcdccc; } .cm-s-zenburn span.cm-builtin { color: #dcdccc; font-weight: bold; } .cm-s-zenburn span.cm-comment { color: #7f9f7f; } .cm-s-zenburn span.cm-keyword { color: #f0dfaf; font-weight: bold; } .cm-s-zenburn span.cm-atom { color: #bfebbf; } .cm-s-zenburn span.cm-def { color: #dcdccc; } .cm-s-zenburn span.cm-variable { color: #dfaf8f; } .cm-s-zenburn span.cm-variable-2 { color: #dcdccc; } .cm-s-zenburn span.cm-string { color: #cc9393; } .cm-s-zenburn span.cm-string-2 { color: #cc9393; } .cm-s-zenburn span.cm-number { color: #dcdccc; } .cm-s-zenburn span.cm-tag { color: #93e0e3; } .cm-s-zenburn span.cm-property { color: #dfaf8f; } .cm-s-zenburn span.cm-attribute { color: #dfaf8f; } .cm-s-zenburn span.cm-qualifier { color: #7cb8bb; } .cm-s-zenburn span.cm-meta { color: #f0dfaf; } .cm-s-zenburn span.cm-header { color: #f0efd0; } .cm-s-zenburn span.cm-operator { color: #f0efd0; } .cm-s-zenburn span.CodeMirror-matchingbracket { box-sizing: border-box; background: transparent; border-bottom: 1px solid; } .cm-s-zenburn span.CodeMirror-nonmatchingbracket { border-bottom: 1px solid; background: none; } .cm-s-zenburn .CodeMirror-activeline { background: #000000; } .cm-s-zenburn .CodeMirror-activeline-background { background: #000000; } .cm-s-zenburn div.CodeMirror-selected { background: #545454; } .cm-s-zenburn .CodeMirror-focused div.CodeMirror-selected { background: #4f4f4f; } PK!«— èîîJfile-manager-advanced/application/library/codemirror/theme/erlang-dark.cssnu„[µü¤.cm-s-erlang-dark.CodeMirror { background: #002240; color: white; } .cm-s-erlang-dark div.CodeMirror-selected { background: #b36539; } .cm-s-erlang-dark .CodeMirror-line::selection, .cm-s-erlang-dark .CodeMirror-line > span::selection, .cm-s-erlang-dark .CodeMirror-line > span > span::selection { background: rgba(179, 101, 57, .99); } .cm-s-erlang-dark .CodeMirror-line::-moz-selection, .cm-s-erlang-dark .CodeMirror-line > span::-moz-selection, .cm-s-erlang-dark .CodeMirror-line > span > span::-moz-selection { background: rgba(179, 101, 57, .99); } .cm-s-erlang-dark .CodeMirror-gutters { background: #002240; border-right: 1px solid #aaa; } .cm-s-erlang-dark .CodeMirror-guttermarker { color: white; } .cm-s-erlang-dark .CodeMirror-guttermarker-subtle { color: #d0d0d0; } .cm-s-erlang-dark .CodeMirror-linenumber { color: #d0d0d0; } .cm-s-erlang-dark .CodeMirror-cursor { border-left: 1px solid white; } .cm-s-erlang-dark span.cm-quote { color: #ccc; } .cm-s-erlang-dark span.cm-atom { color: #f133f1; } .cm-s-erlang-dark span.cm-attribute { color: #ff80e1; } .cm-s-erlang-dark span.cm-bracket { color: #ff9d00; } .cm-s-erlang-dark span.cm-builtin { color: #eaa; } .cm-s-erlang-dark span.cm-comment { color: #77f; } .cm-s-erlang-dark span.cm-def { color: #e7a; } .cm-s-erlang-dark span.cm-keyword { color: #ffee80; } .cm-s-erlang-dark span.cm-meta { color: #50fefe; } .cm-s-erlang-dark span.cm-number { color: #ffd0d0; } .cm-s-erlang-dark span.cm-operator { color: #d55; } .cm-s-erlang-dark span.cm-property { color: #ccc; } .cm-s-erlang-dark span.cm-qualifier { color: #ccc; } .cm-s-erlang-dark span.cm-special { color: #ffbbbb; } .cm-s-erlang-dark span.cm-string { color: #3ad900; } .cm-s-erlang-dark span.cm-string-2 { color: #ccc; } .cm-s-erlang-dark span.cm-tag { color: #9effff; } .cm-s-erlang-dark span.cm-variable { color: #50fe50; } .cm-s-erlang-dark span.cm-variable-2 { color: #e0e; } .cm-s-erlang-dark span.cm-variable-3, .cm-s-erlang-dark span.cm-type { color: #ccc; } .cm-s-erlang-dark span.cm-error { color: #9d1e15; } .cm-s-erlang-dark .CodeMirror-activeline-background { background: #013461; } .cm-s-erlang-dark .CodeMirror-matchingbracket { outline:1px solid grey; color:white !important; } PK!>.¯ ˆ ˆ Cfile-manager-advanced/application/library/codemirror/theme/ttcn.cssnu„[µü¤.cm-s-ttcn .cm-quote { color: #090; } .cm-s-ttcn .cm-negative { color: #d44; } .cm-s-ttcn .cm-positive { color: #292; } .cm-s-ttcn .cm-header, .cm-strong { font-weight: bold; } .cm-s-ttcn .cm-em { font-style: italic; } .cm-s-ttcn .cm-link { text-decoration: underline; } .cm-s-ttcn .cm-strikethrough { text-decoration: line-through; } .cm-s-ttcn .cm-header { color: #00f; font-weight: bold; } .cm-s-ttcn .cm-atom { color: #219; } .cm-s-ttcn .cm-attribute { color: #00c; } .cm-s-ttcn .cm-bracket { color: #997; } .cm-s-ttcn .cm-comment { color: #333333; } .cm-s-ttcn .cm-def { color: #00f; } .cm-s-ttcn .cm-em { font-style: italic; } .cm-s-ttcn .cm-error { color: #f00; } .cm-s-ttcn .cm-hr { color: #999; } .cm-s-ttcn .cm-invalidchar { color: #f00; } .cm-s-ttcn .cm-keyword { font-weight:bold; } .cm-s-ttcn .cm-link { color: #00c; text-decoration: underline; } .cm-s-ttcn .cm-meta { color: #555; } .cm-s-ttcn .cm-negative { color: #d44; } .cm-s-ttcn .cm-positive { color: #292; } .cm-s-ttcn .cm-qualifier { color: #555; } .cm-s-ttcn .cm-strikethrough { text-decoration: line-through; } .cm-s-ttcn .cm-string { color: #006400; } .cm-s-ttcn .cm-string-2 { color: #f50; } .cm-s-ttcn .cm-strong { font-weight: bold; } .cm-s-ttcn .cm-tag { color: #170; } .cm-s-ttcn .cm-variable { color: #8B2252; } .cm-s-ttcn .cm-variable-2 { color: #05a; } .cm-s-ttcn .cm-variable-3, .cm-s-ttcn .cm-type { color: #085; } .cm-s-ttcn .cm-invalidchar { color: #f00; } /* ASN */ .cm-s-ttcn .cm-accessTypes, .cm-s-ttcn .cm-compareTypes { color: #27408B; } .cm-s-ttcn .cm-cmipVerbs { color: #8B2252; } .cm-s-ttcn .cm-modifier { color:#D2691E; } .cm-s-ttcn .cm-status { color:#8B4545; } .cm-s-ttcn .cm-storage { color:#A020F0; } .cm-s-ttcn .cm-tags { color:#006400; } /* CFG */ .cm-s-ttcn .cm-externalCommands { color: #8B4545; font-weight:bold; } .cm-s-ttcn .cm-fileNCtrlMaskOptions, .cm-s-ttcn .cm-sectionTitle { color: #2E8B57; font-weight:bold; } /* TTCN */ .cm-s-ttcn .cm-booleanConsts, .cm-s-ttcn .cm-otherConsts, .cm-s-ttcn .cm-verdictConsts { color: #006400; } .cm-s-ttcn .cm-configOps, .cm-s-ttcn .cm-functionOps, .cm-s-ttcn .cm-portOps, .cm-s-ttcn .cm-sutOps, .cm-s-ttcn .cm-timerOps, .cm-s-ttcn .cm-verdictOps { color: #0000FF; } .cm-s-ttcn .cm-preprocessor, .cm-s-ttcn .cm-templateMatch, .cm-s-ttcn .cm-ttcn3Macros { color: #27408B; } .cm-s-ttcn .cm-types { color: #A52A2A; font-weight:bold; } .cm-s-ttcn .cm-visibilityModifiers { font-weight:bold; } PK!”Ž µ µ Mfile-manager-advanced/application/library/codemirror/theme/pastel-on-dark.cssnu„[µü¤/** * Pastel On Dark theme ported from ACE editor * @license MIT * @copyright AtomicPages LLC 2014 * @author Dennis Thompson, AtomicPages LLC * @version 1.1 * @source https://github.com/atomicpages/codemirror-pastel-on-dark-theme */ .cm-s-pastel-on-dark.CodeMirror { background: #2c2827; color: #8F938F; line-height: 1.5; } .cm-s-pastel-on-dark div.CodeMirror-selected { background: rgba(221,240,255,0.2); } .cm-s-pastel-on-dark .CodeMirror-line::selection, .cm-s-pastel-on-dark .CodeMirror-line > span::selection, .cm-s-pastel-on-dark .CodeMirror-line > span > span::selection { background: rgba(221,240,255,0.2); } .cm-s-pastel-on-dark .CodeMirror-line::-moz-selection, .cm-s-pastel-on-dark .CodeMirror-line > span::-moz-selection, .cm-s-pastel-on-dark .CodeMirror-line > span > span::-moz-selection { background: rgba(221,240,255,0.2); } .cm-s-pastel-on-dark .CodeMirror-gutters { background: #34302f; border-right: 0px; padding: 0 3px; } .cm-s-pastel-on-dark .CodeMirror-guttermarker { color: white; } .cm-s-pastel-on-dark .CodeMirror-guttermarker-subtle { color: #8F938F; } .cm-s-pastel-on-dark .CodeMirror-linenumber { color: #8F938F; } .cm-s-pastel-on-dark .CodeMirror-cursor { border-left: 1px solid #A7A7A7; } .cm-s-pastel-on-dark span.cm-comment { color: #A6C6FF; } .cm-s-pastel-on-dark span.cm-atom { color: #DE8E30; } .cm-s-pastel-on-dark span.cm-number { color: #CCCCCC; } .cm-s-pastel-on-dark span.cm-property { color: #8F938F; } .cm-s-pastel-on-dark span.cm-attribute { color: #a6e22e; } .cm-s-pastel-on-dark span.cm-keyword { color: #AEB2F8; } .cm-s-pastel-on-dark span.cm-string { color: #66A968; } .cm-s-pastel-on-dark span.cm-variable { color: #AEB2F8; } .cm-s-pastel-on-dark span.cm-variable-2 { color: #BEBF55; } .cm-s-pastel-on-dark span.cm-variable-3, .cm-s-pastel-on-dark span.cm-type { color: #DE8E30; } .cm-s-pastel-on-dark span.cm-def { color: #757aD8; } .cm-s-pastel-on-dark span.cm-bracket { color: #f8f8f2; } .cm-s-pastel-on-dark span.cm-tag { color: #C1C144; } .cm-s-pastel-on-dark span.cm-link { color: #ae81ff; } .cm-s-pastel-on-dark span.cm-qualifier,.cm-s-pastel-on-dark span.cm-builtin { color: #C1C144; } .cm-s-pastel-on-dark span.cm-error { background: #757aD8; color: #f8f8f0; } .cm-s-pastel-on-dark .CodeMirror-activeline-background { background: rgba(255, 255, 255, 0.031); } .cm-s-pastel-on-dark .CodeMirror-matchingbracket { border: 1px solid rgba(255,255,255,0.25); color: #8F938F !important; margin: -1px -1px 0 -1px; } PK!�(7DLLKfile-manager-advanced/application/library/codemirror/theme/base16-light.cssnu„[µü¤/* Name: Base16 Default Light Author: Chris Kempson (http://chriskempson.com) CodeMirror template by Jan T. Sott (https://github.com/idleberg/base16-codemirror) Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) */ .cm-s-base16-light.CodeMirror { background: #f5f5f5; color: #202020; } .cm-s-base16-light div.CodeMirror-selected { background: #e0e0e0; } .cm-s-base16-light .CodeMirror-line::selection, .cm-s-base16-light .CodeMirror-line > span::selection, .cm-s-base16-light .CodeMirror-line > span > span::selection { background: #e0e0e0; } .cm-s-base16-light .CodeMirror-line::-moz-selection, .cm-s-base16-light .CodeMirror-line > span::-moz-selection, .cm-s-base16-light .CodeMirror-line > span > span::-moz-selection { background: #e0e0e0; } .cm-s-base16-light .CodeMirror-gutters { background: #f5f5f5; border-right: 0px; } .cm-s-base16-light .CodeMirror-guttermarker { color: #ac4142; } .cm-s-base16-light .CodeMirror-guttermarker-subtle { color: #b0b0b0; } .cm-s-base16-light .CodeMirror-linenumber { color: #b0b0b0; } .cm-s-base16-light .CodeMirror-cursor { border-left: 1px solid #505050; } .cm-s-base16-light span.cm-comment { color: #8f5536; } .cm-s-base16-light span.cm-atom { color: #aa759f; } .cm-s-base16-light span.cm-number { color: #aa759f; } .cm-s-base16-light span.cm-property, .cm-s-base16-light span.cm-attribute { color: #90a959; } .cm-s-base16-light span.cm-keyword { color: #ac4142; } .cm-s-base16-light span.cm-string { color: #f4bf75; } .cm-s-base16-light span.cm-variable { color: #90a959; } .cm-s-base16-light span.cm-variable-2 { color: #6a9fb5; } .cm-s-base16-light span.cm-def { color: #d28445; } .cm-s-base16-light span.cm-bracket { color: #202020; } .cm-s-base16-light span.cm-tag { color: #ac4142; } .cm-s-base16-light span.cm-link { color: #aa759f; } .cm-s-base16-light span.cm-error { background: #ac4142; color: #505050; } .cm-s-base16-light .CodeMirror-activeline-background { background: #DDDCDC; } .cm-s-base16-light .CodeMirror-matchingbracket { color: #f5f5f5 !important; background-color: #6A9FB5 !important} PK!.úúFfile-manager-advanced/application/library/codemirror/theme/dracula.cssnu„[µü¤/* Name: dracula Author: Michael Kaminsky (http://github.com/mkaminsky11) Original dracula color scheme by Zeno Rocha (https://github.com/zenorocha/dracula-theme) */ .cm-s-dracula.CodeMirror, .cm-s-dracula .CodeMirror-gutters { background-color: #282a36 !important; color: #f8f8f2 !important; border: none; } .cm-s-dracula .CodeMirror-gutters { color: #282a36; } .cm-s-dracula .CodeMirror-cursor { border-left: solid thin #f8f8f0; } .cm-s-dracula .CodeMirror-linenumber { color: #6D8A88; } .cm-s-dracula .CodeMirror-selected { background: rgba(255, 255, 255, 0.10); } .cm-s-dracula .CodeMirror-line::selection, .cm-s-dracula .CodeMirror-line > span::selection, .cm-s-dracula .CodeMirror-line > span > span::selection { background: rgba(255, 255, 255, 0.10); } .cm-s-dracula .CodeMirror-line::-moz-selection, .cm-s-dracula .CodeMirror-line > span::-moz-selection, .cm-s-dracula .CodeMirror-line > span > span::-moz-selection { background: rgba(255, 255, 255, 0.10); } .cm-s-dracula span.cm-comment { color: #6272a4; } .cm-s-dracula span.cm-string, .cm-s-dracula span.cm-string-2 { color: #f1fa8c; } .cm-s-dracula span.cm-number { color: #bd93f9; } .cm-s-dracula span.cm-variable { color: #50fa7b; } .cm-s-dracula span.cm-variable-2 { color: white; } .cm-s-dracula span.cm-def { color: #50fa7b; } .cm-s-dracula span.cm-operator { color: #ff79c6; } .cm-s-dracula span.cm-keyword { color: #ff79c6; } .cm-s-dracula span.cm-atom { color: #bd93f9; } .cm-s-dracula span.cm-meta { color: #f8f8f2; } .cm-s-dracula span.cm-tag { color: #ff79c6; } .cm-s-dracula span.cm-attribute { color: #50fa7b; } .cm-s-dracula span.cm-qualifier { color: #50fa7b; } .cm-s-dracula span.cm-property { color: #66d9ef; } .cm-s-dracula span.cm-builtin { color: #50fa7b; } .cm-s-dracula span.cm-variable-3, .cm-s-dracula span.cm-type { color: #ffb86c; } .cm-s-dracula .CodeMirror-activeline-background { background: rgba(255,255,255,0.1); } .cm-s-dracula .CodeMirror-matchingbracket { text-decoration: underline; color: white !important; } PK!}¸hå½½Hfile-manager-advanced/application/library/codemirror/theme/hopscotch.cssnu„[µü¤/* Name: Hopscotch Author: Jan T. Sott CodeMirror template by Jan T. Sott (https://github.com/idleberg/base16-codemirror) Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) */ .cm-s-hopscotch.CodeMirror {background: #322931; color: #d5d3d5;} .cm-s-hopscotch div.CodeMirror-selected {background: #433b42 !important;} .cm-s-hopscotch .CodeMirror-gutters {background: #322931; border-right: 0px;} .cm-s-hopscotch .CodeMirror-linenumber {color: #797379;} .cm-s-hopscotch .CodeMirror-cursor {border-left: 1px solid #989498 !important;} .cm-s-hopscotch span.cm-comment {color: #b33508;} .cm-s-hopscotch span.cm-atom {color: #c85e7c;} .cm-s-hopscotch span.cm-number {color: #c85e7c;} .cm-s-hopscotch span.cm-property, .cm-s-hopscotch span.cm-attribute {color: #8fc13e;} .cm-s-hopscotch span.cm-keyword {color: #dd464c;} .cm-s-hopscotch span.cm-string {color: #fdcc59;} .cm-s-hopscotch span.cm-variable {color: #8fc13e;} .cm-s-hopscotch span.cm-variable-2 {color: #1290bf;} .cm-s-hopscotch span.cm-def {color: #fd8b19;} .cm-s-hopscotch span.cm-error {background: #dd464c; color: #989498;} .cm-s-hopscotch span.cm-bracket {color: #d5d3d5;} .cm-s-hopscotch span.cm-tag {color: #dd464c;} .cm-s-hopscotch span.cm-link {color: #c85e7c;} .cm-s-hopscotch .CodeMirror-matchingbracket { text-decoration: underline; color: white !important;} .cm-s-hopscotch .CodeMirror-activeline-background { background: #302020; } PK!ý�ÃÃGfile-manager-advanced/application/library/codemirror/theme/3024-day.cssnu„[µü¤/* Name: 3024 day Author: Jan T. Sott (http://github.com/idleberg) CodeMirror template by Jan T. Sott (https://github.com/idleberg/base16-codemirror) Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) */ .cm-s-3024-day.CodeMirror { background: #f7f7f7; color: #3a3432; } .cm-s-3024-day div.CodeMirror-selected { background: #d6d5d4; } .cm-s-3024-day .CodeMirror-line::selection, .cm-s-3024-day .CodeMirror-line > span::selection, .cm-s-3024-day .CodeMirror-line > span > span::selection { background: #d6d5d4; } .cm-s-3024-day .CodeMirror-line::-moz-selection, .cm-s-3024-day .CodeMirror-line > span::-moz-selection, .cm-s-3024-day .CodeMirror-line > span > span::selection { background: #d9d9d9; } .cm-s-3024-day .CodeMirror-gutters { background: #f7f7f7; border-right: 0px; } .cm-s-3024-day .CodeMirror-guttermarker { color: #db2d20; } .cm-s-3024-day .CodeMirror-guttermarker-subtle { color: #807d7c; } .cm-s-3024-day .CodeMirror-linenumber { color: #807d7c; } .cm-s-3024-day .CodeMirror-cursor { border-left: 1px solid #5c5855; } .cm-s-3024-day span.cm-comment { color: #cdab53; } .cm-s-3024-day span.cm-atom { color: #a16a94; } .cm-s-3024-day span.cm-number { color: #a16a94; } .cm-s-3024-day span.cm-property, .cm-s-3024-day span.cm-attribute { color: #01a252; } .cm-s-3024-day span.cm-keyword { color: #db2d20; } .cm-s-3024-day span.cm-string { color: #fded02; } .cm-s-3024-day span.cm-variable { color: #01a252; } .cm-s-3024-day span.cm-variable-2 { color: #01a0e4; } .cm-s-3024-day span.cm-def { color: #e8bbd0; } .cm-s-3024-day span.cm-bracket { color: #3a3432; } .cm-s-3024-day span.cm-tag { color: #db2d20; } .cm-s-3024-day span.cm-link { color: #a16a94; } .cm-s-3024-day span.cm-error { background: #db2d20; color: #5c5855; } .cm-s-3024-day .CodeMirror-activeline-background { background: #e8f2ff; } .cm-s-3024-day .CodeMirror-matchingbracket { text-decoration: underline; color: #a16a94 !important; } PK!Œ…3rÓ Ó Gfile-manager-advanced/application/library/codemirror/theme/icecoder.cssnu„[µü¤/* ICEcoder default theme by Matt Pass, used in code editor available at https://icecoder.net */ .cm-s-icecoder { color: #666; background: #1d1d1b; } .cm-s-icecoder span.cm-keyword { color: #eee; font-weight:bold; } /* off-white 1 */ .cm-s-icecoder span.cm-atom { color: #e1c76e; } /* yellow */ .cm-s-icecoder span.cm-number { color: #6cb5d9; } /* blue */ .cm-s-icecoder span.cm-def { color: #b9ca4a; } /* green */ .cm-s-icecoder span.cm-variable { color: #6cb5d9; } /* blue */ .cm-s-icecoder span.cm-variable-2 { color: #cc1e5c; } /* pink */ .cm-s-icecoder span.cm-variable-3, .cm-s-icecoder span.cm-type { color: #f9602c; } /* orange */ .cm-s-icecoder span.cm-property { color: #eee; } /* off-white 1 */ .cm-s-icecoder span.cm-operator { color: #9179bb; } /* purple */ .cm-s-icecoder span.cm-comment { color: #97a3aa; } /* grey-blue */ .cm-s-icecoder span.cm-string { color: #b9ca4a; } /* green */ .cm-s-icecoder span.cm-string-2 { color: #6cb5d9; } /* blue */ .cm-s-icecoder span.cm-meta { color: #555; } /* grey */ .cm-s-icecoder span.cm-qualifier { color: #555; } /* grey */ .cm-s-icecoder span.cm-builtin { color: #214e7b; } /* bright blue */ .cm-s-icecoder span.cm-bracket { color: #cc7; } /* grey-yellow */ .cm-s-icecoder span.cm-tag { color: #e8e8e8; } /* off-white 2 */ .cm-s-icecoder span.cm-attribute { color: #099; } /* teal */ .cm-s-icecoder span.cm-header { color: #6a0d6a; } /* purple-pink */ .cm-s-icecoder span.cm-quote { color: #186718; } /* dark green */ .cm-s-icecoder span.cm-hr { color: #888; } /* mid-grey */ .cm-s-icecoder span.cm-link { color: #e1c76e; } /* yellow */ .cm-s-icecoder span.cm-error { color: #d00; } /* red */ .cm-s-icecoder .CodeMirror-cursor { border-left: 1px solid white; } .cm-s-icecoder div.CodeMirror-selected { color: #fff; background: #037; } .cm-s-icecoder .CodeMirror-gutters { background: #1d1d1b; min-width: 41px; border-right: 0; } .cm-s-icecoder .CodeMirror-linenumber { color: #555; cursor: default; } .cm-s-icecoder .CodeMirror-matchingbracket { color: #fff !important; background: #555 !important; } .cm-s-icecoder .CodeMirror-activeline-background { background: #000; } PK!tTÖˆ ˆ Hfile-manager-advanced/application/library/codemirror/theme/shadowfox.cssnu„[µü¤/* Name: shadowfox Author: overdodactyl (http://github.com/overdodactyl) Original shadowfox color scheme by Firefox */ .cm-s-shadowfox.CodeMirror { background: #2a2a2e; color: #b1b1b3; } .cm-s-shadowfox div.CodeMirror-selected { background: #353B48; } .cm-s-shadowfox .CodeMirror-line::selection, .cm-s-shadowfox .CodeMirror-line > span::selection, .cm-s-shadowfox .CodeMirror-line > span > span::selection { background: #353B48; } .cm-s-shadowfox .CodeMirror-line::-moz-selection, .cm-s-shadowfox .CodeMirror-line > span::-moz-selection, .cm-s-shadowfox .CodeMirror-line > span > span::-moz-selection { background: #353B48; } .cm-s-shadowfox .CodeMirror-gutters { background: #0c0c0d ; border-right: 1px solid #0c0c0d; } .cm-s-shadowfox .CodeMirror-guttermarker { color: #555; } .cm-s-shadowfox .CodeMirror-linenumber { color: #939393; } .cm-s-shadowfox .CodeMirror-cursor { border-left: 1px solid #fff; } .cm-s-shadowfox span.cm-comment { color: #939393; } .cm-s-shadowfox span.cm-atom { color: #FF7DE9; } .cm-s-shadowfox span.cm-quote { color: #FF7DE9; } .cm-s-shadowfox span.cm-builtin { color: #FF7DE9; } .cm-s-shadowfox span.cm-attribute { color: #FF7DE9; } .cm-s-shadowfox span.cm-keyword { color: #FF7DE9; } .cm-s-shadowfox span.cm-error { color: #FF7DE9; } .cm-s-shadowfox span.cm-number { color: #6B89FF; } .cm-s-shadowfox span.cm-string { color: #6B89FF; } .cm-s-shadowfox span.cm-string-2 { color: #6B89FF; } .cm-s-shadowfox span.cm-meta { color: #939393; } .cm-s-shadowfox span.cm-hr { color: #939393; } .cm-s-shadowfox span.cm-header { color: #75BFFF; } .cm-s-shadowfox span.cm-qualifier { color: #75BFFF; } .cm-s-shadowfox span.cm-variable-2 { color: #75BFFF; } .cm-s-shadowfox span.cm-property { color: #86DE74; } .cm-s-shadowfox span.cm-def { color: #75BFFF; } .cm-s-shadowfox span.cm-bracket { color: #75BFFF; } .cm-s-shadowfox span.cm-tag { color: #75BFFF; } .cm-s-shadowfox span.cm-link:visited { color: #75BFFF; } .cm-s-shadowfox span.cm-variable { color: #B98EFF; } .cm-s-shadowfox span.cm-variable-3 { color: #d7d7db; } .cm-s-shadowfox span.cm-link { color: #737373; } .cm-s-shadowfox span.cm-operator { color: #b1b1b3; } .cm-s-shadowfox span.cm-special { color: #d7d7db; } .cm-s-shadowfox .CodeMirror-activeline-background { background: rgba(185, 215, 253, .15) } .cm-s-shadowfox .CodeMirror-matchingbracket { outline: solid 1px rgba(255, 255, 255, .25); color: white !important; } PK!-tS±±Efile-manager-advanced/application/library/codemirror/theme/abcdef.cssnu„[µü¤.cm-s-abcdef.CodeMirror { background: #0f0f0f; color: #defdef; } .cm-s-abcdef div.CodeMirror-selected { background: #515151; } .cm-s-abcdef .CodeMirror-line::selection, .cm-s-abcdef .CodeMirror-line > span::selection, .cm-s-abcdef .CodeMirror-line > span > span::selection { background: rgba(56, 56, 56, 0.99); } .cm-s-abcdef .CodeMirror-line::-moz-selection, .cm-s-abcdef .CodeMirror-line > span::-moz-selection, .cm-s-abcdef .CodeMirror-line > span > span::-moz-selection { background: rgba(56, 56, 56, 0.99); } .cm-s-abcdef .CodeMirror-gutters { background: #555; border-right: 2px solid #314151; } .cm-s-abcdef .CodeMirror-guttermarker { color: #222; } .cm-s-abcdef .CodeMirror-guttermarker-subtle { color: azure; } .cm-s-abcdef .CodeMirror-linenumber { color: #FFFFFF; } .cm-s-abcdef .CodeMirror-cursor { border-left: 1px solid #00FF00; } .cm-s-abcdef span.cm-keyword { color: darkgoldenrod; font-weight: bold; } .cm-s-abcdef span.cm-atom { color: #77F; } .cm-s-abcdef span.cm-number { color: violet; } .cm-s-abcdef span.cm-def { color: #fffabc; } .cm-s-abcdef span.cm-variable { color: #abcdef; } .cm-s-abcdef span.cm-variable-2 { color: #cacbcc; } .cm-s-abcdef span.cm-variable-3, .cm-s-abcdef span.cm-type { color: #def; } .cm-s-abcdef span.cm-property { color: #fedcba; } .cm-s-abcdef span.cm-operator { color: #ff0; } .cm-s-abcdef span.cm-comment { color: #7a7b7c; font-style: italic;} .cm-s-abcdef span.cm-string { color: #2b4; } .cm-s-abcdef span.cm-meta { color: #C9F; } .cm-s-abcdef span.cm-qualifier { color: #FFF700; } .cm-s-abcdef span.cm-builtin { color: #30aabc; } .cm-s-abcdef span.cm-bracket { color: #8a8a8a; } .cm-s-abcdef span.cm-tag { color: #FFDD44; } .cm-s-abcdef span.cm-attribute { color: #DDFF00; } .cm-s-abcdef span.cm-error { color: #FF0000; } .cm-s-abcdef span.cm-header { color: aquamarine; font-weight: bold; } .cm-s-abcdef span.cm-link { color: blueviolet; } .cm-s-abcdef .CodeMirror-activeline-background { background: #314151; } PK!9y¨ggNfile-manager-advanced/application/library/codemirror/theme/ambiance-mobile.cssnu„[µü¤.cm-s-ambiance.CodeMirror { -webkit-box-shadow: none; -moz-box-shadow: none; box-shadow: none; } PK!�'³Lfile-manager-advanced/application/library/codemirror/theme/paraiso-light.cssnu„[µü¤/* Name: Paraíso (Light) Author: Jan T. Sott Color scheme by Jan T. Sott (https://github.com/idleberg/Paraiso-CodeMirror) Inspired by the art of Rubens LP (http://www.rubenslp.com.br) */ .cm-s-paraiso-light.CodeMirror { background: #e7e9db; color: #41323f; } .cm-s-paraiso-light div.CodeMirror-selected { background: #b9b6b0; } .cm-s-paraiso-light .CodeMirror-line::selection, .cm-s-paraiso-light .CodeMirror-line > span::selection, .cm-s-paraiso-light .CodeMirror-line > span > span::selection { background: #b9b6b0; } .cm-s-paraiso-light .CodeMirror-line::-moz-selection, .cm-s-paraiso-light .CodeMirror-line > span::-moz-selection, .cm-s-paraiso-light .CodeMirror-line > span > span::-moz-selection { background: #b9b6b0; } .cm-s-paraiso-light .CodeMirror-gutters { background: #e7e9db; border-right: 0px; } .cm-s-paraiso-light .CodeMirror-guttermarker { color: black; } .cm-s-paraiso-light .CodeMirror-guttermarker-subtle { color: #8d8687; } .cm-s-paraiso-light .CodeMirror-linenumber { color: #8d8687; } .cm-s-paraiso-light .CodeMirror-cursor { border-left: 1px solid #776e71; } .cm-s-paraiso-light span.cm-comment { color: #e96ba8; } .cm-s-paraiso-light span.cm-atom { color: #815ba4; } .cm-s-paraiso-light span.cm-number { color: #815ba4; } .cm-s-paraiso-light span.cm-property, .cm-s-paraiso-light span.cm-attribute { color: #48b685; } .cm-s-paraiso-light span.cm-keyword { color: #ef6155; } .cm-s-paraiso-light span.cm-string { color: #fec418; } .cm-s-paraiso-light span.cm-variable { color: #48b685; } .cm-s-paraiso-light span.cm-variable-2 { color: #06b6ef; } .cm-s-paraiso-light span.cm-def { color: #f99b15; } .cm-s-paraiso-light span.cm-bracket { color: #41323f; } .cm-s-paraiso-light span.cm-tag { color: #ef6155; } .cm-s-paraiso-light span.cm-link { color: #815ba4; } .cm-s-paraiso-light span.cm-error { background: #ef6155; color: #776e71; } .cm-s-paraiso-light .CodeMirror-activeline-background { background: #CFD1C4; } .cm-s-paraiso-light .CodeMirror-matchingbracket { text-decoration: underline; color: white !important; } PK!·7F°°Cfile-manager-advanced/application/library/codemirror/theme/neat.cssnu„[µü¤.cm-s-neat span.cm-comment { color: #a86; } .cm-s-neat span.cm-keyword { line-height: 1em; font-weight: bold; color: blue; } .cm-s-neat span.cm-string { color: #a22; } .cm-s-neat span.cm-builtin { line-height: 1em; font-weight: bold; color: #077; } .cm-s-neat span.cm-special { line-height: 1em; font-weight: bold; color: #0aa; } .cm-s-neat span.cm-variable { color: black; } .cm-s-neat span.cm-number, .cm-s-neat span.cm-atom { color: #3a3; } .cm-s-neat span.cm-meta { color: #555; } .cm-s-neat span.cm-link { color: #3a3; } .cm-s-neat .CodeMirror-activeline-background { background: #e8f2ff; } .cm-s-neat .CodeMirror-matchingbracket { outline:1px solid grey; color:black !important; } PK!IÔ^‡ ‡ Vfile-manager-advanced/application/library/codemirror/theme/tomorrow-night-eighties.cssnu„[µü¤/* Name: Tomorrow Night - Eighties Author: Chris Kempson CodeMirror template by Jan T. Sott (https://github.com/idleberg/base16-codemirror) Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) */ .cm-s-tomorrow-night-eighties.CodeMirror { background: #000000; color: #CCCCCC; } .cm-s-tomorrow-night-eighties div.CodeMirror-selected { background: #2D2D2D; } .cm-s-tomorrow-night-eighties .CodeMirror-line::selection, .cm-s-tomorrow-night-eighties .CodeMirror-line > span::selection, .cm-s-tomorrow-night-eighties .CodeMirror-line > span > span::selection { background: rgba(45, 45, 45, 0.99); } .cm-s-tomorrow-night-eighties .CodeMirror-line::-moz-selection, .cm-s-tomorrow-night-eighties .CodeMirror-line > span::-moz-selection, .cm-s-tomorrow-night-eighties .CodeMirror-line > span > span::-moz-selection { background: rgba(45, 45, 45, 0.99); } .cm-s-tomorrow-night-eighties .CodeMirror-gutters { background: #000000; border-right: 0px; } .cm-s-tomorrow-night-eighties .CodeMirror-guttermarker { color: #f2777a; } .cm-s-tomorrow-night-eighties .CodeMirror-guttermarker-subtle { color: #777; } .cm-s-tomorrow-night-eighties .CodeMirror-linenumber { color: #515151; } .cm-s-tomorrow-night-eighties .CodeMirror-cursor { border-left: 1px solid #6A6A6A; } .cm-s-tomorrow-night-eighties span.cm-comment { color: #d27b53; } .cm-s-tomorrow-night-eighties span.cm-atom { color: #a16a94; } .cm-s-tomorrow-night-eighties span.cm-number { color: #a16a94; } .cm-s-tomorrow-night-eighties span.cm-property, .cm-s-tomorrow-night-eighties span.cm-attribute { color: #99cc99; } .cm-s-tomorrow-night-eighties span.cm-keyword { color: #f2777a; } .cm-s-tomorrow-night-eighties span.cm-string { color: #ffcc66; } .cm-s-tomorrow-night-eighties span.cm-variable { color: #99cc99; } .cm-s-tomorrow-night-eighties span.cm-variable-2 { color: #6699cc; } .cm-s-tomorrow-night-eighties span.cm-def { color: #f99157; } .cm-s-tomorrow-night-eighties span.cm-bracket { color: #CCCCCC; } .cm-s-tomorrow-night-eighties span.cm-tag { color: #f2777a; } .cm-s-tomorrow-night-eighties span.cm-link { color: #a16a94; } .cm-s-tomorrow-night-eighties span.cm-error { background: #f2777a; color: #6A6A6A; } .cm-s-tomorrow-night-eighties .CodeMirror-activeline-background { background: #343600; } .cm-s-tomorrow-night-eighties .CodeMirror-matchingbracket { text-decoration: underline; color: white !important; } PK!`‘ØøééTfile-manager-advanced/application/library/codemirror/theme/tomorrow-night-bright.cssnu„[µü¤/* Name: Tomorrow Night - Bright Author: Chris Kempson Port done by Gerard Braad */ .cm-s-tomorrow-night-bright.CodeMirror { background: #000000; color: #eaeaea; } .cm-s-tomorrow-night-bright div.CodeMirror-selected { background: #424242; } .cm-s-tomorrow-night-bright .CodeMirror-gutters { background: #000000; border-right: 0px; } .cm-s-tomorrow-night-bright .CodeMirror-guttermarker { color: #e78c45; } .cm-s-tomorrow-night-bright .CodeMirror-guttermarker-subtle { color: #777; } .cm-s-tomorrow-night-bright .CodeMirror-linenumber { color: #424242; } .cm-s-tomorrow-night-bright .CodeMirror-cursor { border-left: 1px solid #6A6A6A; } .cm-s-tomorrow-night-bright span.cm-comment { color: #d27b53; } .cm-s-tomorrow-night-bright span.cm-atom { color: #a16a94; } .cm-s-tomorrow-night-bright span.cm-number { color: #a16a94; } .cm-s-tomorrow-night-bright span.cm-property, .cm-s-tomorrow-night-bright span.cm-attribute { color: #99cc99; } .cm-s-tomorrow-night-bright span.cm-keyword { color: #d54e53; } .cm-s-tomorrow-night-bright span.cm-string { color: #e7c547; } .cm-s-tomorrow-night-bright span.cm-variable { color: #b9ca4a; } .cm-s-tomorrow-night-bright span.cm-variable-2 { color: #7aa6da; } .cm-s-tomorrow-night-bright span.cm-def { color: #e78c45; } .cm-s-tomorrow-night-bright span.cm-bracket { color: #eaeaea; } .cm-s-tomorrow-night-bright span.cm-tag { color: #d54e53; } .cm-s-tomorrow-night-bright span.cm-link { color: #a16a94; } .cm-s-tomorrow-night-bright span.cm-error { background: #d54e53; color: #6A6A6A; } .cm-s-tomorrow-night-bright .CodeMirror-activeline-background { background: #2a2a2a; } .cm-s-tomorrow-night-bright .CodeMirror-matchingbracket { text-decoration: underline; color: white !important; } PK!Æ€¿‹‹Ifile-manager-advanced/application/library/codemirror/theme/blackboard.cssnu„[µü¤/* Port of TextMate's Blackboard theme */ .cm-s-blackboard.CodeMirror { background: #0C1021; color: #F8F8F8; } .cm-s-blackboard div.CodeMirror-selected { background: #253B76; } .cm-s-blackboard .CodeMirror-line::selection, .cm-s-blackboard .CodeMirror-line > span::selection, .cm-s-blackboard .CodeMirror-line > span > span::selection { background: rgba(37, 59, 118, .99); } .cm-s-blackboard .CodeMirror-line::-moz-selection, .cm-s-blackboard .CodeMirror-line > span::-moz-selection, .cm-s-blackboard .CodeMirror-line > span > span::-moz-selection { background: rgba(37, 59, 118, .99); } .cm-s-blackboard .CodeMirror-gutters { background: #0C1021; border-right: 0; } .cm-s-blackboard .CodeMirror-guttermarker { color: #FBDE2D; } .cm-s-blackboard .CodeMirror-guttermarker-subtle { color: #888; } .cm-s-blackboard .CodeMirror-linenumber { color: #888; } .cm-s-blackboard .CodeMirror-cursor { border-left: 1px solid #A7A7A7; } .cm-s-blackboard .cm-keyword { color: #FBDE2D; } .cm-s-blackboard .cm-atom { color: #D8FA3C; } .cm-s-blackboard .cm-number { color: #D8FA3C; } .cm-s-blackboard .cm-def { color: #8DA6CE; } .cm-s-blackboard .cm-variable { color: #FF6400; } .cm-s-blackboard .cm-operator { color: #FBDE2D; } .cm-s-blackboard .cm-comment { color: #AEAEAE; } .cm-s-blackboard .cm-string { color: #61CE3C; } .cm-s-blackboard .cm-string-2 { color: #61CE3C; } .cm-s-blackboard .cm-meta { color: #D8FA3C; } .cm-s-blackboard .cm-builtin { color: #8DA6CE; } .cm-s-blackboard .cm-tag { color: #8DA6CE; } .cm-s-blackboard .cm-attribute { color: #8DA6CE; } .cm-s-blackboard .cm-header { color: #FF6400; } .cm-s-blackboard .cm-hr { color: #AEAEAE; } .cm-s-blackboard .cm-link { color: #8DA6CE; } .cm-s-blackboard .cm-error { background: #9D1E15; color: #F8F8F8; } .cm-s-blackboard .CodeMirror-activeline-background { background: #3C3636; } .cm-s-blackboard .CodeMirror-matchingbracket { outline:1px solid grey;color:white !important; } PK!àÎ<壣Ffile-manager-advanced/application/library/codemirror/theme/eclipse.cssnu„[µü¤.cm-s-eclipse span.cm-meta { color: #FF1717; } .cm-s-eclipse span.cm-keyword { line-height: 1em; font-weight: bold; color: #7F0055; } .cm-s-eclipse span.cm-atom { color: #219; } .cm-s-eclipse span.cm-number { color: #164; } .cm-s-eclipse span.cm-def { color: #00f; } .cm-s-eclipse span.cm-variable { color: black; } .cm-s-eclipse span.cm-variable-2 { color: #0000C0; } .cm-s-eclipse span.cm-variable-3, .cm-s-eclipse span.cm-type { color: #0000C0; } .cm-s-eclipse span.cm-property { color: black; } .cm-s-eclipse span.cm-operator { color: black; } .cm-s-eclipse span.cm-comment { color: #3F7F5F; } .cm-s-eclipse span.cm-string { color: #2A00FF; } .cm-s-eclipse span.cm-string-2 { color: #f50; } .cm-s-eclipse span.cm-qualifier { color: #555; } .cm-s-eclipse span.cm-builtin { color: #30a; } .cm-s-eclipse span.cm-bracket { color: #cc7; } .cm-s-eclipse span.cm-tag { color: #170; } .cm-s-eclipse span.cm-attribute { color: #00c; } .cm-s-eclipse span.cm-link { color: #219; } .cm-s-eclipse span.cm-error { color: #f00; } .cm-s-eclipse .CodeMirror-activeline-background { background: #e8f2ff; } .cm-s-eclipse .CodeMirror-matchingbracket { outline:1px solid grey; color:black !important; } PK!‰Ì’õˆ ˆ Kfile-manager-advanced/application/library/codemirror/theme/oceanic-next.cssnu„[µü¤/* Name: oceanic-next Author: Filype Pereira (https://github.com/fpereira1) Original oceanic-next color scheme by Dmitri Voronianski (https://github.com/voronianski/oceanic-next-color-scheme) */ .cm-s-oceanic-next.CodeMirror { background: #304148; color: #f8f8f2; } .cm-s-oceanic-next div.CodeMirror-selected { background: rgba(101, 115, 126, 0.33); } .cm-s-oceanic-next .CodeMirror-line::selection, .cm-s-oceanic-next .CodeMirror-line > span::selection, .cm-s-oceanic-next .CodeMirror-line > span > span::selection { background: rgba(101, 115, 126, 0.33); } .cm-s-oceanic-next .CodeMirror-line::-moz-selection, .cm-s-oceanic-next .CodeMirror-line > span::-moz-selection, .cm-s-oceanic-next .CodeMirror-line > span > span::-moz-selection { background: rgba(101, 115, 126, 0.33); } .cm-s-oceanic-next .CodeMirror-gutters { background: #304148; border-right: 10px; } .cm-s-oceanic-next .CodeMirror-guttermarker { color: white; } .cm-s-oceanic-next .CodeMirror-guttermarker-subtle { color: #d0d0d0; } .cm-s-oceanic-next .CodeMirror-linenumber { color: #d0d0d0; } .cm-s-oceanic-next .CodeMirror-cursor { border-left: 1px solid #f8f8f0; } .cm-s-oceanic-next.cm-fat-cursor .CodeMirror-cursor { background-color: #a2a8a175 !important; } .cm-s-oceanic-next .cm-animate-fat-cursor { background-color: #a2a8a175 !important; } .cm-s-oceanic-next span.cm-comment { color: #65737E; } .cm-s-oceanic-next span.cm-atom { color: #C594C5; } .cm-s-oceanic-next span.cm-number { color: #F99157; } .cm-s-oceanic-next span.cm-property { color: #99C794; } .cm-s-oceanic-next span.cm-attribute, .cm-s-oceanic-next span.cm-keyword { color: #C594C5; } .cm-s-oceanic-next span.cm-builtin { color: #66d9ef; } .cm-s-oceanic-next span.cm-string { color: #99C794; } .cm-s-oceanic-next span.cm-variable, .cm-s-oceanic-next span.cm-variable-2, .cm-s-oceanic-next span.cm-variable-3 { color: #f8f8f2; } .cm-s-oceanic-next span.cm-def { color: #6699CC; } .cm-s-oceanic-next span.cm-bracket { color: #5FB3B3; } .cm-s-oceanic-next span.cm-tag { color: #C594C5; } .cm-s-oceanic-next span.cm-header { color: #C594C5; } .cm-s-oceanic-next span.cm-link { color: #C594C5; } .cm-s-oceanic-next span.cm-error { background: #C594C5; color: #f8f8f0; } .cm-s-oceanic-next .CodeMirror-activeline-background { background: rgba(101, 115, 126, 0.33); } .cm-s-oceanic-next .CodeMirror-matchingbracket { text-decoration: underline; color: white !important; } PK!Àð¦Á……Efile-manager-advanced/application/library/codemirror/theme/bespin.cssnu„[µü¤/* Name: Bespin Author: Mozilla / Jan T. Sott CodeMirror template by Jan T. Sott (https://github.com/idleberg/base16-codemirror) Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) */ .cm-s-bespin.CodeMirror {background: #28211c; color: #9d9b97;} .cm-s-bespin div.CodeMirror-selected {background: #59554f !important;} .cm-s-bespin .CodeMirror-gutters {background: #28211c; border-right: 0px;} .cm-s-bespin .CodeMirror-linenumber {color: #666666;} .cm-s-bespin .CodeMirror-cursor {border-left: 1px solid #797977 !important;} .cm-s-bespin span.cm-comment {color: #937121;} .cm-s-bespin span.cm-atom {color: #9b859d;} .cm-s-bespin span.cm-number {color: #9b859d;} .cm-s-bespin span.cm-property, .cm-s-bespin span.cm-attribute {color: #54be0d;} .cm-s-bespin span.cm-keyword {color: #cf6a4c;} .cm-s-bespin span.cm-string {color: #f9ee98;} .cm-s-bespin span.cm-variable {color: #54be0d;} .cm-s-bespin span.cm-variable-2 {color: #5ea6ea;} .cm-s-bespin span.cm-def {color: #cf7d34;} .cm-s-bespin span.cm-error {background: #cf6a4c; color: #797977;} .cm-s-bespin span.cm-bracket {color: #9d9b97;} .cm-s-bespin span.cm-tag {color: #cf6a4c;} .cm-s-bespin span.cm-link {color: #9b859d;} .cm-s-bespin .CodeMirror-matchingbracket { text-decoration: underline; color: white !important;} .cm-s-bespin .CodeMirror-activeline-background { background: #404040; } PK!Õ"ÒÒDfile-manager-advanced/application/library/codemirror/theme/night.cssnu„[µü¤/* Loosely based on the Midnight Textmate theme */ .cm-s-night.CodeMirror { background: #0a001f; color: #f8f8f8; } .cm-s-night div.CodeMirror-selected { background: #447; } .cm-s-night .CodeMirror-line::selection, .cm-s-night .CodeMirror-line > span::selection, .cm-s-night .CodeMirror-line > span > span::selection { background: rgba(68, 68, 119, .99); } .cm-s-night .CodeMirror-line::-moz-selection, .cm-s-night .CodeMirror-line > span::-moz-selection, .cm-s-night .CodeMirror-line > span > span::-moz-selection { background: rgba(68, 68, 119, .99); } .cm-s-night .CodeMirror-gutters { background: #0a001f; border-right: 1px solid #aaa; } .cm-s-night .CodeMirror-guttermarker { color: white; } .cm-s-night .CodeMirror-guttermarker-subtle { color: #bbb; } .cm-s-night .CodeMirror-linenumber { color: #f8f8f8; } .cm-s-night .CodeMirror-cursor { border-left: 1px solid white; } .cm-s-night span.cm-comment { color: #8900d1; } .cm-s-night span.cm-atom { color: #845dc4; } .cm-s-night span.cm-number, .cm-s-night span.cm-attribute { color: #ffd500; } .cm-s-night span.cm-keyword { color: #599eff; } .cm-s-night span.cm-string { color: #37f14a; } .cm-s-night span.cm-meta { color: #7678e2; } .cm-s-night span.cm-variable-2, .cm-s-night span.cm-tag { color: #99b2ff; } .cm-s-night span.cm-variable-3, .cm-s-night span.cm-def, .cm-s-night span.cm-type { color: white; } .cm-s-night span.cm-bracket { color: #8da6ce; } .cm-s-night span.cm-builtin, .cm-s-night span.cm-special { color: #ff9e59; } .cm-s-night span.cm-link { color: #845dc4; } .cm-s-night span.cm-error { color: #9d1e15; } .cm-s-night .CodeMirror-activeline-background { background: #1C005A; } .cm-s-night .CodeMirror-matchingbracket { outline:1px solid grey; color:white !important; } PK!QÚ¾Ù Ù Ffile-manager-advanced/application/library/codemirror/theme/xq-dark.cssnu„[µü¤/* Copyright (C) 2011 by MarkLogic Corporation Author: Mike Brevoort Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ .cm-s-xq-dark.CodeMirror { background: #0a001f; color: #f8f8f8; } .cm-s-xq-dark div.CodeMirror-selected { background: #27007A; } .cm-s-xq-dark .CodeMirror-line::selection, .cm-s-xq-dark .CodeMirror-line > span::selection, .cm-s-xq-dark .CodeMirror-line > span > span::selection { background: rgba(39, 0, 122, 0.99); } .cm-s-xq-dark .CodeMirror-line::-moz-selection, .cm-s-xq-dark .CodeMirror-line > span::-moz-selection, .cm-s-xq-dark .CodeMirror-line > span > span::-moz-selection { background: rgba(39, 0, 122, 0.99); } .cm-s-xq-dark .CodeMirror-gutters { background: #0a001f; border-right: 1px solid #aaa; } .cm-s-xq-dark .CodeMirror-guttermarker { color: #FFBD40; } .cm-s-xq-dark .CodeMirror-guttermarker-subtle { color: #f8f8f8; } .cm-s-xq-dark .CodeMirror-linenumber { color: #f8f8f8; } .cm-s-xq-dark .CodeMirror-cursor { border-left: 1px solid white; } .cm-s-xq-dark span.cm-keyword { color: #FFBD40; } .cm-s-xq-dark span.cm-atom { color: #6C8CD5; } .cm-s-xq-dark span.cm-number { color: #164; } .cm-s-xq-dark span.cm-def { color: #FFF; text-decoration:underline; } .cm-s-xq-dark span.cm-variable { color: #FFF; } .cm-s-xq-dark span.cm-variable-2 { color: #EEE; } .cm-s-xq-dark span.cm-variable-3, .cm-s-xq-dark span.cm-type { color: #DDD; } .cm-s-xq-dark span.cm-property {} .cm-s-xq-dark span.cm-operator {} .cm-s-xq-dark span.cm-comment { color: gray; } .cm-s-xq-dark span.cm-string { color: #9FEE00; } .cm-s-xq-dark span.cm-meta { color: yellow; } .cm-s-xq-dark span.cm-qualifier { color: #FFF700; } .cm-s-xq-dark span.cm-builtin { color: #30a; } .cm-s-xq-dark span.cm-bracket { color: #cc7; } .cm-s-xq-dark span.cm-tag { color: #FFBD40; } .cm-s-xq-dark span.cm-attribute { color: #FFF700; } .cm-s-xq-dark span.cm-error { color: #f00; } .cm-s-xq-dark .CodeMirror-activeline-background { background: #27282E; } .cm-s-xq-dark .CodeMirror-matchingbracket { outline:1px solid grey; color:white !important; } PK!MÇ`B\\Cfile-manager-advanced/application/library/codemirror/theme/yeti.cssnu„[µü¤/* Name: yeti Author: Michael Kaminsky (http://github.com/mkaminsky11) Original yeti color scheme by Jesse Weed (https://github.com/jesseweed/yeti-syntax) */ .cm-s-yeti.CodeMirror { background-color: #ECEAE8 !important; color: #d1c9c0 !important; border: none; } .cm-s-yeti .CodeMirror-gutters { color: #adaba6; background-color: #E5E1DB; border: none; } .cm-s-yeti .CodeMirror-cursor { border-left: solid thin #d1c9c0; } .cm-s-yeti .CodeMirror-linenumber { color: #adaba6; } .cm-s-yeti.CodeMirror-focused div.CodeMirror-selected { background: #DCD8D2; } .cm-s-yeti .CodeMirror-line::selection, .cm-s-yeti .CodeMirror-line > span::selection, .cm-s-yeti .CodeMirror-line > span > span::selection { background: #DCD8D2; } .cm-s-yeti .CodeMirror-line::-moz-selection, .cm-s-yeti .CodeMirror-line > span::-moz-selection, .cm-s-yeti .CodeMirror-line > span > span::-moz-selection { background: #DCD8D2; } .cm-s-yeti span.cm-comment { color: #d4c8be; } .cm-s-yeti span.cm-string, .cm-s-yeti span.cm-string-2 { color: #96c0d8; } .cm-s-yeti span.cm-number { color: #a074c4; } .cm-s-yeti span.cm-variable { color: #55b5db; } .cm-s-yeti span.cm-variable-2 { color: #a074c4; } .cm-s-yeti span.cm-def { color: #55b5db; } .cm-s-yeti span.cm-operator { color: #9fb96e; } .cm-s-yeti span.cm-keyword { color: #9fb96e; } .cm-s-yeti span.cm-atom { color: #a074c4; } .cm-s-yeti span.cm-meta { color: #96c0d8; } .cm-s-yeti span.cm-tag { color: #96c0d8; } .cm-s-yeti span.cm-attribute { color: #9fb96e; } .cm-s-yeti span.cm-qualifier { color: #96c0d8; } .cm-s-yeti span.cm-property { color: #a074c4; } .cm-s-yeti span.cm-builtin { color: #a074c4; } .cm-s-yeti span.cm-variable-3, .cm-s-yeti span.cm-type { color: #96c0d8; } .cm-s-yeti .CodeMirror-activeline-background { background: #E7E4E0; } .cm-s-yeti .CodeMirror-matchingbracket { text-decoration: underline; } PK!}‡6�Kfile-manager-advanced/application/library/codemirror/theme/paraiso-dark.cssnu„[µü¤/* Name: Paraíso (Dark) Author: Jan T. Sott Color scheme by Jan T. Sott (https://github.com/idleberg/Paraiso-CodeMirror) Inspired by the art of Rubens LP (http://www.rubenslp.com.br) */ .cm-s-paraiso-dark.CodeMirror { background: #2f1e2e; color: #b9b6b0; } .cm-s-paraiso-dark div.CodeMirror-selected { background: #41323f; } .cm-s-paraiso-dark .CodeMirror-line::selection, .cm-s-paraiso-dark .CodeMirror-line > span::selection, .cm-s-paraiso-dark .CodeMirror-line > span > span::selection { background: rgba(65, 50, 63, .99); } .cm-s-paraiso-dark .CodeMirror-line::-moz-selection, .cm-s-paraiso-dark .CodeMirror-line > span::-moz-selection, .cm-s-paraiso-dark .CodeMirror-line > span > span::-moz-selection { background: rgba(65, 50, 63, .99); } .cm-s-paraiso-dark .CodeMirror-gutters { background: #2f1e2e; border-right: 0px; } .cm-s-paraiso-dark .CodeMirror-guttermarker { color: #ef6155; } .cm-s-paraiso-dark .CodeMirror-guttermarker-subtle { color: #776e71; } .cm-s-paraiso-dark .CodeMirror-linenumber { color: #776e71; } .cm-s-paraiso-dark .CodeMirror-cursor { border-left: 1px solid #8d8687; } .cm-s-paraiso-dark span.cm-comment { color: #e96ba8; } .cm-s-paraiso-dark span.cm-atom { color: #815ba4; } .cm-s-paraiso-dark span.cm-number { color: #815ba4; } .cm-s-paraiso-dark span.cm-property, .cm-s-paraiso-dark span.cm-attribute { color: #48b685; } .cm-s-paraiso-dark span.cm-keyword { color: #ef6155; } .cm-s-paraiso-dark span.cm-string { color: #fec418; } .cm-s-paraiso-dark span.cm-variable { color: #48b685; } .cm-s-paraiso-dark span.cm-variable-2 { color: #06b6ef; } .cm-s-paraiso-dark span.cm-def { color: #f99b15; } .cm-s-paraiso-dark span.cm-bracket { color: #b9b6b0; } .cm-s-paraiso-dark span.cm-tag { color: #ef6155; } .cm-s-paraiso-dark span.cm-link { color: #815ba4; } .cm-s-paraiso-dark span.cm-error { background: #ef6155; color: #8d8687; } .cm-s-paraiso-dark .CodeMirror-activeline-background { background: #4D344A; } .cm-s-paraiso-dark .CodeMirror-matchingbracket { text-decoration: underline; color: white !important; } PK!Ü­›±ôôJfile-manager-advanced/application/library/codemirror/theme/base16-dark.cssnu„[µü¤/* Name: Base16 Default Dark Author: Chris Kempson (http://chriskempson.com) CodeMirror template by Jan T. Sott (https://github.com/idleberg/base16-codemirror) Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) */ .cm-s-base16-dark.CodeMirror { background: #151515; color: #e0e0e0; } .cm-s-base16-dark div.CodeMirror-selected { background: #303030; } .cm-s-base16-dark .CodeMirror-line::selection, .cm-s-base16-dark .CodeMirror-line > span::selection, .cm-s-base16-dark .CodeMirror-line > span > span::selection { background: rgba(48, 48, 48, .99); } .cm-s-base16-dark .CodeMirror-line::-moz-selection, .cm-s-base16-dark .CodeMirror-line > span::-moz-selection, .cm-s-base16-dark .CodeMirror-line > span > span::-moz-selection { background: rgba(48, 48, 48, .99); } .cm-s-base16-dark .CodeMirror-gutters { background: #151515; border-right: 0px; } .cm-s-base16-dark .CodeMirror-guttermarker { color: #ac4142; } .cm-s-base16-dark .CodeMirror-guttermarker-subtle { color: #505050; } .cm-s-base16-dark .CodeMirror-linenumber { color: #505050; } .cm-s-base16-dark .CodeMirror-cursor { border-left: 1px solid #b0b0b0; } .cm-s-base16-dark.cm-fat-cursor .CodeMirror-cursor { background-color: #8e8d8875 !important; } .cm-s-base16-dark .cm-animate-fat-cursor { background-color: #8e8d8875 !important; } .cm-s-base16-dark span.cm-comment { color: #8f5536; } .cm-s-base16-dark span.cm-atom { color: #aa759f; } .cm-s-base16-dark span.cm-number { color: #aa759f; } .cm-s-base16-dark span.cm-property, .cm-s-base16-dark span.cm-attribute { color: #90a959; } .cm-s-base16-dark span.cm-keyword { color: #ac4142; } .cm-s-base16-dark span.cm-string { color: #f4bf75; } .cm-s-base16-dark span.cm-variable { color: #90a959; } .cm-s-base16-dark span.cm-variable-2 { color: #6a9fb5; } .cm-s-base16-dark span.cm-def { color: #d28445; } .cm-s-base16-dark span.cm-bracket { color: #e0e0e0; } .cm-s-base16-dark span.cm-tag { color: #ac4142; } .cm-s-base16-dark span.cm-link { color: #aa759f; } .cm-s-base16-dark span.cm-error { background: #ac4142; color: #b0b0b0; } .cm-s-base16-dark .CodeMirror-activeline-background { background: #202020; } .cm-s-base16-dark .CodeMirror-matchingbracket { text-decoration: underline; color: white !important; } PK!E1ÞÂ}g}gGfile-manager-advanced/application/library/codemirror/theme/ambiance.cssnu„[µü¤/* ambiance theme for codemirror */ /* Color scheme */ .cm-s-ambiance .cm-header { color: blue; } .cm-s-ambiance .cm-quote { color: #24C2C7; } .cm-s-ambiance .cm-keyword { color: #cda869; } .cm-s-ambiance .cm-atom { color: #CF7EA9; } .cm-s-ambiance .cm-number { color: #78CF8A; } .cm-s-ambiance .cm-def { color: #aac6e3; } .cm-s-ambiance .cm-variable { color: #ffb795; } .cm-s-ambiance .cm-variable-2 { color: #eed1b3; } .cm-s-ambiance .cm-variable-3, .cm-s-ambiance .cm-type { color: #faded3; } .cm-s-ambiance .cm-property { color: #eed1b3; } .cm-s-ambiance .cm-operator { color: #fa8d6a; } .cm-s-ambiance .cm-comment { color: #555; font-style:italic; } .cm-s-ambiance .cm-string { color: #8f9d6a; } .cm-s-ambiance .cm-string-2 { color: #9d937c; } .cm-s-ambiance .cm-meta { color: #D2A8A1; } .cm-s-ambiance .cm-qualifier { color: yellow; } .cm-s-ambiance .cm-builtin { color: #9999cc; } .cm-s-ambiance .cm-bracket { color: #24C2C7; } .cm-s-ambiance .cm-tag { color: #fee4ff; } .cm-s-ambiance .cm-attribute { color: #9B859D; } .cm-s-ambiance .cm-hr { color: pink; } .cm-s-ambiance .cm-link { color: #F4C20B; } .cm-s-ambiance .cm-special { color: #FF9D00; } .cm-s-ambiance .cm-error { color: #AF2018; } .cm-s-ambiance .CodeMirror-matchingbracket { color: #0f0; } .cm-s-ambiance .CodeMirror-nonmatchingbracket { color: #f22; } .cm-s-ambiance div.CodeMirror-selected { background: rgba(255, 255, 255, 0.15); } .cm-s-ambiance.CodeMirror-focused div.CodeMirror-selected { background: rgba(255, 255, 255, 0.10); } .cm-s-ambiance .CodeMirror-line::selection, .cm-s-ambiance .CodeMirror-line > span::selection, .cm-s-ambiance .CodeMirror-line > span > span::selection { background: rgba(255, 255, 255, 0.10); } .cm-s-ambiance .CodeMirror-line::-moz-selection, .cm-s-ambiance .CodeMirror-line > span::-moz-selection, .cm-s-ambiance .CodeMirror-line > span > span::-moz-selection { background: rgba(255, 255, 255, 0.10); } /* Editor styling */ .cm-s-ambiance.CodeMirror { line-height: 1.40em; color: #E6E1DC; background-color: #202020; -webkit-box-shadow: inset 0 0 10px black; -moz-box-shadow: inset 0 0 10px black; box-shadow: inset 0 0 10px black; } .cm-s-ambiance .CodeMirror-gutters { background: #3D3D3D; border-right: 1px solid #4D4D4D; box-shadow: 0 10px 20px black; } .cm-s-ambiance .CodeMirror-linenumber { text-shadow: 0px 1px 1px #4d4d4d; color: #111; padding: 0 5px; } .cm-s-ambiance .CodeMirror-guttermarker { color: #aaa; } .cm-s-ambiance .CodeMirror-guttermarker-subtle { color: #111; } .cm-s-ambiance .CodeMirror-cursor { border-left: 1px solid #7991E8; } .cm-s-ambiance .CodeMirror-activeline-background { background: none repeat scroll 0% 0% rgba(255, 255, 255, 0.031); } .cm-s-ambiance.CodeMirror, .cm-s-ambiance .CodeMirror-gutters { background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAADICAQAAAAHUWYVAABFFUlEQVQYGbzBCeDVU/74/6fj9HIcx/FRHx9JCFmzMyGRURhLZIkUsoeRfUjS2FNDtr6WkMhO9sm+S8maJfu+Jcsg+/o/c+Z4z/t97/vezy3z+z8ekGlnYICG/o7gdk+wmSHZ1z4pJItqapjoKXWahm8NmV6eOTbWUOp6/6a/XIg6GQqmenJ2lDHyvCFZ2cBDbmtHA043VFhHwXxClWmeYAdLhV00Bd85go8VmaFCkbVkzlQENzfBDZ5gtN7HwF0KDrTwJ0dypSOzpaKCMwQHKTIreYIxlmhXTzTWkVm+LTynZhiSBT3RZQ7aGfjGEd3qyXQ1FDymqbKxpspERQN2MiRjNZlFFQXfCNFm9nM1zpAsoYjmtRTc5ajwuaXc5xrWskT97RaKzAGe5ARHhVUsDbjKklziiX5WROcJwSNCNI+9w1Jwv4Zb2r7lCMZ4oq5C0EdTx+2GzNuKpJ+iFf38JEWkHJn9DNF7mmBDITrWEg0VWL3pHU20tSZnuqWu+R3BtYa8XxV1HO7GyD32UkOpL/yDloINFTmvtId+nmAjxRw40VMwVKiwrKLE4bK5UOVntYwhOcSSXKrJHKPJedocpGjVz/ZMIbnYUPB10/eKCrs5apqpgVmWzBYWpmtKHecJPjaUuEgRDDaU0oZghCJ6zNMQ5ZhDYx05r5v2muQdM0EILtXUsaKiQX9WMEUotagQzFbUNN6NUPC2nm5pxEWGCjMc3GdJHjSU2kORLK/JGSrkfGEIjncU/CYUnOipoYemwj8tST9NsJmB7TUVXtbUtXATJVZXBMvYeTXJfobgJUPmGMP/yFaWonaa6BcFO3nqcIqCozSZoZoSr1g4zJOzuyGnxTEX3lUEJ7WcZgme8ddaWvWJo2AJR9DZU3CUIbhCSG6ybSwN6qtJVnCU2svDTP2ZInOw2cBTrqtQahtNZn9NcJ4l2NaSmSkkP1noZWnVwkLmdUPOwLZEwy2Z3S3R+4rIG9hcbpPXHFVWcQdZkn2FOta3cKWQnNRC5g1LsJah4GCzSVsKnCOY5OAFRTBekyyryeyilhFKva75r4Mc0aWanGEaThcy31s439KKxTzJYY5WTHPU1FtIHjQU3Oip4xlNzj/lBw23dYZVliQa7WAXf4shetcQfatI+jWRDBPmyNeW6A1P5kdDgyYJlba0BIM8BZu1JfrFwItyjcAMR3K0BWOIrtMEXyhyrlVEx3ui5dUBjmB/Q3CXW85R4mBD0s7B+4q5tKUjOlb9qqmhi5AZ6GFIC5HXtOobdYGlVdMVbNJ8toNTFcHxnoL+muBagcctjWnbNMuR00uI7nQESwg5q2qqrKWIfrNUmeQocY6HuyxJV02wj36w00yhpmUFenv4p6fUkZYqLyuinx2RGOjhCXYyJF84oiU00YMOOhhquNdfbOB7gU88pY4xJO8LVdp6/q2voeB4R04vIdhSE40xZObx1HGGJ/ja0LBthFInKaLPPFzuCaYaoj8JjPME8yoyxo6zlBqkiUZYgq00OYMswbWO5NGmq+xhipxHLRW29ARjNKXO0wRnear8XSg4XFPLKEPUS1GqvyLwiuBUoa7zpZ0l5xxFwWmWZC1H5h5FwU8eQ7K+g8UcVY6TMQreVQT/8uQ8Z+ALIXnSEa2pYZQneE9RZbSBNYXfWYJzW/h/4j4Dp1tYVcFIC5019Vyi4ThPqSFCzjGWaHQTBU8q6vrVwgxP9Lkm840imWKpcLCjYTtrKuwvsKSnrvHCXGkSMk9p6lhckfRpIeis+N2PiszT+mFLspyGleUhDwcLrZqmyeylxwjBcKHEapqkmyangyLZRVOijwOtCY5SsG5zL0OwlCJ4y5KznF3EUNDDrinwiyLZRzOXtlBbK5ITHFGLp8Q0R6ab6mS7enI2cFrxOyHvOCFaT1HThS1krjCwqWeurCkk+willhCC+RSZnRXBiZaC5RXRIZYKp2lyfrHwiKPKR0JDzrdU2EFgpidawlFDR6FgXUMNa+g1FY3bUQh2cLCwosRdnuQTS/S+JVrGLeWIvtQUvONJxlqSQYYKpwoN2kaocLjdVsis4Mk80ESF2YpSkzwldjHkjFCUutI/r+EHDU8oCs6yzL3PhWiEooZdFMkymlas4AcI3KmoMMNSQ3tHzjGWCrcJJdYyZC7QFGwjRL9p+MrRkAGWzIaWCn9W0F3TsK01c2ZvQw0byvxuQU0r1lM0qJO7wW0kRIMdDTtXEdzi4VIh+EoIHm0mWtAtpCixlabgn83fKTI7anJe9ST7WIK1DMGpQmYeA58ImV6ezOGOzK2Kgq01pd60cKWiUi9Lievb/0vIDPHQ05Kzt4ddPckQBQtoaurjyHnek/nKzpQLrVgKPjIkh2v4uyezpv+Xoo7fPFXaGFp1vaLKxQ4uUpQQS5VuQs7BCq4xRJv7fwpVvvFEB3j+620haOuocqMhWd6TTPAEx+mdFNGHdranFe95WrWmIvlY4F1Dle2ECgc6cto7SryuqGGGha0tFQ5V53migUKmg6XKAo4qS3mik+0OZpAhOLeZKicacgaYcyx5hypYQE02ZA4xi/pNhOQxR4klNKyqacj+mpxnLTnnGSo85++3ZCZq6lrZkXlGEX3o+C9FieccJbZWVFjC0Yo1FZnJhoYMFoI1hEZ9r6hwg75HwzBNhbZCdJEfJwTPGzJvaKImw1yYX1HDAmpXR+ZJQ/SmgqMNVQb5vgamGwLtt7VwvP7Qk1xpiM5x5Cyv93E06MZmgs0Nya2azIKOYKCGBQQW97RmhKNKF02JZqHEJ4o58qp7X5EcZmc56trXEqzjCBZ1MFGR87Ql2tSTs6CGxS05PTzRQorkbw7aKoKXFDXsYW42VJih/q+FP2BdTzDTwVqOYB13liM50vG7wy28qagyuIXMeQI/Oqq8bcn5wJI50xH00CRntyfpL1T4hydYpoXgNiFzoIUTDZnLNRzh4TBHwbYGDvZkxmlyJloyr6tRihpeUG94GnKtIznREF0tzJG/OOr73JBcrSh1k6WuTprgLU+mnSGnv6Zge0NNz+kTDdH8nuAuTdJDCNb21LCiIuqlYbqGzT3RAoZofQfjFazkqeNWdYaGvYTM001EW2oKPvVk1ldUGSgUtHFwjKM1h9jnFcmy5lChoLNaQMGGDsYbKixlaMBmmsx1QjCfflwTfO/gckW0ruZ3jugKR3R5W9hGUWqCgxuFgsuaCHorotGKzGaeZB9DMsaTnKCpMtwTvOzhYk0rdrArKCqcaWmVk1+F372ur1YkKxgatI8Qfe1gIX9wE9FgS8ESmuABIXnRUbCapcKe+nO7slClSZFzpV/LkLncEb1qiO42fS3R855Su2mCLh62t1SYZZYVmKwIHjREF2uihTzB20JOkz7dkxzYQnK0UOU494wh+VWRc6Un2kpTaVgLDFEkJ/uhzRcI0YKGgpGWOlocBU/a4fKoJ/pEaNV6jip3+Es9VXY078rGnmAdf7t9ylPXS34RBSuYPs1UecZTU78WanhBCHpZ5sAoTz0LGZKjPf9TRypqWEiTvOFglL1fCEY3wY/++rbk7C8bWebA6p6om6PgOL2kp44TFJlVNBXae2rqqdZztOJpT87GQsE9jqCPIe9VReZuQ/CIgacsyZdCpIScSYqcZk8r+nsyCzhyfhOqHGOIvrLknC8wTpFcaYiGC/RU1NRbUeUpocQOnkRpGOrIOcNRx+1uA0UrzhSSt+VyS3SJpnFWkzNDqOFGIWcfR86DnmARTQ1HKIL33ExPiemeOhYSSjzlSUZZuE4TveoJLnBUOFof6KiysCbnAEcZgcUNTDOwkqWu3RWtmGpZwlHhJENdZ3miGz0lJlsKnjbwqSHQjpxnFDlTLLwqJPMZMjd7KrzkSG7VsxXBZE+F8YZkb01Oe00yyRK9psh5SYh29ySPKBo2ylNht7ZkZnsKenjKNJu9PNEyZpaCHv4Kt6RQsLvAVp7M9kIimmCUwGeWqLMmGuIotYMmWNpSahkhZw9FqZsVnKJhsjAHvtHMsTM9fCI06Dx/u3vfUXCqfsKRc4oFY2jMsoo/7DJDwZ1CsIKnJu+J9ldkpmiCxQx1rWjI+T9FwcWWzOuaYH0Hj7klNRVWEQpmaqosakiGNTFHdjS/qnUdmf0NJW5xsL0HhimCCZZSRzmSPTXJQ4aaztAwtZnoabebJ+htCaZ7Cm535ByoqXKbX1WRc4Eh2MkRXWzImVc96Cj4VdOKVxR84VdQsIUM8Psoou2byVHyZFuq7O8otbSQ2UAoeEWTudATLGSpZzVLlXVkPU2Jc+27lsw2jmg5T5VhbeE3BT083K9WsTTkFU/Osi0rC5lRlpwRHUiesNS0sOvmqGML1aRbPAxTJD9ZKtxuob+hhl8cwYGWpJ8nub7t5p6coYbMovZ1BTdaKn1jYD6h4GFDNFyT/Kqe1XCXphXHOKLZmuRSRdBPEfVUXQzJm5YGPGGJdvAEr7hHNdGZnuBvrpciGmopOLf5N0uVMy0FfYToJk90uUCbJupaVpO53UJXR2bVpoU00V2KOo4zMFrBd0Jtz2pa0clT5Q5L8IpQ177mWQejPMEJhuQjS10ref6HHjdEhy1P1EYR7GtO0uSsKJQYLiTnG1rVScj5lyazpqWGl5uBbRWl7m6ixGOOnEsMJR7z8J0n6KMnCdxhiNYQCoZ6CmYLnO8omC3MkW3bktlPmEt/VQQHejL3+dOE5FlPdK/Mq8hZxxJtLyRrepLThYKbLZxkSb5W52vYxNOaOxUF0yxMUPwBTYqCzy01XayYK0sJyWBLqX0MwU5CzoymRzV0EjjeUeLgDpTo6ij42ZAzvD01dHUUTPLU96MdLbBME8nFBn7zJCMtJcZokn8YoqU0FS5WFKyniHobguMcmW8N0XkWZjkyN3hqOMtS08r+/xTBwpZSZ3qiVRX8SzMHHjfUNFjgHEPmY9PL3ykEzxkSre/1ZD6z/NuznuB0RcE1TWTm9zRgfUWVJiG6yrzgmWPXC8EAR4Wxhlad0ZbgQyEz3pG5RVEwwDJH2mgKpjcTiCOzn1lfUWANFbZ2BA8balnEweJC9J0iuaeZoI+ippFCztEKVvckR2iice1JvhVytrQwUAZpgsubCPaU7xUe9vWnaOpaSBEspalykhC9bUlOMpT42ZHca6hyrqKmw/wMR8H5ZmdFoBVJb03O4UL0tSNnvIeRmkrLWqrs78gcrEn2tpcboh0UPOW3UUR9PMk4T4nnNKWmCjlrefhCwxRNztfmIQVdDElvS4m1/WuOujoZCs5XVOjtKPGokJzsYCtFYoWonSPT21DheU/wWhM19FcElwqNGOsp9Q8N/cwXaiND1MmeL1Q5XROtYYgGeFq1aTMsoMmcrKjQrOFQTQ1fmBYhmW6o8Jkjc7iDJRTBIo5kgJD5yMEYA3srCg7VFKwiVJkmRCc5ohGOKhsYMn/XBLdo5taZjlb9YAlGWRimqbCsoY7HFAXLa5I1HPRxMMsQDHFkWtRNniqT9UEeNjcE7RUlrCJ4R2CSJuqlKHWvJXjAUNcITYkenuBRB84TbeepcqTj3zZyFJzgYQdHnqfgI0ddUwS6GqWpsKWhjq9cV0vBAEMN2znq+EBfIWT+pClYw5xsTlJU6GeIBsjGmmANTzJZiIYpgrM0Oa8ZMjd7NP87jxhqGOhJlnQtjuQpB+8aEE00wZFznSJPyHxgH3HkPOsJFvYk8zqCHzTs1BYOa4J3PFU+UVRZxlHDM4YavlNUuMoRveiZA2d7grMNc2g+RbSCEKzmgYsUmWmazFJyoiOZ4KnyhKOGRzWJa0+moyV4TVHDzn51Awtqaphfk/lRQ08FX1iiqxTB/kLwd0VynKfEvI6cd4XMV5bMhZ7gZUWVzYQ6Nm2BYzxJbw3bGthEUUMfgbGeorae6DxHtJoZ6alhZ0+ytiVoK1R4z5PTrOECT/SugseEOlb1MMNR4VRNcJy+V1Hg9ONClSZFZjdHlc6W6FBLdJja2MC5hhpu0DBYEY1TFGwiFAxRRCsYkiM9JRb0JNMVkW6CZYT/2EiTGWmo8k+h4FhDNE7BvppoTSFnmCV5xZKzvcCdDo7VVPnIU+I+Rc68juApC90MwcFCsJ5hDqxgScYKreruyQwTqrzoqDCmhWi4IbhB0Yrt3RGa6GfDv52rKXWhh28dyZaWUvcZeMTBaZoSGyiCtRU5J8iviioHaErs7Jkj61syVzTTgOcUOQ8buFBTYWdL5g3T4qlpe0+wvD63heAXRfCCIed9RbCsp2CiI7raUOYOTU13N8PNHvpaGvayo4a3LLT1lDrVEPT2zLUlheB1R+ZTRfKWJ+dcocLJfi11vyJ51lLqJ0WD7tRwryezjiV5W28uJO9qykzX8JDe2lHl/9oyBwa2UMfOngpXCixvKdXTk3wrsKmiVYdZIqsoWEERjbcUNDuiaQomGoIbFdEHmsyWnuR+IeriKDVLnlawlyNHKwKlSU631PKep8J4Q+ayjkSLKYLhalNHlYvttb6fHm0p6OApsZ4l2VfdqZkjuysy6ysKLlckf1KUutCTs39bmCgEyyoasIWlVaMF7mgmWtBT8Kol5xpH9IGllo8cJdopcvZ2sImlDmMIbtDk3KIpeNiS08lQw11NFPTwVFlPP6pJ2gvRfI7gQUfmNAtf6Gs0wQxDsKGlVBdF8rCa3jzdwMaGHOsItrZk7hAyOzpK9VS06j5F49b0VNGOOfKs3lDToMsMBe9ZWtHFEgxTJLs7qrygKZjUnmCYoeAqeU6jqWuLJup4WghOdvCYJnrSkSzoyRkm5M2StQwVltPkfCAk58tET/CSg+8MUecmotMEnhBKfWBIZsg2ihruMJQaoIm+tkTLKEqspMh00w95gvFCQRtDwTT1gVDDSEVdlwqZfxoQRbK0g+tbiBZxzKlpnpypejdDwTaeOvorMk/IJE10h9CqRe28hhLbe0pMsdSwv4ZbhKivo2BjDWfL8UKJgeavwlwb5KlwhyE4u4XkGE2ytZCznKLCDZZq42VzT8HLCrpruFbIfOIINmh/qCdZ1ZBc65kLHR1Bkyf5zn6pN3SvGKIlFNGplhrO9QSXanLOMQTLCa0YJCRrCZm/CZmrLTm7WzCK4GJDiWUdFeYx1LCFg3NMd0XmCuF3Y5rITLDUsYS9zoHVzwnJoYpSTQoObyEzr4cFBNqYTopoaU/wkyLZ2lPhX/5Y95ulxGTV7KjhWrOZgl8MyUUafjYraNjNU1N3IWcjT5WzWqjwtoarHSUObGYO3GCJZpsBlnJGPd6ZYLyl1GdCA2625IwwJDP8GUKymbzuyPlZlvTUsaUh5zFDhRWFzPKKZLAlWdcQbObgF9tOqOsmB1dqcqYJmWstFbZRRI9poolmqiLnU0POvxScpah2iSL5UJNzgScY5+AuIbpO0YD3NCW+dLMszFSdFCWGqG6eVq2uYVNDdICGD6W7EPRWZEY5gpsE9rUkS3mijzzJnm6UpUFXG1hCUeVoS5WfNcFpblELL2qqrCvMvRfd45oalvKU2tiQ6ePJOVMRXase9iTtLJztPxJKLWpo2CRDcJwn2sWSLKIO1WQWNTCvpVUvOZhgSC40JD0dOctaSqzkCRbXsKlb11Oip6PCJ0IwSJM31j3akRxlP7Rwn6aGaUL0qiLnJkvB3xWZ2+Q1TfCwpQH3G0o92UzmX4o/oJNQMMSQc547wVHhdk+VCw01DFYEnTxzZKAm74QmeNNR1w6WzEhNK15VJzuCdxQ53dRUDws5KvwgBMOEgpcVNe0hZI6RXT1Jd0cyj5nsaEAHgVmGaJIlWdsc5Ui2ElrRR6jrRAttNMEAIWrTDFubkZaok7/AkzfIwfuWVq0jHzuCK4QabtLUMVPB3kJ0oyHTSVFlqMALilJf2Rf8k5aaHtMfayocLBS8L89oKoxpJvnAkDPa0qp5DAUTHKWmCcnthlou8iCKaFFLHWcINd1nyIwXqrSxMNmSs6KmoL2QrKuWtlQ5V0120xQ5vRyZS1rgFkWwhiOwiuQbR0OOVhQM9iS3tiXp4RawRPMp5tDletOOBL95MpM01dZTBM9pkn5qF010rIeHFcFZhmSGpYpTsI6nwhqe5C9ynhlpp5ophuRb6WcJFldkVnVEwwxVfrVkvnWUuNLCg5bgboFHPDlDPDmnK7hUrWiIbjadDclujlZcaokOFup4Ri1kacV6jmrrK1hN9bGwpKEBQ4Q6DvIUXOmo6U5LqQM6EPyiKNjVkPnJkDPNEaxhiFay5ExW1NXVUGqcpYYdPcGiCq7z/TSlbhL4pplWXKd7NZO5QQFrefhRQW/NHOsqcIglc4UhWklR8K0QzbAw08CBDnpbgqXdeD/QUsM4RZXDFBW6WJKe/mFPdH0LtBgiq57wFLzlyQzz82qYx5D5WJP5yVJDW01BfyHnS6HKO/reZqId1WGa4Hkh2kWodJ8i6KoIPlAj2hPt76CzXsVR6koPRzWTfKqIentatYpQw2me4AA3y1Kind3SwoOKZDcFXTwl9tWU6mfgRk9d71sKtlNwrjnYw5tC5n5LdKiGry3JKNlHEd3oaMCFHrazBPMp/uNJ+V7IudcSbeOIdjUEdwl0VHCOZo5t6YluEuaC9mQeMgSfOyKnYGFHcIeQ84yQWbuJYJpZw5CzglDH7gKnWqqM9ZTaXcN0TeYhR84eQtJT76JJ1lREe7WnnvsMmRc9FQ7SBBM9mV3lCUdmHk/S2RAMt0QjFNFqQpWjDPQ01DXWUdDBkXziKPjGEP3VP+zIWU2t7im41FOloyWzn/L6dkUy3VLDaZ6appgDLHPjJEsyvJngWEPUyVBiAaHCTEXwrLvSEbV1e1gKJniicWorC1MUrVjB3uDhJE/wgSOzk1DXpk0k73qCM8xw2UvD5kJmDUfOomqMpWCkJRlvKXGmoeBm18USjVIk04SClxTB6YrgLAPLWYK9HLUt5cmc0vYES8GnTeRc6skZbQkWdxRsIcyBRzx1DbTk9FbU0caTPOgJHhJKnOGIVhQqvKmo0llRw9sabrZkDtdg3PqaKi9oatjY8B+G371paMg6+mZFNNtQ04mWBq3rYLOmtWWQp8KJnpy9DdFensyjdqZ+yY40VJlH8wcdLzC8PZnvHMFUTZUrDTkLyQaGus5X5LzpYAf3i+e/ZlhqGqWhh6Ou6xTR9Z6oi5AZZtp7Mj2EEm8oSpxiYZCHU/1fbGdNNNRRoZMhmilEb2gqHOEJDtXkHK/JnG6IrvbPCwV3NhONVdS1thBMs1T4QOBcTWa2IzhMk2nW5Kyn9tXUtpv9RsG2msxk+ZsQzRQacJncpgke0+T8y5Fzj8BiGo7XlJjaTIlpQs7KFjpqGnKuoyEPeIKnFMkZHvopgh81ySxNFWvJWcKRs70j2FOT012IllEEO1n4pD1513Yg2ssQPOThOkvyrqHUdEXOSEsihmBbTbKX1kLBPWqWkLOqJbjB3GBIZmoa8qWl4CG/iZ7oiA72ZL7TJNeZUY7kFQftDcHHluBzRbCegzMtrRjVQpX2lgoPKKLJAkcbMl01XK2p7yhL8pCBbQ3BN2avJgKvttcrWDK3CiUOVxQ8ZP+pqXKyIxnmBymCg5vJjNfkPK4+c8cIfK8ocVt7kmfd/I5SR1hKvCzUtb+lhgc00ZaO6CyhIQP1Uv4yIZjload72PXX0OIJvnFU+0Zf6MhsJwTfW0r0UwQfW4LNLZl5HK261JCZ4qnBaAreVAS3WrjV0LBnNDUNNDToCEeFfwgcb4gOEqLRhirWkexrCEYKVV711DLYEE1XBEsp5tpTGjorkomKYF9FDXv7fR3BGwbettSxnyL53MBPjsxDZjMh+VUW9NRxq1DhVk+FSxQcaGjV9Pawv6eGByw5qzoy7xk4RsOShqjJwWKe/1pEEfzkobeD/dQJmpqedcyBTy2sr4nGNRH0c0SPWTLrqAc0OQcb/gemKgqucQT7ySWKCn2EUotoCvpZct7RO2sy/QW0IWcXd7pQRQyZVwT2USRO87uhjioTLKV2brpMUcMQRbKH/N2T+UlTpaMls6cmc6CCNy3JdYYSUzzJQ4oSD3oKLncULOiJvjBEC2oqnCJkJluCYy2ZQ5so9YYlZ1VLlQU1mXEW1jZERwj/MUSRc24TdexlqLKfQBtDTScJUV8FszXBEY5ktpD5Ur9hYB4Nb1iikw3JoYpkKX+RodRKFt53MMuRnKSpY31PwYaGaILh3wxJGz9TkTPEETxoCWZrgvOlmyMzxFEwVJE5xZKzvyJ4WxEc16Gd4Xe3Weq4XH2jKRikqOkGQ87hQnC7wBmGYLAnesX3M+S87eFATauuN+Qcrh7xIxXJbUIdMw3JGE3ylCWzrieaqCn4zhGM19TQ3z1oH1AX+pWEqIc7wNGAkULBo/ZxRaV9NNyh4Br3rCHZzbzmSfawBL0dNRwpW1kK9mxPXR9povcdrGSZK9c2k0xwFGzjuniCtRSZCZ6ccZ7gaktmgAOtKbG/JnOkJrjcQTdFMsxRQ2cLY3WTIrlCw1eWKn8R6pvt4GFDso3QoL4a3nLk3G6JrtME3dSenpx7PNFTmga0EaJTLQ061sEeQoWXhSo9LTXsaSjoJQRXeZLtDclbCrYzfzHHeaKjHCVOUkQHO3JeEepr56mhiyaYYKjjNU+Fed1wS5VlhWSqI/hYUdDOkaxiKehoyOnrCV5yBHtbWFqTHCCwtpDcYolesVR5yUzTZBb3RNMd0d6WP+SvhuBmRcGxnuQzT95IC285cr41cLGQ6aJJhmi4TMGempxeimBRQw1tFKV+8jd6KuzoSTqqDxzRtpZkurvKEHxlqXKRIjjfUNNXQsNOsRScoWFLT+YeRZVD3GRN0MdQcKqQjHDMrdGGVu3iYJpQx3WGUvfbmxwFfR20WBq0oYY7LMFhhgYtr8jpaEnaOzjawWWaTP8mMr0t/EPDPoqcnxTBI5o58L7uoWnMrpoqPwgVrlAUWE+V+TQl9rawoyP6QGAlQw2TPRX+YSkxyBC8Z6jhHkXBgQL7WII3DVFnRfCrBfxewv9D6xsyjys4VkhWb9pUU627JllV0YDNHMku/ldNMMXDEo4aFnAkk4U6frNEU4XgZUPmEKHUl44KrzmYamjAbh0JFvGnaTLPu1s9jPCwjFpYiN7z1DTOk/nc07CfDFzmCf7i+bfNHXhDtLeBXzTBT5rkMvWOIxpl4EMh2LGJBu2syDnAEx2naEhHDWMMzPZEhygyS1mS5RTJr5ZkoKbEUoYqr2kqdDUE8ztK7OaIntJkFrIECwv8LJTaVx5XJE86go8dFeZ3FN3rjabCAYpoYEeC9zzJVULBbmZhDyd7ko09ydpNZ3nm2Kee4FPPXHnYEF1nqOFEC08LUVcDvYXkJHW8gTaKCk9YGOeIJhqiE4ToPEepdp7IWFjdwnWaufGMwJJCMtUTTBBK9BGCOy2tGGrJTHIwyEOzp6aPzNMOtlZkDvcEWpP5SVNhfkvDxhmSazTJXYrM9U1E0xwFVwqZQwzJxw6+kGGGUj2FglGGmnb1/G51udRSMNlTw6GGnCcUwVcOpmsqTHa06o72sw1RL02p9z0VbnMLOaIX3QKaYKSCFQzBKEUNHTSc48k53RH9wxGMtpQa5KjjW0W0n6XCCCG4yxNNdhQ4R4l1Ff+2sSd6UFHiIEOyqqFgT01mEUMD+joy75jPhOA+oVVLm309FR4yVOlp4RhLiScNmSmaYF5Pw0STrOIoWMSR2UkRXOMp+M4SHW8o8Zoi6OZgjKOaFar8zZDzkWzvKOjkKBjmCXby8JahhjXULY4KlzgKLvAwxVGhvyd4zxB1d9T0piazmKLCVZY5sKiD0y2ZSYrkUEPUbIk+dlQ4SJHTR50k1DPaUWIdTZW9NJwnJMOECgd7ou/MnppMJ02O1VT4Wsh85MnZzcFTngpXGKo84qmwgKbCL/orR/SzJ2crA+t6Mp94KvxJUeIbT3CQu1uIdlQEOzlKfS3UMcrTiFmOuroocrZrT2AcmamOKg8YomeEKm/rlT2sociMaybaUlFhuqHCM2qIJ+rg4EcDFymiDSxzaHdPcpE62pD5kyM5SBMoA1PaUtfIthS85ig1VPiPPYXgYEMNk4Qq7TXBgo7oT57gPUdwgCHzhIVFPFU6OYJzHAX9m5oNrVjeE61miDrqQ4VSa1oiURTsKHC0IfjNwU2WzK6eqK8jWln4g15TVBnqmDteCJ501PGAocJhhqjZdtBEB6lnhLreFJKxmlKbeGrqLiSThVIbCdGzloasa6lpMQXHCME2boLpJgT7yWaemu6wBONbqGNVRS0PKIL7LckbjmQtR7K8I5qtqel+T/ChJTNIKLjdUMNIRyvOEko9YYl2cwQveBikCNawJKcLBbc7+JM92mysNvd/Fqp8a0k6CNEe7cnZrxlW0wQXaXjaktnRwNOGZKYiONwS7a1JVheq3WgJHlQUGKHKmp4KAxXR/ULURcNgoa4zhKSLpZR3kxRRb0NmD0OFn+UCS7CzI1nbP6+o4x47QZE5xRCt3ZagnYcvmpYQktXdk5YKXTzBC57kKEe0VVuiSYqapssMS3C9p2CKkHOg8B8Pa8p5atrIw3qezIWanMGa5HRDNF6RM9wcacl0N+Q8Z8hsIkSnaIIdHRUOEebAPy1zbCkhM062FCJtif7PU+UtoVXzWKqM1PxXO8cfdruhFQ/a6x3JKYagvVDhQEtNiyiiSQ7OsuRsZUku0CRNDs4Sog6KKjsZgk2bYJqijgsEenoKeniinRXBn/U3lgpPdyDZynQx8IiioMnCep5Ky8mjGs6Wty0l1hUQTcNWswS3WRp2kCNZwJG8omG8JphPUaFbC8lEfabwP7VtM9yoaNCAjpR41VNhrD9LkbN722v0CoZMByFzhaW+MyzRYEWFDQwN2M4/JiT76PuljT3VU/A36eaIThb+R9oZGOAJ9tewkgGvqOMNRWYjT/Cwu99Q8LqDE4TgbLWxJ1jaDDAERsFOFrobgjUsBScaguXU8kKm2RL19tRypSHnHNlHiIZqgufs4opgQdVdwxBNNFBR6kVFqb8ogimOzB6a6HTzrlDHEpYaxjiiA4TMQobkDg2vejjfwJGWmnbVFAw3H3hq2NyQfG7hz4aC+w3BbwbesG0swYayvpAs6++Ri1Vfzx93mFChvyN5xVHTS+0p9aqCAxyZ6ZacZyw5+7uuQkFPR9DDk9NOiE7X1PCYJVjVUqq7JlrHwWALF5nfHNGjApdpqgzx5OwilDhCiDYTgnc9waGW4BdLNNUQvOtpzDOWHDH8D7TR/A/85KljEQu3NREc4Pl/6B1Hhc8Umb5CsKMmGC9EPcxoT2amwHNCmeOEnOPbklnMkbOgIvO5UMOpQrS9UGVdt6iH/fURjhI/WOpaW9OKLYRod6HCUEdOX000wpDZQ6hwg6LgZfOqo1RfT/CrJzjekXOGhpc1VW71ZLbXyyp+93ILbC1kPtIEYx0FIx1VDrLoVzXRKRYWk809yYlC9ImcrinxtabKnzRJk3lAU1OLEN1j2zrYzr2myHRXJFf4h4QKT1qSTzTB5+ZNTzTRkAxX8FcLV2uS8eoQQ2aAkFzvCM72sJIcJET3WPjRk5wi32uSS9rfZajpWEvj9hW42F4o5NytSXYy8IKHay10VYdrcl4SkqscrXpMwyGOgtkajheSxdQqmpxP1L3t4R5PqasFnrQEjytq6qgp9Y09Qx9o4S1FzhUCn1kyHSzBWLemoSGvOqLNhZyBjmCaAUYpMgt4Ck7wBBMMwWKWgjsUwTaGVsxWC1mYoKiyqqeGKYqonSIRQ3KIkHO0pmAxTdBHkbOvfllfr+AA+7gnc50huVKYK393FOyg7rbPO/izI7hE4CnHHHnJ0ogNPRUGeUpsrZZTBJcrovUcJe51BPsr6GkJdhCCsZ6aTtMEb2pqWkqeVtDXE/QVggsU/Nl86d9RMF3DxvZTA58agu810RWawCiSzzXBeU3MMW9oyJUedvNEvQyNu1f10BSMddR1vaLCYpYa/mGocLSiYDcLbQz8aMn5iyF4xBNMs1P0QEOV7o5gaWGuzSeLue4tt3ro7y4Tgm4G/mopdZgl6q0o6KzJWE3mMksNr3r+a6CbT8g5wZNzT9O7fi/zpaOmnz3BRoqos+tv9zMbdpxsqDBOEewtJLt7cg5wtKKbvldpSzRRCD43VFheCI7yZLppggMVBS/KMAdHODJvOwq2NQSbKKKPLdFWQs7Fqo+mpl01JXYRgq8dnGLhTiFzqmWsUMdpllZdbKlyvSdYxhI9YghOtxR8LgSLWHK62mGGVoxzBE8LNWzqH9CUesQzFy5RQzTc56mhi6fgXEWwpKfE5Z7M05ZgZUPmo6auiv8YKzDYwWBLMErIbKHJvOwIrvEdhOBcQ9JdU1NHQ7CXn2XIDFBKU2WAgcX9UAUzDXWd5alwuyJ41Z9rjKLCL4aCp4WarhPm2rH+SaHUYE001JDZ2ZAzXPjdMpZWvC9wmqIB2lLhQ01D5jO06hghWMndbM7yRJMsoCj1vYbnFQVrW9jak3OlEJ3s/96+p33dEPRV5GxiqaGjIthUU6FFEZyqCa5qJrpBdzSw95IUnOPIrCUUjRZQFrbw5PR0R1qiYx3cb6nrWUMrBmmiBQxVHtTew5ICP/ip6g4hed/Akob/32wvBHsIOX83cI8hGeNeNPCIkPmXe8fPKx84OMSRM1MTdXSwjCZ4S30jVGhvqTRak/OVhgGazHuOCud5onEO1lJr6ecVyaOK6H7zqlBlIaHE0oroCgfvGJIdPcmfLNGLjpz7hZwZQpUbFME0A1cIJa7VNORkgfsMBatbKgwwJM9bSvQXeNOvbIjelg6WWvo5kvbKaJJNHexkKNHL9xRyFlH8Ti2riB5wVPhUk7nGkJnoCe428LR/wRGdYIlmWebCyxou1rCk4g/ShugBDX0V0ZQWkh0dOVsagkM0yV6OoLd5ye+pRlsCr0n+KiQrGuq5yJDzrTAXHtLUMduTDBVKrSm3eHL+6ijxhFDX9Z5gVU/wliHYTMiMFpKLNMEywu80wd3meoFmt6VbRMPenhrOc6DVe4pgXU8DnnHakLOIIrlF4FZPIw6R+zxBP0dyq6OOZ4Q5sLKCcz084ok+VsMMyQhNZmmBgX5xIXOEJTmi7VsGTvMTNdHHhpzdbE8Du2oKxgvBqQKdDDnTFOylCFaxR1syz2iqrOI/FEpNc3C6f11/7+ASS6l2inq2ciTrCCzgyemrCL5SVPjQkdPZUmGy2c9Sw9FtR1sS30RmsKPCS4rkIC/2U0MduwucYolGaPjKEyhzmiPYXagyWbYz8LWBDdzRimAXzxx4z8K9hpzlhLq+NiQ97HuKorMUfK/OVvC2JfiHUPCQI/q7J2gjK+tTDNxkCc4TMssqCs4TGtLVwQihyoAWgj9bosU80XGW6Ac9TJGziaUh5+hnFcHOnlaM1iRn29NaqGENTTTSUHCH2tWTeV0osUhH6psuVLjRUmGWhm6OZEshGeNowABHcJ2Bpy2ZszRcKkRXd2QuKVEeXnbfaEq825FguqfgfE2whlChSRMdron+LATTPQ2Z369t4B9C5gs/ylzv+CMmepIDPclFQl13W0rspPd1JOcbghGOEutqCv5qacURQl3dDKyvyJlqKXGPgcM9FfawJAMVmdcspcYKOZc4GjDYkFlK05olNMHyHn4zFNykyOxt99RkHlfwmiHo60l2EKI+mhreEKp080Tbug08BVPcgoqC5zWt+NLDTZ7oNSF51N1qie7Va3uCCwyZbkINf/NED6jzOsBdZjFN8oqG3wxVunqCSYYKf3EdhJyf9YWGf7tRU2oH3VHgPr1fe5J9hOgHd7xQ0y7qBwXr23aGErP0cm64JVjZwsOGqL+mhNgZmhJLW2oY4UhedsyBgzrCKrq7BmcpNVhR6jBPq64Vgi+kn6XE68pp8J5/+0wRHGOpsKenQn9DZntPzjRLZpDAdD2fnSgkG9tmIXnUwQ6WVighs7Yi2MxQ0N3CqYaCXkJ0oyOztMDJjmSSpcpvlrk0RMMOjmArQ04PRV1DO1FwhCVaUVPpKUM03JK5SxPsIWRu8/CGHi8UHChiqGFDTbSRJWeYUDDcH6vJWUxR4k1FXbMUwV6e4AJFXS8oMqsZKqzvYQ9DDQdZckY4aGsIhtlubbd2r3j4QBMoTamdPZk7O/Bf62lacZwneNjQoGcdVU7zJOd7ghsUHOkosagic6cnWc8+4gg285R6zZP5s1/LUbCKIznTwK36PkdwlOrl4U1LwfdCCa+IrvFkmgw1PCAUXKWo0sURXWcI2muKJlgyFzhynCY4RBOsqCjoI1R5zREco0n2Vt09BQtYSizgKNHfUmUrQ5UOCh51BFcLmY7umhYqXKQomOop8bUnWNNQcIiBcYaC6xzMNOS8JQQfeqKBmmglB+97ok/lfk3ygaHSyZaCRTzRxQo6GzLfa2jWBPepw+UmT7SQEJyiyRkhBLMVOfcoMjcK0eZChfUNzFAUzCsEN5vP/X1uP/n/aoMX+K+nw/Hjr/9xOo7j7Pju61tLcgvJpTWXNbfN5jLpi6VfCOviTktKlFusQixdEKWmEBUKNaIpjZRSSOXSgzaaKLdabrm1/9nZ+/f+vd/vz/v9+Xy+zZ7PRorYoZqyLrCwQdEAixxVOEXNNnjX2nUSRlkqGmWowk8lxR50JPy9Bo6qJXaXwNvREBvnThPEPrewryLhcAnj5WE15Fqi8W7R1sAuEu86S4ENikItFN4xkv9Af4nXSnUVcLiA9xzesFpivRRVeFKtsMRaKBhuSbjOELnAUtlSQUpXgdfB4Z1oSbnFEetbQ0IrAe+Y+pqnDcEJFj6S8LDZzZHwY4e3XONNlARraomNEt2bkvGsosA3ioyHm+6jCMbI59wqt4eeara28IzEmyPgoRaUOEDhTVdEJhmCoTWfC0p8aNkCp0oYqih2iqGi4yXeMkOsn4LdLLnmKfh/YogjNsPebeFGR4m9BJHLzB61XQ3BtpISfS2FugsK9FAtLWX1dCRcrCnUp44CNzuCowUZmxSRgYaE6Za0W2u/E7CVXCiI/UOR8aAm1+OSyE3mOUcwyc1zBBeoX1kiKy0Zfxck1Gsyulti11i83QTBF5Kg3pDQThFMVHiPSlK+0cSedng/VaS8bOZbtsBcTcZAR8JP5KeqQ1OYKAi20njdNNRpgnsU//K+JnaXJaGTomr7aYIphoRn9aeShJWKEq9LcozSF7QleEfDI5LYm5bgVkFkRwVDBCVu0DDIkGupo8TZBq+/pMQURYErJQmPKGKjNDkWOLx7Jd5QizdUweIaKrlP7SwJDhZvONjLkOsBBX9UpGxnydhXkfBLQ8IxgojQbLFnJf81JytSljclYYyEFyx0kVBvKWOFJmONpshGAcsduQY5giVNCV51eOdJYo/pLhbvM0uDHSevNKRcrKZIqnCtJeEsO95RoqcgGK4ocZcho1tTYtcZvH41pNQ7vA0WrhIfOSraIIntIAi+NXWCErdbkvrWwjRLrt0NKUdL6KSOscTOdMSOUtBHwL6OLA0vNSdynaWQEnCpIvKaIrJJEbvHkmuNhn6OjM8VkSGSqn1uYJCGHnq9I3aLhNME3t6GjIkO7xrNFumpyTNX/NrwX7CrIRiqqWijI9JO4d1iieykyfiposQIQ8YjjsjlBh6oHWbwRjgYJQn2NgSnNycmJAk3NiXhx44Sxykihxm8ybUwT1OVKySc7vi3OXVkdBJ4AyXBeksDXG0IhgtYY0lY5ahCD0ehborIk5aUWRJviMA7Xt5kyRjonrXENkm8yYqgs8VzgrJmClK20uMM3jRJ0FiQICQF9hdETlLQWRIb5ki6WDfWRPobvO6a4GP5mcOrNzDFELtTkONLh9dXE8xypEg7z8A9jkhrQ6Fhjlg/QVktJXxt4WXzT/03Q8IaQWSqIuEvloQ2mqC9Jfi7wRul4RX3pSPlzpoVlmCtI2jvKHCFhjcM3sN6lqF6HxnKelLjXWbwrpR4xzuCrTUZx2qq9oAh8p6ixCUGr78g8oyjRAtB5CZFwi80VerVpI0h+IeBxa6Zg6kWvpDHaioYYuEsRbDC3eOmC2JvGYLeioxGknL2UATNJN6hmtj1DlpLvDVmocYbrGCVJKOrg4X6DgddLA203BKMFngdJJFtFd7vJLm6KEpc5yjQrkk7M80SGe34X24nSex1Ra5Omgb71JKyg8SrU3i/kARKwWpH0kOGhKkObyfd0ZGjvyXlAkVZ4xRbYJ2irFMkFY1SwyWxr2oo4zlNiV+7zmaweFpT4kR3kaDAFW6xpSqzJay05FtYR4HmZhc9UxKbbfF2V8RG1MBmSaE+kmC6JnaRXK9gsiXhJHl/U0qM0WTcbyhwkYIvFGwjSbjfwhiJt8ZSQU+Bd5+marPMOkVkD0muxYLIfEuhh60x/J92itguihJSEMySVPQnTewnEm+620rTQEMsOfo4/kP/0ARvWjitlpSX7GxBgcMEsd3EEeYWvdytd+Saawi6aCIj1CkGb6Aj9rwhx16Cf3vAwFy5pyLhVonXzy51FDpdEblbkdJbUcEPDEFzQ8qNmhzzLTmmKWKbFCXeEuRabp6rxbvAtLF442QjQ+wEA9eL1xSR7Q0JXzlSHjJ4exq89yR0laScJ/FW6z4a73pFMEfDiRZvuvijIt86RaSFOl01riV2mD1UEvxGk/Geg5aWwGki1zgKPG9J2U8PEg8qYvMsZeytiTRXBMslCU8JSlxi8EabjwUldlDNLfzTUmCgxWsjqWCOHavYAqsknKFIO0yQ61VL5AVFxk6WhEaCAkdJgt9aSkzXlKNX2jEa79waYuc7gq0N3GDJGCBhoiTXUEPsdknCUE1CK0fwsiaylSF2uiDyO4XX3pFhNd7R4itFGc0k/ElBZwWvq+GC6szVeEoS/MZ+qylwpKNKv9Z469UOjqCjwlusicyTxG6VpNxcQ8IncoR4RhLbR+NdpGGmJWOcIzJGUuKPGpQg8rrG21dOMqQssJQ4RxH5jaUqnZuQ0F4Q+cjxLwPtpZbIAk3QTJHQWBE5S1BokoVtDd6lhqr9UpHSUxMcIYl9pojsb8h4SBOsMQcqvOWC2E8EVehqiJ1hrrAEbQxeK0NGZ0Gkq+guSRgniM23bIHVkqwx4hiHd7smaOyglyIyQuM978j4VS08J/A2G1KeMBRo4fBaSNhKUEZfQewVQ/C1I+MgfbEleEzCUw7mKXI0M3hd1EESVji8x5uQ41nxs1q4RMJCCXs7Iq9acpxn22oSDnQ/sJTxsCbHIYZiLyhY05TY0ZLIOQrGaSJDDN4t8pVaIrsqqFdEegtizc1iTew5Q4ayBDMUsQMkXocaYkc0hZua412siZ1rSXlR460zRJ5SlHGe5j801RLMlJTxtaOM3Q1pvxJ45zUlWFD7rsAbpfEm1JHxG0eh8w2R7QQVzBUw28FhFp5QZzq8t2rx2joqulYTWSuJdTYfWwqMFMcovFmSyJPNyLhE4E10pHzYjOC3huArRa571ZsGajQpQx38SBP5pyZB6lMU3khDnp0MBV51BE9o2E+TY5Ml2E8S7C0o6w1xvCZjf0HkVEHCzFoyNmqC+9wdcqN+Tp7jSDheE9ws8Y5V0NJCn2bk2tqSY4okdrEhx1iDN8cSudwepWmAGXKcJXK65H9to8jYQRH7SBF01ESUJdd0TayVInaWhLkOjlXE5irKGOnI6GSWGCJa482zBI9rCr0jyTVcEuzriC1vcr6mwFGSiqy5zMwxBH/TJHwjSPhL8+01kaaSUuMFKTcLEvaUePcrSmwn8DZrgikWb7CGPxkSjhQwrRk57tctmxLsb9sZvL9LSlyuSLlWkqOjwduo8b6Uv1DkmudIeFF2dHCgxVtk8dpIvHpBxhEOdhKk7OLIUSdJ+cSRY57B+0DgGUUlNfpthTfGkauzxrvTsUUaCVhlKeteTXCoJDCa2NOKhOmC4G1H8JBd4OBZReSRGkqcb/CO1PyLJTLB4j1q8JYaIutEjSLX8YKM+a6phdMsdLFUoV5RTm9JSkuDN8WcIon0NZMNZWh1q8C7SJEwV5HxrmnnTrf3KoJBlmCYI2ilSLlfEvlE4011NNgjgthzEua0oKK7JLE7HZHlEl60BLMVFewg4EWNt0ThrVNEVkkiTwpKXSWJzdRENgvKGq4IhjsiezgSFtsfCUq8qki5S1LRQeYQQ4nemmCkImWMw3tFUoUBZk4NOeZYEp4XRKTGa6wJjrWNHBVJR4m3FCnbuD6aak2WsMTh3SZImGCIPKNgsDpVwnsa70K31lCFJZYcwwSMFcQulGTsZuEaSdBXkPGZhu0FsdUO73RHjq8MPGGIfaGIbVTk6iuI3GFgucHrIQkmWSJdBd7BBu+uOryWAhY7+Lki9rK5wtEQzWwvtbqGhIMFwWRJsElsY4m9IIg9L6lCX0VklaPAYkfkZEGDnOWowlBJjtMUkcGK4Lg6EtoZInMUBVYLgn0UsdmCyCz7gIGHFfk+k1QwTh5We7A9x+IdJ6CvIkEagms0hR50eH9UnTQJ+2oiKyVlLFUE+8gBGu8MQ3CppUHesnjTHN4QB/UGPhCTHLFPHMFrCqa73gqObUJGa03wgbhHkrCfpEpzNLE7JDS25FMKhlhKKWKfCgqstLCPu1zBXy0J2ztwjtixBu8UTRn9LVtkmCN2iyFhtME70JHRQ1KVZXqKI/KNIKYMCYs1GUMEKbM1bKOI9LDXC7zbHS+bt+1MTWS9odA9DtrYtpbImQJ2VHh/lisEwaHqUk1kjKTAKknkBEXkbkdMGwq0dnhzLJF3NJH3JVwrqOB4Sca2hti75nmJN0WzxS6UxDYoEpxpa4htVlRjkYE7DZGzJVU72uC9IyhQL4i8YfGWSYLLNcHXloyz7QhNifmKSE9JgfGmuyLhc403Xm9vqcp6gXe3xuuv8F6VJNxkyTHEkHG2g0aKXL0MsXc1bGfgas2//dCONXiNLCX+5mB7eZIl1kHh7ajwpikyzlUUWOVOsjSQlsS+M0R+pPje/dzBXRZGO0rMtgQrLLG9VSu9n6CMXS3BhwYmSoIBhsjNBmZbgusE9BCPCP5triU4VhNbJfE+swSP27aayE8tuTpYYjtrYjMVGZdp2NpS1s6aBnKSHDsbKuplKbHM4a0wMFd/5/DmGyKrJSUaW4IBrqUhx0vyfzTBBLPIUcnZdrAkNsKR0sWRspumSns6Ch0v/qqIbBYUWKvPU/CFoyrDJGwSNFhbA/MlzKqjrO80hRbpKx0Jewsi/STftwGSlKc1JZyAzx05dhLEdnfQvhZOqiHWWEAHC7+30FuRcZUgaO5gpaIK+xsiHRUsqaPElTV40xQZQ107Q9BZE1nryDVGU9ZSQ47bmhBpLcYpUt7S+xuK/FiT8qKjwXYw5ypS2iuCv7q1gtgjhuBuB8LCFY5cUuCNtsQOFcT+4Ih9JX+k8Ea6v0iCIRZOtCT0Et00JW5UeC85Cg0ScK0k411HcG1zKtre3SeITBRk7WfwDhEvaYLTHP9le0m8By0JDwn4TlLW/aJOvGHxdjYUes+ScZigCkYQdNdEOhkiezgShqkx8ueKjI8lDfK2oNiOFvrZH1hS+tk7NV7nOmLHicGWEgubkXKdwdtZknCLJXaCpkrjZBtLZFsDP9CdxWsSr05Sxl6CMmoFbCOgryX40uDtamB7SVmXW4Ihlgpmq+00tBKUUa83WbjLUNkzDmY7cow1JDygyPGlhgGKYKz4vcV7QBNbJIgM11TUqZaMdwTeSguH6rOaw1JRKzaaGyxVm2EJ/uCIrVWUcZUkcp2grMsEjK+DMwS59jQk3Kd6SEq1d0S6uVmO4Bc1lDXTUcHjluCXEq+1OlBDj1pi9zgiXxnKuE0SqTXwhqbETW6RggMEnGl/q49UT2iCzgJvRwVXS2K/d6+ZkyUl7jawSVLit46EwxVljDZwoSQ20sDBihztHfk2yA8NVZghiXwrYHQdfKAOtzsayjhY9bY0yE2CWEeJ9xfzO423xhL5syS2TFJofO2pboHob0nY4GiAgRrvGQEDa/FWSsoaaYl0syRsEt3kWoH3B01shCXhTUWe9w3Bt44SC9QCh3eShQctwbaK2ApLroGCMlZrYqvlY3qYhM0aXpFkPOuoqJ3Dm6fxXrGwVF9gCWZagjPqznfkuMKQ8DPTQRO8ZqG1hPGKEm9IgpGW4DZDgTNriTxvFiq+Lz+0cKfp4wj6OCK9JSnzNSn9LFU7UhKZZMnYwcJ8s8yRsECScK4j5UOB95HFO0CzhY4xJxuCix0lDlEUeMdS6EZBkTsUkZ4K74dugyTXS7aNgL8aqjDfkCE0ZbwkCXpaWCKhl8P7VD5jxykivSyxyZrYERbe168LYu9ZYh86IkscgVLE7tWPKmJv11CgoyJltMEbrohtVAQfO4ImltiHEroYEs7RxAarVpY8AwXMcMReFOTYWe5iiLRQxJ5Q8DtJ8LQhWOhIeFESPGsILhbNDRljNbHzNRlTFbk2S3L0NOS6V1KFJYKUbSTcIIhM0wQ/s2TM0SRMNcQmSap3jCH4yhJZKSkwyRHpYYgsFeQ4U7xoCB7VVOExhXepo9ABBsYbvGWKXPME3lyH95YioZ0gssQRWWbI+FaSMkXijZXwgiTlYdPdkNLaETxlyDVIwqeaEus0aTcYcg0RVOkpR3CSJqIddK+90JCxzsDVloyrFd5ZAr4TBKfaWa6boEA7C7s6EpYaeFPjveooY72mjIccLHJ9HUwVlDhKkmutJDJBwnp1rvulJZggKDRfbXAkvC/4l3ozQOG9a8lxjx0i7nV4jSXc7vhe3OwIxjgSHjdEhhsif9YkPGlus3iLFDnWOFhtCZbJg0UbQcIaR67JjthoCyMEZRwhiXWyxO5QxI6w5NhT4U1WsJvDO60J34fW9hwzwlKij6ZAW9ne4L0s8C6XeBMEkd/LQy1VucBRot6QMlbivaBhoBgjqGiCJNhsqVp/S2SsG6DIONCR0dXhvWbJ+MRRZJkkuEjgDXJjFQW6SSL7GXK8Z2CZg7cVsbWGoKmEpzQ5elpiy8Ryg7dMkLLUEauzeO86CuwlSOlgYLojZWeJ9xM3S1PWfEfKl5ISLQ0MEKR8YOB2QfCxJBjrKPCN4f9MkaSsqoVXJBmP7EpFZ9UQfOoOFwSzBN4MQ8LsGrymlipcJQhmy0GaQjPqCHaXRwuCZwRbqK2Fg9wlClZqYicrIgMdZfxTQ0c7TBIbrChxmuzoKG8XRaSrIhhiyNFJkrC7oIAWMEOQa5aBekPCRknCo4IKPrYkvCDI8aYmY7WFtprgekcJZ3oLIqssCSMtFbQTJKwXYy3BY5oCh2iKPCpJOE+zRdpYgi6O2KmOAgvVCYaU4ySRek1sgyFhJ403QFHiVEmJHwtybO1gs8Hr5+BETQX3War0qZngYGgtVZtoqd6vFSk/UwdZElYqyjrF4HXUeFspIi9IGKf4j92pKGAdCYMVsbcV3kRF0N+R8LUd5PCsIGWoxDtBkCI0nKofdJQxT+LtZflvuc8Q3CjwWkq8KwUpHzkK/NmSsclCL0nseQdj5FRH5CNHSgtLiW80Of5HU9Hhlsga9bnBq3fEVltKfO5IaSTmGjjc4J0otcP7QsJUSQM8pEj5/wCuUuC2DWz8AAAAAElFTkSuQmCC"); } PK!Î_ïn——Hfile-manager-advanced/application/library/codemirror/theme/liquibyte.cssnu„[µü¤.cm-s-liquibyte.CodeMirror { background-color: #000; color: #fff; line-height: 1.2em; font-size: 1em; } .cm-s-liquibyte .CodeMirror-focused .cm-matchhighlight { text-decoration: underline; text-decoration-color: #0f0; text-decoration-style: wavy; } .cm-s-liquibyte .cm-trailingspace { text-decoration: line-through; text-decoration-color: #f00; text-decoration-style: dotted; } .cm-s-liquibyte .cm-tab { text-decoration: line-through; text-decoration-color: #404040; text-decoration-style: dotted; } .cm-s-liquibyte .CodeMirror-gutters { background-color: #262626; border-right: 1px solid #505050; padding-right: 0.8em; } .cm-s-liquibyte .CodeMirror-gutter-elt div { font-size: 1.2em; } .cm-s-liquibyte .CodeMirror-guttermarker { } .cm-s-liquibyte .CodeMirror-guttermarker-subtle { } .cm-s-liquibyte .CodeMirror-linenumber { color: #606060; padding-left: 0; } .cm-s-liquibyte .CodeMirror-cursor { border-left: 1px solid #eee; } .cm-s-liquibyte span.cm-comment { color: #008000; } .cm-s-liquibyte span.cm-def { color: #ffaf40; font-weight: bold; } .cm-s-liquibyte span.cm-keyword { color: #c080ff; font-weight: bold; } .cm-s-liquibyte span.cm-builtin { color: #ffaf40; font-weight: bold; } .cm-s-liquibyte span.cm-variable { color: #5967ff; font-weight: bold; } .cm-s-liquibyte span.cm-string { color: #ff8000; } .cm-s-liquibyte span.cm-number { color: #0f0; font-weight: bold; } .cm-s-liquibyte span.cm-atom { color: #bf3030; font-weight: bold; } .cm-s-liquibyte span.cm-variable-2 { color: #007f7f; font-weight: bold; } .cm-s-liquibyte span.cm-variable-3, .cm-s-liquibyte span.cm-type { color: #c080ff; font-weight: bold; } .cm-s-liquibyte span.cm-property { color: #999; font-weight: bold; } .cm-s-liquibyte span.cm-operator { color: #fff; } .cm-s-liquibyte span.cm-meta { color: #0f0; } .cm-s-liquibyte span.cm-qualifier { color: #fff700; font-weight: bold; } .cm-s-liquibyte span.cm-bracket { color: #cc7; } .cm-s-liquibyte span.cm-tag { color: #ff0; font-weight: bold; } .cm-s-liquibyte span.cm-attribute { color: #c080ff; font-weight: bold; } .cm-s-liquibyte span.cm-error { color: #f00; } .cm-s-liquibyte div.CodeMirror-selected { background-color: rgba(255, 0, 0, 0.25); } .cm-s-liquibyte span.cm-compilation { background-color: rgba(255, 255, 255, 0.12); } .cm-s-liquibyte .CodeMirror-activeline-background { background-color: rgba(0, 255, 0, 0.15); } /* Default styles for common addons */ .cm-s-liquibyte .CodeMirror span.CodeMirror-matchingbracket { color: #0f0; font-weight: bold; } .cm-s-liquibyte .CodeMirror span.CodeMirror-nonmatchingbracket { color: #f00; font-weight: bold; } .CodeMirror-matchingtag { background-color: rgba(150, 255, 0, .3); } /* Scrollbars */ /* Simple */ .cm-s-liquibyte div.CodeMirror-simplescroll-horizontal div:hover, .cm-s-liquibyte div.CodeMirror-simplescroll-vertical div:hover { background-color: rgba(80, 80, 80, .7); } .cm-s-liquibyte div.CodeMirror-simplescroll-horizontal div, .cm-s-liquibyte div.CodeMirror-simplescroll-vertical div { background-color: rgba(80, 80, 80, .3); border: 1px solid #404040; border-radius: 5px; } .cm-s-liquibyte div.CodeMirror-simplescroll-vertical div { border-top: 1px solid #404040; border-bottom: 1px solid #404040; } .cm-s-liquibyte div.CodeMirror-simplescroll-horizontal div { border-left: 1px solid #404040; border-right: 1px solid #404040; } .cm-s-liquibyte div.CodeMirror-simplescroll-vertical { background-color: #262626; } .cm-s-liquibyte div.CodeMirror-simplescroll-horizontal { background-color: #262626; border-top: 1px solid #404040; } /* Overlay */ .cm-s-liquibyte div.CodeMirror-overlayscroll-horizontal div, div.CodeMirror-overlayscroll-vertical div { background-color: #404040; border-radius: 5px; } .cm-s-liquibyte div.CodeMirror-overlayscroll-vertical div { border: 1px solid #404040; } .cm-s-liquibyte div.CodeMirror-overlayscroll-horizontal div { border: 1px solid #404040; } PK!v#¡¾¾Efile-manager-advanced/application/library/codemirror/theme/cobalt.cssnu„[µü¤.cm-s-cobalt.CodeMirror { background: #002240; color: white; } .cm-s-cobalt div.CodeMirror-selected { background: #b36539; } .cm-s-cobalt .CodeMirror-line::selection, .cm-s-cobalt .CodeMirror-line > span::selection, .cm-s-cobalt .CodeMirror-line > span > span::selection { background: rgba(179, 101, 57, .99); } .cm-s-cobalt .CodeMirror-line::-moz-selection, .cm-s-cobalt .CodeMirror-line > span::-moz-selection, .cm-s-cobalt .CodeMirror-line > span > span::-moz-selection { background: rgba(179, 101, 57, .99); } .cm-s-cobalt .CodeMirror-gutters { background: #002240; border-right: 1px solid #aaa; } .cm-s-cobalt .CodeMirror-guttermarker { color: #ffee80; } .cm-s-cobalt .CodeMirror-guttermarker-subtle { color: #d0d0d0; } .cm-s-cobalt .CodeMirror-linenumber { color: #d0d0d0; } .cm-s-cobalt .CodeMirror-cursor { border-left: 1px solid white; } .cm-s-cobalt span.cm-comment { color: #08f; } .cm-s-cobalt span.cm-atom { color: #845dc4; } .cm-s-cobalt span.cm-number, .cm-s-cobalt span.cm-attribute { color: #ff80e1; } .cm-s-cobalt span.cm-keyword { color: #ffee80; } .cm-s-cobalt span.cm-string { color: #3ad900; } .cm-s-cobalt span.cm-meta { color: #ff9d00; } .cm-s-cobalt span.cm-variable-2, .cm-s-cobalt span.cm-tag { color: #9effff; } .cm-s-cobalt span.cm-variable-3, .cm-s-cobalt span.cm-def, .cm-s-cobalt .cm-type { color: white; } .cm-s-cobalt span.cm-bracket { color: #d8d8d8; } .cm-s-cobalt span.cm-builtin, .cm-s-cobalt span.cm-special { color: #ff9e59; } .cm-s-cobalt span.cm-link { color: #845dc4; } .cm-s-cobalt span.cm-error { color: #9d1e15; } .cm-s-cobalt .CodeMirror-activeline-background { background: #002D57; } .cm-s-cobalt .CodeMirror-matchingbracket { outline:1px solid grey;color:white !important; } PK!¥ý å å Gfile-manager-advanced/application/library/codemirror/theme/material.cssnu„[µü¤/* Name: material Author: Mattia Astorino (http://github.com/equinusocio) Website: https://material-theme.site/ */ .cm-s-material.CodeMirror { background-color: #263238; color: #EEFFFF; } .cm-s-material .CodeMirror-gutters { background: #263238; color: #546E7A; border: none; } .cm-s-material .CodeMirror-guttermarker, .cm-s-material .CodeMirror-guttermarker-subtle, .cm-s-material .CodeMirror-linenumber { color: #546E7A; } .cm-s-material .CodeMirror-cursor { border-left: 1px solid #FFCC00; } .cm-s-material.cm-fat-cursor .CodeMirror-cursor { background-color: #5d6d5c80 !important; } .cm-s-material .cm-animate-fat-cursor { background-color: #5d6d5c80 !important; } .cm-s-material div.CodeMirror-selected { background: rgba(128, 203, 196, 0.2); } .cm-s-material.CodeMirror-focused div.CodeMirror-selected { background: rgba(128, 203, 196, 0.2); } .cm-s-material .CodeMirror-line::selection, .cm-s-material .CodeMirror-line>span::selection, .cm-s-material .CodeMirror-line>span>span::selection { background: rgba(128, 203, 196, 0.2); } .cm-s-material .CodeMirror-line::-moz-selection, .cm-s-material .CodeMirror-line>span::-moz-selection, .cm-s-material .CodeMirror-line>span>span::-moz-selection { background: rgba(128, 203, 196, 0.2); } .cm-s-material .CodeMirror-activeline-background { background: rgba(0, 0, 0, 0.5); } .cm-s-material .cm-keyword { color: #C792EA; } .cm-s-material .cm-operator { color: #89DDFF; } .cm-s-material .cm-variable-2 { color: #EEFFFF; } .cm-s-material .cm-variable-3, .cm-s-material .cm-type { color: #f07178; } .cm-s-material .cm-builtin { color: #FFCB6B; } .cm-s-material .cm-atom { color: #F78C6C; } .cm-s-material .cm-number { color: #FF5370; } .cm-s-material .cm-def { color: #82AAFF; } .cm-s-material .cm-string { color: #C3E88D; } .cm-s-material .cm-string-2 { color: #f07178; } .cm-s-material .cm-comment { color: #546E7A; } .cm-s-material .cm-variable { color: #f07178; } .cm-s-material .cm-tag { color: #FF5370; } .cm-s-material .cm-meta { color: #FFCB6B; } .cm-s-material .cm-attribute { color: #C792EA; } .cm-s-material .cm-property { color: #C792EA; } .cm-s-material .cm-qualifier { color: #DECB6B; } .cm-s-material .cm-variable-3, .cm-s-material .cm-type { color: #DECB6B; } .cm-s-material .cm-error { color: rgba(255, 255, 255, 1.0); background-color: #FF5370; } .cm-s-material .CodeMirror-matchingbracket { text-decoration: underline; color: white !important; } PK!ôT9 ¢¢Ffile-manager-advanced/application/library/codemirror/theme/isotope.cssnu„[µü¤/* Name: Isotope Author: David Desandro / Jan T. Sott CodeMirror template by Jan T. Sott (https://github.com/idleberg/base16-codemirror) Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) */ .cm-s-isotope.CodeMirror {background: #000000; color: #e0e0e0;} .cm-s-isotope div.CodeMirror-selected {background: #404040 !important;} .cm-s-isotope .CodeMirror-gutters {background: #000000; border-right: 0px;} .cm-s-isotope .CodeMirror-linenumber {color: #808080;} .cm-s-isotope .CodeMirror-cursor {border-left: 1px solid #c0c0c0 !important;} .cm-s-isotope span.cm-comment {color: #3300ff;} .cm-s-isotope span.cm-atom {color: #cc00ff;} .cm-s-isotope span.cm-number {color: #cc00ff;} .cm-s-isotope span.cm-property, .cm-s-isotope span.cm-attribute {color: #33ff00;} .cm-s-isotope span.cm-keyword {color: #ff0000;} .cm-s-isotope span.cm-string {color: #ff0099;} .cm-s-isotope span.cm-variable {color: #33ff00;} .cm-s-isotope span.cm-variable-2 {color: #0066ff;} .cm-s-isotope span.cm-def {color: #ff9900;} .cm-s-isotope span.cm-error {background: #ff0000; color: #c0c0c0;} .cm-s-isotope span.cm-bracket {color: #e0e0e0;} .cm-s-isotope span.cm-tag {color: #ff0000;} .cm-s-isotope span.cm-link {color: #cc00ff;} .cm-s-isotope .CodeMirror-matchingbracket { text-decoration: underline; color: white !important;} .cm-s-isotope .CodeMirror-activeline-background { background: #202020; } PK!ÈV¸û  Ffile-manager-advanced/application/library/codemirror/theme/elegant.cssnu„[µü¤.cm-s-elegant span.cm-number, .cm-s-elegant span.cm-string, .cm-s-elegant span.cm-atom { color: #762; } .cm-s-elegant span.cm-comment { color: #262; font-style: italic; line-height: 1em; } .cm-s-elegant span.cm-meta { color: #555; font-style: italic; line-height: 1em; } .cm-s-elegant span.cm-variable { color: black; } .cm-s-elegant span.cm-variable-2 { color: #b11; } .cm-s-elegant span.cm-qualifier { color: #555; } .cm-s-elegant span.cm-keyword { color: #730; } .cm-s-elegant span.cm-builtin { color: #30a; } .cm-s-elegant span.cm-link { color: #762; } .cm-s-elegant span.cm-error { background-color: #fdd; } .cm-s-elegant .CodeMirror-activeline-background { background: #e8f2ff; } .cm-s-elegant .CodeMirror-matchingbracket { outline:1px solid grey; color:black !important; } PK!U{«¾Õ^Õ^<file-manager-advanced/application/library/js/elfinder.min.jsnu„[µü¤/*! * elFinder - file manager for web * Version 2.1.69 (2026-05-07) * http://elfinder.org * * Copyright 2009-2026, Studio 42 * Licensed under a 3-clauses BSD license */ !function(e,t){if("function"==typeof define&&define.amd)define(["jquery","jquery-ui"],t);else if("undefined"!=typeof exports){var n,i;try{n=require("jquery"),i=require("jquery-ui")}catch(a){}module.exports=t(n,i)}else t(e.jQuery,e.jQuery.ui,!0)}(this,function(e,t,n){n=n||!1;var i=function(t,n,a){var o,r,s,l,c,d,p,u=this,h=[],f=["button","tooltip"],m=e(t),g=e.extend(!0,{},e._data(m.get(0),"events")),v=e("
    ").append(m.contents()).attr("class",m.attr("class")||"").attr("style",m.attr("style")||""),b=m.attr("id")||m.attr("id","elfauto"+e(".elfinder").length).attr("id"),y="elfinder-"+b,w="mousedown."+y,x="keydown."+y,k="keypress."+y,C="keyup."+y,z=!1,T=!1,A=["enable","disable","load","open","reload","select","add","remove","change","dblclick","getfile","lockfiles","unlockfiles","selectfiles","unselectfiles","dragstart","dragstop","search","searchend","viewchange"],j="",O={path:"",url:"",tmbUrl:"",disabled:[],separator:"/",archives:[],extract:[],copyOverwrite:!0,uploadOverwrite:!0,uploadMaxSize:0,jpgQuality:100,tmbCrop:!1,tmbReqCustomData:!1,tmb:!1},S={},I={},M={},F={},E=[],D={},U={},P=[],R={},q=[],H=[],_=new u.command(u),N="auto",L=400,W=null,B="sounds/",$="",K=!1,V=e(document.createElement("audio")).hide().appendTo("body")[0],X=0,G="",J=null,Y=function(t){var n,i,a,o,r,s,l,c,d={},p={};u.api>=2.1?(u.commandMap=t.options.uiCmdMap&&Object.keys(t.options.uiCmdMap).length?t.options.uiCmdMap:{},G!==JSON.stringify(u.commandMap)&&(G=JSON.stringify(u.commandMap))):u.options.sync=0,t.init?(I={},F={}):(s=j,n="elfinder-subtree-loaded "+u.res("class","navexpand"),r=u.res("class","navcollapse"),i=Object.keys(I),a=function(e){if(!I[e])return!0;var t="directory"===I[e].mime,i=I[e].phash;!(!t||d[i]||!p[i]&&u.navHash2Elm(I[e].hash).is(":hidden")&&u.navHash2Elm(i).next(".elfinder-navbar-subtree").children().length>100)||!t&&i===j||R[e]?t&&(p[i]=!0):(t&&!d[i]&&(d[i]=!0,u.navHash2Elm(i).removeClass(n).next(".elfinder-navbar-subtree").empty()),ee(I[e]))},o=function(){i.length&&(J&&J._abort(),J=u.asyncJob(a,i,{interval:20,numPerOnce:100}).done(function(){var t=u.storage("hide")||{items:{}};Object.keys(M).length&&e.each(M,function(e){t.items[e]||delete M[e]})}))},u.trigger("filesgc").one("filesgc",function(){i=[]}),u.one("opendone",function(){s!==j&&(m.data("lazycnt")?u.one("lazydone",o):o())})),u.sorters={},j=t.cwd.hash,Q(t.files),I[j]?(c=u.diff([t.cwd],!0),c.changed.length&&(Q(c.changed,"change"),u.change({changed:c.changed}))):Q([t.cwd]),t.changed&&t.changed.length&&Q(t.changed,"change"),l=JSON.stringify(u.sorters),$!==l&&(u.trigger("sorterupdate"),$=l),u.lastDir(j),u.autoSync()},Q=function(t,n){var i,a,o,r,s,n=n||"files",l=["sizeInfo","encoding"],c={name:!0,perm:!0,date:!0,size:!0,kind:!0},d=!u.sorters._checked&&"files"===n,p=t.length,h=function(t){var n=t||{},i=[];e.each(u.sortRules,function(e){(c[e]||"undefined"!=typeof n[e]||"mode"===e&&"undefined"!=typeof n.perm)&&i.push(e)}),u.sorters=u.arrayFlip(i,!0),u.sorters._checked=!0},f={},m=u.storage("hide")||{},g=m.items||{};for(a=0;p>a;a++)if(i=Object.assign({},t[a]),s=!(m.show||!g[i.hash]),i.name&&i.hash&&i.mime){if(s||(d&&i.phash===j&&(h(i),d=!1),!i.phash||"add"!==n&&("change"!==n||I[i.hash]&&i.size===I[i.hash])||(r=u.parents(i.phash))&&e.each(r,function(){f[this]=!0})),I[i.hash]){for(o=0;oi;i++)void 0===D[e[i]]&&(D[e[i]]=[]),D[e[i]][n?"unshift":"push"](t);return this},this.unbind=function(t,n){var i,a,o,r;for(t=(""+t).toLowerCase().split(/\s+/),a=t.length,i=0;a>i;i++)(o=D[t[i]])&&(r=e.inArray(n,o),r>-1&&o.splice(r,1));return n=null,this},this.trigger=function(t,n,i){var a,o,r,s,l=t.toLowerCase(),c="object"==typeof n,d=D[l]||[],p=[];if(this.debug("event-"+l,n),c&&"undefined"!=typeof i||(i=!0),o=d.length){for(s=e.Event(l),n&&(n._getEvent=function(){return s}),i&&(s.data=n),a=0;o>a;a++)if(d[a])if(d[a].done)p.push(d[a].done);else{if(d[a].length&&!i){if("undefined"==typeof r)try{r=JSON.stringify(n)}catch(h){r=!1}s.data=r?JSON.parse(r):n}try{if(d[a].call(s,s,this)===!1||s.isDefaultPrevented()){this.debug("event-stoped",s.type);break}}catch(f){window.console&&window.console.log&&window.console.log(f)}}if(o=p.length)for(a=0;o>a;a++)try{if(p[a].call(s,s,this)===!1||s.isDefaultPrevented()){this.debug("event-stoped",s.type+"(done)");break}}catch(f){window.console&&window.console.log&&window.console.log(f)}this.toUnbindEvents[l]&&this.toUnbindEvents[l].length&&(e.each(this.toUnbindEvents[l],function(e,t){u.unbind(t.type,t.callback)}),delete this.toUnbindEvents[l])}return this},this.getListeners=function(e){return e?D[e.toLowerCase()]:D},this.baseUrl=function(){var t,n,i;return u.options.baseUrl?u.options.baseUrl:(i="",t=null,e("head > script").each(function(){return this.src&&this.src.match(/js\/elfinder(?:-[a-z0-9_-]+)?\.(?:min|full)\.js(?:$|\?)/i)?(t=e(this),!1):void 0}),t&&(i=t.attr("src").replace(/js\/[^\/]+$/,""),i.match(/^(https?\/\/|\/)/)||(n=e("head > base[href]").attr("href"))&&(i=n.replace(/\/$/,"")+"/"+i)),""!==i?u.options.baseUrl=i:(u.options.baseUrl||(u.options.baseUrl="./"),i=u.options.baseUrl),i)}(),this.i18nBaseUrl=(this.options.i18nBaseUrl||this.baseUrl+"js/i18n").replace(/\/$/,"")+"/",this.workerBaseUrl=(this.options.workerBaseUrl||this.baseUrl+"js/worker").replace(/\/$/,"")+"/",this.options.maxErrorDialogs=Math.max(1,parseInt(this.options.maxErrorDialogs||5)),O.dispInlineRegex=this.options.dispInlineRegex,this.options.cssAutoLoad&&!function(){var t=u.baseUrl,n=e('head > link[href$="css/elfinder.min.css"],link[href$="css/elfinder.full.css"]:first').length,i=function(){m.data("cssautoloadHide")&&(m.data("cssautoloadHide").remove(),m.removeData("cssautoloadHide"))},a=function(){u.cssloaded||(i(),u.cssloaded=!0,u.trigger("cssloaded"))};n||(u.cssloaded=null),Array.isArray(u.options.cssAutoLoad)&&(u.options.themes["default"]?u.cssloaded===!0?u.loadCss(u.options.cssAutoLoad):u.bind("cssloaded",function(){u.loadCss(u.options.cssAutoLoad)}):(u.options.themes=Object.assign({"default":{name:"default",cssurls:u.options.cssAutoLoad}},u.options.themes),u.options.theme||(u.options.theme="default"))),null===u.cssloaded&&(m.addClass("elfinder").data("cssautoloadHide",e("")),e("head").append(m.data("cssautoloadHide")),u.options.themes["default"]||(u.options.themes=Object.assign({"default":{name:"default",cssurls:"css/theme.css",author:"elFinder Project",license:"3-clauses BSD"}},u.options.themes),u.options.theme||(u.options.theme="default")),requestAnimationFrame(function(){"hidden"===m.css("visibility")?u.loadCss([t+"css/elfinder.min.css"],{dfd:e.Deferred().done(function(){a()}).fail(function(){i(),u.cssloaded||(u.cssloaded=!1,u.bind("init",function(){u.cssloaded||u.error(["errRead","CSS (elfinder.min)"])}))})}):a()}))}(),function(){var e,t=u.options.themes,n=Object.keys(t||{});n.length&&(e=u.storage("theme")||u.options.theme,t[e]||(e=n[0]),u.cssloaded?u.changeTheme(e):u.bind("cssloaded",function(){u.changeTheme(e)}))}(),this.optionProperties={icon:void 0,csscls:void 0,tmbUrl:void 0,uiCmdMap:{},netkey:void 0,disabled:[]},se||this.options.enableAlways||2!==e("body").children().length||(this.options.enableAlways=!0),this.options.debug===!0?this.options.debug="all":Array.isArray(this.options.debug)?!function(){var t={};e.each(u.options.debug,function(){t[this]=!0}),u.options.debug=t}():this.options.debug=!1,this.noConflicts={},this.noConflict=function(){e.each(f,function(t,n){e.fn[n]&&"function"==typeof e.fn[n].noConflict&&(u.noConflicts[n]=e.fn[n].noConflict())})},this.noConflict(),this.isCORS=!1,function(){if("undefined"!=typeof u.options.cors&&null!==u.options.cors)u.isCORS=!!u.options.cors;else{var t,i=document.createElement("a"),a=window.location.protocol,o=function(e){return e=e&&":"!==e?e:a,"https:"===e?/\:443$/:/\:80$/},r=window.location.host.replace(o(a),"");i.href=n.url,n.urlUpload&&n.urlUpload!==n.url&&(t=document.createElement("a"),t.href=n.urlUpload),(r!==i.host.replace(o(i.protocol),"")||":"!==i.protocol&&""!==i.protocol&&a!==i.protocol||t&&(r!==t.host.replace(o(t.protocol),"")||":"!==t.protocol&&""!==t.protocol&&a!==t.protocol))&&(u.isCORS=!0)}u.isCORS&&(e.isPlainObject(u.options.customHeaders)||(u.options.customHeaders={}),e.isPlainObject(u.options.xhrFields)||(u.options.xhrFields={}),u.options.requestType="post",u.options.customHeaders["X-Requested-With"]="XMLHttpRequest",u.options.xhrFields.withCredentials=!0)}(),this.requestType=/^(get|post)$/i.test(this.options.requestType)?this.options.requestType.toLowerCase():"get",s=Math.max(parseInt(this.options.requestMaxConn),1),this.optsCustomData=e.isPlainObject(this.options.customData)?this.options.customData:{},this.customData=Object.assign({},this.optsCustomData),this.prevCustomData=null,this.customHeaders=e.isPlainObject(this.options.customHeaders)?this.options.customHeaders:{},this.csrfHeaderName="X-elFinder-CSRF",this.csrfResponseKey="csrf",this.csrfReloadKey="csrfReload",this.setCsrfToken=function(e){"string"==typeof e&&e?u.customHeaders[u.csrfHeaderName]=e:delete u.customHeaders[u.csrfHeaderName]},this.isCsrfReloadResponse=function(e,t){return!(!e||403!==e.status||e._csrfRefresh||!t||!t[u.csrfReloadKey])},this.refreshCsrfToken=function(){var e=u.cwd(),t=e&&e.hash||u.lastDir("")||u.startDir();return ae&&"pending"===ae.state()?ae:ae=u.request({data:{cmd:"open",target:t,init:1,tree:1},preventDefault:!0,preventFail:!0,_csrfRefresh:!0}).always(function(){ae=null})},this.handleCsrfReload=function(e,t){return u.isCsrfReloadResponse(e,t)?(u.refreshCsrfToken(),!0):!1},this.xhrFields=e.isPlainObject(this.options.xhrFields)?this.options.xhrFields:{},this.replaceXhrSend=function(){p||(p=XMLHttpRequest.prototype.send),XMLHttpRequest.prototype.send=function(){var t=this;return u.customHeaders&&e.each(u.customHeaders,function(e){t.setRequestHeader(e,this)}),u.xhrFields&&e.each(u.xhrFields,function(e){e in t&&(t[e]=this)}),p.apply(this,arguments)}},this.restoreXhrSend=function(){p&&(XMLHttpRequest.prototype.send=p)},this.abortCmdsOnOpen=this.options.abortCmdsOnOpen||["tmb","parents"],this.navPrefix="nav"+(i.prototype.uniqueid?i.prototype.uniqueid:"")+"-",this.cwdPrefix=i.prototype.uniqueid?"cwd"+i.prototype.uniqueid+"-":"",++i.prototype.uniqueid,this.uploadURL=n.urlUpload||n.url,this.namespace=y,this.today=new Date(re.getFullYear(),re.getMonth(),re.getDate()).getTime()/1e3,this.yesterday=this.today-86400,l=this.options.UTCDate?"UTC":"",this.getHours="get"+l+"Hours",this.getMinutes="get"+l+"Minutes",this.getSeconds="get"+l+"Seconds",this.getDate="get"+l+"Date",this.getDay="get"+l+"Day",this.getMonth="get"+l+"Month",this.getFullYear="get"+l+"FullYear",this.zIndex,this.searchStatus={state:0,query:"",target:"",mime:"",mixed:!1,ininc:!1},this.lang=this.storage("lang")||this.options.lang,"jp"===this.lang&&(this.lang=this.options.lang="ja"),this.viewType=this.storage("view")||this.options.defaultView||"icons",this.sortType=this.storage("sortType")||this.options.sortType||"name",this.sortOrder=this.storage("sortOrder")||this.options.sortOrder||"asc",this.sortStickFolders=this.storage("sortStickFolders"),null===this.sortStickFolders?this.sortStickFolders=!!this.options.sortStickFolders:this.sortStickFolders=!!this.sortStickFolders,this.sortAlsoTreeview=this.storage("sortAlsoTreeview"),null===this.sortAlsoTreeview||null===this.options.sortAlsoTreeview?this.sortAlsoTreeview=!!this.options.sortAlsoTreeview:this.sortAlsoTreeview=!!this.sortAlsoTreeview,this.sortRules=e.extend(!0,{},this._sortRules,this.options.sortRules),e.each(this.sortRules,function(e,t){"function"!=typeof t&&delete u.sortRules[e]}),this.compare=this.compare.bind(this),this.notifyDelay=this.options.notifyDelay>0?parseInt(this.options.notifyDelay):500,this.draggingUiHelper=null,this.droppable={greedy:!0,tolerance:"pointer",accept:".elfinder-cwd-file-wrapper,.elfinder-navbar-dir,.elfinder-cwd-file,.elfinder-cwd-filename",hoverClass:this.res("class","adroppable"),classes:{"ui-droppable-hover":this.res("class","adroppable")},autoDisable:!0,drop:function(t,n){var i,a,o,r=e(this),s=e.grep(n.helper.data("files")||[],function(e){return!!e}),l=[],c=[],d=[],p=n.helper.hasClass("elfinder-drag-helper-plus"),h="class";if("undefined"==typeof t.button||n.helper.data("namespace")!==y||!u.insideWorkzone(t.pageX,t.pageY))return!1;for(a=r.hasClass(u.res(h,"cwdfile"))?u.cwdId2Hash(r.attr("id")):r.hasClass(u.res(h,"navdir"))?u.navId2Hash(r.attr("id")):j,i=s.length;i--;)o=s[i],o!=a&&I[o].phash!=a?l.push(o):(p&&o!==a&&I[a].write?c:d).push(o);return d.length?!1:(n.helper.data("droped",!0),c.length&&(n.helper.hide(),u.exec("duplicate",c,{_userAction:!0})),void(l.length&&(n.helper.hide(),u.clipboard(l,!p),u.exec("paste",a,{_userAction:!0},a).always(function(){u.clipboard([]),u.trigger("unlockfiles",{files:s})}),u.trigger("drop",{files:s}))))}},this.enabled=function(){return z&&this.visible()},this.visible=function(){return m[0].elfinder&&m.is(":visible")},this.isRoot=function(e){return!(!e.isroot&&e.phash)},this.root=function(t,n){t=t||j;var i,a;if(!n&&(e.each(u.roots,function(e,n){return 0===t.indexOf(e)?(i=n,!1):void 0}),i))return i;for(i=I[t];i&&i.phash&&(n||!i.isroot);)i=I[i.phash];if(i)return i.hash;for(;a in I&&I.hasOwnProperty(a);)if(i=I[a],"directory"===i.mime&&!i.phash&&i.read)return i.hash;return""},this.cwd=function(){return I[j]||{}},this.option=function(t,n){var i,a;return n=n||j,u.optionsByHashes[n]&&"undefined"!=typeof u.optionsByHashes[n][t]?u.optionsByHashes[n][t]:!u.hasVolOptions||j===n||(a=u.file(n))&&a.phash===j?S[t]||"":(i="",e.each(u.volOptions,function(e,a){return 0===n.indexOf(e)?(i=a[t]||"",!1):void 0}),i)},this.getDisabledCmds=function(t,n){var i={hidden:!0};return Array.isArray(t)||(t=[t]),e.each(t,function(e,t){var n=u.option("disabledFlip",t);n&&Object.assign(i,n)}),n?i:Object.keys(i)},this.file=function(e,t){return e?I[e]||(t?M[e]:void 0):void 0},this.files=function(t){var n={};return t?F[t]?(e.each(F[t],function(e){I[e]?n[e]=I[e]:delete F[t][e]}),Object.assign({},n)):{}:Object.assign({},I)},this.parents=function(e){for(var t,n=[];e&&(t=this.file(e));)n.unshift(t.hash),e=t.phash;return n},this.path2array=function(e,t){for(var n,i=[];e;){if(!(n=I[e])||!n.hash){i=[];break}i.unshift(t&&n.i18?n.i18:n.name),e=n.isroot?null:n.phash}return i},this.path=function(t,n,i){var a=I[t]&&I[t].path?I[t].path:this.path2array(t,n).join(S.separator);if(i&&I[t]){i=Object.assign({notify:{type:"parents",cnt:1,hideCnt:!0}},i);var o,r=e.Deferred(),s=i.notify,l=!1,c=function(){u.request({data:{cmd:"parents",target:I[t].phash},notify:s,preventFail:!0}).done(d).fail(function(){r.reject()})},d=function(){u.one("parentsdone",function(){a=u.path(t,n),""===a&&l?(l=!1,c()):(s&&(clearTimeout(o),s.cnt=-parseInt(s.cnt||0),u.notify(s)),r.resolve(a))})};return a?r.resolve(a):(u.ui.tree?(s&&(o=setTimeout(function(){u.notify(s)},u.notifyDelay)),l=!0,d(!0)):c(),r)}return a},this.url=function(t,n){var i,a=I[t],o=n||{},r=o.async||!1,s=o.temporary||!1,l=o.onetime&&u.option("onetimeUrl",t)||!1,c=o.absurl||!1,d=r||l?e.Deferred():null,p=function(e){return e&&c&&(e=u.convAbsUrl(e)),e},h=function(n){if(n)return p(n);if(a.url)return p(a.url);if("undefined"==typeof i&&(i=f()),i)return p(i+e.map(u.path2array(t),function(e){return encodeURIComponent(e)}).slice(1).join("/"));var o=Object.assign({},u.customData,{cmd:"file",target:a.hash});return u.oldAPI&&(o.cmd="open",o.current=a.phash),p(u.options.url+(-1===u.options.url.indexOf("?")?"?":"&")+e.param(o,!0))},f=function(){return u.option("url",!u.isRoot(a)&&a.phash||a.hash)};if(!a||!a.read)return r?d.resolve(""):"";if(!l||a.url&&"1"!=a.url||(i=f()))if("1"==a.url||s&&!a.url&&!(i=f()))this.request({data:{cmd:"url",target:t,options:{temporary:s?1:0}},preventDefault:!0,options:{async:r},notify:r?{type:s?"file":"url",cnt:1,hideCnt:!0}:{},progressBar:o.progressBar}).done(function(e){a.url=e.url||""}).fail(function(){a.url=""}).always(function(){var e;return a.url&&s&&(e=a.url,a.url="1"),r?void d.resolve(h(e)):h(e)});else{if(!r)return h();d.resolve(h())}else r=!0,this.request({data:{cmd:"url",target:t,options:{onetime:1}},preventDefault:!0,options:{async:r},notify:{type:"file",cnt:1,hideCnt:!0},progressBar:o.progressBar}).done(function(e){d.resolve(p(e.url||""))}).fail(function(){d.resolve("")});return r?d:void 0},this.forExternalUrl=function(e,t){var n=u.option("onetimeUrl",e),i={async:!0,absurl:!0};return i[n?"onetime":"temporary"]=!0,u.url(e,Object.assign({},t,i))},this.openUrl=function(t,n,i,a){var o=I[t],r="",s=(a||{}).onetimeSize||5242880;return o&&o.read?n&&"sameorigin"!==n||(o.url?1!=o.url&&(r=o.url):S.url&&0===o.hash.indexOf(u.cwd().volumeid)&&(r=S.url+e.map(this.path2array(t),function(e){return encodeURIComponent(e)}).slice(1).join("/")),n&&!this.isSameOrigin(r)||!r)?i&&this.hasParrotHeaders()?(a?delete a.onetimeSize:a={},!a.onetime&&!a.temporary&&o.size>s&&(o.mime.match(/^video|audio/)?a.temporary=!0:a.onetime=!0),a.onetime||a.temporary?this.url(o.hash,Object.assign({async:!0},a)).done(function(e){i(e)}).fail(function(){i("")}):this.getContents(t,"blob",a).done(function(e){r=(window.URL||window.webkitURL).createObjectURL(e),i(r)}).fail(function(){i("")})):(r=this.options.url,r=r+(-1===r.indexOf("?")?"?":"&")+(this.oldAPI?"cmd=open¤t="+o.phash:"cmd=file")+"&target="+o.hash+"&_t="+(o.ts||parseInt(+new Date/1e3)),n===!0&&(r+="&download=1"),e.each(this.customData,function(e,t){r+="&"+encodeURIComponent(e)+"="+encodeURIComponent(t)}),i?void i(r):r):(r+=(r.match(/\?/)?"&":"?")+"_".repeat((r.match(/[\?&](_+)t=/g)||["&t="]).sort().shift().match(/[\?&](_*)t=/)[1].length+1)+"t="+(o.ts||parseInt(+new Date/1e3)),i?void i(r):r):""},this.tmb=function(t){var n,i,a="elfinder-cwd-bgurl",o="",r={},s=0;return e.isPlainObject(t)&&(u.searchStatus.state&&0!==t.hash.indexOf(u.cwd().volumeid)?(n=u.option("tmbUrl",t.hash),i=u.option("tmbCrop",t.hash)):(n=S.tmbUrl,i=S.tmbCrop),i&&(a+=" elfinder-cwd-bgurl-crop"),"self"===n&&0===t.mime.indexOf("image/")?(o=u.openUrl(t.hash),a+=" elfinder-cwd-bgself"):(u.oldAPI||n)&&t&&t.tmb&&1!=t.tmb?o=n+t.tmb:u.newAPI&&t&&t.tmb&&1!=t.tmb&&(o=t.tmb),o)?("self"!==n&&(t.ts&&(r._t=t.ts),S.tmbReqCustomData&&Object.keys(this.customData).length&&(r=Object.assign(r,this.customData)),Object.keys(r).length&&(o+=o.match(/\?/)?"&":"?",e.each(r,function(e,t){o+=(0===s++?"":"&")+encodeURIComponent(e)+"="+encodeURIComponent(t)}))),{url:o,className:a}):!1},this.selected=function(){return E.slice(0)},this.selectedFiles=function(){return e.map(E,function(e){return I[e]?Object.assign({},I[e]):null})},this.fileByName=function(e,t){var n;for(n in I)if(I.hasOwnProperty(n)&&I[n].phash==t&&I[n].name==e)return I[n]},this.validResponse=function(e,t){return t.error||this.rules[this.rules[e]?e:"defaults"](t)},this.returnBytes=function(e){var t;return isNaN(e)?(e||(e=""),e=e.replace(/b$/i,""),t=e.charAt(e.length-1).toLowerCase(),e=e.replace(/[tgmk]$/i,""),"t"==t?e=1024*e*1024*1024*1024:"g"==t?e=1024*e*1024*1024:"m"==t?e=1024*e*1024:"k"==t&&(e=1024*e),e=isNaN(e)?0:parseInt(e)):(e=parseInt(e),1>e&&(e=0)),e},this.request=function(t){var n,i,a,o,r=this,l=this.options,c=e.Deferred(),d=(+new Date).toString(16)+Math.floor(1e3*Math.random()).toString(16),p=Object.assign({},r.customData,{mimes:l.onlyMimes},t.data||t),u=p.cmd,h="binary"===(t.options||{}).dataType,f=!t.asNotOpen&&"open"===u,m=1===p.tree,g=!(h||t.preventDefault||t.preventFail),v=!(h||t.preventDefault||t.preventDone),b=t.progressVal||20,y=null,w=!1,x=t.progressBar?{}:t.notify?Object.assign({progress:b*t.notify.cnt},t.notify):{},k=!!t.cancel,C=h||!!t.raw,z=t.syncOnFail,T=!!t.lazy,A=t.prepare,I=t.navigate,M=(t.options||{}).cache,F=Object.assign({url:l.url,async:!0,type:this.requestType,dataType:"json",cache:r.api>=2.1029,data:p,headers:this.customHeaders,xhrFields:this.xhrFields,progress:function(e){var n=e.loaded/e.total*100;if(y&&clearTimeout(y),t.progressBar)try{t.progressBar.width(n+"%")}catch(e){}else w&&x.type&&(n*=x.cnt,n>b&&(r.notify({type:x.type,progress:n-b,cnt:0,hideCnt:x.hideCnt}),b=n));if(t.progress)try{t.progress(e)}catch(e){}}},t.options||{}),E=function(t){t.warning&&r.error(t.warning),f?Y(t):r.updateCache(t),r.lazy(function(){t.removed&&t.removed.length&&r.remove(t),t.added&&t.added.length&&r.add(t),t.changed&&t.changed.length&&r.change(t)}).then(function(){return r.lazy(function(){r.trigger(u,t,!1)})}).then(function(){return r.lazy(function(){r.trigger(u+"done")})}).then(function(){t.toasts&&Array.isArray(t.toasts)&&e.each(t.toasts,function(){this.msg&&r.toast(this)}),t.sync&&r.sync()})},D=function(e,t){var n,i,a=r.options.debug;switch(t){case"abort":n=e.quiet?"":["errConnect","errAbort"];break;case"timeout":n=["errConnect","errTimeout"];break;case"parsererror":n=["errResponse","errDataNotJSON"],e.responseText&&(!j||a&&("all"===a||a["backend-error"]))&&n.push(e.responseText);break;default:if(e.responseText)try{i=JSON.parse(e.responseText),e._elfinderResponse=i,i&&i.error&&(n=i.error)}catch(o){}if(!n)if(403==e.status)n=["errConnect","errAccess","HTTP error "+e.status];else if(404==e.status)n=["errConnect","errNotFound","HTTP error "+e.status];else if(e.status>=500)n=["errResponse","errServerError","HTTP error "+e.status];else{if(414==e.status&&"get"===F.type)return F.type="post",r.abortXHR(e),void(c.xhr=e=r.transport.send(F).fail(n).done(U));n=e.quiet?"":["errConnect","HTTP error "+e.status]}}r.trigger(u+"done"),c.reject({error:n},e,t)},U=function(t){if(r.currentReqCmd=u,t.debug&&r.responseDebug(t),r.setCustomHeaderByXhr(i),C)return r.abortXHR(i),t&&t.debug&&r.debug("backend-debug",t),c.resolve(t);if(!t)return c.reject({error:["errResponse","errDataEmpty"]},i,t);if(!e.isPlainObject(t))return c.reject({error:["errResponse","errDataNotJSON"]},i,t);if(f&&p.init&&Object.prototype.hasOwnProperty.call(t,r.csrfResponseKey)&&r.setCsrfToken(t[r.csrfResponseKey]),t.error)return f&&e.each(r.leafRoots,function(t,n){r.leafRoots[t]=e.grep(n,function(e){return e!==p.target})}),c.reject({error:t.error},i,t);var n=function(){var n,a=function(n){r.leafRoots[p.target]&&t[n]&&e.each(r.leafRoots[p.target],function(e,i){var a;(a=r.file(i))&&t[n].push(a)})},o=function(){r.textMimes={},e.each(r.res("mimes","text"),function(){r.textMimes[this.toLowerCase()]=!0})};return f&&!m?a("files"):"tree"===u&&a("tree"),t=r.normalize(t),r.validResponse(u,t)?(f&&(r.api||(r.api=t.api||1,"2.0"==r.api&&"undefined"!=typeof t.options.uploadMaxSize&&(r.api="2.1"),r.newAPI=r.api>=2,r.oldAPI=!r.newAPI),t.textMimes&&Array.isArray(t.textMimes)&&(r.resources.mimes.text=t.textMimes,o()),!r.textMimes&&o(),t.options&&(S=Object.assign({},O,t.options)),t.netDrivers&&(r.netDrivers=t.netDrivers),t.maxTargets&&(r.maxTargets=t.maxTargets),p.init&&(r.uplMaxSize=r.returnBytes(t.uplMaxSize),r.uplMaxFile=t.uplMaxFile?Math.min(parseInt(t.uplMaxFile),50):20)),"function"==typeof A&&A(t),I&&(n=I.target||"added",t[n]&&t[n].length&&r.one(u+"done",function(){var i=t[n],a=r.findCwdNodes(i),o=function(){var t=r.cwd().hash;return e.map(i,function(e){return e.phash&&t===e.phash?e.hash:null})},s=o(),l=function(t){var n,i,a,l=void 0,c=t.action?t.action.data:void 0;return(c||s.length)&&t.action&&(i=t.action.msg)&&(n=t.action.cmd)&&(!t.action.cwdNot||t.action.cwdNot!==r.cwd().hash)&&(a=t.action.done,c=t.action.data,l=e("
    ").append(e('").on("mouseenter mouseleave",function(t){e(this).toggleClass("ui-state-hover","mouseenter"==t.type)}).on("click",function(){r.exec(n,c||s,{_userAction:!0,_currentType:"toast",_currentNode:e(this)}),a&&r.one(n+"done",function(){"function"==typeof a?a():"select"===a&&r.trigger("selectfiles",{files:o()})})}))),delete t.action,t.extNode=l,t};I.toast||(I.toast={}),!I.noselect&&r.trigger("selectfiles",{files:r.searchStatus.state>1?e.map(i,function(e){return e.hash}):s}),a.length?(I.noscroll||(a.first().trigger("scrolltoview",{blink:!1}),r.resources.blink(a,"lookme")),e.isPlainObject(I.toast.incwd)&&r.toast(l(I.toast.incwd))):e.isPlainObject(I.toast.inbuffer)&&r.toast(l(I.toast.inbuffer))})),c.resolve(t),void(t.debug&&r.debug("backend-debug",t))):c.reject({error:t.norError||"errResponse"},i,t)};r.abortXHR(i),T?r.lazy(n):n()},P=function(e){i&&"pending"===i.state()&&(r.abortXHR(i,{quiet:!0,abort:!0}),(!e||"unload"!==e.type&&"destroy"!==e.type)&&r.autoSync())},R=function(e){if(r.trigger(u+"done"),"autosync"==e.type){if("stop"!=e.data.action)return}else if(!("unload"==e.type||"destroy"==e.type||"openxhrabort"==e.type||e.data.added&&e.data.added.length))return;P(e)},_=function(n){var s=function(){z=!1,c.reject()};if(n&&"cmd"===n)return u;if(f){if(ie&&"pending"===ie.state()){if(ie._target===p.target)return c.reject("openabort");ie.xhr?ie.xhr.queueAbort():ie.reject("openabort")}ie=c,ie._target=p.target}if(c.always(function(){delete F.headers["X-elFinderReqid"],f&&(ie=null)}).fail(function(t,n,i){var a,s;f&&"openabort"===t&&(t="",z=!1),a={cmd:u,err:t,xhr:n,rc:i},0===t&&ne.length&&(ne=e.grep(ne,function(e){return e("cmd")!==u})),r.trigger("requestError",a),a._getEvent&&a._getEvent().isDefaultPrevented()?(g=!1,z=!1,t&&(t.error="")):n&&r.handleCsrfReload(n,n._elfinderResponse)&&(g=!1,z=!1,t&&(t.error="")),P(),f&&(o=r.file(p.target),o&&o.volumeid&&r.isRoot(o)&&delete r.volumeExpires[o.volumeid]),r.trigger(u+"fail",i),s="object"==typeof t?t.error:t,s&&(g?r.error(s):r.debug("error",r.i18n(s))),z&&r.sync()}),!u)return z=!1,c.reject({error:"errCmdReq"});if(r.maxTargets&&p.targets&&p.targets.length>r.maxTargets)return z=!1,c.reject({error:["errMaxTargets",r.maxTargets]});if(v&&c.done(E),f){for(;a=q.pop();)a.queueAbort();if(j!==p.target)for(;a=H.pop();)a.queueAbort()}return-1!==e.inArray(u,(r.cmdsToAdd+" autosync").split(" "))&&("autosync"!==u&&(r.autoSync("stop"),c.always(function(){r.autoSync()})),r.trigger("openxhrabort")),delete F.preventFail,r.api>=2.1029&&(M?F.headers["X-elFinderReqid"]=d:Object.assign(F.data,{reqid:d})),c.syncOnFail=function(e){z=!!e},te++,c.xhr=i=r.transport.send(F).always(function(){F._xhr&&"undefined"!=typeof F._xhr.responseURL&&(i.responseURL=F._xhr.responseURL||""),--te,ne.length&&ne.shift()()}).fail(D).done(U),i._csrfRefresh=!!t._csrfRefresh,r.api>=2.1029&&(i._requestId=d),f||p.compare&&"info"===u?(i.queueAbort=s,q.unshift(i),p.compare&&r.bind(r.cmdsToAdd+" autosync openxhrabort",R),c.always(function(){var t=e.inArray(i,q);p.compare&&r.unbind(r.cmdsToAdd+" autosync openxhrabort",R),-1!==t&&q.splice(t,1)})):-1!==e.inArray(u,r.abortCmdsOnOpen)&&(i.queueAbort=s,H.unshift(i),c.always(function(){var t=e.inArray(i,H);-1!==t&&H.splice(t,1)})),r.bind("unload destroy",R),c.always(function(){r.unbind("unload destroy",R)}),c},N=function(){return x.type&&x.cnt&&(k&&(x.cancel=c,t.eachCancel&&(x.id=+new Date)),n=setTimeout(function(){y=setTimeout(L,1e3),r.notify(x),w=!0,c.always(function(){x.cnt=-(parseInt(x.cnt)||0),r.notify(x),w=!1})},r.notifyDelay),c.always(function(){clearTimeout(n)})),s>te?_():(f?ne.unshift(_):ne.push(_),c)},L=function(){var e;w&&y&&(e=1*x.cnt,y=null,r.notify({type:x.type,progress:e,cnt:0,hideCnt:x.hideCnt}),b+=e,b/x.cnt<80&&(y=setTimeout(L,500)))},W={opts:t,result:!0};return r.api||p.init?(r.trigger("request."+u,W,!0),W.result?"object"==typeof W.result&&W.result.promise?(W.result.done(N).fail(function(){r.trigger(u+"done"),c.reject()}),c):N():(r.trigger(u+"done"),c.reject())):(z=!1,c.reject())},this.cache=function(e,t){Array.isArray(e)||(e=[e]),Q(e,t)},this.updateCache=function(t){e.isPlainObject(t)&&(t.files&&t.files.length&&Q(t.files,"files"),t.tree&&t.tree.length&&Q(t.tree,"tree"),t.removed&&t.removed.length&&Z(t.removed),t.added&&t.added.length&&Q(t.added,"add"),t.changed&&t.changed.length&&Q(t.changed,"change"))},this.diff=function(t,n,i){var a={},o=[],r=[],s=[],l=null,c=function(e){for(var t=s.length;t--;)if(s[t].hash==e)return!0};return e.each(t,function(e,t){a[t.hash]=t}),i&&i.length&&(l={},e.each(i,function(){l[this]=!0})),e.each(I,function(e,t){a[e]||n&&t.phash!==n||r.push(e); }),e.each(a,function(t,n){var i,a=I[t],r={};a?(e.each(Object.keys(a),function(){r[this]=!0}),e.each(n,function(e){return delete r[e],l&&l[e]||n[e]===a[e]?void 0:(s.push(n),r={},!1)}),i=Object.keys(r).length,0!==i&&(l&&e.each(r,function(e){l[e]&&--i}),0!==i&&s.push(n))):o.push(n)}),e.each(r,function(t,n){var i=I[n],o=i.phash;o&&"directory"==i.mime&&-1===e.inArray(o,r)&&a[o]&&!c(o)&&s.push(a[o])}),{added:o,removed:r,changed:s}},this.syncStopper=!1,this.sync=function(t,n){if(this.syncStopper)return e.Deferred().reject();this.syncStopper=!0,this.autoSync("stop");var i,a,o=this,r=function(){var i="",a=0,o=0;return t&&n&&e.each(I,function(e,n){n.phash&&n.phash===t&&(++a,o=Math.max(o,n.ts)),i=a+":"+o}),i},s=r(),l=e.Deferred().always(function(){!a&&o.trigger("sync")}),c=!t&&this.ui.tree?1:0,d=[this.request({data:{cmd:"open",reload:1,target:j,tree:c,compare:s},preventDefault:!0})],p=function(){for(var e,t=[],n=o.file(o.root(j)),i=n?n.volumeid:null,a=o.cwd().phash;a;)(e=o.file(a))?(0!==a.indexOf(i)&&(t.push({target:a,cmd:"tree"}),o.isRoot(e)||t.push({target:a,cmd:"parents"}),n=o.file(o.root(a)),i=n?n.volumeid:null),a=e.phash):a=null;return t};return!t&&o.api>=2&&(j!==this.root()&&d.push(this.request({data:{cmd:"parents",target:j},preventDefault:!0})),e.each(p(),function(e,t){d.push(o.request({data:{cmd:t.cmd,target:t.target},preventDefault:!0}))})),e.when.apply(e,d).fail(function(t,i){a=i&&200!=i.status,n&&-1===e.inArray("errOpen",t)?l.reject(t&&0!=i.status?t:void 0):(l.reject(t),o.parseError(t)&&o.request({data:{cmd:"open",target:o.lastDir("")||o.root(),tree:1,init:1},notify:{type:"open",cnt:1,hideCnt:!0}}))}).done(function(n){var a,r,d;if(n.cwd.compare&&s===n.cwd.compare)return l.reject();if(a={tree:[]},r=arguments.length,r>1)for(d=1;r>d;d++)arguments[d].tree&&arguments[d].tree.length&&a.tree.push.apply(a.tree,arguments[d].tree);if(o.api<2.1&&(a.tree||(a.tree=[]),a.tree.push(n.cwd)),n=o.normalize(n),!o.validResponse("open",n))return l.reject(n.norError||"errResponse");if(a=o.normalize(a),!o.validResponse("tree",a))return l.reject(a.norError||"errResponse");c&&a&&a.tree&&(i=e.map(e.grep(n.files,function(e){return e.isroot}),function(e){return e.hash}),a.tree=e.grep(a.tree,function(e){return!e.isroot||i.indexOf(e.hash)>=0}));var p=o.diff(n.files.concat(a&&a.tree?a.tree:[]),t);return p.added.push(n.cwd),o.updateCache(p),p.removed.length&&o.remove(p),p.added.length&&o.add(p),p.changed.length&&o.change(p),l.resolve(p)}).always(function(){o.syncStopper=!1,o.autoSync()}),l},this.upload=function(e){return this.transport.upload(e,this)},this.shortcut=function(t){var n,i,a,o,r;if(this.options.allowShortcuts&&t.pattern&&"function"==typeof t.callback)for(n=t.pattern.toUpperCase().split(/\s+/),o=0;o0?a:a.charCodeAt(0):a>0?a:e.ui.keyCode[a],a&&!U[i]&&(U[i]={keyCode:a,altKey:-1!=e.inArray("ALT",r),ctrlKey:-1!=e.inArray("CTRL",r),shiftKey:-1!=e.inArray("SHIFT",r),type:t.type||"keydown",callback:t.callback,description:t.description,pattern:i});return this},this.shortcuts=function(){var t=[];return e.each(U,function(e,n){t.push([n.pattern,u.i18n(n.description)])}),t},this.clipboard=function(t,n){var i=function(){return e.map(P,function(e){return e.hash})};return void 0!==t&&(P.length&&this.trigger("unlockfiles",{files:i()}),R={},P=e.map(t||[],function(e){var t=I[e];return t?(R[e]=!0,{hash:e,phash:t.phash,name:t.name,mime:t.mime,read:t.read,locked:t.locked,cut:!!n}):null}),this.trigger("changeclipboard",{clipboard:P.slice(0,P.length)}),n&&this.trigger("lockfiles",{files:i()})),P.slice(0,P.length)},this.isCommandEnabled=function(e,t){var n,i,a=u.cwd().volumeid||"";return!t&&u.searchStatus.state>1&&u.selected().length&&(t=u.selected()[0]),n=!t||a&&0===t.indexOf(a)?S.disabledFlip:u.option("disabledFlip",t),i=this._commands[e],i?i.alwaysEnabled||!n[e]:!1},this.exec=function(t,n,i,a){var o,r;return!a&&this.commandMap[t]&&"hidden"!==this.commandMap[t]&&(t=this.commandMap[t]),"open"===t&&((this.searchStatus.state||this.searchStatus.ininc)&&this.trigger("searchend",{noupdate:!0}),this.autoSync("stop")),!a&&n&&(Array.isArray(n)?n.length&&(a=n[0]):a=n),o=this._commands[t]&&this.isCommandEnabled(t,a)?this._commands[t].exec(n,i):e.Deferred().reject("errUnknownCmd"),r=typeof o,"object"===r&&o.promise||(u.debug("warning",'"cmd.exec()" should be returned "$.Deferred" but cmd "'+t+'" returned "'+r+'"'),o=e.Deferred().resolve()),this.trigger("exec",{dfrd:o,cmd:t,files:n,opts:i,dstHash:a}),o},this.dialog=function(t,n){var i=e("
    ").append(t).appendTo(m).elfinderdialog(n,u),a=i.closest(".ui-dialog"),o=function(){!i.data("draged")&&i.is(":visible")&&i.elfinderdialog("posInit")};return a.length&&(u.bind("resize",o),a.on("remove",function(){u.unbind("resize",o)})),i},this.toast=function(t){return e('
    ').appendTo(this.ui.toast).elfindertoast(t||{},this)},this.getUI=function(t){return t?this.ui[t]||e():m},this.getCommand=function(e){return void 0===e?this._commands:this._commands[e]},this.resize=function(t,n){var i,a=function(){for(var e=m.outerHeight(!0)-m.innerHeight(),t=m;t.get(0)!==W.get(0)&&(t=t.parent(),e+=t.outerHeight(!0)-t.innerHeight(),t.parent().length););return e},o=!m.hasClass("ui-resizable"),r=m.data("resizeSize")||{w:0,h:0},s={};W&&W.data("resizeTm")&&clearTimeout(W.data("resizeTm")),u.options.noResizeBySelf||("string"==typeof n&&(i=n.match(/^([0-9.]+)%$/))&&(W&&W.length||(W=e(window)),W.data("marginToMyNode")||W.data("marginToMyNode",a()),W.data("fitToBaseFunc")||W.data("fitToBaseFunc",function(e){var t=W.data("resizeTm");e.preventDefault(),e.stopPropagation(),t&&cancelAnimationFrame(t),m.hasClass("elfinder-fullscreen")||u.UA.Mobile&&W.data("rotated")===u.UA.Rotated||(W.data("rotated",u.UA.Rotated),W.data("resizeTm",requestAnimationFrame(function(){u.restoreSize()})))}),"undefined"==typeof W.data("rotated")&&W.data("rotated",u.UA.Rotated),n=W.height()*(i[1]/100)-W.data("marginToMyNode"),W.off("resize."+u.namespace,W.data("fitToBaseFunc")),o&&W.on("resize."+u.namespace,W.data("fitToBaseFunc"))),m.css({width:t,height:parseInt(n)})),s.w=Math.round(m.width()),s.h=Math.round(m.height()),m.data("resizeSize",s),s.w===r.w&&s.h===r.h||(m.trigger("resize"),this.trigger("resize",{width:s.w,height:s.h}))},this.restoreSize=function(){this.resize(N,L)},this.show=function(){m.show(),this.enable().trigger("show")},this.hide=function(){this.options.enableAlways&&(T=z,z=!1),this.disable(),this.trigger("hide"),m.hide()},this.lazy=function(t,n,i){var a=function(e){var t,n=m.data("lazycnt");e?(t=m.data("lazyrepaint")?!1:i.repaint,n?m.data("lazycnt",++n):m.data("lazycnt",1).addClass("elfinder-processing"),t&&m.data("lazyrepaint",!0).css("display")):n&&n>1?m.data("lazycnt",--n):(t=m.data("lazyrepaint"),m.data("lazycnt",0).removeData("lazyrepaint").removeClass("elfinder-processing"),t&&m.css("display"),u.trigger("lazydone"))},o=e.Deferred(),r=function(){o.resolve(t.call(o)),a(!1)};return n=n||0,i=i||{},a(!0),n?setTimeout(r,n):requestAnimationFrame(r),o},this.destroy=function(){m&&m[0].elfinder&&(m.hasClass("elfinder-fullscreen")&&u.toggleFullscreen(m),this.options.syncStart=!1,this.autoSync("forcestop"),this.trigger("destroy").disable(),P=[],E=[],D={},U={},e(window).off("."+y),e(document).off("."+y),u.trigger=function(){},e(V).remove(),m.off().removeData().empty().append(v.contents()).attr("class",v.attr("class")).attr("style",v.attr("style")),delete m[0].elfinder,e.each(g,function(t,n){e.each(n,function(e,t){m.on(t.type+(t.namespace?"."+t.namespace:""),t.selector,t.handler)})}))},this.autoSync=function(t){var n;if(u.options.sync>=1e3){if(r&&(clearTimeout(r),r=null,u.trigger("autosync",{action:"stop"})),"stop"===t?++X:X=Math.max(0,--X),X||"forcestop"===t||!u.options.syncStart)return;n=function(t){var i;S.syncMinMs&&(t||r)&&(t&&u.trigger("autosync",{action:"start"}),i=Math.max(u.options.sync,S.syncMinMs),r&&clearTimeout(r),r=setTimeout(function(){var t,a=!0,o=j;S.syncChkAsTs&&I[o]&&(t=I[o].ts)?u.request({data:{cmd:"info",targets:[o],compare:t,reload:1},preventDefault:!0}).done(function(e){var i;a=!0,e.compare&&(i=e.compare,i==t&&(a=!1)),a?u.sync(o).always(function(){i&&(I[o].ts=i),n()}):n()}).fail(function(t,a){var o=u.parseError(t);o&&0!=a.status?(u.error(o),Array.isArray(o)&&-1!==e.inArray("errOpen",o)&&u.request({data:{cmd:"open",target:u.lastDir("")||u.root(),tree:1,init:1},notify:{type:"open",cnt:1,hideCnt:!0}})):r=setTimeout(function(){n()},i)}):u.sync(j,!0).always(function(){n()})},i))},n(!0)}},this.insideWorkzone=function(e,t,n){var i=this.getUI("workzone").data("rectangle");return n=n||1,!(ei.left+i.width+n||ti.top+i.height+n)},this.toFront=function(t){var n=m.children(".ui-front").removeClass("elfinder-frontmost"),i=n.last();n.css("z-index",""),e(t).addClass("ui-front elfinder-frontmost").css("z-index",i.css("z-index")+1)},this.toHide=function(t,n){var i,a=e(t);!n&&a.hide(),a.hasClass("elfinder-frontmost")&&(a.removeClass("elfinder-frontmost"),i=m.children(".ui-front:visible:not(.elfinder-frontmost)").last(),i.length&&requestAnimationFrame(function(){m.children(".elfinder-frontmost:visible").length||(u.toFront(i),i.trigger("frontmost"))}))},this.getMaximizeCss=function(){return{width:"100%",height:"100%",margin:0,top:0,left:0,display:"block",position:"fixed",zIndex:Math.max(u.zIndex?u.zIndex+1:0,1e3),maxWidth:"",maxHeight:""}},function(){se&&u.UA.Fullscreen&&(u.UA.Fullscreen=!1,le&&"undefined"!=typeof le.attr("allowfullscreen")&&(u.UA.Fullscreen=!0));var t,n,i,a,o="elfinder-fullscreen",r="elfinder-fullscreen-native",s=function(){var t=0,n=0;e.each(m.children(".ui-dialog,.ui-draggable"),function(i,a){var o=e(a),r=o.position();r.top<0&&(o.css("top",t),t+=20),r.left<0&&(o.css("left",n),n+=20)})},l=function(){var i=u.storage("useFullscreen");a=u.UA.Fullscreen&&(i?i>0:"screen"===u.options.commandsOptions.fullscreen.mode)?{fullElm:function(){return document.fullscreenElement||document.webkitFullscreenElement||document.mozFullScreenElement||document.msFullscreenElement||null},exitFull:function(){return document.exitFullscreen?document.exitFullscreen():document.webkitExitFullscreen?document.webkitExitFullscreen():document.mozCancelFullScreen?document.mozCancelFullScreen():document.msExitFullscreen?document.msExitFullscreen():void 0},toFull:function(e){return e.requestFullscreen?e.requestFullscreen():e.webkitRequestFullscreen?e.webkitRequestFullscreen():e.mozRequestFullScreen?e.mozRequestFullScreen():e.msRequestFullscreen?e.msRequestFullscreen():!1}}:{fullElm:function(){var e;return m.hasClass(o)?m.get(0):(e=m.find("."+o),e.length?e.get(0):null)},exitFull:function(){var i;e(window).off("resize."+y,d),void 0!==n&&e("body").css("overflow",n),n=void 0,t&&(i=t.elm,c(i),e(i).trigger("resize",{fullscreen:"off"})),e(window).trigger("resize")},toFull:function(t){return n=e("body").css("overflow")||"",e("body").css("overflow","hidden"),e(t).css(u.getMaximizeCss()).addClass(o).trigger("resize",{fullscreen:"on"}),s(),e(window).on("resize."+y,d).trigger("resize"),!0}}},c=function(n){t&&t.elm==n&&(e(n).removeClass(o+" "+r).attr("style",t.style),t=null)},d=function(t){var n;t.target===window&&(i&&cancelAnimationFrame(i),i=requestAnimationFrame(function(){(n=a.fullElm())&&e(n).trigger("resize",{fullscreen:"on"})}))};l(),e(document).on("fullscreenchange."+y+" webkitfullscreenchange."+y+" mozfullscreenchange."+y+" MSFullscreenChange."+y,function(n){if(u.UA.Fullscreen){var l=a.fullElm(),p=e(window);i&&cancelAnimationFrame(i),null===l?(p.off("resize."+y,d),t&&(l=t.elm,c(l),e(l).trigger("resize",{fullscreen:"off"}))):(e(l).addClass(o+" "+r).attr("style","width:100%; height:100%; margin:0; padding:0;").trigger("resize",{fullscreen:"on"}),p.on("resize."+y,d),s()),p.trigger("resize")}}),u.toggleFullscreen=function(n,i){var o=e(n).get(0),r=null;if(r=a.fullElm()){if(r==o){if(i===!0)return r}else if(i===!1)return r;return a.exitFull(),null}return i===!1?null:(l(),t={elm:o,style:e(o).attr("style")},a.toFull(o)!==!1?o:(t=null,null))}}(),function(){var t,n="elfinder-maximized",i=function(e){if(e.target===window&&e.data&&e.data.elm){var n=e.data.elm;t&&cancelAnimationFrame(t),t=requestAnimationFrame(function(){n.trigger("resize",{maximize:"on"})})}},a=function(t){e(window).off("resize."+y,i),e("body").css("overflow",t.data("bodyOvf")),t.removeClass(n).attr("style",t.data("orgStyle")).removeData("bodyOvf").removeData("orgStyle"),t.trigger("resize",{maximize:"off"})},o=function(t){t.data("bodyOvf",e("body").css("overflow")||"").data("orgStyle",t.attr("style")).addClass(n).css(u.getMaximizeCss()),e("body").css("overflow","hidden"),e(window).on("resize."+y,{elm:t},i),t.trigger("resize",{maximize:"on"})};u.toggleMaximize=function(t,i){var r=e(t),s=r.hasClass(n);if(s){if(i===!0)return;a(r)}else{if(i===!1)return;o(r)}}}(),Object.assign(e.ui.keyCode,{F1:112,F2:113,F3:114,F4:115,F5:116,F6:117,F7:118,F8:119,F9:120,F10:121,F11:122,F12:123,DIG0:48,DIG1:49,DIG2:50,DIG3:51,DIG4:52,DIG5:53,DIG6:54,DIG7:55,DIG8:56,DIG9:57,NUM0:96,NUM1:97,NUM2:98,NUM3:99,NUM4:100,NUM5:101,NUM6:102,NUM7:103,NUM8:104,NUM9:105,CONTEXTMENU:93,DOT:190}),this.dragUpload=!1,this.xhrUpload=("undefined"!=typeof XMLHttpRequestUpload||"undefined"!=typeof XMLHttpRequestEventTarget)&&"undefined"!=typeof File&&"undefined"!=typeof FormData,this.transport={},"object"==typeof this.options.transport&&(this.transport=this.options.transport,"function"==typeof this.transport.init&&this.transport.init(this)),"function"!=typeof this.transport.send&&(this.transport.send=function(t){return u.UA.IE||(t._xhr=new XMLHttpRequest,t.xhr=function(){return t.progress&&t._xhr.addEventListener("progress",t.progress),t._xhr}),e.ajax(t)}),"iframe"==this.transport.upload?this.transport.upload=this.uploads.iframe.bind(this):"function"==typeof this.transport.upload?this.dragUpload=!!this.options.dragUploadAllow:this.xhrUpload&&this.options.dragUploadAllow?(this.transport.upload=this.uploads.xhr.bind(this),this.dragUpload=!0):this.transport.upload=this.uploads.iframe.bind(this),this.decodeRawString=function(e){var t=function(e){var t,n,i;for(t=0,n=e.length,i=[];n>t;t++)i.push(e.charCodeAt(t));return i},n=function(e){var n,i,a,o=[];for("string"==typeof e&&(e=t(e)),n=0,i=e.length;a=e[n],i>n;n++)a>=55296&&56319>=a?o.push((1023&a)+64<<10|1023&e[++n]):o.push(a);return o},i=function(e){var t,n,i,a,o=String.fromCharCode;for(t=0,n=e.length,a="";i=e[t],n>t;t++)a+=127>=i?o(i):223>=i&&i>=194?o((31&i)<<6|63&e[++t]):239>=i&&i>=224?o((15&i)<<12|(63&e[++t])<<6|63&e[++t]):247>=i&&i>=240?o(55296|((7&i)<<8|(63&e[++t])<<2|e[++t]>>>4&3)-64,56320|(15&e[t++])<<6|63&e[t]):o(65533);return a};return i(n(e))},this.getContents=function(t,n,i){var a,o,r=this,s=e.Deferred(),l=n||"arraybuffer";return s.fail(function(){o&&"pending"===o.state()&&o.reject()}),a=r.openUrl(t),r.isSameOrigin(a)||(a=r.openUrl(t,!0)),o=r.request(Object.assign({data:{cmd:"get"},options:{url:a,type:"get",cache:!0,dataType:"binary",responseType:l,processData:!1},notify:{type:"file",cnt:1,hideCnt:!0},cancel:!0},i||{})).fail(function(){s.reject()}).done(function(e){s.resolve(e)}),s},this.getBinaryByUrl=function(t,n,i){var a,o=this,r=e.Deferred();return r.fail(function(){a&&"pending"===a.state()&&a.reject()}),a=o.request(Object.assign({data:{cmd:"get"},options:Object.assign({type:"get",cache:!0,dataType:"binary",responseType:"blob",processData:!1},t)},i||{})).fail(function(){r.reject()}).done(function(e){n&&n(e),r.resolve(e)}),r},this.getMimetype=function(e,t){var n,i,a=t;return i=(e+"").match(/\.([^.]+)$/),i&&(n=i[1])&&(o||(o=u.arrayFlip(u.mimeTypes)),(a=o[n.toLowerCase()])||(a=t)),a},u.hashCheckers=[],function(t){var n={};window.Worker&&window.ArrayBuffer&&(t.options.cdns.sparkmd5&&(n.SparkMD5=!0,t.hashCheckers.push("md5")),t.options.cdns.jssha&&(n.jsSHA=!0,t.hashCheckers=t.hashCheckers.concat(["sha1","sha224","sha256","sha384","sha512","sha3-224","sha3-256","sha3-384","sha3-512","shake128","shake256"]))),t.getContentsHashes=function(i,a,o,r){var s,l=e.Deferred(),c=t.arrayFlip(a||["md5"],!0),d=[],p={},u=o?o:{shake128len:256,shake256len:512};return l.fail(function(){s&&s.reject()}),Object.keys(n).length?s=t.getContents(i,"arraybuffer",r).done(function(a){c.md5&&n.SparkMD5&&d.push(function(){var o=e.Deferred();try{var r=t.getWorker();o.fail(function(){r&&r.terminate()}),r.onmessage=function(e){if(r&&r.terminate(),e.data.hash){var n;p.md5=e.data.hash,(n=t.file(i))&&(n.md5=p.md5)}else e.data.error&&(p.md5=e.data.error);l.notify(p),o.resolve()},r.onerror=function(e){o.reject()},r.postMessage({scripts:[t.options.cdns.sparkmd5,t.getWorkerUrl("calcfilehash.js")],data:{type:"md5",bin:a}}),l.fail(function(){o.reject()})}catch(s){o.reject(),delete n.SparkMD5}return o}()),n.jsSHA&&e.each(["1","224","256","384","512","3-224","3-256","3-384","3-512","ke128","ke256"],function(o,r){c["sha"+r]&&d.push(function(){var o=e.Deferred();try{var s=t.getWorker();o.fail(function(){s&&s.terminate()}),s.onmessage=function(e){if(s&&s.terminate(),e.data.hash){var n;p["sha"+r]=e.data.hash,(n=t.file(i))&&(n["sha"+r]=p["sha"+r])}else e.data.error&&(p["sha"+r]=e.data.error);l.notify(p),o.resolve()},s.onerror=function(e){o.reject()},s.postMessage({scripts:[t.options.cdns.jssha,t.getWorkerUrl("calcfilehash.js")],data:{type:r,bin:a,hashOpts:u}}),l.fail(function(){o.reject()})}catch(c){o.reject(),delete n.jsSHA}return o}())}),d.length?e.when.apply(null,d).always(function(){l.resolve(p)}):l.reject()}).fail(function(){l.reject()}):l.reject(),l}}(this),this.parseError=function(t){var n=t;return e.isPlainObject(n)&&(n=n.error),n},this.error=function(){var e,t=arguments[0],n=arguments[1]||null;return 1==arguments.length&&"function"==typeof t?u.bind("error",t):(e=this.parseError(t),e!==!0&&e?u.trigger("error",{error:e,opts:n}):this)},e.each(A,function(t,n){u[n]=function(){var t=arguments[0];return 1==arguments.length&&"function"==typeof t?u.bind(n,t):u.trigger(n,e.isPlainObject(t)?t:{})}}),this.enable(function(){!z&&u.api&&u.visible()&&u.ui.overlay.is(":hidden")&&!m.children(".elfinder-dialog."+u.res("class","editing")+":visible").length&&(z=!0,document.activeElement&&document.activeElement.blur(),m.removeClass("elfinder-disabled"))}).disable(function(){T=z,z=!1,m.addClass("elfinder-disabled")}).open(function(){E=[]}).select(function(t){var n=0,i=[];E=e.grep(t.data.selected||t.data.value||[],function(e){return i.length||u.maxTargets&&++n>u.maxTargets?(i.push(e),!1):!!I[e]}),i.length&&(u.trigger("unselectfiles",{files:i,inselect:!0}),u.toast({mode:"warning",msg:u.i18n(["errMaxTargets",u.maxTargets])}))}).error(function(t){var n,i,a={cssClass:"elfinder-dialog-error",title:u.i18n("error"),resizable:!1,destroyOnClose:!0,buttons:{}},o=u.getUI(),r=o.children(".elfinder-dialog-error").length;r'+u.i18n(t.data.error),a)):(n=o.children(".elfinder-dialog-error:last").children(".ui-dialog-content:first"),i=n.children(".elfinder-error-counter"),i.length?i.data("cnt",parseInt(i.data("cnt"))+1).html(u.i18n(["moreErrors",i.data("cnt")])):(i=e(''+u.i18n(["moreErrors",1])+"").data("cnt",1),n.append("
    ",i)))}).bind("tmb",function(t){e.each(t.data.images||[],function(e,t){I[e]&&(I[e].tmb=t)})}).bind("searchstart",function(e){Object.assign(u.searchStatus,e.data),u.searchStatus.state=1}).bind("search",function(e){u.searchStatus.state=2}).bind("searchend",function(){u.searchStatus.state=0,u.searchStatus.ininc=!1,u.searchStatus.mixed=!1}).bind("canMakeEmptyFile",function(t){var n=t.data,i={};n&&Array.isArray(n.mimes)&&(n.unshift||(i=u.mimesCanMakeEmpty),e.each(n.mimes,function(){i[this]||(i[this]=u.mimeTypes[this])}),n.unshift&&(u.mimesCanMakeEmpty=Object.assign(i,u.mimesCanMakeEmpty)))}).bind("themechange",function(){requestAnimationFrame(function(){u.trigger("uiresize")})}),!0===this.options.sound&&this.bind("playsound",function(t){var n=V.canPlayType&&V.canPlayType('audio/wav; codecs="1"'),i=t.data&&t.data.soundFile;n&&i&&""!=n&&"no"!=n&&e(V).html('')[0].play()}),e.each(this.options.handlers,function(e,t){u.bind(e,t)}),this.history=new this.history(this),this.roots={},this.leafRoots={},this.volumeExpires={},this._commands={},Array.isArray(this.options.commands)||(this.options.commands=[]),-1!==e.inArray("*",this.options.commands)&&(this.options.commands=Object.keys(this.commands)),this.commandMap={},this.volOptions={},this.hasVolOptions=!1,this.trashes={},this.optionsByHashes={},this.uiAutoHide=[],this.one("open",function(){u.uiAutoHide.length&&setTimeout(function(){u.trigger("uiautohide")},500)}),this.bind("uiautohide",function(){u.uiAutoHide.length&&u.uiAutoHide.shift()()}),this.options.width&&(N=this.options.width),this.options.height&&(L=this.options.height),this.options.heightBase&&(W=e(this.options.heightBase)),B=this.options.soundPath?this.options.soundPath.replace(/\/+$/,"")+"/":this.baseUrl+B,this.options.parrotHeaders&&Array.isArray(this.options.parrotHeaders)&&this.options.parrotHeaders.length?(this.parrotHeaders=this.options.parrotHeaders,e.each(this.parrotHeaders,function(e,t){var n=u.sessionStorage("core-ph:"+t);n&&(u.customHeaders[t]=n)})):this.parrotHeaders=[],u.one("opendone",function(){var t;e(document).on("click."+y,function(t){z&&!u.options.enableAlways&&!e(t.target).closest(m).length&&u.disable()}).on(x+" "+k+" "+C+" "+w,oe),u.options.useBrowserHistory&&e(window).on("popstate."+y,function(t){var n,i,a=t.originalEvent.state||{},o=!!a.thash,r=m.find(".elfinder-frontmost:visible"),s=m.find(".elfinder-navbar-dir,.elfinder-cwd-filename").find("input,textarea");o||(a={thash:u.cwd().hash},e("html,body").animate({scrollTop:m.offset().top})),r.length||s.length?(history.pushState(a,null,location.pathname+location.search+"#elf_"+a.thash),r.length?r.hasClass(u.res("class","preventback"))||(r.hasClass("elfinder-contextmenu")?e(document).trigger(e.Event("keydown",{keyCode:e.ui.keyCode.ESCAPE,ctrlKey:!1,shiftKey:!1,altKey:!1,metaKey:!1})):r.hasClass("elfinder-dialog")?r.elfinderdialog("close"):r.trigger("close")):s.trigger(e.Event("keydown",{keyCode:e.ui.keyCode.ESCAPE,ctrlKey:!1,shiftKey:!1,altKey:!1,metaKey:!1}))):o?!e.isEmptyObject(u.files())&&u.request({data:{cmd:"open",target:a.thash,onhistory:1},notify:{type:"open",cnt:1,hideCnt:!0},syncOnFail:!0}):(n=function(){i.trigger("click")},u.one("open",n,!0),i=u.toast({msg:u.i18n("pressAgainToExit"),onHidden:function(){u.unbind("open",n),history.pushState(a,null,location.pathname+location.search+"#elf_"+a.thash)}}))}),e(window).on("resize."+y,function(e){e.target===this&&(t&&cancelAnimationFrame(t),t=requestAnimationFrame(function(){var e=m.data("resizeSize")||{w:0,h:0},t={w:Math.round(m.width()),h:Math.round(m.height())};m.data("resizeSize",t),t.w===e.w&&t.h===e.h||(m.trigger("resize"),u.trigger("resize",{width:t.w,height:t.h}))}))}).on("beforeunload."+y,function(t){var n,i;if(!u.pauseUnloadCheck()){if(m.is(":visible")&&(u.ui.notify.children().length&&-1!==e.inArray("hasNotifyDialog",u.options.windowCloseConfirm)?n=u.i18n("ntfsmth"):m.find("."+u.res("class","editing")).length&&-1!==e.inArray("editingFile",u.options.windowCloseConfirm)?n=u.i18n("editingFile"):(i=Object.keys(u.selected()).length)&&-1!==e.inArray("hasSelectedItem",u.options.windowCloseConfirm)?n=u.i18n("hasSelected",""+i):(i=Object.keys(u.clipboard()).length)&&-1!==e.inArray("hasClipboardData",u.options.windowCloseConfirm)&&(n=u.i18n("hasClipboard",""+i)),n))return t.returnValue=n,n;u.trigger("unload")}}),e(window).on("message."+y,function(e){var t,n,i=e.originalEvent||null;if(i&&(0===u.convAbsUrl(u.options.url).indexOf(i.origin)||0===u.convAbsUrl(u.uploadURL).indexOf(i.origin)))try{try{if("string"!=typeof i.data)return;if(t=JSON.parse(i.data),"io.studio-42.github"!==t.type)return;n=t.data||null}catch(a){return}n&&(n.error?(t.bind&&u.trigger(t.bind+"fail",n),u.error(n.error)):(n.warning&&u.error(n.warning),u.updateCache(n),n.removed&&n.removed.length&&u.remove(n),n.added&&n.added.length&&u.add(n),n.changed&&n.changed.length&&u.change(n),t.bind&&(u.trigger(t.bind,n),u.trigger(t.bind+"done")),n.sync&&u.sync()))}catch(e){u.sync()}}),u.options.enableAlways?(e(window).on("focus."+y,function(e){e.target===this&&u.enable()}),se&&e(window.top).on("focus."+y,function(){!u.enable()||le&&!le.is(":visible")||requestAnimationFrame(function(){e(window).trigger("focus")})})):se&&e(window).on("blur."+y,function(e){z&&e.target===this&&u.disable()}),se&&m.on("click",function(t){e(window).trigger("focus")}),u.options.enableByMouseOver&&m.on("mouseenter touchstart",function(t){se&&e(window).trigger("focus"),!u.enabled()&&u.enable()}),e(window).on("visibilitychange."+y,function(e){var t=document.hidden||document.webkitHidden||document.msHidden;u.options.syncStart&&u.autoSync(t?"stop":void 0)})}),m[0].elfinder=this,h.push(function(){var t=u.lang,n=u.i18nBaseUrl+"elfinder."+t+".js",i=e.Deferred().done(function(){u.i18[t]&&(u.lang=t),u.trigger("i18load"),c="en"===u.lang?u.i18.en:e.extend(!0,{},u.i18.en,u.i18[u.lang])});return u.i18[t]?i.resolve():(u.lang="en",u.hasRequire?require([n],function(){i.resolve()},function(){i.resolve()}):u.loadScript([n],function(){i.resolve()},{loadType:"tag",error:function(){i.resolve()}})),i}()),d=function(){var t;return u.messages=c.messages,e.fn.selectable&&e.fn.draggable&&e.fn.droppable&&e.fn.resizable&&e.fn.button&&e.fn.slider?m.length?u.options.url?(t=Object.assign({name:u.i18n("name"),perm:u.i18n("perms"),date:u.i18n("modify"),size:u.i18n("size"),kind:u.i18n("kind"),modestr:u.i18n("mode"),modeoct:u.i18n("mode"),modeboth:u.i18n("mode")},u.options.uiOptions.cwd.listView.columnsCustomName),u.getColumnName=function(e){var n=t[e]||u.i18n(e);return"function"==typeof n?n():n},u.direction=c.direction,u.dateFormat=u.options.dateFormat||c.dateFormat,u.fancyFormat=u.options.fancyDateFormat||c.fancyDateFormat,u.nonameDateFormat=(u.options.nonameDateFormat||c.nonameDateFormat).replace(/[\/\\]/g,"_"),u.cssClass="ui-helper-reset ui-helper-clearfix ui-widget ui-widget-content ui-corner-all elfinder elfinder-"+("rtl"==u.direction?"rtl":"ltr")+(u.UA.Touch?" elfinder-touch"+(u.options.resizable?" touch-punch":""):"")+(u.UA.Mobile?" elfinder-mobile":"")+(u.UA.iOS?" elfinder-ios":"")+" "+u.options.cssClass,m.addClass(u.cssClass).on(w,function(){!z&&u.enable()}),function(){var t,n,i,a,o,r=x+"draggable keyup."+y+"draggable";u.draggable={appendTo:m,addClasses:!1,distance:4,revert:!0,refreshPositions:!1,cursor:"crosshair",cursorAt:{left:50,top:47},scroll:!1,start:function(r,s){var l,c,d=s.helper,p=e.grep(d.data("files")||[],function(e){return e?(R[e]=!0,!0):!1}),h=!1;for(o=m.attr("style"),m.width(m.width()).height(m.height()),t="ltr"===u.direction,n=u.getUI("workzone").data("rectangle"),i=n.top+n.height,a=i-u.getUI("navdock").outerHeight(!0),u.draggingUiHelper=d,l=p.length;l--;)if(c=p[l],I[c].locked){h=!0,d.data("locked",!0);break}!h&&u.trigger("lockfiles",{files:p}),d.data("autoScrTm",setInterval(function(){d.data("autoScr")&&u.autoScroll[d.data("autoScr")](d.data("autoScrVal"))},50))},drag:function(o,r){var s,l,c,d=r.helper;((l=n.top>o.pageY)||ao.pageX?(t?"navbar":"cwd")+(l?"Up":"Down"):(t?"cwd":"navbar")+(l?"Up":"Down"),l||("cwd"===s.substr(0,3)?i0?(e(this).draggable("option",{refreshPositions:!0,elfRefresh:!0}),d.data("refreshPositions",-1)):(e(this).draggable("option",{refreshPositions:!1,elfRefresh:!1}),d.data("refreshPositions",null)))},stop:function(t,n){var i,a=n.helper;e(document).off(r),e(this).elfUiWidgetInstance("draggable")&&e(this).draggable("option",{refreshPositions:!1}),u.draggingUiHelper=null,u.trigger("focus").trigger("dragstop"),a.data("droped")||(i=e.grep(a.data("files")||[],function(e){return!!e}),u.trigger("unlockfiles",{files:i}),u.trigger("selectfiles",{files:u.selected()})),u.enable(),m.attr("style",o),a.data("autoScrTm")&&clearInterval(a.data("autoScrTm"))},helper:function(t,n){var i,a,o,s=this.id?e(this):e(this).parents("[id]:first"),l=e('
    '),c=function(t){var n,i=t.mime,a=u.tmb(t);return n='
    ',a?n=e(n).addClass(a.className).css("background-image","url('"+a.url+"')").get(0).outerHTML:t.icon&&(n=e(n).css(u.getIconStyle(t,!0)).get(0).outerHTML),t.csscls&&(n='
    '+n+"
    "),n};return u.draggingUiHelper&&u.draggingUiHelper.stop(!0,!0),u.trigger("dragstart",{target:s[0],originalEvent:t},!0),i=s.hasClass(u.res("class","cwdfile"))?u.selected():[u.navId2Hash(s.attr("id"))],l.append(c(I[i[0]])).data("files",i).data("locked",!1).data("droped",!1).data("namespace",y).data("dropover",0),(a=i.length)>1&&l.append(c(I[i[a-1]])+''+a+""),e(document).on(r,function(e){if(u._commands.copy){var t=e.shiftKey||e.ctrlKey||e.metaKey;o!==t&&(o=t,l.is(":visible")&&l.data("dropover")&&!l.data("droped")&&(l.toggleClass("elfinder-drag-helper-plus",l.data("locked")?!0:o),u.trigger(o?"unlockfiles":"lockfiles",{files:i,helper:l})))}}),l}}}(),u.commands.getfile&&("function"==typeof u.options.getFileCallback?(u.bind("dblclick",function(e){e.preventDefault(),u.exec("getfile").fail(function(){u.exec("open",e.data&&e.data.file?[e.data.file]:void 0)})}),u.shortcut({pattern:"enter",description:u.i18n("cmdgetfile"),callback:function(){u.exec("getfile").fail(function(){u.exec("mac"==u.OS?"rename":"open")})}}).shortcut({pattern:"ctrl+enter",description:u.i18n("mac"==u.OS?"cmdrename":"cmdopen"),callback:function(){u.exec("mac"==u.OS?"rename":"open")}})):u.options.getFileCallback=null),e.each(u.commands,function(t,n){var i,a,o=Object.assign({},n.prototype);if("function"==typeof n&&!u._commands[t]&&(n.prototype.forceLoad||-1!==e.inArray(t,u.options.commands))){if(i=n.prototype.extendsCmd||""){if("function"!=typeof u.commands[i])return!0;n.prototype=Object.assign({},_,new u.commands[i],n.prototype)}else n.prototype=Object.assign({},_,n.prototype);u._commands[t]=new n,n.prototype=o,a=u.options.commandsOptions[t]||{},i&&u.options.commandsOptions[i]&&(a=e.extend(!0,{},u.options.commandsOptions[i],a)),u._commands[t].setup(t,a),u._commands[t].linkedCmds.length&&e.each(u._commands[t].linkedCmds,function(e,t){var n=u.commands[t];"function"!=typeof n||u._commands[t]||(n.prototype=_,u._commands[t]=new n,u._commands[t].setup(t,u.options.commandsOptions[t]||{}))})}}),u.ui={workzone:e("
    ").appendTo(m).elfinderworkzone(u),navbar:e("
    ").appendTo(m).elfindernavbar(u,u.options.uiOptions.navbar||{}),navdock:e("
    ").appendTo(m).elfindernavdock(u,u.options.uiOptions.navdock||{}),contextmenu:e("
    ").appendTo(m).elfindercontextmenu(u),overlay:e("
    ").appendTo(m).elfinderoverlay({show:function(){u.disable()},hide:function(){T&&u.enable()}}),cwd:e("
    ").appendTo(m).elfindercwd(u,u.options.uiOptions.cwd||{}),notify:u.dialog("",{cssClass:"elfinder-dialog-notify"+(u.options.notifyDialog.canClose?"":" elfinder-titlebar-button-hide"),position:u.options.notifyDialog.position,absolute:!0,resizable:!1,autoOpen:!1,allowMinimize:!0,closeOnEscape:!!u.options.notifyDialog.canClose,title:" ",width:u.options.notifyDialog.width?parseInt(u.options.notifyDialog.width):null,minHeight:null,minimize:function(){u.ui.notify.trigger("minimize")}}),statusbar:e('
    ').hide().appendTo(m),toast:e('
    ').appendTo(m),bottomtray:e('
    ').appendTo(m), progressbar:e('
    ').appendTo(m)},u.trigger("uiready"),e.each(u.options.ui||[],function(t,n){var i="elfinder"+n,a=u.options.uiOptions[n]||{};!u.ui[n]&&e.fn[i]&&(u.ui[n]=e("<"+(a.tag||"div")+"/>").appendTo(m),u.ui[n][i](u,a))}),u.ui.progressbar.appendTo(u.ui.workzone),u.ui.notify.prev(".ui-dialog-titlebar").append('
    '),u.resize(N,L),u.options.resizable&&(m.resizable({resize:function(e,t){u.resize(t.size.width,t.size.height)},handles:"se",minWidth:300,minHeight:200}),u.UA.Touch&&m.addClass("touch-punch")),function(){var e=u.getUI("navbar"),t=u.getUI("cwd").parent();u.autoScroll={navbarUp:function(t){e.scrollTop(Math.max(0,e.scrollTop()-t))},navbarDown:function(t){e.scrollTop(e.scrollTop()+t)},cwdUp:function(e){t.scrollTop(Math.max(0,t.scrollTop()-e))},cwdDown:function(e){t.scrollTop(t.scrollTop()+e)}}}(),u.UA.Touch&&!function(){var e,t,n,i,a,o,r,s,l,c=u.getUI("navbar"),d=u.getUI("toolbar"),p="touchmove.stopscroll",h=function(e){var n=e.originalEvent.touches||[{}],i=n[0].pageY||null;(!t||t>i)&&(e.preventDefault(),s&&clearTimeout(s))},f=function(e){e.preventDefault(),s&&clearTimeout(s)},g=function(){s=setTimeout(function(){m.off(p)},100)},v=50;c=c.children().length?c:null,d=d.length?d:null,m.on("touchstart touchmove touchend",function(s){if("touchend"===s.type)return e=!1,t=!1,void g();var b,y,w,x,k,C=s.originalEvent.touches||[{}],z=C[0].pageX||null,T=C[0].pageY||null,A="ltr"===u.direction;null===z||null===T||"touchstart"===s.type&&C.length>1||("touchstart"===s.type?(n=m.offset(),i=m.width(),c&&(e=!1,c.is(":hidden")?(l||(l=Math.max(50,i/10)),(A?z-n.left:i+n.left-z)n.left+i-o,y?(l=Math.max(50,i/10),e=z):e=!1)),d&&(t=!1,s.originalEvent._preventSwipeY||(r=d.height(),a=n.top,T-a<(d.is(":hidden")?v:r+30)&&(t=T,m.on(p,d.is(":hidden")?f:h))))):(c&&e!==!1&&(b=(A?e>z:z>e)?"navhide":"navshow",w=Math.abs(e-z),("navhide"===b&&w>.6*o||w>("navhide"===b?o/3:45)&&("navshow"===b||(A?zn.left+i-20)))&&(u.getUI("navbar").trigger(b,{handleW:l}),e=!1)),d&&t!==!1&&(x=d.offset().top,Math.abs(t-T)>Math.min(45,r/3)&&(k=t>T?"slideUp":"slideDown",("slideDown"===k||x+20>T)&&(d.is("slideDown"===k?":hidden":":visible")&&d.stop(!0,!0).trigger("toggle",{duration:100,handleH:v}),t=!1)))))})}(),u.dragUpload&&!function(){var t,n,i=function(t){return"TEXTAREA"!==t.target.nodeName&&"INPUT"!==t.target.nodeName&&0===e(t.target).closest("div.ui-dialog-content").length},a="native-drag-enter",o="native-drag-disable",r="class",s=u.res(r,"navdir"),l=(u.res(r,"droppable"),u.res(r,"adroppable"),u.res(r,"navarrow"),u.res(r,"adroppable")),c=u.getUI("workzone"),d="ltr"===u.direction,p=function(){n&&cancelAnimationFrame(n),n=null};m.on("dragenter",function(e){p(),i(e)&&(e.preventDefault(),e.stopPropagation(),t=c.data("rectangle"))}).on("dragleave",function(e){p(),i(e)&&(e.preventDefault(),e.stopPropagation())}).on("dragover",function(e){var a;i(e)?(e.preventDefault(),e.stopPropagation(),e.originalEvent.dataTransfer.dropEffect="none",n||(n=requestAnimationFrame(function(){var i,o=t.top+t.height,r=o-u.getUI("navdock").outerHeight(!0);((a=e.pageYr)&&(i=t.cwdEdge>e.pageX?(d?"navbar":"cwd")+(a?"Up":"Down"):(d?"cwd":"navbar")+(a?"Up":"Down"),a||"cwd"===i.substr(0,3)&&(o=11,IE:document.uniqueID,Firefox:window.sidebar,Opera:window.opera,Webkit:e,Chrome:t,Edge:!(!t||!window.msCredentials),Safari:e&&!window.chrome,Mobile:"undefined"!=typeof window.orientation,Touch:"undefined"!=typeof window.ontouchstart,iOS:navigator.platform.match(/^iP(?:[ao]d|hone)/),Mac:navigator.platform.match(/^Mac/),Fullscreen:"undefined"!=typeof(document.exitFullscreen||document.webkitExitFullscreen||document.mozCancelFullScreen||document.msExitFullscreen),Angle:0,Rotated:!1,CSS:function(){var e,t=document.createElement("a").style,n=document.createElement("p").style;return e="position:sticky;position:-webkit-sticky;",e+="width:-webkit-max-content;width:-moz-max-content;width:-ms-max-content;width:max-content;",t.cssText=e,{positionSticky:-1!==t.position.indexOf("sticky"),widthMaxContent:-1!==t.width.indexOf("max-content"),flex:"undefined"!=typeof n.flex}}()};return n}(),cookieEnabled:window.navigator.cookieEnabled,hasRequire:"function"==typeof define&&define.amd,currentReqCmd:"",keyState:{},i18:{en:{translator:"",language:"English",direction:"ltr",dateFormat:"d.m.Y H:i",fancyDateFormat:"$1 H:i",nonameDateFormat:"ymd-His",messages:{}},months:["January","February","March","April","May","June","July","August","September","October","November","December"],monthsShort:["msJan","msFeb","msMar","msApr","msMay","msJun","msJul","msAug","msSep","msOct","msNov","msDec"],days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],daysShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"]},kinds:{unknown:"Unknown",directory:"Folder",group:"Selects",symlink:"Alias","symlink-broken":"AliasBroken","application/x-empty":"TextPlain","application/postscript":"Postscript","application/vnd.ms-office":"MsOffice","application/msword":"MsWord","application/vnd.ms-word":"MsWord","application/vnd.openxmlformats-officedocument.wordprocessingml.document":"MsWord","application/vnd.ms-word.document.macroEnabled.12":"MsWord","application/vnd.openxmlformats-officedocument.wordprocessingml.template":"MsWord","application/vnd.ms-word.template.macroEnabled.12":"MsWord","application/vnd.ms-excel":"MsExcel","application/vnd.openxmlformats-officedocument.spreadsheetml.sheet":"MsExcel","application/vnd.ms-excel.sheet.macroEnabled.12":"MsExcel","application/vnd.openxmlformats-officedocument.spreadsheetml.template":"MsExcel","application/vnd.ms-excel.template.macroEnabled.12":"MsExcel","application/vnd.ms-excel.sheet.binary.macroEnabled.12":"MsExcel","application/vnd.ms-excel.addin.macroEnabled.12":"MsExcel","application/vnd.ms-powerpoint":"MsPP","application/vnd.openxmlformats-officedocument.presentationml.presentation":"MsPP","application/vnd.ms-powerpoint.presentation.macroEnabled.12":"MsPP","application/vnd.openxmlformats-officedocument.presentationml.slideshow":"MsPP","application/vnd.ms-powerpoint.slideshow.macroEnabled.12":"MsPP","application/vnd.openxmlformats-officedocument.presentationml.template":"MsPP","application/vnd.ms-powerpoint.template.macroEnabled.12":"MsPP","application/vnd.ms-powerpoint.addin.macroEnabled.12":"MsPP","application/vnd.openxmlformats-officedocument.presentationml.slide":"MsPP","application/vnd.ms-powerpoint.slide.macroEnabled.12":"MsPP","application/pdf":"PDF","application/xml":"XML","application/vnd.oasis.opendocument.text":"OO","application/vnd.oasis.opendocument.text-template":"OO","application/vnd.oasis.opendocument.text-web":"OO","application/vnd.oasis.opendocument.text-master":"OO","application/vnd.oasis.opendocument.graphics":"OO","application/vnd.oasis.opendocument.graphics-template":"OO","application/vnd.oasis.opendocument.presentation":"OO","application/vnd.oasis.opendocument.presentation-template":"OO","application/vnd.oasis.opendocument.spreadsheet":"OO","application/vnd.oasis.opendocument.spreadsheet-template":"OO","application/vnd.oasis.opendocument.chart":"OO","application/vnd.oasis.opendocument.formula":"OO","application/vnd.oasis.opendocument.database":"OO","application/vnd.oasis.opendocument.image":"OO","application/vnd.openofficeorg.extension":"OO","application/x-shockwave-flash":"AppFlash","application/flash-video":"Flash video","application/x-bittorrent":"Torrent","application/javascript":"JS","application/rtf":"RTF","application/rtfd":"RTF","application/x-font-ttf":"TTF","application/x-font-otf":"OTF","application/x-rpm":"RPM","application/x-web-config":"TextPlain","application/xhtml+xml":"HTML","application/docbook+xml":"DOCBOOK","application/x-awk":"AWK","application/x-gzip":"GZIP","application/x-bzip2":"BZIP","application/x-xz":"XZ","application/zip":"ZIP","application/x-zip":"ZIP","application/x-rar":"RAR","application/x-tar":"TAR","application/x-7z-compressed":"7z","application/x-jar":"JAR","text/plain":"TextPlain","text/x-php":"PHP","text/html":"HTML","text/javascript":"JS","text/css":"CSS","text/rtf":"RTF","text/rtfd":"RTF","text/x-c":"C","text/x-csrc":"C","text/x-chdr":"CHeader","text/x-c++":"CPP","text/x-c++src":"CPP","text/x-c++hdr":"CPPHeader","text/x-shellscript":"Shell","application/x-csh":"Shell","text/x-python":"Python","text/x-java":"Java","text/x-java-source":"Java","text/x-ruby":"Ruby","text/x-perl":"Perl","text/x-sql":"SQL","text/xml":"XML","text/x-comma-separated-values":"CSV","text/x-markdown":"Markdown","image/x-ms-bmp":"BMP","image/jpeg":"JPEG","image/gif":"GIF","image/png":"PNG","image/tiff":"TIFF","image/x-targa":"TGA","image/vnd.adobe.photoshop":"PSD","image/xbm":"XBITMAP","image/pxm":"PXM","image/webp":"WEBP","application/vnd.ms-fontobject":"EOT","font/sfnt":"SFNT","application/font-sfnt":"SFNT","font/ttf":"TTF","font/opentype":"OTF","font/otf":"OTF","application/x-font-opentype":"OTF","font/woff":"WOFF","application/font-woff":"WOFF","font/woff2":"WOFF2","application/font-woff2":"WOFF2","audio/mpeg":"AudioMPEG","audio/midi":"AudioMIDI","audio/ogg":"AudioOGG","audio/mp4":"AudioMPEG4","audio/x-m4a":"AudioMPEG4","audio/wav":"AudioWAV","audio/x-mp3-playlist":"AudioPlaylist","video/x-dv":"VideoDV","video/mp4":"VideoMPEG4","video/mpeg":"VideoMPEG","video/x-msvideo":"VideoAVI","video/quicktime":"VideoMOV","video/x-ms-wmv":"VideoWM","video/x-flv":"VideoFlash","video/x-matroska":"VideoMKV","video/ogg":"VideoOGG"},mimeTypes:{},rules:{defaults:function(e){return!(!e||e.added&&!Array.isArray(e.added)||e.removed&&!Array.isArray(e.removed)||e.changed&&!Array.isArray(e.changed))},open:function(t){return t&&t.cwd&&t.files&&e.isPlainObject(t.cwd)&&Array.isArray(t.files)},tree:function(e){return e&&e.tree&&Array.isArray(e.tree)},parents:function(e){return e&&e.tree&&Array.isArray(e.tree)},tmb:function(t){return t&&t.images&&(e.isPlainObject(t.images)||Array.isArray(t.images))},upload:function(t){return t&&(e.isPlainObject(t.added)||Array.isArray(t.added))},search:function(e){return e&&e.files&&Array.isArray(e.files)}},commands:{},cmdsToAdd:"archive duplicate extract mkdir mkfile paste rm upload",parseUploadData:function(t){var n,i=this;if(!t.trim())return{error:["errResponse","errDataEmpty"]};try{n=JSON.parse(t)}catch(a){return{error:["errResponse","errDataNotJSON"]}}return n=i.normalize(n),i.validResponse("upload",n)?(n.removed=e.merge(n.removed||[],e.map(n.added||[],function(e){return i.file(e.hash)?e.hash:null})),n):{error:n.norError||["errResponse"]}},iframeCnt:0,uploads:{xhrUploading:!1,failSyncTm:null,chunkfailReq:{},checkExists:function(t,n,i,a){var o,r=e.Deferred(),s=[],l={},c=function(){for(var e=t.length;--e>-1;)t[e]._remove=!0},d=function(){r.resolve(s,l)},p=function(){var r=[],p=[],u=n!==i.cwd().hash?i.path(n,!0)+i.option("separator",n):"",h=function(e){var n=e==p.length-1,o={cssClass:"elfinder-confirm-upload",title:i.i18n("cmdupload"),text:["errExists",u+p[e].name,"confirmRepl"],all:!n,accept:{label:"btnYes",callback:function(t){n||t?d():h(++e)}},reject:{label:"btnNo",callback:function(i){var a;if(i)for(a=p.length;e0&&delete o.reject,i.confirm(o)};return i.file(n).read?(o=e.map(t,function(e,t){return!e.name||i.UA.iOS&&"image.jpg"===e.name?null:{i:t,name:e.name}}),void i.request({data:{cmd:"ls",target:n,intersect:e.map(o,function(e){return e.name})},notify:{type:"preupload",cnt:1,hideCnt:!0},preventDefault:!0}).done(function(t){var a,s;t&&(t.error?c():i.options.overwriteUploadConfirm&&i.option("uploadOverwrite",n)&&t.list&&(Array.isArray(t.list)?r=t.list||[]:(a=[],r=e.map(t.list,function(e){return"string"==typeof e?e:(a=a.concat(e),!1)}),a.length&&(r=r.concat(a)),l=t.list),p=e.grep(o,function(t){return-1!==e.inArray(t.name,r)}),p.length&&r.length&&n==i.cwd().hash&&(s=e.map(i.files(n),function(e){return e.name}),e.grep(r,function(t){return-1===e.inArray(t,s)}).length&&i.sync()))),p.length>0?h(0):d()}).fail(function(e){c(),d(),e&&i.error(e)})):void d()};return i.api>=2.1&&"object"==typeof t[0]?p():d(),r},checkFile:function(t,n,i){if(t.checked||"files"==t.type)return t.files;if("data"==t.type){var a,o,r=e.Deferred(),s=e.Deferred(),l=[],c=[],d=0,p=[],u=!1,h=function(e){return Array.prototype.slice.call(e||[],0)},f=function(e){var t,i,a=n.options.folderUploadExclude[n.OS]||null,o=e.length,r=function(){--d<1&&"pending"===s.state()&&s.resolve()},m=function(e){a&&e.name.match(a)||(c.push(t.fullPath||""),l.push(e)),r()},i=function(e){var t=[],n=function(){e.readEntries(function(e){if(u||!e.length){for(var i=0;ig;g++){if(u){s.reject();break}t=e[g],t&&(t instanceof File?m(t):t.isFile?(d++,t.file(m,r)):t.isDirectory&&n.api>=2.1&&(d++,p.push(t.fullPath),i(t.createReader())))}return r(),s};return a=e.map(t.files.items,function(e){return"file"===e.kind?(e.getAsEntry?e.getAsEntry():e.webkitGetAsEntry())||e.getAsFile():null}),e.each(a,function(e,t){return t.isDirectory?(o=!0,!1):void 0}),a.length>0?(n.uploads.checkExists(a,i,n,o).done(function(o,s){var d=[];n.options.overwriteUploadConfirm&&n.option("uploadOverwrite",i)&&(null===o&&(t.overwrite=0,o=[]),a=e.grep(a,function(t){var a,r,l,c;return t.isDirectory&&o.length&&(a=e.inArray(t.name,o),-1!==a&&(o.splice(a,1),r=n.uniqueName(t.name+n.options.backupSuffix,null,""),e.each(s,function(e,n){return t.name==n?(l=e,!1):void 0}),l||(l=n.fileByName(t.name,i).hash),n.lockfiles({files:[l]}),c=n.request({data:{cmd:"rename",target:l,name:r},notify:{type:"rename",cnt:1}}).fail(function(){t._remove=!0,n.sync()}).always(function(){n.unlockfiles({files:[l]})}),d.push(c))),!t._remove})),e.when.apply(e,d).done(function(){var e,t,i=+new Date;a.length>0?(t=n.escape(a[0].name),a.length>1&&(t+=" ... "+a.length+n.i18n("items")),e=setTimeout(function(){n.notify({type:"readdir",id:i,cnt:1,hideCnt:!0,msg:n.i18n("ntfreaddir")+" ("+t+")",cancel:function(){u=!0}})},n.options.notifyDelay),f(a).done(function(){e&&clearTimeout(e),n.notify({type:"readdir",id:i,cnt:-1}),u?r.reject():r.resolve([l,c,o,s,p])}).fail(function(){r.reject()})):r.reject()})}),r.promise()):r.reject()}var m=[],g=[],v=t.files[0];if("html"==t.type){var b,y=e("").append(e.parseHTML(v.replace(/ src=/gi," _elfsrc=")));e("img[_elfsrc]",y).each(function(){var n,i,a=e(this),o=a.closest("a");o&&o.attr("href")&&o.attr("href").match(/\.(?:jpe?g|gif|bmp|png)/i)&&(i=o.attr("href")),n=a.attr("_elfsrc"),n&&(i?(-1==e.inArray(i,m)&&m.push(i),-1==e.inArray(n,g)&&g.push(n)):-1==e.inArray(n,m)&&m.push(n)),1===m.length&&m[0].match(/^data:image\/png/)&&(t.clipdata=!0)}),b=e("a[href]",y),b.each(function(){var t,n,i=function(e){var t=document.createElement("a");return t.href=e,t};(t=e(this).text())&&(n=i(e(this).attr("href")),n.href&&n.href.match(/^(?:ht|f)tp/i)&&(1===b.length||!n.pathname.match(/(?:\.html?|\/[^\/.]*)$/i)||t.trim().match(/\.[a-z0-9-]{1,10}$/i))&&-1==e.inArray(n.href,m)&&-1==e.inArray(n.href,g)&&m.push(n.href))})}else{var w,x,k;for(w=/((?:ht|f)tps?:\/\/[-_.!~*\'()a-z0-9;\/?:\@&=+\$,%#\*\[\]]+)/gi;x=w.exec(v);)k=x[1].replace(/&/g,"&"),-1==e.inArray(k,m)&&m.push(k)}return m},xhr:function(t,n){var i=n?n:this,a=i.getUI(),o=new XMLHttpRequest,r=null,s=null,l=null,c=t.checked,d=t.isDataType||"data"==t.type,p=t.target||i.cwd().hash,u=t.dropEvt||null,h=t.extraData||null,f=-1!=i.option("uploadMaxConn",p),m=Math.min(5,Math.max(1,i.option("uploadMaxConn",p))),g=1e4,v=30,b=0,y=function(t){var n=e.Deferred();return t.promise?t.always(function(e){n.resolve(Array.isArray(e)&&e.length?d?e[0][0]:e[0]:{})}):n.resolve(t.length?d?t[0][0]:t[0]:{}),n},w=e.Deferred().fail(function(e){var t,a=i.parseError(e);"userabort"===a&&(t=!0,a=void 0),k&&(i.uploads.xhrUploading||t)?y(k).done(function(e){t||H(a,e),e._cid?i.uploads.chunkfailReq[e._cid]||(i.uploads.chunkfailReq[e._cid]=!0,setTimeout(function(){n.request({data:{cmd:"upload",target:p,chunk:e._chunk,cid:e._cid,upload:["chunkfail"],mimes:"chunkfail"},options:{type:"post",url:i.uploadURL},preventDefault:!0}).always(function(){delete i.uploads.chunkfailReq[e._chunk]})},1e3)):(i.uploads.failSyncTm&&clearTimeout(i.uploads.failSyncTm),i.uploads.failSyncTm=setTimeout(function(){i.sync(p)},1e3))}):H(a),!t&&i.sync(),i.uploads.xhrUploading=!1,k=null}).done(function(t){i.uploads.xhrUploading=!1,k=null,t&&(i.currentReqCmd="upload",t.warning&&H(t.warning),i.updateCache(t),t.removed&&t.removed.length&&i.remove(t),t.added&&t.added.length&&i.add(t),t.changed&&t.changed.length&&i.change(t),i.trigger("upload",t,!1),i.trigger("uploaddone"),t.toasts&&Array.isArray(t.toasts)&&e.each(t.toasts,function(){this.msg&&i.toast(this)}),t.sync&&i.sync(),t.debug&&(i.responseDebug(t),n.debug("backend-debug",t)))}).always(function(){i.abortXHR(o),a.off("uploadabort",D),e(window).off("unload",D),r&&clearTimeout(r),s&&clearTimeout(s),l&&clearTimeout(l),c&&!t.multiupload&&E()&&i.notify({type:"upload",cnt:-C,progress:0,size:0}),s&&M&&i.notify({type:"chunkmerge",cnt:-C}),B&&S.children(".elfinder-notify-chunkmerge").length&&i.notify({type:"chunkmerge",cnt:-1})}),x=new FormData,k=t.input?t.input.files:i.uploads.checkFile(t,i,p),C=t.checked&&d?k[0].length:k.length,z=!1,T=0,A=0,j=0,O=!1,S=i.ui.notify,I=!0,M=!1,F=!1,E=function(){return!O&&($=S.children(".elfinder-notify-upload")).length&&(O=!0),O},D=function(e,t){F=!0,i.abortXHR(o,{quiet:!0,abort:!0}),w.reject(t),E()&&i.notify({type:"upload",cnt:-1*$.data("cnt"),progress:0,size:0})},U=function(e,t){$.children(".elfinder-notify-cancel")[e?"show":"hide"](),I=e},P=function(e){return e||(e=j),setTimeout(function(){O=!0,i.notify({type:"upload",cnt:C,progress:T-A,size:e,cancel:function(){a.trigger("uploadabort","userabort")}}),$=S.children(".elfinder-notify-upload"),A=T,t.multiupload?I&&U(!0):U(I&&e>T)},i.options.notifyDelay)},R=function(){b++<=v?(E()&&A&&i.notify({type:"upload",cnt:0,progress:0,size:A}),i.abortXHR(o,{quiet:!0}),A=T=0,setTimeout(function(){var e;F||(o.open("POST",i.uploadURL,!0),i.api>=2.1029&&(e=(+new Date).toString(16)+Math.floor(1e3*Math.random()).toString(16),"function"==typeof x["delete"]&&x["delete"]("reqid"),x.append("reqid",e),o._requestId=e),o.send(x))},g)):a.trigger("uploadabort",["errAbort","errTimeout"])},q=function(){O&&w.notifyWith($,[{cnt:$.data("cnt"),progress:$.data("progress"),total:$.data("total")}])},H=function(e,t,n){e&&i.trigger("xhruploadfail",{error:e,file:t}),n?e&&(N=i.options.maxErrorDialogs&&(_=_.concat("moreErrors",N-i.options.maxErrorDialogs)),i.error(_)),_=[],N=0)},_=[],N=0,L=t.renames||null,W=t.hashes||null,B=!1,$=e();if(a.one("uploadabort",D),e(window).one("unload."+n.namespace,D),!B&&(A=T),!d&&!C)return w.reject(["errUploadNoFiles"]);o.addEventListener("error",function(){0==o.status?F?w.reject():!d&&t.files&&e.grep(t.files,function(e){return!e.type&&e.size===(i.UA.Safari?1802:0)}).length?w.reject(["errAbort","errFolderUpload"]):t.input&&e.grep(t.input.files,function(e){return!e.type&&e.size===(i.UA.Safari?1802:0)}).length?w.reject(["errUploadNoFiles"]):R():a.trigger("uploadabort","errConnect")},!1),o.addEventListener("load",function(e){var n,s,c=o.status,p=0,u="";if(i.setCustomHeaderByXhr(o),c>=400?u=c>500?"errResponse":["errResponse","errServerError"]:o.responseText||(u=["errResponse","errDataEmpty"]),u&&(a.trigger("uploadabort"),y(k||{}).done(function(e){return w.reject(e._cid?null:u)})),T=j,E()&&(p=T-A)&&(i.notify({type:"upload",cnt:0,progress:p,size:0}),q()),n=i.parseUploadData(o.responseText),n._chunkmerged){x=new FormData;var h=[{_chunkmerged:n._chunkmerged,_name:n._name,_mtime:n._mtime}];return B=!0,a.off("uploadabort",D),l=setTimeout(function(){i.notify({type:"chunkmerge",cnt:1})},i.options.notifyDelay),void(d?K(h,k[1]):K(h))}n._multiupload=!!t.multiupload,n.error?(s={cmd:"upload",err:n,xhr:o,rc:o.status},i.trigger("uploadfail",n),i.trigger("requestError",s),s._getEvent&&s._getEvent().isDefaultPrevented()?n.error="":i.handleCsrfReload(o,n)&&(n.error=""),n._chunkfailure||n._multiupload?(F=!0,i.uploads.xhrUploading=!1,r&&clearTimeout(r),$.length?(i.notify({type:"upload",cnt:-C,progress:0,size:0}),w.reject(n)):w.reject()):w.reject(n)):w.resolve(n)},!1),o.upload.addEventListener("loadstart",function(e){!B&&e.lengthComputable&&(T=e.loaded,b&&(T=0),j=e.total,T||(T=parseInt(.05*j)),E()&&(i.notify({type:"upload",cnt:0,progress:T-A,size:t.multiupload?0:j}),A=T,q()))},!1),o.upload.addEventListener("progress",function(e){var n;e.lengthComputable&&!B&&o.readyState<2&&(T=e.loaded,!t.checked&&T>0&&!r&&(r=P(o._totalSize-T)),j||(j=e.total,T||(T=parseInt(.05*j))),n=T-A,E()&&n/e.total>=.05&&(i.notify({type:"upload",cnt:0,progress:n,size:0}),A=T,q()),!M&&T>=j&&!z&&(M=!0,s=setTimeout(function(){i.notify({type:"chunkmerge",cnt:C})},i.options.notifyDelay)),I&&!t.multiupload&&T>=j&&E()&&U(!1))},!1);var K=function(a,s){var l,g,v,b,y,k,T,A,j,O,S,M,D,R,q,N=0,B=1,$=[],K=0,V=C,X=0,G=[],J=(new Date).getTime().toString().substr(-9),Y=Math.min((n.uplMaxSize?n.uplMaxSize:2097152)-8190,n.options.uploadMaxChunkSize),Q=f?!1:"",Z=function(a,o){var s,l,c,h=[],f=0;if(!F){for(;a.length&&h.lengthm&&!F;m++)s=d?h[m][0][0]._cid||null:h[m][0]._cid||null,c=!(!c&&!s),R[s]?D--:n.exec("upload",{type:t.type,isDataType:d,files:h[m],checked:!0,target:p,dropEvt:u,renames:L,hashes:W,multiupload:!0,overwrite:0===t.overwrite?0:void 0,clipdata:t.clipdata},void 0,p).fail(function(e){e&&"No such command"===e&&(F=!0,n.error(["errUpload","errPerm"])),s&&(R[s]=!0)}).always(function(t){t&&t.added&&(S=e.merge(S,t.added)),D<=++M&&(n.trigger("multiupload",{added:S}),r&&clearTimeout(r),E()&&i.notify({type:"upload",cnt:-C,progress:0,size:0})),a.length?Z(a,1):(--l<=1&&I&&U(!1,c),w.resolve())})}}(h.length<1||F)&&(F?(r&&clearTimeout(r),s&&(R[s]=!0),w.reject()):(w.resolve(),i.uploads.xhrUploading=!1))},ee=function(){i.uploads.xhrUploading?setTimeout(ee,100):(i.uploads.xhrUploading=!0,Z($,m))};if(!c&&(d||"files"==t.type)){for((l=n.option("uploadMaxSize",p))||(l=0),y=0;y=2.1&&("slice"in j?Q="slice":"mozSlice"in j?Q="mozSlice":"webkitSlice"in j&&(Q="webkitSlice")))}catch(te){C--,V--;continue}if(l&&g>l||!Q&&n.uplMaxSize&&g>n.uplMaxSize)H(["errUploadFile",j.name,"errUploadFileSize"],j,!0),C--,V--;else if(!j.type||i.uploadMimeCheck(j.type,p))if(Q&&g>Y){for(k=0,T=Y,A=-1,V=Math.floor((g-1)/Y),v=j.lastModified?Math.round(j.lastModified/1e3):0,b=t.clipdata?n.date(n.nonameDateFormat)+".png":j.name,X+=g,G[J]=0;g>k;)O=j[Q](k,T),O._chunk=b+"."+ ++A+"_"+V+".part",O._cid=J,O._range=k+","+O.size+","+g,O._mtime=v,G[J]++,N&&K++,"undefined"==typeof $[K]&&($[K]=[],d&&($[K][0]=[],$[K][1]=[])),N=Y,B=1,d?($[K][0].push(O),$[K][1].push(s[y])):$[K].push(O),k=T,T=k+Y;null==O?(H(["errUploadFile",j.name,"errUploadFileSize"],j,!0),C--,V--):(V+=A,N=0,B=1,K++)}else(n.uplMaxSize&&N+g>n.uplMaxSize||B>n.uplMaxFile)&&(N=0,B=1,K++),"undefined"==typeof $[K]&&($[K]=[],d&&($[K][0]=[],$[K][1]=[])),d?($[K][0].push(j),$[K][1].push(s[y])):$[K].push(j),N+=g,X+=g,B++;else H(["errUploadFile",j.name,"errUploadMime","("+j.type+")"],j,!0),C--,V--}if(_.length&&H(),0==$.length)return t.checked=!0,!1;if($.length>1)return r=P(X),S=[],M=0,D=$.length,R=[],ee(),!0;d?(a=$[0][0],s=$[0][1]):a=$[0]}return c||(n.UA.Safari&&t.files?o._totalSize=X:r=P(X)),c=!0,a.length||w.reject(["errUploadNoFiles"]),o.open("POST",i.uploadURL,!0),n.customHeaders&&e.each(n.customHeaders,function(e){o.setRequestHeader(e,this)}),n.xhrFields&&e.each(n.xhrFields,function(e){e in o&&(o[e]=this)}),i.api>=2.1029&&(q=(+new Date).toString(16)+Math.floor(1e3*Math.random()).toString(16),x.append("reqid",q),o._requestId=q),x.append("cmd","upload"),x.append(i.newAPI?"target":"current",p),L&&L.length&&(e.each(L,function(e,t){x.append("renames[]",t)}),x.append("suffix",n.options.backupSuffix)),W&&e.each(W,function(e,t){x.append("hashes["+e+"]",t)}),e.each(i.customData,function(e,t){x.append(e,t)}),e.each(i.options.onlyMimes,function(e,t){x.append("mimes[]",t)}),e.each(a,function(e,i){var a,o;i._chunkmerged?(x.append("chunk",i._chunkmerged),x.append("upload[]",i._name),x.append("mtime[]",i._mtime),t.clipdata&&x.append("overwrite",0),z=!0):(i._chunkfail?(x.append("upload[]","chunkfail"),x.append("mimes","chunkfail")):(t.clipdata?i._chunk||(t.overwrite=0,a=n.date(n.nonameDateFormat)+".png"):i.name&&(a=i.name,n.UA.iOS&&(a.match(/^image\.jpe?g$/i)?(t.overwrite=0,a=n.date(n.nonameDateFormat)+".jpg"):a.match(/^capturedvideo\.mov$/i)&&(t.overwrite=0,a=n.date(n.nonameDateFormat)+".mov")),o=(i.webkitRelativePath||i.relativePath||i._relativePath||"").replace(/[^\/]+$/,""),a=o+a),a?x.append("upload[]",i,a):x.append("upload[]",i)),i._chunk?(x.append("chunk",i._chunk),x.append("cid",i._cid),x.append("range",i._range),x.append("mtime[]",i._mtime),z=!0):x.append("mtime[]",i.lastModified?Math.round(i.lastModified/1e3):0))}),d&&e.each(s,function(e,t){x.append("upload_path[]",t)}),0===t.overwrite&&x.append("overwrite",0),u&&x.append("dropWith",parseInt((u.altKey?"1":"0")+(u.ctrlKey?"1":"0")+(u.metaKey?"1":"0")+(u.shiftKey?"1":"0"),2)),h&&e.each(h,function(e,t){x.append(e,t)}),o.send(x),!0};if(d)c?K(k[0],k[1]):k.done(function(t){if(L=[],C=t[0].length){if(t[4]&&t[4].length)return void n.request({data:{cmd:"mkdir",target:p,dirs:t[4]},notify:{type:"mkdir",cnt:t[4].length},preventFail:!0}).fail(function(e){e=e||["errUnknown"],"errCmdParams"===e[0]?m=1:(m=0,w.reject(e))}).done(function(n){var i=!1;n.hashes||(n.hashes={}),t[1]=e.map(t[1],function(e,a){return t[0][a]._relativePath=e.replace(/^\//,""),e=e.replace(/\/[^\/]*$/,""),""===e?p:n.hashes[e]?n.hashes[e]:(i=!0,t[0][a]._remove=!0,null)}),i&&(t[0]=e.grep(t[0],function(e){return!e._remove}))}).always(function(e){m&&(L=t[2],W=t[3],K(t[0],t[1]))});t[1]=e.map(t[1],function(){return p}),L=t[2],W=t[3],K(t[0],t[1])}else w.reject(["errUploadNoFiles"])}).fail(function(){w.reject()});else if(k.length>0)if(t.clipdata||null!=L)K(k)||w.reject();else{var V=[],X=[],G=n.options.folderUploadExclude[n.OS]||null;e.each(k,function(t,n){var i,a,o=n.webkitRelativePath||n.relativePath||"";return o?(G&&n.name.match(G)?(n._remove=!0,o=void 0):(o="/"+o.replace(/\/[^\/]*$/,"").replace(/^\//,""),o&&-1===e.inArray(o,V)&&(V.push(o),i=o.substr(1).indexOf("/"),-1!==i&&(a=o.substr(0,i+1))&&-1===e.inArray(a,V)&&V.unshift(a))),void X.push(o)):!1}),L=[],W={},V.length?!function(){var t=e.map(V,function(e){return-1===e.substr(1).indexOf("/")?{name:e.substr(1)}:null}),i=[];n.uploads.checkExists(t,p,n,!0).done(function(a,o){var r,s,l,c=[];n.options.overwriteUploadConfirm&&n.option("uploadOverwrite",p)&&(i=e.map(t,function(e){return e._remove?e.name:null}),t=e.grep(t,function(e){return!e._remove})),i.length&&e.each(X.concat(),function(t,n){0===e.inArray(n,i)&&(k[t]._remove=!0,X[t]=void 0)}),k=e.grep(k,function(e){return!e._remove}),X=e.grep(X,function(e){return void 0!==e}),t.length?(r=e.Deferred(),a.length?e.each(a,function(t,i){s=n.uniqueName(i+n.options.backupSuffix,null,""),e.each(o,function(e,t){return a[0]==t?(l=e,!1):void 0}),l||(l=n.fileByName(a[0],p).hash),n.lockfiles({files:[l]}),c.push(n.request({data:{cmd:"rename",target:l,name:s},notify:{type:"rename",cnt:1}}).fail(function(e){w.reject(e),n.sync()}).always(function(){n.unlockfiles({files:[l]})}))}):c.push(null),e.when.apply(e,c).done(function(){n.request({data:{cmd:"mkdir",target:p,dirs:V},notify:{type:"mkdir",cnt:V.length},preventFail:!0}).fail(function(e){e=e||["errUnknown"],"errCmdParams"===e[0]?m=1:(m=0,w.reject(e))}).done(function(t){var n=!1;t.hashes||(t.hashes={}),X=e.map(X.concat(),function(e,i){return"/"===e?p:t.hashes[e]?t.hashes[e]:(n=!0,k[i]._remove=!0,null)}),n&&(k=e.grep(k,function(e){return!e._remove}))}).always(function(e){m&&(d=!0,K(k,X)||w.reject())})})):w.reject(); })}():n.uploads.checkExists(k,p,n).done(function(i,a){n.options.overwriteUploadConfirm&&n.option("uploadOverwrite",p)&&(W=a,null===i?t.overwrite=0:L=i,k=e.grep(k,function(e){return!e._remove})),C=k.length,C>0?K(k)||w.reject():w.reject()})}else w.reject();return w},iframe:function(t,n){var i,a,o,r,s=n?n:this,l=t.input?t.input:!1,c=l?!1:s.uploads.checkFile(t,s),d=e.Deferred().fail(function(e){e&&s.error(e)}),p="iframe-"+n.namespace+ ++s.iframeCnt,u=e('
    '),h=this.UA.IE,f=function(){r&&clearTimeout(r),o&&clearTimeout(o),a&&s.notify({type:"upload",cnt:-i}),setTimeout(function(){h&&e('').appendTo(u),u.remove(),m.remove()},100)},m=e('').on("load",function(){m.off("load").on("load",function(){f(),d.resolve()}),o=setTimeout(function(){a=!0,s.notify({type:"upload",cnt:i})},s.options.notifyDelay),s.options.iframeTimeout>0&&(r=setTimeout(function(){f(),d.reject(["errConnect","errTimeout"])},s.options.iframeTimeout)),u.submit()}),g=t.target||s.cwd().hash,v=[],b=[],y=[],w={};if(c&&c.length)e.each(c,function(e,t){u.append('')}),i=1;else{if(!(l&&e(l).is(":file")&&e(l).val()))return d.reject();n.options.overwriteUploadConfirm&&n.option("uploadOverwrite",g)&&(v=l.files?l.files:[{name:e(l).val().replace(/^(?:.+[\\\/])?([^\\\/]+)$/,"$1")}],b.push(s.uploads.checkExists(v,g,s).done(function(n,a){w=a,null===n?t.overwrite=0:(y=n,i=e.grep(v,function(e){return!e._remove}).length,i!=v.length&&(i=0))}))),i=l.files?l.files.length:1,u.append(l)}return e.when.apply(e,b).done(function(){return 1>i?d.reject():(u.append('').append('').append('').append(e(l).attr("name","upload[]")),y.length>0&&(e.each(y,function(e,t){u.append('')}),u.append('')),w&&e.each(y,function(e,t){u.append('')}),0===t.overwrite&&u.append(''),e.each(s.options.onlyMimes||[],function(e,t){u.append('')}),e.each(s.customData,function(e,t){u.append('')}),u.appendTo("body"),void m.appendTo("body"))}),d}},one:function(e,t,n){var i=this,a=e.toLowerCase(),o=function(e,n){return i.toUnbindEvents[a]||(i.toUnbindEvents[a]=[]),i.toUnbindEvents[a].push({type:a,callback:o}),(t.done?t.done:t).apply(this,arguments)};return t.done&&(o={done:o}),this.bind(a,o,n)},localStorage:function(t,n){var i,a,o,r,s,l=this,c=window.localStorage,d="elfinder-"+(t||"")+this.id,p=window.location.pathname+"-elfinder-",u=this.id,h=[];if("undefined"==typeof t)return r=p.length,s=-1*u.length,e.each(c,function(e){e.substr(0,r)===p&&e.substr(s)===u&&h.push(e)}),e.each(h,function(e,t){c.removeItem(t)}),!0;if(t=p+t+u,null===n)return c.removeItem(t);if(void 0===n&&!(i=c.getItem(t))&&(a=c.getItem(d))&&(n=a,c.removeItem(d)),void 0!==n){o=typeof n,"string"!==o&&"number"!==o&&(n=JSON.stringify(n));try{c.setItem(t,n)}catch(f){try{c.clear(),c.setItem(t,n)}catch(f){l.debug("error",f.toString())}}i=c.getItem(t)}if(i&&("{"===i.substr(0,1)||"["===i.substr(0,1)))try{return JSON.parse(i)}catch(f){}return i},sessionStorage:function(e,t){var n,i,a,o=this;try{n=window.sessionStorage}catch(r){}if(n){if(null===t)return n.removeItem(e);if(void 0!==t){a=typeof t,"string"!==a&&"number"!==a&&(t=JSON.stringify(t));try{n.setItem(e,t)}catch(r){try{n.clear(),n.setItem(e,t)}catch(r){o.debug("error",r.toString())}}}if(i=n.getItem(e),i&&("{"===i.substr(0,1)||"["===i.substr(0,1)))try{return JSON.parse(i)}catch(r){}return i}},cookie:function(e,t){var n,i,a,o,r,s;if(e="elfinder-"+e+this.id,void 0===t){if(this.cookieEnabled&&document.cookie&&""!=document.cookie)for(a=document.cookie.split(";"),e+="=",o=0;o"),escape:function(e){return this._node.text(e).html().replace(/"/g,""").replace(/'/g,"'")},normalize:function(t){var n,i,a,o,r,s=this,l=function(){var e,t;return(t=s.options.fileFilter)&&("function"==typeof t?e=function(e){return t.call(s,e)}:t instanceof RegExp&&(e=function(e){return t.test(e.name)})),e?e:null}(),c=function(t){var n;t.uiCmdMap&&(e.isPlainObject(t.uiCmdMap)&&Object.keys(t.uiCmdMap).length?(t.disabledFlip||(t.disabledFlip={}),n=t.disabledFlip,e.each(t.uiCmdMap,function(e,i){"hidden"!==i||n[e]||(t.disabled.push(e),t.disabledFlip[e]=!0)})):delete t.uiCmdMap)},d=function(t){var n=function(e){var t=typeof e;return"object"===t&&Array.isArray(e)&&(t="array"),t};return e.each(s.optionProperties,function(e,i){void 0!==i&&t[e]&&n(t[e])!==n(i)&&(t[e]=i)}),t.disabled?(t.disabledFlip=s.arrayFlip(t.disabled,!0),e.each(s.options.disabledCmdsRels,function(n,i){var a,o;t.disabledFlip[n]?o=!0:(a=n.match(/^([^&]+)&([^=]+)=(.*)$/))&&t.disabledFlip[a[1]]&&t[a[2]]==a[3]&&(o=!0),o&&e.each(i,function(e,n){t.disabledFlip[n]||(t.disabledFlip[n]=!0,t.disabled.push(n))})})):t.disabledFlip={},t},p=function(t,r,p){var u,h,m,g,v=r?t:!0,b=r?null:!1;if(t&&t.hash&&t.name&&t.mime){if("application/x-empty"===t.mime&&(t.mime="text/plain"),m=s.isRoot(t),m&&!t.volumeid&&s.debug("warning","The volume root statuses requires `volumeid` property."),m||"directory"===t.mime){if(t.phash){if(t.phash===t.hash)return f=f.concat(['Parent folder of "$1" is itself.',t.name]),b;if(m&&t.volumeid&&0===t.phash.indexOf(t.volumeid))return f=f.concat(['Parent folder of "$1" is inner itself.',t.name]),b}t.volumeid&&(u=t.volumeid,m&&(t.phash&&(s.leafRoots[t.phash]?-1===e.inArray(t.hash,s.leafRoots[t.phash])&&s.leafRoots[t.phash].push(t.hash):s.leafRoots[t.phash]=[t.hash]),s.hasVolOptions=!0,s.volOptions[u]||(s.volOptions[u]={dispInlineRegex:s.options.dispInlineRegex}),h=s.volOptions[u],t.options&&Object.assign(h,t.options),t.disabled&&(h.disabled=t.disabled,h.disabledFlip=s.arrayFlip(t.disabled,!0)),t.tmbUrl&&(h.tmbUrl=t.tmbUrl),h.url&&"/"!==h.url.substr(-1)&&(h.url+="/"),c(h),h.trashHash&&(s.trashes[h.trashHash]===!1?delete h.trashHash:s.trashes[h.trashHash]=t.hash),e.each(s.optionProperties,function(e){h[e]&&(t[e]=h[e])}),"cwd"!==p&&(s.roots[u]=t.hash),t.expires&&(s.volumeExpires[u]=t.expires)),o!==u&&(o=u,a=s.option("i18nFolderName",u))),m&&!t.i18&&(n="volume_"+t.name,i=s.i18n(!1,n),n!==i&&(t.i18=i)),a&&!t.i18&&(n="folder_"+t.name,i=s.i18n(!1,n),n!==i&&(t.i18=i)),m&&s.options.enableRootRename!==!1&&(g=s.storage("rootNames"))&&(g[t.hash]&&(t._name=t.name,t._i18=t.i18,t.name=g[t.hash]=g[t.hash],delete t.i18),s.storage("rootNames",g)),s.trashes[t.hash]&&(t.locked=!0)}else{if(l)try{if(!l(t))return b}catch(y){s.debug(y)}0==t.size&&(t.mime=s.getMimetype(t.name,t.mime))}return t.options&&(s.optionsByHashes[t.hash]=d(t.options)),delete t.options,v}return b},u=function(t){var n=[];return e.each(s.files(),function(i,a){e.each(s.parents(i),function(a,o){return-1!==e.inArray(o,t)&&-1===e.inArray(i,t)?(n.push(i),!1):void 0})}),n},h=function(n,i){e.each(n,function(n,a){var o,r;s.leafRoots[a.hash]&&s.applyLeafRootStats(a),"change"!==i&&a.phash&&s.isRoot(a)&&(o=s.file(a.phash))&&(s.applyLeafRootStats(o),t.changed?(e.each(t.changed,function(e,n){return n.hash===o.hash?(t.changed[e]=o,r=!0,!1):void 0}),r||t.changed.push(o)):t.changed=[o])})},f=[];if(t.customData&&(!s.prevCustomData||JSON.stringify(t.customData)!==JSON.stringify(s.prevCustomData))){s.prevCustomData=t.customData;try{r=JSON.parse(t.customData),e.isPlainObject(r)&&(s.prevCustomData=r,e.each(Object.keys(r),function(e,t){null===r[t]&&(delete r[t],delete s.optsCustomData[t])}),s.customData=Object.assign({},s.optsCustomData,r))}catch(m){}}return t.options&&d(t.options),t.cwd&&(t.cwd.volumeid&&t.options&&Object.keys(t.options).length&&s.isRoot(t.cwd)&&(s.hasVolOptions=!0,s.volOptions[t.cwd.volumeid]=t.options),t.cwd=p(t.cwd,!0,"cwd")),t.files&&(t.files=e.grep(t.files,p)),t.tree&&(t.tree=e.grep(t.tree,p)),t.added&&(t.added=e.grep(t.added,p)),t.changed&&(t.changed=e.grep(t.changed,p)),t.removed&&t.removed.length&&2===s.searchStatus.state&&(t.removed=t.removed.concat(u(t.removed))),t.api&&(t.init=!0),Object.keys(s.leafRoots).length&&(t.files&&h(t.files),t.tree&&h(t.tree),t.added&&h(t.added),t.changed&&h(t.changed,"change")),t.cwd&&t.cwd.options&&t.options&&Object.assign(t.options,d(t.cwd.options)),t.options&&t.options.url&&"/"!==t.options.url.substr(-1)&&(t.options.url+="/"),f.length&&(t.norError=["errResponse"].concat(f)),t},setSort:function(e,t,n,i){this.storage("sortType",this.sortType=this.sortRules[e]?e:"name"),this.storage("sortOrder",this.sortOrder=/asc|desc/.test(t)?t:"asc"),this.storage("sortStickFolders",(this.sortStickFolders=!!n)?1:""),this.storage("sortAlsoTreeview",(this.sortAlsoTreeview=!!i)?1:""),this.trigger("sortchange")},_sortRules:{name:function(e,t){return i.prototype.naturalCompare(e.i18||e.name,t.i18||t.name)},size:function(e,t){var n=parseInt(e.size)||0,i=parseInt(t.size)||0;return n===i?0:n>i?1:-1},kind:function(e,t){return i.prototype.naturalCompare(e.mime,t.mime)},date:function(e,t){var n=e.ts||e.date||0,i=t.ts||t.date||0;return n===i?0:n>i?1:-1},perm:function(e,t){var n=function(e){return(e.write?2:0)+(e.read?1:0)},i=n(e),a=n(t);return i===a?0:i>a?1:-1},mode:function(e,t){var n=e.mode||e.perm||"",a=t.mode||t.perm||"";return i.prototype.naturalCompare(n,a)},owner:function(e,t){var n=e.owner||"",a=t.owner||"";return i.prototype.naturalCompare(n,a)},group:function(e,t){var n=e.group||"",a=t.group||"";return i.prototype.naturalCompare(n,a)}},sorters:{},naturalCompare:function(e,t){var n=i.prototype.naturalCompare;return"undefined"==typeof n.loc&&(n.loc=navigator.userLanguage||navigator.browserLanguage||navigator.language||"en-US"),"undefined"==typeof n.sort&&("11".localeCompare("2",n.loc,{numeric:!0})>0?window.Intl&&window.Intl.Collator?n.sort=new Intl.Collator(n.loc,{numeric:!0}).compare:n.sort=function(e,t){return e.localeCompare(t,n.loc,{numeric:!0})}:(n.sort=function(e,t){var i,a,o=/(^-?[0-9]+(\.?[0-9]*)[df]?e?[0-9]?$|^0x[0-9a-f]+$|[0-9]+)/gi,r=/(^[ ]*|[ ]*$)/g,s=/(^([\w ]+,?[\w ]+)?[\w ]+,?[\w ]+\d+:\d+(:\d+)?[\w ]?|^\d{1,4}[\/\-]\d{1,4}[\/\-]\d{1,4}|^\w+, \w+ \d+, \d{4})/,l=/^0x[0-9a-f]+$/i,c=/^0/,d=/^[\x01\x21-\x2f\x3a-\x40\x5b-\x60\x7b-\x7e]/,p=function(e){return n.sort.insensitive&&(""+e).toLowerCase()||""+e},u=p(e).replace(r,"").replace(/^_/,"")||"",h=p(t).replace(r,"").replace(/^_/,"")||"",f=u.replace(o,"\x00$1\x00").replace(/\0$/,"").replace(/^\0/,"").split("\x00"),m=h.replace(o,"\x00$1\x00").replace(/\0$/,"").replace(/^\0/,"").split("\x00"),g=parseInt(u.match(l))||1!=f.length&&u.match(s)&&Date.parse(u),v=parseInt(h.match(l))||g&&h.match(s)&&Date.parse(h)||null,b=0;if(v){if(v>g)return-1;if(g>v)return 1}for(var y=0,w=Math.max(f.length,m.length);w>y;y++){if(i=!(f[y]||"").match(c)&&parseFloat(f[y])||f[y]||0,a=!(m[y]||"").match(c)&&parseFloat(m[y])||m[y]||0,isNaN(i)!==isNaN(a)){if(isNaN(i)&&("string"!=typeof i||!i.match(d)))return 1;if("string"!=typeof a||!a.match(d))return-1}if(0===parseInt(i,10)&&(i=0),0===parseInt(a,10)&&(a=0),typeof i!=typeof a&&(i+="",a+=""),n.sort.insensitive&&"string"==typeof i&&"string"==typeof a&&(b=i.localeCompare(a,n.loc),0!==b))return b;if(a>i)return-1;if(i>a)return 1}return 0},n.sort.insensitive=!0)),n.sort(e,t)},compare:function(e,t){var n,i=this,a=i.sortType,o="asc"==i.sortOrder,r=i.sortStickFolders,s=i.sortRules,l=s[a],c="directory"==e.mime,d="directory"==t.mime;if(r){if(c&&!d)return-1;if(!c&&d)return 1}return n=o?l(e,t):l(t,e),"name"!==a&&0===n?n=o?s.name(e,t):s.name(t,e):n},sortFiles:function(e){return e.sort(this.compare)},notify:function(t){var n,i,a,o=this,r=t.type,s=t.id?"elfinder-notify-"+t.id:"",l=this.i18n("undefined"!=typeof t.msg?t.msg:this.messages["ntf"+r]?"ntf"+r:"ntfsmth"),c=this.arrayFlip(this.options.notifyDialog.hiddens||[]),d=this.ui.notify,p=d.closest(".ui-dialog"),u=d.children(".elfinder-notify-"+r+(s?"."+s:"")),h=u.children("div.elfinder-notify-cancel").children("button"),f='
    {msg}
    ',m=t.cnt+0,g="undefined"!=typeof t.size?parseInt(t.size):null,v="undefined"!=typeof t.progress&&t.progress>=0?t.progress:null,b=t.fakeinterval||200,y=t.cancel,w="ui-state-hover",x=function(){var t=u.find(".elfinder-notify-progress"),n=function(){u.remove(),d.children(p.data("minimized")?void 0:":visible").length||(p.data("minimized")?p.data("minimized").hide():d.elfinderdialog("close")),C()};u._esc&&e(document).off("keydown",u._esc),u.data("cur")<100?t.animate({width:"100%"},50,function(){requestAnimationFrame(function(){n()})}):n()},k=function(e){var t;u.length&&(t=u.data("cur")+1,98>=t&&(u.find(".elfinder-notify-progress").width(t+"%"),u.data("cur",t),C(),setTimeout(function(){e*=1.05,k(e)},e)))},C=function(){var t,n=0,i=0,a=d.children(".elfinder-notify");a.length?(a.each(function(){n++,i+=Math.min(e(this).data("cur"),100)}),t=n?Math.floor(i/(100*n)*100)+"%":0,o.ui.progressbar.width(t),p.data("minimized")&&(p.data("minimized").title(t),p.data("minimized").dialog().children(".ui-dialog-titlebar").children(".elfinder-ui-progressbar").width(t))):(o.ui.progressbar.width(0),p.data("minimized")&&p.data("minimized").hide())};return r?(u.length?"undefined"!=typeof t.msg&&u.children("span.elfinder-notify-msg").html(l):(u=e(f.replace(/\{type\}/g,r).replace(/\{msg\}/g,l)),c[r]?u.hide():d.on("minimize",function(e){p.data("minimized")&&C()}),u.appendTo(d).data("cnt",0),null!=v?u.data({progress:0,total:0,cur:0}):(u.data({cur:0}),k(b)),y&&(h=e('').on("mouseenter mouseleave",function(t){e(this).toggleClass(w,"mouseenter"===t.type)}),u.children("div.elfinder-notify-cancel").append(h)),d.trigger("resize")),n=m+parseInt(u.data("cnt")),n>0?(y&&h.length&&("function"==typeof y||"object"==typeof y&&y.promise)&&(u._esc=function(t){"keydown"==t.type&&t.keyCode!=e.ui.keyCode.ESCAPE||(t.preventDefault(),t.stopPropagation(),x(),y.promise?y.reject(0):y(t))},h.on("click",function(e){u._esc(e)}),e(document).on("keydown."+this.namespace,u._esc)),!t.hideCnt&&u.children(".elfinder-notify-cnt").text("("+n+")"),m>0&&d.is(":hidden")&&!c[r]&&(p.data("minimized")?p.data("minimized").show():d.elfinderdialog("open",this).height("auto")),u.data("cnt",n),null!=v&&(i=u.data("total"))>=0&&(a=u.data("progress"))>=0&&(i+=null!=g?g:m,a+=v,null==g&&0>m&&(a+=100*m),u.data({progress:a,total:i}),null!=g&&(a*=100,i=Math.max(1,i)),v=Math.min(parseInt(a/i),100),u.find(".elfinder-notify-progress").animate({width:(100>v?v:100)+"%"},20,function(){u.data("cur",v),C()}))):x(),this):this},confirm:function(t){var n,i,a=this,o=!1,r={cssClass:"elfinder-dialog-confirm",modal:!0,resizable:!1,title:this.i18n(t.title||"confirmReq"),buttons:{},close:function(){!o&&t.cancel.callback(),e(this).elfinderdialog("destroy")}},s=this.i18n("apllyAll");return t.cssClass&&(r.cssClass+=" "+t.cssClass),r.buttons[this.i18n(t.accept.label)]=function(){t.accept.callback(!(!n||!n.prop("checked"))),o=!0,e(this).elfinderdialog("close")},r.buttons[this.i18n(t.accept.label)]._cssClass="elfinder-confirm-accept",t.reject&&(r.buttons[this.i18n(t.reject.label)]=function(){t.reject.callback(!(!n||!n.prop("checked"))),o=!0,e(this).elfinderdialog("close")},r.buttons[this.i18n(t.reject.label)]._cssClass="elfinder-confirm-reject"),t.buttons&&t.buttons.length>0&&(i=1,e.each(t.buttons,function(t,s){r.buttons[a.i18n(s.label)]=function(){s.callback(!(!n||!n.prop("checked"))),o=!0,e(this).elfinderdialog("close")},r.buttons[a.i18n(s.label)]._cssClass="elfinder-confirm-extbtn"+i++,s.cssClass&&(r.buttons[a.i18n(s.label)]._cssClass+=" "+s.cssClass)})),r.buttons[this.i18n(t.cancel.label)]=function(){e(this).elfinderdialog("close")},r.buttons[this.i18n(t.cancel.label)]._cssClass="elfinder-confirm-cancel",t.all&&(r.create=function(){var t=e('
    ');n=e(''),e(this).next().find(".ui-dialog-buttonset").prepend(t.append(e("").prepend(n)))}),t.optionsCallback&&"function"==typeof t.optionsCallback&&t.optionsCallback(r),this.dialog(''+this.i18n(t.text),r)},uniqueName:function(e,t,n){var i,a,o=0,r="";if(e=this.i18n(!1,e),t=t||this.cwd().hash,n="undefined"==typeof n?" ":n,(i=e.match(/^(.+)(\.[^.]+)$/))&&(r=i[2],e=i[1]),a=e+r,!this.fileByName(a,t))return a;for(;1e4>o;)if(a=e+n+ ++o+r,!this.fileByName(a,t))return a;return e+Math.random()+r},i18n:function(){var t,n,i,a,o,r=this,s=this.messages,l=[],c=[],d=function(e){var t;return 0===e.indexOf("#")&&(t=r.file(e.substr(1)))?t.name:e},p=0;for(arguments.length&&arguments[0]===!1&&(a=function(e){return e},p=1),t=p;t0&&l[n]&&c.push(n),i=a?a(l[n]):r.escape(l[n]),o&&(i=''+i+""),i})):i=i.get(0).outerHTML,l[t]=i);return e.grep(l,function(t,n){return-1===e.inArray(n,c)}).join("
    ")},getIconStyle:function(t,n){var i=this,a={background:"url('{url}') 0 0 no-repeat","background-size":"contain"},o="",r={},s=0;return t.icon&&(o='style="',e.each(a,function(e,a){0===s++&&(a=a.replace("{url}",i.escape(t.icon))),n?r[e]=a:o+=e+":"+a+";"}),o+='"'),n?r:o},mime2class:function(e){var t="elfinder-cwd-icon-",n=e.toLowerCase(),i=this.textMimes[n];return n=n.split("/"),i?n[0]+=" "+t+"text":n[1]&&n[1].match(/\+xml$/)&&(n[0]+=" "+t+"xml"),t+n[0]+(n[1]?" "+t+n[1].replace(/(\.|\+)/g,"-"):"")},mime2kind:function(e){var t,n="object"==typeof e,i=n?e.mime:e;return n&&e.alias&&"symlink-broken"!=i?t="Alias":this.kinds[i]?t=!n||"directory"!==i||e.phash&&!e.isroot?this.kinds[i]:"Root":this.mimeTypes[i]&&(t=this.mimeTypes[i].toUpperCase(),this.messages["kind"+t]||(t=null)),t||(t=0===i.indexOf("text")?"Text":0===i.indexOf("image")?"Image":0===i.indexOf("audio")?"Audio":0===i.indexOf("video")?"Video":0===i.indexOf("application")?"App":0===i.indexOf("font")?"Font":i),this.messages["kind"+t]?this.i18n("kind"+t):i},mimeIsText:function(e){return!!(this.textMimes[e.toLowerCase()]||0===e.indexOf("text/")&&"rtf"!==e.substr(5,3)||e.match(/^application\/.+\+xml$/))},date:function(e,t){var n,i,a,o,r,s,l,c,d,p=this;return t||(t=new Date),s=t[p.getHours](),l=s>12?s-12:s,c=t[p.getMinutes](),d=t[p.getSeconds](),i=t[p.getDate](),a=t[p.getDay](),o=t[p.getMonth]()+1,r=t[p.getFullYear](),n=e.replace(/[a-z]/gi,function(e){switch(e){case"d":return i>9?i:"0"+i;case"j":return i;case"D":return p.i18n(p.i18.daysShort[a]);case"l":return p.i18n(p.i18.days[a]);case"m":return o>9?o:"0"+o;case"n":return o;case"M":return p.i18n(p.i18.monthsShort[o-1]);case"F":return p.i18n(p.i18.months[o-1]);case"Y":return r;case"y":return(""+r).substr(2);case"H":return s>9?s:"0"+s;case"G":return s;case"g":return l;case"h":return l>9?l:"0"+l;case"a":return s>=12?"pm":"am";case"A":return s>=12?"PM":"AM";case"i":return c>9?c:"0"+c;case"s":return d>9?d:"0"+d}return e})},formatDate:function(e,t){var n,i,a,o=this,r=t||e.ts;o.i18;return o.options.clientFormatDate&&r>0?(n=new Date(1e3*r),i=r>=this.yesterday?this.fancyFormat:this.dateFormat,a=o.date(i,n),r>=this.yesterday?a.replace("$1",this.i18n(r>=this.today?"Today":"Yesterday")):a):e.date?e.date.replace(/([a-z]+)\s/i,function(e,t){return o.i18n(t)+" "}):o.i18n("dateUnknown")},toLocaleString:function(e){var t=new Number(e);return t?t.toLocaleString?t.toLocaleString():String(e).replace(/(\d)(?=(\d\d\d)+(?!\d))/g,"$1,"):e},perms2class:function(e){var t="";return e.read||e.write?e.read?e.write||(t="elfinder-ro"):t="elfinder-wo":t="elfinder-na",e.type&&(t+=" elfinder-"+this.escape(e.type)),t},formatPermissions:function(e){var t=[];return e.read&&t.push(this.i18n("read")),e.write&&t.push(this.i18n("write")),t.length?t.join(" "+this.i18n("and")+" "):this.i18n("noaccess")},formatSize:function(e){var t=1,n="b";return"unknown"==e?this.i18n("unknown"):(e>1073741824?(t=1073741824,n="GB"):e>1048576?(t=1048576,n="MB"):e>1024&&(t=1024,n="KB"),e/=t,(e>0?t>=1048576?e.toFixed(2):Math.round(e):0)+" "+n)},formatFileMode:function(e,t){var n,i,a,o,r,s,l,c,d;if(t||(t=this.options.fileModeStyle.toLowerCase()),e=e.trim(),e.match(/[rwxs-]{9}$/i)){if(c=e=e.substr(-9),"string"==t)return c;for(d="",a=0,n=0;7>n;n+=3)i=e.substr(n,3),o=0,i.match(/[r]/i)&&(o+=4),i.match(/[w]/i)&&(o+=2),i.match(/[xs]/i)&&(i.match(/[xs]/)&&(o+=1),i.match(/[s]/i)&&(0==n?a+=4:3==n&&(a+=2))),d+=o.toString(8);a&&(d=a.toString(8)+d)}else{if(e=parseInt(e,8),d=e?e.toString(8):"",!e||"octal"==t)return d;for(i=e.toString(8),a=0,i.length>3&&(i=i.substr(-4),a=parseInt(i.substr(0,1),8),i=i.substr(1)),r=1==(1&a),l=2==(2&a),s=4==(4&a),c="",n=0;3>n;n++)c+=4==(4&parseInt(i.substr(n,1),8))?"r":"-",c+=2==(2&parseInt(i.substr(n,1),8))?"w":"-",c+=1==(1&parseInt(i.substr(n,1),8))?0==n&&s||1==n&&l?"s":"x":"-"}return"both"==t?c+" ("+d+")":"string"==t?c:d},registRawStringDecoder:function(e){"function"==typeof e&&(this.decodeRawString=this.options.rawStringDecoder=e)},uploadMimeCheck:function(t,n){n=n||this.cwd().hash;var i,a,o=!0,r=this.option("uploadMime",n),s=function(n){var i=!1;return"string"==typeof n&&"all"===n.toLowerCase()?i=!0:Array.isArray(n)&&n.length&&e.each(n,function(e,n){return n=n.toLowerCase(),"all"===n||0===t.indexOf(n)?(i=!0,!1):void 0}),i};return t&&e.isPlainObject(r)&&(t=t.toLowerCase(),i=s(r.allow),a=s(r.deny),"allow"===r.firstOrder?(o=!1,a||i!==!0||(o=!0)):(o=!0,a!==!0||i||(o=!1))),o},sequence:function(e){var t=e.length,n=function(t,i){return++i,e[i]?n(t.then(e[i]),i):t};return t>1?n(e[0](),0):e[0]()},reloadContents:function(t){var n,i=e.Deferred();try{n=e('';d.remove(),e(x).appendTo("body").ready(function(){setTimeout(function(){e(x).each(function(){e("#"+e(this).attr("id")).remove()})},2e4+1e4*i)}),b.trigger("download",{files:y}),w.resolve()}),u=y.length,g=[],i=0;i');return t&&e.each(t,function(e,t){a=i.escape(t.value),o.append('")}),e.each(n.options.encodings,function(e,t){o.append('")}),o},d=function(){var t,a,o=i.options.dialogContained?i.getUI():e(window);return a="string"==typeof n.options.dialogWidth&&(t=n.options.dialogWidth.match(/(\d+)%/))?parseInt(o.width()*(t[1]/100)):parseInt(n.options.dialogWidth||650),Math.min(a,o.width())},p=function(){if(n.options.dialogHeight){var t,a,o=i.options.dialogContained?i.getUI():e(window);return a="string"==typeof n.options.dialogHeight&&(t=n.options.dialogHeight.match(/(\d+)%/))?parseInt(o.height()*(t[1]/100)):parseInt(n.options.dialogHeight||o.height()),Math.min(a,o.height())}},u=function(t){var a,l,c,d=t.length;return d>1&&(a=t[0].mime,l=t[0].name.replace(/^.*(\.[^.]+)$/,"$1")),e.grep(t,function(t){var p;return c||"directory"===t.mime?!1:(p=t.read&&(s||i.mimeIsText(t.mime)||-1!==e.inArray(t.mime,1===d?o:r))&&(!n.onlyMimes.length||-1!==e.inArray(t.mime,n.onlyMimes))&&(1===d||t.mime===a&&t.name.substr(-1*l.length)===l)&&!!i.uploadMimeCheck(t.mime,t.phash)&&b(t,d)&&Object.keys(g).length,p||(c=!0),p)})},h=function(e){var t,n=i.file(e);i.request({cmd:"info",targets:[e],preventDefault:!0}).done(function(e){var a;e&&e.files&&e.files.length&&(t=e.files[0],n.ts==t.ts&&n.size==t.size||(a={changed:[t]},i.updateCache(a),i.change(a)))})},f=function(t,o,r,s,u,f){var g,v,b,y,w,k,C=e.Deferred(),z=!1,T=function(){return z?!0:(i.toast({mode:"warning",msg:i.i18n("nowLoading")}),!1)},A=function(){f&&Array.isArray(f)&&e.each(f,function(){this.msg&&i.toast(this)})},j=function(){var t,n,a,o=y?y.val():void 0,r=e.Deferred().fail(function(e){b.show().find("button.elfinder-btncnt-0,button.elfinder-btncnt-1").hide()});return T()?(g.editor&&(g.editor.save(g[0],g.editor.instance),t=g.editor.confObj,t.info&&(t.info.schemeContent||t.info.arrayBufferContent)&&(o="scheme")),n=D(),U(n),n.promise?(a=setTimeout(function(){i.notify({type:"chkcontent",cnt:1,hideCnt:!0,cancel:function(){n.reject()}})},100),n.always(function(){a&&clearTimeout(a),i.notify({type:"chkcontent",cnt:-1})}).done(function(e){C.notifyWith(g,[o,g.data("hash"),v,r])}).fail(function(e){r.reject(e)})):C.notifyWith(g,[o,g.data("hash"),v,r]),r):r.resolve()},O=function(){T()&&j().fail(function(e){e&&i.error(e)})},S=function(){if(n.options.confirmUnsavedBeforeClose){var t=function(){var e;C.resolve(),g.editor&&(g.editor.close(g[0],g.editor.instance),e=g.editor.confObj,e.info&&e.info.syncInterval&&h(o.hash)),g.elfinderdialog("destroy")},a="undefined"!=typeof q.name,r=a?{label:"btnSaveAs",callback:function(){requestAnimationFrame(M)}}:{label:"btnSaveClose",callback:function(){j().done(function(){t()})}};F().done(function(o){var s=["confirmNotSave"],l={label:"btnDiscard",callback:function(){t()}};o?("string"==typeof o&&s.unshift(o),i.confirm({title:n.title,text:s,accept:r,cancel:{label:"btnCancel",callback:e.noop},buttons:a?[l]:[{label:"btnSaveAs",callback:function(){g.elfinderdialog("destroy"),requestAnimationFrame(M)}},l]})):t()})}else g.elfinderdialog("close")},I=function(){T()&&(b.hide(),j().done(function(){z=!1,b.show(),S()}).fail(function(e){b.show(),e&&i.error(e)}))},M=function(){if(T()){var t=v,r=o.phash,s=function(e){p.addClass(a).fadeIn(function(){e&&i.error(e)}),v=t,i.disable()},l=function(){n.mime=q.mime||o.mime,n.prefix=(q.name||o.name).replace(/ \d+(\.[^.]+)?$/,"$1"),n.requestCmd="mkfile",n.nextAction={},n.data={target:r},i.res("mixin","make").bind(n)().done(function(e){var t;e.added&&e.added.length?(t=g.data("hash"),g.data("hash",e.added[0].hash),j().done(function(){z=!1,b.show(),S(),p.fadeIn()}).fail(function(){i.exec("rm",[e.added[0].hash],{forceRm:!0,quiet:!0}),g.data("hash",t),b.find("button.elfinder-btncnt-2").hide(),s()})):s()}).progress(function(e){e&&"errUploadMime"===e&&g.trigger("saveAsFail")}).fail(s).always(function(){delete n.mime,delete n.prefix,delete n.nextAction,delete n.data}),i.trigger("unselectfiles",{files:[o.hash]})},c=null,d=null,p=i.getUI().children("."+n.dialogClass+":visible");b.is(":hidden")&&(p=p.add(b)),p.removeClass(a).fadeOut(),i.enable(),i.searchStatus.state<2&&r!==i.cwd().hash?c=i.exec("open",[r],{thash:r}):i.file(r)||(d=i.request({cmd:"info",targets:[r]})),e.when([c,d]).done(function(){d?i.one("infodone",function(){i.file(r)?l():s("errFolderNotFound")}):c?i.one("cwdrender",l):l()}).fail(s)}},F=function(){var t,n,a=e.Deferred();return z?(g.editor&&g.editor.save(g[0],g.editor.instance),t=D(),t&&t.promise?(n=setTimeout(function(){i.notify({type:"chkcontent",cnt:1,hideCnt:!0,cancel:function(){t.reject()}})},100),t.always(function(){n&&clearTimeout(n),i.notify({type:"chkcontent",cnt:-1})}).done(function(e){a.resolve(v!==e)}).fail(function(e){a.resolve(e||void 0!==v)})):a.resolve(v!==t),a):a.resolve(!1)},E={title:i.escape(o.name),width:d(),height:p(),buttons:{},cssClass:a,maxWidth:"window",maxHeight:"window",allowMinimize:!0,allowMaximize:!0,openMaximized:x()||u&&u.info&&u.info.openMaximized,btnHoverFocus:!1,closeOnEscape:!1,propagationEvents:["mousemove","mouseup","click"],minimize:function(){var e;g.editor&&b.closest(".ui-dialog").is(":hidden")&&(e=g.editor.confObj,e.info&&e.info.syncInterval&&h(o.hash))},headerBtnCloseAction:n.options.confirmUnsavedBeforeClose?function(){S()}:void 0,close:function(){if(!n.options.confirmUnsavedBeforeClose){var e=function(){var e;C.resolve(),g.editor&&(g.editor.close(g[0],g.editor.instance),e=g.editor.confObj,e.info&&e.info.syncInterval&&h(o.hash)),g.elfinderdialog("destroy")},t="undefined"!=typeof q.name,a=t?{label:"btnSaveAs",callback:function(){requestAnimationFrame(M)}}:{label:"btnSaveClose",callback:function(){j().done(function(){e()})}};F().done(function(o){var r=["confirmNotSave"];o?("string"==typeof o&&r.unshift(o),i.confirm({title:n.title,text:r,accept:a,cancel:{label:"btnClose",callback:e},buttons:t?null:[{label:"btnSaveAs",callback:function(){requestAnimationFrame(M)}}]})):e()})}},open:function(){var e,n,a;if(g.initEditArea.call(g,t,o,r,i),g.editor){if(e=g.editor.load(g[0])||null,e&&e.done)e.always(function(){z=!0}).done(function(e){g.editor.instance=e,g.editor.focus(g[0],g.editor.instance),U(D()),requestAnimationFrame(function(){b.trigger("resize")})}).fail(function(e){e&&i.error(e),g.elfinderdialog("destroy")}).always(A);else{if(z=!0,e&&("string"==typeof e||Array.isArray(e)))return i.error(e),void g.elfinderdialog("destroy");g.editor.instance=e,g.editor.focus(g[0],g.editor.instance),U(D()),requestAnimationFrame(function(){b.trigger("resize")}),A()}n=g.editor.confObj,n.info&&n.info.syncInterval&&(a=parseInt(n.info.syncInterval))&&setTimeout(function(){P(a)},a)}else z=!0,U(D())},resize:function(e,t){g.editor&&g.editor.resize(g[0],g.editor.instance,e,t||{})}},D=function(){var t=g.getContent.call(g,g[0]);return void 0!==t&&t!==!1&&null!==t||(t=e.Deferred().reject()),t},U=function(e){e&&e.promise?e.done(function(e){v=e}):v=e},P=function(e){b.is(":visible")&&(h(o.hash),setTimeout(function(){P(e)},e))},R=function(){y&&F().done(function(e){e?y.attr("title",i.i18n("saveAsEncoding")).addClass("elfinder-edit-changed"):y.attr("title",i.i18n("openAsEncoding")).removeClass("elfinder-edit-changed")})},q={};if(u&&(u.html&&(g=e(u.html)),w={init:u.init||null,load:u.load,getContent:u.getContent||null,save:u.save,beforeclose:"function"==typeof u.beforeclose?u.beforeclose:void 0,close:"function"==typeof u.close?u.close:function(){},focus:"function"==typeof u.focus?u.focus:function(){},resize:"function"==typeof u.resize?u.resize:function(){},instance:null,doSave:O,doCancel:S,doClose:I,file:o,fm:i,confObj:u,trigger:function(e,t){i.trigger("editEditor"+e,Object.assign({},u.info||{},t))}}),!g){if(!i.mimeIsText(o.mime))return C.reject("errEditorNotFound");!function(){g=e('').on("input propertychange",R),u&&u.info&&!u.info.useTextAreaEvent||g.on("keydown",function(t){var n,i,a=t.keyCode;t.stopPropagation(),a==e.ui.keyCode.TAB&&(t.preventDefault(),this.setSelectionRange&&(n=this.value,i=this.selectionStart,this.value=n.substr(0,i)+" "+n.substr(this.selectionEnd),i+=1,this.setSelectionRange(i,i))),(t.ctrlKey||t.metaKey)&&(a!="Q".charCodeAt(0)&&a!="W".charCodeAt(0)||(t.preventDefault(),S()),a=="S".charCodeAt(0)&&(t.preventDefault(),O()))}).on("mouseenter",function(){this.focus()}),g.initEditArea=function(e,t,n){g.hide().val(n),this._setupSelEncoding(n)}}()}return g._setupSelEncoding=function(t){var n=s&&"unknown"!==s?[{value:s}]:[],a=e("").hide(),r=function(t){t&&a.appendTo(y.parent()),a.empty().append(e("").text(y.val())),y.width(a.width())};""!==t&&s&&"UTF-8"===s||n.push({value:"UTF-8"}),y=c(n).on("touchstart",function(e){e.stopPropagation()}).on("change",function(){F().done(function(e){e||""===D()||(S(),m(o,y.val(),u).fail(function(e){e&&i.error(e)}))}),r()}).on("mouseover",R),g.parent().next().prepend(e('
    ').append(y)),r(!0)},g.data("hash",o.hash),w&&(g.editor=w,"function"==typeof w.beforeclose&&(E.beforeclose=function(){return w.beforeclose(g[0],w.instance)}),"function"==typeof w.init&&(g.initEditArea=w.init),"function"==typeof w.getContent&&(g.getContent=w.getContent)),g.initEditArea||(g.initEditArea=function(){}),g.getContent||(g.getContent=function(){return l(g.val())}),u&&u.info&&u.info.preventGet||(E.buttons[i.i18n("btnSave")]=O,E.buttons[i.i18n("btnSaveClose")]=I,E.buttons[i.i18n("btnSaveAs")]=M,E.buttons[i.i18n("btnCancel")]=S),u&&"function"==typeof u.prepare&&u.prepare(g,E,o),b=n.fmDialog(g,E).attr("id",t).on("keydown keyup keypress",function(e){e.stopPropagation()}).css({overflow:"hidden",minHeight:"7em"}).addClass("elfinder-edit-editor").closest(".ui-dialog").on("changeType",function(t,n){if(n.extention&&n.mime){var a=(n.extention,n.mime,e(this).children(".ui-dialog-buttonpane").children(".ui-dialog-buttonset"));a.children(".elfinder-btncnt-0,.elfinder-btncnt-1").hide(),q.name=i.splitFileExtention(o.name)[0]+"."+n.extention,q.mime=n.mime,n.keepEditor||a.children(".elfinder-btncnt-2").trigger("click")}}),k=(i.options.dialogContained?i.getUI():e(window)).width(),b.width()>k&&b.width(k),C.promise()},m=function(t,a,o){var r,s,l,d=t.hash,p=(i.options,e.Deferred()),u="edit-"+i.namespace+"-"+t.hash,h=i.getUI().find("#"+u),g=a?a:0,v=!1;if(h.length)return h.elfinderdialog("toTop"),p.resolve();if(!(t.read&&(t.write||o.info&&o.info.converter)))return s=["errOpen",t.name,"errPerm"],p.reject(s);if(o&&o.info){if("function"==typeof o.info.edit)return l=o.info.edit.call(i,t,o),l.promise?l.done(function(){p.resolve()}).fail(function(e){p.reject(e)}):l?p.resolve():p.reject(),p;v=o.info.preventGet||o.info.noContent,o.info.urlAsContent||v?(r=e.Deferred(),o.info.urlAsContent?i.url(d,{async:!0,onetime:!0,temporary:!0}).done(function(e){r.resolve({content:e})}):r.resolve({})):(g&&(t.encoding=g,i.cache(t,"change")),r=i.request({data:{cmd:"get",target:d,conv:g,_t:t.ts},options:{type:"get",cache:!0},notify:{type:"file",cnt:1},preventDefault:!0})),r.done(function(a){var r,s,l;a.doconv?i.confirm({title:n.title,text:"unknown"===a.doconv?"confirmNonUTF8":"confirmConvUTF8",accept:{label:"btnConv",callback:function(){p=m(t,r.val(),o)}},cancel:{label:"btnCancel",callback:function(){p.reject()}},optionsCallback:function(t){t.create=function(){var t=e('
    '),n={value:a.doconv};"unknown"===a.doconv&&(n.caption="-"),r=c([n]),e(this).next().find(".ui-dialog-buttonset").prepend(t.append(e("").append(r)))}}}):(!v&&i.mimeIsText(t.mime)&&(s=new RegExp("^(data:"+t.mime.replace(/([.+])/g,"\\$1")+";base64,)","i"),o.info.dataScheme?window.btoa&&!a.content.match(s)&&(a.content="data:"+t.mime+";base64,"+btoa(a.content)):window.atob&&(l=a.content.match(s))&&(a.content=atob(a.content.substr(l[1].length)))),f(u,t,a.content,a.encoding,o,a.toasts).done(function(e){p.resolve(e)}).progress(function(e,t,n,a){var o=this;t&&(d=t),i.request({options:{type:"post"},data:{cmd:"put",target:d,encoding:e||n.encoding,content:n},notify:{type:"save",cnt:1},syncOnFail:!0,preventFail:!0,navigate:{target:"changed",toast:{inbuffer:{msg:i.i18n(["complete",i.i18n("btnSave")])}}}}).fail(function(e){p.reject(e),a.reject()}).done(function(e){requestAnimationFrame(function(){o.trigger("focus"),o.editor&&o.editor.focus(o[0],o.editor.instance)}),a.resolve()})}).fail(function(e){p.reject(e)}))}).fail(function(e){var n=i.parseError(e);n=Array.isArray(n)?n[0]:n,t.encoding&&(t.encoding="",i.cache(t,"change")),"errConvUTF8"!==n&&i.sync(),p.reject(e)})}return p.promise()},g={},v={info:{id:"textarea",name:"TextArea",useTextAreaEvent:!0},load:function(t){this.trigger("Prepare",{node:t,editorObj:void 0,instance:void 0,opts:{}}),t.setSelectionRange&&t.setSelectionRange(0,0),e(t).trigger("focus").show()},save:function(){}},b=function(a,o){var r=function(t,n){if(n){if("*"===n[0]||-1!==e.inArray(t,n))return!0;var a,o;for(o=n.length,a=0;o>a;a++)if(0===t.indexOf(n[a]))return!0;return!1}return i.mimeIsText(t)},s=function(e,t){if(!t||!t.length)return!0;var n,i,a=e.replace(/^.+\.([^.]+)|(.+)$/,"$1$2").toLowerCase();for(i=t.length,n=0;i>n;n++)if(a===t[n].toLowerCase())return!0;return!1},l=n.options.editors||[],c=i.cwd().write;return t=i.storage("storedEditors")||{},g={},l.length||(l=[v]),e.each(l,function(e,t){var n;(1===o||!t.info.single)&&(t.info&&t.info.converter?c:a.write)&&(a.size>0||!t.info.converter&&t.info.canMakeEmpty!==!1&&i.mimesCanMakeEmpty[a.mime])&&(!t.info.maxSize||a.size<=t.info.maxSize)&&r(a.mime,t.mimes||null)&&s(a.name,t.exts||null)&&"function"==typeof t.load&&"function"==typeof t.save&&(n=t.info.name?t.info.name:"Editor "+e,t.id=t.info.id?t.info.id:"editor"+e,t.name=n,t.i18n=i.i18n(n),g[t.id]=t)}),!!Object.keys(g).length},y=function(n,a){n&&a&&(e.isPlainObject(t)||(t={}),t[n]=a.id,i.storage("storedEditors",t),i.trigger("selectfiles",{files:i.selected()}))},w=function(){var e=i.storage("useStoredEditor");return e?e>0:n.options.useStoredEditor},x=function(){var e=i.storage("editorMaximized");return e?e>0:n.options.editorMaximized},k=function(t,n){var a=[];return e.each(g,function(e,o){a.push({label:i.escape(o.i18n),icon:o.info&&o.info.icon?o.info.icon:"edit",options:{iconImg:o.info&&o.info.iconImg?i.baseUrl+o.info.iconImg:void 0},callback:function(){y(t[0].mime,o),n&&n.call(o)}})}),a},C=function(e){return e.toLowerCase().replace(/ +/g,"")},z=function(e){var n=t[e];return n&&Object.keys(g).length?g[C(n)]:void 0};this.getEncSelect=c,this.shortcuts=[{pattern:"ctrl+e"}],this.init=function(){var t,n,i=this,a=this.fm,l=this.options,c=[];this.onlyMimes=this.options.mimes||[],a.one("open",function(){l.editors&&Array.isArray(l.editors)&&(a.trigger("canMakeEmptyFile",{mimes:Object.keys(a.storage("mkfileTextMimes")||{}).concat(l.makeTextMimes||["text/plain"])}),e.each(l.editors,function(e,t){t.info&&t.info.cmdCheck&&c.push(t.info.cmdCheck)}),c.length?a.api>=2.103?n=a.request({data:{cmd:"editor",name:c,method:"enabled"},preventDefault:!0}).done(function(e){t=e}).fail(function(){t={}}):(t={},n=e.Deferred().resolve()):n=e.Deferred().resolve(),n.always(function(){t&&(l.editors=e.grep(l.editors,function(e){return e.info&&e.info.cmdCheck?!!t[e.info.cmdCheck]:!0})),e.each(l.editors,function(e,t){t.setup&&"function"==typeof t.setup&&t.setup.call(t,l,a),t.disabled||(t.mimes&&Array.isArray(t.mimes)&&(o=o.concat(t.mimes),t.info&&t.info.single||(r=r.concat(t.mimes))),!s&&t.mimes&&"*"===t.mimes[0]&&(s=!0),t.info||(t.info={}),t.info.integrate&&a.trigger("helpIntegration",Object.assign({cmd:"edit"},t.info.integrate)),t.info.canMakeEmpty&&a.trigger("canMakeEmptyFile",{mimes:Array.isArray(t.info.canMakeEmpty)?t.info.canMakeEmpty:t.mimes}))}),o=(e.uniqueSort||e.unique)(o),r=(e.uniqueSort||e.unique)(r),l.editors=e.grep(l.editors,function(e){return!e.disabled})}))}).bind("select",function(){g=null}).bind("contextmenucreate",function(t){var n,o,r=function(e){var t=i.title;a.one("contextmenucreatedone",function(){i.title=t}),i.title=a.escape(e.i18n),e.info&&e.info.iconImg&&(i.contextmenuOpts={iconImg:a.baseUrl+e.info.iconImg}),delete i.variants};i.contextmenuOpts=void 0,"files"===t.data.type&&i.enabled()&&(n=a.file(t.data.targets[0]),b(n,t.data.targets.length)&&(Object.keys(g).length>1?w()&&(o=z(n.mime))?(r(o),i.extra={icon:"menu",node:e("").attr({title:a.i18n("select")}).on("click touchstart",function(t){if(!("touchstart"===t.type&&t.originalEvent.touches.length>1)){var n=e(this);t.stopPropagation(),t.preventDefault(),a.trigger("contextmenu",{raw:k(a.selectedFiles(),function(){var e=a.selected();a.exec("edit",e,{editor:this}),a.trigger("selectfiles",{files:e})}),x:n.offset().left,y:n.offset().top})}})}):(delete i.extra,i.variants=[],e.each(g,function(e,t){i.variants.push([{editor:t},t.i18n,t.info&&t.info.iconImg?a.baseUrl+t.info.iconImg:"edit"])})):(r(g[Object.keys(g)[0]]),delete i.extra)))}).bind("canMakeEmptyFile",function(t){if(t.data&&t.data.resetTexts){var n=a.arrayFlip(i.options.makeTextMimes||["text/plain"]),o=i.getMkfileHides();e.each(a.storage("mkfileTextMimes")||{},function(e,t){n[e]||(delete a.mimesCanMakeEmpty[e],delete o[e])}),a.storage("mkfileTextMimes",null),Object.keys(o).length?a.storage("mkfileHides",o):a.storage("mkfileHides",null)}})},this.getstate=function(e){var t=this.files(e),n=t.length;return n&&u(t).length==n?0:-1},this.exec=function(t,n){var i,a=this.fm,o=u(this.files(t)),r=e.map(o,function(e){return e.hash}),s=[],l=n&&n.editor?n.editor:null,c=e(n&&n._currentNode?n._currentNode:a.cwdHash2Elm(r[0])),d=function(){var t=e.Deferred();return!l&&Object.keys(g).length>1?w()&&(l=z(o[0].mime))?t.resolve(l):(a.trigger("contextmenu",{raw:k(o,function(){t.resolve(this)}),x:c.offset().left,y:c.offset().top+22,opened:function(){a.one("closecontextmenu",function(){requestAnimationFrame(function(){"pending"===t.state()&&t.reject()})})}}),a.trigger("selectfiles",{files:r}),t):(Object.keys(g).length>1&&l&&y(o[0].mime,l),t.resolve(l?l:Object.keys(g).length?g[Object.keys(g)[0]]:null))},p=e.Deferred();return null===g&&b(o[0],r.length),c.length||(c=a.getUI("cwd")),d().done(function(t){for(;i=o.shift();)s.push(m(i,i.encoding||void 0,t).fail(function(e){e&&a.error(e)}));s.length?e.when.apply(null,s).done(function(){p.resolve()}).fail(function(){p.reject()}):p.reject()}).fail(function(){p.reject()}),p},this.getMkfileHides=function(){return i.storage("mkfileHides")||i.arrayFlip(n.options.mkfileHideMimes||[])}},i.prototype.commands.empty=function(){var t,n,i=function(e){var i=t.files(e);return i.length||(i=[n.cwd()]),i};this.linkedCmds=["rm"],this.init=function(){t=this,n=this.fm},this.getstate=function(t){var n,a=i(t),o=function(t){var n=!0;return e.grep(t,function(e){return n=!!(n&&e.read&&e.write&&"directory"===e.mime)})};return n=a.length,o(a).length==n?0:-1},this.exec=function(t){var a=i(t),o=a.length,r=e.Deferred().done(function(){var t={changed:{}};n.toast({msg:n.i18n(['"'+s.join('", ')+'"',"complete",n.i18n("cmdempty")])}),e.each(a,function(e,n){t.changed[n.hash]=n}),n.change(t)}).always(function(){var t=n.cwd().hash;n.trigger("selectfiles",{files:e.map(a,function(e){return t===e.phash?e.hash:null})})}),s=[],l=function(e){"number"==typeof e?(s.push(a[e].name),delete a[e].dirs):e&&n.error(e),--o<1&&r[s.length?"resolve":"reject"]()};return e.each(a,function(t,i){var a;return i.write&&"directory"===i.mime?n.isCommandEnabled("rm",i.hash)?(a=setTimeout(function(){n.notify({type:"search",cnt:1,hideCnt:!(o>1)})},n.notifyDelay),void n.request({data:{cmd:"open",target:i.hash},preventDefault:!0,asNotOpen:!0}).done(function(r){var s=[];a&&clearTimeout(a),n.ui.notify.children(".elfinder-notify-search").length&&n.notify({type:"search",cnt:-1,hideCnt:!(o>1)}),r&&r.files&&r.files.length?r.files.length>n.maxTargets?l(["errEmpty",i.name,"errMaxTargets",n.maxTargets]):(n.updateCache(r),e.each(r.files,function(e,t){return!t.write||t.locked?(l(["errEmpty",i.name,"errRm",t.name,"errPerm"]),s=[],!1):void s.push(t.hash)}),s.length&&n.exec("rm",s,{_userAction:!0,addTexts:[n.i18n("folderToEmpty",i.name)]}).fail(function(e){n.trigger("unselectfiles",{files:n.selected()}),l(n.parseError(e)||"")}).done(function(){l(t)})):(n.toast({mode:"warning",msg:n.i18n("filderIsEmpty",i.name)}),l(""))}).fail(function(e){l(n.parseError(e)||"")})):(l(["errCmdNoSupport",'"rm"']),null):(l(["errEmpty",i.name,"errPerm"]),null)}),r}},i.prototype.commands.extract=function(){var t=this,n=t.fm,i=[],a=function(t){var n=!0;return e.grep(t,function(t){return n=!(!n||!t.read||-1===e.inArray(t.mime,i))})};this.variants=[],this.disableOnSearch=!0,n.bind("open reload",function(){i=n.option("archivers").extract||[],n.api>2?t.variants=[[{makedir:!0},n.i18n("cmdmkdir")],[{},n.i18n("btnCwd")]]:t.variants=[[{},n.i18n("btnCwd")]],t.change()}),this.getstate=function(t){var i,o,r=this.files(t),s=r.length;return s&&a(r).length==s?n.searchStatus.state>0?(i=this.fm.cwd().hash,e.each(r,function(e,t){return o=t.phash===i}),o?0:-1):this.fm.cwd().write?0:-1:-1},this.exec=function(t,a){var o,r,s,l=this.files(t),c=e.Deferred(),d=l.length,p=a&&a.makedir?1:0,u=!1,h=!1,f=0,m=n.files(l[0].phash),g=[],v={};e.each(m,function(e,t){v[t.name]=t,g.push(t.name)});var b=function(e){switch(e){case"overwrite_all":u=!0;break;case"omit_all":h=!0}},y=function(t){t.read&&n.file(t.phash).write?-1===e.inArray(t.mime,i)?(r=["errExtract",t.name,"errNoArchive"],n.error(r),c.reject(r)):n.request({data:{cmd:"extract",target:t.hash,makedir:p},notify:{type:"extract",cnt:1},syncOnFail:!0,navigate:{toast:p?{incwd:{msg:n.i18n(["complete",n.i18n("cmdextract")]),action:{cmd:"open",msg:"cmdopen"}},inbuffer:{msg:n.i18n(["complete",n.i18n("cmdextract")]),action:{cmd:"open",msg:"cmdopen"}}}:{inbuffer:{msg:n.i18n(["complete",n.i18n("cmdextract")])}}}}).fail(function(e){"rejected"!=c.state()&&c.reject(e)}).done(function(){}):(r=["errExtract",t.name,"errPerm"],n.error(r),c.reject(r))},w=function(t,i){var a=t[i],r=n.splitFileExtention(a.name)[0],l=e.inArray(r,g)>=0,m=function(){d>i+1?w(t,i+1):c.resolve()};!p&&l&&"directory"!=v[r].mime?n.confirm({title:n.i18n("ntfextract"),text:["errExists",r,"confirmRepl"],accept:{label:"btnYes",callback:function(e){if(s=e?"overwrite_all":"overwrite",b(s),u||h){if(u){for(o=i;d>o;o++)y(t[o]);c.resolve()}}else"overwrite"==s&&y(a),d>i+1?w(t,i+1):c.resolve()}},reject:{label:"btnNo",callback:function(e){s=e?"omit_all":"omit",b(s),!u&&!h&&d>i+1?w(t,i+1):h&&c.resolve()}},cancel:{label:"btnCancel",callback:function(){c.resolve()}},all:d>i+1}):p?(y(a),m()):0==f?n.confirm({title:n.i18n("cmdextract"),text:[n.i18n("cmdextract")+' "'+a.name+'"',"confirmRepl"],accept:{label:"btnYes",callback:function(e){e&&(f=1),y(a),m()}},reject:{label:"btnNo",callback:function(e){e&&(f=-1),m()}},cancel:{label:"btnCancel",callback:function(){c.resolve()}},all:d>i+1}):(f>0&&y(a),m())};return this.enabled()&&d&&i.length?(d>0&&w(l,0),c):c.reject()}},(i.prototype.commands.forward=function(){this.alwaysEnabled=!0,this.updateOnSelect=!0,this.shortcuts=[{pattern:"ctrl+right"}],this.getstate=function(){return this.fm.history.canForward()?0:-1},this.exec=function(){return this.fm.history.forward()}}).prototype={forceLoad:!0},i.prototype.commands.fullscreen=function(){var t=this,n=this.fm,i=function(e,i){var a;e.preventDefault(),e.stopPropagation(),i&&i.fullscreen&&(a="on"===i.fullscreen,t.update(void 0,a),t.title=n.i18n(a?"reinstate":"cmdfullscreen"))};this.alwaysEnabled=!0,this.updateOnSelect=!1,this.syncTitleOnChange=!0,this.value=!1,this.options={ui:"fullscreenbutton"},this.getstate=function(){return 0},this.exec=function(){var i=n.getUI().get(0),a=i===n.toggleFullscreen(i);return t.title=n.i18n(a?"reinstate":"cmdfullscreen"),t.update(void 0,a),e.Deferred().resolve()},n.bind("init",function(){n.getUI().off("resize."+n.namespace,i).on("resize."+n.namespace,i)})},(i.prototype.commands.getfile=function(){var t=this,n=this.fm,i=function(n){var i=t.options,a=!0;return n=e.grep(n,function(e){return a=!(!a||"directory"==e.mime&&!i.folders||!e.read)}),i.multiple||1==n.length?n:[]};this.alwaysEnabled=!0,this.callback=n.options.getFileCallback,this._disabled="function"==typeof this.callback,this.getstate=function(e){var t=this.files(e),n=t.length;return this.callback&&n&&i(t).length==n?0:-1},this.exec=function(n){var i,a,o,r=this.fm,s=this.options,l=this.files(n),c=l.length,d=r.option("url"),p=r.option("tmbUrl"),u=e.Deferred().done(function(e){var n,i=function(){"close"==s.oncomplete?r.hide():"destroy"==s.oncomplete&&r.destroy()},a=function(e){"close"==s.onerror?r.hide():"destroy"==s.onerror?r.destroy():e&&r.error(e)};r.trigger("getfile",{files:e});try{n=t.callback(e,r)}catch(o){return void a(["Error in `getFileCallback`.",o.message])}"object"==typeof n&&"function"==typeof n.done?n.done(i).fail(a):i()}),h=function(t){return s.onlyURL?s.multiple?e.map(l,function(e){return e.url}):l[0].url:s.multiple?l:l[0]},f=[];for(i=0;c>i;i++){if(a=l[i],"directory"==a.mime&&!s.folders)return u.reject();a.baseUrl=d,"1"==a.url?f.push(r.request({data:{cmd:"url",target:a.hash},notify:{type:"url",cnt:1,hideCnt:!0},preventDefault:!0}).done(function(e){if(e.url){var t=r.file(this.hash);t.url=this.url=e.url}}.bind(a))):a.url=r.url(a.hash),s.onlyURL||(s.getPath&&(a.path=r.path(a.hash),""===a.path&&a.phash&&!function(){var t=e.Deferred();f.push(t),r.path(a.hash,!1,{}).done(function(e){a.path=e}).fail(function(){a.path=""}).always(function(){t.resolve()})}()),a.tmb&&1!=a.tmb&&(a.tmb=p+a.tmb),a.width||a.height||(a.dim?(o=a.dim.split("x"),a.width=o[0],a.height=o[1]):s.getImgSize&&-1!==a.mime.indexOf("image")&&f.push(r.request({data:{cmd:"dim",target:a.hash},notify:{type:"dim",cnt:1,hideCnt:!0},preventDefault:!0}).done(function(e){if(e.dim){var t=e.dim.split("x"),n=r.file(this.hash);n.width=this.width=t[0],n.height=this.height=t[1]}}.bind(a)))))}return f.length?(e.when.apply(null,f).always(function(){u.resolve(h(l))}),u):u.resolve(h(l))}}).prototype={forceLoad:!0},(i.prototype.commands.help=function(){var t,n,i,a,o,r,s=this.fm,l=this,c='',d='
    {author}
    {work}
    ',p=/\{url\}/,u=/\{link\}/,h=/\{author\}/,f=/\{work\}/,m="replace",g="ui-priority-primary",v="ui-priority-secondary",b="elfinder-help-license",y='
  • {title}
  • ',w=['
    ','
      '],x='
      {pattern}
      {descrip}
      ',k='
      ',C=e("base").length?s.escape(document.location.href.replace(/#.*$/,"")):"",z=s.res("class","tabsactive"),T=function(){var e;return e=s.theme&&s.theme.author?d[m]("elfinder-help-team","elfinder-help-team elfinder-help-term-theme")[m](h,s.i18n(s.theme.author)+(s.theme.email?" <"+s.theme.email+">":""))[m](f,s.i18n("theme")+" ("+s.i18n(s.theme.name)+")"):''},A=function(){w.push('
      '),w.push("

      elFinder

      "),w.push('
      '+s.i18n("webfm")+"
      "), w.push('
      '+s.i18n("ver")+": "+s.version+"
      "),w.push('
      '+s.i18n("protocolver")+':
      '),w.push('
      jQuery/jQuery UI: '+e().jquery+"/"+e.ui.version+"
      "),w.push(k),w.push(c[m](p,"https://studio-42.github.io/elFinder/")[m](u,s.i18n("homepage"))),w.push(c[m](p,"https://github.com/Studio-42/elFinder/wiki")[m](u,s.i18n("docs"))),w.push(c[m](p,"https://github.com/Studio-42/elFinder")[m](u,s.i18n("github"))),w.push(k),w.push('
      '+s.i18n("team")+"
      "),w.push(d[m](h,'Dmitry "dio" Levashov <dio@std42.ru>')[m](f,s.i18n("chiefdev"))),w.push(d[m](h,"Naoki Sawada (nao-pon)<hypweb+elfinder@gmail.com>")[m](f,s.i18n("developer"))),w.push(d[m](h,"Troex Nevelin <troex@fury.scancode.ru>")[m](f,s.i18n("maintainer"))),w.push(d[m](h,"Alexey Sukhotin <strogg@yandex.ru>")[m](f,s.i18n("contributor"))),s.i18[s.lang].translator&&e.each(s.i18[s.lang].translator.split(", "),function(){w.push(d[m](h,this.trim())[m](f,s.i18n("translator")+" ("+s.i18[s.lang].language+")"))}),w.push(T()),w.push(k),w.push('
      '+s.i18n("icons")+': Pixelmixer, Fugue, Icons8
      '),w.push(k),w.push('
      Licence: 3-clauses BSD Licence
      '),w.push('
      Copyright © 2009-2024, Studio 42 / nao-pon
      '),w.push('
      „ …'+s.i18n("dontforget")+" �
      "),w.push("
      ")},j=function(){var t=s.shortcuts();w.push('
      '),t.length?(w.push('
      '),e.each(t,function(e,t){w.push(x.replace(/\{pattern\}/,t[0]).replace(/\{descrip\}/,t[1]))}),w.push("
      ")):w.push('
      '+s.i18n("shortcutsof")+"
      "),w.push("
      ")},O=function(){w.push('
      '),w.push('DON\'T PANIC'),w.push("
      ")},S=!1,I=function(){S=!0,w.push('
      ')},M=!1,F=function(){M=!0,w.push('
      '),w.push('
        '),w.push("
        ")},E=function(){var n,i,a,c,d,p,u=function(t,n){return e.each(n,function(n,i){t.append(e("
        ").text(n)),"undefined"==typeof i?t.append(e("
        ").append(e("").text("undfined"))):"object"!=typeof i||i?"object"==typeof i&&(e.isPlainObject(i)||i.length)?t.append(e("
        ").append(u(e("
        "),i))):t.append(e("
        ").append(e("").text(i&&"object"==typeof i?"[]":i?i:'""'))):t.append(e("
        ").append(e("").text("null")))}),t},h=r.children("li").length;(l.debug.options||l.debug.debug)&&(h>=5&&(d=r.children("li:last"),p=o.children("div:last"),p.is(":hidden")?(d.remove(),p.remove()):(d.prev().remove(),p.prev().remove())),a=s.namespace+"-help-debug-"+ +new Date,n=e("
      • ").html(''+l.debug.debug.cmd+"").prependTo(r),i=e('
        ').data("debug",l.debug),n.on("click.debugrender",function(){var t=i.data("debug");i.removeData("debug"),t&&(i.hide(),t.debug&&(c=e("
        ").append(e("").text("debug"),u(e("
        "),t.debug)),i.append(c)),t.options&&(c=e("
        ").append(e("").text("options"),u(e("
        "),t.options)),i.append(c)),i.show()),n.off("click.debugrender")}),r.after(i),t&&o.tabs("refresh"))},D="";this.alwaysEnabled=!0,this.updateOnSelect=!1,this.state=-1,this.shortcuts=[{pattern:"f1",description:this.title}],s.bind("load",function(){var c,d,p,u,h,f,g=l.options.view||["about","shortcuts","help","integrations","debug"];-1!==(c=e.inArray("preference",g))&&g.splice(c,1),e.fn.tabs||-1!==(c=e.inArray(g,"debug"))&&g.splice(c,1),e.each(g,function(e,t){w.push(y[m](/\{id\}/g,t)[m](/\{title\}/,s.i18n(t)))}),w.push("
      "),-1!==e.inArray("about",g)&&A(),-1!==e.inArray("shortcuts",g)&&j(),-1!==e.inArray("help",g)&&(d=s.i18nBaseUrl+"help/%s.html.js",O()),-1!==e.inArray("integrations",g)&&I(),-1!==e.inArray("debug",g)&&F(),w.push("
      "),D=e(w.join("")),D.find(".ui-tabs-nav li").on("mouseenter mouseleave",function(t){e(this).toggleClass("ui-state-hover","mouseenter"===t.type)}).on("focus blur","a",function(t){e(t.delegateTarget).toggleClass("ui-state-focus","focusin"===t.type)}).children().on("click",function(t){var n=e(this);t.preventDefault(),t.stopPropagation(),n.parent().addClass(z).siblings().removeClass(z),D.children(".ui-tabs-panel").hide().filter(n.attr("href")).show()}).filter(":first").trigger("click"),S&&(n=D.find(".elfinder-help-tab-integrations").hide(),i=D.find("#"+s.namespace+"-help-integrations").hide().append(e('
      ').html(s.i18n("integrationWith"))),s.bind("helpIntegration",function(t){var a,o,r,l,c=i.children("ul:first");t.data&&(e.isPlainObject(t.data)?(a=Object.assign({link:"",title:"",banner:""},t.data),(a.title||a.link)&&(a.title||(a.title=a.link),o=a.link?e("").attr("href",a.link).attr("target","_blank").text(a.title):e("").text(a.title),a.banner&&(o=e("").append(e("").attr(a.banner),o)))):(o=e(t.data),o.filter("a").each(function(){var t=e(this);t.attr("target")||t.attr("target","_blank")})),o&&(n.show(),c.length||(c=e('
        ').appendTo(i)),a&&a.cmd?(l="elfinder-help-integration-"+a.cmd,r=c.find("ul."+l),r.length||(r=e('
          '),c.append(e("
        • ").append(e("").html(s.i18n("cmd"+a.cmd))).append(r))),o=r.append(e("
        • ").append(o))):c.append(e("
        • ").append(o))))}).bind("themechange",function(){D.find("div.elfinder-help-term-theme").replaceWith(T())})),M&&(a=D.find(".elfinder-help-tab-debug").hide(),o=D.find("#"+s.namespace+"-help-debug").children("div:first"),r=o.children("ul:first").on("click",function(e){e.preventDefault(),e.stopPropagation()}),l.debug={},s.bind("backenddebug",function(e){M&&e.data&&e.data.debug&&(l.debug={options:e.data.options,debug:Object.assign({cmd:s.currentReqCmd},e.data.debug)},l.dialog&&E())})),D.find("#"+s.namespace+"-help-about").find(".apiver").text(s.api),l.dialog=l.fmDialog(D,{title:l.title,width:530,maxWidth:"window",maxHeight:"window",autoOpen:!1,destroyOnClose:!1,close:function(){M&&(a.hide(),o.tabs("destroy")),t=!1}}).on("click",function(e){e.stopPropagation()}).css({overflow:"hidden"}),p=l.dialog.children(".ui-tabs"),u=p.children(".ui-tabs-nav:first"),h=p.children(".ui-tabs-panel"),f=l.dialog.outerHeight(!0)-l.dialog.height(),l.dialog.closest(".ui-dialog").on("resize",function(){h.height(l.dialog.height()-f-u.outerHeight(!0)-20)}),d&&l.dialog.one("initContents",function(){e.ajax({url:l.options.helpSource?l.options.helpSource:d.replace("%s",s.lang),dataType:"html"}).done(function(t){e("#"+s.namespace+"-help-help").html(t)}).fail(function(){e.ajax({url:d.replace("%s","en"),dataType:"html"}).done(function(t){e("#"+s.namespace+"-help-help").html(t)})})}),l.state=0,s.trigger("helpBuilded",l.dialog)}).one("open",function(){var e=!1;s.one("backenddebug",function(){e=!0}).one("opendone",function(){requestAnimationFrame(function(){!e&&M&&(M=!1,a.hide(),o.hide(),r.hide())})})}),this.getstate=function(){return 0},this.exec=function(n,i){var s=i?i.tab:void 0,l=function(){M&&(o.tabs(),r.find("a:first").trigger("click"),a.show(),t=!0)};return l(),this.dialog.trigger("initContents").elfinderdialog("open").find((s?".elfinder-help-tab-"+s:".ui-tabs-nav li")+" a:first").trigger("click"),e.Deferred().resolve()}}).prototype={forceLoad:!0},i.prototype.commands.hidden=function(){this.hidden=!0,this.updateOnSelect=!1,this.getstate=function(){return-1}},i.prototype.commands.hide=function(){var t,n,i,a,o=this,r={};this.syncTitleOnChange=!0,this.shortcuts=[{pattern:"ctrl+shift+dot",description:this.fm.i18n("toggleHidden")}],this.init=function(){var e=this.fm;t=e.storage("hide")||{items:{}},n=Object.keys(t.items).length,this.title=e.i18n(t.show?"hideHidden":"showHidden"),o.update(void 0,o.title)},this.fm.bind("select contextmenucreate closecontextmenu",function(e,r){var s=(e.data?e.data.selected||e.data.targets:null)||r.selected();"select"===e.type&&e.data?a=e.data.origin:"contextmenucreate"===e.type&&(i=e.data.type),!s.length||("contextmenucreate"!==e.type&&"navbar"!==a||"cwd"===i)&&s[0]===r.cwd().hash?o.title=r.i18n(t.show?"hideHidden":"showHidden"):o.title=r.i18n("cmdhide"),"closecontextmenu"!==e.type?o.update("cwd"===i?n?0:-1:void 0,o.title):(i="",requestAnimationFrame(function(){o.update(void 0,o.title)}))}),this.getstate=function(e){return this.fm.cookieEnabled&&"cwd"!==i&&(e||this.fm.selected()).length||n?0:-1},this.exec=function(i,s){var l,c,d=this.fm,p=e.Deferred().done(function(){d.trigger("hide",{items:h,opts:s})}).fail(function(e){d.error(e)}),u=s||{},h=u.targets?u.targets:i||d.selected(),f=[];if(t=d.storage("hide")||{},e.isPlainObject(t)||(t={}),e.isPlainObject(t.items)||(t.items={}),("shortcut"===s._currentType||!h.length||"navbar"!==s._currentType&&"navbar"!==a&&h[0]===d.cwd().hash)&&(t.show?u.hide=!0:Object.keys(t.items).length&&(u.show=!0)),u.reset&&(u.show=!0,n=0),u.show||u.hide){if(u.show?t.show=!0:delete t.show,u.show)return d.storage("hide",u.reset?null:t),o.title=d.i18n("hideHidden"),o.update(u.reset?-1:void 0,o.title),e.each(t.items,function(e){var t=d.file(e,!0);t&&(d.searchStatus.state||!t.phash||d.file(t.phash))&&f.push(t)}),f.length&&(d.updateCache({added:f}),d.add({added:f})),u.reset&&(t={items:{}}),p.resolve();h=Object.keys(t.items)}return h.length&&(e.each(h,function(e,n){var i;t.items[n]||(i=d.file(n),i&&(r[n]=i.i18||i.name),t.items[n]=r[n]?r[n]:n)}),n=Object.keys(t.items).length,l=this.files(h),d.storage("hide",t),d.remove({removed:h}),t.show&&this.exec(void 0,{hide:!0}),u.hide||(c={},c.undo={cmd:"hide",callback:function(){var t=d.storage("hide");t&&(e.each(h,function(e,n){delete t.items[n]}),n=Object.keys(t.items).length,d.storage("hide",t),d.trigger("hide",{items:h,opts:{}}),o.update(n?0:-1)),d.updateCache({added:l}),d.add({added:l})}},c.redo={cmd:"hide",callback:function(){return d.exec("hide",void 0,{targets:h})}})),"rejected"==p.state()?p:p.resolve(c)}},(i.prototype.commands.home=function(){this.title="Home",this.alwaysEnabled=!0,this.updateOnSelect=!1,this.shortcuts=[{pattern:"ctrl+home ctrl+shift+up",description:"Home"}],this.getstate=function(){var e=this.fm.root(),t=this.fm.cwd().hash;return e&&t&&e!=t?0:-1},this.exec=function(){return this.fm.exec("open",this.fm.root())}}).prototype={forceLoad:!0},(i.prototype.commands.info=function(){var t=this.fm,n="elfinder-spinner",i="elfinder-info-button",a={calc:t.i18n("calc"),size:t.i18n("size"),unknown:t.i18n("unknown"),path:t.i18n("path"),aliasfor:t.i18n("aliasfor"),modify:t.i18n("modify"),perms:t.i18n("perms"),locked:t.i18n("locked"),dim:t.i18n("dim"),kind:t.i18n("kind"),files:t.i18n("files"),folders:t.i18n("folders"),roots:t.i18n("volumeRoots"),items:t.i18n("items"),yes:t.i18n("yes"),no:t.i18n("no"),link:t.i18n("link"),owner:t.i18n("owner"),group:t.i18n("group"),perm:t.i18n("perm"),getlink:t.i18n("getLink")},o=function(e,t){return t?e.replace(/\u200B/g,""):e.replace(/(\/|\\)/g,"$1​")};this.items=["size","aliasfor","path","link","dim","modify","perms","locked","owner","group","perm"],this.options.custom&&Object.keys(this.options.custom).length&&e.each(this.options.custom,function(e,t){t.label&&this.items.push(t.label)}),this.tpl={main:'
          {title}
          {content}
          ',itemTitle:'{name}{kind}',groupTitle:"{items}: {num}",row:'{label} : {value}',spinner:'{text} '},this.alwaysEnabled=!0,this.updateOnSelect=!1,this.shortcuts=[{pattern:"ctrl+i"}],this.init=function(){e.each(a,function(e,n){a[e]=t.i18n(n)})},this.getstate=function(){return 0},this.exec=function(t){var r=this.files(t);r.length||(r=this.files([this.fm.cwd().hash]));var s,l,c,d,p,u,h,f,m,g=this,v=this.fm,b=this.options,y=this.tpl,w=y.row,x=r.length,k=[],C=y.main,z="{label}",T="{value}",A=[],j=null,O={title:v.i18n("selectionInfo"),width:"auto",close:function(){e(this).elfinderdialog("destroy"),j&&"pending"===j.state()&&j.reject(),e.grep(A,function(e){e&&"pending"===e.state()&&e.reject()})}},S=[],I=function(e,t,i){F.find("."+n+"-"+t).parent().html(e).addClass(i||"")},M=v.namespace+"-info-"+e.map(r,function(e){return e.hash}).join("-"),F=v.getUI().find("#"+M),E=[],D="",U="elfinder-font-mono elfinder-info-hash",P=[],R=v.ui.notify;if(R.is(":hidden")&&R.children(".elfinder-notify").length&&R.elfinderdialog("open").height("auto"),!x)return e.Deferred().reject();if(F.length)return F.elfinderdialog("toTop"),e.Deferred().resolve();if(f=v.storage("infohides")||v.arrayFlip(b.hideItems,!0),1===x){if(c=r[0],c.icon&&(D=" "+v.getIconStyle(c)),C=C.replace("{dirclass}",c.csscls?v.escape(c.csscls):"").replace("{class}",v.mime2class(c.mime)).replace("{style}",D),d=y.itemTitle.replace("{name}",v.escape(c.i18||c.name)).replace("{kind}",''+v.mime2kind(c)+""),l=v.tmb(c),c.read?"directory"!=c.mime||c.alias?s=v.formatSize(c.size):(s=y.spinner.replace("{text}",a.calc).replace("{name}","size"),S.push(c.hash)):s=a.unknown,!f.size&&k.push(w.replace(z,a.size).replace(T,s)),!f.aleasfor&&c.alias&&k.push(w.replace(z,a.aliasfor).replace(T,c.alias)),f.path||((h=v.path(c.hash,!0))?k.push(w.replace(z,a.path).replace(T,o(v.escape(h))).replace("{class}","elfinder-info-path")):(k.push(w.replace(z,a.path).replace(T,y.spinner.replace("{text}",a.calc).replace("{name}","path")).replace("{class}","elfinder-info-path")),A.push(v.path(c.hash,!0,{notify:null}).fail(function(){I(a.unknown,"path")}).done(function(e){I(o(e),"path")})))),!f.link&&c.read){var q,H=v.escape(c.name);if("1"==c.url)k.push(w.replace(z,a.link).replace(T,'"));else{if(c.url)q=c.url;else if("directory"===c.mime)if(b.nullUrlDirLinkSelf&&null===c.url){var _=window.location;q=_.pathname+_.search+"#elf_"+c.hash}else""!==c.url&&v.option("url",!v.isRoot(c)&&c.phash||c.hash)&&(q=v.url(c.hash));else q=v.url(c.hash);q&&k.push(w.replace(z,a.link).replace(T,''+H+""))}}f.dim||(c.dim?k.push(w.replace(z,a.dim).replace(T,c.dim)):-1!==c.mime.indexOf("image")&&(c.width&&c.height?k.push(w.replace(z,a.dim).replace(T,c.width+"x"+c.height)):c.size&&"0"!==c.size&&(k.push(w.replace(z,a.dim).replace(T,y.spinner.replace("{text}",a.calc).replace("{name}","dim"))),A.push(v.request({data:{cmd:"dim",target:c.hash},preventDefault:!0}).fail(function(){I(a.unknown,"dim")}).done(function(e){if(I(e.dim||a.unknown,"dim"),e.dim){var t=e.dim.split("x"),n=v.file(c.hash);n.width=t[0],n.height=t[1]}}))))),!f.modify&&k.push(w.replace(z,a.modify).replace(T,v.formatDate(c))),!f.perms&&k.push(w.replace(z,a.perms).replace(T,v.formatPermissions(c))),!f.locked&&k.push(w.replace(z,a.locked).replace(T,c.locked?a.yes:a.no)),!f.owner&&c.owner&&k.push(w.replace(z,a.owner).replace(T,c.owner)),!f.group&&c.group&&k.push(w.replace(z,a.group).replace(T,c.group)),!f.perm&&c.perm&&k.push(w.replace(z,a.perm).replace(T,v.formatFileMode(c.perm))),window.ArrayBuffer&&(v.options.cdns.sparkmd5||v.options.cdns.jssha)&&"directory"!==c.mime&&c.size>0&&(!b.showHashMaxsize||c.size<=b.showHashMaxsize)&&(P=[],e.each(v.storage("hashchekcer")||b.showHashAlgorisms,function(e,t){c[t]?k.push(w.replace(z,v.i18n(t)).replace(T,c[t]).replace("{class}",U)):(k.push(w.replace(z,v.i18n(t)).replace(T,y.spinner.replace("{text}",a.calc).replace("{name}",t))),P.push(t))}),P.length&&(m=e('
          '),A.push(v.getContentsHashes(c.hash,P,b.showHashOpts,{progressBar:m}).progress(function(t){e.each(P,function(e,n){t[n]&&I(t[n],n,U)})}).always(function(){e.each(P,function(e,t){I(a.unknown,t)})})))),b.custom&&e.each(b.custom,function(t,n){f[n.label]||n.mimes&&!e.grep(n.mimes,function(e){return c.mime===e||0===c.mime.indexOf(e+"/")}).length||n.hashRegex&&!c.hash.match(n.hashRegex)||(k.push(w.replace(z,v.i18n(n.label)).replace(T,n.tpl.replace("{id}",M))),n.action&&"function"==typeof n.action&&E.push(n.action))})}else C=C.replace("{class}","elfinder-cwd-icon-group"),d=y.groupTitle.replace("{items}",a.items).replace("{num}",x),p=e.grep(r,function(e){return"directory"==e.mime}).length,p?(u=e.grep(r,function(e){return"directory"===e.mime&&(!e.phash||e.isroot)}).length,p-=u,k.push(w.replace(z,a.kind).replace(T,u===x||p===x?a[u?"roots":"folders"]:e.map({roots:u,folders:p,files:x-u-p},function(e,t){return e?a[t]+" "+e:null}).join(", "))),!f.size&&k.push(w.replace(z,a.size).replace(T,y.spinner.replace("{text}",a.calc).replace("{name}","size"))),S=e.map(r,function(e){return e.hash})):(s=0,e.each(r,function(e,t){var n=parseInt(t.size);n>=0&&s>=0?s+=n:s="unknown"}),k.push(w.replace(z,a.kind).replace(T,a.files)),!f.size&&k.push(w.replace(z,a.size).replace(T,v.formatSize(s))));return C=C.replace("{title}",d).replace("{content}",k.join("").replace(/{class}/g,"")),F=g.fmDialog(C,O),F.attr("id",M).one("mousedown",".elfinder-info-path",function(){e(this).html(o(e(this).html(),!0))}),P.length&&m.appendTo(F.find("."+n+"-"+P[0]).parent()),v.UA.Mobile&&e.fn.tooltip&&F.children(".ui-dialog-content .elfinder-info-title").tooltip({classes:{"ui-tooltip":"elfinder-ui-tooltip ui-widget-shadow"},tooltipClass:"elfinder-ui-tooltip ui-widget-shadow",track:!0}),c&&"1"==c.url&&F.on("click","."+n+"-url",function(){e(this).parent().html(y.spinner.replace("{text}",v.i18n("ntfurl")).replace("{name}","url")),v.request({data:{cmd:"url",target:c.hash},preventDefault:!0}).fail(function(){I(H,"url")}).done(function(e){if(e.url){I(''+H+""||H,"url");var t=v.file(c.hash);t.url=e.url}else I(H,"url")})}),l&&e("").on("load",function(){F.find(".elfinder-cwd-icon").addClass(l.className).css("background-image","url('"+l.url+"')")}).attr("src",l.url),S.length&&(j=v.getSize(S).done(function(e){I(e.formated,"size")}).fail(function(){I(a.unknown,"size")})),E.length&&e.each(E,function(e,t){try{t(c,v,F)}catch(n){v.debug("error",n)}}),e.Deferred().resolve()}}).prototype={forceLoad:!0},i.prototype.commands.mkdir=function(){var t,n=this.fm,i=this;this.value="",this.disableOnSearch=!0,this.updateOnSelect=!1,this.syncTitleOnChange=!0,this.mime="directory",this.prefix="untitled folder",this.exec=function(e,a){var o;return e&&e.length&&a&&a._currentType&&"navbar"===a._currentType?(this.origin=a._currentType,this.data={target:e[0]}):(o=n.cwd().hash===e[0],this.origin=t&&!o?t:"cwd",delete this.data),e||this.options.intoNewFolderToolbtn||n.getUI("cwd").trigger("unselectall"),this.move=this.value===n.i18n("cmdmkdirin"),n.res("mixin","make").bind(i)()},this.shortcuts=[{pattern:"ctrl+shift+n"}],this.init=function(){this.options.intoNewFolderToolbtn&&(this.syncTitleOnChange=!0)},n.bind("select contextmenucreate closecontextmenu",function(e){var a=(e.data?e.data.selected||e.data.targets:null)||n.selected();i.className="mkdir",t=e.data&&a.length?e.data.origin||e.data.type||"":"",i.options.intoNewFolderToolbtn||""!==t||(t="cwd"),a.length&&"navbar"!==t&&"cwd"!==t&&n.cwd().hash!==a[0]?(i.title=n.i18n("cmdmkdirin"),i.className+=" elfinder-button-icon-mkdirin"):i.title=n.i18n("cmdmkdir"),"closecontextmenu"!==e.type?i.update(void 0,i.title):requestAnimationFrame(function(){i.update(void 0,i.title)})}),this.getstate=function(i){var a=n.cwd(),o="navbar"===t||i&&i[0]!==a.hash?this.files(i||n.selected()):[],r=o.length,s=function(t){var n=!0;return e.grep(t,function(e){return n=!(!n||!e.read||e.locked)})};return"navbar"===t?r&&o[0].write&&o[0].read?0:-1:!a.write||r&&s(o).length!=r?-1:0}},i.prototype.commands.mkfile=function(){var t=this;this.disableOnSearch=!0,this.updateOnSelect=!1,this.mime="text/plain",this.prefix="untitled file.txt",this.variants=[],this.getTypeName=function(e,n){var i,a=t.fm;return i=(i=a.messages["kind"+a.kinds[e]])?a.i18n(["extentiontype",n.toUpperCase(),i]):a.i18n(["extentionfile",n.toUpperCase()])},this.fm.bind("open reload canMakeEmptyFile",function(){var n=t.fm,i=n.getCommand("edit").getMkfileHides();t.variants=[],n.mimesCanMakeEmpty&&e.each(n.mimesCanMakeEmpty,function(e,a){a&&!i[e]&&n.uploadMimeCheck(e)&&t.variants.push([e,t.getTypeName(e,a)])}),t.change()}),this.getstate=function(){return this.fm.cwd().write?0:-1},this.exec=function(n,i){var a,o,r=t.fm;if(a=r.mimesCanMakeEmpty[i]){if(r.uploadMimeCheck(i))return this.mime=i,this.prefix=r.i18n(["untitled file",a]),r.res("mixin","make").bind(t)();o=["errMkfile",t.getTypeName(i,a)]}return e.Deferred().reject(o)}},i.prototype.commands.netmount=function(){var t,n=this,i=!1;this.alwaysEnabled=!0,this.updateOnSelect=!1,this.drivers=[],this.handlers={load:function(){var t=n.fm;t.cookieEnabled&&t.one("open",function(){n.drivers=t.netDrivers,n.drivers.length&&e.each(n.drivers,function(){var e=n.options[this];e&&(i=!0,e.integrateInfo&&t.trigger("helpIntegration",Object.assign({cmd:"netmount"},e.integrateInfo)))})})}},this.getstate=function(){return i?0:-1},this.exec=function(){var i,a=n.fm,o=e.Deferred(),r=n.options,s=function(){var s,l=function(){c.protocol.trigger("change","winfocus")},c={protocol:e("").on("change",function(e,n){var o=this.value;t.find(".elfinder-netmount-tr").hide(),t.find(".elfinder-netmount-tr-"+o).show(),i&&i.children(".ui-dialog-buttonpane:first").find("button").show(),"function"==typeof r[o].select&&r[o].select(a,e,n)}).addClass("ui-corner-all")},d={title:a.i18n("netMountDialogTitle"),resizable:!0,modal:!0,destroyOnClose:!1,open:function(){e(window).on("focus."+a.namespace,l),c.protocol.trigger("change")},close:function(){"pending"==o.state()&&o.reject(),e(window).off("focus."+a.namespace,l)},buttons:{}},p=function(){var i,s=c.protocol.val(),l={cmd:"netmount",protocol:s},d=r[s];return e.each(t.find("input.elfinder-netmount-inputs-"+s),function(t,n){var i,a;a=e(n),a.is(":radio,:checkbox")?a.is(":checked")&&(i=a.val().trim()):i=a.val().trim(),i&&(l[n.name]=i)}),l.host?(l.mnt2res&&(i=!0),a.request({data:l,notify:{type:"netmount",cnt:1,hideCnt:!0}}).done(function(e){var t;e.added&&e.added.length&&(i&&c.protocol.trigger("change","reset"),e.added[0].phash&&(t=a.file(e.added[0].phash))&&(t.dirs||(t.dirs=1,a.change({changed:[t]}))),a.one("netmountdone",function(){a.exec("open",e.added[0].hash)})),o.resolve()}).fail(function(e){d.fail&&"function"==typeof d.fail&&d.fail(a,a.parseError(e)),o.reject(e)}),void n.dialog.elfinderdialog("close")):a.trigger("error",{error:"errNetMountHostReq",opts:{modal:!0}})},u=e('
          ').on("keydown","input",function(t){var n,i=!0;t.keyCode===e.ui.keyCode.ENTER&&(e.each(u.find("input:visible:not(.elfinder-input-optional)"),function(){return""===e(this).val()?(i=!1,n=e(this),!1):void 0}),i?p():n.trigger("focus"))}),h=e("
          ");return t=e('
          ').append(e("").append(e(""+a.i18n("protocol")+"")).append(e("").append(c.protocol))),e.each(n.drivers,function(n,i){r[i]&&(c.protocol.append('"),e.each(r[i].inputs,function(n,o){o.attr("name",n),"hidden"!=o.attr("type")?(o.addClass("ui-corner-all elfinder-netmount-inputs-"+i),t.append(e("").addClass("elfinder-netmount-tr elfinder-netmount-tr-"+i).append(e(""+a.i18n(n)+"")).append(e("").append(o)))):(o.addClass("elfinder-netmount-inputs-"+i),h.append(o))}),r[i].protocol=c.protocol)}),t.append(h),t.find(".elfinder-netmount-tr").hide(),t.find(".elfinder-netmount-tr-"+n.drivers[0]).show(),d.buttons[a.i18n("btnMount")]=p,d.buttons[a.i18n("btnCancel")]=function(){n.dialog.elfinderdialog("close")},t.find("select,input").addClass("elfinder-tabstop"),s=n.fmDialog(u.append(t),d).ready(function(){c.protocol.trigger("change"),s.elfinderdialog("posInit")}),i=s.closest(".ui-dialog"),s};return n.dialog?n.dialog.elfinderdialog("open"):n.dialog=s(),o.promise()},n.fm.bind("netmount",function(e){var i=e.data||null,a=n.options,o=function(){a[i.protocol]&&"function"==typeof a[i.protocol].done&&(a[i.protocol].done(n.fm,i),t.find("select,input").addClass("elfinder-tabstop"),n.dialog.elfinderdialog("tabstopsInit"))};i&&i.protocol&&(i.mode&&"redirect"===i.mode?n.fm.request({data:{cmd:"netmount",protocol:i.protocol,host:i.host,user:"init",pass:"return",options:i.options},preventDefault:!0}).done(function(e){i=JSON.parse(e.body),o()}):o())})},i.prototype.commands.netunmount=function(){this.alwaysEnabled=!0,this.updateOnSelect=!1,this.drivers=[],this.handlers={load:function(){this.drivers=this.fm.netDrivers}},this.getstate=function(e){var t,n=this.fm;return e&&this.drivers.length&&!this._disabled&&(t=n.file(e[0]))&&t.netkey?0:-1},this.exec=function(t){var n=this,i=this.fm,a=e.Deferred().fail(function(e){e&&i.error(e)}),o=i.file(t[0]),r=function(t){var n,a=[];return i.leafRoots&&(n=[],e.each(i.leafRoots,function(a,o){var r,s=i.parents(a);-1!==(r=e.inArray(t,s))&&(r=s.length-r,e.each(o,function(e,t){n.push({i:r,hash:t})}))}),n.length&&(n.sort(function(e,t){return e.i').hide().appendTo(e("body"));if(t.UA.Mobile||!h){if(u)h?p.attr("target","_blank"):p.attr("download",a.name),p.attr("href",n).get(0).click();else if(i=window.open(n),!i)return g.reject("errPopup")}else{if(m="string"==typeof w.method&&"get"===w.method.toLowerCase(),!m&&0===n.indexOf(t.options.url)&&t.customData&&Object.keys(t.customData).length&&!a.mime.match(/^(?:video|audio)/)&&(n=""),"window"===x?(s=c=Math.round(2*screen.availWidth/3),l=d=Math.round(2*screen.availHeight/3),parseInt(a.width)&&parseInt(a.height)?(s=parseInt(a.width),l=parseInt(a.height)):a.dim&&(o=a.dim.split("x"),s=parseInt(o[0]),l=parseInt(o[1])),c>=s&&d>=l?(c=s,d=l):s-c>l-d?d=Math.round(l*(c/s)):c=Math.round(s*(d/l)),r="width="+c+",height="+d,i=window.open(n,f,r+",top=50,left=50,scrollbars=yes,resizable=yes,titlebar=no")):("tabs"===x&&(f=a.hash),i=window.open("about:blank",f)),!i)return g.reject("errPopup");if(""===n){var v=document.createElement("form");v.action=t.options.url,v.method="POST",v.target=f,v.style.display="none";var b=Object.assign({},t.customData,{cmd:"file",target:a.hash,_t:a.ts||parseInt(+new Date/1e3)});e.each(b,function(e,t){var n=document.createElement("input");n.name=e,n.value=t,v.appendChild(n)}),document.body.appendChild(v),v.submit()}else"window"!==x&&(i.location=n);e(i).trigger("focus")}p.remove()};try{p=new RegExp(t.option("dispInlineRegex"),"i")}catch(k){p=!1}for(u="string"==typeof e("").get(0).download,b=v.length;b--;){if(f="elf_open_window",a=v[b],!a.read)return g.reject(["errOpen",a.name,"errPerm"]);h=p&&a.mime.match(p),t.openUrl(a.hash,!h,y)}return g.resolve(n)};if(b>1)t.confirm({title:"openMulti",text:["openMultiConfirm",b+""],accept:{label:"cmdopen",callback:function(){k()}},cancel:{label:"btnCancel",callback:function(){g.reject()}},buttons:t.getCommand("zipdl")&&t.isCommandEnabled("zipdl",t.cwd().hash)?[{label:"cmddownload",callback:function(){t.exec("download",n),g.reject()}}]:[]});else{if(f=t.storage("selectAction")||w.selectAction,f&&(e.each(f.split("/"),function(){var e=this.valueOf();return"open"!==e&&(m=t.getCommand(e))&&m.enabled()?!1:void(m=null)}),m))return t.exec(m.name);k()}return g}}).prototype={forceLoad:!0},i.prototype.commands.opendir=function(){this.alwaysEnabled=!0,this.getstate=function(){var e,t=this.fm.selected(),n=t.length;return 1!==n?-1:(e=this.fm.getUI("workzone"),e.hasClass("elfinder-search-result")?0:-1)},this.exec=function(t){var n,i=this.fm,a=e.Deferred(),o=this.files(t),r=o.length;return r&&o[0].phash?(n=o[0].phash,i.trigger("searchend",{noupdate:!0}),i.request({data:{cmd:"open",target:n},notify:{type:"open",cnt:1,hideCnt:!0},syncOnFail:!1}),a):a.reject()}},i.prototype.commands.opennew=function(){var t=this.fm;this.shortcuts=[{pattern:("function"==typeof t.options.getFileCallback?"shift+":"")+"ctrl+enter"}],this.getstate=function(e){var t=this.files(e),n=t.length;return 1===n&&"directory"===t[0].mime&&t[0].read?0:-1},this.exec=function(t){var n,i,a,o,r=e.Deferred(),s=this.files(t),l=s.length,c=this.options;return 1===l&&(n=s[0])&&"directory"===n.mime?(i=window.location,a=c.url?c.url:i.pathname,c.useOriginQuery&&(a.match(/\?/)?i.search&&(a+="&"+i.search.substr(1)):a+=i.search),a+="#elf_"+n.hash,o=window.open(a,"_blank"),setTimeout(function(){o.focus()},1e3),r.resolve()):r.reject()}},i.prototype.commands.paste=function(){this.updateOnSelect=!1,this.handlers={changeclipboard:function(){this.update()}},this.shortcuts=[{pattern:"ctrl+v shift+insert"}],this.getstate=function(e){if(this._disabled)return-1;if(e){if(Array.isArray(e)){if(1!=e.length)return-1;e=this.fm.file(e[0])}}else e=this.fm.cwd();return this.fm.clipboard().length&&"directory"==e.mime&&e.write?0:-1},this.exec=function(t,n){ var i,a,o,r=this,s=r.fm,l=n||{},c=t?this.files(t)[0]:s.cwd(),d=s.clipboard(),p=d.length,u=p?d[0].cut:!1,h=l._cmd?l._cmd:u?"move":"copy",f="err"+h.charAt(0).toUpperCase()+h.substr(1),m=[],g=[],v=e.Deferred().fail(function(e){e&&s.error(e)}).always(function(){s.unlockfiles({files:e.map(d,function(e){return e.hash})})}),b=function(t){return t.length&&s._commands.duplicate?s.exec("duplicate",t):e.Deferred().resolve()},y=function(t){var n,i=e.Deferred(),a=[],o={},d=function(t,n){for(var i=[],a=t.length;a--;)-1!==e.inArray(t[a].name,n)&&i.unshift(a);return i},p=function(e){var n=a[e],o=t[n],r=e==a.length-1;o&&s.confirm({title:s.i18n(h+"Files"),text:["errExists",o.name,"restore"===h?"confirmRest":"confirmRepl"],all:!r,accept:{label:"btnYes",callback:function(n){r||n?m(t):p(++e)}},reject:{label:"btnNo",callback:function(n){var i;if(n)for(i=a.length;e{title}',s=e('
          '),l=e('
            '),c=e('
            '),d=(e("base").length?document.location.href.replace(/#.*$/,""):"",function(t){e("#"+a.namespace+"-preference-tab-"+t).trigger("mouseover").trigger("click"),n=t}),p=a.res("class","tabsactive"),u=function(){var u=i.options.categories||{language:["language"],theme:["theme"],toolbar:["toolbarPref"],workspace:["iconSize","columnPref","selectAction","makefileTypes","useStoredEditor","editorMaximized","useFullscreen","showHidden"],dialog:["autoFocusDialog"],selectionInfo:["infoItems","hashChecker"],reset:["clearBrowserData"],all:!0},h=i.options.prefs||["language","theme","toolbarPref","iconSize","columnPref","selectAction","makefileTypes","useStoredEditor","editorMaximized","useFullscreen","showHidden","infoItems","hashChecker","autoFocusDialog","clearBrowserData"];a.cookieEnabled||delete u.language,h=a.arrayFlip(h,!0),a.options.getFileCallback&&delete h.selectAction,a.UA.Fullscreen||delete h.useFullscreen,h.language&&(h.language=function(){var t=e("").on("change",function(){var t=e(this).val();a.storage("lang",t),e("#"+a.id).elfinder("reload")}),n=[],o=i.options.langs||{ar:"العربية",bg:"Българ�ки",ca:"Català",cs:"Čeština",da:"Dansk",de:"Deutsch",el:"Ελληνικά",en:"English",es:"Español",fa:"�ارسی",fo:"Føroyskt",fr:"Français",fr_CA:"Français (Canada)",he:"עברית",hr:"Hrvatski",hu:"Magyar",id:"Bahasa Indonesia",it:"Italiano",ja:"日本語",ko:"한국어",nl:"Nederlands",no:"Norsk",pl:"Polski",pt_BR:"Português",ro:"Română",ru:"Pу��кий",si:"සිංහල",sk:"Sloven�ina",sl:"Slovenš�ina",sr:"Srpski",sv:"Svenska",tr:"Türkçe",ug_CN:"ئۇيغۇرچە",uk:"Україн�ький",vi:"Tiếng Việt",zh_CN:"简体中文",zh_TW:"正體中文"};return a.cookieEnabled?(e.each(o,function(e,t){n.push('")}),t.append(n.join("")).val(a.lang)):e()}()),h.theme&&(h.theme=function(){var t=a.options.themes?Object.keys(a.options.themes).length:0;if(0===t||1===t&&a.options.themes["default"])return null;var n=e("").on("change",function(){var t=e(this).val();a.changeTheme(t).storage("theme",t)}),i={image:'',link:'$2',data:'
            $1
            $2
            '},o=["image","description","author","email","license"],r=e('').text(a.i18n("default")).on("click",function(e){n.val("default").trigger("change")}),s=e('
            ').on("click","button",function(){var t=e(this).data("themeid");n.val(t).trigger("change")});return a.options.themes["default"]||n.append('"),e.each(a.options.themes,function(t,r){var l,c=e('"),d=e('
            '+a.i18n(t)+'
            ');n.append(c),s.append(d),l=setTimeout(function(){d.find("span.elfinder-spinner").replaceWith(a.i18n(["errRead",t]))},1e4),a.getTheme(t).always(function(){l&&clearTimeout(l)}).done(function(r){var s,l=e(),p=e("
            ");s=r.link?i.link.replace(/\$1/g,r.link).replace(/\$3/g,a.i18n("website")):"$2",r.name&&c.html(a.i18n(r.name)),d.children("legend").html(s.replace(/\$2/g,a.i18n(r.name)||t)),e.each(o,function(o,s){var l,c=i[s]||i.data;r[s]&&(l=c.replace(/\$0/g,a.escape(s)).replace(/\$1/g,a.i18n(s)).replace(/\$2/g,a.i18n(r[s])),"image"===s&&r.link&&(l=e(l).on("click",function(){n.val(t).trigger("change")}).attr("title",a.i18n("select"))),p.append(l))}),l=l.add(p),l=l.add(e('
            ').append(e('').data("themeid",t).html(a.i18n("select")))),d.find("span.elfinder-spinner").replaceWith(l)}).fail(function(){d.find("span.elfinder-spinner").replaceWith(a.i18n(["errRead",t]))})}),e("
            ").append(n.val(a.theme&&a.theme.id?a.theme.id:"default"),r,s)}()),h.toolbarPref&&(h.toolbarPref=function(){var t=e.map(a.options.uiOptions.toolbar,function(e){return Array.isArray(e)?e:null}),n=[],i=a.storage("toolbarhides")||{};return e.each(t,function(){var e=this,t=a.i18n("cmd"+e);t==="cmd"+e&&(t=a.i18n(e)),n.push('")}),e(n.join(" ")).on("change","input",function(){var t=e(this).val(),n=e(this).is(":checked");n||i[t]?n&&i[t]&&delete i[t]:i[t]=!0,a.storage("toolbarhides",i),a.trigger("toolbarpref")})}()),h.iconSize&&(h.iconSize=function(){var t=a.options.uiOptions.cwd.iconsView.sizeMax||3,n=a.storage("iconsize")||a.options.uiOptions.cwd.iconsView.size||0,i=e('
            ').slider({classes:{"ui-slider-handle":"elfinder-tabstop"},value:n,max:t,slide:function(e,t){a.getUI("cwd").trigger("iconpref",{size:t.value})},change:function(e,t){a.storage("iconsize",t.value)}});return a.getUI("cwd").on("iconpref",function(e,t){i.slider("option","value",t.size)}),i}()),h.columnPref&&(h.columnPref=function(){var t=a.options.uiOptions.cwd.listView.columns,n=[],i=a.storage("columnhides")||{};return e.each(t,function(){var e=this,t=a.getColumnName(e);n.push('")}),e(n.join(" ")).on("change","input",function(){var t=e(this).val(),n=e(this).is(":checked");n||i[t]?n&&i[t]&&delete i[t]:i[t]=!0,a.storage("columnhides",i),a.trigger("columnpref",{repaint:!0})})}()),h.selectAction&&(h.selectAction=function(){var t=e("").on("change",function(){var t=e(this).val();a.storage("selectAction","default"===t?null:t)}),n=[],o=i.options.selectActions,r=a.getCommand("open").options.selectAction||"open";return-1===e.inArray(r,o)&&o.unshift(r),e.each(o,function(t,i){var o=e.map(i.split("/"),function(e){var t=a.i18n("cmd"+e);return t==="cmd"+e&&(t=a.i18n(e)),t});n.push('")}),t.append(n.join("")).val(a.storage("selectAction")||r)}()),h.makefileTypes&&(h.makefileTypes=function(){var t=a.getCommand("edit").getMkfileHides(),n=function(){var n=[];return t=a.getCommand("edit").getMkfileHides(),e.each(a.mimesCanMakeEmpty,function(e,i){var o=a.getCommand("mkfile").getTypeName(e,i);n.push('")}),n.join(" ")},i=e("
            ").on("change","input",function(){var n=e(this).val(),i=e(this).is(":checked");i||t[n]?i&&t[n]&&delete t[n]:t[n]=!0,a.storage("mkfileHides",t),a.trigger("canMakeEmptyFile")}).append(n()),o=e("
            ").append(e('').on("keydown",function(t){t.keyCode===e.ui.keyCode.ENTER&&e(this).next().trigger("click")}),e('').html(a.i18n("add")).on("click",function(){var t,n=e(this).prev(),i=n.val(),o=a.getUI("toast"),r=function(){return o.appendTo(n.closest(".ui-dialog")),a.toast({msg:a.i18n("errUsupportType"),mode:"warning",onHidden:function(){1===o.children().length&&o.appendTo(a.getUI())}}),n.trigger("focus"),!1};if(!i.match(/\//)){if(i=a.arrayFlip(a.mimeTypes)[i],!i)return r();n.val(i)}return a.mimeIsText(i)&&a.mimeTypes[i]?(a.trigger("canMakeEmptyFile",{mimes:[i],unshift:!0}),t={},t[i]=a.mimeTypes[i],a.storage("mkfileTextMimes",Object.assign(t,a.storage("mkfileTextMimes")||{})),n.val(""),o.appendTo(n.closest(".ui-dialog")),void a.toast({msg:a.i18n(["complete",i+" ("+t[i]+")"]),onHidden:function(){1===o.children().length&&o.appendTo(a.getUI())}})):r()}),e('').html(a.i18n("reset")).on("click",function(){a.one("canMakeEmptyFile",{done:function(){i.empty().append(n())}}),a.trigger("canMakeEmptyFile",{resetTexts:!0})}));return a.bind("canMakeEmptyFile",{done:function(e){e.data&&e.data.mimes&&e.data.mimes.length&&i.empty().append(n())}}),e("
            ").append(i,o)}()),h.useStoredEditor&&(h.useStoredEditor=e('').prop("checked",function(){var e=a.storage("useStoredEditor");return e?e>0:a.options.commandsOptions.edit.useStoredEditor}()).on("change",function(t){a.storage("useStoredEditor",e(this).is(":checked")?1:-1)})),h.editorMaximized&&(h.editorMaximized=e('').prop("checked",function(){var e=a.storage("editorMaximized");return e?e>0:a.options.commandsOptions.edit.editorMaximized}()).on("change",function(t){a.storage("editorMaximized",e(this).is(":checked")?1:-1)})),h.useFullscreen&&(h.useFullscreen=e('').prop("checked",function(){var e=a.storage("useFullscreen");return e?e>0:"screen"===a.options.commandsOptions.fullscreen.mode}()).on("change",function(t){a.storage("useFullscreen",e(this).is(":checked")?1:-1)})),h.showHidden&&!function(){var t,n=function(){var n,i=a.storage("hide"),o=[];i&&i.items&&e.each(i.items,function(e,t){o.push(a.escape(t))}),r.prop("disabled",!o.length)[o.length?"removeClass":"addClass"]("ui-state-disabled"),n=o.length?o.join("\n"):"",h.showHidden.attr("title",n),t&&h.showHidden.tooltip("option","content",n.replace(/\n/g,"
            ")).tooltip("close")},i=e('').prop("checked",function(){var e=a.storage("hide");return e&&e.show}()).on("change",function(t){var n={};n[e(this).is(":checked")?"show":"hide"]=!0,a.exec("hide",void 0,n)}),o=e('').append(a.i18n("reset")).on("click",function(){a.exec("hide",void 0,{reset:!0}),e(this).parent().find("input:first").prop("checked",!1),n()}),r=e().add(i).add(o);h.showHidden=e("
            ").append(i,o),a.bind("hide",function(e){var t=e.data;t.opts&&(t.opts.show||t.opts.hide)||n()}),a.UA.Mobile&&e.fn.tooltip&&(t=!0,h.showHidden.tooltip({classes:{"ui-tooltip":"elfinder-ui-tooltip ui-widget-shadow"},tooltipClass:"elfinder-ui-tooltip ui-widget-shadow",track:!0}).css("user-select","none"),o.css("user-select","none")),n()}(),h.infoItems&&(h.infoItems=function(){var t=a.getCommand("info").items,n=[],i=a.storage("infohides")||a.arrayFlip(a.options.commandsOptions.info.hideItems,!0);return e.each(t,function(){var e=this,t=a.i18n(e);n.push('")}),e(n.join(" ")).on("change","input",function(){var t=e(this).val(),n=e(this).is(":checked");n||i[t]?n&&i[t]&&delete i[t]:i[t]=!0,a.storage("infohides",i),a.trigger("infopref",{repaint:!0})})}()),h.hashChecker&&a.hashCheckers.length&&(h.hashChecker=function(){var t=[],n=a.arrayFlip(a.storage("hashchekcer")||a.options.commandsOptions.info.showHashAlgorisms,!0);return e.each(a.hashCheckers,function(){var e=this,i=a.i18n(e);t.push('")}),e(t.join(" ")).on("change","input",function(){var t=e(this).val(),i=e(this).is(":checked");i?n[t]=!0:n[t]&&delete n[t],a.storage("hashchekcer",e.grep(a.hashCheckers,function(e){return n[e]}))})}()),h.autoFocusDialog&&(h.autoFocusDialog=e('').prop("checked",function(){var e=a.storage("autoFocusDialog");return e?e>0:a.options.uiOptions.dialog.focusOnMouseOver}()).on("change",function(t){a.storage("autoFocusDialog",e(this).is(":checked")?1:-1)})),h.clearBrowserData&&(h.clearBrowserData=e("").text(a.i18n("reset")).button().on("click",function(t){t.preventDefault(),a.storage(),e("#"+a.id).elfinder("reload")})),e.each(u,function(t,i){var s,d;i===!0?d=1:i&&(s=e(),e.each(i,function(t,n){var i,o,r,l="";(i=h[n])&&(d=2,o=a.i18n(n),r=e(i).filter('input[type="checkbox"]'),r.length||(r=e(i).find('input[type="checkbox"]')),1===r.length?(r.attr("id")||r.attr("id","elfinder-preference-"+n+"-checkbox"),o='"):r.length>1&&(l=" elfinder-preference-checkboxes"),s=s.add(e('
            '+o+"
            ")).add(e('
            ').append(i)))})),d&&(l.append(r[o](/\{id\}/g,t)[o](/\{title\}/,a.i18n(t))[o](/\{class\}/,n===t?"elfinder-focus":"")),2===d&&c.append(e('
            ').hide().append(e("
            ").append(s))))}),l.on("click","a",function(t){var n=e(t.target),i=n.attr("href");t.preventDefault(),t.stopPropagation(),l.children().removeClass(p),n.removeClass("ui-state-hover").parent().addClass(p),i.match(/all$/)?c.addClass("elfinder-preference-taball").children().show():(c.removeClass("elfinder-preference-taball").children().hide(),e(i).show())}).on("focus blur","a",function(t){e(this).parent().toggleClass("ui-state-focus","focusin"===t.type)}).on("mouseenter mouseleave","li",function(t){e(this).toggleClass("ui-state-hover","mouseenter"===t.type)}),c.find("a,input,select,button").addClass("elfinder-tabstop"),s.append(l,c),t=i.fmDialog(s,{title:i.title,width:i.options.width||600,height:i.options.height||400,maxWidth:"window",maxHeight:"window",autoOpen:!1,destroyOnClose:!1,allowMinimize:!1,open:function(){n&&d(n),n=null},resize:function(){c.height(t.height()-l.outerHeight(!0)-(c.outerHeight(!0)-c.height())-5)}}).on("click",function(e){e.stopPropagation()}).css({overflow:"hidden"}),t.closest(".ui-dialog").css({overflow:"hidden"}).addClass("elfinder-bg-translucent"),n="all"};this.shortcuts=[{pattern:"ctrl+comma",description:this.title}],this.alwaysEnabled=!0,this.getstate=function(){return 0},this.exec=function(n,i){return!t&&u(),i&&(i.tab?d(i.tab):"cwd"===i._currentType&&d("workspace")),t.elfinderdialog("open"),e.Deferred().resolve()}},(i.prototype.commands.quicklook=function(){var t,n,i,a,o,r,s,l,c,d,p=this,u=p.fm,h=0,f=1,m=2,g=3,v=4,b=h,y=Element.update?"quicklookupdate":"update",w="elfinder-quicklook-navbar-icon",x="elfinder-quicklook-fullscreen",k="elfinder-quicklook-info-wrapper",C=function(t){e(document).trigger(e.Event("keydown",{keyCode:t,ctrlKey:!1,shiftKey:!1,altKey:!1,metaKey:!1}))},z=function(e){var t=u.getUI().offset(),n=function(){var t=e.find(".elfinder-cwd-file-wrapper");return t.length?t:e}(),i=n.offset()||{top:0,left:0};return{opacity:0,width:n.width(),height:n.height()-30,top:i.top-t.top,left:i.left-t.left}},T=function(){var i=p.options.contain||u.options.dialogContained,a=i?u.getUI():e(window),o=u.getUI().offset(),r=Math.min(t,a.width()-10),s=Math.min(n,a.height()-80);return{opacity:1,width:r,height:s,top:parseInt((a.height()-s-60)/2+(i?0:a.scrollTop()-o.top)),left:parseInt((a.width()-r)/2+(i?0:a.scrollLeft()-o.left))}},A={},j=function(e,t){var n=t||e.substr(0,e.indexOf("/")),i=A[n]?A[n]:A[n]=document.createElement(n),a=!1;try{a=i.canPlayType&&i.canPlayType(e)}catch(o){}return!(!a||""===a||"no"==a)},O=-1!=window.navigator.platform.indexOf("Win"),S=!1,I=!1,M=!1,F=null,E=e.ui.keyCode.LEFT,D=e.ui.keyCode.RIGHT,U="mousemove touchstart "+("onwheel"in document?"wheel":"onmousewheel"in document?"mousewheel":"DOMMouseScroll"),P=e(''),R=e("
            "),q=e('
            '),H=e('
            '),_=e('
            ').on("click touchstart",function(t){if(!M){var n=p.window,i=n.hasClass(x),o=e(window),r=function(){p.preview.trigger("changesize")};t.stopPropagation(),t.preventDefault(),i?(J="",L(),n.toggleClass(x).css(n.data("position")),o.trigger(p.resize).off(p.resize,r),K.off("mouseenter mouseleave"),H.off(U)):(n.toggleClass(x).data("position",{left:n.css("left"),top:n.css("top"),width:n.width(),height:n.height(),display:"block"}).removeAttr("style"),e(window).on(p.resize,r).trigger(p.resize),H.on(U,function(e){I||("mousemove"!==e.type&&"touchstart"!==e.type||(L(),F=setTimeout(function(){(u.UA.Mobile||K.parent().find(".elfinder-quicklook-navbar:hover").length<1)&&K.fadeOut("slow",function(){H.show()})},3e3)),H.is(":visible")&&(W(),H.data("tm",setTimeout(function(){H.show()},3e3))))}).show().trigger("mousemove"),K.on("mouseenter mouseleave",function(e){I||("mouseenter"===e.type?L():H.trigger("mousemove"))})),u.zIndex&&n.css("z-index",u.zIndex+1),u.UA.Mobile?K.attr("style",J):K.attr("style",J).draggable(i?"destroy":{start:function(){I=!0,M=!0,H.show(),L()},stop:function(){I=!1,J=p.navbar.attr("style"),requestAnimationFrame(function(){M=!1})}}),e(this).toggleClass(w+"-fullscreen-off");var s=n;a.is(".ui-resizable")&&(s=s.add(a)),s.resizable(i?"enable":"disable").removeClass("ui-state-disabled"),n.trigger("viewchange")}}),N=function(){p.update(void 0,function(){var t=p.fm,n=t.selectedFiles(),i=n.length,a=(p.docked(),function(){var a=0;return e.each(n,function(e,t){var n=parseInt(t.ts);a>=0?n>a&&(a=n):a="unknown"}),{hash:n[0].hash+"/"+ +new Date,name:t.i18n("items")+": "+i,mime:"group",size:G,ts:a,files:e.map(n,function(e){return e.hash}),getSize:!0}});return i||(i=1,n=[t.cwd()]),1===i?n[0]:a()}())},L=function(){p.window.hasClass(x)&&(F&&clearTimeout(F),F=null,K.stop(!0,!0).css("display","block"),W())},W=function(){H.data("tm")&&clearTimeout(H.data("tm")),H.removeData("tm"),H.hide()},B=e('
            ').on("click touchstart",function(e){return!M&&C(E),!1}),$=e('
            ').on("click touchstart",function(e){return!M&&C(D),!1}),K=e('
            ').append(B).append(_).append($).append('
            ').append(e('
            ').on("click touchstart",function(e){return!M&&p.window.trigger("close"),!1})),V=e('').on("mousedown",function(e){e.stopPropagation(),p.window.trigger("close")}),X=e('').on("mousedown",function(e){e.stopPropagation(),p.docked()?p.window.trigger("navdockout"):p.window.trigger("navdockin")}),G=''+u.i18n("calc")+'',J="",Y=!0;this.flags={},this.cover=H,this.evUpdate=y,(this.navbar=K)._show=L,this.resize="resize."+u.namespace,this.info=e("
            ").addClass(k).append(R).append(q),this.autoPlay=function(){return p.opened()?!!p.options[p.docked()?"dockAutoplay":"autoplay"]:!1},this.preview=e('
            ').on("change",function(){L(),K.attr("style",J),p.docked()&&K.hide(),p.preview.attr("style","").removeClass("elfinder-overflow-auto"),p.info.attr("style","").hide(),p.cover.removeClass("elfinder-quicklook-coverbg"),R.removeAttr("class").attr("style",""),q.html("")}).on(y,function(t){var n,i,a=(p.preview,t.file),r='
            {value}
            ',s=function(){var s=p.window.css("overflow","hidden");i=u.escape(a.i18||a.name),!a.read&&t.stopImmediatePropagation(),p.window.data("hash",a.hash),p.preview.off("changesize").trigger("change").children().remove(),P.html(i),B.css("visibility",""),$.css("visibility",""),a.hash===u.cwdId2Hash(o.find("[id]:not(.elfinder-cwd-parent):first").attr("id"))&&B.css("visibility","hidden"),a.hash===u.cwdId2Hash(o.find("[id]:last").attr("id"))&&$.css("visibility","hidden"),"directory"===a.mime?c=[a.hash]:"group"===a.mime&&a.getSize&&(c=a.files),q.html(r.replace(/\{value\}/,i)+r.replace(/\{value\}/,u.mime2kind(a))+r.replace(/\{value\}/,c.length?G:u.formatSize(a.size))+r.replace(/\{value\}/,u.i18n("modify")+": "+u.formatDate(a))),c.length&&(l=u.getSize(c).done(function(e){q.find("span.elfinder-spinner").parent().html(e.formated)}).fail(function(){q.find("span.elfinder-spinner").parent().html(u.i18n("unknown"))}).always(function(){l=null}),l._hash=a.hash),R.addClass("elfinder-cwd-icon ui-corner-all "+u.mime2class(a.mime)),a.icon&&R.css(u.getIconStyle(a,!0)),p.info.attr("class",k),a.csscls&&p.info.addClass(a.csscls),a.read&&(n=u.tmb(a))&&e("").hide().appendTo(p.preview).on("load",function(){R.addClass(n.className).css("background-image","url('"+n.url+"')"),e(this).remove()}).attr("src",n.url),p.info.delay(100).fadeIn(10),p.window.hasClass(x)&&H.trigger("mousemove"),s.css("overflow","")},c=[];a&&!Object.keys(a).length&&(a=u.cwd()),a&&l&&"pending"===l.state()&&l._hash!==a.hash&&l.reject(),a&&(t.forceUpdate||p.window.data("hash")!==a.hash)?s():t.stopImmediatePropagation()}),this.window=e('
            ').hide().addClass(u.UA.Touch?"elfinder-touch":"").on("click",function(e){var t=this;e.stopPropagation(),b===m&&requestAnimationFrame(function(){b===m&&u.toFront(t)})}).append(e('
            ').append(e('').append(V,X),P),this.preview,p.info.hide(),H.hide(),K).draggable({handle:"div.elfinder-quicklook-titlebar"}).on("open",function(e,t){var n=p.window,i=p.value,a=u.getUI("cwd"),o=function(e){b=e,p.update(1,p.value),p.change(),n.trigger("resize."+u.namespace)};Y||b!==h?b===v&&(u.getUI("navdock").data("addNode")(c),o(g),p.preview.trigger("changesize"),u.storage("previewDocked","1"),0===u.getUI("navdock").width()&&n.trigger("navdockout")):(i&&i.hash!==r&&(a=u.cwdHash2Elm(i.hash.split("/",2)[0])),J="",K.attr("style",""),b=f,a.trigger("scrolltoview"),W(),n.css(t||z(a)).show().animate(T(),550,function(){o(m),L()}),u.toFront(n))}).on("close",function(e,t){var n,i=p.window,a=p.preview.trigger("change"),r=(p.value,(i.data("hash")||"").split("/",2)[0]),s=function(e,n){b=e,n&&u.toHide(i),a.children().remove(),p.update(0,p.value),i.data("hash",""),t&&t.resolve()};p.opened()&&(l&&"pending"===l.state()&&l.reject(),p.docked()?(c=u.getUI("navdock").data("removeNode")(p.window.attr("id"),"detach"),s(v),u.storage("previewDocked","2")):(b=f,i.hasClass(x)&&_.click(),r&&(n=o.find("#"+r)).length?i.animate(z(n),500,function(){a.off("changesize"),s(h,!0)}):s(h,!0)))}).on("navdockin",function(e,t){var n=p.window,a=u.getUI("navdock"),o=s||a.width(),r=t||{};Y&&(r.init=!0),b=g,i=n.attr("style"),n.toggleClass("ui-front").removeClass("ui-widget").draggable("disable").resizable("disable").removeAttr("style").css({width:"100%",height:o,boxSizing:"border-box",paddingBottom:0,zIndex:"unset"}),K.hide(),X.toggleClass("ui-icon-plusthick ui-icon-minusthick elfinder-icon-full elfinder-icon-minimize"),u.toHide(n,!0),a.data("addNode")(n,r),p.preview.trigger("changesize"),u.storage("previewDocked","1")}).on("navdockout",function(t){var n=p.window,a=u.getUI("navdock"),o=(e.Deferred(),z(p.preview));s=n.outerHeight(),a.data("removeNode")(n.attr("id"),u.getUI()),n.toggleClass("ui-front").addClass("ui-widget").draggable("enable").resizable("enable").attr("style",i),X.toggleClass("ui-icon-plusthick ui-icon-minusthick elfinder-icon-full elfinder-icon-minimize"),b=h,n.trigger("open",o),u.storage("previewDocked","0")}).on("resize."+u.namespace,function(){p.preview.trigger("changesize")}),this.alwaysEnabled=!0,this.value=null,this.handlers={select:function(e,t){d&&cancelAnimationFrame(d),e.data&&e.data.selected&&e.data.selected.length?p.opened()&&N():d=requestAnimationFrame(function(){p.opened()&&N()})},error:function(){p.window.is(":visible")&&p.window.trigger("close")},"searchshow searchhide":function(){this.opened()&&this.window.trigger("close")},navbarshow:function(){requestAnimationFrame(function(){p.docked()&&p.preview.trigger("changesize")})},destroy:function(){p.window.remove()}},this.shortcuts=[{pattern:"space"}],this.support={audio:{ogg:j("audio/ogg;"),webm:j("audio/webm;"),mp3:j("audio/mpeg;"),wav:j("audio/wav;"),m4a:j("audio/mp4;")||j("audio/x-m4a;")||j("audio/aac;"),flac:j("audio/flac;"),amr:j("audio/amr;")},video:{ogg:j("video/ogg;"),webm:j("video/webm;"),mp4:j("video/mp4;"),mkv:j("video/x-matroska;")||j("video/webm;"),"3gp":j("video/3gpp;")||j("video/mp4;"),m3u8:j("application/x-mpegURL","video")||j("application/vnd.apple.mpegURL","video"),mpd:j("application/dash+xml","video")}},A={},this.closed=function(){return b==h||b==v},this.opened=function(){return b==m||b==g},this.docked=function(){return b==g},this.addIntegration=function(e){requestAnimationFrame(function(){u.trigger("helpIntegration",Object.assign({cmd:"quicklook"},e))})},this.init=function(){var i,l=this.options,c=this.window,d=this.preview;t=l.width>0?parseInt(l.width):450,n=l.height>0?parseInt(l.height):300,"auto"!==l.dockHeight&&(s=parseInt(l.dockHeight),s||(s=void 0)),u.one("load",function(){S=u.getUI("navdock").data("dockEnabled"),!S&&X.hide(),a=u.getUI(),o=u.getUI("cwd"),u.zIndex&&c.css("z-index",u.zIndex+1),c.appendTo(a),e(document).on("keydown."+u.namespace,function(t){t.keyCode==e.ui.keyCode.ESCAPE&&p.opened()&&!p.docked()&&c.hasClass("elfinder-frontmost")&&c.trigger("close")}),c.resizable({handles:"se",minWidth:350,minHeight:120,resize:function(){d.trigger("changesize")}}),p.change(function(){p.opened()&&p.value&&(p.value.tmb&&1==p.value.tmb&&(p.value=Object.assign({},u.file(p.value.hash))),d.trigger(e.Event(y,{file:p.value})))}),d.on(y,function(e){var t,n,a;if(t=e.file){if(n=t.hash,a=u.searchStatus.mixed&&u.searchStatus.state>1,"directory"!==t.mime)if(parseInt(t.size)||t.mime.match(l.mimeRegexNotEmptyCheck)){if(p.dispInlineRegex=i,a||u.optionsByHashes[n])try{p.dispInlineRegex=new RegExp(u.option("dispInlineRegex",n),"i")}catch(e){try{p.dispInlineRegex=new RegExp(u.isRoot(t)?u.options.dispInlineRegex:u.option("dispInlineRegex",t.phash),"i")}catch(e){p.dispInlineRegex=/^$/}}}else e.stopImmediatePropagation();else p.dispInlineRegex=/^$/;p.info.show()}else e.stopImmediatePropagation()}),e.each(u.commands.quicklook.plugins||[],function(e,t){"function"==typeof t&&new t(p)})}).one("open",function(){var e,t=Number(u.storage("previewDocked")||l.docked);S&&t>=1&&(e=p.window,p.exec(),e.trigger("navdockin",{init:!0}),2===t?e.trigger("close"):(p.update(void 0,u.cwd()),p.change())),Y=!1}).bind("open",function(){r=u.cwd().hash,p.value=u.cwd();try{i=new RegExp(u.option("dispInlineRegex"),"i")}catch(e){i=/^$/}}).bind("change",function(t){t.data&&t.data.changed&&p.opened()&&e.each(t.data.changed,function(){return p.window.data("hash")===this.hash?(p.window.data("hash",null),p.preview.trigger(y),!1):void 0})}).bind("navdockresizestart navdockresizestop",function(e){H["navdockresizestart"===e.type?"show":"hide"]()})},this.getstate=function(){return p.opened()?1:0},this.exec=function(){ return p.closed()&&N(),p.enabled()&&p.window.trigger(p.opened()?"close":"open"),e.Deferred().resolve()},this.hideinfo=function(){this.info.stop(!0,!0).hide()}}).prototype={forceLoad:!0},i.prototype.commands.quicklook.plugins=[function(t){var n,i,a=["image/jpeg","image/png","image/gif","image/svg+xml","image/x-ms-bmp"],o=t.fm.returnBytes(t.options.getDimThreshold||0),r=t.preview;n=new Image,n.onload=n.onerror=function(){2==n.height&&a.push("image/webp")},n.src="data:image/webp;base64,UklGRjoAAABXRUJQVlA4IC4AAACyAgCdASoCAAIALmk0mk0iIiIiIgBoSygABc6WWgAA/veff/0PP8bA//LwYAAA",e.each(navigator.mimeTypes,function(t,n){var i=n.type;0===i.indexOf("image/")&&e.inArray(i,a)&&a.push(i)}),r.on(t.evUpdate,function(n){var s,l,c,d,p=t.fm,u=n.file,h=!1,f=null,m=function(e){var t=p.file(u.hash);t.width=e[0],t.height=e[1]},g=function(){var e,t,n,i,a;f&&f.state&&"pending"===f.state()&&f.reject(),h||(h=!0,e=s.get(0),t=u.width&&u.height?{w:u.width,h:u.height}:e.naturalWidth?null:{w:s.width(),h:s.height()},t&&s.removeAttr("width").removeAttr("height"),n=u.width||e.naturalWidth||e.width||s.width(),i=u.height||e.naturalHeight||e.height||s.height(),u.width&&u.height||m([n,i]),t&&s.width(t.w).height(t.h),a=(n/i).toFixed(2),r.on("changesize",function(){var e,t,n=parseInt(r.width()),i=parseInt(r.height());a<(n/i).toFixed(2)?(t=i,e=Math.floor(t*a)):(e=n,t=Math.floor(e/a)),s.width(e).height(t).css("margin-top",i>t?Math.floor((i-t)/2):0)}).trigger("changesize"),s.fadeIn(100))},v=function(){l.remove(),t.hideinfo()};i||(i=p.arrayFlip(a)),i[u.mime]&&t.dispInlineRegex.test(u.mime)&&(n.stopImmediatePropagation(),l=e('
            '+p.i18n("nowLoading")+'
            ').appendTo(t.info.find(".elfinder-quicklook-info")),c=e('
            ').appendTo(l),s=e("").hide().appendTo(r).on("load",function(){v(),g()}).on("error",function(){l.remove()}),d=p.openUrl(u.hash,!1,function(e){s.attr("src",e)},{progressBar:c}),r.one("change",function(){d&&d.state&&"pending"===d.state()&&d.reject()}),u.width&&u.height?g():u.size>o&&(f=p.request({data:{cmd:"dim",target:u.hash},preventDefault:!0}).done(function(e){if(e.dim){var t=e.dim.split("x");u.width=t[0],u.height=t[1],m(t),g()}})))})},function(t){var n=t.fm,i="image/tiff",a=t.preview;window.Worker&&window.Uint8Array&&a.on(t.evUpdate,function(o){var r,s,l,c,d,p=o.file,u=function(e){c&&c.terminate(),r.remove(),n.debug("error",e)},h=function(e){var t=n.file(p.hash);t.width=e[0],t.height=e[1]};p.mime===i&&(o.stopImmediatePropagation(),r=e('
            '+n.i18n("nowLoading")+'
            ').appendTo(t.info.find(".elfinder-quicklook-info")),s=e('
            ').appendTo(r),a.one("change",function(){c&&c.terminate(),r.remove()}),d=n.getContents(p.hash,"arraybuffer",{progressBar:s}).done(function(i){if(i){l=e("
            ").css({width:"100%",height:"100%"}).hide().appendTo(a);try{c=n.getWorker(),c.onmessage=function(n){var i,o,s,d,u=n.data;c&&c.terminate(),i=document.createElement("canvas"),o=i.getContext("2d"),i.width=u.width,i.height=u.height,s=o.createImageData(u.width,u.height),s.data.set(new Uint8Array(u.image)),o.putImageData(s,0,0),l.append(i).show(),r.remove(),d=(u.width/u.height).toFixed(2),a.on("changesize",function(){var t,n,o=parseInt(a.width()),r=parseInt(a.height());d<(o/r).toFixed(2)?(n=r,t=Math.floor(n*d)):(t=o,n=Math.floor(t/d)),e(i).width(t).height(n).css("margin-top",r>n?Math.floor((r-n)/2):0)}).trigger("changesize"),p.width&&p.height||h([u.width,u.height]),t.hideinfo()},c.onerror=u,c.postMessage({scripts:[n.options.cdns.tiff,n.getWorkerUrl("quicklook.tiff.js")],data:{data:i}})}catch(o){u(o)}}else u()}),a.one("change",function(){d&&d.state&&"pending"===d.state()&&d.reject()}))})},function(t){var n,i=t.fm,a=i.arrayFlip(["image/vnd.adobe.photoshop","image/x-photoshop"]),o=t.preview,r=function(e,a,r){try{i.replaceXhrSend(),n.fromURL(e).then(function(e){var n;a.attr("src",e.image.toBase64()),requestAnimationFrame(function(){n=(a.width()/a.height()).toFixed(2),o.on("changesize",function(){var e,t,i=parseInt(o.width()),r=parseInt(o.height());n<(i/r).toFixed(2)?(t=r,e=Math.floor(t*n)):(e=i,t=Math.floor(e/n)),a.width(e).height(t).css("margin-top",r>t?Math.floor((r-t)/2):0)}).trigger("changesize"),r.remove(),t.hideinfo(),a.fadeIn(100)})},function(){r.remove(),a.remove()}),i.restoreXhrSend()}catch(s){i.restoreXhrSend(),r.remove(),a.remove()}};o.on(t.evUpdate,function(s){var l,c,d,p,u,h,f=s.file;a[f.mime]&&i.options.cdns.psd&&!i.UA.ltIE10&&t.dispInlineRegex.test(f.mime)&&(s.stopImmediatePropagation(),c=e('
            '+i.i18n("nowLoading")+'
            ').appendTo(t.info.find(".elfinder-quicklook-info")),d=e('
            ').appendTo(c),h=i.openUrl(f.hash,"sameorigin",function(t){t&&(l=e("").hide().appendTo(o),n?r(t,l,c):(p=window.define,u=window.require,window.require=null,window.define=null,i.loadScript([i.options.cdns.psd],function(){n=require("psd"),p?window.define=p:delete window.define,u?window.require=u:delete window.require,r(t,l,c)})))},{progressBar:d}),o.one("change",function(){h&&h.state&&"pending"===h.state()&&h.reject()}))})},function(t){var n=t.fm,i=n.arrayFlip(["text/html","application/xhtml+xml"]),a=t.preview;a.on(t.evUpdate,function(o){var r,s,l,c=o.file;i[c.mime]&&t.dispInlineRegex.test(c.mime)&&(!t.options.getSizeMax||c.size<=t.options.getSizeMax)&&(o.stopImmediatePropagation(),s=e('
            '+n.i18n("nowLoading")+'
            ').appendTo(t.info.find(".elfinder-quicklook-info")),l=e('
            ').appendTo(s),a.one("change",function(){"pending"==r.state()&&r.reject()}).addClass("elfinder-overflow-auto"),r=n.request({data:{cmd:"get",target:c.hash,conv:1,_t:c.ts},options:{type:"get",cache:!0},preventDefault:!0,progressBar:l}).done(function(n){t.hideinfo();var i=e('').appendTo(a)[0].contentWindow.document;i.open(),i.write(n.content),i.close()}).always(function(){s.remove()}))})},function(t){var n=t.fm,i=n.arrayFlip(["text/x-markdown"]),a=t.preview,o=null,r=function(n,i){t.hideinfo();var r=e('').appendTo(a)[0].contentWindow.document;r.open(),r.write((o.parse||o)(n.content)),r.close(),i.remove()},s=function(e){o=!1,e.remove()};a.on(t.evUpdate,function(l){var c,d,p,u=l.file;i[u.mime]&&n.options.cdns.marked&&o!==!1&&t.dispInlineRegex.test(u.mime)&&(!t.options.getSizeMax||u.size<=t.options.getSizeMax)&&(l.stopImmediatePropagation(),d=e('
            '+n.i18n("nowLoading")+'
            ').appendTo(t.info.find(".elfinder-quicklook-info")),p=e('
            ').appendTo(d),a.one("change",function(){"pending"==c.state()&&c.reject()}).addClass("elfinder-overflow-auto"),c=n.request({data:{cmd:"get",target:u.hash,conv:1,_t:u.ts},options:{type:"get",cache:!0},preventDefault:!0,progressBar:p}).done(function(e){o||window.marked?(o||(o=window.marked),r(e,d)):n.loadScript([n.options.cdns.marked],function(t){o=t||window.marked||!1,delete window.marked,o?r(e,d):s(d)},{tryRequire:!0,error:function(){s(d)}})}).fail(function(){s(d)}))})},function(t){if(t.options.viewerjs){var n=t.fm,i=t.preview,a=t.options.viewerjs,o=a.url?n.arrayFlip(a.mimes||[]):[],r=t.window,s=t.navbar,l=function(){s.css("bottom",r.hasClass("elfinder-quicklook-fullscreen")?"30px":"")};a.url&&i.on("update",function(s){var c,d,p,u,h=s.file;!o[h.mime]||"application/pdf"===h.mime&&a.pdfNative&&t.flags.pdfNative||(s.stopImmediatePropagation(),d=e('
            '+n.i18n("nowLoading")+'
            ').appendTo(t.info.find(".elfinder-quicklook-info")),p=e('
            ').appendTo(d),u=n.openUrl(h.hash,"sameorigin",function(n){n&&(c=e('').css("background-color","transparent").on("load",function(){t.hideinfo(),d.remove(),c.css("background-color","#fff")}).on("error",function(){d.remove(),c.remove()}).appendTo(i).attr("src",a.url+"#"+n),r.on("viewchange.viewerjs",l),l(),i.one("change",function(){r.off("viewchange.viewerjs"),d.remove(),c.off("load").remove()}))},{progressBar:p}),i.one("change",function(){u&&u.state&&"pending"===u.state()&&u.reject()}))})}},function(t){var n=t.fm,i="application/pdf",a=t.preview,o=!1,r="";n.UA.Safari&&"mac"===n.OS&&!n.UA.iOS||n.UA.IE||n.UA.Firefox?o=!0:e.each(navigator.plugins,function(t,n){e.each(n,function(e,t){return t.type===i?!(o=!0):void 0})}),t.flags.pdfNative=o,o&&("undefined"==typeof t.options.pdfToolbar||t.options.pdfToolbar||(r="#toolbar=0"),a.on(t.evUpdate,function(s){var l,c=s.file;o&&c.mime===i&&t.dispInlineRegex.test(c.mime)&&(s.stopImmediatePropagation(),l=n.openUrl(c.hash,!1,function(i){i&&(t.hideinfo(),t.cover.addClass("elfinder-quicklook-coverbg"),e('').on("error",function(e){o=!1,t.update(void 0,n.cwd()),t.update(void 0,c)}).appendTo(a))}),a.one("change",function(){l&&l.state&&"pending"===l.state()&&l.reject()}))}))},function(t){var n=t.fm,i="application/x-shockwave-flash",a=t.preview,o=!1;e.each(navigator.plugins,function(t,n){e.each(n,function(e,t){return t.type===i?!(o=!0):void 0})}),o&&a.on(t.evUpdate,function(o){var r,s,l=o.file;l.mime===i&&t.dispInlineRegex.test(l.mime)&&(o.stopImmediatePropagation(),s=n.openUrl(l.hash,!1,function(n){n&&(t.hideinfo(),r=e('').appendTo(a))}),a.one("change",function(){s&&s.state&&"pending"===s.state()&&s.reject()}))})},function(t){var n,i,a,o,r,s,l=t.fm,c=t.preview,d={"audio/mpeg":"mp3","audio/mpeg3":"mp3","audio/mp3":"mp3","audio/x-mpeg3":"mp3","audio/x-mp3":"mp3","audio/x-wav":"wav","audio/wav":"wav","audio/x-m4a":"m4a","audio/aac":"m4a","audio/mp4":"m4a","audio/x-mp4":"m4a","audio/ogg":"ogg","audio/webm":"webm","audio/flac":"flac","audio/x-flac":"flac","audio/amr":"amr"},p=t.window,u=t.navbar,h="string"==typeof t.options.mediaControlsList&&t.options.mediaControlsList?' controlsList="'+l.escape(t.options.mediaControlsList)+'"':"",f=function(){u.css("bottom",p.hasClass("elfinder-quicklook-fullscreen")?"50px":"")},m=function(t,i){return e('').on("change",function(e){e.stopPropagation()}).on("error",function(e){n&&n.data("hash")===i&&b()}).data("hash",i).appendTo(c)},g=function(t){var n,i=e.Deferred(),o=e.Deferred().done(function(){var e;e=l.getContents(t,"arraybuffer",{progressBar:s}).done(function(e){try{var t=a.toWAV(new Uint8Array(e));t?i.resolve(URL.createObjectURL(new Blob([t],{type:"audio/x-wav"}))):i.reject()}catch(n){i.reject()}}).fail(function(){i.reject()}),c.one("change",function(){e&&e.state&&"pending"===e.state()&&e.reject()})}).fail(function(){a=!1,i.reject()});return window.TextEncoder&&window.URL&&URL.createObjectURL&&"undefined"==typeof a?(n=window.AMR,delete window.AMR,l.loadScript([l.options.cdns.amr],function(){a=window.AMR?window.AMR:!1,window.AMR=n,o[a?"resolve":"reject"]()},{error:function(){o.reject()}})):o[a?"resolve":"reject"](),i},v=function(e){var t,i=n.data("hash");o&&(t=e.play()),t&&t["catch"]&&t["catch"](function(t){e.paused||n&&n.data("hash")===i&&b()})},b=function(){if(n&&n.parent().length){var e=n[0],t=n.children("source").attr("src");p.off("viewchange.audio");try{e.pause(),n.empty(),t.match(/^blob:/)&&URL.revokeObjectURL(t),e.src="",e.load()}catch(i){}n.remove(),n=null}};c.on(t.evUpdate,function(u){var h,b,y=u.file,w=d[y.mime];d[y.mime]&&t.dispInlineRegex.test(y.mime)&&((h=t.support.audio[w])||"amr"===w)&&(o=t.autoPlay(),i=y.hash,h?(u.stopImmediatePropagation(),r=e('
            '+l.i18n("nowLoading")+'
            ').appendTo(t.info.find(".elfinder-quicklook-info")),s=e('
            ').appendTo(r),b=l.openUrl(i,!1,function(e){r.remove(),e?(n=m(e,i),v(n[0]),p.on("viewchange.audio",f),f()):n.remove()},{progressBar:s}),c.one("change",function(){b&&b.state&&"pending"===b.state()&&b.reject()})):l.options.cdns.amr&&"amr"===w&&a!==!1&&(u.stopImmediatePropagation(),r=e('
            '+l.i18n("nowLoading")+'
            ').appendTo(t.info.find(".elfinder-quicklook-info")),s=e('
            ').appendTo(r),n=m("",i),g(y.hash).done(function(e){if(r.remove(),i===y.hash){var t=n[0];try{n.children("source").attr("src",e),t.pause(),t.load(),v(t),p.on("viewchange.audio",f),f()}catch(a){URL.revokeObjectURL(e),n.remove()}}else URL.revokeObjectURL(e)}).fail(function(){n.remove()})))}).one("change",b)},function(t){var n,i,a,o,r,s,l,c,d,p,u=t.fm,h=t.preview,f={"video/mp4":"mp4","video/x-m4v":"mp4","video/quicktime":"mp4","video/mpeg":"mpeg","video/ogg":"ogg","application/ogg":"ogg","video/webm":"webm","video/x-matroska":"mkv","video/3gpp":"3gp","application/vnd.apple.mpegurl":"m3u8","application/x-mpegurl":"m3u8","application/dash+xml":"mpd","video/x-flv":"flv","video/x-msvideo":"avi"},m=t.window,g=t.navbar,v="string"==typeof t.options.mediaControlsList&&t.options.mediaControlsList?' controlsList="'+u.escape(t.options.mediaControlsList)+'"':"",b=function(){u.UA.iOS?m.hasClass("elfinder-quicklook-fullscreen")?(h.css("height","-webkit-calc(100% - 50px)"),g._show()):h.css("height",""):g.css("bottom",m.hasClass("elfinder-quicklook-fullscreen")?"50px":"")},y=function(i,a){var r,s=function(e){l>1&&(c&&clearTimeout(c),c=setTimeout(function(){!r&&T(!0)},800))},l=0,d="";o=null,a=a||{},a.cssClass&&(d=" "+a.cssClass),t.hideinfo(),n=e('').on("change",function(e){e.stopPropagation()}).on("timeupdate progress",s).on("canplay",function(){r=!0}).data("hash",i.hash),n[0].addEventListener("error",function(e){a.src&&u.convAbsUrl(a.src)===u.convAbsUrl(e.target.src)&&(++l,s())},!0),a.src&&n.append(''),n.appendTo(h),m.on("viewchange.video",b),b()},w=function(e){var t,a;a=u.openUrl(e.hash,!1,function(a){d.remove(),a&&(y(e),t=new i,t.loadSource(a),t.attachMedia(n[0]),l&&t.on(i.Events.MANIFEST_PARSED,function(){z(n[0])}))},{progressBar:p}),h.one("change",function(){a&&a.state&&"pending"===a.state()&&a.reject()})},x=function(e){var t;t=u.openUrl(e.hash,!1,function(t){var i;d.remove(),t&&(y(e),o=window.dashjs.MediaPlayer().create(),i=o.getDebug(),i.setLogLevel?i.setLogLevel(dashjs.Debug.LOG_LEVEL_FATAL):i.setLogToBrowserConsole&&i.setLogToBrowserConsole(!1),o.initialize(n[0],t,l),o.on("error",function(e){T(!0)}))},{progressBar:p}),h.one("change",function(){t&&t.state&&"pending"===t.state()&&t.reject()})},k=function(e){var t;return r.isSupported()?(t=u.openUrl(e.hash,!1,function(t){if(d.remove(),t){var i=r.createPlayer({type:"flv",url:t});y(e),i.on(r.Events.ERROR,function(){i.destroy(),T(!0)}),i.attachMediaElement(n[0]),i.load(),z(i)}},{progressBar:p}),void h.one("change",function(){t&&t.state&&"pending"===t.state()&&t.reject()})):void(r=!1)},C=function(e){var t;t=u.openUrl(e.hash,!1,function(t){d.remove(),t&&(y(e,{src:t,cssClass:"video-js"}),n[0].src=t,s(n[0],{autoplay:!0}))},{progressBar:p}),h.one("change",function(){t&&t.state&&"pending"===t.state()&&t.reject()})},z=function(e){var t,i=n.data("hash");l&&(t=e.play()),t&&t["catch"]&&t["catch"](function(t){e.paused||n&&n.data("hash")===i&&T(!0)})},T=function(e){if(c&&clearTimeout(c),n&&n.parent().length){var i=n[0];m.off("viewchange.video"),o&&o.reset();try{i.pause(),n.empty(),i.src="",i.load()}catch(a){}n.remove(),n=null}e&&t.info.show()};h.on(t.evUpdate,function(o){var c,m,g=o.file,v=g.mime.toLowerCase(),b=f[v];f[v]&&t.dispInlineRegex.test(g.mime)&&(l=t.autoPlay(),d=e('
            '+u.i18n("nowLoading")+'
            '),p=e('
            ').appendTo(d),t.support.video[b]&&("m3u8"!==b||u.UA.Safari)?(o.stopImmediatePropagation(),d.appendTo(t.info.find(".elfinder-quicklook-info")),m=u.openUrl(g.hash,!1,function(e){d.remove(),e&&(y(g,{src:e}),z(n[0]))},{progressBar:p}),h.one("change",function(){m&&m.state&&"pending"===m.state()&&m.reject()})):i!==!1&&u.options.cdns.hls&&"m3u8"===b?(o.stopImmediatePropagation(),d.appendTo(t.info.find(".elfinder-quicklook-info")),i?w(g):(c=window.Hls,delete window.Hls,u.loadScript([u.options.cdns.hls],function(e){i=e||window.Hls||!1,window.Hls=c,i&&w(g)},{tryRequire:!0,error:function(){i=!1}}))):a!==!1&&u.options.cdns.dash&&"mpd"===b?(o.stopImmediatePropagation(),d.appendTo(t.info.find(".elfinder-quicklook-info")),a?x(g):u.loadScript([u.options.cdns.dash],function(){a=!!window.dashjs,a&&x(g)},{tryRequire:!0,error:function(){a=!1}})):r!==!1&&u.options.cdns.flv&&"flv"===b?(o.stopImmediatePropagation(),d.appendTo(t.info.find(".elfinder-quicklook-info")),r?k(g):(c=window.flvjs,delete window.flvjs,u.loadScript([u.options.cdns.flv],function(e){r=e||window.flvjs||!1,window.flvjs=c,r&&k(g)},{tryRequire:!0,error:function(){r=!1}}))):u.options.cdns.videojs&&(o.stopImmediatePropagation(),d.appendTo(t.info.find(".elfinder-quicklook-info")),s?C(g):u.loadScript([u.options.cdns.videojs+"/video.min.js"],function(e){s=e||window.videojs||!1,s&&C(g)},{tryRequire:!0,error:function(){s=!1}}).loadCss([u.options.cdns.videojs+"/video-js.min.css"])))}).one("change",T)},function(t){var n,i=t.preview,a=[],o=t.window,r=t.navbar;e.each(navigator.plugins,function(t,n){e.each(n,function(e,t){(0===t.type.indexOf("audio/")||0===t.type.indexOf("video/"))&&a.push(t.type)})}),a=t.fm.arrayFlip(a),i.on(t.evUpdate,function(s){var l,c,d,p,u=s.file,h=u.mime,f=function(){r.css("bottom",o.hasClass("elfinder-quicklook-fullscreen")?"50px":"")};a[u.mime]&&t.dispInlineRegex.test(u.mime)&&(s.stopImmediatePropagation(),d=e('
            '+fm.i18n("nowLoading")+'
            ').appendTo(t.info.find(".elfinder-quicklook-info")),p=e('
            ').appendTo(d),c=t.fm.openUrl(u.hash,!1,function(a){d.remove(),a&&((l=0===h.indexOf("video/"))&&t.hideinfo(),n=e('').appendTo(i),o.on("viewchange.embed",f),f())},{progressBar:p}),i.one("change",function(){c&&c.state&&"pending"===c.state()&&c.reject()}))}).one("change",function(){n&&n.parent().length&&(o.off("viewchange.embed"),n.remove(),n=null)})},function(t){var n=t.fm,i=n.arrayFlip(["application/zip","application/x-gzip","application/x-tar","application/x-bzip2"]),a=t.preview,o=n.returnBytes(t.options.unzipMaxSize||0),r=!(!n.options.cdns.zlibUnzip||!n.options.cdns.zlibGunzip),s=!!n.options.cdns.bzip2;window.Worker&&window.Uint8Array&&window.DataView&&a.on(t.evUpdate,function(l){var c=l.file,d="application/x-tar"===c.mime,p="application/x-bzip2"===c.mime,u="application/zip"===c.mime||"application/x-gzip"===c.mime;if(i[c.mime]&&(!o||c.size<=o)&&(d||p&&s||u&&r)){var h,f,m,g,v=function(){h=n.getContents(c.hash,"arraybuffer",{progressBar:g}).fail(function(){m.remove()}).done(function(e){var t=function(e){f&&f.terminate(),m.remove(),u?r=!1:p&&(s=!1),n.debug("error",e)};try{f=n.getWorker(),f.onmessage=function(e){f&&f.terminate(),m.remove(),!e.data||e.data.error?new Error(e.data&&e.data.error?e.data.error:""):b(e.data.files)},f.onerror=t,"application/x-tar"===c.mime?f.postMessage({scripts:[n.getWorkerUrl("quicklook.unzip.js")],data:{type:"tar",bin:e}}):"application/zip"===c.mime?f.postMessage({scripts:[n.options.cdns.zlibUnzip,n.getWorkerUrl("quicklook.unzip.js")],data:{type:"zip",bin:e}}):"application/x-gzip"===c.mime?f.postMessage({scripts:[n.options.cdns.zlibGunzip,n.getWorkerUrl("quicklook.unzip.js")],data:{type:"gzip",bin:e}}):"application/x-bzip2"===c.mime&&f.postMessage({scripts:[n.options.cdns.bzip2,n.getWorkerUrl("quicklook.unzip.js")],data:{type:"bzip2",bin:e}})}catch(i){t(i)}})},b=function(i){var o,r,s,l=0;i&&i.length&&(i=e.map(i,function(e){return n.decodeRawString(e)}),i.sort(),r=n.escape(i.join("\n").replace(/\{formatSize\((\d+)\)\}/g,function(e,t){return l+=parseInt(t),n.formatSize(t)})),o=""+n.escape(c.mime)+" ("+n.formatSize(c.size)+" / "+n.formatSize(l)+")
            ",s=e('
            '+o+'
            '+r+"
            ").on("touchstart",function(t){e(this)["scroll"+("ltr"===n.direction?"Right":"Left")]()>5&&(t.originalEvent._preventSwipeX=!0)}).appendTo(a),t.hideinfo()),m.remove()};l.stopImmediatePropagation(),m=e('
            '+n.i18n("nowLoading")+'
            ').appendTo(t.info.find(".elfinder-quicklook-info")),g=e('
            ').appendTo(m),a.one("change",function(){"pending"===h.state()&&h.reject(),f&&f.terminate(),m.remove()}),v()}})},function(t){var n,i=t.fm,a=i.arrayFlip(["application/x-rar"]),o=t.preview;window.DataView&&o.on(t.evUpdate,function(r){var s=r.file;if(a[s.mime]&&i.options.cdns.rar&&n!==!1){var l,c,d,p,u,h,f=function(a){if(p)return void l.remove();try{d=n({file:a,type:2,xhrHeaders:i.customHeaders,xhrFields:i.xhrFields},function(n){l.remove();var a,r,c=[];return p||n?void(n&&i.debug("error",n)):(e.each(d.entries,function(){c.push(this.path+(this.size?" ("+i.formatSize(this.size)+")":""))}),void(c.length&&(c=e.map(c,function(e){return i.decodeRawString(e)}),c.sort(),a=""+i.escape(s.mime)+" ("+i.formatSize(s.size)+")
            ",r=e('
            '+a+'
            '+i.escape(c.join("\n"))+"
            ").on("touchstart",function(t){e(this)["scroll"+("ltr"===i.direction?"Right":"Left")]()>5&&(t.originalEvent._preventSwipeX=!0)}).appendTo(o),t.hideinfo())))})}catch(r){l.remove()}},m=function(){n=!1,l.remove()};r.stopImmediatePropagation(),l=e('
            '+i.i18n("nowLoading")+'
            ').appendTo(t.info.find(".elfinder-quicklook-info")),c=e('
            ').appendTo(l),o.one("change",function(){d&&(d.abort=!0),l.remove(),p=!0}),h=i.openUrl(s.hash,"sameorigin",function(e){e&&(n?f(e):(window.RarArchive&&(u=window.RarArchive,delete window.RarArchive),i.loadScript([i.options.cdns.rar],function(){i.hasRequire?require(["rar"],function(t){n=t,f(e)},m):(n=window.RarArchive)?(u?window.RarArchive=u:delete window.RarArchive,f(e)):m()},{tryRequire:!0,error:m})))},{progressBar:c,temporary:!0}),o.one("change",function(){h&&h.state&&"pending"===h.state()&&h.reject()})}})},function(t){var n,i=t.fm,a=i.arrayFlip(t.options.sharecadMimes||[]),o=t.preview;t.window;t.options.sharecadMimes.length&&t.addIntegration({title:"ShareCAD.org CAD and 3D-Models viewer",link:"https://sharecad.org/DWGOnlinePlugin"}),o.on(t.evUpdate,function(r){var s=r.file;if(a[s.mime.toLowerCase()]&&i.option("onetimeUrl",s.hash)){var l,c,d;t.window;r.stopImmediatePropagation(),"1"==s.url&&(o.hide(),e('
            ").appendTo(t.info.find(".elfinder-quicklook-info")).on("click",function(){var n=e(this);n.html(''),i.request({data:{cmd:"url",target:s.hash},preventDefault:!0,progressBar:c}).always(function(){n.html("")}).done(function(e){var n=i.file(s.hash);s.url=n.url=e.url||"",s.url&&o.trigger({type:t.evUpdate,file:s,forceUpdate:!0})})})),""!==s.url&&"1"!=s.url&&(o.one("change",function(){l.remove(),n.off("load").remove(),n=null}).addClass("elfinder-overflow-auto"),l=e('
            '+i.i18n("nowLoading")+'
            ').appendTo(t.info.find(".elfinder-quicklook-info")),c=e('
            ').appendTo(l),d=i.convAbsUrl(i.url(s.hash)),n=e('').css("background-color","transparent").appendTo(o).on("load",function(){t.hideinfo(),l.remove(),t.preview.after(t.info),e(this).css("background-color","#fff").show()}).on("error",function(){l.remove(),t.preview.after(t.info)}).attr("src","//sharecad.org/cadframe/load?url="+encodeURIComponent(d)),t.info.after(t.preview))}})},function(t){var n,i,a,o,r,s=t.fm,l={"application/vnd.google-earth.kml+xml":!0,"application/vnd.google-earth.kmz":!0},c=t.preview;t.options.googleMapsApiKey&&(t.addIntegration({title:"Google Maps",link:"https://www.google.com/intl/"+s.lang.replace("_","-")+"/help/terms_maps.html"}),n=window.google&&google.maps,i=function(e,i,a){var r=t.options.googleMapsOpts.maps;s.forExternalUrl(e.hash,{progressBar:a}).done(function(e){if(e)try{new n.KmlLayer(e,Object.assign({map:new n.Map(i.get(0),r)},t.options.googleMapsOpts.kml)),t.hideinfo()}catch(a){o()}else o()})},a=window.gm_authFailure,o=function(){r=null},r="https://maps.googleapis.com/maps/api/js?key="+t.options.googleMapsApiKey,window.gm_authFailure=function(){o(),a&&a()},c.on(t.evUpdate,function(a){var o=a.file;if(r&&l[o.mime.toLowerCase()]){var d,p,u,h=(t.window,"1"==o.url&&!s.option("onetimeUrl",o.hash));a.stopImmediatePropagation(),d=e('
            '+s.i18n("nowLoading")+'
            ').appendTo(t.info.find(".elfinder-quicklook-info")),p=e('
            ').appendTo(d),h&&(c.hide(),e('
            ").appendTo(t.info.find(".elfinder-quicklook-info")).on("click",function(){var n=e(this);n.html(''),s.request({data:{cmd:"url",target:o.hash},preventDefault:!0,progressBar:p}).always(function(){d.remove(),n.html("")}).done(function(e){var n=s.file(o.hash);o.url=n.url=e.url||"",o.url&&c.trigger({type:t.evUpdate,file:o,forceUpdate:!0})})})),""===o.url||h||(u=e('
            ').appendTo(c),c.one("change",function(){u.remove(),u=null}),n?i(o,u,p):s.loadScript([r],function(){n=window.google&&google.maps,n&&i(o,u,p)}))}}))},function(t){var n,i,a=t.fm,o=Object.assign(a.arrayFlip(t.options.googleDocsMimes||[],"g"),a.arrayFlip(t.options.officeOnlineMimes||[],"m")),r=t.preview,s=(t.window,t.navbar),l={g:"docs.google.com/gview?embedded=true&url=",m:"view.officeapps.live.com/op/embed.aspx?wdStartOn=0&src="},c={g:"56px",m:"24px"},d={xls:5242880,xlsb:5242880,xlsx:5242880,xlsm:5242880,other:10485760};t.options.googleDocsMimes.length&&(i=!0,t.addIntegration({title:"Google Docs Viewer",link:"https://docs.google.com/"})),t.options.officeOnlineMimes.length&&(i=!0,t.addIntegration({title:"MS Online Doc Viewer",link:"https://products.office.com/office-online/view-office-documents-online"})),i&&r.on(t.evUpdate,function(i){var p,u,h=i.file;if(h.size<=26214400&&(p=o[h.mime])){var f,m,g,v=t.window,b=function(){s.css("bottom",v.hasClass("elfinder-quicklook-fullscreen")?c[p]:"")},y=a.mimeTypes[h.mime],w="1"==h.url&&!a.option("onetimeUrl",h.hash);"m"===p&&(d[y]&&h.size>d[y]||h.size>d.other)&&(p="g"),w&&(r.hide(),e('
            ").appendTo(t.info.find(".elfinder-quicklook-info")).on("click",function(){var n=e(this);n.html(''),a.request({data:{cmd:"url",target:h.hash},preventDefault:!0}).always(function(){n.html("")}).done(function(e){var n=a.file(h.hash);h.url=n.url=e.url||"",h.url&&r.trigger({type:t.evUpdate,file:h,forceUpdate:!0})})})),""===h.url||w||(i.stopImmediatePropagation(),r.one("change",function(){u&&u.status&&"pending"===u.status()&&u.reject(),v.off("viewchange.googledocs"),f.remove(),n.off("load").remove(),n=null}).addClass("elfinder-overflow-auto"),f=e('
            '+a.i18n("nowLoading")+'
            ').appendTo(t.info.find(".elfinder-quicklook-info")),m=e('
            ').appendTo(f),n=e('').css("background-color","transparent").appendTo(r),u=a.forExternalUrl(h.hash,{progressBar:m}).done(function(i){var a=function(){try{!n||n.attr("src")&&!n.get(0).contentWindow.document||(n.attr("src","https://"+l[p]+encodeURIComponent(i)),g=setTimeout(a,2e3))}catch(e){}};i?(h.ts&&(i+=(i.match(/\?/)?"&":"?")+"_t="+h.ts),n.on("load",function(){g&&clearTimeout(g),t.hideinfo(),f.remove(),t.preview.after(t.info),e(this).css("background-color","#fff").show()}).on("error",function(){g&&clearTimeout(g),f.remove(),t.preview.after(t.info)}),a()):(f.remove(),n.remove())}),v.on("viewchange.googledocs",b),b(),t.info.after(t.preview))}})},function(t){"use strict";var n,i,a=t.fm,o=t.preview,r=parseInt(t.options.textInitialLines)||150,s=parseInt(t.options.prettifyMaxLines)||500,l=function(){c=function(){return!1},i&&(window.PR=i),n=!1},c=function(e){a.options.cdns.prettify?(c=function(e){return setTimeout(function(){p(e)},100),"pending"},window.PR&&(i=window.PR),a.loadScript([a.options.cdns.prettify+(a.options.cdns.prettify.match(/\?/)?"&":"?")+"autorun=false"],function(t){n=t||window.PR,"object"==typeof n?(c=function(){return!0},i?window.PR=i:delete window.PR,d(e)):l()},{tryRequire:!0,error:l})):l()},d=function(e){e&&!e.hasClass("prettyprinted")&&(e.css("cursor","wait"),requestAnimationFrame(function(){n.prettyPrint&&n.prettyPrint(null,e.get(0)),e.css("cursor","")}))},p=function(e){var t=c(e);t===!0&&d(e)};o.on(t.evUpdate,function(i){var l,c,d,u,h=i.file;h.mime;a.mimeIsText(h.mime)&&(!t.options.getSizeMax||h.size<=t.options.getSizeMax)&&n!==!1&&(i.stopImmediatePropagation(),c=e('
            '+a.i18n("nowLoading")+'
            ').appendTo(t.info.find(".elfinder-quicklook-info")),d=e('
            ').appendTo(c),o.one("change",function(){"pending"==l.state()&&l.reject(),u&&u.remove()}),l=a.request({data:{cmd:"get",target:h.hash,conv:h.encoding||1,_t:h.ts},options:{type:"get",cache:!0},preventDefault:!0,progressBar:d}).done(function(n){var i,l,c,d,u,f=new RegExp("^(data:"+h.mime.replace(/([.+])/g,"\\$1")+";base64,)","i"),m=n.content;"string"==typeof m&&(t.hideinfo(),window.atob&&(u=m.match(f))&&(m=atob(m.substr(u[1].length))),d=m.match(/([^\r\n]{1,100}[\r\n]*)/g),l=d.length-r,l>10?i=d.splice(0,r).join(""):l=0,c=e('
            '), l&&c.append(e('

            '+a.i18n("linesLeft",a.toLocaleString(l))+"
            ").on("click",function(){var t=c.scrollTop();e(this).remove(),c.children("pre").removeClass("prettyprinted").text(m).scrollTop(t),d.length<=s&&p(c)})),c.children("pre").text(i||m),c.on("touchstart",function(t){e(this)["scroll"+("ltr"===a.direction?"Right":"Left")]()>5&&(t.originalEvent._preventSwipeX=!0)}).appendTo(o),n.toasts&&Array.isArray(n.toasts)&&e.each(n.toasts,function(){this.msg&&a.toast(this)}),p(c))}).always(function(n){var i,r,s;(i=a.getCommand("edit"))&&(s=[],n&&n.encoding&&s.push({value:n.encoding}),s.push({value:"UTF-8"}),r=i.getEncSelect(s),r.on("change",function(){h.encoding=r.val(),a.cache(h,"change"),o.trigger({type:t.evUpdate,file:h,forceUpdate:!0})}),u=e('
            ').append(r),t.window.append(u)),c.remove()}))})}],(i.prototype.commands.reload=function(){"use strict";var t=this,n=!1;this.alwaysEnabled=!0,this.updateOnSelect=!0,this.shortcuts=[{pattern:"ctrl+shift+r f5"}],this.getstate=function(){return 0},this.init=function(){this.fm.bind("search searchend",function(){n="search"==this.type})},this.fm.bind("contextmenu",function(){var n=t.fm;n.options.sync>=1e3&&(t.extra={icon:"accept",node:e("").attr({title:n.i18n("autoSync")}).on("click touchstart",function(t){"touchstart"===t.type&&t.originalEvent.touches.length>1||(t.stopPropagation(),t.preventDefault(),e(this).parent().toggleClass("ui-state-disabled",n.options.syncStart).parent().removeClass("ui-state-hover"),n.options.syncStart=!n.options.syncStart,n.autoSync(n.options.syncStart?null:"stop"))}).on("ready",function(){e(this).parent().toggleClass("ui-state-disabled",!n.options.syncStart).css("pointer-events","auto")})})}),this.exec=function(){var t=this.fm;if(!n){var i=t.sync(),a=setTimeout(function(){t.notify({type:"reload",cnt:1,hideCnt:!0}),i.always(function(){t.notify({type:"reload",cnt:-1})})},t.notifyDelay);return i.always(function(){clearTimeout(a),t.trigger("reload")})}e("div.elfinder-toolbar > div."+t.res("class","searchbtn")+" > span.ui-icon-search").click()}}).prototype={forceLoad:!0},i.prototype.commands.rename=function(){"use strict";this.fm.options.enableRootRename!==!1&&(this.alwaysEnabled=!0),this.syncTitleOnChange=!0;var t=this,n=t.fm,i=n.options.enableRootRename!==!1,a=function(t,a,o,r){var s,l=a?[o.hash].concat(a):[o.hash],c=l.length,d={};if(n.lockfiles({files:l}),n.isRoot(o)&&!o.netkey&&i){if((s=n.storage("rootNames"))||(s={}),""===r){if(!s[o.hash])return t&&t.reject(),void n.unlockfiles({files:l}).trigger("selectfiles",{files:l});o.name=o._name,o.i18=o._i18,delete s[o.hash],delete o._name,delete o._i18}else"undefined"==typeof o._name&&(o._name=o.name,o._i18=o.i18),o.name=s[o.hash]=r,delete o.i18;return n.storage("rootNames",s),d={changed:[o]},n.updateCache(d),n.change(d),t&&t.resolve(d),void n.unlockfiles({files:l}).trigger("selectfiles",{files:l})}d={cmd:"rename",name:r,target:o.hash},c>1&&(d.targets=a,r.match(/\*/)&&(d.q=r)),n.request({data:d,notify:{type:"rename",cnt:c},navigate:{}}).fail(function(e){var i=n.parseError(e);t&&t.reject(),i&&Array.isArray(i)&&"errRename"===i[0]||n.sync()}).done(function(i){var a;i.added&&i.added.length&&1===c&&(i.undo={cmd:"rename",callback:function(){return n.request({data:{cmd:"rename",target:i.added[0].hash,name:o.name},notify:{type:"undo",cnt:1}})}},i.redo={cmd:"rename",callback:function(){return n.request({data:{cmd:"rename",target:o.hash,name:r},notify:{type:"rename",cnt:1}})}}),t&&t.resolve(i),(a=n.cwd().hash)&&a!==o.hash||n.exec("open",e.map(i.added,function(e){return"directory"===e.mime?e.hash:null})[0])}).always(function(){n.unlockfiles({files:l}).trigger("selectfiles",{files:l})})},o=function(e,t){var i,a,o,r=t||n.selected(),s=n.splitFileExtention(e),l=n.file(r[0]),c=n.file(r[1]);return i=s[1]?"."+s[1]:"",s[1]&&"*"===s[0]?(a='"'+n.splitFileExtention(l.name)[0]+i+'", ',a+='"'+n.splitFileExtention(c.name)[0]+i+'"'):s[0].length>1&&("*"===s[0].substr(-1)?(o=s[0].substr(0,s[0].length-1),a='"'+o+l.name+'", ',a+='"'+o+c.name+'"'):"*"===s[0].substr(0,1)&&(o=s[0].substr(1),a='"'+n.splitFileExtention(l.name)[0]+o+i+'", ',a+='"'+n.splitFileExtention(c.name)[0]+o+i+'"')),a||(a='"'+s[0]+"1"+i+'", "'+s[0]+"2"+i+'"'),r.length>2&&(a+=" ..."),a},r=function(){var i,r=n.selected(),s='',l=function(t,i){return e('").prepend(t)},c=e(''),d=e(s),p=e(s),u=e(s),h=e(s),f=e("
            ").append(l(d,"plusNumber"),l(p,"asPrefix"),l(u,"asSuffix"),l(h,"changeExtention")),m=e('
            '),g=e('
            ').append(e('
            ').append(c),e('
            ').append(f),m),v={title:n.i18n("batchRename"),modal:!0,destroyOnClose:!0,width:Math.min(380,n.getUI().width()-20),buttons:{},open:function(){c.on("input",y).trigger("focus")}},b=function(){var e=c.val(),t=n.splitFileExtention(n.file(r[0]).name)[1];return(""!==e||d.is(":checked"))&&(p.is(":checked")?e+="*":u.is(":checked")?e="*"+e+"."+t:h.is(":checked")?e="*."+e:t&&(e+="."+t)),e},y=function(){var e=b();""!==e?m.html(n.i18n(["renameMultiple",r.length,o(e)])):m.empty()},w=f.find("input:radio").on("change",y);v.buttons[n.i18n("btnApply")]=function(){var e,t,o=b();""!==o&&(i.elfinderdialog("close"),t=r,e=n.file(t.shift()),a(void 0,t,e,o))},v.buttons[n.i18n("btnCancel")]=function(){i.elfinderdialog("close")},e.fn.checkboxradio?w.checkboxradio({create:function(e,t){this===d.get(0)&&d.prop("checked",!0).change()}}):f.buttonset({create:function(e,t){d.prop("checked",!0).change()}}),i=t.fmDialog(g,v)};this.noChangeDirOnRemovedCwd=!0,this.shortcuts=[{pattern:"f2"+("mac"==n.OS?" enter":"")},{pattern:"shift+f2",description:"batchRename",callback:function(){n.selected().length>1&&r()}}],this.getstate=function(a){var o,s,l,c,d,p,u=this.files(a),h=u.length;return h?(h>1&&u[0].phash&&(o=u[0].phash,s=n.splitFileExtention(u[0].name)[1].toLowerCase(),l=u[0].mime),1===h&&(p=n.isRoot(u[0])),d=1===h&&(i&&n.cookieEnabled&&p||!u[0].locked)||n.api>2.103&&h===e.grep(u,function(e){return c||e.locked||e.phash!==o||n.isRoot(e)||l!==e.mime&&s!==n.splitFileExtention(e.name)[1].toLowerCase()?(c&&(c=!0),!1):!0}).length?0:-1,!p&&0===d&&n.option("disabledFlip",u[0].hash).rename&&(d=-1),-1!==d&&h>1?t.extra={icon:"preference",node:e("").attr({title:n.i18n("batchRename")}).on("click touchstart",function(e){"touchstart"===e.type&&e.originalEvent.touches.length>1||(e.stopPropagation(),e.preventDefault(),n.getUI().trigger("click"),r())})}:delete t.extra,d):-1},this.exec=function(t,r){var s,l=(n.getUI("cwd"),t||(n.selected().length?n.selected():!1)||[n.cwd().hash]),c=l.length,d=n.file(l.shift()),p=".elfinder-cwd-filename",u=r||{},h=n.cwd().hash==d.hash,f="navbar"===u._currentType||"files"===u._currentType?u._currentType:h?"navbar":"files",m="files"!==f,g=n[m?"navHash2Elm":"cwdHash2Elm"](d.hash),v=!m&&"list"!=n.storage("view"),b=function(){requestAnimationFrame(function(){k&&k.trigger("blur")})},y=function(){A.is(":hidden")||A.elfinderoverlay("hide").off("click close",j),T.removeClass("ui-front").css("position","").off("unselect."+n.namespace,b),v?z&&z.css("max-height",""):m||T.css("width","").parent("td").css("overflow","")},w=e.Deferred().fail(function(e){var t=k.parent(),i=n.escape(d.i18||d.name);k.off(),v&&(i=i.replace(/([_.])/g,"​$1")),requestAnimationFrame(function(){m?k.replaceWith(i):t.length?(k.remove(),t.html(i)):g.find(p).html(i)}),e&&n.error(e)}).always(function(){y(),n.unbind("resize",O),n.enable()}),x=function(e){var t=k.val().trim(),i=(n.splitFileExtention(t),!0),r=function(){k.off(),y(),m?k.replaceWith(n.escape(t)):z.html(n.escape(t)),a(w,l,d,t)};if(A.is(":hidden")||T.css("z-index",""),""===t){if(!n.isRoot(d))return j();m?k.replaceWith(n.escape(d.name)):z.html(n.escape(d.name))}if(!S&&T.length){if(k.off("blur"),1===c&&t===d.name)return w.reject();if(n.options.validName&&n.options.validName.test)try{i=n.options.validName.test(t)}catch(e){i=!1}if("."===t||".."===t||!i)return S=!0,n.error("directory"===d.mime?"errInvDirname":"errInvName",{modal:!0,close:function(){setTimeout(C,120)}}),!1;if(1===c&&n.fileByName(t,d.phash))return S=!0,n.error(["errExists",t],{modal:!0,close:function(){setTimeout(C,120)}}),!1;1===c?r():(n.confirm({title:"cmdrename",text:["renameMultiple",c,o(t,[d.hash].concat(l))],accept:{label:"btnYes",callback:r},cancel:{label:"btnCancel",callback:function(){setTimeout(function(){S=!0,C()},120)}}}),setTimeout(function(){n.trigger("unselectfiles",{files:n.selected()}).trigger("selectfiles",{files:[d.hash].concat(l)})},120))}},k=e(v?"":'').on("keyup text",function(){v?(this.style.height="1px",this.style.height=this.scrollHeight+"px"):s&&(this.style.width=s+"px",this.scrollWidth>s&&(this.style.width=this.scrollWidth+10+"px"))}).on("keydown",function(t){t.stopImmediatePropagation(),t.keyCode==e.ui.keyCode.ESCAPE?w.reject():t.keyCode==e.ui.keyCode.ENTER&&(t.preventDefault(),k.trigger("blur"))}).on("mousedown click dblclick",function(e){e.stopPropagation(),"dblclick"===e.type&&e.preventDefault()}).on("blur",x).on("dragenter dragleave dragover drop",function(e){e.stopPropagation()}),C=function(){var e=n.splitFileExtention(k.val())[0];S||!n.UA.Mobile||n.UA.iOS||(A.on("click close",j).elfinderoverlay("show"),T.css("z-index",A.css("z-index")+1)),!n.enabled()&&n.enable(),S&&(S=!1,k.on("blur",x)),k.trigger("focus").trigger("select"),k[0].setSelectionRange&&k[0].setSelectionRange(0,e.length)},z=m?g.contents().filter(function(){return 3==this.nodeType&&e(this).parent().attr("id")===n.navHash2Id(d.hash)}):g.find(p),T=z.parent(),A=n.getUI("overlay"),j=function(e){A.is(":hidden")||T.css("z-index",""),S||(w.reject(),e&&(e.stopPropagation(),e.preventDefault()))},O=function(){g.trigger("scrolltoview",{blink:!1})},S=!1;return T.addClass("ui-front").css("position","relative").on("unselect."+n.namespace,b),n.bind("resize",O),m?z.replaceWith(k.val(d.name)):(v?z.css("max-height","none"):m||(s=T.width(),T.width(s-15).parent("td").css("overflow","visible")),z.empty().append(k.val(d.name))),c>1&&n.api<=2.103?w.reject():d&&z.length?!d.locked||n.isRoot(d)&&i?(n.one("select",function(){k.parent().length&&d&&-1===e.inArray(d.hash,n.selected())&&k.trigger("blur")}),k.trigger("keyup"),C(),w):w.reject(["errLocked",d.name]):w.reject("errCmdParams",this.title)},n.bind("select contextmenucreate closecontextmenu",function(e){var i,a=(e.data?e.data.selected||e.data.targets:null)||n.selected();a&&1===a.length&&(i=n.file(a[0]))&&n.isRoot(i)?t.title=n.i18n("kindAlias")+" ("+n.i18n("preference")+")":t.title=n.i18n("cmdrename"),"closecontextmenu"!==e.type?t.update(void 0,t.title):requestAnimationFrame(function(){t.update(void 0,t.title)})}).remove(function(t){var i;t.data&&t.data.removed&&(i=n.storage("rootNames"))&&(e.each(t.data.removed,function(e,t){i[t]&&delete i[t]}),n.storage("rootNames",i))})},i.prototype.commands.resize=function(){"use strict";var t=this.fm,n=0,i=function(t,n,i){var a=[{x:t/2,y:n/2},{x:-t/2,y:n/2},{x:-t/2,y:-n/2},{x:t/2,y:-n/2}],o=[],r={x:Number.MAX_VALUE,y:Number.MAX_VALUE},s={x:Number.MIN_VALUE,y:Number.MIN_VALUE};return e.each(a,function(e,t){o.push({x:t.x*Math.cos(i)-t.y*Math.sin(i),y:t.x*Math.sin(i)+t.y*Math.cos(i)})}),e.each(o,function(e,t){r.x=Math.min(r.x,t.x),r.y=Math.min(r.y,t.y),s.x=Math.max(s.x,t.x),s.y=Math.max(s.y,t.y)}),{width:s.x-r.x,height:s.y-r.y}};this.updateOnSelect=!1,this.getstate=function(){var e=t.selectedFiles();return 1==e.length&&e[0].read&&e[0].write&&-1!==e[0].mime.indexOf("image/")?0:-1},this.resizeRequest=function(n,i,a){var o=i||t.file(n.target),r=(o?o.tmb:null,t.isCommandEnabled("resize",n.target));if(r&&(!o||o&&o.read&&o.write&&-1!==o.mime.indexOf("image/")))return t.request({data:Object.assign(n,{cmd:"resize"}),notify:{type:"resize",cnt:1}}).fail(function(e){a&&a.reject(e)}).done(function(){n.quality&&t.storage("jpgQuality",n.quality===t.option("jpgQuality")?null:n.quality),a&&a.resolve()});var s;return s=o?-1===o.mime.indexOf("image/")?["errResize",o.name,"errUsupportType"]:["errResize",o.name,"errPerm"]:["errResize",n.target,"errPerm"],a?a.reject(s):t.error(s),e.Deferred().reject(s)},this.exec=function(a){var o,r,s,l,c=this,d=this.files(a),p=e.Deferred(),u=t.api>1,h=this.options,f=650,m=t.getUI(),g=e().controlgroup?"controlgroup":"buttonset",v="undefined"==typeof h.grid8px||"disable"!==h.grid8px,b=Array.isArray(h.presetSize)?h.presetSize:[],y="elfinder-dialog-active",w=t.res("class","editing"),x=function(a,o,r){var d,x,k,C,z,T="image/jpeg"===a.mime,A=e('
            '),j='',O='
            ',S='
            ',I=null,M=!1,F=function(){M=!0},E=function(){M&&(M=!1,D.trigger("change"))},D=e('
            ').on("focus","input[type=text],input[type=number]",function(){e(this).trigger("select")}).on("change",function(){I&&cancelAnimationFrame(I),I=requestAnimationFrame(function(){var e,n,a,o,r,s,c,d,p,u,h,f;at&&!M&&(a=at.data("canvas"))&&(e=D.children("div.elfinder-resize-control-panel:visible"),n=e.find("input.elfinder-resize-quality"),n.is(":visible")&&(o=at.data("ctx"),r=at.get(0),e.hasClass("elfinder-resize-uiresize")?(d=a.width=X.val(),p=a.height=G.val(),o.drawImage(r,0,0,d,p)):e.hasClass("elfinder-resize-uicrop")?(s=J.val(),c=Y.val(),d=Q.val(),p=Z.val(),a.width=d,a.height=p,o.drawImage(r,s,c,d,p,0,0,d,p)):(u=te.val(),h=te.val()*Math.PI/180,f=i(fe,me,h),d=a.width=f.width,p=a.height=f.height,o.save(),u%90!==0&&(o.fillStyle=de.val()||"#FFF",o.fillRect(0,0,d,p)),o.translate(d/2,p/2),o.rotate(h),o.drawImage(r,-r.width/2,-r.height/2,fe,me),o.restore()),a.toBlob(function(e){e&&(l=e.size,n.next("span").text(" ("+t.formatSize(e.size)+")"))},"image/jpeg",Math.max(Math.min(n.val(),100),1)/100)))})}).on("mouseup","input",function(t){e(t.target).trigger("change")}),U=e('
            ').on("touchmove",function(t){e(t.target).hasClass("touch-punch")&&(t.stopPropagation(),t.preventDefault())}),P=e('
            '+t.i18n("ntfloadimg")+"
            "),R=e('
            '),q=e('
            '),H=e('
            '),_=e('
            '),N=e('
            '),L=e("").attr("title",t.i18n("rotate-cw")).append(e('')),W=e("").attr("title",t.i18n("rotate-ccw")).append(e('')),B=e(""),$=e('").on("mouseenter mouseleave",function(t){e(this).toggleClass("ui-state-hover","mouseenter"==t.type)}).on("click",function(){d.exec("open",f).done(function(){d.one("opendone",function(){d.trigger("selectfiles",{files:e.map(t.added,function(e){return e.hash})})})})})):d.trigger("selectfiles",{files:e.map(t.added,function(e){return e.hash})}),d.toast({msg:d.i18n(["complete",d.i18n("cmdupload")]),extNode:n}))}}).progress(function(){w.notifyWith(this,Array.from(arguments))})},v=function(e){i.elfinderdialog("close"),h&&(e.target=h[0]),g(e)},b=function(){var t=m.hash,n=e.map(d.files(t),function(e){return"directory"===e.mime&&e.write?e:null});return n.length?e('
            ').on("click",function(t){t.stopPropagation(),t.preventDefault(),n=d.sortFiles(n);var a=e(this),o=(d.cwd(),i.closest("div.ui-dialog")),r=function(e,t){return{label:d.escape(e.i18||e.name),icon:t,remain:!1,callback:function(){var t=o.children(".ui-dialog-titlebar:first").find("span.elfinder-upload-target");h=[e.hash],t.html(" - "+d.escape(e.i18||e.name)),a.trigger("focus")},options:{className:h&&h.length&&e.hash===h[0]?"ui-state-active":"",iconClass:e.csscls||"",iconImg:e.icon||""}}},s=[r(m,"opendir"),"|"];e.each(n,function(e,t){s.push(r(t,"dir"))}),a.trigger("blur"),d.trigger("contextmenu",{raw:s,x:t.pageX||e(this).offset().left,y:t.pageY||e(this).offset().top,prevNode:o,fitHeight:!0})}).append(''):e()},y=function(n,i){var a=e('").on("click",function(){d.UA.IE&&setTimeout(function(){o.css("display","none").css("position","relative"),requestAnimationFrame(function(){o.css("display","").css("position","")})},100)}).on("change",function(){v({input:a.get(0),type:"files"})}).on("dragover",function(e){e.originalEvent.dataTransfer.dropEffect="copy"}),o=e("
            ").append(a).on("click",function(e){e.stopPropagation()});return e('
            '+d.i18n(i)+"
            ").append(o).on("click",function(e){e.stopPropagation(),e.preventDefault(),a.trigger("click")}).on("mouseenter mouseleave",function(n){e(this).toggleClass(t,"mouseenter"===n.type)})},w=e.Deferred();return r=function(t){t.stopPropagation(),t.preventDefault();var n,i,a=!1,o="",r=null,s="",l=null,c=t._target||null,p=t.dataTransfer||null,u="";if(p){p.types&&p.types.length?-1!==(n=e.inArray("application/x-moz-file",p.types))?u="file":-1!==(n=e.inArray("Files",p.types))&&(u="file"):p.items&&p.items.length&&p.items[0].kind&&(u=p.items[0].kind);try{if(r=p.getData("elfinderfrom"),r&&(s=window.location.href+d.cwd().hash,!c&&r===s||c===s))return void w.reject()}catch(t){}if("file"===u&&(p.items[n].getAsEntry||p.items[n].webkitGetAsEntry||p.items[n].getAsFile))a=p,o="data";else if("string"!==u&&p.files&&p.files.length&&-1===e.inArray("Text",p.types))a=p.files,o="files";else{try{(l=p.getData("text/html"))&&l.match(/<(?:img|a)/i)&&(a=[l],o="html")}catch(t){}a||((l=p.getData("text"))?(a=[l],o="text"):p&&p.files&&(u="file"))}}a?g({files:a,type:o,target:c,dropEvt:t}):(i=["errUploadNoFiles"],"file"===u&&i.push("errFolderUpload"),d.error(i),w.reject())},!h&&n?(n.input||n.files?(n.type="files",g(n)):n.dropEvt&&r(n.dropEvt),w):(s=function(t){var n,i=t.originalEvent||t,a=[],o=[];if(i.clipboardData){if(i.clipboardData.items&&i.clipboardData.items.length){o=i.clipboardData.items;for(var r=0;r
          ').append(y("multiple","selectForUpload")),!d.UA.Mobile&&function(e){return"undefined"!=typeof e.webkitdirectory||"undefined"!=typeof e.directory}(document.createElement("input"))&&i.append(y("multiple webkitdirectory directory","selectFolder")),m.dirs&&(m.hash===p||d.navHash2Elm(m.hash).hasClass("elfinder-subtree-loaded")?b().appendTo(i):(l=e('
          ').append('').appendTo(i), d.request({cmd:"tree",target:m.hash}).done(function(){d.one("treedone",function(){l.replaceWith(b()),c.elfinderdialog("tabstopsInit")})}).fail(function(){l.remove()}))),d.dragUpload?a=e('
          ').on("paste",function(e){s(e)}).on("mousedown click",function(){e(this).trigger("focus")}).on("focus",function(){this.innerHTML=""}).on("mouseover",function(){e(this).addClass(t)}).on("mouseout",function(){e(this).removeClass(t)}).on("dragenter",function(n){n.stopPropagation(),n.preventDefault(),e(this).addClass(t)}).on("dragleave",function(n){n.stopPropagation(),n.preventDefault(),e(this).removeClass(t)}).on("dragover",function(n){n.stopPropagation(),n.preventDefault(),n.originalEvent.dataTransfer.dropEffect="copy",e(this).addClass(t)}).on("drop",function(e){i.elfinderdialog("close"),h&&(e.originalEvent._target=h[0]),r(e.originalEvent)}).prependTo(i).after('
          '+d.i18n("or")+"
          ")[0]:o=e('
          '+d.i18n("dropFilesBrowser")+"
          ").on("paste drop",function(e){s(e)}).on("mousedown click",function(){e(this).trigger("focus")}).on("focus",function(){this.innerHTML=""}).on("dragenter mouseover",function(){e(this).addClass(t)}).on("dragleave mouseout",function(){e(this).removeClass(t)}).prependTo(i).after('
          '+d.i18n("or")+"
          ")[0],c=this.fmDialog(i,{title:this.title+''+(m?" - "+d.escape(m.i18||m.name):"")+"",modal:!0,resizable:!1,destroyOnClose:!0,propagationEvents:["mousemove","mouseup","click"],close:function(){var e=d.getUI("contextmenu");e.is(":visible")&&e.click()}}),w)}},i.prototype.commands.view=function(){"use strict";var t,n=this,i=this.fm;this.value=i.viewType,this.alwaysEnabled=!0,this.updateOnSelect=!1,this.options={ui:"viewbutton"},this.getstate=function(){return 0},this.extra={icon:"menu",node:e("").attr({title:i.i18n("viewtype")}).on("click touchstart",function(t){if(!("touchstart"===t.type&&t.originalEvent.touches.length>1)){var n=e(this);t.stopPropagation(),t.preventDefault(),i.trigger("contextmenu",{raw:getSubMenuRaw(),x:n.offset().left,y:n.offset().top})}})},this.exec=function(){var e=this,t="list"==this.value?"icons":"list";return i.storage("view",t),i.lazy(function(){i.viewchange(),e.update(void 0,t),this.resolve()})},i.bind("init",function(){t=function(){var e,t=i.getUI("cwd"),a=[],o=i.options.uiOptions.cwd.iconsView.sizeNames,r=i.options.uiOptions.cwd.iconsView.sizeMax;for(e=0;r>=e;e++)a.push({label:i.i18n(o[e]||"Size-"+e+" icons"),icon:"view",callback:function(e){return function(){t.trigger("iconpref",{size:e}),i.storage("iconsize",e),"list"===n.value&&n.exec()}}(e)});return a.push("|"),a.push({label:i.i18n("viewlist"),icon:"view-list",callback:function(){"list"!==n.value&&n.exec()}}),a}()}).bind("contextmenucreate",function(){n.extra={icon:"menu",node:e("").attr({title:i.i18n("cmdview")}).on("click touchstart",function(a){if(!("touchstart"===a.type&&a.originalEvent.touches.length>1)){var o,r,s=e(this);t.concat();for(o="list"===n.value?t.length-1:parseInt(i.storage("iconsize")||0),r=0;r * @author Danny Lin * @author TCC * @author Rick Jiang * @author Alex Lion (阿力�) * @version 2023-12-18 */ (function(root, factory) { if (typeof define === 'function' && define.amd) { define(['elfinder'], factory); } else if (typeof exports !== 'undefined') { module.exports = factory(require('elfinder')); } else { factory(root.elFinder); } }(this, function(elFinder) { elFinder.prototype.i18.zh_TW = { translator : 'Yuwei Chuang <ywchuang.tw@gmail.com>, Danny Lin <danny0838@gmail.com>, TCC <john987john987@gmail.com>, Rick Jiang <rick.jiang@aol.com>, Banny Tai <cssf998811@gmail.com>, Alex Lion (阿力�) <learnwithalex@gmail.com>', language : '�體中文', direction : 'ltr', dateFormat : 'Y/n/j H:i', // will show like: 2023/12/4 14:29 fancyDateFormat : '$1 H:i', // will show like: 今天 14:29 nonameDateFormat : 'ymd-His', // noname upload will show like: 231204-142932 messages : { /********************************** errors **********************************/ 'error' : '錯誤', 'errUnknown' : '未知的錯誤。', 'errUnknownCmd' : '未知的命令。', 'errJqui' : '無效的 jQuery 使用者介�組態。必須包� Selectable�draggable � droppable 元件。', 'errNode' : '建立 elFinder 需� DOM 元素。', 'errURL' : '無效的 elFinder 組態。URL �項尚未設定。', 'errAccess' : '拒絕存�。', 'errConnect' : '無法連線至後端。', 'errAbort' : '連線中止。', 'errTimeout' : '連線逾時。', 'errNotFound' : '找�到後端。', 'errResponse' : '無效的後端回應。', 'errConf' : '無效的後端組態。', 'errJSON' : 'PHP JSON 模組尚未安�。', 'errNoVolumes' : '沒有�供讀�的�碟。', 'errCmdParams' : '命令 $1 的無效�數。', 'errDataNotJSON' : '資料�是 JSON 格�。', 'errDataEmpty' : '資料為空白。', 'errCmdReq' : '後端�求需�命令�稱。', 'errOpen' : '無法開啟 [$1]。', 'errNotFolder' : '物件�是資料夾。', 'errNotFile' : '物件�是檔案。', 'errRead' : '無法讀� [$1]。', 'errWrite' : '無法寫入 [$1]。', 'errPerm' : '沒有使用權�。', 'errLocked' : '由於 [$1] 已鎖定,因此無法�新命��移動或移除。', 'errExists' : '�稱為 [$1] 的項目已存在。', 'errInvName' : '無效的檔案�稱。', 'errInvDirname' : '無效的資料夾�稱。', // from v2.1.24 added 12.4.2017 'errFolderNotFound' : '找�到資料夾。', 'errFileNotFound' : '找�到檔案。', 'errTrgFolderNotFound' : '找�到目標資料夾 [$1]。', 'errPopup' : '�覽器阻擋了彈出�訊�視窗。如需開啟檔案,請�許�覽器開啟彈出�訊�視窗。', 'errMkdir' : '無法建立資料夾 [$1]。', 'errMkfile' : '無法建立檔案 [$1]。', 'errRename' : '無法�新命� [$1]。', 'errCopyFrom' : '��許從�碟 $1 複製檔案。', 'errCopyTo' : '��許將檔案複製至�碟 $1。', 'errMkOutLink' : '無法建立�碟根目錄以外的連�。', // from v2.1 added 03.10.2015 'errUpload' : '上傳時發生錯誤。', // old name - errUploadCommon 'errUploadFile' : '無法上傳 [$1]。', // old name - errUpload 'errUploadNoFiles' : '找�到�上傳的檔案。', 'errUploadTotalSize' : '資料超��許的大�上�。', // old name - errMaxSize 'errUploadFileSize' : '檔案超��許的大�上�。', // old name - errFileMaxSize 'errUploadMime' : '��許的檔案類型。', 'errUploadTransfer' : '傳輸 [$1] 時發生錯誤。', 'errUploadTemp' : '無法產生用於上傳時所需的暫存檔案。', // from v2.1 added 26.09.2015 'errNotReplace' : '物件 [$1] 已存在於這個�置,且無法尤其他類型物件�代。', // new 'errReplace' : '無法�代 [$1]。', 'errSave' : '無法儲存 [$1]。', 'errCopy' : '無法複製 [$1]。', 'errMove' : '無法移動 [$1]。', 'errCopyInItself' : '無法將 [$1] 移動至�有�置。', 'errRm' : '無法移除 [$1]。', 'errTrash' : '無法移至回收桶。', // from v2.1.24 added 30.4.2017 'errRmSrc' : '無法移除來�檔案。', 'errExtract' : '無法解壓縮 [$1] 中的檔案。', 'errArchive' : '無法建立壓縮檔。', 'errArcType' : '�支�的壓縮檔格�。', 'errNoArchive' : '檔案�是壓縮檔,或是�支�的壓縮檔格�。', 'errCmdNoSupport' : '後端�支�這個命令。', 'errReplByChild' : '資料夾 [$1] 無法由它所包�的項目�代。', 'errArcSymlinks' : '基於安全性考�,拒絕解壓縮包�符號連�或�有�符�定�稱的檔案的壓縮檔。', // edited 24.06.2012 'errArcMaxSize' : '壓縮檔大�超�上�。', 'errResize' : '無法調整 [$1] 的大�。', 'errResizeDegree' : '無效的旋轉角度。', // added 7.3.2013 'errResizeRotate' : '無法旋轉圖片。', // added 7.3.2013 'errResizeSize' : '無效的圖片尺寸。', // added 7.3.2013 'errResizeNoChange' : '圖片尺寸沒有變更。', // added 7.3.2013 'errUsupportType' : '�支�的檔案類型。', 'errNotUTF8Content' : '檔案 [$1] �是 UTF-8 編碼且無法編輯。', // added 9.11.2011 'errNetMount' : '無法掛接 $1。', // added 17.04.2012 'errNetMountNoDriver' : '�支�的通訊�定。', // added 17.04.2012 'errNetMountFailed' : '無法掛接�碟。', // added 17.04.2012 'errNetMountHostReq' : '需�設定主機�稱。', // added 18.04.2012 'errSessionExpires' : '由於�使用狀態時間�長,因此目�的工作階段已到期。', 'errCreatingTempDir' : '無法建立暫存目錄: $1', 'errFtpDownloadFile' : '無法從 FTP 下載檔案: $1', 'errFtpUploadFile' : '無法上傳檔案至 FTP: $1', 'errFtpMkdir' : '無法�� FTP 建立�端目錄: $1', 'errArchiveExec' : '壓縮檔案時發生錯誤: $1', 'errExtractExec' : '解壓縮檔案時發生錯誤: $1', 'errNetUnMount' : '無法�載�碟。', // from v2.1 added 30.04.2012 'errConvUTF8' : '無法轉�為 UTF-8', // from v2.1 added 08.04.2014 'errFolderUpload' : '如需上傳資料夾,請使用新��覽器。', // from v2.1 added 26.6.2015 'errSearchTimeout' : '�尋「$1�逾時,因此僅列出部分�尋�果。', // from v2.1 added 12.1.2016 'errReauthRequire' : '必須�新驗證。', // from v2.1.10 added 24.3.2016 'errMaxTargets' : '���的項目數�上�為 $1。', // from v2.1.17 added 17.10.2016 'errRestore' : '無法從 [回收桶] 還原。無法識別還原目標�置。', // from v2.1.24 added 3.5.2017 'errEditorNotFound' : '找�到與這個檔案類型關�的編輯器。', // from v2.1.25 added 23.5.2017 'errServerError' : '伺�器端發生錯誤。', // from v2.1.25 added 16.6.2017 'errEmpty' : '無法清空資料夾 [$1]。', // from v2.1.25 added 22.6.2017 'moreErrors' : '有超� $1 個錯誤。', // from v2.1.44 added 9.12.2018 'errMaxMkdirs' : '最多�以�時建立 $1 個資料夾。', // from v2.1.58 added 20.6.2021 /******************************* commands names ********************************/ 'cmdarchive' : '建立壓縮檔', 'cmdback' : '返回', 'cmdcopy' : '複製', 'cmdcut' : '剪下', 'cmddownload' : '下載', 'cmdduplicate' : '�製', 'cmdedit' : '編輯檔案', 'cmdextract' : '將壓縮檔解壓縮', 'cmdforward' : '往�', 'cmdgetfile' : '��檔案', 'cmdhelp' : '關於這個軟體', 'cmdhome' : '根目錄', 'cmdinfo' : '�得項目資訊', 'cmdmkdir' : '新增資料夾', 'cmdmkdirin' : '移至新資料夾', // from v2.1.7 added 19.2.2016 'cmdmkfile' : '新增檔案', 'cmdopen' : '開啟', 'cmdpaste' : '貼上', 'cmdquicklook' : '�覽', 'cmdreload' : '�新載入', 'cmdrename' : '�新命�', 'cmdrm' : '刪除', 'cmdtrash' : '移至 [回收桶]', //from v2.1.24 added 29.4.2017 'cmdrestore' : '還原', //from v2.1.24 added 3.5.2017 'cmdsearch' : '尋找檔案', 'cmdup' : '�往上一層資料夾', 'cmdupload' : '上傳檔案', 'cmdview' : '檢視', 'cmdresize' : '調整大��旋轉', 'cmdsort' : '排�方�', 'cmdnetmount' : '掛接網路�碟', // added 18.04.2012 'cmdnetunmount': '�載', // from v2.1 added 30.04.2012 'cmdplaces' : '加入起始�置', // added 28.12.2014 'cmdchmod' : '變更權�', // from v2.1 added 20.6.2015 'cmdopendir' : '開啟資料夾', // from v2.1 added 13.1.2016 'cmdcolwidth' : '�設欄�寬度', // from v2.1.13 added 12.06.2016 'cmdfullscreen': '全螢幕', // from v2.1.15 added 03.08.2016 'cmdmove' : '移動', // from v2.1.15 added 21.08.2016 'cmdempty' : '清空資料夾', // from v2.1.25 added 22.06.2017 'cmdundo' : '復原', // from v2.1.27 added 31.07.2017 'cmdredo' : '�消復原', // from v2.1.27 added 31.07.2017 'cmdpreference': '�好設定', // from v2.1.27 added 03.08.2017 'cmdselectall' : '全部��', // from v2.1.28 added 15.08.2017 'cmdselectnone': '全部��', // from v2.1.28 added 15.08.2017 'cmdselectinvert': '����', // from v2.1.28 added 15.08.2017 'cmdopennew' : '在新視窗中開啟', // from v2.1.38 added 3.4.2018 'cmdhide' : '隱� (�好設定)', // from v2.1.41 added 24.7.2018 /*********************************** buttons ***********************************/ 'btnClose' : '關閉', 'btnSave' : '儲存', 'btnRm' : '移除', 'btnApply' : '套用', 'btnCancel' : '�消', 'btnNo' : '�', 'btnYes' : '是', 'btnDiscard': 'Discard changes', 'btnMount' : '掛接', // added 18.04.2012 'btnApprove': '�往 $1 並核准', // from v2.1 added 26.04.2012 'btnUnmount': '�載', // from v2.1 added 30.04.2012 'btnConv' : '轉�', // from v2.1 added 08.04.2014 'btnCwd' : '目��置', // from v2.1 added 22.5.2015 'btnVolume' : '�碟', // from v2.1 added 22.5.2015 'btnAll' : '全部', // from v2.1 added 22.5.2015 'btnMime' : 'MIME 類型', // from v2.1 added 22.5.2015 'btnFileName':'檔案�稱', // from v2.1 added 22.5.2015 'btnSaveClose': '儲存並關閉', // from v2.1 added 12.6.2015 'btnBackup' : '備份', // fromv2.1 added 28.11.2015 'btnRename' : '�新命�', // from v2.1.24 added 6.4.2017 'btnRenameAll' : '全部�新命�', // from v2.1.24 added 6.4.2017 'btnPrevious' : '上一� ($1/$2)', // from v2.1.24 added 11.5.2017 'btnNext' : '下一� ($1/$2)', // from v2.1.24 added 11.5.2017 'btnSaveAs' : '�存新檔', // from v2.1.25 added 24.5.2017 /******************************** notifications ********************************/ 'ntfopen' : '開啟資料夾', 'ntffile' : '開啟檔案', 'ntfreload' : '�新載入資料夾內容', 'ntfmkdir' : '正在建立資料夾', 'ntfmkfile' : '正在建立檔案', 'ntfrm' : '刪除項目', 'ntfcopy' : '複製項目', 'ntfmove' : '移動項目', 'ntfprepare' : '正在檢查�有項目', 'ntfrename' : '�新命�檔案', 'ntfupload' : '正在上傳檔案', 'ntfdownload' : '正在下載檔案', 'ntfsave' : '儲存檔案', 'ntfarchive' : '正在建立壓縮檔', 'ntfextract' : '正在從壓縮檔解壓縮檔案', 'ntfsearch' : '正在�尋檔案', 'ntfresize' : '正在調整圖片尺寸', 'ntfsmth' : '正在處�', 'ntfloadimg' : '正在載入圖片', 'ntfnetmount' : '正在掛接網路�碟', // added 18.04.2012 'ntfnetunmount': '正在�載網路�碟', // from v2.1 added 30.04.2012 'ntfdim' : '正在擷�圖片尺寸', // added 20.05.2013 'ntfreaddir' : '正在讀�資料夾資訊', // from v2.1 added 01.07.2013 'ntfurl' : '正在�得連�的網�', // from v2.1 added 11.03.2014 'ntfchmod' : '正在變更檔案權�', // from v2.1 added 20.6.2015 'ntfpreupload': '正在驗證上傳檔案�稱', // from v2.1 added 31.11.2015 'ntfzipdl' : '正在建立�供下載的檔案', // from v2.1.7 added 23.1.2016 'ntfparents' : '正在�得路徑資訊', // from v2.1.17 added 2.11.2016 'ntfchunkmerge': '正在處�上傳的檔案', // from v2.1.17 added 2.11.2016 'ntftrash' : '正在移至 [回收桶]', // from v2.1.24 added 2.5.2017 'ntfrestore' : '正在從 [回收桶] 還原', // from v2.1.24 added 3.5.2017 'ntfchkdir' : '正在檢查目標資料夾', // from v2.1.24 added 3.5.2017 'ntfundo' : '正在復原之�的�作', // from v2.1.27 added 31.07.2017 'ntfredo' : '正在�消復原之�的復原�作', // from v2.1.27 added 31.07.2017 'ntfchkcontent' : '正在檢查內容', // from v2.1.41 added 3.8.2018 /*********************************** volumes *********************************/ 'volume_Trash' : '回收桶', //from v2.1.24 added 29.4.2017 /************************************ dates **********************************/ 'dateUnknown' : '未知', 'Today' : '今天', 'Yesterday' : '昨天', 'msJan' : '1 月', 'msFeb' : '2 月', 'msMar' : '3 月', 'msApr' : '4 月', 'msMay' : '5 月', 'msJun' : '6 月', 'msJul' : '7 月', 'msAug' : '8 月', 'msSep' : '9 月', 'msOct' : '10 月', 'msNov' : '11 月', 'msDec' : '12 月', 'January' : '1 月', 'February' : '2 月', 'March' : '3 月', 'April' : '4 月', 'May' : '5 月', 'June' : '6 月', 'July' : '7 月', 'August' : '8 月', 'September' : '9 月', 'October' : '10 月', 'November' : '11 月', 'December' : '12 月', 'Sunday' : '星期日', 'Monday' : '星期一', 'Tuesday' : '星期二', 'Wednesday' : '星期三', 'Thursday' : '星期四', 'Friday' : '星期五', 'Saturday' : '星期六', 'Sun' : '週日', 'Mon' : '週一', 'Tue' : '週二', 'Wed' : '週三', 'Thu' : '週四', 'Fri' : '週五', 'Sat' : '週六', /******************************** sort variants ********************************/ 'sortname' : '�據�稱', 'sortkind' : '�據類型', 'sortsize' : '�據大�', 'sortdate' : '�據日期', 'sortFoldersFirst' : '先顯示資料夾', 'sortperm' : '�據權�', // from v2.1.13 added 13.06.2016 'sortmode' : '�據權�', // from v2.1.13 added 13.06.2016 'sortowner' : '�據�有者', // from v2.1.13 added 13.06.2016 'sortgroup' : '�據群組', // from v2.1.13 added 13.06.2016 'sortAlsoTreeview' : '�時套用於樹狀檢視', // from v2.1.15 added 01.08.2016 /********************************** new items **********************************/ 'untitled file.txt' : '新增檔案.txt', // added 10.11.2015 'untitled folder' : '新增資料夾', // added 10.11.2015 'Archive' : '新增壓縮檔', // from v2.1 added 10.11.2015 'untitled file' : '新增檔案.$1', // from v2.1.41 added 6.8.2018 'extentionfile' : '$1: 檔案', // from v2.1.41 added 6.8.2018 'extentiontype' : '$1: $2', // from v2.1.43 added 17.10.2018 /********************************** messages **********************************/ 'confirmReq' : '�作確��求', 'confirmRm' : '確定�永久移除項目?
          這項�作無法復原�', 'confirmRepl' : '是��以新的項目�代舊的項目?(如果項目包�資料夾,資料夾會�併。如需備份後��代,請點擊 [備份]。)', 'confirmRest' : '是��以 [回收桶] 內的項目�代目�項目?', // fromv2.1.24 added 5.5.2017 'confirmConvUTF8' : '�是 UTF-8 編碼
          轉�至 UTF-8 編碼?
          轉�後儲存會將內容變更為 UTF-8 編碼。', // from v2.1 added 08.04.2014 'confirmNonUTF8' : '無法�測這個檔案的字元編碼方�。這個檔案需�暫時轉�至 UTF-8 編碼以進行編輯。
          請��這個檔案的字元編碼方�。', // from v2.1.19 added 28.11.2016 'confirmNotSave' : '項目已修改。
          如果�儲存變更,便會失去之�的工作�果。', // from v2.1 added 15.7.2015 'confirmTrash' : '確定�將項目移至 [回收桶]?', //from v2.1.24 added 29.4.2017 'confirmMove' : '確定�將項目移至 [$1]?', //from v2.1.50 added 27.7.2019 'apllyAll' : '全部套用', 'name' : '�稱', 'size' : '大�', 'perms' : '權�', 'modify' : '修改日期', 'kind' : '類型', 'read' : '讀�', 'write' : '寫入', 'noaccess' : '沒有存�權�', 'and' : '�', 'unknown' : '未知', 'selectall' : '��全部項目', 'selectfiles' : '��項目', 'selectffile' : '��第一個項目', 'selectlfile' : '��最後一個項目', 'viewlist' : '清單檢視', 'viewicons' : '圖示檢視', 'viewSmall' : '�型圖示', // from v2.1.39 added 22.5.2018 'viewMedium' : '中型圖示', // from v2.1.39 added 22.5.2018 'viewLarge' : '大型圖示', // from v2.1.39 added 22.5.2018 'viewExtraLarge' : '超大型圖示', // from v2.1.39 added 22.5.2018 'places' : '起始�置', 'calc' : '計算', 'path' : '路徑', 'aliasfor' : '別�', 'locked' : '鎖定', 'dim' : '尺寸', 'files' : '檔案', 'folders' : '資料夾', 'items' : '項目', 'yes' : '是', 'no' : '�', 'link' : '連�', 'searcresult' : '�尋�果', 'selected' : '��的項目', 'about' : '關於', 'shortcuts' : '快速�', 'help' : '使用說明', 'webfm' : '網�檔案管�功能', 'ver' : '版本', 'protocolver' : '通訊�定版本', 'homepage' : '專案�稱', 'docs' : '線上說明', 'github' : '在 GitHub 上進行分支開發', 'twitter' : '在 Twitter 上跟隨我們', 'facebook' : '在 Facebook 加入我們', 'team' : '團隊', 'chiefdev' : '首席開發者', 'developer' : '開發者', 'contributor' : '�與者', 'maintainer' : '維護者', 'translator' : '本地化人員', 'icons' : '圖示', 'dontforget' : '請記得宣傳這個程�', 'shortcutsof' : '快速�已�用', 'dropFiles' : '將檔案拖放至這裡', 'or' : '或', 'selectForUpload' : '��檔案', 'moveFiles' : '移動項目', 'copyFiles' : '複製項目', 'restoreFiles' : '還原項目', // from v2.1.24 added 5.5.2017 'rmFromPlaces' : '從起始�置移除', 'aspectRatio' : '外觀比例', 'scale' : '縮放', 'width' : '寬度', 'height' : '高度', 'resize' : '調整大�', 'crop' : '�剪', 'rotate' : '旋轉', 'rotate-cw' : '順時�旋轉 90 度', 'rotate-ccw' : '逆時�旋轉 90 度', 'degree' : '°', 'netMountDialogTitle' : '掛接網路�碟', // added 18.04.2012 'protocol' : '通訊�定', // added 18.04.2012 'host' : '主機�稱', // added 18.04.2012 'port' : '通訊埠', // added 18.04.2012 'user' : '使用者', // added 18.04.2012 'pass' : '密碼', // added 18.04.2012 'confirmUnmount' : '確定��載 $1?', // from v2.1 added 30.04.2012 'dropFilesBrowser': '從�覽器拖放檔案或貼上檔案', // from v2.1 added 30.05.2012 'dropPasteFiles' : '拖放檔案�貼上網�或圖片至這裡', // from v2.1 added 07.04.2014 'encoding' : '編碼方�', // from v2.1 added 19.12.2014 'locale' : '地�語言', // from v2.1 added 19.12.2014 'searchTarget' : '目標: $1', // from v2.1 added 22.5.2015 'searchMime' : '�據輸入的 MIME 類型�尋', // from v2.1 added 22.5.2015 'owner' : '�有者', // from v2.1 added 20.6.2015 'group' : '群組', // from v2.1 added 20.6.2015 'other' : '其他', // from v2.1 added 20.6.2015 'execute' : '執行', // from v2.1 added 20.6.2015 'perm' : '權�', // from v2.1 added 20.6.2015 'mode' : '權�', // from v2.1 added 20.6.2015 'emptyFolder' : '資料夾為空', // from v2.1.6 added 30.12.2015 'emptyFolderDrop' : '資料夾為空\\A拖放以新增項目', // from v2.1.6 added 30.12.2015 'emptyFolderLTap' : '資料夾為空\\A長按以新增項目', // from v2.1.6 added 30.12.2015 'quality' : '�質', // from v2.1.6 added 5.1.2016 'autoSync' : '自動�步', // from v2.1.6 added 10.1.2016 'moveUp' : '上移', // from v2.1.6 added 18.1.2016 'getLink' : '�得網�連�', // from v2.1.7 added 9.2.2016 'selectedItems' : '��的項目 ($1)', // from v2.1.7 added 2.19.2016 'folderId' : '資料夾 ID', // from v2.1.10 added 3.25.2016 'offlineAccess' : '�許離線存�', // from v2.1.10 added 3.25.2016 'reAuth' : '�新驗證', // from v2.1.10 added 3.25.2016 'nowLoading' : '正在載入...', // from v2.1.12 added 4.26.2016 'openMulti' : '開啟多個檔案', // from v2.1.12 added 5.14.2016 'openMultiConfirm': '目�正在嘗試開啟 $1 個檔案。確定�在�覽器中開啟?', // from v2.1.12 added 5.14.2016 'emptySearch' : '�尋目標的�尋�果為空。', // from v2.1.12 added 5.16.2016 'editingFile' : '目�正在編輯檔案。', // from v2.1.13 added 6.3.2016 'hasSelected' : '已�� $1 個項目。', // from v2.1.13 added 6.3.2016 'hasClipboard' : '剪貼簿中有 $1 個項目。', // from v2.1.13 added 6.3.2016 'incSearchOnly' : '僅能在目�的檢視方�中進行累加�尋。', // from v2.1.13 added 6.30.2016 'reinstate' : '還原', // from v2.1.15 added 3.8.2016 'complete' : '$1已完�', // from v2.1.15 added 21.8.2016 'contextmenu' : '�作功能表', // from v2.1.15 added 9.9.2016 'pageTurning' : '��', // from v2.1.15 added 10.9.2016 'volumeRoots' : '�碟根目錄', // from v2.1.16 added 16.9.2016 'reset' : '�設', // from v2.1.16 added 1.10.2016 'bgcolor' : '背景色彩', // from v2.1.16 added 1.10.2016 'colorPicker' : '色彩�擇器', // from v2.1.16 added 1.10.2016 '8pxgrid' : '8px 格狀排列', // from v2.1.16 added 4.10.2016 'enabled' : '啟用', // from v2.1.16 added 4.10.2016 'disabled' : '�用', // from v2.1.16 added 4.10.2016 'emptyIncSearch' : '在目�的檢視方�中�尋�果為空。\\A按下 Enter 以擴大�尋目標。', // from v2.1.16 added 5.10.2016 'emptyLetSearch' : '在目�的檢視方�中首個字��尋的�尋�果為空。', // from v2.1.23 added 24.3.2017 'textLabel' : '文字標籤', // from v2.1.17 added 13.10.2016 'minsLeft' : '剩下 $1 分�', // from v2.1.17 added 13.11.2016 'openAsEncoding' : '以��的編碼方��新開啟', // from v2.1.19 added 2.12.2016 'saveAsEncoding' : '以��的編碼方�儲存', // from v2.1.19 added 2.12.2016 'selectFolder' : '��資料夾', // from v2.1.20 added 13.12.2016 'firstLetterSearch': '首個字��尋', // from v2.1.23 added 24.3.2017 'presets' : '�設集', // from v2.1.25 added 26.5.2017 'tooManyToTrash' : '由於�移除的檔案數�超�上�,因此無法移至 [回收桶]。', // from v2.1.25 added 9.6.2017 'TextArea' : '文字�域', // from v2.1.25 added 14.6.2017 'folderToEmpty' : '清空資料夾 [$1]。', // from v2.1.25 added 22.6.2017 'filderIsEmpty' : '資料夾 $1 中沒有任何項目。', // from v2.1.25 added 22.6.2017 'preference' : '�好設定', // from v2.1.26 added 28.6.2017 'language' : '介�語言', // from v2.1.26 added 28.6.2017 'clearBrowserData': '�始化這個�覽器中已儲存的設定', // from v2.1.26 added 28.6.2017 'toolbarPref' : '工具列設定', // from v2.1.27 added 2.8.2017 'charsLeft' : '... 剩下 $1 個字元。', // from v2.1.29 added 30.8.2017 'linesLeft' : '... 剩下 $1 行。', // from v2.1.52 added 16.1.2020 'sum' : '總計', // from v2.1.29 added 28.9.2017 'roughFileSize' : '檔案概略大�', // from v2.1.30 added 2.11.2017 'autoFocusDialog' : '�焦於游標暫留�話方塊的元素', // from v2.1.30 added 2.11.2017 'select' : '��', // from v2.1.30 added 23.11.2017 'selectAction' : '��檔案後的動作', // from v2.1.30 added 23.11.2017 'useStoredEditor' : '使用上次的編輯器開啟', // from v2.1.30 added 23.11.2017 'selectinvert' : '����', // from v2.1.30 added 25.11.2017 'renameMultiple' : '確定�將��的項目 $1 �新命�為 $2?
          這項æ“�作無法復原ï¼�', // from v2.1.31 added 4.12.2017 'batchRename' : '批次é‡�新命å��', // from v2.1.31 added 8.12.2017 'plusNumber' : '增加數值', // from v2.1.31 added 8.12.2017 'asPrefix' : '新增å‰�置詞', // from v2.1.31 added 8.12.2017 'asSuffix' : '新增後置詞', // from v2.1.31 added 8.12.2017 'changeExtention' : '變更副檔å��', // from v2.1.31 added 8.12.2017 'columnPref' : '欄ä½�設定 (清單檢視)', // from v2.1.32 added 6.2.2018 'reflectOnImmediate' : '全部變更會立å�³å½±éŸ¿å£“縮檔。', // from v2.1.33 added 2.3.2018 'reflectOnUnmount' : '在å�¸è¼‰é€™å€‹ç£�碟å‰�,任何變更å�‡ä¸�會生效。', // from v2.1.33 added 2.3.2018 'unmountChildren' : '掛接在這個ç£�碟的下列ç£�碟無法å�¸è¼‰ã€‚確定è¦�å�¸è¼‰é€™å€‹ç£�碟?', // from v2.1.33 added 5.3.2018 'selectionInfo' : 'é�¸å�–項目資訊', // from v2.1.33 added 7.3.2018 'hashChecker' : '用於顯示檔案雜湊值的演算法', // from v2.1.33 added 10.3.2018 'infoItems' : '資訊項目 (用於é�¸å�–項目的資訊é�¢æ�¿)', // from v2.1.38 added 28.3.2018 'pressAgainToExit': 'å†�按一下以離開。', // from v2.1.38 added 1.4.2018 'toolbar' : '工具列', // from v2.1.38 added 4.4.2018 'workspace' : '工作å�€', // from v2.1.38 added 4.4.2018 'dialog' : 'å°�話方塊', // from v2.1.38 added 4.4.2018 'all' : '全部', // from v2.1.38 added 4.4.2018 'iconSize' : '圖示尺寸 (圖示檢視)', // from v2.1.39 added 7.5.2018 'editorMaximized' : '開啟最大化編輯器視窗', // from v2.1.40 added 30.6.2018 'editorConvNoApi' : '由於轉æ�› API ç›®å‰�無法使用,請在網站上進行轉æ�›ã€‚', //from v2.1.40 added 8.7.2018 'editorConvNeedUpload' : '完æˆ�轉æ�›å¾Œï¼Œå¿…須使用項目的網å�€ä¸Šå‚³æˆ–下載檔案以儲存轉æ�›å¾Œçš„æª”案。', //from v2.1.40 added 8.7.2018 'convertOn' : '在 $1 的網站上轉æ�›', // from v2.1.40 added 10.7.2018 'integrations' : 'æ•´å�ˆé …ç›®', // from v2.1.40 added 11.7.2018 'integrationWith' : '這裡會列出 elFinder æ•´å�ˆçš„外部æœ�務。請在使用 elFinder å‰�先查看這些整å�ˆé …目的使用æ¢�款ã€�éš±ç§�權政策等內容。', // from v2.1.40 added 11.7.2018 'showHidden' : '顯示隱è—�é …ç›®', // from v2.1.41 added 24.7.2018 'hideHidden' : 'éš±è—�éš±è—�é …ç›®', // from v2.1.41 added 24.7.2018 'toggleHidden' : '顯示/éš±è—�éš±è—�é …ç›®', // from v2.1.41 added 24.7.2018 'makefileTypes' : '新增檔案å�¯ä»¥æ–°å¢žçš„æª”案類型', // from v2.1.41 added 7.8.2018 'typeOfTextfile' : '文字檔案類型', // from v2.1.41 added 7.8.2018 'add' : '新增', // from v2.1.41 added 7.8.2018 'theme' : '佈景主題', // from v2.1.43 added 19.10.2018 'default' : 'é �設', // from v2.1.43 added 19.10.2018 'description' : '內容說明', // from v2.1.43 added 19.10.2018 'website' : '網站', // from v2.1.43 added 19.10.2018 'author' : '開發者', // from v2.1.43 added 19.10.2018 'email' : 'é›»å­�郵件地å�€', // from v2.1.43 added 19.10.2018 'license' : '授權方å¼�', // from v2.1.43 added 19.10.2018 'exportToSave' : '這個項目無法儲存。為é�¿å…�é�ºå¤±ç·¨è¼¯è³‡æ–™ï¼Œå¿…須將資料匯出至個人è£�置。', // from v2.1.44 added 1.12.2018 'dblclickToSelect': '按兩下檔案以é�¸å�–。', // from v2.1.47 added 22.1.2019 'useFullscreen' : '使用全螢幕模å¼�', // from v2.1.47 added 19.2.2019 /********************************** mimetypes **********************************/ 'kindUnknown' : '未知', 'kindRoot' : 'ç£�碟根目錄', // from v2.1.16 added 16.10.2016 'kindFolder' : '資料夾', 'kindSelects' : 'Selections', // from v2.1.29 added 29.8.2017 'kindAlias' : '別å��', 'kindAliasBroken' : '中斷的別å��', // applications 'kindApp' : '應用程å¼�', 'kindPostscript' : 'PostScript 文件', 'kindMsOffice' : 'Microsoft Office 文件', 'kindMsWord' : 'Microsoft Word 文件', 'kindMsExcel' : 'Microsoft Excel 試算表', 'kindMsPP' : 'Microsoft Powerpoint ç°¡å ±', 'kindOO' : 'Open Office 文件', 'kindAppFlash' : 'Flash 應用程å¼�', 'kindPDF' : 'PDF 文件', 'kindTorrent' : 'Bittorrent 檔案', 'kind7z' : '7z 壓縮檔', 'kindTAR' : 'TAR 壓縮檔', 'kindGZIP' : 'GZIP 壓縮檔', 'kindBZIP' : 'BZIP 壓縮檔', 'kindXZ' : 'XZ 壓縮檔', 'kindZIP' : 'ZIP 壓縮檔', 'kindRAR' : 'RAR 壓縮檔', 'kindJAR' : 'Java JAR 檔案', 'kindTTF' : 'True Type å­—åž‹', 'kindOTF' : 'Open Type å­—åž‹', 'kindRPM' : 'RPM å°�è£�檔案', // fonts 'kindFont' : 'å­—åž‹', 'kindSFNT' : 'SFNT å­—åž‹', 'kindEOT' : 'Embedded Open Type å­—åž‹', 'kindWOFF' : 'Web Open Font Format å­—åž‹', 'kindWOFF2' : 'Web Open Font Format 2 å­—åž‹', // texts 'kindText' : '文字檔案', 'kindTextPlain' : '純文字', 'kindPHP' : 'PHP 原始程å¼�碼', 'kindCSS' : '階層å¼�樣å¼�表 (CSS)', 'kindHTML' : 'HTML 文件', 'kindJS' : 'JavaScript 原始程å¼�碼', 'kindRTF' : 'RTF æ ¼å¼�', 'kindC' : 'C 原始程å¼�碼', 'kindCHeader' : 'C 標頭原始程å¼�碼', 'kindCPP' : 'C++ 原始程å¼�碼', 'kindCPPHeader' : 'C++ 標頭原始程å¼�碼', 'kindShell' : 'Unix 殼層指令碼', 'kindPython' : 'Python 原始程å¼�碼', 'kindJava' : 'Java 原始程å¼�碼', 'kindRuby' : 'Ruby 原始程å¼�碼', 'kindPerl' : 'Perl 指令碼', 'kindSQL' : 'SQL 原始程å¼�碼', 'kindXML' : 'XML 文件', 'kindAWK' : 'AWK 原始程å¼�碼', 'kindCSV' : '逗點分隔值 (CSV)', 'kindDOCBOOK' : 'Docbook XML 文件', 'kindMarkdown' : 'Markdown 文字', // added 20.7.2015 // images 'kindImage' : '圖片', 'kindBMP' : 'BMP 圖片', 'kindJPEG' : 'JPEG 圖片', 'kindGIF' : 'GIF 圖片', 'kindPNG' : 'PNG 圖片', 'kindTIFF' : 'TIFF 圖片', 'kindTGA' : 'TGA 圖片', 'kindPSD' : 'Adobe Photoshop 圖片', 'kindXBITMAP' : 'X bitmap 圖片', 'kindPXM' : 'Pixelmator 圖片', // media 'kindAudio' : '音訊', 'kindAudioMPEG' : 'MPEG 音訊', 'kindAudioMPEG4' : 'MPEG-4 音訊', 'kindAudioMIDI' : 'MIDI 音訊', 'kindAudioOGG' : 'Ogg Vorbis 音訊', 'kindAudioWAV' : 'WAV 音訊', 'AudioPlaylist' : 'MP3 播放清單', 'kindVideo' : '視訊', 'kindVideoDV' : 'DV 影片', 'kindVideoMPEG' : 'MPEG 影片', 'kindVideoMPEG4' : 'MPEG-4 影片', 'kindVideoAVI' : 'AVI 影片', 'kindVideoMOV' : 'Quick Time 影片', 'kindVideoWM' : 'Windows Media 影片', 'kindVideoFlash' : 'Flash 影片', 'kindVideoMKV' : 'Matroska 影片', 'kindVideoOGG' : 'Ogg 影片' } }; })); PK!i:,w§‡§‡@file-manager-advanced/application/library/js/i18n/elfinder.pl.jsnu„[µü¤/** * Polskie tÅ‚umaczenie * @author Marcin MikoÅ‚ajczyk * @author BogusÅ‚aw ZiÄ™ba * @version 2020-03-29 */ (function(root, factory) { if (typeof define === 'function' && define.amd) { define(['elfinder'], factory); } else if (typeof exports !== 'undefined') { module.exports = factory(require('elfinder')); } else { factory(root.elFinder); } }(this, function(elFinder) { elFinder.prototype.i18.pl = { translator : 'Marcin MikoÅ‚ajczyk <marcin@pjwstk.edu.pl>, BogusÅ‚aw ZiÄ™ba <bobi@poczta.fm>, BogusÅ‚aw ZiÄ™ba <bobi@poczta.fm>', language : 'Polski', direction : 'ltr', dateFormat : 'd.m.Y H:i', // will show like: 29.03.2020 06:58 fancyDateFormat : '$1 H:i', // will show like: Dzisiaj 06:58 nonameDateFormat : 'ymd-His', // noname upload will show like: 200329-065813 messages : { /********************************** errors **********************************/ 'error' : 'Błąd', 'errUnknown' : 'Nieznany błąd.', 'errUnknownCmd' : 'Nieznane polecenie.', 'errJqui' : 'Niepoprawna konfiguracja jQuery UI. MuszÄ… być zawarte komponenty selectable, draggable i droppable.', 'errNode' : 'elFinder wymaga utworzenia obiektu DOM.', 'errURL' : 'Niepoprawna konfiguracja elFinder! Pole URL nie jest ustawione.', 'errAccess' : 'DostÄ™p zabroniony.', 'errConnect' : 'Błąd połączenia z zapleczem.', 'errAbort' : 'Połączenie zostaÅ‚o przerwane.', 'errTimeout' : 'UpÅ‚ynÄ…Å‚ czas oczekiwania na połączenie.', 'errNotFound' : 'Zaplecze nie zostaÅ‚o znalezione.', 'errResponse' : 'NieprawidÅ‚owa odpowiedź zaplecza.', 'errConf' : 'Niepoprawna konfiguracja zaplecza.', 'errJSON' : 'ModuÅ‚ PHP JSON nie jest zainstalowany.', 'errNoVolumes' : 'Brak możliwoÅ›ci odczytu katalogów.', 'errCmdParams' : 'NieprawidÅ‚owe parametry dla polecenia "$1".', 'errDataNotJSON' : 'Dane nie sÄ… JSON.', 'errDataEmpty' : 'Dane sÄ… puste.', 'errCmdReq' : 'Zaplecze wymaga podania nazwy polecenia.', 'errOpen' : 'Nie można otworzyć "$1".', 'errNotFolder' : 'Obiekt nie jest katalogiem.', 'errNotFile' : 'Obiekt nie jest plikiem.', 'errRead' : 'Nie można odczytać "$1".', 'errWrite' : 'Nie można zapisać do "$1".', 'errPerm' : 'Brak uprawnieÅ„.', 'errLocked' : '"$1" jest zablokowany i nie może zostać zmieniony, przeniesiony lub usuniÄ™ty.', 'errExists' : 'Plik "$1" już istnieje.', 'errInvName' : 'NieprawidÅ‚owa nazwa pliku.', 'errInvDirname' : 'NieprawidÅ‚owa nazwa folderu.', // from v2.1.24 added 12.4.2017 'errFolderNotFound' : 'Nie znaleziono folderu.', 'errFileNotFound' : 'Plik nie zostaÅ‚ znaleziony.', 'errTrgFolderNotFound' : 'Katalog docelowy "$1" nie zostaÅ‚ znaleziony.', 'errPopup' : 'PrzeglÄ…darka zablokowaÅ‚a otwarcie nowego okna. Aby otworzyć plik, zmieÅ„ ustawienia przeglÄ…darki.', 'errMkdir' : 'Nie można utworzyć katalogu "$1".', 'errMkfile' : 'Nie można utworzyć pliku "$1".', 'errRename' : 'Nie można zmienić nazwy "$1".', 'errCopyFrom' : 'Kopiowanie z katalogu "$1" nie jest możliwe.', 'errCopyTo' : 'Kopiowanie do katalogu "$1" nie jest możliwe.', 'errMkOutLink' : 'Nie można utworzyć link do zewnÄ™trznego katalogu głównego.', // from v2.1 added 03.10.2015 'errUpload' : 'Błąd wysyÅ‚ania.', // old name - errUploadCommon 'errUploadFile' : 'Nie można wysÅ‚ać "$1".', // old name - errUpload 'errUploadNoFiles' : 'Nie znaleziono plików do wysÅ‚ania.', 'errUploadTotalSize' : 'Przekroczono dopuszczalny rozmiar wysyÅ‚anych plików.', // old name - errMaxSize 'errUploadFileSize' : 'Plik przekracza dopuszczalny rozmiar.', // old name - errFileMaxSize 'errUploadMime' : 'Niedozwolony typ pliku.', 'errUploadTransfer' : 'Błąd przesyÅ‚ania "$1".', 'errUploadTemp' : 'Nie można wykonać tymczasowego pliku do przesÅ‚ania.', // from v2.1 added 26.09.2015 'errNotReplace' : 'Obiekt "$1" istnieje już w tej lokalizacji i nie może być zastÄ…piony przez inny typ obiektu.', // new 'errReplace' : 'Nie można zastÄ…pić "$1".', 'errSave' : 'Nie można zapisać "$1".', 'errCopy' : 'Nie można skopiować "$1".', 'errMove' : 'Nie można przenieść "$1".', 'errCopyInItself' : 'Nie można skopiować "$1" w miejsce jego samego.', 'errRm' : 'Nie można usunąć "$1".', 'errTrash' : 'Nie można do kosza.', // from v2.1.24 added 30.4.2017 'errRmSrc' : 'Nie należy usunąć pliku(s) źródÅ‚owy.', 'errExtract' : 'Nie można wypakować plików z "$1".', 'errArchive' : 'Nie można utworzyć archiwum.', 'errArcType' : 'NieobsÅ‚ugiwany typ archiwum.', 'errNoArchive' : 'Plik nie jest prawidÅ‚owym typem archiwum.', 'errCmdNoSupport' : 'Zaplecze nie obsÅ‚uguje tego polecenia.', 'errReplByChild' : 'Nie można zastÄ…pić katalogu "$1" elementem w nim zawartym', 'errArcSymlinks' : 'Ze wzglÄ™dów bezpieczeÅ„stwa rozpakowywanie archiwów zawierajÄ…cych dowiÄ…zania symboliczne (symlinks) jest niedozwolone.', // edited 24.06.2012 'errArcMaxSize' : 'Archiwum przekracza maksymalny dopuszczalny rozmiar.', 'errResize' : 'Nie można zmienić rozmiaru "$1".', 'errResizeDegree' : 'NieprawidÅ‚owy stopieÅ„ obracania.', // added 7.3.2013 'errResizeRotate' : 'Nie można obrócić obrazu.', // added 7.3.2013 'errResizeSize' : 'NieprawidÅ‚owy rozmiar obrazu.', // added 7.3.2013 'errResizeNoChange' : 'Nie zmieniono rozmiaru obrazu.', // added 7.3.2013 'errUsupportType' : 'NieobsÅ‚ugiwany typ pliku.', 'errNotUTF8Content' : 'Plik "$1" nie jest UTF-8 i nie może być edytowany.', // added 9.11.2011 'errNetMount' : 'Nie można zamontować "$1".', // added 17.04.2012 'errNetMountNoDriver' : 'NieobsÅ‚ugiwany protokół.', // added 17.04.2012 'errNetMountFailed' : 'Montowanie nie powiodÅ‚o siÄ™.', // added 17.04.2012 'errNetMountHostReq' : 'Host wymagany.', // added 18.04.2012 'errSessionExpires' : 'Twoja sesja wygasÅ‚a z powodu nieaktywnoÅ›ci.', 'errCreatingTempDir' : 'Nie można utworzyć katalogu tymczasowego: "$1"', 'errFtpDownloadFile' : 'Nie można pobrać pliku z FTP: "$1"', 'errFtpUploadFile' : 'Nie można przesÅ‚ać pliku na serwer FTP: "$1"', 'errFtpMkdir' : 'Nie można utworzyć zdalnego katalogu FTP: "$1"', 'errArchiveExec' : 'Błąd podczas archiwizacji plików: "$1"', 'errExtractExec' : 'Błąd podczas wyodrÄ™bniania plików: "$1"', 'errNetUnMount' : 'Nie można odmontować', // from v2.1 added 30.04.2012 'errConvUTF8' : 'Nie wymienialne na UTF-8', // from v2.1 added 08.04.2014 'errFolderUpload' : 'Wypróbuj Google Chrome, jeÅ›li chcesz przesÅ‚ać katalog.', // from v2.1 added 26.6.2015 'errSearchTimeout' : 'UpÅ‚ynÄ…Å‚ limit czasu podczas wyszukiwania "$1". Wynik wyszukiwania jest częściowy.', // from v2.1 added 12.1.2016 'errReauthRequire' : 'Wymagana jest ponowna autoryzacja.', // from v2.1.10 added 24.3.2016 'errMaxTargets' : 'Maks. liczba elementów do wyboru to $1.', // from v2.1.17 added 17.10.2016 'errRestore' : 'Nie można przywrócić z kosza. Nie można zidentyfikować przywrócić docelowego.', // from v2.1.24 added 3.5.2017 'errEditorNotFound' : 'Nie znaleziono edytora tego typu pliku.', // from v2.1.25 added 23.5.2017 'errServerError' : 'WystÄ…piÅ‚ błąd po stronie serwera .', // from v2.1.25 added 16.6.2017 'errEmpty' : 'Nie można do pustego folderu "$1".', // from v2.1.25 added 22.6.2017 'moreErrors' : 'Jest jeszcze $1 błąd/błędy.', // from v2.1.44 added 9.12.2018 /******************************* commands names ********************************/ 'cmdarchive' : 'Utwórz archiwum', 'cmdback' : 'Wstecz', 'cmdcopy' : 'Kopiuj', 'cmdcut' : 'Wytnij', 'cmddownload' : 'Pobierz', 'cmdduplicate' : 'Duplikuj', 'cmdedit' : 'Edytuj plik', 'cmdextract' : 'Wypakuj pliki z archiwum', 'cmdforward' : 'Dalej', 'cmdgetfile' : 'Wybierz pliki', 'cmdhelp' : 'Informacje o programie', 'cmdhome' : 'Główny', 'cmdinfo' : 'WÅ‚aÅ›ciwoÅ›ci', 'cmdmkdir' : 'Nowy katalog', 'cmdmkdirin' : 'Do nowego katalogu', // from v2.1.7 added 19.2.2016 'cmdmkfile' : 'Nowy plik', 'cmdopen' : 'Otwórz', 'cmdpaste' : 'Wklej', 'cmdquicklook' : 'PodglÄ…d', 'cmdreload' : 'OdÅ›wież', 'cmdrename' : 'ZmieÅ„ nazwÄ™', 'cmdrm' : 'UsuÅ„', 'cmdtrash' : 'Do kosza', //from v2.1.24 added 29.4.2017 'cmdrestore' : 'Przywróć', //from v2.1.24 added 3.5.2017 'cmdsearch' : 'Wyszukaj pliki', 'cmdup' : 'Przejdź do katalogu nadrzÄ™dnego', 'cmdupload' : 'WyÅ›lij pliki', 'cmdview' : 'Widok', 'cmdresize' : 'ZmieÅ„ rozmiar i Obróć', 'cmdsort' : 'Sortuj', 'cmdnetmount' : 'Zamontuj wolumin sieciowy', // added 18.04.2012 'cmdnetunmount': 'Odmontuj', // from v2.1 added 30.04.2012 'cmdplaces' : 'Do Miejsc', // added 28.12.2014 'cmdchmod' : 'Zmiana trybu', // from v2.1 added 20.6.2015 'cmdopendir' : 'Otwórz katalog', // from v2.1 added 13.1.2016 'cmdcolwidth' : 'Resetuj szerokość kolumny', // from v2.1.13 added 12.06.2016 'cmdfullscreen': 'PeÅ‚ny ekran', // from v2.1.15 added 03.08.2016 'cmdmove' : 'PrzenieÅ›', // from v2.1.15 added 21.08.2016 'cmdempty' : 'Opróżnij folder', // from v2.1.25 added 22.06.2017 'cmdundo' : 'Cofnij', // from v2.1.27 added 31.07.2017 'cmdredo' : 'Ponów', // from v2.1.27 added 31.07.2017 'cmdpreference': 'Preferencje', // from v2.1.27 added 03.08.2017 'cmdselectall' : 'Zaznacz wszystko', // from v2.1.28 added 15.08.2017 'cmdselectnone': 'Odznacz wszystko', // from v2.1.28 added 15.08.2017 'cmdselectinvert': 'Odwróć wybór', // from v2.1.28 added 15.08.2017 'cmdopennew' : 'Otwórz w nowym oknie', // from v2.1.38 added 3.4.2018 'cmdhide' : 'Ukryj (osobiste)', // from v2.1.41 added 24.7.2018 /*********************************** buttons ***********************************/ 'btnClose' : 'Zamknij', 'btnSave' : 'Zapisz', 'btnRm' : 'UsuÅ„', 'btnApply' : 'Zastosuj', 'btnCancel' : 'Anuluj', 'btnNo' : 'Nie', 'btnYes' : 'Tak', 'btnDiscard': 'Discard changes', 'btnMount' : 'Montuj', // added 18.04.2012 'btnApprove': 'Idź do $1 & zatwierdź', // from v2.1 added 26.04.2012 'btnUnmount': 'Odmontuj', // from v2.1 added 30.04.2012 'btnConv' : 'Konwertuj', // from v2.1 added 08.04.2014 'btnCwd' : 'Tutaj', // from v2.1 added 22.5.2015 'btnVolume' : 'Wolumin', // from v2.1 added 22.5.2015 'btnAll' : 'Wszystko', // from v2.1 added 22.5.2015 'btnMime' : 'Typ MIME', // from v2.1 added 22.5.2015 'btnFileName':'Nazwa pliku', // from v2.1 added 22.5.2015 'btnSaveClose': 'Zapisz & Zamknij', // from v2.1 added 12.6.2015 'btnBackup' : 'Kopia zapasowa', // fromv2.1 added 28.11.2015 'btnRename' : 'ZmieÅ„ nazwÄ™', // from v2.1.24 added 6.4.2017 'btnRenameAll' : 'ZmieÅ„ nazwÄ™(Wszystkie)', // from v2.1.24 added 6.4.2017 'btnPrevious' : 'Poprz ($1/$2)', // from v2.1.24 added 11.5.2017 'btnNext' : 'Nast ($1/$2)', // from v2.1.24 added 11.5.2017 'btnSaveAs' : 'Zapisz Jako', // from v2.1.25 added 24.5.2017 /******************************** notifications ********************************/ 'ntfopen' : 'Otwieranie katalogu', 'ntffile' : 'Otwórz plik', 'ntfreload' : 'OdÅ›wież zawartość katalogu', 'ntfmkdir' : 'Tworzenie katalogu', 'ntfmkfile' : 'Tworzenie plików', 'ntfrm' : 'Usuwanie plików', 'ntfcopy' : 'Kopiowanie plików', 'ntfmove' : 'Przenoszenie plików', 'ntfprepare' : 'Przygotowanie do kopiowania plików', 'ntfrename' : 'Zmiana nazw plików', 'ntfupload' : 'WysyÅ‚anie plików', 'ntfdownload' : 'Pobieranie plików', 'ntfsave' : 'Zapisywanie plików', 'ntfarchive' : 'Tworzenie archiwum', 'ntfextract' : 'Wypakowywanie plików z archiwum', 'ntfsearch' : 'Wyszukiwanie plików', 'ntfresize' : 'Zmiana rozmiaru obrazów', 'ntfsmth' : 'Robienie czegoÅ› >_<', 'ntfloadimg' : 'Å�adowanie obrazu', 'ntfnetmount' : 'Montaż woluminu sieciowego', // added 18.04.2012 'ntfnetunmount': 'Odłączanie woluminu sieciowego', // from v2.1 added 30.04.2012 'ntfdim' : 'Pozyskiwanie wymiaru obrazu', // added 20.05.2013 'ntfreaddir' : 'Odczytywanie informacji katalogu', // from v2.1 added 01.07.2013 'ntfurl' : 'Pobieranie URL linku', // from v2.1 added 11.03.2014 'ntfchmod' : 'Zmiana trybu pliku', // from v2.1 added 20.6.2015 'ntfpreupload': 'Weryfikacja nazwy przesÅ‚anego pliku', // from v2.1 added 31.11.2015 'ntfzipdl' : 'Tworzenie pliku do pobrania', // from v2.1.7 added 23.1.2016 'ntfparents' : 'Uzyskiwanie informacji o Å›cieżce', // from v2.1.17 added 2.11.2016 'ntfchunkmerge': 'Przetwarzanie przesÅ‚anego pliku', // from v2.1.17 added 2.11.2016 'ntftrash' : 'Wykonuje wrzucanie do kosza', // from v2.1.24 added 2.5.2017 'ntfrestore' : 'Wykonuje przywracanie z kosza', // from v2.1.24 added 3.5.2017 'ntfchkdir' : 'Sprawdzanie folderu docelowego', // from v2.1.24 added 3.5.2017 'ntfundo' : 'Cofanie poprzedniej operacji', // from v2.1.27 added 31.07.2017 'ntfredo' : 'Ponownie poprzednio cofniÄ™te', // from v2.1.27 added 31.07.2017 'ntfchkcontent' : 'Sprawdzanie zawartoÅ›ci', // from v2.1.41 added 3.8.2018 /*********************************** volumes *********************************/ 'volume_Trash' : 'Åšmieci', //from v2.1.24 added 29.4.2017 /************************************ dates **********************************/ 'dateUnknown' : 'nieznana', 'Today' : 'Dzisiaj', 'Yesterday' : 'Wczoraj', 'msJan' : 'Sty', 'msFeb' : 'Lut', 'msMar' : 'Mar', 'msApr' : 'Kwi', 'msMay' : 'Maj', 'msJun' : 'Cze', 'msJul' : 'Lip', 'msAug' : 'Sie', 'msSep' : 'Wrz', 'msOct' : 'Paź', 'msNov' : 'Lis', 'msDec' : 'Gru', 'January' : 'StyczeÅ„', 'February' : 'Luty', 'March' : 'Marzec', 'April' : 'KwiecieÅ„', 'May' : 'Maj', 'June' : 'Czerwiec', 'July' : 'Lipiec', 'August' : 'SierpieÅ„', 'September' : 'WrzesieÅ„', 'October' : 'Październik', 'November' : 'Listopad', 'December' : 'GrudzieÅ„', 'Sunday' : 'Niedziela', 'Monday' : 'PoniedziaÅ‚ek', 'Tuesday' : 'Wtorek', 'Wednesday' : 'Åšroda', 'Thursday' : 'Czwartek', 'Friday' : 'PiÄ…tek', 'Saturday' : 'Sobota', 'Sun' : 'Nie', 'Mon' : 'Pon', 'Tue' : 'Wto', 'Wed' : 'Åšro', 'Thu' : 'Czw', 'Fri' : 'PiÄ…', 'Sat' : 'Sob', /******************************** sort variants ********************************/ 'sortname' : 'w/g nazwy', 'sortkind' : 'w/g typu', 'sortsize' : 'w/g rozmiaru', 'sortdate' : 'w/g daty', 'sortFoldersFirst' : 'katalogi pierwsze', 'sortperm' : 'wg/nazwy', // from v2.1.13 added 13.06.2016 'sortmode' : 'wg/trybu', // from v2.1.13 added 13.06.2016 'sortowner' : 'wg/wÅ‚aÅ›ciciela', // from v2.1.13 added 13.06.2016 'sortgroup' : 'wg/grup', // from v2.1.13 added 13.06.2016 'sortAlsoTreeview' : 'Również drzewa katalogów', // from v2.1.15 added 01.08.2016 /********************************** new items **********************************/ 'untitled file.txt' : 'NowyPlik.txt', // added 10.11.2015 'untitled folder' : 'NowyFolder', // added 10.11.2015 'Archive' : 'NoweArchiwum', // from v2.1 added 10.11.2015 'untitled file' : 'NowyPlik.$1', // from v2.1.41 added 6.8.2018 'extentionfile' : '$1 Plik', // from v2.1.41 added 6.8.2018 'extentiontype' : '$1: $2', // from v2.1.43 added 17.10.2018 /********************************** messages **********************************/ 'confirmReq' : 'Wymagane potwierdzenie', 'confirmRm' : 'Czy na pewno chcesz usunąć pliki?
          Tej operacji nie można cofnąć!', 'confirmRepl' : 'Zastąpić stary plik nowym?', 'confirmRest' : 'Zamienić istniejący element na pozycję w koszu?', // fromv2.1.24 added 5.5.2017 'confirmConvUTF8' : 'Nie w UTF-8
          Konwertować na UTF-8?
          Zawartość stanie się UTF-8 poprzez zapisanie po konwersji.', // from v2.1 added 08.04.2014 'confirmNonUTF8' : 'Nie można wykryć kodowania tego pliku. Musi być tymczasowo przekształcony do UTF-8.
          Proszę wybrać kodowanie znaków tego pliku.', // from v2.1.19 added 28.11.2016 'confirmNotSave' : 'Został zmodyfikowany.
          Utracisz pracę, jeśli nie zapiszesz zmian.', // from v2.1 added 15.7.2015 'confirmTrash' : 'Czy na pewno chcesz przenieść elementy do kosza?', //from v2.1.24 added 29.4.2017 'confirmMove' : 'Czy na pewno chcesz przenieść elementy do "$1"?', //from v2.1.50 added 27.7.2019 'apllyAll' : 'Zastosuj do wszystkich', 'name' : 'Nazwa', 'size' : 'Rozmiar', 'perms' : 'Uprawnienia', 'modify' : 'Zmodyfikowany', 'kind' : 'Typ', 'read' : 'odczyt', 'write' : 'zapis', 'noaccess' : 'brak dostępu', 'and' : 'i', 'unknown' : 'nieznany', 'selectall' : 'Zaznacz wszystkie pliki', 'selectfiles' : 'Zaznacz plik(i)', 'selectffile' : 'Zaznacz pierwszy plik', 'selectlfile' : 'Zaznacz ostatni plik', 'viewlist' : 'Widok listy', 'viewicons' : 'Widok ikon', 'viewSmall' : 'Małe ikony', // from v2.1.39 added 22.5.2018 'viewMedium' : 'Średnie ikony', // from v2.1.39 added 22.5.2018 'viewLarge' : 'Duże ikony', // from v2.1.39 added 22.5.2018 'viewExtraLarge' : 'Bardzo duże ikony', // from v2.1.39 added 22.5.2018 'places' : 'Ulubione', 'calc' : 'Obliczanie', 'path' : 'Ścieżka', 'aliasfor' : 'Alias do', 'locked' : 'Zablokowany', 'dim' : 'Wymiary', 'files' : 'Plik(ów)', 'folders' : 'Katalogi', 'items' : 'Element(ów)', 'yes' : 'tak', 'no' : 'nie', 'link' : 'Odnośnik', 'searcresult' : 'Wyniki wyszukiwania', 'selected' : 'zaznaczonych obiektów', 'about' : 'O programie', 'shortcuts' : 'Skróty klawiaturowe', 'help' : 'Pomoc', 'webfm' : 'Menedżer plików sieciowych', 'ver' : 'Wersja', 'protocolver' : 'wersja protokołu', 'homepage' : 'Strona projektu', 'docs' : 'Dokumentacja', 'github' : 'Obserwuj rozwój projektu na Github', 'twitter' : 'Śledź nas na Twitterze', 'facebook' : 'Dołącz do nas na Facebooku', 'team' : 'Zespół', 'chiefdev' : 'główny programista', 'developer' : 'programista', 'contributor' : 'współautor', 'maintainer' : 'koordynator', 'translator' : 'tłumacz', 'icons' : 'Ikony', 'dontforget' : 'i nie zapomnij zabrać ręcznika', 'shortcutsof' : 'Skróty klawiaturowe są wyłączone', 'dropFiles' : 'Upuść pliki tutaj', 'or' : 'lub', 'selectForUpload' : 'Wybierz pliki', 'moveFiles' : 'Przenieś pliki', 'copyFiles' : 'Kopiuj pliki', 'restoreFiles' : 'Przywróć elementy', // from v2.1.24 added 5.5.2017 'rmFromPlaces' : 'Usuń z miejsc', 'aspectRatio' : 'Zachowaj proporcje', 'scale' : 'Skala', 'width' : 'Szerokość', 'height' : 'Wysokość', 'resize' : 'Zmień rozmiar', 'crop' : 'Przytnij', 'rotate' : 'Obróć', 'rotate-cw' : 'Obróć 90° w lewo', 'rotate-ccw' : 'Obróć 90° w prawo', 'degree' : '°', 'netMountDialogTitle' : 'Montaż woluminu sieciowego', // added 18.04.2012 'protocol' : 'Protokół', // added 18.04.2012 'host' : 'Host', // added 18.04.2012 'port' : 'Port', // added 18.04.2012 'user' : 'Użytkownik', // added 18.04.2012 'pass' : 'Hasło', // added 18.04.2012 'confirmUnmount' : 'Czy chcesz odmontować $1?', // from v2.1 added 30.04.2012 'dropFilesBrowser': 'Upuść lub Wklej pliki z przeglądarki', // from v2.1 added 30.05.2012 'dropPasteFiles' : 'Upuść lub Wklej tutaj pliki i adresy URL', // from v2.1 added 07.04.2014 'encoding' : 'Kodowanie', // from v2.1 added 19.12.2014 'locale' : 'Lokalne', // from v2.1 added 19.12.2014 'searchTarget' : 'Docelowo: $1', // from v2.1 added 22.5.2015 'searchMime' : 'Wyszukiwanie poprzez wpisanie typu MIME', // from v2.1 added 22.5.2015 'owner' : 'Właściciel', // from v2.1 added 20.6.2015 'group' : 'Grupa', // from v2.1 added 20.6.2015 'other' : 'Inne', // from v2.1 added 20.6.2015 'execute' : 'Wykonaj', // from v2.1 added 20.6.2015 'perm' : 'Uprawnienia', // from v2.1 added 20.6.2015 'mode' : 'Tryb', // from v2.1 added 20.6.2015 'emptyFolder' : 'Katalog jest pusty', // from v2.1.6 added 30.12.2015 'emptyFolderDrop' : 'Katalog jest pusty\\AUpuść aby dodać pozycje', // from v2.1.6 added 30.12.2015 'emptyFolderLTap' : 'Katalog jest pusty\\ADotknij dłużej aby dodać pozycje', // from v2.1.6 added 30.12.2015 'quality' : 'Jakość', // from v2.1.6 added 5.1.2016 'autoSync' : 'Auto synchronizacja', // from v2.1.6 added 10.1.2016 'moveUp' : 'Przenieś w górę', // from v2.1.6 added 18.1.2016 'getLink' : 'Pobierz URL linku', // from v2.1.7 added 9.2.2016 'selectedItems' : 'Wybrane pozycje ($1)', // from v2.1.7 added 2.19.2016 'folderId' : 'ID Katalogu', // from v2.1.10 added 3.25.2016 'offlineAccess' : 'Zezwól na dostęp offline', // from v2.1.10 added 3.25.2016 'reAuth' : 'Aby ponownie uwierzytelnić', // from v2.1.10 added 3.25.2016 'nowLoading' : 'Teraz ładuję...', // from v2.1.12 added 4.26.2016 'openMulti' : 'Otwieranie wielu plików', // from v2.1.12 added 5.14.2016 'openMultiConfirm': 'Próbujesz otworzyć $1 plików. Czy na pewno chcesz, aby otworzyć w przeglądarce?', // from v2.1.12 added 5.14.2016 'emptySearch' : 'Wynik wyszukiwania jest pusty', // from v2.1.12 added 5.16.2016 'editingFile' : 'Edytujesz plik.', // from v2.1.13 added 6.3.2016 'hasSelected' : 'Masz wybranych $1 pozycji.', // from v2.1.13 added 6.3.2016 'hasClipboard' : 'Masz $1 pozycji w schowku.', // from v2.1.13 added 6.3.2016 'incSearchOnly' : 'Wyszukiwanie przyrostowe jest wyłącznie z bieżącego widoku.', // from v2.1.13 added 6.30.2016 'reinstate' : 'Przywracanie', // from v2.1.15 added 3.8.2016 'complete' : '$1 zakończone', // from v2.1.15 added 21.8.2016 'contextmenu' : 'Menu kontekstowe', // from v2.1.15 added 9.9.2016 'pageTurning' : 'Obracanie strony', // from v2.1.15 added 10.9.2016 'volumeRoots' : 'Wolumin główny', // from v2.1.16 added 16.9.2016 'reset' : 'Resetuj', // from v2.1.16 added 1.10.2016 'bgcolor' : 'Kolor tła', // from v2.1.16 added 1.10.2016 'colorPicker' : 'Wybierania kolorów', // from v2.1.16 added 1.10.2016 '8pxgrid' : '8px Kratka', // from v2.1.16 added 4.10.2016 'enabled' : 'Włączone', // from v2.1.16 added 4.10.2016 'disabled' : 'Wyłączone', // from v2.1.16 added 4.10.2016 'emptyIncSearch' : 'Wyniki wyszukiwania są puste w bieżącym widoku.\\AWciśnij [Enter] aby poszerzyć zakres wyszukiwania.', // from v2.1.16 added 5.10.2016 'emptyLetSearch' : 'Wyszukiwanie pierwszej litery brak wyników w bieżącym widoku.', // from v2.1.23 added 24.3.2017 'textLabel' : 'Etykieta tekstowa', // from v2.1.17 added 13.10.2016 'minsLeft' : '$1 min pozostało', // from v2.1.17 added 13.11.2016 'openAsEncoding' : 'Otwórz ponownie z wybranym kodowaniem', // from v2.1.19 added 2.12.2016 'saveAsEncoding' : 'Zapisz z wybranym kodowaniem', // from v2.1.19 added 2.12.2016 'selectFolder' : 'Wybierz katalog', // from v2.1.20 added 13.12.2016 'firstLetterSearch': 'Wyszukiwanie pierwszej litery', // from v2.1.23 added 24.3.2017 'presets' : 'Wstępnie ustalone', // from v2.1.25 added 26.5.2017 'tooManyToTrash' : 'To zbyt wiele rzeczy, więc nie mogą być w koszu.', // from v2.1.25 added 9.6.2017 'TextArea' : 'PoleTekstowe', // from v2.1.25 added 14.6.2017 'folderToEmpty' : 'Opróżnij folder "$1".', // from v2.1.25 added 22.6.2017 'filderIsEmpty' : 'Brak elementów w folderze "$1".', // from v2.1.25 added 22.6.2017 'preference' : 'Preferencje', // from v2.1.26 added 28.6.2017 'language' : 'Ustawienie języka', // from v2.1.26 added 28.6.2017 'clearBrowserData': 'Zainicjuj ustawienia zapisane w tej przeglądarce', // from v2.1.26 added 28.6.2017 'toolbarPref' : 'Ustawienia paska narzędzi', // from v2.1.27 added 2.8.2017 'charsLeft' : '... pozostało $1 znak(ów).', // from v2.1.29 added 30.8.2017 'linesLeft' : '... pozostało $1 lini.', // from v2.1.52 added 16.1.2020 'sum' : 'Suma', // from v2.1.29 added 28.9.2017 'roughFileSize' : 'Przybliżony rozmiar pliku', // from v2.1.30 added 2.11.2017 'autoFocusDialog' : 'Skoncentruj się na elemencie dialogowym po najechaniu myszą', // from v2.1.30 added 2.11.2017 'select' : 'Wybierz', // from v2.1.30 added 23.11.2017 'selectAction' : 'Działanie po wybraniu pliku', // from v2.1.30 added 23.11.2017 'useStoredEditor' : 'Otwórz za pomocą ostatnio używanego edytora', // from v2.1.30 added 23.11.2017 'selectinvert' : 'Odwróć zaznaczenie', // from v2.1.30 added 25.11.2017 'renameMultiple' : 'Czy na pewno chcesz zmienić nazwę $1 wybranych elementów takich jak $2?
          Tego nie da siÄ™ cofnąć!', // from v2.1.31 added 4.12.2017 'batchRename' : 'ZmieÅ„ partiami', // from v2.1.31 added 8.12.2017 'plusNumber' : '+ Liczba', // from v2.1.31 added 8.12.2017 'asPrefix' : 'Dodaj prefix', // from v2.1.31 added 8.12.2017 'asSuffix' : 'Dodaj suffix', // from v2.1.31 added 8.12.2017 'changeExtention' : 'ZmieÅ„ rozszerzenie', // from v2.1.31 added 8.12.2017 'columnPref' : 'Ustawienia kolumn (Widok listy)', // from v2.1.32 added 6.2.2018 'reflectOnImmediate' : 'Wszystkie zmiany widoczne natychmiast w archiwum.', // from v2.1.33 added 2.3.2018 'reflectOnUnmount' : 'Wszelkie zmiany nie bÄ™dÄ… widoczne, dopóki nie odłączysz tego woluminu.', // from v2.1.33 added 2.3.2018 'unmountChildren' : 'NastÄ™pujÄ…cy wolumin (y), zamontowany na tym urzÄ…dzeniu również niezamontowany. Czy na pewno chcesz go odmontować?', // from v2.1.33 added 5.3.2018 'selectionInfo' : 'Informacje Wyboru', // from v2.1.33 added 7.3.2018 'hashChecker' : 'Algorytmy do pokazywania hash pliku', // from v2.1.33 added 10.3.2018 'infoItems' : 'Info Elementów (Wybór Panelu Informacyjnego)', // from v2.1.38 added 28.3.2018 'pressAgainToExit': 'NaciÅ›nij ponownie, aby wyjść.', // from v2.1.38 added 1.4.2018 'toolbar' : 'Pasek narzÄ™dziowy', // from v2.1.38 added 4.4.2018 'workspace' : 'Obszar Pracy', // from v2.1.38 added 4.4.2018 'dialog' : 'Dialog', // from v2.1.38 added 4.4.2018 'all' : 'Wszystko', // from v2.1.38 added 4.4.2018 'iconSize' : 'Rozmiar Ikony (PodglÄ…d ikon)', // from v2.1.39 added 7.5.2018 'editorMaximized' : 'Otwórz zmaksymalizowane okno edytora', // from v2.1.40 added 30.6.2018 'editorConvNoApi' : 'Ponieważ konwersja przez API nie jest obecnie dostÄ™pna, należy dokonać konwersji w witrynie.', //from v2.1.40 added 8.7.2018 'editorConvNeedUpload' : 'Po konwersji musisz przesÅ‚ać z adresem URL pozycji lub pobranym plikiem, aby zapisać przekonwertowany plik.', //from v2.1.40 added 8.7.2018 'convertOn' : 'Konwertuj na stronie $1', // from v2.1.40 added 10.7.2018 'integrations' : 'Integracje', // from v2.1.40 added 11.7.2018 'integrationWith' : 'Ten elFinder ma zintegrowane nastÄ™pujÄ…ce usÅ‚ugi zewnÄ™trzne. Przed użyciem ich sprawdź warunki użytkowania, politykÄ™ prywatnoÅ›ci itp.', // from v2.1.40 added 11.7.2018 'showHidden' : 'Pokaż ukryte pozycje', // from v2.1.41 added 24.7.2018 'hideHidden' : 'Ukryj ukryte pozycje', // from v2.1.41 added 24.7.2018 'toggleHidden' : 'Pokaż/Ukryj ukryte pozycje', // from v2.1.41 added 24.7.2018 'makefileTypes' : 'Typy plików, które można włączyć za pomocÄ… "Nowy plik"', // from v2.1.41 added 7.8.2018 'typeOfTextfile' : 'Typ pliku tekstowego', // from v2.1.41 added 7.8.2018 'add' : 'Dodaj', // from v2.1.41 added 7.8.2018 'theme' : 'Motyw', // from v2.1.43 added 19.10.2018 'default' : 'DomyÅ›lnie', // from v2.1.43 added 19.10.2018 'description' : 'Opis', // from v2.1.43 added 19.10.2018 'website' : 'Witryna', // from v2.1.43 added 19.10.2018 'author' : 'Autor', // from v2.1.43 added 19.10.2018 'email' : 'E-mail', // from v2.1.43 added 19.10.2018 'license' : 'Licencja', // from v2.1.43 added 19.10.2018 'exportToSave' : 'Tego elementu nie można zapisać. Aby uniknąć utraty zmian, musisz wyeksportować go na swój komputer.', // from v2.1.44 added 1.12.2018 'dblclickToSelect': 'Kliknij dwukrotnie plik, aby go wybrać.', // from v2.1.47 added 22.1.2019 'useFullscreen' : 'Użyj trybu peÅ‚noekranowego', // from v2.1.47 added 19.2.2019 /********************************** mimetypes **********************************/ 'kindUnknown' : 'Nieznany', 'kindRoot' : 'Główny Wolumin', // from v2.1.16 added 16.10.2016 'kindFolder' : 'Katalog', 'kindSelects' : 'Zaznaczenie', // from v2.1.29 added 29.8.2017 'kindAlias' : 'Alias', 'kindAliasBroken' : 'Utracony alias', // applications 'kindApp' : 'Aplikacja', 'kindPostscript' : 'Dokument Postscript', 'kindMsOffice' : 'Dokument Office', 'kindMsWord' : 'Dokument Word', 'kindMsExcel' : 'Dokument Excel', 'kindMsPP' : 'Prezentacja PowerPoint', 'kindOO' : 'Dokument OpenOffice', 'kindAppFlash' : 'Aplikacja Flash', 'kindPDF' : 'Dokument przenoÅ›ny PDF', 'kindTorrent' : 'Plik BitTorrent', 'kind7z' : 'Archiwum 7z', 'kindTAR' : 'Archiwum TAR', 'kindGZIP' : 'Archiwum GZIP', 'kindBZIP' : 'Archiwum BZIP', 'kindXZ' : 'Archiwum XZ', 'kindZIP' : 'Archiwum ZIP', 'kindRAR' : 'Archiwum RAR', 'kindJAR' : 'Plik Java JAR', 'kindTTF' : 'Czcionka TrueType', 'kindOTF' : 'Czcionka OpenType', 'kindRPM' : 'Pakiet RPM', // fonts 'kindFont' : 'Czcionka', 'kindSFNT' : 'Czcionka SFNT', 'kindEOT' : 'Czcionka Embedded Open Type', 'kindWOFF' : 'Czcionka Web Open Font Format', 'kindWOFF2' : 'Czcionka Web Open Font Format 2', // texts 'kindText' : 'Dokument tekstowy', 'kindTextPlain' : 'ZwykÅ‚y tekst', 'kindPHP' : 'Kod źródÅ‚owy PHP', 'kindCSS' : 'Kaskadowe arkusze stylów', 'kindHTML' : 'Dokument HTML', 'kindJS' : 'Kod źródÅ‚owy Javascript', 'kindRTF' : 'Tekst sformatowany RTF', 'kindC' : 'Kod źródÅ‚owy C', 'kindCHeader' : 'Plik nagłówka C', 'kindCPP' : 'Kod źródÅ‚owy C++', 'kindCPPHeader' : 'Plik nagłówka C++', 'kindShell' : 'Skrypt powÅ‚oki Unix', 'kindPython' : 'Kod źródÅ‚owy Python', 'kindJava' : 'Kod źródÅ‚owy Java', 'kindRuby' : 'Kod źródÅ‚owy Ruby', 'kindPerl' : 'Skrypt Perl', 'kindSQL' : 'Kod źródÅ‚owy SQL', 'kindXML' : 'Dokument XML', 'kindAWK' : 'Kod źródÅ‚owy AWK', 'kindCSV' : 'Tekst rozdzielany przecinkami CSV', 'kindDOCBOOK' : 'Dokument Docbook XML', 'kindMarkdown' : 'Tekst promocyjny', // added 20.7.2015 // images 'kindImage' : 'Obraz', 'kindBMP' : 'Obraz BMP', 'kindJPEG' : 'Obraz JPEG', 'kindGIF' : 'Obraz GIF', 'kindPNG' : 'Obraz PNG', 'kindTIFF' : 'Obraz TIFF', 'kindTGA' : 'Obraz TGA', 'kindPSD' : 'Obraz Adobe Photoshop', 'kindXBITMAP' : 'Obraz X BitMap', 'kindPXM' : 'Obraz Pixelmator', // media 'kindAudio' : 'Plik dźwiÄ™kowy', 'kindAudioMPEG' : 'Plik dźwiÄ™kowy MPEG', 'kindAudioMPEG4' : 'Plik dźwiÄ™kowy MPEG-4', 'kindAudioMIDI' : 'Plik dźwiÄ™kowy MIDI', 'kindAudioOGG' : 'Plik dźwiÄ™kowy Ogg Vorbis', 'kindAudioWAV' : 'Plik dźwiÄ™kowy WAV', 'AudioPlaylist' : 'Lista odtwarzania MP3', 'kindVideo' : 'Plik wideo', 'kindVideoDV' : 'Plik wideo DV', 'kindVideoMPEG' : 'Plik wideo MPEG', 'kindVideoMPEG4' : 'Plik wideo MPEG-4', 'kindVideoAVI' : 'Plik wideo AVI', 'kindVideoMOV' : 'Plik wideo Quick Time', 'kindVideoWM' : 'Plik wideo Windows Media', 'kindVideoFlash' : 'Plik wideo Flash', 'kindVideoMKV' : 'Plik wideo Matroska', 'kindVideoOGG' : 'Plik wideo Ogg' } }; })); PK!(í‚D@�@�@file-manager-advanced/application/library/js/i18n/elfinder.ko.jsnu„[µü¤/** * Korea-한국어 translation * @author Hwang Ahreum; * @author Park Sungyong; * @author Yeonjeong Woo * @author Kwon Hyungjoo * @version 2024-03-19 */ (function(root, factory) { if (typeof define === 'function' && define.amd) { define(['elfinder'], factory); } else if (typeof exports !== 'undefined') { module.exports = factory(require('elfinder')); } else { factory(root.elFinder); } }(this, function(elFinder) { elFinder.prototype.i18.ko = { translator : 'Hwang Ahreum; <luckmagic@naver.com>, Park Sungyong; <sungyong@gmail.com>, Yeonjeong Woo <eat_sweetly@naver.com>, Kwon Hyungjoo <hyung778@gmail.com>', language : 'Korea-한국어', direction : 'ltr', dateFormat : 'Y-m-d H:i', // will show like: 2024-03-19 16:27 fancyDateFormat : '$1 H:i', // will show like: 오늘 16:27 nonameDateFormat : 'ymd-His', // noname upload will show like: 240319-162748 messages : { /********************************** errors **********************************/ 'error' : '오류', 'errUnknown' : '알 수 없는 오류.', 'errUnknownCmd' : '알 수 없는 명령어.', 'errJqui' : 'jQuery UI 설정ì�´ 올바르지 않습니다. Selectable, draggable ë°� droppable 구성 요소가 í�¬í•¨ë�˜ì–´ 있어야 합니다.', 'errNode' : 'elFinder를 ìƒ�성하기 위해서는 DOM Element를 요구합니다.', 'errURL' : 'elFinder 환경설정ì�´ 올바르지 않습니다! URL 옵션ì�´ 설정ë�˜ì§€ 않았습니다.', 'errAccess' : 'ì ‘ê·¼ 제한.', 'errConnect' : 'Backendì—� ì—°ê²°í•  수 없습니다.', 'errAbort' : 'ì—°ê²° 실패.', 'errTimeout' : '연결시간 초과.', 'errNotFound' : 'Backend를 ì°¾ì�„ 수 없습니다.', 'errResponse' : 'Backendê°€ ì�‘답하지 않습니다.', 'errConf' : 'Backend 환경설정ì�´ 올바르지 않습니다.', 'errJSON' : 'PHP JSON 모듈ì�´ 설치ë�˜ì§€ 않았습니다.', 'errNoVolumes' : 'ì�½ì�„ 수 있는 볼륨ì�´ 없습니다.', 'errCmdParams' : '"$1" 명령ì—� 잘못ë�œ 매개 변수가 있습니다.', 'errDataNotJSON' : 'ë�°ì�´í„°ê°€ JSONì�´ 아닙니다.', 'errDataEmpty' : 'ë�°ì�´í„°ê°€ 비어있습니다.', 'errCmdReq' : 'Backend 요청ì—�는 명령어 ì�´ë¦„ì�´ 필요합니다.', 'errOpen' : '"$1"ì�„(를) ì—´ 수 없습니다.', 'errNotFolder' : 'í�´ë�”ê°€ 아닙니다.', 'errNotFile' : '파ì�¼ì�´ 아닙니다.', 'errRead' : '"$1"ì�„(를) ì�½ì�„ 수 없습니다.', 'errWrite' : '"$1"ì—� 쓸 수 없습니다.', 'errPerm' : '권한ì�´ 없습니다.', 'errLocked' : '"$1"ì�´(ê°€) 잠겨 있습니다, ì�´ë�™, 삭제가 불가능합니다', 'errExists' : 'ì�´ë¯¸ "$1"파ì�¼ì�´ 존재합니다.', 'errInvName' : '파ì�¼ëª…ì—� 올바르지 않ì�€ 문ìž�ê°€ í�¬í•¨ë�˜ì—ˆìŠµë‹ˆë‹¤.', 'errInvDirname' : 'í�´ë�”명ì—� 올바르지 않ì�€ 문ìž�ê°€ í�¬í•¨ë�˜ì—ˆìŠµë‹ˆë‹¤.', // from v2.1.24 added 12.4.2017 'errFolderNotFound' : 'í�´ë�”를 ì°¾ì�„ 수 없습니다.', 'errFileNotFound' : '파ì�¼ì�„ ì°¾ì�„ 수 없습니다.', 'errTrgFolderNotFound' : '"$1" í�´ë�”를 ì°¾ì�„ 수 없습니다.', 'errPopup' : '브ë�¼ìš°ì €ì—�서 íŒ�ì—…ì�„ 차단하였습니다. íŒ�ì—…ì�„ 허용하려면 브ë�¼ìš°ì € 옵션ì�„ 변경하세요.', 'errMkdir' : '"$1" í�´ë�”를 ìƒ�성할 수 없습니다.', 'errMkfile' : '"$1" 파ì�¼ì�„ ìƒ�성할 수 없습니다.', 'errRename' : '"$1"ì�˜ ì�´ë¦„ì�„ 변경할 수 없습니다.', 'errCopyFrom' : '볼률 "$1"으(로)부터 파ì�¼ì�„ 복사할 수 없습니다.', 'errCopyTo' : '볼률 "$1"ì—� 파ì�¼ì�„ 복사할 수 없습니다.', 'errMkOutLink' : 'root 볼륨 외부ì—� ë§�í�¬ë¥¼ 만들 수 없습니다.', // from v2.1 added 03.10.2015 'errUpload' : '업로드 오류.', // old name - errUploadCommon 'errUploadFile' : '"$1"ì�„(를) 업로드할 수 없습니다.', // old name - errUpload 'errUploadNoFiles' : '업로드할 파ì�¼ì�´ 없습니다.', 'errUploadTotalSize' : 'ë�°ì�´í„°ê°€ 허용ë�œ 최대í�¬ê¸°ë¥¼ 초과하였습니다.', // old name - errMaxSize 'errUploadFileSize' : '파ì�¼ì�´ 허용ë�œ 최대í�¬ê¸°ë¥¼ 초과하였습니다.', // old name - errFileMaxSize 'errUploadMime' : '잘못ë�œ 파ì�¼í˜•ì‹�입니다.', 'errUploadTransfer' : '"$1" 전송 오류.', 'errUploadTemp' : '업로드ì—� 필요한 임시파ì�¼ ìƒ�성ì�„ í•  수 없습니다.', // from v2.1 added 26.09.2015 'errNotReplace' : '"$1"개체가 현재 위치ì—� ì�´ë¯¸ 존재하며 다른 유형ì�˜ 개체로 대체 í•  수 없습니다.', // new 'errReplace' : '"$1"ì�„(를) 변경할 수 없습니다.', 'errSave' : '"$1"ì�„(를) 저장할 수 없습니다.', 'errCopy' : '"$1"ì�„(를) 복사할 수 없습니다.', 'errMove' : '"$1"ì�„(를) ì�´ë�™í•  수 없습니다.', 'errCopyInItself' : '"$1"ì�„(를) ìž�기 ìž�ì‹ ì—�게 복사할 수 없습니다.', 'errRm' : '"$1"ì�˜ ì�´ë¦„ì�„ 변경할 수 없습니다.', 'errTrash' : '휴지통으로 보낼 수 없습니다.', // from v2.1.24 added 30.4.2017 'errRmSrc' : 'ì›�본 파ì�¼ì�„ 제거할 수 없습니다.', 'errExtract' : '"$1"ì—� ì••ì¶•ì�„ í’€ 수 없습니다.', 'errArchive' : '압축파ì�¼ì�„ ìƒ�성할 수 없습니다.', 'errArcType' : 'ì§€ì›�하지 않는 압축파ì�¼ 형ì‹�입니다.', 'errNoArchive' : '압축파ì�¼ì�´ 아니거나 ì§€ì›�하지 않는 압축파ì�¼ 형ì‹�입니다.', 'errCmdNoSupport' : 'Backendì—�서 ì�´ 명령ì�„ ì§€ì›�하지 않습니다.', 'errReplByChild' : '"$1" í�´ë�”ì—� ë�®ì–´ì“¸ìˆ˜ 없습니다.', 'errArcSymlinks' : '보안ìƒ�ì�˜ ì�´ìœ ë¡œ 압축파ì�¼ì�´ 심볼릭 ë§�í�¬ë¥¼ í�¬í•¨í•˜ê±°ë‚˜ 허용ë�˜ì§€ 않는 ì�´ë¦„ì�´ 있ì�„ 경우 ì••ì¶• 해제가 불가능합니다.', // edited 24.06.2012 'errArcMaxSize' : '압축파ì�¼ì�´ 허용ë�œ 최대í�¬ê¸°ë¥¼ 초과하였습니다.', 'errResize' : '"$1"ì�˜ í�¬ê¸° 변경ì�„ í•  수 없습니다.', 'errResizeDegree' : '회전가능한 ê°�ë�„ê°€ 아닙니다.', // added 7.3.2013 'errResizeRotate' : 'ì�´ë¯¸ì§€ë¥¼ 회전할 수 없습니다.', // added 7.3.2013 'errResizeSize' : '올바르지 않ì�€ í�¬ê¸°ì�˜ ì�´ë¯¸ì§€ìž…니다.', // added 7.3.2013 'errResizeNoChange' : 'ì�´ë¯¸ì§€ í�¬ê¸°ê°€ 변경ë�˜ì§€ 않았습니다.', // added 7.3.2013 'errUsupportType' : 'ì§€ì›�하지 않는 파ì�¼ 형ì‹�.', 'errNotUTF8Content' : '파ì�¼ "$1"ì�€ UTF-8 형ì‹�ì�´ 아니어서 편집할 수 없습니다.', // added 9.11.2011 'errNetMount' : '"$1"ì�„(를) 마운트할 수 없습니다.', // added 17.04.2012 'errNetMountNoDriver' : 'ì§€ì›�ë�˜ì§€ 않는 프로토콜.', // added 17.04.2012 'errNetMountFailed' : '마운드 실패.', // added 17.04.2012 'errNetMountHostReq' : '호스트가 필요합니다.', // added 18.04.2012 'errSessionExpires' : '활ë�™ì�´ 없어 세션ì�´ 만료ë�˜ì—ˆìŠµë‹ˆë‹¤.', 'errCreatingTempDir' : '임시 í�´ë�” ìƒ�성ì—� 실패했습니다: "$1"', 'errFtpDownloadFile' : 'FTP를 통한 다운로드ì—� 실패했습니다: "$1"', 'errFtpUploadFile' : 'FTPì—� 업로드 실패했습니다: "$1"', 'errFtpMkdir' : 'FTPì—�서 í�´ë�” ìƒ�성ì—� 실패했습니다: "$1"', 'errArchiveExec' : '압축중 오류가 ë°œìƒ�했습니다: "$1"', 'errExtractExec' : '압축해제중 오류가 ë°œìƒ�했습니다: "$1"', 'errNetUnMount' : '마운트를 해제할 수 없습니다.', // from v2.1 added 30.04.2012 'errConvUTF8' : 'UTF-8로 변환할 수 없습니다.', // from v2.1 added 08.04.2014 'errFolderUpload' : 'í�´ë�”를 업로드 하려면 최신 브ë�¼ìš°ì €ë¥¼ 사용하세요.', // from v2.1 added 26.6.2015 'errSearchTimeout' : '"$1" 검색중 시간ì�„ 초과하였습니다. ì�¼ë¶€ 결과만 표시ë�©ë‹ˆë‹¤.', // from v2.1 added 12.1.2016 'errReauthRequire' : '재ì�¸ì¦�ì�´ 필요합니다.', // from v2.1.10 added 24.3.2016 'errMaxTargets' : 'ì„ íƒ� 가능한 최대 개수는 $1개입니다.', // from v2.1.17 added 17.10.2016 'errRestore' : '휴지통ì—�서 ë³µì›�í•  수 없습니다. ë³µì›�í•  위치를 확ì�¸í•  수 없습니다.', // from v2.1.24 added 3.5.2017 'errEditorNotFound' : 'ì�´ 파ì�¼ 형ì‹�ì�„ 위한 편집기를 찾지 못했습니다.', // from v2.1.25 added 23.5.2017 'errServerError' : '서버측ì—�서 오류가 ë°œìƒ�했습니다.', // from v2.1.25 added 16.6.2017 'errEmpty' : '"$1" í�´ë�”를 비울 수 없습니다.', // from v2.1.25 added 22.6.2017 'moreErrors' : '$1ê°œì�˜ 오류가 ë�” ë°œìƒ�했습니다.', // from v2.1.44 added 9.12.2018 'errMaxMkdirs' : 'You can create up to $1 folders at one time.', // from v2.1.58 added 20.6.2021 /******************************* commands names ********************************/ 'cmdarchive' : '압축파ì�¼ìƒ�성', 'cmdback' : '뒤로', 'cmdcopy' : '복사', 'cmdcut' : 'ìž�르기', 'cmddownload' : '다운로드', 'cmdduplicate' : '사본', 'cmdedit' : '편집', 'cmdextract' : '압축풀기', 'cmdforward' : '앞으로', 'cmdgetfile' : 'ì„ íƒ�', 'cmdhelp' : 'ì�´ 소프트웨어는', 'cmdhome' : '홈', 'cmdinfo' : '파ì�¼ì •ë³´', 'cmdmkdir' : '새 í�´ë�”', 'cmdmkdirin' : '새 í�´ë�”로', // from v2.1.7 added 19.2.2016 'cmdmkfile' : '새 파ì�¼', 'cmdopen' : '열기', 'cmdpaste' : '붙여넣기', 'cmdquicklook' : '미리보기', 'cmdreload' : '새로고침', 'cmdrename' : 'ì�´ë¦„바꾸기', 'cmdrm' : 'ì‚­ì œ', 'cmdtrash' : '휴지통으로', //from v2.1.24 added 29.4.2017 'cmdrestore' : 'ë³µì›�', //from v2.1.24 added 3.5.2017 'cmdsearch' : '파ì�¼ì°¾ê¸°', 'cmdup' : 'ìƒ�위í�´ë�”', 'cmdupload' : '업로드', 'cmdview' : '보기', 'cmdresize' : 'ì�´ë¯¸ì§€ í�¬ê¸° 변경 & 회전', 'cmdsort' : 'ì •ë ¬', 'cmdnetmount' : '네트워í�¬ 볼륨 마운트', // added 18.04.2012 'cmdnetunmount': '마운트 í•´ì œ', // from v2.1 added 30.04.2012 'cmdplaces' : 'ì¦�겨찾기로', // added 28.12.2014 'cmdchmod' : '모드 변경', // from v2.1 added 20.6.2015 'cmdopendir' : 'í�´ë�” 열기', // from v2.1 added 13.1.2016 'cmdcolwidth' : '컬럼 ë„“ì�´ 초기화', // from v2.1.13 added 12.06.2016 'cmdfullscreen': 'ì „ì²´ 화면', // from v2.1.15 added 03.08.2016 'cmdmove' : 'ì�´ë�™', // from v2.1.15 added 21.08.2016 'cmdempty' : 'í�´ë�” 비우기', // from v2.1.25 added 22.06.2017 'cmdundo' : '실행 취소', // from v2.1.27 added 31.07.2017 'cmdredo' : '다시 실행', // from v2.1.27 added 31.07.2017 'cmdpreference': '환경설정', // from v2.1.27 added 03.08.2017 'cmdselectall' : 'ì „ì²´ ì„ íƒ�', // from v2.1.28 added 15.08.2017 'cmdselectnone': 'ì„ íƒ� 취소', // from v2.1.28 added 15.08.2017 'cmdselectinvert': 'ì„ íƒ� 반전', // from v2.1.28 added 15.08.2017 'cmdopennew' : '새 창으로 열기', // from v2.1.38 added 3.4.2018 'cmdhide' : '숨기기 (환경설정)', // from v2.1.41 added 24.7.2018 /*********************************** buttons ***********************************/ 'btnClose' : '닫기', 'btnSave' : '저장', 'btnRm' : 'ì‚­ì œ', 'btnApply' : 'ì �ìš©', 'btnCancel' : '취소', 'btnNo' : '아니오', 'btnYes' : '예', 'btnDiscard': 'Discard changes', 'btnMount' : '마운트', // added 18.04.2012 'btnApprove': '$1로 ì�´ë�™ ë°� 승ì�¸', // from v2.1 added 26.04.2012 'btnUnmount': '마운트 í•´ì œ', // from v2.1 added 30.04.2012 'btnConv' : '변환', // from v2.1 added 08.04.2014 'btnCwd' : '여기', // from v2.1 added 22.5.2015 'btnVolume' : '볼륨', // from v2.1 added 22.5.2015 'btnAll' : 'ì „ì²´', // from v2.1 added 22.5.2015 'btnMime' : 'MIME 타입', // from v2.1 added 22.5.2015 'btnFileName':'파ì�¼ ì�´ë¦„', // from v2.1 added 22.5.2015 'btnSaveClose': '저장후 닫기', // from v2.1 added 12.6.2015 'btnBackup' : '백업', // fromv2.1 added 28.11.2015 'btnRename' : 'ì�´ë¦„변경', // from v2.1.24 added 6.4.2017 'btnRenameAll' : 'ì „ì²´ì�´ë¦„ 변경', // from v2.1.24 added 6.4.2017 'btnPrevious' : 'ì�´ì „ ($1/$2)', // from v2.1.24 added 11.5.2017 'btnNext' : '다ì�Œ ($1/$2)', // from v2.1.24 added 11.5.2017 'btnSaveAs' : '다른 ì�´ë¦„으로 저장하기', // from v2.1.25 added 24.5.2017 /******************************** notifications ********************************/ 'ntfopen' : 'í�´ë�” 열기', 'ntffile' : '파ì�¼ 열기', 'ntfreload' : '새로고침', 'ntfmkdir' : 'í�´ë�” ìƒ�성', 'ntfmkfile' : '파ì�¼ ìƒ�성', 'ntfrm' : 'ì‚­ì œ', 'ntfcopy' : '복사', 'ntfmove' : 'ì�´ë�™', 'ntfprepare' : '복사 준비', 'ntfrename' : 'ì�´ë¦„바꾸기', 'ntfupload' : '업로드', 'ntfdownload' : '다운로드', 'ntfsave' : '저장하기', 'ntfarchive' : '압축파ì�¼ë§Œë“¤ê¸°', 'ntfextract' : '압축풀기', 'ntfsearch' : '검색', 'ntfresize' : 'ì�´ë¯¸ì§€ í�¬ê¸° 변경', 'ntfsmth' : '작업중 >_<', 'ntfloadimg' : 'ì�´ë¯¸ì§€ 불러오는 중', 'ntfnetmount' : '네트워í�¬ 볼륨 마운트 중', // added 18.04.2012 'ntfnetunmount': '네트워í�¬ 볼륨 마운트 í•´ì œ 중', // from v2.1 added 30.04.2012 'ntfdim' : 'ì�´ë¯¸ì§€ í•´ìƒ�ë�„ 가져오는 중', // added 20.05.2013 'ntfreaddir' : 'í�´ë�” ì •ë³´ ì�½ëŠ” 중', // from v2.1 added 01.07.2013 'ntfurl' : 'ë§�í�¬ URL 가져오는 중', // from v2.1 added 11.03.2014 'ntfchmod' : '파ì�¼ 모드 변경하는 중', // from v2.1 added 20.6.2015 'ntfpreupload': '업로드ë�œ 파ì�¼ëª… ê²€ì¦� 중', // from v2.1 added 31.11.2015 'ntfzipdl' : '다운로드할 파ì�¼ ìƒ�성 중', // from v2.1.7 added 23.1.2016 'ntfparents' : '경로 ì •ë³´ 가져오는 중', // from v2.1.17 added 2.11.2016 'ntfchunkmerge': '업로드ë�œ 파ì�¼ 처리 중', // from v2.1.17 added 2.11.2016 'ntftrash' : '휴지통으로 ì�´ë�™ 중', // from v2.1.24 added 2.5.2017 'ntfrestore' : '휴지통ì—�서 ë³µì›� 중', // from v2.1.24 added 3.5.2017 'ntfchkdir' : '대ìƒ� í�´ë�” ì �ê²€ 중', // from v2.1.24 added 3.5.2017 'ntfundo' : 'ì�´ì „ 작업 취소 중', // from v2.1.27 added 31.07.2017 'ntfredo' : '취소ë�œ 작업 다시 하는 중', // from v2.1.27 added 31.07.2017 'ntfchkcontent' : 'ë‚´ìš© 확ì�¸ 중', // from v2.1.41 added 3.8.2018 /*********************************** volumes *********************************/ 'volume_Trash' : '휴지통', //from v2.1.24 added 29.4.2017 /************************************ dates **********************************/ 'dateUnknown' : '알 수 ì—†ì�Œ', 'Today' : '오늘', 'Yesterday' : 'ì–´ì œ', 'msJan' : '1ì›”', 'msFeb' : '2ì›”', 'msMar' : '3ì›”', 'msApr' : '4ì›”', 'msMay' : '5ì›”', 'msJun' : '6ì›”', 'msJul' : '7ì›”', 'msAug' : '8ì›”', 'msSep' : '9ì›”', 'msOct' : '10ì›”', 'msNov' : '11ì›”', 'msDec' : '12ì›”', 'January' : '1ì›”', 'February' : '2ì›”', 'March' : '3ì›”', 'April' : '4ì›”', 'May' : '5ì›”', 'June' : '6ì›”', 'July' : '7ì›”', 'August' : '8ì›”', 'September' : '9ì›”', 'October' : '10ì›”', 'November' : '11ì›”', 'December' : '12ì›”', 'Sunday' : 'ì�¼ìš”ì�¼', 'Monday' : '월요ì�¼', 'Tuesday' : '화요ì�¼', 'Wednesday' : '수요ì�¼', 'Thursday' : '목요ì�¼', 'Friday' : '금요ì�¼', 'Saturday' : '토요ì�¼', 'Sun' : 'ì�¼', 'Mon' : 'ì›”', 'Tue' : 'í™”', 'Wed' : '수', 'Thu' : '목', 'Fri' : '금', 'Sat' : '토', /******************************** sort variants ********************************/ 'sortname' : 'ì�´ë¦„', 'sortkind' : '종류', 'sortsize' : 'í�¬ê¸°', 'sortdate' : 'ë‚ ì§œ', 'sortFoldersFirst' : 'í�´ë�” 먼저', 'sortperm' : 'í�¼ë¯¸ì…˜ë³„', // from v2.1.13 added 13.06.2016 'sortmode' : '모드별', // from v2.1.13 added 13.06.2016 'sortowner' : '소유ìž�별', // from v2.1.13 added 13.06.2016 'sortgroup' : '그룹별', // from v2.1.13 added 13.06.2016 'sortAlsoTreeview' : '트리뷰ë�„ ê°™ì�´', // from v2.1.15 added 01.08.2016 /********************************** new items **********************************/ 'untitled file.txt' : '새파ì�¼.txt', // added 10.11.2015 'untitled folder' : '새í�´ë�”', // added 10.11.2015 'Archive' : '새아카ì�´ë¸Œ', // from v2.1 added 10.11.2015 'untitled file' : '새파ì�¼.$1', // from v2.1.41 added 6.8.2018 'extentionfile' : '$1: 파ì�¼', // from v2.1.41 added 6.8.2018 'extentiontype' : '$1: $2', // from v2.1.43 added 17.10.2018 /********************************** messages **********************************/ 'confirmReq' : '확ì�¸', 'confirmRm' : 'ì�´ 파ì�¼ì�„ ì •ë§�로 ì‚­ì œ 하겠습니까?
          실행 후 ��릴 수 없습니다!', 'confirmRepl' : '오래� 파�� 새 파�로 바꾸시겠습니까? (��가 �함�어 있으면 병합�니다. 백업 � �체하려면 백업� 선�하세요.)', 'confirmRest' : '�미 있는 파�� 휴지통� 있는 파�로 �체하시겠습니까?', // fromv2.1.24 added 5.5.2017 'confirmConvUTF8' : 'UTF-8� 아닙니다
          UTF-8로 변환할까요?
          변환후 저장하면 UTF-8로 바�니다.', // from v2.1 added 08.04.2014 'confirmNonUTF8' : '� 파�� �코딩 타입� 알아내지 못했습니다. 편집하려면 임시로 UTF-8로 변환해야 합니다.
          � 파�� �코딩� 선�해주세요.', // from v2.1.19 added 28.11.2016 'confirmNotSave' : '변경� 부분� 있습니다.
          저장하지 않는다면 현재 작업중� 내용� 잃� 수 있습니다.', // from v2.1 added 15.7.2015 'confirmTrash' : '휴지통으로 ��하시겠습니까?', //from v2.1.24 added 29.4.2017 'confirmMove' : '� 파�� 정� "$1"(으)로 ��하시겠습니까?', //from v2.1.50 added 27.7.2019 'apllyAll' : '모� �용', 'name' : '�름', 'size' : '�기', 'perms' : '권한', 'modify' : '수정� 시간', 'kind' : '종류', 'read' : '�기', 'write' : '쓰기', 'noaccess' : '액세스 불가', 'and' : '와', 'unknown' : '알 수 없�', 'selectall' : '모든 파� 선�', 'selectfiles' : '파� 선�', 'selectffile' : '첫번째 파� 선�', 'selectlfile' : '마지막 파� 선�', 'viewlist' : '리스트 보기', 'viewicons' : '아�콘 보기', 'viewSmall' : '작� 아�콘', // from v2.1.39 added 22.5.2018 'viewMedium' : '중간 아�콘', // from v2.1.39 added 22.5.2018 'viewLarge' : '� 아�콘', // from v2.1.39 added 22.5.2018 'viewExtraLarge' : '아주 � 아�콘', // from v2.1.39 added 22.5.2018 'places' : '�겨찾기', 'calc' : '계산', 'path' : '경로', 'aliasfor' : '별명', 'locked' : '잠금', 'dim' : '�기', 'files' : '파�', 'folders' : '��', 'items' : '아�템', 'yes' : '예', 'no' : '아니오', 'link' : '��', 'searcresult' : '검색 결과', 'selected' : '아�템 선�', 'about' : '� 프로그램�..', 'shortcuts' : '단축아�콘', 'help' : '�움�', 'webfm' : '웹 파�매니저', 'ver' : '버전', 'protocolver' : '프로토콜 버전', 'homepage' : '홈페�지', 'docs' : '문서', 'github' : 'Github�서 ��하기', 'twitter' : '트위터�서 팔로우하기', 'facebook' : '페�스��서 가입하기', 'team' : '팀', 'chiefdev' : '개발팀장', 'developer' : '개발�', 'contributor' : '공헌�', 'maintainer' : '관리�', 'translator' : '번역', 'icons' : '아�콘', 'dontforget' : '그리고 수건 가져가는 것� 잊지 마세요', 'shortcutsof' : '단축아�콘 사용불가', 'dropFiles' : '여기로 ��하기', 'or' : '�는', 'selectForUpload' : '업로드 파� 선�', 'moveFiles' : '파� ��', 'copyFiles' : '파� 복사', 'restoreFiles' : '복�하기', // from v2.1.24 added 5.5.2017 'rmFromPlaces' : '현재 ���서 삭제하기', 'aspectRatio' : '화면비율', 'scale' : '�기', 'width' : '가로', 'height' : '세로', 'resize' : '사�즈 변경', 'crop' : '�르기', 'rotate' : '회전', 'rotate-cw' : '반시계방향 90� 회전', 'rotate-ccw' : '시계방향 90� 회전', 'degree' : '�', 'netMountDialogTitle' : '네트워� 볼륨 마운트', // added 18.04.2012 'protocol' : '프로토콜', // added 18.04.2012 'host' : '호스트', // added 18.04.2012 'port' : '�트', // added 18.04.2012 'user' : '사용�', // added 18.04.2012 'pass' : '비밀번호', // added 18.04.2012 'confirmUnmount' : '$1�(를) 마운트 해제하시겠습니까?', // from v2.1 added 30.04.2012 'dropFilesBrowser': '브�우저�서 파�� �어오거나 붙여넣으세요', // from v2.1 added 30.05.2012 'dropPasteFiles' : '파�� �어오거나, �립보드� URL�나 �미지들� 붙여넣으세요', // from v2.1 added 07.04.2014 'encoding' : '�코딩', // from v2.1 added 19.12.2014 'locale' : '로케�', // from v2.1 added 19.12.2014 'searchTarget' : '대�: $1', // from v2.1 added 22.5.2015 'searchMime' : '입력한 MIME 타입으로 검색하기', // from v2.1 added 22.5.2015 'owner' : '소유�', // from v2.1 added 20.6.2015 'group' : '그룹', // from v2.1 added 20.6.2015 'other' : '그외', // from v2.1 added 20.6.2015 'execute' : '실행', // from v2.1 added 20.6.2015 'perm' : '권한', // from v2.1 added 20.6.2015 'mode' : '모드', // from v2.1 added 20.6.2015 'emptyFolder' : '빈 ��입니다', // from v2.1.6 added 30.12.2015 'emptyFolderDrop' : '빈 ��입니다\\A 드래드 앤 드롭으로 파�� 추가하세요', // from v2.1.6 added 30.12.2015 'emptyFolderLTap' : '빈 ��입니다\\A 길게 눌러 파�� 추가하세요', // from v2.1.6 added 30.12.2015 'quality' : '품질', // from v2.1.6 added 5.1.2016 'autoSync' : '�� �기', // from v2.1.6 added 10.1.2016 'moveUp' : '위로 ��', // from v2.1.6 added 18.1.2016 'getLink' : 'URL �� 가져오기', // from v2.1.7 added 9.2.2016 'selectedItems' : '선�� 항목 ($1)', // from v2.1.7 added 2.19.2016 'folderId' : '�� ID', // from v2.1.10 added 3.25.2016 'offlineAccess' : '오프�� 접근 허용', // from v2.1.10 added 3.25.2016 'reAuth' : '재��하기', // from v2.1.10 added 3.25.2016 'nowLoading' : '로딩중...', // from v2.1.12 added 4.26.2016 'openMulti' : '여러 파� 열기', // from v2.1.12 added 5.14.2016 'openMultiConfirm': '$1 파�� 열려고 합니다. 브�우저�서 열겠습니까?', // from v2.1.12 added 5.14.2016 'emptySearch' : '검색결과가 없습니다.', // from v2.1.12 added 5.16.2016 'editingFile' : '편집중� 파�입니다.', // from v2.1.13 added 6.3.2016 'hasSelected' : '$1개를 선�했습니다.', // from v2.1.13 added 6.3.2016 'hasClipboard' : '�립보드� $1개가 있습니다.', // from v2.1.13 added 6.3.2016 'incSearchOnly' : '�분 검색� 현재 보기�서만 가능합니다.', // from v2.1.13 added 6.30.2016 'reinstate' : '복�', // from v2.1.15 added 3.8.2016 'complete' : '$1 완료', // from v2.1.15 added 21.8.2016 'contextmenu' : '컨�스트 메뉴', // from v2.1.15 added 9.9.2016 'pageTurning' : '페�지 전환', // from v2.1.15 added 10.9.2016 'volumeRoots' : '볼륨 루트', // from v2.1.16 added 16.9.2016 'reset' : '초기화', // from v2.1.16 added 1.10.2016 'bgcolor' : '배경색', // from v2.1.16 added 1.10.2016 'colorPicker' : '색 선�기', // from v2.1.16 added 1.10.2016 '8pxgrid' : '8px 그리드', // from v2.1.16 added 4.10.2016 'enabled' : '활성', // from v2.1.16 added 4.10.2016 'disabled' : '비활성', // from v2.1.16 added 4.10.2016 'emptyIncSearch' : '현재 보기�는 검색결과가 없습니다.\\A[Enter]를 눌러 검색 대�� 확장하세요.', // from v2.1.16 added 5.10.2016 'emptyLetSearch' : '현재 보기�는 첫 글� 검색 결과가 없습니다.', // from v2.1.23 added 24.3.2017 'textLabel' : '�스트 �벨', // from v2.1.17 added 13.10.2016 'minsLeft' : '$1 분 남았습니다', // from v2.1.17 added 13.11.2016 'openAsEncoding' : '선�한 �코딩으로 다시 열기', // from v2.1.19 added 2.12.2016 'saveAsEncoding' : '선�한 �코딩으로 저장하기', // from v2.1.19 added 2.12.2016 'selectFolder' : '�� 선�', // from v2.1.20 added 13.12.2016 'firstLetterSearch': '첫 글� 검색', // from v2.1.23 added 24.3.2017 'presets' : '프리셋', // from v2.1.25 added 26.5.2017 'tooManyToTrash' : '휴지통으로 옮기기엔 항목� 너무 많습니다.', // from v2.1.25 added 9.6.2017 'TextArea' : '글��역', // from v2.1.25 added 14.6.2017 'folderToEmpty' : '"$1" ��를 비우세요.', // from v2.1.25 added 22.6.2017 'filderIsEmpty' : '"$1" ��� 아무것� 없습니다.', // from v2.1.25 added 22.6.2017 'preference' : '환경설정', // from v2.1.26 added 28.6.2017 'language' : '언어 설정', // from v2.1.26 added 28.6.2017 'clearBrowserData': '� 브�우저� 저장� 설정값 초기화하기', // from v2.1.26 added 28.6.2017 'toolbarPref' : '툴바 설정', // from v2.1.27 added 2.8.2017 'charsLeft' : '... $1 글� 남았습니다.', // from v2.1.29 added 30.8.2017 'linesLeft' : '... $1 줄 남았습니다.', // from v2.1.52 added 16.1.2020 'sum' : '합계', // from v2.1.29 added 28.9.2017 'roughFileSize' : '대략�� 파� �기', // from v2.1.30 added 2.11.2017 'autoFocusDialog' : '마우스를 가져갈 때 대화창 요소� 초� 맞추기', // from v2.1.30 added 2.11.2017 'select' : '선�', // from v2.1.30 added 23.11.2017 'selectAction' : '파� 선�시 �작', // from v2.1.30 added 23.11.2017 'useStoredEditor' : '마지막 사용한 편집기로 열기', // from v2.1.30 added 23.11.2017 'selectinvert' : '선� 반전', // from v2.1.30 added 25.11.2017 'renameMultiple' : '선�한 $1�(를) $2와 같� 바꾸겠습니까?
          ì�´ 작업ì�€ ë�˜ë�Œë¦´ 수 없습니다!', // from v2.1.31 added 4.12.2017 'batchRename' : 'ì�¼ê´„ ì�´ë¦„ 바꾸기', // from v2.1.31 added 8.12.2017 'plusNumber' : '+ 숫ìž�', // from v2.1.31 added 8.12.2017 'asPrefix' : 'ì ‘ë‘�사 추가', // from v2.1.31 added 8.12.2017 'asSuffix' : '접미사 추가', // from v2.1.31 added 8.12.2017 'changeExtention' : '확장ìž� 변경', // from v2.1.31 added 8.12.2017 'columnPref' : '사ì�´ë“œë°” 설정 (리스트 보기)', // from v2.1.32 added 6.2.2018 'reflectOnImmediate' : '모든 변경ì�€ ì•„ì¹´ì�´ë¸Œì—� 즉시 ë°˜ì˜�ë�©ë‹ˆë‹¤.', // from v2.1.33 added 2.3.2018 'reflectOnUnmount' : 'ì�´ 볼륨ì�˜ 마운트를 해제할 때까지는 어떠한 변경사항ë�„ ë°˜ì˜�ë�˜ì§€ 않습니다.', // from v2.1.33 added 2.3.2018 'unmountChildren' : '아래ì�˜ 볼륨들ë�„ ì�´ 볼륨과 함께 마운트가 í•´ì œë�©ë‹ˆë‹¤. 계ì†�하시겠습니까?', // from v2.1.33 added 5.3.2018 'selectionInfo' : 'ì„ íƒ� ì •ë³´', // from v2.1.33 added 7.3.2018 'hashChecker' : '파ì�¼ 해쉬 알고리즘', // from v2.1.33 added 10.3.2018 'infoItems' : 'ì •ë³´ (ì„ íƒ� ì •ë³´ 패ë„�)', // from v2.1.38 added 28.3.2018 'pressAgainToExit': '나가기 위해서 한 번 ë�” 누르세요.', // from v2.1.38 added 1.4.2018 'toolbar' : '툴바', // from v2.1.38 added 4.4.2018 'workspace' : '작업공간', // from v2.1.38 added 4.4.2018 'dialog' : '대화ìƒ�ìž�', // from v2.1.38 added 4.4.2018 'all' : 'ì „ì²´', // from v2.1.38 added 4.4.2018 'iconSize' : 'ì•„ì�´ì½˜ í�¬ê¸° (ì•„ì�´ì½˜ 보기)', // from v2.1.39 added 7.5.2018 'editorMaximized' : '최대화ë�œ 편집기 ì°½ì�„ 엽니다', // from v2.1.40 added 30.6.2018 'editorConvNoApi' : '현재 API를 통한 변환ì�´ 불가능하므로 웹 사ì�´íЏì—�서 변환하시기 ë°”ëž�니다.', //from v2.1.40 added 8.7.2018 'editorConvNeedUpload' : '변환 후 변환ë�œ 파ì�¼ì�„ 저장하기 위해서는 파ì�¼ URLì�´ë‚˜ 다운로드받ì�€ 파ì�¼ì�„ 업로드 해야 합니다.', //from v2.1.40 added 8.7.2018 'convertOn' : '$1 사ì�´íЏì—�서 변환하시기 ë°”ëž�니다.', // from v2.1.40 added 10.7.2018 'integrations' : '통합', // from v2.1.40 added 11.7.2018 'integrationWith' : 'elFinderì—�는 다ì�Œê³¼ ê°™ì�€ 외부 서비스가 통합ë�˜ì–´ 있습니다. ì�´ìš©í•˜ê¸° ì „ì—� ì�´ìš© 약관, ê°œì�¸ì •ë³´ 보호정책 등ì�„ 확ì�¸í•˜ì‹œê¸° ë°”ëž�니다.', // from v2.1.40 added 11.7.2018 'showHidden' : '숨겨진 파ì�¼ 표시', // from v2.1.41 added 24.7.2018 'hideHidden' : '숨겨진 파ì�¼ 숨기기', // from v2.1.41 added 24.7.2018 'toggleHidden' : '숨겨진 항목 표시/숨기기', // from v2.1.41 added 24.7.2018 'makefileTypes' : '"새 파ì�¼"ì—�서 사용할 파ì�¼ 형ì‹�', // from v2.1.41 added 7.8.2018 'typeOfTextfile' : 'í…�스트 파ì�¼ 유형', // from v2.1.41 added 7.8.2018 'add' : '추가', // from v2.1.41 added 7.8.2018 'theme' : '테마', // from v2.1.43 added 19.10.2018 'default' : '기본값', // from v2.1.43 added 19.10.2018 'description' : '설명', // from v2.1.43 added 19.10.2018 'website' : '웹사ì�´íЏ', // from v2.1.43 added 19.10.2018 'author' : 'ì €ìž�', // from v2.1.43 added 19.10.2018 'email' : 'ì�´ë©”ì�¼', // from v2.1.43 added 19.10.2018 'license' : 'ë�¼ì�´ì„ ìФ', // from v2.1.43 added 19.10.2018 'exportToSave' : 'ì�´ 파ì�¼ì�€ 저장ë�  수 없습니다. 편집한 ë‚´ìš©ì�„ 유지하려면 PC로 내보내시기 ë°”ëž�니다.', // from v2.1.44 added 1.12.2018 'dblclickToSelect': '파ì�¼ì�„ ë‘� 번 í�´ë¦­í•˜ì—¬ ì„ íƒ�하세요.', // from v2.1.47 added 22.1.2019 'useFullscreen' : 'ì „ì²´ 화면 모드 사용', // from v2.1.47 added 19.2.2019 /********************************** mimetypes **********************************/ 'kindUnknown' : '알 수 ì—†ì�Œ', 'kindRoot' : 'Root 볼륨', // from v2.1.16 added 16.10.2016 'kindFolder' : 'í�´ë�”', 'kindSelects' : 'ì„ íƒ�', // from v2.1.29 added 29.8.2017 'kindAlias' : '별칭', 'kindAliasBroken' : 'ì†�ìƒ�ë�œ 별칭', // applications 'kindApp' : 'ì�‘용프로그램', 'kindPostscript' : 'Postscript 문서', 'kindMsOffice' : 'Microsoft Office 문서', 'kindMsWord' : 'Microsoft Word 문서', 'kindMsExcel' : 'Microsoft Excel 문서', 'kindMsPP' : 'Microsoft Powerpoint 프레젠테ì�´ì…˜', 'kindOO' : 'Open Office 문서', 'kindAppFlash' : '플래쉬 파ì�¼', 'kindPDF' : 'PDF 문서', 'kindTorrent' : '비트토렌트 파ì�¼', 'kind7z' : '7z 압축파ì�¼', 'kindTAR' : 'TAR 압축파ì�¼', 'kindGZIP' : 'GZIP 압축파ì�¼', 'kindBZIP' : 'BZIP 압축파ì�¼', 'kindXZ' : 'XZ 압축파ì�¼', 'kindZIP' : 'ZIP 압축파ì�¼', 'kindRAR' : 'RAR 압축파ì�¼', 'kindJAR' : 'ìž�ë°” JAR 파ì�¼', 'kindTTF' : '트루 타입 글꼴', 'kindOTF' : '오픈 타입 글꼴', 'kindRPM' : 'RPM 패키지', // fonts 'kindFont' : '글꼴', 'kindSFNT' : 'SFNT 글꼴', 'kindEOT' : 'Embedded Open Type 글꼴', 'kindWOFF' : 'Web Open Font Format 글꼴', 'kindWOFF2' : 'Web Open Font Format 2 글꼴', // texts 'kindText' : 'í…�스트 문서', 'kindTextPlain' : 'ì�¼ë°˜ í…�스트', 'kindPHP' : 'PHP 소스', 'kindCSS' : 'CSS 문서', 'kindHTML' : 'HTML 문서', 'kindJS' : 'ìž�바스í�¬ë¦½íЏ 소스', 'kindRTF' : 'RTF 형ì‹�', 'kindC' : 'C 소스', 'kindCHeader' : 'C í—¤ë�” 소스', 'kindCPP' : 'C++ 소스', 'kindCPPHeader' : 'C++ í—¤ë�” 소스', 'kindShell' : '유닉스 쉘 스í�¬ë¦½íЏ', 'kindPython' : '파ì�´ì�¬ 소스', 'kindJava' : 'ìž�ë°” 소스', 'kindRuby' : '루비 소스', 'kindPerl' : '펄 스í�¬ë¦½íЏ', 'kindSQL' : 'SQL 소스', 'kindXML' : 'XML 문서', 'kindAWK' : 'AWK 소스', 'kindCSV' : 'CSV 파ì�¼', 'kindDOCBOOK' : 'ë‹¥ë¶� XML 문서', 'kindMarkdown' : '마í�¬ë‹¤ìš´ 문서', // added 20.7.2015 // images 'kindImage' : 'ì�´ë¯¸ì§€', 'kindBMP' : 'BMP ì�´ë¯¸ì§€', 'kindJPEG' : 'JPEG ì�´ë¯¸ì§€', 'kindGIF' : 'GIF ì�´ë¯¸ì§€', 'kindPNG' : 'PNG ì�´ë¯¸ì§€', 'kindTIFF' : 'TIFF ì�´ë¯¸ì§€', 'kindTGA' : 'TGA ì�´ë¯¸ì§€', 'kindPSD' : 'Adobe Photoshop ì�´ë¯¸ì§€', 'kindXBITMAP' : 'X 비트맵 ì�´ë¯¸ì§€', 'kindPXM' : 'Pixelmator ì�´ë¯¸ì§€', // media 'kindAudio' : '오디오 미디어', 'kindAudioMPEG' : 'MPEG 오디오', 'kindAudioMPEG4' : 'MPEG-4 오디오', 'kindAudioMIDI' : 'MIDI 오디오', 'kindAudioOGG' : 'Ogg Vorbis 오디오', 'kindAudioWAV' : 'WAV 오디오', 'AudioPlaylist' : 'MP3 플레ì�´ 리스트', 'kindVideo' : 'ë�™ì˜�ìƒ� 미디어', 'kindVideoDV' : 'DV ë�™ì˜�ìƒ�', 'kindVideoMPEG' : 'MPEG ë�™ì˜�ìƒ�', 'kindVideoMPEG4' : 'MPEG-4 ë�™ì˜�ìƒ�', 'kindVideoAVI' : 'AVI ë�™ì˜�ìƒ�', 'kindVideoMOV' : '퀵 타임 ë�™ì˜�ìƒ�', 'kindVideoWM' : '윈ë�„ìš° 미디어 플레ì�´ì–´ ë�™ì˜�ìƒ�', 'kindVideoFlash' : '플래쉬 ë�™ì˜�ìƒ�', 'kindVideoMKV' : 'Matroska ë�™ì˜�ìƒ�', 'kindVideoOGG' : 'Ogg ë�™ì˜�ìƒ�' } }; })); PK!)Âm‰m‰@file-manager-advanced/application/library/js/i18n/elfinder.it.jsnu„[µü¤/** * Italiano translation * @author Alberto Tocci (alberto.tocci@gmail.com) * @author Claudio Nicora (coolsoft.ita@gmail.com) * @author Stefano Galeazzi * @author Thomas Camaran * @author Fabio Ferrero * @version 2023-04-21 */ (function(root, factory) { if (typeof define === 'function' && define.amd) { define(['elfinder'], factory); } else if (typeof exports !== 'undefined') { module.exports = factory(require('elfinder')); } else { factory(root.elFinder); } }(this, function(elFinder) { elFinder.prototype.i18.it = { translator : 'Alberto Tocci (alberto.tocci@gmail.com), Claudio Nicora (coolsoft.ita@gmail.com), Stefano Galeazzi <stefano.galeazzi@probanet.it>, Thomas Camaran <camaran@gmail.com>, Fabio Ferrero <fabioferrero@gmail.com>', language : 'Italiano', direction : 'ltr', dateFormat : 'd/m/Y H:i', // will show like: 21/04/2023 16:21 fancyDateFormat : '$1 H:i', // will show like: Oggi 16:21 nonameDateFormat : 'ymd-His', // noname upload will show like: 230421-162111 messages : { /********************************** errors **********************************/ 'error' : 'Errore', 'errUnknown' : 'Errore sconosciuto.', 'errUnknownCmd' : 'Comando sconosciuto.', 'errJqui' : 'Configurazione JQuery UI non valida. Devono essere inclusi i plugin Selectable, Draggable e Droppable.', 'errNode' : 'elFinder necessita dell\'elemento DOM per essere inizializzato.', 'errURL' : 'Configurazione non valida.Il parametro URL non è settato.', 'errAccess' : 'Accesso negato.', 'errConnect' : 'Impossibile collegarsi al backend.', 'errAbort' : 'Connessione annullata.', 'errTimeout' : 'Timeout di connessione.', 'errNotFound' : 'Backend non trovato.', 'errResponse' : 'Risposta non valida dal backend.', 'errConf' : 'Configurazione backend non valida.', 'errJSON' : 'Modulo PHP JSON non installato.', 'errNoVolumes' : 'Non è stato possibile leggere i volumi.', 'errCmdParams' : 'Parametri non validi per il comando "$1".', 'errDataNotJSON' : 'I dati non sono nel formato JSON.', 'errDataEmpty' : 'Stringa vuota.', 'errCmdReq' : 'La richiesta al backend richiede il nome del comando.', 'errOpen' : 'Impossibile aprire "$1".', 'errNotFolder' : 'L\'oggetto non è una cartella..', 'errNotFile' : 'L\'oggetto non è un file.', 'errRead' : 'Impossibile leggere "$1".', 'errWrite' : 'Non è possibile scrivere in "$1".', 'errPerm' : 'Permesso negato.', 'errLocked' : '"$1" è bloccato e non può essere rinominato, spostato o eliminato.', 'errExists' : 'Il file "$1" è già esistente.', 'errInvName' : 'Nome file non valido.', 'errInvDirname' : 'Nome cartella non valido.', // from v2.1.24 added 12.4.2017 'errFolderNotFound' : 'Cartella non trovata.', 'errFileNotFound' : 'File non trovato.', 'errTrgFolderNotFound' : 'La cartella di destinazione"$1" non è stata trovata.', 'errPopup' : 'Il tuo Browser non consente di aprire finestre di pop-up. Per aprire il file abilita questa opzione nelle impostazioni del tuo Browser.', 'errMkdir' : 'Impossibile creare la cartella "$1".', 'errMkfile' : 'Impossibile creare il file "$1".', 'errRename' : 'Impossibile rinominare "$1".', 'errCopyFrom' : 'Non è possibile copiare file da "$1".', 'errCopyTo' : 'Non è possibile copiare file in "$1".', 'errMkOutLink' : 'Impossibile creare un link all\'esterno della radice del volume.', // from v2.1 added 03.10.2015 'errUpload' : 'Errore di Caricamento.', // old name - errUploadCommon 'errUploadFile' : 'Impossibile Caricare "$1".', // old name - errUpload 'errUploadNoFiles' : 'Non sono stati specificati file da caricare.', 'errUploadTotalSize' : 'La dimensione totale dei file supera il limite massimo consentito.', // old name - errMaxSize 'errUploadFileSize' : 'Le dimensioni del file superano il massimo consentito.', // old name - errFileMaxSize 'errUploadMime' : 'FileType non consentito.', 'errUploadTransfer' : 'Trasferimento errato del file "$1".', 'errUploadTemp' : 'Impossibile creare il file temporaneo per l\'upload.', // from v2.1 added 26.09.2015 'errNotReplace' : 'L\'oggetto "$1" esiste già in questa cartella e non può essere sostituito con un oggetto di un tipo differente.', // new 'errReplace' : 'Impossibile sostituire "$1".', 'errSave' : 'Impossibile salvare "$1".', 'errCopy' : 'Impossibile copiare "$1".', 'errMove' : 'Impossibile spostare "$1".', 'errCopyInItself' : 'Sorgente e destinazione risultato essere uguali.', 'errRm' : 'Impossibile rimuovere "$1".', 'errTrash' : 'Impossibile cestinare.', // from v2.1.24 added 30.4.2017 'errRmSrc' : 'Impossibile eliminare i file origine.', 'errExtract' : 'Impossibile estrarre file da "$1".', 'errArchive' : 'Impossibile creare archivio.', 'errArcType' : 'Tipo di archivio non supportato.', 'errNoArchive' : 'Il file non è un archivio o contiene file non supportati.', 'errCmdNoSupport' : 'Il Backend non supporta questo comando.', 'errReplByChild' : 'La cartella $1 non può essere sostituita da un oggetto in essa contenuto.', 'errArcSymlinks' : 'Per questioni di sicurezza non è possibile estrarre archivi che contengono collegamenti..', // edited 24.06.2012 'errArcMaxSize' : 'La dimensione dell\'archivio supera le massime dimensioni consentite.', 'errResize' : 'Impossibile ridimensionare "$1".', 'errResizeDegree' : 'Angolo di rotazione non valido.', // added 7.3.2013 'errResizeRotate' : 'Impossibile ruotare l\'immagine.', // added 7.3.2013 'errResizeSize' : 'Dimensione dell\'immagine non valida.', // added 7.3.2013 'errResizeNoChange' : 'Dimensione dell\'immagine non modificata.', // added 7.3.2013 'errUsupportType' : 'Tipo di file non supportato.', 'errNotUTF8Content' : 'Il file "$1" non è nel formato UTF-8 e non può essere modificato.', // added 9.11.2011 'errNetMount' : 'Impossibile montare "$1".', // added 17.04.2012 'errNetMountNoDriver' : 'Protocollo non supportato.', // added 17.04.2012 'errNetMountFailed' : 'Mount fallito.', // added 17.04.2012 'errNetMountHostReq' : 'Host richiesto.', // added 18.04.2012 'errSessionExpires' : 'La sessione è scaduta a causa di inattività.', 'errCreatingTempDir' : 'Impossibile creare la cartella temporanea: "$1"', 'errFtpDownloadFile' : 'Impossibile scaricare il file tramite FTP: "$1"', 'errFtpUploadFile' : 'Impossibile caricare il file tramite FTP: "$1"', 'errFtpMkdir' : 'Impossibile creare la cartella remota tramite FTP: "$1"', 'errArchiveExec' : 'Errore durante l\'archiviazione dei file: "$1"', 'errExtractExec' : 'Errore durante l\'estrazione dei file: "$1"', 'errNetUnMount' : 'Impossibile smontare', // from v2.1 added 30.04.2012 'errConvUTF8' : 'Non convertibile nel formato UTF-8', // from v2.1 added 08.04.2014 'errFolderUpload' : 'Per uploadare l0intera cartella usare Google Chrome.', // from v2.1 added 26.6.2015 'errSearchTimeout' : 'Timeout durante la ricerca di "$1". I risultati della ricerca sono parziali.', // from v2.1 added 12.1.2016 'errReauthRequire' : 'E\' necessaria la riautorizzazione.', // from v2.1.10 added 24.3.2016 'errMaxTargets' : 'Il numero massimo di oggetti selezionabili è $1.', // from v2.1.17 added 17.10.2016 'errRestore' : 'Impossibile ripristinare dal cestino: destinazione di ripristino non trovata.', // from v2.1.24 added 3.5.2017 'errEditorNotFound' : 'Impossibile trovare un editor per questo tipo di file.', // from v2.1.25 added 23.5.2017 'errServerError' : 'Si è verificato un errore lato server.', // from v2.1.25 added 16.6.2017 'errEmpty' : 'Impossibile svuotare la cartella "$1".', // from v2.1.25 added 22.6.2017 'moreErrors' : 'Ci sono $1 ulteriori errori.', // from v2.1.44 added 9.12.2018 'errMaxMkdirs' : 'Puoi creare fino a $1 cartelle alla volta.', // from v2.1.58 added 20.6.2021 /******************************* commands names ********************************/ 'cmdarchive' : 'Crea archivio', 'cmdback' : 'Indietro', 'cmdcopy' : 'Copia', 'cmdcut' : 'Taglia', 'cmddownload' : 'Scarica', 'cmdduplicate' : 'Duplica', 'cmdedit' : 'Modifica File', 'cmdextract' : 'Estrai Archivio', 'cmdforward' : 'Avanti', 'cmdgetfile' : 'Seleziona File', 'cmdhelp' : 'Informazioni su...', 'cmdhome' : 'Home', 'cmdinfo' : 'Informazioni', 'cmdmkdir' : 'Nuova cartella', 'cmdmkdirin' : 'In una nuova cartella', // from v2.1.7 added 19.2.2016 'cmdmkfile' : 'Nuovo file', 'cmdopen' : 'Apri', 'cmdpaste' : 'Incolla', 'cmdquicklook' : 'Anteprima', 'cmdreload' : 'Ricarica', 'cmdrename' : 'Rinomina', 'cmdrm' : 'Elimina', 'cmdtrash' : 'Nel cestino', //from v2.1.24 added 29.4.2017 'cmdrestore' : 'Ripristina', //from v2.1.24 added 3.5.2017 'cmdsearch' : 'Ricerca file', 'cmdup' : 'Vai alla directory padre', 'cmdupload' : 'Carica File', 'cmdview' : 'Visualizza', 'cmdresize' : 'Ridimensiona Immagine', 'cmdsort' : 'Ordina', 'cmdnetmount' : 'Monta disco di rete', // added 18.04.2012 'cmdnetunmount': 'Smonta', // from v2.1 added 30.04.2012 'cmdplaces' : 'Aggiungi ad Accesso rapido', // added 28.12.2014 'cmdchmod' : 'Cambia modalità', // from v2.1 added 20.6.2015 'cmdopendir' : 'Apri una cartella', // from v2.1 added 13.1.2016 'cmdcolwidth' : 'Reimposta dimensione colonne', // from v2.1.13 added 12.06.2016 'cmdfullscreen': 'Schermo intero', // from v2.1.15 added 03.08.2016 'cmdmove' : 'Sposta', // from v2.1.15 added 21.08.2016 'cmdempty' : 'Svuota la cartella', // from v2.1.25 added 22.06.2017 'cmdundo' : 'Annulla', // from v2.1.27 added 31.07.2017 'cmdredo' : 'Ripeti', // from v2.1.27 added 31.07.2017 'cmdpreference': 'Preferenze', // from v2.1.27 added 03.08.2017 'cmdselectall' : 'Seleziona tutto', // from v2.1.28 added 15.08.2017 'cmdselectnone': 'Annulla selezione', // from v2.1.28 added 15.08.2017 'cmdselectinvert': 'Inverti selezione', // from v2.1.28 added 15.08.2017 'cmdopennew' : 'Apri in una nuova finestra', // from v2.1.38 added 3.4.2018 'cmdhide' : 'Nascondi (Preference)', // from v2.1.41 added 24.7.2018 /*********************************** buttons ***********************************/ 'btnClose' : 'Chiudi', 'btnSave' : 'Salva', 'btnRm' : 'Elimina', 'btnApply' : 'Applica', 'btnCancel' : 'Annulla', 'btnNo' : 'No', 'btnYes' : 'Sì', 'btnDiscard': 'Scartare le modifiche', 'btnMount' : 'Monta', // added 18.04.2012 'btnApprove': 'Vai a $1 & approva', // from v2.1 added 26.04.2012 'btnUnmount': 'Smonta', // from v2.1 added 30.04.2012 'btnConv' : 'Converti', // from v2.1 added 08.04.2014 'btnCwd' : 'Qui', // from v2.1 added 22.5.2015 'btnVolume' : 'Disco', // from v2.1 added 22.5.2015 'btnAll' : 'Tutti', // from v2.1 added 22.5.2015 'btnMime' : 'Tipo MIME', // from v2.1 added 22.5.2015 'btnFileName':'Nome file', // from v2.1 added 22.5.2015 'btnSaveClose': 'Salva & Chiudi', // from v2.1 added 12.6.2015 'btnBackup' : 'Backup', // fromv2.1 added 28.11.2015 'btnRename' : 'Rinomina', // from v2.1.24 added 6.4.2017 'btnRenameAll' : 'Rinomina (tutto)', // from v2.1.24 added 6.4.2017 'btnPrevious' : 'Indietro ($1/$2)', // from v2.1.24 added 11.5.2017 'btnNext' : 'Avanti ($1/$2)', // from v2.1.24 added 11.5.2017 'btnSaveAs' : 'Salva come', // from v2.1.25 added 24.5.2017 /******************************** notifications ********************************/ 'ntfopen' : 'Apri cartella', 'ntffile' : 'Apri file', 'ntfreload' : 'Ricarica il contenuto della cartella', 'ntfmkdir' : 'Creazione delle directory in corso', 'ntfmkfile' : 'Creazione dei files in corso', 'ntfrm' : 'Eliminazione dei files in corso', 'ntfcopy' : 'Copia file in corso', 'ntfmove' : 'Spostamento file in corso', 'ntfprepare' : 'Preparazione della copia dei file.', 'ntfrename' : 'Sto rinominando i file', 'ntfupload' : 'Caricamento file in corso', 'ntfdownload' : 'Downloading file in corso', 'ntfsave' : 'Salvataggio file in corso', 'ntfarchive' : 'Creazione archivio in corso', 'ntfextract' : 'Estrazione file dall\'archivio in corso', 'ntfsearch' : 'Ricerca files in corso', 'ntfresize' : 'Ridimensionamento immagini', 'ntfsmth' : 'Operazione in corso. Attendere...', 'ntfloadimg' : 'Caricamento immagine in corso', 'ntfnetmount' : 'Montaggio disco di rete', // added 18.04.2012 'ntfnetunmount': 'Smontaggio disco di rete', // from v2.1 added 30.04.2012 'ntfdim' : 'Lettura dimensioni immagine', // added 20.05.2013 'ntfreaddir' : 'Lettura informazioni cartella', // from v2.1 added 01.07.2013 'ntfurl' : 'Lettura URL del collegamento', // from v2.1 added 11.03.2014 'ntfchmod' : 'Modifica della modalità del file', // from v2.1 added 20.6.2015 'ntfpreupload': 'Verifica del nome del file caricato', // from v2.1 added 31.11.2015 'ntfzipdl' : 'Creazione del file da scaricare', // from v2.1.7 added 23.1.2016 'ntfparents' : 'Ottenimento informazioni percorso', // from v2.1.17 added 2.11.2016 'ntfchunkmerge': 'Processazione file caricato', // from v2.1.17 added 2.11.2016 'ntftrash' : 'Spostamento nel cestino', // from v2.1.24 added 2.5.2017 'ntfrestore' : 'Ripristino dal cestino', // from v2.1.24 added 3.5.2017 'ntfchkdir' : 'Controllo cartella destinazione', // from v2.1.24 added 3.5.2017 'ntfundo' : 'Annullamento operazione precedente', // from v2.1.27 added 31.07.2017 'ntfredo' : 'Rifacimento precedente annullamento', // from v2.1.27 added 31.07.2017 'ntfchkcontent' : 'Controllo contenuto', // from v2.1.41 added 3.8.2018 /*********************************** volumes *********************************/ 'volume_Trash' : 'Cestino', //from v2.1.24 added 29.4.2017 /************************************ dates **********************************/ 'dateUnknown' : 'Sconosciuto', 'Today' : 'Oggi', 'Yesterday' : 'Ieri', 'msJan' : 'Gen', 'msFeb' : 'Feb', 'msMar' : 'Mar', 'msApr' : 'Apr', 'msMay' : 'Mag', 'msJun' : 'Giu', 'msJul' : 'Lug', 'msAug' : 'Ago', 'msSep' : 'Set', 'msOct' : 'Ott', 'msNov' : 'Nov', 'msDec' : 'Dic', 'January' : 'Gennaio', 'February' : 'Febbraio', 'March' : 'Marzo', 'April' : 'Aprile', 'May' : 'Maggio', 'June' : 'Giugno', 'July' : 'Luglio', 'August' : 'Agosto', 'September' : 'Settembre', 'October' : 'Ottobre', 'November' : 'Novembre', 'December' : 'Dicembre', 'Sunday' : 'Domenica', 'Monday' : 'Lunedì', 'Tuesday' : 'Martedì', 'Wednesday' : 'Mercoledì', 'Thursday' : 'Giovedì', 'Friday' : 'Venerdì', 'Saturday' : 'Sabato', 'Sun' : 'Dom', 'Mon' : 'Lun', 'Tue' : 'Mar', 'Wed' : 'Mer', 'Thu' : 'Gio', 'Fri' : 'Ven', 'Sat' : 'Sab', /******************************** sort variants ********************************/ 'sortname' : 'per nome', 'sortkind' : 'per tipo', 'sortsize' : 'per dimensione', 'sortdate' : 'per data', 'sortFoldersFirst' : 'cartelle in testa', 'sortperm' : 'per permessi', // from v2.1.13 added 13.06.2016 'sortmode' : 'per modalità', // from v2.1.13 added 13.06.2016 'sortowner' : 'per possessore', // from v2.1.13 added 13.06.2016 'sortgroup' : 'per gruppo', // from v2.1.13 added 13.06.2016 'sortAlsoTreeview' : 'Anche vista ad albero', // from v2.1.15 added 01.08.2016 /********************************** new items **********************************/ 'untitled file.txt' : 'NuovoFile.txt', // added 10.11.2015 'untitled folder' : 'NuovaCartella', // added 10.11.2015 'Archive' : 'NuovoArchivio', // from v2.1 added 10.11.2015 'untitled file' : 'NuovoFile.$1', // from v2.1.41 added 6.8.2018 'extentionfile' : '$1: File', // from v2.1.41 added 6.8.2018 'extentiontype' : '$1: $2', // from v2.1.43 added 17.10.2018 /********************************** messages **********************************/ 'confirmReq' : 'Conferma richiesta', 'confirmRm' : 'Sei sicuro di voler eliminare i file?
          L\'operazione non è reversibile!', 'confirmRepl' : 'Sostituire i file ?', 'confirmRest' : 'Rimpiazza l\'oggetto esistente con quello nel cestino?', // fromv2.1.24 added 5.5.2017 'confirmConvUTF8' : 'Non in formato UTF-8
          Convertire in UTF-8?
          Il contenuto diventerà UTF-8 salvando dopo la conversione.', // from v2.1 added 08.04.2014 'confirmNonUTF8' : 'La codifica caratteri di questo file non può essere determinata. Sarà temporaneamente convertito in UTF-8 per l\'editting.
          Per cortesia, selezionare la codifica caratteri per il file.', // from v2.1.19 added 28.11.2016 'confirmNotSave' : 'Il contenuto è stato modificato.
          Le modifiche andranno perse se non si salveranno.', // from v2.1 added 15.7.2015 'confirmTrash' : 'Sei sicuro di voler cestinare gli oggetti?', //from v2.1.24 added 29.4.2017 'confirmMove' : 'Sei sicuro di voler spostare gli oggetti in "$1"?', //from v2.1.50 added 27.7.2019 'apllyAll' : 'Applica a tutti', 'name' : 'Nome', 'size' : 'Dimensione', 'perms' : 'Permessi', 'modify' : 'Modificato il', 'kind' : 'Tipo', 'read' : 'lettura', 'write' : 'scrittura', 'noaccess' : 'nessun accesso', 'and' : 'e', 'unknown' : 'sconosciuto', 'selectall' : 'Seleziona tutti i file', 'selectfiles' : 'Seleziona file', 'selectffile' : 'Seleziona il primo file', 'selectlfile' : 'Seleziona l\'ultimo file', 'viewlist' : 'Visualizza Elenco', 'viewicons' : 'Visualizza Icone', 'viewSmall' : 'Icone piccole', // from v2.1.39 added 22.5.2018 'viewMedium' : 'Icone medie', // from v2.1.39 added 22.5.2018 'viewLarge' : 'Icone grandi', // from v2.1.39 added 22.5.2018 'viewExtraLarge' : 'Icone molto grandi', // from v2.1.39 added 22.5.2018 'places' : 'Accesso rapido', 'calc' : 'Calcola', 'path' : 'Percorso', 'aliasfor' : 'Alias per', 'locked' : 'Bloccato', 'dim' : 'Dimensioni', 'files' : 'File', 'folders' : 'Cartelle', 'items' : 'Oggetti', 'yes' : 'sì', 'no' : 'no', 'link' : 'Collegamento', 'searcresult' : 'Risultati ricerca', 'selected' : 'oggetti selezionati', 'about' : 'Informazioni', 'shortcuts' : 'Scorciatoie', 'help' : 'Aiuto', 'webfm' : 'Gestore file WEB', 'ver' : 'Versione', 'protocolver' : 'versione protocollo', 'homepage' : 'Home del progetto', 'docs' : 'Documentazione', 'github' : 'Seguici su Github', 'twitter' : 'Seguici su Twitter', 'facebook' : 'Seguici su Facebook', 'team' : 'Gruppo', 'chiefdev' : 'sviluppatore capo', 'developer' : 'sviluppatore', 'contributor' : 'collaboratore', 'maintainer' : 'manutentore', 'translator' : 'traduttore', 'icons' : 'Icone', 'dontforget' : 'e non dimenticate di portare l\'asciugamano', 'shortcutsof' : 'Scorciatoie disabilitate', 'dropFiles' : 'Trascina i file qui', 'or' : 'o', 'selectForUpload' : 'Seleziona file da caricare', 'moveFiles' : 'Sposta file', 'copyFiles' : 'Copia file', 'restoreFiles' : 'Ripristina oggetti', // from v2.1.24 added 5.5.2017 'rmFromPlaces' : 'Rimuovi da Accesso rapido', 'aspectRatio' : 'Proporzioni', 'scale' : 'Scala', 'width' : 'Larghezza', 'height' : 'Altezza', 'resize' : 'Ridimensione', 'crop' : 'Ritaglia', 'rotate' : 'Ruota', 'rotate-cw' : 'Ruota di 90° in senso orario', 'rotate-ccw' : 'Ruota di 90° in senso antiorario', 'degree' : 'Gradi', 'netMountDialogTitle' : 'Monta disco di rete', // added 18.04.2012 'protocol' : 'Protocollo', // added 18.04.2012 'host' : 'Host', // added 18.04.2012 'port' : 'Porta', // added 18.04.2012 'user' : 'Utente', // added 18.04.2012 'pass' : 'Password', // added 18.04.2012 'confirmUnmount' : 'Vuoi smontare $1?', // from v2.1 added 30.04.2012 'dropFilesBrowser': 'Rilascia o incolla dal browser', // from v2.1 added 30.05.2012 'dropPasteFiles' : 'Rilascia o incolla files e indirizzi URL qui', // from v2.1 added 07.04.2014 'encoding' : 'Codifica', // from v2.1 added 19.12.2014 'locale' : 'Lingua', // from v2.1 added 19.12.2014 'searchTarget' : 'Destinazione: $1', // from v2.1 added 22.5.2015 'searchMime' : 'Cerca per MIME Type', // from v2.1 added 22.5.2015 'owner' : 'Possessore', // from v2.1 added 20.6.2015 'group' : 'Gruppo', // from v2.1 added 20.6.2015 'other' : 'Altri', // from v2.1 added 20.6.2015 'execute' : 'Esegui', // from v2.1 added 20.6.2015 'perm' : 'Permessi', // from v2.1 added 20.6.2015 'mode' : 'Modalità', // from v2.1 added 20.6.2015 'emptyFolder' : 'La cartella è vuota', // from v2.1.6 added 30.12.2015 'emptyFolderDrop' : 'La cartella è vuota\\A Trascina e rilascia per aggiungere elementi', // from v2.1.6 added 30.12.2015 'emptyFolderLTap' : 'La cartella è vuota\\A Premi a lungo per aggiungere elementi', // from v2.1.6 added 30.12.2015 'quality' : 'Qualità', // from v2.1.6 added 5.1.2016 'autoSync' : 'Sincr. automatica', // from v2.1.6 added 10.1.2016 'moveUp' : 'Sposta in alto', // from v2.1.6 added 18.1.2016 'getLink' : 'Mostra URL link', // from v2.1.7 added 9.2.2016 'selectedItems' : 'Elementi selezionati ($1)', // from v2.1.7 added 2.19.2016 'folderId' : 'ID cartella', // from v2.1.10 added 3.25.2016 'offlineAccess' : 'Permetti accesso non in linea', // from v2.1.10 added 3.25.2016 'reAuth' : 'Per ri-autenticarsi', // from v2.1.10 added 3.25.2016 'nowLoading' : 'Caricamento...', // from v2.1.12 added 4.26.2016 'openMulti' : 'Apri più files', // from v2.1.12 added 5.14.2016 'openMultiConfirm': 'Stai cercando di aprire $1 files. Sei sicuro di volerli aprire nel browser?', // from v2.1.12 added 5.14.2016 'emptySearch' : 'Nessun risultato soddisfa i criteri di ricerca', // from v2.1.12 added 5.16.2016 'editingFile' : 'Il file è in modifica.', // from v2.1.13 added 6.3.2016 'hasSelected' : '$1 elementi sono selezionati.', // from v2.1.13 added 6.3.2016 'hasClipboard' : '$1 elementi negli appunti.', // from v2.1.13 added 6.3.2016 'incSearchOnly' : 'La ricerca incrementale è solo dalla vista corrente.', // from v2.1.13 added 6.30.2016 'reinstate' : 'Reistanzia', // from v2.1.15 added 3.8.2016 'complete' : '$1 completato', // from v2.1.15 added 21.8.2016 'contextmenu' : 'Menu contestuale', // from v2.1.15 added 9.9.2016 'pageTurning' : 'Orientamento pagina', // from v2.1.15 added 10.9.2016 'volumeRoots' : 'Percorsi base del volume', // from v2.1.16 added 16.9.2016 'reset' : 'Resetta', // from v2.1.16 added 1.10.2016 'bgcolor' : 'Colore di sfondo', // from v2.1.16 added 1.10.2016 'colorPicker' : 'Selettore colori', // from v2.1.16 added 1.10.2016 '8pxgrid' : 'Griglia di 8px', // from v2.1.16 added 4.10.2016 'enabled' : 'Abilitato', // from v2.1.16 added 4.10.2016 'disabled' : 'Disabilitato', // from v2.1.16 added 4.10.2016 'emptyIncSearch' : 'Nessun risultato di ricerca nella vista corrente\\APremere [Invio] per espandere l\'oggetto della ricerca.', // from v2.1.16 added 5.10.2016 'emptyLetSearch' : 'Nessun risultato di ricerca tramite prima lettera nella vista corrente.', // from v2.1.23 added 24.3.2017 'textLabel' : 'Etichetta di testo', // from v2.1.17 added 13.10.2016 'minsLeft' : '$1 minuti rimanenti', // from v2.1.17 added 13.11.2016 'openAsEncoding' : 'Riapri con la codifica di caratteri selezionata', // from v2.1.19 added 2.12.2016 'saveAsEncoding' : 'Salva con la codifica di caratteri selezionata', // from v2.1.19 added 2.12.2016 'selectFolder' : 'Seleziona cartella', // from v2.1.20 added 13.12.2016 'firstLetterSearch': 'Cerca tramite la prima lettera', // from v2.1.23 added 24.3.2017 'presets' : 'Opzioni predefinite', // from v2.1.25 added 26.5.2017 'tooManyToTrash' : 'Troppi oggetti da spostare nel cestino', // from v2.1.25 added 9.6.2017 'TextArea' : 'Area di testo', // from v2.1.25 added 14.6.2017 'folderToEmpty' : 'Svuota la cartella "$1".', // from v2.1.25 added 22.6.2017 'filderIsEmpty' : 'Non ci sono oggetti nella cartella "$1".', // from v2.1.25 added 22.6.2017 'preference' : 'Preferenze', // from v2.1.26 added 28.6.2017 'language' : 'Impostazioni Lingua', // from v2.1.26 added 28.6.2017 'clearBrowserData': 'Inizializza le impostazioni salvate nel browser', // from v2.1.26 added 28.6.2017 'toolbarPref' : 'Impostazioni ToolBar', // from v2.1.27 added 2.8.2017 'charsLeft' : '... $1 caratteri rimanenti.', // from v2.1.29 added 30.8.2017 'linesLeft' : '... $1 linee rimaste.', // from v2.1.52 added 16.1.2020 'sum' : 'Somma', // from v2.1.29 added 28.9.2017 'roughFileSize' : 'Dimensione file approssimativa', // from v2.1.30 added 2.11.2017 'autoFocusDialog' : 'Fuoco sull\'elemento sotto al mouse', // from v2.1.30 added 2.11.2017 'select' : 'Seleziona', // from v2.1.30 added 23.11.2017 'selectAction' : 'Azione quando un file è selezionato', // from v2.1.30 added 23.11.2017 'useStoredEditor' : 'Apri con l\'editor usato l\'ultima volta', // from v2.1.30 added 23.11.2017 'selectinvert' : 'Inverti selezione', // from v2.1.30 added 25.11.2017 'renameMultiple' : 'Sei sicuro di voler rinominare $1 selezionati come $2?
          Questo non può essere annullato!', // from v2.1.31 added 4.12.2017 'batchRename' : 'Rinomina gruppo', // from v2.1.31 added 8.12.2017 'plusNumber' : '+ Numero', // from v2.1.31 added 8.12.2017 'asPrefix' : 'Aggiungi prefisso', // from v2.1.31 added 8.12.2017 'asSuffix' : 'Aggiungi sufisso', // from v2.1.31 added 8.12.2017 'changeExtention' : 'Cambia estensione', // from v2.1.31 added 8.12.2017 'columnPref' : 'Impostazioni delle colonne (visualizzazione elenco)', // from v2.1.32 added 6.2.2018 'reflectOnImmediate' : 'Tutti i cambiamenti saranno immeditamente applicati.', // from v2.1.33 added 2.3.2018 'reflectOnUnmount' : 'Qualsiasi modifica non sarà visibile fino a quando non si monta questo volume.', // from v2.1.33 added 2.3.2018 'unmountChildren' : 'I seguenti volumi montati su questo volume saranno smontati. Sei sicuro di volerlo smontare?', // from v2.1.33 added 5.3.2018 'selectionInfo' : 'Seleziona Info', // from v2.1.33 added 7.3.2018 'hashChecker' : 'Algoritmi per visualizzare l\'hash del file', // from v2.1.33 added 10.3.2018 'infoItems' : 'Informazioni (pannello di informazioni sulla selezione)', // from v2.1.38 added 28.3.2018 'pressAgainToExit': 'Premi di nuovo per uscire.', // from v2.1.38 added 1.4.2018 'toolbar' : 'Toolbar', // from v2.1.38 added 4.4.2018 'workspace' : 'Spazio di lavoro', // from v2.1.38 added 4.4.2018 'dialog' : 'Dialogo', // from v2.1.38 added 4.4.2018 'all' : 'Tutti', // from v2.1.38 added 4.4.2018 'iconSize' : 'Dimensione icona (Visualizzazione icone)', // from v2.1.39 added 7.5.2018 'editorMaximized' : 'Apri la finestra di modifica massimizzata', // from v2.1.40 added 30.6.2018 'editorConvNoApi' : 'Dato che le API di conversione non sono disponibili, effettua la conversione sul sito web.', //from v2.1.40 added 8.7.2018 'editorConvNeedUpload' : 'Dopo la conversione, devi caricarlo con l\'URL o con il file scaricato per salvare il file convertito.', //from v2.1.40 added 8.7.2018 'convertOn' : 'Converti sul sito di $1', // from v2.1.40 added 10.7.2018 'integrations' : 'Integrazioni', // from v2.1.40 added 11.7.2018 'integrationWith' : 'Questo elFinder ha i seguenti servizi esterni integrati. Controlla i termini di utilizzo, le politiche sulla privacy, etc, prima di utilizzarli.', // from v2.1.40 added 11.7.2018 'showHidden' : 'Mostra oggetti nascosti', // from v2.1.41 added 24.7.2018 'hideHidden' : 'Nascondi oggetti nascosti', // from v2.1.41 added 24.7.2018 'toggleHidden' : 'Visualizza/Nascondi oggetti nascosti', // from v2.1.41 added 24.7.2018 'makefileTypes' : 'Tipi di file da abilitare con "Nuovo file"', // from v2.1.41 added 7.8.2018 'typeOfTextfile' : 'Tipo del file di testo', // from v2.1.41 added 7.8.2018 'add' : 'Aggiungi', // from v2.1.41 added 7.8.2018 'theme' : 'Tema', // from v2.1.43 added 19.10.2018 'default' : 'Default', // from v2.1.43 added 19.10.2018 'description' : 'Descrizione', // from v2.1.43 added 19.10.2018 'website' : 'Website', // from v2.1.43 added 19.10.2018 'author' : 'Autore', // from v2.1.43 added 19.10.2018 'email' : 'Email', // from v2.1.43 added 19.10.2018 'license' : 'Licenza', // from v2.1.43 added 19.10.2018 'exportToSave' : 'L\'oggetto non può essere salvato. Per non perdere le modifiche, devi esportarlo sul tuo computer.', // from v2.1.44 added 1.12.2018 'dblclickToSelect': 'Doppio click sul file per selezionarlo.', // from v2.1.47 added 22.1.2019 'useFullscreen' : 'Usa schermo intero', // from v2.1.47 added 19.2.2019 /********************************** mimetypes **********************************/ 'kindUnknown' : 'Sconosciuto', 'kindRoot' : 'Percorso base del volume', // from v2.1.16 added 16.10.2016 'kindFolder' : 'Cartella', 'kindSelects' : 'Selezioni', // from v2.1.29 added 29.8.2017 'kindAlias' : 'Alias', 'kindAliasBroken' : 'Alias guasto', // applications 'kindApp' : 'Applicazione', 'kindPostscript' : 'Documento Postscript', 'kindMsOffice' : 'Documento Microsoft Office', 'kindMsWord' : 'Documento Microsoft Word', 'kindMsExcel' : 'Documento Microsoft Excel', 'kindMsPP' : 'Presentazione Microsoft Powerpoint', 'kindOO' : 'Documento Open Office', 'kindAppFlash' : 'Applicazione Flash', 'kindPDF' : 'Documento PDF', 'kindTorrent' : 'File Bittorrent', 'kind7z' : 'Archivio 7z', 'kindTAR' : 'Archivio TAR', 'kindGZIP' : 'Archivio GZIP', 'kindBZIP' : 'Archivio BZIP', 'kindXZ' : 'Archivio XZ', 'kindZIP' : 'Archivio ZIP', 'kindRAR' : 'Archivio RAR', 'kindJAR' : 'File Java JAR', 'kindTTF' : 'Font True Type', 'kindOTF' : 'Font Open Type', 'kindRPM' : 'Pacchetto RPM', // fonts 'kindFont' : 'File font', 'kindSFNT' : 'Font SFNT', 'kindEOT' : 'Font Embedded Open Type', 'kindWOFF' : 'Font Web Open Font Format', 'kindWOFF2' : 'Font Web Open Font Format 2', // texts 'kindText' : 'Documento di testo', 'kindTextPlain' : 'Testo Semplice', 'kindPHP' : 'File PHP', 'kindCSS' : 'File CSS (Cascading Style Sheet)', 'kindHTML' : 'Documento HTML', 'kindJS' : 'File Javascript', 'kindRTF' : 'File RTF (Rich Text Format)', 'kindC' : 'File C', 'kindCHeader' : 'File C (header)', 'kindCPP' : 'File C++', 'kindCPPHeader' : 'File C++ (header)', 'kindShell' : 'Script Unix shell', 'kindPython' : 'File Python', 'kindJava' : 'File Java', 'kindRuby' : 'File Ruby', 'kindPerl' : 'File Perl', 'kindSQL' : 'File SQL', 'kindXML' : 'File XML', 'kindAWK' : 'File AWK', 'kindCSV' : 'File CSV (Comma separated values)', 'kindDOCBOOK' : 'File Docbook XML', 'kindMarkdown' : 'Testo markdown', // added 20.7.2015 // images 'kindImage' : 'Immagine', 'kindBMP' : 'Immagine BMP', 'kindJPEG' : 'Immagine JPEG', 'kindGIF' : 'Immagine GIF', 'kindPNG' : 'Immagine PNG', 'kindTIFF' : 'Immagine TIFF', 'kindTGA' : 'Immagine TGA', 'kindPSD' : 'Immagine Adobe Photoshop', 'kindXBITMAP' : 'Immagine X bitmap', 'kindPXM' : 'Immagine Pixelmator', // media 'kindAudio' : 'File Audio', 'kindAudioMPEG' : 'Audio MPEG', 'kindAudioMPEG4' : 'Audio MPEG-4', 'kindAudioMIDI' : 'Audio MIDI', 'kindAudioOGG' : 'Audio Ogg Vorbis', 'kindAudioWAV' : 'Audio WAV', 'AudioPlaylist' : 'Playlist MP3', 'kindVideo' : 'File Video', 'kindVideoDV' : 'Filmato DV', 'kindVideoMPEG' : 'Filmato MPEG', 'kindVideoMPEG4' : 'Filmato MPEG-4', 'kindVideoAVI' : 'Filmato AVI', 'kindVideoMOV' : 'Filmato Quick Time', 'kindVideoWM' : 'Filmato Windows Media', 'kindVideoFlash' : 'Filmato Flash', 'kindVideoMKV' : 'Filmato Matroska', 'kindVideoOGG' : 'Filmato Ogg' } }; })); PK!ãÖ`¿þ…þ…@file-manager-advanced/application/library/js/i18n/elfinder.hu.jsnu„[µü¤/** * Hungarian translation * @author Gáspár Lajos * @author karrak1 * @version 2020-11-27 */ (function(root, factory) { if (typeof define === 'function' && define.amd) { define(['elfinder'], factory); } else if (typeof exports !== 'undefined') { module.exports = factory(require('elfinder')); } else { factory(root.elFinder); } }(this, function(elFinder) { elFinder.prototype.i18.hu = { translator : 'Gáspár Lajos <info@glsys.eu>, karrak1', language : 'Hungarian', direction : 'ltr', dateFormat : 'Y.F.d H:i:s', // will show like: 2020.November.27 20:52:18 fancyDateFormat : '$1 H:i', // will show like: Ma 20:52 nonameDateFormat : 'ymd-His', // noname upload will show like: 201127-205218 messages : { /********************************** errors **********************************/ 'error' : 'Hiba', 'errUnknown' : 'Ismeretlen hiba.', 'errUnknownCmd' : 'Ismeretlen parancs.', 'errJqui' : 'Hibás jQuery UI konfiguráció. A "selectable", "draggable" és a "droppable" komponensek szükségesek.', 'errNode' : 'Az elFinder "DOM" elem létrehozását igényli.', 'errURL' : 'Hibás elFinder konfiguráció! "URL" paraméter nincs megadva.', 'errAccess' : 'Hozzáférés megtagadva.', 'errConnect' : 'Nem sikerült csatlakozni a kiszolgálóhoz.', 'errAbort' : 'Kapcsolat megszakítva.', 'errTimeout' : 'Kapcsolat idÅ‘túllépés.', 'errNotFound' : 'A backend nem elérhetÅ‘.', 'errResponse' : 'Hibás backend válasz.', 'errConf' : 'Hibás backend konfiguráció.', 'errJSON' : 'PHP JSON modul nincs telepítve.', 'errNoVolumes' : 'Nem állnak rendelkezésre olvasható kötetek.', 'errCmdParams' : 'érvénytelen paraméterek a parancsban. ("$1")', 'errDataNotJSON' : 'A válasz nem JSON típusú adat.', 'errDataEmpty' : 'Nem érkezett adat.', 'errCmdReq' : 'A backend kérelem parancsnevet igényel.', 'errOpen' : '"$1" megnyitása nem sikerült.', 'errNotFolder' : 'Az objektum nem egy mappa.', 'errNotFile' : 'Az objektum nem egy fájl.', 'errRead' : '"$1" olvasása nem sikerült.', 'errWrite' : '"$1" írása nem sikerült.', 'errPerm' : 'Engedély megtagadva.', 'errLocked' : '"$1" zárolás alatt van, és nem lehet átnevezni, mozgatni vagy eltávolítani.', 'errExists' : '"$1" nevű fájl már létezik.', 'errInvName' : 'Érvénytelen fáljnév.', 'errInvDirname' : 'Invalid folder name.', // from v2.1.24 added 12.4.2017 'errFolderNotFound' : 'Mappa nem található.', 'errFileNotFound' : 'Fájl nem található.', 'errTrgFolderNotFound' : 'Cél mappa nem található. ("$1")', 'errPopup' : 'A böngészÅ‘ megakadályozta egy felugró ablak megnyitását. A fájl megnyitását tegye lehetÅ‘vé a böngészÅ‘ beállitásaiban.', 'errMkdir' : '"$1" mappa létrehozása sikertelen.', 'errMkfile' : '"$1" fájl létrehozása sikertelen.', 'errRename' : '"$1" átnevezése sikertelen.', 'errCopyFrom' : 'Fájlok másolása a kötetrÅ‘l nem megengedett. ("$1")', 'errCopyTo' : 'Fájlok másolása a kötetre nem megengedett. ("$1")', 'errMkOutLink' : 'Hivatkozás létrehozása a root köteten kívül nem megengedett.', // from v2.1 added 03.10.2015 'errUpload' : 'Feltöltési hiba.', // old name - errUploadCommon 'errUploadFile' : 'Nem sikerült a fájlt feltölteni. ($1)', // old name - errUpload 'errUploadNoFiles' : 'Nem található fájl feltöltéshez.', 'errUploadTotalSize' : 'Az adat meghaladja a maximálisan megengedett méretet.', // old name - errMaxSize 'errUploadFileSize' : 'A fájl meghaladja a maximálisan megengedett méretet.', // old name - errFileMaxSize 'errUploadMime' : 'A fájltípus nem engedélyezett.', 'errUploadTransfer' : '"$1" transzfer hiba.', 'errUploadTemp' : 'Sikertelen az ideiglenes fájl léterhezozása feltöltéshez.', // from v2.1 added 26.09.2015 'errNotReplace' : 'Az objektum "$1" már létezik ezen a helyen, és nem lehet cserélni másik típusra', // new 'errReplace' : '"$1" nem cserélhetÅ‘.', 'errSave' : '"$1" mentése nem sikerült.', 'errCopy' : '"$1" másolása nem sikerült.', 'errMove' : '"$1" áthelyezése nem sikerült.', 'errCopyInItself' : '"$1" nem másolható saját magára.', 'errRm' : '"$1" törlése nem sikerült.', 'errTrash' : 'Unable into trash.', // from v2.1.24 added 30.4.2017 'errRmSrc' : 'Forrásfájl(ok) eltávolítása sikertelen.', 'errExtract' : 'Nem sikerült kikibontani a "$1" fájlokat.', 'errArchive' : 'Nem sikerült létrehozni az archívumot.', 'errArcType' : 'Nem támogatott archívum típus.', 'errNoArchive' : 'A fájl nem archív, vagy nem támogatott archívumtípust tartalmaz.', 'errCmdNoSupport' : 'A backend nem támogatja ezt a parancsot.', 'errReplByChild' : 'Az „$1â€� mappát nem lehet helyettesíteni egy abban található elemmel.', 'errArcSymlinks' : 'Biztonsági okokból az archívumok kicsomagolásának megtagadása szimbolikus linkeket vagy fájlokat tartalmaz, amelyek nem engedélyezettek.', // edited 24.06.2012 'errArcMaxSize' : 'Az archív fájlok meghaladják a megengedett legnagyobb méretet.', 'errResize' : 'Nem lehet átméretezni a (z) "$1".', 'errResizeDegree' : 'Érvénytelen forgatási fok.', // added 7.3.2013 'errResizeRotate' : 'Nem lehet elforgatni a képet.', // added 7.3.2013 'errResizeSize' : 'Érvénytelen képméret.', // added 7.3.2013 'errResizeNoChange' : 'A kép mérete nem változott.', // added 7.3.2013 'errUsupportType' : 'Nem támogatott fájl típus', 'errNotUTF8Content' : 'Az "$1" fájl nincs az UTF-8-ban, és nem szerkeszthetÅ‘.', // added 9.11.2011 'errNetMount' : 'Nem lehet beilleszteni a(z) "$1".', // added 17.04.2012 'errNetMountNoDriver' : 'Nem támogatott protokoll.', // added 17.04.2012 'errNetMountFailed' : 'A csatlakozás nem sikerült.', // added 17.04.2012 'errNetMountHostReq' : 'Host szükséges.', // added 18.04.2012 'errSessionExpires' : 'A session inaktivitás miatt lejárt.', 'errCreatingTempDir' : 'Nem lehet ideiglenes könyvtárat létrehozni: "$1"', 'errFtpDownloadFile' : 'Nem lehet letölteni a fájlt az FTP-rÅ‘l: "$1"', 'errFtpUploadFile' : 'Nem lehet feltölteni a fájlt az FTP-re: "$1"', 'errFtpMkdir' : 'Nem sikerült távoli könyvtárat létrehozni az FTP-n: "$1"', 'errArchiveExec' : 'Hiba a fájlok archiválásakor: "$1"', 'errExtractExec' : 'Hiba a fájlok kibontásakor: "$1"', 'errNetUnMount' : 'Nem lehet leválasztani', // from v2.1 added 30.04.2012 'errConvUTF8' : 'Nem konvertálható UTF-8-ra', // from v2.1 added 08.04.2014 'errFolderUpload' : 'Próbálja ki a Google Chrome-ot, ha szeretné feltölteni a mappát.', // from v2.1 added 26.6.2015 'errSearchTimeout' : 'DÅ‘túllépés a(z) "$1" keresése közben. A keresési eredmény részleges.', // from v2.1 added 12.1.2016 'errReauthRequire' : 'Új engedélyre van szükség.', // from v2.1.10 added 24.3.2016 'errMaxTargets' : 'Max number of selectable items is $1.', // from v2.1.17 added 17.10.2016 'errRestore' : 'Unable to restore from the trash. Can\'t identify the restore destination.', // from v2.1.24 added 3.5.2017 'errEditorNotFound' : 'Editor not found to this file type.', // from v2.1.25 added 23.5.2017 'errServerError' : 'Error occurred on the server side.', // from v2.1.25 added 16.6.2017 'errEmpty' : 'Unable to empty folder "$1".', // from v2.1.25 added 22.6.2017 'moreErrors' : 'There are $1 more errors.', // from v2.1.44 added 9.12.2018 /******************************* commands names ********************************/ 'cmdarchive' : 'Archívum létrehozása', 'cmdback' : 'Vissza', 'cmdcopy' : 'Másolás', 'cmdcut' : 'Kivágás', 'cmddownload' : 'Letöltés', 'cmdduplicate' : 'Másolat készítés', 'cmdedit' : 'Szerkesztés', 'cmdextract' : 'Kibontás', 'cmdforward' : 'ElÅ‘re', 'cmdgetfile' : 'Fájlok kijelölése', 'cmdhelp' : 'ErrÅ‘l a programról...', 'cmdhome' : 'FÅ‘könyvtár', 'cmdinfo' : 'Tulajdonságok', 'cmdmkdir' : 'Új mappa', 'cmdmkdirin' : 'Új mappába', // from v2.1.7 added 19.2.2016 'cmdmkfile' : 'Új fájl', 'cmdopen' : 'Megnyitás', 'cmdpaste' : 'Beillesztés', 'cmdquicklook' : 'ElÅ‘nézet', 'cmdreload' : 'Frissítés', 'cmdrename' : 'Ã�tnevezés', 'cmdrm' : 'Törlés', 'cmdtrash' : 'Into trash', //from v2.1.24 added 29.4.2017 'cmdrestore' : 'Restore', //from v2.1.24 added 3.5.2017 'cmdsearch' : 'Keresés', 'cmdup' : 'Ugrás a szülÅ‘mappába', 'cmdupload' : 'Feltöltés', 'cmdview' : 'Nézet', 'cmdresize' : 'Ã�tméretezés és forgatás', 'cmdsort' : 'Rendezés', 'cmdnetmount' : 'Csatlakoztassa a hálózat hangerejét', // added 18.04.2012 'cmdnetunmount': 'Leválaszt', // from v2.1 added 30.04.2012 'cmdplaces' : 'Helyekhez', // added 28.12.2014 'cmdchmod' : 'Módváltás', // from v2.1 added 20.6.2015 'cmdopendir' : 'Mappa megnyitása', // from v2.1 added 13.1.2016 'cmdcolwidth' : 'Ã�llítsa vissza az oszlop szélességét', // from v2.1.13 added 12.06.2016 'cmdfullscreen': 'Full Screen', // from v2.1.15 added 03.08.2016 'cmdmove' : 'Move', // from v2.1.15 added 21.08.2016 'cmdempty' : 'Empty the folder', // from v2.1.25 added 22.06.2017 'cmdundo' : 'Undo', // from v2.1.27 added 31.07.2017 'cmdredo' : 'Redo', // from v2.1.27 added 31.07.2017 'cmdpreference': 'Preferences', // from v2.1.27 added 03.08.2017 'cmdselectall' : 'Select all', // from v2.1.28 added 15.08.2017 'cmdselectnone': 'Select none', // from v2.1.28 added 15.08.2017 'cmdselectinvert': 'Invert selection', // from v2.1.28 added 15.08.2017 'cmdopennew' : 'Open in new window', // from v2.1.38 added 3.4.2018 'cmdhide' : 'Hide (Preference)', // from v2.1.41 added 24.7.2018 /*********************************** buttons ***********************************/ 'btnClose' : 'Bezár', 'btnSave' : 'Ment', 'btnRm' : 'Töröl', 'btnApply' : 'Alkalmaz', 'btnCancel' : 'Mégsem', 'btnNo' : 'Nem', 'btnYes' : 'Igen', 'btnDiscard': 'Discard changes', 'btnMount' : 'Csatlakoztat', // added 18.04.2012 'btnApprove': 'Tovább $1 és jóváhagyás', // from v2.1 added 26.04.2012 'btnUnmount': 'Leválaszt', // from v2.1 added 30.04.2012 'btnConv' : 'Ã�talakít', // from v2.1 added 08.04.2014 'btnCwd' : 'Itt', // from v2.1 added 22.5.2015 'btnVolume' : 'HangerÅ‘', // from v2.1 added 22.5.2015 'btnAll' : 'Összes', // from v2.1 added 22.5.2015 'btnMime' : 'MIME Tipus', // from v2.1 added 22.5.2015 'btnFileName':'Fájl név', // from v2.1 added 22.5.2015 'btnSaveClose': 'Mentés és Kilépés', // from v2.1 added 12.6.2015 'btnBackup' : 'Biztonsági mentés', // fromv2.1 added 28.11.2015 'btnRename' : 'Rename', // from v2.1.24 added 6.4.2017 'btnRenameAll' : 'Rename(All)', // from v2.1.24 added 6.4.2017 'btnPrevious' : 'Prev ($1/$2)', // from v2.1.24 added 11.5.2017 'btnNext' : 'Next ($1/$2)', // from v2.1.24 added 11.5.2017 'btnSaveAs' : 'Save As', // from v2.1.25 added 24.5.2017 /******************************** notifications ********************************/ 'ntfopen' : 'Mappa megnyitás', 'ntffile' : 'Fájl megnyitás', 'ntfreload' : 'A mappa tartalmának újratöltése', 'ntfmkdir' : 'Mappa létrehozása', 'ntfmkfile' : 'Fájlok létrehozása', 'ntfrm' : 'Fájlok törélse', 'ntfcopy' : 'Fájlok másolása', 'ntfmove' : 'Fájlok áthelyezése', 'ntfprepare' : 'Checking existing items', 'ntfrename' : 'Fájlok átnevezése', 'ntfupload' : 'Fájlok feltöltése', 'ntfdownload' : 'Fájlok letöltése', 'ntfsave' : 'Fájlok mentése', 'ntfarchive' : 'Archívum létrehozása', 'ntfextract' : 'Kibontás archívumból', 'ntfsearch' : 'Fájlok keresése', 'ntfresize' : 'Képek átméretezése', 'ntfsmth' : 'Csinál valamit >_<', 'ntfloadimg' : 'Kép betöltése', 'ntfnetmount' : 'Hálózati meghajtó hozzáadása', // added 18.04.2012 'ntfnetunmount': 'Hálózati meghajtó leválasztása', // from v2.1 added 30.04.2012 'ntfdim' : 'Képméret megállapítása', // added 20.05.2013 'ntfreaddir' : 'A mappa adatainak olvasása', // from v2.1 added 01.07.2013 'ntfurl' : 'A link URL-jének lekérdezése', // from v2.1 added 11.03.2014 'ntfchmod' : 'A fájlmód megváltoztatása', // from v2.1 added 20.6.2015 'ntfpreupload': 'A feltöltött fájlnév ellenÅ‘rzése', // from v2.1 added 31.11.2015 'ntfzipdl' : 'Fájl létrehozása letöltésre', // from v2.1.7 added 23.1.2016 'ntfparents' : 'Getting path infomation', // from v2.1.17 added 2.11.2016 'ntfchunkmerge': 'Processing the uploaded file', // from v2.1.17 added 2.11.2016 'ntftrash' : 'Doing throw in the trash', // from v2.1.24 added 2.5.2017 'ntfrestore' : 'Doing restore from the trash', // from v2.1.24 added 3.5.2017 'ntfchkdir' : 'Checking destination folder', // from v2.1.24 added 3.5.2017 'ntfundo' : 'Undoing previous operation', // from v2.1.27 added 31.07.2017 'ntfredo' : 'Redoing previous undone', // from v2.1.27 added 31.07.2017 'ntfchkcontent' : 'Checking contents', // from v2.1.41 added 3.8.2018 /*********************************** volumes *********************************/ 'volume_Trash' : 'Trash', //from v2.1.24 added 29.4.2017 /************************************ dates **********************************/ 'dateUnknown' : 'Ismeretlen', 'Today' : 'Ma', 'Yesterday' : 'Tegnap', 'msJan' : 'jan', 'msFeb' : 'febr', 'msMar' : 'márc', 'msApr' : 'ápr', 'msMay' : 'máj', 'msJun' : 'jún', 'msJul' : 'júl', 'msAug' : 'aug', 'msSep' : 'szept', 'msOct' : 'okt', 'msNov' : 'nov', 'msDec' : 'dec', 'January' : 'Január', 'February' : 'Február', 'March' : 'Március', 'April' : 'Ã�prilis', 'May' : 'Május', 'June' : 'Június', 'July' : 'Július', 'August' : 'Augusztus', 'September' : 'Szeptember', 'October' : 'Október', 'November' : 'November', 'December' : 'December', 'Sunday' : 'Vasárnap', 'Monday' : 'HétfÅ‘', 'Tuesday' : 'Kedd', 'Wednesday' : 'Szerda', 'Thursday' : 'Csütörtök', 'Friday' : 'Péntek', 'Saturday' : 'Szombat', 'Sun' : 'V', 'Mon' : 'H', 'Tue' : 'K', 'Wed' : 'Sz', 'Thu' : 'Cs', 'Fri' : 'P', 'Sat' : 'Szo', /******************************** sort variants ********************************/ 'sortname' : 'név szerint', 'sortkind' : 'by kind', 'sortsize' : 'méret szerint', 'sortdate' : 'dátum szerint', 'sortFoldersFirst' : 'ElÅ‘ször a mappák', 'sortperm' : 'engedély alapján', // from v2.1.13 added 13.06.2016 'sortmode' : 'mód szerint', // from v2.1.13 added 13.06.2016 'sortowner' : 'tulajdonos alapján', // from v2.1.13 added 13.06.2016 'sortgroup' : 'csoportok szerint', // from v2.1.13 added 13.06.2016 'sortAlsoTreeview' : 'Also Treeview', // from v2.1.15 added 01.08.2016 /********************************** new items **********************************/ 'untitled file.txt' : 'NewFile.txt', // added 10.11.2015 'untitled folder' : 'NewFolder', // added 10.11.2015 'Archive' : 'NewArchive', // from v2.1 added 10.11.2015 'untitled file' : 'NewFile.$1', // from v2.1.41 added 6.8.2018 'extentionfile' : '$1: File', // from v2.1.41 added 6.8.2018 'extentiontype' : '$1: $2', // from v2.1.43 added 17.10.2018 /********************************** messages **********************************/ 'confirmReq' : 'MegerÅ‘sítés szükséges', 'confirmRm' : 'Valóban törölni akarja a kijelölt adatokat?
          Ez később nem fordítható vissza!', 'confirmRepl' : 'Replace old file with new one? (If it contains folders, it will be merged. To backup and replace, select Backup.)', 'confirmRest' : 'Replace existing item with the item in trash?', // fromv2.1.24 added 5.5.2017 'confirmConvUTF8' : 'Nem UTF-8.
          �talakítsam UTF-8-ra?
          A tartalom mentés után UTF-8 lesz..', // from v2.1 added 08.04.2014 'confirmNonUTF8' : 'Character encoding of this file couldn\'t be detected. It need to temporarily convert to UTF-8 for editting.
          Please select character encoding of this file.', // from v2.1.19 added 28.11.2016 'confirmNotSave' : 'Megváltozott.
          Módosítások elvesznek, ha nem menti el azokat.', // from v2.1 added 15.7.2015 'confirmTrash' : 'Are you sure you want to move items to trash bin?', //from v2.1.24 added 29.4.2017 'confirmMove' : 'Are you sure you want to move items to "$1"?', //from v2.1.50 added 27.7.2019 'apllyAll' : 'Mindenre vonatkozik', 'name' : 'Név', 'size' : 'Méret', 'perms' : 'Jogok', 'modify' : 'Módosítva', 'kind' : 'Típus', 'read' : 'olvasás', 'write' : 'írás', 'noaccess' : '-', 'and' : 'és', 'unknown' : 'ismeretlen', 'selectall' : 'Összes kijelölése', 'selectfiles' : 'Fájlok kijelölése', 'selectffile' : 'Első fájl kijelölése', 'selectlfile' : 'Utolsó fájl kijelölése', 'viewlist' : 'Lista nézet', 'viewicons' : 'Ikon nézet', 'viewSmall' : 'Small icons', // from v2.1.39 added 22.5.2018 'viewMedium' : 'Medium icons', // from v2.1.39 added 22.5.2018 'viewLarge' : 'Large icons', // from v2.1.39 added 22.5.2018 'viewExtraLarge' : 'Extra large icons', // from v2.1.39 added 22.5.2018 'places' : 'Helyek', 'calc' : 'Kiszámítja', 'path' : 'Útvonal', 'aliasfor' : 'Cél', 'locked' : 'Zárolt', 'dim' : 'Méretek', 'files' : 'Fájlok', 'folders' : 'Mappák', 'items' : 'Elemek', 'yes' : 'igen', 'no' : 'nem', 'link' : 'Parancsikon', 'searcresult' : 'Keresés eredménye', 'selected' : 'kijelölt elemek', 'about' : 'Névjegy', 'shortcuts' : 'Gyorsbillenytyűk', 'help' : 'Súgó', 'webfm' : 'Web file manager', 'ver' : 'Verzió', 'protocolver' : 'protokol verzió', 'homepage' : 'Projekt honlap', 'docs' : 'Dokumentáció', 'github' : 'Hozz létre egy új verziót a Github-on', 'twitter' : 'Kövess minket a twitter-en', 'facebook' : 'Csatlakozz hozzánk a facebook-on', 'team' : 'Csapat', 'chiefdev' : 'vezető fejlesztő', 'developer' : 'fejlesztő', 'contributor' : 'külsős hozzájáruló', 'maintainer' : 'karbantartó', 'translator' : 'fordító', 'icons' : 'Ikonok', 'dontforget' : 'törölközőt ne felejts el hozni!', 'shortcutsof' : 'Shortcuts disabled', 'dropFiles' : 'Fájlok dobása ide', 'or' : 'vagy', 'selectForUpload' : 'fájlok böngészése', 'moveFiles' : 'Fájlok áthelyezése', 'copyFiles' : 'Fájlok másolása', 'restoreFiles' : 'Restore items', // from v2.1.24 added 5.5.2017 'rmFromPlaces' : 'Távolítsa el a helyekről', 'aspectRatio' : 'Oldalarány', 'scale' : 'Skála', 'width' : 'Szélesség', 'height' : 'Magasság', 'resize' : '�tméretezés', 'crop' : 'Vág', 'rotate' : 'Forgat', 'rotate-cw' : 'Forgassa el 90 fokkal', 'rotate-ccw' : 'Forgassa el 90 fokkal CCW irányban', 'degree' : '°', 'netMountDialogTitle' : 'Mount network volume', // added 18.04.2012 'protocol' : 'Protokoll', // added 18.04.2012 'host' : 'Host', // added 18.04.2012 'port' : 'Port', // added 18.04.2012 'user' : 'Felhasználó', // added 18.04.2012 'pass' : 'Jelszó', // added 18.04.2012 'confirmUnmount' : 'Leválasztod $1?', // from v2.1 added 30.04.2012 'dropFilesBrowser': 'Fájlok dobása vagy beillesztése a böngészőből', // from v2.1 added 30.05.2012 'dropPasteFiles' : 'Drop files, Paste URLs or images(clipboard) here', // from v2.1 added 07.04.2014 'encoding' : 'Kódolás', // from v2.1 added 19.12.2014 'locale' : 'Nyelv', // from v2.1 added 19.12.2014 'searchTarget' : 'Cél: $1', // from v2.1 added 22.5.2015 'searchMime' : 'Keresés a MIME típus bevitele alapján', // from v2.1 added 22.5.2015 'owner' : 'Tulajdonos', // from v2.1 added 20.6.2015 'group' : 'Csoport', // from v2.1 added 20.6.2015 'other' : 'Egyéb', // from v2.1 added 20.6.2015 'execute' : 'Végrehajt', // from v2.1 added 20.6.2015 'perm' : 'Engedély', // from v2.1 added 20.6.2015 'mode' : 'Mód', // from v2.1 added 20.6.2015 'emptyFolder' : 'A mappa üres', // from v2.1.6 added 30.12.2015 'emptyFolderDrop' : 'A mappa üres\\Elem eldobása', // from v2.1.6 added 30.12.2015 'emptyFolderLTap' : 'A mappa üres\\Hosszú koppintás elemek hozzáadásához', // from v2.1.6 added 30.12.2015 'quality' : 'Minőség', // from v2.1.6 added 5.1.2016 'autoSync' : 'Auto sync', // from v2.1.6 added 10.1.2016 'moveUp' : 'Mozgatás fel', // from v2.1.6 added 18.1.2016 'getLink' : 'URL-link letöltése', // from v2.1.7 added 9.2.2016 'selectedItems' : 'Kiválasztott elemek ($1)', // from v2.1.7 added 2.19.2016 'folderId' : 'Mappa ID', // from v2.1.10 added 3.25.2016 'offlineAccess' : 'Offline hozzáférés engedélyezése', // from v2.1.10 added 3.25.2016 'reAuth' : 'Újrahitelesítéshez', // from v2.1.10 added 3.25.2016 'nowLoading' : 'Most betölt...', // from v2.1.12 added 4.26.2016 'openMulti' : 'Több fájl megnyitása', // from v2.1.12 added 5.14.2016 'openMultiConfirm': 'Megpróbálja megnyitni a $1 fájlokat. Biztosan meg akarja nyitni a böngészőben?', // from v2.1.12 added 5.14.2016 'emptySearch' : 'Search results is empty in search target.', // from v2.1.12 added 5.16.2016 'editingFile' : 'It is editing a file.', // from v2.1.13 added 6.3.2016 'hasSelected' : '$1 elemet választott ki.', // from v2.1.13 added 6.3.2016 'hasClipboard' : '$1 elem van a vágólapon.', // from v2.1.13 added 6.3.2016 'incSearchOnly' : 'Incremental search is only from the current view.', // from v2.1.13 added 6.30.2016 'reinstate' : 'Reinstate', // from v2.1.15 added 3.8.2016 'complete' : '$1 complete', // from v2.1.15 added 21.8.2016 'contextmenu' : 'Context menu', // from v2.1.15 added 9.9.2016 'pageTurning' : 'Page turning', // from v2.1.15 added 10.9.2016 'volumeRoots' : 'Volume roots', // from v2.1.16 added 16.9.2016 'reset' : 'Reset', // from v2.1.16 added 1.10.2016 'bgcolor' : 'Background color', // from v2.1.16 added 1.10.2016 'colorPicker' : 'Color picker', // from v2.1.16 added 1.10.2016 '8pxgrid' : '8px Grid', // from v2.1.16 added 4.10.2016 'enabled' : 'Enabled', // from v2.1.16 added 4.10.2016 'disabled' : 'Disabled', // from v2.1.16 added 4.10.2016 'emptyIncSearch' : 'Search results is empty in current view.\\APress [Enter] to expand search target.', // from v2.1.16 added 5.10.2016 'emptyLetSearch' : 'First letter search results is empty in current view.', // from v2.1.23 added 24.3.2017 'textLabel' : 'Text label', // from v2.1.17 added 13.10.2016 'minsLeft' : '$1 mins left', // from v2.1.17 added 13.11.2016 'openAsEncoding' : 'Reopen with selected encoding', // from v2.1.19 added 2.12.2016 'saveAsEncoding' : 'Save with the selected encoding', // from v2.1.19 added 2.12.2016 'selectFolder' : 'Select folder', // from v2.1.20 added 13.12.2016 'firstLetterSearch': 'First letter search', // from v2.1.23 added 24.3.2017 'presets' : 'Presets', // from v2.1.25 added 26.5.2017 'tooManyToTrash' : 'It\'s too many items so it can\'t into trash.', // from v2.1.25 added 9.6.2017 'TextArea' : 'TextArea', // from v2.1.25 added 14.6.2017 'folderToEmpty' : 'Empty the folder "$1".', // from v2.1.25 added 22.6.2017 'filderIsEmpty' : 'There are no items in a folder "$1".', // from v2.1.25 added 22.6.2017 'preference' : 'Preference', // from v2.1.26 added 28.6.2017 'language' : 'Language', // from v2.1.26 added 28.6.2017 'clearBrowserData': 'Initialize the settings saved in this browser', // from v2.1.26 added 28.6.2017 'toolbarPref' : 'Toolbar settings', // from v2.1.27 added 2.8.2017 'charsLeft' : '... $1 chars left.', // from v2.1.29 added 30.8.2017 'linesLeft' : '... $1 lines left.', // from v2.1.52 added 16.1.2020 'sum' : 'Sum', // from v2.1.29 added 28.9.2017 'roughFileSize' : 'Rough file size', // from v2.1.30 added 2.11.2017 'autoFocusDialog' : 'Focus on the element of dialog with mouseover', // from v2.1.30 added 2.11.2017 'select' : 'Select', // from v2.1.30 added 23.11.2017 'selectAction' : 'Action when select file', // from v2.1.30 added 23.11.2017 'useStoredEditor' : 'Open with the editor used last time', // from v2.1.30 added 23.11.2017 'selectinvert' : 'Invert selection', // from v2.1.30 added 25.11.2017 'renameMultiple' : 'Are you sure you want to rename $1 selected items like $2?
          This cannot be undone!', // from v2.1.31 added 4.12.2017 'batchRename' : 'Batch rename', // from v2.1.31 added 8.12.2017 'plusNumber' : '+ Number', // from v2.1.31 added 8.12.2017 'asPrefix' : 'Add prefix', // from v2.1.31 added 8.12.2017 'asSuffix' : 'Add suffix', // from v2.1.31 added 8.12.2017 'changeExtention' : 'Change extention', // from v2.1.31 added 8.12.2017 'columnPref' : 'Columns settings (List view)', // from v2.1.32 added 6.2.2018 'reflectOnImmediate' : 'All changes will reflect immediately to the archive.', // from v2.1.33 added 2.3.2018 'reflectOnUnmount' : 'Any changes will not reflect until un-mount this volume.', // from v2.1.33 added 2.3.2018 'unmountChildren' : 'The following volume(s) mounted on this volume also unmounted. Are you sure to unmount it?', // from v2.1.33 added 5.3.2018 'selectionInfo' : 'Selection Info', // from v2.1.33 added 7.3.2018 'hashChecker' : 'Algorithms to show the file hash', // from v2.1.33 added 10.3.2018 'infoItems' : 'Info Items (Selection Info Panel)', // from v2.1.38 added 28.3.2018 'pressAgainToExit': 'Press again to exit.', // from v2.1.38 added 1.4.2018 'toolbar' : 'Toolbar', // from v2.1.38 added 4.4.2018 'workspace' : 'Work Space', // from v2.1.38 added 4.4.2018 'dialog' : 'Dialog', // from v2.1.38 added 4.4.2018 'all' : 'All', // from v2.1.38 added 4.4.2018 'iconSize' : 'Icon Size (Icons view)', // from v2.1.39 added 7.5.2018 'editorMaximized' : 'Open the maximized editor window', // from v2.1.40 added 30.6.2018 'editorConvNoApi' : 'Because conversion by API is not currently available, please convert on the website.', //from v2.1.40 added 8.7.2018 'editorConvNeedUpload' : 'After conversion, you must be upload with the item URL or a downloaded file to save the converted file.', //from v2.1.40 added 8.7.2018 'convertOn' : 'Convert on the site of $1', // from v2.1.40 added 10.7.2018 'integrations' : 'Integrations', // from v2.1.40 added 11.7.2018 'integrationWith' : 'This elFinder has the following external services integrated. Please check the terms of use, privacy policy, etc. before using it.', // from v2.1.40 added 11.7.2018 'showHidden' : 'Show hidden items', // from v2.1.41 added 24.7.2018 'hideHidden' : 'Hide hidden items', // from v2.1.41 added 24.7.2018 'toggleHidden' : 'Show/Hide hidden items', // from v2.1.41 added 24.7.2018 'makefileTypes' : 'File types to enable with "New file"', // from v2.1.41 added 7.8.2018 'typeOfTextfile' : 'Type of the Text file', // from v2.1.41 added 7.8.2018 'add' : 'Add', // from v2.1.41 added 7.8.2018 'theme' : 'Theme', // from v2.1.43 added 19.10.2018 'default' : 'Default', // from v2.1.43 added 19.10.2018 'description' : 'Description', // from v2.1.43 added 19.10.2018 'website' : 'Website', // from v2.1.43 added 19.10.2018 'author' : 'Author', // from v2.1.43 added 19.10.2018 'email' : 'Email', // from v2.1.43 added 19.10.2018 'license' : 'License', // from v2.1.43 added 19.10.2018 'exportToSave' : 'This item can\'t be saved. To avoid losing the edits you need to export to your PC.', // from v2.1.44 added 1.12.2018 'dblclickToSelect': 'Double click on the file to select it.', // from v2.1.47 added 22.1.2019 'useFullscreen' : 'Use fullscreen mode', // from v2.1.47 added 19.2.2019 /********************************** mimetypes **********************************/ 'kindUnknown' : 'Ismeretlen', 'kindRoot' : 'Volume Root', // from v2.1.16 added 16.10.2016 'kindFolder' : 'Mappa', 'kindSelects' : 'Selections', // from v2.1.29 added 29.8.2017 'kindAlias' : 'Parancsikon', 'kindAliasBroken' : 'Hibás parancsikon', // applications 'kindApp' : 'Alkalmazás', 'kindPostscript' : 'Postscript dokumentum', 'kindMsOffice' : 'Microsoft Office dokumentum', 'kindMsWord' : 'Microsoft Word dokumentum', 'kindMsExcel' : 'Microsoft Excel dokumentum', 'kindMsPP' : 'Microsoft Powerpoint bemutató', 'kindOO' : 'Open Office dokumentum', 'kindAppFlash' : 'Flash alkalmazás', 'kindPDF' : 'Portable Document Format (PDF)', 'kindTorrent' : 'Bittorrent fájl', 'kind7z' : '7z archívum', 'kindTAR' : 'TAR archívum', 'kindGZIP' : 'GZIP archívum', 'kindBZIP' : 'BZIP archívum', 'kindXZ' : 'XZ archívum', 'kindZIP' : 'ZIP archívum', 'kindRAR' : 'RAR archívum', 'kindJAR' : 'Java JAR fájl', 'kindTTF' : 'True Type font', 'kindOTF' : 'Open Type font', 'kindRPM' : 'RPM csomag', // fonts 'kindFont' : 'Font', 'kindSFNT' : 'SFNT font', 'kindEOT' : 'Embedded Open Type font', 'kindWOFF' : 'Web Open Font Format', 'kindWOFF2' : 'Web Open Font Format 2', // texts 'kindText' : 'Szöveges dokumentum', 'kindTextPlain' : 'Plain text', 'kindPHP' : 'PHP forráskód', 'kindCSS' : 'Cascading style sheet', 'kindHTML' : 'HTML dokumentum', 'kindJS' : 'Javascript forráskód', 'kindRTF' : 'Rich Text Format', 'kindC' : 'C forráskód', 'kindCHeader' : 'C header forráskód', 'kindCPP' : 'C++ forráskód', 'kindCPPHeader' : 'C++ header forráskód', 'kindShell' : 'Unix shell script', 'kindPython' : 'Python forráskód', 'kindJava' : 'Java forráskód', 'kindRuby' : 'Ruby forráskód', 'kindPerl' : 'Perl script', 'kindSQL' : 'SQL forráskód', 'kindXML' : 'XML dokumentum', 'kindAWK' : 'AWK forráskód', 'kindCSV' : 'Comma separated values', 'kindDOCBOOK' : 'Docbook XML dokumentum', 'kindMarkdown' : 'Markdown text', // added 20.7.2015 // images 'kindImage' : 'Kép', 'kindBMP' : 'BMP kép', 'kindJPEG' : 'JPEG kép', 'kindGIF' : 'GIF kép', 'kindPNG' : 'PNG kép', 'kindTIFF' : 'TIFF kép', 'kindTGA' : 'TGA kép', 'kindPSD' : 'Adobe Photoshop kép', 'kindXBITMAP' : 'X bitmap image', 'kindPXM' : 'Pixelmator image', // media 'kindAudio' : 'Hangfájl', 'kindAudioMPEG' : 'MPEG hangfájl', 'kindAudioMPEG4' : 'MPEG-4 hangfájl', 'kindAudioMIDI' : 'MIDI hangfájl', 'kindAudioOGG' : 'Ogg Vorbis hangfájl', 'kindAudioWAV' : 'WAV hangfájl', 'AudioPlaylist' : 'MP3 playlist', 'kindVideo' : 'Film', 'kindVideoDV' : 'DV film', 'kindVideoMPEG' : 'MPEG film', 'kindVideoMPEG4' : 'MPEG-4 film', 'kindVideoAVI' : 'AVI film', 'kindVideoMOV' : 'Quick Time film', 'kindVideoWM' : 'Windows Media film', 'kindVideoFlash' : 'Flash film', 'kindVideoMKV' : 'Matroska film', 'kindVideoOGG' : 'Ogg film' } }; })); PK!€ÙiÕ~Õ~@file-manager-advanced/application/library/js/i18n/elfinder.en.jsnu„[µü¤/** * English translation * @author Troex Nevelin * @author Naoki Sawada * @version 2021-06-02 */ // elfinder.en.js is integrated into elfinder.(full|min).js by jake build if (typeof elFinder === 'function' && elFinder.prototype.i18) { elFinder.prototype.i18.en = { translator : 'Troex Nevelin <troex@fury.scancode.ru>, Naoki Sawada <hypweb+elfinder@gmail.com>', language : 'English', direction : 'ltr', dateFormat : 'M d, Y h:i A', // will show like: Aug 24, 2018 04:39 PM fancyDateFormat : '$1 h:i A', // will show like: Today 04:39 PM nonameDateFormat : 'ymd-His', // noname upload will show like: 180824-163916 messages : { /********************************** errors **********************************/ 'error' : 'Error', 'errUnknown' : 'Unknown error.', 'errUnknownCmd' : 'Unknown command.', 'errJqui' : 'Invalid jQuery UI configuration. Selectable, draggable and droppable components must be included.', 'errNode' : 'elFinder requires DOM Element to be created.', 'errURL' : 'Invalid elFinder configuration! URL option is not set.', 'errAccess' : 'Access denied.', 'errConnect' : 'Unable to connect to backend.', 'errAbort' : 'Connection aborted.', 'errTimeout' : 'Connection timeout.', 'errNotFound' : 'Backend not found.', 'errResponse' : 'Invalid backend response.', 'errConf' : 'Invalid backend configuration.', 'errJSON' : 'PHP JSON module not installed.', 'errNoVolumes' : 'Readable volumes not available.', 'errCmdParams' : 'Invalid parameters for command "$1".', 'errDataNotJSON' : 'Data is not JSON.', 'errDataEmpty' : 'Data is empty.', 'errCmdReq' : 'Backend request requires command name.', 'errOpen' : 'Unable to open "$1".', 'errNotFolder' : 'Object is not a folder.', 'errNotFile' : 'Object is not a file.', 'errRead' : 'Unable to read "$1".', 'errWrite' : 'Unable to write into "$1".', 'errPerm' : 'Permission denied.', 'errLocked' : '"$1" is locked and can not be renamed, moved or removed.', 'errExists' : 'Item named "$1" already exists.', 'errInvName' : 'Invalid file name.', 'errInvDirname' : 'Invalid folder name.', // from v2.1.24 added 12.4.2017 'errFolderNotFound' : 'Folder not found.', 'errFileNotFound' : 'File not found.', 'errTrgFolderNotFound' : 'Target folder "$1" not found.', 'errPopup' : 'Browser prevented opening popup window. To open file enable it in browser options.', 'errMkdir' : 'Unable to create folder "$1".', 'errMkfile' : 'Unable to create file "$1".', 'errRename' : 'Unable to rename "$1".', 'errCopyFrom' : 'Copying files from volume "$1" not allowed.', 'errCopyTo' : 'Copying files to volume "$1" not allowed.', 'errMkOutLink' : 'Unable to create a link to outside the volume root.', // from v2.1 added 03.10.2015 'errUpload' : 'Upload error.', // old name - errUploadCommon 'errUploadFile' : 'Unable to upload "$1".', // old name - errUpload 'errUploadNoFiles' : 'No files found for upload.', 'errUploadTotalSize' : 'Data exceeds the maximum allowed size.', // old name - errMaxSize 'errUploadFileSize' : 'File exceeds maximum allowed size.', // old name - errFileMaxSize 'errUploadMime' : 'File type not allowed.', 'errUploadTransfer' : '"$1" transfer error.', 'errUploadTemp' : 'Unable to make temporary file for upload.', // from v2.1 added 26.09.2015 'errNotReplace' : 'Object "$1" already exists at this location and can not be replaced by object with another type.', // new 'errReplace' : 'Unable to replace "$1".', 'errSave' : 'Unable to save "$1".', 'errCopy' : 'Unable to copy "$1".', 'errMove' : 'Unable to move "$1".', 'errCopyInItself' : 'Unable to copy "$1" into itself.', 'errRm' : 'Unable to remove "$1".', 'errTrash' : 'Unable into trash.', // from v2.1.24 added 30.4.2017 'errRmSrc' : 'Unable remove source file(s).', 'errExtract' : 'Unable to extract files from "$1".', 'errArchive' : 'Unable to create archive.', 'errArcType' : 'Unsupported archive type.', 'errNoArchive' : 'File is not archive or has unsupported archive type.', 'errCmdNoSupport' : 'Backend does not support this command.', 'errReplByChild' : 'The folder "$1" can\'t be replaced by an item it contains.', 'errArcSymlinks' : 'For security reason denied to unpack archives contains symlinks or files with not allowed names.', // edited 24.06.2012 'errArcMaxSize' : 'Archive files exceeds maximum allowed size.', 'errResize' : 'Unable to resize "$1".', 'errResizeDegree' : 'Invalid rotate degree.', // added 7.3.2013 'errResizeRotate' : 'Unable to rotate image.', // added 7.3.2013 'errResizeSize' : 'Invalid image size.', // added 7.3.2013 'errResizeNoChange' : 'Image size not changed.', // added 7.3.2013 'errUsupportType' : 'Unsupported file type.', 'errNotUTF8Content' : 'File "$1" is not in UTF-8 and cannot be edited.', // added 9.11.2011 'errNetMount' : 'Unable to mount "$1".', // added 17.04.2012 'errNetMountNoDriver' : 'Unsupported protocol.', // added 17.04.2012 'errNetMountFailed' : 'Mount failed.', // added 17.04.2012 'errNetMountHostReq' : 'Host required.', // added 18.04.2012 'errSessionExpires' : 'Your session has expired due to inactivity.', 'errCreatingTempDir' : 'Unable to create temporary directory: "$1"', 'errFtpDownloadFile' : 'Unable to download file from FTP: "$1"', 'errFtpUploadFile' : 'Unable to upload file to FTP: "$1"', 'errFtpMkdir' : 'Unable to create remote directory on FTP: "$1"', 'errArchiveExec' : 'Error while archiving files: "$1"', 'errExtractExec' : 'Error while extracting files: "$1"', 'errNetUnMount' : 'Unable to unmount.', // from v2.1 added 30.04.2012 'errConvUTF8' : 'Not convertible to UTF-8', // from v2.1 added 08.04.2014 'errFolderUpload' : 'Try the modern browser, If you\'d like to upload the folder.', // from v2.1 added 26.6.2015 'errSearchTimeout' : 'Timed out while searching "$1". Search result is partial.', // from v2.1 added 12.1.2016 'errReauthRequire' : 'Re-authorization is required.', // from v2.1.10 added 24.3.2016 'errMaxTargets' : 'Max number of selectable items is $1.', // from v2.1.17 added 17.10.2016 'errRestore' : 'Unable to restore from the trash. Can\'t identify the restore destination.', // from v2.1.24 added 3.5.2017 'errEditorNotFound' : 'Editor not found to this file type.', // from v2.1.25 added 23.5.2017 'errServerError' : 'Error occurred on the server side.', // from v2.1.25 added 16.6.2017 'errEmpty' : 'Unable to empty folder "$1".', // from v2.1.25 added 22.6.2017 'moreErrors' : 'There are $1 more errors.', // from v2.1.44 added 9.12.2018 'errMaxMkdirs' : 'You can create up to $1 folders at one time.', // from v2.1.58 added 20.6.2021 /******************************* commands names ********************************/ 'cmdarchive' : 'Create archive', 'cmdback' : 'Back', 'cmdcopy' : 'Copy', 'cmdcut' : 'Cut', 'cmddownload' : 'Download', 'cmdduplicate' : 'Duplicate', 'cmdedit' : 'Edit file', 'cmdextract' : 'Extract files from archive', 'cmdforward' : 'Forward', 'cmdgetfile' : 'Select files', 'cmdhelp' : 'About this software', 'cmdhome' : 'Root', 'cmdinfo' : 'Get info', 'cmdmkdir' : 'New folder', 'cmdmkdirin' : 'Into New Folder', // from v2.1.7 added 19.2.2016 'cmdmkfile' : 'New file', 'cmdopen' : 'Open', 'cmdpaste' : 'Paste', 'cmdquicklook' : 'Preview', 'cmdreload' : 'Reload', 'cmdrename' : 'Rename', 'cmdrm' : 'Delete', 'cmdtrash' : 'Into trash', //from v2.1.24 added 29.4.2017 'cmdrestore' : 'Restore', //from v2.1.24 added 3.5.2017 'cmdsearch' : 'Find files', 'cmdup' : 'Go to parent folder', 'cmdupload' : 'Upload files', 'cmdview' : 'View', 'cmdresize' : 'Resize & Rotate', 'cmdsort' : 'Sort', 'cmdnetmount' : 'Mount network volume', // added 18.04.2012 'cmdnetunmount': 'Unmount', // from v2.1 added 30.04.2012 'cmdplaces' : 'To Places', // added 28.12.2014 'cmdchmod' : 'Change mode', // from v2.1 added 20.6.2015 'cmdopendir' : 'Open a folder', // from v2.1 added 13.1.2016 'cmdcolwidth' : 'Reset column width', // from v2.1.13 added 12.06.2016 'cmdfullscreen': 'Full Screen', // from v2.1.15 added 03.08.2016 'cmdmove' : 'Move', // from v2.1.15 added 21.08.2016 'cmdempty' : 'Empty the folder', // from v2.1.25 added 22.06.2017 'cmdundo' : 'Undo', // from v2.1.27 added 31.07.2017 'cmdredo' : 'Redo', // from v2.1.27 added 31.07.2017 'cmdpreference': 'Preferences', // from v2.1.27 added 03.08.2017 'cmdselectall' : 'Select all', // from v2.1.28 added 15.08.2017 'cmdselectnone': 'Select none', // from v2.1.28 added 15.08.2017 'cmdselectinvert': 'Invert selection', // from v2.1.28 added 15.08.2017 'cmdopennew' : 'Open in new window', // from v2.1.38 added 3.4.2018 'cmdhide' : 'Hide (Preference)', // from v2.1.41 added 24.7.2018 /*********************************** buttons ***********************************/ 'btnClose' : 'Close', 'btnSave' : 'Save', 'btnRm' : 'Remove', 'btnApply' : 'Apply', 'btnCancel' : 'Cancel', 'btnNo' : 'No', 'btnYes' : 'Yes', 'btnMount' : 'Mount', // added 18.04.2012 'btnApprove': 'Goto $1 & approve', // from v2.1 added 26.04.2012 'btnUnmount': 'Unmount', // from v2.1 added 30.04.2012 'btnConv' : 'Convert', // from v2.1 added 08.04.2014 'btnCwd' : 'Here', // from v2.1 added 22.5.2015 'btnVolume' : 'Volume', // from v2.1 added 22.5.2015 'btnAll' : 'All', // from v2.1 added 22.5.2015 'btnMime' : 'MIME Type', // from v2.1 added 22.5.2015 'btnFileName':'Filename', // from v2.1 added 22.5.2015 'btnSaveClose': 'Save & Close', // from v2.1 added 12.6.2015 'btnBackup' : 'Backup', // fromv2.1 added 28.11.2015 'btnRename' : 'Rename', // from v2.1.24 added 6.4.2017 'btnRenameAll' : 'Rename(All)', // from v2.1.24 added 6.4.2017 'btnPrevious' : 'Prev ($1/$2)', // from v2.1.24 added 11.5.2017 'btnNext' : 'Next ($1/$2)', // from v2.1.24 added 11.5.2017 'btnSaveAs' : 'Save As', // from v2.1.25 added 24.5.2017 /******************************** notifications ********************************/ 'ntfopen' : 'Open folder', 'ntffile' : 'Open file', 'ntfreload' : 'Reload folder content', 'ntfmkdir' : 'Creating folder', 'ntfmkfile' : 'Creating files', 'ntfrm' : 'Delete items', 'ntfcopy' : 'Copy items', 'ntfmove' : 'Move items', 'ntfprepare' : 'Checking existing items', 'ntfrename' : 'Rename files', 'ntfupload' : 'Uploading files', 'ntfdownload' : 'Downloading files', 'ntfsave' : 'Save files', 'ntfarchive' : 'Creating archive', 'ntfextract' : 'Extracting files from archive', 'ntfsearch' : 'Searching files', 'ntfresize' : 'Resizing images', 'ntfsmth' : 'Doing something', 'ntfloadimg' : 'Loading image', 'ntfnetmount' : 'Mounting network volume', // added 18.04.2012 'ntfnetunmount': 'Unmounting network volume', // from v2.1 added 30.04.2012 'ntfdim' : 'Acquiring image dimension', // added 20.05.2013 'ntfreaddir' : 'Reading folder infomation', // from v2.1 added 01.07.2013 'ntfurl' : 'Getting URL of link', // from v2.1 added 11.03.2014 'ntfchmod' : 'Changing file mode', // from v2.1 added 20.6.2015 'ntfpreupload': 'Verifying upload file name', // from v2.1 added 31.11.2015 'ntfzipdl' : 'Creating a file for download', // from v2.1.7 added 23.1.2016 'ntfparents' : 'Getting path infomation', // from v2.1.17 added 2.11.2016 'ntfchunkmerge': 'Processing the uploaded file', // from v2.1.17 added 2.11.2016 'ntftrash' : 'Doing throw in the trash', // from v2.1.24 added 2.5.2017 'ntfrestore' : 'Doing restore from the trash', // from v2.1.24 added 3.5.2017 'ntfchkdir' : 'Checking destination folder', // from v2.1.24 added 3.5.2017 'ntfundo' : 'Undoing previous operation', // from v2.1.27 added 31.07.2017 'ntfredo' : 'Redoing previous undone', // from v2.1.27 added 31.07.2017 'ntfchkcontent' : 'Checking contents', // from v2.1.41 added 3.8.2018 /*********************************** volumes *********************************/ 'volume_Trash' : 'Trash', //from v2.1.24 added 29.4.2017 /************************************ dates **********************************/ 'dateUnknown' : 'unknown', 'Today' : 'Today', 'Yesterday' : 'Yesterday', 'msJan' : 'Jan', 'msFeb' : 'Feb', 'msMar' : 'Mar', 'msApr' : 'Apr', 'msMay' : 'May', 'msJun' : 'Jun', 'msJul' : 'Jul', 'msAug' : 'Aug', 'msSep' : 'Sep', 'msOct' : 'Oct', 'msNov' : 'Nov', 'msDec' : 'Dec', 'January' : 'January', 'February' : 'February', 'March' : 'March', 'April' : 'April', 'May' : 'May', 'June' : 'June', 'July' : 'July', 'August' : 'August', 'September' : 'September', 'October' : 'October', 'November' : 'November', 'December' : 'December', 'Sunday' : 'Sunday', 'Monday' : 'Monday', 'Tuesday' : 'Tuesday', 'Wednesday' : 'Wednesday', 'Thursday' : 'Thursday', 'Friday' : 'Friday', 'Saturday' : 'Saturday', 'Sun' : 'Sun', 'Mon' : 'Mon', 'Tue' : 'Tue', 'Wed' : 'Wed', 'Thu' : 'Thu', 'Fri' : 'Fri', 'Sat' : 'Sat', /******************************** sort variants ********************************/ 'sortname' : 'by name', 'sortkind' : 'by kind', 'sortsize' : 'by size', 'sortdate' : 'by date', 'sortFoldersFirst' : 'Folders first', 'sortperm' : 'by permission', // from v2.1.13 added 13.06.2016 'sortmode' : 'by mode', // from v2.1.13 added 13.06.2016 'sortowner' : 'by owner', // from v2.1.13 added 13.06.2016 'sortgroup' : 'by group', // from v2.1.13 added 13.06.2016 'sortAlsoTreeview' : 'Also Treeview', // from v2.1.15 added 01.08.2016 /********************************** new items **********************************/ 'untitled file.txt' : 'NewFile.txt', // added 10.11.2015 'untitled folder' : 'NewFolder', // added 10.11.2015 'Archive' : 'NewArchive', // from v2.1 added 10.11.2015 'untitled file' : 'NewFile.$1', // from v2.1.41 added 6.8.2018 'extentionfile' : '$1: File', // from v2.1.41 added 6.8.2018 'extentiontype' : '$1: $2', // from v2.1.43 added 17.10.2018 /********************************** messages **********************************/ 'confirmReq' : 'Confirmation required', 'confirmRm' : 'Are you sure you want to permanently remove items?
          This cannot be undone!', 'confirmRepl' : 'Replace old file with new one? (If it contains folders, it will be merged. To backup and replace, select Backup.)', 'confirmRest' : 'Replace existing item with the item in trash?', // fromv2.1.24 added 5.5.2017 'confirmConvUTF8' : 'Not in UTF-8
          Convert to UTF-8?
          Contents become UTF-8 by saving after conversion.', // from v2.1 added 08.04.2014 'confirmNonUTF8' : 'Character encoding of this file couldn\'t be detected. It need to temporarily convert to UTF-8 for editting.
          Please select character encoding of this file.', // from v2.1.19 added 28.11.2016 'confirmNotSave' : 'It has been modified.
          Losing work if you do not save changes.', // from v2.1 added 15.7.2015 'confirmTrash' : 'Are you sure you want to move items to trash bin?', //from v2.1.24 added 29.4.2017 'confirmMove' : 'Are you sure you want to move items to "$1"?', //from v2.1.50 added 27.7.2019 'apllyAll' : 'Apply to all', 'name' : 'Name', 'size' : 'Size', 'perms' : 'Permissions', 'modify' : 'Modified', 'kind' : 'Kind', 'read' : 'read', 'write' : 'write', 'noaccess' : 'no access', 'and' : 'and', 'unknown' : 'unknown', 'selectall' : 'Select all items', 'selectfiles' : 'Select item(s)', 'selectffile' : 'Select first item', 'selectlfile' : 'Select last item', 'viewlist' : 'List view', 'viewicons' : 'Icons view', 'viewSmall' : 'Small icons', // from v2.1.39 added 22.5.2018 'viewMedium' : 'Medium icons', // from v2.1.39 added 22.5.2018 'viewLarge' : 'Large icons', // from v2.1.39 added 22.5.2018 'viewExtraLarge' : 'Extra large icons', // from v2.1.39 added 22.5.2018 'places' : 'Places', 'calc' : 'Calculate', 'path' : 'Path', 'aliasfor' : 'Alias for', 'locked' : 'Locked', 'dim' : 'Dimensions', 'files' : 'Files', 'folders' : 'Folders', 'items' : 'Items', 'yes' : 'yes', 'no' : 'no', 'link' : 'Link', 'searcresult' : 'Search results', 'selected' : 'selected items', 'about' : 'About', 'shortcuts' : 'Shortcuts', 'help' : 'Help', 'webfm' : 'Web file manager', 'ver' : 'Version', 'protocolver' : 'protocol version', 'homepage' : 'Project home', 'docs' : 'Documentation', 'github' : 'Fork us on GitHub', 'twitter' : 'Follow us on Twitter', 'facebook' : 'Join us on Facebook', 'team' : 'Team', 'chiefdev' : 'chief developer', 'developer' : 'developer', 'contributor' : 'contributor', 'maintainer' : 'maintainer', 'translator' : 'translator', 'icons' : 'Icons', 'dontforget' : 'and don\'t forget to take your towel', 'shortcutsof' : 'Shortcuts disabled', 'dropFiles' : 'Drop files here', 'or' : 'or', 'selectForUpload' : 'Select files', 'moveFiles' : 'Move items', 'copyFiles' : 'Copy items', 'restoreFiles' : 'Restore items', // from v2.1.24 added 5.5.2017 'rmFromPlaces' : 'Remove from places', 'aspectRatio' : 'Aspect ratio', 'scale' : 'Scale', 'width' : 'Width', 'height' : 'Height', 'resize' : 'Resize', 'crop' : 'Crop', 'rotate' : 'Rotate', 'rotate-cw' : 'Rotate 90 degrees CW', 'rotate-ccw' : 'Rotate 90 degrees CCW', 'degree' : '°', 'netMountDialogTitle' : 'Mount network volume', // added 18.04.2012 'protocol' : 'Protocol', // added 18.04.2012 'host' : 'Host', // added 18.04.2012 'port' : 'Port', // added 18.04.2012 'user' : 'User', // added 18.04.2012 'pass' : 'Password', // added 18.04.2012 'confirmUnmount' : 'Are you sure to unmount $1?', // from v2.1 added 30.04.2012 'dropFilesBrowser': 'Drop or Paste files from browser', // from v2.1 added 30.05.2012 'dropPasteFiles' : 'Drop files, Paste URLs or images(clipboard) here', // from v2.1 added 07.04.2014 'encoding' : 'Encoding', // from v2.1 added 19.12.2014 'locale' : 'Locale', // from v2.1 added 19.12.2014 'searchTarget' : 'Target: $1', // from v2.1 added 22.5.2015 'searchMime' : 'Search by input MIME Type', // from v2.1 added 22.5.2015 'owner' : 'Owner', // from v2.1 added 20.6.2015 'group' : 'Group', // from v2.1 added 20.6.2015 'other' : 'Other', // from v2.1 added 20.6.2015 'execute' : 'Execute', // from v2.1 added 20.6.2015 'perm' : 'Permission', // from v2.1 added 20.6.2015 'mode' : 'Mode', // from v2.1 added 20.6.2015 'emptyFolder' : 'Folder is empty', // from v2.1.6 added 30.12.2015 'emptyFolderDrop' : 'Folder is empty\\A Drop to add items', // from v2.1.6 added 30.12.2015 'emptyFolderLTap' : 'Folder is empty\\A Long tap to add items', // from v2.1.6 added 30.12.2015 'quality' : 'Quality', // from v2.1.6 added 5.1.2016 'autoSync' : 'Auto sync', // from v2.1.6 added 10.1.2016 'moveUp' : 'Move up', // from v2.1.6 added 18.1.2016 'getLink' : 'Get URL link', // from v2.1.7 added 9.2.2016 'selectedItems' : 'Selected items ($1)', // from v2.1.7 added 2.19.2016 'folderId' : 'Folder ID', // from v2.1.10 added 3.25.2016 'offlineAccess' : 'Allow offline access', // from v2.1.10 added 3.25.2016 'reAuth' : 'To re-authenticate', // from v2.1.10 added 3.25.2016 'nowLoading' : 'Now loading...', // from v2.1.12 added 4.26.2016 'openMulti' : 'Open multiple files', // from v2.1.12 added 5.14.2016 'openMultiConfirm': 'You are trying to open the $1 files. Are you sure you want to open in browser?', // from v2.1.12 added 5.14.2016 'emptySearch' : 'Search results is empty in search target.', // from v2.1.12 added 5.16.2016 'editingFile' : 'It is editing a file.', // from v2.1.13 added 6.3.2016 'hasSelected' : 'You have selected $1 items.', // from v2.1.13 added 6.3.2016 'hasClipboard' : 'You have $1 items in the clipboard.', // from v2.1.13 added 6.3.2016 'incSearchOnly' : 'Incremental search is only from the current view.', // from v2.1.13 added 6.30.2016 'reinstate' : 'Reinstate', // from v2.1.15 added 3.8.2016 'complete' : '$1 complete', // from v2.1.15 added 21.8.2016 'contextmenu' : 'Context menu', // from v2.1.15 added 9.9.2016 'pageTurning' : 'Page turning', // from v2.1.15 added 10.9.2016 'volumeRoots' : 'Volume roots', // from v2.1.16 added 16.9.2016 'reset' : 'Reset', // from v2.1.16 added 1.10.2016 'bgcolor' : 'Background color', // from v2.1.16 added 1.10.2016 'colorPicker' : 'Color picker', // from v2.1.16 added 1.10.2016 '8pxgrid' : '8px Grid', // from v2.1.16 added 4.10.2016 'enabled' : 'Enabled', // from v2.1.16 added 4.10.2016 'disabled' : 'Disabled', // from v2.1.16 added 4.10.2016 'emptyIncSearch' : 'Search results is empty in current view.\\A Press [Enter] to expand search target.', // from v2.1.16 added 5.10.2016 'emptyLetSearch' : 'First letter search results is empty in current view.', // from v2.1.23 added 24.3.2017 'textLabel' : 'Text label', // from v2.1.17 added 13.10.2016 'minsLeft' : '$1 mins left', // from v2.1.17 added 13.11.2016 'openAsEncoding' : 'Reopen with selected encoding', // from v2.1.19 added 2.12.2016 'saveAsEncoding' : 'Save with the selected encoding', // from v2.1.19 added 2.12.2016 'selectFolder' : 'Select folder', // from v2.1.20 added 13.12.2016 'firstLetterSearch': 'First letter search', // from v2.1.23 added 24.3.2017 'presets' : 'Presets', // from v2.1.25 added 26.5.2017 'tooManyToTrash' : 'It\'s too many items so it can\'t into trash.', // from v2.1.25 added 9.6.2017 'TextArea' : 'TextArea', // from v2.1.25 added 14.6.2017 'folderToEmpty' : 'Empty the folder "$1".', // from v2.1.25 added 22.6.2017 'filderIsEmpty' : 'There are no items in a folder "$1".', // from v2.1.25 added 22.6.2017 'preference' : 'Preference', // from v2.1.26 added 28.6.2017 'language' : 'Language', // from v2.1.26 added 28.6.2017 'clearBrowserData': 'Initialize the settings saved in this browser', // from v2.1.26 added 28.6.2017 'toolbarPref' : 'Toolbar settings', // from v2.1.27 added 2.8.2017 'charsLeft' : '... $1 chars left.', // from v2.1.29 added 30.8.2017 'linesLeft' : '... $1 lines left.', // from v2.1.52 added 16.1.2020 'sum' : 'Sum', // from v2.1.29 added 28.9.2017 'roughFileSize' : 'Rough file size', // from v2.1.30 added 2.11.2017 'autoFocusDialog' : 'Focus on the element of dialog with mouseover', // from v2.1.30 added 2.11.2017 'select' : 'Select', // from v2.1.30 added 23.11.2017 'selectAction' : 'Action when select file', // from v2.1.30 added 23.11.2017 'useStoredEditor' : 'Open with the editor used last time', // from v2.1.30 added 23.11.2017 'selectinvert' : 'Invert selection', // from v2.1.30 added 25.11.2017 'renameMultiple' : 'Are you sure you want to rename $1 selected items like $2?
          This cannot be undone!', // from v2.1.31 added 4.12.2017 'batchRename' : 'Batch rename', // from v2.1.31 added 8.12.2017 'plusNumber' : '+ Number', // from v2.1.31 added 8.12.2017 'asPrefix' : 'Add prefix', // from v2.1.31 added 8.12.2017 'asSuffix' : 'Add suffix', // from v2.1.31 added 8.12.2017 'changeExtention' : 'Change extention', // from v2.1.31 added 8.12.2017 'columnPref' : 'Columns settings (List view)', // from v2.1.32 added 6.2.2018 'reflectOnImmediate' : 'All changes will reflect immediately to the archive.', // from v2.1.33 added 2.3.2018 'reflectOnUnmount' : 'Any changes will not reflect until un-mount this volume.', // from v2.1.33 added 2.3.2018 'unmountChildren' : 'The following volume(s) mounted on this volume also unmounted. Are you sure to unmount it?', // from v2.1.33 added 5.3.2018 'selectionInfo' : 'Selection Info', // from v2.1.33 added 7.3.2018 'hashChecker' : 'Algorithms to show the file hash', // from v2.1.33 added 10.3.2018 'infoItems' : 'Info Items (Selection Info Panel)', // from v2.1.38 added 28.3.2018 'pressAgainToExit': 'Press again to exit.', // from v2.1.38 added 1.4.2018 'toolbar' : 'Toolbar', // from v2.1.38 added 4.4.2018 'workspace' : 'Work Space', // from v2.1.38 added 4.4.2018 'dialog' : 'Dialog', // from v2.1.38 added 4.4.2018 'all' : 'All', // from v2.1.38 added 4.4.2018 'iconSize' : 'Icon Size (Icons view)', // from v2.1.39 added 7.5.2018 'editorMaximized' : 'Open the maximized editor window', // from v2.1.40 added 30.6.2018 'editorConvNoApi' : 'Because conversion by API is not currently available, please convert on the website.', //from v2.1.40 added 8.7.2018 'editorConvNeedUpload' : 'After conversion, you must be upload with the item URL or a downloaded file to save the converted file.', //from v2.1.40 added 8.7.2018 'convertOn' : 'Convert on the site of $1', // from v2.1.40 added 10.7.2018 'integrations' : 'Integrations', // from v2.1.40 added 11.7.2018 'integrationWith' : 'This elFinder has the following external services integrated. Please check the terms of use, privacy policy, etc. before using it.', // from v2.1.40 added 11.7.2018 'showHidden' : 'Show hidden items', // from v2.1.41 added 24.7.2018 'hideHidden' : 'Hide hidden items', // from v2.1.41 added 24.7.2018 'toggleHidden' : 'Show/Hide hidden items', // from v2.1.41 added 24.7.2018 'makefileTypes' : 'File types to enable with "New file"', // from v2.1.41 added 7.8.2018 'typeOfTextfile' : 'Type of the Text file', // from v2.1.41 added 7.8.2018 'add' : 'Add', // from v2.1.41 added 7.8.2018 'theme' : 'Theme', // from v2.1.43 added 19.10.2018 'default' : 'Default', // from v2.1.43 added 19.10.2018 'description' : 'Description', // from v2.1.43 added 19.10.2018 'website' : 'Website', // from v2.1.43 added 19.10.2018 'author' : 'Author', // from v2.1.43 added 19.10.2018 'email' : 'Email', // from v2.1.43 added 19.10.2018 'license' : 'License', // from v2.1.43 added 19.10.2018 'exportToSave' : 'This item can\'t be saved. To avoid losing the edits you need to export to your PC.', // from v2.1.44 added 1.12.2018 'dblclickToSelect': 'Double click on the file to select it.', // from v2.1.47 added 22.1.2019 'useFullscreen' : 'Use fullscreen mode', // from v2.1.47 added 19.2.2019 /********************************** mimetypes **********************************/ 'kindUnknown' : 'Unknown', 'kindRoot' : 'Volume Root', // from v2.1.16 added 16.10.2016 'kindFolder' : 'Folder', 'kindSelects' : 'Selections', // from v2.1.29 added 29.8.2017 'kindAlias' : 'Alias', 'kindAliasBroken' : 'Broken alias', // applications 'kindApp' : 'Application', 'kindPostscript' : 'Postscript document', 'kindMsOffice' : 'Microsoft Office document', 'kindMsWord' : 'Microsoft Word document', 'kindMsExcel' : 'Microsoft Excel document', 'kindMsPP' : 'Microsoft Powerpoint presentation', 'kindOO' : 'Open Office document', 'kindAppFlash' : 'Flash application', 'kindPDF' : 'Portable Document Format (PDF)', 'kindTorrent' : 'Bittorrent file', 'kind7z' : '7z archive', 'kindTAR' : 'TAR archive', 'kindGZIP' : 'GZIP archive', 'kindBZIP' : 'BZIP archive', 'kindXZ' : 'XZ archive', 'kindZIP' : 'ZIP archive', 'kindRAR' : 'RAR archive', 'kindJAR' : 'Java JAR file', 'kindTTF' : 'True Type font', 'kindOTF' : 'Open Type font', 'kindRPM' : 'RPM package', // texts 'kindText' : 'Text document', 'kindTextPlain' : 'Plain text', 'kindPHP' : 'PHP source', 'kindCSS' : 'Cascading style sheet', 'kindHTML' : 'HTML document', 'kindJS' : 'Javascript source', 'kindRTF' : 'Rich Text Format', 'kindC' : 'C source', 'kindCHeader' : 'C header source', 'kindCPP' : 'C++ source', 'kindCPPHeader' : 'C++ header source', 'kindShell' : 'Unix shell script', 'kindPython' : 'Python source', 'kindJava' : 'Java source', 'kindRuby' : 'Ruby source', 'kindPerl' : 'Perl script', 'kindSQL' : 'SQL source', 'kindXML' : 'XML document', 'kindAWK' : 'AWK source', 'kindCSV' : 'Comma separated values', 'kindDOCBOOK' : 'Docbook XML document', 'kindMarkdown' : 'Markdown text', // added 20.7.2015 // images 'kindImage' : 'Image', 'kindBMP' : 'BMP image', 'kindJPEG' : 'JPEG image', 'kindGIF' : 'GIF Image', 'kindPNG' : 'PNG Image', 'kindTIFF' : 'TIFF image', 'kindTGA' : 'TGA image', 'kindPSD' : 'Adobe Photoshop image', 'kindXBITMAP' : 'X bitmap image', 'kindPXM' : 'Pixelmator image', // media 'kindAudio' : 'Audio media', 'kindAudioMPEG' : 'MPEG audio', 'kindAudioMPEG4' : 'MPEG-4 audio', 'kindAudioMIDI' : 'MIDI audio', 'kindAudioOGG' : 'Ogg Vorbis audio', 'kindAudioWAV' : 'WAV audio', 'AudioPlaylist' : 'MP3 playlist', 'kindVideo' : 'Video media', 'kindVideoDV' : 'DV movie', 'kindVideoMPEG' : 'MPEG movie', 'kindVideoMPEG4' : 'MPEG-4 movie', 'kindVideoAVI' : 'AVI movie', 'kindVideoMOV' : 'Quick Time movie', 'kindVideoWM' : 'Windows Media movie', 'kindVideoFlash' : 'Flash movie', 'kindVideoMKV' : 'Matroska movie', 'kindVideoOGG' : 'Ogg movie' } }; } PK!8,©„>„>@file-manager-advanced/application/library/js/i18n/elfinder.sv.jsnu„[µü¤/** * Swedish translation * @author Gabriel Satzger * @version 2014-12-19 */ (function(root, factory) { if (typeof define === 'function' && define.amd) { define(['elfinder'], factory); } else if (typeof exports !== 'undefined') { module.exports = factory(require('elfinder')); } else { factory(root.elFinder); } }(this, function(elFinder) { elFinder.prototype.i18.sv = { translator : 'Gabriel Satzger <gabriel.satzger@sbg.se>', language : 'Svenska', direction : 'ltr', dateFormat : 'Y-m-d H:i', fancyDateFormat : '$1 H:i', messages : { /********************************** errors **********************************/ 'error' : 'Error', 'errUnknown' : 'Okänt error.', 'errUnknownCmd' : 'Okänt kommando.', 'errJqui' : 'Felaktig jQuery UI konfiguration. Komponenterna selectable, draggable och droppable mÃ¥ste vara inkluderade.', 'errNode' : 'elFinder kräver att DOM Elementen skapats.', 'errURL' : 'Felaktig elFinder konfiguration! URL parametern är inte satt.', 'errAccess' : 'Ã…tkomst nekad.', 'errConnect' : 'Kan inte ansluta till backend.', 'errAbort' : 'Anslutningen avbröts.', 'errTimeout' : 'Anslutningen löpte ut.', 'errNotFound' : 'Backend hittades inte.', 'errResponse' : 'Ogiltig backend svar.', 'errConf' : 'Ogiltig backend konfiguration.', 'errJSON' : 'PHP JSON modul är inte installerad.', 'errNoVolumes' : 'Läsbara volymer är inte tillgängliga.', 'errCmdParams' : 'Ogiltiga parametrar för kommandot "$1".', 'errDataNotJSON' : 'Datan är inte JSON.', 'errDataEmpty' : 'Datan är tom.', 'errCmdReq' : 'Backend begäran kräver kommandonamn.', 'errOpen' : 'Kan inte öppna "$1".', 'errNotFolder' : 'Objektet är inte en mapp.', 'errNotFile' : 'Objektet är inte en fil.', 'errRead' : 'Kan inte läsa "$1".', 'errWrite' : 'Kan inte skriva till "$1".', 'errPerm' : 'TillstÃ¥nd nekat.', 'errLocked' : '"$1" är lÃ¥st och kan inte döpas om, flyttas eller tas bort.', 'errExists' : 'Fil med namn "$1" finns redan.', 'errInvName' : 'Ogiltigt filnamn.', 'errFolderNotFound' : 'Mappen hittades inte.', 'errFileNotFound' : 'Filen hittades inte.', 'errTrgFolderNotFound' : 'MÃ¥lmappen "$1" hittades inte.', 'errPopup' : 'Webbläsaren hindrade popup-fönstret att öppnas. Ändra i webbläsarens inställningar för att kunna öppna filen.', 'errMkdir' : 'Kan inte skapa mappen "$1".', 'errMkfile' : 'Kan inte skapa filen "$1".', 'errRename' : 'Kan inte döpa om "$1".', 'errCopyFrom' : 'Kopiera filer frÃ¥n volym "$1" tillÃ¥ts inte.', 'errCopyTo' : 'Kopiera filer till volym "$1" tillÃ¥ts inte.', 'errUpload' : 'Error vid uppladdningen.', 'errUploadFile' : 'Kan inte ladda upp "$1".', 'errUploadNoFiles' : 'Inga filer hittades för uppladdning.', 'errUploadTotalSize' : 'Data överskrider den högsta tillÃ¥tna storleken.', 'errUploadFileSize' : 'Filen överskrider den högsta tillÃ¥tna storleken.', 'errUploadMime' : 'OtillÃ¥ten filtyp.', 'errUploadTransfer' : '"$1" överföringsfel.', 'errNotReplace' : 'Object "$1" already exists at this location and can not be replaced by object with another type.', 'errReplace' : 'Unable to replace "$1".', 'errSave' : 'Kan inte spara "$1".', 'errCopy' : 'Kan inte kopiera "$1".', 'errMove' : 'Kan inte flytta "$1".', 'errCopyInItself' : 'Kan inte flytta "$1" till sig själv.', 'errRm' : 'Kan inte ta bort "$1".', 'errRmSrc' : 'Unable remove source file(s).', 'errExtract' : 'Kan inte packa upp filen frÃ¥n "$1".', 'errArchive' : 'Kan inte skapa arkiv.', 'errArcType' : 'Arkivtypen stöds inte.', 'errNoArchive' : 'Filen är inte av typen arkiv.', 'errCmdNoSupport' : 'Backend stöder inte detta kommando.', 'errReplByChild' : 'Mappen “$1â€� kan inte ersättas av ett objekt den innehÃ¥ller.', 'errArcSymlinks' : 'Av säkerhetsskäl nekas arkivet att packas upp dÃ¥ det innehÃ¥ller symboliska länkar eller filer med ej tillÃ¥tna namn.', // edited 24.06.2012 'errArcMaxSize' : 'Arkivfiler överskrider största tillÃ¥tna storlek.', 'errResize' : 'Kan inte ändra storlek "$1".', 'errResizeDegree' : 'Invalid rotate degree.', 'errResizeRotate' : 'Unable to rotate image.', 'errResizeSize' : 'Invalid image size.', 'errResizeNoChange' : 'Image size not changed.', 'errUsupportType' : 'Filtypen stöds inte.', 'errNotUTF8Content' : 'Filen "$1" är inte i UTF-8 och kan inte redigeras.', // added 9.11.2011 'errNetMount' : 'Kan inte koppla "$1".', // added 17.04.2012 'errNetMountNoDriver' : 'Protokollet stöds inte.', // added 17.04.2012 'errNetMountFailed' : 'Kopplingen misslyckades.', // added 17.04.2012 'errNetMountHostReq' : 'Host krävs.', // added 18.04.2012 'errSessionExpires' : 'Your session has expired due to inactivity.', 'errCreatingTempDir' : 'Unable to create temporary directory: "$1"', 'errFtpDownloadFile' : 'Unable to download file from FTP: "$1"', 'errFtpUploadFile' : 'Unable to upload file to FTP: "$1"', 'errFtpMkdir' : 'Unable to create remote directory on FTP: "$1"', 'errArchiveExec' : 'Error while archiving files: "$1"', 'errExtractExec' : 'Error while extracting files: "$1"', /******************************* commands names ********************************/ 'cmdarchive' : 'Skapa arkiv', 'cmdback' : 'Tillbaka', 'cmdcopy' : 'Kopiera', 'cmdcut' : 'Klipp ut', 'cmddownload' : 'Ladda ned', 'cmdduplicate' : 'Duplicera', 'cmdedit' : 'Redigera fil', 'cmdextract' : 'Extrahera filer frÃ¥n arkiv', 'cmdforward' : 'FramÃ¥t', 'cmdgetfile' : 'Välj filer', 'cmdhelp' : 'Om denna programvara', 'cmdhome' : 'Hem', 'cmdinfo' : 'Visa info', 'cmdmkdir' : 'Ny mapp', 'cmdmkfile' : 'Ny fil', 'cmdopen' : 'Öppna', 'cmdpaste' : 'Klistra in', 'cmdquicklook' : 'Förhandsgranska', 'cmdreload' : 'Ladda om', 'cmdrename' : 'Döp om', 'cmdrm' : 'Radera', 'cmdsearch' : 'Hitta filer', 'cmdup' : 'GÃ¥ till överordnade katalog', 'cmdupload' : 'Ladda upp filer', 'cmdview' : 'Visa', 'cmdresize' : 'Ändra bildstorlek', 'cmdsort' : 'Sortera', 'cmdnetmount' : 'Mount network volume', /*********************************** buttons ***********************************/ 'btnClose' : 'Stäng', 'btnSave' : 'Spara', 'btnRm' : 'Ta bort', 'btnApply' : 'Verkställ', 'btnCancel' : 'Ã…ngra', 'btnNo' : 'Nej', 'btnYes' : 'Ja', 'btnDiscard': 'Discard changes', 'btnMount' : 'Mount', /******************************** notifications ********************************/ 'ntfopen' : 'Öppnar mapp', 'ntffile' : 'Öppnar fil', 'ntfreload' : 'Laddar om mappinnehÃ¥llet', 'ntfmkdir' : 'Skapar katalog', 'ntfmkfile' : 'Skapar fil', 'ntfrm' : 'Tar bort filer', 'ntfcopy' : 'Kopierar filer', 'ntfmove' : 'Flyttar filer', 'ntfprepare' : 'Förbereder att flytta filer', 'ntfrename' : 'Döper om filer', 'ntfupload' : 'Laddar upp filer', 'ntfdownload' : 'Laddar ner filer', 'ntfsave' : 'Sparar filer', 'ntfarchive' : 'Skapar arkiv', 'ntfextract' : 'Extraherar filer frÃ¥n arkiv', 'ntfsearch' : 'Söker filer', 'ntfresize' : 'Resizing images', 'ntfsmth' : 'Gör nÃ¥gonting >_<', 'ntfloadimg' : 'Laddar bild', 'ntfnetmount' : 'kopplar nätverksvolym', // added 18.04.2012 'ntfdim' : 'Acquiring image dimension', /************************************ dates **********************************/ 'dateUnknown' : 'okänt', 'Today' : 'Idag', 'Yesterday' : 'IgÃ¥r', 'msJan' : 'Jan', 'msFeb' : 'Feb', 'msMar' : 'Mar', 'msApr' : 'Apr', 'msMay' : 'Maj', 'msJun' : 'Jun', 'msJul' : 'Jul', 'msAug' : 'Aug', 'msSep' : 'Sep', 'msOct' : 'Okt', 'msNov' : 'Nov', 'msDec' : 'Dec', 'January' : 'Januari', 'February' : 'Februari', 'March' : 'Mars', 'April' : 'April', 'May' : 'Maj', 'June' : 'Juni', 'July' : 'Juli', 'August' : 'Augusti', 'September' : 'September', 'October' : 'Oktober', 'November' : 'November', 'December' : 'December', 'Sunday' : 'Söndag', 'Monday' : 'MÃ¥ndag', 'Tuesday' : 'Tisdag', 'Wednesday' : 'Onsdag', 'Thursday' : 'Torsdag', 'Friday' : 'Fredag', 'Saturday' : 'Lördag', 'Sun' : 'Sön', 'Mon' : 'MÃ¥n', 'Tue' : 'Tis', 'Wed' : 'Ons', 'Thu' : 'Tor', 'Fri' : 'Fre', 'Sat' : 'Lör', /******************************** sort variants ********************************/ 'sortname' : 'efter namn', 'sortkind' : 'efter sort', 'sortsize' : 'efter storlek', 'sortdate' : 'efter datum', 'sortFoldersFirst' : 'Mappar först', // added 22.06.2012 /********************************** messages **********************************/ 'confirmReq' : 'Bekräftelse krävs', 'confirmRm' : 'Är du säker pÃ¥ att du vill ta bort filer?
          Detta kan inte Ã¥ngras!', 'confirmRepl' : 'Ersätt den gamla filen med en ny?', 'apllyAll' : 'Använd för alla', 'name' : 'Namn', 'size' : 'Storlek', 'perms' : 'Rättigheter', 'modify' : 'Ändrad', 'kind' : 'Sort', 'read' : 'läs', 'write' : 'skriv', 'noaccess' : 'ingen Ã¥tkomst', 'and' : 'och', 'unknown' : 'okänd', 'selectall' : 'Välj alla filer', 'selectfiles' : 'Välj fil(er)', 'selectffile' : 'Välj första filen', 'selectlfile' : 'Välj sista filen', 'viewlist' : 'Listvy', 'viewicons' : 'Ikonvy', 'places' : 'Platser', 'calc' : 'Beräkna', 'path' : 'Sökväg', 'aliasfor' : 'Alias för', 'locked' : 'LÃ¥st', 'dim' : 'Dimensioner', 'files' : 'Filer', 'folders' : 'Mappar', 'items' : 'Objekt', 'yes' : 'ja', 'no' : 'nej', 'link' : 'Länk', 'searcresult' : 'Sökresultat', 'selected' : 'valda objekt', 'about' : 'Om', 'shortcuts' : 'Genväg', 'help' : 'Hjälp', 'webfm' : 'Webbfilhanterare', 'ver' : 'Version', 'protocolver' : 'protokolversion', 'homepage' : 'Projekt hemsida', 'docs' : 'Dokumentation', 'github' : 'Forka oss pÃ¥ Github', 'twitter' : 'Följ oss pÃ¥ twitter', 'facebook' : 'Följ oss pÃ¥ facebook', 'team' : 'Team', 'chiefdev' : 'senior utvecklare', 'developer' : 'utvecklare', 'contributor' : 'bidragsgivare', 'maintainer' : 'underhÃ¥llare', 'translator' : 'översättare', 'icons' : 'Ikoner', 'dontforget' : 'och glöm inte att ta med din handduk', 'shortcutsof' : 'Genvägar avaktiverade', 'dropFiles' : 'Släpp filerna här', 'or' : 'eller', 'selectForUpload' : 'Välj filer att ladda upp', 'moveFiles' : 'Flytta filer', 'copyFiles' : 'Kopiera filer', 'rmFromPlaces' : 'Ta bort frÃ¥n platser', 'aspectRatio' : 'Aspekt ratio', 'scale' : 'Skala', 'width' : 'Bredd', 'height' : 'Höjd', 'resize' : 'Ändra storlek', 'crop' : 'Beskär', 'rotate' : 'Rotera', 'rotate-cw' : 'Rotera 90 grader medurs', 'rotate-ccw' : 'Rotera 90 grader moturs', 'degree' : 'Grader', 'netMountDialogTitle' : 'Koppla nätverksvolym', // added 18.04.2012 'protocol' : 'Protokol', // added 18.04.2012 'host' : 'Host', // added 18.04.2012 'port' : 'Port', // added 18.04.2012 'user' : 'användare', // added 18.04.2012 'pass' : 'Lösenord', // added 18.04.2012 /********************************** mimetypes **********************************/ 'kindUnknown' : 'Okänd', 'kindFolder' : 'Mapp', 'kindAlias' : 'Alias', 'kindAliasBroken' : 'Trasigt alias', // applications 'kindApp' : 'Applikation', 'kindPostscript' : 'Postscript', 'kindMsOffice' : 'Microsoft Office', 'kindMsWord' : 'Microsoft Word', 'kindMsExcel' : 'Microsoft Excel', 'kindMsPP' : 'Microsoft Powerpoint', 'kindOO' : 'Open Office', 'kindAppFlash' : 'Flash', 'kindPDF' : 'Portable Document Format (PDF)', 'kindTorrent' : 'Bittorrent', 'kind7z' : '7z', 'kindTAR' : 'TAR', 'kindGZIP' : 'GZIP', 'kindBZIP' : 'BZIP', 'kindXZ' : 'XZ', 'kindZIP' : 'ZIP', 'kindRAR' : 'RAR', 'kindJAR' : 'Java JAR', 'kindTTF' : 'True Type', 'kindOTF' : 'Open Type', 'kindRPM' : 'RPM', // fonts 'kindFont' : 'Font', 'kindSFNT' : 'SFNT', 'kindEOT' : 'Embedded Open Type', 'kindWOFF' : 'Web Open Font Format', 'kindWOFF2' : 'Web Open Font Format 2', // texts 'kindText' : 'Text', 'kindTextPlain' : 'Plain', 'kindPHP' : 'PHP', 'kindCSS' : 'Cascading style sheet', 'kindHTML' : 'HTML', 'kindJS' : 'Javascript', 'kindRTF' : 'Rich Text Format', 'kindC' : 'C', 'kindCHeader' : 'C header', 'kindCPP' : 'C++', 'kindCPPHeader' : 'C++ header', 'kindShell' : 'Unix shell script', 'kindPython' : 'Python', 'kindJava' : 'Java', 'kindRuby' : 'Ruby', 'kindPerl' : 'Perl', 'kindSQL' : 'SQL', 'kindXML' : 'XML', 'kindAWK' : 'AWK', 'kindCSV' : 'CSV', 'kindDOCBOOK' : 'Docbook XML', // images 'kindImage' : 'Bild', 'kindBMP' : 'BMP', 'kindJPEG' : 'JPEG', 'kindGIF' : 'GIF', 'kindPNG' : 'PNG', 'kindTIFF' : 'TIFF', 'kindTGA' : 'TGA', 'kindPSD' : 'Adobe Photoshop', 'kindXBITMAP' : 'X bitmap', 'kindPXM' : 'Pixelmator', // media 'kindAudio' : 'Audio media', 'kindAudioMPEG' : 'MPEG audio', 'kindAudioMPEG4' : 'MPEG-4 audio', 'kindAudioMIDI' : 'MIDI audio', 'kindAudioOGG' : 'Ogg Vorbis audio', 'kindAudioWAV' : 'WAV audio', 'AudioPlaylist' : 'MP3 playlist', 'kindVideo' : 'Video media', 'kindVideoDV' : 'DV movie', 'kindVideoMPEG' : 'MPEG movie', 'kindVideoMPEG4' : 'MPEG-4 movie', 'kindVideoAVI' : 'AVI movie', 'kindVideoMOV' : 'Quick Time movie', 'kindVideoWM' : 'Windows Media movie', 'kindVideoFlash' : 'Flash movie', 'kindVideoMKV' : 'Matroska movie', 'kindVideoOGG' : 'Ogg movie' } }; })); PK!pÝ«cˆˆCfile-manager-advanced/application/library/js/i18n/elfinder.pt_BR.jsnu„[µü¤/** * Português translation * @author Leandro Carvalho * @author Wesley Osorio * @author Fernando H. Bandeira * @author Gustavo Brito * @version 2019-10-22 */ (function(root, factory) { if (typeof define === 'function' && define.amd) { define(['elfinder'], factory); } else if (typeof exports !== 'undefined') { module.exports = factory(require('elfinder')); } else { factory(root.elFinder); } }(this, function(elFinder) { elFinder.prototype.i18.pt_BR = { translator : 'Leandro Carvalho <contato@leandrowebdev.net>, Wesley Osorio<wesleyfosorio@hotmail.com>, Fernando H. Bandeira <fernando.bandeira94@gmail.com>, Gustavo Brito <britopereiragustavo@gmail.com>', language : 'Português', direction : 'ltr', dateFormat : 'd M Y H:i', // will show like: 22 Out 2019 11:34 fancyDateFormat : '$1 H:i', // will show like: Hoje 11:34 nonameDateFormat : 'ymd-His', // noname upload will show like: 191022-113433 messages : { /********************************** errors **********************************/ 'error' : 'Erro', 'errUnknown' : 'Erro desconhecido.', 'errUnknownCmd' : 'Comando desconhecido.', 'errJqui' : 'Configuração inválida do JQuery UI. Verifique se os componentes selectable, draggable e droppable estão incluídos.', 'errNode' : 'elFinder requer um elemento DOM para ser criado.', 'errURL' : 'Configuração inválida do elFinder! Você deve setar a opção da URL.', 'errAccess' : 'Acesso negado.', 'errConnect' : 'Incapaz de conectar ao backend.', 'errAbort' : 'Conexão abortada.', 'errTimeout' : 'Tempo de conexão excedido', 'errNotFound' : 'Backend não encontrado.', 'errResponse' : 'Resposta inválida do backend.', 'errConf' : 'Configuração inválida do backend.', 'errJSON' : 'Módulo PHP JSON não está instalado.', 'errNoVolumes' : 'Não existe nenhum volume legível disponivel.', 'errCmdParams' : 'Parâmetro inválido para o comando "$1".', 'errDataNotJSON' : 'Dados não estão no formato JSON.', 'errDataEmpty' : 'Dados vazios.', 'errCmdReq' : 'Requisição do Backend requer nome de comando.', 'errOpen' : 'Incapaz de abrir "$1".', 'errNotFolder' : 'Objeto não é uma pasta.', 'errNotFile' : 'Objeto não é um arquivo.', 'errRead' : 'Incapaz de ler "$1".', 'errWrite' : 'Incapaz de escrever em "$1".', 'errPerm' : 'Permissão negada.', 'errLocked' : '"$1" está bloqueado e não pode ser renomeado, movido ou removido.', 'errExists' : 'O nome do arquivo "$1" já existe neste local.', 'errInvName' : 'Nome do arquivo inválido.', 'errInvDirname' : 'Nome da pasta inválida.', // from v2.1.24 added 12.4.2017 'errFolderNotFound' : 'Pasta não encontrada.', 'errFileNotFound' : 'Arquivo não encontrado.', 'errTrgFolderNotFound' : 'Pasta de destino "$1" não encontrada.', 'errPopup' : 'O seu navegador está bloqueando popup\'s. Para abrir o arquivo, altere esta opção no seu Navegador.', 'errMkdir' : 'Incapaz de criar a pasta "$1".', 'errMkfile' : 'Incapaz de criar o arquivo "$1".', 'errRename' : 'Incapaz de renomear "$1".', 'errCopyFrom' : 'Copia dos arquivos do volume "$1" não permitida.', 'errCopyTo' : 'Copia dos arquivos para o volume "$1" não permitida.', 'errMkOutLink' : 'Incapaz de criar um link fora da unidade raiz.', // from v2.1 added 03.10.2015 'errUpload' : 'Erro no upload.', // old name - errUploadCommon 'errUploadFile' : 'Não foi possível fazer o upload "$1".', // old name - errUpload 'errUploadNoFiles' : 'Não foi encontrado nenhum arquivo para upload.', 'errUploadTotalSize' : 'Os dados excedem o tamanho máximo permitido.', // old name - errMaxSize 'errUploadFileSize' : 'Arquivo excede o tamanho máximo permitido.', // old name - errFileMaxSize 'errUploadMime' : 'Tipo de arquivo não permitido.', 'errUploadTransfer' : '"$1" erro na transferência.', 'errUploadTemp' : 'Incapaz de criar um arquivo temporário para upload.', // from v2.1 added 26.09.2015 'errNotReplace' : 'Objeto "$1" já existe neste local e não pode ser substituído por um objeto com outro tipo.', // new 'errReplace' : 'Incapaz de substituir "$1".', 'errSave' : 'Incapaz de salvar "$1".', 'errCopy' : 'Incapaz de copiar "$1".', 'errMove' : 'Incapaz de mover "$1".', 'errCopyInItself' : 'Incapaz de copiar "$1" nele mesmo.', 'errRm' : 'Incapaz de remover "$1".', 'errTrash' : 'Incapaz de deletar.', // from v2.1.24 added 30.4.2017 'errRmSrc' : 'Incapaz de remover o(s) arquivo(s) fonte.', 'errExtract' : 'Incapaz de extrair os arquivos de "$1".', 'errArchive' : 'Incapaz de criar o arquivo.', 'errArcType' : 'Tipo de arquivo não suportado.', 'errNoArchive' : 'Arquivo inválido ou é de um tipo não suportado.', 'errCmdNoSupport' : 'Backend não suporta este comando.', 'errReplByChild' : 'A pasta “$1â€� não pode ser substituída por um item que contém.', 'errArcSymlinks' : 'Por razões de segurança, negada a permissão para descompactar arquivos que contenham links ou arquivos com nomes não permitidos.', // edited 24.06.2012 'errArcMaxSize' : 'Arquivo excede o tamanho máximo permitido.', 'errResize' : 'Incapaz de redimensionar "$1".', 'errResizeDegree' : 'Grau de rotação inválido.', // added 7.3.2013 'errResizeRotate' : 'Incapaz de rotacionar a imagem.', // added 7.3.2013 'errResizeSize' : 'Tamanho inválido de imagem.', // added 7.3.2013 'errResizeNoChange' : 'Tamanho da imagem não alterado.', // added 7.3.2013 'errUsupportType' : 'Tipo de arquivo não suportado.', 'errNotUTF8Content' : 'Arquivo "$1" não está em UTF-8 e não pode ser editado.', // added 9.11.2011 'errNetMount' : 'Incapaz de montar montagem "$1".', // added 17.04.2012 'errNetMountNoDriver' : 'Protocolo não suportado.', // added 17.04.2012 'errNetMountFailed' : 'Montagem falhou.', // added 17.04.2012 'errNetMountHostReq' : 'Servidor requerido.', // added 18.04.2012 'errSessionExpires' : 'Sua sessão expirou por inatividade.', 'errCreatingTempDir' : 'Não foi possível criar um diretório temporário: "$1"', 'errFtpDownloadFile' : 'Não foi possível fazer o download do arquivo do FTP: "$1"', 'errFtpUploadFile' : 'Não foi possível fazer o upload do arquivo para o FTP: "$1"', 'errFtpMkdir' : 'Não foi possível criar um diretório remoto no FTP: "$1"', 'errArchiveExec' : 'Erro ao arquivar os arquivos: "$1"', 'errExtractExec' : 'Erro na extração dos arquivos: "$1"', 'errNetUnMount' : 'Incapaz de desmontar', // from v2.1 added 30.04.2012 'errConvUTF8' : 'Não conversivel para UTF-8', // from v2.1 added 08.04.2014 'errFolderUpload' : 'Tente utilizar o Google Chrome, se você deseja enviar uma pasta.', // from v2.1 added 26.6.2015 'errSearchTimeout' : 'Tempo limite atingido para a busca "$1". O resultado da pesquisa é parcial.', // from v2.1 added 12.1.2016 'errReauthRequire' : 'Re-autorização é necessária.', // from v2.1.10 added 24.3.2016 'errMaxTargets' : 'O número máximo de itens selecionáveis ​​é $1.', // from v2.1.17 added 17.10.2016 'errRestore' : 'Não foi possível restaurar a partir do lixo. Não é possível identificar o destino da restauração.', // from v2.1.24 added 3.5.2017 'errEditorNotFound' : 'Editor não encontrado para este tipo de arquivo.', // from v2.1.25 added 23.5.2017 'errServerError' : 'Ocorreu um erro no lado do servidor.', // from v2.1.25 added 16.6.2017 'errEmpty' : 'Não foi possível esvaziar a pasta "$1".', // from v2.1.25 added 22.6.2017 'moreErrors' : 'Existem mais $1 erros.', // from v2.1.44 added 9.12.2018 /******************************* commands names ********************************/ 'cmdarchive' : 'Criar arquivo', 'cmdback' : 'Voltar', 'cmdcopy' : 'Copiar', 'cmdcut' : 'Cortar', 'cmddownload' : 'Baixar', 'cmdduplicate' : 'Duplicar', 'cmdedit' : 'Editar arquivo', 'cmdextract' : 'Extrair arquivo de ficheiros', 'cmdforward' : 'Avançar', 'cmdgetfile' : 'Selecionar arquivos', 'cmdhelp' : 'Sobre este software', 'cmdhome' : 'Home', 'cmdinfo' : 'Propriedades', 'cmdmkdir' : 'Nova pasta', 'cmdmkdirin' : 'Em uma nova pasta', // from v2.1.7 added 19.2.2016 'cmdmkfile' : 'Novo arquivo', 'cmdopen' : 'Abrir', 'cmdpaste' : 'Colar', 'cmdquicklook' : 'Pré-vizualização', 'cmdreload' : 'Recarregar', 'cmdrename' : 'Renomear', 'cmdrm' : 'Deletar', 'cmdtrash' : 'Mover para a lixeira', //from v2.1.24 added 29.4.2017 'cmdrestore' : 'Restaurar', //from v2.1.24 added 3.5.2017 'cmdsearch' : 'Achar arquivos', 'cmdup' : 'Ir para o diretório pai', 'cmdupload' : 'Fazer upload de arquivo', 'cmdview' : 'Vizualizar', 'cmdresize' : 'Redimencionar & Rotacionar', 'cmdsort' : 'Ordenar', 'cmdnetmount' : 'Montar unidade de rede', // added 18.04.2012 'cmdnetunmount': 'Desmontar', // from v2.1 added 30.04.2012 'cmdplaces' : 'Para locais', // added 28.12.2014 'cmdchmod' : 'Alterar permissão', // from v2.1 added 20.6.2015 'cmdopendir' : 'Abrir pasta', // from v2.1 added 13.1.2016 'cmdcolwidth' : 'Redefinir largura da coluna', // from v2.1.13 added 12.06.2016 'cmdfullscreen': 'Tela cheia', // from v2.1.15 added 03.08.2016 'cmdmove' : 'Mover', // from v2.1.15 added 21.08.2016 'cmdempty' : 'Esvaziar a pasta', // from v2.1.25 added 22.06.2017 'cmdundo' : 'Desfazer', // from v2.1.27 added 31.07.2017 'cmdredo' : 'Refazer', // from v2.1.27 added 31.07.2017 'cmdpreference': 'Preferências', // from v2.1.27 added 03.08.2017 'cmdselectall' : 'Selecionar tudo', // from v2.1.28 added 15.08.2017 'cmdselectnone': 'Selecionar nenhum', // from v2.1.28 added 15.08.2017 'cmdselectinvert': 'Inverter seleção', // from v2.1.28 added 15.08.2017 'cmdopennew' : 'Abrir em nova janela', // from v2.1.38 added 3.4.2018 'cmdhide' : 'Ocultar (preferência)', // from v2.1.41 added 24.7.2018 /*********************************** buttons ***********************************/ 'btnClose' : 'Fechar', 'btnSave' : 'Salvar', 'btnRm' : 'Remover', 'btnApply' : 'Aplicar', 'btnCancel' : 'Cancelar', 'btnNo' : 'Não', 'btnYes' : 'Sim', 'btnDiscard': 'Discard changes', 'btnMount' : 'Montar', // added 18.04.2012 'btnApprove': 'Vá para $1 & aprove', // from v2.1 added 26.04.2012 'btnUnmount': 'Desmontar', // from v2.1 added 30.04.2012 'btnConv' : 'Converter', // from v2.1 added 08.04.2014 'btnCwd' : 'Aqui', // from v2.1 added 22.5.2015 'btnVolume' : 'Volume', // from v2.1 added 22.5.2015 'btnAll' : 'Todos', // from v2.1 added 22.5.2015 'btnMime' : 'Tipo MIME', // from v2.1 added 22.5.2015 'btnFileName':'Nome do arquivo', // from v2.1 added 22.5.2015 'btnSaveClose': 'Salvar & Fechar', // from v2.1 added 12.6.2015 'btnBackup' : 'Backup', // fromv2.1 added 28.11.2015 'btnRename' : 'Renomear', // from v2.1.24 added 6.4.2017 'btnRenameAll' : 'Renomear (tudo)', // from v2.1.24 added 6.4.2017 'btnPrevious' : 'Anterior ($1/$2)', // from v2.1.24 added 11.5.2017 'btnNext' : 'Próximo ($1/$2)', // from v2.1.24 added 11.5.2017 'btnSaveAs' : 'Salvar como', // from v2.1.25 added 24.5.2017 /******************************** notifications ********************************/ 'ntfopen' : 'Abrir pasta', 'ntffile' : 'Abrir arquivo', 'ntfreload' : 'Recarregar conteudo da pasta', 'ntfmkdir' : 'Criar diretório', 'ntfmkfile' : 'Criar arquivos', 'ntfrm' : 'Deletar arquivos', 'ntfcopy' : 'Copiar arquivos', 'ntfmove' : 'Mover arquivos', 'ntfprepare' : 'Preparando para copiar arquivos', 'ntfrename' : 'Renomear arquivos', 'ntfupload' : 'Subindo os arquivos', 'ntfdownload' : 'Baixando os arquivos', 'ntfsave' : 'Salvando os arquivos', 'ntfarchive' : 'Criando os arquivos', 'ntfextract' : 'Extraindo arquivos compactados', 'ntfsearch' : 'Procurando arquivos', 'ntfresize' : 'Redimensionando imagens', 'ntfsmth' : 'Fazendo alguma coisa', 'ntfloadimg' : 'Carregando Imagem', 'ntfnetmount' : 'Montando unidade de rede', // added 18.04.2012 'ntfnetunmount': 'Desmontando unidade de rede', // from v2.1 added 30.04.2012 'ntfdim' : 'Adquirindo dimensão da imagem', // added 20.05.2013 'ntfreaddir' : 'Lendo informações da pasta', // from v2.1 added 01.07.2013 'ntfurl' : 'Recebendo URL do link', // from v2.1 added 11.03.2014 'ntfchmod' : 'Alterando permissões do arquivo', // from v2.1 added 20.6.2015 'ntfpreupload': 'Verificando o nome do arquivo de upload', // from v2.1 added 31.11.2015 'ntfzipdl' : 'Criando um arquivo para download', // from v2.1.7 added 23.1.2016 'ntfparents' : 'Obtendo informações do caminho', // from v2.1.17 added 2.11.2016 'ntfchunkmerge': 'Processando o arquivo carregado', // from v2.1.17 added 2.11.2016 'ntftrash' : 'Movendo para a lixeira', // from v2.1.24 added 2.5.2017 'ntfrestore' : 'Restaurando da lixeira', // from v2.1.24 added 3.5.2017 'ntfchkdir' : 'Verificando a pasta de destino', // from v2.1.24 added 3.5.2017 'ntfundo' : 'Desfazendo a operação anterior', // from v2.1.27 added 31.07.2017 'ntfredo' : 'Refazendo o desfazer anterior', // from v2.1.27 added 31.07.2017 'ntfchkcontent' : 'Verificando conteúdos', // from v2.1.41 added 3.8.2018 /*********************************** volumes *********************************/ 'volume_Trash' : 'Lixo', //from v2.1.24 added 29.4.2017 /************************************ dates **********************************/ 'dateUnknown' : 'Desconhecido', 'Today' : 'Hoje', 'Yesterday' : 'Ontem', 'msJan' : 'Jan', 'msFeb' : 'Fev', 'msMar' : 'Mar', 'msApr' : 'Abr', 'msMay' : 'Mai', 'msJun' : 'Jun', 'msJul' : 'Jul', 'msAug' : 'Ago', 'msSep' : 'Set', 'msOct' : 'Out', 'msNov' : 'Nov', 'msDec' : 'Dez', 'January' : 'Janeiro', 'February' : 'Fevereiro', 'March' : 'Março', 'April' : 'Abril', 'May' : 'Maio', 'June' : 'Junho', 'July' : 'Julho', 'August' : 'Agosto', 'September' : 'Setembro', 'October' : 'Outubro', 'November' : 'Novembro', 'December' : 'Dezembro', 'Sunday' : 'Domingo', 'Monday' : 'Segunda-feira', 'Tuesday' : 'Terça-feira', 'Wednesday' : 'Quarta-feira', 'Thursday' : 'Quinta-feira', 'Friday' : 'Sexta-feira', 'Saturday' : 'Sábado', 'Sun' : 'Dom', 'Mon' : 'Seg', 'Tue' : 'Ter', 'Wed' : 'Qua', 'Thu' : 'Qui', 'Fri' : 'Sex', 'Sat' : 'Sáb', /******************************** sort variants ********************************/ 'sortname' : 'por nome', 'sortkind' : 'por tipo', 'sortsize' : 'por tam.', 'sortdate' : 'por data', 'sortFoldersFirst' : 'Pastas primeiro', 'sortperm' : 'Com permissão', // from v2.1.13 added 13.06.2016 'sortmode' : 'Por modo', // from v2.1.13 added 13.06.2016 'sortowner' : 'Por proprietário', // from v2.1.13 added 13.06.2016 'sortgroup' : 'Por grupo', // from v2.1.13 added 13.06.2016 'sortAlsoTreeview' : 'Vizualizar em árvore', // from v2.1.15 added 01.08.2016 /********************************** new items **********************************/ 'untitled file.txt' : 'NovoArquivo.txt', // added 10.11.2015 'untitled folder' : 'NovaPasta', // added 10.11.2015 'Archive' : 'NovoArquivo', // from v2.1 added 10.11.2015 'untitled file' : 'NovoArquivo.$1', // from v2.1.41 added 6.8.2018 'extentionfile' : '$1: Arquivo', // from v2.1.41 added 6.8.2018 'extentiontype' : '$1: $2', // from v2.1.43 added 17.10.2018 /********************************** messages **********************************/ 'confirmReq' : 'Confirmação requerida', 'confirmRm' : 'Você tem certeza que deseja remover os arquivos?
          Isto não pode ser desfeito!', 'confirmRepl' : 'Substituir arquivo velho com este novo?', 'confirmRest' : 'Substituir o item existente pelo item na lixeira?', // fromv2.1.24 added 5.5.2017 'confirmConvUTF8' : 'Não está em UTF-8
          Converter para UTF-8?
          Conteúdo se torna UTF-8 após salvar as conversões.', // from v2.1 added 08.04.2014 'confirmNonUTF8' : 'Não foi possível detectar a codificação de caracteres deste arquivo. Ele precisa ser convertido temporariamente em UTF-8 para edição. Por favor, selecione a codificação de caracteres deste arquivo.', // from v2.1.19 added 28.11.2016 'confirmNotSave' : 'Isto foi modificado.
          Você vai perder seu trabalho caso não salve as mudanças.', // from v2.1 added 15.7.2015 'confirmTrash' : 'Tem certeza de que deseja mover itens para a lixeira?', //from v2.1.24 added 29.4.2017 'confirmMove' : 'Tem certeza de que deseja mover itens para "$1"?', //from v2.1.50 added 27.7.2019 'apllyAll' : 'Aplicar a todos', 'name' : 'Nome', 'size' : 'Tamanho', 'perms' : 'Permissões', 'modify' : 'Modificado', 'kind' : 'Tipo', 'read' : 'Ler', 'write' : 'Escrever', 'noaccess' : 'Inacessível', 'and' : 'e', 'unknown' : 'Desconhecido', 'selectall' : 'Selecionar todos arquivos', 'selectfiles' : 'Selecionar arquivo(s)', 'selectffile' : 'Selecionar primeiro arquivo', 'selectlfile' : 'Slecionar último arquivo', 'viewlist' : 'Exibir como lista', 'viewicons' : 'Exibir como ícones', 'viewSmall' : '�cones pequenos', // from v2.1.39 added 22.5.2018 'viewMedium' : '�cones médios', // from v2.1.39 added 22.5.2018 'viewLarge' : '�cones grandes', // from v2.1.39 added 22.5.2018 'viewExtraLarge' : '�cones gigantes', // from v2.1.39 added 22.5.2018 'places' : 'Lugares', 'calc' : 'Calcular', 'path' : 'Caminho', 'aliasfor' : 'Alias para', 'locked' : 'Bloqueado', 'dim' : 'Dimesões', 'files' : 'Arquivos', 'folders' : 'Pastas', 'items' : 'Itens', 'yes' : 'sim', 'no' : 'não', 'link' : 'Link', 'searcresult' : 'Resultados da pesquisa', 'selected' : 'itens selecionados', 'about' : 'Sobre', 'shortcuts' : 'Atalhos', 'help' : 'Ajuda', 'webfm' : 'Gerenciador de arquivos web', 'ver' : 'Versão', 'protocolver' : 'Versão do protocolo', 'homepage' : 'Home do projeto', 'docs' : 'Documentação', 'github' : 'Fork us on Github', 'twitter' : 'Siga-nos no twitter', 'facebook' : 'Junte-se a nós no Facebook', 'team' : 'Time', 'chiefdev' : 'Desenvolvedor chefe', 'developer' : 'Desenvolvedor', 'contributor' : 'Contribuinte', 'maintainer' : 'Mantenedor', 'translator' : 'Tradutor', 'icons' : '�cones', 'dontforget' : 'e não se esqueça de levar a sua toalha', 'shortcutsof' : 'Atalhos desabilitados', 'dropFiles' : 'Solte os arquivos aqui', 'or' : 'ou', 'selectForUpload' : 'Selecione arquivos para upload', 'moveFiles' : 'Mover arquivos', 'copyFiles' : 'Copiar arquivos', 'restoreFiles' : 'Restaurar itens', // from v2.1.24 added 5.5.2017 'rmFromPlaces' : 'Remover de Lugares', 'aspectRatio' : 'Manter aspecto', 'scale' : 'Tamanho', 'width' : 'Largura', 'height' : 'Altura', 'resize' : 'Redimencionar', 'crop' : 'Cortar', 'rotate' : 'Rotacionar', 'rotate-cw' : 'Girar 90 graus CW', 'rotate-ccw' : 'Girar 90 graus CCW', 'degree' : '°', 'netMountDialogTitle' : 'Montar Unidade de rede', // added 18.04.2012 'protocol' : 'Protocolo', // added 18.04.2012 'host' : 'Servidor', // added 18.04.2012 'port' : 'Porta', // added 18.04.2012 'user' : 'Usuário', // added 18.04.2012 'pass' : 'Senha', // added 18.04.2012 'confirmUnmount' : 'Deseja desmontar $1?', // from v2.1 added 30.04.2012 'dropFilesBrowser': 'Soltar ou colar arquivos do navegador', // from v2.1 added 30.05.2012 'dropPasteFiles' : 'Solte ou cole arquivos aqui', // from v2.1 added 07.04.2014 'encoding' : 'Codificação', // from v2.1 added 19.12.2014 'locale' : 'Local', // from v2.1 added 19.12.2014 'searchTarget' : 'Alvo: $1', // from v2.1 added 22.5.2015 'searchMime' : 'Perquisar por input MIME Type', // from v2.1 added 22.5.2015 'owner' : 'Dono', // from v2.1 added 20.6.2015 'group' : 'Grupo', // from v2.1 added 20.6.2015 'other' : 'Outro', // from v2.1 added 20.6.2015 'execute' : 'Executar', // from v2.1 added 20.6.2015 'perm' : 'Permissão', // from v2.1 added 20.6.2015 'mode' : 'Modo', // from v2.1 added 20.6.2015 'emptyFolder' : 'Pasta vazia', // from v2.1.6 added 30.12.2015 'emptyFolderDrop' : 'Pasta vazia\\A Arraste itens para os adicionar', // from v2.1.6 added 30.12.2015 'emptyFolderLTap' : 'Pasta vazia\\A De um toque longo para adicionar itens', // from v2.1.6 added 30.12.2015 'quality' : 'Qualidade', // from v2.1.6 added 5.1.2016 'autoSync' : 'Auto sincronização', // from v2.1.6 added 10.1.2016 'moveUp' : 'Mover para cima', // from v2.1.6 added 18.1.2016 'getLink' : 'Obter link', // from v2.1.7 added 9.2.2016 'selectedItems' : 'Itens selecionados ($1)', // from v2.1.7 added 2.19.2016 'folderId' : 'ID da pasta', // from v2.1.10 added 3.25.2016 'offlineAccess' : 'Permitir acesso offline', // from v2.1.10 added 3.25.2016 'reAuth' : 'Se autenticar novamente', // from v2.1.10 added 3.25.2016 'nowLoading' : 'Carregando...', // from v2.1.12 added 4.26.2016 'openMulti' : 'Abrir múltiplos arquivos', // from v2.1.12 added 5.14.2016 'openMultiConfirm': 'Você está tentando abrir os arquivos $1. Tem certeza de que deseja abrir no navegador?', // from v2.1.12 added 5.14.2016 'emptySearch' : 'Os resultados da pesquisa estão vazios no destino da pesquisa.', // from v2.1.12 added 5.16.2016 'editingFile' : 'Arquivo sendo editado.', // from v2.1.13 added 6.3.2016 'hasSelected' : 'Voce selecionou $1 itens.', // from v2.1.13 added 6.3.2016 'hasClipboard' : 'Você tem $1 itens na área de transferência.', // from v2.1.13 added 6.3.2016 'incSearchOnly' : 'A pesquisa incremental é apenas da visualização atual.', // from v2.1.13 added 6.30.2016 'reinstate' : 'Restabelecer', // from v2.1.15 added 3.8.2016 'complete' : '$1 completo', // from v2.1.15 added 21.8.2016 'contextmenu' : 'Menu contextual', // from v2.1.15 added 9.9.2016 'pageTurning' : 'Virar página', // from v2.1.15 added 10.9.2016 'volumeRoots' : 'Raízes de volume', // from v2.1.16 added 16.9.2016 'reset' : 'Resetar', // from v2.1.16 added 1.10.2016 'bgcolor' : 'Cor de fundo', // from v2.1.16 added 1.10.2016 'colorPicker' : 'Seletor de cores', // from v2.1.16 added 1.10.2016 '8pxgrid' : 'Grade 8px', // from v2.1.16 added 4.10.2016 'enabled' : 'Ativado', // from v2.1.16 added 4.10.2016 'disabled' : 'Desativado', // from v2.1.16 added 4.10.2016 'emptyIncSearch' : 'Os resultados da pesquisa estão vazios na exibição atual.\\APressione [Enter] para expandir o alvo da pesquisa.', // from v2.1.16 added 5.10.2016 'emptyLetSearch' : 'Os resultados da pesquisa da primeira letra estão vazios na exibição atual.', // from v2.1.23 added 24.3.2017 'textLabel' : 'Texto do rótulo', // from v2.1.17 added 13.10.2016 'minsLeft' : '$1 minutos restantes', // from v2.1.17 added 13.11.2016 'openAsEncoding' : 'Reabrir com a codificação selecionada', // from v2.1.19 added 2.12.2016 'saveAsEncoding' : 'Salvar com a codificação selecionada', // from v2.1.19 added 2.12.2016 'selectFolder' : 'Selecione a pasta', // from v2.1.20 added 13.12.2016 'firstLetterSearch': 'Buscar primeira letra', // from v2.1.23 added 24.3.2017 'presets' : 'Predefinições', // from v2.1.25 added 26.5.2017 'tooManyToTrash' : 'São muitos itens, portanto não podem ser jogados no lixo.', // from v2.1.25 added 9.6.2017 'TextArea' : 'TextArea', // from v2.1.25 added 14.6.2017 'folderToEmpty' : 'Esvaziar a pasta "$1".', // from v2.1.25 added 22.6.2017 'filderIsEmpty' : 'Não há itens em uma pasta "$1".', // from v2.1.25 added 22.6.2017 'preference' : 'Preferência', // from v2.1.26 added 28.6.2017 'language' : 'Língua', // from v2.1.26 added 28.6.2017 'clearBrowserData': 'Inicialize as configurações salvas neste navegador', // from v2.1.26 added 28.6.2017 'toolbarPref' : 'Barra de ferramentas', // from v2.1.27 added 2.8.2017 'charsLeft' : '... $1 caracteres restantes.', // from v2.1.29 added 30.8.2017 'sum' : 'Somar', // from v2.1.29 added 28.9.2017 'roughFileSize' : 'Tamanho aproximado do arquivo', // from v2.1.30 added 2.11.2017 'autoFocusDialog' : 'Focar no elemento do diálogo com o mouse por cima', // from v2.1.30 added 2.11.2017 'select' : 'Selecione', // from v2.1.30 added 23.11.2017 'selectAction' : 'Ação ao selecionar arquivo', // from v2.1.30 added 23.11.2017 'useStoredEditor' : 'Abrir com o editor usado pela última vez', // from v2.1.30 added 23.11.2017 'selectinvert' : 'Inverter seleção', // from v2.1.30 added 25.11.2017 'renameMultiple' : 'Tem certeza de que deseja renomear $1 itens selecionados como $2?
          Isto não poderá ser desfeito!', // from v2.1.31 added 4.12.2017 'batchRename' : 'Renomear Batch', // from v2.1.31 added 8.12.2017 'plusNumber' : '+ Número', // from v2.1.31 added 8.12.2017 'asPrefix' : 'Adicionar prefixo', // from v2.1.31 added 8.12.2017 'asSuffix' : 'Adicionar sufixo', // from v2.1.31 added 8.12.2017 'changeExtention' : 'Alterar extensão', // from v2.1.31 added 8.12.2017 'columnPref' : 'Configurações de colunas (exibição em lista)', // from v2.1.32 added 6.2.2018 'reflectOnImmediate' : 'Todas as alterações serão refletidas imediatamente no arquivo.', // from v2.1.33 added 2.3.2018 'reflectOnUnmount' : 'Quaisquer alterações não serão refletidas até desmontar este volume.', // from v2.1.33 added 2.3.2018 'unmountChildren' : 'O(s) seguinte(s) volume(s) montado neste volume também desmontado. Você tem certeza que quer desmontá-lo(s)?', // from v2.1.33 added 5.3.2018 'selectionInfo' : 'Informações da seleção', // from v2.1.33 added 7.3.2018 'hashChecker' : 'Algoritmos para mostrar o hash do arquivo', // from v2.1.33 added 10.3.2018 'infoItems' : 'Itens de informação (painel Informações de seleção)', // from v2.1.38 added 28.3.2018 'pressAgainToExit': 'Pressione novamente para sair.', // from v2.1.38 added 1.4.2018 'toolbar' : 'Barra de ferramentas', // from v2.1.38 added 4.4.2018 'workspace' : 'Ã�rea de trabalho', // from v2.1.38 added 4.4.2018 'dialog' : 'Diálogo', // from v2.1.38 added 4.4.2018 'all' : 'Tudo', // from v2.1.38 added 4.4.2018 'iconSize' : 'Tamanho do ícone (Visualização de ícones)', // from v2.1.39 added 7.5.2018 'editorMaximized' : 'Abra a janela maximizada do editor', // from v2.1.40 added 30.6.2018 'editorConvNoApi' : 'Como a conversão por API não está disponível no momento, faça a conversão no site.', //from v2.1.40 added 8.7.2018 'editorConvNeedUpload' : 'Após a conversão, você deve fazer o upload com o URL do item ou um arquivo baixado para salvar o arquivo convertido.', //from v2.1.40 added 8.7.2018 'convertOn' : 'Converter no site $1', // from v2.1.40 added 10.7.2018 'integrations' : 'Integrações', // from v2.1.40 added 11.7.2018 'integrationWith' : 'Este elFinder possui os seguintes serviços externos integrados. Por favor, verifique os termos de uso, política de privacidade, etc. antes de usá-lo.', // from v2.1.40 added 11.7.2018 'showHidden' : 'Mostrar itens ocultos', // from v2.1.41 added 24.7.2018 'hideHidden' : 'Ocultar itens ocultos', // from v2.1.41 added 24.7.2018 'toggleHidden' : 'Mostrar/Ocultar itens ocultos', // from v2.1.41 added 24.7.2018 'makefileTypes' : 'Tipos de arquivo para ativar com "Novo arquivo"', // from v2.1.41 added 7.8.2018 'typeOfTextfile' : 'Tipo do arquivo de texto', // from v2.1.41 added 7.8.2018 'add' : 'Adicionar', // from v2.1.41 added 7.8.2018 'theme' : 'Tema', // from v2.1.43 added 19.10.2018 'default' : 'Padrão', // from v2.1.43 added 19.10.2018 'description' : 'Descrição', // from v2.1.43 added 19.10.2018 'website' : 'Site da internet', // from v2.1.43 added 19.10.2018 'author' : 'Autor', // from v2.1.43 added 19.10.2018 'email' : 'Email', // from v2.1.43 added 19.10.2018 'license' : 'Licença', // from v2.1.43 added 19.10.2018 'exportToSave' : 'Este item não pode ser salvo. Para evitar perder as edições, você precisa exportar para o seu PC.', // from v2.1.44 added 1.12.2018 'dblclickToSelect': 'Clique duas vezes no arquivo para selecioná-lo.', // from v2.1.47 added 22.1.2019 'useFullscreen' : 'Usar o modo de tela cheia', // from v2.1.47 added 19.2.2019 /********************************** mimetypes **********************************/ 'kindUnknown' : 'Desconhecio', 'kindRoot' : 'Raiz do volume', // from v2.1.16 added 16.10.2016 'kindFolder' : 'Pasta', 'kindSelects' : 'Seleções', // from v2.1.29 added 29.8.2017 'kindAlias' : 'Alias', 'kindAliasBroken' : 'Alias inválido', // applications 'kindApp' : 'Aplicação', 'kindPostscript' : 'Documento Postscript', 'kindMsOffice' : 'Documento Microsoft Office', 'kindMsWord' : 'Documento Microsoft Word', 'kindMsExcel' : 'Documento Microsoft Excel', 'kindMsPP' : 'Apresentação Microsoft Powerpoint', 'kindOO' : 'Documento Open Office', 'kindAppFlash' : 'Aplicação Flash', 'kindPDF' : 'Formato de Documento Portátil (PDF)', 'kindTorrent' : 'Arquivo Bittorrent', 'kind7z' : 'Arquivo 7z', 'kindTAR' : 'Arquivo TAR', 'kindGZIP' : 'Arquivo GZIP', 'kindBZIP' : 'Arquivo BZIP', 'kindXZ' : 'Arquivo XZ', 'kindZIP' : 'Arquivo ZIP', 'kindRAR' : 'Arquivo RAR', 'kindJAR' : 'Arquivo JAR', 'kindTTF' : 'Tipo verdadeiro da fonte', 'kindOTF' : 'Abrir tipo de fonte', 'kindRPM' : 'Pacote RPM', // fonts 'kindFont' : 'Fonte', 'kindSFNT' : 'SFNT fonte', 'kindEOT' : 'Embedded Open Type fonte', 'kindWOFF' : 'Web Open Font Format fonte', 'kindWOFF2' : 'Web Open Font Format 2 fonte', // texts 'kindText' : 'Arquivo de texto', 'kindTextPlain' : 'Texto simples', 'kindPHP' : 'PHP', 'kindCSS' : 'CSS', 'kindHTML' : 'Documento HTML', 'kindJS' : 'Javascript', 'kindRTF' : 'Formato Rich Text', 'kindC' : 'C', 'kindCHeader' : 'C cabeçalho', 'kindCPP' : 'C++', 'kindCPPHeader' : 'C++ cabeçalho', 'kindShell' : 'Unix shell script', 'kindPython' : 'Python', 'kindJava' : 'Java', 'kindRuby' : 'Ruby', 'kindPerl' : 'Perl', 'kindSQL' : 'SQL', 'kindXML' : 'Documento XML', 'kindAWK' : 'AWK', 'kindCSV' : 'Valores separados por vírgula', 'kindDOCBOOK' : 'Documento Docbook XML', 'kindMarkdown' : 'Texto Markdown', // added 20.7.2015 // images 'kindImage' : 'Imagem', 'kindBMP' : 'Imagem BMP', 'kindJPEG' : 'Imagem JPEG', 'kindGIF' : 'Imagem GIF', 'kindPNG' : 'Imagem PNG', 'kindTIFF' : 'Imagem TIFF', 'kindTGA' : 'Imagem TGA', 'kindPSD' : 'Imagem Adobe Photoshop', 'kindXBITMAP' : 'Imagem X bitmap', 'kindPXM' : 'Imagem Pixelmator', // media 'kindAudio' : 'Arquivo de audio', 'kindAudioMPEG' : 'Audio MPEG', 'kindAudioMPEG4' : 'Audio MPEG-4', 'kindAudioMIDI' : 'Audio MIDI', 'kindAudioOGG' : 'Audio Ogg Vorbis', 'kindAudioWAV' : 'Audio WAV', 'AudioPlaylist' : 'Lista de reprodução MP3 ', 'kindVideo' : 'Arquivo de video', 'kindVideoDV' : 'DV filme', 'kindVideoMPEG' : 'Video MPEG', 'kindVideoMPEG4' : 'Video MPEG-4', 'kindVideoAVI' : 'Video AVI', 'kindVideoMOV' : 'Filme rápido', 'kindVideoWM' : 'Video Windows Media', 'kindVideoFlash' : 'Video Flash', 'kindVideoMKV' : 'MKV', 'kindVideoOGG' : 'Video Ogg' } }; })); PK!´¿ã•F‹F‹Cfile-manager-advanced/application/library/js/i18n/elfinder.fr_CA.jsnu„[µü¤/** * Traduction canadienne française (identique à la traduction française) * @author Régis Guyomarch * @author Benoit Delachaux * @author Jonathan Grunder * @version 2019-10-15 */ (function(root, factory) { if (typeof define === 'function' && define.amd) { define(['elfinder'], factory); } else if (typeof exports !== 'undefined') { module.exports = factory(require('elfinder')); } else { factory(root.elFinder); } }(this, function(elFinder) { elFinder.prototype.i18.fr_CA = { translator : 'Régis Guyomarch <regisg@gmail.com>, Benoit Delachaux <benorde33@gmail.com>, Jonathan Grunder <jonathan.grunder@gmail.com>', language : 'française', direction : 'ltr', dateFormat : 'd/M/Y H:i', // will show like: 15/Oct/2019 14:47 fancyDateFormat : '$1 H:i', // will show like: Aujourd'hui 14:47 nonameDateFormat : 'ymd-His', // noname upload will show like: 191015-144704 messages : { /********************************** errors **********************************/ 'error' : 'Erreur', 'errUnknown' : 'Erreur inconnue.', 'errUnknownCmd' : 'Commande inconnue.', 'errJqui' : 'Mauvaise configuration de jQuery UI. Les composants Selectable, draggable et droppable doivent être inclus.', 'errNode' : 'elFinder requiert que l\'élément DOM ait été créé.', 'errURL' : 'Mauvaise configuration d\'elFinder ! L\'option URL n\'a pas été définie.', 'errAccess' : 'Accès refusé.', 'errConnect' : 'Impossible de se connecter au backend.', 'errAbort' : 'Connexion interrompue.', 'errTimeout' : 'Délai de connexion dépassé.', 'errNotFound' : 'Backend non trouvé.', 'errResponse' : 'Mauvaise réponse du backend.', 'errConf' : 'Mauvaise configuration du backend.', 'errJSON' : 'Le module PHP JSON n\'est pas installé.', 'errNoVolumes' : 'Aucun volume lisible.', 'errCmdParams' : 'Mauvais paramétrage de la commande "$1".', 'errDataNotJSON' : 'Les données ne sont pas au format JSON.', 'errDataEmpty' : 'Données inexistantes.', 'errCmdReq' : 'La requête au Backend doit comporter le nom de la commande.', 'errOpen' : 'Impossible d\'ouvrir "$1".', 'errNotFolder' : 'Cet objet n\'est pas un dossier.', 'errNotFile' : 'Cet objet n\'est pas un fichier.', 'errRead' : 'Impossible de lire "$1".', 'errWrite' : 'Impossible d\'écrire dans "$1".', 'errPerm' : 'Permission refusée.', 'errLocked' : '"$1" est verrouillé et ne peut être déplacé ou supprimé.', 'errExists' : 'Un élément nommé "$1" existe déjà.', 'errInvName' : 'Nom de fichier incorrect.', 'errInvDirname' : 'Nom de dossier incorrect.', // from v2.1.24 added 12.4.2017 'errFolderNotFound' : 'Dossier non trouvé.', 'errFileNotFound' : 'Fichier non trouvé.', 'errTrgFolderNotFound' : 'Dossier destination "$1" non trouvé.', 'errPopup' : 'Le navigateur web a empêché l\'ouverture d\'une fenêtre "popup". Pour ouvrir le fichier, modifiez les options du navigateur web.', 'errMkdir' : 'Impossible de créer le dossier "$1".', 'errMkfile' : 'Impossible de créer le fichier "$1".', 'errRename' : 'Impossible de renommer "$1".', 'errCopyFrom' : 'Interdiction de copier des fichiers depuis le volume "$1".', 'errCopyTo' : 'Interdiction de copier des fichiers vers le volume "$1".', 'errMkOutLink' : 'Impossible de créer un lien en dehors du volume principal.', // from v2.1 added 03.10.2015 'errUpload' : 'Erreur lors de l\'envoi du fichier.', // old name - errUploadCommon 'errUploadFile' : 'Impossible d\'envoyer "$1".', // old name - errUpload 'errUploadNoFiles' : 'Aucun fichier à envoyer.', 'errUploadTotalSize' : 'Les données dépassent la taille maximale allouée.', // old name - errMaxSize 'errUploadFileSize' : 'Le fichier dépasse la taille maximale allouée.', // old name - errFileMaxSize 'errUploadMime' : 'Type de fichier non autorisé.', 'errUploadTransfer' : '"$1" erreur transfert.', 'errUploadTemp' : 'Impossible de créer un fichier temporaire pour transférer les fichiers.', // from v2.1 added 26.09.2015 'errNotReplace' : 'L\'objet "$1" existe déjà à cet endroit et ne peut être remplacé par un objet d\'un type différent.', // new 'errReplace' : 'Impossible de remplacer "$1".', 'errSave' : 'Impossible de sauvegarder "$1".', 'errCopy' : 'Impossible de copier "$1".', 'errMove' : 'Impossible de déplacer "$1".', 'errCopyInItself' : 'Impossible de copier "$1" sur lui-même.', 'errRm' : 'Impossible de supprimer "$1".', 'errTrash' : 'Impossible de déplacer dans la corbeille', // from v2.1.24 added 30.4.2017 'errRmSrc' : 'Impossible de supprimer le(s) fichier(s) source(s).', 'errExtract' : 'Imbossible d\'extraire les fichiers à partir de "$1".', 'errArchive' : 'Impossible de créer l\'archive.', 'errArcType' : 'Type d\'archive non supporté.', 'errNoArchive' : 'Le fichier n\'est pas une archive, ou c\'est un type d\'archive non supporté.', 'errCmdNoSupport' : 'Le Backend ne prend pas en charge cette commande.', 'errReplByChild' : 'Le dossier “$1â€� ne peut pas être remplacé par un élément qu\'il contient.', 'errArcSymlinks' : 'Par mesure de sécurité, il est défendu d\'extraire une archive contenant des liens symboliques ou des noms de fichier non autorisés.', // edited 24.06.2012 'errArcMaxSize' : 'Les fichiers de l\'archive excèdent la taille maximale autorisée.', 'errResize' : 'Impossible de redimensionner "$1".', 'errResizeDegree' : 'Degré de rotation invalide.', // added 7.3.2013 'errResizeRotate' : 'L\'image ne peut pas être tournée.', // added 7.3.2013 'errResizeSize' : 'Dimension de l\'image non-valide.', // added 7.3.2013 'errResizeNoChange' : 'L\'image n\'est pas redimensionnable.', // added 7.3.2013 'errUsupportType' : 'Type de fichier non supporté.', 'errNotUTF8Content' : 'Le fichier "$1" n\'est pas en UTF-8, il ne peut être édité.', // added 9.11.2011 'errNetMount' : 'Impossible de monter "$1".', // added 17.04.2012 'errNetMountNoDriver' : 'Protocole non supporté.', // added 17.04.2012 'errNetMountFailed' : 'Echec du montage.', // added 17.04.2012 'errNetMountHostReq' : 'Hôte requis.', // added 18.04.2012 'errSessionExpires' : 'Votre session a expiré en raison de son inactivité.', 'errCreatingTempDir' : 'Impossible de créer le répertoire temporaire : "$1"', 'errFtpDownloadFile' : 'Impossible de télécharger le file depuis l\'accès FTP : "$1"', 'errFtpUploadFile' : 'Impossible d\'envoyer le fichier vers l\'accès FTP : "$1"', 'errFtpMkdir' : 'Impossible de créer un répertoire distant sur l\'accès FTP :"$1"', 'errArchiveExec' : 'Erreur lors de l\'archivage des fichiers : "$1"', 'errExtractExec' : 'Erreur lors de l\'extraction des fichiers : "$1"', 'errNetUnMount' : 'Impossible de démonter.', // from v2.1 added 30.04.2012 'errConvUTF8' : 'Conversion en UTF-8 impossible', // from v2.1 added 08.04.2014 'errFolderUpload' : 'Essayez Google Chrome, si voulez envoyer le dossier.', // from v2.1 added 26.6.2015 'errSearchTimeout' : 'Délai d’attente dépassé pour la recherche "$1". Le résultat de la recherche est partiel.', // from v2.1 added 12.1.2016 'errReauthRequire' : 'Réauthorisation requise.', // from v2.1.10 added 24.3.2016 'errMaxTargets' : 'Le nombre maximal d\'éléments pouvant être sélectionnés est $1.', // from v2.1.17 added 17.10.2016 'errRestore' : 'Impossible de restaurer la corbeille. La destination de la restauration n\'a pu être identifiée.', // from v2.1.24 added 3.5.2017 'errEditorNotFound' : 'Aucun éditeur n\'a été trouvé pour ce type de fichier.', // from v2.1.25 added 23.5.2017 'errServerError' : 'Une erreur est survenue du côté serveur.', // from v2.1.25 added 16.6.2017 'errEmpty' : 'Impossible de vider le dossier "$1".', // from v2.1.25 added 22.6.2017 'moreErrors' : 'There are $1 more errors.', // from v2.1.44 added 9.12.2018 /******************************* commands names ********************************/ 'cmdarchive' : 'Créer une archive', 'cmdback' : 'Précédent', 'cmdcopy' : 'Copier', 'cmdcut' : 'Couper', 'cmddownload' : 'Télécharger', 'cmdduplicate' : 'Dupliquer', 'cmdedit' : 'Éditer le fichier', 'cmdextract' : 'Extraire les fichiers de l\'archive', 'cmdforward' : 'Suivant', 'cmdgetfile' : 'Sélectionner les fichiers', 'cmdhelp' : 'À propos de ce logiciel', 'cmdhome' : 'Accueil', 'cmdinfo' : 'Informations', 'cmdmkdir' : 'Nouveau dossier', 'cmdmkdirin' : 'Dans un nouveau dossier', // from v2.1.7 added 19.2.2016 'cmdmkfile' : 'Nouveau fichier', 'cmdopen' : 'Ouvrir', 'cmdpaste' : 'Coller', 'cmdquicklook' : 'Prévisualiser', 'cmdreload' : 'Actualiser', 'cmdrename' : 'Renommer', 'cmdrm' : 'Supprimer', 'cmdtrash' : 'À la corbeille', //from v2.1.24 added 29.4.2017 'cmdrestore' : 'Restaurer', //from v2.1.24 added 3.5.2017 'cmdsearch' : 'Trouver les fichiers', 'cmdup' : 'Remonter au dossier parent', 'cmdupload' : 'Envoyer les fichiers', 'cmdview' : 'Vue', 'cmdresize' : 'Redimensionner l\'image', 'cmdsort' : 'Trier', 'cmdnetmount' : 'Monter un volume réseau', // added 18.04.2012 'cmdnetunmount': 'Démonter', // from v2.1 added 30.04.2012 'cmdplaces' : 'Vers Favoris', // added 28.12.2014 'cmdchmod' : 'Changer de mode', // from v2.1 added 20.6.2015 'cmdopendir' : 'Ouvrir un dossier', // from v2.1 added 13.1.2016 'cmdcolwidth' : 'Réinitialiser largeur colone', // from v2.1.13 added 12.06.2016 'cmdfullscreen': 'Plein écran', // from v2.1.15 added 03.08.2016 'cmdmove' : 'Déplacer', // from v2.1.15 added 21.08.2016 'cmdempty' : 'Vider le dossier', // from v2.1.25 added 22.06.2017 'cmdundo' : 'Annuler', // from v2.1.27 added 31.07.2017 'cmdredo' : 'Refaire', // from v2.1.27 added 31.07.2017 'cmdpreference': 'Préférences', // from v2.1.27 added 03.08.2017 'cmdselectall' : 'Tout sélectionner', // from v2.1.28 added 15.08.2017 'cmdselectnone': 'Tout désélectionner', // from v2.1.28 added 15.08.2017 'cmdselectinvert': 'Inverser la sélection', // from v2.1.28 added 15.08.2017 'cmdopennew' : 'Ouvrir dans une nouvelle fenêtre', // from v2.1.38 added 3.4.2018 'cmdhide' : 'Hide (Preference)', // from v2.1.41 added 24.7.2018 /*********************************** buttons ***********************************/ 'btnClose' : 'Fermer', 'btnSave' : 'Sauvegarder', 'btnRm' : 'Supprimer', 'btnApply' : 'Confirmer', 'btnCancel' : 'Annuler', 'btnNo' : 'Non', 'btnYes' : 'Oui', 'btnDiscard': 'Discard changes', 'btnMount' : 'Monter', // added 18.04.2012 'btnApprove': 'Aller à $1 & approuver', // from v2.1 added 26.04.2012 'btnUnmount': 'Démonter', // from v2.1 added 30.04.2012 'btnConv' : 'Convertir', // from v2.1 added 08.04.2014 'btnCwd' : 'Ici', // from v2.1 added 22.5.2015 'btnVolume' : 'Volume', // from v2.1 added 22.5.2015 'btnAll' : 'Tous', // from v2.1 added 22.5.2015 'btnMime' : 'Type MIME', // from v2.1 added 22.5.2015 'btnFileName':'Nom du fichier', // from v2.1 added 22.5.2015 'btnSaveClose': 'Enregistrer & Ferme', // from v2.1 added 12.6.2015 'btnBackup' : 'Sauvegarde', // fromv2.1 added 28.11.2015 'btnRename' : 'Renommer', // from v2.1.24 added 6.4.2017 'btnRenameAll' : 'Renommer (tous)', // from v2.1.24 added 6.4.2017 'btnPrevious' : 'Préc. ($1/$2)', // from v2.1.24 added 11.5.2017 'btnNext' : 'Suiv. ($1/$2)', // from v2.1.24 added 11.5.2017 'btnSaveAs' : 'Sauvegarder sous', // from v2.1.25 added 24.5.2017 /******************************** notifications ********************************/ 'ntfopen' : 'Ouvrir le dossier', 'ntffile' : 'Ouvrir le fichier', 'ntfreload' : 'Actualiser le contenu du dossier', 'ntfmkdir' : 'Création du dossier', 'ntfmkfile' : 'Création des fichiers', 'ntfrm' : 'Supprimer les éléments', 'ntfcopy' : 'Copier les éléments', 'ntfmove' : 'Déplacer les éléments', 'ntfprepare' : 'Préparation de la copie des éléments', 'ntfrename' : 'Renommer les fichiers', 'ntfupload' : 'Envoi des fichiers', 'ntfdownload' : 'Téléchargement des fichiers', 'ntfsave' : 'Sauvegarder les fichiers', 'ntfarchive' : 'Création de l\'archive', 'ntfextract' : 'Extraction des fichiers de l\'archive', 'ntfsearch' : 'Recherche des fichiers', 'ntfresize' : 'Redimensionner les images', 'ntfsmth' : 'Fait quelque chose', 'ntfloadimg' : 'Chargement de l\'image', 'ntfnetmount' : 'Monte le volume réseau', // added 18.04.2012 'ntfnetunmount': 'Démonte le volume réseau', // from v2.1 added 30.04.2012 'ntfdim' : 'Calcule la dimension de l\'image', // added 20.05.2013 'ntfreaddir' : 'Lecture des informations du dossier', // from v2.1 added 01.07.2013 'ntfurl' : 'Récupération de l’URL du lien', // from v2.1 added 11.03.2014 'ntfchmod' : 'Changement de mode', // from v2.1 added 20.6.2015 'ntfpreupload': 'Vérification du nom du fichier envoyé', // from v2.1 added 31.11.2015 'ntfzipdl' : 'Création d’un fichier pour le téléchargement', // from v2.1.7 added 23.1.2016 'ntfparents' : 'Traitement de l\'information du chemin', // from v2.1.17 added 2.11.2016 'ntfchunkmerge': 'Traitement du fichier envoyé', // from v2.1.17 added 2.11.2016 'ntftrash' : 'Mettre à la corbeille', // from v2.1.24 added 2.5.2017 'ntfrestore' : 'Restaurer depuis la corbeille', // from v2.1.24 added 3.5.2017 'ntfchkdir' : 'Validation du dossier de destination', // from v2.1.24 added 3.5.2017 'ntfundo' : 'Annuler l\'opération précédente', // from v2.1.27 added 31.07.2017 'ntfredo' : 'Refaire l\'opération annulée', // from v2.1.27 added 31.07.2017 'ntfchkcontent' : 'Checking contents', // from v2.1.41 added 3.8.2018 /*********************************** volumes *********************************/ 'volume_Trash' : 'Corbeille', //from v2.1.24 added 29.4.2017 /************************************ dates **********************************/ 'dateUnknown' : 'Inconnue', 'Today' : 'Aujourd\'hui', 'Yesterday' : 'Hier', 'msJan' : 'Jan', 'msFeb' : 'Fév', 'msMar' : 'Mar', 'msApr' : 'Avr', 'msMay' : 'Mai', 'msJun' : 'Jun', 'msJul' : 'Jul', 'msAug' : 'Aoû', 'msSep' : 'Sep', 'msOct' : 'Oct', 'msNov' : 'Nov', 'msDec' : 'Déc', 'January' : 'Janvier', 'February' : 'Février', 'March' : 'Mars', 'April' : 'Avril', 'May' : 'Mai', 'June' : 'Juin', 'July' : 'Huillet', 'August' : 'Août', 'September' : 'Septembre', 'October' : 'Octobre', 'November' : 'Novembre', 'December' : 'Décembre', 'Sunday' : 'Dimanche', 'Monday' : 'Lundi', 'Tuesday' : 'Mardi', 'Wednesday' : 'Mercredi', 'Thursday' : 'Jeudi', 'Friday' : 'Vendredi', 'Saturday' : 'Samedi', 'Sun' : 'Dim', 'Mon' : 'Lun', 'Tue' : 'Mar', 'Wed' : 'Mer', 'Thu' : 'Jeu', 'Fri' : 'Ven', 'Sat' : 'Sam', /******************************** sort variants ********************************/ 'sortname' : 'par nom', 'sortkind' : 'par type', 'sortsize' : 'par taille', 'sortdate' : 'par date', 'sortFoldersFirst' : 'Dossiers en premier', 'sortperm' : 'par permission', // from v2.1.13 added 13.06.2016 'sortmode' : 'par mode', // from v2.1.13 added 13.06.2016 'sortowner' : 'par propriétaire', // from v2.1.13 added 13.06.2016 'sortgroup' : 'par groupe', // from v2.1.13 added 13.06.2016 'sortAlsoTreeview' : 'Egalement arborescence', // from v2.1.15 added 01.08.2016 /********************************** new items **********************************/ 'untitled file.txt' : 'NouveauFichier.txt', // added 10.11.2015 'untitled folder' : 'NouveauDossier', // added 10.11.2015 'Archive' : 'NouvelleArchive', // from v2.1 added 10.11.2015 'untitled file' : 'NewFile.$1', // from v2.1.41 added 6.8.2018 'extentionfile' : '$1: File', // from v2.1.41 added 6.8.2018 'extentiontype' : '$1: $2', // from v2.1.43 added 17.10.2018 /********************************** messages **********************************/ 'confirmReq' : 'Confirmation requise', 'confirmRm' : 'Êtes-vous certain de vouloir supprimer les éléments ?
          Cela ne peut être annulé !', 'confirmRepl' : 'Supprimer l\'ancien fichier par le nouveau ?', 'confirmRest' : 'Remplacer l\'élément existant par l\'élément de la corbeille ?', // fromv2.1.24 added 5.5.2017 'confirmConvUTF8' : 'L\'encodage n\'est pas UTf-8
          Convertir en UTF-8 ?
          Les contenus deviendront UTF-8 en sauvegardant après la conversion.', // from v2.1 added 08.04.2014 'confirmNonUTF8' : 'Impossible de détecter l\'encodage de ce fichier. Pour être modifié, il doit être temporairement convertit en UTF-8.
          Veuillez s\'il vous plaît sélectionner un encodage pour ce fichier.', // from v2.1.19 added 28.11.2016 'confirmNotSave' : 'Ce fichier a été modifié.
          Les données seront perdues si les changements ne sont pas sauvegardés.', // from v2.1 added 15.7.2015 'confirmTrash' : 'Êtes-vous certain de vouloir déplacer les éléments vers la corbeille?', //from v2.1.24 added 29.4.2017 'confirmMove' : 'Are you sure you want to move items to "$1"?', //from v2.1.50 added 27.7.2019 'apllyAll' : 'Appliquer à tous', 'name' : 'Nom', 'size' : 'Taille', 'perms' : 'Permissions', 'modify' : 'Modifié', 'kind' : 'Type', 'read' : 'Lecture', 'write' : 'Écriture', 'noaccess' : 'Pas d\'accès', 'and' : 'et', 'unknown' : 'inconnu', 'selectall' : 'Sélectionner tous les éléments', 'selectfiles' : 'Sélectionner le(s) élément(s)', 'selectffile' : 'Sélectionner le premier élément', 'selectlfile' : 'Sélectionner le dernier élément', 'viewlist' : 'Vue par liste', 'viewicons' : 'Vue par icônes', 'viewSmall' : 'Petites icônes', // from v2.1.39 added 22.5.2018 'viewMedium' : 'Moyennes icônes', // from v2.1.39 added 22.5.2018 'viewLarge' : 'Grandes icônes', // from v2.1.39 added 22.5.2018 'viewExtraLarge' : 'Très grandes icônes', // from v2.1.39 added 22.5.2018 'places' : 'Favoris', 'calc' : 'Calculer', 'path' : 'Chemin', 'aliasfor' : 'Raccourcis pour', 'locked' : 'Verrouiller', 'dim' : 'Dimensions', 'files' : 'Fichiers', 'folders' : 'Dossiers', 'items' : 'Éléments', 'yes' : 'oui', 'no' : 'non', 'link' : 'Lien', 'searcresult' : 'Résultats de la recherche', 'selected' : 'Éléments sélectionnés', 'about' : 'À propos', 'shortcuts' : 'Raccourcis', 'help' : 'Aide', 'webfm' : 'Gestionnaire de fichier Web', 'ver' : 'Version', 'protocolver' : 'Version du protocole', 'homepage' : 'Page du projet', 'docs' : 'Documentation', 'github' : 'Forkez-nous sur Github', 'twitter' : 'Suivez nous sur twitter', 'facebook' : 'Joignez-nous facebook', 'team' : 'Équipe', 'chiefdev' : 'Développeur en chef', 'developer' : 'Développeur', 'contributor' : 'Contributeur', 'maintainer' : 'Mainteneur', 'translator' : 'Traducteur', 'icons' : 'Icônes', 'dontforget' : 'et n\'oubliez pas votre serviette', 'shortcutsof' : 'Raccourcis désactivés', 'dropFiles' : 'Déposez les fichiers ici', 'or' : 'ou', 'selectForUpload' : 'Sélectionner les fichiers à envoyer', 'moveFiles' : 'Déplacer les éléments', 'copyFiles' : 'Copier les éléments', 'restoreFiles' : 'Restaurer les éléments', // from v2.1.24 added 5.5.2017 'rmFromPlaces' : 'Retirer des favoris', 'aspectRatio' : 'Ratio d’affichage', 'scale' : 'Mise à l\'échelle', 'width' : 'Largeur', 'height' : 'Hauteur', 'resize' : 'Redimensionner', 'crop' : 'Recadrer', 'rotate' : 'Rotation', 'rotate-cw' : 'Rotation de 90 degrés horaire', 'rotate-ccw' : 'Rotation de 90 degrés antihoraire', 'degree' : '°', 'netMountDialogTitle' : 'Monter un volume réseau', // added 18.04.2012 'protocol' : 'Protocole', // added 18.04.2012 'host' : 'Hôte', // added 18.04.2012 'port' : 'Port', // added 18.04.2012 'user' : 'Utilisateur', // added 18.04.2012 'pass' : 'Mot de passe', // added 18.04.2012 'confirmUnmount' : 'Démonter $1?', // from v2.1 added 30.04.2012 'dropFilesBrowser': 'Glissez-déposez depuis le navigateur de fichier', // from v2.1 added 30.05.2012 'dropPasteFiles' : 'Glissez-déposez les fichiers ici', // from v2.1 added 07.04.2014 'encoding' : 'Encodage', // from v2.1 added 19.12.2014 'locale' : 'Encodage régional', // from v2.1 added 19.12.2014 'searchTarget' : 'Destination: $1', // from v2.1 added 22.5.2015 'searchMime' : 'Recherche par type MIME', // from v2.1 added 22.5.2015 'owner' : 'Propriétaire', // from v2.1 added 20.6.2015 'group' : 'Groupe', // from v2.1 added 20.6.2015 'other' : 'Autre', // from v2.1 added 20.6.2015 'execute' : 'Exécuter', // from v2.1 added 20.6.2015 'perm' : 'Permission', // from v2.1 added 20.6.2015 'mode' : 'Mode', // from v2.1 added 20.6.2015 'emptyFolder' : 'Le dossier est vide', // from v2.1.6 added 30.12.2015 'emptyFolderDrop' : 'Le dossier est vide.\\ Glissez-déposez pour ajouter des éléments.', // from v2.1.6 added 30.12.2015 'emptyFolderLTap' : 'Le dossier est vide.\\ Appuyez longuement pour ajouter des éléments.', // from v2.1.6 added 30.12.2015 'quality' : 'Qualité', // from v2.1.6 added 5.1.2016 'autoSync' : 'Synchronisation automatique', // from v2.1.6 added 10.1.2016 'moveUp' : 'Déplacer vers le haut', // from v2.1.6 added 18.1.2016 'getLink' : 'Obtenir le lien d’URL', // from v2.1.7 added 9.2.2016 'selectedItems' : 'Éléments sélectionnés ($1)', // from v2.1.7 added 2.19.2016 'folderId' : 'ID du dossier', // from v2.1.10 added 3.25.2016 'offlineAccess' : 'Permettre l\'accès hors-ligne', // from v2.1.10 added 3.25.2016 'reAuth' : 'Pour se réauthentifier', // from v2.1.10 added 3.25.2016 'nowLoading' : 'En cours de chargement...', // from v2.1.12 added 4.26.2016 'openMulti' : 'Ouvrir multiples fichiers', // from v2.1.12 added 5.14.2016 'openMultiConfirm': 'Vous allez ouvrir $1 fichiers. Êtes-vous sûr de vouloir les ouvrir dans le navigateur ?', // from v2.1.12 added 5.14.2016 'emptySearch' : 'Aucun résultat trouvé avec les paramètres de recherche.', // from v2.1.12 added 5.16.2016 'editingFile' : 'Modification d\'un fichier.', // from v2.1.13 added 6.3.2016 'hasSelected' : 'Vous avez sélectionné $1 éléments.', // from v2.1.13 added 6.3.2016 'hasClipboard' : 'Vous avez $1 éléments dans le presse-papier.', // from v2.1.13 added 6.3.2016 'incSearchOnly' : 'Recherche incrémentale disponible uniquement pour la vue active.', // from v2.1.13 added 6.30.2016 'reinstate' : 'Rétablir', // from v2.1.15 added 3.8.2016 'complete' : '$1 complété', // from v2.1.15 added 21.8.2016 'contextmenu' : 'Menu contextuel', // from v2.1.15 added 9.9.2016 'pageTurning' : 'Tourner la page', // from v2.1.15 added 10.9.2016 'volumeRoots' : 'Volumes principaux', // from v2.1.16 added 16.9.2016 'reset' : 'Réinitialiser', // from v2.1.16 added 1.10.2016 'bgcolor' : 'Couleur de fond', // from v2.1.16 added 1.10.2016 'colorPicker' : 'Sélecteur de couleur', // from v2.1.16 added 1.10.2016 '8pxgrid' : 'Grille 8px', // from v2.1.16 added 4.10.2016 'enabled' : 'Actif', // from v2.1.16 added 4.10.2016 'disabled' : 'Inactif', // from v2.1.16 added 4.10.2016 'emptyIncSearch' : 'Aucun résultat trouvé.\\AAppuyez sur [Entrée] pour développer la cible de recherche.', // from v2.1.16 added 5.10.2016 'emptyLetSearch' : 'Aucun résultat trouvé pour la recherche par première lettre.', // from v2.1.23 added 24.3.2017 'textLabel' : 'Label texte', // from v2.1.17 added 13.10.2016 'minsLeft' : '$1 mins restantes', // from v2.1.17 added 13.11.2016 'openAsEncoding' : 'Réouvrir avec l\'encodage sélectionné', // from v2.1.19 added 2.12.2016 'saveAsEncoding' : 'Sauvegarder avec l\'encodage sélectionné', // from v2.1.19 added 2.12.2016 'selectFolder' : 'Choisir le dossier', // from v2.1.20 added 13.12.2016 'firstLetterSearch': 'Recherche par première lettre', // from v2.1.23 added 24.3.2017 'presets' : 'Présélections', // from v2.1.25 added 26.5.2017 'tooManyToTrash' : 'Impossible de mettre autant d\'éléments à la corbeille.', // from v2.1.25 added 9.6.2017 'TextArea' : 'Zone de texte', // from v2.1.25 added 14.6.2017 'folderToEmpty' : 'Vider le dossier "$1".', // from v2.1.25 added 22.6.2017 'filderIsEmpty' : 'Il n\'y a pas d\'élément dans le dossier "$1".', // from v2.1.25 added 22.6.2017 'preference' : 'Préférence', // from v2.1.26 added 28.6.2017 'language' : 'Configuration de langue', // from v2.1.26 added 28.6.2017 'clearBrowserData': 'Initialisation des configurations sauvegardées dans ce navigateur', // from v2.1.26 added 28.6.2017 'toolbarPref' : 'Paramètres de la barre d\'outils', // from v2.1.27 added 2.8.2017 'charsLeft' : '... $1 caractères restants.', // from v2.1.29 added 30.8.2017 'sum' : 'Somme', // from v2.1.29 added 28.9.2017 'roughFileSize' : 'Taille de fichier brute', // from v2.1.30 added 2.11.2017 'autoFocusDialog' : 'Focus on the element of dialog with mouseover', // from v2.1.30 added 2.11.2017 'select' : 'Sélectionner', // from v2.1.30 added 23.11.2017 'selectAction' : 'Action lors de la sélection d\'un fichier', // from v2.1.30 added 23.11.2017 'useStoredEditor' : 'Ouvrir avec le dernier éditeur utilisé', // from v2.1.30 added 23.11.2017 'selectinvert' : 'Inverser la sélection', // from v2.1.30 added 25.11.2017 'renameMultiple' : 'Êtes-vous sûr de vouloir renommer les éléments sélectionnés $1 en $2 ?
          L\'action est définitive !', // from v2.1.31 added 4.12.2017 'batchRename' : 'Renommer le Batch', // from v2.1.31 added 8.12.2017 'plusNumber' : '+ Nombre', // from v2.1.31 added 8.12.2017 'asPrefix' : 'Ajouter un préfixe', // from v2.1.31 added 8.12.2017 'asSuffix' : 'Ajouter un suffixe', // from v2.1.31 added 8.12.2017 'changeExtention' : 'Modifier l\'extention', // from v2.1.31 added 8.12.2017 'columnPref' : 'Paramètres des colonnes (List view)', // from v2.1.32 added 6.2.2018 'reflectOnImmediate' : 'Les changements seront immédiatement appliqués à l\'archive.', // from v2.1.33 added 2.3.2018 'reflectOnUnmount' : 'Aucun changement ne sera appliqué tant que ce volume n\'a pas été démonté.', // from v2.1.33 added 2.3.2018 'unmountChildren' : 'Le(s) volume(s) suivant(s) montés sur ce volume seront également démontés. Êtes-vous sûr de vouloir le démonter ?', // from v2.1.33 added 5.3.2018 'selectionInfo' : 'Informations sur la sélection', // from v2.1.33 added 7.3.2018 'hashChecker' : 'Algorithme de hachage de fichier', // from v2.1.33 added 10.3.2018 'infoItems' : 'Info Items (Selection Info Panel)', // from v2.1.38 added 28.3.2018 'pressAgainToExit': 'Appuyez à nouveau pour quitter.', // from v2.1.38 added 1.4.2018 'toolbar' : 'Barre d\'outils', // from v2.1.38 added 4.4.2018 'workspace' : 'Espace de travail', // from v2.1.38 added 4.4.2018 'dialog' : 'Dialogue', // from v2.1.38 added 4.4.2018 'all' : 'Tout', // from v2.1.38 added 4.4.2018 'iconSize' : 'Icon Size (Icons view)', // from v2.1.39 added 7.5.2018 'editorMaximized' : 'Open the maximized editor window', // from v2.1.40 added 30.6.2018 'editorConvNoApi' : 'Because conversion by API is not currently available, please convert on the website.', //from v2.1.40 added 8.7.2018 'editorConvNeedUpload' : 'After conversion, you must be upload with the item URL or a downloaded file to save the converted file.', //from v2.1.40 added 8.7.2018 'convertOn' : 'Convert on the site of $1', // from v2.1.40 added 10.7.2018 'integrations' : 'Integrations', // from v2.1.40 added 11.7.2018 'integrationWith' : 'This elFinder has the following external services integrated. Please check the terms of use, privacy policy, etc. before using it.', // from v2.1.40 added 11.7.2018 'showHidden' : 'Show hidden items', // from v2.1.41 added 24.7.2018 'hideHidden' : 'Hide hidden items', // from v2.1.41 added 24.7.2018 'toggleHidden' : 'Show/Hide hidden items', // from v2.1.41 added 24.7.2018 'makefileTypes' : 'File types to enable with "New file"', // from v2.1.41 added 7.8.2018 'typeOfTextfile' : 'Type of the Text file', // from v2.1.41 added 7.8.2018 'add' : 'Add', // from v2.1.41 added 7.8.2018 'theme' : 'Theme', // from v2.1.43 added 19.10.2018 'default' : 'Default', // from v2.1.43 added 19.10.2018 'description' : 'Description', // from v2.1.43 added 19.10.2018 'website' : 'Website', // from v2.1.43 added 19.10.2018 'author' : 'Author', // from v2.1.43 added 19.10.2018 'email' : 'Email', // from v2.1.43 added 19.10.2018 'license' : 'License', // from v2.1.43 added 19.10.2018 'exportToSave' : 'This item can\'t be saved. To avoid losing the edits you need to export to your PC.', // from v2.1.44 added 1.12.2018 'dblclickToSelect': 'Double click on the file to select it.', // from v2.1.47 added 22.1.2019 'useFullscreen' : 'Use fullscreen mode', // from v2.1.47 added 19.2.2019 /********************************** mimetypes **********************************/ 'kindUnknown' : 'Inconnu', 'kindRoot' : 'Volume principal', // from v2.1.16 added 16.10.2016 'kindFolder' : 'Dossier', 'kindSelects' : 'Sélections', // from v2.1.29 added 29.8.2017 'kindAlias' : 'Raccourci', 'kindAliasBroken' : 'Raccourci cassé', // applications 'kindApp' : 'Application', 'kindPostscript' : 'Document Postscript', 'kindMsOffice' : 'Document Microsoft Office', 'kindMsWord' : 'Document Microsoft Word', 'kindMsExcel' : 'Document Microsoft Excel', 'kindMsPP' : 'Présentation Microsoft PowerPoint', 'kindOO' : 'Document OpenOffice', 'kindAppFlash' : 'Application Flash', 'kindPDF' : 'Portable Document Format (PDF)', 'kindTorrent' : 'Fichier BitTorrent', 'kind7z' : 'Archive 7z', 'kindTAR' : 'Archive TAR', 'kindGZIP' : 'Archive GZIP', 'kindBZIP' : 'Archive BZIP', 'kindXZ' : 'Archive XZ', 'kindZIP' : 'Archive ZIP', 'kindRAR' : 'Archive RAR', 'kindJAR' : 'Fichier Java JAR', 'kindTTF' : 'Police True Type', 'kindOTF' : 'Police Open Type', 'kindRPM' : 'Package RPM', // fonts 'kindFont' : 'Police', 'kindSFNT' : 'Police SFNT', 'kindEOT' : 'Police Embedded Open Type', 'kindWOFF' : 'Police Web Open Font Format', 'kindWOFF2' : 'Police Web Open Font Format 2', // texts 'kindText' : 'Document Text', 'kindTextPlain' : 'Texte non formaté', 'kindPHP' : 'Source PHP', 'kindCSS' : 'Feuille de style en cascade', 'kindHTML' : 'Document HTML', 'kindJS' : 'Source JavaScript', 'kindRTF' : 'Format de texte enrichi (Rich Text Format)', 'kindC' : 'Source C', 'kindCHeader' : 'Source header C', 'kindCPP' : 'Source C++', 'kindCPPHeader' : 'Source header C++', 'kindShell' : 'Shell script Unix', 'kindPython' : 'Source Python', 'kindJava' : 'Source Java', 'kindRuby' : 'Source Ruby', 'kindPerl' : 'Script Perl', 'kindSQL' : 'Source SQL', 'kindXML' : 'Document XML', 'kindAWK' : 'Source AWK', 'kindCSV' : 'CSV', 'kindDOCBOOK' : 'Document Docbook XML', 'kindMarkdown' : 'Markdown text', // added 20.7.2015 // images 'kindImage' : 'Image', 'kindBMP' : 'Image BMP', 'kindJPEG' : 'Image JPEG', 'kindGIF' : 'Image GIF', 'kindPNG' : 'Image PNG', 'kindTIFF' : 'Image TIFF', 'kindTGA' : 'Image TGA', 'kindPSD' : 'Image Adobe Photoshop', 'kindXBITMAP' : 'Image X bitmap', 'kindPXM' : 'Image Pixelmator', // media 'kindAudio' : 'Son', 'kindAudioMPEG' : 'Son MPEG', 'kindAudioMPEG4' : 'Son MPEG-4', 'kindAudioMIDI' : 'Son MIDI', 'kindAudioOGG' : 'Son Ogg Vorbis', 'kindAudioWAV' : 'Son WAV', 'AudioPlaylist' : 'Liste de lecture audio', 'kindVideo' : 'Vidéo', 'kindVideoDV' : 'Vidéo DV', 'kindVideoMPEG' : 'Vidéo MPEG', 'kindVideoMPEG4' : 'Vidéo MPEG-4', 'kindVideoAVI' : 'Vidéo AVI', 'kindVideoMOV' : 'Vidéo Quick Time', 'kindVideoWM' : 'Vidéo Windows Media', 'kindVideoFlash' : 'Vidéo Flash', 'kindVideoMKV' : 'Vidéo Matroska', 'kindVideoOGG' : 'Vidéo Ogg' } }; })); PK!\=•X¦X¦@file-manager-advanced/application/library/js/i18n/elfinder.fa.jsnu„[µü¤/** * Ù�ارسی translation * @author Keyhan Mohammadpour * @author mhs prog * @version 2021-04-14 */ (function(root, factory) { if (typeof define === 'function' && define.amd) { define(['elfinder'], factory); } else if (typeof exports !== 'undefined') { module.exports = factory(require('elfinder')); } else { factory(root.elFinder); } }(this, function(elFinder) { elFinder.prototype.i18.fa = { translator : 'Keyhan Mohammadpour <keyhan_universityworks@yahoo.com>, Farhad Zare <farhad@persianoc.com>', language : 'Ù�ارسی', direction : 'rtl', dateFormat : 'd.m.Y H:i', // will show like: 14.04.2021 19:24 fancyDateFormat : '$1 H:i', // will show like: امروز 19:24 nonameDateFormat : 'ymd-His', // noname upload will show like: 210414-192445 messages : { /********************************** errors **********************************/ 'error' : 'خطا', 'errUnknown' : 'خطای ناشناخته.', 'errUnknownCmd' : 'دستور ناشناخته.', 'errJqui' : 'تنظیمات کتابخانه JQuery UI شما به درستی انجام نشده است. این کتابخانه بایستی شامل Resizable ØŒDraggable Ùˆ Droppable باشد.', 'errNode' : 'elfinder به درستی ایجاد نشده است.', 'errURL' : 'تنظیمات elfinder شما به درستی انجام نشده است. تنظیم Url را اصلاح نمایید.', 'errAccess' : 'محدودیت سطح دسترسی', 'errConnect' : 'امکان اتصال به مدیریت وجود ندارد.', 'errAbort' : 'ارتباط قطع شده است.', 'errTimeout' : 'مهلت زمانی ارتباط شما به اتمام رسیده است.', 'errNotFound' : 'تنظیم مدیریت یاÙ�ت نشد.', 'errResponse' : 'پاسخ دریاÙ�تی از مدیریت صحیح نمی باشد.', 'errConf' : 'تنطیمات مدیریت به درستی انجام نشده است.', 'errJSON' : 'ماژول PHP JSON نصب نیست.', 'errNoVolumes' : 'درایوهای قابل خواندن یاÙ�ت نشدند.', 'errCmdParams' : 'پارامترهای دستور "$1" به صورت صحیح ارسال نشده است.', 'errDataNotJSON' : 'داده ها در قالب JSON نمی باشند.', 'errDataEmpty' : 'داده دریاÙ�تی خالی است.', 'errCmdReq' : 'درخواست از سمت مدیریت نیازمند نام دستور Ù…ÛŒ باشد.', 'errOpen' : 'امکان باز نمودن "$1" وجود ندارد.', 'errNotFolder' : 'آیتم موردنظر پوشه نیست.', 'errNotFile' : 'آیتم موردنظر Ù�ایل نیست.', 'errRead' : 'امکان خواندن "$1" وجود ندارد.', 'errWrite' : 'امکان نوشتن در درون "$1" وجود ندارد.', 'errPerm' : 'شما مجاز به انجام این عمل نمی باشید.', 'errLocked' : '"$1" Ù‚Ù�Ù„ گردیده است Ùˆ شما قادر به تغییر نام ØŒ حذÙ� Ùˆ یا جابجایی آن نمی باشید.', 'errExists' : 'Ù�ایلی با نام "$1" هم اکنون وجود دارد.', 'errInvName' : 'نام انتخابی شما صحیح نمی باشد.', 'errInvDirname' : 'نام پوشه غیرمعتبر Ù…ÛŒ باشد.', // from v2.1.24 added 12.4.2017 'errFolderNotFound' : 'پوشه مورد نظر یاÙ�ت نشد.', 'errFileNotFound' : 'Ù�ایل مورد نظر یاÙ�ت نشد.', 'errTrgFolderNotFound' : 'پوشه مقصد با نام "$1" یاÙ�ت نشد.', 'errPopup' : 'مرورگر شما ار باز شدن پنجره popup جلوگیری Ù…ÛŒ کند، لطÙ�ا تنظیمات مربوطه را در مرورگر خود Ù�عال نمایید.', 'errMkdir' : 'امکان ایجاد پوشه ای با نام "$1" وجود ندارد.', 'errMkfile' : 'امکان ایجاد Ù�ایلی با نام "$1" وجود ندارد.', 'errRename' : 'امکان تغییر نام Ù�ایل "$1" وجود ندارد.', 'errCopyFrom' : 'Ú©Ù¾ÛŒ نمودن از درایو با نام "$1" ممکن نمی باشد.', 'errCopyTo' : 'Ú©Ù¾ÛŒ نمودن به درایو با نام "$1" ممکن نمی باشد.', 'errMkOutLink' : 'امکان ایجاد لینک به خارج از مسیر ریشه وجود ندارد.', // from v2.1 added 03.10.2015 'errUpload' : 'خطای آپلود', // old name - errUploadCommon 'errUploadFile' : 'امکان آپلود "$1" وجود ندارد.', // old name - errUpload 'errUploadNoFiles' : 'Ù�ایلی برای آپلود یاÙ�ت نشد.', 'errUploadTotalSize' : 'حجم داده بیش از حد مجاز Ù…ÛŒ باشد.', // old name - errMaxSize 'errUploadFileSize' : 'حجم Ù�ایل بیش از حد مجاز Ù…ÛŒ باشد.', // old name - errFileMaxSize 'errUploadMime' : 'نوع Ù�ایل انتخابی مجاز نمی باشد.', 'errUploadTransfer' : 'در انتقال "$1" خطایی رخ داده است.', 'errUploadTemp' : 'امکان ایجاد Ù�ایل موقت جهت آپلود وجود ندارد.', // from v2.1 added 26.09.2015 'errNotReplace' : 'آیتم "$1" از قبل وجود دارد Ùˆ امکان جایگزینی آن با آیتمی از نوع دیگر وجود ندارد.', // new 'errReplace' : 'امکان جایگزینی "$1" وجود ندارد.', 'errSave' : 'امکان ذخیره کردن "$1" وجود ندارد.', 'errCopy' : 'امکان Ú©Ù¾ÛŒ کردن "$1" وجود ندارد.', 'errMove' : 'امکان جابجایی "$1" وجود ندارد.', 'errCopyInItself' : 'امکان Ú©Ù¾ÛŒ کردن "$1" در درون خودش وجود ندارد.', 'errRm' : 'امکان حذÙ� کردن "$1" وجود ندارد.', 'errTrash' : 'امکان حذÙ� وجود ندارد.', // from v2.1.24 added 30.4.2017 'errRmSrc' : 'امکان حذÙ� Ù�ایل(ها) از مبدا وجود ندارد.', 'errExtract' : 'امکان استخراج Ù�ایل Ù�شرده "$1" وجود ندارد.', 'errArchive' : 'امکان ایجاد Ù�ایل Ù�شرده وجود ندارد.', 'errArcType' : 'نوع ناشناخته برای Ù�ایل Ù�شرده.', 'errNoArchive' : 'این Ù�ایل Ù�شرده نیست یا اینکه این نوع Ù�ایل Ù�شرده پشتیبانی نمی شود.', 'errCmdNoSupport' : 'مدیریت از این دستور پشتیبانی نمی کند.', 'errReplByChild' : 'امکان جایگزینی پوشه "$1" با یک آیتم از درون خودش وجود ندارد.', 'errArcSymlinks' : 'به دلایل مسائل امنیتی امکان باز کردن Ù�ایل Ù�شرده دارای symlinks وجود ندارد.', // edited 24.06.2012 'errArcMaxSize' : 'Ù�ایل های Ù�شرده به حداکثر اندازه تعیین شده رسیده اند.', 'errResize' : 'امکان تغییر اندازه "$1" وجود ندارد.', 'errResizeDegree' : 'درجه چرخش نامعتبر است.', // added 7.3.2013 'errResizeRotate' : 'امکان چرخش تصویر وجود ندارد.', // added 7.3.2013 'errResizeSize' : 'اندازه تصویر نامعتبر است.', // added 7.3.2013 'errResizeNoChange' : 'تغییری در اندازه تصویر ایجاد نشده است.', // added 7.3.2013 'errUsupportType' : 'این نوع Ù�ایل پشتیبانی نمی شود.', 'errNotUTF8Content' : 'Ù�ایل "$1" به صورت UTF-8 ذخیره نشده Ùˆ امکان ویرایش آن وجود ندارد.', // added 9.11.2011 'errNetMount' : 'امکان اتصال "$1" وجود ندارد.', // added 17.04.2012 'errNetMountNoDriver' : 'این پروتکل پشتیبانی نمی شود.', // added 17.04.2012 'errNetMountFailed' : 'اتصال ناموÙ�Ù‚ بود.', // added 17.04.2012 'errNetMountHostReq' : 'میزبان موردنیاز است.', // added 18.04.2012 'errSessionExpires' : 'اعتبار جلسه کاری شما بدلیل عدم Ù�عالیت برای مدت زمان طولانی به اتمام رسیده است.', 'errCreatingTempDir' : 'امکان ایجاد دایرکتوری موقت وجود ندارد: "$1"', 'errFtpDownloadFile' : 'امکان دریاÙ�ت Ù�ایل از FTP وجود ندارد: "$1"', 'errFtpUploadFile' : 'امکان آپلود Ù�ایل به FTP وجود ندارد: "$1"', 'errFtpMkdir' : 'امکان ایجاد دایرکتوری برروی FTP وجود ندارد: "$1"', 'errArchiveExec' : 'خطا در زمان Ù�شرده سازی این Ù�ایل‌ها: "$1"', 'errExtractExec' : 'خطا در زمان بازگشایی این Ù�ایل‌ها: "$1"', 'errNetUnMount' : 'امکان قطع اتصال وجود ندارد.', // from v2.1 added 30.04.2012 'errConvUTF8' : 'امکان تبدیل به UTF-8 وجود ندارد', // from v2.1 added 08.04.2014 'errFolderUpload' : 'جهت آپلود کردن پوشه، از یک مرورگر مدرن استÙ�اده نمایید.', // from v2.1 added 26.6.2015 'errSearchTimeout' : 'در هنگان جستجو برای "$1" خطایی رخ داده است. نتیجه جستجو به صورت ناتمام Ù…ÛŒ باشد.', // from v2.1 added 12.1.2016 'errReauthRequire' : 'اعتبارسنجی مجدد موردنیاز است.', // from v2.1.10 added 24.3.2016 'errMaxTargets' : 'حداکثر تعداد انتخاب قابل قبول $1 می‌باشد.', // from v2.1.17 added 17.10.2016 'errRestore' : 'امکان بازیابی وجود ندارد. مقصد بازیابی نامشخص است.', // from v2.1.24 added 3.5.2017 'errEditorNotFound' : 'ویرایشگری برای این نوع Ù�ایل یاÙ�ت نشد.', // from v2.1.25 added 23.5.2017 'errServerError' : 'خطایی در سمت سرور به وجود آمده است.', // from v2.1.25 added 16.6.2017 'errEmpty' : 'امکان خالی کردن پوشه "$1" وجود ندارد.', // from v2.1.25 added 22.6.2017 'moreErrors' : '$1 خطای دیگر نیز وجود دارد.', // from v2.1.44 added 9.12.2018 /******************************* commands names ********************************/ 'cmdarchive' : 'ایجاد Ù�ایل Ù�شرده', 'cmdback' : 'بازگشت به عقب', 'cmdcopy' : 'Ú©Ù¾ÛŒ', 'cmdcut' : 'بریدن', 'cmddownload' : 'دانلود', 'cmdduplicate' : 'تکثیر Ù�ایل', 'cmdedit' : 'ویرایش محتوای Ù�ایل', 'cmdextract' : 'بازگشایی Ù�ایل Ù�شرده', 'cmdforward' : 'حرکت به جلو', 'cmdgetfile' : 'انتخاب Ù�ایل‌ها', 'cmdhelp' : 'درباره این نرم‌اÙ�زار', 'cmdhome' : 'ریشه', 'cmdinfo' : 'مشاهده مشخصات', 'cmdmkdir' : 'پوشه جدید', 'cmdmkdirin' : 'انتقال به پوشه جدید', // from v2.1.7 added 19.2.2016 'cmdmkfile' : 'Ù�ایل جدید', 'cmdopen' : 'باز کردن', 'cmdpaste' : 'چسباندن', 'cmdquicklook' : 'پیش نمایش', 'cmdreload' : 'بارگذاری مجدد', 'cmdrename' : 'تغییر نام', 'cmdrm' : 'حذÙ�', 'cmdtrash' : 'انتقال به سطل بازیاÙ�ت', //from v2.1.24 added 29.4.2017 'cmdrestore' : 'بازیابی', //from v2.1.24 added 3.5.2017 'cmdsearch' : 'جستجوی Ù�ایل', 'cmdup' : 'رÙ�تن به سطح بالاتر', 'cmdupload' : 'آپلود Ù�ایل', 'cmdview' : 'مشاهده', 'cmdresize' : 'تغییر اندازه Ùˆ چرخش', 'cmdsort' : 'مرتب سازی', 'cmdnetmount' : 'اتصال درایو شبکه', // added 18.04.2012 'cmdnetunmount': 'قطع اتصال', // from v2.1 added 30.04.2012 'cmdplaces' : 'به مسیرهای', // added 28.12.2014 'cmdchmod' : 'تغییر حالت', // from v2.1 added 20.6.2015 'cmdopendir' : 'بازکردن یک پوشه', // from v2.1 added 13.1.2016 'cmdcolwidth' : 'بازنشانی عرض ستون', // from v2.1.13 added 12.06.2016 'cmdfullscreen': 'حالت نمایش تمام صÙ�حه', // from v2.1.15 added 03.08.2016 'cmdmove' : 'انتقال', // from v2.1.15 added 21.08.2016 'cmdempty' : 'خالی کردن پوشه', // from v2.1.25 added 22.06.2017 'cmdundo' : 'خنثی‌سازی', // from v2.1.27 added 31.07.2017 'cmdredo' : 'انجام مجدد', // from v2.1.27 added 31.07.2017 'cmdpreference': 'تنظیمات', // from v2.1.27 added 03.08.2017 'cmdselectall' : 'انتخاب همه موارد', // from v2.1.28 added 15.08.2017 'cmdselectnone': 'لغو انتخاب', // from v2.1.28 added 15.08.2017 'cmdselectinvert': 'انتخاب معکوس', // from v2.1.28 added 15.08.2017 'cmdopennew' : 'باز کردن در پنجره جدید', // from v2.1.38 added 3.4.2018 'cmdhide' : 'مخÙ�ÛŒ (پیشنهادی)', // from v2.1.41 added 24.7.2018 /*********************************** buttons ***********************************/ 'btnClose' : 'بستن', 'btnSave' : 'ذخیره', 'btnRm' : 'حذÙ�', 'btnApply' : 'اعمال', 'btnCancel' : 'انصراÙ�', 'btnNo' : 'خیر', 'btnYes' : 'بلی', 'btnDiscard': 'Discard changes', 'btnMount' : 'اتصال', // added 18.04.2012 'btnApprove': 'رÙ�تن به $1 Ùˆ تایید', // from v2.1 added 26.04.2012 'btnUnmount': 'قطع اتصال', // from v2.1 added 30.04.2012 'btnConv' : 'تبدیل', // from v2.1 added 08.04.2014 'btnCwd' : 'اینجا', // from v2.1 added 22.5.2015 'btnVolume' : 'درایو', // from v2.1 added 22.5.2015 'btnAll' : 'همه', // from v2.1 added 22.5.2015 'btnMime' : 'نوع Ù�ایل', // from v2.1 added 22.5.2015 'btnFileName':'نام Ù�ایل', // from v2.1 added 22.5.2015 'btnSaveClose': 'ذخیره Ùˆ بستن', // from v2.1 added 12.6.2015 'btnBackup' : 'پشتیبان‌گیری', // fromv2.1 added 28.11.2015 'btnRename' : 'تغییر نام', // from v2.1.24 added 6.4.2017 'btnRenameAll' : 'تغییر نام(همه)', // from v2.1.24 added 6.4.2017 'btnPrevious' : 'قبلی ($1/$2)', // from v2.1.24 added 11.5.2017 'btnNext' : 'بعدی ($1/$2)', // from v2.1.24 added 11.5.2017 'btnSaveAs' : 'ذخیره با نام جدید', // from v2.1.25 added 24.5.2017 /******************************** notifications ********************************/ 'ntfopen' : 'در حال باز کردن پوشه', 'ntffile' : 'در حال باز کردن Ù�ایل', 'ntfreload' : 'بارگذاری مجدد محتویات پوشه', 'ntfmkdir' : 'در حال ایجاد پوشه', 'ntfmkfile' : 'در حال ایجاد Ù�ایل', 'ntfrm' : 'در حال حذÙ� موارد موردنظر', 'ntfcopy' : 'در حال Ú©Ù¾ÛŒ موارد موردنظر', 'ntfmove' : 'در حال انتقال موارد موردنظر', 'ntfprepare' : 'بررسی موارد موجود', 'ntfrename' : 'در حال تغییر نام Ù�ایل', 'ntfupload' : 'در حال آپلود Ù�ایل', 'ntfdownload' : 'در حال دانلود Ù�ایل', 'ntfsave' : 'در حال ذخیره Ù�ایل', 'ntfarchive' : 'در حال ایجاد Ù�ایل Ù�شرده', 'ntfextract' : 'در حال استخراج Ù�ایل ها از حالت Ù�شرده', 'ntfsearch' : 'در حال جستجوی Ù�ایل', 'ntfresize' : 'در حال تغییر اندازه تصاویر', 'ntfsmth' : 'درحال انجام عملیات ....', 'ntfloadimg' : 'در حال بارگذاری تصویر', 'ntfnetmount' : 'در حال اتصال درایو شبکه', // added 18.04.2012 'ntfnetunmount': 'قطع اتصال درایو شبکه', // from v2.1 added 30.04.2012 'ntfdim' : 'در حال محاسبه ابعاد تصویر', // added 20.05.2013 'ntfreaddir' : 'در حال دریاÙ�ت مشخصات پوشه', // from v2.1 added 01.07.2013 'ntfurl' : 'در حال دریاÙ�ت URL', // from v2.1 added 11.03.2014 'ntfchmod' : 'در حال تغییر نوع Ù�ایل', // from v2.1 added 20.6.2015 'ntfpreupload': 'در حال تایید نام Ù�ایل جهت آپلود', // from v2.1 added 31.11.2015 'ntfzipdl' : 'در حال ایجاد Ù�ایل جهت دانلود', // from v2.1.7 added 23.1.2016 'ntfparents' : 'در حال دریاÙ�ت اطلاعات مسیر', // from v2.1.17 added 2.11.2016 'ntfchunkmerge': 'در حال پردازش Ù�ایل آپلود شده', // from v2.1.17 added 2.11.2016 'ntftrash' : 'در حال انتقال به سطل بازیاÙ�ت', // from v2.1.24 added 2.5.2017 'ntfrestore' : 'در حال بازیابی از سطل بازیاÙ�ت', // from v2.1.24 added 3.5.2017 'ntfchkdir' : 'بررسی پوشه مقصد', // from v2.1.24 added 3.5.2017 'ntfundo' : 'در حال خنثی‌سازی آخرین عملیات', // from v2.1.27 added 31.07.2017 'ntfredo' : 'در حال انجام مجدد آخرین عملیات', // from v2.1.27 added 31.07.2017 'ntfchkcontent' : 'در حال بررسی مطالب', // from v2.1.41 added 3.8.2018 /*********************************** volumes *********************************/ 'volume_Trash' : 'سطل بازیاÙ�ت', //from v2.1.24 added 29.4.2017 /************************************ dates **********************************/ 'dateUnknown' : 'نامعلوم', 'Today' : 'امروز', 'Yesterday' : 'دیروز', 'msJan' : 'ژانویه', 'msFeb' : 'Ù�وریه', 'msMar' : 'مارس', 'msApr' : 'آوریل', 'msMay' : 'Ù…ÛŒ', 'msJun' : 'جون', 'msJul' : 'جولای', 'msAug' : 'آگوست', 'msSep' : 'سپتامبر', 'msOct' : 'اکتبر', 'msNov' : 'نوامبر', 'msDec' : 'دسامبر', 'January' : 'ژانویه', 'February' : 'Ù�وریه', 'March' : 'مارس', 'April' : 'آوریل', 'May' : 'Ù…ÛŒ', 'June' : 'جون', 'July' : 'جولای', 'August' : 'آگوست', 'September' : 'سپتامبر', 'October' : 'اکتبر', 'November' : 'نوامبر', 'December' : 'دسامبر', 'Sunday' : 'یک‌شنبه', 'Monday' : 'دوشنبه', 'Tuesday' : 'سه‌شنبه', 'Wednesday' : 'چهارشنبه', 'Thursday' : 'پنج‌شنبه', 'Friday' : 'جمعه', 'Saturday' : 'شنبه', 'Sun' : 'یک‌شنبه', 'Mon' : 'دوشنبه', 'Tue' : 'سه‌شنبه', 'Wed' : 'چهارشنبه', 'Thu' : 'پنج‌شنبه', 'Fri' : 'جمعه', 'Sat' : 'شنبه', /******************************** sort variants ********************************/ 'sortname' : 'بر اساس نام', 'sortkind' : 'بر اساس نوع', 'sortsize' : 'بر اساس اندازه', 'sortdate' : 'بر اساس تاریخ', 'sortFoldersFirst' : 'پوشه‌ها در ابتدای لیست', 'sortperm' : 'براساس سطح دسترسی', // from v2.1.13 added 13.06.2016 'sortmode' : 'براساس مد دسترسی', // from v2.1.13 added 13.06.2016 'sortowner' : 'براساس مالک', // from v2.1.13 added 13.06.2016 'sortgroup' : 'براساس گروه', // from v2.1.13 added 13.06.2016 'sortAlsoTreeview' : 'همچنین نمای درختی', // from v2.1.15 added 01.08.2016 /********************************** new items **********************************/ 'untitled file.txt' : 'Ù�ایل .txt جدید', // added 10.11.2015 'untitled folder' : 'پوشه جدید', // added 10.11.2015 'Archive' : 'بایگانی جدید', // from v2.1 added 10.11.2015 'untitled file' : '$1 Ù�ایل جدید', // from v2.1.41 added 6.8.2018 'extentionfile' : '$1: Ù�ایل', // from v2.1.41 added 6.8.2018 'extentiontype' : '$1: $2', // from v2.1.43 added 17.10.2018 /********************************** messages **********************************/ 'confirmReq' : 'تایید نهایی عملیات ضروری است.', 'confirmRm' : 'آیا مطمئنید Ú©Ù‡ موارد انتخابی حذÙ� شوند؟ موارد حدÙ� شده قابل بازیابی نخواهند بود!', 'confirmRepl' : 'مالیلد جایگزینی Ù�ایل قدیمی با Ù�ایل جدید انجام شود؟ (برای جایگزینی پوشه محتوای قدیمی با محتوای پوشه جدید ادغام خواهد شد. برای تهیه پشتیبانی Ùˆ سپس جایگزینی گزینه پشتیبان‌گیری را انتخاب نمایید)', 'confirmRest' : 'آیا مایلید موارد موجود با موارد بازیابی شده از سطل بازیاÙ�ت جایگزین شود؟', // fromv2.1.24 added 5.5.2017 'confirmConvUTF8' : 'UTF-8 نیست
          تبدیل به UTF-8 انجام شود؟
          پس از ذخیره سازی محتوا به صورت UTF-8 خواهد بود.', // from v2.1 added 08.04.2014 'confirmNonUTF8' : 'encoding این �ایل قابل تشخیص نیست. جهت ویرایش نیاز است که به صورت موقت به UTF-8 تبدیل شود.
          لط�ا encoding �ایل را انتخاب نمایید.', // from v2.1.19 added 28.11.2016 'confirmNotSave' : 'تغییراتی اعمال شده است.
          در صورت عدم ذخیره تغییرات از بین خواهد ر�ت.', // from v2.1 added 15.7.2015 'confirmTrash' : 'آیا مطمئنید که این موارد به سطل بازیا�ت منتقل شوند؟', //from v2.1.24 added 29.4.2017 'confirmMove' : 'آیا مطمئن هستید که می خواهید موارد را به "$1" منتقل کنید؟', //from v2.1.50 added 27.7.2019 'apllyAll' : 'اعمال تغییرات به همه موارد', 'name' : 'نام', 'size' : 'اندازه', 'perms' : 'سطح دسترسی', 'modify' : 'آخرین تغییرات', 'kind' : 'نوع', 'read' : 'خواندن', 'write' : 'نوشتن', 'noaccess' : 'دسترسی وجود ندارد', 'and' : 'و', 'unknown' : 'نامعلوم', 'selectall' : 'انتخاب همه موارد', 'selectfiles' : 'انتخاب یک یا چند مورد', 'selectffile' : 'انتخاب اولین مورد', 'selectlfile' : 'انتخاب آخرین مورد', 'viewlist' : 'حالت نمایش لیست', 'viewicons' : 'نمایش با آیکون', 'viewSmall' : 'آیکون‌های کوچک', // from v2.1.39 added 22.5.2018 'viewMedium' : 'آیکون‌های متوسط', // from v2.1.39 added 22.5.2018 'viewLarge' : 'آیکون‌های بزرگ', // from v2.1.39 added 22.5.2018 'viewExtraLarge' : 'آیکون‌های خیلی بزرگ', // from v2.1.39 added 22.5.2018 'places' : 'مسیرها', 'calc' : 'محاسبه', 'path' : 'مسیر', 'aliasfor' : 'نام مستعار برای', 'locked' : 'ق�ل شده', 'dim' : 'ابعاد', 'files' : '�ایل‌ها', 'folders' : 'پوشه‌ها', 'items' : 'آیتم‌ها', 'yes' : 'بلی', 'no' : 'خیر', 'link' : 'لینک', 'searcresult' : 'نتایج جستجو', 'selected' : 'موارد انتخاب شده', 'about' : 'درباره', 'shortcuts' : 'میانبرها', 'help' : 'راهنمایی', 'webfm' : 'مدیر �ایل تحت وب', 'ver' : 'نسخه', 'protocolver' : 'نسخه پروتکل', 'homepage' : 'ص�حه اصلی پروژه', 'docs' : 'مستندات', 'github' : 'ص�حه پروژه را در Github مشاهده کنید', 'twitter' : 'ما را در Twitter دنبال کنید', 'facebook' : 'به ما در facebook ملحق شوید', 'team' : 'تیم', 'chiefdev' : 'توسعه دهنده اصلی', 'developer' : 'توسعه دهنده', 'contributor' : 'مشارکت کننده', 'maintainer' : 'پشتیبان', 'translator' : 'مترجم', 'icons' : 'آیکون‌ها', 'dontforget' : 'and don\'t forget to take your towel', 'shortcutsof' : 'میانبرها غیر�عال شده‌اند.', 'dropFiles' : '�ایل ها در این بخش رها کنید.', 'or' : 'یا', 'selectForUpload' : 'انتخاب �ایل جهت آپلود', 'moveFiles' : 'انتقال موارد', 'copyFiles' : 'کپی موارد', 'restoreFiles' : 'بازیابی موارد', // from v2.1.24 added 5.5.2017 'rmFromPlaces' : 'حذ�', 'aspectRatio' : 'نسبت تصویر', 'scale' : 'مقیاس', 'width' : 'طول', 'height' : 'ارت�اع', 'resize' : 'تغییر اندازه', 'crop' : 'بریدن', 'rotate' : 'چرخاندن', 'rotate-cw' : 'چرخاندن 90 درجه در جهت عقربه‌های ساعت', 'rotate-ccw' : 'چرخاندن 90 درجه در جهت خلا� عقربه‌های ساعت', 'degree' : '°', 'netMountDialogTitle' : 'اتصال درایو شبکه', // added 18.04.2012 'protocol' : 'پروتکل', // added 18.04.2012 'host' : 'میزبان', // added 18.04.2012 'port' : 'پورت', // added 18.04.2012 'user' : 'نام کاربری', // added 18.04.2012 'pass' : 'کلمه عبور', // added 18.04.2012 'confirmUnmount' : 'مطمئن به قطع اتصال $1 می باشد؟', // from v2.1 added 30.04.2012 'dropFilesBrowser': '�ایل‌ها را به داخل این کادر بیندازید یا از حا�ظه paste کنید', // from v2.1 added 30.05.2012 'dropPasteFiles' : '�ایل‌ها را به داخل این کادر بیندازید یا از داخل حا�ظه آدرس URL/تصاویر را paste کنید', // from v2.1 added 07.04.2014 'encoding' : 'نوع کد گذاری', // from v2.1 added 19.12.2014 'locale' : 'نوع Locale', // from v2.1 added 19.12.2014 'searchTarget' : 'مقصد: $1', // from v2.1 added 22.5.2015 'searchMime' : 'جستجو براساس MIME Type وارد شده', // from v2.1 added 22.5.2015 'owner' : 'مالک', // from v2.1 added 20.6.2015 'group' : 'گروه', // from v2.1 added 20.6.2015 'other' : 'سایر', // from v2.1 added 20.6.2015 'execute' : 'قابل اجرا', // from v2.1 added 20.6.2015 'perm' : 'سطح دسترسی', // from v2.1 added 20.6.2015 'mode' : 'مد دسترسی', // from v2.1 added 20.6.2015 'emptyFolder' : 'پوشه خالی است', // from v2.1.6 added 30.12.2015 'emptyFolderDrop' : 'پوشه خالی است، �ایل‌ها را جهت ا�زودن کشیده و رها کنید', // from v2.1.6 added 30.12.2015 'emptyFolderLTap' : 'پوشه خالی است، یک اشاره طولانی برای ا�زودن �ایل کا�ی است', // from v2.1.6 added 30.12.2015 'quality' : 'کی�یت', // from v2.1.6 added 5.1.2016 'autoSync' : 'همگام‌سازی خودکار', // from v2.1.6 added 10.1.2016 'moveUp' : 'حرکت به بالا', // from v2.1.6 added 18.1.2016 'getLink' : 'دریا�ت URL لینک', // from v2.1.7 added 9.2.2016 'selectedItems' : 'موارد انتخاب شده ($1)', // from v2.1.7 added 2.19.2016 'folderId' : 'شناسه پوشه', // from v2.1.10 added 3.25.2016 'offlineAccess' : 'اجازه دسترسی به صورت آ�لاین', // from v2.1.10 added 3.25.2016 'reAuth' : 'جهت اعتبارسنجی مجدد', // from v2.1.10 added 3.25.2016 'nowLoading' : 'در حال بازگذاری...', // from v2.1.12 added 4.26.2016 'openMulti' : 'بازکردن چندین �ایل', // from v2.1.12 added 5.14.2016 'openMultiConfirm': 'شما قصد باز کردن $1 �ایل را دارید. آیا مایلید همه موارد در مرورگر باز شود؟', // from v2.1.12 added 5.14.2016 'emptySearch' : 'موردی یا�ت نشد.', // from v2.1.12 added 5.16.2016 'editingFile' : 'در حال ویرایش یک �ایل.', // from v2.1.13 added 6.3.2016 'hasSelected' : 'شما $1 مورد را انتخاب کرده‌اید.', // from v2.1.13 added 6.3.2016 'hasClipboard' : 'در حا�ظه $1 مورد وجود دارد.', // from v2.1.13 added 6.3.2016 'incSearchOnly' : 'جستجوی ا�زایش �قط از نمای �علی.', // from v2.1.13 added 6.30.2016 'reinstate' : 'بازگرداندن', // from v2.1.15 added 3.8.2016 'complete' : 'عملیات $1 انجام شد', // from v2.1.15 added 21.8.2016 'contextmenu' : 'منو راست', // from v2.1.15 added 9.9.2016 'pageTurning' : 'چرخش ص�حه', // from v2.1.15 added 10.9.2016 'volumeRoots' : 'ریشه‌های درایو', // from v2.1.16 added 16.9.2016 'reset' : 'بازنشانی', // from v2.1.16 added 1.10.2016 'bgcolor' : 'رنگ پس زمینه', // from v2.1.16 added 1.10.2016 'colorPicker' : 'انتخابگر رنگ', // from v2.1.16 added 1.10.2016 '8pxgrid' : 'گرید 8px', // from v2.1.16 added 4.10.2016 'enabled' : '�عال شده', // from v2.1.16 added 4.10.2016 'disabled' : 'غیر�عال شده', // from v2.1.16 added 4.10.2016 'emptyIncSearch' : 'در نمای �علی موردی یا�ت نشد.\\Aبا �شردن کلید Enter مسیر جستجو را تغییر دهید.', // from v2.1.16 added 5.10.2016 'emptyLetSearch' : 'برای جستجوی تک حر�ی در نمایش �علی موردی یا�ت نشد.', // from v2.1.23 added 24.3.2017 'textLabel' : 'عنوان متنی', // from v2.1.17 added 13.10.2016 'minsLeft' : '$1 دقیقه باقیمانده', // from v2.1.17 added 13.11.2016 'openAsEncoding' : 'باز کردن مجدد با کد گذاری انتخاب شده', // from v2.1.19 added 2.12.2016 'saveAsEncoding' : 'ذخیره با کد گذاری انتخاب شده', // from v2.1.19 added 2.12.2016 'selectFolder' : 'انتخاب پوشه', // from v2.1.20 added 13.12.2016 'firstLetterSearch': 'جستجوی تک حر�ی', // from v2.1.23 added 24.3.2017 'presets' : 'از پیش تعیین شده', // from v2.1.25 added 26.5.2017 'tooManyToTrash' : 'موارد زیاد است و امکان انتقال به سطل بازیا�ت وجود ندارد.', // from v2.1.25 added 9.6.2017 'TextArea' : 'ویرایش محتوا', // from v2.1.25 added 14.6.2017 'folderToEmpty' : 'خالی کردن پوشه "$1".', // from v2.1.25 added 22.6.2017 'filderIsEmpty' : 'پوشه "$1" ‌ذاتا خالی است.', // from v2.1.25 added 22.6.2017 'preference' : 'تنظیمات', // from v2.1.26 added 28.6.2017 'language' : 'زبان', // from v2.1.26 added 28.6.2017 'clearBrowserData': 'بازبینی تنظیمات ذخیره شده در این مرورگر', // from v2.1.26 added 28.6.2017 'toolbarPref' : 'تنظیمات نوار ابزار', // from v2.1.27 added 2.8.2017 'charsLeft' : '... $1 کاراکتر باقیمانده.', // from v2.1.29 added 30.8.2017 'linesLeft' : '$1 خط مانده است', // from v2.1.52 added 16.1.2020 'sum' : 'مجموع', // from v2.1.29 added 28.9.2017 'roughFileSize' : 'اندازه �ایل نامتعار�', // from v2.1.30 added 2.11.2017 'autoFocusDialog' : 'انتخاب عناصر داخل دیالوگ با mouseover', // from v2.1.30 added 2.11.2017 'select' : 'انتخاب', // from v2.1.30 added 23.11.2017 'selectAction' : 'عملیات به هنگام انتخاب �ایل', // from v2.1.30 added 23.11.2017 'useStoredEditor' : 'باز کردن با ویرایشگر مورداست�اده در آخرین د�عه', // from v2.1.30 added 23.11.2017 'selectinvert' : 'انتخاب معکوس', // from v2.1.30 added 25.11.2017 'renameMultiple' : 'آیا مایل به تغییر نام $1 مورد انتخاب شده همانند $2 هستید؟
          امکان بازگرداندن این تغییر پس از اعمالو جود ندارد!', // from v2.1.31 added 4.12.2017 'batchRename' : 'تغییرنام گروهی', // from v2.1.31 added 8.12.2017 'plusNumber' : '+ عدد', // from v2.1.31 added 8.12.2017 'asPrefix' : 'اÙ�زودن پیشوند', // from v2.1.31 added 8.12.2017 'asSuffix' : 'اÙ�زودن پسوند', // from v2.1.31 added 8.12.2017 'changeExtention' : 'تغییر پسوند Ù�ایل', // from v2.1.31 added 8.12.2017 'columnPref' : 'تنظیمات ستون‌ها (حالت نمایش لیست)', // from v2.1.32 added 6.2.2018 'reflectOnImmediate' : 'تمامی تغییرات به صورت آنی برروی Ù�ایل Ù�شرده اعمال خواهد شد.', // from v2.1.33 added 2.3.2018 'reflectOnUnmount' : 'تمامی تغییرات تا زمانی Ú©Ù‡ اتصال این درایو قطع نشده است اعمال نخواهند شد.', // from v2.1.33 added 2.3.2018 'unmountChildren' : 'اتصال به درایوهای زیر قطع خواهد شد. آیا مطمئن به ادامه عملیات هستید؟', // from v2.1.33 added 5.3.2018 'selectionInfo' : 'مشخصات', // from v2.1.33 added 7.3.2018 'hashChecker' : 'الگوریتم های نمایش hash Ù�ایل', // from v2.1.33 added 10.3.2018 'infoItems' : 'موارد اطلاعات', // from v2.1.38 added 28.3.2018 'pressAgainToExit': 'جهت خروج مجدد Ù�شار دهید.', // from v2.1.38 added 1.4.2018 'toolbar' : 'نوار ابزار', // from v2.1.38 added 4.4.2018 'workspace' : 'Ù�ضای کاری', // from v2.1.38 added 4.4.2018 'dialog' : 'پنجره دیالوگ', // from v2.1.38 added 4.4.2018 'all' : 'همه', // from v2.1.38 added 4.4.2018 'iconSize' : 'اندازه آیکون‌ها (نمایش به صورت آیکون)', // from v2.1.39 added 7.5.2018 'editorMaximized' : 'باز کردن پنجره ویرایشگر به صورت تمام صÙ�حه', // from v2.1.40 added 30.6.2018 'editorConvNoApi' : 'بدلیل در دسترسی نبودن تبدیل از طریق APIØŒ لطÙ�ا برروی وب سایت تبدیل را انجام دهید.', //from v2.1.40 added 8.7.2018 'editorConvNeedUpload' : 'پس از تبدیل, شما بایستی از طریق آدرس URL یا Ù�ایل دریاÙ�ت شده آپلود را انجاد دهید تا Ù�ایل تبدیل شده ذخیره گردد.', //from v2.1.40 added 8.7.2018 'convertOn' : 'تبدیل برروی سایت از $1', // from v2.1.40 added 10.7.2018 'integrations' : 'هماهنگ سازی‌ها', // from v2.1.40 added 11.7.2018 'integrationWith' : 'elFinder با سرویس های زیر هماهنگ شده است. لطÙ�ا ابتدا شرایط استÙ�اده، مقررات حریم خصوصی Ùˆ سایر موارد را مطالعه بÙ�رمایید.', // from v2.1.40 added 11.7.2018 'showHidden' : 'نمایش موارد پنهان', // from v2.1.41 added 24.7.2018 'hideHidden' : 'موارد مخÙ�ÛŒ را پنهان کنید', // from v2.1.41 added 24.7.2018 'toggleHidden' : 'نمایش / پنهان کردن موارد پنهان', // from v2.1.41 added 24.7.2018 'makefileTypes' : 'File types to enable with "New file"', // from v2.1.41 added 7.8.2018 'typeOfTextfile' : 'نوع Ù�ایل نوشتاری', // from v2.1.41 added 7.8.2018 'add' : 'اضاÙ�Ù‡ کردن', // from v2.1.41 added 7.8.2018 'theme' : 'Theme', // from v2.1.43 added 19.10.2018 'default' : 'پیش Ù�رض', // from v2.1.43 added 19.10.2018 'description' : 'توضیحات', // from v2.1.43 added 19.10.2018 'website' : 'وب سایت', // from v2.1.43 added 19.10.2018 'author' : 'نویستده', // from v2.1.43 added 19.10.2018 'email' : 'ایمیل', // from v2.1.43 added 19.10.2018 'license' : 'لایسنس', // from v2.1.43 added 19.10.2018 'exportToSave' : 'این مورد ذخیره نمی شود برای جلوگیری از دست دادن ویرایش ها ØŒ آنها را به رایانه خود منتقل کنید.', // from v2.1.44 added 1.12.2018 'dblclickToSelect': 'برای انتخاب پرونده ØŒ دوبار کلیک کنید.', // from v2.1.47 added 22.1.2019 'useFullscreen' : 'از حالت تمام صÙ�حه استÙ�اده کنید', // from v2.1.47 added 19.2.2019 /********************************** mimetypes **********************************/ 'kindUnknown' : 'نامعلوم', 'kindRoot' : 'ریشه درایو', // from v2.1.16 added 16.10.2016 'kindFolder' : 'پوشه', 'kindSelects' : 'انتخاب شده‌ها', // from v2.1.29 added 29.8.2017 'kindAlias' : 'اسم مستعار', 'kindAliasBroken' : 'اسم مستعار ناقص', // applications 'kindApp' : 'برنامه', 'kindPostscript' : 'سند Postscript', 'kindMsOffice' : 'سند Microsoft Office', 'kindMsWord' : 'سند Microsoft Word', 'kindMsExcel' : 'سند Microsoft Excel', 'kindMsPP' : 'Ù�ایل ارایه Microsoft Powerpoint', 'kindOO' : 'سند Open Office', 'kindAppFlash' : 'برنامه Ù�لش', 'kindPDF' : 'سند قابل حمل (PDF)', 'kindTorrent' : 'Ù�ایل تورنت', 'kind7z' : 'Ù�ایل Ù�شرده 7z', 'kindTAR' : 'Ù�ایل Ù�شرده TAR', 'kindGZIP' : 'Ù�ایل Ù�شرده GZIP', 'kindBZIP' : 'Ù�ایل Ù�شرده BZIP', 'kindXZ' : 'Ù�ایل Ù�شرده XZ', 'kindZIP' : 'Ù�ایل Ù�شرده ZIP', 'kindRAR' : 'Ù�ایل Ù�شرده RAR', 'kindJAR' : 'Ù�ایل JAR مربوط به جاوا', 'kindTTF' : 'Ù�ونت True Type', 'kindOTF' : 'Ù�ونت Open Type', 'kindRPM' : 'بسته RPM', // fonts 'kindFont' : 'Ù�ونت', 'kindSFNT' : 'Ù�ونت SFNT', 'kindEOT' : 'Ù�ونت Embedded Open Type', 'kindWOFF' : 'Ù�ونت Web Open Font Format', 'kindWOFF2' : 'Ù�ونت Web Open Font Format 2', // texts 'kindText' : 'سند متنی', 'kindTextPlain' : 'سند متنی ساده', 'kindPHP' : 'سورس کد PHP', 'kindCSS' : 'Ù�ایل style sheet', 'kindHTML' : 'سند HTML', 'kindJS' : 'سورس کد Javascript', 'kindRTF' : 'سند متنی غنی', 'kindC' : 'سورس کد C', 'kindCHeader' : 'سورس کد C header', 'kindCPP' : 'سورس کد C++', 'kindCPPHeader' : 'سورس کد C++ header', 'kindShell' : 'اسکریپت شل یونیکس', 'kindPython' : 'سورس کد Python', 'kindJava' : 'سورس کد Java', 'kindRuby' : 'سورس کد Ruby', 'kindPerl' : 'اسکریپت Perl', 'kindSQL' : 'سورس کد SQL', 'kindXML' : 'سند XML', 'kindAWK' : 'سورس کد AWK', 'kindCSV' : 'مقادیر جداشده با کامل', 'kindDOCBOOK' : 'سند Docbook XML', 'kindMarkdown' : 'سند متنی Markdown', // added 20.7.2015 // images 'kindImage' : 'تصویر', 'kindBMP' : 'تصویر BMP', 'kindJPEG' : 'تصویر JPEG', 'kindGIF' : 'تصویر GIF', 'kindPNG' : 'تصویر PNG', 'kindTIFF' : 'تصویر TIFF', 'kindTGA' : 'تصویر TGA', 'kindPSD' : 'تصویر Adobe Photoshop', 'kindXBITMAP' : 'تصویر X bitmap', 'kindPXM' : 'تصویر Pixelmator', // media 'kindAudio' : 'Ù�ایل صوتی', 'kindAudioMPEG' : 'Ù�ایل صوتی MPEG', 'kindAudioMPEG4' : 'Ù�ایل صوتی MPEG-4', 'kindAudioMIDI' : 'Ù�ایل صوتی MIDI', 'kindAudioOGG' : 'Ù�ایل صوتی Ogg Vorbis', 'kindAudioWAV' : 'Ù�ایل صوتی WAV', 'AudioPlaylist' : 'لیست پخش MP3', 'kindVideo' : 'Ù�ایل ویدیویی', 'kindVideoDV' : 'Ù�ایل ویدیویی DV', 'kindVideoMPEG' : 'Ù�ایل ویدیویی MPEG', 'kindVideoMPEG4' : 'Ù�ایل ویدیویی MPEG-4', 'kindVideoAVI' : 'Ù�ایل ویدیویی AVI', 'kindVideoMOV' : 'Ù�ایل ویدیویی Quick Time', 'kindVideoWM' : 'Ù�ایل ویدیویی Windows Media', 'kindVideoFlash' : 'Ù�ایل ویدیویی Flash', 'kindVideoMKV' : 'Ù�ایل ویدیویی Matroska', 'kindVideoOGG' : 'Ù�ایل ویدیویی Ogg' } }; })); PK!ÛoBùs?s?@file-manager-advanced/application/library/js/i18n/elfinder.no.jsnu„[µü¤/** * Norwegian translation * @author Stian Jacobsen * @version 2014-12-19 */ (function(root, factory) { if (typeof define === 'function' && define.amd) { define(['elfinder'], factory); } else if (typeof exports !== 'undefined') { module.exports = factory(require('elfinder')); } else { factory(root.elFinder); } }(this, function(elFinder) { elFinder.prototype.i18.no = { translator : 'Stian Jacobsen <stian@promonorge.no>', language : 'Norwegian BokmÃ¥l', dateFormat : 'M d, Y h:i A', // Mar 13, 2012 05:27 PM fancyDateFormat : '$1 h:i A', // will produce smth like: Today 12:25 PM direction : 'ltr', messages : { /********************************** errors **********************************/ 'error' : 'Feil', 'errUnknown' : 'Ukjent feil.', 'errUnknownCmd' : 'Ukjent kommando.', 'errJqui' : 'Ugyldig jQuery UI konfigurasjon. Selectable, draggable og droppable komponentene mÃ¥ være inkludert.', 'errNode' : 'elFinder pÃ¥krever at DOM Elementer kan opprettes.', 'errURL' : 'Ugyldig elFinder konfigurasjon! URL-valget er ikke satt.', 'errAccess' : 'Ingen adgang.', 'errConnect' : 'Kunne ikke koble til.', 'errAbort' : 'Tilkoblingen avbrutt.', 'errTimeout' : 'Tilkoblingen tidsavbrudd.', 'errNotFound' : 'Backend ble ikke funnet', 'errResponse' : 'Ugyldig backend respons.', 'errConf' : 'Ugyldig backend konfigurasjon.', 'errJSON' : 'PHP JSON modul er ikke installert.', 'errNoVolumes' : 'Lesbar volum er ikke tilgjennelig.', 'errCmdParams' : 'Ugyldig parameter for kommando "$1".', 'errDataNotJSON' : 'Innhold er ikke JSON.', 'errDataEmpty' : 'Innholdet er tomt.', 'errCmdReq' : 'Backend spørringen pÃ¥krever kommando.', 'errOpen' : 'Kunne ikke Ã¥pne "$1".', 'errNotFolder' : 'Objektet er ikke en mappe.', 'errNotFile' : 'Objektet er ikke en fil.', 'errRead' : 'Kunne ikke lese "$1".', 'errWrite' : 'Kunne ikke skrive til "$1".', 'errPerm' : 'Du har ikke rettigheter.', 'errLocked' : '"$1" er lÃ¥st og kan ikke flyttes, slettes eller endres', 'errExists' : 'Filen "$1" finnes allerede.', 'errInvName' : 'Ugyldig filnavn.', 'errFolderNotFound' : 'Mappen finnes ikke.', 'errFileNotFound' : 'Filen finnes ikke.', 'errTrgFolderNotFound' : 'MÃ¥lmappen "$1" ble ikke funnet.', 'errPopup' : 'Nettleseren din blokkerte et pop-up vindu. For Ã¥ Ã¥pne filen mÃ¥ du aktivere pop-up i din nettlesers innstillinger.', 'errMkdir' : 'Kunne ikke opprette mappen "$1".', 'errMkfile' : 'Kunne ikke opprette filen "$1".', 'errRename' : 'Kunne ikke gi nytt navn til "$1".', 'errCopyFrom' : 'Kopiere filer fra "$1" er ikke tillatt.', 'errCopyTo' : 'Kopiere filer til "$1" er ikke tillatt.', 'errUpload' : 'Feil under opplasting.', 'errUploadFile' : 'Kunne ikke laste opp "$1".', 'errUploadNoFiles' : 'Ingen filer funnet til opplasting.', 'errUploadTotalSize' : 'Innholdet overgÃ¥r maksimum tillatt størrelse.', 'errUploadFileSize' : 'Filen vergÃ¥r maksimum tillatt størrelse.', 'errUploadMime' : 'Filtypen ikke tillatt.', 'errUploadTransfer' : '"$1" overførings feil.', 'errNotReplace' : 'Object "$1" already exists at this location and can not be replaced by object with another type.', 'errReplace' : 'Unable to replace "$1".', 'errSave' : 'Kunne ikke lagre "$1".', 'errCopy' : 'Kunne ikke kopiere "$1".', 'errMove' : 'Kunne ikke flytte "$1".', 'errCopyInItself' : 'Kunne ikke kopiere "$1" til seg selv.', 'errRm' : 'Kunne ikke slette "$1".', 'errRmSrc' : 'Unable remove source file(s).', 'errExtract' : 'Kunne ikke pakke ut filer fra "$1".', 'errArchive' : 'Kunne ikke opprette arkiv.', 'errArcType' : 'akriv-typen er ikke støttet.', 'errNoArchive' : 'Filen er ikke et arkiv eller et arkiv som ikke er støttet.', 'errCmdNoSupport' : 'Backend støtter ikke denne kommandoen.', 'errReplByChild' : 'The folder “$1â€� can’t be replaced by an item it contains.', 'errArcSymlinks' : 'For security reason denied to unpack archives contains symlinks or files with not allowed names.', // edited 24.06.2012 'errArcMaxSize' : 'Archive files exceeds maximum allowed size.', 'errResize' : 'Unable to resize "$1".', 'errResizeDegree' : 'Invalid rotate degree.', // added 7.3.2013 'errResizeRotate' : 'Unable to rotate image.', // added 7.3.2013 'errResizeSize' : 'Invalid image size.', // added 7.3.2013 'errResizeNoChange' : 'Image size not changed.', // added 7.3.2013 'errUsupportType' : 'Unsupported file type.', 'errNotUTF8Content' : 'File "$1" is not in UTF-8 and cannot be edited.', // added 9.11.2011 'errNetMount' : 'Unable to mount "$1".', // added 17.04.2012 'errNetMountNoDriver' : 'Unsupported protocol.', // added 17.04.2012 'errNetMountFailed' : 'Mount failed.', // added 17.04.2012 'errNetMountHostReq' : 'Host required.', // added 18.04.2012 'errSessionExpires' : 'Your session has expired due to inactivity.', 'errCreatingTempDir' : 'Unable to create temporary directory: "$1"', 'errFtpDownloadFile' : 'Unable to download file from FTP: "$1"', 'errFtpUploadFile' : 'Unable to upload file to FTP: "$1"', 'errFtpMkdir' : 'Unable to create remote directory on FTP: "$1"', 'errArchiveExec' : 'Error while archiving files: "$1"', 'errExtractExec' : 'Error while extracting files: "$1"', /******************************* commands names ********************************/ 'cmdarchive' : 'Opprett arkiv', 'cmdback' : 'Tilbake', 'cmdcopy' : 'Kopier', 'cmdcut' : 'Klipp ut', 'cmddownload' : 'Last ned', 'cmdduplicate' : 'Dupliser', 'cmdedit' : 'Rediger fil', 'cmdextract' : 'Pakk ut filer fra arkiv', 'cmdforward' : 'Frem', 'cmdgetfile' : 'Velg filer', 'cmdhelp' : 'Om', 'cmdhome' : 'Hjem', 'cmdinfo' : 'Vis info', 'cmdmkdir' : 'Ny mappe', 'cmdmkfile' : 'Ny fil', 'cmdopen' : 'Ã…pne', 'cmdpaste' : 'Lim inn', 'cmdquicklook' : 'ForhÃ¥ndsvis', 'cmdreload' : 'Last inn pÃ¥ nytt', 'cmdrename' : 'Gi nytt navn', 'cmdrm' : 'Slett', 'cmdsearch' : 'Find filer', 'cmdup' : 'Opp et nivÃ¥', 'cmdupload' : 'Last opp filer', 'cmdview' : 'Vis', 'cmdresize' : 'Resize & Rotate', 'cmdsort' : 'Sort', 'cmdnetmount' : 'Mount network volume', /*********************************** buttons ***********************************/ 'btnClose' : 'Lukk', 'btnSave' : 'Lagre', 'btnRm' : 'Slett', 'btnApply' : 'Apply', 'btnCancel' : 'Avbryt', 'btnNo' : 'Nei', 'btnYes' : 'Ja', 'btnDiscard': 'Discard changes', 'btnMount' : 'Mount', /******************************** notifications ********************************/ 'ntfopen' : 'Ã…pne mappe', 'ntffile' : 'Ã…pne fil', 'ntfreload' : 'Last inn mappen pÃ¥ nytt', 'ntfmkdir' : 'Oppretter mappe', 'ntfmkfile' : 'Oppretter filer', 'ntfrm' : 'Sletter filer', 'ntfcopy' : 'Kopierer filer', 'ntfmove' : 'Flytter filer', 'ntfprepare' : 'Gjør klar til kopiering av filer', 'ntfrename' : 'Gir nytt navn til filer', 'ntfupload' : 'Laster opp filer', 'ntfdownload' : 'Laster ned filer', 'ntfsave' : 'Lagrer filer', 'ntfarchive' : 'Oppretter arkiv', 'ntfextract' : 'Pakker ut filer fra arkiv', 'ntfsearch' : 'Søker i filer', 'ntfresize' : 'Resizing images', 'ntfsmth' : 'Gjør noe... >_<', 'ntfloadimg' : 'Loading image', 'ntfnetmount' : 'Mounting network volume', // added 18.04.2012 'ntfdim' : 'Acquiring image dimension', // added 20.05.2013 /************************************ dates **********************************/ 'dateUnknown' : 'Ukjent', 'Today' : 'I dag', 'Yesterday' : 'I gÃ¥r', 'msJan' : 'Jan', 'msFeb' : 'Feb', 'msMar' : 'Mar', 'msApr' : 'Apr', 'msMay' : 'Mai', 'msJun' : 'Jun', 'msJul' : 'Jul', 'msAug' : 'Aug', 'msSep' : 'Sep', 'msOct' : 'Okt', 'msNov' : 'Nov', 'msDec' : 'Des', 'January' : 'January', 'February' : 'February', 'March' : 'March', 'April' : 'April', 'May' : 'May', 'June' : 'June', 'July' : 'July', 'August' : 'August', 'September' : 'September', 'October' : 'October', 'November' : 'November', 'December' : 'December', 'Sunday' : 'Sunday', 'Monday' : 'Monday', 'Tuesday' : 'Tuesday', 'Wednesday' : 'Wednesday', 'Thursday' : 'Thursday', 'Friday' : 'Friday', 'Saturday' : 'Saturday', 'Sun' : 'Sun', 'Mon' : 'Mon', 'Tue' : 'Tue', 'Wed' : 'Wed', 'Thu' : 'Thu', 'Fri' : 'Fri', 'Sat' : 'Sat', /******************************** sort variants ********************************/ 'sortname' : 'by name', 'sortkind' : 'by kind', 'sortsize' : 'by size', 'sortdate' : 'by date', 'sortFoldersFirst' : 'Folders first', /********************************** messages **********************************/ 'confirmReq' : 'Bekreftelse nødvendig', 'confirmRm' : 'Er du sikker pÃ¥ at du ønsker Ã¥ slette filene?', 'confirmRepl' : 'Erstatt fil?', 'apllyAll' : 'Apply to all', 'name' : 'Navn', 'size' : 'Størrelse', 'perms' : 'Rettigheter', 'modify' : 'Endret', 'kind' : 'Type', 'read' : 'les', 'write' : 'skriv', 'noaccess' : 'ingen adgang', 'and' : 'og', 'unknown' : 'ukjent', 'selectall' : 'Velg alle filene', 'selectfiles' : 'Velg fil(er)', 'selectffile' : 'Velg første fil', 'selectlfile' : 'Velg siste fil', 'viewlist' : 'Listevisning', 'viewicons' : 'Ikoner', 'places' : 'OmrÃ¥der', 'calc' : 'Beregn', 'path' : 'Bane', 'aliasfor' : 'Alias for', 'locked' : 'LÃ¥st', 'dim' : 'Størrelser', 'files' : 'Filer', 'folders' : 'Mapper', 'items' : 'objekter', 'yes' : 'ja', 'no' : 'nei', 'link' : 'Link', 'searcresult' : 'Søkeresultater', 'selected' : 'valgte filer', 'about' : 'Om', 'shortcuts' : 'Snarveier', 'help' : 'Hjelp', 'webfm' : 'Web-filbehandler', 'ver' : 'Versjon', 'protocolver' : 'protokol versjon', 'homepage' : 'Project home', 'docs' : 'dokumentasjon', 'github' : 'Fork us on Github', 'twitter' : 'Follow us on twitter', 'facebook' : 'Join us on facebook', 'team' : 'Team', 'chiefdev' : 'chief developer', 'developer' : 'developer', 'contributor' : 'contributor', 'maintainer' : 'maintainer', 'translator' : 'translator', 'icons' : 'Ikoner', 'dontforget' : 'and don\'t forget to bring a towel', 'shortcutsof' : 'Snarveier avslÃ¥tt', 'dropFiles' : 'Slipp filer her', 'or' : 'eller', 'selectForUpload' : 'Velg filer til opplasting', 'moveFiles' : 'Flytt filer', 'copyFiles' : 'Kopier filer', 'rmFromPlaces' : 'Remove from places', 'aspectRatio' : 'Aspect ratio', 'scale' : 'Scale', 'width' : 'Width', 'height' : 'Height', 'resize' : 'Resize', 'crop' : 'Crop', 'rotate' : 'Rotate', 'rotate-cw' : 'Rotate 90 degrees CW', 'rotate-ccw' : 'Rotate 90 degrees CCW', 'degree' : '°', 'netMountDialogTitle' : 'Mount network volume', // added 18.04.2012 'protocol' : 'Protocol', // added 18.04.2012 'host' : 'Host', // added 18.04.2012 'port' : 'Port', // added 18.04.2012 'user' : 'User', // added 18.04.2012 'pass' : 'Password', // added 18.04.2012 /********************************** mimetypes **********************************/ 'kindUnknown' : 'Ukjent', 'kindFolder' : 'Mappe', 'kindAlias' : 'Snarvei', 'kindAliasBroken' : 'Ugyldig snarvei', // applications 'kindApp' : 'Programfil', 'kindPostscript' : 'Postscript dokument', 'kindMsOffice' : 'Microsoft Office dokument', 'kindMsWord' : 'Microsoft Word dokument', 'kindMsExcel' : 'Microsoft Excel dokument', 'kindMsPP' : 'Microsoft Powerpoint presentation', 'kindOO' : 'Open Office dokument', 'kindAppFlash' : 'Flash', 'kindPDF' : 'Portabelt dokument (PDF)', 'kindTorrent' : 'Bittorrent file', 'kind7z' : '7z arkiv', 'kindTAR' : 'TAR arkiv', 'kindGZIP' : 'GZIP arkiv', 'kindBZIP' : 'BZIP arkiv', 'kindXZ' : 'XZ arkiv', 'kindZIP' : 'ZIP arkiv', 'kindRAR' : 'RAR ar', 'kindJAR' : 'Java JAR file', 'kindTTF' : 'True Type font', 'kindOTF' : 'Open Type font', 'kindRPM' : 'RPM package', // fonts 'kindFont' : 'Font', 'kindSFNT' : 'SFNT font', 'kindEOT' : 'Embedded Open Type font', 'kindWOFF' : 'Web Open Font Format', 'kindWOFF2' : 'Web Open Font Format 2', // texts 'kindText' : 'Tekst dokument', 'kindTextPlain' : 'Plain text', 'kindPHP' : 'PHP kilde', 'kindCSS' : 'Cascading style sheet', 'kindHTML' : 'HTML dokument', 'kindJS' : 'Javascript', 'kindRTF' : 'Rikt Tekst Format', 'kindC' : 'C kilde', 'kindCHeader' : 'C header kilde', 'kindCPP' : 'C++ kilde', 'kindCPPHeader' : 'C++ header kilde', 'kindShell' : 'Unix shell script', 'kindPython' : 'Python kilde', 'kindJava' : 'Java kilde', 'kindRuby' : 'Ruby kilde', 'kindPerl' : 'Perl script', 'kindSQL' : 'SQL skilde', 'kindXML' : 'XML dokument', 'kindAWK' : 'AWK kilde', 'kindCSV' : 'Comma separated values', 'kindDOCBOOK' : 'Docbook XML dokument', // Images 'kindImage' : 'Bilde', 'kindBMP' : 'BMP bilde', 'kindJPEG' : 'JPEG bilde', 'kindGIF' : 'GIF bilde', 'kindPNG' : 'PNG bilde', 'kindTIFF' : 'TIFF bilde', 'kindTGA' : 'TGA bilde', 'kindPSD' : 'Adobe Photoshop bilde', 'kindXBITMAP' : 'X bitmap bilde', 'kindPXM' : 'Pixelmator bilde', // media 'kindAudio' : 'Audio media', 'kindAudioMPEG' : 'MPEG audio', 'kindAudioMPEG4' : 'MPEG-4 audio', 'kindAudioMIDI' : 'MIDI audio', 'kindAudioOGG' : 'Ogg Vorbis audio', 'kindAudioWAV' : 'WAV audio', 'AudioPlaylist' : 'MP3 spilleliste', 'kindVideo' : 'Video media', 'kindVideoDV' : 'DV film', 'kindVideoMPEG' : 'MPEG film', 'kindVideoMPEG4' : 'MPEG-4 film', 'kindVideoAVI' : 'AVI film', 'kindVideoMOV' : 'Quick Time film', 'kindVideoWM' : 'Windows Media film', 'kindVideoFlash' : 'Flash film', 'kindVideoMKV' : 'Matroska film', 'kindVideoOGG' : 'Ogg film' } }; })); PK!Ií@‚@‚@file-manager-advanced/application/library/js/i18n/elfinder.da.jsnu„[µü¤/** * Danish translation * @author Mark Topper (webman.io) * @author Helmuth Mikkelsen * @version 2020-11-27 */ (function(root, factory) { if (typeof define === 'function' && define.amd) { define(['elfinder'], factory); } else if (typeof exports !== 'undefined') { module.exports = factory(require('elfinder')); } else { factory(root.elFinder); } }(this, function(elFinder) { elFinder.prototype.i18.da = { translator : 'Mark Topper (webman.io), Helmuth Mikkelsen <helmuthm@gmail.com>', language : 'Danish', direction : 'ltr', dateFormat : 'd.m.Y H:i', // will show like: 27.11.2020 11:50 fancyDateFormat : '$1 H:i', // will show like: I dag 11:50 nonameDateFormat : 'Ymd-His', // noname upload will show like: 20201127-115006 messages : { /********************************** errors **********************************/ 'error' : 'Fejl', 'errUnknown' : 'Ukendt fejl.', 'errUnknownCmd' : 'Ukendt kommando.', 'errJqui' : 'Ugyldig jQuery UI-konfiguration. Valgbare, trækbare og dropbare komponenter skal medtages.', 'errNode' : 'elFinder kræver DOM Element oprettet.', 'errURL' : 'Ugyldig elFinder konfiguration! URL option er ikke sat.', 'errAccess' : 'Adgang nægtet.', 'errConnect' : 'Kan ikke fÃ¥ kontatkt med backend.', 'errAbort' : 'Forbindelse afbrudt.', 'errTimeout' : 'Forbindelse timeout.', 'errNotFound' : 'Backend ikke fundet.', 'errResponse' : 'Ugyldigt backend svar.', 'errConf' : 'Ugyldig backend konfiguration.', 'errJSON' : 'PHP JSON modul ikke installeret.', 'errNoVolumes' : 'Læsbare diskenheder er ikke tilgængelige.', 'errCmdParams' : 'Ugyldige parametre for kommando "$1".', 'errDataNotJSON' : 'Data er ikke JSON.', 'errDataEmpty' : 'Data er tom.', 'errCmdReq' : 'Backend-anmodning kræver kommandonavn.', 'errOpen' : 'Kunne ikke Ã¥bne "$1".', 'errNotFolder' : 'Objektet er ikke en mappe.', 'errNotFile' : 'Objektet er ikke en fil.', 'errRead' : 'Kunne ikke læse "$1".', 'errWrite' : 'Kunne ikke skrive til "$1".', 'errPerm' : 'Adgang nægtet.', 'errLocked' : '"$1" er lÃ¥st og kan ikke blive omdøbt, flyttet eller slettet.', 'errExists' : 'Der findes allerede en fil ved navn "$1".', 'errInvName' : 'Ugyldigt filnavn.', 'errInvDirname' : 'Ugyldigt mappenavn.', // from v2.1.24 added 12.4.2017 'errFolderNotFound' : 'Mappe ikke fundet.', 'errFileNotFound' : 'Fil ikke fundet.', 'errTrgFolderNotFound' : 'Mappen "$1" blev ikke fundet.', 'errPopup' : 'Browser forhindrede Ã¥bning af pop up-vindue. For at Ã¥bne filen skal du aktivere den i browserindstillinger.', 'errMkdir' : 'Kunne ikke oprette mappen "$1".', 'errMkfile' : 'Kunne ikke oprette filen "$1".', 'errRename' : 'Kunne ikke omdøbe "$1".', 'errCopyFrom' : 'Kopiering af filer fra diskenhed "$1" er ikke tilladt.', 'errCopyTo' : 'Kopiering af filer til diskenhed "$1" er ikke tilladt.', 'errMkOutLink' : 'Kan ikke oprette et link til uden for diskenhedsroden.', // from v2.1 added 03.10.2015 'errUpload' : 'Upload fejl.', // old name - errUploadCommon 'errUploadFile' : 'Kunne ikke uploade "$1".', // old name - errUpload 'errUploadNoFiles' : 'Ingen filer fundet til upload.', 'errUploadTotalSize' : 'Data overskrider den maksimalt tilladte størrelse.', // old name - errMaxSize 'errUploadFileSize' : 'Fil overskrider den maksimalt tilladte størrelse.', // old name - errFileMaxSize 'errUploadMime' : 'Filtype ikke godkendt.', 'errUploadTransfer' : '"$1" overførselsfejl.', 'errUploadTemp' : 'Kan ikke oprette midlertidig fil til upload.', // from v2.1 added 26.09.2015 'errNotReplace' : 'Objekt "$1" findes allerede pÃ¥ dette sted og kan ikke erstattes af objekt med en anden type.', // new 'errReplace' : 'Kan ikke erstatte "$1".', 'errSave' : 'Kunne ikke gemme "$1".', 'errCopy' : 'Kunne ikke kopiere "$1".', 'errMove' : 'Kunne ikke flytte "$1".', 'errCopyInItself' : 'Kunne ikke kopiere "$1" til sig selv.', 'errRm' : 'Kunne ikke slette "$1".', 'errTrash' : 'Kan ikke komme i papirkurven.', // from v2.1.24 added 30.4.2017 'errRmSrc' : 'Kunne ikke fjerne kildefil(er).', 'errExtract' : 'Kunne ikke udpakke filer fra "$1".', 'errArchive' : 'Kunne ikke oprette arkiv.', 'errArcType' : 'Arkivtypen er ikke understøttet.', 'errNoArchive' : 'Filen er ikke et arkiv eller har ien kke-understøttet arkivtype.', 'errCmdNoSupport' : 'Backend understøtter ikke denne kommando.', 'errReplByChild' : 'Mappen "$1" kan ikke erstattes af et element, den indeholder.', 'errArcSymlinks' : 'Af sikkerhedsmæssige Ã¥rsager nægtes at udpakke arkiver der indeholder symlinks eller filer med ikke-tilladte navne.', // edited 24.06.2012 'errArcMaxSize' : 'Arkivfiler overskrider den maksimalt tilladte størrelse.', 'errResize' : 'Kunne ikke ændre størrelsen pÃ¥ "$1".', 'errResizeDegree' : 'Ugyldig rotationsgrad.', // added 7.3.2013 'errResizeRotate' : 'Kunne ikke rotere billedet.', // added 7.3.2013 'errResizeSize' : 'Ugyldig billedstørrelse.', // added 7.3.2013 'errResizeNoChange' : 'Billedstørrelse ikke ændret.', // added 7.3.2013 'errUsupportType' : 'Ikke-understøttet filtype.', 'errNotUTF8Content' : 'Filen "$1" er ikke i UTF-8 og kan ikke blive redigeret.', // added 9.11.2011 'errNetMount' : 'Kunne ikke mounte "$1".', // added 17.04.2012 'errNetMountNoDriver' : 'Ikke-understøttet protokol.', // added 17.04.2012 'errNetMountFailed' : 'Mount mislykkedes.', // added 17.04.2012 'errNetMountHostReq' : 'Værten kræves.', // added 18.04.2012 'errSessionExpires' : 'Din session er udløbet pÃ¥ grund af inaktivitet.', 'errCreatingTempDir' : 'Kunne ikke oprette midlertidig mappe: "$1"', 'errFtpDownloadFile' : 'Kunne ikke downloade filen fra FTP: "$1"', 'errFtpUploadFile' : 'Kunne ikke uploade filen til FTP: "$1"', 'errFtpMkdir' : 'Kunne ikke oprette fjernmappe pÃ¥ FTP: "$1"', 'errArchiveExec' : 'Fejl under arkivering af filer: "$1"', 'errExtractExec' : 'Fejl under udpakning af filer: "$1"', 'errNetUnMount' : 'Kan ikke unmounte.', // from v2.1 added 30.04.2012 'errConvUTF8' : 'Kan ikke konverteres til UTF-8', // from v2.1 added 08.04.2014 'errFolderUpload' : 'Prøv den nyeste browser, hvis du vil uploade mappen.', // from v2.1 added 26.6.2015 'errSearchTimeout' : 'Time out under søgning pÃ¥ "$1". Søgeresultatet er delvis.', // from v2.1 added 12.1.2016 'errReauthRequire' : 'Re-autorisation er pÃ¥krævet.', // from v2.1.10 added 24.3.2016 'errMaxTargets' : 'Maksimalt antal valgbare emner er $1.', // from v2.1.17 added 17.10.2016 'errRestore' : 'Kan ikke gendannes fra papirkurven. Kan ikke identificere gendannelsesdestinationen.', // from v2.1.24 added 3.5.2017 'errEditorNotFound' : 'Editor blev ikke fundet til denne filtype.', // from v2.1.25 added 23.5.2017 'errServerError' : 'Der opstod en fejl pÃ¥ serversiden.', // from v2.1.25 added 16.6.2017 'errEmpty' : 'Kunne ikke tømme mappen "$1".', // from v2.1.25 added 22.6.2017 'moreErrors' : 'Der er $1 flere fejl.', // from v2.1.44 added 9.12.2018 /******************************* commands names ********************************/ 'cmdarchive' : 'Opret arkiv', 'cmdback' : 'Tilbage', 'cmdcopy' : 'Kopier', 'cmdcut' : 'Klip', 'cmddownload' : 'Download', 'cmdduplicate' : 'Dupliker', 'cmdedit' : 'Rediger fil', 'cmdextract' : 'Udpak filer fra arkiv', 'cmdforward' : 'Frem', 'cmdgetfile' : 'Vælg filer', 'cmdhelp' : 'Om denne software', 'cmdhome' : 'Hjem', 'cmdinfo' : 'Information', 'cmdmkdir' : 'Ny mappe', 'cmdmkdirin' : 'I en ny mappe', // from v2.1.7 added 19.2.2016 'cmdmkfile' : 'Ny fil', 'cmdopen' : 'Ã…ben', 'cmdpaste' : 'Indsæt', 'cmdquicklook' : 'Vis', 'cmdreload' : 'Genindlæs', 'cmdrename' : 'Omdøb', 'cmdrm' : 'Slet', 'cmdtrash' : 'I papirkurven', //from v2.1.24 added 29.4.2017 'cmdrestore' : 'Gendan', //from v2.1.24 added 3.5.2017 'cmdsearch' : 'Find filer', 'cmdup' : 'GÃ¥ til overordnet mappe', 'cmdupload' : 'Upload filer', 'cmdview' : 'Vis', 'cmdresize' : 'Tilpas størrelse & Roter', 'cmdsort' : 'Sorter', 'cmdnetmount' : 'Mount netværksdrev', // added 18.04.2012 'cmdnetunmount': 'Unmount', // from v2.1 added 30.04.2012 'cmdplaces' : 'Til steder', // added 28.12.2014 'cmdchmod' : 'Skift tilstand', // from v2.1 added 20.6.2015 'cmdopendir' : 'Ã…bn en mappe', // from v2.1 added 13.1.2016 'cmdcolwidth' : 'Nulstil søjlebredde', // from v2.1.13 added 12.06.2016 'cmdfullscreen': 'Fuld skærm', // from v2.1.15 added 03.08.2016 'cmdmove' : 'Flyt', // from v2.1.15 added 21.08.2016 'cmdempty' : 'Tøm mappe', // from v2.1.25 added 22.06.2017 'cmdundo' : 'Fortryd', // from v2.1.27 added 31.07.2017 'cmdredo' : 'Gentag igen', // from v2.1.27 added 31.07.2017 'cmdpreference': 'Præferencer', // from v2.1.27 added 03.08.2017 'cmdselectall' : 'Vælg alle', // from v2.1.28 added 15.08.2017 'cmdselectnone': 'Vælg ingen', // from v2.1.28 added 15.08.2017 'cmdselectinvert': 'Inverter valg', // from v2.1.28 added 15.08.2017 'cmdopennew' : 'Ã…bn i nyt vindue', // from v2.1.38 added 3.4.2018 'cmdhide' : 'Skjul (præference)', // from v2.1.41 added 24.7.2018 /*********************************** buttons ***********************************/ 'btnClose' : 'Luk', 'btnSave' : 'Gem', 'btnRm' : 'Slet', 'btnApply' : 'Anvend', 'btnCancel' : 'Annuler', 'btnNo' : 'Nej', 'btnYes' : 'Ja', 'btnDiscard': 'Discard changes', 'btnMount' : 'Mount', // added 18.04.2012 'btnApprove': 'GÃ¥ til $1 & godkend', // from v2.1 added 26.04.2012 'btnUnmount': 'Unmount', // from v2.1 added 30.04.2012 'btnConv' : 'Konverter', // from v2.1 added 08.04.2014 'btnCwd' : 'Her', // from v2.1 added 22.5.2015 'btnVolume' : 'Diskenhed', // from v2.1 added 22.5.2015 'btnAll' : 'Alle', // from v2.1 added 22.5.2015 'btnMime' : 'MIME-type', // from v2.1 added 22.5.2015 'btnFileName':'Filnavn', // from v2.1 added 22.5.2015 'btnSaveClose': 'Gem & Luk', // from v2.1 added 12.6.2015 'btnBackup' : 'Backup', // fromv2.1 added 28.11.2015 'btnRename' : 'Omdøb', // from v2.1.24 added 6.4.2017 'btnRenameAll' : 'Omdøb(Alle)', // from v2.1.24 added 6.4.2017 'btnPrevious' : 'Forrige ($1/$2)', // from v2.1.24 added 11.5.2017 'btnNext' : 'Næste ($1/$2)', // from v2.1.24 added 11.5.2017 'btnSaveAs' : 'Gem som', // from v2.1.25 added 24.5.2017 /******************************** notifications ********************************/ 'ntfopen' : 'Ã…ben mappe', 'ntffile' : 'Ã…ben fil', 'ntfreload' : 'Genindlæs mappeindhold', 'ntfmkdir' : 'Opretter mappe', 'ntfmkfile' : 'Opretter filer', 'ntfrm' : 'Sletter filer', 'ntfcopy' : 'Kopier filer', 'ntfmove' : 'Flytter filer', 'ntfprepare' : 'Kontrol af eksisterende emner', 'ntfrename' : 'Omdøb filer', 'ntfupload' : 'Uploader filer', 'ntfdownload' : 'Downloader filer', 'ntfsave' : 'Gemmer filer', 'ntfarchive' : 'Opretter arkiv', 'ntfextract' : 'Udpakker filer fra arkiv', 'ntfsearch' : 'Søger filer', 'ntfresize' : 'Ændring af størrelsen pÃ¥ billeder', 'ntfsmth' : 'Gør noget', 'ntfloadimg' : 'Henter billede', 'ntfnetmount' : 'Mounter netværksdrev', // added 18.04.2012 'ntfnetunmount': 'Unmounter netværksdrev', // from v2.1 added 30.04.2012 'ntfdim' : 'Henter billeddimension', // added 20.05.2013 'ntfreaddir' : 'Læser folderinfomation', // from v2.1 added 01.07.2013 'ntfurl' : 'FÃ¥r URL til link', // from v2.1 added 11.03.2014 'ntfchmod' : 'Ændring af filtilstand', // from v2.1 added 20.6.2015 'ntfpreupload': 'Bekræftelse af upload filnavn', // from v2.1 added 31.11.2015 'ntfzipdl' : 'Oprettelse af en fil til download', // from v2.1.7 added 23.1.2016 'ntfparents' : 'FÃ¥ stiinformation', // from v2.1.17 added 2.11.2016 'ntfchunkmerge': 'Behandler den uploadede fil', // from v2.1.17 added 2.11.2016 'ntftrash' : 'Smider i papirkurv', // from v2.1.24 added 2.5.2017 'ntfrestore' : 'Udfører gendannelse fra papirkurven', // from v2.1.24 added 3.5.2017 'ntfchkdir' : 'Kontrollerer destinationsmappe', // from v2.1.24 added 3.5.2017 'ntfundo' : 'Fortryder tidligere handling', // from v2.1.27 added 31.07.2017 'ntfredo' : 'Gentager tidligere fortryd', // from v2.1.27 added 31.07.2017 'ntfchkcontent' : 'Kontrol af indhold', // from v2.1.41 added 3.8.2018 /*********************************** volumes *********************************/ 'volume_Trash' : 'Papirkurv', //from v2.1.24 added 29.4.2017 /************************************ dates **********************************/ 'dateUnknown' : 'ukendt', 'Today' : 'I dag', 'Yesterday' : 'I gÃ¥r', 'msJan' : 'Jan', 'msFeb' : 'Feb', 'msMar' : 'Mar', 'msApr' : 'Apr', 'msMay' : 'Maj', 'msJun' : 'Jun', 'msJul' : 'Jul', 'msAug' : 'Aug', 'msSep' : 'Sep', 'msOct' : 'Okt', 'msNov' : 'Nov', 'msDec' : 'Dec', 'January' : 'Januar', 'February' : 'Februar', 'March' : 'Marts', 'April' : 'April', 'May' : 'Maj', 'June' : 'Juni', 'July' : 'Juli', 'August' : 'August', 'September' : 'September', 'October' : 'Oktober', 'November' : 'November', 'December' : 'December', 'Sunday' : 'Søndag', 'Monday' : 'Mandag', 'Tuesday' : 'Tirsdag', 'Wednesday' : 'Onsdag', 'Thursday' : 'Torsdag', 'Friday' : 'Fredag', 'Saturday' : 'Lørdag', 'Sun' : 'Søn', 'Mon' : 'Man', 'Tue' : 'Tir', 'Wed' : 'Ons', 'Thu' : 'Tor', 'Fri' : 'Fre', 'Sat' : 'Lør', /******************************** sort variants ********************************/ 'sortname' : 'efter navn', 'sortkind' : 'efter type', 'sortsize' : 'efter størrelse', 'sortdate' : 'efter dato', 'sortFoldersFirst' : 'Mapper først', 'sortperm' : 'efter tilladelse', // from v2.1.13 added 13.06.2016 'sortmode' : 'efter mode', // from v2.1.13 added 13.06.2016 'sortowner' : 'efter ejer', // from v2.1.13 added 13.06.2016 'sortgroup' : 'efter gruppe', // from v2.1.13 added 13.06.2016 'sortAlsoTreeview' : 'OgsÃ¥ Treeview', // from v2.1.15 added 01.08.2016 /********************************** new items **********************************/ 'untitled file.txt' : 'NyFil.txt', // added 10.11.2015 'untitled folder' : 'NyFolder', // added 10.11.2015 'Archive' : 'NytArkiv', // from v2.1 added 10.11.2015 'untitled file' : 'NyFil.$1', // from v2.1.41 added 6.8.2018 'extentionfile' : '$1: Fil', // from v2.1.41 added 6.8.2018 'extentiontype' : '$1: $2', // from v2.1.43 added 17.10.2018 /********************************** messages **********************************/ 'confirmReq' : 'Bekræftelse pÃ¥krævet', 'confirmRm' : 'Er du sikker pÃ¥ du vil slette valgte filer?
          Dette kan ikke fortrydes!', 'confirmRepl' : 'Erstat gammel fil med ny fil?', 'confirmRest' : 'Erstat eksisterende element med elementet i papirkurven?', // fromv2.1.24 added 5.5.2017 'confirmConvUTF8' : 'Ikke i UTF-8
          Konverter til UTF-8?
          Indholdet bliver UTF-8 ved at gemme efter konvertering.', // from v2.1 added 08.04.2014 'confirmNonUTF8' : 'Tegnkodning af denne fil kunne ikke registreres. Det er nødvendigt at konvertere midlertidigt til UTF-8 til redigering.
          Vælg tegnkodning af denne fil.', // from v2.1.19 added 28.11.2016 'confirmNotSave' : 'Det er blevet ændret.
          Du mister arbejde, hvis du ikke gemmer ændringer.', // from v2.1 added 15.7.2015 'confirmTrash' : 'Er du sikker på, at du vil flytte emner til papirkurven?', //from v2.1.24 added 29.4.2017 'confirmMove' : 'Er du sikker på, at du vil flytte emner til "$1"?', //from v2.1.50 added 27.7.2019 'apllyAll' : 'Anvend ved alle', 'name' : 'Navn', 'size' : 'Størrelse', 'perms' : 'Rettigheder', 'modify' : 'Ændret', 'kind' : 'Type', 'read' : 'læse', 'write' : 'skrive', 'noaccess' : 'ingen adgang', 'and' : 'og', 'unknown' : 'ukendt', 'selectall' : 'Vælg alle filer', 'selectfiles' : 'Vælg fil(er)', 'selectffile' : 'Vælg første fil', 'selectlfile' : 'Vælg sidste fil', 'viewlist' : 'Listevisning', 'viewicons' : 'Ikonvisning', 'viewSmall' : 'Små ikoner', // from v2.1.39 added 22.5.2018 'viewMedium' : 'Medium ikoner', // from v2.1.39 added 22.5.2018 'viewLarge' : 'Store ikoner', // from v2.1.39 added 22.5.2018 'viewExtraLarge' : 'Ekstra store ikoner', // from v2.1.39 added 22.5.2018 'places' : 'Placeringer', 'calc' : 'Beregn', 'path' : 'Sti', 'aliasfor' : 'Alias for', 'locked' : 'Låst', 'dim' : 'Størrelser', 'files' : 'Filer', 'folders' : 'Mapper', 'items' : 'Emner', 'yes' : 'ja', 'no' : 'nej', 'link' : 'Link', 'searcresult' : 'Søgeresultater', 'selected' : 'valgte emner', 'about' : 'Om', 'shortcuts' : 'Genveje', 'help' : 'Hjælp', 'webfm' : 'Internet filmanager', 'ver' : 'Version', 'protocolver' : 'protokol version', 'homepage' : 'Projektside', 'docs' : 'Dokumentation', 'github' : 'Fork os på Github', 'twitter' : 'Følg os på Twitter', 'facebook' : 'Følg os på Facebook', 'team' : 'Hold', 'chiefdev' : 'hovedudvikler', 'developer' : 'udvikler', 'contributor' : 'bidragyder', 'maintainer' : 'vedligeholder', 'translator' : 'oversætter', 'icons' : 'Ikoner', 'dontforget' : 'og glem ikke at tage dit håndklæde', 'shortcutsof' : 'Gemveje deaktiveret', 'dropFiles' : 'Drop filer hertil', 'or' : 'eller', 'selectForUpload' : 'Vælg filer', 'moveFiles' : 'Flyt filer', 'copyFiles' : 'Kopier filer', 'restoreFiles' : 'Gendan emner', // from v2.1.24 added 5.5.2017 'rmFromPlaces' : 'Slet fra placering', 'aspectRatio' : 'Skærmformat', 'scale' : 'Skala', 'width' : 'Bredde', 'height' : 'Højde', 'resize' : 'Tilpas størrelse', 'crop' : 'Beskær', 'rotate' : 'Roter', 'rotate-cw' : 'Roter 90 grader med uret', 'rotate-ccw' : 'Roter 90 grader mod uret', 'degree' : 'Grader', 'netMountDialogTitle' : 'Mount netwærkdrev', // added 18.04.2012 'protocol' : 'Protokol', // added 18.04.2012 'host' : 'Vært', // added 18.04.2012 'port' : 'Port', // added 18.04.2012 'user' : 'Bruger', // added 18.04.2012 'pass' : 'Kodeord', // added 18.04.2012 'confirmUnmount' : 'Unmounter du $1?', // from v2.1 added 30.04.2012 'dropFilesBrowser': 'Slip eller indsæt filer fra browseren', // from v2.1 added 30.05.2012 'dropPasteFiles' : 'Slip filer, indsæt webadresser eller billeder (udklipsholder) her', // from v2.1 added 07.04.2014 'encoding' : 'Encoding', // from v2.1 added 19.12.2014 'locale' : 'Locale', // from v2.1 added 19.12.2014 'searchTarget' : 'Target: $1', // from v2.1 added 22.5.2015 'searchMime' : 'Søg efter input MIME-type', // from v2.1 added 22.5.2015 'owner' : 'Ejer', // from v2.1 added 20.6.2015 'group' : 'Gruppe', // from v2.1 added 20.6.2015 'other' : 'Andet', // from v2.1 added 20.6.2015 'execute' : 'Udfør', // from v2.1 added 20.6.2015 'perm' : 'Tilladelse', // from v2.1 added 20.6.2015 'mode' : 'Mode', // from v2.1 added 20.6.2015 'emptyFolder' : 'Mappe er tom', // from v2.1.6 added 30.12.2015 'emptyFolderDrop' : 'Mappe er tom\\A Drop for at tilføje enmer', // from v2.1.6 added 30.12.2015 'emptyFolderLTap' : 'Mappen er tom\\A Langt tryk for at tilføje emner', // from v2.1.6 added 30.12.2015 'quality' : 'Kvalitet', // from v2.1.6 added 5.1.2016 'autoSync' : 'Autosync', // from v2.1.6 added 10.1.2016 'moveUp' : 'Flyt op', // from v2.1.6 added 18.1.2016 'getLink' : 'Hent URL-link', // from v2.1.7 added 9.2.2016 'selectedItems' : 'Valgte emner ($1)', // from v2.1.7 added 2.19.2016 'folderId' : 'Folder-ID', // from v2.1.10 added 3.25.2016 'offlineAccess' : 'Tillad offline adgang', // from v2.1.10 added 3.25.2016 'reAuth' : 'For at godkende igen', // from v2.1.10 added 3.25.2016 'nowLoading' : 'Indlæser nu...', // from v2.1.12 added 4.26.2016 'openMulti' : 'Åben flere filer', // from v2.1.12 added 5.14.2016 'openMultiConfirm': 'Du prøver at åbne $1-filerne. Er du sikker på, at du vil åbne i browseren?', // from v2.1.12 added 5.14.2016 'emptySearch' : 'Søgeresultaterne er tomme i søgemålet.', // from v2.1.12 added 5.16.2016 'editingFile' : 'Redigerer en fil.', // from v2.1.13 added 6.3.2016 'hasSelected' : 'Du har valgt $1 emner.', // from v2.1.13 added 6.3.2016 'hasClipboard' : 'Du har $1 emner i udklipsholder.', // from v2.1.13 added 6.3.2016 'incSearchOnly' : 'Inkrementel søgning er kun fra den aktuelle visning.', // from v2.1.13 added 6.30.2016 'reinstate' : 'Genindsæt', // from v2.1.15 added 3.8.2016 'complete' : '$1 færdig', // from v2.1.15 added 21.8.2016 'contextmenu' : 'Kontekstmenu', // from v2.1.15 added 9.9.2016 'pageTurning' : 'Sidevending', // from v2.1.15 added 10.9.2016 'volumeRoots' : 'Diskenheds rødder', // from v2.1.16 added 16.9.2016 'reset' : 'Nulstil', // from v2.1.16 added 1.10.2016 'bgcolor' : 'Baggrundsfarve', // from v2.1.16 added 1.10.2016 'colorPicker' : 'Farvevælger', // from v2.1.16 added 1.10.2016 '8pxgrid' : '8px grid', // from v2.1.16 added 4.10.2016 'enabled' : 'Aktiveret', // from v2.1.16 added 4.10.2016 'disabled' : 'Deaktiveret', // from v2.1.16 added 4.10.2016 'emptyIncSearch' : 'Søgeresultaterne er tomme i den aktuelle visning.\\ATryk på [Enter] for at udvide søgemålet.', // from v2.1.16 added 5.10.2016 'emptyLetSearch' : 'Førstebogstavs søgeresultater er tomme i den aktuelle visning.', // from v2.1.23 added 24.3.2017 'textLabel' : 'Tekstlabel', // from v2.1.17 added 13.10.2016 'minsLeft' : '$1 minutter tilbage', // from v2.1.17 added 13.11.2016 'openAsEncoding' : 'Åbn igen med valgt encoding', // from v2.1.19 added 2.12.2016 'saveAsEncoding' : 'Gem med valgt encoding', // from v2.1.19 added 2.12.2016 'selectFolder' : 'Vælg mappe', // from v2.1.20 added 13.12.2016 'firstLetterSearch': 'Førstebogstavs søgning', // from v2.1.23 added 24.3.2017 'presets' : 'Forudindstillinger', // from v2.1.25 added 26.5.2017 'tooManyToTrash' : 'Det er for mange emner, så det kan ikke komme i papirkurven.', // from v2.1.25 added 9.6.2017 'TextArea' : 'TextArea', // from v2.1.25 added 14.6.2017 'folderToEmpty' : 'Tøm mappen "$1".', // from v2.1.25 added 22.6.2017 'filderIsEmpty' : 'Der er ingen emner i mappen "$1".', // from v2.1.25 added 22.6.2017 'preference' : 'Præference', // from v2.1.26 added 28.6.2017 'language' : 'Sprog', // from v2.1.26 added 28.6.2017 'clearBrowserData': 'Initialiser de indstillinger, der er gemt i denne browser', // from v2.1.26 added 28.6.2017 'toolbarPref' : 'Værktøjslinjens indstillinger', // from v2.1.27 added 2.8.2017 'charsLeft' : '... $1 tegn tilbage.', // from v2.1.29 added 30.8.2017 'linesLeft' : '... $1 linjer tilbage.', // from v2.1.52 added 16.1.2020 'sum' : 'Sum', // from v2.1.29 added 28.9.2017 'roughFileSize' : 'Omtrentlig filstørrelse', // from v2.1.30 added 2.11.2017 'autoFocusDialog' : 'Fokuser på elementet i dialog med musemarkering', // from v2.1.30 added 2.11.2017 'select' : 'Vælg', // from v2.1.30 added 23.11.2017 'selectAction' : 'Handling, når du vælger fil', // from v2.1.30 added 23.11.2017 'useStoredEditor' : 'Åbn med den editor, der blev brugt sidst', // from v2.1.30 added 23.11.2017 'selectinvert' : 'Inverter valg', // from v2.1.30 added 25.11.2017 'renameMultiple' : 'Er du sikker på, at du vil omdøbe $1 valgte emner som $2?
          Dette kan ikke fortrydes!', // from v2.1.31 added 4.12.2017 'batchRename' : 'Batch omdøbning', // from v2.1.31 added 8.12.2017 'plusNumber' : '+ Tal', // from v2.1.31 added 8.12.2017 'asPrefix' : 'Tilføj prefix', // from v2.1.31 added 8.12.2017 'asSuffix' : 'Tilføj suffix', // from v2.1.31 added 8.12.2017 'changeExtention' : 'Skift filendelse', // from v2.1.31 added 8.12.2017 'columnPref' : 'Kolonneindstillinger (listevisning)', // from v2.1.32 added 6.2.2018 'reflectOnImmediate' : 'Alle ændringer pÃ¥virker straks arkivet.', // from v2.1.33 added 2.3.2018 'reflectOnUnmount' : 'Eventuelle ændringer gennemføres ikke, før denne enhed fjernes.', // from v2.1.33 added 2.3.2018 'unmountChildren' : 'Følgende disk(e) mounted pÃ¥ denne enhed unmountes ogsÃ¥. Er du sikker pÃ¥ at unmounte den?', // from v2.1.33 added 5.3.2018 'selectionInfo' : 'Valg info', // from v2.1.33 added 7.3.2018 'hashChecker' : 'Algoritmer, der viser filens hash', // from v2.1.33 added 10.3.2018 'infoItems' : 'Info-emner (panelet til valg af info)', // from v2.1.38 added 28.3.2018 'pressAgainToExit': 'Tryk igen for at afslutte.', // from v2.1.38 added 1.4.2018 'toolbar' : 'Værktøjslinje', // from v2.1.38 added 4.4.2018 'workspace' : 'ArbejdsomrÃ¥de', // from v2.1.38 added 4.4.2018 'dialog' : 'Dialog', // from v2.1.38 added 4.4.2018 'all' : 'Alle', // from v2.1.38 added 4.4.2018 'iconSize' : 'Ikonstørrelse (ikonvisning)', // from v2.1.39 added 7.5.2018 'editorMaximized' : 'Ã…bn det maksimerede editorvindue', // from v2.1.40 added 30.6.2018 'editorConvNoApi' : 'Da konvertering via API ikke er tilgængelig i øjeblikket, bedes du konvertere pÃ¥ webstedet.', //from v2.1.40 added 8.7.2018 'editorConvNeedUpload' : 'Efter konvertering skal du uploade med elementets URL eller en downloadet fil for at gemme den konverterede fil.', //from v2.1.40 added 8.7.2018 'convertOn' : 'Konverter pÃ¥ stedet pÃ¥ $1', // from v2.1.40 added 10.7.2018 'integrations' : 'Integrationer', // from v2.1.40 added 11.7.2018 'integrationWith' : 'Denne elFinder har følgende eksterne tjenester integreret. Kontroller venligst vilkÃ¥rene for brug, fortrolighedspolitik osv. inden du bruger det.', // from v2.1.40 added 11.7.2018 'showHidden' : 'Vis skjulte emner', // from v2.1.41 added 24.7.2018 'hideHidden' : 'Skjul skjulte emner', // from v2.1.41 added 24.7.2018 'toggleHidden' : 'Vis / Skjul skjulte emner', // from v2.1.41 added 24.7.2018 'makefileTypes' : 'Filtyper, der skal aktiveres med "Ny fil"', // from v2.1.41 added 7.8.2018 'typeOfTextfile' : 'Type af tekstfilen', // from v2.1.41 added 7.8.2018 'add' : 'Tilføj', // from v2.1.41 added 7.8.2018 'theme' : 'Tema', // from v2.1.43 added 19.10.2018 'default' : 'Standard', // from v2.1.43 added 19.10.2018 'description' : 'Beskrivelse', // from v2.1.43 added 19.10.2018 'website' : 'Hjemmeside', // from v2.1.43 added 19.10.2018 'author' : 'Forfatter', // from v2.1.43 added 19.10.2018 'email' : 'Mail', // from v2.1.43 added 19.10.2018 'license' : 'Licens', // from v2.1.43 added 19.10.2018 'exportToSave' : 'Dette element kan ikke gemmes. For at undgÃ¥ at miste redigeringerne skal du eksportere til din pc.', // from v2.1.44 added 1.12.2018 'dblclickToSelect': 'Dobbeltklik pÃ¥ filen for at vælge den.', // from v2.1.47 added 22.1.2019 'useFullscreen' : 'Brug fuldskærmstilstand', // from v2.1.47 added 19.2.2019 /********************************** mimetypes **********************************/ 'kindUnknown' : 'Ukendt', 'kindRoot' : 'Diskenheds rod', // from v2.1.16 added 16.10.2016 'kindFolder' : 'Mappe', 'kindSelects' : 'Valg', // from v2.1.29 added 29.8.2017 'kindAlias' : 'Alias', 'kindAliasBroken' : 'Ødelagt alias', // applications 'kindApp' : 'Applikation', 'kindPostscript' : 'Postscript dokument', 'kindMsOffice' : 'Microsoft Office dokument', 'kindMsWord' : 'Microsoft Word dokument', 'kindMsExcel' : 'Microsoft Excel dokument', 'kindMsPP' : 'Microsoft Powerpoint præsentation', 'kindOO' : 'Open Office dokument', 'kindAppFlash' : 'Flash applikation', 'kindPDF' : 'Flytbart Dokument Format (PDF)', 'kindTorrent' : 'Bittorrent fil', 'kind7z' : '7z arkiv', 'kindTAR' : 'TAR arkiv', 'kindGZIP' : 'GZIP arkiv', 'kindBZIP' : 'BZIP arkiv', 'kindXZ' : 'XZ arkiv', 'kindZIP' : 'ZIP arkiv', 'kindRAR' : 'RAR arkiv', 'kindJAR' : 'Java JAR fil', 'kindTTF' : 'True Type skrift', 'kindOTF' : 'Open Type skrift', 'kindRPM' : 'RPM pakke', // fonts 'kindFont' : 'Skrift', 'kindSFNT' : 'SFNT skrift', 'kindEOT' : 'Embedded Open Type skrift', 'kindWOFF' : 'Web Open Font Format skrift', 'kindWOFF2' : 'Web Open Font Format 2 skrift', // texts 'kindText' : 'Tekstdokument', 'kindTextPlain' : 'Ren tekst', 'kindPHP' : 'PHP-kode', 'kindCSS' : 'Cascading style sheet', 'kindHTML' : 'HTML-dokument', 'kindJS' : 'Javascript-kode', 'kindRTF' : 'Rich Text Format', 'kindC' : 'Ckkode', 'kindCHeader' : 'C header-kode', 'kindCPP' : 'C++-kode', 'kindCPPHeader' : 'C++ header-kode', 'kindShell' : 'Unix shell script', 'kindPython' : 'Python-kode', 'kindJava' : 'Java-kode', 'kindRuby' : 'Ruby-kode', 'kindPerl' : 'Perlscript', 'kindSQL' : 'SQ- kode', 'kindXML' : 'XML-dokument', 'kindAWK' : 'AWK-kode', 'kindCSV' : 'Komma seperarede værdier', 'kindDOCBOOK' : 'Docbook XML-dokument', 'kindMarkdown' : 'Markdown text', // added 20.7.2015 // images 'kindImage' : 'Billede', 'kindBMP' : 'BMP-billede', 'kindJPEG' : 'JPEG-billede', 'kindGIF' : 'GIF-billede', 'kindPNG' : 'PNG-billede', 'kindTIFF' : 'TIFF-billede', 'kindTGA' : 'TGA-billede', 'kindPSD' : 'Adobe Photoshop-billede', 'kindXBITMAP' : 'X bitmap-billede', 'kindPXM' : 'Pixelmator-billede', // media 'kindAudio' : 'Lydmedie', 'kindAudioMPEG' : 'MPEG-lyd', 'kindAudioMPEG4' : 'MPEG-4-lyd', 'kindAudioMIDI' : 'MIDI-lyd', 'kindAudioOGG' : 'Ogg Vorbis-lyd', 'kindAudioWAV' : 'WAV-lyd', 'AudioPlaylist' : 'MP3-spilleliste', 'kindVideo' : 'Videomedie', 'kindVideoDV' : 'DV-video', 'kindVideoMPEG' : 'MPEG-video', 'kindVideoMPEG4' : 'MPEG-4-video', 'kindVideoAVI' : 'AVI-video', 'kindVideoMOV' : 'Quick Time-video', 'kindVideoWM' : 'Windows Media-video', 'kindVideoFlash' : 'Flash-video', 'kindVideoMKV' : 'Matroska-video', 'kindVideoOGG' : 'Ogg-video' } }; })); PK!:-}—ä‡ä‡@file-manager-advanced/application/library/js/i18n/elfinder.tr.jsnu„[µü¤/** * Türkçe translation * @author I.Taskinoglu & A.Kaya * @author Abdullah ELEN * @author Osman KAYAN * @author alikayan95@gmail.com * @author Cengiz AKCAN cengiz@vobo.company * @author Ali KAYAN * @version 2025-06-26 */ (function(root, factory) { if (typeof define === 'function' && define.amd) { define(['elfinder'], factory); } else if (typeof exports !== 'undefined') { module.exports = factory(require('elfinder')); } else { factory(root.elFinder); } }(this, function(elFinder) { elFinder.prototype.i18.tr = { translator : 'I.Taskinoglu & A.Kaya <alikaya@armsyazilim.com>, Abdullah ELEN <abdullahelen@msn.com>, Osman KAYAN <osmnkayan@gmail.com>, alikayan95@gmail.com, Cengiz AKCAN cengiz@vobo.company, Ali KAYAN <alikayan95@gmail.com>', language : 'Türkçe', direction : 'ltr', dateFormat : 'd.m.Y H:i', // will show like: 26.06.2025 09:57 fancyDateFormat : '$1 H:i', // will show like: Bugün 09:57 nonameDateFormat : 'ymd-His', // noname upload will show like: 250626-095752 messages : { /********************************** errors **********************************/ 'error' : 'Hata', 'errUnknown' : 'Bilinmeyen hata.', 'errUnknownCmd' : 'Bilinmeyen komut.', 'errJqui' : 'Geçersiz jQuery UI yapılandırması. Seçilebilir, sürükle ve bırak bileÅŸenlerini içermelidir.', 'errNode' : 'elFinder yaratılması için DOM Element\'ine ihtiyacı vardır.', 'errURL' : 'Geçersiz elFinder yapılandırması! URL seçeneÄŸi ayarlanmamış.', 'errAccess' : 'EriÅŸim reddedildi.', 'errConnect' : 'Sunucu-Tarafı\'na baÄŸlanılamıyor.', 'errAbort' : 'BaÄŸlantı iptal edildi.', 'errTimeout' : 'BaÄŸlantı zaman aşımı.', 'errNotFound' : 'Sunucu-Tarafı bulunamadı.', 'errResponse' : 'Geçersiz Sunucu-Tarafı yanıtı.', 'errConf' : 'Geçersiz Sunucu-Tarafı yapılandırması.', 'errJSON' : 'PHP JSON modülü kurulu deÄŸil.', 'errNoVolumes' : 'Okunabilir birimler mevcut deÄŸil.', 'errCmdParams' : '"$1" komutu için geçersiz parametre.', 'errDataNotJSON' : 'Veri JSON formatında deÄŸil.', 'errDataEmpty' : 'Veri boÅŸ.', 'errCmdReq' : 'Sunucu-Tarafı isteÄŸi için komut adı gerekli.', 'errOpen' : '"$1" açılamıyor.', 'errNotFolder' : 'Nesne bir dizin deÄŸil.', 'errNotFile' : 'Nesne bir dosya deÄŸil.', 'errRead' : '"$1" okunamıyor.', 'errWrite' : '"$1" yazılamıyor.', 'errPerm' : 'İzin reddedildi.', 'errLocked' : '"$1" kilitli. Bu nedenle taşıma, yeniden adlandırma veya kaldırma yapılamıyor.', 'errExists' : '"$1" adında bir dosya zaten var.', 'errInvName' : 'Geçersiz dosya ismi.', 'errInvDirname' : 'Geçersiz dizin ismi.', // from v2.1.24 added 12.4.2017 'errFolderNotFound' : 'Dizin bulunamadı.', 'errFileNotFound' : 'Dosya bulunamadı.', 'errTrgFolderNotFound' : 'Hedef dizin "$1" bulunamadı.', 'errPopup' : 'Tarayıcı popup penceresi açmayı engelledi. Tarayıcı ayarlarından dosya açmayı aktif hale getirin.', 'errMkdir' : 'Dizin oluÅŸturulamıyor "$1".', 'errMkfile' : '"$1" dosyası oluÅŸturulamıyor.', 'errRename' : '"$1" yeniden adlandırma yapılamıyor.', 'errCopyFrom' : '"$1" biriminden dosya kopyalamaya izin verilmedi.', 'errCopyTo' : '"$1" birimine dosya kopyalamaya izin verilmedi.', 'errMkOutLink' : 'Birim kökü dışında bir baÄŸlantı oluÅŸturulamıyor', // from v2.1 added 03.10.2015 'errUpload' : 'Dosya yükleme hatası.', // old name - errUploadCommon 'errUploadFile' : '"$1" dosyası yüklenemedi.', // old name - errUpload 'errUploadNoFiles' : 'Yüklenecek dosya bulunamadı.', 'errUploadTotalSize' : 'Veri izin verilen boyuttan büyük.', // old name - errMaxSize 'errUploadFileSize' : 'Dosya izin verilen boyuttan büyük.', // old name - errFileMaxSize 'errUploadMime' : 'Dosya türüne izin verilmiyor.', 'errUploadTransfer' : '"$1" aktarma hatası.', 'errUploadTemp' : 'Yükleme için geçici dosya yapılamıyor.', // from v2.1 added 26.09.2015 'errNotReplace' : '"$1" nesnesi bu konumda zaten var ve baÅŸka türde nesne ile deÄŸiÅŸtirilemez.', // new 'errReplace' : 'DeÄŸiÅŸiklik yapılamıyor "$1".', 'errSave' : '"$1" kaydedilemiyor.', 'errCopy' : '"$1" kopyalanamıyor.', 'errMove' : '"$1" taşınamıyor.', 'errCopyInItself' : '"$1" kendi içine kopyalanamaz.', 'errRm' : '"$1" kaldırılamıyor.', 'errTrash' : 'Çöp kutusuna taşınamıyor.', // from v2.1.24 added 30.4.2017 'errRmSrc' : 'Kaynak dosya(lar) kaldırılamıyor.', 'errExtract' : '"$1" kaynağından dosyalar çıkartılamıyor.', 'errArchive' : 'ArÅŸiv oluÅŸturulamıyor.', 'errArcType' : 'Desteklenmeyen arÅŸiv türü.', 'errNoArchive' : 'Dosya arÅŸiv deÄŸil veya desteklenmeyen arÅŸiv türü.', 'errCmdNoSupport' : 'Sunucu-Tarafı bu komutu desteklemiyor.', 'errReplByChild' : '“$1â€� dizini, içerdiÄŸi bir öğe tarafından deÄŸiÅŸtirilemez.', 'errArcSymlinks' : 'Sembolik baÄŸlantıları içeren arÅŸivlerin açılması güvenlik nedeniyle reddedildi.', // edited 24.06.2012 'errArcMaxSize' : 'ArÅŸiv dosyaları izin verilen maksimum boyutu aÅŸtı.', 'errResize' : '"$1" yeniden boyutlandırılamıyor.', 'errResizeDegree' : 'Geçersiz döndürme derecesi.', // added 7.3.2013 'errResizeRotate' : 'Resim döndürülemiyor.', // added 7.3.2013 'errResizeSize' : 'Geçersiz resim boyutu.', // added 7.3.2013 'errResizeNoChange' : 'Resim boyutu deÄŸiÅŸtirilemez.', // added 7.3.2013 'errUsupportType' : 'Desteklenmeyen dosya türü.', 'errNotUTF8Content' : 'Dosya "$1" UTF-8 olmadığından düzenlenemez.', // added 9.11.2011 'errNetMount' : '"$1" baÄŸlanamadı.', // added 17.04.2012 'errNetMountNoDriver' : 'Desteklenmeyen protokol.', // added 17.04.2012 'errNetMountFailed' : 'BaÄŸlama baÅŸarısız oldu.', // added 17.04.2012 'errNetMountHostReq' : 'Host gerekli.', // added 18.04.2012 'errSessionExpires' : 'Uzun süre iÅŸlem yapılmadığından oturumunuz sonlandı.', 'errCreatingTempDir' : 'Geçici dizin oluÅŸturulamıyor: "$1"', 'errFtpDownloadFile' : 'Dosya FTP: "$1" adresinden indirilemiyor.', 'errFtpUploadFile' : 'Dosya FTP: "$1" adresine yüklenemiyor.', 'errFtpMkdir' : 'FTP: "$1" üzerinde uzak dizin oluÅŸturulamıyor.', 'errArchiveExec' : '"$1" Dosyalarında arÅŸivlenirken hata oluÅŸtu.', 'errExtractExec' : '"$1" Dosyaları arÅŸivden çıkartılırken hata oluÅŸtu.', 'errNetUnMount' : 'BaÄŸlantı kaldırılamıyor.', // from v2.1 added 30.04.2012 'errConvUTF8' : 'UTF-8\'e dönüştürülemez.', // from v2.1 added 08.04.2014 'errFolderUpload' : 'Dizin yükleyebilmek için daha modern bir tarayıcıya ihtiyacınız var.', // from v2.1 added 26.6.2015 'errSearchTimeout' : '"$1" aranırken zaman aşımına uÄŸradı. Arama sonuçları kısmidir.', // from v2.1 added 12.1.2016 'errReauthRequire' : 'Yeniden yetkilendirme gerekiyor.', // from v2.1.10 added 24.3.2016 'errMaxTargets' : 'Maksimum seçilebilir öge sayısı $1 adettir.', // from v2.1.17 added 17.10.2016 'errRestore' : 'Çöp kutusundan geri yüklenemiyor. Geri yükleme notkası belirlenemiyor.', // from v2.1.24 added 3.5.2017 'errEditorNotFound' : 'Bu doya türü için düzenleyici bulunamadı.', // from v2.1.25 added 23.5.2017 'errServerError' : 'Sunucu tarafında beklenilmeyen bir hata oluÅŸtu.', // from v2.1.25 added 16.6.2017 'errEmpty' : '"$1" Dizini boÅŸaltılamıyor.', // from v2.1.25 added 22.6.2017 'moreErrors' : '"$1" tane daha hata var.', // from v2.1.44 added 9.12.2018 'errMaxMkdirs' : 'Tek seferde en fazla 1$ dizin oluÅŸturabilirsiniz.', // from v2.1.58 added 20.6.2021 /******************************* commands names ********************************/ 'cmdarchive' : 'ArÅŸiv oluÅŸtur', 'cmdback' : 'Geri', 'cmdcopy' : 'Kopyala', 'cmdcut' : 'Kes', 'cmddownload' : 'İndir', 'cmdduplicate' : 'Kopyasını oluÅŸtur', 'cmdedit' : 'Dosyayı düzenle', 'cmdextract' : 'ArÅŸivden dosyaları çıkart', 'cmdforward' : 'İleri', 'cmdgetfile' : 'Dosyaları seç', 'cmdhelp' : 'Bu yazılım hakkında', 'cmdhome' : 'Kök', 'cmdinfo' : 'Bilgi göster', 'cmdmkdir' : 'Yeni klasör', 'cmdmkdirin' : 'Yeni Klasör / aç', // from v2.1.7 added 19.2.2016 'cmdmkfile' : 'Yeni dosya', 'cmdopen' : 'Aç', 'cmdpaste' : 'Yapıştır', 'cmdquicklook' : 'Önizleme', 'cmdreload' : 'Geri Yükle', 'cmdrename' : 'Yeniden Adlandır', 'cmdrm' : 'Sil', 'cmdtrash' : 'Çöpe at', //from v2.1.24 added 29.4.2017 'cmdrestore' : 'Geri yükle', //from v2.1.24 added 3.5.2017 'cmdsearch' : 'Dosyaları bul', 'cmdup' : 'Üst dizine çık', 'cmdupload' : 'Dosyaları yükle', 'cmdview' : 'Görüntüle', 'cmdresize' : 'Boyutlandır & Döndür', 'cmdsort' : 'Sırala', 'cmdnetmount' : 'AÄŸ birimi baÄŸla', // added 18.04.2012 'cmdnetunmount': 'baÄŸlantıyı kes', // from v2.1 added 30.04.2012 'cmdplaces' : 'Yerlere', // added 28.12.2014 'cmdchmod' : 'Mod deÄŸiÅŸtir', // from v2.1 added 20.6.2015 'cmdopendir' : 'Bir Dizin Aç', // from v2.1 added 13.1.2016 'cmdcolwidth' : 'Sütun geniÅŸliÄŸini sıfırla', // from v2.1.13 added 12.06.2016 'cmdfullscreen': 'Tam Ekran', // from v2.1.15 added 03.08.2016 'cmdmove' : 'Taşı', // from v2.1.15 added 21.08.2016 'cmdempty' : 'Dizini boÅŸalt', // from v2.1.25 added 22.06.2017 'cmdundo' : 'Geri al', // from v2.1.27 added 31.07.2017 'cmdredo' : 'Yinele', // from v2.1.27 added 31.07.2017 'cmdpreference': 'Tercihler', // from v2.1.27 added 03.08.2017 'cmdselectall' : 'Tümünü seç', // from v2.1.28 added 15.08.2017 'cmdselectnone': 'Seçimi temizle', // from v2.1.28 added 15.08.2017 'cmdselectinvert': 'DiÄŸerlerini seç', // from v2.1.28 added 15.08.2017 'cmdopennew' : 'Yeni Sekmede aç', // from v2.1.38 added 3.4.2018 'cmdhide' : 'Ögeyi Gizle', // from v2.1.41 added 24.7.2018 /*********************************** buttons ***********************************/ 'btnClose' : 'Kapat', 'btnSave' : 'Kaydet', 'btnRm' : 'Kaldır', 'btnApply' : 'Uygula', 'btnCancel' : 'İptal', 'btnNo' : 'Hayır', 'btnYes' : 'Evet', 'btnDiscard': 'Discard changes', 'btnMount' : 'BaÄŸla', // added 18.04.2012 'btnApprove': 'Git $1 & onayla', // from v2.1 added 26.04.2012 'btnUnmount': 'BaÄŸlantıyı kes', // from v2.1 added 30.04.2012 'btnConv' : 'Dönüştür', // from v2.1 added 08.04.2014 'btnCwd' : 'Buraya', // from v2.1 added 22.5.2015 'btnVolume' : 'Birim', // from v2.1 added 22.5.2015 'btnAll' : 'Hepsi', // from v2.1 added 22.5.2015 'btnMime' : 'MIME Türü', // from v2.1 added 22.5.2015 'btnFileName':'Dosya adı', // from v2.1 added 22.5.2015 'btnSaveClose': 'Kaydet & Kapat', // from v2.1 added 12.6.2015 'btnBackup' : 'Yedekle', // fromv2.1 added 28.11.2015 'btnRename' : 'Yeniden adlandır', // from v2.1.24 added 6.4.2017 'btnRenameAll' : 'Yeniden adlandır(Tümü)', // from v2.1.24 added 6.4.2017 'btnPrevious' : 'Önceki ($1/$2)', // from v2.1.24 added 11.5.2017 'btnNext' : 'Sonraki ($1/$2)', // from v2.1.24 added 11.5.2017 'btnSaveAs' : 'Farklı Kaydet', // from v2.1.25 added 24.5.2017 /******************************** notifications ********************************/ 'ntfopen' : 'Dizin Aç', 'ntffile' : 'Dosya Aç', 'ntfreload' : 'Dizin içeriÄŸini yeniden yükle', 'ntfmkdir' : 'Dizin oluÅŸturuluyor', 'ntfmkfile' : 'Dosyaları oluÅŸturma', 'ntfrm' : 'Öğeleri sil', 'ntfcopy' : 'Öğeleri kopyala', 'ntfmove' : 'Öğeleri taşı', 'ntfprepare' : 'Varolan öğeler kontrol ediliyor', 'ntfrename' : 'Dosyaları yeniden adlandır', 'ntfupload' : 'Dosyalar yükleniyor', 'ntfdownload' : 'Dosyalar indiriliyor', 'ntfsave' : 'Dosyalar kaydediliyor', 'ntfarchive' : 'ArÅŸiv oluÅŸturuluyor', 'ntfextract' : 'ArÅŸivden dosyalar çıkartılıyor', 'ntfsearch' : 'Dosyalar aranıyor', 'ntfresize' : 'Resimler boyutlandırılıyor', 'ntfsmth' : 'İşlem yapılıyor', 'ntfloadimg' : 'Resim yükleniyor', 'ntfnetmount' : 'AÄŸ birimine baÄŸlanılıyor', // added 18.04.2012 'ntfnetunmount': 'AÄŸ birimi baÄŸlantısı kesiliyor', // from v2.1 added 30.04.2012 'ntfdim' : 'Resim boyutu alınıyor', // added 20.05.2013 'ntfreaddir' : 'Dizin bilgisi okunuyor', // from v2.1 added 01.07.2013 'ntfurl' : 'BaÄŸlantının URL\'si alınıyor', // from v2.1 added 11.03.2014 'ntfchmod' : 'Dosya modu deÄŸiÅŸtiriliyor', // from v2.1 added 20.6.2015 'ntfpreupload': 'Yüklenen dosya ismi doÄŸrulanıyor', // from v2.1 added 31.11.2015 'ntfzipdl' : 'İndirilecek dosya oluÅŸturuluyor', // from v2.1.7 added 23.1.2016 'ntfparents' : 'Dosya yolu bilgileri alınıyor', // from v2.1.17 added 2.11.2016 'ntfchunkmerge': 'Yüklenen dosya iÅŸleniyor', // from v2.1.17 added 2.11.2016 'ntftrash' : 'Çöp kutusuna atma', // from v2.1.24 added 2.5.2017 'ntfrestore' : 'Çöp kutusundan geri yükle', // from v2.1.24 added 3.5.2017 'ntfchkdir' : 'Hedef dizin kontrol ediliyor', // from v2.1.24 added 3.5.2017 'ntfundo' : 'Önceki iÅŸlemi geri alma', // from v2.1.27 added 31.07.2017 'ntfredo' : 'Önceki geri almayı tekrarlama', // from v2.1.27 added 31.07.2017 'ntfchkcontent' : 'İçeriÄŸi kontrol ediniz', // from v2.1.41 added 3.8.2018 /*********************************** volumes *********************************/ 'volume_Trash' : 'Çöp', //from v2.1.24 added 29.4.2017 /************************************ dates **********************************/ 'dateUnknown' : 'Bilinmiyor', 'Today' : 'Bugün', 'Yesterday' : 'Dün', 'msJan' : 'Oca', 'msFeb' : 'Åžub', 'msMar' : 'Mar', 'msApr' : 'Nis', 'msMay' : 'May', 'msJun' : 'Haz', 'msJul' : 'Tem', 'msAug' : 'AÄŸu', 'msSep' : 'Eyl', 'msOct' : 'Ekm', 'msNov' : 'Kas', 'msDec' : 'Ara', 'January' : 'Ocak', 'February' : 'Åžubat', 'March' : 'Mart', 'April' : 'Nisan', 'May' : 'Mayıs', 'June' : 'Haziran', 'July' : 'Temmuz', 'August' : 'AÄŸustos', 'September' : 'Eylül', 'October' : 'Ekim', 'November' : 'Kasım', 'December' : 'Aralık', 'Sunday' : 'Pazar', 'Monday' : 'Pazartesi', 'Tuesday' : 'Salı', 'Wednesday' : 'ÇarÅŸamba', 'Thursday' : 'PerÅŸembe', 'Friday' : 'Cuma', 'Saturday' : 'Cumartesi', 'Sun' : 'Paz', 'Mon' : 'Pzt', 'Tue' : 'Sal', 'Wed' : 'Çar', 'Thu' : 'Per', 'Fri' : 'Cum', 'Sat' : 'Cmt', /******************************** sort variants ********************************/ 'sortname' : 'Ada göre', 'sortkind' : 'Türe göre', 'sortsize' : 'Boyuta göre', 'sortdate' : 'Tarihe göre', 'sortFoldersFirst' : 'Önce dizinler', 'sortperm' : 'izinlere göre', // from v2.1.13 added 13.06.2016 'sortmode' : 'moduna göre', // from v2.1.13 added 13.06.2016 'sortowner' : 'sahibine göre', // from v2.1.13 added 13.06.2016 'sortgroup' : 'grubuna göre', // from v2.1.13 added 13.06.2016 'sortAlsoTreeview' : 'Ayrıca aÄŸaç görünümü', // from v2.1.15 added 01.08.2016 /********************************** new items **********************************/ 'untitled file.txt' : 'YeniDosya.txt', // added 10.11.2015 'untitled folder' : 'YeniKlasor', // added 10.11.2015 'Archive' : 'YeniArsiv', // from v2.1 added 10.11.2015 'untitled file' : 'YeniDosya.$1', // from v2.1.41 added 6.8.2018 'extentionfile' : '$1: Dosya', // from v2.1.41 added 6.8.2018 'extentiontype' : '$1: $2', // from v2.1.43 added 17.10.2018 /********************************** messages **********************************/ 'confirmReq' : 'Onay gerekli', 'confirmRm' : 'Öğeleri kaldırmak istediÄŸinden emin misin?
          Bu işlem geri alınamaz!', 'confirmRepl' : 'Eski dosya yenisi ile değiştirilsin mi?', 'confirmRest' : 'Mevcut öge çöp kutusundaki ögeyle değiştirilsin mi?', // fromv2.1.24 added 5.5.2017 'confirmConvUTF8' : 'UTF-8 değil
          UTF-8\'e dönüştürülsün mü?
          Dönüştürme sonrası kaydedebilmek için içeriğin UTF-8 olması gerekir.', // from v2.1 added 08.04.2014 'confirmNonUTF8' : 'Bu dosyanın karakter kodlaması tespit edilemedi. Düzenleme için geçici olarak UTF-8\'e dönüştürülmesi gerekir.
          Lütfen bu dosyanın karakter kodlamasını seçin.', // from v2.1.19 added 28.11.2016 'confirmNotSave' : 'Düzenlenmiş içerik.
          Değişiklikleri kaydetmek istemiyorsanız son yapılanlar kaybolacak.', // from v2.1 added 15.7.2015 'confirmTrash' : 'Öğeleri çöp kutusuna taşımak istediğinizden emin misiniz?', //from v2.1.24 added 29.4.2017 'confirmMove' : '"$1" değiştirmek istediğinizden emin misiniz?', //from v2.1.50 added 27.7.2019 'apllyAll' : 'Tümüne uygula', 'name' : 'İsim', 'size' : 'Boyut', 'perms' : 'Yetkiler', 'modify' : 'Değiştirildi', 'kind' : 'Tür', 'read' : 'oku', 'write' : 'yaz', 'noaccess' : 'erişim yok', 'and' : 've', 'unknown' : 'bilinmeyen', 'selectall' : 'Tüm öğeleri seç', 'selectfiles' : 'Öğe(ler)i seç', 'selectffile' : 'İlk öğeyi seç', 'selectlfile' : 'Son öğeyi seç', 'viewlist' : 'Liste görünümü', 'viewicons' : 'Simge görünümü', 'viewSmall' : 'Küçük simgeler', // from v2.1.39 added 22.5.2018 'viewMedium' : 'Orta simgleler', // from v2.1.39 added 22.5.2018 'viewLarge' : 'Büyük simgleler', // from v2.1.39 added 22.5.2018 'viewExtraLarge' : 'Çok büyük simgeler', // from v2.1.39 added 22.5.2018 'places' : 'Yerler', 'calc' : 'Hesapla', 'path' : 'Dosya Yolu', 'aliasfor' : 'Takma adı', 'locked' : 'Kilitli', 'dim' : 'Ölçüler', 'files' : 'Dosyalar', 'folders' : 'Dizinler', 'items' : 'Nesneler', 'yes' : 'evet', 'no' : 'hayır', 'link' : 'Bağlantı', 'searcresult' : 'Arama sonuçları', 'selected' : 'Seçili öğeler', 'about' : 'Hakkında', 'shortcuts' : 'Kısayollar', 'help' : 'Yardım', 'webfm' : 'Web dosyası yöneticisi', 'ver' : 'Sürüm', 'protocolver' : 'protokol sürümü', 'homepage' : 'Proje Anasayfası', 'docs' : 'Belgeler', 'github' : 'Github\'ta bizi takip edin', 'twitter' : 'Twitter\'da bizi takip edin', 'facebook' : 'Facebook\'ta bize katılın', 'team' : 'Takım', 'chiefdev' : 'geliştirici şefi', 'developer' : 'geliştirici', 'contributor' : 'iştirakçi', 'maintainer' : 'bakıcı', 'translator' : 'tercüman', 'icons' : 'Simgeler', 'dontforget' : 've havlunuzu almayı unutmayın', 'shortcutsof' : 'Kısayollar devre dışı', 'dropFiles' : 'Dosyaları buraya taşı', 'or' : 'veya', 'selectForUpload' : 'Yüklemek için dosyaları seçin', 'moveFiles' : 'Öğeleri taşı', 'copyFiles' : 'Öğeleri kopyala', 'restoreFiles' : 'Öğeleri geri yükle', // from v2.1.24 added 5.5.2017 'rmFromPlaces' : 'Yerlerinden sil', 'aspectRatio' : 'Görünüm oranı', 'scale' : 'Ölçeklendir', 'width' : 'Genişlik', 'height' : 'Yükseklik', 'resize' : 'Boyutlandır', 'crop' : 'Kırp', 'rotate' : 'Döndür', 'rotate-cw' : '90 derece sağa döndür', 'rotate-ccw' : '90 derece sola döndür', 'degree' : '°', 'netMountDialogTitle' : 'Bağlı (Mount) ağ birimi', // added 18.04.2012 'protocol' : 'Protokol', // added 18.04.2012 'host' : 'Host', // added 18.04.2012 'port' : 'Kapı(Port)', // added 18.04.2012 'user' : 'Kullanıcı', // added 18.04.2012 'pass' : 'Şifre', // added 18.04.2012 'confirmUnmount' : 'Bağlantı kesilsin mi $1?', // from v2.1 added 30.04.2012 'dropFilesBrowser': 'Dosyaları tarayıcıdan yapıştır veya bırak', // from v2.1 added 30.05.2012 'dropPasteFiles' : 'Dosyaları buraya yapıştır veya bırak', // from v2.1 added 07.04.2014 'encoding' : 'Kodlama', // from v2.1 added 19.12.2014 'locale' : 'Yerel', // from v2.1 added 19.12.2014 'searchTarget' : 'Hedef: $1', // from v2.1 added 22.5.2015 'searchMime' : 'Giriş MIME Türüne Göre Arama', // from v2.1 added 22.5.2015 'owner' : 'Sahibi', // from v2.1 added 20.6.2015 'group' : 'Grup', // from v2.1 added 20.6.2015 'other' : 'Diğer', // from v2.1 added 20.6.2015 'execute' : 'Çalıştır', // from v2.1 added 20.6.2015 'perm' : 'Yetki', // from v2.1 added 20.6.2015 'mode' : 'Mod', // from v2.1 added 20.6.2015 'emptyFolder' : 'Dizin boş', // from v2.1.6 added 30.12.2015 'emptyFolderDrop' : 'Dizin boş\\Öğe eklemek için sürükleyin', // from v2.1.6 added 30.12.2015 'emptyFolderLTap' : 'Dizin boş\\Öğe eklemek için basılı tutun', // from v2.1.6 added 30.12.2015 'quality' : 'Kalite', // from v2.1.6 added 5.1.2016 'autoSync' : 'Otomatik senkronizasyon', // from v2.1.6 added 10.1.2016 'moveUp' : 'Yukarı taşı', // from v2.1.6 added 18.1.2016 'getLink' : 'URL bağlantısı alın', // from v2.1.7 added 9.2.2016 'selectedItems' : 'Seçili öğeler ($1)', // from v2.1.7 added 2.19.2016 'folderId' : 'Dizin kimliği', // from v2.1.10 added 3.25.2016 'offlineAccess' : 'Çevrimdışı erişime izin ver', // from v2.1.10 added 3.25.2016 'reAuth' : 'Yeniden kimlik doğrulaması için', // from v2.1.10 added 3.25.2016 'nowLoading' : 'Şimdi yükleniyor...', // from v2.1.12 added 4.26.2016 'openMulti' : 'Çoklu dosya aç', // from v2.1.12 added 5.14.2016 'openMultiConfirm': '$1 dosyalarını açmaya çalışıyorsunuz. Tarayıcıda açmak istediğinizden emin misiniz?', // from v2.1.12 added 5.14.2016 'emptySearch' : 'Arama hedefinde eşleşen sonuç bulunamadı.', // from v2.1.12 added 5.16.2016 'editingFile' : 'Dosya düzenleniyor.', // from v2.1.13 added 6.3.2016 'hasSelected' : '$1 öğe seçtiniz.', // from v2.1.13 added 6.3.2016 'hasClipboard' : 'Panonuzda $1 öğeniz var.', // from v2.1.13 added 6.3.2016 'incSearchOnly' : 'Artan arama yalnızca geçerli görünümden yapılır.', // from v2.1.13 added 6.30.2016 'reinstate' : 'Eski durumuna getir', // from v2.1.15 added 3.8.2016 'complete' : '$1 tamamlandı', // from v2.1.15 added 21.8.2016 'contextmenu' : 'Konteks menüsü', // from v2.1.15 added 9.9.2016 'pageTurning' : 'Sayfa çevir', // from v2.1.15 added 10.9.2016 'volumeRoots' : 'Kök birimler', // from v2.1.16 added 16.9.2016 'reset' : 'Sıfırla', // from v2.1.16 added 1.10.2016 'bgcolor' : 'Arkaplan rengi', // from v2.1.16 added 1.10.2016 'colorPicker' : 'Renk seçici', // from v2.1.16 added 1.10.2016 '8pxgrid' : '8px Izgara', // from v2.1.16 added 4.10.2016 'enabled' : 'Etkin', // from v2.1.16 added 4.10.2016 'disabled' : 'Engelli', // from v2.1.16 added 4.10.2016 'emptyIncSearch' : 'Geçerli görünümde arama sonucu bulunamadı. Arama sonucunu genişletmek için \\APress [Enter] yapın', // from v2.1.16 added 5.10.2016 'emptyLetSearch' : 'Geçerli görünümde ilk harf arama sonuçları boş.', // from v2.1.23 added 24.3.2017 'textLabel' : 'Metin etiketi', // from v2.1.17 added 13.10.2016 'minsLeft' : '$1 dakika kaldı', // from v2.1.17 added 13.11.2016 'openAsEncoding' : 'Seçilen kodlamayla yeniden aç', // from v2.1.19 added 2.12.2016 'saveAsEncoding' : 'Seçilen kodlamayla kaydet', // from v2.1.19 added 2.12.2016 'selectFolder' : 'Dizin seç', // from v2.1.20 added 13.12.2016 'firstLetterSearch': 'İlk arama sayfası', // from v2.1.23 added 24.3.2017 'presets' : 'Hazır ayarlar', // from v2.1.25 added 26.5.2017 'tooManyToTrash' : 'çok fazla öge var çöp kutusuna atılamaz.', // from v2.1.25 added 9.6.2017 'TextArea' : 'Metin alanı(TextArea)', // from v2.1.25 added 14.6.2017 'folderToEmpty' : '"$1" dizinini boşalt.', // from v2.1.25 added 22.6.2017 'filderIsEmpty' : '"$1" dizininde öğe yok.', // from v2.1.25 added 22.6.2017 'preference' : 'Tercih', // from v2.1.26 added 28.6.2017 'language' : 'Dil ayarları', // from v2.1.26 added 28.6.2017 'clearBrowserData': 'Bu tarayıcıda kayıtlı ayarları başlat', // from v2.1.26 added 28.6.2017 'toolbarPref' : 'Araç çubuğu ayarları', // from v2.1.27 added 2.8.2017 'charsLeft' : '... $1 karakter kaldı', // from v2.1.29 added 30.8.2017 'linesLeft' : '... $1 satır kaldı.', // from v2.1.52 added 16.1.2020 'sum' : 'Toplam', // from v2.1.29 added 28.9.2017 'roughFileSize' : 'Kaba dosya boyutu', // from v2.1.30 added 2.11.2017 'autoFocusDialog' : 'Fare ile üzerine gelince diyalog öğesi odaklansın', // from v2.1.30 added 2.11.2017 'select' : 'Seç', // from v2.1.30 added 23.11.2017 'selectAction' : 'Dosya seçildiğinde işleme al', // from v2.1.30 added 23.11.2017 'useStoredEditor' : 'Geçen sefer kullanılan editörle aç', // from v2.1.30 added 23.11.2017 'selectinvert' : 'Zıt seçim', // from v2.1.30 added 25.11.2017 'renameMultiple' : '$1 seçilen öğeleri $2 gibi yeniden adlandırmak istediğinizden emin misiniz?
          Bu geri alınamaz!', // from v2.1.31 added 4.12.2017 'batchRename' : 'Yığın adını deÄŸiÅŸtir', // from v2.1.31 added 8.12.2017 'plusNumber' : '+ Sayı', // from v2.1.31 added 8.12.2017 'asPrefix' : 'Ön ek kele', // from v2.1.31 added 8.12.2017 'asSuffix' : 'Son ek ekle', // from v2.1.31 added 8.12.2017 'changeExtention' : 'Uzantıyı deÄŸiÅŸtir', // from v2.1.31 added 8.12.2017 'columnPref' : 'Sütun ayarları (Liste görünümü)', // from v2.1.32 added 6.2.2018 'reflectOnImmediate' : 'Tüm deÄŸiÅŸiklikler hemen arÅŸive yansıtılacaktır.', // from v2.1.33 added 2.3.2018 'reflectOnUnmount' : 'Herhangi bir deÄŸiÅŸiklik, bu birimi kaldırılıncaya kadar yansıtılmayacaktır.', // from v2.1.33 added 2.3.2018 'unmountChildren' : 'BaÄŸlatıyı kesmek istediÄŸiniz birime baÄŸlı ÅŸu birim(ler)\'in de baÄŸlantısı kesilecek. BaÄŸlantıyı kesmek istediÄŸinize emin misiniz?', // from v2.1.33 added 5.3.2018 'selectionInfo' : 'Seçim Bilgisi', // from v2.1.33 added 7.3.2018 'hashChecker' : 'Dosya imza(hash) algoritmaları', // from v2.1.33 added 10.3.2018 'infoItems' : 'öğelerin bilgisi (Seçim Bilgi Paneli)', // from v2.1.38 added 28.3.2018 'pressAgainToExit': 'Çıkmak için tekrar basın.', // from v2.1.38 added 1.4.2018 'toolbar' : 'Araç ÇubuÄŸu', // from v2.1.38 added 4.4.2018 'workspace' : 'Çalışma alanı', // from v2.1.38 added 4.4.2018 'dialog' : 'Diyalog', // from v2.1.38 added 4.4.2018 'all' : 'Tümü', // from v2.1.38 added 4.4.2018 'iconSize' : 'Simge Boyutu (Simge Görünümü)', // from v2.1.39 added 7.5.2018 'editorMaximized' : 'Maksimum düzenleyici penceresini aç', // from v2.1.40 added 30.6.2018 'editorConvNoApi' : 'API ile dönüşüm ÅŸu anda mevcut olmadığından, lütfen web sitesinde dönüştürün.', //from v2.1.40 added 8.7.2018 'editorConvNeedUpload' : 'Dönüştürmeden sonra, dönüştürülen dosyayı kaydetmek için öğe URL\'si veya indirilen bir dosya ile karşıya yüklemeniz gerekir.', //from v2.1.40 added 8.7.2018 'convertOn' : ' $1 site çevrildi', // from v2.1.40 added 10.7.2018 'integrations' : 'Entegrasyonlar', // from v2.1.40 added 11.7.2018 'integrationWith' : 'Bu elFinder aÅŸağıdaki harici hizmetlere entegre edilmiÅŸtir. Lütfen kullanmadan önce kullanım koÅŸullarını, gizlilik politikasını vb. Kontrol edin.', // from v2.1.40 added 11.7.2018 'showHidden' : 'Gizli ögeleri aç.', // from v2.1.41 added 24.7.2018 'hideHidden' : 'Gizli ögeleri kapat.', // from v2.1.41 added 24.7.2018 'toggleHidden' : 'Gizli ögeleri aç/kapat', // from v2.1.41 added 24.7.2018 'makefileTypes' : '"Yeni dosya" ile etkinleÅŸtirilecek dosya türleri', // from v2.1.41 added 7.8.2018 'typeOfTextfile' : 'Text dosyası tipi.', // from v2.1.41 added 7.8.2018 'add' : 'Ekle', // from v2.1.41 added 7.8.2018 'theme' : 'Tema', // from v2.1.43 added 19.10.2018 'default' : 'Varsayılan', // from v2.1.43 added 19.10.2018 'description' : 'Açıklama', // from v2.1.43 added 19.10.2018 'website' : 'Websayfası', // from v2.1.43 added 19.10.2018 'author' : 'Yazar', // from v2.1.43 added 19.10.2018 'email' : 'E-mail', // from v2.1.43 added 19.10.2018 'license' : 'Lisans', // from v2.1.43 added 19.10.2018 'exportToSave' : 'Bu öğe kaydedilemez. Düzenlemeleri kaybetmemek için PC\'nize aktarmanız gerekir.', // from v2.1.44 added 1.12.2018 'dblclickToSelect': 'Dosyayı seçmek için çift tıklayın.', // from v2.1.47 added 22.1.2019 'useFullscreen' : 'Tam ekran modunu kullan', // from v2.1.47 added 19.2.2019 /********************************** mimetypes **********************************/ 'kindUnknown' : 'Bilinmiyor', 'kindRoot' : 'Birim Kök dizini', // from v2.1.16 added 16.10.2016 'kindFolder' : 'Dizin', 'kindSelects' : 'Seçim', // from v2.1.29 added 29.8.2017 'kindAlias' : 'Alias (Takma ad)', 'kindAliasBroken' : 'Bozuk alias', // applications 'kindApp' : 'Uygulama', 'kindPostscript' : 'Postscript dosyası', 'kindMsOffice' : 'Microsoft Office dosyası', 'kindMsWord' : 'Microsoft Word dosyası', 'kindMsExcel' : 'Microsoft Excel dosyası', 'kindMsPP' : 'Microsoft Powerpoint sunumu', 'kindOO' : 'Open Office dosyası', 'kindAppFlash' : 'Flash uygulaması', 'kindPDF' : 'PDF', 'kindTorrent' : 'Bittorrent dosyası', 'kind7z' : '7z arÅŸivi', 'kindTAR' : 'TAR arÅŸivi', 'kindGZIP' : 'GZIP arÅŸivi', 'kindBZIP' : 'BZIP arÅŸivi', 'kindXZ' : 'XZ arÅŸivi', 'kindZIP' : 'ZIP arÅŸivi', 'kindRAR' : 'RAR arÅŸivi', 'kindJAR' : 'Java JAR dosyası', 'kindTTF' : 'True Type fontu', 'kindOTF' : 'Open Type fontu', 'kindRPM' : 'RPM paketi', // fonts 'kindFont' : 'Fontu', 'kindSFNT' : 'SFNT fontu', 'kindEOT' : 'Embedded Open Type fontu', 'kindWOFF' : 'Web Open Font Format', 'kindWOFF2' : 'Web Open Font Format 2', // texts 'kindText' : 'Metin dosyası', 'kindTextPlain' : 'Düz metin', 'kindPHP' : 'PHP kodu', 'kindCSS' : 'CSS dosyası', 'kindHTML' : 'HTML dosyası', 'kindJS' : 'Javascript kodu', 'kindRTF' : 'Zengin Metin Belgesi', 'kindC' : 'C kodu', 'kindCHeader' : 'C baÅŸlık kodu', 'kindCPP' : 'C++ kodu', 'kindCPPHeader' : 'C++ baÅŸlık kodu', 'kindShell' : 'Unix shell scripti', 'kindPython' : 'Python kodu', 'kindJava' : 'Java kodu', 'kindRuby' : 'Ruby kodu', 'kindPerl' : 'Perl scripti', 'kindSQL' : 'SQL kodu', 'kindXML' : 'XML dosyası', 'kindAWK' : 'AWK kodu', 'kindCSV' : 'CSV', 'kindDOCBOOK' : 'Docbook XML dosyası', 'kindMarkdown' : 'Markdown dosyası', // added 20.7.2015 // images 'kindImage' : 'Resim', 'kindBMP' : 'BMP dosyası', 'kindJPEG' : 'JPEG dosyası', 'kindGIF' : 'GIF dosyası', 'kindPNG' : 'PNG dosyası', 'kindTIFF' : 'TIFF dosyası', 'kindTGA' : 'TGA dosyası', 'kindPSD' : 'Adobe Photoshop dosyası', 'kindXBITMAP' : 'X bitmap dosyası', 'kindPXM' : 'Pixelmator dosyası', // media 'kindAudio' : 'Ses ortamı', 'kindAudioMPEG' : 'MPEG ses', 'kindAudioMPEG4' : 'MPEG-4 ses', 'kindAudioMIDI' : 'MIDI ses', 'kindAudioOGG' : 'Ogg Vorbis ses', 'kindAudioWAV' : 'WAV ses', 'AudioPlaylist' : 'MP3 listesi', 'kindVideo' : 'Video ortamı', 'kindVideoDV' : 'DV video', 'kindVideoMPEG' : 'MPEG video', 'kindVideoMPEG4' : 'MPEG-4 video', 'kindVideoAVI' : 'AVI video', 'kindVideoMOV' : 'Quick Time video', 'kindVideoWM' : 'Windows Media video', 'kindVideoFlash' : 'Flash video', 'kindVideoMKV' : 'Matroska video', 'kindVideoOGG' : 'Ogg video' } }; })); PK!”F@ôMôM@file-manager-advanced/application/library/js/i18n/elfinder.fo.jsnu„[µü¤/** * Faroese translation * @author Marius Hammer * @version 2015-12-03 */ (function(root, factory) { if (typeof define === 'function' && define.amd) { define(['elfinder'], factory); } else if (typeof exports !== 'undefined') { module.exports = factory(require('elfinder')); } else { factory(root.elFinder); } }(this, function(elFinder) { elFinder.prototype.i18.fo = { translator : 'Marius Hammer <marius@vrg.fo>', language : 'Faroese', direction : 'ltr', dateFormat : 'd.m.Y H:i', // Mar 13, 2012 05:27 PM fancyDateFormat : '$1 H:i', // will produce smth like: Today 12:25 PM messages : { /********************************** errors **********************************/ 'error' : 'Villa íkomin', 'errUnknown' : 'Ókend villa.', 'errUnknownCmd' : 'Ókend boð.', 'errJqui' : 'Ógildig jQuery UI konfiguratión. Vælbærar, sum kunnu hálast runt og kunnu sleppast skulu takast við.', 'errNode' : 'elFinder krevur DOM Element stovna.', 'errURL' : 'Ugyldig elFinder konfiguration! URL stilling er ikki ásett.', 'errAccess' : 'Atgongd nokta.', 'errConnect' : 'Far ikki samband við backend.', 'errAbort' : 'Sambandi avbrotið.', 'errTimeout' : 'Sambandi broti av.', 'errNotFound' : 'Backend ikki funnið.', 'errResponse' : 'Ógildugt backend svar.', 'errConf' : 'Ógildugt backend konfiguratión.', 'errJSON' : 'PHP JSON modulið er ikki innstallera.', 'errNoVolumes' : 'Lesiligar mappur er ikki atkomulig.', 'errCmdParams' : 'Ógildigar stillingar fyri kommando "$1".', 'errDataNotJSON' : 'Dáta er ikki JSON.', 'errDataEmpty' : 'Dáta er tømt.', 'errCmdReq' : 'Backend krevur eitt kommando navn.', 'errOpen' : 'Kundi ikki opna "$1".', 'errNotFolder' : 'Luturin er ikki ein mappa.', 'errNotFile' : 'Luturin er ikki ein fíla.', 'errRead' : 'Kundi ikki lesa til "$1".', 'errWrite' : 'Kundi ikki skriva til "$1".', 'errPerm' : 'Atgongd nokta.', 'errLocked' : '"$1" er løst og kann ikki umdoybast, flytast ella strikast.', 'errExists' : 'Tað finst longu ein fíla við navn "$1".', 'errInvName' : 'Ógildugt fíla navn.', 'errFolderNotFound' : 'Mappa ikki funnin.', 'errFileNotFound' : 'Fíla ikki funnin.', 'errTrgFolderNotFound' : 'Mappan "$1" bleiv ikke funnin.', 'errPopup' : 'Kagin forðaði í at opna eitt popup-vindeyga. Fyri at opna fíluna, aktivera popup-vindeygu í tínum kaga stillingum.', 'errMkdir' : '\'Kundi ikki stovna mappu "$1".', 'errMkfile' : 'Kundi ikki stovna mappu "$1".', 'errRename' : 'Kundi ikki umdoyba "$1".', 'errCopyFrom' : 'Kopiering av fílum frá mappuni "$1" er ikke loyvt.', 'errCopyTo' : 'Kopiering av fílum til mappuna "$1" er ikke loyvt.', 'errMkOutLink' : 'Ikki ført fyri at stovna leinkju til uttanfyri \'volume\' rót.', // from v2.1 added 03.10.2015 'errUpload' : 'Innlegginar feilur.', // old name - errUploadCommon 'errUploadFile' : 'Kundi ikki leggja "$1" inn.', // old name - errUpload 'errUploadNoFiles' : 'Ongar fílar funnir at leggja inn.', 'errUploadTotalSize' : 'Dátain er størri enn mest loyvda støddin.', // old name - errMaxSize 'errUploadFileSize' : 'Fíla er størri enn mest loyvda støddin.', // old name - errFileMaxSize 'errUploadMime' : 'Fílu slag ikki góðkent.', 'errUploadTransfer' : '"$1" innleggingar feilur.', 'errUploadTemp' : 'Ikki ført fyri at gera fyribils fílu fyri innlegging.', // from v2.1 added 26.09.2015 'errNotReplace' : 'Lutur "$1" finst longu á hesum stað og can ikki skiftast út av lutið av øðrum slag.', // new 'errReplace' : 'Ikki ført fyri at erstattae "$1".', 'errSave' : 'Kundi ikki goyma "$1".', 'errCopy' : 'Kundi ikki kopiera "$1".', 'errMove' : 'Kundi ikki flyta "$1".', 'errCopyInItself' : 'Kundi ikki kopiera "$1" inn í seg sjálva.', 'errRm' : 'Kundi ikki strika "$1".', 'errRmSrc' : 'Ikki ført fyri at strika keldu fíla(r).', 'errExtract' : 'Kundi ikki útpakka fílar frá "$1".', 'errArchive' : 'Kundi ikki stovna arkiv.', 'errArcType' : 'Arkiv slagið er ikki stuðla.', 'errNoArchive' : 'Fílan er ikki eitt arkiv ella er ikki eitt stuðla arkiva slag.', 'errCmdNoSupport' : 'Backend stuðlar ikki hesi boð.', 'errReplByChild' : 'appan "$1" kann ikki erstattast av einari vøru, hon inniheldur.', 'errArcSymlinks' : 'Av trygdarávum grundum, noktaði skipanin at pakka út arkivir ið innihalda symlinks ella fílur við nøvn ið ikki eru loyvd.', // edited 24.06.2012 'errArcMaxSize' : 'Arkiv fílar fylla meir enn mest loyvda støddin.', 'errResize' : 'Kundi ikki broyta støddina á "$1".', 'errResizeDegree' : 'Ógildugt roterings stig.', // added 7.3.2013 'errResizeRotate' : 'Ikki ført fyri at rotera mynd.', // added 7.3.2013 'errResizeSize' : 'Ógildug myndastødd.', // added 7.3.2013 'errResizeNoChange' : 'Mynda stødd ikki broytt.', // added 7.3.2013 'errUsupportType' : 'Ikki stuðla fíla slag.', 'errNotUTF8Content' : 'Fílan "$1" er ikki í UTF-8 og kann ikki vera rættað.', // added 9.11.2011 'errNetMount' : 'Kundi ikki "mounta" "$1".', // added 17.04.2012 'errNetMountNoDriver' : 'Ikki stuðla protokol.', // added 17.04.2012 'errNetMountFailed' : 'Mount miseydnaðist.', // added 17.04.2012 'errNetMountHostReq' : 'Host kravt.', // added 18.04.2012 'errSessionExpires' : 'Tín seta er útgingin vegna óvirkniy.', 'errCreatingTempDir' : 'Ikki ført fyri at stovna fyribils fíluskrá: "$1"', 'errFtpDownloadFile' : 'Ikki ført fyri at taka fílu niður frá FTP: "$1"', 'errFtpUploadFile' : 'Ikki ført fyri at leggja fílu til FTP: "$1"', 'errFtpMkdir' : 'Ikki ført fyri at stovna fjar-fílaskrá á FTP: "$1"', 'errArchiveExec' : 'Villa íkomin undir arkiveran af fílar: "$1"', 'errExtractExec' : 'Villa íkomin undir útpakking af fílum: "$1"', 'errNetUnMount' : 'Unable to unmount', // from v2.1 added 30.04.2012 'errConvUTF8' : 'Kann ikki broytast til UTF-8', // from v2.1 added 08.04.2014 'errFolderUpload' : 'Royn Google Chrome, um tú ynskir at leggja mappu innn.', // from v2.1 added 26.6.2015 /******************************* commands names ********************************/ 'cmdarchive' : 'Stovna arkiv', 'cmdback' : 'Aftur\'', 'cmdcopy' : 'Kopier', 'cmdcut' : 'Klipp', 'cmddownload' : 'Tak niður', 'cmdduplicate' : 'Tvífalda', 'cmdedit' : 'Rætta fílu', 'cmdextract' : 'Pakka út fílar úr arkiv', 'cmdforward' : 'Fram', 'cmdgetfile' : 'Vel fílar', 'cmdhelp' : 'Um hesa software', 'cmdhome' : 'Heim', 'cmdinfo' : 'Fá upplýsingar', 'cmdmkdir' : 'Nýggja mappu', 'cmdmkfile' : 'Nýggja fílu', 'cmdopen' : 'Opna', 'cmdpaste' : 'Set inn', 'cmdquicklook' : 'Forsýning', 'cmdreload' : 'Les inn umaftur', 'cmdrename' : 'Umdoyp', 'cmdrm' : 'Strika', 'cmdsearch' : 'Finn fílar', 'cmdup' : 'Eitt stig upp', 'cmdupload' : 'Legg fílar inn', 'cmdview' : 'Síggj', 'cmdresize' : 'Tillaga stødd & Roter', 'cmdsort' : 'Raða', 'cmdnetmount' : 'Mount network volume', // added 18.04.2012 'cmdnetunmount': 'Unmount', // from v2.1 added 30.04.2012 'cmdplaces' : 'Til støð', // added 28.12.2014 'cmdchmod' : 'Broytir stíl', // from v2.1 added 20.6.2015 /*********************************** buttons ***********************************/ 'btnClose' : 'Lat aftur', 'btnSave' : 'Goym', 'btnRm' : 'Strika', 'btnApply' : 'Brúka', 'btnCancel' : 'Angra', 'btnNo' : 'Nei', 'btnYes' : 'Ja', 'btnDiscard': 'Discard changes', 'btnMount' : 'Mount', // added 18.04.2012 'btnApprove': 'Goto $1 & approve', // from v2.1 added 26.04.2012 'btnUnmount': 'Unmount', // from v2.1 added 30.04.2012 'btnConv' : 'Konverter', // from v2.1 added 08.04.2014 'btnCwd' : 'Her', // from v2.1 added 22.5.2015 'btnVolume' : 'Volume', // from v2.1 added 22.5.2015 'btnAll' : 'Øll', // from v2.1 added 22.5.2015 'btnMime' : 'MIME Slag', // from v2.1 added 22.5.2015 'btnFileName':'Fílunavn', // from v2.1 added 22.5.2015 'btnSaveClose': 'Goym & Lat aftur', // from v2.1 added 12.6.2015 'btnBackup' : 'Backup', // fromv2.1 added 28.11.2015 /******************************** notifications ********************************/ 'ntfopen' : 'Opna mappu', 'ntffile' : '\'Opna fílu', 'ntfreload' : 'Les innaftur mappu innihald', 'ntfmkdir' : 'Stovnar mappu', 'ntfmkfile' : 'Stovnar fílur', 'ntfrm' : 'Strikar fílur', 'ntfcopy' : 'Kopierar fílur', 'ntfmove' : 'Flytur fílar', 'ntfprepare' : 'Ger klárt at kopiera fílar', 'ntfrename' : 'Umdoyp fílar', 'ntfupload' : 'Leggur inn fílar', 'ntfdownload' : 'Tekur fílar niður', 'ntfsave' : 'Goymir fílar', 'ntfarchive' : 'Stovnar arkiv', 'ntfextract' : 'Útpakkar fílar frá arkiv', 'ntfsearch' : 'Leitar eftir fílum', 'ntfresize' : 'Broytir stødd á fílur', 'ntfsmth' : '\'Ger okkurt >_<', 'ntfloadimg' : 'Lesur mynd inn', 'ntfnetmount' : 'Mounting network volume', // added 18.04.2012 'ntfnetunmount': 'Unmounting network volume', // from v2.1 added 30.04.2012 'ntfdim' : 'Tekur mynda vídd', // added 20.05.2013 'ntfreaddir' : 'Lesur mappu upplýsingar', // from v2.1 added 01.07.2013 'ntfurl' : 'Far URL af leinkju', // from v2.1 added 11.03.2014 'ntfchmod' : 'Broyti fílu stíl', // from v2.1 added 20.6.2015 'ntfpreupload': 'Kannar fílunavnið á fílu', // from v2.1 added 31.11.2015 /************************************ dates **********************************/ 'dateUnknown' : 'ókent', 'Today' : 'Ã� dag', 'Yesterday' : 'Ã� gjár', 'msJan' : 'Jan', 'msFeb' : 'Feb', 'msMar' : 'Mar', 'msApr' : 'Apr', 'msMay' : 'Mai', 'msJun' : 'Jun', 'msJul' : 'Jul', 'msAug' : 'Aug', 'msSep' : 'Sep', 'msOct' : 'Okt', 'msNov' : 'Nov', 'msDec' : 'Des', 'January' : 'Januar', 'February' : 'Februar', 'March' : 'Mars', 'April' : 'Apríl', 'May' : 'Mai', 'June' : 'Juni', 'July' : 'Juli', 'August' : 'August', 'September' : 'September', 'October' : 'Oktober', 'November' : 'November', 'December' : 'Desember', 'Sunday' : 'Sunnudag', 'Monday' : 'Mánadag', 'Tuesday' : 'Týsdag', 'Wednesday' : 'Mikudag', 'Thursday' : 'Hósdag', 'Friday' : 'Fríggjadag', 'Saturday' : 'Leygardag', 'Sun' : 'Sun', 'Mon' : 'Mán', 'Tue' : 'Týs', 'Wed' : 'Mik', 'Thu' : 'Hós', 'Fri' : 'Frí', 'Sat' : 'Ley', /******************************** sort variants ********************************/ 'sortname' : 'eftir navn', 'sortkind' : 'eftir slag', 'sortsize' : 'eftir stødd', 'sortdate' : 'eftir dato', 'sortFoldersFirst' : 'mappur fyrst', /********************************** new items **********************************/ 'untitled file.txt' : 'NýggjaFílu.txt', // added 10.11.2015 'untitled folder' : 'NýggjaMappu', // added 10.11.2015 'Archive' : 'NýtArkiv', // from v2.1 added 10.11.2015 /********************************** messages **********************************/ 'confirmReq' : 'Váttan kravd', 'confirmRm' : 'Ert tú vísur í at tú ynskir at strika fílarnar?
          Hetta kann ikki angrast!', 'confirmRepl' : 'Erstatta gomlu fílu við nýggja?', 'confirmConvUTF8' : 'Brúka á øll', // from v2.1 added 08.04.2014 'confirmNotSave' : 'Er blivi rættað.
          Missir sínar broytingar um tú ikki goymir.', // from v2.1 added 15.7.2015 'apllyAll' : 'Brúka til øll', 'name' : 'Navn', 'size' : 'Stødd', 'perms' : 'Rættindi', 'modify' : 'Rættað', 'kind' : 'Slag', 'read' : 'síggja', 'write' : 'broyta', 'noaccess' : 'onga atgongd', 'and' : 'og', 'unknown' : 'ókent', 'selectall' : 'Vel allar fílur', 'selectfiles' : 'Vel fílu(r)', 'selectffile' : 'Vel fyrstu fílu', 'selectlfile' : 'Vel síðstu fílu', 'viewlist' : 'Lista vísing', 'viewicons' : 'Ikon vísing', 'places' : 'Støð', 'calc' : 'Rokna', 'path' : 'Stiga', 'aliasfor' : 'Hjánavn fyri', 'locked' : 'Læst', 'dim' : 'Vídd', 'files' : 'Fílur', 'folders' : 'Mappur', 'items' : 'Myndir', 'yes' : 'ja', 'no' : 'nei', 'link' : 'Leinkja', 'searcresult' : 'Leiti úrslit', 'selected' : 'valdar myndir', 'about' : 'Um', 'shortcuts' : 'Snarvegir', 'help' : 'Hjálp', 'webfm' : 'Web fílu umsitan', 'ver' : 'Útgáva', 'protocolver' : 'protokol versión', 'homepage' : 'Verkætlan heim', 'docs' : 'Skjalfesting', 'github' : 'Mynda okkum á Github', 'twitter' : 'Fylg okkum á twitter', 'facebook' : 'Fylg okkum á facebook', 'team' : 'Lið', 'chiefdev' : 'forritaleiðari', 'developer' : 'forritari', 'contributor' : 'stuðulsveitari', 'maintainer' : 'viðlíkahaldari', 'translator' : 'umsetari', 'icons' : 'Ikonir', 'dontforget' : 'and don\'t forget to take your towel', 'shortcutsof' : 'Snarvegir sligi frá', 'dropFiles' : 'Slepp fílur her', 'or' : 'ella', 'selectForUpload' : 'Vel fílur at leggja inn', 'moveFiles' : 'Flyt fílur', 'copyFiles' : 'Kopier fílur', 'rmFromPlaces' : 'Flyt frá støð', 'aspectRatio' : 'Skermformat', 'scale' : 'Skalera', 'width' : 'Longd', 'height' : 'Hædd', 'resize' : 'Tilliga stødd', 'crop' : 'Sker til', 'rotate' : 'Rotera', 'rotate-cw' : 'Rotera 90 gradir við urið', 'rotate-ccw' : 'otera 90 gradir móti urið', 'degree' : '°', 'netMountDialogTitle' : 'Mount network volume', // added 18.04.2012 'protocol' : 'Protokol', // added 18.04.2012 'host' : 'Host', // added 18.04.2012 'port' : 'Port', // added 18.04.2012 'user' : 'Brúkari', // added 18.04.2012 'pass' : 'Loyniorð', // added 18.04.2012 'confirmUnmount' : 'Are you unmount $1?', // from v2.1 added 30.04.2012 'dropFilesBrowser': 'Hála ella set innn fílar frá kaga', // from v2.1 added 30.05.2012 'dropPasteFiles' : 'Hála ella set inn fílar frá URls her', // from v2.1 added 07.04.2014 'encoding' : 'Encoding', // from v2.1 added 19.12.2014 'locale' : 'Locale', // from v2.1 added 19.12.2014 'searchTarget' : 'Target: $1', // from v2.1 added 22.5.2015 'searchMime' : 'Leita við input MIME Type', // from v2.1 added 22.5.2015 'owner' : 'Eigari', // from v2.1 added 20.6.2015 'group' : 'Bólkur', // from v2.1 added 20.6.2015 'other' : 'Annað', // from v2.1 added 20.6.2015 'execute' : 'Útfør', // from v2.1 added 20.6.2015 'perm' : 'Rættindi', // from v2.1 added 20.6.2015 'mode' : 'Mode', // from v2.1 added 20.6.2015 /********************************** mimetypes **********************************/ 'kindUnknown' : 'Ókent', 'kindFolder' : 'Mappa', 'kindAlias' : 'Hjánavn', 'kindAliasBroken' : 'Óvirki hjánavn', // applications 'kindApp' : 'Applikatión', 'kindPostscript' : 'Postscript skjal', 'kindMsOffice' : 'Microsoft Office skjal', 'kindMsWord' : 'Microsoft Word skjal', 'kindMsExcel' : 'Microsoft Excel skjal', 'kindMsPP' : 'Microsoft Powerpoint framløga', 'kindOO' : 'Open Office skjal', 'kindAppFlash' : 'Flash applikatión', 'kindPDF' : 'Portable Document Format (PDF)', 'kindTorrent' : 'Bittorrent fíla', 'kind7z' : '7z arkiv', 'kindTAR' : 'TAR arkiv', 'kindGZIP' : 'GZIP arkiv', 'kindBZIP' : 'BZIP arkiv', 'kindXZ' : 'XZ arkiv', 'kindZIP' : 'ZIP arkiv', 'kindRAR' : 'RAR arkiv', 'kindJAR' : 'Java JAR ffílaile', 'kindTTF' : 'True Type font', 'kindOTF' : 'Open Type font', 'kindRPM' : 'RPM pakki', // fonts 'kindFont' : 'Font', 'kindSFNT' : 'SFNT font', 'kindEOT' : 'Embedded Open Type font', 'kindWOFF' : 'Web Open Font Format', 'kindWOFF2' : 'Web Open Font Format 2', // texts 'kindText' : 'Text skjal', 'kindTextPlain' : 'Reinur tekstur', 'kindPHP' : 'PHP kelda', 'kindCSS' : 'Cascading style sheet (CSS)', 'kindHTML' : 'HTML skjal', 'kindJS' : 'Javascript kelda', 'kindRTF' : 'Rich Text Format (RTF)', 'kindC' : 'C kelda', 'kindCHeader' : 'C header kelda', 'kindCPP' : 'C++ kelda', 'kindCPPHeader' : 'C++ header kelda', 'kindShell' : 'Unix shell script', 'kindPython' : 'Python kelda', 'kindJava' : 'Java kelda', 'kindRuby' : 'Ruby kelda', 'kindPerl' : 'Perl script', 'kindSQL' : 'SQL kelda', 'kindXML' : 'XML skjal', 'kindAWK' : 'AWK kelda', 'kindCSV' : 'Comma separated values (CSV)', 'kindDOCBOOK' : 'Docbook XML skjal', 'kindMarkdown' : 'Markdown text', // added 20.7.2015 // images 'kindImage' : 'Mynd', 'kindBMP' : 'BMP mynd', 'kindJPEG' : 'JPEG mynd', 'kindGIF' : 'GIF mynd', 'kindPNG' : 'PNG mynd', 'kindTIFF' : 'TIFF mynd', 'kindTGA' : 'TGA mynd', 'kindPSD' : 'Adobe Photoshop mynd', 'kindXBITMAP' : 'X bitmap mynd', 'kindPXM' : 'Pixelmator mynd', // media 'kindAudio' : 'Audio media', 'kindAudioMPEG' : 'MPEG ljóðfíla', 'kindAudioMPEG4' : 'MPEG-4 ljóðfíla', 'kindAudioMIDI' : 'MIDI ljóðfíla', 'kindAudioOGG' : 'Ogg Vorbis ljóðfíla', 'kindAudioWAV' : 'WAV ljóðfíla', 'AudioPlaylist' : 'MP3 playlisti', 'kindVideo' : 'Video media', 'kindVideoDV' : 'DV filmur', 'kindVideoMPEG' : 'MPEG filmur', 'kindVideoMPEG4' : 'MPEG-4 filmur', 'kindVideoAVI' : 'AVI filmur', 'kindVideoMOV' : 'Quick Time filmur', 'kindVideoWM' : 'Windows Media filmur', 'kindVideoFlash' : 'Flash filmur', 'kindVideoMKV' : 'Matroska filmur', 'kindVideoOGG' : 'Ogg filmur' } }; })); PK!}׫Ël­l­@file-manager-advanced/application/library/js/i18n/elfinder.si.jsnu„[µü¤/** * Sinhala translation * @author CodeLyokoXtEAM * @version 2018-03-26 */ (function(root, factory) { if (typeof define === 'function' && define.amd) { define(['elfinder'], factory); } else if (typeof exports !== 'undefined') { module.exports = factory(require('elfinder')); } else { factory(root.elFinder); } }(this, function(elFinder) { elFinder.prototype.i18.si = { translator : 'CodeLyokoXtEAM <XcodeLyokoTEAM@gmail.com>', language : 'Sinhala', direction : 'ltr', dateFormat : 'Y.m.d h:i A', // Mar 13, 2012 05:27 PM fancyDateFormat : '$1 h:i A', // will produce smth like: Today 12:25 PM nonameDateFormat : 'Ymd-His', // to apply if upload file is noname: 120513172700 messages : { /********************************** errors **********************************/ 'error' : 'දà·�ෂයකි.', 'errUnknown' : 'නොදන්නà·� දà·�ෂයකි.', 'errUnknownCmd' : 'නොදන්නà·� විධà·�නයකි.', 'errJqui' : 'වලංගු නොවන jQuery UI à·ƒà·�à¶šà·�ස්මකි. තේරිය à·„à·�à¶šà·’, ඇදගෙන යà·�ම සහ ඇද දà·�මිය à·„à·�à¶šà·’ කොටස් ඇතුළත් à¶šà·… යුතුය.', 'errNode' : 'ElFinder විසින් DOM Element නිර්මà·�ණය කිරීමට à¶…à·€à·�à·Šâ€�යව à¶…à·�à¶­.', 'errURL' : 'වලංගු නොවන elFinder à·ƒà·�à¶šà·�ස්මකි! URL විකල්පය à·ƒà·�à¶šà·ƒà·� à¶±à·�à¶­.', 'errAccess' : 'à¶·à·�විතය අත්හිටුවà·� ඇත.', 'errConnect' : 'පසුබිම(Backend) වෙත සම්බන්ධ වීමට නොහà·�කිය.', 'errAbort' : 'සම්බන්ධතà·�වය වසà·�දමà·� ඇත.', 'errTimeout' : 'සම්බන්ධතà·� කල් ඉකුත්වී ඇත.', 'errNotFound' : 'පසුබිම(Backend) සොයà·�ගත නොහà·�à¶šà·’ විය.', 'errResponse' : 'වලංගු නොවන පසුබිම(Backend) à¶´à·Šâ€�රතිචà·�රය.', 'errConf' : 'වලංගු නොවන Backend à·ƒà·�à¶šà·�ස්මකි.', 'errJSON' : 'PHP JSON මොඩියුලය ස්ථà·�පනය à¶šà¶» à¶±à·�à¶­.', 'errNoVolumes' : 'කියවිය à·„à·�à¶šà·’ à¶‘à·Šà¶šà¶š(volumes) නොමà·�à¶­.', 'errCmdParams' : '"$1" නම් විධà·�නය වලංගු නොවන à¶´à¶»à·�මිතියකි.', 'errDataNotJSON' : 'JSON දත්ත නොවේ.', 'errDataEmpty' : 'හිස් දත්තයකි.', 'errCmdReq' : 'Backend සඳහà·� ඉල්ලන ලද විධà·�නයේ නම à¶…à·€à·�à·Šâ€�ය වේ.', 'errOpen' : '"$1" විවෘත à¶šà·… නොහà·�à¶š.', 'errNotFolder' : 'à¶…à·�යිත්තම(object) ෆොල්ඩරයක් නොවේ.', 'errNotFile' : 'à¶…à·�යිත්තම(object) ගොනුවක් නොවේ.', 'errRead' : '"$1" කියවීමට නොහà·�à¶š.', 'errWrite' : '"$1" තුල ලිවීමට නොහà·�කිය.', 'errPerm' : 'අවසරය නෙà·�මà·�à¶­.', 'errLocked' : '"$1" අගුළු දමà·� ඇති à¶…à¶­à¶» එය à¶±à·�වත නම් කිරීම, සම්පූර්ණයෙන් විස්ථà·�පනය කිරීම à·„à·� ඉවත් කිරීම à¶šà·… නොහà·�à¶š.', 'errExists' : '"$1" නම් ගොනුව දà·�නටමත් පවතී.', 'errInvName' : 'ගොනු නම වලංගු නොවේ.', 'errInvDirname' : 'à·†à·�ල්ඩර් නම වලංගු නොවේ.', // from v2.1.24 added 12.4.2017 'errFolderNotFound' : 'à·†à·�ල්ඩරය හමු නොවිණි.', 'errFileNotFound' : 'ගොනුව හමු නොවිණි.', 'errTrgFolderNotFound' : 'ඉලක්කගත à·†à·�ල්ඩරය "$1" හමු නොවිනි.', 'errPopup' : 'à¶¶à·Šâ€�රවුසරය à¶‹à¶­à·Šà¶´à¶­à¶± කවුළුව විවෘත කිරීම වළක්වයි. ගොනු විවෘත කිරීම සඳහà·� à¶¶à·Šâ€�රවුසරයේ විකල්ප තුළ එය සක්රිය කරන්න.', 'errMkdir' : '"$1" à·†à·�ල්ඩරය සෑදීමට නොහà·�කිය.', 'errMkfile' : '"$1" ගොනුව සෑදිය නොහà·�à¶š.', 'errRename' : '"$1" à¶±à·�වත නම් කිරීමට නොහà·�à¶šà·’ විය.', 'errCopyFrom' : '"$1" volume යෙන් ගොනු à¶´à·’à¶§à¶´à¶­à·Š කිරීම තහනම්ය.', 'errCopyTo' : '"$1" volume යට ගොනු à¶´à·’à¶§à¶´à¶­à·Š කිරීම තහනම්ය.', 'errMkOutLink' : 'volume root යෙන් à¶´à·’à¶§à¶­à¶§ සබà·�ඳිය(link) නිර්මà·�ණය කිරීමට නොහà·�à¶šà·’ විය.', // from v2.1 added 03.10.2015 'errUpload' : 'උඩුගත(upload) කිරීමේ දà·�ෂයකි.', // old name - errUploadCommon 'errUploadFile' : '"$1" උඩුගත(upload) කිරීමට නොහà·�à¶šà·’ විය.', // old name - errUpload 'errUploadNoFiles' : 'උඩුගත(upload) කිරීම සඳහà·� ගොනු කිසිවක් සොයà·�ගත නොහà·�à¶šà·’ විය.', 'errUploadTotalSize' : 'දත්ත අවසර දී à¶…à·�à¶­à·’ උපරිම à¶´à·Šâ€�රමà·�ණය ඉක්මවà·� ඇත.', // old name - errMaxSize 'errUploadFileSize' : 'ගොනු අවසර දී à¶…à·�à¶­à·’ උපරිම à¶´à·Šâ€�රමà·�ණය ඉක්මවà·� ඇත.', // old name - errFileMaxSize 'errUploadMime' : 'ගොනු වර්ගයට අවසර à¶±à·�à¶­.', 'errUploadTransfer' : '"$1" à·€ මà·�රු කිරීමේ දà·�ෂයකි.', 'errUploadTemp' : 'upload කිරීම සඳහà·� à¶­à·�වකà·�ලික ගොනුව සෑදිය නොහà·�à¶š.', // from v2.1 added 26.09.2015 'errNotReplace' : '"$1" à¶…à·�යිත්තම(object) දà·�නටමත් මෙම ස්ථà·�නයේ පවතී, වෙනත් වර්ගයකිනි à¶´à·Šâ€�රතිස්ථà·�පනය à¶šà·… නොහà·�à¶š.', // new 'errReplace' : '"$1" à¶´à·Šâ€�රතිස්ථà·�පනය à¶šà·… නොහà·�à¶š.', 'errSave' : '"$1" සුරà·�කීමට නොහà·�à¶š.', 'errCopy' : '"$1" à¶´à·’à¶§à¶´à¶­à·Š කිරීමට නොහà·�à¶š.', 'errMove' : '"$1" සම්පූර්ණයෙන් විස්ථà·�පනය කිරීමට නොහà·�à¶š.', 'errCopyInItself' : '"$1" තුලට à¶´à·’à¶§à¶´à¶­à·Š කිරීමට නොහà·�à¶š.', 'errRm' : '"$1" ඉවත් කිරීමට නොහà·�à¶šà·’ විය.', 'errTrash' : 'කුණු-කූඩය තුලට දà·�මීමට නොහà·�à¶š.', // from v2.1.24 added 30.4.2017 'errRmSrc' : 'මූලà·�à·�à·Šâ€�රය ගොනු(à·€) ඉවත් à¶šà·… නොහà·�à¶š.', 'errExtract' : '"$1" වෙතින් ගොනු දිග à·„à·�රීමට නොහà·�à¶š.', 'errArchive' : 'සංරක්ෂිතය සෑදීමට නොහà·�à¶šà·’ විය.', 'errArcType' : 'නොගà·�ලපෙන සංරක්ෂණ වර්ගයකි.', 'errNoArchive' : 'ගොනුව නොගà·�ලපෙන සංරක්ෂණ වර්ගයක් à·„à·� සංරක්ෂිතයක් නෙà·�වේ.', 'errCmdNoSupport' : 'පසුබිම(Backend) මෙම විධà·�නය නොදනී.', 'errReplByChild' : '"$1" à·†à·�ල්ඩරය එහිම අඩංගු අයිතමයක් මගින් à¶´à·Šâ€�රතිස්ථà·�පනය à¶šà·… නොහà·�à¶š.', 'errArcSymlinks' : 'ආරක්ෂිත හේතුව නිසà·� අනුමත නොකෙරෙන සබà·�ඳි සම්බන්දතà·� à·„à·� ලිපිගොනු නම් අඩංගු à¶¶à·�වින් සංරක්ෂිතය දිග à·„à·�රීම කිරීමට ඉඩ නොදෙන.', // edited 24.06.2012 'errArcMaxSize' : 'සංරක්ෂිතය ලිපිගොනු උපරිම à¶´à·Šâ€�රමà·�ණය ඉක්මවà·� ඇත.', 'errResize' : 'à¶´à·Šâ€�රතිප්â€�රමà·�ණය කිරීමට නොහà·�à¶šà·’ විය.', 'errResizeDegree' : 'වලංගු නොවන à¶·à·Šâ€�රමණ à¶šà·™à·�්ණයකි.', // added 7.3.2013 'errResizeRotate' : 'රූපය à¶·à·Šâ€�රමණය කිරීමට නොහà·�à¶šà·’ විය.', // added 7.3.2013 'errResizeSize' : 'රූපයේ à¶´à·Šâ€�රමà·�ණය වලංගු නොවේ.', // added 7.3.2013 'errResizeNoChange' : 'රූපයේ à¶´à·Šâ€�රමà·�ණය වෙනස් නොවුණි.', // added 7.3.2013 'errUsupportType' : 'නොගà·�ලපෙන ගොනු වර්ගයකි.', 'errNotUTF8Content' : '"$1" ගොනුව UTF-8 à·„à·’ නොමà·�à¶­à·’ à¶…à¶­à¶» සංස්කරණය à¶šà·… නොහà·�à¶š.', // added 9.11.2011 'errNetMount' : '"$1" සවි(mount) කිරීමට නොහà·�à¶š.', // added 17.04.2012 'errNetMountNoDriver' : 'à¶´à·Šâ€�රෙà·�ටොකà·�ලය(protocol) නොගà·�ලපේ.', // added 17.04.2012 'errNetMountFailed' : 'සවි කිරීම(mount කිරීම) à¶…à·ƒà·�ර්ථක විය.', // added 17.04.2012 'errNetMountHostReq' : 'à¶°à·�රකය(Host) à¶…à·€à·�à·Šâ€�ය වේ.', // added 18.04.2012 'errSessionExpires' : 'ඔබේ à¶…à¶šà·Šâ€�රියතà·�à·€ හේතුවෙන් à·ƒà·�සිය(session) කල් ඉකුත් වී ඇත.', 'errCreatingTempDir' : 'à¶­à·�වකà·�ලික ඩිරෙක්ටරයක්(directory) ​​සෑදිය නොහà·�à¶š: "$1"', 'errFtpDownloadFile' : 'FTP වලින් ගොනුව à¶¶à·�ගත(download) කිරීමට නොහà·�à¶šà·’ විය: "$1"', 'errFtpUploadFile' : 'ගොනුව FTP වෙත උඩුගත(upload) කිරීමට නොහà·�à¶šà·’ විය: "$1"', 'errFtpMkdir' : 'FTP මත දුරස්ථ à¶±à·�මà·�වලියක්(remote directory) නිර්මà·�ණය කිරීමට නොහà·�à¶šà·’ විය: "$1"', 'errArchiveExec' : 'ගොනු සංරක්ෂණය(archiving) කිරීමේදී දà·�ෂයක් ඇතිවිය: "$1"', 'errExtractExec' : 'ගොනු දිගහà·�රීමේදී(extracting) දà·�ෂයක් ඇතිවිය: "$1"', 'errNetUnMount' : 'විසන්ධි කිරීමට(unmount) නොහà·�à¶š.', // from v2.1 added 30.04.2012 'errConvUTF8' : 'UTF-8 වෙත පරිවර්තනය à¶šà·… නොහà·�à¶š.', // from v2.1 added 08.04.2014 'errFolderUpload' : 'ඔබ à·†à·�ල්ඩරය උඩුගත(upload) කිරීමට à¶šà·�මති නම් නවීන à¶¶à·Šâ€�රවුසරයකින් à¶‹à¶­à·Šà·ƒà·�à·„ කරන්න.', // from v2.1 added 26.6.2015 'errSearchTimeout' : '"$1" සෙවීම කල් ඉකුත්වී ඇත. සෙවුම් à¶´à·Šâ€�රතිඵල අර්ධ à·€à·�යෙන් දිස්වේ.', // from v2.1 added 12.1.2016 'errReauthRequire' : 'à¶±à·�වත බලය(Re-authorization) ලබà·� දීම à¶…à·€à·�à·Šâ€�ය වේ.', // from v2.1.10 added 24.3.2016 'errMaxTargets' : 'à¶­à·�à¶»à·� ගත à·„à·�à¶šà·’ උපරිම අයිතම සංඛ්â€�යà·�à·€ $1 à¶šà·Š වේ.', // from v2.1.17 added 17.10.2016 'errRestore' : 'කුණු කූඩයෙන් à¶±à·�වත ලබà·� ගත නොහà·�à¶š. යළි පිහිටුවීමේ ගමනà·�න්තය(restore destination) හඳුනà·�ගත නොහà·�à¶š.', // from v2.1.24 added 3.5.2017 'errEditorNotFound' : 'මෙම ගොනු වර්ගයේ සංස්කà·�රකය හමු නොවිණි.', // from v2.1.25 added 23.5.2017 'errServerError' : 'සේවà·�දà·�යකයේ à¶´à·�ත්තෙන්(server side) දà·�à·�යක් ඇතිවිය.', // from v2.1.25 added 16.6.2017 'errEmpty' : '"$1" à·†à·�ල්ඩරය හිස් කිරීමට නොහà·�à¶š.', // from v2.1.25 added 22.6.2017 /******************************* commands names ********************************/ 'cmdarchive' : 'සංරක්ෂිතය(archive) නිර්මà·�ණය කරන්න', 'cmdback' : 'ආපසු', 'cmdcopy' : 'à¶´à·’à¶§à¶´à¶­à·Š කරන්න', 'cmdcut' : 'මුළුමනින්ම à¶´à·’à¶§à¶´à¶­à·Š කරන්න(Cut)', 'cmddownload' : 'à¶¶à·�ගත කරන්න(Download)', 'cmdduplicate' : 'අනුපිටපත් කරන්න(Duplicate)', 'cmdedit' : 'ගොනුව සංස්කරණය කරන්න', 'cmdextract' : 'සංරක්ෂිතයේ ගොනු දිගහරින්න(Extract)', 'cmdforward' : 'ඉදිරියට', 'cmdgetfile' : 'ගොනු à¶­à·�රන්න', 'cmdhelp' : 'මෙම මෘදුකà·�ංගය පිළිබඳව', 'cmdhome' : 'නිවහන(Home)', 'cmdinfo' : 'තොරතුරු ලබà·�ගන්න', 'cmdmkdir' : 'අළුත් à·†à·�ල්ඩරයක්', 'cmdmkdirin' : 'අළුත් à·†à·�ල්ඩරයක් තුළට', // from v2.1.7 added 19.2.2016 'cmdmkfile' : 'නව ගොනුවක්', 'cmdopen' : 'විවෘත කරන්න', 'cmdpaste' : 'දමන්න(Paste)', 'cmdquicklook' : 'පූර්ව දර්à·�නයක්(Preview)', 'cmdreload' : 'à¶±à·�වත අළුත් කරන්න(Reload)', 'cmdrename' : 'නම වෙනස් කරන්න', 'cmdrm' : 'මකන්න', 'cmdtrash' : 'කුණු කූඩයට දමන්න', //from v2.1.24 added 29.4.2017 'cmdrestore' : 'යළි පිහිටුවන්න(Restore)', //from v2.1.24 added 3.5.2017 'cmdsearch' : 'ගොනු සොයන්න', 'cmdup' : 'à¶´à·Šâ€�ර්â€�රධà·�à¶± à¶±à·�මà·�වලිය(parent directory) වෙත යන්න', 'cmdupload' : 'ගොනු උඩුගත(Upload) කරන්න', 'cmdview' : 'දර්à·�නය(View)', 'cmdresize' : 'à¶´à·Šâ€�රථිප්â€�රමà·�ණය සහ à¶·à·Šâ€�රමණය', 'cmdsort' : 'වර්ගීකරණය කරන්න', 'cmdnetmount' : 'à¶¢à·�à¶½ එ්කකයක් සවි කරන්න(Mount network volume)', // added 18.04.2012 'cmdnetunmount': 'ගලවන්න(Unmount)', // from v2.1 added 30.04.2012 'cmdplaces' : 'පහසු ස්ථà·�නයට(To Places)', // added 28.12.2014 'cmdchmod' : 'à¶šà·Šâ€�රමය වෙනස් කරන්න', // from v2.1 added 20.6.2015 'cmdopendir' : 'à·†à·�ල්ඩරය විවෘත කරන්න', // from v2.1 added 13.1.2016 'cmdcolwidth' : 'à¶±à·�වත තීරු à¶´à·…à¶½ පිහිටුවන්න', // from v2.1.13 added 12.06.2016 'cmdfullscreen': 'පුළුල් තිරය', // from v2.1.15 added 03.08.2016 'cmdmove' : 'මà·�රු කරන්න(Move)', // from v2.1.15 added 21.08.2016 'cmdempty' : 'à·†à·�ල්ඩරය හිස් කරන්න', // from v2.1.25 added 22.06.2017 'cmdundo' : 'නිෂ්ප්â€�රභ කරන්න', // from v2.1.27 added 31.07.2017 'cmdredo' : 'à¶±à·�වත කරන්න', // from v2.1.27 added 31.07.2017 'cmdpreference': 'අභිමතයන් (Preferences)', // from v2.1.27 added 03.08.2017 'cmdselectall' : 'සියල්ල à¶­à·�රන්න', // from v2.1.28 added 15.08.2017 'cmdselectnone': 'කිසිවක් à¶­à·�රන්න à¶‘à¶´à·�', // from v2.1.28 added 15.08.2017 'cmdselectinvert': 'විරුද්ධ à¶…à·�à¶šà·�රයට à¶­à·�රන්න', // from v2.1.28 added 15.08.2017 /*********************************** buttons ***********************************/ 'btnClose' : 'වසන්න', 'btnSave' : 'සුරකින්න', 'btnRm' : 'ඉවත් කරන්න', 'btnApply' : 'යෙà·�දන්න(Apply)', 'btnCancel' : 'අවලංගු කරන්න', 'btnNo' : 'à¶±à·�à¶­', 'btnYes' : 'ඔව්', 'btnDiscard': 'Discard changes', 'btnMount' : 'සවිකිරීම(Mount)', // added 18.04.2012 'btnApprove': 'කරුණà·�à¶šà¶» $1 අනුමත කරන්න', // from v2.1 added 26.04.2012 'btnUnmount': 'ගලවන්න(Unmount)', // from v2.1 added 30.04.2012 'btnConv' : 'පරිවර්තනය කරන්න', // from v2.1 added 08.04.2014 'btnCwd' : 'මෙතන', // from v2.1 added 22.5.2015 'btnVolume' : 'එ්කකය(Volume)', // from v2.1 added 22.5.2015 'btnAll' : 'සියල්ල', // from v2.1 added 22.5.2015 'btnMime' : 'MIME වර්ගය', // from v2.1 added 22.5.2015 'btnFileName':'ගොනුවේ නම', // from v2.1 added 22.5.2015 'btnSaveClose': 'සුරකින්න සහ වසන්න', // from v2.1 added 12.6.2015 'btnBackup' : 'උපස්ථ(Backup) කරන්න', // fromv2.1 added 28.11.2015 'btnRename' : 'නම වෙනස් කරන්න', // from v2.1.24 added 6.4.2017 'btnRenameAll' : 'නම වෙනස් කරන්න(සියල්ල)', // from v2.1.24 added 6.4.2017 'btnPrevious' : 'පෙර ($1/$2)', // from v2.1.24 added 11.5.2017 'btnNext' : 'à¶Šà·…à¶Ÿ ($1/$2)', // from v2.1.24 added 11.5.2017 'btnSaveAs' : 'වෙනත් නමකින් සුරකිමින්(Save As)', // from v2.1.25 added 24.5.2017 /******************************** notifications ********************************/ 'ntfopen' : 'à·†à·�ල්ඩරය විවෘත කරමින්', 'ntffile' : 'ගොනුව විවෘත කරමින්', 'ntfreload' : 'à·†à·�ල්ඩර් අන්තර්ගතය à¶±à·�වත අළුත් කරමින්(Reloading)', 'ntfmkdir' : 'à·†à·�ල්ඩරයක් නිර්මà·�ණය කරමින්', 'ntfmkfile' : 'ගොනුව නිර්මà·�ණය කරමින්', 'ntfrm' : 'අයිතමයන් මකමින්', 'ntfcopy' : 'අයිතමයන් à¶´à·’à¶§à¶´à¶­à·Š කරමින්', 'ntfmove' : 'අයිතමයන් සම්පූර්ණයෙන් විස්ථà·�පනය කරමින්', 'ntfprepare' : 'පවතින අයිතම පිරික්සමින්', 'ntfrename' : 'ගොනු à¶±à·�වත නම් කරමින්', 'ntfupload' : 'ගොනු උඩුගත(uploading) කරමින්', 'ntfdownload' : 'ගොනු à¶¶à·�ගත(downloading) කරමින්', 'ntfsave' : 'ගොනු සුරකිමින්', 'ntfarchive' : 'සංරක්ෂණය(archive) à·ƒà·�දමින්', 'ntfextract' : 'සංරක්ෂණයෙන්(archive) ගොනු දිගහරිමින්(Extracting)', 'ntfsearch' : 'ගොනු සෙà·�යමින්', 'ntfresize' : 'රූප à¶´à·Šâ€�රමà·�ණය වෙනස් කරමින්', 'ntfsmth' : 'දෙයක් කරමින්', 'ntfloadimg' : 'පින්තූරය පූරණය කරමින්(Loading)', 'ntfnetmount' : 'à¶¢à·�à¶½ එ්කකයක් සවිකරමින්(Mounting network volume)', // added 18.04.2012 'ntfnetunmount': 'à¶¢à·�à¶½ එ්කකයක් ගලවමින්(Unmounting network volume)', // from v2.1 added 30.04.2012 'ntfdim' : 'පිංතූරයේ මà·�නය(dimension) ලබà·�ගනිමින්', // added 20.05.2013 'ntfreaddir' : 'à·†à·�ල්ඩරයේ තොරතුරු කියවමින්', // from v2.1 added 01.07.2013 'ntfurl' : 'Getting URL of link', // from v2.1 added 11.03.2014 'ntfchmod' : 'ගොනු ආකරය වෙනස් කරමින්', // from v2.1 added 20.6.2015 'ntfpreupload': 'උඩුගත(upload) කරන ලද ගොනු à¶±à·�මය සත්â€�යà·�පනය කරමින්(Verifying)', // from v2.1 added 31.11.2015 'ntfzipdl' : 'à¶¶à·�ගත කරගà·�නීම(download) සඳහà·� ගොනුවක් නිර්මà·�ණය කරමින්', // from v2.1.7 added 23.1.2016 'ntfparents' : 'මà·�ර්ග(path) තොරතුරු ලබà·� ගනිමින්', // from v2.1.17 added 2.11.2016 'ntfchunkmerge': 'උඩුගත කරන ලද(uploaded) ගොනුව සකසමින්', // from v2.1.17 added 2.11.2016 'ntftrash' : 'කුණු කූඩයට දමමින්', // from v2.1.24 added 2.5.2017 'ntfrestore' : 'කුණු කූඩයට දà·�මීම යළි පිහිටුවමින්(Doing restore)', // from v2.1.24 added 3.5.2017 'ntfchkdir' : 'ගමනà·�න්ත(destination) à·†à·�ල්ඩරය පරීක්ෂà·� කරමින්', // from v2.1.24 added 3.5.2017 'ntfundo' : 'පෙර මෙහෙයුම(operation) ඉවත් කරමින්', // from v2.1.27 added 31.07.2017 'ntfredo' : 'පෙර ආපසු à·„à·�රවීම යළි à·ƒà·�කසමින්', // from v2.1.27 added 31.07.2017 /*********************************** volumes *********************************/ 'volume_Trash' : 'කුණු කූඩය', //from v2.1.24 added 29.4.2017 /************************************ dates **********************************/ 'dateUnknown' : 'නෙà·�දනී', 'Today' : 'අද', 'Yesterday' : 'ඊයේ', 'msJan' : 'ජනවà·�.', 'msFeb' : 'පෙබ.', 'msMar' : 'මà·�ර්.', 'msApr' : 'à¶…à¶´à·Šâ€�රේ.', 'msMay' : 'මà·�යි', 'msJun' : 'ජූනි', 'msJul' : 'ජුලි', 'msAug' : 'à¶…à¶œà·�.', 'msSep' : 'à·ƒà·�à¶´à·Š.', 'msOct' : 'ඔක්තà·�.', 'msNov' : 'නොවà·�.', 'msDec' : 'දෙසà·�.', 'January' : 'ජනවà·�රි', 'February' : 'පෙබරවà·�රි', 'March' : 'මà·�ර්තු', 'April' : 'à¶…à¶´à·Šâ€�රේල්', 'May' : 'මà·�යි', 'June' : 'ජූනි', 'July' : 'ජුලි', 'August' : 'à¶…à¶œà·�ස්තු', 'September' : 'à·ƒà·�à¶´à·Šà¶­à·�ම්බර්', 'October' : 'ඔක්තà·�ම්බර්', 'November' : 'නොවà·�ම්බර්', 'December' : 'දෙසà·�ම්බර්', 'Sunday' : 'ඉරිදà·�', 'Monday' : 'සඳුදà·�', 'Tuesday' : 'අඟහරුවà·�දà·�', 'Wednesday' : 'බදà·�දà·�', 'Thursday' : 'à¶¶à·Šâ€�රහස්පතින්දà·�', 'Friday' : 'සිකුරà·�දà·�', 'Saturday' : 'සෙනසුරà·�දà·�', 'Sun' : 'ඉරිදà·�', 'Mon' : 'සඳු.', 'Tue' : 'à¶…à¶Ÿà·„.', 'Wed' : 'බදà·�දà·�', 'Thu' : 'à¶¶à·Šâ€�රහස්.', 'Fri' : 'සිකු.', 'Sat' : 'සෙන.', /******************************** sort variants ********************************/ 'sortname' : 'නම අනුව', 'sortkind' : 'වර්ගය අනුව', 'sortsize' : 'à¶´à·Šâ€�රමà·�ණය අනුව', 'sortdate' : 'දිනය අනුව', 'sortFoldersFirst' : 'à·†à·�ල්ඩර වලට පළමු à¶­à·�à¶±', 'sortperm' : 'අවසරය අනුව', // from v2.1.13 added 13.06.2016 'sortmode' : 'à¶…à·�à¶šà·�රය අනුව', // from v2.1.13 added 13.06.2016 'sortowner' : 'හිමිකරු අනුව', // from v2.1.13 added 13.06.2016 'sortgroup' : 'à¶šà¶«à·Šà¶©à·�යම අනුව', // from v2.1.13 added 13.06.2016 'sortAlsoTreeview' : 'එලෙසටම රුක්සටහනත්(Treeview)', // from v2.1.15 added 01.08.2016 /********************************** new items **********************************/ 'untitled file.txt' : 'NewFile.txt', // added 10.11.2015 'untitled folder' : 'නව ෆෙà·�්ල්ඩරයක්', // added 10.11.2015 'Archive' : 'NewArchive', // from v2.1 added 10.11.2015 /********************************** messages **********************************/ 'confirmReq' : 'තහවුරු කිරීම à¶…à·€à·�à·Šâ€�යයි', 'confirmRm' : 'අයිතමයන් සදහටම ඉවත් කිරීමට à¶…à·€à·�à·Šâ€�ය à¶¶à·€ ඔබට විà·�à·Šà·€à·�සද?
          මෙය අ�පසු හ�රවිය නොහ�කිය!', 'confirmRepl' : 'ප�රණි අයිතමය නව එකක මගින් ප්�රතිස්ථ�පනය කරන්නද?', 'confirmRest' : 'ද�නට පවතින අයිතමය කුණු කූඩය තුළ පවතින අයිතමය මගින් ප්�රතිස්ථ�පනය කරන්නද?', // fromv2.1.24 added 5.5.2017 'confirmConvUTF8' : 'UTF-8 හි නොවේ
          UTF-8 වෙත පරිවර්තනය කරන්න ද?
          සුර�කීමෙන් පසු අන්තර්ගතය UTF-8 බවට පරිවර්තනය වේ.', // from v2.1 added 08.04.2014 'confirmNonUTF8' : 'මෙම ගොනුවෙහි කේතන කේත(Character encoding) හඳුන�ගත නොහ�කි විය. සංස්කරණ කිරීමට එය ත�වක�ලිකව UTF-8 වෙත පරිවර්තනය කිරීම අව�්�ය වේ.
          කරුණ�කර මෙම ගොනුවෙහි අක්ෂර කේතන කේත(character encoding) ත�රන්න.', // from v2.1.19 added 28.11.2016 'confirmNotSave' : 'මෙය වෙනස් කර ඇත.
          ඔබට වෙනස්කම් සුර�කීමට නොහ�කි නම් සිදු කරනු ල�බූ වෙනස්කම් අහිමි වේ.', // from v2.1 added 15.7.2015 'confirmTrash' : 'කුණු කූඩය තුලට අයිතමය ය�වීමට ඔබට අව�්�ය ද?', //from v2.1.24 added 29.4.2017 'apllyAll' : 'සියල්ලටම යොදන්න', 'name' : 'නම', 'size' : 'ප්�රම�ණය', 'perms' : 'අවසරය', 'modify' : 'නවීකරණය කෙරුණ ලද්දේ', 'kind' : 'ජ�තිය', 'read' : 'කියවන්න', 'write' : 'ලියන්න', 'noaccess' : 'ප්�රවේ�යක් නොම�ත', 'and' : 'සහ', 'unknown' : 'නෙ�හඳුනයි', 'selectall' : 'සියලු ගොනු ත�රන්න', 'selectfiles' : 'ගොනු(ව) ත�රන්න', 'selectffile' : 'පළමු ගොනුව ත�රන්න', 'selectlfile' : 'අවස�න ගොනුව ත�රන්න', 'viewlist' : 'ල�යිස්තු අ�ක�රය', 'viewicons' : 'අයිකන අ�ක�රය', 'places' : 'Places', 'calc' : 'ගණනය කරන්න', 'path' : 'ම�ර්ගය', 'aliasfor' : 'Alias for', 'locked' : 'අගුළු දම� ඇත', 'dim' : 'ම�න(Dimensions)', 'files' : 'ගොනු', 'folders' : 'ෆ�ල්ඩර', 'items' : 'අයිතම(Items)', 'yes' : 'ඔව්', 'no' : 'න�ත', 'link' : 'සබ�ඳිය(Link)', 'searcresult' : 'සෙවුම් ප්�රතිඵල', 'selected' : 'ත�ර�ගත් අයිතම', 'about' : 'මේ ග�න', 'shortcuts' : 'කෙටිමං', 'help' : 'උදව්', 'webfm' : 'වෙබ් ගොනු කළමන�කරු', 'ver' : 'අනුව�දය(version)', 'protocolver' : 'ප්�රෙ�ටොක�ලය අනුව�දය(protocol version)', 'homepage' : 'ව්�ය�පෘතිය නිවහන', 'docs' : 'ලේඛනගත කිරීම', 'github' : 'Github හරහ� සංව�දයේ යෙදෙන්න', 'twitter' : 'Twitter හරහ� අපව සම්බන්ධ වන්න', 'facebook' : 'Facebook හරහ� අප සමඟ එකතු වන්න', 'team' : 'කණ්ඩ�යම', 'chiefdev' : 'ප්�රධ�න සංස්කරු(chief developer)', 'developer' : 'සංස්කරු(developer)', 'contributor' : 'ද�යකය�(contributor)', 'maintainer' : 'නඩත්තු කරන්න�(maintainer)', 'translator' : 'පරිවර්තකය�', 'icons' : 'අයිකන', 'dontforget' : 'and don\'t forget to take your towel', 'shortcutsof' : 'කෙටිමං අක්�රීය කර ඇත', 'dropFiles' : 'ගොනු මෙත�නට ඇද දමන්න', 'or' : 'හෙ�්', 'selectForUpload' : 'ගොනු ත�රන්න', 'moveFiles' : 'අ�යිත්තම සම්පූර්ණයෙන් විස්ථ�පනය', 'copyFiles' : 'අයිතමයන් පිටපත් කරන්න', 'restoreFiles' : 'Restore items', // from v2.1.24 added 5.5.2017 'rmFromPlaces' : 'Remove from places', 'aspectRatio' : 'දර්�න අනුප�තය(Aspect ratio)', 'scale' : 'පරිම�ණය', 'width' : 'පළල', 'height' : 'උස', 'resize' : 'ප්�රතිප්�රම�නණය', 'crop' : 'Crop', 'rotate' : 'ක�රක�වීම', 'rotate-cw' : 'අං�ක 90කින් කරකවන්න CW', 'rotate-ccw' : 'අං�ක 90කින් කරකවන්න CCW', 'degree' : '°', 'netMountDialogTitle' : 'Mount network volume', // added 18.04.2012 'protocol' : 'Protocol', // added 18.04.2012 'host' : 'Host', // added 18.04.2012 'port' : 'Port', // added 18.04.2012 'user' : 'පරි�ීලක', // added 18.04.2012 'pass' : 'මුරපදය', // added 18.04.2012 'confirmUnmount' : 'Are you unmount $1?', // from v2.1 added 30.04.2012 'dropFilesBrowser': 'Drop or Paste files from browser', // from v2.1 added 30.05.2012 'dropPasteFiles' : 'Drop files, Paste URLs or images(clipboard) here', // from v2.1 added 07.04.2014 'encoding' : 'කේතීකරණය(Encoding)', // from v2.1 added 19.12.2014 'locale' : 'Locale', // from v2.1 added 19.12.2014 'searchTarget' : 'ඉලක්කය: $1', // from v2.1 added 22.5.2015 'searchMime' : 'Search by input MIME Type', // from v2.1 added 22.5.2015 'owner' : 'හිමිකරු', // from v2.1 added 20.6.2015 'group' : 'සමූහය', // from v2.1 added 20.6.2015 'other' : 'වෙනත්', // from v2.1 added 20.6.2015 'execute' : 'ක්�රය�ත්මක කරන්න', // from v2.1 added 20.6.2015 'perm' : 'අවසරය', // from v2.1 added 20.6.2015 'mode' : 'Mode', // from v2.1 added 20.6.2015 'emptyFolder' : 'ෆ�ල්ඩරය හිස්', // from v2.1.6 added 30.12.2015 'emptyFolderDrop' : 'ෆ�ේල්ඩරය හිස්\\A අ�යිත්තම අතහ�රීමෙන් අ�තුලු කරන්න', // from v2.1.6 added 30.12.2015 'emptyFolderLTap' : 'ෆ�ේල්ඩරය හිස්\\A දිර්� එබීමෙන් අ�යිත්තම අ�තුලු කරන්න', // from v2.1.6 added 30.12.2015 'quality' : 'ගුණ�ත්මකභ�වය', // from v2.1.6 added 5.1.2016 'autoSync' : 'Auto sync', // from v2.1.6 added 10.1.2016 'moveUp' : 'Move up', // from v2.1.6 added 18.1.2016 'getLink' : 'Get URL link', // from v2.1.7 added 9.2.2016 'selectedItems' : 'ත�ර�ගත් අයිතම ($1)', // from v2.1.7 added 2.19.2016 'folderId' : 'Folder ID', // from v2.1.10 added 3.25.2016 'offlineAccess' : 'Allow offline access', // from v2.1.10 added 3.25.2016 'reAuth' : 'To re-authenticate', // from v2.1.10 added 3.25.2016 'nowLoading' : 'Now loading...', // from v2.1.12 added 4.26.2016 'openMulti' : 'බහු ගොනු විවෘත කරන්න', // from v2.1.12 added 5.14.2016 'openMultiConfirm': 'ඔබ $1 ගොනු විවෘත කිරීමට උත්ස�හ කරයි. බ්�රව්සරයෙන් ඔබට විවෘත කිරීමට අව�්�ය බව ඔබට වි�්ව�සද?', // from v2.1.12 added 5.14.2016 'emptySearch' : 'සෙවුම් ඉලක්කයේ ගවේෂණ ප්�රතිඵල නෙ�ම�ත.', // from v2.1.12 added 5.16.2016 'editingFile' : 'එය ගොනුව සංස්කරණය කිරීමකි.', // from v2.1.13 added 6.3.2016 'hasSelected' : 'ඔබ අයිතම $1 ප්�රම�ණයක් ත�ර�ගෙන ඇත.', // from v2.1.13 added 6.3.2016 'hasClipboard' : 'You have $1 items in the clipboard.', // from v2.1.13 added 6.3.2016 'incSearchOnly' : 'Incremental search is only from the current view.', // from v2.1.13 added 6.30.2016 'reinstate' : 'යථ� තත්ත්වයට පත් කරන්න', // from v2.1.15 added 3.8.2016 'complete' : '$1 සම්පූර්ණයි', // from v2.1.15 added 21.8.2016 'contextmenu' : 'Context menu', // from v2.1.15 added 9.9.2016 'pageTurning' : 'Page turning', // from v2.1.15 added 10.9.2016 'volumeRoots' : 'Volume roots', // from v2.1.16 added 16.9.2016 'reset' : 'යළි පිහිටුවන්න(Reset)', // from v2.1.16 added 1.10.2016 'bgcolor' : 'පසුබිම් වර්ණය', // from v2.1.16 added 1.10.2016 'colorPicker' : 'Color picker', // from v2.1.16 added 1.10.2016 '8pxgrid' : 'පික්සල් 8ක ද�ල', // from v2.1.16 added 4.10.2016 'enabled' : 'සක්�රීයයි', // from v2.1.16 added 4.10.2016 'disabled' : 'අක්�රීයයි', // from v2.1.16 added 4.10.2016 'emptyIncSearch' : 'වර්තම�න දර්�නය තුළ සෙවුම් ප්�රතිපල හිස්ව ඇත. \\A සෙවුම් ඉලක්කය පුළුල් කිරීම සඳහ� [Enter] යතුර ඔබන්න.', // from v2.1.16 added 5.10.2016 'emptyLetSearch' : 'වර්තම�න දර්�නයේ පළමු අකුර සෙවුම් ප්�රතිපල හිස්ව පවතී.', // from v2.1.23 added 24.3.2017 'textLabel' : 'ලේබල්වල නම්', // from v2.1.17 added 13.10.2016 'minsLeft' : 'වින�ඩි $1 ක් ගතවේ', // from v2.1.17 added 13.11.2016 'openAsEncoding' : 'Reopen with selected encoding', // from v2.1.19 added 2.12.2016 'saveAsEncoding' : 'Save with the selected encoding', // from v2.1.19 added 2.12.2016 'selectFolder' : 'ෆ�ල්ඩරය ත�රන්න', // from v2.1.20 added 13.12.2016 'firstLetterSearch': 'පළමු අකුරෙන් සෙවීම', // from v2.1.23 added 24.3.2017 'presets' : 'Presets', // from v2.1.25 added 26.5.2017 'tooManyToTrash' : 'It\'s too many items so it can\'t into trash.', // from v2.1.25 added 9.6.2017 'TextArea' : 'TextArea', // from v2.1.25 added 14.6.2017 'folderToEmpty' : 'Empty the folder "$1".', // from v2.1.25 added 22.6.2017 'filderIsEmpty' : 'There are no items in a folder "$1".', // from v2.1.25 added 22.6.2017 'preference' : 'Preference', // from v2.1.26 added 28.6.2017 'language' : 'Language setting', // from v2.1.26 added 28.6.2017 'clearBrowserData': 'Initialize the settings saved in this browser', // from v2.1.26 added 28.6.2017 'toolbarPref' : 'Toolbar setting', // from v2.1.27 added 2.8.2017 'charsLeft' : '... $1 ක් අකුරු ඉතිරිව පවතී', // from v2.1.29 added 30.8.2017 'sum' : 'එකතුව', // from v2.1.29 added 28.9.2017 'roughFileSize' : 'Rough file size', // from v2.1.30 added 2.11.2017 'autoFocusDialog' : 'Focus on the element of dialog with mouseover', // from v2.1.30 added 2.11.2017 'select' : 'ත�රන්න', // from v2.1.30 added 23.11.2017 'selectAction' : 'ගොනුවක් තේරූ විට සිදුකල යුතු දේ', // from v2.1.30 added 23.11.2017 'useStoredEditor' : 'Open with the editor used last time', // from v2.1.30 added 23.11.2017 'selectinvert' : 'ප්�රතිවිරුද්ධ අ�ක�රයට ත�රන්න', // from v2.1.30 added 25.11.2017 'renameMultiple' : 'Are you sure you want to rename $1 selected items like $2?
          This cannot be undone!', // from v2.1.31 added 4.12.2017 'batchRename' : 'Batch rename', // from v2.1.31 added 8.12.2017 'plusNumber' : '+ Number', // from v2.1.31 added 8.12.2017 'asPrefix' : 'Add prefix', // from v2.1.31 added 8.12.2017 'asSuffix' : 'Add suffix', // from v2.1.31 added 8.12.2017 'changeExtention' : 'Change extention', // from v2.1.31 added 8.12.2017 'columnPref' : 'Columns settings (List view)', // from v2.1.32 added 6.2.2018 'reflectOnImmediate' : 'All changes will reflect immediately to the archive.', // from v2.1.33 added 2.3.2018 'reflectOnUnmount' : 'Any changes will not reflect until un-mount this volume.', // from v2.1.33 added 2.3.2018 'unmountChildren' : 'The following volume(s) mounted on this volume also unmounted. Are you sure to unmount it?', // from v2.1.33 added 5.3.2018 'selectionInfo' : 'à¶­à·�à¶»à·�à¶œà·�නීම්වල තොරතුරු', // from v2.1.33 added 7.3.2018 'hashChecker' : 'Algorithms to show the file hash', // from v2.1.33 added 10.3.2018 /********************************** mimetypes **********************************/ 'kindUnknown' : 'නොදන්නà·�', 'kindRoot' : 'Volume Root', // from v2.1.16 added 16.10.2016 'kindFolder' : 'à·†à·�ල්ඩරය', 'kindSelects' : 'තේරීම්', // from v2.1.29 added 29.8.2017 'kindAlias' : 'Alias', 'kindAliasBroken' : 'Broken alias', // applications 'kindApp' : 'Application', 'kindPostscript' : 'Postscript ලේඛනය', 'kindMsOffice' : 'Microsoft Office ලේඛනය', 'kindMsWord' : 'Microsoft Word ලේඛනය', 'kindMsExcel' : 'Microsoft Excel ලේඛනය', 'kindMsPP' : 'Microsoft Powerpoint presentation', 'kindOO' : 'Open Office ලේඛනය', 'kindAppFlash' : 'Flash application', 'kindPDF' : 'Portable Document Format (PDF)', 'kindTorrent' : 'Bittorrent file', 'kind7z' : '7z archive', 'kindTAR' : 'TAR archive', 'kindGZIP' : 'GZIP archive', 'kindBZIP' : 'BZIP archive', 'kindXZ' : 'XZ archive', 'kindZIP' : 'ZIP archive', 'kindRAR' : 'RAR archive', 'kindJAR' : 'Java JAR file', 'kindTTF' : 'True Type font', 'kindOTF' : 'Open Type font', 'kindRPM' : 'RPM package', // fonts 'kindFont' : 'Font', 'kindSFNT' : 'SFNT font', 'kindEOT' : 'Embedded Open Type font', 'kindWOFF' : 'Web Open Font Format', 'kindWOFF2' : 'Web Open Font Format 2', // texts 'kindText' : 'Text ලේඛනය', 'kindTextPlain' : 'Plain text', 'kindPHP' : 'PHP මූලà·�à·�à·Šâ€�රය', 'kindCSS' : 'Cascading style sheet', 'kindHTML' : 'HTML ලේඛනය', 'kindJS' : 'Javascript මූලà·�à·�à·Šâ€�රය', 'kindRTF' : 'Rich Text Format', 'kindC' : 'C මූලà·�à·�à·Šâ€�රය', 'kindCHeader' : 'C header මූලà·�à·�à·Šâ€�රය', 'kindCPP' : 'C++ මූලà·�à·�à·Šâ€�රය', 'kindCPPHeader' : 'C++ header මූලà·�à·�à·Šâ€�රය', 'kindShell' : 'Unix shell රචනයකි', 'kindPython' : 'Python මූලà·�à·�à·Šâ€�රය', 'kindJava' : 'Java මූලà·�à·�à·Šâ€�රය', 'kindRuby' : 'Ruby මූලà·�à·�à·Šâ€�රය', 'kindPerl' : 'Perl රචනයකි', 'kindSQL' : 'SQL මූලà·�à·�à·Šâ€�රය', 'kindXML' : 'XML ලේඛනය', 'kindAWK' : 'AWK මූලà·�à·�à·Šâ€�රය', 'kindCSV' : 'කොමà·�වන් වෙන් à¶šà·… අගයන්', 'kindDOCBOOK' : 'Docbook XML ලේඛනය', 'kindMarkdown' : 'Markdown text', // added 20.7.2015 // images 'kindImage' : 'පින්තූරය', 'kindBMP' : 'BMP පින්තූරය', 'kindJPEG' : 'JPEG පින්තූරය', 'kindGIF' : 'GIF පින්තූරය', 'kindPNG' : 'PNG පින්තූරය', 'kindTIFF' : 'TIFF පින්තූරය', 'kindTGA' : 'TGA පින්තූරය', 'kindPSD' : 'Adobe Photoshop පින්තූරය', 'kindXBITMAP' : 'X bitmap පින්තූරය', 'kindPXM' : 'Pixelmator පින්තූරය', // media 'kindAudio' : 'à·�à¶¶à·Šà¶° මà·�à¶°à·Šâ€�ය', 'kindAudioMPEG' : 'MPEG à·�බ්ධපටය', 'kindAudioMPEG4' : 'MPEG-4 à·�බ්ධපටය', 'kindAudioMIDI' : 'MIDI à·�බ්ධපටය', 'kindAudioOGG' : 'Ogg Vorbis à·�බ්ධපටය', 'kindAudioWAV' : 'WAV à·�බ්ධපටය', 'AudioPlaylist' : 'MP3 playlist', 'kindVideo' : 'Video මà·�à¶°à·Šâ€�ය', 'kindVideoDV' : 'DV à¶ à·’à¶­à·Šâ€�රපටය', 'kindVideoMPEG' : 'MPEG à¶ à·’à¶­à·Šâ€�රපටය', 'kindVideoMPEG4' : 'MPEG-4 à¶ à·’à¶­à·Šâ€�රපටය', 'kindVideoAVI' : 'AVI à¶ à·’à¶­à·Šâ€�රපටය', 'kindVideoMOV' : 'Quick Time à¶ à·’à¶­à·Šâ€�රපටය', 'kindVideoWM' : 'Windows Media à¶ à·’à¶­à·Šâ€�රපටය', 'kindVideoFlash' : 'Flash à¶ à·’à¶­à·Šâ€�රපටය', 'kindVideoMKV' : 'Matroska à¶ à·’à¶­à·Šâ€�රපටය', 'kindVideoOGG' : 'Ogg à¶ à·’à¶­à·Šâ€�රපටය' } }; })); PK!§é #K#K@file-manager-advanced/application/library/js/i18n/elfinder.he.jsnu„[µü¤/** * עברית translation * @author Yaron Shahrabani * @version 2015-11-02 */ (function(root, factory) { if (typeof define === 'function' && define.amd) { define(['elfinder'], factory); } else if (typeof exports !== 'undefined') { module.exports = factory(require('elfinder')); } else { factory(root.elFinder); } }(this, function(elFinder) { elFinder.prototype.i18.he = { translator : 'Yaron Shahrabani ', language : 'עברית', direction : 'rtl', dateFormat : 'd.m.Y H:i', // Mar 13, 2012 05:27 PM fancyDateFormat : '$1 H:i', // will produce smth like: Today 12:25 PM messages : { /********************************** errors **********************************/ 'error' : 'שגי×�×”', 'errUnknown' : 'שגי×�×” בלתי מוכרת.', 'errUnknownCmd' : 'פקודה בלתי מוכרת.', 'errJqui' : 'תצורת ×”Ö¾jQuery UI שגויה. יש לכלול רכיבי×� הניתני×� לבחירה, גרירה והשלכה.', 'errNode' : 'elFinder דורש יצירה של רכיב DOM.', 'errURL' : 'התצורה של elFinder שגויה! ×�פשרות הכתובת (URL) ל×� הוגדרה.', 'errAccess' : 'הגישה נדחית.', 'errConnect' : 'ל×� ניתן להתחבר למנגנון.', 'errAbort' : 'החיבור בוטל.', 'errTimeout' : 'זמן החיבור פג.', 'errNotFound' : 'ל×� נמצ×� מנגנון.', 'errResponse' : 'תגובת המנגנון שגויה.', 'errConf' : 'תצורת המנגנון שגויה.', 'errJSON' : 'המודול PHP JSON ל×� מותקן.', 'errNoVolumes' : '×�ין כונני×� זמיני×� לקרי×�×”.', 'errCmdParams' : 'פרמטרי×� שגויי×� לפקודה „$1“.', 'errDataNotJSON' : 'הנתוני×� ×�×™× ×� JSON.', 'errDataEmpty' : 'הנתוני×� ריקי×�.', 'errCmdReq' : 'בקשה למנגנון דורשת ש×� פקודה.', 'errOpen' : 'ל×� ניתן לפתוח ×�ת „$1“.', 'errNotFolder' : 'הפריט ×�ינו תיקייה.', 'errNotFile' : 'הפריט ×�ינו קובץ.', 'errRead' : 'ל×� ניתן לקרו×� ×�ת „$1“.', 'errWrite' : 'ל×� ניתן לכתוב ×�ל „$1“.', 'errPerm' : 'ההרש×�×” נדחתה.', 'errLocked' : '„$1“ נעול ו×�ין ×�פשרות לשנות ×�ת שמו, להעבירו ×�ו להסירו.', 'errExists' : 'קובץ בש×� „$1“ כבר ×§×™×™×�.', 'errInvName' : 'ש×� הקובץ שגוי.', 'errFolderNotFound' : 'התיקייה ל×� נמצ×�×”.', 'errFileNotFound' : 'הקובץ ל×� נמצ×�.', 'errTrgFolderNotFound' : 'תיקיית היעד „$1“ ל×� נמצ×�×”.', 'errPopup' : 'הדפדפן מנע פתיחת חלון קובץ. כדי לפתוח קובץ יש ל×�פשר ×–×�ת בהגדרות הדפדפן.', 'errMkdir' : 'ל×� ניתן ליצור ×�ת התיקייה „$1“.', 'errMkfile' : 'ל×� ניתן ליצור ×�ת הקובץ „$1“.', 'errRename' : 'ל×� ניתן לשנות ×�ת הש×� של „$1“.', 'errCopyFrom' : 'העתקת קבצי×� מהכונן „$1“ ×�×™× ×” מ×�ופשרת.', 'errCopyTo' : 'העתקת קבצי×� ×�ל הכונן „$1“ ×�×™× ×” מ×�ופשרת.', 'errUpload' : 'שגי×�ת העל×�×”.', // old name - errUploadCommon 'errUploadFile' : 'ל×� ניתן להעלות ×�ת „$1“.', // old name - errUpload 'errUploadNoFiles' : 'ל×� נמצ×�ו קבצי×� להעל×�×”.', 'errUploadTotalSize' : 'הנתוני×� חורגי×� מהגודל המרבי המותר.', // old name - errMaxSize 'errUploadFileSize' : 'הקובץ חורג מהגודל המרבי המותר.', // old name - errFileMaxSize 'errUploadMime' : 'סוג הקובץ ×�ינו מורשה.', 'errUploadTransfer' : 'שגי×�ת העברה „$1“.', 'errNotReplace' : 'הפריט „$1“ כבר ×§×™×™×� במיקו×� ×–×” ו×�×™ ×�פשר להחליפו בפריט מסוג ×�חר.', // new 'errReplace' : 'ל×� ניתן להחליף ×�ת „$1“.', 'errSave' : 'ל×� ניתן לשמור ×�ת „$1“.', 'errCopy' : 'ל×� ניתן להעתיק ×�ת „$1“.', 'errMove' : 'ל×� ניתן להעביר ×�ת „$1“.', 'errCopyInItself' : 'ל×� ניתן להעתיק ×�ת „$1“ לתוך עצמו.', 'errRm' : 'ל×� ניתן להסיר ×�ת „$1“.', 'errRmSrc' : 'ל×� ניתן להסיר ×�ת קובצי המקור.', 'errExtract' : 'ל×� ניתן לחלץ קבצי×� מה×�רכיון „$1“.', 'errArchive' : 'ל×� ניתן ליצור ×�רכיון.', 'errArcType' : 'סוג ×”×�רכיון ×�ינו נתמך.', 'errNoArchive' : 'הקובץ ×�ינו ×�רכיון ×�ו שסוג הקובץ שלו ×�ינו נתמך.', 'errCmdNoSupport' : 'המנגנון ×�ינו תומך בפקודה זו.', 'errReplByChild' : 'ל×� ניתן להחליף ×�ת התיקייה „$1“ בפריט מתוכה.', 'errArcSymlinks' : 'מטעמי ×�בטחה ל×� ניתן לחלץ ×�רכיוני×� שמכילי×� קישורי×� סימבוליי×� ×�ו קבצי×� ×¢×� שמות בלתי מורשי×�.', // edited 24.06.2012 'errArcMaxSize' : '×”×�רכיון חורג מהגודל המרבי המותר.', 'errResize' : 'ל×� ניתן לשנות ×�ת הגודל של „$1“.', 'errResizeDegree' : 'מעלות ההיפוך שגויות.', // added 7.3.2013 'errResizeRotate' : 'ל×� ניתן להפוך ×�ת התמונה.', // added 7.3.2013 'errResizeSize' : 'גודל התמונה שגוי.', // added 7.3.2013 'errResizeNoChange' : 'גודל התמונה ל×� השתנה.', // added 7.3.2013 'errUsupportType' : 'סוג הקובץ ×�ינו נתמך.', 'errNotUTF8Content' : 'הקובץ „$1“ הו×� ל×� בתסדיר UTF-8 ול×� ניתן לערוך ×�ותו.', // added 9.11.2011 'errNetMount' : 'ל×� ניתן לעגן ×�ת „$1“.', // added 17.04.2012 'errNetMountNoDriver' : 'פרוטוקול בלתי נתמך.', // added 17.04.2012 'errNetMountFailed' : 'העיגון נכשל.', // added 17.04.2012 'errNetMountHostReq' : 'נדרש מ×�רח.', // added 18.04.2012 'errSessionExpires' : 'ההפעלה שלך פגה עקב חוסר פעילות.', 'errCreatingTempDir' : 'ל×� ניתן ליצור תיקייה זמנית: „$1“', 'errFtpDownloadFile' : 'ל×� ניתן להוריד קובץ מ־ FTP: „$1“', 'errFtpUploadFile' : 'ל×� ניתן להעלות קובץ ל־FTP: „$1“', 'errFtpMkdir' : 'ל×� ניתן ליצור תיקייה מרוחקת ב־FTP: „$1“', 'errArchiveExec' : 'שמירת הקבצי×� ב×�רכיון נכשלה: „$1“', 'errExtractExec' : 'חילוץ קבצי×� נכשל: „$1“', /******************************* commands names ********************************/ 'cmdarchive' : 'יצירת ×�רכיון', 'cmdback' : 'חזרה', 'cmdcopy' : 'העתקה', 'cmdcut' : 'גזירה', 'cmddownload' : 'הורדה', 'cmdduplicate' : 'שכפול', 'cmdedit' : 'עריכת קובץ', 'cmdextract' : 'חילוץ קבצי×� מ×�רכיון', 'cmdforward' : 'העברה', 'cmdgetfile' : 'בחירת קבצי×�', 'cmdhelp' : 'פרטי×� על התכנית הזו', 'cmdhome' : 'בית', 'cmdinfo' : 'קבלת מידע', 'cmdmkdir' : 'תיקייה חדשה', 'cmdmkfile' : 'קובץ חדש', 'cmdopen' : 'פתיחה', 'cmdpaste' : 'הדבקה', 'cmdquicklook' : 'תצוגה מקדימה', 'cmdreload' : 'רענון', 'cmdrename' : 'שינוי ש×�', 'cmdrm' : 'מחיקה', 'cmdsearch' : 'חיפוש קבצי×�', 'cmdup' : 'מעבר לתיקיית ההורה', 'cmdupload' : 'העל×�ת קבצי×�', 'cmdview' : 'תצוגה', 'cmdresize' : 'שינוי גודל והיפוך', 'cmdsort' : 'מיון', 'cmdnetmount' : 'עיגון כונן רשת', // added 18.04.2012 /*********************************** buttons ***********************************/ 'btnClose' : 'סגירה', 'btnSave' : 'שמירה', 'btnRm' : 'הסרה', 'btnApply' : 'החלה', 'btnCancel' : 'ביטול', 'btnNo' : 'ל×�', 'btnYes' : 'כן', 'btnDiscard': 'Discard changes', 'btnMount' : 'עיגון', // added 18.04.2012 /******************************** notifications ********************************/ 'ntfopen' : 'פתיחת תיקייה', 'ntffile' : 'פתיחת קובץ', 'ntfreload' : 'רענון תוכן התיקייה', 'ntfmkdir' : 'תיקייה נוצרת', 'ntfmkfile' : 'קבצי×� נוצרי×�', 'ntfrm' : 'קבצי×� נמחקי×�', 'ntfcopy' : 'קבצי×� מועתקי×�', 'ntfmove' : 'קבצי×� מועברי×�', 'ntfprepare' : 'העתקת קבצי×� בהכנה', 'ntfrename' : 'שמות קבצי×� משתני×�', 'ntfupload' : 'קבצי×� נשלחי×�', 'ntfdownload' : 'קבצי×� מתקבלי×�', 'ntfsave' : 'שמירת קבצי×�', 'ntfarchive' : '×�רכיון נוצר', 'ntfextract' : 'מחולצי×� קבצי×� מ×�רכיון', 'ntfsearch' : 'קבצי×� בחיפוש', 'ntfresize' : 'גודל קבצי×� משתנה', 'ntfsmth' : 'מתבצעת פעולה', 'ntfloadimg' : 'נטענת תמונה', 'ntfnetmount' : 'כונן רשת מעוגן', // added 18.04.2012 'ntfdim' : 'ממדי תמונה מתקבלי×�', // added 20.05.2013 /************************************ dates **********************************/ 'dateUnknown' : 'ל×� ידוע', 'Today' : 'היו×�', 'Yesterday' : 'מחר', 'msJan' : 'ינו׳', 'msFeb' : 'פבר׳', 'msMar' : 'מרץ', 'msApr' : '×�פר׳', 'msMay' : 'מ×�×™', 'msJun' : 'יונ׳', 'msJul' : 'יול׳', 'msAug' : '×�וג׳', 'msSep' : 'ספט׳', 'msOct' : '×�וק׳', 'msNov' : 'נוב׳', 'msDec' : 'דצמ׳', 'January' : 'ינו×�ר', 'February' : 'פברו×�ר', 'March' : 'מרץ', 'April' : '×�פריל', 'May' : 'מ×�×™', 'June' : 'יוני', 'July' : 'יולי', 'August' : '×�וגוסט', 'September' : 'ספטמבר', 'October' : '×�וקטובר', 'November' : 'נובמבר', 'December' : 'דצמבר', 'Sunday' : 'יו×� ר×�שון', 'Monday' : 'יו×� שני', 'Tuesday' : 'יו×� שלישי', 'Wednesday' : 'יו×� רביעי', 'Thursday' : 'יו×� חמישי', 'Friday' : 'יו×� שישי', 'Saturday' : 'שבת', 'Sun' : '×�׳', 'Mon' : 'ב׳', 'Tue' : 'ג׳', 'Wed' : 'ד׳', 'Thu' : '×”', 'Fri' : 'ו׳', 'Sat' : 'ש׳', /******************************** sort variants ********************************/ 'sortname' : 'לפי ש×�', 'sortkind' : 'לפי סוג', 'sortsize' : 'לפי גודל', 'sortdate' : 'לפי ת×�ריך', 'sortFoldersFirst' : 'תיקיות תחילה', /********************************** messages **********************************/ 'confirmReq' : 'נדרש ×�ישור', 'confirmRm' : 'להסיר ×�ת הקבצי×�?
          פעולה זו בלתי הפיכה!', 'confirmRepl' : 'להחליף קובץ ישן בקובץ חדש?', 'apllyAll' : 'להחיל על הכול', 'name' : 'ש×�', 'size' : 'גודל', 'perms' : 'הרש×�ות', 'modify' : 'שינוי', 'kind' : 'סוג', 'read' : 'קרי×�×”', 'write' : 'כתיבה', 'noaccess' : '×�ין גישה', 'and' : 'וג×�', 'unknown' : 'ל×� ידוע', 'selectall' : 'בחירת כל הקבצי×�', 'selectfiles' : 'בחירת קובץ ×�חד ומעלה', 'selectffile' : 'בחירת הקובץ הר×�שון', 'selectlfile' : 'בחירת הקובץ ×”×�חרון', 'viewlist' : 'תצוגת רשימה', 'viewicons' : 'תצוגת סמלי×�', 'places' : 'מיקומי×�', 'calc' : 'חישוב', 'path' : 'נתיב', 'aliasfor' : 'כינוי עבור', 'locked' : 'נעול', 'dim' : 'ממדי×�', 'files' : 'קבצי×�', 'folders' : 'תיקיות', 'items' : 'פריטי×�', 'yes' : 'כן', 'no' : 'ל×�', 'link' : 'קישור', 'searcresult' : 'תוצ×�ות חיפוש', 'selected' : 'קבצי×� נבחרי×�', 'about' : 'על ×�ודות', 'shortcuts' : 'קיצורי דרך', 'help' : 'עזרה', 'webfm' : 'מנהל קבצי×� בדפדפן', 'ver' : 'גרסה', 'protocolver' : 'גרסת פרוטוקול', 'homepage' : 'דף הבית של המיז×�', 'docs' : 'תיעוד', 'github' : 'פילוג עותק ב־Github', 'twitter' : 'לעקוב ×�חרינו בטוויטר', 'facebook' : 'להצטרף ×�לינו בפייסבוק', 'team' : 'צוות', 'chiefdev' : 'מפתח ר×�שי', 'developer' : 'מתכנת', 'contributor' : 'תור×�', 'maintainer' : 'מתחזק', 'translator' : 'מתרג×�', 'icons' : 'סמלי×�', 'dontforget' : 'ל×� לשכוח לקחת ×�ת המגבת שלך', 'shortcutsof' : 'קיצורי הדרך מנוטרלי×�', 'dropFiles' : 'ניתן להשליך ×�ת הקבצי×� לכ×�ן', 'or' : '×�ו', 'selectForUpload' : 'לבחור קבצי×� להעל×�×”', 'moveFiles' : 'העברת קבצי×�', 'copyFiles' : 'העתקת קבצי×�', 'rmFromPlaces' : 'הסרה ממיקומי×�', 'aspectRatio' : 'יחס תצוגה', 'scale' : 'מתיחה', 'width' : 'רוחב', 'height' : 'גובה', 'resize' : 'שינוי הגודל', 'crop' : 'חיתוך', 'rotate' : 'היפוך', 'rotate-cw' : 'היפוך ב־90 מעלות נגד השעון', 'rotate-ccw' : 'היפוך ב־90 מעלות ×¢×� השעון CCW', 'degree' : '°', 'netMountDialogTitle' : 'עיגון כונן רשת', // added 18.04.2012 'protocol' : 'פרוטוקול', // added 18.04.2012 'host' : 'מ×�רח', // added 18.04.2012 'port' : 'פתחה', // added 18.04.2012 'user' : 'משתמש', // added 18.04.2012 'pass' : 'ססמה', // added 18.04.2012 /********************************** mimetypes **********************************/ 'kindUnknown' : 'בלתי ידוע', 'kindFolder' : 'תיקייה', 'kindAlias' : 'כינוי', 'kindAliasBroken' : 'כינוי שבור', // applications 'kindApp' : 'יישו×�', 'kindPostscript' : 'מסמך Postscript', 'kindMsOffice' : 'מסמך Microsoft Office', 'kindMsWord' : 'מסמך Microsoft Word', 'kindMsExcel' : 'מסמך Microsoft Excel', 'kindMsPP' : 'מצגת Microsoft Powerpoint', 'kindOO' : 'מסמך Open Office', 'kindAppFlash' : 'יישו×� Flash', 'kindPDF' : 'Portable Document Format (PDF)', 'kindTorrent' : 'קובץ Bittorrent', 'kind7z' : '×�רכיון 7z', 'kindTAR' : '×�רכיון TAR', 'kindGZIP' : '×�רכיון GZIP', 'kindBZIP' : '×�רכיון BZIP', 'kindXZ' : '×�רכיון XZ', 'kindZIP' : '×�רכיון ZIP', 'kindRAR' : '×�רכיון RAR', 'kindJAR' : 'קובץ JAR של Java', 'kindTTF' : 'גופן True Type', 'kindOTF' : 'גופן Open Type', 'kindRPM' : 'חבילת RPM', // fonts 'kindFont' : 'גופן', 'kindSFNT' : 'גופן SFNT', 'kindEOT' : 'גופן Embedded Open Type', 'kindWOFF' : 'גופן Web Open Font Format', 'kindWOFF2' : 'גופן Web Open Font Format 2', // texts 'kindText' : 'מסמך טקסט', 'kindTextPlain' : 'טקסט פשוט', 'kindPHP' : 'מקור PHP', 'kindCSS' : 'גיליון סגנון מדורג', 'kindHTML' : 'מסמך HTML', 'kindJS' : 'מקור Javascript', 'kindRTF' : 'תבנית טקסט עשיר', 'kindC' : 'מקור C', 'kindCHeader' : 'מקור כותרת C', 'kindCPP' : 'מקור C++', 'kindCPPHeader' : 'מקור כותרת C++', 'kindShell' : 'תסריט מעטפת יוניקס', 'kindPython' : 'מקור Python', 'kindJava' : 'מקור Java', 'kindRuby' : 'מקור Ruby', 'kindPerl' : 'תסריט Perl', 'kindSQL' : 'מקור SQL', 'kindXML' : 'מקור XML', 'kindAWK' : 'מקור AWK', 'kindCSV' : 'ערכי×� מופרדי×� בפסיקי×�', 'kindDOCBOOK' : 'מסמךDocbook XML', // images 'kindImage' : 'תמונה', 'kindBMP' : 'תמונת BMP', 'kindJPEG' : 'תמונת JPEG', 'kindGIF' : 'תמונת GIF', 'kindPNG' : 'תמונת PNG', 'kindTIFF' : 'תמונת TIFF', 'kindTGA' : 'תמונת TGA', 'kindPSD' : 'תמונת Adobe Photoshop', 'kindXBITMAP' : 'תמונת מפת סיביות X', 'kindPXM' : 'תמונת Pixelmator', // media 'kindAudio' : 'מדיה מסוג שמע', 'kindAudioMPEG' : 'שמע MPEG', 'kindAudioMPEG4' : 'שמע MPEG-4', 'kindAudioMIDI' : 'שמע MIDI', 'kindAudioOGG' : 'שמע Ogg Vorbis', 'kindAudioWAV' : 'שמע WAV', 'AudioPlaylist' : 'רשימת × ×’×™× ×” MP3', 'kindVideo' : 'מדיה מסוג ויד×�ו', 'kindVideoDV' : 'סרטון DV', 'kindVideoMPEG' : 'סרטון MPEG', 'kindVideoMPEG4' : 'סרטון MPEG-4', 'kindVideoAVI' : 'סרטון AVI', 'kindVideoMOV' : 'סרטון Quick Time', 'kindVideoWM' : 'סרטון Windows Media', 'kindVideoFlash' : 'סרטון Flash', 'kindVideoMKV' : 'סרטון Matroska', 'kindVideoOGG' : 'סרטון Ogg' } }; })); PK!ôFl'ÿhÿh@file-manager-advanced/application/library/js/i18n/elfinder.id.jsnu„[µü¤/** * Bahasa Indonesia translation * @author Suyadi <1441177004009@student.unsika.ac.id> * @author Ammar Faizi * @version 2017-05-28 */ (function(root, factory) { if (typeof define === 'function' && define.amd) { define(['elfinder'], factory); } else if (typeof exports !== 'undefined') { module.exports = factory(require('elfinder')); } else { factory(root.elFinder); } }(this, function(elFinder) { elFinder.prototype.i18.id = { translator : 'Suyadi <1441177004009@student.unsika.ac.id>, Ammar Faizi <ammarfaizi2@gmail.com>', language : 'Bahasa Indonesia', direction : 'ltr', dateFormat : 'j F, Y H:i', // Mar 13, 2012 05:27 PM fancyDateFormat : '$1 H:i', // will produce smth like: Today 12:25 PM nonameDateFormat : 'd m Y - H : i : s', // to apply if upload file is noname: 120513172700 messages : { /********************************** errors **********************************/ 'error' : 'Kesalahan', 'errUnknown' : 'Kesalahan tak dikenal.', 'errUnknownCmd' : 'Perintah tak dikenal.', 'errJqui' : 'Konfigurasi jQuery UI tidak valid. Komponen pemilih, penyeret dan penaruh harus disertakan.', 'errNode' : 'elFinder membutuhkan pembuatan elemen DOM.', 'errURL' : 'Konfigurasi elFinder tidak valid! opsi URL belum diatur.', 'errAccess' : 'Akses ditolak.', 'errConnect' : 'Tidak dapat tersambung ke backend.', 'errAbort' : 'Koneksi dibatalkan.', 'errTimeout' : 'Waktu koneksi habis.', 'errNotFound' : 'Backend tidak ditemukan.', 'errResponse' : 'Respon backend tidak valid.', 'errConf' : 'Konfigurasi elFinder tidak valid.', 'errJSON' : 'Modul PHP JSON belum terpasang.', 'errNoVolumes' : 'Tidak tersedia ruang kosong.', 'errCmdParams' : 'Parameter perintah "$1" tidak valid.', 'errDataNotJSON' : 'Data bukan merupakan JSON.', 'errDataEmpty' : 'Data masih kosong.', 'errCmdReq' : 'Permintaan ke backend membutuhkan nama perintah.', 'errOpen' : 'Tidak dapat membuka "$1".', 'errNotFolder' : 'Obyek ini bukan folder.', 'errNotFile' : 'Obyek ini bukan berkas.', 'errRead' : 'Tidak dapat membaca "$1".', 'errWrite' : 'Tidak dapat menulis ke "$1".', 'errPerm' : 'Ijin ditolak.', 'errLocked' : '"$1" ini terkunci dan tak dapat dipidahkan, diubah atau dihapus.', 'errExists' : 'Berkas bernama "$1" sudah ada.', 'errInvName' : 'Nama berkas tidak valid.', 'errInvDirname' : 'Nama folder salah.', // from v2.1.24 added 12.4.2017 'errFolderNotFound' : 'Folder tidak ditemukan.', 'errFileNotFound' : 'Berkas tidak ditemukan.', 'errTrgFolderNotFound' : 'Folder tujuan "$1" tidak ditemukan.', 'errPopup' : 'Peramban anda mencegah untuk membuka jendela munculan. Untuk dapat membuka berkas ini ubah pengaturan pada peramban anda.', 'errMkdir' : 'Tidak dapat membuat folder "$1".', 'errMkfile' : 'Tidak dapat membuat berkas "$1".', 'errRename' : 'Tidak dapat mengubah nama "$1".', 'errCopyFrom' : 'Tidak diizinkan menyalin berkas dari volume "$1".', 'errCopyTo' : 'tidak diizinkan menyalin berkas ke volume "$1".', 'errMkOutLink' : 'Tidak dapat membuat tautan diluar volume root.', // from v2.1 added 03.10.2015 'errUpload' : 'Kesalahan saat mengunggah.', // old name - errUploadCommon 'errUploadFile' : 'Tidak dapat mengunggah "$1".', // old name - errUpload 'errUploadNoFiles' : 'Tak ada berkas untuk diunggah.', 'errUploadTotalSize' : 'Data melampaui ukuran yang diperbolehkan.', // old name - errMaxSize 'errUploadFileSize' : 'Berkas melampaui ukuran yang diperbolehkan.', // old name - errFileMaxSize 'errUploadMime' : 'Jenis berkas ini tidak diijinkan.', 'errUploadTransfer' : 'Kesalahan transfer "$1".', 'errUploadTemp' : 'Tidak dapat membuat file sementara untuk diupload.', // from v2.1 added 26.09.2015 'errNotReplace' : 'Obyek "$1" sudah ada di lokasi ini dan tidak dapat ditimpa oleh obyek jenis lain.', // new 'errReplace' : 'Tidak dapat menimpa "$1".', 'errSave' : 'Tidak dapat menyimpan "$1".', 'errCopy' : 'Tidak dapat menyalin "$1".', 'errMove' : 'Tidak dapat memindahkan "$1".', 'errCopyInItself' : 'Tidak dapat menyalin "$1" ke dirinya sendiri.', 'errRm' : 'Tidak dapat menghapus "$1".', 'errTrash' : 'Tidak dapat masuk ke tempat sampah.', // from v2.1.24 added 30.4.2017 'errRmSrc' : 'Tidak dapat menghapus sumber berkas.', 'errExtract' : 'Tidak dapat mengekstrak berkas dari "$1".', 'errArchive' : 'Tidak dapat membuat arsip.', 'errArcType' : 'Jenis arsip tidak didukung.', 'errNoArchive' : 'Berkas ini bukan arsip atau arsip jenis ini tidak didukung.', 'errCmdNoSupport' : 'Backend tidak mendukung perintah ini.', 'errReplByChild' : 'Folder “$1â€� tidak dapat ditimpa dengan berkas didalamnya.', 'errArcSymlinks' : 'Untuk keamanan tak diijinkan mengekstrak arsip berisi symlink atau jenis berkas yang tak diijinkan.', // edited 24.06.2012 'errArcMaxSize' : 'Arsip ini melampaui ukuran yang diijinkan.', 'errResize' : 'Tidak dapat mengubah ukuran "$1".', 'errResizeDegree' : 'Derajat putaran tidak valid.', // added 7.3.2013 'errResizeRotate' : 'Citra tidak diputar.', // added 7.3.2013 'errResizeSize' : 'Ukuran citra tidak valid.', // added 7.3.2013 'errResizeNoChange' : 'Ukuran citra tidak diubah.', // added 7.3.2013 'errUsupportType' : 'Jenis berkas tidak didukung.', 'errNotUTF8Content' : 'Berkas "$1" tidak dalam format UTF-8 dan tidak dapat disunting.', // added 9.11.2011 'errNetMount' : 'Tidak dapat membaca susunan "$1".', // added 17.04.2012 'errNetMountNoDriver' : 'Protokol tidak didukung.', // added 17.04.2012 'errNetMountFailed' : 'Tidak dapat membaca susunannya.', // added 17.04.2012 'errNetMountHostReq' : 'Host harus ada.', // added 18.04.2012 'errSessionExpires' : 'Sesi anda telah kadaluwarsa karena lama tidak aktif.', 'errCreatingTempDir' : 'Tidak dapat membuat direktori sementara: "$1"', 'errFtpDownloadFile' : 'Tidak dapat mengunduh berkas dari FTP: "$1"', 'errFtpUploadFile' : 'Tidak dapat mengunggah berkas dari FTP: "$1"', 'errFtpMkdir' : 'Tidak dapat membuat remot direktori dari FTP: "$1"', 'errArchiveExec' : 'Kesalahan saat mengarsipkan berkas: "$1"', 'errExtractExec' : 'Kesalahan saat mengekstrak berkas: "$1"', 'errNetUnMount' : 'Tidak dapat melakukan mount.', // from v2.1 added 30.04.2012 'errConvUTF8' : 'Tidak cocok untuk konversi ke UTF-8', // from v2.1 added 08.04.2014 'errFolderUpload' : 'Coba dengan browser yang modern, Jika akan mengupload folder.', // from v2.1 added 26.6.2015 'errSearchTimeout' : 'Waktu habis selama melakukan pencarian "$1". Hasil sementara.', // from v2.1 added 12.1.2016 'errReauthRequire' : 'Re-authorization dibutuhkan.', // from v2.1.10 added 24.3.2016 'errMaxTargets' : 'Berkas maksimal yang dipilih adalah $1.', // from v2.1.17 added 17.10.2016 'errRestore' : 'Tidak dapat mengembalikan berkas dari tempat sampah. Tujuan tidak ditemukan.', // from v2.1.24 added 3.5.2017 'errEditorNotFound' : 'Tidak ditemukan editor untuk file tipe ini.', // from v2.1.25 added 23.5.2017 /******************************* commands names ********************************/ 'cmdarchive' : 'Buat arsip', 'cmdback' : 'Kembali', 'cmdcopy' : 'Salin', 'cmdcut' : 'Potong', 'cmddownload' : 'Unduh', 'cmdduplicate' : 'Gandakan', 'cmdedit' : 'Sunting berkas', 'cmdextract' : 'Ekstrak berkas dari arsip', 'cmdforward' : 'Maju', 'cmdgetfile' : 'Pilih berkas', 'cmdhelp' : 'Tentang software ini', 'cmdhome' : 'Rumah', 'cmdinfo' : 'Dapatkan info', 'cmdmkdir' : 'Buat folder', 'cmdmkdirin' : 'Masuk ke folder baru', // from v2.1.7 added 19.2.2016 'cmdmkfile' : 'Buat fail', 'cmdopen' : 'Buka', 'cmdpaste' : 'Tempel', 'cmdquicklook' : 'Pratinjau', 'cmdreload' : 'Muat-ulang', 'cmdrename' : 'Ganti nama', 'cmdrm' : 'Hapus', 'cmdtrash' : 'Sampahkan', //from v2.1.24 added 29.4.2017 'cmdrestore' : 'Kembalikan', //from v2.1.24 added 3.5.2017 'cmdsearch' : 'Cari berkas', 'cmdup' : 'Ke direktori utama', 'cmdupload' : 'Unggah berkas', 'cmdview' : 'Lihat', 'cmdresize' : 'Ubah ukuran & Putar', 'cmdsort' : 'Urutkan', 'cmdnetmount' : 'Baca-susun volume jaringan', // added 18.04.2012 'cmdnetunmount': 'Unmount', // from v2.1 added 30.04.2012 'cmdplaces' : 'Ke Tempat', // added 28.12.2014 'cmdchmod' : 'Mode mengubah', // from v2.1 added 20.6.2015 'cmdopendir' : 'Membuka folder', // from v2.1 added 13.1.2016 'cmdcolwidth' : 'Reset column width', // from v2.1.13 added 12.06.2016 'cmdfullscreen': 'Layar Penuh', // from v2.1.15 added 03.08.2016 'cmdmove' : 'Pindah', // from v2.1.15 added 21.08.2016 /*********************************** buttons ***********************************/ 'btnClose' : 'Tutup', 'btnSave' : 'Simpan', 'btnRm' : 'Buang', 'btnApply' : 'Terapkan', 'btnCancel' : 'Batal', 'btnNo' : 'Tidak', 'btnYes' : 'Ya', 'btnDiscard': 'Discard changes', 'btnMount' : 'Baca susunan', // added 18.04.2012 'btnApprove': 'Menuju ke $1 & setujui', // from v2.1 added 26.04.2012 'btnUnmount': 'Unmount', // from v2.1 added 30.04.2012 'btnConv' : 'Konversi', // from v2.1 added 08.04.2014 'btnCwd' : 'Disini', // from v2.1 added 22.5.2015 'btnVolume' : 'Volume', // from v2.1 added 22.5.2015 'btnAll' : 'Semua', // from v2.1 added 22.5.2015 'btnMime' : 'MIME Type', // from v2.1 added 22.5.2015 'btnFileName':'Nama file', // from v2.1 added 22.5.2015 'btnSaveClose': 'Simpan & Tutup', // from v2.1 added 12.6.2015 'btnBackup' : 'Backup', // fromv2.1 added 28.11.2015 'btnRename' : 'Ubah nama', // from v2.1.24 added 6.4.2017 'btnRenameAll' : 'Ubah nama(Semua)', // from v2.1.24 added 6.4.2017 'btnPrevious' : 'Sebelumnya ($1/$2)', // from v2.1.24 added 11.5.2017 'btnNext' : 'Selanjutnya ($1/$2)', // from v2.1.24 added 11.5.2017 'btnSaveAs' : 'Simpan sebagai', // from v2.1.25 added 24.5.2017 /******************************** notifications ********************************/ 'ntfopen' : 'Buka folder', 'ntffile' : 'Buka berkas', 'ntfreload' : 'Muat-ulang isi folder', 'ntfmkdir' : 'Membuat direktori', 'ntfmkfile' : 'Membuat berkas', 'ntfrm' : 'Menghapus berkas', 'ntfcopy' : 'Salin berkas', 'ntfmove' : 'Pindahkan berkas', 'ntfprepare' : 'Persiapan menyalin berkas', 'ntfrename' : 'Ubah nama berkas', 'ntfupload' : 'Unggah berkas', 'ntfdownload' : 'Mengunduh berkas', 'ntfsave' : 'Simpan berkas', 'ntfarchive' : 'Membuat arsip', 'ntfextract' : 'Mengekstrak berkas dari arsip', 'ntfsearch' : 'Mencari berkas', 'ntfresize' : 'Mengubah ukuran citra', 'ntfsmth' : 'Melakukan sesuatu', 'ntfloadimg' : 'Memuat citra', 'ntfnetmount' : 'Membaca susunan volume jaringan', // added 18.04.2012 'ntfnetunmount': 'Unmounting network volume', // from v2.1 added 30.04.2012 'ntfdim' : 'Mendapatkan dimensi citra', // added 20.05.2013 'ntfreaddir' : 'Membaca informasi folder', // from v2.1 added 01.07.2013 'ntfurl' : 'Mendapatkan URL dari link', // from v2.1 added 11.03.2014 'ntfchmod' : 'Dalam mode mengubah', // from v2.1 added 20.6.2015 'ntfpreupload': 'Sedang memverifikasi nama file yang diupload', // from v2.1 added 31.11.2015 'ntfzipdl' : 'Membuat file untuk didownload', // from v2.1.7 added 23.1.2016 'ntfparents' : 'Mengambil informasi path', // from v2.1.17 added 2.11.2016 'ntfchunkmerge': 'Sedang mengupload file', // from v2.1.17 added 2.11.2016 'ntftrash' : 'Sedang melempar ke tempat sampah', // from v2.1.24 added 2.5.2017 'ntfrestore' : 'Sedang mengembalikan dari tempat sampah', // from v2.1.24 added 3.5.2017 'ntfchkdir' : 'Mengecek folder tujuan', // from v2.1.24 added 3.5.2017 /*********************************** volumes *********************************/ 'volume_Trash' : 'Sampah', //from v2.1.24 added 29.4.2017 /************************************ dates **********************************/ 'dateUnknown' : 'tak diketahui', 'Today' : 'Hari ini', 'Yesterday' : 'Kemarin', 'msJan' : 'Jan', 'msFeb' : 'Feb', 'msMar' : 'Mar', 'msApr' : 'Apr', 'msMay' : 'Mei', 'msJun' : 'Jun', 'msJul' : 'Jul', 'msAug' : 'Agt', 'msSep' : 'Sep', 'msOct' : 'Okt', 'msNov' : 'Nop', 'msDec' : 'Des', 'January' : 'Januari', 'February' : 'Pebruari', 'March' : 'Maret', 'April' : 'April', 'May' : 'Mei', 'June' : 'Juni', 'July' : 'Juli', 'August' : 'Agustus', 'September' : 'September', 'October' : 'Oktober', 'November' : 'Nopember', 'December' : 'Desember', 'Sunday' : 'Minggu', 'Monday' : 'Senin', 'Tuesday' : 'Selasa', 'Wednesday' : 'Rabu', 'Thursday' : 'Kamis', 'Friday' : 'Jum \'at', 'Saturday' : 'Sabtu', 'Sun' : 'Min', 'Mon' : 'Sen', 'Tue' : 'Sel', 'Wed' : 'Rab', 'Thu' : 'Kam', 'Fri' : 'Jum', 'Sat' : 'Sab', /******************************** sort variants ********************************/ 'sortname' : 'menurut nama', 'sortkind' : 'menurut jenis', 'sortsize' : 'menurut ukuran', 'sortdate' : 'menurut tanggal', 'sortFoldersFirst' : 'Utamakan folder', 'sortperm' : 'menurut perizinan', // from v2.1.13 added 13.06.2016 'sortmode' : 'menurut mode', // from v2.1.13 added 13.06.2016 'sortowner' : 'menurut pemilik', // from v2.1.13 added 13.06.2016 'sortgroup' : 'menurut grup', // from v2.1.13 added 13.06.2016 'sortAlsoTreeview' : 'Also Treeview', // from v2.1.15 added 01.08.2016 /********************************** new items **********************************/ 'untitled file.txt' : 'FileBaru.txt', // added 10.11.2015 'untitled folder' : 'FolderBaru', // added 10.11.2015 'Archive' : 'ArsipBaru', // from v2.1 added 10.11.2015 /********************************** messages **********************************/ 'confirmReq' : 'Diperlukan konfirmasi', 'confirmRm' : 'Anda yakin akan menghapus berkas?
          Ini tidak dapat kembalikan!', 'confirmRepl' : 'Timpa berkas lama dengan yang baru?', 'confirmRest' : 'Timpa berkas yang ada dengan berkas dari sampah?', // fromv2.1.24 added 5.5.2017 'confirmConvUTF8' : 'Bukan UTF-8
          Konversi ke UTF-8?
          Konten akan berubah menjadi UTF-8 ketika disimpan dengan konversi.', // from v2.1 added 08.04.2014 'confirmNonUTF8' : 'Character encoding of this file couldn\'t be detected. It need to temporarily convert to UTF-8 for editting.
          Please select character encoding of this file.', // from v2.1.19 added 28.11.2016 'confirmNotSave' : 'Telah terjadi perubahan.
          Kehilangan perkerjaan jika kamu tidak menyimpan.', // from v2.1 added 15.7.2015 'confirmTrash' : 'Anda yakin untuk membuang berkas ke tempat sampah?', //from v2.1.24 added 29.4.2017 'apllyAll' : 'Terapkan ke semua', 'name' : 'Nama', 'size' : 'Ukuran', 'perms' : 'Perijinan', 'modify' : 'Diubah', 'kind' : 'Jenis', 'read' : 'baca', 'write' : 'tulis', 'noaccess' : 'tidak ada akses', 'and' : 'dan', 'unknown' : 'tak diketahui', 'selectall' : 'Pilih semua berkas', 'selectfiles' : 'Pilih berkas', 'selectffile' : 'Pilih berkas pertama', 'selectlfile' : 'Pilih berkas terakhir', 'viewlist' : 'Tampilan daftar', 'viewicons' : 'Tampilan ikon', 'places' : 'Lokasi', 'calc' : 'Hitung', 'path' : 'Alamat', 'aliasfor' : 'Nama lain untuk', 'locked' : 'Dikunci', 'dim' : 'Dimensi', 'files' : 'Berkas', 'folders' : 'Folder', 'items' : 'Pokok', 'yes' : 'ya', 'no' : 'tidak', 'link' : 'Tautan', 'searcresult' : 'Hasil pencarian', 'selected' : 'Pokok terpilih', 'about' : 'Tentang', 'shortcuts' : 'Pintasan', 'help' : 'Bantuan', 'webfm' : 'Pengelola berkas web', 'ver' : 'Versi', 'protocolver' : 'versi protokol', 'homepage' : 'Rumah proyek', 'docs' : 'Dokumentasi', 'github' : 'Ambil kami di Github', 'twitter' : 'Ikuti kami di twitter', 'facebook' : 'Gabung dengan kami di facebook', 'team' : 'Tim', 'chiefdev' : 'kepala pengembang', 'developer' : 'pengembang', 'contributor' : 'kontributor', 'maintainer' : 'pengurus', 'translator' : 'penerjemah', 'icons' : 'Ikon', 'dontforget' : 'dan jangan lupa pakai handukmu', 'shortcutsof' : 'Pintasan dimatikan', 'dropFiles' : 'Seret berkas anda kesini', 'or' : 'atau', 'selectForUpload' : 'Pilih berkas untuk diunggah', 'moveFiles' : 'Pindahkan berkas', 'copyFiles' : 'Salin berkas', 'restoreFiles' : 'Kembalikan berkas', // from v2.1.24 added 5.5.2017 'rmFromPlaces' : 'Hapus dari lokasi', 'aspectRatio' : 'Aspek rasio', 'scale' : 'Skala', 'width' : 'Lebar', 'height' : 'Tinggi', 'resize' : 'Ubah ukuran', 'crop' : 'Potong', 'rotate' : 'Putar', 'rotate-cw' : 'Putar 90 derajat ke kanan', 'rotate-ccw' : 'Putar 90 derajat ke kiri', 'degree' : '°', 'netMountDialogTitle' : 'Baca susunan volume jaringan', // added 18.04.2012 'protocol' : 'Protokol', // added 18.04.2012 'host' : 'Host', // added 18.04.2012 'port' : 'Port', // added 18.04.2012 'user' : 'Pengguna', // added 18.04.2012 'pass' : 'Sandi', // added 18.04.2012 'confirmUnmount' : 'Apakah anda unmount $1?', // from v2.1 added 30.04.2012 'dropFilesBrowser': 'Seret atau Tempel file dari browser', // from v2.1 added 30.05.2012 'dropPasteFiles' : 'Seret file, Tempel URL atau gambar dari clipboard', // from v2.1 added 07.04.2014 'encoding' : 'Encoding', // from v2.1 added 19.12.2014 'locale' : 'Lokasi', // from v2.1 added 19.12.2014 'searchTarget' : 'Target: $1', // from v2.1 added 22.5.2015 'searchMime' : 'Mencari berdasarkan inpu MIME Type', // from v2.1 added 22.5.2015 'owner' : 'Pemilik', // from v2.1 added 20.6.2015 'group' : 'Grup', // from v2.1 added 20.6.2015 'other' : 'Lainnya', // from v2.1 added 20.6.2015 'execute' : 'Eksekusi', // from v2.1 added 20.6.2015 'perm' : 'Izin', // from v2.1 added 20.6.2015 'mode' : 'Mode', // from v2.1 added 20.6.2015 'emptyFolder' : 'Folder kosong', // from v2.1.6 added 30.12.2015 'emptyFolderDrop' : 'Folder kosong\\A Seret untuk tambahkan berkas', // from v2.1.6 added 30.12.2015 'emptyFolderLTap' : 'Folder kosong\\A Tekan yang lama untuk tambahkan berkas', // from v2.1.6 added 30.12.2015 'quality' : 'Kualitas', // from v2.1.6 added 5.1.2016 'autoSync' : 'Sinkronasi Otomatis', // from v2.1.6 added 10.1.2016 'moveUp' : 'Pindah ke atas', // from v2.1.6 added 18.1.2016 'getLink' : 'Mendepatkan URL link', // from v2.1.7 added 9.2.2016 'selectedItems' : '($1) berkas dipilih', // from v2.1.7 added 2.19.2016 'folderId' : 'ID Folder', // from v2.1.10 added 3.25.2016 'offlineAccess' : 'Izin akses offline', // from v2.1.10 added 3.25.2016 'reAuth' : 'To re-authenticate', // from v2.1.10 added 3.25.2016 'nowLoading' : 'Sedang memuat...', // from v2.1.12 added 4.26.2016 'openMulti' : 'Membuka file bersamaan', // from v2.1.12 added 5.14.2016 'openMultiConfirm': 'Anda mencoba membuka file $1. Apakah anda ingin membuka di browser?', // from v2.1.12 added 5.14.2016 'emptySearch' : 'Hasil pencarian kosong dalam target', // from v2.1.12 added 5.16.2016 'editingFile' : 'Sedang mengedit file', // from v2.1.13 added 6.3.2016 'hasSelected' : 'Anda memilih $1 berkas', // from v2.1.13 added 6.3.2016 'hasClipboard' : 'Kamu mempunyai $i berkas di clipboard', // from v2.1.13 added 6.3.2016 'incSearchOnly' : 'Hanya pencarian bertamah untuk menampilkan tampilan sekarang', // from v2.1.13 added 6.30.2016 'reinstate' : 'Reinstate', // from v2.1.15 added 3.8.2016 'complete' : '$1 selesai', // from v2.1.15 added 21.8.2016 'contextmenu' : 'Context menu', // from v2.1.15 added 9.9.2016 'pageTurning' : 'Page turning', // from v2.1.15 added 10.9.2016 'volumeRoots' : 'Volume roots', // from v2.1.16 added 16.9.2016 'reset' : 'Reset', // from v2.1.16 added 1.10.2016 'bgcolor' : 'Warna background', // from v2.1.16 added 1.10.2016 'colorPicker' : 'Mengambil warna', // from v2.1.16 added 1.10.2016 '8pxgrid' : '8px Grid', // from v2.1.16 added 4.10.2016 'enabled' : 'Diaktifkan', // from v2.1.16 added 4.10.2016 'disabled' : 'Nonaktifkan', // from v2.1.16 added 4.10.2016 'emptyIncSearch' : 'Search results is empty in current view.\\APress [Enter] to expand search target.', // from v2.1.16 added 5.10.2016 'emptyLetSearch' : 'First letter search results is empty in current view.', // from v2.1.23 added 24.3.2017 'textLabel' : 'Text label', // from v2.1.17 added 13.10.2016 'minsLeft' : '$1 mins left', // from v2.1.17 added 13.11.2016 'openAsEncoding' : 'Reopen with selected encoding', // from v2.1.19 added 2.12.2016 'saveAsEncoding' : 'Save with the selected encoding', // from v2.1.19 added 2.12.2016 'selectFolder' : 'Select folder', // from v2.1.20 added 13.12.2016 'firstLetterSearch': 'First letter search', // from v2.1.23 added 24.3.2017 'presets' : 'Presets', // from v2.1.25 added 26.5.2017 /********************************** mimetypes **********************************/ 'kindUnknown' : 'Tak diketahui', 'kindRoot' : 'Volume Root', // from v2.1.16 added 16.10.2016 'kindFolder' : 'Folder', 'kindAlias' : 'Nama lain', 'kindAliasBroken' : 'Nama lain rusak', // applications 'kindApp' : 'Aplikasi', 'kindPostscript' : 'Dokumen postscript', 'kindMsOffice' : 'Dokumen Ms. Office', 'kindMsWord' : 'Dokumen Ms. Word', 'kindMsExcel' : 'Dokumen Ms. Excel', 'kindMsPP' : 'Dokumen Ms. Powerpoint', 'kindOO' : 'Dokumen Open Office', 'kindAppFlash' : 'Aplikasi Flash', 'kindPDF' : 'Portable Dokumen Format (PDF)', 'kindTorrent' : 'Berkas Bittorrent', 'kind7z' : 'Arsip 7z', 'kindTAR' : 'Arsip TAR', 'kindGZIP' : 'Arsip GZIP', 'kindBZIP' : 'Arsip BZIP', 'kindXZ' : 'Arsip XZ', 'kindZIP' : 'Arsip ZIP', 'kindRAR' : 'Arsip RAR', 'kindJAR' : 'Berkas Java JAR', 'kindTTF' : 'Huruf True Type', 'kindOTF' : 'Huruf Open Type', 'kindRPM' : 'Paket RPM', // fonts 'kindFont' : 'Huruf', 'kindSFNT' : 'Huruf SFNT', 'kindEOT' : 'Huruf Embedded Open Type', 'kindWOFF' : 'Huruf Web Open Font Format', 'kindWOFF2' : 'Huruf Web Open Font Format 2', // texts 'kindText' : 'Dokumen teks', 'kindTextPlain' : 'Berkas teks biasa', 'kindPHP' : 'Kode-sumber PHP', 'kindCSS' : 'Cascading style sheet', 'kindHTML' : 'Dokumen HTML', 'kindJS' : 'Kode-sumber Javascript', 'kindRTF' : 'Berkas Rich Text', 'kindC' : 'Kode-sumber C', 'kindCHeader' : 'Kode-sumber header C', 'kindCPP' : 'Kode-sumber C++', 'kindCPPHeader' : 'Kode-sumber header C++', 'kindShell' : 'Berkas shell Unix', 'kindPython' : 'Kode-sumber Python', 'kindJava' : 'Kode-sumber Java', 'kindRuby' : 'Kode-sumber Ruby', 'kindPerl' : 'Kode-sumber Perl', 'kindSQL' : 'Kode-sumber SQL', 'kindXML' : 'Dokumen XML', 'kindAWK' : 'Kode-sumber AWK', 'kindCSV' : 'Dokumen CSV', 'kindDOCBOOK' : 'Dokumen Docbook XML', 'kindMarkdown' : 'Markdown text', // added 20.7.2015 // images 'kindImage' : 'Citra', 'kindBMP' : 'Citra BMP', 'kindJPEG' : 'Citra JPEG', 'kindGIF' : 'Citra GIF', 'kindPNG' : 'Citra PNG', 'kindTIFF' : 'Citra TIFF', 'kindTGA' : 'Citra TGA', 'kindPSD' : 'Citra Adobe Photoshop', 'kindXBITMAP' : 'Citra X bitmap', 'kindPXM' : 'Citra Pixelmator', // media 'kindAudio' : 'Berkas audio', 'kindAudioMPEG' : 'Berkas audio MPEG', 'kindAudioMPEG4' : 'Berkas audio MPEG-4', 'kindAudioMIDI' : 'Berkas audio MIDI', 'kindAudioOGG' : 'Berkas audio Ogg Vorbis', 'kindAudioWAV' : 'Berkas audio WAV', 'AudioPlaylist' : 'Berkas daftar putar MP3', 'kindVideo' : 'Berkas video', 'kindVideoDV' : 'Berkas video DV', 'kindVideoMPEG' : 'Berkas video MPEG', 'kindVideoMPEG4' : 'Berkas video MPEG-4', 'kindVideoAVI' : 'Berkas video AVI', 'kindVideoMOV' : 'Berkas video Quick Time', 'kindVideoWM' : 'Berkas video Windows Media', 'kindVideoFlash' : 'Berkas video Flash', 'kindVideoMKV' : 'Berkas video Matroska', 'kindVideoOGG' : 'Berkas video Ogg' } }; })); PK!ï×wëëFfile-manager-advanced/application/library/js/i18n/elfinder.fallback.jsnu„[µü¤(function(factory) { if (typeof define === 'function' && define.amd) { define(factory); } else if (typeof exports !== 'undefined') { module.exports = factory(); } else { factory(); } }(this, function() { return void 0; })); PK!Š€±0œ0œ@file-manager-advanced/application/library/js/i18n/elfinder.ar.jsnu„[µü¤/** * الترجمة العربية * @author Khamis Alqutob * @author Tawfek Daghistani * @author Atef Ben Ali * @version 2020-12-03 */ (function(root, factory) { if (typeof define === 'function' && define.amd) { define(['elfinder'], factory); } else if (typeof exports !== 'undefined') { module.exports = factory(require('elfinder')); } else { factory(root.elFinder); } }(this, function(elFinder) { elFinder.prototype.i18.ar = { translator : 'Khamis Alqutob <alqutob@outlook.com>, Tawfek Daghistani <tawfekov@gmail.com>, Atef Ben Ali <atef.bettaib@gmail.com>', language : 'Arabic', direction : 'rtl', dateFormat : 'M d, Y h:i A', // will show like: Aug 24, 2018 04:39 PM fancyDateFormat : '$1 h:i A', // will show like: Today 04:39 PM nonameDateFormat : 'ymd-His', // noname upload will show like: 180824-163916 messages : { /********************************** errors **********************************/ 'error' : 'خطأ', 'errUnknown' : 'خطأ غير معروÙ� .', 'errUnknownCmd' : 'أمر غير معروÙ� .', 'errJqui' : 'تكوين jQuery UI غير صالح. يجب تضمين المكونات القابلة للتحديد والقابلة للسحب والإÙ�لات', 'errNode' : 'يتطلب elFinder إنشاء عنصر DOM.', 'errURL' : 'تكوين elFinder غير صالح ! لم يتم تعيين خيار رابط URL', 'errAccess' : 'الوصول مرÙ�وض .', 'errConnect' : 'تعذر الاتصال مع خادم الخلÙ�ية', 'errAbort' : 'تم Ù�صل الإتصال', 'errTimeout' : 'Ù†Ù�ذ وقت الاتصال.', 'errNotFound' : 'الخادوم الخلÙ�ÙŠ غير موجود .', 'errResponse' : 'رد غير مقبول من الخادوم الخلÙ�ÙŠ', 'errConf' : 'خطأ Ù�ÙŠ الإعدادات الخاصة بالخادوم الخلÙ�ÙŠ ', 'errJSON' : 'موديول PHP JSON module غير مثبت ', 'errNoVolumes' : 'الأحجام المقروءة غير متوÙ�رة', 'errCmdParams' : 'معلمات غير صالحة للأمر "$1".', 'errDataNotJSON' : 'البيانات ليست من نوع JSON ', 'errDataEmpty' : 'البيانات Ù�ارغة', 'errCmdReq' : 'الخادوم الخلÙ�ÙŠ يتطلب اسم الأمر ', 'errOpen' : 'غير قادر على Ù�تح "$1".', 'errNotFolder' : 'العنصر ليس مجلد', 'errNotFile' : 'العنصر ليس ملÙ�', 'errRead' : 'غير قادر على قراءة "$1".', 'errWrite' : 'غير قادر على الكتابة Ù�ÙŠ "$1".', 'errPerm' : 'وصول مرÙ�وض ', 'errLocked' : '"$1" مقÙ�Ù„ ولا يمكن إعادة تسميته أو نقله أو إزالته.', 'errExists' : 'العنصر الذي يحمل الاسم "$1" موجود مسبقاً.', 'errInvName' : 'اسم الملÙ� غير صالح', 'errInvDirname' : 'اسم مجلد غير صالح', // from v2.1.24 added 12.4.2017 'errFolderNotFound' : 'المجلد غير موجود', 'errFileNotFound' : 'الملÙ� غير موجود', 'errTrgFolderNotFound' : 'المجلد الهدÙ� "$1" غير موجود ', 'errPopup' : 'المتصÙ�Ø­ منع من Ù�تح ناÙ�ذة منبثقة. Ù„Ù�تح ملÙ� ØŒ قم بتمكينه Ù�ÙŠ خيارات المتصÙ�Ø­', 'errMkdir' : ' غير قادر على إنشاء مجلد "$1".', 'errMkfile' : ' غير قادر على إنشاء ملÙ� "$1".', 'errRename' : 'غير قادر على إعادة تسمية "$1".', 'errCopyFrom' : 'نسخ الملÙ�ات من الدليل "$1" غير مسموح.', 'errCopyTo' : 'نسخ الملÙ�ات إلى الدليل "$1" غير مسموح .', 'errMkOutLink' : 'تعذر إنشاء رابط إلى خارج جذر الدليل.', // from v2.1 added 03.10.2015 'errUpload' : 'خطأ Ù�ÙŠ عملية الرÙ�ع.', // old name - errUploadCommon 'errUploadFile' : 'غير قادر على رÙ�ع "$1".', // old name - errUpload 'errUploadNoFiles' : 'لم يتم العثور على ملÙ�ات للتحميل .', 'errUploadTotalSize' : 'البيانات تتجاوز الحد الأقصى للحجم المسموح به.', // old name - errMaxSize 'errUploadFileSize' : 'تجاوز الملÙ� الحد الأقصى للحجم المسموح به.', // old name - errFileMaxSize 'errUploadMime' : 'نوع الملÙ� غير مسموح به.', 'errUploadTransfer' : '"$1" خطأ نقل.', 'errUploadTemp' : 'تعذر إنشاء ملÙ� مؤقت للتحميل .', // from v2.1 added 26.09.2015 'errNotReplace' : 'الكائن "$1" موجود بالÙ�عل Ù�ÙŠ هذا الموقع ولا يمكن استبداله بكائن بنوع آخر.', // new 'errReplace' : 'غير قادر على استبدال "$1".', 'errSave' : 'غير قادر على Ø­Ù�ظ "$1".', 'errCopy' : 'غير قادر على نسخ "$1".', 'errMove' : 'غير قادر على نقل "$1".', 'errCopyInItself' : 'غير قادر على نسخ "$1" داخل Ù†Ù�سه.', 'errRm' : 'غير قادر على إزالة "$1".', 'errTrash' : 'غير قادر Ù�ÙŠ سلة المهملات', // from v2.1.24 added 30.4.2017 'errRmSrc' : 'تعذر إزالة ملÙ� (ملÙ�ات) المصدر.', 'errExtract' : 'غير قادر على استخراج الملÙ�ات من "$1".', 'errArchive' : 'غير قادر على إنشاء ملÙ� مضغوط.', 'errArcType' : 'نوع الملÙ� المضغوط غير مدعوم.', 'errNoArchive' : 'هذا الملÙ� ليس ملÙ� مضغوط أو ذو صيغة غير مدعومة.', 'errCmdNoSupport' : 'الخادوم الخلÙ�ÙŠ لا يدعم هذا الأمر ', 'errReplByChild' : 'لا يمكن استبدال المجلد "$1" بعنصر محتوÙ� Ù�يه.', 'errArcSymlinks' : 'لأسباب أمنية ØŒ تم رÙ�ض Ù�Ùƒ ضغط الأرشيÙ�ات التي تحتوي على روابط رمزية أو ملÙ�ات بأسماء غير مسموح بها.', // edited 24.06.2012 'errArcMaxSize' : 'تتجاوز ملÙ�ات الأرشيÙ� الحجم الأقصى المسموح به.', 'errResize' : 'تعذر تغيير حجم "$1".', 'errResizeDegree' : 'درجة تدوير غير صالحة.', // added 7.3.2013 'errResizeRotate' : 'تعذر تدوير الصورة.', // added 7.3.2013 'errResizeSize' : 'حجم الصورة غير صالح.', // added 7.3.2013 'errResizeNoChange' : 'حجم الصورة لم يتغير.', // added 7.3.2013 'errUsupportType' : 'نوع ملÙ� غير مدعوم.', 'errNotUTF8Content' : 'الملÙ� "$1" ليس بتنسيق UTF-8 ولا يمكن تحريره.', // added 9.11.2011 'errNetMount' : 'غير قادر على التثبيت "$1".', // added 17.04.2012 'errNetMountNoDriver' : 'بروتوكول غير مدعوم.', // added 17.04.2012 'errNetMountFailed' : 'Ù�شل التثبيت.', // added 17.04.2012 'errNetMountHostReq' : 'المضيÙ� مطلوب.', // added 18.04.2012 'errSessionExpires' : 'انتهت جلسة العمل الخاصة بك بسبب عدم الÙ�اعلية.', 'errCreatingTempDir' : 'تعذر إنشاء دليل مؤقت: "$1"', 'errFtpDownloadFile' : 'تعذر تنزيل الملÙ� من FTP: "$1"', 'errFtpUploadFile' : 'تعذر تحميل الملÙ� إلى FTP: "$1"', 'errFtpMkdir' : 'تعذر إنشاء دليل عن بعد Ù�ÙŠ FTP: "$1"', 'errArchiveExec' : 'خطأ أثناء أرشÙ�Ø© الملÙ�ات: "$1"', 'errExtractExec' : 'خطأ أثناء استخراج الملÙ�ات: "$1"', 'errNetUnMount' : 'غير قادر على Ù�Ùƒ التثبيت.', // from v2.1 added 30.04.2012 'errConvUTF8' : 'غير قابل للتحويل إلى UTF-8', // from v2.1 added 08.04.2014 'errFolderUpload' : 'جرب المتصÙ�Ø­ الحديث ØŒ إذا كنت ترغب Ù�ÙŠ تحميل المجلد.', // from v2.1 added 26.6.2015 'errSearchTimeout' : 'انتهت المهلة أثناء البحث "$1". نتيجة البحث جزئية.', // from v2.1 added 12.1.2016 'errReauthRequire' : 'مطلوب إعادة التÙ�ويض.', // from v2.1.10 added 24.3.2016 'errMaxTargets' : 'الحد الأقصى لعدد العناصر القابلة للتحديد هو $1.', // from v2.1.17 added 17.10.2016 'errRestore' : 'غير قادر على الاستعادة من سلة المهملات. لا يمكن تحديد وجهة الاستعادة.', // from v2.1.24 added 3.5.2017 'errEditorNotFound' : 'لم يتم العثور على المحرر لهذا النوع من الملÙ�ات.', // from v2.1.25 added 23.5.2017 'errServerError' : 'حدث خطأ من جانب الخادم.', // from v2.1.25 added 16.6.2017 'errEmpty' : 'تعذر Ø¥Ù�راغ المجلد "$1".', // from v2.1.25 added 22.6.2017 'moreErrors' : 'يوجد $1 أخطاء إضاÙ�ية.', // from v2.1.44 added 9.12.2018 /******************************* commands names ********************************/ 'cmdarchive' : 'إنشاء أرشيÙ�', 'cmdback' : 'العودة', 'cmdcopy' : 'نسخ', 'cmdcut' : 'قص', 'cmddownload' : 'تنزيل', 'cmdduplicate' : 'تكرار', 'cmdedit' : 'تحرير الملÙ�', 'cmdextract' : 'إستخراج الملÙ�ات من الأرشيÙ�', 'cmdforward' : 'الأمام', 'cmdgetfile' : 'اختيار الملÙ�ات', 'cmdhelp' : 'عن هذه البرمجية', 'cmdhome' : 'الجذر', 'cmdinfo' : 'الحصول على المعلومات ', 'cmdmkdir' : 'مجلد جديد', 'cmdmkdirin' : 'داخل مجلد جديد', // from v2.1.7 added 19.2.2016 'cmdmkfile' : 'ملÙ� جديد', 'cmdopen' : 'Ù�تح', 'cmdpaste' : 'لصق', 'cmdquicklook' : 'معاينة', 'cmdreload' : 'إعادة تحميل', 'cmdrename' : 'إعادة تسمية', 'cmdrm' : 'حذÙ�', 'cmdtrash' : 'داخل سلة المهملات', //from v2.1.24 added 29.4.2017 'cmdrestore' : 'إستعادة', //from v2.1.24 added 3.5.2017 'cmdsearch' : 'بحث عن ملÙ�ات', 'cmdup' : 'انتقل إلى المجلد الأصل', 'cmdupload' : 'رÙ�ع ملÙ�ات', 'cmdview' : 'عرض', 'cmdresize' : 'تغيير الحجم والتدوير', 'cmdsort' : 'Ù�رز', 'cmdnetmount' : 'تثبيت حجم الشبكة', // added 18.04.2012 'cmdnetunmount': 'إلغاء التثبيت', // from v2.1 added 30.04.2012 'cmdplaces' : 'الى الاماكن', // added 28.12.2014 'cmdchmod' : 'تغيير النمط', // from v2.1 added 20.6.2015 'cmdopendir' : 'Ù�تح مجلد', // from v2.1 added 13.1.2016 'cmdcolwidth' : 'إعادة تعيين عرض العمود', // from v2.1.13 added 12.06.2016 'cmdfullscreen': 'ملء الشاشة', // from v2.1.15 added 03.08.2016 'cmdmove' : 'نقل', // from v2.1.15 added 21.08.2016 'cmdempty' : 'تÙ�ريغ المجلد', // from v2.1.25 added 22.06.2017 'cmdundo' : 'تراجع', // from v2.1.27 added 31.07.2017 'cmdredo' : 'إعادة', // from v2.1.27 added 31.07.2017 'cmdpreference': 'التÙ�ضيلات', // from v2.1.27 added 03.08.2017 'cmdselectall' : 'تحديد الكل', // from v2.1.28 added 15.08.2017 'cmdselectnone': 'تحديد لا شيء', // from v2.1.28 added 15.08.2017 'cmdselectinvert': 'عكس الاختيار', // from v2.1.28 added 15.08.2017 'cmdopennew' : 'Ù�تح Ù�ÙŠ ناÙ�ذة جديدة', // from v2.1.38 added 3.4.2018 'cmdhide' : 'إخÙ�اء (الأÙ�ضلية)', // from v2.1.41 added 24.7.2018 /*********************************** buttons ***********************************/ 'btnClose' : 'إغلاق', 'btnSave' : 'Ø­Ù�ظ', 'btnRm' : 'إزالة', 'btnApply' : 'تطبيق', 'btnCancel' : 'إلغاء', 'btnNo' : 'لا', 'btnYes' : 'نعم', 'btnDiscard': 'Discard changes', 'btnMount' : 'تثبيت', // added 18.04.2012 'btnApprove': 'انتقل إلى $1 والمواÙ�قة', // from v2.1 added 26.04.2012 'btnUnmount': 'إلغاء التثبيت', // from v2.1 added 30.04.2012 'btnConv' : 'تحويل', // from v2.1 added 08.04.2014 'btnCwd' : 'هنا', // from v2.1 added 22.5.2015 'btnVolume' : 'الحجم', // from v2.1 added 22.5.2015 'btnAll' : 'الكل', // from v2.1 added 22.5.2015 'btnMime' : 'نوع MIME', // from v2.1 added 22.5.2015 'btnFileName':'إسم الملÙ�', // from v2.1 added 22.5.2015 'btnSaveClose': 'Ø­Ù�ظ وإغلاق', // from v2.1 added 12.6.2015 'btnBackup' : 'نسخ احتياطي', // fromv2.1 added 28.11.2015 'btnRename' : 'إعادة تسمية', // from v2.1.24 added 6.4.2017 'btnRenameAll' : 'إعادة تسمية (الجميع)', // from v2.1.24 added 6.4.2017 'btnPrevious' : '($1/$2) السابق', // from v2.1.24 added 11.5.2017 'btnNext' : '($1/$2) التالي', // from v2.1.24 added 11.5.2017 'btnSaveAs' : 'Ø­Ù�ظ كــ', // from v2.1.25 added 24.5.2017 /******************************** notifications ********************************/ 'ntfopen' : 'Ù�تح مجلد', 'ntffile' : 'Ù�تح ملÙ�', 'ntfreload' : 'إعادة تحميل محتوى المجلد', 'ntfmkdir' : 'إنشاء مجلد', 'ntfmkfile' : 'إنشاء ملÙ�ات', 'ntfrm' : 'حذÙ� العناصر', 'ntfcopy' : 'نسخ العناصر', 'ntfmove' : 'نقل االعناصر', 'ntfprepare' : 'Ù�حص العناصر الموجودة', 'ntfrename' : 'إعادة تسمية الملÙ�ات', 'ntfupload' : 'تحميل الملÙ�ات', 'ntfdownload' : 'تنزيل الملÙ�ات', 'ntfsave' : 'Ø­Ù�ظ الملÙ�ات', 'ntfarchive' : 'إنشاء أرشيÙ�', 'ntfextract' : 'استخراج ملÙ�ات من الأرشيÙ�', 'ntfsearch' : 'البحث Ù�ÙŠ الملÙ�ات', 'ntfresize' : 'تغيير حجم الصور', 'ntfsmth' : 'القيام بشيء ما', 'ntfloadimg' : 'تحميل الصورة', 'ntfnetmount' : 'تثبيت حجم الشبكة', // added 18.04.2012 'ntfnetunmount': 'إلغاء تثبيت حجم الشبكة', // from v2.1 added 30.04.2012 'ntfdim' : 'اكتساب أبعاد الصورة', // added 20.05.2013 'ntfreaddir' : 'قراءة معلومات المجلد', // from v2.1 added 01.07.2013 'ntfurl' : 'الحصول على URL الرابط', // from v2.1 added 11.03.2014 'ntfchmod' : 'تغيير نمط الملÙ�', // from v2.1 added 20.6.2015 'ntfpreupload': 'التحقق من اسم ملÙ� التحميل', // from v2.1 added 31.11.2015 'ntfzipdl' : 'إنشاء ملÙ� للتنزيل', // from v2.1.7 added 23.1.2016 'ntfparents' : 'الحصول على معلومات المسار', // from v2.1.17 added 2.11.2016 'ntfchunkmerge': 'معالجة الملÙ� المرÙ�وع', // from v2.1.17 added 2.11.2016 'ntftrash' : 'القيام بالرمي Ù�ÙŠ القمامة', // from v2.1.24 added 2.5.2017 'ntfrestore' : 'القيام بالاستعادة من سلة المهملات', // from v2.1.24 added 3.5.2017 'ntfchkdir' : 'التحقق من مجلد الوجهة', // from v2.1.24 added 3.5.2017 'ntfundo' : 'التراجع عن العملية السابقة', // from v2.1.27 added 31.07.2017 'ntfredo' : 'إعادة التراجع السابق', // from v2.1.27 added 31.07.2017 'ntfchkcontent' : 'Ù�حص المحتويات', // from v2.1.41 added 3.8.2018 /*********************************** volumes *********************************/ 'volume_Trash' : 'Trash', //from v2.1.24 added 29.4.2017 /************************************ dates **********************************/ 'dateUnknown' : 'غير معلوم', 'Today' : 'اليوم', 'Yesterday' : 'الأمس', 'msJan' : 'كانون الثاني', 'msFeb' : 'شباط', 'msMar' : 'آذار', 'msApr' : 'نيسان', 'msMay' : 'أيار', 'msJun' : 'حزيران', 'msJul' : 'تموز', 'msAug' : 'آب', 'msSep' : 'أيلول', 'msOct' : 'تشرين الأول', 'msNov' : 'تشرين الثاني', 'msDec' : 'كانون الأول ', 'January' : 'كانون الثاني', 'February' : 'شباط', 'March' : 'آذار', 'April' : 'نيسان', 'May' : 'أيار', 'June' : 'حزيران', 'July' : 'تموز', 'August' : 'آب', 'September' : 'أيلول', 'October' : 'تشرين الأول', 'November' : 'تشرين الثاني', 'December' : 'كانون الثاني', 'Sunday' : 'الأحد', 'Monday' : 'الاثنين', 'Tuesday' : 'الثلاثاء', 'Wednesday' : 'الإربعاء', 'Thursday' : 'الخميس', 'Friday' : 'الجمعة', 'Saturday' : 'السبت', 'Sun' : 'الأحد', 'Mon' : 'الاثنين', 'Tue' : 'الثلاثاء', 'Wed' : 'الإربعاء', 'Thu' : 'الخميس', 'Fri' : 'الجمعة', 'Sat' : 'السبت', /******************************** sort variants ********************************/ 'sortname' : 'حسب الاسم', 'sortkind' : 'حسب النوع', 'sortsize' : 'حسب الحجم', 'sortdate' : 'حسب التاريخ', 'sortFoldersFirst' : 'المجلدات أولا', 'sortperm' : 'حسب الصلاحية', // from v2.1.13 added 13.06.2016 'sortmode' : 'حسب النمط', // from v2.1.13 added 13.06.2016 'sortowner' : 'حسب المالك', // from v2.1.13 added 13.06.2016 'sortgroup' : 'حسب المجموعة', // from v2.1.13 added 13.06.2016 'sortAlsoTreeview' : 'أيضا عرض الشجرة', // from v2.1.15 added 01.08.2016 /********************************** new items **********************************/ 'file.txt بدون عنوان' : 'NewFile.txt', // added 10.11.2015 'مجلد بلا عنوان' : 'NewFolder', // added 10.11.2015 'Archive' : 'NewArchive', // from v2.1 added 10.11.2015 'untitled file' : 'NewFile.$1', // from v2.1.41 added 6.8.2018 'extentionfile' : '$1: ملÙ�', // from v2.1.41 added 6.8.2018 'extentiontype' : '$1: $2', // from v2.1.43 added 17.10.2018 /********************************** messages **********************************/ 'confirmReq' : 'التأكيد مطلوب', 'confirmRm' : 'هل تريد بالتأكيد إزالة العناصر نهائيًا؟
          لا يمكن التراجع عن هذا الإجراء! ', 'confirmRepl' : 'استبدال المل� القديم بمل� جديد؟ (إذا كان يحتوي على مجلدات ، �سيتم دمجه. للنسخ الاحتياطي والاستبدال ، حدد النسخ الاحتياطي.)', 'confirmRest' : 'هل تريد استبدال العنصر الموجود بالعنصر الموجود �ي المهملات؟', // fromv2.1.24 added 5.5.2017 'confirmConvUTF8' : 'ليس بصيغة UTF-8
          التحويل إلى UTF-8؟
          تصبح المحتويات UTF-8 بالح�ظ بعد التحويل.', // from v2.1 added 08.04.2014 'confirmNonUTF8' : 'تعذر الكش� عن ترميز الأحر� لهذا المل�. تحتاج إلى التحويل مؤقتاً إلى UTF-8 للتحرير.
          الرجاء تحديد ترميز الأحر� لهذا المل�.', // from v2.1.19 added 28.11.2016 'confirmNotSave' : 'لقد تم تعديله.
          قد تخسر العمل إذا لم تقم بح�ظ التغييرات.', // from v2.1 added 15.7.2015 'confirmTrash' : 'هل أنت متأكد أنك تريد نقل العناصر إلى سلة المهملات؟', //from v2.1.24 added 29.4.2017 'confirmMove' : 'هل أنت متأكد أنك تريد نقل العناصر إلى "$1"?', //from v2.1.50 added 27.7.2019 'apllyAll' : 'تطبيق على الكل', 'name' : 'الاسم', 'size' : 'الحجم', 'perms' : 'الصلاحيات', 'modify' : 'التعديل', 'kind' : 'النوع', 'read' : 'قابل للقراءة', 'write' : 'قابل للكتابة', 'noaccess' : 'وصول ممنوع', 'and' : 'و', 'unknown' : 'غير معرو�', 'selectall' : 'تحديد كل العناصر', 'selectfiles' : 'تحديد العناصر', 'selectffile' : 'تحديد العنصر الأول', 'selectlfile' : 'تحديد العنصر الأخير', 'viewlist' : 'عرض القائمة', 'viewicons' : 'عرض أيْقونات', 'viewSmall' : 'أيقونات صغيرة', // from v2.1.39 added 22.5.2018 'viewMedium' : 'أيقونات متوسطة', // from v2.1.39 added 22.5.2018 'viewLarge' : 'أيقونات كبيرة', // from v2.1.39 added 22.5.2018 'viewExtraLarge' : 'أيقونات كبيرة جداً', // from v2.1.39 added 22.5.2018 'places' : 'المواقع', 'calc' : 'حساب', 'path' : 'المسار', 'aliasfor' : 'اسم مستعار لـ', 'locked' : 'مق�ل', 'dim' : 'الأبعاد', 'files' : 'مل�ات', 'folders' : 'مجلدات', 'items' : 'عناصر', 'yes' : 'نعم', 'no' : 'لا', 'link' : 'الرابط', 'searcresult' : 'نتائج البحث', 'selected' : 'العناصر المحددة', 'about' : 'حول', 'shortcuts' : 'الاختصارات', 'help' : 'المساعدة', 'webfm' : 'مدير مل�ات الويب', 'ver' : 'الإصدار', 'protocolver' : 'إصدار البرتوكول', 'homepage' : 'رئيسية المشروع', 'docs' : 'الوثائق', 'github' : 'شاركنا على Github', 'twitter' : 'تابعنا على تويتر', 'facebook' : 'انضم إلينا على ال�يس بوك', 'team' : 'ال�ريق', 'chiefdev' : 'رئيس المبرمجين', 'developer' : 'مبرمج', 'contributor' : 'مساهم', 'maintainer' : 'مشر�', 'translator' : 'مترجم', 'icons' : 'أيقونات', 'dontforget' : 'ولا تنس أن تأخذ المنش�ة', 'shortcutsof' : 'الاختصارات غير م�علة', 'dropFiles' : 'إ�لات المل�ات هنا', 'or' : 'أو', 'selectForUpload' : 'اختر المل�ات', 'moveFiles' : 'نقل العناصر', 'copyFiles' : 'نسخ العناصر', 'restoreFiles' : 'استعادة العناصر', // from v2.1.24 added 5.5.2017 'rmFromPlaces' : 'إزالة من الأماكن', 'aspectRatio' : 'ابعاد متزنة', 'scale' : 'مقياس', 'width' : 'عرض', 'height' : 'طول', 'resize' : 'تغيير الحجم', 'crop' : 'قص', 'rotate' : 'تدوير', 'rotate-cw' : 'استدارة 90 درجة مع عقارب الساعة', 'rotate-ccw' : 'استدارة 90 درجة عكس عقارب الساعة', 'degree' : '°', 'netMountDialogTitle' : 'تثبيت حجم الشبكة', // added 18.04.2012 'protocol' : 'البروتوكول', // added 18.04.2012 'host' : 'المضي�', // added 18.04.2012 'port' : 'المن�ذ', // added 18.04.2012 'user' : 'المستخدم', // added 18.04.2012 'pass' : 'كلمة المرور', // added 18.04.2012 'confirmUnmount' : 'هل أنت متأكد من إلغاء تثبيت $1؟', // from v2.1 added 30.04.2012 'dropFilesBrowser': 'قم بإسقاط أو لصق المل�ات من المتص�ح', // from v2.1 added 30.05.2012 'dropPasteFiles' : 'قم بإسقاط المل�ات أو لصق الروابط أو الصور (الحا�ظة) هنا', // from v2.1 added 07.04.2014 'encoding' : 'الترميز', // from v2.1 added 19.12.2014 'locale' : 'اللغة', // from v2.1 added 19.12.2014 'searchTarget' : 'الهد�: $1', // from v2.1 added 22.5.2015 'searchMime' : 'البحث عن طريق إدخال نوع MIME', // from v2.1 added 22.5.2015 'owner' : 'المالك', // from v2.1 added 20.6.2015 'group' : 'المجموعة', // from v2.1 added 20.6.2015 'other' : 'أخرى', // from v2.1 added 20.6.2015 'execute' : 'تن�يذ', // from v2.1 added 20.6.2015 'perm' : 'التصريح', // from v2.1 added 20.6.2015 'mode' : 'النمط', // from v2.1 added 20.6.2015 'emptyFolder' : 'المجلد �ارغ', // from v2.1.6 added 30.12.2015 'emptyFolderDrop' : 'المجلد �ارغ\\إ�لات لإضا�ة عناصر', // from v2.1.6 added 30.12.2015 'emptyFolderLTap' : 'المجلد �ارغ\\نقرة طويلة لإضا�ة العناصر', // from v2.1.6 added 30.12.2015 'quality' : 'النوعية', // from v2.1.6 added 5.1.2016 'autoSync' : 'مزامنة آلية', // from v2.1.6 added 10.1.2016 'moveUp' : 'تحريك لأعلى', // from v2.1.6 added 18.1.2016 'getLink' : 'الحصول على رابط URL', // from v2.1.7 added 9.2.2016 'selectedItems' : 'العناصر المحددة ($1)', // from v2.1.7 added 2.19.2016 'folderId' : 'معر� المجلد', // from v2.1.10 added 3.25.2016 'offlineAccess' : 'السماح بالوصول دون اتصال', // from v2.1.10 added 3.25.2016 'reAuth' : 'لإعادة المصادقة', // from v2.1.10 added 3.25.2016 'nowLoading' : 'جاري التحميل الآن...', // from v2.1.12 added 4.26.2016 'openMulti' : '�تح مل�ات متعددة', // from v2.1.12 added 5.14.2016 'openMultiConfirm': 'أنت تحاول �تح $1 مل�. هل أنت متأكد أنك تريد ال�تح �ي المتص�ح؟', // from v2.1.12 added 5.14.2016 'emptySearch' : 'نتائج البحث �ارغة �ي هد� البحث.', // from v2.1.12 added 5.16.2016 'editingFile' : 'إنها تقوم بتحرير مل�.', // from v2.1.13 added 6.3.2016 'hasSelected' : 'لقد قمت بتحديد $1 عناصر.', // from v2.1.13 added 6.3.2016 'hasClipboard' : 'يوجد لديك $1 عناصر �ي الحا�ظة.', // from v2.1.13 added 6.3.2016 'incSearchOnly' : 'البحث المتزايد هو �قط من العرض الحالي.', // from v2.1.13 added 6.30.2016 'reinstate' : 'إعادة', // from v2.1.15 added 3.8.2016 'complete' : '$1 إكتمل', // from v2.1.15 added 21.8.2016 'contextmenu' : 'قائمة السياق', // from v2.1.15 added 9.9.2016 'pageTurning' : 'قلب الص�حة', // from v2.1.15 added 10.9.2016 'volumeRoots' : 'جذور الحجم', // from v2.1.16 added 16.9.2016 'reset' : 'إعادة تعيين', // from v2.1.16 added 1.10.2016 'bgcolor' : 'لون الخل�ية', // from v2.1.16 added 1.10.2016 'colorPicker' : 'أداة انتقاء اللون', // from v2.1.16 added 1.10.2016 '8pxgrid' : 'شبكة 8 بكسل', // from v2.1.16 added 4.10.2016 'enabled' : 'م�عل', // from v2.1.16 added 4.10.2016 'disabled' : 'معطل', // from v2.1.16 added 4.10.2016 'emptyIncSearch' : 'نتائج البحث �ارغة �ي العرض الحالي. \\ اضغط على [Enter] لتوسيع هد� البحث.', // from v2.1.16 added 5.10.2016 'emptyLetSearch' : 'نتائج البحث الحر� الأول �ارغة �ي العرض الحالي.', // from v2.1.23 added 24.3.2017 'textLabel' : 'تسمية نصية', // from v2.1.17 added 13.10.2016 'minsLeft' : '$1 دقائق باقية', // from v2.1.17 added 13.11.2016 'openAsEncoding' : 'إعادة �تح مع الترميز المحدد', // from v2.1.19 added 2.12.2016 'saveAsEncoding' : 'ح�ظ مع الترميز المحدد', // from v2.1.19 added 2.12.2016 'selectFolder' : 'تحديد مجلد', // from v2.1.20 added 13.12.2016 'firstLetterSearch': 'البحث بالحر� الأول', // from v2.1.23 added 24.3.2017 'presets' : 'الإعدادات المسبقة', // from v2.1.25 added 26.5.2017 'tooManyToTrash' : 'هناك عدد كبير جداً من العناصر لذا لا يمكن وضعها �ي سلة المهملات.', // from v2.1.25 added 9.6.2017 'TextArea' : 'منطقة النص', // from v2.1.25 added 14.6.2017 'folderToEmpty' : 'إ�راغ المجلد "$1".', // from v2.1.25 added 22.6.2017 'filderIsEmpty' : 'لا توجد عناصر �ي مجلد "$1".', // from v2.1.25 added 22.6.2017 'preference' : 'الأ�ضلية', // from v2.1.26 added 28.6.2017 'language' : 'اللغة', // from v2.1.26 added 28.6.2017 'clearBrowserData': 'تهيئة الإعدادات المح�وظة �ي هذا المتص�ح', // from v2.1.26 added 28.6.2017 'toolbarPref' : 'إعدادات شريط الأدوات', // from v2.1.27 added 2.8.2017 'charsLeft' : '... $1 حرو� متبقية.', // from v2.1.29 added 30.8.2017 'linesLeft' : '... $1 سطور متبقية.', // from v2.1.52 added 16.1.2020 'sum' : 'المجموع', // from v2.1.29 added 28.9.2017 'roughFileSize' : 'حجم مل� تقريبي', // from v2.1.30 added 2.11.2017 'autoFocusDialog' : 'التركيز على عنصر الحوار مع تمرير الماوس', // from v2.1.30 added 2.11.2017 'select' : 'حدد', // from v2.1.30 added 23.11.2017 'selectAction' : 'الإجراء عند تحديد المل�', // from v2.1.30 added 23.11.2017 'useStoredEditor' : 'ال�تح باستخدام المحرر المستخدم آخر مرة', // from v2.1.30 added 23.11.2017 'selectinvert' : 'عكس الاختيار', // from v2.1.30 added 25.11.2017 'renameMultiple' : 'هل أنت متأكد أنك تريد إعادة تسمية $1 عناصر محددة مثل $2؟
          هذا لا يمكن التراجع عنه !', // from v2.1.31 added 4.12.2017 'batchRename' : 'إعادة تسمية الحزمة', // from v2.1.31 added 8.12.2017 'plusNumber' : '+ رقم', // from v2.1.31 added 8.12.2017 'asPrefix' : 'إضاÙ�Ø© بادئة', // from v2.1.31 added 8.12.2017 'asSuffix' : 'إضاÙ�Ø© لاحقة', // from v2.1.31 added 8.12.2017 'changeExtention' : 'تغيير الامتداد', // from v2.1.31 added 8.12.2017 'columnPref' : 'إعدادات الأعمدة (عرض القائمة)', // from v2.1.32 added 6.2.2018 'reflectOnImmediate' : 'ستنعكس جميع التغييرات على الÙ�ور على الأرشيÙ�.', // from v2.1.33 added 2.3.2018 'reflectOnUnmount' : 'لن تنعكس أي تغييرات حتى يتم Ù�Ùƒ هذا المجلد.', // from v2.1.33 added 2.3.2018 'unmountChildren' : 'المجلد (المجلدات) التالية المركبة على هذا المجلد غير مثبتة أيضاً. هل أنت متأكد من إلغاء تحميله؟', // from v2.1.33 added 5.3.2018 'selectionInfo' : 'معلومات التحديد', // from v2.1.33 added 7.3.2018 'hashChecker' : 'خوارزميات لإظهار تجزئة الملÙ�', // from v2.1.33 added 10.3.2018 'infoItems' : 'عناصر المعلومات (لوحة معلومات التحديد)', // from v2.1.38 added 28.3.2018 'pressAgainToExit': 'اضغط مرة أخرى للخروج.', // from v2.1.38 added 1.4.2018 'toolbar' : 'شريط الأدوات', // from v2.1.38 added 4.4.2018 'workspace' : 'مساحة العمل', // from v2.1.38 added 4.4.2018 'dialog' : 'الحوار', // from v2.1.38 added 4.4.2018 'all' : 'الكل', // from v2.1.38 added 4.4.2018 'iconSize' : 'حجم الأيقونة (عرض الأيقونات)', // from v2.1.39 added 7.5.2018 'editorMaximized' : 'اÙ�تح ناÙ�ذة المحرر المكبرة', // from v2.1.40 added 30.6.2018 'editorConvNoApi' : 'نظراً لعدم توÙ�ر التحويل بواسطة API حالياً ØŒ يرجى التحويل على موقع الويب.', //from v2.1.40 added 8.7.2018 'editorConvNeedUpload' : 'بعد التحويل ØŒ يجب أن تقوم بالتحميل مع عنوان رابط العنصر أو الملÙ� الذي تم تنزيله لحÙ�ظ الملÙ� المحول.', //from v2.1.40 added 8.7.2018 'convertOn' : 'تحويل على موقع $1', // from v2.1.40 added 10.7.2018 'integrations' : 'تكاملات', // from v2.1.40 added 11.7.2018 'integrationWith' : 'يحتوي elFinder على الخدمات الخارجية التالية المتكاملة. يرجى التحقق من شروط الاستخدام وسياسة الخصوصية وما إلى ذلك قبل استخدامها.', // from v2.1.40 added 11.7.2018 'showHidden' : 'إظهار العناصر المخÙ�ية', // from v2.1.41 added 24.7.2018 'hideHidden' : 'إخÙ�اء العناصر المخÙ�ية', // from v2.1.41 added 24.7.2018 'toggleHidden' : 'إظهار / إخÙ�اء العناصر المخÙ�ية', // from v2.1.41 added 24.7.2018 'makefileTypes' : 'أنواع الملÙ�ات لتÙ�عيلها مع "ملÙ� جديد"', // from v2.1.41 added 7.8.2018 'typeOfTextfile' : 'نوع الملÙ� النصي', // from v2.1.41 added 7.8.2018 'add' : 'إضاÙ�Ø©', // from v2.1.41 added 7.8.2018 'theme' : 'الثيم', // from v2.1.43 added 19.10.2018 'default' : 'الاÙ�تراضي', // from v2.1.43 added 19.10.2018 'description' : 'الوصÙ�', // from v2.1.43 added 19.10.2018 'website' : 'الموقع الالكتروني', // from v2.1.43 added 19.10.2018 'author' : 'المؤلÙ�', // from v2.1.43 added 19.10.2018 'email' : 'البريد الالكتروني', // from v2.1.43 added 19.10.2018 'license' : 'الرخصة', // from v2.1.43 added 19.10.2018 'exportToSave' : 'لا يمكن Ø­Ù�ظ هذا العنصر. لتجنب Ù�قدان التحريرات التي تحتاجها للتصدير إلى جهاز الكمبيوتر الخاص بك.', // from v2.1.44 added 1.12.2018 'dblclickToSelect': 'انقر نقراً مزدوجاً Ù�وق الملÙ� لتحديده.', // from v2.1.47 added 22.1.2019 'useFullscreen' : 'استخدام وضع ملء الشاشة', // from v2.1.47 added 19.2.2019 /********************************** mimetypes **********************************/ 'kindUnknown' : 'غير معروÙ�', 'kindRoot' : 'جذر الحجم', // from v2.1.16 added 16.10.2016 'kindFolder' : 'مجلد', 'kindSelects' : 'مختارات', // from v2.1.29 added 29.8.2017 'kindAlias' : 'اسم مستعار', 'kindAliasBroken' : 'اسم مستعار مكسور', // applications 'kindApp' : 'التطبيق', 'kindPostscript' : 'وثيقة Postscript', 'kindMsOffice' : 'وثيقة Microsoft Office', 'kindMsWord' : 'وثيقة Microsoft Word', 'kindMsExcel' : 'وثيقة Microsoft Excel', 'kindMsPP' : 'عرض تقديمي Microsoft Powerpoint', 'kindOO' : 'وثيقة Open Office', 'kindAppFlash' : 'تطبيق Ù�لاش', 'kindPDF' : 'تنسيق الوثائق المحمولة (PDF)', 'kindTorrent' : 'ملÙ� Bittorrent ', 'kind7z' : 'أرشيÙ� 7z', 'kindTAR' : 'أرشيÙ� TAR', 'kindGZIP' : 'أرشيÙ� GZIP', 'kindBZIP' : 'أرشيÙ� BZIP', 'kindXZ' : 'أرشيÙ� XZ', 'kindZIP' : 'أرشيÙ� ZIP', 'kindRAR' : 'أرشيÙ� RAR', 'kindJAR' : 'أرشيÙ� Java JAR', 'kindTTF' : 'خط True Type ', 'kindOTF' : 'خط Open Type ', 'kindRPM' : 'حزمة RPM', // fonts 'kindFont' : 'خط', 'kindSFNT' : 'خط SFNT', 'kindEOT' : 'خط Embedded Open Type', 'kindWOFF' : 'خط Web Open Font Format', 'kindWOFF2' : 'خط Web Open Font Format 2', // texts 'kindText' : 'وثيقة نصية', 'kindTextPlain' : 'نص عادي', 'kindPHP' : 'مصدر PHP', 'kindCSS' : 'ورقة الأنماط المتتالية', 'kindHTML' : 'وثيقة HTML', 'kindJS' : 'مصدر Javascript', 'kindRTF' : 'Rich Text Format', 'kindC' : 'مصدر C', 'kindCHeader' : 'مصدر C header', 'kindCPP' : 'مصدر C++', 'kindCPPHeader' : 'مصدر C++ header', 'kindShell' : 'مصدر Unix shell', 'kindPython' : 'مصدر Python', 'kindJava' : 'مصدر Java', 'kindRuby' : 'مصدر Ruby', 'kindPerl' : 'مصدر Perl', 'kindSQL' : 'مصدر SQL', 'kindXML' : 'وثيقة XML', 'kindAWK' : 'مصدر AWK', 'kindCSV' : 'ملÙ� CSV', 'kindDOCBOOK' : 'وثيقة Docbook XML', 'kindMarkdown' : 'نص Markdown', // added 20.7.2015 // images 'kindImage' : 'صورة', 'kindBMP' : 'صورة BMP', 'kindJPEG' : 'صورة JPEG', 'kindGIF' : 'صورة GIF', 'kindPNG' : 'صورة PNG', 'kindTIFF' : 'صورة TIFF', 'kindTGA' : 'صورة TGA', 'kindPSD' : 'صورة Adobe Photoshop', 'kindXBITMAP' : 'صورة X bitmap', 'kindPXM' : 'صورة Pixelmator', // media 'kindAudio' : 'وسائط صوت', 'kindAudioMPEG' : 'ملÙ� صوتي MPEG ', 'kindAudioMPEG4' : 'ملÙ� صوتي MPEG-4', 'kindAudioMIDI' : 'ملÙ� صوتي MIDI', 'kindAudioOGG' : 'ملÙ� صوتي Ogg Vorbis', 'kindAudioWAV' : 'ملÙ� صوتي WAV', 'AudioPlaylist' : 'قائمة تشغيل MP3', 'kindVideo' : 'وسائط Ù�يديو', 'kindVideoDV' : 'ملÙ� Ù�يديو DV', 'kindVideoMPEG' : 'ملÙ� Ù�يديو MPEG', 'kindVideoMPEG4' : 'ملÙ� Ù�يديو MPEG-4', 'kindVideoAVI' : 'ملÙ� Ù�يديو AVI', 'kindVideoMOV' : 'ملÙ� Ù�يديو Quick Time', 'kindVideoWM' : 'ملÙ� Ù�يديو Windows Media', 'kindVideoFlash' : 'ملÙ� Ù�يديو Flash', 'kindVideoMKV' : 'ملÙ� Ù�يديو Matroska', 'kindVideoOGG' : 'ملÙ� Ù�يديو Ogg' } }; })); PK!¶¨PP@file-manager-advanced/application/library/js/i18n/elfinder.ro.jsnu„[µü¤/** * Română translation * @author Cristian Tabacitu * @version 2015-11-13 */ (function(root, factory) { if (typeof define === 'function' && define.amd) { define(['elfinder'], factory); } else if (typeof exports !== 'undefined') { module.exports = factory(require('elfinder')); } else { factory(root.elFinder); } }(this, function(elFinder) { elFinder.prototype.i18.ro = { translator : 'Cristian Tabacitu <hello@tabacitu.ro>', language : 'Română', direction : 'ltr', dateFormat : 'd M Y h:i', // Mar 13, 2012 05:27 PM fancyDateFormat : '$1 h:i A', // will produce smth like: Today 12:25 PM messages : { /********************************** errors **********************************/ 'error' : 'Eroare', 'errUnknown' : 'Eroare necunoscută.', 'errUnknownCmd' : 'Comandă necunoscuta.', 'errJqui' : 'ConfiguraÈ›ie jQuery UI necunoscută. Componentele selectable, draggable È™i droppable trebuie să fie incluse.', 'errNode' : 'elFinder necesită ca DOM Element să fie creat.', 'errURL' : 'ConfiguraÈ›ie elFinder nevalidă! URL option nu este setat.', 'errAccess' : 'Acces interzis.', 'errConnect' : 'Nu ne-am putut conecta la backend.', 'errAbort' : 'Conexiunea a fost oprită.', 'errTimeout' : 'Conexiunea a fost întreruptă.', 'errNotFound' : 'Nu am gasit backend-ul.', 'errResponse' : 'Răspuns backend greÈ™it.', 'errConf' : 'ConfiguraÈ›ie backend greÈ™ită.', 'errJSON' : 'Modulul PHP JSON nu este instalat.', 'errNoVolumes' : 'Volumele citibile nu sunt disponibile.', 'errCmdParams' : 'Parametri greÈ™iÈ›i pentru comanda "$1".', 'errDataNotJSON' : 'Datele nu sunt în format JSON.', 'errDataEmpty' : 'Datele sunt goale.', 'errCmdReq' : 'Cererea către backend necesită un nume de comandă.', 'errOpen' : 'Nu am putut deschide "$1".', 'errNotFolder' : 'Obiectul nu este un dosar.', 'errNotFile' : 'Obiectul nu este un fiÈ™ier.', 'errRead' : 'Nu am putut citi "$1".', 'errWrite' : 'Nu am putu scrie în "$1".', 'errPerm' : 'Nu ai permisiunea necesară.', 'errLocked' : '"$1" este blocat È™i nu poate fi redenumit, mutat sau È™ters.', 'errExists' : 'Un fiÈ™ier cu numele "$1" există deja.', 'errInvName' : 'Numele pentru fiÈ™ier este greÈ™it.', 'errFolderNotFound' : 'Nu am găsit dosarul.', 'errFileNotFound' : 'Nu am găsit fiÈ™ierul.', 'errTrgFolderNotFound' : 'Nu am găsit dosarul pentru destinaÈ›ie "$1".', 'errPopup' : 'Browserul tău a prevenit deschiderea ferestrei popup. Pentru a deschide fiÈ™ierul permite deschidere ferestrei.', 'errMkdir' : 'Nu am putut crea dosarul "$1".', 'errMkfile' : 'Nu am putut crea fiÈ™ierul "$1".', 'errRename' : 'Nu am putut redenumi "$1".', 'errCopyFrom' : 'Copierea fiÈ™ierelor de pe volumul "$1" este interzisă.', 'errCopyTo' : 'Copierea fiÈ™ierelor către volumul "$1" este interzisă.', 'errMkOutLink' : 'Nu am putut crea linkul în afara volumului rădăcină.', // from v2.1 added 03.10.2015 'errUpload' : 'Eroare de upload.', // old name - errUploadCommon 'errUploadFile' : 'Nu am putut urca "$1".', // old name - errUpload 'errUploadNoFiles' : 'Nu am găsit fiÈ™iere pentru a le urca.', 'errUploadTotalSize' : 'Datele depâșest limita maximă de mărime.', // old name - errMaxSize 'errUploadFileSize' : 'FiÈ™ierul este prea mare.', // old name - errFileMaxSize 'errUploadMime' : 'Acest tip de fiÈ™ier nu este permis.', 'errUploadTransfer' : 'Eroare la transferarea "$1".', 'errUploadTemp' : 'Nu am putut crea fiÈ™ierul temporar pentru upload.', // from v2.1 added 26.09.2015 'errNotReplace' : 'Obiectul "$1" există deja în acest loc È™i nu poate fi înlocuit de un obiect de alt tip.', // new 'errReplace' : 'Nu am putut înlocui "$1".', 'errSave' : 'Nu am putut salva "$1".', 'errCopy' : 'Nu am putut copia "$1".', 'errMove' : 'Nu am putut muta "$1".', 'errCopyInItself' : 'Nu am putut copia "$1" în el însuÈ™i.', 'errRm' : 'Nu am putut È™terge "$1".', 'errRmSrc' : 'Nu am putut È™terge fiÈ™ierul sursă.', 'errExtract' : 'Nu am putut extrage fiÈ™ierele din "$1".', 'errArchive' : 'Nu am putut crea arhiva.', 'errArcType' : 'Arhiva este de un tip nesuportat.', 'errNoArchive' : 'FiÈ™ierul nu este o arhiva sau este o arhivă de un tip necunoscut.', 'errCmdNoSupport' : 'Backend-ul nu suportă această comandă.', 'errReplByChild' : 'Dosarul “$1â€� nu poate fi înlocuit de un element pe care el îl conÈ›ine.', 'errArcSymlinks' : 'Din motive de securitate, arhiva nu are voie să conÈ›ină symlinks sau fiÈ™iere cu nume interzise.', // edited 24.06.2012 'errArcMaxSize' : 'FiÈ™ierul arhivei depășeÈ™te mărimea maximă permisă.', 'errResize' : 'Nu am putut redimensiona "$1".', 'errResizeDegree' : 'Grad de rotaÈ›ie nevalid.', // added 7.3.2013 'errResizeRotate' : 'Imaginea nu a fost rotită.', // added 7.3.2013 'errResizeSize' : 'Mărimea imaginii este nevalidă.', // added 7.3.2013 'errResizeNoChange' : 'Mărimea imaginii nu a fost schimbată.', // added 7.3.2013 'errUsupportType' : 'Tipul acesta de fiÈ™ier nu este suportat.', 'errNotUTF8Content' : 'FiÈ™ierul "$1" nu foloseÈ™te UTF-8 È™i nu poate fi editat.', // added 9.11.2011 'errNetMount' : 'Nu am putut încărca "$1".', // added 17.04.2012 'errNetMountNoDriver' : 'Protocol nesuportat.', // added 17.04.2012 'errNetMountFailed' : 'ÃŽncărcare eÈ™uată.', // added 17.04.2012 'errNetMountHostReq' : 'Gazda este necesară.', // added 18.04.2012 'errSessionExpires' : 'Sesiunea a expirat datorită lipsei de activitate.', 'errCreatingTempDir' : 'Nu am putut crea fiÈ™ierul temporar: "$1"', 'errFtpDownloadFile' : 'Nu am putut descarca fiÈ™ierul de pe FTP: "$1"', 'errFtpUploadFile' : 'Nu am putut încărca fiÈ™ierul pe FTP: "$1"', 'errFtpMkdir' : 'Nu am putut crea acest dosar pe FTP: "$1"', 'errArchiveExec' : 'Eroare la arhivarea fiÈ™ierelor: "$1"', 'errExtractExec' : 'Eroare la dezarhivarea fiÈ™ierelor: "$1"', 'errNetUnMount' : 'Nu am putut elimina volumul', // from v2.1 added 30.04.2012 'errConvUTF8' : 'Nu poate fi convertit la UTF-8', // from v2.1 added 08.04.2014 'errFolderUpload' : 'Pentru a urca dosare încearcă Google Chrome.', // from v2.1 added 26.6.2015 /******************************* commands names ********************************/ 'cmdarchive' : 'Creeaza arhivă', 'cmdback' : 'ÃŽnapoi', 'cmdcopy' : 'Copiază', 'cmdcut' : 'Taie', 'cmddownload' : 'Descarcă', 'cmdduplicate' : 'Creează duplicat', 'cmdedit' : 'Modifică fiÈ™ier', 'cmdextract' : 'Extrage fiÈ™ierele din arhivă', 'cmdforward' : 'ÃŽnainte', 'cmdgetfile' : 'Alege fiÈ™iere', 'cmdhelp' : 'Despre acest software', 'cmdhome' : 'Acasă', 'cmdinfo' : 'InformaÈ›ii', 'cmdmkdir' : 'Dosar nou', 'cmdmkfile' : 'FiÈ™ier nou', 'cmdopen' : 'Deschide', 'cmdpaste' : 'LipeÈ™te', 'cmdquicklook' : 'Previzualizează', 'cmdreload' : 'Reîncarcă', 'cmdrename' : 'RedenumeÈ™te', 'cmdrm' : 'Șterge', 'cmdsearch' : 'GăseÈ™te fiÈ™iere', 'cmdup' : 'Mergi la dosarul părinte', 'cmdupload' : 'Urcă fiÈ™iere', 'cmdview' : 'Vezi', 'cmdresize' : 'Redimensionează & roteÈ™te', 'cmdsort' : 'Sortează', 'cmdnetmount' : 'ÃŽncarcă volum din reÈ›ea', // added 18.04.2012 'cmdnetunmount': 'Elimină volum', // from v2.1 added 30.04.2012 'cmdplaces' : 'La Locuri', // added 28.12.2014 'cmdchmod' : 'Schimbă mod', // from v2.1 added 20.6.2015 /*********************************** buttons ***********************************/ 'btnClose' : 'ÃŽnchide', 'btnSave' : 'Salvează', 'btnRm' : 'Șterge', 'btnApply' : 'Aplică', 'btnCancel' : 'Anulează', 'btnNo' : 'Nu', 'btnYes' : 'Da', 'btnDiscard': 'Discard changes', 'btnMount' : 'ÃŽncarcă', // added 18.04.2012 'btnApprove': 'Mergi la $1 È™i aprobă', // from v2.1 added 26.04.2012 'btnUnmount': 'Elimină volum', // from v2.1 added 30.04.2012 'btnConv' : 'ConverteÈ™te', // from v2.1 added 08.04.2014 'btnCwd' : 'Aici', // from v2.1 added 22.5.2015 'btnVolume' : 'Volum', // from v2.1 added 22.5.2015 'btnAll' : 'Toate', // from v2.1 added 22.5.2015 'btnMime' : 'Tipuri MIME', // from v2.1 added 22.5.2015 'btnFileName':'Nume fiÈ™ier', // from v2.1 added 22.5.2015 'btnSaveClose': 'Salvează È™i închide', // from v2.1 added 12.6.2015 /******************************** notifications ********************************/ 'ntfopen' : 'Deschide dosar', 'ntffile' : 'Deschide fiÈ™ier', 'ntfreload' : 'Actualizează conÈ›inutul dosarului', 'ntfmkdir' : 'Se creează dosarul', 'ntfmkfile' : 'Se creează fiÈ™ierele', 'ntfrm' : 'Șterge fiÈ™iere', 'ntfcopy' : 'Copiază fiÈ™iere', 'ntfmove' : 'Mută fiÈ™iere', 'ntfprepare' : 'PregăteÈ™te copierea fiÈ™ierelor', 'ntfrename' : 'RedenumeÈ™te fiÈ™iere', 'ntfupload' : 'Se urcă fiÈ™ierele', 'ntfdownload' : 'Se descarcă fiÈ™ierele', 'ntfsave' : 'Salvează fiÈ™iere', 'ntfarchive' : 'Se creează arhiva', 'ntfextract' : 'Se extrag fiÈ™ierele din arhivă', 'ntfsearch' : 'Se caută fiÈ™ierele', 'ntfresize' : 'Se redimnesionează imaginile', 'ntfsmth' : 'Se întamplă ceva', 'ntfloadimg' : 'Se încarcă imaginea', 'ntfnetmount' : 'Se încarcă volumul din reÈ›ea', // added 18.04.2012 'ntfnetunmount': 'Se elimină volumul din reÈ›ea', // from v2.1 added 30.04.2012 'ntfdim' : 'Se preiau dimensiunile imaginii', // added 20.05.2013 'ntfreaddir' : 'Se citesc informaÈ›iile dosarului', // from v2.1 added 01.07.2013 'ntfurl' : 'Se preia URL-ul din link', // from v2.1 added 11.03.2014 'ntfchmod' : 'Se schimba modul de fiÈ™ier', // from v2.1 added 20.6.2015 /************************************ dates **********************************/ 'dateUnknown' : 'necunoscută', 'Today' : 'Astăzi', 'Yesterday' : 'Ieri', 'msJan' : 'Ian', 'msFeb' : 'Feb', 'msMar' : 'Mar', 'msApr' : 'Apr', 'msMay' : 'Mai', 'msJun' : 'Iun', 'msJul' : 'Iul', 'msAug' : 'Aug', 'msSep' : 'Sep', 'msOct' : 'Oct', 'msNov' : 'Nov', 'msDec' : 'Dec', 'January' : 'Ianuarie', 'February' : 'Februarie', 'March' : 'Martie', 'April' : 'Aprilie', 'May' : 'Mai', 'June' : 'Iunie', 'July' : 'Iulie', 'August' : 'August', 'September' : 'Septembrie', 'October' : 'Octombrie', 'November' : 'Noiembrie', 'December' : 'Decembrie', 'Sunday' : 'Duminică', 'Monday' : 'Luni', 'Tuesday' : 'MarÈ›i', 'Wednesday' : 'Miercuri', 'Thursday' : 'Joi', 'Friday' : 'Vineri', 'Saturday' : 'Sâmbătă', 'Sun' : 'Du', 'Mon' : 'Lu', 'Tue' : 'Ma', 'Wed' : 'Mi', 'Thu' : 'Jo', 'Fri' : 'Vi', 'Sat' : 'Sâ', /******************************** sort variants ********************************/ 'sortname' : 'după nume', 'sortkind' : 'după tip', 'sortsize' : 'după mărime', 'sortdate' : 'după dată', 'sortFoldersFirst' : 'Dosarele primele', /********************************** new items **********************************/ 'untitled file.txt' : 'FisierNou.txt', // added 10.11.2015 'untitled folder' : 'DosarNou', // added 10.11.2015 'Archive' : 'ArhivaNoua', // from v2.1 added 10.11.2015 /********************************** messages **********************************/ 'confirmReq' : 'Este necesară confirmare', 'confirmRm' : 'EÈ™ti sigur că vrei să È™tergi fiÈ™ierele?
          Acțiunea este ireversibilă!', 'confirmRepl' : 'Înlocuiește fișierul vechi cu cel nou?', 'confirmConvUTF8' : 'Nu este în UTF-8
          Convertim la UTF-8?
          Conținutul devine UTF-8 după salvarea conversiei.', // from v2.1 added 08.04.2014 'confirmNotSave' : 'Au avut loc modificări.
          Dacă nu salvezi se vor pierde modificările.', // from v2.1 added 15.7.2015 'apllyAll' : 'Aplică pentru toate', 'name' : 'Nume', 'size' : 'Mărime', 'perms' : 'Permisiuni', 'modify' : 'Modificat la', 'kind' : 'Tip', 'read' : 'citire', 'write' : 'scriere', 'noaccess' : 'acces interzis', 'and' : 'È™i', 'unknown' : 'necunoscut', 'selectall' : 'Alege toate fiÈ™ierele', 'selectfiles' : 'Alege fiÈ™ier(e)', 'selectffile' : 'Alege primul fiÈ™ier', 'selectlfile' : 'Alege ultimul fiÈ™ier', 'viewlist' : 'Vezi ca listă', 'viewicons' : 'Vezi ca icoane', 'places' : 'Locuri', 'calc' : 'Calculează', 'path' : 'Cale', 'aliasfor' : 'Alias pentru', 'locked' : 'Securizat', 'dim' : 'Dimensiuni', 'files' : 'FiÈ™iere', 'folders' : 'Dosare', 'items' : 'Elemente', 'yes' : 'da', 'no' : 'nu', 'link' : 'Link', 'searcresult' : 'Rezultatele căutării', 'selected' : 'elemente alese', 'about' : 'Despre', 'shortcuts' : 'Scurtături', 'help' : 'Ajutor', 'webfm' : 'Manager web pentru fiÈ™iere', 'ver' : 'Versiune', 'protocolver' : 'versiune protocol', 'homepage' : 'Pagina proiectului', 'docs' : 'DocumentaÈ›ie', 'github' : 'Fork nou pe Github', 'twitter' : 'UrmăreÈ™te-ne pe twitter', 'facebook' : 'Alătura-te pe facebook', 'team' : 'Echipa', 'chiefdev' : 'chief developer', 'developer' : 'developer', 'contributor' : 'contributor', 'maintainer' : 'maintainer', 'translator' : 'translator', 'icons' : 'Icoane', 'dontforget' : 'È™i nu uita să-È›i iei prosopul', 'shortcutsof' : 'Scurtăturile sunt dezactivate', 'dropFiles' : 'Dă drumul fiÈ™ierelor aici', 'or' : 'sau', 'selectForUpload' : 'Alege fiÈ™iere pentru a le urca', 'moveFiles' : 'Mută fiÈ™iere', 'copyFiles' : 'Copiază fiÈ™iere', 'rmFromPlaces' : 'Șterge din locuri', 'aspectRatio' : 'Aspect ratio', 'scale' : 'Scală', 'width' : 'Lățime', 'height' : 'ÃŽnălÈ›ime', 'resize' : 'Redimensionează', 'crop' : 'Decupează', 'rotate' : 'RoteÈ™te', 'rotate-cw' : 'RoteÈ™te cu 90° în sensul ceasului', 'rotate-ccw' : 'RoteÈ™te cu 90° în sensul invers ceasului', 'degree' : '°', 'netMountDialogTitle' : 'ÃŽncarcă volum din reÈ›ea', // added 18.04.2012 'protocol' : 'Protocol', // added 18.04.2012 'host' : 'Gazdă', // added 18.04.2012 'port' : 'Port', // added 18.04.2012 'user' : 'Utilizator', // added 18.04.2012 'pass' : 'Parolă', // added 18.04.2012 'confirmUnmount' : 'Vrei să elimini volumul $1?', // from v2.1 added 30.04.2012 'dropFilesBrowser': 'Drag&drop sau lipeÈ™te din browser', // from v2.1 added 30.05.2012 'dropPasteFiles' : 'Drag&drop sau lipeÈ™te fiÈ™iere aici', // from v2.1 added 07.04.2014 'encoding' : 'Encodare', // from v2.1 added 19.12.2014 'locale' : 'Locale', // from v2.1 added 19.12.2014 'searchTarget' : 'Èšintă: $1', // from v2.1 added 22.5.2015 'searchMime' : 'Caută după tipul MIME', // from v2.1 added 22.5.2015 'owner' : 'Owner', // from v2.1 added 20.6.2015 'group' : 'Group', // from v2.1 added 20.6.2015 'other' : 'Other', // from v2.1 added 20.6.2015 'execute' : 'Execute', // from v2.1 added 20.6.2015 'perm' : 'Permission', // from v2.1 added 20.6.2015 'mode' : 'Mod', // from v2.1 added 20.6.2015 /********************************** mimetypes **********************************/ 'kindUnknown' : 'Necunoscut', 'kindFolder' : 'Dosar', 'kindAlias' : 'Alias', 'kindAliasBroken' : 'Alias stricat', // applications 'kindApp' : 'AplicaÈ›ie', 'kindPostscript' : 'Document Postscript', 'kindMsOffice' : 'Document Microsoft Office', 'kindMsWord' : 'Document Microsoft Word', 'kindMsExcel' : 'Document Microsoft Excel', 'kindMsPP' : 'Prezentare Microsoft Powerpoint', 'kindOO' : 'Document Open Office', 'kindAppFlash' : 'AplicaÈ›ie Flash', 'kindPDF' : 'Document Portabil (PDF)', 'kindTorrent' : 'FiÈ™ier Bittorrent', 'kind7z' : 'Arhivă 7z', 'kindTAR' : 'Arhivă TAR', 'kindGZIP' : 'Arhivă GZIP', 'kindBZIP' : 'Arhivă BZIP', 'kindXZ' : 'Arhivă XZ', 'kindZIP' : 'Arhivă ZIP', 'kindRAR' : 'Arhivă RAR', 'kindJAR' : 'FiÈ™ier Java JAR', 'kindTTF' : 'Font True Type', 'kindOTF' : 'Font Open Type', 'kindRPM' : 'Pachet RPM', // fonts 'kindFont' : 'Font', 'kindSFNT' : 'Font SFNT', 'kindEOT' : 'Font Embedded Open Type', 'kindWOFF' : 'Web Open Font Format', 'kindWOFF2' : 'Web Open Font Format 2', // texts 'kindText' : 'Document text', 'kindTextPlain' : 'Text simplu', 'kindPHP' : 'Sursă PHP', 'kindCSS' : 'FiÈ™ier de stil (CSS)', 'kindHTML' : 'Document HTML', 'kindJS' : 'Sursă Javascript', 'kindRTF' : 'Text formatat (rich text)', 'kindC' : 'Sursă C', 'kindCHeader' : 'Sursă C header', 'kindCPP' : 'Sursă C++', 'kindCPPHeader' : 'Sursă C++ header', 'kindShell' : 'Script terminal Unix', 'kindPython' : 'Sursă Python', 'kindJava' : 'Sursă Java', 'kindRuby' : 'Sursă Ruby', 'kindPerl' : 'Script Perl', 'kindSQL' : 'Sursă SQL', 'kindXML' : 'Document XML', 'kindAWK' : 'Sursă AWK', 'kindCSV' : 'Valori separate de virgulă (CSV)', 'kindDOCBOOK' : 'Document Docbook XML', 'kindMarkdown' : 'Text Markdown', // added 20.7.2015 // images 'kindImage' : 'Imagine', 'kindBMP' : 'Imagine BMP', 'kindJPEG' : 'Imagine JPEG', 'kindGIF' : 'Imagine GIF', 'kindPNG' : 'Imagine PNG', 'kindTIFF' : 'Imagine TIFF', 'kindTGA' : 'Imagine TGA', 'kindPSD' : 'Imagine Adobe Photoshop', 'kindXBITMAP' : 'Imagine X bitmap', 'kindPXM' : 'Imagine Pixelmator', // media 'kindAudio' : 'Audio', 'kindAudioMPEG' : 'Audio MPEG', 'kindAudioMPEG4' : 'Audio MPEG-4', 'kindAudioMIDI' : 'Audio MIDI', 'kindAudioOGG' : 'Audio Ogg Vorbis', 'kindAudioWAV' : 'Audio WAV', 'AudioPlaylist' : 'Playlist MP3', 'kindVideo' : 'Video', 'kindVideoDV' : 'Video DV', 'kindVideoMPEG' : 'Video MPEG', 'kindVideoMPEG4' : 'Video MPEG-4', 'kindVideoAVI' : 'Video AVI', 'kindVideoMOV' : 'Video Quick Time', 'kindVideoWM' : 'Video Windows Media', 'kindVideoFlash' : 'Video Flash', 'kindVideoMKV' : 'Video Matroska', 'kindVideoOGG' : 'Video Ogg' } }; })); PK!@iuõ“Q“QCfile-manager-advanced/application/library/js/i18n/elfinder.ug_CN.jsnu„[µü¤/** * Uyghur translation * @author Alim.Boyaq * @version 2014-12-19 */ (function(root, factory) { if (typeof define === 'function' && define.amd) { define(['elfinder'], factory); } else if (typeof exports !== 'undefined') { module.exports = factory(require('elfinder')); } else { factory(root.elFinder); } }(this, function(elFinder) { elFinder.prototype.i18.ug_CN = { translator : 'تەرجىمە قىلغۇچى: ئۆتكۈر بىز شىركىتى info@otkur.biz', language : 'ئâ€�ۇيغۇرچە', direction : 'rtl', dateFormat : 'Y-m-d H:i', fancyDateFormat : '$1 H:i', messages : { /********************************** errors **********************************/ 'error' : 'خاتالىق', 'errUnknown' : 'كۈتۈلمىگەن خاتالىقكەن.', 'errUnknownCmd' : 'كۈتۈلمىگەن بۇيرۇقكەن.', 'errJqui' : 'jQuery UI تەڭشىكى توغرا بولمىغان. چوقۇم SelectableØŒ draggableØŒ droppabl قاتارلىق بۆلەكلەر بولۇشى ÙƒÛ�رەك.', 'errNode' : 'elFinder DOM ئÛ�لىمىنتلىرىنى قۇرالىشى ÙƒÛ�رەك.', 'errURL' : 'elFinder تەڭشىكى توغرا بولمىغان! URL تەڭشىكى ÙŠÛ�زىلمىغان.', 'errAccess' : 'زىيارەت قىلىش چەكلەنگەن.', 'errConnect' : 'ئارقا سۇپىغا ئۇلاش مەغلۇپ بولدى..', 'errAbort' : 'ئارقا سۇپىغا توختىتىلدى.', 'errTimeout' : 'ئارقا سۇپىغا بەلگىلەنگەن ۋاقىتتا ئۇلىيالمىدى.', 'errNotFound' : 'ئارقا سۇپا تÛ�پىلمىدى.', 'errResponse' : 'ئارقا سۇپىدىن توغرا بولمىغان ئىنكاس قايتتى.', 'errConf' : 'ئارقا سۇپا تەڭشىكى توغرا ئەمەس.', 'errJSON' : 'PHP JSON بۆلىكى قاچىلانمىغان.', 'errNoVolumes' : 'ئوقۇشقا بولىدىغان ھۈججەت خالتىسى يوق.', 'errCmdParams' : 'پارامÛ�تىر خاتا، بۇيرۇق: "$1".', 'errDataNotJSON' : 'ئارقا سۇپا قايتۇرغان سانلىق مەلۇمات توغرا بولغان JSON ئەمەسكەن.', 'errDataEmpty' : 'ئارقا سۇپا قايتۇرغان سانلىق مەلۇمات قۇرۇقكەن.', 'errCmdReq' : 'ئارقا سۇپىدىكى بۇيرۇقنىڭ ئâ€�سىمى تەمىنلىنىشى ÙƒÛ�رەك.', 'errOpen' : '"$1"نى ئاچالمىدى.', 'errNotFolder' : 'ئوبىكىت مۇندەرىجە ئەمەسكەن.', 'errNotFile' : 'ئوبىكىت ھۈججەت ئەمەسكەن.', 'errRead' : '"$1"نى ئوقۇيالمىدى.', 'errWrite' : '"$1"نى يازالمىدى.', 'errPerm' : 'ھوقۇق يوق.', 'errLocked' : '"$1" تاقالغان,ئۆزگەرتەلمەيسىز.', 'errExists' : '"$1" ناملىق ھۈججەت باركەن.', 'errInvName' : 'توغرا بولمىغان ھۈججەت قىسقۇچ ئىسمى.', 'errFolderNotFound' : 'ھۈججەت قىسقۇچنى تاپالمىدى.', 'errFileNotFound' : 'ھۈججەتنى تاپالمىدى.', 'errTrgFolderNotFound' : '"$1" ناملىق ھۈججەت قىسقۇچنى تاپالمىدى.', 'errPopup' : 'سەكرەپ چىققان ÙŠÛ�Ú­Ù‰ بەتنى تور كۆرگۈچ كۆرسەتمىدى، ئۈستىدىكى ئەسكەرتىشتىن تور كۆرگۈچنى كۆرسىتىشكە تەڭشەڭ.', 'errMkdir' : '"$1" ناملىق ھۈججەت قىسقۇچنى قۇرالمىدى.', 'errMkfile' : '"$1" ناملىق ھۈججەتنى قۇرالمىدى.', 'errRename' : '"$1" ناملىق ھۈججەتنىڭ ئىسمىنى ÙŠÛ�ڭىلاش مەغلۇپ بولدى.', 'errCopyFrom' : ' "$1" ناملىق ئورۇندىن ھۈججەت كۆچۈرۈش چەكلەنگەن.', 'errCopyTo' : '"$1" ناملىق ئورۇنغا ھۈججەت كۆچۈرۈش چەكلەنگەن.', 'errUpload' : 'يۈكلەشتە خاتالىق كۆرۈلدى.', 'errUploadFile' : '"$1" ناملىق ھۈججەتنى يۈكلەشتە خاتالىق كۆرۈلدى.', 'errUploadNoFiles' : 'يۈكلىمەكچى بولغان ھۈججەت تÛ�پىلمىدى.', 'errUploadTotalSize' : 'سانلىق مەلۇمات چوڭلىقى چەكلىمىدىن ئÛ�شىپ كەتكەن..', 'errUploadFileSize' : 'ھۈججەت چوڭلىقى چەكلىمىدىن ئÛ�شىپ كەتكەن..', 'errUploadMime' : 'چەكلەنگەن ھۈججەت شەكلى.', 'errUploadTransfer' : '"$1" ناملىق ھۈججەتنى يوللاشتا خاتالىق كۆرۈلدى.', 'errNotReplace' : '"$1" ناملىق ھۈججەت باركەن، ئالماشتۇرۇشقا بولمايدۇ.', // new 'errReplace' : '"$1" ناملىق ھۈججەتنى ئالماشتۇرۇش مەغلۇپ بولدى.', 'errSave' : '"$1" ناملىق ھۈججەتنى ساقلاش مەغلۇپ بولدى.', 'errCopy' : '"$1" ناملىق ھۈججەتنى كۆچۈرۈش مەغلۇپ بولدى.', 'errMove' : '"$1" ناملىق ھۈججەتنى يۆتكەش مەغلۇپ بولدى.', 'errCopyInItself' : '"$1" ناملىق ھۈججەتنى ئەسلى ئورنىغا يۆتكەش مەغلۇپ بولدى.', 'errRm' : '"$1" ناملىق ھۈججەتنى ئۆچۈرۈش مەغلۇپ بولدى.', 'errRmSrc' : 'ئەسلى ھۈججەتنى ئۆچۈرۈش مەغلۇپ بولدى.', 'errExtract' : ' "$1" ناملىق مەلۇماتتىن ھۈججەت ئايرىش مەغلۇپ بولدى..', 'errArchive' : 'پىرىسلانغان ھۈججەت ھاسىللاش مەغلۇپ بولدى.', 'errArcType' : 'بۇ خىل پىرىسلانغان ھۈججەت شەكلىنى سىستÛ�ما بىر تەرەپ قىلالمىدى.', 'errNoArchive' : 'ھۈججەت پىرىسلانغان ھۈججەت ئەمەس، ياكى توغرا پىرىسلانمىغان.', 'errCmdNoSupport' : 'بۇ خىل بۇيرۇقنى بىر تەرەپ قىلالمىدى.', 'errReplByChild' : '“$1â€� ناملىق ھۈججەت قىسقۇچنى ئالماشۇتۇرۇشقا بولمايدۇ.', 'errArcSymlinks' : 'بىخەتەرلىك ئۈچۈن بۇ مەشغۇلات ئەمەلدىن قالدۇرۇلدى..', 'errArcMaxSize' : 'پىرىسلانغان ھۈججەتنىڭ چوڭلىقى چەكلىمىدىن ئÛ�شىپ كەنكەن.', 'errResize' : ' "$1" چوڭلۇقنى تەڭشەشكە بولمىدى.', 'errResizeDegree' : 'توغرا بولمىغان پىقىرىتىش گىرادۇسى', 'errResizeRotate' : 'رەسىمنى پىقىرىتىشقا بولمىدى.', 'errResizeSize' : 'توغرا بولمىغان رەسىم چوڭلىقى.', 'errResizeNoChange' : 'رەسىم چوڭلىقى ئۆزگەرمىگەن.', 'errUsupportType' : 'قوللىمايدىغان ھۈججەت شەكلى.', 'errNotUTF8Content' : '"$1" ناملىق ھۈججەتنىڭ كودى UTF-8ئەمەسكەن، تەھرىرلىگىلى بولمايدۇ.', // added 9.11.2011 'errNetMount' : ' "$1" نى يۈكلەشتە خاتلىق يۈز بەردى..', // added 17.04.2012 'errNetMountNoDriver' : 'بۇ خىل پروتوكول قوللانمىدى..', // added 17.04.2012 'errNetMountFailed' : 'يۈكلەش مەغلۇپ بولدى.', // added 17.04.2012 'errNetMountHostReq' : 'مۇلازىمىتىرنى كۆرسىتىپ بÛ�رىڭ.', // added 18.04.2012 'errSessionExpires' : 'Your session has expired due to inactivity.', 'errCreatingTempDir' : 'Unable to create temporary directory: "$1"', 'errFtpDownloadFile' : 'Unable to download file from FTP: "$1"', 'errFtpUploadFile' : 'Unable to upload file to FTP: "$1"', 'errFtpMkdir' : 'Unable to create remote directory on FTP: "$1"', 'errArchiveExec' : 'Error while archiving files: "$1"', 'errExtractExec' : 'Error while extracting files: "$1"', /******************************* commands names ********************************/ 'cmdarchive' : 'پىرىسلاش', 'cmdback' : 'قايتىش', 'cmdcopy' : 'كۆچۈرۈش', 'cmdcut' : 'ÙƒÛ�سىش', 'cmddownload' : 'چۈشۈرۈش', 'cmdduplicate' : 'نۇسخىلاش', 'cmdedit' : 'تەھرىرلەش', 'cmdextract' : 'پىرىستىن ھۈججەت چىقىرىش', 'cmdforward' : 'ئâ€�الدىغا Ù…Û�ڭىش', 'cmdgetfile' : 'تاللاش', 'cmdhelp' : 'ئەپ ھەققىدە', 'cmdhome' : 'باش بەت', 'cmdinfo' : 'ئۇچۇرلىرى', 'cmdmkdir' : 'ÙŠÛ�Ú­Ù‰ ھۈججەت قىسقۇچ', 'cmdmkfile' : 'ÙŠÛ�Ú­Ù‰ ھۈججەت', 'cmdopen' : 'ئÛ�چىش', 'cmdpaste' : 'چاپلاش', 'cmdquicklook' : 'كۆرۈش', 'cmdreload' : 'ÙŠÛ�ڭىلاش', 'cmdrename' : 'نام ÙŠÛ�ڭىلاش', 'cmdrm' : 'ئۆچۈرۈش', 'cmdsearch' : 'ھۈججەت ئىزدەش', 'cmdup' : 'ئالدىنقى مۇندەرىجىگە بÛ�رىش', 'cmdupload' : 'يۈكلەش', 'cmdview' : 'كۆرۈش', 'cmdresize' : 'چوڭلىقىنى تەڭشەش', 'cmdsort' : 'تەرتىپ', 'cmdnetmount' : 'توردىن قوشۇش', // added 18.04.2012 /*********************************** buttons ***********************************/ 'btnClose' : 'تاقاش', 'btnSave' : 'ساقلاش', 'btnRm' : 'ئۆچۈرۈش', 'btnApply' : 'ئىشلىتىش', 'btnCancel' : 'بÛ�كارلاش', 'btnNo' : 'ياق', 'btnYes' : 'ھەئە', 'btnDiscard': 'Discard changes', 'btnMount' : 'يۈكلەش', // added 18.04.2012 /******************************** notifications ********************************/ 'ntfopen' : 'قىسقۇچنى ئÛ�چىش', 'ntffile' : 'ھۈججەتنى ئÛ�چىش', 'ntfreload' : 'ÙŠÛ�ڭىلاش', 'ntfmkdir' : 'قىسقۇچ قۇرۇش', 'ntfmkfile' : 'ھۈججەت قۇرۇش', 'ntfrm' : 'ئۆچۈرۈش', 'ntfcopy' : 'كۆچۈرۈش', 'ntfmove' : 'يۆتكەش', 'ntfprepare' : 'كۆچۈرۈش تەييارلىقى', 'ntfrename' : 'نام ÙŠÛ�ڭىلاش', 'ntfupload' : 'يۈكلەش', 'ntfdownload' : 'چۈشۈرۈش', 'ntfsave' : 'ساقلاش', 'ntfarchive' : 'پىرىسلاش', 'ntfextract' : 'پىرىستىن ÙŠÛ�شىش', 'ntfsearch' : 'ئىزدەش', 'ntfresize' : 'چوڭلىقى ئۆزگەرتىلىۋاتىدۇ', 'ntfsmth' : 'ئالدىراش >_<', 'ntfloadimg' : 'رەسىم ئÛ�چىلىۋاتىدۇ', 'ntfnetmount' : 'تور ھۈججىتى يۈكلىنىۋاتىدۇ', // added 18.04.2012 'ntfdim' : 'Acquiring image dimension', /************************************ dates **********************************/ 'dateUnknown' : 'ئÛ�نىق ئەمەس', 'Today' : 'بۈگۈن', 'Yesterday' : 'تۆنۈگۈن', 'msJan' : '1-ئاي', 'msFeb' : '2-ئاي', 'msMar' : '3-ئاي', 'msApr' : '4-ئاي', 'msMay' : '5-ئاي', 'msJun' : '6-ئاي', 'msJul' : '7-ئاي', 'msAug' : '8-ئاي', 'msSep' : '9-ئâ€�اي', 'msOct' : '10-ئاي', 'msNov' : '11-ئاي', 'msDec' : '12-ئاي', 'January' : '1-ئاي', 'February' : '2-ئاي', 'March' : '3-ئاي', 'April' : '4-ئاي', 'May' : '5-ئاي', 'June' : '6-ئاي', 'July' : '7-ئاي', 'August' : '8-ئاي', 'September' : '9-ئاي', 'October' : '10-ئاي', 'November' : '11-ئاي', 'December' : '12-ئاي', 'Sunday' : 'يەكشەنبە', 'Monday' : 'دۈشەنبە', 'Tuesday' : 'سەيشەنبە', 'Wednesday' : 'چارشەنبە', 'Thursday' : 'پەيشەنبە', 'Friday' : 'جۈمە', 'Saturday' : 'شەنبە', 'Sun' : 'ÙŠÛ•', 'Mon' : 'دۈ', 'Tue' : 'سە', 'Wed' : 'چا', 'Thu' : 'Ù¾Û•', 'Fri' : 'جۈ', 'Sat' : 'Ø´Û•', /******************************** sort variants ********************************/ 'sortname' : 'نامى ', 'sortkind' : 'شەكلى ', 'sortsize' : 'چوڭلىقى', 'sortdate' : 'ۋاقتى', 'sortFoldersFirst' : 'قىسقۇچلار باشتا', /********************************** messages **********************************/ 'confirmReq' : 'مۇقىملاشتۇرۇڭ', 'confirmRm' : 'راستىنلا ئۆچۈرەمسىز?
          كەينىگە قايتۇرغىلى بولمايدۇ!', 'confirmRepl' : 'ھازىرقى ھۈججەت بىلەن كونىسىنى ئالماشتۇرامسىز?', 'apllyAll' : 'ھەممىسىگە ئىشلىتىش', 'name' : 'نامى', 'size' : 'چوڭلىقى', 'perms' : 'ھوقۇق', 'modify' : 'ئۆزگەرگەن ۋاقتى', 'kind' : 'تۈرى', 'read' : 'ئوقۇش', 'write' : 'ÙŠÛ�زىش', 'noaccess' : 'ھوقۇق يوق', 'and' : 'Ú¾Û•Ù…', 'unknown' : 'ئÛ�نىق ئەمەس', 'selectall' : 'ھەممىنى تاللاش', 'selectfiles' : 'تاللاش', 'selectffile' : 'بىرىنچىسىنى تاللاش', 'selectlfile' : 'ئەڭ ئاخىرقىسىنى تاللاش', 'viewlist' : 'جەدۋەللىك كۆرىنىشى', 'viewicons' : 'رەسىملىك كۆرىنىشى', 'places' : 'ئورنى', 'calc' : 'Ú¾Û�سابلاش', 'path' : 'ئورنى', 'aliasfor' : 'باشقا نامى', 'locked' : 'تاقالغان', 'dim' : 'چوڭلىقى', 'files' : 'ھۈججەت', 'folders' : 'قىسقۇچ', 'items' : 'تۈرلەر', 'yes' : 'ھەئە', 'no' : 'ياق', 'link' : 'ئۇلىنىش', 'searcresult' : 'ئىزدەش نەتىجىسى', 'selected' : 'تاللانغان تۈرلەر', 'about' : 'چۈشەنچە', 'shortcuts' : 'تÛ�ز كونۇپكىلار', 'help' : 'ياردەم', 'webfm' : 'تور ھۈججەتلىرىنى باشقۇرۇش', 'ver' : 'نەشرى', 'protocolver' : 'پروتوكول نەشرى', 'homepage' : 'تۈر باش بÛ�تى', 'docs' : 'ھۈججەت', 'github' : 'Fork us on Github', 'twitter' : 'Follow us on twitter', 'facebook' : 'Join us on facebook', 'team' : 'گۇرۇپپا', 'chiefdev' : 'باش پىروگراممىر', 'developer' : 'پىروگراممىر', 'contributor' : 'تۆھپىكار', 'maintainer' : 'ئاسرىغۇچى', 'translator' : 'تەرجىمان', 'icons' : 'سىنبەلگە', 'dontforget' : 'تەرىڭىزنى سۈرتىدىغان قولياغلىقىڭىزنى ئۇنۇتماڭ جۇمۇ', 'shortcutsof' : 'تÛ�ز كونۇپكىلار چەكلەنگەن', 'dropFiles' : 'ھۈججەتنى موشۇ يەرگە تاشلاڭ', 'or' : 'ياكى', 'selectForUpload' : 'يۈكلىمەكچى بولغان ھۈججەتنى تاللاڭ', 'moveFiles' : 'يۆتكەش', 'copyFiles' : 'كۆچۈرۈش', 'rmFromPlaces' : 'ھۈججەتلەرنى ئۆچۈرۈش', 'aspectRatio' : 'نىسبىتىنى ساقلاش', 'scale' : 'نىسبىتى', 'width' : 'ئۇزۇنلىقى', 'height' : 'ئىگىزلىكى', 'resize' : 'چوڭلىقىنى تەڭشەش', 'crop' : 'ÙƒÛ�سىش', 'rotate' : 'پىقىرىتىش', 'rotate-cw' : 'سائەت ئىستىرىلكىسى بويىچە 90 گىرادۇس پىقىرىتىش', 'rotate-ccw' : 'سائەت ئىستىرىلكىسىنى تەتۈر يۆنىلىشى بويىچە 90گىرادۇس پىقىرىتىش', 'degree' : 'گىرادۇس', 'netMountDialogTitle' : 'Mount network volume', // added 18.04.2012 'protocol' : 'پىروتوكڭل', // added 18.04.2012 'host' : 'مۇلازىمىتىر', // added 18.04.2012 'port' : 'پورت', // added 18.04.2012 'user' : 'ئەزا', // added 18.04.2012 'pass' : 'ئىم', // added 18.04.2012 /********************************** mimetypes **********************************/ 'kindUnknown' : 'ئÛ�نىق ئەمەس', 'kindFolder' : 'ھۈججەت قىسقۇچ', 'kindAlias' : 'باشقا نامى', 'kindAliasBroken' : 'باشقا نامى خاتا', // applications 'kindApp' : 'كود ھۈججىتى', 'kindPostscript' : 'Postscript ھۈججىتى', 'kindMsOffice' : 'Microsoft Office ھۈججىتى', 'kindMsWord' : 'Microsoft Word ھۈججىتى', 'kindMsExcel' : 'Microsoft Excel ھۈججىتى', 'kindMsPP' : 'Microsoft Powerpoint ھۈججىتى', 'kindOO' : 'Open Office ھۈججىتى', 'kindAppFlash' : 'Flash ھۈججىتى', 'kindPDF' : 'Portable Document Format (PDF)', 'kindTorrent' : 'Bittorrent ھۈججىتى', 'kind7z' : '7z ھۈججىتى', 'kindTAR' : 'TAR ھۈججىتى', 'kindGZIP' : 'GZIP ھۈججىتى', 'kindBZIP' : 'BZIP ھۈججىتى', 'kindXZ' : 'XZ ھۈججىتى', 'kindZIP' : 'ZIP ھۈججىتى', 'kindRAR' : 'RAR ھۈججىتى', 'kindJAR' : 'Java JAR ھۈججىتى', 'kindTTF' : 'True Type Ù�ونت', 'kindOTF' : 'Open Type Ù�ونت', 'kindRPM' : 'RPM', // fonts 'kindFont' : 'Ù�ونت', 'kindSFNT' : 'SFNT Ù�ونت', 'kindEOT' : 'Embedded Open Type Ù�ونت', 'kindWOFF' : 'Web Open Font Format Ù�ونت', 'kindWOFF2' : 'Web Open Font Format 2 Ù�ونت', // texts 'kindText' : 'تÛ�كىست', 'kindTextPlain' : 'تÛ�كىست', 'kindPHP' : 'PHP ھۈججىتى', 'kindCSS' : 'CSS ھۈججىتى', 'kindHTML' : 'HTML ھۈججىتى', 'kindJS' : 'Javascript ھۈججىتى', 'kindRTF' : 'RTF ھۈججىتى', 'kindC' : 'C ھۈججىتى', 'kindCHeader' : 'C باش ھۈججىتى', 'kindCPP' : 'C++ ھۈججىتى', 'kindCPPHeader' : 'C++ باش ھۈججىتى', 'kindShell' : 'Unix سىكىرىپت ھۈججىتى', 'kindPython' : 'Python ھۈججىتى', 'kindJava' : 'Java ھۈججىتى', 'kindRuby' : 'Ruby ھۈججىتى', 'kindPerl' : 'Perl ھۈججىتى', 'kindSQL' : 'SQL ھۈججىتى', 'kindXML' : 'XML ھۈججىتى', 'kindAWK' : 'AWK ھۈججىتى', 'kindCSV' : 'CSV ھۈججىتى', 'kindDOCBOOK' : 'Docbook XML ھۈججىتى', // images 'kindImage' : 'رەسىم', 'kindBMP' : 'BMP رەسىم', 'kindJPEG' : 'JPEG رەسىم', 'kindGIF' : 'GIF رەسىم', 'kindPNG' : 'PNG رەسىم', 'kindTIFF' : 'TIFF رەسىم', 'kindTGA' : 'TGA رەسىم', 'kindPSD' : 'Adobe Photoshop رەسىم', 'kindXBITMAP' : 'X bitmap رەسىم', 'kindPXM' : 'Pixelmator رەسىم', // media 'kindAudio' : 'ئاۋاز', 'kindAudioMPEG' : 'MPEG ئاۋاز', 'kindAudioMPEG4' : 'MPEG-4 ئاۋاز', 'kindAudioMIDI' : 'MIDI ئاۋاز', 'kindAudioOGG' : 'Ogg Vorbis ئاۋاز', 'kindAudioWAV' : 'WAV ئاۋاز', 'AudioPlaylist' : 'MP3 قويۇش تىزىملىكى', 'kindVideo' : 'سىن', 'kindVideoDV' : 'DV سىن', 'kindVideoMPEG' : 'MPEG سىن', 'kindVideoMPEG4' : 'MPEG-4 سىن', 'kindVideoAVI' : 'AVI سىن', 'kindVideoMOV' : 'Quick Time سىن', 'kindVideoWM' : 'Windows Media سىن', 'kindVideoFlash' : 'Flash سىن', 'kindVideoMKV' : 'Matroska سىن', 'kindVideoOGG' : 'Ogg سىن' } }; })); PK!§C„³Ÿ³Ÿ@file-manager-advanced/application/library/js/i18n/elfinder.bg.jsnu„[µü¤/** * Bulgarian translation * @author Stamo Petkov * @author Nikolay Petkov * @version 2018-07-28 */ (function(root, factory) { if (typeof define === 'function' && define.amd) { define(['elfinder'], factory); } else if (typeof exports !== 'undefined') { module.exports = factory(require('elfinder')); } else { factory(root.elFinder); } }(this, function(elFinder) { elFinder.prototype.i18.bg = { translator : 'Stamo Petkov <stamo.petkov@gmail.com>, Nikolay Petkov <office@cmstory.com>', language : 'Bulgarian', direction : 'ltr', dateFormat : 'd.m.Y H:i', // Mar 13, 2012 05:27 PM fancyDateFormat : '$1 H:i', // will produce smth like: Today 12:25 PM nonameDateFormat : 'Ymd-His', // to apply if upload file is noname: 120513172700 messages : { /********************************** errors **********************************/ 'error' : 'Грешка', 'errUnknown' : 'Ð�епозната грешка.', 'errUnknownCmd' : 'Ð�епозната команда.', 'errJqui' : 'Грешна конфигурациÑ� на jQuery UI. Компонентите selectable, draggable и droppable трÑ�бва да Ñ�а включени.', 'errNode' : 'elFinder изиÑ�ква да бъде Ñ�ъздаден DOM елемент.', 'errURL' : 'Грешка в наÑ�тройките на elFinder! не е зададена Ñ�тойноÑ�Ñ‚ на URL.', 'errAccess' : 'ДоÑ�тъп отказан.', 'errConnect' : 'Ð�Ñ�ма връзка Ñ�ÑŠÑ� Ñ�ървъра.', 'errAbort' : 'Връзката е прекъÑ�ната.', 'errTimeout' : 'ПроÑ�рочена връзка.', 'errNotFound' : 'Сървърът не е намерен.', 'errResponse' : 'Грешен отговор от Ñ�ървъра.', 'errConf' : 'Грешни наÑ�тройки на Ñ�ървъра.', 'errJSON' : 'Ð�е е инÑ�талиран модул на PHP за JSON.', 'errNoVolumes' : 'Ð�Ñ�ма дÑ�лове доÑ�тъпни за четене.', 'errCmdParams' : 'Грешни параметри на командата "$1".', 'errDataNotJSON' : 'Данните не Ñ�а JSON.', 'errDataEmpty' : 'ЛипÑ�ват данни.', 'errCmdReq' : 'Запитването от Ñ�ървъра изиÑ�ква име на команда.', 'errOpen' : 'Ð�еуÑ�пешно отварÑ�не на "$1".', 'errNotFolder' : 'Обектът не е папка.', 'errNotFile' : 'Обектът не е файл.', 'errRead' : 'Ð�еуÑ�пешно прочитане на "$1".', 'errWrite' : 'Ð�еуÑ�пешен запиÑ� в "$1".', 'errPerm' : 'Разрешение отказано.', 'errLocked' : '"$1" е заключен и не може да бъде преименуван, меÑ�тен или премахван.', 'errExists' : 'Вече Ñ�ъщеÑ�твува файл Ñ� име "$1"', 'errInvName' : 'Грешно име на файл.', 'errInvDirname' : 'Ð�евалидно име на папка.', // from v2.1.24 added 12.4.2017 'errFolderNotFound' : 'Папката не е открита.', 'errFileNotFound' : 'Файлът не е открит.', 'errTrgFolderNotFound' : 'Целевата папка "$1" не е намерена.', 'errPopup' : 'Браузъра блокира отварÑ�нето на прозорец. За да отворите файла, разрешете отварÑ�нето в наÑ�тройките на браузъра.', 'errMkdir' : 'Ð�еуÑ�пешно Ñ�ъздаване на папка "$1".', 'errMkfile' : 'Ð�еуÑ�пешно Ñ�ъздаване на файл "$1".', 'errRename' : 'Ð�еуÑ�пешно преименуване на "$1".', 'errCopyFrom' : 'Копирането на файлове от том "$1" не е разрешено.', 'errCopyTo' : 'Копирането на файлове в том "$1" не е разрешено.', 'errMkOutLink' : 'Ð�еуÑ�пех при Ñ�ъздаване на връзка извън началото на реÑ�урÑ�а.', // from v2.1 added 03.10.2015 'errUpload' : 'Грешка при качване.', // old name - errUploadCommon 'errUploadFile' : 'Ð�еуÑ�пешно качване на "$1".', // old name - errUpload 'errUploadNoFiles' : 'Ð�е Ñ�а намерени файлове за качване.', 'errUploadTotalSize' : 'Данните превишават макÑ�имално допоÑ�тумиÑ� размер.', // old name - errMaxSize 'errUploadFileSize' : 'Файлът превишава макÑ�имално допуÑ�тимиÑ� размер.', // old name - errFileMaxSize 'errUploadMime' : 'Ð�епозволен тип на файла.', 'errUploadTransfer' : '"$1" грешка при предаване.', 'errUploadTemp' : 'Ð�еуÑ�пешно Ñ�ъздаване на временен файл за качване.', // from v2.1 added 26.09.2015 'errNotReplace' : 'Обект "$1" вече Ñ�ъщеÑ�твува на това мÑ�Ñ�то и не може да бъде заменен от обект от друг тип.', // new 'errReplace' : 'Ð�е може да Ñ�е замени "$1".', 'errSave' : 'Ð�е може да Ñ�е запише "$1".', 'errCopy' : 'Ð�е може да Ñ�е копира "$1".', 'errMove' : 'Ð�е може да Ñ�е премеÑ�ти "$1".', 'errCopyInItself' : 'Ð�е може да Ñ�е копира "$1" върху Ñ�амиÑ� него.', 'errRm' : 'Ð�е може да Ñ�е премахне "$1".', 'errTrash' : 'Ð�е може да Ñ�е премеÑ�ти в кошчето', // from v2.1.24 added 30.4.2017 'errRmSrc' : 'Ð�е може да Ñ�е премахне изходниÑ� файл(ове).', 'errExtract' : 'Ð�е може да Ñ�е извлекат файловете от "$1".', 'errArchive' : 'Ð�е може да Ñ�е Ñ�ъздаде архив.', 'errArcType' : 'Ð�еподдържан тип на архива.', 'errNoArchive' : 'Файлът не е архив или е от неподдържан тип.', 'errCmdNoSupport' : 'Сървъра не поддържа тази команда.', 'errReplByChild' : 'Папката “$1â€� не може да бъде заменена от Ñ�ъдържащ Ñ�е в неÑ� елемент.', 'errArcSymlinks' : 'От Ñ�ъображениÑ� за Ñ�игурноÑ�Ñ‚ нÑ�ма да бъдат разопаковани архиви Ñ�ъдържащи symlinks.', // edited 24.06.2012 'errArcMaxSize' : 'Ð�рхивните файлове превишават макÑ�имално допуÑ�тимиÑ� размер.', 'errResize' : 'Ð�е може да Ñ�е преоразмери "$1".', 'errResizeDegree' : 'Ð�евалиден градуÑ� за ротациÑ�.', // added 7.3.2013 'errResizeRotate' : 'Изображението не е ротирано.', // added 7.3.2013 'errResizeSize' : 'Ð�евалиден размер на изображение.', // added 7.3.2013 'errResizeNoChange' : 'Размерът на изображението не е променен.', // added 7.3.2013 'errUsupportType' : 'Ð�еподдържан тип на файл.', 'errNotUTF8Content' : 'Файл "$1" не е в UTF-8 формат и не може да бъде редактиран.', // added 9.11.2011 'errNetMount' : 'Ð�е може да Ñ�е монтира "$1".', // added 17.04.2012 'errNetMountNoDriver' : 'Ð�еподдържан протокол.', // added 17.04.2012 'errNetMountFailed' : 'Монтирането не е уÑ�пешно.', // added 17.04.2012 'errNetMountHostReq' : 'ХоÑ�Ñ‚ Ñ�е изиÑ�ква.', // added 18.04.2012 'errSessionExpires' : 'СеÑ�иÑ�та ви изтече поради липÑ�а на активноÑ�Ñ‚.', 'errCreatingTempDir' : 'Ð�е може да Ñ�е Ñ�ъздаде временна директориÑ�: "$1"', 'errFtpDownloadFile' : 'Ð�е може да Ñ�е изтегли файл от FTP: "$1"', 'errFtpUploadFile' : 'Ð�е може да Ñ�е качи файл на FTP: "$1"', 'errFtpMkdir' : 'Ð�е може да Ñ�е Ñ�ъздаде директориÑ� на FTP: "$1"', 'errArchiveExec' : 'Грешка при архивиране на файлове: "$1"', 'errExtractExec' : 'Грешка при разархивиране на файлове: "$1"', 'errNetUnMount' : 'Ð�е може да Ñ�е размонтира', // from v2.1 added 30.04.2012 'errConvUTF8' : 'Ð�е е конвертируем до UTF-8', // from v2.1 added 08.04.2014 'errFolderUpload' : 'Опитайте Google Chrome, ако иÑ�кате да качите папка.', // from v2.1 added 26.6.2015 'errSearchTimeout' : 'Времето изтече при търÑ�енето на "$1". Резултатът от търÑ�енето е чаÑ�тичен.', // from v2.1 added 12.1.2016 'errReauthRequire' : 'Ð�еобходимо е повторно оторизиране.', // from v2.1.10 added 24.3.2016 'errMaxTargets' : 'МакÑ�ималниÑ�Ñ‚ брой избрани файлове е $ 1.', // from v2.1.17 added 17.10.2016 'errRestore' : 'Ð�е може да Ñ�е възÑ�танови от кошчето. Ð�е може да Ñ�е определи меÑ�тоположението за възÑ�тановÑ�ване.', // from v2.1.24 added 3.5.2017 'errEditorNotFound' : 'Ð�е е намерен редактор за този тип файл.', // from v2.1.25 added 23.5.2017 'errServerError' : 'Възникна грешка на Ñ�ървъра.', // from v2.1.25 added 16.6.2017 'errEmpty' : 'Папката "$1" не може да Ñ�е изпразни.', // from v2.1.25 added 22.6.2017 /******************************* commands names ********************************/ 'cmdarchive' : 'Създай архив', 'cmdback' : 'Ð�азад', 'cmdcopy' : 'Копирай', 'cmdcut' : 'Изрежи', 'cmddownload' : 'Свали', 'cmdduplicate' : 'Дублирай', 'cmdedit' : 'Редактирай файл', 'cmdextract' : 'Извлечи файловете от архива', 'cmdforward' : 'Ð�апред', 'cmdgetfile' : 'Избери файлове', 'cmdhelp' : 'За тази програма', 'cmdhome' : 'Ð�ачало', 'cmdinfo' : 'ИнформациÑ�', 'cmdmkdir' : 'Ð�ова папка', 'cmdmkdirin' : 'Ð’ нова папка', // from v2.1.7 added 19.2.2016 'cmdmkfile' : 'Ð�ов файл', 'cmdopen' : 'Отвори', 'cmdpaste' : 'Вмъкни', 'cmdquicklook' : 'Преглед', 'cmdreload' : 'Презареди', 'cmdrename' : 'Преименувай', 'cmdrm' : 'Изтрий', 'cmdtrash' : 'Ð’ кошчето', //from v2.1.24 added 29.4.2017 'cmdrestore' : 'ВъзÑ�танови', //from v2.1.24 added 3.5.2017 'cmdsearch' : 'Ð�амери файлове', 'cmdup' : 'Една директориÑ� нагоре', 'cmdupload' : 'Качи файлове', 'cmdview' : 'Виж', 'cmdresize' : 'Промени изображение', 'cmdsort' : 'Подреди', 'cmdnetmount' : 'Монтирай мрежов реÑ�урÑ�', // added 18.04.2012 'cmdnetunmount': 'Размонтирай', // from v2.1 added 30.04.2012 'cmdplaces' : 'Към избрани', // added 28.12.2014 'cmdchmod' : 'ПромÑ�на на вид', // from v2.1 added 20.6.2015 'cmdopendir' : 'Отвори папка', // from v2.1 added 13.1.2016 'cmdcolwidth' : 'Ð�улирай ширината на колоната', // from v2.1.13 added 12.06.2016 'cmdfullscreen': 'ЦÑ�л екран', // from v2.1.15 added 03.08.2016 'cmdmove' : 'ПремеÑ�ти', // from v2.1.15 added 21.08.2016 'cmdempty' : 'Изпразни папката', // from v2.1.25 added 22.06.2017 'cmdundo' : 'Отмени', // from v2.1.27 added 31.07.2017 'cmdredo' : 'Преправи', // from v2.1.27 added 31.07.2017 'cmdpreference': 'Ð�аÑ�тройки', // from v2.1.27 added 03.08.2017 'cmdselectall' : 'Избери вÑ�ичко', // from v2.1.28 added 15.08.2017 'cmdselectnone': 'Избери нищо', // from v2.1.28 added 15.08.2017 'cmdselectinvert': 'Обърни Ñ�елекциÑ�та', // from v2.1.28 added 15.08.2017 'cmdopennew' : 'Отвори в нов прозорец', // from v2.1.38 added 3.4.2018 'cmdhide' : 'Скрий (лично)', // from v2.1.41 added 24.7.2018 /*********************************** buttons ***********************************/ 'btnClose' : 'Затвори', 'btnSave' : 'Запиши', 'btnRm' : 'Премахни', 'btnApply' : 'Приложи', 'btnCancel' : 'Отказ', 'btnNo' : 'Ð�е', 'btnYes' : 'Да', 'btnDiscard': 'Discard changes', 'btnMount' : 'Монтирай', // added 18.04.2012 'btnApprove': 'Отиди на $1 и одобри', // from v2.1 added 26.04.2012 'btnUnmount': 'Размонтирай', // from v2.1 added 30.04.2012 'btnConv' : 'Конвертирай', // from v2.1 added 08.04.2014 'btnCwd' : 'Тук', // from v2.1 added 22.5.2015 'btnVolume' : 'РеÑ�урÑ�', // from v2.1 added 22.5.2015 'btnAll' : 'Ð’Ñ�ички', // from v2.1 added 22.5.2015 'btnMime' : 'MIME тип', // from v2.1 added 22.5.2015 'btnFileName':'Име', // from v2.1 added 22.5.2015 'btnSaveClose': 'Запази и затвори', // from v2.1 added 12.6.2015 'btnBackup' : 'Ð�рхивирай', // fromv2.1 added 28.11.2015 'btnRename' : 'Преименувай', // from v2.1.24 added 6.4.2017 'btnRenameAll' : 'Преименувай(Ð’Ñ�ички)', // from v2.1.24 added 6.4.2017 'btnPrevious' : 'Пред ($1/$2)', // from v2.1.24 added 11.5.2017 'btnNext' : 'След ($1/$2)', // from v2.1.24 added 11.5.2017 'btnSaveAs' : 'Запази като', // from v2.1.25 added 24.5.2017 /******************************** notifications ********************************/ 'ntfopen' : 'ОтварÑ�не на папка', 'ntffile' : 'ОтварÑ�не на файл', 'ntfreload' : 'Презареждане Ñ�ъдържанието на папка', 'ntfmkdir' : 'Създава Ñ�е директориÑ�', 'ntfmkfile' : 'Създава Ñ�е файл', 'ntfrm' : 'Изтриване на файлове', 'ntfcopy' : 'Копиране на файлове', 'ntfmove' : 'ПремеÑ�тване на файлове', 'ntfprepare' : 'Подготовка за копиране на файлове', 'ntfrename' : 'Преименуване на файлове', 'ntfupload' : 'Качват Ñ�е файлове', 'ntfdownload' : 'СвалÑ�Ñ‚ Ñ�е файлове', 'ntfsave' : 'ЗапиÑ� на файлове', 'ntfarchive' : 'Създава Ñ�е архив', 'ntfextract' : 'Извличат Ñ�е файловете от архив', 'ntfsearch' : 'ТърÑ�Ñ�Ñ‚ Ñ�е файлове', 'ntfresize' : 'ПреоразмерÑ�ват Ñ�е изображениÑ�', 'ntfsmth' : 'Зает Ñ�ъм >_<', 'ntfloadimg' : 'Зареждат Ñ�е изображениÑ�', 'ntfnetmount' : 'Монтира Ñ�е мрежов реÑ�урÑ�', // added 18.04.2012 'ntfnetunmount': 'Размонтира Ñ�е мрежов реÑ�урÑ�', // from v2.1 added 30.04.2012 'ntfdim' : 'Извличат Ñ�е размерите на изображение', // added 20.05.2013 'ntfreaddir' : 'Извлича Ñ�е информациÑ� за папка', // from v2.1 added 01.07.2013 'ntfurl' : 'Взима Ñ�е URL от връзка', // from v2.1 added 11.03.2014 'ntfchmod' : 'ПроменÑ� Ñ�е вида на файл', // from v2.1 added 20.6.2015 'ntfpreupload': 'Проверка на името на файла за качване', // from v2.1 added 31.11.2015 'ntfzipdl' : 'Създаване на файл за изтеглÑ�не', // from v2.1.7 added 23.1.2016 'ntfparents' : 'Получава Ñ�е информациÑ� за пътÑ�', // from v2.1.17 added 2.11.2016 'ntfchunkmerge': 'Обработка на качениÑ� файл', // from v2.1.17 added 2.11.2016 'ntftrash' : 'ПрехвърлÑ�Ñ‚ Ñ�е позиции в кошчето', // from v2.1.24 added 2.5.2017 'ntfrestore' : 'Извършва Ñ�е възÑ�тановÑ�ване от кошчето', // from v2.1.24 added 3.5.2017 'ntfchkdir' : 'Проверка на целевата папка', // from v2.1.24 added 3.5.2017 'ntfundo' : 'ОтмÑ�на на предишната операциÑ�', // from v2.1.27 added 31.07.2017 'ntfredo' : 'ВъзÑ�тановÑ�ване на предходните отменени', // from v2.1.27 added 31.07.2017 /*********************************** volumes *********************************/ 'volume_Trash' : 'Кошче', //from v2.1.24 added 29.4.2017 /************************************ dates **********************************/ 'dateUnknown' : 'неизвеÑ�тна', 'Today' : 'днеÑ�', 'Yesterday' : 'вчера', 'msJan' : 'Ñ�ну', 'msFeb' : 'фев', 'msMar' : 'мар', 'msApr' : 'апр', 'msMay' : 'май', 'msJun' : 'юни', 'msJul' : 'юли', 'msAug' : 'авг', 'msSep' : 'Ñ�еп', 'msOct' : 'окт', 'msNov' : 'ное', 'msDec' : 'дек', 'January' : 'Ñ�нуари', 'February' : 'февруари', 'March' : 'март', 'April' : 'април', 'May' : 'май', 'June' : 'юни', 'July' : 'юли', 'August' : 'авгуÑ�Ñ‚', 'September' : 'Ñ�ептември', 'October' : 'октомври', 'November' : 'ноември', 'December' : 'декември', 'Sunday' : 'неделÑ�', 'Monday' : 'понеделник', 'Tuesday' : 'вторник', 'Wednesday' : 'Ñ�Ñ€Ñ�да', 'Thursday' : 'четвъртък', 'Friday' : 'петък', 'Saturday' : 'Ñ�ъбота', 'Sun' : 'нед', 'Mon' : 'пон', 'Tue' : 'вто', 'Wed' : 'Ñ�Ñ€Ñ�', 'Thu' : 'чет', 'Fri' : 'пет', 'Sat' : 'Ñ�ъб', /******************************** sort variants ********************************/ 'sortname' : 'по име', 'sortkind' : 'по вид', 'sortsize' : 'по размер', 'sortdate' : 'по дата', 'sortFoldersFirst' : 'Папките първи', 'sortperm' : 'по права', // from v2.1.13 added 13.06.2016 'sortmode' : 'по вид', // from v2.1.13 added 13.06.2016 'sortowner' : 'по Ñ�обÑ�твеник', // from v2.1.13 added 13.06.2016 'sortgroup' : 'по група', // from v2.1.13 added 13.06.2016 'sortAlsoTreeview' : 'Също дървовиден изглед', // from v2.1.15 added 01.08.2016 /********************************** new items **********************************/ 'untitled file.txt' : 'NewFile.txt', // added 10.11.2015 'untitled folder' : 'NewFolder', // added 10.11.2015 'Archive' : 'NewArchive', // from v2.1 added 10.11.2015 /********************************** messages **********************************/ 'confirmReq' : 'ИзиÑ�ква Ñ�е подтвърждение', 'confirmRm' : 'Сигурни ли Ñ�те, че желаете да премахнете файловете?
          Това дей�твие е необратимо!', 'confirmRepl' : 'Да замен� ли �тари� файл � нови�?', 'confirmRest' : 'Да �е замени ли �ъще�твуващата позици� � тази в кошчето?', // fromv2.1.24 added 5.5.2017 'confirmConvUTF8' : '�е е в UTF-8 формат
          Конвертиране до UTF-8?
          Съдържанието �тава в UTF-8 формат при запазване �лед конвер�и�та.', // from v2.1 added 08.04.2014 'confirmNonUTF8' : 'Кодирането на този файл не може да бъде открито. �еобходимо е временно да �е преобразува в UTF-8 за редактиране.
          Мол�, изберете кодиране на този файл.', // from v2.1.19 added 28.11.2016 'confirmNotSave' : 'Има направени промени.
          Те ще бъдат загубени, ако не запишете промените.', // from v2.1 added 15.7.2015 'confirmTrash' : '�аи�тина ли и�кате да преме�тите позиции в кошчето за боклук?', //from v2.1.24 added 29.4.2017 'apllyAll' : 'Приложи за в�ички', 'name' : 'Име', 'size' : 'Размер', 'perms' : 'Права', 'modify' : 'Променено', 'kind' : 'Вид', 'read' : 'четене', 'write' : 'запи�', 'noaccess' : 'без до�тъп', 'and' : 'и', 'unknown' : 'непознат', 'selectall' : 'Избери в�ички файлове', 'selectfiles' : 'Избери файл(ове)', 'selectffile' : 'Избери първи�т файл', 'selectlfile' : 'Избери по�ледни�т файл', 'viewlist' : 'Изглед �пи�ък', 'viewicons' : 'Изглед икони', 'viewSmall' : 'Малки икони', // from v2.1.39 added 22.5.2018 'viewMedium' : 'Средни икони', // from v2.1.39 added 22.5.2018 'viewLarge' : 'Големи икони', // from v2.1.39 added 22.5.2018 'viewExtraLarge' : 'Много големи икони', // from v2.1.39 added 22.5.2018 'places' : 'Избрани', 'calc' : 'Изчи�ли', 'path' : 'Път', 'aliasfor' : 'Връзка към', 'locked' : 'Заключен', 'dim' : 'Размери', 'files' : 'Файлове', 'folders' : 'Папки', 'items' : 'Позиции', 'yes' : 'да', 'no' : 'не', 'link' : 'Връзка', 'searcresult' : 'Резултати от тър�енето', 'selected' : 'Избрани позиции', 'about' : 'За', 'shortcuts' : 'Бързи клавиши', 'help' : 'Помощ', 'webfm' : 'Файлов менажер за Интернет', 'ver' : 'Вер�и�', 'protocolver' : 'вер�и� на протокола', 'homepage' : '�ачало', 'docs' : 'Документаци�', 'github' : 'Разклонение в Github', 'twitter' : 'По�ледвайте ни в Twitter', 'facebook' : 'При�ъединете �е към на� във Facebook', 'team' : 'Екип', 'chiefdev' : 'Главен разработчик', 'developer' : 'разработчик', 'contributor' : '�ътрудник', 'maintainer' : 'поддръжка', 'translator' : 'преводач', 'icons' : 'Икони', 'dontforget' : 'и не забрав�йте да �и вземете кърпата', 'shortcutsof' : 'Преките пътища �а изключени', 'dropFiles' : 'Пу�нете файловете тук', 'or' : 'или', 'selectForUpload' : 'Избери файлове', 'moveFiles' : 'Преме�ти файлове', 'copyFiles' : 'Копирай файлове', 'restoreFiles' : 'Въз�танови файлове', // from v2.1.24 added 5.5.2017 'rmFromPlaces' : 'Премахни от избрани', 'aspectRatio' : 'Отношение', 'scale' : 'Мащаб', 'width' : 'Ширина', 'height' : 'Ви�очина', 'resize' : 'Преоразмери', 'crop' : 'Отрежи', 'rotate' : 'Ротирай', 'rotate-cw' : 'Ротирай 90 граду�а CW', 'rotate-ccw' : 'Ротирай 90 граду�а CCW', 'degree' : '°', 'netMountDialogTitle' : 'Монтиране на мрежов ре�ур�', // added 18.04.2012 'protocol' : 'Протокол', // added 18.04.2012 'host' : 'Хо�т', // added 18.04.2012 'port' : 'Порт', // added 18.04.2012 'user' : 'Потребител', // added 18.04.2012 'pass' : 'Парола', // added 18.04.2012 'confirmUnmount' : 'Ще размонтирате $1?', // from v2.1 added 30.04.2012 'dropFilesBrowser': 'Пу�ни или вмъкни файлове от браузера', // from v2.1 added 30.05.2012 'dropPasteFiles' : 'Тук по�нете файловете, URL адре�ите или изображени�та от клипборда', // from v2.1 added 07.04.2014 'encoding' : 'Кодировка', // from v2.1 added 19.12.2014 'locale' : 'Локали', // from v2.1 added 19.12.2014 'searchTarget' : 'Цел: $1', // from v2.1 added 22.5.2015 'searchMime' : 'Тър�ене по въведен MIME тип', // from v2.1 added 22.5.2015 'owner' : 'Соб�твеник', // from v2.1 added 20.6.2015 'group' : 'Група', // from v2.1 added 20.6.2015 'other' : 'Други', // from v2.1 added 20.6.2015 'execute' : 'Изпълн�ва', // from v2.1 added 20.6.2015 'perm' : 'Разрешение', // from v2.1 added 20.6.2015 'mode' : 'Вид', // from v2.1 added 20.6.2015 'emptyFolder' : 'Папката е празна', // from v2.1.6 added 30.12.2015 'emptyFolderDrop' : 'Папката е празна\\A Влачи и пу�ни за да добавите файлове', // from v2.1.6 added 30.12.2015 'emptyFolderLTap' : 'Папката е празна\\A Доко�нете дълго за да добавите позиции', // from v2.1.6 added 30.12.2015 'quality' : 'Каче�тво', // from v2.1.6 added 5.1.2016 'autoSync' : '�втоматично �инхронизиране', // from v2.1.6 added 10.1.2016 'moveUp' : 'Преме�ти нагоре', // from v2.1.6 added 18.1.2016 'getLink' : 'Вземи URL връзка', // from v2.1.7 added 9.2.2016 'selectedItems' : 'Избрани позиции ($1)', // from v2.1.7 added 2.19.2016 'folderId' : 'Папка ID', // from v2.1.10 added 3.25.2016 'offlineAccess' : 'Позволи офлайн до�тъп', // from v2.1.10 added 3.25.2016 'reAuth' : 'За повторно удо�товер�ване', // from v2.1.10 added 3.25.2016 'nowLoading' : 'Сега �е зарежда...', // from v2.1.12 added 4.26.2016 'openMulti' : 'Отвар�не на н�колко файла', // from v2.1.12 added 5.14.2016 'openMultiConfirm': 'Опитвате �е да отворите $1 файла. �аи�тина ли и�кате да ги отворите в браузъра?', // from v2.1.12 added 5.14.2016 'emptySearch' : '��ма резултат от тър�енето.', // from v2.1.12 added 5.16.2016 'editingFile' : 'Редактира �е файл.', // from v2.1.13 added 6.3.2016 'hasSelected' : 'Вие �те избрали $1 позиции.', // from v2.1.13 added 6.3.2016 'hasClipboard' : 'Имате $1 позиции в клипборда.', // from v2.1.13 added 6.3.2016 'incSearchOnly' : 'Инкременталното тър�ене е �амо от текущи� изглед.', // from v2.1.13 added 6.30.2016 'reinstate' : 'Въз�танов�ване', // from v2.1.15 added 3.8.2016 'complete' : '$1 завършени', // from v2.1.15 added 21.8.2016 'contextmenu' : 'Контек�тно меню', // from v2.1.15 added 9.9.2016 'pageTurning' : 'Завъртане на �траницата', // from v2.1.15 added 10.9.2016 'volumeRoots' : '�ачала на ре�ур�и', // from v2.1.16 added 16.9.2016 'reset' : '�улиране', // from v2.1.16 added 1.10.2016 'bgcolor' : 'Цв�т на фона', // from v2.1.16 added 1.10.2016 'colorPicker' : 'Сред�тво за избиране на цв�т', // from v2.1.16 added 1.10.2016 '8pxgrid' : '8px мрежа', // from v2.1.16 added 4.10.2016 'enabled' : '�ктивно', // from v2.1.16 added 4.10.2016 'disabled' : '�еактивно', // from v2.1.16 added 4.10.2016 'emptyIncSearch' : '��ма резултат от тър�енето в текущи� изглед.\\A�ати�нете [Enter] за да разширите целта на тър�ене.', // from v2.1.16 added 5.10.2016 'emptyLetSearch' : 'Резултатите от тър�енето на първата буква �а празни в текущи� изглед.', // from v2.1.23 added 24.3.2017 'textLabel' : 'Тек�тов етикет', // from v2.1.17 added 13.10.2016 'minsLeft' : '$1 мин о�тават', // from v2.1.17 added 13.11.2016 'openAsEncoding' : 'Отвар�не отново � избрано кодиране', // from v2.1.19 added 2.12.2016 'saveAsEncoding' : 'Запазете � избраното кодиране', // from v2.1.19 added 2.12.2016 'selectFolder' : 'Избери папка', // from v2.1.20 added 13.12.2016 'firstLetterSearch': 'Тър�ене по първа буква', // from v2.1.23 added 24.3.2017 'presets' : 'Мо�три', // from v2.1.25 added 26.5.2017 'tooManyToTrash' : 'Прекалено много позиции, не може да преме�ти в кошчето.', // from v2.1.25 added 9.6.2017 'TextArea' : 'Тек�тово поле', // from v2.1.25 added 14.6.2017 'folderToEmpty' : 'Изпразнете папка "$1".', // from v2.1.25 added 22.6.2017 'filderIsEmpty' : 'В папка "$1" н�ма позиции.', // from v2.1.25 added 22.6.2017 'preference' : '�а�тройки', // from v2.1.26 added 28.6.2017 'language' : '�а�тройка на езика', // from v2.1.26 added 28.6.2017 'clearBrowserData': 'Инициализирайте на�тройките запаметени в този браузър', // from v2.1.26 added 28.6.2017 'toolbarPref' : '�а�тройки на лентата � ин�трументи', // from v2.1.27 added 2.8.2017 'charsLeft' : '... $1 �имвола о�тават.', // from v2.1.29 added 30.8.2017 'sum' : 'Сумарно', // from v2.1.29 added 28.9.2017 'roughFileSize' : 'Груб размер на файла', // from v2.1.30 added 2.11.2017 'autoFocusDialog' : 'Фоку�ирайте върху елемента в диалогови� прозорец � мишката', // from v2.1.30 added 2.11.2017 'select' : 'Избери', // from v2.1.30 added 23.11.2017 'selectAction' : 'Дей�твие при избор на файл', // from v2.1.30 added 23.11.2017 'useStoredEditor' : 'Отворете � редактора, използван за по�леден път', // from v2.1.30 added 23.11.2017 'selectinvert' : 'Обърнете �елекци�та', // from v2.1.30 added 25.11.2017 'renameMultiple' : '�аи�тина ли и�кате да преименувате $1 избрани позиции като $2?
          Това не може да бъде отменено!', // from v2.1.31 added 4.12.2017 'batchRename' : 'Групово преименуване', // from v2.1.31 added 8.12.2017 'plusNumber' : '+ Ð�омер', // from v2.1.31 added 8.12.2017 'asPrefix' : 'Добави префикÑ�', // from v2.1.31 added 8.12.2017 'asSuffix' : 'Добави Ñ�уфикÑ�', // from v2.1.31 added 8.12.2017 'changeExtention' : 'Промени разширение', // from v2.1.31 added 8.12.2017 'columnPref' : 'Ð�аÑ�тройки за колони (Изглед в Ñ�пиÑ�ък)', // from v2.1.32 added 6.2.2018 'reflectOnImmediate' : 'Ð’Ñ�ички промени ще Ñ�е отразÑ�Ñ‚ незабавно в архива.', // from v2.1.33 added 2.3.2018 'reflectOnUnmount' : 'Промените нÑ�ма да Ñ�е отразÑ�Ñ‚, докато не размонтирате този диÑ�к.', // from v2.1.33 added 2.3.2018 'unmountChildren' : 'The following volume(s) mounted on this volume also unmounted. Are you sure to unmount it?', // from v2.1.33 added 5.3.2018 'selectionInfo' : 'ИнформациÑ� за Ñ�елекциÑ�та', // from v2.1.33 added 7.3.2018 'hashChecker' : 'Ð�лгоритми за показване на файловиÑ� хеш', // from v2.1.33 added 10.3.2018 'infoItems' : 'Info Items (Selection Info Panel)', // from v2.1.38 added 28.3.2018 'pressAgainToExit': 'Ð�атиÑ�нете отново, за да излезете.', // from v2.1.38 added 1.4.2018 'toolbar' : 'Лента Ñ� инÑ�трументи', // from v2.1.38 added 4.4.2018 'workspace' : 'Работно проÑ�транÑ�тво', // from v2.1.38 added 4.4.2018 'dialog' : 'Диалог', // from v2.1.38 added 4.4.2018 'all' : 'Ð’Ñ�ички', // from v2.1.38 added 4.4.2018 'iconSize' : 'Размер на иконите (изглед Ñ� икони)', // from v2.1.39 added 7.5.2018 'editorMaximized' : 'ОтварÑ� макÑ�имизиран прозорец на редактора', // from v2.1.40 added 30.6.2018 'editorConvNoApi' : 'Тъй като в момента не е налична API за конверÑ�иÑ�та, молÑ�, конвертирайте в уебÑ�айта.', //from v2.1.40 added 8.7.2018 'editorConvNeedUpload' : 'След конверÑ�иÑ�та трÑ�бва да го качите Ñ� URL адреÑ�а или изтеглениÑ� файл, за да запазите конвертираниÑ� файл.', //from v2.1.40 added 8.7.2018 'convertOn' : 'Конвертиране на Ñ�айта от $1', // from v2.1.40 added 10.7.2018 'integrations' : 'Интеграции', // from v2.1.40 added 11.7.2018 'integrationWith' : 'Този elFinder има Ñ�ледните интегрирани външни уÑ�луги. МолÑ�, проверете уÑ�ловиÑ�та за ползване, декларациÑ�та за поверителноÑ�Ñ‚ и Ñ‚.н., преди да ги използвате.', // from v2.1.40 added 11.7.2018 'showHidden' : 'Покажи Ñ�критите елементи', // from v2.1.41 added 24.7.2018 'hideHidden' : 'Скрий Ñ�критите елементи', // from v2.1.41 added 24.7.2018 'toggleHidden' : 'Покажи/Ñ�крий Ñ�критите елементи', // from v2.1.41 added 24.7.2018 /********************************** mimetypes **********************************/ 'kindUnknown' : 'Ð�епознат', 'kindRoot' : 'Ð�ачало на реÑ�урÑ�', // from v2.1.16 added 16.10.2016 'kindFolder' : 'Папка', 'kindSelects' : 'Селекции', // from v2.1.29 added 29.8.2017 'kindAlias' : 'Връзка', 'kindAliasBroken' : 'Счупена връзка', // applications 'kindApp' : 'Приложение', 'kindPostscript' : 'Postscript документ', 'kindMsOffice' : 'Microsoft Office документ', 'kindMsWord' : 'Microsoft Word документ', 'kindMsExcel' : 'Microsoft Excel документ', 'kindMsPP' : 'Microsoft Powerpoint презентациÑ�', 'kindOO' : 'Open Office документ', 'kindAppFlash' : 'Flash приложение', 'kindPDF' : 'PDF документ', 'kindTorrent' : 'Bittorrent файл', 'kind7z' : '7z архив', 'kindTAR' : 'TAR архив', 'kindGZIP' : 'GZIP архив', 'kindBZIP' : 'BZIP архив', 'kindXZ' : 'XZ архив', 'kindZIP' : 'ZIP архив', 'kindRAR' : 'RAR архив', 'kindJAR' : 'Java JAR файл', 'kindTTF' : 'True Type шрифт', 'kindOTF' : 'Open Type шрифт', 'kindRPM' : 'RPM пакет', // fonts 'kindFont' : 'шрифт', 'kindSFNT' : 'SFNT шрифт', 'kindEOT' : 'Embedded Open Type шрифт', 'kindWOFF' : 'Web Open Font Format шрифт', 'kindWOFF2' : 'Web Open Font Format 2 шрифт', // texts 'kindText' : 'ТекÑ�тов документ', 'kindTextPlain' : 'ЧиÑ�Ñ‚ текÑ�Ñ‚', 'kindPHP' : 'PHP изходен код', 'kindCSS' : 'CSS таблица Ñ�ÑŠÑ� Ñ�тилове', 'kindHTML' : 'HTML документ', 'kindJS' : 'Javascript изходен код', 'kindRTF' : 'RTF текÑ�тови файл', 'kindC' : 'C изходен код', 'kindCHeader' : 'C header изходен код', 'kindCPP' : 'C++ изходен код', 'kindCPPHeader' : 'C++ header изходен код', 'kindShell' : 'Unix shell изходен код', 'kindPython' : 'Python изходен код', 'kindJava' : 'Java изходен код', 'kindRuby' : 'Ruby изходен код', 'kindPerl' : 'Perl изходен код', 'kindSQL' : 'SQL изходен код', 'kindXML' : 'XML документ', 'kindAWK' : 'AWK изходен код', 'kindCSV' : 'CSV Ñ�тойноÑ�ти разделени Ñ�ÑŠÑ� запетаÑ�', 'kindDOCBOOK' : 'Docbook XML документ', 'kindMarkdown' : 'Markdown текÑ�Ñ‚', // added 20.7.2015 // images 'kindImage' : 'Изображение', 'kindBMP' : 'BMP изображение', 'kindJPEG' : 'JPEG изображение', 'kindGIF' : 'GIF изображение', 'kindPNG' : 'PNG изображение', 'kindTIFF' : 'TIFF изображение', 'kindTGA' : 'TGA изображение', 'kindPSD' : 'Adobe Photoshop изображение', 'kindXBITMAP' : 'X bitmap изображение', 'kindPXM' : 'Pixelmator изображение', // media 'kindAudio' : 'Ð�удио медиÑ�', 'kindAudioMPEG' : 'MPEG звук', 'kindAudioMPEG4' : 'MPEG-4 звук', 'kindAudioMIDI' : 'MIDI звук', 'kindAudioOGG' : 'Ogg Vorbis звук', 'kindAudioWAV' : 'WAV звук', 'AudioPlaylist' : 'MP3 Ñ�пиÑ�ък за изпълнение', 'kindVideo' : 'Видео медиÑ�', 'kindVideoDV' : 'DV филм', 'kindVideoMPEG' : 'MPEG филм', 'kindVideoMPEG4' : 'MPEG-4 филм', 'kindVideoAVI' : 'AVI филм', 'kindVideoMOV' : 'Quick Time филм', 'kindVideoWM' : 'Windows Media филм', 'kindVideoFlash' : 'Flash филм', 'kindVideoMKV' : 'Matroska филм', 'kindVideoOGG' : 'Ogg филм' } }; })); PK!~C“ÅBÅB@file-manager-advanced/application/library/js/i18n/elfinder.ca.jsnu„[µü¤/** * Catalan translation * @author Sergio Jovani * @version 2014-12-19 */ (function(root, factory) { if (typeof define === 'function' && define.amd) { define(['elfinder'], factory); } else if (typeof exports !== 'undefined') { module.exports = factory(require('elfinder')); } else { factory(root.elFinder); } }(this, function(elFinder) { elFinder.prototype.i18.ca = { translator : 'Sergio Jovani <lesergi@gmail.com>', language : 'Català', direction : 'ltr', dateFormat : 'M d, Y h:i A', // Mar 13, 2012 05:27 PM fancyDateFormat : '$1 h:i A', // will produce smth like: Today 12:25 PM messages : { /********************************** errors **********************************/ 'error' : 'Error', 'errUnknown' : 'Error desconegut.', 'errUnknownCmd' : 'Ordre desconeguda.', 'errJqui' : 'La configuració de jQuery UI no és vàlida. S\'han d\'incloure els components "selectable", "draggable" i "droppable".', 'errNode' : 'elFinder necessita crear elements DOM.', 'errURL' : 'La configuració de l\'elFinder no és vàlida! L\'opció URL no està configurada.', 'errAccess' : 'Accés denegat.', 'errConnect' : 'No s\'ha pogut connectar amb el rerefons.', 'errAbort' : 'S\'ha interromput la connexió.', 'errTimeout' : 'Temps de connexió excedit.', 'errNotFound' : 'No s\'ha trobat el rerefons.', 'errResponse' : 'La resposta del rerefons no és vàlida.', 'errConf' : 'La configuració del rerefons no és vàlida.', 'errJSON' : 'No està instal·lat el mòdul JSON del PHP.', 'errNoVolumes' : 'No s\'han trobat volums llegibles.', 'errCmdParams' : 'Els paràmetres per l\'ordre "$1" no són vàlids.', 'errDataNotJSON' : 'Les dades no són JSON.', 'errDataEmpty' : 'Les dades estan buides.', 'errCmdReq' : 'La sol·licitud del rerefons necessita el nom de l\'ordre.', 'errOpen' : 'No s\'ha pogut obrir "$1".', 'errNotFolder' : 'L\'objecte no és una carpeta.', 'errNotFile' : 'L\'objecte no és un fitxer.', 'errRead' : 'No s\'ha pogut llegir "$1".', 'errWrite' : 'No s\'ha pogut escriure a "$1".', 'errPerm' : 'Permís denegat.', 'errLocked' : '"$1" està bloquejat i no podeu canviar-li el nom, moure-lo ni suprimir-lo.', 'errExists' : 'Ja existeix un fitxer anomenat "$1".', 'errInvName' : 'El nom de fitxer no és vàlid.', 'errFolderNotFound' : 'No s\'ha trobat la carpeta.', 'errFileNotFound' : 'No s\'ha trobat el fitxer.', 'errTrgFolderNotFound' : 'No s\'ha trobat la carpeta de destí "$1".', 'errPopup' : 'El navegador ha evitat obrir una finestra emergent. Autoritzeu-la per obrir el fitxer.', 'errMkdir' : 'No s\'ha pogut crear la carpeta "$1".', 'errMkfile' : 'No s\'ha pogut crear el fitxer "$1".', 'errRename' : 'No s\'ha pogut canviar el nom de "$1".', 'errCopyFrom' : 'No està permès copiar fitxers des del volum "$1".', 'errCopyTo' : 'No està permès copiar fitxers al volum "$1".', 'errUpload' : 'S\'ha produït un error en la càrrega.', 'errUploadFile' : 'No s\'ha pogut carregar "$1".', 'errUploadNoFiles' : 'No s\'han trobat fitxers per carregar.', 'errUploadTotalSize' : 'Les dades excedeixen la mida màxima permesa.', 'errUploadFileSize' : 'El fitxer excedeix la mida màxima permesa.', 'errUploadMime' : 'El tipus de fitxer no està permès.', 'errUploadTransfer' : 'S\'ha produït un error en transferir "$1".', 'errNotReplace' : 'Object "$1" already exists at this location and can not be replaced by object with another type.', 'errReplace' : 'Unable to replace "$1".', 'errSave' : 'No s\'ha pogut desar "$1".', 'errCopy' : 'No s\'ha pogut copiar "$1".', 'errMove' : 'No s\'ha pogut moure "$1".', 'errCopyInItself' : 'No s\'ha pogut copiar "$1" a si mateix.', 'errRm' : 'No s\'ha pogut suprimir "$1".', 'errRmSrc' : 'Unable remove source file(s).', 'errExtract' : 'No s\'han pogut extreure els fitxers de "$1".', 'errArchive' : 'No s\'ha pogut crear l\'arxiu.', 'errArcType' : 'El tipus d\'arxiu no està suportat.', 'errNoArchive' : 'El fitxer no és un arxiu o és un tipus no suportat.', 'errCmdNoSupport' : 'El rerefons no suporta aquesta ordre.', 'errReplByChild' : 'No es pot reemplaçar la carpeta “$1â€� per un element que conté.', 'errArcSymlinks' : 'Per raons de seguretat, no es permet extreure arxius que contenen enllaços simbòlics.', 'errArcMaxSize' : 'Els fitxers de l\'arxiu excedeixen la mida màxima permesa.', 'errResize' : 'No s\'ha pogut redimensionar "$1".', 'errResizeDegree' : 'Invalid rotate degree.', 'errResizeRotate' : 'Unable to rotate image.', 'errResizeSize' : 'Invalid image size.', 'errResizeNoChange' : 'Image size not changed.', 'errUsupportType' : 'El tipus de fitxer no està suportat.', 'errNotUTF8Content' : 'File "$1" is not in UTF-8 and cannot be edited.', 'errNetMount' : 'Unable to mount "$1".', 'errNetMountNoDriver' : 'Unsupported protocol.', 'errNetMountFailed' : 'Mount failed.', 'errNetMountHostReq' : 'Host required.', 'errSessionExpires' : 'Your session has expired due to inactivity.', 'errCreatingTempDir' : 'Unable to create temporary directory: "$1"', 'errFtpDownloadFile' : 'Unable to download file from FTP: "$1"', 'errFtpUploadFile' : 'Unable to upload file to FTP: "$1"', 'errFtpMkdir' : 'Unable to create remote directory on FTP: "$1"', 'errArchiveExec' : 'Error while archiving files: "$1"', 'errExtractExec' : 'Error while extracting files: "$1"', /******************************* commands names ********************************/ 'cmdarchive' : 'Crea arxiu', 'cmdback' : 'Enrere', 'cmdcopy' : 'Copia', 'cmdcut' : 'Retalla', 'cmddownload' : 'Descarrega', 'cmdduplicate' : 'Duplica', 'cmdedit' : 'Edita el fitxer', 'cmdextract' : 'Extreu els fitxers de l\'arxiu', 'cmdforward' : 'Endavant', 'cmdgetfile' : 'Selecciona els fitxers', 'cmdhelp' : 'Quant a aquest programari', 'cmdhome' : 'Inici', 'cmdinfo' : 'Obté informació', 'cmdmkdir' : 'Nova carpeta', 'cmdmkfile' : 'Nou fitxer', 'cmdopen' : 'Obre', 'cmdpaste' : 'Enganxa', 'cmdquicklook' : 'Previsualitza', 'cmdreload' : 'Torna a carregar', 'cmdrename' : 'Canvia el nom', 'cmdrm' : 'Suprimeix', 'cmdsearch' : 'Cerca fitxers', 'cmdup' : 'Vés al directori superior', 'cmdupload' : 'Carrega fitxers', 'cmdview' : 'Visualitza', 'cmdresize' : 'Redimensiona la imatge', 'cmdsort' : 'Ordena', 'cmdnetmount' : 'Mount network volume', /*********************************** buttons ***********************************/ 'btnClose' : 'Tanca', 'btnSave' : 'Desa', 'btnRm' : 'Suprimeix', 'btnApply' : 'Aplica', 'btnCancel' : 'Cancel·la', 'btnNo' : 'No', 'btnYes' : 'Sí', 'btnDiscard': 'Discard changes', 'btnMount' : 'Mount', /******************************** notifications ********************************/ 'ntfopen' : 'S\'està obrint la carpeta', 'ntffile' : 'S\'està obrint el fitxer', 'ntfreload' : 'S\'està tornant a carregar el contingut de la carpeta', 'ntfmkdir' : 'S\'està creant el directori', 'ntfmkfile' : 'S\'estan creant el fitxers', 'ntfrm' : 'S\'estan suprimint els fitxers', 'ntfcopy' : 'S\'estan copiant els fitxers', 'ntfmove' : 'S\'estan movent els fitxers', 'ntfprepare' : 'S\'està preparant per copiar fitxers', 'ntfrename' : 'S\'estan canviant els noms del fitxers', 'ntfupload' : 'S\'estan carregant els fitxers', 'ntfdownload' : 'S\'estan descarregant els fitxers', 'ntfsave' : 'S\'estan desant els fitxers', 'ntfarchive' : 'S\'està creant l\'arxiu', 'ntfextract' : 'S\'estan extreient els fitxers de l\'arxiu', 'ntfsearch' : 'S\'estan cercant els fitxers', 'ntfresize' : 'Resizing images', 'ntfsmth' : 'S\'estan realitzant operacions', 'ntfloadimg' : 'S\'està carregant la imatge', 'ntfnetmount' : 'Mounting network volume', 'ntfdim' : 'Acquiring image dimension', /************************************ dates **********************************/ 'dateUnknown' : 'desconegut', 'Today' : 'Avui', 'Yesterday' : 'Ahir', 'msJan' : 'gen.', 'msFeb' : 'febr.', 'msMar' : 'març', 'msApr' : 'abr.', 'msMay' : 'maig', 'msJun' : 'juny', 'msJul' : 'jul.', 'msAug' : 'ag.', 'msSep' : 'set.', 'msOct' : 'oct.', 'msNov' : 'nov.', 'msDec' : 'des.', 'January' : 'January', 'February' : 'February', 'March' : 'March', 'April' : 'April', 'May' : 'May', 'June' : 'June', 'July' : 'July', 'August' : 'August', 'September' : 'September', 'October' : 'October', 'November' : 'November', 'December' : 'December', 'Sunday' : 'Sunday', 'Monday' : 'Monday', 'Tuesday' : 'Tuesday', 'Wednesday' : 'Wednesday', 'Thursday' : 'Thursday', 'Friday' : 'Friday', 'Saturday' : 'Saturday', 'Sun' : 'Sun', 'Mon' : 'Mon', 'Tue' : 'Tue', 'Wed' : 'Wed', 'Thu' : 'Thu', 'Fri' : 'Fri', 'Sat' : 'Sat', /******************************** sort variants ********************************/ 'sortname' : 'per nom', 'sortkind' : 'per tipus', 'sortsize' : 'per mida', 'sortdate' : 'per data', 'sortFoldersFirst' : 'Folders first', /********************************** messages **********************************/ 'confirmReq' : 'Es necessita confirmació', 'confirmRm' : 'Voleu suprimir els fitxers?
          L\'acció es podrà desfer!', 'confirmRepl' : 'Voleu reemplaçar el fitxer antic amb el nou?', 'apllyAll' : 'Aplica a tot', 'name' : 'Nom', 'size' : 'Mida', 'perms' : 'Permisos', 'modify' : 'Modificat', 'kind' : 'Tipus', 'read' : 'llegir', 'write' : 'escriure', 'noaccess' : 'sense accés', 'and' : 'i', 'unknown' : 'desconegut', 'selectall' : 'Selecciona tots els fitxers', 'selectfiles' : 'Selecciona el(s) fitxer(s)', 'selectffile' : 'Selecciona el primer fitxer', 'selectlfile' : 'Selecciona l\'últim fitxer', 'viewlist' : 'Vista en llista', 'viewicons' : 'Vista en icones', 'places' : 'Llocs', 'calc' : 'Calcula', 'path' : 'Camí', 'aliasfor' : 'Àlies per', 'locked' : 'Bloquejat', 'dim' : 'Dimensions', 'files' : 'Fitxers', 'folders' : 'Carpetes', 'items' : 'Elements', 'yes' : 'sí', 'no' : 'no', 'link' : 'Enllaç', 'searcresult' : 'Resultats de la cerca', 'selected' : 'Elements seleccionats', 'about' : 'Quant a', 'shortcuts' : 'Dreceres', 'help' : 'Ajuda', 'webfm' : 'Gestor de fitxers web', 'ver' : 'Versió', 'protocolver' : 'versió de protocol', 'homepage' : 'Pàgina del projecte', 'docs' : 'Documentació', 'github' : 'Bifurca\'ns a GitHub', 'twitter' : 'Segueix-nos a Twitter', 'facebook' : 'Uniu-vos a Facebook', 'team' : 'Equip', 'chiefdev' : 'cap desenvolupador', 'developer' : 'desenvolupador', 'contributor' : 'col·laborador', 'maintainer' : 'mantenidor', 'translator' : 'traductor', 'icons' : 'Icones', 'dontforget' : 'i no oblideu agafar la vostra tovallola', 'shortcutsof' : 'Les dreceres estan inhabilitades', 'dropFiles' : 'Arrossegueu els fitxers aquí', 'or' : 'o', 'selectForUpload' : 'Seleccioneu els fitxer a carregar', 'moveFiles' : 'Mou els fitxers', 'copyFiles' : 'Copia els fitxers', 'rmFromPlaces' : 'Suprimeix dels llocs', 'aspectRatio' : 'Relació d\'aspecte', 'scale' : 'Escala', 'width' : 'Amplada', 'height' : 'Alçada', 'resize' : 'Redimensiona', 'crop' : 'Retalla', 'rotate' : 'Rotate', 'rotate-cw' : 'Rotate 90 degrees CW', 'rotate-ccw' : 'Rotate 90 degrees CCW', 'degree' : '°', 'netMountDialogTitle' : 'Mount network volume', 'protocol' : 'Protocol', 'host' : 'Host', 'port' : 'Port', 'user' : 'User', 'pass' : 'Password', /********************************** mimetypes **********************************/ 'kindUnknown' : 'Desconegut', 'kindFolder' : 'Carpeta', 'kindAlias' : 'Àlies', 'kindAliasBroken' : 'Àlies no vàlid', // applications 'kindApp' : 'Aplicació', 'kindPostscript' : 'Document Postscript', 'kindMsOffice' : 'Document del Microsoft Office', 'kindMsWord' : 'Document del Microsoft Word', 'kindMsExcel' : 'Document del Microsoft Excel', 'kindMsPP' : 'Presentació del Microsoft Powerpoint', 'kindOO' : 'Document de l\'Open Office', 'kindAppFlash' : 'Aplicació Flash', 'kindPDF' : 'Document PDF', 'kindTorrent' : 'Fitxer Bittorrent', 'kind7z' : 'Arxiu 7z', 'kindTAR' : 'Arxiu TAR', 'kindGZIP' : 'Arxiu GZIP', 'kindBZIP' : 'Arxiu BZIP', 'kindXZ' : 'Arxiu XZ', 'kindZIP' : 'Arxiu ZIP', 'kindRAR' : 'Arxiu RAR', 'kindJAR' : 'Fitxer JAR de Java', 'kindTTF' : 'Tipus de lletra True Type', 'kindOTF' : 'Tipus de lletra Open Type', 'kindRPM' : 'Paquet RPM', // fonts 'kindFont' : 'Tipus de lletra', 'kindSFNT' : 'Tipus de lletra SFNT', 'kindEOT' : 'Tipus de lletra Embedded Open Type', 'kindWOFF' : 'Tipus de lletra Web Open Font Format', 'kindWOFF2' : 'Tipus de lletra Web Open Font Format 2', // texts 'kindText' : 'Document de text', 'kindTextPlain' : 'Document de text net', 'kindPHP' : 'Codi PHP', 'kindCSS' : 'Full d\'estils CSS', 'kindHTML' : 'Document HTML', 'kindJS' : 'Codi Javascript', 'kindRTF' : 'Document RTF', 'kindC' : 'Codi C', 'kindCHeader' : 'Codi de caçalera C', 'kindCPP' : 'Codi C++', 'kindCPPHeader' : 'Codi de caçalera C++', 'kindShell' : 'Script Unix', 'kindPython' : 'Codi Python', 'kindJava' : 'Codi Java', 'kindRuby' : 'Codi Ruby', 'kindPerl' : 'Script Perl', 'kindSQL' : 'Codi SQL', 'kindXML' : 'Document XML', 'kindAWK' : 'Codi AWK', 'kindCSV' : 'Document CSV', 'kindDOCBOOK' : 'Document XML de Docbook', // images 'kindImage' : 'Imatge', 'kindBMP' : 'Imatge BMP', 'kindJPEG' : 'Imatge JPEG', 'kindGIF' : 'Imatge GIF', 'kindPNG' : 'Imatge PNG', 'kindTIFF' : 'Imatge TIFF', 'kindTGA' : 'Imatge TGA', 'kindPSD' : 'Imatge Adobe Photoshop', 'kindXBITMAP' : 'Imatge X bitmap', 'kindPXM' : 'Imatge Pixelmator', // media 'kindAudio' : 'Fitxer d\'àudio', 'kindAudioMPEG' : 'Fitxer d\'àudio MPEG', 'kindAudioMPEG4' : 'Fitxer d\'àudio MPEG-4', 'kindAudioMIDI' : 'Fitxer d\'àudio MIDI', 'kindAudioOGG' : 'Fitxer d\'àudio Ogg Vorbis', 'kindAudioWAV' : 'Fitxer d\'àudio WAV', 'AudioPlaylist' : 'Llista de reproducció MP3', 'kindVideo' : 'Fitxer de vídeo', 'kindVideoDV' : 'Fitxer de vídeo DV', 'kindVideoMPEG' : 'Fitxer de vídeo MPEG', 'kindVideoMPEG4' : 'Fitxer de vídeo MPEG-4', 'kindVideoAVI' : 'Fitxer de vídeo AVI', 'kindVideoMOV' : 'Fitxer de vídeo Quick Time', 'kindVideoWM' : 'Fitxer de vídeo Windows Media', 'kindVideoFlash' : 'Fitxer de vídeo Flash', 'kindVideoMKV' : 'Fitxer de vídeo Matroska', 'kindVideoOGG' : 'Fitxer de vídeo Ogg' } }; })); PK!©¥¡¥}¥}@file-manager-advanced/application/library/js/i18n/elfinder.es.jsnu„[µü¤/** * Español internacional translation * @author Julián Torres * @author Luis Faura * @author Adrià Vilanova * @author Wilman Marín Duran * @version 2018-04-10 */ (function(root, factory) { if (typeof define === 'function' && define.amd) { define(['elfinder'], factory); } else if (typeof exports !== 'undefined') { module.exports = factory(require('elfinder')); } else { factory(root.elFinder); } }(this, function(elFinder) { elFinder.prototype.i18.es = { translator : 'Julián Torres <julian.torres@pabernosmatao.com>, Luis Faura <luis@luisfaura.es>, Adrià Vilanova <me@avm99963.tk>, Wilman Marín Duran <fuclo05@hotmail.com>', language : 'Español internacional', direction : 'ltr', dateFormat : 'M d, Y h:i A', // Mar 13, 2012 05:27 PM fancyDateFormat : '$1 h:i A', // will produce smth like: Today 12:25 PM nonameDateFormat : 'ymd-His', // to apply if upload file is noname: 120513172700 messages : { /********************************** errors **********************************/ 'error' : 'Error', 'errUnknown' : 'Error desconocido.', 'errUnknownCmd' : 'Comando desconocido.', 'errJqui' : 'Configuración no válida de jQuery UI. Deben estar incluidos los componentes selectable, draggable y droppable.', 'errNode' : 'elFinder necesita crear elementos DOM.', 'errURL' : '¡Configuración no válida de elFinder! La opción URL no está configurada.', 'errAccess' : 'Acceso denegado.', 'errConnect' : 'No se ha podido conectar con el backend.', 'errAbort' : 'Conexión cancelada.', 'errTimeout' : 'Conexión cancelada por timeout.', 'errNotFound' : 'Backend no encontrado.', 'errResponse' : 'Respuesta no válida del backend.', 'errConf' : 'Configuración no válida del backend .', 'errJSON' : 'El módulo PHP JSON no está instalado.', 'errNoVolumes' : 'No hay disponibles volúmenes legibles.', 'errCmdParams' : 'Parámetros no válidos para el comando "$1".', 'errDataNotJSON' : 'los datos no están en formato JSON.', 'errDataEmpty' : 'No hay datos.', 'errCmdReq' : 'La petición del backend necesita un nombre de comando.', 'errOpen' : 'No se puede abrir "$1".', 'errNotFolder' : 'El objeto no es una carpeta.', 'errNotFile' : 'El objeto no es un archivo.', 'errRead' : 'No se puede leer "$1".', 'errWrite' : 'No se puede escribir en "$1".', 'errPerm' : 'Permiso denegado.', 'errLocked' : '"$1" está bloqueado y no puede ser renombrado, movido o borrado.', 'errExists' : 'Ya existe un archivo llamado "$1".', 'errInvName' : 'Nombre de archivo no válido.', 'errInvDirname' : 'Nombre de carpeta inválido.', // from v2.1.24 added 12.4.2017 'errFolderNotFound' : 'Carpeta no encontrada.', 'errFileNotFound' : 'Archivo no encontrado.', 'errTrgFolderNotFound' : 'Carpeta de destino "$1" no encontrada.', 'errPopup' : 'El navegador impide abrir nuevas ventanas. Puede activarlo en las opciones del navegador.', 'errMkdir' : 'No se puede crear la carpeta "$1".', 'errMkfile' : 'No se puede crear el archivo "$1".', 'errRename' : 'No se puede renombrar "$1".', 'errCopyFrom' : 'No se permite copiar archivos desde el volumen "$1".', 'errCopyTo' : 'No se permite copiar archivos al volumen "$1".', 'errMkOutLink' : 'No se ha podido crear el enlace fuera del volumen raíz.', // from v2.1 added 03.10.2015 'errUpload' : 'Error en el envío.', // old name - errUploadCommon 'errUploadFile' : 'No se ha podido cargar "$1".', // old name - errUpload 'errUploadNoFiles' : 'No hay archivos para subir.', 'errUploadTotalSize' : 'El tamaño de los datos excede el máximo permitido.', // old name - errMaxSize 'errUploadFileSize' : 'El tamaño del archivo excede el máximo permitido.', // old name - errFileMaxSize 'errUploadMime' : 'Tipo de archivo no permitido.', 'errUploadTransfer' : 'Error al transferir "$1".', 'errUploadTemp' : 'No se ha podido crear el archivo temporal para la subida.', // from v2.1 added 26.09.2015 'errNotReplace' : 'El objeto "$1" ya existe y no puede ser reemplazado por otro con otro tipo.', // new 'errReplace' : 'No se puede reemplazar "$1".', 'errSave' : 'No se puede guardar "$1".', 'errCopy' : 'No se puede copiar "$1".', 'errMove' : 'No se puede mover "$1".', 'errCopyInItself' : 'No se puede copiar "$1" en si mismo.', 'errRm' : 'No se puede borrar "$1".', 'errTrash' : 'No se puede enviar a la papelera.', // from v2.1.24 added 30.4.2017 'errRmSrc' : 'No se puede(n) borrar los archivo(s).', 'errExtract' : 'No se puede extraer archivos desde "$1".', 'errArchive' : 'No se puede crear el archivo.', 'errArcType' : 'Tipo de archivo no soportado.', 'errNoArchive' : 'El archivo no es de tipo archivo o es de un tipo no soportado.', 'errCmdNoSupport' : 'El backend no soporta este comando.', 'errReplByChild' : 'La carpeta “$1â€� no puede ser reemplazada por un elemento contenido en ella.', 'errArcSymlinks' : 'Por razones de seguridad no se pueden descomprimir archivos que contengan enlaces simbólicos.', // edited 24.06.2012 'errArcMaxSize' : 'El tamaño del archivo excede el máximo permitido.', 'errResize' : 'Error al redimensionar "$1".', 'errResizeDegree' : 'Grado de rotación inválido.', // added 7.3.2013 'errResizeRotate' : 'Error al rotar la imagen.', // added 7.3.2013 'errResizeSize' : 'Tamaño de imagen inválido.', // added 7.3.2013 'errResizeNoChange' : 'No se puede cambiar el tamaño de la imagen.', // added 7.3.2013 'errUsupportType' : 'Tipo de archivo no soportado.', 'errNotUTF8Content' : 'El archivo "$1" no está en formato UTF-8 y no puede ser editado.', // added 9.11.2011 'errNetMount' : 'Fallo al montar "$1".', // added 17.04.2012 'errNetMountNoDriver' : 'Protocolo no soportado.', // added 17.04.2012 'errNetMountFailed' : 'Fallo al montar.', // added 17.04.2012 'errNetMountHostReq' : 'Dominio requerido.', // added 18.04.2012 'errSessionExpires' : 'La sesión ha expirado por inactividad', 'errCreatingTempDir' : 'No se ha podido crear al directorio temporal: "$1"', 'errFtpDownloadFile' : 'No se ha podido descargar el archivo desde FTP: "$1"', 'errFtpUploadFile' : 'No se ha podido cargar el archivo a FTP: "$1"', 'errFtpMkdir' : 'No se ha podido crear el directorio remoto en FTP: "$1"', 'errArchiveExec' : 'Se ha producido un error durante el archivo: "$1"', 'errExtractExec' : 'Se ha producido un error durante la extracción de archivos: "$1"', 'errNetUnMount' : 'Imposible montar', // from v2.1 added 30.04.2012 'errConvUTF8' : 'No es convertible a UTF-8', // from v2.1 added 08.04.2014 'errFolderUpload' : 'Prueba con un navegador moderno, si quieres subir la carpeta completa.', // from v2.1 added 26.6.2015 'errSearchTimeout' : 'Se agotó el tiempo de espera buscando "$1". Los resultados de búsqueda son parciales.', // from v2.1 added 12.1.2016 'errReauthRequire' : 'Se requiere autorizar de nuevo.', // from v2.1.10 added 24.3.2016 'errMaxTargets' : 'Número máximo de elementos seleccionables es $1.', // from v2.1.17 added 17.10.2016 'errRestore' : 'No se puede restaurar desde la papelera. No se puede identificar el destino de restauración.', // from v2.1.24 added 3.5.2017 'errEditorNotFound' : 'Editor no encontrado para este tipo de archivo.', // from v2.1.25 added 23.5.2017 'errServerError' : 'Error ocurrido en el lado del servidor.', // from v2.1.25 added 16.6.2017 'errEmpty' : 'No es posible vaciar la carpeta "$1".', // from v2.1.25 added 22.6.2017 /******************************* commands names ********************************/ 'cmdarchive' : 'Crear archivo', 'cmdback' : 'Atrás', 'cmdcopy' : 'Copiar', 'cmdcut' : 'Cortar', 'cmddownload' : 'Descargar', 'cmdduplicate' : 'Duplicar', 'cmdedit' : 'Editar archivo', 'cmdextract' : 'Extraer elementos del archivo', 'cmdforward' : 'Adelante', 'cmdgetfile' : 'Seleccionar archivos', 'cmdhelp' : 'Acerca de este software', 'cmdhome' : 'Inicio', 'cmdinfo' : 'Obtener información', 'cmdmkdir' : 'Nueva carpeta', 'cmdmkdirin' : 'En una nueva carpeta', // from v2.1.7 added 19.2.2016 'cmdmkfile' : 'Nueva archivo', 'cmdopen' : 'Abrir', 'cmdpaste' : 'Pegar', 'cmdquicklook' : 'Previsualizar', 'cmdreload' : 'Recargar', 'cmdrename' : 'Cambiar nombre', 'cmdrm' : 'Eliminar', 'cmdtrash' : 'Enviar a la papelera', //from v2.1.24 added 29.4.2017 'cmdrestore' : 'Restaurar', //from v2.1.24 added 3.5.2017 'cmdsearch' : 'Buscar archivos', 'cmdup' : 'Ir a la carpeta raíz', 'cmdupload' : 'Subir archivos', 'cmdview' : 'Ver', 'cmdresize' : 'Redimensionar y rotar', 'cmdsort' : 'Ordenar', 'cmdnetmount' : 'Montar volumen en red', // added 18.04.2012 'cmdnetunmount': 'Desmontar', // from v2.1 added 30.04.2012 'cmdplaces' : 'A Lugares', // added 28.12.2014 'cmdchmod' : 'Cambiar modo', // from v2.1 added 20.6.2015 'cmdopendir' : 'Abrir una carpeta', // from v2.1 added 13.1.2016 'cmdcolwidth' : 'Restablecer ancho de columna', // from v2.1.13 added 12.06.2016 'cmdfullscreen': 'Pantalla completa', // from v2.1.15 added 03.08.2016 'cmdmove' : 'Mover', // from v2.1.15 added 21.08.2016 'cmdempty' : 'Vaciar la carpeta', // from v2.1.25 added 22.06.2017 'cmdundo' : 'Deshacer', // from v2.1.27 added 31.07.2017 'cmdredo' : 'Rehacer', // from v2.1.27 added 31.07.2017 'cmdpreference': 'Preferencias', // from v2.1.27 added 03.08.2017 'cmdselectall' : 'Seleccionar todo', // from v2.1.28 added 15.08.2017 'cmdselectnone': 'Seleccionar ninguno', // from v2.1.28 added 15.08.2017 'cmdselectinvert': 'Invertir selección', // from v2.1.28 added 15.08.2017 'cmdopennew' : 'Abrir en nueva ventana', // from v2.1.38 added 3.4.2018 /*********************************** buttons ***********************************/ 'btnClose' : 'Cerrar', 'btnSave' : 'Guardar', 'btnRm' : 'Eliminar', 'btnApply' : 'Aplicar', 'btnCancel' : 'Cancelar', 'btnNo' : 'No', 'btnYes' : 'Sí', 'btnDiscard': 'Discard changes', 'btnMount' : 'Montar', // added 18.04.2012 'btnApprove': 'Ir a $1 y aprobar', // from v2.1 added 26.04.2012 'btnUnmount': 'Desmontar', // from v2.1 added 30.04.2012 'btnConv' : 'Convertir', // from v2.1 added 08.04.2014 'btnCwd' : 'Aquí', // from v2.1 added 22.5.2015 'btnVolume' : 'Volumen', // from v2.1 added 22.5.2015 'btnAll' : 'Todos', // from v2.1 added 22.5.2015 'btnMime' : 'Tipo MIME', // from v2.1 added 22.5.2015 'btnFileName':'Nombre de archivo', // from v2.1 added 22.5.2015 'btnSaveClose': 'Guardar y cerrar', // from v2.1 added 12.6.2015 'btnBackup' : 'Copia de seguridad', // fromv2.1 added 28.11.2015 'btnRename' : 'Renombrar', // from v2.1.24 added 6.4.2017 'btnRenameAll' : 'Renombrar(Todo)', // from v2.1.24 added 6.4.2017 'btnPrevious' : 'Ant ($1/$2)', // from v2.1.24 added 11.5.2017 'btnNext' : 'Sig ($1/$2)', // from v2.1.24 added 11.5.2017 'btnSaveAs' : 'Guardar como', // from v2.1.25 added 24.5.2017 /******************************** notifications ********************************/ 'ntfopen' : 'Abrir carpeta', 'ntffile' : 'Abrir archivo', 'ntfreload' : 'Actualizar contenido de la carpeta', 'ntfmkdir' : 'Creando directorio', 'ntfmkfile' : 'Creando archivos', 'ntfrm' : 'Eliminando archivos', 'ntfcopy' : 'Copiar archivos', 'ntfmove' : 'Mover archivos', 'ntfprepare' : 'Preparar copia de archivos', 'ntfrename' : 'Renombrar archivos', 'ntfupload' : 'Subiendo archivos', 'ntfdownload' : 'Descargando archivos', 'ntfsave' : 'Guardar archivos', 'ntfarchive' : 'Creando archivo', 'ntfextract' : 'Extrayendo elementos del archivo', 'ntfsearch' : 'Buscando archivos', 'ntfresize' : 'Redimensionando imágenes', 'ntfsmth' : 'Haciendo algo', 'ntfloadimg' : 'Cargando imagen', 'ntfnetmount' : 'Montando volumen en red', // added 18.04.2012 'ntfnetunmount': 'Desmontando volumen en red', // from v2.1 added 30.04.2012 'ntfdim' : 'Adquiriendo tamaño de imagen', // added 20.05.2013 'ntfreaddir' : 'Leyendo información de la carpeta', // from v2.1 added 01.07.2013 'ntfurl' : 'Obteniendo URL del enlace', // from v2.1 added 11.03.2014 'ntfchmod' : 'Cambiando el modo de archivo', // from v2.1 added 20.6.2015 'ntfpreupload': 'Verificando nombre del archivo subido', // from v2.1 added 31.11.2015 'ntfzipdl' : 'Creando un archivo para descargar', // from v2.1.7 added 23.1.2016 'ntfparents' : 'Obteniendo información de la ruta', // from v2.1.17 added 2.11.2016 'ntfchunkmerge': 'Procesando el archivo cargado', // from v2.1.17 added 2.11.2016 'ntftrash' : 'Enviando a la papelera', // from v2.1.24 added 2.5.2017 'ntfrestore' : 'Restaurando desde la papelera', // from v2.1.24 added 3.5.2017 'ntfchkdir' : 'Comprobando carpeta de destino', // from v2.1.24 added 3.5.2017 'ntfundo' : 'Deshaciendo operación previa', // from v2.1.27 added 31.07.2017 'ntfredo' : 'Rehaciendo previo deshacer', // from v2.1.27 added 31.07.2017 /*********************************** volumes *********************************/ 'volume_Trash' : 'Papelera', //from v2.1.24 added 29.4.2017 /************************************ dates **********************************/ 'dateUnknown' : 'desconocida', 'Today' : 'Hoy', 'Yesterday' : 'Ayer', 'msJan' : 'Ene', 'msFeb' : 'Feb', 'msMar' : 'Mar', 'msApr' : 'Abr', 'msMay' : 'May', 'msJun' : 'Jun', 'msJul' : 'Jul', 'msAug' : 'Ago', 'msSep' : 'Sep', 'msOct' : 'Oct', 'msNov' : 'Nov', 'msDec' : 'Dic', 'January' : 'Enero', 'February' : 'Febrero', 'March' : 'Marzo', 'April' : 'Abril', 'May' : 'Mayo', 'June' : 'Junio', 'July' : 'Julio', 'August' : 'Agosto', 'September' : 'Septiembre', 'October' : 'Octubre', 'November' : 'Noviembre', 'December' : 'Diciembre', 'Sunday' : 'Domingo', 'Monday' : 'Lunes', 'Tuesday' : 'Martes', 'Wednesday' : 'Miércoles', 'Thursday' : 'Jueves', 'Friday' : 'Viernes', 'Saturday' : 'Sábado', 'Sun' : 'Dom', 'Mon' : 'Lun', 'Tue' : 'Mar', 'Wed' : 'Mie', 'Thu' : 'Jue', 'Fri' : 'Vie', 'Sat' : 'Sab', /******************************** sort variants ********************************/ 'sortname' : 'por nombre', 'sortkind' : 'por tipo', 'sortsize' : 'por tamaño', 'sortdate' : 'por fecha', 'sortFoldersFirst' : 'Las carpetas primero', 'sortperm' : 'por permiso', // from v2.1.13 added 13.06.2016 'sortmode' : 'por modo', // from v2.1.13 added 13.06.2016 'sortowner' : 'por propietario', // from v2.1.13 added 13.06.2016 'sortgroup' : 'por grupo', // from v2.1.13 added 13.06.2016 'sortAlsoTreeview' : 'También árbol de directorios', // from v2.1.15 added 01.08.2016 /********************************** new items **********************************/ 'untitled file.txt' : 'NuevoArchivo.txt', // added 10.11.2015 'untitled folder' : 'NuevaCarpeta', // added 10.11.2015 'Archive' : 'NuevoArchivo', // from v2.1 added 10.11.2015 /********************************** messages **********************************/ 'confirmReq' : 'Se necesita confirmación', 'confirmRm' : '¿Está seguro de querer eliminar archivos?
          ¡Esto no se puede deshacer!', 'confirmRepl' : '¿Reemplazar el antiguo archivo con el nuevo?', 'confirmRest' : '¿Reemplazar elemento existente con el elemento en la papelera?', // fromv2.1.24 added 5.5.2017 'confirmConvUTF8' : 'No está en UTF-8
          Convertir a UTF-8?
          Los contenidos se guardarán en UTF-8 tras la conversión.', // from v2.1 added 08.04.2014 'confirmNonUTF8' : 'Codificación de caracteres de este archivo no pudo ser detectada. Es necesario convertir temporalmente a UTF-8 para editarlo.
          Por favor, seleccione la codificación de caracteres de este archivo.', // from v2.1.19 added 28.11.2016 'confirmNotSave' : 'Ha sido modificado.
          Perderás los cambios si no los guardas.', // from v2.1 added 15.7.2015 'confirmTrash' : '¿Estás seguro que quieres mover los elementos a la papelera?', //from v2.1.24 added 29.4.2017 'apllyAll' : 'Aplicar a todo', 'name' : 'Nombre', 'size' : 'Tamaño', 'perms' : 'Permisos', 'modify' : 'Modificado', 'kind' : 'Tipo', 'read' : 'lectura', 'write' : 'escritura', 'noaccess' : 'sin acceso', 'and' : 'y', 'unknown' : 'desconocido', 'selectall' : 'Seleccionar todos los archivos', 'selectfiles' : 'Seleccionar archivo(s)', 'selectffile' : 'Seleccionar primer archivo', 'selectlfile' : 'Seleccionar último archivo', 'viewlist' : 'ver como lista', 'viewicons' : 'Ver como iconos', 'places' : 'Lugares', 'calc' : 'Calcular', 'path' : 'Ruta', 'aliasfor' : 'Alias para', 'locked' : 'Bloqueado', 'dim' : 'Dimensiones', 'files' : 'Archivos', 'folders' : 'Carpetas', 'items' : 'Elementos', 'yes' : 'sí', 'no' : 'no', 'link' : 'Enlace', 'searcresult' : 'Resultados de la búsqueda', 'selected' : 'elementos seleccionados', 'about' : 'Acerca', 'shortcuts' : 'Accesos directos', 'help' : 'Ayuda', 'webfm' : 'Administrador de archivos web', 'ver' : 'Versión', 'protocolver' : 'versión del protocolo', 'homepage' : 'Inicio', 'docs' : 'Documentación', 'github' : 'Bifúrcanos en Github', 'twitter' : 'Síguenos en Twitter', 'facebook' : 'Únete a nosotros en Facebook', 'team' : 'Equipo', 'chiefdev' : 'desarrollador jefe', 'developer' : 'desarrollador', 'contributor' : 'contribuyente', 'maintainer' : 'mantenedor', 'translator' : 'traductor', 'icons' : 'Iconos', 'dontforget' : 'y no olvide traer su toalla', 'shortcutsof' : 'Accesos directos desactivados', 'dropFiles' : 'Arrastre archivos aquí', 'or' : 'o', 'selectForUpload' : 'Seleccione archivos para subir', 'moveFiles' : 'Mover archivos', 'copyFiles' : 'Copiar archivos', 'restoreFiles' : 'Restaurar elementos', // from v2.1.24 added 5.5.2017 'rmFromPlaces' : 'Eliminar en sus ubicaciones', 'aspectRatio' : 'Relación de aspecto', 'scale' : 'Escala', 'width' : 'Ancho', 'height' : 'Alto', 'resize' : 'Redimensionar', 'crop' : 'Recortar', 'rotate' : 'Rotar', 'rotate-cw' : 'Rotar 90 grados en sentido horario', 'rotate-ccw' : 'Rotar 90 grados en sentido anti-horario', 'degree' : '°', 'netMountDialogTitle' : 'Montar volumen en red', // added 18.04.2012 'protocol' : 'Protocolo', // added 18.04.2012 'host' : 'Dominio', // added 18.04.2012 'port' : 'Puerto', // added 18.04.2012 'user' : 'Usuario', // added 18.04.2012 'pass' : 'Contraseña', // added 18.04.2012 'confirmUnmount' : '¿Desmontar $1?', // from v2.1 added 30.04.2012 'dropFilesBrowser': 'Arrastra o pega archivos del navegador', // from v2.1 added 30.05.2012 'dropPasteFiles' : 'Arrastra o pega enlaces URL aquí', // from v2.1 added 07.04.2014 'encoding' : 'Codificando', // from v2.1 added 19.12.2014 'locale' : 'Local', // from v2.1 added 19.12.2014 'searchTarget' : 'Destino: $1', // from v2.1 added 22.5.2015 'searchMime' : 'Buscar entrada por tipo MIME', // from v2.1 added 22.5.2015 'owner' : 'Propietario', // from v2.1 added 20.6.2015 'group' : 'Grupo', // from v2.1 added 20.6.2015 'other' : 'Otro', // from v2.1 added 20.6.2015 'execute' : 'Ejecutar', // from v2.1 added 20.6.2015 'perm' : 'Permiso', // from v2.1 added 20.6.2015 'mode' : 'Modo', // from v2.1 added 20.6.2015 'emptyFolder' : 'La carpeta está vacía', // from v2.1.6 added 30.12.2015 'emptyFolderDrop' : 'La carpeta está vacía\\A Arrastrar para añadir elementos', // from v2.1.6 added 30.12.2015 'emptyFolderLTap' : 'La carpeta está vacía\\A Presiona durante un rato para añadir elementos', // from v2.1.6 added 30.12.2015 'quality' : 'Calidad', // from v2.1.6 added 5.1.2016 'autoSync' : 'Sincronización automática', // from v2.1.6 added 10.1.2016 'moveUp' : 'Mover arriba', // from v2.1.6 added 18.1.2016 'getLink' : 'Obtener enlace', // from v2.1.7 added 9.2.2016 'selectedItems' : 'Elementos seleccionados ($1)', // from v2.1.7 added 2.19.2016 'folderId' : 'ID carpeta', // from v2.1.10 added 3.25.2016 'offlineAccess' : 'Permitir acceso sin conexión', // from v2.1.10 added 3.25.2016 'reAuth' : 'Para volver a autenticarse', // from v2.1.10 added 3.25.2016 'nowLoading' : 'Cargando ahora...', // from v2.1.12 added 4.26.2016 'openMulti' : 'Abrir múltiples archivos', // from v2.1.12 added 5.14.2016 'openMultiConfirm': 'Estás tratando de abrir los $1 archivos. ¿Estás seguro que quieres abrir en el navegador?', // from v2.1.12 added 5.14.2016 'emptySearch' : 'No se encontraron resultados en el objetivo de búsqueda.', // from v2.1.12 added 5.16.2016 'editingFile' : 'Está editando un archivo.', // from v2.1.13 added 6.3.2016 'hasSelected' : 'Has seleccionado $1 elementos.', // from v2.1.13 added 6.3.2016 'hasClipboard' : 'Posees $1 elementos en el portapapeles.', // from v2.1.13 added 6.3.2016 'incSearchOnly' : 'La búsqueda incremental solo se realiza desde la vista actual.', // from v2.1.13 added 6.30.2016 'reinstate' : 'Reinstanciar', // from v2.1.15 added 3.8.2016 'complete' : '$1 completo', // from v2.1.15 added 21.8.2016 'contextmenu' : 'Menú contextual', // from v2.1.15 added 9.9.2016 'pageTurning' : 'Cambio de página', // from v2.1.15 added 10.9.2016 'volumeRoots' : 'Raíces del volumen', // from v2.1.16 added 16.9.2016 'reset' : 'Reiniciar', // from v2.1.16 added 1.10.2016 'bgcolor' : 'Color de fondo', // from v2.1.16 added 1.10.2016 'colorPicker' : 'Selector de color', // from v2.1.16 added 1.10.2016 '8pxgrid' : '8px Cuadricula', // from v2.1.16 added 4.10.2016 'enabled' : 'Habilitado', // from v2.1.16 added 4.10.2016 'disabled' : 'Deshabilitado', // from v2.1.16 added 4.10.2016 'emptyIncSearch' : 'Los resultados de la búsqueda están vacíos en la vista actual. \\ APulse [Intro] para expandir el objetivo de búsqueda.', // from v2.1.16 added 5.10.2016 'emptyLetSearch' : 'La primera letra de los resultados de búsqueda está vacía en la vista actual.', // from v2.1.23 added 24.3.2017 'textLabel' : 'Etiqueta de texto', // from v2.1.17 added 13.10.2016 'minsLeft' : 'Falta $1 minuto(s)', // from v2.1.17 added 13.11.2016 'openAsEncoding' : 'Abrir nuevamente con la codificación seleccionada', // from v2.1.19 added 2.12.2016 'saveAsEncoding' : 'Guardar con la codificación seleccionada', // from v2.1.19 added 2.12.2016 'selectFolder' : 'Seleccionar carpeta', // from v2.1.20 added 13.12.2016 'firstLetterSearch': 'Primera letra de búsqueda', // from v2.1.23 added 24.3.2017 'presets' : 'Preestablecidos', // from v2.1.25 added 26.5.2017 'tooManyToTrash' : 'Son demasiados elementos, por lo que no puede enviarse a la papelera.', // from v2.1.25 added 9.6.2017 'TextArea' : '�rea de texto', // from v2.1.25 added 14.6.2017 'folderToEmpty' : 'Vaciar la carpeta "$1".', // from v2.1.25 added 22.6.2017 'filderIsEmpty' : 'No hay elementos en la carpeta "$1".', // from v2.1.25 added 22.6.2017 'preference' : 'Preferencia', // from v2.1.26 added 28.6.2017 'language' : 'Lenguaje', // from v2.1.26 added 28.6.2017 'clearBrowserData': 'Inicializa la configuración guardada en este navegador', // from v2.1.26 added 28.6.2017 'toolbarPref' : 'Configuración de la barra de herramientas', // from v2.1.27 added 2.8.2017 'charsLeft' : '...falta $1 caracteres.', // from v2.1.29 added 30.8.2017 'sum' : 'Suma', // from v2.1.29 added 28.9.2017 'roughFileSize' : 'Tamaño de archivo aproximado', // from v2.1.30 added 2.11.2017 'autoFocusDialog' : 'Centrado en el elemento de diálogo con \'mouseover\'', // from v2.1.30 added 2.11.2017 'select' : 'Seleccionar', // from v2.1.30 added 23.11.2017 'selectAction' : 'Acción cuando selecciona un archivo', // from v2.1.30 added 23.11.2017 'useStoredEditor' : 'Abrir con el editor utilizado la última vez', // from v2.1.30 added 23.11.2017 'selectinvert' : 'Invertir selección', // from v2.1.30 added 25.11.2017 'renameMultiple' : '¿Estás seguro que quieres renombrar $1 elementos seleccionados como $2?
          ¡Esto no puede ser deshecho!', // from v2.1.31 added 4.12.2017 'batchRename' : 'Cambiar el nombre del lote', // from v2.1.31 added 8.12.2017 'plusNumber' : '+ Número', // from v2.1.31 added 8.12.2017 'asPrefix' : 'Añadir prefijo', // from v2.1.31 added 8.12.2017 'asSuffix' : 'Añadir sufijo', // from v2.1.31 added 8.12.2017 'changeExtention' : 'Cambiar extensión', // from v2.1.31 added 8.12.2017 'columnPref' : 'Configuración de columnas (Vista de lista)', // from v2.1.32 added 6.2.2018 'reflectOnImmediate' : 'Todos los cambios se reflejarán inmediatamente en el archivo.', // from v2.1.33 added 2.3.2018 'reflectOnUnmount' : 'Cualquier cambio no se reflejará hasta que no se desmonte este volumen.', // from v2.1.33 added 2.3.2018 'unmountChildren' : 'Los siguientes volúmenes montados en este volumen también se desmontaron. ¿Estás seguro de desmontarlo?', // from v2.1.33 added 5.3.2018 'selectionInfo' : 'Información de la selección', // from v2.1.33 added 7.3.2018 'hashChecker' : 'Algoritmos para mostrar el hash de archivos', // from v2.1.33 added 10.3.2018 'infoItems' : 'Elementos de información (Panel de información de selección)', // from v2.1.38 added 28.3.2018 'pressAgainToExit': 'Presiona de nuevo para salir.', // from v2.1.38 added 1.4.2018 'toolbar' : 'Barra de herramienta', // from v2.1.38 added 4.4.2018 'workspace' : 'Espacio de trabajo', // from v2.1.38 added 4.4.2018 'dialog' : 'Diálogo', // from v2.1.38 added 4.4.2018 'all' : 'Todo', // from v2.1.38 added 4.4.2018 /********************************** mimetypes **********************************/ 'kindUnknown' : 'Desconocido', 'kindRoot' : 'Raíces del volumen', // from v2.1.16 added 16.10.2016 'kindFolder' : 'Carpeta', 'kindSelects' : 'Selecciones', // from v2.1.29 added 29.8.2017 'kindAlias' : 'Alias', 'kindAliasBroken' : 'Alias roto', // applications 'kindApp' : 'Aplicación', 'kindPostscript' : 'Documento Postscript', 'kindMsOffice' : 'Documento Microsoft Office', 'kindMsWord' : 'Documento Microsoft Word', 'kindMsExcel' : 'Documento Microsoft Excel', 'kindMsPP' : 'Presentación Microsoft Powerpoint', 'kindOO' : 'Documento Open Office', 'kindAppFlash' : 'Aplicación Flash', 'kindPDF' : 'Documento PDF', 'kindTorrent' : 'Archivo Bittorrent', 'kind7z' : 'Archivo 7z', 'kindTAR' : 'Archivo TAR', 'kindGZIP' : 'Archivo GZIP', 'kindBZIP' : 'Archivo BZIP', 'kindXZ' : 'Archivo XZ', 'kindZIP' : 'Archivo ZIP', 'kindRAR' : 'Archivo RAR', 'kindJAR' : 'Archivo Java JAR', 'kindTTF' : 'Fuente True Type', 'kindOTF' : 'Fuente Open Type', 'kindRPM' : 'Paquete RPM', // fonts 'kindFont' : 'Fuente', 'kindSFNT' : 'Fuente SFNT', 'kindEOT' : 'Fuente Embedded Open Type', 'kindWOFF' : 'Fuente Web Open Font Format', 'kindWOFF2' : 'Fuente Web Open Font Format 2', // texts 'kindText' : 'Documento de texto', 'kindTextPlain' : 'Texto plano', 'kindPHP' : 'Código PHP', 'kindCSS' : 'Hoja de estilos CSS', 'kindHTML' : 'Documento HTML', 'kindJS' : 'Código Javascript', 'kindRTF' : 'Documento RTF', 'kindC' : 'Código C', 'kindCHeader' : 'Código C cabeceras', 'kindCPP' : 'Código C++', 'kindCPPHeader' : 'Código C++ cabeceras', 'kindShell' : 'Script de terminal de Unix', 'kindPython' : 'Código Python', 'kindJava' : 'Código Java', 'kindRuby' : 'Código Ruby', 'kindPerl' : 'Código Perl', 'kindSQL' : 'Código QL', 'kindXML' : 'Documento XML', 'kindAWK' : 'Código AWK', 'kindCSV' : 'Documento CSV (valores separados por comas)', 'kindDOCBOOK' : 'Documento Docbook XML', 'kindMarkdown' : 'Texto Markdown', // added 20.7.2015 // images 'kindImage' : 'Imagen', 'kindBMP' : 'Imagen BMP', 'kindJPEG' : 'Imagen JPEG', 'kindGIF' : 'Imagen GIF', 'kindPNG' : 'Imagen PNG', 'kindTIFF' : 'Imagen TIFF', 'kindTGA' : 'Imagen TGA', 'kindPSD' : 'Imagen Adobe Photoshop', 'kindXBITMAP' : 'Imagen X bitmap', 'kindPXM' : 'Imagen Pixelmator', // media 'kindAudio' : 'Archivo de audio', 'kindAudioMPEG' : 'Audio MPEG', 'kindAudioMPEG4' : 'Audio MPEG-4', 'kindAudioMIDI' : 'Audio MIDI', 'kindAudioOGG' : 'Audio Ogg Vorbis', 'kindAudioWAV' : 'Audio WAV', 'AudioPlaylist' : 'Lista de reproducción MP3', 'kindVideo' : 'Archivo de vídeo', 'kindVideoDV' : 'Película DV', 'kindVideoMPEG' : 'Película MPEG', 'kindVideoMPEG4' : 'Película MPEG-4', 'kindVideoAVI' : 'Película AVI', 'kindVideoMOV' : 'Película Quick Time', 'kindVideoWM' : 'Película Windows Media', 'kindVideoFlash' : 'Película Flash', 'kindVideoMKV' : 'Película Matroska MKV', 'kindVideoOGG' : 'Película Ogg' } }; })); PK!9÷v¨¨@file-manager-advanced/application/library/js/i18n/elfinder.ru.jsnu„[µü¤/** * РуÑ�Ñ�кий Ñ�зык translation * @author Dmitry "dio" Levashov * @author Andrew Berezovsky * @author Alex Yashkin * @author Aleev Ruslan * @version 2026-02-01 */ (function(root, factory) { if (typeof define === 'function' && define.amd) { define(['elfinder'], factory); } else if (typeof exports !== 'undefined') { module.exports = factory(require('elfinder')); } else { factory(root.elFinder); } }(this, function(elFinder) { elFinder.prototype.i18.ru = { translator : 'Dmitry "dio" Levashov <dio@std42.ru>, Andrew Berezovsky <andrew.berezovsky@gmail.com>, Alex Yashkin <alex@yashkin.by>, Aleev Ruslan <info@cat-art.ru>', language : 'РуÑ�Ñ�кий Ñ�зык', direction : 'ltr', dateFormat : 'd M Y H:i', // will show like: 01 Фев 2026 16:56 fancyDateFormat : '$1 H:i', // will show like: СегоднÑ� 16:56 nonameDateFormat : 'ymd-His', // noname upload will show like: 260201-165637 messages : { /********************************** errors **********************************/ 'error' : 'Ошибка', 'errUnknown' : 'Ð�еизвеÑ�тнаÑ� ошибка.', 'errUnknownCmd' : 'Ð�еизвеÑ�тнаÑ� команда.', 'errJqui' : 'ОтÑ�утÑ�твуют необходимые компоненты jQuery UI - selectable, draggable и droppable.', 'errNode' : 'ОтÑ�утÑ�твует DOM Ñ�лемент длÑ� инициализации elFinder.', 'errURL' : 'Ð�евернаÑ� конфигурациÑ� elFinder! Ð�е указан URL.', 'errAccess' : 'ДоÑ�туп запрещен.', 'errConnect' : 'Ð�е удалоÑ�ÑŒ Ñ�оединитьÑ�Ñ� Ñ� Ñ�ервером.', 'errAbort' : 'Соединение прервано.', 'errTimeout' : 'Таймаут Ñ�оединениÑ�.', 'errNotFound' : 'Сервер не найден.', 'errResponse' : 'Ð�екорректный ответ Ñ�ервера.', 'errConf' : 'Ð�екорректнаÑ� наÑ�тройка Ñ�ервера.', 'errJSON' : 'Модуль PHP JSON не уÑ�тановлен.', 'errNoVolumes' : 'ОтÑ�утÑ�твуют корневые директории доÑ�туные длÑ� чтениÑ�.', 'errCmdParams' : 'Ð�екорректные параметры команды "$1".', 'errDataNotJSON' : 'Данные не в формате JSON.', 'errDataEmpty' : 'Данные отÑ�утÑ�твуют.', 'errCmdReq' : 'ДлÑ� запроÑ�а к Ñ�ерверу необходимо указать имÑ� команды.', 'errOpen' : 'Ð�е удалоÑ�ÑŒ открыть "$1".', 'errNotFolder' : 'Объект не Ñ�влÑ�етÑ�Ñ� папкой.', 'errNotFile' : 'Объект не Ñ�влÑ�етÑ�Ñ� файлом.', 'errRead' : 'Ошибка чтениÑ� "$1".', 'errWrite' : 'Ошибка запиÑ�и в "$1".', 'errPerm' : 'ДоÑ�туп запрещен.', 'errLocked' : '"$1" защищен и не может быть переименован, перемещен или удален.', 'errExists' : 'Ð’ папке уже Ñ�ущеÑ�твует файл Ñ� именем "$1".', 'errInvName' : 'Ð�едопуÑ�тимое имÑ� файла.', 'errInvDirname' : 'Ð�едопуÑ�тимое имÑ� папки.', // from v2.1.24 added 12.4.2017 'errFolderNotFound' : 'Папка не найдена.', 'errFileNotFound' : 'Файл не найден.', 'errTrgFolderNotFound' : 'ЦелеваÑ� папка "$1" не найдена.', 'errPopup' : 'Браузер заблокировал открытие нового окна. Чтобы открыть файл, измените наÑ�тройки браузера.', 'errMkdir' : 'Ошибка Ñ�озданиÑ� папки "$1".', 'errMkfile' : 'Ошибка Ñ�озданиÑ� файла "$1".', 'errRename' : 'Ошибка переименованиÑ� "$1".', 'errCopyFrom' : 'Копирование файлов из директории "$1" запрещено.', 'errCopyTo' : 'Копирование файлов в директорию "$1" запрещено.', 'errMkOutLink' : 'Ð�евозможно Ñ�оздать Ñ�Ñ�ылку вне корнÑ� раздела.', // from v2.1 added 03.10.2015 'errUpload' : 'Ошибка загрузки.', // old name - errUploadCommon 'errUploadFile' : 'Ð�евозможно загрузить "$1".', // old name - errUpload 'errUploadNoFiles' : 'Ð�ет файлов длÑ� загрузки.', 'errUploadTotalSize' : 'Превышен допуÑ�тимый размер загружаемых данных.', // old name - errMaxSize 'errUploadFileSize' : 'Размер файла превышает допуÑ�тимый.', // old name - errFileMaxSize 'errUploadMime' : 'Ð�едопуÑ�тимый тип файла.', 'errUploadTransfer' : 'Ошибка передачи файла "$1".', 'errUploadTemp' : 'Ð�евозможно Ñ�оздать временный файл длÑ� загрузки.', // from v2.1 added 26.09.2015 'errNotReplace' : 'Объект "$1" по Ñ�тому адреÑ�у уже Ñ�ущеÑ�твует и не может быть заменен объектом другого типа.', // new 'errReplace' : 'Ð�евозможно заменить "$1".', 'errSave' : 'Ð�евозможно Ñ�охранить "$1".', 'errCopy' : 'Ð�евозможно Ñ�копировать "$1".', 'errMove' : 'Ð�евозможно перемеÑ�тить "$1".', 'errCopyInItself' : 'Ð�евозможно Ñ�копировать "$1" в Ñ�амого Ñ�ебÑ�.', 'errRm' : 'Ð�евозможно удалить "$1".', 'errTrash' : 'Ð�евозможно перемеÑ�тить в корзину.', // from v2.1.24 added 30.4.2017 'errRmSrc' : 'Ð�евозможно удалить файлы иÑ�точника.', 'errExtract' : 'Ð�евозможно извлечь фалы из "$1".', 'errArchive' : 'Ð�евозможно Ñ�оздать архив.', 'errArcType' : 'Ð�еподдерживаемый тип архива.', 'errNoArchive' : 'Файл не Ñ�влÑ�етÑ�Ñ� архивом или неподдерживаемый тип архива.', 'errCmdNoSupport' : 'Сервер не поддерживает Ñ�ту команду.', 'errReplByChild' : 'Ð�евозможно заменить папку "$1" Ñ�одержащимÑ�Ñ� в ней объектом.', 'errArcSymlinks' : 'По Ñ�оображениÑ�м безопаÑ�ноÑ�ти запрещена раÑ�паковка архивов, Ñ�одержащих Ñ�Ñ�ылки (symlinks) или файлы Ñ� недопуÑ�тимыми именами.', // edited 24.06.2012 'errArcMaxSize' : 'Размер файлов в архиве превышает макÑ�имально разрешенный.', 'errResize' : 'Ð�е удалоÑ�ÑŒ изменить размер "$1".', 'errResizeDegree' : 'Ð�екорректный градуÑ� поворота.', // added 7.3.2013 'errResizeRotate' : 'Ð�евозможно повернуть изображение.', // added 7.3.2013 'errResizeSize' : 'Ð�екорректный размер изображениÑ�.', // added 7.3.2013 'errResizeNoChange' : 'Размер изображениÑ� не изменилÑ�Ñ�.', // added 7.3.2013 'errUsupportType' : 'Ð�еподдерживаемый тип файла.', 'errNotUTF8Content' : 'Файл "$1" Ñ�одержит текÑ�Ñ‚ в кодировке отличной от UTF-8 и не может быть отредактирован.', // added 9.11.2011 'errNetMount' : 'Ð�евозможно подключить "$1".', // added 17.04.2012 'errNetMountNoDriver' : 'Ð�еподдерживаемый протокол.', // added 17.04.2012 'errNetMountFailed' : 'Ошибка монтированиÑ�.', // added 17.04.2012 'errNetMountHostReq' : 'ТребуетÑ�Ñ� указать хоÑ�Ñ‚.', // added 18.04.2012 'errSessionExpires' : 'СеÑ�Ñ�иÑ� была завершена так как превышено времÑ� отÑ�утÑ�твиÑ� активноÑ�ти.', 'errCreatingTempDir' : 'Ð�евозможно Ñ�оздать временную директорию: "$1"', 'errFtpDownloadFile' : 'Ð�евозможно Ñ�качать файл Ñ� FTP: "$1"', 'errFtpUploadFile' : 'Ð�евозможно загрузить файл на FTP: "$1"', 'errFtpMkdir' : 'Ð�евозможно Ñ�оздать директорию на FTP: "$1"', 'errArchiveExec' : 'Ошибка при выполнении архивации: "$1"', 'errExtractExec' : 'Ошибка при выполнении раÑ�паковки: "$1"', 'errNetUnMount' : 'Ð�евозможно отключить', // from v2.1 added 30.04.2012 'errConvUTF8' : 'Ð�е конвертируетÑ�Ñ� в UTF-8', // from v2.1 added 08.04.2014 'errFolderUpload' : 'ЕÑ�ли вы хотите загружать папки, попробуйте Google Chrome.', // from v2.1 added 26.6.2015 'errSearchTimeout' : 'Превышено времÑ� ожиданиÑ� при поиÑ�ке "$1". Результаты поиÑ�ка чаÑ�тичные.', // from v2.1 added 12.1.2016 'errReauthRequire' : 'ТребуетÑ�Ñ� повторнаÑ� авторизациÑ�.', // from v2.1.10 added 24.3.2016 'errMaxTargets' : 'МакÑ�имальное чиÑ�ло выбираемых файлов: $1.', // from v2.1.17 added 17.10.2016 'errRestore' : 'Ð�евозможно воÑ�Ñ�тановить из корзины. Ð�е удалоÑ�ÑŒ определить путь длÑ� воÑ�Ñ�тановлениÑ�.', // from v2.1.24 added 3.5.2017 'errEditorNotFound' : 'Ð�е найден редактор длÑ� Ñ�того типа файлов.', // from v2.1.25 added 23.5.2017 'errServerError' : 'Возникла ошибка на Ñ�тороне Ñ�ервера.', // from v2.1.25 added 16.6.2017 'errEmpty' : 'Ð�евозможно очиÑ�тить папку "$1".', // from v2.1.25 added 22.6.2017 'moreErrors' : 'Еще ошибок: $1', // from v2.1.44 added 9.12.2018 'errMaxMkdirs' : 'Ð’Ñ‹ можете Ñ�оздать за один раз папок: $1.', // from v2.1.58 added 20.6.2021 /******************************* commands names ********************************/ 'cmdarchive' : 'Создать архив', 'cmdback' : 'Ð�азад', 'cmdcopy' : 'Копировать', 'cmdcut' : 'Вырезать', 'cmddownload' : 'Скачать', 'cmdduplicate' : 'Сделать копию', 'cmdedit' : 'Редактировать файл', 'cmdextract' : 'РаÑ�паковать архив', 'cmdforward' : 'Вперед', 'cmdgetfile' : 'Выбрать файлы', 'cmdhelp' : 'О программе', 'cmdhome' : 'Домой', 'cmdinfo' : 'СвойÑ�тва', 'cmdmkdir' : 'Ð�оваÑ� папка', 'cmdmkdirin' : 'Ð’ новую папку', // from v2.1.7 added 19.2.2016 'cmdmkfile' : 'Ð�овый файл', 'cmdopen' : 'Открыть', 'cmdpaste' : 'Ð’Ñ�тавить', 'cmdquicklook' : 'БыÑ�трый проÑ�мотр', 'cmdreload' : 'Обновить', 'cmdrename' : 'Переименовать', 'cmdrm' : 'Удалить', 'cmdtrash' : 'ПеремеÑ�тить в корзину', //from v2.1.24 added 29.4.2017 'cmdrestore' : 'ВоÑ�Ñ�тановить', //from v2.1.24 added 3.5.2017 'cmdsearch' : 'ПоиÑ�к файлов', 'cmdup' : 'Ð�аверх', 'cmdupload' : 'Загрузить файлы', 'cmdview' : 'Вид', 'cmdresize' : 'Изменить размер и повернуть', 'cmdsort' : 'Сортировать', 'cmdnetmount' : 'Подключить Ñ�етевой раздел', // added 18.04.2012 'cmdnetunmount': 'Отключить', // from v2.1 added 30.04.2012 'cmdplaces' : 'Ð’ избранное', // added 28.12.2014 'cmdchmod' : 'Изменить права доÑ�тупа', // from v2.1 added 20.6.2015 'cmdopendir' : 'Открыть папку', // from v2.1 added 13.1.2016 'cmdcolwidth' : 'СброÑ�ить ширину колонок', // from v2.1.13 added 12.06.2016 'cmdfullscreen': 'Полный Ñ�кран', // from v2.1.15 added 03.08.2016 'cmdmove' : 'ПеремеÑ�тить', // from v2.1.15 added 21.08.2016 'cmdempty' : 'ОчиÑ�тить папку', // from v2.1.25 added 22.06.2017 'cmdundo' : 'Отменить', // from v2.1.27 added 31.07.2017 'cmdredo' : 'Вернуть', // from v2.1.27 added 31.07.2017 'cmdpreference': 'Ð�аÑ�тройки', // from v2.1.27 added 03.08.2017 'cmdselectall' : 'Выбрать вÑ�е', // from v2.1.28 added 15.08.2017 'cmdselectnone': 'Отменить выбор', // from v2.1.28 added 15.08.2017 'cmdselectinvert': 'Инвертировать выбор', // from v2.1.28 added 15.08.2017 'cmdopennew' : 'Открыть в новом окне', // from v2.1.38 added 3.4.2018 'cmdhide' : 'Скрыть (перÑ�онально)', // from v2.1.41 added 24.7.2018 /*********************************** buttons ***********************************/ 'btnClose' : 'Закрыть', 'btnSave' : 'Сохранить', 'btnRm' : 'Удалить', 'btnApply' : 'Применить', 'btnCancel' : 'Отмена', 'btnNo' : 'Ð�ет', 'btnYes' : 'Да', 'btnDiscard': 'Отменить изменениÑ�', 'btnMount' : 'Подключить', // added 18.04.2012 'btnApprove': 'Перейти в $1 и применить', // from v2.1 added 26.04.2012 'btnUnmount': 'Отключить', // from v2.1 added 30.04.2012 'btnConv' : 'Конвертировать', // from v2.1 added 08.04.2014 'btnCwd' : 'ЗдеÑ�ÑŒ', // from v2.1 added 22.5.2015 'btnVolume' : 'Раздел', // from v2.1 added 22.5.2015 'btnAll' : 'Ð’Ñ�е', // from v2.1 added 22.5.2015 'btnMime' : 'MIME тип', // from v2.1 added 22.5.2015 'btnFileName':'ИмÑ� файла', // from v2.1 added 22.5.2015 'btnSaveClose': 'Сохранить и закрыть', // from v2.1 added 12.6.2015 'btnBackup' : 'РезервнаÑ� копиÑ�', // fromv2.1 added 28.11.2015 'btnRename' : 'Переименовать', // from v2.1.24 added 6.4.2017 'btnRenameAll' : 'Переименовать (вÑ�е)', // from v2.1.24 added 6.4.2017 'btnPrevious' : 'Пред. ($1/$2)', // from v2.1.24 added 11.5.2017 'btnNext' : 'След. ($1/$2)', // from v2.1.24 added 11.5.2017 'btnSaveAs' : 'Сохранить как', // from v2.1.25 added 24.5.2017 /******************************** notifications ********************************/ 'ntfopen' : 'Открыть папку', 'ntffile' : 'Открыть файл', 'ntfreload' : 'Обновить текущую папку', 'ntfmkdir' : 'Создание папки', 'ntfmkfile' : 'Создание файлов', 'ntfrm' : 'Удалить файлы', 'ntfcopy' : 'Скопировать файлы', 'ntfmove' : 'ПеремеÑ�тить файлы', 'ntfprepare' : 'Подготовка к копированию файлов', 'ntfrename' : 'Переименовать файлы', 'ntfupload' : 'Загрузка файлов', 'ntfdownload' : 'Скачивание файлов', 'ntfsave' : 'Сохранить файлы', 'ntfarchive' : 'Создание архива', 'ntfextract' : 'РаÑ�паковка архива', 'ntfsearch' : 'ПоиÑ�к файлов', 'ntfresize' : 'Изменение размеров изображений', 'ntfsmth' : 'ЗанÑ�Ñ‚ важным делом', 'ntfloadimg' : 'Загрузка изображениÑ�', 'ntfnetmount' : 'Подключение Ñ�етевого диÑ�ка', // added 18.04.2012 'ntfnetunmount': 'Отключение Ñ�етевого диÑ�ка', // from v2.1 added 30.04.2012 'ntfdim' : 'Получение размеров изображениÑ�', // added 20.05.2013 'ntfreaddir' : 'Чтение информации о папке', // from v2.1 added 01.07.2013 'ntfurl' : 'Получение URL Ñ�Ñ�ылки', // from v2.1 added 11.03.2014 'ntfchmod' : 'Изменение прав доÑ�тупа к файлу', // from v2.1 added 20.6.2015 'ntfpreupload': 'Проверка измени загруженного файла', // from v2.1 added 31.11.2015 'ntfzipdl' : 'Создание файла длÑ� Ñ�качки', // from v2.1.7 added 23.1.2016 'ntfparents' : 'Получение информации о пути', // from v2.1.17 added 2.11.2016 'ntfchunkmerge': 'Обработка загруженного файла', // from v2.1.17 added 2.11.2016 'ntftrash' : 'Перемещение в корзину', // from v2.1.24 added 2.5.2017 'ntfrestore' : 'ВоÑ�Ñ�тановление из корзины', // from v2.1.24 added 3.5.2017 'ntfchkdir' : 'Проверка папки назначениÑ�', // from v2.1.24 added 3.5.2017 'ntfundo' : 'Отмена предыдущей операции', // from v2.1.27 added 31.07.2017 'ntfredo' : 'ВоÑ�Ñ�тановление предыдущей операции', // from v2.1.27 added 31.07.2017 'ntfchkcontent' : 'Проверка Ñ�одержимого', // from v2.1.41 added 3.8.2018 /*********************************** volumes *********************************/ 'volume_Trash' : 'Корзина', //from v2.1.24 added 29.4.2017 /************************************ dates **********************************/ 'dateUnknown' : 'неизвеÑ�тно', 'Today' : 'СегоднÑ�', 'Yesterday' : 'Вчера', 'msJan' : 'Янв', 'msFeb' : 'Фев', 'msMar' : 'Мар', 'msApr' : 'Ð�пр', 'msMay' : 'Май', 'msJun' : 'Июн', 'msJul' : 'Июл', 'msAug' : 'Ð�вг', 'msSep' : 'Сен', 'msOct' : 'Окт', 'msNov' : 'Ð�оÑ�', 'msDec' : 'Дек', 'January' : 'Январь', 'February' : 'Февраль', 'March' : 'Март', 'April' : 'Ð�прель', 'May' : 'Май', 'June' : 'Июнь', 'July' : 'Июль', 'August' : 'Ð�вгуÑ�Ñ‚', 'September' : 'СентÑ�брь', 'October' : 'ОктÑ�брь', 'November' : 'Ð�оÑ�брь', 'December' : 'Декабрь', 'Sunday' : 'ВоÑ�креÑ�енье', 'Monday' : 'Понедельник', 'Tuesday' : 'Вторник', 'Wednesday' : 'Среда', 'Thursday' : 'Четверг', 'Friday' : 'ПÑ�тница', 'Saturday' : 'Суббота', 'Sun' : 'Ð’Ñ�к', 'Mon' : 'Пнд', 'Tue' : 'Втр', 'Wed' : 'Срд', 'Thu' : 'Чтв', 'Fri' : 'Птн', 'Sat' : 'Сбт', /******************************** sort variants ********************************/ 'sortname' : 'по имени', 'sortkind' : 'по типу', 'sortsize' : 'по размеру', 'sortdate' : 'по дате', 'sortFoldersFirst' : 'Папки в начале', 'sortperm' : 'по разрешениÑ�м', // from v2.1.13 added 13.06.2016 'sortmode' : 'по режиму', // from v2.1.13 added 13.06.2016 'sortowner' : 'по владельцу', // from v2.1.13 added 13.06.2016 'sortgroup' : 'по группе', // from v2.1.13 added 13.06.2016 'sortAlsoTreeview' : 'Также и дерево каталогов', // from v2.1.15 added 01.08.2016 /********************************** new items **********************************/ 'untitled file.txt' : 'Ð�овыйФайл.txt', // added 10.11.2015 'untitled folder' : 'Ð�оваÑ�Папка', // added 10.11.2015 'Archive' : 'Ð�овыйÐ�рхив', // from v2.1 added 10.11.2015 'untitled file' : 'Ð�овыйФайл.$1', // from v2.1.41 added 6.8.2018 'extentionfile' : '$1 Файл', // from v2.1.41 added 6.8.2018 'extentiontype' : '$1: $2', // from v2.1.43 added 17.10.2018 /********************************** messages **********************************/ 'confirmReq' : 'Ð�еобходимо подтверждение', 'confirmRm' : 'Ð’Ñ‹ уверены, что хотите удалить файлы?
          Дей�твие необратимо!', 'confirmRepl' : 'Заменить �тарый файл новым?', 'confirmRest' : 'Заменить �уще�твующий файл файлом из корзины?', // fromv2.1.24 added 5.5.2017 'confirmConvUTF8' : '�е UTF-8
          Сконвертировать в UTF-8?
          Данные �танут UTF-8 при �охранении по�ле конвертации.', // from v2.1 added 08.04.2014 'confirmNonUTF8' : '�евозможно определить кодировку файла. �еобходима предварительна� конвертаци� файла в UTF-8 дл� дальнейшего редактировани�.
          Выберите кодировку файла.', // from v2.1.19 added 28.11.2016 'confirmNotSave' : 'Произошли изменени�.
          Е�ли не �охраните изменени�, то потер�ете их.', // from v2.1 added 15.7.2015 'confirmTrash' : 'Вы уверены, что хотите переме�тить файлы в корзину?', //from v2.1.24 added 29.4.2017 'confirmMove' : 'Вы уверены, что хотите переме�тить файлы в "$1"?', //from v2.1.50 added 27.7.2019 'apllyAll' : 'Применить дл� в�ех', 'name' : 'Им�', 'size' : 'Размер', 'perms' : 'До�туп', 'modify' : 'Изменен', 'kind' : 'Тип', 'read' : 'чтение', 'write' : 'запи�ь', 'noaccess' : 'нет до�тупа', 'and' : 'и', 'unknown' : 'неизве�тно', 'selectall' : 'Выбрать в�е файлы', 'selectfiles' : 'Выбрать файл(ы)', 'selectffile' : 'Выбрать первый файл', 'selectlfile' : 'Выбрать по�ледний файл', 'viewlist' : 'В виде �пи�ка', 'viewicons' : 'В виде иконок', 'viewSmall' : 'Маленькие иконки', // from v2.1.39 added 22.5.2018 'viewMedium' : 'Средние иконки', // from v2.1.39 added 22.5.2018 'viewLarge' : 'Большие иконки', // from v2.1.39 added 22.5.2018 'viewExtraLarge' : 'Очень большие иконки', // from v2.1.39 added 22.5.2018 'places' : 'Избранное', 'calc' : 'Вычи�лить', 'path' : 'Путь', 'aliasfor' : 'Указывает на', 'locked' : 'Защита', 'dim' : 'Размеры', 'files' : 'Файлы', 'folders' : 'Папки', 'items' : 'Объекты', 'yes' : 'да', 'no' : 'нет', 'link' : 'С�ылка', 'searcresult' : 'Результаты пои�ка', 'selected' : 'выбрано', 'about' : 'О программе', 'shortcuts' : 'Гор�чие клавиши', 'help' : 'Помощь', 'webfm' : 'Файловый менеджер дл� Web', 'ver' : 'Вер�и�', 'protocolver' : 'вер�и� протокола', 'homepage' : 'Сайт проекта', 'docs' : 'Документаци�', 'github' : 'Форкните на GitHub', 'twitter' : 'Следите в Twitter', 'facebook' : 'При�оедин�йте�ь на Facebook', 'team' : 'Команда', 'chiefdev' : 'ведущий разработчик', 'developer' : 'разработчик', 'contributor' : 'уча�тник', 'maintainer' : '�опровождение проекта', 'translator' : 'переводчик', 'icons' : 'Иконки', 'dontforget' : 'и не забудьте вз�ть �воё полотенце', 'shortcutsof' : 'Гор�чие клавиши отключены', 'dropFiles' : 'Перетащите файлы �юда', 'or' : 'или', 'selectForUpload' : 'Выбрать файлы дл� загрузки', 'moveFiles' : 'Переме�тить файлы', 'copyFiles' : 'Скопировать файлы', 'restoreFiles' : 'Во��тановить файлы', // from v2.1.24 added 5.5.2017 'rmFromPlaces' : 'Удалить из избранного', 'aspectRatio' : 'Соотношение �торон', 'scale' : 'Ма�штаб', 'width' : 'Ширина', 'height' : 'Вы�ота', 'resize' : 'Изменить размер', 'crop' : 'Обрезать', 'rotate' : 'Повернуть', 'rotate-cw' : 'Повернуть на 90 граду�ов по ча�овой �трелке', 'rotate-ccw' : 'Повернуть на 90 граду�ов против ча�овой �трелке', 'degree' : '°', 'netMountDialogTitle' : 'Подключить �етевой ди�к', // added 18.04.2012 'protocol' : 'Протокол', // added 18.04.2012 'host' : 'Хо�т', // added 18.04.2012 'port' : 'Порт', // added 18.04.2012 'user' : 'Пользователь', // added 18.04.2012 'pass' : 'Пароль', // added 18.04.2012 'confirmUnmount' : 'Вы хотите отключить $1?', // from v2.1 added 30.04.2012 'dropFilesBrowser': 'Перетащите или в�тавьте файлы из браузера', // from v2.1 added 30.05.2012 'dropPasteFiles' : 'Перетащите или в�тавьте файлы и ��ылки �юда', // from v2.1 added 07.04.2014 'encoding' : 'Кодировка', // from v2.1 added 19.12.2014 'locale' : 'Локаль', // from v2.1 added 19.12.2014 'searchTarget' : 'Цель: $1', // from v2.1 added 22.5.2015 'searchMime' : 'Пои�к по введенному MIME типу', // from v2.1 added 22.5.2015 'owner' : 'Владелец', // from v2.1 added 20.6.2015 'group' : 'Группа', // from v2.1 added 20.6.2015 'other' : 'О�тальные', // from v2.1 added 20.6.2015 'execute' : 'И�полнить', // from v2.1 added 20.6.2015 'perm' : 'Разрешение', // from v2.1 added 20.6.2015 'mode' : 'Режим', // from v2.1 added 20.6.2015 'emptyFolder' : 'Папка пу�та', // from v2.1.6 added 30.12.2015 'emptyFolderDrop' : 'Папка пу�та\\A Перетащите чтобы добавить', // from v2.1.6 added 30.12.2015 'emptyFolderLTap' : 'Папка пу�та\\A Долгое нажатие чтобы добавить', // from v2.1.6 added 30.12.2015 'quality' : 'Каче�тво', // from v2.1.6 added 5.1.2016 'autoSync' : '�вто �инхронизаци�', // from v2.1.6 added 10.1.2016 'moveUp' : 'Передвинуть вверх', // from v2.1.6 added 18.1.2016 'getLink' : 'Получить URL ��ылку', // from v2.1.7 added 9.2.2016 'selectedItems' : 'Выбранные объекты ($1)', // from v2.1.7 added 2.19.2016 'folderId' : 'ID папки', // from v2.1.10 added 3.25.2016 'offlineAccess' : 'Позволить автономный до�туп', // from v2.1.10 added 3.25.2016 'reAuth' : '�вторизовать�� повторно', // from v2.1.10 added 3.25.2016 'nowLoading' : 'Загружает��...', // from v2.1.12 added 4.26.2016 'openMulti' : 'Открыть не�колько файлов', // from v2.1.12 added 5.14.2016 'openMultiConfirm': 'Вы пытаете�ь открыть $1 файл(а/ов). Вы уверены, что хотите открыть их в браузере?', // from v2.1.12 added 5.14.2016 'emptySearch' : '�ичего не найдено', // from v2.1.12 added 5.16.2016 'editingFile' : 'Это редактируемый файл.', // from v2.1.13 added 6.3.2016 'hasSelected' : 'Вы выбрали $1 файл(-ов).', // from v2.1.13 added 6.3.2016 'hasClipboard' : 'У ва� $1 файл(-ов) в буфере обмена.', // from v2.1.13 added 6.3.2016 'incSearchOnly' : 'Инкрементный пои�к возможен только из текущего вида.', // from v2.1.13 added 6.30.2016 'reinstate' : 'Во��тановить', // from v2.1.15 added 3.8.2016 'complete' : '$1 завершен', // from v2.1.15 added 21.8.2016 'contextmenu' : 'Контек�тное меню', // from v2.1.15 added 9.9.2016 'pageTurning' : 'Переключение �траницы', // from v2.1.15 added 10.9.2016 'volumeRoots' : 'Корни томов', // from v2.1.16 added 16.9.2016 'reset' : 'Сбро�ить', // from v2.1.16 added 1.10.2016 'bgcolor' : 'Фоновый цвет', // from v2.1.16 added 1.10.2016 'colorPicker' : 'Выбор цвета', // from v2.1.16 added 1.10.2016 '8pxgrid' : '8px �етка', // from v2.1.16 added 4.10.2016 'enabled' : 'Включено', // from v2.1.16 added 4.10.2016 'disabled' : 'Отключено', // from v2.1.16 added 4.10.2016 'emptyIncSearch' : '�ичего не найдено в текущем виде.\\A�ажмите [Enter] дл� развертывани� цели пои�ка.', // from v2.1.16 added 5.10.2016 'emptyLetSearch' : 'Пои�к по первому �имволу не дал результатов в текущем виде.', // from v2.1.23 added 24.3.2017 'textLabel' : 'Тек�това� метка', // from v2.1.17 added 13.10.2016 'minsLeft' : '$1 минут о�тало�ь', // from v2.1.17 added 13.11.2016 'openAsEncoding' : 'Переоткрыть � выбранной кодировкой', // from v2.1.19 added 2.12.2016 'saveAsEncoding' : 'Сохранить � выбранной кодировкой', // from v2.1.19 added 2.12.2016 'selectFolder' : 'Выбрать папку', // from v2.1.20 added 13.12.2016 'firstLetterSearch': 'Пои�к по первому �имволу', // from v2.1.23 added 24.3.2017 'presets' : 'Пре�еты', // from v2.1.25 added 26.5.2017 'tooManyToTrash' : 'Слишком много файлов дл� перемещени� в корзину.', // from v2.1.25 added 9.6.2017 'TextArea' : 'Тек�това� обла�ть', // from v2.1.25 added 14.6.2017 'folderToEmpty' : 'Очи�тить папку "$1".', // from v2.1.25 added 22.6.2017 'filderIsEmpty' : '�ет файлов в паке "$1".', // from v2.1.25 added 22.6.2017 'preference' : '�а�тройка', // from v2.1.26 added 28.6.2017 'language' : 'Язык', // from v2.1.26 added 28.6.2017 'clearBrowserData': 'Сбро�ить на�тройки дл� �того браузера', // from v2.1.26 added 28.6.2017 'toolbarPref' : '�а�тройки панели', // from v2.1.27 added 2.8.2017 'charsLeft' : '... еще �имволов: $1.', // from v2.1.29 added 30.8.2017 'linesLeft' : '... еще �трок: $1.', // from v2.1.52 added 16.1.2020 'sum' : 'Общий размер', // from v2.1.29 added 28.9.2017 'roughFileSize' : 'Приблизительный размер файла', // from v2.1.30 added 2.11.2017 'autoFocusDialog' : 'Фоку� на �лементе диалога при наведении мыши', // from v2.1.30 added 2.11.2017 'select' : 'Выбрать', // from v2.1.30 added 23.11.2017 'selectAction' : 'Дей�твие при выборе файла', // from v2.1.30 added 23.11.2017 'useStoredEditor' : 'Открывать в редакторе, выбранном в прошлый раз', // from v2.1.30 added 23.11.2017 'selectinvert' : 'Выбрать �лементы � инвертированием', // from v2.1.30 added 25.11.2017 'renameMultiple' : 'Переименовать выбранные �лементы ($1 шт.) в $2?
          ДейÑ�твие нельзÑ� отменить!', // from v2.1.31 added 4.12.2017 'batchRename' : 'Групповое переименование', // from v2.1.31 added 8.12.2017 'plusNumber' : '+ ЧиÑ�ло', // from v2.1.31 added 8.12.2017 'asPrefix' : 'Добавить префикÑ�', // from v2.1.31 added 8.12.2017 'asSuffix' : 'Добавить Ñ�уффикÑ�', // from v2.1.31 added 8.12.2017 'changeExtention' : 'Изменить раÑ�ширение', // from v2.1.31 added 8.12.2017 'columnPref' : 'Ð�аÑ�тройки колонок (длÑ� проÑ�мотра в виде Ñ�пиÑ�ка)', // from v2.1.32 added 6.2.2018 'reflectOnImmediate' : 'Ð’Ñ�е изменениÑ� будут немедленно отражены в архиве.', // from v2.1.33 added 2.3.2018 'reflectOnUnmount' : 'ИзменениÑ� не вÑ�тупÑ�Ñ‚ в Ñ�илу до тех пор, пока вы не размонтируете Ñ�тот том.', // from v2.1.33 added 2.3.2018 'unmountChildren' : 'Тома, Ñ�монтированные на Ñ�том томе, также будут размонтированы. Ð’Ñ‹ хотите отключить его?', // from v2.1.33 added 5.3.2018 'selectionInfo' : 'СвойÑ�тва', // from v2.1.33 added 7.3.2018 'hashChecker' : 'Ð�лгоритмы длÑ� отображениÑ� хеш-Ñ�умм файлов', // from v2.1.33 added 10.3.2018 'infoItems' : 'Элементы в панели Ñ�войÑ�тв', // from v2.1.38 added 28.3.2018 'pressAgainToExit': 'Ð�ажмите Ñ�нова длÑ� выхода.', // from v2.1.38 added 1.4.2018 'toolbar' : 'Панель', // from v2.1.38 added 4.4.2018 'workspace' : 'РабочаÑ� облаÑ�ть', // from v2.1.38 added 4.4.2018 'dialog' : 'Диалог', // from v2.1.38 added 4.4.2018 'all' : 'Ð’Ñ�е', // from v2.1.38 added 4.4.2018 'iconSize' : 'Размер иконок (Ð’ виде иконок)', // from v2.1.39 added 7.5.2018 'editorMaximized' : 'Открывать редактор в развернутом виде', // from v2.1.40 added 30.6.2018 'editorConvNoApi' : 'Так как конвертациÑ� Ñ� помощью API недоÑ�тупно, произведите конвертацию на веб-Ñ�айте.', //from v2.1.40 added 8.7.2018 'editorConvNeedUpload' : 'ПоÑ�ле конвертации вы должны загрузить Ñ�качанный файл, чтобы Ñ�охранить его.', //from v2.1.40 added 8.7.2018 'convertOn' : 'Конвертировать на Ñ�айте $1', // from v2.1.40 added 10.7.2018 'integrations' : 'Интеграции', // from v2.1.40 added 11.7.2018 'integrationWith' : 'Менеджер elFinder интегрирован Ñ�о Ñ�ледующими внешними Ñ�ервиÑ�ами. ОзнакомьтеÑ�ÑŒ Ñ� правилами пользованиÑ�, политиками безопаÑ�ноÑ�ти и др. перед их иÑ�пользованием.', // from v2.1.40 added 11.7.2018 'showHidden' : 'Показать Ñ�крытые Ñ�лементы', // from v2.1.41 added 24.7.2018 'hideHidden' : 'Скрыть Ñ�крытые Ñ�лементы', // from v2.1.41 added 24.7.2018 'toggleHidden' : 'Показать/Ñ�крыть Ñ�крытые Ñ�лементы', // from v2.1.41 added 24.7.2018 'makefileTypes' : 'Типы файлов в меню "Ð�овый файл"', // from v2.1.41 added 7.8.2018 'typeOfTextfile' : 'Тип текÑ�тового файла', // from v2.1.41 added 7.8.2018 'add' : 'Добавить', // from v2.1.41 added 7.8.2018 'theme' : 'Тема', // from v2.1.43 added 19.10.2018 'default' : 'По умолчанию', // from v2.1.43 added 19.10.2018 'description' : 'ОпиÑ�ание', // from v2.1.43 added 19.10.2018 'website' : 'Веб-Ñ�айт', // from v2.1.43 added 19.10.2018 'author' : 'Ð�втор', // from v2.1.43 added 19.10.2018 'email' : 'Email', // from v2.1.43 added 19.10.2018 'license' : 'ЛицензиÑ�', // from v2.1.43 added 19.10.2018 'exportToSave' : 'Ð�евозможно Ñ�охранить файл. Чтобы не потерÑ�ть изменениÑ�, Ñ�кÑ�портируйте их на Ñ�вой ПК.', // from v2.1.44 added 1.12.2018 'dblclickToSelect': 'Двойной клик по файлу длÑ� его выбора.', // from v2.1.47 added 22.1.2019 'useFullscreen' : 'ИÑ�пользовать полноÑ�кранный режим', // from v2.1.47 added 19.2.2019 /********************************** mimetypes **********************************/ 'kindUnknown' : 'Ð�еизвеÑ�тный', 'kindRoot' : 'Корень тома', // from v2.1.16 added 16.10.2016 'kindFolder' : 'Папка', 'kindSelects' : 'Выбор', // from v2.1.29 added 29.8.2017 'kindAlias' : 'СÑ�ылка', 'kindAliasBroken' : 'БитаÑ� Ñ�Ñ�ылка', // applications 'kindApp' : 'Приложение', 'kindPostscript' : 'Документ Postscript', 'kindMsOffice' : 'Документ Microsoft Office', 'kindMsWord' : 'Документ Microsoft Word', 'kindMsExcel' : 'Документ Microsoft Excel', 'kindMsPP' : 'ПрезентациÑ� Microsoft Powerpoint', 'kindOO' : 'Документ Open Office', 'kindAppFlash' : 'Приложение Flash', 'kindPDF' : 'Документ PDF', 'kindTorrent' : 'Файл Bittorrent', 'kind7z' : 'Ð�рхив 7z', 'kindTAR' : 'Ð�рхив TAR', 'kindGZIP' : 'Ð�рхив GZIP', 'kindBZIP' : 'Ð�рхив BZIP', 'kindXZ' : 'Ð�рхив XZ', 'kindZIP' : 'Ð�рхив ZIP', 'kindRAR' : 'Ð�рхив RAR', 'kindJAR' : 'Файл Java JAR', 'kindTTF' : 'Шрифт True Type', 'kindOTF' : 'Шрифт Open Type', 'kindRPM' : 'Пакет RPM', // fonts 'kindFont' : 'Шрифт', 'kindSFNT' : 'Шрифт SFNT', 'kindEOT' : 'Шрифт Embedded Open Type', 'kindWOFF' : 'Шрифт Web Open Font Format', 'kindWOFF2' : 'Шрифт Web Open Font Format 2', // texts 'kindText' : 'ТекÑ�товый документ', 'kindTextPlain' : 'ПроÑ�той текÑ�Ñ‚', 'kindPHP' : 'ИÑ�ходник PHP', 'kindCSS' : 'Таблицы Ñ�тилей CSS', 'kindHTML' : 'Документ HTML', 'kindJS' : 'ИÑ�ходник Javascript', 'kindRTF' : 'Rich Text Format', 'kindC' : 'ИÑ�ходник C', 'kindCHeader' : 'Заголовочный файл C', 'kindCPP' : 'ИÑ�ходник C++', 'kindCPPHeader' : 'Заголовочный файл C++', 'kindShell' : 'Скрипт Unix shell', 'kindPython' : 'ИÑ�ходник Python', 'kindJava' : 'ИÑ�ходник Java', 'kindRuby' : 'ИÑ�ходник Ruby', 'kindPerl' : 'ИÑ�ходник Perl', 'kindSQL' : 'ИÑ�ходник SQL', 'kindXML' : 'Документ XML', 'kindAWK' : 'ИÑ�ходник AWK', 'kindCSV' : 'ТекÑ�Ñ‚ Ñ� разделителÑ�ми', 'kindDOCBOOK' : 'Документ Docbook XML', 'kindMarkdown' : 'ТекÑ�Ñ‚ Markdown', // added 20.7.2015 // images 'kindImage' : 'Изображение', 'kindBMP' : 'Изображение BMP', 'kindJPEG' : 'Изображение JPEG', 'kindGIF' : 'Изображение GIF', 'kindPNG' : 'Изображение PNG', 'kindTIFF' : 'Изображение TIFF', 'kindTGA' : 'Изображение TGA', 'kindPSD' : 'Изображение Adobe Photoshop', 'kindXBITMAP' : 'Изображение X bitmap', 'kindPXM' : 'Изображение Pixelmator', // media 'kindAudio' : 'Ð�удио файл', 'kindAudioMPEG' : 'Ð�удио MPEG', 'kindAudioMPEG4' : 'Ð�удио MPEG-4', 'kindAudioMIDI' : 'Ð�удио MIDI', 'kindAudioOGG' : 'Ð�удио Ogg Vorbis', 'kindAudioWAV' : 'Ð�удио WAV', 'AudioPlaylist' : 'ПлейлиÑ�Ñ‚ MP3', 'kindVideo' : 'Видео файл', 'kindVideoDV' : 'Видео DV', 'kindVideoMPEG' : 'Видео MPEG', 'kindVideoMPEG4' : 'Видео MPEG-4', 'kindVideoAVI' : 'Видео AVI', 'kindVideoMOV' : 'Видео Quick Time', 'kindVideoWM' : 'Видео Windows Media', 'kindVideoFlash' : 'Видео Flash', 'kindVideoMKV' : 'Видео Matroska', 'kindVideoOGG' : 'Видео Ogg' } }; })); PK!²K5EEAfile-manager-advanced/application/library/js/i18n/help/ru.html.jsnu„[µü¤

          Советы по работе

          Работа � пользователь�ким интерфей�ом похожа на �тандартный файловый менеджер операционной �и�темы. Однако перета�кивание в мобильных браузерах невозможно.

          • Щелкните правой кнопкой мыши или иÑ�пользуйте «длинный тап», чтобы отобразить контекÑ�тное меню.
          • Перетащите в дерево папок или текущую рабочую облаÑ�ть длÑ� перемещениÑ� / копированиÑ� Ñ�лементов.
          • Выбор Ñ�лемента в рабочей облаÑ�ти может быть раÑ�ширен Ñ� помощью клавиши Shift или Alt (Option).
          • Перетащите в папку назначениÑ� или рабочую облаÑ�ть длÑ� загрузки файлов и папок.
          • Ð’ диалоговом окне загрузки можно иÑ�пользовать вÑ�тавку данных или Ñ�пиÑ�ков URL-адреÑ�ов из буфера обмена, а также перетаÑ�кивать из других браузеров или файловых менеджеров и Ñ‚.д.
          • Ð�ачните перетаÑ�кивание, нажав Alt (Option), чтобы перетащить за пределы браузера. Это запуÑ�тить процеÑ�Ñ� Ñ�качиваниÑ� в Google Chrome.
          PK!§Q8YªªAfile-manager-advanced/application/library/js/i18n/help/tr.html.jsnu„[µü¤

          İşlem İpuçları

          Kullanıcı arayüzündeki işlem, işletim sisteminin standart dosya yöneticisine benzer. Ancak Sürükle ve Bırak özelliği mobil tarayıcılarda mümkün değildir.

          • BaÄŸlam menüsünü göstermek için saÄŸ tıklayın veya uzun dokunun.
          • Öğeleri taşımak/kopyalamak için klasör aÄŸacına veya geçerli çalışma alanına sürükleyip bırakın.
          • Çalışma alanındaki öğe seçimi Shift veya Alt (Seçenek) tuÅŸuyla geniÅŸletilebilir.
          • Dosya ve klasör yüklemek için hedef klasöre veya çalışma alanına sürükleyip bırakın.
          • Yükleme iletiÅŸim kutusu, pano verilerini veya URL listelerini yapıştırma/bırakma ve diÄŸer tarayıcı veya dosya yöneticilerinden Sürükle ve Bırak vb.
          • Dış tarayıcıya sürüklemek için Alt (Seçenek) tuÅŸuna basarak sürükleyin. Google Chrome ile indirme iÅŸlemi olacak.
          PK!¬ÛÑÒÒAfile-manager-advanced/application/library/js/i18n/help/cs.html.jsnu„[µü¤

          Tipy na obsluhu

          Obsluha na uživatelském rozhraní je podobná standardnímu správci souborů opera�ního systému. Drag and Drop však není možné používat s mobilními prohlíže�i.

          • Kliknutím pravým tlaÄ�ítkem nebo dlouhým klepnutím zobrazíte kontextové menu.
          • PÅ™etáhnÄ›te do stromu složek nebo do aktuálního pracovního prostoru a pÅ™etáhnÄ›te / kopírujte položky.
          • VýbÄ›r položky v pracovním prostoru můžete rozšířit pomocí kláves Shift nebo Alt (Možnost).
          • PÅ™emístÄ›te soubory a složky do cílové složky nebo do pracovního prostoru.
          • Dialog pÅ™edávání může pÅ™ijímat data schránky nebo seznamy adres URL a pÅ™itáhnout a odejít z jiných prohlížeÄ�ů nebo správců souborů.
          • Zatažením spusÅ¥te stisknutím klávesy Alt (Možnost) pÅ™etáhnÄ›te do vnÄ›jšího prohlížeÄ�e. Tato funkce se pÅ™evezme pomocí prohlížeÄ�e Google Chrome.
          PK!:È¡«øøAfile-manager-advanced/application/library/js/i18n/help/de.html.jsnu„[µü¤

          Anwendungstipps

          Die Verwendung dieser Anwendung ist ähnlich der einer lokalen Dateiverwaltung.
          Hinweis: auf mobilen Geräten ist das Ziehen und Ablegen (Drag and Drop) von Dateien nicht möglich.

          • Rechtsklick auf ein Element oder länger darauf zeigen öffnet das Kontextmenü
          • Um Elemente in andere Ordner oder aktuellen Arbeitsbereich zu kopieren oder verschieben diese Ziehen und Ablegen
          • Elementauswahl im Arbeitsbereich kann mit der Hochstell- oder ALT-TAste erweitert werden
          • Um lokale Ordner und Dateien in den Zielorder oder -arbeitsbereich zu kopieren diese Ziehen und Ablegen
          • Der Uploaddialog erlaubt Daten aus dem Clipboard (Zwischenspeicher), eine URL und Ziehen und Ablegen aus anderen Browsern und Dateiverwaltungsoberflächen
          • Ziehen mit gedrückter ALT-Taste erlaubt einen einfachen Dateidownload (nur Google Chrome)
          • Ordner und Dateien können ausgeblendet (versteckt) werden. Um sie wieder dauerhaft sichtbar zu machen, über die Menüleiste das "Icon Einstellungen" anklicken, dort unter Arbeitsplatz "Zeige versteckte Elemente" den Button "Neustart" anklicken
          • Das Kontextmenü (rechte Maustaste) zeigt je nach ausgewählten Element diverse Aktionen an
          • Je nach Art des Elements kann der Inhalt entweder mit dem integrierten Editor bearbeitet werden (z.B. .php, .txt, .ini usw.) oder wenn ein Bild dieses gedreht sowie die Größe geändert werden
          • Zum verbinden externer Speicherorte (FTP, Dropbox, Box, GoogleDrive, OneDrive) sowie Onlineeditor Zoho Office Editor oder Konvertierungsdienst Online-Convert müssen diese Anwendungen freigeschaltet als auch die entsprechenden API-Daten zum Abrufen je Dienst definiert sein.
            Sollten diese Dienste nicht verfügbar sein, müssen diese entweder selbständig dazu programmiert werden, oder einen Entwickler des Vertrauens damit beauftragen (z.B. OSWorX)
          • In den Einstellungen "Menü Icon Einstellungen" kann der gesamte Arbeitsbereich, die Menüleiste sowie etliche weitere Aktionen definiert werden
          PK!,u ããDfile-manager-advanced/application/library/js/i18n/help/zh_CN.html.jsnu„[µü¤

          �作�示

          在UI上的�作类似于�作系统的标准文件管�器。 但是在移动设备�览器�能进行拖放。

          • å�³é”®å�•击或长按显示上下文è�œå�•。
          • 将文件拖放到树状文件夹或目å‰�工作区便能移动/å¤�制文件。
          • 工作空间中的文件选择å�¯ä»¥é€šè¿‡Shift或Alt(Option)键进行多选。
          • 拖放到目标文件夹或工作区上开始上传文件和文件夹。
          • 上传对è¯�框å�¯ä»¥ç²˜è´´/拖放剪贴æ�¿æ•°æ�®æˆ–URL列表,以å�Šä»Žå…¶ä»–æµ�览器或文件管ç�†å™¨æ‹–放的文件。
          • 拖动从按下Alt(Option)键开始拖动到外部æµ�览器,会å�˜æˆ� Google Chrome 的下载æ“�作。
          PK!]3`ð  Afile-manager-advanced/application/library/js/i18n/help/en.html.jsnu„[µü¤

          Operation Tips

          Operation on the UI is similar to operating system's standard file manager. However, Drag and Drop is not possible with mobile browsers.

          • Right click or long tap to show the context menu.
          • Drag and drop into the folder tree or the current workspace to move/copy items.
          • Item selection in the workspace can be extended selection with Shift or Alt (Option) key.
          • Drag and Drop to the destination folder or workspace to upload files and folders.
          • The upload dialog can accept paste/drop clipboard data or URL lists and Drag and Drop from other browser or file managers etc.
          • Drag start with pressing Alt(Option) key to drag out to outside browser. It will became download operation with Google Chrome.
          PK!ŒFAfile-manager-advanced/application/library/js/i18n/help/ja.html.jsnu„[µü¤

          �作�ヒント

          UI��作��オペレーティングシステム�標準ファイルマ�ージャ���準拠�����。����モ�イルブラウザ��ドラッグ&ドロップ�����ん。

          • å�³ã‚¯ãƒªãƒƒã‚¯ã�¾ã�Ÿã�¯ãƒ­ãƒ³ã‚°ã‚¿ãƒƒãƒ—ã�§ã‚³ãƒ³ãƒ†ã‚­ã‚¹ãƒˆãƒ¡ãƒ‹ãƒ¥ãƒ¼ã‚’表示ã�—ã�¾ã�™ã€‚
          • アイテムを移動/コピーã�™ã‚‹ã�«ã�¯ã€�フォルダツリーã�¾ã�Ÿã�¯ãƒ¯ãƒ¼ã‚¯ã‚¹ãƒšãƒ¼ã‚¹ã�«ãƒ‰ãƒ©ãƒƒã‚°ï¼†ãƒ‰ãƒ­ãƒƒãƒ—ã�—ã�¾ã�™ã€‚
          • ワークスペース内ã�®ã‚¢ã‚¤ãƒ†ãƒ ã�®é�¸æŠžã�¯ã€�Shiftキーã�¾ã�Ÿã�¯Altキー(Optionキー)ã�§é�¸æŠžç¯„囲を拡張ã�§ã��ã�¾ã�™ã€‚
          • コピー先ã�®ãƒ•ォルダã�¾ã�Ÿã�¯ãƒ¯ãƒ¼ã‚¯ã‚¹ãƒšãƒ¼ã‚¹ã�«ãƒ‰ãƒ©ãƒƒã‚°ã‚¢ãƒ³ãƒ‰ãƒ‰ãƒ­ãƒƒãƒ—ã�—ã�¦ã€�ファイルã�¨ãƒ•ォルダをアップロードã�—ã�¾ã�™ã€‚
          • アップロードダイアログã�§ã�¯ã€�クリップボードã�®ãƒ‡ãƒ¼ã‚¿ã‚„URLリストã�®ãƒšãƒ¼ã‚¹ãƒˆ/ドロップã€�ä»–ã�®ãƒ–ラウザやファイルマãƒ�ージャã�‹ã‚‰ã�®ãƒ‰ãƒ©ãƒƒã‚°ï¼†ãƒ‰ãƒ­ãƒƒãƒ—ã�ªã�©ã‚’å�—ã�‘入れるã�“ã�¨ã�Œã�§ã��ã�¾ã�™ã€‚
          • Altキー(Optionキー)を押ã�—ã�ªã�Œã‚‰ãƒ‰ãƒ©ãƒƒã‚°ã�™ã‚‹ã�¨ã€�ブラウザã�®å¤–ã�«ãƒ‰ãƒ©ãƒƒã‚°ã�§ã��ã�¾ã�™ã€‚Google Chromeã�§ãƒ€ã‚¦ãƒ³ãƒ­ãƒ¼ãƒ‰æ“�作ã�«ã�ªã‚Šã�¾ã�™ã€‚
          PK!^Ę6ååAfile-manager-advanced/application/library/js/i18n/help/sk.html.jsnu„[µü¤

          Tipy na obsluhu

          Obsluha na používateľskom rozhraní je podobná štandardnému správcovi súborov opera�ného systému. Drag and Drop však nie je možné používať s mobilnými prehliada�mi.

          • Kliknutím pravým tlaÄ�idlom alebo dlhým klepnutím zobrazíte kontextové menu.
          • Presuňte myÅ¡ou do stromu prieÄ�inkov alebo do aktuálneho pracovného priestoru a presuňte / kopírujte položky.
          • Výber položky v pracovnom priestore môžete rozšíriÅ¥ pomocou klávesov Shift alebo Alt (MožnosÅ¥).
          • Premiestnite súbory a prieÄ�inky do cieľovej zložky alebo do pracovného priestoru.
          • Dialog odovzdávania môže prijímaÅ¥ dáta schránky alebo zoznamy adries URL a pritiahnuÅ¥ a odísÅ¥ z iných prehliadaÄ�ov alebo správcov súborov.
          • Potiahnutím spustite stlaÄ�ením klávesu Alt (MožnosÅ¥) pretiahnite do vonkajÅ¡ieho prehliadaÄ�a. Táto funkcia sa prevezme pomocou prehliadaÄ�a Google Chrome.
          PK!¸¦lF~~Afile-manager-advanced/application/library/js/i18n/help/fr.html.jsnu„[µü¤

          Conseils d'utilisation

          Le fonctionnement sur l'interface utilisateur est similaire à celui du gestionnaire de fichiers standard du système d'exploitation. Cependant, le glisser-déposer n'est pas possible avec les navigateurs mobiles.

          • Cliquez avec le bouton droit ou appuyez longuement pour afficher le menu contextuel.
          • Faites glisser et déposez dans l'arborescence des dossiers ou dans l'espace de travail actuel pour déplacer/copier des éléments.
          • La sélection d'éléments dans l'espace de travail peut être une sélection étendue avec la touche Maj ou Alt (Option).
          • Faites glisser et déposez vers le dossier ou l'espace de travail de destination pour télécharger des fichiers et des dossiers.
          • La boîte de dialogue de téléchargement peut accepter le collage/déplacement de données du presse-papiers ou de listes d'URL, ainsi que le glisser-déposer depuis d'autres navigateurs ou gestionnaires de fichiers, etc.
          • Faites glisser le début en appuyant sur la touche Alt (Option) pour le faire glisser vers l'extérieur du navigateur. Cela deviendra une opération de téléchargement avec Google Chrome.
          PK!G·âÏAfile-manager-advanced/application/library/js/i18n/help/pl.html.jsnu„[µü¤

          Wskazówki Obsługi

          Działanie w interfejsie użytkownika jest podobne do standardowego menedżera plików systemu operacyjnego. Jednak Przeciąganie i Upuszczanie nie jest możliwe w przeglądarkach mobilnych.

          • Kliknij prawym przyciskiem myszy lub dÅ‚użej, aby wyÅ›wietlić menu kontekstowe.
          • PrzeciÄ…gnij i upuść w drzewie folderów lub bieżącym obszarze roboczym, aby przenieść/kopiować elementy.
          • Wybór elementu w obszarze roboczym można rozszerzyć wybór z klawiszem Shift lub Alt(Opcja).
          • PrzeciÄ…gnij i Upuść do folderu docelowego lub obszaru roboczego, aby przesÅ‚ać pliki i foldery.
          • W oknie dialogowym przesyÅ‚ania można zaakceptować wklejanie/upuszczanie danych schowka lub listy adresów URL, i PrzeciÄ…gnij i Upuść z innych przeglÄ…darek lub menedżerów plików, itp.
          • Rozpocznij PrzeciÄ…ganie naciskajÄ…c Alt (Opcja), aby przeciÄ…gnąć na zewnÄ…trz przeglÄ…darki. Stanie siÄ™ operacjÄ… pobierania z Google Chrome.
          PK!ᣱßDfile-manager-advanced/application/library/js/i18n/help/zh_TW.html.jsnu„[µü¤

          �作使用�示

          介�的�作類似作業系統中的標準檔案管�功能,但是在行動�置�覽器中無法進行拖放�作。

          • 點擊å�³é�µæˆ–長按便會顯示æ“�作功能表
          • 將項目拖放至樹狀資料夾或目å‰�工作å�€ä¾¿èƒ½ç§»å‹•/複製項目。
          • æ�­é…�使用 Shift 或 Alt (Option) é�µï¼Œä¾¿èƒ½åœ¨å·¥ä½œå�€å°�項目進行延伸é�¸å�–。
          • 從儲存è£�置拖放項目至目標資料夾或工作å�€ï¼Œä¾¿èƒ½ä¸Šå‚³æª”案å�Šè³‡æ–™å¤¾ã€‚
          • 上傳å°�話方塊å�¯ä»¥è²¼ä¸Š/拖放剪貼簿資料或網å�€æ¸…單,以å�Šå¾žå…¶ä»–ç€�覽器或檔案管ç�†ç¨‹å¼�拖放的檔案。
          • 按ä½� Alt (Option) é�µå°‡é�¸å�–的項目拖放至ç€�覽器,會æˆ�為 Google Chrome 的下載æ“�作。
          PK!'O}É""Afile-manager-advanced/application/library/js/i18n/help/es.html.jsnu„[µü¤

          Consejos de operación

          Operar en la Interfaz del Usuario es similar al administrador de archivos estandar del sistema operativo. Sin embargo, Arrastrar y soltar no es posible con los navegadores móviles.

          • Click derecho o un tap largo para mostrar el menú de contexto.
          • Arrastrar y soltar dentro del árbol de carpetas o el espacio de trabajo actual para mover/copiar elementos.
          • La selección de elementos en el espacio de trabajo puede ampliarse con la tecla Shift o Alt (Opción).
          • Arrastrar y soltar a la carpeta de destino o área de trabajo para cargar archivos y carpetas.
          • El cuadro de diálogo de carga puede aceptar pegar/soltar datos del portapapeles o listas de URL y arrastrar y soltar desde otro navegador o administrador de archivos, etc.
          • Iniciar a arrastrar presionando la tecla Alt (Opción) para arrastrar fuera del navegador. Se convertirá en una operación de descarga con Google Chrome.
          PK!ð9ëŸAfile-manager-advanced/application/library/js/i18n/help/ko.html.jsnu„[µü¤

          사용 �

          UI 조작� 운�체제� 표준 파� 관리�를 사용하는 방법과 비슷합니다. 하지만 모바� 브�우저�서는 드래그앤드롭� 사용할 수 없습니다.

          • 오른쪽 í�´ë¦­í•˜ê±°ë‚˜ 길게 누르면 컨í…�스트 메뉴가 나타납니다.
          • ì�´ë�™/복사하려면 í�´ë�” 트리 ë˜�는 ì›�하는 í�´ë�”로 드래그앤드롭하십시오.
          • 작업공간ì—�서 항목ì�„ ì„ íƒ�하려면 Shiftë˜�는 Alt(Option) 키를 사용하여 ì„ íƒ� ì˜�ì—­ì�„ ë„“íž� 수 있습니다.
          • 업로드 대ìƒ� í�´ë�” ë˜�는 작업 ì˜�역으로 파ì�¼ë°� í�´ë�”를 드래그앤드롭하여 업로드할 수 있습니다.
          • 다른 브ë�¼ìš°ì € ë˜�는 파ì�¼ê´€ë¦¬ìž�등ì—�서 드래그앤드롭하거나, í�´ë¦½ë³´ë“œë¥¼ 통해 ë�°ì�´í„°ë˜�는 URLì�„ 복사/붙여넣어 업로드할 수 있습니다.
          • í�¬ë¡¬ë¸Œë�¼ìš°ì €ì�˜ 경우, Alt(Option) 키를 누른 ìƒ�태ì—�서 브ë�¼ìš°ì € 밖으로 드래그앤드롭하면 다운로드가 가능합니다.
          PK!èØøÐ?Ð?@file-manager-advanced/application/library/js/i18n/elfinder.sr.jsnu„[µü¤ /** * Serbian translation * @author MomÄ�ilo m0k1 Mićanović * @version 2014-12-19 */ (function(root, factory) { if (typeof define === 'function' && define.amd) { define(['elfinder'], factory); } else if (typeof exports !== 'undefined') { module.exports = factory(require('elfinder')); } else { factory(root.elFinder); } }(this, function(elFinder) { elFinder.prototype.i18.sr = { translator : 'MomÄ�ilo m0k1 Mićanović <moki.forum@gmail.com>', language : 'Srpski', direction : 'ltr', dateFormat : 'd.m.Y H:i', fancyDateFormat : '$1 H:i', messages : { /********************************** errors **********************************/ 'error' : 'GreÅ¡ka', 'errUnknown' : 'Nepoznata greÅ¡ka.', 'errUnknownCmd' : 'Nepoznata komanda.', 'errJqui' : 'Neispravna konfiguracija jQuery UI. Komponente koje mogu da se odabiru, povlaÄ�e, izbacuju moraju biti ukljuÄ�ene.', 'errNode' : 'elFinder zahteva DOM Element da bude kreiran.', 'errURL' : 'Neispravna elFinder konfiguracija! URL opcija nije postavljena.', 'errAccess' : 'Pristup odbijen.', 'errConnect' : 'Nije moguće povezivanje s skriptom.', 'errAbort' : 'Veza prekinuta.', 'errTimeout' : 'Veza odbaÄ�ena.', 'errNotFound' : 'Skripta nije pronaÄ‘ena.', 'errResponse' : 'Neispravan odgovor skripte.', 'errConf' : 'Neispravna konfiguracija skripte.', 'errJSON' : 'PHP JSON modul nije instaliran.', 'errNoVolumes' : 'Vidljivi volumeni nisu dostupni.', 'errCmdParams' : 'Nevažeći parametri za komandu "$1".', 'errDataNotJSON' : 'Podaci nisu JSON.', 'errDataEmpty' : 'Podaci nisu prazni.', 'errCmdReq' : 'Skripta zahteva komandu.', 'errOpen' : 'Nemoguće otvoriti "$1".', 'errNotFolder' : 'Objekat nije folder.', 'errNotFile' : 'Objekat nije datoteka.', 'errRead' : 'Nemoguće proÄ�itati "$1".', 'errWrite' : 'Nemoguće pisati u "$1".', 'errPerm' : 'Dozvola je odbijena.', 'errLocked' : '"$1" je zakljuÄ�an i nemože biti preimenovan, premeÅ¡ten ili obrisan.', 'errExists' : 'Datoteka zvana "$1" već postoji.', 'errInvName' : 'Neispravno ime datoteke.', 'errFolderNotFound' : 'Folder nije pronaÄ‘en.', 'errFileNotFound' : 'Datoteka nije pronaÄ‘ena.', 'errTrgFolderNotFound' : 'Izabrani folder "$1" nije pronaÄ‘en.', 'errPopup' : 'PretraživaÄ� spreÄ�ava otvaranje iskaÄ�ućih prozora. Da otvorite datoteku ukljuÄ�ite iskaÄ�uće prozore u opcijama pretraživaÄ�a.', 'errMkdir' : 'Nemoguće kreirati folder "$1".', 'errMkfile' : 'Nemoguće kreirati datoteku "$1".', 'errRename' : 'Nemoguće preimenovati datoteku "$1".', 'errCopyFrom' : 'Kopiranje datoteki sa "$1" nije dozvoljeno.', 'errCopyTo' : 'Kopiranje datoteki na "$1" nije dozvoljeno.', 'errUpload' : 'Greska pri slanju.', 'errUploadFile' : 'Nemoguće poslati "$1".', 'errUploadNoFiles' : 'Nisu pronaÄ‘ene datoteke za slanje.', 'errUploadTotalSize' : 'Podaci premaÅ¡uju najveću dopuÅ¡tenu veliÄ�inu.', 'errUploadFileSize' : 'Datoteka premaÅ¡uje najveću dopuÅ¡tenu veliÄ�inu.', 'errUploadMime' : 'Vrsta datoteke nije dopuÅ¡tena.', 'errUploadTransfer' : '"$1" greÅ¡ka prilikom slanja.', 'errNotReplace' : 'Object "$1" already exists at this location and can not be replaced by object with another type.', 'errReplace' : 'Unable to replace "$1".', 'errSave' : 'NemožeÅ¡ saÄ�uvati "$1".', 'errCopy' : 'NemožeÅ¡ kopirati "$1".', 'errMove' : 'NemožeÅ¡ premestiti "$1".', 'errCopyInItself' : 'NemožeÅ¡ kopirati "$1" na istu lokaciju.', 'errRm' : 'NemožeÅ¡ obrisati "$1".', 'errRmSrc' : 'Unable remove source file(s).', 'errExtract' : 'Nemoguće izvaditi datoteke iz "$1".', 'errArchive' : 'Nemoguće kreirati arhivu.', 'errArcType' : 'Nepodržani tip arhive.', 'errNoArchive' : 'Datoteka nije arhiva ili je nepodržani tip arhive.', 'errCmdNoSupport' : 'Skripta nepodržava ovu komandu.', 'errReplByChild' : 'Folder “$1â€� ne može biti zamenut stavkom koju sadrži.', 'errArcSymlinks' : 'Zbog bezbednosnih razloga ne možete raspakovati arhive koje sadrže simboliÄ�ke veze ili datoteke sa nedozvoljenim imenima.', 'errArcMaxSize' : 'Arhiva je dostigla maksimalnu veliÄ�inu.', 'errResize' : 'Nemoguće promeniti veliÄ�inu "$1".', 'errResizeDegree' : 'Invalid rotate degree.', 'errResizeRotate' : 'Unable to rotate image.', 'errResizeSize' : 'Invalid image size.', 'errResizeNoChange' : 'Image size not changed.', 'errUsupportType' : 'nepodržan tip datoteke.', 'errNotUTF8Content' : 'Datoteka "$1" nije u UTF-8 formati i ne može biti izmenjena.', 'errNetMount' : 'Nije moguće montirati "$1".', 'errNetMountNoDriver' : 'Nepodržani protokol.', 'errNetMountFailed' : 'Montiranje neuspelo.', 'errNetMountHostReq' : 'Host je potreban.', 'errSessionExpires' : 'Your session has expired due to inactivity.', 'errCreatingTempDir' : 'Unable to create temporary directory: "$1"', 'errFtpDownloadFile' : 'Unable to download file from FTP: "$1"', 'errFtpUploadFile' : 'Unable to upload file to FTP: "$1"', 'errFtpMkdir' : 'Unable to create remote directory on FTP: "$1"', 'errArchiveExec' : 'Error while archiving files: "$1"', 'errExtractExec' : 'Error while extracting files: "$1"', /******************************* commands names ********************************/ 'cmdarchive' : 'Kreiraj arhivu', 'cmdback' : 'Nazad', 'cmdcopy' : 'Kopiraj', 'cmdcut' : 'Iseci', 'cmddownload' : 'Preuzmi', 'cmdduplicate' : 'Dupliraj', 'cmdedit' : 'Izmeni datoteku', 'cmdextract' : 'Raspakuj arhivu', 'cmdforward' : 'Napred', 'cmdgetfile' : 'Izaberi datoteke', 'cmdhelp' : 'O ovom softveru', 'cmdhome' : 'PoÄ�etna', 'cmdinfo' : 'Proveri informacije', 'cmdmkdir' : 'Novi folder', 'cmdmkfile' : 'Nova datoteka', 'cmdopen' : 'Otvori', 'cmdpaste' : 'Zalepi', 'cmdquicklook' : 'Pregledaj', 'cmdreload' : 'Povno uÄ�itaj', 'cmdrename' : 'Preimenuj', 'cmdrm' : 'ObriÅ¡i', 'cmdsearch' : 'PronaÄ‘i datoteke', 'cmdup' : 'Idi na nadreÄ‘eni folder', 'cmdupload' : 'PoÅ¡alji datoteke', 'cmdview' : 'Pogledaj', 'cmdresize' : 'Promeni veliÄ�inu slike', 'cmdsort' : 'Sortiraj', 'cmdnetmount' : 'Mount network volume', /*********************************** buttons ***********************************/ 'btnClose' : 'Zatvori', 'btnSave' : 'SaÄ�uvaj', 'btnRm' : 'ObriÅ¡i', 'btnApply' : 'Potvrdi', 'btnCancel' : 'Prekini', 'btnNo' : 'Ne', 'btnYes' : 'Da', 'btnDiscard': 'Discard changes', 'btnMount' : 'Mount', /******************************** notifications ********************************/ 'ntfopen' : 'Otvaranje foldera', 'ntffile' : 'Otvaranje datoteke', 'ntfreload' : 'Ponovo uÄ�itavanje sadržaja foldera', 'ntfmkdir' : 'Kreiranje foldera', 'ntfmkfile' : 'Kreiranje datoteke', 'ntfrm' : 'Brisanje datoteke', 'ntfcopy' : 'Kopiranje datoteke', 'ntfmove' : 'PremeÅ¡tanje datoteke', 'ntfprepare' : 'Priprema za kopiranje dateoteke', 'ntfrename' : 'Primenovanje datoteke', 'ntfupload' : 'Slanje datoteke', 'ntfdownload' : 'Preuzimanje datoteke', 'ntfsave' : 'ÄŒuvanje datoteke', 'ntfarchive' : 'Kreiranje arhive', 'ntfextract' : 'Izdvajanje datoteka iz arhive', 'ntfsearch' : 'Pretraga datoteka', 'ntfresize' : 'Resizing images', 'ntfsmth' : 'Radim neÅ¡to >_<', 'ntfloadimg' : 'UÄ�itavanje slike', 'ntfnetmount' : 'Montiranje mrežnog volumena', 'ntfdim' : 'Acquiring image dimension', /************************************ dates **********************************/ 'dateUnknown' : 'nepoznat', 'Today' : 'Danas', 'Yesterday' : 'Sutra', 'msJan' : 'Jan', 'msFeb' : 'Feb', 'msMar' : 'Mar', 'msApr' : 'Apr', 'msMay' : 'Maj', 'msJun' : 'Jun', 'msJul' : 'Jul', 'msAug' : 'Avg', 'msSep' : 'Sep', 'msOct' : 'Okt', 'msNov' : 'Nov', 'msDec' : 'Dec', 'January' : 'Januar', 'February' : 'Februar', 'March' : 'Mart', 'April' : 'April', 'May' : 'Maj', 'June' : 'Jun', 'July' : 'Jul', 'August' : 'Avgust', 'September' : 'Septembar', 'October' : 'Oktobar', 'November' : 'Novembar', 'December' : 'Decembar', 'Sunday' : 'Nedelja', 'Monday' : 'Ponedeljak', 'Tuesday' : 'Utorak', 'Wednesday' : 'Sreda', 'Thursday' : 'ÄŒetvrtak', 'Friday' : 'Petak', 'Saturday' : 'Subota', 'Sun' : 'Ned', 'Mon' : 'Pon', 'Tue' : 'Uto', 'Wed' : 'Sre', 'Thu' : 'ÄŒet', 'Fri' : 'Pet', 'Sat' : 'Sub', /******************************** sort variants ********************************/ 'sortname' : 'po imenu', 'sortkind' : 'po vrsti', 'sortsize' : 'po veliÄ�ini', 'sortdate' : 'po datumu', 'sortFoldersFirst' : 'Prvo folderi', /********************************** messages **********************************/ 'confirmReq' : 'Potrebna potvrda', 'confirmRm' : 'Da li ste sigurni da želite da obriÅ¡ete datoteke?
          Ovo se ne može poniÅ¡titi!', 'confirmRepl' : 'Zameniti stare datoteke sa novima?', 'apllyAll' : 'Potvrdi za sve', 'name' : 'Ime', 'size' : 'VeliÄ�ina', 'perms' : 'Dozvole', 'modify' : 'Izmenjeno', 'kind' : 'Vrsta', 'read' : 'Ä�itanje', 'write' : 'pisanje', 'noaccess' : 'bez pristupa', 'and' : 'i', 'unknown' : 'nepoznato', 'selectall' : 'Izaberi sve datoteke', 'selectfiles' : 'Izaberi datoteku(e)', 'selectffile' : 'Izaberi prvu datoteku', 'selectlfile' : 'Izaberi poslednju datoteku', 'viewlist' : 'Popisni prikaz', 'viewicons' : 'Pregled ikona', 'places' : 'Mesta', 'calc' : 'IzraÄ�unaj', 'path' : 'Putanja', 'aliasfor' : 'Nadimak za', 'locked' : 'ZakljuÄ�ano', 'dim' : 'Dimenzije', 'files' : 'Datoteke', 'folders' : 'Folderi', 'items' : 'Stavke', 'yes' : 'da', 'no' : 'ne', 'link' : 'Veza', 'searcresult' : 'Rezultati pretrage', 'selected' : 'odabrane stavke', 'about' : 'O softveru', 'shortcuts' : 'PreÄ�ice', 'help' : 'Pomoć', 'webfm' : 'Web menaÄ‘er datoteka', 'ver' : 'Verzija', 'protocolver' : 'verzija protokla', 'homepage' : 'Adresa projekta', 'docs' : 'Dokumentacija', 'github' : 'Forkuj nas na Github', 'twitter' : 'Prati nas na twitter', 'facebook' : 'Pridruži nam se na facebook', 'team' : 'Tim', 'chiefdev' : 'glavni programer', 'developer' : 'programer', 'contributor' : 'pomoćnik', 'maintainer' : 'održavatelj', 'translator' : 'prevodilac', 'icons' : 'Ikone', 'dontforget' : 'i ne zaboravite da ponesete peÅ¡kir', 'shortcutsof' : 'PreÄ�ice iskljuÄ�ene', 'dropFiles' : 'Prevucite datoteke ovde', 'or' : 'ili', 'selectForUpload' : 'Odaberite datoteke za slanje', 'moveFiles' : 'Premesti datoteke', 'copyFiles' : 'Kopiraj datoteke', 'rmFromPlaces' : 'Ukloni iz mesta', 'aspectRatio' : 'Omer Å¡irine i visine', 'scale' : 'Razmera', 'width' : 'Å irina', 'height' : 'Visina', 'resize' : 'Promeni veliÄ�inu', 'crop' : 'Iseci', 'rotate' : 'Rotiraj', 'rotate-cw' : 'Rotiraj 90 stepeni CW', 'rotate-ccw' : 'Rotiraj 90 stepeni CCW', 'degree' : 'Stepeni', 'netMountDialogTitle' : 'Montiraj mrežni volumen', 'protocol' : 'Protokol', 'host' : 'Host', 'port' : 'Port', 'user' : 'KorisniÄ�ko Ime', 'pass' : 'Lozinka', /********************************** mimetypes **********************************/ 'kindUnknown' : 'Nepoznat', 'kindFolder' : 'Folder', 'kindAlias' : 'Nadimak', 'kindAliasBroken' : 'Neispravan nadimak', // applications 'kindApp' : 'Aplikacija', 'kindPostscript' : 'Postscript dokument', 'kindMsOffice' : 'Microsoft Office dokument', 'kindMsWord' : 'Microsoft Word dokument', 'kindMsExcel' : 'Microsoft Excel dokument', 'kindMsPP' : 'Microsoft Powerpoint prezentacija', 'kindOO' : 'Open Office dokument', 'kindAppFlash' : 'Flash aplikacija', 'kindPDF' : 'Portable Document Format (PDF)', 'kindTorrent' : 'Bittorrent datoteka', 'kind7z' : '7z arhiva', 'kindTAR' : 'TAR arhiva', 'kindGZIP' : 'GZIP arhiva', 'kindBZIP' : 'BZIP arhiva', 'kindXZ' : 'XZ arhiva', 'kindZIP' : 'ZIP arhiva', 'kindRAR' : 'RAR arhiva', 'kindJAR' : 'Java JAR datoteka', 'kindTTF' : 'True Type font', 'kindOTF' : 'Open Type font', 'kindRPM' : 'RPM paket', // fonts 'kindFont' : 'Font', 'kindSFNT' : 'SFNT font', 'kindEOT' : 'Embedded Open Type font', 'kindWOFF' : 'Web Open Font Format', 'kindWOFF2' : 'Web Open Font Format 2', // texts 'kindText' : 'Teokstualni dokument', 'kindTextPlain' : 'ÄŒist tekst', 'kindPHP' : 'PHP kod', 'kindCSS' : 'CSS kod', 'kindHTML' : 'HTML dokument', 'kindJS' : 'Javascript kod', 'kindRTF' : 'Rich Text Format', 'kindC' : 'C kod', 'kindCHeader' : 'C header kod', 'kindCPP' : 'C++ kod', 'kindCPPHeader' : 'C++ header kod', 'kindShell' : 'Unix shell skripta', 'kindPython' : 'Python kod', 'kindJava' : 'Java kod', 'kindRuby' : 'Ruby kod', 'kindPerl' : 'Perl skripta', 'kindSQL' : 'SQL kod', 'kindXML' : 'XML dokument', 'kindAWK' : 'AWK kod', 'kindCSV' : 'Comma separated values', 'kindDOCBOOK' : 'Docbook XML dokument', // images 'kindImage' : 'Slika', 'kindBMP' : 'BMP slika', 'kindJPEG' : 'JPEG slika', 'kindGIF' : 'GIF slika', 'kindPNG' : 'PNG slika', 'kindTIFF' : 'TIFF slika', 'kindTGA' : 'TGA slika', 'kindPSD' : 'Adobe Photoshop slika', 'kindXBITMAP' : 'X bitmap slika', 'kindPXM' : 'Pixelmator slika', // media 'kindAudio' : 'Zvuk', 'kindAudioMPEG' : 'MPEG zvuk', 'kindAudioMPEG4' : 'MPEG-4 zvuk', 'kindAudioMIDI' : 'MIDI zvuk', 'kindAudioOGG' : 'Ogg Vorbis zvuk', 'kindAudioWAV' : 'WAV zvuk', 'AudioPlaylist' : 'MP3 lista', 'kindVideo' : 'Video', 'kindVideoDV' : 'DV video', 'kindVideoMPEG' : 'MPEG video', 'kindVideoMPEG4' : 'MPEG-4 video', 'kindVideoAVI' : 'AVI video', 'kindVideoMOV' : 'Quick Time video', 'kindVideoWM' : 'Windows Media video', 'kindVideoFlash' : 'Flash video', 'kindVideoMKV' : 'Matroska video', 'kindVideoOGG' : 'Ogg video' } }; })); PK!z·I^�^�@file-manager-advanced/application/library/js/i18n/elfinder.fr.jsnu„[µü¤/** * française translation * @author Régis Guyomarch * @author Benoit Delachaux * @author Jonathan Grunder * @version 2023-04-16 */ (function(root, factory) { if (typeof define === 'function' && define.amd) { define(['elfinder'], factory); } else if (typeof exports !== 'undefined') { module.exports = factory(require('elfinder')); } else { factory(root.elFinder); } }(this, function(elFinder) { elFinder.prototype.i18.fr = { translator : 'Régis Guyomarch <regisg@gmail.com>, Benoit Delachaux <benorde33@gmail.com>, Jonathan Grunder <jonathan.grunder@gmail.com>', language : 'française', direction : 'ltr', dateFormat : 'd/M/Y H:i', // will show like: 16/Avr/2023 12:36 fancyDateFormat : '$1 H:i', // will show like: Aujourd'hui 12:36 nonameDateFormat : 'ymd-His', // noname upload will show like: 230416-123657 messages : { /********************************** errors **********************************/ 'error' : 'Erreur', 'errUnknown' : 'Erreur inconnue.', 'errUnknownCmd' : 'Commande inconnue.', 'errJqui' : 'Mauvaise configuration de jQuery UI. Les composants Selectable, draggable et droppable doivent être inclus.', 'errNode' : 'elFinder requiert que l\'élément DOM ait été créé.', 'errURL' : 'Mauvaise configuration d\'elFinder ! L\'option URL n\'a pas été définie.', 'errAccess' : 'Accès refusé.', 'errConnect' : 'Impossible de se connecter au backend.', 'errAbort' : 'Connexion interrompue.', 'errTimeout' : 'Délai de connexion dépassé.', 'errNotFound' : 'Backend non trouvé.', 'errResponse' : 'Mauvaise réponse du backend.', 'errConf' : 'Mauvaise configuration du backend.', 'errJSON' : 'Le module PHP JSON n\'est pas installé.', 'errNoVolumes' : 'Aucun volume lisible.', 'errCmdParams' : 'Mauvais paramétrage de la commande "$1".', 'errDataNotJSON' : 'Les données ne sont pas au format JSON.', 'errDataEmpty' : 'Données inexistantes.', 'errCmdReq' : 'La requête au Backend doit comporter le nom de la commande.', 'errOpen' : 'Impossible d\'ouvrir "$1".', 'errNotFolder' : 'Cet objet n\'est pas un dossier.', 'errNotFile' : 'Cet objet n\'est pas un fichier.', 'errRead' : 'Impossible de lire "$1".', 'errWrite' : 'Impossible d\'écrire dans "$1".', 'errPerm' : 'Permission refusée.', 'errLocked' : '"$1" est verrouillé et ne peut être déplacé ou supprimé.', 'errExists' : 'Un élément nommé "$1" existe déjà.', 'errInvName' : 'Nom de fichier incorrect.', 'errInvDirname' : 'Nom de dossier incorrect.', // from v2.1.24 added 12.4.2017 'errFolderNotFound' : 'Dossier non trouvé.', 'errFileNotFound' : 'Fichier non trouvé.', 'errTrgFolderNotFound' : 'Dossier destination "$1" non trouvé.', 'errPopup' : 'Le navigateur web a empêché l\'ouverture d\'une fenêtre "popup". Pour ouvrir le fichier, modifiez les options du navigateur web.', 'errMkdir' : 'Impossible de créer le dossier "$1".', 'errMkfile' : 'Impossible de créer le fichier "$1".', 'errRename' : 'Impossible de renommer "$1".', 'errCopyFrom' : 'Interdiction de copier des fichiers depuis le volume "$1".', 'errCopyTo' : 'Interdiction de copier des fichiers vers le volume "$1".', 'errMkOutLink' : 'Impossible de créer un lien en dehors du volume principal.', // from v2.1 added 03.10.2015 'errUpload' : 'Erreur lors de l\'envoi du fichier.', // old name - errUploadCommon 'errUploadFile' : 'Impossible d\'envoyer "$1".', // old name - errUpload 'errUploadNoFiles' : 'Aucun fichier à envoyer.', 'errUploadTotalSize' : 'Les données dépassent la taille maximale allouée.', // old name - errMaxSize 'errUploadFileSize' : 'Le fichier dépasse la taille maximale allouée.', // old name - errFileMaxSize 'errUploadMime' : 'Type de fichier non autorisé.', 'errUploadTransfer' : '"$1" erreur de transfert.', 'errUploadTemp' : 'Impossible de créer un fichier temporaire pour transférer les fichiers.', // from v2.1 added 26.09.2015 'errNotReplace' : 'L\'objet "$1" existe déjà à cet endroit et ne peut être remplacé par un objet d\'un type différent.', // new 'errReplace' : 'Impossible de remplacer "$1".', 'errSave' : 'Impossible de sauvegarder "$1".', 'errCopy' : 'Impossible de copier "$1".', 'errMove' : 'Impossible de déplacer "$1".', 'errCopyInItself' : 'Impossible de copier "$1" sur lui-même.', 'errRm' : 'Impossible de supprimer "$1".', 'errTrash' : 'Impossible de déplacer dans la corbeille', // from v2.1.24 added 30.4.2017 'errRmSrc' : 'Impossible de supprimer le(s) fichier(s) source(s).', 'errExtract' : 'Imbossible d\'extraire les fichiers à partir de "$1".', 'errArchive' : 'Impossible de créer l\'archive.', 'errArcType' : 'Type d\'archive non supporté.', 'errNoArchive' : 'Le fichier n\'est pas une archive, ou c\'est un type d\'archive non supporté.', 'errCmdNoSupport' : 'Le Backend ne prend pas en charge cette commande.', 'errReplByChild' : 'Le dossier “$1â€� ne peut pas être remplacé par un élément qu\'il contient.', 'errArcSymlinks' : 'Par mesure de sécurité, il est défendu d\'extraire une archive contenant des liens symboliques ou des noms de fichier non autorisés.', // edited 24.06.2012 'errArcMaxSize' : 'Les fichiers de l\'archive excèdent la taille maximale autorisée.', 'errResize' : 'Impossible de redimensionner "$1".', 'errResizeDegree' : 'Degré de rotation invalide.', // added 7.3.2013 'errResizeRotate' : 'L\'image ne peut pas être tournée.', // added 7.3.2013 'errResizeSize' : 'Dimension de l\'image non-valide.', // added 7.3.2013 'errResizeNoChange' : 'L\'image n\'est pas redimensionnable.', // added 7.3.2013 'errUsupportType' : 'Type de fichier non supporté.', 'errNotUTF8Content' : 'Le fichier "$1" n\'est pas en UTF-8, il ne peut être édité.', // added 9.11.2011 'errNetMount' : 'Impossible de monter "$1".', // added 17.04.2012 'errNetMountNoDriver' : 'Protocole non supporté.', // added 17.04.2012 'errNetMountFailed' : 'Echec du montage.', // added 17.04.2012 'errNetMountHostReq' : 'Hôte requis.', // added 18.04.2012 'errSessionExpires' : 'Votre session a expiré en raison de son inactivité.', 'errCreatingTempDir' : 'Impossible de créer le répertoire temporaire : "$1"', 'errFtpDownloadFile' : 'Impossible de télécharger le file depuis l\'accès FTP : "$1"', 'errFtpUploadFile' : 'Impossible d\'envoyer le fichier vers l\'accès FTP : "$1"', 'errFtpMkdir' : 'Impossible de créer un répertoire distant sur l\'accès FTP :"$1"', 'errArchiveExec' : 'Erreur lors de l\'archivage des fichiers : "$1"', 'errExtractExec' : 'Erreur lors de l\'extraction des fichiers : "$1"', 'errNetUnMount' : 'Impossible de démonter.', // from v2.1 added 30.04.2012 'errConvUTF8' : 'Conversion en UTF-8 impossible', // from v2.1 added 08.04.2014 'errFolderUpload' : 'Essayez Google Chrome, si voulez envoyer le dossier.', // from v2.1 added 26.6.2015 'errSearchTimeout' : 'Délai d’attente dépassé pour la recherche "$1". Le résultat de la recherche est partiel.', // from v2.1 added 12.1.2016 'errReauthRequire' : 'Réauthorisation requise.', // from v2.1.10 added 24.3.2016 'errMaxTargets' : 'Le nombre maximal d\'éléments pouvant être sélectionnés est $1.', // from v2.1.17 added 17.10.2016 'errRestore' : 'Impossible de restaurer la corbeille. La destination de la restauration n\'a pu être identifiée.', // from v2.1.24 added 3.5.2017 'errEditorNotFound' : 'Aucun éditeur n\'a été trouvé pour ce type de fichier.', // from v2.1.25 added 23.5.2017 'errServerError' : 'Une erreur est survenue du côté serveur.', // from v2.1.25 added 16.6.2017 'errEmpty' : 'Impossible de vider le dossier "$1".', // from v2.1.25 added 22.6.2017 'moreErrors' : 'Il y a encore $1 erreur(s).', // from v2.1.44 added 9.12.2018 'errMaxMkdirs' : 'Vous ne pouvez créer que $1 dossier au même moment.', // from v2.1.58 added 20.6.2021 /******************************* commands names ********************************/ 'cmdarchive' : 'Créer une archive', 'cmdback' : 'Précédent', 'cmdcopy' : 'Copier', 'cmdcut' : 'Couper', 'cmddownload' : 'Télécharger', 'cmdduplicate' : 'Dupliquer', 'cmdedit' : 'Éditer le fichier', 'cmdextract' : 'Extraire les fichiers de l\'archive', 'cmdforward' : 'Suivant', 'cmdgetfile' : 'Sélectionner les fichiers', 'cmdhelp' : 'À propos de ce logiciel', 'cmdhome' : 'Accueil', 'cmdinfo' : 'Informations', 'cmdmkdir' : 'Nouveau dossier', 'cmdmkdirin' : 'Dans un nouveau dossier', // from v2.1.7 added 19.2.2016 'cmdmkfile' : 'Nouveau fichier', 'cmdopen' : 'Ouvrir', 'cmdpaste' : 'Coller', 'cmdquicklook' : 'Prévisualiser', 'cmdreload' : 'Actualiser', 'cmdrename' : 'Renommer', 'cmdrm' : 'Supprimer', 'cmdtrash' : 'À la corbeille', //from v2.1.24 added 29.4.2017 'cmdrestore' : 'Restaurer', //from v2.1.24 added 3.5.2017 'cmdsearch' : 'Trouver les fichiers', 'cmdup' : 'Remonter au dossier parent', 'cmdupload' : 'Envoyer les fichiers', 'cmdview' : 'Vue', 'cmdresize' : 'Redimensionner l\'image', 'cmdsort' : 'Trier', 'cmdnetmount' : 'Monter un volume réseau', // added 18.04.2012 'cmdnetunmount': 'Démonter', // from v2.1 added 30.04.2012 'cmdplaces' : 'Vers Favoris', // added 28.12.2014 'cmdchmod' : 'Changer de mode', // from v2.1 added 20.6.2015 'cmdopendir' : 'Ouvrir un dossier', // from v2.1 added 13.1.2016 'cmdcolwidth' : 'Réinitialiser largeur colone', // from v2.1.13 added 12.06.2016 'cmdfullscreen': 'Plein écran', // from v2.1.15 added 03.08.2016 'cmdmove' : 'Déplacer', // from v2.1.15 added 21.08.2016 'cmdempty' : 'Vider le dossier', // from v2.1.25 added 22.06.2017 'cmdundo' : 'Annuler', // from v2.1.27 added 31.07.2017 'cmdredo' : 'Refaire', // from v2.1.27 added 31.07.2017 'cmdpreference': 'Préférences', // from v2.1.27 added 03.08.2017 'cmdselectall' : 'Tout sélectionner', // from v2.1.28 added 15.08.2017 'cmdselectnone': 'Tout désélectionner', // from v2.1.28 added 15.08.2017 'cmdselectinvert': 'Inverser la sélection', // from v2.1.28 added 15.08.2017 'cmdopennew' : 'Ouvrir dans une nouvelle fenêtre', // from v2.1.38 added 3.4.2018 'cmdhide' : 'Cacher (Préférence)', // from v2.1.41 added 24.7.2018 /*********************************** buttons ***********************************/ 'btnClose' : 'Fermer', 'btnSave' : 'Enregistrer', 'btnRm' : 'Supprimer', 'btnApply' : 'Appliquer', 'btnCancel' : 'Annuler', 'btnNo' : 'Non', 'btnYes' : 'Oui', 'btnDiscard': 'Discard changes', 'btnMount' : 'Monter', // added 18.04.2012 'btnApprove': 'Aller à $1 & approuver', // from v2.1 added 26.04.2012 'btnUnmount': 'Démonter', // from v2.1 added 30.04.2012 'btnConv' : 'Convertir', // from v2.1 added 08.04.2014 'btnCwd' : 'Ici', // from v2.1 added 22.5.2015 'btnVolume' : 'Volume', // from v2.1 added 22.5.2015 'btnAll' : 'Tous', // from v2.1 added 22.5.2015 'btnMime' : 'Type MIME', // from v2.1 added 22.5.2015 'btnFileName':'Nom du fichier', // from v2.1 added 22.5.2015 'btnSaveClose': 'Sauvegarder & Fermer', // from v2.1 added 12.6.2015 'btnBackup' : 'Sauvegarde', // fromv2.1 added 28.11.2015 'btnRename' : 'Renommer', // from v2.1.24 added 6.4.2017 'btnRenameAll' : 'Renommer (tous)', // from v2.1.24 added 6.4.2017 'btnPrevious' : 'Préc. ($1/$2)', // from v2.1.24 added 11.5.2017 'btnNext' : 'Suiv. ($1/$2)', // from v2.1.24 added 11.5.2017 'btnSaveAs' : 'Sauvegarder sous', // from v2.1.25 added 24.5.2017 /******************************** notifications ********************************/ 'ntfopen' : 'Ouvrir le dossier', 'ntffile' : 'Ouvrir le fichier', 'ntfreload' : 'Actualiser le contenu du dossier', 'ntfmkdir' : 'Création du dossier', 'ntfmkfile' : 'Création des fichiers', 'ntfrm' : 'Supprimer les éléments', 'ntfcopy' : 'Copier les éléments', 'ntfmove' : 'Déplacer les éléments', 'ntfprepare' : 'Préparation de la copie des éléments', 'ntfrename' : 'Renommer les fichiers', 'ntfupload' : 'Envoi des fichiers', 'ntfdownload' : 'Téléchargement des fichiers', 'ntfsave' : 'Sauvegarder les fichiers', 'ntfarchive' : 'Création de l\'archive', 'ntfextract' : 'Extraction des fichiers de l\'archive', 'ntfsearch' : 'Recherche des fichiers', 'ntfresize' : 'Redimensionner les images', 'ntfsmth' : 'Fait quelque chose', 'ntfloadimg' : 'Chargement de l\'image', 'ntfnetmount' : 'Monte le volume réseau', // added 18.04.2012 'ntfnetunmount': 'Démonte le volume réseau', // from v2.1 added 30.04.2012 'ntfdim' : 'Calcule la dimension de l\'image', // added 20.05.2013 'ntfreaddir' : 'Lecture des informations du dossier', // from v2.1 added 01.07.2013 'ntfurl' : 'Récupération de l’URL du lien', // from v2.1 added 11.03.2014 'ntfchmod' : 'Changement de mode', // from v2.1 added 20.6.2015 'ntfpreupload': 'Vérification du nom du fichier envoyé', // from v2.1 added 31.11.2015 'ntfzipdl' : 'Création d’un fichier pour le téléchargement', // from v2.1.7 added 23.1.2016 'ntfparents' : 'Traitement de l\'information du chemin', // from v2.1.17 added 2.11.2016 'ntfchunkmerge': 'Traitement du fichier envoyé', // from v2.1.17 added 2.11.2016 'ntftrash' : 'Mettre à la corbeille', // from v2.1.24 added 2.5.2017 'ntfrestore' : 'Restaurer depuis la corbeille', // from v2.1.24 added 3.5.2017 'ntfchkdir' : 'Validation du dossier de destination', // from v2.1.24 added 3.5.2017 'ntfundo' : 'Annuler l\'opération précédente', // from v2.1.27 added 31.07.2017 'ntfredo' : 'Refaire l\'opération annulée', // from v2.1.27 added 31.07.2017 'ntfchkcontent' : 'Vérification du contenu', // from v2.1.41 added 3.8.2018 /*********************************** volumes *********************************/ 'volume_Trash' : 'Corbeille', //from v2.1.24 added 29.4.2017 /************************************ dates **********************************/ 'dateUnknown' : 'Inconnue', 'Today' : 'Aujourd\'hui', 'Yesterday' : 'Hier', 'msJan' : 'Jan', 'msFeb' : 'Fév', 'msMar' : 'Mar', 'msApr' : 'Avr', 'msMay' : 'Mai', 'msJun' : 'Jun', 'msJul' : 'Jul', 'msAug' : 'Aoû', 'msSep' : 'Sep', 'msOct' : 'Oct', 'msNov' : 'Nov', 'msDec' : 'Déc', 'January' : 'Janvier', 'February' : 'Février', 'March' : 'Mars', 'April' : 'Avril', 'May' : 'Mai', 'June' : 'Juin', 'July' : 'Juillet', 'August' : 'Août', 'September' : 'Septembre', 'October' : 'Octobre', 'November' : 'Novembre', 'December' : 'Décembre', 'Sunday' : 'Dimanche', 'Monday' : 'Lundi', 'Tuesday' : 'Mardi', 'Wednesday' : 'Mercredi', 'Thursday' : 'Jeudi', 'Friday' : 'Vendredi', 'Saturday' : 'Samedi', 'Sun' : 'Dim', 'Mon' : 'Lun', 'Tue' : 'Mar', 'Wed' : 'Mer', 'Thu' : 'Jeu', 'Fri' : 'Ven', 'Sat' : 'Sam', /******************************** sort variants ********************************/ 'sortname' : 'par nom', 'sortkind' : 'par type', 'sortsize' : 'par taille', 'sortdate' : 'par date', 'sortFoldersFirst' : 'Dossiers en premier', 'sortperm' : 'par permission', // from v2.1.13 added 13.06.2016 'sortmode' : 'par mode', // from v2.1.13 added 13.06.2016 'sortowner' : 'par propriétaire', // from v2.1.13 added 13.06.2016 'sortgroup' : 'par groupe', // from v2.1.13 added 13.06.2016 'sortAlsoTreeview' : 'Egalement arborescence', // from v2.1.15 added 01.08.2016 /********************************** new items **********************************/ 'untitled file.txt' : 'NouveauFichier.txt', // added 10.11.2015 'untitled folder' : 'NouveauDossier', // added 10.11.2015 'Archive' : 'NouvelleArchive', // from v2.1 added 10.11.2015 'untitled file' : 'NewFile.$1', // from v2.1.41 added 6.8.2018 'extentionfile' : '$1: Fichier', // from v2.1.41 added 6.8.2018 'extentiontype' : '$1: $2', // from v2.1.43 added 17.10.2018 /********************************** messages **********************************/ 'confirmReq' : 'Confirmation requise', 'confirmRm' : 'Êtes-vous certain de vouloir supprimer les éléments ?
          Cela ne peut être annulé !', 'confirmRepl' : 'Remplacer l\'ancien fichier par le nouveau ?', 'confirmRest' : 'Remplacer l\'élément existant par l\'élément de la corbeille ?', // fromv2.1.24 added 5.5.2017 'confirmConvUTF8' : 'L\'encodage n\'est pas UTf-8
          Convertir en UTF-8 ?
          Les contenus deviendront UTF-8 en sauvegardant après la conversion.', // from v2.1 added 08.04.2014 'confirmNonUTF8' : 'Impossible de détecter l\'encodage de ce fichier. Pour être modifié, il doit être temporairement convertit en UTF-8.
          Veuillez s\'il vous plaît sélectionner un encodage pour ce fichier.', // from v2.1.19 added 28.11.2016 'confirmNotSave' : 'Ce fichier a été modifié.
          Les données seront perdues si les changements ne sont pas sauvegardés.', // from v2.1 added 15.7.2015 'confirmTrash' : 'Êtes-vous certain de vouloir déplacer les éléments vers la corbeille?', //from v2.1.24 added 29.4.2017 'confirmMove' : 'Etes-vous sûr de vouloir déplacer ces éléments vers "$1"?', //from v2.1.50 added 27.7.2019 'apllyAll' : 'Appliquer à tous', 'name' : 'Nom', 'size' : 'Taille', 'perms' : 'Permissions', 'modify' : 'Modifié', 'kind' : 'Type', 'read' : 'Lecture', 'write' : 'Écriture', 'noaccess' : 'Pas d\'accès', 'and' : 'et', 'unknown' : 'inconnu', 'selectall' : 'Sélectionner tous les éléments', 'selectfiles' : 'Sélectionner le(s) élément(s)', 'selectffile' : 'Sélectionner le premier élément', 'selectlfile' : 'Sélectionner le dernier élément', 'viewlist' : 'Vue par liste', 'viewicons' : 'Vue par icônes', 'viewSmall' : 'Petites icônes', // from v2.1.39 added 22.5.2018 'viewMedium' : 'Moyennes icônes', // from v2.1.39 added 22.5.2018 'viewLarge' : 'Grandes icônes', // from v2.1.39 added 22.5.2018 'viewExtraLarge' : 'Très grandes icônes', // from v2.1.39 added 22.5.2018 'places' : 'Favoris', 'calc' : 'Calculer', 'path' : 'Chemin', 'aliasfor' : 'Raccourcis pour', 'locked' : 'Verrouiller', 'dim' : 'Dimensions', 'files' : 'Fichiers', 'folders' : 'Dossiers', 'items' : 'Éléments', 'yes' : 'oui', 'no' : 'non', 'link' : 'Lien', 'searcresult' : 'Résultats de la recherche', 'selected' : 'Éléments sélectionnés', 'about' : 'À propos', 'shortcuts' : 'Raccourcis', 'help' : 'Aide', 'webfm' : 'Gestionnaire de fichier Web', 'ver' : 'Version', 'protocolver' : 'Version du protocole', 'homepage' : 'Page du projet', 'docs' : 'Documentation', 'github' : 'Forkez-nous sur Github', 'twitter' : 'Suivez nous sur Twitter', 'facebook' : 'Joignez-nous sur Facebook', 'team' : 'Équipe', 'chiefdev' : 'Développeur en chef', 'developer' : 'Développeur', 'contributor' : 'Contributeur', 'maintainer' : 'Mainteneur', 'translator' : 'Traducteur', 'icons' : 'Icônes', 'dontforget' : 'et n\'oubliez pas votre serviette', 'shortcutsof' : 'Raccourcis désactivés', 'dropFiles' : 'Déposez les fichiers ici', 'or' : 'ou', 'selectForUpload' : 'Sélectionner les fichiers à envoyer', 'moveFiles' : 'Déplacer les éléments', 'copyFiles' : 'Copier les éléments', 'restoreFiles' : 'Restaurer les éléments', // from v2.1.24 added 5.5.2017 'rmFromPlaces' : 'Retirer des favoris', 'aspectRatio' : 'Ratio d’affichage', 'scale' : 'Mise à l\'échelle', 'width' : 'Largeur', 'height' : 'Hauteur', 'resize' : 'Redimensionner', 'crop' : 'Recadrer', 'rotate' : 'Rotation', 'rotate-cw' : 'Rotation de 90 degrés horaire', 'rotate-ccw' : 'Rotation de 90 degrés antihoraire', 'degree' : '°', 'netMountDialogTitle' : 'Monter un volume réseau', // added 18.04.2012 'protocol' : 'Protocole', // added 18.04.2012 'host' : 'Hôte', // added 18.04.2012 'port' : 'Port', // added 18.04.2012 'user' : 'Utilisateur', // added 18.04.2012 'pass' : 'Mot de passe', // added 18.04.2012 'confirmUnmount' : 'Démonter $1?', // from v2.1 added 30.04.2012 'dropFilesBrowser': 'Glissez-déposez depuis le navigateur de fichier', // from v2.1 added 30.05.2012 'dropPasteFiles' : 'Glissez-déposez les fichiers ici', // from v2.1 added 07.04.2014 'encoding' : 'Encodage', // from v2.1 added 19.12.2014 'locale' : 'Encodage régional', // from v2.1 added 19.12.2014 'searchTarget' : 'Destination: $1', // from v2.1 added 22.5.2015 'searchMime' : 'Recherche par type MIME', // from v2.1 added 22.5.2015 'owner' : 'Propriétaire', // from v2.1 added 20.6.2015 'group' : 'Groupe', // from v2.1 added 20.6.2015 'other' : 'Autre', // from v2.1 added 20.6.2015 'execute' : 'Exécuter', // from v2.1 added 20.6.2015 'perm' : 'Permission', // from v2.1 added 20.6.2015 'mode' : 'Mode', // from v2.1 added 20.6.2015 'emptyFolder' : 'Le dossier est vide', // from v2.1.6 added 30.12.2015 'emptyFolderDrop' : 'Le dossier est vide.\\ Glissez-déposez pour ajouter des éléments.', // from v2.1.6 added 30.12.2015 'emptyFolderLTap' : 'Le dossier est vide.\\ Appuyez longuement pour ajouter des éléments.', // from v2.1.6 added 30.12.2015 'quality' : 'Qualité', // from v2.1.6 added 5.1.2016 'autoSync' : 'Synchronisation automatique', // from v2.1.6 added 10.1.2016 'moveUp' : 'Déplacer vers le haut', // from v2.1.6 added 18.1.2016 'getLink' : 'Obtenir le lien d’URL', // from v2.1.7 added 9.2.2016 'selectedItems' : 'Éléments sélectionnés ($1)', // from v2.1.7 added 2.19.2016 'folderId' : 'ID du dossier', // from v2.1.10 added 3.25.2016 'offlineAccess' : 'Permettre l\'accès hors-ligne', // from v2.1.10 added 3.25.2016 'reAuth' : 'Pour se réauthentifier', // from v2.1.10 added 3.25.2016 'nowLoading' : 'En cours de chargement...', // from v2.1.12 added 4.26.2016 'openMulti' : 'Ouvrir multiples fichiers', // from v2.1.12 added 5.14.2016 'openMultiConfirm': 'Vous allez ouvrir $1 fichiers. Êtes-vous sûr de vouloir les ouvrir dans le navigateur ?', // from v2.1.12 added 5.14.2016 'emptySearch' : 'Aucun résultat trouvé avec les paramètres de recherche.', // from v2.1.12 added 5.16.2016 'editingFile' : 'Modification d\'un fichier.', // from v2.1.13 added 6.3.2016 'hasSelected' : 'Vous avez sélectionné $1 éléments.', // from v2.1.13 added 6.3.2016 'hasClipboard' : 'Vous avez $1 éléments dans le presse-papier.', // from v2.1.13 added 6.3.2016 'incSearchOnly' : 'Recherche incrémentale disponible uniquement pour la vue active.', // from v2.1.13 added 6.30.2016 'reinstate' : 'Rétablir', // from v2.1.15 added 3.8.2016 'complete' : '$1 complété', // from v2.1.15 added 21.8.2016 'contextmenu' : 'Menu contextuel', // from v2.1.15 added 9.9.2016 'pageTurning' : 'Tourner la page', // from v2.1.15 added 10.9.2016 'volumeRoots' : 'Volumes principaux', // from v2.1.16 added 16.9.2016 'reset' : 'Réinitialiser', // from v2.1.16 added 1.10.2016 'bgcolor' : 'Couleur de fond', // from v2.1.16 added 1.10.2016 'colorPicker' : 'Sélecteur de couleur', // from v2.1.16 added 1.10.2016 '8pxgrid' : 'Grille 8px', // from v2.1.16 added 4.10.2016 'enabled' : 'Actif', // from v2.1.16 added 4.10.2016 'disabled' : 'Inactif', // from v2.1.16 added 4.10.2016 'emptyIncSearch' : 'Aucun résultat trouvé.\\Appuyez sur [Entrée] pour développer la cible de recherche.', // from v2.1.16 added 5.10.2016 'emptyLetSearch' : 'Aucun résultat trouvé pour la recherche par première lettre.', // from v2.1.23 added 24.3.2017 'textLabel' : 'Label texte', // from v2.1.17 added 13.10.2016 'minsLeft' : '$1 mins restantes', // from v2.1.17 added 13.11.2016 'openAsEncoding' : 'Réouvrir avec l\'encodage sélectionné', // from v2.1.19 added 2.12.2016 'saveAsEncoding' : 'Sauvegarder avec l\'encodage sélectionné', // from v2.1.19 added 2.12.2016 'selectFolder' : 'Choisir le dossier', // from v2.1.20 added 13.12.2016 'firstLetterSearch': 'Recherche par première lettre', // from v2.1.23 added 24.3.2017 'presets' : 'Présélections', // from v2.1.25 added 26.5.2017 'tooManyToTrash' : 'Impossible de mettre autant d\'éléments à la corbeille.', // from v2.1.25 added 9.6.2017 'TextArea' : 'Zone de texte', // from v2.1.25 added 14.6.2017 'folderToEmpty' : 'Vider le dossier "$1".', // from v2.1.25 added 22.6.2017 'filderIsEmpty' : 'Il n\'y a pas d\'élément dans le dossier "$1".', // from v2.1.25 added 22.6.2017 'preference' : 'Préférences', // from v2.1.26 added 28.6.2017 'language' : 'Configuration de langue', // from v2.1.26 added 28.6.2017 'clearBrowserData': 'Initialisation des configurations sauvegardées dans ce navigateur', // from v2.1.26 added 28.6.2017 'toolbarPref' : 'Paramètres de la barre d\'outils', // from v2.1.27 added 2.8.2017 'charsLeft' : '... $1 caractère(s) restant(s).', // from v2.1.29 added 30.8.2017 'linesLeft' : '... $1 ligne(s) restante(s).', // from v2.1.52 added 16.1.2020 'sum' : 'Somme', // from v2.1.29 added 28.9.2017 'roughFileSize' : 'Taille de fichier brute', // from v2.1.30 added 2.11.2017 'autoFocusDialog' : 'Concentrez-vous sur l\'élément de dialogue avec le survol de la souris', // from v2.1.30 added 2.11.2017 'select' : 'Sélectionner', // from v2.1.30 added 23.11.2017 'selectAction' : 'Action lors de la sélection d\'un fichier', // from v2.1.30 added 23.11.2017 'useStoredEditor' : 'Ouvrir avec le dernier éditeur utilisé', // from v2.1.30 added 23.11.2017 'selectinvert' : 'Inverser la sélection', // from v2.1.30 added 25.11.2017 'renameMultiple' : 'Êtes-vous sûr de vouloir renommer les éléments sélectionnés $1 en $2 ?
          L\'action est définitive !', // from v2.1.31 added 4.12.2017 'batchRename' : 'Renommer le Batch', // from v2.1.31 added 8.12.2017 'plusNumber' : '+ Nombre', // from v2.1.31 added 8.12.2017 'asPrefix' : 'Ajouter un préfixe', // from v2.1.31 added 8.12.2017 'asSuffix' : 'Ajouter un suffixe', // from v2.1.31 added 8.12.2017 'changeExtention' : 'Modifier l\'extention', // from v2.1.31 added 8.12.2017 'columnPref' : 'Paramètres des colonnes (List view)', // from v2.1.32 added 6.2.2018 'reflectOnImmediate' : 'Les changements seront immédiatement appliqués à l\'archive.', // from v2.1.33 added 2.3.2018 'reflectOnUnmount' : 'Aucun changement ne sera appliqué tant que ce volume n\'a pas été démonté.', // from v2.1.33 added 2.3.2018 'unmountChildren' : 'Le(s) volume(s) suivant(s) montés sur ce volume seront également démontés. Êtes-vous sûr de vouloir le démonter ?', // from v2.1.33 added 5.3.2018 'selectionInfo' : 'Informations sur la sélection', // from v2.1.33 added 7.3.2018 'hashChecker' : 'Algorithme de hachage de fichier', // from v2.1.33 added 10.3.2018 'infoItems' : 'Éléments d\'information (panneau de sélection d\'informations )', // from v2.1.38 added 28.3.2018 'pressAgainToExit': 'Appuyez à nouveau pour quitter.', // from v2.1.38 added 1.4.2018 'toolbar' : 'Barre d\'outils', // from v2.1.38 added 4.4.2018 'workspace' : 'Espace de travail', // from v2.1.38 added 4.4.2018 'dialog' : 'Dialogue', // from v2.1.38 added 4.4.2018 'all' : 'Tout', // from v2.1.38 added 4.4.2018 'iconSize' : 'Dimensions de l\'icône (Aperçu)', // from v2.1.39 added 7.5.2018 'editorMaximized' : 'Ouvrir la fenêtre d\'édition à la taille maximale', // from v2.1.40 added 30.6.2018 'editorConvNoApi' : 'Étant donné que la conversion par API n\'est pas disponible actuellement, veuillez effectuer la conversion sur le site Web.', //from v2.1.40 added 8.7.2018 'editorConvNeedUpload' : 'Après la conversion, vous devez ajouter l\'URL de l\'élément ou un fichier téléchargé pour enregistrer le fichier converti.', //from v2.1.40 added 8.7.2018 'convertOn' : 'Convertir sur le site de $1', // from v2.1.40 added 10.7.2018 'integrations' : 'Intégrations', // from v2.1.40 added 11.7.2018 'integrationWith' : 'Cet elFinder intègre les services externes suivants. Veuillez vérifier les conditions d\'utilisation, la politique de confidentialité, etc. avant de l\'utiliser.', // from v2.1.40 added 11.7.2018 'showHidden' : 'Afficher les élément cachés', // from v2.1.41 added 24.7.2018 'hideHidden' : 'Ne pas afficher les élément cachés', // from v2.1.41 added 24.7.2018 'toggleHidden' : 'Afficher/Cacher les éléments cachés', // from v2.1.41 added 24.7.2018 'makefileTypes' : 'Type de ficher autorisé avec "Nouveau fichier"', // from v2.1.41 added 7.8.2018 'typeOfTextfile' : 'Type du fichier de texte', // from v2.1.41 added 7.8.2018 'add' : 'Ajouter', // from v2.1.41 added 7.8.2018 'theme' : 'Thème', // from v2.1.43 added 19.10.2018 'default' : 'Par Défaut', // from v2.1.43 added 19.10.2018 'description' : 'Description', // from v2.1.43 added 19.10.2018 'website' : 'Site Web', // from v2.1.43 added 19.10.2018 'author' : 'Aauteur', // from v2.1.43 added 19.10.2018 'email' : 'E-mail', // from v2.1.43 added 19.10.2018 'license' : 'License', // from v2.1.43 added 19.10.2018 'exportToSave' : 'Cet élément ne peut être enregistrer. Pour éviter de perdre les modifications, vous devez exporter vers votre ordinateur.', // from v2.1.44 added 1.12.2018 'dblclickToSelect': 'Double-cliquez sur le fichier pour le sélectionner.', // from v2.1.47 added 22.1.2019 'useFullscreen' : 'Utiliser le mode plein écran', // from v2.1.47 added 19.2.2019 /********************************** mimetypes **********************************/ 'kindUnknown' : 'Inconnu', 'kindRoot' : 'Volume principal', // from v2.1.16 added 16.10.2016 'kindFolder' : 'Dossier', 'kindSelects' : 'Sélections', // from v2.1.29 added 29.8.2017 'kindAlias' : 'Raccourci', 'kindAliasBroken' : 'Raccourci cassé', // applications 'kindApp' : 'Application', 'kindPostscript' : 'Document Postscript', 'kindMsOffice' : 'Document Microsoft Office', 'kindMsWord' : 'Document Microsoft Word', 'kindMsExcel' : 'Document Microsoft Excel', 'kindMsPP' : 'Présentation Microsoft PowerPoint', 'kindOO' : 'Document OpenOffice', 'kindAppFlash' : 'Application Flash', 'kindPDF' : 'Format de document portable (PDF)', 'kindTorrent' : 'Fichier BitTorrent', 'kind7z' : 'Archive 7z', 'kindTAR' : 'Archive TAR', 'kindGZIP' : 'Archive GZIP', 'kindBZIP' : 'Archive BZIP', 'kindXZ' : 'Archive XZ', 'kindZIP' : 'Archive ZIP', 'kindRAR' : 'Archive RAR', 'kindJAR' : 'Fichier Java JAR', 'kindTTF' : 'Police True Type', 'kindOTF' : 'Police Open Type', 'kindRPM' : 'Package RPM', // fonts 'kindFont' : 'Police', 'kindSFNT' : 'Police font', 'kindEOT' : 'Police Embedded Open Type', 'kindWOFF' : 'Police Web Open Font Format', 'kindWOFF2' : 'Police Web Open Font Format 2', // texts 'kindText' : 'Document Text', 'kindTextPlain' : 'Texte non formaté', 'kindPHP' : 'Source PHP', 'kindCSS' : 'Feuille de style en cascade', 'kindHTML' : 'Document HTML', 'kindJS' : 'Source JavaScript', 'kindRTF' : 'Format de texte enrichi (Rich Text Format)', 'kindC' : 'Source C', 'kindCHeader' : 'Source header C', 'kindCPP' : 'Source C++', 'kindCPPHeader' : 'Source header C++', 'kindShell' : 'Shell script Unix', 'kindPython' : 'Source Python', 'kindJava' : 'Source Java', 'kindRuby' : 'Source Ruby', 'kindPerl' : 'Script Perl', 'kindSQL' : 'Source SQL', 'kindXML' : 'Document XML', 'kindAWK' : 'Source AWK', 'kindCSV' : 'CSV', 'kindDOCBOOK' : 'Document Docbook XML', 'kindMarkdown' : 'Markdown text', // added 20.7.2015 // images 'kindImage' : 'Image', 'kindBMP' : 'Image BMP', 'kindJPEG' : 'Image JPEG', 'kindGIF' : 'Image GIF', 'kindPNG' : 'Image PNG', 'kindTIFF' : 'Image TIFF', 'kindTGA' : 'Image TGA', 'kindPSD' : 'Image Adobe Photoshop', 'kindXBITMAP' : 'Image X bitmap', 'kindPXM' : 'Image Pixelmator', // media 'kindAudio' : 'Son', 'kindAudioMPEG' : 'Son MPEG', 'kindAudioMPEG4' : 'Son MPEG-4', 'kindAudioMIDI' : 'Son MIDI', 'kindAudioOGG' : 'Son Ogg Vorbis', 'kindAudioWAV' : 'Son WAV', 'AudioPlaylist' : 'Liste de lecture audio', 'kindVideo' : 'Vidéo', 'kindVideoDV' : 'Vidéo DV', 'kindVideoMPEG' : 'Vidéo MPEG', 'kindVideoMPEG4' : 'Vidéo MPEG-4', 'kindVideoAVI' : 'Vidéo AVI', 'kindVideoMOV' : 'Vidéo Quick Time', 'kindVideoWM' : 'Vidéo Windows Media', 'kindVideoFlash' : 'Vidéo Flash', 'kindVideoMKV' : 'Vidéo Matroska', 'kindVideoOGG' : 'Vidéo Ogg' } }; })); PK!™å—ä‡ä‡@file-manager-advanced/application/library/js/i18n/elfinder.de.jsnu„[µü¤/** * German Translation / Deutsche Übersetzung * @author JPG & Mace * @author tora60 from pragmaMx.org * @author Timo-Linde * @author OSWorX * @author Maximilian Schwarz * @author SF Webdesign * @version 2019-12-13 */ (function(root, factory) { if (typeof define === 'function' && define.amd) { define(['elfinder'], factory); } else if (typeof exports !== 'undefined') { module.exports = factory(require('elfinder')); } else { factory(root.elFinder); } }(this, function(elFinder) { elFinder.prototype.i18.de = { translator : 'JPG & Mace <dev@flying-datacenter.de>, tora60 from pragmaMx.org, Timo-Linde <info@timo-linde.de>, OSWorX <info@osworx.net>, Maximilian Schwarz <info@deefuse.de>, SF Webdesign <webdesign@stephan-frank.de>', language : 'Deutsch', direction : 'ltr', dateFormat : 'j. F Y H:i', // 3. März 2020 14:58 fancyDateFormat : '$1 H:i', // will produce smth like: Today 12:25 PM nonameDateFormat : 'ymd-His', // to apply if upload file is noname: 120513172700 messages : { /********************************** errors **********************************/ 'error' : 'Fehler', 'errUnknown' : 'Unbekannter Fehler.', 'errUnknownCmd' : 'Unbekannter Befehl.', 'errJqui' : 'Ungültige jQuery UI-Konfiguration. Die Komponenten Selectable, Draggable und Droppable müssen inkludiert sein.', 'errNode' : 'Für elFinder muss das DOM-Element erstellt werden.', 'errURL' : 'Ungültige elFinder-Konfiguration! Die URL-Option ist nicht gesetzt.', 'errAccess' : 'Zugriff verweigert.', 'errConnect' : 'Verbindung zum Backend fehlgeschlagen.', 'errAbort' : 'Verbindung abgebrochen.', 'errTimeout' : 'Zeitüberschreitung der Verbindung.', 'errNotFound' : 'Backend nicht gefunden.', 'errResponse' : 'Ungültige Backend-Antwort.', 'errConf' : 'Ungültige Backend-Konfiguration.', 'errJSON' : 'PHP JSON-Modul nicht vorhanden.', 'errNoVolumes' : 'Keine lesbaren Laufwerke vorhanden.', 'errCmdParams' : 'Ungültige Parameter für Befehl: "$1".', 'errDataNotJSON' : 'Daten nicht im JSON-Format.', 'errDataEmpty' : 'Daten sind leer.', 'errCmdReq' : 'Backend-Anfrage benötigt Befehl.', 'errOpen' : 'Kann "$1" nicht öffnen.', 'errNotFolder' : 'Objekt ist kein Ordner.', 'errNotFile' : 'Objekt ist keine Datei.', 'errRead' : 'Kann "$1" nicht öffnen.', 'errWrite' : 'Kann nicht in "$1" schreiben.', 'errPerm' : 'Zugriff verweigert.', 'errLocked' : '"$1" ist gesperrt und kann nicht umbenannt, verschoben oder gelöscht werden.', 'errExists' : 'Die Datei "$1" existiert bereits.', 'errInvName' : 'Ungültiger Dateiname.', 'errInvDirname' : 'Ungültiger Ordnername.', // from v2.1.24 added 12.4.2017 'errFolderNotFound' : 'Ordner nicht gefunden.', 'errFileNotFound' : 'Datei nicht gefunden.', 'errTrgFolderNotFound' : 'Zielordner "$1" nicht gefunden.', 'errPopup' : 'Der Browser hat das Pop-Up-Fenster unterbunden. Um die Datei zu öffnen, Pop-Ups in den Browsereinstellungen aktivieren.', 'errMkdir' : 'Kann Ordner "$1" nicht erstellen.', 'errMkfile' : 'Kann Datei "$1" nicht erstellen.', 'errRename' : 'Kann "$1" nicht umbenennen.', 'errCopyFrom' : 'Kopieren von Dateien von "$1" nicht erlaubt.', 'errCopyTo' : 'Kopieren von Dateien nach "$1" nicht erlaubt.', 'errMkOutLink' : 'Der Link kann nicht außerhalb der Partition führen.', // from v2.1 added 03.10.2015 'errUpload' : 'Upload-Fehler.', // old name - errUploadCommon 'errUploadFile' : 'Kann "$1" nicht hochladen.', // old name - errUpload 'errUploadNoFiles' : 'Keine Dateien zum Hochladen gefunden.', 'errUploadTotalSize' : 'Gesamtgröße überschreitet die Maximalgröße.', // old name - errMaxSize 'errUploadFileSize' : 'Die Datei überschreitet die Maximalgröße.', // old name - errFileMaxSize 'errUploadMime' : 'Dateiart (mime) nicht zulässig.', 'errUploadTransfer' : '"$1" Übertragungsfehler.', 'errUploadTemp' : 'Kann temporäre Datei nicht erstellen.', // from v2.1 added 26.09.2015 'errNotReplace' : 'Das Objekt "$1" existiert bereits an dieser Stelle und kann nicht durch ein Objekt eines anderen Typs ersetzt werden.', // new 'errReplace' : 'Kann "$1" nicht ersetzen.', 'errSave' : 'Kann "$1" nicht speichern.', 'errCopy' : 'Kann "$1" nicht kopieren.', 'errMove' : 'Kann "$1" nicht verschieben.', 'errCopyInItself' : '"$1" kann sich nicht in sich selbst kopieren.', 'errRm' : 'Kann "$1" nicht entfernen.', 'errTrash' : 'Kann Objekt nicht in Mülleimer legen.', // from v2.1.24 added 30.4.2017 'errRmSrc' : 'Kann Quelldatei(en) nicht entfernen.', 'errExtract' : 'Kann "$1" nicht entpacken.', 'errArchive' : 'Archiv konnte nicht erstellt werden.', 'errArcType' : 'Archivtyp nicht untersützt.', 'errNoArchive' : 'Bei der Datei handelt es sich nicht um ein Archiv, oder die Archivart wird nicht unterstützt.', 'errCmdNoSupport' : 'Das Backend unterstützt diesen Befehl nicht.', 'errReplByChild' : 'Der Ordner "$1" kann nicht durch etwas ersetzt werden, das ihn selbst enthält.', 'errArcSymlinks' : 'Aus Sicherheitsgründen ist es verboten, ein Archiv mit symbolischen Links zu extrahieren.', // edited 24.06.2012 'errArcMaxSize' : 'Die Archivdateien übersteigen die maximal erlaubte Größe.', 'errResize' : 'Größe von "$1" kann nicht geändert werden.', 'errResizeDegree' : 'Ungültiger Rotationswert.', // added 7.3.2013 'errResizeRotate' : 'Bild konnte nicht gedreht werden.', // added 7.3.2013 'errResizeSize' : 'Ungültige Bildgröße.', // added 7.3.2013 'errResizeNoChange' : 'Bildmaße nicht geändert.', // added 7.3.2013 'errUsupportType' : 'Nicht unterstützte Dateiart.', 'errNotUTF8Content' : 'Die Datei "$1" ist nicht im UTF-8-Format und kann nicht bearbeitet werden.', // added 9.11.2011 'errNetMount' : 'Verbindung mit "$1" nicht möglich.', // added 17.04.2012 'errNetMountNoDriver' : 'Nicht unterstütztes Protokoll.', // added 17.04.2012 'errNetMountFailed' : 'Verbindung fehlgeschlagen.', // added 17.04.2012 'errNetMountHostReq' : 'Host benötigt.', // added 18.04.2012 'errSessionExpires' : 'Diese Sitzung ist aufgrund von Inaktivität abgelaufen.', 'errCreatingTempDir' : 'Erstellung des temporären Ordners nicht möglich: "$1"', 'errFtpDownloadFile' : 'Download der Datei über FTP nicht möglich: "$1"', 'errFtpUploadFile' : 'Upload der Datei zu FTP nicht möglich: "$1"', 'errFtpMkdir' : 'Erstellung des Remote-Ordners mit FTP nicht möglich: "$1"', 'errArchiveExec' : 'Fehler beim Archivieren der Dateien: "$1"', 'errExtractExec' : 'Fehler beim Extrahieren der Dateien: "$1"', 'errNetUnMount' : 'Kann nicht ausgehängt werden.', // from v2.1 added 30.04.2012 'errConvUTF8' : 'Kann nicht zu UTF-8 konvertiert werden.', // from v2.1 added 08.04.2014 'errFolderUpload' : 'Ordner kann nich hochladen werden, eventuell mit Google Chrome versuchen.', // from v2.1 added 26.6.2015 'errSearchTimeout' : 'Zeitüberschreitung während der Suche nach "$1". Suchergebnis ist unvollständig.', // from v2.1 added 12.1.2016 'errReauthRequire' : 'Erneutes Anmelden ist erforderlich.', // from v2.1.10 added 24.3.2016 'errMaxTargets' : 'Die maximale Anzahl auswählbarer Elemente ist $1', // from v2.1.17 added 17.10.2016 'errRestore' : 'Datei konnte nicht aus Mülleimer wieder hergestellt werden bzw. Ziel für Wiederherstellung nicht gefunden.', // from v2.1.24 added 3.5.2017 'errEditorNotFound' : 'Kein Editor für diesen Dateityp gefunden.', // from v2.1.25 added 23.5.2017 'errServerError' : 'Ein serverseitiger Fehler trat auf.', // from v2.1.25 added 16.6.2017 'errEmpty' : 'Konnte Ordner "$1" nicht Leeren.', // from v2.1.25 added 22.6.2017 'moreErrors' : 'Es sind noch $1 weitere Fehler.', // from v2.1.44 added 13.12.2019 /******************************* commands names ********************************/ 'cmdarchive' : 'Archiv erstellen', 'cmdback' : 'Zurück', 'cmdcopy' : 'Kopieren', 'cmdcut' : 'Ausschneiden', 'cmddownload' : 'Herunterladen', 'cmdduplicate' : 'Duplizieren', 'cmdedit' : 'Datei bearbeiten', 'cmdextract' : 'Archiv entpacken', 'cmdforward' : 'Vorwärts', 'cmdgetfile' : 'Datei auswählen', 'cmdhelp' : 'Über diese Software', 'cmdhome' : 'Startordner', 'cmdinfo' : 'Informationen', 'cmdmkdir' : 'Neuer Ordner', 'cmdmkdirin' : 'In neuen Ordner', // from v2.1.7 added 19.2.2016 'cmdmkfile' : 'Neuer Datei', 'cmdopen' : 'Öffnen', 'cmdpaste' : 'Einfügen', 'cmdquicklook' : 'Vorschau', 'cmdreload' : 'Aktualisieren', 'cmdrename' : 'Umbenennen', 'cmdrm' : 'Löschen', 'cmdtrash' : 'In den Mülleimer legen', //from v2.1.24 added 29.4.2017 'cmdrestore' : 'Wiederherstellen', //from v2.1.24 added 3.5.2017 'cmdsearch' : 'Suchen', 'cmdup' : 'In übergeordneten Ordner wechseln', 'cmdupload' : 'Datei hochladen', 'cmdview' : 'Ansehen', 'cmdresize' : 'Größe ändern & drehen', 'cmdsort' : 'Sortieren', 'cmdnetmount' : 'Verbinde mit Netzwerkspeicher', // added 18.04.2012 'cmdnetunmount': 'Abhängen', // from v2.1 added 30.04.2012 'cmdplaces' : 'Favoriten', // added 28.12.2014 'cmdchmod' : 'Berechtigung ändern', // from v2.1 added 20.6.2015 'cmdopendir' : 'Einen Ordner öffnen', // from v2.1 added 13.1.2016 'cmdcolwidth' : 'Spaltenbreite zurücksetzen', // from v2.1.13 added 12.06.2016 'cmdfullscreen': 'Vollbild', // from v2.1.15 added 03.08.2016 'cmdmove' : 'Verschieben', // from v2.1.15 added 21.08.2016 'cmdempty' : 'Ordner Leeren', // from v2.1.25 added 22.06.2017 'cmdundo' : 'Rückgängig', // from v2.1.27 added 31.07.2017 'cmdredo' : 'Wiederholen', // from v2.1.27 added 31.07.2017 'cmdpreference': 'Einstellungen', // from v2.1.27 added 03.08.2017 'cmdselectall' : 'Alle auswählen', // from v2.1.28 added 15.08.2017 'cmdselectnone': 'Keine auswählen', // from v2.1.28 added 15.08.2017 'cmdselectinvert': 'Auswahl rückgängig machen', // from v2.1.28 added 15.08.2017 'cmdopennew' : 'In neuem Fenster öffnen', // from v2.1.38 added 3.4.2018 'cmdhide' : 'Verstecken', // from v2.1.41 added 13.12.2019 /*********************************** buttons ***********************************/ 'btnClose' : 'Schließen', 'btnSave' : 'Speichern', 'btnRm' : 'Entfernen', 'btnApply' : 'Anwenden', 'btnCancel' : 'Abbrechen', 'btnNo' : 'Nein', 'btnYes' : 'Ja', 'btnDiscard': 'Änderungen verwerfen', 'btnMount' : 'Verbinden', // added 18.04.2012 'btnApprove': 'Gehe zu $1 und genehmige', // from v2.1 added 26.04.2012 'btnUnmount': 'Auswerfen', // from v2.1 added 30.04.2012 'btnConv' : 'Konvertieren', // from v2.1 added 08.04.2014 'btnCwd' : 'Arbeitspfad', // from v2.1 added 22.5.2015 'btnVolume' : 'Partition', // from v2.1 added 22.5.2015 'btnAll' : 'Alle', // from v2.1 added 22.5.2015 'btnMime' : 'MIME-Typ', // from v2.1 added 22.5.2015 'btnFileName':'Dateiname', // from v2.1 added 22.5.2015 'btnSaveClose': 'Speichern & Schließen', // from v2.1 added 12.6.2015 'btnBackup' : 'Sicherung', // fromv2.1 added 28.11.2015 'btnRename' : 'Umbenennen', // from v2.1.24 added 6.4.2017 'btnRenameAll' : 'Alle Umbenennen', // from v2.1.24 added 6.4.2017 'btnPrevious' : 'Zurück ($1/$2)', // from v2.1.24 added 11.5.2017 'btnNext' : 'Weiter ($1/$2)', // from v2.1.24 added 11.5.2017 'btnSaveAs' : 'Speichern als', // from v2.1.25 added 24.5.2017 /******************************** notifications ********************************/ 'ntfopen' : 'Öffne Ordner', 'ntffile' : 'Öffne Datei', 'ntfreload' : 'Ordnerinhalt neu', 'ntfmkdir' : 'Erstelle Ordner', 'ntfmkfile' : 'Erstelle Dateien', 'ntfrm' : 'Lösche Dateien', 'ntfcopy' : 'Kopiere Dateien', 'ntfmove' : 'Verschiebe Dateien', 'ntfprepare' : 'Kopiervorgang initialisieren', 'ntfrename' : 'Benenne Dateien um', 'ntfupload' : 'Dateien hochladen', 'ntfdownload' : 'Dateien herunterladen', 'ntfsave' : 'Speichere Datei', 'ntfarchive' : 'Erstelle Archiv', 'ntfextract' : 'Entpacke Dateien', 'ntfsearch' : 'Suche', 'ntfresize' : 'Bildgrößen ändern', 'ntfsmth' : 'Bin beschäftigt ..', 'ntfloadimg' : 'Lade Bild ..', 'ntfnetmount' : 'Mit Netzwerkspeicher verbinden', // added 18.04.2012 'ntfnetunmount': 'Netzwerkspeicher auswerfen', // from v2.1 added 30.04.2012 'ntfdim' : 'Bildgröße erfassen', // added 20.05.2013 'ntfreaddir' : 'Lese Ordnerinformationen', // from v2.1 added 01.07.2013 'ntfurl' : 'Hole URL von Link', // from v2.1 added 11.03.2014 'ntfchmod' : 'Ändere Dateiberechtigungen', // from v2.1 added 20.6.2015 'ntfpreupload': 'Upload-Dateinamen überprüfen', // from v2.1 added 31.11.2015 'ntfzipdl' : 'Erstelle Datei zum Download', // from v2.1.7 added 23.1.2016 'ntfparents' : 'Beziehe Pfad Informationen', // from v2.1.17 added 2.11.2016 'ntfchunkmerge': 'Upload läuft', // from v2.1.17 added 2.11.2016 'ntftrash' : 'Bewege in den Mülleimer', // from v2.1.24 added 2.5.2017 'ntfrestore' : 'Wiederherstellung aus Mülleimer', // from v2.1.24 added 3.5.2017 'ntfchkdir' : 'Prüfe Zielordner', // from v2.1.24 added 3.5.2017 'ntfundo' : 'Vorherige Operation rückgängig machen', // from v2.1.27 added 31.07.2017 'ntfredo' : 'Wiederherstellen', // from v2.1.27 added 31.07.2017 'ntfchkcontent' : 'Überprüfe Inhalte', // from v2.1.41 added 13.12.2019 /*********************************** volumes *********************************/ 'volume_Trash' : 'Mülleimer', //from v2.1.24 added 29.4.2017 /************************************ dates **********************************/ 'dateUnknown' : 'unbekannt', 'Today' : 'Heute', 'Yesterday' : 'Gestern', 'msJan' : 'Jan', 'msFeb' : 'Feb', 'msMar' : 'Mär', 'msApr' : 'Apr', 'msMay' : 'Mai', 'msJun' : 'Jun', 'msJul' : 'Jul', 'msAug' : 'Aug', 'msSep' : 'Sep', 'msOct' : 'Okt', 'msNov' : 'Nov', 'msDec' : 'Dez', 'January' : 'Januar', 'February' : 'Februar', 'March' : 'März', 'April' : 'April', 'May' : 'Mai', 'June' : 'Juni', 'July' : 'Juli', 'August' : 'August', 'September' : 'September', 'October' : 'Oktober', 'November' : 'November', 'December' : 'Dezember', 'Sunday' : 'Sonntag', 'Monday' : 'Montag', 'Tuesday' : 'Dienstag', 'Wednesday' : 'Mittwoch', 'Thursday' : 'Donnerstag', 'Friday' : 'Freitag', 'Saturday' : 'Samstag', 'Sun' : 'So', 'Mon' : 'Mo', 'Tue' : 'Di', 'Wed' : 'Mi', 'Thu' : 'Do', 'Fri' : 'Fr', 'Sat' : 'Sa', /******************************** sort variants ********************************/ 'sortname' : 'nach Name', 'sortkind' : 'nach Art', 'sortsize' : 'nach Größe', 'sortdate' : 'nach Datum', 'sortFoldersFirst' : 'Ordner zuerst', 'sortperm' : 'nach Berechtigung', // from v2.1.13 added 13.06.2016 'sortmode' : 'nach Modus', // from v2.1.13 added 13.06.2016 'sortowner' : 'nach Besitzer', // from v2.1.13 added 13.06.2016 'sortgroup' : 'nach Gruppe', // from v2.1.13 added 13.06.2016 'sortAlsoTreeview' : 'auch Baumansicht', // from v2.1.15 added 01.08.2016 /********************************** new items **********************************/ 'untitled file.txt' : 'Neues Textdokument (.txt)', // added 10.11.2015 'untitled folder' : 'Neuer Ordner', // added 10.11.2015 'Archive' : 'Neues Archiv', // from v2.1 added 10.11.2015 'untitled file' : 'Neue Datei $1', // from v2.1.41 added 13.12.2019 'extentionfile' : '$1: Datei', // from v2.1.41 added 13.12.2019 'extentiontype' : '$1: $2', // from v2.1.43 added 13.12.2018 /********************************** messages **********************************/ 'confirmReq' : 'Bestätigung benötigt', 'confirmRm' : 'Sollen die Dateien gelöscht werden?
          Vorgang ist endgültig!', 'confirmRepl' : 'Datei ersetzen?', 'confirmRest' : 'Vorhandenes Element durch das Element aus Mülleimer ersetzen?', // fromv2.1.24 added 5.5.2017 'confirmConvUTF8' : 'Nicht UTF-8 kodiert
          Zu UTF-8 konvertieren?
          Inhalte werden zu UTF-8 konvertiert bei Speicherung.', // from v2.1 added 08.04.2014 'confirmNonUTF8' : 'Die Zeichencodierung dieser Datei konnte nicht erkannt werden. Es muss vorübergehend in UTF-8 zur Bearbeitung konvertiert werden.
          Bitte eine Zeichenkodierung dieser Datei auswählen.', // from v2.1.19 added 28.11.2016 'confirmNotSave' : 'Die Datei wurde geändert.
          Änderungen gehen verloren, wenn nicht gespeichert wird.', // from v2.1 added 15.7.2015 'confirmTrash' : 'Sicher diese Elemente in den Mülleimer verschieben?', // from v2.1.24 added 29.4.2017 'confirmMove' : 'Sicher alle Elemente nach "$1" verschieben?', // from v2.1.50 added 13.12.2019 'apllyAll' : 'Alles bestätigen', 'name' : 'Name', 'size' : 'Größe', 'perms' : 'Berechtigungen', 'modify' : 'Geändert', 'kind' : 'Typ', 'read' : 'Lesen', 'write' : 'Schreiben', 'noaccess' : 'Kein Zugriff', 'and' : 'und', 'unknown' : 'unbekannt', 'selectall' : 'Alle Dateien auswählen', 'selectfiles' : 'Dateien auswählen', 'selectffile' : 'Erste Datei auswählen', 'selectlfile' : 'Letzte Datei auswählen', 'viewlist' : 'Spaltenansicht', 'viewicons' : 'Symbolansicht', 'viewSmall' : 'Kleine Icons', // from v2.1.39 added 13.12.2019 'viewMedium' : 'Medium Icons', // from v2.1.39 added 13.12.2019 'viewLarge' : 'Große Icons', // from v2.1.39 added 13.12.2019 'viewExtraLarge' : 'Extragroße Icons', // from v2.1.39 added 13.12.2019 'places' : 'Favoriten', 'calc' : 'Berechne', 'path' : 'Pfad', 'aliasfor' : 'Verknüpfung zu', 'locked' : 'Gesperrt', 'dim' : 'Bildgröße', 'files' : 'Dateien', 'folders' : 'Ordner', 'items' : 'Objekte', 'yes' : 'ja', 'no' : 'nein', 'link' : 'Link', 'searcresult' : 'Suchergebnisse', 'selected' : 'Objekte ausgewählt', 'about' : 'Über', 'shortcuts' : 'Tastenkombinationen', 'help' : 'Hilfe', 'webfm' : 'Web-Dateiverwaltung', 'ver' : 'Version', 'protocolver' : 'Protokoll-Version', 'homepage' : 'Projekt-Webseite', 'docs' : 'Dokumentation', 'github' : 'Forke uns auf Github', 'twitter' : 'Folge uns auf twitter', 'facebook' : 'Begleite uns auf facebook', 'team' : 'Team', 'chiefdev' : 'Chefentwickler', 'developer' : 'Entwickler', 'contributor' : 'Unterstützer', 'maintainer' : 'Maintainer', 'translator' : 'Übersetzer', 'icons' : 'Icons', 'dontforget' : 'und vergiss nicht .. morgen ist auch noch ein Tag ..', 'shortcutsof' : 'Tastenkombinationen deaktiviert', 'dropFiles' : 'Dateien hier ablegen', 'or' : 'oder', 'selectForUpload' : 'Dateien zum Upload auswählen', 'moveFiles' : 'Dateien verschieben', 'copyFiles' : 'Dateien kopieren', 'restoreFiles' : 'Elemente wiederherstellen', // from v2.1.24 added 5.5.2017 'rmFromPlaces' : 'Lösche von Favoriten', 'aspectRatio' : 'Seitenverhältnis', 'scale' : 'Maßstab', 'width' : 'Breite', 'height' : 'Höhe', 'resize' : 'Größe ändern', 'crop' : 'Zuschneiden', 'rotate' : 'Drehen', 'rotate-cw' : 'Drehe 90° im Uhrzeigersinn', 'rotate-ccw' : 'Drehe 90° gegen Uhrzeigersinn', 'degree' : '°', 'netMountDialogTitle' : 'verbinde Netzwerkspeicher', // added 18.04.2012 'protocol' : 'Protokoll', // added 18.04.2012 'host' : 'Host', // added 18.04.2012 'port' : 'Port', // added 18.04.2012 'user' : 'Benutzer', // added 18.04.2012 'pass' : 'Passwort', // added 18.04.2012 'confirmUnmount' : 'Soll "$1" ausgehängt werden', // from v2.1 added 30.04.2012 'dropFilesBrowser': 'Dateien in den Browser ziehen', // from v2.1 added 30.05.2012 'dropPasteFiles' : 'Dateien hier loslassen', // from v2.1 added 07.04.2014 'encoding' : 'Kodierung', // from v2.1 added 19.12.2014 'locale' : 'Lokal', // from v2.1 added 19.12.2014 'searchTarget' : 'Ziel: $1', // from v2.1 added 22.5.2015 'searchMime' : 'Suche nach MIME-Typ', // from v2.1 added 22.5.2015 'owner' : 'Besitzer', // from v2.1 added 20.6.2015 'group' : 'Gruppe', // from v2.1 added 20.6.2015 'other' : 'Andere', // from v2.1 added 20.6.2015 'execute' : 'Ausführen', // from v2.1 added 20.6.2015 'perm' : 'Berechtigung', // from v2.1 added 20.6.2015 'mode' : 'Modus', // from v2.1 added 20.6.2015 'emptyFolder' : 'Der Ordner ist leer', // from v2.1.6 added 30.12.2015 'emptyFolderDrop' : 'Der Ordner ist leer\\A Elemente durch Ziehen hinzufügen', // from v2.1.6 added 30.12.2015 'emptyFolderLTap' : 'Der Ordner ist leer\\A Elemente durch langes Tippen hinzufügen', // from v2.1.6 added 30.12.2015 'quality' : 'Qualität', // from v2.1.6 added 5.1.2016 'autoSync' : 'Automatische Synchronisation', // from v2.1.6 added 10.1.2016 'moveUp' : 'Nach oben bewegen', // from v2.1.6 added 18.1.2016 'getLink' : 'URL-Link holen', // from v2.1.7 added 9.2.2016 'selectedItems' : 'Ausgewählte Objekte ($1)', // from v2.1.7 added 2.19.2016 'folderId' : 'Ordner-ID', // from v2.1.10 added 3.25.2016 'offlineAccess' : 'Offline-Zugriff erlauben', // from v2.1.10 added 3.25.2016 'reAuth' : 'Erneut anmelden', // from v2.1.10 added 3.25.2016 'nowLoading' : 'Wird geladen...', // from v2.1.12 added 4.26.2016 'openMulti' : 'mehrere Dateien öffnen', // from v2.1.12 added 5.14.2016 'openMultiConfirm': 'Es wird versucht die $1 Dateien zu öffnen .. sicher im Browser öffnen?', // from v2.1.12 added 5.14.2016 'emptySearch' : 'Kein Suchergebnis', // from v2.1.12 added 5.16.2016 'editingFile' : 'Datei wird bearbeitet.', // from v2.1.13 added 6.3.2016 'hasSelected' : '$1 Objekt(e) ausgewählt.', // from v2.1.13 added 6.3.2016 'hasClipboard' : '$1 Objekte im Clipboard.', // from v2.1.13 added 6.3.2016 'incSearchOnly' : 'Inkrementelle Suche bezieht sich nur auf die aktuelle Ansicht.', // from v2.1.13 added 6.30.2016 'reinstate' : 'Wiederherstellen', // from v2.1.15 added 3.8.2016 'complete' : '$1 abgeschlossen', // from v2.1.15 added 21.8.2016 'contextmenu' : 'Kontextmenü', // from v2.1.15 added 9.9.2016 'pageTurning' : 'Seite umblättern', // from v2.1.15 added 10.9.2016 'volumeRoots' : 'Volume-Rootverzeichnisse', // from v2.1.16 added 16.9.2016 'reset' : 'Neustart', // from v2.1.16 added 1.10.2016 'bgcolor' : 'Hintergrund Farbe', // from v2.1.16 added 1.10.2016 'colorPicker' : 'Farbauswahl', // from v2.1.16 added 1.10.2016 '8pxgrid' : '8px Raster', // from v2.1.16 added 4.10.2016 'enabled' : 'Ein', // from v2.1.16 added 4.10.2016 'disabled' : 'Aus', // from v2.1.16 added 4.10.2016 'emptyIncSearch' : 'Keine Ergebnisse in der aktuellen Anzeige', // from v2.1.16 added 5.10.2016 'emptyLetSearch' : 'Die Ergebnisse der ersten Buchstabensuche sind in der aktuellen Ansicht leer.', // from v2.1.23 added 24.3.2017 'textLabel' : 'Text Bezeichnung', // from v2.1.17 added 13.10.2016 'minsLeft' : '$1 Minuten übrig', // from v2.1.17 added 13.11.2016 'openAsEncoding' : 'Wiedereröffnen mit ausgewählter Codierung', // from v2.1.19 added 2.12.2016 'saveAsEncoding' : 'Speichern mit der gewählten Kodierung', // from v2.1.19 added 2.12.2016 'selectFolder' : 'Verzeichnis auswählen', // from v2.1.20 added 13.12.2016 'firstLetterSearch': 'Erster Buchstabe suche', // from v2.1.23 added 24.3.2017 'presets' : 'Voreinstellungen', // from v2.1.25 added 26.5.2017 'tooManyToTrash' : 'Zu viele Elemente auf einmal für den Mülleimer.', // from v2.1.25 added 9.6.2017 'TextArea' : 'Textbereich', // from v2.1.25 added 14.6.2017 'folderToEmpty' : 'Leere Ordner "$1".', // from v2.1.25 added 22.6.2017 'filderIsEmpty' : 'Es befinden sich keine Elemente im Ordner "$1".', // from v2.1.25 added 22.6.2017 'preference' : 'Einstellungen', // from v2.1.26 added 28.6.2017 'language' : 'Spracheinstellungen', // from v2.1.26 added 28.6.2017 'clearBrowserData': 'Initialisiere die Einstellungen, welche in diesem Browser gespeichert sind', // from v2.1.26 added 28.6.2017 'toolbarPref' : 'Toolbareinstellung', // from v2.1.27 added 2.8.2017 'charsLeft' : '... $1 Zeichen übrig', // from v2.1.29 added 30.8.2017 'sum' : 'Summe', // from v2.1.29 added 28.9.2017 'roughFileSize' : 'Ungefähre Dateigröße', // from v2.1.30 added 2.11.2017 'autoFocusDialog' : 'Fokussierung auf das Element Dialog mit Mouseover', // from v2.1.30 added 2.11.2017 'select' : 'Auswählen', // from v2.1.30 added 23.11.2017 'selectAction' : 'Aktion bei der Auswahl der Datei', // from v2.1.30 added 23.11.2017 'useStoredEditor' : 'Öffnen mit dem zuletzt verwendeten Editor', // from v2.1.30 added 23.11.2017 'selectinvert' : 'Auswahl umkehren', // from v2.1.30 added 25.11.2017 'renameMultiple' : 'Sicher $1 ausgewählte Elemente in $2 umbenennen?
          Rückgängig nicht möglich!', // from v2.1.31 added 4.12.2017 'batchRename' : 'Stapelumbenennung', // from v2.1.31 added 8.12.2017 'plusNumber' : '+ Nummer', // from v2.1.31 added 8.12.2017 'asPrefix' : 'Vorzeichen hinzufügen', // from v2.1.31 added 8.12.2017 'asSuffix' : 'Nachzeichen hinzufügen', // from v2.1.31 added 8.12.2017 'changeExtention' : 'Erweiterung ändern', // from v2.1.31 added 8.12.2017 'columnPref' : 'Spalteneinstellungen (Listenansicht)', // from v2.1.32 added 6.2.2018 'reflectOnImmediate' : 'Alle Änderungen werden sofort im Archiv angewendet.', // from v2.1.33 added 2.3.2018 'reflectOnUnmount' : 'Alle Änderungen werden nicht angewendet bis dieses Volume entfernt wird.', // from v2.1.33 added 2.3.2018 'unmountChildren' : 'Die folgenden Datenträger, die auf diesem Datenträger eingehängt sind, werden ebenfalls ausgehängt. Sicher dass alle aushängt werden sollen?', // from v2.1.33 added 5.3.2018 'selectionInfo' : 'Auswahl Info', // from v2.1.33 added 7.3.2018 'hashChecker' : 'Datei-Hash-Algorithmen', // from v2.1.33 added 10.3.2018 'infoItems' : 'Info-Elemente (Auswahl-Info-Panel)', // from v2.1.38 added 28.3.2018 'pressAgainToExit': 'Drücken Sie erneut, um zu beenden.', // from v2.1.38 added 1.4.2018 'toolbar' : 'Symbolleiste', // from v2.1.38 added 4.4.2018 'workspace' : 'Arbeitsplatz', // from v2.1.38 added 4.4.2018 'dialog' : 'Dialog', // from v2.1.38 added 4.4.2018 'all' : 'Alle', // from v2.1.38 added 4.4.2018 'iconSize' : 'Icongröße (Symbolansicht)', // form v2.1.39 added 7.5.2018 'editorMaximized' : 'Öffne Editorfenster in voller Größe', // from v2.1.40 added 30.6.2018 'editorConvNoApi' : 'Aktuell keine API zur Bearbeitung verfügbar, bitte auf Webseite bearbeiten', //from v2.1.40 added 13.12.2019 'editorConvNeedUpload' : 'Um zu speichern nach der Bearbeitung Element entweder mit URL hochladen oder mit herunter geladener Datei', // from v2.1.40 added 13.12.2019 'convertOn' : 'Bearbeiten auf Seite $1', // from v2.1.40 added 13.12.2019 'integrations' : 'Integrationen', // from v2.1.40 added 13.12.2019 'integrationWith' : 'Diese Software hat folgende externe Dienste integriert. Vor Anwendung bitte die jeweiligen Nutzungsbedingungen usw. beachten', // from v2.1.40 added 13.12.2019 'showHidden' : 'Zeige versteckte Elemente', // from v2.1.41 added 13.12.2019 'hideHidden' : 'Verberge versteckte Elemente', // from v2.1.41 added 13.12.2019 'toggleHidden' : 'Zeige/Verberge versteckte Elemente', // from v2.1.41 added 13.12.2019 'makefileTypes' : 'Dateiarten bei "Neue Datei" aktivieren', // from v2.1.41 added 13.12.2019 'typeOfTextfile' : 'Art der Textdatei', // from v2.1.41 added 13.12.2019 'add' : 'Neu', // from v2.1.41 added 13.12.2019 'theme' : 'Thema', // from v2.1.43 added 13.12.2019 'default' : 'Standard', // from v2.1.43 added 13.12.2019 'description' : 'Beschreibung', // from v2.1.43 added 13.12.2019 'website' : 'Webseite', // from v2.1.43 added 13.12.2019 'author' : 'Autor', // from v2.1.43 added 13.12.2019 'email' : 'Email', // from v2.1.43 added 13.12.2019 'license' : 'Lizenz', // from v2.1.43 added 13.12.2019 'exportToSave' : 'Dieses Element kann nicht gespeichert werden. Um Änderungen nicht zu verlieren, muss es auf den lokalen PC exportiert werden', // from v2.1.44 added 13.12.2019 'dblclickToSelect': 'Doppelt auf Datei klicken um auszuwählen', // from v2.1.47 added 13.12.2019 'useFullscreen' : 'Gesamter Bildschirm', // from v2.1.47 added 13.12.2019 /********************************** mimetypes **********************************/ 'kindUnknown' : 'Unbekannt', 'kindRoot' : 'Stammverzeichnis', // from v2.1.16 added 16.10.2016 'kindFolder' : 'Ordner', 'kindSelects' : 'Auswahlkriterien', // from v2.1.29 added 29.8.2017 'kindAlias' : 'Verknüpfung', 'kindAliasBroken' : 'Defekte Verknüpfung', // applications 'kindApp' : 'Programm', 'kindPostscript' : 'Postscript-Dokument', 'kindMsOffice' : 'MS Office-Dokument', 'kindMsWord' : 'MS Word-Dokument', 'kindMsExcel' : 'MS Excel-Dokument', 'kindMsPP' : 'MS Powerpoint-Präsentation', 'kindOO' : 'Open Office-Dokument', 'kindAppFlash' : 'Flash', 'kindPDF' : 'Portables Dokumentenformat (PDF)', 'kindTorrent' : 'Bittorrent-Datei', 'kind7z' : '7z-Archiv', 'kindTAR' : 'TAR-Archiv', 'kindGZIP' : 'GZIP-Archiv', 'kindBZIP' : 'BZIP-Archiv', 'kindXZ' : 'XZ-Archiv', 'kindZIP' : 'ZIP-Archiv', 'kindRAR' : 'RAR-Archiv', 'kindJAR' : 'Java JAR-Datei', 'kindTTF' : 'True Type-Schrift', 'kindOTF' : 'Open Type-Schrift', 'kindRPM' : 'RPM-Paket', // fonts 'kindFont' : 'Schriftart', 'kindSFNT' : 'SFNT-Schrift', 'kindEOT' : 'Embedded-Open-Type-Schrift', 'kindWOFF' : 'Web-Open-Font-Format-Schrift', 'kindWOFF2' : 'Web-Open-Font-Format-2-Schrift', // texts 'kindText' : 'Text-Dokument', 'kindTextPlain' : 'Text-Dokument', 'kindPHP' : 'PHP-Quelltext', 'kindCSS' : 'CSS Stilvorlage', 'kindHTML' : 'HTML-Dokument', 'kindJS' : 'Javascript-Quelltext', 'kindRTF' : 'Formatierte Textdatei', 'kindC' : 'C-Quelltext', 'kindCHeader' : 'C Header-Quelltext', 'kindCPP' : 'C++ Quelltext', 'kindCPPHeader' : 'C++ Header-Quelltext', 'kindShell' : 'Unix-Shell-Skript', 'kindPython' : 'Python-Quelltext', 'kindJava' : 'Java-Quelltext', 'kindRuby' : 'Ruby-Quelltext', 'kindPerl' : 'Perl Script', 'kindSQL' : 'SQL-Quelltext', 'kindXML' : 'XML-Dokument', 'kindAWK' : 'AWK-Quelltext', 'kindCSV' : 'Kommagetrennte Daten', 'kindDOCBOOK' : 'Docbook XML-Dokument', 'kindMarkdown' : 'Markdown-Text', // added 20.7.2015 // images 'kindImage' : 'Bild', 'kindBMP' : 'Bitmap-Bild', 'kindJPEG' : 'JPEG-Bild', 'kindGIF' : 'GIF-Bild', 'kindPNG' : 'PNG-Bild', 'kindTIFF' : 'TIFF-Bild', 'kindTGA' : 'TGA-Bild', 'kindPSD' : 'Adobe Photoshop-Dokument', 'kindXBITMAP' : 'X Bitmap-Bild', 'kindPXM' : 'Pixelmator-Bild', // media 'kindAudio' : 'Audiodatei', 'kindAudioMPEG' : 'MPEG Audio', 'kindAudioMPEG4' : 'MPEG-4 Audio', 'kindAudioMIDI' : 'MIDI Audio', 'kindAudioOGG' : 'Ogg Vorbis Audio', 'kindAudioWAV' : 'WAV Audio', 'AudioPlaylist' : 'MP3-Playlist', 'kindVideo' : 'Videodatei', 'kindVideoDV' : 'DV Film', 'kindVideoMPEG' : 'MPEG Film', 'kindVideoMPEG4' : 'MPEG4 Film', 'kindVideoAVI' : 'AVI Film', 'kindVideoMOV' : 'QuickTime Film', 'kindVideoWM' : 'Windows Media Film', 'kindVideoFlash' : 'Flash Film', 'kindVideoMKV' : 'Matroska Film', 'kindVideoOGG' : 'Ogg Film' } }; })); PK!‹¥Í4”¦”¦@file-manager-advanced/application/library/js/i18n/elfinder.uk.jsnu„[µü¤/** * УкраїнÑ�ька мова translation * @author ITLancer * @author cjayho * @version 2020-02-10 */ (function(root, factory) { if (typeof define === 'function' && define.amd) { define(['elfinder'], factory); } else if (typeof exports !== 'undefined') { module.exports = factory(require('elfinder')); } else { factory(root.elFinder); } }(this, function(elFinder) { elFinder.prototype.i18.uk = { translator : 'ITLancer, cjayho <cj.fooser@gmail.com>', language : 'УкраїнÑ�ька мова', direction : 'ltr', dateFormat : 'd.m.Y H:i', // will show like: 10.02.2020 16:52 fancyDateFormat : '$1 H:i', // will show like: Ñ�ьогодні 16:52 nonameDateFormat : 'ymd-His', // noname upload will show like: 200210-165246 messages : { /********************************** errors **********************************/ 'error' : 'Помилка', 'errUnknown' : 'Ð�евідома помилка.', 'errUnknownCmd' : 'Ð�евідома команда.', 'errJqui' : 'Ð�еправильне налаштуваннÑ� jQuery UI. ВідÑ�утні компоненти: selectable, draggable, droppable.', 'errNode' : 'ВідÑ�утній елемент DOM длÑ� Ñ�твореннÑ� elFinder.', 'errURL' : 'Ð�еправильне налаштуваннÑ�! Ð�е вказана опціÑ� URL.', 'errAccess' : 'ДоÑ�туп заборонено.', 'errConnect' : 'Ð�е вдалоÑ�Ñ� з’єднатиÑ�Ñ� з backend.', 'errAbort' : 'З’єднаннÑ� розірване.', 'errTimeout' : 'Тайм-аут з’єднаннÑ�.', 'errNotFound' : 'Ð�е знайдено backend.', 'errResponse' : 'Ð�еправильна відповідь від backend.', 'errConf' : 'Ð�еправильне налаштуваннÑ� backend.', 'errJSON' : 'Модуль PHP JSON не вÑ�тановлено.', 'errNoVolumes' : 'Ð�емає доÑ�тупних длÑ� читаннÑ� директорій.', 'errCmdParams' : 'Ð�еправильні параметри длÑ� команди "$1".', 'errDataNotJSON' : 'Дані не у форматі JSON.', 'errDataEmpty' : 'Дані відÑ�утні.', 'errCmdReq' : 'Backend вимагає назву команди.', 'errOpen' : 'Ð�еможливо відкрити "$1".', 'errNotFolder' : 'Об’єкт не Ñ” папкою.', 'errNotFile' : 'Об’єкт не Ñ” файлом.', 'errRead' : 'Ð�еможливо прочитати "$1".', 'errWrite' : 'Ð�еможливо запиÑ�ати в "$1".', 'errPerm' : 'Помилка доÑ�тупу.', 'errLocked' : 'Файл "$1" заблоковано Ñ– його неможливо переміÑ�тити, перейменувати чи вилучити.', 'errExists' : 'Файл з назвою "$1" вже Ñ–Ñ�нує.', 'errInvName' : 'Ð�едійÑ�на назва файла.', 'errInvDirname' : 'Ð�едійÑ�на назва теки.', // from v2.1.24 added 12.4.2017 'errFolderNotFound' : 'Теку не знайдено.', 'errFileNotFound' : 'Файл не знайдено.', 'errTrgFolderNotFound' : 'Цільову теку "$1" не знайдено.', 'errPopup' : 'Браузер заборонÑ�Ñ” відкривати popup-вікно. Дозвольте у налаштуваннÑ� браузера, щоб відкрити файл.', 'errMkdir' : 'Ð�еможливо Ñ�творити теку "$1".', 'errMkfile' : 'Ð�еможливо Ñ�творити файл "$1".', 'errRename' : 'Ð�еможливо перейменувати файл "$1".', 'errCopyFrom' : 'КопіюваннÑ� файлів з тому "$1" не дозволено.', 'errCopyTo' : 'КопіюваннÑ� файлів на том "$1" не дозволено.', 'errMkOutLink' : 'Ð�еможливо Ñ�творити поÑ�иланнÑ� у міÑ�це за межами кореневої теки ноÑ�Ñ–Ñ�.', // from v2.1 added 03.10.2015 'errUpload' : 'Помилка відвантаженнÑ�.', // old name - errUploadCommon 'errUploadFile' : 'Ð�еможливо відвантажити файл "$1".', // old name - errUpload 'errUploadNoFiles' : 'Ð�е знайдено файлів длÑ� відвантаженнÑ�.', 'errUploadTotalSize' : 'Об\'єм даних перевищив вÑ�тановлений ліміт.', // old name - errMaxSize 'errUploadFileSize' : 'Об\'єм файла перевищив вÑ�тановлений ліміт.', // old name - errFileMaxSize 'errUploadMime' : 'Файли цього типу заборонені.', 'errUploadTransfer' : '"$1" : помилка передачі.', 'errUploadTemp' : 'Ð�еможливо Ñ�творити тимчаÑ�овий файл длÑ� відвантаженнÑ�.', // from v2.1 added 26.09.2015 'errNotReplace' : 'Об\'єкт "$1" вже Ñ–Ñ�нує тут та не може бути заміненим на об\'єкт іншого типу.', // new 'errReplace' : 'Ð�еможливо замінити "$1".', 'errSave' : 'Ð�еможливо запиÑ�ати "$1".', 'errCopy' : 'Ð�еможливо Ñ�копіювати "$1".', 'errMove' : 'Ð�еможливо перенеÑ�ти "$1".', 'errCopyInItself' : 'Ð�еможливо Ñ�копіювати "$1" Ñ�ам у Ñ�ебе.', 'errRm' : 'Ð�еможливо вилучити "$1".', 'errTrash' : 'Ð�еможливо переÑ�унути до Ñ�мітника.', // from v2.1.24 added 30.4.2017 'errRmSrc' : 'Ð�еможливо видалити оригінальний(Ñ–) файл(и).', 'errExtract' : 'Ð�еможливо розпакувати файли з "$1".', 'errArchive' : 'Ð�еможливо Ñ�творити архів.', 'errArcType' : 'Тип архіву не підтримуєтьÑ�Ñ�.', 'errNoArchive' : 'Файл не Ñ” архівом, або Ñ” архівом, тип Ñ�кого не підтримуєтьÑ�Ñ�.', 'errCmdNoSupport' : 'Серверна чаÑ�тина не підтримує цієї команди.', 'errReplByChild' : 'Папка “$1â€� не може бути замінена елементом, Ñ�кий вона міÑ�тить.', 'errArcSymlinks' : 'З міркувань безпеки заборонено розпаковувати архіви з Ñ�имволічними поÑ�иланнÑ�ми.', // edited 24.06.2012 'errArcMaxSize' : 'Розмір файлів архіву перевищує допуÑ�тиме значеннÑ�.', 'errResize' : 'Ð�еможливо маÑ�штабувати "$1".', 'errResizeDegree' : 'Ð�едійÑ�ний кут обертаннÑ�.', // added 7.3.2013 'errResizeRotate' : 'Ð�еможливо повернути Ñ�вітлину.', // added 7.3.2013 'errResizeSize' : 'Ð�едійÑ�ний розмір Ñ�вітлини.', // added 7.3.2013 'errResizeNoChange' : 'Розмір Ñ�вітлини не змінено.', // added 7.3.2013 'errUsupportType' : 'Ð�епідтримуваний тип файла.', 'errNotUTF8Content' : 'Файл "$1" не в UTF-8 Ñ– не може бути відредагований.', // added 9.11.2011 'errNetMount' : 'Ð�еможливо змонтувати "$1".', // added 17.04.2012 'errNetMountNoDriver' : 'Ð�епідтримуваний протокл.', // added 17.04.2012 'errNetMountFailed' : 'Ð’ процеÑ�Ñ– монтуваннÑ� Ñ�талаÑ�Ñ� помилка.', // added 17.04.2012 'errNetMountHostReq' : 'Ð�еобхідно вказати хоÑ�Ñ‚.', // added 18.04.2012 'errSessionExpires' : 'ЧаÑ� Ñ�еанÑ�у минув через неактивніÑ�ть.', 'errCreatingTempDir' : 'Ð�Еможливо Ñ�творити тимчаÑ�ову директорію: "$1"', 'errFtpDownloadFile' : 'Ð�еможливо завантажити файл з FTP: "$1"', 'errFtpUploadFile' : 'Ð�еможливо завантажити файл на FTP: "$1"', 'errFtpMkdir' : 'Ð�еможливо Ñ�творити віддалений каталог на FTP: "$1"', 'errArchiveExec' : 'Помилка при архівації файлів: "$1"', 'errExtractExec' : 'Помилка при розархівуванні файлів: "$1"', 'errNetUnMount' : 'Ð�еможливо демонтувати', // from v2.1 added 30.04.2012 'errConvUTF8' : 'Ð�еможливо конвертувати в UTF - 8', // from v2.1 added 08.04.2014 'errFolderUpload' : 'ВикориÑ�товуйте Google Chrome, Ñ�кщо ви хочете завантажити папку', // from v2.1 added 26.6.2015 'errSearchTimeout' : 'ЧаÑ� пошуку "$1" вийшов. Результат пошуку чаÑ�тковий', // from v2.1 added 12.1.2016 'errReauthRequire' : 'Ð�еобхідна повторна авторизаціÑ�.', // from v2.1.10 added 24.3.2016 'errMaxTargets' : 'МакÑ�имальна кількіÑ�ть об\'єктів що можна обрати Ñ�кладає $1.', // from v2.1.17 added 17.10.2016 'errRestore' : 'Ð�еможливо відновити зі Ñ�мітника: неможливо визначити міÑ�це куди відновлювати.', // from v2.1.24 added 3.5.2017 'errEditorNotFound' : 'ДлÑ� цього типу файлів не знайдено редактора.', // from v2.1.25 added 23.5.2017 'errServerError' : 'Помилка на боці Ñ�ервера.', // from v2.1.25 added 16.6.2017 'errEmpty' : 'Ð�еможливо Ñ�порожнити теку "$1".', // from v2.1.25 added 22.6.2017 'moreErrors' : 'Є також ще $1 помилок.', // from v2.1.44 added 9.12.2018 /******************************* commands names ********************************/ 'cmdarchive' : 'Ð�рхівувати', 'cmdback' : 'Ð�азад', 'cmdcopy' : 'Копівати', 'cmdcut' : 'Вирізати', 'cmddownload' : 'Завантажити', 'cmdduplicate' : 'Дублювати', 'cmdedit' : 'Редагувати файл', 'cmdextract' : 'Розпакувати файли з архіву', 'cmdforward' : 'Вперед', 'cmdgetfile' : 'Вибрати файли', 'cmdhelp' : 'Про програму', 'cmdhome' : 'Додому', 'cmdinfo' : 'ІнформаціÑ�', 'cmdmkdir' : 'Створити теку', 'cmdmkdirin' : 'До нової теки', // from v2.1.7 added 19.2.2016 'cmdmkfile' : 'Створити файл', 'cmdopen' : 'Відкрити', 'cmdpaste' : 'Ð’Ñ�тавити', 'cmdquicklook' : 'Попередній переглÑ�д', 'cmdreload' : 'Перечитати', 'cmdrename' : 'Перейменувати', 'cmdrm' : 'Вилучити', 'cmdtrash' : 'До Ñ�мітника', //from v2.1.24 added 29.4.2017 'cmdrestore' : 'Відновити', //from v2.1.24 added 3.5.2017 'cmdsearch' : 'Шукати файли', 'cmdup' : 'Ð�а 1 рівень вгору', 'cmdupload' : 'Відвантажити файли', 'cmdview' : 'ПереглÑ�д', 'cmdresize' : 'МаÑ�штабувати зображеннÑ�', 'cmdsort' : 'СортуваннÑ�', 'cmdnetmount' : 'Змонтувати мережевий диÑ�к', // added 18.04.2012 'cmdnetunmount': 'Розмонтувати', // from v2.1 added 30.04.2012 'cmdplaces' : 'До МіÑ�ць', // added 28.12.2014 'cmdchmod' : 'Змінити права', // from v2.1 added 20.6.2015 'cmdopendir' : 'Відкрии директорію', // from v2.1 added 13.1.2016 'cmdcolwidth' : 'Скинути ширину Ñ�товпчика', // from v2.1.13 added 12.06.2016 'cmdfullscreen': 'Повний екран', // from v2.1.15 added 03.08.2016 'cmdmove' : 'ПереÑ�унути', // from v2.1.15 added 21.08.2016 'cmdempty' : 'Спорожнити теку', // from v2.1.25 added 22.06.2017 'cmdundo' : 'СкаÑ�увати', // from v2.1.27 added 31.07.2017 'cmdredo' : 'Відновити', // from v2.1.27 added 31.07.2017 'cmdpreference': 'Ð�алаштуваннÑ�', // from v2.1.27 added 03.08.2017 'cmdselectall' : 'Вибрати уÑ�Ñ–', // from v2.1.28 added 15.08.2017 'cmdselectnone': 'ЗнÑ�ти вибір', // from v2.1.28 added 15.08.2017 'cmdselectinvert': 'Інвертувати вибір', // from v2.1.28 added 15.08.2017 'cmdopennew' : 'Відкрити у новому вікні', // from v2.1.38 added 3.4.2018 'cmdhide' : 'Сховати (Ð�алаштуваннÑ�)', // from v2.1.41 added 24.7.2018 /*********************************** buttons ***********************************/ 'btnClose' : 'Закрити', 'btnSave' : 'Зберегти', 'btnRm' : 'Вилучити', 'btnApply' : 'ЗаÑ�тоÑ�увати', 'btnCancel' : 'СкаÑ�увати', 'btnNo' : 'Ð�Ñ–', 'btnYes' : 'Так', 'btnDiscard': 'СкаÑ�увати зміни', 'btnMount' : 'Підключити', // added 18.04.2012 'btnApprove': 'Перейти в $1 Ñ– прийнÑ�ти', // from v2.1 added 26.04.2012 'btnUnmount': 'Відключити', // from v2.1 added 30.04.2012 'btnConv' : 'Конвертувати', // from v2.1 added 08.04.2014 'btnCwd' : 'Тут', // from v2.1 added 22.5.2015 'btnVolume' : 'Розділ', // from v2.1 added 22.5.2015 'btnAll' : 'Ð’Ñ�Ñ–', // from v2.1 added 22.5.2015 'btnMime' : 'MIME тип', // from v2.1 added 22.5.2015 'btnFileName':'Ð�азва файла', // from v2.1 added 22.5.2015 'btnSaveClose': 'Зберегти Ñ– вийти', // from v2.1 added 12.6.2015 'btnBackup' : 'Резервна копіÑ�', // fromv2.1 added 28.11.2015 'btnRename' : 'Перейменувати', // from v2.1.24 added 6.4.2017 'btnRenameAll' : 'Перейменуваті(УÑ�Ñ–)', // from v2.1.24 added 6.4.2017 'btnPrevious' : 'Попер. ($1/$2)', // from v2.1.24 added 11.5.2017 'btnNext' : 'Ð�аÑ�туп. ($1/$2)', // from v2.1.24 added 11.5.2017 'btnSaveAs' : 'Зберегти Ñ�к', // from v2.1.25 added 24.5.2017 /******************************** notifications ********************************/ 'ntfopen' : 'Відкрити теку', 'ntffile' : 'Відкрити файл', 'ntfreload' : 'Перечитати вміÑ�Ñ‚ теки', 'ntfmkdir' : 'СтвореннÑ� теки', 'ntfmkfile' : 'СтвореннÑ� файлів', 'ntfrm' : 'Вилучити файли', 'ntfcopy' : 'Копіювати файли', 'ntfmove' : 'ПеренеÑ�ти файли', 'ntfprepare' : 'Підготовка до копіюваннÑ� файлів', 'ntfrename' : 'Перейменувати файли', 'ntfupload' : 'Відвантажити файли', 'ntfdownload' : 'Завантажити файли', 'ntfsave' : 'ЗапиÑ�ати файли', 'ntfarchive' : 'СтвореннÑ� архіву', 'ntfextract' : 'РозпаковуваннÑ� архіву', 'ntfsearch' : 'Пошук файлів', 'ntfresize' : 'Зміна розміру Ñ�вітлини', 'ntfsmth' : 'Виконуємо', 'ntfloadimg' : 'ЗавантаженнÑ� зображеннÑ�', 'ntfnetmount' : 'МонтуваннÑ� мережевого диÑ�ка', // added 18.04.2012 'ntfnetunmount': 'РозмонтуваннÑ� мережевого диÑ�ка', // from v2.1 added 30.04.2012 'ntfdim' : 'ВизначеннÑ� розміру Ñ�вітлини', // added 20.05.2013 'ntfreaddir' : 'ЧитаннÑ� інформації директорії', // from v2.1 added 01.07.2013 'ntfurl' : 'отриманнÑ� URL поÑ�иланнÑ�', // from v2.1 added 11.03.2014 'ntfchmod' : 'Зміна прав файлу', // from v2.1 added 20.6.2015 'ntfpreupload': 'Перевірка імені завантажуваного файла', // from v2.1 added 31.11.2015 'ntfzipdl' : 'СтвореннÑ� файлу длÑ� завантаженнÑ�', // from v2.1.7 added 23.1.2016 'ntfparents' : 'ОтриманнÑ� інформації про шлÑ�Ñ…', // from v2.1.17 added 2.11.2016 'ntfchunkmerge': 'Обробка вивантаженого файлу', // from v2.1.17 added 2.11.2016 'ntftrash' : 'Переміщуємо до Ñ�мітника', // from v2.1.24 added 2.5.2017 'ntfrestore' : 'Відновлюємо зі Ñ�мітника', // from v2.1.24 added 3.5.2017 'ntfchkdir' : 'ПеревірÑ�ємо теку призначеннÑ�', // from v2.1.24 added 3.5.2017 'ntfundo' : 'СкаÑ�уваннÑ� попередньої дії', // from v2.1.27 added 31.07.2017 'ntfredo' : 'ПовтореннÑ� раніше Ñ�каÑ�ованої дії', // from v2.1.27 added 31.07.2017 'ntfchkcontent' : 'Перевірка вміÑ�ту', // from v2.1.41 added 3.8.2018 /*********************************** volumes *********************************/ 'volume_Trash' : 'Смітник', //from v2.1.24 added 29.4.2017 /************************************ dates **********************************/ 'dateUnknown' : 'невідомо', 'Today' : 'Ñ�ьогодні', 'Yesterday' : 'вчора', 'msJan' : 'Січ', 'msFeb' : 'Лют', 'msMar' : 'Бер', 'msApr' : 'Кві', 'msMay' : 'Тра', 'msJun' : 'Чер', 'msJul' : 'Лип', 'msAug' : 'Сер', 'msSep' : 'Вер', 'msOct' : 'Жов', 'msNov' : 'ЛиÑ�', 'msDec' : 'Гру', 'January' : 'Ñ�ічнÑ�', 'February' : 'лютого', 'March' : 'березнÑ�', 'April' : 'квітнÑ�', 'May' : 'травнÑ�', 'June' : 'червнÑ�', 'July' : 'липнÑ�', 'August' : 'Ñ�ерпнÑ�', 'September' : 'вереÑ�нÑ�', 'October' : 'жовтнÑ�', 'November' : 'лиÑ�топада', 'December' : 'груднÑ�', 'Sunday' : 'Ð�еділÑ�', 'Monday' : 'Понеділок', 'Tuesday' : 'Вівторок', 'Wednesday' : 'Середа', 'Thursday' : 'Четвер', 'Friday' : 'П’Ñ�тницÑ�', 'Saturday' : 'Субота', 'Sun' : 'Ð�д', 'Mon' : 'Пн', 'Tue' : 'Ð’Ñ‚', 'Wed' : 'Ср', 'Thu' : 'Чт', 'Fri' : 'Пт', 'Sat' : 'Сб', /******************************** sort variants ********************************/ 'sortname' : 'за назвою', 'sortkind' : 'за типом', 'sortsize' : 'за розміром', 'sortdate' : 'за датою', 'sortFoldersFirst' : 'СпиÑ�ок тек', 'sortperm' : 'за дозволами', // from v2.1.13 added 13.06.2016 'sortmode' : 'за режимом', // from v2.1.13 added 13.06.2016 'sortowner' : 'за влаÑ�ником', // from v2.1.13 added 13.06.2016 'sortgroup' : 'за групою', // from v2.1.13 added 13.06.2016 'sortAlsoTreeview' : 'Також виглÑ�д дерева', // from v2.1.15 added 01.08.2016 /********************************** new items **********************************/ 'untitled file.txt' : 'неназваний файл.txt', // added 10.11.2015 'untitled folder' : 'неназвана тека', // added 10.11.2015 'Archive' : 'Ð�овийÐ�рхів', // from v2.1 added 10.11.2015 'untitled file' : 'Ð�овийФайл.$1', // from v2.1.41 added 6.8.2018 'extentionfile' : '$1: Файл', // from v2.1.41 added 6.8.2018 'extentiontype' : '$1: $2 ', // from v2.1.43 added 17.10.2018 /********************************** messages **********************************/ 'confirmReq' : 'Ð�еобхідне підтвердженнÑ�', 'confirmRm' : 'Ви Ñ�правді хочете вилучити файли?
          Операці� незворотн�!', 'confirmRepl' : 'Замінити �тарий файл новим? (при на�вно�ті тек вони будуть об\'єднані. Дл� резервної копії та заміни оберіть Резервну Копію)', 'confirmRest' : 'Замінити і�нуючий об\'єкт об\'єктом зі �мітника?', // fromv2.1.24 added 5.5.2017 'confirmConvUTF8' : '�е у UTF-8
          Конвертувати у UTF-8?
          Вмі�т �тане у UTF-8 збереженн�м пі�л� конвертації.', // from v2.1 added 08.04.2014 'confirmNonUTF8' : 'Кодуванн� �имволів цього файлу неможливо визначити. Потрібно тимча�ово конвертувати його у UTF-8 дл� редагуванн�.
          Оберіть кодуванн� цього файлу.', // from v2.1.19 added 28.11.2016 'confirmNotSave' : 'Було вне�ено зміни.
          Якщо ії не зберегти, їх буде втрачено.', // from v2.1 added 15.7.2015 'confirmTrash' : 'Ви точно бажаєте перемі�тити ці об\'єкти до �мітника?', //from v2.1.24 added 29.4.2017 'confirmMove' : 'Ви точно бажаєте перемі�тити об\'єкти до "$1"?', //from v2.1.50 added 27.7.2019 'apllyAll' : 'За�то�увати до в�іх', 'name' : '�азва', 'size' : 'Розмір', 'perms' : 'До�тупи', 'modify' : 'Змінено', 'kind' : 'Тип', 'read' : 'читанн�', 'write' : 'запи�', 'noaccess' : 'недо�тупно', 'and' : 'і', 'unknown' : 'невідомо', 'selectall' : 'Вибрати в�і файли', 'selectfiles' : 'Вибрати файл(и)', 'selectffile' : 'Вибрати перший файл', 'selectlfile' : 'Вибрати о�танній файл', 'viewlist' : 'Спи�ком', 'viewicons' : 'Значками', 'viewSmall' : 'Маленькі значки', // from v2.1.39 added 22.5.2018 'viewMedium' : 'Середні значки', // from v2.1.39 added 22.5.2018 'viewLarge' : 'Великі значки', // from v2.1.39 added 22.5.2018 'viewExtraLarge' : 'Дуже великі значки', // from v2.1.39 added 22.5.2018 'places' : 'Розташуванн�', 'calc' : 'Вирахувати', 'path' : 'Шл�х', 'aliasfor' : '�ліа� дл�', 'locked' : 'Заблоковано', 'dim' : 'Розміри', 'files' : 'Файли', 'folders' : 'теки', 'items' : 'Елементи', 'yes' : 'так', 'no' : 'ні', 'link' : 'По�иланн�', 'searcresult' : 'Результати пошуку', 'selected' : 'Вибрані елементи', 'about' : 'Про', 'shortcuts' : 'Ярлики', 'help' : 'Допомога', 'webfm' : 'Web-менеджер файлів', 'ver' : 'Вер�і�', 'protocolver' : 'вер�і� протоколу', 'homepage' : 'Сторінка проекту', 'docs' : 'Документаці�', 'github' : 'Fork us on Github', 'twitter' : 'Слідкуйте у Твітері', 'facebook' : 'Приєднуйте�ь у фей�буці', 'team' : '�втори', 'chiefdev' : 'головний розробник', 'developer' : 'розробник', 'contributor' : 'уча�ник', 'maintainer' : '�упроводжувач', 'translator' : 'перекладач', 'icons' : 'Значки', 'dontforget' : 'і не забудьте рушничок', 'shortcutsof' : 'Створенн� по�илань вимкнено', 'dropFiles' : 'Кидайте файли �юди', 'or' : 'або', 'selectForUpload' : 'Виберіть файли дл� відвантаженн�', 'moveFiles' : 'Перемі�тити файли', 'copyFiles' : 'Копіювати файли', 'restoreFiles' : 'Відновити об\'єкти', // from v2.1.24 added 5.5.2017 'rmFromPlaces' : 'Вилучити з розташувань', 'aspectRatio' : 'Співвідношенн�', 'scale' : 'Ма�штаб', 'width' : 'Ширина', 'height' : 'Ви�ота', 'resize' : 'Змінити розмір', 'crop' : 'Обрізати', 'rotate' : 'Повернути', 'rotate-cw' : 'Повернути на 90 граду�ів за год. �тр.', 'rotate-ccw' : 'Повернути на 90 граду�ів проти год. �тр.', 'degree' : 'Граду�', 'netMountDialogTitle' : 'Змонтувати но�ій у мережі', // added 18.04.2012 'protocol' : 'вер�і� протоколу', // added 18.04.2012 'host' : 'Хо�т', // added 18.04.2012 'port' : 'Порт', // added 18.04.2012 'user' : 'Логін', // added 18.04.2012 'pass' : 'Пароль', // added 18.04.2012 'confirmUnmount' : 'Ви відмонтовуєте $1?', // from v2.1 added 30.04.2012 'dropFilesBrowser': 'Перет�гніть або в�тавте файли з огл�дача', // from v2.1 added 30.05.2012 'dropPasteFiles' : 'Перет�гніть файли, В�тавте URL або �вітлини (з буфера обміну) �юди', // from v2.1 added 07.04.2014 'encoding' : 'Кодуванн�', // from v2.1 added 19.12.2014 'locale' : 'Локаль', // from v2.1 added 19.12.2014 'searchTarget' : 'Призначенн�: $1', // from v2.1 added 22.5.2015 'searchMime' : 'Пошук за введеним типом MIME', // from v2.1 added 22.5.2015 'owner' : 'Вла�ник', // from v2.1 added 20.6.2015 'group' : 'Група', // from v2.1 added 20.6.2015 'other' : 'Інші', // from v2.1 added 20.6.2015 'execute' : 'Виконанн�', // from v2.1 added 20.6.2015 'perm' : 'Дозвіл', // from v2.1 added 20.6.2015 'mode' : 'Режим', // from v2.1 added 20.6.2015 'emptyFolder' : 'Тека порожн�', // from v2.1.6 added 30.12.2015 'emptyFolderDrop' : 'Тека порожн�\\A Перет�гніть об\'єкти дл� додаванн�', // from v2.1.6 added 30.12.2015 'emptyFolderLTap' : 'Тека порожн�\\A Дл� додаванн� об\'єктів торкніть та утримуйте', // from v2.1.6 added 30.12.2015 'quality' : 'Які�ть', // from v2.1.6 added 5.1.2016 'autoSync' : '�вто �инх.', // from v2.1.6 added 10.1.2016 'moveUp' : 'Пере�унути вгору', // from v2.1.6 added 18.1.2016 'getLink' : 'Отримати URL', // from v2.1.7 added 9.2.2016 'selectedItems' : 'Обрані об\'єкти ($1)', // from v2.1.7 added 2.19.2016 'folderId' : 'ID теки', // from v2.1.10 added 3.25.2016 'offlineAccess' : 'Дозволити до�туп офлайн', // from v2.1.10 added 3.25.2016 'reAuth' : 'Дл� реаутентифікації', // from v2.1.10 added 3.25.2016 'nowLoading' : 'Зараз завантажуємо...', // from v2.1.12 added 4.26.2016 'openMulti' : 'Відкрити декілька файлів', // from v2.1.12 added 5.14.2016 'openMultiConfirm': 'Ви намагаєте�ь відкрити $1 файлів. Ви впевнені що хочете відкрити ії у огл�дачі?', // from v2.1.12 added 5.14.2016 'emptySearch' : 'Пошук не дав результатів у обраному мі�ці.', // from v2.1.12 added 5.16.2016 'editingFile' : 'Редагує файл.', // from v2.1.13 added 6.3.2016 'hasSelected' : 'Ви обрали $1 об\'єктів.', // from v2.1.13 added 6.3.2016 'hasClipboard' : 'У ва� є $1 об\'єктів у буфері обміну.', // from v2.1.13 added 6.3.2016 'incSearchOnly' : 'Інкрементний пошук є тільки дл� поточного перегл�ду.', // from v2.1.13 added 6.30.2016 'reinstate' : 'Відновити', // from v2.1.15 added 3.8.2016 'complete' : '$1 виконано', // from v2.1.15 added 21.8.2016 'contextmenu' : 'Контек�тне меню', // from v2.1.15 added 9.9.2016 'pageTurning' : 'Обертанн� �торінки', // from v2.1.15 added 10.9.2016 'volumeRoots' : 'Кореневі теки но�іїв', // from v2.1.16 added 16.9.2016 'reset' : 'Обнулити', // from v2.1.16 added 1.10.2016 'bgcolor' : 'Колір фону', // from v2.1.16 added 1.10.2016 'colorPicker' : 'Обрати колір', // from v2.1.16 added 1.10.2016 '8pxgrid' : '�ітка 8px', // from v2.1.16 added 4.10.2016 'enabled' : 'Увімкнено', // from v2.1.16 added 4.10.2016 'disabled' : 'Вимкнено', // from v2.1.16 added 4.10.2016 'emptyIncSearch' : 'Результати пошуку у поточному перегл�ді від�утні.\\A�ати�ніть [Enter] дл� розширенн� критеріїв пошуку.', // from v2.1.16 added 5.10.2016 'emptyLetSearch' : 'Результати пошуку за першою літерою від�утні у поточному перегл�ді.', // from v2.1.23 added 24.3.2017 'textLabel' : 'Тек�това мітка', // from v2.1.17 added 13.10.2016 'minsLeft' : '$1 хв. залишило�ь', // from v2.1.17 added 13.11.2016 'openAsEncoding' : 'Відкрити знову з обраним кодуванн�м', // from v2.1.19 added 2.12.2016 'saveAsEncoding' : 'Зберегти з обраним кодуванн�м', // from v2.1.19 added 2.12.2016 'selectFolder' : 'Обрати теку', // from v2.1.20 added 13.12.2016 'firstLetterSearch': 'Пошук за першою літерою', // from v2.1.23 added 24.3.2017 'presets' : 'Шаблони', // from v2.1.25 added 26.5.2017 'tooManyToTrash' : 'Дуже багато об\'єктів дл� переміщенн� у �мітник.', // from v2.1.25 added 9.6.2017 'TextArea' : 'Тек�товеПоле', // from v2.1.25 added 14.6.2017 'folderToEmpty' : 'Спорожнити теку "$1".', // from v2.1.25 added 22.6.2017 'filderIsEmpty' : 'Тека "$1" порожн�.', // from v2.1.25 added 22.6.2017 'preference' : '�алаштуванн�', // from v2.1.26 added 28.6.2017 'language' : 'Мова', // from v2.1.26 added 28.6.2017 'clearBrowserData': 'Ініціювати налаштуванн� збережені у цьому огл�дачі', // from v2.1.26 added 28.6.2017 'toolbarPref' : '�алаштуванн� лотку ін�трументів', // from v2.1.27 added 2.8.2017 'charsLeft' : '... $1 �имволів залишило�ь.', // from v2.1.29 added 30.8.2017 'linesLeft' : '... $1 р�дків залишило�ь.', // from v2.1.52 added 16.1.2020 'sum' : 'Сума', // from v2.1.29 added 28.9.2017 'roughFileSize' : 'Приблизний розмір файу', // from v2.1.30 added 2.11.2017 'autoFocusDialog' : 'Фоку�увати елемент діалога при наведенні кур�ора миші', // from v2.1.30 added 2.11.2017 'select' : 'Обрати', // from v2.1.30 added 23.11.2017 'selectAction' : 'Ді� при виборі файла', // from v2.1.30 added 23.11.2017 'useStoredEditor' : 'Відкрити редактором, що викори�товував�� крайній раз.', // from v2.1.30 added 23.11.2017 'selectinvert' : 'Інвертувати вибір', // from v2.1.30 added 25.11.2017 'renameMultiple' : 'Ви точно хочете перейменувати $1 обраних об\'єктів на кшталт $2?
          Це незворотна діÑ�!', // from v2.1.31 added 4.12.2017 'batchRename' : 'Пакетне перейменуваннÑ�', // from v2.1.31 added 8.12.2017 'plusNumber' : '+ ЧиÑ�ло', // from v2.1.31 added 8.12.2017 'asPrefix' : 'Додати префікÑ�', // from v2.1.31 added 8.12.2017 'asSuffix' : 'Додати Ñ�уфікÑ�', // from v2.1.31 added 8.12.2017 'changeExtention' : 'Змінити розширеннÑ�', // from v2.1.31 added 8.12.2017 'columnPref' : 'Ð�алаштуваннÑ� Ñ�товпчиків (виглÑ�д Ñ�пиÑ�ку)', // from v2.1.32 added 6.2.2018 'reflectOnImmediate' : 'УÑ�Ñ– зміни будуть негайно заÑ�тоÑ�овані у архіві.', // from v2.1.33 added 2.3.2018 'reflectOnUnmount' : 'ДеÑ�кі зміни не буде видно до розмонтуваннÑ� ноÑ�Ñ–Ñ�.', // from v2.1.33 added 2.3.2018 'unmountChildren' : 'Ð�аÑ�тупний(Ñ–) ноÑ�ій(Ñ—) на цьому ноÑ�Ñ–Ñ— також не змонтовані. Ви точно хочете відмонтувати ноÑ�ій?', // from v2.1.33 added 5.3.2018 'selectionInfo' : 'ІнформаціÑ� про обране', // from v2.1.33 added 7.3.2018 'hashChecker' : 'Ð�лгоритми длÑ� показу хешу файла', // from v2.1.33 added 10.3.2018 'infoItems' : 'Інформаційні об\'єкти (Панель інформації про обране)', // from v2.1.38 added 28.3.2018 'pressAgainToExit': 'Ð�атиÑ�ніть знову длÑ� виходу.', // from v2.1.38 added 1.4.2018 'toolbar' : 'Панель інÑ�трументів', // from v2.1.38 added 4.4.2018 'workspace' : 'Робочий проÑ�тір', // from v2.1.38 added 4.4.2018 'dialog' : 'Діалог', // from v2.1.38 added 4.4.2018 'all' : 'УÑ�Ñ–', // from v2.1.38 added 4.4.2018 'iconSize' : 'Розмір значків (виглÑ�д значків)', // from v2.1.39 added 7.5.2018 'editorMaximized' : 'Відкрити розгорнуте вікно редактора', // from v2.1.40 added 30.6.2018 'editorConvNoApi' : 'Через неможливіÑ�ть конвертуваннÑ� API, Ñ�конвертуйте на вебÑ�айті.', //from v2.1.40 added 8.7.2018 'editorConvNeedUpload' : 'ПіÑ�лÑ� конвертуваннÑ� вам треба завантажити за допомогою URL або збереженого файу, длÑ� збереженнÑ� конвертованого файлу.', //from v2.1.40 added 8.7.2018 'convertOn' : 'Конвертувати Ñ�айт з $1', // from v2.1.40 added 10.7.2018 'integrations' : 'Інтеграції', // from v2.1.40 added 11.7.2018 'integrationWith' : 'Цей elFinder має наÑ�тупні інтегровані Ñ�ервіÑ�и. Перевірте умови викориÑ�таннÑ�, політику приватноÑ�ті та інше перед викориÑ�таннÑ�м.', // from v2.1.40 added 11.7.2018 'showHidden' : 'Показати приховані об\'єкти', // from v2.1.41 added 24.7.2018 'hideHidden' : 'Сховати приховані об\'єкти', // from v2.1.41 added 24.7.2018 'toggleHidden' : 'Показати/Сховати приховані о\'єкти', // from v2.1.41 added 24.7.2018 'makefileTypes' : 'Типи файлів, Ñ�кі можна Ñ�творювати', // from v2.1.41 added 7.8.2018 'typeOfTextfile' : 'Тип текÑ�тового файлу', // from v2.1.41 added 7.8.2018 'add' : 'Додати', // from v2.1.41 added 7.8.2018 'theme' : 'Тема', // from v2.1.43 added 19.10.2018 'default' : 'Як зазвичай', // from v2.1.43 added 19.10.2018 'description' : 'ОпиÑ�', // from v2.1.43 added 19.10.2018 'website' : 'Веб-Ñ�айт', // from v2.1.43 added 19.10.2018 'author' : 'Ð�втор', // from v2.1.43 added 19.10.2018 'email' : 'E-mail', // from v2.1.43 added 19.10.2018 'license' : 'ЛіцензіÑ�', // from v2.1.43 added 19.10.2018 'exportToSave' : 'Об\'єкт неможливо зберегти. Щоб уникнути втрати правок вам треба екÑ�портувати Ñ–Ñ— до Ñ�ебе у приÑ�трій.', // from v2.1.44 added 1.12.2018 'dblclickToSelect': 'Двічі клацніть файл длÑ� вибору.', // from v2.1.47 added 22.1.2019 'useFullscreen' : 'ВикориÑ�товувати повноекранний режим', // from v2.1.47 added 19.2.2019 /********************************** mimetypes **********************************/ 'kindUnknown' : 'Ð�евідомо', 'kindRoot' : 'Коренева тека ноÑ�Ñ–Ñ�', // from v2.1.16 added 16.10.2016 'kindFolder' : 'Папка', 'kindSelects' : 'Вибір', // from v2.1.29 added 29.8.2017 'kindAlias' : 'Ð�ліаÑ�', 'kindAliasBroken' : 'Пошкоджений аліаÑ�', // applications 'kindApp' : 'Програма', 'kindPostscript' : 'Документ Postscript', 'kindMsOffice' : 'Документ Microsoft Office', 'kindMsWord' : 'Документ Microsoft Word', 'kindMsExcel' : 'Документ Microsoft Excel', 'kindMsPP' : 'ПрезентаціÑ� Microsoft Powerpoint', 'kindOO' : 'Документ Open Office', 'kindAppFlash' : 'Flash-додаток', 'kindPDF' : 'Портативний формат документів (PDF)', 'kindTorrent' : 'Файл Bittorrent', 'kind7z' : 'Ð�рхів 7z', 'kindTAR' : 'Ð�рхів TAR', 'kindGZIP' : 'Ð�рхів GZIP', 'kindBZIP' : 'Ð�рхів BZIP', 'kindXZ' : 'Ð�рхів XZ', 'kindZIP' : 'Ð�рхів ZIP', 'kindRAR' : 'Ð�рхів RAR', 'kindJAR' : 'Файл Java JAR', 'kindTTF' : 'Шрифт True Type', 'kindOTF' : 'Шрифт Open Type', 'kindRPM' : 'Пакунок RPM', // fonts 'kindFont' : 'Шрифт', 'kindSFNT' : 'Шрифт SFNT', 'kindEOT' : 'Шрифт Embedded Open Type', 'kindWOFF' : 'Шрифт Web Open Font Format', 'kindWOFF2' : 'Шрифт Web Open Font Format 2', // texts 'kindText' : 'ТекÑ�товий документ', 'kindTextPlain' : 'ПроÑ�тий текÑ�Ñ‚', 'kindPHP' : 'Код PHP', 'kindCSS' : 'КаÑ�кадна таблицÑ� Ñ�тилів (CSS)', 'kindHTML' : 'Документ HTML', 'kindJS' : 'Код Javascript', 'kindRTF' : 'Файл RTF', 'kindC' : 'Код C', 'kindCHeader' : 'Заголовковий код C', 'kindCPP' : 'Код C++', 'kindCPPHeader' : 'Заголовковий код C++', 'kindShell' : 'Скрипт Unix shell', 'kindPython' : 'Код Python', 'kindJava' : 'Код Java', 'kindRuby' : 'Код Ruby', 'kindPerl' : 'Код Perl', 'kindSQL' : 'Код SQL', 'kindXML' : 'Документ XML', 'kindAWK' : 'Код AWK', 'kindCSV' : 'ЗначеннÑ� розділені комою (CSV)', 'kindDOCBOOK' : 'Документ Docbook XML', 'kindMarkdown' : 'ТекÑ�Ñ‚ Markdown', // added 20.7.2015 // images 'kindImage' : 'ЗображеннÑ�', 'kindBMP' : 'ЗображеннÑ� BMP', 'kindJPEG' : 'ЗображеннÑ� JPEG', 'kindGIF' : 'ЗображеннÑ� GIF', 'kindPNG' : 'ЗображеннÑ� PNG', 'kindTIFF' : 'ЗображеннÑ� TIFF', 'kindTGA' : 'ЗображеннÑ� TGA', 'kindPSD' : 'ЗображеннÑ� Adobe Photoshop', 'kindXBITMAP' : 'ЗображеннÑ� X bitmap', 'kindPXM' : 'ЗображеннÑ� Pixelmator', // media 'kindAudio' : 'Ð�удіо', 'kindAudioMPEG' : 'Ð�удіо MPEG', 'kindAudioMPEG4' : 'Ð�удіо MPEG-4', 'kindAudioMIDI' : 'Ð�удіо MIDI', 'kindAudioOGG' : 'Ð�удіо Ogg Vorbis', 'kindAudioWAV' : 'Ð�удіо WAV', 'AudioPlaylist' : 'СпиÑ�ок відтвореннÑ� MP3', 'kindVideo' : 'Відео', 'kindVideoDV' : 'Відео DV', 'kindVideoMPEG' : 'Відео MPEG', 'kindVideoMPEG4' : 'Відео MPEG-4', 'kindVideoAVI' : 'Відео AVI', 'kindVideoMOV' : 'Відео Quick Time', 'kindVideoWM' : 'Відео Windows Media', 'kindVideoFlash' : 'Відео Flash', 'kindVideoMKV' : 'Відео Matroska', 'kindVideoOGG' : 'Відео Ogg' } }; })); PK!Ô¹fl ‡ ‡@file-manager-advanced/application/library/js/i18n/elfinder.cs.jsnu„[µü¤/** * Czech translation * @author RobiNN * @author Jay Gridley * @version 2021-06-10 */ (function(root, factory) { if (typeof define === 'function' && define.amd) { define(['elfinder'], factory); } else if (typeof exports !== 'undefined') { module.exports = factory(require('elfinder')); } else { factory(root.elFinder); } }(this, function(elFinder) { elFinder.prototype.i18.cs = { translator : 'RobiNN <robo@kelcak.com>, Jay Gridley <gridley.jay@hotmail.com>', language : 'ÄŒeÅ¡tina', direction : 'ltr', dateFormat : 'd. m. Y H:i', // will show like: 10. 06. 2021 23:37 fancyDateFormat : '$1 H:i', // will show like: Dnes 23:37 nonameDateFormat : 'ymd-His', // noname upload will show like: 210610-233701 messages : { /********************************** errors **********************************/ 'error' : 'Chyba', 'errUnknown' : 'Neznámá chyba.', 'errUnknownCmd' : 'Neznámý příkaz.', 'errJqui' : 'NedostaÄ�ující konfigurace jQuery UI. Musí být zahrnuty komponenty Selectable, Draggable a Droppable.', 'errNode' : 'elFinder vyžaduje vytvoÅ™ený DOM Elementu.', 'errURL' : 'Chybná konfigurace elFinderu! Není nastavena hodnota URL.', 'errAccess' : 'Přístup zamítnut.', 'errConnect' : 'NepodaÅ™ilo se pÅ™ipojit k backendu.', 'errAbort' : 'PÅ™ipojení zruÅ¡eno.', 'errTimeout' : 'VypÅ¡el limit pro pÅ™ipojení.', 'errNotFound' : 'Backend nenalezen.', 'errResponse' : 'Nesprávná odpovÄ›Ä� backendu.', 'errConf' : 'Nepsrávná konfigurace backendu.', 'errJSON' : 'PHP modul JSON není nainstalován.', 'errNoVolumes' : 'Není dostupný Ä�itelný oddíl.', 'errCmdParams' : 'Nesprávné parametry příkazu "$1".', 'errDataNotJSON' : 'Data nejsou ve formátu JSON.', 'errDataEmpty' : 'Data jsou prázdná.', 'errCmdReq' : 'Dotaz backendu vyžaduje název příkazu.', 'errOpen' : 'Chyba pÅ™i otevírání "$1".', 'errNotFolder' : 'Objekt není složka.', 'errNotFile' : 'Objekt není soubor.', 'errRead' : 'Chyba pÅ™i Ä�tení "$1".', 'errWrite' : 'Chyba pÅ™i zápisu do "$1".', 'errPerm' : 'Přístup odepÅ™en.', 'errLocked' : '"$1" je uzamÄ�ený a nemůže být pÅ™ejmenován, pÅ™esunut nebo smazán.', 'errExists' : 'Soubor s názvem "$1" již existuje.', 'errInvName' : 'Nesprávný název souboru.', 'errInvDirname' : 'Neplatný název adresáře.', // from v2.1.24 added 12.4.2017 'errFolderNotFound' : 'Složka nenalezena.', 'errFileNotFound' : 'Soubor nenalezen.', 'errTrgFolderNotFound' : 'Cílová složka "$1" nenalezena.', 'errPopup' : 'ProhlížeÄ� zabránil otevÅ™ení vyskakovacího okna. K otevÅ™ení souboru, povolte vyskakovací okno v prohlížeÄ�i.', 'errMkdir' : 'NepodaÅ™ilo se vytvoÅ™it složku "$1".', 'errMkfile' : 'NepodaÅ™ilo se vytvoÅ™it soubor "$1".', 'errRename' : 'NepodaÅ™ilo se pÅ™ejmenovat "$1".', 'errCopyFrom' : 'Kopírování souborů z oddílu "$1" není povoleno.', 'errCopyTo' : 'Kopírování souborů do oddílu "$1" není povoleno.', 'errMkOutLink' : 'Nelze vytvoÅ™it odkaz mimo koÅ™enového svazku.', // from v2.1 added 03.10.2015 'errUpload' : 'Chyba nahrávání.', // old name - errUploadCommon 'errUploadFile' : 'NepodaÅ™ilo se nahrát "$1".', // old name - errUpload 'errUploadNoFiles' : 'Nejsou vybrány žádné soubory k nahrání.', 'errUploadTotalSize' : 'PÅ™ekroÄ�ena maximální povolená velikost dat.', // old name - errMaxSize 'errUploadFileSize' : 'PÅ™ekroÄ�ena maximální povolená velikost souboru.', // old name - errFileMaxSize 'errUploadMime' : 'Nepovolený typ souboru.', 'errUploadTransfer' : '"$1" chyba pÅ™enosu.', 'errUploadTemp' : 'Nelze vytvoÅ™it doÄ�asný soubor pro upload.', // from v2.1 added 26.09.2015 'errNotReplace' : 'Objekt "$1" v tomto umístÄ›ní již existuje a nelze jej nahradit s jiným typem objektu.', // new 'errReplace' : 'Nelze nahradit "$1".', 'errSave' : '"$1" nelze uložit.', 'errCopy' : '"$1" nelze zkopírovat.', 'errMove' : '"$1" nelze pÅ™emístit.', 'errCopyInItself' : '"$1" nelze zkopírovat do sebe sama.', 'errRm' : '"$1" nelze odstranit.', 'errTrash' : 'Nelze se dostat do koÅ¡e.', // from v2.1.24 added 30.4.2017 'errRmSrc' : 'Nelze odstranit zdrojový soubor(y).', 'errExtract' : 'Nelze extrahovat soubory z "$1".', 'errArchive' : 'Nelze vytvoÅ™it archív.', 'errArcType' : 'Nepodporovaný typ archívu.', 'errNoArchive' : 'Soubor není archív nebo má nepodporovaný formát.', 'errCmdNoSupport' : 'Backend tento příkaz nepodporuje.', 'errReplByChild' : 'Složka "$1" nemůže být nahrazena souborem, který sama obsahuje.', 'errArcSymlinks' : 'Z bezpeÄ�nostních důvodů je zakázáno rozbalit archívy obsahující symlinky.', // edited 24.06.2012 'errArcMaxSize' : 'Soubory archívu pÅ™ekraÄ�ují maximální povolenou velikost.', 'errResize' : 'NepodaÅ™ilo se zmÄ›nit velikost obrázku "$1".', 'errResizeDegree' : 'Neplatný stupeň rotace.', // added 7.3.2013 'errResizeRotate' : 'Nelze otoÄ�it obrázek.', // added 7.3.2013 'errResizeSize' : 'Neplatná velikost obrázku.', // added 7.3.2013 'errResizeNoChange' : 'Velikost obrazu se nezmÄ›ní.', // added 7.3.2013 'errUsupportType' : 'Nepodporovaný typ souboru.', 'errNotUTF8Content' : 'Soubor "$1" nemá ani obsah kódovaný v UTF-8 a nelze zmÄ›nit.', // added 9.11.2011 'errNetMount' : 'Není možné se pÅ™ipojit "$ 1".', // added 17.04.2012 'errNetMountNoDriver' : 'Nepodporovaný protokol.', // added 17.04.2012 'errNetMountFailed' : 'PÅ™ipojení se nezdaÅ™ilo.', // added 17.04.2012 'errNetMountHostReq' : 'Hostitel se vyžaduje.', // added 18.04.2012 'errSessionExpires' : 'Relace byla ukonÄ�ena z důvodu neÄ�innosti.', 'errCreatingTempDir' : 'Nelze vytvoÅ™it doÄ�asný adresář: "$1"', 'errFtpDownloadFile' : 'Nelze stáhnout soubor z FTP: "$1"', 'errFtpUploadFile' : 'Nelze nahrát soubor na FTP: "$1"', 'errFtpMkdir' : 'NepodaÅ™ilo se vytvoÅ™it vzdálený adresář na FTP: "$1"', 'errArchiveExec' : 'PÅ™i archivaci do souboru doÅ¡lo k chybÄ›: "$1"', 'errExtractExec' : 'Chyba pÅ™i extrahování souboru: "$1"', 'errNetUnMount' : 'NepodaÅ™ilo se odpojit', // from v2.1 added 30.04.2012 'errConvUTF8' : 'Nelze pÅ™evést na UTF-8', // from v2.1 added 08.04.2014 'errFolderUpload' : 'Chcete-li nahrát složku, zkuste moderní prohlížeÄ�.', // from v2.1 added 26.6.2015 'errSearchTimeout' : 'VyprÅ¡ení Ä�asového limitu pÅ™i hledání "$1". Je Ä�ásteÄ�nÄ› výsledkem hledání.', // from v2.1 added 12.1.2016 'errReauthRequire' : 'OpÄ›tovné povolení je nutné.', // from v2.1.10 added 24.3.2016 'errMaxTargets' : 'Maximální poÄ�et volitelných pÅ™edmÄ›tů je $1.', // from v2.1.17 added 17.10.2016 'errRestore' : 'Nelze obnovit z koÅ¡e. Nelze identifikovat cíl obnovení.', // from v2.1.24 added 3.5.2017 'errEditorNotFound' : 'Editor tohoto typu souboru nebyl nalezen.', // from v2.1.25 added 23.5.2017 'errServerError' : 'DoÅ¡lo k chybÄ› na stranÄ› serveru.', // from v2.1.25 added 16.6.2017 'errEmpty' : 'Nelze vyprázdnit složku "$1".', // from v2.1.25 added 22.6.2017 'moreErrors' : 'Existují jeÅ¡tÄ› další $1 chyby.', // from v2.1.44 added 9.12.2018 'errMaxMkdirs' : 'Můžete vytvoÅ™it až $1 složek najednou.', // from v2.1.58 added 20.6.2021 /******************************* commands names ********************************/ 'cmdarchive' : 'VytvoÅ™it archív', 'cmdback' : 'ZpÄ›t', 'cmdcopy' : 'Kopírovat', 'cmdcut' : 'Vyjmout', 'cmddownload' : 'Stáhnout', 'cmdduplicate' : 'Duplikovat', 'cmdedit' : 'Upravit soubor', 'cmdextract' : 'Rozbalit archív', 'cmdforward' : 'VpÅ™ed', 'cmdgetfile' : 'Vybrat soubory', 'cmdhelp' : 'O softwaru', 'cmdhome' : 'Domů', 'cmdinfo' : 'Zobrazit informace', 'cmdmkdir' : 'Nová složka', 'cmdmkdirin' : 'Do nové složky', // from v2.1.7 added 19.2.2016 'cmdmkfile' : 'Nový soubor', 'cmdopen' : 'Otevřít', 'cmdpaste' : 'Vložit', 'cmdquicklook' : 'Náhled', 'cmdreload' : 'Obnovit', 'cmdrename' : 'PÅ™ejmenovat', 'cmdrm' : 'Smazat', 'cmdtrash' : 'Do koÅ¡e', //from v2.1.24 added 29.4.2017 'cmdrestore' : 'Obnovit', //from v2.1.24 added 3.5.2017 'cmdsearch' : 'Najít soubory', 'cmdup' : 'PÅ™ejít do nadÅ™azené složky', 'cmdupload' : 'Nahrát soubor(y)', 'cmdview' : 'Zobrazit', 'cmdresize' : 'ZmÄ›nit velikost', 'cmdsort' : 'SeÅ™adit', 'cmdnetmount' : 'PÅ™ipojit síťovou jednotku', // added 18.04.2012 'cmdnetunmount': 'Odpojit', // from v2.1 added 30.04.2012 'cmdplaces' : 'UmístÄ›ní', // added 28.12.2014 'cmdchmod' : 'ZmÄ›nit režim', // from v2.1 added 20.6.2015 'cmdopendir' : 'OtevÅ™ení složky', // from v2.1 added 13.1.2016 'cmdcolwidth' : 'Obnovení šířku sloupce', // from v2.1.13 added 12.06.2016 'cmdfullscreen': 'Celá obrazovka', // from v2.1.15 added 03.08.2016 'cmdmove' : 'Posouvat', // from v2.1.15 added 21.08.2016 'cmdempty' : 'Vyprázdnit složku', // from v2.1.25 added 22.06.2017 'cmdundo' : 'Krok zpÄ›t', // from v2.1.27 added 31.07.2017 'cmdredo' : 'UdÄ›lat to znovu', // from v2.1.27 added 31.07.2017 'cmdpreference': 'Preference', // from v2.1.27 added 03.08.2017 'cmdselectall' : 'Vyberat vÅ¡e', // from v2.1.28 added 15.08.2017 'cmdselectnone': 'Nic nevyberaÅ¥', // from v2.1.28 added 15.08.2017 'cmdselectinvert': 'Invertovat výbÄ›r', // from v2.1.28 added 15.08.2017 'cmdopennew' : 'OtevÅ™i v novém oknÄ›', // from v2.1.38 added 3.4.2018 'cmdhide' : 'Skrýt (PÅ™edvolba)', // from v2.1.41 added 24.7.2018 /*********************************** buttons ***********************************/ 'btnClose' : 'Zavřít', 'btnSave' : 'Uložit', 'btnRm' : 'Odstranit', 'btnApply' : 'Použít', 'btnCancel' : 'ZruÅ¡it', 'btnNo' : 'Ne', 'btnYes' : 'Ano', 'btnDiscard': 'Discard changes', 'btnMount' : 'PÅ™ipojit', // added 18.04.2012 'btnApprove': 'PÅ™ejít do Ä�ásti 1 $ & schválit', // from v2.1 added 26.04.2012 'btnUnmount': 'Odpojit', // from v2.1 added 30.04.2012 'btnConv' : 'PÅ™evést', // from v2.1 added 08.04.2014 'btnCwd' : 'Tu', // from v2.1 added 22.5.2015 'btnVolume' : 'Médium', // from v2.1 added 22.5.2015 'btnAll' : 'VÅ¡echno', // from v2.1 added 22.5.2015 'btnMime' : 'MIME typ', // from v2.1 added 22.5.2015 'btnFileName':'Název souboru', // from v2.1 added 22.5.2015 'btnSaveClose': 'Uložit & zavřít', // from v2.1 added 12.6.2015 'btnBackup' : 'Zálohovat', // fromv2.1 added 28.11.2015 'btnRename' : 'PÅ™ejmenovat', // from v2.1.24 added 6.4.2017 'btnRenameAll' : 'PÅ™ejmenovat vÅ¡e', // from v2.1.24 added 6.4.2017 'btnPrevious' : 'PÅ™edch ($1/$2)', // from v2.1.24 added 11.5.2017 'btnNext' : 'Další ($1/$2)', // from v2.1.24 added 11.5.2017 'btnSaveAs' : 'Uložit jako', // from v2.1.25 added 24.5.2017 /******************************** notifications ********************************/ 'ntfopen' : 'Otevírání složky', 'ntffile' : 'Otevírání souboru', 'ntfreload' : 'Obnovování obsahu složky', 'ntfmkdir' : 'Vytváření složky', 'ntfmkfile' : 'Vytváření souborů', 'ntfrm' : 'Vymazání položek', 'ntfcopy' : 'Kopírování položek', 'ntfmove' : 'PÅ™emístÄ›ní položek', 'ntfprepare' : 'Kontrola existujících položek', 'ntfrename' : 'PÅ™ejmenovávání souborů', 'ntfupload' : 'Nahrávání souborů', 'ntfdownload' : 'Stahování souborů', 'ntfsave' : 'Ukládání souborů', 'ntfarchive' : 'Vytváření archívu', 'ntfextract' : 'Rozbalování souborů z archívu', 'ntfsearch' : 'Vyhledávání souborů', 'ntfresize' : 'ZmÄ›na velikosti obrázků', 'ntfsmth' : 'ÄŒekejte prosím...', 'ntfloadimg' : 'NaÄ�ítání obrázků', 'ntfnetmount' : 'PÅ™ipojení síťového média', // added 18.04.2012 'ntfnetunmount': 'Odpojení síťového média', // from v2.1 added 30.04.2012 'ntfdim' : 'Získejte rozmÄ›r obrazu', // added 20.05.2013 'ntfreaddir' : 'PÅ™eÄ�tÄ›te si informace o složce', // from v2.1 added 01.07.2013 'ntfurl' : 'Získejte adresu URL odkazu', // from v2.1 added 11.03.2014 'ntfchmod' : 'ZmÄ›na souboru', // from v2.1 added 20.6.2015 'ntfpreupload': 'Zkontrolujte název nahravaného souboru', // from v2.1 added 31.11.2015 'ntfzipdl' : 'VytvoÅ™it soubor ke stažení', // from v2.1.7 added 23.1.2016 'ntfparents' : 'Získání informací o cestÄ›', // from v2.1.17 added 2.11.2016 'ntfchunkmerge': 'Zpracování nahraného souboru', // from v2.1.17 added 2.11.2016 'ntftrash' : 'Hodit do koÅ¡e', // from v2.1.24 added 2.5.2017 'ntfrestore' : 'Obnova z koÅ¡e', // from v2.1.24 added 3.5.2017 'ntfchkdir' : 'Kontrola cílové složky', // from v2.1.24 added 3.5.2017 'ntfundo' : 'ZruÅ¡it pÅ™edchozí operaci', // from v2.1.27 added 31.07.2017 'ntfredo' : 'Obnovit pÅ™edchozí zruÅ¡ení', // from v2.1.27 added 31.07.2017 'ntfchkcontent' : 'Kontrola obsahu', // from v2.1.41 added 3.8.2018 /*********************************** volumes *********************************/ 'volume_Trash' : 'KoÅ¡', //from v2.1.24 added 29.4.2017 /************************************ dates **********************************/ 'dateUnknown' : 'neznámý', 'Today' : 'Dnes', 'Yesterday' : 'VÄ�era', 'msJan' : 'Led', 'msFeb' : 'Úno', 'msMar' : 'BÅ™e', 'msApr' : 'Dub', 'msMay' : 'KvÄ›', 'msJun' : 'ÄŒer', 'msJul' : 'ÄŒec', 'msAug' : 'Srp', 'msSep' : 'Zář', 'msOct' : 'Říj', 'msNov' : 'Lis', 'msDec' : 'Pro', 'January' : 'Leden', 'February' : 'Únor', 'March' : 'BÅ™ezen', 'April' : 'Duben', 'May' : 'KvÄ›ten', 'June' : 'ÄŒerven', 'July' : 'ÄŒervenec', 'August' : 'Srpen', 'September' : 'Září', 'October' : 'Říjen', 'November' : 'Listopad', 'December' : 'Prosinec', 'Sunday' : 'NedÄ›le', 'Monday' : 'PondÄ›lí', 'Tuesday' : 'Úterý', 'Wednesday' : 'StÅ™eda', 'Thursday' : 'ÄŒtvrtek', 'Friday' : 'Pátek', 'Saturday' : 'Sobota', 'Sun' : 'Ne', 'Mon' : 'Po', 'Tue' : 'Út', 'Wed' : 'St', 'Thu' : 'ÄŒt', 'Fri' : 'Pá', 'Sat' : 'So', /******************************** sort variants ********************************/ 'sortname' : 'dle jména', 'sortkind' : 'dle typu', 'sortsize' : 'dle velikosti', 'sortdate' : 'dle data', 'sortFoldersFirst' : 'NapÅ™ed složky', 'sortperm' : 'dle povolení', // from v2.1.13 added 13.06.2016 'sortmode' : 'dle módu', // from v2.1.13 added 13.06.2016 'sortowner' : 'dle majitele', // from v2.1.13 added 13.06.2016 'sortgroup' : 'dle skupiny', // from v2.1.13 added 13.06.2016 'sortAlsoTreeview' : 'Také stromové zobrazení', // from v2.1.15 added 01.08.2016 /********************************** new items **********************************/ 'untitled file.txt' : 'Nový soubor.txt', // added 10.11.2015 'untitled folder' : 'Nová složka', // added 10.11.2015 'Archive' : 'Nový archiv', // from v2.1 added 10.11.2015 'untitled file' : 'Nový soubor.$1', // from v2.1.41 added 6.8.2018 'extentionfile' : '$1 soubor', // from v2.1.41 added 6.8.2018 'extentiontype' : '$1: $2', // from v2.1.43 added 17.10.2018 /********************************** messages **********************************/ 'confirmReq' : 'Požadováno potvrzení', 'confirmRm' : 'Opravdu chcete odstranit tyto soubory?
          Operace nelze vrátit!', 'confirmRepl' : 'Nahradit staré soubory novými?', 'confirmRest' : 'Nahradit stávající položku položkou z koše?', // fromv2.1.24 added 5.5.2017 'confirmConvUTF8' : 'Není v UTF-8, převést do UTF-8?
          Obsah po převodu se stává UTF-8.', // from v2.1 added 08.04.2014 'confirmNonUTF8' : 'Kódování tohoto souboru nemoholo rozpoznán. Pro úpravy je třeba do�asně převést do kódování UTF-8.
          Prosím, vyberte kódování znaků souboru.', // from v2.1.19 added 28.11.2016 'confirmNotSave' : 'Byl změněn.
          Pokud obsahuje neuložené změny, dojde ke ztrátě práce.', // from v2.1 added 15.7.2015 'confirmTrash' : 'Opravdu chcete položky přesunout do koše?', //from v2.1.24 added 29.4.2017 'confirmMove' : 'Opravdu chcete položky přesunout do "$1"?', //from v2.1.50 added 27.7.2019 'apllyAll' : 'Pro všechny', 'name' : 'Název', 'size' : 'Velikost', 'perms' : 'Práva', 'modify' : 'Upravený', 'kind' : 'Typ', 'read' : '�tení', 'write' : 'zápis', 'noaccess' : 'přístup odepřen', 'and' : 'a', 'unknown' : 'neznámý', 'selectall' : 'Vybrat všechny položky', 'selectfiles' : 'Vybrat položku(y)', 'selectffile' : 'Vybrat první položku', 'selectlfile' : 'Vybrat poslední položku', 'viewlist' : 'Seznam', 'viewicons' : 'Ikony', 'viewSmall' : 'Malé ikony', // from v2.1.39 added 22.5.2018 'viewMedium' : 'Střední ikony', // from v2.1.39 added 22.5.2018 'viewLarge' : 'Velké ikony', // from v2.1.39 added 22.5.2018 'viewExtraLarge' : 'Extra velké ikony', // from v2.1.39 added 22.5.2018 'places' : 'Místa', 'calc' : 'Vypo�ítat', 'path' : 'Cesta', 'aliasfor' : 'Zástupce pro', 'locked' : 'Uzam�ený', 'dim' : 'Rozměry', 'files' : 'Soubory', 'folders' : 'Složky', 'items' : 'Položky', 'yes' : 'ano', 'no' : 'ne', 'link' : 'Odkaz', 'searcresult' : 'Výsledky hledání', 'selected' : 'vybrané položky', 'about' : 'O softwaru', 'shortcuts' : 'Zkratky', 'help' : 'Nápověda', 'webfm' : 'Webový správce souborů', 'ver' : 'Verze', 'protocolver' : 'verze protokolu', 'homepage' : 'Domovská stránka projektu', 'docs' : 'Dokumentace', 'github' : 'Najdete nás na Gitgube', 'twitter' : 'Následujte nás na Twitteri', 'facebook' : 'Připojte se k nám na Facebooku', 'team' : 'Tým', 'chiefdev' : 'séf vývojářů', 'developer' : 'vývojár', 'contributor' : 'spolupracovník', 'maintainer' : 'údržba', 'translator' : 'překlad', 'icons' : 'Ikony', 'dontforget' : 'a nezapomeňte si vzít plavky', 'shortcutsof' : 'Zkratky nejsou povoleny', 'dropFiles' : 'Sem přetáhněte soubory', 'or' : 'nebo', 'selectForUpload' : 'Vyberte soubory', 'moveFiles' : 'Přesunout sobory', 'copyFiles' : 'Zkopírovat soubory', 'restoreFiles' : 'Obnovit položky', // from v2.1.24 added 5.5.2017 'rmFromPlaces' : 'Odstranit z míst', 'aspectRatio' : 'Poměr stran', 'scale' : 'Měřítko', 'width' : 'Šířka', 'height' : 'Výška', 'resize' : 'Změnit vel.', 'crop' : 'Ořezat', 'rotate' : 'Oto�it', 'rotate-cw' : 'Oto�it o +90 stupňů', 'rotate-ccw' : 'Oto�it o -90 stupňů', 'degree' : ' stupňů', 'netMountDialogTitle' : 'Připojení síťového média', // added 18.04.2012 'protocol' : 'Protokol', // added 18.04.2012 'host' : 'Host', // added 18.04.2012 'port' : 'Port', // added 18.04.2012 'user' : 'Uživatel', // added 18.04.2012 'pass' : 'Heslo', // added 18.04.2012 'confirmUnmount' : 'Chcete odpojit $1?', // from v2.1 added 30.04.2012 'dropFilesBrowser': 'Přemístěte nebo přesuňte soubory z prohlíže�e', // from v2.1 added 30.05.2012 'dropPasteFiles' : 'Zde přemístěte nebo přesuňte soubory a adresy URL', // from v2.1 added 07.04.2014 'encoding' : 'Kódování', // from v2.1 added 19.12.2014 'locale' : 'Lokalizce', // from v2.1 added 19.12.2014 'searchTarget' : 'Cíl: $1', // from v2.1 added 22.5.2015 'searchMime' : 'Vyhledávání podle vstupního MIME typu', // from v2.1 added 22.5.2015 'owner' : 'Majitel', // from v2.1 added 20.6.2015 'group' : 'Skupina', // from v2.1 added 20.6.2015 'other' : 'Ostatní', // from v2.1 added 20.6.2015 'execute' : 'Spustit', // from v2.1 added 20.6.2015 'perm' : 'Povolení', // from v2.1 added 20.6.2015 'mode' : 'Režim', // from v2.1 added 20.6.2015 'emptyFolder' : 'Složka je prázdná', // from v2.1.6 added 30.12.2015 'emptyFolderDrop' : 'Složka je prázdná, přesunout nebo zkontrolovat položky', // from v2.1.6 added 30.12.2015 'emptyFolderLTap' : 'Složka je prázdná, dlouhim kliknutím přidáte položky', // from v2.1.6 added 30.12.2015 'quality' : 'Kvalita', // from v2.1.6 added 5.1.2016 'autoSync' : 'Automatická synchronizace', // from v2.1.6 added 10.1.2016 'moveUp' : 'Přesunout nahoru', // from v2.1.6 added 18.1.2016 'getLink' : 'Získat URL odkaz', // from v2.1.7 added 9.2.2016 'selectedItems' : 'Vybrané položky ($1)', // from v2.1.7 added 2.19.2016 'folderId' : 'ID složky', // from v2.1.10 added 3.25.2016 'offlineAccess' : 'Povolit přístup offline', // from v2.1.10 added 3.25.2016 'reAuth' : 'Znovu ověřit', // from v2.1.10 added 3.25.2016 'nowLoading' : 'Na�ítání...', // from v2.1.12 added 4.26.2016 'openMulti' : 'Otevření více souborů', // from v2.1.12 added 5.14.2016 'openMultiConfirm': 'Pokoušíte se otevřít soubor $1. Chcete jej otevřít v prohlíže�i?', // from v2.1.12 added 5.14.2016 'emptySearch' : 'Výsledky hledání jsou prázdné', // from v2.1.12 added 5.16.2016 'editingFile' : 'Upravujete soubor.', // from v2.1.13 added 6.3.2016 'hasSelected' : 'Vybrali jste $1 položky.', // from v2.1.13 added 6.3.2016 'hasClipboard' : 'Máte $1 položky v schránce.', // from v2.1.13 added 6.3.2016 'incSearchOnly' : 'Inkrementální hledání je pouze z aktuálního zobrazení.', // from v2.1.13 added 6.30.2016 'reinstate' : 'Obnovit', // from v2.1.15 added 3.8.2016 'complete' : '$1 kompletní', // from v2.1.15 added 21.8.2016 'contextmenu' : 'Kontextové menu', // from v2.1.15 added 9.9.2016 'pageTurning' : 'Otá�ení stránky', // from v2.1.15 added 10.9.2016 'volumeRoots' : 'Kořeny média', // from v2.1.16 added 16.9.2016 'reset' : 'Obnovit', // from v2.1.16 added 1.10.2016 'bgcolor' : 'Barva pozadí', // from v2.1.16 added 1.10.2016 'colorPicker' : 'Výběr barvy', // from v2.1.16 added 1.10.2016 '8pxgrid' : '8px mřížka', // from v2.1.16 added 4.10.2016 'enabled' : 'Povoleno', // from v2.1.16 added 4.10.2016 'disabled' : 'Zakázáno', // from v2.1.16 added 4.10.2016 'emptyIncSearch' : 'Výsledky hledání jsou prázdné v aktuálním zobrazení.\\Stisknutím tla�ítka [Enter] rozšíříte vyhledávání cíle.', // from v2.1.16 added 5.10.2016 'emptyLetSearch' : 'Výsledky vyhledávání prvního listu jsou v aktuálním zobrazení prázdné.', // from v2.1.23 added 24.3.2017 'textLabel' : 'Nápis textu', // from v2.1.17 added 13.10.2016 'minsLeft' : '$1 minut zůstává', // from v2.1.17 added 13.11.2016 'openAsEncoding' : 'Otevřít pomocí zvoleného kódování', // from v2.1.19 added 2.12.2016 'saveAsEncoding' : 'Uložit s vybraným kódováním', // from v2.1.19 added 2.12.2016 'selectFolder' : 'Vyberte složku', // from v2.1.20 added 13.12.2016 'firstLetterSearch': 'Hledání prvního listu', // from v2.1.23 added 24.3.2017 'presets' : 'Předvolby', // from v2.1.25 added 26.5.2017 'tooManyToTrash' : 'Je to příliš mnoho položek, takže se nemohou dostat do koše.', // from v2.1.25 added 9.6.2017 'TextArea' : 'Textarea', // from v2.1.25 added 14.6.2017 'folderToEmpty' : 'Vyprázdnit složku "$1".', // from v2.1.25 added 22.6.2017 'filderIsEmpty' : 'Ve složce "$1" nejsou žádné položky.', // from v2.1.25 added 22.6.2017 'preference' : 'Předvolby', // from v2.1.26 added 28.6.2017 'language' : 'Nastavte jazyk', // from v2.1.26 added 28.6.2017 'clearBrowserData': 'Inicializujte nastavení uložená v tomto prohlíže�i', // from v2.1.26 added 28.6.2017 'toolbarPref' : 'Nastavení panelu nástrojů', // from v2.1.27 added 2.8.2017 'charsLeft' : '...$1 znaků zbývá.', // from v2.1.29 added 30.8.2017 'linesLeft' : '...$1 řádků zůstává.', // from v2.1.52 added 16.1.2020 'sum' : 'Sou�et', // from v2.1.29 added 28.9.2017 'roughFileSize' : 'Hrubá velikost souboru', // from v2.1.30 added 2.11.2017 'autoFocusDialog' : 'Zaměření na prvek dialogu s mouseover', // from v2.1.30 added 2.11.2017 'select' : 'Vybrat', // from v2.1.30 added 23.11.2017 'selectAction' : 'Akce při vybraném souboru', // from v2.1.30 added 23.11.2017 'useStoredEditor' : 'Otevřít pomocí naposledy použitého editoru', // from v2.1.30 added 23.11.2017 'selectinvert' : 'Obrátit výběr položek', // from v2.1.30 added 25.11.2017 'renameMultiple' : 'Opravdu chcete přejmenovat $1 vybraných položek, jako například $2
          Není to možné vrátit zpÄ›t!', // from v2.1.31 added 4.12.2017 'batchRename' : 'Batch pÅ™ejmenování', // from v2.1.31 added 8.12.2017 'plusNumber' : '+ Číslo', // from v2.1.31 added 8.12.2017 'asPrefix' : 'PÅ™idat pÅ™edponu', // from v2.1.31 added 8.12.2017 'asSuffix' : 'PÅ™idat příponu', // from v2.1.31 added 8.12.2017 'changeExtention' : 'ZmÄ›nit příponu', // from v2.1.31 added 8.12.2017 'columnPref' : 'Nastavení sloupců (Zobrazení seznamu)', // from v2.1.32 added 6.2.2018 'reflectOnImmediate' : 'VÅ¡echny zmÄ›ny se okamžitÄ› projeví v archivu.', // from v2.1.33 added 2.3.2018 'reflectOnUnmount' : 'Jakékoliv zmÄ›ny se nebudou odrážet, dokud nebude tento svazek odpojen.', // from v2.1.33 added 2.3.2018 'unmountChildren' : 'Následující svazky namontované na tomto svazku jsou také odpojeny. Opravdu ji odpojíte?', // from v2.1.33 added 5.3.2018 'selectionInfo' : 'Informace o výbÄ›ru', // from v2.1.33 added 7.3.2018 'hashChecker' : 'Algoritmy pro zobrazení hashování souborů', // from v2.1.33 added 10.3.2018 'infoItems' : 'InformaÄ�ní položky (panel s informacemi o výbÄ›ru)', // from v2.1.38 added 28.3.2018 'pressAgainToExit': 'Dalším stisknutím opustíte.', // from v2.1.38 added 1.4.2018 'toolbar' : 'Panel nástrojů', // from v2.1.38 added 4.4.2018 'workspace' : 'Pracovní prostor', // from v2.1.38 added 4.4.2018 'dialog' : 'Dialog', // from v2.1.38 added 4.4.2018 'all' : 'VÅ¡echno', // from v2.1.38 added 4.4.2018 'iconSize' : 'Velikost ikony (zobrazení ikon)', // from v2.1.39 added 7.5.2018 'editorMaximized' : 'OtevÅ™ete maximalizované okno editora', // from v2.1.40 added 30.6.2018 'editorConvNoApi' : 'Protože konverze podle API momentálnÄ› není k dispozici, pÅ™eveÄ�te na webové stránce.', //from v2.1.40 added 8.7.2018 'editorConvNeedUpload' : 'Po konverzi musíte nahrát pÅ™eveden soubor pomocí URL položky nebo stažený soubor k uložení pÅ™evedeného souboru.', //from v2.1.40 added 8.7.2018 'convertOn' : 'PÅ™evést na stránce $1', // from v2.1.40 added 10.7.2018 'integrations' : 'Integrace', // from v2.1.40 added 11.7.2018 'integrationWith' : 'Tento elFinder má integrované následující externí služby. PÅ™ed použitím zkontrolujte podmínky používání, zásady ochrany osobních údajů atd.', // from v2.1.40 added 11.7.2018 'showHidden' : 'Zobrazit skryté položky', // from v2.1.41 added 24.7.2018 'hideHidden' : 'Skrýt skryté položky', // from v2.1.41 added 24.7.2018 'toggleHidden' : 'Zobrazit/skrýt skryté položky', // from v2.1.41 added 24.7.2018 'makefileTypes' : 'Typy souborů, jež mají být povoleny pomocí "Nový soubor"', // from v2.1.41 added 7.8.2018 'typeOfTextfile' : 'Typ textového souboru', // from v2.1.41 added 7.8.2018 'add' : 'PÅ™idat', // from v2.1.41 added 7.8.2018 'theme' : 'Téma', // from v2.1.43 added 19.10.2018 'default' : 'Výchozí', // from v2.1.43 added 19.10.2018 'description' : 'Popis', // from v2.1.43 added 19.10.2018 'website' : 'Stránka', // from v2.1.43 added 19.10.2018 'author' : 'Autor', // from v2.1.43 added 19.10.2018 'email' : 'E-mail', // from v2.1.43 added 19.10.2018 'license' : 'Licence', // from v2.1.43 added 19.10.2018 'exportToSave' : 'Tuto položku nelze uložit. Abyste se vyhnuli ztrátÄ› úprav, musíte je exportovat do poÄ�ítaÄ�e.', // from v2.1.44 added 1.12.2018 'dblclickToSelect': 'Poklepáním na soubor jej vyberte.', // from v2.1.47 added 22.1.2019 'useFullscreen' : 'Použít režim celé obrazovky', // from v2.1.47 added 19.2.2019 /********************************** mimetypes **********************************/ 'kindUnknown' : 'Neznámý', 'kindRoot' : 'KoÅ™en média', // from v2.1.16 added 16.10.2016 'kindFolder' : 'Složka', 'kindSelects' : 'VýbÄ›ry', // from v2.1.29 added 29.8.2017 'kindAlias' : 'Alias', 'kindAliasBroken' : 'Zlomený alias', // applications 'kindApp' : 'Aplikace', 'kindPostscript' : 'Dokument Postscriptu', 'kindMsOffice' : 'Dokument Microsoft Office', 'kindMsWord' : 'Dokument Microsoft Word', 'kindMsExcel' : 'Dokument Microsoft Excel', 'kindMsPP' : 'Prezentace Microsoft Powerpoint', 'kindOO' : 'Otevřít dokument Office', 'kindAppFlash' : 'Flash aplikace', 'kindPDF' : 'PDF', 'kindTorrent' : 'Soubor BitTorrent', 'kind7z' : 'Archív 7z', 'kindTAR' : 'Archív TAR', 'kindGZIP' : 'Archív GZIP', 'kindBZIP' : 'Archív BZIP', 'kindXZ' : 'Archív XZ', 'kindZIP' : 'Archív ZIP', 'kindRAR' : 'Archív RAR', 'kindJAR' : 'Soubor Java JAR', 'kindTTF' : 'True Type font', 'kindOTF' : 'Open Type font', 'kindRPM' : 'RPM balíÄ�ek', // fonts 'kindFont' : 'Font', 'kindSFNT' : 'SFNT font', 'kindEOT' : 'Embedded Open Type font', 'kindWOFF' : 'Web Open Font Format', 'kindWOFF2' : 'Web Open Font Format 2', // texts 'kindText' : 'Textový dokument', 'kindTextPlain' : 'ÄŒistý text', 'kindPHP' : 'PHP zdrojový kód', 'kindCSS' : 'Kaskádové styly', 'kindHTML' : 'HTML dokument', 'kindJS' : 'Javascript zdrojový kód', 'kindRTF' : 'Rich Text Format', 'kindC' : 'C zdrojový kód', 'kindCHeader' : 'C hlaviÄ�ka', 'kindCPP' : 'C++ zdrojový kód', 'kindCPPHeader' : 'C++ hlaviÄ�ka', 'kindShell' : 'Unix shell skript', 'kindPython' : 'Python zdrojový kód', 'kindJava' : 'Java zdrojový kód', 'kindRuby' : 'Ruby zdrojový kód', 'kindPerl' : 'Perl skript', 'kindSQL' : 'SQL zdrojový kód', 'kindXML' : 'Dokument XML', 'kindAWK' : 'AWK zdrojový kód', 'kindCSV' : 'CSV', 'kindDOCBOOK' : 'Docbook XML dokument', 'kindMarkdown' : 'Markdown text', // added 20.7.2015 // images 'kindImage' : 'Obrázek', 'kindBMP' : 'Obrázek BMP', 'kindJPEG' : 'Obrázek JPEG', 'kindGIF' : 'Obrázek GIF', 'kindPNG' : 'Obrázek PNG', 'kindTIFF' : 'Obrázek TIFF', 'kindTGA' : 'Obrázek TGA', 'kindPSD' : 'Obrázek Adobe Photoshop', 'kindXBITMAP' : 'Obrázek X bitmapa', 'kindPXM' : 'Obrázek Pixelmator', // media 'kindAudio' : 'Audio sobory', 'kindAudioMPEG' : 'MPEG audio', 'kindAudioMPEG4' : 'MPEG-4 audio', 'kindAudioMIDI' : 'MIDI audio', 'kindAudioOGG' : 'Ogg Vorbis audio', 'kindAudioWAV' : 'WAV audio', 'AudioPlaylist' : 'MP3 playlist', 'kindVideo' : 'Video sobory', 'kindVideoDV' : 'DV video', 'kindVideoMPEG' : 'MPEG video', 'kindVideoMPEG4' : 'MPEG-4 video', 'kindVideoAVI' : 'AVI video', 'kindVideoMOV' : 'Quick Time video', 'kindVideoWM' : 'Windows Media video', 'kindVideoFlash' : 'Flash video', 'kindVideoMKV' : 'Matroska video', 'kindVideoOGG' : 'Ogg video' } }; })); PK!GhÒɉɉ@file-manager-advanced/application/library/js/i18n/elfinder.sk.jsnu„[µü¤/** * Slovak translation * @author RobiNN * @author Jakub ÄŽuraÅ¡ * @version 2025-11-09 */ (function(root, factory) { if (typeof define === 'function' && define.amd) { define(['elfinder'], factory); } else if (typeof exports !== 'undefined') { module.exports = factory(require('elfinder')); } else { factory(root.elFinder); } }(this, function(elFinder) { elFinder.prototype.i18.sk = { translator : 'RobiNN <robo@kelcak.com>, Jakub ÄŽuraÅ¡ <jkblmr@gmail.com>', language : 'SlovenÄ�ina', direction : 'ltr', dateFormat : 'd.m.Y H:i', // will show like: 09.11.2025 12:25 fancyDateFormat : '$1 H:i', // will show like: Dnes 12:25 nonameDateFormat : 'ymd-His', // noname upload will show like: 251109-122543 messages : { /********************************** errors **********************************/ 'error' : 'Chyba', 'errUnknown' : 'Neznáma chyba.', 'errUnknownCmd' : 'Neznámy príkaz.', 'errJqui' : 'Nesprávna jQuery UI konfigurácia. Selectable, draggable a droppable musia byÅ¥ naÄ�ítané.', 'errNode' : 'elFinder vyžaduje vytvorenie DOM elementu.', 'errURL' : 'Nesprávna elFinder konfigurácia! URL nie je definovaná.', 'errAccess' : 'Prístup zamietnutý.', 'errConnect' : 'Nepodarilo sa pripojiÅ¥ do backendu.', 'errAbort' : 'Spojenie bolo preruÅ¡ené.', 'errTimeout' : 'ÄŒasový limit vyprÅ¡al.', 'errNotFound' : 'Backend nenájdený.', 'errResponse' : 'Nesprávna backend odpoveÄ�.', 'errConf' : 'Nesprávna backend konfigurácia.', 'errJSON' : 'PHP JSON modul nie je nainÅ¡talovaný.', 'errNoVolumes' : 'Nie sú dostupné žiadne Ä�itateľné média.', 'errCmdParams' : 'Nesprávne parametre pre príkaz "$1".', 'errDataNotJSON' : 'Dáta nie sú formátu JSON.', 'errDataEmpty' : 'Prázdne dáta.', 'errCmdReq' : 'Backend požiadavka požaduje názov príkazu.', 'errOpen' : 'Nie je možné otvoriÅ¥ "$1".', 'errNotFolder' : 'Objekt nie je prieÄ�inok.', 'errNotFile' : 'Objekt nie je súbor.', 'errRead' : 'Nie je možné preÄ�ítaÅ¥ "$1".', 'errWrite' : 'Nie je možné písaÅ¥ do "$1".', 'errPerm' : 'Prístup zamietnutý.', 'errLocked' : '"$1" je uzamknutý a nemôže byÅ¥ premenovaný, presunutý alebo odstránený.', 'errExists' : 'Položka s názvom "$1" už existuje.', 'errInvName' : 'Neplatný názov súboru.', 'errInvDirname' : 'Neplatný názov prieÄ�inka.', // from v2.1.24 added 12.4.2017 'errFolderNotFound' : 'PrieÄ�inok nebol nájdený.', 'errFileNotFound' : 'Súbor nenájdený.', 'errTrgFolderNotFound' : 'Cieľový prieÄ�inok "$1" sa nenaÅ¡iel.', 'errPopup' : 'PrehliadaÄ� zabránil otvoreniu vyskakovacieho okna. Pre otvorenie súboru povoľte vyskakovacie okná.', 'errMkdir' : 'Nepodarilo sa vytvoriÅ¥ prieÄ�inok "$1".', 'errMkfile' : 'Nepodarilo sa vytvoriÅ¥ súbor "$1".', 'errRename' : 'Nepodarilo sa premenovaÅ¥ "$1".', 'errCopyFrom' : 'Kopírovanie súborov z média "$1" nie je povolené.', 'errCopyTo' : 'Kopírovanie súborov na médium "$1" nie je povolené.', 'errMkOutLink' : 'Nie je možné vytvoriÅ¥ odkaz mimo koreňového zväzku.', // from v2.1 added 03.10.2015 'errUpload' : 'Chyba pri nahrávaní.', // old name - errUploadCommon 'errUploadFile' : 'Nepodarilo sa nahraÅ¥ "$1".', // old name - errUpload 'errUploadNoFiles' : 'Neboli nájdené žiadne súbory na nahranie.', 'errUploadTotalSize' : 'Dáta prekraÄ�ujú maximálnu povolenú veľkosÅ¥.', // old name - errMaxSize 'errUploadFileSize' : 'Súbor prekraÄ�uje maximálnu povolenú veľkosÅ¥.', // old name - errFileMaxSize 'errUploadMime' : 'Nepovolený typ súboru.', 'errUploadTransfer' : 'Problém s nahrávaním "$1".', 'errUploadTemp' : 'Nepodarilo sa vytvoriÅ¥ doÄ�asný súbor na nahranie.', // from v2.1 added 26.09.2015 'errNotReplace' : 'Objekt "$1" na tomto mieste už existuje a nemôže byÅ¥ nahradený objektom iného typu.', // new 'errReplace' : 'Nie je možné nahradiÅ¥ "$1".', 'errSave' : 'Nie je možné uložiÅ¥ "$1".', 'errCopy' : 'Nie je možné kopírovaÅ¥ "$1".', 'errMove' : 'Nie je možné preniesÅ¥ "$1".', 'errCopyInItself' : 'Nie je možné kopírovaÅ¥ "$1" do seba.', 'errRm' : 'Nie je možné vymazaÅ¥ "$1".', 'errTrash' : 'Nie je možné presunúť do koÅ¡a.', // from v2.1.24 added 30.4.2017 'errRmSrc' : 'Nie je možné odstrániÅ¥ zdrojový/é súbor/y.', 'errExtract' : 'Nie je možné extrahovaÅ¥ súbory z "$1".', 'errArchive' : 'Nie je možné vytvoriÅ¥ archív.', 'errArcType' : 'Nepodporovaný typ archívu.', 'errNoArchive' : 'Súbor nie je archív alebo má nepodporovaný typ archívu.', 'errCmdNoSupport' : 'Backend nepodporuje tento príkaz.', 'errReplByChild' : 'PrieÄ�inok "$1" nemôže byÅ¥ nahradený položkou, ktorú už obsahuje.', 'errArcSymlinks' : 'Z bezpeÄ�nostných dôvodov bolo zakázané extrahovanie archívov obsahujúcich symlinky, alebo súborov s nepovolenými názvami.', // edited 24.06.2012 'errArcMaxSize' : 'Súbory archívu prekraÄ�ujú maximálnu povolenú veľkosÅ¥.', 'errResize' : 'Nie je možné zmeniÅ¥ veľkosÅ¥ "$1".', 'errResizeDegree' : 'Neplatný stupeň otoÄ�enia.', // added 7.3.2013 'errResizeRotate' : 'Nie je možné otoÄ�iÅ¥ obrázok.', // added 7.3.2013 'errResizeSize' : 'Neplatná veľkosÅ¥ obrázka.', // added 7.3.2013 'errResizeNoChange' : 'VeľkosÅ¥ obrázku sa nezmenila.', // added 7.3.2013 'errUsupportType' : 'Nepodporovaný typ súboru.', 'errNotUTF8Content' : 'Súbor "$1" nie je v UTF-8 a nemôže byÅ¥ upravený.', // added 9.11.2011 'errNetMount' : 'Nie je možné pripojiÅ¥ "$1".', // added 17.04.2012 'errNetMountNoDriver' : 'Nepodporovaný protokol.', // added 17.04.2012 'errNetMountFailed' : 'Pripájanie zlyhalo.', // added 17.04.2012 'errNetMountHostReq' : 'HosÅ¥ je požadovaný.', // added 18.04.2012 'errSessionExpires' : 'VaÅ¡a relácia vyprÅ¡ala kvôli neÄ�innosti.', 'errCreatingTempDir' : 'Nepodarilo sa vytvoriÅ¥ doÄ�asný adresár: "$1"', 'errFtpDownloadFile' : 'Nie je možné stiahnuÅ¥ súbor z FTP: "$1"', 'errFtpUploadFile' : 'Nie je možné nahraÅ¥ súbor na FTP: "$1"', 'errFtpMkdir' : 'Nedá sa vytvoriÅ¥ vzdialený adresár na FTP: "$1"', 'errArchiveExec' : 'Chyba pri archivácii súborov: "$1"', 'errExtractExec' : 'Chyba pri extrahovaní súborov: "$1"', 'errNetUnMount' : 'Nepodarilo sa odpojiÅ¥', // from v2.1 added 30.04.2012 'errConvUTF8' : 'Nie je prevoditeľný na UTF-8', // from v2.1 added 08.04.2014 'errFolderUpload' : 'Vyskúšajte moderný prehliadaÄ�, ak chcete nahraÅ¥ prieÄ�inok.', // from v2.1 added 26.6.2015 'errSearchTimeout' : 'VyprÅ¡al Ä�asový limit pri hľadaní "$1". Výsledok vyhľadávania je Ä�iastoÄ�ný.', // from v2.1 added 12.1.2016 'errReauthRequire' : 'Opätovné povolenie je potrebné.', // from v2.1.10 added 24.3.2016 'errMaxTargets' : 'Maximálny poÄ�et voliteľných položiek je $1.', // from v2.1.17 added 17.10.2016 'errRestore' : 'Nepodarilo sa obnoviÅ¥ z koÅ¡a. Cieľ obnovenia nie je možné identifikovaÅ¥.', // from v2.1.24 added 3.5.2017 'errEditorNotFound' : 'Editor tohto typu súboru nebol nájdený.', // from v2.1.25 added 23.5.2017 'errServerError' : 'Vyskytla sa chyba na strane servera.', // from v2.1.25 added 16.6.2017 'errEmpty' : 'Nepodarilo sa vyprázdniÅ¥ prieÄ�inok "$1".', // from v2.1.25 added 22.6.2017 'moreErrors' : 'Existujú eÅ¡te Ä�alÅ¡ie $1 chyby.', // from v2.1.44 added 9.12.2018 'errMaxMkdirs' : 'Môžete vytvoriÅ¥ až $1 prieÄ�inkov naraz.', // from v2.1.58 added 20.6.2021 /******************************* commands names ********************************/ 'cmdarchive' : 'VytvoriÅ¥ archív', 'cmdback' : 'Späť', 'cmdcopy' : 'KopírovaÅ¥', 'cmdcut' : 'Vystrihnúť', 'cmddownload' : 'StiahnuÅ¥', 'cmdduplicate' : 'DuplikovaÅ¥', 'cmdedit' : 'UpraviÅ¥ súbor', 'cmdextract' : 'ExtrahovaÅ¥ súbory z archívu', 'cmdforward' : 'ÄŽalej', 'cmdgetfile' : 'VybraÅ¥ súbory', 'cmdhelp' : 'O tomto softvéri', 'cmdhome' : 'Domov', 'cmdinfo' : 'Info', 'cmdmkdir' : 'Nový prieÄ�inok', 'cmdmkdirin' : 'Do novej zložky', // from v2.1.7 added 19.2.2016 'cmdmkfile' : 'Nový súbor', 'cmdopen' : 'OtvoriÅ¥', 'cmdpaste' : 'VložiÅ¥', 'cmdquicklook' : 'Náhľad', 'cmdreload' : 'ObnoviÅ¥', 'cmdrename' : 'PremenovaÅ¥', 'cmdrm' : 'VymazaÅ¥', 'cmdtrash' : 'Do koÅ¡a', //from v2.1.24 added 29.4.2017 'cmdrestore' : 'ObnoviÅ¥', //from v2.1.24 added 3.5.2017 'cmdsearch' : 'NájsÅ¥ súbory', 'cmdup' : 'PrejsÅ¥ do nadradeného prieÄ�inka', 'cmdupload' : 'NahraÅ¥ súbory', 'cmdview' : 'PozrieÅ¥', 'cmdresize' : 'ZmeniÅ¥ veľkosÅ¥ obrázku', 'cmdsort' : 'ZoradiÅ¥', 'cmdnetmount' : 'PripojiÅ¥ sieÅ¥ové médium', // added 18.04.2012 'cmdnetunmount': 'OdpojiÅ¥', // from v2.1 added 30.04.2012 'cmdplaces' : 'Do umiestnení', // added 28.12.2014 'cmdchmod' : 'ZmeniÅ¥ režim', // from v2.1 added 20.6.2015 'cmdopendir' : 'OtvoriÅ¥ prieÄ�inok', // from v2.1 added 13.1.2016 'cmdcolwidth' : 'ResetovaÅ¥ šírku stĺpca', // from v2.1.13 added 12.06.2016 'cmdfullscreen': 'Celá obrazovka', // from v2.1.15 added 03.08.2016 'cmdmove' : 'PosúvaÅ¥', // from v2.1.15 added 21.08.2016 'cmdempty' : 'VyprázdniÅ¥ prieÄ�inok', // from v2.1.25 added 22.06.2017 'cmdundo' : 'Krok späť', // from v2.1.27 added 31.07.2017 'cmdredo' : 'VykonaÅ¥ znova', // from v2.1.27 added 31.07.2017 'cmdpreference': 'Preferencie', // from v2.1.27 added 03.08.2017 'cmdselectall' : 'VybraÅ¥ vÅ¡etko', // from v2.1.28 added 15.08.2017 'cmdselectnone': 'NiÄ� nevyberaÅ¥', // from v2.1.28 added 15.08.2017 'cmdselectinvert': 'InvertovaÅ¥ výber', // from v2.1.28 added 15.08.2017 'cmdopennew' : 'OtvoriÅ¥ v novom okne', // from v2.1.38 added 3.4.2018 'cmdhide' : 'SkryÅ¥ (Predvoľba)', // from v2.1.41 added 24.7.2018 /*********************************** buttons ***********************************/ 'btnClose' : 'ZavrieÅ¥', 'btnSave' : 'UložiÅ¥', 'btnRm' : 'VymazaÅ¥', 'btnApply' : 'PoužiÅ¥', 'btnCancel' : 'ZruÅ¡iÅ¥', 'btnNo' : 'Nie', 'btnYes' : 'Ã�no', 'btnDiscard': 'ZahodiÅ¥ zmeny', 'btnMount' : 'PripojiÅ¥', // added 18.04.2012 'btnApprove': 'Ã�sÅ¥ na $1 & schváliÅ¥', // from v2.1 added 26.04.2012 'btnUnmount': 'OdpojiÅ¥', // from v2.1 added 30.04.2012 'btnConv' : 'PreviesÅ¥', // from v2.1 added 08.04.2014 'btnCwd' : 'Tu', // from v2.1 added 22.5.2015 'btnVolume' : 'Médium', // from v2.1 added 22.5.2015 'btnAll' : 'VÅ¡etko', // from v2.1 added 22.5.2015 'btnMime' : 'MIME typ', // from v2.1 added 22.5.2015 'btnFileName':'Názov súboru', // from v2.1 added 22.5.2015 'btnSaveClose': 'UložiÅ¥ & zavrieÅ¥', // from v2.1 added 12.6.2015 'btnBackup' : 'ZálohovaÅ¥', // fromv2.1 added 28.11.2015 'btnRename' : 'PremenovaÅ¥', // from v2.1.24 added 6.4.2017 'btnRenameAll' : 'PremenovaÅ¥ vÅ¡etko', // from v2.1.24 added 6.4.2017 'btnPrevious' : 'Predchádzajúce ($1/$2)', // from v2.1.24 added 11.5.2017 'btnNext' : 'ÄŽalÅ¡ie ($1/$2)', // from v2.1.24 added 11.5.2017 'btnSaveAs' : 'UložiÅ¥ ako', // from v2.1.25 added 24.5.2017 /******************************** notifications ********************************/ 'ntfopen' : 'Otváranie prieÄ�inka', 'ntffile' : 'Otváranie súboru', 'ntfreload' : 'Znovu-naÄ�ítanie obsahu prieÄ�inka', 'ntfmkdir' : 'Vytváranie prieÄ�inka', 'ntfmkfile' : 'Vytváranie súborov', 'ntfrm' : 'Vymazanie položiek', 'ntfcopy' : 'Kopírovanie položiek', 'ntfmove' : 'Premiestnenie položiek', 'ntfprepare' : 'Kontrola existujúcich položiek', 'ntfrename' : 'Premenovanie súborov', 'ntfupload' : 'Nahrávanie súborov', 'ntfdownload' : 'SÅ¥ahovanie súborov', 'ntfsave' : 'Uloženie súborov', 'ntfarchive' : 'Vytváranie archívu', 'ntfextract' : 'Extrahovanie súborov z archívu', 'ntfsearch' : 'Vyhľadávanie súborov', 'ntfresize' : 'Zmena veľkosti obrázkov', 'ntfsmth' : 'PoÄ�kajte prosím...', 'ntfloadimg' : 'NaÄ�ítavanie obrázka', 'ntfnetmount' : 'Pripájanie sieÅ¥ového média', // added 18.04.2012 'ntfnetunmount': 'Odpájanie sieÅ¥ového média', // from v2.1 added 30.04.2012 'ntfdim' : 'Získanie rozmeru obrázka', // added 20.05.2013 'ntfreaddir' : 'Čítajú sa informácie o prieÄ�inku', // from v2.1 added 01.07.2013 'ntfurl' : 'Získanie adresy URL odkazu', // from v2.1 added 11.03.2014 'ntfchmod' : 'Zmena súboru', // from v2.1 added 20.6.2015 'ntfpreupload': 'Overenie názvu nahravaného súboru', // from v2.1 added 31.11.2015 'ntfzipdl' : 'Vytvorenie súboru na stiahnutie', // from v2.1.7 added 23.1.2016 'ntfparents' : 'Získanie informácií o ceste', // from v2.1.17 added 2.11.2016 'ntfchunkmerge': 'Spracovanie nahraného súboru', // from v2.1.17 added 2.11.2016 'ntftrash' : 'Vhadzovanie do koÅ¡a', // from v2.1.24 added 2.5.2017 'ntfrestore' : 'Vykonávanie obnovy z koÅ¡a', // from v2.1.24 added 3.5.2017 'ntfchkdir' : 'Kontrola cieľového prieÄ�inka', // from v2.1.24 added 3.5.2017 'ntfundo' : 'ZruÅ¡iÅ¥ predchádzajúcu operáciu', // from v2.1.27 added 31.07.2017 'ntfredo' : 'Obnovenie predchádzajúceho zruÅ¡enia', // from v2.1.27 added 31.07.2017 'ntfchkcontent' : 'Kontrola obsahu', // from v2.1.41 added 3.8.2018 /*********************************** volumes *********************************/ 'volume_Trash' : 'Kôš', //from v2.1.24 added 29.4.2017 /************************************ dates **********************************/ 'dateUnknown' : 'neznámy', 'Today' : 'Dnes', 'Yesterday' : 'VÄ�era', 'msJan' : 'Jan', 'msFeb' : 'Feb', 'msMar' : 'Mar', 'msApr' : 'Apr', 'msMay' : 'Maj', 'msJun' : 'Jun', 'msJul' : 'Júl', 'msAug' : 'Aug', 'msSep' : 'Sep', 'msOct' : 'Okt', 'msNov' : 'Nov', 'msDec' : 'Dec', 'January' : 'Január', 'February' : 'Február', 'March' : 'Marec', 'April' : 'Apríl', 'May' : 'Máj', 'June' : 'Jún', 'July' : 'Júl', 'August' : 'August', 'September' : 'September', 'October' : 'Október', 'November' : 'November', 'December' : 'December', 'Sunday' : 'Nedeľa', 'Monday' : 'Pondelok', 'Tuesday' : 'Utorok', 'Wednesday' : 'Streda', 'Thursday' : 'Å tvrtok', 'Friday' : 'Piatok', 'Saturday' : 'Sobota', 'Sun' : 'Ned', 'Mon' : 'Pon', 'Tue' : 'Ut', 'Wed' : 'Str', 'Thu' : 'Å tv', 'Fri' : 'Pia', 'Sat' : 'Sob', /******************************** sort variants ********************************/ 'sortname' : 'podľa názvu', 'sortkind' : 'podľa druhu', 'sortsize' : 'podľa veľkosti', 'sortdate' : 'podľa dátumu', 'sortFoldersFirst' : 'Najskôr prieÄ�inky', 'sortperm' : 'podľa povolenia', // from v2.1.13 added 13.06.2016 'sortmode' : 'podľa módu', // from v2.1.13 added 13.06.2016 'sortowner' : 'podľa majiteľa', // from v2.1.13 added 13.06.2016 'sortgroup' : 'podľa skupiny', // from v2.1.13 added 13.06.2016 'sortAlsoTreeview' : 'Tiež stromové zobrazenie', // from v2.1.15 added 01.08.2016 /********************************** new items **********************************/ 'untitled file.txt' : 'Nový súbor.txt', // added 10.11.2015 'untitled folder' : 'Nový prieÄ�inok', // added 10.11.2015 'Archive' : 'Nový archív', // from v2.1 added 10.11.2015 'untitled file' : 'Nový súbor.$1', // from v2.1.41 added 6.8.2018 'extentionfile' : '$1 súbor', // from v2.1.41 added 6.8.2018 'extentiontype' : '$1: $2', // from v2.1.43 added 17.10.2018 /********************************** messages **********************************/ 'confirmReq' : 'Potrebné potvrdenie', 'confirmRm' : 'UrÄ�ite chcete vymazaÅ¥ súbory?
          Nie je to možné vrátiť späť!', 'confirmRepl' : 'Nahradiť starý súbor za nový? (Ak obsahuje prie�inky, bude zlú�ené. Ak chcete zálohovať a nahradiť, vyberte možnosť Zálohovať.)', 'confirmRest' : 'Nahradiť existujúcu položku s položkou v koši?', // fromv2.1.24 added 5.5.2017 'confirmConvUTF8' : 'Nie je v UTF-8
          Previesť na UTF-8?
          Obsah bude v UTF-8 po uložení konverzie.', // from v2.1 added 08.04.2014 'confirmNonUTF8' : 'Kódovanie tohto súboru nemohlo byť detekované. Pre úpravu do�asne potrebujete previesť na UTF-8 .
          Prosím, vyberte kódovanie znakov tohto súboru.', // from v2.1.19 added 28.11.2016 'confirmNotSave' : 'Bol upravený.
          Ak zmeny neuložíte, stratíte vykonanú prácu.', // from v2.1 added 15.7.2015 'confirmTrash' : 'Naozaj chcete presunúť položky do koša?', //from v2.1.24 added 29.4.2017 'confirmMove' : 'Naozaj chcete presunúť položky do "$1"?', //from v2.1.50 added 27.7.2019 'apllyAll' : 'Použiť na všetky', 'name' : 'Názov', 'size' : 'Veľkosť', 'perms' : 'Povolenia', 'modify' : 'Zmenené', 'kind' : 'Druh', 'read' : '�ítať', 'write' : 'zapisovať', 'noaccess' : 'bez prístupu', 'and' : 'a', 'unknown' : 'neznámy', 'selectall' : 'Vybrať všetky položky', 'selectfiles' : 'Vybrať položku(y)', 'selectffile' : 'Vybrať prvú položku', 'selectlfile' : 'Vybrať poslednú položku', 'viewlist' : 'Zoznam', 'viewicons' : 'Ikony', 'viewSmall' : 'Malé ikony', // from v2.1.39 added 22.5.2018 'viewMedium' : 'Stredné ikony', // from v2.1.39 added 22.5.2018 'viewLarge' : 'Veľké ikony', // from v2.1.39 added 22.5.2018 'viewExtraLarge' : 'Extra veľké ikony', // from v2.1.39 added 22.5.2018 'places' : 'Miesta', 'calc' : 'Prepo�ítavanie', 'path' : 'Cesta', 'aliasfor' : 'Alias pre', 'locked' : 'Uzamknuté', 'dim' : 'Rozmery', 'files' : 'Súbory', 'folders' : 'Prie�inky', 'items' : 'Položky', 'yes' : 'áno', 'no' : 'nie', 'link' : 'Odkaz', 'searcresult' : 'Výsledky hľadania', 'selected' : 'zvolené položky', 'about' : 'O aplikácii', 'shortcuts' : 'Skratky', 'help' : 'Pomoc', 'webfm' : 'Webový správca súborov', 'ver' : 'Verzia', 'protocolver' : 'verzia protokolu', 'homepage' : 'Domovská stránka', 'docs' : 'Dokumentácia', 'github' : 'Pozri nás na Githube', 'twitter' : 'Nasleduj nás na Twitteri', 'facebook' : 'Pripoj sa k nám na Facebooku', 'team' : 'Tím', 'chiefdev' : 'Hlavný vývojár', 'developer' : 'Vývojár', 'contributor' : 'Prispievateľ', 'maintainer' : 'Správca', 'translator' : 'Prekladateľ', 'icons' : 'Ikony', 'dontforget' : 'a nezabudnite si plavky', 'shortcutsof' : 'Skratky nie sú povolené', 'dropFiles' : 'Sem pretiahnite súbory', 'or' : 'alebo', 'selectForUpload' : 'Vyberte súbory', 'moveFiles' : 'Premiestniť súbory', 'copyFiles' : 'Kopírovať súbory', 'restoreFiles' : 'Obnoviť položky', // from v2.1.24 added 5.5.2017 'rmFromPlaces' : 'Odstrániť z umiestnení', 'aspectRatio' : 'Pomer zobrazenia', 'scale' : 'Mierka', 'width' : 'Šírka', 'height' : 'Výška', 'resize' : 'Zmeniť veľkosť', 'crop' : 'Orezať', 'rotate' : 'Oto�iť', 'rotate-cw' : 'Oto�iť o 90 stupňov (v smere h.r.)', 'rotate-ccw' : 'Oto�iť o 90 stupňov (proti smeru)', 'degree' : '°', 'netMountDialogTitle' : 'Pripojiť sieťové médium', // added 18.04.2012 'protocol' : 'Protokol', // added 18.04.2012 'host' : 'Hosť', // added 18.04.2012 'port' : 'Port', // added 18.04.2012 'user' : 'Užívateľ', // added 18.04.2012 'pass' : 'Heslo', // added 18.04.2012 'confirmUnmount' : 'Naozaj chcete odpojiť $1?', // from v2.1 added 30.04.2012 'dropFilesBrowser': 'Premiestnite alebo presuňte súbory z prehliada�a', // from v2.1 added 30.05.2012 'dropPasteFiles' : 'Tu premiestnite alebo presuňte súbory a adresy URL', // from v2.1 added 07.04.2014 'encoding' : 'Kódovanie', // from v2.1 added 19.12.2014 'locale' : 'Lokalizácia', // from v2.1 added 19.12.2014 'searchTarget' : 'Cieľ: $1', // from v2.1 added 22.5.2015 'searchMime' : 'Vyhľadávanie podľa vstupného MIME typu', // from v2.1 added 22.5.2015 'owner' : 'Majiteľ', // from v2.1 added 20.6.2015 'group' : 'Skupina', // from v2.1 added 20.6.2015 'other' : 'Ostatné', // from v2.1 added 20.6.2015 'execute' : 'Spustiť', // from v2.1 added 20.6.2015 'perm' : 'Povolenie', // from v2.1 added 20.6.2015 'mode' : 'Režim', // from v2.1 added 20.6.2015 'emptyFolder' : 'Prie�inok je prázdny', // from v2.1.6 added 30.12.2015 'emptyFolderDrop' : 'Prie�inok je prázdny\\A Premiestnite alebo presuňte položky', // from v2.1.6 added 30.12.2015 'emptyFolderLTap' : 'Prie�inok je prázdny\\A Dlhým kliknutím pridáte položky', // from v2.1.6 added 30.12.2015 'quality' : 'Kvalita', // from v2.1.6 added 5.1.2016 'autoSync' : 'Automatická synchronizácia', // from v2.1.6 added 10.1.2016 'moveUp' : 'Posunúť nahor', // from v2.1.6 added 18.1.2016 'getLink' : 'Získať URL odkaz', // from v2.1.7 added 9.2.2016 'selectedItems' : 'Vybraté položky ($1)', // from v2.1.7 added 2.19.2016 'folderId' : 'ID prie�inka', // from v2.1.10 added 3.25.2016 'offlineAccess' : 'Povoliť prístup v offline režime', // from v2.1.10 added 3.25.2016 'reAuth' : 'Znova overiť', // from v2.1.10 added 3.25.2016 'nowLoading' : 'Práve na�ítava...', // from v2.1.12 added 4.26.2016 'openMulti' : 'Otvorenie viacerých súborov', // from v2.1.12 added 5.14.2016 'openMultiConfirm': 'Pokúšate sa otvoriť súbor $1. Naozaj ho chcete otvoriť v prehliada�i?', // from v2.1.12 added 5.14.2016 'emptySearch' : 'Výsledky vyhľadávania sú prázdne v hľadanom cieli.', // from v2.1.12 added 5.16.2016 'editingFile' : 'Je to úprava súboru.', // from v2.1.13 added 6.3.2016 'hasSelected' : 'Vybrali ste $1 položky.', // from v2.1.13 added 6.3.2016 'hasClipboard' : 'Máte $1 položky v schránke.', // from v2.1.13 added 6.3.2016 'incSearchOnly' : 'Prírastkové hľadanie je iba z aktuálneho zobrazenia.', // from v2.1.13 added 6.30.2016 'reinstate' : 'Obnovovanie', // from v2.1.15 added 3.8.2016 'complete' : '$1: kompletné', // from v2.1.15 added 21.8.2016 'contextmenu' : 'Kontextové menu', // from v2.1.15 added 9.9.2016 'pageTurning' : 'Otá�anie stránky', // from v2.1.15 added 10.9.2016 'volumeRoots' : 'Korene média', // from v2.1.16 added 16.9.2016 'reset' : 'Resetovať', // from v2.1.16 added 1.10.2016 'bgcolor' : 'Farba pozadia', // from v2.1.16 added 1.10.2016 'colorPicker' : 'Výber farby', // from v2.1.16 added 1.10.2016 '8pxgrid' : '8px mriežka', // from v2.1.16 added 4.10.2016 'enabled' : 'Povolené', // from v2.1.16 added 4.10.2016 'disabled' : 'Zakázané', // from v2.1.16 added 4.10.2016 'emptyIncSearch' : 'Výsledky vyhľadávania sú prázdne v aktuálnom zobrazení. Stla�ením tla�idla [Enter] rozšírite vyhľadávanie cieľa.', // from v2.1.16 added 5.10.2016 'emptyLetSearch' : 'Výsledky vyhľadávania prvého listu sú v aktuálnom zobrazení prázdne.', // from v2.1.23 added 24.3.2017 'textLabel' : 'Nápis textu', // from v2.1.17 added 13.10.2016 'minsLeft' : '$1 minút ostáva', // from v2.1.17 added 13.11.2016 'openAsEncoding' : 'Otvoriť s vybratým kódovaním', // from v2.1.19 added 2.12.2016 'saveAsEncoding' : 'Uložiť s vybratým kódovaním', // from v2.1.19 added 2.12.2016 'selectFolder' : 'Vyberte prie�inok', // from v2.1.20 added 13.12.2016 'firstLetterSearch': 'Hľadanie prvého listu', // from v2.1.23 added 24.3.2017 'presets' : 'Presety', // from v2.1.25 added 26.5.2017 'tooManyToTrash' : 'Je to príliš veľa položiek, takže sa nemôže dostať do koša.', // from v2.1.25 added 9.6.2017 'TextArea' : 'Textarea', // from v2.1.25 added 14.6.2017 'folderToEmpty' : 'Vyprázdniť prie�inok "$1".', // from v2.1.25 added 22.6.2017 'filderIsEmpty' : 'V prie�inku "$1" nie sú žiadne položky.', // from v2.1.25 added 22.6.2017 'preference' : 'Preferencie', // from v2.1.26 added 28.6.2017 'language' : 'Nastavenie jazyka', // from v2.1.26 added 28.6.2017 'clearBrowserData': 'Inicializujte nastavenia uložené v tomto prehliada�i', // from v2.1.26 added 28.6.2017 'toolbarPref' : 'Nastavenie panela s nástrojmi', // from v2.1.27 added 2.8.2017 'charsLeft' : '...$1 znakov ostáva.', // from v2.1.29 added 30.8.2017 'linesLeft' : '...$1 riadkov ostáva.', // from v2.1.52 added 16.1.2020 'sum' : 'Sú�et', // from v2.1.29 added 28.9.2017 'roughFileSize' : 'Hrubá veľkosť súboru', // from v2.1.30 added 2.11.2017 'autoFocusDialog' : 'Zameranie na prvok dialógu s mouseover', // from v2.1.30 added 2.11.2017 'select' : 'Vybrať', // from v2.1.30 added 23.11.2017 'selectAction' : 'Akcia pri vybranom súbore', // from v2.1.30 added 23.11.2017 'useStoredEditor' : 'Otvoriť pomocou naposledy použitého editora', // from v2.1.30 added 23.11.2017 'selectinvert' : 'Invertovať výber položiek', // from v2.1.30 added 25.11.2017 'renameMultiple' : 'Naozaj chcete premenovať $1 vybraných položiek, ako napríklad $2
          Nie je to možné vrátiÅ¥ späť!', // from v2.1.31 added 4.12.2017 'batchRename' : 'Batch premenovanie', // from v2.1.31 added 8.12.2017 'plusNumber' : '+ Číslo', // from v2.1.31 added 8.12.2017 'asPrefix' : 'PridaÅ¥ predponu', // from v2.1.31 added 8.12.2017 'asSuffix' : 'PridaÅ¥ príponu', // from v2.1.31 added 8.12.2017 'changeExtention' : 'ZmeniÅ¥ príponu', // from v2.1.31 added 8.12.2017 'columnPref' : 'Nastavenia stĺpcov (zoznamové zobrazenie)', // from v2.1.32 added 6.2.2018 'reflectOnImmediate' : 'VÅ¡etky zmeny sa okamžite premietnu do archívu.', // from v2.1.33 added 2.3.2018 'reflectOnUnmount' : 'Akékoľvek zmeny sa neodzrkadľujú, kým sa toto médium neodinÅ¡taluje.', // from v2.1.33 added 2.3.2018 'unmountChildren' : 'Nasledujúce médium(a) pripojené v tomto médiu je tiež odpojené. UrÄ�ite ho odpojiÅ¥?', // from v2.1.33 added 5.3.2018 'selectionInfo' : 'Informácie o výbere', // from v2.1.33 added 7.3.2018 'hashChecker' : 'Algoritmy na zobrazenie hashu súborov', // from v2.1.33 added 10.3.2018 'infoItems' : 'InformaÄ�né položky (panel s informáciami o výbere)', // from v2.1.38 added 28.3.2018 'pressAgainToExit': 'Opätovným stlaÄ�ením opustíte.', // from v2.1.38 added 1.4.2018 'toolbar' : 'Panel nástrojov', // from v2.1.38 added 4.4.2018 'workspace' : 'Pracovný priestor', // from v2.1.38 added 4.4.2018 'dialog' : 'Dialóg', // from v2.1.38 added 4.4.2018 'all' : 'VÅ¡etko', // from v2.1.38 added 4.4.2018 'iconSize' : 'VeľkosÅ¥ ikony (zobrazenie ikon)', // from v2.1.39 added 7.5.2018 'editorMaximized' : 'Otvorte maximalizované okno editora', // from v2.1.40 added 30.6.2018 'editorConvNoApi' : 'Pretože konverzia podľa rozhrania API momentálne nie je k dispozícii, skonvertujte na webovej stránke.', //from v2.1.40 added 8.7.2018 'editorConvNeedUpload' : 'Po konverzii musíte nahraÅ¥ skonvertovaný súbor pomocou URL položky alebo stiahnutý súbor na uloženie skonvertovaného súboru.', //from v2.1.40 added 8.7.2018 'convertOn' : 'KonvertovaÅ¥ na stránke $1', // from v2.1.40 added 10.7.2018 'integrations' : 'Integrácie', // from v2.1.40 added 11.7.2018 'integrationWith' : 'Tento elFinder má integrované nasledujúce externé služby. Pred použitím skontrolujte podmienky používania, zásady ochrany osobných údajov atÄ�.', // from v2.1.40 added 11.7.2018 'showHidden' : 'ZobraziÅ¥ skryté položky', // from v2.1.41 added 24.7.2018 'hideHidden' : 'SkryÅ¥ skryté položky', // from v2.1.41 added 24.7.2018 'toggleHidden' : 'ZobraziÅ¥/skryÅ¥ skryté položky', // from v2.1.41 added 24.7.2018 'makefileTypes' : 'Typy súborov, ktoré sa majú povoliÅ¥ pomocou "Nový súbor"', // from v2.1.41 added 7.8.2018 'typeOfTextfile' : 'Typ textového súboru', // from v2.1.41 added 7.8.2018 'add' : 'PridaÅ¥', // from v2.1.41 added 7.8.2018 'theme' : 'Téma', // from v2.1.43 added 19.10.2018 'default' : 'Predvolená', // from v2.1.43 added 19.10.2018 'description' : 'Popis', // from v2.1.43 added 19.10.2018 'website' : 'Stránka', // from v2.1.43 added 19.10.2018 'author' : 'Autor', // from v2.1.43 added 19.10.2018 'email' : 'E-mail', // from v2.1.43 added 19.10.2018 'license' : 'Licencia', // from v2.1.43 added 19.10.2018 'exportToSave' : 'Túto položku nemožno uložiÅ¥. Ak chcete zabrániÅ¥ strate úprav, musíte ju exportovaÅ¥ do poÄ�ítaÄ�a.', // from v2.1.44 added 1.12.2018 'dblclickToSelect': 'Dvakrát kliknite na súbor a vyberte ho.', // from v2.1.47 added 22.1.2019 'useFullscreen' : 'PoužiÅ¥ režim celej obrazovky', // from v2.1.47 added 19.2.2019 /********************************** mimetypes **********************************/ 'kindUnknown' : 'Neznámy', 'kindRoot' : 'Koreň média', // from v2.1.16 added 16.10.2016 'kindFolder' : 'PrieÄ�inok', 'kindSelects' : 'Výbery', // from v2.1.29 added 29.8.2017 'kindAlias' : 'Alias', 'kindAliasBroken' : 'PoruÅ¡ený alias', // applications 'kindApp' : 'Aplikácia', 'kindPostscript' : 'Postscript dokument', 'kindMsOffice' : 'Microsoft Office dokument', 'kindMsWord' : 'Microsoft Word dokument', 'kindMsExcel' : 'Microsoft Excel dokument', 'kindMsPP' : 'Microsoft Powerpoint prezentácia', 'kindOO' : 'Open Office dokument', 'kindAppFlash' : 'Flashová aplikácia', 'kindPDF' : 'Portable Document Format (PDF)', 'kindTorrent' : 'Bittorrent súbor', 'kind7z' : '7z archív', 'kindTAR' : 'TAR archív', 'kindGZIP' : 'GZIP archív', 'kindBZIP' : 'BZIP archív', 'kindXZ' : 'XZ archív', 'kindZIP' : 'ZIP archív', 'kindRAR' : 'RAR archív', 'kindJAR' : 'Java JAR súbor', 'kindTTF' : 'True Type font', 'kindOTF' : 'Open Type font', 'kindRPM' : 'RPM balík', // fonts 'kindFont' : 'Font', 'kindSFNT' : 'SFNT font', 'kindEOT' : 'Embedded Open Type font', 'kindWOFF' : 'Web Open Font Format', 'kindWOFF2' : 'Web Open Font Format 2', // texts 'kindText' : 'Textový document', 'kindTextPlain' : 'ObyÄ�ajný text', 'kindPHP' : 'PHP zdrojový kód', 'kindCSS' : 'Cascading style sheet (CSS)', 'kindHTML' : 'HTML dokument', 'kindJS' : 'Javascript zdrojový kód', 'kindRTF' : 'Rich Text Format', 'kindC' : 'C zdrojový kód', 'kindCHeader' : 'C header zdrojový kód', 'kindCPP' : 'C++ zdrojový kód', 'kindCPPHeader' : 'C++ header zdrojový kód', 'kindShell' : 'Unix shell skript', 'kindPython' : 'Python zdrojový kód', 'kindJava' : 'Java zdrojový kód', 'kindRuby' : 'Ruby zdrojový kód', 'kindPerl' : 'Perl zdrojový kód', 'kindSQL' : 'SQL zdrojový kód', 'kindXML' : 'XML dokument', 'kindAWK' : 'AWK zdrojový kód', 'kindCSV' : 'ÄŒiarkou oddeľované hodnoty', 'kindDOCBOOK' : 'Docbook XML dokument', 'kindMarkdown' : 'Markdown text', // added 20.7.2015 // images 'kindImage' : 'Obrázok', 'kindBMP' : 'BMP obrázok', 'kindJPEG' : 'JPEG obrázok', 'kindGIF' : 'GIF obrázok', 'kindPNG' : 'PNG obrázok', 'kindTIFF' : 'TIFF obrázok', 'kindTGA' : 'TGA obrázok', 'kindPSD' : 'Adobe Photoshop obrázok', 'kindXBITMAP' : 'X bitmap obrázok', 'kindPXM' : 'Pixelmator obrázok', // media 'kindAudio' : 'Zvukový súbor', 'kindAudioMPEG' : 'MPEG zvuk', 'kindAudioMPEG4' : 'MPEG-4 zvuk', 'kindAudioMIDI' : 'MIDI zvuk', 'kindAudioOGG' : 'Ogg Vorbis zvuk', 'kindAudioWAV' : 'WAV zvuk', 'AudioPlaylist' : 'MP3 playlist', 'kindVideo' : 'Video súbor', 'kindVideoDV' : 'DV video', 'kindVideoMPEG' : 'MPEG video', 'kindVideoMPEG4' : 'MPEG-4 video', 'kindVideoAVI' : 'AVI video', 'kindVideoMOV' : 'Quick Time video', 'kindVideoWM' : 'Windows Media video', 'kindVideoFlash' : 'Flash video', 'kindVideoMKV' : 'Matroska video', 'kindVideoOGG' : 'Ogg video' } }; })); PK!é ƒ‰:�:�Bfile-manager-advanced/application/library/js/i18n/elfinder.LANG.jsnu„[µü¤/** * elFinder translation template * use this file to create new translation * submit new translation via https://github.com/Studio-42/elFinder/issues * or make a pull request */ /** * XXXXX translation * @author Translator Name * @version 201x-xx-xx */ (function(root, factory) { if (typeof define === 'function' && define.amd) { define(['elfinder'], factory); } else if (typeof exports !== 'undefined') { module.exports = factory(require('elfinder')); } else { factory(root.elFinder); } }(this, function(elFinder) { elFinder.prototype.i18.REPLACE_WITH_xx_OR_xx_YY_LANG_CODE = { translator : 'Translator name <translator@email.tld>', language : 'Language of translation in your language', direction : 'ltr', dateFormat : 'M d, Y h:i A', // will show like: Mar 13, 2012 05:27 PM fancyDateFormat : '$1 h:i A', // will show like: Today 12:25 PM nonameDateFormat : 'ymd-His', // noname upload will show like: 120513-172700 messages : { /********************************** errors **********************************/ 'error' : 'Error', 'errUnknown' : 'Unknown error.', 'errUnknownCmd' : 'Unknown command.', 'errJqui' : 'Invalid jQuery UI configuration. Selectable, draggable and droppable components must be included.', 'errNode' : 'elFinder requires DOM Element to be created.', 'errURL' : 'Invalid elFinder configuration! URL option is not set.', 'errAccess' : 'Access denied.', 'errConnect' : 'Unable to connect to backend.', 'errAbort' : 'Connection aborted.', 'errTimeout' : 'Connection timeout.', 'errNotFound' : 'Backend not found.', 'errResponse' : 'Invalid backend response.', 'errConf' : 'Invalid backend configuration.', 'errJSON' : 'PHP JSON module not installed.', 'errNoVolumes' : 'Readable volumes not available.', 'errCmdParams' : 'Invalid parameters for command "$1".', 'errDataNotJSON' : 'Data is not JSON.', 'errDataEmpty' : 'Data is empty.', 'errCmdReq' : 'Backend request requires command name.', 'errOpen' : 'Unable to open "$1".', 'errNotFolder' : 'Object is not a folder.', 'errNotFile' : 'Object is not a file.', 'errRead' : 'Unable to read "$1".', 'errWrite' : 'Unable to write into "$1".', 'errPerm' : 'Permission denied.', 'errLocked' : '"$1" is locked and can not be renamed, moved or removed.', 'errExists' : 'Item named "$1" already exists.', 'errInvName' : 'Invalid file name.', 'errInvDirname' : 'Invalid folder name.', // from v2.1.24 added 12.4.2017 'errFolderNotFound' : 'Folder not found.', 'errFileNotFound' : 'File not found.', 'errTrgFolderNotFound' : 'Target folder "$1" not found.', 'errPopup' : 'Browser prevented opening popup window. To open file enable it in browser options.', 'errMkdir' : 'Unable to create folder "$1".', 'errMkfile' : 'Unable to create file "$1".', 'errRename' : 'Unable to rename "$1".', 'errCopyFrom' : 'Copying files from volume "$1" not allowed.', 'errCopyTo' : 'Copying files to volume "$1" not allowed.', 'errMkOutLink' : 'Unable to create a link to outside the volume root.', // from v2.1 added 03.10.2015 'errUpload' : 'Upload error.', // old name - errUploadCommon 'errUploadFile' : 'Unable to upload "$1".', // old name - errUpload 'errUploadNoFiles' : 'No files found for upload.', 'errUploadTotalSize' : 'Data exceeds the maximum allowed size.', // old name - errMaxSize 'errUploadFileSize' : 'File exceeds maximum allowed size.', // old name - errFileMaxSize 'errUploadMime' : 'File type not allowed.', 'errUploadTransfer' : '"$1" transfer error.', 'errUploadTemp' : 'Unable to make temporary file for upload.', // from v2.1 added 26.09.2015 'errNotReplace' : 'Object "$1" already exists at this location and can not be replaced by object with another type.', // new 'errReplace' : 'Unable to replace "$1".', 'errSave' : 'Unable to save "$1".', 'errCopy' : 'Unable to copy "$1".', 'errMove' : 'Unable to move "$1".', 'errCopyInItself' : 'Unable to copy "$1" into itself.', 'errRm' : 'Unable to remove "$1".', 'errTrash' : 'Unable into trash.', // from v2.1.24 added 30.4.2017 'errRmSrc' : 'Unable remove source file(s).', 'errExtract' : 'Unable to extract files from "$1".', 'errArchive' : 'Unable to create archive.', 'errArcType' : 'Unsupported archive type.', 'errNoArchive' : 'File is not archive or has unsupported archive type.', 'errCmdNoSupport' : 'Backend does not support this command.', 'errReplByChild' : 'The folder "$1" can\'t be replaced by an item it contains.', 'errArcSymlinks' : 'For security reason denied to unpack archives contains symlinks or files with not allowed names.', // edited 24.06.2012 'errArcMaxSize' : 'Archive files exceeds maximum allowed size.', 'errResize' : 'Unable to resize "$1".', 'errResizeDegree' : 'Invalid rotate degree.', // added 7.3.2013 'errResizeRotate' : 'Unable to rotate image.', // added 7.3.2013 'errResizeSize' : 'Invalid image size.', // added 7.3.2013 'errResizeNoChange' : 'Image size not changed.', // added 7.3.2013 'errUsupportType' : 'Unsupported file type.', 'errNotUTF8Content' : 'File "$1" is not in UTF-8 and cannot be edited.', // added 9.11.2011 'errNetMount' : 'Unable to mount "$1".', // added 17.04.2012 'errNetMountNoDriver' : 'Unsupported protocol.', // added 17.04.2012 'errNetMountFailed' : 'Mount failed.', // added 17.04.2012 'errNetMountHostReq' : 'Host required.', // added 18.04.2012 'errSessionExpires' : 'Your session has expired due to inactivity.', 'errCreatingTempDir' : 'Unable to create temporary directory: "$1"', 'errFtpDownloadFile' : 'Unable to download file from FTP: "$1"', 'errFtpUploadFile' : 'Unable to upload file to FTP: "$1"', 'errFtpMkdir' : 'Unable to create remote directory on FTP: "$1"', 'errArchiveExec' : 'Error while archiving files: "$1"', 'errExtractExec' : 'Error while extracting files: "$1"', 'errNetUnMount' : 'Unable to unmount.', // from v2.1 added 30.04.2012 'errConvUTF8' : 'Not convertible to UTF-8', // from v2.1 added 08.04.2014 'errFolderUpload' : 'Try the modern browser, If you\'d like to upload the folder.', // from v2.1 added 26.6.2015 'errSearchTimeout' : 'Timed out while searching "$1". Search result is partial.', // from v2.1 added 12.1.2016 'errReauthRequire' : 'Re-authorization is required.', // from v2.1.10 added 24.3.2016 'errMaxTargets' : 'Max number of selectable items is $1.', // from v2.1.17 added 17.10.2016 'errRestore' : 'Unable to restore from the trash. Can\'t identify the restore destination.', // from v2.1.24 added 3.5.2017 'errEditorNotFound' : 'Editor not found to this file type.', // from v2.1.25 added 23.5.2017 'errServerError' : 'Error occurred on the server side.', // from v2.1.25 added 16.6.2017 'errEmpty' : 'Unable to empty folder "$1".', // from v2.1.25 added 22.6.2017 'moreErrors' : 'There are $1 more errors.', // from v2.1.44 added 9.12.2018 'errMaxMkdirs' : 'You can create up to $1 folders at one time.', // from v2.1.58 added 20.6.2021 /******************************* commands names ********************************/ 'cmdarchive' : 'Create archive', 'cmdback' : 'Back', 'cmdcopy' : 'Copy', 'cmdcut' : 'Cut', 'cmddownload' : 'Download', 'cmdduplicate' : 'Duplicate', 'cmdedit' : 'Edit file', 'cmdextract' : 'Extract files from archive', 'cmdforward' : 'Forward', 'cmdgetfile' : 'Select files', 'cmdhelp' : 'About this software', 'cmdhome' : 'Root', 'cmdinfo' : 'Get info', 'cmdmkdir' : 'New folder', 'cmdmkdirin' : 'Into New Folder', // from v2.1.7 added 19.2.2016 'cmdmkfile' : 'New file', 'cmdopen' : 'Open', 'cmdpaste' : 'Paste', 'cmdquicklook' : 'Preview', 'cmdreload' : 'Reload', 'cmdrename' : 'Rename', 'cmdrm' : 'Delete', 'cmdtrash' : 'Into trash', //from v2.1.24 added 29.4.2017 'cmdrestore' : 'Restore', //from v2.1.24 added 3.5.2017 'cmdsearch' : 'Find files', 'cmdup' : 'Go to parent folder', 'cmdupload' : 'Upload files', 'cmdview' : 'View', 'cmdresize' : 'Resize & Rotate', 'cmdsort' : 'Sort', 'cmdnetmount' : 'Mount network volume', // added 18.04.2012 'cmdnetunmount': 'Unmount', // from v2.1 added 30.04.2012 'cmdplaces' : 'To Places', // added 28.12.2014 'cmdchmod' : 'Change mode', // from v2.1 added 20.6.2015 'cmdopendir' : 'Open a folder', // from v2.1 added 13.1.2016 'cmdcolwidth' : 'Reset column width', // from v2.1.13 added 12.06.2016 'cmdfullscreen': 'Full Screen', // from v2.1.15 added 03.08.2016 'cmdmove' : 'Move', // from v2.1.15 added 21.08.2016 'cmdempty' : 'Empty the folder', // from v2.1.25 added 22.06.2017 'cmdundo' : 'Undo', // from v2.1.27 added 31.07.2017 'cmdredo' : 'Redo', // from v2.1.27 added 31.07.2017 'cmdpreference': 'Preferences', // from v2.1.27 added 03.08.2017 'cmdselectall' : 'Select all', // from v2.1.28 added 15.08.2017 'cmdselectnone': 'Select none', // from v2.1.28 added 15.08.2017 'cmdselectinvert': 'Invert selection', // from v2.1.28 added 15.08.2017 'cmdopennew' : 'Open in new window', // from v2.1.38 added 3.4.2018 'cmdhide' : 'Hide (Preference)', // from v2.1.41 added 24.7.2018 /*********************************** buttons ***********************************/ 'btnClose' : 'Close', 'btnSave' : 'Save', 'btnRm' : 'Remove', 'btnApply' : 'Apply', 'btnCancel' : 'Cancel', 'btnNo' : 'No', 'btnYes' : 'Yes', 'btnDiscard': 'Discard changes', 'btnMount' : 'Mount', // added 18.04.2012 'btnApprove': 'Goto $1 & approve', // from v2.1 added 26.04.2012 'btnUnmount': 'Unmount', // from v2.1 added 30.04.2012 'btnConv' : 'Convert', // from v2.1 added 08.04.2014 'btnCwd' : 'Here', // from v2.1 added 22.5.2015 'btnVolume' : 'Volume', // from v2.1 added 22.5.2015 'btnAll' : 'All', // from v2.1 added 22.5.2015 'btnMime' : 'MIME Type', // from v2.1 added 22.5.2015 'btnFileName':'Filename', // from v2.1 added 22.5.2015 'btnSaveClose': 'Save & Close', // from v2.1 added 12.6.2015 'btnBackup' : 'Backup', // fromv2.1 added 28.11.2015 'btnRename' : 'Rename', // from v2.1.24 added 6.4.2017 'btnRenameAll' : 'Rename(All)', // from v2.1.24 added 6.4.2017 'btnPrevious' : 'Prev ($1/$2)', // from v2.1.24 added 11.5.2017 'btnNext' : 'Next ($1/$2)', // from v2.1.24 added 11.5.2017 'btnSaveAs' : 'Save As', // from v2.1.25 added 24.5.2017 /******************************** notifications ********************************/ 'ntfopen' : 'Open folder', 'ntffile' : 'Open file', 'ntfreload' : 'Reload folder content', 'ntfmkdir' : 'Creating folder', 'ntfmkfile' : 'Creating files', 'ntfrm' : 'Delete items', 'ntfcopy' : 'Copy items', 'ntfmove' : 'Move items', 'ntfprepare' : 'Checking existing items', 'ntfrename' : 'Rename files', 'ntfupload' : 'Uploading files', 'ntfdownload' : 'Downloading files', 'ntfsave' : 'Save files', 'ntfarchive' : 'Creating archive', 'ntfextract' : 'Extracting files from archive', 'ntfsearch' : 'Searching files', 'ntfresize' : 'Resizing images', 'ntfsmth' : 'Doing something', 'ntfloadimg' : 'Loading image', 'ntfnetmount' : 'Mounting network volume', // added 18.04.2012 'ntfnetunmount': 'Unmounting network volume', // from v2.1 added 30.04.2012 'ntfdim' : 'Acquiring image dimension', // added 20.05.2013 'ntfreaddir' : 'Reading folder infomation', // from v2.1 added 01.07.2013 'ntfurl' : 'Getting URL of link', // from v2.1 added 11.03.2014 'ntfchmod' : 'Changing file mode', // from v2.1 added 20.6.2015 'ntfpreupload': 'Verifying upload file name', // from v2.1 added 31.11.2015 'ntfzipdl' : 'Creating a file for download', // from v2.1.7 added 23.1.2016 'ntfparents' : 'Getting path infomation', // from v2.1.17 added 2.11.2016 'ntfchunkmerge': 'Processing the uploaded file', // from v2.1.17 added 2.11.2016 'ntftrash' : 'Doing throw in the trash', // from v2.1.24 added 2.5.2017 'ntfrestore' : 'Doing restore from the trash', // from v2.1.24 added 3.5.2017 'ntfchkdir' : 'Checking destination folder', // from v2.1.24 added 3.5.2017 'ntfundo' : 'Undoing previous operation', // from v2.1.27 added 31.07.2017 'ntfredo' : 'Redoing previous undone', // from v2.1.27 added 31.07.2017 'ntfchkcontent' : 'Checking contents', // from v2.1.41 added 3.8.2018 /*********************************** volumes *********************************/ 'volume_Trash' : 'Trash', //from v2.1.24 added 29.4.2017 /************************************ dates **********************************/ 'dateUnknown' : 'unknown', 'Today' : 'Today', 'Yesterday' : 'Yesterday', 'msJan' : 'Jan', 'msFeb' : 'Feb', 'msMar' : 'Mar', 'msApr' : 'Apr', 'msMay' : 'May', 'msJun' : 'Jun', 'msJul' : 'Jul', 'msAug' : 'Aug', 'msSep' : 'Sep', 'msOct' : 'Oct', 'msNov' : 'Nov', 'msDec' : 'Dec', 'January' : 'January', 'February' : 'February', 'March' : 'March', 'April' : 'April', 'May' : 'May', 'June' : 'June', 'July' : 'July', 'August' : 'August', 'September' : 'September', 'October' : 'October', 'November' : 'November', 'December' : 'December', 'Sunday' : 'Sunday', 'Monday' : 'Monday', 'Tuesday' : 'Tuesday', 'Wednesday' : 'Wednesday', 'Thursday' : 'Thursday', 'Friday' : 'Friday', 'Saturday' : 'Saturday', 'Sun' : 'Sun', 'Mon' : 'Mon', 'Tue' : 'Tue', 'Wed' : 'Wed', 'Thu' : 'Thu', 'Fri' : 'Fri', 'Sat' : 'Sat', /******************************** sort variants ********************************/ 'sortname' : 'by name', 'sortkind' : 'by kind', 'sortsize' : 'by size', 'sortdate' : 'by date', 'sortFoldersFirst' : 'Folders first', 'sortperm' : 'by permission', // from v2.1.13 added 13.06.2016 'sortmode' : 'by mode', // from v2.1.13 added 13.06.2016 'sortowner' : 'by owner', // from v2.1.13 added 13.06.2016 'sortgroup' : 'by group', // from v2.1.13 added 13.06.2016 'sortAlsoTreeview' : 'Also Treeview', // from v2.1.15 added 01.08.2016 /********************************** new items **********************************/ 'untitled file.txt' : 'NewFile.txt', // added 10.11.2015 'untitled folder' : 'NewFolder', // added 10.11.2015 'Archive' : 'NewArchive', // from v2.1 added 10.11.2015 'untitled file' : 'NewFile.$1', // from v2.1.41 added 6.8.2018 'extentionfile' : '$1: File', // from v2.1.41 added 6.8.2018 'extentiontype' : '$1: $2', // from v2.1.43 added 17.10.2018 /********************************** messages **********************************/ 'confirmReq' : 'Confirmation required', 'confirmRm' : 'Are you sure you want to permanently remove items?
          This cannot be undone!', 'confirmRepl' : 'Replace old file with new one? (If it contains folders, it will be merged. To backup and replace, select Backup.)', 'confirmRest' : 'Replace existing item with the item in trash?', // fromv2.1.24 added 5.5.2017 'confirmConvUTF8' : 'Not in UTF-8
          Convert to UTF-8?
          Contents become UTF-8 by saving after conversion.', // from v2.1 added 08.04.2014 'confirmNonUTF8' : 'Character encoding of this file couldn\'t be detected. It need to temporarily convert to UTF-8 for editting.
          Please select character encoding of this file.', // from v2.1.19 added 28.11.2016 'confirmNotSave' : 'It has been modified.
          Losing work if you do not save changes.', // from v2.1 added 15.7.2015 'confirmTrash' : 'Are you sure you want to move items to trash bin?', //from v2.1.24 added 29.4.2017 'confirmMove' : 'Are you sure you want to move items to "$1"?', //from v2.1.50 added 27.7.2019 'apllyAll' : 'Apply to all', 'name' : 'Name', 'size' : 'Size', 'perms' : 'Permissions', 'modify' : 'Modified', 'kind' : 'Kind', 'read' : 'read', 'write' : 'write', 'noaccess' : 'no access', 'and' : 'and', 'unknown' : 'unknown', 'selectall' : 'Select all items', 'selectfiles' : 'Select item(s)', 'selectffile' : 'Select first item', 'selectlfile' : 'Select last item', 'viewlist' : 'List view', 'viewicons' : 'Icons view', 'viewSmall' : 'Small icons', // from v2.1.39 added 22.5.2018 'viewMedium' : 'Medium icons', // from v2.1.39 added 22.5.2018 'viewLarge' : 'Large icons', // from v2.1.39 added 22.5.2018 'viewExtraLarge' : 'Extra large icons', // from v2.1.39 added 22.5.2018 'places' : 'Places', 'calc' : 'Calculate', 'path' : 'Path', 'aliasfor' : 'Alias for', 'locked' : 'Locked', 'dim' : 'Dimensions', 'files' : 'Files', 'folders' : 'Folders', 'items' : 'Items', 'yes' : 'yes', 'no' : 'no', 'link' : 'Link', 'searcresult' : 'Search results', 'selected' : 'selected items', 'about' : 'About', 'shortcuts' : 'Shortcuts', 'help' : 'Help', 'webfm' : 'Web file manager', 'ver' : 'Version', 'protocolver' : 'protocol version', 'homepage' : 'Project home', 'docs' : 'Documentation', 'github' : 'Fork us on GitHub', 'twitter' : 'Follow us on Twitter', 'facebook' : 'Join us on Facebook', 'team' : 'Team', 'chiefdev' : 'chief developer', 'developer' : 'developer', 'contributor' : 'contributor', 'maintainer' : 'maintainer', 'translator' : 'translator', 'icons' : 'Icons', 'dontforget' : 'and don\'t forget to take your towel', 'shortcutsof' : 'Shortcuts disabled', 'dropFiles' : 'Drop files here', 'or' : 'or', 'selectForUpload' : 'Select files', 'moveFiles' : 'Move items', 'copyFiles' : 'Copy items', 'restoreFiles' : 'Restore items', // from v2.1.24 added 5.5.2017 'rmFromPlaces' : 'Remove from places', 'aspectRatio' : 'Aspect ratio', 'scale' : 'Scale', 'width' : 'Width', 'height' : 'Height', 'resize' : 'Resize', 'crop' : 'Crop', 'rotate' : 'Rotate', 'rotate-cw' : 'Rotate 90 degrees CW', 'rotate-ccw' : 'Rotate 90 degrees CCW', 'degree' : '°', 'netMountDialogTitle' : 'Mount network volume', // added 18.04.2012 'protocol' : 'Protocol', // added 18.04.2012 'host' : 'Host', // added 18.04.2012 'port' : 'Port', // added 18.04.2012 'user' : 'User', // added 18.04.2012 'pass' : 'Password', // added 18.04.2012 'confirmUnmount' : 'Are you unmount $1?', // from v2.1 added 30.04.2012 'dropFilesBrowser': 'Drop or Paste files from browser', // from v2.1 added 30.05.2012 'dropPasteFiles' : 'Drop files, Paste URLs or images(clipboard) here', // from v2.1 added 07.04.2014 'encoding' : 'Encoding', // from v2.1 added 19.12.2014 'locale' : 'Locale', // from v2.1 added 19.12.2014 'searchTarget' : 'Target: $1', // from v2.1 added 22.5.2015 'searchMime' : 'Search by input MIME Type', // from v2.1 added 22.5.2015 'owner' : 'Owner', // from v2.1 added 20.6.2015 'group' : 'Group', // from v2.1 added 20.6.2015 'other' : 'Other', // from v2.1 added 20.6.2015 'execute' : 'Execute', // from v2.1 added 20.6.2015 'perm' : 'Permission', // from v2.1 added 20.6.2015 'mode' : 'Mode', // from v2.1 added 20.6.2015 'emptyFolder' : 'Folder is empty', // from v2.1.6 added 30.12.2015 'emptyFolderDrop' : 'Folder is empty\\A Drop to add items', // from v2.1.6 added 30.12.2015 'emptyFolderLTap' : 'Folder is empty\\A Long tap to add items', // from v2.1.6 added 30.12.2015 'quality' : 'Quality', // from v2.1.6 added 5.1.2016 'autoSync' : 'Auto sync', // from v2.1.6 added 10.1.2016 'moveUp' : 'Move up', // from v2.1.6 added 18.1.2016 'getLink' : 'Get URL link', // from v2.1.7 added 9.2.2016 'selectedItems' : 'Selected items ($1)', // from v2.1.7 added 2.19.2016 'folderId' : 'Folder ID', // from v2.1.10 added 3.25.2016 'offlineAccess' : 'Allow offline access', // from v2.1.10 added 3.25.2016 'reAuth' : 'To re-authenticate', // from v2.1.10 added 3.25.2016 'nowLoading' : 'Now loading...', // from v2.1.12 added 4.26.2016 'openMulti' : 'Open multiple files', // from v2.1.12 added 5.14.2016 'openMultiConfirm': 'You are trying to open the $1 files. Are you sure you want to open in browser?', // from v2.1.12 added 5.14.2016 'emptySearch' : 'Search results is empty in search target.', // from v2.1.12 added 5.16.2016 'editingFile' : 'It is editing a file.', // from v2.1.13 added 6.3.2016 'hasSelected' : 'You have selected $1 items.', // from v2.1.13 added 6.3.2016 'hasClipboard' : 'You have $1 items in the clipboard.', // from v2.1.13 added 6.3.2016 'incSearchOnly' : 'Incremental search is only from the current view.', // from v2.1.13 added 6.30.2016 'reinstate' : 'Reinstate', // from v2.1.15 added 3.8.2016 'complete' : '$1 complete', // from v2.1.15 added 21.8.2016 'contextmenu' : 'Context menu', // from v2.1.15 added 9.9.2016 'pageTurning' : 'Page turning', // from v2.1.15 added 10.9.2016 'volumeRoots' : 'Volume roots', // from v2.1.16 added 16.9.2016 'reset' : 'Reset', // from v2.1.16 added 1.10.2016 'bgcolor' : 'Background color', // from v2.1.16 added 1.10.2016 'colorPicker' : 'Color picker', // from v2.1.16 added 1.10.2016 '8pxgrid' : '8px Grid', // from v2.1.16 added 4.10.2016 'enabled' : 'Enabled', // from v2.1.16 added 4.10.2016 'disabled' : 'Disabled', // from v2.1.16 added 4.10.2016 'emptyIncSearch' : 'Search results is empty in current view.\\APress [Enter] to expand search target.', // from v2.1.16 added 5.10.2016 'emptyLetSearch' : 'First letter search results is empty in current view.', // from v2.1.23 added 24.3.2017 'textLabel' : 'Text label', // from v2.1.17 added 13.10.2016 'minsLeft' : '$1 mins left', // from v2.1.17 added 13.11.2016 'openAsEncoding' : 'Reopen with selected encoding', // from v2.1.19 added 2.12.2016 'saveAsEncoding' : 'Save with the selected encoding', // from v2.1.19 added 2.12.2016 'selectFolder' : 'Select folder', // from v2.1.20 added 13.12.2016 'firstLetterSearch': 'First letter search', // from v2.1.23 added 24.3.2017 'presets' : 'Presets', // from v2.1.25 added 26.5.2017 'tooManyToTrash' : 'It\'s too many items so it can\'t into trash.', // from v2.1.25 added 9.6.2017 'TextArea' : 'TextArea', // from v2.1.25 added 14.6.2017 'folderToEmpty' : 'Empty the folder "$1".', // from v2.1.25 added 22.6.2017 'filderIsEmpty' : 'There are no items in a folder "$1".', // from v2.1.25 added 22.6.2017 'preference' : 'Preference', // from v2.1.26 added 28.6.2017 'language' : 'Language', // from v2.1.26 added 28.6.2017 'clearBrowserData': 'Initialize the settings saved in this browser', // from v2.1.26 added 28.6.2017 'toolbarPref' : 'Toolbar settings', // from v2.1.27 added 2.8.2017 'charsLeft' : '... $1 chars left.', // from v2.1.29 added 30.8.2017 'linesLeft' : '... $1 lines left.', // from v2.1.52 added 16.1.2020 'sum' : 'Sum', // from v2.1.29 added 28.9.2017 'roughFileSize' : 'Rough file size', // from v2.1.30 added 2.11.2017 'autoFocusDialog' : 'Focus on the element of dialog with mouseover', // from v2.1.30 added 2.11.2017 'select' : 'Select', // from v2.1.30 added 23.11.2017 'selectAction' : 'Action when select file', // from v2.1.30 added 23.11.2017 'useStoredEditor' : 'Open with the editor used last time', // from v2.1.30 added 23.11.2017 'selectinvert' : 'Invert selection', // from v2.1.30 added 25.11.2017 'renameMultiple' : 'Are you sure you want to rename $1 selected items like $2?
          This cannot be undone!', // from v2.1.31 added 4.12.2017 'batchRename' : 'Batch rename', // from v2.1.31 added 8.12.2017 'plusNumber' : '+ Number', // from v2.1.31 added 8.12.2017 'asPrefix' : 'Add prefix', // from v2.1.31 added 8.12.2017 'asSuffix' : 'Add suffix', // from v2.1.31 added 8.12.2017 'changeExtention' : 'Change extention', // from v2.1.31 added 8.12.2017 'columnPref' : 'Columns settings (List view)', // from v2.1.32 added 6.2.2018 'reflectOnImmediate' : 'All changes will reflect immediately to the archive.', // from v2.1.33 added 2.3.2018 'reflectOnUnmount' : 'Any changes will not reflect until un-mount this volume.', // from v2.1.33 added 2.3.2018 'unmountChildren' : 'The following volume(s) mounted on this volume also unmounted. Are you sure to unmount it?', // from v2.1.33 added 5.3.2018 'selectionInfo' : 'Selection Info', // from v2.1.33 added 7.3.2018 'hashChecker' : 'Algorithms to show the file hash', // from v2.1.33 added 10.3.2018 'infoItems' : 'Info Items (Selection Info Panel)', // from v2.1.38 added 28.3.2018 'pressAgainToExit': 'Press again to exit.', // from v2.1.38 added 1.4.2018 'toolbar' : 'Toolbar', // from v2.1.38 added 4.4.2018 'workspace' : 'Work Space', // from v2.1.38 added 4.4.2018 'dialog' : 'Dialog', // from v2.1.38 added 4.4.2018 'all' : 'All', // from v2.1.38 added 4.4.2018 'iconSize' : 'Icon Size (Icons view)', // from v2.1.39 added 7.5.2018 'editorMaximized' : 'Open the maximized editor window', // from v2.1.40 added 30.6.2018 'editorConvNoApi' : 'Because conversion by API is not currently available, please convert on the website.', //from v2.1.40 added 8.7.2018 'editorConvNeedUpload' : 'After conversion, you must be upload with the item URL or a downloaded file to save the converted file.', //from v2.1.40 added 8.7.2018 'convertOn' : 'Convert on the site of $1', // from v2.1.40 added 10.7.2018 'integrations' : 'Integrations', // from v2.1.40 added 11.7.2018 'integrationWith' : 'This elFinder has the following external services integrated. Please check the terms of use, privacy policy, etc. before using it.', // from v2.1.40 added 11.7.2018 'showHidden' : 'Show hidden items', // from v2.1.41 added 24.7.2018 'hideHidden' : 'Hide hidden items', // from v2.1.41 added 24.7.2018 'toggleHidden' : 'Show/Hide hidden items', // from v2.1.41 added 24.7.2018 'makefileTypes' : 'File types to enable with "New file"', // from v2.1.41 added 7.8.2018 'typeOfTextfile' : 'Type of the Text file', // from v2.1.41 added 7.8.2018 'add' : 'Add', // from v2.1.41 added 7.8.2018 'theme' : 'Theme', // from v2.1.43 added 19.10.2018 'default' : 'Default', // from v2.1.43 added 19.10.2018 'description' : 'Description', // from v2.1.43 added 19.10.2018 'website' : 'Website', // from v2.1.43 added 19.10.2018 'author' : 'Author', // from v2.1.43 added 19.10.2018 'email' : 'Email', // from v2.1.43 added 19.10.2018 'license' : 'License', // from v2.1.43 added 19.10.2018 'exportToSave' : 'This item can\'t be saved. To avoid losing the edits you need to export to your PC.', // from v2.1.44 added 1.12.2018 'dblclickToSelect': 'Double click on the file to select it.', // from v2.1.47 added 22.1.2019 'useFullscreen' : 'Use fullscreen mode', // from v2.1.47 added 19.2.2019 /********************************** mimetypes **********************************/ 'kindUnknown' : 'Unknown', 'kindRoot' : 'Volume Root', // from v2.1.16 added 16.10.2016 'kindFolder' : 'Folder', 'kindSelects' : 'Selections', // from v2.1.29 added 29.8.2017 'kindAlias' : 'Alias', 'kindAliasBroken' : 'Broken alias', // applications 'kindApp' : 'Application', 'kindPostscript' : 'Postscript document', 'kindMsOffice' : 'Microsoft Office document', 'kindMsWord' : 'Microsoft Word document', 'kindMsExcel' : 'Microsoft Excel document', 'kindMsPP' : 'Microsoft Powerpoint presentation', 'kindOO' : 'Open Office document', 'kindAppFlash' : 'Flash application', 'kindPDF' : 'Portable Document Format (PDF)', 'kindTorrent' : 'Bittorrent file', 'kind7z' : '7z archive', 'kindTAR' : 'TAR archive', 'kindGZIP' : 'GZIP archive', 'kindBZIP' : 'BZIP archive', 'kindXZ' : 'XZ archive', 'kindZIP' : 'ZIP archive', 'kindRAR' : 'RAR archive', 'kindJAR' : 'Java JAR file', 'kindTTF' : 'True Type font', 'kindOTF' : 'Open Type font', 'kindRPM' : 'RPM package', // fonts 'kindFont' : 'Font', 'kindSFNT' : 'SFNT font', 'kindEOT' : 'Embedded Open Type font', 'kindWOFF' : 'Web Open Font Format', 'kindWOFF2' : 'Web Open Font Format 2', // texts 'kindText' : 'Text document', 'kindTextPlain' : 'Plain text', 'kindPHP' : 'PHP source', 'kindCSS' : 'Cascading style sheet', 'kindHTML' : 'HTML document', 'kindJS' : 'Javascript source', 'kindRTF' : 'Rich Text Format', 'kindC' : 'C source', 'kindCHeader' : 'C header source', 'kindCPP' : 'C++ source', 'kindCPPHeader' : 'C++ header source', 'kindShell' : 'Unix shell script', 'kindPython' : 'Python source', 'kindJava' : 'Java source', 'kindRuby' : 'Ruby source', 'kindPerl' : 'Perl script', 'kindSQL' : 'SQL source', 'kindXML' : 'XML document', 'kindAWK' : 'AWK source', 'kindCSV' : 'Comma separated values', 'kindDOCBOOK' : 'Docbook XML document', 'kindMarkdown' : 'Markdown text', // added 20.7.2015 // images 'kindImage' : 'Image', 'kindBMP' : 'BMP image', 'kindJPEG' : 'JPEG image', 'kindGIF' : 'GIF Image', 'kindPNG' : 'PNG Image', 'kindTIFF' : 'TIFF image', 'kindTGA' : 'TGA image', 'kindPSD' : 'Adobe Photoshop image', 'kindXBITMAP' : 'X bitmap image', 'kindPXM' : 'Pixelmator image', 'kindWEBP' : 'WEBP image', 'kindSVG' : 'SVG image', // media 'kindAudio' : 'Audio media', 'kindAudioMPEG' : 'MPEG audio', 'kindAudioMPEG4' : 'MPEG-4 audio', 'kindAudioMIDI' : 'MIDI audio', 'kindAudioOGG' : 'Ogg Vorbis audio', 'kindAudioWAV' : 'WAV audio', 'AudioPlaylist' : 'MP3 playlist', 'kindVideo' : 'Video media', 'kindVideoDV' : 'DV movie', 'kindVideoMPEG' : 'MPEG movie', 'kindVideoMPEG4' : 'MPEG-4 movie', 'kindVideoAVI' : 'AVI movie', 'kindVideoMOV' : 'Quick Time movie', 'kindVideoWM' : 'Windows Media movie', 'kindVideoFlash' : 'Flash movie', 'kindVideoMKV' : 'Matroska movie', 'kindVideoOGG' : 'Ogg movie' } }; })); PK!ïŽí›Š›Š@file-manager-advanced/application/library/js/i18n/elfinder.vi.jsnu„[µü¤/** * Ngôn ngữ Việt Nam translation * @author Chung Thá»§y f * @author Son Nguyen * @author Nguyá»…n Trần Chung * @version 2019-12-03 */ (function(root, factory) { if (typeof define === 'function' && define.amd) { define(['elfinder'], factory); } else if (typeof exports !== 'undefined') { module.exports = factory(require('elfinder')); } else { factory(root.elFinder); } }(this, function(elFinder) { elFinder.prototype.i18.vi = { translator : 'Chung Thá»§y f <chungthuyf@gmail.com>, Son Nguyen <son.nguyen@catalyst.net.nz>, Nguyá»…n Trần Chung <admin@chungnguyen.xyz>', language : 'Ngôn ngữ Việt Nam', direction : 'ltr', dateFormat : 'd.m.Y H:i', // will show like: 03.12.2019 17:28 fancyDateFormat : '$1 H:i', // will show like: Hôm nay 17:28 nonameDateFormat : 'ymd-His', // noname upload will show like: 191203-172820 messages : { /********************************** errors **********************************/ 'error' : 'Lá»—i', 'errUnknown' : 'Lá»—i không xác định được.', 'errUnknownCmd' : 'Lá»—i không rõ lệnh.', 'errJqui' : 'Cấu hình jQueryUI không hợp lệ. Các thành phần lá»±a chá»�n, kéo và thả phải được bao gồm.', 'errNode' : 'elFinder đòi há»�i phần tá»­ DOM phải được tạo ra.', 'errURL' : 'Cấu hình elFinder không hợp lệ! URL không được thiết lập tùy chá»�n.', 'errAccess' : 'Truy cập bị từ chối.', 'errConnect' : 'Không thể kết nối vá»›i backend.', 'errAbort' : 'Kết nối bị há»§y bá»�.', 'errTimeout' : 'Thá»�i gian chá»� kết nối đã hết.', 'errNotFound' : 'Backend không tìm thấy.', 'errResponse' : 'Phản hồi backend không hợp lệ.', 'errConf' : 'Cấu hình backend không hợp lệ.', 'errJSON' : 'Mô-Ä‘un PHP JSON không được cài đặt.', 'errNoVolumes' : 'Tập có thể Ä‘á»�c không có sẵn.', 'errCmdParams' : 'Thông số không hợp lệ cho lệnh "$1".', 'errDataNotJSON' : 'Dữ liệu không phải là JSON.', 'errDataEmpty' : 'Dữ liệu trống.', 'errCmdReq' : 'Backend đòi há»�i tên lệnh.', 'errOpen' : 'Không thể mở "$1".', 'errNotFolder' : 'Ä�ối tượng không phải là má»™t thư mục.', 'errNotFile' : 'Ä�ối tượng không phải là má»™t tập tin.', 'errRead' : 'Không thể Ä‘á»�c "$1".', 'errWrite' : 'Không thể ghi vào "$1".', 'errPerm' : 'Quyá»�n bị từ chối.', 'errLocked' : '"$1" đã bị khóa và không thể đổi tên, di chuyển hoặc loại bá»�.', 'errExists' : 'Tập tin có tên "$1" đã tồn tại.', 'errInvName' : 'Tên tập tin không hợp lệ.', 'errInvDirname' : 'Tên thư mục không hợp lệ.', // from v2.1.24 added 12.4.2017 'errFolderNotFound' : 'Thư mục không tìm thấy.', 'errFileNotFound' : 'Tập tin không tìm thấy.', 'errTrgFolderNotFound' : 'Thư mục đích "$1" không được tìm thấy.', 'errPopup' : 'Trình duyệt ngăn chặn mở cá»­a sổ popup.', 'errMkdir' : 'Không thể tạo thư mục "$1".', 'errMkfile' : 'Không thể tạo tập tin "$1".', 'errRename' : 'Không thể đổi tên "$1".', 'errCopyFrom' : 'Sao chép tập tin từ tập "$1" không được phép.', 'errCopyTo' : 'Sao chép tập tin tá»›i tập "$1" không được phép.', 'errMkOutLink' : 'Không thể tạo liên kết ra bên ngoài volume root.', // from v2.1 added 03.10.2015 'errUpload' : 'Tải lên báo lá»—i.', // old name - errUploadCommon 'errUploadFile' : 'Không thể tải lên "$1".', // old name - errUpload 'errUploadNoFiles' : 'Không thấy tập tin nào để tải lên.', 'errUploadTotalSize' : 'Dữ liệu vượt quá kích thước tối Ä‘a cho phép.', // old name - errMaxSize 'errUploadFileSize' : 'Tập tin vượt quá kích thước tối Ä‘a cho phép.', // old name - errFileMaxSize 'errUploadMime' : 'Kiểu tập tin không được phép.', 'errUploadTransfer' : 'Lá»—i khi truyá»�n "$1".', 'errUploadTemp' : 'Không thể tạo thư mục tạm để tải lên.', // from v2.1 added 26.09.2015 'errNotReplace' : 'Ä�ối tượng "$1" đã tồn tại ở vị trí này và không thể thay thế bằng đối tượng vá»›i loại khác.', // new 'errReplace' : 'Không thể thay thế "$1".', 'errSave' : 'Không thể lưu "$1".', 'errCopy' : 'Không thể sao chép "$1".', 'errMove' : 'Không thể chuyển "$1".', 'errCopyInItself' : 'Không thể sao chép "$1" vào chính nó.', 'errRm' : 'Không thể xóa "$1".', 'errTrash' : 'Không thể cho vào thùng rác.', // from v2.1.24 added 30.4.2017 'errRmSrc' : 'Không thể xóa tệp nguồn.', 'errExtract' : 'Không thể giải nén các tập tin từ"$1".', 'errArchive' : 'Không thể tạo ra lưu trữ.', 'errArcType' : 'Loại lưu trữ không được há»— trợ.', 'errNoArchive' : 'Tập tin không phải là lưu trữ hoặc có kiểu lưu trữ không được há»— trợ.', 'errCmdNoSupport' : 'Backend không há»— trợ lệnh này.', 'errReplByChild' : 'Thư mục "$1" không thể được thay thế bằng má»™t mục con mà nó chứa.', 'errArcSymlinks' : 'Vì lý do bảo mật, từ chối giải nén tập tin lưu trữ có chứa liên kết má»�m.', // edited 24.06.2012 'errArcMaxSize' : 'Tập tin lưu trữ vượt quá kích thước tối Ä‘a cho phép.', 'errResize' : 'Không thể thay đổi kích thước "$1".', 'errResizeDegree' : 'Ä�á»™ xoay không hợp lệ.', // added 7.3.2013 'errResizeRotate' : 'Không thể xoay hình ảnh.', // added 7.3.2013 'errResizeSize' : 'Kích thước hình ảnh không hợp lệ.', // added 7.3.2013 'errResizeNoChange' : 'Kích thước hình ảnh không thay đổi.', // added 7.3.2013 'errUsupportType' : 'Loại tập tin không được há»— trợ.', 'errNotUTF8Content' : 'Tệp "$1" không phải bá»™ ký tá»± UTF-8 nên không thể chỉnh sá»­a.', // added 9.11.2011 'errNetMount' : 'Không thể gắn kết "$1".', // added 17.04.2012 'errNetMountNoDriver' : 'Giao thức không được há»— trợ.', // added 17.04.2012 'errNetMountFailed' : 'Gắn (kết nối) thất bại.', // added 17.04.2012 'errNetMountHostReq' : 'Yêu cầu máy chá»§.', // added 18.04.2012 'errSessionExpires' : 'Phiên cá»§a bạn đã hết hạn do không hoạt động.', 'errCreatingTempDir' : 'Không thể tạo thư mục tạm thá»�i: "$1"', 'errFtpDownloadFile' : 'Không thể tải xuống tệp từ FTP: "$1"', 'errFtpUploadFile' : 'Không thể tải tệp lên FTP: "$1"', 'errFtpMkdir' : 'Không thể tạo thư mục từ xa trên FTP: "$1"', 'errArchiveExec' : 'Lá»—i trong khi lưu trữ tệp: "$1"', 'errExtractExec' : 'Lá»—i trong khi giải nén tập tin: "$1"', 'errNetUnMount' : 'Không thể gỡ gắn (liên kết).', // from v2.1 added 30.04.2012 'errConvUTF8' : 'Không thể chuyển đổi thành UTF-8', // from v2.1 added 08.04.2014 'errFolderUpload' : 'Hãy thá»­ trình duyệt má»›i hÆ¡n (vì trình duyệt hiện tại có vẻ cÅ© nên không há»— trợ tải lên thư mục).', // from v2.1 added 26.6.2015 'errSearchTimeout' : 'Ä�ã hết thá»�i gian trong khi tìm kiếm "$1". Kết quả tìm kiếm là má»™t phần.', // from v2.1 added 12.1.2016 'errReauthRequire' : 'Cần á»§y quyá»�n lại.', // from v2.1.10 added 24.3.2016 'errMaxTargets' : 'Số lượng tối Ä‘a cá»§a các mục có thể chá»�n là $1.', // from v2.1.17 added 17.10.2016 'errRestore' : 'Không thể khôi phục từ thùng rác. Không thể xác định đích khôi phục.', // from v2.1.24 added 3.5.2017 'errEditorNotFound' : 'Không tìm thấy trình chỉnh sá»­a cho loại tệp này.', // from v2.1.25 added 23.5.2017 'errServerError' : 'Lá»—i xảy ra ở phía máy chá»§.', // from v2.1.25 added 16.6.2017 'errEmpty' : 'Không thể làm rá»—ng thư mục "$1".', // from v2.1.25 added 22.6.2017 'moreErrors' : 'Có thêm $1 lá»—i.', // from v2.1.44 added 9.12.2018 /******************************* commands names ********************************/ 'cmdarchive' : 'Tạo tập tin nén', 'cmdback' : 'Trở lại', 'cmdcopy' : 'Sao chép', 'cmdcut' : 'Cắt', 'cmddownload' : 'Tải vá»�', 'cmdduplicate' : 'Bản sao', 'cmdedit' : 'Sá»­a tập tin', 'cmdextract' : 'Giải nén tập tin', 'cmdforward' : 'Trước', 'cmdgetfile' : 'Chá»�n tập tin', 'cmdhelp' : 'Giá»›i thiệu phần má»�m', 'cmdhome' : 'Home', 'cmdinfo' : 'Thông tin', 'cmdmkdir' : 'Thư mục', 'cmdmkdirin' : 'Vào thư mục má»›i', // from v2.1.7 added 19.2.2016 'cmdmkfile' : 'Tạo tập tin Text', 'cmdopen' : 'Mở', 'cmdpaste' : 'Dán', 'cmdquicklook' : 'Xem trước', 'cmdreload' : 'Nạp lại', 'cmdrename' : 'Ä�ổi tên', 'cmdrm' : 'Xóa', 'cmdtrash' : 'Vào thùng rác', //from v2.1.24 added 29.4.2017 'cmdrestore' : 'Khôi phục', //from v2.1.24 added 3.5.2017 'cmdsearch' : 'Tìm tập tin', 'cmdup' : 'Go to parent directory', 'cmdupload' : 'Tải tập tin lên', 'cmdview' : 'Xem', 'cmdresize' : 'Thay đổi kích thước và xoay', 'cmdsort' : 'Sắp xếp', 'cmdnetmount' : 'Mount network volume', // added 18.04.2012 'cmdnetunmount': 'Gỡ mount', // from v2.1 added 30.04.2012 'cmdplaces' : 'To Places', // added 28.12.2014 'cmdchmod' : 'Thay đổi chế độ', // from v2.1 added 20.6.2015 'cmdopendir' : 'Mở má»™t thư mục', // from v2.1 added 13.1.2016 'cmdcolwidth' : 'Ä�ặt lại chiá»�u rá»™ng cá»™t', // from v2.1.13 added 12.06.2016 'cmdfullscreen': 'Toàn màn hình', // from v2.1.15 added 03.08.2016 'cmdmove' : 'Di chuyển', // from v2.1.15 added 21.08.2016 'cmdempty' : 'Làm rá»—ng thư mục', // from v2.1.25 added 22.06.2017 'cmdundo' : 'Há»§y bá»� (hoàn tác)', // from v2.1.27 added 31.07.2017 'cmdredo' : 'Làm lại', // from v2.1.27 added 31.07.2017 'cmdpreference': 'Preferences', // from v2.1.27 added 03.08.2017 'cmdselectall' : 'Chá»�n tất cả', // from v2.1.28 added 15.08.2017 'cmdselectnone': 'Không chá»�n gì', // from v2.1.28 added 15.08.2017 'cmdselectinvert': 'Chá»�n ngược lại', // from v2.1.28 added 15.08.2017 'cmdopennew' : 'Mở trong cá»­a sổ má»›i', // from v2.1.38 added 3.4.2018 'cmdhide' : 'Ẩn (Preference)', // from v2.1.41 added 24.7.2018 /*********************************** buttons ***********************************/ 'btnClose' : 'Ä�óng', 'btnSave' : 'Lưu', 'btnRm' : 'Gỡ bá»�', 'btnApply' : 'Ã�p dụng', 'btnCancel' : 'Há»§y bá»�', 'btnNo' : 'Không', 'btnYes' : 'Ä�ồng ý', 'btnDiscard': 'Discard changes', 'btnMount' : 'Mount', // added 18.04.2012 'btnApprove': 'Goto $1 & approve', // from v2.1 added 26.04.2012 'btnUnmount': 'Unmount', // from v2.1 added 30.04.2012 'btnConv' : 'Convert', // from v2.1 added 08.04.2014 'btnCwd' : 'Here', // from v2.1 added 22.5.2015 'btnVolume' : 'Volume', // from v2.1 added 22.5.2015 'btnAll' : 'All', // from v2.1 added 22.5.2015 'btnMime' : 'MIME Type', // from v2.1 added 22.5.2015 'btnFileName':'Filename', // from v2.1 added 22.5.2015 'btnSaveClose': 'Save & Close', // from v2.1 added 12.6.2015 'btnBackup' : 'Backup', // fromv2.1 added 28.11.2015 'btnRename' : 'Rename', // from v2.1.24 added 6.4.2017 'btnRenameAll' : 'Rename(All)', // from v2.1.24 added 6.4.2017 'btnPrevious' : 'Prev ($1/$2)', // from v2.1.24 added 11.5.2017 'btnNext' : 'Next ($1/$2)', // from v2.1.24 added 11.5.2017 'btnSaveAs' : 'Save As', // from v2.1.25 added 24.5.2017 /******************************** notifications ********************************/ 'ntfopen' : 'Mở thư mục', 'ntffile' : 'Mở tập tin', 'ntfreload' : 'Nạp lại ná»™i dung thư mục', 'ntfmkdir' : 'Tạo thư mục', 'ntfmkfile' : 'Tạo tập tin', 'ntfrm' : 'Xóa tập tin', 'ntfcopy' : 'Sao chép tập tin', 'ntfmove' : 'Di chuyển tập tin', 'ntfprepare' : 'Chuẩn bị để sao chép các tập tin', 'ntfrename' : 'Ä�ổi tên tập tin', 'ntfupload' : 'Tải tập tin lên', 'ntfdownload' : 'Tải tập tin', 'ntfsave' : 'Lưu tập tin', 'ntfarchive' : 'Tạo tập tin nén', 'ntfextract' : 'Giải nén tập tin', 'ntfsearch' : 'Tìm kiếm tập tin', 'ntfresize' : 'Resizing images', 'ntfsmth' : 'Doing something >_<', 'ntfloadimg' : 'Ä�ang tải hình ảnh', 'ntfnetmount' : 'Mounting network volume', // added 18.04.2012 'ntfnetunmount': 'Unmounting network volume', // from v2.1 added 30.04.2012 'ntfdim' : 'Acquiring image dimension', // added 20.05.2013 'ntfreaddir' : 'Reading folder infomation', // from v2.1 added 01.07.2013 'ntfurl' : 'Getting URL of link', // from v2.1 added 11.03.2014 'ntfchmod' : 'Changing file mode', // from v2.1 added 20.6.2015 'ntfpreupload': 'Verifying upload file name', // from v2.1 added 31.11.2015 'ntfzipdl' : 'Creating a file for download', // from v2.1.7 added 23.1.2016 'ntfparents' : 'Getting path infomation', // from v2.1.17 added 2.11.2016 'ntfchunkmerge': 'Processing the uploaded file', // from v2.1.17 added 2.11.2016 'ntftrash' : 'Doing throw in the trash', // from v2.1.24 added 2.5.2017 'ntfrestore' : 'Doing restore from the trash', // from v2.1.24 added 3.5.2017 'ntfchkdir' : 'Checking destination folder', // from v2.1.24 added 3.5.2017 'ntfundo' : 'Undoing previous operation', // from v2.1.27 added 31.07.2017 'ntfredo' : 'Redoing previous undone', // from v2.1.27 added 31.07.2017 'ntfchkcontent' : 'Checking contents', // from v2.1.41 added 3.8.2018 /*********************************** volumes *********************************/ 'volume_Trash' : 'Trash', //from v2.1.24 added 29.4.2017 /************************************ dates **********************************/ 'dateUnknown' : 'Chưa biết', 'Today' : 'Hôm nay', 'Yesterday' : 'Hôm qua', 'msJan' : 'Tháng 1', 'msFeb' : 'Tháng 2', 'msMar' : 'Tháng 3', 'msApr' : 'Tháng 4', 'msMay' : 'Tháng 5', 'msJun' : 'Tháng 6', 'msJul' : 'Tháng 7', 'msAug' : 'Tháng 8', 'msSep' : 'Tháng 9', 'msOct' : 'Tháng 10', 'msNov' : 'Tháng 11', 'msDec' : 'Tháng 12', 'January' : 'Tháng 1', 'February' : 'Tháng 2', 'March' : 'Tháng 3', 'April' : 'Tháng 4', 'May' : 'Tháng 5', 'June' : 'Tháng 6', 'July' : 'Tháng 7', 'August' : 'Tháng 8', 'September' : 'Tháng 9', 'October' : 'Tháng 10', 'November' : 'Tháng 11', 'December' : 'Tháng 12', 'Sunday' : 'Chá»§ nhật', 'Monday' : 'Thứ 2', 'Tuesday' : 'Thứ 3', 'Wednesday' : 'Thứ 4', 'Thursday' : 'Thứ 5', 'Friday' : 'Thứ 6', 'Saturday' : 'Thứ 7', 'Sun' : 'Chá»§ nhật', 'Mon' : 'Thứ 2', 'Tue' : 'Thứ 3', 'Wed' : 'Thứ 4', 'Thu' : 'Thứ 5', 'Fri' : 'Thứ 6', 'Sat' : 'Thứ 7', /******************************** sort variants ********************************/ 'sortname' : 'theo tên', 'sortkind' : 'theo loại', 'sortsize' : 'theo kích cỡ', 'sortdate' : 'theo ngày', 'sortFoldersFirst' : 'Thư mục đầu tiên', 'sortperm' : 'theo quyá»�n hạn', // from v2.1.13 added 13.06.2016 'sortmode' : 'theo chế độ', // from v2.1.13 added 13.06.2016 'sortowner' : 'theo ngưá»�i tạo', // from v2.1.13 added 13.06.2016 'sortgroup' : 'theo nhóm', // from v2.1.13 added 13.06.2016 'sortAlsoTreeview' : 'Also Treeview', // from v2.1.15 added 01.08.2016 /********************************** new items **********************************/ 'untitled file.txt' : 'NewFile.txt', // added 10.11.2015 'untitled folder' : 'NewFolder', // added 10.11.2015 'Archive' : 'NewArchive', // from v2.1 added 10.11.2015 'untitled file' : 'NewFile.$1', // from v2.1.41 added 6.8.2018 'extentionfile' : '$1: File', // from v2.1.41 added 6.8.2018 'extentiontype' : '$1: $2', // from v2.1.43 added 17.10.2018 /********************************** messages **********************************/ 'confirmReq' : 'Yêu cầu xác nhận', 'confirmRm' : 'Bạn có chắc chắn muốn xóa vÄ©nh viá»…n các mục?
          �i�u này không thể được hoàn tác!', 'confirmRepl' : 'Thay tập tin cũ bằng tập tin mới? (Nếu nó chứa các thư mục, nó sẽ được hợp nhất. �ể sao lưu và thay thế, ch�n Sao lưu.)', 'confirmRest' : 'Thay thế mục hiện có bằng một mục trong thùng rác?', // fromv2.1.24 added 5.5.2017 'confirmConvUTF8' : 'Not in UTF-8
          Convert to UTF-8?
          Contents become UTF-8 by saving after conversion.', // from v2.1 added 08.04.2014 'confirmNonUTF8' : 'Character encoding of this file couldn\'t be detected. It need to temporarily convert to UTF-8 for editting.
          Please select character encoding of this file.', // from v2.1.19 added 28.11.2016 'confirmNotSave' : 'It has been modified.
          Losing work if you do not save changes.', // from v2.1 added 15.7.2015 'confirmTrash' : 'Bạn có chắc chắn muốn chuyển các mục vào thùng rác?', //from v2.1.24 added 29.4.2017 'confirmMove' : 'Bạn có chắc chắn muốn chuyển các mục vào "$1"?', //from v2.1.50 added 27.7.2019 'apllyAll' : '�p dụng cho tất cả', 'name' : 'Tên', 'size' : 'Kích cỡ', 'perms' : 'Quy�n', 'modify' : 'Sửa đổi', 'kind' : 'Loại', 'read' : 'đ�c', 'write' : 'viết', 'noaccess' : 'không truy cập', 'and' : 'và', 'unknown' : 'không xác định', 'selectall' : 'Ch�n tất cả các mục', 'selectfiles' : 'Ch�n các mục', 'selectffile' : 'Ch�n mục đầu tiên', 'selectlfile' : 'Ch�n mục cuối cùng', 'viewlist' : 'Hiển thị danh sách', 'viewicons' : 'Hiển thị biểu tượng', 'viewSmall' : 'Biểu tượng nh�', // from v2.1.39 added 22.5.2018 'viewMedium' : 'Biểu tượng vừa', // from v2.1.39 added 22.5.2018 'viewLarge' : 'Biểu tượng lớn', // from v2.1.39 added 22.5.2018 'viewExtraLarge' : 'Biểu tượng cực lớn', // from v2.1.39 added 22.5.2018 'places' : 'Places', 'calc' : 'Tính toán', 'path' : '�ư�ng dẫn', 'aliasfor' : 'Bí danh cho', 'locked' : '�ã khóa', 'dim' : 'Kích thước', 'files' : 'Tệp', 'folders' : 'Thư mục', 'items' : 'Items', 'yes' : 'yes', 'no' : 'no', 'link' : 'Liên kết', 'searcresult' : 'Kết quả tìm kiếm', 'selected' : 'mục đã ch�n', 'about' : 'V�', 'shortcuts' : 'Lối tắt', 'help' : 'Giúp đỡ', 'webfm' : 'Web file manager', 'ver' : 'Phiên bản', 'protocolver' : 'phiên bản protocol', 'homepage' : 'Trang chủ dự án', 'docs' : 'Tài liệu', 'github' : 'Theo dõi chúng tôi trên GitHub', 'twitter' : 'Theo dõi chúng tôi trên Twitter', 'facebook' : 'Theo dõi chúng tôi trên Facebook', 'team' : '�ội ngũ', 'chiefdev' : 'Trùm sò', 'developer' : 'ngư�i phát triển', 'contributor' : 'ngư�i đóng góp', 'maintainer' : 'ngư�i bảo trì', 'translator' : 'ngư�i dịch', 'icons' : 'Icons', 'dontforget' : 'and don\'t forget to take your towel', 'shortcutsof' : 'Shortcuts disabled', 'dropFiles' : 'Thả tệp vào đây', 'or' : 'hoặc', 'selectForUpload' : 'Ch�n tệp', 'moveFiles' : 'Di chuyển các mục', 'copyFiles' : 'Sao chép các mục', 'restoreFiles' : 'Khôi mục các mục', // from v2.1.24 added 5.5.2017 'rmFromPlaces' : 'Remove from places', 'aspectRatio' : 'Tỉ lệ khung hình', 'scale' : 'Tỉ lệ', 'width' : 'Rộng', 'height' : 'Cao', 'resize' : 'Thay đổi kích cỡ', 'crop' : 'Cắt', 'rotate' : 'Xoay', 'rotate-cw' : 'Xoay 90 độ CW', 'rotate-ccw' : 'Xoay 90 độ CCW', 'degree' : '°', 'netMountDialogTitle' : 'Mount network volume', // added 18.04.2012 'protocol' : 'Protocol', // added 18.04.2012 'host' : 'Host', // added 18.04.2012 'port' : 'Port', // added 18.04.2012 'user' : 'User', // added 18.04.2012 'pass' : 'Password', // added 18.04.2012 'confirmUnmount' : 'Are you unmount $1?', // from v2.1 added 30.04.2012 'dropFilesBrowser': 'Drop or Paste files from browser', // from v2.1 added 30.05.2012 'dropPasteFiles' : 'Drop files, Paste URLs or images(clipboard) here', // from v2.1 added 07.04.2014 'encoding' : 'Mã hóa', // from v2.1 added 19.12.2014 'locale' : '�ịa phương', // from v2.1 added 19.12.2014 'searchTarget' : 'Mục tiêu: $1', // from v2.1 added 22.5.2015 'searchMime' : 'Tìm kiếm theo kiểu tệp (MIME)', // from v2.1 added 22.5.2015 'owner' : 'Chủ sở hữu', // from v2.1 added 20.6.2015 'group' : 'Nhóm', // from v2.1 added 20.6.2015 'other' : 'Khác', // from v2.1 added 20.6.2015 'execute' : 'Thực thi', // from v2.1 added 20.6.2015 'perm' : 'Quy�n', // from v2.1 added 20.6.2015 'mode' : 'Chế độ', // from v2.1 added 20.6.2015 'emptyFolder' : 'Thư mục trống', // from v2.1.6 added 30.12.2015 'emptyFolderDrop' : 'Thư mục trống\\A Kéo thả vào đây để thêm các mục', // from v2.1.6 added 30.12.2015 'emptyFolderLTap' : 'Thư mục trống\\A Nhấn giữ để thêm các mục', // from v2.1.6 added 30.12.2015 'quality' : 'Chất lượng', // from v2.1.6 added 5.1.2016 'autoSync' : 'Tự động động bộ', // from v2.1.6 added 10.1.2016 'moveUp' : 'Di chuyển lên', // from v2.1.6 added 18.1.2016 'getLink' : 'Lấy liên kết URL', // from v2.1.7 added 9.2.2016 'selectedItems' : 'Các mục đã ch�n ($1)', // from v2.1.7 added 2.19.2016 'folderId' : 'ID thư mục', // from v2.1.10 added 3.25.2016 'offlineAccess' : 'Cho phép truy cập ngoại tuyến', // from v2.1.10 added 3.25.2016 'reAuth' : 'Xác thực lại', // from v2.1.10 added 3.25.2016 'nowLoading' : '�ang tải...', // from v2.1.12 added 4.26.2016 'openMulti' : 'Mở nhi�u tập tin', // from v2.1.12 added 5.14.2016 'openMultiConfirm': 'You are trying to open the $1 files. Are you sure you want to open in browser?', // from v2.1.12 added 5.14.2016 'emptySearch' : 'Kết quả tìm kiếm trống trong mục tiêu tìm kiếm.', // from v2.1.12 added 5.16.2016 'editingFile' : 'Nó là một tập tin đang chỉnh sửa.', // from v2.1.13 added 6.3.2016 'hasSelected' : 'You have selected $1 items.', // from v2.1.13 added 6.3.2016 'hasClipboard' : 'You have $1 items in the clipboard.', // from v2.1.13 added 6.3.2016 'incSearchOnly' : 'Tìm kiếm gia tăng chỉ từ hiển thị hiện tại.', // from v2.1.13 added 6.30.2016 'reinstate' : 'Phục hồi', // from v2.1.15 added 3.8.2016 'complete' : '$1 hoàn thành', // from v2.1.15 added 21.8.2016 'contextmenu' : 'Trình đơn ngữ cảnh', // from v2.1.15 added 9.9.2016 'pageTurning' : 'Chuyển trang', // from v2.1.15 added 10.9.2016 'volumeRoots' : 'Volume roots', // from v2.1.16 added 16.9.2016 'reset' : '�ặt lại', // from v2.1.16 added 1.10.2016 'bgcolor' : 'Màu n�n', // from v2.1.16 added 1.10.2016 'colorPicker' : 'Ch�n màu', // from v2.1.16 added 1.10.2016 '8pxgrid' : '8px Grid', // from v2.1.16 added 4.10.2016 'enabled' : '�ã bật', // from v2.1.16 added 4.10.2016 'disabled' : '�ã tắt', // from v2.1.16 added 4.10.2016 'emptyIncSearch' : 'Search results is empty in current view.\\APress [Enter] to expand search target.', // from v2.1.16 added 5.10.2016 'emptyLetSearch' : 'Kết quả tìm kiếm thư đầu tiên là trống trong chế độ xem hiện tại.', // from v2.1.23 added 24.3.2017 'textLabel' : 'Nhãn văn bản', // from v2.1.17 added 13.10.2016 'minsLeft' : '$1 mins left', // from v2.1.17 added 13.11.2016 'openAsEncoding' : 'Reopen with selected encoding', // from v2.1.19 added 2.12.2016 'saveAsEncoding' : 'Save with the selected encoding', // from v2.1.19 added 2.12.2016 'selectFolder' : 'Ch�n thư mục', // from v2.1.20 added 13.12.2016 'firstLetterSearch': 'First letter search', // from v2.1.23 added 24.3.2017 'presets' : '�ặt trước', // from v2.1.25 added 26.5.2017 'tooManyToTrash' : 'Có quá nhi�u mục vì vậy không thể cho vào thùng rác.', // from v2.1.25 added 9.6.2017 'TextArea' : 'TextArea', // from v2.1.25 added 14.6.2017 'folderToEmpty' : 'Empty the folder "$1".', // from v2.1.25 added 22.6.2017 'filderIsEmpty' : 'There are no items in a folder "$1".', // from v2.1.25 added 22.6.2017 'preference' : 'Preference', // from v2.1.26 added 28.6.2017 'language' : 'Ngôn ngữ', // from v2.1.26 added 28.6.2017 'clearBrowserData': 'Initialize the settings saved in this browser', // from v2.1.26 added 28.6.2017 'toolbarPref' : 'Cài đặt thanh công cụ', // from v2.1.27 added 2.8.2017 'charsLeft' : '... $1 chars left.', // from v2.1.29 added 30.8.2017 'sum' : 'Sum', // from v2.1.29 added 28.9.2017 'roughFileSize' : 'Rough file size', // from v2.1.30 added 2.11.2017 'autoFocusDialog' : 'Focus on the element of dialog with mouseover', // from v2.1.30 added 2.11.2017 'select' : 'Select', // from v2.1.30 added 23.11.2017 'selectAction' : 'Action when select file', // from v2.1.30 added 23.11.2017 'useStoredEditor' : 'Open with the editor used last time', // from v2.1.30 added 23.11.2017 'selectinvert' : 'Invert selection', // from v2.1.30 added 25.11.2017 'renameMultiple' : 'Are you sure you want to rename $1 selected items like $2?
          This cannot be undone!', // from v2.1.31 added 4.12.2017 'batchRename' : 'Batch rename', // from v2.1.31 added 8.12.2017 'plusNumber' : '+ Number', // from v2.1.31 added 8.12.2017 'asPrefix' : 'Thêm tiá»�n tố', // from v2.1.31 added 8.12.2017 'asSuffix' : 'Thêm hậu tố', // from v2.1.31 added 8.12.2017 'changeExtention' : 'Thay đổi phần mở rá»™ng', // from v2.1.31 added 8.12.2017 'columnPref' : 'Columns settings (List view)', // from v2.1.32 added 6.2.2018 'reflectOnImmediate' : 'All changes will reflect immediately to the archive.', // from v2.1.33 added 2.3.2018 'reflectOnUnmount' : 'Any changes will not reflect until un-mount this volume.', // from v2.1.33 added 2.3.2018 'unmountChildren' : 'The following volume(s) mounted on this volume also unmounted. Are you sure to unmount it?', // from v2.1.33 added 5.3.2018 'selectionInfo' : 'Selection Info', // from v2.1.33 added 7.3.2018 'hashChecker' : 'Algorithms to show the file hash', // from v2.1.33 added 10.3.2018 'infoItems' : 'Info Items (Selection Info Panel)', // from v2.1.38 added 28.3.2018 'pressAgainToExit': 'Nhấn má»™t lần nữa để thoát.', // from v2.1.38 added 1.4.2018 'toolbar' : 'Toolbar', // from v2.1.38 added 4.4.2018 'workspace' : 'Work Space', // from v2.1.38 added 4.4.2018 'dialog' : 'Dialog', // from v2.1.38 added 4.4.2018 'all' : 'All', // from v2.1.38 added 4.4.2018 'iconSize' : 'Icon Size (Icons view)', // from v2.1.39 added 7.5.2018 'editorMaximized' : 'Open the maximized editor window', // from v2.1.40 added 30.6.2018 'editorConvNoApi' : 'Because conversion by API is not currently available, please convert on the website.', //from v2.1.40 added 8.7.2018 'editorConvNeedUpload' : 'After conversion, you must be upload with the item URL or a downloaded file to save the converted file.', //from v2.1.40 added 8.7.2018 'convertOn' : 'Convert on the site of $1', // from v2.1.40 added 10.7.2018 'integrations' : 'Integrations', // from v2.1.40 added 11.7.2018 'integrationWith' : 'This elFinder has the following external services integrated. Please check the terms of use, privacy policy, etc. before using it.', // from v2.1.40 added 11.7.2018 'showHidden' : 'Show hidden items', // from v2.1.41 added 24.7.2018 'hideHidden' : 'Hide hidden items', // from v2.1.41 added 24.7.2018 'toggleHidden' : 'Show/Hide hidden items', // from v2.1.41 added 24.7.2018 'makefileTypes' : 'File types to enable with "New file"', // from v2.1.41 added 7.8.2018 'typeOfTextfile' : 'Type of the Text file', // from v2.1.41 added 7.8.2018 'add' : 'Add', // from v2.1.41 added 7.8.2018 'theme' : 'Theme', // from v2.1.43 added 19.10.2018 'default' : 'Default', // from v2.1.43 added 19.10.2018 'description' : 'Description', // from v2.1.43 added 19.10.2018 'website' : 'Website', // from v2.1.43 added 19.10.2018 'author' : 'Author', // from v2.1.43 added 19.10.2018 'email' : 'Email', // from v2.1.43 added 19.10.2018 'license' : 'License', // from v2.1.43 added 19.10.2018 'exportToSave' : 'This item can\'t be saved. To avoid losing the edits you need to export to your PC.', // from v2.1.44 added 1.12.2018 'dblclickToSelect': 'Double click on the file to select it.', // from v2.1.47 added 22.1.2019 'useFullscreen' : 'Use fullscreen mode', // from v2.1.47 added 19.2.2019 /********************************** mimetypes **********************************/ 'kindUnknown' : 'Unknown', 'kindRoot' : 'Volume Root', // from v2.1.16 added 16.10.2016 'kindFolder' : 'Folder', 'kindSelects' : 'Selections', // from v2.1.29 added 29.8.2017 'kindAlias' : 'Alias', 'kindAliasBroken' : 'Broken alias', // applications 'kindApp' : 'Application', 'kindPostscript' : 'Postscript document', 'kindMsOffice' : 'Microsoft Office document', 'kindMsWord' : 'Microsoft Word document', 'kindMsExcel' : 'Microsoft Excel document', 'kindMsPP' : 'Microsoft Powerpoint presentation', 'kindOO' : 'Open Office document', 'kindAppFlash' : 'Flash application', 'kindPDF' : 'Portable Document Format (PDF)', 'kindTorrent' : 'Bittorrent file', 'kind7z' : '7z archive', 'kindTAR' : 'TAR archive', 'kindGZIP' : 'GZIP archive', 'kindBZIP' : 'BZIP archive', 'kindXZ' : 'XZ archive', 'kindZIP' : 'ZIP archive', 'kindRAR' : 'RAR archive', 'kindJAR' : 'Java JAR file', 'kindTTF' : 'True Type font', 'kindOTF' : 'Open Type font', 'kindRPM' : 'RPM package', // fonts 'kindFont' : 'Font', 'kindSFNT' : 'SFNT font', 'kindEOT' : 'Embedded Open Type font', 'kindWOFF' : 'Web Open Font Format', 'kindWOFF2' : 'Web Open Font Format 2', // texts 'kindText' : 'Text document', 'kindTextPlain' : 'Plain text', 'kindPHP' : 'PHP source', 'kindCSS' : 'Cascading style sheet', 'kindHTML' : 'HTML document', 'kindJS' : 'Javascript source', 'kindRTF' : 'Rich Text Format', 'kindC' : 'C source', 'kindCHeader' : 'C header source', 'kindCPP' : 'C++ source', 'kindCPPHeader' : 'C++ header source', 'kindShell' : 'Unix shell script', 'kindPython' : 'Python source', 'kindJava' : 'Java source', 'kindRuby' : 'Ruby source', 'kindPerl' : 'Perl script', 'kindSQL' : 'SQL source', 'kindXML' : 'XML document', 'kindAWK' : 'AWK source', 'kindCSV' : 'Comma separated values', 'kindDOCBOOK' : 'Docbook XML document', 'kindMarkdown' : 'Markdown text', // added 20.7.2015 // images 'kindImage' : 'Image', 'kindBMP' : 'BMP image', 'kindJPEG' : 'JPEG image', 'kindGIF' : 'GIF Image', 'kindPNG' : 'PNG Image', 'kindTIFF' : 'TIFF image', 'kindTGA' : 'TGA image', 'kindPSD' : 'Adobe Photoshop image', 'kindXBITMAP' : 'X bitmap image', 'kindPXM' : 'Pixelmator image', // media 'kindAudio' : 'Audio media', 'kindAudioMPEG' : 'MPEG audio', 'kindAudioMPEG4' : 'MPEG-4 audio', 'kindAudioMIDI' : 'MIDI audio', 'kindAudioOGG' : 'Ogg Vorbis audio', 'kindAudioWAV' : 'WAV audio', 'AudioPlaylist' : 'MP3 playlist', 'kindVideo' : 'Video media', 'kindVideoDV' : 'DV movie', 'kindVideoMPEG' : 'MPEG movie', 'kindVideoMPEG4' : 'MPEG-4 movie', 'kindVideoAVI' : 'AVI movie', 'kindVideoMOV' : 'Quick Time movie', 'kindVideoWM' : 'Windows Media movie', 'kindVideoFlash' : 'Flash movie', 'kindVideoMKV' : 'Matroska movie', 'kindVideoOGG' : 'Ogg movie' } }; })); PK!ùÿ,@,@@file-manager-advanced/application/library/js/i18n/elfinder.sl.jsnu„[µü¤/** * Slovenian translation * @author Damjan Rems * @version 2014-12-19 */ (function(root, factory) { if (typeof define === 'function' && define.amd) { define(['elfinder'], factory); } else if (typeof exports !== 'undefined') { module.exports = factory(require('elfinder')); } else { factory(root.elFinder); } }(this, function(elFinder) { elFinder.prototype.i18.sl = { translator : 'Damjan Rems <d_rems at yahoo.com>', language : 'SlovenÅ¡Ä�ina', direction : 'ltr', dateFormat : 'd.m.Y H:i', fancyDateFormat : '$1 H:i', messages : { /********************************** errors **********************************/ 'error' : 'Napaka', 'errUnknown' : 'Neznana napaka.', 'errUnknownCmd' : 'Neznan ukaz.', 'errJqui' : 'NapaÄ�na jQuery UI nastavitev. Selectable, draggable in droppable dodatki morajo biti vkljuÄ�eni.', 'errNode' : 'elFinder potrebuje "DOM Element".', 'errURL' : 'NapaÄ�na nastavitev elFinder-ja! Manjka URL nastavitev.', 'errAccess' : 'Dostop zavrnjen.', 'errConnect' : 'Ne morem se prikljuÄ�iti na "backend".', 'errAbort' : 'Povezava prekinjena (aborted).', 'errTimeout' : 'Povezava potekla (timeout).', 'errNotFound' : 'Nisem naÅ¡el "backend-a".', 'errResponse' : 'NapaÄ�ni "backend" odgovor.', 'errConf' : 'NapaÄ�na "backend" nastavitev.', 'errJSON' : 'JSON modul ni instaliran.', 'errNoVolumes' : 'Readable volumes not available.', 'errCmdParams' : 'NapaÄ�ni parametri za ukaz "$1".', 'errDataNotJSON' : 'Podatki niso v JSON obliki.', 'errDataEmpty' : 'Ni podatkov oz. so prazni.', 'errCmdReq' : '"Backend" zahtevek potrebuje ime ukaza.', 'errOpen' : '"$1" ni možno odpreti.', 'errNotFolder' : 'Objekt ni mapa.', 'errNotFile' : 'Objekt ni datoteka.', 'errRead' : '"$1" ni možno brati.', 'errWrite' : 'Ne morem pisati v "$1".', 'errPerm' : 'Dostop zavrnjen.', 'errLocked' : '"$1" je zaklenjen(a) in je ni možno preimenovati, premakniti ali izbrisati.', 'errExists' : 'Datoteka z imenom "$1" že obstaja.', 'errInvName' : 'NapaÄ�no ime datoteke.', 'errFolderNotFound' : 'Mape nisem naÅ¡el.', 'errFileNotFound' : 'Datoteke nisem naÅ¡el.', 'errTrgFolderNotFound' : 'Ciljna mapa "$1" ne obstaja.', 'errPopup' : 'Brskalnik je prepreÄ�il prikaz (popup) okna. Za vpogled datoteke omogoÄ�ite nastavitev v vaÅ¡em brskalniku.', 'errMkdir' : 'Ni možno dodati mape "$1".', 'errMkfile' : 'Ni možno dodati datoteke "$1".', 'errRename' : 'Ni možno preimenovati "$1".', 'errCopyFrom' : 'Kopiranje datotek iz "$1" ni dovoljeno.', 'errCopyTo' : 'Kopiranje datotek na "$1" ni dovoljeno.', 'errUpload' : 'Napaka pri prenosu.', 'errUploadFile' : '"$1" ni možno naložiti (upload).', 'errUploadNoFiles' : 'Ni datotek za nalaganje (upload).', 'errUploadTotalSize' : 'Podatki presegajo najveÄ�jo dovoljeno velikost.', 'errUploadFileSize' : 'Datoteka presega najveÄ�jo dovoljeno velikost.', 'errUploadMime' : 'Datoteke s to konÄ�nico niso dovoljene.', 'errUploadTransfer' : '"$1" napaka pri prenosu.', 'errNotReplace' : 'Object "$1" already exists at this location and can not be replaced by object with another type.', 'errReplace' : 'Unable to replace "$1".', 'errSave' : '"$1" ni možno shraniti.', 'errCopy' : '"$1" ni možno kopirati.', 'errMove' : '"$1" ni možno premakniti.', 'errCopyInItself' : '"$1" ni možno kopirati samo vase.', 'errRm' : '"$1" ni možno izbrisati.', 'errRmSrc' : 'Unable remove source file(s).', 'errExtract' : 'Datotek iz "$1" ni možno odpakirati.', 'errArchive' : 'Napaka pri delanju arhiva.', 'errArcType' : 'Nepodprta vrsta arhiva.', 'errNoArchive' : 'Datoteka ni arhiv ali vrsta arhiva ni podprta.', 'errCmdNoSupport' : '"Backend" ne podpira tega ukaza.', 'errReplByChild' : 'Mape “$1â€� ni možno zamenjati z vsebino mape.', 'errArcSymlinks' : 'Zaradi varnostnih razlogov arhiva ki vsebuje "symlinks" ni možno odpakirati.', 'errArcMaxSize' : 'Datoteke v arhivu presegajo najveÄ�jo dovoljeno velikost.', 'errResize' : '"$1" ni možno razÅ¡iriti.', 'errResizeDegree' : 'Invalid rotate degree.', 'errResizeRotate' : 'Unable to rotate image.', 'errResizeSize' : 'Invalid image size.', 'errResizeNoChange' : 'Image size not changed.', 'errUsupportType' : 'Nepodprta vrsta datoteke.', 'errNotUTF8Content' : 'File "$1" is not in UTF-8 and cannot be edited.', // added 9.11.2011 'errNetMount' : 'Unable to mount "$1".', // added 17.04.2012 'errNetMountNoDriver' : 'Unsupported protocol.', // added 17.04.2012 'errNetMountFailed' : 'Mount failed.', // added 17.04.2012 'errNetMountHostReq' : 'Host required.', // added 18.04.2012 'errSessionExpires' : 'Your session has expired due to inactivity.', 'errCreatingTempDir' : 'Unable to create temporary directory: "$1"', 'errFtpDownloadFile' : 'Unable to download file from FTP: "$1"', 'errFtpUploadFile' : 'Unable to upload file to FTP: "$1"', 'errFtpMkdir' : 'Unable to create remote directory on FTP: "$1"', 'errArchiveExec' : 'Error while archiving files: "$1"', 'errExtractExec' : 'Error while extracting files: "$1"', /******************************* commands names ********************************/ 'cmdarchive' : 'Naredi arhiv', 'cmdback' : 'Nazaj', 'cmdcopy' : 'Kopiraj', 'cmdcut' : 'Izreži', 'cmddownload' : 'Poberi (download)', 'cmdduplicate' : 'Podvoji', 'cmdedit' : 'Uredi datoteko', 'cmdextract' : 'Odpakiraj datoteke iz arhiva', 'cmdforward' : 'Naprej', 'cmdgetfile' : 'Izberi datoteke', 'cmdhelp' : 'VeÄ� o', 'cmdhome' : 'Domov', 'cmdinfo' : 'Lastnosti', 'cmdmkdir' : 'Nova mapa', 'cmdmkfile' : 'Nova datoteka', 'cmdopen' : 'Odpri', 'cmdpaste' : 'Prilepi', 'cmdquicklook' : 'Hitri ogled', 'cmdreload' : 'Osveži', 'cmdrename' : 'Preimenuj', 'cmdrm' : 'IzbriÅ¡i', 'cmdsearch' : 'PoiÅ¡Ä�i datoteke', 'cmdup' : 'Mapa nazaj', 'cmdupload' : 'Naloži (upload)', 'cmdview' : 'Ogled', 'cmdresize' : 'PoveÄ�aj (pomanjÅ¡aj) sliko', 'cmdsort' : 'Razvrsti', 'cmdnetmount' : 'Mount network volume', /*********************************** buttons ***********************************/ 'btnClose' : 'Zapri', 'btnSave' : 'Shrani', 'btnRm' : 'IzbriÅ¡i', 'btnApply' : 'Uporabi', 'btnCancel' : 'PrekliÄ�i', 'btnNo' : 'Ne', 'btnYes' : 'Da', 'btnDiscard': 'Discard changes', 'btnMount' : 'Mount', /******************************** notifications ********************************/ 'ntfopen' : 'Odpri mapo', 'ntffile' : 'Odpri datoteko', 'ntfreload' : 'Osveži vsebino mape', 'ntfmkdir' : 'Ustvarjam mapo', 'ntfmkfile' : 'Ustvarjam datoteke', 'ntfrm' : 'BriÅ¡em datoteke', 'ntfcopy' : 'Kopiram datoteke', 'ntfmove' : 'Premikam datoteke', 'ntfprepare' : 'Pripravljam se na kopiranje datotek', 'ntfrename' : 'Preimenujem datoteke', 'ntfupload' : 'Nalagam (upload) datoteke', 'ntfdownload' : 'Pobiram (download) datoteke', 'ntfsave' : 'Shranjujem datoteke', 'ntfarchive' : 'Ustvarjam arhiv', 'ntfextract' : 'Razpakiram datoteke iz arhiva', 'ntfsearch' : 'IÅ¡Ä�em datoteke', 'ntfresize' : 'Resizing images', 'ntfsmth' : 'PoÄ�akaj delam >_<', 'ntfloadimg' : 'Nalagam sliko', 'ntfnetmount' : 'Mounting network volume', // added 18.04.2012 'ntfdim' : 'Acquiring image dimension', // added 20.05.2013 /************************************ dates **********************************/ 'dateUnknown' : 'neznan', 'Today' : 'Danes', 'Yesterday' : 'VÄ�eraj', 'msJan' : 'Jan', 'msFeb' : 'Feb', 'msMar' : 'Mar', 'msApr' : 'Apr', 'msMay' : 'Maj', 'msJun' : 'Jun', 'msJul' : 'Jul', 'msAug' : 'Avg', 'msSep' : 'Sep', 'msOct' : 'Okt', 'msNov' : 'Nov', 'msDec' : 'Dec', 'January' : 'Januar', 'February' : 'Februar', 'March' : 'Marec', 'April' : 'April', 'May' : 'Maj', 'June' : 'Junij', 'July' : 'Julij', 'August' : 'Avgust', 'September' : 'September', 'October' : 'Oktober', 'November' : 'November', 'December' : 'December', 'Sunday' : 'Nedelja', 'Monday' : 'Ponedeljek', 'Tuesday' : 'Torek', 'Wednesday' : 'Sreda', 'Thursday' : 'ÄŒetrtek', 'Friday' : 'Petek', 'Saturday' : 'Sobota', 'Sun' : 'Ned', 'Mon' : 'Pon', 'Tue' : 'Tor', 'Wed' : 'Sre', 'Thu' : 'ÄŒet', 'Fri' : 'Pet', 'Sat' : 'Sob', /******************************** sort variants ********************************/ 'sortname' : 'po imenu', 'sortkind' : 'po vrsti', 'sortsize' : 'po velikosti', 'sortdate' : 'po datumu', 'sortFoldersFirst' : 'Folders first', /********************************** messages **********************************/ 'confirmReq' : 'Zahtevana je potrditev', 'confirmRm' : 'Ste prepriÄ�ani, da želite izbrisati datoteko?
          POZOR! Tega ukaza ni možno preklicati!', 'confirmRepl' : 'Zamenjam staro datoteko z novo?', 'apllyAll' : 'Uporabi pri vseh', 'name' : 'Ime', 'size' : 'Velikost', 'perms' : 'Dovoljenja', 'modify' : 'Spremenjeno', 'kind' : 'Vrsta', 'read' : 'beri', 'write' : 'piÅ¡i', 'noaccess' : 'ni dostopa', 'and' : 'in', 'unknown' : 'neznan', 'selectall' : 'Izberi vse datoteke', 'selectfiles' : 'Izberi datotek(o)e', 'selectffile' : 'Izberi prvo datoteko', 'selectlfile' : 'Izberi zadnjo datoteko', 'viewlist' : 'Seznam', 'viewicons' : 'Ikone', 'places' : 'Mesta (places)', 'calc' : 'IzraÄ�un', 'path' : 'Pot do', 'aliasfor' : 'Sopomenka (alias) za', 'locked' : 'Zaklenjeno', 'dim' : 'Dimenzije', 'files' : 'Datoteke', 'folders' : 'Mape', 'items' : 'Predmeti', 'yes' : 'da', 'no' : 'ne', 'link' : 'Povezava', 'searcresult' : 'Rezultati iskanja', 'selected' : 'izbrani predmeti', 'about' : 'VeÄ� o', 'shortcuts' : 'Bližnjice', 'help' : 'PomoÄ�', 'webfm' : 'Spletni upravitelj datotek', 'ver' : 'Verzija', 'protocolver' : 'verzija protokola', 'homepage' : 'DomaÄ�a stran', 'docs' : 'Dokumentacija', 'github' : 'Fork us on Github', 'twitter' : 'Sledi na twitterju', 'facebook' : 'Pridruži se nam na facebook-u', 'team' : 'Tim', 'chiefdev' : 'Glavni razvijalec', 'developer' : 'razvijalec', 'contributor' : 'contributor', 'maintainer' : 'vzdrževalec', 'translator' : 'prevajalec', 'icons' : 'Ikone', 'dontforget' : 'In ne pozabi na brisaÄ�o', 'shortcutsof' : 'Bližnjica onemogoÄ�ena', 'dropFiles' : 'Datoteke spusti tukaj', 'or' : 'ali', 'selectForUpload' : 'Izberi datoteke za nalaganje', 'moveFiles' : 'Premakni datoteke', 'copyFiles' : 'Kopiraj datoteke', 'rmFromPlaces' : 'IzbriÅ¡i iz mesta (places)', 'aspectRatio' : 'Razmerje slike', 'scale' : 'RazÅ¡iri', 'width' : 'Å irina', 'height' : 'ViÅ¡ina', 'resize' : 'PoveÄ�aj', 'crop' : 'Obreži', 'rotate' : 'Zavrti', 'rotate-cw' : 'Zavrti 90 st. v smeri ure', 'rotate-ccw' : 'Zavrti 90 st. v obratni smeri ure', 'degree' : 'Stopnja', 'netMountDialogTitle' : 'Mount network volume', // added 18.04.2012 'protocol' : 'Protocol', // added 18.04.2012 'host' : 'Host', // added 18.04.2012 'port' : 'Port', // added 18.04.2012 'user' : 'User', // added 18.04.2012 'pass' : 'Password', // added 18.04.2012 /********************************** mimetypes **********************************/ 'kindUnknown' : 'Neznan', 'kindFolder' : 'Mapa', 'kindAlias' : 'Sopomenka (alias)', 'kindAliasBroken' : 'NedelujoÄ�a sopomenka (alias)', // applications 'kindApp' : 'Program', 'kindPostscript' : 'Postscript dokument', 'kindMsOffice' : 'Microsoft Office dokument', 'kindMsWord' : 'Microsoft Word dokument', 'kindMsExcel' : 'Microsoft Excel dokument', 'kindMsPP' : 'Microsoft Powerpoint predstavitev', 'kindOO' : 'Open Office dokument', 'kindAppFlash' : 'Flash program', 'kindPDF' : 'Portable Document Format (PDF)', 'kindTorrent' : 'Bittorrent datoteka', 'kind7z' : '7z arhiv', 'kindTAR' : 'TAR arhiv', 'kindGZIP' : 'GZIP arhiv', 'kindBZIP' : 'BZIP arhiv', 'kindXZ' : 'XZ arhiv', 'kindZIP' : 'ZIP arhiv', 'kindRAR' : 'RAR arhiv', 'kindJAR' : 'Java JAR datoteka', 'kindTTF' : 'True Type font', 'kindOTF' : 'Open Type font', 'kindRPM' : 'RPM paket', // fonts 'kindFont' : 'Font', 'kindSFNT' : 'SFNT font', 'kindEOT' : 'Embedded Open Type font', 'kindWOFF' : 'Web Open Font Format', 'kindWOFF2' : 'Web Open Font Format 2', // texts 'kindText' : 'Tekst dokument', 'kindTextPlain' : 'Samo tekst', 'kindPHP' : 'PHP koda', 'kindCSS' : 'Cascading style sheet (CSS)', 'kindHTML' : 'HTML dokument', 'kindJS' : 'Javascript koda', 'kindRTF' : 'Rich Text Format (RTF)', 'kindC' : 'C koda', 'kindCHeader' : 'C header koda', 'kindCPP' : 'C++ koda', 'kindCPPHeader' : 'C++ header koda', 'kindShell' : 'Unix shell skripta', 'kindPython' : 'Python kdoa', 'kindJava' : 'Java koda', 'kindRuby' : 'Ruby koda', 'kindPerl' : 'Perl skripta', 'kindSQL' : 'SQL koda', 'kindXML' : 'XML dokument', 'kindAWK' : 'AWK koda', 'kindCSV' : 'Besedilo loÄ�eno z vejico (CSV)', 'kindDOCBOOK' : 'Docbook XML dokument', // images 'kindImage' : 'Slika', 'kindBMP' : 'BMP slika', 'kindJPEG' : 'JPEG slika', 'kindGIF' : 'GIF slika', 'kindPNG' : 'PNG slika', 'kindTIFF' : 'TIFF slika', 'kindTGA' : 'TGA slika', 'kindPSD' : 'Adobe Photoshop slika', 'kindXBITMAP' : 'X bitmap slika', 'kindPXM' : 'Pixelmator slika', // media 'kindAudio' : 'Avdio medija', 'kindAudioMPEG' : 'MPEG zvok', 'kindAudioMPEG4' : 'MPEG-4 zvok', 'kindAudioMIDI' : 'MIDI zvok', 'kindAudioOGG' : 'Ogg Vorbis zvok', 'kindAudioWAV' : 'WAV zvok', 'AudioPlaylist' : 'MP3 seznam', 'kindVideo' : 'Video medija', 'kindVideoDV' : 'DV film', 'kindVideoMPEG' : 'MPEG film', 'kindVideoMPEG4' : 'MPEG-4 film', 'kindVideoAVI' : 'AVI film', 'kindVideoMOV' : 'Quick Time film', 'kindVideoWM' : 'Windows Media film', 'kindVideoFlash' : 'Flash film', 'kindVideoMKV' : 'Matroska film', 'kindVideoOGG' : 'Ogg film' } }; })); PK!ÏÈ’·eeCfile-manager-advanced/application/library/js/i18n/elfinder.zh_CN.jsnu„[µü¤/** * 简体中文 translation * @author 翻译者 deerchao * @author Andy Hu * @author Max Wen * @author Kejun Chang * @author LDMING * @author Andy Lee * @author Cololi * @version 2020-04-07 */ (function(root, factory) { if (typeof define === 'function' && define.amd) { define(['elfinder'], factory); } else if (typeof exports !== 'undefined') { module.exports = factory(require('elfinder')); } else { factory(root.elFinder); } }(this, function(elFinder) { elFinder.prototype.i18.zh_CN = { translator : '翻译者 deerchao <deerchao@gmail.com>, Andy Hu <andyhu7@yahoo.com.hk>, Max Wen<max.wen@qq.com>, Kejun Chang <changkejun@hotmail.com>, LDMING <china-live@live.cn>, Andy Lee <oraclei@126.com>, Cololi <i@cololi.moe>', language : '简体中文', direction : 'ltr', dateFormat : 'Y-m-d H:i', // will show like: 2020-04-07 14:53 fancyDateFormat : '$1 H:i', // will show like: 今天 14:53 nonameDateFormat : 'ymd-His', // noname upload will show like: 200407-145300 messages : { /********************************** errors **********************************/ 'error' : '错误', 'errUnknown' : '未知的错误.', 'errUnknownCmd' : '未知的命令.', 'errJqui' : '无效的 jQuery UI é…�ç½®,必须包å�« Selectableã€�draggable 以å�Š droppable 组件.', 'errNode' : 'elFinder 需è¦�能创建 DOM 元素.', 'errURL' : '无效的 elFinder é…�ç½®! URL 选项未é…�ç½®.', 'errAccess' : '访问被拒ç»�.', 'errConnect' : 'ä¸�能连接到æœ�务器端.', 'errAbort' : '连接中止.', 'errTimeout' : '连接超时.', 'errNotFound' : '未找到æœ�务器端.', 'errResponse' : '无效的æœ�务器端å“�应.', 'errConf' : '无效的æœ�务器端é…�ç½®.', 'errJSON' : 'PHP JSON 模å�—未安装.', 'errNoVolumes' : 'æ— å�¯è¯»çš„å�·.', 'errCmdParams' : '无效的命令 "$1".', 'errDataNotJSON' : 'æœ�务器返回的数æ�®ä¸�符å�ˆ JSON æ ¼å¼�.', 'errDataEmpty' : 'æœ�务器返回的数æ�®ä¸ºç©º.', 'errCmdReq' : 'æœ�务器端请求需è¦�命令å��ç§°.', 'errOpen' : '无法打开 "$1".', 'errNotFolder' : '对象ä¸�是文件夹.', 'errNotFile' : '对象ä¸�是文件.', 'errRead' : '无法读å�– "$1".', 'errWrite' : '无法写入 "$1".', 'errPerm' : '没有æ�ƒé™�.', 'errLocked' : '"$1" 已被é”�定,ä¸�能é‡�命å��, 移动或删除.', 'errExists' : '文件 "$1" å·²ç»�存在.', 'errInvName' : '无效的文件å��.', 'errInvDirname' : '无效的文件夹å��.', // from v2.1.24 added 12.4.2017 'errFolderNotFound' : '文件夹ä¸�存在.', 'errFileNotFound' : '文件ä¸�存在.', 'errTrgFolderNotFound' : '未找到目标文件夹 "$1".', 'errPopup' : 'æµ�览器拦截了弹出窗å�£. 请在选项中å…�许弹出窗å�£.', 'errMkdir' : 'ä¸�能创建文件夹 "$1".', 'errMkfile' : 'ä¸�能创建文件 "$1".', 'errRename' : 'ä¸�能é‡�命å�� "$1".', 'errCopyFrom' : 'ä¸�å…�许从å�· "$1" å¤�制.', 'errCopyTo' : 'ä¸�å…�许å�‘å�· "$1" å¤�制.', 'errMkOutLink' : '无法创建链接到å�·æ ¹ä»¥å¤–的链接.', // from v2.1 added 03.10.2015 'errUpload' : '上传出错.', // old name - errUploadCommon 'errUploadFile' : '无法上传 "$1".', // old name - errUpload 'errUploadNoFiles' : '未找到è¦�上传的文件.', 'errUploadTotalSize' : 'æ•°æ�®è¶…过了å…�许的最大大å°�.', // old name - errMaxSize 'errUploadFileSize' : '文件超过了å…�许的最大大å°�.', // old name - errFileMaxSize 'errUploadMime' : 'ä¸�å…�许的文件类型.', 'errUploadTransfer' : '"$1" 传输错误.', 'errUploadTemp' : '无法为上传文件创建临时文件.', // from v2.1 added 26.09.2015 'errNotReplace' : ' "$1" 已存在, ä¸�能被替æ�¢.', // new 'errReplace' : '无法替æ�¢ "$1".', 'errSave' : '无法ä¿�å­˜ "$1".', 'errCopy' : '无法å¤�制 "$1".', 'errMove' : '无法移动 "$1".', 'errCopyInItself' : 'ä¸�能移动 "$1" 到原有ä½�ç½®.', 'errRm' : '无法删除 "$1".', 'errTrash' : '无法移到回收站.', // from v2.1.24 added 30.4.2017 'errRmSrc' : 'ä¸�能删除æº�文件.', 'errExtract' : '无法从 "$1" æ��å�–文件.', 'errArchive' : '无法创建压缩包.', 'errArcType' : 'ä¸�支æŒ�的压缩格å¼�.', 'errNoArchive' : '文件ä¸�是压缩包, 或者ä¸�支æŒ�该压缩格å¼�.', 'errCmdNoSupport' : 'æœ�务器端ä¸�支æŒ�该命令.', 'errReplByChild' : 'ä¸�能用文件夹 “$1â€� 下的项替æ�¢æ–‡ä»¶å¤¹ “$1â€� 自身.', 'errArcSymlinks' : '出于安全上的考虑,ä¸�å…�许解压包å�«ç¬¦å�·é“¾æŽ¥çš„压缩包.', // edited 24.06.2012 'errArcMaxSize' : '压缩包文件超过最大å…�许文件大å°�范围.', 'errResize' : '无法将调整大å°�到 "$1".', 'errResizeDegree' : '无效的旋转角度.', // added 7.3.2013 'errResizeRotate' : '无法旋转图片.', // added 7.3.2013 'errResizeSize' : '无效的图片尺寸.', // added 7.3.2013 'errResizeNoChange' : '图片尺寸未改å�˜.', // added 7.3.2013 'errUsupportType' : 'ä¸�被支æŒ�的文件格å¼�.', 'errNotUTF8Content' : '文件 "$1" ä¸�是 UTF-8 æ ¼å¼�, ä¸�能编辑.', // added 9.11.2011 'errNetMount' : '无法装载 "$1".', // added 17.04.2012 'errNetMountNoDriver' : 'ä¸�支æŒ�该å��è®®.', // added 17.04.2012 'errNetMountFailed' : '装载失败.', // added 17.04.2012 'errNetMountHostReq' : '需è¦�指定主机.', // added 18.04.2012 'errSessionExpires' : '您的会è¯�由于长时间未活动已过期.', 'errCreatingTempDir' : '无法创建临时目录 "$1"', 'errFtpDownloadFile' : '无法从FTP下载文件 "$1" ', 'errFtpUploadFile' : '无法将文件 "$1" 上传至FTP', 'errFtpMkdir' : '无法在FTP上创建远程目录 "$1"', 'errArchiveExec' : '归档文件"$1"时出错.', 'errExtractExec' : '解压文件"$1"时出错.', 'errNetUnMount' : '无法å�¸è½½.', // from v2.1 added 30.04.2012 'errConvUTF8' : '未转æ�¢è‡³UTF-8', // from v2.1 added 08.04.2014 'errFolderUpload' : '如果您需è¦�上传目录, 请å°�试使用Google Chrome.', // from v2.1 added 26.6.2015 'errSearchTimeout' : 'æ�œç´¢ "$1" è¶…æ—¶,仅显示部分æ�œç´¢ç»“æžœ.', // from v2.1 added 12.1.2016 'errReauthRequire' : '必需é‡�新授æ�ƒ.', // from v2.1.10 added 24.3.2016 'errMaxTargets' : '最大å�¯é€‰æ‹©é¡¹ç›®æ•°ä¸º $1.', // from v2.1.17 added 17.10.2016 'errRestore' : '无法从回收站中æ�¢å¤�,无法识别还原目的地.', // from v2.1.24 added 3.5.2017 'errEditorNotFound' : '找ä¸�到这个文件的编辑器.', // from v2.1.25 added 23.5.2017 'errServerError' : 'æœ�务端å�‘生错误.', // from v2.1.25 added 16.6.2017 'errEmpty' : '无法清空文件夹 "$1".', // from v2.1.25 added 22.6.2017 'moreErrors' : '存在 $1 多个错误.', // from v2.1.44 added 9.12.2018 /******************************* commands names ********************************/ 'cmdarchive' : '创建压缩包', 'cmdback' : 'å�Žé€€', 'cmdcopy' : 'å¤�制', 'cmdcut' : '剪切', 'cmddownload' : '下载', 'cmdduplicate' : '创建副本', 'cmdedit' : '编辑文件', 'cmdextract' : '从压缩包æ��å�–文件', 'cmdforward' : 'å‰�è¿›', 'cmdgetfile' : '选择文件', 'cmdhelp' : '关于', 'cmdhome' : '首页', 'cmdinfo' : '查看详情', 'cmdmkdir' : '新建文件夹', 'cmdmkdirin' : '至新文件夹', // from v2.1.7 added 19.2.2016 'cmdmkfile' : '新建文件', 'cmdopen' : '打开', 'cmdpaste' : '粘贴', 'cmdquicklook' : '预览', 'cmdreload' : '刷新', 'cmdrename' : 'é‡�命å��', 'cmdrm' : '删除', 'cmdtrash' : '至回收站', //from v2.1.24 added 29.4.2017 'cmdrestore' : 'æ�¢å¤�', //from v2.1.24 added 3.5.2017 'cmdsearch' : '查找文件', 'cmdup' : '转到上一级文件夹', 'cmdupload' : '上传文件', 'cmdview' : '查看', 'cmdresize' : '调整大å°�&旋转', 'cmdsort' : '排åº�', 'cmdnetmount' : '装载网络å�·', // added 18.04.2012 'cmdnetunmount': 'å�¸è½½', // from v2.1 added 30.04.2012 'cmdplaces' : '添加到收è—�夹', // added 28.12.2014 'cmdchmod' : '改å�˜æ¨¡å¼�', // from v2.1 added 20.6.2015 'cmdopendir' : '打开文件夹', // from v2.1 added 13.1.2016 'cmdcolwidth' : '设置列宽', // from v2.1.13 added 12.06.2016 'cmdfullscreen': 'å…¨å±�显示', // from v2.1.15 added 03.08.2016 'cmdmove' : '移动', // from v2.1.15 added 21.08.2016 'cmdempty' : '清空文件夹', // from v2.1.25 added 22.06.2017 'cmdundo' : '撤消', // from v2.1.27 added 31.07.2017 'cmdredo' : 'é‡�å�š', // from v2.1.27 added 31.07.2017 'cmdpreference': 'å��好', // from v2.1.27 added 03.08.2017 'cmdselectall' : '全选', // from v2.1.28 added 15.08.2017 'cmdselectnone': 'å…¨ä¸�选', // from v2.1.28 added 15.08.2017 'cmdselectinvert': 'å��å�‘选择', // from v2.1.28 added 15.08.2017 'cmdopennew' : '在新窗å�£æ‰“å¼€', // from v2.1.38 added 3.4.2018 'cmdhide' : 'éš�è—� (å��好)', // from v2.1.41 added 24.7.2018 /*********************************** buttons ***********************************/ 'btnClose' : '关闭', 'btnSave' : 'ä¿�å­˜', 'btnRm' : '删除', 'btnApply' : '应用', 'btnCancel' : 'å�–消', 'btnNo' : 'å�¦', 'btnYes' : '是', 'btnDiscard': 'Discard changes', 'btnMount' : '装载', // added 18.04.2012 'btnApprove': '至 $1 并确认', // from v2.1 added 26.04.2012 'btnUnmount': 'å�¸è½½', // from v2.1 added 30.04.2012 'btnConv' : '转æ�¢', // from v2.1 added 08.04.2014 'btnCwd' : '这里', // from v2.1 added 22.5.2015 'btnVolume' : 'å�·', // from v2.1 added 22.5.2015 'btnAll' : '全部', // from v2.1 added 22.5.2015 'btnMime' : 'MIME类型', // from v2.1 added 22.5.2015 'btnFileName':'文件å��', // from v2.1 added 22.5.2015 'btnSaveClose': 'ä¿�存并关闭', // from v2.1 added 12.6.2015 'btnBackup' : '备份', // fromv2.1 added 28.11.2015 'btnRename' : 'é‡�命å��', // from v2.1.24 added 6.4.2017 'btnRenameAll' : 'é‡�命å��(All)', // from v2.1.24 added 6.4.2017 'btnPrevious' : 'å�‘å‰� ($1/$2)', // from v2.1.24 added 11.5.2017 'btnNext' : 'å�‘å�Ž ($1/$2)', // from v2.1.24 added 11.5.2017 'btnSaveAs' : 'å�¦å­˜ä¸º', // from v2.1.25 added 24.5.2017 /******************************** notifications ********************************/ 'ntfopen' : '打开文件夹', 'ntffile' : '打开文件', 'ntfreload' : '刷新文件夹内容', 'ntfmkdir' : '创建文件夹', 'ntfmkfile' : '创建文件', 'ntfrm' : '删除文件', 'ntfcopy' : 'å¤�制文件', 'ntfmove' : '移动文件', 'ntfprepare' : '准备å¤�制文件', 'ntfrename' : 'é‡�命å��文件', 'ntfupload' : '上传文件', 'ntfdownload' : '下载文件', 'ntfsave' : 'ä¿�存文件', 'ntfarchive' : '创建压缩包', 'ntfextract' : '从压缩包æ��å�–文件', 'ntfsearch' : 'æ�œç´¢æ–‡ä»¶', 'ntfresize' : '正在更改尺寸', 'ntfsmth' : '正在忙 >_<', 'ntfloadimg' : '正在加载图片', 'ntfnetmount' : '正在装载网络å�·', // added 18.04.2012 'ntfnetunmount': 'å�¸è½½ç½‘络å�·', // from v2.1 added 30.04.2012 'ntfdim' : '获å�–图åƒ�尺寸', // added 20.05.2013 'ntfreaddir' : '正在读å�–文件夹信æ�¯', // from v2.1 added 01.07.2013 'ntfurl' : '正在获å�–链接地å�€', // from v2.1 added 11.03.2014 'ntfchmod' : '正在改å�˜æ–‡ä»¶æ¨¡å¼�', // from v2.1 added 20.6.2015 'ntfpreupload': '正在验è¯�上传文件å��', // from v2.1 added 31.11.2015 'ntfzipdl' : '正在创建一个下载文件', // from v2.1.7 added 23.1.2016 'ntfparents' : '正在å�–得路径信æ�¯', // from v2.1.17 added 2.11.2016 'ntfchunkmerge': '正在处ç�†ä¸Šä¼ æ–‡ä»¶', // from v2.1.17 added 2.11.2016 'ntftrash' : '移动到回收站', // from v2.1.24 added 2.5.2017 'ntfrestore' : '从回收站æ�¢å¤�', // from v2.1.24 added 3.5.2017 'ntfchkdir' : '检查目标文件夹', // from v2.1.24 added 3.5.2017 'ntfundo' : '撤消上一个全局æ“�作', // from v2.1.27 added 31.07.2017 'ntfredo' : 'é‡�å�šä¸Šä¸€å…¨å±€æ“�作', // from v2.1.27 added 31.07.2017 'ntfchkcontent' : '检查内容', // from v2.1.41 added 3.8.2018 /*********************************** volumes *********************************/ 'volume_Trash' : '回收站', //from v2.1.24 added 29.4.2017 /************************************ dates **********************************/ 'dateUnknown' : '未知', 'Today' : '今天', 'Yesterday' : '昨天', 'msJan' : '一月', 'msFeb' : '二月', 'msMar' : '三月', 'msApr' : '四月', 'msMay' : '五月', 'msJun' : '六月', 'msJul' : '七月', 'msAug' : '八月', 'msSep' : 'ä¹�月', 'msOct' : 'å��月', 'msNov' : 'å��一月', 'msDec' : 'å��二月', 'January' : '一月', 'February' : '二月', 'March' : '三月', 'April' : '四月', 'May' : '五月', 'June' : '六月', 'July' : '七月', 'August' : '八月', 'September' : 'ä¹�月', 'October' : 'å��月', 'November' : 'å��一月', 'December' : 'å��二月', 'Sunday' : '星期日', 'Monday' : '星期一', 'Tuesday' : '星期二', 'Wednesday' : '星期三', 'Thursday' : '星期四', 'Friday' : '星期五', 'Saturday' : '星期六', 'Sun' : '周日', 'Mon' : '周一', 'Tue' : '周二', 'Wed' : '周三', 'Thu' : '周四', 'Fri' : '周五', 'Sat' : '周六', /******************************** sort variants ********************************/ 'sortname' : '按å��ç§°', 'sortkind' : '按类型', 'sortsize' : '按大å°�', 'sortdate' : '按日期', 'sortFoldersFirst' : '文件夹优先', 'sortperm' : '按æ�ƒé™�排åº�', // from v2.1.13 added 13.06.2016 'sortmode' : '按属性排åº�', // from v2.1.13 added 13.06.2016 'sortowner' : '按所有者排åº�', // from v2.1.13 added 13.06.2016 'sortgroup' : '按组排åº�', // from v2.1.13 added 13.06.2016 'sortAlsoTreeview' : 'å�Œæ—¶åˆ·æ–°æ ‘状目录', // from v2.1.15 added 01.08.2016 /********************************** new items **********************************/ 'untitled file.txt' : '新文件.txt', // added 10.11.2015 'untitled folder' : '新文件夹', // added 10.11.2015 'Archive' : '新压缩包', // from v2.1 added 10.11.2015 'untitled file' : '新文件.$1', // from v2.1.41 added 6.8.2018 'extentionfile' : '$1: 文件', // from v2.1.41 added 6.8.2018 'extentiontype' : '$1: $2', // from v2.1.43 added 17.10.2018 /********************************** messages **********************************/ 'confirmReq' : '请确认', 'confirmRm' : '确定è¦�删除文件å�—?
          该�作��撤销!', 'confirmRepl' : '用新的文件替�原有文件?', 'confirmRest' : '从回收站替�当�项?', // fromv2.1.24 added 5.5.2017 'confirmConvUTF8' : '文件�是UTF-8格�.
          转�为UTF-8�?
          通过在转���存,内容�为UTF-8.', // from v2.1 added 08.04.2014 'confirmNonUTF8' : '无法检测到此文件的字符编�.需�暂时转�此文件为UTF-8编�以进行编辑.
          请选择此文件的字符编�.', // from v2.1.19 added 28.11.2016 'confirmNotSave' : '文件已被编辑.
          如果��存直接关闭,将丢失编辑内容.', // from v2.1 added 15.7.2015 'confirmTrash' : '确定�将该项移动到回收站么?', //from v2.1.24 added 29.4.2017 'confirmMove' : '确定�移动该项到 "$1"?', //from v2.1.50 added 27.7.2019 'apllyAll' : '全部应用', 'name' : '�称', 'size' : '大�', 'perms' : '��', 'modify' : '修改于', 'kind' : '类别', 'read' : '读�', 'write' : '写入', 'noaccess' : '无��', 'and' : '和', 'unknown' : '未知', 'selectall' : '选择所有文件', 'selectfiles' : '选择文件', 'selectffile' : '选择第一个文件', 'selectlfile' : '选择最�一个文件', 'viewlist' : '列表视图', 'viewicons' : '图标视图', 'viewSmall' : '�图标', // from v2.1.39 added 22.5.2018 'viewMedium' : '中图标', // from v2.1.39 added 22.5.2018 'viewLarge' : '大图标', // from v2.1.39 added 22.5.2018 'viewExtraLarge' : '超大图标', // from v2.1.39 added 22.5.2018 'places' : '�置', 'calc' : '计算', 'path' : '路径', 'aliasfor' : '别�', 'locked' : '�定', 'dim' : '尺寸', 'files' : '文件', 'folders' : '文件夹', 'items' : '项目', 'yes' : '是', 'no' : '�', 'link' : '链接', 'searcresult' : '�索结果', 'selected' : '选中的项目', 'about' : '关于', 'shortcuts' : '快�键', 'help' : '帮助', 'webfm' : '网络文件管�器', 'ver' : '版本', 'protocolver' : '�议版本', 'homepage' : '项目主页', 'docs' : '文档', 'github' : '�刻我们的github', 'twitter' : '关注我们的twitter', 'facebook' : '加入我们的facebook', 'team' : '团队', 'chiefdev' : '首席开�', 'developer' : '开�', 'contributor' : '贡献', 'maintainer' : '维护', 'translator' : '翻译', 'icons' : '图标', 'dontforget' : '别忘了带上你擦汗的毛巾', 'shortcutsof' : '快�键已�用', 'dropFiles' : '把文件拖到这里', 'or' : '或者', 'selectForUpload' : '选择�上传的文件', 'moveFiles' : '移动文件', 'copyFiles' : '�制文件', 'restoreFiles' : '��文件', // from v2.1.24 added 5.5.2017 'rmFromPlaces' : '从这里中删除', 'aspectRatio' : '��比例', 'scale' : '缩放比例', 'width' : '宽', 'height' : '高', 'resize' : '调整大�', 'crop' : '�切', 'rotate' : '旋转', 'rotate-cw' : '顺时针旋转90°', 'rotate-ccw' : '逆时针旋转90°', 'degree' : '°', 'netMountDialogTitle' : '装载网络目录', // added 18.04.2012 'protocol' : '�议', // added 18.04.2012 'host' : '主机', // added 18.04.2012 'port' : '端�', // added 18.04.2012 'user' : '用户', // added 18.04.2012 'pass' : '密�', // added 18.04.2012 'confirmUnmount' : '确实��载 $1?', // from v2.1 added 30.04.2012 'dropFilesBrowser': '从�览器中拖放或粘贴文件', // from v2.1 added 30.05.2012 'dropPasteFiles' : '拖放文件,粘贴网�或剪贴�图�', // from v2.1 added 07.04.2014 'encoding' : '编�', // from v2.1 added 19.12.2014 'locale' : '语言环境', // from v2.1 added 19.12.2014 'searchTarget' : '目标: $1', // from v2.1 added 22.5.2015 'searchMime' : '按输入MIME类型�索', // from v2.1 added 22.5.2015 'owner' : '所有者', // from v2.1 added 20.6.2015 'group' : '组', // from v2.1 added 20.6.2015 'other' : '其他', // from v2.1 added 20.6.2015 'execute' : '执行', // from v2.1 added 20.6.2015 'perm' : '许�', // from v2.1 added 20.6.2015 'mode' : '属性', // from v2.1 added 20.6.2015 'emptyFolder' : '文件夹是空的', // from v2.1.6 added 30.12.2015 'emptyFolderDrop' : '文件夹是空的\\A 拖放�追加项目', // from v2.1.6 added 30.12.2015 'emptyFolderLTap' : '文件夹是空的\\A 长按�添加项目', // from v2.1.6 added 30.12.2015 'quality' : '�质', // from v2.1.6 added 5.1.2016 'autoSync' : '自动�步', // from v2.1.6 added 10.1.2016 'moveUp' : '�上移动', // from v2.1.6 added 18.1.2016 'getLink' : '获�URL链接', // from v2.1.7 added 9.2.2016 'selectedItems' : '已选择项目 ($1)', // from v2.1.7 added 2.19.2016 'folderId' : '目录ID', // from v2.1.10 added 3.25.2016 'offlineAccess' : '�许离线�作', // from v2.1.10 added 3.25.2016 'reAuth' : '�新验�', // from v2.1.10 added 3.25.2016 'nowLoading' : '正在加载...', // from v2.1.12 added 4.26.2016 'openMulti' : '打开多个文件', // from v2.1.12 added 5.14.2016 'openMultiConfirm': '您正在�试打开$1文件.您确定�在�览器中打开�?', // from v2.1.12 added 5.14.2016 'emptySearch' : '�索目标中没有匹�结果', // from v2.1.12 added 5.16.2016 'editingFile' : '正在编辑文件.', // from v2.1.13 added 6.3.2016 'hasSelected' : '已选择 $1 个项目.', // from v2.1.13 added 6.3.2016 'hasClipboard' : '剪贴�里有 $1 个项目.', // from v2.1.13 added 6.3.2016 'incSearchOnly' : '增��索仅�自当�视图.', // from v2.1.13 added 6.30.2016 'reinstate' : '��', // from v2.1.15 added 3.8.2016 'complete' : '$1 完�', // from v2.1.15 added 21.8.2016 'contextmenu' : '上下文��', // from v2.1.15 added 9.9.2016 'pageTurning' : '翻页', // from v2.1.15 added 10.9.2016 'volumeRoots' : '根目录', // from v2.1.16 added 16.9.2016 'reset' : '�置', // from v2.1.16 added 1.10.2016 'bgcolor' : '背景色', // from v2.1.16 added 1.10.2016 'colorPicker' : '颜色选择器', // from v2.1.16 added 1.10.2016 '8pxgrid' : '步长(8px)', // from v2.1.16 added 4.10.2016 'enabled' : '�用', // from v2.1.16 added 4.10.2016 'disabled' : '关闭', // from v2.1.16 added 4.10.2016 'emptyIncSearch' : '当�视图下没有匹�结果', // from v2.1.16 added 5.10.2016 'emptyLetSearch' : '当�视图中的第一个字��索结果为空', // from v2.1.23 added 24.3.2017 'textLabel' : '文本标签', // from v2.1.17 added 13.10.2016 'minsLeft' : '剩余 $1 分钟', // from v2.1.17 added 13.11.2016 'openAsEncoding' : '使用所选编��新打开', // from v2.1.19 added 2.12.2016 'saveAsEncoding' : '使用所选编��存', // from v2.1.19 added 2.12.2016 'selectFolder' : '选择目录', // from v2.1.20 added 13.12.2016 'firstLetterSearch': '首字��索', // from v2.1.23 added 24.3.2017 'presets' : '预置', // from v2.1.25 added 26.5.2017 'tooManyToTrash' : '项目太多,�能移动到回收站.', // from v2.1.25 added 9.6.2017 'TextArea' : '文本区域', // from v2.1.25 added 14.6.2017 'folderToEmpty' : '清空文件夹 "$1".', // from v2.1.25 added 22.6.2017 'filderIsEmpty' : '文件夹 "$1" 为空.', // from v2.1.25 added 22.6.2017 'preference' : '�好', // from v2.1.26 added 28.6.2017 'language' : '语言设置', // from v2.1.26 added 28.6.2017 'clearBrowserData': '清除�存在此�览器中的�好设置', // from v2.1.26 added 28.6.2017 'toolbarPref' : '工具�设置', // from v2.1.27 added 2.8.2017 'charsLeft' : '... 剩余$1字符', // from v2.1.29 added 30.8.2017 'linesLeft' : '... 剩余$1行', // from v2.1.52 added 16.1.2020 'sum' : '总数', // from v2.1.29 added 28.9.2017 'roughFileSize' : '粗略的文件大�', // from v2.1.30 added 2.11.2017 'autoFocusDialog' : '鼠标悬�在对�框内�编辑区域时自动获得焦点', // from v2.1.30 added 2.11.2017 'select' : '选择', // from v2.1.30 added 23.11.2017 'selectAction' : '�击选择的文件时', // from v2.1.30 added 23.11.2017 'useStoredEditor' : '用上次使用的编辑器打开', // from v2.1.30 added 23.11.2017 'selectinvert' : '��选择', // from v2.1.30 added 25.11.2017 'renameMultiple' : '确定��命�选定项 $1 为 $2 �?
          该æ“�作ä¸�能撤消!', // from v2.1.31 added 4.12.2017 'batchRename' : '批é‡�é‡�命å��', // from v2.1.31 added 8.12.2017 'plusNumber' : '增加数é‡�', // from v2.1.31 added 8.12.2017 'asPrefix' : '添加å‰�ç¼€', // from v2.1.31 added 8.12.2017 'asSuffix' : '添加å�Žç¼€', // from v2.1.31 added 8.12.2017 'changeExtention' : 'å�˜åŒ–范围', // from v2.1.31 added 8.12.2017 'columnPref' : '列设置 (列表视图)', // from v2.1.32 added 6.2.2018 'reflectOnImmediate' : '所有修改将立å�³å��馈到文档.', // from v2.1.33 added 2.3.2018 'reflectOnUnmount' : '所有修改在å�¸è½½æœ¬å�·ä¹‹å‰�ä¸�会å��馈', // from v2.1.33 added 2.3.2018 'unmountChildren' : '安装在本å�·ä¸Šçš„以下å�·ä¹Ÿä¼šå�¸è½½.你确定è¦�å�¸è½½å�—?', // from v2.1.33 added 5.3.2018 'selectionInfo' : '选择信æ�¯', // from v2.1.33 added 7.3.2018 'hashChecker' : '显示文件散列值的算法', // from v2.1.33 added 10.3.2018 'infoItems' : 'ä¿¡æ�¯æ�¡ç›® (选择信æ�¯é�¢æ�¿)', // from v2.1.38 added 28.3.2018 'pressAgainToExit': 'å†�按退出', // from v2.1.38 added 1.4.2018 'toolbar' : '工具æ�¡', // from v2.1.38 added 4.4.2018 'workspace' : '工作空间', // from v2.1.38 added 4.4.2018 'dialog' : '对è¯�框', // from v2.1.38 added 4.4.2018 'all' : '全部', // from v2.1.38 added 4.4.2018 'iconSize' : '图标尺寸 (图标视图)', // from v2.1.39 added 7.5.2018 'editorMaximized' : '打开最大化编辑器窗å�£', // from v2.1.40 added 30.6.2018 'editorConvNoApi' : '由于通过 API 转æ�¢åŠŸèƒ½å½“å‰�ä¸�å�¯ç”¨ï¼Œè¯·åˆ°ç½‘站上转æ�¢.', //from v2.1.40 added 8.7.2018 'editorConvNeedUpload' : '转æ�¢å�Žï¼Œå¿…须上传æ�¡ç›®URL或一个下载的文件,以ä¿�存转æ�¢å�Žçš„æ–‡ä»¶.', //from v2.1.40 added 8.7.2018 'convertOn' : '在 $1 站点上转æ�¢', // from v2.1.40 added 10.7.2018 'integrations' : '集æˆ�', // from v2.1.40 added 11.7.2018 'integrationWith' : '本 elFinder 集æˆ�以下外部æœ�务.使用å‰�请检查使用æ�¡æ¬¾ã€�éš�ç§�政策等.', // from v2.1.40 added 11.7.2018 'showHidden' : '显示已éš�è—�çš„æ�¡ç›®', // from v2.1.41 added 24.7.2018 'hideHidden' : 'éš�è—�å·²éš�è—�çš„æ�¡ç›®', // from v2.1.41 added 24.7.2018 'toggleHidden' : '显示/éš�è—�å·²éš�è—�çš„æ�¡ç›®', // from v2.1.41 added 24.7.2018 'makefileTypes' : 'å…�许"新文件"使用的文件类型', // from v2.1.41 added 7.8.2018 'typeOfTextfile' : '文本文件类型', // from v2.1.41 added 7.8.2018 'add' : '添加', // from v2.1.41 added 7.8.2018 'theme' : '主题', // from v2.1.43 added 19.10.2018 'default' : '缺çœ�', // from v2.1.43 added 19.10.2018 'description' : 'æ��è¿°', // from v2.1.43 added 19.10.2018 'website' : '网站', // from v2.1.43 added 19.10.2018 'author' : '作者', // from v2.1.43 added 19.10.2018 'email' : '邮箱', // from v2.1.43 added 19.10.2018 'license' : '许å�¯è¯�', // from v2.1.43 added 19.10.2018 'exportToSave' : '本æ�¡ç›®ä¸�能ä¿�å­˜. 为é�¿å…�丢失编辑数æ�®,é¡»è¦�导出到你的电脑.', // from v2.1.44 added 1.12.2018 'dblclickToSelect': '在文件上å�Œå‡»ä»¥é€‰ä¸­å®ƒ.', // from v2.1.47 added 22.1.2019 'useFullscreen' : '使用全å±�模å¼�', // from v2.1.47 added 19.2.2019 /********************************** mimetypes **********************************/ 'kindUnknown' : '未知', 'kindRoot' : '根目录', // from v2.1.16 added 16.10.2016 'kindFolder' : '文件夹', 'kindSelects' : '选择', // from v2.1.29 added 29.8.2017 'kindAlias' : '别å��', 'kindAliasBroken' : '错误的别å��', // applications 'kindApp' : '程åº�', 'kindPostscript' : 'Postscript 文档', 'kindMsOffice' : 'Microsoft Office 文档', 'kindMsWord' : 'Microsoft Word 文档', 'kindMsExcel' : 'Microsoft Excel 文档', 'kindMsPP' : 'Microsoft Powerpoint 演示', 'kindOO' : 'Open Office 文档', 'kindAppFlash' : 'Flash 程åº�', 'kindPDF' : 'PDF 文档', 'kindTorrent' : 'Bittorrent 文件', 'kind7z' : '7z 压缩包', 'kindTAR' : 'TAR 压缩包', 'kindGZIP' : 'GZIP 压缩包', 'kindBZIP' : 'BZIP 压缩包', 'kindXZ' : 'XZ 压缩包', 'kindZIP' : 'ZIP 压缩包', 'kindRAR' : 'RAR 压缩包', 'kindJAR' : 'Java JAR 文件', 'kindTTF' : 'True Type 字体', 'kindOTF' : 'Open Type 字体', 'kindRPM' : 'RPM 包', // fonts 'kindFont' : '字体', 'kindSFNT' : 'SFNT 字体', 'kindEOT' : 'Embedded Open Type 字体', 'kindWOFF' : 'Web Open Font Format 字体', 'kindWOFF2' : 'Web Open Font Format 2 字体', // texts 'kindText' : '文本文件', 'kindTextPlain' : '纯文本', 'kindPHP' : 'PHP æº�代ç �', 'kindCSS' : '层å� æ ·å¼�表(CSS)', 'kindHTML' : 'HTML 文档', 'kindJS' : 'Javascript æº�代ç �', 'kindRTF' : '富文本格å¼�(RTF)', 'kindC' : 'C æº�代ç �', 'kindCHeader' : 'C 头文件', 'kindCPP' : 'C++ æº�代ç �', 'kindCPPHeader' : 'C++ 头文件', 'kindShell' : 'Unix 外壳脚本', 'kindPython' : 'Python æº�代ç �', 'kindJava' : 'Java æº�代ç �', 'kindRuby' : 'Ruby æº�代ç �', 'kindPerl' : 'Perl æº�代ç �', 'kindSQL' : 'SQL 脚本', 'kindXML' : 'XML 文档', 'kindAWK' : 'AWK æº�代ç �', 'kindCSV' : '逗å�·åˆ†éš”值文件(CSV)', 'kindDOCBOOK' : 'Docbook XML 文档', 'kindMarkdown' : 'Markdown 文本', // added 20.7.2015 // images 'kindImage' : '图片', 'kindBMP' : 'BMP 图片', 'kindJPEG' : 'JPEG 图片', 'kindGIF' : 'GIF 图片', 'kindPNG' : 'PNG 图片', 'kindTIFF' : 'TIFF 图片', 'kindTGA' : 'TGA 图片', 'kindPSD' : 'Adobe Photoshop 图片', 'kindXBITMAP' : 'X bitmap 图片', 'kindPXM' : 'Pixelmator 图片', // media 'kindAudio' : '音频', 'kindAudioMPEG' : 'MPEG 音频', 'kindAudioMPEG4' : 'MPEG-4 音频', 'kindAudioMIDI' : 'MIDI 音频', 'kindAudioOGG' : 'Ogg Vorbis 音频', 'kindAudioWAV' : 'WAV 音频', 'AudioPlaylist' : 'MP3 播放列表', 'kindVideo' : '视频', 'kindVideoDV' : 'DV 视频', 'kindVideoMPEG' : 'MPEG 视频', 'kindVideoMPEG4' : 'MPEG-4 视频', 'kindVideoAVI' : 'AVI 视频', 'kindVideoMOV' : 'Quick Time 视频', 'kindVideoWM' : 'Windows Media 视频', 'kindVideoFlash' : 'Flash 视频', 'kindVideoMKV' : 'Matroska 视频', 'kindVideoOGG' : 'Ogg 视频' } }; })); PK!ý¢<+h�h�@file-manager-advanced/application/library/js/i18n/elfinder.nl.jsnu„[µü¤/** * Dutch translation * @author Barry vd. Heuvel * @author Patrick Tingen * @version 2019-04-17 */ (function(root, factory) { if (typeof define === 'function' && define.amd) { define(['elfinder'], factory); } else if (typeof exports !== 'undefined') { module.exports = factory(require('elfinder')); } else { factory(root.elFinder); } }(this, function(elFinder) { elFinder.prototype.i18.nl = { translator : 'Barry vd. Heuvel <barry@fruitcakestudio.nl>, Patrick Tingen <patrick@tingen.net>', language : 'Nederlands', direction : 'ltr', dateFormat : 'd-m-Y H:i', // Mar 13, 2012 05:27 PM fancyDateFormat : '$1 H:i', // will produce smth like: Today 12:25 PM nonameDateFormat : 'ymd-His', // noname upload will show like: 120513-172700 messages : { /********************************** errors **********************************/ 'error' : 'Fout', 'errUnknown' : 'Onbekend fout', 'errUnknownCmd' : 'Onbekend commando', 'errJqui' : 'Ongeldige jQuery UI configuratie. Selectable, draggable en droppable componenten moeten aanwezig zijn', 'errNode' : 'Voor elFinder moet een DOM Element gemaakt worden', 'errURL' : 'Ongeldige elFinder configuratie! URL optie is niet ingesteld', 'errAccess' : 'Toegang geweigerd', 'errConnect' : 'Kan geen verbinding met de backend maken', 'errAbort' : 'Verbinding afgebroken', 'errTimeout' : 'Verbinding time-out', 'errNotFound' : 'Backend niet gevonden', 'errResponse' : 'Ongeldige reactie van de backend', 'errConf' : 'Ongeldige backend configuratie', 'errJSON' : 'PHP JSON module niet geïnstalleerd', 'errNoVolumes' : 'Leesbaar volume is niet beschikbaar', 'errCmdParams' : 'Ongeldige parameters voor commando "$1"', 'errDataNotJSON' : 'Data is niet JSON', 'errDataEmpty' : 'Data is leeg', 'errCmdReq' : 'Backend verzoek heeft een commando naam nodig', 'errOpen' : 'Kan "$1" niet openen', 'errNotFolder' : 'Object is geen map', 'errNotFile' : 'Object is geen bestand', 'errRead' : 'Kan "$1" niet lezen', 'errWrite' : 'Kan niet schrijven in "$1"', 'errPerm' : 'Toegang geweigerd', 'errLocked' : '"$1" is vergrendeld en kan niet hernoemd, verplaats of verwijderd worden', 'errExists' : 'Bestand "$1" bestaat al', 'errInvName' : 'Ongeldige bestandsnaam', 'errFolderNotFound' : 'Map niet gevonden', 'errFileNotFound' : 'Bestand niet gevonden', 'errTrgFolderNotFound' : 'Doelmap "$1" niet gevonden', 'errPopup' : 'De browser heeft voorkomen dat de pop-up is geopend. Pas de browser instellingen aan om de popup te kunnen openen', 'errMkdir' : 'Kan map "$1" niet aanmaken', 'errMkfile' : 'Kan bestand "$1" niet aanmaken', 'errRename' : 'Kan "$1" niet hernoemen', 'errCopyFrom' : 'Bestanden kopiëren van "$1" is niet toegestaan', 'errCopyTo' : 'Bestanden kopiëren naar "$1" is niet toegestaan', 'errMkOutLink' : 'Kan geen link maken buiten de hoofdmap', // from v2.1 added 03.10.2015 'errUpload' : 'Upload fout', // old name - errUploadCommon 'errUploadFile' : 'Kan "$1" niet uploaden', // old name - errUpload 'errUploadNoFiles' : 'Geen bestanden gevonden om te uploaden', 'errUploadTotalSize' : 'Data overschrijdt de maximale grootte', // old name - errMaxSize 'errUploadFileSize' : 'Bestand overschrijdt de maximale grootte', // old name - errFileMaxSize 'errUploadMime' : 'Bestandstype niet toegestaan', 'errUploadTransfer' : '"$1" overdrachtsfout', 'errUploadTemp' : 'Kan geen tijdelijk bestand voor de upload maken', // from v2.1 added 26.09.2015 'errNotReplace' : 'Object "$1" bestaat al op deze locatie en kan niet vervangen worden door een ander type object', // new 'errReplace' : 'Kan "$1" niet vervangen', 'errSave' : 'Kan "$1" niet opslaan', 'errCopy' : 'Kan "$1" niet kopiëren', 'errMove' : 'Kan "$1" niet verplaatsen', 'errCopyInItself' : 'Kan "$1" niet in zichzelf kopiëren', 'errRm' : 'Kan "$1" niet verwijderen', 'errRmSrc' : 'Kan bronbestanden niet verwijderen', 'errExtract' : 'Kan de bestanden van "$1" niet uitpakken', 'errArchive' : 'Kan het archief niet maken', 'errArcType' : 'Archief type is niet ondersteund', 'errNoArchive' : 'Bestand is geen archief of geen ondersteund archief type', 'errCmdNoSupport' : 'Backend ondersteund dit commando niet', 'errReplByChild' : 'De map "$1" kan niet vervangen worden door een item uit die map', 'errArcSymlinks' : 'Om veiligheidsredenen kan een bestand met symlinks of bestanden met niet toegestane namen niet worden uitgepakt ', // edited 24.06.2012 'errArcMaxSize' : 'Archief overschrijdt de maximale bestandsgrootte', 'errResize' : 'Kan het formaat van "$1" niet wijzigen', 'errResizeDegree' : 'Ongeldig aantal graden om te draaien', // added 7.3.2013 'errResizeRotate' : 'Afbeelding kan niet gedraaid worden', // added 7.3.2013 'errResizeSize' : 'Ongeldig afbeelding formaat', // added 7.3.2013 'errResizeNoChange' : 'Afbeelding formaat is niet veranderd', // added 7.3.2013 'errUsupportType' : 'Bestandstype wordt niet ondersteund', 'errNotUTF8Content' : 'Bestand "$1" is niet in UTF-8 and kan niet aangepast worden', // added 9.11.2011 'errNetMount' : 'Kan "$1" niet mounten', // added 17.04.2012 'errNetMountNoDriver' : 'Niet ondersteund protocol', // added 17.04.2012 'errNetMountFailed' : 'Mount mislukt', // added 17.04.2012 'errNetMountHostReq' : 'Host is verplicht', // added 18.04.2012 'errSessionExpires' : 'Uw sessie is verlopen vanwege inactiviteit', 'errCreatingTempDir' : 'Kan de tijdelijke map niet aanmaken: "$1" ', 'errFtpDownloadFile' : 'Kan het bestand niet downloaden vanaf FTP: "$1"', 'errFtpUploadFile' : 'Kan het bestand niet uploaden naar FTP: "$1"', 'errFtpMkdir' : 'Kan het externe map niet aanmaken op de FTP-server: "$1"', 'errArchiveExec' : 'Er is een fout opgetreden bij het archivering van de bestanden: "$1" ', 'errExtractExec' : 'Er is een fout opgetreden bij het uitpakken van de bestanden: "$1" ', 'errNetUnMount' : 'Kan niet unmounten', // from v2.1 added 30.04.2012 'errConvUTF8' : 'Niet om te zetten naar UTF-8', // from v2.1 added 08.04.2014 'errFolderUpload' : 'Probeer een moderne browser als je bestanden wil uploaden', // from v2.1 added 26.6.2015 'errSearchTimeout' : 'Time-out bij zoeken naar "$1". Zoekresulataat is niet compleet', // from v2.1 added 12.1.2016 'errReauthRequire' : 'Je moet je opnieuw aanmelden', // from v2.1.10 added 24.3.2016 'errMaxTargets' : 'Max aantal selecteerbare items is $1', // from v2.1.17 added 17.10.2016 'errRestore' : 'Kan niet herstellen uit prullenbak, weet niet waar het heen moet', // from v2.1.24 added 3.5.2017 'errEditorNotFound' : 'Geen editor voor dit type bestand', // from v2.1.25 added 23.5.2017 'errServerError' : 'Fout opgetreden op de server', // from v2.1.25 added 16.6.2017 'errEmpty' : 'Kan folder "$1" niet legen', // from v2.1.25 added 22.6.2017 'moreErrors' : 'Er zijn nog $1 fouten', // from v2.1.44 added 9.12.2018 /******************************* commands names ********************************/ 'cmdarchive' : 'Maak archief', 'cmdback' : 'Vorige', 'cmdcopy' : 'Kopieer', 'cmdcut' : 'Knip', 'cmddownload' : 'Download', 'cmdduplicate' : 'Dupliceer', 'cmdedit' : 'Pas bestand aan', 'cmdextract' : 'Bestanden uit archief uitpakken', 'cmdforward' : 'Volgende', 'cmdgetfile' : 'Kies bestanden', 'cmdhelp' : 'Over deze software', 'cmdhome' : 'Home', 'cmdinfo' : 'Bekijk info', 'cmdmkdir' : 'Nieuwe map', 'cmdmkdirin' : 'In nieuwe map', // from v2.1.7 added 19.2.2016 'cmdmkfile' : 'Nieuw bestand', 'cmdopen' : 'Open', 'cmdpaste' : 'Plak', 'cmdquicklook' : 'Voorbeeld', 'cmdreload' : 'Vernieuwen', 'cmdrename' : 'Naam wijzigen', 'cmdrm' : 'Verwijder', 'cmdtrash' : 'Naar prullenbak', //from v2.1.24 added 29.4.2017 'cmdrestore' : 'Herstellen', //from v2.1.24 added 3.5.2017 'cmdsearch' : 'Zoek bestanden', 'cmdup' : 'Ga een map hoger', 'cmdupload' : 'Upload bestanden', 'cmdview' : 'Bekijk', 'cmdresize' : 'Formaat wijzigen', 'cmdsort' : 'Sorteren', 'cmdnetmount' : 'Mount netwerk volume', // added 18.04.2012 'cmdnetunmount' : 'Unmount', // from v2.1 added 30.04.2012 'cmdplaces' : 'Naar Plaatsen', // added 28.12.2014 'cmdchmod' : 'Wijzig modus', // from v2.1 added 20.6.2015 'cmdopendir' : 'Open een map', // from v2.1 added 13.1.2016 'cmdcolwidth' : 'Herstel kolombreedtes', // from v2.1.13 added 12.06.2016 'cmdfullscreen' : 'Volledig scherm', // from v2.1.15 added 03.08.2016 'cmdmove' : 'Verplaatsen', // from v2.1.15 added 21.08.2016 'cmdempty' : 'Map leegmaken', // from v2.1.25 added 22.06.2017 'cmdundo' : 'Undo', // from v2.1.27 added 31.07.2017 'cmdredo' : 'Redo', // from v2.1.27 added 31.07.2017 'cmdpreference' : 'Voorkeuren', // from v2.1.27 added 03.08.2017 'cmdselectall' : 'Selecteer alles', // from v2.1.28 added 15.08.2017 'cmdselectnone' : 'Deselecteer alles', // from v2.1.28 added 15.08.2017 'cmdselectinvert' : 'Selectie omkeren', // from v2.1.28 added 15.08.2017 'cmdopennew' : 'Open in nieuw venster', // from v2.1.38 added 3.4.2018 'cmdhide' : 'Verberg (voorkeur)', // from v2.1.41 added 24.7.2018 /*********************************** buttons ***********************************/ 'btnClose' : 'Sluit', 'btnSave' : 'Opslaan', 'btnRm' : 'Verwijder', 'btnApply' : 'Toepassen', 'btnCancel' : 'Annuleren', 'btnNo' : 'Nee', 'btnYes' : 'Ja', 'btnDiscard' : 'Wijzigingen weggooien', 'btnMount' : 'Mount', // added 18.04.2012 'btnApprove' : 'Ga naar $1 & keur goed', // from v2.1 added 26.04.2012 'btnUnmount' : 'Unmount', // from v2.1 added 30.04.2012 'btnConv' : 'Converteer', // from v2.1 added 08.04.2014 'btnCwd' : 'Hier', // from v2.1 added 22.5.2015 'btnVolume' : 'Volume', // from v2.1 added 22.5.2015 'btnAll' : 'Alles', // from v2.1 added 22.5.2015 'btnMime' : 'MIME Type', // from v2.1 added 22.5.2015 'btnFileName' : 'Bestandsnaam', // from v2.1 added 22.5.2015 'btnSaveClose' : 'Opslaan & Sluiten', // from v2.1 added 12.6.2015 'btnBackup' : 'Back-up', // fromv2.1 added 28.11.2015 'btnRename' : 'Hernoemen', // from v2.1.24 added 6.4.2017 'btnRenameAll' : 'Hernoem alles', // from v2.1.24 added 6.4.2017 'btnPrevious' : 'Vorige ($1/$2)', // from v2.1.24 added 11.5.2017 'btnNext' : 'Volgende ($1/$2)', // from v2.1.24 added 11.5.2017 'btnSaveAs' : 'Opslaan als', // from v2.1.25 added 24.5.2017 /******************************** notifications ********************************/ 'ntfopen' : 'Bezig met openen van map', 'ntffile' : 'Bezig met openen bestand', 'ntfreload' : 'Herladen map inhoud', 'ntfmkdir' : 'Bezig met map maken', 'ntfmkfile' : 'Bezig met Bestanden maken', 'ntfrm' : 'Verwijderen bestanden', 'ntfcopy' : 'Kopieer bestanden', 'ntfmove' : 'Verplaats bestanden', 'ntfprepare' : 'Voorbereiden kopiëren', 'ntfrename' : 'Hernoem bestanden', 'ntfupload' : 'Bestanden uploaden actief', 'ntfdownload' : 'Bestanden downloaden actief', 'ntfsave' : 'Bestanden opslaan', 'ntfarchive' : 'Archief aan het maken', 'ntfextract' : 'Bestanden uitpakken actief', 'ntfsearch' : 'Zoeken naar bestanden', 'ntfresize' : 'Formaat wijzigen van afbeeldingen', 'ntfsmth' : 'Iets aan het doen', 'ntfloadimg' : 'Laden van plaatje', 'ntfnetmount' : 'Mounten van netwerk volume', // added 18.04.2012 'ntfnetunmount' : 'Unmounten van netwerk volume', // from v2.1 added 30.04.2012 'ntfdim' : 'Opvragen afbeeldingen dimensies', // added 20.05.2013 'ntfreaddir' : 'Map informatie lezen', // from v2.1 added 01.07.2013 'ntfurl' : 'URL van link ophalen', // from v2.1 added 11.03.2014 'ntfchmod' : 'Bestandsmodus wijzigen', // from v2.1 added 20.6.2015 'ntfpreupload' : 'Upload bestandsnaam verifiëren', // from v2.1 added 31.11.2015 'ntfzipdl' : 'Zipbestand aan het maken', // from v2.1.7 added 23.1.2016 'ntfparents' : 'Verzamelen padinformatie', // from v2.1.17 added 2.11.2016 'ntfchunkmerge' : 'Aan het verwerken', // from v2.1.17 added 2.11.2016 'ntftrash' : 'Aan het verwijderen', // from v2.1.24 added 2.5.2017 'ntfrestore' : 'Aan het herstellen', // from v2.1.24 added 3.5.2017 'ntfchkdir' : 'Controleren doelmap', // from v2.1.24 added 3.5.2017 'ntfundo' : 'Vorige bewerking ongedaan maken', // from v2.1.27 added 31.07.2017 'ntfredo' : 'Opnieuw doen', // from v2.1.27 added 31.07.2017 'ntfchkcontent' : 'Inhoud controleren', // from v2.1.41 added 3.8.2018 /*********************************** volumes *********************************/ 'volume_Trash' : 'Prullenbak', //from v2.1.24 added 29.4.2017 /************************************ dates **********************************/ 'dateUnknown' : 'onbekend', 'Today' : 'Vandaag', 'Yesterday' : 'Gisteren', 'msJan' : 'Jan', 'msFeb' : 'Feb', 'msMar' : 'Mar', 'msApr' : 'Apr', 'msMay' : 'Mei', 'msJun' : 'Jun', 'msJul' : 'Jul', 'msAug' : 'Aug', 'msSep' : 'Sep', 'msOct' : 'Okt', 'msNov' : 'Nov', 'msDec' : 'Dec', 'January' : 'Januari', 'February' : 'Februari', 'March' : 'Maart', 'April' : 'April', 'May' : 'Mei', 'June' : 'Juni', 'July' : 'Juli', 'August' : 'Augustus', 'September' : 'September', 'October' : 'Oktober', 'November' : 'November', 'December' : 'December', 'Sunday' : 'Zondag', 'Monday' : 'Maandag', 'Tuesday' : 'Dinsdag', 'Wednesday' : 'Woensdag', 'Thursday' : 'Donderdag', 'Friday' : 'Vrijdag', 'Saturday' : 'Zaterdag', 'Sun' : 'Zo', 'Mon' : 'Ma', 'Tue' : 'Di', 'Wed' : 'Wo', 'Thu' : 'Do', 'Fri' : 'Vr', 'Sat' : 'Za', /******************************** sort variants ********************************/ 'sortname' : 'op naam', 'sortkind' : 'op type', 'sortsize' : 'op grootte', 'sortdate' : 'op datum', 'sortFoldersFirst' : 'Mappen eerst', 'sortperm' : 'op rechten', // from v2.1.13 added 13.06.2016 'sortmode' : 'op mode', // from v2.1.13 added 13.06.2016 'sortowner' : 'op eigenaar', // from v2.1.13 added 13.06.2016 'sortgroup' : 'op groep', // from v2.1.13 added 13.06.2016 'sortAlsoTreeview' : 'Als boom', // from v2.1.15 added 01.08.2016 /********************************** new items **********************************/ 'untitled file.txt' : 'NieuwBestand.txt', // added 10.11.2015 'untitled folder' : 'NieuweMap', // added 10.11.2015 'Archive' : 'NieuwArchief', // from v2.1 added 10.11.2015 'untitled file' : 'NieuwBestand.$1', // from v2.1.41 added 6.8.2018 'extentionfile' : '$1: Bestand', // from v2.1.41 added 6.8.2018 'extentiontype' : '$1: $2', // from v2.1.43 added 17.10.2018 /********************************** messages **********************************/ 'confirmReq' : 'Bevestiging nodig', 'confirmRm' : 'Weet u zeker dat u deze bestanden wil verwijderen?
          Deze actie kan niet ongedaan gemaakt worden!', 'confirmRepl' : 'Oud bestand vervangen door het nieuwe bestand?', 'confirmRest' : 'Replace existing item with the item in trash?', // fromv2.1.24 added 5.5.2017 'confirmConvUTF8' : 'Niet in UTF-8
          Converteren naar UTF-8?
          De inhoud wordt UTF-8 door op te slaan na de conversie', // from v2.1 added 08.04.2014 'confirmNonUTF8' : 'Character encoding of this file couldn\'t be detected. It need to temporarily convert to UTF-8 for editting.
          Please select character encoding of this file.', // from v2.1.19 added 28.11.2016 'confirmNotSave' : 'Het is aangepast.
          Wijzigingen gaan verloren als je niet opslaat', // from v2.1 added 15.7.2015 'confirmTrash' : 'Are you sure you want to move items to trash bin?', //from v2.1.24 added 29.4.2017 'apllyAll' : 'Toepassen op alles', 'name' : 'Naam', 'size' : 'Grootte', 'perms' : 'Rechten', 'modify' : 'Aangepast', 'kind' : 'Type', 'read' : 'lees', 'write' : 'schrijf', 'noaccess' : 'geen toegang', 'and' : 'en', 'unknown' : 'onbekend', 'selectall' : 'Selecteer alle bestanden', 'selectfiles' : 'Selecteer bestand(en)', 'selectffile' : 'Selecteer eerste bestand', 'selectlfile' : 'Selecteer laatste bestand', 'viewlist' : 'Lijst weergave', 'viewicons' : 'Icoon weergave', 'viewSmall' : 'Klein', // from v2.1.39 added 22.5.2018 'viewMedium' : 'Middelgroot', // from v2.1.39 added 22.5.2018 'viewLarge' : 'Groot', // from v2.1.39 added 22.5.2018 'viewExtraLarge' : 'Extra groot', // from v2.1.39 added 22.5.2018 'places' : 'Plaatsen', 'calc' : 'Bereken', 'path' : 'Pad', 'aliasfor' : 'Alias voor', 'locked' : 'Vergrendeld', 'dim' : 'Dimensies', 'files' : 'Bestanden', 'folders' : 'Mappen', 'items' : 'Items', 'yes' : 'ja', 'no' : 'nee', 'link' : 'Link', 'searcresult' : 'Zoek resultaten', 'selected' : 'geselecteerde items', 'about' : 'Over', 'shortcuts' : 'Snelkoppelingen', 'help' : 'Help', 'webfm' : 'Web bestandsmanager', 'ver' : 'Versie', 'protocolver' : 'protocol versie', 'homepage' : 'Project home', 'docs' : 'Documentatie', 'github' : 'Fork ons op Github', 'twitter' : 'Volg ons op twitter', 'facebook' : 'Wordt lid op facebook', 'team' : 'Team', 'chiefdev' : 'Hoofd ontwikkelaar', 'developer' : 'ontwikkelaar', 'contributor' : 'bijdrager', 'maintainer' : 'onderhouder', 'translator' : 'vertaler', 'icons' : 'Iconen', 'dontforget' : 'En vergeet je handdoek niet!', 'shortcutsof' : 'Snelkoppelingen uitgeschakeld', 'dropFiles' : 'Sleep hier uw bestanden heen', 'or' : 'of', 'selectForUpload' : 'Selecteer bestanden om te uploaden', 'moveFiles' : 'Verplaats bestanden', 'copyFiles' : 'Kopieer bestanden', 'restoreFiles' : 'Items herstellen', // from v2.1.24 added 5.5.2017 'rmFromPlaces' : 'Verwijder uit Plaatsen', 'aspectRatio' : 'Aspect ratio', 'scale' : 'Schaal', 'width' : 'Breedte', 'height' : 'Hoogte', 'resize' : 'Verkleinen', 'crop' : 'Bijsnijden', 'rotate' : 'Draaien', 'rotate-cw' : 'Draai 90 graden rechtsom', 'rotate-ccw' : 'Draai 90 graden linksom', 'degree' : '°', 'netMountDialogTitle' : 'Mount netwerk volume', // added 18.04.2012 'protocol' : 'Protocol', // added 18.04.2012 'host' : 'Host', // added 18.04.2012 'port' : 'Poort', // added 18.04.2012 'user' : 'Gebruikersnaams', // added 18.04.2012 'pass' : 'Wachtwoord', // added 18.04.2012 'confirmUnmount' : 'Weet u zeker dat u $1 wil unmounten?', // from v2.1 added 30.04.2012 'dropFilesBrowser' : 'Sleep of plak bestanden vanuit de browser', // from v2.1 added 30.05.2012 'dropPasteFiles' : 'Sleep of plak bestanden hier', // from v2.1 added 07.04.2014 'encoding' : 'Encodering', // from v2.1 added 19.12.2014 'locale' : 'Localisatie', // from v2.1 added 19.12.2014 'searchTarget' : 'Doel: $1', // from v2.1 added 22.5.2015 'searchMime' : 'Zoek op invoer MIME Type', // from v2.1 added 22.5.2015 'owner' : 'Eigenaar', // from v2.1 added 20.6.2015 'group' : 'Groep', // from v2.1 added 20.6.2015 'other' : 'Overig', // from v2.1 added 20.6.2015 'execute' : 'Uitvoeren', // from v2.1 added 20.6.2015 'perm' : 'Rechten', // from v2.1 added 20.6.2015 'mode' : 'Modus', // from v2.1 added 20.6.2015 'emptyFolder' : 'Map is leeg', // from v2.1.6 added 30.12.2015 'emptyFolderDrop' : 'Map is leeg\\A Sleep hier naar toe om toe te voegen', // from v2.1.6 added 30.12.2015 'emptyFolderLTap' : 'Map is leeg\\A Lang ingedrukt houden om toe te voegen', // from v2.1.6 added 30.12.2015 'quality' : 'Kwaliteit', // from v2.1.6 added 5.1.2016 'autoSync' : 'Auto sync', // from v2.1.6 added 10.1.2016 'moveUp' : 'Omhoog', // from v2.1.6 added 18.1.2016 'getLink' : 'Geef link', // from v2.1.7 added 9.2.2016 'selectedItems' : 'Geselecteerde items ($1)', // from v2.1.7 added 2.19.2016 'folderId' : 'Map ID', // from v2.1.10 added 3.25.2016 'offlineAccess' : 'Toestaan offline toegang', // from v2.1.10 added 3.25.2016 'reAuth' : 'Opnieuw autenticeren', // from v2.1.10 added 3.25.2016 'nowLoading' : 'Laden..', // from v2.1.12 added 4.26.2016 'openMulti' : 'Open meerdere bestanden', // from v2.1.12 added 5.14.2016 'openMultiConfirm' : 'Je probeert het $1 bestanden te openen. Weet je zeker dat je dat in je browser wil doen?', // from v2.1.12 added 5.14.2016 'emptySearch' : 'Geen zoekresultaten', // from v2.1.12 added 5.16.2016 'editingFile' : 'Bestand wordt bewerkt', // from v2.1.13 added 6.3.2016 'hasSelected' : 'Je hebt $1 items geselecteerd', // from v2.1.13 added 6.3.2016 'hasClipboard' : 'Je hebt $1 items op het clipboard', // from v2.1.13 added 6.3.2016 'incSearchOnly' : 'Verder zoeken kan alleen vanuit huidige view', // from v2.1.13 added 6.30.2016 'reinstate' : 'Herstellen', // from v2.1.15 added 3.8.2016 'complete' : '$1 compleet', // from v2.1.15 added 21.8.2016 'contextmenu' : 'Context menu', // from v2.1.15 added 9.9.2016 'pageTurning' : 'Pagina omslaan', // from v2.1.15 added 10.9.2016 'volumeRoots' : 'Volume roots', // from v2.1.16 added 16.9.2016 'reset' : 'Reset', // from v2.1.16 added 1.10.2016 'bgcolor' : 'Achtergrondkleur', // from v2.1.16 added 1.10.2016 'colorPicker' : 'Kleurkiezer', // from v2.1.16 added 1.10.2016 '8pxgrid' : '8px Grid', // from v2.1.16 added 4.10.2016 'enabled' : 'Actief', // from v2.1.16 added 4.10.2016 'disabled' : 'Inactief', // from v2.1.16 added 4.10.2016 'emptyIncSearch' : 'Zoekresultaten zijn leeg in actuele view\\ADruk [Enter] om zoekgebied uit te breiden', // from v2.1.16 added 5.10.2016 'emptyLetSearch' : 'Zoeken op eerste letter is leeg in actuele view', // from v2.1.23 added 24.3.2017 'textLabel' : 'Tekstlabel', // from v2.1.17 added 13.10.2016 'minsLeft' : '$1 minuten over', // from v2.1.17 added 13.11.2016 'openAsEncoding' : 'Opnieuw openen met geselecteerde encoding', // from v2.1.19 added 2.12.2016 'saveAsEncoding' : 'Opslaan met geselecteerde encoding', // from v2.1.19 added 2.12.2016 'selectFolder' : 'Selecteer map', // from v2.1.20 added 13.12.2016 'firstLetterSearch' : 'Zoeken op eerste letter', // from v2.1.23 added 24.3.2017 'presets' : 'Voorkeuren', // from v2.1.25 added 26.5.2017 'tooManyToTrash' : 'Teveel voor in de prullenbak', // from v2.1.25 added 9.6.2017 'TextArea' : 'Tekstgebied', // from v2.1.25 added 14.6.2017 'folderToEmpty' : 'Map "$1" legen', // from v2.1.25 added 22.6.2017 'filderIsEmpty' : 'Er zijn geen items in map "$1"', // from v2.1.25 added 22.6.2017 'preference' : 'Voorkeur', // from v2.1.26 added 28.6.2017 'language' : 'Taal', // from v2.1.26 added 28.6.2017 'clearBrowserData' : 'Initialiseer instellingen van deze browser', // from v2.1.26 added 28.6.2017 'toolbarPref' : 'Toolbar instellingen', // from v2.1.27 added 2.8.2017 'charsLeft' : '... $1 tekens over', // from v2.1.29 added 30.8.2017 'sum' : 'Totaal', // from v2.1.29 added 28.9.2017 'roughFileSize' : 'Geschatte bestandsgrootte', // from v2.1.30 added 2.11.2017 'autoFocusDialog' : 'Focus op het dialoogelement met mouseover', // from v2.1.30 added 2.11.2017 'select' : 'Selecteren', // from v2.1.30 added 23.11.2017 'selectAction' : 'Actie als bestand is geselecteerd', // from v2.1.30 added 23.11.2017 'useStoredEditor' : 'Open met laatstgebruikte editor', // from v2.1.30 added 23.11.2017 'selectinvert' : 'Selectie omkeren', // from v2.1.30 added 25.11.2017 'renameMultiple' : 'Weet je zeker dat je $1 items wil hernoemen naar $2?
          Dit kan niet ongedaan worden gemaakt!', // from v2.1.31 added 4.12.2017 'batchRename' : 'Batch hernoemen', // from v2.1.31 added 8.12.2017 'plusNumber' : '+ Nummer', // from v2.1.31 added 8.12.2017 'asPrefix' : 'Voeg prefix toe', // from v2.1.31 added 8.12.2017 'asSuffix' : 'Voeg suffix toe', // from v2.1.31 added 8.12.2017 'changeExtention' : 'Verander extentie', // from v2.1.31 added 8.12.2017 'columnPref' : 'Kolominstelllingen (List view)', // from v2.1.32 added 6.2.2018 'reflectOnImmediate' : 'Aanpassingen worden direct toegepast op het archief', // from v2.1.33 added 2.3.2018 'reflectOnUnmount' : 'Aanpassingen worden pas toegepast na re-mount van dit volume', // from v2.1.33 added 2.3.2018 'unmountChildren' : 'Deze volume(s) worden ook unmounted. Weet je het zeker?', // from v2.1.33 added 5.3.2018 'selectionInfo' : 'Selectie informatie', // from v2.1.33 added 7.3.2018 'hashChecker' : 'Algoritmes voor file hash', // from v2.1.33 added 10.3.2018 'infoItems' : 'Informatie Items (Selectie Info Panel)', // from v2.1.38 added 28.3.2018 'pressAgainToExit' : 'Druk nogmaals om te eindigen', // from v2.1.38 added 1.4.2018 'toolbar' : 'Toolbar', // from v2.1.38 added 4.4.2018 'workspace' : 'Work Space', // from v2.1.38 added 4.4.2018 'dialog' : 'Dialoog', // from v2.1.38 added 4.4.2018 'all' : 'Alles', // from v2.1.38 added 4.4.2018 'iconSize' : 'Icoongrootte (Icons view)', // from v2.1.39 added 7.5.2018 'editorMaximized' : 'Open de maximale editor', // from v2.1.40 added 30.6.2018 'editorConvNoApi' : 'Conversie via API is niet beschikbaar, converteer aub op de website', //from v2.1.40 added 8.7.2018 'editorConvNeedUpload' : 'After conversion, you must be upload with the item URL or a downloaded file to save the converted file', //from v2.1.40 added 8.7.2018 'convertOn' : 'Converteer op de site $1', // from v2.1.40 added 10.7.2018 'integrations' : 'Integratie', // from v2.1.40 added 11.7.2018 'integrationWith' : 'Deze elFinder heeft de volgende externe services. Controleer de voorwaarden, privacy policy, etc. voor gebruik', // from v2.1.40 added 11.7.2018 'showHidden' : 'Toon verborgen items', // from v2.1.41 added 24.7.2018 'hideHidden' : 'Verberg verborgen items', // from v2.1.41 added 24.7.2018 'toggleHidden' : 'Toon/verberg verborgen items', // from v2.1.41 added 24.7.2018 'makefileTypes' : 'File types die aangemaakt mogen worden', // from v2.1.41 added 7.8.2018 'typeOfTextfile' : 'Type voor tekstbestand', // from v2.1.41 added 7.8.2018 'add' : 'Toevoegen', // from v2.1.41 added 7.8.2018 'theme' : 'Thema', // from v2.1.43 added 19.10.2018 'default' : 'Default', // from v2.1.43 added 19.10.2018 'description' : 'Beschrijving', // from v2.1.43 added 19.10.2018 'website' : 'Website', // from v2.1.43 added 19.10.2018 'author' : 'Auteur', // from v2.1.43 added 19.10.2018 'email' : 'Email', // from v2.1.43 added 19.10.2018 'license' : 'Licensie', // from v2.1.43 added 19.10.2018 'exportToSave' : 'Dit item kan niet worden opgeslagen, exporteer naar je pc om wijzingen te bewaren', // from v2.1.44 added 1.12.2018 /********************************** mimetypes **********************************/ 'kindUnknown' : 'Onbekend', 'kindRoot' : 'Volume Root', // from v2.1.16 added 16.10.2016 'kindFolder' : 'Map', 'kindSelects' : 'Selecties', // from v2.1.29 added 29.8.2017 'kindAlias' : 'Alias', 'kindAliasBroken' : 'Verbroken alias', /********************************** applications **********************************/ 'kindApp' : 'Applicatie', 'kindPostscript' : 'Postscript document', 'kindMsOffice' : 'Microsoft Office document', 'kindMsWord' : 'Microsoft Word document', 'kindMsExcel' : 'Microsoft Excel document', 'kindMsPP' : 'Microsoft Powerpoint presentation', 'kindOO' : 'Open Office document', 'kindAppFlash' : 'Flash applicatie', 'kindPDF' : 'Portable Document Format (PDF)', 'kindTorrent' : 'Bittorrent bestand', 'kind7z' : '7z archief', 'kindTAR' : 'TAR archief', 'kindGZIP' : 'GZIP archief', 'kindBZIP' : 'BZIP archief', 'kindXZ' : 'XZ archief', 'kindZIP' : 'ZIP archief', 'kindRAR' : 'RAR archief', 'kindJAR' : 'Java JAR bestand', 'kindTTF' : 'True Type font', 'kindOTF' : 'Open Type font', 'kindRPM' : 'RPM package', /********************************** fonts **********************************/ 'kindFont' : 'Lettertype bestand', 'kindSFNT' : 'SFNT font', 'kindEOT' : 'Embedded Open Type font', 'kindWOFF' : 'Web Open Font Format', 'kindWOFF2' : 'Web Open Font Format 2', /********************************** texts **********************************/ 'kindText' : 'Tekst bestand', 'kindTextPlain' : 'Tekst', 'kindPHP' : 'PHP bronbestand', 'kindCSS' : 'Cascading style sheet', 'kindHTML' : 'HTML document', 'kindJS' : 'Javascript bronbestand', 'kindRTF' : 'Rich Text Format', 'kindC' : 'C bronbestand', 'kindCHeader' : 'C header bronbestand', 'kindCPP' : 'C++ bronbestand', 'kindCPPHeader' : 'C++ header bronbestand', 'kindShell' : 'Unix shell script', 'kindPython' : 'Python bronbestand', 'kindJava' : 'Java bronbestand', 'kindRuby' : 'Ruby bronbestand', 'kindPerl' : 'Perl bronbestand', 'kindSQL' : 'SQL bronbestand', 'kindXML' : 'XML document', 'kindAWK' : 'AWK bronbestand', 'kindCSV' : 'Komma gescheiden waardes', 'kindDOCBOOK' : 'Docbook XML document', 'kindMarkdown' : 'Markdown tekst', // added 20.7.2015 /********************************** images **********************************/ // 'kindImage' : 'Afbeelding', 'kindBMP' : 'BMP afbeelding', 'kindJPEG' : 'JPEG afbeelding', 'kindGIF' : 'GIF afbeelding', 'kindPNG' : 'PNG afbeelding', 'kindTIFF' : 'TIFF afbeelding', 'kindTGA' : 'TGA afbeelding', 'kindPSD' : 'Adobe Photoshop afbeelding', 'kindXBITMAP' : 'X bitmap afbeelding', 'kindPXM' : 'Pixelmator afbeelding', /********************************** media **********************************/ 'kindAudio' : 'Audio media', 'kindAudioMPEG' : 'MPEG audio', 'kindAudioMPEG4' : 'MPEG-4 audio', 'kindAudioMIDI' : 'MIDI audio', 'kindAudioOGG' : 'Ogg Vorbis audio', 'kindAudioWAV' : 'WAV audio', 'AudioPlaylist' : 'MP3 playlist', 'kindVideo' : 'Video media', 'kindVideoDV' : 'DV video', 'kindVideoMPEG' : 'MPEG video', 'kindVideoMPEG4' : 'MPEG-4 video', 'kindVideoAVI' : 'AVI video', 'kindVideoMOV' : 'Quick Time video', 'kindVideoWM' : 'Windows Media video', 'kindVideoFlash' : 'Flash video', 'kindVideoMKV' : 'Matroska video', 'kindVideoOGG' : 'Ogg video' } }; })); PK!KÞ6[š[š@file-manager-advanced/application/library/js/i18n/elfinder.ja.jsnu„[µü¤/** * Japanese translation * @author Tomoaki Yoshida * @author Naoki Sawada * @version 2026-04-29 */ (function(root, factory) { if (typeof define === 'function' && define.amd) { define(['elfinder'], factory); } else if (typeof exports !== 'undefined') { module.exports = factory(require('elfinder')); } else { factory(root.elFinder); } }(this, function(elFinder) { elFinder.prototype.i18.ja = { translator : 'Tomoaki Yoshida <info@yoshida-studio.jp>, Naoki Sawada <hypweb+elfinder@gmail.com>', language : 'Japanese', direction : 'ltr', dateFormat : 'Y/m/d h:i A', // will show like: 2026/04/29 11:30 PM fancyDateFormat : '$1 h:i A', // will show like: 今日 11:30 PM nonameDateFormat : 'ymd-His', // noname upload will show like: 260429-233058 messages : { /********************************** errors **********************************/ 'error' : 'エラー', 'errUnknown' : 'ä¸�明ã�ªã‚¨ãƒ©ãƒ¼ã�§ã�™ã€‚', 'errUnknownCmd' : 'ä¸�明ã�ªã‚³ãƒžãƒ³ãƒ‰ã�§ã�™ã€‚', 'errJqui' : '無効ã�ª jQuery UI 設定ã�§ã�™ã€‚Selectable, Draggable, Droppable コンãƒ�ーãƒ�ントをå�«ã‚�ã‚‹å¿…è¦�ã�Œã�‚りã�¾ã�™ã€‚', 'errNode' : 'elFinder ã�¯ DOM Element ã�Œå¿…è¦�ã�§ã�™ã€‚', 'errURL' : '無効ã�ª elFinder 設定ã�§ã�™ï¼� URLを設定ã�•れã�¦ã�„ã�¾ã�›ã‚“。', 'errAccess' : 'アクセスã�Œæ‹’å�¦ã�•れã�¾ã�—ã�Ÿã€‚', 'errConnect' : 'ãƒ�ックエンドã�¨ã�®æŽ¥ç¶šã�Œã�§ã��ã�¾ã�›ã‚“。', 'errAbort' : '接続ã�Œä¸­æ–­ã�•れã�¾ã�—ã�Ÿã€‚', 'errTimeout' : '接続ã�Œã‚¿ã‚¤ãƒ ã‚¢ã‚¦ãƒˆã�—ã�¾ã�—ã�Ÿã€‚', 'errNotFound' : 'ãƒ�ックエンドã�Œè¦‹ã�¤ã�‹ã‚Šã�¾ã�›ã‚“。', 'errResponse' : '無効ã�ªãƒ�ックエンドレスãƒ�ンスã�§ã�™ã€‚', 'errConf' : 'ãƒ�ックエンドã�®è¨­å®šã�Œæœ‰åйã�§ã�¯ã�‚りã�¾ã�›ã‚“。', 'errJSON' : 'PHP JSON モジュールã�Œã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã�•れã�¦ã�„ã�¾ã�›ã‚“。', 'errNoVolumes' : '読ã�¿è¾¼ã�¿å�¯èƒ½ã�ªãƒœãƒªãƒ¥ãƒ¼ãƒ ã�Œã�‚りã�¾ã�›ã‚“。', 'errCmdParams' : 'コマンド "$1"ã�®ãƒ‘ラメーターã�Œç„¡åйã�§ã�™ã€‚', 'errDataNotJSON' : 'JSONデータã�§ã�¯ã�‚りã�¾ã�›ã‚“。', 'errDataEmpty' : '空ã�®ãƒ‡ãƒ¼ã‚¿ã�§ã�™ã€‚', 'errCmdReq' : 'ãƒ�ックエンドリクエストã�¯ã‚³ãƒžãƒ³ãƒ‰å��ã�Œå¿…è¦�ã�§ã�™ã€‚', 'errOpen' : '"$1" ã‚’é–‹ã��ã�“ã�¨ã�Œã�§ã��ã�¾ã�›ã‚“。', 'errNotFolder' : 'オブジェクトã�Œãƒ•ォルダã�§ã�¯ã�‚りã�¾ã�›ã‚“。', 'errNotFile' : 'オブジェクトã�Œãƒ•ァイルã�§ã�¯ã�‚りã�¾ã�›ã‚“。', 'errRead' : '"$1" を読ã�¿è¾¼ã‚€ã�“ã�¨ã�Œã�§ã��ã�¾ã�›ã‚“。', 'errWrite' : '"$1" ã�«æ›¸ã��込むã�“ã�¨ã�Œã�§ã��ã�¾ã�›ã‚“。', 'errPerm' : '権é™�ã�Œã�‚りã�¾ã�›ã‚“。', 'errLocked' : '"$1" ã�¯ãƒ­ãƒƒã‚¯ã�•れã�¦ã�„ã‚‹ã�®ã�§å��å‰�ã�®å¤‰æ›´ã€�移動ã€�削除ã�Œã�§ã��ã�¾ã�›ã‚“。', 'errExists' : '"$1" ã�¨ã�„ã�†ã‚¢ã‚¤ãƒ†ãƒ å��ã�¯ã�™ã�§ã�«å­˜åœ¨ã�—ã�¦ã�„ã�¾ã�™ã€‚', 'errInvName' : '無効ã�ªãƒ•ァイルå��ã�§ã�™ã€‚', 'errInvDirname' : '無効ã�ªãƒ•ォルダå��ã�§ã�™ã€‚', // from v2.1.24 added 12.4.2017 'errFolderNotFound' : 'フォルダã�Œè¦‹ã�¤ã�‹ã‚Šã�¾ã�›ã‚“。', 'errFileNotFound' : 'ファイルã�Œè¦‹ã�¤ã�‹ã‚Šã�¾ã�›ã‚“。', 'errTrgFolderNotFound' : 'ターゲットã�¨ã�™ã‚‹ãƒ•ォルダ "$1" ã�Œè¦‹ã�¤ã�‹ã‚Šã�¾ã�›ã‚“。', 'errPopup' : 'ãƒ�ップアップウィンドウã�Œé–‹ã�‘ã�¾ã�›ã‚“。ファイルを開ã��ã�«ã�¯ãƒ–ラウザã�®è¨­å®šã‚’変更ã�—ã�¦ã��ã� ã�•ã�„。', 'errMkdir' : 'フォルダ "$1" を作æˆ�ã�™ã‚‹ã�“ã�¨ã�Œã�§ã��ã�¾ã�›ã‚“。', 'errMkfile' : 'ファイル "$1" を作æˆ�ã�™ã‚‹ã�“ã�¨ã�Œã�§ã��ã�¾ã�›ã‚“。', 'errRename' : '"$1" ã�®å��å‰�を変更ã�™ã‚‹ã�“ã�¨ã�Œã�§ã��ã�¾ã�›ã‚“。', 'errCopyFrom' : '"$1" ã�‹ã‚‰ã�®ãƒ•ァイルコピーã�¯è¨±å�¯ã�•れã�¦ã�„ã�¾ã�›ã‚“。', 'errCopyTo' : '"$1" ã�¸ã�®ãƒ•ァイルコピーã�¯è¨±å�¯ã�•れã�¦ã�„ã�¾ã�›ã‚“。', 'errMkOutLink' : 'ボリュームルート外ã�¸ã�®ãƒªãƒ³ã‚¯ã‚’作æˆ�ã�™ã‚‹ã�“ã�¨ã�¯ã�§ã��ã�¾ã�›ã‚“。', // from v2.1 added 03.10.2015 'errUpload' : 'アップロードエラー', // old name - errUploadCommon 'errUploadFile' : '"$1" をアップロードã�™ã‚‹ã�“ã�¨ã�Œã�§ã��ã�¾ã�›ã‚“。', // old name - errUpload 'errUploadNoFiles' : 'アップロードã�•れã�Ÿãƒ•ァイルã�¯ã�‚りã�¾ã�›ã‚“。', 'errUploadTotalSize' : 'データã�Œè¨±å®¹ã‚µã‚¤ã‚ºã‚’è¶…ã�ˆã�¦ã�„ã�¾ã�™ã€‚', // old name - errMaxSize 'errUploadFileSize' : 'ファイルã�Œè¨±å®¹ã‚µã‚¤ã‚ºã‚’è¶…ã�ˆã�¦ã�„ã�¾ã�™ã€‚', // old name - errFileMaxSize 'errUploadMime' : '許å�¯ã�•れã�¦ã�„ã�ªã�„ファイル形å¼�ã�§ã�™ã€‚', 'errUploadTransfer' : '"$1" 転é€�エラーã�§ã�™ã€‚', 'errUploadTemp' : 'アップロード用一時ファイルを作æˆ�ã�§ã��ã�¾ã�›ã‚“。', // from v2.1 added 26.09.2015 'errNotReplace' : 'アイテム "$1" ã�¯ã�™ã�§ã�«ã�“ã�®å ´æ‰€ã�«ã�‚りã€�アイテムã�®ã‚¿ã‚¤ãƒ—ã�Œé�•ã�†ã�®ã�§ç½®ã��æ�›ã�ˆã‚‹ã�“ã�¨ã�¯ã�§ã��ã�¾ã�›ã‚“。', // new 'errReplace' : '"$1" ã‚’ç½®ã��æ�›ã�ˆã‚‹ã�“ã�¨ã�Œã�§ã��ã�¾ã�›ã‚“。', 'errSave' : '"$1" ã‚’ä¿�å­˜ã�™ã‚‹ã�“ã�¨ã�Œã�§ã��ã�¾ã�›ã‚“。', 'errCopy' : '"$1" をコピーã�™ã‚‹ã�“ã�¨ã�Œã�§ã��ã�¾ã�›ã‚“。', 'errMove' : '"$1" を移動ã�™ã‚‹ã�“ã�¨ã�Œã�§ã��ã�¾ã�›ã‚“。', 'errCopyInItself' : '"$1" ã‚’ã��れ自身ã�®ä¸­ã�«ã‚³ãƒ”ーã�™ã‚‹ã�“ã�¨ã�¯ã�§ã��ã�¾ã�›ã‚“。', 'errRm' : '"$1" を削除ã�™ã‚‹ã�“ã�¨ã�Œã�§ã��ã�¾ã�›ã‚“。', 'errTrash' : 'ã�”ã�¿ç®±ã�«å…¥ã‚Œã‚‹ã�“ã�¨ã�Œã�§ã��ã�¾ã�›ã‚“。', // from v2.1.24 added 30.4.2017 'errRmSrc' : '元ファイルを削除ã�™ã‚‹ã�“ã�¨ã�Œã�§ã��ã�¾ã�›ã‚“。', 'errExtract' : '"$1" ã‚’è§£å‡�ã�™ã‚‹ã�“ã�¨ã�Œã�§ã��ã�¾ã�›ã‚“。', 'errArchive' : 'アーカイブを作æˆ�ã�™ã‚‹ã�“ã�¨ã�Œã�§ã��ã�¾ã�›ã‚“。', 'errArcType' : 'サãƒ�ート外ã�®ã‚¢ãƒ¼ã‚«ã‚¤ãƒ–å½¢å¼�ã�§ã�™ã€‚', 'errNoArchive' : 'アーカイブã�§ã�ªã�„ã�‹ã‚µãƒ�ートã�•れã�¦ã�„ã�ªã�„アーカイブ形å¼�ã�§ã�™ã€‚', 'errCmdNoSupport' : 'サãƒ�ートã�•れã�¦ã�„ã�ªã�„コマンドã�§ã�™ã€‚', 'errReplByChild' : 'フォルダ "$1" ã�«å�«ã�¾ã‚Œã�¦ã‚‹ã‚¢ã‚¤ãƒ†ãƒ ã‚’ç½®ã��æ�›ã�ˆã‚‹ã�“ã�¨ã�¯ã�§ã��ã�¾ã�›ã‚“。', 'errArcSymlinks' : 'シンボリックリンクã�¾ã�Ÿã�¯è¨±å®¹ã�•れã�ªã�„ファイルå��ã‚’å�«ã‚€ã‚¢ãƒ¼ã‚«ã‚¤ãƒ–ã�¯ã‚»ã‚­ãƒ¥ãƒªãƒ†ã‚£ä¸Šã€�è§£å‡�ã�§ã��ã�¾ã�›ã‚“。', // edited 24.06.2012 'errArcMaxSize' : 'アーカイブã�Œè¨±å®¹ã�•れã�Ÿã‚µã‚¤ã‚ºã‚’è¶…ã�ˆã�¦ã�„ã�¾ã�™ã€‚', 'errResize' : '"$1" ã�®ãƒªã‚µã‚¤ã‚ºã�¾ã�Ÿã�¯å›žè»¢ã�Œã�§ã��ã�¾ã�›ã‚“。', 'errResizeDegree' : 'イメージã�®å›žè»¢è§’度ã�Œä¸�æ­£ã�§ã�™ã€‚', // added 7.3.2013 'errResizeRotate' : 'イメージを回転ã�§ã��ã�¾ã�›ã‚“。', // added 7.3.2013 'errResizeSize' : '指定ã�•れã�Ÿã‚¤ãƒ¡ãƒ¼ã‚¸ã‚µã‚¤ã‚ºã�Œä¸�æ­£ã�§ã�™ã€‚', // added 7.3.2013 'errResizeNoChange' : 'イメージサイズã�ªã�©ã�®å¤‰æ›´ç‚¹ã�Œã�‚りã�¾ã�›ã‚“。', // added 7.3.2013 'errUsupportType' : 'ã�“ã�®ãƒ•ァイルタイプã�¯ã‚µãƒ�ートã�•れã�¦ã�„ã�¾ã�›ã‚“。', 'errNotUTF8Content' : 'ファイル "$1" ã�«ã�¯ UTF-8 以外ã�®æ–‡å­—ã�Œå�«ã�¾ã‚Œã�¦ã�„ã‚‹ã�®ã�§ç·¨é›†ã�§ã��ã�¾ã�›ã‚“。', // added 9.11.2011 'errNetMount' : '"$1" をマウントã�§ã��ã�¾ã�›ã‚“。', // added 17.04.2012 'errNetMountNoDriver' : 'サãƒ�ートã�•れã�¦ã�„ã�ªã�„プロトコルã�§ã�™ã€‚', // added 17.04.2012 'errNetMountFailed' : 'マウントã�«å¤±æ•—ã�—ã�¾ã�—ã�Ÿã€‚', // added 17.04.2012 'errNetMountHostReq' : 'ホストå��ã�¯å¿…é ˆã�§ã�™ã€‚', // added 18.04.2012 'errSessionExpires' : 'アクションã�Œã�ªã�‹ã�£ã�Ÿã�Ÿã‚�ã€�セッションã�ŒæœŸé™�切れã�«ã�ªã‚Šã�¾ã�—ã�Ÿã€‚', 'errCreatingTempDir' : '一時ディレクトリを作æˆ�ã�§ã��ã�¾ã�›ã‚“:"$1"', 'errFtpDownloadFile' : 'FTP ã�‹ã‚‰ãƒ•ァイルをダウンロードã�§ã��ã�¾ã�›ã‚“:"$1"', 'errFtpUploadFile' : 'FTP ã�¸ãƒ•ァイルをアップロードã�§ã��ã�¾ã�›ã‚“:"$1"', 'errFtpMkdir' : 'FTP ã�«ãƒªãƒ¢ãƒ¼ãƒˆãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªã‚’作æˆ�ã�§ã��ã�¾ã�›ã‚“:"$1"', 'errArchiveExec' : 'ファイルã�®ã‚¢ãƒ¼ã‚«ã‚¤ãƒ–中ã�«ã‚¨ãƒ©ãƒ¼ã�Œç™ºç”Ÿã�—ã�¾ã�—ã�Ÿï¼š"$1"', 'errExtractExec' : 'ファイルã�®æŠ½å‡ºä¸­ã�«ã‚¨ãƒ©ãƒ¼ã�Œç™ºç”Ÿã�—ã�¾ã�—ã�Ÿï¼š"$1"', 'errNetUnMount' : 'アンマウントã�§ã��ã�¾ã�›ã‚“。', // from v2.1 added 30.04.2012 'errConvUTF8' : 'UTF-8 ã�«å¤‰æ�›ã�§ã��ã�¾ã�›ã‚“ã�§ã�—ã�Ÿã€‚', // from v2.1 added 08.04.2014 'errFolderUpload' : 'フォルダをアップロードã�—ã�Ÿã�„ã�®ã�§ã�‚れã�°ã€�モダンブラウザを試ã�—ã�¦ã��ã� ã�•ã�„。', // from v2.1 added 26.6.2015 'errSearchTimeout' : '"$1" を検索中ã�«ã‚¿ã‚¤ãƒ ã‚¢ã‚¦ãƒˆã�—ã�¾ã�—ã�Ÿã€‚検索çµ�æžœã�¯éƒ¨åˆ†çš„ã�§ã�™ã€‚', // from v2.1 added 12.1.2016 'errReauthRequire' : 'å†�èª�å�¯ã�Œå¿…è¦�ã�§ã�™ã€‚', // from v2.1.10 added 24.3.2016 'errMaxTargets' : 'é�¸æŠžå�¯èƒ½ã�ªæœ€å¤§ã‚¢ã‚¤ãƒ†ãƒ æ•°ã�¯ $1 個ã�§ã�™ã€‚', // from v2.1.17 added 17.10.2016 'errRestore' : '宛先ã�®ç‰¹å®šã�Œã�§ã��ã�ªã�„ã�Ÿã‚�ã€�ã�”ã�¿ç®±ã�‹ã‚‰æˆ»ã�›ã�¾ã�›ã‚“。', // from v2.1.24 added 3.5.2017 'errEditorNotFound' : 'ã�“ã�®ãƒ•ァイルタイプã�®ã‚¨ãƒ‡ã‚£ã‚¿ãƒ¼ã�Œã�‚りã�¾ã�›ã‚“。', // from v2.1.25 added 23.5.2017 'errServerError' : 'サーãƒ�ーå�´ã�§ã‚¨ãƒ©ãƒ¼ã�Œç™ºç”Ÿã�—ã�¾ã�—ã�Ÿã€‚', // from v2.1.25 added 16.6.2017 'errEmpty' : 'フォルダ"$1"を空ã�«ã�™ã‚‹ã�“ã�¨ã�Œã�§ã��ã�¾ã�›ã‚“。', // from v2.1.25 added 22.6.2017 'moreErrors' : 'ã�•らã�« $1 ä»¶ã�®ã‚¨ãƒ©ãƒ¼ã�Œã�‚りã�¾ã�™ã€‚', // from v2.1.44 added 9.12.2018 'errMaxMkdirs' : '一度ã�«ä½œæˆ�ã�§ã��るフォルダーã�¯ $1 個ã�¾ã�§ã�§ã�™ã€‚', // from v2.1.58 added 20.6.2021 /******************************* commands names ********************************/ 'cmdarchive' : 'アーカイブ作æˆ�', 'cmdback' : '戻る', 'cmdcopy' : 'コピー', 'cmdcut' : 'カット', 'cmddownload' : 'ダウンロード', 'cmdduplicate' : '複製', 'cmdedit' : 'ファイル編集', 'cmdextract' : 'アーカイブを解å‡�', 'cmdforward' : '進む', 'cmdgetfile' : 'ファイルé�¸æŠž', 'cmdhelp' : 'ã�“ã�®ã‚½ãƒ•トウェアã�«ã�¤ã�„ã�¦', 'cmdhome' : 'ルート', 'cmdinfo' : '情報', 'cmdmkdir' : 'æ–°è¦�フォルダ', 'cmdmkdirin' : 'æ–°è¦�フォルダã�¸', // from v2.1.7 added 19.2.2016 'cmdmkfile' : 'æ–°è¦�ファイル', 'cmdopen' : 'é–‹ã��', 'cmdpaste' : 'ペースト', 'cmdquicklook' : 'プレビュー', 'cmdreload' : 'リロード', 'cmdrename' : 'リãƒ�ーム', 'cmdrm' : '削除', 'cmdtrash' : 'ã�”ã�¿ç®±ã�¸', //from v2.1.24 added 29.4.2017 'cmdrestore' : '復元', //from v2.1.24 added 3.5.2017 'cmdsearch' : 'ファイルを探ã�™', 'cmdup' : '親フォルダã�¸ç§»å‹•', 'cmdupload' : 'ファイルアップロード', 'cmdview' : 'ビュー', 'cmdresize' : 'リサイズã�¨å›žè»¢', 'cmdsort' : 'ソート', 'cmdnetmount' : 'ãƒ�ットワークボリュームをマウント', // added 18.04.2012 'cmdnetunmount': 'アンマウント', // from v2.1 added 30.04.2012 'cmdplaces' : 'よã��使ã�†é …ç›®ã�¸', // added 28.12.2014 'cmdchmod' : '属性変更', // from v2.1 added 20.6.2015 'cmdopendir' : 'フォルダを開ã��', // from v2.1 added 13.1.2016 'cmdcolwidth' : '列幅リセット', // from v2.1.13 added 12.06.2016 'cmdfullscreen': 'フルスクリーン', // from v2.1.15 added 03.08.2016 'cmdmove' : '移動', // from v2.1.15 added 21.08.2016 'cmdempty' : 'フォルダを空ã�«', // from v2.1.25 added 22.06.2017 'cmdundo' : 'å…ƒã�«æˆ»ã�™', // from v2.1.27 added 31.07.2017 'cmdredo' : 'やり直ã�—', // from v2.1.27 added 31.07.2017 'cmdpreference': '個人設定', // from v2.1.27 added 03.08.2017 'cmdselectall' : 'ã�™ã�¹ã�¦é�¸æŠž', // from v2.1.28 added 15.08.2017 'cmdselectnone': 'é�¸æŠžè§£é™¤', // from v2.1.28 added 15.08.2017 'cmdselectinvert': 'é�¸æŠžã‚’å��転', // from v2.1.28 added 15.08.2017 'cmdopennew' : 'æ–°ã�—ã�„ウィンドウã�§é–‹ã��', // from v2.1.38 added 3.4.2018 'cmdhide' : 'é�žè¡¨ç¤º (個人設定)', // from v2.1.41 added 24.7.2018 /*********************************** buttons ***********************************/ 'btnClose' : 'é–‰ã�˜ã‚‹', 'btnSave' : 'ä¿�å­˜', 'btnRm' : '削除', 'btnApply' : 'é�©ç”¨', 'btnCancel' : 'キャンセル', 'btnNo' : 'ã�„ã�„ã�ˆ', 'btnYes' : 'ã�¯ã�„', 'btnDiscard': '変更を破棄', 'btnMount' : 'マウント', // added 18.04.2012 'btnApprove': '$1ã�¸è¡Œã��èª�å�¯ã�™ã‚‹', // from v2.1 added 26.04.2012 'btnUnmount': 'アンマウント', // from v2.1 added 30.04.2012 'btnConv' : '変æ�›', // from v2.1 added 08.04.2014 'btnCwd' : 'ã�“ã�®å ´æ‰€', // from v2.1 added 22.5.2015 'btnVolume' : 'ボリューム', // from v2.1 added 22.5.2015 'btnAll' : 'å…¨ã�¦', // from v2.1 added 22.5.2015 'btnMime' : 'MIMEタイプ', // from v2.1 added 22.5.2015 'btnFileName':'ファイルå��', // from v2.1 added 22.5.2015 'btnSaveClose': 'ä¿�å­˜ã�—ã�¦é–‰ã�˜ã‚‹', // from v2.1 added 12.6.2015 'btnBackup' : 'ãƒ�ックアップ', // fromv2.1 added 28.11.2015 'btnRename' : 'リãƒ�ーム', // from v2.1.24 added 6.4.2017 'btnRenameAll' : 'リãƒ�ーム(å…¨ã�¦)', // from v2.1.24 added 6.4.2017 'btnPrevious' : 'å‰�ã�¸ ($1/$2)', // from v2.1.24 added 11.5.2017 'btnNext' : '次ã�¸ ($1/$2)', // from v2.1.24 added 11.5.2017 'btnSaveAs' : '別å��ä¿�å­˜', // from v2.1.25 added 24.5.2017 /******************************** notifications ********************************/ 'ntfopen' : 'フォルダを開ã�„ã�¦ã�„ã�¾ã�™', 'ntffile' : 'ファイルを開ã�„ã�¦ã�„ã�¾ã�™', 'ntfreload' : 'フォルダをå†�読込ã�—ã�¦ã�„ã�¾ã�™', 'ntfmkdir' : 'フォルダを作æˆ�ã�—ã�¦ã�„ã�¾ã�™', 'ntfmkfile' : 'ファイルを作æˆ�ã�—ã�¦ã�„ã�¾ã�™', 'ntfrm' : 'アイテムを削除ã�—ã�¦ã�„ã�¾ã�™', 'ntfcopy' : 'アイテムをコピーã�—ã�¦ã�„ã�¾ã�™', 'ntfmove' : 'アイテムを移動ã�—ã�¦ã�„ã�¾ã�™', 'ntfprepare' : '既存アイテムを確èª�ã�—ã�¦ã�„ã�¾ã�™', 'ntfrename' : 'ファイルå��を変更ã�—ã�¦ã�„ã�¾ã�™', 'ntfupload' : 'ファイルをアップロードã�—ã�¦ã�„ã�¾ã�™', 'ntfdownload' : 'ファイルをダウンロードã�—ã�¦ã�„ã�¾ã�™', 'ntfsave' : 'ファイルをä¿�å­˜ã�—ã�¦ã�„ã�¾ã�™', 'ntfarchive' : 'アーカイブ作æˆ�ã�—ã�¦ã�„ã�¾ã�™', 'ntfextract' : 'アーカイブを解å‡�ã�—ã�¦ã�„ã�¾ã�™', 'ntfsearch' : 'ファイル検索中', 'ntfresize' : 'リサイズã�—ã�¦ã�„ã�¾ã�™', 'ntfsmth' : '処ç�†ã‚’ã�—ã�¦ã�„ã�¾ã�™', 'ntfloadimg' : 'イメージを読ã�¿è¾¼ã‚“ã�§ã�„ã�¾ã�™', 'ntfnetmount' : 'ãƒ�ットボリュームをマウント中', // added 18.04.2012 'ntfnetunmount': 'ãƒ�ットボリュームをアンマウント中', // from v2.1 added 30.04.2012 'ntfdim' : 'ç”»åƒ�サイズをå�–å¾—ã�—ã�¦ã�„ã�¾ã�™', // added 20.05.2013 'ntfreaddir' : 'フォルダ情報を読ã�¿å�–ã�£ã�¦ã�„ã�¾ã�™', // from v2.1 added 01.07.2013 'ntfurl' : 'リンクURLã‚’å�–å¾—ã�—ã�¦ã�„ã�¾ã�™', // from v2.1 added 11.03.2014 'ntfchmod' : 'ファイル属性を変更ã�—ã�¦ã�„ã�¾ã�™', // from v2.1 added 20.6.2015 'ntfpreupload': 'アップロードファイルå��を検証中', // from v2.1 added 31.11.2015 'ntfzipdl' : 'ダウンロード用ファイルを作æˆ�中', // from v2.1.7 added 23.1.2016 'ntfparents' : 'パス情報をå�–å¾—ã�—ã�¦ã�„ã�¾ã�™', // from v2.1.17 added 2.11.2016 'ntfchunkmerge': 'アップロード済ã�¿ãƒ•ァイルを処ç�†ä¸­', // from v2.1.17 added 2.11.2016 'ntftrash' : 'ã�”ã�¿ç®±ã�«å…¥ã‚Œã�¦ã�„ã�¾ã�™', // from v2.1.24 added 2.5.2017 'ntfrestore' : 'ã�”ã�¿ç®±ã�‹ã‚‰å…ƒã�«æˆ»ã�—ã�¦ã�„ã�¾ã�™', // from v2.1.24 added 3.5.2017 'ntfchkdir' : '宛先フォルダを確èª�ã�—ã�¦ã�„ã�¾ã�™', // from v2.1.24 added 3.5.2017 'ntfundo' : 'å‰�ã�®æ“�作をå�–り消ã�—ã�¦å…ƒã�«æˆ»ã�—ã�¦ã�„ã�¾ã�™', // from v2.1.27 added 31.07.2017 'ntfredo' : 'å…ƒã�«æˆ»ã�—ã�Ÿæ“�作をやり直ã�—ã�¦ã�„ã�¾ã�™', // from v2.1.27 added 31.07.2017 'ntfchkcontent' : 'コンテンツをãƒ�ェックã�—ã�¦ã�„ã�¾ã�™', // from v2.1.41 added 3.8.2018 /*********************************** volumes *********************************/ 'volume_Trash' : 'ã�”ã�¿ç®±', //from v2.1.24 added 29.4.2017 /************************************ dates **********************************/ 'dateUnknown' : 'ä¸�明', 'Today' : '今日', 'Yesterday' : '昨日', 'msJan' : '1月', 'msFeb' : '2月', 'msMar' : '3月', 'msApr' : '4月', 'msMay' : '5月', 'msJun' : '6月', 'msJul' : '7月', 'msAug' : '8月', 'msSep' : '9月', 'msOct' : '10月', 'msNov' : '11月', 'msDec' : '12月', 'January' : '1月', 'February' : '2月', 'March' : '3月', 'April' : '4月', 'May' : '5月', 'June' : '6月', 'July' : '7月', 'August' : '8月', 'September' : '9月', 'October' : '10月', 'November' : '11月', 'December' : '12月', 'Sunday' : '日曜日', 'Monday' : '月曜日', 'Tuesday' : 'ç�«æ›œæ—¥', 'Wednesday' : '水曜日', 'Thursday' : '木曜日', 'Friday' : '金曜日', 'Saturday' : '土曜日', 'Sun' : '(æ—¥)', 'Mon' : '(月)', 'Tue' : '(ç�«)', 'Wed' : '(æ°´)', 'Thu' : '(木)', 'Fri' : '(金)', 'Sat' : '(土)', /******************************** sort variants ********************************/ 'sortname' : 'å��å‰�é †', 'sortkind' : '種類順', 'sortsize' : 'サイズ順', 'sortdate' : '日付順', 'sortFoldersFirst' : 'フォルダ優先', 'sortperm' : '権é™�é †', // from v2.1.13 added 13.06.2016 'sortmode' : '属性順', // from v2.1.13 added 13.06.2016 'sortowner' : 'オーナー順', // from v2.1.13 added 13.06.2016 'sortgroup' : 'グループ順', // from v2.1.13 added 13.06.2016 'sortAlsoTreeview' : 'ツリービューも', // from v2.1.15 added 01.08.2016 /********************************** new items **********************************/ 'untitled file.txt' : 'æ–°è¦�ファイル.txt', // added 10.11.2015 'untitled folder' : 'æ–°è¦�フォルダ', // added 10.11.2015 'Archive' : 'æ–°è¦�アーカイブ', // from v2.1 added 10.11.2015 'untitled file' : 'æ–°è¦�ファイル.$1', // from v2.1.41 added 6.8.2018 'extentionfile' : '$1: ファイル', // from v2.1.41 added 6.8.2018 'extentiontype' : '$1: $2', // from v2.1.43 added 17.10.2018 /********************************** messages **********************************/ 'confirmReq' : '処ç�†ã‚’実行ã�—ã�¾ã�™ã�‹ï¼Ÿ', 'confirmRm' : 'アイテムを完全ã�«å‰Šé™¤ã�—ã�¦ã‚‚よã‚�ã�—ã�„ã�§ã�™ã�‹ï¼Ÿ
          ���作��り消�����ん�', 'confirmRepl' : '��ファイルを新��ファイル�上書�����? (フォルダ���れ��る場��統��れ��。置���る場��「�ックアップ��択������。)', 'confirmRest' : '既存�アイテムを��箱�アイテム�上書�����?', // fromv2.1.24 added 5.5.2017 'confirmConvUTF8' : 'UTF-8 以外�文字���れ����。
          UTF-8 �変�����?
          変�後��存�コンテンツ� UTF-8 ��り��。', // from v2.1 added 08.04.2014 'confirmNonUTF8' : '��ファイル�文字エンコーディングを判別����ん���。編集�る��一時的� UTF-8 �変��る必���り��。
          文字エンコーディングを指定������。', // from v2.1.19 added 28.11.2016 'confirmNotSave' : '変更�れ����。
          �存���閉�る�編集内容�失�れ��。', // from v2.1 added 15.7.2015 'confirmTrash' : 'アイテムを��箱�移動��もよ������?', //from v2.1.24 added 29.4.2017 'confirmMove' : 'アイテムを"$1"�移動��もよ������?', //from v2.1.50 added 27.7.2019 'apllyAll' : '全���用���', 'name' : '��', 'size' : 'サイズ', 'perms' : '権�', 'modify' : '更新', 'kind' : '種類', 'read' : '読��り', 'write' : '書�込�', 'noaccess' : 'アクセス�止', 'and' : ',', 'unknown' : '�明', 'selectall' : '����アイテムを�択', 'selectfiles' : 'アイテム�択', 'selectffile' : '最��アイテムを�択', 'selectlfile' : '最後�アイテムを�択', 'viewlist' : 'リスト形��表示', 'viewicons' : 'アイコン形��表示', 'viewSmall' : '�アイコン', // from v2.1.39 added 22.5.2018 'viewMedium' : '中アイコン', // from v2.1.39 added 22.5.2018 'viewLarge' : '大アイコン', // from v2.1.39 added 22.5.2018 'viewExtraLarge' : '特大アイコン', // from v2.1.39 added 22.5.2018 'places' : 'よ�使�項目', 'calc' : '計算中', 'path' : 'パス', 'aliasfor' : 'エイリアス', 'locked' : 'ロック', 'dim' : '画素数', 'files' : 'ファイル', 'folders' : 'フォルダ', 'items' : 'アイテム', 'yes' : '��', 'no' : '���', 'link' : 'リンク', 'searcresult' : '検索�果', 'selected' : '�択�れ�アイテム', 'about' : '概�', 'shortcuts' : 'ショートカット', 'help' : 'ヘルプ', 'webfm' : 'ウェブファイルマ�ージャー', 'ver' : '�ージョン', 'protocolver' : 'プロトコル�ージョン', 'homepage' : 'プロジェクトホーム', 'docs' : 'ドキュメンテーション', 'github' : 'Github �フォーク', 'twitter' : 'Twitter �フォロー', 'facebook' : 'Facebookグループ ��加', 'team' : '�ーム', 'chiefdev' : '�ーフデベロッパー', 'developer' : 'デベロッパー', 'contributor' : 'コントリビュータ', 'maintainer' : 'メインテナー', 'translator' : '翻訳者', 'icons' : 'アイコン', 'dontforget' : 'タオル忘れ�ゃ��よ~', 'shortcutsof' : 'ショートカット�利用����ん', 'dropFiles' : '���ファイルをドロップ', 'or' : '���', 'selectForUpload' : 'ファイルを�択', 'moveFiles' : 'アイテムを移動', 'copyFiles' : 'アイテムをコピー', 'restoreFiles' : 'アイテムを元�戻�', // from v2.1.24 added 5.5.2017 'rmFromPlaces' : '���ら削除', 'aspectRatio' : '縦横比維�', 'scale' : '表示縮尺', 'width' : '幅', 'height' : '高�', 'resize' : 'リサイズ', 'crop' : '切り抜�', 'rotate' : '回転', 'rotate-cw' : '90度左回転', 'rotate-ccw' : '90度�回転', 'degree' : '度', 'netMountDialogTitle' : '�ットワークボリューム�マウント', // added 18.04.2012 'protocol' : 'プロトコル', // added 18.04.2012 'host' : 'ホスト�', // added 18.04.2012 'port' : '�ート', // added 18.04.2012 'user' : 'ユーザー�', // added 18.04.2012 'pass' : 'パスワード', // added 18.04.2012 'confirmUnmount' : '$1をアンマウント����?', // from v2.1 added 30.04.2012 'dropFilesBrowser': 'ブラウザ�らファイルをドロップ���貼り付�', // from v2.1 added 30.05.2012 'dropPasteFiles' : '���ファイルをドロップ ��� URLリスト, 画�(クリップボード) を貼り付�', // from v2.1 added 07.04.2014 'encoding' : 'エンコーディング', // from v2.1 added 19.12.2014 'locale' : 'ロケール', // from v2.1 added 19.12.2014 'searchTarget' : '検索範囲: $1', // from v2.1 added 22.5.2015 'searchMime' : '指定�� MIME タイプ�検索', // from v2.1 added 22.5.2015 'owner' : 'オーナー', // from v2.1 added 20.6.2015 'group' : 'グループ', // from v2.1 added 20.6.2015 'other' : '��他', // from v2.1 added 20.6.2015 'execute' : '実行', // from v2.1 added 20.6.2015 'perm' : 'パーミッション', // from v2.1 added 20.6.2015 'mode' : '属性', // from v2.1 added 20.6.2015 'emptyFolder' : '空�フォルダ', // from v2.1.6 added 30.12.2015 'emptyFolderDrop' : '空�フォルダ\\Aアイテムを追加�る�����ドロップ', // from v2.1.6 added 30.12.2015 'emptyFolderLTap' : '空�フォルダ\\Aアイテムを追加�る����をロングタップ', // from v2.1.6 added 30.12.2015 'quality' : '�質', // from v2.1.6 added 5.1.2016 'autoSync' : '自動更新', // from v2.1.6 added 10.1.2016 'moveUp' : '上�移動', // from v2.1.6 added 18.1.2016 'getLink' : 'リンクURLを�得', // from v2.1.7 added 9.2.2016 'selectedItems' : '�択アイテム ($1)', // from v2.1.7 added 2.19.2016 'folderId' : 'フォルダID', // from v2.1.10 added 3.25.2016 'offlineAccess' : 'オフライン アクセスを�能��る', // from v2.1.10 added 3.25.2016 'reAuth' : '��証�る', // from v2.1.10 added 3.25.2016 'nowLoading' : '読�込ん����...', // from v2.1.12 added 4.26.2016 'openMulti' : '複数ファイルオープン', // from v2.1.12 added 5.14.2016 'openMultiConfirm': '$1 個�ファイルを開��������。����ブラウザ�開����?', // from v2.1.12 added 5.14.2016 'emptySearch' : '検索対象�該当�るアイテム��り��ん。', // from v2.1.12 added 5.16.2016 'editingFile' : 'ファイルを編集中��。', // from v2.1.13 added 6.3.2016 'hasSelected' : '$1 個�アイテムを�択中��。', // from v2.1.13 added 6.3.2016 'hasClipboard' : '$1 個�アイテム�クリップボード�入�����。', // from v2.1.13 added 6.3.2016 'incSearchOnly' : '�次検索対象��在�ビュー����。', // from v2.1.13 added 6.30.2016 'reinstate' : '元�戻�', // from v2.1.15 added 3.8.2016 'complete' : '$1 完了', // from v2.1.15 added 21.8.2016 'contextmenu' : 'コンテキストメニュー', // from v2.1.15 added 9.9.2016 'pageTurning' : 'ページ��り', // from v2.1.15 added 10.9.2016 'volumeRoots' : 'ボリュームルート', // from v2.1.16 added 16.9.2016 'reset' : 'リセット', // from v2.1.16 added 1.10.2016 'bgcolor' : '背景色', // from v2.1.16 added 1.10.2016 'colorPicker' : 'カラーピッカー', // from v2.1.16 added 1.10.2016 '8pxgrid' : '8pxグリッド', // from v2.1.16 added 4.10.2016 'enabled' : '有効', // from v2.1.16 added 4.10.2016 'disabled' : '無効', // from v2.1.16 added 4.10.2016 'emptyIncSearch' : '�在�ビュー内�該当�るアイテム��り��ん。\\A[Enter]キー�検索対象を拡���。', // from v2.1.16 added 5.10.2016 'emptyLetSearch' : '�在�ビュー内�指定�れ�文字�始�るアイテム��り��ん。', // from v2.1.23 added 24.3.2017 'textLabel' : 'テキストラベル', // from v2.1.17 added 13.10.2016 'minsLeft' : '残り$1分', // from v2.1.17 added 13.11.2016 'openAsEncoding' : '�択��エンコーディング�開�直�', // from v2.1.19 added 2.12.2016 'saveAsEncoding' : '�択��エンコーディング��存', // from v2.1.19 added 2.12.2016 'selectFolder' : 'フォルダを�択', // from v2.1.20 added 13.12.2016 'firstLetterSearch': '一文字目�検索', // from v2.1.23 added 24.3.2017 'presets' : 'プリセット', // from v2.1.25 added 26.5.2017 'tooManyToTrash' : 'アイテム数�多��る����箱�入れられ��ん。', // from v2.1.25 added 9.6.2017 'TextArea' : 'テキストエリア', // from v2.1.25 added 14.6.2017 'folderToEmpty' : 'フォルダ"$1"を空����。', // from v2.1.25 added 22.6.2017 'filderIsEmpty' : 'フォルダ"$1"�アイテム��り��ん。', // from v2.1.25 added 22.6.2017 'preference' : '個人設定', // from v2.1.26 added 28.6.2017 'language' : '言語', // from v2.1.26 added 28.6.2017 'clearBrowserData': 'ブラウザ��存�れ�設定を�期化�る', // from v2.1.26 added 28.6.2017 'toolbarPref' : 'ツール�ー設定', // from v2.1.27 added 2.8.2017 'charsLeft' : '... 残り $1 文字', // from v2.1.29 added 30.8.2017 'linesLeft' : '... 残り $1 行', // from v2.1.52 added 16.1.2020 'sum' : '�計', // from v2.1.29 added 28.9.2017 'roughFileSize' : '大���ファイルサイズ', // from v2.1.30 added 2.11.2017 'autoFocusDialog' : 'マウスオー�ー�ダイアログ��素�フォーカス�る', // from v2.1.30 added 2.11.2017 'select' : '�択', // from v2.1.30 added 23.11.2017 'selectAction' : 'ファイル�択時�動作', // from v2.1.30 added 23.11.2017 'useStoredEditor' : '�回使用��エディター�開�', // from v2.1.30 added 23.11.2017 'selectinvert' : '�択アイテムを�転', // from v2.1.30 added 25.11.2017 'renameMultiple' : '�択�� $1 個�アイテムを $2 �よ��リ�ーム����?
          ã�“ã�®æ“�作ã�¯å�–り消ã�—ã�§ã��ã�¾ã�›ã‚“ï¼�', // from v2.1.31 added 4.12.2017 'batchRename' : '一括リãƒ�ーム', // from v2.1.31 added 8.12.2017 'plusNumber' : '+ 連番', // from v2.1.31 added 8.12.2017 'asPrefix' : '先頭ã�«è¿½åŠ ', // from v2.1.31 added 8.12.2017 'asSuffix' : '末尾ã�«è¿½åŠ ', // from v2.1.31 added 8.12.2017 'changeExtention' : 'æ‹¡å¼µå­�変更', // from v2.1.31 added 8.12.2017 'columnPref' : '列項目設定(リストビュー)', // from v2.1.32 added 6.2.2018 'reflectOnImmediate' : 'å…¨ã�¦ã�®å¤‰æ›´ã�¯ã€�ç›´ã�¡ã�«ã‚¢ãƒ¼ã‚«ã‚¤ãƒ–ã�«å��映ã�•れã�¾ã�™ã€‚', // from v2.1.33 added 2.3.2018 'reflectOnUnmount' : 'ã�“ã�®ãƒœãƒªãƒ¥ãƒ¼ãƒ ã‚’アンマウントã�™ã‚‹ã�¾ã�§ã€�変更ã�¯å��映ã�•れã�¾ã�›ã‚“。', // from v2.1.33 added 2.3.2018 'unmountChildren' : 'ã�“ã�®ãƒœãƒªãƒ¥ãƒ¼ãƒ ã�«ãƒžã‚¦ãƒ³ãƒˆã�•れã�¦ã�„る以下ã�®ãƒœãƒªãƒ¥ãƒ¼ãƒ ã‚‚アンマウントã�•れã�¾ã�™ã€‚アンマウントã�—ã�¾ã�™ã�‹ï¼Ÿ', // from v2.1.33 added 5.3.2018 'selectionInfo' : 'é�¸æŠžæƒ…å ±', // from v2.1.33 added 7.3.2018 'hashChecker' : 'ファイルãƒ�ッシュを表示ã�™ã‚‹ã‚¢ãƒ«ã‚´ãƒªã‚ºãƒ ', // from v2.1.33 added 10.3.2018 'infoItems' : '情報項目 (é�¸æŠžæƒ…報パãƒ�ル)', // from v2.1.38 added 28.3.2018 'pressAgainToExit': 'ã‚‚ã�†ä¸€åº¦æŠ¼ã�™ã�¨çµ‚了ã�—ã�¾ã�™ã€‚', // from v2.1.38 added 1.4.2018 'toolbar' : 'ツールãƒ�ー', // from v2.1.38 added 4.4.2018 'workspace' : 'ワークスペース', // from v2.1.38 added 4.4.2018 'dialog' : 'ダイアログ', // from v2.1.38 added 4.4.2018 'all' : 'ã�™ã�¹ã�¦', // from v2.1.38 added 4.4.2018 'iconSize' : 'アイコンサイズ (アイコンビュー)', // from v2.1.39 added 7.5.2018 'editorMaximized' : 'エディターウィンドウを最大化ã�—ã�¦é–‹ã��', // from v2.1.40 added 30.6.2018 'editorConvNoApi' : 'ç�¾åœ¨ API ã�«ã‚ˆã‚‹å¤‰æ�›ã�¯åˆ©ç”¨ã�§ã��ã�ªã�„ã�®ã�§ã€�Web サイトã�§å¤‰æ�›ã‚’行ã�£ã�¦ã��ã� ã�•ã�„。', //from v2.1.40 added 8.7.2018 'editorConvNeedUpload' : '変æ�›å¾Œã�«å¤‰æ�›ã�•れã�Ÿãƒ•ァイルをä¿�å­˜ã�™ã‚‹ã�«ã�¯ã€�アイテムã�® URL ã�¾ã�Ÿã�¯ãƒ€ã‚¦ãƒ³ãƒ­ãƒ¼ãƒ‰ã�—ã�Ÿãƒ•ァイルをアップロードã�™ã‚‹å¿…è¦�ã�Œã�‚りã�¾ã�™ã€‚', //from v2.1.40 added 8.7.2018 'convertOn' : '$1 ã�®ã‚µã‚¤ãƒˆä¸Šã�§å¤‰æ�›ã�™ã‚‹', // from v2.1.40 added 10.7.2018 'integrations' : 'çµ±å�ˆ', // from v2.1.40 added 11.7.2018 'integrationWith' : 'ã�“ã�® elFinder ã�¯æ¬¡ã�®å¤–部サービスã�Œçµ±å�ˆã�•れã�¦ã�„ã�¾ã�™ã€‚ã��れらã�®åˆ©ç”¨è¦�ç´„ã€�プライãƒ�シーãƒ�リシーã�ªã�©ã‚’ã�”確èª�ã�®ä¸Šã€�ã�”利用ã��ã� ã�•ã�„。', // from v2.1.40 added 11.7.2018 'showHidden' : 'é�žè¡¨ç¤ºã‚¢ã‚¤ãƒ†ãƒ ã‚’表示', // from v2.1.41 added 24.7.2018 'hideHidden' : 'é�žè¡¨ç¤ºã‚¢ã‚¤ãƒ†ãƒ ã‚’éš ã�™', // from v2.1.41 added 24.7.2018 'toggleHidden' : 'é�žè¡¨ç¤ºã‚¢ã‚¤ãƒ†ãƒ ã�®è¡¨ç¤º/é�žè¡¨ç¤º', // from v2.1.41 added 24.7.2018 'makefileTypes' : '「新ã�—ã�„ファイルã€�ã�§æœ‰åйã�«ã�™ã‚‹ãƒ•ァイルタイプ', // from v2.1.41 added 7.8.2018 'typeOfTextfile' : 'テキストファイルã�®ã‚¿ã‚¤ãƒ—', // from v2.1.41 added 7.8.2018 'add' : '追加', // from v2.1.41 added 7.8.2018 'theme' : 'テーマ', // from v2.1.43 added 19.10.2018 'default' : 'デフォルト', // from v2.1.43 added 19.10.2018 'description' : '説明', // from v2.1.43 added 19.10.2018 'website' : 'ウェブサイト', // from v2.1.43 added 19.10.2018 'author' : '作者', // from v2.1.43 added 19.10.2018 'email' : 'Email', // from v2.1.43 added 19.10.2018 'license' : 'ライセンス', // from v2.1.43 added 19.10.2018 'exportToSave' : 'ã�“ã�®ã‚¢ã‚¤ãƒ†ãƒ ã�¯ä¿�å­˜ã�§ã��ã�¾ã�›ã‚“。 編集内容を失ã‚�ã�ªã�„よã�†ã�«ã�™ã‚‹ã�«ã�¯ã€�PCã�«ã‚¨ã‚¯ã‚¹ãƒ�ートã�™ã‚‹å¿…è¦�ã�Œã�‚りã�¾ã�™ã€‚', // from v2.1.44 added 1.12.2018 'dblclickToSelect': 'ファイルをダブルクリックã�—ã�¦é�¸æŠžã�—ã�¾ã�™ã€‚', // from v2.1.47 added 22.1.2019 'useFullscreen' : 'フルスクリーンモードã�®åˆ©ç”¨', // from v2.1.47 added 19.2.2019 /********************************** mimetypes **********************************/ 'kindUnknown' : 'ä¸�明', 'kindRoot' : 'ボリュームルート', // from v2.1.16 added 16.10.2016 'kindFolder' : 'フォルダ', 'kindSelects' : '複数é�¸æŠž', // from v2.1.29 added 29.8.2017 'kindAlias' : '別å��', 'kindAliasBroken' : '宛先ä¸�明ã�®åˆ¥å��', // applications 'kindApp' : 'アプリケーション', 'kindPostscript' : 'Postscript ドキュメント', 'kindMsOffice' : 'Microsoft Office ドキュメント', 'kindMsWord' : 'Microsoft Word ドキュメント', 'kindMsExcel' : 'Microsoft Excel ドキュメント', 'kindMsPP' : 'Microsoft Powerpoint プレゼンテーション', 'kindOO' : 'Open Office ドキュメント', 'kindAppFlash' : 'Flash アプリケーション', 'kindPDF' : 'PDF', 'kindTorrent' : 'Bittorrent ファイル', 'kind7z' : '7z アーカイブ', 'kindTAR' : 'TAR アーカイブ', 'kindGZIP' : 'GZIP アーカイブ', 'kindBZIP' : 'BZIP アーカイブ', 'kindXZ' : 'XZ アーカイブ', 'kindZIP' : 'ZIP アーカイブ', 'kindRAR' : 'RAR アーカイブ', 'kindJAR' : 'Java JAR ファイル', 'kindTTF' : 'True Type フォント', 'kindOTF' : 'Open Type フォント', 'kindRPM' : 'RPM パッケージ', // fonts 'kindFont' : 'フォント', 'kindSFNT' : 'SFNT フォント', 'kindEOT' : 'Embedded Open Type フォント', 'kindWOFF' : 'Web Open Font Format フォント', 'kindWOFF2' : 'Web Open Font Format 2 フォント', // texts 'kindText' : 'Text ドキュメント', 'kindTextPlain' : 'プレインテキスト', 'kindPHP' : 'PHP ソース', 'kindCSS' : 'スタイルシート', 'kindHTML' : 'HTML ドキュメント', 'kindJS' : 'Javascript ソース', 'kindRTF' : 'Rich Text フォーマット', 'kindC' : 'C ソース', 'kindCHeader' : 'C ヘッダーソース', 'kindCPP' : 'C++ ソース', 'kindCPPHeader' : 'C++ ヘッダーソース', 'kindShell' : 'Unix shell スクリプト', 'kindPython' : 'Python ソース', 'kindJava' : 'Java ソース', 'kindRuby' : 'Ruby ソース', 'kindPerl' : 'Perl スクリプト', 'kindSQL' : 'SQL ソース', 'kindXML' : 'XML ドキュメント', 'kindAWK' : 'AWK ソース', 'kindCSV' : 'CSV', 'kindDOCBOOK' : 'Docbook XML ドキュメント', 'kindMarkdown' : 'Markdown テキスト', // added 20.7.2015 // images 'kindImage' : 'イメージ', 'kindBMP' : 'BMP イメージ', 'kindJPEG' : 'JPEG イメージ', 'kindGIF' : 'GIF イメージ', 'kindPNG' : 'PNG イメージ', 'kindTIFF' : 'TIFF イメージ', 'kindTGA' : 'TGA イメージ', 'kindPSD' : 'Adobe Photoshop イメージ', 'kindXBITMAP' : 'X bitmap イメージ', 'kindPXM' : 'Pixelmator イメージ', 'kindWEBP' : 'WEBP イメージ', 'kindSVG' : 'SVG イメージ', // media 'kindAudio' : 'オーディオメディア', 'kindAudioMPEG' : 'MPEG オーディオ', 'kindAudioMPEG4' : 'MPEG-4 オーディオ', 'kindAudioMIDI' : 'MIDI オーディオ', 'kindAudioOGG' : 'Ogg Vorbis オーディオ', 'kindAudioWAV' : 'WAV オーディオ', 'AudioPlaylist' : 'MP3 プレイリスト', 'kindVideo' : 'ビデオメディア', 'kindVideoDV' : 'DV ムービー', 'kindVideoMPEG' : 'MPEG ムービー', 'kindVideoMPEG4' : 'MPEG-4 ムービー', 'kindVideoAVI' : 'AVI ムービー', 'kindVideoMOV' : 'Quick Time ムービー', 'kindVideoWM' : 'Windows Media ムービー', 'kindVideoFlash' : 'Flash ムービー', 'kindVideoMKV' : 'Matroska ムービー', 'kindVideoOGG' : 'Ogg ムービー' } }; })); PK!–;G0ÜUÜU@file-manager-advanced/application/library/js/i18n/elfinder.el.jsnu„[µü¤/** * Greek translation * @author yawd , Romanos * @version 2014-12-19 */ (function(root, factory) { if (typeof define === 'function' && define.amd) { define(['elfinder'], factory); } else if (typeof exports !== 'undefined') { module.exports = factory(require('elfinder')); } else { factory(root.elFinder); } }(this, function(elFinder) { elFinder.prototype.i18.el = { translator : 'yawd <ingo@yawd.eu>', language : 'Ελληνικά', direction : 'ltr', dateFormat : 'd.m.Y H:i', fancyDateFormat : '$1 H:i', messages : { /********************************** errors **********************************/ 'error' : 'ΠÏ�όβλημα', 'errUnknown' : 'Άγνωστο Ï€Ï�όβλημα.', 'errUnknownCmd' : 'Άγνωστη εντολή.', 'errJqui' : 'Μη έγκυÏ�η Ï�Ï�θμιση του jQuery UI. Τα components "selectable", "draggable" και "droppable" Ï€Ï�έπει να πεÏ�ιληφοÏ�ν.', 'errNode' : 'το elFinder χÏ�ειάζεται να έχει δημιουÏ�γηθεί το DOM Element.', 'errURL' : 'Μη έγκυÏ�ες Ï�υθμίσεις για το elFinder! η επιλογή URL δεν έχει οÏ�ιστεί.', 'errAccess' : 'ΑπαγοÏ�εÏ�εται η Ï€Ï�όσβαση.', 'errConnect' : 'Δεν ήταν δυνατή η σÏ�νδεση με το backend.', 'errAbort' : 'Η σÏ�νδεση εγκαταλείφθηκε.', 'errTimeout' : 'Η σÏ�νδεση έληξε.', 'errNotFound' : 'Δε βÏ�έθηκε το backend.', 'errResponse' : 'Μή έγκυÏ�η απάντηση από το backend.', 'errConf' : 'Μη έγκυÏ�ες Ï�υθμίσεις για το backend.', 'errJSON' : 'Το PHP JSON module δεν είναι εγκατεστημένο.', 'errNoVolumes' : 'Δεν βÏ�έθηκαν αναγνώσιμα volumes.', 'errCmdParams' : 'Μη έγκυÏ�ες παÏ�άμετÏ�οι για την εντολή "$1".', 'errDataNotJSON' : 'Τα δεδομένα δεν είναι JSON.', 'errDataEmpty' : 'Τα δεδομένα είναι άδεια.', 'errCmdReq' : 'Το Backend request χÏ�ειάζεται όνομα εντολής.', 'errOpen' : 'Δεν ήταν δυνατό να ανοίξει το "$1".', 'errNotFolder' : 'Το αντικείμενο δεν είναι φάκελος.', 'errNotFile' : 'Το αντικείμενο δεν είναι αÏ�χείο.', 'errRead' : 'Δεν ήταν δυνατόν να διαβαστεί το "$1".', 'errWrite' : 'Δεν ήταν δυνατή η εγγÏ�αφή στο "$1".', 'errPerm' : 'ΑπαγοÏ�εÏ�εται η Ï€Ï�όσβαση.', 'errLocked' : '"$1" είναι κλειδωμένο και δεν μποÏ�εί να μετονομαστεί, μετακινηθεί ή διαγÏ�αφεί.', 'errExists' : 'Το αÏ�χείο με όνομα "$1" υπάÏ�χει ήδη.', 'errInvName' : 'Μη έγκυÏ�ο όνομα αÏ�χείου.', 'errFolderNotFound' : 'Ο φάκελος δε βÏ�έθηκε.', 'errFileNotFound' : 'Το αÏ�χείο δε βÏ�έθηκε.', 'errTrgFolderNotFound' : 'Ο φάκελος "$1" δε βÏ�έθηκε.', 'errPopup' : 'Το Ï€Ï�όγÏ�αμμα πλήγησης εμπόδισε το άνοιγμα αναδυόμενου παÏ�αθÏ�Ï�ου. Για ανοίξετε το αÏ�χείο ενεÏ�γοποιήστε το στις επιλογές του πεÏ�ιηγητή.', 'errMkdir' : 'Η δυμιουÏ�γία του φακέλου "$1" δεν ήταν δυνατή.', 'errMkfile' : 'Η δημιουÏ�γία του αÏ�χείου "$1" δεν ήταν δυνατή.', 'errRename' : 'Η μετονομασία του αÏ�χείου "$1" δεν ήταν δυνατή.', 'errCopyFrom' : 'Δεν επιτÏ�έπεται η αντιγÏ�αφή αÏ�χείων από το volume "$1".', 'errCopyTo' : 'Δεν επιτÏ�έπεται η αντιγÏ�αφή αÏ�χείων στο volume "$1".', 'errUpload' : 'ΠÏ�όβλημα κατά το upload.', 'errUploadFile' : 'Το αÏ�χείο "$1" δεν μπόÏ�εσε να γίνει upload.', 'errUploadNoFiles' : 'Δεν βÏ�έθηκαν αÏ�χεία για upload.', 'errUploadTotalSize' : 'Τα δεδομένα υπεÏ�βαίνουν το επιτÏ�επόμενο μέγιστο μέγεθος δεδομένων.', 'errUploadFileSize' : 'Το αÏ�χείο υπεÏ�βαίνει το επιτÏ�επόμενο μέγιστο μέγεθος.', 'errUploadMime' : 'Ο Ï„Ï�πος αÏ�χείου δεν επιτÏ�έπεται.', 'errUploadTransfer' : 'ΠÏ�όβλημα μεταφοÏ�άς για το "$1".', 'errNotReplace' : 'Object "$1" already exists at this location and can not be replaced by object with another type.', 'errReplace' : 'Unable to replace "$1".', 'errSave' : 'Το "$1" δεν ήταν δυνατόν να αποθηκευτεί.', 'errCopy' : 'Δεν ήταν δυνατή η αντιγÏ�αφή του "$1".', 'errMove' : 'Δεν ήταν δυνατή η μετακίνηση του "$1".', 'errCopyInItself' : 'Δεν είναι δυνατή η αντιγÏ�αφή του "$1" στον εαυτό του.', 'errRm' : 'Δεν ήταν δυνατή η αφαίÏ�εση του "$1".', 'errRmSrc' : 'Unable remove source file(s).', 'errExtract' : 'Δεν ήταν δυνατή η ανάγνωση των αÏ�χείων από "$1".', 'errArchive' : 'Δεν ήταν δυνατή η δημιουÏ�γία του αÏ�χείου.', 'errArcType' : 'Ο Ï„Ï�πος αÏ�χείου δεν υποστηÏ�ίζεται.', 'errNoArchive' : 'Το αÏ�χείο δεν είναι έγκυÏ�ο ή δεν υποστηÏ�ίζεται ο Ï„Ï�πος του.', 'errCmdNoSupport' : 'Το backend δεν υποστηÏ�ίζει αυτή την εντολή.', 'errReplByChild' : 'Ο φάκελος “$1â€� δεν μποÏ�εί να αντικατασταθεί από οποιοδήποτε αÏ�χείο πεÏ�ιέχεται σε αυτόν.', 'errArcSymlinks' : 'Για λόγους ασφαλείας δεν είναι δυνατόν να διαβαστοÏ�ν αÏ�χεία που πεÏ�ιέχουν symlinks orη αÏ�χεία με μη επιτÏ�επτά ονόματα.', // edited 24.06.2012 'errArcMaxSize' : 'Το μέγεθος του αÏ�χείου υπεÏ�βαίνει το μέγιστο επιτÏ�επτό ÏŒÏ�ιο.', 'errResize' : 'Δεν ήταν δυνατή η αλλαγή μεγέθους του "$1".', 'errResizeDegree' : 'Invalid rotate degree.', 'errResizeRotate' : 'Unable to rotate image.', 'errResizeSize' : 'Invalid image size.', 'errResizeNoChange' : 'Image size not changed.', 'errUsupportType' : 'Ο Ï„Ï�πος αÏ�χείου δεν υποστηÏ�ίζεται.', 'errNotUTF8Content' : 'Το αÏ�χείο "$1" δεν είναι UTF-8 και δεν μποÏ�εί να επεξεÏ�γασθεί.', // added 9.11.2011 'errNetMount' : 'Δεν ήταν δυνατή η φόÏ�τωση του "$1".', // added 17.04.2012 'errNetMountNoDriver' : 'Μη υποστηÏ�ιζόμενο Ï€Ï�ωτόκολο.', // added 17.04.2012 'errNetMountFailed' : 'Η φόÏ�τωση απέτυχε.', // added 17.04.2012 'errNetMountHostReq' : 'Απαιτείται host εξυπηÏ�ετητής.', // added 18.04.2012 'errSessionExpires' : 'Your session has expired due to inactivity.', 'errCreatingTempDir' : 'Unable to create temporary directory: "$1"', 'errFtpDownloadFile' : 'Unable to download file from FTP: "$1"', 'errFtpUploadFile' : 'Unable to upload file to FTP: "$1"', 'errFtpMkdir' : 'Unable to create remote directory on FTP: "$1"', 'errArchiveExec' : 'Error while archiving files: "$1"', 'errExtractExec' : 'Error while extracting files: "$1"', /******************************* commands names ********************************/ 'cmdarchive' : 'ΔημιουÏ�γία archive αÏ�χείου', 'cmdback' : 'Πίσω', 'cmdcopy' : 'ΑντιγÏ�αφή', 'cmdcut' : 'ΑφαίÏ�εση', 'cmddownload' : 'ΜεταφόÏ�τωση', 'cmdduplicate' : 'ΑντίγÏ�αφο', 'cmdedit' : 'ΕπεξεÏ�γασία αÏ�χείου', 'cmdextract' : 'Εξαγωγή αÏ�χείων από archive', 'cmdforward' : 'ΠÏ�οώθηση', 'cmdgetfile' : 'Επιλέξτε αÏ�χεία', 'cmdhelp' : 'Σχετικά με αυτό το λογισμικό', 'cmdhome' : 'Home', 'cmdinfo' : 'ΠληÏ�οφοÏ�ίες', 'cmdmkdir' : 'Î�έος φάκελος', 'cmdmkfile' : 'Î�έος αÏ�χείο', 'cmdopen' : 'Άνοιγμα', 'cmdpaste' : 'Επικόλληση', 'cmdquicklook' : 'ΠÏ�οεπισκόπηση', 'cmdreload' : 'Ανανέωση', 'cmdrename' : 'Μετονομασία', 'cmdrm' : 'ΔιαγÏ�αφή', 'cmdsearch' : 'ΈυÏ�εση αÏ�χείων', 'cmdup' : 'Μετάβαση στο γονικό φάκελο', 'cmdupload' : 'Ανέβασμα αÏ�χείων', 'cmdview' : 'ΠÏ�οβολή', 'cmdresize' : 'Αλλαγή μεγέθους εικόνας', 'cmdsort' : 'Ταξινόμηση', 'cmdnetmount' : 'Mount network volume', /*********************************** buttons ***********************************/ 'btnClose' : 'Κλείσιμο', 'btnSave' : 'Αποθήκευση', 'btnRm' : 'ΑφαίÏ�εση', 'btnApply' : 'ΕφαÏ�μογή', 'btnCancel' : 'ΑκÏ�Ï�ωση', 'btnNo' : 'Όχι', 'btnYes' : 'Î�αι', 'btnDiscard': 'Discard changes', 'btnMount' : 'Mount', /******************************** notifications ********************************/ 'ntfopen' : 'Άνοιγμα φακέλου', 'ntffile' : 'Άνοιγμα αÏ�χείου', 'ntfreload' : 'Ανανέωση πεÏ�ιεχομένων φακέλου', 'ntfmkdir' : 'ΔημιουÏ�γία φακέλου', 'ntfmkfile' : 'ΔημιουÏ�γία αÏ�χείων', 'ntfrm' : 'ΔιαγÏ�αφή αÏ�χείων', 'ntfcopy' : 'ΑντιγÏ�αφή αÏ�χείων', 'ntfmove' : 'Μετακίνηση αÏ�χείων', 'ntfprepare' : 'ΠÏ�οετοιμασία αντιγÏ�αφής αÏ�χείων', 'ntfrename' : 'Μετονομασία αÏ�χείων', 'ntfupload' : 'Ανέβασμα αÏ�χείων', 'ntfdownload' : 'ΜεταφόÏ�τωση αÏ�χείων', 'ntfsave' : 'Αποθήκευση αÏ�χείων', 'ntfarchive' : 'ΔημιουÏ�γία αÏ�χείου', 'ntfextract' : 'Εξαγωγή αÏ�χείων από το archive', 'ntfsearch' : 'Αναζήτηση αÏ�χείων', 'ntfresize' : 'Resizing images', 'ntfsmth' : 'ΣÏ�στημα απασχολημένο>_<', 'ntfloadimg' : 'ΦόÏ�τωση εικόνας', 'ntfnetmount' : 'ΦόÏ�τωση δικτυακοÏ� δίσκου', // added 18.04.2012 'ntfdim' : 'Acquiring image dimension', /************************************ dates **********************************/ 'dateUnknown' : 'άγνωστο', 'Today' : 'ΣήμεÏ�α', 'Yesterday' : 'Χθές', 'msJan' : 'Ιαν', 'msFeb' : 'Φεβ', 'msMar' : 'ΜαÏ�', 'msApr' : 'ΑπÏ�', 'msMay' : 'Μαϊ', 'msJun' : 'Ιουν', 'msJul' : 'Ιουλ', 'msAug' : 'Αυγ', 'msSep' : 'Σεπ', 'msOct' : 'Οκτ', 'msNov' : 'Î�οεμ', 'msDec' : 'Δεκ', 'January' : 'ΙανουάÏ�ιος', 'February' : 'ΦεβÏ�ουάÏ�ιος', 'March' : 'ΜάÏ�τιος', 'April' : 'ΑπÏ�ίλιος', 'May' : 'Μάϊος', 'June' : 'ΙοÏ�νιος', 'July' : 'ΙοÏ�λιος', 'August' : 'ΑÏ�γουστος', 'September' : 'ΣεπτέμβÏ�ιος', 'October' : 'ΟκτώβÏ�ιος', 'November' : 'Î�οέμβÏ�ιος', 'December' : 'ΔεκέμβÏ�ιος', 'Sunday' : 'ΚυÏ�ιακή', 'Monday' : 'ΔευτέÏ�α', 'Tuesday' : 'ΤÏ�ίτη', 'Wednesday' : 'ΤετάÏ�τη', 'Thursday' : 'Πέμπτη', 'Friday' : 'ΠαÏ�ασκευή', 'Saturday' : 'Σάββατο', 'Sun' : 'ΚυÏ�', 'Mon' : 'Δευ', 'Tue' : 'ΤÏ�', 'Wed' : 'Τετ', 'Thu' : 'Πεμ', 'Fri' : 'ΠαÏ�', 'Sat' : 'Σαβ', /******************************** sort variants ********************************/ 'sortname' : 'κατά όνομα', 'sortkind' : 'κατά είδος', 'sortsize' : 'κατά μέγεθος', 'sortdate' : 'κατά ημεÏ�ομηνία', 'sortFoldersFirst' : 'ΠÏ�ώτα οι φάκελοι', // added 22.06.2012 /********************************** messages **********************************/ 'confirmReq' : 'Απαιτείται επιβεβαίωση', 'confirmRm' : 'Είστε σίγουÏ�οι πως θέλετε να διαγÏ�άψετε τα αÏ�χεία?
          Οι αλλαγές θα είναι μόνιμες!', 'confirmRepl' : 'Αντικατάσταση του παλιοÏ� αÏ�χείου με το νέο?', 'apllyAll' : 'ΕφαÏ�μογή σε όλα', 'name' : 'Όνομα', 'size' : 'Μέγεθος', 'perms' : 'Δικαιώματα', 'modify' : 'ΤÏ�οποποιήθηκε', 'kind' : 'Είδος', 'read' : 'ανάγνωση', 'write' : 'εγγÏ�αφή', 'noaccess' : 'δεν υπάÏ�χει Ï€Ï�όσβαση', 'and' : 'και', 'unknown' : 'άγνωστο', 'selectall' : 'Επιλογή όλων', 'selectfiles' : 'Επιλογή αÏ�χείων', 'selectffile' : 'Επιλογή Ï€Ï�ώτου αÏ�χείου', 'selectlfile' : 'Επιλογή τελευταίου αÏ�χείου', 'viewlist' : 'ΠÏ�οβολή λίστας', 'viewicons' : 'ΠÏ�οβολή εικονιδίων', 'places' : 'Τοποθεσίες', 'calc' : 'Υπολογισμός', 'path' : 'ΔιαδÏ�ομή', 'aliasfor' : 'Ψευδώνυμο για', 'locked' : 'Κλειδωμένο', 'dim' : 'Διαστάσεις', 'files' : 'ΑÏ�χεία', 'folders' : 'Φάκελοι', 'items' : 'Αντικείμενα', 'yes' : 'ναι', 'no' : 'όχι', 'link' : 'ΣÏ�νδεσμος', 'searcresult' : 'Αποτελέσματα αναζήτησης', 'selected' : 'επιλεγμένα αντικείμενα', 'about' : 'Σχετικά', 'shortcuts' : 'ΣυντομεÏ�σεις', 'help' : 'Βοήθεια', 'webfm' : 'εÏ�γαλείο διαχείÏ�ισης αÏ�χείων από το web', 'ver' : 'Έκδοση', 'protocolver' : 'έκδοση Ï€Ï�ωτοκόλλου', 'homepage' : 'Σελίδα του project', 'docs' : 'ΤεκμηÏ�ίωση (documentation)', 'github' : 'Κάντε μας fork στο Github', 'twitter' : 'Ακολουθήστε μας στο twitter', 'facebook' : 'Î’Ï�είτε μας στο facebook', 'team' : 'Ομάδα', 'chiefdev' : 'κÏ�Ï�ιος Ï€Ï�ογÏ�αμματιστής', 'developer' : 'Ï€Ï�ογÏ�αμματιστής', 'contributor' : 'συνεισφοÏ�ά', 'maintainer' : 'συντηÏ�ητής', 'translator' : 'μεταφÏ�αστής', 'icons' : 'Εικονίδια', 'dontforget' : 'και μην ξεχάσεις την πετσέτα σου!', 'shortcutsof' : 'Οι συντομεÏ�σεις είναι απενεÏ�γοποιημένες', 'dropFiles' : 'Κάντε drop τα αÏ�χεία εδώ', 'or' : 'ή', 'selectForUpload' : 'Επιλογή αÏ�χείων για ανέβασμα', 'moveFiles' : 'Μετακίνηση αÏ�χείων', 'copyFiles' : 'ΑντιγÏ�αφή αÏ�χείων', 'rmFromPlaces' : 'ΑντιγÏ�αφή από τοποθεσίες', 'aspectRatio' : 'Αναλογία διαστάσεων', 'scale' : 'Κλίμακα', 'width' : 'Πλάτος', 'height' : 'Ύψος', 'resize' : 'Αλλαγή μεγέθους', 'crop' : 'Crop', 'rotate' : 'ΠεÏ�ιστÏ�οφή', 'rotate-cw' : 'ΠεÏ�ιστÏ�οφή κατά 90 βαθμοÏ�Ï‚ CW', 'rotate-ccw' : 'ΠεÏ�ιστÏ�οφή κατά 90 βαθμοÏ�Ï‚ CCW', 'degree' : 'Βαθμός', 'netMountDialogTitle' : 'ΦοÏ�τώστε δικτυακό δίσκο', // added 18.04.2012 'protocol' : 'ΠÏ�ωτόκολλο', // added 18.04.2012 'host' : 'Host', // added 18.04.2012 'port' : 'Port', // added 18.04.2012 'user' : 'ΧÏ�ήστης', // added 18.04.2012 'pass' : 'Κωδικός', // added 18.04.2012 /********************************** mimetypes **********************************/ 'kindUnknown' : 'Άγνωστο', 'kindFolder' : 'Φάκελος', 'kindAlias' : 'Ψευδώνυμο (alias)', 'kindAliasBroken' : 'Μη έγκυÏ�ο ψευδώνυμο', // applications 'kindApp' : 'ΕφαÏ�μογή', 'kindPostscript' : 'ΈγγÏ�αφο Postscript', 'kindMsOffice' : 'ΈγγÏ�αφο Microsoft Office', 'kindMsWord' : 'ΈγγÏ�αφο Microsoft Word', 'kindMsExcel' : 'ΈγγÏ�αφο Microsoft Excel', 'kindMsPP' : 'ΠαÏ�ουσίαση Microsoft Powerpoint', 'kindOO' : 'ΈγγÏ�αφο Open Office', 'kindAppFlash' : 'ΕφαÏ�μογή Flash', 'kindPDF' : 'Portable Document Format (PDF)', 'kindTorrent' : 'ΑÏ�χείο Bittorrent', 'kind7z' : 'ΑÏ�χείο 7z', 'kindTAR' : 'ΑÏ�χείο TAR', 'kindGZIP' : 'ΑÏ�χείο GZIP', 'kindBZIP' : 'ΑÏ�χείο BZIP', 'kindXZ' : 'ΑÏ�χείο XZ', 'kindZIP' : 'ΑÏ�χείο ZIP', 'kindRAR' : 'ΑÏ�χείο RAR', 'kindJAR' : 'ΑÏ�χείο Java JAR', 'kindTTF' : 'ΓÏ�αμματοσειÏ�ά True Type', 'kindOTF' : 'ΓÏ�αμματοσειÏ�ά Open Type', 'kindRPM' : 'Πακέτο RPM', // fonts 'kindFont' : 'ΓÏ�αμματοσειÏ�ά', 'kindSFNT' : 'ΓÏ�αμματοσειÏ�ά SFNT', 'kindEOT' : 'ΓÏ�αμματοσειÏ�ά Embedded Open Type', 'kindWOFF' : 'ΓÏ�αμματοσειÏ�ά Web Open Font Format', 'kindWOFF2' : 'ΓÏ�αμματοσειÏ�ά Web Open Font Format 2', // texts 'kindText' : 'ΈγγÏ�αφο κειμένου', 'kindTextPlain' : 'Απλό κείμενο', 'kindPHP' : 'Κώδικας PHP', 'kindCSS' : 'Cascading style sheet', 'kindHTML' : 'ΈγγÏ�αφο HTML', 'kindJS' : 'Κώδικας Javascript', 'kindRTF' : 'Rich Text Format', 'kindC' : 'Κώδικας C', 'kindCHeader' : 'Κώδικας κεφαλίδας C', 'kindCPP' : 'Κώδικας C++', 'kindCPPHeader' : 'Κώδικας κεφαλίδας C++', 'kindShell' : 'Unix shell script', 'kindPython' : 'Κώδικας Python', 'kindJava' : 'Κώδικας Java', 'kindRuby' : 'Κώδικας Ruby', 'kindPerl' : 'Perl script', 'kindSQL' : 'Κώδικας SQL', 'kindXML' : 'ΈγγÏ�αφο XML', 'kindAWK' : 'Κώδικας AWK', 'kindCSV' : 'Τιμές χωÏ�ισμένες με κόμμα', 'kindDOCBOOK' : 'ΈγγÏ�αφο Docbook XML', // images 'kindImage' : 'Εικόνα', 'kindBMP' : 'Εικόνα BMP', 'kindJPEG' : 'Εικόνα JPEG', 'kindGIF' : 'Εικόνα GIF', 'kindPNG' : 'Εικόνα PNG', 'kindTIFF' : 'Εικόνα TIFF', 'kindTGA' : 'Εικόνα TGA', 'kindPSD' : 'Εικόνα Adobe Photoshop', 'kindXBITMAP' : 'Εικόνα X bitmap', 'kindPXM' : 'Εικόνα Pixelmator', // media 'kindAudio' : 'ΑÏ�χεία ήχου', 'kindAudioMPEG' : 'Ήχος MPEG', 'kindAudioMPEG4' : 'Εικόνα MPEG-4', 'kindAudioMIDI' : 'Εικόνα MIDI', 'kindAudioOGG' : 'Εικόνα Ogg Vorbis', 'kindAudioWAV' : 'Εικόνα WAV', 'AudioPlaylist' : 'MP3 playlist', 'kindVideo' : 'ΑÏ�χεία media', 'kindVideoDV' : 'Ταινία DV', 'kindVideoMPEG' : 'Ταινία MPEG', 'kindVideoMPEG4' : 'Ταινία MPEG-4', 'kindVideoAVI' : 'Ταινία AVI', 'kindVideoMOV' : 'Ταινία Quick Time', 'kindVideoWM' : 'Ταινία Windows Media', 'kindVideoFlash' : 'Ταινία flash', 'kindVideoMKV' : 'Ταινία matroska', 'kindVideoOGG' : 'Ταινία ogg' } }; })); PK!R³h£ËQËQ@file-manager-advanced/application/library/js/i18n/elfinder.hr.jsnu„[µü¤/** * hr translation * @version 2016-04-18 */ (function(root, factory) { if (typeof define === 'function' && define.amd) { define(['elfinder'], factory); } else if (typeof exports !== 'undefined') { module.exports = factory(require('elfinder')); } else { factory(root.elFinder); } }(this, function(elFinder) { elFinder.prototype.i18.hr = { translator : '', language : 'Croatian', direction : 'ltr', dateFormat : 'd.m.Y. H:i', // Mar 13, 2012 05:27 PM fancyDateFormat : '$1 H:i', // will produce smth like: Today 12:25 PM messages : { /********************************** errors **********************************/ 'error' : 'GreÅ¡ka', 'errUnknown' : 'Nepoznata greÅ¡ka.', 'errUnknownCmd' : 'Nepoznata naredba.', 'errJqui' : 'Kriva jQuery UI konfiguracija. Selectable, draggable, i droppable komponente moraju biti ukljuÄ�ene.', 'errNode' : 'elFinder zahtjeva DOM element da bi bio stvoren.', 'errURL' : 'Krivo konfiguriran elFinder. Opcija URL nije postavljena.', 'errAccess' : 'Zabranjen pristup.', 'errConnect' : 'Nije moguće spajanje na server.', 'errAbort' : 'Prekinuta veza.', 'errTimeout' : 'Veza je istekla.', 'errNotFound' : 'Server nije pronaÄ‘en.', 'errResponse' : 'Krivi odgovor servera.', 'errConf' : 'Krivo konfiguriran server', 'errJSON' : 'Nije instaliran PHP JSON modul.', 'errNoVolumes' : 'Disk nije dostupan.', 'errCmdParams' : 'Krivi parametri za naredbu "$1".', 'errDataNotJSON' : 'Podaci nisu tipa JSON.', 'errDataEmpty' : 'Nema podataka.', 'errCmdReq' : 'Backend request requires command name.', 'errOpen' : 'Ne mogu otvoriti "$1".', 'errNotFolder' : 'Objekt nije mapa.', 'errNotFile' : 'Objekt nije dokument.', 'errRead' : 'Ne mogu proÄ�itati "$1".', 'errWrite' : 'Ne mogu pisati u "$1".', 'errPerm' : 'Pristup zabranjen', 'errLocked' : '"$1" je zakljuÄ�an i ne može biti preimenovan, premjeÅ¡ten ili obrisan.', 'errExists' : 'Dokument s imenom "$1" već postoji.', 'errInvName' : 'Krivo ime dokumenta', 'errFolderNotFound' : 'Mapa nije pronaÄ‘ena', 'errFileNotFound' : 'Dokument nije pronaÄ‘en', 'errTrgFolderNotFound' : 'Mapa "$1" nije pronaÄ‘ena', 'errPopup' : 'Browser prevented opening popup window. To open file enable it in browser options.', 'errMkdir' : 'Ne mogu napraviti mapu "$1".', 'errMkfile' : 'Ne mogu napraviti dokument "$1".', 'errRename' : 'Ne mogu preimenovati "$1".', 'errCopyFrom' : 'Kopiranje s diska "$1" nije dozvoljeno.', 'errCopyTo' : 'Kopiranje na disk "$1" nije dozvoljeno.', 'errMkOutLink' : 'Unable to create a link to outside the volume root.', // from v2.1 added 03.10.2015 'errUpload' : 'GreÅ¡ka pri prebacivanju dokumenta na server.', // old name - errUploadCommon 'errUploadFile' : 'Ne mogu prebaciti "$1" na server', // old name - errUpload 'errUploadNoFiles' : 'Nema dokumenata za prebacivanje na server', 'errUploadTotalSize' : 'Dokumenti prelaze maksimalnu dopuÅ¡tenu veliÄ�inu.', // old name - errMaxSize 'errUploadFileSize' : 'Dokument je prevelik.', // old name - errFileMaxSize 'errUploadMime' : 'Ovaj tip dokumenta nije dopuÅ¡ten.', 'errUploadTransfer' : '"$1" greÅ¡ka pri prebacivanju', 'errUploadTemp' : 'Ne mogu napraviti privremeni dokument za prijenos na server', // from v2.1 added 26.09.2015 'errNotReplace' : 'Object "$1" already exists at this location and can not be replaced by object with another type.', // new 'errReplace' : 'Ne mogu zamijeniti "$1".', 'errSave' : 'Ne mogu spremiti "$1".', 'errCopy' : 'Ne mogu kopirati "$1".', 'errMove' : 'Ne mogu premjestiti "$1".', 'errCopyInItself' : 'Ne mogu kopirati "$1" na isto mjesto.', 'errRm' : 'Ne mogu ukloniti "$1".', 'errRmSrc' : 'Ne mogu ukloniti izvorni kod.', 'errExtract' : 'Unable to extract files from "$1".', 'errArchive' : 'Unable to create archive.', 'errArcType' : 'Unsupported archive type.', 'errNoArchive' : 'File is not archive or has unsupported archive type.', 'errCmdNoSupport' : 'Backend does not support this command.', 'errReplByChild' : 'The folder "$1" can\'t be replaced by an item it contains.', 'errArcSymlinks' : 'For security reason denied to unpack archives contains symlinks or files with not allowed names.', // edited 24.06.2012 'errArcMaxSize' : 'Archive files exceeds maximum allowed size.', 'errResize' : 'Unable to resize "$1".', 'errResizeDegree' : 'Invalid rotate degree.', // added 7.3.2013 'errResizeRotate' : 'Unable to rotate image.', // added 7.3.2013 'errResizeSize' : 'Invalid image size.', // added 7.3.2013 'errResizeNoChange' : 'Image size not changed.', // added 7.3.2013 'errUsupportType' : 'Unsupported file type.', 'errNotUTF8Content' : 'File "$1" is not in UTF-8 and cannot be edited.', // added 9.11.2011 'errNetMount' : 'Unable to mount "$1".', // added 17.04.2012 'errNetMountNoDriver' : 'Unsupported protocol.', // added 17.04.2012 'errNetMountFailed' : 'Mount failed.', // added 17.04.2012 'errNetMountHostReq' : 'Host required.', // added 18.04.2012 'errSessionExpires' : 'Your session has expired due to inactivity.', 'errCreatingTempDir' : 'Unable to create temporary directory: "$1"', 'errFtpDownloadFile' : 'Unable to download file from FTP: "$1"', 'errFtpUploadFile' : 'Unable to upload file to FTP: "$1"', 'errFtpMkdir' : 'Unable to create remote directory on FTP: "$1"', 'errArchiveExec' : 'Error while archiving files: "$1"', 'errExtractExec' : 'Error while extracting files: "$1"', 'errNetUnMount' : 'Unable to unmount', // from v2.1 added 30.04.2012 'errConvUTF8' : 'Not convertible to UTF-8', // from v2.1 added 08.04.2014 'errFolderUpload' : 'Try Google Chrome, If you\'d like to upload the folder.', // from v2.1 added 26.6.2015 'errSearchTimeout' : 'Timed out while searching "$1". Search result is partial.', // from v2.1 added 12.1.2016 'errReauthRequire' : 'Re-authorization is required.', // from v2.1.10 added 3.24.2016 /******************************* commands names ********************************/ 'cmdarchive' : 'Arhiviraj', 'cmdback' : 'Nazad', 'cmdcopy' : 'Kopiraj', 'cmdcut' : 'Izreži', 'cmddownload' : 'Preuzmi', 'cmdduplicate' : 'Dupliciraj', 'cmdedit' : 'Uredi dokument', 'cmdextract' : 'Raspakiraj arhivu', 'cmdforward' : 'Naprijed', 'cmdgetfile' : 'Odaberi dokumente', 'cmdhelp' : 'O programu', 'cmdhome' : 'PoÄ�etak', 'cmdinfo' : 'Info', 'cmdmkdir' : 'Nova mapa', 'cmdmkdirin' : 'U novu mapu', // from v2.1.7 added 19.2.2016 'cmdmkfile' : 'Nova файл', 'cmdopen' : 'Otvori', 'cmdpaste' : 'Zalijepi', 'cmdquicklook' : 'Pregled', 'cmdreload' : 'Ponovo uÄ�itaj', 'cmdrename' : 'Preimenuj', 'cmdrm' : 'ObriÅ¡i', 'cmdsearch' : 'PronaÄ‘i', 'cmdup' : 'Roditeljska mapa', 'cmdupload' : 'Prebaci dokumente na server', 'cmdview' : 'Pregledaj', 'cmdresize' : 'Promjeni veliÄ�inu i rotiraj', 'cmdsort' : 'Sortiraj', 'cmdnetmount' : 'Spoji se na mrežni disk', // added 18.04.2012 'cmdnetunmount': 'Odspoji disk', // from v2.1 added 30.04.2012 'cmdplaces' : 'To Places', // added 28.12.2014 'cmdchmod' : 'Change mode', // from v2.1 added 20.6.2015 'cmdopendir' : 'Otvori mapu', // from v2.1 added 13.1.2016 /*********************************** buttons ***********************************/ 'btnClose' : 'Zatvori', 'btnSave' : 'Spremi', 'btnRm' : 'Ukloni', 'btnApply' : 'Primjeni', 'btnCancel' : 'Odustani', 'btnNo' : 'Ne', 'btnYes' : 'Da', 'btnDiscard': 'Discard changes', 'btnMount' : 'Mount', // added 18.04.2012 'btnApprove': 'Goto $1 & approve', // from v2.1 added 26.04.2012 'btnUnmount': 'Unmount', // from v2.1 added 30.04.2012 'btnConv' : 'Convert', // from v2.1 added 08.04.2014 'btnCwd' : 'Here', // from v2.1 added 22.5.2015 'btnVolume' : 'Volume', // from v2.1 added 22.5.2015 'btnAll' : 'All', // from v2.1 added 22.5.2015 'btnMime' : 'MIME Type', // from v2.1 added 22.5.2015 'btnFileName':'Filename', // from v2.1 added 22.5.2015 'btnSaveClose': 'Spremi i zatvori', // from v2.1 added 12.6.2015 'btnBackup' : 'Backup', // fromv2.1 added 28.11.2015 /******************************** notifications ********************************/ 'ntfopen' : 'Otvori mapu', 'ntffile' : 'Otvori dokument', 'ntfreload' : 'Ponovo uÄ�itaj sadržaj mape', 'ntfmkdir' : 'Radim mapu', 'ntfmkfile' : 'Radim dokumente', 'ntfrm' : 'BriÅ¡em dokumente', 'ntfcopy' : 'Kopiram dokumente', 'ntfmove' : 'MiÄ�em dokumente', 'ntfprepare' : 'Priprema za kopiranje dokumenata', 'ntfrename' : 'Preimenuj dokumente', 'ntfupload' : 'Pohranjujem dokumente na server', 'ntfdownload' : 'Preuzimam dokumente', 'ntfsave' : 'Spremi dokumente', 'ntfarchive' : 'Radim arhivu', 'ntfextract' : 'Extracting files from archive', 'ntfsearch' : 'Tražim dokumente', 'ntfresize' : 'Resizing images', 'ntfsmth' : 'Doing something', 'ntfloadimg' : 'UÄ�itavam sliku', 'ntfnetmount' : 'Mounting network volume', // added 18.04.2012 'ntfnetunmount': 'Unmounting network volume', // from v2.1 added 30.04.2012 'ntfdim' : 'Acquiring image dimension', // added 20.05.2013 'ntfreaddir' : 'Reading folder infomation', // from v2.1 added 01.07.2013 'ntfurl' : 'Getting URL of link', // from v2.1 added 11.03.2014 'ntfchmod' : 'Changing file mode', // from v2.1 added 20.6.2015 'ntfpreupload': 'Verifying upload file name', // from v2.1 added 31.11.2015 'ntfzipdl' : 'Creating a file for download', // from v2.1.7 added 23.1.2016 /************************************ dates **********************************/ 'dateUnknown' : 'nepoznato', 'Today' : 'Danas', 'Yesterday' : 'JuÄ�er', 'msJan' : 'Sij', 'msFeb' : 'Vel', 'msMar' : 'Ožu', 'msApr' : 'Tra', 'msMay' : 'Svi', 'msJun' : 'Lip', 'msJul' : 'Srp', 'msAug' : 'Kol', 'msSep' : 'Ruj', 'msOct' : 'Lis', 'msNov' : 'Stu', 'msDec' : 'Pro', 'January' : 'SijeÄ�anj', 'February' : 'VeljaÄ�a', 'March' : 'Ožujak', 'April' : 'Travanj', 'May' : 'Svibanj', 'June' : 'Lipanj', 'July' : 'Srpanj', 'August' : 'Kolovoz', 'September' : 'Rujan', 'October' : 'Listopad', 'November' : 'Studeni', 'December' : 'Prosinac', 'Sunday' : 'Nedjelja', 'Monday' : 'Ponedjeljak', 'Tuesday' : 'Utorak', 'Wednesday' : 'Srijeda', 'Thursday' : 'ÄŒetvrtak', 'Friday' : 'Petak', 'Saturday' : 'Subota', 'Sun' : 'Ned', 'Mon' : 'Pon', 'Tue' : 'Uto', 'Wed' : 'Sri', 'Thu' : 'ÄŒet', 'Fri' : 'Pet', 'Sat' : 'Sub', /******************************** sort variants ********************************/ 'sortname' : 'po imenu', 'sortkind' : 'po tipu', 'sortsize' : 'po veliÄ�ini', 'sortdate' : 'po datumu', 'sortFoldersFirst' : 'Prvo mape', /********************************** new items **********************************/ 'untitled file.txt' : 'NoviDokument.txt', // added 10.11.2015 'untitled folder' : 'NovaMapa', // added 10.11.2015 'Archive' : 'NovaArhiva', // from v2.1 added 10.11.2015 /********************************** messages **********************************/ 'confirmReq' : 'Potvrda', 'confirmRm' : 'Jeste li sigurni?', 'confirmRepl' : 'Zamijeni stare dokumente novima?', 'confirmConvUTF8' : 'Not in UTF-8
          Convert to UTF-8?
          Contents become UTF-8 by saving after conversion.', // from v2.1 added 08.04.2014 'confirmNotSave' : 'It has been modified.
          Losing work if you do not save changes.', // from v2.1 added 15.7.2015 'apllyAll' : 'Primjeni na sve ', 'name' : 'Ime', 'size' : 'VeliÄ�ina', 'perms' : 'Dozvole', 'modify' : 'Modificiran', 'kind' : 'Tip', 'read' : 'Ä�itanje', 'write' : 'pisanje', 'noaccess' : 'bez pristupa', 'and' : 'i', 'unknown' : 'nepoznato', 'selectall' : 'Odaberi sve', 'selectfiles' : 'Odaberi dokument(e)', 'selectffile' : 'Odaberi prvi dokument', 'selectlfile' : 'Odaberi zadnji dokument', 'viewlist' : 'Lista', 'viewicons' : 'Ikone', 'places' : 'Mjesta', 'calc' : 'RaÄ�unaj', 'path' : 'Put', 'aliasfor' : 'Drugo ime za', 'locked' : 'ZakljuÄ�ano', 'dim' : 'Dimenzije', 'files' : 'Dokumenti', 'folders' : 'Mape', 'items' : 'Items', 'yes' : 'da', 'no' : 'ne', 'link' : 'poveznica', 'searcresult' : 'Rezultati pretrage', 'selected' : 'selected items', 'about' : 'Info', 'shortcuts' : 'PreÄ�aci', 'help' : 'Pomoć', 'webfm' : 'Web file manager', 'ver' : 'Verzija', 'protocolver' : 'protocol version', 'homepage' : 'Project home', 'docs' : 'Dokumentacija', 'github' : 'Fork us on Github', 'twitter' : 'Follow us on twitter', 'facebook' : 'Join us on facebook', 'team' : 'Tim', 'chiefdev' : 'glavni developer', 'developer' : 'developer', 'contributor' : 'contributor', 'maintainer' : 'maintainer', 'translator' : 'translator', 'icons' : 'Ikone', 'dontforget' : 'and don\'t forget to take your towel', 'shortcutsof' : 'PreÄ�aci iskljuÄ�eni', 'dropFiles' : 'Ovdje ispusti dokumente', 'or' : 'ili', 'selectForUpload' : 'Odaberi dokumente koje prebacujeÅ¡ na server', 'moveFiles' : 'Premjesti dokumente', 'copyFiles' : 'Kopiraj dokumente', 'rmFromPlaces' : 'Remove from places', 'aspectRatio' : 'Aspect ratio', 'scale' : 'Skaliraj', 'width' : 'Å irina', 'height' : 'Visina', 'resize' : 'Resize', 'crop' : 'Crop', 'rotate' : 'Rotate', 'rotate-cw' : 'Rotate 90 degrees CW', 'rotate-ccw' : 'Rotate 90 degrees CCW', 'degree' : '°', 'netMountDialogTitle' : 'Mount network volume', // added 18.04.2012 'protocol' : 'Protocol', // added 18.04.2012 'host' : 'Host', // added 18.04.2012 'port' : 'Port', // added 18.04.2012 'user' : 'User', // added 18.04.2012 'pass' : 'Password', // added 18.04.2012 'confirmUnmount' : 'Are you unmount $1?', // from v2.1 added 30.04.2012 'dropFilesBrowser': 'Drop or Paste files from browser', // from v2.1 added 30.05.2012 'dropPasteFiles' : 'Drop or Paste files and URLs here', // from v2.1 added 07.04.2014 'encoding' : 'Encoding', // from v2.1 added 19.12.2014 'locale' : 'Locale', // from v2.1 added 19.12.2014 'searchTarget' : 'Target: $1', // from v2.1 added 22.5.2015 'searchMime' : 'Search by input MIME Type', // from v2.1 added 22.5.2015 'owner' : 'Vlasnik', // from v2.1 added 20.6.2015 'group' : 'Grupa', // from v2.1 added 20.6.2015 'other' : 'Other', // from v2.1 added 20.6.2015 'execute' : 'IzvrÅ¡i', // from v2.1 added 20.6.2015 'perm' : 'Dozvole', // from v2.1 added 20.6.2015 'mode' : 'Mode', // from v2.1 added 20.6.2015 'emptyFolder' : 'Mapa je prazna', // from v2.1.6 added 30.12.2015 'emptyFolderDrop' : 'Mapa je prazna\\A Dovuci dokumente koje želiÅ¡ dodati', // from v2.1.6 added 30.12.2015 'emptyFolderLTap' : 'Mapa je prazna\\A Pritisni dugo za dodavanje dokumenata', // from v2.1.6 added 30.12.2015 'quality' : 'Kvaliteta', // from v2.1.6 added 5.1.2016 'autoSync' : 'Auto sync', // from v2.1.6 added 10.1.2016 'moveUp' : 'Gore', // from v2.1.6 added 18.1.2016 'getLink' : 'Get URL link', // from v2.1.7 added 9.2.2016 'selectedItems' : 'Selected items ($1)', // from v2.1.7 added 2.19.2016 'folderId' : 'Folder ID', // from v2.1.10 added 3.25.2016 'offlineAccess' : 'Allow offline access', // from v2.1.10 added 3.25.2016 'reAuth' : 'To re-authenticate', // from v2.1.10 added 3.25.2016 /********************************** mimetypes **********************************/ 'kindUnknown' : 'Unknown', 'kindFolder' : 'Mapa', 'kindAlias' : 'Drugo ime', 'kindAliasBroken' : 'Broken alias', // applications 'kindApp' : 'Aplikacija', 'kindPostscript' : 'Postscript document', 'kindMsOffice' : 'Microsoft Office dokument', 'kindMsWord' : 'Microsoft Word dokument', 'kindMsExcel' : 'Microsoft Excel dokument', 'kindMsPP' : 'Microsoft Powerpoint prezentacija', 'kindOO' : 'Open Office dokument', 'kindAppFlash' : 'Flash aplikacija', 'kindPDF' : 'Portable Document Format (PDF)', 'kindTorrent' : 'Bittorrent dokument', 'kind7z' : '7z arhiva', 'kindTAR' : 'TAR arhiva', 'kindGZIP' : 'GZIP arhiva', 'kindBZIP' : 'BZIP arhiva', 'kindXZ' : 'XZ arhiva', 'kindZIP' : 'ZIP arhiva', 'kindRAR' : 'RAR arhiva', 'kindJAR' : 'Java JAR dokument', 'kindTTF' : 'True Type font', 'kindOTF' : 'Open Type font', 'kindRPM' : 'RPM paket', // fonts 'kindFont' : 'Font', 'kindSFNT' : 'SFNT font', 'kindEOT' : 'Embedded Open Type font', 'kindWOFF' : 'Web Open Font Format', 'kindWOFF2' : 'Web Open Font Format 2', // texts 'kindText' : 'Tekst arhiva', 'kindTextPlain' : 'ObiÄ�ni tekst', 'kindPHP' : 'PHP source', 'kindCSS' : 'Cascading style sheet', 'kindHTML' : 'HTML document', 'kindJS' : 'Javascript source', 'kindRTF' : 'Rich Text Format', 'kindC' : 'C source', 'kindCHeader' : 'C header source', 'kindCPP' : 'C++ source', 'kindCPPHeader' : 'C++ header source', 'kindShell' : 'Unix shell script', 'kindPython' : 'Python source', 'kindJava' : 'Java source', 'kindRuby' : 'Ruby source', 'kindPerl' : 'Perl skripta', 'kindSQL' : 'SQL source', 'kindXML' : 'XML dokument', 'kindAWK' : 'AWK source', 'kindCSV' : 'vrijednosti razdvojene zarezom', 'kindDOCBOOK' : 'Docbook XML dokument', 'kindMarkdown' : 'Markdown tekst', // added 20.7.2015 // images 'kindImage' : 'slika', 'kindBMP' : 'BMP slika', 'kindJPEG' : 'JPEG slika', 'kindGIF' : 'GIF slika', 'kindPNG' : 'PNG slika', 'kindTIFF' : 'TIFF slika', 'kindTGA' : 'TGA slika', 'kindPSD' : 'Adobe Photoshop slika', 'kindXBITMAP' : 'X bitmap slika', 'kindPXM' : 'Pixelmator slika', // media 'kindAudio' : 'Audio', 'kindAudioMPEG' : 'MPEG audio', 'kindAudioMPEG4' : 'MPEG-4 audio', 'kindAudioMIDI' : 'MIDI audio', 'kindAudioOGG' : 'Ogg Vorbis audio', 'kindAudioWAV' : 'WAV audio', 'AudioPlaylist' : 'MP3 lista', 'kindVideo' : 'Video ', 'kindVideoDV' : 'DV video', 'kindVideoMPEG' : 'MPEG video', 'kindVideoMPEG4' : 'MPEG-4 video', 'kindVideoAVI' : 'AVI video', 'kindVideoMOV' : 'Quick Time video', 'kindVideoWM' : 'Windows Media video', 'kindVideoFlash' : 'Flash video', 'kindVideoMKV' : 'Matroska video', 'kindVideoOGG' : 'Ogg video' } }; })); PK!çùÇk'k'Ifile-manager-advanced/application/library/js/proxy/elFinderSupportVer1.jsnu„[µü¤/** * elFinder transport to support old protocol. * * @example * $('selector').elfinder({ * .... * transport : new elFinderSupportVer1() * }) * * @author Dmitry (dio) Levashov **/ window.elFinderSupportVer1 = function(upload) { "use strict"; var self = this, dateObj, today, yesterday, getDateString = function(date) { return date.replace('Today', today).replace('Yesterday', yesterday); }; dateObj = new Date(); today = dateObj.getFullYear() + '/' + (dateObj.getMonth() + 1) + '/' + dateObj.getDate(); dateObj = new Date(Date.now() - 86400000); yesterday = dateObj.getFullYear() + '/' + (dateObj.getMonth() + 1) + '/' + dateObj.getDate(); this.upload = upload || 'auto'; this.init = function(fm) { this.fm = fm; this.fm.parseUploadData = function(text) { var data; if (!text.trim()) { return {error : ['errResponse', 'errDataEmpty']}; } try { data = JSON.parse(text); } catch (e) { return {error : ['errResponse', 'errDataNotJSON']}; } return self.normalize('upload', data); }; }; this.send = function(opts) { var self = this, fm = this.fm, dfrd = $.Deferred(), cmd = opts.data.cmd, args = [], _opts = {}, data, xhr; dfrd.abort = function() { if (xhr.state() == 'pending') { xhr.quiet = true; xhr.abort(); } }; switch (cmd) { case 'open': opts.data.tree = 1; break; case 'parents': case 'tree': return dfrd.resolve({tree : []}); case 'get': opts.data.cmd = 'read'; opts.data.current = fm.file(opts.data.target).phash; break; case 'put': opts.data.cmd = 'edit'; opts.data.current = fm.file(opts.data.target).phash; break; case 'archive': case 'rm': opts.data.current = fm.file(opts.data.targets[0]).phash; break; case 'extract': case 'rename': case 'resize': opts.data.current = fm.file(opts.data.target).phash; break; case 'duplicate': _opts = $.extend(true, {}, opts); $.each(opts.data.targets, function(i, hash) { $.ajax(Object.assign(_opts, {data : {cmd : 'duplicate', target : hash, current : fm.file(hash).phash}})) .fail(function(error) { fm.error(fm.res('error', 'connect')); }) .done(function(data) { data = self.normalize('duplicate', data); if (data.error) { fm.error(data.error); } else if (data.added) { fm.trigger('add', {added : data.added}); } }); }); return dfrd.resolve({}); case 'mkdir': case 'mkfile': opts.data.current = opts.data.target; break; case 'paste': opts.data.current = opts.data.dst; if (! opts.data.tree) { $.each(opts.data.targets, function(i, h) { if (fm.file(h) && fm.file(h).mime === 'directory') { opts.data.tree = '1'; return false; } }); } break; case 'size': return dfrd.resolve({error : fm.res('error', 'cmdsupport')}); case 'search': return dfrd.resolve({error : fm.res('error', 'cmdsupport')}); case 'file': opts.data.cmd = 'open'; opts.data.current = fm.file(opts.data.target).phash; break; } // cmd = opts.data.cmd xhr = $.ajax(opts) .fail(function(error) { dfrd.reject(error); }) .done(function(raw) { data = self.normalize(cmd, raw); dfrd.resolve(data); }); return dfrd; }; // fix old connectors errors messages as possible // this.errors = { // 'Unknown command' : 'Unknown command.', // 'Invalid backend configuration' : 'Invalid backend configuration.', // 'Access denied' : 'Access denied.', // 'PHP JSON module not installed' : 'PHP JSON module not installed.', // 'File not found' : 'File not found.', // 'Invalid name' : 'Invalid file name.', // 'File or folder with the same name already exists' : 'File named "$1" already exists in this location.', // 'Not allowed file type' : 'Not allowed file type.', // 'File exceeds the maximum allowed filesize' : 'File exceeds maximum allowed size.', // 'Unable to copy into itself' : 'Unable to copy "$1" into itself.', // 'Unable to create archive' : 'Unable to create archive.', // 'Unable to extract files from archive' : 'Unable to extract files from "$1".' // } this.normalize = function(cmd, data) { var self = this, fm = this.fm, files = {}, filter = function(file) { return file && file.hash && file.name && file.mime ? file : null; }, getDirs = function(items) { return $.grep(items, function(i) { return i && i.mime && i.mime === 'directory'? true : false; }); }, getTreeDiff = function(files) { var dirs = getDirs(files); treeDiff = fm.diff(dirs, null, ['date', 'ts']); if (treeDiff.added.length) { treeDiff.added = getDirs(treeDiff.added); } if (treeDiff.changed.length) { treeDiff.changed = getDirs(treeDiff.changed); } if (treeDiff.removed.length) { var removed = []; $.each(treeDiff.removed, function(i, h) { var item; if ((item = fm.file(h)) && item.mime === 'directory') { removed.push(h); } }); treeDiff.removed = removed; } return treeDiff; }, phash, diff, isCwd, treeDiff; if ((cmd == 'tmb' || cmd == 'get')) { return data; } // if (data.error) { // $.each(data.error, function(i, msg) { // if (self.errors[msg]) { // data.error[i] = self.errors[msg]; // } // }); // } if (cmd == 'upload' && data.error && data.cwd) { data.warning = Object.assign({}, data.error); data.error = false; } if (data.error) { return data; } if (cmd == 'put') { phash = fm.file(data.target.hash).phash; return {changed : [this.normalizeFile(data.target, phash)]}; } phash = data.cwd.hash; isCwd = (phash == fm.cwd().hash); if (data.tree) { $.each(this.normalizeTree(data.tree), function(i, file) { files[file.hash] = file; }); } $.each(data.cdc||[], function(i, file) { var hash = file.hash, mcts; if (files[hash]) { if (file.date) { mcts = Date.parse(getDateString(file.date)); if (mcts && !isNaN(mcts)) { files[hash].ts = Math.floor(mcts / 1000); } else { files[hash].date = file.date || fm.formatDate(file); } } files[hash].locked = file.hash == phash ? true : file.rm === void(0) ? false : !file.rm; } else { files[hash] = self.normalizeFile(file, phash, data.tmb); } }); if (!data.tree) { $.each(fm.files(), function(hash, file) { if (!files[hash] && file.phash != phash && file.mime == 'directory') { files[hash] = file; } }); } if (cmd == 'open') { return { cwd : files[phash] || this.normalizeFile(data.cwd), files : $.map(files, function(f) { return f; }), options : self.normalizeOptions(data), init : !!data.params, debug : data.debug }; } if (isCwd) { diff = fm.diff($.map(files, filter)); } else { if (data.tree && cmd !== 'paste') { diff = getTreeDiff(files); } else { diff = { added : [], removed : [], changed : [] }; if (cmd === 'paste') { diff.sync = true; } } } return Object.assign({ current : data.cwd.hash, error : data.error, warning : data.warning, options : {tmb : !!data.tmb} }, diff); }; /** * Convert old api tree into plain array of dirs * * @param Object root dir * @return Array */ this.normalizeTree = function(root) { var self = this, result = [], traverse = function(dirs, phash) { var i, dir; for (i = 0; i < dirs.length; i++) { dir = dirs[i]; result.push(self.normalizeFile(dir, phash)); dir.dirs.length && traverse(dir.dirs, dir.hash); } }; traverse([root]); return result; }; /** * Convert file info from old api format into new one * * @param Object file * @param String parent dir hash * @return Object */ this.normalizeFile = function(file, phash, tmb) { var mime = file.mime || 'directory', size = mime == 'directory' && !file.linkTo ? 0 : file.size, mcts = file.date? Date.parse(getDateString(file.date)) : void 0, info = { url : file.url, hash : file.hash, phash : phash, name : file.name, mime : mime, ts : file.ts, size : size, read : file.read, write : file.write, locked : !phash ? true : file.rm === void(0) ? false : !file.rm }; if (! info.ts) { if (mcts && !isNaN(mcts)) { info.ts = Math.floor(mcts / 1000); } else { info.date = file.date || this.fm.formatDate(file); } } if (file.mime == 'application/x-empty' || file.mime == 'inode/x-empty') { info.mime = 'text/plain'; } if (file.linkTo) { info.alias = file.linkTo; } if (file.linkTo) { info.linkTo = file.linkTo; } if (file.tmb) { info.tmb = file.tmb; } else if (info.mime.indexOf('image/') === 0 && tmb) { info.tmb = 1; } if (file.dirs && file.dirs.length) { info.dirs = true; } if (file.dim) { info.dim = file.dim; } if (file.resize) { info.resize = file.resize; } return info; }; this.normalizeOptions = function(data) { var opts = { path : data.cwd.rel, disabled : $.merge((data.disabled || []), [ 'search', 'netmount', 'zipdl' ]), tmb : !!data.tmb, copyOverwrite : true }; if (data.params) { opts.api = 1; opts.url = data.params.url; opts.archivers = { create : data.params.archives || [], extract : data.params.extract || [] }; } if (opts.path.indexOf('/') !== -1) { opts.separator = '/'; } else if (opts.path.indexOf('\\') !== -1) { opts.separator = '\\'; } return opts; }; }; PK!5úw3w3Bfile-manager-advanced/application/library/js/elFinder.resources.jsnu„[µü¤/** * elFinder resources registry. * Store shared data * * @type Object * @author Dmitry (dio) Levashov **/ elFinder.prototype.resources = { 'class' : { hover : 'ui-state-hover', active : 'ui-state-active', disabled : 'ui-state-disabled', draggable : 'ui-draggable', droppable : 'ui-droppable', adroppable : 'elfinder-droppable-active', cwdfile : 'elfinder-cwd-file', cwd : 'elfinder-cwd', tree : 'elfinder-tree', treeroot : 'elfinder-navbar-root', navdir : 'elfinder-navbar-dir', navdirwrap : 'elfinder-navbar-dir-wrapper', navarrow : 'elfinder-navbar-arrow', navsubtree : 'elfinder-navbar-subtree', navcollapse : 'elfinder-navbar-collapsed', navexpand : 'elfinder-navbar-expanded', treedir : 'elfinder-tree-dir', placedir : 'elfinder-place-dir', searchbtn : 'elfinder-button-search', editing : 'elfinder-to-editing', preventback : 'elfinder-prevent-back', tabstab : 'ui-state-default ui-tabs-tab ui-corner-top ui-tab', tabsactive : 'ui-tabs-active ui-state-active' }, tpl : { perms : '', lock : '', symlink : '', navicon : '', navspinner : '', navdir : '
          {symlink}{permissions}{name}
          ', placedir : '
          {symlink}{permissions}{name}
          ' }, // mimes.text will be overwritten with connector config if `textMimes` is included in initial response // @see php/elFInder.class.php `public static $textMimes` mimes : { text : [ 'application/dash+xml', 'application/docbook+xml', 'application/javascript', 'application/json', 'application/plt', 'application/sat', 'application/sql', 'application/step', 'application/vnd.hp-hpgl', 'application/x-awk', 'application/x-config', 'application/x-csh', 'application/x-empty', 'application/x-mpegurl', 'application/x-perl', 'application/x-php', 'application/x-web-config', 'application/xhtml+xml', 'application/xml', 'audio/x-mp3-playlist', 'image/cgm', 'image/svg+xml', 'image/vnd.dxf', 'model/iges' ] }, mixin : { make : function() { "use strict"; var self = this, fm = this.fm, cmd = this.name, req = this.requestCmd || cmd, wz = fm.getUI('workzone'), org = (this.origin && this.origin === 'navbar')? 'tree' : 'cwd', tree = (org === 'tree'), find = tree? 'navHash2Elm' : 'cwdHash2Elm', tarea= (! tree && fm.storage('view') != 'list'), sel = fm.selected(), move = this.move || false, empty= wz.hasClass('elfinder-cwd-wrapper-empty'), unselect = function() { requestAnimationFrame(function() { input && input.trigger('blur'); }); }, rest = function(){ if (!overlay.is(':hidden')) { overlay.elfinderoverlay('hide').off('click close', cancel); } if (nnode) { pnode.removeClass('ui-front') .css('position', '') .off('unselect.'+fm.namespace, unselect); if (tarea) { nnode && nnode.css('max-height', ''); } else if (!tree) { pnode.css('width', '') .parent('td').css('overflow', ''); } } }, colwidth, dfrd = $.Deferred() .fail(function(error) { dstCls && dst.attr('class', dstCls); empty && wz.addClass('elfinder-cwd-wrapper-empty'); if (sel) { move && fm.trigger('unlockfiles', {files: sel}); fm.clipboard([]); fm.trigger('selectfiles', { files: sel }); } error && fm.error(error); }) .always(function() { rest(); cleanup(); fm.enable().unbind('open', openCallback).trigger('resMixinMake'); }), id = 'tmp_'+parseInt(Math.random()*100000), phash = this.data && this.data.target? this.data.target : (tree? fm.file(sel[0]).hash : fm.cwd().hash), date = new Date(), file = { hash : id, phash : phash, name : fm.uniqueName(this.prefix, phash), mime : this.mime, read : true, write : true, date : 'Today '+date.getHours()+':'+date.getMinutes(), move : move }, dum = fm.getUI(org).trigger('create.'+fm.namespace, file), data = this.data || {}, node = fm[find](id), nnode, pnode, overlay = fm.getUI('overlay'), cleanup = function() { if (node && node.length) { input.off(); node.hide(); fm.unselectfiles({files : [id]}).unbind('resize', resize); requestAnimationFrame(function() { if (tree) { node.closest('.elfinder-navbar-wrapper').remove(); } else { node.remove(); } }); } }, cancel = function(e) { if (!overlay.is(':hidden')) { pnode.css('z-index', ''); } if (! inError) { cleanup(); dfrd.reject(); if (e) { e.stopPropagation(); e.preventDefault(); } } }, input = $(tarea? '' : '') .on('keyup text', function(){ if (tarea) { this.style.height = '1px'; this.style.height = this.scrollHeight + 'px'; } else if (colwidth) { this.style.width = colwidth + 'px'; if (this.scrollWidth > colwidth) { this.style.width = this.scrollWidth + 10 + 'px'; } } }) .on('keydown', function(e) { e.stopImmediatePropagation(); if (e.keyCode == $.ui.keyCode.ESCAPE) { dfrd.reject(); } else if (e.keyCode == $.ui.keyCode.ENTER) { e.preventDefault(); input.trigger('blur'); } }) .on('mousedown click dblclick', function(e) { e.stopPropagation(); if (e.type === 'dblclick') { e.preventDefault(); } }) .on('blur', function() { var name = $.trim(input.val()), parent = input.parent(), valid = true, cut; if (!overlay.is(':hidden')) { pnode.css('z-index', ''); } if (name === '') { return cancel(); } if (!inError && parent.length) { if (fm.options.validName && fm.options.validName.test) { try { valid = fm.options.validName.test(name); } catch(e) { valid = false; } } if (!name || name === '.' || name === '..' || !valid) { inError = true; fm.error(file.mime === 'directory'? 'errInvDirname' : 'errInvName', {modal: true, close: function(){setTimeout(select, 120);}}); return false; } if (fm.fileByName(name, phash)) { inError = true; fm.error(['errExists', name], {modal: true, close: function(){setTimeout(select, 120);}}); return false; } cut = (sel && move)? fm.exec('cut', sel) : null; $.when(cut) .done(function() { var toast = {}, nextAct = {}; rest(); input.hide().before($('').text(name)); fm.lockfiles({files : [id]}); fm.request({ data : Object.assign({cmd : req, name : name, target : phash}, data || {}), notify : {type : req, cnt : 1}, preventFail : true, syncOnFail : true, navigate : {toast : toast}, }) .fail(function(error) { fm.unlockfiles({files : [id]}); inError = true; input.show().prev().remove(); fm.error(error, { modal: true, close: function() { if (Array.isArray(error) && $.inArray('errUploadMime', error) !== -1) { dfrd.notify('errUploadMime').reject(); } else { setTimeout(select, 120); } } }); }) .done(function(data) { if (data && data.added && data.added[0]) { var item = data.added[0], dirhash = item.hash, newItem = fm[find](dirhash), acts = { 'directory' : { cmd: 'open', msg: 'cmdopendir' }, 'text' : { cmd: 'edit', msg: 'cmdedit' }, 'default' : { cmd: 'open', msg: 'cmdopen' } }, tmpMimes; if (sel && move) { fm.one(req+'done', function() { fm.exec('paste', dirhash); }); } if (!move) { if (fm.mimeIsText(item.mime) && !fm.mimesCanMakeEmpty[item.mime] && fm.mimeTypes[item.mime]) { fm.trigger('canMakeEmptyFile', {mimes: [item.mime], unshift: true}); tmpMimes = {}; tmpMimes[item.mime] = fm.mimeTypes[item.mime]; fm.storage('mkfileTextMimes', Object.assign(tmpMimes, fm.storage('mkfileTextMimes') || {})); } Object.assign(nextAct, nextAction || acts[item.mime] || acts[item.mime.split('/')[0]] || acts[(fm.mimesCanMakeEmpty[item.mime] || $.inArray(item.mime, fm.resources.mimes.text) !== -1) ? 'text' : 'none'] || acts['default']); Object.assign(toast, nextAct.cmd ? { incwd : {msg: fm.i18n(['complete', fm.i18n('cmd'+cmd)]), action: nextAct}, inbuffer : {msg: fm.i18n(['complete', fm.i18n('cmd'+cmd)]), action: nextAct} } : { inbuffer : {msg: fm.i18n(['complete', fm.i18n('cmd'+cmd)])} }); } } dfrd.resolve(data); }); }) .fail(function() { dfrd.reject(); }); } }) .on('dragenter dragleave dragover drop', function(e) { // stop bubbling to prevent upload with native drop event e.stopPropagation(); }), select = function() { var name = fm.splitFileExtention(input.val())[0]; if (!inError && fm.UA.Mobile && !fm.UA.iOS) { // since iOS has a bug? (z-index not effect) so disable it overlay.on('click close', cancel).elfinderoverlay('show'); pnode.css('z-index', overlay.css('z-index') + 1); } inError = false; ! fm.enabled() && fm.enable(); input.trigger('focus').trigger('select'); input[0].setSelectionRange && input[0].setSelectionRange(0, name.length); }, resize = function() { node.trigger('scrolltoview', {blink : false}); }, openCallback = function() { dfrd && (dfrd.state() === 'pending') && dfrd.reject(); }, inError = false, nextAction, // for tree dst, dstCls, collapsed, expanded, arrow, subtree; if (!fm.isCommandEnabled(req, phash) || !node.length) { return dfrd.reject(); } if ($.isPlainObject(self.nextAction)){ nextAction = Object.assign({}, self.nextAction); } if (tree) { dst = fm[find](phash); collapsed = fm.res('class', 'navcollapse'); expanded = fm.res('class', 'navexpand'); arrow = fm.res('class', 'navarrow'); subtree = fm.res('class', 'navsubtree'); node.closest('.'+subtree).show(); if (! dst.hasClass(collapsed)) { dstCls = dst.attr('class'); dst.addClass(collapsed+' '+expanded+' elfinder-subtree-loaded'); } if (dst.is('.'+collapsed+':not(.'+expanded+')')) { dst.children('.'+arrow).trigger('click').data('dfrd').done(function() { if (input.val() === file.name) { input.val(fm.uniqueName(self.prefix, phash)).trigger('select').trigger('focus'); } }); } nnode = node.contents().filter(function(){ return this.nodeType==3 && $(this).parent().attr('id') === fm.navHash2Id(file.hash); }); pnode = nnode.parent(); nnode.replaceWith(input.val(file.name)); } else { empty && wz.removeClass('elfinder-cwd-wrapper-empty'); nnode = node.find('.elfinder-cwd-filename'); pnode = nnode.parent(); if (tarea) { nnode.css('max-height', 'none'); } else { colwidth = pnode.width(); pnode.width(colwidth - 15) .parent('td').css('overflow', 'visible'); } nnode.empty().append(input.val(file.name)); } pnode.addClass('ui-front') .css('position', 'relative') .on('unselect.'+fm.namespace, unselect); fm.bind('resize', resize).one('open', openCallback); input.trigger('keyup'); select(); return dfrd; } }, blink: function(elm, mode) { "use strict"; var acts = { slowonce : function(){elm.hide().delay(250).fadeIn(750).delay(500).fadeOut(3500);}, lookme : function(){elm.show().fadeOut(500).fadeIn(750);} }, func; mode = mode || 'slowonce'; func = acts[mode] || acts['lookme']; elm.stop(true, true); func(); } }; PK!–žŸPú&ú&:file-manager-advanced/application/library/js/ui/toolbar.jsnu„[µü¤/** * @class elFinder toolbar * * @author Dmitry (dio) Levashov **/ $.fn.elfindertoolbar = function(fm, opts) { "use strict"; this.not('.elfinder-toolbar').each(function() { var commands = fm._commands, self = $(this).addClass('ui-helper-clearfix ui-widget-header elfinder-toolbar'), options = { // default options displayTextLabel: false, labelExcludeUA: ['Mobile'], autoHideUA: ['Mobile'], showPreferenceButton: 'none' }, filter = function(opts) { return $.grep(opts, function(v) { if ($.isPlainObject(v)) { options = Object.assign(options, v); return false; } return true; }); }, render = function(disabled){ var name,cmdPref; $.each(buttons, function(i, b) { b.detach(); }); self.empty(); l = panels.length; while (l--) { if (panels[l]) { panel = $('
          '); i = panels[l].length; while (i--) { name = panels[l][i]; if ((!disabled || !disabled[name]) && (cmd = commands[name])) { button = 'elfinder'+cmd.options.ui; if (! buttons[name] && $.fn[button]) { buttons[name] = $('
          ')[button](cmd); } if (buttons[name]) { buttons[name].children('.elfinder-button-text')[textLabel? 'show' : 'hide'](); panel.prepend(buttons[name]); } } } panel.children().length && self.prepend(panel); panel.children(':gt(0)').before(''); } } if (cmdPref = commands['preference']) { //cmdPref.state = !self.children().length? 0 : -1; if (options.showPreferenceButton === 'always' || (!self.children().length && options.showPreferenceButton === 'auto')) { //cmdPref.state = 0; panel = $('
          '); name = 'preference'; button = 'elfinder'+cmd.options.ui; buttons[name] = $('
          ')[button](cmdPref); buttons[name].children('.elfinder-button-text')[textLabel? 'show' : 'hide'](); panel.prepend(buttons[name]); self.append(panel); } } (! self.data('swipeClose') && self.children().length)? self.show() : self.hide(); prevHeight = self[0].clientHeight; fm.trigger('toolbarload').trigger('uiresize'); }, buttons = {}, panels = filter(opts || []), dispre = null, uiCmdMapPrev = '', prevHeight = 0, contextRaw = [], l, i, cmd, panel, button, swipeHandle, autoHide, textLabel, resizeTm; // normalize options options.showPreferenceButton = options.showPreferenceButton.toLowerCase(); if (options.displayTextLabel !== 'none') { // correction of options.displayTextLabel textLabel = fm.storage('toolbarTextLabel'); if (textLabel === null) { textLabel = (options.displayTextLabel && (! options.labelExcludeUA || ! options.labelExcludeUA.length || ! $.grep(options.labelExcludeUA, function(v){ return fm.UA[v]? true : false; }).length)); } else { textLabel = (textLabel == 1); } contextRaw.push({ label : fm.i18n('textLabel'), icon : 'text', callback : function() { textLabel = ! textLabel; self.css('height', '').find('.elfinder-button-text')[textLabel? 'show':'hide'](); fm.trigger('uiresize').storage('toolbarTextLabel', textLabel? '1' : '0'); }, }); } if (options.preferenceInContextmenu && commands['preference']) { contextRaw.push({ label : fm.i18n('toolbarPref'), icon : 'preference', callback : function() { fm.exec('preference', void(0), {tab: 'toolbar'}); } }); } // add contextmenu if (contextRaw.length) { self.on('contextmenu', function(e) { e.stopPropagation(); e.preventDefault(); fm.trigger('contextmenu', { raw: contextRaw, x: e.pageX, y: e.pageY }); }).on('touchstart', function(e) { if (e.originalEvent.touches.length > 1) { return; } self.data('tmlongtap') && clearTimeout(self.data('tmlongtap')); self.removeData('longtap') .data('longtap', {x: e.originalEvent.touches[0].pageX, y: e.originalEvent.touches[0].pageY}) .data('tmlongtap', setTimeout(function() { self.removeData('longtapTm') .trigger({ type: 'contextmenu', pageX: self.data('longtap').x, pageY: self.data('longtap').y }) .data('longtap', {longtap: true}); }, 500)); }).on('touchmove touchend', function(e) { if (self.data('tmlongtap')) { if (e.type === 'touchend' || ( Math.abs(self.data('longtap').x - e.originalEvent.touches[0].pageX) + Math.abs(self.data('longtap').y - e.originalEvent.touches[0].pageY)) > 4) clearTimeout(self.data('tmlongtap')); self.removeData('longtapTm'); } }).on('click', function(e) { if (self.data('longtap') && self.data('longtap').longtap) { e.stopImmediatePropagation(); e.preventDefault(); } }).on('touchend click', '.elfinder-button', function(e) { if (self.data('longtap') && self.data('longtap').longtap) { e.stopImmediatePropagation(); e.preventDefault(); } } ); } self.prev().length && self.parent().prepend(this); render(); fm.bind('open sync select toolbarpref', function() { var disabled = Object.assign({}, fm.option('disabledFlip')), userHides = fm.storage('toolbarhides'), doRender, sel, disabledKeys; if (! userHides && Array.isArray(options.defaultHides)) { userHides = {}; $.each(options.defaultHides, function() { userHides[this] = true; }); fm.storage('toolbarhides', userHides); } if (this.type === 'select') { if (fm.searchStatus.state < 2) { return; } sel = fm.selected(); if (sel.length) { disabled = fm.getDisabledCmds(sel, true); } } $.each(userHides, function(n) { if (!disabled[n]) { disabled[n] = true; } }); if (Object.keys(fm.commandMap).length) { $.each(fm.commandMap, function(from, to){ if (to === 'hidden') { disabled[from] = true; } }); } disabledKeys = Object.keys(disabled); if (!dispre || dispre.toString() !== disabledKeys.sort().toString()) { render(disabledKeys.length? disabled : null); doRender = true; } dispre = disabledKeys.sort(); if (doRender || uiCmdMapPrev !== JSON.stringify(fm.commandMap)) { uiCmdMapPrev = JSON.stringify(fm.commandMap); if (! doRender) { // reset toolbar $.each($('div.elfinder-button'), function(){ var origin = $(this).data('origin'); if (origin) { $(this).after(origin).detach(); } }); } if (Object.keys(fm.commandMap).length) { $.each(fm.commandMap, function(from, to){ var cmd = fm._commands[to], button = cmd? 'elfinder'+cmd.options.ui : null, btn; if (button && $.fn[button]) { btn = buttons[from]; if (btn) { if (! buttons[to] && $.fn[button]) { buttons[to] = $('
          ')[button](cmd); if (buttons[to]) { buttons[to].children('.elfinder-button-text')[textLabel? 'show' : 'hide'](); if (cmd.extendsCmd) { buttons[to].children('span.elfinder-button-icon').addClass('elfinder-button-icon-' + cmd.extendsCmd); } } } if (buttons[to]) { btn.after(buttons[to]); buttons[to].data('origin', btn.detach()); } } } }); } } }).bind('resize', function(e) { resizeTm && cancelAnimationFrame(resizeTm); resizeTm = requestAnimationFrame(function() { var h = self[0].clientHeight; if (prevHeight !== h) { prevHeight = h; fm.trigger('uiresize'); } }); }); if (fm.UA.Touch) { autoHide = fm.storage('autoHide') || {}; if (typeof autoHide.toolbar === 'undefined') { autoHide.toolbar = (options.autoHideUA && options.autoHideUA.length > 0 && $.grep(options.autoHideUA, function(v){ return fm.UA[v]? true : false; }).length); fm.storage('autoHide', autoHide); } if (autoHide.toolbar) { fm.one('init', function() { fm.uiAutoHide.push(function(){ self.stop(true, true).trigger('toggle', { duration: 500, init: true }); }); }); } fm.bind('load', function() { swipeHandle = $('
          ').hide().appendTo(fm.getUI()); if (swipeHandle.css('pointer-events') !== 'none') { swipeHandle.remove(); swipeHandle = null; } }); self.on('toggle', function(e, data) { var wz = fm.getUI('workzone'), toshow= self.is(':hidden'), wzh = wz.height(), h = self.height(), tbh = self.outerHeight(true), delta = tbh - h, opt = Object.assign({ step: function(now) { wz.height(wzh + (toshow? (now + delta) * -1 : h - now)); fm.trigger('resize'); }, always: function() { requestAnimationFrame(function() { self.css('height', ''); fm.trigger('uiresize'); if (swipeHandle) { if (toshow) { swipeHandle.stop(true, true).hide(); } else { swipeHandle.height(data.handleH? data.handleH : ''); fm.resources.blink(swipeHandle, 'slowonce'); } } toshow && self.scrollTop('0px'); data.init && fm.trigger('uiautohide'); }); } }, data); self.data('swipeClose', ! toshow).stop(true, true).animate({height : 'toggle'}, opt); autoHide.toolbar = !toshow; fm.storage('autoHide', Object.assign(fm.storage('autoHide'), {toolbar: autoHide.toolbar})); }).on('touchstart', function(e) { if (self.scrollBottom() > 5) { e.originalEvent._preventSwipeY = true; } }); } }); return this; }; PK!gNû^ ^ 8file-manager-advanced/application/library/js/ui/toast.jsnu„[µü¤/** * @class elFinder toast * * This was created inspired by the toastr. Thanks to developers of toastr. * CodeSeven/toastr: http://johnpapa.net * * @author Naoki Sawada **/ $.fn.elfindertoast = function(opts, fm) { "use strict"; var defOpts = Object.assign({ mode: 'success', // or 'info', 'warning' and 'error' msg: '', showMethod: 'fadeIn', //fadeIn, slideDown, and show are built into jQuery showDuration: 300, showEasing: 'swing', //swing and linear are built into jQuery onShown: undefined, hideMethod: 'fadeOut', hideDuration: 1500, hideEasing: 'swing', onHidden: undefined, timeOut: 3000, extNode: undefined, button: undefined, width: undefined }, $.isPlainObject(fm.options.uiOptions.toast.defaults)? fm.options.uiOptions.toast.defaults : {}); return this.each(function() { opts = Object.assign({}, defOpts, opts || {}); var self = $(this), show = function(notm) { self.stop(); fm.toFront(self); self[opts.showMethod]({ duration: opts.showDuration, easing: opts.showEasing, complete: function() { opts.onShown && opts.onShown(); if (!notm && opts.timeOut) { rmTm = setTimeout(rm, opts.timeOut); } } }); }, rm = function() { self[opts.hideMethod]({ duration: opts.hideDuration, easing: opts.hideEasing, complete: function() { opts.onHidden && opts.onHidden(); self.remove(); } }); }, rmTm; self.on('click', function(e) { e.stopPropagation(); e.preventDefault(); rmTm && clearTimeout(rmTm); opts.onHidden && opts.onHidden(); self.stop().remove(); }).on('mouseenter mouseleave', function(e) { if (opts.timeOut) { rmTm && clearTimeout(rmTm); rmTm = null; if (e.type === 'mouseenter') { show(true); } else { rmTm = setTimeout(rm, opts.timeOut); } } }).hide().addClass('toast-' + opts.mode).append($('
          ').html(opts.msg.replace(/%([a-zA-Z0-9]+)%/g, function(m, m1) { return fm.i18n(m1); }))); if (opts.extNode) { self.append(opts.extNode); } if (opts.button) { self.append( $('') .append($('').text(fm.i18n(opts.button.text))) .on('mouseenter mouseleave', function(e) { $(this).toggleClass('ui-state-hover', e.type == 'mouseenter'); }) .on('click', opts.button.click || function(){}) ); } if (opts.width) { self.css('max-width', opts.width); } show(); }); };PK!ÁØÈŸ@@9file-manager-advanced/application/library/js/ui/places.jsnu„[µü¤/** * @class elFinder places/favorites ui * * @author Dmitry (dio) Levashov * @author Naoki Sawada **/ $.fn.elfinderplaces = function(fm, opts) { "use strict"; return this.each(function() { var dirs = {}, c = 'class', navdir = fm.res(c, 'navdir'), collapsed = fm.res(c, 'navcollapse'), expanded = fm.res(c, 'navexpand'), hover = fm.res(c, 'hover'), clroot = fm.res(c, 'treeroot'), dropover = fm.res(c, 'adroppable'), tpl = fm.res('tpl', 'placedir'), ptpl = fm.res('tpl', 'perms'), spinner = $(fm.res('tpl', 'navspinner')), suffix = opts.suffix? opts.suffix : '', key = 'places' + suffix, menuTimer = null, /** * Convert places dir node into dir hash * * @param String directory id * @return String **/ id2hash = function(id) { return id.substr(6); }, /** * Convert places dir hash into dir node id * * @param String directory id * @return String **/ hash2id = function(hash) { return 'place-'+hash; }, /** * Convert places dir hash into dir node elment (jQuery object) * * @param String directory id * @return Object **/ hash2elm = function(hash) { return $(document.getElementById(hash2id(hash))); }, /** * Save current places state * * @return void **/ save = function() { var hashes = [], data = {}; hashes = $.map(subtree.children().find('[id]'), function(n) { return id2hash(n.id); }); if (hashes.length) { $.each(hashes.reverse(), function(i, h) { data[h] = dirs[h]; }); } else { data = null; } fm.storage(key, data); }, /** * Init dir at places * * @return void **/ init = function() { var dat, hashes; key = 'places'+(opts.suffix? opts.suffix : ''), dirs = {}; dat = fm.storage(key); if (typeof dat === 'string') { // old data type elFinder <= 2.1.12 dat = $.grep(dat.split(','), function(hash) { return hash? true : false;}); $.each(dat, function(i, d) { var dir = d.split('#'); dirs[dir[0]] = dir[1]? dir[1] : dir[0]; }); } else if ($.isPlainObject(dat)) { dirs = dat; } // allow modify `dirs` /** * example for preset places * * elfinderInstance.bind('placesload', function(e, fm) { * //if (fm.storage(e.data.storageKey) === null) { // for first time only * if (!fm.storage(e.data.storageKey)) { // for empty places * e.data.dirs[targetHash] = fallbackName; // preset folder * } * } **/ fm.trigger('placesload', {dirs: dirs, storageKey: key}, true); hashes = Object.keys(dirs); if (hashes.length) { root.prepend(spinner); fm.request({ data : {cmd : 'info', targets : hashes}, preventDefault : true }) .done(function(data) { var exists = {}; data.files && data.files.length && fm.cache(data.files); $.each(data.files, function(i, f) { var hash = f.hash; exists[hash] = f; }); $.each(dirs, function(h, f) { add(exists[h] || Object.assign({notfound: true}, f)); }); if (fm.storage('placesState') > 0) { root.trigger('click'); } }) .always(function() { spinner.remove(); }); } }, /** * Return node for given dir object * * @param Object directory object * @return jQuery **/ create = function(dir, hash) { return $(tpl.replace(/\{id\}/, hash2id(dir? dir.hash : hash)) .replace(/\{name\}/, fm.escape(dir? dir.i18 || dir.name : hash)) .replace(/\{cssclass\}/, dir? (fm.perms2class(dir) + (dir.notfound? ' elfinder-na' : '') + (dir.csscls? ' '+dir.csscls : '')) : '') .replace(/\{permissions\}/, (dir && (!dir.read || !dir.write || dir.notfound))? ptpl : '') .replace(/\{title\}/, dir? (' title="' + fm.escape(fm.path(dir.hash, true) || dir.i18 || dir.name) + '"') : '') .replace(/\{symlink\}/, '') .replace(/\{style\}/, (dir && dir.icon)? fm.getIconStyle(dir) : '')); }, /** * Add new node into places * * @param Object directory object * @return void **/ add = function(dir) { var node, hash; if (dir.mime !== 'directory') { return false; } hash = dir.hash; if (!fm.files().hasOwnProperty(hash)) { // update cache fm.trigger('tree', {tree: [dir]}); } node = create(dir, hash); dirs[hash] = dir; subtree.prepend(node); root.addClass(collapsed); sortBtn.toggle(subtree.children().length > 1); return true; }, /** * Remove dir from places * * @param String directory hash * @return String removed name **/ remove = function(hash) { var name = null, tgt, cnt; if (dirs[hash]) { delete dirs[hash]; tgt = hash2elm(hash); if (tgt.length) { name = tgt.text(); tgt.parent().remove(); cnt = subtree.children().length; sortBtn.toggle(cnt > 1); if (! cnt) { root.removeClass(collapsed); places.removeClass(expanded); subtree.slideToggle(false); } } } return name; }, /** * Move up dir on places * * @param String directory hash * @return void **/ moveup = function(hash) { var self = hash2elm(hash), tgt = self.parent(), prev = tgt.prev('div'), cls = 'ui-state-hover', ctm = fm.getUI('contextmenu'); menuTimer && clearTimeout(menuTimer); if (prev.length) { ctm.find(':first').data('placesHash', hash); self.addClass(cls); tgt.insertBefore(prev); prev = tgt.prev('div'); menuTimer = setTimeout(function() { self.removeClass(cls); if (ctm.find(':first').data('placesHash') === hash) { ctm.hide().empty(); } }, 1500); } if(!prev.length) { self.removeClass(cls); ctm.hide().empty(); } }, /** * Update dir at places * * @param Object directory * @param String previous hash * @return Boolean **/ update = function(dir, preHash) { var hash = dir.hash, tgt = hash2elm(preHash || hash), node = create(dir, hash); if (tgt.length > 0) { tgt.parent().replaceWith(node); dirs[hash] = dir; return true; } else { return false; } }, /** * Remove all dir from places * * @return void **/ clear = function() { subtree.empty(); root.removeClass(collapsed); places.removeClass(expanded); subtree.slideToggle(false); }, /** * Sort places dirs A-Z * * @return void **/ sort = function() { $.each(dirs, function(h, f) { var dir = fm.file(h) || f, node = create(dir, h), ret = null; if (!dir) { node.hide(); } if (subtree.children().length) { $.each(subtree.children(), function() { var current = $(this); if ((dir.i18 || dir.name).localeCompare(current.children('.'+navdir).text()) < 0) { ret = !node.insertBefore(current); return ret; } }); if (ret !== null) { return true; } } !hash2elm(h).length && subtree.append(node); }); save(); }, // sort button sortBtn = $('') .hide() .on('click', function(e) { e.stopPropagation(); subtree.empty(); sort(); } ), /** * Node - wrapper for places root * * @type jQuery **/ wrapper = create({ hash : 'root-'+fm.namespace, name : fm.i18n(opts.name, 'places'), read : true, write : true }), /** * Places root node * * @type jQuery **/ root = wrapper.children('.'+navdir) .addClass(clroot) .on('click', function(e) { e.stopPropagation(); if (root.hasClass(collapsed)) { places.toggleClass(expanded); subtree.slideToggle(); fm.storage('placesState', places.hasClass(expanded)? 1 : 0); } }) .append(sortBtn), /** * Container for dirs * * @type jQuery **/ subtree = wrapper.children('.'+fm.res(c, 'navsubtree')), /** * Main places container * * @type jQuery **/ places = $(this).addClass(fm.res(c, 'tree')+' elfinder-places ui-corner-all') .hide() .append(wrapper) .appendTo(fm.getUI('navbar')) .on('mouseenter mouseleave', '.'+navdir, function(e) { $(this).toggleClass('ui-state-hover', (e.type == 'mouseenter')); }) .on('click', '.'+navdir, function(e) { var p = $(this); if (p.data('longtap')) { e.stopPropagation(); return; } ! p.hasClass('elfinder-na') && fm.exec('open', p.attr('id').substr(6)); }) .on('contextmenu', '.'+navdir+':not(.'+clroot+')', function(e) { var self = $(this), hash = self.attr('id').substr(6); e.preventDefault(); fm.trigger('contextmenu', { raw : [{ label : fm.i18n('moveUp'), icon : 'up', remain : true, callback : function() { moveup(hash); save(); } },'|',{ label : fm.i18n('rmFromPlaces'), icon : 'rm', callback : function() { remove(hash); save(); } }], 'x' : e.pageX, 'y' : e.pageY }); self.addClass('ui-state-hover'); fm.getUI('contextmenu').children().on('mouseenter', function() { self.addClass('ui-state-hover'); }); fm.bind('closecontextmenu', function() { self.removeClass('ui-state-hover'); }); }) .droppable({ tolerance : 'pointer', accept : '.elfinder-cwd-file-wrapper,.elfinder-tree-dir,.elfinder-cwd-file', hoverClass : fm.res('class', 'adroppable'), classes : { // Deprecated hoverClass jQueryUI>=1.12.0 'ui-droppable-hover': fm.res('class', 'adroppable') }, over : function(e, ui) { var helper = ui.helper, dir = $.grep(helper.data('files'), function(h) { return (fm.file(h).mime === 'directory' && !dirs[h])? true : false; }); e.stopPropagation(); helper.data('dropover', helper.data('dropover') + 1); if (fm.insideWorkzone(e.pageX, e.pageY)) { if (dir.length > 0) { helper.addClass('elfinder-drag-helper-plus'); fm.trigger('unlockfiles', {files : helper.data('files'), helper: helper}); } else { $(this).removeClass(dropover); } } }, out : function(e, ui) { var helper = ui.helper; e.stopPropagation(); helper.removeClass('elfinder-drag-helper-move elfinder-drag-helper-plus').data('dropover', Math.max(helper.data('dropover') - 1, 0)); $(this).removeData('dropover') .removeClass(dropover); }, drop : function(e, ui) { var helper = ui.helper, resolve = true; $.each(helper.data('files'), function(i, hash) { var dir = fm.file(hash); if (dir && dir.mime == 'directory' && !dirs[dir.hash]) { add(dir); } else { resolve = false; } }); save(); resolve && helper.hide(); } }) // for touch device .on('touchstart', '.'+navdir+':not(.'+clroot+')', function(e) { if (e.originalEvent.touches.length > 1) { return; } var hash = $(this).attr('id').substr(6), p = $(this) .addClass(hover) .data('longtap', null) .data('tmlongtap', setTimeout(function(){ // long tap p.data('longtap', true); fm.trigger('contextmenu', { raw : [{ label : fm.i18n('rmFromPlaces'), icon : 'rm', callback : function() { remove(hash); save(); } }], 'x' : e.originalEvent.touches[0].pageX, 'y' : e.originalEvent.touches[0].pageY }); }, 500)); }) .on('touchmove touchend', '.'+navdir+':not(.'+clroot+')', function(e) { clearTimeout($(this).data('tmlongtap')); if (e.type == 'touchmove') { $(this).removeClass(hover); } }); if ($.fn.sortable) { subtree.addClass('touch-punch') .sortable({ appendTo : fm.getUI(), revert : false, helper : function(e) { var dir = $(e.target).parent(); dir.children().removeClass('ui-state-hover'); return $('
          ') .append($('
          ').show().append(dir.clone())); }, stop : function(e, ui) { var target = $(ui.item[0]), top = places.offset().top, left = places.offset().left, width = places.width(), height = places.height(), x = e.pageX, y = e.pageY; if (!(x > left && x < left+width && y > top && y < y+height)) { remove(id2hash(target.children(':first').attr('id'))); save(); } }, update : function(e, ui) { save(); } }); } // "on regist" for command exec $(this).on('regist', function(e, files){ var added = false; $.each(files, function(i, dir) { if (dir && dir.mime == 'directory' && !dirs[dir.hash]) { if (add(dir)) { added = true; } } }); added && save(); }); // on fm load - show places and load files from backend fm.one('load', function() { var dat, hashes; if (fm.oldAPI) { return; } places.show().parent().show(); init(); fm.change(function(e) { var changed = false; $.each(e.data.changed, function(i, file) { if (dirs[file.hash]) { if (file.mime !== 'directory') { if (remove(file.hash)) { changed = true; } } else { if (update(file)) { changed = true; } } } }); changed && save(); }) .bind('rename', function(e) { var changed = false; if (e.data.removed) { $.each(e.data.removed, function(i, hash) { if (e.data.added[i]) { if (update(e.data.added[i], hash)) { changed = true; } } }); } changed && save(); }) .bind('rm paste', function(e) { var names = [], changed = false; if (e.data.removed) { $.each(e.data.removed, function(i, hash) { var name = remove(hash); name && names.push(name); }); } if (names.length) { changed = true; } if (e.data.added && names.length) { $.each(e.data.added, function(i, file) { if ($.inArray(file.name, names) !== 1) { file.mime == 'directory' && add(file); } }); } changed && save(); }) .bind('sync netmount', function() { var ev = this, opSuffix = opts.suffix? opts.suffix : '', hashes; if (ev.type === 'sync') { // check is change of opts.suffix if (suffix !== opSuffix) { suffix = opSuffix; clear(); init(); return; } } hashes = Object.keys(dirs); if (hashes.length) { root.prepend(spinner); fm.request({ data : {cmd : 'info', targets : hashes}, preventDefault : true }) .done(function(data) { var exists = {}, updated = false, cwd = fm.cwd().hash; $.each(data.files || [], function(i, file) { var hash = file.hash; exists[hash] = file; if (!fm.files().hasOwnProperty(file.hash)) { // update cache fm.updateCache({tree: [file]}); } }); $.each(dirs, function(h, f) { if (Boolean(f.notfound) === Boolean(exists[h])) { if ((f.phash === cwd && ev.type !== 'netmount') || (exists[h] && exists[h].mime !== 'directory')) { if (remove(h)) { updated = true; } } else { if (update(exists[h] || Object.assign({notfound: true}, f))) { updated = true; } } } else if (exists[h] && exists[h].phash != cwd) { // update permission of except cwd update(exists[h]); } }); updated && save(); }) .always(function() { spinner.remove(); }); } }); }); }); }; PK!ᦽ(%%8file-manager-advanced/application/library/js/ui/panel.jsnu„[µü¤$.fn.elfinderpanel = function(fm) { "use strict"; return this.each(function() { var panel = $(this).addClass('elfinder-panel ui-state-default ui-corner-all'), margin = 'margin-'+(fm.direction == 'ltr' ? 'left' : 'right'); fm.one('load', function(e) { var navbar = fm.getUI('navbar'); panel.css(margin, parseInt(navbar.outerWidth(true))); navbar.on('resize', function(e) { e.preventDefault(); e.stopPropagation(); panel.is(':visible') && panel.css(margin, parseInt(navbar.outerWidth(true))); }); }); }); }; PK!>�’˜tt=file-manager-advanced/application/library/js/ui/sortbutton.jsnu„[µü¤/** * @class elFinder toolbar button menu with sort variants. * * @author Dmitry (dio) Levashov **/ $.fn.elfindersortbutton = function(cmd) { "use strict"; return this.each(function() { var fm = cmd.fm, name = cmd.name, c = 'class', disabled = fm.res(c, 'disabled'), hover = fm.res(c, 'hover'), item = 'elfinder-button-menu-item', selected = item+'-selected', asc = selected+'-asc', desc = selected+'-desc', text = $(''+cmd.title+''), button = $(this).addClass('ui-state-default elfinder-button elfinder-menubutton elfiner-button-'+name) .attr('title', cmd.title) .append('', text) .on('mouseenter mouseleave', function(e) { !button.hasClass(disabled) && button.toggleClass(hover, e.type === 'mouseenter'); }) .on('click', function(e) { if (!button.hasClass(disabled)) { e.stopPropagation(); menu.is(':hidden') && fm.getUI().click(); menu.css(getMenuOffset()).slideToggle({ duration: 100, done: function(e) { fm[menu.is(':visible')? 'toFront' : 'toHide'](menu); } }); } }), hide = function() { fm.toHide(menu); }, menu = $('
          ') .hide() .appendTo(fm.getUI()) .on('mouseenter mouseleave', '.'+item, function(e) { $(this).toggleClass(hover, e.type === 'mouseenter'); }) .on('click', function(e) { e.preventDefault(); e.stopPropagation(); }) .on('close', hide), update = function() { menu.children('[rel]').removeClass(selected+' '+asc+' '+desc) .filter('[rel="'+fm.sortType+'"]') .addClass(selected+' '+(fm.sortOrder == 'asc' ? asc : desc)); menu.children('.elfinder-sort-stick').toggleClass(selected, fm.sortStickFolders); menu.children('.elfinder-sort-tree').toggleClass(selected, fm.sortAlsoTreeview); }, getMenuOffset = function() { var baseOffset = fm.getUI().offset(), buttonOffset = button.offset(); return { top : buttonOffset.top - baseOffset.top, left : buttonOffset.left - baseOffset.left }; }, tm; text.hide(); $.each(fm.sortRules, function(name, value) { menu.append($('
          '+fm.i18n('sort'+name)+'
          ').data('type', name)); }); menu.children().on('click', function(e) { cmd.exec([], $(this).removeClass(hover).attr('rel')); }); $('
          '+fm.i18n('sortFoldersFirst')+'
          ') .appendTo(menu) .on('click', function() { cmd.exec([], 'stick'); }); fm.one('init', function() { if (fm.ui.tree && fm.options.sortAlsoTreeview !== null) { $('
          '+fm.i18n('sortAlsoTreeview')+'
          ') .appendTo(menu) .on('click', function() { cmd.exec([], 'tree'); }); } }) .bind('disable select', hide) .bind('sortchange', update).getUI().on('click', hide); if (menu.children().length > 1) { cmd.change(function() { tm && cancelAnimationFrame(tm); tm = requestAnimationFrame(function() { button.toggleClass(disabled, cmd.disabled()); update(); }); }) .change(); } else { button.addClass(disabled); } }); }; PK!Ã˺oñTñT>file-manager-advanced/application/library/js/ui/contextmenu.jsnu„[µü¤/** * @class elFinder contextmenu * * @author Dmitry (dio) Levashov **/ $.fn.elfindercontextmenu = function(fm) { "use strict"; return this.each(function() { var self = $(this), cmItem = 'elfinder-contextmenu-item', smItem = 'elfinder-contextsubmenu-item', exIcon = 'elfinder-contextmenu-extra-icon', cHover = fm.res('class', 'hover'), dragOpt = { distance: 8, start: function() { menu.data('drag', true).data('touching') && menu.find('.'+cHover).removeClass(cHover); }, stop: function() { menu.data('draged', true).removeData('drag'); } }, menu = $(this).addClass('touch-punch ui-helper-reset ui-front ui-widget ui-state-default ui-corner-all elfinder-contextmenu elfinder-contextmenu-'+fm.direction) .hide() .on('touchstart', function(e) { menu.data('touching', true).children().removeClass(cHover); }) .on('touchend', function(e) { menu.removeData('touching'); }) .on('mouseenter mouseleave', '.'+cmItem, function(e) { $(this).toggleClass(cHover, (e.type === 'mouseenter' || (! menu.data('draged') && menu.data('submenuKeep'))? true : false)); if (menu.data('draged') && menu.data('submenuKeep')) { menu.find('.elfinder-contextmenu-sub:visible').parent().addClass(cHover); } }) .on('mouseenter mouseleave', '.'+exIcon, function(e) { $(this).parent().toggleClass(cHover, e.type === 'mouseleave'); }) .on('mouseenter mouseleave', '.'+cmItem+',.'+smItem, function(e) { var setIndex = function(target, sub) { $.each(sub? subnodes : nodes, function(i, n) { if (target[0] === n) { (sub? subnodes : nodes)._cur = i; if (sub) { subselected = target; } else { selected = target; } return false; } }); }; if (e.originalEvent) { var target = $(this), unHover = function() { if (selected && !selected.children('div.elfinder-contextmenu-sub:visible').length) { selected.removeClass(cHover); } }; if (e.type === 'mouseenter') { // mouseenter if (target.hasClass(smItem)) { // submenu if (subselected) { subselected.removeClass(cHover); } if (selected) { subnodes = selected.find('div.'+smItem); } setIndex(target, true); } else { // menu unHover(); setIndex(target); } } else { // mouseleave if (target.hasClass(smItem)) { //submenu subselected = null; subnodes = null; } else { // menu unHover(); (function(sel) { setTimeout(function() { if (sel === selected) { selected = null; } }, 250); })(selected); } } } }) .on('contextmenu', function(){return false;}) .on('mouseup', function() { setTimeout(function() { menu.removeData('draged'); }, 100); }) .draggable(dragOpt), ltr = fm.direction === 'ltr', subpos = ltr? 'left' : 'right', types = Object.assign({}, fm.options.contextmenu), tpl = '
          {label}
          ', item = function(label, icon, callback, opts) { var className = '', style = '', iconClass = '', v, pos; if (opts) { if (opts.className) { className = ' ' + opts.className; } if (opts.iconClass) { iconClass = opts.iconClass; icon = ''; } if (opts.iconImg) { v = opts.iconImg.split(/ +/); pos = v[1] && v[2]? fm.escape(v[1] + 'px ' + v[2] + 'px') : ''; style = ' style="background:url(\''+fm.escape(v[0])+'\') '+(pos? pos : '0 0')+' no-repeat;'+(pos? '' : 'posbackground-size:contain;')+'"'; } } return $(tpl.replace('{icon}', icon ? 'elfinder-button-icon-'+icon : (iconClass? iconClass : '')) .replace('{label}', label) .replace('{style}', style) .replace('{className}', className)) .on('click', function(e) { e.stopPropagation(); e.preventDefault(); callback(); }); }, urlIcon = function(iconUrl) { var v = iconUrl.split(/ +/), pos = v[1] && v[2]? (v[1] + 'px ' + v[2] + 'px') : ''; return { backgroundImage: 'url("'+v[0]+'")', backgroundRepeat: 'no-repeat', backgroundPosition: pos? pos : '', backgroundSize: pos? '' : 'contain' }; }, base, cwd, nodes, selected, subnodes, subselected, autoSyncStop, subHoverTm, autoToggle = function() { var evTouchStart = 'touchstart.contextmenuAutoToggle'; menu.data('hideTm') && clearTimeout(menu.data('hideTm')); if (menu.is(':visible')) { menu.on('touchstart', function(e) { if (e.originalEvent.touches.length > 1) { return; } menu.stop(); fm.toFront(menu); menu.data('hideTm') && clearTimeout(menu.data('hideTm')); }) .data('hideTm', setTimeout(function() { if (menu.is(':visible')) { cwd.find('.elfinder-cwd-file').off(evTouchStart); cwd.find('.elfinder-cwd-file.ui-selected') .one(evTouchStart, function(e) { if (e.originalEvent.touches.length > 1) { return; } var tgt = $(e.target); if (menu.first().length && !tgt.is('input:checkbox') && !tgt.hasClass('elfinder-cwd-select')) { e.stopPropagation(); //e.preventDefault(); open(e.originalEvent.touches[0].pageX, e.originalEvent.touches[0].pageY); cwd.data('longtap', true) tgt.one('touchend', function() { setTimeout(function() { cwd.removeData('longtap'); }, 80); }); return; } cwd.find('.elfinder-cwd-file').off(evTouchStart); }) .one('unselect.'+fm.namespace, function() { cwd.find('.elfinder-cwd-file').off(evTouchStart); }); menu.fadeOut({ duration: 300, fail: function() { menu.css('opacity', '1').show(); }, done: function() { fm.toHide(menu); } }); } }, 4500)); } }, keyEvts = function(e) { var code = e.keyCode, ESC = $.ui.keyCode.ESCAPE, ENT = $.ui.keyCode.ENTER, LEFT = $.ui.keyCode.LEFT, RIGHT = $.ui.keyCode.RIGHT, UP = $.ui.keyCode.UP, DOWN = $.ui.keyCode.DOWN, subent = fm.direction === 'ltr'? RIGHT : LEFT, sublev = subent === RIGHT? LEFT : RIGHT; if ($.inArray(code, [ESC, ENT, LEFT, RIGHT, UP, DOWN]) !== -1) { e.preventDefault(); e.stopPropagation(); e.stopImmediatePropagation(); if (code == ESC || code === sublev) { if (selected && subnodes && subselected) { subselected.trigger('mouseleave').trigger('submenuclose'); selected.addClass(cHover); subnodes = null; subselected = null; } else { code == ESC && close(); } } else if (code == UP || code == DOWN) { if (subnodes) { if (subselected) { subselected.trigger('mouseleave'); } if (code == DOWN && (! subselected || subnodes.length <= ++subnodes._cur)) { subnodes._cur = 0; } else if (code == UP && (! subselected || --subnodes._cur < 0)) { subnodes._cur = subnodes.length - 1; } subselected = subnodes.eq(subnodes._cur).trigger('mouseenter'); } else { subnodes = null; if (selected) { selected.trigger('mouseleave'); } if (code == DOWN && (! selected || nodes.length <= ++nodes._cur)) { nodes._cur = 0; } else if (code == UP && (! selected || --nodes._cur < 0)) { nodes._cur = nodes.length - 1; } selected = nodes.eq(nodes._cur).addClass(cHover); } } else if (selected && (code == ENT || code === subent)) { if (selected.hasClass('elfinder-contextmenu-group')) { if (subselected) { code == ENT && subselected.click(); } else { selected.trigger('mouseenter'); subnodes = selected.find('div.'+smItem); subnodes._cur = 0; subselected = subnodes.first().addClass(cHover); } } else { code == ENT && selected.click(); } } } }, open = function(x, y, css) { var width = menu.outerWidth(), height = menu.outerHeight(), bstyle = base.attr('style'), bpos = base.offset(), bwidth = base.width(), bheight = base.height(), mw = fm.UA.Mobile? 40 : 2, mh = fm.UA.Mobile? 20 : 2, x = x - (bpos? bpos.left : 0), y = y - (bpos? bpos.top : 0), css = Object.assign(css || {}, { top : Math.max(0, y + mh + height < bheight ? y + mh : y - (y + height - bheight)), left : Math.max(0, (x < width + mw || x + mw + width < bwidth)? x + mw : x - mw - width), opacity : '1' }), evts; autoSyncStop = true; fm.autoSync('stop'); base.width(bwidth); menu.stop().removeAttr('style').css(css); fm.toFront(menu); menu.show(); base.attr('style', bstyle); css[subpos] = parseInt(menu.width()); menu.find('.elfinder-contextmenu-sub').css(css); if (fm.UA.iOS) { $('div.elfinder div.overflow-scrolling-touch').css('-webkit-overflow-scrolling', 'auto'); } selected = null; subnodes = null; subselected = null; $(document).on('keydown.' + fm.namespace, keyEvts); evts = $._data(document).events; if (evts && evts.keydown) { evts.keydown.unshift(evts.keydown.pop()); } fm.UA.Mobile && autoToggle(); requestAnimationFrame(function() { fm.getUI().one('click.' + fm.namespace, close); }); }, close = function() { fm.getUI().off('click.' + fm.namespace, close); $(document).off('keydown.' + fm.namespace, keyEvts); currentType = currentTargets = null; if (menu.is(':visible') || menu.children().length) { fm.toHide(menu.removeAttr('style').empty().removeData('submenuKeep')); try { if (! menu.draggable('instance')) { menu.draggable(dragOpt); } } catch(e) { if (! menu.hasClass('ui-draggable')) { menu.draggable(dragOpt); } } if (menu.data('prevNode')) { menu.data('prevNode').after(menu); menu.removeData('prevNode'); } fm.trigger('closecontextmenu'); if (fm.UA.iOS) { $('div.elfinder div.overflow-scrolling-touch').css('-webkit-overflow-scrolling', 'touch'); } } autoSyncStop && fm.searchStatus.state < 1 && ! fm.searchStatus.ininc && fm.autoSync(); autoSyncStop = false; }, create = function(type, targets) { var sep = false, insSep = false, disabled = [], isCwd = type === 'cwd', selcnt = 0, cmdMap; currentType = type; currentTargets = targets; // get current uiCmdMap option if (!(cmdMap = fm.option('uiCmdMap', isCwd? void(0) : targets[0]))) { cmdMap = {}; } if (!isCwd) { disabled = fm.getDisabledCmds(targets); } selcnt = fm.selected().length; if (selcnt > 1) { menu.append('
          ' + fm.i18n('selectedItems', ''+selcnt) + '
          '); } nodes = $(); $.each(types[type]||[], function(i, name) { var cmd, cmdName, useMap, node, submenu, hover; if (name === '|') { if (sep) { insSep = true; } return; } if (cmdMap[name]) { cmdName = cmdMap[name]; useMap = true; } else { cmdName = name; } cmd = fm.getCommand(cmdName); if (cmd && !isCwd && (!fm.searchStatus.state || !cmd.disableOnSearch)) { cmd.__disabled = cmd._disabled; cmd._disabled = !(cmd.alwaysEnabled || (fm._commands[cmdName] ? $.inArray(name, disabled) === -1 && (!useMap || !disabled[cmdName]) : false)); $.each(cmd.linkedCmds, function(i, n) { var c; if (c = fm.getCommand(n)) { c.__disabled = c._disabled; c._disabled = !(c.alwaysEnabled || (fm._commands[n] ? !disabled[n] : false)); } }); } if (cmd && !cmd._disabled && cmd.getstate(targets) != -1) { if (cmd.variants) { if (!cmd.variants.length) { return; } node = item(cmd.title, cmd.className? cmd.className : cmd.name, function(){}, cmd.contextmenuOpts); submenu = $('
          ') .hide() .css('max-height', fm.getUI().height() - 30) .appendTo(node.append('')); hover = function(show){ if (! show) { submenu.hide(); } else { var bstyle = base.attr('style'); base.width(base.width()); // top: '-1000px' to prevent visible scrollbar of window with the elFinder option `height: '100%'` submenu.css({ top: '-1000px', left: 'auto', right: 'auto' }); var nodeOffset = node.offset(), nodeleft = nodeOffset.left, nodetop = nodeOffset.top, nodewidth = node.outerWidth(), width = submenu.outerWidth(true), height = submenu.outerHeight(true), baseOffset = base.offset(), wwidth = baseOffset.left + base.width(), wheight = baseOffset.top + base.height(), cltr = ltr, x = nodewidth, y, over; if (ltr) { over = (nodeleft + nodewidth + width) - wwidth; if (over > 10) { if (nodeleft > width - 5) { x = x - 5; cltr = false; } else { if (!fm.UA.Mobile) { x = nodewidth - over; } } } } else { over = width - nodeleft; if (over > 0) { if ((nodeleft + nodewidth + width - 15) < wwidth) { x = x - 5; cltr = true; } else { if (!fm.UA.Mobile) { x = nodewidth - over; } } } } over = (nodetop + 5 + height) - wheight; y = (over > 0 && nodetop < wheight)? 5 - over : (over > 0? 30 - height : 5); menu.find('.elfinder-contextmenu-sub:visible').hide(); submenu.css({ top : y, left : cltr? x : 'auto', right: cltr? 'auto' : x, overflowY: 'auto' }).show(); base.attr('style', bstyle); } }; node.addClass('elfinder-contextmenu-group') .on('mouseleave', '.elfinder-contextmenu-sub', function(e) { if (! menu.data('draged')) { menu.removeData('submenuKeep'); } }) .on('submenuclose', '.elfinder-contextmenu-sub', function(e) { hover(false); }) .on('click', '.'+smItem, function(e){ var opts, $this; e.stopPropagation(); if (! menu.data('draged')) { $this = $(this); if (!cmd.keepContextmenu) { menu.hide(); } else { $this.removeClass(cHover); node.addClass(cHover); } opts = $this.data('exec'); if (typeof opts === 'undefined') { opts = {}; } if (typeof opts === 'object') { opts._userAction = true; opts._currentType = type; opts._currentNode = $this; } !cmd.keepContextmenu && close(); fm.exec(cmd.name, targets, opts); } }) .on('touchend', function(e) { if (! menu.data('drag')) { hover(true); menu.data('submenuKeep', true); } }) .on('mouseenter mouseleave', function(e){ if (! menu.data('touching')) { if (node.data('timer')) { clearTimeout(node.data('timer')); node.removeData('timer'); } if (!$(e.target).closest('.elfinder-contextmenu-sub', menu).length) { if (e.type === 'mouseleave') { if (! menu.data('submenuKeep')) { node.data('timer', setTimeout(function() { node.removeData('timer'); hover(false); }, 250)); } } else { node.data('timer', setTimeout(function() { node.removeData('timer'); hover(true); }, nodes.find('div.elfinder-contextmenu-sub:visible').length? 250 : 0)); } } } }); $.each(cmd.variants, function(i, variant) { var item = variant === '|' ? '
          ' : $('
          '+variant[1]+'
          ').data('exec', variant[0]), iconClass, icon; if (typeof variant[2] !== 'undefined') { icon = $('').addClass('elfinder-button-icon elfinder-contextmenu-icon'); if (! /\//.test(variant[2])) { icon.addClass('elfinder-button-icon-'+variant[2]); } else { icon.css(urlIcon(variant[2])); } item.prepend(icon).addClass(smItem+'-icon'); } submenu.append(item); }); } else { node = item(cmd.title, cmd.className? cmd.className : cmd.name, function() { if (! menu.data('draged')) { !cmd.keepContextmenu && close(); fm.exec(cmd.name, targets, {_userAction: true, _currentType: type, _currentNode: node}); } }, cmd.contextmenuOpts); if (cmd.extra && cmd.extra.node) { $('') .append(cmd.extra.node).appendTo(node); $(cmd.extra.node).trigger('ready', {targets: targets}); } else { node.remove('.'+exIcon); } } if (cmd.extendsCmd) { node.children('span.elfinder-button-icon').addClass('elfinder-button-icon-' + cmd.extendsCmd); } if (insSep) { menu.append('
          '); } menu.append(node); sep = true; insSep = false; } if (cmd && typeof cmd.__disabled !== 'undefined') { cmd._disabled = cmd.__disabled; delete cmd.__disabled; $.each(cmd.linkedCmds, function(i, n) { var c; if (c = fm.getCommand(n)) { c._disabled = c.__disabled; delete c.__disabled; } }); } }); nodes = menu.children('div.'+cmItem); }, createFromRaw = function(raw) { currentType = 'raw'; $.each(raw, function(i, data) { var node; if (data === '|') { menu.append('
          '); } else if (data.label && typeof data.callback == 'function') { node = item(data.label, data.icon, function() { if (! menu.data('draged')) { !data.remain && close(); data.callback(); } }, data.options || null); menu.append(node); } }); nodes = menu.children('div.'+cmItem); }, currentType = null, currentTargets = null; fm.one('load', function() { base = fm.getUI(); cwd = fm.getUI('cwd'); fm.bind('contextmenu', function(e) { var data = e.data, css = {}, prevNode; if (data.type && data.type !== 'files') { cwd.trigger('unselectall'); } close(); if (data.type && data.targets) { fm.trigger('contextmenucreate', data); create(data.type, data.targets); fm.trigger('contextmenucreatedone', data); } else if (data.raw) { createFromRaw(data.raw); } if (menu.children().length) { prevNode = data.prevNode || null; if (prevNode) { menu.data('prevNode', menu.prev()); prevNode.after(menu); } if (data.fitHeight) { css = {maxHeight: Math.min(fm.getUI().height(), $(window).height()), overflowY: 'auto'}; menu.draggable('destroy').removeClass('ui-draggable'); } open(data.x, data.y, css); // call opened callback function if (data.opened && typeof data.opened === 'function') { data.opened.call(menu); } } }) .one('destroy', function() { menu.remove(); }) .bind('disable', close) .bind('select', function(e){ (currentType === 'files' && (!e.data || e.data.selected.toString() !== currentTargets.toString())) && close(); }); }) .shortcut({ pattern : fm.OS === 'mac' ? 'ctrl+m' : 'contextmenu shift+f10', description : 'contextmenu', callback : function(e) { e.stopPropagation(); e.preventDefault(); $(document).one('contextmenu.' + fm.namespace, function(e) { e.preventDefault(); e.stopPropagation(); }); var sel = fm.selected(), type, targets, pos, elm; if (sel.length) { type = 'files'; targets = sel; elm = fm.cwdHash2Elm(sel[0]); } else { type = 'cwd'; targets = [ fm.cwd().hash ]; pos = fm.getUI('workzone').offset(); } if (! elm || ! elm.length) { elm = fm.getUI('workzone'); } pos = elm.offset(); pos.top += (elm.height() / 2); pos.left += (elm.width() / 2); fm.trigger('contextmenu', { 'type' : type, 'targets' : targets, 'x' : pos.left, 'y' : pos.top }); } }); }); }; PK!µ$ð‚”'”'?file-manager-advanced/application/library/js/ui/searchbutton.jsnu„[µü¤/** * @class elFinder toolbar search button widget. * * @author Dmitry (dio) Levashov **/ $.fn.elfindersearchbutton = function(cmd) { "use strict"; return this.each(function() { var result = false, fm = cmd.fm, disabled = fm.res('class', 'disabled'), isopts = cmd.options.incsearch || { enable: false }, sTypes = cmd.options.searchTypes, id = function(name){return fm.namespace + fm.escape(name);}, toolbar= fm.getUI('toolbar'), btnCls = fm.res('class', 'searchbtn'), button = $(this) .hide() .addClass('ui-widget-content elfinder-button '+btnCls) .on('click', function(e) { e.stopPropagation(); }), getMenuOffset = function() { var fmNode = fm.getUI(), baseOffset = fmNode.offset(), buttonOffset = button.offset(); return { top : buttonOffset.top - baseOffset.top, maxHeight : fmNode.height() - 40 }; }, search = function() { input.data('inctm') && clearTimeout(input.data('inctm')); var val = $.trim(input.val()), from = !$('#' + id('SearchFromAll')).prop('checked'), mime = $('#' + id('SearchMime')).prop('checked'), type = ''; if (from) { if ($('#' + id('SearchFromVol')).prop('checked')) { from = fm.root(fm.cwd().hash); } else { from = fm.cwd().hash; } } if (mime) { mime = val; val = '.'; } if (typeSet) { type = typeSet.children('input:checked').val(); } if (val) { input.trigger('focus'); cmd.exec(val, from, mime, type).done(function() { result = true; }).fail(function() { abort(); }); } else { fm.trigger('searchend'); } }, abort = function() { input.data('inctm') && clearTimeout(input.data('inctm')); input.val('').trigger('blur'); if (result || incVal) { result = false; incVal = ''; fm.lazy(function() { fm.trigger('searchend'); }); } }, incVal = '', input = $('') .on('focus', function() { // close other menus !button.hasClass('ui-state-active') && fm.getUI().click(); inFocus = true; incVal = ''; button.addClass('ui-state-active'); fm.trigger('uiresize'); opts && opts.css(getMenuOffset()).slideDown(function() { // Care for on browser window re-active button.addClass('ui-state-active'); fm.toFront(opts); }); }) .on('blur', function() { inFocus = false; if (opts) { if (!opts.data('infocus')) { opts.slideUp(function() { button.removeClass('ui-state-active'); fm.trigger('uiresize'); fm.toHide(opts); }); } else { opts.data('infocus', false); } } else { button.removeClass('ui-state-active'); } }) .appendTo(button) // to avoid fm shortcuts on arrows .on('keypress', function(e) { e.stopPropagation(); }) .on('keydown', function(e) { e.stopPropagation(); if (e.keyCode === $.ui.keyCode.ENTER) { search(); } else if (e.keyCode === $.ui.keyCode.ESCAPE) { e.preventDefault(); abort(); } }), opts, typeSet, cwdReady, inFocus; if (isopts.enable) { isopts.minlen = isopts.minlen || 2; isopts.wait = isopts.wait || 500; input .attr('title', fm.i18n('incSearchOnly')) .on('compositionstart', function() { input.data('composing', true); }) .on('compositionend', function() { input.removeData('composing'); input.trigger('input'); // for IE, edge }) .on('input', function() { if (! input.data('composing')) { input.data('inctm') && clearTimeout(input.data('inctm')); input.data('inctm', setTimeout(function() { var val = input.val(); if (val.length === 0 || val.length >= isopts.minlen) { (incVal !== val) && fm.trigger('incsearchstart', { query: val, type: typeSet? typeSet.children('input:checked').val() : 'searchName' }); incVal = val; if (val === '' && fm.searchStatus.state > 1 && fm.searchStatus.query) { input.val(fm.searchStatus.query).trigger('select'); } } }, isopts.wait)); } }); if (fm.UA.ltIE8) { input.on('keydown', function(e) { if (e.keyCode === 229) { input.data('imetm') && clearTimeout(input.data('imetm')); input.data('composing', true); input.data('imetm', setTimeout(function() { input.removeData('composing'); }, 100)); } }) .on('keyup', function(e) { input.data('imetm') && clearTimeout(input.data('imetm')); if (input.data('composing')) { e.keyCode === $.ui.keyCode.ENTER && input.trigger('compositionend'); } else { input.trigger('input'); } }); } } $('') .appendTo(button) .on('mousedown', function(e) { e.stopPropagation(); e.preventDefault(); if (button.hasClass('ui-state-active')) { search(); } else { input.trigger('focus'); } }); $('') .appendTo(button) .on('mousedown', function(e) { e.stopPropagation(); e.preventDefault(); if (input.val() === '' && !button.hasClass('ui-state-active')) { input.trigger('focus'); } else { abort(); } }); // wait when button will be added to DOM fm.bind('toolbarload', function(){ var parent = button.parent(); if (parent.length) { toolbar.prepend(button.show()); parent.remove(); // position icons for ie7 if (fm.UA.ltIE7) { var icon = button.children(fm.direction == 'ltr' ? '.ui-icon-close' : '.ui-icon-search'); icon.css({ right : '', left : parseInt(button.width())-icon.outerWidth(true) }); } } }); fm .one('init', function() { fm.getUI('cwd').on('touchstart click', function() { inFocus && input.trigger('blur'); }); }) .one('open', function() { opts = (fm.api < 2.1)? null : $('
          ') .append( $('
          ') .append( $(''), $(''), $('') ), $('
          ') .append( $('') ) ) .hide() .appendTo(fm.getUI()); if (opts) { if (sTypes) { typeSet = opts.find('.elfinder-search-type'); $.each(cmd.options.searchTypes, function(i, v) { typeSet.append($('')); }); } opts.find('div.buttonset').buttonset(); $('#'+id('SearchFromAll')).next('label').attr('title', fm.i18n('searchTarget', fm.i18n('btnAll'))); if (sTypes) { $.each(sTypes, function(i, v) { if (v.title) { $('#'+id(i)).next('label').attr('title', fm.i18n(v.title)); } }); } opts.on('mousedown', 'div.buttonset', function(e){ e.stopPropagation(); opts.data('infocus', true); }) .on('click', 'input', function(e) { e.stopPropagation(); $.trim(input.val())? search() : input.trigger('focus'); }) .on('close', function() { input.trigger('blur'); }); } }) .bind('searchend', function() { input.val(''); }) .bind('open parents', function() { var dirs = [], volroot = fm.file(fm.root(fm.cwd().hash)); if (volroot) { $.each(fm.parents(fm.cwd().hash), function(i, hash) { dirs.push(fm.file(hash).name); }); $('#'+id('SearchFromCwd')).next('label').attr('title', fm.i18n('searchTarget', dirs.join(fm.option('separator')))); $('#'+id('SearchFromVol')).next('label').attr('title', fm.i18n('searchTarget', volroot.name)); } }) .bind('open', function() { incVal && abort(); }) .bind('cwdinit', function() { cwdReady = false; }) .bind('cwdrender',function() { cwdReady = true; }) .bind('keydownEsc', function() { if (incVal && incVal.substr(0, 1) === '/') { incVal = ''; input.val(''); fm.trigger('searchend'); } }) .shortcut({ pattern : 'ctrl+f f3', description : cmd.title, callback : function() { input.trigger('select').trigger('focus'); } }) .shortcut({ pattern : 'a b c d e f g h i j k l m n o p q r s t u v w x y z dig0 dig1 dig2 dig3 dig4 dig5 dig6 dig7 dig8 dig9 num0 num1 num2 num3 num4 num5 num6 num7 num8 num9', description : fm.i18n('firstLetterSearch'), callback : function(e) { if (! cwdReady) { return; } var code = e.originalEvent.keyCode, next = function() { var sel = fm.selected(), key = $.ui.keyCode[(!sel.length || fm.cwdHash2Elm(sel[0]).next('[id]').length)? 'RIGHT' : 'HOME']; $(document).trigger($.Event('keydown', { keyCode: key, ctrlKey : false, shiftKey : false, altKey : false, metaKey : false })); }, val; if (code >= 96 && code <= 105) { code -= 48; } val = '/' + String.fromCharCode(code); if (incVal !== val) { input.val(val); incVal = val; fm .trigger('incsearchstart', { query: val }) .one('cwdrender', next); } else{ next(); } } }); }); }; PK!¦º=¿¿:file-manager-advanced/application/library/js/ui/overlay.jsnu„[µü¤ $.fn.elfinderoverlay = function(opts) { "use strict"; var fm = this.parent().elfinder('instance'), o, cnt, show, hide; this.filter(':not(.elfinder-overlay)').each(function() { opts = Object.assign({}, opts); $(this).addClass('ui-front ui-widget-overlay elfinder-overlay') .hide() .on('mousedown', function(e) { e.preventDefault(); e.stopPropagation(); }) .data({ cnt : 0, show : typeof(opts.show) == 'function' ? opts.show : function() { }, hide : typeof(opts.hide) == 'function' ? opts.hide : function() { } }); }); if (opts == 'show') { o = this.eq(0); cnt = o.data('cnt') + 1; show = o.data('show'); fm.toFront(o); o.data('cnt', cnt); if (o.is(':hidden')) { o.show(); show(); } } if (opts == 'hide') { o = this.eq(0); cnt = o.data('cnt') - 1; hide = o.data('hide'); o.data('cnt', cnt); if (cnt <= 0) { o.hide(); hide(); } } return this; }; PK!Aßä?¼¼9file-manager-advanced/application/library/js/ui/navbar.jsnu„[µü¤/** * @class elfindernav - elFinder container for diretories tree and places * * @author Dmitry (dio) Levashov **/ $.fn.elfindernavbar = function(fm, opts) { "use strict"; this.not('.elfinder-navbar').each(function() { var nav = $(this).hide().addClass('ui-state-default elfinder-navbar'), parent = nav.css('overflow', 'hidden').parent(), wz = parent.children('.elfinder-workzone').append(nav), ltr = fm.direction == 'ltr', delta, deltaW, handle, swipeHandle, autoHide, setWidth, navdock, setWzRect = function() { var cwd = fm.getUI('cwd'), wz = fm.getUI('workzone'), wzRect = wz.data('rectangle'), cwdOffset = cwd.offset(); wz.data('rectangle', Object.assign(wzRect, { cwdEdge: (fm.direction === 'ltr')? cwdOffset.left : cwdOffset.left + cwd.width() })); }, setDelta = function() { nav.css('overflow', 'hidden'); delta = Math.round(nav.outerHeight() - nav.height()); deltaW = Math.round(navdock.outerWidth() - navdock.innerWidth()); nav.css('overflow', 'auto'); }; fm.one('init', function() { navdock = fm.getUI('navdock'); var set = function() { setDelta(); fm.bind('wzresize', function() { var navdockH = 0; navdock.width(nav.outerWidth() - deltaW); if (navdock.children().length > 1) { navdockH = navdock.outerHeight(true); } nav.height(wz.height() - navdockH - delta); }).trigger('wzresize'); }; if (fm.cssloaded) { set(); } else { fm.one('cssloaded', set); } }) .one('opendone',function() { handle && handle.trigger('resize'); nav.css('overflow', 'auto'); }).bind('themechange', setDelta); if (fm.UA.Touch) { autoHide = fm.storage('autoHide') || {}; if (typeof autoHide.navbar === 'undefined') { autoHide.navbar = (opts.autoHideUA && opts.autoHideUA.length > 0 && $.grep(opts.autoHideUA, function(v){ return fm.UA[v]? true : false; }).length); fm.storage('autoHide', autoHide); } if (autoHide.navbar) { fm.one('init', function() { if (nav.children().length) { fm.uiAutoHide.push(function(){ nav.stop(true, true).trigger('navhide', { duration: 'slow', init: true }); }); } }); } fm.bind('load', function() { if (nav.children().length) { swipeHandle = $('
          ').hide().appendTo(wz); if (swipeHandle.css('pointer-events') !== 'none') { swipeHandle.remove(); swipeHandle = null; } } }); nav.on('navshow navhide', function(e, data) { var mode = (e.type === 'navshow')? 'show' : 'hide', duration = (data && data.duration)? data.duration : 'fast', handleW = (data && data.handleW)? data.handleW : Math.max(50, fm.getUI().width() / 10); nav.stop(true, true)[mode]({ duration: duration, step : function() { fm.trigger('wzresize'); }, complete: function() { if (swipeHandle) { if (mode === 'show') { swipeHandle.stop(true, true).hide(); } else { swipeHandle.width(handleW? handleW : ''); fm.resources.blink(swipeHandle, 'slowonce'); } } fm.trigger('navbar'+ mode); data.init && fm.trigger('uiautohide'); setWzRect(); } }); autoHide.navbar = (mode !== 'show'); fm.storage('autoHide', Object.assign(fm.storage('autoHide'), {navbar: autoHide.navbar})); }).on('touchstart', function(e) { if ($(this)['scroll' + (fm.direction === 'ltr'? 'Right' : 'Left')]() > 5) { e.originalEvent._preventSwipeX = true; } }); } if (! fm.UA.Mobile) { handle = nav.resizable({ handles : ltr ? 'e' : 'w', minWidth : opts.minWidth || 150, maxWidth : opts.maxWidth || 500, resize : function() { fm.trigger('wzresize'); }, stop : function(e, ui) { fm.storage('navbarWidth', ui.size.width); setWzRect(); } }) .on('resize scroll', function(e) { var $this = $(this), tm = $this.data('posinit'); e.preventDefault(); e.stopPropagation(); if (! ltr && e.type === 'resize') { nav.css('left', 0); } tm && cancelAnimationFrame(tm); $this.data('posinit', requestAnimationFrame(function() { var offset = (fm.UA.Opera && nav.scrollLeft())? 20 : 2; handle.css('top', 0).css({ top : parseInt(nav.scrollTop())+'px', left : ltr ? 'auto' : parseInt(nav.scrollRight() - offset) * -1, right: ltr ? parseInt(nav.scrollLeft() - offset) * -1 : 'auto' }); if (e.type === 'resize') { fm.getUI('cwd').trigger('resize'); } })); }) .children('.ui-resizable-handle').addClass('ui-front'); } if (setWidth = fm.storage('navbarWidth')) { nav.width(setWidth); } else { if (fm.UA.Mobile) { fm.one(fm.cssloaded? 'init' : 'cssloaded', function() { var set = function() { setWidth = nav.parent().width() / 2; if (nav.data('defWidth') > setWidth) { nav.width(setWidth); } else { nav.width(nav.data('defWidth')); } nav.data('width', nav.width()); fm.trigger('wzresize'); }; nav.data('defWidth', nav.width()); $(window).on('resize.' + fm.namespace, set); set(); }); } } }); return this; }; PK!ëXÛ5ppCfile-manager-advanced/application/library/js/ui/fullscreenbutton.jsnu„[µü¤/** * @class elFinder toolbar button to switch full scrren mode. * * @author Naoki Sawada **/ $.fn.elfinderfullscreenbutton = function(cmd) { "use strict"; return this.each(function() { var button = $(this).elfinderbutton(cmd), icon = button.children('.elfinder-button-icon'), tm; cmd.change(function() { tm && cancelAnimationFrame(tm); tm = requestAnimationFrame(function() { var fullscreen = cmd.value; icon.addClass('elfinder-button-icon-fullscreen').toggleClass('elfinder-button-icon-unfullscreen', fullscreen); cmd.className = fullscreen? 'unfullscreen' : ''; }); }); }); }; PK!Q ',j,j9file-manager-advanced/application/library/js/ui/dialog.jsnu„[µü¤/** * @class elFinder dialog * * @author Dmitry (dio) Levashov **/ $.fn.elfinderdialog = function(opts, fm) { "use strict"; var platformWin = (window.navigator.platform.indexOf('Win') != -1), delta = {}, syncSize = { enabled: false, width: false, height: false, defaultSize: null }, fitSize = function(dialog) { var opts, node; if (syncSize.enabled) { node = fm.options.dialogContained? elfNode : $(window); opts = { maxWidth : syncSize.width? node.width() - delta.width : null, maxHeight: syncSize.height? node.height() - delta.height : null }; Object.assign(restoreStyle, opts); dialog.css(opts).trigger('resize'); if (dialog.data('hasResizable') && (dialog.resizable('option', 'maxWidth') < opts.maxWidth || dialog.resizable('option', 'maxHeight') < opts.maxHeight)) { dialog.resizable('option', opts); } } }, syncFunc = function(e) { var dialog = e.data; syncTm && cancelAnimationFrame(syncTm); syncTm = requestAnimationFrame(function() { var opts, offset; if (syncSize.enabled) { fitSize(dialog); } }); }, checkEditing = function() { var cldialog = 'elfinder-dialog', dialogs = elfNode.children('.' + cldialog + '.' + fm.res('class', 'editing') + ':visible'); fm[dialogs.length? 'disable' : 'enable'](); }, propagationEvents = {}, syncTm, dialog, elfNode, restoreStyle; if (fm && fm.ui) { elfNode = fm.getUI(); } else { elfNode = this.closest('.elfinder'); if (! fm) { fm = elfNode.elfinder('instance'); } } if (typeof opts === 'string') { if ((dialog = this.closest('.ui-dialog')).length) { if (opts === 'open') { if (dialog.css('display') === 'none') { // Need dialog.show() and hide() to detect elements size in open() callbacks dialog.trigger('posinit').show().trigger('open').hide(); dialog.fadeIn(120, function() { fm.trigger('dialogopened', {dialog: dialog}); }); } } else if (opts === 'close' || opts === 'destroy') { dialog.stop(true); if (dialog.is(':visible') || elfNode.is(':hidden')) { dialog.trigger('close'); fm.trigger('dialogclosed', {dialog: dialog}); } if (opts === 'destroy') { dialog.remove(); fm.trigger('dialogremoved', {dialog: dialog}); } else if (dialog.data('minimized')) { dialog.data('minimized').close(); } } else if (opts === 'toTop') { dialog.trigger('totop'); fm.trigger('dialogtotoped', {dialog: dialog}); } else if (opts === 'posInit') { dialog.trigger('posinit'); fm.trigger('dialogposinited', {dialog: dialog}); } else if (opts === 'tabstopsInit') { dialog.trigger('tabstopsInit'); fm.trigger('dialogtabstopsinited', {dialog: dialog}); } else if (opts === 'checkEditing') { checkEditing(); } } return this; } opts = Object.assign({}, $.fn.elfinderdialog.defaults, opts); if (opts.allowMinimize && opts.allowMinimize === 'auto') { opts.allowMinimize = this.find('textarea,input').length? true : false; } opts.openMaximized = opts.allowMinimize && opts.openMaximized; if (opts.headerBtnPos && opts.headerBtnPos === 'auto') { opts.headerBtnPos = platformWin? 'right' : 'left'; } if (opts.headerBtnOrder && opts.headerBtnOrder === 'auto') { opts.headerBtnOrder = platformWin? 'close:maximize:minimize' : 'close:minimize:maximize'; } if (opts.modal && opts.allowMinimize) { opts.allowMinimize = false; } if (fm.options.dialogContained) { syncSize.width = syncSize.height = syncSize.enabled = true; } else { syncSize.width = (opts.maxWidth === 'window'); syncSize.height = (opts.maxHeight === 'window'); if (syncSize.width || syncSize.height) { syncSize.enabled = true; } } propagationEvents = fm.arrayFlip(opts.propagationEvents, true); this.filter(':not(.ui-dialog-content)').each(function() { var self = $(this).addClass('ui-dialog-content ui-widget-content'), clactive = 'elfinder-dialog-active', cldialog = 'elfinder-dialog', clnotify = 'elfinder-dialog-notify', clhover = 'ui-state-hover', cltabstop = 'elfinder-tabstop', cl1stfocus = 'elfinder-focus', clmodal = 'elfinder-dialog-modal', id = parseInt(Math.random()*1000000), titlebar = $('
          '+opts.title+'
          '), buttonset = $('
          '), buttonpane = $('
          ') .append(buttonset), btnWidth = 0, btnCnt = 0, tabstops = $(), evCover = $('
          ').hide(), numberToTel = function() { if (opts.optimizeNumber) { dialog.find('input[type=number]').each(function() { $(this).attr('inputmode', 'numeric'); $(this).attr('pattern', '[0-9]*'); }); } }, tabstopsInit = function() { tabstops = dialog.find('.'+cltabstop); if (tabstops.length) { tabstops.attr('tabindex', '-1'); if (! tabstops.filter('.'+cl1stfocus).length) { buttonset.children('.'+cltabstop+':'+(platformWin? 'first' : 'last')).addClass(cl1stfocus); } } }, tabstopNext = function(cur) { var elms = tabstops.filter(':visible:enabled'), node = cur? null : elms.filter('.'+cl1stfocus+':first'); if (! node || ! node.length) { node = elms.first(); } if (cur) { $.each(elms, function(i, elm) { if (elm === cur && elms[i+1]) { node = elms.eq(i+1); return false; } }); } return node; }, tabstopPrev = function(cur) { var elms = tabstops.filter(':visible:enabled'), node = elms.last(); $.each(elms, function(i, elm) { if (elm === cur && elms[i-1]) { node = elms.eq(i-1); return false; } }); return node; }, makeHeaderBtn = function() { $.each(opts.headerBtnOrder.split(':').reverse(), function(i, v) { headerBtns[v] && headerBtns[v](); }); if (platformWin) { titlebar.children('.elfinder-titlebar-button').addClass('elfinder-titlebar-button-right'); } }, headerBtns = { close: function() { titlebar.prepend($('') .on('mousedown touchstart', function(e) { e.preventDefault(); e.stopPropagation(); self.elfinderdialog('close'); }) ); }, maximize: function() { if (opts.allowMaximize) { dialog.on('resize', function(e, data) { var full, elm; e.preventDefault(); e.stopPropagation(); if (data && data.maximize) { elm = titlebar.find('.elfinder-titlebar-full'); full = (data.maximize === 'on'); elm.children('span.ui-icon') .toggleClass('ui-icon-plusthick', ! full) .toggleClass('ui-icon-arrowreturnthick-1-s', full); if (full) { try { dialog.hasClass('ui-draggable') && dialog.draggable('disable'); dialog.hasClass('ui-resizable') && dialog.resizable('disable'); } catch(e) {} self.css('width', '100%').css('height', dialog.height() - dialog.children('.ui-dialog-titlebar').outerHeight(true) - buttonpane.outerHeight(true)); } else { self.attr('style', elm.data('style')); elm.removeData('style'); posCheck(); try { dialog.hasClass('ui-draggable') && dialog.draggable('enable'); dialog.hasClass('ui-resizable') && dialog.resizable('enable'); } catch(e) {} } dialog.trigger('resize', {init: true}); } }); titlebar.prepend($('') .on('mousedown touchstart', function(e) { var elm = $(this); e.preventDefault(); e.stopPropagation(); if (!dialog.hasClass('elfinder-maximized') && typeof elm.data('style') === 'undefined') { self.height(self.height()); elm.data('style', self.attr('style') || ''); } fm.toggleMaximize(dialog); typeof(opts.maximize) === 'function' && opts.maximize.call(self[0]); }) ); } }, minimize: function() { var btn, mnode, doffset; if (opts.allowMinimize) { btn = $('') .on('mousedown touchstart', function(e) { var $this = $(this), tray = fm.getUI('bottomtray'), dumStyle = { width: 70, height: 24 }, dum = $('
          ').css(dumStyle).addClass(dialog.get(0).className + ' elfinder-dialog-minimized'), close = function() { mnode.remove(); dialog.removeData('minimized').show(); self.elfinderdialog('close'); }, pos = {}; e.preventDefault(); e.stopPropagation(); if (!dialog.data('minimized')) { // minimize doffset = dialog.data('minimized', { dialog : function() { return mnode; }, show : function() { mnode.show(); }, hide : function() { mnode.hide(); }, close : close, title : function(v) { mnode.children('.ui-dialog-titlebar').children('.elfinder-dialog-title').text(v); } }).position(); mnode = dialog.clone().on('mousedown', function() { $this.trigger('mousedown'); }).removeClass('ui-draggable ui-resizable elfinder-frontmost'); tray.append(dum); Object.assign(pos, dum.offset(), dumStyle); dum.remove(); mnode.height(dialog.height()).children('.ui-dialog-content:first').empty(); fm.toHide(dialog.before(mnode)); mnode.children('.ui-dialog-content:first,.ui-dialog-buttonpane,.ui-resizable-handle').remove(); mnode.find('.elfinder-titlebar-minimize,.elfinder-titlebar-full').remove(); mnode.find('.ui-dialog-titlebar-close').on('mousedown', function(e) { e.stopPropagation(); e.preventDefault(); close(); }); mnode.animate(pos, function() { mnode.attr('style', '') .css({ maxWidth: dialog.width() }) .addClass('elfinder-dialog-minimized') .appendTo(tray); checkEditing(); typeof(opts.minimize) === 'function' && opts.minimize.call(self[0]); }); } else { //restore dialog.removeData('minimized').before(mnode.css(Object.assign({'position': 'absolute'}, mnode.offset()))); fm.toFront(mnode); mnode.animate(Object.assign({ width: dialog.width(), height: dialog.height() }, doffset), function() { dialog.show(); fm.toFront(dialog); mnode.remove(); posCheck(); checkEditing(); dialog.trigger('resize', {init: true}); typeof(opts.minimize) === 'function' && opts.minimize.call(self[0]); }); } }); titlebar.on('dblclick', function(e) { $(this).children('.elfinder-titlebar-minimize').trigger('mousedown'); }).prepend(btn); dialog.on('togleminimize', function() { btn.trigger('mousedown'); }); } } }, dialog = $('
          ') .hide() .append(self) .appendTo(elfNode) .draggable({ containment : fm.options.dialogContained? elfNode : null, handle : '.ui-dialog-titlebar', start : function() { evCover.show(); }, drag : function(e, ui) { var top = ui.offset.top, left = ui.offset.left; if (top < 0) { ui.position.top = ui.position.top - top; } if (left < 0) { ui.position.left = ui.position.left - left; } if (fm.options.dialogContained) { ui.position.top < 0 && (ui.position.top = 0); ui.position.left < 0 && (ui.position.left = 0); } }, stop : function(e, ui) { evCover.hide(); dialog.css({height : opts.height}); self.data('draged', true); } }) .css({ width : opts.width, height : opts.height, minWidth : opts.minWidth, minHeight : opts.minHeight, maxWidth : opts.maxWidth, maxHeight : opts.maxHeight }) .on('touchstart touchmove touchend click dblclick mouseup mouseenter mouseleave mouseout mouseover mousemove', function(e) { // stopPropagation of user action events !propagationEvents[e.type] && e.stopPropagation(); }) .on('mousedown', function(e) { !propagationEvents[e.type] && e.stopPropagation(); requestAnimationFrame(function() { if (dialog.is(':visible') && !dialog.hasClass('elfinder-frontmost')) { toFocusNode = $(':focus'); if (!toFocusNode.length) { toFocusNode = void(0); } dialog.trigger('totop'); } }); }) .on('open', function() { dialog.data('margin-y', self.outerHeight(true) - self.height()); if (syncSize.enabled) { if (opts.height && opts.height !== 'auto') { dialog.trigger('resize', {init: true}); } if (!syncSize.defaultSize) { syncSize.defaultSize = { width: self.width(), height: self.height() }; } fitSize(dialog); dialog.trigger('resize').trigger('posinit'); elfNode.on('resize.'+fm.namespace, dialog, syncFunc); } if (!dialog.hasClass(clnotify)) { elfNode.children('.'+cldialog+':visible:not(.'+clnotify+')').each(function() { var d = $(this), top = parseInt(d.css('top')), left = parseInt(d.css('left')), _top = parseInt(dialog.css('top')), _left = parseInt(dialog.css('left')), ct = Math.abs(top - _top) < 10, cl = Math.abs(left - _left) < 10; if (d[0] != dialog[0] && (ct || cl)) { dialog.css({ top : ct ? (top + 10) : _top, left : cl ? (left + 10) : _left }); } }); } if (dialog.data('modal')) { dialog.addClass(clmodal); fm.getUI('overlay').elfinderoverlay('show'); } dialog.trigger('totop'); opts.openMaximized && fm.toggleMaximize(dialog); fm.trigger('dialogopen', {dialog: dialog}); typeof(opts.open) == 'function' && $.proxy(opts.open, self[0])(); if (opts.closeOnEscape) { $(document).on('keydown.'+id, function(e) { if (e.keyCode == $.ui.keyCode.ESCAPE && dialog.hasClass('elfinder-frontmost')) { self.elfinderdialog('close'); } }); } dialog.hasClass(fm.res('class', 'editing')) && checkEditing(); }) .on('close', function(e) { var dialogs, dfd; if (opts.beforeclose && typeof opts.beforeclose === 'function') { dfd = opts.beforeclose(); if (!dfd || !dfd.promise) { dfd = !dfd? $.Deferred().reject() : $.Deferred().resolve(); } } else { dfd = $.Deferred().resolve(); } dfd.done(function() { syncSize.enabled && elfNode.off('resize.'+fm.namespace, syncFunc); if (opts.closeOnEscape) { $(document).off('keyup.'+id); } if (opts.allowMaximize) { fm.toggleMaximize(dialog, false); } fm.toHide(dialog); dialog.data('modal') && fm.getUI('overlay').elfinderoverlay('hide'); if (typeof(opts.close) == 'function') { $.proxy(opts.close, self[0])(); } if (opts.destroyOnClose && dialog.parent().length) { dialog.hide().remove(); } // get focus to next dialog dialogs = elfNode.children('.'+cldialog+':visible'); dialog.hasClass(fm.res('class', 'editing')) && checkEditing(); }); }) .on('totop frontmost', function() { var s = fm.storage('autoFocusDialog'); dialog.data('focusOnMouseOver', s? (s > 0) : fm.options.uiOptions.dialog.focusOnMouseOver); if (dialog.data('minimized')) { titlebar.children('.elfinder-titlebar-minimize').trigger('mousedown'); } if (!dialog.data('modal') && fm.getUI('overlay').is(':visible')) { fm.getUI('overlay').before(dialog); } else { fm.toFront(dialog); } elfNode.children('.'+cldialog+':not(.'+clmodal+')').removeClass(clactive); dialog.addClass(clactive); ! fm.UA.Mobile && (toFocusNode || tabstopNext()).trigger('focus'); toFocusNode = void(0); }) .on('posinit', function() { var css = opts.position, nodeOffset, minTop, minLeft, outerSize, win, winSize, nodeFull; if (dialog.hasClass('elfinder-maximized')) { return; } if (! css && ! dialog.data('resizing')) { nodeFull = elfNode.hasClass('elfinder-fullscreen') || fm.options.enableAlways; dialog.css(nodeFull? { maxWidth : '100%', maxHeight : '100%', overflow : 'auto' } : restoreStyle); if (fm.UA.Mobile && !nodeFull && dialog.data('rotated') === fm.UA.Rotated) { return; } dialog.data('rotated', fm.UA.Rotated); win = $(window); nodeOffset = elfNode.offset(); outerSize = { width : dialog.outerWidth(true), height: dialog.outerHeight(true) }; outerSize.right = nodeOffset.left + outerSize.width; outerSize.bottom = nodeOffset.top + outerSize.height; winSize = { scrLeft: win.scrollLeft(), scrTop : win.scrollTop(), width : win.width(), height : win.height() }; winSize.right = winSize.scrLeft + winSize.width; winSize.bottom = winSize.scrTop + winSize.height; if (fm.options.dialogContained || nodeFull) { minTop = 0; minLeft = 0; } else { minTop = nodeOffset.top * -1 + winSize.scrTop; minLeft = nodeOffset.left * -1 + winSize.scrLeft; } css = { top : outerSize.height >= winSize.height? minTop : Math.max(minTop, parseInt((elfNode.height() - outerSize.height)/2 - 42)), left : outerSize.width >= winSize.width ? minLeft : Math.max(minLeft, parseInt((elfNode.width() - outerSize.width)/2)) }; if (outerSize.right + css.left > winSize.right) { css.left = Math.max(minLeft, winSize.right - outerSize.right); } if (outerSize.bottom + css.top > winSize.bottom) { css.top = Math.max(minTop, winSize.bottom - outerSize.bottom); } } if (opts.absolute) { css.position = 'absolute'; } css && dialog.css(css); }) .on('resize', function(e, data) { var oh = 0, init = data && data.init, h, minH, maxH, autoH; if ((data && (data.minimize || data.maxmize)) || dialog.data('minimized')) { return; } e.stopPropagation(); e.preventDefault(); dialog.children('.ui-widget-header,.ui-dialog-buttonpane').each(function() { oh += $(this).outerHeight(true); }); autoH = (opts.height === 'auto')? true : false; if (autoH) { self.css({'max-height': '', 'height': 'auto'}); } if (!init && syncSize.enabled && !e.originalEvent && !dialog.hasClass('elfinder-maximized')) { h = dialog.height(); minH = dialog.css('min-height') || h; maxH = dialog.css('max-height') || h; if (minH.match(/%/)) { minH = Math.floor((parseInt(minH) / 100) * dialog.parent().height()); } else { minH = parseInt(minH); } if (maxH.match(/%/)) { maxH = Math.floor((parseInt(maxH) / 100) * dialog.parent().height()); } else { maxH = parseInt(maxH); } h = Math.min((autoH? dialog.height() : syncSize.defaultSize.height), Math.max(maxH, minH) - oh - dialog.data('margin-y')); } else { h = dialog.height() - oh - dialog.data('margin-y'); } self.css(autoH? 'max-height' : 'height', h); if (init) { return; } posCheck(); minH = self.height(); minH = (h < minH)? (minH + oh + dialog.data('margin-y')) : opts.minHeight; dialog.css('min-height', minH); dialog.data('hasResizable') && dialog.resizable('option', { minHeight: minH }); if (typeof(opts.resize) === 'function') { $.proxy(opts.resize, self[0])(e, data); } }) .on('tabstopsInit', tabstopsInit) .on('focus', '.'+cltabstop, function() { $(this).addClass(clhover).parent('label').addClass(clhover); this.id && $(this).parent().find('label[for='+this.id+']').addClass(clhover); }) .on('click', 'select.'+cltabstop, function() { var node = $(this); node.data('keepFocus')? node.removeData('keepFocus') : node.data('keepFocus', true); }) .on('blur', '.'+cltabstop, function() { $(this).removeClass(clhover).removeData('keepFocus').parent('label').removeClass(clhover); this.id && $(this).parent().find('label[for='+this.id+']').removeClass(clhover); }) .on('mouseenter mouseleave', '.'+cltabstop+',label', function(e) { var $this = $(this), labelfor; if (this.nodeName === 'LABEL') { if (!$this.children('.'+cltabstop).length && (!(labelfor = $this.attr('for')) || !$('#'+labelfor).hasClass(cltabstop))) { return; } } if (opts.btnHoverFocus && dialog.data('focusOnMouseOver')) { if (e.type === 'mouseenter' && ! $(':focus').data('keepFocus')) { $this.trigger('focus'); } } else { $this.toggleClass(clhover, e.type == 'mouseenter'); } }) .on('keydown', '.'+cltabstop, function(e) { var $this = $(this), esc, move, moveTo; if ($this.is(':focus')) { esc = e.keyCode === $.ui.keyCode.ESCAPE; if (e.keyCode === $.ui.keyCode.ENTER) { e.preventDefault(); $this.trigger('click'); } else if (((e.keyCode === $.ui.keyCode.TAB) && e.shiftKey) || e.keyCode === $.ui.keyCode.LEFT || e.keyCode == $.ui.keyCode.UP) { move = 'prev'; } else if (e.keyCode === $.ui.keyCode.TAB || e.keyCode == $.ui.keyCode.RIGHT || e.keyCode == $.ui.keyCode.DOWN) { move = 'next'; } if (move && ( ($this.is('textarea') && !(e.ctrlKey || e.metaKey)) || ($this.is('select,span.ui-slider-handle') && e.keyCode !== $.ui.keyCode.TAB) || ($this.is('input:not(:checkbox,:radio)') && (!(e.ctrlKey || e.metaKey) && e.keyCode === $.ui.keyCode[move === 'prev'? 'LEFT':'RIGHT'])) ) ) { e.stopPropagation(); return; } if (!esc) { e.stopPropagation(); } else if ($this.is('input:not(:checkbox,:radio),textarea')) { if ($this.val() !== '') { $this.val(''); e.stopPropagation(); } } if (move) { e.preventDefault(); (move === 'prev'? tabstopPrev : tabstopNext)(this).trigger('focus'); } } }) .data({modal: opts.modal}), posCheck = function() { var node = fm.getUI(), pos; if (node.hasClass('elfinder-fullscreen')) { pos = dialog.position(); dialog.css('top', Math.max(Math.min(Math.max(pos.top, 0), node.height() - 100), 0)); dialog.css('left', Math.max(Math.min(Math.max(pos.left, 0), node.width() - 200), 0)); } }, maxSize, toFocusNode; dialog.prepend(titlebar); makeHeaderBtn(); $.each(opts.buttons, function(name, cb) { var button = $('') .on('click', $.proxy(cb, self[0])); if (cb._cssClass) { button.addClass(cb._cssClass); } if (platformWin) { buttonset.append(button); } else { buttonset.prepend(button); } }); if (buttonset.children().length) { dialog.append(buttonpane); dialog.show(); buttonpane.find('button').each(function(i, btn) { btnWidth += $(btn).outerWidth(true); }); dialog.hide(); btnWidth += 20; if (dialog.width() < btnWidth) { dialog.width(btnWidth); } } dialog.append(evCover); if (syncSize.enabled) { delta.width = dialog.outerWidth(true) - dialog.width() + ((dialog.outerWidth() - dialog.width()) / 2); delta.height = dialog.outerHeight(true) - dialog.height() + ((dialog.outerHeight() - dialog.height()) / 2); } if (fm.options.dialogContained) { maxSize = { maxWidth: elfNode.width() - delta.width, maxHeight: elfNode.height() - delta.height }; opts.maxWidth = opts.maxWidth? Math.min(maxSize.maxWidth, opts.maxWidth) : maxSize.maxWidth; opts.maxHeight = opts.maxHeight? Math.min(maxSize.maxHeight, opts.maxHeight) : maxSize.maxHeight; dialog.css(maxSize); } restoreStyle = { maxWidth : dialog.css('max-width'), maxHeight : dialog.css('max-height'), overflow : dialog.css('overflow') }; if (opts.resizable) { dialog.resizable({ minWidth : opts.minWidth, minHeight : opts.minHeight, maxWidth : opts.maxWidth, maxHeight : opts.maxHeight, start : function() { evCover.show(); if (dialog.data('resizing') !== true && dialog.data('resizing')) { clearTimeout(dialog.data('resizing')); } dialog.data('resizing', true); }, stop : function(e, ui) { evCover.hide(); dialog.data('resizing', setTimeout(function() { dialog.data('resizing', false); }, 200)); if (syncSize.enabled) { syncSize.defaultSize = { width: self.width(), height: self.height() }; } } }).data('hasResizable', true); } numberToTel(); tabstopsInit(); typeof(opts.create) == 'function' && $.proxy(opts.create, this)(); if (opts.autoOpen) { if (opts.open) { requestAnimationFrame(function() { self.elfinderdialog('open'); }); } else { self.elfinderdialog('open'); } } if (opts.resize) { fm.bind('themechange', function() { setTimeout(function() { dialog.data('margin-y', self.outerHeight(true) - self.height()); dialog.trigger('resize', {init: true}); }, 300); }); } }); return this; }; $.fn.elfinderdialog.defaults = { cssClass : '', title : '', modal : false, resizable : true, autoOpen : true, closeOnEscape : true, destroyOnClose : false, buttons : {}, btnHoverFocus : true, position : null, absolute : false, width : 320, height : 'auto', minWidth : 200, minHeight : 70, maxWidth : null, maxHeight : null, allowMinimize : 'auto', allowMaximize : false, openMaximized : false, headerBtnPos : 'auto', headerBtnOrder : 'auto', optimizeNumber : true, propagationEvents : ['mousemove', 'mouseup'] }; PK!…ªQ?file-manager-advanced/application/library/js/ui/uploadButton.jsnu„[µü¤/** * @class elFinder toolbar's button tor upload file * * @author Dmitry (dio) Levashov **/ $.fn.elfinderuploadbutton = function(cmd) { "use strict"; return this.each(function() { var fm = cmd.fm, button = $(this).elfinderbutton(cmd) .off('click'), form = $('
          ').appendTo(button), input = $('') .on('change', function() { var _input = $(this); if (_input.val()) { fm.exec('upload', {input : _input.remove()[0]}, void(0), fm.cwd().hash); input.clone(true).appendTo(form); } }) .on('dragover', function(e) { e.originalEvent.dataTransfer.dropEffect = 'copy'; }), tm; form.append(input.clone(true)); cmd.change(function() { tm && cancelAnimationFrame(tm); tm = requestAnimationFrame(function() { var toShow = cmd.disabled(); if (form.is('visible')) { !toShow && form.hide(); } else { toShow && form.show(); } }); }) .change(); }); }; PK!ï`¯øø=file-manager-advanced/application/library/js/ui/viewbutton.jsnu„[µü¤/** * @class elFinder toolbar button to switch current directory view. * * @author Dmitry (dio) Levashov **/ $.fn.elfinderviewbutton = function(cmd) { "use strict"; return this.each(function() { var button = $(this).elfinderbutton(cmd), icon = button.children('.elfinder-button-icon'), text = button.children('.elfinder-button-text'), tm; cmd.change(function() { tm && cancelAnimationFrame(tm); tm = requestAnimationFrame(function() { var icons = cmd.value == 'icons'; icon.toggleClass('elfinder-button-icon-view-list', icons); cmd.className = icons? 'view-list' : ''; cmd.title = cmd.fm.i18n(icons ? 'viewlist' : 'viewicons'); button.attr('title', cmd.title); text.html(cmd.title); }); }); }); }; PK! ýЂ  ;file-manager-advanced/application/library/js/ui/workzone.jsnu„[µü¤/** * @class elfinderworkzone - elFinder container for nav and current directory * @author Dmitry (dio) Levashov **/ $.fn.elfinderworkzone = function(fm) { "use strict"; var cl = 'elfinder-workzone'; this.not('.'+cl).each(function() { var wz = $(this).addClass(cl), prevH = Math.round(wz.height()), parent = wz.parent(), setDelta = function() { wdelta = wz.outerHeight(true) - wz.height(); }, fitsize = function(e) { var height = parent.height() - wdelta, style = parent.attr('style'), curH = Math.round(wz.height()); if (e) { e.preventDefault(); e.stopPropagation(); } parent.css('overflow', 'hidden') .children(':visible:not(.'+cl+')').each(function() { var ch = $(this); if (ch.css('position') != 'absolute' && ch.css('position') != 'fixed') { height -= ch.outerHeight(true); } }); parent.attr('style', style || ''); height = Math.max(0, Math.round(height)); if (prevH !== height || curH !== height) { prevH = Math.round(wz.height()); wz.height(height); fm.trigger('wzresize'); } }, cssloaded = function() { wdelta = wz.outerHeight(true) - wz.height(); fitsize(); }, wdelta; setDelta(); parent.on('resize.' + fm.namespace, fitsize); fm.one('cssloaded', cssloaded) .bind('uiresize', fitsize) .bind('themechange', setDelta); }); return this; }; PK!lËÎYAA9file-manager-advanced/application/library/js/ui/button.jsnu„[µü¤/** * @class elFinder toolbar button widget. * If command has variants - create menu * * @author Dmitry (dio) Levashov **/ $.fn.elfinderbutton = function(cmd) { "use strict"; return this.each(function() { var c = 'class', fm = cmd.fm, disabled = fm.res(c, 'disabled'), active = fm.res(c, 'active'), hover = fm.res(c, 'hover'), item = 'elfinder-button-menu-item', selected = 'elfinder-button-menu-item-selected', menu, text = $(''+cmd.title+''), prvCname = cmd.className? cmd.className : cmd.name, button = $(this).addClass('ui-state-default elfinder-button') .attr('title', cmd.title) .append('', text) .on('mouseenter mouseleave', function(e) { !button.hasClass(disabled) && button[e.type == 'mouseleave' ? 'removeClass' : 'addClass'](hover);}) .on('click', function(e) { if (!button.hasClass(disabled)) { if (menu && cmd.variants.length >= 1) { // close other menus menu.is(':hidden') && fm.getUI().click(); e.stopPropagation(); menu.css(getMenuOffset()).slideToggle({ duration: 100, done: function(e) { fm[menu.is(':visible')? 'toFront' : 'toHide'](menu); } }); } else { fm.exec(cmd.name, getSelected(), {_userAction: true, _currentType: 'toolbar', _currentNode: button }); } } }), hideMenu = function() { fm.toHide(menu); }, getMenuOffset = function() { var fmNode = fm.getUI(), baseOffset = fmNode.offset(), buttonOffset = button.offset(); return { top : buttonOffset.top - baseOffset.top, left : buttonOffset.left - baseOffset.left, maxHeight : fmNode.height() - 40 }; }, getSelected = function() { var sel = fm.selected(), cwd; if (!sel.length) { if (cwd = fm.cwd()) { sel = [ fm.cwd().hash ]; } else { sel = void(0); } } return sel; }, tm; text.hide(); // set self button object to cmd object cmd.button = button; // if command has variants create menu if (Array.isArray(cmd.variants)) { button.addClass('elfinder-menubutton'); menu = $('
          ') .hide() .appendTo(fm.getUI()) .on('mouseenter mouseleave', '.'+item, function() { $(this).toggleClass(hover); }) .on('click', '.'+item, function(e) { var opts = $(this).data('value'); e.preventDefault(); e.stopPropagation(); button.removeClass(hover); fm.toHide(menu); if (typeof opts === 'undefined') { opts = {}; } if (typeof opts === 'object') { opts._userAction = true; } fm.exec(cmd.name, getSelected(), opts); }) .on('close', hideMenu); fm.bind('disable select', hideMenu).getUI().on('click', hideMenu); cmd.change(function() { menu.html(''); $.each(cmd.variants, function(i, variant) { menu.append($('
          '+variant[1]+'
          ').data('value', variant[0]).addClass(variant[0] == cmd.value ? selected : '')); }); }); } cmd.change(function() { var cName; tm && cancelAnimationFrame(tm); tm = requestAnimationFrame(function() { if (cmd.disabled()) { button.removeClass(active+' '+hover).addClass(disabled); } else { button.removeClass(disabled); button[cmd.active() ? 'addClass' : 'removeClass'](active); } if (cmd.syncTitleOnChange) { cName = cmd.className? cmd.className : cmd.name; if (prvCname !== cName) { button.children('.elfinder-button-icon').removeClass('elfinder-button-icon-' + prvCname).addClass('elfinder-button-icon-' + cName); if (menu) { menu.removeClass('elfinder-button-' + prvCname + '-menu').addClass('elfinder-button-' + cName + '-menu'); } prvCname = cName; } text.html(cmd.title); button.attr('title', cmd.title); } }); }) .change(); }); }; PK!ó�Â\»[»[6file-manager-advanced/application/library/js/ui/cwd.jsnu„[µü¤/** * elFinder current working directory ui. * * @author Dmitry (dio) Levashov **/ $.fn.elfindercwd = function(fm, options) { "use strict"; this.not('.elfinder-cwd').each(function() { // fm.time('cwdLoad'); var mobile = fm.UA.Mobile, list = fm.viewType == 'list', undef = 'undefined', /** * Select event full name * * @type String **/ evtSelect = 'select.'+fm.namespace, /** * Unselect event full name * * @type String **/ evtUnselect = 'unselect.'+fm.namespace, /** * Disable event full name * * @type String **/ evtDisable = 'disable.'+fm.namespace, /** * Disable event full name * * @type String **/ evtEnable = 'enable.'+fm.namespace, c = 'class', /** * File css class * * @type String **/ clFile = fm.res(c, 'cwdfile'), /** * Selected css class * * @type String **/ fileSelector = '.'+clFile, /** * Selected css class * * @type String **/ clSelected = 'ui-selected', /** * Disabled css class * * @type String **/ clDisabled = fm.res(c, 'disabled'), /** * Draggable css class * * @type String **/ clDraggable = fm.res(c, 'draggable'), /** * Droppable css class * * @type String **/ clDroppable = fm.res(c, 'droppable'), /** * Hover css class * * @type String **/ clHover = fm.res(c, 'hover'), /** * Active css class * * @type String **/ clActive = fm.res(c, 'active'), /** * Hover css class * * @type String **/ clDropActive = fm.res(c, 'adroppable'), /** * Css class for temporary nodes (for mkdir/mkfile) commands * * @type String **/ clTmp = clFile+'-tmp', /** * Select checkbox css class * * @type String */ clSelChk = 'elfinder-cwd-selectchk', /** * Number of thumbnails to load in one request (new api only) * * @type Number **/ tmbNum = fm.options.loadTmbs > 0 ? fm.options.loadTmbs : 5, /** * Current search query. * * @type String */ query = '', /** * Currect clipboard(cut) hashes as object key * * @type Object */ clipCuts = {}, /** * Parents hashes of cwd * * @type Array */ cwdParents = [], /** * cwd current hashes * * @type Array */ cwdHashes = [], /** * incsearch current hashes * * @type Array */ incHashes = void 0, /** * Custom columns name and order * * @type Array */ customCols = [], /** * Current clicked element id of first time for dblclick * * @type String */ curClickId = '', /** * Custom columns builder * * @type Function */ customColsBuild = function() { var cols = ''; for (var i = 0; i < customCols.length; i++) { cols += '{' + customCols[i] + '}'; } return cols; }, /** * Make template.row from customCols * * @type Function */ makeTemplateRow = function() { return '
          {marker}{name}
          '+selectCheckbox+''+customColsBuild()+''; }, selectCheckbox = ($.map(options.showSelectCheckboxUA, function(t) {return (fm.UA[t] || t.match(/^all$/i))? true : null;}).length)? '
          ' : '', colResizing = false, colWidth = null, /** * Table header height */ thHeight, /** * File templates * * @type Object **/ templates = { icon : '
          {marker}
          {name}
          '+selectCheckbox+'
          ', row : '' }, permsTpl = fm.res('tpl', 'perms'), lockTpl = fm.res('tpl', 'lock'), symlinkTpl = fm.res('tpl', 'symlink'), /** * Template placeholders replacement rules * * @type Object **/ replacement = { id : function(f) { return fm.cwdHash2Id(f.hash); }, name : function(f) { var name = fm.escape(f.i18 || f.name); !list && (name = name.replace(/([_.])/g, '​$1')); return name; }, nametitle : function(f) { return fm.escape(f.i18 || f.name); }, permsclass : function(f) { return fm.perms2class(f); }, perm : function(f) { return fm.formatPermissions(f); }, dirclass : function(f) { var cName = f.mime == 'directory' ? 'directory' : ''; f.isroot && (cName += ' isroot'); f.csscls && (cName += ' ' + fm.escape(f.csscls)); options.getClass && (cName += ' ' + options.getClass(f)); return cName; }, style : function(f) { return f.icon? fm.getIconStyle(f) : ''; }, mime : function(f) { var cName = fm.mime2class(f.mime); f.icon && (cName += ' elfinder-cwd-bgurl'); return cName; }, size : function(f) { return (f.mime === 'directory' && !f.size)? '-' : fm.formatSize(f.size); }, date : function(f) { return fm.formatDate(f); }, kind : function(f) { return fm.mime2kind(f); }, mode : function(f) { return f.perm? fm.formatFileMode(f.perm) : ''; }, modestr : function(f) { return f.perm? fm.formatFileMode(f.perm, 'string') : ''; }, modeoct : function(f) { return f.perm? fm.formatFileMode(f.perm, 'octal') : ''; }, modeboth : function(f) { return f.perm? fm.formatFileMode(f.perm, 'both') : ''; }, marker : function(f) { return (f.alias || f.mime == 'symlink-broken' ? symlinkTpl : '')+(!f.read || !f.write ? permsTpl : '')+(f.locked ? lockTpl : ''); }, tooltip : function(f) { var title = fm.formatDate(f) + (f.size > 0 ? ' ('+fm.formatSize(f.size)+')' : ''), info = ''; if (query && f.path) { info = fm.escape(f.path.replace(/\/[^\/]*$/, '')); } else { info = f.tooltip? fm.escape(f.tooltip).replace(/\r/g, ' ') : ''; } if (list) { info += (info? ' ' : '') + fm.escape(f.i18 || f.name); } return info? info + ' ' + title : title; } }, /** * Type badge CSS added flag * * @type Object */ addedBadges = {}, /** * Type badge style sheet element * * @type Object */ addBadgeStyleSheet, /** * Add type badge CSS into 'head' * * @type Fundtion */ addBadgeStyle = function(mime, name) { var sel, ext, type; if (mime && ! addedBadges[mime]) { if (typeof addBadgeStyleSheet === 'undefined') { if ($('#elfinderAddBadgeStyle'+fm.namespace).length) { $('#elfinderAddBadgeStyle'+fm.namespace).remove(); } addBadgeStyleSheet = $('').insertBefore($('head').children(':first')).get(0).sheet || null; } if (addBadgeStyleSheet) { mime = mime.toLowerCase(); type = mime.split('/'); ext = fm.escape(fm.mimeTypes[mime] || (name.replace(/.bac?k$/i, '').match(/\.([^.]+)$/) || ['',''])[1]); if (ext) { sel = '.elfinder-cwd-icon-' + type[0].replace(/(\.|\+)/g, '-'); if (typeof type[1] !== 'undefined') { sel += '.elfinder-cwd-icon-' + type[1].replace(/(\.|\+)/g, '-'); } try { addBadgeStyleSheet.insertRule(sel + ':before{content:"' + ext.toLowerCase() + '"}', 0); } catch(e) {} } addedBadges[mime] = true; } } }, /** * Return file html * * @param Object file info * @return String **/ itemhtml = function(f) { f.mime && f.mime !== 'directory' && !addedBadges[f.mime] && addBadgeStyle(f.mime, f.name); return templates[list ? 'row' : 'icon'] .replace(/\{([a-z0-9_]+)\}/g, function(s, e) { return replacement[e] ? replacement[e](f, fm) : (f[e] ? f[e] : ''); }); }, /** * jQueery node that will be selected next * * @type Object jQuery node */ selectedNext = $(), /** * Flag. Required for msie to avoid unselect files on dragstart * * @type Boolean **/ selectLock = false, /** * Move selection to prev/next file * * @param String move direction * @param Boolean append to current selection * @return void * @rise select */ select = function(keyCode, append) { var code = $.ui.keyCode, prev = keyCode == code.LEFT || keyCode == code.UP, sel = cwd.find('[id].'+clSelected), selector = prev ? 'first:' : 'last', s, n, sib, top, left; function sibling(n, direction) { return n[direction+'All']('[id]:not(.'+clDisabled+'):not(.elfinder-cwd-parent):first'); } if (sel.length) { s = sel.filter(prev ? ':first' : ':last'); sib = sibling(s, prev ? 'prev' : 'next'); if (!sib.length) { // there is no sibling on required side - do not move selection n = s; } else if (list || keyCode == code.LEFT || keyCode == code.RIGHT) { // find real prevoius file n = sib; } else { // find up/down side file in icons view top = s.position().top; left = s.position().left; n = s; if (prev) { do { n = n.prev('[id]'); } while (n.length && !(n.position().top < top && n.position().left <= left)); if (n.hasClass(clDisabled)) { n = sibling(n, 'next'); } } else { do { n = n.next('[id]'); } while (n.length && !(n.position().top > top && n.position().left >= left)); if (n.hasClass(clDisabled)) { n = sibling(n, 'prev'); } // there is row before last one - select last file if (!n.length) { sib = cwd.find('[id]:not(.'+clDisabled+'):last'); if (sib.position().top > top) { n = sib; } } } } // !append && unselectAll(); } else { if (selectedNext.length) { n = prev? selectedNext.prev() : selectedNext; } else { // there are no selected file - select first/last one n = cwd.find('[id]:not(.'+clDisabled+'):not(.elfinder-cwd-parent):'+(prev ? 'last' : 'first')); } } if (n && n.length && !n.hasClass('elfinder-cwd-parent')) { if (s && append) { // append new files to selected n = s.add(s[prev ? 'prevUntil' : 'nextUntil']('#'+n.attr('id'))).add(n); } else { // unselect selected files sel.trigger(evtUnselect); } // select file(s) n.trigger(evtSelect); // set its visible scrollToView(n.filter(prev ? ':first' : ':last')); // update cache/view trigger(); } }, selectedFiles = {}, selectFile = function(hash) { fm.cwdHash2Elm(hash).trigger(evtSelect); }, allSelected = false, selectAll = function() { var phash = fm.cwd().hash; selectCheckbox && selectAllCheckbox.find('input').prop('checked', true); fm.lazy(function() { var files; if (fm.maxTargets && (incHashes || cwdHashes).length > fm.maxTargets) { unselectAll({ notrigger: true }); files = $.map(incHashes || cwdHashes, function(hash) { return fm.file(hash) || null; }); files = files.slice(0, fm.maxTargets); selectedFiles = {}; $.each(files, function(i, v) { selectedFiles[v.hash] = true; fm.cwdHash2Elm(v.hash).trigger(evtSelect); }); fm.toast({mode: 'warning', msg: fm.i18n(['errMaxTargets', fm.maxTargets])}); } else { cwd.find('[id]:not(.'+clSelected+'):not(.elfinder-cwd-parent)').trigger(evtSelect); selectedFiles = fm.arrayFlip(incHashes || cwdHashes, true); } trigger(); selectCheckbox && selectAllCheckbox.data('pending', false); }, 0, {repaint: true}); }, /** * Unselect all files * * @param Object options * @return void */ unselectAll = function(opts) { var o = opts || {}; selectCheckbox && selectAllCheckbox.find('input').prop('checked', false); if (Object.keys(selectedFiles).length) { selectLock = false; selectedFiles = {}; cwd.find('[id].'+clSelected).trigger(evtUnselect); selectCheckbox && cwd.find('input:checkbox.'+clSelChk).prop('checked', false); } !o.notrigger && trigger(); selectCheckbox && selectAllCheckbox.data('pending', false); cwd.removeClass('elfinder-cwd-allselected'); }, selectInvert = function() { var invHashes = {}; if (allSelected) { unselectAll(); } else if (! Object.keys(selectedFiles).length) { selectAll(); } else { $.each((incHashes || cwdHashes), function(i, h) { var itemNode = fm.cwdHash2Elm(h); if (! selectedFiles[h]) { invHashes[h] = true; itemNode.length && itemNode.trigger(evtSelect); } else { itemNode.length && itemNode.trigger(evtUnselect); } }); selectedFiles = invHashes; trigger(); } }, /** * Return selected files hashes list * * @return Array */ selected = function() { return Object.keys(selectedFiles); }, /** * Last selected node id * * @type String|Void */ lastSelect = void 0, /** * Fire elfinder "select" event and pass selected files to it * * @return void */ trigger = function() { var selected = Object.keys(selectedFiles), opts = { selected : selected, origin : 'cwd' }; if (oldSchoolItem && (selected.length > 1 || selected[0] !== fm.cwdId2Hash( oldSchoolItem.attr('id'))) && oldSchoolItem.hasClass(clSelected)) { oldSchoolItem.trigger(evtUnselect); } allSelected = selected.length && (selected.length === (incHashes || cwdHashes).length) && (!fm.maxTargets || selected.length <= fm.maxTargets); if (selectCheckbox) { selectAllCheckbox.find('input').prop('checked', allSelected); cwd[allSelected? 'addClass' : 'removeClass']('elfinder-cwd-allselected'); } if (allSelected) { opts.selectall = true; } else if (! selected.length) { opts.unselectall = true; } fm.trigger('select', opts); }, /** * Scroll file to set it visible * * @param DOMElement file/dir node * @return void */ scrollToView = function(o, blink) { if (! o.length) { return; } var ftop = o.position().top, fheight = o.outerHeight(true), wtop = wrapper.scrollTop(), wheight = wrapper.get(0).clientHeight, thheight = tableHeader? tableHeader.outerHeight(true) : 0; if (ftop + thheight + fheight > wtop + wheight) { wrapper.scrollTop(parseInt(ftop + thheight + fheight - wheight)); } else if (ftop < wtop) { wrapper.scrollTop(ftop); } list && wrapper.scrollLeft(0); !!blink && fm.resources.blink(o, 'lookme'); }, /** * Files we get from server but not show yet * * @type Array **/ buffer = [], /** * Extra data of buffer * * @type Object **/ bufferExt = {}, /** * Return index of elements with required hash in buffer * * @param String file hash * @return Number */ index = function(hash) { var l = buffer.length; while (l--) { if (buffer[l].hash == hash) { return l; } } return -1; }, /** * Scroll start event name * * @type String **/ scrollStartEvent = 'elfscrstart', /** * Scroll stop event name * * @type String **/ scrollEvent = 'elfscrstop', scrolling = false, /** * jQuery UI selectable option * * @type Object */ selectableOption = { disabled : true, filter : '[id]:first', stop : trigger, delay : 250, appendTo : 'body', autoRefresh: false, selected : function(e, ui) { $(ui.selected).trigger(evtSelect); }, unselected : function(e, ui) { $(ui.unselected).trigger(evtUnselect); } }, /** * hashes of items displayed in current view * * @type Object ItemHash => DomId */ inViewHashes = {}, /** * Processing when the current view is changed (On open, search, scroll, resize etc.) * * @return void */ wrapperRepaint = function(init, recnt) { if (!bufferExt.renderd) { return; } var firstNode = (list? cwd.find('tbody:first') : cwd).children('[id]'+(options.oldSchool? ':not(.elfinder-cwd-parent)' : '')+':first'); if (!firstNode.length) { return; } var selectable = cwd.data('selectable'), rec = (function() { var wos = wrapper.offset(), ww = wrapper.width(), w = $(window), x = firstNode.width() / 2, l = Math.min(wos.left - w.scrollLeft() + (fm.direction === 'ltr'? x : ww - x), wos.left + ww - 10), t = wos.top - w.scrollTop() + 10 + (list? thHeight : 0); return {left: Math.max(0, Math.round(l)), top: Math.max(0, Math.round(t))}; })(), tgt = init? firstNode : $(document.elementFromPoint(rec.left , rec.top)), ids = {}, tmbs = {}, multi = 5, cnt = Math.ceil((bufferExt.hpi? Math.ceil((wz.data('rectangle').height / bufferExt.hpi) * 1.5) : showFiles) / multi), chk = function() { var id, hash, file, i; for (i = 0; i < multi; i++) { id = tgt.attr('id'); if (id) { bufferExt.getTmbs = []; hash = fm.cwdId2Hash(id); inViewHashes[hash] = id; // for tmbs if (bufferExt.attachTmbs[hash]) { tmbs[hash] = bufferExt.attachTmbs[hash]; } // for selectable selectable && (ids[id] = true); } // next node tgt = tgt.next(); if (!tgt.length) { break; } } }, done = function() { var idsArr; if (cwd.data('selectable')) { Object.assign(ids, selectedFiles); idsArr = Object.keys(ids); if (idsArr.length) { selectableOption.filter = '#'+idsArr.join(', #'); cwd.selectable('enable').selectable('option', {filter : selectableOption.filter}).selectable('refresh'); } } if (Object.keys(tmbs).length) { bufferExt.getTmbs = []; attachThumbnails(tmbs); } }, setTarget = function() { if (!tgt.hasClass(clFile)) { tgt = tgt.closest(fileSelector); } }, arr, widget; inViewHashes = {}; selectable && cwd.selectable('option', 'disabled'); if (tgt.length) { if (!tgt.hasClass(clFile) && !tgt.closest(fileSelector).length) { // dialog, serach button etc. widget = fm.getUI().find('.ui-dialog:visible,.ui-widget:visible'); if (widget.length) { widget.hide(); tgt = $(document.elementFromPoint(rec.left , rec.top)); widget.show(); } else { widget = null; } } setTarget(); if (!tgt.length) { // try search 5px down widget && widget.hide(); tgt = $(document.elementFromPoint(rec.left , rec.top + 5)); widget && widget.show(); setTarget(); } } if (tgt.length) { if (tgt.attr('id')) { if (init) { for (var i = 0; i < cnt; i++) { chk(); if (! tgt.length) { break; } } done(); } else { bufferExt.repaintJob && bufferExt.repaintJob.state() === 'pending' && bufferExt.repaintJob.reject(); arr = new Array(cnt); bufferExt.repaintJob = fm.asyncJob(function() { chk(); if (! tgt.length) { done(); bufferExt.repaintJob && bufferExt.repaintJob.state() === 'pending' && bufferExt.repaintJob.reject(); } }, arr).done(done); } } } else if (init && bufferExt.renderd) { // In initial request, cwd DOM not renderd so doing lazy check recnt = recnt || 0; if (recnt < 10) { // Prevent infinite loop requestAnimationFrame(function() { wrapperRepaint(init, ++recnt); }); } } }, /** * Item node of oldScholl ".." */ oldSchoolItem = null, /** * display parent folder with ".." name * * @param String phash * @return void */ oldSchool = function(p) { var phash = fm.cwd().phash, pdir = fm.file(phash) || null, set = function(pdir) { if (pdir) { oldSchoolItem = $(itemhtml($.extend(true, {}, pdir, {name : '..', i18 : '..', mime : 'directory'}))) .addClass('elfinder-cwd-parent') .on('dblclick', function() { fm.trigger('select', {selected : [phash]}).exec('open', phash); }); (list ? oldSchoolItem.children('td:first') : oldSchoolItem).children('.elfinder-cwd-select').remove(); if (fm.cwdHash2Elm(phash).length) { fm.cwdHash2Elm(phash).replaceWith(oldSchoolItem); } else { (list ? cwd.find('tbody') : cwd).prepend(oldSchoolItem); } fm.draggingUiHelper && fm.draggingUiHelper.data('refreshPositions', 1); } }; if (pdir) { set(pdir); } else { set({hash: phash, read: true, write: true}); if (fm.getUI('tree').length) { fm.one('parents', function() { set(fm.file(phash) || null); wrapper.trigger(scrollEvent); }); } else { fm.request({ data : {cmd : 'parents', target : fm.cwd().hash}, preventFail : true }) .done(function(data) { set(fm.file(phash) || null); wrapper.trigger(scrollEvent); }); } } }, showFiles = fm.options.showFiles, /** * Cwd scroll event handler. * Lazy load - append to cwd not shown files * * @return void */ render = function() { if (bufferExt.rendering || (bufferExt.renderd && ! buffer.length)) { return; } var place = (list ? cwd.children('table').children('tbody') : cwd), phash, chk, // created document fragment for jQuery >= 1.12, 2.2, 3.0 // see Studio-42/elFinder#1544 @ github docFlag = $.htmlPrefilter? true : false, tempDom = docFlag? $(document.createDocumentFragment()) : $('
          '), go = function(o){ var over = o || null, html = [], dirs = false, atmb = {}, stmb = (fm.option('tmbUrl') === 'self'), init = bufferExt.renderd? false : true, files, locks, selected; files = buffer.splice(0, showFiles + (over || 0) / (bufferExt.hpi || 1)); bufferExt.renderd += files.length; if (! buffer.length) { bottomMarker.hide(); wrapper.off(scrollEvent, render); } locks = []; html = $.map(files, function(f) { if (f.hash && f.name) { if (f.mime == 'directory') { dirs = true; } if ((f.tmb && (f.tmb != 1 || f.size > 0)) || (stmb && f.mime.indexOf('image/') === 0)) { atmb[f.hash] = f.tmb || 'self'; } clipCuts[f.hash] && locks.push(f.hash); return itemhtml(f); } return null; }); // html into temp node tempDom.empty().append(html.join('')); // make directory droppable dirs && !mobile && makeDroppable(tempDom); // check selected items selected = []; if (Object.keys(selectedFiles).length) { tempDom.find('[id]:not(.'+clSelected+'):not(.elfinder-cwd-parent)').each(function() { selectedFiles[fm.cwdId2Hash(this.id)] && selected.push($(this)); }); } // append to cwd place.append(docFlag? tempDom : tempDom.children()); // trigger select if (selected.length) { $.each(selected, function(i, n) { n.trigger(evtSelect); }); trigger(); } locks.length && fm.trigger('lockfiles', {files: locks}); !bufferExt.hpi && bottomMarkerShow(place, files.length); if (list) { // show thead cwd.find('thead').show(); // fixed table header fixTableHeader({fitWidth: ! colWidth}); } if (Object.keys(atmb).length) { Object.assign(bufferExt.attachTmbs, atmb); } if (init) { if (! mobile && ! cwd.data('selectable')) { // make files selectable cwd.selectable(selectableOption).data('selectable', true); } } ! scrolling && wrapper.trigger(scrollEvent); }; if (! bufferExt.renderd) { // first time to go() bufferExt.rendering = true; // scroll top on dir load to avoid scroll after page reload wrapper.scrollTop(0); phash = fm.cwd().phash; go(); if (options.oldSchool) { if (phash && !query) { oldSchool(phash); } else { oldSchoolItem = $(); } } if (list) { colWidth && setColwidth(); fixTableHeader({fitWidth: true}); } bufferExt.itemH = (list? place.find('tr:first') : place.find('[id]:first')).outerHeight(true); fm.trigger('cwdrender'); bufferExt.rendering = false; wrapperRepaint(true); } if (! bufferExt.rendering && buffer.length) { // next go() if ((chk = (wrapper.height() + wrapper.scrollTop() + fm.options.showThreshold + bufferExt.row) - (bufferExt.renderd * bufferExt.hpi)) > 0) { bufferExt.rendering = true; fm.lazy(function() { go(chk); bufferExt.rendering = false; }); } else { !fm.enabled() && resize(); } } else { resize(); } }, // fixed table header jQuery object tableHeader = null, // Is UA support CSS sticky cssSticky = fm.UA.CSS.positionSticky && fm.UA.CSS.widthMaxContent, // To fixed table header colmun fixTableHeader = function(optsArg) { thHeight = 0; if (! options.listView.fixedHeader) { return; } var setPos = function() { var val, pos; pos = (fm.direction === 'ltr')? 'left' : 'right'; val = ((fm.direction === 'ltr')? wrapper.scrollLeft() : table.outerWidth(true) - wrapper.width() - wrapper.scrollLeft()) * -1; if (base.css(pos) !== val) { base.css(pos, val); } }, opts = optsArg || {}, cnt, base, table, htable, thead, tbody, hheight, htr, btr, htd, btd, htw, btw, init; tbody = cwd.find('tbody'); btr = tbody.children('tr:first'); if (btr.length && btr.is(':visible')) { table = tbody.parent(); if (! tableHeader) { init = true; tbody.addClass('elfinder-cwd-fixheader'); thead = cwd.find('thead').attr('id', fm.namespace+'-cwd-thead'); htr = thead.children('tr:first'); hheight = htr.outerHeight(true); cwd.css('margin-top', hheight - parseInt(table.css('padding-top'))); if (cssSticky) { tableHeader = $('
          ').addClass(cwd.attr('class')).append($('
          ').append(thead)); cwd.after(tableHeader); wrapper.on('resize.fixheader', function(e) { e.stopPropagation(); fixTableHeader({fitWidth: true}); }); } else { base = $('
          ').addClass(cwd.attr('class')).append($('
          ').append(thead)); tableHeader = $('
          ').addClass(wrapper.attr('class') + ' elfinder-cwd-fixheader') .removeClass('ui-droppable native-droppable') .css(wrapper.position()) .css({ height: hheight, width: cwd.outerWidth() }) .append(base); if (fm.direction === 'rtl') { tableHeader.css('left', (wrapper.data('width') - wrapper.width()) + 'px'); } setPos(); wrapper.after(tableHeader) .on('scroll.fixheader resize.fixheader', function(e) { setPos(); if (e.type === 'resize') { e.stopPropagation(); tableHeader.css(wrapper.position()); wrapper.data('width', wrapper.css('overflow', 'hidden').width()); wrapper.css('overflow', 'auto'); fixTableHeader(); } }); } } else { thead = $('#'+fm.namespace+'-cwd-thead'); htr = thead.children('tr:first'); } if (init || opts.fitWidth || Math.abs(btr.outerWidth() - htr.outerWidth()) > 2) { cnt = customCols.length + 1; for (var i = 0; i < cnt; i++) { htd = htr.children('td:eq('+i+')'); btd = btr.children('td:eq('+i+')'); htw = htd.width(); btw = btd.width(); if (typeof htd.data('delta') === 'undefined') { htd.data('delta', (htd.outerWidth() - htw) - (btd.outerWidth() - btw)); } btw -= htd.data('delta'); if (! init && ! opts.fitWidth && htw === btw) { break; } htd.css('width', btw + 'px'); } } if (!cssSticky) { tableHeader.data('widthTimer') && cancelAnimationFrame(tableHeader.data('widthTimer')); tableHeader.data('widthTimer', requestAnimationFrame(function() { if (tableHeader) { tableHeader.css('width', mBoard.width() + 'px'); if (fm.direction === 'rtl') { tableHeader.css('left', (wrapper.data('width') - wrapper.width()) + 'px'); } } })); } thHeight = thead.height(); } }, // Set colmun width setColwidth = function() { if (list && colWidth) { var cl = 'elfinder-cwd-colwidth', first = cwd.find('tr[id]:first'), former; if (! first.hasClass(cl)) { former = cwd.find('tr.'+cl); former.removeClass(cl).find('td').css('width', ''); first.addClass(cl); cwd.find('table:first').css('table-layout', 'fixed'); $.each($.merge(['name'], customCols), function(i, k) { var w = colWidth[k] || first.find('td.elfinder-col-'+k).width(); first.find('td.elfinder-col-'+k).width(w); }); } } }, /** * Droppable options for cwd. * Drop target is `wrapper` * Do not add class on childs file over * * @type Object */ droppable = Object.assign({}, fm.droppable, { over : function(e, ui) { var dst = $(this), helper = ui.helper, ctr = fm._commands.copy && (e.shiftKey || e.ctrlKey || e.metaKey), hash, status, inParent; e.stopPropagation(); helper.data('dropover', helper.data('dropover') + 1); dst.data('dropover', true); helper.removeClass('elfinder-drag-helper-move elfinder-drag-helper-plus'); if (helper.data('namespace') !== fm.namespace || ! fm.insideWorkzone(e.pageX, e.pageY)) { dst.removeClass(clDropActive); //helper.removeClass('elfinder-drag-helper-move elfinder-drag-helper-plus'); return; } if (dst.hasClass(fm.res(c, 'cwdfile'))) { hash = fm.cwdId2Hash(dst.attr('id')); dst.data('dropover', hash); } else { hash = fm.cwd().hash; fm.cwd().write && dst.data('dropover', hash); } inParent = (fm.file(helper.data('files')[0]).phash === hash); if (dst.data('dropover') === hash) { $.each(helper.data('files'), function(i, h) { if (h === hash || (inParent && !ctr && !helper.hasClass('elfinder-drag-helper-plus'))) { dst.removeClass(clDropActive); return false; // break $.each } }); } else { dst.removeClass(clDropActive); } if (helper.data('locked') || inParent) { status = 'elfinder-drag-helper-plus'; } else { status = 'elfinder-drag-helper-move'; if (ctr) { status += ' elfinder-drag-helper-plus'; } } dst.hasClass(clDropActive) && helper.addClass(status); requestAnimationFrame(function(){ dst.hasClass(clDropActive) && helper.addClass(status); }); }, out : function(e, ui) { var helper = ui.helper; e.stopPropagation(); helper.removeClass('elfinder-drag-helper-move elfinder-drag-helper-plus').data('dropover', Math.max(helper.data('dropover') - 1, 0)); $(this).removeData('dropover') .removeClass(clDropActive); }, deactivate : function() { $(this).removeData('dropover') .removeClass(clDropActive); }, drop : function(e, ui) { unselectAll({ notrigger: true }); fm.droppable.drop.call(this, e, ui); } }), /** * Make directory droppable * * @return void */ makeDroppable = function(place) { place = place? place : (list ? cwd.find('tbody') : cwd); var targets = place.children('.directory:not(.'+clDroppable+',.elfinder-na,.elfinder-ro)'); if (fm.isCommandEnabled('paste')) { targets.droppable(droppable); } if (fm.isCommandEnabled('upload')) { targets.addClass('native-droppable'); } place.children('.isroot').each(function(i, n) { var $n = $(n), hash = fm.cwdId2Hash(n.id); if (fm.isCommandEnabled('paste', hash)) { if (! $n.hasClass(clDroppable+',elfinder-na,elfinder-ro')) { $n.droppable(droppable); } } else { if ($n.hasClass(clDroppable)) { $n.droppable('destroy'); } } if (fm.isCommandEnabled('upload', hash)) { if (! $n.hasClass('native-droppable,elfinder-na,elfinder-ro')) { $n.addClass('native-droppable'); } } else { if ($n.hasClass('native-droppable')) { $n.removeClass('native-droppable'); } } }); }, /** * Preload required thumbnails and on load add css to files. * Return false if required file is not visible yet (in buffer) - * required for old api to stop loading thumbnails. * * @param Object file hash -> thumbnail map * @param Bool reload * @return void */ attachThumbnails = function(tmbs, reload) { var attach = function(node, tmb) { $('') .on('load', function() { node.find('.elfinder-cwd-icon').addClass(tmb.className).css('background-image', "url('"+tmb.url+"')"); }) .attr('src', tmb.url); }, chk = function(hash, tmb) { var node = fm.cwdHash2Elm(hash), file, tmbObj, reloads = []; if (node.length) { if (tmb != '1') { file = fm.file(hash); if (file.tmb !== tmb) { file.tmb = tmb; } tmbObj = fm.tmb(file); if (reload) { node.find('.elfinder-cwd-icon').addClass(tmbObj.className).css('background-image', "url('"+tmbObj.url+"')"); } else { attach(node, tmbObj); } delete bufferExt.attachTmbs[hash]; } else { if (reload) { loadThumbnails([hash]); } else if (! bufferExt.tmbLoading[hash]) { bufferExt.getTmbs.push(hash); } } } }; if ($.isPlainObject(tmbs) && Object.keys(tmbs).length) { Object.assign(bufferExt.attachTmbs, tmbs); $.each(tmbs, chk); if (! reload && bufferExt.getTmbs.length && ! Object.keys(bufferExt.tmbLoading).length) { loadThumbnails(); } } }, /** * Load thumbnails from backend. * * @param Array|void reloads hashes list for reload thumbnail items * @return void */ loadThumbnails = function(reloads) { var tmbs = [], reload = false; if (fm.oldAPI) { fm.request({ data : {cmd : 'tmb', current : fm.cwd().hash}, preventFail : true }) .done(function(data) { if (data.images && Object.keys(data.images).length) { attachThumbnails(data.images); } if (data.tmb) { loadThumbnails(); } }); return; } if (reloads) { reload = true; tmbs = reloads.splice(0, tmbNum); } else { tmbs = bufferExt.getTmbs.splice(0, tmbNum); } if (tmbs.length) { if (reload || inViewHashes[tmbs[0]] || inViewHashes[tmbs[tmbs.length-1]]) { $.each(tmbs, function(i, h) { bufferExt.tmbLoading[h] = true; }); fm.request({ data : {cmd : 'tmb', targets : tmbs}, preventFail : true }) .done(function(data) { var errs = [], resLen; if (data.images) { if (resLen = Object.keys(data.images).length) { if (resLen < tmbs.length) { $.each(tmbs, function(i, h) { if (! data.images[h]) { errs.push(h); } }); } attachThumbnails(data.images, reload); } else { errs = tmbs; } // unset error items from bufferExt.attachTmbs if (errs.length) { $.each(errs, function(i, h) { delete bufferExt.attachTmbs[h]; }); } } if (reload) { if (reloads.length) { loadThumbnails(reloads); } } }) .always(function() { bufferExt.tmbLoading = {}; if (! reload && bufferExt.getTmbs.length) { loadThumbnails(); } }); } } }, /** * Add new files to cwd/buffer * * @param Array new files * @return void */ add = function(files, mode) { var place = list ? cwd.find('tbody') : cwd, l = files.length, atmb = {}, findNode = function(file) { var pointer = cwd.find('[id]:first'), file2; while (pointer.length) { file2 = fm.file(fm.cwdId2Hash(pointer.attr('id'))); if (!pointer.hasClass('elfinder-cwd-parent') && file2 && fm.compare(file, file2) < 0) { return pointer; } pointer = pointer.next('[id]'); } }, findIndex = function(file) { var l = buffer.length, i; for (i =0; i < l; i++) { if (fm.compare(file, buffer[i]) < 0) { return i; } } return l || -1; }, // created document fragment for jQuery >= 1.12, 2.2, 3.0 // see Studio-42/elFinder#1544 @ github docFlag = $.htmlPrefilter? true : false, tempDom = docFlag? $(document.createDocumentFragment()) : $('
          '), file, hash, node, nodes, ndx, stmb; if (l > showFiles) { // re-render for performance tune content(); selectedFiles = fm.arrayFlip($.map(files, function(f) { return f.hash; }), true); trigger(); } else { // add the item immediately l && wz.removeClass('elfinder-cwd-wrapper-empty'); // Self thumbnail stmb = (fm.option('tmbUrl') === 'self'); while (l--) { file = files[l]; hash = file.hash; if (fm.cwdHash2Elm(hash).length) { continue; } if ((node = findNode(file)) && ! node.length) { node = null; } if (! node && (ndx = findIndex(file)) >= 0) { buffer.splice(ndx, 0, file); } else { tempDom.empty().append(itemhtml(file)); (file.mime === 'directory') && !mobile && makeDroppable(tempDom); nodes = docFlag? tempDom : tempDom.children(); if (node) { node.before(nodes); } else { place.append(nodes); } ++bufferExt.renderd; } if (fm.cwdHash2Elm(hash).length) { if ((file.tmb && (file.tmb != 1 || file.size > 0)) || (stmb && file.mime.indexOf('image/') === 0)) { atmb[hash] = file.tmb || 'self'; } } } if (list) { setColwidth(); fixTableHeader({fitWidth: ! colWidth}); } bottomMarkerShow(place); if (Object.keys(atmb).length) { Object.assign(bufferExt.attachTmbs, atmb); if (buffer.length < 1) { loadThumbnails(); } } } }, /** * Remove files from cwd/buffer * * @param Array files hashes * @return void */ remove = function(files) { var l = files.length, inSearch = fm.searchStatus.state > 1, curCmd = fm.getCommand(fm.currentReqCmd) || {}, hash, n, ndx, found; // removed cwd if (!fm.cwd().hash && !curCmd.noChangeDirOnRemovedCwd) { $.each(cwdParents.reverse(), function(i, h) { if (fm.file(h)) { found = true; fm.one(fm.currentReqCmd + 'done', function() { !fm.cwd().hash && fm.exec('open', h); }); return false; } }); // fallback to fm.roots[0] !found && !fm.cwd().hash && fm.exec('open', fm.roots[Object.keys(fm.roots)[0]]); return; } while (l--) { hash = files[l]; if ((n = fm.cwdHash2Elm(hash)).length) { try { n.remove(); --bufferExt.renderd; } catch(e) { fm.debug('error', e); } } else if ((ndx = index(hash)) !== -1) { buffer.splice(ndx, 1); } selectedFiles[hash] && delete selectedFiles[hash]; if (inSearch) { if ((ndx = $.inArray(hash, cwdHashes)) !== -1) { cwdHashes.splice(ndx, 1); } } } inSearch && fm.trigger('cwdhasheschange', cwdHashes); if (list) { setColwidth(); fixTableHeader({fitWidth: ! colWidth}); } }, customColsNameBuild = function() { var name = '', customColsName = ''; for (var i = 0; i < customCols.length; i++) { name = fm.getColumnName(customCols[i]); customColsName +=''+name+''; } return customColsName; }, setItemBoxSize = function(boxSize) { var place, elm; if (!boxSize.height) { place = (list ? cwd.find('tbody') : cwd); elm = place.find(list? 'tr:first' : '[id]:first'); boxSize.height = elm.outerHeight(true); if (!list) { boxSize.width = elm.outerWidth(true); } } }, bottomMarkerShow = function(cur, cnt) { var place = cur || (list ? cwd.find('tbody') : cwd), boxSize = itemBoxSize[fm.viewType], col = 1, row; if (buffer.length > 0) { if (!bufferExt.hpi) { setItemBoxSize(boxSize); if (! list) { col = Math.floor(place.width() / boxSize.width); bufferExt.row = boxSize.height; bufferExt.hpi = bufferExt.row / col; } else { bufferExt.row = bufferExt.hpi = boxSize.height; } } else if (!list) { col = Math.floor(place.width() / boxSize.width); } row = Math.ceil((buffer.length + (cnt || 0)) / col); if (list && tableHeader) { ++row; } bottomMarker.css({top: (bufferExt.row * row) + 'px'}).show(); } }, wrapperContextMenu = { contextmenu : function(e) { e.preventDefault(); if (cwd.data('longtap') !== void(0)) { e.stopPropagation(); return; } fm.trigger('contextmenu', { 'type' : 'cwd', 'targets' : [fm.cwd().hash], 'x' : e.pageX, 'y' : e.pageY }); }, touchstart : function(e) { if (e.originalEvent.touches.length > 1) { return; } if (cwd.data('longtap') !== false) { wrapper.data('touching', {x: e.originalEvent.touches[0].pageX, y: e.originalEvent.touches[0].pageY}); cwd.data('tmlongtap', setTimeout(function(){ // long tap cwd.data('longtap', true); fm.trigger('contextmenu', { 'type' : 'cwd', 'targets' : [fm.cwd().hash], 'x' : wrapper.data('touching').x, 'y' : wrapper.data('touching').y }); }, 500)); } cwd.data('longtap', null); }, touchend : function(e) { if (e.type === 'touchmove') { if (! wrapper.data('touching') || ( Math.abs(wrapper.data('touching').x - e.originalEvent.touches[0].pageX) + Math.abs(wrapper.data('touching').y - e.originalEvent.touches[0].pageY)) > 4) { wrapper.data('touching', null); } } else { setTimeout(function() { cwd.removeData('longtap'); }, 80); } clearTimeout(cwd.data('tmlongtap')); }, click : function(e) { if (cwd.data('longtap')) { e.preventDefault(); e.stopPropagation(); } } }, /** * Update directory content * * @return void */ content = function() { fm.lazy(function() { var phash, emptyMethod, thtr; wz.append(selectAllCheckbox).removeClass('elfinder-cwd-wrapper-empty elfinder-search-result elfinder-incsearch-result elfinder-letsearch-result'); if (fm.searchStatus.state > 1 || fm.searchStatus.ininc) { wz.addClass('elfinder-search-result' + (fm.searchStatus.ininc? ' elfinder-'+(query.substr(0,1) === '/' ? 'let':'inc')+'search-result' : '')); } // abort attachThumbJob bufferExt.attachThumbJob && bufferExt.attachThumbJob._abort(); // destroy selectable for GC cwd.data('selectable') && cwd.selectable('disable').selectable('destroy').removeData('selectable'); // notify cwd init fm.trigger('cwdinit'); selectedNext = $(); try { // to avoid problem with draggable cwd.empty(); } catch (e) { cwd.html(''); } if (tableHeader) { wrapper.off('scroll.fixheader resize.fixheader'); tableHeader.remove(); tableHeader = null; } cwd.removeClass('elfinder-cwd-view-icons elfinder-cwd-view-list') .addClass('elfinder-cwd-view-'+(list ? 'list' :'icons')) .attr('style', '') .css('height', 'auto'); bottomMarker.hide(); wrapper[list ? 'addClass' : 'removeClass']('elfinder-cwd-wrapper-list')._padding = parseInt(wrapper.css('padding-top')) + parseInt(wrapper.css('padding-bottom')); if (fm.UA.iOS) { wrapper.removeClass('overflow-scrolling-touch').addClass('overflow-scrolling-touch'); } if (list) { cwd.html('
          '); thtr = $(''+fm.getColumnName('name')+''+customColsNameBuild()+''); cwd.find('thead').hide().append(thtr).find('td:first').append(selectAllCheckbox); if ($.fn.sortable) { thtr.addClass('touch-punch touch-punch-keep-default') .sortable({ axis: 'x', distance: 8, items: '> .sortable-item', start: function(e, ui) { $(ui.item[0]).data('dragging', true); ui.placeholder .width(ui.helper.removeClass('ui-state-hover').width()) .removeClass('ui-state-active') .addClass('ui-state-hover') .css('visibility', 'visible'); }, update: function(e, ui){ var target = $(ui.item[0]).attr('class').split(' ')[0].replace('elfinder-cwd-view-th-', ''), prev, done; customCols = $.map($(this).children(), function(n) { var name = $(n).attr('class').split(' ')[0].replace('elfinder-cwd-view-th-', ''); if (! done) { if (target === name) { done = true; } else { prev = name; } } return (name === 'name')? null : name; }); templates.row = makeTemplateRow(); fm.storage('cwdCols', customCols); prev = '.elfinder-col-'+prev+':first'; target = '.elfinder-col-'+target+':first'; fm.lazy(function() { cwd.find('tbody tr').each(function() { var $this = $(this); $this.children(prev).after($this.children(target)); }); }); }, stop: function(e, ui) { setTimeout(function() { $(ui.item[0]).removeData('dragging'); }, 100); } }); } thtr.find('td').addClass('touch-punch').resizable({ handles: fm.direction === 'ltr'? 'e' : 'w', start: function(e, ui) { var target = cwd.find('td.elfinder-col-' + ui.element.attr('class').split(' ')[0].replace('elfinder-cwd-view-th-', '') + ':first'); ui.element .data('dragging', true) .data('resizeTarget', target) .data('targetWidth', target.width()); colResizing = true; if (cwd.find('table').css('table-layout') !== 'fixed') { cwd.find('tbody tr:first td').each(function() { $(this).width($(this).width()); }); cwd.find('table').css('table-layout', 'fixed'); } }, resize: function(e, ui) { ui.element.data('resizeTarget').width(ui.element.data('targetWidth') - (ui.originalSize.width - ui.size.width)); }, stop : function(e, ui) { colResizing = false; fixTableHeader({fitWidth: true}); colWidth = {}; cwd.find('tbody tr:first td').each(function() { var name = $(this).attr('class').split(' ')[0].replace('elfinder-col-', ''); colWidth[name] = $(this).width(); }); fm.storage('cwdColWidth', colWidth); setTimeout(function() { ui.element.removeData('dragging'); }, 100); } }) .find('.ui-resizable-handle').addClass('ui-icon ui-icon-grip-dotted-vertical'); } buffer = $.map(incHashes || cwdHashes, function(hash) { return fm.file(hash) || null; }); buffer = fm.sortFiles(buffer); if (incHashes) { incHashes = $.map(buffer, function(f) { return f.hash; }); } else { cwdHashes = $.map(buffer, function(f) { return f.hash; }); } bufferExt = { renderd: 0, attachTmbs: {}, getTmbs: [], tmbLoading: {}, lazyOpts: { tm : 0 } }; wz[(buffer.length < 1) ? 'addClass' : 'removeClass']('elfinder-cwd-wrapper-empty'); wrapper.off(scrollEvent, render).on(scrollEvent, render).trigger(scrollEvent); // set droppable if (!fm.cwd().write) { wrapper.removeClass('native-droppable') .droppable('disable') .removeClass('ui-state-disabled'); // for old jQueryUI see https://bugs.jqueryui.com/ticket/5974 } else { wrapper[fm.isCommandEnabled('upload')? 'addClass' : 'removeClass']('native-droppable'); wrapper.droppable(fm.isCommandEnabled('paste')? 'enable' : 'disable'); } }); }, /** * CWD node itself * * @type JQuery **/ cwd = $(this) .addClass('ui-helper-clearfix elfinder-cwd') .attr('unselectable', 'on') // fix ui.selectable bugs and add shift+click support .on('click.'+fm.namespace, fileSelector, function(e) { var p = this.id ? $(this) : $(this).parents('[id]:first'), tgt = $(e.target), prev, next, pl, nl, sib; if (selectCheckbox && (tgt.is('input:checkbox.'+clSelChk) || tgt.hasClass('elfinder-cwd-select'))) { e.stopPropagation(); e.preventDefault(); p.trigger(p.hasClass(clSelected) ? evtUnselect : evtSelect); trigger(); requestAnimationFrame(function() { tgt.prop('checked', p.hasClass(clSelected)); }); return; } if (cwd.data('longtap') || tgt.hasClass('elfinder-cwd-nonselect')) { e.stopPropagation(); return; } if (!curClickId) { curClickId = p.attr('id'); setTimeout(function() { curClickId = ''; }, 500); } if (e.shiftKey) { prev = p.prevAll(lastSelect || '.'+clSelected+':first'); next = p.nextAll(lastSelect || '.'+clSelected+':first'); pl = prev.length; nl = next.length; } if (e.shiftKey && (pl || nl)) { sib = pl ? p.prevUntil('#'+prev.attr('id')) : p.nextUntil('#'+next.attr('id')); sib = sib.add(p); if (!pl) { sib = $(sib.get().reverse()); } sib.trigger(evtSelect); } else if (e.ctrlKey || e.metaKey) { p.trigger(p.hasClass(clSelected) ? evtUnselect : evtSelect); } else { if (wrapper.data('touching') && p.hasClass(clSelected)) { wrapper.data('touching', null); fm.dblclick({file : fm.cwdId2Hash(this.id)}); return; } else { unselectAll({ notrigger: true }); p.trigger(evtSelect); } } trigger(); }) // call fm.open() .on('dblclick.'+fm.namespace, fileSelector, function(e) { if (curClickId) { var hash = fm.cwdId2Hash(curClickId); e.stopPropagation(); if (this.id !== curClickId) { $(this).trigger(evtUnselect); $('#'+curClickId).trigger(evtSelect); trigger(); } fm.dblclick({file : hash}); } }) // for touch device .on('touchstart.'+fm.namespace, fileSelector, function(e) { if (e.originalEvent.touches.length > 1) { return; } var p = this.id ? $(this) : $(this).parents('[id]:first'), tgt = $(e.target), nodeName = e.target.nodeName, sel; if ((nodeName === 'INPUT' && e.target.type === 'text') || nodeName === 'TEXTAREA' || tgt.hasClass('elfinder-cwd-nonselect')) { e.stopPropagation(); return; } // now name editing if (p.find('input:text,textarea').length) { e.stopPropagation(); e.preventDefault(); return; } wrapper.data('touching', {x: e.originalEvent.touches[0].pageX, y: e.originalEvent.touches[0].pageY}); if (selectCheckbox && (tgt.is('input:checkbox.'+clSelChk) || tgt.hasClass('elfinder-cwd-select'))) { return; } sel = p.prevAll('.'+clSelected+':first').length + p.nextAll('.'+clSelected+':first').length; cwd.data('longtap', null); if (Object.keys(selectedFiles).length || (list && e.target.nodeName !== 'TD') || (!list && this !== e.target) ) { cwd.data('longtap', false); p.addClass(clHover); p.data('tmlongtap', setTimeout(function(){ // long tap cwd.data('longtap', true); p.trigger(evtSelect); trigger(); fm.trigger('contextmenu', { 'type' : 'files', 'targets' : fm.selected(), 'x' : e.originalEvent.touches[0].pageX, 'y' : e.originalEvent.touches[0].pageY }); }, 500)); } }) .on('touchmove.'+fm.namespace+' touchend.'+fm.namespace, fileSelector, function(e) { var tgt = $(e.target), p; if (selectCheckbox && (tgt.is('input:checkbox.'+clSelChk) || tgt.hasClass('elfinder-cwd-select'))) { return; } if (e.target.nodeName == 'INPUT' || e.target.nodeName == 'TEXTAREA') { e.stopPropagation(); return; } p = this.id ? $(this) : $(this).parents('[id]:first'); clearTimeout(p.data('tmlongtap')); if (e.type === 'touchmove') { wrapper.data('touching', null); p.removeClass(clHover); } else { if (wrapper.data('touching') && !cwd.data('longtap') && p.hasClass(clSelected)) { e.preventDefault(); wrapper.data('touching', null); fm.dblclick({file : fm.cwdId2Hash(this.id)}); } setTimeout(function() { cwd.removeData('longtap'); }, 80); } }) // attach draggable .on('mouseenter.'+fm.namespace, fileSelector, function(e) { if (scrolling) { return; } var $this = $(this), helper = null; if (!mobile && !$this.data('dragRegisted') && !$this.hasClass(clTmp) && !$this.hasClass(clDraggable) && !$this.hasClass(clDisabled)) { $this.data('dragRegisted', true); if (!fm.isCommandEnabled('copy', fm.searchStatus.state > 1 || $this.hasClass('isroot')? fm.cwdId2Hash($this.attr('id')) : void 0) && !fm.isCommandEnabled('cut', fm.searchStatus.state > 1 || $this.hasClass('isroot')? fm.cwdId2Hash($this.attr('id')) : void 0)) { return; } $this.on('mousedown', function(e) { // shiftKey or altKey + drag start for HTML5 native drag function // Note: can no use shiftKey with the Google Chrome var metaKey = options.metakeyDragout && !fm.UA.IE && (e.shiftKey || e.altKey), disable = false; if (metaKey && cwd.data('selectable')) { // destroy jQuery-ui selectable while trigger native drag cwd.selectable('disable').selectable('destroy').removeData('selectable'); requestAnimationFrame(function(){ cwd.selectable(selectableOption).selectable('option', {disabled: false}).selectable('refresh').data('selectable', true); }); } $this.removeClass('ui-state-disabled'); if (metaKey) { $this.draggable('option', 'disabled', true).attr('draggable', 'true'); } else { if (!$this.hasClass(clSelected)) { if (list) { disable = $(e.target).closest('span,tr').is('tr'); } else { disable = $(e.target).hasClass('elfinder-cwd-file'); } } if (disable) { // removeClass('ui-state-disabled') for old version of jQueryUI $this.draggable('option', 'disabled', true).removeClass('ui-state-disabled'); } else { $this.draggable('option', 'disabled', false) .removeAttr('draggable') .draggable('option', 'cursorAt', {left: 50 - parseInt($(e.currentTarget).css('margin-left')), top: 47}); } } }) .on('dragstart', function(e) { var dt = e.dataTransfer || e.originalEvent.dataTransfer || null; helper = null; if (dt && !fm.UA.IE) { var p = this.id ? $(this) : $(this).parents('[id]:first'), elm = $(''), url = '', durl = null, murl = null, files = [], icon = function(f) { var mime = f.mime, i, tmb = fm.tmb(f); i = '
          '; if (tmb) { i = $(i).addClass(tmb.className).css('background-image', "url('"+tmb.url+"')").get(0).outerHTML; } return i; }, l, geturl = []; p.trigger(evtSelect); trigger(); $.each(selectedFiles, function(v){ var file = fm.file(v), furl = file.url; if (file && file.mime !== 'directory') { if (!furl) { furl = fm.url(file.hash); } else if (furl == '1') { geturl.push(v); return true; } if (furl) { furl = fm.convAbsUrl(furl); files.push(v); $('').attr('href', furl).text(furl).appendTo(elm); url += furl + "\n"; if (!durl) { durl = file.mime + ':' + file.name + ':' + furl; } if (!murl) { murl = furl + "\n" + file.name; } } } }); if (geturl.length) { $.each(geturl, function(i, v){ var rfile = fm.file(v); rfile.url = ''; fm.request({ data : {cmd : 'url', target : v}, notify : {type : 'url', cnt : 1}, preventDefault : true }) .always(function(data) { rfile.url = data.url? data.url : '1'; }); }); return false; } else if (url) { if (dt.setDragImage) { helper = $('
          ').append(icon(fm.file(files[0]))).appendTo($(document.body)); if ((l = files.length) > 1) { helper.append(icon(fm.file(files[l-1])) + ''+l+''); } dt.setDragImage(helper.get(0), 50, 47); } dt.effectAllowed = 'copyLink'; dt.setData('DownloadURL', durl); dt.setData('text/x-moz-url', murl); dt.setData('text/uri-list', url); dt.setData('text/plain', url); dt.setData('text/html', elm.html()); dt.setData('elfinderfrom', window.location.href + fm.cwd().hash); dt.setData('elfinderfrom:' + dt.getData('elfinderfrom'), ''); } else { return false; } } }) .on('dragend', function(e){ unselectAll({ notrigger: true }); helper && helper.remove(); }) .draggable(fm.draggable); } }) // add hover class to selected file .on(evtSelect, fileSelector, function(e) { var $this = $(this), id = fm.cwdId2Hash($this.attr('id')); if (!selectLock && !$this.hasClass(clDisabled)) { lastSelect = '#'+ this.id; $this.addClass(clSelected).children().addClass(clHover).find('input:checkbox.'+clSelChk).prop('checked', true); if (! selectedFiles[id]) { selectedFiles[id] = true; } // will be selected next selectedNext = cwd.find('[id].'+clSelected+':last').next(); } }) // remove hover class from unselected file .on(evtUnselect, fileSelector, function(e) { var $this = $(this), id = fm.cwdId2Hash($this.attr('id')); if (!selectLock) { $this.removeClass(clSelected).children().removeClass(clHover).find('input:checkbox.'+clSelChk).prop('checked', false); if (cwd.hasClass('elfinder-cwd-allselected')) { selectCheckbox && selectAllCheckbox.children('input').prop('checked', false); cwd.removeClass('elfinder-cwd-allselected'); } selectedFiles[id] && delete selectedFiles[id]; } }) // disable files wich removing or moving .on(evtDisable, fileSelector, function() { var $this = $(this).removeClass(clHover+' '+clSelected).addClass(clDisabled), child = $this.children(), target = (list ? $this : child.find('div.elfinder-cwd-file-wrapper,div.elfinder-cwd-filename')); child.removeClass(clHover+' '+clSelected); $this.hasClass(clDroppable) && $this.droppable('disable'); target.hasClass(clDraggable) && target.draggable('disable'); }) // if any files was not removed/moved - unlock its .on(evtEnable, fileSelector, function() { var $this = $(this).removeClass(clDisabled), target = list ? $this : $this.children('div.elfinder-cwd-file-wrapper,div.elfinder-cwd-filename'); $this.hasClass(clDroppable) && $this.droppable('enable'); target.hasClass(clDraggable) && target.draggable('enable'); }) .on('scrolltoview', fileSelector, function(e, data) { scrollToView($(this), (data && typeof data.blink !== 'undefined')? data.blink : true); }) .on('mouseenter.'+fm.namespace+' mouseleave.'+fm.namespace, fileSelector, function(e) { var enter = (e.type === 'mouseenter'); if (enter && (scrolling || fm.UA.Mobile)) { return; } fm.trigger('hover', {hash : fm.cwdId2Hash($(this).attr('id')), type : e.type}); $(this).toggleClass(clHover, (e.type == 'mouseenter')); }) // for file contextmenu .on('mouseenter.'+fm.namespace+' mouseleave.'+fm.namespace, '.elfinder-cwd-file-wrapper,.elfinder-cwd-filename', function(e) { var enter = (e.type === 'mouseenter'); if (enter && scrolling) { return; } $(this).closest(fileSelector).children('.elfinder-cwd-file-wrapper,.elfinder-cwd-filename').toggleClass(clActive, (e.type == 'mouseenter')); }) .on('contextmenu.'+fm.namespace, function(e) { var file = $(e.target).closest(fileSelector); if (file.get(0) === e.target && !selectedFiles[fm.cwdId2Hash(file.get(0).id)]) { return; } // now filename editing if (file.find('input:text,textarea').length) { e.stopPropagation(); return; } if (file.length && (e.target.nodeName != 'TD' || selectedFiles[fm.cwdId2Hash(file.get(0).id)])) { e.stopPropagation(); e.preventDefault(); if (!file.hasClass(clDisabled) && !wrapper.data('touching')) { if (!file.hasClass(clSelected)) { unselectAll({ notrigger: true }); file.trigger(evtSelect); trigger(); } fm.trigger('contextmenu', { 'type' : 'files', 'targets' : fm.selected(), 'x' : e.pageX, 'y' : e.pageY }); } } }) // unselect all on cwd click .on('click.'+fm.namespace, function(e) { if (e.target === this && ! cwd.data('longtap')) { !e.shiftKey && !e.ctrlKey && !e.metaKey && unselectAll(); } }) // prepend fake file/dir .on('create.'+fm.namespace, function(e, f) { var parent = list ? cwd.find('tbody') : cwd, p = parent.find('.elfinder-cwd-parent'), lock = f.move || false, file = $(itemhtml(f)).addClass(clTmp), selected = fm.selected(); if (selected.length) { lock && fm.trigger('lockfiles', {files: selected}); } else { unselectAll(); } if (p.length) { p.after(file); } else { parent.prepend(file); } setColwidth(); wrapper.scrollTop(0).scrollLeft(0); }) // unselect all selected files .on('unselectall', unselectAll) .on('selectfile', function(e, id) { fm.cwdHash2Elm(id).trigger(evtSelect); trigger(); }) .on('colwidth', function() { if (list) { cwd.find('table').css('table-layout', '') .find('td').css('width', ''); fixTableHeader({fitWidth: true}); fm.storage('cwdColWidth', colWidth = null); } }) .on('iconpref', function(e, data) { cwd.removeClass(function(i, cName) { return (cName.match(/\belfinder-cwd-size\S+/g) || []).join(' '); }); iconSize = data? (parseInt(data.size) || 0) : 0; if (!list) { if (iconSize > 0) { cwd.addClass('elfinder-cwd-size' + iconSize); } if (bufferExt.renderd) { requestAnimationFrame(function() { itemBoxSize.icons = {}; bufferExt.hpi = null; bottomMarkerShow(cwd, bufferExt.renderd); wrapperRepaint(); }); } } }) // Change icon size with mouse wheel event .on('onwheel' in document ? 'wheel' : 'mousewheel', function(e) { var tm, size, delta; if (!list && ((e.ctrlKey && !e.metaKey) || (!e.ctrlKey && e.metaKey))) { e.stopPropagation(); e.preventDefault(); tm = cwd.data('wheelTm'); if (typeof tm !== 'undefined') { clearTimeout(tm); cwd.data('wheelTm', setTimeout(function() { cwd.removeData('wheelTm'); }, 200)); } else { cwd.data('wheelTm', false); size = iconSize || 0; delta = e.originalEvent.deltaY ? e.originalEvent.deltaY : -(e.originalEvent.wheelDelta); if (delta > 0) { if (iconSize > 0) { size = iconSize - 1; } } else { if (iconSize < options.iconsView.sizeMax) { size = iconSize + 1; } } if (size !== iconSize) { fm.storage('iconsize', size); cwd.trigger('iconpref', {size: size}); } } } }), wrapper = $('
          ') // make cwd itself droppable for folders from nav panel .droppable(Object.assign({}, droppable, {autoDisable: false})) .on('contextmenu.'+fm.namespace, wrapperContextMenu.contextmenu) .on('touchstart.'+fm.namespace, wrapperContextMenu.touchstart) .on('touchmove.'+fm.namespace+' touchend.'+fm.namespace, wrapperContextMenu.touchend) .on('click.'+fm.namespace, wrapperContextMenu.click) .on('scroll.'+fm.namespace, function() { if (! scrolling) { cwd.data('selectable') && cwd.selectable('disable'); wrapper.trigger(scrollStartEvent); } scrolling = true; bufferExt.scrtm && cancelAnimationFrame(bufferExt.scrtm); if (bufferExt.scrtm && Math.abs((bufferExt.scrolltop || 0) - (bufferExt.scrolltop = (this.scrollTop || $(this).scrollTop()))) < 5) { bufferExt.scrtm = 0; wrapper.trigger(scrollEvent); } bufferExt.scrtm = requestAnimationFrame(function() { bufferExt.scrtm = 0; wrapper.trigger(scrollEvent); }); }) .on(scrollEvent, function() { scrolling = false; wrapperRepaint(); }), bottomMarker = $('
           
          ') .css({position: 'absolute', width: '1px', height: '1px'}) .hide(), selectAllCheckbox = selectCheckbox? $('
          ') .attr('title', fm.i18n('selectall')) .on('click', function(e) { e.stopPropagation(); e.preventDefault(); if ($(this).data('pending')) { return false; } selectAllCheckbox.data('pending', true); if (cwd.hasClass('elfinder-cwd-allselected')) { selectAllCheckbox.find('input').prop('checked', false); requestAnimationFrame(function() { unselectAll(); }); } else { selectAll(); } }) : $(), restm = null, resize = function(init) { var initHeight = function() { if (typeof bufferExt.renderd !== 'undefined') { var h = 0; wrapper.siblings('div.elfinder-panel:visible').each(function() { h += $(this).outerHeight(true); }); wrapper.height(wz.height() - h - wrapper._padding); } }; init && initHeight(); restm && cancelAnimationFrame(restm); restm = requestAnimationFrame(function(){ !init && initHeight(); var wph, cwdoh; // fix cwd height if it less then wrapper cwd.css('height', 'auto'); wph = wrapper[0].clientHeight - parseInt(wrapper.css('padding-top')) - parseInt(wrapper.css('padding-bottom')) - parseInt(cwd.css('margin-top')), cwdoh = cwd.outerHeight(true); if (cwdoh < wph) { cwd.height(wph); } }); list && ! colResizing && (init? wrapper.trigger('resize.fixheader') : fixTableHeader()); wrapperRepaint(); }, // elfinder node parent = $(this).parent().on('resize', resize), // workzone node wz = parent.children('.elfinder-workzone').append(wrapper.append(this).append(bottomMarker)), // message board mBoard = $('
          ').insertAfter(cwd), // Volume expires vExpires = $('
          '), vExpiresTm, showVolumeExpires = function() { var remain, sec, int; vExpiresTm && clearTimeout(vExpiresTm); if (curVolId && fm.volumeExpires[curVolId]) { sec = fm.volumeExpires[curVolId] - ((+new Date()) / 1000); int = (sec % 60) + 0.1; remain = Math.floor(sec / 60); vExpires.html(fm.i18n(['minsLeft', remain])).show(); if (remain) { vExpiresTm = setTimeout(showVolumeExpires, int * 1000); } } }, // each item box size itemBoxSize = { icons : {}, list : {} }, // has UI tree hasUiTree, // Icon size of icons view iconSize, // Current volume id curVolId, winScrTm; // IE < 11 not support CSS `pointer-events: none` if (!fm.UA.ltIE10) { mBoard.append($('
          ').html(fm.i18n('volume_Trash'))) .append(vExpires); } // setup by options replacement = Object.assign(replacement, options.replacement || {}); try { colWidth = fm.storage('cwdColWidth')? fm.storage('cwdColWidth') : null; } catch(e) { colWidth = null; } // setup costomCols fm.bind('columnpref', function(e) { var opts = e.data || {}; if (customCols = fm.storage('cwdCols')) { customCols = $.grep(customCols, function(n) { return (options.listView.columns.indexOf(n) !== -1)? true : false; }); if (options.listView.columns.length > customCols.length) { $.each(options.listView.columns, function(i, n) { if (customCols.indexOf(n) === -1) { customCols.push(n); } }); } } else { customCols = options.listView.columns; } // column names array that hidden var columnhides = fm.storage('columnhides') || null; if (columnhides && Object.keys(columnhides).length) customCols = $.grep(customCols, function(n) { return columnhides[n]? false : true; }); // make template with customCols templates.row = makeTemplateRow(); // repaint if need it list && opts.repaint && content(); }).trigger('columnpref'); if (mobile) { // for iOS5 bug $('body').on('touchstart touchmove touchend', function(e){}); } selectCheckbox && cwd.addClass('elfinder-has-checkbox'); $(window).on('scroll.'+fm.namespace, function() { winScrTm && cancelAnimationFrame(winScrTm); winScrTm = requestAnimationFrame(function() { wrapper.trigger(scrollEvent); }); }); $(document).on('keydown.'+fm.namespace, function(e) { if (e.keyCode == $.ui.keyCode.ESCAPE) { if (! fm.getUI().find('.ui-widget:visible').length) { unselectAll(); } } }); fm .one('init', function(){ var style = document.createElement('style'), sheet, node, base, resizeTm, iconSize, i = 0; if (document.head) { document.head.appendChild(style); sheet = style.sheet; sheet.insertRule('.elfinder-cwd-wrapper-empty .elfinder-cwd:not(.elfinder-table-header-sticky):after{ content:"'+fm.i18n('emptyFolder')+'" }', i++); sheet.insertRule('.elfinder-cwd-wrapper-empty .native-droppable .elfinder-cwd:not(.elfinder-table-header-sticky):after{ content:"'+fm.i18n('emptyFolder'+(mobile? 'LTap' : 'Drop'))+'" }', i++); sheet.insertRule('.elfinder-cwd-wrapper-empty .ui-droppable-disabled .elfinder-cwd:not(.elfinder-table-header-sticky):after{ content:"'+fm.i18n('emptyFolder')+'" }', i++); sheet.insertRule('.elfinder-cwd-wrapper-empty.elfinder-search-result .elfinder-cwd:not(.elfinder-table-header-sticky):after{ content:"'+fm.i18n('emptySearch')+'" }', i++); sheet.insertRule('.elfinder-cwd-wrapper-empty.elfinder-search-result.elfinder-incsearch-result .elfinder-cwd:not(.elfinder-table-header-sticky):after{ content:"'+fm.i18n('emptyIncSearch')+'" }', i++); sheet.insertRule('.elfinder-cwd-wrapper-empty.elfinder-search-result.elfinder-letsearch-result .elfinder-cwd:not(.elfinder-table-header-sticky):after{ content:"'+fm.i18n('emptyLetSearch')+'" }', i++); } if (iconSize = (fm.storage('iconsize') || options.iconsView.size || 0)) { iconSize = Math.min(iconSize, options.iconsView.sizeMax); cwd.trigger('iconpref', {size: iconSize}); } if (! mobile) { fm.one('open', function() { sheet && fm.zIndex && sheet.insertRule('.ui-selectable-helper{z-index:'+fm.zIndex+';}', i++); }); base = $('
          '); node = fm.getUI(); node.on('resize', function(e, data) { var offset; e.preventDefault(); e.stopPropagation(); if (data && data.fullscreen) { offset = node.offset(); if (data.fullscreen === 'on') { base.css({top:offset.top * -1 , left:offset.left * -1 }).appendTo(node); selectableOption.appendTo = base; } else { base.detach(); selectableOption.appendTo = 'body'; } cwd.data('selectable') && cwd.selectable('option', {appendTo : selectableOption.appendTo}); } }); } hasUiTree = fm.getUI('tree').length; }) .bind('enable', function() { resize(); }) .bind('request.open', function() { bufferExt.getTmbs = []; }) .one('open', function() { if (fm.maxTargets) { tmbNum = Math.min(fm.maxTargets, tmbNum); } }) .bind('open add remove searchend', function() { var phash = fm.cwd().hash, type = this.type; if (type === 'open' || type === 'searchend' || fm.searchStatus.state < 2) { cwdHashes = $.map(fm.files(phash), function(f) { return f.hash; }); fm.trigger('cwdhasheschange', cwdHashes); } if (type === 'open') { var inTrash = function() { var isIn = false; $.each(cwdParents, function(i, h) { if (fm.trashes[h]) { isIn = true; return false; } }); return isIn; }, req = phash? (! fm.file(phash) || hasUiTree? (! hasUiTree? fm.request({ data: { cmd : 'parents', target : fm.cwd().hash }, preventFail : true }) : (function() { var dfd = $.Deferred(); fm.one('treesync', function(e) { e.data.always(function() { dfd.resolve(); }); }); return dfd; })() ) : null ) : null, cwdObj = fm.cwd(); // add/remove volume id class if (cwdObj.volumeid !== curVolId) { vExpires.empty().hide(); if (curVolId) { wrapper.removeClass('elfinder-cwd-wrapper-' + curVolId); } curVolId = cwdObj.volumeid; showVolumeExpires(); wrapper.addClass('elfinder-cwd-wrapper-' + curVolId); } // add/remove trash class $.when(req).done(function() { cwdParents = fm.parents(cwdObj.hash); wrapper[inTrash()? 'addClass':'removeClass']('elfinder-cwd-wrapper-trash'); }); incHashes = void 0; unselectAll({ notrigger: true }); content(); } }) .bind('search', function(e) { cwdHashes = $.map(e.data.files, function(f) { return f.hash; }); fm.trigger('cwdhasheschange', cwdHashes); incHashes = void 0; fm.searchStatus.ininc = false; content(); fm.autoSync('stop'); }) .bind('searchend', function(e) { if (query || incHashes) { query = ''; if (incHashes) { fm.trigger('incsearchend', e.data); } else { if (!e.data || !e.data.noupdate) { content(); } } } fm.autoSync(); }) .bind('searchstart', function(e) { unselectAll(); query = e.data.query; }) .bind('incsearchstart', function(e) { var q = e.data.query || '', type = e.data.type || 'SearchName', searchTypes = fm.options.commandsOptions.search.searchTypes || {}; if ((searchTypes[type] && searchTypes[type].incsearch) || type === 'SearchName') { selectedFiles = {}; fm.lazy(function() { // incremental search var regex, incSearch, fst = ''; query = q; if (q) { if (q.substr(0,1) === '/') { q = q.substr(1); fst = '^'; } regex = new RegExp(fst + q.replace(/([\\*\;\.\?\[\]\{\}\(\)\^\$\-\|])/g, '\\$1'), 'i'); if (type === 'SearchName') { incHashes = $.grep(cwdHashes, function(hash) { var file = fm.file(hash); return (file && (file.name.match(regex) || (file.i18 && file.i18.match(regex))))? true : false; }); } else { incSearch = searchTypes[type].incsearch; if (typeof incSearch === 'string') { incHashes = $.grep(cwdHashes, function(hash) { var file = fm.file(hash); return (file && file[incSearch] && (file[incSearch] + '').match(regex))? true : false; }); } else if (typeof incSearch === 'function') { try { incHashes = $.grep(incSearch({val: q, regex: regex}, cwdHashes, fm), function(hash) { return fm.file(hash)? true : false; }); } catch(e) { incHashes = []; } } } fm.trigger('incsearch', { hashes: incHashes, query: q }) .searchStatus.ininc = true; content(); fm.autoSync('stop'); } else { fm.trigger('incsearchend'); } }); } }) .bind('incsearchend', function(e) { query = ''; fm.searchStatus.ininc = false; incHashes = void 0; if (!e.data || !e.data.noupdate) { content(); } fm.autoSync(); }) .bind('sortchange', function() { var lastScrollLeft = wrapper.scrollLeft(), allsel = cwd.hasClass('elfinder-cwd-allselected'); content(); fm.one('cwdrender', function() { wrapper.scrollLeft(lastScrollLeft); if (allsel) { selectedFiles = fm.arrayFlip(incHashes || cwdHashes, true); } (allsel || Object.keys(selectedFiles).length) && trigger(); }); }) .bind('viewchange', function() { var l = fm.viewType != 'list', allsel = cwd.hasClass('elfinder-cwd-allselected'); if (l != list) { list = l; fm.viewType = list? 'list' : 'icons'; if (iconSize) { fm.one('cwdinit', function() { cwd.trigger('iconpref', {size: iconSize}); }); } content(); resize(); if (allsel) { cwd.addClass('elfinder-cwd-allselected'); selectAllCheckbox.find('input').prop('checked', true); } Object.keys(selectedFiles).length && trigger(); } }) .bind('wzresize', function() { var place = list ? cwd.find('tbody') : cwd, cwdOffset; resize(true); if (bufferExt.hpi) { bottomMarkerShow(place, place.find('[id]').length); } cwdOffset = cwd.offset(); wz.data('rectangle', Object.assign( { width: wz.width(), height: wz.height(), cwdEdge: (fm.direction === 'ltr')? cwdOffset.left : cwdOffset.left + cwd.width() }, wz.offset()) ); bufferExt.itemH = (list? place.find('tr:first') : place.find('[id]:first')).outerHeight(true); }) .bind('changeclipboard', function(e) { clipCuts = {}; if (e.data && e.data.clipboard && e.data.clipboard.length) { $.each(e.data.clipboard, function(i, f) { if (f.cut) { clipCuts[f.hash] = true; } }); } }) .bind('resMixinMake', function() { setColwidth(); }) .bind('tmbreload', function(e) { var imgs = {}, files = (e.data && e.data.files)? e.data.files : null; $.each(files, function(i, f) { if (f.tmb && f.tmb != '1') { imgs[f.hash] = f.tmb; } }); if (Object.keys(imgs).length) { attachThumbnails(imgs, true); } }) .add(function(e) { var regex = query? new RegExp(query.replace(/([\\*\;\.\?\[\]\{\}\(\)\^\$\-\|])/g, '\\$1'), 'i') : null, mime = fm.searchStatus.mime, inSearch = fm.searchStatus.state > 1, phash = inSearch && fm.searchStatus.target? fm.searchStatus.target : fm.cwd().hash, curPath = fm.path(phash), inTarget = function(f) { var res, parents, path; res = (f.phash === phash); if (!res && inSearch) { path = f.path || fm.path(f.hash); res = (curPath && path.indexOf(curPath) === 0); if (! res && fm.searchStatus.mixed) { res = $.grep(fm.searchStatus.mixed, function(vid) { return f.hash.indexOf(vid) === 0? true : false; }).length? true : false; } } if (res && inSearch) { if (mime) { res = (f.mime.indexOf(mime) === 0); } else { res = (f.name.match(regex) || (f.i18 && f.i18.match(regex)))? true : false; } } return res; }, files = $.grep(e.data.added || [], function(f) { return inTarget(f)? true : false ;}); add(files); if (fm.searchStatus.state === 2) { $.each(files, function(i, f) { if ($.inArray(f.hash, cwdHashes) === -1) { cwdHashes.push(f.hash); } }); fm.trigger('cwdhasheschange', cwdHashes); } list && resize(); wrapper.trigger(scrollEvent); }) .change(function(e) { var phash = fm.cwd().hash, sel = fm.selected(), files, added; if (query) { $.each(e.data.changed || [], function(i, file) { if (fm.cwdHash2Elm(file.hash).length) { remove([file.hash]); add([file], 'change'); $.inArray(file.hash, sel) !== -1 && selectFile(file.hash); added = true; } }); } else { $.each($.grep(e.data.changed || [], function(f) { return f.phash == phash ? true : false; }), function(i, file) { if (fm.cwdHash2Elm(file.hash).length) { remove([file.hash]); add([file], 'change'); $.inArray(file.hash, sel) !== -1 && selectFile(file.hash); added = true; } }); } if (added) { fm.trigger('cwdhasheschange', cwdHashes); list && resize(); wrapper.trigger(scrollEvent); } trigger(); }) .remove(function(e) { var place = list ? cwd.find('tbody') : cwd; remove(e.data.removed || []); trigger(); if (buffer.length < 1 && place.children(fileSelector + (options.oldSchool? ':not(.elfinder-cwd-parent)' : '')).length < 1) { wz.addClass('elfinder-cwd-wrapper-empty'); selectCheckbox && selectAllCheckbox.find('input').prop('checked', false); bottomMarker.hide(); wrapper.off(scrollEvent, render); resize(); } else { bottomMarkerShow(place); wrapper.trigger(scrollEvent); } }) // select dragged file if no selected, disable selectable .dragstart(function(e) { var target = $(e.data.target), oe = e.data.originalEvent; if (target.hasClass(clFile)) { if (!target.hasClass(clSelected)) { !(oe.ctrlKey || oe.metaKey || oe.shiftKey) && unselectAll({ notrigger: true }); target.trigger(evtSelect); trigger(); } } cwd.removeClass(clDisabled).data('selectable') && cwd.selectable('disable'); selectLock = true; }) // enable selectable .dragstop(function() { cwd.data('selectable') && cwd.selectable('enable'); selectLock = false; }) .bind('lockfiles unlockfiles selectfiles unselectfiles', function(e) { var events = { lockfiles : evtDisable , unlockfiles : evtEnable , selectfiles : evtSelect, unselectfiles : evtUnselect }, event = events[e.type], files = e.data.files || [], l = files.length, helper = e.data.helper || $(), parents, ctr, add; if (l > 0) { parents = fm.parents(files[0]); } if (event === evtSelect || event === evtUnselect) { add = (event === evtSelect), $.each(files, function(i, hash) { var all = cwd.hasClass('elfinder-cwd-allselected'); if (! selectedFiles[hash]) { add && (selectedFiles[hash] = true); } else { if (all) { selectCheckbox && selectAllCheckbox.children('input').prop('checked', false); cwd.removeClass('elfinder-cwd-allselected'); all = false; } ! add && delete selectedFiles[hash]; } }); } if (!helper.data('locked')) { while (l--) { try { fm.cwdHash2Elm(files[l]).trigger(event); } catch(e) {} } ! e.data.inselect && trigger(); } if (wrapper.data('dropover') && parents.indexOf(wrapper.data('dropover')) !== -1) { ctr = e.type !== 'lockfiles'; helper.toggleClass('elfinder-drag-helper-plus', ctr); wrapper.toggleClass(clDropActive, ctr); } }) // select new files after some actions .bind('mkdir mkfile duplicate upload rename archive extract paste multiupload', function(e) { if (e.type == 'upload' && e.data._multiupload) return; var phash = fm.cwd().hash, files; unselectAll({ notrigger: true }); $.each((e.data.added || []).concat(e.data.changed || []), function(i, file) { file && file.phash == phash && selectFile(file.hash); }); trigger(); }) .shortcut({ pattern :'ctrl+a', description : 'selectall', callback : selectAll }) .shortcut({ pattern :'ctrl+shift+i', description : 'selectinvert', callback : selectInvert }) .shortcut({ pattern : 'left right up down shift+left shift+right shift+up shift+down', description : 'selectfiles', type : 'keydown' , //fm.UA.Firefox || fm.UA.Opera ? 'keypress' : 'keydown', callback : function(e) { select(e.keyCode, e.shiftKey); } }) .shortcut({ pattern : 'home', description : 'selectffile', callback : function(e) { unselectAll({ notrigger: true }); scrollToView(cwd.find('[id]:first').trigger(evtSelect)); trigger(); } }) .shortcut({ pattern : 'end', description : 'selectlfile', callback : function(e) { unselectAll({ notrigger: true }); scrollToView(cwd.find('[id]:last').trigger(evtSelect)) ; trigger(); } }) .shortcut({ pattern : 'page_up', description : 'pageTurning', callback : function(e) { if (bufferExt.itemH) { wrapper.scrollTop( Math.round( wrapper.scrollTop() - (Math.floor((wrapper.height() + (list? bufferExt.itemH * -1 : 16)) / bufferExt.itemH)) * bufferExt.itemH ) ); } } }).shortcut({ pattern : 'page_down', description : 'pageTurning', callback : function(e) { if (bufferExt.itemH) { wrapper.scrollTop( Math.round( wrapper.scrollTop() + (Math.floor((wrapper.height() + (list? bufferExt.itemH * -1 : 16)) / bufferExt.itemH)) * bufferExt.itemH ) ); } } }); }); // fm.timeEnd('cwdLoad') return this; }; PK!tYï ï 7file-manager-advanced/application/library/js/ui/tree.jsnu„[µü¤/** * @class elFinder folders tree * * @author Dmitry (dio) Levashov **/ $.fn.elfindertree = function(fm, opts) { "use strict"; var treeclass = fm.res('class', 'tree'); this.not('.'+treeclass).each(function() { var c = 'class', mobile = fm.UA.Mobile, /** * Root directory class name * * @type String */ root = fm.res(c, 'treeroot'), /** * Open root dir if not opened yet * * @type Boolean */ openRoot = opts.openRootOnLoad, /** * Open current work dir if not opened yet * * @type Boolean */ openCwd = opts.openCwdOnOpen, /** * Auto loading current directory parents and do expand their node * * @type Boolean */ syncTree = openCwd || opts.syncTree, /** * Subtree class name * * @type String */ subtree = fm.res(c, 'navsubtree'), /** * Directory class name * * @type String */ navdir = fm.res(c, 'treedir'), /** * Directory CSS selector * * @type String */ selNavdir = 'span.' + navdir, /** * Collapsed arrow class name * * @type String */ collapsed = fm.res(c, 'navcollapse'), /** * Expanded arrow class name * * @type String */ expanded = fm.res(c, 'navexpand'), /** * Class name to mark arrow for directory with already loaded children * * @type String */ loaded = 'elfinder-subtree-loaded', /** * Class name to mark need subdirs request * * @type String */ chksubdir = 'elfinder-subtree-chksubdir', /** * Arraw class name * * @type String */ arrow = fm.res(c, 'navarrow'), /** * Current directory class name * * @type String */ active = fm.res(c, 'active'), /** * Droppable dirs dropover class * * @type String */ dropover = fm.res(c, 'adroppable'), /** * Hover class name * * @type String */ hover = fm.res(c, 'hover'), /** * Disabled dir class name * * @type String */ disabled = fm.res(c, 'disabled'), /** * Draggable dir class name * * @type String */ draggable = fm.res(c, 'draggable'), /** * Droppable dir class name * * @type String */ droppable = fm.res(c, 'droppable'), /** * root wrapper class * * @type String */ wrapperRoot = 'elfinder-navbar-wrapper-root', /** * Un-disabled cmd `paste` volume's root wrapper class * * @type String */ pastable = 'elfinder-navbar-wrapper-pastable', /** * Un-disabled cmd `upload` volume's root wrapper class * * @type String */ uploadable = 'elfinder-navbar-wrapper-uploadable', /** * Is position x inside Navbar * * @param x Numbar * * @return */ insideNavbar = function(x) { var left = navbar.offset().left; return left <= x && x <= left + navbar.width(); }, /** * To call subdirs elements queue * * @type Object */ subdirsQue = {}, /** * To exec subdirs elements ids * */ subdirsExecQue = [], /** * Request subdirs to backend * * @param id String * * @return Deferred */ subdirs = function(ids) { var targets = []; $.each(ids, function(i, id) { subdirsQue[id] && targets.push(fm.navId2Hash(id)); delete subdirsQue[id]; }); if (targets.length) { return fm.request({ data: { cmd: 'subdirs', targets: targets, preventDefault : true } }).done(function(res) { if (res && res.subdirs) { $.each(res.subdirs, function(hash, subdirs) { var elm = fm.navHash2Elm(hash); elm.removeClass(chksubdir); elm[subdirs? 'addClass' : 'removeClass'](collapsed); }); } }); } }, subdirsJobRes = null, /** * To check target element is in window of subdirs * * @return void */ checkSubdirs = function() { var ids = Object.keys(subdirsQue); if (ids.length) { subdirsJobRes && subdirsJobRes._abort(); execSubdirsTm && clearTimeout(execSubdirsTm); subdirsExecQue = []; subdirsJobRes = fm.asyncJob(function(id) { return fm.isInWindow($('#'+id))? id : null; }, ids, { numPerOnce: 200 }) .done(function(arr) { if (arr.length) { subdirsExecQue = arr; execSubdirs(); } }); } }, subdirsPending = 0, execSubdirsTm, /** * Exec subdirs as batch request * * @return void */ execSubdirs = function() { var cnt = opts.subdirsMaxConn - subdirsPending, atOnce = fm.maxTargets? Math.min(fm.maxTargets, opts.subdirsAtOnce) : opts.subdirsAtOnce, i, ids; execSubdirsTm && cancelAnimationFrame(execSubdirsTm); if (subdirsExecQue.length) { if (cnt > 0) { for (i = 0; i < cnt; i++) { if (subdirsExecQue.length) { subdirsPending++; subdirs(subdirsExecQue.splice(0, atOnce)).always(function() { subdirsPending--; execSubdirs(); }); } } } else { execSubdirsTm = requestAnimationFrame(function() { subdirsExecQue.length && execSubdirs(); }); } } }, drop = fm.droppable.drop, /** * Droppable options * * @type Object */ droppableopts = $.extend(true, {}, fm.droppable, { // show subfolders on dropover over : function(e, ui) { var dst = $(this), helper = ui.helper, cl = hover+' '+dropover, hash, status; e.stopPropagation(); helper.data('dropover', helper.data('dropover') + 1); dst.data('dropover', true); if (ui.helper.data('namespace') !== fm.namespace || ! fm.insideWorkzone(e.pageX, e.pageY)) { dst.removeClass(cl); helper.removeClass('elfinder-drag-helper-move elfinder-drag-helper-plus'); return; } if (! insideNavbar(e.clientX)) { dst.removeClass(cl); return; } helper.removeClass('elfinder-drag-helper-move elfinder-drag-helper-plus'); dst.addClass(hover); if (dst.is('.'+collapsed+':not(.'+expanded+')')) { dst.data('expandTimer', setTimeout(function() { dst.is('.'+collapsed+'.'+hover) && dst.children('.'+arrow).trigger('click'); }, 500)); } if (dst.is('.elfinder-ro,.elfinder-na')) { dst.removeClass(dropover); //helper.removeClass('elfinder-drag-helper-move elfinder-drag-helper-plus'); return; } hash = fm.navId2Hash(dst.attr('id')); dst.data('dropover', hash); $.each(ui.helper.data('files'), function(i, h) { if (h === hash || (fm.file(h).phash === hash && !ui.helper.hasClass('elfinder-drag-helper-plus'))) { dst.removeClass(cl); return false; // break $.each } }); if (helper.data('locked')) { status = 'elfinder-drag-helper-plus'; } else { status = 'elfinder-drag-helper-move'; if (fm._commands.copy && (e.shiftKey || e.ctrlKey || e.metaKey)) { status += ' elfinder-drag-helper-plus'; } } dst.hasClass(dropover) && helper.addClass(status); requestAnimationFrame(function(){ dst.hasClass(dropover) && helper.addClass(status); }); }, out : function(e, ui) { var dst = $(this), helper = ui.helper; e.stopPropagation(); if (insideNavbar(e.clientX)) { helper.removeClass('elfinder-drag-helper-move elfinder-drag-helper-plus'); } helper.data('dropover', Math.max(helper.data('dropover') - 1, 0)); dst.data('expandTimer') && clearTimeout(dst.data('expandTimer')); dst.removeData('dropover') .removeClass(hover+' '+dropover); }, deactivate : function() { $(this).removeData('dropover') .removeClass(hover+' '+dropover); }, drop : function(e, ui) { insideNavbar(e.clientX) && drop.call(this, e, ui); } }), spinner = $(fm.res('tpl', 'navspinner')), /** * Directory html template * * @type String */ tpl = fm.res('tpl', 'navdir'), /** * Permissions marker html template * * @type String */ ptpl = fm.res('tpl', 'perms'), /** * Lock marker html template * * @type String */ ltpl = fm.res('tpl', 'lock'), /** * Symlink marker html template * * @type String */ stpl = fm.res('tpl', 'symlink'), /** * Directory hashes that has more pages * * @type Object */ hasMoreDirs = {}, /** * Html template replacement methods * * @type Object */ replace = { id : function(dir) { return fm.navHash2Id(dir.hash); }, name : function(dir) { return fm.escape(dir.i18 || dir.name); }, cssclass : function(dir) { var cname = (dir.phash && ! dir.isroot ? '' : root)+' '+navdir+' '+fm.perms2class(dir); dir.dirs && !dir.link && (cname += ' ' + collapsed) && dir.dirs == -1 && (cname += ' ' + chksubdir); opts.getClass && (cname += ' ' + opts.getClass(dir)); dir.csscls && (cname += ' ' + fm.escape(dir.csscls)); return cname; }, title : function(dir) { return opts.attrTitle? (' title="' + fm.escape(fm.path(dir.hash, true) || dir.i18 || dir.name) + '"') : ''; }, root : function(dir) { var cls = ''; if (!dir.phash || dir.isroot) { cls += ' '+wrapperRoot; if (!dir.disabled || dir.disabled.length < 1) { cls += ' '+pastable+' '+uploadable; } else { if ($.inArray('paste', dir.disabled) === -1) { cls += ' '+pastable; } if ($.inArray('upload', dir.disabled) === -1) { cls += ' '+uploadable; } } return cls; } else { return ''; } }, permissions : function(dir) { return !dir.read || !dir.write ? ptpl : ''; }, symlink : function(dir) { return dir.alias ? stpl : ''; }, style : function(dir) { return dir.icon ? fm.getIconStyle(dir) : ''; } }, /** * Return html for given dir * * @param Object directory * @return String */ itemhtml = function(dir) { return tpl.replace(/(?:\{([a-z]+)\})/ig, function(m, key) { var res = replace[key] ? replace[key](dir) : (dir[key] || ''); if (key === 'id' && dir.dirs == -1) { subdirsQue[res] = res; } return res; }); }, /** * Return only dirs from files list * * @param Array files list * @param Boolean do check exists * @return Array */ filter = function(files, checkExists) { return $.map(files || [], function(f) { return (f.mime === 'directory' && (!checkExists || fm.navHash2Elm(f.hash).length)) ? f : null; }); }, /** * Find parent subtree for required directory * * @param String dir hash * @return jQuery */ findSubtree = function(hash) { return hash ? fm.navHash2Elm(hash).next('.'+subtree) : tree; }, /** * Find directory (wrapper) in required node * before which we can insert new directory * * @param jQuery parent directory * @param Object new directory * @return jQuery */ findSibling = function(subtree, dir) { var node = subtree.children(':first'), info; while (node.length) { info = fm.file(fm.navId2Hash(node.children('[id]').attr('id'))); if ((info = fm.file(fm.navId2Hash(node.children('[id]').attr('id')))) && compare(dir, info) < 0) { return node; } node = node.next(); } return subtree.children('button.elfinder-navbar-pager-next'); }, /** * Add new dirs in tree * * @param Array dirs list * @return void */ updateTree = function(dirs) { var length = dirs.length, orphans = [], i = length, tgts = $(), done = {}, cwd = fm.cwd(), append = function(parent, dirs, start, direction) { var hashes = {}, curStart = 0, max = fm.newAPI? Math.min(10000, Math.max(10, opts.subTreeMax)) : 10000, setHashes = function() { hashes = {}; $.each(dirs, function(i, d) { hashes[d.hash] = i; }); }, change = function(mode) { if (mode === 'prepare') { $.each(dirs, function(i, d) { d.node && parent.append(d.node.hide()); }); } else if (mode === 'done') { $.each(dirs, function(i, d) { d.node && d.node.detach().show(); }); } }, update = function(e, data) { var i, changed; e.stopPropagation(); if (data.select) { render(getStart(data.select)); return; } if (data.change) { change(data.change); return; } if (data.removed && data.removed.length) { dirs = $.grep(dirs, function(d) { if (data.removed.indexOf(d.hash) === -1) { return true; } else { !changed && (changed = true); return false; } }); } if (data.added && data.added.length) { dirs = dirs.concat($.grep(data.added, function(d) { if (hashes[d.hash] === void(0)) { !changed && (changed = true); return true; } else { return false; } })); } if (changed) { dirs.sort(compare); setHashes(); render(curStart); } }, getStart = function(target) { if (hashes[target] !== void(0)) { return Math.floor(hashes[target] / max) * max; } return void(0); }, target = fm.navId2Hash(parent.prev('[id]').attr('id')), render = function(start, direction) { var html = [], nodes = {}, total, page, s, parts, prev, next, prevBtn, nextBtn; delete hasMoreDirs[target]; curStart = start; parent.off('update.'+fm.namespace, update); if (dirs.length > max) { parent.on('update.'+fm.namespace, update); if (start === void(0)) { s = 0; setHashes(); start = getStart(cwd.hash); if (start === void(0)) { start = 0; } } parts = dirs.slice(start, start + max); hasMoreDirs[target] = parent; prev = start? Math.max(-1, start - max) : -1; next = (start + max >= dirs.length)? 0 : start + max; total = Math.ceil(dirs.length/max); page = Math.ceil(start/max); } $.each(parts || dirs, function(i, d) { html.push(itemhtml(d)); if (d.node) { nodes[d.hash] = d.node; } }); if (prev > -1) { prevBtn = $('') .text(fm.i18n('btnPrevious', page, total)) .button({ icons: { primary: "ui-icon-caret-1-n" } }) .on('click', function(e) { e.preventDefault(); e.stopPropagation(); render(prev, 'up'); }); } else { prevBtn = $(); } if (next) { nextBtn = $('') .text(fm.i18n('btnNext', page + 2, total)) .button({ icons: { primary: "ui-icon-caret-1-s" } }) .on('click', function(e) { e.preventDefault(); e.stopPropagation(); render(next, 'down'); }); } else { nextBtn = $(); } detach(); parent.empty()[parts? 'addClass' : 'removeClass']('elfinder-navbar-hasmore').append(prevBtn, html.join(''), nextBtn); $.each(nodes, function(h, n) { fm.navHash2Elm(h).parent().replaceWith(n); }); if (direction) { autoScroll(fm.navHash2Id(parts[direction === 'up'? parts.length - 1 : 0].hash)); } ! mobile && fm.lazy(function() { updateDroppable(null, parent); }); }, detach = function() { $.each(parent.children('.elfinder-navbar-wrapper'), function(i, elm) { var n = $(elm), ch = n.children('[id]:first'), h, c; if (ch.hasClass(loaded)) { h = fm.navId2Hash(ch.attr('id')); if (h && (c = hashes[h]) !== void(0)) { dirs[c].node = n.detach(); } } }); }; render(); }, dir, html, parent, sibling, init, atonce = {}, updates = [], base, node, lastKey, lastNodes = {}; while (i--) { dir = dirs[i]; if (done[dir.hash] || fm.navHash2Elm(dir.hash).length) { continue; } done[dir.hash] = true; if ((parent = findSubtree(dir.phash)).length) { lastKey = dir.phash || 'treeroot'; if (typeof lastNodes[lastKey] === 'undefined') { lastNodes[lastKey] = parent.children(':last'); } init = !lastNodes[lastKey].length; if (dir.phash && (init || parent.hasClass('elfinder-navbar-hasmore') || (sibling = findSibling(parent, dir)).length)) { if (init) { if (!atonce[dir.phash]) { atonce[dir.phash] = []; } atonce[dir.phash].push(dir); } else { if (sibling) { node = itemhtml(dir); sibling.before(node); ! mobile && (tgts = tgts.add(node)); } else { updates.push(dir); } } } else { node = itemhtml(dir); if (init) { parent.prepend(node); } else { lastNodes[lastKey].after(node); } if (!dir.phash || dir.isroot) { base = fm.navHash2Elm(dir.hash).parent(); } ! mobile && updateDroppable(null, base); } } else { orphans.push(dir); } } // When init, html append at once if (Object.keys(atonce).length){ $.each(atonce, function(p, dirs){ var parent = findSubtree(p), html = []; dirs.sort(compare); append(parent, dirs); }); } if (updates.length) { parent.trigger('update.' + fm.namespace, { added : updates }); } if (orphans.length && orphans.length < length) { updateTree(orphans); return; } ! mobile && tgts.length && fm.lazy(function() { updateDroppable(tgts); }); }, /** * sort function by dir.name * */ compare = function(dir1, dir2) { if (! fm.sortAlsoTreeview) { return fm.sortRules.name(dir1, dir2); } else { var asc = fm.sortOrder == 'asc', type = fm.sortType, rules = fm.sortRules, res; res = asc? rules[fm.sortType](dir1, dir2) : rules[fm.sortType](dir2, dir1); return type !== 'name' && res === 0 ? res = asc ? rules.name(dir1, dir2) : rules.name(dir2, dir1) : res; } }, /** * Timer ID of autoScroll * * @type Integer */ autoScrTm, /** * Auto scroll to cwd * * @return Object jQuery Deferred */ autoScroll = function(target) { var dfrd = $.Deferred(), current, parent, top, treeH, bottom, tgtTop; autoScrTm && clearTimeout(autoScrTm); autoScrTm = setTimeout(function() { current = $(document.getElementById((target || fm.navHash2Id(fm.cwd().hash)))); if (current.length) { // expand parents directory (openCwd? current : current.parent()).parents('.elfinder-navbar-wrapper').children('.'+loaded).addClass(expanded).next('.'+subtree).show(); parent = tree.parent().stop(false, true); top = parent.offset().top; treeH = parent.height(); bottom = top + treeH - current.outerHeight(); tgtTop = current.offset().top; if (tgtTop < top || tgtTop > bottom) { parent.animate({ scrollTop : parent.scrollTop() + tgtTop - top - treeH / 3 }, { duration : opts.durations.autoScroll, complete : function() { dfrd.resolve(); } }); } else { dfrd.resolve(); } } else { dfrd.reject(); } }, 100); return dfrd; }, /** * Get hashes array of items of the bottom of the leaf root back from the target * * @param Object elFinder item(directory) object * @return Array hashes */ getEnds = function(d) { var cur = d || fm.cwd(), res = cur.hash? [ cur.hash ] : [], phash, root, dir; root = fm.root(cur.hash); dir = fm.file(root); while (dir && (phash = dir.phash)) { res.unshift(phash); root = fm.root(phash); dir = fm.file(root); if (fm.navHash2Elm(dir.hash).hasClass(loaded)) { break; } } return res; }, /** * Select pages back in order to display the target * * @param Object elFinder item(directory) object * @return Object jQuery node object of target node */ selectPages = function(current) { var cur = current || fm.cwd(), curHash = cur.hash, node = fm.navHash2Elm(curHash); if (!node.length) { while(cur && cur.phash) { if (hasMoreDirs[cur.phash] && !fm.navHash2Elm(cur.hash).length) { hasMoreDirs[cur.phash].trigger('update.'+fm.namespace, { select : cur.hash }); } cur = fm.file(cur.phash); } node = fm.navHash2Elm(curHash); } return node; }, /** * Flag indicating that synchronization is currently in progress * * @type Boolean */ syncing, /** * Mark current directory as active * If current directory is not in tree - load it and its parents * * @param Array directory objects of cwd * @param Boolean do auto scroll * @return Object jQuery Deferred */ sync = function(cwdDirs, aScr) { var cwd = fm.cwd(), cwdhash = cwd.hash, autoScr = aScr === void(0)? syncTree : aScr, loadParents = function(dir) { var dfd = $.Deferred(), reqs = [], ends = getEnds(dir), makeReq = function(cmd, h, until) { var data = { cmd : cmd, target : h }; if (until) { data.until = until; } return fm.request({ data : data, preventFail : true }); }, baseHash, baseId; reqs = $.map(ends, function(h) { var d = fm.file(h), isRoot = d? fm.isRoot(d) : false, node = fm.navHash2Elm(h), getPhash = function(h, dep) { var d, ph, depth = dep || 1; ph = (d = fm.file(h))? d.phash : false; if (ph && depth > 1) { return getPhash(ph, --depth); } return ph; }, until, closest = (function() { var phash = getPhash(h); until = phash; while (phash) { if (fm.navHash2Elm(phash).hasClass(loaded)) { break; } until = phash; phash = getPhash(phash); } if (!phash) { until = void(0); phash = fm.root(h); } return phash; })(), cmd; if (!node.hasClass(loaded) && (isRoot || !d || !fm.navHash2Elm(d.phash).hasClass(loaded))) { if (isRoot || closest === getPhash(h) || closest === getPhash(h, 2)) { until = void(0); cmd = 'tree'; if (!isRoot) { h = getPhash(h); } } else { cmd = 'parents'; } if (!baseHash) { baseHash = (cmd === 'tree')? h : closest; } return makeReq(cmd, h, until); } return null; }); if (reqs.length) { selectPages(fm.file(baseHash)); baseId = fm.navHash2Id(baseHash); autoScr && autoScroll(baseId); baseNode = $('#'+baseId); spinner = $(fm.res('tpl', 'navspinner')).insertBefore(baseNode.children('.'+arrow)); baseNode.removeClass(collapsed); $.when.apply($, reqs) .done(function() { var res = {},data, treeDirs, dirs, argLen, i; argLen = arguments.length; if (argLen > 0) { for (i = 0; i < argLen; i++) { data = arguments[i].tree || []; res[ends[i]] = Object.assign([], filter(data)); } } dfd.resolve(res); }) .fail(function() { dfd.reject(); }); return dfd; } else { return dfd.resolve(); } }, done= function(res, dfrd) { var open = function() { if (openRoot && baseNode) { findSubtree(baseNode.hash).show().prev(selNavdir).addClass(expanded); openRoot = false; } if (autoScr) { autoScroll().done(checkSubdirs); } else { checkSubdirs(); } }, current; if (res) { $.each(res, function(endHash, dirs) { dirs && updateTree(dirs); selectPages(fm.file(endHash)); dirs && updateArrows(dirs, loaded); }); } if (cwdDirs) { (fm.api < 2.1) && cwdDirs.push(cwd); updateTree(cwdDirs); } // set current node current = selectPages(); if (!current.hasClass(active)) { tree.find(selNavdir+'.'+active).removeClass(active); current.addClass(active); } // mark as loaded to cwd parents current.parents('.elfinder-navbar-wrapper').children('.'+navdir).addClass(loaded); if (res) { fm.lazy(open).done(function() { dfrd.resolve(); }); } else { open(); dfrd.resolve(); } }, rmSpinner = function(fail) { if (baseNode) { spinner.remove(); baseNode.addClass(collapsed + (fail? '' : (' ' + loaded))); } }, dfrd = $.Deferred(), baseNode, spinner; if (!fm.navHash2Elm(cwdhash).length) { syncing = true; loadParents() .done(function(res) { done(res, dfrd); rmSpinner(); }) .fail(function() { rmSpinner(true); dfrd.reject(); }) .always(function() { syncing = false; }); } else { done(void(0), dfrd); } // trigger 'treesync' with my $.Deferred fm.trigger('treesync', dfrd); return dfrd; }, /** * Make writable and not root dirs droppable * * @return void */ updateDroppable = function(target, node) { var limit = 100, next; if (!target) { if (!node || node.closest('div.'+wrapperRoot).hasClass(uploadable)) { (node || tree.find('div.'+uploadable)).find(selNavdir+':not(.elfinder-ro,.elfinder-na)').addClass('native-droppable'); } if (!node || node.closest('div.'+wrapperRoot).hasClass(pastable)) { target = (node || tree.find('div.'+pastable)).find(selNavdir+':not(.'+droppable+')'); } else { target = $(); } if (node) { // check leaf roots node.children('div.'+wrapperRoot).each(function() { updateDroppable(null, $(this)); }); } } // make droppable on async if (target.length) { fm.asyncJob(function(elm) { $(elm).droppable(droppableopts); }, $.makeArray(target), { interval : 20, numPerOnce : 100 }); } }, /** * Check required folders for subfolders and update arrow classes * * @param Array folders to check * @param String css class * @return void */ updateArrows = function(dirs, cls) { var sel = cls == loaded ? '.'+collapsed+':not(.'+loaded+')' : ':not(.'+collapsed+')'; $.each(dirs, function(i, dir) { fm.navHash2Elm(dir.phash).filter(sel) .filter(function() { return $.grep($(this).next('.'+subtree).children(), function(n) { return ($(n).children().hasClass(root))? false : true; }).length > 0; }) .addClass(cls); }); }, /** * Navigation tree * * @type JQuery */ tree = $(this).addClass(treeclass) // make dirs draggable and toggle hover class .on('mouseenter mouseleave', selNavdir, function(e) { var enter = (e.type === 'mouseenter'); if (enter && scrolling) { return; } var link = $(this), hash, dir; if (!link.hasClass(dropover+' '+disabled)) { if (!mobile && enter && !link.data('dragRegisted') && !link.hasClass(root+' '+draggable+' elfinder-na elfinder-wo')) { link.data('dragRegisted', true); if (fm.isCommandEnabled('copy', (hash = fm.navId2Hash(link.attr('id'))))) { link.draggable(fm.draggable); } } link.toggleClass(hover, enter); } // update title attr if necessary if (enter && opts.attrTitle) { dir = fm.file(hash || fm.navId2Hash(link.attr('id'))); if (!dir.isroot && link.attr('title') === (dir.i18 || dir.name)) { link.attr('title', fm.path(hash, true)); } } }) // native drag enter .on('dragenter', selNavdir, function(e) { if (e.originalEvent.dataTransfer) { var dst = $(this); dst.addClass(hover); if (dst.is('.'+collapsed+':not(.'+expanded+')')) { dst.data('expandTimer', setTimeout(function() { dst.is('.'+collapsed+'.'+hover) && dst.children('.'+arrow).trigger('click'); }, 500)); } } }) // native drag leave .on('dragleave', selNavdir, function(e) { if (e.originalEvent.dataTransfer) { var dst = $(this); dst.data('expandTimer') && clearTimeout(dst.data('expandTimer')); dst.removeClass(hover); } }) // open dir or open subfolders in tree .on('click', selNavdir, function(e) { var link = $(this), hash = fm.navId2Hash(link.attr('id')), file = fm.file(hash); if (link.data('longtap')) { link.removeData('longtap'); e.stopPropagation(); return; } if (!link.hasClass(active)) { tree.find(selNavdir+'.'+active).removeClass(active); link.addClass(active); } if (hash != fm.cwd().hash && !link.hasClass(disabled)) { fm.exec('open', hash).done(function() { fm.one('opendone', function() { fm.select({selected: [hash], origin: 'navbar'}); }); }); } else { if (link.hasClass(collapsed)) { link.children('.'+arrow).trigger('click'); } fm.select({selected: [hash], origin: 'navbar'}); } }) // for touch device .on('touchstart', selNavdir, function(e) { if (e.originalEvent.touches.length > 1) { return; } var evt = e.originalEvent, p; if (e.target.nodeName === 'INPUT') { e.stopPropagation(); return; } p = $(this).addClass(hover) .removeData('longtap') .data('tmlongtap', setTimeout(function(e){ // long tap p.data('longtap', true); fm.trigger('contextmenu', { 'type' : 'navbar', 'targets' : [fm.navId2Hash(p.attr('id'))], 'x' : evt.touches[0].pageX, 'y' : evt.touches[0].pageY }); }, 500)); }) .on('touchmove touchend', selNavdir, function(e) { if (e.target.nodeName === 'INPUT') { e.stopPropagation(); return; } clearTimeout($(this).data('tmlongtap')); $(this).removeData('tmlongtap'); if (e.type == 'touchmove') { $(this).removeClass(hover); } }) // toggle subfolders in tree .on('click', selNavdir+'.'+collapsed+' .'+arrow, function(e) { var arrow = $(this), link = arrow.parent(selNavdir), stree = link.next('.'+subtree), dfrd = $.Deferred(), slideTH = 30, cnt; e.stopPropagation(); if (link.hasClass(loaded)) { link.toggleClass(expanded); fm.lazy(function() { cnt = link.hasClass(expanded)? stree.children().length + stree.find('div.elfinder-navbar-subtree[style*=block]').children().length : stree.find('div:visible').length; if (cnt > slideTH) { stree.toggle(); fm.draggingUiHelper && fm.draggingUiHelper.data('refreshPositions', 1); checkSubdirs(); } else { stree.stop(true, true)[link.hasClass(expanded)? 'slideDown' : 'slideUp'](opts.durations.slideUpDown, function(){ fm.draggingUiHelper && fm.draggingUiHelper.data('refreshPositions', 1); checkSubdirs(); }); } }).always(function() { dfrd.resolve(); }); } else { spinner.insertBefore(arrow); link.removeClass(collapsed); fm.request({cmd : 'tree', target : fm.navId2Hash(link.attr('id'))}) .done(function(data) { updateTree(Object.assign([], filter(data.tree))); if (stree.children().length) { link.addClass(collapsed+' '+expanded); if (stree.children().length > slideTH) { stree.show(); fm.draggingUiHelper && fm.draggingUiHelper.data('refreshPositions', 1); checkSubdirs(); } else { stree.stop(true, true).slideDown(opts.durations.slideUpDown, function(){ fm.draggingUiHelper && fm.draggingUiHelper.data('refreshPositions', 1); checkSubdirs(); }); } } }) .always(function(data) { spinner.remove(); link.addClass(loaded); fm.one('treedone', function() { dfrd.resolve(); }); }); } arrow.data('dfrd', dfrd); }) .on('contextmenu', selNavdir, function(e) { e.stopPropagation(); var self = $(this); // now dirname editing if (self.find('input:text').length) { return; } e.preventDefault(); if (!self.data('tmlongtap')) { fm.trigger('contextmenu', { 'type' : 'navbar', 'targets' : [fm.navId2Hash($(this).attr('id'))], 'x' : e.pageX, 'y' : e.pageY }); } self.addClass('ui-state-hover'); fm.getUI('contextmenu').children().on('mouseenter', function() { self.addClass('ui-state-hover'); }); fm.bind('closecontextmenu', function() { self.removeClass('ui-state-hover'); }); }) .on('scrolltoview', selNavdir, function(e, data) { var self = $(this); autoScroll(self.attr('id')).done(function() { if (!data || data.blink === 'undefined' || data.blink) { fm.resources.blink(self, 'lookme'); } }); }) // prepend fake dir .on('create.'+fm.namespace, function(e, item) { var pdir = findSubtree(item.phash), lock = item.move || false, dir = $(itemhtml(item)).addClass('elfinder-navbar-wrapper-tmp'), selected = fm.selected(); lock && selected.length && fm.trigger('lockfiles', {files: selected}); pdir.prepend(dir); }), scrolling = false, navbarScrTm, // move tree into navbar navbar = fm.getUI('navbar').append(tree).show().on('scroll', function() { scrolling = true; navbarScrTm && cancelAnimationFrame(navbarScrTm); navbarScrTm = requestAnimationFrame(function() { scrolling = false; checkSubdirs(); }); }), prevSortTreeview = fm.sortAlsoTreeview; fm.open(function(e) { var data = e.data, dirs = filter(data.files), contextmenu = fm.getUI('contextmenu'); data.init && tree.empty(); if (fm.UA.iOS) { navbar.removeClass('overflow-scrolling-touch').addClass('overflow-scrolling-touch'); } if (dirs.length) { fm.lazy(function() { if (!contextmenu.data('cmdMaps')) { contextmenu.data('cmdMaps', {}); } updateTree(dirs); updateArrows(dirs, loaded); sync(dirs); }); } else { sync(); } }) // add new dirs .add(function(e) { var dirs = filter(e.data.added); if (dirs.length) { updateTree(dirs); updateArrows(dirs, collapsed); } }) // update changed dirs .change(function(e) { // do ot perfome while syncing if (syncing) { return; } var dirs = filter(e.data.changed, true), length = dirs.length, l = length, tgts = $(), changed = {}, dir, phash, node, tmp, realParent, reqParent, realSibling, reqSibling, isExpanded, isLoaded, parent, subdirs; $.each(hasMoreDirs, function(h, node) { node.trigger('update.'+fm.namespace, { change: 'prepare' }); }); while (l--) { dir = dirs[l]; phash = dir.phash; if ((node = fm.navHash2Elm(dir.hash)).length) { parent = node.parent(); if (phash) { realParent = node.closest('.'+subtree); reqParent = findSubtree(phash); realSibling = node.parent().next(); reqSibling = findSibling(reqParent, dir); if (!reqParent.length) { continue; } if (reqParent[0] !== realParent[0] || realSibling.get(0) !== reqSibling.get(0)) { reqSibling.length ? reqSibling.before(parent) : reqParent.append(parent); } } isExpanded = node.hasClass(expanded); isLoaded = node.hasClass(loaded); tmp = $(itemhtml(dir)); node.replaceWith(tmp.children(selNavdir)); ! mobile && updateDroppable(null, parent); if (dir.dirs && (isExpanded || isLoaded) && (node = fm.navHash2Elm(dir.hash)) && node.next('.'+subtree).children().length) { isExpanded && node.addClass(expanded); isLoaded && node.addClass(loaded); } subdirs |= dir.dirs == -1; } } // to check subdirs if (subdirs) { checkSubdirs(); } $.each(hasMoreDirs, function(h, node) { node.trigger('update.'+fm.namespace, { change: 'done' }); }); length && sync(void(0), false); }) // remove dirs .remove(function(e) { var dirs = e.data.removed, l = dirs.length, node, stree, removed; $.each(hasMoreDirs, function(h, node) { node.trigger('update.'+fm.namespace, { removed : dirs }); node.trigger('update.'+fm.namespace, { change: 'prepare' }); }); while (l--) { if ((node = fm.navHash2Elm(dirs[l])).length) { removed = true; stree = node.closest('.'+subtree); node.parent().detach(); if (!stree.children().length) { stree.hide().prev(selNavdir).removeClass(collapsed+' '+expanded+' '+loaded); } } } removed && fm.getUI('navbar').children('.ui-resizable-handle').trigger('resize'); $.each(hasMoreDirs, function(h, node) { node.trigger('update.'+fm.namespace, { change: 'done' }); }); }) // lock/unlock dirs while moving .bind('lockfiles unlockfiles', function(e) { var lock = e.type == 'lockfiles', helperLocked = e.data.helper? e.data.helper.data('locked') : false, act = (lock && !helperLocked) ? 'disable' : 'enable', dirs = $.grep(e.data.files||[], function(h) { var dir = fm.file(h); return dir && dir.mime == 'directory' ? true : false; }); $.each(dirs, function(i, hash) { var dir = fm.navHash2Elm(hash); if (dir.length && !helperLocked) { dir.hasClass(draggable) && dir.draggable(act); dir.hasClass(droppable) && dir.droppable(act); dir[lock ? 'addClass' : 'removeClass'](disabled); } }); }) .bind('sortchange', function() { if (fm.sortAlsoTreeview || prevSortTreeview !== fm.sortAlsoTreeview) { var dirs, ends = [], endsMap = {}, endsVid = {}, topVid = '', single = false, current; fm.lazy(function() { dirs = filter(fm.files()); prevSortTreeview = fm.sortAlsoTreeview; tree.empty(); // append volume roots at first updateTree($.map(fm.roots, function(h) { var dir = fm.file(h); return dir && !dir.phash? dir : null; })); if (!Object.keys(hasMoreDirs).length) { updateTree(dirs); current = selectPages(); updateArrows(dirs, loaded); } else { ends = getEnds(); if (ends.length > 1) { $.each(ends, function(i, end) { var vid = fm.file(fm.root(end)).volumeid; if (i === 0) { topVid = vid; } endsVid[vid] = end; endsMap[end] = []; }); $.each(dirs, function(i, d) { if (!d.volumeid) { single = true; return false; } endsMap[endsVid[d.volumeid] || endsVid[topVid]].push(d); }); } else { single = true; } if (single) { $.each(ends, function(i, endHash) { updateTree(dirs); current = selectPages(fm.file(endHash)); updateArrows(dirs, loaded); }); } else { $.each(endsMap, function(endHash, dirs) { updateTree(dirs); current = selectPages(fm.file(endHash)); updateArrows(dirs, loaded); }); } } sync(); }, 100); } }); }); return this; }; PK!+/ .i i 7file-manager-advanced/application/library/js/ui/stat.jsnu„[µü¤/** * @class elFinder ui * Display number of files/selected files and its size in statusbar * * @author Dmitry (dio) Levashov **/ $.fn.elfinderstat = function(fm) { "use strict"; return this.each(function() { var size = $(this).addClass('elfinder-stat-size'), sel = $('
          ') .on('click', 'a', function(e) { var hash = $(this).data('hash'); e.preventDefault(); fm.exec('opendir', [ hash ]); }), titleitems = fm.i18n('items'), titlesel = fm.i18n('selected'), titlesize = fm.i18n('size'), setstat = function(files) { var c = 0, s = 0, cwd = fm.cwd(), calc = true, hasSize = true; if (cwd.sizeInfo || cwd.size) { s = cwd.size; calc = false; } $.each(files, function(i, file) { c++; if (calc) { s += parseInt(file.size) || 0; if (hasSize === true && file.mime === 'directory' && !file.sizeInfo) { hasSize = false; } } }); size.html(titleitems+': '+c+', '+fm.i18n(hasSize? 'sum' : 'size')+': '+fm.formatSize(s)+'') .attr('title', size.text()); fm.trigger('uistatchange'); }, setIncsearchStat = function(data) { size.find('span.elfinder-stat-incsearch').html(data? data.hashes.length + ' / ' : ''); size.attr('title', size.text()); fm.trigger('uistatchange'); }, setSelect = function(files) { var s = 0, c = 0, dirs = [], path, file; if (files.length === 1) { file = files[0]; s = file.size; if (fm.searchStatus.state === 2) { path = fm.escape(file.path? file.path.replace(/\/[^\/]*$/, '') : '..'); dirs.push('
          '+path+''); } dirs.push(fm.escape(file.i18 || file.name)); sel.html(dirs.join('/') + (s > 0 ? ', '+fm.formatSize(s) : '')); } else if (files.length) { $.each(files, function(i, file) { c++; s += parseInt(file.size)||0; }); sel.html(c ? titlesel+': '+c+', '+titlesize+': '+fm.formatSize(s) : ' '); } else { sel.html(''); } sel.attr('title', sel.text()); fm.trigger('uistatchange'); }; fm.getUI('statusbar').prepend(size).append(sel).show(); if (fm.UA.Mobile && $.fn.tooltip) { fm.getUI('statusbar').tooltip({ classes: { 'ui-tooltip': 'elfinder-ui-tooltip ui-widget-shadow' }, tooltipClass: 'elfinder-ui-tooltip ui-widget-shadow', track: true }); } fm .bind('cwdhasheschange', function(e) { setstat($.map(e.data, function(h) { return fm.file(h); })); }) .change(function(e) { var files = e.data.changed || [], cwdHash = fm.cwd().hash; $.each(files, function() { if (this.hash === cwdHash) { if (this.size) { size.children('.elfinder-stat-size').addClass('elfinder-stat-size-recursive').html(fm.i18n('sum')+': '+fm.formatSize(this.size)); size.attr('title', size.text()); } return false; } }); }) .select(function() { setSelect(fm.selectedFiles()); }) .bind('open', function() { setSelect([]); }) .bind('incsearch', function(e) { setIncsearchStat(e.data); }) .bind('incsearchend', function() { setIncsearchStat(); }) ; }); }; PK!™ ;XX:file-manager-advanced/application/library/js/ui/navdock.jsnu„[µü¤/** * @class elfindernavdock - elFinder container for preview etc at below the navbar * * @author Naoki Sawada **/ $.fn.elfindernavdock = function(fm, opts) { "use strict"; this.not('.elfinder-navdock').each(function() { var self = $(this).hide().addClass('ui-state-default elfinder-navdock touch-punch'), node = self.parent(), wz = node.children('.elfinder-workzone').append(self), resize = function(to, h) { var curH = h || self.height(), diff = to - curH, len = Object.keys(sizeSyncs).length, calc = len? diff / len : 0, ovf; if (diff) { ovf = self.css('overflow'); self.css('overflow', 'hidden'); self.height(to); $.each(sizeSyncs, function(id, n) { n.height(n.height() + calc).trigger('resize.' + fm.namespace); }); fm.trigger('wzresize'); self.css('overflow', ovf); } }, handle = $('
          ').appendTo(self), sizeSyncs = {}, resizeFn = [], initMaxHeight = (parseInt(opts.initMaxHeight) || 50) / 100, maxHeight = (parseInt(opts.maxHeight) || 90) / 100, basicHeight, hasNode; self.data('addNode', function(cNode, opts) { var wzH = fm.getUI('workzone').height(), imaxH = wzH * initMaxHeight, curH, tH, mH; opts = Object.assign({ first: false, sizeSync: true, init: false }, opts); if (!cNode.attr('id')) { cNode.attr('id', fm.namespace+'-navdock-' + (+new Date())); } opts.sizeSync && (sizeSyncs[cNode.attr('id')] = cNode); curH = self.height(); tH = curH + cNode.outerHeight(true); if (opts.first) { handle.after(cNode); } else { self.append(cNode); } hasNode = true; self.resizable('enable').height(tH).show(); fm.trigger('wzresize'); if (opts.init) { mH = fm.storage('navdockHeight'); if (mH) { tH = mH; } else { tH = tH > imaxH? imaxH : tH; } basicHeight = tH; } resize(Math.min(tH, wzH * maxHeight)); return self; }).data('removeNode', function(nodeId, appendTo) { var cNode = $('#'+nodeId); delete sizeSyncs[nodeId]; self.height(self.height() - $('#'+nodeId).outerHeight(true)); if (appendTo) { if (appendTo === 'detach') { cNode = cNode.detach(); } else { appendTo.append(cNode); } } else { cNode.remove(); } if (self.children().length <= 1) { hasNode = false; self.resizable('disable').height(0).hide(); } fm.trigger('wzresize'); return cNode; }); if (! opts.disabled) { fm.one('init', function() { var ovf; if (fm.getUI('navbar').children().not('.ui-resizable-handle').length) { self.data('dockEnabled', true); self.resizable({ maxHeight: fm.getUI('workzone').height() * maxHeight, handles: { n: handle }, start: function(e, ui) { ovf = self.css('overflow'); self.css('overflow', 'hidden'); fm.trigger('navdockresizestart', {event: e, ui: ui}, true); }, resize: function(e, ui) { self.css('top', ''); fm.trigger('wzresize', { inNavdockResize : true }); }, stop: function(e, ui) { fm.trigger('navdockresizestop', {event: e, ui: ui}, true); self.css('top', ''); basicHeight = ui.size.height; fm.storage('navdockHeight', basicHeight); resize(basicHeight, ui.originalSize.height); self.css('overflow', ovf); } }); fm.bind('wzresize', function(e) { var minH, maxH, h; if (self.is(':visible')) { maxH = fm.getUI('workzone').height() * maxHeight; if (! e.data || ! e.data.inNavdockResize) { h = self.height(); if (maxH < basicHeight) { if (Math.abs(h - maxH) > 1) { resize(maxH); } } else { if (Math.abs(h - basicHeight) > 1) { resize(basicHeight); } } } self.resizable('option', 'maxHeight', maxH); } }).bind('themechange', function() { var oldH = Math.round(self.height()); requestAnimationFrame(function() { var curH = Math.round(self.height()), diff = oldH - curH; if (diff !== 0) { resize(self.height(), curH - diff); } }); }); } fm.bind('navbarshow navbarhide', function(e) { self[hasNode && e.type === 'navbarshow'? 'show' : 'hide'](); }); }); } }); return this; };PK! †••7file-manager-advanced/application/library/js/ui/path.jsnu„[µü¤/** * @class elFinder ui * Display current folder path in statusbar. * Click on folder name in path - open folder * * @author Dmitry (dio) Levashov **/ $.fn.elfinderpath = function(fm, options) { "use strict"; return this.each(function() { var query = '', target = '', mimes = [], place = 'statusbar', clHover= fm.res('class', 'hover'), prefix = 'path' + (elFinder.prototype.uniqueid? elFinder.prototype.uniqueid : '') + '-', wzbase = $('
          '), path = $(this).addClass('elfinder-path').html(' ') .on('mousedown', 'span.elfinder-path-dir', function(e) { var hash = $(this).attr('id').substr(prefix.length); e.preventDefault(); if (hash != fm.cwd().hash) { $(this).addClass(clHover); if (query) { fm.exec('search', query, { target: hash, mime: mimes.join(' ') }); } else { fm.trigger('select', {selected : [hash]}).exec('open', hash); } } }) .prependTo(fm.getUI('statusbar').show()), roots = $('
          ').on('click', function(e) { e.stopPropagation(); e.preventDefault(); var roots = $.map(fm.roots, function(h) { return fm.file(h); }), raw = []; $.each(roots, function(i, f) { if (! f.phash && fm.root(fm.cwd().hash, true) !== f.hash) { raw.push({ label : fm.escape(f.i18 || f.name), icon : 'home', callback : function() { fm.exec('open', f.hash); }, options : { iconClass : f.csscls || '', iconImg : f.icon || '' } }); } }); fm.trigger('contextmenu', { raw: raw, x: e.pageX, y: e.pageY }); }).append('').appendTo(wzbase), render = function(cwd) { var dirs = [], names = []; $.each(fm.parents(cwd), function(i, hash) { var c = (cwd === hash)? 'elfinder-path-dir elfinder-path-cwd' : 'elfinder-path-dir', f = fm.file(hash), name = fm.escape(f.i18 || f.name); names.push(name); dirs.push(''+name+''); }); return dirs.join(''+fm.option('separator')+''); }, toWorkzone = function() { var prev; path.children('span.elfinder-path-dir').attr('style', ''); prev = fm.direction === 'ltr'? $('#'+prefix + fm.cwd().hash).prevAll('span.elfinder-path-dir:first') : $(); path.scrollLeft(prev.length? prev.position().left : 0); }, fit = function() { if (fm.UA.CSS.flex) { return; } var dirs = path.children('span.elfinder-path-dir'), cnt = dirs.length, m, bg = 0, ids; if (place === 'workzone' || cnt < 2) { dirs.attr('style', ''); return; } path.width(path.css('max-width')); dirs.css({maxWidth: (100/cnt)+'%', display: 'inline-block'}); m = path.width() - 9; path.children('span.elfinder-path-other').each(function() { m -= $(this).width(); }); ids = []; dirs.each(function(i) { var dir = $(this), w = dir.width(); m -= w; if (w < this.scrollWidth) { ids.push(i); } }); path.width(''); if (ids.length) { if (m > 0) { m = m / ids.length; $.each(ids, function(i, k) { var d = $(dirs[k]); d.css('max-width', d.width() + m); }); } dirs.last().attr('style', ''); } else { dirs.attr('style', ''); } }, hasUiTree, hasUiStat; fm.one('init', function() { hasUiTree = fm.getUI('tree').length; hasUiStat = fm.getUI('stat').length; if (! hasUiTree && options.toWorkzoneWithoutNavbar) { wzbase.append(path).insertBefore(fm.getUI('workzone')); place = 'workzone'; fm.bind('open', toWorkzone) .one('opendone', function() { fm.getUI().trigger('resize'); }); } }) .bind('open searchend parents', function() { var dirs = []; query = ''; target = ''; mimes = []; path.html(render(fm.cwd().hash)); if (Object.keys(fm.roots).length > 1) { path.css('margin', ''); roots.show(); } else { path.css('margin', 0); roots.hide(); } !hasUiStat && fit(); }) .bind('searchstart', function(e) { if (e.data) { query = e.data.query || ''; target = e.data.target || ''; mimes = e.data.mimes || []; } }) .bind('search', function(e) { var dirs = [], html = ''; if (target) { html = render(target); } else { html = fm.i18n('btnAll'); } path.html(''+fm.i18n('searcresult') + ': ' + html); fit(); }) // on swipe to navbar show/hide .bind('navbarshow navbarhide', function() { var wz = fm.getUI('workzone'); if (this.type === 'navbarshow') { fm.unbind('open', toWorkzone); path.prependTo(fm.getUI('statusbar')); wzbase.detach(); place = 'statusbar'; } else { wzbase.append(path).insertBefore(wz); place = 'workzone'; toWorkzone(); fm.bind('open', toWorkzone); } fm.trigger('uiresize'); }) .bind('resize uistatchange', fit); }); }; PK!D­£¾  @file-manager-advanced/application/library/js/elFinder.command.jsnu„[µü¤/** * elFinder command prototype * * @type elFinder.command * @author Dmitry (dio) Levashov */ elFinder.prototype.command = function(fm) { "use strict"; /** * elFinder instance * * @type elFinder */ this.fm = fm; /** * Command name, same as class name * * @type String */ this.name = ''; /** * Dialog class name * * @type String */ this.dialogClass = ''; /** * Command icon class name with out 'elfinder-button-icon-' * Use this.name if it is empty * * @type String */ this.className = ''; /** * Short command description * * @type String */ this.title = ''; /** * Linked(Child) commands name * They are loaded together when tthis command is loaded. * * @type Array */ this.linkedCmds = []; /** * Current command state * * @example * this.state = -1; // command disabled * this.state = 0; // command enabled * this.state = 1; // command active (for example "fullscreen" command while elfinder in fullscreen mode) * @default -1 * @type Number */ this.state = -1; /** * If true, command can not be disabled by connector. * @see this.update() * * @type Boolen */ this.alwaysEnabled = false; /** * Do not change dirctory on removed current work directory * * @type Boolen */ this.noChangeDirOnRemovedCwd = false; /** * If true, this means command was disabled by connector. * @see this.update() * * @type Boolen */ this._disabled = false; /** * If true, this command is disabled on serach results * * @type Boolean */ this.disableOnSearch = false; /** * Call update() when event select fired * * @type Boolean */ this.updateOnSelect = true; /** * Sync toolbar button title on change * * @type Boolean */ this.syncTitleOnChange = false; /** * Keep display of the context menu when command execution * * @type Boolean */ this.keepContextmenu = false; /** * elFinder events defaults handlers. * Inside handlers "this" is current command object * * @type Object */ this._handlers = { enable : function() { this.update(void(0), this.value); }, disable : function() { this.update(-1, this.value); }, 'open reload load sync' : function() { this._disabled = !(this.alwaysEnabled || this.fm.isCommandEnabled(this.name)); this.update(void(0), this.value); this.change(); } }; /** * elFinder events handlers. * Inside handlers "this" is current command object * * @type Object */ this.handlers = {}; /** * Shortcuts * * @type Array */ this.shortcuts = []; /** * Command options * * @type Object */ this.options = {ui : 'button'}; /** * Callback functions on `change` event * * @type Array */ this.listeners = []; /** * Prepare object - * bind events and shortcuts * * @return void */ this.setup = function(name, opts) { var self = this, fm = this.fm, setCallback = function(s) { var cb = s.callback || function(e) { fm.exec(self.name, void(0), { _userAction: true, _currentType: 'shortcut' }); }; s.callback = function(e) { var enabled, checks = {}; if (self.enabled()) { if (fm.searchStatus.state < 2) { enabled = fm.isCommandEnabled(self.name); } else { $.each(fm.selected(), function(i, h) { if (fm.optionsByHashes[h]) { checks[h] = true; } else { $.each(fm.volOptions, function(id) { if (!checks[id] && h.indexOf(id) === 0) { checks[id] = true; return false; } }); } }); $.each(checks, function(h) { enabled = fm.isCommandEnabled(self.name, h); if (! enabled) { return false; } }); } if (enabled) { self.event = e; cb.call(self); delete self.event; } } }; }, i, s, sc; this.name = name; this.title = fm.messages['cmd'+name] ? fm.i18n('cmd'+name) : ((this.extendsCmd && fm.messages['cmd'+this.extendsCmd]) ? fm.i18n('cmd'+this.extendsCmd) : name); this.options = Object.assign({}, this.options, opts); this.listeners = []; this.dialogClass = 'elfinder-dialog-' + name; if (opts.shortcuts) { if (typeof opts.shortcuts === 'function') { sc = opts.shortcuts(this.fm, this.shortcuts); } else if (Array.isArray(opts.shortcuts)) { sc = opts.shortcuts; } this.shortcuts = sc || []; } if (this.updateOnSelect) { this._handlers.select = function() { this.update(void(0), this.value); }; } $.each(Object.assign({}, self._handlers, self.handlers), function(cmd, handler) { fm.bind(cmd, $.proxy(handler, self)); }); for (i = 0; i < this.shortcuts.length; i++) { s = this.shortcuts[i]; setCallback(s); !s.description && (s.description = this.title); fm.shortcut(s); } if (this.disableOnSearch) { fm.bind('search searchend', function() { self._disabled = this.type === 'search'? true : ! (this.alwaysEnabled || fm.isCommandEnabled(name)); self.update(void(0), self.value); }); } this.init(); }; /** * Command specific init stuffs * * @return void */ this.init = function() {}; /** * Exec command * * @param Array target files hashes * @param Array|Object command value * @return $.Deferred */ this.exec = function(files, opts) { return $.Deferred().reject(); }; this.getUndo = function(opts, resData) { return false; }; /** * Return true if command disabled. * * @return Boolen */ this.disabled = function() { return this.state < 0; }; /** * Return true if command enabled. * * @return Boolen */ this.enabled = function() { return this.state > -1; }; /** * Return true if command active. * * @return Boolen */ this.active = function() { return this.state > 0; }; /** * Return current command state. * Must be overloaded in most commands * * @return Number */ this.getstate = function() { return -1; }; /** * Update command state/value * and rize 'change' event if smth changed * * @param Number new state or undefined to auto update state * @param mixed new value * @return void */ this.update = function(s, v) { var state = this.state, value = this.value; if (this._disabled && this.fm.searchStatus === 0) { this.state = -1; } else { this.state = s !== void(0) ? s : this.getstate(); } this.value = v; if (state != this.state || value != this.value) { this.change(); } }; /** * Bind handler / fire 'change' event. * * @param Function|undefined event callback * @return void */ this.change = function(c) { var cmd, i; if (typeof(c) === 'function') { this.listeners.push(c); } else { for (i = 0; i < this.listeners.length; i++) { cmd = this.listeners[i]; try { cmd(this.state, this.value); } catch (e) { this.fm.debug('error', e); } } } return this; }; /** * With argument check given files hashes and return list of existed files hashes. * Without argument return selected files hashes. * * @param Array|String|void hashes * @return Array */ this.hashes = function(hashes) { return hashes ? $.grep(Array.isArray(hashes) ? hashes : [hashes], function(hash) { return fm.file(hash) ? true : false; }) : fm.selected(); }; /** * Return only existed files from given fils hashes | selected files * * @param Array|String|void hashes * @return Array */ this.files = function(hashes) { var fm = this.fm; return hashes ? $.map(Array.isArray(hashes) ? hashes : [hashes], function(hash) { return fm.file(hash) || null; }) : fm.selectedFiles(); }; /** * Wrapper to fm.dialog() * * @param String|DOMElement content * @param Object options * @return Object jQuery element object */ this.fmDialog = function(content, options) { if (options.cssClass) { options.cssClass += ' ' + this.dialogClass; } else { options.cssClass = this.dialogClass; } return this.fm.dialog(content, options); }; }; PK!'7ã¢Ifile-manager-advanced/application/library/js/elFinder.options.netmount.jsnu„[µü¤/** * Default elFinder config of commandsOptions.netmount * * @type Object */ elFinder.prototype._options.commandsOptions.netmount = { ftp: { name : 'FTP', inputs: { host : $(''), port : $(''), path : $(''), user : $(''), pass : $(''), FTPS : $(''), encoding : $(''), locale : $('') } }, dropbox2: elFinder.prototype.makeNetmountOptionOauth('dropbox2', 'Dropbox', 'Dropbox', {noOffline : true, root : '/', pathI18n : 'path', integrate : { title: 'Dropbox.com', link: 'https://www.dropbox.com' } }), googledrive: elFinder.prototype.makeNetmountOptionOauth('googledrive', 'Google Drive', 'Google', { integrate : { title: 'Google Drive', link: 'https://www.google.com/drive/' } }), onedrive: elFinder.prototype.makeNetmountOptionOauth('onedrive', 'One Drive', 'OneDrive', { integrate : { title: 'Microsoft OneDrive', link: 'https://onedrive.live.com' } }), box: elFinder.prototype.makeNetmountOptionOauth('box', 'Box', 'Box', { noOffline : true, integrate : { title: 'Box.com', link: 'https://www.box.com' } }) }; PK!±_)66=file-manager-advanced/application/library/js/elfinder.full.jsnu„[µü¤/*! * elFinder - file manager for web * Version 2.1.69 (2026-05-07) * http://elfinder.org * * Copyright 2009-2026, Studio 42 * Licensed under a 3-clauses BSD license */ (function(root, factory) { if (typeof define === 'function' && define.amd) { // AMD define(['jquery','jquery-ui'], factory); } else if (typeof exports !== 'undefined') { // CommonJS var $, ui; try { $ = require('jquery'); ui = require('jquery-ui'); } catch (e) {} module.exports = factory($, ui); } else { // Browser globals (Note: root is window) factory(root.jQuery, root.jQuery.ui, true); } }(this, function($, _ui, toGlobal) { toGlobal = toGlobal || false; /* * File: /js/elFinder.js */ /** * @class elFinder - file manager for web * * @author Dmitry (dio) Levashov **/ var elFinder = function(elm, opts, bootCallback) { //this.time('load'); var self = this, /** * Objects array of jQuery.Deferred that calls before elFinder boot up * * @type Array */ dfrdsBeforeBootup = [], /** * Plugin name to check for conflicts with bootstrap etc * * @type Array **/ conflictChecks = ['button', 'tooltip'], /** * Node on which elfinder creating * * @type jQuery **/ node = $(elm), /** * Object of events originally registered in this node * * @type Object */ prevEvents = $.extend(true, {}, $._data(node.get(0), 'events')), /** * Store node contents. * * @see this.destroy * @type jQuery **/ prevContent = $('
          ').append(node.contents()).attr('class', node.attr('class') || '').attr('style', node.attr('style') || ''), /** * Instance ID. Required to get/set cookie * * @type String **/ id = node.attr('id') || node.attr('id', 'elfauto' + $('.elfinder').length).attr('id'), /** * Events namespace * * @type String **/ namespace = 'elfinder-' + id, /** * Mousedown event * * @type String **/ mousedown = 'mousedown.'+namespace, /** * Keydown event * * @type String **/ keydown = 'keydown.'+namespace, /** * Keypress event * * @type String **/ keypress = 'keypress.'+namespace, /** * Keypup event * * @type String **/ keyup = 'keyup.'+namespace, /** * Is shortcuts/commands enabled * * @type Boolean **/ enabled = false, /** * Store enabled value before ajax request * * @type Boolean **/ prevEnabled = false, /** * List of build-in events which mapped into methods with same names * * @type Array **/ events = ['enable', 'disable', 'load', 'open', 'reload', 'select', 'add', 'remove', 'change', 'dblclick', 'getfile', 'lockfiles', 'unlockfiles', 'selectfiles', 'unselectfiles', 'dragstart', 'dragstop', 'search', 'searchend', 'viewchange'], /** * Rules to validate data from backend * * @type Object **/ rules = {}, /** * Current working directory hash * * @type String **/ cwd = '', /** * Current working directory options default * * @type Object **/ cwdOptionsDefault = { path : '', url : '', tmbUrl : '', disabled : [], separator : '/', archives : [], extract : [], copyOverwrite : true, uploadOverwrite : true, uploadMaxSize : 0, jpgQuality : 100, tmbCrop : false, tmbReqCustomData : false, tmb : false // old API }, /** * Current working directory options * * @type Object **/ cwdOptions = {}, /** * Files/dirs cache * * @type Object **/ files = {}, /** * Hidden Files/dirs cache * * @type Object **/ hiddenFiles = {}, /** * Files/dirs hash cache of each dirs * * @type Object **/ ownFiles = {}, /** * Selected files hashes * * @type Array **/ selected = [], /** * Events listeners * * @type Object **/ listeners = {}, /** * Shortcuts * * @type Object **/ shortcuts = {}, /** * Buffer for copied files * * @type Array **/ clipboard = [], /** * Copied/cuted files hashes * Prevent from remove its from cache. * Required for dispaly correct files names in error messages * * @type Object **/ remember = {}, /** * Queue for 'open' requests * * @type Array **/ queue = [], /** * Queue for only cwd requests e.g. `tmb` * * @type Array **/ cwdQueue = [], /** * Commands prototype * * @type Object **/ base = new self.command(self), /** * elFinder node width * * @type String * @default "auto" **/ width = 'auto', /** * elFinder node height * Number: pixcel or String: Number + "%" * * @type Number | String * @default 400 **/ height = 400, /** * Base node object or selector * Element which is the reference of the height percentage * * @type Object|String * @default null | $(window) (if height is percentage) **/ heightBase = null, /** * MIME type list(Associative array) handled as a text file * * @type Object|null */ textMimes = null, /** * elfinder path for sound played on remove * @type String * @default ./sounds/ **/ soundPath = 'sounds/', /** * JSON.stringify of previous fm.sorters * @type String */ prevSorterStr = '', /** * Map table of file extention to MIME-Type * @type Object */ extToMimeTable, /** * Disabled page unload function * @type Boolean */ diableUnloadCheck = false, beeper = $(document.createElement('audio')).hide().appendTo('body')[0], syncInterval, autoSyncStop = 0, uiCmdMapPrev = '', gcJobRes = null, open = function(data) { // NOTES: Do not touch data object var volumeid, contextmenu, emptyDirs = {}, stayDirs = {}, rmClass, hashes, calc, gc, collapsed, prevcwd, sorterStr, diff; if (self.api >= 2.1) { // support volume driver option `uiCmdMap` self.commandMap = (data.options.uiCmdMap && Object.keys(data.options.uiCmdMap).length)? data.options.uiCmdMap : {}; if (uiCmdMapPrev !== JSON.stringify(self.commandMap)) { uiCmdMapPrev = JSON.stringify(self.commandMap); } } else { self.options.sync = 0; } if (data.init) { // init - reset cache files = {}; ownFiles = {}; } else { // remove only files from prev cwd // and collapsed directory (included 100+ directories) to empty for perfomance tune in DnD prevcwd = cwd; rmClass = 'elfinder-subtree-loaded ' + self.res('class', 'navexpand'); collapsed = self.res('class', 'navcollapse'); hashes = Object.keys(files); calc = function(i) { if (!files[i]) { return true; } var isDir = (files[i].mime === 'directory'), phash = files[i].phash, pnav; if ( (!isDir || emptyDirs[phash] || (!stayDirs[phash] && self.navHash2Elm(files[i].hash).is(':hidden') && self.navHash2Elm(phash).next('.elfinder-navbar-subtree').children().length > 100 ) ) && (isDir || phash !== cwd) && ! remember[i] ) { if (isDir && !emptyDirs[phash]) { emptyDirs[phash] = true; self.navHash2Elm(phash) .removeClass(rmClass) .next('.elfinder-navbar-subtree').empty(); } deleteCache(files[i]); } else if (isDir) { stayDirs[phash] = true; } }; gc = function() { if (hashes.length) { gcJobRes && gcJobRes._abort(); gcJobRes = self.asyncJob(calc, hashes, { interval : 20, numPerOnce : 100 }).done(function() { var hd = self.storage('hide') || {items: {}}; if (Object.keys(hiddenFiles).length) { $.each(hiddenFiles, function(h) { if (!hd.items[h]) { delete hiddenFiles[h]; } }); } }); } }; self.trigger('filesgc').one('filesgc', function() { hashes = []; }); self.one('opendone', function() { if (prevcwd !== cwd) { if (! node.data('lazycnt')) { gc(); } else { self.one('lazydone', gc); } } }); } self.sorters = {}; cwd = data.cwd.hash; cache(data.files); if (!files[cwd]) { cache([data.cwd]); } else { diff = self.diff([data.cwd], true); if (diff.changed.length) { cache(diff.changed, 'change'); self.change({changed: diff.changed}); } } data.changed && data.changed.length && cache(data.changed, 'change'); // trigger event 'sorterupdate' sorterStr = JSON.stringify(self.sorters); if (prevSorterStr !== sorterStr) { self.trigger('sorterupdate'); prevSorterStr = sorterStr; } self.lastDir(cwd); self.autoSync(); }, /** * Store info about files/dirs in "files" object. * * @param Array files * @param String data type * @return void **/ cache = function(data, type) { var type = type || 'files', keeps = ['sizeInfo', 'encoding'], defsorter = { name: true, perm: true, date: true, size: true, kind: true }, sorterChk = !self.sorters._checked && (type === 'files'), l = data.length, setSorter = function(file) { var f = file || {}, sorters = []; $.each(self.sortRules, function(key) { if (defsorter[key] || typeof f[key] !== 'undefined' || (key === 'mode' && typeof f.perm !== 'undefined')) { sorters.push(key); } }); self.sorters = self.arrayFlip(sorters, true); self.sorters._checked = true; }, changedParents = {}, hideData = self.storage('hide') || {}, hides = hideData.items || {}, f, i, i1, keepProp, parents, hidden; for (i = 0; i < l; i++) { f = Object.assign({}, data[i]); hidden = (!hideData.show && hides[f.hash])? true : false; if (f.name && f.hash && f.mime) { if (!hidden) { if (sorterChk && f.phash === cwd) { setSorter(f); sorterChk = false; } if (f.phash && (type === 'add' || (type === 'change' && (!files[f.hash] || f.size !== files[f.hash])))) { if (parents = self.parents(f.phash)) { $.each(parents, function() { changedParents[this] = true; }); } } } if (files[f.hash]) { for (i1 =0; i1 < keeps.length; i1++) { if(files[f.hash][keeps[i1]] && ! f[keeps[i1]]) { f[keeps[i1]] = files[f.hash][keeps[i1]]; } } if (f.sizeInfo && !f.size) { f.size = f.sizeInfo.size; } deleteCache(files[f.hash], true); } if (hides[f.hash]) { hiddenFiles[f.hash] = f; } if (hidden) { l--; data.splice(i--, 1); } else { files[f.hash] = f; if (f.mime === 'directory' && !ownFiles[f.hash]) { ownFiles[f.hash] = {}; } if (f.phash) { if (!ownFiles[f.phash]) { ownFiles[f.phash] = {}; } ownFiles[f.phash][f.hash] = true; } } } } // delete sizeInfo cache $.each(Object.keys(changedParents), function() { var target = files[this]; if (target && target.sizeInfo) { delete target.sizeInfo; } }); // for empty folder sorterChk && setSorter(); }, /** * Delete file object from files caches * * @param Array removed hashes * @return void */ remove = function(removed) { var l = removed.length, roots = {}, rm = function(hash) { var file = files[hash], i; if (file) { if (file.mime === 'directory') { if (roots[hash]) { delete self.roots[roots[hash]]; } // restore stats of deleted root parent directory $.each(self.leafRoots, function(phash, roots) { var idx, pdir; if ((idx = $.inArray(hash, roots))!== -1) { if (roots.length === 1) { if ((pdir = Object.assign({}, files[phash])) && pdir._realStats) { $.each(pdir._realStats, function(k, v) { pdir[k] = v; }); remove(files[phash]._realStats); self.change({ changed: [pdir] }); } delete self.leafRoots[phash]; } else { self.leafRoots[phash].splice(idx, 1); } } }); if (self.searchStatus.state < 2) { $.each(files, function(h, f) { f.phash == hash && rm(h); }); } } if (file.phash) { if (parents = self.parents(file.phash)) { $.each(parents, function() { changedParents[this] = true; }); } } deleteCache(files[hash]); } }, changedParents = {}, parents; $.each(self.roots, function(k, v) { roots[v] = k; }); while (l--) { rm(removed[l]); } // delete sizeInfo cache $.each(Object.keys(changedParents), function() { var target = files[this]; if (target && target.sizeInfo) { delete target.sizeInfo; } }); }, /** * Update file object in files caches * * @param Array changed file objects * @return void * @deprecated should be use `cache(updatesArrayData, 'change');` */ change = function(changed) { $.each(changed, function(i, file) { var hash = file.hash; if (files[hash]) { $.each(Object.keys(files[hash]), function(i, v){ if (typeof file[v] === 'undefined') { delete files[hash][v]; } }); } files[hash] = files[hash] ? Object.assign(files[hash], file) : file; }); }, /** * Delete cache data of files, ownFiles and self.optionsByHashes * * @param Object file * @param Boolean update * @return void */ deleteCache = function(file, update) { var hash = file.hash, phash = file.phash; if (phash && ownFiles[phash]) { delete ownFiles[phash][hash]; } if (!update) { ownFiles[hash] && delete ownFiles[hash]; self.optionsByHashes[hash] && delete self.optionsByHashes[hash]; } delete files[hash]; }, /** * Maximum number of concurrent connections on request * * @type Number */ requestMaxConn, /** * Current number of connections * * @type Number */ requestCnt = 0, /** * Queue waiting for connection * * @type Array */ requestQueue = [], /** * Current open command instance * * @type Object */ currentOpenCmd = null, /** * Current CSRF refresh request instance * * @type Object */ currentCsrfRefresh = null, /** * Exec shortcut * * @param jQuery.Event keydown/keypress event * @return void */ execShortcut = function(e) { var code = e.keyCode, ctrlKey = !!(e.ctrlKey || e.metaKey), isMousedown = e.type === 'mousedown', ddm; !isMousedown && (self.keyState.keyCode = code); self.keyState.ctrlKey = ctrlKey; self.keyState.shiftKey = e.shiftKey; self.keyState.metaKey = e.metaKey; self.keyState.altKey = e.altKey; if (isMousedown) { return; } else if (e.type === 'keyup') { self.keyState.keyCode = null; return; } if (enabled) { $.each(shortcuts, function(i, shortcut) { if (shortcut.type == e.type && shortcut.keyCode == code && shortcut.shiftKey == e.shiftKey && shortcut.ctrlKey == ctrlKey && shortcut.altKey == e.altKey) { e.preventDefault(); e.stopPropagation(); shortcut.callback(e, self); self.debug('shortcut-exec', i+' : '+shortcut.description); } }); // prevent tab out of elfinder if (code == $.ui.keyCode.TAB && !$(e.target).is(':input')) { e.preventDefault(); } // cancel any actions by [Esc] key if (e.type === 'keydown' && code == $.ui.keyCode.ESCAPE) { // copy or cut if (! node.find('.ui-widget:visible').length) { self.clipboard().length && self.clipboard([]); } // dragging if ($.ui.ddmanager) { ddm = $.ui.ddmanager.current; ddm && ddm.helper && ddm.cancel(); } // button menus self.toHide(node.find('.ui-widget.elfinder-button-menu.elfinder-frontmost:visible')); // trigger keydownEsc self.trigger('keydownEsc', e); } } }, date = new Date(), utc, i18n, inFrame = (window.parent !== window), parentIframe = (function() { var pifm, ifms; if (inFrame) { try { ifms = $('iframe', window.parent.document); if (ifms.length) { $.each(ifms, function(i, ifm) { if (ifm.contentWindow === window) { pifm = $(ifm); return false; } }); } } catch(e) {} } return pifm; })(), /** * elFinder boot up function * * @type Function */ bootUp, /** * Original function of XMLHttpRequest.prototype.send * * @type Function */ savedXhrSend; // opts must be an object if (!opts) { opts = {}; } // set UA.Angle, UA.Rotated for mobile devices if (self.UA.Mobile) { $(window).on('orientationchange.'+namespace, function() { var a = ((screen && screen.orientation && screen.orientation.angle) || window.orientation || 0) + 0; if (a === -90) { a = 270; } self.UA.Angle = a; self.UA.Rotated = a % 180 === 0? false : true; }).trigger('orientationchange.'+namespace); } // check opt.bootCallback if (opts.bootCallback && typeof opts.bootCallback === 'function') { (function() { var func = bootCallback, opFunc = opts.bootCallback; bootCallback = function(fm, extraObj) { func && typeof func === 'function' && func.call(this, fm, extraObj); opFunc.call(this, fm, extraObj); }; })(); } delete opts.bootCallback; /** * Protocol version * * @type String **/ this.api = null; /** * elFinder use new api * * @type Boolean **/ this.newAPI = false; /** * elFinder use old api * * @type Boolean **/ this.oldAPI = false; /** * Net drivers names * * @type Array **/ this.netDrivers = []; /** * Base URL of elfFinder library starting from Manager HTML * * @type String */ this.baseUrl = ''; /** * Base URL of i18n js files * baseUrl + "js/i18n/" when empty value * * @type String */ this.i18nBaseUrl = ''; /** * Base URL of worker js files * baseUrl + "js/worker/" when empty value * * @type String */ this.workerBaseUrl = ''; /** * Is elFinder CSS loaded * * @type Boolean */ this.cssloaded = false; /** * Current theme object * * @type Object|Null */ this.theme = null; this.mimesCanMakeEmpty = {}; /** * Callback function at boot up that option specified at elFinder starting * * @type Function */ this.bootCallback; /** * Callback function at reload(restart) elFinder * * @type Function */ this.reloadCallback; /** * ID. Required to create unique cookie name * * @type String **/ this.id = id; /** * Method to store/fetch data * * @type Function **/ this.storage = (function() { try { if ('localStorage' in window && window.localStorage !== null) { if (self.UA.Safari) { // check for Mac/iOS safari private browsing mode window.localStorage.setItem('elfstoragecheck', 1); window.localStorage.removeItem('elfstoragecheck'); } return self.localStorage; } else { return self.cookie; } } catch (e) { return self.cookie; } })(); /** * Set pause page unload check function or Get state * * @param Boolean state To set state * @param Boolean keep Keep disabled * @return Boolean|void */ this.pauseUnloadCheck = function(state, keep) { if (typeof state === 'undefined') { return diableUnloadCheck; } else { diableUnloadCheck = !!state; if (state && !keep) { requestAnimationFrame(function() { diableUnloadCheck = false; }); } } }; /** * Configuration options * * @type Object **/ //this.options = $.extend(true, {}, this._options, opts); this.options = Object.assign({}, this._options); // for old type configuration if (opts.uiOptions) { if (opts.uiOptions.toolbar && Array.isArray(opts.uiOptions.toolbar)) { if ($.isPlainObject(opts.uiOptions.toolbar[opts.uiOptions.toolbar.length - 1])) { self.options.uiOptions.toolbarExtra = Object.assign(self.options.uiOptions.toolbarExtra || {}, opts.uiOptions.toolbar.pop()); } } } // Overwrite if opts value is an array (function() { var arrOv = function(obj, base) { if ($.isPlainObject(obj)) { $.each(obj, function(k, v) { if ($.isPlainObject(v)) { if (!base[k]) { base[k] = {}; } arrOv(v, base[k]); } else { base[k] = v; } }); } }; arrOv(opts, self.options); })(); // join toolbarExtra to toolbar this.options.uiOptions.toolbar.push(this.options.uiOptions.toolbarExtra); delete this.options.uiOptions.toolbarExtra; /** * Arrays that has to unbind events * * @type Object */ this.toUnbindEvents = {}; /** * Attach listener to events * To bind to multiply events at once, separate events names by space * * @param String event(s) name(s) * @param Object event handler or {done: handler} * @param Boolean priority first * @return elFinder */ this.bind = function(event, callback, priorityFirst) { var i, len; if (callback && (typeof callback === 'function' || typeof callback.done === 'function')) { event = ('' + event).toLowerCase().replace(/^\s+|\s+$/g, '').split(/\s+/); len = event.length; for (i = 0; i < len; i++) { if (listeners[event[i]] === void(0)) { listeners[event[i]] = []; } listeners[event[i]][priorityFirst? 'unshift' : 'push'](callback); } } return this; }; /** * Remove event listener if exists * To un-bind to multiply events at once, separate events names by space * * @param String event(s) name(s) * @param Function callback * @return elFinder */ this.unbind = function(event, callback) { var i, len, l, ci; event = ('' + event).toLowerCase().split(/\s+/); len = event.length; for (i = 0; i < len; i++) { if (l = listeners[event[i]]) { ci = $.inArray(callback, l); ci > -1 && l.splice(ci, 1); } } callback = null; return this; }; /** * Fire event - send notification to all event listeners * In the callback `this` becames an event object * * @param String event type * @param Object data to send across event * @param Boolean allow modify data (call by reference of data) default: true * @return elFinder */ this.trigger = function(evType, data, allowModify) { var type = evType.toLowerCase(), isopen = (type === 'open'), dataIsObj = (typeof data === 'object'), handlers = listeners[type] || [], dones = [], i, l, jst, event; this.debug('event-'+type, data); if (! dataIsObj || typeof allowModify === 'undefined') { allowModify = true; } if (l = handlers.length) { event = $.Event(type); if (data) { data._getEvent = function() { return event; }; } if (allowModify) { event.data = data; } for (i = 0; i < l; i++) { if (! handlers[i]) { // probably un-binded this handler continue; } // handler is $.Deferred(), call all functions upon completion if (handlers[i].done) { dones.push(handlers[i].done); continue; } // set `event.data` only callback has argument if (handlers[i].length) { if (!allowModify) { // to avoid data modifications. remember about "sharing" passing arguments in js :) if (typeof jst === 'undefined') { try { jst = JSON.stringify(data); } catch(e) { jst = false; } } event.data = jst? JSON.parse(jst) : data; } } try { if (handlers[i].call(event, event, this) === false || event.isDefaultPrevented()) { this.debug('event-stoped', event.type); break; } } catch (ex) { window.console && window.console.log && window.console.log(ex); } } // call done functions if (l = dones.length) { for (i = 0; i < l; i++) { try { if (dones[i].call(event, event, this) === false || event.isDefaultPrevented()) { this.debug('event-stoped', event.type + '(done)'); break; } } catch (ex) { window.console && window.console.log && window.console.log(ex); } } } if (this.toUnbindEvents[type] && this.toUnbindEvents[type].length) { $.each(this.toUnbindEvents[type], function(i, v) { self.unbind(v.type, v.callback); }); delete this.toUnbindEvents[type]; } } return this; }; /** * Get event listeners * * @param String event type * @return Array listed event functions */ this.getListeners = function(event) { return event? listeners[event.toLowerCase()] : listeners; }; // set fm.baseUrl this.baseUrl = (function() { var myTag, base, baseUrl; if (self.options.baseUrl) { return self.options.baseUrl; } else { baseUrl = ''; myTag = null; $('head > script').each(function() { if (this.src && this.src.match(/js\/elfinder(?:-[a-z0-9_-]+)?\.(?:min|full)\.js(?:$|\?)/i)) { myTag = $(this); return false; } }); if (myTag) { baseUrl = myTag.attr('src').replace(/js\/[^\/]+$/, ''); if (! baseUrl.match(/^(https?\/\/|\/)/)) { // check tag if (base = $('head > base[href]').attr('href')) { baseUrl = base.replace(/\/$/, '') + '/' + baseUrl; } } } if (baseUrl !== '') { self.options.baseUrl = baseUrl; } else { if (! self.options.baseUrl) { self.options.baseUrl = './'; } baseUrl = self.options.baseUrl; } return baseUrl; } })(); this.i18nBaseUrl = (this.options.i18nBaseUrl || this.baseUrl + 'js/i18n').replace(/\/$/, '') + '/'; this.workerBaseUrl = (this.options.workerBaseUrl || this.baseUrl + 'js/worker').replace(/\/$/, '') + '/'; this.options.maxErrorDialogs = Math.max(1, parseInt(this.options.maxErrorDialogs || 5)); // set dispInlineRegex cwdOptionsDefault.dispInlineRegex = this.options.dispInlineRegex; // auto load required CSS if (this.options.cssAutoLoad) { (function() { var baseUrl = self.baseUrl, myCss = $('head > link[href$="css/elfinder.min.css"],link[href$="css/elfinder.full.css"]:first').length, rmTag = function() { if (node.data('cssautoloadHide')) { node.data('cssautoloadHide').remove(); node.removeData('cssautoloadHide'); } }, loaded = function() { if (!self.cssloaded) { rmTag(); self.cssloaded = true; self.trigger('cssloaded'); } }; if (! myCss) { // to request CSS auto loading self.cssloaded = null; } // additional CSS files if (Array.isArray(self.options.cssAutoLoad)) { if (!self.options.themes.default) { // set as default theme self.options.themes = Object.assign({ 'default' : { 'name': 'default', 'cssurls': self.options.cssAutoLoad } }, self.options.themes); if (!self.options.theme) { self.options.theme = 'default'; } } else { if (self.cssloaded === true) { self.loadCss(self.options.cssAutoLoad); } else { self.bind('cssloaded', function() { self.loadCss(self.options.cssAutoLoad); }); } } } // try to load main css if (self.cssloaded === null) { // hide elFinder node while css loading node.addClass('elfinder') .data('cssautoloadHide', $('')); $('head').append(node.data('cssautoloadHide')); // set default theme if (!self.options.themes.default) { self.options.themes = Object.assign({ 'default' : { 'name': 'default', 'cssurls': 'css/theme.css', 'author': 'elFinder Project', 'license': '3-clauses BSD' } }, self.options.themes); if (!self.options.theme) { self.options.theme = 'default'; } } // Delay 'visibility' check it required for browsers such as Safari requestAnimationFrame(function() { if (node.css('visibility') === 'hidden') { // load CSS self.loadCss([baseUrl+'css/elfinder.min.css'], { dfd: $.Deferred().done(function() { loaded(); }).fail(function() { rmTag(); if (!self.cssloaded) { self.cssloaded = false; self.bind('init', function() { if (!self.cssloaded) { self.error(['errRead', 'CSS (elfinder.min)']); } }); } }) }); } else { loaded(); } }); } })(); } // load theme if exists (function() { var theme, themes = self.options.themes, ids = Object.keys(themes || {}); if (ids.length) { theme = self.storage('theme') || self.options.theme; if (!themes[theme]) { theme = ids[0]; } if (self.cssloaded) { self.changeTheme(theme); } else { self.bind('cssloaded', function() { self.changeTheme(theme); }); } } })(); /** * Volume option to set the properties of the root Stat * * @type Object */ this.optionProperties = { icon: void(0), csscls: void(0), tmbUrl: void(0), uiCmdMap: {}, netkey: void(0), disabled: [] }; if (! inFrame && ! this.options.enableAlways && $('body').children().length === 2) { // only node and beeper this.options.enableAlways = true; } // make options.debug if (this.options.debug === true) { this.options.debug = 'all'; } else if (Array.isArray(this.options.debug)) { (function() { var d = {}; $.each(self.options.debug, function() { d[this] = true; }); self.options.debug = d; })(); } else { this.options.debug = false; } /** * Original functions evacuated by conflict check * * @type Object */ this.noConflicts = {}; /** * Check and save conflicts with bootstrap etc * * @type Function */ this.noConflict = function() { $.each(conflictChecks, function(i, p) { if ($.fn[p] && typeof $.fn[p].noConflict === 'function') { self.noConflicts[p] = $.fn[p].noConflict(); } }); }; // do check conflict this.noConflict(); /** * Is elFinder over CORS * * @type Boolean **/ this.isCORS = false; // configure for CORS (function(){ if (typeof self.options.cors !== 'undefined' && self.options.cors !== null) { self.isCORS = self.options.cors? true : false; } else { var parseUrl = document.createElement('a'), parseUploadUrl, selfProtocol = window.location.protocol, portReg = function(protocol) { protocol = (!protocol || protocol === ':')? selfProtocol : protocol; return protocol === 'https:'? /\:443$/ : /\:80$/; }, selfHost = window.location.host.replace(portReg(selfProtocol), ''); parseUrl.href = opts.url; if (opts.urlUpload && (opts.urlUpload !== opts.url)) { parseUploadUrl = document.createElement('a'); parseUploadUrl.href = opts.urlUpload; } if (selfHost !== parseUrl.host.replace(portReg(parseUrl.protocol), '') || (parseUrl.protocol !== ':'&& parseUrl.protocol !== '' && (selfProtocol !== parseUrl.protocol)) || (parseUploadUrl && (selfHost !== parseUploadUrl.host.replace(portReg(parseUploadUrl.protocol), '') || (parseUploadUrl.protocol !== ':' && parseUploadUrl.protocol !== '' && (selfProtocol !== parseUploadUrl.protocol)) ) ) ) { self.isCORS = true; } } if (self.isCORS) { if (!$.isPlainObject(self.options.customHeaders)) { self.options.customHeaders = {}; } if (!$.isPlainObject(self.options.xhrFields)) { self.options.xhrFields = {}; } self.options.requestType = 'post'; self.options.customHeaders['X-Requested-With'] = 'XMLHttpRequest'; self.options.xhrFields['withCredentials'] = true; } })(); /** * Ajax request type * * @type String * @default "get" **/ this.requestType = /^(get|post)$/i.test(this.options.requestType) ? this.options.requestType.toLowerCase() : 'get'; // set `requestMaxConn` by option requestMaxConn = Math.max(parseInt(this.options.requestMaxConn), 1); /** * Custom data that given as options * * @type Object * @default {} */ this.optsCustomData = $.isPlainObject(this.options.customData) ? this.options.customData : {}; /** * Any data to send across every ajax request * * @type Object * @default {} **/ this.customData = Object.assign({}, this.optsCustomData); /** * Previous custom data from connector * * @type Object|null */ this.prevCustomData = null; /** * Any custom headers to send across every ajax request * * @type Object * @default {} */ this.customHeaders = $.isPlainObject(this.options.customHeaders) ? this.options.customHeaders : {}; /** * CSRF header name for connector requests * * @type String */ this.csrfHeaderName = 'X-elFinder-CSRF'; /** * JSON response key for CSRF token * * @type String */ this.csrfResponseKey = 'csrf'; /** * JSON response key that marks a CSRF-triggered reload request * * @type String */ this.csrfReloadKey = 'csrfReload'; /** * Store or clear current CSRF token header * * @param {String} token * @return void */ this.setCsrfToken = function(token) { if (typeof token === 'string' && token) { self.customHeaders[self.csrfHeaderName] = token; } else { delete self.customHeaders[self.csrfHeaderName]; } }; /** * Determine whether the response represents a CSRF refreshable failure * * @param {Object} xhr * @param {Object} response * @return {Boolean} */ this.isCsrfReloadResponse = function(xhr, response) { return !!(xhr && xhr.status === 403 && !xhr._csrfRefresh && response && response[self.csrfReloadKey]); }; /** * Refresh CSRF token via open&init=1 without replaying the failed command * * @return {jQuery.Deferred} */ this.refreshCsrfToken = function() { var cwdFile = self.cwd(), target = (cwdFile && cwdFile.hash) || self.lastDir('') || self.startDir(); if (currentCsrfRefresh && currentCsrfRefresh.state() === 'pending') { return currentCsrfRefresh; } currentCsrfRefresh = self.request({ data : {cmd : 'open', target : target, init : 1, tree : 1}, preventDefault : true, preventFail : true, _csrfRefresh : true }).always(function() { currentCsrfRefresh = null; }); return currentCsrfRefresh; }; /** * Start background CSRF refresh if current failure is refreshable * * @param {Object} xhr * @param {Object} response * @return {Boolean} */ this.handleCsrfReload = function(xhr, response) { if (!self.isCsrfReloadResponse(xhr, response)) { return false; } self.refreshCsrfToken(); return true; }; /** * Any custom xhrFields to send across every ajax request * * @type Object * @default {} */ this.xhrFields = $.isPlainObject(this.options.xhrFields) ? this.options.xhrFields : {}; /** * Replace XMLHttpRequest.prototype.send to extended function for 3rd party libs XHR request etc. * * @type Function */ this.replaceXhrSend = function() { if (! savedXhrSend) { savedXhrSend = XMLHttpRequest.prototype.send; } XMLHttpRequest.prototype.send = function() { var xhr = this; // set request headers if (self.customHeaders) { $.each(self.customHeaders, function(key) { xhr.setRequestHeader(key, this); }); } // set xhrFields if (self.xhrFields) { $.each(self.xhrFields, function(key) { if (key in xhr) { xhr[key] = this; } }); } return savedXhrSend.apply(this, arguments); }; }; /** * Restore saved original XMLHttpRequest.prototype.send * * @type Function */ this.restoreXhrSend = function() { savedXhrSend && (XMLHttpRequest.prototype.send = savedXhrSend); }; /** * command names for into queue for only cwd requests * these commands aborts before `open` request * * @type Array * @default ['tmb', 'parents'] */ this.abortCmdsOnOpen = this.options.abortCmdsOnOpen || ['tmb', 'parents']; /** * ui.nav id prefix * * @type String */ this.navPrefix = 'nav' + (elFinder.prototype.uniqueid? elFinder.prototype.uniqueid : '') + '-'; /** * ui.cwd id prefix * * @type String */ this.cwdPrefix = elFinder.prototype.uniqueid? ('cwd' + elFinder.prototype.uniqueid + '-') : ''; // Increment elFinder.prototype.uniqueid ++elFinder.prototype.uniqueid; /** * URL to upload files * * @type String **/ this.uploadURL = opts.urlUpload || opts.url; /** * Events namespace * * @type String **/ this.namespace = namespace; /** * Today timestamp * * @type Number **/ this.today = (new Date(date.getFullYear(), date.getMonth(), date.getDate())).getTime()/1000; /** * Yesterday timestamp * * @type Number **/ this.yesterday = this.today - 86400; utc = this.options.UTCDate ? 'UTC' : ''; this.getHours = 'get'+utc+'Hours'; this.getMinutes = 'get'+utc+'Minutes'; this.getSeconds = 'get'+utc+'Seconds'; this.getDate = 'get'+utc+'Date'; this.getDay = 'get'+utc+'Day'; this.getMonth = 'get'+utc+'Month'; this.getFullYear = 'get'+utc+'FullYear'; /** * elFinder node z-index (auto detect on elFinder load) * * @type null | Number **/ this.zIndex; /** * Current search status * * @type Object */ this.searchStatus = { state : 0, // 0: search ended, 1: search started, 2: in search result query : '', target : '', mime : '', mixed : false, // in multi volumes search: false or Array that target volume ids ininc : false // in incremental search }; /** * Interface language * * @type String * @default "en" **/ this.lang = this.storage('lang') || this.options.lang; if (this.lang === 'jp') { this.lang = this.options.lang = 'ja'; } this.viewType = this.storage('view') || this.options.defaultView || 'icons'; this.sortType = this.storage('sortType') || this.options.sortType || 'name'; this.sortOrder = this.storage('sortOrder') || this.options.sortOrder || 'asc'; this.sortStickFolders = this.storage('sortStickFolders'); if (this.sortStickFolders === null) { this.sortStickFolders = !!this.options.sortStickFolders; } else { this.sortStickFolders = !!this.sortStickFolders; } this.sortAlsoTreeview = this.storage('sortAlsoTreeview'); if (this.sortAlsoTreeview === null || this.options.sortAlsoTreeview === null) { this.sortAlsoTreeview = !!this.options.sortAlsoTreeview; } else { this.sortAlsoTreeview = !!this.sortAlsoTreeview; } this.sortRules = $.extend(true, {}, this._sortRules, this.options.sortRules); $.each(this.sortRules, function(name, method) { if (typeof method != 'function') { delete self.sortRules[name]; } }); this.compare = this.compare.bind(this); /** * Delay in ms before open notification dialog * * @type Number * @default 500 **/ this.notifyDelay = this.options.notifyDelay > 0 ? parseInt(this.options.notifyDelay) : 500; /** * Dragging UI Helper object * * @type jQuery | null **/ this.draggingUiHelper = null; /** * Base droppable options * * @type Object **/ this.droppable = { greedy : true, tolerance : 'pointer', accept : '.elfinder-cwd-file-wrapper,.elfinder-navbar-dir,.elfinder-cwd-file,.elfinder-cwd-filename', hoverClass : this.res('class', 'adroppable'), classes : { // Deprecated hoverClass jQueryUI>=1.12.0 'ui-droppable-hover': this.res('class', 'adroppable') }, autoDisable: true, // elFinder original, see jquery.elfinder.js drop : function(e, ui) { var dst = $(this), targets = $.grep(ui.helper.data('files')||[], function(h) { return h? true : false; }), result = [], dups = [], faults = [], isCopy = ui.helper.hasClass('elfinder-drag-helper-plus'), c = 'class', cnt, hash, i, h; if (typeof e.button === 'undefined' || ui.helper.data('namespace') !== namespace || ! self.insideWorkzone(e.pageX, e.pageY)) { return false; } if (dst.hasClass(self.res(c, 'cwdfile'))) { hash = self.cwdId2Hash(dst.attr('id')); } else if (dst.hasClass(self.res(c, 'navdir'))) { hash = self.navId2Hash(dst.attr('id')); } else { hash = cwd; } cnt = targets.length; while (cnt--) { h = targets[cnt]; // ignore drop into itself or in own location if (h != hash && files[h].phash != hash) { result.push(h); } else { ((isCopy && h !== hash && files[hash].write)? dups : faults).push(h); } } if (faults.length) { return false; } ui.helper.data('droped', true); if (dups.length) { ui.helper.hide(); self.exec('duplicate', dups, {_userAction: true}); } if (result.length) { ui.helper.hide(); self.clipboard(result, !isCopy); self.exec('paste', hash, {_userAction: true}, hash).always(function(){ self.clipboard([]); self.trigger('unlockfiles', {files : targets}); }); self.trigger('drop', {files : targets}); } } }; /** * Return true if filemanager is active * * @return Boolean **/ this.enabled = function() { return enabled && this.visible(); }; /** * Return true if filemanager is visible * * @return Boolean **/ this.visible = function() { return node[0].elfinder && node.is(':visible'); }; /** * Return file is root? * * @param Object target file object * @return Boolean */ this.isRoot = function(file) { return (file.isroot || ! file.phash)? true : false; }; /** * Return root dir hash for current working directory * * @param String target hash * @param Boolean include fake parent (optional) * @return String */ this.root = function(hash, fake) { hash = hash || cwd; var dir, i; if (! fake) { $.each(self.roots, function(id, rhash) { if (hash.indexOf(id) === 0) { dir = rhash; return false; } }); if (dir) { return dir; } } dir = files[hash]; while (dir && dir.phash && (fake || ! dir.isroot)) { dir = files[dir.phash]; } if (dir) { return dir.hash; } while (i in files && files.hasOwnProperty(i)) { dir = files[i]; if (dir.mime === 'directory' && !dir.phash && dir.read) { return dir.hash; } } return ''; }; /** * Return current working directory info * * @return Object */ this.cwd = function() { return files[cwd] || {}; }; /** * Return required cwd option * * @param String option name * @param String target hash (optional) * @return mixed */ this.option = function(name, target) { var res, item; target = target || cwd; if (self.optionsByHashes[target] && typeof self.optionsByHashes[target][name] !== 'undefined') { return self.optionsByHashes[target][name]; } if (self.hasVolOptions && cwd !== target && (!(item = self.file(target)) || item.phash !== cwd)) { res = ''; $.each(self.volOptions, function(id, opt) { if (target.indexOf(id) === 0) { res = opt[name] || ''; return false; } }); return res; } else { return cwdOptions[name] || ''; } }; /** * Return disabled commands by each folder * * @param Array target hashes * @return Array */ this.getDisabledCmds = function(targets, flip) { var disabled = {'hidden': true}; if (! Array.isArray(targets)) { targets = [ targets ]; } $.each(targets, function(i, h) { var disCmds = self.option('disabledFlip', h); if (disCmds) { Object.assign(disabled, disCmds); } }); return flip? disabled : Object.keys(disabled); }; /** * Return file data from current dir or tree by it's hash * * @param String file hash * @return Object */ this.file = function(hash, alsoHidden) { return hash? (files[hash] || (alsoHidden? hiddenFiles[hash] : void(0))) : void(0); }; /** * Return all cached files * * @param String parent hash * @return Object */ this.files = function(phash) { var items = {}; if (phash) { if (!ownFiles[phash]) { return {}; } $.each(ownFiles[phash], function(h) { if (files[h]) { items[h] = files[h]; } else { delete ownFiles[phash][h]; } }); return Object.assign({}, items); } return Object.assign({}, files); }; /** * Return list of file parents hashes include file hash * * @param String file hash * @return Array */ this.parents = function(hash) { var parents = [], dir; while (hash && (dir = this.file(hash))) { parents.unshift(dir.hash); hash = dir.phash; } return parents; }; this.path2array = function(hash, i18) { var file, path = []; while (hash) { if ((file = files[hash]) && file.hash) { path.unshift(i18 && file.i18 ? file.i18 : file.name); hash = file.isroot? null : file.phash; } else { path = []; break; } } return path; }; /** * Return file path or Get path async with jQuery.Deferred * * @param Object file * @param Boolean i18 * @param Object asyncOpt * @return String|jQuery.Deferred */ this.path = function(hash, i18, asyncOpt) { var path = files[hash] && files[hash].path ? files[hash].path : this.path2array(hash, i18).join(cwdOptions.separator); if (! asyncOpt || ! files[hash]) { return path; } else { asyncOpt = Object.assign({notify: {type : 'parents', cnt : 1, hideCnt : true}}, asyncOpt); var dfd = $.Deferred(), notify = asyncOpt.notify, noreq = false, req = function() { self.request({ data : {cmd : 'parents', target : files[hash].phash}, notify : notify, preventFail : true }) .done(done) .fail(function() { dfd.reject(); }); }, done = function() { self.one('parentsdone', function() { path = self.path(hash, i18); if (path === '' && noreq) { //retry with request noreq = false; req(); } else { if (notify) { clearTimeout(ntftm); notify.cnt = -(parseInt(notify.cnt || 0)); self.notify(notify); } dfd.resolve(path); } }); }, ntftm; if (path) { return dfd.resolve(path); } else { if (self.ui['tree']) { // try as no request if (notify) { ntftm = setTimeout(function() { self.notify(notify); }, self.notifyDelay); } noreq = true; done(true); } else { req(); } return dfd; } } }; /** * Return file url if set * * @param String file hash * @param Object Options * @return String|Object of jQuery Deferred */ this.url = function(hash, o) { var file = files[hash], opts = o || {}, async = opts.async || false, temp = opts.temporary || false, onetm = (opts.onetime && self.option('onetimeUrl', hash)) || false, absurl = opts.absurl || false, dfrd = (async || onetm)? $.Deferred() : null, filter = function(url) { if (url && absurl) { url = self.convAbsUrl(url); } return url; }, getUrl = function(url) { if (url) { return filter(url); } if (file.url) { return filter(file.url); } if (typeof baseUrl === 'undefined') { baseUrl = getBaseUrl(); } if (baseUrl) { return filter(baseUrl + $.map(self.path2array(hash), function(n) { return encodeURIComponent(n); }).slice(1).join('/')); } var params = Object.assign({}, self.customData, { cmd: 'file', target: file.hash }); if (self.oldAPI) { params.cmd = 'open'; params.current = file.phash; } return filter(self.options.url + (self.options.url.indexOf('?') === -1 ? '?' : '&') + $.param(params, true)); }, getBaseUrl = function() { return self.option('url', (!self.isRoot(file) && file.phash) || file.hash); }, baseUrl, res; if (!file || !file.read) { return async? dfrd.resolve('') : ''; } if (onetm && (!file.url || file.url == '1') && !(baseUrl = getBaseUrl())) { async = true; this.request({ data : { cmd : 'url', target : hash, options : { onetime: 1 } }, preventDefault : true, options: {async: async}, notify: {type : 'file', cnt : 1, hideCnt : true}, progressBar: opts.progressBar }).done(function(data) { dfrd.resolve(filter(data.url || '')); }).fail(function() { dfrd.resolve(''); }); } else { if (file.url == '1' || (temp && !file.url && !(baseUrl = getBaseUrl()))) { this.request({ data : { cmd : 'url', target : hash, options : { temporary: temp? 1 : 0 } }, preventDefault : true, options: {async: async}, notify: async? {type : temp? 'file' : 'url', cnt : 1, hideCnt : true} : {}, progressBar: opts.progressBar }) .done(function(data) { file.url = data.url || ''; }) .fail(function() { file.url = ''; }) .always(function() { var url; if (file.url && temp) { url = file.url; file.url = '1'; // restore } if (async) { dfrd.resolve(getUrl(url)); } else { return getUrl(url); } }); } else { if (async) { dfrd.resolve(getUrl()); } else { return getUrl(); } } } if (async) { return dfrd; } }; /** * Return file url for the extarnal service * * @param String hash The hash * @param Object options The options * @return Object jQuery Deferred */ this.forExternalUrl = function(hash, options) { var onetime = self.option('onetimeUrl', hash), opts = { async: true, absurl: true }; opts[onetime? 'onetime' : 'temporary'] = true; return self.url(hash, Object.assign({}, options, opts)); }; /** * Return file url for open in elFinder * * @param String file hash * @param Boolean for download link * @param Object requestOpts The request options * @return String */ this.openUrl = function(hash, download, callback, requestOpts) { var file = files[hash], url = '', onetimeSize = (requestOpts || {}).onetimeSize || (5 * 1024 * 1024); if (!file || !file.read) { return ''; } if (!download || download === 'sameorigin') { if (file.url) { if (file.url != 1) { url = file.url; } } else if (cwdOptions.url && file.hash.indexOf(self.cwd().volumeid) === 0) { url = cwdOptions.url + $.map(this.path2array(hash), function(n) { return encodeURIComponent(n); }).slice(1).join('/'); } if (!download || this.isSameOrigin(url)) { if (url) { url += (url.match(/\?/)? '&' : '?') + '_'.repeat((url.match(/[\?&](_+)t=/g) || ['&t=']).sort().shift().match(/[\?&](_*)t=/)[1].length + 1) + 't=' + (file.ts || parseInt(+new Date()/1000)); if (callback) { callback(url); return; } else { return url; } } } } if (callback && this.hasParrotHeaders()) { if (!requestOpts) { requestOpts = {}; } else { delete requestOpts.onetimeSize; } if (!requestOpts.onetime && !requestOpts.temporary && file.size > onetimeSize) { if (file.mime.match(/^video|audio/)) { requestOpts.temporary = true; } else { requestOpts.onetime = true; } } if (requestOpts.onetime || requestOpts.temporary) { return this.url(file.hash, Object.assign({ async: true }, requestOpts)).done(function(url) { callback(url); }).fail(function() { callback(''); }); } else { return this.getContents(hash, 'blob', requestOpts).done(function(blob){ url = (window.URL || window.webkitURL).createObjectURL(blob); callback(url); }).fail(function() { callback(''); }); } } else { url = this.options.url; url = url + (url.indexOf('?') === -1 ? '?' : '&') + (this.oldAPI ? 'cmd=open¤t='+file.phash : 'cmd=file') + '&target=' + file.hash + '&_t=' + (file.ts || parseInt(+new Date()/1000)); if (download === true) { url += '&download=1'; } $.each(this.customData, function(key, val) { url += '&' + encodeURIComponent(key) + '=' + encodeURIComponent(val); }); if (callback) { callback(url); return; } else { return url; } } }; /** * Return thumbnail url * * @param Object file object * @return String */ this.tmb = function(file) { var tmbUrl, tmbCrop, cls = 'elfinder-cwd-bgurl', url = '', cData = {}, n = 0; if ($.isPlainObject(file)) { if (self.searchStatus.state && file.hash.indexOf(self.cwd().volumeid) !== 0) { tmbUrl = self.option('tmbUrl', file.hash); tmbCrop = self.option('tmbCrop', file.hash); } else { tmbUrl = cwdOptions.tmbUrl; tmbCrop = cwdOptions.tmbCrop; } if (tmbCrop) { cls += ' elfinder-cwd-bgurl-crop'; } if (tmbUrl === 'self' && file.mime.indexOf('image/') === 0) { url = self.openUrl(file.hash); cls += ' elfinder-cwd-bgself'; } else if ((self.oldAPI || tmbUrl) && file && file.tmb && file.tmb != 1) { url = tmbUrl + file.tmb; } else if (self.newAPI && file && file.tmb && file.tmb != 1) { url = file.tmb; } if (url) { if (tmbUrl !== 'self') { if (file.ts) { cData._t = file.ts; } if (cwdOptions.tmbReqCustomData && Object.keys(this.customData).length) { cData = Object.assign(cData, this.customData); } if (Object.keys(cData).length) { url += (url.match(/\?/) ? '&' : '?'); $.each(cData, function (key, val) { url += ((n++ === 0)? '' : '&') + encodeURIComponent(key) + '=' + encodeURIComponent(val); }); } } return { url: url, className: cls }; } } return false; }; /** * Return selected files hashes * * @return Array **/ this.selected = function() { return selected.slice(0); }; /** * Return selected files info * * @return Array */ this.selectedFiles = function() { return $.map(selected, function(hash) { return files[hash] ? Object.assign({}, files[hash]) : null; }); }; /** * Return true if file with required name existsin required folder * * @param String file name * @param String parent folder hash * @return Boolean */ this.fileByName = function(name, phash) { var hash; for (hash in files) { if (files.hasOwnProperty(hash) && files[hash].phash == phash && files[hash].name == name) { return files[hash]; } } }; /** * Valid data for required command based on rules * * @param String command name * @param Object cammand's data * @return Boolean */ this.validResponse = function(cmd, data) { return data.error || this.rules[this.rules[cmd] ? cmd : 'defaults'](data); }; /** * Return bytes from ini formated size * * @param String ini formated size * @return Integer */ this.returnBytes = function(val) { var last; if (isNaN(val)) { if (! val) { val = ''; } // for ex. 1mb, 1KB val = val.replace(/b$/i, ''); last = val.charAt(val.length - 1).toLowerCase(); val = val.replace(/[tgmk]$/i, ''); if (last == 't') { val = val * 1024 * 1024 * 1024 * 1024; } else if (last == 'g') { val = val * 1024 * 1024 * 1024; } else if (last == 'm') { val = val * 1024 * 1024; } else if (last == 'k') { val = val * 1024; } val = isNaN(val)? 0 : parseInt(val); } else { val = parseInt(val); if (val < 1) val = 0; } return val; }; /** * Process ajax request. * Fired events : * @todo * @example * @todo * @return $.Deferred */ this.request = function(opts) { var self = this, o = this.options, dfrd = $.Deferred(), // request ID reqId = (+ new Date()).toString(16) + Math.floor(1000 * Math.random()).toString(16), // request data data = Object.assign({}, self.customData, {mimes : o.onlyMimes}, opts.data || opts), // command name cmd = data.cmd, // request type is binary isBinary = (opts.options || {}).dataType === 'binary', // current cmd is "open" isOpen = (!opts.asNotOpen && cmd === 'open'), // the tree option is enabled (for "open" command) isTree = (data.tree === 1), // call default fail callback (display error dialog) ? deffail = !(isBinary || opts.preventDefault || opts.preventFail), // call default success callback ? defdone = !(isBinary || opts.preventDefault || opts.preventDone), // current progress of receive data prog = opts.progressVal || 20, // timer of fake progress progTm = null, // whether the notification dialog is currently displayed hasNotify= false, // options for notify dialog notify = !opts.progressBar? (opts.notify? Object.assign({progress: prog * opts.notify.cnt}, opts.notify) : {}) : {}, // make cancel button cancel = !!opts.cancel, // do not normalize data - return as is raw = isBinary || !!opts.raw, // sync files on request fail syncOnFail = opts.syncOnFail, // use lazy() lazy = !!opts.lazy, // prepare function before done() prepare = opts.prepare, // navigate option object when cmd done navigate = opts.navigate, // open notify dialog timeout timeout, // use browser cache useCache = (opts.options || {}).cache, // request options options = Object.assign({ url : o.url, async : true, type : this.requestType, dataType : 'json', cache : (self.api >= 2.1029), // api >= 2.1029 has unique request ID data : data, headers : this.customHeaders, xhrFields: this.xhrFields, progress : function(e) { var p = e.loaded / e.total * 100; progTm && clearTimeout(progTm); if (opts.progressBar) { try { opts.progressBar.width(p + '%'); } catch(e) {} } else { if (hasNotify && notify.type) { p = p * notify.cnt; if (prog < p) { self.notify({ type: notify.type, progress: p - prog, cnt: 0, hideCnt: notify.hideCnt }); prog = p; } } } if (opts.progress) { try { opts.progress(e); } catch(e) {} } } }, opts.options || {}), /** * Default success handler. * Call default data handlers and fire event with command name. * * @param Object normalized response data * @return void **/ done = function(data) { data.warning && self.error(data.warning); if (isOpen) { open(data); } else { self.updateCache(data); } self.lazy(function() { // fire some event to update cache/ui data.removed && data.removed.length && self.remove(data); data.added && data.added.length && self.add(data); data.changed && data.changed.length && self.change(data); }).then(function() { // fire event with command name return self.lazy(function() { self.trigger(cmd, data, false); }); }).then(function() { // fire event with command name + 'done' return self.lazy(function() { self.trigger(cmd + 'done'); }); }).then(function() { // make toast message if (data.toasts && Array.isArray(data.toasts)) { $.each(data.toasts, function() { this.msg && self.toast(this); }); } // force update content data.sync && self.sync(); }); }, /** * Request error handler. Reject dfrd with correct error message. * * @param jqxhr request object * @param String request status * @return void **/ error = function(xhr, status) { var error, data, d = self.options.debug; switch (status) { case 'abort': error = xhr.quiet ? '' : ['errConnect', 'errAbort']; break; case 'timeout': error = ['errConnect', 'errTimeout']; break; case 'parsererror': error = ['errResponse', 'errDataNotJSON']; if (xhr.responseText) { if (! cwd || (d && (d === 'all' || d['backend-error']))) { error.push(xhr.responseText); } } break; default: if (xhr.responseText) { // check responseText, Is that JSON? try { data = JSON.parse(xhr.responseText); xhr._elfinderResponse = data; if (data && data.error) { error = data.error; } } catch(e) {} } if (! error) { if (xhr.status == 403) { error = ['errConnect', 'errAccess', 'HTTP error ' + xhr.status]; } else if (xhr.status == 404) { error = ['errConnect', 'errNotFound', 'HTTP error ' + xhr.status]; } else if (xhr.status >= 500) { error = ['errResponse', 'errServerError', 'HTTP error ' + xhr.status]; } else { if (xhr.status == 414 && options.type === 'get') { // retry by POST method options.type = 'post'; self.abortXHR(xhr); dfrd.xhr = xhr = self.transport.send(options).fail(error).done(success); return; } error = xhr.quiet ? '' : ['errConnect', 'HTTP error ' + xhr.status]; } } } self.trigger(cmd + 'done'); dfrd.reject({error: error}, xhr, status); }, /** * Request success handler. Valid response data and reject/resolve dfrd. * * @param Object response data * @param String request status * @return void **/ success = function(response) { // Set currrent request command name self.currentReqCmd = cmd; response.debug && self.responseDebug(response); self.setCustomHeaderByXhr(xhr); if (raw) { self.abortXHR(xhr); response && response.debug && self.debug('backend-debug', response); return dfrd.resolve(response); } if (!response) { return dfrd.reject({error :['errResponse', 'errDataEmpty']}, xhr, response); } else if (!$.isPlainObject(response)) { return dfrd.reject({error :['errResponse', 'errDataNotJSON']}, xhr, response); } if (isOpen && !!data.init && Object.prototype.hasOwnProperty.call(response, self.csrfResponseKey)) { self.setCsrfToken(response[self.csrfResponseKey]); } if (response.error) { if (isOpen) { // check leafRoots $.each(self.leafRoots, function(phash, roots) { self.leafRoots[phash] = $.grep(roots, function(h) { return h !== data.target; }); }); } return dfrd.reject({error :response.error}, xhr, response); } var resolve = function() { var pushLeafRoots = function(name) { if (self.leafRoots[data.target] && response[name]) { $.each(self.leafRoots[data.target], function(i, h) { var root; if (root = self.file(h)) { response[name].push(root); } }); } }, setTextMimes = function() { self.textMimes = {}; $.each(self.res('mimes', 'text'), function() { self.textMimes[this.toLowerCase()] = true; }); }, actionTarget; if (isOpen && !isTree) { pushLeafRoots('files'); } else if (cmd === 'tree') { pushLeafRoots('tree'); } response = self.normalize(response); if (!self.validResponse(cmd, response)) { return dfrd.reject({error :(response.norError || 'errResponse')}, xhr, response); } if (isOpen) { if (!self.api) { self.api = response.api || 1; if (self.api == '2.0' && typeof response.options.uploadMaxSize !== 'undefined') { self.api = '2.1'; } self.newAPI = self.api >= 2; self.oldAPI = !self.newAPI; } if (response.textMimes && Array.isArray(response.textMimes)) { self.resources.mimes.text = response.textMimes; setTextMimes(); } !self.textMimes && setTextMimes(); if (response.options) { cwdOptions = Object.assign({}, cwdOptionsDefault, response.options); } if (response.netDrivers) { self.netDrivers = response.netDrivers; } if (response.maxTargets) { self.maxTargets = response.maxTargets; } if (!!data.init) { self.uplMaxSize = self.returnBytes(response.uplMaxSize); self.uplMaxFile = !!response.uplMaxFile? Math.min(parseInt(response.uplMaxFile), 50) : 20; } } if (typeof prepare === 'function') { prepare(response); } if (navigate) { actionTarget = navigate.target || 'added'; if (response[actionTarget] && response[actionTarget].length) { self.one(cmd + 'done', function() { var targets = response[actionTarget], newItems = self.findCwdNodes(targets), inCwdHashes = function() { var cwdHash = self.cwd().hash; return $.map(targets, function(f) { return (f.phash && cwdHash === f.phash)? f.hash : null; }); }, hashes = inCwdHashes(), makeToast = function(t) { var node = void(0), data = t.action? t.action.data : void(0), cmd, msg, done; if ((data || hashes.length) && t.action && (msg = t.action.msg) && (cmd = t.action.cmd) && (!t.action.cwdNot || t.action.cwdNot !== self.cwd().hash)) { done = t.action.done; data = t.action.data; node = $('
          ') .append( $('') .on('mouseenter mouseleave', function(e) { $(this).toggleClass('ui-state-hover', e.type == 'mouseenter'); }) .on('click', function() { self.exec(cmd, data || hashes, {_userAction: true, _currentType: 'toast', _currentNode: $(this) }); if (done) { self.one(cmd+'done', function() { if (typeof done === 'function') { done(); } else if (done === 'select') { self.trigger('selectfiles', {files : inCwdHashes()}); } }); } }) ); } delete t.action; t.extNode = node; return t; }; if (! navigate.toast) { navigate.toast = {}; } !navigate.noselect && self.trigger('selectfiles', {files : self.searchStatus.state > 1 ? $.map(targets, function(f) { return f.hash; }) : hashes}); if (newItems.length) { if (!navigate.noscroll) { newItems.first().trigger('scrolltoview', {blink : false}); self.resources.blink(newItems, 'lookme'); } if ($.isPlainObject(navigate.toast.incwd)) { self.toast(makeToast(navigate.toast.incwd)); } } else { if ($.isPlainObject(navigate.toast.inbuffer)) { self.toast(makeToast(navigate.toast.inbuffer)); } } }); } } dfrd.resolve(response); response.debug && self.debug('backend-debug', response); }; self.abortXHR(xhr); lazy? self.lazy(resolve) : resolve(); }, xhr, _xhr, xhrAbort = function(e) { if (xhr && xhr.state() === 'pending') { self.abortXHR(xhr, { quiet: true , abort: true }); if (!e || (e.type !== 'unload' && e.type !== 'destroy')) { self.autoSync(); } } }, abort = function(e){ self.trigger(cmd + 'done'); if (e.type == 'autosync') { if (e.data.action != 'stop') return; } else if (e.type != 'unload' && e.type != 'destroy' && e.type != 'openxhrabort') { if (!e.data.added || !e.data.added.length) { return; } } xhrAbort(e); }, request = function(mode) { var queueAbort = function() { syncOnFail = false; dfrd.reject(); }; if (mode) { if (mode === 'cmd') { return cmd; } } if (isOpen) { if (currentOpenCmd && currentOpenCmd.state() === 'pending') { if (currentOpenCmd._target === data.target) { return dfrd.reject('openabort'); } else { if (currentOpenCmd.xhr) { currentOpenCmd.xhr.queueAbort(); } else { currentOpenCmd.reject('openabort'); } } } currentOpenCmd = dfrd; currentOpenCmd._target = data.target; } dfrd.always(function() { delete options.headers['X-elFinderReqid']; if (isOpen) { currentOpenCmd = null; } }).fail(function(error, xhr, response) { var errData, errMsg; if (isOpen && error === 'openabort') { error = ''; syncOnFail = false; } errData = { cmd: cmd, err: error, xhr: xhr, rc: response }; // unset this cmd queue when user canceling // see notify : function - `cancel.reject(0);` if (error === 0) { if (requestQueue.length) { requestQueue = $.grep(requestQueue, function(req) { return (req('cmd') === cmd) ? false : true; }); } } // trigger "requestError" event self.trigger('requestError', errData); if (errData._getEvent && errData._getEvent().isDefaultPrevented()) { deffail = false; syncOnFail = false; if (error) { error.error = ''; } } else if (xhr && self.handleCsrfReload(xhr, xhr._elfinderResponse)) { deffail = false; syncOnFail = false; if (error) { error.error = ''; } } // abort xhr xhrAbort(); if (isOpen) { openDir = self.file(data.target); openDir && openDir.volumeid && self.isRoot(openDir) && delete self.volumeExpires[openDir.volumeid]; } self.trigger(cmd + 'fail', response); errMsg = (typeof error === 'object')? error.error : error; if (errMsg) { deffail ? self.error(errMsg) : self.debug('error', self.i18n(errMsg)); } syncOnFail && self.sync(); }); if (!cmd) { syncOnFail = false; return dfrd.reject({error :'errCmdReq'}); } if (self.maxTargets && data.targets && data.targets.length > self.maxTargets) { syncOnFail = false; return dfrd.reject({error :['errMaxTargets', self.maxTargets]}); } defdone && dfrd.done(done); // quiet abort not completed "open" requests if (isOpen) { while ((_xhr = queue.pop())) { _xhr.queueAbort(); } if (cwd !== data.target) { while ((_xhr = cwdQueue.pop())) { _xhr.queueAbort(); } } } // trigger abort autoSync for commands to add the item if ($.inArray(cmd, (self.cmdsToAdd + ' autosync').split(' ')) !== -1) { if (cmd !== 'autosync') { self.autoSync('stop'); dfrd.always(function() { self.autoSync(); }); } self.trigger('openxhrabort'); } delete options.preventFail; if (self.api >= 2.1029) { if (useCache) { options.headers['X-elFinderReqid'] = reqId; } else { Object.assign(options.data, { reqid : reqId }); } } // function for set value of this syncOnFail dfrd.syncOnFail = function(state) { syncOnFail = !!state; }; requestCnt++; dfrd.xhr = xhr = self.transport.send(options).always(function() { // set responseURL from native xhr object if (options._xhr && typeof options._xhr.responseURL !== 'undefined') { xhr.responseURL = options._xhr.responseURL || ''; } --requestCnt; if (requestQueue.length) { requestQueue.shift()(); } }).fail(error).done(success); xhr._csrfRefresh = !!opts._csrfRefresh; if (self.api >= 2.1029) { xhr._requestId = reqId; } if (isOpen || (data.compare && cmd === 'info')) { // regist function queueAbort xhr.queueAbort = queueAbort; // add autoSync xhr into queue queue.unshift(xhr); // bind abort() data.compare && self.bind(self.cmdsToAdd + ' autosync openxhrabort', abort); dfrd.always(function() { var ndx = $.inArray(xhr, queue); data.compare && self.unbind(self.cmdsToAdd + ' autosync openxhrabort', abort); ndx !== -1 && queue.splice(ndx, 1); }); } else if ($.inArray(cmd, self.abortCmdsOnOpen) !== -1) { // regist function queueAbort xhr.queueAbort = queueAbort; // add "open" xhr, only cwd xhr into queue cwdQueue.unshift(xhr); dfrd.always(function() { var ndx = $.inArray(xhr, cwdQueue); ndx !== -1 && cwdQueue.splice(ndx, 1); }); } // abort pending xhr on window unload or elFinder destroy self.bind('unload destroy', abort); dfrd.always(function() { self.unbind('unload destroy', abort); }); return dfrd; }, queueingRequest = function() { // show notify if (notify.type && notify.cnt) { if (cancel) { notify.cancel = dfrd; opts.eachCancel && (notify.id = +new Date()); } timeout = setTimeout(function() { // start fake count up progTm = setTimeout(progFakeUp, 1000); self.notify(notify); hasNotify = true; dfrd.always(function() { notify.cnt = -(parseInt(notify.cnt)||0); self.notify(notify); hasNotify = false; }); }, self.notifyDelay); dfrd.always(function() { clearTimeout(timeout); }); } // queueing if (requestCnt < requestMaxConn) { // do request return request(); } else { if (isOpen) { requestQueue.unshift(request); } else { requestQueue.push(request); } return dfrd; } }, progFakeUp = function() { var add; if (hasNotify && progTm) { add = 1 * notify.cnt; progTm = null; self.notify({ type: notify.type, progress: add, cnt: 0, hideCnt: notify.hideCnt }); prog += add; if ((prog / notify.cnt) < 80) { progTm = setTimeout(progFakeUp, 500); } } }, bindData = {opts: opts, result: true}, openDir; // prevent request initial request is completed if (!self.api && !data.init) { syncOnFail = false; return dfrd.reject(); } // trigger "request.cmd" that callback be able to cancel request by substituting "false" for "event.data.result" self.trigger('request.' + cmd, bindData, true); if (! bindData.result) { self.trigger(cmd + 'done'); return dfrd.reject(); } else if (typeof bindData.result === 'object' && bindData.result.promise) { bindData.result .done(queueingRequest) .fail(function() { self.trigger(cmd + 'done'); dfrd.reject(); }); return dfrd; } return queueingRequest(); }; /** * Call cache() * Store info about files/dirs in "files" object. * * @param Array files * @param String type * @return void */ this.cache = function(dataArray, type) { if (! Array.isArray(dataArray)) { dataArray = [ dataArray ]; } cache(dataArray, type); }; /** * Update file object caches by respose data object * * @param Object respose data object * @return void */ this.updateCache = function(data) { if ($.isPlainObject(data)) { data.files && data.files.length && cache(data.files, 'files'); data.tree && data.tree.length && cache(data.tree, 'tree'); data.removed && data.removed.length && remove(data.removed); data.added && data.added.length && cache(data.added, 'add'); data.changed && data.changed.length && cache(data.changed, 'change'); } }; /** * Compare current files cache with new files and return diff * * @param Array new files * @param String target folder hash * @param Array exclude properties to compare * @return Object */ this.diff = function(incoming, onlydir, excludeProps) { var raw = {}, added = [], removed = [], changed = [], excludes = null, isChanged = function(hash) { var l = changed.length; while (l--) { if (changed[l].hash == hash) { return true; } } }; $.each(incoming, function(i, f) { raw[f.hash] = f; }); // make excludes object if (excludeProps && excludeProps.length) { excludes = {}; $.each(excludeProps, function() { excludes[this] = true; }); } // find removed $.each(files, function(hash, f) { if (! raw[hash] && (! onlydir || f.phash === onlydir)) { removed.push(hash); } }); // compare files $.each(raw, function(hash, file) { var origin = files[hash], orgKeys = {}, chkKeyLen; if (!origin) { added.push(file); } else { // make orgKeys object $.each(Object.keys(origin), function() { orgKeys[this] = true; }); $.each(file, function(prop) { delete orgKeys[prop]; if (! excludes || ! excludes[prop]) { if (file[prop] !== origin[prop]) { changed.push(file); orgKeys = {}; return false; } } }); chkKeyLen = Object.keys(orgKeys).length; if (chkKeyLen !== 0) { if (excludes) { $.each(orgKeys, function(prop) { if (excludes[prop]) { --chkKeyLen; } }); } (chkKeyLen !== 0) && changed.push(file); } } }); // parents of removed dirs mark as changed (required for tree correct work) $.each(removed, function(i, hash) { var file = files[hash], phash = file.phash; if (phash && file.mime == 'directory' && $.inArray(phash, removed) === -1 && raw[phash] && !isChanged(phash)) { changed.push(raw[phash]); } }); return { added : added, removed : removed, changed : changed }; }; /** * Sync Stopper * * @type Boolean */ this.syncStopper = false; /** * Sync content * * @return jQuery.Deferred */ this.sync = function(onlydir, polling) { if (this.syncStopper) { return $.Deferred().reject(); } this.syncStopper = true; this.autoSync('stop'); var self = this, compare = function(){ var c = '', cnt = 0, mtime = 0; if (onlydir && polling) { $.each(files, function(h, f) { if (f.phash && f.phash === onlydir) { ++cnt; mtime = Math.max(mtime, f.ts); } c = cnt+':'+mtime; }); } return c; }, comp = compare(), odataRoots, dfrd = $.Deferred().always(function() { !reqFail && self.trigger('sync'); }), tree = (! onlydir && this.ui.tree) ? 1 : 0, opts = [this.request({ data : {cmd : 'open', reload : 1, target : cwd, tree : tree, compare : comp}, preventDefault : true })], exParents = function() { var parents = [], curRoot = self.file(self.root(cwd)), curId = curRoot? curRoot.volumeid : null, phash = self.cwd().phash, isroot,pdir; while(phash) { if (pdir = self.file(phash)) { if (phash.indexOf(curId) !== 0) { parents.push( {target: phash, cmd: 'tree'} ); if (! self.isRoot(pdir)) { parents.push( {target: phash, cmd: 'parents'} ); } curRoot = self.file(self.root(phash)); curId = curRoot? curRoot.volumeid : null; } phash = pdir.phash; } else { phash = null; } } return parents; }, reqFail; if (! onlydir && self.api >= 2) { (cwd !== this.root()) && opts.push(this.request({ data : {cmd : 'parents', target : cwd}, preventDefault : true })); $.each(exParents(), function(i, data) { opts.push(self.request({ data : {cmd : data.cmd, target : data.target}, preventDefault : true })); }); } $.when.apply($, opts) .fail(function(error, xhr) { reqFail = (xhr && xhr.status != 200); if (! polling || $.inArray('errOpen', error) !== -1) { dfrd.reject(error); self.parseError(error) && self.request({ data : {cmd : 'open', target : (self.lastDir('') || self.root()), tree : 1, init : 1}, notify : {type : 'open', cnt : 1, hideCnt : true} }); } else { dfrd.reject((error && xhr.status != 0)? error : void 0); } }) .done(function(odata) { var pdata, argLen, i; if (odata.cwd.compare) { if (comp === odata.cwd.compare) { return dfrd.reject(); } } // for 2nd and more requests pdata = {tree : []}; // results marge of 2nd and more requests argLen = arguments.length; if (argLen > 1) { for(i = 1; i < argLen; i++) { if (arguments[i].tree && arguments[i].tree.length) { pdata.tree.push.apply(pdata.tree, arguments[i].tree); } } } if (self.api < 2.1) { if (! pdata.tree) { pdata.tree = []; } pdata.tree.push(odata.cwd); } // data normalize odata = self.normalize(odata); if (!self.validResponse('open', odata)) { return dfrd.reject((odata.norError || 'errResponse')); } pdata = self.normalize(pdata); if (!self.validResponse('tree', pdata)) { return dfrd.reject((pdata.norError || 'errResponse')); } // When tree = 1, the server will return all volumes in response to the open command. // Remove volumes from the tree command that do not exist anymore. if (tree && pdata && pdata.tree) { odataRoots = $.map($.grep(odata.files, function(f) {return f.isroot;}), function(f) {return f.hash;}); pdata.tree = $.grep(pdata.tree, function(f) {return !f.isroot || odataRoots.indexOf(f.hash) >= 0;}); } var diff = self.diff(odata.files.concat(pdata && pdata.tree ? pdata.tree : []), onlydir); diff.added.push(odata.cwd); self.updateCache(diff); // trigger events diff.removed.length && self.remove(diff); diff.added.length && self.add(diff); diff.changed.length && self.change(diff); return dfrd.resolve(diff); }) .always(function() { self.syncStopper = false; self.autoSync(); }); return dfrd; }; this.upload = function(files) { return this.transport.upload(files, this); }; /** * Bind keybord shortcut to keydown event * * @example * elfinder.shortcut({ * pattern : 'ctrl+a', * description : 'Select all files', * callback : function(e) { ... }, * keypress : true|false (bind to keypress instead of keydown) * }) * * @param Object shortcut config * @return elFinder */ this.shortcut = function(s) { var patterns, pattern, code, i, parts; if (this.options.allowShortcuts && s.pattern && typeof s.callback === 'function') { patterns = s.pattern.toUpperCase().split(/\s+/); for (i= 0; i < patterns.length; i++) { pattern = patterns[i]; parts = pattern.split('+'); code = (code = parts.pop()).length == 1 ? (code > 0 ? code : code.charCodeAt(0)) : (code > 0 ? code : $.ui.keyCode[code]); if (code && !shortcuts[pattern]) { shortcuts[pattern] = { keyCode : code, altKey : $.inArray('ALT', parts) != -1, ctrlKey : $.inArray('CTRL', parts) != -1, shiftKey : $.inArray('SHIFT', parts) != -1, type : s.type || 'keydown', callback : s.callback, description : s.description, pattern : pattern }; } } } return this; }; /** * Registered shortcuts * * @type Object **/ this.shortcuts = function() { var ret = []; $.each(shortcuts, function(i, s) { ret.push([s.pattern, self.i18n(s.description)]); }); return ret; }; /** * Get/set clipboard content. * Return new clipboard content. * * @example * this.clipboard([]) - clean clipboard * this.clipboard([{...}, {...}], true) - put 2 files in clipboard and mark it as cutted * * @param Array new files hashes * @param Boolean cut files? * @return Array */ this.clipboard = function(hashes, cut) { var map = function() { return $.map(clipboard, function(f) { return f.hash; }); }; if (hashes !== void(0)) { clipboard.length && this.trigger('unlockfiles', {files : map()}); remember = {}; clipboard = $.map(hashes||[], function(hash) { var file = files[hash]; if (file) { remember[hash] = true; return { hash : hash, phash : file.phash, name : file.name, mime : file.mime, read : file.read, locked : file.locked, cut : !!cut }; } return null; }); this.trigger('changeclipboard', {clipboard : clipboard.slice(0, clipboard.length)}); cut && this.trigger('lockfiles', {files : map()}); } // return copy of clipboard instead of refrence return clipboard.slice(0, clipboard.length); }; /** * Return true if command enabled * * @param String command name * @param String|void hash for check of own volume's disabled cmds * @return Boolean */ this.isCommandEnabled = function(name, dstHash) { var disabled, cmd, cvid = self.cwd().volumeid || ''; // In serach results use selected item hash to check if (!dstHash && self.searchStatus.state > 1 && self.selected().length) { dstHash = self.selected()[0]; } if (dstHash && (! cvid || dstHash.indexOf(cvid) !== 0)) { disabled = self.option('disabledFlip', dstHash); //if (! disabled) { // disabled = {}; //} } else { disabled = cwdOptions.disabledFlip/* || {}*/; } cmd = this._commands[name]; return cmd ? (cmd.alwaysEnabled || !disabled[name]) : false; }; /** * Exec command and return result; * * @param String command name * @param String|Array usualy files hashes * @param String|Array command options * @param String|void hash for enabled check of own volume's disabled cmds * @return $.Deferred */ this.exec = function(cmd, files, opts, dstHash) { var dfrd, resType; // apply commandMap for keyboard shortcut if (!dstHash && this.commandMap[cmd] && this.commandMap[cmd] !== 'hidden') { cmd = this.commandMap[cmd]; } if (cmd === 'open') { if (this.searchStatus.state || this.searchStatus.ininc) { this.trigger('searchend', { noupdate: true }); } this.autoSync('stop'); } if (!dstHash && files) { if (Array.isArray(files)) { if (files.length) { dstHash = files[0]; } } else { dstHash = files; } } dfrd = this._commands[cmd] && this.isCommandEnabled(cmd, dstHash) ? this._commands[cmd].exec(files, opts) : $.Deferred().reject('errUnknownCmd'); resType = typeof dfrd; if (!(resType === 'object' && dfrd.promise)) { self.debug('warning', '"cmd.exec()" should be returned "$.Deferred" but cmd "' + cmd + '" returned "' + resType + '"'); dfrd = $.Deferred().resolve(); } this.trigger('exec', { dfrd : dfrd, cmd : cmd, files : files, opts : opts, dstHash : dstHash }); return dfrd; }; /** * Create and return dialog. * * @param String|DOMElement dialog content * @param Object dialog options * @return jQuery */ this.dialog = function(content, options) { var dialog = $('
          ').append(content).appendTo(node).elfinderdialog(options, self), dnode = dialog.closest('.ui-dialog'), resize = function(){ ! dialog.data('draged') && dialog.is(':visible') && dialog.elfinderdialog('posInit'); }; if (dnode.length) { self.bind('resize', resize); dnode.on('remove', function() { self.unbind('resize', resize); }); } return dialog; }; /** * Create and return toast. * * @param Object toast options - see ui/toast.js * @return jQuery */ this.toast = function(options) { return $('
          ').appendTo(this.ui.toast).elfindertoast(options || {}, this); }; /** * Return UI widget or node * * @param String ui name * @return jQuery */ this.getUI = function(ui) { return ui? (this.ui[ui] || $()) : node; }; /** * Return elFinder.command instance or instances array * * @param String command name * @return Object | Array */ this.getCommand = function(name) { return name === void(0) ? this._commands : this._commands[name]; }; /** * Resize elfinder node * * @param String|Number width * @param String|Number height * @return void */ this.resize = function(w, h) { var getMargin = function() { var m = node.outerHeight(true) - node.innerHeight(), p = node; while(p.get(0) !== heightBase.get(0)) { p = p.parent(); m += p.outerHeight(true) - p.innerHeight(); if (! p.parent().length) { // reached the document break; } } return m; }, fit = ! node.hasClass('ui-resizable'), prv = node.data('resizeSize') || {w: 0, h: 0}, mt, size = {}; if (heightBase && heightBase.data('resizeTm')) { clearTimeout(heightBase.data('resizeTm')); } if (! self.options.noResizeBySelf) { if (typeof h === 'string') { if (mt = h.match(/^([0-9.]+)%$/)) { // setup heightBase if (! heightBase || ! heightBase.length) { heightBase = $(window); } if (! heightBase.data('marginToMyNode')) { heightBase.data('marginToMyNode', getMargin()); } if (! heightBase.data('fitToBaseFunc')) { heightBase.data('fitToBaseFunc', function(e) { var tm = heightBase.data('resizeTm'); e.preventDefault(); e.stopPropagation(); tm && cancelAnimationFrame(tm); if (! node.hasClass('elfinder-fullscreen') && (!self.UA.Mobile || heightBase.data('rotated') !== self.UA.Rotated)) { heightBase.data('rotated', self.UA.Rotated); heightBase.data('resizeTm', requestAnimationFrame(function() { self.restoreSize(); })); } }); } if (typeof heightBase.data('rotated') === 'undefined') { heightBase.data('rotated', self.UA.Rotated); } h = heightBase.height() * (mt[1] / 100) - heightBase.data('marginToMyNode'); heightBase.off('resize.' + self.namespace, heightBase.data('fitToBaseFunc')); fit && heightBase.on('resize.' + self.namespace, heightBase.data('fitToBaseFunc')); } } node.css({ width : w, height : parseInt(h) }); } size.w = Math.round(node.width()); size.h = Math.round(node.height()); node.data('resizeSize', size); if (size.w !== prv.w || size.h !== prv.h) { node.trigger('resize'); this.trigger('resize', {width : size.w, height : size.h}); } }; /** * Restore elfinder node size * * @return elFinder */ this.restoreSize = function() { this.resize(width, height); }; this.show = function() { node.show(); this.enable().trigger('show'); }; this.hide = function() { if (this.options.enableAlways) { prevEnabled = enabled; enabled = false; } this.disable(); this.trigger('hide'); node.hide(); }; /** * Lazy execution function * * @param Object function * @param Number delay * @param Object options * @return Object jQuery.Deferred */ this.lazy = function(func, delay, opts) { var busy = function(state) { var cnt = node.data('lazycnt'), repaint; if (state) { repaint = node.data('lazyrepaint')? false : opts.repaint; if (! cnt) { node.data('lazycnt', 1) .addClass('elfinder-processing'); } else { node.data('lazycnt', ++cnt); } if (repaint) { node.data('lazyrepaint', true).css('display'); // force repaint } } else { if (cnt && cnt > 1) { node.data('lazycnt', --cnt); } else { repaint = node.data('lazyrepaint'); node.data('lazycnt', 0) .removeData('lazyrepaint') .removeClass('elfinder-processing'); repaint && node.css('display'); // force repaint; self.trigger('lazydone'); } } }, dfd = $.Deferred(), callFunc = function() { dfd.resolve(func.call(dfd)); busy(false); }; delay = delay || 0; opts = opts || {}; busy(true); if (delay) { setTimeout(callFunc, delay); } else { requestAnimationFrame(callFunc); } return dfd; }; /** * Destroy this elFinder instance * * @return void **/ this.destroy = function() { if (node && node[0].elfinder) { node.hasClass('elfinder-fullscreen') && self.toggleFullscreen(node); this.options.syncStart = false; this.autoSync('forcestop'); this.trigger('destroy').disable(); clipboard = []; selected = []; listeners = {}; shortcuts = {}; $(window).off('.' + namespace); $(document).off('.' + namespace); self.trigger = function(){}; $(beeper).remove(); node.off() .removeData() .empty() .append(prevContent.contents()) .attr('class', prevContent.attr('class')) .attr('style', prevContent.attr('style')); delete node[0].elfinder; // restore kept events $.each(prevEvents, function(n, arr) { $.each(arr, function(i, o) { node.on(o.type + (o.namespace? '.'+o.namespace : ''), o.selector, o.handler); }); }); } }; /** * Start or stop auto sync * * @param String|Bool stop * @return void */ this.autoSync = function(mode) { var sync; if (self.options.sync >= 1000) { if (syncInterval) { clearTimeout(syncInterval); syncInterval = null; self.trigger('autosync', {action : 'stop'}); } if (mode === 'stop') { ++autoSyncStop; } else { autoSyncStop = Math.max(0, --autoSyncStop); } if (autoSyncStop || mode === 'forcestop' || ! self.options.syncStart) { return; } // run interval sync sync = function(start){ var timeout; if (cwdOptions.syncMinMs && (start || syncInterval)) { start && self.trigger('autosync', {action : 'start'}); timeout = Math.max(self.options.sync, cwdOptions.syncMinMs); syncInterval && clearTimeout(syncInterval); syncInterval = setTimeout(function() { var dosync = true, hash = cwd, cts; if (cwdOptions.syncChkAsTs && files[hash] && (cts = files[hash].ts)) { self.request({ data : {cmd : 'info', targets : [hash], compare : cts, reload : 1}, preventDefault : true }) .done(function(data){ var ts; dosync = true; if (data.compare) { ts = data.compare; if (ts == cts) { dosync = false; } } if (dosync) { self.sync(hash).always(function(){ if (ts) { // update ts for cache clear etc. files[hash].ts = ts; } sync(); }); } else { sync(); } }) .fail(function(error, xhr){ var err = self.parseError(error); if (err && xhr.status != 0) { self.error(err); if (Array.isArray(err) && $.inArray('errOpen', err) !== -1) { self.request({ data : {cmd : 'open', target : (self.lastDir('') || self.root()), tree : 1, init : 1}, notify : {type : 'open', cnt : 1, hideCnt : true} }); } } else { syncInterval = setTimeout(function() { sync(); }, timeout); } }); } else { self.sync(cwd, true).always(function(){ sync(); }); } }, timeout); } }; sync(true); } }; /** * Return bool is inside work zone of specific point * * @param Number event.pageX * @param Number event.pageY * @return Bool */ this.insideWorkzone = function(x, y, margin) { var rectangle = this.getUI('workzone').data('rectangle'); margin = margin || 1; if (x < rectangle.left + margin || x > rectangle.left + rectangle.width + margin || y < rectangle.top + margin || y > rectangle.top + rectangle.height + margin) { return false; } return true; }; /** * Target ui node move to last of children of elFinder node fot to show front * * @param Object target Target jQuery node object */ this.toFront = function(target) { var nodes = node.children('.ui-front').removeClass('elfinder-frontmost'), lastnode = nodes.last(); nodes.css('z-index', ''); $(target).addClass('ui-front elfinder-frontmost').css('z-index', lastnode.css('z-index') + 1); }; /** * Remove class 'elfinder-frontmost' and hide() to target ui node * * @param Object target Target jQuery node object * @param Boolean nohide Do not hide */ this.toHide =function(target, nohide) { var tgt = $(target), last; !nohide && tgt.hide(); if (tgt.hasClass('elfinder-frontmost')) { tgt.removeClass('elfinder-frontmost'); last = node.children('.ui-front:visible:not(.elfinder-frontmost)').last(); if (last.length) { requestAnimationFrame(function() { if (!node.children('.elfinder-frontmost:visible').length) { self.toFront(last); last.trigger('frontmost'); } }); } } }; /** * Return css object for maximize * * @return Object */ this.getMaximizeCss = function() { return { width : '100%', height : '100%', margin : 0, top : 0, left : 0, display : 'block', position: 'fixed', zIndex : Math.max(self.zIndex? (self.zIndex + 1) : 0 , 1000), maxWidth : '', maxHeight: '' }; }; // Closure for togglefullscreen (function() { // check is in iframe if (inFrame && self.UA.Fullscreen) { self.UA.Fullscreen = false; if (parentIframe && typeof parentIframe.attr('allowfullscreen') !== 'undefined') { self.UA.Fullscreen = true; } } var orgStyle, bodyOvf, resizeTm, fullElm, exitFull, toFull, funcObj, cls = 'elfinder-fullscreen', clsN = 'elfinder-fullscreen-native', checkDialog = function() { var t = 0, l = 0; $.each(node.children('.ui-dialog,.ui-draggable'), function(i, d) { var $d = $(d), pos = $d.position(); if (pos.top < 0) { $d.css('top', t); t += 20; } if (pos.left < 0) { $d.css('left', l); l += 20; } }); }, setFuncObj = function() { var useFullscreen = self.storage('useFullscreen'); funcObj = self.UA.Fullscreen && (useFullscreen? useFullscreen > 0 : self.options.commandsOptions.fullscreen.mode === 'screen') ? { // native full screen mode fullElm: function() { return document.fullscreenElement || document.webkitFullscreenElement || document.mozFullScreenElement || document.msFullscreenElement || null; }, exitFull: function() { if (document.exitFullscreen) { return document.exitFullscreen(); } else if (document.webkitExitFullscreen) { return document.webkitExitFullscreen(); } else if (document.mozCancelFullScreen) { return document.mozCancelFullScreen(); } else if (document.msExitFullscreen) { return document.msExitFullscreen(); } }, toFull: function(elem) { if (elem.requestFullscreen) { return elem.requestFullscreen(); } else if (elem.webkitRequestFullscreen) { return elem.webkitRequestFullscreen(); } else if (elem.mozRequestFullScreen) { return elem.mozRequestFullScreen(); } else if (elem.msRequestFullscreen) { return elem.msRequestFullscreen(); } return false; } } : { // node element maximize mode fullElm: function() { var full; if (node.hasClass(cls)) { return node.get(0); } else { full = node.find('.' + cls); if (full.length) { return full.get(0); } } return null; }, exitFull: function() { var elm; $(window).off('resize.' + namespace, resize); if (bodyOvf !== void(0)) { $('body').css('overflow', bodyOvf); } bodyOvf = void(0); if (orgStyle) { elm = orgStyle.elm; restoreStyle(elm); $(elm).trigger('resize', {fullscreen: 'off'}); } $(window).trigger('resize'); }, toFull: function(elem) { bodyOvf = $('body').css('overflow') || ''; $('body').css('overflow', 'hidden'); $(elem).css(self.getMaximizeCss()) .addClass(cls) .trigger('resize', {fullscreen: 'on'}); checkDialog(); $(window).on('resize.' + namespace, resize).trigger('resize'); return true; } }; }, restoreStyle = function(elem) { if (orgStyle && orgStyle.elm == elem) { $(elem).removeClass(cls + ' ' + clsN).attr('style', orgStyle.style); orgStyle = null; } }, resize = function(e) { var elm; if (e.target === window) { resizeTm && cancelAnimationFrame(resizeTm); resizeTm = requestAnimationFrame(function() { if (elm = funcObj.fullElm()) { $(elm).trigger('resize', {fullscreen: 'on'}); } }); } }; setFuncObj(); $(document).on('fullscreenchange.' + namespace + ' webkitfullscreenchange.' + namespace + ' mozfullscreenchange.' + namespace + ' MSFullscreenChange.' + namespace, function(e){ if (self.UA.Fullscreen) { var elm = funcObj.fullElm(), win = $(window); resizeTm && cancelAnimationFrame(resizeTm); if (elm === null) { win.off('resize.' + namespace, resize); if (orgStyle) { elm = orgStyle.elm; restoreStyle(elm); $(elm).trigger('resize', {fullscreen: 'off'}); } } else { $(elm).addClass(cls + ' ' + clsN) .attr('style', 'width:100%; height:100%; margin:0; padding:0;') .trigger('resize', {fullscreen: 'on'}); win.on('resize.' + namespace, resize); checkDialog(); } win.trigger('resize'); } }); /** * Toggle Full Scrren Mode * * @param Object target * @param Bool full * @return Object | Null DOM node object of current full scrren */ self.toggleFullscreen = function(target, full) { var elm = $(target).get(0), curElm = null; curElm = funcObj.fullElm(); if (curElm) { if (curElm == elm) { if (full === true) { return curElm; } } else { if (full === false) { return curElm; } } funcObj.exitFull(); return null; } else { if (full === false) { return null; } } setFuncObj(); orgStyle = {elm: elm, style: $(elm).attr('style')}; if (funcObj.toFull(elm) !== false) { return elm; } else { orgStyle = null; return null; } }; })(); // Closure for toggleMaximize (function(){ var cls = 'elfinder-maximized', resizeTm, resize = function(e) { if (e.target === window && e.data && e.data.elm) { var elm = e.data.elm; resizeTm && cancelAnimationFrame(resizeTm); resizeTm = requestAnimationFrame(function() { elm.trigger('resize', {maximize: 'on'}); }); } }, exitMax = function(elm) { $(window).off('resize.' + namespace, resize); $('body').css('overflow', elm.data('bodyOvf')); elm.removeClass(cls) .attr('style', elm.data('orgStyle')) .removeData('bodyOvf') .removeData('orgStyle'); elm.trigger('resize', {maximize: 'off'}); }, toMax = function(elm) { elm.data('bodyOvf', $('body').css('overflow') || '') .data('orgStyle', elm.attr('style')) .addClass(cls) .css(self.getMaximizeCss()); $('body').css('overflow', 'hidden'); $(window).on('resize.' + namespace, {elm: elm}, resize); elm.trigger('resize', {maximize: 'on'}); }; /** * Toggle Maximize target node * * @param Object target * @param Bool max * @return void */ self.toggleMaximize = function(target, max) { var elm = $(target), maximized = elm.hasClass(cls); if (maximized) { if (max === true) { return; } exitMax(elm); } else { if (max === false) { return; } toMax(elm); } }; })(); /************* init stuffs ****************/ Object.assign($.ui.keyCode, { 'F1' : 112, 'F2' : 113, 'F3' : 114, 'F4' : 115, 'F5' : 116, 'F6' : 117, 'F7' : 118, 'F8' : 119, 'F9' : 120, 'F10' : 121, 'F11' : 122, 'F12' : 123, 'DIG0' : 48, 'DIG1' : 49, 'DIG2' : 50, 'DIG3' : 51, 'DIG4' : 52, 'DIG5' : 53, 'DIG6' : 54, 'DIG7' : 55, 'DIG8' : 56, 'DIG9' : 57, 'NUM0' : 96, 'NUM1' : 97, 'NUM2' : 98, 'NUM3' : 99, 'NUM4' : 100, 'NUM5' : 101, 'NUM6' : 102, 'NUM7' : 103, 'NUM8' : 104, 'NUM9' : 105, 'CONTEXTMENU' : 93, 'DOT' : 190 }); this.dragUpload = false; this.xhrUpload = (typeof XMLHttpRequestUpload != 'undefined' || typeof XMLHttpRequestEventTarget != 'undefined') && typeof File != 'undefined' && typeof FormData != 'undefined'; // configure transport object this.transport = {}; if (typeof(this.options.transport) == 'object') { this.transport = this.options.transport; if (typeof(this.transport.init) == 'function') { this.transport.init(this); } } if (typeof(this.transport.send) != 'function') { this.transport.send = function(opts) { if (!self.UA.IE) { // keep native xhr object for handling property responseURL opts._xhr = new XMLHttpRequest(); opts.xhr = function() { if (opts.progress) { opts._xhr.addEventListener('progress', opts.progress); } return opts._xhr; }; } return $.ajax(opts); }; } if (this.transport.upload == 'iframe') { this.transport.upload = this.uploads.iframe.bind(this); } else if (typeof(this.transport.upload) == 'function') { this.dragUpload = !!this.options.dragUploadAllow; } else if (this.xhrUpload && !!this.options.dragUploadAllow) { this.transport.upload = this.uploads.xhr.bind(this); this.dragUpload = true; } else { this.transport.upload = this.uploads.iframe.bind(this); } /** * Decoding 'raw' string converted to unicode * * @param String str * @return String */ this.decodeRawString = function(str) { var charCodes = function(str) { var i, len, arr; for (i=0,len=str.length,arr=[]; i= 0xd800 && c <= 0xdbff) { scalars.push((c & 1023) + 64 << 10 | arr[++i] & 1023); } else { scalars.push(c); } } return scalars; }, decodeUTF8 = function(arr) { var i, len, c, str, char = String.fromCharCode; for (i=0,len=arr.length,str=""; c=arr[i],i= 0xc2) { str += char((c&31)<<6 | arr[++i]&63); } else if (c <= 0xef && c >= 0xe0) { str += char((c&15)<<12 | (arr[++i]&63)<<6 | arr[++i]&63); } else if (c <= 0xf7 && c >= 0xf0) { str += char( 0xd800 | ((c&7)<<8 | (arr[++i]&63)<<2 | arr[++i]>>>4&3) - 64, 0xdc00 | (arr[i++]&15)<<6 | arr[i]&63 ); } else { str += char(0xfffd); } } return str; }; return decodeUTF8(scalarValues(str)); }; /** * Gets target file contents by file.hash * * @param String hash The hash * @param String responseType 'blob' or 'arraybuffer' (default) * @param Object requestOpts The request options * @return arraybuffer|blob The contents. */ this.getContents = function(hash, responseType, requestOpts) { var self = this, dfd = $.Deferred(), type = responseType || 'arraybuffer', url, req; dfd.fail(function() { req && req.state() === 'pending' && req.reject(); }); url = self.openUrl(hash); if (!self.isSameOrigin(url)) { url = self.openUrl(hash, true); } req = self.request(Object.assign({ data : {cmd : 'get'}, options : { url: url, type: 'get', cache : true, dataType : 'binary', responseType : type, processData: false }, notify : { type: 'file', cnt: 1, hideCnt: true }, cancel : true }, requestOpts || {})) .fail(function() { dfd.reject(); }) .done(function(data) { dfd.resolve(data); }); return dfd; }; /** * Gets the binary by url. * * @param {Object} opts The options * @param {Function} callback The callback * @param {Object} requestOpts The request options * @return arraybuffer|blob The contents. */ this.getBinaryByUrl = function(opts, callback, requestOpts) { var self = this, dfd = $.Deferred(), url, req; dfd.fail(function() { req && req.state() === 'pending' && req.reject(); }); req = self.request(Object.assign({ data : {cmd : 'get'}, options : Object.assign({ type: 'get', cache : true, dataType : 'binary', responseType : 'blob', processData: false }, opts) }, requestOpts || {})) .fail(function() { dfd.reject(); }) .done(function(data) { callback && callback(data); dfd.resolve(data); }); return dfd; }; /** * Gets the mimetype. * * @param {string} name The name * @param {string} orgMime The organization mime * @return {string} The mimetype. */ this.getMimetype = function(name, orgMime) { var mime = orgMime, ext, m; m = (name + '').match(/\.([^.]+)$/); if (m && (ext = m[1])) { if (!extToMimeTable) { extToMimeTable = self.arrayFlip(self.mimeTypes); } if (!(mime = extToMimeTable[ext.toLowerCase()])) { mime = orgMime; } } return mime; }; /** * Supported check hash algorisms * * @type Array */ self.hashCheckers = []; /** * Closure of getContentsHashes() */ (function(self) { var hashLibs = {}; if (window.Worker && window.ArrayBuffer) { // make fm.hashCheckers if (self.options.cdns.sparkmd5) { hashLibs.SparkMD5 = true; self.hashCheckers.push('md5'); } if (self.options.cdns.jssha) { hashLibs.jsSHA = true; self.hashCheckers = self.hashCheckers.concat(['sha1', 'sha224', 'sha256', 'sha384', 'sha512', 'sha3-224', 'sha3-256', 'sha3-384', 'sha3-512', 'shake128', 'shake256']); } } /** * Gets the contents hashes. * * @param String target target file.hash * @param Object needHashes need hash lib names * @param Object requestOpts The request options * @return Object hashes with lib name as key */ self.getContentsHashes = function(target, needHashes, hashOpts, requestOpts) { var dfd = $.Deferred(), needs = self.arrayFlip(needHashes || ['md5'], true), libs = [], jobs = [], res = {}, opts = hashOpts? hashOpts : { shake128len : 256, shake256len : 512 }, req; dfd.fail(function() { req && req.reject(); }); if (Object.keys(hashLibs).length) { req = self.getContents(target, 'arraybuffer', requestOpts).done(function(arrayBuffer) { if (needs.md5 && hashLibs.SparkMD5) { jobs.push((function() { var job = $.Deferred(); try { var wk = self.getWorker(); job.fail(function() { wk && wk.terminate(); }); wk.onmessage = function(ans) { wk && wk.terminate(); if (ans.data.hash) { var f; res.md5 = ans.data.hash; if (f = self.file(target)) { f.md5 = res.md5; } } else if (ans.data.error) { res.md5 = ans.data.error; } dfd.notify(res); job.resolve(); }; wk.onerror = function(e) { job.reject(); }; wk.postMessage({ scripts: [self.options.cdns.sparkmd5, self.getWorkerUrl('calcfilehash.js')], data: { type: 'md5', bin: arrayBuffer } }); dfd.fail(function() { job.reject(); }); } catch(e) { job.reject(); delete hashLibs.SparkMD5; } return job; })()); } if (hashLibs.jsSHA) { $.each(['1', '224', '256', '384', '512', '3-224', '3-256', '3-384', '3-512', 'ke128', 'ke256'], function(i, v) { if (needs['sha' + v]) { jobs.push((function() { var job = $.Deferred(); try { var wk = self.getWorker(); job.fail(function() { wk && wk.terminate(); }); wk.onmessage = function(ans) { wk && wk.terminate(); if (ans.data.hash) { var f; res['sha' + v] = ans.data.hash; if (f = self.file(target)) { f['sha' + v] = res['sha' + v]; } } else if (ans.data.error) { res['sha' + v] = ans.data.error; } dfd.notify(res); job.resolve(); }; wk.onerror = function(e) { job.reject(); }; wk.postMessage({ scripts: [self.options.cdns.jssha, self.getWorkerUrl('calcfilehash.js')], data: { type: v, bin: arrayBuffer, hashOpts: opts } }); dfd.fail(function() { job.reject(); }); } catch(e) { job.reject(); delete hashLibs.jsSHA; } return job; })()); } }); } if (jobs.length) { $.when.apply(null, jobs).always(function() { dfd.resolve(res); }); } else { dfd.reject(); } }).fail(function() { dfd.reject(); }); } else { dfd.reject(); } return dfd; }; })(this); /** * Parse error value to display * * @param Mixed error * @return Mixed parsed error */ this.parseError = function(error) { var arg = error; if ($.isPlainObject(arg)) { arg = arg.error; } return arg; }; /** * Alias for this.trigger('error', {error : 'message'}) * * @param String error message * @return elFinder **/ this.error = function() { var arg = arguments[0], opts = arguments[1] || null, err; if (arguments.length == 1 && typeof(arg) === 'function') { return self.bind('error', arg); } else { err = this.parseError(arg); return (err === true || !err)? this : self.trigger('error', {error: err, opts : opts}); } }; // create bind/trigger aliases for build-in events $.each(events, function(i, name) { self[name] = function() { var arg = arguments[0]; return arguments.length == 1 && typeof(arg) == 'function' ? self.bind(name, arg) : self.trigger(name, $.isPlainObject(arg) ? arg : {}); }; }); // bind core event handlers this .enable(function() { if (!enabled && self.api && self.visible() && self.ui.overlay.is(':hidden') && ! node.children('.elfinder-dialog.' + self.res('class', 'editing') + ':visible').length) { enabled = true; document.activeElement && document.activeElement.blur(); node.removeClass('elfinder-disabled'); } }) .disable(function() { prevEnabled = enabled; enabled = false; node.addClass('elfinder-disabled'); }) .open(function() { selected = []; }) .select(function(e) { var cnt = 0, unselects = []; selected = $.grep(e.data.selected || e.data.value|| [], function(hash) { if (unselects.length || (self.maxTargets && ++cnt > self.maxTargets)) { unselects.push(hash); return false; } else { return files[hash] ? true : false; } }); if (unselects.length) { self.trigger('unselectfiles', {files: unselects, inselect: true}); self.toast({mode: 'warning', msg: self.i18n(['errMaxTargets', self.maxTargets])}); } }) .error(function(e) { var opts = { cssClass : 'elfinder-dialog-error', title : self.i18n('error'), resizable : false, destroyOnClose : true, buttons : {} }, node = self.getUI(), cnt = node.children('.elfinder-dialog-error').length, last, counter; if (cnt < self.options.maxErrorDialogs) { opts.buttons[self.i18n(self.i18n('btnClose'))] = function() { $(this).elfinderdialog('close'); }; if (e.data.opts && $.isPlainObject(e.data.opts)) { Object.assign(opts, e.data.opts); } self.dialog(''+self.i18n(e.data.error), opts); } else { last = node.children('.elfinder-dialog-error:last').children('.ui-dialog-content:first'); counter = last.children('.elfinder-error-counter'); if (counter.length) { counter.data('cnt', parseInt(counter.data('cnt')) + 1).html(self.i18n(['moreErrors', counter.data('cnt')])); } else { counter = $(''+ self.i18n(['moreErrors', 1]) +'').data('cnt', 1); last.append('
          ', counter); } } }) .bind('tmb', function(e) { $.each(e.data.images||[], function(hash, tmb) { if (files[hash]) { files[hash].tmb = tmb; } }); }) .bind('searchstart', function(e) { Object.assign(self.searchStatus, e.data); self.searchStatus.state = 1; }) .bind('search', function(e) { self.searchStatus.state = 2; }) .bind('searchend', function() { self.searchStatus.state = 0; self.searchStatus.ininc = false; self.searchStatus.mixed = false; }) .bind('canMakeEmptyFile', function(e) { var data = e.data, obj = {}; if (data && Array.isArray(data.mimes)) { if (!data.unshift) { obj = self.mimesCanMakeEmpty; } $.each(data.mimes, function() { if (!obj[this]) { obj[this] = self.mimeTypes[this]; } }); if (data.unshift) { self.mimesCanMakeEmpty = Object.assign(obj, self.mimesCanMakeEmpty); } } }) .bind('themechange', function() { requestAnimationFrame(function() { self.trigger('uiresize'); }); }) ; // We listen and emit a sound on delete according to option if (true === this.options.sound) { this.bind('playsound', function(e) { var play = beeper.canPlayType && beeper.canPlayType('audio/wav; codecs="1"'), file = e.data && e.data.soundFile; play && file && play != '' && play != 'no' && $(beeper).html('')[0].play(); }); } // bind external event handlers $.each(this.options.handlers, function(event, callback) { self.bind(event, callback); }); /** * History object. Store visited folders * * @type Object **/ this.history = new this.history(this); /** * Root hashed * * @type Object */ this.roots = {}; /** * leaf roots * * @type Object */ this.leafRoots = {}; this.volumeExpires = {}; /** * Loaded commands * * @type Object **/ this._commands = {}; if (!Array.isArray(this.options.commands)) { this.options.commands = []; } if ($.inArray('*', this.options.commands) !== -1) { this.options.commands = Object.keys(this.commands); } /** * UI command map of cwd volume ( That volume driver option `uiCmdMap` ) * * @type Object **/ this.commandMap = {}; /** * cwd options of each volume * key: volumeid * val: options object * * @type Object */ this.volOptions = {}; /** * Has volOptions data * * @type Boolean */ this.hasVolOptions = false; /** * Hash of trash holders * key: trash folder hash * val: source volume hash * * @type Object */ this.trashes = {}; /** * cwd options of each folder/file * key: hash * val: options object * * @type Object */ this.optionsByHashes = {}; /** * UI Auto Hide Functions * Each auto hide function mast be call to `fm.trigger('uiautohide')` at end of process * * @type Array **/ this.uiAutoHide = []; // trigger `uiautohide` this.one('open', function() { if (self.uiAutoHide.length) { setTimeout(function() { self.trigger('uiautohide'); }, 500); } }); // Auto Hide Functions sequential processing start this.bind('uiautohide', function() { if (self.uiAutoHide.length) { self.uiAutoHide.shift()(); } }); if (this.options.width) { width = this.options.width; } if (this.options.height) { height = this.options.height; } if (this.options.heightBase) { heightBase = $(this.options.heightBase); } if (this.options.soundPath) { soundPath = this.options.soundPath.replace(/\/+$/, '') + '/'; } else { soundPath = this.baseUrl + soundPath; } if (this.options.parrotHeaders && Array.isArray(this.options.parrotHeaders) && this.options.parrotHeaders.length) { this.parrotHeaders = this.options.parrotHeaders; // check sessionStorage $.each(this.parrotHeaders, function(i, h) { var v = self.sessionStorage('core-ph:' + h); if (v) { self.customHeaders[h] = v; } }); } else { this.parrotHeaders = []; } self.one('opendone', function() { var tm; // attach events to document $(document) // disable elfinder on click outside elfinder .on('click.'+namespace, function(e) { enabled && ! self.options.enableAlways && !$(e.target).closest(node).length && self.disable(); }) // exec shortcuts .on(keydown+' '+keypress+' '+keyup+' '+mousedown, execShortcut); // attach events to window self.options.useBrowserHistory && $(window) .on('popstate.' + namespace, function(ev) { var state = ev.originalEvent.state || {}, hasThash = state.thash? true : false, dialog = node.find('.elfinder-frontmost:visible'), input = node.find('.elfinder-navbar-dir,.elfinder-cwd-filename').find('input,textarea'), onOpen, toast; if (!hasThash) { state = { thash: self.cwd().hash }; // scroll to elFinder node $('html,body').animate({ scrollTop: node.offset().top }); } if (dialog.length || input.length) { history.pushState(state, null, location.pathname + location.search + '#elf_' + state.thash); if (dialog.length) { if (!dialog.hasClass(self.res('class', 'preventback'))) { if (dialog.hasClass('elfinder-contextmenu')) { $(document).trigger($.Event('keydown', { keyCode: $.ui.keyCode.ESCAPE, ctrlKey : false, shiftKey : false, altKey : false, metaKey : false })); } else if (dialog.hasClass('elfinder-dialog')) { dialog.elfinderdialog('close'); } else { dialog.trigger('close'); } } } else { input.trigger($.Event('keydown', { keyCode: $.ui.keyCode.ESCAPE, ctrlKey : false, shiftKey : false, altKey : false, metaKey : false })); } } else { if (hasThash) { !$.isEmptyObject(self.files()) && self.request({ data : {cmd : 'open', target : state.thash, onhistory : 1}, notify : {type : 'open', cnt : 1, hideCnt : true}, syncOnFail : true }); } else { onOpen = function() { toast.trigger('click'); }; self.one('open', onOpen, true); toast = self.toast({ msg: self.i18n('pressAgainToExit'), onHidden: function() { self.unbind('open', onOpen); history.pushState(state, null, location.pathname + location.search + '#elf_' + state.thash); } }); } } }); $(window).on('resize.' + namespace, function(e){ if (e.target === this) { tm && cancelAnimationFrame(tm); tm = requestAnimationFrame(function() { var prv = node.data('resizeSize') || {w: 0, h: 0}, size = {w: Math.round(node.width()), h: Math.round(node.height())}; node.data('resizeSize', size); if (size.w !== prv.w || size.h !== prv.h) { node.trigger('resize'); self.trigger('resize', {width : size.w, height : size.h}); } }); } }) .on('beforeunload.' + namespace,function(e){ var msg, cnt; if (!self.pauseUnloadCheck()) { if (node.is(':visible')) { if (self.ui.notify.children().length && $.inArray('hasNotifyDialog', self.options.windowCloseConfirm) !== -1) { msg = self.i18n('ntfsmth'); } else if (node.find('.'+self.res('class', 'editing')).length && $.inArray('editingFile', self.options.windowCloseConfirm) !== -1) { msg = self.i18n('editingFile'); } else if ((cnt = Object.keys(self.selected()).length) && $.inArray('hasSelectedItem', self.options.windowCloseConfirm) !== -1) { msg = self.i18n('hasSelected', ''+cnt); } else if ((cnt = Object.keys(self.clipboard()).length) && $.inArray('hasClipboardData', self.options.windowCloseConfirm) !== -1) { msg = self.i18n('hasClipboard', ''+cnt); } if (msg) { e.returnValue = msg; return msg; } } self.trigger('unload'); } }); // bind window onmessage for CORS $(window).on('message.' + namespace, function(e){ var res = e.originalEvent || null, obj, data; if (res && (self.convAbsUrl(self.options.url).indexOf(res.origin) === 0 || self.convAbsUrl(self.uploadURL).indexOf(res.origin) === 0)) { try { try { if (typeof res.data !== 'string') { return; } obj = JSON.parse(res.data); if (obj.type !== "io.studio-42.github") { return; } data = obj.data || null; } catch (e2) { return; } if (data) { if (data.error) { if (obj.bind) { self.trigger(obj.bind+'fail', data); } self.error(data.error); } else { data.warning && self.error(data.warning); self.updateCache(data); data.removed && data.removed.length && self.remove(data); data.added && data.added.length && self.add(data); data.changed && data.changed.length && self.change(data); if (obj.bind) { self.trigger(obj.bind, data); self.trigger(obj.bind+'done'); } data.sync && self.sync(); } } } catch (e) { self.sync(); } } }); // elFinder enable always if (self.options.enableAlways) { $(window).on('focus.' + namespace, function(e){ (e.target === this) && self.enable(); }); if (inFrame) { $(window.top).on('focus.' + namespace, function() { if (self.enable() && (! parentIframe || parentIframe.is(':visible'))) { requestAnimationFrame(function() { $(window).trigger('focus'); }); } }); } } else if (inFrame) { $(window).on('blur.' + namespace, function(e){ enabled && e.target === this && self.disable(); }); } // return focus to the window on click (elFInder in the frame) if (inFrame) { node.on('click', function(e) { $(window).trigger('focus'); }); } // elFinder to enable by mouse over if (self.options.enableByMouseOver) { node.on('mouseenter touchstart', function(e) { (inFrame) && $(window).trigger('focus'); ! self.enabled() && self.enable(); }); } // When the browser tab turn to foreground/background $(window).on('visibilitychange.' + namespace, function(e) { var background = document.hidden || document.webkitHidden || document.msHidden; // AutoSync turn On/Off if (self.options.syncStart) { self.autoSync(background? 'stop' : void(0)); } }); }); // store instance in node node[0].elfinder = this; // auto load language file dfrdsBeforeBootup.push((function() { var lang = self.lang, langJs = self.i18nBaseUrl + 'elfinder.' + lang + '.js', dfd = $.Deferred().done(function() { if (self.i18[lang]) { self.lang = lang; } self.trigger('i18load'); i18n = self.lang === 'en' ? self.i18['en'] : $.extend(true, {}, self.i18['en'], self.i18[self.lang]); }); if (!self.i18[lang]) { self.lang = 'en'; if (self.hasRequire) { require([langJs], function() { dfd.resolve(); }, function() { dfd.resolve(); }); } else { self.loadScript([langJs], function() { dfd.resolve(); }, { loadType: 'tag', error : function() { dfd.resolve(); } }); } } else { dfd.resolve(); } return dfd; })()); // elFinder boot up function bootUp = function() { var columnNames; /** * i18 messages * * @type Object **/ self.messages = i18n.messages; // check jquery ui if (!($.fn.selectable && $.fn.draggable && $.fn.droppable && $.fn.resizable && $.fn.button && $.fn.slider)) { return alert(self.i18n('errJqui')); } // check node if (!node.length) { return alert(self.i18n('errNode')); } // check connector url if (!self.options.url) { return alert(self.i18n('errURL')); } // column key/name map for fm.getColumnName() columnNames = Object.assign({ name : self.i18n('name'), perm : self.i18n('perms'), date : self.i18n('modify'), size : self.i18n('size'), kind : self.i18n('kind'), modestr : self.i18n('mode'), modeoct : self.i18n('mode'), modeboth : self.i18n('mode') }, self.options.uiOptions.cwd.listView.columnsCustomName); /** * Gets the column name of cwd list view * * @param String key The key * @return String The column name. */ self.getColumnName = function(key) { var res = columnNames[key] || self.i18n(key); return typeof res === 'function'? res() : res; }; /** * Interface direction * * @type String * @default "ltr" **/ self.direction = i18n.direction; /** * Date/time format * * @type String * @default "m.d.Y" **/ self.dateFormat = self.options.dateFormat || i18n.dateFormat; /** * Date format like "Yesterday 10:20:12" * * @type String * @default "{day} {time}" **/ self.fancyFormat = self.options.fancyDateFormat || i18n.fancyDateFormat; /** * Date format for if upload file has not original unique name * e.g. Clipboard image data, Image data taken with iOS * * @type String * @default "ymd-His" **/ self.nonameDateFormat = (self.options.nonameDateFormat || i18n.nonameDateFormat).replace(/[\/\\]/g, '_'); /** * Css classes * * @type String **/ self.cssClass = 'ui-helper-reset ui-helper-clearfix ui-widget ui-widget-content ui-corner-all elfinder elfinder-' +(self.direction == 'rtl' ? 'rtl' : 'ltr') +(self.UA.Touch? (' elfinder-touch' + (self.options.resizable ? ' touch-punch' : '')) : '') +(self.UA.Mobile? ' elfinder-mobile' : '') +(self.UA.iOS? ' elfinder-ios' : '') +' '+self.options.cssClass; // prepare node node.addClass(self.cssClass) .on(mousedown, function() { !enabled && self.enable(); }); // draggable closure (function() { var ltr, wzRect, wzBottom, wzBottom2, nodeStyle, keyEvt = keydown + 'draggable' + ' keyup.' + namespace + 'draggable'; /** * Base draggable options * * @type Object **/ self.draggable = { appendTo : node, addClasses : false, distance : 4, revert : true, refreshPositions : false, cursor : 'crosshair', cursorAt : {left : 50, top : 47}, scroll : false, start : function(e, ui) { var helper = ui.helper, targets = $.grep(helper.data('files')||[], function(h) { if (h) { remember[h] = true; return true; } return false; }), locked = false, cnt, h; // fix node size nodeStyle = node.attr('style'); node.width(node.width()).height(node.height()); // set var for drag() ltr = (self.direction === 'ltr'); wzRect = self.getUI('workzone').data('rectangle'); wzBottom = wzRect.top + wzRect.height; wzBottom2 = wzBottom - self.getUI('navdock').outerHeight(true); self.draggingUiHelper = helper; cnt = targets.length; while (cnt--) { h = targets[cnt]; if (files[h].locked) { locked = true; helper.data('locked', true); break; } } !locked && self.trigger('lockfiles', {files : targets}); helper.data('autoScrTm', setInterval(function() { if (helper.data('autoScr')) { self.autoScroll[helper.data('autoScr')](helper.data('autoScrVal')); } }, 50)); }, drag : function(e, ui) { var helper = ui.helper, autoScr, autoUp, bottom; if ((autoUp = wzRect.top > e.pageY) || wzBottom2 < e.pageY) { if (wzRect.cwdEdge > e.pageX) { autoScr = (ltr? 'navbar' : 'cwd') + (autoUp? 'Up' : 'Down'); } else { autoScr = (ltr? 'cwd' : 'navbar') + (autoUp? 'Up' : 'Down'); } if (!autoUp) { if (autoScr.substr(0, 3) === 'cwd') { if (wzBottom < e.pageY) { bottom = wzBottom; } else { autoScr = null; } } else { bottom = wzBottom2; } } if (autoScr) { helper.data('autoScr', autoScr); helper.data('autoScrVal', Math.pow((autoUp? wzRect.top - e.pageY : e.pageY - bottom), 1.3)); } } if (! autoScr) { if (helper.data('autoScr')) { helper.data('refreshPositions', 1).data('autoScr', null); } } if (helper.data('refreshPositions') && $(this).elfUiWidgetInstance('draggable')) { if (helper.data('refreshPositions') > 0) { $(this).draggable('option', { refreshPositions : true, elfRefresh : true }); helper.data('refreshPositions', -1); } else { $(this).draggable('option', { refreshPositions : false, elfRefresh : false }); helper.data('refreshPositions', null); } } }, stop : function(e, ui) { var helper = ui.helper, files; $(document).off(keyEvt); $(this).elfUiWidgetInstance('draggable') && $(this).draggable('option', { refreshPositions : false }); self.draggingUiHelper = null; self.trigger('focus').trigger('dragstop'); if (! helper.data('droped')) { files = $.grep(helper.data('files')||[], function(h) { return h? true : false ;}); self.trigger('unlockfiles', {files : files}); self.trigger('selectfiles', {files : self.selected()}); } self.enable(); // restore node style node.attr('style', nodeStyle); helper.data('autoScrTm') && clearInterval(helper.data('autoScrTm')); }, helper : function(e, ui) { var element = this.id ? $(this) : $(this).parents('[id]:first'), helper = $('
          '), icon = function(f) { var mime = f.mime, i, tmb = self.tmb(f); i = '
          '; if (tmb) { i = $(i).addClass(tmb.className).css('background-image', "url('"+tmb.url+"')").get(0).outerHTML; } else if (f.icon) { i = $(i).css(self.getIconStyle(f, true)).get(0).outerHTML; } if (f.csscls) { i = '
          ' + i + '
          '; } return i; }, hashes, l, ctr; self.draggingUiHelper && self.draggingUiHelper.stop(true, true); self.trigger('dragstart', {target : element[0], originalEvent : e}, true); hashes = element.hasClass(self.res('class', 'cwdfile')) ? self.selected() : [self.navId2Hash(element.attr('id'))]; helper.append(icon(files[hashes[0]])).data('files', hashes).data('locked', false).data('droped', false).data('namespace', namespace).data('dropover', 0); if ((l = hashes.length) > 1) { helper.append(icon(files[hashes[l-1]]) + ''+l+''); } $(document).on(keyEvt, function(e){ if (self._commands.copy) { var chk = (e.shiftKey||e.ctrlKey||e.metaKey); if (ctr !== chk) { ctr = chk; if (helper.is(':visible') && helper.data('dropover') && ! helper.data('droped')) { helper.toggleClass('elfinder-drag-helper-plus', helper.data('locked')? true : ctr); self.trigger(ctr? 'unlockfiles' : 'lockfiles', {files : hashes, helper: helper}); } } } }); return helper; } }; })(); // in getFileCallback set - change default actions on double click/enter/ctrl+enter if (self.commands.getfile) { if (typeof(self.options.getFileCallback) == 'function') { self.bind('dblclick', function(e) { e.preventDefault(); self.exec('getfile').fail(function() { self.exec('open', e.data && e.data.file? [ e.data.file ]: void(0)); }); }); self.shortcut({ pattern : 'enter', description : self.i18n('cmdgetfile'), callback : function() { self.exec('getfile').fail(function() { self.exec(self.OS == 'mac' ? 'rename' : 'open'); }); } }) .shortcut({ pattern : 'ctrl+enter', description : self.i18n(self.OS == 'mac' ? 'cmdrename' : 'cmdopen'), callback : function() { self.exec(self.OS == 'mac' ? 'rename' : 'open'); } }); } else { self.options.getFileCallback = null; } } // load commands $.each(self.commands, function(name, cmd) { var proto = Object.assign({}, cmd.prototype), extendsCmd, opts; if (typeof cmd === 'function' && !self._commands[name] && (cmd.prototype.forceLoad || $.inArray(name, self.options.commands) !== -1)) { extendsCmd = cmd.prototype.extendsCmd || ''; if (extendsCmd) { if (typeof self.commands[extendsCmd] === 'function') { cmd.prototype = Object.assign({}, base, new self.commands[extendsCmd](), cmd.prototype); } else { return true; } } else { cmd.prototype = Object.assign({}, base, cmd.prototype); } self._commands[name] = new cmd(); cmd.prototype = proto; opts = self.options.commandsOptions[name] || {}; if (extendsCmd && self.options.commandsOptions[extendsCmd]) { opts = $.extend(true, {}, self.options.commandsOptions[extendsCmd], opts); } self._commands[name].setup(name, opts); // setup linked commands if (self._commands[name].linkedCmds.length) { $.each(self._commands[name].linkedCmds, function(i, n) { var lcmd = self.commands[n]; if (typeof lcmd === 'function' && !self._commands[n]) { lcmd.prototype = base; self._commands[n] = new lcmd(); self._commands[n].setup(n, self.options.commandsOptions[n]||{}); } }); } } }); /** * UI nodes * * @type Object **/ self.ui = { // container for nav panel and current folder container workzone : $('
          ').appendTo(node).elfinderworkzone(self), // contaainer for folders tree / places navbar : $('
          ').appendTo(node).elfindernavbar(self, self.options.uiOptions.navbar || {}), // container for for preview etc at below the navbar navdock : $('
          ').appendTo(node).elfindernavdock(self, self.options.uiOptions.navdock || {}), // contextmenu contextmenu : $('
          ').appendTo(node).elfindercontextmenu(self), // overlay overlay : $('
          ').appendTo(node).elfinderoverlay({ show : function() { self.disable(); }, hide : function() { prevEnabled && self.enable(); } }), // current folder container cwd : $('
          ').appendTo(node).elfindercwd(self, self.options.uiOptions.cwd || {}), // notification dialog window notify : self.dialog('', { cssClass : 'elfinder-dialog-notify' + (self.options.notifyDialog.canClose? '' : ' elfinder-titlebar-button-hide'), position : self.options.notifyDialog.position, absolute : true, resizable : false, autoOpen : false, allowMinimize : true, closeOnEscape : self.options.notifyDialog.canClose? true : false, title : ' ', width : self.options.notifyDialog.width? parseInt(self.options.notifyDialog.width) : null, minHeight : null, minimize : function() { self.ui.notify.trigger('minimize'); } }), statusbar : $('
          ').hide().appendTo(node), toast : $('
          ').appendTo(node), bottomtray : $('
          ').appendTo(node), progressbar : $('
          ').appendTo(node) }; self.trigger('uiready'); // load required ui $.each(self.options.ui || [], function(i, ui) { var name = 'elfinder'+ui, opts = self.options.uiOptions[ui] || {}; if (!self.ui[ui] && $.fn[name]) { // regist to self.ui before make instance self.ui[ui] = $('<'+(opts.tag || 'div')+'/>').appendTo(node); self.ui[ui][name](self, opts); } }); self.ui.progressbar.appendTo(self.ui.workzone); self.ui.notify.prev('.ui-dialog-titlebar').append('
          '); // update size self.resize(width, height); // make node resizable if (self.options.resizable) { node.resizable({ resize : function(e, ui) { self.resize(ui.size.width, ui.size.height); }, handles : 'se', minWidth : 300, minHeight : 200 }); if (self.UA.Touch) { node.addClass('touch-punch'); } } (function() { var navbar = self.getUI('navbar'), cwd = self.getUI('cwd').parent(); self.autoScroll = { navbarUp : function(v) { navbar.scrollTop(Math.max(0, navbar.scrollTop() - v)); }, navbarDown : function(v) { navbar.scrollTop(navbar.scrollTop() + v); }, cwdUp : function(v) { cwd.scrollTop(Math.max(0, cwd.scrollTop() - v)); }, cwdDown : function(v) { cwd.scrollTop(cwd.scrollTop() + v); } }; })(); // Swipe on the touch devices to show/hide of toolbar or navbar if (self.UA.Touch) { (function() { var lastX, lastY, nodeOffset, nodeWidth, nodeTop, navbarW, toolbarH, navbar = self.getUI('navbar'), toolbar = self.getUI('toolbar'), moveEv = 'touchmove.stopscroll', moveTm, moveUpOn = function(e) { var touches = e.originalEvent.touches || [{}], y = touches[0].pageY || null; if (!lastY || y < lastY) { e.preventDefault(); moveTm && clearTimeout(moveTm); } }, moveDownOn = function(e) { e.preventDefault(); moveTm && clearTimeout(moveTm); }, moveOff = function() { moveTm = setTimeout(function() { node.off(moveEv); }, 100); }, handleW, handleH = 50; navbar = navbar.children().length? navbar : null; toolbar = toolbar.length? toolbar : null; node.on('touchstart touchmove touchend', function(e) { if (e.type === 'touchend') { lastX = false; lastY = false; moveOff(); return; } var touches = e.originalEvent.touches || [{}], x = touches[0].pageX || null, y = touches[0].pageY || null, ltr = (self.direction === 'ltr'), navbarMode, treeWidth, swipeX, moveX, toolbarT, mode; if (x === null || y === null || (e.type === 'touchstart' && touches.length > 1)) { return; } if (e.type === 'touchstart') { nodeOffset = node.offset(); nodeWidth = node.width(); if (navbar) { lastX = false; if (navbar.is(':hidden')) { if (! handleW) { handleW = Math.max(50, nodeWidth / 10); } if ((ltr? (x - nodeOffset.left) : (nodeWidth + nodeOffset.left - x)) < handleW) { lastX = x; } } else if (! e.originalEvent._preventSwipeX) { navbarW = navbar.width(); if (ltr) { swipeX = (x < nodeOffset.left + navbarW); } else { swipeX = (x > nodeOffset.left + nodeWidth - navbarW); } if (swipeX) { handleW = Math.max(50, nodeWidth / 10); lastX = x; } else { lastX = false; } } } if (toolbar) { lastY = false; if (! e.originalEvent._preventSwipeY) { toolbarH = toolbar.height(); nodeTop = nodeOffset.top; if (y - nodeTop < (toolbar.is(':hidden')? handleH : (toolbarH + 30))) { lastY = y; node.on(moveEv, toolbar.is(':hidden')? moveDownOn: moveUpOn); } } } } else { if (navbar && lastX !== false) { navbarMode = (ltr? (lastX > x) : (lastX < x))? 'navhide' : 'navshow'; moveX = Math.abs(lastX - x); if (navbarMode === 'navhide' && moveX > navbarW * 0.6 || (moveX > (navbarMode === 'navhide'? navbarW / 3 : 45) && (navbarMode === 'navshow' || (ltr? x < nodeOffset.left + 20 : x > nodeOffset.left + nodeWidth - 20) )) ) { self.getUI('navbar').trigger(navbarMode, {handleW: handleW}); lastX = false; } } if (toolbar && lastY !== false ) { toolbarT = toolbar.offset().top; if (Math.abs(lastY - y) > Math.min(45, toolbarH / 3)) { mode = (lastY > y)? 'slideUp' : 'slideDown'; if (mode === 'slideDown' || toolbarT + 20 > y) { if (toolbar.is(mode === 'slideDown' ? ':hidden' : ':visible')) { toolbar.stop(true, true).trigger('toggle', {duration: 100, handleH: handleH}); } lastY = false; } } } } }); })(); } if (self.dragUpload) { // add event listener for HTML5 DnD upload (function() { var isin = function(e) { return (e.target.nodeName !== 'TEXTAREA' && e.target.nodeName !== 'INPUT' && $(e.target).closest('div.ui-dialog-content').length === 0); }, ent = 'native-drag-enter', disable = 'native-drag-disable', c = 'class', navdir = self.res(c, 'navdir'), droppable = self.res(c, 'droppable'), dropover = self.res(c, 'adroppable'), arrow = self.res(c, 'navarrow'), clDropActive = self.res(c, 'adroppable'), wz = self.getUI('workzone'), ltr = (self.direction === 'ltr'), clearTm = function() { autoScrTm && cancelAnimationFrame(autoScrTm); autoScrTm = null; }, wzRect, autoScrFn, autoScrTm; node.on('dragenter', function(e) { clearTm(); if (isin(e)) { e.preventDefault(); e.stopPropagation(); wzRect = wz.data('rectangle'); } }) .on('dragleave', function(e) { clearTm(); if (isin(e)) { e.preventDefault(); e.stopPropagation(); } }) .on('dragover', function(e) { var autoUp; if (isin(e)) { e.preventDefault(); e.stopPropagation(); e.originalEvent.dataTransfer.dropEffect = 'none'; if (! autoScrTm) { autoScrTm = requestAnimationFrame(function() { var wzBottom = wzRect.top + wzRect.height, wzBottom2 = wzBottom - self.getUI('navdock').outerHeight(true), fn; if ((autoUp = e.pageY < wzRect.top) || e.pageY > wzBottom2 ) { if (wzRect.cwdEdge > e.pageX) { fn = (ltr? 'navbar' : 'cwd') + (autoUp? 'Up' : 'Down'); } else { fn = (ltr? 'cwd' : 'navbar') + (autoUp? 'Up' : 'Down'); } if (!autoUp) { if (fn.substr(0, 3) === 'cwd') { if (wzBottom < e.pageY) { wzBottom2 = wzBottom; } else { fn = ''; } } } fn && self.autoScroll[fn](Math.pow((autoUp? wzRect.top - e.pageY : e.pageY - wzBottom2), 1.3)); } autoScrTm = null; }); } } else { clearTm(); } }) .on('drop', function(e) { clearTm(); if (isin(e)) { e.stopPropagation(); e.preventDefault(); } }); node.on('dragenter', '.native-droppable', function(e){ if (e.originalEvent.dataTransfer) { var $elm = $(e.currentTarget), id = e.currentTarget.id || null, cwd = null, elfFrom; if (!id) { // target is cwd cwd = self.cwd(); $elm.data(disable, false); try { $.each(e.originalEvent.dataTransfer.types, function(i, v){ if (v.substr(0, 13) === 'elfinderfrom:') { elfFrom = v.substr(13).toLowerCase(); } }); } catch(e) {} } if (!cwd || (cwd.write && (!elfFrom || elfFrom !== (window.location.href + cwd.hash).toLowerCase()))) { e.preventDefault(); e.stopPropagation(); $elm.data(ent, true); $elm.addClass(clDropActive); } else { $elm.data(disable, true); } } }) .on('dragleave', '.native-droppable', function(e){ if (e.originalEvent.dataTransfer) { var $elm = $(e.currentTarget); e.preventDefault(); e.stopPropagation(); if ($elm.data(ent)) { $elm.data(ent, false); } else { $elm.removeClass(clDropActive); } } }) .on('dragover', '.native-droppable', function(e){ if (e.originalEvent.dataTransfer) { var $elm = $(e.currentTarget); e.preventDefault(); e.stopPropagation(); e.originalEvent.dataTransfer.dropEffect = $elm.data(disable)? 'none' : 'copy'; $elm.data(ent, false); } }) .on('drop', '.native-droppable', function(e){ if (e.originalEvent && e.originalEvent.dataTransfer) { var $elm = $(e.currentTarget), id; e.preventDefault(); e.stopPropagation(); $elm.removeClass(clDropActive); if (e.currentTarget.id) { id = $elm.hasClass(navdir)? self.navId2Hash(e.currentTarget.id) : self.cwdId2Hash(e.currentTarget.id); } else { id = self.cwd().hash; } e.originalEvent._target = id; self.exec('upload', {dropEvt: e.originalEvent, target: id}, void 0, id); } }); })(); } // trigger event cssloaded if cssAutoLoad disabled if (self.cssloaded === false) { self.cssloaded = true; self.trigger('cssloaded'); } // calculate elFinder node z-index self.zIndexCalc(); // send initial request and start to pray >_< self.trigger('init') .request({ data : {cmd : 'open', target : self.startDir(), init : 1, tree : 1}, preventDone : true, notify : {type : 'open', cnt : 1, hideCnt : true}, freeze : true }) .fail(function() { self.trigger('fail').disable().lastDir(''); listeners = {}; shortcuts = {}; $(document).add(node).off('.'+namespace); self.trigger = function() { }; }) .done(function(data) { var trashDisable = function(th) { var src = self.file(self.trashes[th]), d = self.options.debug, error; if (src && src.volumeid) { delete self.volOptions[src.volumeid].trashHash; } self.trashes[th] = false; self.debug('backend-error', 'Trash hash "'+th+'" was not found or not writable.'); }, toChkTh = {}; // regist rawStringDecoder if (self.options.rawStringDecoder) { self.registRawStringDecoder(self.options.rawStringDecoder); } // re-calculate elFinder node z-index self.zIndexCalc(); self.load().debug('api', self.api); // update ui's size after init node.trigger('resize'); // initial open open(data); self.trigger('open', data, false); self.trigger('opendone'); if (inFrame && self.options.enableAlways) { $(window).trigger('focus'); } // check self.trashes $.each(self.trashes, function(th) { var dir = self.file(th), src; if (! dir) { toChkTh[th] = true; } else if (dir.mime !== 'directory' || ! dir.write) { trashDisable(th); } }); if (Object.keys(toChkTh).length) { self.request({ data : {cmd : 'info', targets : Object.keys(toChkTh)}, preventDefault : true }).done(function(data) { if (data && data.files) { $.each(data.files, function(i, dir) { if (dir.mime === 'directory' && dir.write) { delete toChkTh[dir.hash]; } }); } }).always(function() { $.each(toChkTh, trashDisable); }); } // to enable / disable self[self.options.enableAlways? 'enable' : 'disable'](); }); // self.timeEnd('load'); // End of bootUp() }; // call bootCallback function with elFinder instance, extraObject - { dfrdsBeforeBootup: dfrdsBeforeBootup } if (bootCallback && typeof bootCallback === 'function') { self.bootCallback = bootCallback; bootCallback.call(node.get(0), self, { dfrdsBeforeBootup: dfrdsBeforeBootup }); } // call dfrdsBeforeBootup functions then boot up elFinder $.when.apply(null, dfrdsBeforeBootup).done(function() { bootUp(); }).fail(function(error) { self.error(error); }); }; //register elFinder to global scope if (typeof toGlobal === 'undefined' || toGlobal) { window.elFinder = elFinder; } /** * Prototype * * @type Object */ elFinder.prototype = { uniqueid : 0, res : function(type, id) { return this.resources[type] && this.resources[type][id]; }, /** * User os. Required to bind native shortcuts for open/rename * * @type String **/ OS : navigator.userAgent.indexOf('Mac') !== -1 ? 'mac' : navigator.userAgent.indexOf('Win') !== -1 ? 'win' : 'other', /** * User browser UA. * jQuery.browser: version deprecated: 1.3, removed: 1.9 * * @type Object **/ UA : (function(){ var self = this, webkit = !document.unqueID && !window.opera && !window.sidebar && 'localStorage' in window && 'WebkitAppearance' in document.documentElement.style, chrome = webkit && window.chrome, /*setRotated = function() { var a = ((screen && screen.orientation && screen.orientation.angle) || window.orientation || 0) + 0; if (a === -90) { a = 270; } UA.Angle = a; UA.Rotated = a % 180 === 0? false : true; },*/ UA = { // Browser IE <= IE 6 ltIE6 : typeof window.addEventListener == "undefined" && typeof document.documentElement.style.maxHeight == "undefined", // Browser IE <= IE 7 ltIE7 : typeof window.addEventListener == "undefined" && typeof document.querySelectorAll == "undefined", // Browser IE <= IE 8 ltIE8 : typeof window.addEventListener == "undefined" && typeof document.getElementsByClassName == "undefined", // Browser IE <= IE 9 ltIE9 : document.uniqueID && document.documentMode <= 9, // Browser IE <= IE 10 ltIE10 : document.uniqueID && document.documentMode <= 10, // Browser IE >= IE 11 gtIE11 : document.uniqueID && document.documentMode >= 11, IE : document.uniqueID, Firefox : window.sidebar, Opera : window.opera, Webkit : webkit, Chrome : chrome, Edge : (chrome && window.msCredentials)? true : false, Safari : webkit && !window.chrome, Mobile : typeof window.orientation != "undefined", Touch : typeof window.ontouchstart != "undefined", iOS : navigator.platform.match(/^iP(?:[ao]d|hone)/), Mac : navigator.platform.match(/^Mac/), Fullscreen : (typeof (document.exitFullscreen || document.webkitExitFullscreen || document.mozCancelFullScreen || document.msExitFullscreen) !== 'undefined'), Angle : 0, Rotated : false, CSS : (function() { var aStyle = document.createElement('a').style, pStyle = document.createElement('p').style, css; css = 'position:sticky;position:-webkit-sticky;'; css += 'width:-webkit-max-content;width:-moz-max-content;width:-ms-max-content;width:max-content;'; aStyle.cssText = css; return { positionSticky : aStyle.position.indexOf('sticky')!==-1, widthMaxContent : aStyle.width.indexOf('max-content')!==-1, flex : typeof pStyle.flex !== 'undefined' }; })() }; return UA; })(), /** * Is cookie enabled * * @type Boolean */ cookieEnabled : window.navigator.cookieEnabled, /** * Has RequireJS? * * @type Boolean */ hasRequire : (typeof define === 'function' && define.amd), /** * Current request command * * @type String */ currentReqCmd : '', /** * Current keyboard state * * @type Object */ keyState : {}, /** * Internationalization object * * @type Object */ i18 : { en : { translator : '', language : 'English', direction : 'ltr', dateFormat : 'd.m.Y H:i', fancyDateFormat : '$1 H:i', nonameDateFormat : 'ymd-His', messages : {} }, months : ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'], monthsShort : ['msJan', 'msFeb', 'msMar', 'msApr', 'msMay', 'msJun', 'msJul', 'msAug', 'msSep', 'msOct', 'msNov', 'msDec'], days : ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'], daysShort : ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'] }, /** * File mimetype to kind mapping * * @type Object */ kinds : { 'unknown' : 'Unknown', 'directory' : 'Folder', 'group' : 'Selects', 'symlink' : 'Alias', 'symlink-broken' : 'AliasBroken', 'application/x-empty' : 'TextPlain', 'application/postscript' : 'Postscript', 'application/vnd.ms-office' : 'MsOffice', 'application/msword' : 'MsWord', 'application/vnd.ms-word' : 'MsWord', 'application/vnd.openxmlformats-officedocument.wordprocessingml.document' : 'MsWord', 'application/vnd.ms-word.document.macroEnabled.12' : 'MsWord', 'application/vnd.openxmlformats-officedocument.wordprocessingml.template' : 'MsWord', 'application/vnd.ms-word.template.macroEnabled.12' : 'MsWord', 'application/vnd.ms-excel' : 'MsExcel', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' : 'MsExcel', 'application/vnd.ms-excel.sheet.macroEnabled.12' : 'MsExcel', 'application/vnd.openxmlformats-officedocument.spreadsheetml.template' : 'MsExcel', 'application/vnd.ms-excel.template.macroEnabled.12' : 'MsExcel', 'application/vnd.ms-excel.sheet.binary.macroEnabled.12' : 'MsExcel', 'application/vnd.ms-excel.addin.macroEnabled.12' : 'MsExcel', 'application/vnd.ms-powerpoint' : 'MsPP', 'application/vnd.openxmlformats-officedocument.presentationml.presentation' : 'MsPP', 'application/vnd.ms-powerpoint.presentation.macroEnabled.12' : 'MsPP', 'application/vnd.openxmlformats-officedocument.presentationml.slideshow' : 'MsPP', 'application/vnd.ms-powerpoint.slideshow.macroEnabled.12' : 'MsPP', 'application/vnd.openxmlformats-officedocument.presentationml.template' : 'MsPP', 'application/vnd.ms-powerpoint.template.macroEnabled.12' : 'MsPP', 'application/vnd.ms-powerpoint.addin.macroEnabled.12' : 'MsPP', 'application/vnd.openxmlformats-officedocument.presentationml.slide' : 'MsPP', 'application/vnd.ms-powerpoint.slide.macroEnabled.12' : 'MsPP', 'application/pdf' : 'PDF', 'application/xml' : 'XML', 'application/vnd.oasis.opendocument.text' : 'OO', 'application/vnd.oasis.opendocument.text-template' : 'OO', 'application/vnd.oasis.opendocument.text-web' : 'OO', 'application/vnd.oasis.opendocument.text-master' : 'OO', 'application/vnd.oasis.opendocument.graphics' : 'OO', 'application/vnd.oasis.opendocument.graphics-template' : 'OO', 'application/vnd.oasis.opendocument.presentation' : 'OO', 'application/vnd.oasis.opendocument.presentation-template' : 'OO', 'application/vnd.oasis.opendocument.spreadsheet' : 'OO', 'application/vnd.oasis.opendocument.spreadsheet-template' : 'OO', 'application/vnd.oasis.opendocument.chart' : 'OO', 'application/vnd.oasis.opendocument.formula' : 'OO', 'application/vnd.oasis.opendocument.database' : 'OO', 'application/vnd.oasis.opendocument.image' : 'OO', 'application/vnd.openofficeorg.extension' : 'OO', 'application/x-shockwave-flash' : 'AppFlash', 'application/flash-video' : 'Flash video', 'application/x-bittorrent' : 'Torrent', 'application/javascript' : 'JS', 'application/rtf' : 'RTF', 'application/rtfd' : 'RTF', 'application/x-font-ttf' : 'TTF', 'application/x-font-otf' : 'OTF', 'application/x-rpm' : 'RPM', 'application/x-web-config' : 'TextPlain', 'application/xhtml+xml' : 'HTML', 'application/docbook+xml' : 'DOCBOOK', 'application/x-awk' : 'AWK', 'application/x-gzip' : 'GZIP', 'application/x-bzip2' : 'BZIP', 'application/x-xz' : 'XZ', 'application/zip' : 'ZIP', 'application/x-zip' : 'ZIP', 'application/x-rar' : 'RAR', 'application/x-tar' : 'TAR', 'application/x-7z-compressed' : '7z', 'application/x-jar' : 'JAR', 'text/plain' : 'TextPlain', 'text/x-php' : 'PHP', 'text/html' : 'HTML', 'text/javascript' : 'JS', 'text/css' : 'CSS', 'text/rtf' : 'RTF', 'text/rtfd' : 'RTF', 'text/x-c' : 'C', 'text/x-csrc' : 'C', 'text/x-chdr' : 'CHeader', 'text/x-c++' : 'CPP', 'text/x-c++src' : 'CPP', 'text/x-c++hdr' : 'CPPHeader', 'text/x-shellscript' : 'Shell', 'application/x-csh' : 'Shell', 'text/x-python' : 'Python', 'text/x-java' : 'Java', 'text/x-java-source' : 'Java', 'text/x-ruby' : 'Ruby', 'text/x-perl' : 'Perl', 'text/x-sql' : 'SQL', 'text/xml' : 'XML', 'text/x-comma-separated-values' : 'CSV', 'text/x-markdown' : 'Markdown', 'image/x-ms-bmp' : 'BMP', 'image/jpeg' : 'JPEG', 'image/gif' : 'GIF', 'image/png' : 'PNG', 'image/tiff' : 'TIFF', 'image/x-targa' : 'TGA', 'image/vnd.adobe.photoshop' : 'PSD', 'image/xbm' : 'XBITMAP', 'image/pxm' : 'PXM', 'image/webp' : 'WEBP', 'application/vnd.ms-fontobject' : 'EOT', 'font/sfnt' : 'SFNT', 'application/font-sfnt' : 'SFNT', 'font/ttf' : 'TTF', 'font/opentype' : 'OTF', 'font/otf' : 'OTF', 'application/x-font-opentype' : 'OTF', 'font/woff' : 'WOFF', 'application/font-woff' : 'WOFF', 'font/woff2' : 'WOFF2', 'application/font-woff2' : 'WOFF2', 'audio/mpeg' : 'AudioMPEG', 'audio/midi' : 'AudioMIDI', 'audio/ogg' : 'AudioOGG', 'audio/mp4' : 'AudioMPEG4', 'audio/x-m4a' : 'AudioMPEG4', 'audio/wav' : 'AudioWAV', 'audio/x-mp3-playlist' : 'AudioPlaylist', 'video/x-dv' : 'VideoDV', 'video/mp4' : 'VideoMPEG4', 'video/mpeg' : 'VideoMPEG', 'video/x-msvideo' : 'VideoAVI', 'video/quicktime' : 'VideoMOV', 'video/x-ms-wmv' : 'VideoWM', 'video/x-flv' : 'VideoFlash', 'video/x-matroska' : 'VideoMKV', 'video/ogg' : 'VideoOGG' }, /** * File mimetype to file extention mapping * * @type Object * @see elFinder.mimetypes.js */ mimeTypes : {}, /** * Ajax request data validation rules * * @type Object */ rules : { defaults : function(data) { if (!data || (data.added && !Array.isArray(data.added)) || (data.removed && !Array.isArray(data.removed)) || (data.changed && !Array.isArray(data.changed))) { return false; } return true; }, open : function(data) { return data && data.cwd && data.files && $.isPlainObject(data.cwd) && Array.isArray(data.files); }, tree : function(data) { return data && data.tree && Array.isArray(data.tree); }, parents : function(data) { return data && data.tree && Array.isArray(data.tree); }, tmb : function(data) { return data && data.images && ($.isPlainObject(data.images) || Array.isArray(data.images)); }, upload : function(data) { return data && ($.isPlainObject(data.added) || Array.isArray(data.added));}, search : function(data) { return data && data.files && Array.isArray(data.files); } }, /** * Commands costructors * * @type Object */ commands : {}, /** * Commands to add the item (space delimited) * * @type String */ cmdsToAdd : 'archive duplicate extract mkdir mkfile paste rm upload', parseUploadData : function(text) { var self = this, data; if (!text.trim()) { return {error : ['errResponse', 'errDataEmpty']}; } try { data = JSON.parse(text); } catch (e) { return {error : ['errResponse', 'errDataNotJSON']}; } data = self.normalize(data); if (!self.validResponse('upload', data)) { return {error : (data.norError || ['errResponse'])}; } data.removed = $.merge((data.removed || []), $.map(data.added || [], function(f) { return self.file(f.hash)? f.hash : null; })); return data; }, iframeCnt : 0, uploads : { // xhr muiti uploading flag xhrUploading: false, // Timer of request fail to sync failSyncTm: null, // current chunkfail requesting chunk chunkfailReq: {}, // check file/dir exists checkExists: function(files, target, fm, isDir) { var dfrd = $.Deferred(), names, renames = [], hashes = {}, chkFiles = [], cancel = function() { var i = files.length; while (--i > -1) { files[i]._remove = true; } }, resolve = function() { dfrd.resolve(renames, hashes); }, check = function() { var existed = [], exists = [], i, c, pathStr = target !== fm.cwd().hash? fm.path(target, true) + fm.option('separator', target) : '', confirm = function(ndx) { var last = ndx == exists.length-1, opts = { cssClass : 'elfinder-confirm-upload', title : fm.i18n('cmdupload'), text : ['errExists', pathStr + exists[ndx].name, 'confirmRepl'], all : !last, accept : { label : 'btnYes', callback : function(all) { !last && !all ? confirm(++ndx) : resolve(); } }, reject : { label : 'btnNo', callback : function(all) { var i; if (all) { i = exists.length; while (ndx < i--) { files[exists[i].i]._remove = true; } } else { files[exists[ndx].i]._remove = true; } !last && !all ? confirm(++ndx) : resolve(); } }, cancel : { label : 'btnCancel', callback : function() { cancel(); resolve(); } }, buttons : [ { label : 'btnBackup', cssClass : 'elfinder-confirm-btn-backup', callback : function(all) { var i; if (all) { i = exists.length; while (ndx < i--) { renames.push(exists[i].name); } } else { renames.push(exists[ndx].name); } !last && !all ? confirm(++ndx) : resolve(); } } ] }; if (!isDir) { opts.buttons.push({ label : 'btnRename' + (last? '' : 'All'), cssClass : 'elfinder-confirm-btn-rename', callback : function() { renames = null; resolve(); } }); } if (fm.iframeCnt > 0) { delete opts.reject; } fm.confirm(opts); }; if (! fm.file(target).read) { // for dropbox type resolve(); return; } names = $.map(files, function(file, i) { return file.name && (!fm.UA.iOS || file.name !== 'image.jpg')? {i: i, name: file.name} : null ;}); fm.request({ data : {cmd : 'ls', target : target, intersect : $.map(names, function(item) { return item.name;})}, notify : {type : 'preupload', cnt : 1, hideCnt : true}, preventDefault : true }) .done(function(data) { var existedArr, cwdItems; if (data) { if (data.error) { cancel(); } else { if (fm.options.overwriteUploadConfirm && fm.option('uploadOverwrite', target)) { if (data.list) { if (Array.isArray(data.list)) { existed = data.list || []; } else { existedArr = []; existed = $.map(data.list, function(n) { if (typeof n === 'string') { return n; } else { // support to >=2.1.11 plugin Normalizer, Sanitizer existedArr = existedArr.concat(n); return false; } }); if (existedArr.length) { existed = existed.concat(existedArr); } hashes = data.list; } exists = $.grep(names, function(name){ return $.inArray(name.name, existed) !== -1 ? true : false ; }); if (exists.length && existed.length && target == fm.cwd().hash) { cwdItems = $.map(fm.files(target), function(file) { return file.name; } ); if ($.grep(existed, function(n) { return $.inArray(n, cwdItems) === -1? true : false; }).length){ fm.sync(); } } } } } } if (exists.length > 0) { confirm(0); } else { resolve(); } }) .fail(function(error) { cancel(); resolve(); error && fm.error(error); }); }; if (fm.api >= 2.1 && typeof files[0] == 'object') { check(); } else { resolve(); } return dfrd; }, // check droped contents checkFile : function(data, fm, target) { if (!!data.checked || data.type == 'files') { return data.files; } else if (data.type == 'data') { var dfrd = $.Deferred(), scanDfd = $.Deferred(), files = [], paths = [], dirctorys = [], processing = 0, items, mkdirs = [], cancel = false, toArray = function(list) { return Array.prototype.slice.call(list || [], 0); }, doScan = function(items) { var entry, readEntries, excludes = fm.options.folderUploadExclude[fm.OS] || null, length = items.length, check = function() { if (--processing < 1 && scanDfd.state() === 'pending') { scanDfd.resolve(); } }, pushItem = function(file) { if (! excludes || ! file.name.match(excludes)) { paths.push(entry.fullPath || ''); files.push(file); } check(); }, readEntries = function(dirReader) { var entries = [], read = function() { dirReader.readEntries(function(results) { if (cancel || !results.length) { for (var i = 0; i < entries.length; i++) { if (cancel) { scanDfd.reject(); break; } doScan([entries[i]]); } check(); } else { entries = entries.concat(toArray(results)); read(); } }, check); }; read(); }; processing++; for (var i = 0; i < length; i++) { if (cancel) { scanDfd.reject(); break; } entry = items[i]; if (entry) { if (entry instanceof File) { pushItem(entry); } else if (entry.isFile) { processing++; entry.file(pushItem, check); } else if (entry.isDirectory) { if (fm.api >= 2.1) { processing++; mkdirs.push(entry.fullPath); readEntries(entry.createReader()); // Start reading dirs. } } } } check(); return scanDfd; }, hasDirs; items = $.map(data.files.items, function(item){ if (item.kind === 'file') { return (item.getAsEntry? item.getAsEntry() : item.webkitGetAsEntry()) || item.getAsFile(); } else { return null; } }); $.each(items, function(i, item) { if (item.isDirectory) { hasDirs = true; return false; } }); if (items.length > 0) { fm.uploads.checkExists(items, target, fm, hasDirs).done(function(renames, hashes){ var dfds = []; if (fm.options.overwriteUploadConfirm && fm.option('uploadOverwrite', target)) { if (renames === null) { data.overwrite = 0; renames = []; } items = $.grep(items, function(item){ var i, bak, hash, dfd, hi; if (item.isDirectory && renames.length) { i = $.inArray(item.name, renames); if (i !== -1) { renames.splice(i, 1); bak = fm.uniqueName(item.name + fm.options.backupSuffix , null, ''); $.each(hashes, function(h, name) { if (item.name == name) { hash = h; return false; } }); if (! hash) { hash = fm.fileByName(item.name, target).hash; } fm.lockfiles({files : [hash]}); dfd = fm.request({ data : {cmd : 'rename', target : hash, name : bak}, notify : {type : 'rename', cnt : 1} }) .fail(function() { item._remove = true; fm.sync(); }) .always(function() { fm.unlockfiles({files : [hash]}); }); dfds.push(dfd); } } return !item._remove? true : false; }); } $.when.apply($, dfds).done(function(){ var notifyto, msg, id = +new Date(); if (items.length > 0) { msg = fm.escape(items[0].name); if (items.length > 1) { msg += ' ... ' + items.length + fm.i18n('items'); } notifyto = setTimeout(function() { fm.notify({ type : 'readdir', id : id, cnt : 1, hideCnt: true, msg : fm.i18n('ntfreaddir') + ' (' + msg + ')', cancel: function() { cancel = true; } }); }, fm.options.notifyDelay); doScan(items).done(function() { notifyto && clearTimeout(notifyto); fm.notify({type : 'readdir', id: id, cnt : -1}); if (cancel) { dfrd.reject(); } else { dfrd.resolve([files, paths, renames, hashes, mkdirs]); } }).fail(function() { dfrd.reject(); }); } else { dfrd.reject(); } }); }); return dfrd.promise(); } else { return dfrd.reject(); } } else { var ret = []; var check = []; var str = data.files[0]; if (data.type == 'html') { var tmp = $("").append($.parseHTML(str.replace(/ src=/ig, ' _elfsrc='))), atag; $('img[_elfsrc]', tmp).each(function(){ var url, purl, self = $(this), pa = self.closest('a'); if (pa && pa.attr('href') && pa.attr('href').match(/\.(?:jpe?g|gif|bmp|png)/i)) { purl = pa.attr('href'); } url = self.attr('_elfsrc'); if (url) { if (purl) { $.inArray(purl, ret) == -1 && ret.push(purl); $.inArray(url, check) == -1 && check.push(url); } else { $.inArray(url, ret) == -1 && ret.push(url); } } // Probably it's clipboard data if (ret.length === 1 && ret[0].match(/^data:image\/png/)) { data.clipdata = true; } }); atag = $('a[href]', tmp); atag.each(function(){ var text, loc, parseUrl = function(url) { var a = document.createElement('a'); a.href = url; return a; }; if (text = $(this).text()) { loc = parseUrl($(this).attr('href')); if (loc.href && loc.href.match(/^(?:ht|f)tp/i) && (atag.length === 1 || ! loc.pathname.match(/(?:\.html?|\/[^\/.]*)$/i) || text.trim().match(/\.[a-z0-9-]{1,10}$/i))) { if ($.inArray(loc.href, ret) == -1 && $.inArray(loc.href, check) == -1) ret.push(loc.href); } } }); } else { var regex, m, url; regex = /((?:ht|f)tps?:\/\/[-_.!~*\'()a-z0-9;/?:\@&=+\$,%#\*\[\]]+)/ig; while (m = regex.exec(str)) { url = m[1].replace(/&/g, '&'); if ($.inArray(url, ret) == -1) ret.push(url); } } return ret; } }, // upload transport using XMLHttpRequest xhr : function(data, fm) { var self = fm ? fm : this, node = self.getUI(), xhr = new XMLHttpRequest(), notifyto = null, notifyto1 = null, notifyto2 = null, dataChecked = data.checked, isDataType = (data.isDataType || data.type == 'data'), target = (data.target || self.cwd().hash), dropEvt = (data.dropEvt || null), extraData = data.extraData || null, chunkEnable = (self.option('uploadMaxConn', target) != -1), multiMax = Math.min(5, Math.max(1, self.option('uploadMaxConn', target))), retryWait = 10000, // 10 sec retryMax = 30, // 10 sec * 30 = 300 secs (Max 5 mins) retry = 0, getFile = function(files) { var dfd = $.Deferred(), file; if (files.promise) { files.always(function(f) { dfd.resolve(Array.isArray(f) && f.length? (isDataType? f[0][0] : f[0]) : {}); }); } else { dfd.resolve(files.length? (isDataType? files[0][0] : files[0]) : {}); } return dfd; }, dfrd = $.Deferred() .fail(function(err) { var error = self.parseError(err), userAbort; if (error === 'userabort') { userAbort = true; error = void 0; } if (files && (self.uploads.xhrUploading || userAbort)) { // send request om fail getFile(files).done(function(file) { if (!userAbort) { triggerError(error, file); } if (! file._cid) { // send sync request self.uploads.failSyncTm && clearTimeout(self.uploads.failSyncTm); self.uploads.failSyncTm = setTimeout(function() { self.sync(target); }, 1000); } else if (! self.uploads.chunkfailReq[file._cid]) { // send chunkfail request self.uploads.chunkfailReq[file._cid] = true; setTimeout(function() { fm.request({ data : { cmd: 'upload', target: target, chunk: file._chunk, cid: file._cid, upload: ['chunkfail'], mimes: 'chunkfail' }, options : { type: 'post', url: self.uploadURL }, preventDefault: true }).always(function() { delete self.uploads.chunkfailReq[file._chunk]; }); }, 1000); } }); } else { triggerError(error); } !userAbort && self.sync(); self.uploads.xhrUploading = false; files = null; }) .done(function(data) { self.uploads.xhrUploading = false; files = null; if (data) { self.currentReqCmd = 'upload'; data.warning && triggerError(data.warning); self.updateCache(data); data.removed && data.removed.length && self.remove(data); data.added && data.added.length && self.add(data); data.changed && data.changed.length && self.change(data); self.trigger('upload', data, false); self.trigger('uploaddone'); if (data.toasts && Array.isArray(data.toasts)) { $.each(data.toasts, function() { this.msg && self.toast(this); }); } data.sync && self.sync(); if (data.debug) { self.responseDebug(data); fm.debug('backend-debug', data); } } }) .always(function() { self.abortXHR(xhr); // unregist fnAbort function node.off('uploadabort', fnAbort); $(window).off('unload', fnAbort); notifyto && clearTimeout(notifyto); notifyto1 && clearTimeout(notifyto1); notifyto2 && clearTimeout(notifyto2); dataChecked && !data.multiupload && checkNotify() && self.notify({type : 'upload', cnt : -cnt, progress : 0, size : 0}); notifyto1 && uploadedNtf && self.notify({type : 'chunkmerge', cnt : -cnt}); chunkMerge && notifyElm.children('.elfinder-notify-chunkmerge').length && self.notify({type : 'chunkmerge', cnt : -1}); }), formData = new FormData(), files = data.input ? data.input.files : self.uploads.checkFile(data, self, target), cnt = data.checked? (isDataType? files[0].length : files.length) : files.length, isChunked = false, loaded = 0, prev = 0, filesize = 0, notify = false, notifyElm = self.ui.notify, cancelBtn = true, uploadedNtf = false, abort = false, checkNotify = function() { if (!notify && (ntfUpload = notifyElm.children('.elfinder-notify-upload')).length) { notify = true; } return notify; }, fnAbort = function(e, error) { abort = true; self.abortXHR(xhr, { quiet: true, abort: true }); dfrd.reject(error); if (checkNotify()) { self.notify({type : 'upload', cnt : ntfUpload.data('cnt') * -1, progress : 0, size : 0}); } }, cancelToggle = function(show, hasChunk) { ntfUpload.children('.elfinder-notify-cancel')[show? 'show':'hide'](); cancelBtn = show; }, startNotify = function(size) { if (!size) size = filesize; return setTimeout(function() { notify = true; self.notify({type : 'upload', cnt : cnt, progress : loaded - prev, size : size, cancel: function() { node.trigger('uploadabort', 'userabort'); } }); ntfUpload = notifyElm.children('.elfinder-notify-upload'); prev = loaded; if (data.multiupload) { cancelBtn && cancelToggle(true); } else { cancelToggle(cancelBtn && loaded < size); } }, self.options.notifyDelay); }, doRetry = function() { if (retry++ <= retryMax) { if (checkNotify() && prev) { self.notify({type : 'upload', cnt : 0, progress : 0, size : prev}); } self.abortXHR(xhr, { quiet: true }); prev = loaded = 0; setTimeout(function() { var reqId; if (! abort) { xhr.open('POST', self.uploadURL, true); if (self.api >= 2.1029) { reqId = (+ new Date()).toString(16) + Math.floor(1000 * Math.random()).toString(16); (typeof formData['delete'] === 'function') && formData['delete']('reqid'); formData.append('reqid', reqId); xhr._requestId = reqId; } xhr.send(formData); } }, retryWait); } else { node.trigger('uploadabort', ['errAbort', 'errTimeout']); } }, progress = function() { var node; if (notify) { dfrd.notifyWith(ntfUpload, [{ cnt: ntfUpload.data('cnt'), progress: ntfUpload.data('progress'), total: ntfUpload.data('total') }]); } }, triggerError = function(err, file, unite) { err && self.trigger('xhruploadfail', { error: err, file: file }); if (unite) { if (err) { if (errCnt < self.options.maxErrorDialogs) { if (Array.isArray(err)) { errors = errors.concat(err); } else { errors.push(err); } } errCnt++; } } else { if (err) { self.error(err); } else { if (errors.length) { if (errCnt >= self.options.maxErrorDialogs) { errors = errors.concat('moreErrors', errCnt - self.options.maxErrorDialogs); } self.error(errors); } errors = []; errCnt = 0; } } }, errors = [], errCnt = 0, renames = (data.renames || null), hashes = (data.hashes || null), chunkMerge = false, ntfUpload = $(); // regist fnAbort function node.one('uploadabort', fnAbort); $(window).one('unload.' + fm.namespace, fnAbort); !chunkMerge && (prev = loaded); if (!isDataType && !cnt) { return dfrd.reject(['errUploadNoFiles']); } xhr.addEventListener('error', function() { if (xhr.status == 0) { if (abort) { dfrd.reject(); } else { // ff bug while send zero sized file // for safari - send directory if (!isDataType && data.files && $.grep(data.files, function(f){return ! f.type && f.size === (self.UA.Safari? 1802 : 0)? true : false;}).length) { dfrd.reject(['errAbort', 'errFolderUpload']); } else if (data.input && $.grep(data.input.files, function(f){return ! f.type && f.size === (self.UA.Safari? 1802 : 0)? true : false;}).length) { dfrd.reject(['errUploadNoFiles']); } else { doRetry(); } } } else { node.trigger('uploadabort', 'errConnect'); } }, false); xhr.addEventListener('load', function(e) { var status = xhr.status, res, curr = 0, error = '', errData, errObj; self.setCustomHeaderByXhr(xhr); if (status >= 400) { if (status > 500) { error = 'errResponse'; } else { error = ['errResponse', 'errServerError']; } } else { if (!xhr.responseText) { error = ['errResponse', 'errDataEmpty']; } } if (error) { node.trigger('uploadabort'); getFile(files || {}).done(function(file) { return dfrd.reject(file._cid? null : error); }); } loaded = filesize; if (checkNotify() && (curr = loaded - prev)) { self.notify({type : 'upload', cnt : 0, progress : curr, size : 0}); progress(); } res = self.parseUploadData(xhr.responseText); // chunked upload commit if (res._chunkmerged) { formData = new FormData(); var _file = [{_chunkmerged: res._chunkmerged, _name: res._name, _mtime: res._mtime}]; chunkMerge = true; node.off('uploadabort', fnAbort); notifyto2 = setTimeout(function() { self.notify({type : 'chunkmerge', cnt : 1}); }, self.options.notifyDelay); isDataType? send(_file, files[1]) : send(_file); return; } res._multiupload = data.multiupload? true : false; if (res.error) { errData = { cmd: 'upload', err: res, xhr: xhr, rc: xhr.status }; self.trigger('uploadfail', res); // trigger "requestError" event self.trigger('requestError', errData); if (errData._getEvent && errData._getEvent().isDefaultPrevented()) { res.error = ''; } else if (self.handleCsrfReload(xhr, res)) { res.error = ''; } if (res._chunkfailure || res._multiupload) { abort = true; self.uploads.xhrUploading = false; notifyto && clearTimeout(notifyto); if (ntfUpload.length) { self.notify({type : 'upload', cnt : -cnt, progress : 0, size : 0}); dfrd.reject(res); } else { // for multi connection dfrd.reject(); } } else { dfrd.reject(res); } } else { dfrd.resolve(res); } }, false); xhr.upload.addEventListener('loadstart', function(e) { if (!chunkMerge && e.lengthComputable) { loaded = e.loaded; retry && (loaded = 0); filesize = e.total; if (!loaded) { loaded = parseInt(filesize * 0.05); } if (checkNotify()) { self.notify({type : 'upload', cnt : 0, progress : loaded - prev, size : data.multiupload? 0 : filesize}); prev = loaded; progress(); } } }, false); xhr.upload.addEventListener('progress', function(e) { var curr; if (e.lengthComputable && !chunkMerge && xhr.readyState < 2) { loaded = e.loaded; // to avoid strange bug in safari (not in chrome) with drag&drop. // bug: macos finder opened in any folder, // reset safari cache (option+command+e), reload elfinder page, // drop file from finder // on first attempt request starts (progress callback called ones) but never ends. // any next drop - successfull. if (!data.checked && loaded > 0 && !notifyto) { notifyto = startNotify(xhr._totalSize - loaded); } if (!filesize) { filesize = e.total; if (!loaded) { loaded = parseInt(filesize * 0.05); } } curr = loaded - prev; if (checkNotify() && (curr/e.total) >= 0.05) { self.notify({type : 'upload', cnt : 0, progress : curr, size : 0}); prev = loaded; progress(); } if (!uploadedNtf && loaded >= filesize && !isChunked) { // Use "chunkmerge" for "server-in-process" notification uploadedNtf = true; notifyto1 = setTimeout(function() { self.notify({type : 'chunkmerge', cnt : cnt}); }, self.options.notifyDelay); } if (cancelBtn && ! data.multiupload && loaded >= filesize) { checkNotify() && cancelToggle(false); } } }, false); var send = function(files, paths){ var size = 0, fcnt = 1, sfiles = [], c = 0, total = cnt, maxFileSize, totalSize = 0, chunked = [], chunkID = new Date().getTime().toString().substr(-9), // for take care of the 32bit backend system BYTES_PER_CHUNK = Math.min((fm.uplMaxSize? fm.uplMaxSize : 2097152) - 8190, fm.options.uploadMaxChunkSize), // uplMaxSize margin 8kb or options.uploadMaxChunkSize blobSlice = chunkEnable? false : '', blobSize, blobMtime, blobName, i, start, end, chunks, blob, chunk, added, done, last, failChunk, multi = function(files, num){ var sfiles = [], cid, sfilesLen = 0, cancelChk, hasChunk; if (!abort) { while(files.length && sfiles.length < num) { sfiles.push(files.shift()); } sfilesLen = sfiles.length; if (sfilesLen) { cancelChk = sfilesLen; for (var i=0; i < sfilesLen; i++) { if (abort) { break; } cid = isDataType? (sfiles[i][0][0]._cid || null) : (sfiles[i][0]._cid || null); hasChunk = (hasChunk || cid)? true : false; if (!!failChunk[cid]) { last--; continue; } fm.exec('upload', { type: data.type, isDataType: isDataType, files: sfiles[i], checked: true, target: target, dropEvt: dropEvt, renames: renames, hashes: hashes, multiupload: true, overwrite: data.overwrite === 0? 0 : void 0, clipdata: data.clipdata }, void 0, target) .fail(function(error) { if (error && error === 'No such command') { abort = true; fm.error(['errUpload', 'errPerm']); } if (cid) { failChunk[cid] = true; } }) .always(function(e) { if (e && e.added) added = $.merge(added, e.added); if (last <= ++done) { fm.trigger('multiupload', {added: added}); notifyto && clearTimeout(notifyto); if (checkNotify()) { self.notify({type : 'upload', cnt : -cnt, progress : 0, size : 0}); } } if (files.length) { multi(files, 1); // Next one } else { if (--cancelChk <= 1) { if (cancelBtn) { cancelToggle(false, hasChunk); } } dfrd.resolve(); } }); } } } if (sfiles.length < 1 || abort) { if (abort) { notifyto && clearTimeout(notifyto); if (cid) { failChunk[cid] = true; } dfrd.reject(); } else { dfrd.resolve(); self.uploads.xhrUploading = false; } } }, check = function(){ if (!self.uploads.xhrUploading) { self.uploads.xhrUploading = true; multi(sfiles, multiMax); // Max connection: 3 } else { setTimeout(check, 100); } }, reqId, err; if (! dataChecked && (isDataType || data.type == 'files')) { if (! (maxFileSize = fm.option('uploadMaxSize', target))) { maxFileSize = 0; } for (i=0; i < files.length; i++) { try { blob = files[i]; blobSize = blob.size; if (blobSlice === false) { blobSlice = ''; if (self.api >= 2.1) { if ('slice' in blob) { blobSlice = 'slice'; } else if ('mozSlice' in blob) { blobSlice = 'mozSlice'; } else if ('webkitSlice' in blob) { blobSlice = 'webkitSlice'; } } } } catch(e) { cnt--; total--; continue; } // file size check if ((maxFileSize && blobSize > maxFileSize) || (!blobSlice && fm.uplMaxSize && blobSize > fm.uplMaxSize)) { triggerError(['errUploadFile', blob.name, 'errUploadFileSize'], blob, true); cnt--; total--; continue; } // file mime check if (blob.type && ! self.uploadMimeCheck(blob.type, target)) { triggerError(['errUploadFile', blob.name, 'errUploadMime', '(' + blob.type + ')'], blob, true); cnt--; total--; continue; } if (blobSlice && blobSize > BYTES_PER_CHUNK) { start = 0; end = BYTES_PER_CHUNK; chunks = -1; total = Math.floor((blobSize - 1) / BYTES_PER_CHUNK); blobMtime = blob.lastModified? Math.round(blob.lastModified/1000) : 0; blobName = data.clipdata? fm.date(fm.nonameDateFormat) + '.png' : blob.name; totalSize += blobSize; chunked[chunkID] = 0; while(start < blobSize) { chunk = blob[blobSlice](start, end); chunk._chunk = blobName + '.' + (++chunks) + '_' + total + '.part'; chunk._cid = chunkID; chunk._range = start + ',' + chunk.size + ',' + blobSize; chunk._mtime = blobMtime; chunked[chunkID]++; if (size) { c++; } if (typeof sfiles[c] == 'undefined') { sfiles[c] = []; if (isDataType) { sfiles[c][0] = []; sfiles[c][1] = []; } } size = BYTES_PER_CHUNK; fcnt = 1; if (isDataType) { sfiles[c][0].push(chunk); sfiles[c][1].push(paths[i]); } else { sfiles[c].push(chunk); } start = end; end = start + BYTES_PER_CHUNK; } if (chunk == null) { triggerError(['errUploadFile', blob.name, 'errUploadFileSize'], blob, true); cnt--; total--; } else { total += chunks; size = 0; fcnt = 1; c++; } continue; } if ((fm.uplMaxSize && size + blobSize > fm.uplMaxSize) || fcnt > fm.uplMaxFile) { size = 0; fcnt = 1; c++; } if (typeof sfiles[c] == 'undefined') { sfiles[c] = []; if (isDataType) { sfiles[c][0] = []; sfiles[c][1] = []; } } if (isDataType) { sfiles[c][0].push(blob); sfiles[c][1].push(paths[i]); } else { sfiles[c].push(blob); } size += blobSize; totalSize += blobSize; fcnt++; } if (errors.length) { triggerError(); } if (sfiles.length == 0) { // no data data.checked = true; return false; } if (sfiles.length > 1) { // multi upload notifyto = startNotify(totalSize); added = []; done = 0; last = sfiles.length; failChunk = []; check(); return true; } // single upload if (isDataType) { files = sfiles[0][0]; paths = sfiles[0][1]; } else { files = sfiles[0]; } } if (!dataChecked) { if (!fm.UA.Safari || !data.files) { notifyto = startNotify(totalSize); } else { xhr._totalSize = totalSize; } } dataChecked = true; if (! files.length) { dfrd.reject(['errUploadNoFiles']); } xhr.open('POST', self.uploadURL, true); // set request headers if (fm.customHeaders) { $.each(fm.customHeaders, function(key) { xhr.setRequestHeader(key, this); }); } // set xhrFields if (fm.xhrFields) { $.each(fm.xhrFields, function(key) { if (key in xhr) { xhr[key] = this; } }); } if (self.api >= 2.1029) { // request ID reqId = (+ new Date()).toString(16) + Math.floor(1000 * Math.random()).toString(16); formData.append('reqid', reqId); xhr._requestId = reqId; } formData.append('cmd', 'upload'); formData.append(self.newAPI ? 'target' : 'current', target); if (renames && renames.length) { $.each(renames, function(i, v) { formData.append('renames[]', v); }); formData.append('suffix', fm.options.backupSuffix); } if (hashes) { $.each(hashes, function(i, v) { formData.append('hashes['+ i +']', v); }); } $.each(self.customData, function(key, val) { formData.append(key, val); }); $.each(self.options.onlyMimes, function(i, mime) { formData.append('mimes[]', mime); }); $.each(files, function(i, file) { var name, relpath; if (file._chunkmerged) { formData.append('chunk', file._chunkmerged); formData.append('upload[]', file._name); formData.append('mtime[]', file._mtime); data.clipdata && formData.append('overwrite', 0); isChunked = true; } else { if (file._chunkfail) { formData.append('upload[]', 'chunkfail'); formData.append('mimes', 'chunkfail'); } else { if (data.clipdata) { if (!file._chunk) { data.overwrite = 0; name = fm.date(fm.nonameDateFormat) + '.png'; } } else { if (file.name) { name = file.name; if (fm.UA.iOS) { if (name.match(/^image\.jpe?g$/i)) { data.overwrite = 0; name = fm.date(fm.nonameDateFormat) + '.jpg'; } else if (name.match(/^capturedvideo\.mov$/i)) { data.overwrite = 0; name = fm.date(fm.nonameDateFormat) + '.mov'; } } relpath = (file.webkitRelativePath || file.relativePath || file._relativePath || '').replace(/[^\/]+$/, ''); name = relpath + name; } } name? formData.append('upload[]', file, name) : formData.append('upload[]', file); } if (file._chunk) { formData.append('chunk', file._chunk); formData.append('cid' , file._cid); formData.append('range', file._range); formData.append('mtime[]', file._mtime); isChunked = true; } else { formData.append('mtime[]', file.lastModified? Math.round(file.lastModified/1000) : 0); } } }); if (isDataType) { $.each(paths, function(i, path) { formData.append('upload_path[]', path); }); } if (data.overwrite === 0) { formData.append('overwrite', 0); } // send int value that which meta key was pressed when dropped as `dropWith` if (dropEvt) { formData.append('dropWith', parseInt( (dropEvt.altKey ? '1' : '0')+ (dropEvt.ctrlKey ? '1' : '0')+ (dropEvt.metaKey ? '1' : '0')+ (dropEvt.shiftKey? '1' : '0'), 2)); } // set extraData on current request if (extraData) { $.each(extraData, function(key, val) { formData.append(key, val); }); } xhr.send(formData); return true; }; if (! isDataType) { if (files.length > 0) { if (! data.clipdata && renames == null) { var mkdirs = [], paths = [], excludes = fm.options.folderUploadExclude[fm.OS] || null; $.each(files, function(i, file) { var relPath = file.webkitRelativePath || file.relativePath || '', idx, rootDir; if (! relPath) { return false; } if (excludes && file.name.match(excludes)) { file._remove = true; relPath = void(0); } else { // add '/' as prefix to make same to folder uploading with DnD, see #2607 relPath = '/' + relPath.replace(/\/[^\/]*$/, '').replace(/^\//, ''); if (relPath && $.inArray(relPath, mkdirs) === -1) { mkdirs.push(relPath); // checking the root directory to supports see #2378 idx = relPath.substr(1).indexOf('/'); if (idx !== -1 && (rootDir = relPath.substr(0, idx + 1)) && $.inArray(rootDir, mkdirs) === -1) { mkdirs.unshift(rootDir); } } } paths.push(relPath); }); renames = []; hashes = {}; if (mkdirs.length) { (function() { var checkDirs = $.map(mkdirs, function(name) { return name.substr(1).indexOf('/') === -1 ? {name: name.substr(1)} : null;}), cancelDirs = []; fm.uploads.checkExists(checkDirs, target, fm, true).done( function(res, res2) { var dfds = [], dfd, bak, hash; if (fm.options.overwriteUploadConfirm && fm.option('uploadOverwrite', target)) { cancelDirs = $.map(checkDirs, function(dir) { return dir._remove? dir.name : null ;} ); checkDirs = $.grep(checkDirs, function(dir) { return !dir._remove? true : false ;} ); } if (cancelDirs.length) { $.each(paths.concat(), function(i, path) { if ($.inArray(path, cancelDirs) === 0) { files[i]._remove = true; paths[i] = void(0); } }); } files = $.grep(files, function(file) { return file._remove? false : true; }); paths = $.grep(paths, function(path) { return path === void 0 ? false : true; }); if (checkDirs.length) { dfd = $.Deferred(); if (res.length) { $.each(res, function(i, existName) { // backup bak = fm.uniqueName(existName + fm.options.backupSuffix , null, ''); $.each(res2, function(h, name) { if (res[0] == name) { hash = h; return false; } }); if (! hash) { hash = fm.fileByName(res[0], target).hash; } fm.lockfiles({files : [hash]}); dfds.push( fm.request({ data : {cmd : 'rename', target : hash, name : bak}, notify : {type : 'rename', cnt : 1} }) .fail(function(error) { dfrd.reject(error); fm.sync(); }) .always(function() { fm.unlockfiles({files : [hash]}); }) ); }); } else { dfds.push(null); } $.when.apply($, dfds).done(function() { // ensure directories fm.request({ data : {cmd : 'mkdir', target : target, dirs : mkdirs}, notify : {type : 'mkdir', cnt : mkdirs.length}, preventFail: true }) .fail(function(error) { error = error || ['errUnknown']; if (error[0] === 'errCmdParams') { multiMax = 1; } else { multiMax = 0; dfrd.reject(error); } }) .done(function(data) { var rm = false; if (!data.hashes) { data.hashes = {}; } paths = $.map(paths.concat(), function(p, i) { if (p === '/') { return target; } else { if (data.hashes[p]) { return data.hashes[p]; } else { rm = true; files[i]._remove = true; return null; } } }); if (rm) { files = $.grep(files, function(file) { return file._remove? false : true; }); } }) .always(function(data) { if (multiMax) { isDataType = true; if (! send(files, paths)) { dfrd.reject(); } } }); }); } else { dfrd.reject(); } } ); })(); } else { fm.uploads.checkExists(files, target, fm).done( function(res, res2){ if (fm.options.overwriteUploadConfirm && fm.option('uploadOverwrite', target)) { hashes = res2; if (res === null) { data.overwrite = 0; } else { renames = res; } files = $.grep(files, function(file){return !file._remove? true : false ;}); } cnt = files.length; if (cnt > 0) { if (! send(files)) { dfrd.reject(); } } else { dfrd.reject(); } } ); } } else { if (! send(files)) { dfrd.reject(); } } } else { dfrd.reject(); } } else { if (dataChecked) { send(files[0], files[1]); } else { files.done(function(result) { // result: [files, paths, renames, hashes, mkdirs] renames = []; cnt = result[0].length; if (cnt) { if (result[4] && result[4].length) { // ensure directories fm.request({ data : {cmd : 'mkdir', target : target, dirs : result[4]}, notify : {type : 'mkdir', cnt : result[4].length}, preventFail: true }) .fail(function(error) { error = error || ['errUnknown']; if (error[0] === 'errCmdParams') { multiMax = 1; } else { multiMax = 0; dfrd.reject(error); } }) .done(function(data) { var rm = false; if (!data.hashes) { data.hashes = {}; } result[1] = $.map(result[1], function(p, i) { result[0][i]._relativePath = p.replace(/^\//, ''); p = p.replace(/\/[^\/]*$/, ''); if (p === '') { return target; } else { if (data.hashes[p]) { return data.hashes[p]; } else { rm = true; result[0][i]._remove = true; return null; } } }); if (rm) { result[0] = $.grep(result[0], function(file) { return file._remove? false : true; }); } }) .always(function(data) { if (multiMax) { renames = result[2]; hashes = result[3]; send(result[0], result[1]); } }); return; } else { result[1] = $.map(result[1], function() { return target; }); } renames = result[2]; hashes = result[3]; send(result[0], result[1]); } else { dfrd.reject(['errUploadNoFiles']); } }).fail(function(){ dfrd.reject(); }); } } return dfrd; }, // upload transport using iframe iframe : function(data, fm) { var self = fm ? fm : this, input = data.input? data.input : false, files = !input ? self.uploads.checkFile(data, self) : false, dfrd = $.Deferred() .fail(function(error) { error && self.error(error); }), name = 'iframe-'+fm.namespace+(++self.iframeCnt), form = $('
          '), msie = this.UA.IE, // clear timeouts, close notification dialog, remove form/iframe onload = function() { abortto && clearTimeout(abortto); notifyto && clearTimeout(notifyto); notify && self.notify({type : 'upload', cnt : -cnt}); setTimeout(function() { msie && $('').appendTo(form); form.remove(); iframe.remove(); }, 100); }, iframe = $('') .on('load', function() { iframe.off('load') .on('load', function() { onload(); // data will be processed in callback response or window onmessage dfrd.resolve(); }); // notify dialog notifyto = setTimeout(function() { notify = true; self.notify({type : 'upload', cnt : cnt}); }, self.options.notifyDelay); // emulate abort on timeout if (self.options.iframeTimeout > 0) { abortto = setTimeout(function() { onload(); dfrd.reject(['errConnect', 'errTimeout']); }, self.options.iframeTimeout); } form.submit(); }), target = (data.target || self.cwd().hash), names = [], dfds = [], renames = [], hashes = {}, cnt, notify, notifyto, abortto; if (files && files.length) { $.each(files, function(i, val) { form.append(''); }); cnt = 1; } else if (input && $(input).is(':file') && $(input).val()) { if (fm.options.overwriteUploadConfirm && fm.option('uploadOverwrite', target)) { names = input.files? input.files : [{ name: $(input).val().replace(/^(?:.+[\\\/])?([^\\\/]+)$/, '$1') }]; //names = $.map(names, function(file){return file.name? { name: file.name } : null ;}); dfds.push(self.uploads.checkExists(names, target, self).done( function(res, res2){ hashes = res2; if (res === null) { data.overwrite = 0; } else{ renames = res; cnt = $.grep(names, function(file){return !file._remove? true : false ;}).length; if (cnt != names.length) { cnt = 0; } } } )); } cnt = input.files ? input.files.length : 1; form.append(input); } else { return dfrd.reject(); } $.when.apply($, dfds).done(function() { if (cnt < 1) { return dfrd.reject(); } form.append('') .append('') .append('') .append($(input).attr('name', 'upload[]')); if (renames.length > 0) { $.each(renames, function(i, rename) { form.append(''); }); form.append(''); } if (hashes) { $.each(renames, function(i, v) { form.append(''); }); } if (data.overwrite === 0) { form.append(''); } $.each(self.options.onlyMimes||[], function(i, mime) { form.append(''); }); $.each(self.customData, function(key, val) { form.append(''); }); form.appendTo('body'); iframe.appendTo('body'); }); return dfrd; } }, /** * Bind callback to event(s) The callback is executed at most once per event. * To bind to multiply events at once, separate events names by space * * @param String event name * @param Function callback * @param Boolan priority first * @return elFinder */ one : function(ev, callback, priorityFirst) { var self = this, event = ev.toLowerCase(), h = function(e, f) { if (!self.toUnbindEvents[event]) { self.toUnbindEvents[event] = []; } self.toUnbindEvents[event].push({ type: event, callback: h }); return (callback.done? callback.done : callback).apply(this, arguments); }; if (callback.done) { h = {done: h}; } return this.bind(event, h, priorityFirst); }, /** * Set/get data into/from localStorage * * @param String key * @param String|void value * @return String|null */ localStorage : function(key, val) { var self = this, s = window.localStorage, oldkey = 'elfinder-'+(key || '')+this.id, // old key of elFinder < 2.1.6 prefix = window.location.pathname+'-elfinder-', suffix = this.id, clrs = [], retval, oldval, t, precnt, sufcnt; // reset this node data if (typeof(key) === 'undefined') { precnt = prefix.length; sufcnt = suffix.length * -1; $.each(s, function(key) { if (key.substr(0, precnt) === prefix && key.substr(sufcnt) === suffix) { clrs.push(key); } }); $.each(clrs, function(i, key) { s.removeItem(key); }); return true; } // new key of elFinder >= 2.1.6 key = prefix+key+suffix; if (val === null) { return s.removeItem(key); } if (val === void(0) && !(retval = s.getItem(key)) && (oldval = s.getItem(oldkey))) { val = oldval; s.removeItem(oldkey); } if (val !== void(0)) { t = typeof val; if (t !== 'string' && t !== 'number') { val = JSON.stringify(val); } try { s.setItem(key, val); } catch (e) { try { s.clear(); s.setItem(key, val); } catch (e) { self.debug('error', e.toString()); } } retval = s.getItem(key); } if (retval && (retval.substr(0,1) === '{' || retval.substr(0,1) === '[')) { try { return JSON.parse(retval); } catch(e) {} } return retval; }, /** * Set/get data into/from sessionStorage * * @param String key * @param String|void value * @return String|null */ sessionStorage : function(key, val) { var self = this, s, retval, t; try { s = window.sessionStorage; } catch(e) {} if (!s) { return; } if (val === null) { return s.removeItem(key); } if (val !== void(0)) { t = typeof val; if (t !== 'string' && t !== 'number') { val = JSON.stringify(val); } try { s.setItem(key, val); } catch (e) { try { s.clear(); s.setItem(key, val); } catch (e) { self.debug('error', e.toString()); } } } retval = s.getItem(key); if (retval && (retval.substr(0,1) === '{' || retval.substr(0,1) === '[')) { try { return JSON.parse(retval); } catch(e) {} } return retval; }, /** * Get/set cookie * * @param String cookie name * @param String|void cookie value * @return String|null */ cookie : function(name, value) { var d, o, c, i, retval, t; name = 'elfinder-'+name+this.id; if (value === void(0)) { if (this.cookieEnabled && document.cookie && document.cookie != '') { c = document.cookie.split(';'); name += '='; for (i=0; i'), /** * Replace not html-safe symbols to html entities * * @param String text to escape * @return String */ escape : function(name) { return this._node.text(name).html().replace(/"/g, '"').replace(/'/g, '''); }, /** * Cleanup ajax data. * For old api convert data into new api format * * @param String command name * @param Object data from backend * @return Object */ normalize : function(data) { var self = this, fileFilter = (function() { var func, filter; if (filter = self.options.fileFilter) { if (typeof filter === 'function') { func = function(file) { return filter.call(self, file); }; } else if (filter instanceof RegExp) { func = function(file) { return filter.test(file.name); }; } } return func? func : null; })(), chkCmdMap = function(opts) { // Disable command to replace with other command var disabled; if (opts.uiCmdMap) { if ($.isPlainObject(opts.uiCmdMap) && Object.keys(opts.uiCmdMap).length) { if (!opts.disabledFlip) { opts.disabledFlip = {}; } disabled = opts.disabledFlip; $.each(opts.uiCmdMap, function(f, t) { if (t === 'hidden' && !disabled[f]) { opts.disabled.push(f); opts.disabledFlip[f] = true; } }); } else { delete opts.uiCmdMap; } } }, normalizeOptions = function(opts) { var getType = function(v) { var type = typeof v; if (type === 'object' && Array.isArray(v)) { type = 'array'; } return type; }; $.each(self.optionProperties, function(k, empty) { if (empty !== void(0)) { if (opts[k] && getType(opts[k]) !== getType(empty)) { opts[k] = empty; } } }); if (opts.disabled) { opts.disabledFlip = self.arrayFlip(opts.disabled, true); $.each(self.options.disabledCmdsRels, function(com, rels) { var m, flg; if (opts.disabledFlip[com]) { flg = true; } else if (m = com.match(/^([^&]+)&([^=]+)=(.*)$/)) { if (opts.disabledFlip[m[1]] && opts[m[2]] == m[3]) { flg = true; } } if (flg) { $.each(rels, function(i, rel) { if (!opts.disabledFlip[rel]) { opts.disabledFlip[rel] = true; opts.disabled.push(rel); } }); } }); } else { opts.disabledFlip = {}; } return opts; }, filter = function(file, asMap, type) { var res = asMap? file : true, ign = asMap? null : false, vid, targetOptions, isRoot, rootNames; if (file && file.hash && file.name && file.mime) { if (file.mime === 'application/x-empty') { file.mime = 'text/plain'; } isRoot = self.isRoot(file); if (isRoot && ! file.volumeid) { self.debug('warning', 'The volume root statuses requires `volumeid` property.'); } if (isRoot || file.mime === 'directory') { // Prevention of circular reference if (file.phash) { if (file.phash === file.hash) { error = error.concat(['Parent folder of "$1" is itself.', file.name]); return ign; } if (isRoot && file.volumeid && file.phash.indexOf(file.volumeid) === 0) { error = error.concat(['Parent folder of "$1" is inner itself.', file.name]); return ign; } } // set options, tmbUrls for each volume if (file.volumeid) { vid = file.volumeid; if (isRoot) { // make or update of leaf roots cache if (file.phash) { if (! self.leafRoots[file.phash]) { self.leafRoots[file.phash] = [ file.hash ]; } else { if ($.inArray(file.hash, self.leafRoots[file.phash]) === -1) { self.leafRoots[file.phash].push(file.hash); } } } self.hasVolOptions = true; if (! self.volOptions[vid]) { self.volOptions[vid] = { // set dispInlineRegex dispInlineRegex: self.options.dispInlineRegex }; } targetOptions = self.volOptions[vid]; if (file.options) { // >= v.2.1.14 has file.options Object.assign(targetOptions, file.options); } // for compat <= v2.1.13 if (file.disabled) { targetOptions.disabled = file.disabled; targetOptions.disabledFlip = self.arrayFlip(file.disabled, true); } if (file.tmbUrl) { targetOptions.tmbUrl = file.tmbUrl; } // '/' required at the end of url if (targetOptions.url && targetOptions.url.substr(-1) !== '/') { targetOptions.url += '/'; } // check uiCmdMap chkCmdMap(targetOptions); // check trash bin hash if (targetOptions.trashHash) { if (self.trashes[targetOptions.trashHash] === false) { delete targetOptions.trashHash; } else { self.trashes[targetOptions.trashHash] = file.hash; } } // set immediate properties $.each(self.optionProperties, function(k) { if (targetOptions[k]) { file[k] = targetOptions[k]; } }); // regist fm.roots if (type !== 'cwd') { self.roots[vid] = file.hash; } // regist fm.volumeExpires if (file.expires) { self.volumeExpires[vid] = file.expires; } } if (prevId !== vid) { prevId = vid; i18nFolderName = self.option('i18nFolderName', vid); } } // volume root i18n name if (isRoot && ! file.i18) { name = 'volume_' + file.name, i18 = self.i18n(false, name); if (name !== i18) { file.i18 = i18; } } // i18nFolderName if (i18nFolderName && ! file.i18) { name = 'folder_' + file.name, i18 = self.i18n(false, name); if (name !== i18) { file.i18 = i18; } } if (isRoot && self.options.enableRootRename !== false) { if (rootNames = self.storage('rootNames')) { if (rootNames[file.hash]) { file._name = file.name; file._i18 = file.i18; file.name = rootNames[file.hash] = rootNames[file.hash]; delete file.i18; } self.storage('rootNames', rootNames); } } // lock trash bins holder if (self.trashes[file.hash]) { file.locked = true; } } else { if (fileFilter) { try { if (! fileFilter(file)) { return ign; } } catch(e) { self.debug(e); } } if (file.size == 0) { file.mime = self.getMimetype(file.name, file.mime); } } if (file.options) { self.optionsByHashes[file.hash] = normalizeOptions(file.options); } delete file.options; return res; } return ign; }, getDescendants = function(hashes) { var res = []; $.each(self.files(), function(h, f) { $.each(self.parents(h), function(i, ph) { if ($.inArray(ph, hashes) !== -1 && $.inArray(h, hashes) === -1) { res.push(h); return false; } }); }); return res; }, applyLeafRootStats = function(dataArr, type) { $.each(dataArr, function(i, f) { var pfile, done; if (self.leafRoots[f.hash]) { self.applyLeafRootStats(f); } // update leaf root parent stat if (type !== 'change' && f.phash && self.isRoot(f) && (pfile = self.file(f.phash))) { self.applyLeafRootStats(pfile); // add to data.changed if (!data.changed) { data.changed = [pfile]; } else { $.each(data.changed, function(i, f) { if (f.hash === pfile.hash) { data.changed[i] = pfile; done = true; return false; } }); if (!done) { data.changed.push(pfile); } } } }); }, error = [], name, i18, i18nFolderName, prevId, cData; // set cunstom data if (data.customData && (!self.prevCustomData || (JSON.stringify(data.customData) !== JSON.stringify(self.prevCustomData)))) { self.prevCustomData = data.customData; try { cData = JSON.parse(data.customData); if ($.isPlainObject(cData)) { self.prevCustomData = cData; $.each(Object.keys(cData), function(i, key) { if (cData[key] === null) { delete cData[key]; delete self.optsCustomData[key]; } }); self.customData = Object.assign({}, self.optsCustomData, cData); } } catch(e) {} } if (data.options) { normalizeOptions(data.options); } if (data.cwd) { if (data.cwd.volumeid && data.options && Object.keys(data.options).length && self.isRoot(data.cwd)) { self.hasVolOptions = true; self.volOptions[data.cwd.volumeid] = data.options; } data.cwd = filter(data.cwd, true, 'cwd'); } if (data.files) { data.files = $.grep(data.files, filter); } if (data.tree) { data.tree = $.grep(data.tree, filter); } if (data.added) { data.added = $.grep(data.added, filter); } if (data.changed) { data.changed = $.grep(data.changed, filter); } if (data.removed && data.removed.length && self.searchStatus.state === 2) { data.removed = data.removed.concat(getDescendants(data.removed)); } if (data.api) { data.init = true; } if (Object.keys(self.leafRoots).length) { data.files && applyLeafRootStats(data.files); data.tree && applyLeafRootStats(data.tree); data.added && applyLeafRootStats(data.added); data.changed && applyLeafRootStats(data.changed, 'change'); } // merge options that apply only to cwd if (data.cwd && data.cwd.options && data.options) { Object.assign(data.options, normalizeOptions(data.cwd.options)); } // '/' required at the end of url if (data.options && data.options.url && data.options.url.substr(-1) !== '/') { data.options.url += '/'; } // check error if (error.length) { data.norError = ['errResponse'].concat(error); } return data; }, /** * Update sort options * * @param {String} sort type * @param {String} sort order * @param {Boolean} show folder first */ setSort : function(type, order, stickFolders, alsoTreeview) { this.storage('sortType', (this.sortType = this.sortRules[type] ? type : 'name')); this.storage('sortOrder', (this.sortOrder = /asc|desc/.test(order) ? order : 'asc')); this.storage('sortStickFolders', (this.sortStickFolders = !!stickFolders) ? 1 : ''); this.storage('sortAlsoTreeview', (this.sortAlsoTreeview = !!alsoTreeview) ? 1 : ''); this.trigger('sortchange'); }, _sortRules : { name : function(file1, file2) { return elFinder.prototype.naturalCompare(file1.i18 || file1.name, file2.i18 || file2.name); }, size : function(file1, file2) { var size1 = parseInt(file1.size) || 0, size2 = parseInt(file2.size) || 0; return size1 === size2 ? 0 : size1 > size2 ? 1 : -1; }, kind : function(file1, file2) { return elFinder.prototype.naturalCompare(file1.mime, file2.mime); }, date : function(file1, file2) { var date1 = file1.ts || file1.date || 0, date2 = file2.ts || file2.date || 0; return date1 === date2 ? 0 : date1 > date2 ? 1 : -1; }, perm : function(file1, file2) { var val = function(file) { return (file.write? 2 : 0) + (file.read? 1 : 0); }, v1 = val(file1), v2 = val(file2); return v1 === v2 ? 0 : v1 > v2 ? 1 : -1; }, mode : function(file1, file2) { var v1 = file1.mode || (file1.perm || ''), v2 = file2.mode || (file2.perm || ''); return elFinder.prototype.naturalCompare(v1, v2); }, owner : function(file1, file2) { var v1 = file1.owner || '', v2 = file2.owner || ''; return elFinder.prototype.naturalCompare(v1, v2); }, group : function(file1, file2) { var v1 = file1.group || '', v2 = file2.group || ''; return elFinder.prototype.naturalCompare(v1, v2); } }, /** * Valid sort rule names * * @type Object */ sorters : {}, /** * Compare strings for natural sort * * @param String * @param String * @return Number */ naturalCompare : function(a, b) { var self = elFinder.prototype.naturalCompare; if (typeof self.loc == 'undefined') { self.loc = (navigator.userLanguage || navigator.browserLanguage || navigator.language || 'en-US'); } if (typeof self.sort == 'undefined') { if ('11'.localeCompare('2', self.loc, {numeric: true}) > 0) { // Native support if (window.Intl && window.Intl.Collator) { self.sort = new Intl.Collator(self.loc, {numeric: true}).compare; } else { self.sort = function(a, b) { return a.localeCompare(b, self.loc, {numeric: true}); }; } } else { /* * Edited for elFinder (emulates localeCompare() by numeric) by Naoki Sawada aka nao-pon */ /* * Huddle/javascript-natural-sort (https://github.com/Huddle/javascript-natural-sort) */ /* * Natural Sort algorithm for Javascript - Version 0.7 - Released under MIT license * Author: Jim Palmer (based on chunking idea from Dave Koelle) * http://opensource.org/licenses/mit-license.php */ self.sort = function(a, b) { var re = /(^-?[0-9]+(\.?[0-9]*)[df]?e?[0-9]?$|^0x[0-9a-f]+$|[0-9]+)/gi, sre = /(^[ ]*|[ ]*$)/g, dre = /(^([\w ]+,?[\w ]+)?[\w ]+,?[\w ]+\d+:\d+(:\d+)?[\w ]?|^\d{1,4}[\/\-]\d{1,4}[\/\-]\d{1,4}|^\w+, \w+ \d+, \d{4})/, hre = /^0x[0-9a-f]+$/i, ore = /^0/, syre = /^[\x01\x21-\x2f\x3a-\x40\x5b-\x60\x7b-\x7e]/, // symbol first - (Naoki Sawada) i = function(s) { return self.sort.insensitive && (''+s).toLowerCase() || ''+s; }, // convert all to strings strip whitespace // first character is "_", it's smallest - (Naoki Sawada) x = i(a).replace(sre, '').replace(/^_/, "\x01") || '', y = i(b).replace(sre, '').replace(/^_/, "\x01") || '', // chunk/tokenize xN = x.replace(re, '\0$1\0').replace(/\0$/,'').replace(/^\0/,'').split('\0'), yN = y.replace(re, '\0$1\0').replace(/\0$/,'').replace(/^\0/,'').split('\0'), // numeric, hex or date detection xD = parseInt(x.match(hre)) || (xN.length != 1 && x.match(dre) && Date.parse(x)), yD = parseInt(y.match(hre)) || xD && y.match(dre) && Date.parse(y) || null, oFxNcL, oFyNcL, locRes = 0; // first try and sort Hex codes or Dates if (yD) { if ( xD < yD ) return -1; else if ( xD > yD ) return 1; } // natural sorting through split numeric strings and default strings for(var cLoc=0, numS=Math.max(xN.length, yN.length); cLoc < numS; cLoc++) { // find floats not starting with '0', string or 0 if not defined (Clint Priest) oFxNcL = !(xN[cLoc] || '').match(ore) && parseFloat(xN[cLoc]) || xN[cLoc] || 0; oFyNcL = !(yN[cLoc] || '').match(ore) && parseFloat(yN[cLoc]) || yN[cLoc] || 0; // handle numeric vs string comparison - number < string - (Kyle Adams) // but symbol first < number - (Naoki Sawada) if (isNaN(oFxNcL) !== isNaN(oFyNcL)) { if (isNaN(oFxNcL) && (typeof oFxNcL !== 'string' || ! oFxNcL.match(syre))) { return 1; } else if (typeof oFyNcL !== 'string' || ! oFyNcL.match(syre)) { return -1; } } // use decimal number comparison if either value is string zero if (parseInt(oFxNcL, 10) === 0) oFxNcL = 0; if (parseInt(oFyNcL, 10) === 0) oFyNcL = 0; // rely on string comparison if different types - i.e. '02' < 2 != '02' < '2' if (typeof oFxNcL !== typeof oFyNcL) { oFxNcL += ''; oFyNcL += ''; } // use locale sensitive sort for strings when case insensitive // note: localeCompare interleaves uppercase with lowercase (e.g. A,a,B,b) if (self.sort.insensitive && typeof oFxNcL === 'string' && typeof oFyNcL === 'string') { locRes = oFxNcL.localeCompare(oFyNcL, self.loc); if (locRes !== 0) return locRes; } if (oFxNcL < oFyNcL) return -1; if (oFxNcL > oFyNcL) return 1; } return 0; }; self.sort.insensitive = true; } } return self.sort(a, b); }, /** * Compare files based on elFinder.sort * * @param Object file * @param Object file * @return Number */ compare : function(file1, file2) { var self = this, type = self.sortType, asc = self.sortOrder == 'asc', stick = self.sortStickFolders, rules = self.sortRules, sort = rules[type], d1 = file1.mime == 'directory', d2 = file2.mime == 'directory', res; if (stick) { if (d1 && !d2) { return -1; } else if (!d1 && d2) { return 1; } } res = asc ? sort(file1, file2) : sort(file2, file1); return type !== 'name' && res === 0 ? res = asc ? rules.name(file1, file2) : rules.name(file2, file1) : res; }, /** * Sort files based on config * * @param Array files * @return Array */ sortFiles : function(files) { return files.sort(this.compare); }, /** * Open notification dialog * and append/update message for required notification type. * * @param Object options * @example * this.notify({ * type : 'copy', * msg : 'Copy files', // not required for known types @see this.notifyType * cnt : 3, * hideCnt : false, // true for not show count * progress : 10, // progress bar percents (use cnt : 0 to update progress bar) * cancel : callback // callback function for cancel button * }) * @return elFinder */ notify : function(opts) { var self = this, type = opts.type, id = opts.id? 'elfinder-notify-'+opts.id : '', msg = this.i18n((typeof opts.msg !== 'undefined')? opts.msg : (this.messages['ntf'+type] ? 'ntf'+type : 'ntfsmth')), hiddens = this.arrayFlip(this.options.notifyDialog.hiddens || []), ndialog = this.ui.notify, dialog = ndialog.closest('.ui-dialog'), notify = ndialog.children('.elfinder-notify-'+type+(id? ('.'+id) : '')), button = notify.children('div.elfinder-notify-cancel').children('button'), ntpl = '
          {msg}
          ', delta = opts.cnt + 0, size = (typeof opts.size != 'undefined')? parseInt(opts.size) : null, progress = (typeof opts.progress != 'undefined' && opts.progress >= 0) ? opts.progress : null, fakeint = opts.fakeinterval || 200, cancel = opts.cancel, clhover = 'ui-state-hover', close = function() { var prog = notify.find('.elfinder-notify-progress'), rm = function() { notify.remove(); if (!ndialog.children(dialog.data('minimized')? void(0) : ':visible').length) { if (dialog.data('minimized')) { dialog.data('minimized').hide(); } else { ndialog.elfinderdialog('close'); } } setProgressbar(); }; notify._esc && $(document).off('keydown', notify._esc); if (notify.data('cur') < 100) { prog.animate({ width : '100%' }, 50, function() { requestAnimationFrame(function() { rm(); }); }); } else { rm(); } }, fakeUp = function(interval) { var cur; if (notify.length) { cur = notify.data('cur') + 1; if (cur <= 98) { notify.find('.elfinder-notify-progress').width(cur + '%'); notify.data('cur', cur); setProgressbar(); setTimeout(function() { interval *= 1.05; fakeUp(interval); }, interval); } } }, setProgressbar = function() { var cnt = 0, val = 0, ntfs = ndialog.children('.elfinder-notify'), w; if (ntfs.length) { ntfs.each(function() { cnt++; val += Math.min($(this).data('cur'), 100); }); w = cnt? Math.floor(val / (cnt * 100) * 100) + '%' : 0; self.ui.progressbar.width(w); if (dialog.data('minimized')) { dialog.data('minimized').title(w); dialog.data('minimized').dialog().children('.ui-dialog-titlebar').children('.elfinder-ui-progressbar').width(w); } } else { self.ui.progressbar.width(0); dialog.data('minimized') && dialog.data('minimized').hide(); } }, cnt, total, prc; if (!type) { return this; } if (!notify.length) { notify = $(ntpl.replace(/\{type\}/g, type).replace(/\{msg\}/g, msg)); if (hiddens[type]) { notify.hide(); } else { ndialog.on('minimize', function(e) { dialog.data('minimized') && setProgressbar(); }); } notify.appendTo(ndialog).data('cnt', 0); if (progress != null) { notify.data({progress : 0, total : 0, cur : 0}); } else { notify.data({cur : 0}); fakeUp(fakeint); } if (cancel) { button = $('') .on('mouseenter mouseleave', function(e) { $(this).toggleClass(clhover, e.type === 'mouseenter'); }); notify.children('div.elfinder-notify-cancel').append(button); } ndialog.trigger('resize'); } else if (typeof opts.msg !== 'undefined') { notify.children('span.elfinder-notify-msg').html(msg); } cnt = delta + parseInt(notify.data('cnt')); if (cnt > 0) { if (cancel && button.length) { if (typeof cancel === 'function' || (typeof cancel === 'object' && cancel.promise)) { notify._esc = function(e) { if (e.type == 'keydown' && e.keyCode != $.ui.keyCode.ESCAPE) { return; } e.preventDefault(); e.stopPropagation(); close(); if (cancel.promise) { cancel.reject(0); // 0 is canceling flag } else { cancel(e); } }; button.on('click', function(e) { notify._esc(e); }); $(document).on('keydown.' + this.namespace, notify._esc); } } !opts.hideCnt && notify.children('.elfinder-notify-cnt').text('('+cnt+')'); if (delta > 0 && ndialog.is(':hidden') && !hiddens[type]) { if (dialog.data('minimized')) { dialog.data('minimized').show(); } else { ndialog.elfinderdialog('open', this).height('auto'); } } notify.data('cnt', cnt); if ((progress != null) && (total = notify.data('total')) >= 0 && (prc = notify.data('progress')) >= 0) { total += size != null? size : delta; prc += progress; (size == null && delta < 0) && (prc += delta * 100); notify.data({progress : prc, total : total}); if (size != null) { prc *= 100; total = Math.max(1, total); } progress = Math.min(parseInt(prc/total), 100); notify.find('.elfinder-notify-progress') .animate({ width : (progress < 100 ? progress : 100)+'%' }, 20, function() { notify.data('cur', progress); setProgressbar(); }); } } else { close(); } return this; }, /** * Open confirmation dialog * * @param Object options * @example * this.confirm({ * cssClass : 'elfinder-confirm-mydialog', * title : 'Remove files', * text : 'Here is question text', * accept : { // accept callback - required * label : 'Continue', * callback : function(applyToAll) { fm.log('Ok') } * }, * cancel : { // cancel callback - required * label : 'Cancel', * callback : function() { fm.log('Cancel')} * }, * reject : { // reject callback - optionally * label : 'No', * callback : function(applyToAll) { fm.log('No')} * }, * buttons : [ // additional buttons callback - optionally * { * label : 'Btn1', * callback : function(applyToAll) { fm.log('Btn1')} * } * ], * all : true // display checkbox "Apply to all" * }) * @return elFinder */ confirm : function(opts) { var self = this, complete = false, options = { cssClass : 'elfinder-dialog-confirm', modal : true, resizable : false, title : this.i18n(opts.title || 'confirmReq'), buttons : {}, close : function() { !complete && opts.cancel.callback(); $(this).elfinderdialog('destroy'); } }, apply = this.i18n('apllyAll'), label, checkbox, btnNum; if (opts.cssClass) { options.cssClass += ' ' + opts.cssClass; } options.buttons[this.i18n(opts.accept.label)] = function() { opts.accept.callback(!!(checkbox && checkbox.prop('checked'))); complete = true; $(this).elfinderdialog('close'); }; options.buttons[this.i18n(opts.accept.label)]._cssClass = 'elfinder-confirm-accept'; if (opts.reject) { options.buttons[this.i18n(opts.reject.label)] = function() { opts.reject.callback(!!(checkbox && checkbox.prop('checked'))); complete = true; $(this).elfinderdialog('close'); }; options.buttons[this.i18n(opts.reject.label)]._cssClass = 'elfinder-confirm-reject'; } if (opts.buttons && opts.buttons.length > 0) { btnNum = 1; $.each(opts.buttons, function(i, v){ options.buttons[self.i18n(v.label)] = function() { v.callback(!!(checkbox && checkbox.prop('checked'))); complete = true; $(this).elfinderdialog('close'); }; options.buttons[self.i18n(v.label)]._cssClass = 'elfinder-confirm-extbtn' + (btnNum++); if (v.cssClass) { options.buttons[self.i18n(v.label)]._cssClass += ' ' + v.cssClass; } }); } options.buttons[this.i18n(opts.cancel.label)] = function() { $(this).elfinderdialog('close'); }; options.buttons[this.i18n(opts.cancel.label)]._cssClass = 'elfinder-confirm-cancel'; if (opts.all) { options.create = function() { var base = $('
          '); checkbox = $(''); $(this).next().find('.ui-dialog-buttonset') .prepend(base.append($('').prepend(checkbox))); }; } if (opts.optionsCallback && typeof opts.optionsCallback === 'function') { opts.optionsCallback(options); } return this.dialog('' + this.i18n(opts.text), options); }, /** * Create unique file name in required dir * * @param String file name * @param String parent dir hash * @param String glue * @return String */ uniqueName : function(prefix, phash, glue) { var i = 0, ext = '', p, name; prefix = this.i18n(false, prefix); phash = phash || this.cwd().hash; glue = (typeof glue === 'undefined')? ' ' : glue; if (p = prefix.match(/^(.+)(\.[^.]+)$/)) { ext = p[2]; prefix = p[1]; } name = prefix+ext; if (!this.fileByName(name, phash)) { return name; } while (i < 10000) { name = prefix + glue + (++i) + ext; if (!this.fileByName(name, phash)) { return name; } } return prefix + Math.random() + ext; }, /** * Return message translated onto current language * Allowed accept HTML element that was wrapped in jQuery object * To be careful to XSS vulnerability of HTML element Ex. You should use `fm.escape(file.name)` * * @param String|Array message[s]|Object jQuery * @return String **/ i18n : function() { var self = this, messages = this.messages, input = [], ignore = [], message = function(m) { var file; if (m.indexOf('#') === 0) { if ((file = self.file(m.substr(1)))) { return file.name; } } return m; }, i, j, m, escFunc, start = 0, isErr; if (arguments.length && arguments[0] === false) { escFunc = function(m){ return m; }; start = 1; } for (i = start; i< arguments.length; i++) { m = arguments[i]; if (Array.isArray(m)) { for (j = 0; j < m.length; j++) { if (m[j] instanceof jQuery) { // jQuery object is HTML element input.push(m[j]); } else if (typeof m[j] !== 'undefined'){ input.push(message('' + m[j])); } } } else if (m instanceof jQuery) { // jQuery object is HTML element input.push(m[j]); } else if (typeof m !== 'undefined'){ input.push(message('' + m)); } } for (i = 0; i < input.length; i++) { // dont translate placeholders if ($.inArray(i, ignore) !== -1) { continue; } m = input[i]; if (typeof m == 'string') { isErr = !!(messages[m] && m.match(/^err/)); // translate message m = messages[m] || (escFunc? escFunc(m) : self.escape(m)); // replace placeholders in message m = m.replace(/\$(\d+)/g, function(match, placeholder) { var res; placeholder = i + parseInt(placeholder); if (placeholder > 0 && input[placeholder]) { ignore.push(placeholder); } res = escFunc? escFunc(input[placeholder]) : self.escape(input[placeholder]); if (isErr) { res = '' + res + ''; } return res; }); } else { // get HTML from jQuery object m = m.get(0).outerHTML; } input[i] = m; } return $.grep(input, function(m, i) { return $.inArray(i, ignore) === -1 ? true : false; }).join('
          '); }, /** * Get icon style from file.icon * * @param Object elFinder file object * @return String|Object */ getIconStyle : function(file, asObject) { var self = this, template = { 'background' : 'url(\'{url}\') 0 0 no-repeat', 'background-size' : 'contain' }, style = '', cssObj = {}, i = 0; if (file.icon) { style = 'style="'; $.each(template, function(k, v) { if (i++ === 0) { v = v.replace('{url}', self.escape(file.icon)); } if (asObject) { cssObj[k] = v; } else { style += k+':'+v+';'; } }); style += '"'; } return asObject? cssObj : style; }, /** * Convert mimetype into css classes * * @param String file mimetype * @return String */ mime2class : function(mimeType) { var prefix = 'elfinder-cwd-icon-', mime = mimeType.toLowerCase(), isText = this.textMimes[mime]; mime = mime.split('/'); if (isText) { mime[0] += ' ' + prefix + 'text'; } else if (mime[1] && mime[1].match(/\+xml$/)) { mime[0] += ' ' + prefix + 'xml'; } return prefix + mime[0] + (mime[1] ? ' ' + prefix + mime[1].replace(/(\.|\+)/g, '-') : ''); }, /** * Return localized kind of file * * @param Object|String file or file mimetype * @return String */ mime2kind : function(f) { var isObj = typeof(f) == 'object' ? true : false, mime = isObj ? f.mime : f, kind; if (isObj && f.alias && mime != 'symlink-broken') { kind = 'Alias'; } else if (this.kinds[mime]) { if (isObj && mime === 'directory' && (! f.phash || f.isroot)) { kind = 'Root'; } else { kind = this.kinds[mime]; } } else if (this.mimeTypes[mime]) { kind = this.mimeTypes[mime].toUpperCase(); if (!this.messages['kind'+kind]) { kind = null; } } if (! kind) { if (mime.indexOf('text') === 0) { kind = 'Text'; } else if (mime.indexOf('image') === 0) { kind = 'Image'; } else if (mime.indexOf('audio') === 0) { kind = 'Audio'; } else if (mime.indexOf('video') === 0) { kind = 'Video'; } else if (mime.indexOf('application') === 0) { kind = 'App'; } else if (mime.indexOf('font') === 0) { kind = 'Font'; } else { kind = mime; } } return this.messages['kind'+kind] ? this.i18n('kind'+kind) : mime; }, /** * Return boolean Is mime-type text file * * @param String mime-type * @return Boolean */ mimeIsText : function(mime) { return (this.textMimes[mime.toLowerCase()] || (mime.indexOf('text/') === 0 && mime.substr(5, 3) !== 'rtf') || mime.match(/^application\/.+\+xml$/))? true : false; }, /** * Returns a date string formatted according to the given format string * * @param String format string * @param Object Date object * @return String */ date : function(format, date) { var self = this, output, d, dw, m, y, h, g, i, s; if (! date) { date = new Date(); } h = date[self.getHours](); g = h > 12 ? h - 12 : h; i = date[self.getMinutes](); s = date[self.getSeconds](); d = date[self.getDate](); dw = date[self.getDay](); m = date[self.getMonth]() + 1; y = date[self.getFullYear](); output = format.replace(/[a-z]/gi, function(val) { switch (val) { case 'd': return d > 9 ? d : '0'+d; case 'j': return d; case 'D': return self.i18n(self.i18.daysShort[dw]); case 'l': return self.i18n(self.i18.days[dw]); case 'm': return m > 9 ? m : '0'+m; case 'n': return m; case 'M': return self.i18n(self.i18.monthsShort[m-1]); case 'F': return self.i18n(self.i18.months[m-1]); case 'Y': return y; case 'y': return (''+y).substr(2); case 'H': return h > 9 ? h : '0'+h; case 'G': return h; case 'g': return g; case 'h': return g > 9 ? g : '0'+g; case 'a': return h >= 12 ? 'pm' : 'am'; case 'A': return h >= 12 ? 'PM' : 'AM'; case 'i': return i > 9 ? i : '0'+i; case 's': return s > 9 ? s : '0'+s; } return val; }); return output; }, /** * Return localized date * * @param Object file object * @return String */ formatDate : function(file, t) { var self = this, ts = t || file.ts, i18 = self.i18, date, format, output, d, dw, m, y, h, g, i, s; if (self.options.clientFormatDate && ts > 0) { date = new Date(ts*1000); format = ts >= this.yesterday ? this.fancyFormat : this.dateFormat; output = self.date(format, date); return ts >= this.yesterday ? output.replace('$1', this.i18n(ts >= this.today ? 'Today' : 'Yesterday')) : output; } else if (file.date) { return file.date.replace(/([a-z]+)\s/i, function(a1, a2) { return self.i18n(a2)+' '; }); } return self.i18n('dateUnknown'); }, /** * Return localized number string * * @param Number * @return String */ toLocaleString : function(num) { var v = new Number(num); if (v) { if (v.toLocaleString) { return v.toLocaleString(); } else { return String(num).replace( /(\d)(?=(\d\d\d)+(?!\d))/g, '$1,'); } } return num; }, /** * Return css class marks file permissions * * @param Object file * @return String */ perms2class : function(o) { var c = ''; if (!o.read && !o.write) { c = 'elfinder-na'; } else if (!o.read) { c = 'elfinder-wo'; } else if (!o.write) { c = 'elfinder-ro'; } if (o.type) { c += ' elfinder-' + this.escape(o.type); } return c; }, /** * Return localized string with file permissions * * @param Object file * @return String */ formatPermissions : function(f) { var p = []; f.read && p.push(this.i18n('read')); f.write && p.push(this.i18n('write')); return p.length ? p.join(' '+this.i18n('and')+' ') : this.i18n('noaccess'); }, /** * Return formated file size * * @param Number file size * @return String */ formatSize : function(s) { var n = 1, u = 'b'; if (s == 'unknown') { return this.i18n('unknown'); } if (s > 1073741824) { n = 1073741824; u = 'GB'; } else if (s > 1048576) { n = 1048576; u = 'MB'; } else if (s > 1024) { n = 1024; u = 'KB'; } s = s/n; return (s > 0 ? n >= 1048576 ? s.toFixed(2) : Math.round(s) : 0) +' '+u; }, /** * Return formated file mode by options.fileModeStyle * * @param String file mode * @param String format style * @return String */ formatFileMode : function(p, style) { var i, o, s, b, sticy, suid, sgid, str, oct; if (!style) { style = this.options.fileModeStyle.toLowerCase(); } p = p.trim(); if (p.match(/[rwxs-]{9}$/i)) { str = p = p.substr(-9); if (style == 'string') { return str; } oct = ''; s = 0; for (i=0; i<7; i=i+3) { o = p.substr(i, 3); b = 0; if (o.match(/[r]/i)) { b += 4; } if (o.match(/[w]/i)) { b += 2; } if (o.match(/[xs]/i)) { if (o.match(/[xs]/)) { b += 1; } if (o.match(/[s]/i)) { if (i == 0) { s += 4; } else if (i == 3) { s += 2; } } } oct += b.toString(8); } if (s) { oct = s.toString(8) + oct; } } else { p = parseInt(p, 8); oct = p? p.toString(8) : ''; if (!p || style == 'octal') { return oct; } o = p.toString(8); s = 0; if (o.length > 3) { o = o.substr(-4); s = parseInt(o.substr(0, 1), 8); o = o.substr(1); } sticy = ((s & 1) == 1); // not support sgid = ((s & 2) == 2); suid = ((s & 4) == 4); str = ''; for(i=0; i<3; i++) { if ((parseInt(o.substr(i, 1), 8) & 4) == 4) { str += 'r'; } else { str += '-'; } if ((parseInt(o.substr(i, 1), 8) & 2) == 2) { str += 'w'; } else { str += '-'; } if ((parseInt(o.substr(i, 1), 8) & 1) == 1) { str += ((i==0 && suid)||(i==1 && sgid))? 's' : 'x'; } else { str += '-'; } } } if (style == 'both') { return str + ' (' + oct + ')'; } else if (style == 'string') { return str; } else { return oct; } }, /** * Regist this.decodeRawString function * * @return void */ registRawStringDecoder : function(rawStringDecoder) { if (typeof rawStringDecoder === 'function') { this.decodeRawString = this.options.rawStringDecoder = rawStringDecoder; } }, /** * Return boolean that uploadable MIME type into target folder * * @param String mime MIME type * @param String target target folder hash * @return Bool */ uploadMimeCheck : function(mime, target) { target = target || this.cwd().hash; var res = true, // default is allow mimeChecker = this.option('uploadMime', target), allow, deny, check = function(checker) { var ret = false; if (typeof checker === 'string' && checker.toLowerCase() === 'all') { ret = true; } else if (Array.isArray(checker) && checker.length) { $.each(checker, function(i, v) { v = v.toLowerCase(); if (v === 'all' || mime.indexOf(v) === 0) { ret = true; return false; } }); } return ret; }; if (mime && $.isPlainObject(mimeChecker)) { mime = mime.toLowerCase(); allow = check(mimeChecker.allow); deny = check(mimeChecker.deny); if (mimeChecker.firstOrder === 'allow') { res = false; // default is deny if (! deny && allow === true) { // match only allow res = true; } } else { res = true; // default is allow if (deny === true && ! allow) { // match only deny res = false; } } } return res; }, /** * call chained sequence of async deferred functions * * @param Array tasks async functions * @return Object jQuery.Deferred */ sequence : function(tasks) { var l = tasks.length, chain = function(task, idx) { ++idx; if (tasks[idx]) { return chain(task.then(tasks[idx]), idx); } else { return task; } }; if (l > 1) { return chain(tasks[0](), 0); } else { return tasks[0](); } }, /** * Reload contents of target URL for clear browser cache * * @param String url target URL * @return Object jQuery.Deferred */ reloadContents : function(url) { var dfd = $.Deferred(), ifm; try { ifm = $(''; } } } link.remove(); $(iframes) .appendTo('body') .ready(function() { setTimeout(function() { $(iframes).each(function() { $('#' + $(this).attr('id')).remove(); }); }, 20000 + (10000 * i)); // give 20 sec + 10 sec for each file to be saved }); fm.trigger('download', {files : files}); dfrd.resolve(); }); fileCnt = files.length; urls = []; for (i = 0; i < files.length; i++) { fm.openUrl(files[i].hash, true, function(v) { v && urls.push(v); if (--fileCnt < 1) { getUrlDfrd.resolve(urls); } }); } return dfrd; } }; }; /* * File: /js/commands/duplicate.js */ /** * @class elFinder command "duplicate" * Create file/folder copy with suffix "copy Number" * * @type elFinder.command * @author Dmitry (dio) Levashov */ elFinder.prototype.commands.duplicate = function() { var fm = this.fm; this.getstate = function(select) { var sel = this.files(select), cnt = sel.length, filter = function(files) { var fres = true; return $.grep(files, function(f) { fres = fres && f.read && f.phash === fm.cwd().hash && ! fm.isRoot(f)? true : false; return fres; }); }; return cnt && fm.cwd().write && filter(sel).length == cnt ? 0 : -1; }; this.exec = function(hashes) { var fm = this.fm, files = this.files(hashes), cnt = files.length, dfrd = $.Deferred() .fail(function(error) { error && fm.error(error); }), args = []; if (! cnt) { return dfrd.reject(); } $.each(files, function(i, file) { if (!file.read || !fm.file(file.phash).write) { return !dfrd.reject(['errCopy', file.name, 'errPerm']); } }); if (dfrd.state() == 'rejected') { return dfrd; } return fm.request({ data : {cmd : 'duplicate', targets : this.hashes(hashes)}, notify : {type : 'copy', cnt : cnt}, navigate : { toast : { inbuffer : {msg: fm.i18n(['complete', fm.i18n('cmdduplicate')])} } } }); }; }; /* * File: /js/commands/edit.js */ /** * @class elFinder command "edit". * Edit text file in dialog window * * @author Dmitry (dio) Levashov, dio@std42.ru **/ elFinder.prototype.commands.edit = function() { var self = this, fm = this.fm, clsEditing = fm.res('class', 'editing'), mimesSingle = [], mimes = [], allowAll = false, rtrim = function(str){ return str.replace(/\s+$/, ''); }, getEncSelect = function(heads) { var sel = $(''), hval; if (heads) { $.each(heads, function(i, head) { hval = fm.escape(head.value); sel.append(''); }); } $.each(self.options.encodings, function(i, v) { sel.append(''); }); return sel; }, getDlgWidth = function() { var win = fm.options.dialogContained? fm.getUI() : $(window), m, width; if (typeof self.options.dialogWidth === 'string' && (m = self.options.dialogWidth.match(/(\d+)%/))) { width = parseInt(win.width() * (m[1] / 100)); } else { width = parseInt(self.options.dialogWidth || 650); } return Math.min(width, win.width()); }, getDlgHeight = function() { if (!self.options.dialogHeight) { return void(0); } var win = fm.options.dialogContained? fm.getUI() : $(window), m, height; if (typeof self.options.dialogHeight === 'string' && (m = self.options.dialogHeight.match(/(\d+)%/))) { height = parseInt(win.height() * (m[1] / 100)); } else { height = parseInt(self.options.dialogHeight || win.height()); } return Math.min(height, win.height()); }, /** * Return files acceptable to edit * * @param Array files hashes * @return Array **/ filter = function(files) { var cnt = files.length, mime, ext, skip; if (cnt > 1) { mime = files[0].mime; ext = files[0].name.replace(/^.*(\.[^.]+)$/, '$1'); } return $.grep(files, function(file) { var res; if (skip || file.mime === 'directory') { return false; } res = file.read && (allowAll || fm.mimeIsText(file.mime) || $.inArray(file.mime, cnt === 1? mimesSingle : mimes) !== -1) && (!self.onlyMimes.length || $.inArray(file.mime, self.onlyMimes) !== -1) && (cnt === 1 || (file.mime === mime && file.name.substr(ext.length * -1) === ext)) && (fm.uploadMimeCheck(file.mime, file.phash)? true : false) && setEditors(file, cnt) && Object.keys(editors).length; if (!res) { skip = true; } return res; }); }, fileSync = function(hash) { var old = fm.file(hash), f; fm.request({ cmd: 'info', targets: [hash], preventDefault: true }).done(function(data) { var changed; if (data && data.files && data.files.length) { f = data.files[0]; if (old.ts != f.ts || old.size != f.size) { changed = { changed: [ f ] }; fm.updateCache(changed); fm.change(changed); } } }); }, /** * Open dialog with textarea to edit file * * @param String id dialog id * @param Object file file object * @param String content file content * @return $.Deferred **/ dialog = function(id, file, content, encoding, editor, toasts) { var dfrd = $.Deferred(), _loaded = false, loaded = function() { if (!_loaded) { fm.toast({ mode: 'warning', msg: fm.i18n('nowLoading') }); return false; } return true; }, makeToasts = function() { // make toast message if (toasts && Array.isArray(toasts)) { $.each(toasts, function() { this.msg && fm.toast(this); }); } }, save = function() { var encord = selEncoding? selEncoding.val():void(0), saveDfd = $.Deferred().fail(function(err) { dialogNode.show().find('button.elfinder-btncnt-0,button.elfinder-btncnt-1').hide(); }), conf, res, tm; if (!loaded()) { return saveDfd.resolve(); } if (ta.editor) { ta.editor.save(ta[0], ta.editor.instance); conf = ta.editor.confObj; if (conf.info && (conf.info.schemeContent || conf.info.arrayBufferContent)) { encord = 'scheme'; } } res = getContent(); setOld(res); if (res.promise) { tm = setTimeout(function() { fm.notify({ type : 'chkcontent', cnt : 1, hideCnt: true, cancel : function() { res.reject(); } }); }, 100); res.always(function() { tm && clearTimeout(tm); fm.notify({ type : 'chkcontent', cnt: -1 }); }).done(function(data) { dfrd.notifyWith(ta, [encord, ta.data('hash'), old, saveDfd]); }).fail(function(err) { saveDfd.reject(err); }); } else { dfrd.notifyWith(ta, [encord, ta.data('hash'), old, saveDfd]); } return saveDfd; }, saveon = function() { if (!loaded()) { return; } save().fail(function(err) { err && fm.error(err); }); }, cancel = function() { if (!self.options.confirmUnsavedBeforeClose) { ta.elfinderdialog('close'); } else { var close = function() { var conf; dfrd.resolve(); if (ta.editor) { ta.editor.close(ta[0], ta.editor.instance); conf = ta.editor.confObj; if (conf.info && conf.info.syncInterval) { fileSync(file.hash); } } ta.elfinderdialog('destroy'); }, onlySaveAs = (typeof saveAsFile.name !== 'undefined'), accept = onlySaveAs? { label : 'btnSaveAs', callback : function() { requestAnimationFrame(saveAs); } } : { label : 'btnSaveClose', callback : function() { save().done(function() { close(); }); } }; changed().done(function(change) { var msgs = ['confirmNotSave']; var btnDiscard = { label : 'btnDiscard', callback : function() { close(); } } if (change) { if (typeof change === 'string') { msgs.unshift(change); } fm.confirm({ title : self.title, text : msgs, accept : accept, cancel : { label : 'btnCancel', callback : $.noop }, buttons : onlySaveAs? [btnDiscard] : [{ label : 'btnSaveAs', callback : function() { ta.elfinderdialog('destroy'); requestAnimationFrame(saveAs); } }, btnDiscard] }); } else { close(); } }); } }, savecl = function() { if (!loaded()) { return; } dialogNode.hide(); save().done(function() { _loaded = false; dialogNode.show(); cancel(); }).fail(function(err) { dialogNode.show(); err && fm.error(err); }); }, saveAs = function() { if (!loaded()) { return; } var prevOld = old, phash = file.phash, fail = function(err) { dialogs.addClass(clsEditing).fadeIn(function() { err && fm.error(err); }); old = prevOld; fm.disable(); }, make = function() { self.mime = saveAsFile.mime || file.mime; self.prefix = (saveAsFile.name || file.name).replace(/ \d+(\.[^.]+)?$/, '$1'); self.requestCmd = 'mkfile'; self.nextAction = {}; self.data = {target : phash}; fm.res('mixin', 'make').bind(self)() .done(function(data) { var oldHash; if (data.added && data.added.length) { oldHash = ta.data('hash'); ta.data('hash', data.added[0].hash); save().done(function() { _loaded = false; dialogNode.show(); cancel(); dialogs.fadeIn(); }).fail(function() { fm.exec('rm', [data.added[0].hash], { forceRm: true, quiet: true }); ta.data('hash', oldHash); dialogNode.find('button.elfinder-btncnt-2').hide(); fail(); }); } else { fail(); } }) .progress(function(err) { if (err && err === 'errUploadMime') { ta.trigger('saveAsFail'); } }) .fail(fail) .always(function() { delete self.mime; delete self.prefix; delete self.nextAction; delete self.data; }); fm.trigger('unselectfiles', { files: [ file.hash ] }); }, reqOpen = null, reqInfo = null, dialogs = fm.getUI().children('.' + self.dialogClass + ':visible'); if (dialogNode.is(':hidden')) { dialogs = dialogs.add(dialogNode); } dialogs.removeClass(clsEditing).fadeOut(); fm.enable(); if (fm.searchStatus.state < 2 && phash !== fm.cwd().hash) { reqOpen = fm.exec('open', [phash], {thash: phash}); } else if (!fm.file(phash)) { reqInfo = fm.request({cmd: 'info', targets: [phash]}); } $.when([reqOpen, reqInfo]).done(function() { if (reqInfo) { fm.one('infodone', function() { fm.file(phash)? make() : fail('errFolderNotFound'); }); } else { reqOpen? fm.one('cwdrender', make) : make(); } }).fail(fail); }, changed = function() { var dfd = $.Deferred(), res, tm; if (!_loaded) { return dfd.resolve(false); } ta.editor && ta.editor.save(ta[0], ta.editor.instance); res = getContent(); if (res && res.promise) { tm = setTimeout(function() { fm.notify({ type : 'chkcontent', cnt : 1, hideCnt: true, cancel : function() { res.reject(); } }); }, 100); res.always(function() { tm && clearTimeout(tm); fm.notify({ type : 'chkcontent', cnt: -1 }); }).done(function(d) { dfd.resolve(old !== d); }).fail(function(err) { dfd.resolve(err || (old === undefined? false : true)); }); } else { dfd.resolve(old !== res); } return dfd; }, opts = { title : fm.escape(file.name), width : getDlgWidth(), height : getDlgHeight(), buttons : {}, cssClass : clsEditing, maxWidth : 'window', maxHeight : 'window', allowMinimize : true, allowMaximize : true, openMaximized : editorMaximized() || (editor && editor.info && editor.info.openMaximized), btnHoverFocus : false, closeOnEscape : false, propagationEvents : ['mousemove', 'mouseup', 'click'], minimize : function() { var conf; if (ta.editor && dialogNode.closest('.ui-dialog').is(':hidden')) { conf = ta.editor.confObj; if (conf.info && conf.info.syncInterval) { fileSync(file.hash); } } }, headerBtnCloseAction : self.options.confirmUnsavedBeforeClose ? function() { cancel(); } : undefined, close : function() { if (self.options.confirmUnsavedBeforeClose) { return; } var close = function() { var conf; dfrd.resolve(); if (ta.editor) { ta.editor.close(ta[0], ta.editor.instance); conf = ta.editor.confObj; if (conf.info && conf.info.syncInterval) { fileSync(file.hash); } } ta.elfinderdialog('destroy'); }, onlySaveAs = (typeof saveAsFile.name !== 'undefined'), accept = onlySaveAs? { label : 'btnSaveAs', callback : function() { requestAnimationFrame(saveAs); } } : { label : 'btnSaveClose', callback : function() { save().done(function() { close(); }); } }; changed().done(function(change) { var msgs = ['confirmNotSave']; if (change) { if (typeof change === 'string') { msgs.unshift(change); } fm.confirm({ title : self.title, text : msgs, accept : accept, cancel : { label : 'btnClose', callback : close }, buttons : onlySaveAs? null : [{ label : 'btnSaveAs', callback : function() { requestAnimationFrame(saveAs); } }] }); } else { close(); } }); }, open : function() { var loadRes, conf, interval; ta.initEditArea.call(ta, id, file, content, fm); if (ta.editor) { loadRes = ta.editor.load(ta[0]) || null; if (loadRes && loadRes.done) { loadRes.always(function() { _loaded = true; }).done(function(instance) { ta.editor.instance = instance; ta.editor.focus(ta[0], ta.editor.instance); setOld(getContent()); requestAnimationFrame(function() { dialogNode.trigger('resize'); }); }).fail(function(error) { error && fm.error(error); ta.elfinderdialog('destroy'); return; }).always(makeToasts); } else { _loaded = true; if (loadRes && (typeof loadRes === 'string' || Array.isArray(loadRes))) { fm.error(loadRes); ta.elfinderdialog('destroy'); return; } ta.editor.instance = loadRes; ta.editor.focus(ta[0], ta.editor.instance); setOld(getContent()); requestAnimationFrame(function() { dialogNode.trigger('resize'); }); makeToasts(); } conf = ta.editor.confObj; if (conf.info && conf.info.syncInterval) { if (interval = parseInt(conf.info.syncInterval)) { setTimeout(function() { autoSync(interval); }, interval); } } } else { _loaded = true; setOld(getContent()); } }, resize : function(e, data) { ta.editor && ta.editor.resize(ta[0], ta.editor.instance, e, data || {}); } }, getContent = function() { var res = ta.getContent.call(ta, ta[0]); if (res === undefined || res === false || res === null) { res = $.Deferred().reject(); } return res; }, setOld = function(res) { if (res && res.promise) { res.done(function(d) { old = d; }); } else { old = res; } }, autoSync = function(interval) { if (dialogNode.is(':visible')) { fileSync(file.hash); setTimeout(function() { autoSync(interval); }, interval); } }, stateChange = function() { if (selEncoding) { changed().done(function(change) { if (change) { selEncoding.attr('title', fm.i18n('saveAsEncoding')).addClass('elfinder-edit-changed'); } else { selEncoding.attr('title', fm.i18n('openAsEncoding')).removeClass('elfinder-edit-changed'); } }); } }, saveAsFile = {}, ta, old, dialogNode, selEncoding, extEditor, maxW, syncInterval; if (editor) { if (editor.html) { ta = $(editor.html); } extEditor = { init : editor.init || null, load : editor.load, getContent : editor.getContent || null, save : editor.save, beforeclose : typeof editor.beforeclose == 'function' ? editor.beforeclose : void 0, close : typeof editor.close == 'function' ? editor.close : function() {}, focus : typeof editor.focus == 'function' ? editor.focus : function() {}, resize : typeof editor.resize == 'function' ? editor.resize : function() {}, instance : null, doSave : saveon, doCancel : cancel, doClose : savecl, file : file, fm : fm, confObj : editor, trigger : function(evName, data) { fm.trigger('editEditor' + evName, Object.assign({}, editor.info || {}, data)); } }; } if (!ta) { if (!fm.mimeIsText(file.mime)) { return dfrd.reject('errEditorNotFound'); } (function() { ta = $('') .on('input propertychange', stateChange); if (!editor || !editor.info || editor.info.useTextAreaEvent) { ta.on('keydown', function(e) { var code = e.keyCode, value, start; e.stopPropagation(); if (code == $.ui.keyCode.TAB) { e.preventDefault(); // insert tab on tab press if (this.setSelectionRange) { value = this.value; start = this.selectionStart; this.value = value.substr(0, start) + "\t" + value.substr(this.selectionEnd); start += 1; this.setSelectionRange(start, start); } } if (e.ctrlKey || e.metaKey) { // close on ctrl+w/q if (code == 'Q'.charCodeAt(0) || code == 'W'.charCodeAt(0)) { e.preventDefault(); cancel(); } if (code == 'S'.charCodeAt(0)) { e.preventDefault(); saveon(); } } }) .on('mouseenter', function(){this.focus();}); } ta.initEditArea = function(id, file, content) { // ta.hide() for performance tune. Need ta.show() in `load()` if use textarea node. ta.hide().val(content); this._setupSelEncoding(content); }; })(); } // extended function to setup selector of encoding for text editor ta._setupSelEncoding = function(content) { var heads = (encoding && encoding !== 'unknown')? [{value: encoding}] : [], wfake = $('').hide(), setSelW = function(init) { init && wfake.appendTo(selEncoding.parent()); wfake.empty().append($('').text(selEncoding.val())); selEncoding.width(wfake.width()); }; if (content === '' || ! encoding || encoding !== 'UTF-8') { heads.push({value: 'UTF-8'}); } selEncoding = getEncSelect(heads).on('touchstart', function(e) { // for touch punch event handler e.stopPropagation(); }).on('change', function() { // reload to change encoding if not edited changed().done(function(change) { if (! change && getContent() !== '') { cancel(); edit(file, selEncoding.val(), editor).fail(function(err) { err && fm.error(err); }); } }); setSelW(); }).on('mouseover', stateChange); ta.parent().next().prepend($('
          ').append(selEncoding)); setSelW(true); }; ta.data('hash', file.hash); if (extEditor) { ta.editor = extEditor; if (typeof extEditor.beforeclose === 'function') { opts.beforeclose = function() { return extEditor.beforeclose(ta[0], extEditor.instance); }; } if (typeof extEditor.init === 'function') { ta.initEditArea = extEditor.init; } if (typeof extEditor.getContent === 'function') { ta.getContent = extEditor.getContent; } } if (! ta.initEditArea) { ta.initEditArea = function() {}; } if (! ta.getContent) { ta.getContent = function() { return rtrim(ta.val()); }; } if (!editor || !editor.info || !editor.info.preventGet) { opts.buttons[fm.i18n('btnSave')] = saveon; opts.buttons[fm.i18n('btnSaveClose')] = savecl; opts.buttons[fm.i18n('btnSaveAs')] = saveAs; opts.buttons[fm.i18n('btnCancel')] = cancel; } if (editor && typeof editor.prepare === 'function') { editor.prepare(ta, opts, file); } dialogNode = self.fmDialog(ta, opts) .attr('id', id) .on('keydown keyup keypress', function(e) { e.stopPropagation(); }) .css({ overflow: 'hidden', minHeight: '7em' }) .addClass('elfinder-edit-editor') .closest('.ui-dialog') .on('changeType', function(e, data) { if (data.extention && data.mime) { var ext = data.extention, mime = data.mime, btnSet = $(this).children('.ui-dialog-buttonpane').children('.ui-dialog-buttonset'); btnSet.children('.elfinder-btncnt-0,.elfinder-btncnt-1').hide(); saveAsFile.name = fm.splitFileExtention(file.name)[0] + '.' + data.extention; saveAsFile.mime = data.mime; if (!data.keepEditor) { btnSet.children('.elfinder-btncnt-2').trigger('click'); } } }); // care to viewport scale change with mobile devices maxW = (fm.options.dialogContained? fm.getUI() : $(window)).width(); (dialogNode.width() > maxW) && dialogNode.width(maxW); return dfrd.promise(); }, /** * Get file content and * open dialog with textarea to edit file content * * @param String file hash * @return jQuery.Deferred **/ edit = function(file, convert, editor) { var hash = file.hash, opts = fm.options, dfrd = $.Deferred(), id = 'edit-'+fm.namespace+'-'+file.hash, d = fm.getUI().find('#'+id), conv = !convert? 0 : convert, noContent = false, req, error, res; if (d.length) { d.elfinderdialog('toTop'); return dfrd.resolve(); } if (!file.read || (!file.write && (!editor.info || !editor.info.converter))) { error = ['errOpen', file.name, 'errPerm']; return dfrd.reject(error); } if (editor && editor.info) { if (typeof editor.info.edit === 'function') { res = editor.info.edit.call(fm, file, editor); if (res.promise) { res.done(function() { dfrd.resolve(); }).fail(function(error) { dfrd.reject(error); }); } else { res? dfrd.resolve() : dfrd.reject(); } return dfrd; } noContent = editor.info.preventGet || editor.info.noContent; if (editor.info.urlAsContent || noContent) { req = $.Deferred(); if (editor.info.urlAsContent) { fm.url(hash, { async: true, onetime: true, temporary: true }).done(function(url) { req.resolve({content: url}); }); } else { req.resolve({}); } } else { if (conv) { file.encoding = conv; fm.cache(file, 'change'); } req = fm.request({ data : {cmd : 'get', target : hash, conv : conv, _t : file.ts}, options : {type: 'get', cache : true}, notify : {type : 'file', cnt : 1}, preventDefault : true }); } req.done(function(data) { var selEncoding, reg, m, res; if (data.doconv) { fm.confirm({ title : self.title, text : data.doconv === 'unknown'? 'confirmNonUTF8' : 'confirmConvUTF8', accept : { label : 'btnConv', callback : function() { dfrd = edit(file, selEncoding.val(), editor); } }, cancel : { label : 'btnCancel', callback : function() { dfrd.reject(); } }, optionsCallback : function(options) { options.create = function() { var base = $('
          '), head = {value: data.doconv}, detected; if (data.doconv === 'unknown') { head.caption = '-'; } selEncoding = getEncSelect([head]); $(this).next().find('.ui-dialog-buttonset') .prepend(base.append($('').append(selEncoding))); }; } }); } else { if (!noContent && fm.mimeIsText(file.mime)) { reg = new RegExp('^(data:'+file.mime.replace(/([.+])/g, '\\$1')+';base64,)', 'i'); if (!editor.info.dataScheme) { if (window.atob && (m = data.content.match(reg))) { data.content = atob(data.content.substr(m[1].length)); } } else { if (window.btoa && !data.content.match(reg)) { data.content = 'data:'+file.mime+';base64,'+btoa(data.content); } } } dialog(id, file, data.content, data.encoding, editor, data.toasts) .done(function(data) { dfrd.resolve(data); }) .progress(function(encoding, newHash, data, saveDfd) { var ta = this; if (newHash) { hash = newHash; } fm.request({ options : {type : 'post'}, data : { cmd : 'put', target : hash, encoding : encoding || data.encoding, content : data }, notify : {type : 'save', cnt : 1}, syncOnFail : true, preventFail : true, navigate : { target : 'changed', toast : { inbuffer : {msg: fm.i18n(['complete', fm.i18n('btnSave')])} } } }) .fail(function(error) { dfrd.reject(error); saveDfd.reject(); }) .done(function(data) { requestAnimationFrame(function(){ ta.trigger('focus'); ta.editor && ta.editor.focus(ta[0], ta.editor.instance); }); saveDfd.resolve(); }); }) .fail(function(error) { dfrd.reject(error); }); } }) .fail(function(error) { var err = fm.parseError(error); err = Array.isArray(err)? err[0] : err; if (file.encoding) { file.encoding = ''; fm.cache(file, 'change'); } (err !== 'errConvUTF8') && fm.sync(); dfrd.reject(error); }); } return dfrd.promise(); }, /** * Current editors of selected files * * @type Object */ editors = {}, /** * Fallback editor (Simple text editor) * * @type Object */ fallbackEditor = { // Simple Text (basic textarea editor) info : { id : 'textarea', name : 'TextArea', useTextAreaEvent : true }, load : function(textarea) { // trigger event 'editEditorPrepare' this.trigger('Prepare', { node: textarea, editorObj: void(0), instance: void(0), opts: {} }); textarea.setSelectionRange && textarea.setSelectionRange(0, 0); $(textarea).trigger('focus').show(); }, save : function(){} }, /** * Set current editors * * @param Object file object * @param Number cnt count of selected items * @return Void */ setEditors = function(file, cnt) { var mimeMatch = function(fileMime, editorMimes){ if (!editorMimes) { return fm.mimeIsText(fileMime); } else { if (editorMimes[0] === '*' || $.inArray(fileMime, editorMimes) !== -1) { return true; } var i, l; l = editorMimes.length; for (i = 0; i < l; i++) { if (fileMime.indexOf(editorMimes[i]) === 0) { return true; } } return false; } }, extMatch = function(fileName, editorExts){ if (!editorExts || !editorExts.length) { return true; } var ext = fileName.replace(/^.+\.([^.]+)|(.+)$/, '$1$2').toLowerCase(), i, l; l = editorExts.length; for (i = 0; i < l; i++) { if (ext === editorExts[i].toLowerCase()) { return true; } } return false; }, optEditors = self.options.editors || [], cwdWrite = fm.cwd().write; stored = fm.storage('storedEditors') || {}; editors = {}; if (!optEditors.length) { optEditors = [fallbackEditor]; } $.each(optEditors, function(i, editor) { var name; if ((cnt === 1 || !editor.info.single) && ((!editor.info || !editor.info.converter)? file.write : cwdWrite) && (file.size > 0 || (!editor.info.converter && editor.info.canMakeEmpty !== false && fm.mimesCanMakeEmpty[file.mime])) && (!editor.info.maxSize || file.size <= editor.info.maxSize) && mimeMatch(file.mime, editor.mimes || null) && extMatch(file.name, editor.exts || null) && typeof editor.load == 'function' && typeof editor.save == 'function') { name = editor.info.name? editor.info.name : ('Editor ' + i); editor.id = editor.info.id? editor.info.id : ('editor' + i), editor.name = name; editor.i18n = fm.i18n(name); editors[editor.id] = editor; } }); return Object.keys(editors).length? true : false; }, store = function(mime, editor) { if (mime && editor) { if (!$.isPlainObject(stored)) { stored = {}; } stored[mime] = editor.id; fm.storage('storedEditors', stored); fm.trigger('selectfiles', {files : fm.selected()}); } }, useStoredEditor = function() { var d = fm.storage('useStoredEditor'); return d? (d > 0) : self.options.useStoredEditor; }, editorMaximized = function() { var d = fm.storage('editorMaximized'); return d? (d > 0) : self.options.editorMaximized; }, getSubMenuRaw = function(files, callback) { var subMenuRaw = []; $.each(editors, function(id, ed) { subMenuRaw.push( { label : fm.escape(ed.i18n), icon : ed.info && ed.info.icon? ed.info.icon : 'edit', options : { iconImg: ed.info && ed.info.iconImg? fm.baseUrl + ed.info.iconImg : void(0) }, callback : function() { store(files[0].mime, ed); callback && callback.call(ed); } } ); }); return subMenuRaw; }, getStoreId = function(name) { // for compatibility to previous version return name.toLowerCase().replace(/ +/g, ''); }, getStoredEditor = function(mime) { var name = stored[mime]; return name && Object.keys(editors).length? editors[getStoreId(name)] : void(0); }, infoRequest = function() { }, stored; // make public method this.getEncSelect = getEncSelect; this.shortcuts = [{ pattern : 'ctrl+e' }]; this.init = function() { var self = this, fm = this.fm, opts = this.options, cmdChecks = [], ccData, dfd; this.onlyMimes = this.options.mimes || []; fm.one('open', function() { // editors setup if (opts.editors && Array.isArray(opts.editors)) { fm.trigger('canMakeEmptyFile', {mimes: Object.keys(fm.storage('mkfileTextMimes') || {}).concat(opts.makeTextMimes || ['text/plain'])}); $.each(opts.editors, function(i, editor) { if (editor.info && editor.info.cmdCheck) { cmdChecks.push(editor.info.cmdCheck); } }); if (cmdChecks.length) { if (fm.api >= 2.1030) { dfd = fm.request({ data : { cmd: 'editor', name: cmdChecks, method: 'enabled' }, preventDefault : true }).done(function(d) { ccData = d; }).fail(function() { ccData = {}; }); } else { ccData = {}; dfd = $.Deferred().resolve(); } } else { dfd = $.Deferred().resolve(); } dfd.always(function() { if (ccData) { opts.editors = $.grep(opts.editors, function(e) { if (e.info && e.info.cmdCheck) { return ccData[e.info.cmdCheck]? true : false; } else { return true; } }); } $.each(opts.editors, function(i, editor) { if (editor.setup && typeof editor.setup === 'function') { editor.setup.call(editor, opts, fm); } if (!editor.disabled) { if (editor.mimes && Array.isArray(editor.mimes)) { mimesSingle = mimesSingle.concat(editor.mimes); if (!editor.info || !editor.info.single) { mimes = mimes.concat(editor.mimes); } } if (!allowAll && editor.mimes && editor.mimes[0] === '*') { allowAll = true; } if (!editor.info) { editor.info = {}; } if (editor.info.integrate) { fm.trigger('helpIntegration', Object.assign({cmd: 'edit'}, editor.info.integrate)); } if (editor.info.canMakeEmpty) { fm.trigger('canMakeEmptyFile', {mimes: Array.isArray(editor.info.canMakeEmpty)? editor.info.canMakeEmpty : editor.mimes}); } } }); mimesSingle = ($.uniqueSort || $.unique)(mimesSingle); mimes = ($.uniqueSort || $.unique)(mimes); opts.editors = $.grep(opts.editors, function(e) { return e.disabled? false : true; }); }); } }) .bind('select', function() { editors = null; }) .bind('contextmenucreate', function(e) { var file, editor, single = function(editor) { var title = self.title; fm.one('contextmenucreatedone', function() { self.title = title; }); self.title = fm.escape(editor.i18n); if (editor.info && editor.info.iconImg) { self.contextmenuOpts = { iconImg: fm.baseUrl + editor.info.iconImg }; } delete self.variants; }; self.contextmenuOpts = void(0); if (e.data.type === 'files' && self.enabled()) { file = fm.file(e.data.targets[0]); if (setEditors(file, e.data.targets.length)) { if (Object.keys(editors).length > 1) { if (!useStoredEditor() || !(editor = getStoredEditor(file.mime))) { delete self.extra; self.variants = []; $.each(editors, function(id, editor) { self.variants.push([{ editor: editor }, editor.i18n, editor.info && editor.info.iconImg? fm.baseUrl + editor.info.iconImg : 'edit']); }); } else { single(editor); self.extra = { icon: 'menu', node: $('') .attr({title: fm.i18n('select')}) .on('click touchstart', function(e){ if (e.type === 'touchstart' && e.originalEvent.touches.length > 1) { return; } var node = $(this); e.stopPropagation(); e.preventDefault(); fm.trigger('contextmenu', { raw: getSubMenuRaw(fm.selectedFiles(), function() { var hashes = fm.selected(); fm.exec('edit', hashes, {editor: this}); fm.trigger('selectfiles', {files : hashes}); }), x: node.offset().left, y: node.offset().top }); }) }; } } else { single(editors[Object.keys(editors)[0]]); delete self.extra; } } } }) .bind('canMakeEmptyFile', function(e) { if (e.data && e.data.resetTexts) { var defs = fm.arrayFlip(self.options.makeTextMimes || ['text/plain']), hides = self.getMkfileHides(); $.each((fm.storage('mkfileTextMimes') || {}), function(mime, type) { if (!defs[mime]) { delete fm.mimesCanMakeEmpty[mime]; delete hides[mime]; } }); fm.storage('mkfileTextMimes', null); if (Object.keys(hides).length) { fm.storage('mkfileHides', hides); } else { fm.storage('mkfileHides', null); } } }); }; this.getstate = function(select) { var sel = this.files(select), cnt = sel.length; return cnt && filter(sel).length == cnt ? 0 : -1; }; this.exec = function(select, opts) { var fm = this.fm, files = filter(this.files(select)), hashes = $.map(files, function(f) { return f.hash; }), list = [], editor = opts && opts.editor? opts.editor : null, node = $(opts && opts._currentNode? opts._currentNode : fm.cwdHash2Elm(hashes[0])), getEditor = function() { var dfd = $.Deferred(), storedId; if (!editor && Object.keys(editors).length > 1) { if (useStoredEditor() && (editor = getStoredEditor(files[0].mime))) { return dfd.resolve(editor); } fm.trigger('contextmenu', { raw: getSubMenuRaw(files, function() { dfd.resolve(this); }), x: node.offset().left, y: node.offset().top + 22, opened: function() { fm.one('closecontextmenu',function() { requestAnimationFrame(function() { if (dfd.state() === 'pending') { dfd.reject(); } }); }); } }); fm.trigger('selectfiles', {files : hashes}); return dfd; } else { Object.keys(editors).length > 1 && editor && store(files[0].mime, editor); return dfd.resolve(editor? editor : (Object.keys(editors).length? editors[Object.keys(editors)[0]] : null)); } }, dfrd = $.Deferred(), file; if (editors === null) { setEditors(files[0], hashes.length); } if (!node.length) { node = fm.getUI('cwd'); } getEditor().done(function(editor) { while ((file = files.shift())) { list.push(edit(file, (file.encoding || void(0)), editor).fail(function(error) { error && fm.error(error); })); } if (list.length) { $.when.apply(null, list).done(function() { dfrd.resolve(); }).fail(function() { dfrd.reject(); }); } else { dfrd.reject(); } }).fail(function() { dfrd.reject(); }); return dfrd; }; this.getMkfileHides = function() { return fm.storage('mkfileHides') || fm.arrayFlip(self.options.mkfileHideMimes || []); }; }; /* * File: /js/commands/empty.js */ /** * @class elFinder command "empty". * Empty the folder * * @type elFinder.command * @author Naoki Sawada */ elFinder.prototype.commands.empty = function() { var self, fm, selFiles = function(select) { var sel = self.files(select); if (!sel.length) { sel = [ fm.cwd() ]; } return sel; }; this.linkedCmds = ['rm']; this.init = function() { // lazy assign to make possible to become superclass self = this; fm = this.fm; }; this.getstate = function(select) { var sel = selFiles(select), cnt, filter = function(files) { var fres = true; return $.grep(files, function(f) { fres = fres && f.read && f.write && f.mime === 'directory' ? true : false; return fres; }); }; cnt = sel.length; return filter(sel).length == cnt ? 0 : -1; }; this.exec = function(hashes) { var dirs = selFiles(hashes), cnt = dirs.length, dfrd = $.Deferred() .done(function() { var data = {changed: {}}; fm.toast({msg: fm.i18n(['"'+success.join('", ')+'"', 'complete', fm.i18n('cmdempty')])}); $.each(dirs, function(i, dir) { data.changed[dir.hash] = dir; }); fm.change(data); }) .always(function() { var cwd = fm.cwd().hash; fm.trigger('selectfiles', {files: $.map(dirs, function(d) { return cwd === d.phash? d.hash : null; })}); }), success = [], done = function(res) { if (typeof res === 'number') { success.push(dirs[res].name); delete dirs[res].dirs; } else { res && fm.error(res); } (--cnt < 1) && dfrd[success.length? 'resolve' : 'reject'](); }; $.each(dirs, function(i, dir) { var tm; if (!(dir.write && dir.mime === 'directory')) { done(['errEmpty', dir.name, 'errPerm']); return null; } if (!fm.isCommandEnabled('rm', dir.hash)) { done(['errCmdNoSupport', '"rm"']); return null; } tm = setTimeout(function() { fm.notify({type : 'search', cnt : 1, hideCnt : cnt > 1? false : true}); }, fm.notifyDelay); fm.request({ data : {cmd : 'open', target : dir.hash}, preventDefault : true, asNotOpen : true }).done(function(data) { var targets = []; tm && clearTimeout(tm); if (fm.ui.notify.children('.elfinder-notify-search').length) { fm.notify({type : 'search', cnt : -1, hideCnt : cnt > 1? false : true}); } if (data && data.files && data.files.length) { if (data.files.length > fm.maxTargets) { done(['errEmpty', dir.name, 'errMaxTargets', fm.maxTargets]); } else { fm.updateCache(data); $.each(data.files, function(i, f) { if (!f.write || f.locked) { done(['errEmpty', dir.name, 'errRm', f.name, 'errPerm']); targets = []; return false; } targets.push(f.hash); }); if (targets.length) { fm.exec('rm', targets, { _userAction : true, addTexts : [ fm.i18n('folderToEmpty', dir.name) ] }) .fail(function(error) { fm.trigger('unselectfiles', {files: fm.selected()}); done(fm.parseError(error) || ''); }) .done(function() { done(i); }); } } } else { fm.toast({ mode: 'warning', msg: fm.i18n('filderIsEmpty', dir.name)}); done(''); } }).fail(function(error) { done(fm.parseError(error) || ''); }); }); return dfrd; }; }; /* * File: /js/commands/extract.js */ /** * @class elFinder command "extract" * Extract files from archive * * @author Dmitry (dio) Levashov **/ elFinder.prototype.commands.extract = function() { var self = this, fm = self.fm, mimes = [], filter = function(files) { var fres = true; return $.grep(files, function(file) { fres = fres && file.read && $.inArray(file.mime, mimes) !== -1 ? true : false; return fres; }); }; this.variants = []; this.disableOnSearch = true; // Update mimes list on open/reload fm.bind('open reload', function() { mimes = fm.option('archivers')['extract'] || []; if (fm.api > 2) { self.variants = [[{makedir: true}, fm.i18n('cmdmkdir')], [{}, fm.i18n('btnCwd')]]; } else { self.variants = [[{}, fm.i18n('btnCwd')]]; } self.change(); }); this.getstate = function(select) { var sel = this.files(select), cnt = sel.length, cwdHash, cwdChk; if (!cnt || filter(sel).length != cnt) { return -1; } else if (fm.searchStatus.state > 0) { cwdHash = this.fm.cwd().hash; $.each(sel, function(i, file) { cwdChk = (file.phash === cwdHash); return cwdChk; }); return cwdChk? 0 : -1; } else { return this.fm.cwd().write? 0 : -1; } }; this.exec = function(hashes, opts) { var files = this.files(hashes), dfrd = $.Deferred(), cnt = files.length, makedir = opts && opts.makedir ? 1 : 0, i, error, decision, overwriteAll = false, omitAll = false, mkdirAll = 0, siblings = fm.files(files[0].phash), names = [], map = {}; $.each(siblings, function(id, file) { map[file.name] = file; names.push(file.name); }); var decide = function(decision) { switch (decision) { case 'overwrite_all' : overwriteAll = true; break; case 'omit_all': omitAll = true; break; } }; var unpack = function(file) { if (!(file.read && fm.file(file.phash).write)) { error = ['errExtract', file.name, 'errPerm']; fm.error(error); dfrd.reject(error); } else if ($.inArray(file.mime, mimes) === -1) { error = ['errExtract', file.name, 'errNoArchive']; fm.error(error); dfrd.reject(error); } else { fm.request({ data:{cmd:'extract', target:file.hash, makedir:makedir}, notify:{type:'extract', cnt:1}, syncOnFail:true, navigate:{ toast : makedir? { incwd : {msg: fm.i18n(['complete', fm.i18n('cmdextract')]), action: {cmd: 'open', msg: 'cmdopen'}}, inbuffer : {msg: fm.i18n(['complete', fm.i18n('cmdextract')]), action: {cmd: 'open', msg: 'cmdopen'}} } : { inbuffer : {msg: fm.i18n(['complete', fm.i18n('cmdextract')])} } } }) .fail(function (error) { if (dfrd.state() != 'rejected') { dfrd.reject(error); } }) .done(function () { }); } }; var confirm = function(files, index) { var file = files[index], name = fm.splitFileExtention(file.name)[0], existed = ($.inArray(name, names) >= 0), next = function(){ if((index+1) < cnt) { confirm(files, index+1); } else { dfrd.resolve(); } }; if (!makedir && existed && map[name].mime != 'directory') { fm.confirm( { title : fm.i18n('ntfextract'), text : ['errExists', name, 'confirmRepl'], accept:{ label : 'btnYes', callback:function (all) { decision = all ? 'overwrite_all' : 'overwrite'; decide(decision); if(!overwriteAll && !omitAll) { if('overwrite' == decision) { unpack(file); } if((index+1) < cnt) { confirm(files, index+1); } else { dfrd.resolve(); } } else if(overwriteAll) { for (i = index; i < cnt; i++) { unpack(files[i]); } dfrd.resolve(); } } }, reject : { label : 'btnNo', callback:function (all) { decision = all ? 'omit_all' : 'omit'; decide(decision); if(!overwriteAll && !omitAll && (index+1) < cnt) { confirm(files, index+1); } else if (omitAll) { dfrd.resolve(); } } }, cancel : { label : 'btnCancel', callback:function () { dfrd.resolve(); } }, all : ((index+1) < cnt) } ); } else if (!makedir) { if (mkdirAll == 0) { fm.confirm({ title : fm.i18n('cmdextract'), text : [fm.i18n('cmdextract')+' "'+file.name+'"', 'confirmRepl'], accept:{ label : 'btnYes', callback:function (all) { all && (mkdirAll = 1); unpack(file); next(); } }, reject : { label : 'btnNo', callback:function (all) { all && (mkdirAll = -1); next(); } }, cancel : { label : 'btnCancel', callback:function () { dfrd.resolve(); } }, all : ((index+1) < cnt) }); } else { (mkdirAll > 0) && unpack(file); next(); } } else { unpack(file); next(); } }; if (!(this.enabled() && cnt && mimes.length)) { return dfrd.reject(); } if(cnt > 0) { confirm(files, 0); } return dfrd; }; }; /* * File: /js/commands/forward.js */ /** * @class elFinder command "forward" * Open next visited folder * * @author Dmitry (dio) Levashov **/ (elFinder.prototype.commands.forward = function() { this.alwaysEnabled = true; this.updateOnSelect = true; this.shortcuts = [{ pattern : 'ctrl+right' }]; this.getstate = function() { return this.fm.history.canForward() ? 0 : -1; }; this.exec = function() { return this.fm.history.forward(); }; }).prototype = { forceLoad : true }; // this is required command /* * File: /js/commands/fullscreen.js */ /** * @class elFinder command "fullscreen" * elFinder node to full scrren mode * * @author Naoki Sawada **/ elFinder.prototype.commands.fullscreen = function() { var self = this, fm = this.fm, update = function(e, data) { var full; e.preventDefault(); e.stopPropagation(); if (data && data.fullscreen) { full = (data.fullscreen === 'on'); self.update(void(0), full); self.title = fm.i18n(full ? 'reinstate' : 'cmdfullscreen'); } }; this.alwaysEnabled = true; this.updateOnSelect = false; this.syncTitleOnChange = true; this.value = false; this.options = { ui : 'fullscreenbutton' }; this.getstate = function() { return 0; }; this.exec = function() { var node = fm.getUI().get(0), full = (node === fm.toggleFullscreen(node)); self.title = fm.i18n(full ? 'reinstate' : 'cmdfullscreen'); self.update(void(0), full); return $.Deferred().resolve(); }; fm.bind('init', function() { fm.getUI().off('resize.' + fm.namespace, update).on('resize.' + fm.namespace, update); }); }; /* * File: /js/commands/getfile.js */ /** * @class elFinder command "getfile". * Return selected files info into outer callback. * For use elFinder with wysiwyg editors etc. * * @author Dmitry (dio) Levashov, dio@std42.ru **/ (elFinder.prototype.commands.getfile = function() { var self = this, fm = this.fm, filter = function(files) { var o = self.options, fres = true; files = $.grep(files, function(file) { fres = fres && (file.mime != 'directory' || o.folders) && file.read ? true : false; return fres; }); return o.multiple || files.length == 1 ? files : []; }; this.alwaysEnabled = true; this.callback = fm.options.getFileCallback; this._disabled = typeof(this.callback) == 'function'; this.getstate = function(select) { var sel = this.files(select), cnt = sel.length; return this.callback && cnt && filter(sel).length == cnt ? 0 : -1; }; this.exec = function(hashes) { var fm = this.fm, opts = this.options, files = this.files(hashes), cnt = files.length, url = fm.option('url'), tmb = fm.option('tmbUrl'), dfrd = $.Deferred() .done(function(data) { var res, done = function() { if (opts.oncomplete == 'close') { fm.hide(); } else if (opts.oncomplete == 'destroy') { fm.destroy(); } }, fail = function(error) { if (opts.onerror == 'close') { fm.hide(); } else if (opts.onerror == 'destroy') { fm.destroy(); } else { error && fm.error(error); } }; fm.trigger('getfile', {files : data}); try { res = self.callback(data, fm); } catch(e) { fail(['Error in `getFileCallback`.', e.message]); return; } if (typeof res === 'object' && typeof res.done === 'function') { res.done(done).fail(fail); } else { done(); } }), result = function(file) { return opts.onlyURL ? opts.multiple ? $.map(files, function(f) { return f.url; }) : files[0].url : opts.multiple ? files : files[0]; }, req = [], i, file, dim; for (i = 0; i < cnt; i++) { file = files[i]; if (file.mime == 'directory' && !opts.folders) { return dfrd.reject(); } file.baseUrl = url; if (file.url == '1') { req.push(fm.request({ data : {cmd : 'url', target : file.hash}, notify : {type : 'url', cnt : 1, hideCnt : true}, preventDefault : true }) .done(function(data) { if (data.url) { var rfile = fm.file(this.hash); rfile.url = this.url = data.url; } }.bind(file))); } else { file.url = fm.url(file.hash); } if (! opts.onlyURL) { if (opts.getPath) { file.path = fm.path(file.hash); if (file.path === '' && file.phash) { // get parents (function() { var dfd = $.Deferred(); req.push(dfd); fm.path(file.hash, false, {}) .done(function(path) { file.path = path; }) .fail(function() { file.path = ''; }) .always(function() { dfd.resolve(); }); })(); } } if (file.tmb && file.tmb != 1) { file.tmb = tmb + file.tmb; } if (!file.width && !file.height) { if (file.dim) { dim = file.dim.split('x'); file.width = dim[0]; file.height = dim[1]; } else if (opts.getImgSize && file.mime.indexOf('image') !== -1) { req.push(fm.request({ data : {cmd : 'dim', target : file.hash}, notify : {type : 'dim', cnt : 1, hideCnt : true}, preventDefault : true }) .done(function(data) { if (data.dim) { var dim = data.dim.split('x'); var rfile = fm.file(this.hash); rfile.width = this.width = dim[0]; rfile.height = this.height = dim[1]; } }.bind(file))); } } } } if (req.length) { $.when.apply(null, req).always(function() { dfrd.resolve(result(files)); }); return dfrd; } return dfrd.resolve(result(files)); }; }).prototype = { forceLoad : true }; // this is required command /* * File: /js/commands/help.js */ /** * @class elFinder command "help" * "About" dialog * * @author Dmitry (dio) Levashov **/ (elFinder.prototype.commands.help = function() { var fm = this.fm, self = this, linktpl = '', linktpltgt = '', atpl = '
          {author}
          {work}
          ', url = /\{url\}/, link = /\{link\}/, author = /\{author\}/, work = /\{work\}/, r = 'replace', prim = 'ui-priority-primary', sec = 'ui-priority-secondary', lic = 'elfinder-help-license', tab = '
        • {title}
        • ', html = ['
          ', '
            '], stpl = '
            {pattern}
            {descrip}
            ', sep = '
            ', selfUrl = $('base').length? fm.escape(document.location.href.replace(/#.*$/, '')) : '', clTabActive = fm.res('class', 'tabsactive'), getTheme = function() { var src; if (fm.theme && fm.theme.author) { src = atpl[r]('elfinder-help-team', 'elfinder-help-team elfinder-help-term-theme')[r](author, fm.i18n(fm.theme.author) + (fm.theme.email? ' <'+fm.theme.email+'>' : ''))[r](work, fm.i18n('theme') + ' ('+fm.i18n(fm.theme.name)+')'); } else { src = ''; } return src; }, about = function() { html.push('
            '); html.push('

            elFinder

            '); html.push('
            '+fm.i18n('webfm')+'
            '); html.push('
            '+fm.i18n('ver')+': '+fm.version+'
            '); html.push('
            '+fm.i18n('protocolver')+':
            '); html.push('
            jQuery/jQuery UI: '+$().jquery+'/'+$.ui.version+'
            '); html.push(sep); html.push(linktpltgt[r](url, 'https://studio-42.github.io/elFinder/')[r](link, fm.i18n('homepage'))); html.push(linktpltgt[r](url, 'https://github.com/Studio-42/elFinder/wiki')[r](link, fm.i18n('docs'))); html.push(linktpltgt[r](url, 'https://github.com/Studio-42/elFinder')[r](link, fm.i18n('github'))); //html.push(linktpltgt[r](url, 'http://twitter.com/elrte_elfinder')[r](link, fm.i18n('twitter'))); html.push(sep); html.push('
            '+fm.i18n('team')+'
            '); html.push(atpl[r](author, 'Dmitry "dio" Levashov <dio@std42.ru>')[r](work, fm.i18n('chiefdev'))); html.push(atpl[r](author, 'Naoki Sawada (nao-pon)<hypweb+elfinder@gmail.com>')[r](work, fm.i18n('developer'))); html.push(atpl[r](author, 'Troex Nevelin <troex@fury.scancode.ru>')[r](work, fm.i18n('maintainer'))); html.push(atpl[r](author, 'Alexey Sukhotin <strogg@yandex.ru>')[r](work, fm.i18n('contributor'))); if (fm.i18[fm.lang].translator) { $.each(fm.i18[fm.lang].translator.split(', '), function() { html.push(atpl[r](author, this.trim())[r](work, fm.i18n('translator')+' ('+fm.i18[fm.lang].language+')')); }); } html.push(getTheme()); html.push(sep); html.push('
            '+fm.i18n('icons')+': Pixelmixer, Fugue, Icons8
            '); html.push(sep); html.push('
            Licence: 3-clauses BSD Licence
            '); html.push('
            Copyright © 2009-2024, Studio 42 / nao-pon
            '); html.push('
            „ …'+fm.i18n('dontforget')+' �
            '); html.push('
            '); }, shortcuts = function() { var sh = fm.shortcuts(); // shortcuts tab html.push('
            '); if (sh.length) { html.push('
            '); $.each(sh, function(i, s) { html.push(stpl.replace(/\{pattern\}/, s[0]).replace(/\{descrip\}/, s[1])); }); html.push('
            '); } else { html.push('
            '+fm.i18n('shortcutsof')+'
            '); } html.push('
            '); }, help = function() { // help tab html.push('
            '); html.push('DON\'T PANIC'); html.push('
            '); // end help }, useInteg = false, integrations = function() { useInteg = true; html.push('
            '); }, useDebug = false, debug = function() { useDebug = true; // debug tab html.push('
            '); html.push('
              '); html.push('
              '); // end debug }, debugRender = function() { var render = function(elm, obj) { $.each(obj, function(k, v) { elm.append($('
              ').text(k)); if (typeof v === 'undefined') { elm.append($('
              ').append($('').text('undfined'))); } else if (typeof v === 'object' && !v) { elm.append($('
              ').append($('').text('null'))); } else if (typeof v === 'object' && ($.isPlainObject(v) || v.length)) { elm.append( $('
              ').append(render($('
              '), v))); } else { elm.append($('
              ').append($('').text((v && typeof v === 'object')? '[]' : (v? v : '""')))); } }); return elm; }, cnt = debugUL.children('li').length, targetL, target, tabId, info, lastUL, lastDIV; if (self.debug.options || self.debug.debug) { if (cnt >= 5) { lastUL = debugUL.children('li:last'); lastDIV = debugDIV.children('div:last'); if (lastDIV.is(':hidden')) { lastUL.remove(); lastDIV.remove(); } else { lastUL.prev().remove(); lastDIV.prev().remove(); } } tabId = fm.namespace + '-help-debug-' + (+new Date()); targetL = $('
            • ').html(''+self.debug.debug.cmd+'').prependTo(debugUL); target = $('
              ').data('debug', self.debug); targetL.on('click.debugrender', function() { var debug = target.data('debug'); target.removeData('debug'); if (debug) { target.hide(); if (debug.debug) { info = $('
              ').append($('').text('debug'), render($('
              '), debug.debug)); target.append(info); } if (debug.options) { info = $('
              ').append($('').text('options'), render($('
              '), debug.options)); target.append(info); } target.show(); } targetL.off('click.debugrender'); }); debugUL.after(target); opened && debugDIV.tabs('refresh'); } }, content = '', opened, tabInteg, integDIV, tabDebug, debugDIV, debugUL; this.alwaysEnabled = true; this.updateOnSelect = false; this.state = -1; this.shortcuts = [{ pattern : 'f1', description : this.title }]; fm.bind('load', function() { var parts = self.options.view || ['about', 'shortcuts', 'help', 'integrations', 'debug'], i, helpSource, tabBase, tabNav, tabs, delta; // remove 'preference' tab, it moved to command 'preference' if ((i = $.inArray('preference', parts)) !== -1) { parts.splice(i, 1); } // debug tab require jQueryUI Tabs Widget if (! $.fn.tabs) { if ((i = $.inArray(parts, 'debug')) !== -1) { parts.splice(i, 1); } } $.each(parts, function(i, title) { html.push(tab[r](/\{id\}/g, title)[r](/\{title\}/, fm.i18n(title))); }); html.push('
            '); $.inArray('about', parts) !== -1 && about(); $.inArray('shortcuts', parts) !== -1 && shortcuts(); if ($.inArray('help', parts) !== -1) { helpSource = fm.i18nBaseUrl + 'help/%s.html.js'; help(); } $.inArray('integrations', parts) !== -1 && integrations(); $.inArray('debug', parts) !== -1 && debug(); html.push('
            '); content = $(html.join('')); content.find('.ui-tabs-nav li') .on('mouseenter mouseleave', function(e) { $(this).toggleClass('ui-state-hover', e.type === 'mouseenter'); }) .on('focus blur', 'a', function(e) { $(e.delegateTarget).toggleClass('ui-state-focus', e.type === 'focusin'); }) .children() .on('click', function(e) { var link = $(this); e.preventDefault(); e.stopPropagation(); link.parent().addClass(clTabActive).siblings().removeClass(clTabActive); content.children('.ui-tabs-panel').hide().filter(link.attr('href')).show(); }) .filter(':first').trigger('click'); if (useInteg) { tabInteg = content.find('.elfinder-help-tab-integrations').hide(); integDIV = content.find('#'+fm.namespace+'-help-integrations').hide().append($('
            ').html(fm.i18n('integrationWith'))); fm.bind('helpIntegration', function(e) { var ul = integDIV.children('ul:first'), data, elm, cmdUL, cmdCls; if (e.data) { if ($.isPlainObject(e.data)) { data = Object.assign({ link: '', title: '', banner: '' }, e.data); if (data.title || data.link) { if (!data.title) { data.title = data.link; } if (data.link) { elm = $('').attr('href', data.link).attr('target', '_blank').text(data.title); } else { elm = $('').text(data.title); } if (data.banner) { elm = $('').append($('').attr(data.banner), elm); } } } else { elm = $(e.data); elm.filter('a').each(function() { var tgt = $(this); if (!tgt.attr('target')) { tgt.attr('target', '_blank');; } }); } if (elm) { tabInteg.show(); if (!ul.length) { ul = $('
              ').appendTo(integDIV); } if (data && data.cmd) { cmdCls = 'elfinder-help-integration-' + data.cmd; cmdUL = ul.find('ul.' + cmdCls); if (!cmdUL.length) { cmdUL = $('
                '); ul.append($('
              • ').append($('').html(fm.i18n('cmd'+data.cmd))).append(cmdUL)); } elm = cmdUL.append($('
              • ').append(elm)); } else { ul.append($('
              • ').append(elm)); } } } }).bind('themechange', function() { content.find('div.elfinder-help-term-theme').replaceWith(getTheme()); }); } // debug if (useDebug) { tabDebug = content.find('.elfinder-help-tab-debug').hide(); debugDIV = content.find('#'+fm.namespace+'-help-debug').children('div:first'); debugUL = debugDIV.children('ul:first').on('click', function(e) { e.preventDefault(); e.stopPropagation(); }); self.debug = {}; fm.bind('backenddebug', function(e) { // CAUTION: DO NOT TOUCH `e.data` if (useDebug && e.data && e.data.debug) { self.debug = { options : e.data.options, debug : Object.assign({ cmd : fm.currentReqCmd }, e.data.debug) }; if (self.dialog) { debugRender(); } } }); } content.find('#'+fm.namespace+'-help-about').find('.apiver').text(fm.api); self.dialog = self.fmDialog(content, { title : self.title, width : 530, maxWidth: 'window', maxHeight: 'window', autoOpen : false, destroyOnClose : false, close : function() { if (useDebug) { tabDebug.hide(); debugDIV.tabs('destroy'); } opened = false; } }) .on('click', function(e) { e.stopPropagation(); }) .css({ overflow: 'hidden' }); tabBase = self.dialog.children('.ui-tabs'); tabNav = tabBase.children('.ui-tabs-nav:first'); tabs = tabBase.children('.ui-tabs-panel'); delta = self.dialog.outerHeight(true) - self.dialog.height(); self.dialog.closest('.ui-dialog').on('resize', function() { tabs.height(self.dialog.height() - delta - tabNav.outerHeight(true) - 20); }); if (helpSource) { self.dialog.one('initContents', function() { $.ajax({ url: self.options.helpSource? self.options.helpSource : helpSource.replace('%s', fm.lang), dataType: 'html' }).done(function(source) { $('#'+fm.namespace+'-help-help').html(source); }).fail(function() { $.ajax({ url: helpSource.replace('%s', 'en'), dataType: 'html' }).done(function(source) { $('#'+fm.namespace+'-help-help').html(source); }); }); }); } self.state = 0; fm.trigger('helpBuilded', self.dialog); }).one('open', function() { var debug = false; fm.one('backenddebug', function() { debug =true; }).one('opendone', function() { requestAnimationFrame(function() { if (! debug && useDebug) { useDebug = false; tabDebug.hide(); debugDIV.hide(); debugUL.hide(); } }); }); }); this.getstate = function() { return 0; }; this.exec = function(sel, opts) { var tab = opts? opts.tab : void(0), debugShow = function() { if (useDebug) { debugDIV.tabs(); debugUL.find('a:first').trigger('click'); tabDebug.show(); opened = true; } }; debugShow(); this.dialog.trigger('initContents').elfinderdialog('open').find((tab? '.elfinder-help-tab-'+tab : '.ui-tabs-nav li') + ' a:first').trigger('click'); return $.Deferred().resolve(); }; }).prototype = { forceLoad : true }; // this is required command /* * File: /js/commands/hidden.js */ /** * @class elFinder command "hidden" * Always hidden command for uiCmdMap * * @author Naoki Sawada **/ elFinder.prototype.commands.hidden = function() { this.hidden = true; this.updateOnSelect = false; this.getstate = function() { return -1; }; }; /* * File: /js/commands/hide.js */ /** * @class elFinder command "hide". * folders/files to hide as personal setting. * * @type elFinder.command * @author Naoki Sawada */ elFinder.prototype.commands.hide = function() { var self = this, nameCache = {}, hideData, hideCnt, cMenuType, sOrigin; this.syncTitleOnChange = true; this.shortcuts = [{ pattern : 'ctrl+shift+dot', description : this.fm.i18n('toggleHidden') }]; this.init = function() { var fm = this.fm; hideData = fm.storage('hide') || {items: {}}; hideCnt = Object.keys(hideData.items).length; this.title = fm.i18n(hideData.show? 'hideHidden' : 'showHidden'); self.update(void(0), self.title); }; this.fm.bind('select contextmenucreate closecontextmenu', function(e, fm) { var sel = (e.data? (e.data.selected || e.data.targets) : null) || fm.selected(); if (e.type === 'select' && e.data) { sOrigin = e.data.origin; } else if (e.type === 'contextmenucreate') { cMenuType = e.data.type; } if (!sel.length || (((e.type !== 'contextmenucreate' && sOrigin !== 'navbar') || cMenuType === 'cwd') && sel[0] === fm.cwd().hash)) { self.title = fm.i18n(hideData.show? 'hideHidden' : 'showHidden'); } else { self.title = fm.i18n('cmdhide'); } if (e.type !== 'closecontextmenu') { self.update(cMenuType === 'cwd'? (hideCnt? 0 : -1) : void(0), self.title); } else { cMenuType = ''; requestAnimationFrame(function() { self.update(void(0), self.title); }); } }); this.getstate = function(sel) { return (this.fm.cookieEnabled && cMenuType !== 'cwd' && (sel || this.fm.selected()).length) || hideCnt? 0 : -1; }; this.exec = function(hashes, opts) { var fm = this.fm, dfrd = $.Deferred() .done(function() { fm.trigger('hide', {items: items, opts: opts}); }) .fail(function(error) { fm.error(error); }), o = opts || {}, items = o.targets? o.targets : (hashes || fm.selected()), added = [], removed = [], notifyto, files, res; hideData = fm.storage('hide') || {}; if (!$.isPlainObject(hideData)) { hideData = {}; } if (!$.isPlainObject(hideData.items)) { hideData.items = {}; } if (opts._currentType === 'shortcut' || !items.length || (opts._currentType !== 'navbar' && sOrigin !=='navbar' && items[0] === fm.cwd().hash)) { if (hideData.show) { o.hide = true; } else if (Object.keys(hideData.items).length) { o.show = true; } } if (o.reset) { o.show = true; hideCnt = 0; } if (o.show || o.hide) { if (o.show) { hideData.show = true; } else { delete hideData.show; } if (o.show) { fm.storage('hide', o.reset? null : hideData); self.title = fm.i18n('hideHidden'); self.update(o.reset? -1 : void(0), self.title); $.each(hideData.items, function(h) { var f = fm.file(h, true); if (f && (fm.searchStatus.state || !f.phash || fm.file(f.phash))) { added.push(f); } }); if (added.length) { fm.updateCache({added: added}); fm.add({added: added}); } if (o.reset) { hideData = {items: {}}; } return dfrd.resolve(); } items = Object.keys(hideData.items); } if (items.length) { $.each(items, function(i, h) { var f; if (!hideData.items[h]) { f = fm.file(h); if (f) { nameCache[h] = f.i18 || f.name; } hideData.items[h] = nameCache[h]? nameCache[h] : h; } }); hideCnt = Object.keys(hideData.items).length; files = this.files(items); fm.storage('hide', hideData); fm.remove({removed: items}); if (hideData.show) { this.exec(void(0), {hide: true}); } if (!o.hide) { res = {}; res.undo = { cmd : 'hide', callback : function() { var nData = fm.storage('hide'); if (nData) { $.each(items, function(i, h) { delete nData.items[h]; }); hideCnt = Object.keys(nData.items).length; fm.storage('hide', nData); fm.trigger('hide', {items: items, opts: {}}); self.update(hideCnt? 0 : -1); } fm.updateCache({added: files}); fm.add({added: files}); } }; res.redo = { cmd : 'hide', callback : function() { return fm.exec('hide', void(0), {targets: items}); } }; } } return dfrd.state() == 'rejected' ? dfrd : dfrd.resolve(res); }; }; /* * File: /js/commands/home.js */ (elFinder.prototype.commands.home = function() { this.title = 'Home'; this.alwaysEnabled = true; this.updateOnSelect = false; this.shortcuts = [{ pattern : 'ctrl+home ctrl+shift+up', description : 'Home' }]; this.getstate = function() { var root = this.fm.root(), cwd = this.fm.cwd().hash; return root && cwd && root != cwd ? 0: -1; }; this.exec = function() { return this.fm.exec('open', this.fm.root()); }; }).prototype = { forceLoad : true }; // this is required command /* * File: /js/commands/info.js */ /** * @class elFinder command "info". * Display dialog with file properties. * * @author Dmitry (dio) Levashov, dio@std42.ru **/ (elFinder.prototype.commands.info = function() { var m = 'msg', fm = this.fm, spclass = 'elfinder-spinner', btnclass = 'elfinder-info-button', msg = { calc : fm.i18n('calc'), size : fm.i18n('size'), unknown : fm.i18n('unknown'), path : fm.i18n('path'), aliasfor : fm.i18n('aliasfor'), modify : fm.i18n('modify'), perms : fm.i18n('perms'), locked : fm.i18n('locked'), dim : fm.i18n('dim'), kind : fm.i18n('kind'), files : fm.i18n('files'), folders : fm.i18n('folders'), roots : fm.i18n('volumeRoots'), items : fm.i18n('items'), yes : fm.i18n('yes'), no : fm.i18n('no'), link : fm.i18n('link'), owner : fm.i18n('owner'), group : fm.i18n('group'), perm : fm.i18n('perm'), getlink : fm.i18n('getLink') }, applyZWSP = function(str, remove) { if (remove) { return str.replace(/\u200B/g, ''); } else { return str.replace(/(\/|\\)/g, "$1\u200B"); } }; this.items = ['size', 'aliasfor', 'path', 'link', 'dim', 'modify', 'perms', 'locked', 'owner', 'group', 'perm']; if (this.options.custom && Object.keys(this.options.custom).length) { $.each(this.options.custom, function(name, details) { details.label && this.items.push(details.label); }); } this.tpl = { main : '
                {title}
                {content}
                ', itemTitle : '{name}{kind}', groupTitle : '{items}: {num}', row : '{label} : {value}', spinner : '{text} ' }; this.alwaysEnabled = true; this.updateOnSelect = false; this.shortcuts = [{ pattern : 'ctrl+i' }]; this.init = function() { $.each(msg, function(k, v) { msg[k] = fm.i18n(v); }); }; this.getstate = function() { return 0; }; this.exec = function(hashes) { var files = this.files(hashes); if (! files.length) { files = this.files([ this.fm.cwd().hash ]); } var self = this, fm = this.fm, o = this.options, tpl = this.tpl, row = tpl.row, cnt = files.length, content = [], view = tpl.main, l = '{label}', v = '{value}', reqs = [], reqDfrd = null, opts = { title : fm.i18n('selectionInfo'), width : 'auto', close : function() { $(this).elfinderdialog('destroy'); if (reqDfrd && reqDfrd.state() === 'pending') { reqDfrd.reject(); } $.grep(reqs, function(r) { r && r.state() === 'pending' && r.reject(); }); } }, count = [], replSpinner = function(msg, name, className) { dialog.find('.'+spclass+'-'+name).parent().html(msg).addClass(className || ''); }, id = fm.namespace+'-info-'+$.map(files, function(f) { return f.hash; }).join('-'), dialog = fm.getUI().find('#'+id), customActions = [], style = '', hashClass = 'elfinder-font-mono elfinder-info-hash', getHashAlgorisms = [], ndialog = fm.ui.notify, size, tmb, file, title, dcnt, rdcnt, path, hideItems, hashProg; if (ndialog.is(':hidden') && ndialog.children('.elfinder-notify').length) { ndialog.elfinderdialog('open').height('auto'); } if (!cnt) { return $.Deferred().reject(); } if (dialog.length) { dialog.elfinderdialog('toTop'); return $.Deferred().resolve(); } hideItems = fm.storage('infohides') || fm.arrayFlip(o.hideItems, true); if (cnt === 1) { file = files[0]; if (file.icon) { style = ' '+fm.getIconStyle(file); } view = view.replace('{dirclass}', file.csscls? fm.escape(file.csscls) : '').replace('{class}', fm.mime2class(file.mime)).replace('{style}', style); title = tpl.itemTitle.replace('{name}', fm.escape(file.i18 || file.name)).replace('{kind}', ''+fm.mime2kind(file)+''); tmb = fm.tmb(file); if (!file.read) { size = msg.unknown; } else if (file.mime != 'directory' || file.alias) { size = fm.formatSize(file.size); } else { size = tpl.spinner.replace('{text}', msg.calc).replace('{name}', 'size'); count.push(file.hash); } !hideItems.size && content.push(row.replace(l, msg.size).replace(v, size)); !hideItems.aleasfor && file.alias && content.push(row.replace(l, msg.aliasfor).replace(v, file.alias)); if (!hideItems.path) { if (path = fm.path(file.hash, true)) { content.push(row.replace(l, msg.path).replace(v, applyZWSP(fm.escape(path))).replace('{class}', 'elfinder-info-path')); } else { content.push(row.replace(l, msg.path).replace(v, tpl.spinner.replace('{text}', msg.calc).replace('{name}', 'path')).replace('{class}', 'elfinder-info-path')); reqs.push(fm.path(file.hash, true, {notify: null}) .fail(function() { replSpinner(msg.unknown, 'path'); }) .done(function(path) { replSpinner(applyZWSP(path), 'path'); })); } } if (!hideItems.link && file.read) { var href, name_esc = fm.escape(file.name); if (file.url == '1') { content.push(row.replace(l, msg.link).replace(v, '')); } else { if (file.url) { href = file.url; } else if (file.mime === 'directory') { if (o.nullUrlDirLinkSelf && file.url === null) { var loc = window.location; href = loc.pathname + loc.search + '#elf_' + file.hash; } else if (file.url !== '' && fm.option('url', (!fm.isRoot(file) && file.phash) || file.hash)) { href = fm.url(file.hash); } } else { href = fm.url(file.hash); } href && content.push(row.replace(l, msg.link).replace(v, ''+name_esc+'')); } } if (!hideItems.dim) { if (file.dim) { // old api content.push(row.replace(l, msg.dim).replace(v, file.dim)); } else if (file.mime.indexOf('image') !== -1) { if (file.width && file.height) { content.push(row.replace(l, msg.dim).replace(v, file.width+'x'+file.height)); } else if (file.size && file.size !== '0') { content.push(row.replace(l, msg.dim).replace(v, tpl.spinner.replace('{text}', msg.calc).replace('{name}', 'dim'))); reqs.push(fm.request({ data : {cmd : 'dim', target : file.hash}, preventDefault : true }) .fail(function() { replSpinner(msg.unknown, 'dim'); }) .done(function(data) { replSpinner(data.dim || msg.unknown, 'dim'); if (data.dim) { var dim = data.dim.split('x'); var rfile = fm.file(file.hash); rfile.width = dim[0]; rfile.height = dim[1]; } })); } } } !hideItems.modify && content.push(row.replace(l, msg.modify).replace(v, fm.formatDate(file))); !hideItems.perms && content.push(row.replace(l, msg.perms).replace(v, fm.formatPermissions(file))); !hideItems.locked && content.push(row.replace(l, msg.locked).replace(v, file.locked ? msg.yes : msg.no)); !hideItems.owner && file.owner && content.push(row.replace(l, msg.owner).replace(v, file.owner)); !hideItems.group && file.group && content.push(row.replace(l, msg.group).replace(v, file.group)); !hideItems.perm && file.perm && content.push(row.replace(l, msg.perm).replace(v, fm.formatFileMode(file.perm))); // Get MD5, SHA hashes if (window.ArrayBuffer && (fm.options.cdns.sparkmd5 || fm.options.cdns.jssha) && file.mime !== 'directory' && file.size > 0 && (!o.showHashMaxsize || file.size <= o.showHashMaxsize)) { getHashAlgorisms = []; $.each(fm.storage('hashchekcer') || o.showHashAlgorisms, function(i, n) { if (!file[n]) { content.push(row.replace(l, fm.i18n(n)).replace(v, tpl.spinner.replace('{text}', msg.calc).replace('{name}', n))); getHashAlgorisms.push(n); } else { content.push(row.replace(l, fm.i18n(n)).replace(v, file[n]).replace('{class}', hashClass)); } }); if (getHashAlgorisms.length) { hashProg = $('
                '); reqs.push( fm.getContentsHashes(file.hash, getHashAlgorisms, o.showHashOpts, { progressBar : hashProg }).progress(function(hashes) { $.each(getHashAlgorisms, function(i, n) { if (hashes[n]) { replSpinner(hashes[n], n, hashClass); } }); }).always(function() { $.each(getHashAlgorisms, function(i, n) { replSpinner(msg.unknown, n); }); }) ); } } // Add custom info fields if (o.custom) { $.each(o.custom, function(name, details) { if ( !hideItems[details.label] && (!details.mimes || $.grep(details.mimes, function(m){return (file.mime === m || file.mime.indexOf(m+'/') === 0)? true : false;}).length) && (!details.hashRegex || file.hash.match(details.hashRegex)) ) { // Add to the content content.push(row.replace(l, fm.i18n(details.label)).replace(v , details.tpl.replace('{id}', id))); // Register the action if (details.action && (typeof details.action == 'function')) { customActions.push(details.action); } } }); } } else { view = view.replace('{class}', 'elfinder-cwd-icon-group'); title = tpl.groupTitle.replace('{items}', msg.items).replace('{num}', cnt); dcnt = $.grep(files, function(f) { return f.mime == 'directory' ? true : false ; }).length; if (!dcnt) { size = 0; $.each(files, function(h, f) { var s = parseInt(f.size); if (s >= 0 && size >= 0) { size += s; } else { size = 'unknown'; } }); content.push(row.replace(l, msg.kind).replace(v, msg.files)); !hideItems.size && content.push(row.replace(l, msg.size).replace(v, fm.formatSize(size))); } else { rdcnt = $.grep(files, function(f) { return f.mime === 'directory' && (! f.phash || f.isroot)? true : false ; }).length; dcnt -= rdcnt; content.push(row.replace(l, msg.kind).replace(v, (rdcnt === cnt || dcnt === cnt)? msg[rdcnt? 'roots' : 'folders'] : $.map({roots: rdcnt, folders: dcnt, files: cnt - rdcnt - dcnt}, function(c, t) { return c? msg[t]+' '+c : null; }).join(', '))); !hideItems.size && content.push(row.replace(l, msg.size).replace(v, tpl.spinner.replace('{text}', msg.calc).replace('{name}', 'size'))); count = $.map(files, function(f) { return f.hash; }); } } view = view.replace('{title}', title).replace('{content}', content.join('').replace(/{class}/g, '')); dialog = self.fmDialog(view, opts); dialog.attr('id', id).one('mousedown', '.elfinder-info-path', function() { $(this).html(applyZWSP($(this).html(), true)); }); if (getHashAlgorisms.length) { hashProg.appendTo(dialog.find('.'+spclass+'-'+getHashAlgorisms[0]).parent()); } if (fm.UA.Mobile && $.fn.tooltip) { dialog.children('.ui-dialog-content .elfinder-info-title').tooltip({ classes: { 'ui-tooltip': 'elfinder-ui-tooltip ui-widget-shadow' }, tooltipClass: 'elfinder-ui-tooltip ui-widget-shadow', track: true }); } if (file && file.url == '1') { dialog.on('click', '.'+spclass+'-url', function(){ $(this).parent().html(tpl.spinner.replace('{text}', fm.i18n('ntfurl')).replace('{name}', 'url')); fm.request({ data : {cmd : 'url', target : file.hash}, preventDefault : true }) .fail(function() { replSpinner(name_esc, 'url'); }) .done(function(data) { if (data.url) { replSpinner(''+name_esc+'' || name_esc, 'url'); var rfile = fm.file(file.hash); rfile.url = data.url; } else { replSpinner(name_esc, 'url'); } }); }); } // load thumbnail if (tmb) { $('') .on('load', function() { dialog.find('.elfinder-cwd-icon').addClass(tmb.className).css('background-image', "url('"+tmb.url+"')"); }) .attr('src', tmb.url); } // send request to count total size if (count.length) { reqDfrd = fm.getSize(count).done(function(data) { replSpinner(data.formated, 'size'); }).fail(function() { replSpinner(msg.unknown, 'size'); }); } // call custom actions if (customActions.length) { $.each(customActions, function(i, action) { try { action(file, fm, dialog); } catch(e) { fm.debug('error', e); } }); } return $.Deferred().resolve(); }; }).prototype = { forceLoad : true }; // this is required command /* * File: /js/commands/mkdir.js */ /** * @class elFinder command "mkdir" * Create new folder * * @author Dmitry (dio) Levashov **/ elFinder.prototype.commands.mkdir = function() { var fm = this.fm, self = this, curOrg; this.value = ''; this.disableOnSearch = true; this.updateOnSelect = false; this.syncTitleOnChange = true; this.mime = 'directory'; this.prefix = 'untitled folder'; this.exec = function(select, cOpts) { var onCwd; if (select && select.length && cOpts && cOpts._currentType && cOpts._currentType === 'navbar') { this.origin = cOpts._currentType; this.data = { target: select[0] }; } else { onCwd = fm.cwd().hash === select[0]; this.origin = curOrg && !onCwd? curOrg : 'cwd'; delete this.data; } if (! select && ! this.options.intoNewFolderToolbtn) { fm.getUI('cwd').trigger('unselectall'); } //this.move = (!onCwd && curOrg !== 'navbar' && fm.selected().length)? true : false; this.move = this.value === fm.i18n('cmdmkdirin'); return fm.res('mixin', 'make').bind(self)(); }; this.shortcuts = [{ pattern : 'ctrl+shift+n' }]; this.init = function() { if (this.options.intoNewFolderToolbtn) { this.syncTitleOnChange = true; } }; fm.bind('select contextmenucreate closecontextmenu', function(e) { var sel = (e.data? (e.data.selected || e.data.targets) : null) || fm.selected(); self.className = 'mkdir'; curOrg = e.data && sel.length? (e.data.origin || e.data.type || '') : ''; if (!self.options.intoNewFolderToolbtn && curOrg === '') { curOrg = 'cwd'; } if (sel.length && curOrg !== 'navbar' && curOrg !== 'cwd' && fm.cwd().hash !== sel[0]) { self.title = fm.i18n('cmdmkdirin'); self.className += ' elfinder-button-icon-mkdirin'; } else { self.title = fm.i18n('cmdmkdir'); } if (e.type !== 'closecontextmenu') { self.update(void(0), self.title); } else { requestAnimationFrame(function() { self.update(void(0), self.title); }); } }); this.getstate = function(select) { var cwd = fm.cwd(), sel = (curOrg === 'navbar' || (select && select[0] !== cwd.hash))? this.files(select || fm.selected()) : [], cnt = sel.length, filter = function(files) { var fres = true; return $.grep(files, function(f) { fres = fres && f.read && ! f.locked? true : false; return fres; }); }; if (curOrg === 'navbar') { return cnt && sel[0].write && sel[0].read? 0 : -1; } else { return cwd.write && (!cnt || filter(sel).length == cnt)? 0 : -1; } }; }; /* * File: /js/commands/mkfile.js */ /** * @class elFinder command "mkfile" * Create new empty file * * @author Dmitry (dio) Levashov **/ elFinder.prototype.commands.mkfile = function() { var self = this; this.disableOnSearch = true; this.updateOnSelect = false; this.mime = 'text/plain'; this.prefix = 'untitled file.txt'; this.variants = []; this.getTypeName = function(mime, type) { var fm = self.fm, name; if (name = fm.messages['kind' + fm.kinds[mime]]) { name = fm.i18n(['extentiontype', type.toUpperCase(), name]); } else { name = fm.i18n(['extentionfile', type.toUpperCase()]); } return name; }; this.fm.bind('open reload canMakeEmptyFile', function() { var fm = self.fm, hides = fm.getCommand('edit').getMkfileHides(); self.variants = []; if (fm.mimesCanMakeEmpty) { $.each(fm.mimesCanMakeEmpty, function(mime, type) { type && !hides[mime] && fm.uploadMimeCheck(mime) && self.variants.push([mime, self.getTypeName(mime, type)]); }); } self.change(); }); this.getstate = function() { return this.fm.cwd().write ? 0 : -1; }; this.exec = function(_dum, mime) { var fm = self.fm, type, err; if (type = fm.mimesCanMakeEmpty[mime]) { if (fm.uploadMimeCheck(mime)) { this.mime = mime; this.prefix = fm.i18n(['untitled file', type]); return fm.res('mixin', 'make').bind(self)(); } err = ['errMkfile', self.getTypeName(mime, type)]; } return $.Deferred().reject(err); }; }; /* * File: /js/commands/netmount.js */ /** * @class elFinder command "netmount" * Mount network volume with user credentials. * * @author Dmitry (dio) Levashov **/ elFinder.prototype.commands.netmount = function() { var self = this, hasMenus = false, content; this.alwaysEnabled = true; this.updateOnSelect = false; this.drivers = []; this.handlers = { load : function() { var fm = self.fm; if (fm.cookieEnabled) { fm.one('open', function() { self.drivers = fm.netDrivers; if (self.drivers.length) { $.each(self.drivers, function() { var d = self.options[this]; if (d) { hasMenus = true; if (d.integrateInfo) { fm.trigger('helpIntegration', Object.assign({cmd: 'netmount'}, d.integrateInfo)); } } }); } }); } } }; this.getstate = function() { return hasMenus ? 0 : -1; }; this.exec = function() { var fm = self.fm, dfrd = $.Deferred(), o = self.options, create = function() { var winFocus = function() { inputs.protocol.trigger('change', 'winfocus'); }, inputs = { protocol : $('') .on('change', function(e, data){ var protocol = this.value; content.find('.elfinder-netmount-tr').hide(); content.find('.elfinder-netmount-tr-'+protocol).show(); dialogNode && dialogNode.children('.ui-dialog-buttonpane:first').find('button').show(); if (typeof o[protocol].select == 'function') { o[protocol].select(fm, e, data); } }) .addClass('ui-corner-all') }, opts = { title : fm.i18n('netMountDialogTitle'), resizable : true, modal : true, destroyOnClose : false, open : function() { $(window).on('focus.'+fm.namespace, winFocus); inputs.protocol.trigger('change'); }, close : function() { dfrd.state() == 'pending' && dfrd.reject(); $(window).off('focus.'+fm.namespace, winFocus); }, buttons : {} }, doMount = function() { var protocol = inputs.protocol.val(), data = {cmd : 'netmount', protocol: protocol}, cur = o[protocol], mnt2res; $.each(content.find('input.elfinder-netmount-inputs-'+protocol), function(name, input) { var val, elm; elm = $(input); if (elm.is(':radio,:checkbox')) { if (elm.is(':checked')) { val = elm.val().trim(); } } else { val = elm.val().trim(); } if (val) { data[input.name] = val; } }); if (!data.host) { return fm.trigger('error', {error : 'errNetMountHostReq', opts : {modal: true}}); } if (data.mnt2res) { mnt2res = true; } fm.request({data : data, notify : {type : 'netmount', cnt : 1, hideCnt : true}}) .done(function(data) { var pdir; if (data.added && data.added.length) { mnt2res && inputs.protocol.trigger('change', 'reset'); if (data.added[0].phash) { if (pdir = fm.file(data.added[0].phash)) { if (! pdir.dirs) { pdir.dirs = 1; fm.change({ changed: [ pdir ] }); } } } fm.one('netmountdone', function() { fm.exec('open', data.added[0].hash); }); } dfrd.resolve(); }) .fail(function(error) { if (cur.fail && typeof cur.fail == 'function') { cur.fail(fm, fm.parseError(error)); } dfrd.reject(error); }); self.dialog.elfinderdialog('close'); }, form = $('
                ').on('keydown', 'input', function(e) { var comp = true, next; if (e.keyCode === $.ui.keyCode.ENTER) { $.each(form.find('input:visible:not(.elfinder-input-optional)'), function() { if ($(this).val() === '') { comp = false; next = $(this); return false; } }); if (comp) { doMount(); } else { next.trigger('focus'); } } }), hidden = $('
                '), dialog; content = $('
                ') .append($('').append($(''+fm.i18n('protocol')+'')).append($('').append(inputs.protocol))); $.each(self.drivers, function(i, protocol) { if (o[protocol]) { inputs.protocol.append(''); $.each(o[protocol].inputs, function(name, input) { input.attr('name', name); if (input.attr('type') != 'hidden') { input.addClass('ui-corner-all elfinder-netmount-inputs-'+protocol); content.append($('').addClass('elfinder-netmount-tr elfinder-netmount-tr-'+protocol).append($(''+fm.i18n(name)+'')).append($('').append(input))); } else { input.addClass('elfinder-netmount-inputs-'+protocol); hidden.append(input); } }); o[protocol].protocol = inputs.protocol; } }); content.append(hidden); content.find('.elfinder-netmount-tr').hide(); content.find('.elfinder-netmount-tr-' + self.drivers[0]).show(); opts.buttons[fm.i18n('btnMount')] = doMount; opts.buttons[fm.i18n('btnCancel')] = function() { self.dialog.elfinderdialog('close'); }; content.find('select,input').addClass('elfinder-tabstop'); dialog = self.fmDialog(form.append(content), opts).ready(function() { inputs.protocol.trigger('change'); dialog.elfinderdialog('posInit'); }); dialogNode = dialog.closest('.ui-dialog'); return dialog; }, dialogNode; if (!self.dialog) { self.dialog = create(); } else { self.dialog.elfinderdialog('open'); } return dfrd.promise(); }; self.fm.bind('netmount', function(e) { var d = e.data || null, o = self.options, done = function() { if (o[d.protocol] && typeof o[d.protocol].done == 'function') { o[d.protocol].done(self.fm, d); content.find('select,input').addClass('elfinder-tabstop'); self.dialog.elfinderdialog('tabstopsInit'); } }; if (d && d.protocol) { if (d.mode && d.mode === 'redirect') { // To support of third-party cookie blocking (ITP) on CORS // On iOS and iPadOS 13.4 and Safari 13.1 on macOS, the session cannot be continued when redirecting OAuth in CORS mode self.fm.request({ data : {cmd : 'netmount', protocol : d.protocol, host: d.host, user : 'init', pass : 'return', options: d.options}, preventDefault : true }).done(function(data) { d = JSON.parse(data.body); done(); }); } else { done(); } } }); }; elFinder.prototype.commands.netunmount = function() { var self = this; this.alwaysEnabled = true; this.updateOnSelect = false; this.drivers = []; this.handlers = { load : function() { this.drivers = this.fm.netDrivers; } }; this.getstate = function(sel) { var fm = this.fm, file; return !!sel && this.drivers.length && !this._disabled && (file = fm.file(sel[0])) && file.netkey ? 0 : -1; }; this.exec = function(hashes) { var self = this, fm = this.fm, dfrd = $.Deferred() .fail(function(error) { error && fm.error(error); }), drive = fm.file(hashes[0]), childrenRoots = function(hash) { var roots = [], work; if (fm.leafRoots) { work = []; $.each(fm.leafRoots, function(phash, hashes) { var parents = fm.parents(phash), idx, deep; if ((idx = $.inArray(hash, parents)) !== -1) { idx = parents.length - idx; $.each(hashes, function(i, h) { work.push({i: idx, hash: h}); }); } }); if (work.length) { work.sort(function(a, b) { return a.i < b.i; }); $.each(work, function(i, o) { roots.push(o.hash); }); } } return roots; }; if (this._disabled) { return dfrd.reject(); } if (dfrd.state() == 'pending') { fm.confirm({ title : self.title, text : fm.i18n('confirmUnmount', drive.name), accept : { label : 'btnUnmount', callback : function() { var target = drive.hash, roots = childrenRoots(target), requests = [], removed = [], doUmount = function() { $.when(requests).done(function() { fm.request({ data : {cmd : 'netmount', protocol : 'netunmount', host: drive.netkey, user : target, pass : 'dum'}, notify : {type : 'netunmount', cnt : 1, hideCnt : true}, preventFail : true }) .fail(function(error) { dfrd.reject(error); }) .done(function(data) { drive.volumeid && delete fm.volumeExpires[drive.volumeid]; dfrd.resolve(); }); }).fail(function(error) { if (removed.length) { fm.remove({ removed: removed }); } dfrd.reject(error); }); }; if (roots.length) { fm.confirm({ title : self.title, text : (function() { var msgs = ['unmountChildren']; $.each(roots, function(i, hash) { msgs.push([fm.file(hash).name]); }); return msgs; })(), accept : { label : 'btnUnmount', callback : function() { $.each(roots, function(i, hash) { var d = fm.file(hash); if (d.netkey) { requests.push(fm.request({ data : {cmd : 'netmount', protocol : 'netunmount', host: d.netkey, user : d.hash, pass : 'dum'}, notify : {type : 'netunmount', cnt : 1, hideCnt : true}, preventDefault : true }).done(function(data) { if (data.removed) { d.volumeid && delete fm.volumeExpires[d.volumeid]; removed = removed.concat(data.removed); } })); } }); doUmount(); } }, cancel : { label : 'btnCancel', callback : function() { dfrd.reject(); } } }); } else { requests = null; doUmount(); } } }, cancel : { label : 'btnCancel', callback : function() { dfrd.reject(); } } }); } return dfrd; }; }; /* * File: /js/commands/open.js */ /** * @class elFinder command "open" * Enter folder or open files in new windows * * @author Dmitry (dio) Levashov **/ (elFinder.prototype.commands.open = function() { var fm = this.fm, self = this; this.alwaysEnabled = true; this.noChangeDirOnRemovedCwd = true; this._handlers = { dblclick : function(e) { var arg = e.data && e.data.file? [ e.data.file ]: void(0); if (self.getstate(arg) === 0) { e.preventDefault(); fm.exec('open', arg); } }, 'select enable disable reload' : function(e) { this.update(e.type == 'disable' ? -1 : void(0)); } }; this.shortcuts = [{ pattern : 'ctrl+down numpad_enter'+(fm.OS != 'mac' && ' enter') }]; this.getstate = function(select) { var sel = this.files(select), cnt = sel.length, filter = function(files) { var fres = true; return $.grep(files, function(file) { fres = fres && file.mime == 'directory' || ! file.read ? false : true; return fres; }); }; return cnt == 1 ? (sel[0].read ? 0 : -1) : (cnt && !fm.UA.Mobile) ? ($.grep(sel, function(file) { return file.mime == 'directory' || ! file.read ? false : true;}).length == cnt ? 0 : -1) : -1; }; this.exec = function(hashes, cOpts) { var dfrd = $.Deferred().fail(function(error) { error && fm.error(error); }), files = this.files(hashes), cnt = files.length, thash = (typeof cOpts == 'object')? cOpts.thash : false, opts = this.options, into = opts.into || 'window', file, url, s, w, imgW, imgH, winW, winH, reg, link, html5dl, inline, selAct, cmd; if (!cnt && !thash) { { return dfrd.reject(); } } // open folder if (thash || (cnt == 1 && (file = files[0]) && file.mime == 'directory')) { if (!thash && file && !file.read) { return dfrd.reject(['errOpen', file.name, 'errPerm']); } else { if (fm.keyState.ctrlKey && (fm.keyState.shiftKey || typeof fm.options.getFileCallback !== 'function')) { if (fm.getCommand('opennew')) { return fm.exec('opennew', [thash? thash : file.hash]); } } return fm.request({ data : {cmd : 'open', target : thash || file.hash}, notify : {type : 'open', cnt : 1, hideCnt : true}, syncOnFail : true, lazy : false }); } } files = $.grep(files, function(file) { return file.mime != 'directory' ? true : false; }); // nothing to open or files and folders selected - do nothing if (cnt != files.length) { return dfrd.reject(); } var doOpen = function() { var openCB = function(url) { var link = $('').hide().appendTo($('body')); if (fm.UA.Mobile || !inline) { if (html5dl) { if (!inline) { link.attr('download', file.name); } else { link.attr('target', '_blank'); } link.attr('href', url).get(0).click(); } else { wnd = window.open(url); if (!wnd) { return dfrd.reject('errPopup'); } } } else { getOnly = (typeof opts.method === 'string' && opts.method.toLowerCase() === 'get'); if (!getOnly && url.indexOf(fm.options.url) === 0 && fm.customData && Object.keys(fm.customData).length // Since playback by POST request can not be done in Chrome, media allows GET request && !file.mime.match(/^(?:video|audio)/) ) { // Send request as 'POST' method to hide custom data at location bar url = ''; } if (into === 'window') { // set window size for image if set imgW = winW = Math.round(2 * screen.availWidth / 3); imgH = winH = Math.round(2 * screen.availHeight / 3); if (parseInt(file.width) && parseInt(file.height)) { imgW = parseInt(file.width); imgH = parseInt(file.height); } else if (file.dim) { s = file.dim.split('x'); imgW = parseInt(s[0]); imgH = parseInt(s[1]); } if (winW >= imgW && winH >= imgH) { winW = imgW; winH = imgH; } else { if ((imgW - winW) > (imgH - winH)) { winH = Math.round(imgH * (winW / imgW)); } else { winW = Math.round(imgW * (winH / imgH)); } } w = 'width='+winW+',height='+winH; wnd = window.open(url, target, w + ',top=50,left=50,scrollbars=yes,resizable=yes,titlebar=no'); } else { if (into === 'tabs') { target = file.hash; } wnd = window.open('about:blank', target); } if (!wnd) { return dfrd.reject('errPopup'); } if (url === '') { var form = document.createElement("form"); form.action = fm.options.url; form.method = 'POST'; form.target = target; form.style.display = 'none'; var params = Object.assign({}, fm.customData, { cmd: 'file', target: file.hash, _t: file.ts || parseInt(+new Date()/1000) }); $.each(params, function(key, val) { var input = document.createElement("input"); input.name = key; input.value = val; form.appendChild(input); }); document.body.appendChild(form); form.submit(); } else if (into !== 'window') { wnd.location = url; } $(wnd).trigger('focus'); } link.remove(); }, wnd, target, getOnly; try { reg = new RegExp(fm.option('dispInlineRegex'), 'i'); } catch(e) { reg = false; } // open files html5dl = (typeof $('').get(0).download === 'string'); cnt = files.length; while (cnt--) { target = 'elf_open_window'; file = files[cnt]; if (!file.read) { return dfrd.reject(['errOpen', file.name, 'errPerm']); } inline = (reg && file.mime.match(reg)); fm.openUrl(file.hash, !inline, openCB); } return dfrd.resolve(hashes); }; if (cnt > 1) { fm.confirm({ title: 'openMulti', text : ['openMultiConfirm', cnt + ''], accept : { label : 'cmdopen', callback : function() { doOpen(); } }, cancel : { label : 'btnCancel', callback : function() { dfrd.reject(); } }, buttons : (fm.getCommand('zipdl') && fm.isCommandEnabled('zipdl', fm.cwd().hash))? [ { label : 'cmddownload', callback : function() { fm.exec('download', hashes); dfrd.reject(); } } ] : [] }); } else { selAct = fm.storage('selectAction') || opts.selectAction; if (selAct) { $.each(selAct.split('/'), function() { var cmdName = this.valueOf(); if (cmdName !== 'open' && (cmd = fm.getCommand(cmdName)) && cmd.enabled()) { return false; } cmd = null; }); if (cmd) { return fm.exec(cmd.name); } } doOpen(); } return dfrd; }; }).prototype = { forceLoad : true }; // this is required command /* * File: /js/commands/opendir.js */ /** * @class elFinder command "opendir" * Enter parent folder * * @author Naoki Sawada **/ elFinder.prototype.commands.opendir = function() { this.alwaysEnabled = true; this.getstate = function() { var sel = this.fm.selected(), cnt = sel.length, wz; if (cnt !== 1) { return -1; } wz = this.fm.getUI('workzone'); return wz.hasClass('elfinder-search-result')? 0 : -1; }; this.exec = function(hashes) { var fm = this.fm, dfrd = $.Deferred(), files = this.files(hashes), cnt = files.length, hash, pcheck = null; if (!cnt || !files[0].phash) { return dfrd.reject(); } hash = files[0].phash; fm.trigger('searchend', { noupdate: true }); fm.request({ data : {cmd : 'open', target : hash}, notify : {type : 'open', cnt : 1, hideCnt : true}, syncOnFail : false }); return dfrd; }; }; /* * File: /js/commands/opennew.js */ /** * @class elFinder command "opennew" * Open folder in new window * * @author Naoki Sawada **/ elFinder.prototype.commands.opennew = function() { var fm = this.fm; this.shortcuts = [{ pattern : (typeof(fm.options.getFileCallback) === 'function'? 'shift+' : '') + 'ctrl+enter' }]; this.getstate = function(select) { var sel = this.files(select), cnt = sel.length; return cnt === 1 ? (sel[0].mime === 'directory' && sel[0].read? 0 : -1) : -1; }; this.exec = function(hashes) { var dfrd = $.Deferred(), files = this.files(hashes), cnt = files.length, opts = this.options, file, loc, url, win; // open folder to new tab (window) if (cnt === 1 && (file = files[0]) && file.mime === 'directory') { loc = window.location; if (opts.url) { url = opts.url; } else { url = loc.pathname; } if (opts.useOriginQuery) { if (!url.match(/\?/)) { url += loc.search; } else if (loc.search) { url += '&' + loc.search.substr(1); } } url += '#elf_' + file.hash; win = window.open(url, '_blank'); setTimeout(function() { win.focus(); }, 1000); return dfrd.resolve(); } else { return dfrd.reject(); } }; }; /* * File: /js/commands/paste.js */ /** * @class elFinder command "paste" * Paste filesfrom clipboard into directory. * If files pasted in its parent directory - files duplicates will created * * @author Dmitry (dio) Levashov **/ elFinder.prototype.commands.paste = function() { this.updateOnSelect = false; this.handlers = { changeclipboard : function() { this.update(); } }; this.shortcuts = [{ pattern : 'ctrl+v shift+insert' }]; this.getstate = function(dst) { if (this._disabled) { return -1; } if (dst) { if (Array.isArray(dst)) { if (dst.length != 1) { return -1; } dst = this.fm.file(dst[0]); } } else { dst = this.fm.cwd(); } return this.fm.clipboard().length && dst.mime == 'directory' && dst.write ? 0 : -1; }; this.exec = function(select, cOpts) { var self = this, fm = self.fm, opts = cOpts || {}, dst = select ? this.files(select)[0] : fm.cwd(), files = fm.clipboard(), cnt = files.length, cut = cnt ? files[0].cut : false, cmd = opts._cmd? opts._cmd : (cut? 'move' : 'copy'), error = 'err' + cmd.charAt(0).toUpperCase() + cmd.substr(1), fpaste = [], fcopy = [], dfrd = $.Deferred() .fail(function(error) { error && fm.error(error); }) .always(function() { fm.unlockfiles({files : $.map(files, function(f) { return f.hash; })}); }), copy = function(files) { return files.length && fm._commands.duplicate ? fm.exec('duplicate', files) : $.Deferred().resolve(); }, paste = function(files) { var dfrd = $.Deferred(), existed = [], hashes = {}, intersect = function(files, names) { var ret = [], i = files.length; while (i--) { $.inArray(files[i].name, names) !== -1 && ret.unshift(i); } return ret; }, confirm = function(ndx) { var i = existed[ndx], file = files[i], last = ndx == existed.length-1; if (!file) { return; } fm.confirm({ title : fm.i18n(cmd + 'Files'), text : ['errExists', file.name, cmd === 'restore'? 'confirmRest' : 'confirmRepl'], all : !last, accept : { label : 'btnYes', callback : function(all) { !last && !all ? confirm(++ndx) : paste(files); } }, reject : { label : 'btnNo', callback : function(all) { var i; if (all) { i = existed.length; while (ndx < i--) { files[existed[i]].remove = true; } } else { files[existed[ndx]].remove = true; } !last && !all ? confirm(++ndx) : paste(files); } }, cancel : { label : 'btnCancel', callback : function() { dfrd.resolve(); } }, buttons : [ { label : 'btnBackup', callback : function(all) { var i; if (all) { i = existed.length; while (ndx < i--) { files[existed[i]].rename = true; } } else { files[existed[ndx]].rename = true; } !last && !all ? confirm(++ndx) : paste(files); } } ] }); }, valid = function(names) { var exists = {}, existedArr; if (names) { if (Array.isArray(names)) { if (names.length) { if (typeof names[0] == 'string') { // elFinder <= 2.1.6 command `is` results existed = intersect(files, names); } else { $.each(names, function(i, v) { exists[v.name] = v.hash; }); existed = intersect(files, $.map(exists, function(h, n) { return n; })); $.each(files, function(i, file) { if (exists[file.name]) { hashes[exists[file.name]] = file.name; } }); } } } else { existedArr = []; existed = $.map(names, function(n) { if (typeof n === 'string') { return n; } else { // support to >=2.1.11 plugin Normalizer, Sanitizer existedArr = existedArr.concat(n); return false; } }); if (existedArr.length) { existed = existed.concat(existedArr); } existed = intersect(files, existed); hashes = names; } } existed.length ? confirm(0) : paste(files); }, paste = function(selFiles) { var renames = [], files = $.grep(selFiles, function(file) { if (file.rename) { renames.push(file.name); } return !file.remove ? true : false; }), cnt = files.length, groups = {}, args = [], targets, reqData; if (!cnt) { return dfrd.resolve(); } targets = $.map(files, function(f) { return f.hash; }); reqData = {cmd : 'paste', dst : dst.hash, targets : targets, cut : cut ? 1 : 0, renames : renames, hashes : hashes, suffix : fm.options.backupSuffix}; if (fm.api < 2.1) { reqData.src = files[0].phash; } fm.request({ data : reqData, notify : {type : cmd, cnt : cnt}, cancel : true, navigate : { toast : opts.noToast? {} : { inbuffer : {msg: fm.i18n(['complete', fm.i18n('cmd' + cmd)]), action: { cmd: 'open', msg: 'cmdopendir', data: [dst.hash], done: 'select', cwdNot: dst.hash }} } } }) .done(function(data) { var dsts = {}, added = data.added && data.added.length? data.added : null; if (cut && added) { // undo/redo $.each(files, function(i, f) { var phash = f.phash, srcHash = function(name) { var hash; $.each(added, function(i, f) { if (f.name === name) { hash = f.hash; return false; } }); return hash; }, shash = srcHash(f.name); if (shash) { if (dsts[phash]) { dsts[phash].push(shash); } else { dsts[phash] = [ shash ]; } } }); if (Object.keys(dsts).length) { data.undo = { cmd : 'move', callback : function() { var reqs = []; $.each(dsts, function(dst, targets) { reqs.push(fm.request({ data : {cmd : 'paste', dst : dst, targets : targets, cut : 1}, notify : {type : 'undo', cnt : targets.length} })); }); return $.when.apply(null, reqs); } }; data.redo = { cmd : 'move', callback : function() { return fm.request({ data : reqData, notify : {type : 'redo', cnt : cnt} }); } }; } } dfrd.resolve(data); }) .fail(function(flg) { dfrd.reject(); if (flg === 0) { // canceling fm.sync(); } }) .always(function() { fm.unlockfiles({files : files}); }); }, internames; if (!fm.isCommandEnabled(self.name, dst.hash) || !files.length) { return dfrd.resolve(); } if (fm.oldAPI) { paste(files); } else { if (!fm.option('copyOverwrite', dst.hash)) { paste(files); } else { internames = $.map(files, function(f) { return f.name; }); dst.hash == fm.cwd().hash ? valid($.map(fm.files(), function(file) { return file.phash == dst.hash ? {hash: file.hash, name: file.name} : null; })) : fm.request({ data : {cmd : 'ls', target : dst.hash, intersect : internames}, notify : {type : 'prepare', cnt : 1, hideCnt : true}, preventFail : true }) .always(function(data) { valid(data.list); }); } } return dfrd; }, parents, fparents, cutDfrd; if (!cnt || !dst || dst.mime != 'directory') { return dfrd.reject(); } if (!dst.write) { return dfrd.reject([error, files[0].name, 'errPerm']); } parents = fm.parents(dst.hash); $.each(files, function(i, file) { if (!file.read) { return !dfrd.reject([error, file.name, 'errPerm']); } if (cut && file.locked) { return !dfrd.reject(['errLocked', file.name]); } if ($.inArray(file.hash, parents) !== -1) { return !dfrd.reject(['errCopyInItself', file.name]); } if (file.mime && file.mime !== 'directory' && ! fm.uploadMimeCheck(file.mime, dst.hash)) { return !dfrd.reject([error, file.name, 'errUploadMime']); } fparents = fm.parents(file.hash); fparents.pop(); if ($.inArray(dst.hash, fparents) !== -1) { if ($.grep(fparents, function(h) { var d = fm.file(h); return d.phash == dst.hash && d.name == file.name ? true : false; }).length) { return !dfrd.reject(['errReplByChild', file.name]); } } if (file.phash == dst.hash) { fcopy.push(file.hash); } else { fpaste.push({ hash : file.hash, phash : file.phash, name : file.name }); } }); if (dfrd.state() === 'rejected') { return dfrd; } cutDfrd = $.Deferred(); if (cut && self.options.moveConfirm) { fm.confirm({ title : 'moveFiles', text : fm.i18n('confirmMove', dst.i18 || dst.name), accept : { label : 'btnYes', callback : function() { cutDfrd.resolve(); } }, cancel : { label : 'btnCancel', callback : function() { cutDfrd.reject(); } } }); } else { cutDfrd.resolve(); } cutDfrd.done(function() { $.when( copy(fcopy), paste(fpaste) ) .done(function(cr, pr) { dfrd.resolve(pr && pr.undo? pr : void(0)); }) .fail(function() { dfrd.reject(); }) .always(function() { cut && fm.clipboard([]); }); }).fail(function() { dfrd.reject(); }); return dfrd; }; }; /* * File: /js/commands/places.js */ /** * @class elFinder command "places" * Regist to Places * * @author Naoki Sawada **/ elFinder.prototype.commands.places = function() { var self = this, fm = this.fm, filter = function(hashes) { var fres = true; return $.grep(self.files(hashes), function(f) { fres = fres && f.mime == 'directory' ? true : false; return fres; }); }, places = null; this.getstate = function(select) { var sel = this.hashes(select), cnt = sel.length; return places && cnt && cnt == filter(sel).length ? 0 : -1; }; this.exec = function(hashes) { var files = this.files(hashes); places.trigger('regist', [ files ]); return $.Deferred().resolve(); }; fm.one('load', function(){ places = fm.ui.places; }); }; /* * File: /js/commands/preference.js */ /** * @class elFinder command "preference" * "Preference" dialog * * @author Naoki Sawada **/ elFinder.prototype.commands.preference = function() { var self = this, fm = this.fm, r = 'replace', tab = '
              • {title}
              • ', base = $('
                '), ul = $('